diff --git a/CMakeLists.txt b/CMakeLists.txt index ff44468..61ae522 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,11 +4,10 @@ # CMakeLists in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.16) -set(PROJECT_VER "1.9.1") +set(PROJECT_VER "2.0.0") # Add this line to disable the specific warning add_compile_options(-Wno-missing-field-initializers) include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(xiaozhi) - +project(xiaozhi) \ No newline at end of file diff --git a/dependencies.lock b/dependencies.lock index c67c105..6b24bbe 100644 --- a/dependencies.lock +++ b/dependencies.lock @@ -1,6 +1,6 @@ dependencies: 78/esp-ml307: - component_hash: 97a1eeb5274d841bbfbe50ef6b6976f028b0f53e57aee95eda57f49048d02fb9 + component_hash: 6e027bda53d9ac45ae17f33cce84c3b9fc0f5bdbe61a5b1642798d3088035a13 dependencies: - name: idf require: private @@ -8,7 +8,7 @@ dependencies: source: registry_url: https://components.espressif.com/ type: service - version: 3.3.0 + version: 3.3.3 78/esp-opus: component_hash: 8182b733f071d7bfe1e837f4c9f8649a63e4c937177f089e65772880c02f2e17 dependencies: @@ -58,7 +58,7 @@ dependencies: type: service version: 1.0.0 78/xiaozhi-fonts: - component_hash: d9cc3aad735638e558cee514103b25d2cb60afc78ef53709ffeea443b4d1c835 + component_hash: 677fa98425b8c20f3db336c81b5abdf0445ea0adf2ce40b28940daaa84c92dcb dependencies: - name: idf require: private @@ -66,7 +66,7 @@ dependencies: source: registry_url: https://components.espressif.com/ type: service - version: 1.5.1 + version: 1.5.2 chmorgan/esp-libhelix-mp3: component_hash: cbb76089dc2c5749f7b470e2e70aedc44c9da519e04eb9a67d4c7ec275229e53 dependencies: @@ -336,7 +336,7 @@ dependencies: type: service version: 1.0.1 espressif/esp_lcd_st7796: - component_hash: 00ab2872c56a4037e6d1efda104ef0da00c5296865f8f938cc7cc2fc3e99f962 + component_hash: 9e165065cf25b4575dd9f587440ad22aa94d011359d55a97fc39bb691a9fc0cd dependencies: - name: espressif/cmake_utilities registry_url: https://components.espressif.com @@ -353,7 +353,7 @@ dependencies: - esp32s2 - esp32s3 - esp32p4 - version: 1.3.2 + version: 1.3.4 espressif/esp_lcd_touch: component_hash: 779b4ba2464a3ae85681e4b860caa5fdc35801458c23f3039ee761bae7f442a4 dependencies: @@ -654,6 +654,6 @@ direct_dependencies: - waveshare/esp_lcd_sh8601 - waveshare/esp_lcd_touch_cst9217 - wvirgil123/sscma_client -manifest_hash: 1af3184e8179db5dd2d5a0a78e420c425305f4b1d7378a0340ce6fbbffd67c14 +manifest_hash: 659036190b734dad33276480a74cb2e2104cfe1b84178427bce474673a9f6e04 target: esp32s3 version: 2.0.0 diff --git a/main/.DS_Store b/main/.DS_Store deleted file mode 100644 index 15706c2..0000000 Binary files a/main/.DS_Store and /dev/null differ diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 4b495ed..90471d1 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,3 +1,39 @@ +# Define default assets files (Absolute url starting with http or https is supported) +set(ASSETS_URL_PREFIX "https://files.xiaozhi.me/assets/default/") + +set(ASSETS_PUHUI_COMMON_14_1 "${ASSETS_URL_PREFIX}none-font_puhui_common_14_1-none.bin") +set(ASSETS_XIAOZHI_WAKENET_ONLY "${ASSETS_URL_PREFIX}wn9_nihaoxiaozhi_tts-none-none.bin") +set(ASSETS_XIAOZHI_PUHUI_COMMON_14_1 "${ASSETS_URL_PREFIX}wn9_nihaoxiaozhi_tts-font_puhui_common_14_1-none.bin") +set(ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32 "${ASSETS_URL_PREFIX}wn9_nihaoxiaozhi_tts-font_puhui_common_16_4-emojis_32.bin") +set(ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_64 "${ASSETS_URL_PREFIX}wn9_nihaoxiaozhi_tts-font_puhui_common_16_4-emojis_64.bin") +set(ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64 "${ASSETS_URL_PREFIX}wn9_nihaoxiaozhi_tts-font_puhui_common_20_4-emojis_64.bin") +set(ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64 "${ASSETS_URL_PREFIX}wn9_nihaoxiaozhi_tts-font_puhui_common_30_4-emojis_64.bin") +set(ASSETS_XIAOZHI_S_WAKENET_ONLY "${ASSETS_URL_PREFIX}wn9s_nihaoxiaozhi-none-none.bin") +set(ASSETS_XIAOZHI_S_PUHUI_COMMON_14_1 "${ASSETS_URL_PREFIX}wn9s_nihaoxiaozhi-font_puhui_common_14_1-none.bin") +set(ASSETS_XIAOZHI_S_PUHUI_COMMON_16_4_EMOJI_32 "${ASSETS_URL_PREFIX}wn9s_nihaoxiaozhi-font_puhui_common_16_4-emojis_32.bin") +set(ASSETS_XIAOZHI_S_PUHUI_COMMON_20_4_EMOJI_32 "${ASSETS_URL_PREFIX}wn9s_nihaoxiaozhi-font_puhui_common_20_4-emojis_32.bin") +set(ASSETS_XIAOZHI_S_PUHUI_COMMON_20_4_EMOJI_64 "${ASSETS_URL_PREFIX}wn9s_nihaoxiaozhi-font_puhui_common_20_4-emojis_64.bin") +set(ASSETS_XIAOZHI_S_PUHUI_COMMON_30_4_EMOJI_64 "${ASSETS_URL_PREFIX}wn9s_nihaoxiaozhi-font_puhui_common_30_4-emojis_64.bin") + +# Embedded font files defined in `xiaozhi-fonts` component +# Basic fonts include ASCII and about 600 characters used in assets/locales +set(FONT_PUHUI_BASIC_14_1 font_puhui_basic_14_1) +set(FONT_PUHUI_BASIC_16_4 font_puhui_basic_16_4) +set(FONT_PUHUI_BASIC_20_4 font_puhui_basic_20_4) +set(FONT_PUHUI_BASIC_30_4 font_puhui_basic_30_4) +# Common fonts include about 7000 common characters generated with DeepSeek R1 tokenizer +set(FONT_PUHUI_COMMON_14_1 font_puhui_14_1) +set(FONT_PUHUI_COMMON_16_4 font_puhui_16_4) +set(FONT_PUHUI_COMMON_20_4 font_puhui_20_4) +set(FONT_PUHUI_COMMON_30_4 font_puhui_30_4) +set(FONT_AWESOME_14_1 font_awesome_14_1) +set(FONT_AWESOME_30_1 font_awesome_30_1) +set(FONT_AWESOME_16_4 font_awesome_16_4) +set(FONT_AWESOME_20_4 font_awesome_20_4) +set(FONT_AWESOME_30_4 font_awesome_30_4) + + +# Define source files set(SOURCES "audio/audio_codec.cc" "audio/audio_service.cc" "audio/codecs/no_audio_codec.cc" @@ -14,6 +50,13 @@ set(SOURCES "audio/audio_codec.cc" "display/display.cc" "display/lcd_display.cc" "display/oled_display.cc" + "display/lvgl_display/lvgl_display.cc" + "display/lvgl_display/emoji_collection.cc" + "display/lvgl_display/lvgl_theme.cc" + "display/lvgl_display/lvgl_font.cc" + "display/lvgl_display/lvgl_image.cc" + "display/lvgl_display/gif/lvgl_gif.cc" + "display/lvgl_display/gif/gifdec.c" "protocols/protocol.cc" "protocols/mqtt_protocol.cc" "protocols/websocket_protocol.cc" @@ -23,210 +66,465 @@ set(SOURCES "audio/audio_codec.cc" "ota.cc" "settings.cc" "device_state_event.cc" - + "assets.cc" + "main.cc" ) -set(INCLUDE_DIRS "." "display" "audio" "protocols") +set(INCLUDE_DIRS "." "display" "display/lvgl_display" "audio" "protocols") -# 添加板级公共文件 +# Add board common files file(GLOB BOARD_COMMON_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/boards/common/*.cc) list(APPEND SOURCES ${BOARD_COMMON_SOURCES}) list(APPEND INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/boards/common) -# 根据 BOARD_TYPE 配置添加对应的板级文件 +# Set default LVGL_TEXT_FONT and LVGL_ICON_FONT +set(LVGL_TEXT_FONT ${FONT_PUHUI_COMMON_14_1}) +set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + +# Add board files according to BOARD_TYPE +# Set default assets if the board uses partition table V2 if(CONFIG_BOARD_TYPE_BREAD_COMPACT_WIFI) set(BOARD_TYPE "bread-compact-wifi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_BREAD_COMPACT_ML307) set(BOARD_TYPE "bread-compact-ml307") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_BREAD_COMPACT_ESP32) set(BOARD_TYPE "bread-compact-esp32") elseif(CONFIG_BOARD_TYPE_BREAD_COMPACT_ESP32_LCD) set(BOARD_TYPE "bread-compact-esp32-lcd") + set(LVGL_TEXT_FONT ${FONT_PUHUI_COMMON_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) elseif(CONFIG_BOARD_TYPE_DF_K10) set(BOARD_TYPE "df-k10") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_DF_S3_AI_CAM) set(BOARD_TYPE "df-s3-ai-cam") + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_WAKENET_ONLY}) elseif(CONFIG_BOARD_TYPE_ESP_BOX_3) set(BOARD_TYPE "esp-box-3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP_BOX) set(BOARD_TYPE "esp-box") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP_BOX_LITE) set(BOARD_TYPE "esp-box-lite") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_KEVIN_BOX_1) set(BOARD_TYPE "kevin-box-1") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_KEVIN_BOX_2) set(BOARD_TYPE "kevin-box-2") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_KEVIN_C3) set(BOARD_TYPE "kevin-c3") + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_WAKENET_ONLY}) elseif(CONFIG_BOARD_TYPE_KEVIN_SP_V3_DEV) set(BOARD_TYPE "kevin-sp-v3-dev") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_KEVIN_SP_V4_DEV) set(BOARD_TYPE "kevin-sp-v4-dev") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_KEVIN_YUYING_313LCD) set(BOARD_TYPE "kevin-yuying-313lcd") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_LICHUANG_DEV) set(BOARD_TYPE "lichuang-dev") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_LICHUANG_C3_DEV) set(BOARD_TYPE "lichuang-c3-dev") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_20_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_MAGICLICK_2P4) set(BOARD_TYPE "magiclick-2p4") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_MAGICLICK_2P5) set(BOARD_TYPE "magiclick-2p5") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_MAGICLICK_C3) set(BOARD_TYPE "magiclick-c3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_MAGICLICK_C3_V2) set(BOARD_TYPE "magiclick-c3-v2") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_M5STACK_CORE_S3) set(BOARD_TYPE "m5stack-core-s3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_M5STACK_CORE_TAB5) set(BOARD_TYPE "m5stack-tab5") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ATOMS3_ECHO_BASE) set(BOARD_TYPE "atoms3-echo-base") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_ATOMS3R_ECHO_BASE) set(BOARD_TYPE "atoms3r-echo-base") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_ATOMS3R_CAM_M12_ECHO_BASE) set(BOARD_TYPE "atoms3r-cam-m12-echo-base") + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_WAKENET_ONLY}) elseif(CONFIG_BOARD_TYPE_ATOM_ECHOS3R) set(BOARD_TYPE "atom-echos3r") + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_WAKENET_ONLY}) elseif(CONFIG_BOARD_TYPE_ATOMMATRIX_ECHO_BASE) set(BOARD_TYPE "atommatrix-echo-base") elseif(CONFIG_BOARD_TYPE_XMINI_C3_V3) set(BOARD_TYPE "xmini-c3-v3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_XMINI_C3_4G) set(BOARD_TYPE "xmini-c3-4g") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_XMINI_C3) set(BOARD_TYPE "xmini-c3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_ESP32S3_KORVO2_V3) set(BOARD_TYPE "esp32s3-korvo2-v3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP_SPARKBOT) set(BOARD_TYPE "esp-sparkbot") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP_SPOT_S3) set(BOARD_TYPE "esp-spot-s3") + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_WAKENET_ONLY}) elseif(CONFIG_BOARD_TYPE_ESP_HI) set(BOARD_TYPE "esp-hi") elseif(CONFIG_BOARD_TYPE_ECHOEAR) set(BOARD_TYPE "echoear") + set(LVGL_TEXT_FONT ${FONT_PUHUI_COMMON_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) +elseif(CONFIG_BOARD_TYPE_ESP32S3_AUDIO_BOARD) + set(BOARD_TYPE "waveshare-s3-audio-board") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_AMOLED_1_8) set(BOARD_TYPE "esp32-s3-touch-amoled-1.8") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_AMOLED_2_06) set(BOARD_TYPE "waveshare-s3-touch-amoled-2.06") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_AMOLED_1_75) set(BOARD_TYPE "waveshare-s3-touch-amoled-1.75") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_1_85C) set(BOARD_TYPE "esp32-s3-touch-lcd-1.85c") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_1_85) set(BOARD_TYPE "esp32-s3-touch-lcd-1.85") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_1_46) set(BOARD_TYPE "esp32-s3-touch-lcd-1.46") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_3_5) set(BOARD_TYPE "esp32-s3-touch-lcd-3.5") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_3_5B) set(BOARD_TYPE "waveshare-s3-touch-lcd-3.5b") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_ESP32C6_LCD_1_69) set(BOARD_TYPE "waveshare-c6-lcd-1.69") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32C6_Touch_AMOLED_1_43) set(BOARD_TYPE "waveshare-c6-touch-amoled-1.43") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32P4_NANO) set(BOARD_TYPE "waveshare-p4-nano") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32P4_WIFI6_Touch_LCD_4B) set(BOARD_TYPE "waveshare-p4-wifi6-touch-lcd-4b") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32P4_WIFI6_Touch_LCD_XC) set(BOARD_TYPE "waveshare-p4-wifi6-touch-lcd-xc") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_BREAD_COMPACT_WIFI_LCD) set(BOARD_TYPE "bread-compact-wifi-lcd") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_TUDOUZI) set(BOARD_TYPE "tudouzi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_LILYGO_T_CIRCLE_S3) set(BOARD_TYPE "lilygo-t-circle-s3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_0_V1_1) set(BOARD_TYPE "lilygo-t-cameraplus-s3") -elseif(CONFIG_BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_2) - set(BOARD_TYPE "lilygo-t-cameraplus-s3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA) set(BOARD_TYPE "lilygo-t-display-s3-pro-mvsrlora") -elseif(CONFIG_BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA_NO_BATTERY) - set(BOARD_TYPE "lilygo-t-display-s3-pro-mvsrlora") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_MOVECALL_MOJI_ESP32S3) set(BOARD_TYPE "movecall-moji-esp32s3") - elseif(CONFIG_BOARD_TYPE_MOVECALL_CUICAN_ESP32S3) + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) +elseif(CONFIG_BOARD_TYPE_MOVECALL_CUICAN_ESP32S3) set(BOARD_TYPE "movecall-cuican-esp32s3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ATK_DNESP32S3) set(BOARD_TYPE "atk-dnesp32s3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ATK_DNESP32S3_BOX) set(BOARD_TYPE "atk-dnesp32s3-box") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ATK_DNESP32S3_BOX0) set(BOARD_TYPE "atk-dnesp32s3-box0") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ATK_DNESP32S3_BOX2_WIFI) set(BOARD_TYPE "atk-dnesp32s3-box2-wifi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ATK_DNESP32S3_BOX2_4G) - set(BOARD_TYPE "atk-dnesp32s3-box2-4g") + set(BOARD_TYPE "atk-dnesp32s3-box2-4g") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ATK_DNESP32S3M_WIFI) set(BOARD_TYPE "atk-dnesp32s3m-wifi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_ATK_DNESP32S3M_4G) set(BOARD_TYPE "atk-dnesp32s3m-4g") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_DU_CHATX) set(BOARD_TYPE "du-chatx") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_ESP32S3_Taiji_Pi) set(BOARD_TYPE "taiji-pi-s3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_XINGZHI_Cube_0_85TFT_WIFI) set(BOARD_TYPE "xingzhi-cube-0.85tft-wifi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_XINGZHI_Cube_0_85TFT_ML307) set(BOARD_TYPE "xingzhi-cube-0.85tft-ml307") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_XINGZHI_Cube_0_96OLED_WIFI) set(BOARD_TYPE "xingzhi-cube-0.96oled-wifi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_XINGZHI_Cube_0_96OLED_ML307) set(BOARD_TYPE "xingzhi-cube-0.96oled-ml307") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_14_1}) elseif(CONFIG_BOARD_TYPE_XINGZHI_Cube_1_54TFT_WIFI) set(BOARD_TYPE "xingzhi-cube-1.54tft-wifi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_XINGZHI_Cube_1_54TFT_ML307) set(BOARD_TYPE "xingzhi-cube-1.54tft-ml307") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_SENSECAP_WATCHER) set(BOARD_TYPE "sensecap-watcher") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_DOIT_S3_AIBOX) set(BOARD_TYPE "doit-s3-aibox") + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_WAKENET_ONLY}) elseif(CONFIG_BOARD_TYPE_MIXGO_NOVA) set(BOARD_TYPE "mixgo-nova") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_GENJUTECH_S3_1_54TFT) set(BOARD_TYPE "genjutech-s3-1.54tft") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32_CGC) set(BOARD_TYPE "esp32-cgc") + set(LVGL_TEXT_FONT ${FONT_PUHUI_COMMON_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) elseif(CONFIG_BOARD_TYPE_ESP32_CGC_144) - set(BOARD_TYPE "esp32-cgc-144") + set(BOARD_TYPE "esp32-cgc-144") + set(LVGL_TEXT_FONT ${FONT_PUHUI_COMMON_14_1}) + set(LVGL_ICON_FONT ${FONT_AWESOME_14_1}) elseif(CONFIG_BOARD_TYPE_ESP_S3_LCD_EV_Board) set(BOARD_TYPE "esp-s3-lcd-ev-board") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP_S3_LCD_EV_Board_2) set(BOARD_TYPE "esp-s3-lcd-ev-board-2") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_30_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_30_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ZHENGCHEN_1_54TFT_WIFI) set(BOARD_TYPE "zhengchen-1.54tft-wifi") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_MINSI_K08_DUAL) set(BOARD_TYPE "minsi-k08-dual") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ZHENGCHEN_1_54TFT_ML307) set(BOARD_TYPE "zhengchen-1.54tft-ml307") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_ESP32_S3_1_54_MUMA) set(BOARD_TYPE "sp-esp32-s3-1.54-muma") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32}) elseif(CONFIG_BOARD_TYPE_ESP32_S3_1_28_BOX) set(BOARD_TYPE "sp-esp32-s3-1.28-box") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_OTTO_ROBOT) set(BOARD_TYPE "otto-robot") + set(LVGL_TEXT_FONT ${FONT_PUHUI_COMMON_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) elseif(CONFIG_BOARD_TYPE_ELECTRON_BOT) set(BOARD_TYPE "electron-bot") + set(LVGL_TEXT_FONT ${FONT_PUHUI_COMMON_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) elseif(CONFIG_BOARD_TYPE_BREAD_COMPACT_WIFI_CAM) set(BOARD_TYPE "bread-compact-wifi-s3cam") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_16_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_16_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_JIUCHUAN) set(BOARD_TYPE "jiuchuan-s3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_LABPLUS_MPYTHON_V3) - set(BOARD_TYPE "labplus-mpython-v3") + set(BOARD_TYPE "labplus-mpython-v3") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_LABPLUS_LEDONG_V2) - set(BOARD_TYPE "labplus-ledong-v2") + set(BOARD_TYPE "labplus-ledong-v2") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64}) elseif(CONFIG_BOARD_TYPE_SURFER_C3_1_14TFT) set(BOARD_TYPE "surfer-c3-1.14tft") + set(LVGL_TEXT_FONT ${FONT_PUHUI_BASIC_20_4}) + set(LVGL_ICON_FONT ${FONT_AWESOME_20_4}) + set(DEFAULT_ASSETS ${ASSETS_XIAOZHI_S_PUHUI_COMMON_20_4_EMOJI_32}) endif() + file(GLOB BOARD_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD_TYPE}/*.cc ${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD_TYPE}/*.c ) list(APPEND SOURCES ${BOARD_SOURCES}) +# Select audio processor according to Kconfig if(CONFIG_USE_AUDIO_PROCESSOR) list(APPEND SOURCES "audio/processors/afe_audio_processor.cc") else() @@ -240,7 +538,7 @@ elseif(CONFIG_USE_CUSTOM_WAKE_WORD) list(APPEND SOURCES "audio/wake_words/custom_wake_word.cc") endif() -# 根据Kconfig选择语言目录 +# Select language directory according to Kconfig if(CONFIG_LANGUAGE_ZH_CN) set(LANG_DIR "zh-CN") elseif(CONFIG_LANGUAGE_ZH_TW) @@ -287,13 +585,13 @@ elseif(CONFIG_LANGUAGE_RO_RO) set(LANG_DIR "ro-RO") endif() -# 定义生成路径 +# Define generation path set(LANG_JSON "${CMAKE_CURRENT_SOURCE_DIR}/assets/locales/${LANG_DIR}/language.json") set(LANG_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/assets/lang_config.h") file(GLOB LANG_SOUNDS ${CMAKE_CURRENT_SOURCE_DIR}/assets/locales/${LANG_DIR}/*.ogg) file(GLOB COMMON_SOUNDS ${CMAKE_CURRENT_SOURCE_DIR}/assets/common/*.ogg) -# 如果目标芯片是 ESP32,则排除特定文件 +# If target chip is ESP32, exclude specific files to avoid build errors if(CONFIG_IDF_TARGET_ESP32) list(REMOVE_ITEM SOURCES "audio/codecs/box_audio_codec.cc" "audio/codecs/es8388_audio_codec.cc" @@ -308,16 +606,17 @@ idf_component_register(SRCS ${SOURCES} WHOLE_ARCHIVE ) -# 使用 target_compile_definitions 来定义 BOARD_TYPE, BOARD_NAME -# 如果 BOARD_NAME 为空,则使用 BOARD_TYPE +# Use target_compile_definitions to define BOARD_TYPE, BOARD_NAME +# If BOARD_NAME is empty, use BOARD_TYPE if(NOT BOARD_NAME) set(BOARD_NAME ${BOARD_TYPE}) endif() target_compile_definitions(${COMPONENT_LIB} PRIVATE BOARD_TYPE=\"${BOARD_TYPE}\" BOARD_NAME=\"${BOARD_NAME}\" + PRIVATE DEFAULT_ASSETS=\"${DEFAULT_ASSETS}\" LVGL_TEXT_FONT=${LVGL_TEXT_FONT} LVGL_ICON_FONT=${LVGL_ICON_FONT} ) -# 添加生成规则 +# Add generation rules add_custom_command( OUTPUT ${LANG_HEADER} COMMAND python ${PROJECT_DIR}/scripts/gen_lang.py @@ -329,7 +628,7 @@ add_custom_command( COMMENT "Generating ${LANG_DIR} language config" ) -# 强制建立生成依赖 +# Force build generation dependencies add_custom_target(lang_header ALL DEPENDS ${LANG_HEADER} ) @@ -355,7 +654,7 @@ foreach(FILENAME IN LISTS FILES_TO_DOWNLOAD) set(REMOTE_FILE "${URL}/${FILENAME}") set(LOCAL_FILE "${SPIFFS_DIR}/${FILENAME}") - # 检查本地文件是否存在 + # Check if local file exists if(EXISTS ${LOCAL_FILE}) message(STATUS "File ${FILENAME} already exists, skipping download") else() @@ -397,3 +696,131 @@ spiffs_create_partition_assets( IMPORT_INC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/boards/${BOARD_TYPE} ) endif() + +# Font configuration validation function +function(validate_font_config board_name text_font default_assets) + if(text_font) + # Check if DEFAULT_ASSETS contains font + if(default_assets AND default_assets MATCHES "font_") + # Rule 1: If DEFAULT_ASSETS uses font, LVGL_TEXT_FONT must be BASIC + if(NOT text_font MATCHES "basic") + message(FATAL_ERROR "Font config error for ${board_name}: DEFAULT_ASSETS contains COMMON font but LVGL_TEXT_FONT is not BASIC (${text_font})") + endif() + else() + # Rule 2: If no DEFAULT_ASSETS or DEFAULT_ASSETS doesn't contain font_, LVGL_TEXT_FONT must not be BASIC + if(text_font MATCHES "basic") + message(FATAL_ERROR "Font config error for ${board_name}: No DEFAULT_ASSETS with COMMON font but LVGL_TEXT_FONT is not COMMON (${text_font})") + endif() + endif() + # Pass validation + message(STATUS "Font config validation passed for ${board_name}: LVGL_TEXT_FONT=${text_font}, DEFAULT_ASSETS=${default_assets}") + endif() +endfunction() + +# DEFAULT_ASSETS prefix validation function +function(validate_default_assets_prefix board_name default_assets) + if(default_assets) + # Check for ESP32S3/P4 target - DEFAULT_ASSETS cannot start with "wn9s_" + if(CONFIG_IDF_TARGET_ESP32S3 OR CONFIG_IDF_TARGET_ESP32P4) + if(default_assets MATCHES "^wn9s_") + message(FATAL_ERROR "Assets config error for ${board_name}: DEFAULT_ASSETS cannot start with 'wn9s_' for ESP32S3 target (${default_assets})") + endif() + endif() + + # Check for ESP32C3/C6 target - DEFAULT_ASSETS cannot start with "wn9_" + if(CONFIG_IDF_TARGET_ESP32C3 OR CONFIG_IDF_TARGET_ESP32C6) + if(default_assets MATCHES "^wn9_") + message(FATAL_ERROR "Assets config error for ${board_name}: DEFAULT_ASSETS cannot start with 'wn9_' for ESP32C3/C6 target (${default_assets})") + endif() + endif() + + # Pass validation + message(STATUS "Assets prefix validation passed for ${board_name}: DEFAULT_ASSETS=${default_assets}") + endif() +endfunction() + +# Global font configuration validation +# This will validate the current board's font configuration +if(LVGL_TEXT_FONT) + validate_font_config("${BOARD_TYPE}" "${LVGL_TEXT_FONT}" "${DEFAULT_ASSETS}") +endif() + +# Global DEFAULT_ASSETS prefix validation +# This will validate the current board's DEFAULT_ASSETS prefix configuration +if(DEFAULT_ASSETS) + validate_default_assets_prefix("${BOARD_TYPE}" "${DEFAULT_ASSETS}") +endif() + +# Function to get local assets file path (handles both URL and local file) +function(get_assets_local_file assets_source assets_local_file_var) + # Check if it's a URL (starts with http:// or https://) + if(assets_source MATCHES "^https?://") + # It's a URL, download it + get_filename_component(ASSETS_FILENAME "${assets_source}" NAME) + set(ASSETS_LOCAL_FILE "${CMAKE_BINARY_DIR}/${ASSETS_FILENAME}") + set(ASSETS_TEMP_FILE "${CMAKE_BINARY_DIR}/${ASSETS_FILENAME}.tmp") + + # Check if local file exists + if(EXISTS ${ASSETS_LOCAL_FILE}) + message(STATUS "Assets file ${ASSETS_FILENAME} already exists, skipping download") + else() + message(STATUS "Downloading ${ASSETS_FILENAME}") + + # Clean up any existing temp file + if(EXISTS ${ASSETS_TEMP_FILE}) + file(REMOVE ${ASSETS_TEMP_FILE}) + endif() + + # Download to temporary file first + file(DOWNLOAD ${assets_source} ${ASSETS_TEMP_FILE} + STATUS DOWNLOAD_STATUS) + list(GET DOWNLOAD_STATUS 0 STATUS_CODE) + if(NOT STATUS_CODE EQUAL 0) + # Clean up temp file on failure + if(EXISTS ${ASSETS_TEMP_FILE}) + file(REMOVE ${ASSETS_TEMP_FILE}) + endif() + message(FATAL_ERROR "Failed to download ${ASSETS_FILENAME} from ${assets_source}") + endif() + + # Move temp file to final location (atomic operation) + file(RENAME ${ASSETS_TEMP_FILE} ${ASSETS_LOCAL_FILE}) + message(STATUS "Successfully downloaded ${ASSETS_FILENAME}") + endif() + else() + # It's a local file path + if(IS_ABSOLUTE "${assets_source}") + set(ASSETS_LOCAL_FILE "${assets_source}") + else() + set(ASSETS_LOCAL_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${assets_source}") + endif() + + # Check if local file exists + if(NOT EXISTS ${ASSETS_LOCAL_FILE}) + message(FATAL_ERROR "Assets file not found: ${ASSETS_LOCAL_FILE}") + endif() + + message(STATUS "Using assets file: ${ASSETS_LOCAL_FILE}") + endif() + + set(${assets_local_file_var} ${ASSETS_LOCAL_FILE} PARENT_SCOPE) +endfunction() + +# Flash assets based on configuration +if(CONFIG_FLASH_DEFAULT_ASSETS) + # Flash default assets + if(DEFAULT_ASSETS) + get_assets_local_file("${DEFAULT_ASSETS}" ASSETS_LOCAL_FILE) + esptool_py_flash_to_partition(flash "assets" "${ASSETS_LOCAL_FILE}") + message(STATUS "Default assets download and flash configured: ${DEFAULT_ASSETS} -> assets partition") + else() + message(WARNING "FLASH_DEFAULT_ASSETS is enabled but no DEFAULT_ASSETS is defined for board ${BOARD_TYPE}") + endif() +elseif(CONFIG_FLASH_CUSTOM_ASSETS) + # Flash custom assets + get_assets_local_file("${CONFIG_CUSTOM_ASSETS_FILE}" ASSETS_LOCAL_FILE) + esptool_py_flash_to_partition(flash "assets" "${ASSETS_LOCAL_FILE}") + message(STATUS "Custom assets flash configured: ${ASSETS_LOCAL_FILE} -> assets partition") +elseif(CONFIG_FLASH_NONE_ASSETS) + message(STATUS "Assets flashing disabled (FLASH_NONE_ASSETS)") +endif() diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 538b10a..cd77461 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -6,6 +6,27 @@ config OTA_URL help The application will access this URL to check for new firmwares and server address. +choice + prompt "Flash Assets" + default FLASH_NONE_ASSETS + help + Select the assets to flash. + + config FLASH_NONE_ASSETS + bool "Do not flash assets" + config FLASH_DEFAULT_ASSETS + bool "Flash Default Assets" + config FLASH_CUSTOM_ASSETS + bool "Flash Custom Assets" +endchoice + +config CUSTOM_ASSETS_FILE + depends on FLASH_CUSTOM_ASSETS + string "Custom Assets File" + default "assets.bin" + help + The custom assets file to flash. + It can be a local file relative to the project directory or a remote url. choice prompt "Default Language" @@ -556,4 +577,4 @@ choice I2S_TYPE_TAIJIPI_S3 bool "I2S Type PDM" endchoice -endmenu \ No newline at end of file +endmenu diff --git a/main/application.cc b/main/application.cc index ef9f21e..f28fed3 100644 --- a/main/application.cc +++ b/main/application.cc @@ -7,6 +7,8 @@ #include "websocket_protocol.h" #include "assets/lang_config.h" #include "mcp_server.h" +#include "assets.h" +#include "settings.h" #include #include @@ -49,7 +51,7 @@ Application::Application() { esp_timer_create_args_t clock_timer_args = { .callback = [](void* arg) { Application* app = (Application*)arg; - app->OnClockTimer(); + xEventGroupSetBits(app->event_group_, MAIN_EVENT_CLOCK_TICK); }, .arg = this, .dispatch_method = ESP_TIMER_TASK, @@ -67,6 +69,65 @@ Application::~Application() { vEventGroupDelete(event_group_); } +void Application::CheckAssetsVersion() { + auto& board = Board::GetInstance(); + auto display = board.GetDisplay(); + auto assets = board.GetAssets(); + if (!assets) { + ESP_LOGE(TAG, "Assets is not set for board %s", BOARD_NAME); + return; + } + + if (!assets->partition_valid()) { + ESP_LOGE(TAG, "Assets partition is not valid for board %s", BOARD_NAME); + return; + } + + Settings settings("assets", true); + // Check if there is a new assets need to be downloaded + std::string download_url = settings.GetString("download_url"); + if (!download_url.empty()) { + settings.EraseKey("download_url"); + } + if (download_url.empty() && !assets->checksum_valid()) { + download_url = assets->default_assets_url(); + } + + if (!download_url.empty()) { + char message[256]; + snprintf(message, sizeof(message), Lang::Strings::FOUND_NEW_ASSETS, download_url.c_str()); + Alert(Lang::Strings::LOADING_ASSETS, message, "cloud_arrow_down", Lang::Sounds::OGG_UPGRADE); + + // Wait for the audio service to be idle for 3 seconds + vTaskDelay(pdMS_TO_TICKS(3000)); + SetDeviceState(kDeviceStateUpgrading); + board.SetPowerSaveMode(false); + display->SetChatMessage("system", Lang::Strings::PLEASE_WAIT); + + bool success = assets->Download(download_url, [display](int progress, size_t speed) -> void { + std::thread([display, progress, speed]() { + char buffer[32]; + snprintf(buffer, sizeof(buffer), "%d%% %uKB/s", progress, speed / 1024); + display->SetChatMessage("system", buffer); + }).detach(); + }); + + board.SetPowerSaveMode(true); + vTaskDelay(pdMS_TO_TICKS(1000)); + + if (!success) { + Alert(Lang::Strings::ERROR, Lang::Strings::DOWNLOAD_ASSETS_FAILED, "circle_xmark", Lang::Sounds::OGG_EXCLAMATION); + vTaskDelay(pdMS_TO_TICKS(2000)); + return; + } + } + + // Apply assets + assets->Apply(); + display->SetChatMessage("system", ""); + display->SetEmotion("microchip_ai"); +} + void Application::CheckNewVersion(Ota& ota) { const int MAX_RETRY = 10; int retry_count = 0; @@ -103,43 +164,10 @@ void Application::CheckNewVersion(Ota& ota) { retry_delay = 10; // 重置重试延迟时间 if (ota.HasNewVersion()) { - Alert(Lang::Strings::OTA_UPGRADE, Lang::Strings::UPGRADING, "download", Lang::Sounds::OGG_UPGRADE); - - vTaskDelay(pdMS_TO_TICKS(3000)); - - SetDeviceState(kDeviceStateUpgrading); - - std::string message = std::string(Lang::Strings::NEW_VERSION) + ota.GetFirmwareVersion(); - display->SetChatMessage("system", message.c_str()); - - board.SetPowerSaveMode(false); - audio_service_.Stop(); - vTaskDelay(pdMS_TO_TICKS(1000)); - - bool upgrade_success = ota.StartUpgrade([display](int progress, size_t speed) { - std::thread([display, progress, speed]() { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d%% %uKB/s", progress, speed / 1024); - display->SetChatMessage("system", buffer); - }).detach(); - }); - - if (!upgrade_success) { - // Upgrade failed, restart audio service and continue running - ESP_LOGE(TAG, "Firmware upgrade failed, restarting audio service and continuing operation..."); - audio_service_.Start(); // Restart audio service - board.SetPowerSaveMode(true); // Restore power save mode - Alert(Lang::Strings::ERROR, Lang::Strings::UPGRADE_FAILED, "circle_xmark", Lang::Sounds::OGG_EXCLAMATION); - vTaskDelay(pdMS_TO_TICKS(3000)); - // Continue to normal operation (don't break, just fall through) - } else { - // Upgrade success, reboot immediately - ESP_LOGI(TAG, "Firmware upgrade successful, rebooting..."); - display->SetChatMessage("system", "Upgrade successful, rebooting..."); - vTaskDelay(pdMS_TO_TICKS(1000)); // Brief pause to show message - Reboot(); + if (UpgradeFirmware(ota)) { return; // This line will never be reached after reboot } + // If upgrade failed, continue to normal operation (don't break, just fall through) } // No new version, mark the current version as valid @@ -358,6 +386,9 @@ void Application::Start() { // Update the status bar immediately to show the network state display->UpdateStatusBar(true); + // Check for new assets version + CheckAssetsVersion(); + // Check for new firmware version or get the MQTT broker address Ota ota; CheckNewVersion(ota); @@ -366,7 +397,9 @@ void Application::Start() { display->SetStatus(Lang::Strings::LOADING_PROTOCOL); // Add MCP common tools before initializing the protocol - McpServer::GetInstance().AddCommonTools(); + auto& mcp_server = McpServer::GetInstance(); + mcp_server.AddCommonTools(); + mcp_server.AddUserOnlyTools(); if (ota.HasMqttConfig()) { protocol_ = std::make_unique(); @@ -496,6 +529,7 @@ void Application::Start() { }); bool protocol_started = protocol_->Start(); + SystemInfo::PrintHeapStats(); SetDeviceState(kDeviceStateIdle); has_server_time_ = ota.HasServerTime(); @@ -506,23 +540,6 @@ void Application::Start() { // Play the success sound to indicate the device is ready audio_service_.PlaySound(Lang::Sounds::OGG_SUCCESS); } - - // Print heap stats - SystemInfo::PrintHeapStats(); -} - -void Application::OnClockTimer() { - clock_ticks_++; - - auto display = Board::GetInstance().GetDisplay(); - display->UpdateStatusBar(); - - // Print the debug info every 10 seconds - if (clock_ticks_ % 10 == 0) { - // SystemInfo::PrintTaskCpuUsage(pdMS_TO_TICKS(1000)); - // SystemInfo::PrintTaskList(); - SystemInfo::PrintHeapStats(); - } } // Add a async task to MainLoop @@ -546,7 +563,9 @@ void Application::MainEventLoop() { MAIN_EVENT_SEND_AUDIO | MAIN_EVENT_WAKE_WORD_DETECTED | MAIN_EVENT_VAD_CHANGE | + MAIN_EVENT_CLOCK_TICK | MAIN_EVENT_ERROR, pdTRUE, pdFALSE, portMAX_DELAY); + if (bits & MAIN_EVENT_ERROR) { SetDeviceState(kDeviceStateIdle); Alert(Lang::Strings::ERROR, last_error_message_.c_str(), "circle_xmark", Lang::Sounds::OGG_EXCLAMATION); @@ -554,7 +573,7 @@ void Application::MainEventLoop() { if (bits & MAIN_EVENT_SEND_AUDIO) { while (auto packet = audio_service_.PopPacketFromSendQueue()) { - if (!protocol_->SendAudio(std::move(packet))) { + if (protocol_ && !protocol_->SendAudio(std::move(packet))) { break; } } @@ -579,6 +598,19 @@ void Application::MainEventLoop() { task(); } } + + if (bits & MAIN_EVENT_CLOCK_TICK) { + clock_ticks_++; + auto display = Board::GetInstance().GetDisplay(); + display->UpdateStatusBar(); + + // Print the debug info every 10 seconds + if (clock_ticks_ % 10 == 0) { + // SystemInfo::PrintTaskCpuUsage(pdMS_TO_TICKS(1000)); + // SystemInfo::PrintTaskList(); + SystemInfo::PrintHeapStats(); + } + } } } @@ -623,7 +655,9 @@ void Application::OnWakeWordDetected() { void Application::AbortSpeaking(AbortReason reason) { ESP_LOGI(TAG, "Abort speaking"); aborted_ = true; - protocol_->SendAbortSpeaking(reason); + if (protocol_) { + protocol_->SendAbortSpeaking(reason); + } } void Application::SetListeningMode(ListeningMode mode) { @@ -706,9 +740,70 @@ void Application::SetDeviceState(DeviceState state) { void Application::Reboot() { ESP_LOGI(TAG, "Rebooting..."); + // Disconnect the audio channel + if (protocol_ && protocol_->IsAudioChannelOpened()) { + protocol_->CloseAudioChannel(); + } + protocol_.reset(); + audio_service_.Stop(); + + vTaskDelay(pdMS_TO_TICKS(1000)); esp_restart(); } +bool Application::UpgradeFirmware(Ota& ota, const std::string& url) { + auto& board = Board::GetInstance(); + auto display = board.GetDisplay(); + + // Use provided URL or get from OTA object + std::string upgrade_url = url.empty() ? ota.GetFirmwareUrl() : url; + std::string version_info = url.empty() ? ota.GetFirmwareVersion() : "(Manual upgrade)"; + + // Close audio channel if it's open + if (protocol_ && protocol_->IsAudioChannelOpened()) { + ESP_LOGI(TAG, "Closing audio channel before firmware upgrade"); + protocol_->CloseAudioChannel(); + } + ESP_LOGI(TAG, "Starting firmware upgrade from URL: %s", upgrade_url.c_str()); + + Alert(Lang::Strings::OTA_UPGRADE, Lang::Strings::UPGRADING, "download", Lang::Sounds::OGG_UPGRADE); + vTaskDelay(pdMS_TO_TICKS(3000)); + + SetDeviceState(kDeviceStateUpgrading); + + std::string message = std::string(Lang::Strings::NEW_VERSION) + version_info; + display->SetChatMessage("system", message.c_str()); + + board.SetPowerSaveMode(false); + audio_service_.Stop(); + vTaskDelay(pdMS_TO_TICKS(1000)); + + bool upgrade_success = ota.StartUpgradeFromUrl(upgrade_url, [display](int progress, size_t speed) { + std::thread([display, progress, speed]() { + char buffer[32]; + snprintf(buffer, sizeof(buffer), "%d%% %uKB/s", progress, speed / 1024); + display->SetChatMessage("system", buffer); + }).detach(); + }); + + if (!upgrade_success) { + // Upgrade failed, restart audio service and continue running + ESP_LOGE(TAG, "Firmware upgrade failed, restarting audio service and continuing operation..."); + audio_service_.Start(); // Restart audio service + board.SetPowerSaveMode(true); // Restore power save mode + Alert(Lang::Strings::ERROR, Lang::Strings::UPGRADE_FAILED, "circle_xmark", Lang::Sounds::OGG_EXCLAMATION); + vTaskDelay(pdMS_TO_TICKS(3000)); + return false; + } else { + // Upgrade success, reboot immediately + ESP_LOGI(TAG, "Firmware upgrade successful, rebooting..."); + display->SetChatMessage("system", "Upgrade successful, rebooting..."); + vTaskDelay(pdMS_TO_TICKS(1000)); // Brief pause to show message + Reboot(); + return true; + } +} + void Application::WakeWordInvoke(const std::string& wake_word) { if (device_state_ == kDeviceStateIdle) { ToggleChatState(); diff --git a/main/application.h b/main/application.h index 780bed4..da84ad2 100644 --- a/main/application.h +++ b/main/application.h @@ -16,12 +16,15 @@ #include "audio_service.h" #include "device_state_event.h" + #define MAIN_EVENT_SCHEDULE (1 << 0) #define MAIN_EVENT_SEND_AUDIO (1 << 1) #define MAIN_EVENT_WAKE_WORD_DETECTED (1 << 2) #define MAIN_EVENT_VAD_CHANGE (1 << 3) #define MAIN_EVENT_ERROR (1 << 4) #define MAIN_EVENT_CHECK_NEW_VERSION_DONE (1 << 5) +#define MAIN_EVENT_CLOCK_TICK (1 << 6) + enum AecMode { kAecOff, @@ -53,6 +56,7 @@ public: void StopListening(); void Reboot(); void WakeWordInvoke(const std::string& wake_word); + bool UpgradeFirmware(Ota& ota, const std::string& url = ""); bool CanEnterSleepMode(); void SendMcpMessage(const std::string& payload); void SetAecMode(AecMode mode); @@ -85,8 +89,8 @@ private: void OnWakeWordDetected(); void CheckNewVersion(Ota& ota); + void CheckAssetsVersion(); void ShowActivationCode(const std::string& code, const std::string& message); - void OnClockTimer(); void SetListeningMode(ListeningMode mode); }; diff --git a/main/assets.cc b/main/assets.cc new file mode 100644 index 0000000..48d790f --- /dev/null +++ b/main/assets.cc @@ -0,0 +1,406 @@ +#include "assets.h" +#include "board.h" +#include "display.h" +#include "application.h" +#include "lvgl_theme.h" + +#include +#include +#include +#include + + +#define TAG "Assets" + +struct mmap_assets_table { + char asset_name[32]; /*!< Name of the asset */ + uint32_t asset_size; /*!< Size of the asset */ + uint32_t asset_offset; /*!< Offset of the asset */ + uint16_t asset_width; /*!< Width of the asset */ + uint16_t asset_height; /*!< Height of the asset */ +}; + + +Assets::Assets(std::string default_assets_url) { + if (default_assets_url.find("http") == 0) { + default_assets_url_ = default_assets_url; + } else { + ESP_LOGE(TAG, "The default assets url is not a http url: %s", default_assets_url.c_str()); + } + + // Initialize the partition + InitializePartition(); +} + +Assets::~Assets() { + if (mmap_handle_ != 0) { + esp_partition_munmap(mmap_handle_); + } +} + +uint32_t Assets::CalculateChecksum(const char* data, uint32_t length) { + uint32_t checksum = 0; + for (uint32_t i = 0; i < length; i++) { + checksum += data[i]; + } + return checksum & 0xFFFF; +} + +bool Assets::InitializePartition() { + partition_valid_ = false; + checksum_valid_ = false; + assets_.clear(); + + partition_ = esp_partition_find_first(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, "assets"); + if (partition_ == nullptr) { + ESP_LOGI(TAG, "No assets partition found"); + return false; + } + + int free_pages = spi_flash_mmap_get_free_pages(SPI_FLASH_MMAP_DATA); + uint32_t storage_size = free_pages * 64 * 1024; + ESP_LOGI(TAG, "The storage free size is %ld KB", storage_size / 1024); + ESP_LOGI(TAG, "The partition size is %ld KB", partition_->size / 1024); + if (storage_size < partition_->size) { + ESP_LOGE(TAG, "The free size %ld KB is less than assets partition required %ld KB", storage_size / 1024, partition_->size / 1024); + return false; + } + + esp_err_t err = esp_partition_mmap(partition_, 0, partition_->size, ESP_PARTITION_MMAP_DATA, (const void**)&mmap_root_, &mmap_handle_); + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to mmap assets partition: %s", esp_err_to_name(err)); + return false; + } + + partition_valid_ = true; + + uint32_t stored_files = *(uint32_t*)(mmap_root_ + 0); + uint32_t stored_chksum = *(uint32_t*)(mmap_root_ + 4); + uint32_t stored_len = *(uint32_t*)(mmap_root_ + 8); + + if (stored_len > partition_->size - 12) { + ESP_LOGD(TAG, "The stored_len (0x%lx) is greater than the partition size (0x%lx) - 12", stored_len, partition_->size); + return false; + } + + auto start_time = esp_timer_get_time(); + uint32_t calculated_checksum = CalculateChecksum(mmap_root_ + 12, stored_len); + auto end_time = esp_timer_get_time(); + ESP_LOGI(TAG, "The checksum calculation time is %d ms", int((end_time - start_time) / 1000)); + + if (calculated_checksum != stored_chksum) { + ESP_LOGE(TAG, "The calculated checksum (0x%lx) does not match the stored checksum (0x%lx)", calculated_checksum, stored_chksum); + return false; + } + + checksum_valid_ = true; + + for (uint32_t i = 0; i < stored_files; i++) { + auto item = (const mmap_assets_table*)(mmap_root_ + 12 + i * sizeof(mmap_assets_table)); + auto asset = Asset{ + .size = static_cast(item->asset_size), + .offset = static_cast(12 + sizeof(mmap_assets_table) * stored_files + item->asset_offset) + }; + assets_[item->asset_name] = asset; + } + return checksum_valid_; +} + +bool Assets::Apply() { + void* ptr = nullptr; + size_t size = 0; + if (!GetAssetData("index.json", ptr, size)) { + ESP_LOGE(TAG, "The index.json file is not found"); + return false; + } + cJSON* root = cJSON_ParseWithLength(static_cast(ptr), size); + if (root == nullptr) { + ESP_LOGE(TAG, "The index.json file is not valid"); + return false; + } + + cJSON* version = cJSON_GetObjectItem(root, "version"); + if (cJSON_IsNumber(version)) { + if (version->valuedouble > 1) { + ESP_LOGE(TAG, "The assets version %d is not supported, please upgrade the firmware", version->valueint); + return false; + } + } + + cJSON* srmodels = cJSON_GetObjectItem(root, "srmodels"); + if (cJSON_IsString(srmodels)) { + std::string srmodels_file = srmodels->valuestring; + if (GetAssetData(srmodels_file, ptr, size)) { + if (models_list_ != nullptr) { + esp_srmodel_deinit(models_list_); + models_list_ = nullptr; + } + models_list_ = srmodel_load(static_cast(ptr)); + if (models_list_ != nullptr) { + auto& app = Application::GetInstance(); + app.GetAudioService().SetModelsList(models_list_); + } else { + ESP_LOGE(TAG, "Failed to load srmodels.bin"); + } + } else { + ESP_LOGE(TAG, "The srmodels file %s is not found", srmodels_file.c_str()); + } + } + +#ifdef HAVE_LVGL + auto& theme_manager = LvglThemeManager::GetInstance(); + auto light_theme = theme_manager.GetTheme("light"); + auto dark_theme = theme_manager.GetTheme("dark"); + + cJSON* font = cJSON_GetObjectItem(root, "text_font"); + if (cJSON_IsString(font)) { + std::string fonts_text_file = font->valuestring; + if (GetAssetData(fonts_text_file, ptr, size)) { + auto text_font = std::make_shared(ptr); + if (text_font->font() == nullptr) { + ESP_LOGE(TAG, "Failed to load fonts.bin"); + return false; + } + if (light_theme != nullptr) { + light_theme->set_text_font(text_font); + } + if (dark_theme != nullptr) { + dark_theme->set_text_font(text_font); + } + } else { + ESP_LOGE(TAG, "The font file %s is not found", fonts_text_file.c_str()); + } + } + + cJSON* emoji_collection = cJSON_GetObjectItem(root, "emoji_collection"); + if (cJSON_IsArray(emoji_collection)) { + auto custom_emoji_collection = std::make_shared(); + int emoji_count = cJSON_GetArraySize(emoji_collection); + for (int i = 0; i < emoji_count; i++) { + cJSON* emoji = cJSON_GetArrayItem(emoji_collection, i); + if (cJSON_IsObject(emoji)) { + cJSON* name = cJSON_GetObjectItem(emoji, "name"); + cJSON* file = cJSON_GetObjectItem(emoji, "file"); + if (cJSON_IsString(name) && cJSON_IsString(file)) { + if (!GetAssetData(file->valuestring, ptr, size)) { + ESP_LOGE(TAG, "Emoji %s image file %s is not found", name->valuestring, file->valuestring); + continue; + } + custom_emoji_collection->AddEmoji(name->valuestring, new LvglRawImage(ptr, size)); + } + } + } + if (light_theme != nullptr) { + light_theme->set_emoji_collection(custom_emoji_collection); + } + if (dark_theme != nullptr) { + dark_theme->set_emoji_collection(custom_emoji_collection); + } + } + + cJSON* skin = cJSON_GetObjectItem(root, "skin"); + if (cJSON_IsObject(skin)) { + cJSON* light_skin = cJSON_GetObjectItem(skin, "light"); + if (cJSON_IsObject(light_skin) && light_theme != nullptr) { + cJSON* text_color = cJSON_GetObjectItem(light_skin, "text_color"); + cJSON* background_color = cJSON_GetObjectItem(light_skin, "background_color"); + cJSON* background_image = cJSON_GetObjectItem(light_skin, "background_image"); + if (cJSON_IsString(text_color)) { + light_theme->set_text_color(LvglTheme::ParseColor(text_color->valuestring)); + } + if (cJSON_IsString(background_color)) { + light_theme->set_background_color(LvglTheme::ParseColor(background_color->valuestring)); + light_theme->set_chat_background_color(LvglTheme::ParseColor(background_color->valuestring)); + } + if (cJSON_IsString(background_image)) { + if (!GetAssetData(background_image->valuestring, ptr, size)) { + ESP_LOGE(TAG, "The background image file %s is not found", background_image->valuestring); + return false; + } + auto background_image = std::make_shared(ptr); + light_theme->set_background_image(background_image); + } + } + cJSON* dark_skin = cJSON_GetObjectItem(skin, "dark"); + if (cJSON_IsObject(dark_skin) && dark_theme != nullptr) { + cJSON* text_color = cJSON_GetObjectItem(dark_skin, "text_color"); + cJSON* background_color = cJSON_GetObjectItem(dark_skin, "background_color"); + cJSON* background_image = cJSON_GetObjectItem(dark_skin, "background_image"); + if (cJSON_IsString(text_color)) { + dark_theme->set_text_color(LvglTheme::ParseColor(text_color->valuestring)); + } + if (cJSON_IsString(background_color)) { + dark_theme->set_background_color(LvglTheme::ParseColor(background_color->valuestring)); + dark_theme->set_chat_background_color(LvglTheme::ParseColor(background_color->valuestring)); + } + if (cJSON_IsString(background_image)) { + if (!GetAssetData(background_image->valuestring, ptr, size)) { + ESP_LOGE(TAG, "The background image file %s is not found", background_image->valuestring); + return false; + } + auto background_image = std::make_shared(ptr); + dark_theme->set_background_image(background_image); + } + } + } +#endif + + auto display = Board::GetInstance().GetDisplay(); + ESP_LOGI(TAG, "Refreshing display theme..."); + + auto current_theme = display->GetTheme(); + if (current_theme != nullptr) { + display->SetTheme(current_theme); + } + cJSON_Delete(root); + return true; +} + +bool Assets::Download(std::string url, std::function progress_callback) { + ESP_LOGI(TAG, "Downloading new version of assets from %s", url.c_str()); + + // 取消当前资源分区的内存映射 + if (mmap_handle_ != 0) { + esp_partition_munmap(mmap_handle_); + mmap_handle_ = 0; + mmap_root_ = nullptr; + } + checksum_valid_ = false; + assets_.clear(); + + // 下载新的资源文件 + auto network = Board::GetInstance().GetNetwork(); + auto http = network->CreateHttp(0); + + if (!http->Open("GET", url)) { + ESP_LOGE(TAG, "Failed to open HTTP connection"); + return false; + } + + if (http->GetStatusCode() != 200) { + ESP_LOGE(TAG, "Failed to get assets, status code: %d", http->GetStatusCode()); + return false; + } + + size_t content_length = http->GetBodyLength(); + if (content_length == 0) { + ESP_LOGE(TAG, "Failed to get content length"); + return false; + } + + if (content_length > partition_->size) { + ESP_LOGE(TAG, "Assets file size (%u) is larger than partition size (%lu)", content_length, partition_->size); + return false; + } + + // 定义扇区大小为4KB(ESP32的标准扇区大小) + const size_t SECTOR_SIZE = esp_partition_get_main_flash_sector_size(); + + // 计算需要擦除的扇区数量 + size_t sectors_to_erase = (content_length + SECTOR_SIZE - 1) / SECTOR_SIZE; // 向上取整 + size_t total_erase_size = sectors_to_erase * SECTOR_SIZE; + + ESP_LOGI(TAG, "Sector size: %u, content length: %u, sectors to erase: %u, total erase size: %u", + SECTOR_SIZE, content_length, sectors_to_erase, total_erase_size); + + // 写入新的资源文件到分区,一边erase一边写入 + char buffer[512]; + size_t total_written = 0; + size_t recent_written = 0; + size_t current_sector = 0; + auto last_calc_time = esp_timer_get_time(); + + while (true) { + int ret = http->Read(buffer, sizeof(buffer)); + if (ret < 0) { + ESP_LOGE(TAG, "Failed to read HTTP data: %s", esp_err_to_name(ret)); + return false; + } + + if (ret == 0) { + break; + } + + // 检查是否需要擦除新的扇区 + size_t write_end_offset = total_written + ret; + size_t needed_sectors = (write_end_offset + SECTOR_SIZE - 1) / SECTOR_SIZE; + + // 擦除需要的新扇区 + while (current_sector < needed_sectors) { + size_t sector_start = current_sector * SECTOR_SIZE; + size_t sector_end = (current_sector + 1) * SECTOR_SIZE; + + // 确保擦除范围不超过分区大小 + if (sector_end > partition_->size) { + ESP_LOGE(TAG, "Sector end (%u) exceeds partition size (%lu)", sector_end, partition_->size); + return false; + } + + ESP_LOGD(TAG, "Erasing sector %u (offset: %u, size: %u)", current_sector, sector_start, SECTOR_SIZE); + esp_err_t err = esp_partition_erase_range(partition_, sector_start, SECTOR_SIZE); + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to erase sector %u at offset %u: %s", current_sector, sector_start, esp_err_to_name(err)); + return false; + } + + current_sector++; + } + + // 写入数据到分区 + esp_err_t err = esp_partition_write(partition_, total_written, buffer, ret); + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to write to assets partition at offset %u: %s", total_written, esp_err_to_name(err)); + return false; + } + + total_written += ret; + recent_written += ret; + + // 计算进度和速度 + if (esp_timer_get_time() - last_calc_time >= 1000000 || total_written == content_length || ret == 0) { + size_t progress = total_written * 100 / content_length; + size_t speed = recent_written; // 每秒的字节数 + ESP_LOGI(TAG, "Progress: %u%% (%u/%u), Speed: %u B/s, Sectors erased: %u", + progress, total_written, content_length, speed, current_sector); + if (progress_callback) { + progress_callback(progress, speed); + } + last_calc_time = esp_timer_get_time(); + recent_written = 0; // 重置最近写入的字节数 + } + } + + http->Close(); + + if (total_written != content_length) { + ESP_LOGE(TAG, "Downloaded size (%u) does not match expected size (%u)", total_written, content_length); + return false; + } + + ESP_LOGI(TAG, "Assets download completed, total written: %u bytes, total sectors erased: %u", + total_written, current_sector); + + // 重新初始化资源分区 + if (!InitializePartition()) { + ESP_LOGE(TAG, "Failed to re-initialize assets partition"); + return false; + } + + return true; +} + +bool Assets::GetAssetData(const std::string& name, void*& ptr, size_t& size) { + auto asset = assets_.find(name); + if (asset == assets_.end()) { + return false; + } + auto data = (const char*)(mmap_root_ + asset->second.offset); + if (data[0] != 'Z' || data[1] != 'Z') { + ESP_LOGE(TAG, "The asset %s is not valid with magic %02x%02x", name.c_str(), data[0], data[1]); + return false; + } + + ptr = static_cast(const_cast(data + 2)); + size = asset->second.size; + return true; +} diff --git a/main/assets.h b/main/assets.h new file mode 100644 index 0000000..ff9a59e --- /dev/null +++ b/main/assets.h @@ -0,0 +1,65 @@ +#ifndef ASSETS_H +#define ASSETS_H + +#include +#include +#include + +#include +#include +#include + + +// All combinations of wakenet_model, text_font, emoji_collection can be found from the following url: +// https://github.com/78/xiaozhi-fonts/releases/tag/assets + +#define ASSETS_PUHUI_COMMON_14_1 "none-font_puhui_common_14_1-none.bin" +#define ASSETS_XIAOZHI_WAKENET "wn9_nihaoxiaozhi_tts-none-none.bin" +#define ASSETS_XIAOZHI_WAKENET_SMALL "wn9s_nihaoxiaozhi-none-none.bin" +#define ASSETS_XIAOZHI_PUHUI_COMMON_14_1 "wn9_nihaoxiaozhi_tts-font_puhui_common_14_1-none.bin" +#define ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_32 "wn9_nihaoxiaozhi_tts-font_puhui_common_16_4-emojis_32.bin" +#define ASSETS_XIAOZHI_PUHUI_COMMON_16_4_EMOJI_64 "wn9_nihaoxiaozhi_tts-font_puhui_common_16_4-emojis_64.bin" +#define ASSETS_XIAOZHI_PUHUI_COMMON_20_4_EMOJI_64 "wn9_nihaoxiaozhi_tts-font_puhui_common_20_4-emojis_64.bin" +#define ASSETS_XIAOZHI_PUHUI_COMMON_30_4_EMOJI_64 "wn9_nihaoxiaozhi_tts-font_puhui_common_30_4-emojis_64.bin" +#define ASSETS_XIAOZHI_S_PUHUI_COMMON_14_1 "wn9s_nihaoxiaozhi-font_puhui_common_14_1-none.bin" +#define ASSETS_XIAOZHI_S_PUHUI_COMMON_16_4_EMOJI_32 "wn9s_nihaoxiaozhi-font_puhui_common_16_4-emojis_32.bin" +#define ASSETS_XIAOZHI_S_PUHUI_COMMON_20_4_EMOJI_32 "wn9s_nihaoxiaozhi-font_puhui_common_20_4-emojis_32.bin" +#define ASSETS_XIAOZHI_S_PUHUI_COMMON_20_4_EMOJI_64 "wn9s_nihaoxiaozhi-font_puhui_common_20_4-emojis_64.bin" +#define ASSETS_XIAOZHI_S_PUHUI_COMMON_30_4_EMOJI_64 "wn9s_nihaoxiaozhi-font_puhui_common_30_4-emojis_64.bin" + +struct Asset { + size_t size; + size_t offset; +}; + +class Assets { +public: + Assets(std::string default_assets_url); + ~Assets(); + + bool Download(std::string url, std::function progress_callback); + bool Apply(); + + inline bool partition_valid() const { return partition_valid_; } + inline bool checksum_valid() const { return checksum_valid_; } + inline std::string default_assets_url() const { return default_assets_url_; } + +private: + Assets(const Assets&) = delete; + Assets& operator=(const Assets&) = delete; + + bool InitializePartition(); + uint32_t CalculateChecksum(const char* data, uint32_t length); + bool GetAssetData(const std::string& name, void*& ptr, size_t& size); + + const esp_partition_t* partition_ = nullptr; + esp_partition_mmap_handle_t mmap_handle_ = 0; + const char* mmap_root_ = nullptr; + bool partition_valid_ = false; + bool checksum_valid_ = false; + std::string default_assets_url_; + srmodel_list_t* models_list_ = nullptr; + std::map assets_; +}; + +#endif diff --git a/main/assets/lang_config.h b/main/assets/lang_config.h index a936ade..77479bc 100644 --- a/main/assets/lang_config.h +++ b/main/assets/lang_config.h @@ -28,17 +28,22 @@ namespace Lang { constexpr const char* CONNECT_TO = "连接 "; constexpr const char* CONNECT_TO_HOTSPOT = "手机连接热点 "; constexpr const char* DETECTING_MODULE = "检测模组..."; + constexpr const char* DOWNLOAD_ASSETS_FAILED = "下载资源失败"; constexpr const char* ENTERING_WIFI_CONFIG_MODE = "进入配网模式..."; constexpr const char* ERROR = "错误"; + constexpr const char* FOUND_NEW_ASSETS = "发现新资源: %s"; + constexpr const char* HELLO_MY_FRIEND = "你好,我的朋友!"; constexpr const char* INFO = "信息"; constexpr const char* INITIALIZING = "正在初始化..."; constexpr const char* LISTENING = "聆听中..."; + constexpr const char* LOADING_ASSETS = "加载资源..."; constexpr const char* LOADING_PROTOCOL = "登录服务器..."; constexpr const char* MAX_VOLUME = "最大音量"; constexpr const char* MUTED = "已静音"; constexpr const char* NEW_VERSION = "新版本 "; constexpr const char* OTA_UPGRADE = "OTA 升级"; constexpr const char* PIN_ERROR = "请插入 SIM 卡"; + constexpr const char* PLEASE_WAIT = "请稍候..."; constexpr const char* REGISTERING_NETWORK = "等待网络..."; constexpr const char* REG_ERROR = "无法接入网络,请检查流量卡状态"; constexpr const char* RTC_MODE_OFF = "AEC 关闭"; diff --git a/main/assets/locales/ar-SA/language.json b/main/assets/locales/ar-SA/language.json index 5811915..88263e4 100644 --- a/main/assets/locales/ar-SA/language.json +++ b/main/assets/locales/ar-SA/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"ar-SA" + "type": "ar-SA" }, "strings": { - "WARNING":"تحذير", - "INFO":"معلومات", - "ERROR":"خطأ", + "WARNING": "تحذير", + "INFO": "معلومات", + "ERROR": "خطأ", "VERSION": "الإصدار ", - "LOADING_PROTOCOL":"الاتصال بالخادم...", - "INITIALIZING":"التهيئة...", - "PIN_ERROR":"يرجى إدخال بطاقة SIM", - "REG_ERROR":"لا يمكن الوصول إلى الشبكة، يرجى التحقق من حالة بطاقة البيانات", - "DETECTING_MODULE":"اكتشاف الوحدة...", - "REGISTERING_NETWORK":"انتظار الشبكة...", - "CHECKING_NEW_VERSION":"فحص الإصدار الجديد...", - "CHECK_NEW_VERSION_FAILED":"فشل فحص الإصدار الجديد، سيتم المحاولة خلال %d ثانية: %s", - "SWITCH_TO_WIFI_NETWORK":"التبديل إلى Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"التبديل إلى 4G...", - - "STANDBY":"في الانتظار", - "CONNECT_TO":"الاتصال بـ ", - "CONNECTING":"جاري الاتصال...", - "CONNECTED_TO":"متصل بـ ", - - "LISTENING":"الاستماع...", - "SPEAKING":"التحدث...", - - "SERVER_NOT_FOUND":"البحث عن خدمة متاحة", - "SERVER_NOT_CONNECTED":"لا يمكن الاتصال بالخدمة، يرجى المحاولة لاحقاً", - "SERVER_TIMEOUT":"انتهت مهلة الاستجابة", - "SERVER_ERROR":"فشل الإرسال، يرجى التحقق من الشبكة", - - "CONNECT_TO_HOTSPOT":"اتصل الهاتف بنقطة الاتصال ", - "ACCESS_VIA_BROWSER":"،الوصول عبر المتصفح ", - "WIFI_CONFIG_MODE":"وضع تكوين الشبكة", - "ENTERING_WIFI_CONFIG_MODE":"الدخول في وضع تكوين الشبكة...", - "SCANNING_WIFI":"فحص Wi-Fi...", - + "LOADING_PROTOCOL": "الاتصال بالخادم...", + "INITIALIZING": "التهيئة...", + "PIN_ERROR": "يرجى إدخال بطاقة SIM", + "REG_ERROR": "لا يمكن الوصول إلى الشبكة، يرجى التحقق من حالة بطاقة البيانات", + "DETECTING_MODULE": "اكتشاف الوحدة...", + "REGISTERING_NETWORK": "انتظار الشبكة...", + "CHECKING_NEW_VERSION": "فحص الإصدار الجديد...", + "CHECK_NEW_VERSION_FAILED": "فشل فحص الإصدار الجديد، سيتم المحاولة خلال %d ثانية: %s", + "SWITCH_TO_WIFI_NETWORK": "التبديل إلى Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "التبديل إلى 4G...", + "STANDBY": "في الانتظار", + "CONNECT_TO": "الاتصال بـ ", + "CONNECTING": "جاري الاتصال...", + "CONNECTED_TO": "متصل بـ ", + "LISTENING": "الاستماع...", + "SPEAKING": "التحدث...", + "SERVER_NOT_FOUND": "البحث عن خدمة متاحة", + "SERVER_NOT_CONNECTED": "لا يمكن الاتصال بالخدمة، يرجى المحاولة لاحقاً", + "SERVER_TIMEOUT": "انتهت مهلة الاستجابة", + "SERVER_ERROR": "فشل الإرسال، يرجى التحقق من الشبكة", + "CONNECT_TO_HOTSPOT": "اتصل الهاتف بنقطة الاتصال ", + "ACCESS_VIA_BROWSER": "،الوصول عبر المتصفح ", + "WIFI_CONFIG_MODE": "وضع تكوين الشبكة", + "ENTERING_WIFI_CONFIG_MODE": "الدخول في وضع تكوين الشبكة...", + "SCANNING_WIFI": "فحص Wi-Fi...", "NEW_VERSION": "إصدار جديد ", - "OTA_UPGRADE":"تحديث OTA", - "UPGRADING":"تحديث النظام...", - "UPGRADE_FAILED":"فشل التحديث", - "ACTIVATION":"تفعيل الجهاز", - - "BATTERY_LOW":"البطارية منخفضة", - "BATTERY_CHARGING":"جاري الشحن", - "BATTERY_FULL":"البطارية ممتلئة", - "BATTERY_NEED_CHARGE":"البطارية منخفضة، يرجى الشحن", - - "VOLUME":"الصوت ", - "MUTED":"صامت", - "MAX_VOLUME":"أقصى صوت", - - "RTC_MODE_OFF":"AEC مُوقف", - "RTC_MODE_ON":"AEC مُشغل" + "OTA_UPGRADE": "تحديث OTA", + "UPGRADING": "تحديث النظام...", + "UPGRADE_FAILED": "فشل التحديث", + "ACTIVATION": "تفعيل الجهاز", + "BATTERY_LOW": "البطارية منخفضة", + "BATTERY_CHARGING": "جاري الشحن", + "BATTERY_FULL": "البطارية ممتلئة", + "BATTERY_NEED_CHARGE": "البطارية منخفضة، يرجى الشحن", + "VOLUME": "الصوت ", + "MUTED": "صامت", + "MAX_VOLUME": "أقصى صوت", + "RTC_MODE_OFF": "AEC مُوقف", + "RTC_MODE_ON": "AEC مُشغل", + "DOWNLOAD_ASSETS_FAILED": "فشل في تنزيل الموارد", + "LOADING_ASSETS": "جاري تحميل الموارد...", + "PLEASE_WAIT": "يرجى الانتظار...", + "FOUND_NEW_ASSETS": "تم العثور على موارد جديدة: %s", + "HELLO_MY_FRIEND": "مرحباً، صديقي!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/cs-CZ/language.json b/main/assets/locales/cs-CZ/language.json index be2c59a..1e18a5c 100644 --- a/main/assets/locales/cs-CZ/language.json +++ b/main/assets/locales/cs-CZ/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"cs-CZ" + "type": "cs-CZ" }, "strings": { - "WARNING":"Varování", - "INFO":"Informace", - "ERROR":"Chyba", + "WARNING": "Varování", + "INFO": "Informace", + "ERROR": "Chyba", "VERSION": "Verze ", - "LOADING_PROTOCOL":"Připojování k serveru...", - "INITIALIZING":"Inicializace...", - "PIN_ERROR":"Prosím vložte SIM kartu", - "REG_ERROR":"Nelze se připojit k síti, zkontrolujte stav datové karty", - "DETECTING_MODULE":"Detekce modulu...", - "REGISTERING_NETWORK":"Čekání na síť...", - "CHECKING_NEW_VERSION":"Kontrola nové verze...", - "CHECK_NEW_VERSION_FAILED":"Kontrola nové verze selhala, opakování za %d sekund: %s", - "SWITCH_TO_WIFI_NETWORK":"Přepínání na Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Přepínání na 4G...", - - "STANDBY":"Pohotovost", - "CONNECT_TO":"Připojit k ", - "CONNECTING":"Připojování...", - "CONNECTED_TO":"Připojeno k ", - - "LISTENING":"Naslouchání...", - "SPEAKING":"Mluvení...", - - "SERVER_NOT_FOUND":"Hledání dostupné služby", - "SERVER_NOT_CONNECTED":"Nelze se připojit ke službě, zkuste to později", - "SERVER_TIMEOUT":"Čas odpovědi vypršel", - "SERVER_ERROR":"Odeslání selhalo, zkontrolujte síť", - - "CONNECT_TO_HOTSPOT":"Připojte telefon k hotspotu ", - "ACCESS_VIA_BROWSER":",přístup přes prohlížeč ", - "WIFI_CONFIG_MODE":"Režim konfigurace sítě", - "ENTERING_WIFI_CONFIG_MODE":"Vstup do režimu konfigurace sítě...", - "SCANNING_WIFI":"Skenování Wi-Fi...", - + "LOADING_PROTOCOL": "Připojování k serveru...", + "INITIALIZING": "Inicializace...", + "PIN_ERROR": "Prosím vložte SIM kartu", + "REG_ERROR": "Nelze se připojit k síti, zkontrolujte stav datové karty", + "DETECTING_MODULE": "Detekce modulu...", + "REGISTERING_NETWORK": "Čekání na síť...", + "CHECKING_NEW_VERSION": "Kontrola nové verze...", + "CHECK_NEW_VERSION_FAILED": "Kontrola nové verze selhala, opakování za %d sekund: %s", + "SWITCH_TO_WIFI_NETWORK": "Přepínání na Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Přepínání na 4G...", + "STANDBY": "Pohotovost", + "CONNECT_TO": "Připojit k ", + "CONNECTING": "Připojování...", + "CONNECTED_TO": "Připojeno k ", + "LISTENING": "Naslouchání...", + "SPEAKING": "Mluvení...", + "SERVER_NOT_FOUND": "Hledání dostupné služby", + "SERVER_NOT_CONNECTED": "Nelze se připojit ke službě, zkuste to později", + "SERVER_TIMEOUT": "Čas odpovědi vypršel", + "SERVER_ERROR": "Odeslání selhalo, zkontrolujte síť", + "CONNECT_TO_HOTSPOT": "Připojte telefon k hotspotu ", + "ACCESS_VIA_BROWSER": ",přístup přes prohlížeč ", + "WIFI_CONFIG_MODE": "Režim konfigurace sítě", + "ENTERING_WIFI_CONFIG_MODE": "Vstup do režimu konfigurace sítě...", + "SCANNING_WIFI": "Skenování Wi-Fi...", "NEW_VERSION": "Nová verze ", - "OTA_UPGRADE":"OTA upgrade", - "UPGRADING":"Aktualizace systému...", - "UPGRADE_FAILED":"Upgrade selhal", - "ACTIVATION":"Aktivace zařízení", - - "BATTERY_LOW":"Slabá baterie", - "BATTERY_CHARGING":"Nabíjení", - "BATTERY_FULL":"Baterie plná", - "BATTERY_NEED_CHARGE":"Slabá baterie, prosím nabijte", - - "VOLUME":"Hlasitost ", - "MUTED":"Ztlumeno", - "MAX_VOLUME":"Maximální hlasitost", - - "RTC_MODE_OFF":"AEC vypnuto", - "RTC_MODE_ON":"AEC zapnuto" + "OTA_UPGRADE": "OTA upgrade", + "UPGRADING": "Aktualizace systému...", + "UPGRADE_FAILED": "Upgrade selhal", + "ACTIVATION": "Aktivace zařízení", + "BATTERY_LOW": "Slabá baterie", + "BATTERY_CHARGING": "Nabíjení", + "BATTERY_FULL": "Baterie plná", + "BATTERY_NEED_CHARGE": "Slabá baterie, prosím nabijte", + "VOLUME": "Hlasitost ", + "MUTED": "Ztlumeno", + "MAX_VOLUME": "Maximální hlasitost", + "RTC_MODE_OFF": "AEC vypnuto", + "RTC_MODE_ON": "AEC zapnuto", + "DOWNLOAD_ASSETS_FAILED": "Nepodařilo se stáhnout prostředky", + "LOADING_ASSETS": "Načítání prostředků...", + "PLEASE_WAIT": "Prosím čekejte...", + "FOUND_NEW_ASSETS": "Nalezeny nové prostředky: %s", + "HELLO_MY_FRIEND": "Ahoj, můj příteli!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/de-DE/language.json b/main/assets/locales/de-DE/language.json index 8bc74df..724e267 100644 --- a/main/assets/locales/de-DE/language.json +++ b/main/assets/locales/de-DE/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"de-DE" + "type": "de-DE" }, "strings": { - "WARNING":"Warnung", - "INFO":"Information", - "ERROR":"Fehler", + "WARNING": "Warnung", + "INFO": "Information", + "ERROR": "Fehler", "VERSION": "Version ", - "LOADING_PROTOCOL":"Verbindung zum Server...", - "INITIALIZING":"Initialisierung...", - "PIN_ERROR":"Bitte SIM-Karte einlegen", - "REG_ERROR":"Netzwerkverbindung fehlgeschlagen, bitte Datenkartenstatus prüfen", - "DETECTING_MODULE":"Modul erkennen...", - "REGISTERING_NETWORK":"Auf Netzwerk warten...", - "CHECKING_NEW_VERSION":"Neue Version prüfen...", - "CHECK_NEW_VERSION_FAILED":"Neue Version prüfen fehlgeschlagen, Wiederholung in %d Sekunden: %s", - "SWITCH_TO_WIFI_NETWORK":"Zu Wi-Fi wechseln...", - "SWITCH_TO_4G_NETWORK":"Zu 4G wechseln...", - - "STANDBY":"Bereitschaft", - "CONNECT_TO":"Verbinden zu ", - "CONNECTING":"Verbindung wird hergestellt...", - "CONNECTED_TO":"Verbunden mit ", - - "LISTENING":"Zuhören...", - "SPEAKING":"Sprechen...", - - "SERVER_NOT_FOUND":"Verfügbaren Service suchen", - "SERVER_NOT_CONNECTED":"Service-Verbindung fehlgeschlagen, bitte später versuchen", - "SERVER_TIMEOUT":"Antwort-Timeout", - "SERVER_ERROR":"Senden fehlgeschlagen, bitte Netzwerk prüfen", - - "CONNECT_TO_HOTSPOT":"Handy mit Hotspot verbinden ", - "ACCESS_VIA_BROWSER":",Browser öffnen ", - "WIFI_CONFIG_MODE":"Netzwerkkonfigurationsmodus", - "ENTERING_WIFI_CONFIG_MODE":"Netzwerkkonfigurationsmodus eingeben...", - "SCANNING_WIFI":"Wi-Fi scannen...", - + "LOADING_PROTOCOL": "Verbindung zum Server...", + "INITIALIZING": "Initialisierung...", + "PIN_ERROR": "Bitte SIM-Karte einlegen", + "REG_ERROR": "Netzwerkverbindung fehlgeschlagen, bitte Datenkartenstatus prüfen", + "DETECTING_MODULE": "Modul erkennen...", + "REGISTERING_NETWORK": "Auf Netzwerk warten...", + "CHECKING_NEW_VERSION": "Neue Version prüfen...", + "CHECK_NEW_VERSION_FAILED": "Neue Version prüfen fehlgeschlagen, Wiederholung in %d Sekunden: %s", + "SWITCH_TO_WIFI_NETWORK": "Zu Wi-Fi wechseln...", + "SWITCH_TO_4G_NETWORK": "Zu 4G wechseln...", + "STANDBY": "Bereitschaft", + "CONNECT_TO": "Verbinden zu ", + "CONNECTING": "Verbindung wird hergestellt...", + "CONNECTED_TO": "Verbunden mit ", + "LISTENING": "Zuhören...", + "SPEAKING": "Sprechen...", + "SERVER_NOT_FOUND": "Verfügbaren Service suchen", + "SERVER_NOT_CONNECTED": "Service-Verbindung fehlgeschlagen, bitte später versuchen", + "SERVER_TIMEOUT": "Antwort-Timeout", + "SERVER_ERROR": "Senden fehlgeschlagen, bitte Netzwerk prüfen", + "CONNECT_TO_HOTSPOT": "Handy mit Hotspot verbinden ", + "ACCESS_VIA_BROWSER": ",Browser öffnen ", + "WIFI_CONFIG_MODE": "Netzwerkkonfigurationsmodus", + "ENTERING_WIFI_CONFIG_MODE": "Netzwerkkonfigurationsmodus eingeben...", + "SCANNING_WIFI": "Wi-Fi scannen...", "NEW_VERSION": "Neue Version ", - "OTA_UPGRADE":"OTA-Upgrade", - "UPGRADING":"System wird aktualisiert...", - "UPGRADE_FAILED":"Upgrade fehlgeschlagen", - "ACTIVATION":"Gerät aktivieren", - - "BATTERY_LOW":"Niedriger Batteriestand", - "BATTERY_CHARGING":"Wird geladen", - "BATTERY_FULL":"Batterie voll", - "BATTERY_NEED_CHARGE":"Niedriger Batteriestand, bitte aufladen", - - "VOLUME":"Lautstärke ", - "MUTED":"Stummgeschaltet", - "MAX_VOLUME":"Maximale Lautstärke", - - "RTC_MODE_OFF":"AEC aus", - "RTC_MODE_ON":"AEC ein" + "OTA_UPGRADE": "OTA-Upgrade", + "UPGRADING": "System wird aktualisiert...", + "UPGRADE_FAILED": "Upgrade fehlgeschlagen", + "ACTIVATION": "Gerät aktivieren", + "BATTERY_LOW": "Niedriger Batteriestand", + "BATTERY_CHARGING": "Wird geladen", + "BATTERY_FULL": "Batterie voll", + "BATTERY_NEED_CHARGE": "Niedriger Batteriestand, bitte aufladen", + "VOLUME": "Lautstärke ", + "MUTED": "Stummgeschaltet", + "MAX_VOLUME": "Maximale Lautstärke", + "RTC_MODE_OFF": "AEC aus", + "RTC_MODE_ON": "AEC ein", + "DOWNLOAD_ASSETS_FAILED": "Fehler beim Herunterladen der Ressourcen", + "LOADING_ASSETS": "Ressourcen werden geladen...", + "PLEASE_WAIT": "Bitte warten...", + "FOUND_NEW_ASSETS": "Neue Ressourcen gefunden: %s", + "HELLO_MY_FRIEND": "Hallo, mein Freund!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/en-US/language.json b/main/assets/locales/en-US/language.json index 54ffb0a..1758d34 100644 --- a/main/assets/locales/en-US/language.json +++ b/main/assets/locales/en-US/language.json @@ -17,43 +17,40 @@ "CHECK_NEW_VERSION_FAILED": "Check for new version failed, will retry in %d seconds: %s", "SWITCH_TO_WIFI_NETWORK": "Switching to Wi-Fi...", "SWITCH_TO_4G_NETWORK": "Switching to 4G...", - "STANDBY": "Standby", "CONNECT_TO": "Connect to ", "CONNECTING": "Connecting...", "CONNECTION_SUCCESSFUL": "Connection Successful", "CONNECTED_TO": "Connected to ", - "LISTENING": "Listening...", "SPEAKING": "Speaking...", - "SERVER_NOT_FOUND": "Looking for available service", "SERVER_NOT_CONNECTED": "Unable to connect to service, please try again later", "SERVER_TIMEOUT": "Waiting for response timeout", "SERVER_ERROR": "Sending failed, please check the network", - "CONNECT_TO_HOTSPOT": "Hotspot: ", "ACCESS_VIA_BROWSER": " Config URL: ", "WIFI_CONFIG_MODE": "Wi-Fi Configuration Mode", "ENTERING_WIFI_CONFIG_MODE": "Entering Wi-Fi configuration mode...", "SCANNING_WIFI": "Scanning Wi-Fi...", - "NEW_VERSION": "New version ", "OTA_UPGRADE": "OTA Upgrade", "UPGRADING": "System is upgrading...", "UPGRADE_FAILED": "Upgrade failed", "ACTIVATION": "Activation", - "BATTERY_LOW": "Low battery", "BATTERY_CHARGING": "Charging", "BATTERY_FULL": "Battery full", "BATTERY_NEED_CHARGE": "Low battery, please charge", - "VOLUME": "Volume ", "MUTED": "Muted", "MAX_VOLUME": "Max volume", - "RTC_MODE_OFF": "AEC Off", - "RTC_MODE_ON": "AEC On" + "RTC_MODE_ON": "AEC On", + "PLEASE_WAIT": "Please wait...", + "FOUND_NEW_ASSETS": "Found new assets: %s", + "DOWNLOAD_ASSETS_FAILED": "Failed to download assets", + "LOADING_ASSETS": "Loading assets...", + "HELLO_MY_FRIEND": "Hello, my friend!" } } \ No newline at end of file diff --git a/main/assets/locales/es-ES/language.json b/main/assets/locales/es-ES/language.json index 63205ae..e7f349b 100644 --- a/main/assets/locales/es-ES/language.json +++ b/main/assets/locales/es-ES/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"es-ES" + "type": "es-ES" }, "strings": { - "WARNING":"Advertencia", - "INFO":"Información", - "ERROR":"Error", + "WARNING": "Advertencia", + "INFO": "Información", + "ERROR": "Error", "VERSION": "Versión ", - "LOADING_PROTOCOL":"Conectando al servidor...", - "INITIALIZING":"Inicializando...", - "PIN_ERROR":"Por favor inserte la tarjeta SIM", - "REG_ERROR":"No se puede acceder a la red, verifique el estado de la tarjeta de datos", - "DETECTING_MODULE":"Detectando módulo...", - "REGISTERING_NETWORK":"Esperando red...", - "CHECKING_NEW_VERSION":"Verificando nueva versión...", - "CHECK_NEW_VERSION_FAILED":"Error al verificar nueva versión, reintentando en %d segundos: %s", - "SWITCH_TO_WIFI_NETWORK":"Cambiando a Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Cambiando a 4G...", - - "STANDBY":"En espera", - "CONNECT_TO":"Conectar a ", - "CONNECTING":"Conectando...", - "CONNECTED_TO":"Conectado a ", - - "LISTENING":"Escuchando...", - "SPEAKING":"Hablando...", - - "SERVER_NOT_FOUND":"Buscando servicio disponible", - "SERVER_NOT_CONNECTED":"No se puede conectar al servicio, inténtelo más tarde", - "SERVER_TIMEOUT":"Tiempo de espera agotado", - "SERVER_ERROR":"Error de envío, verifique la red", - - "CONNECT_TO_HOTSPOT":"Conectar teléfono al punto de acceso ", - "ACCESS_VIA_BROWSER":",acceder mediante navegador ", - "WIFI_CONFIG_MODE":"Modo configuración de red", - "ENTERING_WIFI_CONFIG_MODE":"Entrando en modo configuración de red...", - "SCANNING_WIFI":"Escaneando Wi-Fi...", - + "LOADING_PROTOCOL": "Conectando al servidor...", + "INITIALIZING": "Inicializando...", + "PIN_ERROR": "Por favor inserte la tarjeta SIM", + "REG_ERROR": "No se puede acceder a la red, verifique el estado de la tarjeta de datos", + "DETECTING_MODULE": "Detectando módulo...", + "REGISTERING_NETWORK": "Esperando red...", + "CHECKING_NEW_VERSION": "Verificando nueva versión...", + "CHECK_NEW_VERSION_FAILED": "Error al verificar nueva versión, reintentando en %d segundos: %s", + "SWITCH_TO_WIFI_NETWORK": "Cambiando a Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Cambiando a 4G...", + "STANDBY": "En espera", + "CONNECT_TO": "Conectar a ", + "CONNECTING": "Conectando...", + "CONNECTED_TO": "Conectado a ", + "LISTENING": "Escuchando...", + "SPEAKING": "Hablando...", + "SERVER_NOT_FOUND": "Buscando servicio disponible", + "SERVER_NOT_CONNECTED": "No se puede conectar al servicio, inténtelo más tarde", + "SERVER_TIMEOUT": "Tiempo de espera agotado", + "SERVER_ERROR": "Error de envío, verifique la red", + "CONNECT_TO_HOTSPOT": "Conectar teléfono al punto de acceso ", + "ACCESS_VIA_BROWSER": ",acceder mediante navegador ", + "WIFI_CONFIG_MODE": "Modo configuración de red", + "ENTERING_WIFI_CONFIG_MODE": "Entrando en modo configuración de red...", + "SCANNING_WIFI": "Escaneando Wi-Fi...", "NEW_VERSION": "Nueva versión ", - "OTA_UPGRADE":"Actualización OTA", - "UPGRADING":"Actualizando sistema...", - "UPGRADE_FAILED":"Actualización fallida", - "ACTIVATION":"Activación del dispositivo", - - "BATTERY_LOW":"Batería baja", - "BATTERY_CHARGING":"Cargando", - "BATTERY_FULL":"Batería llena", - "BATTERY_NEED_CHARGE":"Batería baja, por favor cargar", - - "VOLUME":"Volumen ", - "MUTED":"Silenciado", - "MAX_VOLUME":"Volumen máximo", - - "RTC_MODE_OFF":"AEC desactivado", - "RTC_MODE_ON":"AEC activado" + "OTA_UPGRADE": "Actualización OTA", + "UPGRADING": "Actualizando sistema...", + "UPGRADE_FAILED": "Actualización fallida", + "ACTIVATION": "Activación del dispositivo", + "BATTERY_LOW": "Batería baja", + "BATTERY_CHARGING": "Cargando", + "BATTERY_FULL": "Batería llena", + "BATTERY_NEED_CHARGE": "Batería baja, por favor cargar", + "VOLUME": "Volumen ", + "MUTED": "Silenciado", + "MAX_VOLUME": "Volumen máximo", + "RTC_MODE_OFF": "AEC desactivado", + "RTC_MODE_ON": "AEC activado", + "DOWNLOAD_ASSETS_FAILED": "Error al descargar recursos", + "LOADING_ASSETS": "Cargando recursos...", + "PLEASE_WAIT": "Por favor espere...", + "FOUND_NEW_ASSETS": "Encontrados nuevos recursos: %s", + "HELLO_MY_FRIEND": "¡Hola, mi amigo!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/fi-FI/language.json b/main/assets/locales/fi-FI/language.json index c30219e..2326ee4 100644 --- a/main/assets/locales/fi-FI/language.json +++ b/main/assets/locales/fi-FI/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"fi-FI" + "type": "fi-FI" }, "strings": { - "WARNING":"Varoitus", - "INFO":"Tieto", - "ERROR":"Virhe", + "WARNING": "Varoitus", + "INFO": "Tieto", + "ERROR": "Virhe", "VERSION": "Versio ", - "LOADING_PROTOCOL":"Yhdistetään palvelimeen...", - "INITIALIZING":"Alustetaan...", - "PIN_ERROR":"Ole hyvä ja aseta SIM-kortti", - "REG_ERROR":"Ei voi muodostaa yhteyttä verkkoon, tarkista datakortin tila", - "DETECTING_MODULE":"Tunnistetaan moduuli...", - "REGISTERING_NETWORK":"Odotetaan verkkoa...", - "CHECKING_NEW_VERSION":"Tarkistetaan uutta versiota...", - "CHECK_NEW_VERSION_FAILED":"Uuden version tarkistus epäonnistui, yritetään uudelleen %d sekunnin kuluttua: %s", - "SWITCH_TO_WIFI_NETWORK":"Vaihdetaan Wi-Fi:hin...", - "SWITCH_TO_4G_NETWORK":"Vaihdetaan 4G:hen...", - - "STANDBY":"Valmiustila", - "CONNECT_TO":"Yhdistä ", - "CONNECTING":"Yhdistetään...", - "CONNECTED_TO":"Yhdistetty ", - - "LISTENING":"Kuunnellaan...", - "SPEAKING":"Puhutaan...", - - "SERVER_NOT_FOUND":"Etsitään käytettävissä olevaa palvelua", - "SERVER_NOT_CONNECTED":"Ei voi yhdistää palveluun, yritä myöhemmin", - "SERVER_TIMEOUT":"Vastauksen aikakatkaisu", - "SERVER_ERROR":"Lähetys epäonnistui, tarkista verkko", - - "CONNECT_TO_HOTSPOT":"Yhdistä puhelin hotspottiin ", - "ACCESS_VIA_BROWSER":",pääsy selaimen kautta ", - "WIFI_CONFIG_MODE":"Verkon konfigurointitila", - "ENTERING_WIFI_CONFIG_MODE":"Siirrytään verkon konfigurointitilaan...", - "SCANNING_WIFI":"Skannataan Wi-Fi...", - + "LOADING_PROTOCOL": "Yhdistetään palvelimeen...", + "INITIALIZING": "Alustetaan...", + "PIN_ERROR": "Ole hyvä ja aseta SIM-kortti", + "REG_ERROR": "Ei voi muodostaa yhteyttä verkkoon, tarkista datakortin tila", + "DETECTING_MODULE": "Tunnistetaan moduuli...", + "REGISTERING_NETWORK": "Odotetaan verkkoa...", + "CHECKING_NEW_VERSION": "Tarkistetaan uutta versiota...", + "CHECK_NEW_VERSION_FAILED": "Uuden version tarkistus epäonnistui, yritetään uudelleen %d sekunnin kuluttua: %s", + "SWITCH_TO_WIFI_NETWORK": "Vaihdetaan Wi-Fi:hin...", + "SWITCH_TO_4G_NETWORK": "Vaihdetaan 4G:hen...", + "STANDBY": "Valmiustila", + "CONNECT_TO": "Yhdistä ", + "CONNECTING": "Yhdistetään...", + "CONNECTED_TO": "Yhdistetty ", + "LISTENING": "Kuunnellaan...", + "SPEAKING": "Puhutaan...", + "SERVER_NOT_FOUND": "Etsitään käytettävissä olevaa palvelua", + "SERVER_NOT_CONNECTED": "Ei voi yhdistää palveluun, yritä myöhemmin", + "SERVER_TIMEOUT": "Vastauksen aikakatkaisu", + "SERVER_ERROR": "Lähetys epäonnistui, tarkista verkko", + "CONNECT_TO_HOTSPOT": "Yhdistä puhelin hotspottiin ", + "ACCESS_VIA_BROWSER": ",pääsy selaimen kautta ", + "WIFI_CONFIG_MODE": "Verkon konfigurointitila", + "ENTERING_WIFI_CONFIG_MODE": "Siirrytään verkon konfigurointitilaan...", + "SCANNING_WIFI": "Skannataan Wi-Fi...", "NEW_VERSION": "Uusi versio ", - "OTA_UPGRADE":"OTA-päivitys", - "UPGRADING":"Päivitetään järjestelmää...", - "UPGRADE_FAILED":"Päivitys epäonnistui", - "ACTIVATION":"Laitteen aktivointi", - - "BATTERY_LOW":"Akku vähissä", - "BATTERY_CHARGING":"Ladataan", - "BATTERY_FULL":"Akku täynnä", - "BATTERY_NEED_CHARGE":"Akku vähissä, ole hyvä ja lataa", - - "VOLUME":"Äänenvoimakkuus ", - "MUTED":"Mykistetty", - "MAX_VOLUME":"Maksimi äänenvoimakkuus", - - "RTC_MODE_OFF":"AEC pois päältä", - "RTC_MODE_ON":"AEC päällä" + "OTA_UPGRADE": "OTA-päivitys", + "UPGRADING": "Päivitetään järjestelmää...", + "UPGRADE_FAILED": "Päivitys epäonnistui", + "ACTIVATION": "Laitteen aktivointi", + "BATTERY_LOW": "Akku vähissä", + "BATTERY_CHARGING": "Ladataan", + "BATTERY_FULL": "Akku täynnä", + "BATTERY_NEED_CHARGE": "Akku vähissä, ole hyvä ja lataa", + "VOLUME": "Äänenvoimakkuus ", + "MUTED": "Mykistetty", + "MAX_VOLUME": "Maksimi äänenvoimakkuus", + "RTC_MODE_OFF": "AEC pois päältä", + "RTC_MODE_ON": "AEC päällä", + "DOWNLOAD_ASSETS_FAILED": "Resurssien lataaminen epäonnistui", + "LOADING_ASSETS": "Ladataan resursseja...", + "PLEASE_WAIT": "Odota hetki...", + "FOUND_NEW_ASSETS": "Löydetty uusia resursseja: %s", + "HELLO_MY_FRIEND": "Hei, ystäväni!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/fr-FR/language.json b/main/assets/locales/fr-FR/language.json index 149a8aa..244cade 100644 --- a/main/assets/locales/fr-FR/language.json +++ b/main/assets/locales/fr-FR/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"fr-FR" + "type": "fr-FR" }, "strings": { - "WARNING":"Avertissement", - "INFO":"Information", - "ERROR":"Erreur", + "WARNING": "Avertissement", + "INFO": "Information", + "ERROR": "Erreur", "VERSION": "Version ", - "LOADING_PROTOCOL":"Connexion au serveur...", - "INITIALIZING":"Initialisation...", - "PIN_ERROR":"Veuillez insérer la carte SIM", - "REG_ERROR":"Impossible d'accéder au réseau, veuillez vérifier l'état de la carte de données", - "DETECTING_MODULE":"Détection du module...", - "REGISTERING_NETWORK":"En attente du réseau...", - "CHECKING_NEW_VERSION":"Vérification de nouvelle version...", - "CHECK_NEW_VERSION_FAILED":"Échec de vérification de nouvelle version, nouvelle tentative dans %d secondes : %s", - "SWITCH_TO_WIFI_NETWORK":"Basculer vers Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Basculer vers 4G...", - - "STANDBY":"En attente", - "CONNECT_TO":"Se connecter à ", - "CONNECTING":"Connexion en cours...", - "CONNECTED_TO":"Connecté à ", - - "LISTENING":"Écoute...", - "SPEAKING":"Parole...", - - "SERVER_NOT_FOUND":"Recherche d'un service disponible", - "SERVER_NOT_CONNECTED":"Impossible de se connecter au service, veuillez réessayer plus tard", - "SERVER_TIMEOUT":"Délai d'attente de réponse", - "SERVER_ERROR":"Échec d'envoi, veuillez vérifier le réseau", - - "CONNECT_TO_HOTSPOT":"Connecter le téléphone au point d'accès ", - "ACCESS_VIA_BROWSER":",accéder via le navigateur ", - "WIFI_CONFIG_MODE":"Mode configuration réseau", - "ENTERING_WIFI_CONFIG_MODE":"Entrer en mode configuration réseau...", - "SCANNING_WIFI":"Scan Wi-Fi...", - + "LOADING_PROTOCOL": "Connexion au serveur...", + "INITIALIZING": "Initialisation...", + "PIN_ERROR": "Veuillez insérer la carte SIM", + "REG_ERROR": "Impossible d'accéder au réseau, veuillez vérifier l'état de la carte de données", + "DETECTING_MODULE": "Détection du module...", + "REGISTERING_NETWORK": "En attente du réseau...", + "CHECKING_NEW_VERSION": "Vérification de nouvelle version...", + "CHECK_NEW_VERSION_FAILED": "Échec de vérification de nouvelle version, nouvelle tentative dans %d secondes : %s", + "SWITCH_TO_WIFI_NETWORK": "Basculer vers Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Basculer vers 4G...", + "STANDBY": "En attente", + "CONNECT_TO": "Se connecter à ", + "CONNECTING": "Connexion en cours...", + "CONNECTED_TO": "Connecté à ", + "LISTENING": "Écoute...", + "SPEAKING": "Parole...", + "SERVER_NOT_FOUND": "Recherche d'un service disponible", + "SERVER_NOT_CONNECTED": "Impossible de se connecter au service, veuillez réessayer plus tard", + "SERVER_TIMEOUT": "Délai d'attente de réponse", + "SERVER_ERROR": "Échec d'envoi, veuillez vérifier le réseau", + "CONNECT_TO_HOTSPOT": "Connecter le téléphone au point d'accès ", + "ACCESS_VIA_BROWSER": ",accéder via le navigateur ", + "WIFI_CONFIG_MODE": "Mode configuration réseau", + "ENTERING_WIFI_CONFIG_MODE": "Entrer en mode configuration réseau...", + "SCANNING_WIFI": "Scan Wi-Fi...", "NEW_VERSION": "Nouvelle version ", - "OTA_UPGRADE":"Mise à jour OTA", - "UPGRADING":"Mise à jour du système...", - "UPGRADE_FAILED":"Échec de mise à jour", - "ACTIVATION":"Activation de l'appareil", - - "BATTERY_LOW":"Batterie faible", - "BATTERY_CHARGING":"En charge", - "BATTERY_FULL":"Batterie pleine", - "BATTERY_NEED_CHARGE":"Batterie faible, veuillez charger", - - "VOLUME":"Volume ", - "MUTED":"Muet", - "MAX_VOLUME":"Volume maximum", - - "RTC_MODE_OFF":"AEC désactivé", - "RTC_MODE_ON":"AEC activé" + "OTA_UPGRADE": "Mise à jour OTA", + "UPGRADING": "Mise à jour du système...", + "UPGRADE_FAILED": "Échec de mise à jour", + "ACTIVATION": "Activation de l'appareil", + "BATTERY_LOW": "Batterie faible", + "BATTERY_CHARGING": "En charge", + "BATTERY_FULL": "Batterie pleine", + "BATTERY_NEED_CHARGE": "Batterie faible, veuillez charger", + "VOLUME": "Volume ", + "MUTED": "Muet", + "MAX_VOLUME": "Volume maximum", + "RTC_MODE_OFF": "AEC désactivé", + "RTC_MODE_ON": "AEC activé", + "DOWNLOAD_ASSETS_FAILED": "Échec du téléchargement des ressources", + "LOADING_ASSETS": "Chargement des ressources...", + "PLEASE_WAIT": "Veuillez patienter...", + "FOUND_NEW_ASSETS": "Nouvelles ressources trouvées: %s", + "HELLO_MY_FRIEND": "Bonjour, mon ami !" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/hi-IN/language.json b/main/assets/locales/hi-IN/language.json index b1e09cf..732176e 100644 --- a/main/assets/locales/hi-IN/language.json +++ b/main/assets/locales/hi-IN/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"hi-IN" + "type": "hi-IN" }, "strings": { - "WARNING":"चेतावनी", - "INFO":"जानकारी", - "ERROR":"त्रुटि", + "WARNING": "चेतावनी", + "INFO": "जानकारी", + "ERROR": "त्रुटि", "VERSION": "संस्करण ", - "LOADING_PROTOCOL":"सर्वर से कनेक्ट हो रहे हैं...", - "INITIALIZING":"आरंभीकरण...", - "PIN_ERROR":"कृपया सिम कार्ड डालें", - "REG_ERROR":"नेटवर्क तक पहुंच नहीं हो सकती, कृपया डेटा कार्ड स्थिति जांचें", - "DETECTING_MODULE":"मॉड्यूल का पता लगाया जा रहा है...", - "REGISTERING_NETWORK":"नेटवर्क की प्रतीक्षा...", - "CHECKING_NEW_VERSION":"नया संस्करण जाँच रहे हैं...", - "CHECK_NEW_VERSION_FAILED":"नया संस्करण जाँचना असफल, %d सेकंड में पुनः प्रयास: %s", - "SWITCH_TO_WIFI_NETWORK":"Wi-Fi पर स्विच कर रहे हैं...", - "SWITCH_TO_4G_NETWORK":"4G पर स्विच कर रहे हैं...", - - "STANDBY":"स्टैंडबाय", - "CONNECT_TO":"कनेक्ट करें ", - "CONNECTING":"कनेक्ट हो रहे हैं...", - "CONNECTED_TO":"कनेक्ट हो गए ", - - "LISTENING":"सुन रहे हैं...", - "SPEAKING":"बोल रहे हैं...", - - "SERVER_NOT_FOUND":"उपलब्ध सेवा खोज रहे हैं", - "SERVER_NOT_CONNECTED":"सेवा से कनेक्ट नहीं हो सकते, कृपया बाद में कोशिश करें", - "SERVER_TIMEOUT":"प्रतिक्रिया का समय समाप्त", - "SERVER_ERROR":"भेजना असफल, कृपया नेटवर्क जांचें", - - "CONNECT_TO_HOTSPOT":"फोन को हॉटस्पॉट से कनेक्ट करें ", - "ACCESS_VIA_BROWSER":",ब्राउज़र के माध्यम से पहुंचें ", - "WIFI_CONFIG_MODE":"नेटवर्क कॉन्फ़िगरेशन मोड", - "ENTERING_WIFI_CONFIG_MODE":"नेटवर्क कॉन्फ़िगरेशन मोड में प्रवेश...", - "SCANNING_WIFI":"Wi-Fi स्कैन कर रहे हैं...", - + "LOADING_PROTOCOL": "सर्वर से कनेक्ट हो रहे हैं...", + "INITIALIZING": "आरंभीकरण...", + "PIN_ERROR": "कृपया सिम कार्ड डालें", + "REG_ERROR": "नेटवर्क तक पहुंच नहीं हो सकती, कृपया डेटा कार्ड स्थिति जांचें", + "DETECTING_MODULE": "मॉड्यूल का पता लगाया जा रहा है...", + "REGISTERING_NETWORK": "नेटवर्क की प्रतीक्षा...", + "CHECKING_NEW_VERSION": "नया संस्करण जाँच रहे हैं...", + "CHECK_NEW_VERSION_FAILED": "नया संस्करण जाँचना असफल, %d सेकंड में पुनः प्रयास: %s", + "SWITCH_TO_WIFI_NETWORK": "Wi-Fi पर स्विच कर रहे हैं...", + "SWITCH_TO_4G_NETWORK": "4G पर स्विच कर रहे हैं...", + "STANDBY": "स्टैंडबाय", + "CONNECT_TO": "कनेक्ट करें ", + "CONNECTING": "कनेक्ट हो रहे हैं...", + "CONNECTED_TO": "कनेक्ट हो गए ", + "LISTENING": "सुन रहे हैं...", + "SPEAKING": "बोल रहे हैं...", + "SERVER_NOT_FOUND": "उपलब्ध सेवा खोज रहे हैं", + "SERVER_NOT_CONNECTED": "सेवा से कनेक्ट नहीं हो सकते, कृपया बाद में कोशिश करें", + "SERVER_TIMEOUT": "प्रतिक्रिया का समय समाप्त", + "SERVER_ERROR": "भेजना असफल, कृपया नेटवर्क जांचें", + "CONNECT_TO_HOTSPOT": "फोन को हॉटस्पॉट से कनेक्ट करें ", + "ACCESS_VIA_BROWSER": ",ब्राउज़र के माध्यम से पहुंचें ", + "WIFI_CONFIG_MODE": "नेटवर्क कॉन्फ़िगरेशन मोड", + "ENTERING_WIFI_CONFIG_MODE": "नेटवर्क कॉन्फ़िगरेशन मोड में प्रवेश...", + "SCANNING_WIFI": "Wi-Fi स्कैन कर रहे हैं...", "NEW_VERSION": "नया संस्करण ", - "OTA_UPGRADE":"OTA अपग्रेड", - "UPGRADING":"सिस्टम अपग्रेड हो रहा है...", - "UPGRADE_FAILED":"अपग्रेड असफल", - "ACTIVATION":"डिवाइस सक्रियण", - - "BATTERY_LOW":"बैटरी कम", - "BATTERY_CHARGING":"चार्ज हो रही है", - "BATTERY_FULL":"बैटरी फुल", - "BATTERY_NEED_CHARGE":"बैटरी कम है, कृपया चार्ज करें", - - "VOLUME":"आवाज़ ", - "MUTED":"म्यूट", - "MAX_VOLUME":"अधिकतम आवाज़", - - "RTC_MODE_OFF":"AEC बंद", - "RTC_MODE_ON":"AEC चालू" + "OTA_UPGRADE": "OTA अपग्रेड", + "UPGRADING": "सिस्टम अपग्रेड हो रहा है...", + "UPGRADE_FAILED": "अपग्रेड असफल", + "ACTIVATION": "डिवाइस सक्रियण", + "BATTERY_LOW": "बैटरी कम", + "BATTERY_CHARGING": "चार्ज हो रही है", + "BATTERY_FULL": "बैटरी फुल", + "BATTERY_NEED_CHARGE": "बैटरी कम है, कृपया चार्ज करें", + "VOLUME": "आवाज़ ", + "MUTED": "म्यूट", + "MAX_VOLUME": "अधिकतम आवाज़", + "RTC_MODE_OFF": "AEC बंद", + "RTC_MODE_ON": "AEC चालू", + "DOWNLOAD_ASSETS_FAILED": "संसाधन डाउनलोड करने में विफल", + "LOADING_ASSETS": "संसाधन लोड हो रहे हैं...", + "PLEASE_WAIT": "कृपया प्रतीक्षा करें...", + "FOUND_NEW_ASSETS": "नए संसाधन मिले: %s", + "HELLO_MY_FRIEND": "नमस्ते, मेरे दोस्त!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/id-ID/language.json b/main/assets/locales/id-ID/language.json index 860c7dd..11224a6 100644 --- a/main/assets/locales/id-ID/language.json +++ b/main/assets/locales/id-ID/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"id-ID" + "type": "id-ID" }, "strings": { - "WARNING":"Peringatan", - "INFO":"Informasi", - "ERROR":"Kesalahan", + "WARNING": "Peringatan", + "INFO": "Informasi", + "ERROR": "Kesalahan", "VERSION": "Versi ", - "LOADING_PROTOCOL":"Menghubungkan ke server...", - "INITIALIZING":"Menginisialisasi...", - "PIN_ERROR":"Silakan masukkan kartu SIM", - "REG_ERROR":"Tidak dapat mengakses jaringan, periksa status kartu data", - "DETECTING_MODULE":"Mendeteksi modul...", - "REGISTERING_NETWORK":"Menunggu jaringan...", - "CHECKING_NEW_VERSION":"Memeriksa versi baru...", - "CHECK_NEW_VERSION_FAILED":"Pemeriksaan versi baru gagal, mencoba lagi dalam %d detik: %s", - "SWITCH_TO_WIFI_NETWORK":"Beralih ke Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Beralih ke 4G...", - - "STANDBY":"Siaga", - "CONNECT_TO":"Hubungkan ke ", - "CONNECTING":"Menghubungkan...", - "CONNECTED_TO":"Terhubung ke ", - - "LISTENING":"Mendengarkan...", - "SPEAKING":"Berbicara...", - - "SERVER_NOT_FOUND":"Mencari layanan yang tersedia", - "SERVER_NOT_CONNECTED":"Tidak dapat terhubung ke layanan, coba lagi nanti", - "SERVER_TIMEOUT":"Waktu respons habis", - "SERVER_ERROR":"Pengiriman gagal, periksa jaringan", - - "CONNECT_TO_HOTSPOT":"Hubungkan ponsel ke hotspot ", - "ACCESS_VIA_BROWSER":",akses melalui browser ", - "WIFI_CONFIG_MODE":"Mode konfigurasi jaringan", - "ENTERING_WIFI_CONFIG_MODE":"Memasuki mode konfigurasi jaringan...", - "SCANNING_WIFI":"Memindai Wi-Fi...", - + "LOADING_PROTOCOL": "Menghubungkan ke server...", + "INITIALIZING": "Menginisialisasi...", + "PIN_ERROR": "Silakan masukkan kartu SIM", + "REG_ERROR": "Tidak dapat mengakses jaringan, periksa status kartu data", + "DETECTING_MODULE": "Mendeteksi modul...", + "REGISTERING_NETWORK": "Menunggu jaringan...", + "CHECKING_NEW_VERSION": "Memeriksa versi baru...", + "CHECK_NEW_VERSION_FAILED": "Pemeriksaan versi baru gagal, mencoba lagi dalam %d detik: %s", + "SWITCH_TO_WIFI_NETWORK": "Beralih ke Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Beralih ke 4G...", + "STANDBY": "Siaga", + "CONNECT_TO": "Hubungkan ke ", + "CONNECTING": "Menghubungkan...", + "CONNECTED_TO": "Terhubung ke ", + "LISTENING": "Mendengarkan...", + "SPEAKING": "Berbicara...", + "SERVER_NOT_FOUND": "Mencari layanan yang tersedia", + "SERVER_NOT_CONNECTED": "Tidak dapat terhubung ke layanan, coba lagi nanti", + "SERVER_TIMEOUT": "Waktu respons habis", + "SERVER_ERROR": "Pengiriman gagal, periksa jaringan", + "CONNECT_TO_HOTSPOT": "Hubungkan ponsel ke hotspot ", + "ACCESS_VIA_BROWSER": ",akses melalui browser ", + "WIFI_CONFIG_MODE": "Mode konfigurasi jaringan", + "ENTERING_WIFI_CONFIG_MODE": "Memasuki mode konfigurasi jaringan...", + "SCANNING_WIFI": "Memindai Wi-Fi...", "NEW_VERSION": "Versi baru ", - "OTA_UPGRADE":"Pembaruan OTA", - "UPGRADING":"Memperbarui sistem...", - "UPGRADE_FAILED":"Pembaruan gagal", - "ACTIVATION":"Aktivasi perangkat", - - "BATTERY_LOW":"Baterai lemah", - "BATTERY_CHARGING":"Mengisi", - "BATTERY_FULL":"Baterai penuh", - "BATTERY_NEED_CHARGE":"Baterai lemah, silakan isi", - - "VOLUME":"Volume ", - "MUTED":"Bisu", - "MAX_VOLUME":"Volume maksimum", - - "RTC_MODE_OFF":"AEC mati", - "RTC_MODE_ON":"AEC nyala" + "OTA_UPGRADE": "Pembaruan OTA", + "UPGRADING": "Memperbarui sistem...", + "UPGRADE_FAILED": "Pembaruan gagal", + "ACTIVATION": "Aktivasi perangkat", + "BATTERY_LOW": "Baterai lemah", + "BATTERY_CHARGING": "Mengisi", + "BATTERY_FULL": "Baterai penuh", + "BATTERY_NEED_CHARGE": "Baterai lemah, silakan isi", + "VOLUME": "Volume ", + "MUTED": "Bisu", + "MAX_VOLUME": "Volume maksimum", + "RTC_MODE_OFF": "AEC mati", + "RTC_MODE_ON": "AEC nyala", + "DOWNLOAD_ASSETS_FAILED": "Gagal mengunduh aset", + "LOADING_ASSETS": "Memuat aset...", + "PLEASE_WAIT": "Mohon tunggu...", + "FOUND_NEW_ASSETS": "Ditemukan aset baru: %s", + "HELLO_MY_FRIEND": "Halo, teman saya!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/it-IT/language.json b/main/assets/locales/it-IT/language.json index be1702d..54cc9bc 100644 --- a/main/assets/locales/it-IT/language.json +++ b/main/assets/locales/it-IT/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"it-IT" + "type": "it-IT" }, "strings": { - "WARNING":"Avviso", - "INFO":"Informazione", - "ERROR":"Errore", + "WARNING": "Avviso", + "INFO": "Informazione", + "ERROR": "Errore", "VERSION": "Versione ", - "LOADING_PROTOCOL":"Connessione al server...", - "INITIALIZING":"Inizializzazione...", - "PIN_ERROR":"Inserire la scheda SIM", - "REG_ERROR":"Impossibile accedere alla rete, controllare lo stato della scheda dati", - "DETECTING_MODULE":"Rilevamento modulo...", - "REGISTERING_NETWORK":"In attesa della rete...", - "CHECKING_NEW_VERSION":"Controllo nuova versione...", - "CHECK_NEW_VERSION_FAILED":"Controllo nuova versione fallito, riprovo tra %d secondi: %s", - "SWITCH_TO_WIFI_NETWORK":"Passaggio a Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Passaggio a 4G...", - - "STANDBY":"In attesa", - "CONNECT_TO":"Connetti a ", - "CONNECTING":"Connessione...", - "CONNECTED_TO":"Connesso a ", - - "LISTENING":"In ascolto...", - "SPEAKING":"Parlando...", - - "SERVER_NOT_FOUND":"Ricerca servizio disponibile", - "SERVER_NOT_CONNECTED":"Impossibile connettersi al servizio, riprovare più tardi", - "SERVER_TIMEOUT":"Timeout risposta", - "SERVER_ERROR":"Invio fallito, controllare la rete", - - "CONNECT_TO_HOTSPOT":"Connetti telefono al hotspot ", - "ACCESS_VIA_BROWSER":",accedi tramite browser ", - "WIFI_CONFIG_MODE":"Modalità configurazione rete", - "ENTERING_WIFI_CONFIG_MODE":"Entrata in modalità configurazione rete...", - "SCANNING_WIFI":"Scansione Wi-Fi...", - + "LOADING_PROTOCOL": "Connessione al server...", + "INITIALIZING": "Inizializzazione...", + "PIN_ERROR": "Inserire la scheda SIM", + "REG_ERROR": "Impossibile accedere alla rete, controllare lo stato della scheda dati", + "DETECTING_MODULE": "Rilevamento modulo...", + "REGISTERING_NETWORK": "In attesa della rete...", + "CHECKING_NEW_VERSION": "Controllo nuova versione...", + "CHECK_NEW_VERSION_FAILED": "Controllo nuova versione fallito, riprovo tra %d secondi: %s", + "SWITCH_TO_WIFI_NETWORK": "Passaggio a Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Passaggio a 4G...", + "STANDBY": "In attesa", + "CONNECT_TO": "Connetti a ", + "CONNECTING": "Connessione...", + "CONNECTED_TO": "Connesso a ", + "LISTENING": "In ascolto...", + "SPEAKING": "Parlando...", + "SERVER_NOT_FOUND": "Ricerca servizio disponibile", + "SERVER_NOT_CONNECTED": "Impossibile connettersi al servizio, riprovare più tardi", + "SERVER_TIMEOUT": "Timeout risposta", + "SERVER_ERROR": "Invio fallito, controllare la rete", + "CONNECT_TO_HOTSPOT": "Connetti telefono al hotspot ", + "ACCESS_VIA_BROWSER": ",accedi tramite browser ", + "WIFI_CONFIG_MODE": "Modalità configurazione rete", + "ENTERING_WIFI_CONFIG_MODE": "Entrata in modalità configurazione rete...", + "SCANNING_WIFI": "Scansione Wi-Fi...", "NEW_VERSION": "Nuova versione ", - "OTA_UPGRADE":"Aggiornamento OTA", - "UPGRADING":"Aggiornamento sistema...", - "UPGRADE_FAILED":"Aggiornamento fallito", - "ACTIVATION":"Attivazione dispositivo", - - "BATTERY_LOW":"Batteria scarica", - "BATTERY_CHARGING":"In carica", - "BATTERY_FULL":"Batteria piena", - "BATTERY_NEED_CHARGE":"Batteria scarica, ricaricare", - - "VOLUME":"Volume ", - "MUTED":"Silenziato", - "MAX_VOLUME":"Volume massimo", - - "RTC_MODE_OFF":"AEC disattivato", - "RTC_MODE_ON":"AEC attivato" + "OTA_UPGRADE": "Aggiornamento OTA", + "UPGRADING": "Aggiornamento sistema...", + "UPGRADE_FAILED": "Aggiornamento fallito", + "ACTIVATION": "Attivazione dispositivo", + "BATTERY_LOW": "Batteria scarica", + "BATTERY_CHARGING": "In carica", + "BATTERY_FULL": "Batteria piena", + "BATTERY_NEED_CHARGE": "Batteria scarica, ricaricare", + "VOLUME": "Volume ", + "MUTED": "Silenziato", + "MAX_VOLUME": "Volume massimo", + "RTC_MODE_OFF": "AEC disattivato", + "RTC_MODE_ON": "AEC attivato", + "DOWNLOAD_ASSETS_FAILED": "Impossibile scaricare le risorse", + "LOADING_ASSETS": "Caricamento risorse...", + "PLEASE_WAIT": "Attendere prego...", + "FOUND_NEW_ASSETS": "Trovate nuove risorse: %s", + "HELLO_MY_FRIEND": "Ciao, amico mio!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/ja-JP/language.json b/main/assets/locales/ja-JP/language.json index 7cf00cd..1c2bd82 100644 --- a/main/assets/locales/ja-JP/language.json +++ b/main/assets/locales/ja-JP/language.json @@ -17,42 +17,39 @@ "CHECK_NEW_VERSION_FAILED": "更新確認に失敗しました。%d 秒後に再試行します: %s", "SWITCH_TO_WIFI_NETWORK": "Wi-Fiに切り替え中...", "SWITCH_TO_4G_NETWORK": "4Gに切り替え中...", - "STANDBY": "待機中", "CONNECT_TO": "接続先 ", "CONNECTING": "接続中...", "CONNECTED_TO": "接続完了 ", - "LISTENING": "リスニング中...", "SPEAKING": "話しています...", - "SERVER_NOT_FOUND": "利用可能なサーバーを探しています", "SERVER_NOT_CONNECTED": "サーバーに接続できません。後でもう一度お試しください", "SERVER_TIMEOUT": "応答待機時間が終了しました", "SERVER_ERROR": "送信に失敗しました。ネットワークを確認してください", - "CONNECT_TO_HOTSPOT": "スマートフォンをWi-Fi ", "ACCESS_VIA_BROWSER": " に接続し、ブラウザでアクセスしてください ", "WIFI_CONFIG_MODE": "ネットワーク設定モード", "ENTERING_WIFI_CONFIG_MODE": "ネットワーク設定中...", "SCANNING_WIFI": "Wi-Fiをスキャン中...", - "NEW_VERSION": "新しいバージョン ", "OTA_UPGRADE": "OTAアップグレード", "UPGRADING": "システムをアップグレード中...", "UPGRADE_FAILED": "アップグレード失敗", "ACTIVATION": "デバイスをアクティベート", - "BATTERY_LOW": "バッテリーが少なくなっています", "BATTERY_CHARGING": "充電中", "BATTERY_FULL": "バッテリー満タン", "BATTERY_NEED_CHARGE": "バッテリーが低下しています。充電してください", - "VOLUME": "音量 ", "MUTED": "ミュートされています", "MAX_VOLUME": "最大音量", - "RTC_MODE_OFF": "AEC 無効", - "RTC_MODE_ON": "AEC 有効" + "RTC_MODE_ON": "AEC 有効", + "DOWNLOAD_ASSETS_FAILED": "アセットのダウンロードに失敗しました", + "LOADING_ASSETS": "アセットを読み込み中...", + "PLEASE_WAIT": "お待ちください...", + "FOUND_NEW_ASSETS": "新しいアセットが見つかりました: %s", + "HELLO_MY_FRIEND": "こんにちは、友達!" } -} +} \ No newline at end of file diff --git a/main/assets/locales/ko-KR/language.json b/main/assets/locales/ko-KR/language.json index 9683c8a..1d65bfb 100644 --- a/main/assets/locales/ko-KR/language.json +++ b/main/assets/locales/ko-KR/language.json @@ -17,43 +17,40 @@ "CHECK_NEW_VERSION_FAILED": "새 버전 확인에 실패했습니다. %d초 후에 다시 시도합니다: %s", "SWITCH_TO_WIFI_NETWORK": "Wi-Fi로 전환 중...", "SWITCH_TO_4G_NETWORK": "4G로 전환 중...", - "STANDBY": "대기", "CONNECT_TO": "연결 대상: ", "CONNECTING": "연결 중...", "CONNECTION_SUCCESSFUL": "연결 성공", "CONNECTED_TO": "연결됨: ", - "LISTENING": "듣는 중...", "SPEAKING": "말하는 중...", - "SERVER_NOT_FOUND": "사용 가능한 서비스를 찾는 중", "SERVER_NOT_CONNECTED": "서비스에 연결할 수 없습니다. 나중에 다시 시도하세요", "SERVER_TIMEOUT": "응답 대기 시간 초과", "SERVER_ERROR": "전송 실패, 네트워크를 확인하세요", - "CONNECT_TO_HOTSPOT": "핫스팟: ", "ACCESS_VIA_BROWSER": " 설정 URL: ", "WIFI_CONFIG_MODE": "Wi-Fi 설정 모드", "ENTERING_WIFI_CONFIG_MODE": "Wi-Fi 설정 모드 진입 중...", "SCANNING_WIFI": "Wi-Fi 스캔 중...", - "NEW_VERSION": "새 버전 ", "OTA_UPGRADE": "OTA 업그레이드", "UPGRADING": "시스템 업그레이드 중...", "UPGRADE_FAILED": "업그레이드 실패", "ACTIVATION": "활성화", - "BATTERY_LOW": "배터리 부족", "BATTERY_CHARGING": "충전 중", "BATTERY_FULL": "배터리 완충", "BATTERY_NEED_CHARGE": "배터리 부족, 충전하세요", - "VOLUME": "볼륨 ", "MUTED": "음소거", "MAX_VOLUME": "최대 볼륨", - "RTC_MODE_OFF": "AEC 끄기", - "RTC_MODE_ON": "AEC 켜기" + "RTC_MODE_ON": "AEC 켜기", + "DOWNLOAD_ASSETS_FAILED": "에셋 다운로드 실패", + "LOADING_ASSETS": "에셋 로딩 중...", + "PLEASE_WAIT": "잠시 기다려 주세요...", + "FOUND_NEW_ASSETS": "새로운 에셋을 발견했습니다: %s", + "HELLO_MY_FRIEND": "안녕하세요, 친구!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/pl-PL/language.json b/main/assets/locales/pl-PL/language.json index 4f92dc4..b54c292 100644 --- a/main/assets/locales/pl-PL/language.json +++ b/main/assets/locales/pl-PL/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"pl-PL" + "type": "pl-PL" }, "strings": { - "WARNING":"Ostrzeżenie", - "INFO":"Informacja", - "ERROR":"Błąd", + "WARNING": "Ostrzeżenie", + "INFO": "Informacja", + "ERROR": "Błąd", "VERSION": "Wersja ", - "LOADING_PROTOCOL":"Łączenie z serwerem...", - "INITIALIZING":"Inicjalizacja...", - "PIN_ERROR":"Proszę włożyć kartę SIM", - "REG_ERROR":"Nie można uzyskać dostępu do sieci, sprawdź stan karty danych", - "DETECTING_MODULE":"Wykrywanie modułu...", - "REGISTERING_NETWORK":"Oczekiwanie na sieć...", - "CHECKING_NEW_VERSION":"Sprawdzanie nowej wersji...", - "CHECK_NEW_VERSION_FAILED":"Sprawdzanie nowej wersji nie powiodło się, ponowna próba za %d sekund: %s", - "SWITCH_TO_WIFI_NETWORK":"Przełączanie na Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Przełączanie na 4G...", - - "STANDBY":"Gotowość", - "CONNECT_TO":"Połącz z ", - "CONNECTING":"Łączenie...", - "CONNECTED_TO":"Połączono z ", - - "LISTENING":"Słuchanie...", - "SPEAKING":"Mówienie...", - - "SERVER_NOT_FOUND":"Szukanie dostępnej usługi", - "SERVER_NOT_CONNECTED":"Nie można połączyć się z usługą, spróbuj ponownie później", - "SERVER_TIMEOUT":"Przekroczono czas oczekiwania na odpowiedź", - "SERVER_ERROR":"Wysyłanie nie powiodło się, sprawdź sieć", - - "CONNECT_TO_HOTSPOT":"Podłącz telefon do hotspotu ", - "ACCESS_VIA_BROWSER":",dostęp przez przeglądarkę ", - "WIFI_CONFIG_MODE":"Tryb konfiguracji sieci", - "ENTERING_WIFI_CONFIG_MODE":"Wchodzenie w tryb konfiguracji sieci...", - "SCANNING_WIFI":"Skanowanie Wi-Fi...", - + "LOADING_PROTOCOL": "Łączenie z serwerem...", + "INITIALIZING": "Inicjalizacja...", + "PIN_ERROR": "Proszę włożyć kartę SIM", + "REG_ERROR": "Nie można uzyskać dostępu do sieci, sprawdź stan karty danych", + "DETECTING_MODULE": "Wykrywanie modułu...", + "REGISTERING_NETWORK": "Oczekiwanie na sieć...", + "CHECKING_NEW_VERSION": "Sprawdzanie nowej wersji...", + "CHECK_NEW_VERSION_FAILED": "Sprawdzanie nowej wersji nie powiodło się, ponowna próba za %d sekund: %s", + "SWITCH_TO_WIFI_NETWORK": "Przełączanie na Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Przełączanie na 4G...", + "STANDBY": "Gotowość", + "CONNECT_TO": "Połącz z ", + "CONNECTING": "Łączenie...", + "CONNECTED_TO": "Połączono z ", + "LISTENING": "Słuchanie...", + "SPEAKING": "Mówienie...", + "SERVER_NOT_FOUND": "Szukanie dostępnej usługi", + "SERVER_NOT_CONNECTED": "Nie można połączyć się z usługą, spróbuj ponownie później", + "SERVER_TIMEOUT": "Przekroczono czas oczekiwania na odpowiedź", + "SERVER_ERROR": "Wysyłanie nie powiodło się, sprawdź sieć", + "CONNECT_TO_HOTSPOT": "Podłącz telefon do hotspotu ", + "ACCESS_VIA_BROWSER": ",dostęp przez przeglądarkę ", + "WIFI_CONFIG_MODE": "Tryb konfiguracji sieci", + "ENTERING_WIFI_CONFIG_MODE": "Wchodzenie w tryb konfiguracji sieci...", + "SCANNING_WIFI": "Skanowanie Wi-Fi...", "NEW_VERSION": "Nowa wersja ", - "OTA_UPGRADE":"Aktualizacja OTA", - "UPGRADING":"Aktualizacja systemu...", - "UPGRADE_FAILED":"Aktualizacja nie powiodła się", - "ACTIVATION":"Aktywacja urządzenia", - - "BATTERY_LOW":"Niski poziom baterii", - "BATTERY_CHARGING":"Ładowanie", - "BATTERY_FULL":"Bateria pełna", - "BATTERY_NEED_CHARGE":"Niski poziom baterii, proszę naładować", - - "VOLUME":"Głośność ", - "MUTED":"Wyciszony", - "MAX_VOLUME":"Maksymalna głośność", - - "RTC_MODE_OFF":"AEC wyłączony", - "RTC_MODE_ON":"AEC włączony" + "OTA_UPGRADE": "Aktualizacja OTA", + "UPGRADING": "Aktualizacja systemu...", + "UPGRADE_FAILED": "Aktualizacja nie powiodła się", + "ACTIVATION": "Aktywacja urządzenia", + "BATTERY_LOW": "Niski poziom baterii", + "BATTERY_CHARGING": "Ładowanie", + "BATTERY_FULL": "Bateria pełna", + "BATTERY_NEED_CHARGE": "Niski poziom baterii, proszę naładować", + "VOLUME": "Głośność ", + "MUTED": "Wyciszony", + "MAX_VOLUME": "Maksymalna głośność", + "RTC_MODE_OFF": "AEC wyłączony", + "RTC_MODE_ON": "AEC włączony", + "DOWNLOAD_ASSETS_FAILED": "Nie udało się pobrać zasobów", + "LOADING_ASSETS": "Ładowanie zasobów...", + "PLEASE_WAIT": "Proszę czekać...", + "FOUND_NEW_ASSETS": "Znaleziono nowe zasoby: %s", + "HELLO_MY_FRIEND": "Cześć, mój przyjacielu!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/pt-PT/language.json b/main/assets/locales/pt-PT/language.json index f3b5bac..da0e0e2 100644 --- a/main/assets/locales/pt-PT/language.json +++ b/main/assets/locales/pt-PT/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"pt-PT" + "type": "pt-PT" }, "strings": { - "WARNING":"Aviso", - "INFO":"Informação", - "ERROR":"Erro", + "WARNING": "Aviso", + "INFO": "Informação", + "ERROR": "Erro", "VERSION": "Versão ", - "LOADING_PROTOCOL":"Ligando ao servidor...", - "INITIALIZING":"A inicializar...", - "PIN_ERROR":"Por favor insira o cartão SIM", - "REG_ERROR":"Não é possível aceder à rede, verifique o estado do cartão de dados", - "DETECTING_MODULE":"A detectar módulo...", - "REGISTERING_NETWORK":"À espera da rede...", - "CHECKING_NEW_VERSION":"A verificar nova versão...", - "CHECK_NEW_VERSION_FAILED":"Falha na verificação de nova versão, nova tentativa em %d segundos: %s", - "SWITCH_TO_WIFI_NETWORK":"A mudar para Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"A mudar para 4G...", - - "STANDBY":"Em espera", - "CONNECT_TO":"Ligar a ", - "CONNECTING":"A ligar...", - "CONNECTED_TO":"Ligado a ", - - "LISTENING":"A escutar...", - "SPEAKING":"A falar...", - - "SERVER_NOT_FOUND":"A procurar serviço disponível", - "SERVER_NOT_CONNECTED":"Não é possível ligar ao serviço, tente mais tarde", - "SERVER_TIMEOUT":"Tempo limite de resposta", - "SERVER_ERROR":"Falha no envio, verifique a rede", - - "CONNECT_TO_HOTSPOT":"Ligue o telefone ao hotspot ", - "ACCESS_VIA_BROWSER":",aceder através do navegador ", - "WIFI_CONFIG_MODE":"Modo de configuração de rede", - "ENTERING_WIFI_CONFIG_MODE":"A entrar no modo de configuração de rede...", - "SCANNING_WIFI":"A procurar Wi-Fi...", - + "LOADING_PROTOCOL": "Ligando ao servidor...", + "INITIALIZING": "A inicializar...", + "PIN_ERROR": "Por favor insira o cartão SIM", + "REG_ERROR": "Não é possível aceder à rede, verifique o estado do cartão de dados", + "DETECTING_MODULE": "A detectar módulo...", + "REGISTERING_NETWORK": "À espera da rede...", + "CHECKING_NEW_VERSION": "A verificar nova versão...", + "CHECK_NEW_VERSION_FAILED": "Falha na verificação de nova versão, nova tentativa em %d segundos: %s", + "SWITCH_TO_WIFI_NETWORK": "A mudar para Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "A mudar para 4G...", + "STANDBY": "Em espera", + "CONNECT_TO": "Ligar a ", + "CONNECTING": "A ligar...", + "CONNECTED_TO": "Ligado a ", + "LISTENING": "A escutar...", + "SPEAKING": "A falar...", + "SERVER_NOT_FOUND": "A procurar serviço disponível", + "SERVER_NOT_CONNECTED": "Não é possível ligar ao serviço, tente mais tarde", + "SERVER_TIMEOUT": "Tempo limite de resposta", + "SERVER_ERROR": "Falha no envio, verifique a rede", + "CONNECT_TO_HOTSPOT": "Ligue o telefone ao hotspot ", + "ACCESS_VIA_BROWSER": ",aceder através do navegador ", + "WIFI_CONFIG_MODE": "Modo de configuração de rede", + "ENTERING_WIFI_CONFIG_MODE": "A entrar no modo de configuração de rede...", + "SCANNING_WIFI": "A procurar Wi-Fi...", "NEW_VERSION": "Nova versão ", - "OTA_UPGRADE":"Atualização OTA", - "UPGRADING":"A atualizar sistema...", - "UPGRADE_FAILED":"Atualização falhada", - "ACTIVATION":"Ativação do dispositivo", - - "BATTERY_LOW":"Bateria fraca", - "BATTERY_CHARGING":"A carregar", - "BATTERY_FULL":"Bateria cheia", - "BATTERY_NEED_CHARGE":"Bateria fraca, por favor carregue", - - "VOLUME":"Volume ", - "MUTED":"Silenciado", - "MAX_VOLUME":"Volume máximo", - - "RTC_MODE_OFF":"AEC desligado", - "RTC_MODE_ON":"AEC ligado" + "OTA_UPGRADE": "Atualização OTA", + "UPGRADING": "A atualizar sistema...", + "UPGRADE_FAILED": "Atualização falhada", + "ACTIVATION": "Ativação do dispositivo", + "BATTERY_LOW": "Bateria fraca", + "BATTERY_CHARGING": "A carregar", + "BATTERY_FULL": "Bateria cheia", + "BATTERY_NEED_CHARGE": "Bateria fraca, por favor carregue", + "VOLUME": "Volume ", + "MUTED": "Silenciado", + "MAX_VOLUME": "Volume máximo", + "RTC_MODE_OFF": "AEC desligado", + "RTC_MODE_ON": "AEC ligado", + "DOWNLOAD_ASSETS_FAILED": "Falha ao descarregar recursos", + "LOADING_ASSETS": "A carregar recursos...", + "PLEASE_WAIT": "Por favor aguarde...", + "FOUND_NEW_ASSETS": "Encontrados novos recursos: %s", + "HELLO_MY_FRIEND": "Olá, meu amigo!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/ro-RO/language.json b/main/assets/locales/ro-RO/language.json index 2d4122d..d8ec774 100644 --- a/main/assets/locales/ro-RO/language.json +++ b/main/assets/locales/ro-RO/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"ro-RO" + "type": "ro-RO" }, "strings": { - "WARNING":"Avertisment", - "INFO":"Informație", - "ERROR":"Eroare", + "WARNING": "Avertisment", + "INFO": "Informație", + "ERROR": "Eroare", "VERSION": "Versiune ", - "LOADING_PROTOCOL":"Se conectează la server...", - "INITIALIZING":"Se inițializează...", - "PIN_ERROR":"Vă rugăm să introduceți cardul SIM", - "REG_ERROR":"Nu se poate accesa rețeaua, verificați starea cardului de date", - "DETECTING_MODULE":"Se detectează modulul...", - "REGISTERING_NETWORK":"Se așteaptă rețeaua...", - "CHECKING_NEW_VERSION":"Se verifică versiunea nouă...", - "CHECK_NEW_VERSION_FAILED":"Verificarea versiunii noi a eșuat, se reîncearcă în %d secunde: %s", - "SWITCH_TO_WIFI_NETWORK":"Se comută la Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Se comută la 4G...", - - "STANDBY":"În așteptare", - "CONNECT_TO":"Conectare la ", - "CONNECTING":"Se conectează...", - "CONNECTED_TO":"Conectat la ", - - "LISTENING":"Se ascultă...", - "SPEAKING":"Se vorbește...", - - "SERVER_NOT_FOUND":"Se caută serviciul disponibil", - "SERVER_NOT_CONNECTED":"Nu se poate conecta la serviciu, încercați mai târziu", - "SERVER_TIMEOUT":"Timpul de răspuns a expirat", - "SERVER_ERROR":"Trimiterea a eșuat, verificați rețeaua", - - "CONNECT_TO_HOTSPOT":"Conectați telefonul la hotspot ", - "ACCESS_VIA_BROWSER":",accesați prin browser ", - "WIFI_CONFIG_MODE":"Modul de configurare rețea", - "ENTERING_WIFI_CONFIG_MODE":"Se intră în modul de configurare rețea...", - "SCANNING_WIFI":"Se scanează Wi-Fi...", - + "LOADING_PROTOCOL": "Se conectează la server...", + "INITIALIZING": "Se inițializează...", + "PIN_ERROR": "Vă rugăm să introduceți cardul SIM", + "REG_ERROR": "Nu se poate accesa rețeaua, verificați starea cardului de date", + "DETECTING_MODULE": "Se detectează modulul...", + "REGISTERING_NETWORK": "Se așteaptă rețeaua...", + "CHECKING_NEW_VERSION": "Se verifică versiunea nouă...", + "CHECK_NEW_VERSION_FAILED": "Verificarea versiunii noi a eșuat, se reîncearcă în %d secunde: %s", + "SWITCH_TO_WIFI_NETWORK": "Se comută la Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Se comută la 4G...", + "STANDBY": "În așteptare", + "CONNECT_TO": "Conectare la ", + "CONNECTING": "Se conectează...", + "CONNECTED_TO": "Conectat la ", + "LISTENING": "Se ascultă...", + "SPEAKING": "Se vorbește...", + "SERVER_NOT_FOUND": "Se caută serviciul disponibil", + "SERVER_NOT_CONNECTED": "Nu se poate conecta la serviciu, încercați mai târziu", + "SERVER_TIMEOUT": "Timpul de răspuns a expirat", + "SERVER_ERROR": "Trimiterea a eșuat, verificați rețeaua", + "CONNECT_TO_HOTSPOT": "Conectați telefonul la hotspot ", + "ACCESS_VIA_BROWSER": ",accesați prin browser ", + "WIFI_CONFIG_MODE": "Modul de configurare rețea", + "ENTERING_WIFI_CONFIG_MODE": "Se intră în modul de configurare rețea...", + "SCANNING_WIFI": "Se scanează Wi-Fi...", "NEW_VERSION": "Versiune nouă ", - "OTA_UPGRADE":"Actualizare OTA", - "UPGRADING":"Se actualizează sistemul...", - "UPGRADE_FAILED":"Actualizarea a eșuat", - "ACTIVATION":"Activarea dispozitivului", - - "BATTERY_LOW":"Baterie scăzută", - "BATTERY_CHARGING":"Se încarcă", - "BATTERY_FULL":"Baterie plină", - "BATTERY_NEED_CHARGE":"Baterie scăzută, vă rugăm să încărcați", - - "VOLUME":"Volum ", - "MUTED":"Silențios", - "MAX_VOLUME":"Volum maxim", - - "RTC_MODE_OFF":"AEC oprit", - "RTC_MODE_ON":"AEC pornit" + "OTA_UPGRADE": "Actualizare OTA", + "UPGRADING": "Se actualizează sistemul...", + "UPGRADE_FAILED": "Actualizarea a eșuat", + "ACTIVATION": "Activarea dispozitivului", + "BATTERY_LOW": "Baterie scăzută", + "BATTERY_CHARGING": "Se încarcă", + "BATTERY_FULL": "Baterie plină", + "BATTERY_NEED_CHARGE": "Baterie scăzută, vă rugăm să încărcați", + "VOLUME": "Volum ", + "MUTED": "Silențios", + "MAX_VOLUME": "Volum maxim", + "RTC_MODE_OFF": "AEC oprit", + "RTC_MODE_ON": "AEC pornit", + "DOWNLOAD_ASSETS_FAILED": "Eșec la descărcarea resurselor", + "LOADING_ASSETS": "Se încarcă resursele...", + "PLEASE_WAIT": "Vă rugăm să așteptați...", + "FOUND_NEW_ASSETS": "S-au găsit resurse noi: %s", + "HELLO_MY_FRIEND": "Salut, prietenul meu!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/ru-RU/language.json b/main/assets/locales/ru-RU/language.json index e3af473..ebac606 100644 --- a/main/assets/locales/ru-RU/language.json +++ b/main/assets/locales/ru-RU/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"ru-RU" + "type": "ru-RU" }, "strings": { - "WARNING":"Предупреждение", - "INFO":"Информация", - "ERROR":"Ошибка", + "WARNING": "Предупреждение", + "INFO": "Информация", + "ERROR": "Ошибка", "VERSION": "Версия ", - "LOADING_PROTOCOL":"Подключение к серверу...", - "INITIALIZING":"Инициализация...", - "PIN_ERROR":"Пожалуйста, вставьте SIM-карту", - "REG_ERROR":"Невозможно подключиться к сети, проверьте состояние карты данных", - "DETECTING_MODULE":"Обнаружение модуля...", - "REGISTERING_NETWORK":"Ожидание сети...", - "CHECKING_NEW_VERSION":"Проверка новой версии...", - "CHECK_NEW_VERSION_FAILED":"Ошибка проверки новой версии, повтор через %d секунд: %s", - "SWITCH_TO_WIFI_NETWORK":"Переключение на Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Переключение на 4G...", - - "STANDBY":"Ожидание", - "CONNECT_TO":"Подключение к ", - "CONNECTING":"Подключение...", - "CONNECTED_TO":"Подключено к ", - - "LISTENING":"Прослушивание...", - "SPEAKING":"Говорение...", - - "SERVER_NOT_FOUND":"Поиск доступного сервиса", - "SERVER_NOT_CONNECTED":"Невозможно подключиться к сервису, попробуйте позже", - "SERVER_TIMEOUT":"Тайм-аут ответа", - "SERVER_ERROR":"Ошибка отправки, проверьте сеть", - - "CONNECT_TO_HOTSPOT":"Подключите телефон к точке доступа ", - "ACCESS_VIA_BROWSER":",доступ через браузер ", - "WIFI_CONFIG_MODE":"Режим настройки сети", - "ENTERING_WIFI_CONFIG_MODE":"Вход в режим настройки сети...", - "SCANNING_WIFI":"Сканирование Wi-Fi...", - + "LOADING_PROTOCOL": "Подключение к серверу...", + "INITIALIZING": "Инициализация...", + "PIN_ERROR": "Пожалуйста, вставьте SIM-карту", + "REG_ERROR": "Невозможно подключиться к сети, проверьте состояние карты данных", + "DETECTING_MODULE": "Обнаружение модуля...", + "REGISTERING_NETWORK": "Ожидание сети...", + "CHECKING_NEW_VERSION": "Проверка новой версии...", + "CHECK_NEW_VERSION_FAILED": "Ошибка проверки новой версии, повтор через %d секунд: %s", + "SWITCH_TO_WIFI_NETWORK": "Переключение на Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Переключение на 4G...", + "STANDBY": "Ожидание", + "CONNECT_TO": "Подключение к ", + "CONNECTING": "Подключение...", + "CONNECTED_TO": "Подключено к ", + "LISTENING": "Прослушивание...", + "SPEAKING": "Говорение...", + "SERVER_NOT_FOUND": "Поиск доступного сервиса", + "SERVER_NOT_CONNECTED": "Невозможно подключиться к сервису, попробуйте позже", + "SERVER_TIMEOUT": "Тайм-аут ответа", + "SERVER_ERROR": "Ошибка отправки, проверьте сеть", + "CONNECT_TO_HOTSPOT": "Подключите телефон к точке доступа ", + "ACCESS_VIA_BROWSER": ",доступ через браузер ", + "WIFI_CONFIG_MODE": "Режим настройки сети", + "ENTERING_WIFI_CONFIG_MODE": "Вход в режим настройки сети...", + "SCANNING_WIFI": "Сканирование Wi-Fi...", "NEW_VERSION": "Новая версия ", - "OTA_UPGRADE":"Обновление OTA", - "UPGRADING":"Обновление системы...", - "UPGRADE_FAILED":"Обновление не удалось", - "ACTIVATION":"Активация устройства", - - "BATTERY_LOW":"Низкий заряд батареи", - "BATTERY_CHARGING":"Зарядка", - "BATTERY_FULL":"Батарея полная", - "BATTERY_NEED_CHARGE":"Низкий заряд, пожалуйста, зарядите", - - "VOLUME":"Громкость ", - "MUTED":"Звук отключен", - "MAX_VOLUME":"Максимальная громкость", - - "RTC_MODE_OFF":"AEC выключен", - "RTC_MODE_ON":"AEC включен" + "OTA_UPGRADE": "Обновление OTA", + "UPGRADING": "Обновление системы...", + "UPGRADE_FAILED": "Обновление не удалось", + "ACTIVATION": "Активация устройства", + "BATTERY_LOW": "Низкий заряд батареи", + "BATTERY_CHARGING": "Зарядка", + "BATTERY_FULL": "Батарея полная", + "BATTERY_NEED_CHARGE": "Низкий заряд, пожалуйста, зарядите", + "VOLUME": "Громкость ", + "MUTED": "Звук отключен", + "MAX_VOLUME": "Максимальная громкость", + "RTC_MODE_OFF": "AEC выключен", + "RTC_MODE_ON": "AEC включен", + "DOWNLOAD_ASSETS_FAILED": "Не удалось загрузить ресурсы", + "LOADING_ASSETS": "Загрузка ресурсов...", + "PLEASE_WAIT": "Пожалуйста, подождите...", + "FOUND_NEW_ASSETS": "Найдены новые ресурсы: %s", + "HELLO_MY_FRIEND": "Привет, мой друг!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/th-TH/language.json b/main/assets/locales/th-TH/language.json index 6c0460f..e97fed1 100644 --- a/main/assets/locales/th-TH/language.json +++ b/main/assets/locales/th-TH/language.json @@ -17,43 +17,40 @@ "CHECK_NEW_VERSION_FAILED": "การตรวจสอบเวอร์ชันใหม่ล้มเหลว จะลองใหม่ใน %d วินาที: %s", "SWITCH_TO_WIFI_NETWORK": "กำลังเปลี่ยนเป็น Wi-Fi...", "SWITCH_TO_4G_NETWORK": "กำลังเปลี่ยนเป็น 4G...", - "STANDBY": "พร้อม", "CONNECT_TO": "เชื่อมต่อกับ ", "CONNECTING": "กำลังเชื่อมต่อ...", "CONNECTION_SUCCESSFUL": "เชื่อมต่อสำเร็จ", "CONNECTED_TO": "เชื่อมต่อกับ ", - "LISTENING": "กำลังฟัง...", "SPEAKING": "กำลังพูด...", - "SERVER_NOT_FOUND": "กำลังค้นหาบริการที่ใช้งานได้", "SERVER_NOT_CONNECTED": "ไม่สามารถเชื่อมต่อกับบริการได้ กรุณาลองใหม่ในภายหลัง", "SERVER_TIMEOUT": "หมดเวลารอการตอบกลับ", "SERVER_ERROR": "การส่งข้อมูลล้มเหลว กรุณาตรวจสอบเครือข่าย", - "CONNECT_TO_HOTSPOT": "ฮอตสปอต: ", "ACCESS_VIA_BROWSER": " URL การตั้งค่า: ", "WIFI_CONFIG_MODE": "โหมดการตั้งค่า Wi-Fi", "ENTERING_WIFI_CONFIG_MODE": "กำลังเข้าสู่โหมดการตั้งค่า Wi-Fi...", "SCANNING_WIFI": "กำลังสแกน Wi-Fi...", - "NEW_VERSION": "เวอร์ชันใหม่ ", "OTA_UPGRADE": "การอัปเกรด OTA", "UPGRADING": "ระบบกำลังอัปเกรด...", "UPGRADE_FAILED": "การอัปเกรดล้มเหลว", "ACTIVATION": "การเปิดใช้งาน", - "BATTERY_LOW": "แบตเตอรี่ต่ำ", "BATTERY_CHARGING": "กำลังชาร์จ", "BATTERY_FULL": "แบตเตอรี่เต็ม", "BATTERY_NEED_CHARGE": "แบตเตอรี่ต่ำ กรุณาชาร์จ", - "VOLUME": "เสียง ", "MUTED": "ปิดเสียง", "MAX_VOLUME": "เสียงสูงสุด", - "RTC_MODE_OFF": "ปิด AEC", - "RTC_MODE_ON": "เปิด AEC" + "RTC_MODE_ON": "เปิด AEC", + "DOWNLOAD_ASSETS_FAILED": "ดาวน์โหลดทรัพยากรล้มเหลว", + "LOADING_ASSETS": "กำลังโหลดทรัพยากร...", + "PLEASE_WAIT": "กรุณารอสักครู่...", + "FOUND_NEW_ASSETS": "พบทรัพยากรใหม่: %s", + "HELLO_MY_FRIEND": "สวัสดี เพื่อนของฉัน!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/tr-TR/language.json b/main/assets/locales/tr-TR/language.json index a028d80..4d0f70f 100644 --- a/main/assets/locales/tr-TR/language.json +++ b/main/assets/locales/tr-TR/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"tr-TR" + "type": "tr-TR" }, "strings": { - "WARNING":"Uyarı", - "INFO":"Bilgi", - "ERROR":"Hata", + "WARNING": "Uyarı", + "INFO": "Bilgi", + "ERROR": "Hata", "VERSION": "Sürüm ", - "LOADING_PROTOCOL":"Sunucuya bağlanıyor...", - "INITIALIZING":"Başlatılıyor...", - "PIN_ERROR":"Lütfen SIM kartı takın", - "REG_ERROR":"Ağa erişilemiyor, veri kartı durumunu kontrol edin", - "DETECTING_MODULE":"Modül algılanıyor...", - "REGISTERING_NETWORK":"Ağ bekleniyor...", - "CHECKING_NEW_VERSION":"Yeni sürüm kontrol ediliyor...", - "CHECK_NEW_VERSION_FAILED":"Yeni sürüm kontrolü başarısız, %d saniye sonra tekrar denenecek: %s", - "SWITCH_TO_WIFI_NETWORK":"Wi-Fi'ye geçiliyor...", - "SWITCH_TO_4G_NETWORK":"4G'ye geçiliyor...", - - "STANDBY":"Bekleme", - "CONNECT_TO":"Bağlan ", - "CONNECTING":"Bağlanıyor...", - "CONNECTED_TO":"Bağlandı ", - - "LISTENING":"Dinleniyor...", - "SPEAKING":"Konuşuluyor...", - - "SERVER_NOT_FOUND":"Mevcut hizmet aranıyor", - "SERVER_NOT_CONNECTED":"Hizmete bağlanılamıyor, lütfen daha sonra deneyin", - "SERVER_TIMEOUT":"Yanıt zaman aşımı", - "SERVER_ERROR":"Gönderme başarısız, ağı kontrol edin", - - "CONNECT_TO_HOTSPOT":"Telefonu hotspot'a bağlayın ", - "ACCESS_VIA_BROWSER":",tarayıcı üzerinden erişin ", - "WIFI_CONFIG_MODE":"Ağ yapılandırma modu", - "ENTERING_WIFI_CONFIG_MODE":"Ağ yapılandırma moduna giriliyor...", - "SCANNING_WIFI":"Wi-Fi taranıyor...", - + "LOADING_PROTOCOL": "Sunucuya bağlanıyor...", + "INITIALIZING": "Başlatılıyor...", + "PIN_ERROR": "Lütfen SIM kartı takın", + "REG_ERROR": "Ağa erişilemiyor, veri kartı durumunu kontrol edin", + "DETECTING_MODULE": "Modül algılanıyor...", + "REGISTERING_NETWORK": "Ağ bekleniyor...", + "CHECKING_NEW_VERSION": "Yeni sürüm kontrol ediliyor...", + "CHECK_NEW_VERSION_FAILED": "Yeni sürüm kontrolü başarısız, %d saniye sonra tekrar denenecek: %s", + "SWITCH_TO_WIFI_NETWORK": "Wi-Fi'ye geçiliyor...", + "SWITCH_TO_4G_NETWORK": "4G'ye geçiliyor...", + "STANDBY": "Bekleme", + "CONNECT_TO": "Bağlan ", + "CONNECTING": "Bağlanıyor...", + "CONNECTED_TO": "Bağlandı ", + "LISTENING": "Dinleniyor...", + "SPEAKING": "Konuşuluyor...", + "SERVER_NOT_FOUND": "Mevcut hizmet aranıyor", + "SERVER_NOT_CONNECTED": "Hizmete bağlanılamıyor, lütfen daha sonra deneyin", + "SERVER_TIMEOUT": "Yanıt zaman aşımı", + "SERVER_ERROR": "Gönderme başarısız, ağı kontrol edin", + "CONNECT_TO_HOTSPOT": "Telefonu hotspot'a bağlayın ", + "ACCESS_VIA_BROWSER": ",tarayıcı üzerinden erişin ", + "WIFI_CONFIG_MODE": "Ağ yapılandırma modu", + "ENTERING_WIFI_CONFIG_MODE": "Ağ yapılandırma moduna giriliyor...", + "SCANNING_WIFI": "Wi-Fi taranıyor...", "NEW_VERSION": "Yeni sürüm ", - "OTA_UPGRADE":"OTA güncelleme", - "UPGRADING":"Sistem güncelleniyor...", - "UPGRADE_FAILED":"Güncelleme başarısız", - "ACTIVATION":"Cihaz aktivasyonu", - - "BATTERY_LOW":"Pil düşük", - "BATTERY_CHARGING":"Şarj oluyor", - "BATTERY_FULL":"Pil dolu", - "BATTERY_NEED_CHARGE":"Pil düşük, lütfen şarj edin", - - "VOLUME":"Ses ", - "MUTED":"Sessiz", - "MAX_VOLUME":"Maksimum ses", - - "RTC_MODE_OFF":"AEC kapalı", - "RTC_MODE_ON":"AEC açık" + "OTA_UPGRADE": "OTA güncelleme", + "UPGRADING": "Sistem güncelleniyor...", + "UPGRADE_FAILED": "Güncelleme başarısız", + "ACTIVATION": "Cihaz aktivasyonu", + "BATTERY_LOW": "Pil düşük", + "BATTERY_CHARGING": "Şarj oluyor", + "BATTERY_FULL": "Pil dolu", + "BATTERY_NEED_CHARGE": "Pil düşük, lütfen şarj edin", + "VOLUME": "Ses ", + "MUTED": "Sessiz", + "MAX_VOLUME": "Maksimum ses", + "RTC_MODE_OFF": "AEC kapalı", + "RTC_MODE_ON": "AEC açık", + "DOWNLOAD_ASSETS_FAILED": "Varlıklar indirilemedi", + "LOADING_ASSETS": "Varlıklar yükleniyor...", + "PLEASE_WAIT": "Lütfen bekleyin...", + "FOUND_NEW_ASSETS": "Yeni varlıklar bulundu: %s", + "HELLO_MY_FRIEND": "Merhaba, arkadaşım!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/uk-UA/language.json b/main/assets/locales/uk-UA/language.json index 8fa3649..d844a38 100644 --- a/main/assets/locales/uk-UA/language.json +++ b/main/assets/locales/uk-UA/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"uk-UA" + "type": "uk-UA" }, "strings": { - "WARNING":"Попередження", - "INFO":"Інформація", - "ERROR":"Помилка", + "WARNING": "Попередження", + "INFO": "Інформація", + "ERROR": "Помилка", "VERSION": "Версія ", - "LOADING_PROTOCOL":"Підключення до сервера...", - "INITIALIZING":"Ініціалізація...", - "PIN_ERROR":"Будь ласка, вставте SIM-карту", - "REG_ERROR":"Неможливо отримати доступ до мережі, перевірте стан карти даних", - "DETECTING_MODULE":"Виявлення модуля...", - "REGISTERING_NETWORK":"Очікування мережі...", - "CHECKING_NEW_VERSION":"Перевірка нової версії...", - "CHECK_NEW_VERSION_FAILED":"Перевірка нової версії не вдалася, повтор через %d секунд: %s", - "SWITCH_TO_WIFI_NETWORK":"Перемикання на Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"Перемикання на 4G...", - - "STANDBY":"Очікування", - "CONNECT_TO":"Підключитися до ", - "CONNECTING":"Підключення...", - "CONNECTED_TO":"Підключено до ", - - "LISTENING":"Прослуховування...", - "SPEAKING":"Говоріння...", - - "SERVER_NOT_FOUND":"Пошук доступного сервісу", - "SERVER_NOT_CONNECTED":"Неможливо підключитися до сервісу, спробуйте пізніше", - "SERVER_TIMEOUT":"Час очікування відповіді", - "SERVER_ERROR":"Помилка відправки, перевірте мережу", - - "CONNECT_TO_HOTSPOT":"Підключіть телефон до точки доступу ", - "ACCESS_VIA_BROWSER":",доступ через браузер ", - "WIFI_CONFIG_MODE":"Режим налаштування мережі", - "ENTERING_WIFI_CONFIG_MODE":"Вхід у режим налаштування мережі...", - "SCANNING_WIFI":"Сканування Wi-Fi...", - + "LOADING_PROTOCOL": "Підключення до сервера...", + "INITIALIZING": "Ініціалізація...", + "PIN_ERROR": "Будь ласка, вставте SIM-карту", + "REG_ERROR": "Неможливо отримати доступ до мережі, перевірте стан карти даних", + "DETECTING_MODULE": "Виявлення модуля...", + "REGISTERING_NETWORK": "Очікування мережі...", + "CHECKING_NEW_VERSION": "Перевірка нової версії...", + "CHECK_NEW_VERSION_FAILED": "Перевірка нової версії не вдалася, повтор через %d секунд: %s", + "SWITCH_TO_WIFI_NETWORK": "Перемикання на Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "Перемикання на 4G...", + "STANDBY": "Очікування", + "CONNECT_TO": "Підключитися до ", + "CONNECTING": "Підключення...", + "CONNECTED_TO": "Підключено до ", + "LISTENING": "Прослуховування...", + "SPEAKING": "Говоріння...", + "SERVER_NOT_FOUND": "Пошук доступного сервісу", + "SERVER_NOT_CONNECTED": "Неможливо підключитися до сервісу, спробуйте пізніше", + "SERVER_TIMEOUT": "Час очікування відповіді", + "SERVER_ERROR": "Помилка відправки, перевірте мережу", + "CONNECT_TO_HOTSPOT": "Підключіть телефон до точки доступу ", + "ACCESS_VIA_BROWSER": ",доступ через браузер ", + "WIFI_CONFIG_MODE": "Режим налаштування мережі", + "ENTERING_WIFI_CONFIG_MODE": "Вхід у режим налаштування мережі...", + "SCANNING_WIFI": "Сканування Wi-Fi...", "NEW_VERSION": "Нова версія ", - "OTA_UPGRADE":"Оновлення OTA", - "UPGRADING":"Оновлення системи...", - "UPGRADE_FAILED":"Оновлення не вдалося", - "ACTIVATION":"Активація пристрою", - - "BATTERY_LOW":"Низький заряд батареї", - "BATTERY_CHARGING":"Зарядка", - "BATTERY_FULL":"Батарея повна", - "BATTERY_NEED_CHARGE":"Низький заряд, будь ласка, зарядіть", - - "VOLUME":"Гучність ", - "MUTED":"Звук вимкнено", - "MAX_VOLUME":"Максимальна гучність", - - "RTC_MODE_OFF":"AEC вимкнено", - "RTC_MODE_ON":"AEC увімкнено" + "OTA_UPGRADE": "Оновлення OTA", + "UPGRADING": "Оновлення системи...", + "UPGRADE_FAILED": "Оновлення не вдалося", + "ACTIVATION": "Активація пристрою", + "BATTERY_LOW": "Низький заряд батареї", + "BATTERY_CHARGING": "Зарядка", + "BATTERY_FULL": "Батарея повна", + "BATTERY_NEED_CHARGE": "Низький заряд, будь ласка, зарядіть", + "VOLUME": "Гучність ", + "MUTED": "Звук вимкнено", + "MAX_VOLUME": "Максимальна гучність", + "RTC_MODE_OFF": "AEC вимкнено", + "RTC_MODE_ON": "AEC увімкнено", + "DOWNLOAD_ASSETS_FAILED": "Не вдалося завантажити ресурси", + "LOADING_ASSETS": "Завантаження ресурсів...", + "PLEASE_WAIT": "Будь ласка, зачекайте...", + "FOUND_NEW_ASSETS": "Знайдено нові ресурси: %s", + "HELLO_MY_FRIEND": "Привіт, мій друже!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/vi-VN/language.json b/main/assets/locales/vi-VN/language.json index 8fc7e3c..e010b7b 100644 --- a/main/assets/locales/vi-VN/language.json +++ b/main/assets/locales/vi-VN/language.json @@ -17,43 +17,40 @@ "CHECK_NEW_VERSION_FAILED": "Kiểm tra phiên bản mới thất bại, sẽ thử lại sau %d giây: %s", "SWITCH_TO_WIFI_NETWORK": "Đang chuyển sang Wi-Fi...", "SWITCH_TO_4G_NETWORK": "Đang chuyển sang 4G...", - "STANDBY": "Chờ", "CONNECT_TO": "Kết nối đến ", "CONNECTING": "Đang kết nối...", "CONNECTION_SUCCESSFUL": "Kết nối thành công", "CONNECTED_TO": "Đã kết nối đến ", - "LISTENING": "Đang lắng nghe...", "SPEAKING": "Đang nói...", - "SERVER_NOT_FOUND": "Đang tìm dịch vụ khả dụng", "SERVER_NOT_CONNECTED": "Không thể kết nối đến dịch vụ, vui lòng thử lại sau", "SERVER_TIMEOUT": "Hết thời gian chờ phản hồi", "SERVER_ERROR": "Gửi thất bại, vui lòng kiểm tra mạng", - "CONNECT_TO_HOTSPOT": "Điểm phát sóng: ", "ACCESS_VIA_BROWSER": " URL cấu hình: ", "WIFI_CONFIG_MODE": "Chế độ cấu hình Wi-Fi", "ENTERING_WIFI_CONFIG_MODE": "Đang vào chế độ cấu hình Wi-Fi...", "SCANNING_WIFI": "Đang quét Wi-Fi...", - "NEW_VERSION": "Phiên bản mới ", "OTA_UPGRADE": "Nâng cấp OTA", "UPGRADING": "Hệ thống đang nâng cấp...", "UPGRADE_FAILED": "Nâng cấp thất bại", "ACTIVATION": "Kích hoạt", - "BATTERY_LOW": "Pin yếu", "BATTERY_CHARGING": "Đang sạc", "BATTERY_FULL": "Pin đầy", "BATTERY_NEED_CHARGE": "Pin yếu, vui lòng sạc", - "VOLUME": "Âm lượng ", "MUTED": "Tắt tiếng", "MAX_VOLUME": "Âm lượng tối đa", - "RTC_MODE_OFF": "Tắt AEC", - "RTC_MODE_ON": "Bật AEC" + "RTC_MODE_ON": "Bật AEC", + "DOWNLOAD_ASSETS_FAILED": "Tải xuống tài nguyên thất bại", + "LOADING_ASSETS": "Đang tải tài nguyên...", + "PLEASE_WAIT": "Vui lòng đợi...", + "FOUND_NEW_ASSETS": "Tìm thấy tài nguyên mới: %s", + "HELLO_MY_FRIEND": "Xin chào, bạn của tôi!" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/assets/locales/zh-CN/language.json b/main/assets/locales/zh-CN/language.json index eeb61b4..9eb619d 100644 --- a/main/assets/locales/zh-CN/language.json +++ b/main/assets/locales/zh-CN/language.json @@ -1,58 +1,55 @@ { "language": { - "type" :"zh-CN" + "type": "zh-CN" }, "strings": { - "WARNING":"警告", - "INFO":"信息", - "ERROR":"错误", + "WARNING": "警告", + "INFO": "信息", + "ERROR": "错误", "VERSION": "版本 ", - "LOADING_PROTOCOL":"登录服务器...", - "INITIALIZING":"正在初始化...", - "PIN_ERROR":"请插入 SIM 卡", - "REG_ERROR":"无法接入网络,请检查流量卡状态", - "DETECTING_MODULE":"检测模组...", - "REGISTERING_NETWORK":"等待网络...", - "CHECKING_NEW_VERSION":"检查新版本...", - "CHECK_NEW_VERSION_FAILED":"检查新版本失败,将在 %d 秒后重试:%s", - "SWITCH_TO_WIFI_NETWORK":"切换到 Wi-Fi...", - "SWITCH_TO_4G_NETWORK":"切换到 4G...", - - "STANDBY":"待命", - "CONNECT_TO":"连接 ", - "CONNECTING":"连接中...", - "CONNECTED_TO":"已连接 ", - - "LISTENING":"聆听中...", - "SPEAKING":"说话中...", - - "SERVER_NOT_FOUND":"正在寻找可用服务", - "SERVER_NOT_CONNECTED":"无法连接服务,请稍后再试", - "SERVER_TIMEOUT":"等待响应超时", - "SERVER_ERROR":"发送失败,请检查网络", - - "CONNECT_TO_HOTSPOT":"手机连接热点 ", - "ACCESS_VIA_BROWSER":",浏览器访问 ", - "WIFI_CONFIG_MODE":"配网模式", - "ENTERING_WIFI_CONFIG_MODE":"进入配网模式...", - "SCANNING_WIFI":"扫描 Wi-Fi...", - + "LOADING_PROTOCOL": "登录服务器...", + "INITIALIZING": "正在初始化...", + "PIN_ERROR": "请插入 SIM 卡", + "REG_ERROR": "无法接入网络,请检查流量卡状态", + "DETECTING_MODULE": "检测模组...", + "REGISTERING_NETWORK": "等待网络...", + "CHECKING_NEW_VERSION": "检查新版本...", + "CHECK_NEW_VERSION_FAILED": "检查新版本失败,将在 %d 秒后重试:%s", + "SWITCH_TO_WIFI_NETWORK": "切换到 Wi-Fi...", + "SWITCH_TO_4G_NETWORK": "切换到 4G...", + "STANDBY": "待命", + "CONNECT_TO": "连接 ", + "CONNECTING": "连接中...", + "CONNECTED_TO": "已连接 ", + "LISTENING": "聆听中...", + "SPEAKING": "说话中...", + "SERVER_NOT_FOUND": "正在寻找可用服务", + "SERVER_NOT_CONNECTED": "无法连接服务,请稍后再试", + "SERVER_TIMEOUT": "等待响应超时", + "SERVER_ERROR": "发送失败,请检查网络", + "CONNECT_TO_HOTSPOT": "手机连接热点 ", + "ACCESS_VIA_BROWSER": ",浏览器访问 ", + "WIFI_CONFIG_MODE": "配网模式", + "ENTERING_WIFI_CONFIG_MODE": "进入配网模式...", + "SCANNING_WIFI": "扫描 Wi-Fi...", "NEW_VERSION": "新版本 ", - "OTA_UPGRADE":"OTA 升级", - "UPGRADING":"正在升级系统...", - "UPGRADE_FAILED":"升级失败", - "ACTIVATION":"激活设备", - - "BATTERY_LOW":"电量不足", - "BATTERY_CHARGING":"正在充电", - "BATTERY_FULL":"电量已满", - "BATTERY_NEED_CHARGE":"电量低,请充电", - - "VOLUME":"音量 ", - "MUTED":"已静音", - "MAX_VOLUME":"最大音量", - - "RTC_MODE_OFF":"AEC 关闭", - "RTC_MODE_ON":"AEC 开启" + "OTA_UPGRADE": "OTA 升级", + "UPGRADING": "正在升级系统...", + "UPGRADE_FAILED": "升级失败", + "ACTIVATION": "激活设备", + "BATTERY_LOW": "电量不足", + "BATTERY_CHARGING": "正在充电", + "BATTERY_FULL": "电量已满", + "BATTERY_NEED_CHARGE": "电量低,请充电", + "VOLUME": "音量 ", + "MUTED": "已静音", + "MAX_VOLUME": "最大音量", + "RTC_MODE_OFF": "AEC 关闭", + "RTC_MODE_ON": "AEC 开启", + "DOWNLOAD_ASSETS_FAILED": "下载资源失败", + "LOADING_ASSETS": "加载资源...", + "PLEASE_WAIT": "请稍候...", + "FOUND_NEW_ASSETS": "发现新资源: %s", + "HELLO_MY_FRIEND": "你好,我的朋友!" } -} +} \ No newline at end of file diff --git a/main/assets/locales/zh-TW/language.json b/main/assets/locales/zh-TW/language.json index 51175a1..f035b36 100644 --- a/main/assets/locales/zh-TW/language.json +++ b/main/assets/locales/zh-TW/language.json @@ -17,42 +17,39 @@ "CHECK_NEW_VERSION_FAILED": "檢查新版本失敗,將在 %d 秒後重試:%s", "SWITCH_TO_WIFI_NETWORK": "切換到 Wi-Fi...", "SWITCH_TO_4G_NETWORK": "切換到 4G...", - "STANDBY": "待命", "CONNECT_TO": "連接 ", "CONNECTING": "連接中...", "CONNECTED_TO": "已連接 ", - "LISTENING": "聆聽中...", "SPEAKING": "說話中...", - "SERVER_NOT_FOUND": "正在尋找可用服務", "SERVER_NOT_CONNECTED": "無法連接服務,請稍後再試", "SERVER_TIMEOUT": "等待響應超時", "SERVER_ERROR": "發送失敗,請檢查網絡", - "CONNECT_TO_HOTSPOT": "手機連接WiFi ", "ACCESS_VIA_BROWSER": ",瀏覽器訪問 ", "WIFI_CONFIG_MODE": "網路設定模式", "ENTERING_WIFI_CONFIG_MODE": "正在設定網路...", "SCANNING_WIFI": "掃描 Wi-Fi...", - "NEW_VERSION": "新版本 ", "OTA_UPGRADE": "OTA 升級", "UPGRADING": "正在升級系統...", "UPGRADE_FAILED": "升級失敗", "ACTIVATION": "啟用設備", - "BATTERY_LOW": "電量不足", "BATTERY_CHARGING": "正在充電", "BATTERY_FULL": "電量已滿", "BATTERY_NEED_CHARGE": "電量低,請充電", - "VOLUME": "音量 ", "MUTED": "已靜音", "MAX_VOLUME": "最大音量", - "RTC_MODE_OFF": "AEC 關閉", - "RTC_MODE_ON": "AEC 開啟" + "RTC_MODE_ON": "AEC 開啟", + "DOWNLOAD_ASSETS_FAILED": "下載資源失敗", + "LOADING_ASSETS": "載入資源...", + "PLEASE_WAIT": "請稍候...", + "FOUND_NEW_ASSETS": "發現新資源: %s", + "HELLO_MY_FRIEND": "你好,我的朋友!" } -} +} \ No newline at end of file diff --git a/main/audio/audio_codec.cc b/main/audio/audio_codec.cc index 577d7cb..c185105 100644 --- a/main/audio/audio_codec.cc +++ b/main/audio/audio_codec.cc @@ -8,28 +8,28 @@ #define TAG "AudioCodec" -AudioCodec::AudioCodec(){ +AudioCodec::AudioCodec() { } -AudioCodec::~AudioCodec(){ +AudioCodec::~AudioCodec() { } -void AudioCodec::OutputData(std::vector &data){ +void AudioCodec::OutputData(std::vector& data) { Write(data.data(), data.size()); } -bool AudioCodec::InputData(std::vector &data){ +bool AudioCodec::InputData(std::vector& data) { int samples = Read(data.data(), data.size()); - if (samples > 0){ + if (samples > 0) { return true; } return false; } -void AudioCodec::Start(){ +void AudioCodec::Start() { Settings settings("audio", false); output_volume_ = settings.GetInt("output_volume", output_volume_); - if (output_volume_ <= 0){ + if (output_volume_ <= 0) { ESP_LOGW(TAG, "Output volume value (%d) is too small, setting to default (10)", output_volume_); output_volume_ = 10; } @@ -40,11 +40,11 @@ void AudioCodec::Start(){ ESP_LOGI(TAG, "Saved original output sample rate: %d Hz", original_output_sample_rate_); } - if (tx_handle_ != nullptr){ + if (tx_handle_ != nullptr) { ESP_ERROR_CHECK(i2s_channel_enable(tx_handle_)); } - if (rx_handle_ != nullptr){ + if (rx_handle_ != nullptr) { ESP_ERROR_CHECK(i2s_channel_enable(rx_handle_)); } @@ -53,74 +53,73 @@ void AudioCodec::Start(){ ESP_LOGI(TAG, "Audio codec started"); } -void AudioCodec::SetOutputVolume(int volume){ +void AudioCodec::SetOutputVolume(int volume) { output_volume_ = volume; ESP_LOGI(TAG, "Set output volume to %d", output_volume_); - + Settings settings("audio", true); settings.SetInt("output_volume", output_volume_); } -void AudioCodec::EnableInput(bool enable){ - if (enable == input_enabled_){ +void AudioCodec::EnableInput(bool enable) { + if (enable == input_enabled_) { return; } input_enabled_ = enable; ESP_LOGI(TAG, "Set input enable to %s", enable ? "true" : "false"); } -void AudioCodec::EnableOutput(bool enable){ - if (enable == output_enabled_){ +void AudioCodec::EnableOutput(bool enable) { + if (enable == output_enabled_) { return; } output_enabled_ = enable; ESP_LOGI(TAG, "Set output enable to %s", enable ? "true" : "false"); } -bool AudioCodec::SetOutputSampleRate(int sample_rate){ +bool AudioCodec::SetOutputSampleRate(int sample_rate) { // 特殊处理:如果传入 -1,表示重置到原始采样率 - if (sample_rate == -1){ - if (original_output_sample_rate_ > 0){ + if (sample_rate == -1) { + if (original_output_sample_rate_ > 0) { sample_rate = original_output_sample_rate_; ESP_LOGI(TAG, "Resetting to original output sample rate: %d Hz", sample_rate); - }else{ + } else { ESP_LOGW(TAG, "Original sample rate not available, cannot reset"); return false; } } - - if (sample_rate <= 0 || sample_rate > 192000){ + + if (sample_rate <= 0 || sample_rate > 192000) { ESP_LOGE(TAG, "Invalid sample rate: %d", sample_rate); return false; } - - if (output_sample_rate_ == sample_rate){ + + if (output_sample_rate_ == sample_rate) { ESP_LOGI(TAG, "Sample rate already set to %d Hz", sample_rate); return true; } - - if (tx_handle_ == nullptr){ + + if (tx_handle_ == nullptr) { ESP_LOGW(TAG, "TX handle is null, only updating sample rate variable"); output_sample_rate_ = sample_rate; return true; } - + ESP_LOGI(TAG, "Changing output sample rate from %d to %d Hz", output_sample_rate_, sample_rate); - + // 先尝试禁用 I2S 通道(如果已启用的话) bool was_enabled = false; esp_err_t disable_ret = i2s_channel_disable(tx_handle_); - if (disable_ret == ESP_OK){ + if (disable_ret == ESP_OK) { was_enabled = true; ESP_LOGI(TAG, "Disabled I2S TX channel for reconfiguration"); - } - else if (disable_ret == ESP_ERR_INVALID_STATE){ + } else if (disable_ret == ESP_ERR_INVALID_STATE) { // 通道可能已经是禁用状态,这是正常的 ESP_LOGI(TAG, "I2S TX channel was already disabled"); - }else{ + } else { ESP_LOGW(TAG, "Failed to disable I2S TX channel: %s", esp_err_to_name(disable_ret)); } - + // 重新配置 I2S 时钟 i2s_std_clk_config_t clk_cfg = { .sample_rate_hz = (uint32_t)sample_rate, @@ -130,23 +129,23 @@ bool AudioCodec::SetOutputSampleRate(int sample_rate){ .ext_clk_freq_hz = 0, #endif }; - + esp_err_t ret = i2s_channel_reconfig_std_clock(tx_handle_, &clk_cfg); - + // 重新启用通道(无论之前是什么状态,现在都需要启用以便播放音频) esp_err_t enable_ret = i2s_channel_enable(tx_handle_); - if (enable_ret != ESP_OK){ + if (enable_ret != ESP_OK) { ESP_LOGE(TAG, "Failed to enable I2S TX channel: %s", esp_err_to_name(enable_ret)); - }else{ + } else { ESP_LOGI(TAG, "Enabled I2S TX channel"); } - - if (ret == ESP_OK){ + + if (ret == ESP_OK) { output_sample_rate_ = sample_rate; ESP_LOGI(TAG, "Successfully changed output sample rate to %d Hz", sample_rate); return true; - }else{ + } else { ESP_LOGE(TAG, "Failed to change sample rate to %d Hz: %s", sample_rate, esp_err_to_name(ret)); return false; } -} +} \ No newline at end of file diff --git a/main/audio/audio_processor.h b/main/audio/audio_processor.h index 266bf99..543c7ae 100644 --- a/main/audio/audio_processor.h +++ b/main/audio/audio_processor.h @@ -5,13 +5,14 @@ #include #include +#include #include "audio_codec.h" class AudioProcessor { public: virtual ~AudioProcessor() = default; - virtual void Initialize(AudioCodec* codec, int frame_duration_ms) = 0; + virtual void Initialize(AudioCodec* codec, int frame_duration_ms, srmodel_list_t* models_list) = 0; virtual void Feed(std::vector&& data) = 0; virtual void Start() = 0; virtual void Stop() = 0; diff --git a/main/audio/audio_service.cc b/main/audio/audio_service.cc index 88eb49f..6d57a86 100644 --- a/main/audio/audio_service.cc +++ b/main/audio/audio_service.cc @@ -111,7 +111,7 @@ void AudioService::Start() { AudioService* audio_service = (AudioService*)arg; audio_service->AudioOutputTask(); vTaskDelete(NULL); - }, "audio_output", 2048 * 2, this, 3, &audio_output_task_handle_); + }, "audio_output", 2048 * 2, this, 4, &audio_output_task_handle_); #else /* Start the audio input task */ xTaskCreate([](void* arg) { @@ -125,7 +125,7 @@ void AudioService::Start() { AudioService* audio_service = (AudioService*)arg; audio_service->AudioOutputTask(); vTaskDelete(NULL); - }, "audio_output", 2048, this, 3, &audio_output_task_handle_); + }, "audio_output", 2048, this, 4, &audio_output_task_handle_); #endif /* Start the opus codec task */ @@ -479,7 +479,7 @@ void AudioService::EnableWakeWordDetection(bool enable) { ESP_LOGD(TAG, "%s wake word detection", enable ? "Enabling" : "Disabling"); if (enable) { if (!wake_word_initialized_) { - if (!wake_word_->Initialize(codec_)) { + if (!wake_word_->Initialize(codec_, models_list_)) { ESP_LOGE(TAG, "Failed to initialize wake word"); return; } @@ -497,7 +497,7 @@ void AudioService::EnableVoiceProcessing(bool enable) { ESP_LOGD(TAG, "%s voice processing", enable ? "Enabling" : "Disabling"); if (enable) { if (!audio_processor_initialized_) { - audio_processor_->Initialize(codec_, OPUS_FRAME_DURATION_MS); + audio_processor_->Initialize(codec_, OPUS_FRAME_DURATION_MS, models_list_); audio_processor_initialized_ = true; } @@ -528,7 +528,7 @@ void AudioService::EnableAudioTesting(bool enable) { void AudioService::EnableDeviceAec(bool enable) { ESP_LOGI(TAG, "%s device AEC", enable ? "Enabling" : "Disabling"); if (!audio_processor_initialized_) { - audio_processor_->Initialize(codec_, OPUS_FRAME_DURATION_MS); + audio_processor_->Initialize(codec_, OPUS_FRAME_DURATION_MS, models_list_); audio_processor_initialized_ = true; } @@ -668,6 +668,10 @@ void AudioService::CheckAndUpdateAudioPowerState() { } } +void AudioService::SetModelsList(srmodel_list_t* models_list) { + models_list_ = models_list; +} + void AudioService::UpdateOutputTimestamp() { last_output_time_ = std::chrono::steady_clock::now(); } \ No newline at end of file diff --git a/main/audio/audio_service.h b/main/audio/audio_service.h index e0761e4..c52e3b3 100644 --- a/main/audio/audio_service.h +++ b/main/audio/audio_service.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -106,6 +107,7 @@ public: void PlaySound(const std::string_view& sound); bool ReadAudioData(std::vector& data, int sample_rate, int samples); void ResetDecoder(); + void SetModelsList(srmodel_list_t* models_list); void UpdateOutputTimestamp(); @@ -121,6 +123,7 @@ private: OpusResampler reference_resampler_; OpusResampler output_resampler_; DebugStatistics debug_statistics_; + srmodel_list_t* models_list_ = nullptr; EventGroupHandle_t event_group_; diff --git a/main/audio/processors/afe_audio_processor.cc b/main/audio/processors/afe_audio_processor.cc index 4462f9e..a9145be 100644 --- a/main/audio/processors/afe_audio_processor.cc +++ b/main/audio/processors/afe_audio_processor.cc @@ -10,7 +10,7 @@ AfeAudioProcessor::AfeAudioProcessor() event_group_ = xEventGroupCreate(); } -void AfeAudioProcessor::Initialize(AudioCodec* codec, int frame_duration_ms) { +void AfeAudioProcessor::Initialize(AudioCodec* codec, int frame_duration_ms, srmodel_list_t* models_list) { codec_ = codec; frame_samples_ = frame_duration_ms * 16000 / 1000; @@ -27,7 +27,13 @@ void AfeAudioProcessor::Initialize(AudioCodec* codec, int frame_duration_ms) { input_format.push_back('R'); } - srmodel_list_t *models = esp_srmodel_init("model"); + srmodel_list_t *models; + if (models_list == nullptr) { + models = esp_srmodel_init("model"); + } else { + models = models_list; + } + char* ns_model_name = esp_srmodel_filter(models, ESP_NSNET_PREFIX, NULL); char* vad_model_name = esp_srmodel_filter(models, ESP_VADN_PREFIX, NULL); diff --git a/main/audio/processors/afe_audio_processor.h b/main/audio/processors/afe_audio_processor.h index b4a378a..38b1dad 100644 --- a/main/audio/processors/afe_audio_processor.h +++ b/main/audio/processors/afe_audio_processor.h @@ -18,7 +18,7 @@ public: AfeAudioProcessor(); ~AfeAudioProcessor(); - void Initialize(AudioCodec* codec, int frame_duration_ms) override; + void Initialize(AudioCodec* codec, int frame_duration_ms, srmodel_list_t* models_list) override; void Feed(std::vector&& data) override; void Start() override; void Stop() override; diff --git a/main/audio/processors/no_audio_processor.cc b/main/audio/processors/no_audio_processor.cc index df0dc0b..bac5bad 100644 --- a/main/audio/processors/no_audio_processor.cc +++ b/main/audio/processors/no_audio_processor.cc @@ -3,7 +3,7 @@ #define TAG "NoAudioProcessor" -void NoAudioProcessor::Initialize(AudioCodec* codec, int frame_duration_ms) { +void NoAudioProcessor::Initialize(AudioCodec* codec, int frame_duration_ms, srmodel_list_t* models_list) { codec_ = codec; frame_samples_ = frame_duration_ms * 16000 / 1000; } diff --git a/main/audio/processors/no_audio_processor.h b/main/audio/processors/no_audio_processor.h index d77dfdc..d326d50 100644 --- a/main/audio/processors/no_audio_processor.h +++ b/main/audio/processors/no_audio_processor.h @@ -12,7 +12,7 @@ public: NoAudioProcessor() = default; ~NoAudioProcessor() = default; - void Initialize(AudioCodec* codec, int frame_duration_ms) override; + void Initialize(AudioCodec* codec, int frame_duration_ms, srmodel_list_t* models_list) override; void Feed(std::vector&& data) override; void Start() override; void Stop() override; diff --git a/main/audio/wake_word.h b/main/audio/wake_word.h index 71138f7..9b8986a 100644 --- a/main/audio/wake_word.h +++ b/main/audio/wake_word.h @@ -5,13 +5,14 @@ #include #include +#include #include "audio_codec.h" class WakeWord { public: virtual ~WakeWord() = default; - virtual bool Initialize(AudioCodec* codec) = 0; + virtual bool Initialize(AudioCodec* codec, srmodel_list_t* models_list) = 0; virtual void Feed(const std::vector& data) = 0; virtual void OnWakeWordDetected(std::function callback) = 0; virtual void Start() = 0; diff --git a/main/audio/wake_words/afe_wake_word.cc b/main/audio/wake_words/afe_wake_word.cc index debbe6f..bcdc697 100644 --- a/main/audio/wake_words/afe_wake_word.cc +++ b/main/audio/wake_words/afe_wake_word.cc @@ -36,11 +36,16 @@ AfeWakeWord::~AfeWakeWord() { vEventGroupDelete(event_group_); } -bool AfeWakeWord::Initialize(AudioCodec* codec) { +bool AfeWakeWord::Initialize(AudioCodec* codec, srmodel_list_t* models_list) { codec_ = codec; int ref_num = codec_->input_reference() ? 1 : 0; - models_ = esp_srmodel_init("model"); + if (models_list == nullptr) { + models_ = esp_srmodel_init("model"); + } else { + models_ = models_list; + } + if (models_ == nullptr || models_->num == -1) { ESP_LOGE(TAG, "Failed to initialize wakenet model"); return false; diff --git a/main/audio/wake_words/afe_wake_word.h b/main/audio/wake_words/afe_wake_word.h index ca8c676..65ac1f8 100644 --- a/main/audio/wake_words/afe_wake_word.h +++ b/main/audio/wake_words/afe_wake_word.h @@ -24,7 +24,7 @@ public: AfeWakeWord(); ~AfeWakeWord(); - bool Initialize(AudioCodec* codec); + bool Initialize(AudioCodec* codec, srmodel_list_t* models_list); void Feed(const std::vector& data); void OnWakeWordDetected(std::function callback); void Start(); diff --git a/main/audio/wake_words/custom_wake_word.cc b/main/audio/wake_words/custom_wake_word.cc index e047891..7c7f3fb 100644 --- a/main/audio/wake_words/custom_wake_word.cc +++ b/main/audio/wake_words/custom_wake_word.cc @@ -34,10 +34,15 @@ CustomWakeWord::~CustomWakeWord() { } } -bool CustomWakeWord::Initialize(AudioCodec* codec) { +bool CustomWakeWord::Initialize(AudioCodec* codec, srmodel_list_t* models_list) { codec_ = codec; - models_ = esp_srmodel_init("model"); + if (models_list == nullptr) { + models_ = esp_srmodel_init("model"); + } else { + models_ = models_list; + } + if (models_ == nullptr || models_->num == -1) { ESP_LOGE(TAG, "Failed to initialize wakenet model"); return false; diff --git a/main/audio/wake_words/custom_wake_word.h b/main/audio/wake_words/custom_wake_word.h index 824d7fd..e715747 100644 --- a/main/audio/wake_words/custom_wake_word.h +++ b/main/audio/wake_words/custom_wake_word.h @@ -22,7 +22,7 @@ public: CustomWakeWord(); ~CustomWakeWord(); - bool Initialize(AudioCodec* codec); + bool Initialize(AudioCodec* codec, srmodel_list_t* models_list); void Feed(const std::vector& data); void OnWakeWordDetected(std::function callback); void Start(); diff --git a/main/audio/wake_words/esp_wake_word.cc b/main/audio/wake_words/esp_wake_word.cc index 79d9ad8..d4aaf9d 100644 --- a/main/audio/wake_words/esp_wake_word.cc +++ b/main/audio/wake_words/esp_wake_word.cc @@ -14,10 +14,15 @@ EspWakeWord::~EspWakeWord() { } } -bool EspWakeWord::Initialize(AudioCodec* codec) { +bool EspWakeWord::Initialize(AudioCodec* codec, srmodel_list_t* models_list) { codec_ = codec; - wakenet_model_ = esp_srmodel_init("model"); + if (models_list == nullptr) { + wakenet_model_ = esp_srmodel_init("model"); + } else { + wakenet_model_ = models_list; + } + if (wakenet_model_ == nullptr || wakenet_model_->num == -1) { ESP_LOGE(TAG, "Failed to initialize wakenet model"); return false; diff --git a/main/audio/wake_words/esp_wake_word.h b/main/audio/wake_words/esp_wake_word.h index 475ec2d..9a1d73a 100644 --- a/main/audio/wake_words/esp_wake_word.h +++ b/main/audio/wake_words/esp_wake_word.h @@ -18,7 +18,7 @@ public: EspWakeWord(); ~EspWakeWord(); - bool Initialize(AudioCodec* codec); + bool Initialize(AudioCodec* codec, srmodel_list_t* models_list); void Feed(const std::vector& data); void OnWakeWordDetected(std::function callback); void Start(); diff --git a/main/boards/.DS_Store b/main/boards/.DS_Store deleted file mode 100644 index 8e2b4b1..0000000 Binary files a/main/boards/.DS_Store and /dev/null differ diff --git a/main/boards/README.md b/main/boards/README.md index bb14eab..f5ba9be 100644 --- a/main/boards/README.md +++ b/main/boards/README.md @@ -98,7 +98,7 @@ mkdir main/boards/my-custom-board "sdkconfig_append": [ // 额外需要的编译配置 "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"" + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"" ] } ] @@ -131,10 +131,6 @@ mkdir main/boards/my-custom-board #define TAG "MyCustomBoard" -// 声明字体 -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class MyCustomBoard : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -212,12 +208,7 @@ private: display_ = new SpiLcdDisplay(panel_io, panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } // MCP Tools 初始化 diff --git a/main/boards/atk-dnesp32s3-box/atk_dnesp32s3_box.cc b/main/boards/atk-dnesp32s3-box/atk_dnesp32s3_box.cc index 9f561e6..1375949 100644 --- a/main/boards/atk-dnesp32s3-box/atk_dnesp32s3_box.cc +++ b/main/boards/atk-dnesp32s3-box/atk_dnesp32s3_box.cc @@ -20,10 +20,6 @@ #define TAG "atk_dnesp32s3_box" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - class ATK_NoAudioCodecDuplex : public NoAudioCodec { public: ATK_NoAudioCodecDuplex(int input_sample_rate, int output_sample_rate, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din) { @@ -84,7 +80,6 @@ public: } }; - class XL9555_IN : public I2cDevice { public: XL9555_IN(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) { @@ -243,16 +238,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel, true)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - #if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), - #else - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - #endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/atk-dnesp32s3-box0/atk_dnesp32s3_box0.cc b/main/boards/atk-dnesp32s3-box0/atk_dnesp32s3_box0.cc index f5752d2..ce0bc43 100644 --- a/main/boards/atk-dnesp32s3-box0/atk_dnesp32s3_box0.cc +++ b/main/boards/atk-dnesp32s3-box0/atk_dnesp32s3_box0.cc @@ -20,9 +20,6 @@ #define TAG "atk_dnesp32s3_box0" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class atk_dnesp32s3_box0 : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -294,7 +291,6 @@ private: GetDisplay()->ShowNotification(Lang::Strings::MAX_VOLUME); }); - } void InitializeSt7789Display() { @@ -325,12 +321,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/atk-dnesp32s3-box2-4g/atk_dnesp32s3_box2.cc b/main/boards/atk-dnesp32s3-box2-4g/atk_dnesp32s3_box2.cc index a93e229..4a906db 100644 --- a/main/boards/atk-dnesp32s3-box2-4g/atk_dnesp32s3_box2.cc +++ b/main/boards/atk-dnesp32s3-box2-4g/atk_dnesp32s3_box2.cc @@ -21,9 +21,6 @@ #define TAG "atk_dnesp32s3_box2_4g" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class atk_dnesp32s3_box2_4g : public DualNetworkBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -412,12 +409,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/atk-dnesp32s3-box2-wifi/atk_dnesp32s3_box2.cc b/main/boards/atk-dnesp32s3-box2-wifi/atk_dnesp32s3_box2.cc index be9265e..acc2e21 100644 --- a/main/boards/atk-dnesp32s3-box2-wifi/atk_dnesp32s3_box2.cc +++ b/main/boards/atk-dnesp32s3-box2-wifi/atk_dnesp32s3_box2.cc @@ -21,9 +21,6 @@ #define TAG "atk_dnesp32s3_box2_wifi" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class atk_dnesp32s3_box2_wifi : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -392,12 +389,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/atk-dnesp32s3/atk_dnesp32s3.cc b/main/boards/atk-dnesp32s3/atk_dnesp32s3.cc index 73470e1..0dd9125 100644 --- a/main/boards/atk-dnesp32s3/atk_dnesp32s3.cc +++ b/main/boards/atk-dnesp32s3/atk_dnesp32s3.cc @@ -16,9 +16,6 @@ #define TAG "atk_dnesp32s3" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class XL9555 : public I2cDevice { public: XL9555(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) { @@ -47,7 +44,6 @@ public: } }; - class atk_dnesp32s3 : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -131,16 +127,7 @@ private: esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - #if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), - #else - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - #endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } // 初始化摄像头:ov2640; diff --git a/main/boards/atk-dnesp32s3m-4g/atk_dnesp32s3m.cc b/main/boards/atk-dnesp32s3m-4g/atk_dnesp32s3m.cc index 1a60ca9..9f2f701 100644 --- a/main/boards/atk-dnesp32s3m-4g/atk_dnesp32s3m.cc +++ b/main/boards/atk-dnesp32s3m-4g/atk_dnesp32s3m.cc @@ -20,9 +20,6 @@ #define TAG "atk_dnesp32s3m_4g" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class atk_dnesp32s3m_4g : public Ml307Board { private: i2c_master_bus_handle_t i2c_bus_; @@ -167,12 +164,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/atk-dnesp32s3m-wifi/atk_dnesp32s3m.cc b/main/boards/atk-dnesp32s3m-wifi/atk_dnesp32s3m.cc index 92b5945..1ae96a1 100644 --- a/main/boards/atk-dnesp32s3m-wifi/atk_dnesp32s3m.cc +++ b/main/boards/atk-dnesp32s3m-wifi/atk_dnesp32s3m.cc @@ -19,9 +19,6 @@ #define TAG "atk_dnesp32s3m_wifi" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class atk_dnesp32s3m_wifi : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -177,12 +174,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/atom-echos3r/README.md b/main/boards/atom-echos3r/README.md index 5340cdf..ccb452f 100644 --- a/main/boards/atom-echos3r/README.md +++ b/main/boards/atom-echos3r/README.md @@ -22,7 +22,7 @@ idf.py menuconfig 分别配置如下选项: - `Xiaozhi Assistant` → `Board Type` → 选择 `AtomEchoS3R` -- `Partition Table` → `Custom partition CSV file` → 删除原有内容,输入 `partitions/v1/8m.csv` +- `Partition Table` → `Custom partition CSV file` → 删除原有内容,输入 `partitions/v2/8m.csv` - `Serial flasher config` → `Flash size` → 选择 `8 MB` - `Component config` → `ESP PSRAM` → `Support for external, SPI-connected RAM` → `SPI RAM config` → 选择 `Octal Mode PSRAM` diff --git a/main/boards/atom-echos3r/atom_echos3r.cc b/main/boards/atom-echos3r/atom_echos3r.cc index 7f6ff67..bb9c8e4 100644 --- a/main/boards/atom-echos3r/atom_echos3r.cc +++ b/main/boards/atom-echos3r/atom_echos3r.cc @@ -12,7 +12,6 @@ #define TAG "AtomEchoS3R" - class AtomEchoS3rBaseBoard : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; diff --git a/main/boards/atom-echos3r/config.json b/main/boards/atom-echos3r/config.json index ca1367e..7e7328d 100644 --- a/main/boards/atom-echos3r/config.json +++ b/main/boards/atom-echos3r/config.json @@ -5,7 +5,7 @@ "name": "atom-echos3r", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"" + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"" ] } ] diff --git a/main/boards/atommatrix-echo-base/atommatrix_echo_base.cc b/main/boards/atommatrix-echo-base/atommatrix_echo_base.cc index 0b5f5b6..5bfd3cc 100644 --- a/main/boards/atommatrix-echo-base/atommatrix_echo_base.cc +++ b/main/boards/atommatrix-echo-base/atommatrix_echo_base.cc @@ -33,7 +33,6 @@ public: } }; - class AtomMatrixEchoBaseBoard : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -87,7 +86,6 @@ private: pi4ioe_->SetSpeakerMute(false); } - void InitializeButtons() { face_button_.OnClick([this]() { diff --git a/main/boards/atoms3-echo-base/README.md b/main/boards/atoms3-echo-base/README.md index 9e1a407..ef2ad28 100644 --- a/main/boards/atoms3-echo-base/README.md +++ b/main/boards/atoms3-echo-base/README.md @@ -33,7 +33,7 @@ Serial flasher config -> Flash size -> 8 MB **修改分区表:** ``` -Partition Table -> Custom partition CSV file -> partitions/v1/8m.csv +Partition Table -> Custom partition CSV file -> partitions/v2/8m.csv ``` **关闭片外 PSRAM:** diff --git a/main/boards/atoms3-echo-base/atoms3_echo_base.cc b/main/boards/atoms3-echo-base/atoms3_echo_base.cc index 3c56aef..64e592e 100644 --- a/main/boards/atoms3-echo-base/atoms3_echo_base.cc +++ b/main/boards/atoms3-echo-base/atoms3_echo_base.cc @@ -16,9 +16,6 @@ #define TAG "AtomS3+EchoBase" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { // {cmd, { data }, data_size, delay_ms} {0xfe, (uint8_t[]){0x00}, 0, 0}, @@ -176,14 +173,8 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle)); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true)); - display_ = new SpiLcdDisplay(io_handle, panel_handle, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/atoms3-echo-base/config.json b/main/boards/atoms3-echo-base/config.json index dd3ddbf..69bcafc 100644 --- a/main/boards/atoms3-echo-base/config.json +++ b/main/boards/atoms3-echo-base/config.json @@ -7,7 +7,7 @@ "CONFIG_SPIRAM=n", "CONFIG_USE_AFE=n", "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"" + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"" ] } ] diff --git a/main/boards/atoms3r-cam-m12-echo-base/README.md b/main/boards/atoms3r-cam-m12-echo-base/README.md index 2083779..6da3280 100644 --- a/main/boards/atoms3r-cam-m12-echo-base/README.md +++ b/main/boards/atoms3r-cam-m12-echo-base/README.md @@ -32,7 +32,7 @@ idf.py menuconfig - `Xiaozhi Assistant` → `Board Type` → 选择 `AtomS3R CAM/M12 + Echo Base` - `Xiaozhi Assistant` → `IoT Protocol` → 选择 `MCP协议` 可开启摄像头识别功能 -- `Partition Table` → `Custom partition CSV file` → 删除原有内容,输入 `partitions/v1/8m.csv` +- `Partition Table` → `Custom partition CSV file` → 删除原有内容,输入 `partitions/v2/8m.csv` - `Serial flasher config` → `Flash size` → 选择 `8 MB` 按 `S` 保存,按 `Q` 退出。 diff --git a/main/boards/atoms3r-cam-m12-echo-base/config.json b/main/boards/atoms3r-cam-m12-echo-base/config.json index 26f88b7..b8d6629 100644 --- a/main/boards/atoms3r-cam-m12-echo-base/config.json +++ b/main/boards/atoms3r-cam-m12-echo-base/config.json @@ -5,7 +5,7 @@ "name": "atoms3r-cam-m12-echo-base", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"" + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"" ] } ] diff --git a/main/boards/atoms3r-echo-base/README.md b/main/boards/atoms3r-echo-base/README.md index 820c60f..13e8a36 100644 --- a/main/boards/atoms3r-echo-base/README.md +++ b/main/boards/atoms3r-echo-base/README.md @@ -27,7 +27,7 @@ Serial flasher config -> Flash size -> 8 MB **修改分区表:** ``` -Partition Table -> Custom partition CSV file -> partitions/v1/8m.csv +Partition Table -> Custom partition CSV file -> partitions/v2/8m.csv ``` **修改 psram 配置:** diff --git a/main/boards/atoms3r-echo-base/atoms3r_echo_base.cc b/main/boards/atoms3r-echo-base/atoms3r_echo_base.cc index d1b27b7..3407828 100644 --- a/main/boards/atoms3r-echo-base/atoms3r_echo_base.cc +++ b/main/boards/atoms3r-echo-base/atoms3r_echo_base.cc @@ -23,9 +23,6 @@ #define PI4IOE_REG_IO_OUT 0x05 #define PI4IOE_REG_IO_PULLUP 0x0D -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class Pi4ioe : public I2cDevice { public: Pi4ioe(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) { @@ -114,6 +111,7 @@ private: Display* display_ = nullptr; Button boot_button_; bool is_echo_base_connected_ = false; + void InitializeI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { @@ -254,12 +252,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true)); display_ = new SpiLcdDisplay(io_handle, panel_handle, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/atoms3r-echo-base/config.json b/main/boards/atoms3r-echo-base/config.json index 8862a63..d3b1549 100644 --- a/main/boards/atoms3r-echo-base/config.json +++ b/main/boards/atoms3r-echo-base/config.json @@ -5,7 +5,7 @@ "name": "atoms3r-echo-base", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"" + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"" ] } ] diff --git a/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc b/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc index bd21249..f1c53e3 100644 --- a/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc +++ b/main/boards/bread-compact-esp32-lcd/esp32_bread_board_lcd.cc @@ -58,9 +58,6 @@ static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { #define TAG "ESP32-LCD-MarsbearSupport" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - class CompactWifiBoardLCD : public WifiBoard { private: Button boot_button_; @@ -114,7 +111,6 @@ private: #endif esp_lcd_panel_reset(panel); - esp_lcd_panel_init(panel); esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); @@ -124,16 +120,9 @@ private: panel_config.vendor_config = &gc9107_vendor_config; #endif display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_14_1, - .icon_font = &font_awesome_14_1, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } - - void InitializeButtons() { // 配置 GPIO diff --git a/main/boards/bread-compact-esp32/esp32_bread_board.cc b/main/boards/bread-compact-esp32/esp32_bread_board.cc index e86f714..7c32ce4 100644 --- a/main/boards/bread-compact-esp32/esp32_bread_board.cc +++ b/main/boards/bread-compact-esp32/esp32_bread_board.cc @@ -17,10 +17,6 @@ #define TAG "ESP32-MarsbearSupport" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - class CompactWifiBoard : public WifiBoard { private: Button boot_button_; @@ -92,8 +88,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/bread-compact-ml307/compact_ml307_board.cc b/main/boards/bread-compact-ml307/compact_ml307_board.cc index e91a1d0..e004b55 100644 --- a/main/boards/bread-compact-ml307/compact_ml307_board.cc +++ b/main/boards/bread-compact-ml307/compact_ml307_board.cc @@ -18,9 +18,6 @@ #define TAG "CompactMl307Board" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - class CompactMl307Board : public DualNetworkBoard { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -92,8 +89,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/bread-compact-wifi-lcd/compact_wifi_board_lcd.cc b/main/boards/bread-compact-wifi-lcd/compact_wifi_board_lcd.cc index da6112c..5e0263e 100644 --- a/main/boards/bread-compact-wifi-lcd/compact_wifi_board_lcd.cc +++ b/main/boards/bread-compact-wifi-lcd/compact_wifi_board_lcd.cc @@ -1,198 +1,183 @@ -#include "wifi_board.h" -#include "codecs/no_audio_codec.h" -#include "display/lcd_display.h" -#include "system_reset.h" -#include "application.h" -#include "button.h" -#include "config.h" -#include "mcp_server.h" -#include "lamp_controller.h" -#include "led/single_led.h" - -#include -#include -#include -#include -#include -#include -#include - -#if defined(LCD_TYPE_ILI9341_SERIAL) -#include "esp_lcd_ili9341.h" -#endif - -#if defined(LCD_TYPE_GC9A01_SERIAL) -#include "esp_lcd_gc9a01.h" -static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { - // {cmd, { data }, data_size, delay_ms} - {0xfe, (uint8_t[]){0x00}, 0, 0}, - {0xef, (uint8_t[]){0x00}, 0, 0}, - {0xb0, (uint8_t[]){0xc0}, 1, 0}, - {0xb1, (uint8_t[]){0x80}, 1, 0}, - {0xb2, (uint8_t[]){0x27}, 1, 0}, - {0xb3, (uint8_t[]){0x13}, 1, 0}, - {0xb6, (uint8_t[]){0x19}, 1, 0}, - {0xb7, (uint8_t[]){0x05}, 1, 0}, - {0xac, (uint8_t[]){0xc8}, 1, 0}, - {0xab, (uint8_t[]){0x0f}, 1, 0}, - {0x3a, (uint8_t[]){0x05}, 1, 0}, - {0xb4, (uint8_t[]){0x04}, 1, 0}, - {0xa8, (uint8_t[]){0x08}, 1, 0}, - {0xb8, (uint8_t[]){0x08}, 1, 0}, - {0xea, (uint8_t[]){0x02}, 1, 0}, - {0xe8, (uint8_t[]){0x2A}, 1, 0}, - {0xe9, (uint8_t[]){0x47}, 1, 0}, - {0xe7, (uint8_t[]){0x5f}, 1, 0}, - {0xc6, (uint8_t[]){0x21}, 1, 0}, - {0xc7, (uint8_t[]){0x15}, 1, 0}, - {0xf0, - (uint8_t[]){0x1D, 0x38, 0x09, 0x4D, 0x92, 0x2F, 0x35, 0x52, 0x1E, 0x0C, - 0x04, 0x12, 0x14, 0x1f}, - 14, 0}, - {0xf1, - (uint8_t[]){0x16, 0x40, 0x1C, 0x54, 0xA9, 0x2D, 0x2E, 0x56, 0x10, 0x0D, - 0x0C, 0x1A, 0x14, 0x1E}, - 14, 0}, - {0xf4, (uint8_t[]){0x00, 0x00, 0xFF}, 3, 0}, - {0xba, (uint8_t[]){0xFF, 0xFF}, 2, 0}, -}; -#endif - -#define TAG "CompactWifiBoardLCD" - -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - -class CompactWifiBoardLCD : public WifiBoard { -private: - - Button boot_button_; - LcdDisplay* display_; - - void InitializeSpi() { - spi_bus_config_t buscfg = {}; - buscfg.mosi_io_num = DISPLAY_MOSI_PIN; - buscfg.miso_io_num = GPIO_NUM_NC; - buscfg.sclk_io_num = DISPLAY_CLK_PIN; - buscfg.quadwp_io_num = GPIO_NUM_NC; - buscfg.quadhd_io_num = GPIO_NUM_NC; - buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t); - ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); - } - - void InitializeLcdDisplay() { - esp_lcd_panel_io_handle_t panel_io = nullptr; - esp_lcd_panel_handle_t panel = nullptr; - // 液晶屏控制IO初始化 - ESP_LOGD(TAG, "Install panel IO"); - esp_lcd_panel_io_spi_config_t io_config = {}; - io_config.cs_gpio_num = DISPLAY_CS_PIN; - io_config.dc_gpio_num = DISPLAY_DC_PIN; - io_config.spi_mode = DISPLAY_SPI_MODE; - io_config.pclk_hz = 40 * 1000 * 1000; - io_config.trans_queue_depth = 10; - io_config.lcd_cmd_bits = 8; - io_config.lcd_param_bits = 8; - ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); - - // 初始化液晶屏驱动芯片 - ESP_LOGD(TAG, "Install LCD driver"); - esp_lcd_panel_dev_config_t panel_config = {}; - panel_config.reset_gpio_num = DISPLAY_RST_PIN; - panel_config.rgb_ele_order = DISPLAY_RGB_ORDER; - panel_config.bits_per_pixel = 16; -#if defined(LCD_TYPE_ILI9341_SERIAL) - ESP_ERROR_CHECK(esp_lcd_new_panel_ili9341(panel_io, &panel_config, &panel)); -#elif defined(LCD_TYPE_GC9A01_SERIAL) - ESP_ERROR_CHECK(esp_lcd_new_panel_gc9a01(panel_io, &panel_config, &panel)); - gc9a01_vendor_config_t gc9107_vendor_config = { - .init_cmds = gc9107_lcd_init_cmds, - .init_cmds_size = sizeof(gc9107_lcd_init_cmds) / sizeof(gc9a01_lcd_init_cmd_t), - }; -#else - ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); -#endif - - esp_lcd_panel_reset(panel); - - - esp_lcd_panel_init(panel); - esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); - esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); - esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); -#ifdef LCD_TYPE_GC9A01_SERIAL - panel_config.vendor_config = &gc9107_vendor_config; -#endif - display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), -#endif - }); - } - - - - void InitializeButtons() { - boot_button_.OnClick([this]() { - auto& app = Application::GetInstance(); - if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { - ResetWifiConfiguration(); - } - app.ToggleChatState(); - }); - } - - // 物联网初始化,添加对 AI 可见设备 - void InitializeTools() { - static LampController lamp(LAMP_GPIO); - } - -public: - CompactWifiBoardLCD() : - boot_button_(BOOT_BUTTON_GPIO) { - InitializeSpi(); - InitializeLcdDisplay(); - InitializeButtons(); - InitializeTools(); - if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { - GetBacklight()->RestoreBrightness(); - } - - } - - virtual Led* GetLed() override { - static SingleLed led(BUILTIN_LED_GPIO); - return &led; - } - - virtual AudioCodec* GetAudioCodec() override { -#ifdef AUDIO_I2S_METHOD_SIMPLEX - static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, - AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); -#else - static NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, - AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN); -#endif - return &audio_codec; - } - - virtual Display* GetDisplay() override { - return display_; - } - - virtual Backlight* GetBacklight() override { - if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { - static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); - return &backlight; - } - return nullptr; - } -}; - -DECLARE_BOARD(CompactWifiBoardLCD); +#include "wifi_board.h" +#include "codecs/no_audio_codec.h" +#include "display/lcd_display.h" +#include "system_reset.h" +#include "application.h" +#include "button.h" +#include "config.h" +#include "mcp_server.h" +#include "lamp_controller.h" +#include "led/single_led.h" + +#include +#include +#include +#include +#include +#include +#include + +#if defined(LCD_TYPE_ILI9341_SERIAL) +#include "esp_lcd_ili9341.h" +#endif + +#if defined(LCD_TYPE_GC9A01_SERIAL) +#include "esp_lcd_gc9a01.h" +static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { + // {cmd, { data }, data_size, delay_ms} + {0xfe, (uint8_t[]){0x00}, 0, 0}, + {0xef, (uint8_t[]){0x00}, 0, 0}, + {0xb0, (uint8_t[]){0xc0}, 1, 0}, + {0xb1, (uint8_t[]){0x80}, 1, 0}, + {0xb2, (uint8_t[]){0x27}, 1, 0}, + {0xb3, (uint8_t[]){0x13}, 1, 0}, + {0xb6, (uint8_t[]){0x19}, 1, 0}, + {0xb7, (uint8_t[]){0x05}, 1, 0}, + {0xac, (uint8_t[]){0xc8}, 1, 0}, + {0xab, (uint8_t[]){0x0f}, 1, 0}, + {0x3a, (uint8_t[]){0x05}, 1, 0}, + {0xb4, (uint8_t[]){0x04}, 1, 0}, + {0xa8, (uint8_t[]){0x08}, 1, 0}, + {0xb8, (uint8_t[]){0x08}, 1, 0}, + {0xea, (uint8_t[]){0x02}, 1, 0}, + {0xe8, (uint8_t[]){0x2A}, 1, 0}, + {0xe9, (uint8_t[]){0x47}, 1, 0}, + {0xe7, (uint8_t[]){0x5f}, 1, 0}, + {0xc6, (uint8_t[]){0x21}, 1, 0}, + {0xc7, (uint8_t[]){0x15}, 1, 0}, + {0xf0, + (uint8_t[]){0x1D, 0x38, 0x09, 0x4D, 0x92, 0x2F, 0x35, 0x52, 0x1E, 0x0C, + 0x04, 0x12, 0x14, 0x1f}, + 14, 0}, + {0xf1, + (uint8_t[]){0x16, 0x40, 0x1C, 0x54, 0xA9, 0x2D, 0x2E, 0x56, 0x10, 0x0D, + 0x0C, 0x1A, 0x14, 0x1E}, + 14, 0}, + {0xf4, (uint8_t[]){0x00, 0x00, 0xFF}, 3, 0}, + {0xba, (uint8_t[]){0xFF, 0xFF}, 2, 0}, +}; +#endif + +#define TAG "CompactWifiBoardLCD" + +class CompactWifiBoardLCD : public WifiBoard { +private: + + Button boot_button_; + LcdDisplay* display_; + + void InitializeSpi() { + spi_bus_config_t buscfg = {}; + buscfg.mosi_io_num = DISPLAY_MOSI_PIN; + buscfg.miso_io_num = GPIO_NUM_NC; + buscfg.sclk_io_num = DISPLAY_CLK_PIN; + buscfg.quadwp_io_num = GPIO_NUM_NC; + buscfg.quadhd_io_num = GPIO_NUM_NC; + buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t); + ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); + } + + void InitializeLcdDisplay() { + esp_lcd_panel_io_handle_t panel_io = nullptr; + esp_lcd_panel_handle_t panel = nullptr; + // 液晶屏控制IO初始化 + ESP_LOGD(TAG, "Install panel IO"); + esp_lcd_panel_io_spi_config_t io_config = {}; + io_config.cs_gpio_num = DISPLAY_CS_PIN; + io_config.dc_gpio_num = DISPLAY_DC_PIN; + io_config.spi_mode = DISPLAY_SPI_MODE; + io_config.pclk_hz = 40 * 1000 * 1000; + io_config.trans_queue_depth = 10; + io_config.lcd_cmd_bits = 8; + io_config.lcd_param_bits = 8; + ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); + + // 初始化液晶屏驱动芯片 + ESP_LOGD(TAG, "Install LCD driver"); + esp_lcd_panel_dev_config_t panel_config = {}; + panel_config.reset_gpio_num = DISPLAY_RST_PIN; + panel_config.rgb_ele_order = DISPLAY_RGB_ORDER; + panel_config.bits_per_pixel = 16; +#if defined(LCD_TYPE_ILI9341_SERIAL) + ESP_ERROR_CHECK(esp_lcd_new_panel_ili9341(panel_io, &panel_config, &panel)); +#elif defined(LCD_TYPE_GC9A01_SERIAL) + ESP_ERROR_CHECK(esp_lcd_new_panel_gc9a01(panel_io, &panel_config, &panel)); + gc9a01_vendor_config_t gc9107_vendor_config = { + .init_cmds = gc9107_lcd_init_cmds, + .init_cmds_size = sizeof(gc9107_lcd_init_cmds) / sizeof(gc9a01_lcd_init_cmd_t), + }; +#else + ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); +#endif + + esp_lcd_panel_reset(panel); + + esp_lcd_panel_init(panel); + esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); + esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); + esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); +#ifdef LCD_TYPE_GC9A01_SERIAL + panel_config.vendor_config = &gc9107_vendor_config; +#endif + display_ = new SpiLcdDisplay(panel_io, panel, + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); + } + + void InitializeButtons() { + boot_button_.OnClick([this]() { + auto& app = Application::GetInstance(); + if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { + ResetWifiConfiguration(); + } + app.ToggleChatState(); + }); + } + + // 物联网初始化,添加对 AI 可见设备 + void InitializeTools() { + static LampController lamp(LAMP_GPIO); + } + +public: + CompactWifiBoardLCD() : + boot_button_(BOOT_BUTTON_GPIO) { + InitializeSpi(); + InitializeLcdDisplay(); + InitializeButtons(); + InitializeTools(); + if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { + GetBacklight()->RestoreBrightness(); + } + + } + + virtual Led* GetLed() override { + static SingleLed led(BUILTIN_LED_GPIO); + return &led; + } + + virtual AudioCodec* GetAudioCodec() override { +#ifdef AUDIO_I2S_METHOD_SIMPLEX + static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, + AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); +#else + static NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, + AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN); +#endif + return &audio_codec; + } + + virtual Display* GetDisplay() override { + return display_; + } + + virtual Backlight* GetBacklight() override { + if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { + static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); + return &backlight; + } + return nullptr; + } +}; + +DECLARE_BOARD(CompactWifiBoardLCD); diff --git a/main/boards/bread-compact-wifi-s3cam/compact_wifi_board_s3cam.cc b/main/boards/bread-compact-wifi-s3cam/compact_wifi_board_s3cam.cc index 4511540..af4b6b9 100644 --- a/main/boards/bread-compact-wifi-s3cam/compact_wifi_board_s3cam.cc +++ b/main/boards/bread-compact-wifi-s3cam/compact_wifi_board_s3cam.cc @@ -1,227 +1,214 @@ -#include "wifi_board.h" -#include "codecs/no_audio_codec.h" -#include "display/lcd_display.h" -#include "system_reset.h" -#include "application.h" -#include "button.h" -#include "config.h" -#include "mcp_server.h" -#include "lamp_controller.h" -#include "led/single_led.h" -#include "esp32_camera.h" - -#include -#include -#include -#include -#include -#include -#include - -#if defined(LCD_TYPE_ILI9341_SERIAL) -#include "esp_lcd_ili9341.h" -#endif - -#if defined(LCD_TYPE_GC9A01_SERIAL) -#include "esp_lcd_gc9a01.h" -static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { - // {cmd, { data }, data_size, delay_ms} - {0xfe, (uint8_t[]){0x00}, 0, 0}, - {0xef, (uint8_t[]){0x00}, 0, 0}, - {0xb0, (uint8_t[]){0xc0}, 1, 0}, - {0xb1, (uint8_t[]){0x80}, 1, 0}, - {0xb2, (uint8_t[]){0x27}, 1, 0}, - {0xb3, (uint8_t[]){0x13}, 1, 0}, - {0xb6, (uint8_t[]){0x19}, 1, 0}, - {0xb7, (uint8_t[]){0x05}, 1, 0}, - {0xac, (uint8_t[]){0xc8}, 1, 0}, - {0xab, (uint8_t[]){0x0f}, 1, 0}, - {0x3a, (uint8_t[]){0x05}, 1, 0}, - {0xb4, (uint8_t[]){0x04}, 1, 0}, - {0xa8, (uint8_t[]){0x08}, 1, 0}, - {0xb8, (uint8_t[]){0x08}, 1, 0}, - {0xea, (uint8_t[]){0x02}, 1, 0}, - {0xe8, (uint8_t[]){0x2A}, 1, 0}, - {0xe9, (uint8_t[]){0x47}, 1, 0}, - {0xe7, (uint8_t[]){0x5f}, 1, 0}, - {0xc6, (uint8_t[]){0x21}, 1, 0}, - {0xc7, (uint8_t[]){0x15}, 1, 0}, - {0xf0, - (uint8_t[]){0x1D, 0x38, 0x09, 0x4D, 0x92, 0x2F, 0x35, 0x52, 0x1E, 0x0C, - 0x04, 0x12, 0x14, 0x1f}, - 14, 0}, - {0xf1, - (uint8_t[]){0x16, 0x40, 0x1C, 0x54, 0xA9, 0x2D, 0x2E, 0x56, 0x10, 0x0D, - 0x0C, 0x1A, 0x14, 0x1E}, - 14, 0}, - {0xf4, (uint8_t[]){0x00, 0x00, 0xFF}, 3, 0}, - {0xba, (uint8_t[]){0xFF, 0xFF}, 2, 0}, -}; -#endif - -#define TAG "CompactWifiBoardS3Cam" - -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - -class CompactWifiBoardS3Cam : public WifiBoard { -private: - - Button boot_button_; - LcdDisplay* display_; - Esp32Camera* camera_; - - void InitializeSpi() { - spi_bus_config_t buscfg = {}; - buscfg.mosi_io_num = DISPLAY_MOSI_PIN; - buscfg.miso_io_num = GPIO_NUM_NC; - buscfg.sclk_io_num = DISPLAY_CLK_PIN; - buscfg.quadwp_io_num = GPIO_NUM_NC; - buscfg.quadhd_io_num = GPIO_NUM_NC; - buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t); - ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); - } - - void InitializeLcdDisplay() { - esp_lcd_panel_io_handle_t panel_io = nullptr; - esp_lcd_panel_handle_t panel = nullptr; - // 液晶屏控制IO初始化 - ESP_LOGD(TAG, "Install panel IO"); - esp_lcd_panel_io_spi_config_t io_config = {}; - io_config.cs_gpio_num = DISPLAY_CS_PIN; - io_config.dc_gpio_num = DISPLAY_DC_PIN; - io_config.spi_mode = DISPLAY_SPI_MODE; - io_config.pclk_hz = 40 * 1000 * 1000; - io_config.trans_queue_depth = 10; - io_config.lcd_cmd_bits = 8; - io_config.lcd_param_bits = 8; - ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); - - // 初始化液晶屏驱动芯片 - ESP_LOGD(TAG, "Install LCD driver"); - esp_lcd_panel_dev_config_t panel_config = {}; - panel_config.reset_gpio_num = DISPLAY_RST_PIN; - panel_config.rgb_ele_order = DISPLAY_RGB_ORDER; - panel_config.bits_per_pixel = 16; -#if defined(LCD_TYPE_ILI9341_SERIAL) - ESP_ERROR_CHECK(esp_lcd_new_panel_ili9341(panel_io, &panel_config, &panel)); -#elif defined(LCD_TYPE_GC9A01_SERIAL) - ESP_ERROR_CHECK(esp_lcd_new_panel_gc9a01(panel_io, &panel_config, &panel)); - gc9a01_vendor_config_t gc9107_vendor_config = { - .init_cmds = gc9107_lcd_init_cmds, - .init_cmds_size = sizeof(gc9107_lcd_init_cmds) / sizeof(gc9a01_lcd_init_cmd_t), - }; -#else - ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); -#endif - - esp_lcd_panel_reset(panel); - - - esp_lcd_panel_init(panel); - esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); - esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); - esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); -#ifdef LCD_TYPE_GC9A01_SERIAL - panel_config.vendor_config = &gc9107_vendor_config; -#endif - display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), -#endif - }); - } - - void InitializeCamera() { - camera_config_t config = {}; - config.pin_d0 = CAMERA_PIN_D0; - config.pin_d1 = CAMERA_PIN_D1; - config.pin_d2 = CAMERA_PIN_D2; - config.pin_d3 = CAMERA_PIN_D3; - config.pin_d4 = CAMERA_PIN_D4; - config.pin_d5 = CAMERA_PIN_D5; - config.pin_d6 = CAMERA_PIN_D6; - config.pin_d7 = CAMERA_PIN_D7; - config.pin_xclk = CAMERA_PIN_XCLK; - config.pin_pclk = CAMERA_PIN_PCLK; - config.pin_vsync = CAMERA_PIN_VSYNC; - config.pin_href = CAMERA_PIN_HREF; - config.pin_sccb_sda = CAMERA_PIN_SIOD; - config.pin_sccb_scl = CAMERA_PIN_SIOC; - config.sccb_i2c_port = 0; - config.pin_pwdn = CAMERA_PIN_PWDN; - config.pin_reset = CAMERA_PIN_RESET; - config.xclk_freq_hz = XCLK_FREQ_HZ; - config.pixel_format = PIXFORMAT_RGB565; - config.frame_size = FRAMESIZE_QVGA; - config.jpeg_quality = 12; - config.fb_count = 1; - config.fb_location = CAMERA_FB_IN_PSRAM; - config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; - camera_ = new Esp32Camera(config); - camera_->SetHMirror(false); - } - - void InitializeButtons() { - boot_button_.OnClick([this]() { - auto& app = Application::GetInstance(); - if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { - ResetWifiConfiguration(); - } - app.ToggleChatState(); - }); - } - -public: - CompactWifiBoardS3Cam() : - boot_button_(BOOT_BUTTON_GPIO) { - InitializeSpi(); - InitializeLcdDisplay(); - InitializeButtons(); - InitializeCamera(); - if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { - GetBacklight()->RestoreBrightness(); - } - - } - - virtual Led* GetLed() override { - static SingleLed led(BUILTIN_LED_GPIO); - return &led; - } - - virtual AudioCodec* GetAudioCodec() override { -#ifdef AUDIO_I2S_METHOD_SIMPLEX - static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, - AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); -#else - static NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, - AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN); -#endif - return &audio_codec; - } - - virtual Display* GetDisplay() override { - return display_; - } - - virtual Backlight* GetBacklight() override { - if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { - static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); - return &backlight; - } - return nullptr; - } - - virtual Camera* GetCamera() override { - return camera_; - } -}; - -DECLARE_BOARD(CompactWifiBoardS3Cam); +#include "wifi_board.h" +#include "codecs/no_audio_codec.h" +#include "display/lcd_display.h" +#include "system_reset.h" +#include "application.h" +#include "button.h" +#include "config.h" +#include "mcp_server.h" +#include "lamp_controller.h" +#include "led/single_led.h" +#include "esp32_camera.h" + +#include +#include +#include +#include +#include +#include +#include + +#if defined(LCD_TYPE_ILI9341_SERIAL) +#include "esp_lcd_ili9341.h" +#endif + +#if defined(LCD_TYPE_GC9A01_SERIAL) +#include "esp_lcd_gc9a01.h" +static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { + // {cmd, { data }, data_size, delay_ms} + {0xfe, (uint8_t[]){0x00}, 0, 0}, + {0xef, (uint8_t[]){0x00}, 0, 0}, + {0xb0, (uint8_t[]){0xc0}, 1, 0}, + {0xb1, (uint8_t[]){0x80}, 1, 0}, + {0xb2, (uint8_t[]){0x27}, 1, 0}, + {0xb3, (uint8_t[]){0x13}, 1, 0}, + {0xb6, (uint8_t[]){0x19}, 1, 0}, + {0xb7, (uint8_t[]){0x05}, 1, 0}, + {0xac, (uint8_t[]){0xc8}, 1, 0}, + {0xab, (uint8_t[]){0x0f}, 1, 0}, + {0x3a, (uint8_t[]){0x05}, 1, 0}, + {0xb4, (uint8_t[]){0x04}, 1, 0}, + {0xa8, (uint8_t[]){0x08}, 1, 0}, + {0xb8, (uint8_t[]){0x08}, 1, 0}, + {0xea, (uint8_t[]){0x02}, 1, 0}, + {0xe8, (uint8_t[]){0x2A}, 1, 0}, + {0xe9, (uint8_t[]){0x47}, 1, 0}, + {0xe7, (uint8_t[]){0x5f}, 1, 0}, + {0xc6, (uint8_t[]){0x21}, 1, 0}, + {0xc7, (uint8_t[]){0x15}, 1, 0}, + {0xf0, + (uint8_t[]){0x1D, 0x38, 0x09, 0x4D, 0x92, 0x2F, 0x35, 0x52, 0x1E, 0x0C, + 0x04, 0x12, 0x14, 0x1f}, + 14, 0}, + {0xf1, + (uint8_t[]){0x16, 0x40, 0x1C, 0x54, 0xA9, 0x2D, 0x2E, 0x56, 0x10, 0x0D, + 0x0C, 0x1A, 0x14, 0x1E}, + 14, 0}, + {0xf4, (uint8_t[]){0x00, 0x00, 0xFF}, 3, 0}, + {0xba, (uint8_t[]){0xFF, 0xFF}, 2, 0}, +}; +#endif + +#define TAG "CompactWifiBoardS3Cam" + +class CompactWifiBoardS3Cam : public WifiBoard { +private: + + Button boot_button_; + LcdDisplay* display_; + Esp32Camera* camera_; + + void InitializeSpi() { + spi_bus_config_t buscfg = {}; + buscfg.mosi_io_num = DISPLAY_MOSI_PIN; + buscfg.miso_io_num = GPIO_NUM_NC; + buscfg.sclk_io_num = DISPLAY_CLK_PIN; + buscfg.quadwp_io_num = GPIO_NUM_NC; + buscfg.quadhd_io_num = GPIO_NUM_NC; + buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t); + ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); + } + + void InitializeLcdDisplay() { + esp_lcd_panel_io_handle_t panel_io = nullptr; + esp_lcd_panel_handle_t panel = nullptr; + // 液晶屏控制IO初始化 + ESP_LOGD(TAG, "Install panel IO"); + esp_lcd_panel_io_spi_config_t io_config = {}; + io_config.cs_gpio_num = DISPLAY_CS_PIN; + io_config.dc_gpio_num = DISPLAY_DC_PIN; + io_config.spi_mode = DISPLAY_SPI_MODE; + io_config.pclk_hz = 40 * 1000 * 1000; + io_config.trans_queue_depth = 10; + io_config.lcd_cmd_bits = 8; + io_config.lcd_param_bits = 8; + ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); + + // 初始化液晶屏驱动芯片 + ESP_LOGD(TAG, "Install LCD driver"); + esp_lcd_panel_dev_config_t panel_config = {}; + panel_config.reset_gpio_num = DISPLAY_RST_PIN; + panel_config.rgb_ele_order = DISPLAY_RGB_ORDER; + panel_config.bits_per_pixel = 16; +#if defined(LCD_TYPE_ILI9341_SERIAL) + ESP_ERROR_CHECK(esp_lcd_new_panel_ili9341(panel_io, &panel_config, &panel)); +#elif defined(LCD_TYPE_GC9A01_SERIAL) + ESP_ERROR_CHECK(esp_lcd_new_panel_gc9a01(panel_io, &panel_config, &panel)); + gc9a01_vendor_config_t gc9107_vendor_config = { + .init_cmds = gc9107_lcd_init_cmds, + .init_cmds_size = sizeof(gc9107_lcd_init_cmds) / sizeof(gc9a01_lcd_init_cmd_t), + }; +#else + ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); +#endif + + esp_lcd_panel_reset(panel); + + esp_lcd_panel_init(panel); + esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); + esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); + esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); +#ifdef LCD_TYPE_GC9A01_SERIAL + panel_config.vendor_config = &gc9107_vendor_config; +#endif + display_ = new SpiLcdDisplay(panel_io, panel, + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); + } + + void InitializeCamera() { + camera_config_t config = {}; + config.pin_d0 = CAMERA_PIN_D0; + config.pin_d1 = CAMERA_PIN_D1; + config.pin_d2 = CAMERA_PIN_D2; + config.pin_d3 = CAMERA_PIN_D3; + config.pin_d4 = CAMERA_PIN_D4; + config.pin_d5 = CAMERA_PIN_D5; + config.pin_d6 = CAMERA_PIN_D6; + config.pin_d7 = CAMERA_PIN_D7; + config.pin_xclk = CAMERA_PIN_XCLK; + config.pin_pclk = CAMERA_PIN_PCLK; + config.pin_vsync = CAMERA_PIN_VSYNC; + config.pin_href = CAMERA_PIN_HREF; + config.pin_sccb_sda = CAMERA_PIN_SIOD; + config.pin_sccb_scl = CAMERA_PIN_SIOC; + config.sccb_i2c_port = 0; + config.pin_pwdn = CAMERA_PIN_PWDN; + config.pin_reset = CAMERA_PIN_RESET; + config.xclk_freq_hz = XCLK_FREQ_HZ; + config.pixel_format = PIXFORMAT_RGB565; + config.frame_size = FRAMESIZE_QVGA; + config.jpeg_quality = 12; + config.fb_count = 1; + config.fb_location = CAMERA_FB_IN_PSRAM; + config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; + camera_ = new Esp32Camera(config); + camera_->SetHMirror(false); + } + + void InitializeButtons() { + boot_button_.OnClick([this]() { + auto& app = Application::GetInstance(); + if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { + ResetWifiConfiguration(); + } + app.ToggleChatState(); + }); + } + +public: + CompactWifiBoardS3Cam() : + boot_button_(BOOT_BUTTON_GPIO) { + InitializeSpi(); + InitializeLcdDisplay(); + InitializeButtons(); + InitializeCamera(); + if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { + GetBacklight()->RestoreBrightness(); + } + + } + + virtual Led* GetLed() override { + static SingleLed led(BUILTIN_LED_GPIO); + return &led; + } + + virtual AudioCodec* GetAudioCodec() override { +#ifdef AUDIO_I2S_METHOD_SIMPLEX + static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, + AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); +#else + static NoAudioCodecDuplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, + AUDIO_I2S_GPIO_BCLK, AUDIO_I2S_GPIO_WS, AUDIO_I2S_GPIO_DOUT, AUDIO_I2S_GPIO_DIN); +#endif + return &audio_codec; + } + + virtual Display* GetDisplay() override { + return display_; + } + + virtual Backlight* GetBacklight() override { + if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { + static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); + return &backlight; + } + return nullptr; + } + + virtual Camera* GetCamera() override { + return camera_; + } +}; + +DECLARE_BOARD(CompactWifiBoardS3Cam); diff --git a/main/boards/bread-compact-wifi/compact_wifi_board.cc b/main/boards/bread-compact-wifi/compact_wifi_board.cc index 25536af..fca4d1c 100644 --- a/main/boards/bread-compact-wifi/compact_wifi_board.cc +++ b/main/boards/bread-compact-wifi/compact_wifi_board.cc @@ -22,9 +22,6 @@ #define TAG "CompactWifiBoard" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - class CompactWifiBoard : public WifiBoard { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -101,8 +98,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/common/board.cc b/main/boards/common/board.cc index 933e2e6..cfce379 100644 --- a/main/boards/common/board.cc +++ b/main/boards/common/board.cc @@ -85,7 +85,7 @@ Led* Board::GetLed() { return &led; } -std::string Board::GetJson() { +std::string Board::GetSystemInfoJson() { /* { "version": 2, @@ -178,4 +178,13 @@ std::string Board::GetJson() { // Close the JSON object json += R"(})"; return json; +} + +Assets* Board::GetAssets() { +#ifdef DEFAULT_ASSETS + static Assets assets(DEFAULT_ASSETS); + return &assets; +#else + return nullptr; +#endif } \ No newline at end of file diff --git a/main/boards/common/board.h b/main/boards/common/board.h index 9c1effb..5cb5bec 100644 --- a/main/boards/common/board.h +++ b/main/boards/common/board.h @@ -12,6 +12,8 @@ #include "backlight.h" #include "camera.h" #include "music.h" +#include "assets.h" + void* create_board(); class AudioCodec; @@ -30,14 +32,13 @@ protected: // 音乐播放器实例 Music* music_; - public: static Board& GetInstance() { static Board* instance = static_cast(create_board()); return *instance; } - virtual ~Board(); + virtual ~Board(); // 改为非默认析构函数,用于清理 music_ virtual std::string GetBoardType() = 0; virtual std::string GetUuid() { return uuid_; } virtual Backlight* GetBacklight() { return nullptr; } @@ -51,10 +52,11 @@ public: virtual void StartNetwork() = 0; virtual const char* GetNetworkStateIcon() = 0; virtual bool GetBatteryLevel(int &level, bool& charging, bool& discharging); - virtual std::string GetJson(); + virtual std::string GetSystemInfoJson(); virtual void SetPowerSaveMode(bool enabled) = 0; virtual std::string GetBoardJson() = 0; virtual std::string GetDeviceStatusJson() = 0; + virtual Assets* GetAssets(); }; #define DECLARE_BOARD(BOARD_CLASS_NAME) \ @@ -62,4 +64,4 @@ void* create_board() { \ return new BOARD_CLASS_NAME(); \ } -#endif // BOARD_H +#endif // BOARD_H \ No newline at end of file diff --git a/main/boards/common/esp32_camera.cc b/main/boards/common/esp32_camera.cc index 38cd0bf..d49c1e0 100644 --- a/main/boards/common/esp32_camera.cc +++ b/main/boards/common/esp32_camera.cc @@ -3,6 +3,7 @@ #include "display.h" #include "board.h" #include "system_info.h" +#include "lvgl_display.h" #include #include @@ -23,48 +24,6 @@ Esp32Camera::Esp32Camera(const camera_config_t& config) { if (s->id.PID == GC0308_PID) { s->set_hmirror(s, 0); // 这里控制摄像头镜像 写1镜像 写0不镜像 } - - // 初始化预览图片的内存 - memset(&preview_image_, 0, sizeof(preview_image_)); - preview_image_.header.magic = LV_IMAGE_HEADER_MAGIC; - preview_image_.header.cf = LV_COLOR_FORMAT_RGB565; - preview_image_.header.flags = 0; - - switch (config.frame_size) { - case FRAMESIZE_SVGA: - preview_image_.header.w = 800; - preview_image_.header.h = 600; - break; - case FRAMESIZE_VGA: - preview_image_.header.w = 640; - preview_image_.header.h = 480; - break; - case FRAMESIZE_QVGA: - preview_image_.header.w = 320; - preview_image_.header.h = 240; - break; - case FRAMESIZE_128X128: - preview_image_.header.w = 128; - preview_image_.header.h = 128; - break; - case FRAMESIZE_240X240: - preview_image_.header.w = 240; - preview_image_.header.h = 240; - break; - default: - ESP_LOGE(TAG, "Unsupported frame size: %d, image preview will not be shown", config.frame_size); - preview_image_.data_size = 0; - preview_image_.data = nullptr; - return; - } - - preview_image_.header.stride = preview_image_.header.w * 2; - preview_image_.data_size = preview_image_.header.w * preview_image_.header.h * 2; - preview_image_.data = (uint8_t*)heap_caps_malloc(preview_image_.data_size, MALLOC_CAP_SPIRAM); - if (preview_image_.data == nullptr) { - ESP_LOGE(TAG, "Failed to allocate memory for preview image"); - return; - } } Esp32Camera::~Esp32Camera() { @@ -72,10 +31,6 @@ Esp32Camera::~Esp32Camera() { esp_camera_fb_return(fb_); fb_ = nullptr; } - if (preview_image_.data) { - heap_caps_free((void*)preview_image_.data); - preview_image_.data = nullptr; - } esp_camera_deinit(); } @@ -89,6 +44,7 @@ bool Esp32Camera::Capture() { encoder_thread_.join(); } + auto start_time = esp_timer_get_time(); int frames_to_get = 2; // Try to get a stable frame for (int i = 0; i < frames_to_get; i++) { @@ -101,28 +57,36 @@ bool Esp32Camera::Capture() { return false; } } + auto end_time = esp_timer_get_time(); + ESP_LOGI(TAG, "Camera captured %d frames in %d ms", frames_to_get, int((end_time - start_time) / 1000)); - // 如果预览图片 buffer 为空,则跳过预览 - // 但仍返回 true,因为此时图像可以上传至服务器 - if (preview_image_.data_size == 0) { - ESP_LOGW(TAG, "Skip preview because of unsupported frame size"); - return true; - } - if (preview_image_.data == nullptr) { - ESP_LOGE(TAG, "Preview image data is not initialized"); - return true; - } // 显示预览图片 - auto display = Board::GetInstance().GetDisplay(); + auto display = dynamic_cast(Board::GetInstance().GetDisplay()); if (display != nullptr) { + // Create a new preview image + auto img_dsc = (lv_img_dsc_t*)heap_caps_calloc(1, sizeof(lv_img_dsc_t), MALLOC_CAP_8BIT); + img_dsc->header.magic = LV_IMAGE_HEADER_MAGIC; + img_dsc->header.cf = LV_COLOR_FORMAT_RGB565; + img_dsc->header.flags = 0; + img_dsc->header.w = fb_->width; + img_dsc->header.h = fb_->height; + img_dsc->header.stride = fb_->width * 2; + img_dsc->data_size = fb_->width * fb_->height * 2; + img_dsc->data = (uint8_t*)heap_caps_malloc(img_dsc->data_size, MALLOC_CAP_SPIRAM); + if (img_dsc->data == nullptr) { + ESP_LOGE(TAG, "Failed to allocate memory for preview image"); + heap_caps_free(img_dsc); + return false; + } + auto src = (uint16_t*)fb_->buf; - auto dst = (uint16_t*)preview_image_.data; + auto dst = (uint16_t*)img_dsc->data; size_t pixel_count = fb_->len / 2; for (size_t i = 0; i < pixel_count; i++) { // 交换每个16位字内的字节 dst[i] = __builtin_bswap16(src[i]); } - display->SetPreviewImage(&preview_image_); + display->SetPreviewImage(img_dsc); } return true; } @@ -185,14 +149,14 @@ bool Esp32Camera::SetVFlip(bool enabled) { */ std::string Esp32Camera::Explain(const std::string& question) { if (explain_url_.empty()) { - return "{\"success\": false, \"message\": \"Image explain URL or token is not set\"}"; + throw std::runtime_error("Image explain URL or token is not set"); } // 创建局部的 JPEG 队列, 40 entries is about to store 512 * 40 = 20480 bytes of JPEG data QueueHandle_t jpeg_queue = xQueueCreate(40, sizeof(JpegChunk)); if (jpeg_queue == nullptr) { ESP_LOGE(TAG, "Failed to create JPEG queue"); - return "{\"success\": false, \"message\": \"Failed to create JPEG queue\"}"; + throw std::runtime_error("Failed to create JPEG queue"); } // We spawn a thread to encode the image to JPEG @@ -235,7 +199,7 @@ std::string Esp32Camera::Explain(const std::string& question) { } } vQueueDelete(jpeg_queue); - return "{\"success\": false, \"message\": \"Failed to connect to explain URL\"}"; + throw std::runtime_error("Failed to connect to explain URL"); } { @@ -288,7 +252,7 @@ std::string Esp32Camera::Explain(const std::string& question) { if (http->GetStatusCode() != 200) { ESP_LOGE(TAG, "Failed to upload photo, status code: %d", http->GetStatusCode()); - return "{\"success\": false, \"message\": \"Failed to upload photo\"}"; + throw std::runtime_error("Failed to upload photo"); } std::string result = http->ReadAll(); diff --git a/main/boards/common/esp32_camera.h b/main/boards/common/esp32_camera.h index dc64c73..7d5c63f 100644 --- a/main/boards/common/esp32_camera.h +++ b/main/boards/common/esp32_camera.h @@ -19,7 +19,6 @@ struct JpegChunk { class Esp32Camera : public Camera { private: camera_fb_t* fb_ = nullptr; - lv_img_dsc_t preview_image_; std::string explain_url_; std::string explain_token_; std::thread encoder_thread_; diff --git a/main/boards/common/esp32_music.cc b/main/boards/common/esp32_music.cc index c5a1d04..4bb467e 100644 --- a/main/boards/common/esp32_music.cc +++ b/main/boards/common/esp32_music.cc @@ -16,8 +16,8 @@ #include #include #include -#include // 为isdigit函数 -#include // 为线程ID比较 +#include // 为isdigit函数 +#include // 为线程ID比较 #include #include @@ -29,8 +29,7 @@ * @brief 获取设备MAC地址 * @return MAC地址字符串 */ -static std::string get_device_mac() -{ +static std::string get_device_mac() { return SystemInfo::GetMacAddress(); } @@ -38,8 +37,7 @@ static std::string get_device_mac() * @brief 获取设备芯片ID * @return 芯片ID字符串 */ -static std::string get_device_chip_id() -{ +static std::string get_device_chip_id() { // 使用MAC地址作为芯片ID,去除冒号分隔符 std::string mac = SystemInfo::GetMacAddress(); // 去除所有冒号 @@ -52,31 +50,29 @@ static std::string get_device_chip_id() * @param timestamp 时间戳 * @return 动态密钥字符串 */ -static std::string generate_dynamic_key(int64_t timestamp) -{ +static std::string generate_dynamic_key(int64_t timestamp) { // 密钥(请修改为与服务端一致) const std::string secret_key = "your-esp32-secret-key-2024"; - + // 获取设备信息 std::string mac = get_device_mac(); std::string chip_id = get_device_chip_id(); - + // 组合数据:MAC:芯片ID:时间戳:密钥 std::string data = mac + ":" + chip_id + ":" + std::to_string(timestamp) + ":" + secret_key; - + // SHA256哈希 unsigned char hash[32]; - mbedtls_sha256((unsigned char *)data.c_str(), data.length(), hash, 0); - + mbedtls_sha256((unsigned char*)data.c_str(), data.length(), hash, 0); + // 转换为十六进制字符串(前16字节) std::string key; - for (int i = 0; i < 16; i++) - { + for (int i = 0; i < 16; i++) { char hex[3]; snprintf(hex, sizeof(hex), "%02X", hash[i]); key += hex; } - + return key; } @@ -84,54 +80,45 @@ static std::string generate_dynamic_key(int64_t timestamp) * @brief 为HTTP请求添加认证头 * @param http HTTP客户端指针 */ -static void add_auth_headers(Http *http) -{ +static void add_auth_headers(Http* http) { // 获取当前时间戳 - int64_t timestamp = esp_timer_get_time() / 1000000; // 转换为秒 - + int64_t timestamp = esp_timer_get_time() / 1000000; // 转换为秒 + // 生成动态密钥 std::string dynamic_key = generate_dynamic_key(timestamp); - + // 获取设备信息 std::string mac = get_device_mac(); std::string chip_id = get_device_chip_id(); - + // 添加认证头 - if (http) - { + if (http) { http->SetHeader("X-MAC-Address", mac); http->SetHeader("X-Chip-ID", chip_id); http->SetHeader("X-Timestamp", std::to_string(timestamp)); http->SetHeader("X-Dynamic-Key", dynamic_key); - - ESP_LOGI(TAG, "Added auth headers - MAC: %s, ChipID: %s, Timestamp: %lld", + + ESP_LOGI(TAG, "Added auth headers - MAC: %s, ChipID: %s, Timestamp: %lld", mac.c_str(), chip_id.c_str(), timestamp); } } // URL编码函数 -static std::string url_encode(const std::string &str) -{ +static std::string url_encode(const std::string& str) { std::string encoded; char hex[4]; - - for (size_t i = 0; i < str.length(); i++) - { + + for (size_t i = 0; i < str.length(); i++) { unsigned char c = str[i]; - + if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || - c == '-' || c == '_' || c == '.' || c == '~') - { + c == '-' || c == '_' || c == '.' || c == '~') { encoded += c; - } - else if (c == ' ') - { - encoded += '+'; // 空格编码为'+'或'%20' - } - else - { + } else if (c == ' ') { + encoded += '+'; // 空格编码为'+'或'%20' + } else { snprintf(hex, sizeof(hex), "%%%02X", c); encoded += hex; } @@ -140,722 +127,627 @@ static std::string url_encode(const std::string &str) } // 在文件开头添加一个辅助函数,统一处理URL构建 -static std::string buildUrlWithParams(const std::string &base_url, const std::string &path, const std::string &query) -{ +static std::string buildUrlWithParams(const std::string& base_url, const std::string& path, const std::string& query) { std::string result_url = base_url + path + "?"; size_t pos = 0; size_t amp_pos = 0; - - while ((amp_pos = query.find("&", pos)) != std::string::npos) - { + + while ((amp_pos = query.find("&", pos)) != std::string::npos) { std::string param = query.substr(pos, amp_pos - pos); size_t eq_pos = param.find("="); - - if (eq_pos != std::string::npos) - { + + if (eq_pos != std::string::npos) { std::string key = param.substr(0, eq_pos); std::string value = param.substr(eq_pos + 1); result_url += key + "=" + url_encode(value) + "&"; - } - else - { + } else { result_url += param + "&"; } - + pos = amp_pos + 1; } - + // 处理最后一个参数 std::string last_param = query.substr(pos); size_t eq_pos = last_param.find("="); - - if (eq_pos != std::string::npos) - { + + if (eq_pos != std::string::npos) { std::string key = last_param.substr(0, eq_pos); std::string value = last_param.substr(eq_pos + 1); result_url += key + "=" + url_encode(value); - } - else - { + } else { result_url += last_param; } - + return result_url; } Esp32Music::Esp32Music() : last_downloaded_data_(), current_music_url_(), current_song_name_(), - song_name_displayed_(false), current_lyric_url_(), lyrics_(), - current_lyric_index_(-1), lyric_thread_(), is_lyric_running_(false), - display_mode_(DISPLAY_MODE_LYRICS), is_playing_(false), is_downloading_(false), - play_thread_(), download_thread_(), audio_buffer_(), buffer_mutex_(), - buffer_cv_(), buffer_size_(0), mp3_decoder_(nullptr), mp3_frame_info_(), - mp3_decoder_initialized_(false) -{ + song_name_displayed_(false), current_lyric_url_(), lyrics_(), + current_lyric_index_(-1), lyric_thread_(), is_lyric_running_(false), + display_mode_(DISPLAY_MODE_LYRICS), is_playing_(false), is_downloading_(false), + play_thread_(), download_thread_(), audio_buffer_(), buffer_mutex_(), + buffer_cv_(), buffer_size_(0), mp3_decoder_(nullptr), mp3_frame_info_(), + mp3_decoder_initialized_(false) { ESP_LOGI(TAG, "Music player initialized with default spectrum display mode"); InitializeMp3Decoder(); } -Esp32Music::~Esp32Music() -{ +Esp32Music::~Esp32Music() { ESP_LOGI(TAG, "Destroying music player - stopping all operations"); - + // 停止所有操作 is_downloading_ = false; is_playing_ = false; is_lyric_running_ = false; - + // 通知所有等待的线程 { std::lock_guard lock(buffer_mutex_); buffer_cv_.notify_all(); } - + // 等待下载线程结束,设置5秒超时 - if (download_thread_.joinable()) - { + if (download_thread_.joinable()) { ESP_LOGI(TAG, "Waiting for download thread to finish (timeout: 5s)"); auto start_time = std::chrono::steady_clock::now(); - + // 等待线程结束 bool thread_finished = false; - while (!thread_finished) - { + while (!thread_finished) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); auto elapsed = std::chrono::duration_cast( - std::chrono::steady_clock::now() - start_time) - .count(); - - if (elapsed >= 5) - { + std::chrono::steady_clock::now() - start_time).count(); + + if (elapsed >= 5) { ESP_LOGW(TAG, "Download thread join timeout after 5 seconds"); break; } - + // 再次设置停止标志,确保线程能够检测到 is_downloading_ = false; - + // 通知条件变量 { std::lock_guard lock(buffer_mutex_); buffer_cv_.notify_all(); } - + // 检查线程是否已经结束 - if (!download_thread_.joinable()) - { + if (!download_thread_.joinable()) { thread_finished = true; } - + // 定期打印等待信息 - if (elapsed > 0 && elapsed % 1 == 0) - { + if (elapsed > 0 && elapsed % 1 == 0) { ESP_LOGI(TAG, "Still waiting for download thread to finish... (%ds)", (int)elapsed); } } - - if (download_thread_.joinable()) - { + + if (download_thread_.joinable()) { download_thread_.join(); } ESP_LOGI(TAG, "Download thread finished"); } - + // 等待播放线程结束,设置3秒超时 - if (play_thread_.joinable()) - { + if (play_thread_.joinable()) { ESP_LOGI(TAG, "Waiting for playback thread to finish (timeout: 3s)"); auto start_time = std::chrono::steady_clock::now(); - + bool thread_finished = false; - while (!thread_finished) - { + while (!thread_finished) { std::this_thread::sleep_for(std::chrono::milliseconds(50)); auto elapsed = std::chrono::duration_cast( - std::chrono::steady_clock::now() - start_time) - .count(); - - if (elapsed >= 3) - { + std::chrono::steady_clock::now() - start_time).count(); + + if (elapsed >= 3) { ESP_LOGW(TAG, "Playback thread join timeout after 3 seconds"); break; } - + // 再次设置停止标志 is_playing_ = false; - + // 通知条件变量 { std::lock_guard lock(buffer_mutex_); buffer_cv_.notify_all(); } - + // 检查线程是否已经结束 - if (!play_thread_.joinable()) - { + if (!play_thread_.joinable()) { thread_finished = true; } } - - if (play_thread_.joinable()) - { + + if (play_thread_.joinable()) { play_thread_.join(); } ESP_LOGI(TAG, "Playback thread finished"); } - + // 等待歌词线程结束 - if (lyric_thread_.joinable()) - { + if (lyric_thread_.joinable()) { ESP_LOGI(TAG, "Waiting for lyric thread to finish"); lyric_thread_.join(); ESP_LOGI(TAG, "Lyric thread finished"); } - + // 清理缓冲区和MP3解码器 ClearAudioBuffer(); CleanupMp3Decoder(); - + ESP_LOGI(TAG, "Music player destroyed successfully"); } -bool Esp32Music::Download(const std::string &song_name, const std::string &artist_name) -{ +bool Esp32Music::Download(const std::string& song_name, const std::string& artist_name) { ESP_LOGI(TAG, "云端由MeowEmbeddedMusicServer喵波音律嵌入式提供"); ESP_LOGI(TAG, "喵波音律QQ交流群:865754861"); ESP_LOGI(TAG, "Starting to get music details for: %s", song_name.c_str()); - + // 清空之前的下载数据 last_downloaded_data_.clear(); - + // 保存歌名用于后续显示 current_song_name_ = song_name; - + // 第一步:请求stream_pcm接口获取音频信息 std::string base_url = "http://http-embedded-music.miao-lab.top:2233"; std::string full_url = base_url + "/stream_pcm?song=" + url_encode(song_name) + "&artist=" + url_encode(artist_name); - + ESP_LOGI(TAG, "Request URL: %s", full_url.c_str()); - + // 使用Board提供的HTTP客户端 auto network = Board::GetInstance().GetNetwork(); auto http = network->CreateHttp(0); - + // 设置基本请求头 http->SetHeader("User-Agent", "ESP32-Music-Player/1.0"); http->SetHeader("Accept", "application/json"); - + // 添加ESP32认证头 add_auth_headers(http.get()); - + // 打开GET连接 - if (!http->Open("GET", full_url)) - { + if (!http->Open("GET", full_url)) { ESP_LOGE(TAG, "Failed to connect to music API"); return false; } - + // 检查响应状态码 int status_code = http->GetStatusCode(); - if (status_code != 200) - { + if (status_code != 200) { ESP_LOGE(TAG, "HTTP GET failed with status code: %d", status_code); http->Close(); return false; } - + // 读取响应数据 last_downloaded_data_ = http->ReadAll(); http->Close(); - + ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %d", status_code, last_downloaded_data_.length()); ESP_LOGD(TAG, "Complete music details response: %s", last_downloaded_data_.c_str()); - + // 简单的认证响应检查(可选) - if (last_downloaded_data_.find("ESP32动态密钥验证失败") != std::string::npos) - { + if (last_downloaded_data_.find("ESP32动态密钥验证失败") != std::string::npos) { ESP_LOGE(TAG, "Authentication failed for song: %s", song_name.c_str()); return false; } - - if (!last_downloaded_data_.empty()) - { + + if (!last_downloaded_data_.empty()) { // 解析响应JSON以提取音频URL - cJSON *response_json = cJSON_Parse(last_downloaded_data_.c_str()); - if (response_json) - { + cJSON* response_json = cJSON_Parse(last_downloaded_data_.c_str()); + if (response_json) { // 提取关键信息 - cJSON *artist = cJSON_GetObjectItem(response_json, "artist"); - cJSON *title = cJSON_GetObjectItem(response_json, "title"); - cJSON *audio_url = cJSON_GetObjectItem(response_json, "audio_url"); - cJSON *lyric_url = cJSON_GetObjectItem(response_json, "lyric_url"); - - if (cJSON_IsString(artist)) - { + cJSON* artist = cJSON_GetObjectItem(response_json, "artist"); + cJSON* title = cJSON_GetObjectItem(response_json, "title"); + cJSON* audio_url = cJSON_GetObjectItem(response_json, "audio_url"); + cJSON* lyric_url = cJSON_GetObjectItem(response_json, "lyric_url"); + + if (cJSON_IsString(artist)) { ESP_LOGI(TAG, "Artist: %s", artist->valuestring); } - if (cJSON_IsString(title)) - { + if (cJSON_IsString(title)) { ESP_LOGI(TAG, "Title: %s", title->valuestring); } - + // 检查audio_url是否有效 - if (cJSON_IsString(audio_url) && audio_url->valuestring && strlen(audio_url->valuestring) > 0) - { + if (cJSON_IsString(audio_url) && audio_url->valuestring && strlen(audio_url->valuestring) > 0) { ESP_LOGI(TAG, "Audio URL path: %s", audio_url->valuestring); - - // 第二步:拼接完整的音频下载URL,确保对audio_url进行URL编码 + + // 第二步:直接使用audio_url播放音乐 std::string audio_path = audio_url->valuestring; - current_music_url_ = audio_path; - + ESP_LOGI(TAG, "云端由MeowEmbeddedMusicServer喵波音律嵌入式提供"); ESP_LOGI(TAG, "喵波音律QQ交流群:865754861"); ESP_LOGI(TAG, "Starting streaming playback for: %s", song_name.c_str()); - song_name_displayed_ = false; // 重置歌名显示标志 + song_name_displayed_ = false; // 重置歌名显示标志 StartStreaming(current_music_url_); - + // 处理歌词URL - 只有在歌词显示模式下才启动歌词 - if (cJSON_IsString(lyric_url) && lyric_url->valuestring && strlen(lyric_url->valuestring) > 0) - { + if (cJSON_IsString(lyric_url) && lyric_url->valuestring && strlen(lyric_url->valuestring) > 0) { + // 直接使用歌词URL std::string lyric_path = lyric_url->valuestring; current_lyric_url_ = lyric_path; - + // 根据显示模式决定是否启动歌词 - if (display_mode_ == DISPLAY_MODE_LYRICS) - { + if (display_mode_ == DISPLAY_MODE_LYRICS) { ESP_LOGI(TAG, "Loading lyrics for: %s (lyrics display mode)", song_name.c_str()); - + // 启动歌词下载和显示 - if (is_lyric_running_) - { + if (is_lyric_running_) { is_lyric_running_ = false; - if (lyric_thread_.joinable()) - { + if (lyric_thread_.joinable()) { lyric_thread_.join(); } } - + is_lyric_running_ = true; current_lyric_index_ = -1; lyrics_.clear(); - + lyric_thread_ = std::thread(&Esp32Music::LyricDisplayThread, this); - } - else - { + } else { ESP_LOGI(TAG, "Lyric URL found but spectrum display mode is active, skipping lyrics"); } - } - else - { + } else { ESP_LOGW(TAG, "No lyric URL found for this song"); } - + cJSON_Delete(response_json); return true; - } - else - { + } else { // audio_url为空或无效 ESP_LOGE(TAG, "Audio URL not found or empty for song: %s", song_name.c_str()); ESP_LOGE(TAG, "Failed to find music: 没有找到歌曲 '%s'", song_name.c_str()); cJSON_Delete(response_json); return false; } - } - else - { + } else { ESP_LOGE(TAG, "Failed to parse JSON response"); } - } - else - { + } else { ESP_LOGE(TAG, "Empty response from music API"); } - + return false; } -std::string Esp32Music::GetDownloadResult() -{ + + +std::string Esp32Music::GetDownloadResult() { return last_downloaded_data_; } // 开始流式播放 -bool Esp32Music::StartStreaming(const std::string &music_url) -{ - if (music_url.empty()) - { +bool Esp32Music::StartStreaming(const std::string& music_url) { + if (music_url.empty()) { ESP_LOGE(TAG, "Music URL is empty"); return false; } - + ESP_LOGD(TAG, "Starting streaming for URL: %s", music_url.c_str()); - + // 停止之前的播放和下载 is_downloading_ = false; is_playing_ = false; - + // 等待之前的线程完全结束 - if (download_thread_.joinable()) - { + if (download_thread_.joinable()) { { std::lock_guard lock(buffer_mutex_); - buffer_cv_.notify_all(); // 通知线程退出 + buffer_cv_.notify_all(); // 通知线程退出 } download_thread_.join(); } - if (play_thread_.joinable()) - { + if (play_thread_.joinable()) { { std::lock_guard lock(buffer_mutex_); - buffer_cv_.notify_all(); // 通知线程退出 + buffer_cv_.notify_all(); // 通知线程退出 } play_thread_.join(); } - + // 清空缓冲区 ClearAudioBuffer(); - + // 配置线程栈大小以避免栈溢出 esp_pthread_cfg_t cfg = esp_pthread_get_default_config(); - cfg.stack_size = 8192; // 8KB栈大小 - cfg.prio = 5; // 中等优先级 + cfg.stack_size = 8192; // 8KB栈大小 + cfg.prio = 5; // 中等优先级 cfg.thread_name = "audio_stream"; esp_pthread_set_cfg(&cfg); - + // 开始下载线程 is_downloading_ = true; download_thread_ = std::thread(&Esp32Music::DownloadAudioStream, this, music_url); - + // 开始播放线程(会等待缓冲区有足够数据) is_playing_ = true; play_thread_ = std::thread(&Esp32Music::PlayAudioStream, this); - + ESP_LOGI(TAG, "Streaming threads started successfully"); - + return true; } // 停止流式播放 -bool Esp32Music::StopStreaming() -{ - ESP_LOGI(TAG, "Stopping music streaming - current state: downloading=%d, playing=%d", - is_downloading_.load(), is_playing_.load()); +bool Esp32Music::StopStreaming() { + ESP_LOGI(TAG, "Stopping music streaming - current state: downloading=%d, playing=%d", + is_downloading_.load(), is_playing_.load()); // 重置采样率到原始值 ResetSampleRate(); - + // 检查是否有流式播放正在进行 - if (!is_playing_ && !is_downloading_) - { + if (!is_playing_ && !is_downloading_) { ESP_LOGW(TAG, "No streaming in progress"); return true; } - + // 停止下载和播放标志 is_downloading_ = false; is_playing_ = false; - + // 清空歌名显示 - auto &board = Board::GetInstance(); + auto& board = Board::GetInstance(); auto display = board.GetDisplay(); - if (display) - { - display->SetMusicInfo(""); // 清空歌名显示 + if (display) { + display->SetMusicInfo(""); // 清空歌名显示 ESP_LOGI(TAG, "Cleared song name display"); } - + // 通知所有等待的线程 { std::lock_guard lock(buffer_mutex_); buffer_cv_.notify_all(); } - + // 等待线程结束(避免重复代码,让StopStreaming也能等待线程完全停止) - if (download_thread_.joinable()) - { + if (download_thread_.joinable()) { download_thread_.join(); ESP_LOGI(TAG, "Download thread joined in StopStreaming"); } - + // 等待播放线程结束,使用更安全的方式 - if (play_thread_.joinable()) - { + if (play_thread_.joinable()) { // 先设置停止标志 is_playing_ = false; - + // 通知条件变量,确保线程能够退出 { std::lock_guard lock(buffer_mutex_); buffer_cv_.notify_all(); } - + // 使用超时机制等待线程结束,避免死锁 bool thread_finished = false; int wait_count = 0; const int max_wait = 100; // 最多等待1秒 - - while (!thread_finished && wait_count < max_wait) - { + + while (!thread_finished && wait_count < max_wait) { vTaskDelay(pdMS_TO_TICKS(10)); wait_count++; - + // 检查线程是否仍然可join - if (!play_thread_.joinable()) - { + if (!play_thread_.joinable()) { thread_finished = true; break; } } - - if (play_thread_.joinable()) - { - if (wait_count >= max_wait) - { + + if (play_thread_.joinable()) { + if (wait_count >= max_wait) { ESP_LOGW(TAG, "Play thread join timeout, detaching thread"); play_thread_.detach(); - } - else - { + } else { play_thread_.join(); ESP_LOGI(TAG, "Play thread joined in StopStreaming"); } } } - + // 在线程完全结束后,只在频谱模式下停止FFT显示 - if (display && display_mode_ == DISPLAY_MODE_SPECTRUM) - { + if (display && display_mode_ == DISPLAY_MODE_SPECTRUM) { display->stopFft(); ESP_LOGI(TAG, "Stopped FFT display in StopStreaming (spectrum mode)"); - } - else if (display) - { + } else if (display) { ESP_LOGI(TAG, "Not in spectrum mode, skipping FFT stop in StopStreaming"); } - + ESP_LOGI(TAG, "Music streaming stop signal sent"); return true; } // 流式下载音频数据 -void Esp32Music::DownloadAudioStream(const std::string &music_url) -{ +void Esp32Music::DownloadAudioStream(const std::string& music_url) { ESP_LOGD(TAG, "Starting audio stream download from: %s", music_url.c_str()); - + // 验证URL有效性 - if (music_url.empty() || music_url.find("http") != 0) - { + if (music_url.empty() || music_url.find("http") != 0) { ESP_LOGE(TAG, "Invalid URL format: %s", music_url.c_str()); is_downloading_ = false; return; } - + auto network = Board::GetInstance().GetNetwork(); auto http = network->CreateHttp(0); - + // 设置基本请求头 http->SetHeader("User-Agent", "ESP32-Music-Player/1.0"); http->SetHeader("Accept", "*/*"); - http->SetHeader("Range", "bytes=0-"); // 支持断点续传 - + http->SetHeader("Range", "bytes=0-"); // 支持断点续传 + // 添加ESP32认证头 add_auth_headers(http.get()); - - if (!http->Open("GET", music_url)) - { + + if (!http->Open("GET", music_url)) { ESP_LOGE(TAG, "Failed to connect to music stream URL"); is_downloading_ = false; return; } - + int status_code = http->GetStatusCode(); - if (status_code != 200 && status_code != 206) - { // 206 for partial content + if (status_code != 200 && status_code != 206) { // 206 for partial content ESP_LOGE(TAG, "HTTP GET failed with status code: %d", status_code); http->Close(); is_downloading_ = false; return; } - + ESP_LOGI(TAG, "Started downloading audio stream, status: %d", status_code); - + // 分块读取音频数据 - const size_t chunk_size = 4096; // 4KB每块 + const size_t chunk_size = 4096; // 4KB每块 char buffer[chunk_size]; size_t total_downloaded = 0; - - while (is_downloading_ && is_playing_) - { + + while (is_downloading_ && is_playing_) { int bytes_read = http->Read(buffer, chunk_size); - if (bytes_read < 0) - { + if (bytes_read < 0) { ESP_LOGE(TAG, "Failed to read audio data: error code %d", bytes_read); break; } - if (bytes_read == 0) - { + if (bytes_read == 0) { ESP_LOGI(TAG, "Audio stream download completed, total: %d bytes", total_downloaded); break; } - + // 打印数据块信息 // ESP_LOGI(TAG, "Downloaded chunk: %d bytes at offset %d", bytes_read, total_downloaded); - + // 安全地打印数据块的十六进制内容(前16字节) - if (bytes_read >= 16) - { - // ESP_LOGI(TAG, "Data: %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X ...", + if (bytes_read >= 16) { + // ESP_LOGI(TAG, "Data: %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X ...", // (unsigned char)buffer[0], (unsigned char)buffer[1], (unsigned char)buffer[2], (unsigned char)buffer[3], // (unsigned char)buffer[4], (unsigned char)buffer[5], (unsigned char)buffer[6], (unsigned char)buffer[7], // (unsigned char)buffer[8], (unsigned char)buffer[9], (unsigned char)buffer[10], (unsigned char)buffer[11], // (unsigned char)buffer[12], (unsigned char)buffer[13], (unsigned char)buffer[14], (unsigned char)buffer[15]); - } - else - { + } else { ESP_LOGI(TAG, "Data chunk too small: %d bytes", bytes_read); } - + // 尝试检测文件格式(检查文件头) - if (total_downloaded == 0 && bytes_read >= 4) - { - if (memcmp(buffer, "ID3", 3) == 0) - { + if (total_downloaded == 0 && bytes_read >= 4) { + if (memcmp(buffer, "ID3", 3) == 0) { ESP_LOGI(TAG, "Detected MP3 file with ID3 tag"); - } - else if (buffer[0] == 0xFF && (buffer[1] & 0xE0) == 0xE0) - { + } else if (buffer[0] == 0xFF && (buffer[1] & 0xE0) == 0xE0) { ESP_LOGI(TAG, "Detected MP3 file header"); - } - else if (memcmp(buffer, "RIFF", 4) == 0) - { + } else if (memcmp(buffer, "RIFF", 4) == 0) { ESP_LOGI(TAG, "Detected WAV file"); - } - else if (memcmp(buffer, "fLaC", 4) == 0) - { + } else if (memcmp(buffer, "fLaC", 4) == 0) { ESP_LOGI(TAG, "Detected FLAC file"); - } - else if (memcmp(buffer, "OggS", 4) == 0) - { + } else if (memcmp(buffer, "OggS", 4) == 0) { ESP_LOGI(TAG, "Detected OGG file"); - } - else - { - ESP_LOGI(TAG, "Unknown audio format, first 4 bytes: %02X %02X %02X %02X", - (unsigned char)buffer[0], (unsigned char)buffer[1], - (unsigned char)buffer[2], (unsigned char)buffer[3]); + } else { + ESP_LOGI(TAG, "Unknown audio format, first 4 bytes: %02X %02X %02X %02X", + (unsigned char)buffer[0], (unsigned char)buffer[1], + (unsigned char)buffer[2], (unsigned char)buffer[3]); } } - + // 创建音频数据块 - uint8_t *chunk_data = (uint8_t *)heap_caps_malloc(bytes_read, MALLOC_CAP_SPIRAM); - if (!chunk_data) - { + uint8_t* chunk_data = (uint8_t*)heap_caps_malloc(bytes_read, MALLOC_CAP_SPIRAM); + if (!chunk_data) { ESP_LOGE(TAG, "Failed to allocate memory for audio chunk"); break; } memcpy(chunk_data, buffer, bytes_read); - + // 等待缓冲区有空间 { std::unique_lock lock(buffer_mutex_); - buffer_cv_.wait(lock, [this] - { return buffer_size_ < MAX_BUFFER_SIZE || !is_downloading_; }); - - if (is_downloading_) - { + buffer_cv_.wait(lock, [this] { return buffer_size_ < MAX_BUFFER_SIZE || !is_downloading_; }); + + if (is_downloading_) { audio_buffer_.push(AudioChunk(chunk_data, bytes_read)); buffer_size_ += bytes_read; total_downloaded += bytes_read; - + // 通知播放线程有新数据 buffer_cv_.notify_one(); - - if (total_downloaded % (256 * 1024) == 0) - { // 每256KB打印一次进度 + + if (total_downloaded % (256 * 1024) == 0) { // 每256KB打印一次进度 ESP_LOGI(TAG, "Downloaded %d bytes, buffer size: %d", total_downloaded, buffer_size_); } - } - else - { + } else { heap_caps_free(chunk_data); break; } } } - + http->Close(); is_downloading_ = false; - + // 通知播放线程下载完成 { std::lock_guard lock(buffer_mutex_); buffer_cv_.notify_all(); } - + ESP_LOGI(TAG, "Audio stream download thread finished"); } // 流式播放音频数据 -void Esp32Music::PlayAudioStream() -{ +void Esp32Music::PlayAudioStream() { ESP_LOGI(TAG, "Starting audio stream playback"); - + // 初始化时间跟踪变量 current_play_time_ms_ = 0; last_frame_time_ms_ = 0; total_frames_decoded_ = 0; - + auto codec = Board::GetInstance().GetAudioCodec(); - if (!codec || !codec->output_enabled()) - { + if (!codec || !codec->output_enabled()) { ESP_LOGE(TAG, "Audio codec not available or not enabled"); is_playing_ = false; return; } - - if (!mp3_decoder_initialized_) - { + + if (!mp3_decoder_initialized_) { ESP_LOGE(TAG, "MP3 decoder not initialized"); is_playing_ = false; return; } - + + // 等待缓冲区有足够数据开始播放 { std::unique_lock lock(buffer_mutex_); - buffer_cv_.wait(lock, [this] - { return buffer_size_ >= MIN_BUFFER_SIZE || (!is_downloading_ && !audio_buffer_.empty()); }); + buffer_cv_.wait(lock, [this] { + return buffer_size_ >= MIN_BUFFER_SIZE || (!is_downloading_ && !audio_buffer_.empty()); + }); } - + ESP_LOGI(TAG, "云端由MeowEmbeddedMusicServer喵波音律嵌入式提供"); ESP_LOGI(TAG, "喵波音律QQ交流群:865754861"); ESP_LOGI(TAG, "Starting playback with buffer size: %d", buffer_size_); - + size_t total_played = 0; - uint8_t *mp3_input_buffer = nullptr; + uint8_t* mp3_input_buffer = nullptr; int bytes_left = 0; - uint8_t *read_ptr = nullptr; - + uint8_t* read_ptr = nullptr; + // 分配MP3输入缓冲区 - mp3_input_buffer = (uint8_t *)heap_caps_malloc(8192, MALLOC_CAP_SPIRAM); - if (!mp3_input_buffer) - { + mp3_input_buffer = (uint8_t*)heap_caps_malloc(8192, MALLOC_CAP_SPIRAM); + if (!mp3_input_buffer) { ESP_LOGE(TAG, "Failed to allocate MP3 input buffer"); is_playing_ = false; return; } - + // 标记是否已经处理过ID3标签 bool id3_processed = false; - - while (is_playing_) - { + + while (is_playing_) { // 检查设备状态,只有在空闲状态才播放音乐 - auto &app = Application::GetInstance(); + auto& app = Application::GetInstance(); DeviceState current_state = app.GetDeviceState(); - + // 状态转换:说话中-》聆听中-》待机状态-》播放音乐 if (current_state == kDeviceStateListening || current_state == kDeviceStateSpeaking) { if (current_state == kDeviceStateSpeaking) { @@ -868,22 +760,18 @@ void Esp32Music::PlayAudioStream() app.ToggleChatState(); // 变成待机状态 vTaskDelay(pdMS_TO_TICKS(300)); continue; - } - else if (current_state != kDeviceStateIdle) - { // 不是待机状态,就一直卡在这里,不让播放音乐 + } else if (current_state != kDeviceStateIdle) { // 不是待机状态,就一直卡在这里,不让播放音乐 ESP_LOGD(TAG, "Device state is %d, pausing music playback", current_state); // 如果不是空闲状态,暂停播放 vTaskDelay(pdMS_TO_TICKS(50)); continue; } - + // 设备状态检查通过,显示当前播放的歌名 - if (!song_name_displayed_ && !current_song_name_.empty()) - { - auto &board = Board::GetInstance(); + if (!song_name_displayed_ && !current_song_name_.empty()) { + auto& board = Board::GetInstance(); auto display = board.GetDisplay(); - if (display) - { + if (display) { // 格式化歌名显示为《歌名》播放中... std::string formatted_song_name = "《" + current_song_name_ + "》播放中..."; display->SetMusicInfo(formatted_song_name.c_str()); @@ -892,300 +780,264 @@ void Esp32Music::PlayAudioStream() } // 根据显示模式启动相应的显示功能 - if (display) - { - if (display_mode_ == DISPLAY_MODE_SPECTRUM) - { + if (display) { + if (display_mode_ == DISPLAY_MODE_SPECTRUM) { display->start(); ESP_LOGI(TAG, "Display start() called for spectrum visualization"); - } - else - { + } else { ESP_LOGI(TAG, "Lyrics display mode active, FFT visualization disabled"); } } } - + // 如果需要更多MP3数据,从缓冲区读取 - if (bytes_left < 4096) - { // 保持至少4KB数据用于解码 + if (bytes_left < 4096) { // 保持至少4KB数据用于解码 AudioChunk chunk; - + // 从缓冲区获取音频数据 { std::unique_lock lock(buffer_mutex_); - if (audio_buffer_.empty()) - { - if (!is_downloading_) - { + if (audio_buffer_.empty()) { + if (!is_downloading_) { // 下载完成且缓冲区为空,播放结束 ESP_LOGI(TAG, "Playback finished, total played: %d bytes", total_played); break; } // 等待新数据 - buffer_cv_.wait(lock, [this] - { return !audio_buffer_.empty() || !is_downloading_; }); - if (audio_buffer_.empty()) - { + buffer_cv_.wait(lock, [this] { return !audio_buffer_.empty() || !is_downloading_; }); + if (audio_buffer_.empty()) { continue; } } - + chunk = audio_buffer_.front(); audio_buffer_.pop(); buffer_size_ -= chunk.size; - + // 通知下载线程缓冲区有空间 buffer_cv_.notify_one(); } - + // 将新数据添加到MP3输入缓冲区 - if (chunk.data && chunk.size > 0) - { + if (chunk.data && chunk.size > 0) { // 移动剩余数据到缓冲区开头 - if (bytes_left > 0 && read_ptr != mp3_input_buffer) - { + if (bytes_left > 0 && read_ptr != mp3_input_buffer) { memmove(mp3_input_buffer, read_ptr, bytes_left); } - + // 检查缓冲区空间 size_t space_available = 8192 - bytes_left; size_t copy_size = std::min(chunk.size, space_available); - + // 复制新数据 memcpy(mp3_input_buffer + bytes_left, chunk.data, copy_size); bytes_left += copy_size; read_ptr = mp3_input_buffer; - + // 检查并跳过ID3标签(仅在开始时处理一次) - if (!id3_processed && bytes_left >= 10) - { + if (!id3_processed && bytes_left >= 10) { size_t id3_skip = SkipId3Tag(read_ptr, bytes_left); - if (id3_skip > 0) - { + if (id3_skip > 0) { read_ptr += id3_skip; bytes_left -= id3_skip; ESP_LOGI(TAG, "Skipped ID3 tag: %u bytes", (unsigned int)id3_skip); } id3_processed = true; } - + // 释放chunk内存 heap_caps_free(chunk.data); } } - + // 尝试找到MP3帧同步 int sync_offset = MP3FindSyncWord(read_ptr, bytes_left); - if (sync_offset < 0) - { + if (sync_offset < 0) { ESP_LOGW(TAG, "No MP3 sync word found, skipping %d bytes", bytes_left); bytes_left = 0; continue; } - + // 跳过到同步位置 - if (sync_offset > 0) - { + if (sync_offset > 0) { read_ptr += sync_offset; bytes_left -= sync_offset; } - + // 解码MP3帧 int16_t pcm_buffer[2304]; int decode_result = MP3Decode(mp3_decoder_, &read_ptr, &bytes_left, pcm_buffer, 0); - - if (decode_result == 0) - { + + if (decode_result == 0) { // 解码成功,获取帧信息 MP3GetLastFrameInfo(mp3_decoder_, &mp3_frame_info_); total_frames_decoded_++; - + // 基本的帧信息有效性检查,防止除零错误 - if (mp3_frame_info_.samprate == 0 || mp3_frame_info_.nChans == 0) - { - ESP_LOGW(TAG, "Invalid frame info: rate=%d, channels=%d, skipping", - mp3_frame_info_.samprate, mp3_frame_info_.nChans); + if (mp3_frame_info_.samprate == 0 || mp3_frame_info_.nChans == 0) { + ESP_LOGW(TAG, "Invalid frame info: rate=%d, channels=%d, skipping", + mp3_frame_info_.samprate, mp3_frame_info_.nChans); continue; } - + // 计算当前帧的持续时间(毫秒) - int frame_duration_ms = (mp3_frame_info_.outputSamps * 1000) / - (mp3_frame_info_.samprate * mp3_frame_info_.nChans); - + int frame_duration_ms = (mp3_frame_info_.outputSamps * 1000) / + (mp3_frame_info_.samprate * mp3_frame_info_.nChans); + // 更新当前播放时间 current_play_time_ms_ += frame_duration_ms; - - ESP_LOGD(TAG, "Frame %d: time=%lldms, duration=%dms, rate=%d, ch=%d", - total_frames_decoded_, current_play_time_ms_, frame_duration_ms, - mp3_frame_info_.samprate, mp3_frame_info_.nChans); - + + ESP_LOGD(TAG, "Frame %d: time=%lldms, duration=%dms, rate=%d, ch=%d", + total_frames_decoded_, current_play_time_ms_, frame_duration_ms, + mp3_frame_info_.samprate, mp3_frame_info_.nChans); + // 更新歌词显示 int buffer_latency_ms = 600; // 实测调整值 UpdateLyricDisplay(current_play_time_ms_ + buffer_latency_ms); - + // 将PCM数据发送到Application的音频解码队列 - if (mp3_frame_info_.outputSamps > 0) - { - int16_t *final_pcm_data = pcm_buffer; + if (mp3_frame_info_.outputSamps > 0) { + int16_t* final_pcm_data = pcm_buffer; int final_sample_count = mp3_frame_info_.outputSamps; std::vector mono_buffer; - + // 如果是双通道,转换为单通道混合 - if (mp3_frame_info_.nChans == 2) - { + if (mp3_frame_info_.nChans == 2) { // 双通道转单通道:将左右声道混合 - int stereo_samples = mp3_frame_info_.outputSamps; // 包含左右声道的总样本数 - int mono_samples = stereo_samples / 2; // 实际的单声道样本数 - + int stereo_samples = mp3_frame_info_.outputSamps; // 包含左右声道的总样本数 + int mono_samples = stereo_samples / 2; // 实际的单声道样本数 + mono_buffer.resize(mono_samples); - - for (int i = 0; i < mono_samples; ++i) - { + + for (int i = 0; i < mono_samples; ++i) { // 混合左右声道 (L + R) / 2 int left = pcm_buffer[i * 2]; // 左声道 int right = pcm_buffer[i * 2 + 1]; // 右声道 mono_buffer[i] = (int16_t)((left + right) / 2); } - + final_pcm_data = mono_buffer.data(); final_sample_count = mono_samples; - ESP_LOGD(TAG, "Converted stereo to mono: %d -> %d samples", - stereo_samples, mono_samples); - } - else if (mp3_frame_info_.nChans == 1) - { + ESP_LOGD(TAG, "Converted stereo to mono: %d -> %d samples", + stereo_samples, mono_samples); + } else if (mp3_frame_info_.nChans == 1) { // 已经是单声道,无需转换 ESP_LOGD(TAG, "Already mono audio: %d samples", final_sample_count); + } else { + ESP_LOGW(TAG, "Unsupported channel count: %d, treating as mono", + mp3_frame_info_.nChans); } - else - { - ESP_LOGW(TAG, "Unsupported channel count: %d, treating as mono", - mp3_frame_info_.nChans); - } - + // 创建AudioStreamPacket AudioStreamPacket packet; packet.sample_rate = mp3_frame_info_.samprate; - packet.frame_duration = 60; // 使用Application默认的帧时长 + packet.frame_duration = 60; // 使用Application默认的帧时长 packet.timestamp = 0; - + // 将int16_t PCM数据转换为uint8_t字节数组 size_t pcm_size_bytes = final_sample_count * sizeof(int16_t); packet.payload.resize(pcm_size_bytes); memcpy(packet.payload.data(), final_pcm_data, pcm_size_bytes); - if (final_pcm_data_fft != nullptr) - { - heap_caps_free(final_pcm_data_fft); + if (final_pcm_data_fft == nullptr) { + final_pcm_data_fft = (int16_t*)heap_caps_malloc( + final_sample_count * sizeof(int16_t), + MALLOC_CAP_SPIRAM + ); } - final_pcm_data_fft = (int16_t *)heap_caps_malloc( - final_sample_count * sizeof(int16_t), - MALLOC_CAP_SPIRAM); - - ESP_LOGD(TAG, "Sending %d PCM samples (%d bytes, rate=%d, channels=%d->1) to Application", - final_sample_count, pcm_size_bytes, mp3_frame_info_.samprate, mp3_frame_info_.nChans); - + + memcpy( + final_pcm_data_fft, + final_pcm_data, + final_sample_count * sizeof(int16_t) + ); + + ESP_LOGD(TAG, "Sending %d PCM samples (%d bytes, rate=%d, channels=%d->1) to Application", + final_sample_count, pcm_size_bytes, mp3_frame_info_.samprate, mp3_frame_info_.nChans); + // 发送到Application的音频解码队列 app.AddAudioData(std::move(packet)); total_played += pcm_size_bytes; - + // 打印播放进度 - if (total_played % (128 * 1024) == 0) - { + if (total_played % (128 * 1024) == 0) { ESP_LOGI(TAG, "Played %d bytes, buffer size: %d", total_played, buffer_size_); } } - } - else - { + + } else { // 解码失败 ESP_LOGW(TAG, "MP3 decode failed with error: %d", decode_result); - + // 跳过一些字节继续尝试 - if (bytes_left > 1) - { + if (bytes_left > 1) { read_ptr++; bytes_left--; - } - else - { + } else { bytes_left = 0; } } } - + // 清理 - if (mp3_input_buffer) - { + if (mp3_input_buffer) { heap_caps_free(mp3_input_buffer); } - + // 播放结束时进行基本清理,但不调用StopStreaming避免线程自我等待 ESP_LOGI(TAG, "Audio stream playback finished, total played: %d bytes", total_played); ESP_LOGI(TAG, "Performing basic cleanup from play thread"); - + // 停止播放标志 is_playing_ = false; - + // 只在频谱显示模式下才停止FFT显示 - if (display_mode_ == DISPLAY_MODE_SPECTRUM) - { - auto &board = Board::GetInstance(); + if (display_mode_ == DISPLAY_MODE_SPECTRUM) { + auto& board = Board::GetInstance(); auto display = board.GetDisplay(); - if (display) - { + if (display) { display->stopFft(); ESP_LOGI(TAG, "Stopped FFT display from play thread (spectrum mode)"); } - } - else - { + } else { ESP_LOGI(TAG, "Not in spectrum mode, skipping FFT stop"); } } // 清空音频缓冲区 -void Esp32Music::ClearAudioBuffer() -{ +void Esp32Music::ClearAudioBuffer() { std::lock_guard lock(buffer_mutex_); - - while (!audio_buffer_.empty()) - { + + while (!audio_buffer_.empty()) { AudioChunk chunk = audio_buffer_.front(); audio_buffer_.pop(); - if (chunk.data) - { + if (chunk.data) { heap_caps_free(chunk.data); } } - + buffer_size_ = 0; ESP_LOGI(TAG, "Audio buffer cleared"); } // 初始化MP3解码器 -bool Esp32Music::InitializeMp3Decoder() -{ +bool Esp32Music::InitializeMp3Decoder() { mp3_decoder_ = MP3InitDecoder(); - if (mp3_decoder_ == nullptr) - { + if (mp3_decoder_ == nullptr) { ESP_LOGE(TAG, "Failed to initialize MP3 decoder"); mp3_decoder_initialized_ = false; return false; } - + mp3_decoder_initialized_ = true; ESP_LOGI(TAG, "MP3 decoder initialized successfully"); return true; } // 清理MP3解码器 -void Esp32Music::CleanupMp3Decoder() -{ - if (mp3_decoder_ != nullptr) - { +void Esp32Music::CleanupMp3Decoder() { + if (mp3_decoder_ != nullptr) { MP3FreeDecoder(mp3_decoder_); mp3_decoder_ = nullptr; } @@ -1194,71 +1046,60 @@ void Esp32Music::CleanupMp3Decoder() } // 重置采样率到原始值 -void Esp32Music::ResetSampleRate() -{ - auto &board = Board::GetInstance(); +void Esp32Music::ResetSampleRate() { + auto& board = Board::GetInstance(); auto codec = board.GetAudioCodec(); - if (codec && codec->original_output_sample_rate() > 0 && - codec->output_sample_rate() != codec->original_output_sample_rate()) - { - ESP_LOGI(TAG, "重置采样率:从 %d Hz 重置到原始值 %d Hz", - codec->output_sample_rate(), codec->original_output_sample_rate()); - if (codec->SetOutputSampleRate(-1)) - { // -1 表示重置到原始值 + if (codec && codec->original_output_sample_rate() > 0 && + codec->output_sample_rate() != codec->original_output_sample_rate()) { + ESP_LOGI(TAG, "重置采样率:从 %d Hz 重置到原始值 %d Hz", + codec->output_sample_rate(), codec->original_output_sample_rate()); + if (codec->SetOutputSampleRate(-1)) { // -1 表示重置到原始值 ESP_LOGI(TAG, "成功重置采样率到原始值: %d Hz", codec->output_sample_rate()); - } - else - { + } else { ESP_LOGW(TAG, "无法重置采样率到原始值"); } } } // 跳过MP3文件开头的ID3标签 -size_t Esp32Music::SkipId3Tag(uint8_t *data, size_t size) -{ - if (!data || size < 10) - { +size_t Esp32Music::SkipId3Tag(uint8_t* data, size_t size) { + if (!data || size < 10) { return 0; } - + // 检查ID3v2标签头 "ID3" - if (memcmp(data, "ID3", 3) != 0) - { + if (memcmp(data, "ID3", 3) != 0) { return 0; } - + // 计算标签大小(synchsafe integer格式) uint32_t tag_size = ((uint32_t)(data[6] & 0x7F) << 21) | ((uint32_t)(data[7] & 0x7F) << 14) | - ((uint32_t)(data[8] & 0x7F) << 7) | + ((uint32_t)(data[8] & 0x7F) << 7) | ((uint32_t)(data[9] & 0x7F)); - + // ID3v2头部(10字节) + 标签内容 size_t total_skip = 10 + tag_size; - + // 确保不超过可用数据大小 - if (total_skip > size) - { + if (total_skip > size) { total_skip = size; } - + ESP_LOGI(TAG, "Found ID3v2 tag, skipping %u bytes", (unsigned int)total_skip); return total_skip; } // 下载歌词 -bool Esp32Music::DownloadLyrics(const std::string &lyric_url) -{ +bool Esp32Music::DownloadLyrics(const std::string& lyric_url) { ESP_LOGI(TAG, "Downloading lyrics from: %s", lyric_url.c_str()); - + // 检查URL是否为空 - if (lyric_url.empty()) - { + if (lyric_url.empty()) { ESP_LOGE(TAG, "Lyric URL is empty!"); return false; } - + // 添加重试逻辑 const int max_retries = 3; int retry_count = 0; @@ -1266,347 +1107,295 @@ bool Esp32Music::DownloadLyrics(const std::string &lyric_url) std::string lyric_content; std::string current_url = lyric_url; int redirect_count = 0; - const int max_redirects = 5; // 最多允许5次重定向 - - while (retry_count < max_retries && !success && redirect_count < max_redirects) - { - if (retry_count > 0) - { + const int max_redirects = 5; // 最多允许5次重定向 + + while (retry_count < max_retries && !success && redirect_count < max_redirects) { + if (retry_count > 0) { ESP_LOGI(TAG, "Retrying lyric download (attempt %d of %d)", retry_count + 1, max_retries); // 重试前暂停一下 std::this_thread::sleep_for(std::chrono::milliseconds(500)); } - + // 使用Board提供的HTTP客户端 auto network = Board::GetInstance().GetNetwork(); auto http = network->CreateHttp(0); - if (!http) - { + if (!http) { ESP_LOGE(TAG, "Failed to create HTTP client for lyric download"); retry_count++; continue; } - + // 设置基本请求头 http->SetHeader("User-Agent", "ESP32-Music-Player/1.0"); http->SetHeader("Accept", "text/plain"); - + // 添加ESP32认证头 add_auth_headers(http.get()); - + // 打开GET连接 ESP_LOGI(TAG, "云端由MeowEmbeddedMusicServer喵波音律嵌入式提供"); ESP_LOGI(TAG, "喵波音律QQ交流群:865754861"); - if (!http->Open("GET", current_url)) - { + if (!http->Open("GET", current_url)) { ESP_LOGE(TAG, "Failed to open HTTP connection for lyrics"); // 移除delete http; 因为unique_ptr会自动管理内存 retry_count++; continue; } - + // 检查HTTP状态码 int status_code = http->GetStatusCode(); ESP_LOGI(TAG, "Lyric download HTTP status code: %d", status_code); - + // 处理重定向 - 由于Http类没有GetHeader方法,我们只能根据状态码判断 - if (status_code == 301 || status_code == 302 || status_code == 303 || status_code == 307 || status_code == 308) - { + if (status_code == 301 || status_code == 302 || status_code == 303 || status_code == 307 || status_code == 308) { // 由于无法获取Location头,只能报告重定向但无法继续 ESP_LOGW(TAG, "Received redirect status %d but cannot follow redirect (no GetHeader method)", status_code); http->Close(); retry_count++; continue; } - + // 非200系列状态码视为错误 - if (status_code < 200 || status_code >= 300) - { + if (status_code < 200 || status_code >= 300) { ESP_LOGE(TAG, "HTTP GET failed with status code: %d", status_code); http->Close(); retry_count++; continue; } - + // 读取响应 lyric_content.clear(); char buffer[1024]; int bytes_read; bool read_error = false; int total_read = 0; - + // 由于无法获取Content-Length和Content-Type头,我们不知道预期大小和内容类型 ESP_LOGD(TAG, "Starting to read lyric content"); - - while (true) - { + + while (true) { bytes_read = http->Read(buffer, sizeof(buffer) - 1); // ESP_LOGD(TAG, "Lyric HTTP read returned %d bytes", bytes_read); // 注释掉以减少日志输出 - - if (bytes_read > 0) - { + + if (bytes_read > 0) { buffer[bytes_read] = '\0'; lyric_content += buffer; total_read += bytes_read; - + // 定期打印下载进度 - 改为DEBUG级别减少输出 - if (total_read % 4096 == 0) - { + if (total_read % 4096 == 0) { ESP_LOGD(TAG, "Downloaded %d bytes so far", total_read); } - } - else if (bytes_read == 0) - { + } else if (bytes_read == 0) { // 正常结束,没有更多数据 ESP_LOGD(TAG, "Lyric download completed, total bytes: %d", total_read); success = true; break; - } - else - { + } else { // bytes_read < 0,可能是ESP-IDF的已知问题 // 如果已经读取到了一些数据,则认为下载成功 - if (!lyric_content.empty()) - { + if (!lyric_content.empty()) { ESP_LOGW(TAG, "HTTP read returned %d, but we have data (%d bytes), continuing", bytes_read, lyric_content.length()); success = true; break; - } - else - { + } else { ESP_LOGE(TAG, "Failed to read lyric data: error code %d", bytes_read); read_error = true; break; } } } - + http->Close(); - - if (read_error) - { + + if (read_error) { retry_count++; continue; } - + // 如果成功读取数据,跳出重试循环 - if (success) - { + if (success) { break; } } - + // 检查是否超过了最大重试次数 - if (retry_count >= max_retries) - { + if (retry_count >= max_retries) { ESP_LOGE(TAG, "Failed to download lyrics after %d attempts", max_retries); return false; } - + // 记录前几个字节的数据,帮助调试 - if (!lyric_content.empty()) - { + if (!lyric_content.empty()) { size_t preview_size = std::min(lyric_content.size(), size_t(50)); std::string preview = lyric_content.substr(0, preview_size); ESP_LOGD(TAG, "Lyric content preview (%d bytes): %s", lyric_content.length(), preview.c_str()); - } - else - { + } else { ESP_LOGE(TAG, "Failed to download lyrics or lyrics are empty"); return false; } - + ESP_LOGI(TAG, "Lyrics downloaded successfully, size: %d bytes", lyric_content.length()); return ParseLyrics(lyric_content); } // 解析歌词 -bool Esp32Music::ParseLyrics(const std::string &lyric_content) -{ +bool Esp32Music::ParseLyrics(const std::string& lyric_content) { ESP_LOGI(TAG, "Parsing lyrics content"); - + // 使用锁保护lyrics_数组访问 std::lock_guard lock(lyrics_mutex_); - + lyrics_.clear(); - + // 按行分割歌词内容 std::istringstream stream(lyric_content); std::string line; - - while (std::getline(stream, line)) - { + + while (std::getline(stream, line)) { // 去除行尾的回车符 - if (!line.empty() && line.back() == '\r') - { + if (!line.empty() && line.back() == '\r') { line.pop_back(); } - + // 跳过空行 - if (line.empty()) - { + if (line.empty()) { continue; } - + // 解析LRC格式: [mm:ss.xx]歌词文本 - if (line.length() > 10 && line[0] == '[') - { + if (line.length() > 10 && line[0] == '[') { size_t close_bracket = line.find(']'); - if (close_bracket != std::string::npos) - { + if (close_bracket != std::string::npos) { std::string tag_or_time = line.substr(1, close_bracket - 1); std::string content = line.substr(close_bracket + 1); - + // 检查是否是元数据标签而不是时间戳 // 元数据标签通常是 [ti:标题], [ar:艺术家], [al:专辑] 等 size_t colon_pos = tag_or_time.find(':'); - if (colon_pos != std::string::npos) - { + if (colon_pos != std::string::npos) { std::string left_part = tag_or_time.substr(0, colon_pos); - + // 检查冒号左边是否是时间(数字) bool is_time_format = true; - for (char c : left_part) - { - if (!isdigit(c)) - { + for (char c : left_part) { + if (!isdigit(c)) { is_time_format = false; break; } } - + // 如果不是时间格式,跳过这一行(元数据标签) - if (!is_time_format) - { + if (!is_time_format) { // 可以在这里处理元数据,例如提取标题、艺术家等信息 ESP_LOGD(TAG, "Skipping metadata tag: [%s]", tag_or_time.c_str()); continue; } - + // 是时间格式,解析时间戳 - try - { + try { int minutes = std::stoi(tag_or_time.substr(0, colon_pos)); float seconds = std::stof(tag_or_time.substr(colon_pos + 1)); int timestamp_ms = minutes * 60 * 1000 + (int)(seconds * 1000); - + // 安全处理歌词文本,确保UTF-8编码正确 std::string safe_lyric_text; - if (!content.empty()) - { + if (!content.empty()) { // 创建安全副本并验证字符串 safe_lyric_text = content; // 确保字符串以null结尾 safe_lyric_text.shrink_to_fit(); } - + lyrics_.push_back(std::make_pair(timestamp_ms, safe_lyric_text)); - - if (!safe_lyric_text.empty()) - { + + if (!safe_lyric_text.empty()) { // 限制日志输出长度,避免中文字符截断问题 size_t log_len = std::min(safe_lyric_text.length(), size_t(50)); std::string log_text = safe_lyric_text.substr(0, log_len); ESP_LOGD(TAG, "Parsed lyric: [%d ms] %s", timestamp_ms, log_text.c_str()); - } - else - { + } else { ESP_LOGD(TAG, "Parsed lyric: [%d ms] (empty)", timestamp_ms); } - } - catch (const std::exception &e) - { + } catch (const std::exception& e) { ESP_LOGW(TAG, "Failed to parse time: %s", tag_or_time.c_str()); } } } } } - + // 按时间戳排序 std::sort(lyrics_.begin(), lyrics_.end()); - + ESP_LOGI(TAG, "Parsed %d lyric lines", lyrics_.size()); return !lyrics_.empty(); } // 歌词显示线程 -void Esp32Music::LyricDisplayThread() -{ +void Esp32Music::LyricDisplayThread() { ESP_LOGI(TAG, "Lyric display thread started"); - - if (!DownloadLyrics(current_lyric_url_)) - { + + if (!DownloadLyrics(current_lyric_url_)) { ESP_LOGE(TAG, "Failed to download or parse lyrics"); is_lyric_running_ = false; return; } - + // 定期检查是否需要更新显示(频率可以降低) - while (is_lyric_running_ && is_playing_) - { + while (is_lyric_running_ && is_playing_) { std::this_thread::sleep_for(std::chrono::milliseconds(50)); } - + ESP_LOGI(TAG, "Lyric display thread finished"); } -void Esp32Music::UpdateLyricDisplay(int64_t current_time_ms) -{ +void Esp32Music::UpdateLyricDisplay(int64_t current_time_ms) { std::lock_guard lock(lyrics_mutex_); - - if (lyrics_.empty()) - { + + if (lyrics_.empty()) { return; } - + // 查找当前应该显示的歌词 int new_lyric_index = -1; - + // 从当前歌词索引开始查找,提高效率 int start_index = (current_lyric_index_.load() >= 0) ? current_lyric_index_.load() : 0; - + // 正向查找:找到最后一个时间戳小于等于当前时间的歌词 - for (int i = start_index; i < (int)lyrics_.size(); i++) - { - if (lyrics_[i].first <= current_time_ms) - { + for (int i = start_index; i < (int)lyrics_.size(); i++) { + if (lyrics_[i].first <= current_time_ms) { new_lyric_index = i; - } - else - { - break; // 时间戳已超过当前时间 + } else { + break; // 时间戳已超过当前时间 } } - + // 如果没有找到(可能当前时间比第一句歌词还早),显示空 - if (new_lyric_index == -1) - { + if (new_lyric_index == -1) { new_lyric_index = -1; } - + // 如果歌词索引发生变化,更新显示 - if (new_lyric_index != current_lyric_index_) - { + if (new_lyric_index != current_lyric_index_) { current_lyric_index_ = new_lyric_index; - - auto &board = Board::GetInstance(); + + auto& board = Board::GetInstance(); auto display = board.GetDisplay(); - if (display) - { + if (display) { std::string lyric_text; - - if (current_lyric_index_ >= 0 && current_lyric_index_ < (int)lyrics_.size()) - { + + if (current_lyric_index_ >= 0 && current_lyric_index_ < (int)lyrics_.size()) { lyric_text = lyrics_[current_lyric_index_].second; } - + // 显示歌词 display->SetChatMessage("lyric", lyric_text.c_str()); - - ESP_LOGD(TAG, "Lyric update at %lldms: %s", - current_time_ms, - lyric_text.empty() ? "(no lyric)" : lyric_text.c_str()); + + ESP_LOGD(TAG, "Lyric update at %lldms: %s", + current_time_ms, + lyric_text.empty() ? "(no lyric)" : lyric_text.c_str()); } } } @@ -1618,7 +1407,7 @@ void Esp32Music::UpdateLyricDisplay(int64_t current_time_ms) /** * @brief 添加认证头到HTTP请求 * @param http_client HTTP客户端指针 - * + * * 添加的认证头包括: * - X-MAC-Address: 设备MAC地址 * - X-Chip-ID: 设备芯片ID @@ -1630,12 +1419,11 @@ void Esp32Music::UpdateLyricDisplay(int64_t current_time_ms) // 删除复杂的认证验证和配置方法,使用简单的静态函数 // 显示模式控制方法实现 -void Esp32Music::SetDisplayMode(DisplayMode mode) -{ +void Esp32Music::SetDisplayMode(DisplayMode mode) { DisplayMode old_mode = display_mode_.load(); display_mode_ = mode; - - ESP_LOGI(TAG, "Display mode changed from %s to %s", - (old_mode == DISPLAY_MODE_SPECTRUM) ? "SPECTRUM" : "LYRICS", - (mode == DISPLAY_MODE_SPECTRUM) ? "SPECTRUM" : "LYRICS"); + + ESP_LOGI(TAG, "Display mode changed from %s to %s", + (old_mode == DISPLAY_MODE_SPECTRUM) ? "SPECTRUM" : "LYRICS", + (mode == DISPLAY_MODE_SPECTRUM) ? "SPECTRUM" : "LYRICS"); } \ No newline at end of file diff --git a/main/boards/common/esp32_music.h b/main/boards/common/esp32_music.h index 5c1afe9..d51c392 100644 --- a/main/boards/common/esp32_music.h +++ b/main/boards/common/esp32_music.h @@ -38,6 +38,7 @@ private: std::string current_music_url_; std::string current_song_name_; bool song_name_displayed_; + std::atomic stop_flag_{false}; // 停止播放标志位 // 歌词相关 std::string current_lyric_url_; diff --git a/main/boards/common/ml307_board.cc b/main/boards/common/ml307_board.cc index 1bf5e00..63cf09c 100644 --- a/main/boards/common/ml307_board.cc +++ b/main/boards/common/ml307_board.cc @@ -153,7 +153,10 @@ std::string Ml307Board::GetDeviceStatusJson() { } auto display = board.GetDisplay(); if (display && display->height() > 64) { // For LCD display only - cJSON_AddStringToObject(screen, "theme", display->GetTheme().c_str()); + auto theme = display->GetTheme(); + if (theme != nullptr) { + cJSON_AddStringToObject(screen, "theme", theme->name().c_str()); + } } cJSON_AddItemToObject(root, "screen", screen); diff --git a/main/boards/common/wifi_board.cc b/main/boards/common/wifi_board.cc index 18c5173..7b3bf06 100644 --- a/main/boards/common/wifi_board.cc +++ b/main/boards/common/wifi_board.cc @@ -216,7 +216,10 @@ std::string WifiBoard::GetDeviceStatusJson() { } auto display = board.GetDisplay(); if (display && display->height() > 64) { // For LCD display only - cJSON_AddStringToObject(screen, "theme", display->GetTheme().c_str()); + auto theme = display->GetTheme(); + if (theme != nullptr) { + cJSON_AddStringToObject(screen, "theme", theme->name().c_str()); + } } cJSON_AddItemToObject(root, "screen", screen); diff --git a/main/boards/df-k10/df_k10_board.cc b/main/boards/df-k10/df_k10_board.cc index 36ca006..614be11 100644 --- a/main/boards/df-k10/df_k10_board.cc +++ b/main/boards/df-k10/df_k10_board.cc @@ -21,9 +21,6 @@ #define TAG "DF-K10" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class Df_K10Board : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -104,6 +101,7 @@ private: ESP_LOGE(TAG, "Set direction failed: %s", esp_err_to_name(ret)); } } + void InitializeButtons() { instance_ = this; @@ -233,12 +231,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel, true)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } // 物联网初始化,添加对 AI 可见设备 @@ -258,7 +251,7 @@ public: InitializeCamera(); } - virtual Led* GetLed() override { + virtual Led* GetLed() override { return led_strip_; } diff --git a/main/boards/df-k10/k10_audio_codec.cc b/main/boards/df-k10/k10_audio_codec.cc index fce2b7f..5a30948 100644 --- a/main/boards/df-k10/k10_audio_codec.cc +++ b/main/boards/df-k10/k10_audio_codec.cc @@ -41,7 +41,6 @@ K10AudioCodec::K10AudioCodec(void* i2c_master_handle, int input_sample_rate, int const audio_codec_if_t *in_codec_if_ = es7243e_codec_new(&es7243e_cfg); assert(in_codec_if_ != NULL); - esp_codec_dev_cfg_t codec_es7243e_dev_cfg = { .dev_type = ESP_CODEC_DEV_TYPE_IN, .codec_if = in_codec_if_, diff --git a/main/boards/df-s3-ai-cam/df_s3_ai_cam.cc b/main/boards/df-s3-ai-cam/df_s3_ai_cam.cc index 855f055..d85dc53 100644 --- a/main/boards/df-s3-ai-cam/df_s3_ai_cam.cc +++ b/main/boards/df-s3-ai-cam/df_s3_ai_cam.cc @@ -69,6 +69,8 @@ class DfrobotEsp32S3AiCam : public WifiBoard { InitializeCamera(); } + // Wakenet model only + virtual Led* GetLed() override { static GpioLed led(BUILTIN_LED_GPIO, 0); return &led; diff --git a/main/boards/doit-s3-aibox/doit_s3_aibox.cc b/main/boards/doit-s3-aibox/doit_s3_aibox.cc index 04da3ba..54fd9df 100644 --- a/main/boards/doit-s3-aibox/doit_s3_aibox.cc +++ b/main/boards/doit-s3-aibox/doit_s3_aibox.cc @@ -99,7 +99,6 @@ private: }); } - void InitializeGpio(gpio_num_t gpio_num_) { gpio_config_t config = { .pin_bit_mask = (1ULL << gpio_num_), diff --git a/main/boards/du-chatx/du-chatx-wifi.cc b/main/boards/du-chatx/du-chatx-wifi.cc index a1f2e16..d9eea67 100644 --- a/main/boards/du-chatx/du-chatx-wifi.cc +++ b/main/boards/du-chatx/du-chatx-wifi.cc @@ -19,9 +19,6 @@ #define TAG "DuChatX" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class DuChatX : public WifiBoard { private: Button boot_button_; @@ -101,12 +98,7 @@ private: esp_lcd_panel_invert_color(panel_, DISPLAY_INVERT_COLOR); esp_lcd_panel_swap_xy(panel_, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel_, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); - display_ = new SpiLcdDisplay(panel_io, panel_,DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y,DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - }); + display_ = new SpiLcdDisplay(panel_io, panel_,DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y,DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/echoear/EchoEar.cc b/main/boards/echoear/EchoEar.cc index 6c417a0..fdc588b 100644 --- a/main/boards/echoear/EchoEar.cc +++ b/main/boards/echoear/EchoEar.cc @@ -28,8 +28,6 @@ #define USE_LVGL_DEFAULT 0 -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); temperature_sensor_handle_t temp_sensor = NULL; static const st77916_lcd_init_cmd_t vendor_specific_init_yysj[] = { {0xF0, (uint8_t []){0x28}, 1, 0}, @@ -562,11 +560,7 @@ private: #if USE_LVGL_DEFAULT display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); #else display_ = new anim::EmoteDisplay(panel, panel_io); #endif diff --git a/main/boards/electron-bot/config.json b/main/boards/electron-bot/config.json index b23b6bf..08fc341 100644 --- a/main/boards/electron-bot/config.json +++ b/main/boards/electron-bot/config.json @@ -4,6 +4,7 @@ { "name": "electron-bot", "sdkconfig_append": [ + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/16m.csv\"" ] } ] diff --git a/main/boards/electron-bot/electron_bot.cc b/main/boards/electron-bot/electron_bot.cc index 70fd2a9..8b733fc 100644 --- a/main/boards/electron-bot/electron_bot.cc +++ b/main/boards/electron-bot/electron_bot.cc @@ -24,9 +24,6 @@ // 控制器初始化函数声明 void InitializeElectronBotController(); -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class ElectronBot : public WifiBoard { private: Display* display_; @@ -73,12 +70,7 @@ private: display_ = new ElectronEmojiDisplay(io_handle, panel_handle, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, - DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/electron-bot/electron_emoji_display.cc b/main/boards/electron-bot/electron_emoji_display.cc index e72cc16..01b16f6 100644 --- a/main/boards/electron-bot/electron_emoji_display.cc +++ b/main/boards/electron-bot/electron_emoji_display.cc @@ -1,4 +1,5 @@ #include "electron_emoji_display.h" +#include "lvgl_theme.h" #include #include @@ -7,7 +8,6 @@ #include #include - #define TAG "ElectronEmojiDisplay" // 表情映射表 - 将多种表情映射到现有6个GIF @@ -51,9 +51,8 @@ const ElectronEmojiDisplay::EmotionMap ElectronEmojiDisplay::emotion_maps_[] = { ElectronEmojiDisplay::ElectronEmojiDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, - bool swap_xy, DisplayFonts fonts) - : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - fonts), + bool swap_xy) + : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy), emotion_gif_(nullptr) { SetupGifContainer(); } @@ -61,8 +60,8 @@ ElectronEmojiDisplay::ElectronEmojiDisplay(esp_lcd_panel_io_handle_t panel_io, void ElectronEmojiDisplay::SetupGifContainer() { DisplayLockGuard lock(this); - if (emotion_label_) { - lv_obj_del(emotion_label_); + if (emoji_label_) { + lv_obj_del(emoji_label_); } if (chat_message_label_) { lv_obj_del(chat_message_label_); @@ -79,11 +78,11 @@ void ElectronEmojiDisplay::SetupGifContainer() { lv_obj_set_flex_grow(content_, 1); lv_obj_center(content_); - emotion_label_ = lv_label_create(content_); - lv_label_set_text(emotion_label_, ""); - lv_obj_set_width(emotion_label_, 0); - lv_obj_set_style_border_width(emotion_label_, 0, 0); - lv_obj_add_flag(emotion_label_, LV_OBJ_FLAG_HIDDEN); + emoji_label_ = lv_label_create(content_); + lv_label_set_text(emoji_label_, ""); + lv_obj_set_width(emoji_label_, 0); + lv_obj_set_style_border_width(emoji_label_, 0, 0); + lv_obj_add_flag(emoji_label_, LV_OBJ_FLAG_HIDDEN); emotion_gif_ = lv_gif_create(content_); int gif_size = LV_HOR_RES; @@ -107,7 +106,11 @@ void ElectronEmojiDisplay::SetupGifContainer() { lv_obj_align(chat_message_label_, LV_ALIGN_BOTTOM_MID, 0, 0); - LcdDisplay::SetTheme("dark"); + auto& theme_manager = LvglThemeManager::GetInstance(); + auto theme = theme_manager.GetTheme("dark"); + if (theme != nullptr) { + LcdDisplay::SetTheme(theme); + } } void ElectronEmojiDisplay::SetEmotion(const char* emotion) { @@ -144,27 +147,4 @@ void ElectronEmojiDisplay::SetChatMessage(const char* role, const char* content) lv_obj_remove_flag(chat_message_label_, LV_OBJ_FLAG_HIDDEN); ESP_LOGI(TAG, "设置聊天消息 [%s]: %s", role, content); -} - -void ElectronEmojiDisplay::SetIcon(const char* icon) { - if (!icon) { - return; - } - - DisplayLockGuard lock(this); - - if (chat_message_label_ != nullptr) { - std::string icon_message = std::string(icon) + " "; - - if (strcmp(icon, FONT_AWESOME_DOWNLOAD) == 0) { - icon_message += "正在升级..."; - } else { - icon_message += "系统状态"; - } - - lv_label_set_text(chat_message_label_, icon_message.c_str()); - lv_obj_remove_flag(chat_message_label_, LV_OBJ_FLAG_HIDDEN); - - ESP_LOGI(TAG, "设置图标: %s", icon); - } } \ No newline at end of file diff --git a/main/boards/electron-bot/electron_emoji_display.h b/main/boards/electron-bot/electron_emoji_display.h index b88d5ed..cdbb758 100644 --- a/main/boards/electron-bot/electron_emoji_display.h +++ b/main/boards/electron-bot/electron_emoji_display.h @@ -23,7 +23,7 @@ public: */ ElectronEmojiDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, - bool mirror_y, bool swap_xy, DisplayFonts fonts); + bool mirror_y, bool swap_xy); virtual ~ElectronEmojiDisplay() = default; @@ -33,9 +33,6 @@ public: // 重写聊天消息设置方法 virtual void SetChatMessage(const char* role, const char* content) override; - // 重写图标设置方法 - virtual void SetIcon(const char* icon) override; - private: void SetupGifContainer(); diff --git a/main/boards/electron-bot/movements.cc b/main/boards/electron-bot/movements.cc index a2888e4..090732f 100644 --- a/main/boards/electron-bot/movements.cc +++ b/main/boards/electron-bot/movements.cc @@ -5,8 +5,6 @@ #include "oscillator.h" -static const char* TAG = "Movements"; - Otto::Otto() { is_otto_resting_ = false; for (int i = 0; i < SERVO_COUNT; i++) { diff --git a/main/boards/electron-bot/oscillator.cc b/main/boards/electron-bot/oscillator.cc index adca7ac..0cfc652 100644 --- a/main/boards/electron-bot/oscillator.cc +++ b/main/boards/electron-bot/oscillator.cc @@ -6,12 +6,8 @@ #include #include -static const char* TAG = "Oscillator"; - extern unsigned long IRAM_ATTR millis(); -static ledc_channel_t next_free_channel = LEDC_CHANNEL_0; - Oscillator::Oscillator(int trim) { trim_ = trim; diff_limit_ = 0; diff --git a/main/boards/esp-box-3/esp_box3_board.cc b/main/boards/esp-box-3/esp_box3_board.cc index 8878666..47f964f 100644 --- a/main/boards/esp-box-3/esp_box3_board.cc +++ b/main/boards/esp-box-3/esp_box3_board.cc @@ -14,9 +14,6 @@ #define TAG "EspBox3Board" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - // Init ili9341 by custom cmd static const ili9341_lcd_init_cmd_t vendor_specific_init[] = { {0xC8, (uint8_t []){0xFF, 0x93, 0x42}, 3, 0}, @@ -129,16 +126,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); esp_lcd_panel_disp_on_off(panel, true); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/esp-box-lite/config.json b/main/boards/esp-box-lite/config.json index a300437..870fabe 100644 --- a/main/boards/esp-box-lite/config.json +++ b/main/boards/esp-box-lite/config.json @@ -3,7 +3,9 @@ "builds": [ { "name": "esp-box-lite", - "sdkconfig_append": ["CONFIG_SOC_ADC_SUPPORTED=y"] + "sdkconfig_append": [ + "CONFIG_SOC_ADC_SUPPORTED=y" + ] } ] } \ No newline at end of file diff --git a/main/boards/esp-box-lite/esp_box_lite_board.cc b/main/boards/esp-box-lite/esp_box_lite_board.cc index 2f4cc87..ca7dd6a 100644 --- a/main/boards/esp-box-lite/esp_box_lite_board.cc +++ b/main/boards/esp-box-lite/esp_box_lite_board.cc @@ -16,9 +16,6 @@ #define TAG "EspBoxBoardLite" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - /* ADC Buttons */ typedef enum { BSP_ADC_BUTTON_PREV, @@ -191,16 +188,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); esp_lcd_panel_disp_on_off(panel, true); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/esp-box/esp_box_board.cc b/main/boards/esp-box/esp_box_board.cc index 9676ef9..4dcbca8 100644 --- a/main/boards/esp-box/esp_box_board.cc +++ b/main/boards/esp-box/esp_box_board.cc @@ -14,9 +14,6 @@ #define TAG "EspBoxBoard" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - // Init ili9341 by custom cmd static const ili9341_lcd_init_cmd_t vendor_specific_init[] = { {0xC8, (uint8_t []){0xFF, 0x93, 0x42}, 3, 0}, @@ -129,16 +126,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); esp_lcd_panel_disp_on_off(panel, true); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/esp-s3-lcd-ev-board-2/esp-s3-lcd-ev-board-2.cc b/main/boards/esp-s3-lcd-ev-board-2/esp-s3-lcd-ev-board-2.cc index af3e553..8dc6585 100644 --- a/main/boards/esp-s3-lcd-ev-board-2/esp-s3-lcd-ev-board-2.cc +++ b/main/boards/esp-s3-lcd-ev-board-2/esp-s3-lcd-ev-board-2.cc @@ -22,9 +22,6 @@ #define TAG "ESP_S3_LCD_EV_Board_2" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class ESP_S3_LCD_EV_Board_2 : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -63,7 +60,6 @@ private: int espok = esp_lcd_new_panel_io_3wire_spi(&io_config, &panel_io); ESP_LOGI(TAG, "Install 3-wire SPI panel IO:%d",espok); - ESP_LOGI(TAG, "Install RGB LCD panel driver"); esp_lcd_panel_handle_t panel_handle = NULL; esp_lcd_rgb_panel_config_t rgb_config = { @@ -126,13 +122,9 @@ private: display_ = new RgbLcdDisplay(panel_io, panel_handle, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, - DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } + void InitializeCodecI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { @@ -211,8 +203,6 @@ public: InitializeTouch(); } - - //es7210用作音频采集 virtual AudioCodec* GetAudioCodec() override { static BoxAudioCodec audio_codec( i2c_bus_, @@ -230,8 +220,6 @@ public: return &audio_codec; } - - virtual Display* GetDisplay() override { return display_; } @@ -242,7 +230,6 @@ public: return &led; } - }; DECLARE_BOARD(ESP_S3_LCD_EV_Board_2); diff --git a/main/boards/esp-s3-lcd-ev-board/esp-s3-lcd-ev-board.cc b/main/boards/esp-s3-lcd-ev-board/esp-s3-lcd-ev-board.cc index 1816439..990a3e3 100644 --- a/main/boards/esp-s3-lcd-ev-board/esp-s3-lcd-ev-board.cc +++ b/main/boards/esp-s3-lcd-ev-board/esp-s3-lcd-ev-board.cc @@ -20,9 +20,6 @@ #define TAG "ESP_S3_LCD_EV_Board" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class ESP_S3_LCD_EV_Board : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -62,7 +59,6 @@ private: int espok = esp_lcd_new_panel_io_3wire_spi(&io_config, &panel_io); ESP_LOGI(TAG, "Install 3-wire SPI panel IO:%d",espok); - ESP_LOGI(TAG, "Install RGB LCD panel driver"); esp_lcd_panel_handle_t panel_handle = NULL; esp_lcd_rgb_panel_config_t rgb_config = { @@ -126,13 +122,9 @@ private: display_ = new RgbLcdDisplay(panel_io, panel_handle, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, - DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } + void InitializeCodecI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { @@ -180,8 +172,6 @@ public: InitializeRGB_GC9503V_Display(); } - - //es7210用作音频采集 virtual AudioCodec* GetAudioCodec() override { static BoxAudioCodec audio_codec( codec_i2c_bus_, @@ -199,8 +189,6 @@ public: return &audio_codec; } - - virtual Display* GetDisplay() override { return display_; } @@ -211,7 +199,6 @@ public: return &led; } - }; DECLARE_BOARD(ESP_S3_LCD_EV_Board); diff --git a/main/boards/esp-sparkbot/esp_sparkbot_board.cc b/main/boards/esp-sparkbot/esp_sparkbot_board.cc index 6588019..2c76036 100644 --- a/main/boards/esp-sparkbot/esp_sparkbot_board.cc +++ b/main/boards/esp-sparkbot/esp_sparkbot_board.cc @@ -19,9 +19,6 @@ #define TAG "esp_sparkbot" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class SparkBotEs8311AudioCodec : public Es8311AudioCodec { private: @@ -120,12 +117,7 @@ private: esp_lcd_panel_invert_color(panel, true); esp_lcd_panel_disp_on_off(panel, true); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeCamera() { diff --git a/main/boards/esp32-cgc-144/esp32_cgc_144_board.cc b/main/boards/esp32-cgc-144/esp32_cgc_144_board.cc index f3b50d0..25963c0 100644 --- a/main/boards/esp32-cgc-144/esp32_cgc_144_board.cc +++ b/main/boards/esp32-cgc-144/esp32_cgc_144_board.cc @@ -26,12 +26,8 @@ #include "power_manager.h" #endif - #define TAG "ESP32_CGC_144" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - class ESP32_CGC_144 : public WifiBoard { private: Button boot_button_; @@ -80,7 +76,6 @@ void InitializePowerManager() { power_save_timer_->SetEnabled(true); } - void InitializeSpi() { spi_bus_config_t buscfg = {}; buscfg.mosi_io_num = DISPLAY_MOSI_PIN; @@ -122,19 +117,10 @@ void InitializePowerManager() { esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_14_1, - .icon_font = &font_awesome_14_1, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } - - - void InitializeButtons() { - boot_button_.OnClick([this]() { power_save_timer_->WakeUp(); auto& app = Application::GetInstance(); @@ -149,7 +135,6 @@ void InitializePowerManager() { std::string wake_word="你好小智"; Application::GetInstance().WakeWordInvoke(wake_word); }); - } // 物联网初始化,添加对 AI 可见设备 @@ -169,8 +154,7 @@ public: GetBacklight()->RestoreBrightness(); } - virtual AudioCodec* GetAudioCodec() override - { + virtual AudioCodec* GetAudioCodec() override { static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); return &audio_codec; diff --git a/main/boards/esp32-cgc/esp32_cgc_board.cc b/main/boards/esp32-cgc/esp32_cgc_board.cc index 12f7e6a..6b82b01 100644 --- a/main/boards/esp32-cgc/esp32_cgc_board.cc +++ b/main/boards/esp32-cgc/esp32_cgc_board.cc @@ -60,9 +60,6 @@ static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = { #define TAG "ESP32_CGC" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - class ESP32_CGC : public WifiBoard { private: Button boot_button_; @@ -114,7 +111,6 @@ private: #endif esp_lcd_panel_reset(panel); - esp_lcd_panel_init(panel); esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); @@ -124,16 +120,9 @@ private: panel_config.vendor_config = &gc9107_vendor_config; #endif display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_14_1, - .icon_font = &font_awesome_14_1, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } - - void InitializeButtons() { boot_button_.OnClick([this]() { diff --git a/main/boards/esp32-s3-touch-amoled-1.8/esp32-s3-touch-amoled-1.8.cc b/main/boards/esp32-s3-touch-amoled-1.8/esp32-s3-touch-amoled-1.8.cc index 523abbe..111f61f 100644 --- a/main/boards/esp32-s3-touch-amoled-1.8/esp32-s3-touch-amoled-1.8.cc +++ b/main/boards/esp32-s3-touch-amoled-1.8/esp32-s3-touch-amoled-1.8.cc @@ -26,9 +26,6 @@ #define TAG "WaveshareEsp32s3TouchAMOLED1inch8" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class Pmic : public Axp2101 { public: Pmic(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : Axp2101(i2c_bus, addr) { @@ -86,16 +83,7 @@ public: bool mirror_y, bool swap_xy) : SpiLcdDisplay(io_handle, panel_handle, - width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }) { + width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); lv_obj_set_style_pad_left(status_bar_, LV_HOR_RES * 0.1, 0); lv_obj_set_style_pad_right(status_bar_, LV_HOR_RES * 0.1, 0); diff --git a/main/boards/esp32-s3-touch-lcd-1.46/esp32-s3-touch-lcd-1.46.cc b/main/boards/esp32-s3-touch-lcd-1.46/esp32-s3-touch-lcd-1.46.cc index f5082e6..90843e6 100644 --- a/main/boards/esp32-s3-touch-lcd-1.46/esp32-s3-touch-lcd-1.46.cc +++ b/main/boards/esp32-s3-touch-lcd-1.46/esp32-s3-touch-lcd-1.46.cc @@ -21,10 +21,6 @@ #define TAG "waveshare_lcd_1_46" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - - // 在waveshare_lcd_1_46类之前添加新的显示类 class CustomLcdDisplay : public SpiLcdDisplay { public: @@ -47,12 +43,7 @@ public: bool mirror_y, bool swap_xy) : SpiLcdDisplay(io_handle, panel_handle, - width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_64_init(), - }) { + width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); lv_display_add_event_cb(display_, rounder_event_cb, LV_EVENT_INVALIDATE_AREA, NULL); } @@ -68,7 +59,6 @@ private: button_driver_t* pwr_btn_driver_ = nullptr; static CustomBoard* instance_; - void InitializeI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { @@ -160,6 +150,7 @@ private: // gpio_set_level(PWR_Control_PIN, false); gpio_set_level(PWR_Control_PIN, true); } + void InitializeButtons() { instance_ = this; InitializeButtonsCustom(); diff --git a/main/boards/esp32-s3-touch-lcd-1.85/esp32-s3-touch-lcd-1.85.cc b/main/boards/esp32-s3-touch-lcd-1.85/esp32-s3-touch-lcd-1.85.cc index fd25247..ecdc7a3 100644 --- a/main/boards/esp32-s3-touch-lcd-1.85/esp32-s3-touch-lcd-1.85.cc +++ b/main/boards/esp32-s3-touch-lcd-1.85/esp32-s3-touch-lcd-1.85.cc @@ -23,9 +23,6 @@ #define LCD_OPCODE_READ_CMD (0x0BULL) #define LCD_OPCODE_WRITE_COLOR (0x32ULL) -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - static const st77916_lcd_init_cmd_t vendor_specific_init_new[] = { {0xF0, (uint8_t []){0x28}, 1, 0}, {0xF2, (uint8_t []){0x28}, 1, 0}, @@ -223,7 +220,6 @@ private: button_driver_t* pwr_btn_driver_ = nullptr; static CustomBoard* instance_; - void InitializeI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { @@ -358,12 +354,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtonsCustom() { diff --git a/main/boards/esp32-s3-touch-lcd-1.85c/esp32-s3-touch-lcd-1.85c.cc b/main/boards/esp32-s3-touch-lcd-1.85c/esp32-s3-touch-lcd-1.85c.cc index 2e23b9d..cf5c172 100644 --- a/main/boards/esp32-s3-touch-lcd-1.85c/esp32-s3-touch-lcd-1.85c.cc +++ b/main/boards/esp32-s3-touch-lcd-1.85c/esp32-s3-touch-lcd-1.85c.cc @@ -23,9 +23,6 @@ #define LCD_OPCODE_READ_CMD (0x0BULL) #define LCD_OPCODE_WRITE_COLOR (0x32ULL) -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - static const st77916_lcd_init_cmd_t vendor_specific_init_new[] = { {0xF0, (uint8_t []){0x28}, 1, 0}, {0xF2, (uint8_t []){0x28}, 1, 0}, @@ -355,12 +352,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/esp32-s3-touch-lcd-3.5/esp32-s3-touch-lcd-3.5.cc b/main/boards/esp32-s3-touch-lcd-3.5/esp32-s3-touch-lcd-3.5.cc index 5983618..c898e46 100644 --- a/main/boards/esp32-s3-touch-lcd-3.5/esp32-s3-touch-lcd-3.5.cc +++ b/main/boards/esp32-s3-touch-lcd-3.5/esp32-s3-touch-lcd-3.5.cc @@ -29,11 +29,6 @@ #define TAG "waveshare_lcd_3_5" - -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - - class Pmic : public Axp2101 { public: Pmic(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : Axp2101(i2c_bus, addr) { @@ -66,7 +61,6 @@ class Pmic : public Axp2101 { } }; - typedef struct { int cmd; /*RestoreBrightness(); } - virtual Led* GetLed() override { static SingleLed led(BUILTIN_LED_GPIO); diff --git a/main/boards/jiuchuan-s3/README.md b/main/boards/jiuchuan-s3/README.md index 4ae7cbd..2b2d755 100644 --- a/main/boards/jiuchuan-s3/README.md +++ b/main/boards/jiuchuan-s3/README.md @@ -13,7 +13,7 @@ 4. 点击 VSCode 右下角提示,生成 [compile_commands.json] 文件; 5. 设置目标设备为 `[esp32s3] -> [JTAG]`; 6. 打开 **SDK Configuration Editor**; -7. 配置自定义分区表路径为:`partitions/v1/16m.csv`; +7. 配置自定义分区表路径为:`partitions/v2/16m.csv`; 8. 设置 **Board Type** 为 **九川科技**; 9. 保存配置并开始编译。 diff --git a/main/boards/jiuchuan-s3/jiuchuan_dev_board.cc b/main/boards/jiuchuan-s3/jiuchuan_dev_board.cc index 94e9b89..f60700f 100644 --- a/main/boards/jiuchuan-s3/jiuchuan_dev_board.cc +++ b/main/boards/jiuchuan-s3/jiuchuan_dev_board.cc @@ -25,9 +25,6 @@ #define BOARD_TAG "JiuchuanDevBoard" #define __USER_GPIO_PWRDOWN__ -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - // 自定义LCD显示器类,用于圆形屏幕适配 class CustomLcdDisplay : public SpiLcdDisplay { @@ -40,9 +37,8 @@ public: int offset_y, bool mirror_x, bool mirror_y, - bool swap_xy, - DisplayFonts fonts) - : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, fonts) + bool swap_xy) + : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); @@ -142,7 +138,6 @@ private: power_save_timer_->SetEnabled(true); } - void InitializeI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { @@ -315,16 +310,7 @@ private: esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new CustomLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/kevin-box-1/kevin_box_board.cc b/main/boards/kevin-box-1/kevin_box_board.cc index c55d3f7..bb2e912 100644 --- a/main/boards/kevin-box-1/kevin_box_board.cc +++ b/main/boards/kevin-box-1/kevin_box_board.cc @@ -16,9 +16,6 @@ #define TAG "KevinBoxBoard" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - class KevinBoxBoard : public Ml307Board { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -115,8 +112,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeCodecI2c() { @@ -188,7 +184,7 @@ public: InitializeButtons(); } - + virtual Led* GetLed() override { static SingleLed led(BUILTIN_LED_GPIO); return &led; diff --git a/main/boards/kevin-box-2/kevin_box_board.cc b/main/boards/kevin-box-2/kevin_box_board.cc index 014e23e..94e7e17 100644 --- a/main/boards/kevin-box-2/kevin_box_board.cc +++ b/main/boards/kevin-box-2/kevin_box_board.cc @@ -18,10 +18,6 @@ #define TAG "KevinBoxBoard" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - class Pmic : public Axp2101 { public: Pmic(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : Axp2101(i2c_bus, addr) { @@ -50,7 +46,6 @@ public: } }; - class KevinBoxBoard : public DualNetworkBoard { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -145,8 +140,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeCodecI2c() { diff --git a/main/boards/kevin-c3/led_strip_control.cc b/main/boards/kevin-c3/led_strip_control.cc index e0d5278..68dc4ae 100644 --- a/main/boards/kevin-c3/led_strip_control.cc +++ b/main/boards/kevin-c3/led_strip_control.cc @@ -5,7 +5,6 @@ #define TAG "LedStripControl" - int LedStripControl::LevelToBrightness(int level) const { if (level < 0) level = 0; if (level > 8) level = 8; diff --git a/main/boards/kevin-sp-v3-dev/kevin-sp-v3_board.cc b/main/boards/kevin-sp-v3-dev/kevin-sp-v3_board.cc index 1f50ba7..5191b5a 100644 --- a/main/boards/kevin-sp-v3-dev/kevin-sp-v3_board.cc +++ b/main/boards/kevin-sp-v3-dev/kevin-sp-v3_board.cc @@ -17,10 +17,6 @@ #define TAG "kevin-sp-v3" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - // class KEVIN_SP_V3Board : public Ml307Board { class KEVIN_SP_V3Board : public WifiBoard { private: @@ -84,12 +80,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel, true)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeCamera() { @@ -135,7 +126,6 @@ public: InitializeCamera(); GetBacklight()->RestoreBrightness(); } - virtual Led* GetLed() override { static SingleLed led(BUILTIN_LED_GPIO); diff --git a/main/boards/kevin-sp-v4-dev/kevin-sp-v4_board.cc b/main/boards/kevin-sp-v4-dev/kevin-sp-v4_board.cc index fb962d7..56ed905 100644 --- a/main/boards/kevin-sp-v4-dev/kevin-sp-v4_board.cc +++ b/main/boards/kevin-sp-v4-dev/kevin-sp-v4_board.cc @@ -15,9 +15,6 @@ #define TAG "kevin-sp-v4" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class KEVIN_SP_V4Board : public WifiBoard { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -25,6 +22,7 @@ private: LcdDisplay* display_; i2c_master_bus_handle_t codec_i2c_bus_; Esp32Camera* camera_; + void InitializeCodecI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { @@ -97,12 +95,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel, true)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeCamera() { @@ -149,7 +142,6 @@ public: InitializeCamera(); GetBacklight()->RestoreBrightness(); } - virtual Led* GetLed() override { static SingleLed led(BUILTIN_LED_GPIO); diff --git a/main/boards/kevin-yuying-313lcd/kevin_yuying_313lcd.cc b/main/boards/kevin-yuying-313lcd/kevin_yuying_313lcd.cc index 7162de2..19f2f06 100644 --- a/main/boards/kevin-yuying-313lcd/kevin_yuying_313lcd.cc +++ b/main/boards/kevin-yuying-313lcd/kevin_yuying_313lcd.cc @@ -17,9 +17,6 @@ #define TAG "Yuying_313lcd" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class Yuying_313lcd : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -103,13 +100,9 @@ private: display_ = new RgbLcdDisplay(panel_io, panel_handle, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, - DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } + void InitializeCodecI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { diff --git a/main/boards/labplus-ledong-v2/labplus_ledong_v2.cc b/main/boards/labplus-ledong-v2/labplus_ledong_v2.cc index d242d08..e1f7d88 100644 --- a/main/boards/labplus-ledong-v2/labplus_ledong_v2.cc +++ b/main/boards/labplus-ledong-v2/labplus_ledong_v2.cc @@ -18,8 +18,6 @@ #define BOARD_STM8_ADDR 17 #define BOARD_STM8_CMD 4 -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); class labplus_ledong_v2 : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -118,16 +116,7 @@ private: esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - #if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), - #else - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - #endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/labplus-mpython-v3/mpython_pro.cc b/main/boards/labplus-mpython-v3/mpython_pro.cc index 293a986..3b9d149 100644 --- a/main/boards/labplus-mpython-v3/mpython_pro.cc +++ b/main/boards/labplus-mpython-v3/mpython_pro.cc @@ -15,8 +15,6 @@ #define TAG "mpython_v3" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); class mpython_v3 : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -98,16 +96,7 @@ private: esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - #if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), - #else - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - #endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/lichuang-c3-dev/config.json b/main/boards/lichuang-c3-dev/config.json index f10aa79..6000c33 100644 --- a/main/boards/lichuang-c3-dev/config.json +++ b/main/boards/lichuang-c3-dev/config.json @@ -5,7 +5,7 @@ "name": "lichuang-c3-dev", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"", + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"", "CONFIG_USE_ESP_WAKE_WORD=y", "CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y" ] diff --git a/main/boards/lichuang-c3-dev/lichuang_c3_dev_board.cc b/main/boards/lichuang-c3-dev/lichuang_c3_dev_board.cc index 0eb7759..988246d 100644 --- a/main/boards/lichuang-c3-dev/lichuang_c3_dev_board.cc +++ b/main/boards/lichuang-c3-dev/lichuang_c3_dev_board.cc @@ -14,9 +14,6 @@ #define TAG "LichuangC3DevBoard" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class LichuangC3DevBoard : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -91,12 +88,7 @@ private: esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/lichuang-dev/config.json b/main/boards/lichuang-dev/config.json index e2a7090..32eedc4 100644 --- a/main/boards/lichuang-dev/config.json +++ b/main/boards/lichuang-dev/config.json @@ -4,7 +4,8 @@ { "name": "lichuang-dev", "sdkconfig_append": [ - "CONFIG_USE_DEVICE_AEC=y" + "CONFIG_USE_DEVICE_AEC=y", + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/16m.csv\"" ] } ] diff --git a/main/boards/lichuang-dev/lichuang_dev_board.cc b/main/boards/lichuang-dev/lichuang_dev_board.cc index 9b682d6..adfb417 100644 --- a/main/boards/lichuang-dev/lichuang_dev_board.cc +++ b/main/boards/lichuang-dev/lichuang_dev_board.cc @@ -16,12 +16,8 @@ #include #include - #define TAG "LichuangDevBoard" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class Pca9557 : public I2cDevice { public: Pca9557(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) { @@ -157,16 +153,7 @@ private: esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeTouch() diff --git a/main/boards/lilygo-t-cameraplus-s3/config.json b/main/boards/lilygo-t-cameraplus-s3/config.json index c13e7b5..c08d0b0 100644 --- a/main/boards/lilygo-t-cameraplus-s3/config.json +++ b/main/boards/lilygo-t-cameraplus-s3/config.json @@ -4,15 +4,13 @@ { "name": "lilygo-t-cameraplus-s3", "sdkconfig_append": [ - "CONFIG_SPIRAM_MODE_QUAD=y", - "CONFIG_BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_0_V1_1=y" + "CONFIG_SPIRAM_MODE_QUAD=y" ] }, { "name": "lilygo-t-cameraplus-s3_v1_2", "sdkconfig_append": [ - "CONFIG_SPIRAM_MODE_QUAD=y", - "CONFIG_BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3_V1_2=y" + "CONFIG_SPIRAM_MODE_QUAD=y" ] } ] diff --git a/main/boards/lilygo-t-cameraplus-s3/lilygo-t-cameraplus-s3.cc b/main/boards/lilygo-t-cameraplus-s3/lilygo-t-cameraplus-s3.cc index 2e62065..7264892 100644 --- a/main/boards/lilygo-t-cameraplus-s3/lilygo-t-cameraplus-s3.cc +++ b/main/boards/lilygo-t-cameraplus-s3/lilygo-t-cameraplus-s3.cc @@ -18,9 +18,6 @@ #define TAG "LilygoTCameraPlusS3Board" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class Cst816x : public I2cDevice { public: struct TouchPoint_t { @@ -133,7 +130,7 @@ private: } } - static void touchpad_daemon(void *param) { + static void TouchpadDaemon(void *param) { vTaskDelay(pdMS_TO_TICKS(2000)); auto &board = (LilygoTCameraPlusS3Board&)Board::GetInstance(); auto touchpad = board.GetTouchpad(); @@ -159,7 +156,7 @@ private: void InitCst816d() { ESP_LOGI(TAG, "Init CST816x"); cst816d_ = new Cst816x(i2c_bus_, CST816_ADDRESS); - xTaskCreate(touchpad_daemon, "tp", 2048, NULL, 5, NULL); + xTaskCreate(TouchpadDaemon, "tp", 2048, NULL, 5, NULL); } void InitSpi() { @@ -207,12 +204,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel, true)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/lilygo-t-circle-s3/lilygo-t-circle-s3.cc b/main/boards/lilygo-t-circle-s3/lilygo-t-circle-s3.cc index 877bc3c..e40878f 100644 --- a/main/boards/lilygo-t-circle-s3/lilygo-t-circle-s3.cc +++ b/main/boards/lilygo-t-circle-s3/lilygo-t-circle-s3.cc @@ -16,9 +16,6 @@ #define TAG "LilygoTCircleS3Board" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class Cst816x : public I2cDevice { public: struct TouchPoint_t { @@ -185,12 +182,7 @@ private: display_ = new SpiLcdDisplay(panel_io, panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, - DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); gpio_config_t config; config.pin_bit_mask = BIT64(DISPLAY_BL); diff --git a/main/boards/lilygo-t-display-s3-pro-mvsrlora/lilygo-t-display-s3-pro-mvsrlora.cc b/main/boards/lilygo-t-display-s3-pro-mvsrlora/lilygo-t-display-s3-pro-mvsrlora.cc index de33505..f0a4aed 100644 --- a/main/boards/lilygo-t-display-s3-pro-mvsrlora/lilygo-t-display-s3-pro-mvsrlora.cc +++ b/main/boards/lilygo-t-display-s3-pro-mvsrlora/lilygo-t-display-s3-pro-mvsrlora.cc @@ -16,9 +16,6 @@ #define TAG "LilygoTDisplays3ProMVSRLoraBoard" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class Cst2xxse : public I2cDevice { public: struct TouchPoint_t { @@ -209,12 +206,7 @@ private: display_ = new SpiLcdDisplay(panel_io, panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, - DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); gpio_config_t config; config.pin_bit_mask = BIT64(DISPLAY_BL); diff --git a/main/boards/m5stack-core-s3/README.md b/main/boards/m5stack-core-s3/README.md index 0128670..d7aa9b8 100644 --- a/main/boards/m5stack-core-s3/README.md +++ b/main/boards/m5stack-core-s3/README.md @@ -1,22 +1,18 @@ # 使用说明 -1. 设置编译目标为 esp32s3 +**编译** -```shell -idf.py set-target esp32s3 +```bash +python ./scripts/release.py m5stack-core-s3 ``` -2. 修改配置 +如需手动编译,请参考 `m5stack-core-s3/config.json` 修改 menuconfig 对应选项。 -```shell -cp main/boards/m5stack-core-s3/sdkconfig.cores3 sdkconfig -``` +**烧录** -3. 编译烧录程序 - -```shell -idf.py build flash monitor +```bash +idf.py flash ``` > [!NOTE] diff --git a/main/boards/m5stack-core-s3/cores3_audio_codec.cc b/main/boards/m5stack-core-s3/cores3_audio_codec.cc index a267ccf..ea13277 100644 --- a/main/boards/m5stack-core-s3/cores3_audio_codec.cc +++ b/main/boards/m5stack-core-s3/cores3_audio_codec.cc @@ -4,7 +4,6 @@ #include #include - #define TAG "CoreS3AudioCodec" CoreS3AudioCodec::CoreS3AudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate, diff --git a/main/boards/m5stack-core-s3/m5stack_core_s3.cc b/main/boards/m5stack-core-s3/m5stack_core_s3.cc index e380cde..fd42ed9 100644 --- a/main/boards/m5stack-core-s3/m5stack_core_s3.cc +++ b/main/boards/m5stack-core-s3/m5stack_core_s3.cc @@ -16,12 +16,8 @@ #include #include "esp32_camera.h" - #define TAG "M5StackCoreS3Board" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class Pmic : public Axp2101 { public: // Power Init @@ -44,7 +40,6 @@ public: } }; - class CustomBacklight : public Backlight { public: CustomBacklight(Pmic *pmic) : pmic_(pmic) {} @@ -58,7 +53,6 @@ private: Pmic *pmic_; }; - class Aw9523 : public I2cDevice { public: // Exanpd IO Init @@ -123,7 +117,6 @@ private: TouchPoint_t tp_; }; - class M5StackCoreS3Board : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -294,16 +287,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeCamera() { diff --git a/main/boards/m5stack-core-s3/sdkconfig.cores3 b/main/boards/m5stack-core-s3/sdkconfig.cores3 deleted file mode 100644 index 8f382ee..0000000 --- a/main/boards/m5stack-core-s3/sdkconfig.cores3 +++ /dev/null @@ -1,2953 +0,0 @@ -# -# Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Configuration -# -CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 -CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 -CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_PCNT_SUPPORTED=y -CONFIG_SOC_PHY_SUPPORTED=y -CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_TWAI_SUPPORTED=y -CONFIG_SOC_GDMA_SUPPORTED=y -CONFIG_SOC_AHB_GDMA_SUPPORTED=y -CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_LCDCAM_SUPPORTED=y -CONFIG_SOC_LCDCAM_I80_LCD_SUPPORTED=y -CONFIG_SOC_LCDCAM_RGB_LCD_SUPPORTED=y -CONFIG_SOC_MCPWM_SUPPORTED=y -CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y -CONFIG_SOC_CACHE_SUPPORT_WRAP=y -CONFIG_SOC_ULP_SUPPORTED=y -CONFIG_SOC_ULP_FSM_SUPPORTED=y -CONFIG_SOC_RISCV_COPROC_SUPPORTED=y -CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_USB_OTG_SUPPORTED=y -CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y -CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y -CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y -CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y -CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y -CONFIG_SOC_EFUSE_SUPPORTED=y -CONFIG_SOC_SDMMC_HOST_SUPPORTED=y -CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y -CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y -CONFIG_SOC_RTC_MEM_SUPPORTED=y -CONFIG_SOC_PSRAM_DMA_CAPABLE=y -CONFIG_SOC_XT_WDT_SUPPORTED=y -CONFIG_SOC_I2S_SUPPORTED=y -CONFIG_SOC_RMT_SUPPORTED=y -CONFIG_SOC_SDM_SUPPORTED=y -CONFIG_SOC_GPSPI_SUPPORTED=y -CONFIG_SOC_LEDC_SUPPORTED=y -CONFIG_SOC_I2C_SUPPORTED=y -CONFIG_SOC_SYSTIMER_SUPPORTED=y -CONFIG_SOC_SUPPORT_COEXISTENCE=y -CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y -CONFIG_SOC_AES_SUPPORTED=y -CONFIG_SOC_MPI_SUPPORTED=y -CONFIG_SOC_SHA_SUPPORTED=y -CONFIG_SOC_HMAC_SUPPORTED=y -CONFIG_SOC_DIG_SIGN_SUPPORTED=y -CONFIG_SOC_FLASH_ENC_SUPPORTED=y -CONFIG_SOC_SECURE_BOOT_SUPPORTED=y -CONFIG_SOC_MEMPROT_SUPPORTED=y -CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y -CONFIG_SOC_BOD_SUPPORTED=y -CONFIG_SOC_CLK_TREE_SUPPORTED=y -CONFIG_SOC_MPU_SUPPORTED=y -CONFIG_SOC_WDT_SUPPORTED=y -CONFIG_SOC_SPI_FLASH_SUPPORTED=y -CONFIG_SOC_RNG_SUPPORTED=y -CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y -CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y -CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y -CONFIG_SOC_PM_SUPPORTED=y -CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y -CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_ARBITER_SUPPORTED=y -CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y -CONFIG_SOC_ADC_MONITOR_SUPPORTED=y -CONFIG_SOC_ADC_DMA_SUPPORTED=y -CONFIG_SOC_ADC_PERIPH_NUM=2 -CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 -CONFIG_SOC_ADC_ATTEN_NUM=4 -CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 -CONFIG_SOC_ADC_PATT_LEN_MAX=24 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 -CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 -CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y -CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y -CONFIG_SOC_ADC_SHARED_POWER=y -CONFIG_SOC_APB_BACKUP_DMA=y -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y -CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED=y -CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y -CONFIG_SOC_CPU_CORES_NUM=2 -CONFIG_SOC_CPU_INTR_NUM=32 -CONFIG_SOC_CPU_HAS_FPU=y -CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y -CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 -CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 -CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 -CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 -CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 -CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_AHB_GDMA_VERSION=1 -CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP=5 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=5 -CONFIG_SOC_AHB_GDMA_SUPPORT_PSRAM=y -CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=49 -CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y -CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y -CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y -CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y -CONFIG_SOC_GPIO_VALID_GPIO_MASK=0x1FFFFFFFFFFFF -CONFIG_SOC_GPIO_IN_RANGE_MAX=48 -CONFIG_SOC_GPIO_OUT_RANGE_MAX=48 -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x0001FFFFFC000000 -CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y -CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 -CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y -CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE=y -CONFIG_SOC_I2C_NUM=2 -CONFIG_SOC_HP_I2C_NUM=2 -CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=8 -CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y -CONFIG_SOC_I2C_SUPPORT_XTAL=y -CONFIG_SOC_I2C_SUPPORT_RTC=y -CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y -CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y -CONFIG_SOC_I2S_NUM=2 -CONFIG_SOC_I2S_HW_VERSION_2=y -CONFIG_SOC_I2S_SUPPORTS_XTAL=y -CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y -CONFIG_SOC_I2S_SUPPORTS_PCM=y -CONFIG_SOC_I2S_SUPPORTS_PDM=y -CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 -CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y -CONFIG_SOC_I2S_PDM_MAX_RX_LINES=4 -CONFIG_SOC_I2S_SUPPORTS_TDM=y -CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y -CONFIG_SOC_LEDC_TIMER_NUM=4 -CONFIG_SOC_LEDC_CHANNEL_NUM=8 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 -CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y -CONFIG_SOC_MCPWM_GROUPS=2 -CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 -CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 -CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 -CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 -CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y -CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 -CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 -CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 -CONFIG_SOC_MMU_PERIPH_NUM=1 -CONFIG_SOC_PCNT_GROUPS=1 -CONFIG_SOC_PCNT_UNITS_PER_GROUP=4 -CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 -CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 -CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=4 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=4 -CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 -CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y -CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y -CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y -CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y -CONFIG_SOC_RMT_SUPPORT_XTAL=y -CONFIG_SOC_RMT_SUPPORT_RC_FAST=y -CONFIG_SOC_RMT_SUPPORT_APB=y -CONFIG_SOC_RMT_SUPPORT_DMA=y -CONFIG_SOC_LCD_I80_SUPPORTED=y -CONFIG_SOC_LCD_RGB_SUPPORTED=y -CONFIG_SOC_LCD_I80_BUSES=1 -CONFIG_SOC_LCD_RGB_PANELS=1 -CONFIG_SOC_LCD_I80_BUS_WIDTH=16 -CONFIG_SOC_LCD_RGB_DATA_WIDTH=16 -CONFIG_SOC_LCD_SUPPORT_RGB_YUV_CONV=y -CONFIG_SOC_LCDCAM_I80_NUM_BUSES=1 -CONFIG_SOC_LCDCAM_I80_BUS_WIDTH=16 -CONFIG_SOC_LCDCAM_RGB_NUM_PANELS=1 -CONFIG_SOC_LCDCAM_RGB_DATA_WIDTH=16 -CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 -CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=549 -CONFIG_SOC_RTC_CNTL_TAGMEM_PD_DMA_BUS_WIDTH=128 -CONFIG_SOC_RTCIO_PIN_COUNT=22 -CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y -CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y -CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y -CONFIG_SOC_SDM_GROUPS=y -CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 -CONFIG_SOC_SDM_CLK_SUPPORT_APB=y -CONFIG_SOC_SPI_PERIPH_NUM=3 -CONFIG_SOC_SPI_MAX_CS_NUM=6 -CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_SUPPORT_DDRCLK=y -CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y -CONFIG_SOC_SPI_SUPPORT_CD_SIG=y -CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y -CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y -CONFIG_SOC_SPI_SUPPORT_CLK_APB=y -CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y -CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y -CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 -CONFIG_SOC_SPI_SUPPORT_OCT=y -CONFIG_SOC_SPI_SCT_SUPPORTED=y -CONFIG_SOC_SPI_SCT_REG_NUM=14 -CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y -CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA -CONFIG_SOC_MEMSPI_SRC_FREQ_120M=y -CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y -CONFIG_SOC_SPIRAM_SUPPORTED=y -CONFIG_SOC_SPIRAM_XIP_SUPPORTED=y -CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 -CONFIG_SOC_SYSTIMER_ALARM_NUM=3 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 -CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y -CONFIG_SOC_SYSTIMER_INT_LEVEL=y -CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y -CONFIG_SOC_TIMER_GROUPS=2 -CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 -CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y -CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 -CONFIG_SOC_TOUCH_SENSOR_VERSION=2 -CONFIG_SOC_TOUCH_SENSOR_NUM=15 -CONFIG_SOC_TOUCH_SUPPORT_SLEEP_WAKEUP=y -CONFIG_SOC_TOUCH_SUPPORT_WATERPROOF=y -CONFIG_SOC_TOUCH_SUPPORT_PROX_SENSING=y -CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 -CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED=y -CONFIG_SOC_TOUCH_SAMPLE_CFG_NUM=1 -CONFIG_SOC_TWAI_CONTROLLER_NUM=1 -CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y -CONFIG_SOC_TWAI_BRP_MIN=2 -CONFIG_SOC_TWAI_BRP_MAX=16384 -CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y -CONFIG_SOC_UART_NUM=3 -CONFIG_SOC_UART_HP_NUM=3 -CONFIG_SOC_UART_FIFO_LEN=128 -CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y -CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y -CONFIG_SOC_UART_SUPPORT_APB_CLK=y -CONFIG_SOC_UART_SUPPORT_RTC_CLK=y -CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_USB_OTG_PERIPH_NUM=1 -CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 -CONFIG_SOC_SHA_SUPPORT_DMA=y -CONFIG_SOC_SHA_SUPPORT_RESUME=y -CONFIG_SOC_SHA_GDMA=y -CONFIG_SOC_SHA_SUPPORT_SHA1=y -CONFIG_SOC_SHA_SUPPORT_SHA224=y -CONFIG_SOC_SHA_SUPPORT_SHA256=y -CONFIG_SOC_SHA_SUPPORT_SHA384=y -CONFIG_SOC_SHA_SUPPORT_SHA512=y -CONFIG_SOC_SHA_SUPPORT_SHA512_224=y -CONFIG_SOC_SHA_SUPPORT_SHA512_256=y -CONFIG_SOC_SHA_SUPPORT_SHA512_T=y -CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 -CONFIG_SOC_MPI_OPERATIONS_NUM=3 -CONFIG_SOC_RSA_MAX_BIT_LEN=4096 -CONFIG_SOC_AES_SUPPORT_DMA=y -CONFIG_SOC_AES_GDMA=y -CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_256=y -CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_CPU_PD=y -CONFIG_SOC_PM_SUPPORT_TAGMEM_PD=y -CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y -CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y -CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y -CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y -CONFIG_SOC_PM_SUPPORT_MODEM_PD=y -CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y -CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y -CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y -CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y -CONFIG_SOC_PM_MODEM_PD_BY_SW=y -CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y -CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y -CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y -CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_DCACHE=y -CONFIG_SOC_EFUSE_HARD_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_USB_JTAG=y -CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y -CONFIG_SOC_EFUSE_DIS_ICACHE=y -CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y -CONFIG_SOC_SECURE_BOOT_V2_RSA=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 -CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64 -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_256=y -CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 -CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=256 -CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 -CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 -CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y -CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE=y -CONFIG_SOC_SPI_MEM_SUPPORT_TIMING_TUNING=y -CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y -CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y -CONFIG_SOC_MEMSPI_TIMING_TUNING_BY_MSPI_DELAY=y -CONFIG_SOC_MEMSPI_CORE_CLK_SHARED_WITH_PSRAM=y -CONFIG_SOC_SPI_MEM_SUPPORT_CACHE_32BIT_ADDR_MAP=y -CONFIG_SOC_COEX_HW_PTI=y -CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE=y -CONFIG_SOC_SDMMC_USE_GPIO_MATRIX=y -CONFIG_SOC_SDMMC_NUM_SLOTS=2 -CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK=y -CONFIG_SOC_SDMMC_DELAY_PHASE_NUM=4 -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y -CONFIG_SOC_WIFI_HW_TSF=y -CONFIG_SOC_WIFI_FTM_SUPPORT=y -CONFIG_SOC_WIFI_GCMP_SUPPORT=y -CONFIG_SOC_WIFI_WAPI_SUPPORT=y -CONFIG_SOC_WIFI_CSI_SUPPORT=y -CONFIG_SOC_WIFI_MESH_SUPPORT=y -CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y -CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y -CONFIG_SOC_BLE_SUPPORTED=y -CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_BLE_50_SUPPORTED=y -CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y -CONFIG_SOC_BLUFI_SUPPORTED=y -CONFIG_SOC_ULP_HAS_ADC=y -CONFIG_SOC_PHY_COMBO_MODULE=y -CONFIG_IDF_CMAKE=y -CONFIG_IDF_TOOLCHAIN="gcc" -CONFIG_IDF_TOOLCHAIN_GCC=y -CONFIG_IDF_TARGET_ARCH_XTENSA=y -CONFIG_IDF_TARGET_ARCH="xtensa" -CONFIG_IDF_TARGET="esp32s3" -CONFIG_IDF_INIT_VERSION="5.4.0" -CONFIG_IDF_TARGET_ESP32S3=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 - -# -# Build type -# -CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_RAM is not set -CONFIG_APP_BUILD_GENERATE_BINARIES=y -CONFIG_APP_BUILD_BOOTLOADER=y -CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y -# CONFIG_APP_REPRODUCIBLE_BUILD is not set -# CONFIG_APP_NO_BLOBS is not set -# end of Build type - -# -# Bootloader config -# - -# -# Bootloader manager -# -CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y -CONFIG_BOOTLOADER_PROJECT_VER=1 -# end of Bootloader manager - -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set -CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF=y -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set - -# -# Log -# -CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y -# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_INFO is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=0 - -# -# Format -# -# CONFIG_BOOTLOADER_LOG_COLORS is not set -CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y -# end of Format -# end of Log - -# -# Serial Flash Configurations -# -# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set -CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y -# end of Serial Flash Configurations - -CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y -# CONFIG_BOOTLOADER_FACTORY_RESET is not set -# CONFIG_BOOTLOADER_APP_TEST is not set -CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y -CONFIG_BOOTLOADER_WDT_ENABLE=y -# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set -CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y -# CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK is not set -CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP=y -CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON=y -CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS=y -CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0x10 -# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -CONFIG_BOOTLOADER_RESERVE_RTC_MEM=y -# end of Bootloader config - -# -# Security features -# -CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_PREFERRED=y -# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set -# CONFIG_SECURE_BOOT is not set -# CONFIG_SECURE_FLASH_ENC_ENABLED is not set -CONFIG_SECURE_ROM_DL_MODE_ENABLED=y -# end of Security features - -# -# Application manager -# -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9 -# end of Application manager - -CONFIG_ESP_ROM_HAS_CRC_LE=y -CONFIG_ESP_ROM_HAS_CRC_BE=y -CONFIG_ESP_ROM_HAS_MZ_CRC32=y -CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y -CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y -CONFIG_ESP_ROM_USB_OTG_NUM=3 -CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4 -CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y -CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV=y -CONFIG_ESP_ROM_GET_CLK_FREQ=y -CONFIG_ESP_ROM_HAS_HAL_WDT=y -CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y -CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y -CONFIG_ESP_ROM_HAS_SPI_FLASH=y -CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y -CONFIG_ESP_ROM_HAS_NEWLIB=y -CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y -CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y -CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y -CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y -CONFIG_ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG=y -CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG=y -CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG=y -CONFIG_ESP_ROM_HAS_SW_FLOAT=y -CONFIG_ESP_ROM_HAS_VERSION=y -CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y -CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y - -# -# Boot ROM Behavior -# -CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y -# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set -# end of Boot ROM Behavior - -# -# Serial flasher config -# -# CONFIG_ESPTOOLPY_NO_STUB is not set -# CONFIG_ESPTOOLPY_OCT_FLASH is not set -CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=y -CONFIG_ESPTOOLPY_FLASHMODE_QIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y -CONFIG_ESPTOOLPY_FLASHMODE="dio" -# CONFIG_ESPTOOLPY_FLASHFREQ_120M is not set -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="16MB" -# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Partition Table -# -# CONFIG_PARTITION_TABLE_SINGLE_APP is not set -# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set -# CONFIG_PARTITION_TABLE_TWO_OTA is not set -# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set -CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v1/16m.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions/v1/16m.csv" -CONFIG_PARTITION_TABLE_OFFSET=0x8000 -CONFIG_PARTITION_TABLE_MD5=y -# end of Partition Table - -# -# Xiaozhi Assistant -# -CONFIG_OTA_URL="https://api.tenclass.net/xiaozhi/ota/" -CONFIG_LANGUAGE_ZH_CN=y -# CONFIG_LANGUAGE_ZH_TW is not set -# CONFIG_LANGUAGE_EN_US is not set -# CONFIG_LANGUAGE_JA_JP is not set -# CONFIG_BOARD_TYPE_BREAD_COMPACT_WIFI is not set -# CONFIG_BOARD_TYPE_BREAD_COMPACT_WIFI_LCD is not set -# CONFIG_BOARD_TYPE_BREAD_COMPACT_ML307 is not set -# CONFIG_BOARD_TYPE_BREAD_COMPACT_ESP32 is not set -# CONFIG_BOARD_TYPE_BREAD_COMPACT_ESP32_LCD is not set -# CONFIG_BOARD_TYPE_ESP32_CGC is not set -# CONFIG_BOARD_TYPE_ESP_BOX_3 is not set -# CONFIG_BOARD_TYPE_ESP_BOX is not set -# CONFIG_BOARD_TYPE_ESP_BOX_LITE is not set -# CONFIG_BOARD_TYPE_KEVIN_BOX_1 is not set -# CONFIG_BOARD_TYPE_KEVIN_BOX_2 is not set -# CONFIG_BOARD_TYPE_KEVIN_C3 is not set -# CONFIG_BOARD_TYPE_KEVIN_SP_V3_DEV is not set -# CONFIG_BOARD_TYPE_KEVIN_SP_V4_DEV is not set -# CONFIG_BOARD_TYPE_KEVIN_YUYING_313LCD is not set -# CONFIG_BOARD_TYPE_LICHUANG_DEV is not set -# CONFIG_BOARD_TYPE_LICHUANG_C3_DEV is not set -# CONFIG_BOARD_TYPE_DF_K10 is not set -# CONFIG_BOARD_TYPE_MAGICLICK_2P4 is not set -# CONFIG_BOARD_TYPE_MAGICLICK_2P5 is not set -# CONFIG_BOARD_TYPE_MAGICLICK_C3 is not set -# CONFIG_BOARD_TYPE_MAGICLICK_C3_V2 is not set -CONFIG_BOARD_TYPE_M5STACK_CORE_S3=y -# CONFIG_BOARD_TYPE_M5STACK_CORE_TAB5 is not set -# CONFIG_BOARD_TYPE_ATOMS3_ECHO_BASE is not set -# CONFIG_BOARD_TYPE_ATOMS3R_ECHO_BASE is not set -# CONFIG_BOARD_TYPE_ATOMS3R_CAM_M12_ECHO_BASE is not set -# CONFIG_BOARD_TYPE_ATOMMATRIX_ECHO_BASE is not set -# CONFIG_BOARD_TYPE_XMINI_C3 is not set -# CONFIG_BOARD_TYPE_ESP32S3_KORVO2_V3 is not set -# CONFIG_BOARD_TYPE_ESP_SPARKBOT is not set -# CONFIG_BOARD_TYPE_ESP_SPOT_S3 is not set -# CONFIG_BOARD_TYPE_ESP32S3_Touch_AMOLED_1_8 is not set -# CONFIG_BOARD_TYPE_ESP32S3_Touch_AMOLED_1_75 is not set -# CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_1_85C is not set -# CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_1_85 is not set -# CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_1_46 is not set -# CONFIG_BOARD_TYPE_ESP32S3_Touch_LCD_3_5 is not set -# CONFIG_BOARD_TYPE_ESP32P4_NANO is not set -# CONFIG_BOARD_TYPE_TUDOUZI is not set -# CONFIG_BOARD_TYPE_LILYGO_T_CIRCLE_S3 is not set -# CONFIG_BOARD_TYPE_LILYGO_T_CAMERAPLUS_S3 is not set -# CONFIG_BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA is not set -# CONFIG_BOARD_TYPE_LILYGO_T_DISPLAY_S3_PRO_MVSRLORA_NO_BATTERY is not set -# CONFIG_BOARD_TYPE_MOVECALL_MOJI_ESP32S3 is not set -# CONFIG_BOARD_TYPE_MOVECALL_CUICAN_ESP32S3 is not set -# CONFIG_BOARD_TYPE_ATK_DNESP32S3 is not set -# CONFIG_BOARD_TYPE_ATK_DNESP32S3_BOX is not set -# CONFIG_BOARD_TYPE_ATK_DNESP32S3_BOX0 is not set -# CONFIG_BOARD_TYPE_ATK_DNESP32S3M_WIFI is not set -# CONFIG_BOARD_TYPE_ATK_DNESP32S3M_4G is not set -# CONFIG_BOARD_TYPE_DU_CHATX is not set -# CONFIG_BOARD_TYPE_ESP32S3_Taiji_Pi is not set -# CONFIG_BOARD_TYPE_XINGZHI_Cube_0_85TFT_WIFI is not set -# CONFIG_BOARD_TYPE_XINGZHI_Cube_0_85TFT_ML307 is not set -# CONFIG_BOARD_TYPE_XINGZHI_Cube_0_96OLED_WIFI is not set -# CONFIG_BOARD_TYPE_XINGZHI_Cube_0_96OLED_ML307 is not set -# CONFIG_BOARD_TYPE_XINGZHI_Cube_1_54TFT_WIFI is not set -# CONFIG_BOARD_TYPE_XINGZHI_Cube_1_54TFT_ML307 is not set -# CONFIG_BOARD_TYPE_SENSECAP_WATCHER is not set -# CONFIG_BOARD_TYPE_DOIT_S3_AIBOX is not set -# CONFIG_BOARD_TYPE_MIXGO_NOVA is not set -# CONFIG_BOARD_TYPE_GENJUTECH_S3_1_54TFT is not set -# CONFIG_BOARD_TYPE_ESP_S3_LCD_EV_Board is not set -# CONFIG_BOARD_TYPE_ESP_S3_LCD_EV_Board_2 is not set -# CONFIG_BOARD_TYPE_ZHENGCHEN_1_54TFT_WIFI is not set -# CONFIG_BOARD_TYPE_MINSI_K08_DUAL is not set -# CONFIG_BOARD_TYPE_ZHENGCHEN_1_54TFT_ML307 is not set -# CONFIG_BOARD_TYPE_ESP32_S3_1_54_MUMA is not set -# CONFIG_USE_WECHAT_MESSAGE_STYLE is not set -CONFIG_USE_WAKE_WORD_DETECT=y -CONFIG_USE_AUDIO_PROCESSOR=y -# CONFIG_USE_SERVER_AEC is not set -CONFIG_IOT_PROTOCOL_MCP=y -# CONFIG_IOT_PROTOCOL_XIAOZHI is not set -# end of Xiaozhi Assistant - -# -# ESP Speech Recognition -# -CONFIG_MODEL_IN_FLASH=y -# CONFIG_MODEL_IN_SDCARD is not set -CONFIG_AFE_INTERFACE_V1=y -CONFIG_SR_NSN_WEBRTC=y -# CONFIG_SR_NSN_NSNET2 is not set -CONFIG_SR_VADN_WEBRTC=y -# CONFIG_SR_VADN_VADNET1_MEDIUM is not set - -# -# Load Multiple Wake Words (WakeNet9) -# -# CONFIG_SR_WN_WN9_HILEXIN is not set -# CONFIG_SR_WN_WN9_XIAOAITONGXUE is not set -CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=y -# CONFIG_SR_WN_WN9_ALEXA is not set -# CONFIG_SR_WN_WN9_HIESP is not set -# CONFIG_SR_WN_WN9_JARVIS_TTS is not set -# CONFIG_SR_WN_WN9_COMPUTER_TTS is not set -# CONFIG_SR_WN_WN9_HEYWILLOW_TTS is not set -# CONFIG_SR_WN_WN9_SOPHIA_TTS is not set -# CONFIG_SR_WN_WN9_NIHAOXIAOXIN_TTS is not set -# CONFIG_SR_WN_WN9_XIAOMEITONGXUE_TTS is not set -# CONFIG_SR_WN_WN9_HEYPRINTER_TTS is not set -# CONFIG_SR_WN_WN9_XIAOLONGXIAOLONG_TTS is not set -# CONFIG_SR_WN_WN9_MIAOMIAOTONGXUE_TTS is not set -# CONFIG_SR_WN_WN9_HEYWANDA_TTS is not set -# CONFIG_SR_WN_WN9_HIMIAOMIAO_TTS is not set -# CONFIG_SR_WN_WN9_MYCROFT_TTS is not set -# CONFIG_SR_WN_WN9_HIJOY_TTS is not set -# CONFIG_SR_WN_WN9_HILILI_TTS is not set -# CONFIG_SR_WN_WN9_HITELLY_TTS is not set -# CONFIG_SR_WN_WN9_XIAOBINXIAOBIN_TTS is not set -# CONFIG_SR_WN_WN9_HAIXIAOWU_TTS is not set -# CONFIG_SR_WN_WN9_ASTROLABE_TTS is not set -# CONFIG_SR_WN_WN9_HEYILY_TTS2 is not set -# CONFIG_SR_WN_WN9_XIAOYAXIAOYA_TTS2 is not set -# CONFIG_SR_WN_WN9_HIJASON_TTS2 is not set -# CONFIG_SR_WN_WN9_LINAIBAN_TTS2 is not set -# CONFIG_SR_WN_WN9_XIAOSUROU_TTS2 is not set -# CONFIG_SR_WN_WN9_XIAOYUTONGXUE_TTS2 is not set -# CONFIG_SR_WN_WN9_XIAOMINGTONGXUE_TTS2 is not set -# CONFIG_SR_WN_WN9_XIAOKANGTONGXUE_TTS2 is not set -# CONFIG_SR_WN_WN9_XIAOJIANXIAOJIAN_TTS2 is not set -# CONFIG_SR_WN_WN9_XIAOTEXIAOTE_TTS2 is not set -# CONFIG_SR_WN_WN9_NIHAOXIAOYI_TTS2 is not set -# CONFIG_SR_WN_WN9_NIHAOBAIYING_TTS2 is not set -# CONFIG_SR_WN_WN9_HIWALLE_TTS2 is not set -# end of Load Multiple Wake Words (WakeNet9) - -CONFIG_SR_MN_CN_NONE=y -# CONFIG_SR_MN_CN_MULTINET5_RECOGNITION_QUANT8 is not set -# CONFIG_SR_MN_CN_MULTINET6_QUANT is not set -# CONFIG_SR_MN_CN_MULTINET6_AC_QUANT is not set -# CONFIG_SR_MN_CN_MULTINET7_QUANT is not set -# CONFIG_SR_MN_CN_MULTINET7_AC_QUANT is not set -CONFIG_SR_MN_EN_NONE=y -# CONFIG_SR_MN_EN_MULTINET5_SINGLE_RECOGNITION_QUANT8 is not set -# CONFIG_SR_MN_EN_MULTINET6_QUANT is not set -# CONFIG_SR_MN_EN_MULTINET7_QUANT is not set -# end of ESP Speech Recognition - -# -# Compiler options -# -CONFIG_COMPILER_OPTIMIZATION_DEBUG=y -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -# CONFIG_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y -CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y -CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 -# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set -CONFIG_COMPILER_HIDE_PATHS_MACROS=y -CONFIG_COMPILER_CXX_EXCEPTIONS=y -CONFIG_COMPILER_CXX_EXCEPTIONS_EMG_POOL_SIZE=1024 -# CONFIG_COMPILER_CXX_RTTI is not set -CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y -# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set -# CONFIG_COMPILER_DUMP_RTL_FILES is not set -CONFIG_COMPILER_RT_LIB_GCCLIB=y -CONFIG_COMPILER_RT_LIB_NAME="gcc" -CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y -# CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE is not set -# CONFIG_COMPILER_STATIC_ANALYZER is not set -# end of Compiler options - -# -# Component config -# - -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_JTAG is not set -CONFIG_APPTRACE_DEST_NONE=y -# CONFIG_APPTRACE_DEST_UART1 is not set -# CONFIG_APPTRACE_DEST_UART2 is not set -# CONFIG_APPTRACE_DEST_USB_CDC is not set -CONFIG_APPTRACE_DEST_UART_NONE=y -CONFIG_APPTRACE_UART_TASK_PRIO=1 -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# Bluetooth -# -# CONFIG_BT_ENABLED is not set -CONFIG_BT_ALARM_MAX_NUM=50 -# end of Bluetooth - -# -# Console Library -# -# CONFIG_CONSOLE_SORTED_HELP is not set -# end of Console Library - -# -# Driver Configurations -# - -# -# TWAI Configuration -# -# CONFIG_TWAI_ISR_IN_IRAM is not set -CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y -# end of TWAI Configuration - -# -# Legacy ADC Driver Configuration -# -# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set - -# -# Legacy ADC Calibration Configuration -# -# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy ADC Calibration Configuration -# end of Legacy ADC Driver Configuration - -# -# Legacy MCPWM Driver Configurations -# -# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy MCPWM Driver Configurations - -# -# Legacy Timer Group Driver Configurations -# -# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy Timer Group Driver Configurations - -# -# Legacy RMT Driver Configurations -# -# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy RMT Driver Configurations - -# -# Legacy I2S Driver Configurations -# -# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy I2S Driver Configurations - -# -# Legacy PCNT Driver Configurations -# -# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy PCNT Driver Configurations - -# -# Legacy SDM Driver Configurations -# -# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy SDM Driver Configurations - -# -# Legacy Temperature Sensor Driver Configurations -# -# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy Temperature Sensor Driver Configurations -# end of Driver Configurations - -# -# eFuse Bit Manager -# -# CONFIG_EFUSE_CUSTOM_TABLE is not set -# CONFIG_EFUSE_VIRTUAL is not set -CONFIG_EFUSE_MAX_BLK_LEN=256 -# end of eFuse Bit Manager - -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y -# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set -# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ADC and ADC Calibration -# -# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set -# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set -# CONFIG_ADC_ENABLE_DEBUG_LOG is not set -# end of ADC and ADC Calibration - -# -# Wireless Coexistence -# -CONFIG_ESP_COEX_ENABLED=y -# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_ESP_COEX_GPIO_DEBUG is not set -# end of Wireless Coexistence - -# -# Common ESP-related -# -CONFIG_ESP_ERR_TO_NAME_LOOKUP=y -# end of Common ESP-related - -# -# ESP-Driver:GPIO Configurations -# -# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:GPIO Configurations - -# -# ESP-Driver:GPTimer Configurations -# -CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y -# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set -# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:GPTimer Configurations - -# -# ESP-Driver:I2C Configurations -# -# CONFIG_I2C_ISR_IRAM_SAFE is not set -# CONFIG_I2C_ENABLE_DEBUG_LOG is not set -# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set -# end of ESP-Driver:I2C Configurations - -# -# ESP-Driver:I2S Configurations -# -# CONFIG_I2S_ISR_IRAM_SAFE is not set -# CONFIG_I2S_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:I2S Configurations - -# -# ESP-Driver:LEDC Configurations -# -# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:LEDC Configurations - -# -# ESP-Driver:MCPWM Configurations -# -# CONFIG_MCPWM_ISR_IRAM_SAFE is not set -# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:MCPWM Configurations - -# -# ESP-Driver:PCNT Configurations -# -# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_PCNT_ISR_IRAM_SAFE is not set -# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:PCNT Configurations - -# -# ESP-Driver:RMT Configurations -# -# CONFIG_RMT_ISR_IRAM_SAFE is not set -# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set -# CONFIG_RMT_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:RMT Configurations - -# -# ESP-Driver:Sigma Delta Modulator Configurations -# -# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_SDM_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Sigma Delta Modulator Configurations - -# -# ESP-Driver:SPI Configurations -# -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of ESP-Driver:SPI Configurations - -# -# ESP-Driver:Touch Sensor Configurations -# -# CONFIG_TOUCH_CTRL_FUNC_IN_IRAM is not set -# CONFIG_TOUCH_ISR_IRAM_SAFE is not set -# CONFIG_TOUCH_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Touch Sensor Configurations - -# -# ESP-Driver:Temperature Sensor Configurations -# -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Temperature Sensor Configurations - -# -# ESP-Driver:UART Configurations -# -CONFIG_UART_ISR_IN_IRAM=y -# end of ESP-Driver:UART Configurations - -# -# ESP-Driver:USB Serial/JTAG Configuration -# -CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y -# end of ESP-Driver:USB Serial/JTAG Configuration - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set -# CONFIG_ETH_USE_OPENETH is not set -# CONFIG_ETH_TRANSMIT_MUTEX is not set -# end of Ethernet - -# -# Event Loop Library -# -# CONFIG_ESP_EVENT_LOOP_PROFILING is not set -CONFIG_ESP_EVENT_POST_FROM_ISR=y -CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y -# end of Event Loop Library - -# -# GDB Stub -# -CONFIG_ESP_GDBSTUB_ENABLED=y -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set -CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y -CONFIG_ESP_GDBSTUB_MAX_TASKS=32 -# end of GDB Stub - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set -CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=2048 -CONFIG_HTTPD_MAX_URI_LEN=2048 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -# CONFIG_HTTPD_WS_SUPPORT is not set -# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set -CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000 -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set -# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set -CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS server - -# -# Hardware Settings -# - -# -# Chip revision -# -CONFIG_ESP32S3_REV_MIN_0=y -# CONFIG_ESP32S3_REV_MIN_1 is not set -# CONFIG_ESP32S3_REV_MIN_2 is not set -CONFIG_ESP32S3_REV_MIN_FULL=0 -CONFIG_ESP_REV_MIN_FULL=0 - -# -# Maximum Supported ESP32-S3 Revision (Rev v0.99) -# -CONFIG_ESP32S3_REV_MAX_FULL=99 -CONFIG_ESP_REV_MAX_FULL=99 -CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0 -CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=199 - -# -# Maximum Supported ESP32-S3 eFuse Block Revision (eFuse Block Rev v1.99) -# -# end of Chip revision - -# -# MAC Config -# -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set -# end of MAC Config - -# -# Sleep Config -# -CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y -CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND=y -CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y -CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y -CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 -# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set -# CONFIG_ESP_SLEEP_DEBUG is not set -CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y -# end of Sleep Config - -# -# RTC Clock Config -# -CONFIG_RTC_CLK_SRC_INT_RC=y -# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_RTC_CLK_CAL_CYCLES=1024 -# end of RTC Clock Config - -# -# Peripheral Control -# -CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y -# end of Peripheral Control - -# -# GDMA Configurations -# -CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -# CONFIG_GDMA_ISR_IRAM_SAFE is not set -# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set -# end of GDMA Configurations - -# -# Main XTAL Config -# -CONFIG_XTAL_FREQ_40=y -CONFIG_XTAL_FREQ=40 -# end of Main XTAL Config - -CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y -# end of Hardware Settings - -# -# ESP-Driver:LCD Controller Configurations -# -# CONFIG_LCD_ENABLE_DEBUG_LOG is not set -# CONFIG_LCD_RGB_ISR_IRAM_SAFE is not set -# CONFIG_LCD_RGB_RESTART_IN_VSYNC is not set -# end of ESP-Driver:LCD Controller Configurations - -# -# ESP-MM: Memory Management Configurations -# -# CONFIG_ESP_MM_CACHE_MSYNC_C2M_CHUNKED_OPS is not set -# end of ESP-MM: Memory Management Configurations - -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y -CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y -# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set -# CONFIG_ESP_NETIF_L2_TAP is not set -# CONFIG_ESP_NETIF_BRIDGE_EN is not set -# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set -# end of ESP NETIF Adapter - -# -# Partition API Configuration -# -# end of Partition API Configuration - -# -# PHY -# -CONFIG_ESP_PHY_ENABLED=y -CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP_PHY_MAX_TX_POWER=20 -# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set -CONFIG_ESP_PHY_ENABLE_USB=y -# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set -CONFIG_ESP_PHY_RF_CAL_PARTIAL=y -# CONFIG_ESP_PHY_RF_CAL_NONE is not set -# CONFIG_ESP_PHY_RF_CAL_FULL is not set -CONFIG_ESP_PHY_CALIBRATION_MODE=0 -# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set -# CONFIG_ESP_PHY_RECORD_USED_TIME is not set -# end of PHY - -# -# Power Management -# -# CONFIG_PM_ENABLE is not set -# CONFIG_PM_SLP_IRAM_OPT is not set -CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y -CONFIG_PM_RESTORE_CACHE_TAGMEM_AFTER_LIGHT_SLEEP=y -# end of Power Management - -# -# ESP PSRAM -# -CONFIG_SPIRAM=y - -# -# SPI RAM config -# -CONFIG_SPIRAM_MODE_QUAD=y -# CONFIG_SPIRAM_MODE_OCT is not set -CONFIG_SPIRAM_TYPE_AUTO=y -# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set -# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set -CONFIG_SPIRAM_CLK_IO=30 -CONFIG_SPIRAM_CS_IO=26 -# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set -# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set -# CONFIG_SPIRAM_RODATA is not set -# CONFIG_SPIRAM_SPEED_120M is not set -CONFIG_SPIRAM_SPEED_80M=y -# CONFIG_SPIRAM_SPEED_40M is not set -CONFIG_SPIRAM_SPEED=80 -CONFIG_SPIRAM_BOOT_INIT=y -# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set -# CONFIG_SPIRAM_USE_MEMMAP is not set -# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set -CONFIG_SPIRAM_USE_MALLOC=y -# CONFIG_SPIRAM_MEMTEST is not set -CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=4096 -# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set -CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=49152 -# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set -# CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY is not set -# end of SPI RAM config -# end of ESP PSRAM - -# -# ESP Ringbuf -# -# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set -# end of ESP Ringbuf - -# -# ESP Security Specific -# -# end of ESP Security Specific - -# -# ESP System Settings -# -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 - -# -# Cache config -# -# CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB is not set -CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y -CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE=0x8000 -# CONFIG_ESP32S3_INSTRUCTION_CACHE_4WAYS is not set -CONFIG_ESP32S3_INSTRUCTION_CACHE_8WAYS=y -CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS=8 -CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y -CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE=32 -# CONFIG_ESP32S3_DATA_CACHE_16KB is not set -# CONFIG_ESP32S3_DATA_CACHE_32KB is not set -CONFIG_ESP32S3_DATA_CACHE_64KB=y -CONFIG_ESP32S3_DATA_CACHE_SIZE=0x10000 -# CONFIG_ESP32S3_DATA_CACHE_4WAYS is not set -CONFIG_ESP32S3_DATA_CACHE_8WAYS=y -CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS=8 -# CONFIG_ESP32S3_DATA_CACHE_LINE_32B is not set -CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y -CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=64 -# end of Cache config - -# -# Memory -# -# CONFIG_ESP32S3_RTCDATA_IN_FAST_MEM is not set -# CONFIG_ESP32S3_USE_FIXED_STATIC_RAM_SIZE is not set -# end of Memory - -# -# Trace memory -# -# CONFIG_ESP32S3_TRAX is not set -CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 -# end of Trace memory - -# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set -CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y -# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set -CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 -CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y -CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y - -# -# Memory protection -# -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y -# end of Memory protection - -CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=8192 -CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y -# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set -# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 -CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 -CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_USB_CDC is not set -# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set -# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_NONE is not set -# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set -CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y -CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_UART_NUM=0 -CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 -CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 -CONFIG_ESP_INT_WDT=y -CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_INT_WDT_CHECK_CPU1=y -CONFIG_ESP_TASK_WDT_EN=y -CONFIG_ESP_TASK_WDT_INIT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=10 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP_PANIC_HANDLER_IRAM is not set -# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP_DEBUG_OCDAWARE=y -CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y - -# -# Brownout Detector -# -CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=7 -# end of Brownout Detector - -CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y -CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y -# end of ESP System Settings - -# -# IPC (Inter-Processor Call) -# -CONFIG_ESP_IPC_TASK_STACK_SIZE=1280 -CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y -CONFIG_ESP_IPC_ISR_ENABLE=y -# end of IPC (Inter-Processor Call) - -# -# ESP Timer (High Resolution Timer) -# -# CONFIG_ESP_TIMER_PROFILING is not set -CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y -CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y -CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 -# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set -CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 -CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y -CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y -# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_SYSTIMER=y -# end of ESP Timer (High Resolution Timer) - -# -# Wi-Fi -# -CONFIG_ESP_WIFI_ENABLED=y -CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=6 -CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=8 -# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -# CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER=y -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=1 -CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 -# CONFIG_ESP_WIFI_CSI_ENABLED is not set -CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP_WIFI_TX_BA_WIN=6 -CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP_WIFI_RX_BA_WIN=6 -CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set -CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 -# CONFIG_ESP_WIFI_IRAM_OPT is not set -# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set -# CONFIG_ESP_WIFI_RX_IRAM_OPT is not set -CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_ENABLE_SAE_PK=y -CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y -# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 -CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 -CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 -# CONFIG_ESP_WIFI_FTM_ENABLE is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y -# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set -CONFIG_ESP_WIFI_GMAC_SUPPORT=y -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y -# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set -CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y -CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y -# CONFIG_ESP_WIFI_WAPI_PSK is not set -# CONFIG_ESP_WIFI_SUITE_B_192 is not set -# CONFIG_ESP_WIFI_11KV_SUPPORT is not set -# CONFIG_ESP_WIFI_MBO_SUPPORT is not set -# CONFIG_ESP_WIFI_DPP_SUPPORT is not set -# CONFIG_ESP_WIFI_11R_SUPPORT is not set -# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set - -# -# WPS Configuration Options -# -# CONFIG_ESP_WIFI_WPS_STRICT is not set -# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set -# end of WPS Configuration Options - -# CONFIG_ESP_WIFI_DEBUG_PRINT is not set -# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set -CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y -# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set -# end of Wi-Fi - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -CONFIG_FATFS_VOLUME_COUNT=2 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -# CONFIG_FATFS_SECTOR_512 is not set -CONFIG_FATFS_SECTOR_4096=y -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y -# CONFIG_FATFS_USE_FASTSEEK is not set -CONFIG_FATFS_USE_STRFUNC_NONE=y -# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set -# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set -CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 -# CONFIG_FATFS_IMMEDIATE_FSYNC is not set -# CONFIG_FATFS_USE_LABEL is not set -CONFIG_FATFS_LINK_LOCK=y -# end of FAT Filesystem support - -# -# FreeRTOS -# - -# -# Kernel -# -# CONFIG_FREERTOS_SMP is not set -# CONFIG_FREERTOS_UNICORE is not set -CONFIG_FREERTOS_HZ=100 -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 -# CONFIG_FREERTOS_USE_IDLE_HOOK is not set -# CONFIG_FREERTOS_USE_TICK_HOOK is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 -# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set -CONFIG_FREERTOS_USE_TIMERS=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" -# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set -# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set -CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 -CONFIG_FREERTOS_USE_TRACE_FACILITY=y -CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y -# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set -# CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID is not set -CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y -CONFIG_FREERTOS_RUN_TIME_COUNTER_TYPE_U32=y -# CONFIG_FREERTOS_RUN_TIME_COUNTER_TYPE_U64 is not set -# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set -# end of Kernel - -# -# Port -# -CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y -# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -# CONFIG_FREERTOS_FPU_IN_ISR is not set -CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y -CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y -# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set -CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y -CONFIG_FREERTOS_RUN_TIME_STATS_USING_ESP_TIMER=y -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# end of Port - -# -# Extra -# -CONFIG_FREERTOS_TASK_CREATE_ALLOW_EXT_MEM=y -# end of Extra - -CONFIG_FREERTOS_PORT=y -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y -CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y -CONFIG_FREERTOS_NUMBER_OF_CORES=2 -# end of FreeRTOS - -# -# Hardware Abstraction Layer (HAL) and Low Level (LL) -# -CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y -# CONFIG_HAL_ASSERTION_DISABLE is not set -# CONFIG_HAL_ASSERTION_SILENT is not set -# CONFIG_HAL_ASSERTION_ENABLE is not set -CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 -CONFIG_HAL_WDT_USE_ROM_IMPL=y -CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y -CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y -# CONFIG_HAL_ECDSA_GEN_SIG_CM is not set -# end of Hardware Abstraction Layer (HAL) and Low Level (LL) - -# -# Heap memory debugging -# -CONFIG_HEAP_POISONING_DISABLED=y -# CONFIG_HEAP_POISONING_LIGHT is not set -# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y -# CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set -# CONFIG_HEAP_USE_HOOKS is not set -# CONFIG_HEAP_TASK_TRACKING is not set -# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set -# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set -# end of Heap memory debugging - -# -# Log -# - -# -# Log Level -# -# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set -# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y -# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y -# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set -# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set -CONFIG_LOG_MAXIMUM_LEVEL=3 - -# -# Level Settings -# -# CONFIG_LOG_MASTER_LEVEL is not set -CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y -# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set -# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y -# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set -CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31 -# end of Level Settings -# end of Log Level - -# -# Format -# -# CONFIG_LOG_COLORS is not set -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set -# end of Format -# end of Log - -# -# LWIP -# -CONFIG_LWIP_ENABLE=y -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -# CONFIG_LWIP_NETIF_API is not set -CONFIG_LWIP_TCPIP_TASK_PRIO=18 -# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -# CONFIG_LWIP_IRAM_OPTIMIZATION is not set -# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_ND6=y -# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set -CONFIG_LWIP_MAX_SOCKETS=10 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP_DEFAULT_TTL=64 -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_ESP_MLDV6_REPORT=y -CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set -# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set -# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set -CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set -CONFIG_LWIP_DHCP_OPTIONS_LEN=68 -CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 -CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 - -# -# DHCP server -# -CONFIG_LWIP_DHCPS=y -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y -CONFIG_LWIP_DHCPS_ADD_DNS=y -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV4=y -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 -# CONFIG_LWIP_IPV6_FORWARD is not set -# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=16 -CONFIG_LWIP_MAX_LISTENING_TCP=16 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760 -CONFIG_LWIP_TCP_WND_DEFAULT=5760 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 -CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 -# CONFIG_LWIP_TCP_SACK_OUT is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=16 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5 -CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3 -CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10 -# CONFIG_LWIP_PPP_SUPPORT is not set -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -CONFIG_LWIP_ICMP=y -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_SNTP_MAX_SERVERS=1 -# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -CONFIG_LWIP_SNTP_STARTUP_DELAY=y -CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 -# end of SNTP - -# -# DNS -# -CONFIG_LWIP_DNS_MAX_HOST_IP=1 -CONFIG_LWIP_DNS_MAX_SERVERS=3 -# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set -# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set -# end of DNS - -CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y -# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set -# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set -# CONFIG_LWIP_HOOK_IP6_INPUT_NONE is not set -CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT=y -# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - -# -# mbedTLS -# -# CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC is not set -CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y -# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set -# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set -CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y -CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 -CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 -CONFIG_MBEDTLS_DYNAMIC_BUFFER=y -# CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA is not set -# CONFIG_MBEDTLS_DEBUG is not set - -# -# mbedTLS v3.x related -# -# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set -# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set -# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set -# CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE is not set -CONFIG_MBEDTLS_PKCS7_C=y -# end of mbedTLS v3.x related - -# -# Certificate Bundle -# -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 -# end of Certificate Bundle - -# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -CONFIG_MBEDTLS_CMAC_C=y -CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_AES_USE_INTERRUPT=y -CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y -CONFIG_MBEDTLS_HARDWARE_MPI=y -# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set -CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y -CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_HARDWARE_SHA=y -CONFIG_MBEDTLS_ROM_MD5=y -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set -CONFIG_MBEDTLS_HAVE_TIME=y -# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set -# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y -CONFIG_MBEDTLS_SHA512_C=y -# CONFIG_MBEDTLS_SHA3_C is not set -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -# end of TLS Key Exchange Methods - -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# CONFIG_MBEDTLS_NIST_KW_C is not set -# end of Symmetric Ciphers - -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -# end of Certificates - -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y -CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y -# CONFIG_MBEDTLS_DHM_C is not set -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -# CONFIG_MBEDTLS_ECJPAKE_C is not set -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -# CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set -# CONFIG_MBEDTLS_POLY1305_C is not set -# CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set -# CONFIG_MBEDTLS_THREADING_C is not set -CONFIG_MBEDTLS_ERROR_STRINGS=y -CONFIG_MBEDTLS_FS_IO=y -# end of mbedTLS - -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -# CONFIG_MQTT_PROTOCOL_5 is not set -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - -# -# Newlib -# -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y -CONFIG_NEWLIB_NANO_FORMAT=y -CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y -# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set -# end of Newlib - -CONFIG_STDATOMIC_S32C1I_SPIRAM_WORKAROUND=y - -# -# NVS -# -# CONFIG_NVS_ENCRYPTION is not set -# CONFIG_NVS_ASSERT_ERROR_CHECK is not set -# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set -# CONFIG_NVS_ALLOCATE_CACHE_IN_SPIRAM is not set -# end of NVS - -# -# OpenThread -# -# CONFIG_OPENTHREAD_ENABLED is not set - -# -# OpenThread Spinel -# -# CONFIG_OPENTHREAD_SPINEL_ONLY is not set -# end of OpenThread Spinel -# end of OpenThread - -# -# Protocomm -# -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y -# end of Protocomm - -# -# PThreads -# -CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y -# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set -# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set -CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" -# end of PThreads - -# -# MMU Config -# -CONFIG_MMU_PAGE_SIZE_64KB=y -CONFIG_MMU_PAGE_MODE="64KB" -CONFIG_MMU_PAGE_SIZE=0x10000 -# end of MMU Config - -# -# Main Flash configuration -# - -# -# SPI Flash behavior when brownout -# -CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y -CONFIG_SPI_FLASH_BROWNOUT_RESET=y -# end of SPI Flash behavior when brownout - -# -# Optional and Experimental Features (READ DOCS FIRST) -# - -# -# Features here require specific hardware (READ DOCS FIRST!) -# -# CONFIG_SPI_FLASH_HPM_ENA is not set -CONFIG_SPI_FLASH_HPM_AUTO=y -# CONFIG_SPI_FLASH_HPM_DIS is not set -CONFIG_SPI_FLASH_HPM_ON=y -CONFIG_SPI_FLASH_HPM_DC_AUTO=y -# CONFIG_SPI_FLASH_HPM_DC_DISABLE is not set -# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set -CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 -# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set -# end of Optional and Experimental Features (READ DOCS FIRST) -# end of Main Flash configuration - -# -# SPI Flash driver -# -# CONFIG_SPI_FLASH_VERIFY_WRITE is not set -# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set -CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -# CONFIG_SPI_FLASH_ROM_IMPL is not set -CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set -CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y -CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 -CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 -CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 -# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set -# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set -# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set - -# -# Auto-detect flash chips -# -CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y -CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP=y -# end of Auto-detect flash chips - -CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y -# end of SPI Flash driver - -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# - -# -# Websocket -# -CONFIG_WS_TRANSPORT=y -CONFIG_WS_BUFFER_SIZE=1024 -# CONFIG_WS_DYNAMIC_BUFFER is not set -# end of Websocket -# end of TCP Transport - -# -# Ultra Low Power (ULP) Co-processor -# -# CONFIG_ULP_COPROC_ENABLED is not set - -# -# ULP Debugging Options -# -# end of ULP Debugging Options -# end of Ultra Low Power (ULP) Co-processor - -# -# Unity unit testing library -# -CONFIG_UNITY_ENABLE_FLOAT=y -CONFIG_UNITY_ENABLE_DOUBLE=y -# CONFIG_UNITY_ENABLE_64BIT is not set -# CONFIG_UNITY_ENABLE_COLOR is not set -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y -# CONFIG_UNITY_ENABLE_FIXTURE is not set -# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set -# end of Unity unit testing library - -# -# USB-OTG -# -CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=256 -CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y -# CONFIG_USB_HOST_HW_BUFFER_BIAS_IN is not set -# CONFIG_USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT is not set - -# -# Hub Driver Configuration -# - -# -# Root Port configuration -# -CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=250 -CONFIG_USB_HOST_RESET_HOLD_MS=30 -CONFIG_USB_HOST_RESET_RECOVERY_MS=30 -CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=10 -# end of Root Port configuration - -# CONFIG_USB_HOST_HUBS_SUPPORTED is not set -# end of Hub Driver Configuration - -# CONFIG_USB_HOST_ENABLE_ENUM_FILTER_CALLBACK is not set -CONFIG_USB_OTG_SUPPORTED=y -# end of USB-OTG - -# -# Virtual file system -# -CONFIG_VFS_SUPPORT_IO=y -CONFIG_VFS_SUPPORT_DIR=y -CONFIG_VFS_SUPPORT_SELECT=y -CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_VFS_SELECT_IN_RAM=y -CONFIG_VFS_SUPPORT_TERMIOS=y -CONFIG_VFS_MAX_COUNT=8 - -# -# Host File System I/O (Semihosting) -# -CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# end of Host File System I/O (Semihosting) - -CONFIG_VFS_INITIALIZE_DEV_NULL=y -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y -# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set -# end of Wi-Fi Provisioning Manager - -# -# IoT Button -# -CONFIG_BUTTON_PERIOD_TIME_MS=5 -CONFIG_BUTTON_DEBOUNCE_TICKS=2 -CONFIG_BUTTON_SHORT_PRESS_TIME_MS=180 -CONFIG_BUTTON_LONG_PRESS_TIME_MS=1500 -CONFIG_BUTTON_LONG_PRESS_HOLD_SERIAL_TIME_MS=20 -CONFIG_ADC_BUTTON_MAX_CHANNEL=3 -CONFIG_ADC_BUTTON_MAX_BUTTON_PER_CHANNEL=8 -CONFIG_ADC_BUTTON_SAMPLE_TIMES=1 -# end of IoT Button - -# -# CMake Utilities -# -# CONFIG_CU_RELINKER_ENABLE is not set -# CONFIG_CU_DIAGNOSTICS_COLOR_NEVER is not set -CONFIG_CU_DIAGNOSTICS_COLOR_ALWAYS=y -# CONFIG_CU_DIAGNOSTICS_COLOR_AUTO is not set -# CONFIG_CU_GCC_LTO_ENABLE is not set -# CONFIG_CU_GCC_STRING_1BYTE_ALIGN is not set -# end of CMake Utilities - -# -# DSP Library -# -CONFIG_DSP_OPTIMIZATIONS_SUPPORTED=y -# CONFIG_DSP_ANSI is not set -CONFIG_DSP_OPTIMIZED=y -CONFIG_DSP_OPTIMIZATION=1 -# CONFIG_DSP_MAX_FFT_SIZE_512 is not set -# CONFIG_DSP_MAX_FFT_SIZE_1024 is not set -# CONFIG_DSP_MAX_FFT_SIZE_2048 is not set -CONFIG_DSP_MAX_FFT_SIZE_4096=y -# CONFIG_DSP_MAX_FFT_SIZE_8192 is not set -# CONFIG_DSP_MAX_FFT_SIZE_16384 is not set -# CONFIG_DSP_MAX_FFT_SIZE_32768 is not set -CONFIG_DSP_MAX_FFT_SIZE=4096 -# end of DSP Library - -# -# Camera configuration -# -CONFIG_OV7670_SUPPORT=y -CONFIG_OV7725_SUPPORT=y -CONFIG_NT99141_SUPPORT=y -CONFIG_OV2640_SUPPORT=y -CONFIG_OV3660_SUPPORT=y -CONFIG_OV5640_SUPPORT=y -CONFIG_GC2145_SUPPORT=y -CONFIG_GC032A_SUPPORT=y -CONFIG_GC0308_SUPPORT=y -CONFIG_BF3005_SUPPORT=y -CONFIG_BF20A6_SUPPORT=y -# CONFIG_SC101IOT_SUPPORT is not set -CONFIG_SC030IOT_SUPPORT=y -# CONFIG_SC031GS_SUPPORT is not set -CONFIG_MEGA_CCM_SUPPORT=y -# CONFIG_SCCB_HARDWARE_I2C_PORT0 is not set -CONFIG_SCCB_HARDWARE_I2C_PORT1=y -CONFIG_SCCB_CLK_FREQ=100000 -# CONFIG_GC_SENSOR_WINDOWING_MODE is not set -CONFIG_GC_SENSOR_SUBSAMPLE_MODE=y -CONFIG_CAMERA_TASK_STACK_SIZE=2048 -CONFIG_CAMERA_CORE0=y -# CONFIG_CAMERA_CORE1 is not set -# CONFIG_CAMERA_NO_AFFINITY is not set -CONFIG_CAMERA_DMA_BUFFER_SIZE_MAX=32768 -CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_AUTO=y -# CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_CUSTOM is not set -# CONFIG_CAMERA_CONVERTER_ENABLED is not set -# CONFIG_LCD_CAM_ISR_IRAM_SAFE is not set -# end of Camera configuration - -# -# Audio Codec Device Configuration -# -# CONFIG_CODEC_I2C_BACKWARD_COMPATIBLE is not set -CONFIG_CODEC_ES8311_SUPPORT=y -CONFIG_CODEC_ES7210_SUPPORT=y -CONFIG_CODEC_ES7243_SUPPORT=y -CONFIG_CODEC_ES7243E_SUPPORT=y -CONFIG_CODEC_ES8156_SUPPORT=y -CONFIG_CODEC_AW88298_SUPPORT=y -CONFIG_CODEC_ES8374_SUPPORT=y -CONFIG_CODEC_ES8388_SUPPORT=y -CONFIG_CODEC_TAS5805M_SUPPORT=y -# CONFIG_CODEC_ZL38063_SUPPORT is not set -# end of Audio Codec Device Configuration - -# -# ESP LCD TOUCH -# -CONFIG_ESP_LCD_TOUCH_MAX_POINTS=5 -CONFIG_ESP_LCD_TOUCH_MAX_BUTTONS=1 -# end of ESP LCD TOUCH - -# -# ESP LVGL PORT -# -# end of ESP LVGL PORT - -# -# IOT Knob -# -CONFIG_KNOB_PERIOD_TIME_MS=3 -CONFIG_KNOB_DEBOUNCE_TICKS=2 -CONFIG_KNOB_HIGH_LIMIT=1000 -CONFIG_KNOB_LOW_LIMIT=-1000 -# end of IOT Knob - -# -# LVGL configuration -# -CONFIG_LV_CONF_SKIP=y -# CONFIG_LV_CONF_MINIMAL is not set - -# -# Color Settings -# -# CONFIG_LV_COLOR_DEPTH_32 is not set -# CONFIG_LV_COLOR_DEPTH_24 is not set -CONFIG_LV_COLOR_DEPTH_16=y -# CONFIG_LV_COLOR_DEPTH_8 is not set -# CONFIG_LV_COLOR_DEPTH_1 is not set -CONFIG_LV_COLOR_DEPTH=16 -# end of Color Settings - -# -# Memory Settings -# -# CONFIG_LV_USE_BUILTIN_MALLOC is not set -CONFIG_LV_USE_CLIB_MALLOC=y -# CONFIG_LV_USE_MICROPYTHON_MALLOC is not set -# CONFIG_LV_USE_RTTHREAD_MALLOC is not set -# CONFIG_LV_USE_CUSTOM_MALLOC is not set -# CONFIG_LV_USE_BUILTIN_STRING is not set -CONFIG_LV_USE_CLIB_STRING=y -# CONFIG_LV_USE_CUSTOM_STRING is not set -# CONFIG_LV_USE_BUILTIN_SPRINTF is not set -CONFIG_LV_USE_CLIB_SPRINTF=y -# CONFIG_LV_USE_CUSTOM_SPRINTF is not set -# end of Memory Settings - -# -# HAL Settings -# -CONFIG_LV_DEF_REFR_PERIOD=33 -CONFIG_LV_DPI_DEF=130 -# end of HAL Settings - -# -# Operating System (OS) -# -CONFIG_LV_OS_NONE=y -# CONFIG_LV_OS_PTHREAD is not set -# CONFIG_LV_OS_FREERTOS is not set -# CONFIG_LV_OS_CMSIS_RTOS2 is not set -# CONFIG_LV_OS_RTTHREAD is not set -# CONFIG_LV_OS_WINDOWS is not set -# CONFIG_LV_OS_MQX is not set -# CONFIG_LV_OS_CUSTOM is not set -CONFIG_LV_USE_OS=0 -# end of Operating System (OS) - -# -# Rendering Configuration -# -CONFIG_LV_DRAW_BUF_STRIDE_ALIGN=1 -CONFIG_LV_DRAW_BUF_ALIGN=4 -CONFIG_LV_DRAW_LAYER_SIMPLE_BUF_SIZE=24576 -CONFIG_LV_USE_DRAW_SW=y -CONFIG_LV_DRAW_SW_SUPPORT_RGB565=y -CONFIG_LV_DRAW_SW_SUPPORT_RGB565A8=y -CONFIG_LV_DRAW_SW_SUPPORT_RGB888=y -CONFIG_LV_DRAW_SW_SUPPORT_XRGB8888=y -CONFIG_LV_DRAW_SW_SUPPORT_ARGB8888=y -CONFIG_LV_DRAW_SW_SUPPORT_L8=y -CONFIG_LV_DRAW_SW_SUPPORT_AL88=y -CONFIG_LV_DRAW_SW_SUPPORT_A8=y -CONFIG_LV_DRAW_SW_SUPPORT_I1=y -CONFIG_LV_DRAW_SW_DRAW_UNIT_CNT=1 -# CONFIG_LV_USE_DRAW_ARM2D_SYNC is not set -# CONFIG_LV_USE_NATIVE_HELIUM_ASM is not set -CONFIG_LV_DRAW_SW_COMPLEX=y -# CONFIG_LV_USE_DRAW_SW_COMPLEX_GRADIENTS is not set -CONFIG_LV_DRAW_SW_SHADOW_CACHE_SIZE=0 -CONFIG_LV_DRAW_SW_CIRCLE_CACHE_SIZE=4 -CONFIG_LV_DRAW_SW_ASM_NONE=y -# CONFIG_LV_DRAW_SW_ASM_NEON is not set -# CONFIG_LV_DRAW_SW_ASM_HELIUM is not set -# CONFIG_LV_DRAW_SW_ASM_CUSTOM is not set -CONFIG_LV_USE_DRAW_SW_ASM=0 -# CONFIG_LV_USE_DRAW_VGLITE is not set -# CONFIG_LV_USE_PXP is not set -# CONFIG_LV_USE_DRAW_DAVE2D is not set -# CONFIG_LV_USE_DRAW_SDL is not set -# CONFIG_LV_USE_DRAW_VG_LITE is not set -# CONFIG_LV_USE_VECTOR_GRAPHIC is not set -# end of Rendering Configuration - -# -# Feature Configuration -# - -# -# Logging -# -# CONFIG_LV_USE_LOG is not set -# end of Logging - -# -# Asserts -# -CONFIG_LV_USE_ASSERT_NULL=y -CONFIG_LV_USE_ASSERT_MALLOC=y -# CONFIG_LV_USE_ASSERT_STYLE is not set -# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set -# CONFIG_LV_USE_ASSERT_OBJ is not set -CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" -# end of Asserts - -# -# Debug -# -# CONFIG_LV_USE_REFR_DEBUG is not set -# CONFIG_LV_USE_LAYER_DEBUG is not set -# CONFIG_LV_USE_PARALLEL_DRAW_DEBUG is not set -# end of Debug - -# -# Others -# -# CONFIG_LV_ENABLE_GLOBAL_CUSTOM is not set -CONFIG_LV_CACHE_DEF_SIZE=0 -CONFIG_LV_IMAGE_HEADER_CACHE_DEF_CNT=0 -CONFIG_LV_GRADIENT_MAX_STOPS=2 -CONFIG_LV_COLOR_MIX_ROUND_OFS=128 -# CONFIG_LV_OBJ_STYLE_CACHE is not set -# CONFIG_LV_USE_OBJ_ID is not set -# CONFIG_LV_USE_OBJ_PROPERTY is not set -# end of Others -# end of Feature Configuration - -# -# Compiler Settings -# -# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set -CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 -# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set -# CONFIG_LV_USE_FLOAT is not set -# CONFIG_LV_USE_MATRIX is not set -# CONFIG_LV_USE_PRIVATE_API is not set -# end of Compiler Settings - -# -# Font Usage -# - -# -# Enable built-in fonts -# -# CONFIG_LV_FONT_MONTSERRAT_8 is not set -# CONFIG_LV_FONT_MONTSERRAT_10 is not set -# CONFIG_LV_FONT_MONTSERRAT_12 is not set -CONFIG_LV_FONT_MONTSERRAT_14=y -# CONFIG_LV_FONT_MONTSERRAT_16 is not set -# CONFIG_LV_FONT_MONTSERRAT_18 is not set -# CONFIG_LV_FONT_MONTSERRAT_20 is not set -# CONFIG_LV_FONT_MONTSERRAT_22 is not set -# CONFIG_LV_FONT_MONTSERRAT_24 is not set -# CONFIG_LV_FONT_MONTSERRAT_26 is not set -# CONFIG_LV_FONT_MONTSERRAT_28 is not set -# CONFIG_LV_FONT_MONTSERRAT_30 is not set -# CONFIG_LV_FONT_MONTSERRAT_32 is not set -# CONFIG_LV_FONT_MONTSERRAT_34 is not set -# CONFIG_LV_FONT_MONTSERRAT_36 is not set -# CONFIG_LV_FONT_MONTSERRAT_38 is not set -# CONFIG_LV_FONT_MONTSERRAT_40 is not set -# CONFIG_LV_FONT_MONTSERRAT_42 is not set -# CONFIG_LV_FONT_MONTSERRAT_44 is not set -# CONFIG_LV_FONT_MONTSERRAT_46 is not set -# CONFIG_LV_FONT_MONTSERRAT_48 is not set -# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set -# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set -# CONFIG_LV_FONT_SIMSUN_14_CJK is not set -# CONFIG_LV_FONT_SIMSUN_16_CJK is not set -# CONFIG_LV_FONT_UNSCII_8 is not set -# CONFIG_LV_FONT_UNSCII_16 is not set -# end of Enable built-in fonts - -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_10 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set -CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set -# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set -# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set -# CONFIG_LV_FONT_DEFAULT_SIMSUN_14_CJK is not set -# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set -# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set -# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set -CONFIG_LV_FONT_FMT_TXT_LARGE=y -CONFIG_LV_USE_FONT_COMPRESSED=y -CONFIG_LV_USE_FONT_PLACEHOLDER=y -# end of Font Usage - -# -# Text Settings -# -CONFIG_LV_TXT_ENC_UTF8=y -# CONFIG_LV_TXT_ENC_ASCII is not set -CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_)}" -CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 -# CONFIG_LV_USE_BIDI is not set -# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set -# end of Text Settings - -# -# Widget Usage -# -CONFIG_LV_WIDGETS_HAS_DEFAULT_VALUE=y -# CONFIG_LV_USE_ANIMIMG is not set -CONFIG_LV_USE_ARC=y -CONFIG_LV_USE_BAR=y -CONFIG_LV_USE_BUTTON=y -CONFIG_LV_USE_BUTTONMATRIX=y -# CONFIG_LV_USE_CALENDAR is not set -CONFIG_LV_USE_CANVAS=y -# CONFIG_LV_USE_CHART is not set -CONFIG_LV_USE_CHECKBOX=y -CONFIG_LV_USE_DROPDOWN=y -CONFIG_LV_USE_IMAGE=y -CONFIG_LV_USE_IMAGEBUTTON=y -# CONFIG_LV_USE_KEYBOARD is not set -CONFIG_LV_USE_LABEL=y -CONFIG_LV_LABEL_TEXT_SELECTION=y -CONFIG_LV_LABEL_LONG_TXT_HINT=y -CONFIG_LV_LABEL_WAIT_CHAR_COUNT=3 -# CONFIG_LV_USE_LED is not set -CONFIG_LV_USE_LINE=y -# CONFIG_LV_USE_LIST is not set -# CONFIG_LV_USE_MENU is not set -# CONFIG_LV_USE_MSGBOX is not set -CONFIG_LV_USE_ROLLER=y -CONFIG_LV_USE_SCALE=y -CONFIG_LV_USE_SLIDER=y -# CONFIG_LV_USE_SPAN is not set -# CONFIG_LV_USE_SPINBOX is not set -# CONFIG_LV_USE_SPINNER is not set -CONFIG_LV_USE_SWITCH=y -CONFIG_LV_USE_TEXTAREA=y -CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 -CONFIG_LV_USE_TABLE=y -# CONFIG_LV_USE_TABVIEW is not set -# CONFIG_LV_USE_TILEVIEW is not set -# CONFIG_LV_USE_WIN is not set -# end of Widget Usage - -# -# Themes -# -CONFIG_LV_USE_THEME_DEFAULT=y -# CONFIG_LV_THEME_DEFAULT_DARK is not set -CONFIG_LV_THEME_DEFAULT_GROW=y -CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 -CONFIG_LV_USE_THEME_SIMPLE=y -# CONFIG_LV_USE_THEME_MONO is not set -# end of Themes - -# -# Layouts -# -CONFIG_LV_USE_FLEX=y -CONFIG_LV_USE_GRID=y -# end of Layouts - -# -# 3rd Party Libraries -# -CONFIG_LV_FS_DEFAULT_DRIVE_LETTER=0 -# CONFIG_LV_USE_FS_STDIO is not set -# CONFIG_LV_USE_FS_POSIX is not set -# CONFIG_LV_USE_FS_WIN32 is not set -# CONFIG_LV_USE_FS_FATFS is not set -# CONFIG_LV_USE_FS_MEMFS is not set -# CONFIG_LV_USE_FS_LITTLEFS is not set -# CONFIG_LV_USE_FS_ARDUINO_ESP_LITTLEFS is not set -# CONFIG_LV_USE_FS_ARDUINO_SD is not set -# CONFIG_LV_USE_LODEPNG is not set -# CONFIG_LV_USE_LIBPNG is not set -# CONFIG_LV_USE_BMP is not set -# CONFIG_LV_USE_TJPGD is not set -# CONFIG_LV_USE_LIBJPEG_TURBO is not set -# CONFIG_LV_USE_GIF is not set -# CONFIG_LV_BIN_DECODER_RAM_LOAD is not set -# CONFIG_LV_USE_RLE is not set -# CONFIG_LV_USE_QRCODE is not set -# CONFIG_LV_USE_BARCODE is not set -# CONFIG_LV_USE_FREETYPE is not set -# CONFIG_LV_USE_TINY_TTF is not set -# CONFIG_LV_USE_RLOTTIE is not set -# CONFIG_LV_USE_THORVG is not set -# CONFIG_LV_USE_LZ4 is not set -# CONFIG_LV_USE_FFMPEG is not set -# end of 3rd Party Libraries - -# -# Others -# -# CONFIG_LV_USE_SNAPSHOT is not set -# CONFIG_LV_USE_SYSMON is not set -# CONFIG_LV_USE_PROFILER is not set -# CONFIG_LV_USE_MONKEY is not set -# CONFIG_LV_USE_GRIDNAV is not set -# CONFIG_LV_USE_FRAGMENT is not set -CONFIG_LV_USE_IMGFONT=y -CONFIG_LV_USE_OBSERVER=y -# CONFIG_LV_USE_IME_PINYIN is not set -# CONFIG_LV_USE_FILE_EXPLORER is not set -CONFIG_LVGL_VERSION_MAJOR=9 -CONFIG_LVGL_VERSION_MINOR=2 -CONFIG_LVGL_VERSION_PATCH=2 -# end of Others - -# -# Devices -# -# CONFIG_LV_USE_SDL is not set -# CONFIG_LV_USE_X11 is not set -# CONFIG_LV_USE_WAYLAND is not set -# CONFIG_LV_USE_LINUX_FBDEV is not set -# CONFIG_LV_USE_NUTTX is not set -# CONFIG_LV_USE_LINUX_DRM is not set -# CONFIG_LV_USE_TFT_ESPI is not set -# CONFIG_LV_USE_EVDEV is not set -# CONFIG_LV_USE_LIBINPUT is not set -# CONFIG_LV_USE_ST7735 is not set -# CONFIG_LV_USE_ST7789 is not set -# CONFIG_LV_USE_ST7796 is not set -# CONFIG_LV_USE_ILI9341 is not set -# CONFIG_LV_USE_GENERIC_MIPI is not set -# CONFIG_LV_USE_RENESAS_GLCDC is not set -# CONFIG_LV_USE_OPENGLES is not set -# CONFIG_LV_USE_QNX is not set -# end of Devices - -# -# Examples -# -# CONFIG_LV_BUILD_EXAMPLES is not set -# end of Examples - -# -# Demos -# -# CONFIG_LV_USE_DEMO_WIDGETS is not set -# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set -# CONFIG_LV_USE_DEMO_RENDER is not set -# CONFIG_LV_USE_DEMO_SCROLL is not set -# CONFIG_LV_USE_DEMO_STRESS is not set -# CONFIG_LV_USE_DEMO_MUSIC is not set -# CONFIG_LV_USE_DEMO_FLEX_LAYOUT is not set -# CONFIG_LV_USE_DEMO_MULTILANG is not set -# end of Demos -# end of LVGL configuration - -# -# SH1106 ESP-IDF Driver -# -# end of Component config - -# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set - -# Deprecated options for backward compatibility -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set -# CONFIG_NO_BLOBS is not set -CONFIG_LOG_BOOTLOADER_LEVEL_NONE=y -# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_INFO is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=0 -CONFIG_APP_ROLLBACK_ENABLE=y -# CONFIG_APP_ANTI_ROLLBACK is not set -# CONFIG_FLASH_ENCRYPTION_ENABLED is not set -CONFIG_FLASHMODE_QIO=y -# CONFIG_FLASHMODE_QOUT is not set -# CONFIG_FLASHMODE_DIO is not set -# CONFIG_FLASHMODE_DOUT is not set -CONFIG_MONITOR_BAUD=115200 -CONFIG_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y -# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 -CONFIG_CXX_EXCEPTIONS=y -CONFIG_CXX_EXCEPTIONS_EMG_POOL_SIZE=1024 -CONFIG_STACK_CHECK_NONE=y -# CONFIG_STACK_CHECK_NORM is not set -# CONFIG_STACK_CHECK_STRONG is not set -# CONFIG_STACK_CHECK_ALL is not set -# CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -# CONFIG_EXTERNAL_COEX_ENABLE is not set -# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_MCPWM_ISR_IN_IRAM is not set -# CONFIG_EVENT_LOOP_PROFILING is not set -CONFIG_POST_EVENTS_FROM_ISR=y -CONFIG_POST_EVENTS_FROM_IRAM_ISR=y -CONFIG_GDBSTUB_SUPPORT_TASKS=y -CONFIG_GDBSTUB_MAX_TASKS=32 -# CONFIG_OTA_ALLOW_HTTP is not set -CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32S3_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32S3_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# CONFIG_REDUCE_PHY_TX_POWER is not set -# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set -CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y -CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y -CONFIG_ESP32S3_SPIRAM_SUPPORT=y -CONFIG_DEFAULT_PSRAM_CLK_IO=30 -CONFIG_DEFAULT_PSRAM_CS_IO=26 -# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80 is not set -# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set -CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y -CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=240 -CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 -CONFIG_MAIN_TASK_STACK_SIZE=8192 -CONFIG_CONSOLE_UART_DEFAULT=y -# CONFIG_CONSOLE_UART_CUSTOM is not set -# CONFIG_CONSOLE_UART_NONE is not set -# CONFIG_ESP_CONSOLE_UART_NONE is not set -CONFIG_CONSOLE_UART=y -CONFIG_CONSOLE_UART_NUM=0 -CONFIG_CONSOLE_UART_BAUDRATE=115200 -CONFIG_INT_WDT=y -CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_INT_WDT_CHECK_CPU1=y -CONFIG_TASK_WDT=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=10 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y -# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP32S3_DEBUG_OCDAWARE=y -CONFIG_BROWNOUT_DET=y -CONFIG_ESP32S3_BROWNOUT_DET=y -CONFIG_ESP32S3_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_7=y -CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_1 is not set -CONFIG_BROWNOUT_DET_LVL=7 -CONFIG_ESP32S3_BROWNOUT_DET_LVL=7 -CONFIG_IPC_TASK_STACK_SIZE=1280 -CONFIG_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=6 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=8 -# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=6 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -# CONFIG_ESP32_WIFI_IRAM_OPT is not set -# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_WPA_MBEDTLS_CRYPTO=y -CONFIG_WPA_MBEDTLS_TLS_CLIENT=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_SUITE_B_192 is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# CONFIG_WPA_11R_SUPPORT is not set -# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_TIMER_TASK_PRIORITY=1 -CONFIG_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_TIMER_QUEUE_LENGTH=10 -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set -CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y -# CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_L2_TO_L3_COPY is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=32 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=5760 -CONFIG_TCP_WND_DEFAULT=5760 -CONFIG_TCP_RECVMBOX_SIZE=6 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=6 -CONFIG_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_SYSTIMER=y -CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1=y -# CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32S3_TIME_SYSCALL_USE_SYSTIMER is not set -# CONFIG_ESP32S3_TIME_SYSCALL_USE_FRC1 is not set -# CONFIG_ESP32S3_TIME_SYSCALL_USE_NONE is not set -CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set -CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" -CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_SUPPORT_TERMIOS=y -CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# End of deprecated options diff --git a/main/boards/m5stack-tab5/m5stack_tab5.cc b/main/boards/m5stack-tab5/m5stack_tab5.cc index e6522ed..f947f0f 100644 --- a/main/boards/m5stack-tab5/m5stack_tab5.cc +++ b/main/boards/m5stack-tab5/m5stack_tab5.cc @@ -19,13 +19,8 @@ #include "esp_lcd_touch_gt911.h" #include - #define TAG "M5StackTab5Board" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - - #define AUDIO_CODEC_ES8388_ADDR ES8388_CODEC_DEFAULT_ADDR #define LCD_MIPI_DSI_PHY_PWR_LDO_CHAN 3 // LDO_VO3 is connected to VDD_MIPI_DPHY #define LCD_MIPI_DSI_PHY_PWR_LDO_VOLTAGE_MV 2500 @@ -44,8 +39,7 @@ LV_FONT_DECLARE(font_awesome_30_4); class Pi4ioe1 : public I2cDevice { public: - Pi4ioe1(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) - { + Pi4ioe1(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) { WriteReg(PI4IO_REG_CHIP_RESET, 0xFF); uint8_t data = ReadReg(PI4IO_REG_CHIP_RESET); WriteReg(PI4IO_REG_IO_DIR, 0b01111111); // 0: input 1: output @@ -60,8 +54,7 @@ public: class Pi4ioe2 : public I2cDevice { public: - Pi4ioe2(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) - { + Pi4ioe2(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : I2cDevice(i2c_bus, addr) { WriteReg(PI4IO_REG_CHIP_RESET, 0xFF); uint8_t data = ReadReg(PI4IO_REG_CHIP_RESET); WriteReg(PI4IO_REG_IO_DIR, 0b10111001); // 0: input 1: output @@ -74,7 +67,6 @@ public: } }; - class M5StackTab5Board : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -84,8 +76,7 @@ private: Pi4ioe2* pi4ioe2_; esp_lcd_touch_handle_t touch_ = nullptr; - void InitializeI2c() - { + void InitializeI2c() { // Initialize I2C peripheral i2c_master_bus_config_t i2c_bus_cfg = { .i2c_port = (i2c_port_t)1, @@ -102,8 +93,7 @@ private: ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_cfg, &i2c_bus_)); } - void I2cDetect() - { + void I2cDetect() { uint8_t address; printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f\r\n"); for (int i = 0; i < 128; i += 16) { @@ -124,15 +114,13 @@ private: } } - void InitializePi4ioe() - { + void InitializePi4ioe() { ESP_LOGI(TAG, "Init I/O Exapander PI4IOE"); pi4ioe1_ = new Pi4ioe1(i2c_bus_, 0x43); pi4ioe2_ = new Pi4ioe2(i2c_bus_, 0x44); } - void InitializeButtons() - { + void InitializeButtons() { boot_button_.OnClick([this]() { auto& app = Application::GetInstance(); if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { @@ -191,8 +179,7 @@ private: ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); } - void InitializeIli9881cDisplay() - { + void InitializeIli9881cDisplay() { esp_lcd_panel_io_handle_t panel_io = nullptr; esp_lcd_panel_handle_t panel = nullptr; @@ -223,7 +210,7 @@ private: ESP_ERROR_CHECK(esp_lcd_new_panel_io_dbi(mipi_dsi_bus, &dbi_config, &panel_io)); ESP_LOGI(TAG, "Install LCD driver of ili9881c"); - esp_lcd_dpi_panel_config_t dpi_config = {.virtual_channel = 0, + esp_lcd_dpi_panel_config_t dpi_config = {.virtual_channel = 0, .dpi_clk_src = MIPI_DSI_DPI_CLK_SRC_DEFAULT, .dpi_clock_freq_mhz = 60, .pixel_format = LCD_COLOR_PIXEL_FORMAT_RGB565, @@ -268,17 +255,11 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel, true)); display_ = new MipiLcdDisplay(panel_io, panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, - DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: - M5StackTab5Board() : boot_button_(BOOT_BUTTON_GPIO) - { + M5StackTab5Board() : boot_button_(BOOT_BUTTON_GPIO) { InitializeI2c(); I2cDetect(); InitializePi4ioe(); @@ -288,8 +269,7 @@ public: GetBacklight()->RestoreBrightness(); } - virtual AudioCodec* GetAudioCodec() override - { + virtual AudioCodec* GetAudioCodec() override { static Tab5AudioCodec audio_codec(i2c_bus_, AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, @@ -305,13 +285,11 @@ public: return &audio_codec; } - virtual Display* GetDisplay() override - { + virtual Display* GetDisplay() override { return display_; } - virtual Backlight* GetBacklight() override - { + virtual Backlight* GetBacklight() override { static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); return &backlight; } diff --git a/main/boards/m5stack-tab5/tab5_audio_codec.cc b/main/boards/m5stack-tab5/tab5_audio_codec.cc index 25aec58..a8e1a96 100644 --- a/main/boards/m5stack-tab5/tab5_audio_codec.cc +++ b/main/boards/m5stack-tab5/tab5_audio_codec.cc @@ -4,10 +4,8 @@ #include #include - #define TAG "Tab5AudioCodec" - Tab5AudioCodec::Tab5AudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate, gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din, gpio_num_t pa_pin, uint8_t es8388_addr, uint8_t es7210_addr, bool input_reference) { diff --git a/main/boards/magiclick-2p4/magiclick_2p4_board.cc b/main/boards/magiclick-2p4/magiclick_2p4_board.cc index 911592f..770884b 100644 --- a/main/boards/magiclick-2p4/magiclick_2p4_board.cc +++ b/main/boards/magiclick-2p4/magiclick_2p4_board.cc @@ -19,19 +19,11 @@ #define TAG "magiclick_2p4" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class NV3023Display : public SpiLcdDisplay { public: NV3023Display(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy) - : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }) { + : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); // 只需要覆盖颜色相关的样式 @@ -52,7 +44,7 @@ public: // 设置内容区背景色和文本颜色 lv_obj_set_style_bg_color(content_, lv_color_black(), 0); lv_obj_set_style_border_width(content_, 0, 0); - lv_obj_set_style_text_color(emotion_label_, lv_color_white(), 0); + lv_obj_set_style_text_color(emoji_label_, lv_color_white(), 0); lv_obj_set_style_text_color(chat_message_label_, lv_color_white(), 0); } }; @@ -71,7 +63,6 @@ private: esp_lcd_panel_io_handle_t panel_io = nullptr; esp_lcd_panel_handle_t panel = nullptr; - void InitializePowerManager() { power_manager_ = new PowerManager(GPIO_NUM_48); power_manager_->OnChargingStatusChanged([this](bool is_charging) { @@ -233,7 +224,6 @@ public: InitializeSpi(); InitializeNv3023Display(); GetBacklight()->RestoreBrightness(); - } virtual Led* GetLed() override { diff --git a/main/boards/magiclick-2p5/magiclick_2p5_board.cc b/main/boards/magiclick-2p5/magiclick_2p5_board.cc index ac84e58..1db21fa 100644 --- a/main/boards/magiclick-2p5/magiclick_2p5_board.cc +++ b/main/boards/magiclick-2p5/magiclick_2p5_board.cc @@ -22,19 +22,11 @@ #define TAG "magiclick_2p5" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class GC9107Display : public SpiLcdDisplay { public: GC9107Display(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy) - : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }) { + : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { } }; @@ -86,7 +78,6 @@ private: esp_lcd_panel_io_handle_t panel_io = nullptr; esp_lcd_panel_handle_t panel = nullptr; - void InitializePowerManager() { power_manager_ = new PowerManager(GPIO_NUM_48); power_manager_->OnChargingStatusChanged([this](bool is_charging) { @@ -151,7 +142,6 @@ private: } - void InitializeButtons() { main_button_.OnClick([this]() { auto& app = Application::GetInstance(); diff --git a/main/boards/magiclick-c3-v2/magiclick_c3_v2_board.cc b/main/boards/magiclick-c3-v2/magiclick_c3_v2_board.cc index 7fb8551..19f564f 100644 --- a/main/boards/magiclick-c3-v2/magiclick_c3_v2_board.cc +++ b/main/boards/magiclick-c3-v2/magiclick_c3_v2_board.cc @@ -19,19 +19,11 @@ #define TAG "magiclick_c3_v2" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class GC9107Display : public SpiLcdDisplay { public: GC9107Display(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy) - : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }) { + : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); // 只需要覆盖颜色相关的样式 @@ -52,7 +44,7 @@ public: // 设置内容区背景色和文本颜色 lv_obj_set_style_bg_color(content_, lv_color_black(), 0); lv_obj_set_style_border_width(content_, 0, 0); - lv_obj_set_style_text_color(emotion_label_, lv_color_white(), 0); + lv_obj_set_style_text_color(emoji_label_, lv_color_white(), 0); lv_obj_set_style_text_color(chat_message_label_, lv_color_white(), 0); } }; diff --git a/main/boards/magiclick-c3/magiclick_c3_board.cc b/main/boards/magiclick-c3/magiclick_c3_board.cc index 40d4543..373e661 100644 --- a/main/boards/magiclick-c3/magiclick_c3_board.cc +++ b/main/boards/magiclick-c3/magiclick_c3_board.cc @@ -17,19 +17,11 @@ #define TAG "magiclick_c3" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class NV3023Display : public SpiLcdDisplay { public: NV3023Display(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy) - : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }) { + : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); // 只需要覆盖颜色相关的样式 @@ -50,7 +42,7 @@ public: // 设置内容区背景色和文本颜色 lv_obj_set_style_bg_color(content_, lv_color_black(), 0); lv_obj_set_style_border_width(content_, 0, 0); - lv_obj_set_style_text_color(emotion_label_, lv_color_white(), 0); + lv_obj_set_style_text_color(emoji_label_, lv_color_white(), 0); lv_obj_set_style_text_color(chat_message_label_, lv_color_white(), 0); } }; diff --git a/main/boards/minsi-k08-dual/minsi_k08_dual.cc b/main/boards/minsi-k08-dual/minsi_k08_dual.cc index a572417..8fa0bba 100644 --- a/main/boards/minsi-k08-dual/minsi_k08_dual.cc +++ b/main/boards/minsi-k08-dual/minsi_k08_dual.cc @@ -1,260 +1,246 @@ -#include "dual_network_board.h" -//#include "wifi_board.h" -#include "codecs/no_audio_codec.h" -#include "display/lcd_display.h" -#include "system_reset.h" -#include "application.h" -#include "button.h" -#include "config.h" -#include "power_save_timer.h" -#include "mcp_server.h" -#include "lamp_controller.h" -#include "led/single_led.h" -#include "assets/lang_config.h" -#include "power_manager.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#define TAG "MINSI_K08_DUAL" - -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - -class MINSI_K08_DUAL : public DualNetworkBoard { -private: - - Button boot_button_; - Button volume_up_button_; - Button volume_down_button_; - LcdDisplay* display_; - PowerSaveTimer* power_save_timer_; - PowerManager* power_manager_; - esp_lcd_panel_io_handle_t panel_io_ = nullptr; - esp_lcd_panel_handle_t panel_ = nullptr; - - void InitializePowerManager() { - //power_manager_ = new PowerManager(GPIO_NUM_38); - power_manager_ = new PowerManager(GPIO_NUM_3); - power_manager_->OnChargingStatusChanged([this](bool is_charging) { - if (is_charging) { - power_save_timer_->SetEnabled(false); - } else { - power_save_timer_->SetEnabled(true); - //power_save_timer_->SetEnabled(false); - } - }); - } - - void InitializePowerSaveTimer() { - /*rtc_gpio_init(GPIO_NUM_21); - rtc_gpio_set_direction(GPIO_NUM_21, RTC_GPIO_MODE_OUTPUT_ONLY); - rtc_gpio_set_level(GPIO_NUM_21, 1);*/ - - power_save_timer_ = new PowerSaveTimer(-1, 60, 300); - power_save_timer_->OnEnterSleepMode([this]() { - GetDisplay()->SetPowerSaveMode(true); - GetBacklight()->SetBrightness(1); - }); - power_save_timer_->OnExitSleepMode([this]() { - GetDisplay()->SetPowerSaveMode(false); - GetBacklight()->RestoreBrightness(); - }); - power_save_timer_->OnShutdownRequest([this]() { - ESP_LOGI(TAG, "Shutting down"); - //rtc_gpio_set_level(GPIO_NUM_21, 0); - // 启用保持功能,确保睡眠期间电平不变 - //rtc_gpio_hold_en(GPIO_NUM_21); - //esp_lcd_panel_disp_on_off(panel_, false); //关闭显示 - //esp_deep_sleep_start(); - }); - power_save_timer_->SetEnabled(true); - - //power_save_timer_->SetEnabled(false); - } - - void InitializeSpi() { - spi_bus_config_t buscfg = {}; - buscfg.mosi_io_num = DISPLAY_MOSI_PIN; - buscfg.miso_io_num = GPIO_NUM_NC; - buscfg.sclk_io_num = DISPLAY_CLK_PIN; - buscfg.quadwp_io_num = GPIO_NUM_NC; - buscfg.quadhd_io_num = GPIO_NUM_NC; - buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t); - ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); - } - - void InitializeLcdDisplay() { - esp_lcd_panel_io_handle_t panel_io = nullptr; - esp_lcd_panel_handle_t panel = nullptr; - // 液晶屏控制IO初始化 - ESP_LOGD(TAG, "Install panel IO"); - esp_lcd_panel_io_spi_config_t io_config = {}; - io_config.cs_gpio_num = DISPLAY_CS_PIN; - io_config.dc_gpio_num = DISPLAY_DC_PIN; - io_config.spi_mode = 3; - io_config.pclk_hz = 40 * 1000 * 1000; - io_config.trans_queue_depth = 10; - io_config.lcd_cmd_bits = 8; - io_config.lcd_param_bits = 8; - ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); - - // 初始化液晶屏驱动芯片 - ESP_LOGD(TAG, "Install LCD driver"); - esp_lcd_panel_dev_config_t panel_config = {}; - panel_config.reset_gpio_num = DISPLAY_RST_PIN; - panel_config.rgb_ele_order = DISPLAY_RGB_ORDER; - panel_config.bits_per_pixel = 16; - - ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); - - esp_lcd_panel_reset(panel); - - - esp_lcd_panel_init(panel); - esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); - esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); - esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); - - display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), -#endif - }); - } - - void InitializeButtons() { - boot_button_.OnClick([this]() { - auto& app = Application::GetInstance(); - if (GetNetworkType() == NetworkType::WIFI) { - if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { - // cast to WifiBoard - auto& wifi_board = static_cast(GetCurrentBoard()); - wifi_board.ResetWifiConfiguration(); - } - } - app.ToggleChatState(); - }); - boot_button_.OnDoubleClick([this]() { - auto& app = Application::GetInstance(); - if (app.GetDeviceState() == kDeviceStateStarting || app.GetDeviceState() == kDeviceStateWifiConfiguring) { - SwitchNetworkType(); - } - }); - - volume_up_button_.OnClick([this]() { - power_save_timer_->WakeUp(); - auto codec = GetAudioCodec(); - auto volume = codec->output_volume() + 10; - if (volume > 100) { - volume = 100; - } - codec->SetOutputVolume(volume); - GetDisplay()->ShowNotification(Lang::Strings::VOLUME + std::to_string(volume)); - }); - - volume_up_button_.OnLongPress([this]() { - power_save_timer_->WakeUp(); - GetAudioCodec()->SetOutputVolume(100); - GetDisplay()->ShowNotification(Lang::Strings::MAX_VOLUME); - }); - - volume_down_button_.OnClick([this]() { - power_save_timer_->WakeUp(); - auto codec = GetAudioCodec(); - auto volume = codec->output_volume() - 10; - if (volume < 0) { - volume = 0; - } - codec->SetOutputVolume(volume); - GetDisplay()->ShowNotification(Lang::Strings::VOLUME + std::to_string(volume)); - }); - - volume_down_button_.OnLongPress([this]() { - power_save_timer_->WakeUp(); - GetAudioCodec()->SetOutputVolume(0); - GetDisplay()->ShowNotification(Lang::Strings::MUTED); - }); - } - - // 物联网初始化,添加对 AI 可见设备 - void InitializeTools() { - static LampController lamp(LAMP_GPIO); - } - - -public: - MINSI_K08_DUAL() : DualNetworkBoard(ML307_TX_PIN, ML307_RX_PIN), - boot_button_(BOOT_BUTTON_GPIO), - volume_up_button_(VOLUME_UP_BUTTON_GPIO), - volume_down_button_(VOLUME_DOWN_BUTTON_GPIO) { - InitializePowerManager(); - InitializePowerSaveTimer(); - InitializeSpi(); - InitializeLcdDisplay(); - InitializeButtons(); - InitializeTools(); - if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { - GetBacklight()->RestoreBrightness(); - } - } - - virtual Led* GetLed() override { - static SingleLed led(BUILTIN_LED_GPIO); - return &led; - } - - virtual AudioCodec* GetAudioCodec() override { - static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, - AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); - return &audio_codec; - } - - virtual Display* GetDisplay() override { - return display_; - } - - virtual Backlight* GetBacklight() override { - if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { - static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); - return &backlight; - } - return nullptr; - } - - virtual bool GetBatteryLevel(int& level, bool& charging, bool& discharging) override { - static bool last_discharging = false; - charging = power_manager_->IsCharging(); - discharging = power_manager_->IsDischarging(); - if (discharging != last_discharging) { - power_save_timer_->SetEnabled(discharging); - //power_save_timer_->SetEnabled(false); - last_discharging = discharging; - } - level = power_manager_->GetBatteryLevel(); - return true; - } - - virtual void SetPowerSaveMode(bool enabled) override { - if (!enabled) { - power_save_timer_->WakeUp(); - } - DualNetworkBoard::SetPowerSaveMode(enabled); - } -}; - -DECLARE_BOARD(MINSI_K08_DUAL); +#include "dual_network_board.h" +//#include "wifi_board.h" +#include "codecs/no_audio_codec.h" +#include "display/lcd_display.h" +#include "system_reset.h" +#include "application.h" +#include "button.h" +#include "config.h" +#include "power_save_timer.h" +#include "mcp_server.h" +#include "lamp_controller.h" +#include "led/single_led.h" +#include "assets/lang_config.h" +#include "power_manager.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define TAG "MINSI_K08_DUAL" + +class MINSI_K08_DUAL : public DualNetworkBoard { +private: + + Button boot_button_; + Button volume_up_button_; + Button volume_down_button_; + LcdDisplay* display_; + PowerSaveTimer* power_save_timer_; + PowerManager* power_manager_; + esp_lcd_panel_io_handle_t panel_io_ = nullptr; + esp_lcd_panel_handle_t panel_ = nullptr; + + void InitializePowerManager() { + //power_manager_ = new PowerManager(GPIO_NUM_38); + power_manager_ = new PowerManager(GPIO_NUM_3); + power_manager_->OnChargingStatusChanged([this](bool is_charging) { + if (is_charging) { + power_save_timer_->SetEnabled(false); + } else { + power_save_timer_->SetEnabled(true); + //power_save_timer_->SetEnabled(false); + } + }); + } + + void InitializePowerSaveTimer() { + /*rtc_gpio_init(GPIO_NUM_21); + rtc_gpio_set_direction(GPIO_NUM_21, RTC_GPIO_MODE_OUTPUT_ONLY); + rtc_gpio_set_level(GPIO_NUM_21, 1);*/ + + power_save_timer_ = new PowerSaveTimer(-1, 60, 300); + power_save_timer_->OnEnterSleepMode([this]() { + GetDisplay()->SetPowerSaveMode(true); + GetBacklight()->SetBrightness(1); + }); + power_save_timer_->OnExitSleepMode([this]() { + GetDisplay()->SetPowerSaveMode(false); + GetBacklight()->RestoreBrightness(); + }); + power_save_timer_->OnShutdownRequest([this]() { + ESP_LOGI(TAG, "Shutting down"); + //rtc_gpio_set_level(GPIO_NUM_21, 0); + // 启用保持功能,确保睡眠期间电平不变 + //rtc_gpio_hold_en(GPIO_NUM_21); + //esp_lcd_panel_disp_on_off(panel_, false); //关闭显示 + //esp_deep_sleep_start(); + }); + power_save_timer_->SetEnabled(true); + + //power_save_timer_->SetEnabled(false); + } + + void InitializeSpi() { + spi_bus_config_t buscfg = {}; + buscfg.mosi_io_num = DISPLAY_MOSI_PIN; + buscfg.miso_io_num = GPIO_NUM_NC; + buscfg.sclk_io_num = DISPLAY_CLK_PIN; + buscfg.quadwp_io_num = GPIO_NUM_NC; + buscfg.quadhd_io_num = GPIO_NUM_NC; + buscfg.max_transfer_sz = DISPLAY_WIDTH * DISPLAY_HEIGHT * sizeof(uint16_t); + ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); + } + + void InitializeLcdDisplay() { + esp_lcd_panel_io_handle_t panel_io = nullptr; + esp_lcd_panel_handle_t panel = nullptr; + // 液晶屏控制IO初始化 + ESP_LOGD(TAG, "Install panel IO"); + esp_lcd_panel_io_spi_config_t io_config = {}; + io_config.cs_gpio_num = DISPLAY_CS_PIN; + io_config.dc_gpio_num = DISPLAY_DC_PIN; + io_config.spi_mode = 3; + io_config.pclk_hz = 40 * 1000 * 1000; + io_config.trans_queue_depth = 10; + io_config.lcd_cmd_bits = 8; + io_config.lcd_param_bits = 8; + ESP_ERROR_CHECK(esp_lcd_new_panel_io_spi(SPI3_HOST, &io_config, &panel_io)); + + // 初始化液晶屏驱动芯片 + ESP_LOGD(TAG, "Install LCD driver"); + esp_lcd_panel_dev_config_t panel_config = {}; + panel_config.reset_gpio_num = DISPLAY_RST_PIN; + panel_config.rgb_ele_order = DISPLAY_RGB_ORDER; + panel_config.bits_per_pixel = 16; + + ESP_ERROR_CHECK(esp_lcd_new_panel_st7789(panel_io, &panel_config, &panel)); + + esp_lcd_panel_reset(panel); + + esp_lcd_panel_init(panel); + esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR); + esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); + esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); + + display_ = new SpiLcdDisplay(panel_io, panel, + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); + } + + void InitializeButtons() { + boot_button_.OnClick([this]() { + auto& app = Application::GetInstance(); + if (GetNetworkType() == NetworkType::WIFI) { + if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) { + // cast to WifiBoard + auto& wifi_board = static_cast(GetCurrentBoard()); + wifi_board.ResetWifiConfiguration(); + } + } + app.ToggleChatState(); + }); + boot_button_.OnDoubleClick([this]() { + auto& app = Application::GetInstance(); + if (app.GetDeviceState() == kDeviceStateStarting || app.GetDeviceState() == kDeviceStateWifiConfiguring) { + SwitchNetworkType(); + } + }); + + volume_up_button_.OnClick([this]() { + power_save_timer_->WakeUp(); + auto codec = GetAudioCodec(); + auto volume = codec->output_volume() + 10; + if (volume > 100) { + volume = 100; + } + codec->SetOutputVolume(volume); + GetDisplay()->ShowNotification(Lang::Strings::VOLUME + std::to_string(volume)); + }); + + volume_up_button_.OnLongPress([this]() { + power_save_timer_->WakeUp(); + GetAudioCodec()->SetOutputVolume(100); + GetDisplay()->ShowNotification(Lang::Strings::MAX_VOLUME); + }); + + volume_down_button_.OnClick([this]() { + power_save_timer_->WakeUp(); + auto codec = GetAudioCodec(); + auto volume = codec->output_volume() - 10; + if (volume < 0) { + volume = 0; + } + codec->SetOutputVolume(volume); + GetDisplay()->ShowNotification(Lang::Strings::VOLUME + std::to_string(volume)); + }); + + volume_down_button_.OnLongPress([this]() { + power_save_timer_->WakeUp(); + GetAudioCodec()->SetOutputVolume(0); + GetDisplay()->ShowNotification(Lang::Strings::MUTED); + }); + } + + // 物联网初始化,添加对 AI 可见设备 + void InitializeTools() { + static LampController lamp(LAMP_GPIO); + } + +public: + MINSI_K08_DUAL() : DualNetworkBoard(ML307_TX_PIN, ML307_RX_PIN), + boot_button_(BOOT_BUTTON_GPIO), + volume_up_button_(VOLUME_UP_BUTTON_GPIO), + volume_down_button_(VOLUME_DOWN_BUTTON_GPIO) { + InitializePowerManager(); + InitializePowerSaveTimer(); + InitializeSpi(); + InitializeLcdDisplay(); + InitializeButtons(); + InitializeTools(); + if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { + GetBacklight()->RestoreBrightness(); + } + } + + virtual Led* GetLed() override { + static SingleLed led(BUILTIN_LED_GPIO); + return &led; + } + + virtual AudioCodec* GetAudioCodec() override { + static NoAudioCodecSimplex audio_codec(AUDIO_INPUT_SAMPLE_RATE, AUDIO_OUTPUT_SAMPLE_RATE, + AUDIO_I2S_SPK_GPIO_BCLK, AUDIO_I2S_SPK_GPIO_LRCK, AUDIO_I2S_SPK_GPIO_DOUT, AUDIO_I2S_MIC_GPIO_SCK, AUDIO_I2S_MIC_GPIO_WS, AUDIO_I2S_MIC_GPIO_DIN); + return &audio_codec; + } + + virtual Display* GetDisplay() override { + return display_; + } + + virtual Backlight* GetBacklight() override { + if (DISPLAY_BACKLIGHT_PIN != GPIO_NUM_NC) { + static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); + return &backlight; + } + return nullptr; + } + + virtual bool GetBatteryLevel(int& level, bool& charging, bool& discharging) override { + static bool last_discharging = false; + charging = power_manager_->IsCharging(); + discharging = power_manager_->IsDischarging(); + if (discharging != last_discharging) { + power_save_timer_->SetEnabled(discharging); + //power_save_timer_->SetEnabled(false); + last_discharging = discharging; + } + level = power_manager_->GetBatteryLevel(); + return true; + } + + virtual void SetPowerSaveMode(bool enabled) override { + if (!enabled) { + power_save_timer_->WakeUp(); + } + DualNetworkBoard::SetPowerSaveMode(enabled); + } +}; + +DECLARE_BOARD(MINSI_K08_DUAL); diff --git a/main/boards/mixgo-nova/README.md b/main/boards/mixgo-nova/README.md index 7c94c40..8a992ef 100644 --- a/main/boards/mixgo-nova/README.md +++ b/main/boards/mixgo-nova/README.md @@ -56,7 +56,7 @@ Component config -> ESP PSRAM -> SPI RAM config -> Mode (QUAD/OCT) -> QUAD Mode ``` Serial flasher config -> Flash size -> 8 MB -Partition Table -> Custom partition CSV file -> partitions/v1/8m.csv +Partition Table -> Custom partition CSV file -> partitions/v2/8m.csv ``` **编译:** diff --git a/main/boards/mixgo-nova/config.json b/main/boards/mixgo-nova/config.json index bb80ab4..7c9d553 100644 --- a/main/boards/mixgo-nova/config.json +++ b/main/boards/mixgo-nova/config.json @@ -6,7 +6,7 @@ "sdkconfig_append": [ "CONFIG_SPIRAM_MODE_QUAD=y", "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"", + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"", "CONFIG_LCD_ST7735_128X160=y" ] } diff --git a/main/boards/mixgo-nova/mixgo-nova.cc b/main/boards/mixgo-nova/mixgo-nova.cc index bc841f5..fdaaea3 100644 --- a/main/boards/mixgo-nova/mixgo-nova.cc +++ b/main/boards/mixgo-nova/mixgo-nova.cc @@ -16,10 +16,6 @@ #define TAG "MIXGO_NOVA" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - - class MIXGO_NOVA : public WifiBoard { private: Button boot_button_; @@ -126,12 +122,7 @@ private: esp_lcd_panel_swap_xy(panel, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/movecall-cuican-esp32s3/README.md b/main/boards/movecall-cuican-esp32s3/README.md index ad7af3b..7d8eeba 100644 --- a/main/boards/movecall-cuican-esp32s3/README.md +++ b/main/boards/movecall-cuican-esp32s3/README.md @@ -22,7 +22,7 @@ Serial flasher config -> Flash size -> 8 MB ### 分区表配置: ``` -Partition Table -> Custom partition CSV file -> partitions/v1/8m.csv +Partition Table -> Custom partition CSV file -> partitions/v2/8m.csv ``` ### 开发板选择: diff --git a/main/boards/movecall-cuican-esp32s3/config.json b/main/boards/movecall-cuican-esp32s3/config.json index dc12078..13a8eb4 100644 --- a/main/boards/movecall-cuican-esp32s3/config.json +++ b/main/boards/movecall-cuican-esp32s3/config.json @@ -5,7 +5,7 @@ "name": "movecall-cuican-esp32s3", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"", + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"", "CONFIG_COMPILER_OPTIMIZATION_SIZE=y" ] } diff --git a/main/boards/movecall-cuican-esp32s3/movecall_cuican_esp32s3.cc b/main/boards/movecall-cuican-esp32s3/movecall_cuican_esp32s3.cc index ed33f92..00ba5bc 100644 --- a/main/boards/movecall-cuican-esp32s3/movecall_cuican_esp32s3.cc +++ b/main/boards/movecall-cuican-esp32s3/movecall_cuican_esp32s3.cc @@ -20,9 +20,6 @@ #define TAG "MovecallCuicanESP32S3" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class MovecallCuicanESP32S3 : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -79,12 +76,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true)); display_ = new SpiLcdDisplay(io_handle, panel_handle, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/movecall-moji-esp32s3/movecall_moji_esp32s3.cc b/main/boards/movecall-moji-esp32s3/movecall_moji_esp32s3.cc index dca6071..6132977 100644 --- a/main/boards/movecall-moji-esp32s3/movecall_moji_esp32s3.cc +++ b/main/boards/movecall-moji-esp32s3/movecall_moji_esp32s3.cc @@ -20,10 +20,6 @@ #define TAG "MovecallMojiESP32S3" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - class CustomLcdDisplay : public SpiLcdDisplay { public: CustomLcdDisplay(esp_lcd_panel_io_handle_t io_handle, @@ -35,12 +31,7 @@ public: bool mirror_x, bool mirror_y, bool swap_xy) - : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }) { + : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); // 由于屏幕是圆的,所以状态栏需要增加左右内边距 @@ -105,12 +96,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true)); display_ = new SpiLcdDisplay(io_handle, panel_handle, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/otto-robot/config.json b/main/boards/otto-robot/config.json index fa6b61a..a00a827 100644 --- a/main/boards/otto-robot/config.json +++ b/main/boards/otto-robot/config.json @@ -4,6 +4,8 @@ { "name": "otto-robot", "sdkconfig_append": [ + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/16m.csv\"", + "CONFIG_LVGL_USE_GIF=y" ] } ] diff --git a/main/boards/otto-robot/otto_emoji_display.cc b/main/boards/otto-robot/otto_emoji_display.cc index 64a1e08..32158ff 100644 --- a/main/boards/otto-robot/otto_emoji_display.cc +++ b/main/boards/otto-robot/otto_emoji_display.cc @@ -1,4 +1,5 @@ #include "otto_emoji_display.h" +#include "lvgl_theme.h" #include #include @@ -51,9 +52,8 @@ const OttoEmojiDisplay::EmotionMap OttoEmojiDisplay::emotion_maps_[] = { OttoEmojiDisplay::OttoEmojiDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, - bool mirror_y, bool swap_xy, DisplayFonts fonts) - : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - fonts), + bool mirror_y, bool swap_xy) + : SpiLcdDisplay(panel_io, panel, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy), emotion_gif_(nullptr) { SetupGifContainer(); }; @@ -61,8 +61,8 @@ OttoEmojiDisplay::OttoEmojiDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_p void OttoEmojiDisplay::SetupGifContainer() { DisplayLockGuard lock(this); - if (emotion_label_) { - lv_obj_del(emotion_label_); + if (emoji_label_) { + lv_obj_del(emoji_label_); } if (chat_message_label_) { @@ -80,11 +80,11 @@ void OttoEmojiDisplay::SetupGifContainer() { lv_obj_set_flex_grow(content_, 1); lv_obj_center(content_); - emotion_label_ = lv_label_create(content_); - lv_label_set_text(emotion_label_, ""); - lv_obj_set_width(emotion_label_, 0); - lv_obj_set_style_border_width(emotion_label_, 0, 0); - lv_obj_add_flag(emotion_label_, LV_OBJ_FLAG_HIDDEN); + emoji_label_ = lv_label_create(content_); + lv_label_set_text(emoji_label_, ""); + lv_obj_set_width(emoji_label_, 0); + lv_obj_set_style_border_width(emoji_label_, 0, 0); + lv_obj_add_flag(emoji_label_, LV_OBJ_FLAG_HIDDEN); emotion_gif_ = lv_gif_create(content_); int gif_size = LV_HOR_RES; @@ -108,7 +108,11 @@ void OttoEmojiDisplay::SetupGifContainer() { lv_obj_align(chat_message_label_, LV_ALIGN_BOTTOM_MID, 0, 0); - LcdDisplay::SetTheme("dark"); + auto& theme_manager = LvglThemeManager::GetInstance(); + auto theme = theme_manager.GetTheme("dark"); + if (theme != nullptr) { + LcdDisplay::SetTheme(theme); + } } void OttoEmojiDisplay::SetEmotion(const char* emotion) { @@ -146,26 +150,3 @@ void OttoEmojiDisplay::SetChatMessage(const char* role, const char* content) { ESP_LOGI(TAG, "设置聊天消息 [%s]: %s", role, content); } - -void OttoEmojiDisplay::SetIcon(const char* icon) { - if (!icon) { - return; - } - - DisplayLockGuard lock(this); - - if (chat_message_label_ != nullptr) { - std::string icon_message = std::string(icon) + " "; - - if (strcmp(icon, FONT_AWESOME_DOWNLOAD) == 0) { - icon_message += "正在升级..."; - } else { - icon_message += "系统状态"; - } - - lv_label_set_text(chat_message_label_, icon_message.c_str()); - lv_obj_remove_flag(chat_message_label_, LV_OBJ_FLAG_HIDDEN); - - ESP_LOGI(TAG, "设置图标: %s", icon); - } -} diff --git a/main/boards/otto-robot/otto_emoji_display.h b/main/boards/otto-robot/otto_emoji_display.h index d3e47bd..b51926e 100644 --- a/main/boards/otto-robot/otto_emoji_display.h +++ b/main/boards/otto-robot/otto_emoji_display.h @@ -16,7 +16,7 @@ public: */ OttoEmojiDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, - bool swap_xy, DisplayFonts fonts); + bool swap_xy); virtual ~OttoEmojiDisplay() = default; @@ -26,9 +26,6 @@ public: // 重写聊天消息设置方法 virtual void SetChatMessage(const char* role, const char* content) override; - // 添加SetIcon方法声明 - virtual void SetIcon(const char* icon) override; - private: void SetupGifContainer(); diff --git a/main/boards/otto-robot/otto_robot.cc b/main/boards/otto-robot/otto_robot.cc index eb3ab88..d008787 100644 --- a/main/boards/otto-robot/otto_robot.cc +++ b/main/boards/otto-robot/otto_robot.cc @@ -21,9 +21,6 @@ #define TAG "OttoRobot" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - extern void InitializeOttoController(); class OttoRobot : public WifiBoard { @@ -78,12 +75,7 @@ private: display_ = new OttoEmojiDisplay( panel_io, panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = DISPLAY_HEIGHT >= 240 ? font_emoji_64_init() : font_emoji_32_init(), - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/sensecap-watcher/README.md b/main/boards/sensecap-watcher/README.md index 801b55e..b606399 100644 --- a/main/boards/sensecap-watcher/README.md +++ b/main/boards/sensecap-watcher/README.md @@ -29,7 +29,7 @@ watcher 中一些额外的配置项如下,需要在menuconfig 中选择. ``` CONFIG_BOARD_TYPE_SENSECAP_WATCHER=y CONFIG_ESPTOOLPY_FLASHSIZE_32MB=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v1/32m.csv" +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v2/32m.csv" CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH=y CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=n CONFIG_IDF_EXPERIMENTAL_FEATURES=y diff --git a/main/boards/sensecap-watcher/README_en.md b/main/boards/sensecap-watcher/README_en.md index 4bc5dba..8e95f55 100644 --- a/main/boards/sensecap-watcher/README_en.md +++ b/main/boards/sensecap-watcher/README_en.md @@ -29,7 +29,7 @@ There are some additional configuration options for the watcher. Please select t ``` CONFIG_BOARD_TYPE_SENSECAP_WATCHER=y CONFIG_ESPTOOLPY_FLASHSIZE_32MB=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v1/32m.csv" +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v2/32m.csv" CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH=y CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=n CONFIG_IDF_EXPERIMENTAL_FEATURES=y diff --git a/main/boards/sensecap-watcher/config.json b/main/boards/sensecap-watcher/config.json index 48d60bb..177fad7 100644 --- a/main/boards/sensecap-watcher/config.json +++ b/main/boards/sensecap-watcher/config.json @@ -5,7 +5,7 @@ "name": "sensecap-watcher", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_32MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/32m.csv\"", + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/32m.csv\"", "CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH=y", "CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=n", "CONFIG_IDF_EXPERIMENTAL_FEATURES=y", diff --git a/main/boards/sensecap-watcher/config_en.json b/main/boards/sensecap-watcher/config_en.json index e3c9a91..0435fa3 100644 --- a/main/boards/sensecap-watcher/config_en.json +++ b/main/boards/sensecap-watcher/config_en.json @@ -5,7 +5,7 @@ "name": "sensecap-watcher-en", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_32MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/32m.csv\"", + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/32m.csv\"", "CONFIG_BOOTLOADER_CACHE_32BIT_ADDR_QUAD_FLASH=y", "CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=n", "CONFIG_IDF_EXPERIMENTAL_FEATURES=y", diff --git a/main/boards/sensecap-watcher/sensecap_watcher.cc b/main/boards/sensecap-watcher/sensecap_watcher.cc index 84cf861..bdc7351 100644 --- a/main/boards/sensecap-watcher/sensecap_watcher.cc +++ b/main/boards/sensecap-watcher/sensecap_watcher.cc @@ -9,6 +9,7 @@ #include "led/single_led.h" #include "power_save_timer.h" #include "sscma_camera.h" +#include "lvgl_theme.h" #include #include "esp_check.h" @@ -32,10 +33,6 @@ #define TAG "sensecap_watcher" - -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_20_4); - class CustomLcdDisplay : public SpiLcdDisplay { public: CustomLcdDisplay(esp_lcd_panel_io_handle_t io_handle, @@ -47,15 +44,14 @@ class CustomLcdDisplay : public SpiLcdDisplay { bool mirror_x, bool mirror_y, bool swap_xy) - : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }) { + : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); - lv_obj_set_size(status_bar_, LV_HOR_RES, fonts_.text_font->line_height * 2 + 10); + auto lvgl_theme = static_cast(current_theme_); + auto text_font = lvgl_theme->text_font()->font(); + auto icon_font = lvgl_theme->icon_font()->font(); + + lv_obj_set_size(status_bar_, LV_HOR_RES, text_font->line_height * 2 + 10); lv_obj_set_style_layout(status_bar_, LV_LAYOUT_NONE, 0); lv_obj_set_style_pad_top(status_bar_, 10, 0); lv_obj_set_style_pad_bottom(status_bar_, 1, 0); @@ -63,9 +59,9 @@ class CustomLcdDisplay : public SpiLcdDisplay { // 针对圆形屏幕调整位置 // network battery mute // // status // - lv_obj_align(battery_label_, LV_ALIGN_TOP_MID, -2.5*fonts_.icon_font->line_height, 0); - lv_obj_align(network_label_, LV_ALIGN_TOP_MID, -0.5*fonts_.icon_font->line_height, 0); - lv_obj_align(mute_label_, LV_ALIGN_TOP_MID, 1.5*fonts_.icon_font->line_height, 0); + lv_obj_align(battery_label_, LV_ALIGN_TOP_MID, -2.5 * icon_font->line_height, 0); + lv_obj_align(network_label_, LV_ALIGN_TOP_MID, -0.5 * icon_font->line_height, 0); + lv_obj_align(mute_label_, LV_ALIGN_TOP_MID, 1.5 * icon_font->line_height, 0); lv_obj_align(status_label_, LV_ALIGN_BOTTOM_MID, 0, 0); lv_obj_set_flex_grow(status_label_, 0); diff --git a/main/boards/sensecap-watcher/sscma_camera.cc b/main/boards/sensecap-watcher/sscma_camera.cc index e56f1c0..a6c3e0c 100644 --- a/main/boards/sensecap-watcher/sscma_camera.cc +++ b/main/boards/sensecap-watcher/sscma_camera.cc @@ -1,6 +1,6 @@ #include "sscma_camera.h" #include "mcp_server.h" -#include "display.h" +#include "lvgl_display.h" #include "board.h" #include "system_info.h" #include "config.h" @@ -243,7 +243,7 @@ bool SscmaCamera::Capture() { } // 显示预览图片 - auto display = Board::GetInstance().GetDisplay(); + auto display = dynamic_cast(Board::GetInstance().GetDisplay()); if (display != nullptr) { display->SetPreviewImage(&preview_image_); } diff --git a/main/boards/sp-esp32-s3-1.28-box/sp-esp32-s3-1.28-box.cc b/main/boards/sp-esp32-s3-1.28-box/sp-esp32-s3-1.28-box.cc index f2d3176..a885feb 100644 --- a/main/boards/sp-esp32-s3-1.28-box/sp-esp32-s3-1.28-box.cc +++ b/main/boards/sp-esp32-s3-1.28-box/sp-esp32-s3-1.28-box.cc @@ -27,10 +27,6 @@ #define TAG "Spotpear_ESP32_S3_1_28_BOX" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - - class Cst816d : public I2cDevice { public: struct TouchPoint_t { @@ -68,7 +64,6 @@ private: TouchPoint_t tp_; }; - class CustomLcdDisplay : public SpiLcdDisplay { public: CustomLcdDisplay(esp_lcd_panel_io_handle_t io_handle, @@ -80,12 +75,7 @@ public: bool mirror_x, bool mirror_y, bool swap_xy) - : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_64_init(), - }) { + : SpiLcdDisplay(io_handle, panel_handle, width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); // 由于屏幕是圆的,所以状态栏需要增加左右内边距 @@ -94,7 +84,6 @@ public: } }; - class Spotpear_ESP32_S3_1_28_BOX : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -165,7 +154,6 @@ private: ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_cfg, &i2c_bus_)); } - static void touchpad_timer_callback(void* arg) { auto& board = (Spotpear_ESP32_S3_1_28_BOX&)Board::GetInstance(); auto touchpad = board.GetTouchpad(); @@ -284,7 +272,6 @@ public: GetBacklight()->RestoreBrightness(); } - virtual Led* GetLed() override { static SingleLed led(BUILTIN_LED_GPIO); return &led; diff --git a/main/boards/sp-esp32-s3-1.54-muma/sp-esp32-s3-1.54-muma.cc b/main/boards/sp-esp32-s3-1.54-muma/sp-esp32-s3-1.54-muma.cc index ce21669..436cc34 100644 --- a/main/boards/sp-esp32-s3-1.54-muma/sp-esp32-s3-1.54-muma.cc +++ b/main/boards/sp-esp32-s3-1.54-muma/sp-esp32-s3-1.54-muma.cc @@ -28,12 +28,6 @@ #define TAG "Spotpear_esp32_s3_lcd_1_54" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class Cst816d : public I2cDevice { public: struct TouchPoint_t { @@ -215,7 +209,6 @@ private: ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); } - void InitializeSt7789Display() { esp_lcd_panel_io_handle_t panel_io = nullptr; esp_lcd_panel_handle_t panel = nullptr; @@ -245,7 +238,6 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y)); ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel, true)); - // uint8_t data_0xBB[] = { 0x3F }; // esp_lcd_panel_io_tx_param(panel_io, 0xBB, data_0xBB, sizeof(data_0xBB)); @@ -253,12 +245,7 @@ private: esp_lcd_panel_io_tx_param(panel_io, 0xBB, data_0xBB, sizeof(data_0xBB)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { diff --git a/main/boards/surfer-c3-1.14tft/surfer-c3-1.14tft.cc b/main/boards/surfer-c3-1.14tft/surfer-c3-1.14tft.cc index 1e810a7..cad05c6 100644 --- a/main/boards/surfer-c3-1.14tft/surfer-c3-1.14tft.cc +++ b/main/boards/surfer-c3-1.14tft/surfer-c3-1.14tft.cc @@ -18,12 +18,8 @@ #include "power_manager.h" // #include - #define TAG "SURFERC3114TFT" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - class SurferC3114TFT : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -146,12 +142,7 @@ private: esp_lcd_panel_swap_xy(panel_, DISPLAY_SWAP_XY); esp_lcd_panel_mirror(panel_, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io_, panel_, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/taiji-pi-s3/taiji_pi_s3.cc b/main/boards/taiji-pi-s3/taiji_pi_s3.cc index ef3667a..b6de62c 100644 --- a/main/boards/taiji-pi-s3/taiji_pi_s3.cc +++ b/main/boards/taiji-pi-s3/taiji_pi_s3.cc @@ -16,11 +16,6 @@ #define TAG "TaijiPiS3Board" - -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - static const st77916_lcd_init_cmd_t lcd_init_cmds[] = { #ifdef CONFIG_TAIJIPAI_I2S_TYPE_STD {0xF0, (uint8_t[]){0x08}, 1, 0}, @@ -595,12 +590,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeMute() { diff --git a/main/boards/tudouzi/kevin_box_board.cc b/main/boards/tudouzi/kevin_box_board.cc index 9c4ac23..d6cb5b2 100644 --- a/main/boards/tudouzi/kevin_box_board.cc +++ b/main/boards/tudouzi/kevin_box_board.cc @@ -17,10 +17,6 @@ #define TAG "KevinBoxBoard" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - class Pmic : public Axp2101 { public: Pmic(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : Axp2101(i2c_bus, addr) { @@ -49,7 +45,6 @@ public: } }; - class KevinBoxBoard : public Ml307Board { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -147,8 +142,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeCodecI2c() { diff --git a/main/boards/waveshare-c6-lcd-1.69/esp32-c6-lcd-1.69.cc b/main/boards/waveshare-c6-lcd-1.69/esp32-c6-lcd-1.69.cc index f5eea48..bebe974 100644 --- a/main/boards/waveshare-c6-lcd-1.69/esp32-c6-lcd-1.69.cc +++ b/main/boards/waveshare-c6-lcd-1.69/esp32-c6-lcd-1.69.cc @@ -20,10 +20,6 @@ #define TAG "waveshare_lcd_1_69" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - class CustomLcdDisplay : public SpiLcdDisplay { public: CustomLcdDisplay(esp_lcd_panel_io_handle_t io_handle, @@ -36,23 +32,13 @@ public: bool mirror_y, bool swap_xy) : SpiLcdDisplay(io_handle, panel_handle, - width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }) { + width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); lv_obj_set_style_pad_left(status_bar_, LV_HOR_RES * 0.1, 0); lv_obj_set_style_pad_right(status_bar_, LV_HOR_RES * 0.1, 0); } }; - class CustomButton: public Button { public: void OnPressDownDel(void) { @@ -71,7 +57,6 @@ public: } }; - class CustomBoard : public WifiBoard { private: CustomButton boot_button_; diff --git a/main/boards/waveshare-c6-lcd-1.69/power_manager.h b/main/boards/waveshare-c6-lcd-1.69/power_manager.h index 97d6546..adb7bee 100644 --- a/main/boards/waveshare-c6-lcd-1.69/power_manager.h +++ b/main/boards/waveshare-c6-lcd-1.69/power_manager.h @@ -9,8 +9,6 @@ #include "esp_adc/adc_cali_scheme.h" #include -#define TAG "power_manager" - class PowerManager { private: @@ -28,7 +26,7 @@ private: bool calibrated = false; if (!calibrated) { - ESP_LOGI(TAG, "calibration scheme version is %s", "Curve Fitting"); + ESP_LOGI("PowerManager", "calibration scheme version is %s", "Curve Fitting"); adc_cali_curve_fitting_config_t cali_config = { .unit_id = unit, .chan = channel, @@ -43,13 +41,13 @@ private: *out_handle = handle; if (ret == ESP_OK) { - ESP_LOGI(TAG, "Calibration Success"); + ESP_LOGI("PowerManager", "Calibration Success"); } else if (ret == ESP_ERR_NOT_SUPPORTED || !calibrated) { - ESP_LOGW(TAG, "eFuse not burnt, skip software calibration"); + ESP_LOGW("PowerManager", "eFuse not burnt, skip software calibration"); } else { - ESP_LOGE(TAG, "Invalid arg or no memory"); + ESP_LOGE("PowerManager", "Invalid arg or no memory"); } return calibrated; } diff --git a/main/boards/waveshare-c6-touch-amoled-1.43/esp32-c6-touch-amoled-1.43.cc b/main/boards/waveshare-c6-touch-amoled-1.43/esp32-c6-touch-amoled-1.43.cc index 6cba856..42cd4b9 100644 --- a/main/boards/waveshare-c6-touch-amoled-1.43/esp32-c6-touch-amoled-1.43.cc +++ b/main/boards/waveshare-c6-touch-amoled-1.43/esp32-c6-touch-amoled-1.43.cc @@ -17,10 +17,6 @@ #define TAG "waveshare_c6_amoled_1_43" - -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - static const sh8601_lcd_init_cmd_t lcd_init_cmds[] = { {0x11, (uint8_t []){0x00}, 0, 80}, @@ -58,12 +54,7 @@ public: bool mirror_y, bool swap_xy) : SpiLcdDisplay(io_handle, panel_handle, - width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, - .emoji_font = font_emoji_64_init(), - }) { + width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); lv_display_add_event_cb(display_, MyDrawEventCb, LV_EVENT_INVALIDATE_AREA, NULL); } diff --git a/main/boards/waveshare-p4-nano/esp32-p4-nano.cc b/main/boards/waveshare-p4-nano/esp32-p4-nano.cc index 2cb8cb4..a7dc2dc 100644 --- a/main/boards/waveshare-p4-nano/esp32-p4-nano.cc +++ b/main/boards/waveshare-p4-nano/esp32-p4-nano.cc @@ -20,9 +20,6 @@ #include "esp_lcd_touch_gt911.h" #define TAG "WaveshareEsp32p4nano" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - class CustomBacklight : public Backlight { public: CustomBacklight(i2c_master_bus_handle_t i2c_handle) @@ -160,12 +157,7 @@ private: esp_lcd_panel_init(disp_panel); display__ = new MipiLcdDisplay(io, disp_panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, - DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); backlight_ = new CustomBacklight(codec_i2c_bus_); backlight_->RestoreBrightness(); } @@ -232,6 +224,7 @@ public: virtual Backlight *GetBacklight() override { return backlight_; } + }; DECLARE_BOARD(WaveshareEsp32p4nano); diff --git a/main/boards/waveshare-p4-wifi6-touch-lcd-4b/esp32-p4-wifi6-touch-lcd-4b.cc b/main/boards/waveshare-p4-wifi6-touch-lcd-4b/esp32-p4-wifi6-touch-lcd-4b.cc index 76864a2..20ec9f4 100644 --- a/main/boards/waveshare-p4-wifi6-touch-lcd-4b/esp32-p4-wifi6-touch-lcd-4b.cc +++ b/main/boards/waveshare-p4-wifi6-touch-lcd-4b/esp32-p4-wifi6-touch-lcd-4b.cc @@ -19,9 +19,6 @@ #include "esp_lcd_touch_gt911.h" #define TAG "WaveshareEsp32p44b" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class WaveshareEsp32p44b : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -115,12 +112,7 @@ private: esp_lcd_panel_init(disp_panel); display_ = new MipiLcdDisplay(io, disp_panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, - DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeTouch() { @@ -197,6 +189,7 @@ public: static PwmBacklight backlight(DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT); return &backlight; } + }; DECLARE_BOARD(WaveshareEsp32p44b); diff --git a/main/boards/waveshare-p4-wifi6-touch-lcd-xc/esp32-p4-wifi6-touch-lcd-xc.cc b/main/boards/waveshare-p4-wifi6-touch-lcd-xc/esp32-p4-wifi6-touch-lcd-xc.cc index 25f6dbf..db8370b 100644 --- a/main/boards/waveshare-p4-wifi6-touch-lcd-xc/esp32-p4-wifi6-touch-lcd-xc.cc +++ b/main/boards/waveshare-p4-wifi6-touch-lcd-xc/esp32-p4-wifi6-touch-lcd-xc.cc @@ -19,9 +19,6 @@ #include "esp_lcd_touch_gt911.h" #define TAG "WaveshareEsp32p4xc" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class WaveshareEsp32p4xc : public WifiBoard { private: i2c_master_bus_handle_t i2c_bus_; @@ -117,12 +114,7 @@ private: esp_lcd_panel_init(disp_panel); display_ = new MipiLcdDisplay(io, disp_panel, DISPLAY_WIDTH, DISPLAY_HEIGHT, - DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeTouch() { diff --git a/main/boards/waveshare-s3-audio-board/esp32-s3-audio_board.cc b/main/boards/waveshare-s3-audio-board/esp32-s3-audio_board.cc index 4b7da80..e1a4067 100644 --- a/main/boards/waveshare-s3-audio-board/esp32-s3-audio_board.cc +++ b/main/boards/waveshare-s3-audio-board/esp32-s3-audio_board.cc @@ -26,12 +26,6 @@ #define LCD_OPCODE_READ_CMD (0x0BULL) #define LCD_OPCODE_WRITE_COLOR (0x32ULL) -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - - - class CustomBoard : public WifiBoard { private: Button boot_button_; @@ -115,12 +109,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel, DISPLAY_INVERT_COLOR)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_14_1, - .icon_font = &font_awesome_14_1, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeJd9853Display() { @@ -153,12 +142,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_mirror(panel, true, false)); ESP_ERROR_CHECK(esp_lcd_panel_swap_xy(panel, true)); display_ = new SpiLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_14_1, - .icon_font = &font_awesome_14_1, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { @@ -244,4 +228,4 @@ public: } }; -DECLARE_BOARD(CustomBoard); \ No newline at end of file +DECLARE_BOARD(CustomBoard); diff --git a/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.c b/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.c index 2881536..dea68f2 100644 --- a/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.c +++ b/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.c @@ -457,4 +457,4 @@ static esp_err_t panel_jd9853_disp_on_off(esp_lcd_panel_t *panel, bool on_off) } ESP_RETURN_ON_ERROR(esp_lcd_panel_io_tx_param(io, command, NULL, 0), TAG, "send command failed"); return ESP_OK; -} \ No newline at end of file +} diff --git a/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.h b/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.h index 2992131..487e749 100644 --- a/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.h +++ b/main/boards/waveshare-s3-audio-board/esp_lcd_jd9853.h @@ -99,4 +99,4 @@ esp_err_t esp_lcd_new_panel_jd9853(const esp_lcd_panel_io_handle_t io, const esp #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/main/boards/waveshare-s3-touch-amoled-1.75/esp32-s3-touch-amoled-1.75.cc b/main/boards/waveshare-s3-touch-amoled-1.75/esp32-s3-touch-amoled-1.75.cc index a49ef98..9053154 100644 --- a/main/boards/waveshare-s3-touch-amoled-1.75/esp32-s3-touch-amoled-1.75.cc +++ b/main/boards/waveshare-s3-touch-amoled-1.75/esp32-s3-touch-amoled-1.75.cc @@ -26,9 +26,6 @@ #define TAG "WaveshareEsp32s3TouchAMOLED1inch75" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class Pmic : public Axp2101 { public: Pmic(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : Axp2101(i2c_bus, addr) { @@ -110,17 +107,7 @@ public: bool mirror_y, bool swap_xy) : SpiLcdDisplay(io_handle, panel_handle, - width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }) - { + width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); lv_obj_set_style_pad_left(status_bar_, LV_HOR_RES* 0.1, 0); lv_obj_set_style_pad_right(status_bar_, LV_HOR_RES* 0.1, 0); diff --git a/main/boards/waveshare-s3-touch-amoled-2.06/esp32-s3-touch-amoled-2.06.cc b/main/boards/waveshare-s3-touch-amoled-2.06/esp32-s3-touch-amoled-2.06.cc index f5ae75a..15facfc 100644 --- a/main/boards/waveshare-s3-touch-amoled-2.06/esp32-s3-touch-amoled-2.06.cc +++ b/main/boards/waveshare-s3-touch-amoled-2.06/esp32-s3-touch-amoled-2.06.cc @@ -25,9 +25,6 @@ #define TAG "WaveshareEsp32s3TouchAMOLED2inch06" -LV_FONT_DECLARE(font_puhui_30_4); -LV_FONT_DECLARE(font_awesome_30_4); - class Pmic : public Axp2101 { public: Pmic(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : Axp2101(i2c_bus, addr) { @@ -106,17 +103,7 @@ public: bool mirror_y, bool swap_xy) : SpiLcdDisplay(io_handle, panel_handle, - width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy, - { - .text_font = &font_puhui_30_4, - .icon_font = &font_awesome_30_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }) - { + width, height, offset_x, offset_y, mirror_x, mirror_y, swap_xy) { DisplayLockGuard lock(this); lv_obj_set_style_pad_left(status_bar_, LV_HOR_RES* 0.1, 0); lv_obj_set_style_pad_right(status_bar_, LV_HOR_RES* 0.1, 0); diff --git a/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.cc b/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.cc index c047611..11d492f 100644 --- a/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.cc +++ b/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.cc @@ -1,87 +1,30 @@ -#include "custom_lcd_display.h" +#include "config.h" +#include "custom_lcd_display.h" #include "lcd_display.h" +#include "assets/lang_config.h" +#include "settings.h" +#include "board.h" #include +#include + +#include +#include +#include +#include #include #include #include -#include "assets/lang_config.h" -#include -#include "settings.h" - -#include "esp_lcd_panel_io.h" - -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/semphr.h" - -#include "config.h" - -#include "board.h" - #define TAG "CustomLcdDisplay" -// Color definitions for dark theme -#define DARK_BACKGROUND_COLOR lv_color_hex(0x121212) // Dark background -#define DARK_TEXT_COLOR lv_color_white() // White text -#define DARK_CHAT_BACKGROUND_COLOR lv_color_hex(0x1E1E1E) // Slightly lighter than background -#define DARK_USER_BUBBLE_COLOR lv_color_hex(0x1A6C37) // Dark green -#define DARK_ASSISTANT_BUBBLE_COLOR lv_color_hex(0x333333) // Dark gray -#define DARK_SYSTEM_BUBBLE_COLOR lv_color_hex(0x2A2A2A) // Medium gray -#define DARK_SYSTEM_TEXT_COLOR lv_color_hex(0xAAAAAA) // Light gray text -#define DARK_BORDER_COLOR lv_color_hex(0x333333) // Dark gray border -#define DARK_LOW_BATTERY_COLOR lv_color_hex(0xFF0000) // Red for dark mode - -// Color definitions for light theme -#define LIGHT_BACKGROUND_COLOR lv_color_white() // White background -#define LIGHT_TEXT_COLOR lv_color_black() // Black text -#define LIGHT_CHAT_BACKGROUND_COLOR lv_color_hex(0xE0E0E0) // Light gray background -#define LIGHT_USER_BUBBLE_COLOR lv_color_hex(0x95EC69) // WeChat green -#define LIGHT_ASSISTANT_BUBBLE_COLOR lv_color_white() // White -#define LIGHT_SYSTEM_BUBBLE_COLOR lv_color_hex(0xE0E0E0) // Light gray -#define LIGHT_SYSTEM_TEXT_COLOR lv_color_hex(0x666666) // Dark gray text -#define LIGHT_BORDER_COLOR lv_color_hex(0xE0E0E0) // Light gray border -#define LIGHT_LOW_BATTERY_COLOR lv_color_black() // Black for light mode - - -// Define dark theme colors -static const ThemeColors DARK_THEME = { - .background = DARK_BACKGROUND_COLOR, - .text = DARK_TEXT_COLOR, - .chat_background = DARK_CHAT_BACKGROUND_COLOR, - .user_bubble = DARK_USER_BUBBLE_COLOR, - .assistant_bubble = DARK_ASSISTANT_BUBBLE_COLOR, - .system_bubble = DARK_SYSTEM_BUBBLE_COLOR, - .system_text = DARK_SYSTEM_TEXT_COLOR, - .border = DARK_BORDER_COLOR, - .low_battery = DARK_LOW_BATTERY_COLOR -}; - -// Define light theme colors -static const ThemeColors LIGHT_THEME = { - .background = LIGHT_BACKGROUND_COLOR, - .text = LIGHT_TEXT_COLOR, - .chat_background = LIGHT_CHAT_BACKGROUND_COLOR, - .user_bubble = LIGHT_USER_BUBBLE_COLOR, - .assistant_bubble = LIGHT_ASSISTANT_BUBBLE_COLOR, - .system_bubble = LIGHT_SYSTEM_BUBBLE_COLOR, - .system_text = LIGHT_SYSTEM_TEXT_COLOR, - .border = LIGHT_BORDER_COLOR, - .low_battery = LIGHT_LOW_BATTERY_COLOR -}; - -// Current theme - initialize based on default config -static ThemeColors current_theme = LIGHT_THEME; static SemaphoreHandle_t trans_done_sem = NULL; static uint16_t *trans_act; static uint16_t *trans_buf_1; static uint16_t *trans_buf_2; - - bool CustomLcdDisplay::lvgl_port_flush_io_ready_callback(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_io_event_data_t *edata, void *user_ctx) { BaseType_t taskAwake = pdFALSE; @@ -99,7 +42,6 @@ void CustomLcdDisplay::lvgl_port_flush_callback(lv_display_t *drv, const lv_area esp_lcd_panel_handle_t panel_handle = (esp_lcd_panel_handle_t)lv_display_get_driver_data(drv); assert(panel_handle != NULL); - size_t len = lv_area_get_size(area); lv_draw_sw_rgb565_swap(color_map, len); @@ -249,11 +191,9 @@ void CustomLcdDisplay::lvgl_port_flush_callback(lv_display_t *drv, const lv_area lv_disp_flush_ready(drv); } - CustomLcdDisplay::CustomLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, - int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts) - : LcdDisplay(panel_io, panel, fonts, width, height) { + int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy) + : LcdDisplay(panel_io, panel, width, height) { // width_ = width; // height_ = height; @@ -341,12 +281,6 @@ CustomLcdDisplay::CustomLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_p lv_display_set_offset(display_, offset_x, offset_y); } - // Update the theme - if (current_theme_name_ == "dark") { - current_theme = DARK_THEME; - } else if (current_theme_name_ == "light") { - current_theme = LIGHT_THEME; - } SetupUI(); } \ No newline at end of file diff --git a/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.h b/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.h index 792d4c2..c3a9900 100644 --- a/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.h +++ b/main/boards/waveshare-s3-touch-lcd-3.5b/custom_lcd_display.h @@ -8,8 +8,7 @@ class CustomLcdDisplay : public LcdDisplay { public: CustomLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts); + bool mirror_x, bool mirror_y, bool swap_xy); private: static bool lvgl_port_flush_io_ready_callback(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_io_event_data_t *edata, void *user_ctx); static void lvgl_port_flush_callback(lv_display_t *drv, const lv_area_t *area, uint8_t *color_map); diff --git a/main/boards/waveshare-s3-touch-lcd-3.5b/waveshare-s3-touch-lcd-3.5b.cc b/main/boards/waveshare-s3-touch-lcd-3.5b/waveshare-s3-touch-lcd-3.5b.cc index 514cb90..ac15d55 100644 --- a/main/boards/waveshare-s3-touch-lcd-3.5b/waveshare-s3-touch-lcd-3.5b.cc +++ b/main/boards/waveshare-s3-touch-lcd-3.5b/waveshare-s3-touch-lcd-3.5b.cc @@ -21,7 +21,6 @@ #include "axp2101.h" #include "power_save_timer.h" - #include "esp_lcd_axs15231b.h" #include "custom_lcd_display.h" @@ -34,11 +33,6 @@ #define TAG "waveshare_lcd_3_5b" - -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - - static const axs15231b_lcd_init_cmd_t lcd_init_cmds[] = { {0xBB, (uint8_t[]){0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA5}, 8, 0}, {0xA0, (uint8_t[]){0xC0, 0x10, 0x00, 0x02, 0x00, 0x00, 0x04, 0x3F, 0x20, 0x05, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, 17, 0}, @@ -75,8 +69,6 @@ static const axs15231b_lcd_init_cmd_t lcd_init_cmds[] = { {0x2a, (uint8_t[]){0x00, 0x00, 0x01, 0x3f}, 4, 0}, {0x2b, (uint8_t[]){0x00, 0x00, 0x01, 0xdf}, 4, 0}}; - - class Pmic : public Axp2101 { public: Pmic(i2c_master_bus_handle_t i2c_bus, uint8_t addr) : Axp2101(i2c_bus, addr) { @@ -260,8 +252,7 @@ private: .vendor_config = (void *)&vendor_config, }; esp_lcd_new_panel_axs15231b(panel_io, &panel_config, &panel); - - + esp_lcd_panel_reset(panel); esp_lcd_panel_init(panel); @@ -271,14 +262,7 @@ private: esp_lcd_panel_mirror(panel, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); display_ = new CustomLcdDisplay(panel_io, panel, - DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); - // display_ = new CustomLcdDisplay(panel_io, panel, DISPLAY_BACKLIGHT_PIN, DISPLAY_BACKLIGHT_OUTPUT_INVERT, - // DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); + DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void InitializeButtons() { @@ -291,7 +275,6 @@ private: }); } - void InitializeTouch() { esp_lcd_touch_handle_t tp; @@ -324,7 +307,6 @@ private: ESP_LOGI(TAG, "Touch panel initialized successfully"); } - public: CustomBoard() : boot_button_(BOOT_BUTTON_GPIO) { @@ -364,6 +346,7 @@ public: virtual Camera* GetCamera() override { return camera_; } + #if PMIC_ENABLE virtual bool GetBatteryLevel(int &level, bool& charging, bool& discharging) override { static bool last_discharging = false; diff --git a/main/boards/xingzhi-cube-0.85tft-ml307/xingzhi-cube-0.85tft-ml307.cc b/main/boards/xingzhi-cube-0.85tft-ml307/xingzhi-cube-0.85tft-ml307.cc index b0a0e34..2d2f36e 100644 --- a/main/boards/xingzhi-cube-0.85tft-ml307/xingzhi-cube-0.85tft-ml307.cc +++ b/main/boards/xingzhi-cube-0.85tft-ml307/xingzhi-cube-0.85tft-ml307.cc @@ -22,10 +22,6 @@ #define TAG "XINGZHI_CUBE_0_85TFT_ML307" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - - static const nv3023_lcd_init_cmd_t lcd_init_cmds[] = { {0xff, (uint8_t[]){0xa5}, 1, 0}, {0x3E, (uint8_t[]){0x09}, 1, 0}, @@ -140,7 +136,6 @@ private: buscfg.max_transfer_sz = DISPLAY_HEIGHT * 80 *sizeof(uint16_t); ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); } - void InitializeButtons() { boot_button_.OnClick([this]() { @@ -174,12 +169,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); display_ = new SpiLcdDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void Initializegpio21_45() { diff --git a/main/boards/xingzhi-cube-0.85tft-wifi/xingzhi-cube-0.85tft-wifi.cc b/main/boards/xingzhi-cube-0.85tft-wifi/xingzhi-cube-0.85tft-wifi.cc index 720fd52..37d56e4 100644 --- a/main/boards/xingzhi-cube-0.85tft-wifi/xingzhi-cube-0.85tft-wifi.cc +++ b/main/boards/xingzhi-cube-0.85tft-wifi/xingzhi-cube-0.85tft-wifi.cc @@ -22,10 +22,6 @@ #define TAG "XINGZHI_CUBE_0_85TFT_WIFI" -LV_FONT_DECLARE(font_puhui_16_4); -LV_FONT_DECLARE(font_awesome_16_4); - - static const nv3023_lcd_init_cmd_t lcd_init_cmds[] = { {0xff, (uint8_t[]){0xa5}, 1, 0}, {0x3E, (uint8_t[]){0x09}, 1, 0}, @@ -140,7 +136,6 @@ private: buscfg.max_transfer_sz = DISPLAY_HEIGHT * 80 *sizeof(uint16_t); ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO)); } - void InitializeButtons() { boot_button_.OnClick([this]() { @@ -178,12 +173,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); display_ = new SpiLcdDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_16_4, - .icon_font = &font_awesome_16_4, - .emoji_font = font_emoji_32_init(), - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } void Initializegpio21_45() { diff --git a/main/boards/xingzhi-cube-0.96oled-ml307/xingzhi-cube-0.96oled-ml307.cc b/main/boards/xingzhi-cube-0.96oled-ml307/xingzhi-cube-0.96oled-ml307.cc index cb1f1bf..18f7a01 100644 --- a/main/boards/xingzhi-cube-0.96oled-ml307/xingzhi-cube-0.96oled-ml307.cc +++ b/main/boards/xingzhi-cube-0.96oled-ml307/xingzhi-cube-0.96oled-ml307.cc @@ -20,10 +20,6 @@ #define TAG "XINGZHI_CUBE_0_96OLED_ML307" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - class XINGZHI_CUBE_0_96OLED_ML307 : public DualNetworkBoard { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -130,8 +126,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/xingzhi-cube-0.96oled-wifi/xingzhi-cube-0.96oled-wifi.cc b/main/boards/xingzhi-cube-0.96oled-wifi/xingzhi-cube-0.96oled-wifi.cc index 2158ee9..d2f0685 100644 --- a/main/boards/xingzhi-cube-0.96oled-wifi/xingzhi-cube-0.96oled-wifi.cc +++ b/main/boards/xingzhi-cube-0.96oled-wifi/xingzhi-cube-0.96oled-wifi.cc @@ -21,10 +21,6 @@ #define TAG "XINGZHI_CUBE_0_96OLED_WIFI" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - class XINGZHI_CUBE_0_96OLED_WIFI : public WifiBoard { private: i2c_master_bus_handle_t display_i2c_bus_; @@ -131,8 +127,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/xingzhi-cube-1.54tft-ml307/xingzhi-cube-1.54tft-ml307.cc b/main/boards/xingzhi-cube-1.54tft-ml307/xingzhi-cube-1.54tft-ml307.cc index 35f1f3f..72aff95 100644 --- a/main/boards/xingzhi-cube-1.54tft-ml307/xingzhi-cube-1.54tft-ml307.cc +++ b/main/boards/xingzhi-cube-1.54tft-ml307/xingzhi-cube-1.54tft-ml307.cc @@ -19,10 +19,6 @@ #define TAG "XINGZHI_CUBE_1_54TFT_ML307" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - class XINGZHI_CUBE_1_54TFT_ML307 : public DualNetworkBoard { private: Button boot_button_; @@ -161,16 +157,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_, true)); display_ = new SpiLcdDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/xingzhi-cube-1.54tft-wifi/xingzhi-cube-1.54tft-wifi.cc b/main/boards/xingzhi-cube-1.54tft-wifi/xingzhi-cube-1.54tft-wifi.cc index 8b0f6bc..8827b37 100644 --- a/main/boards/xingzhi-cube-1.54tft-wifi/xingzhi-cube-1.54tft-wifi.cc +++ b/main/boards/xingzhi-cube-1.54tft-wifi/xingzhi-cube-1.54tft-wifi.cc @@ -19,10 +19,6 @@ #define TAG "XINGZHI_CUBE_1_54TFT_WIFI" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - class XINGZHI_CUBE_1_54TFT_WIFI : public WifiBoard { private: Button boot_button_; @@ -151,16 +147,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_, true)); display_ = new SpiLcdDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - .emoji_font = font_emoji_32_init(), -#else - .emoji_font = font_emoji_64_init(), -#endif - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); } public: diff --git a/main/boards/xmini-c3-4g/config.json b/main/boards/xmini-c3-4g/config.json index 918d7d8..b17fde6 100644 --- a/main/boards/xmini-c3-4g/config.json +++ b/main/boards/xmini-c3-4g/config.json @@ -5,7 +5,7 @@ "name": "xmini-c3-4g", "sdkconfig_append": [ "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y", - "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v1/8m.csv\"", + "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME=\"partitions/v2/8m.csv\"", "CONFIG_PM_ENABLE=y", "CONFIG_FREERTOS_USE_TICKLESS_IDLE=y", "CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=y" diff --git a/main/boards/xmini-c3-4g/xmini_c3_4g_board.cc b/main/boards/xmini-c3-4g/xmini_c3_4g_board.cc index 7cef6fc..eca1918 100644 --- a/main/boards/xmini-c3-4g/xmini_c3_4g_board.cc +++ b/main/boards/xmini-c3-4g/xmini_c3_4g_board.cc @@ -20,10 +20,6 @@ #define TAG "XminiC3Board" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - class XminiC3Board : public Ml307Board { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -138,8 +134,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/xmini-c3-v3/xmini_c3_board.cc b/main/boards/xmini-c3-v3/xmini_c3_board.cc index b32a093..c1f7cb7 100644 --- a/main/boards/xmini-c3-v3/xmini_c3_board.cc +++ b/main/boards/xmini-c3-v3/xmini_c3_board.cc @@ -20,10 +20,6 @@ #define TAG "XminiC3Board" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - - class XminiC3Board : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -130,8 +126,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/xmini-c3/xmini_c3_board.cc b/main/boards/xmini-c3/xmini_c3_board.cc index 884f62a..91bd050 100644 --- a/main/boards/xmini-c3/xmini_c3_board.cc +++ b/main/boards/xmini-c3/xmini_c3_board.cc @@ -19,9 +19,6 @@ #define TAG "XminiC3Board" -LV_FONT_DECLARE(font_puhui_14_1); -LV_FONT_DECLARE(font_awesome_14_1); - class XminiC3Board : public WifiBoard { private: i2c_master_bus_handle_t codec_i2c_bus_; @@ -116,8 +113,7 @@ private: ESP_LOGI(TAG, "Turning display on"); ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_, true)); - display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, - {&font_puhui_14_1, &font_awesome_14_1}); + display_ = new OledDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y); } void InitializeButtons() { diff --git a/main/boards/zhengchen-1.54tft-ml307/zhengchen-1.54tft-ml307.cc b/main/boards/zhengchen-1.54tft-ml307/zhengchen-1.54tft-ml307.cc index fb4fb81..48845a1 100644 --- a/main/boards/zhengchen-1.54tft-ml307/zhengchen-1.54tft-ml307.cc +++ b/main/boards/zhengchen-1.54tft-ml307/zhengchen-1.54tft-ml307.cc @@ -19,10 +19,6 @@ #define TAG "ZHENGCHEN_1_54TFT_ML307" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - class ZHENGCHEN_1_54TFT_ML307 : public DualNetworkBoard { private: Button boot_button_; @@ -154,12 +150,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_, true)); display_ = new ZHENGCHEN_LcdDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); display_->SetupHighTempWarningPopup(); } diff --git a/main/boards/zhengchen-1.54tft-wifi/zhengchen-1.54tft-wifi.cc b/main/boards/zhengchen-1.54tft-wifi/zhengchen-1.54tft-wifi.cc index 7dc4879..282a628 100644 --- a/main/boards/zhengchen-1.54tft-wifi/zhengchen-1.54tft-wifi.cc +++ b/main/boards/zhengchen-1.54tft-wifi/zhengchen-1.54tft-wifi.cc @@ -19,10 +19,6 @@ #define TAG "ZHENGCHEN_1_54TFT_WIFI" -LV_FONT_DECLARE(font_puhui_20_4); -LV_FONT_DECLARE(font_awesome_20_4); - - class ZHENGCHEN_1_54TFT_WIFI : public WifiBoard { private: Button boot_button_; @@ -91,7 +87,6 @@ private: app.ToggleChatState(); }); - // 设置开机按钮的长按事件(直接进入配网模式) boot_button_.OnLongPress([this]() { // 唤醒电源保存定时器 @@ -166,12 +161,7 @@ private: ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_, true)); display_ = new ZHENGCHEN_LcdDisplay(panel_io_, panel_, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_OFFSET_X, DISPLAY_OFFSET_Y, - DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY, - { - .text_font = &font_puhui_20_4, - .icon_font = &font_awesome_20_4, - .emoji_font = font_emoji_64_init(), - }); + DISPLAY_MIRROR_X, DISPLAY_MIRROR_Y, DISPLAY_SWAP_XY); display_->SetupHighTempWarningPopup(); } @@ -179,7 +169,7 @@ private: } public: -ZHENGCHEN_1_54TFT_WIFI() : + ZHENGCHEN_1_54TFT_WIFI() : boot_button_(BOOT_BUTTON_GPIO), volume_up_button_(VOLUME_UP_BUTTON_GPIO), volume_down_button_(VOLUME_DOWN_BUTTON_GPIO) { diff --git a/main/boards/zhengchen-1.54tft-wifi/zhengchen_lcd_display.h b/main/boards/zhengchen-1.54tft-wifi/zhengchen_lcd_display.h index 7926f18..fa6222a 100644 --- a/main/boards/zhengchen-1.54tft-wifi/zhengchen_lcd_display.h +++ b/main/boards/zhengchen-1.54tft-wifi/zhengchen_lcd_display.h @@ -2,6 +2,7 @@ #define ZHENGCHEN_LCD_DISPLAY_H #include "display/lcd_display.h" +#include "lvgl_theme.h" #include class ZHENGCHEN_LcdDisplay : public SpiLcdDisplay { @@ -14,10 +15,12 @@ public: using SpiLcdDisplay::SpiLcdDisplay; void SetupHighTempWarningPopup() { + auto lvgl_theme = static_cast(current_theme_); + auto text_font = lvgl_theme->text_font()->font(); // 创建高温警告弹窗 high_temp_popup_ = lv_obj_create(lv_screen_active()); // 使用当前屏幕 lv_obj_set_scrollbar_mode(high_temp_popup_, LV_SCROLLBAR_MODE_OFF); - lv_obj_set_size(high_temp_popup_, LV_HOR_RES * 0.9, fonts_.text_font->line_height * 2); + lv_obj_set_size(high_temp_popup_, LV_HOR_RES * 0.9, text_font->line_height * 2); lv_obj_align(high_temp_popup_, LV_ALIGN_BOTTOM_MID, 0, 0); lv_obj_set_style_bg_color(high_temp_popup_, lv_palette_main(LV_PALETTE_RED), 0); lv_obj_set_style_radius(high_temp_popup_, 10, 0); diff --git a/main/display/display.cc b/main/display/display.cc index 36df24d..045169e 100644 --- a/main/display/display.cc +++ b/main/display/display.cc @@ -15,62 +15,13 @@ #define TAG "Display" Display::Display() { - // Notification timer - esp_timer_create_args_t notification_timer_args = { - .callback = [](void *arg) { - Display *display = static_cast(arg); - DisplayLockGuard lock(display); - lv_obj_add_flag(display->notification_label_, LV_OBJ_FLAG_HIDDEN); - lv_obj_remove_flag(display->status_label_, LV_OBJ_FLAG_HIDDEN); - }, - .arg = this, - .dispatch_method = ESP_TIMER_TASK, - .name = "notification_timer", - .skip_unhandled_events = false, - }; - ESP_ERROR_CHECK(esp_timer_create(¬ification_timer_args, ¬ification_timer_)); - - // Create a power management lock - auto ret = esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, "display_update", &pm_lock_); - if (ret == ESP_ERR_NOT_SUPPORTED) { - ESP_LOGI(TAG, "Power management not supported"); - } else { - ESP_ERROR_CHECK(ret); - } } Display::~Display() { - if (notification_timer_ != nullptr) { - esp_timer_stop(notification_timer_); - esp_timer_delete(notification_timer_); - } - - if (network_label_ != nullptr) { - lv_obj_del(network_label_); - lv_obj_del(notification_label_); - lv_obj_del(status_label_); - lv_obj_del(mute_label_); - lv_obj_del(battery_label_); - lv_obj_del(emotion_label_); - } - if( low_battery_popup_ != nullptr ) { - lv_obj_del(low_battery_popup_); - } - if (pm_lock_ != nullptr) { - esp_pm_lock_delete(pm_lock_); - } } void Display::SetStatus(const char* status) { - DisplayLockGuard lock(this); - if (status_label_ == nullptr) { - return; - } - lv_label_set_text(status_label_, status); - lv_obj_remove_flag(status_label_, LV_OBJ_FLAG_HIDDEN); - lv_obj_add_flag(notification_label_, LV_OBJ_FLAG_HIDDEN); - - last_status_update_time_ = std::chrono::system_clock::now(); + ESP_LOGW(TAG, "SetStatus: %s", status); } void Display::ShowNotification(const std::string ¬ification, int duration_ms) { @@ -78,150 +29,26 @@ void Display::ShowNotification(const std::string ¬ification, int duration_ms) } void Display::ShowNotification(const char* notification, int duration_ms) { - DisplayLockGuard lock(this); - if (notification_label_ == nullptr) { - return; - } - lv_label_set_text(notification_label_, notification); - lv_obj_remove_flag(notification_label_, LV_OBJ_FLAG_HIDDEN); - lv_obj_add_flag(status_label_, LV_OBJ_FLAG_HIDDEN); - - esp_timer_stop(notification_timer_); - ESP_ERROR_CHECK(esp_timer_start_once(notification_timer_, duration_ms * 1000)); + ESP_LOGW(TAG, "ShowNotification: %s", notification); } void Display::UpdateStatusBar(bool update_all) { - auto& app = Application::GetInstance(); - auto& board = Board::GetInstance(); - auto codec = board.GetAudioCodec(); - - // Update mute icon - { - DisplayLockGuard lock(this); - if (mute_label_ == nullptr) { - return; - } - - // 如果静音状态改变,则更新图标 - if (codec->output_volume() == 0 && !muted_) { - muted_ = true; - lv_label_set_text(mute_label_, FONT_AWESOME_VOLUME_XMARK); - } else if (codec->output_volume() > 0 && muted_) { - muted_ = false; - lv_label_set_text(mute_label_, ""); - } - } - - // Update time - if (app.GetDeviceState() == kDeviceStateIdle) { - if (last_status_update_time_ + std::chrono::seconds(10) < std::chrono::system_clock::now()) { - // Set status to clock "HH:MM" - time_t now = time(NULL); - struct tm* tm = localtime(&now); - // Check if the we have already set the time - if (tm->tm_year >= 2025 - 1900) { - char time_str[16]; - strftime(time_str, sizeof(time_str), "%H:%M ", tm); - SetStatus(time_str); - } else { - ESP_LOGW(TAG, "System time is not set, tm_year: %d", tm->tm_year); - } - } - } - - esp_pm_lock_acquire(pm_lock_); - // 更新电池图标 - int battery_level; - bool charging, discharging; - const char* icon = nullptr; - if (board.GetBatteryLevel(battery_level, charging, discharging)) { - if (charging) { - icon = FONT_AWESOME_BATTERY_BOLT; - } else { - const char* levels[] = { - FONT_AWESOME_BATTERY_EMPTY, // 0-19% - FONT_AWESOME_BATTERY_QUARTER, // 20-39% - FONT_AWESOME_BATTERY_HALF, // 40-59% - FONT_AWESOME_BATTERY_THREE_QUARTERS, // 60-79% - FONT_AWESOME_BATTERY_FULL, // 80-99% - FONT_AWESOME_BATTERY_FULL, // 100% - }; - icon = levels[battery_level / 20]; - } - DisplayLockGuard lock(this); - if (battery_label_ != nullptr && battery_icon_ != icon) { - battery_icon_ = icon; - lv_label_set_text(battery_label_, battery_icon_); - } - - if (low_battery_popup_ != nullptr) { - if (strcmp(icon, FONT_AWESOME_BATTERY_EMPTY) == 0 && discharging) { - if (lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { // 如果低电量提示框隐藏,则显示 - lv_obj_remove_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN); - app.PlaySound(Lang::Sounds::OGG_LOW_BATTERY); - } - } else { - // Hide the low battery popup when the battery is not empty - if (!lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { // 如果低电量提示框显示,则隐藏 - lv_obj_add_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN); - } - } - } - } - - // 每 10 秒更新一次网络图标 - static int seconds_counter = 0; - if (update_all || seconds_counter++ % 10 == 0) { - // 升级固件时,不读取 4G 网络状态,避免占用 UART 资源 - auto device_state = Application::GetInstance().GetDeviceState(); - static const std::vector allowed_states = { - kDeviceStateIdle, - kDeviceStateStarting, - kDeviceStateWifiConfiguring, - kDeviceStateListening, - kDeviceStateActivating, - }; - if (std::find(allowed_states.begin(), allowed_states.end(), device_state) != allowed_states.end()) { - icon = board.GetNetworkStateIcon(); - if (network_label_ != nullptr && icon != nullptr && network_icon_ != icon) { - DisplayLockGuard lock(this); - network_icon_ = icon; - lv_label_set_text(network_label_, network_icon_); - } - } - } - - esp_pm_lock_release(pm_lock_); } void Display::SetEmotion(const char* emotion) { - const char* utf8 = font_awesome_get_utf8(emotion); - if (utf8 != nullptr) { - SetIcon(utf8); - } else { - SetIcon(FONT_AWESOME_NEUTRAL); - } -} - -void Display::SetIcon(const char* icon) { - DisplayLockGuard lock(this); - if (emotion_label_ == nullptr) { - return; - } - lv_label_set_text(emotion_label_, icon); -} - -void Display::SetPreviewImage(const lv_img_dsc_t* image) { - // Do nothing + ESP_LOGW(TAG, "SetEmotion: %s", emotion); } void Display::SetChatMessage(const char* role, const char* content) { - DisplayLockGuard lock(this); - if (chat_message_label_ == nullptr) { - return; - } - lv_label_set_text(chat_message_label_, content); + ESP_LOGW(TAG, "Role:%s", role); + ESP_LOGW(TAG, " %s", content); +} + +void Display::SetTheme(Theme* theme) { + current_theme_ = theme; + Settings settings("display", true); + settings.SetString("theme", theme->name()); } void Display::SetMusicInfo(const char* song_name) { @@ -234,25 +61,13 @@ void Display::SetMusicInfo(const char* song_name) { std::string music_text = ""; music_text += song_name; lv_label_set_text(chat_message_label_, music_text.c_str()); - SetIcon(FONT_AWESOME_MUSIC); + SetEmotion(FONT_AWESOME_MUSIC); } else { lv_label_set_text(chat_message_label_, ""); - SetIcon(FONT_AWESOME_NEUTRAL); + SetEmotion(FONT_AWESOME_NEUTRAL); } } -void Display::SetTheme(const std::string& theme_name) { - current_theme_name_ = theme_name; - Settings settings("display", true); - settings.SetString("theme", theme_name); -} - void Display::SetPowerSaveMode(bool on) { - if (on) { - SetChatMessage("system", ""); - SetEmotion("sleepy"); - } else { - SetChatMessage("system", ""); - SetEmotion("neutral"); - } -} \ No newline at end of file + ESP_LOGW(TAG, "SetPowerSaveMode: %d", on); +} diff --git a/main/display/display.h b/main/display/display.h index f20647b..3cf83c5 100644 --- a/main/display/display.h +++ b/main/display/display.h @@ -1,7 +1,13 @@ #ifndef DISPLAY_H #define DISPLAY_H +#include "emoji_collection.h" + +#ifdef LVGL_VERSION_MAJOR +#define HAVE_LVGL 1 #include +#endif + #include #include #include @@ -9,10 +15,14 @@ #include #include -struct DisplayFonts { - const lv_font_t* text_font = nullptr; - const lv_font_t* icon_font = nullptr; - const lv_font_t* emoji_font = nullptr; +class Theme { +public: + Theme(const std::string& name) : name_(name) {} + virtual ~Theme() = default; + + inline std::string name() const { return name_; } +private: + std::string name_; }; class Display { @@ -25,12 +35,10 @@ public: virtual void ShowNotification(const std::string ¬ification, int duration_ms = 3000); virtual void SetEmotion(const char* emotion); virtual void SetChatMessage(const char* role, const char* content); - virtual void SetMusicInfo(const char* song_name); - virtual void SetIcon(const char* icon); - virtual void SetPreviewImage(const lv_img_dsc_t* image); - virtual void SetTheme(const std::string& theme_name); - virtual std::string GetTheme() { return current_theme_name_; } + virtual void SetTheme(Theme* theme); + virtual Theme* GetTheme() { return current_theme_; } virtual void UpdateStatusBar(bool update_all = false); + virtual void SetMusicInfo(const char* song_name); virtual void SetPowerSaveMode(bool on); virtual void start() {} virtual void clearScreen() {} // 清除FFT显示,默认为空实现 @@ -42,31 +50,14 @@ public: protected: int width_ = 0; int height_ = 0; - - esp_pm_lock_handle_t pm_lock_ = nullptr; - lv_display_t *display_ = nullptr; - lv_obj_t *emotion_label_ = nullptr; - lv_obj_t *network_label_ = nullptr; - lv_obj_t *status_label_ = nullptr; - lv_obj_t *notification_label_ = nullptr; - lv_obj_t *mute_label_ = nullptr; - lv_obj_t *battery_label_ = nullptr; - lv_obj_t* chat_message_label_ = nullptr; - lv_obj_t* low_battery_popup_ = nullptr; - lv_obj_t* low_battery_label_ = nullptr; - - const char* battery_icon_ = nullptr; - const char* network_icon_ = nullptr; - bool muted_ = false; - std::string current_theme_name_; - - std::chrono::system_clock::time_point last_status_update_time_; - esp_timer_handle_t notification_timer_ = nullptr; + Theme* current_theme_ = nullptr; friend class DisplayLockGuard; virtual bool Lock(int timeout_ms = 0) = 0; virtual void Unlock() = 0; + lv_obj_t* chat_message_label_ = nullptr; + lv_obj_t *emotion_label_ = nullptr; }; @@ -93,4 +84,4 @@ private: virtual void Unlock() override {} }; -#endif \ No newline at end of file +#endif diff --git a/main/display/esplog_display.cc b/main/display/esplog_display.cc deleted file mode 100644 index 68784c2..0000000 --- a/main/display/esplog_display.cc +++ /dev/null @@ -1,44 +0,0 @@ -#include "esplog_display.h" - -#include "esp_log.h" - -#define TAG "EspLogDisplay" - - -EspLogDisplay::EspLogDisplay() -{} - -EspLogDisplay::~EspLogDisplay() -{} - -void EspLogDisplay::SetStatus(const char* status) -{ - ESP_LOGW(TAG, "SetStatus: %s", status); -} - -void EspLogDisplay::ShowNotification(const char* notification, int duration_ms) -{ - ESP_LOGW(TAG, "ShowNotification: %s", notification); -} -void EspLogDisplay::ShowNotification(const std::string ¬ification, int duration_ms) -{ - ShowNotification(notification.c_str(), duration_ms); -} - - -void EspLogDisplay::SetEmotion(const char* emotion) -{ - ESP_LOGW(TAG, "SetEmotion: %s", emotion); -} - -void EspLogDisplay::SetIcon(const char* icon) -{ - ESP_LOGW(TAG, "SetIcon: %s", icon); -} - -void EspLogDisplay::SetChatMessage(const char* role, const char* content) -{ - ESP_LOGW(TAG, "Role:%s", role); - ESP_LOGW(TAG, " %s", content); -} - diff --git a/main/display/esplog_display.h b/main/display/esplog_display.h deleted file mode 100644 index 031223a..0000000 --- a/main/display/esplog_display.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef ESPLOG_DISPLAY_H_ -#define ESPLOG_DISPLAY_H_ - -#include "display.h" - -#include - -class EspLogDisplay : public Display { -public: - EspLogDisplay(); - ~EspLogDisplay(); - - virtual void SetStatus(const char* status); - virtual void ShowNotification(const char* notification, int duration_ms = 3000); - virtual void ShowNotification(const std::string ¬ification, int duration_ms = 3000); - virtual void SetEmotion(const char* emotion) override; - virtual void SetChatMessage(const char* role, const char* content) override; - virtual void SetIcon(const char* icon) override; - virtual inline void SetPreviewImage(const lv_img_dsc_t* image) override {} - virtual inline void SetTheme(const std::string& theme_name) override {} - virtual inline void UpdateStatusBar(bool update_all = false) override {} - -protected: - virtual inline bool Lock(int timeout_ms = 0) override { return true; } - virtual inline void Unlock() override {} -}; - -#endif diff --git a/main/display/lcd_display.cc b/main/display/lcd_display.cc index a9f80bc..8f47e78 100644 --- a/main/display/lcd_display.cc +++ b/main/display/lcd_display.cc @@ -1,114 +1,96 @@ #include "lcd_display.h" +#include "gif/lvgl_gif.h" +#include "settings.h" +#include "lvgl_theme.h" +#include "assets/lang_config.h" #include #include #include #include -#include -#include #include #include -#include -#include "assets/lang_config.h" +#include #include -#include -#include -#include "settings.h" #include "board.h" -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - #define TAG "LcdDisplay" -#define FFT_SIZE 512 -static int current_heights[40] = {0}; -static float avg_power_spectrum[FFT_SIZE/2]={-25.0f}; - -#define COLOR_BLACK 0x0000 -#define COLOR_RED 0xF800 -#define COLOR_GREEN 0x07E0 -#define COLOR_BLUE 0x001F -#define COLOR_YELLOW 0xFFE0 -#define COLOR_CYAN 0x07FF -#define COLOR_MAGENTA 0xF81F -#define COLOR_WHITE 0xFFFF - -// Color definitions for dark theme -#define DARK_BACKGROUND_COLOR lv_color_hex(0x121212) // Dark background -#define DARK_TEXT_COLOR lv_color_white() // White text -#define DARK_CHAT_BACKGROUND_COLOR lv_color_hex(0x1E1E1E) // Slightly lighter than background -#define DARK_USER_BUBBLE_COLOR lv_color_hex(0x1A6C37) // Dark green -#define DARK_ASSISTANT_BUBBLE_COLOR lv_color_hex(0x333333) // Dark gray -#define DARK_SYSTEM_BUBBLE_COLOR lv_color_hex(0x2A2A2A) // Medium gray -#define DARK_SYSTEM_TEXT_COLOR lv_color_hex(0xAAAAAA) // Light gray text -#define DARK_BORDER_COLOR lv_color_hex(0x333333) // Dark gray border -#define DARK_LOW_BATTERY_COLOR lv_color_hex(0xFF0000) // Red for dark mode - -// Color definitions for light theme -#define LIGHT_BACKGROUND_COLOR lv_color_white() // White background -#define LIGHT_TEXT_COLOR lv_color_black() // Black text -#define LIGHT_CHAT_BACKGROUND_COLOR lv_color_hex(0xE0E0E0) // Light gray background -#define LIGHT_USER_BUBBLE_COLOR lv_color_hex(0x95EC69) // WeChat green -#define LIGHT_ASSISTANT_BUBBLE_COLOR lv_color_white() // White -#define LIGHT_SYSTEM_BUBBLE_COLOR lv_color_hex(0xE0E0E0) // Light gray -#define LIGHT_SYSTEM_TEXT_COLOR lv_color_hex(0x666666) // Dark gray text -#define LIGHT_BORDER_COLOR lv_color_hex(0xE0E0E0) // Light gray border -#define LIGHT_LOW_BATTERY_COLOR lv_color_black() // Black for light mode - - -// Define dark theme colors -const ThemeColors DARK_THEME = { - .background = DARK_BACKGROUND_COLOR, - .text = DARK_TEXT_COLOR, - .chat_background = DARK_CHAT_BACKGROUND_COLOR, - .user_bubble = DARK_USER_BUBBLE_COLOR, - .assistant_bubble = DARK_ASSISTANT_BUBBLE_COLOR, - .system_bubble = DARK_SYSTEM_BUBBLE_COLOR, - .system_text = DARK_SYSTEM_TEXT_COLOR, - .border = DARK_BORDER_COLOR, - .low_battery = DARK_LOW_BATTERY_COLOR -}; - -// Define light theme colors -const ThemeColors LIGHT_THEME = { - .background = LIGHT_BACKGROUND_COLOR, - .text = LIGHT_TEXT_COLOR, - .chat_background = LIGHT_CHAT_BACKGROUND_COLOR, - .user_bubble = LIGHT_USER_BUBBLE_COLOR, - .assistant_bubble = LIGHT_ASSISTANT_BUBBLE_COLOR, - .system_bubble = LIGHT_SYSTEM_BUBBLE_COLOR, - .system_text = LIGHT_SYSTEM_TEXT_COLOR, - .border = LIGHT_BORDER_COLOR, - .low_battery = LIGHT_LOW_BATTERY_COLOR -}; - - +LV_FONT_DECLARE(LVGL_TEXT_FONT); +LV_FONT_DECLARE(LVGL_ICON_FONT); LV_FONT_DECLARE(font_awesome_30_4); -LcdDisplay::LcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, DisplayFonts fonts, int width, int height) - : panel_io_(panel_io), panel_(panel), fonts_(fonts) { +void LcdDisplay::InitializeLcdThemes() { + auto text_font = std::make_shared(&LVGL_TEXT_FONT); + auto icon_font = std::make_shared(&LVGL_ICON_FONT); + auto large_icon_font = std::make_shared(&font_awesome_30_4); + + // light theme + auto light_theme = new LvglTheme("light"); + light_theme->set_background_color(lv_color_white()); + light_theme->set_text_color(lv_color_black()); + light_theme->set_chat_background_color(lv_color_hex(0xE0E0E0)); + light_theme->set_user_bubble_color(lv_color_hex(0x95EC69)); + light_theme->set_assistant_bubble_color(lv_color_white()); + light_theme->set_system_bubble_color(lv_color_hex(0xE0E0E0)); + light_theme->set_system_text_color(lv_color_hex(0x666666)); + light_theme->set_border_color(lv_color_hex(0xE0E0E0)); + light_theme->set_low_battery_color(lv_color_black()); + light_theme->set_text_font(text_font); + light_theme->set_icon_font(icon_font); + light_theme->set_large_icon_font(large_icon_font); + + // dark theme + auto dark_theme = new LvglTheme("dark"); + dark_theme->set_background_color(lv_color_hex(0x121212)); + dark_theme->set_text_color(lv_color_white()); + dark_theme->set_chat_background_color(lv_color_hex(0x1E1E1E)); + dark_theme->set_user_bubble_color(lv_color_hex(0x1A6C37)); + dark_theme->set_assistant_bubble_color(lv_color_hex(0x333333)); + dark_theme->set_system_bubble_color(lv_color_hex(0x2A2A2A)); + dark_theme->set_system_text_color(lv_color_hex(0xAAAAAA)); + dark_theme->set_border_color(lv_color_hex(0x333333)); + dark_theme->set_low_battery_color(lv_color_hex(0xFF0000)); + dark_theme->set_text_font(text_font); + dark_theme->set_icon_font(icon_font); + dark_theme->set_large_icon_font(large_icon_font); + + auto& theme_manager = LvglThemeManager::GetInstance(); + theme_manager.RegisterTheme("light", light_theme); + theme_manager.RegisterTheme("dark", dark_theme); +} + +LcdDisplay::LcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height) + : panel_io_(panel_io), panel_(panel) { width_ = width; height_ = height; + // Initialize LCD themes + InitializeLcdThemes(); + // Load theme from settings Settings settings("display", false); - current_theme_name_ = settings.GetString("theme", "light"); + std::string theme_name = settings.GetString("theme", "light"); + current_theme_ = LvglThemeManager::GetInstance().GetTheme(theme_name); - // Update the theme - if (current_theme_name_ == "dark") { - current_theme_ = DARK_THEME; - } else if (current_theme_name_ == "light") { - current_theme_ = LIGHT_THEME; - } + // Create a timer to hide the preview image + esp_timer_create_args_t preview_timer_args = { + .callback = [](void* arg) { + LcdDisplay* display = static_cast(arg); + display->SetPreviewImage(nullptr); + }, + .arg = this, + .dispatch_method = ESP_TIMER_TASK, + .name = "preview_timer", + .skip_unhandled_events = false, + }; + esp_timer_create(&preview_timer_args, &preview_timer_); } SpiLcdDisplay::SpiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, - int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts) - : LcdDisplay(panel_io, panel, fonts, width, height) { + int width, int height, int offset_x, int offset_y, bool mirror_x, bool mirror_y, bool swap_xy) + : LcdDisplay(panel_io, panel, width, height) { // draw white std::vector buffer(width_, 0xFFFF); @@ -123,10 +105,21 @@ SpiLcdDisplay::SpiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_h ESP_LOGI(TAG, "Initialize LVGL library"); lv_init(); +#if CONFIG_SPIRAM + // lv image cache, currently only PNG is supported + size_t psram_size_mb = esp_psram_get_size() / 1024 / 1024; + if (psram_size_mb >= 8) { + lv_image_cache_resize(2 * 1024 * 1024, true); + ESP_LOGI(TAG, "Use 2MB of PSRAM for image cache"); + } else if (psram_size_mb >= 2) { + lv_image_cache_resize(512 * 1024, true); + ESP_LOGI(TAG, "Use 512KB of PSRAM for image cache"); + } +#endif + ESP_LOGI(TAG, "Initialize LVGL port"); lvgl_port_cfg_t port_cfg = ESP_LVGL_PORT_INIT_CONFIG(); port_cfg.task_priority = 1; - port_cfg.timer_period_ms = 50; lvgl_port_init(&port_cfg); ESP_LOGI(TAG, "Adding LCD display"); @@ -166,36 +159,14 @@ SpiLcdDisplay::SpiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_h lv_display_set_offset(display_, offset_x, offset_y); } - // 初始化 FFT 相关内存 - fft_real = (float*)heap_caps_malloc(FFT_SIZE * sizeof(float), MALLOC_CAP_SPIRAM); - fft_imag = (float*)heap_caps_malloc(FFT_SIZE * sizeof(float), MALLOC_CAP_SPIRAM); - hanning_window_float = (float*)heap_caps_malloc(FFT_SIZE * sizeof(float), MALLOC_CAP_SPIRAM); - - // 创建窗函数 - for (int i = 0; i < FFT_SIZE; i++) { - hanning_window_float[i] = 0.5 * (1.0 - cos(2.0 * M_PI * i / (FFT_SIZE - 1))); - } - - if(audio_data==nullptr){ - audio_data=(int16_t*)heap_caps_malloc(sizeof(int16_t)*1152, MALLOC_CAP_SPIRAM); - memset(audio_data,0,sizeof(int16_t)*1152); - } - if(frame_audio_data==nullptr){ - frame_audio_data=(int16_t*)heap_caps_malloc(sizeof(int16_t)*1152, MALLOC_CAP_SPIRAM); - memset(frame_audio_data,0,sizeof(int16_t)*1152); - } - - ESP_LOGI(TAG,"Initialize fft_input, audio_data, frame_audio_data, spectrum_data"); - SetupUI(); } // RGB LCD实现 RgbLcdDisplay::RgbLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts) - : LcdDisplay(panel_io, panel, fonts, width, height) { + bool mirror_x, bool mirror_y, bool swap_xy) + : LcdDisplay(panel_io, panel, width, height) { // draw white std::vector buffer(width_, 0xFFFF); @@ -255,9 +226,8 @@ RgbLcdDisplay::RgbLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_h MipiLcdDisplay::MipiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts) - : LcdDisplay(panel_io, panel, fonts, width, height) { + bool mirror_x, bool mirror_y, bool swap_xy) + : LcdDisplay(panel_io, panel, width, height) { // Set the display to on ESP_LOGI(TAG, "Turning display on"); @@ -272,16 +242,16 @@ MipiLcdDisplay::MipiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel ESP_LOGI(TAG, "Adding LCD display"); const lvgl_port_display_cfg_t disp_cfg = { - .io_handle = panel_io, - .panel_handle = panel, - .control_handle = nullptr, - .buffer_size = static_cast(width_ * 50), - .double_buffer = false, - .hres = static_cast(width_), - .vres = static_cast(height_), - .monochrome = false, - /* Rotation values must be same as used in esp_lcd for initial settings of the screen */ - .rotation = { + .io_handle = panel_io, + .panel_handle = panel, + .control_handle = nullptr, + .buffer_size = static_cast(width_ * 50), + .double_buffer = false, + .hres = static_cast(width_), + .vres = static_cast(height_), + .monochrome = false, + /* Rotation values must be same as used in esp_lcd for initial settings of the screen */ + .rotation = { .swap_xy = swap_xy, .mirror_x = mirror_x, .mirror_y = mirror_y, @@ -312,25 +282,34 @@ MipiLcdDisplay::MipiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel } LcdDisplay::~LcdDisplay() { - // 停止FFT任务 - if (fft_task_handle != nullptr) { - ESP_LOGI(TAG, "Stopping FFT task in destructor"); - fft_task_should_stop = true; - - // 等待任务停止 - int wait_count = 0; - while (fft_task_handle != nullptr && wait_count < 100) { - vTaskDelay(pdMS_TO_TICKS(10)); - wait_count++; - } - - if (fft_task_handle != nullptr) { - vTaskDelete(fft_task_handle); - fft_task_handle = nullptr; - } + SetPreviewImage(nullptr); + + // Clean up GIF controller + if (gif_controller_) { + gif_controller_->Stop(); + gif_controller_.reset(); } - // 然后再清理 LVGL 对象 + if (preview_timer_ != nullptr) { + esp_timer_stop(preview_timer_); + esp_timer_delete(preview_timer_); + } + + if (preview_image_ != nullptr) { + lv_obj_del(preview_image_); + } + if (chat_message_label_ != nullptr) { + lv_obj_del(chat_message_label_); + } + if (emoji_label_ != nullptr) { + lv_obj_del(emoji_label_); + } + if (emoji_image_ != nullptr) { + lv_obj_del(emoji_image_); + } + if (emoji_box_ != nullptr) { + lv_obj_del(emoji_box_); + } if (content_ != nullptr) { lv_obj_del(content_); } @@ -367,36 +346,42 @@ void LcdDisplay::Unlock() { void LcdDisplay::SetupUI() { DisplayLockGuard lock(this); + auto lvgl_theme = static_cast(current_theme_); + auto text_font = lvgl_theme->text_font()->font(); + auto icon_font = lvgl_theme->icon_font()->font(); + auto large_icon_font = lvgl_theme->large_icon_font()->font(); + auto screen = lv_screen_active(); - lv_obj_set_style_text_font(screen, fonts_.text_font, 0); - lv_obj_set_style_text_color(screen, current_theme_.text, 0); - lv_obj_set_style_bg_color(screen, current_theme_.background, 0); + lv_obj_set_style_text_font(screen, text_font, 0); + lv_obj_set_style_text_color(screen, lvgl_theme->text_color(), 0); + lv_obj_set_style_bg_color(screen, lvgl_theme->background_color(), 0); /* Container */ container_ = lv_obj_create(screen); lv_obj_set_size(container_, LV_HOR_RES, LV_VER_RES); + lv_obj_set_style_radius(container_, 0, 0); lv_obj_set_flex_flow(container_, LV_FLEX_FLOW_COLUMN); lv_obj_set_style_pad_all(container_, 0, 0); lv_obj_set_style_border_width(container_, 0, 0); lv_obj_set_style_pad_row(container_, 0, 0); - lv_obj_set_style_bg_color(container_, current_theme_.background, 0); - lv_obj_set_style_border_color(container_, current_theme_.border, 0); + lv_obj_set_style_bg_color(container_, lvgl_theme->background_color(), 0); + lv_obj_set_style_border_color(container_, lvgl_theme->border_color(), 0); /* Status bar */ status_bar_ = lv_obj_create(container_); lv_obj_set_size(status_bar_, LV_HOR_RES, LV_SIZE_CONTENT); lv_obj_set_style_radius(status_bar_, 0, 0); - lv_obj_set_style_bg_color(status_bar_, current_theme_.background, 0); - lv_obj_set_style_text_color(status_bar_, current_theme_.text, 0); + lv_obj_set_style_bg_color(status_bar_, lvgl_theme->background_color(), 0); + lv_obj_set_style_text_color(status_bar_, lvgl_theme->text_color(), 0); /* Content - Chat area */ content_ = lv_obj_create(container_); lv_obj_set_style_radius(content_, 0, 0); lv_obj_set_width(content_, LV_HOR_RES); lv_obj_set_flex_grow(content_, 1); - lv_obj_set_style_pad_all(content_, 10, 0); - lv_obj_set_style_bg_color(content_, current_theme_.chat_background, 0); // Background for chat area - lv_obj_set_style_border_color(content_, current_theme_.border, 0); // Border color for chat area + lv_obj_set_style_pad_all(content_, lvgl_theme->spacing(4), 0); + lv_obj_set_style_border_width(content_, 0, 0); + lv_obj_set_style_bg_color(content_, lvgl_theme->chat_background_color(), 0); // Background for chat area // Enable scrolling for chat content lv_obj_set_scrollbar_mode(content_, LV_SCROLLBAR_MODE_OFF); @@ -405,7 +390,7 @@ void LcdDisplay::SetupUI() { // Create a flex container for chat messages lv_obj_set_flex_flow(content_, LV_FLEX_FLOW_COLUMN); lv_obj_set_flex_align(content_, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_START); - lv_obj_set_style_pad_row(content_, 10, 0); // Space between messages + lv_obj_set_style_pad_row(content_, lvgl_theme->spacing(4), 0); // Space between messages // We'll create chat messages dynamically in SetChatMessage chat_message_label_ = nullptr; @@ -415,25 +400,23 @@ void LcdDisplay::SetupUI() { lv_obj_set_style_pad_all(status_bar_, 0, 0); lv_obj_set_style_border_width(status_bar_, 0, 0); lv_obj_set_style_pad_column(status_bar_, 0, 0); - lv_obj_set_style_pad_left(status_bar_, 10, 0); - lv_obj_set_style_pad_right(status_bar_, 10, 0); - lv_obj_set_style_pad_top(status_bar_, 2, 0); - lv_obj_set_style_pad_bottom(status_bar_, 2, 0); + lv_obj_set_style_pad_top(status_bar_, lvgl_theme->spacing(2), 0); + lv_obj_set_style_pad_bottom(status_bar_, lvgl_theme->spacing(2), 0); + lv_obj_set_style_pad_left(status_bar_, lvgl_theme->spacing(4), 0); + lv_obj_set_style_pad_right(status_bar_, lvgl_theme->spacing(4), 0); lv_obj_set_scrollbar_mode(status_bar_, LV_SCROLLBAR_MODE_OFF); // 设置状态栏的内容垂直居中 lv_obj_set_flex_align(status_bar_, LV_FLEX_ALIGN_SPACE_BETWEEN, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); - // 创建emotion_label_在状态栏最左侧 - emotion_label_ = lv_label_create(status_bar_); - lv_obj_set_style_text_font(emotion_label_, &font_awesome_30_4, 0); - lv_obj_set_style_text_color(emotion_label_, current_theme_.text, 0); - lv_label_set_text(emotion_label_, FONT_AWESOME_AI_CHIP); - lv_obj_set_style_margin_right(emotion_label_, 5, 0); // 添加右边距,与后面的元素分隔 + network_label_ = lv_label_create(status_bar_); + lv_label_set_text(network_label_, ""); + lv_obj_set_style_text_font(network_label_, icon_font, 0); + lv_obj_set_style_text_color(network_label_, lvgl_theme->text_color(), 0); notification_label_ = lv_label_create(status_bar_); lv_obj_set_flex_grow(notification_label_, 1); lv_obj_set_style_text_align(notification_label_, LV_TEXT_ALIGN_CENTER, 0); - lv_obj_set_style_text_color(notification_label_, current_theme_.text, 0); + lv_obj_set_style_text_color(notification_label_, lvgl_theme->text_color(), 0); lv_label_set_text(notification_label_, ""); lv_obj_add_flag(notification_label_, LV_OBJ_FLAG_HIDDEN); @@ -441,37 +424,41 @@ void LcdDisplay::SetupUI() { lv_obj_set_flex_grow(status_label_, 1); lv_label_set_long_mode(status_label_, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_obj_set_style_text_align(status_label_, LV_TEXT_ALIGN_CENTER, 0); - lv_obj_set_style_text_color(status_label_, current_theme_.text, 0); + lv_obj_set_style_text_color(status_label_, lvgl_theme->text_color(), 0); lv_label_set_text(status_label_, Lang::Strings::INITIALIZING); mute_label_ = lv_label_create(status_bar_); lv_label_set_text(mute_label_, ""); - lv_obj_set_style_text_font(mute_label_, fonts_.icon_font, 0); - lv_obj_set_style_text_color(mute_label_, current_theme_.text, 0); - - network_label_ = lv_label_create(status_bar_); - lv_label_set_text(network_label_, ""); - lv_obj_set_style_text_font(network_label_, fonts_.icon_font, 0); - lv_obj_set_style_text_color(network_label_, current_theme_.text, 0); - lv_obj_set_style_margin_left(network_label_, 5, 0); // 添加左边距,与前面的元素分隔 + lv_obj_set_style_text_font(mute_label_, icon_font, 0); + lv_obj_set_style_text_color(mute_label_, lvgl_theme->text_color(), 0); battery_label_ = lv_label_create(status_bar_); lv_label_set_text(battery_label_, ""); - lv_obj_set_style_text_font(battery_label_, fonts_.icon_font, 0); - lv_obj_set_style_text_color(battery_label_, current_theme_.text, 0); - lv_obj_set_style_margin_left(battery_label_, 5, 0); // 添加左边距,与前面的元素分隔 + lv_obj_set_style_text_font(battery_label_, icon_font, 0); + lv_obj_set_style_text_color(battery_label_, lvgl_theme->text_color(), 0); + lv_obj_set_style_margin_left(battery_label_, lvgl_theme->spacing(2), 0); // 添加左边距,与前面的元素分隔 low_battery_popup_ = lv_obj_create(screen); lv_obj_set_scrollbar_mode(low_battery_popup_, LV_SCROLLBAR_MODE_OFF); - lv_obj_set_size(low_battery_popup_, LV_HOR_RES * 0.9, fonts_.text_font->line_height * 2); - lv_obj_align(low_battery_popup_, LV_ALIGN_BOTTOM_MID, 0, 0); - lv_obj_set_style_bg_color(low_battery_popup_, current_theme_.low_battery, 0); - lv_obj_set_style_radius(low_battery_popup_, 10, 0); + lv_obj_set_size(low_battery_popup_, LV_HOR_RES * 0.9, text_font->line_height * 2); + lv_obj_align(low_battery_popup_, LV_ALIGN_BOTTOM_MID, 0, -lvgl_theme->spacing(4)); + lv_obj_set_style_bg_color(low_battery_popup_, lvgl_theme->low_battery_color(), 0); + lv_obj_set_style_radius(low_battery_popup_, lvgl_theme->spacing(4), 0); low_battery_label_ = lv_label_create(low_battery_popup_); lv_label_set_text(low_battery_label_, Lang::Strings::BATTERY_NEED_CHARGE); lv_obj_set_style_text_color(low_battery_label_, lv_color_white(), 0); lv_obj_center(low_battery_label_); lv_obj_add_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN); + + emoji_image_ = lv_img_create(screen); + lv_obj_align(emoji_image_, LV_ALIGN_TOP_MID, 0, text_font->line_height + lvgl_theme->spacing(2)); + + // Display AI logo while booting + emoji_label_ = lv_label_create(screen); + lv_obj_center(emoji_label_); + lv_obj_set_style_text_font(emoji_label_, large_icon_font, 0); + lv_obj_set_style_text_color(emoji_label_, lvgl_theme->text_color(), 0); + lv_label_set_text(emoji_label_, FONT_AWESOME_MICROCHIP_AI); } #if CONFIG_IDF_TARGET_ESP32P4 #define MAX_MESSAGES 40 @@ -484,9 +471,6 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) { return; } - //避免出现空的消息框 - if(strlen(content) == 0) return; - // 检查消息数量是否超过限制 uint32_t child_count = lv_obj_get_child_cnt(content_); if (child_count >= MAX_MESSAGES) { @@ -503,37 +487,50 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) { } // 折叠系统消息(如果是系统消息,检查最后一个消息是否也是系统消息) - if (strcmp(role, "system") == 0 && child_count > 0) { - // 获取最后一个消息容器 - lv_obj_t* last_container = lv_obj_get_child(content_, child_count - 1); - if (last_container != nullptr && lv_obj_get_child_cnt(last_container) > 0) { - // 获取容器内的气泡 - lv_obj_t* last_bubble = lv_obj_get_child(last_container, 0); - if (last_bubble != nullptr) { - // 检查气泡类型是否为系统消息 - void* bubble_type_ptr = lv_obj_get_user_data(last_bubble); - if (bubble_type_ptr != nullptr && strcmp((const char*)bubble_type_ptr, "system") == 0) { - // 如果最后一个消息也是系统消息,则删除它 - lv_obj_del(last_container); + if (strcmp(role, "system") == 0) { + if (child_count > 0) { + // 获取最后一个消息容器 + lv_obj_t* last_container = lv_obj_get_child(content_, child_count - 1); + if (last_container != nullptr && lv_obj_get_child_cnt(last_container) > 0) { + // 获取容器内的气泡 + lv_obj_t* last_bubble = lv_obj_get_child(last_container, 0); + if (last_bubble != nullptr) { + // 检查气泡类型是否为系统消息 + void* bubble_type_ptr = lv_obj_get_user_data(last_bubble); + if (bubble_type_ptr != nullptr && strcmp((const char*)bubble_type_ptr, "system") == 0) { + // 如果最后一个消息也是系统消息,则删除它 + lv_obj_del(last_container); + } } } } + } else { + // 隐藏居中显示的 AI logo + lv_obj_add_flag(emoji_label_, LV_OBJ_FLAG_HIDDEN); } - + + //避免出现空的消息框 + if(strlen(content) == 0) { + return; + } + + auto lvgl_theme = static_cast(current_theme_); + auto text_font = lvgl_theme->text_font()->font(); + // Create a message bubble lv_obj_t* msg_bubble = lv_obj_create(content_); lv_obj_set_style_radius(msg_bubble, 8, 0); lv_obj_set_scrollbar_mode(msg_bubble, LV_SCROLLBAR_MODE_OFF); lv_obj_set_style_border_width(msg_bubble, 1, 0); - lv_obj_set_style_border_color(msg_bubble, current_theme_.border, 0); - lv_obj_set_style_pad_all(msg_bubble, 8, 0); + lv_obj_set_style_border_color(msg_bubble, lvgl_theme->border_color(), 0); + lv_obj_set_style_pad_all(msg_bubble, lvgl_theme->spacing(4), 0); // Create the message text lv_obj_t* msg_text = lv_label_create(msg_bubble); lv_label_set_text(msg_text, content); // 计算文本实际宽度 - lv_coord_t text_width = lv_txt_get_width(content, strlen(content), fonts_.text_font, 0); + lv_coord_t text_width = lv_txt_get_width(content, strlen(content), text_font, 0); // 计算气泡宽度 lv_coord_t max_width = LV_HOR_RES * 85 / 100 - 16; // 屏幕宽度的85% @@ -555,7 +552,6 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) { // 设置消息文本的宽度 lv_obj_set_width(msg_text, bubble_width); // 减去padding lv_label_set_long_mode(msg_text, LV_LABEL_LONG_WRAP); - lv_obj_set_style_text_font(msg_text, fonts_.text_font, 0); // 设置气泡宽度 lv_obj_set_width(msg_bubble, bubble_width); @@ -564,9 +560,9 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) { // Set alignment and style based on message role if (strcmp(role, "user") == 0) { // User messages are right-aligned with green background - lv_obj_set_style_bg_color(msg_bubble, current_theme_.user_bubble, 0); + lv_obj_set_style_bg_color(msg_bubble, lvgl_theme->user_bubble_color(), 0); // Set text color for contrast - lv_obj_set_style_text_color(msg_text, current_theme_.text, 0); + lv_obj_set_style_text_color(msg_text, lvgl_theme->text_color(), 0); // 设置自定义属性标记气泡类型 lv_obj_set_user_data(msg_bubble, (void*)"user"); @@ -579,9 +575,9 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) { lv_obj_set_style_flex_grow(msg_bubble, 0, 0); } else if (strcmp(role, "assistant") == 0) { // Assistant messages are left-aligned with white background - lv_obj_set_style_bg_color(msg_bubble, current_theme_.assistant_bubble, 0); + lv_obj_set_style_bg_color(msg_bubble, lvgl_theme->assistant_bubble_color(), 0); // Set text color for contrast - lv_obj_set_style_text_color(msg_text, current_theme_.text, 0); + lv_obj_set_style_text_color(msg_text, lvgl_theme->text_color(), 0); // 设置自定义属性标记气泡类型 lv_obj_set_user_data(msg_bubble, (void*)"assistant"); @@ -594,9 +590,9 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) { lv_obj_set_style_flex_grow(msg_bubble, 0, 0); } else if (strcmp(role, "system") == 0) { // System messages are center-aligned with light gray background - lv_obj_set_style_bg_color(msg_bubble, current_theme_.system_bubble, 0); + lv_obj_set_style_bg_color(msg_bubble, lvgl_theme->system_bubble_color(), 0); // Set text color for contrast - lv_obj_set_style_text_color(msg_text, current_theme_.system_text, 0); + lv_obj_set_style_text_color(msg_text, lvgl_theme->system_text_color(), 0); // 设置自定义属性标记气泡类型 lv_obj_set_user_data(msg_bubble, (void*)"system"); @@ -667,59 +663,37 @@ void LcdDisplay::SetPreviewImage(const lv_img_dsc_t* img_dsc) { return; } + auto lvgl_theme = static_cast(current_theme_); if (img_dsc != nullptr) { // Create a message bubble for image preview lv_obj_t* img_bubble = lv_obj_create(content_); lv_obj_set_style_radius(img_bubble, 8, 0); lv_obj_set_scrollbar_mode(img_bubble, LV_SCROLLBAR_MODE_OFF); lv_obj_set_style_border_width(img_bubble, 1, 0); - lv_obj_set_style_border_color(img_bubble, current_theme_.border, 0); - lv_obj_set_style_pad_all(img_bubble, 8, 0); + lv_obj_set_style_border_color(img_bubble, lvgl_theme->border_color(), 0); + lv_obj_set_style_pad_all(img_bubble, lvgl_theme->spacing(4), 0); // Set image bubble background color (similar to system message) - lv_obj_set_style_bg_color(img_bubble, current_theme_.assistant_bubble, 0); + lv_obj_set_style_bg_color(img_bubble, lvgl_theme->assistant_bubble_color(), 0); // 设置自定义属性标记气泡类型 lv_obj_set_user_data(img_bubble, (void*)"image"); - + // Create the image object inside the bubble lv_obj_t* preview_image = lv_image_create(img_bubble); - // Copy the image descriptor and data to avoid source data changes - lv_img_dsc_t* copied_img_dsc = (lv_img_dsc_t*)heap_caps_malloc(sizeof(lv_img_dsc_t), MALLOC_CAP_8BIT); - if (copied_img_dsc == nullptr) { - ESP_LOGE(TAG, "Failed to allocate memory for image descriptor"); - lv_obj_del(img_bubble); - return; - } - - // Copy the header - copied_img_dsc->header = img_dsc->header; - copied_img_dsc->data_size = img_dsc->data_size; - - // Copy the image data - uint8_t* copied_data = (uint8_t*)heap_caps_malloc(img_dsc->data_size, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT); - if (copied_data == nullptr) { - // Fallback to internal RAM if SPIRAM allocation fails - copied_data = (uint8_t*)heap_caps_malloc(img_dsc->data_size, MALLOC_CAP_8BIT); - } - if (copied_data == nullptr) { - ESP_LOGE(TAG, "Failed to allocate memory for image data (size: %lu bytes)", img_dsc->data_size); - heap_caps_free(copied_img_dsc); - lv_obj_del(img_bubble); - return; - } - - memcpy(copied_data, img_dsc->data, img_dsc->data_size); - copied_img_dsc->data = copied_data; - // Calculate appropriate size for the image lv_coord_t max_width = LV_HOR_RES * 70 / 100; // 70% of screen width lv_coord_t max_height = LV_VER_RES * 50 / 100; // 50% of screen height // Calculate zoom factor to fit within maximum dimensions - lv_coord_t img_width = copied_img_dsc->header.w; - lv_coord_t img_height = copied_img_dsc->header.h; + lv_coord_t img_width = img_dsc->header.w; + lv_coord_t img_height = img_dsc->header.h; + if (img_width == 0 || img_height == 0) { + img_width = max_width; + img_height = max_height; + ESP_LOGW(TAG, "Invalid image dimensions: %ld x %ld, using default dimensions: %ld x %ld", img_width, img_height, max_width, max_height); + } lv_coord_t zoom_w = (max_width * 256) / img_width; lv_coord_t zoom_h = (max_height * 256) / img_height; @@ -729,17 +703,17 @@ void LcdDisplay::SetPreviewImage(const lv_img_dsc_t* img_dsc) { if (zoom > 256) zoom = 256; // Set image properties - lv_image_set_src(preview_image, copied_img_dsc); + lv_image_set_src(preview_image, img_dsc); lv_image_set_scale(preview_image, zoom); // Add event handler to clean up copied data when image is deleted lv_obj_add_event_cb(preview_image, [](lv_event_t* e) { - lv_img_dsc_t* copied_img_dsc = (lv_img_dsc_t*)lv_event_get_user_data(e); - if (copied_img_dsc != nullptr) { - heap_caps_free((void*)copied_img_dsc->data); - heap_caps_free(copied_img_dsc); + lv_img_dsc_t* img_dsc = (lv_img_dsc_t*)lv_event_get_user_data(e); + if (img_dsc != nullptr) { + heap_caps_free((void*)img_dsc->data); + heap_caps_free(img_dsc); } - }, LV_EVENT_DELETE, (void*)copied_img_dsc); + }, LV_EVENT_DELETE, (void*)img_dsc); // Calculate actual scaled image dimensions lv_coord_t scaled_width = (img_width * zoom) / 256; @@ -765,28 +739,40 @@ void LcdDisplay::SetPreviewImage(const lv_img_dsc_t* img_dsc) { #else void LcdDisplay::SetupUI() { DisplayLockGuard lock(this); + LvglTheme* lvgl_theme = static_cast(current_theme_); + auto text_font = lvgl_theme->text_font()->font(); + auto icon_font = lvgl_theme->icon_font()->font(); + auto large_icon_font = lvgl_theme->large_icon_font()->font(); auto screen = lv_screen_active(); - lv_obj_set_style_text_font(screen, fonts_.text_font, 0); - lv_obj_set_style_text_color(screen, current_theme_.text, 0); - lv_obj_set_style_bg_color(screen, current_theme_.background, 0); + lv_obj_set_style_text_font(screen, text_font, 0); + lv_obj_set_style_text_color(screen, lvgl_theme->text_color(), 0); + lv_obj_set_style_bg_color(screen, lvgl_theme->background_color(), 0); /* Container */ container_ = lv_obj_create(screen); lv_obj_set_size(container_, LV_HOR_RES, LV_VER_RES); + lv_obj_set_style_radius(container_, 0, 0); lv_obj_set_flex_flow(container_, LV_FLEX_FLOW_COLUMN); lv_obj_set_style_pad_all(container_, 0, 0); lv_obj_set_style_border_width(container_, 0, 0); lv_obj_set_style_pad_row(container_, 0, 0); - lv_obj_set_style_bg_color(container_, current_theme_.background, 0); - lv_obj_set_style_border_color(container_, current_theme_.border, 0); + lv_obj_set_style_bg_color(container_, lvgl_theme->background_color(), 0); + lv_obj_set_style_border_color(container_, lvgl_theme->border_color(), 0); /* Status bar */ status_bar_ = lv_obj_create(container_); - lv_obj_set_size(status_bar_, LV_HOR_RES, fonts_.text_font->line_height); + lv_obj_set_size(status_bar_, LV_HOR_RES, LV_SIZE_CONTENT); lv_obj_set_style_radius(status_bar_, 0, 0); - lv_obj_set_style_bg_color(status_bar_, current_theme_.background, 0); - lv_obj_set_style_text_color(status_bar_, current_theme_.text, 0); + lv_obj_set_style_bg_color(status_bar_, lvgl_theme->background_color(), 0); + lv_obj_set_style_text_color(status_bar_, lvgl_theme->text_color(), 0); + lv_obj_set_flex_flow(status_bar_, LV_FLEX_FLOW_ROW); + lv_obj_set_style_pad_top(status_bar_, lvgl_theme->spacing(2), 0); + lv_obj_set_style_pad_bottom(status_bar_, lvgl_theme->spacing(2), 0); + lv_obj_set_style_pad_left(status_bar_, lvgl_theme->spacing(4), 0); + lv_obj_set_style_pad_right(status_bar_, lvgl_theme->spacing(4), 0); + lv_obj_set_style_border_width(status_bar_, 0, 0); + lv_obj_set_style_pad_column(status_bar_, 0, 0); /* Content */ content_ = lv_obj_create(container_); @@ -794,47 +780,50 @@ void LcdDisplay::SetupUI() { lv_obj_set_style_radius(content_, 0, 0); lv_obj_set_width(content_, LV_HOR_RES); lv_obj_set_flex_grow(content_, 1); - lv_obj_set_style_pad_all(content_, 5, 0); - lv_obj_set_style_bg_color(content_, current_theme_.chat_background, 0); - lv_obj_set_style_border_color(content_, current_theme_.border, 0); // Border color for content + lv_obj_set_style_pad_all(content_, 0, 0); + lv_obj_set_style_border_width(content_, 0, 0); + lv_obj_set_style_bg_color(content_, lvgl_theme->chat_background_color(), 0); lv_obj_set_flex_flow(content_, LV_FLEX_FLOW_COLUMN); // 垂直布局(从上到下) lv_obj_set_flex_align(content_, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_SPACE_EVENLY); // 子对象居中对齐,等距分布 - emotion_label_ = lv_label_create(content_); - lv_obj_set_style_text_font(emotion_label_, &font_awesome_30_4, 0); - lv_obj_set_style_text_color(emotion_label_, current_theme_.text, 0); - lv_label_set_text(emotion_label_, FONT_AWESOME_MICROCHIP_AI); + emoji_box_ = lv_obj_create(content_); + lv_obj_set_size(emoji_box_, LV_SIZE_CONTENT, LV_SIZE_CONTENT); + lv_obj_set_style_bg_opa(emoji_box_, LV_OPA_TRANSP, 0); + lv_obj_set_style_pad_all(emoji_box_, 0, 0); + lv_obj_set_style_border_width(emoji_box_, 0, 0); + + emoji_label_ = lv_label_create(emoji_box_); + lv_obj_set_style_text_font(emoji_label_, large_icon_font, 0); + lv_obj_set_style_text_color(emoji_label_, lvgl_theme->text_color(), 0); + lv_label_set_text(emoji_label_, FONT_AWESOME_MICROCHIP_AI); + + emoji_image_ = lv_img_create(emoji_box_); + lv_obj_center(emoji_image_); + lv_obj_add_flag(emoji_image_, LV_OBJ_FLAG_HIDDEN); preview_image_ = lv_image_create(content_); - lv_obj_set_size(preview_image_, width_ * 0.5, height_ * 0.5); + lv_obj_set_size(preview_image_, width_ / 2, height_ / 2); lv_obj_align(preview_image_, LV_ALIGN_CENTER, 0, 0); lv_obj_add_flag(preview_image_, LV_OBJ_FLAG_HIDDEN); chat_message_label_ = lv_label_create(content_); lv_label_set_text(chat_message_label_, ""); - lv_obj_set_width(chat_message_label_, LV_HOR_RES * 0.9); // 限制宽度为屏幕宽度的 90% + lv_obj_set_width(chat_message_label_, width_ * 0.9); // 限制宽度为屏幕宽度的 90% lv_label_set_long_mode(chat_message_label_, LV_LABEL_LONG_WRAP); // 设置为自动换行模式 lv_obj_set_style_text_align(chat_message_label_, LV_TEXT_ALIGN_CENTER, 0); // 设置文本居中对齐 - lv_obj_set_style_text_color(chat_message_label_, current_theme_.text, 0); + lv_obj_set_style_text_color(chat_message_label_, lvgl_theme->text_color(), 0); /* Status bar */ - lv_obj_set_flex_flow(status_bar_, LV_FLEX_FLOW_ROW); - lv_obj_set_style_pad_all(status_bar_, 0, 0); - lv_obj_set_style_border_width(status_bar_, 0, 0); - lv_obj_set_style_pad_column(status_bar_, 0, 0); - lv_obj_set_style_pad_left(status_bar_, 2, 0); - lv_obj_set_style_pad_right(status_bar_, 2, 0); - network_label_ = lv_label_create(status_bar_); lv_label_set_text(network_label_, ""); - lv_obj_set_style_text_font(network_label_, fonts_.icon_font, 0); - lv_obj_set_style_text_color(network_label_, current_theme_.text, 0); + lv_obj_set_style_text_font(network_label_, icon_font, 0); + lv_obj_set_style_text_color(network_label_, lvgl_theme->text_color(), 0); notification_label_ = lv_label_create(status_bar_); lv_obj_set_flex_grow(notification_label_, 1); lv_obj_set_style_text_align(notification_label_, LV_TEXT_ALIGN_CENTER, 0); - lv_obj_set_style_text_color(notification_label_, current_theme_.text, 0); + lv_obj_set_style_text_color(notification_label_, lvgl_theme->text_color(), 0); lv_label_set_text(notification_label_, ""); lv_obj_add_flag(notification_label_, LV_OBJ_FLAG_HIDDEN); @@ -842,24 +831,26 @@ void LcdDisplay::SetupUI() { lv_obj_set_flex_grow(status_label_, 1); lv_label_set_long_mode(status_label_, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_obj_set_style_text_align(status_label_, LV_TEXT_ALIGN_CENTER, 0); - lv_obj_set_style_text_color(status_label_, current_theme_.text, 0); + lv_obj_set_style_text_color(status_label_, lvgl_theme->text_color(), 0); lv_label_set_text(status_label_, Lang::Strings::INITIALIZING); + mute_label_ = lv_label_create(status_bar_); lv_label_set_text(mute_label_, ""); - lv_obj_set_style_text_font(mute_label_, fonts_.icon_font, 0); - lv_obj_set_style_text_color(mute_label_, current_theme_.text, 0); + lv_obj_set_style_text_font(mute_label_, icon_font, 0); + lv_obj_set_style_text_color(mute_label_, lvgl_theme->text_color(), 0); battery_label_ = lv_label_create(status_bar_); lv_label_set_text(battery_label_, ""); - lv_obj_set_style_text_font(battery_label_, fonts_.icon_font, 0); - lv_obj_set_style_text_color(battery_label_, current_theme_.text, 0); + lv_obj_set_style_text_font(battery_label_, icon_font, 0); + lv_obj_set_style_text_color(battery_label_, lvgl_theme->text_color(), 0); low_battery_popup_ = lv_obj_create(screen); lv_obj_set_scrollbar_mode(low_battery_popup_, LV_SCROLLBAR_MODE_OFF); - lv_obj_set_size(low_battery_popup_, LV_HOR_RES * 0.9, fonts_.text_font->line_height * 2); - lv_obj_align(low_battery_popup_, LV_ALIGN_BOTTOM_MID, 0, 0); - lv_obj_set_style_bg_color(low_battery_popup_, current_theme_.low_battery, 0); - lv_obj_set_style_radius(low_battery_popup_, 10, 0); + lv_obj_set_size(low_battery_popup_, LV_HOR_RES * 0.9, text_font->line_height * 2); + lv_obj_align(low_battery_popup_, LV_ALIGN_BOTTOM_MID, 0, -lvgl_theme->spacing(4)); + lv_obj_set_style_bg_color(low_battery_popup_, lvgl_theme->low_battery_color(), 0); + lv_obj_set_style_radius(low_battery_popup_, lvgl_theme->spacing(4), 0); + low_battery_label_ = lv_label_create(low_battery_popup_); lv_label_set_text(low_battery_label_, Lang::Strings::BATTERY_NEED_CHARGE); lv_obj_set_style_text_color(low_battery_label_, lv_color_white(), 0); @@ -870,101 +861,245 @@ void LcdDisplay::SetupUI() { void LcdDisplay::SetPreviewImage(const lv_img_dsc_t* img_dsc) { DisplayLockGuard lock(this); if (preview_image_ == nullptr) { + ESP_LOGE(TAG, "Preview image is not initialized"); return; } + + auto old_src = (const lv_img_dsc_t*)lv_image_get_src(preview_image_); + if (old_src != nullptr) { + lv_image_set_src(preview_image_, nullptr); + heap_caps_free((void*)old_src->data); + heap_caps_free((void*)old_src); + } if (img_dsc != nullptr) { - // zoom factor 0.5 - lv_image_set_scale(preview_image_, 128 * width_ / img_dsc->header.w); // 设置图片源并显示预览图片 lv_image_set_src(preview_image_, img_dsc); - lv_obj_clear_flag(preview_image_, LV_OBJ_FLAG_HIDDEN); - // 隐藏emotion_label_ - if (emotion_label_ != nullptr) { - lv_obj_add_flag(emotion_label_, LV_OBJ_FLAG_HIDDEN); + if (img_dsc->header.w > 0 && img_dsc->header.h > 0) { + // zoom factor 0.5 + lv_image_set_scale(preview_image_, 128 * width_ / img_dsc->header.w); } + // Hide emoji_box_ + lv_obj_add_flag(emoji_box_, LV_OBJ_FLAG_HIDDEN); + lv_obj_remove_flag(preview_image_, LV_OBJ_FLAG_HIDDEN); + esp_timer_stop(preview_timer_); + ESP_ERROR_CHECK(esp_timer_start_once(preview_timer_, PREVIEW_IMAGE_DURATION_MS * 1000)); } else { - // 隐藏预览图片并显示emotion_label_ + esp_timer_stop(preview_timer_); + lv_obj_remove_flag(emoji_box_, LV_OBJ_FLAG_HIDDEN); lv_obj_add_flag(preview_image_, LV_OBJ_FLAG_HIDDEN); - if (emotion_label_ != nullptr) { - lv_obj_clear_flag(emotion_label_, LV_OBJ_FLAG_HIDDEN); - } } } + +void LcdDisplay::SetChatMessage(const char* role, const char* content) { + DisplayLockGuard lock(this); + if (chat_message_label_ == nullptr) { + return; + } + lv_label_set_text(chat_message_label_, content); +} #endif void LcdDisplay::SetEmotion(const char* emotion) { - struct Emotion { - const char* icon; - const char* text; - }; - - static const std::vector emotions = { - {"😶", "neutral"}, - {"🙂", "happy"}, - {"😆", "laughing"}, - {"😂", "funny"}, - {"😔", "sad"}, - {"😠", "angry"}, - {"😭", "crying"}, - {"😍", "loving"}, - {"😳", "embarrassed"}, - {"😯", "surprised"}, - {"😱", "shocked"}, - {"🤔", "thinking"}, - {"😉", "winking"}, - {"😎", "cool"}, - {"😌", "relaxed"}, - {"🤤", "delicious"}, - {"😘", "kissy"}, - {"😏", "confident"}, - {"😴", "sleepy"}, - {"😜", "silly"}, - {"🙄", "confused"} - }; + // Stop any running GIF animation + if (gif_controller_) { + DisplayLockGuard lock(this); + gif_controller_->Stop(); + gif_controller_.reset(); + } - // 查找匹配的表情 - std::string_view emotion_view(emotion); - auto it = std::find_if(emotions.begin(), emotions.end(), - [&emotion_view](const Emotion& e) { return e.text == emotion_view; }); - - DisplayLockGuard lock(this); - if (emotion_label_ == nullptr) { + if (emoji_image_ == nullptr) { return; } - // 如果找到匹配的表情就显示对应图标,否则显示默认的neutral表情 - lv_obj_set_style_text_font(emotion_label_, fonts_.emoji_font, 0); - if (it != emotions.end()) { - lv_label_set_text(emotion_label_, it->icon); - } else { - lv_label_set_text(emotion_label_, "😶"); + auto emoji_collection = static_cast(current_theme_)->emoji_collection(); + auto image = emoji_collection != nullptr ? emoji_collection->GetEmojiImage(emotion) : nullptr; + if (image == nullptr) { + const char* utf8 = font_awesome_get_utf8(emotion); + if (utf8 != nullptr && emoji_label_ != nullptr) { + DisplayLockGuard lock(this); + lv_label_set_text(emoji_label_, utf8); + lv_obj_add_flag(emoji_image_, LV_OBJ_FLAG_HIDDEN); + lv_obj_remove_flag(emoji_label_, LV_OBJ_FLAG_HIDDEN); + } + return; } -#if !CONFIG_USE_WECHAT_MESSAGE_STYLE - // 显示emotion_label_,隐藏preview_image_ - lv_obj_clear_flag(emotion_label_, LV_OBJ_FLAG_HIDDEN); - if (preview_image_ != nullptr) { - lv_obj_add_flag(preview_image_, LV_OBJ_FLAG_HIDDEN); + DisplayLockGuard lock(this); + if (image->IsGif()) { + // Create new GIF controller + gif_controller_ = std::make_unique(image->image_dsc()); + + if (gif_controller_->IsLoaded()) { + // Set up frame update callback + gif_controller_->SetFrameCallback([this]() { + lv_image_set_src(emoji_image_, gif_controller_->image_dsc()); + }); + + // Set initial frame and start animation + lv_image_set_src(emoji_image_, gif_controller_->image_dsc()); + gif_controller_->Start(); + + // Show GIF, hide others + lv_obj_add_flag(emoji_label_, LV_OBJ_FLAG_HIDDEN); + lv_obj_remove_flag(emoji_image_, LV_OBJ_FLAG_HIDDEN); + } else { + ESP_LOGE(TAG, "Failed to load GIF for emotion: %s", emotion); + gif_controller_.reset(); + } + } else { + lv_image_set_src(emoji_image_, image->image_dsc()); + lv_obj_add_flag(emoji_label_, LV_OBJ_FLAG_HIDDEN); + lv_obj_remove_flag(emoji_image_, LV_OBJ_FLAG_HIDDEN); + } + +#if CONFIG_USE_WECHAT_MESSAGE_STYLE + // Wechat message style中,如果emotion是neutral,则不显示 + if (strcmp(emotion, "neutral") == 0) { + // Stop GIF animation if running + if (gif_controller_) { + gif_controller_->Stop(); + gif_controller_.reset(); + } + + lv_obj_add_flag(emoji_image_, LV_OBJ_FLAG_HIDDEN); + lv_obj_add_flag(emoji_label_, LV_OBJ_FLAG_HIDDEN); } #endif } -void LcdDisplay::SetIcon(const char* icon) { +void LcdDisplay::SetTheme(Theme* theme) { DisplayLockGuard lock(this); - if (emotion_label_ == nullptr) { - return; - } - lv_obj_set_style_text_font(emotion_label_, &font_awesome_30_4, 0); - lv_label_set_text(emotion_label_, icon); + + auto lvgl_theme = static_cast(theme); + + // Get the active screen + lv_obj_t* screen = lv_screen_active(); -#if !CONFIG_USE_WECHAT_MESSAGE_STYLE - // 显示emotion_label_,隐藏preview_image_ - lv_obj_clear_flag(emotion_label_, LV_OBJ_FLAG_HIDDEN); - if (preview_image_ != nullptr) { - lv_obj_add_flag(preview_image_, LV_OBJ_FLAG_HIDDEN); + // Set font + auto text_font = lvgl_theme->text_font()->font(); + auto icon_font = lvgl_theme->icon_font()->font(); + auto large_icon_font = lvgl_theme->large_icon_font()->font(); + + if (text_font->line_height >= 40) { + lv_obj_set_style_text_font(mute_label_, large_icon_font, 0); + lv_obj_set_style_text_font(battery_label_, large_icon_font, 0); + lv_obj_set_style_text_font(network_label_, large_icon_font, 0); + } else { + lv_obj_set_style_text_font(mute_label_, icon_font, 0); + lv_obj_set_style_text_font(battery_label_, icon_font, 0); + lv_obj_set_style_text_font(network_label_, icon_font, 0); + } + + // Set parent text color + lv_obj_set_style_text_font(screen, text_font, 0); + lv_obj_set_style_text_color(screen, lvgl_theme->text_color(), 0); + + // Set background image + if (lvgl_theme->background_image() != nullptr) { + lv_obj_set_style_bg_image_src(container_, lvgl_theme->background_image()->image_dsc(), 0); + } else { + lv_obj_set_style_bg_image_src(container_, nullptr, 0); + lv_obj_set_style_bg_color(container_, lvgl_theme->background_color(), 0); + } + + // Update status bar background color with 50% opacity + lv_obj_set_style_bg_opa(status_bar_, LV_OPA_50, 0); + lv_obj_set_style_bg_color(status_bar_, lvgl_theme->background_color(), 0); + + // Update status bar elements + lv_obj_set_style_text_color(network_label_, lvgl_theme->text_color(), 0); + lv_obj_set_style_text_color(status_label_, lvgl_theme->text_color(), 0); + lv_obj_set_style_text_color(notification_label_, lvgl_theme->text_color(), 0); + lv_obj_set_style_text_color(mute_label_, lvgl_theme->text_color(), 0); + lv_obj_set_style_text_color(battery_label_, lvgl_theme->text_color(), 0); + lv_obj_set_style_text_color(emoji_label_, lvgl_theme->text_color(), 0); + + // Set content background opacity + lv_obj_set_style_bg_opa(content_, LV_OPA_TRANSP, 0); + + // If we have the chat message style, update all message bubbles +#if CONFIG_USE_WECHAT_MESSAGE_STYLE + // Iterate through all children of content (message containers or bubbles) + uint32_t child_count = lv_obj_get_child_cnt(content_); + for (uint32_t i = 0; i < child_count; i++) { + lv_obj_t* obj = lv_obj_get_child(content_, i); + if (obj == nullptr) continue; + + lv_obj_t* bubble = nullptr; + + // 检查这个对象是容器还是气泡 + // 如果是容器(用户或系统消息),则获取其子对象作为气泡 + // 如果是气泡(助手消息),则直接使用 + if (lv_obj_get_child_cnt(obj) > 0) { + // 可能是容器,检查它是否为用户或系统消息容器 + // 用户和系统消息容器是透明的 + lv_opa_t bg_opa = lv_obj_get_style_bg_opa(obj, 0); + if (bg_opa == LV_OPA_TRANSP) { + // 这是用户或系统消息的容器 + bubble = lv_obj_get_child(obj, 0); + } else { + // 这可能是助手消息的气泡自身 + bubble = obj; + } + } else { + // 没有子元素,可能是其他UI元素,跳过 + continue; + } + + if (bubble == nullptr) continue; + + // 使用保存的用户数据来识别气泡类型 + void* bubble_type_ptr = lv_obj_get_user_data(bubble); + if (bubble_type_ptr != nullptr) { + const char* bubble_type = static_cast(bubble_type_ptr); + + // 根据气泡类型应用正确的颜色 + if (strcmp(bubble_type, "user") == 0) { + lv_obj_set_style_bg_color(bubble, lvgl_theme->user_bubble_color(), 0); + } else if (strcmp(bubble_type, "assistant") == 0) { + lv_obj_set_style_bg_color(bubble, lvgl_theme->assistant_bubble_color(), 0); + } else if (strcmp(bubble_type, "system") == 0) { + lv_obj_set_style_bg_color(bubble, lvgl_theme->system_bubble_color(), 0); + } else if (strcmp(bubble_type, "image") == 0) { + lv_obj_set_style_bg_color(bubble, lvgl_theme->system_bubble_color(), 0); + } + + // Update border color + lv_obj_set_style_border_color(bubble, lvgl_theme->border_color(), 0); + + // Update text color for the message + if (lv_obj_get_child_cnt(bubble) > 0) { + lv_obj_t* text = lv_obj_get_child(bubble, 0); + if (text != nullptr) { + // 根据气泡类型设置文本颜色 + if (strcmp(bubble_type, "system") == 0) { + lv_obj_set_style_text_color(text, lvgl_theme->system_text_color(), 0); + } else { + lv_obj_set_style_text_color(text, lvgl_theme->text_color(), 0); + } + } + } + } else { + ESP_LOGW(TAG, "child[%lu] Bubble type is not found", i); + } + } +#else + // Simple UI mode - just update the main chat message + if (chat_message_label_ != nullptr) { + lv_obj_set_style_text_color(chat_message_label_, lvgl_theme->text_color(), 0); + } + + if (emoji_label_ != nullptr) { + lv_obj_set_style_text_color(emoji_label_, lvgl_theme->text_color(), 0); } #endif + + // Update low battery popup + lv_obj_set_style_bg_color(low_battery_popup_, lvgl_theme->low_battery_color(), 0); + + // No errors occurred. Save theme to settings + Display::SetTheme(lvgl_theme); } void LcdDisplay::SetMusicInfo(const char* song_name) { @@ -995,719 +1130,4 @@ void LcdDisplay::SetMusicInfo(const char* song_name) { lv_label_set_text(chat_message_label_, ""); } #endif -} - -void LcdDisplay::SetTheme(const std::string& theme_name) { - DisplayLockGuard lock(this); - - if (theme_name == "dark" || theme_name == "DARK") { - current_theme_ = DARK_THEME; - } else if (theme_name == "light" || theme_name == "LIGHT") { - current_theme_ = LIGHT_THEME; - } else { - // Invalid theme name, return false - ESP_LOGE(TAG, "Invalid theme name: %s", theme_name.c_str()); - return; - } - - // Get the active screen - lv_obj_t* screen = lv_screen_active(); - - // Update the screen colors - lv_obj_set_style_bg_color(screen, current_theme_.background, 0); - lv_obj_set_style_text_color(screen, current_theme_.text, 0); - - // Update container colors - if (container_ != nullptr) { - lv_obj_set_style_bg_color(container_, current_theme_.background, 0); - lv_obj_set_style_border_color(container_, current_theme_.border, 0); - } - - // Update status bar colors - if (status_bar_ != nullptr) { - lv_obj_set_style_bg_color(status_bar_, current_theme_.background, 0); - lv_obj_set_style_text_color(status_bar_, current_theme_.text, 0); - - // Update status bar elements - if (network_label_ != nullptr) { - lv_obj_set_style_text_color(network_label_, current_theme_.text, 0); - } - if (status_label_ != nullptr) { - lv_obj_set_style_text_color(status_label_, current_theme_.text, 0); - } - if (notification_label_ != nullptr) { - lv_obj_set_style_text_color(notification_label_, current_theme_.text, 0); - } - if (mute_label_ != nullptr) { - lv_obj_set_style_text_color(mute_label_, current_theme_.text, 0); - } - if (battery_label_ != nullptr) { - lv_obj_set_style_text_color(battery_label_, current_theme_.text, 0); - } - if (emotion_label_ != nullptr) { - lv_obj_set_style_text_color(emotion_label_, current_theme_.text, 0); - } - } - - // Update content area colors - if (content_ != nullptr) { - lv_obj_set_style_bg_color(content_, current_theme_.chat_background, 0); - lv_obj_set_style_border_color(content_, current_theme_.border, 0); - - // If we have the chat message style, update all message bubbles -#if CONFIG_USE_WECHAT_MESSAGE_STYLE - // Iterate through all children of content (message containers or bubbles) - uint32_t child_count = lv_obj_get_child_cnt(content_); - for (uint32_t i = 0; i < child_count; i++) { - lv_obj_t* obj = lv_obj_get_child(content_, i); - if (obj == nullptr) continue; - - lv_obj_t* bubble = nullptr; - - // 检查这个对象是容器还是气泡 - // 如果是容器(用户或系统消息),则获取其子对象作为气泡 - // 如果是气泡(助手消息),则直接使用 - if (lv_obj_get_child_cnt(obj) > 0) { - // 可能是容器,检查它是否为用户或系统消息容器 - // 用户和系统消息容器是透明的 - lv_opa_t bg_opa = lv_obj_get_style_bg_opa(obj, 0); - if (bg_opa == LV_OPA_TRANSP) { - // 这是用户或系统消息的容器 - bubble = lv_obj_get_child(obj, 0); - } else { - // 这可能是助手消息的气泡自身 - bubble = obj; - } - } else { - // 没有子元素,可能是其他UI元素,跳过 - continue; - } - - if (bubble == nullptr) continue; - - // 使用保存的用户数据来识别气泡类型 - void* bubble_type_ptr = lv_obj_get_user_data(bubble); - if (bubble_type_ptr != nullptr) { - const char* bubble_type = static_cast(bubble_type_ptr); - - // 根据气泡类型应用正确的颜色 - if (strcmp(bubble_type, "user") == 0) { - lv_obj_set_style_bg_color(bubble, current_theme_.user_bubble, 0); - } else if (strcmp(bubble_type, "assistant") == 0) { - lv_obj_set_style_bg_color(bubble, current_theme_.assistant_bubble, 0); - } else if (strcmp(bubble_type, "system") == 0) { - lv_obj_set_style_bg_color(bubble, current_theme_.system_bubble, 0); - } else if (strcmp(bubble_type, "image") == 0) { - lv_obj_set_style_bg_color(bubble, current_theme_.system_bubble, 0); - } - - // Update border color - lv_obj_set_style_border_color(bubble, current_theme_.border, 0); - - // Update text color for the message - if (lv_obj_get_child_cnt(bubble) > 0) { - lv_obj_t* text = lv_obj_get_child(bubble, 0); - if (text != nullptr) { - // 根据气泡类型设置文本颜色 - if (strcmp(bubble_type, "system") == 0) { - lv_obj_set_style_text_color(text, current_theme_.system_text, 0); - } else { - lv_obj_set_style_text_color(text, current_theme_.text, 0); - } - } - } - } else { - // 如果没有标记,回退到之前的逻辑(颜色比较) - // ...保留原有的回退逻辑... - lv_color_t bg_color = lv_obj_get_style_bg_color(bubble, 0); - - // 改进bubble类型检测逻辑,不仅使用颜色比较 - bool is_user_bubble = false; - bool is_assistant_bubble = false; - bool is_system_bubble = false; - - // 检查用户bubble - if (lv_color_eq(bg_color, DARK_USER_BUBBLE_COLOR) || - lv_color_eq(bg_color, LIGHT_USER_BUBBLE_COLOR) || - lv_color_eq(bg_color, current_theme_.user_bubble)) { - is_user_bubble = true; - } - // 检查系统bubble - else if (lv_color_eq(bg_color, DARK_SYSTEM_BUBBLE_COLOR) || - lv_color_eq(bg_color, LIGHT_SYSTEM_BUBBLE_COLOR) || - lv_color_eq(bg_color, current_theme_.system_bubble)) { - is_system_bubble = true; - } - // 剩余的都当作助手bubble处理 - else { - is_assistant_bubble = true; - } - - // 根据bubble类型应用正确的颜色 - if (is_user_bubble) { - lv_obj_set_style_bg_color(bubble, current_theme_.user_bubble, 0); - } else if (is_assistant_bubble) { - lv_obj_set_style_bg_color(bubble, current_theme_.assistant_bubble, 0); - } else if (is_system_bubble) { - lv_obj_set_style_bg_color(bubble, current_theme_.system_bubble, 0); - } - - // Update border color - lv_obj_set_style_border_color(bubble, current_theme_.border, 0); - - // Update text color for the message - if (lv_obj_get_child_cnt(bubble) > 0) { - lv_obj_t* text = lv_obj_get_child(bubble, 0); - if (text != nullptr) { - // 回退到颜色检测逻辑 - if (lv_color_eq(bg_color, current_theme_.system_bubble) || - lv_color_eq(bg_color, DARK_SYSTEM_BUBBLE_COLOR) || - lv_color_eq(bg_color, LIGHT_SYSTEM_BUBBLE_COLOR)) { - lv_obj_set_style_text_color(text, current_theme_.system_text, 0); - } else { - lv_obj_set_style_text_color(text, current_theme_.text, 0); - } - } - } - } - } -#else - // Simple UI mode - just update the main chat message - if (chat_message_label_ != nullptr) { - lv_obj_set_style_text_color(chat_message_label_, current_theme_.text, 0); - } - - if (emotion_label_ != nullptr) { - lv_obj_set_style_text_color(emotion_label_, current_theme_.text, 0); - } -#endif - } - - // Update low battery popup - if (low_battery_popup_ != nullptr) { - lv_obj_set_style_bg_color(low_battery_popup_, current_theme_.low_battery, 0); - } - - // No errors occurred. Save theme to settings - Display::SetTheme(theme_name); -} - -void LcdDisplay::create_canvas(){ - DisplayLockGuard lock(this); - if (canvas_ != nullptr) { - lv_obj_del(canvas_); - } - if (canvas_buffer_ != nullptr) { - heap_caps_free(canvas_buffer_); - canvas_buffer_ = nullptr; - } - - int status_bar_height=lv_obj_get_height(status_bar_); - canvas_width_=width_; - canvas_height_=height_-status_bar_height; - - canvas_buffer_=(uint16_t*)heap_caps_malloc(canvas_width_ * canvas_height_ * sizeof(uint16_t), MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); - if (canvas_buffer_ == nullptr) { - ESP_LOGE(TAG, "Failed to allocate canvas buffer"); - return; - } - ESP_LOGI(TAG, "canvas buffer allocated successfully"); - canvas_ = lv_canvas_create(lv_scr_act()); - lv_canvas_set_buffer(canvas_, canvas_buffer_, canvas_width_, canvas_height_, LV_COLOR_FORMAT_RGB565); - ESP_LOGI(TAG,"width: %d, height: %d", width_, height_); - - - - lv_obj_set_pos(canvas_, 0, status_bar_height); - lv_obj_set_size(canvas_, canvas_width_, canvas_height_); - lv_canvas_fill_bg(canvas_, lv_color_make(0, 0, 0), LV_OPA_TRANSP); - lv_obj_move_foreground(canvas_); - - ESP_LOGI(TAG, "canvas created successfully"); - - - - - -} -void LcdDisplay::start(){ - ESP_LOGI(TAG, "Starting LcdDisplay with periodic data updates"); - - vTaskDelay(pdMS_TO_TICKS(500)); - - // 创建周期性更新任务 - fft_task_should_stop = false; // 重置停止标志 - xTaskCreate( - periodicUpdateTaskWrapper, - "display_fft", // 任务名称 - 4096*2, // 堆栈大小 - this, // 参数 - 1, // 优先级 - &fft_task_handle // 保存到成员变量 - ); - - -} - -void LcdDisplay::drawSpectrumIfReady() { - if (fft_data_ready) { - draw_spectrum(avg_power_spectrum, FFT_SIZE/2); - fft_data_ready = false; - } -} - -void LcdDisplay::periodicUpdateTaskWrapper(void* arg) { - auto self = static_cast(arg); - self->periodicUpdateTask(); -} - -void LcdDisplay::periodicUpdateTask() { - ESP_LOGI(TAG, "Periodic update task started"); - - if(canvas_==nullptr){ - create_canvas(); - } - else{ - ESP_LOGI(TAG, "canvas already created"); - } - - - auto music = Board::GetInstance().GetMusic(); - - const TickType_t displayInterval = pdMS_TO_TICKS(40); - const TickType_t audioProcessInterval = pdMS_TO_TICKS(15); - - TickType_t lastDisplayTime = xTaskGetTickCount(); - TickType_t lastAudioTime = xTaskGetTickCount(); - - while (!fft_task_should_stop) { - - TickType_t currentTime = xTaskGetTickCount(); - - - if (currentTime - lastAudioTime >= audioProcessInterval) { - if(music->GetAudioData() != nullptr) { - readAudioData(); // 快速处理,不阻塞 - } else { - vTaskDelay(pdMS_TO_TICKS(100)); - } - lastAudioTime = currentTime; - } - - // 显示刷新(30Hz) - if (currentTime - lastDisplayTime >= displayInterval) { - if (fft_data_ready) { - DisplayLockGuard lock(this); - drawSpectrumIfReady(); - lv_area_t refresh_area; - refresh_area.x1 = 0; - refresh_area.y1 = height_-100; - refresh_area.x2 = canvas_width_ -1; - refresh_area.y2 = height_ -1; // 只刷新频谱区域 - lv_obj_invalidate_area(canvas_, &refresh_area); - //lv_obj_invalidate(canvas_); - fft_data_ready = false; - lastDisplayTime = currentTime; - } // 绘制操作 - - - // 更新FPS计数 - //FPS(); - } - - - - vTaskDelay(pdMS_TO_TICKS(10)); - // 短暂延迟 - - } - - ESP_LOGI(TAG, "FFT display task stopped"); - fft_task_handle = nullptr; // 清空任务句柄 - vTaskDelete(NULL); // 删除当前任务 -} - - - -void LcdDisplay::readAudioData(){ - - auto music = Board::GetInstance().GetMusic(); - - if(music->GetAudioData()!=nullptr){ - - - if(audio_display_last_update<=2){ - memcpy(audio_data,music->GetAudioData(),sizeof(int16_t)*1152); - for(int i=0;i<1152;i++){ - frame_audio_data[i]+=audio_data[i]; - } - audio_display_last_update++; - - }else{ - const int HOP_SIZE = 512; - const int NUM_SEGMENTS = 1 + (1152 - FFT_SIZE) / HOP_SIZE; - - for (int seg = 0; seg < NUM_SEGMENTS; seg++) { - int start = seg * HOP_SIZE; - if (start + FFT_SIZE > 1152) break; - - // 准备当前段数据 - for (int i = 0; i < FFT_SIZE; i++) { - int idx = start + i; - //float sample =frame_audio_data[idx] / 32768.0f; - float sample =frame_audio_data[idx] / 32768.0f; - fft_real[i] = sample * hanning_window_float[i]; - fft_imag[i] = 0.0f; - - } - - compute(fft_real, fft_imag, FFT_SIZE, true); - - // 计算功率谱并累加(双边) - for (int i = 0; i < FFT_SIZE/2; i++) { - avg_power_spectrum[i] += fft_real[i] * fft_real[i]+fft_imag[i] * fft_imag[i]; // 功率 = 幅度平方 - } - } - - // 计算平均值 - for (int i = 0; i < FFT_SIZE/2; i++) { - avg_power_spectrum[i] /= NUM_SEGMENTS; - } - - audio_display_last_update=0; - //memcpy(spectrum_data, avg_power_spectrum, sizeof(float) * FFT_SIZE/2); - fft_data_ready=true; - - //draw_spectrum(avg_power_spectrum, FFT_SIZE/2); - memset(frame_audio_data,0,sizeof(int16_t)*1152); - - } - }else{ - ESP_LOGI(TAG, "audio_data is nullptr"); - vTaskDelay(pdMS_TO_TICKS(500)); - } -} - -uint16_t LcdDisplay::get_bar_color(int x_pos){ - - static uint16_t color_table[40]; - static bool initialized = false; - - if (!initialized) { - // 生成黄绿->黄->黄红的渐变 - for (int i = 0; i < 40; i++) { - if (i < 20) { - // 黄绿到黄:增加红色分量 - uint8_t r = static_cast((i / 19.0f) * 31); - color_table[i] = (r << 11) | (0x3F << 5); - } else { - // 黄到黄红:减少绿色分量 - uint8_t g = static_cast((1.0f - (i - 20) / 19.0f * 0.5f) * 63); - color_table[i] = (0x1F << 11) | (g << 5); - } - } - initialized = true; - } - - return color_table[x_pos]; - } - - -void LcdDisplay::draw_spectrum(float *power_spectrum,int fft_size){ - - - const int bartotal=40; - int bar_height; - const int bar_max_height=canvas_height_-100; - const int bar_width=240/bartotal; - int x_pos=0; - int y_pos = (canvas_height_) - 1; - - float magnitude[bartotal]={0}; - float max_magnitude=0; - - const float MIN_DB = -25.0f; - const float MAX_DB = 0.0f; - - for (int bin = 0; bin < bartotal; bin++) { - int start = bin * (fft_size / bartotal); - int end = (bin+1) * (fft_size / bartotal); - magnitude[bin] = 0; - int count=0; - for (int k = start; k < end; k++) { - magnitude[bin] += sqrt(power_spectrum[k]); - count++; - } - if(count>0){ - magnitude[bin] /= count; - } - - - if (magnitude[bin] > max_magnitude) max_magnitude = magnitude[bin]; - } - - - magnitude[1]=magnitude[1]*0.6; - magnitude[2]=magnitude[2]*0.7; - magnitude[3]=magnitude[3]*0.8; - magnitude[4]=magnitude[4]*0.8; - magnitude[5]=magnitude[5]*0.9; - /* - if (bartotal >= 6) { - magnitude[0] *= 0.3f; // 最低频 - magnitude[1] *= 1.1f; - magnitude[2] *= 1.0f; - magnitude[3] *= 0.9f; - magnitude[4] *= 0.8f; - magnitude[5] *= 0.7f; - // 更高频率保持或进一步衰减 - for (int i = 6; i < bartotal; i++) { - magnitude[i] *= 0.6f; - } - } - */ - - for (int bin = 1; bin < bartotal; bin++) { - - if (magnitude[bin] > 0.0f && max_magnitude > 0.0f) { - // 相对dB值:20 * log10(magnitude/ref_level) - magnitude[bin] = 20.0f * log10f(magnitude[bin] / max_magnitude+ 1e-10); - } else { - magnitude[bin] = MIN_DB; - } - if (magnitude[bin] > max_magnitude) max_magnitude = magnitude[bin]; - } - - clearScreen(); - - for (int k = 1; k < bartotal; k++) { // 跳过直流分量(k=0) - x_pos=canvas_width_/bartotal*(k-1); - float mag=(magnitude[k] - MIN_DB) / (MAX_DB - MIN_DB); - mag = std::max(0.0f, std::min(1.0f, mag)); - bar_height=int(mag*(bar_max_height)); - - int color=get_bar_color(k); - draw_bar(x_pos,y_pos,bar_width,bar_height, color,k-1); - //printf("x: %d, y: %d,\n", x_pos, bar_height); - } - - -} - -void LcdDisplay::draw_bar(int x,int y,int bar_width,int bar_height,uint16_t color,int bar_index){ - - const int block_space=2; - const int block_x_size=bar_width-block_space; - const int block_y_size=4; - - int blocks_per_col=(bar_height/(block_y_size+block_space)); - int start_x=(block_x_size+block_space)/2+x; - - if(current_heights[bar_index](block_y_size+block_space)) - draw_block(start_x,canvas_height_-current_heights[bar_index],block_x_size,block_y_size,color,bar_index); - - } - - draw_block(start_x,canvas_height_-1,block_x_size,block_y_size,color,bar_index); - - for(int j=1;j y-block_y_size;row--) { - // 一次绘制一行 - uint16_t* line_start = &canvas_buffer_[row * canvas_width_ + x]; - std::fill_n(line_start, block_x_size, color); - } -} - -void LcdDisplay::clearScreen() { - // DisplayLockGuard lock(this); - // 清屏为黑色 - //for (int i = 0; i < canvas_width_ * canvas_height_; i++) { - // canvas_buffer_[i] = COLOR_BLACK; - //} - //lv_obj_invalidate(canvas_); - std::fill_n(canvas_buffer_, canvas_width_ * canvas_height_, COLOR_BLACK); - -} - -void LcdDisplay::stopFft() { - ESP_LOGI(TAG, "Stopping FFT display"); - - // 停止FFT显示任务 - if (fft_task_handle != nullptr) { - ESP_LOGI(TAG, "Stopping FFT display task"); - fft_task_should_stop = true; // 设置停止标志 - - // 等待任务停止(最多等待1秒) - int wait_count = 0; - while (fft_task_handle != nullptr && wait_count < 100) { - vTaskDelay(pdMS_TO_TICKS(10)); - wait_count++; - } - - if (fft_task_handle != nullptr) { - ESP_LOGW(TAG, "FFT task did not stop gracefully, force deleting"); - vTaskDelete(fft_task_handle); - fft_task_handle = nullptr; - } else { - ESP_LOGI(TAG, "FFT display task stopped successfully"); - } - } - - // 使用显示锁保护所有操作 - DisplayLockGuard lock(this); - - // 重置FFT状态变量 - fft_data_ready = false; - audio_display_last_update = 0; - - // 重置频谱条高度 - memset(current_heights, 0, sizeof(current_heights)); - - // 重置平均功率谱数据 - for (int i = 0; i < FFT_SIZE/2; i++) { - avg_power_spectrum[i] = -25.0f; - } - - // 删除FFT画布对象,让原始UI重新显示 - if (canvas_ != nullptr) { - lv_obj_del(canvas_); - canvas_ = nullptr; - ESP_LOGI(TAG, "FFT canvas deleted"); - } - - // 释放画布缓冲区内存 - if (canvas_buffer_ != nullptr) { - heap_caps_free(canvas_buffer_); - canvas_buffer_ = nullptr; - ESP_LOGI(TAG, "FFT canvas buffer freed"); - } - - // 重置画布尺寸变量 - canvas_width_ = 0; - canvas_height_ = 0; - - ESP_LOGI(TAG, "FFT display stopped, original UI restored"); -} - -void LcdDisplay::MyUI(){ - - DisplayLockGuard lock(this); - - auto screen = lv_screen_active(); - lv_obj_set_style_text_font(screen, fonts_.text_font, 0); - lv_obj_set_style_text_color(screen, lv_color_white(), 0); - lv_obj_set_style_bg_color(screen, lv_color_black(), 0); - - /* Container */ - container_ = lv_obj_create(screen); - lv_obj_set_size(container_, LV_HOR_RES, LV_VER_RES); - lv_obj_set_flex_flow(container_, LV_FLEX_FLOW_COLUMN); - lv_obj_set_style_pad_all(container_, 0, 0); - lv_obj_set_style_border_width(container_, 0, 0); - lv_obj_set_style_pad_row(container_, 0, 0); - lv_obj_set_style_bg_color(container_, lv_color_black(), 0); - lv_obj_set_style_border_color(container_, lv_color_white(), 0); - - - /* Status bar */ - status_bar_ = lv_obj_create(container_); - lv_obj_set_size(status_bar_, LV_HOR_RES, fonts_.text_font->line_height); - lv_obj_set_style_radius(status_bar_, 0, 0); - lv_obj_set_style_bg_color(status_bar_, lv_color_black(), 0); - lv_obj_set_style_text_color(status_bar_, lv_color_white(), 0); - - /* Status bar */ - lv_obj_set_flex_flow(status_bar_, LV_FLEX_FLOW_ROW); - lv_obj_set_style_pad_all(status_bar_, 0, 0); - lv_obj_set_style_border_width(status_bar_, 0, 0); - lv_obj_set_style_pad_column(status_bar_, 0, 0); - lv_obj_set_style_pad_left(status_bar_, 2, 0); - lv_obj_set_style_pad_right(status_bar_, 2, 0); - - - - - - -} - - -void LcdDisplay::compute(float* real, float* imag, int n, bool forward) { - // 位反转排序 - int j = 0; - for (int i = 0; i < n; i++) { - if (j > i) { - std::swap(real[i], real[j]); - std::swap(imag[i], imag[j]); - } - - int m = n >> 1; - while (m >= 1 && j >= m) { - j -= m; - m >>= 1; - } - j += m; - } - - // FFT计算 - for (int s = 1; s <= (int)log2(n); s++) { - int m = 1 << s; - int m2 = m >> 1; - float w_real = 1.0f; - float w_imag = 0.0f; - float angle = (forward ? -2.0f : 2.0f) * M_PI / m; - float wm_real = cosf(angle); - float wm_imag = sinf(angle); - - for (int j = 0; j < m2; j++) { - for (int k = j; k < n; k += m) { - int k2 = k + m2; - float t_real = w_real * real[k2] - w_imag * imag[k2]; - float t_imag = w_real * imag[k2] + w_imag * real[k2]; - - real[k2] = real[k] - t_real; - imag[k2] = imag[k] - t_imag; - real[k] += t_real; - imag[k] += t_imag; - } - - float w_temp = w_real; - w_real = w_real * wm_real - w_imag * wm_imag; - w_imag = w_temp * wm_imag + w_imag * wm_real; - } - } - - // 正向变换需要缩放 - if (forward) { - for (int i = 0; i < n; i++) { - real[i] /= n; - imag[i] /= n; - } - } - } \ No newline at end of file diff --git a/main/display/lcd_display.h b/main/display/lcd_display.h index 7b06dad..4fee7d9 100644 --- a/main/display/lcd_display.h +++ b/main/display/lcd_display.h @@ -1,34 +1,20 @@ #ifndef LCD_DISPLAY_H #define LCD_DISPLAY_H -#include "display.h" +#include "lvgl_display.h" +#include "gif/lvgl_gif.h" #include #include #include #include -#include -#include -#include -#include -#include +#include -// Theme color structure -struct ThemeColors { - lv_color_t background; - lv_color_t text; - lv_color_t chat_background; - lv_color_t user_bubble; - lv_color_t assistant_bubble; - lv_color_t system_bubble; - lv_color_t system_text; - lv_color_t border; - lv_color_t low_battery; -}; +#define PREVIEW_IMAGE_DURATION_MS 5000 -class LcdDisplay : public Display { +class LcdDisplay : public LvglDisplay { protected: esp_lcd_panel_io_handle_t panel_io_ = nullptr; esp_lcd_panel_handle_t panel_ = nullptr; @@ -39,79 +25,41 @@ protected: lv_obj_t* container_ = nullptr; lv_obj_t* side_bar_ = nullptr; lv_obj_t* preview_image_ = nullptr; + lv_obj_t* emoji_label_ = nullptr; + lv_obj_t* emoji_image_ = nullptr; + std::unique_ptr gif_controller_ = nullptr; + lv_obj_t* emoji_box_ = nullptr; + lv_obj_t* chat_message_label_ = nullptr; + esp_timer_handle_t preview_timer_ = nullptr; - DisplayFonts fonts_; - ThemeColors current_theme_; - + void InitializeLcdThemes(); void SetupUI(); virtual bool Lock(int timeout_ms = 0) override; virtual void Unlock() override; - // FFT 绘制方法 - void readAudioData(); - - - - virtual void clearScreen() override; - virtual void stopFft() override; // 停止FFT显示 - - // 定时任务方法 - void periodicUpdateTask(); - static void periodicUpdateTaskWrapper(void* arg); - - // LVGL变量 - lv_obj_t* canvas_ = nullptr; - uint16_t* canvas_buffer_ = nullptr; - void create_canvas(); - uint16_t get_bar_color(int x_pos); - void draw_spectrum(float *power_spectrum,int fft_size); - void draw_bar(int x,int y,int bar_width,int bar_height,uint16_t color,int bar_index); - void draw_block(int x,int y,int block_x_size,int block_y_size,uint16_t color,int bar_index); - - int canvas_width_; - int canvas_height_; - - - int16_t* audio_data=nullptr; - int16_t* frame_audio_data=nullptr; - uint32_t last_fft_update = 0; - bool fft_data_ready = false; - float* spectrum_data=nullptr; - - // FFT 相关变量 - int audio_display_last_update = 0; - std::atomic fft_task_should_stop = false; // FFT任务停止标志 - TaskHandle_t fft_task_handle = nullptr; // FFT任务句柄 - - float* fft_real; - float* fft_imag; - float* hanning_window_float; - void compute(float* real, float* imag, int n, bool forward); - - // 添加缺少的方法声明 - void drawSpectrumIfReady(); - void MyUI(); - - - protected: // 添加protected构造函数 - LcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, DisplayFonts fonts, int width, int height); + LcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height); public: ~LcdDisplay(); virtual void SetEmotion(const char* emotion) override; - virtual void SetIcon(const char* icon) override; - virtual void SetMusicInfo(const char* song_name) override; virtual void SetPreviewImage(const lv_img_dsc_t* img_dsc) override; -#if CONFIG_USE_WECHAT_MESSAGE_STYLE virtual void SetChatMessage(const char* role, const char* content) override; -#endif // Add theme switching function - virtual void SetTheme(const std::string& theme_name) override; - virtual void start() override; + virtual void SetTheme(Theme* theme) override; + // Add set music info function + virtual void SetMusicInfo(const char* song_name) override; +}; + +// SPI LCD显示器 +class SpiLcdDisplay : public LcdDisplay { +public: + SpiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, + int width, int height, int offset_x, int offset_y, + bool mirror_x, bool mirror_y, bool swap_xy); }; // RGB LCD显示器 @@ -119,8 +67,7 @@ class RgbLcdDisplay : public LcdDisplay { public: RgbLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts); + bool mirror_x, bool mirror_y, bool swap_xy); }; // MIPI LCD显示器 @@ -128,34 +75,7 @@ class MipiLcdDisplay : public LcdDisplay { public: MipiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts); + bool mirror_x, bool mirror_y, bool swap_xy); }; -// // SPI LCD显示器 -class SpiLcdDisplay : public LcdDisplay { -public: - SpiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, - int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts); -}; - -// QSPI LCD显示器 -class QspiLcdDisplay : public LcdDisplay { -public: - QspiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, - int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts); -}; - -// MCU8080 LCD显示器 -class Mcu8080LcdDisplay : public LcdDisplay { -public: - Mcu8080LcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, - int width, int height, int offset_x, int offset_y, - bool mirror_x, bool mirror_y, bool swap_xy, - DisplayFonts fonts); -}; -#endif // LCD_DISPLAY_H \ No newline at end of file +#endif // LCD_DISPLAY_H diff --git a/main/display/lvgl_display/emoji_collection.cc b/main/display/lvgl_display/emoji_collection.cc new file mode 100644 index 0000000..c9a1a60 --- /dev/null +++ b/main/display/lvgl_display/emoji_collection.cc @@ -0,0 +1,123 @@ +#include "emoji_collection.h" + +#include +#include +#include + +#define TAG "EmojiCollection" + +void EmojiCollection::AddEmoji(const std::string& name, LvglImage* image) { + emoji_collection_[name] = image; +} + +const LvglImage* EmojiCollection::GetEmojiImage(const char* name) { + auto it = emoji_collection_.find(name); + if (it != emoji_collection_.end()) { + return it->second; + } + + ESP_LOGW(TAG, "Emoji not found: %s", name); + return nullptr; +} + +EmojiCollection::~EmojiCollection() { + for (auto it = emoji_collection_.begin(); it != emoji_collection_.end(); ++it) { + delete it->second; + } + emoji_collection_.clear(); +} + +// These are declared in xiaozhi-fonts/src/font_emoji_32.c +extern const lv_image_dsc_t emoji_1f636_32; // neutral +extern const lv_image_dsc_t emoji_1f642_32; // happy +extern const lv_image_dsc_t emoji_1f606_32; // laughing +extern const lv_image_dsc_t emoji_1f602_32; // funny +extern const lv_image_dsc_t emoji_1f614_32; // sad +extern const lv_image_dsc_t emoji_1f620_32; // angry +extern const lv_image_dsc_t emoji_1f62d_32; // crying +extern const lv_image_dsc_t emoji_1f60d_32; // loving +extern const lv_image_dsc_t emoji_1f633_32; // embarrassed +extern const lv_image_dsc_t emoji_1f62f_32; // surprised +extern const lv_image_dsc_t emoji_1f631_32; // shocked +extern const lv_image_dsc_t emoji_1f914_32; // thinking +extern const lv_image_dsc_t emoji_1f609_32; // winking +extern const lv_image_dsc_t emoji_1f60e_32; // cool +extern const lv_image_dsc_t emoji_1f60c_32; // relaxed +extern const lv_image_dsc_t emoji_1f924_32; // delicious +extern const lv_image_dsc_t emoji_1f618_32; // kissy +extern const lv_image_dsc_t emoji_1f60f_32; // confident +extern const lv_image_dsc_t emoji_1f634_32; // sleepy +extern const lv_image_dsc_t emoji_1f61c_32; // silly +extern const lv_image_dsc_t emoji_1f644_32; // confused + +Twemoji32::Twemoji32() { + AddEmoji("neutral", new LvglSourceImage(&emoji_1f636_32)); + AddEmoji("happy", new LvglSourceImage(&emoji_1f642_32)); + AddEmoji("laughing", new LvglSourceImage(&emoji_1f606_32)); + AddEmoji("funny", new LvglSourceImage(&emoji_1f602_32)); + AddEmoji("sad", new LvglSourceImage(&emoji_1f614_32)); + AddEmoji("angry", new LvglSourceImage(&emoji_1f620_32)); + AddEmoji("crying", new LvglSourceImage(&emoji_1f62d_32)); + AddEmoji("loving", new LvglSourceImage(&emoji_1f60d_32)); + AddEmoji("embarrassed", new LvglSourceImage(&emoji_1f633_32)); + AddEmoji("surprised", new LvglSourceImage(&emoji_1f62f_32)); + AddEmoji("shocked", new LvglSourceImage(&emoji_1f631_32)); + AddEmoji("thinking", new LvglSourceImage(&emoji_1f914_32)); + AddEmoji("winking", new LvglSourceImage(&emoji_1f609_32)); + AddEmoji("cool", new LvglSourceImage(&emoji_1f60e_32)); + AddEmoji("relaxed", new LvglSourceImage(&emoji_1f60c_32)); + AddEmoji("delicious", new LvglSourceImage(&emoji_1f924_32)); + AddEmoji("kissy", new LvglSourceImage(&emoji_1f618_32)); + AddEmoji("confident", new LvglSourceImage(&emoji_1f60f_32)); + AddEmoji("sleepy", new LvglSourceImage(&emoji_1f634_32)); + AddEmoji("silly", new LvglSourceImage(&emoji_1f61c_32)); + AddEmoji("confused", new LvglSourceImage(&emoji_1f644_32)); +} + + +// These are declared in xiaozhi-fonts/src/font_emoji_64.c +extern const lv_image_dsc_t emoji_1f636_64; // neutral +extern const lv_image_dsc_t emoji_1f642_64; // happy +extern const lv_image_dsc_t emoji_1f606_64; // laughing +extern const lv_image_dsc_t emoji_1f602_64; // funny +extern const lv_image_dsc_t emoji_1f614_64; // sad +extern const lv_image_dsc_t emoji_1f620_64; // angry +extern const lv_image_dsc_t emoji_1f62d_64; // crying +extern const lv_image_dsc_t emoji_1f60d_64; // loving +extern const lv_image_dsc_t emoji_1f633_64; // embarrassed +extern const lv_image_dsc_t emoji_1f62f_64; // surprised +extern const lv_image_dsc_t emoji_1f631_64; // shocked +extern const lv_image_dsc_t emoji_1f914_64; // thinking +extern const lv_image_dsc_t emoji_1f609_64; // winking +extern const lv_image_dsc_t emoji_1f60e_64; // cool +extern const lv_image_dsc_t emoji_1f60c_64; // relaxed +extern const lv_image_dsc_t emoji_1f924_64; // delicious +extern const lv_image_dsc_t emoji_1f618_64; // kissy +extern const lv_image_dsc_t emoji_1f60f_64; // confident +extern const lv_image_dsc_t emoji_1f634_64; // sleepy +extern const lv_image_dsc_t emoji_1f61c_64; // silly +extern const lv_image_dsc_t emoji_1f644_64; // confused + +Twemoji64::Twemoji64() { + AddEmoji("neutral", new LvglSourceImage(&emoji_1f636_64)); + AddEmoji("happy", new LvglSourceImage(&emoji_1f642_64)); + AddEmoji("laughing", new LvglSourceImage(&emoji_1f606_64)); + AddEmoji("funny", new LvglSourceImage(&emoji_1f602_64)); + AddEmoji("sad", new LvglSourceImage(&emoji_1f614_64)); + AddEmoji("angry", new LvglSourceImage(&emoji_1f620_64)); + AddEmoji("crying", new LvglSourceImage(&emoji_1f62d_64)); + AddEmoji("loving", new LvglSourceImage(&emoji_1f60d_64)); + AddEmoji("embarrassed", new LvglSourceImage(&emoji_1f633_64)); + AddEmoji("surprised", new LvglSourceImage(&emoji_1f62f_64)); + AddEmoji("shocked", new LvglSourceImage(&emoji_1f631_64)); + AddEmoji("thinking", new LvglSourceImage(&emoji_1f914_64)); + AddEmoji("winking", new LvglSourceImage(&emoji_1f609_64)); + AddEmoji("cool", new LvglSourceImage(&emoji_1f60e_64)); + AddEmoji("relaxed", new LvglSourceImage(&emoji_1f60c_64)); + AddEmoji("delicious", new LvglSourceImage(&emoji_1f924_64)); + AddEmoji("kissy", new LvglSourceImage(&emoji_1f618_64)); + AddEmoji("confident", new LvglSourceImage(&emoji_1f60f_64)); + AddEmoji("sleepy", new LvglSourceImage(&emoji_1f634_64)); + AddEmoji("silly", new LvglSourceImage(&emoji_1f61c_64)); + AddEmoji("confused", new LvglSourceImage(&emoji_1f644_64)); +} diff --git a/main/display/lvgl_display/emoji_collection.h b/main/display/lvgl_display/emoji_collection.h new file mode 100644 index 0000000..c9eac05 --- /dev/null +++ b/main/display/lvgl_display/emoji_collection.h @@ -0,0 +1,34 @@ +#ifndef EMOJI_COLLECTION_H +#define EMOJI_COLLECTION_H + +#include "lvgl_image.h" + +#include + +#include +#include +#include + + +// Define interface for emoji collection +class EmojiCollection { +public: + virtual void AddEmoji(const std::string& name, LvglImage* image); + virtual const LvglImage* GetEmojiImage(const char* name); + virtual ~EmojiCollection(); + +private: + std::map emoji_collection_; +}; + +class Twemoji32 : public EmojiCollection { +public: + Twemoji32(); +}; + +class Twemoji64 : public EmojiCollection { +public: + Twemoji64(); +}; + +#endif diff --git a/main/display/lvgl_display/gif/LICENSE.txt b/main/display/lvgl_display/gif/LICENSE.txt new file mode 100644 index 0000000..c53d519 --- /dev/null +++ b/main/display/lvgl_display/gif/LICENSE.txt @@ -0,0 +1,2 @@ +All of the source code and documentation for gifdec is released into the +public domain and provided without warranty of any kind. diff --git a/main/display/lvgl_display/gif/gifdec.c b/main/display/lvgl_display/gif/gifdec.c new file mode 100644 index 0000000..dc2b8c4 --- /dev/null +++ b/main/display/lvgl_display/gif/gifdec.c @@ -0,0 +1,818 @@ +#include "gifdec.h" + +#include +#include +#include + +#define MIN(A, B) ((A) < (B) ? (A) : (B)) +#define MAX(A, B) ((A) > (B) ? (A) : (B)) + +typedef struct Entry { + uint16_t length; + uint16_t prefix; + uint8_t suffix; +} Entry; + +typedef struct Table { + int bulk; + int nentries; + Entry * entries; +} Table; + +#if LV_GIF_CACHE_DECODE_DATA +#define LZW_MAXBITS 12 +#define LZW_TABLE_SIZE (1 << LZW_MAXBITS) +#define LZW_CACHE_SIZE (LZW_TABLE_SIZE * 4) +#endif + +static gd_GIF * gif_open(gd_GIF * gif); +static bool f_gif_open(gd_GIF * gif, const void * path, bool is_file); +static void f_gif_read(gd_GIF * gif, void * buf, size_t len); +static int f_gif_seek(gd_GIF * gif, size_t pos, int k); +static void f_gif_close(gd_GIF * gif); + +#if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_HELIUM + #include "gifdec_mve.h" +#endif + +static uint16_t +read_num(gd_GIF * gif) +{ + uint8_t bytes[2]; + + f_gif_read(gif, bytes, 2); + return bytes[0] + (((uint16_t) bytes[1]) << 8); +} + +gd_GIF * +gd_open_gif_file(const char * fname) +{ + gd_GIF gif_base; + memset(&gif_base, 0, sizeof(gif_base)); + + bool res = f_gif_open(&gif_base, fname, true); + if(!res) return NULL; + + return gif_open(&gif_base); +} + +gd_GIF * +gd_open_gif_data(const void * data) +{ + gd_GIF gif_base; + memset(&gif_base, 0, sizeof(gif_base)); + + bool res = f_gif_open(&gif_base, data, false); + if(!res) return NULL; + + return gif_open(&gif_base); +} + +static gd_GIF * gif_open(gd_GIF * gif_base) +{ + uint8_t sigver[3]; + uint16_t width, height, depth; + uint8_t fdsz, bgidx, aspect; + uint8_t * bgcolor; + int gct_sz; + gd_GIF * gif = NULL; + + /* Header */ + f_gif_read(gif_base, sigver, 3); + if(memcmp(sigver, "GIF", 3) != 0) { + LV_LOG_WARN("invalid signature"); + goto fail; + } + /* Version */ + f_gif_read(gif_base, sigver, 3); + if(memcmp(sigver, "89a", 3) != 0) { + LV_LOG_WARN("invalid version"); + goto fail; + } + /* Width x Height */ + width = read_num(gif_base); + height = read_num(gif_base); + /* FDSZ */ + f_gif_read(gif_base, &fdsz, 1); + /* Presence of GCT */ + if(!(fdsz & 0x80)) { + LV_LOG_WARN("no global color table"); + goto fail; + } + /* Color Space's Depth */ + depth = ((fdsz >> 4) & 7) + 1; + /* Ignore Sort Flag. */ + /* GCT Size */ + gct_sz = 1 << ((fdsz & 0x07) + 1); + /* Background Color Index */ + f_gif_read(gif_base, &bgidx, 1); + /* Aspect Ratio */ + f_gif_read(gif_base, &aspect, 1); + /* Create gd_GIF Structure. */ + if(0 == width || 0 == height){ + LV_LOG_WARN("Zero size image"); + goto fail; + } +#if LV_GIF_CACHE_DECODE_DATA + if(0 == (INT_MAX - sizeof(gd_GIF) - LZW_CACHE_SIZE) / width / height / 5){ + LV_LOG_WARN("Image dimensions are too large"); + goto fail; + } + gif = lv_malloc(sizeof(gd_GIF) + 5 * width * height + LZW_CACHE_SIZE); +#else + if(0 == (INT_MAX - sizeof(gd_GIF)) / width / height / 5){ + LV_LOG_WARN("Image dimensions are too large"); + goto fail; + } + gif = lv_malloc(sizeof(gd_GIF) + 5 * width * height); +#endif + if(!gif) goto fail; + memcpy(gif, gif_base, sizeof(gd_GIF)); + gif->width = width; + gif->height = height; + gif->depth = depth; + /* Read GCT */ + gif->gct.size = gct_sz; + f_gif_read(gif, gif->gct.colors, 3 * gif->gct.size); + gif->palette = &gif->gct; + gif->bgindex = bgidx; + gif->canvas = (uint8_t *) &gif[1]; + gif->frame = &gif->canvas[4 * width * height]; + if(gif->bgindex) { + memset(gif->frame, gif->bgindex, gif->width * gif->height); + } + bgcolor = &gif->palette->colors[gif->bgindex * 3]; + #if LV_GIF_CACHE_DECODE_DATA + gif->lzw_cache = gif->frame + width * height; + #endif + +#ifdef GIFDEC_FILL_BG + GIFDEC_FILL_BG(gif->canvas, gif->width * gif->height, 1, gif->width * gif->height, bgcolor, 0x00); +#else + for(int i = 0; i < gif->width * gif->height; i++) { + gif->canvas[i * 4 + 0] = *(bgcolor + 2); + gif->canvas[i * 4 + 1] = *(bgcolor + 1); + gif->canvas[i * 4 + 2] = *(bgcolor + 0); + gif->canvas[i * 4 + 3] = 0x00; // 初始化为透明,让第一帧根据自己的透明度设置来渲染 + } +#endif + gif->anim_start = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + gif->loop_count = -1; + goto ok; +fail: + f_gif_close(gif_base); +ok: + return gif; +} + +static void +discard_sub_blocks(gd_GIF * gif) +{ + uint8_t size; + + do { + f_gif_read(gif, &size, 1); + f_gif_seek(gif, size, LV_FS_SEEK_CUR); + } while(size); +} + +static void +read_plain_text_ext(gd_GIF * gif) +{ + if(gif->plain_text) { + uint16_t tx, ty, tw, th; + uint8_t cw, ch, fg, bg; + size_t sub_block; + f_gif_seek(gif, 1, LV_FS_SEEK_CUR); /* block size = 12 */ + tx = read_num(gif); + ty = read_num(gif); + tw = read_num(gif); + th = read_num(gif); + f_gif_read(gif, &cw, 1); + f_gif_read(gif, &ch, 1); + f_gif_read(gif, &fg, 1); + f_gif_read(gif, &bg, 1); + sub_block = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + gif->plain_text(gif, tx, ty, tw, th, cw, ch, fg, bg); + f_gif_seek(gif, sub_block, LV_FS_SEEK_SET); + } + else { + /* Discard plain text metadata. */ + f_gif_seek(gif, 13, LV_FS_SEEK_CUR); + } + /* Discard plain text sub-blocks. */ + discard_sub_blocks(gif); +} + +static void +read_graphic_control_ext(gd_GIF * gif) +{ + uint8_t rdit; + + /* Discard block size (always 0x04). */ + f_gif_seek(gif, 1, LV_FS_SEEK_CUR); + f_gif_read(gif, &rdit, 1); + gif->gce.disposal = (rdit >> 2) & 3; + gif->gce.input = rdit & 2; + gif->gce.transparency = rdit & 1; + gif->gce.delay = read_num(gif); + f_gif_read(gif, &gif->gce.tindex, 1); + /* Skip block terminator. */ + f_gif_seek(gif, 1, LV_FS_SEEK_CUR); +} + +static void +read_comment_ext(gd_GIF * gif) +{ + if(gif->comment) { + size_t sub_block = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + gif->comment(gif); + f_gif_seek(gif, sub_block, LV_FS_SEEK_SET); + } + /* Discard comment sub-blocks. */ + discard_sub_blocks(gif); +} + +static void +read_application_ext(gd_GIF * gif) +{ + char app_id[8]; + char app_auth_code[3]; + uint16_t loop_count; + + /* Discard block size (always 0x0B). */ + f_gif_seek(gif, 1, LV_FS_SEEK_CUR); + /* Application Identifier. */ + f_gif_read(gif, app_id, 8); + /* Application Authentication Code. */ + f_gif_read(gif, app_auth_code, 3); + if(!strncmp(app_id, "NETSCAPE", sizeof(app_id))) { + /* Discard block size (0x03) and constant byte (0x01). */ + f_gif_seek(gif, 2, LV_FS_SEEK_CUR); + loop_count = read_num(gif); + if(gif->loop_count < 0) { + if(loop_count == 0) { + gif->loop_count = 0; + } + else { + gif->loop_count = loop_count + 1; + } + } + /* Skip block terminator. */ + f_gif_seek(gif, 1, LV_FS_SEEK_CUR); + } + else if(gif->application) { + size_t sub_block = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + gif->application(gif, app_id, app_auth_code); + f_gif_seek(gif, sub_block, LV_FS_SEEK_SET); + discard_sub_blocks(gif); + } + else { + discard_sub_blocks(gif); + } +} + +static void +read_ext(gd_GIF * gif) +{ + uint8_t label; + + f_gif_read(gif, &label, 1); + switch(label) { + case 0x01: + read_plain_text_ext(gif); + break; + case 0xF9: + read_graphic_control_ext(gif); + break; + case 0xFE: + read_comment_ext(gif); + break; + case 0xFF: + read_application_ext(gif); + break; + default: + LV_LOG_WARN("unknown extension: %02X\n", label); + } +} + +static uint16_t +get_key(gd_GIF *gif, int key_size, uint8_t *sub_len, uint8_t *shift, uint8_t *byte) +{ + int bits_read; + int rpad; + int frag_size; + uint16_t key; + + key = 0; + for (bits_read = 0; bits_read < key_size; bits_read += frag_size) { + rpad = (*shift + bits_read) % 8; + if (rpad == 0) { + /* Update byte. */ + if (*sub_len == 0) { + f_gif_read(gif, sub_len, 1); /* Must be nonzero! */ + if (*sub_len == 0) return 0x1000; + } + f_gif_read(gif, byte, 1); + (*sub_len)--; + } + frag_size = MIN(key_size - bits_read, 8 - rpad); + key |= ((uint16_t) ((*byte) >> rpad)) << bits_read; + } + /* Clear extra bits to the left. */ + key &= (1 << key_size) - 1; + *shift = (*shift + key_size) % 8; + return key; +} + +#if LV_GIF_CACHE_DECODE_DATA +/* Decompress image pixels. + * Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table) or parse error. */ +static int +read_image_data(gd_GIF *gif, int interlace) +{ + uint8_t sub_len, shift, byte; + int ret = 0; + int key_size; + int y, pass, linesize; + uint8_t *ptr = NULL; + uint8_t *ptr_row_start = NULL; + uint8_t *ptr_base = NULL; + size_t start, end; + uint16_t key, clear_code, stop_code, curr_code; + int frm_off, frm_size,curr_size,top_slot,new_codes,slot; + /* The first value of the value sequence corresponding to key */ + int first_value; + int last_key; + uint8_t *sp = NULL; + uint8_t *p_stack = NULL; + uint8_t *p_suffix = NULL; + uint16_t *p_prefix = NULL; + + /* get initial key size and clear code, stop code */ + f_gif_read(gif, &byte, 1); + key_size = (int) byte; + clear_code = 1 << key_size; + stop_code = clear_code + 1; + key = 0; + + start = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + discard_sub_blocks(gif); + end = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + f_gif_seek(gif, start, LV_FS_SEEK_SET); + + linesize = gif->width; + ptr_base = &gif->frame[gif->fy * linesize + gif->fx]; + ptr_row_start = ptr_base; + ptr = ptr_row_start; + sub_len = shift = 0; + /* decoder */ + pass = 0; + y = 0; + p_stack = gif->lzw_cache; + p_suffix = gif->lzw_cache + LZW_TABLE_SIZE; + p_prefix = (uint16_t*)(gif->lzw_cache + LZW_TABLE_SIZE * 2); + frm_off = 0; + frm_size = gif->fw * gif->fh; + curr_size = key_size + 1; + top_slot = 1 << curr_size; + new_codes = clear_code + 2; + slot = new_codes; + first_value = -1; + last_key = -1; + sp = p_stack; + + while (frm_off < frm_size) { + /* copy data to frame buffer */ + while (sp > p_stack) { + if(frm_off >= frm_size){ + LV_LOG_WARN("LZW table token overflows the frame buffer"); + return -1; + } + *ptr++ = *(--sp); + frm_off += 1; + /* read one line */ + if ((ptr - ptr_row_start) == gif->fw) { + if (interlace) { + switch(pass) { + case 0: + case 1: + y += 8; + ptr_row_start += linesize * 8; + break; + case 2: + y += 4; + ptr_row_start += linesize * 4; + break; + case 3: + y += 2; + ptr_row_start += linesize * 2; + break; + default: + break; + } + while (y >= gif->fh) { + y = 4 >> pass; + ptr_row_start = ptr_base + linesize * y; + pass++; + } + } else { + ptr_row_start += linesize; + } + ptr = ptr_row_start; + } + } + + key = get_key(gif, curr_size, &sub_len, &shift, &byte); + + if (key == stop_code || key >= LZW_TABLE_SIZE) + break; + + if (key == clear_code) { + curr_size = key_size + 1; + slot = new_codes; + top_slot = 1 << curr_size; + first_value = last_key = -1; + sp = p_stack; + continue; + } + + curr_code = key; + /* + * If the current code is a code that will be added to the decoding + * dictionary, it is composed of the data list corresponding to the + * previous key and its first data. + * */ + if (curr_code == slot && first_value >= 0) { + *sp++ = first_value; + curr_code = last_key; + }else if(curr_code >= slot) + break; + + while (curr_code >= new_codes) { + *sp++ = p_suffix[curr_code]; + curr_code = p_prefix[curr_code]; + } + *sp++ = curr_code; + + /* Add code to decoding dictionary */ + if (slot < top_slot && last_key >= 0) { + p_suffix[slot] = curr_code; + p_prefix[slot++] = last_key; + } + first_value = curr_code; + last_key = key; + if (slot >= top_slot) { + if (curr_size < LZW_MAXBITS) { + top_slot <<= 1; + curr_size += 1; + } + } + } + + if (key == stop_code) f_gif_read(gif, &sub_len, 1); /* Must be zero! */ + f_gif_seek(gif, end, LV_FS_SEEK_SET); + return ret; +} +#else +static Table * +new_table(int key_size) +{ + int key; + int init_bulk = MAX(1 << (key_size + 1), 0x100); + Table * table = lv_malloc(sizeof(*table) + sizeof(Entry) * init_bulk); + if(table) { + table->bulk = init_bulk; + table->nentries = (1 << key_size) + 2; + table->entries = (Entry *) &table[1]; + for(key = 0; key < (1 << key_size); key++) + table->entries[key] = (Entry) { + 1, 0xFFF, key + }; + } + return table; +} + +/* Add table entry. Return value: + * 0 on success + * +1 if key size must be incremented after this addition + * -1 if could not realloc table */ +static int +add_entry(Table ** tablep, uint16_t length, uint16_t prefix, uint8_t suffix) +{ + Table * table = *tablep; + if(table->nentries == table->bulk) { + table->bulk *= 2; + table = lv_realloc(table, sizeof(*table) + sizeof(Entry) * table->bulk); + if(!table) return -1; + table->entries = (Entry *) &table[1]; + *tablep = table; + } + table->entries[table->nentries] = (Entry) { + length, prefix, suffix + }; + table->nentries++; + if((table->nentries & (table->nentries - 1)) == 0) + return 1; + return 0; +} + +/* Compute output index of y-th input line, in frame of height h. */ +static int +interlaced_line_index(int h, int y) +{ + int p; /* number of lines in current pass */ + + p = (h - 1) / 8 + 1; + if(y < p) /* pass 1 */ + return y * 8; + y -= p; + p = (h - 5) / 8 + 1; + if(y < p) /* pass 2 */ + return y * 8 + 4; + y -= p; + p = (h - 3) / 4 + 1; + if(y < p) /* pass 3 */ + return y * 4 + 2; + y -= p; + /* pass 4 */ + return y * 2 + 1; +} + +/* Decompress image pixels. + * Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table) or parse error. */ +static int +read_image_data(gd_GIF * gif, int interlace) +{ + uint8_t sub_len, shift, byte; + int init_key_size, key_size, table_is_full = 0; + int frm_off, frm_size, str_len = 0, i, p, x, y; + uint16_t key, clear, stop; + int ret; + Table * table; + Entry entry = {0}; + size_t start, end; + + f_gif_read(gif, &byte, 1); + key_size = (int) byte; + start = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + discard_sub_blocks(gif); + end = f_gif_seek(gif, 0, LV_FS_SEEK_CUR); + f_gif_seek(gif, start, LV_FS_SEEK_SET); + clear = 1 << key_size; + stop = clear + 1; + table = new_table(key_size); + key_size++; + init_key_size = key_size; + sub_len = shift = 0; + key = get_key(gif, key_size, &sub_len, &shift, &byte); /* clear code */ + frm_off = 0; + ret = 0; + frm_size = gif->fw * gif->fh; + while(frm_off < frm_size) { + if(key == clear) { + key_size = init_key_size; + table->nentries = (1 << (key_size - 1)) + 2; + table_is_full = 0; + } + else if(!table_is_full) { + ret = add_entry(&table, str_len + 1, key, entry.suffix); + if(ret == -1) { + lv_free(table); + return -1; + } + if(table->nentries == 0x1000) { + ret = 0; + table_is_full = 1; + } + } + key = get_key(gif, key_size, &sub_len, &shift, &byte); + if(key == clear) continue; + if(key == stop || key == 0x1000) break; + if(ret == 1) key_size++; + entry = table->entries[key]; + str_len = entry.length; + if(frm_off + str_len > frm_size){ + LV_LOG_WARN("LZW table token overflows the frame buffer"); + lv_free(table); + return -1; + } + for(i = 0; i < str_len; i++) { + p = frm_off + entry.length - 1; + x = p % gif->fw; + y = p / gif->fw; + if(interlace) + y = interlaced_line_index((int) gif->fh, y); + gif->frame[(gif->fy + y) * gif->width + gif->fx + x] = entry.suffix; + if(entry.prefix == 0xFFF) + break; + else + entry = table->entries[entry.prefix]; + } + frm_off += str_len; + if(key < table->nentries - 1 && !table_is_full) + table->entries[table->nentries - 1].suffix = entry.suffix; + } + lv_free(table); + if(key == stop) f_gif_read(gif, &sub_len, 1); /* Must be zero! */ + f_gif_seek(gif, end, LV_FS_SEEK_SET); + return 0; +} + +#endif + +/* Read image. + * Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table) or parse error. */ +static int +read_image(gd_GIF * gif) +{ + uint8_t fisrz; + int interlace; + + /* Image Descriptor. */ + gif->fx = read_num(gif); + gif->fy = read_num(gif); + gif->fw = read_num(gif); + gif->fh = read_num(gif); + if(gif->fx + (uint32_t)gif->fw > gif->width || gif->fy + (uint32_t)gif->fh > gif->height){ + LV_LOG_WARN("Frame coordinates out of image bounds"); + return -1; + } + f_gif_read(gif, &fisrz, 1); + interlace = fisrz & 0x40; + /* Ignore Sort Flag. */ + /* Local Color Table? */ + if(fisrz & 0x80) { + /* Read LCT */ + gif->lct.size = 1 << ((fisrz & 0x07) + 1); + f_gif_read(gif, gif->lct.colors, 3 * gif->lct.size); + gif->palette = &gif->lct; + } + else + gif->palette = &gif->gct; + /* Image Data. */ + return read_image_data(gif, interlace); +} + +static void +render_frame_rect(gd_GIF * gif, uint8_t * buffer) +{ + int i = gif->fy * gif->width + gif->fx; +#ifdef GIFDEC_RENDER_FRAME + GIFDEC_RENDER_FRAME(&buffer[i * 4], gif->fw, gif->fh, gif->width, + &gif->frame[i], gif->palette->colors, + gif->gce.transparency ? gif->gce.tindex : 0x100); +#else + int j, k; + uint8_t index, * color; + + for(j = 0; j < gif->fh; j++) { + for(k = 0; k < gif->fw; k++) { + index = gif->frame[(gif->fy + j) * gif->width + gif->fx + k]; + color = &gif->palette->colors[index * 3]; + if(!gif->gce.transparency || index != gif->gce.tindex) { + buffer[(i + k) * 4 + 0] = *(color + 2); + buffer[(i + k) * 4 + 1] = *(color + 1); + buffer[(i + k) * 4 + 2] = *(color + 0); + buffer[(i + k) * 4 + 3] = 0xFF; + } + } + i += gif->width; + } +#endif +} + +static void +dispose(gd_GIF * gif) +{ + int i; + uint8_t * bgcolor; + switch(gif->gce.disposal) { + case 2: /* Restore to background color. */ + bgcolor = &gif->palette->colors[gif->bgindex * 3]; + + uint8_t opa = 0xff; + if(gif->gce.transparency) opa = 0x00; + + i = gif->fy * gif->width + gif->fx; +#ifdef GIFDEC_FILL_BG + GIFDEC_FILL_BG(&(gif->canvas[i * 4]), gif->fw, gif->fh, gif->width, bgcolor, opa); +#else + int j, k; + for(j = 0; j < gif->fh; j++) { + for(k = 0; k < gif->fw; k++) { + gif->canvas[(i + k) * 4 + 0] = *(bgcolor + 2); + gif->canvas[(i + k) * 4 + 1] = *(bgcolor + 1); + gif->canvas[(i + k) * 4 + 2] = *(bgcolor + 0); + gif->canvas[(i + k) * 4 + 3] = opa; + } + i += gif->width; + } +#endif + break; + case 3: /* Restore to previous, i.e., don't update canvas.*/ + break; + default: + /* Add frame non-transparent pixels to canvas. */ + render_frame_rect(gif, gif->canvas); + } +} + +/* Return 1 if got a frame; 0 if got GIF trailer; -1 if error. */ +int +gd_get_frame(gd_GIF * gif) +{ + char sep; + + dispose(gif); + f_gif_read(gif, &sep, 1); + while(sep != ',') { + if(sep == ';') { + f_gif_seek(gif, gif->anim_start, LV_FS_SEEK_SET); + if(gif->loop_count == 1 || gif->loop_count < 0) { + return 0; + } + else if(gif->loop_count > 1) { + gif->loop_count--; + } + } + else if(sep == '!') + read_ext(gif); + else return -1; + f_gif_read(gif, &sep, 1); + } + if(read_image(gif) == -1) + return -1; + return 1; +} + +void +gd_render_frame(gd_GIF * gif, uint8_t * buffer) +{ + render_frame_rect(gif, buffer); +} + +void +gd_rewind(gd_GIF * gif) +{ + gif->loop_count = -1; + f_gif_seek(gif, gif->anim_start, LV_FS_SEEK_SET); +} + +void +gd_close_gif(gd_GIF * gif) +{ + f_gif_close(gif); + lv_free(gif); +} + +static bool f_gif_open(gd_GIF * gif, const void * path, bool is_file) +{ + gif->f_rw_p = 0; + gif->data = NULL; + gif->is_file = is_file; + + if(is_file) { + lv_fs_res_t res = lv_fs_open(&gif->fd, path, LV_FS_MODE_RD); + if(res != LV_FS_RES_OK) return false; + else return true; + } + else { + gif->data = path; + return true; + } +} + +static void f_gif_read(gd_GIF * gif, void * buf, size_t len) +{ + if(gif->is_file) { + lv_fs_read(&gif->fd, buf, len, NULL); + } + else { + memcpy(buf, &gif->data[gif->f_rw_p], len); + gif->f_rw_p += len; + } +} + +static int f_gif_seek(gd_GIF * gif, size_t pos, int k) +{ + if(gif->is_file) { + lv_fs_seek(&gif->fd, pos, k); + uint32_t x; + lv_fs_tell(&gif->fd, &x); + return x; + } + else { + if(k == LV_FS_SEEK_CUR) gif->f_rw_p += pos; + else if(k == LV_FS_SEEK_SET) gif->f_rw_p = pos; + return gif->f_rw_p; + } +} + +static void f_gif_close(gd_GIF * gif) +{ + if(gif->is_file) { + lv_fs_close(&gif->fd); + } +} + diff --git a/main/display/lvgl_display/gif/gifdec.h b/main/display/lvgl_display/gif/gifdec.h new file mode 100644 index 0000000..12c171e --- /dev/null +++ b/main/display/lvgl_display/gif/gifdec.h @@ -0,0 +1,68 @@ +#ifndef GIFDEC_H +#define GIFDEC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +typedef struct _gd_Palette { + int size; + uint8_t colors[0x100 * 3]; +} gd_Palette; + +typedef struct _gd_GCE { + uint16_t delay; + uint8_t tindex; + uint8_t disposal; + int input; + int transparency; +} gd_GCE; + + + +typedef struct _gd_GIF { + lv_fs_file_t fd; + const char * data; + uint8_t is_file; + uint32_t f_rw_p; + int32_t anim_start; + uint16_t width, height; + uint16_t depth; + int32_t loop_count; + gd_GCE gce; + gd_Palette * palette; + gd_Palette lct, gct; + void (*plain_text)( + struct _gd_GIF * gif, uint16_t tx, uint16_t ty, + uint16_t tw, uint16_t th, uint8_t cw, uint8_t ch, + uint8_t fg, uint8_t bg + ); + void (*comment)(struct _gd_GIF * gif); + void (*application)(struct _gd_GIF * gif, char id[8], char auth[3]); + uint16_t fx, fy, fw, fh; + uint8_t bgindex; + uint8_t * canvas, * frame; +#if LV_GIF_CACHE_DECODE_DATA + uint8_t *lzw_cache; +#endif +} gd_GIF; + +gd_GIF * gd_open_gif_file(const char * fname); + +gd_GIF * gd_open_gif_data(const void * data); + +void gd_render_frame(gd_GIF * gif, uint8_t * buffer); + +int gd_get_frame(gd_GIF * gif); +void gd_rewind(gd_GIF * gif); +void gd_close_gif(gd_GIF * gif); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* GIFDEC_H */ diff --git a/main/display/lvgl_display/gif/gifdec_mve.h b/main/display/lvgl_display/gif/gifdec_mve.h new file mode 100644 index 0000000..6d83393 --- /dev/null +++ b/main/display/lvgl_display/gif/gifdec_mve.h @@ -0,0 +1,140 @@ +/** + * @file gifdec_mve.h + * + */ + +#ifndef GIFDEC_MVE_H +#define GIFDEC_MVE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#include +#include "../../misc/lv_color.h" + +/********************* + * DEFINES + *********************/ + +#define GIFDEC_FILL_BG(dst, w, h, stride, color, opa) \ + _gifdec_fill_bg_mve(dst, w, h, stride, color, opa) + +#define GIFDEC_RENDER_FRAME(dst, w, h, stride, frame, pattern, tindex) \ + _gifdec_render_frame_mve(dst, w, h, stride, frame, pattern, tindex) + +/********************** + * MACROS + **********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +static inline void _gifdec_fill_bg_mve(uint8_t * dst, uint16_t w, uint16_t h, uint16_t stride, uint8_t * color, + uint8_t opa) +{ + lv_color32_t c = lv_color32_make(*(color + 0), *(color + 1), *(color + 2), opa); + uint32_t color_32 = *(uint32_t *)&c; + + __asm volatile( + ".p2align 2 \n" + "vdup.32 q0, %[src] \n" + "3: \n" + "mov r0, %[dst] \n" + + "wlstp.32 lr, %[w], 1f \n" + "2: \n" + + "vstrw.32 q0, [r0], #16 \n" + "letp lr, 2b \n" + "1: \n" + "add %[dst], %[iTargetStride] \n" + "subs %[h], #1 \n" + "bne 3b \n" + : [dst] "+r"(dst), + [h] "+r"(h) + : [src] "r"(color_32), + [w] "r"(w), + [iTargetStride] "r"(stride * sizeof(uint32_t)) + : "r0", "q0", "memory", "r14", "cc"); +} + +static inline void _gifdec_render_frame_mve(uint8_t * dst, uint16_t w, uint16_t h, uint16_t stride, uint8_t * frame, + uint8_t * pattern, uint16_t tindex) +{ + if(w == 0 || h == 0) { + return; + } + + __asm volatile( + "vmov.u16 q3, #255 \n" + "vshl.u16 q3, q3, #8 \n" /* left shift 8 for a*/ + + "mov r0, #2 \n" + "vidup.u16 q6, r0, #4 \n" /* [2, 6, 10, 14, 18, 22, 26, 30] */ + "mov r0, #0 \n" + "vidup.u16 q7, r0, #4 \n" /* [0, 4, 8, 12, 16, 20, 24, 28] */ + + "3: \n" + "mov r1, %[dst] \n" + "mov r2, %[frame] \n" + + "wlstp.16 lr, %[w], 1f \n" + "2: \n" + + "mov r0, #3 \n" + "vldrb.u16 q4, [r2], #8 \n" + "vmul.u16 q5, q4, r0 \n" + + "mov r0, #1 \n" + "vldrb.u16 q2, [%[pattern], q5] \n" /* load 8 pixel r*/ + + "vadd.u16 q5, q5, r0 \n" + "vldrb.u16 q1, [%[pattern], q5] \n" /* load 8 pixel g*/ + + "vadd.u16 q5, q5, r0 \n" + "vldrb.u16 q0, [%[pattern], q5] \n" /* load 8 pixel b*/ + + "vshl.u16 q1, q1, #8 \n" /* left shift 8 for g*/ + + "vorr.u16 q0, q0, q1 \n" /* make 8 pixel gb*/ + "vorr.u16 q1, q2, q3 \n" /* make 8 pixel ar*/ + + "vcmp.i16 ne, q4, %[tindex] \n" + "vpstt \n" + "vstrht.16 q0, [r1, q7] \n" + "vstrht.16 q1, [r1, q6] \n" + "add r1, r1, #32 \n" + + "letp lr, 2b \n" + + "1: \n" + "mov r0, %[stride], LSL #2 \n" + "add %[dst], r0 \n" + "add %[frame], %[stride] \n" + "subs %[h], #1 \n" + "bne 3b \n" + + : [dst] "+r"(dst), + [frame] "+r"(frame), + [h] "+r"(h) + : [pattern] "r"(pattern), + [w] "r"(w), + [stride] "r"(stride), + [tindex] "r"(tindex) + : "r0", "r1", "r2", "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "memory", "r14", "cc"); +} + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*GIFDEC_MVE_H*/ diff --git a/main/display/lvgl_display/gif/lvgl_gif.cc b/main/display/lvgl_display/gif/lvgl_gif.cc new file mode 100644 index 0000000..de94803 --- /dev/null +++ b/main/display/lvgl_display/gif/lvgl_gif.cc @@ -0,0 +1,207 @@ +#include "lvgl_gif.h" +#include +#include + +#define TAG "LvglGif" + +LvglGif::LvglGif(const lv_img_dsc_t* img_dsc) + : gif_(nullptr), timer_(nullptr), last_call_(0), playing_(false), loaded_(false) { + if (!img_dsc || !img_dsc->data) { + ESP_LOGE(TAG, "Invalid image descriptor"); + return; + } + + gif_ = gd_open_gif_data(img_dsc->data); + if (!gif_) { + ESP_LOGE(TAG, "Failed to open GIF from image descriptor"); + } + + // Setup LVGL image descriptor + memset(&img_dsc_, 0, sizeof(img_dsc_)); + img_dsc_.header.magic = LV_IMAGE_HEADER_MAGIC; + img_dsc_.header.flags = LV_IMAGE_FLAGS_MODIFIABLE; + img_dsc_.header.cf = LV_COLOR_FORMAT_ARGB8888; + img_dsc_.header.w = gif_->width; + img_dsc_.header.h = gif_->height; + img_dsc_.header.stride = gif_->width * 4; + img_dsc_.data = gif_->canvas; + img_dsc_.data_size = gif_->width * gif_->height * 4; + + // Render first frame + if (gif_->canvas) { + gd_render_frame(gif_, gif_->canvas); + } + + loaded_ = true; + ESP_LOGI(TAG, "GIF loaded from image descriptor: %dx%d", gif_->width, gif_->height); +} + +// Destructor +LvglGif::~LvglGif() { + Cleanup(); +} + +// LvglImage interface implementation +const lv_img_dsc_t* LvglGif::image_dsc() const { + if (!loaded_) { + return nullptr; + } + return &img_dsc_; +} + +// Animation control methods +void LvglGif::Start() { + if (!loaded_ || !gif_) { + ESP_LOGW(TAG, "GIF not loaded, cannot start"); + return; + } + + if (!timer_) { + timer_ = lv_timer_create([](lv_timer_t* timer) { + LvglGif* gif_obj = static_cast(lv_timer_get_user_data(timer)); + gif_obj->NextFrame(); + }, 10, this); + } + + if (timer_) { + playing_ = true; + last_call_ = lv_tick_get(); + lv_timer_resume(timer_); + lv_timer_reset(timer_); + + // Render first frame + NextFrame(); + + ESP_LOGI(TAG, "GIF animation started"); + } +} + +void LvglGif::Pause() { + if (timer_) { + playing_ = false; + lv_timer_pause(timer_); + ESP_LOGI(TAG, "GIF animation paused"); + } +} + +void LvglGif::Resume() { + if (!loaded_ || !gif_) { + ESP_LOGW(TAG, "GIF not loaded, cannot resume"); + return; + } + + if (timer_) { + playing_ = true; + lv_timer_resume(timer_); + ESP_LOGI(TAG, "GIF animation resumed"); + } +} + +void LvglGif::Stop() { + if (timer_) { + playing_ = false; + lv_timer_pause(timer_); + } + + if (gif_) { + gd_rewind(gif_); + NextFrame(); + ESP_LOGI(TAG, "GIF animation stopped and rewound"); + } +} + +bool LvglGif::IsPlaying() const { + return playing_; +} + +bool LvglGif::IsLoaded() const { + return loaded_; +} + +int32_t LvglGif::GetLoopCount() const { + if (!loaded_ || !gif_) { + return -1; + } + return gif_->loop_count; +} + +void LvglGif::SetLoopCount(int32_t count) { + if (!loaded_ || !gif_) { + ESP_LOGW(TAG, "GIF not loaded, cannot set loop count"); + return; + } + gif_->loop_count = count; +} + +uint16_t LvglGif::width() const { + if (!loaded_ || !gif_) { + return 0; + } + return gif_->width; +} + +uint16_t LvglGif::height() const { + if (!loaded_ || !gif_) { + return 0; + } + return gif_->height; +} + +void LvglGif::SetFrameCallback(std::function callback) { + frame_callback_ = callback; +} + +void LvglGif::NextFrame() { + if (!loaded_ || !gif_ || !playing_) { + return; + } + + // Check if enough time has passed for the next frame + uint32_t elapsed = lv_tick_elaps(last_call_); + if (elapsed < gif_->gce.delay * 10) { + return; + } + + last_call_ = lv_tick_get(); + + // Get next frame + int has_next = gd_get_frame(gif_); + if (has_next == 0) { + // Animation finished, pause timer + playing_ = false; + if (timer_) { + lv_timer_pause(timer_); + } + ESP_LOGI(TAG, "GIF animation completed"); + } + + // Render current frame + if (gif_->canvas) { + gd_render_frame(gif_, gif_->canvas); + + // Call frame callback if set + if (frame_callback_) { + frame_callback_(); + } + } +} + +void LvglGif::Cleanup() { + // Stop and delete timer + if (timer_) { + lv_timer_delete(timer_); + timer_ = nullptr; + } + + // Close GIF decoder + if (gif_) { + gd_close_gif(gif_); + gif_ = nullptr; + } + + playing_ = false; + loaded_ = false; + + // Clear image descriptor + memset(&img_dsc_, 0, sizeof(img_dsc_)); +} diff --git a/main/display/lvgl_display/gif/lvgl_gif.h b/main/display/lvgl_display/gif/lvgl_gif.h new file mode 100644 index 0000000..afa2959 --- /dev/null +++ b/main/display/lvgl_display/gif/lvgl_gif.h @@ -0,0 +1,101 @@ +#pragma once + +#include "../lvgl_image.h" +#include "gifdec.h" +#include +#include +#include + +/** + * C++ implementation of LVGL GIF widget + * Provides GIF animation functionality using gifdec library + */ +class LvglGif { +public: + explicit LvglGif(const lv_img_dsc_t* img_dsc); + virtual ~LvglGif(); + + // LvglImage interface implementation + virtual const lv_img_dsc_t* image_dsc() const; + + /** + * Start/restart GIF animation + */ + void Start(); + + /** + * Pause GIF animation + */ + void Pause(); + + /** + * Resume GIF animation + */ + void Resume(); + + /** + * Stop GIF animation and rewind to first frame + */ + void Stop(); + + /** + * Check if GIF is currently playing + */ + bool IsPlaying() const; + + /** + * Check if GIF was loaded successfully + */ + bool IsLoaded() const; + + /** + * Get loop count + */ + int32_t GetLoopCount() const; + + /** + * Set loop count + */ + void SetLoopCount(int32_t count); + + /** + * Get GIF dimensions + */ + uint16_t width() const; + uint16_t height() const; + + /** + * Set frame update callback + */ + void SetFrameCallback(std::function callback); + +private: + // GIF decoder instance + gd_GIF* gif_; + + // LVGL image descriptor + lv_img_dsc_t img_dsc_; + + // Animation timer + lv_timer_t* timer_; + + // Last frame update time + uint32_t last_call_; + + // Animation state + bool playing_; + bool loaded_; + + // Frame update callback + std::function frame_callback_; + + /** + * Update to next frame + */ + void NextFrame(); + + /** + * Cleanup resources + */ + void Cleanup(); +}; diff --git a/main/display/lvgl_display/lvgl_display.cc b/main/display/lvgl_display/lvgl_display.cc new file mode 100644 index 0000000..ffced5b --- /dev/null +++ b/main/display/lvgl_display/lvgl_display.cc @@ -0,0 +1,220 @@ +#include +#include +#include +#include +#include +#include + +#include "lvgl_display.h" +#include "board.h" +#include "application.h" +#include "audio_codec.h" +#include "settings.h" +#include "assets/lang_config.h" + +#define TAG "Display" + +LvglDisplay::LvglDisplay() { + // Notification timer + esp_timer_create_args_t notification_timer_args = { + .callback = [](void *arg) { + LvglDisplay *display = static_cast(arg); + DisplayLockGuard lock(display); + lv_obj_add_flag(display->notification_label_, LV_OBJ_FLAG_HIDDEN); + lv_obj_remove_flag(display->status_label_, LV_OBJ_FLAG_HIDDEN); + }, + .arg = this, + .dispatch_method = ESP_TIMER_TASK, + .name = "notification_timer", + .skip_unhandled_events = false, + }; + ESP_ERROR_CHECK(esp_timer_create(¬ification_timer_args, ¬ification_timer_)); + + // Create a power management lock + auto ret = esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, "display_update", &pm_lock_); + if (ret == ESP_ERR_NOT_SUPPORTED) { + ESP_LOGI(TAG, "Power management not supported"); + } else { + ESP_ERROR_CHECK(ret); + } +} + +LvglDisplay::~LvglDisplay() { + if (notification_timer_ != nullptr) { + esp_timer_stop(notification_timer_); + esp_timer_delete(notification_timer_); + } + + if (network_label_ != nullptr) { + lv_obj_del(network_label_); + } + if (notification_label_ != nullptr) { + lv_obj_del(notification_label_); + } + if (status_label_ != nullptr) { + lv_obj_del(status_label_); + } + if (mute_label_ != nullptr) { + lv_obj_del(mute_label_); + } + if (battery_label_ != nullptr) { + lv_obj_del(battery_label_); + } + if( low_battery_popup_ != nullptr ) { + lv_obj_del(low_battery_popup_); + } + if (pm_lock_ != nullptr) { + esp_pm_lock_delete(pm_lock_); + } +} + +void LvglDisplay::SetStatus(const char* status) { + DisplayLockGuard lock(this); + if (status_label_ == nullptr) { + return; + } + lv_label_set_text(status_label_, status); + lv_obj_remove_flag(status_label_, LV_OBJ_FLAG_HIDDEN); + lv_obj_add_flag(notification_label_, LV_OBJ_FLAG_HIDDEN); + + last_status_update_time_ = std::chrono::system_clock::now(); +} + +void LvglDisplay::ShowNotification(const std::string ¬ification, int duration_ms) { + ShowNotification(notification.c_str(), duration_ms); +} + +void LvglDisplay::ShowNotification(const char* notification, int duration_ms) { + DisplayLockGuard lock(this); + if (notification_label_ == nullptr) { + return; + } + lv_label_set_text(notification_label_, notification); + lv_obj_remove_flag(notification_label_, LV_OBJ_FLAG_HIDDEN); + lv_obj_add_flag(status_label_, LV_OBJ_FLAG_HIDDEN); + + esp_timer_stop(notification_timer_); + ESP_ERROR_CHECK(esp_timer_start_once(notification_timer_, duration_ms * 1000)); +} + +void LvglDisplay::UpdateStatusBar(bool update_all) { + auto& app = Application::GetInstance(); + auto& board = Board::GetInstance(); + auto codec = board.GetAudioCodec(); + + // Update mute icon + { + DisplayLockGuard lock(this); + if (mute_label_ == nullptr) { + return; + } + + // 如果静音状态改变,则更新图标 + if (codec->output_volume() == 0 && !muted_) { + muted_ = true; + lv_label_set_text(mute_label_, FONT_AWESOME_VOLUME_XMARK); + } else if (codec->output_volume() > 0 && muted_) { + muted_ = false; + lv_label_set_text(mute_label_, ""); + } + } + + // Update time + if (app.GetDeviceState() == kDeviceStateIdle) { + if (last_status_update_time_ + std::chrono::seconds(10) < std::chrono::system_clock::now()) { + // Set status to clock "HH:MM" + time_t now = time(NULL); + struct tm* tm = localtime(&now); + // Check if the we have already set the time + if (tm->tm_year >= 2025 - 1900) { + char time_str[16]; + strftime(time_str, sizeof(time_str), "%H:%M ", tm); + SetStatus(time_str); + } else { + ESP_LOGW(TAG, "System time is not set, tm_year: %d", tm->tm_year); + } + } + } + + esp_pm_lock_acquire(pm_lock_); + // 更新电池图标 + int battery_level; + bool charging, discharging; + const char* icon = nullptr; + if (board.GetBatteryLevel(battery_level, charging, discharging)) { + if (charging) { + icon = FONT_AWESOME_BATTERY_BOLT; + } else { + const char* levels[] = { + FONT_AWESOME_BATTERY_EMPTY, // 0-19% + FONT_AWESOME_BATTERY_QUARTER, // 20-39% + FONT_AWESOME_BATTERY_HALF, // 40-59% + FONT_AWESOME_BATTERY_THREE_QUARTERS, // 60-79% + FONT_AWESOME_BATTERY_FULL, // 80-99% + FONT_AWESOME_BATTERY_FULL, // 100% + }; + icon = levels[battery_level / 20]; + } + DisplayLockGuard lock(this); + if (battery_label_ != nullptr && battery_icon_ != icon) { + battery_icon_ = icon; + lv_label_set_text(battery_label_, battery_icon_); + } + + if (low_battery_popup_ != nullptr) { + if (strcmp(icon, FONT_AWESOME_BATTERY_EMPTY) == 0 && discharging) { + if (lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { // 如果低电量提示框隐藏,则显示 + lv_obj_remove_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN); + app.PlaySound(Lang::Sounds::OGG_LOW_BATTERY); + } + } else { + // Hide the low battery popup when the battery is not empty + if (!lv_obj_has_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN)) { // 如果低电量提示框显示,则隐藏 + lv_obj_add_flag(low_battery_popup_, LV_OBJ_FLAG_HIDDEN); + } + } + } + } + + // 每 10 秒更新一次网络图标 + static int seconds_counter = 0; + if (update_all || seconds_counter++ % 10 == 0) { + // 升级固件时,不读取 4G 网络状态,避免占用 UART 资源 + auto device_state = Application::GetInstance().GetDeviceState(); + static const std::vector allowed_states = { + kDeviceStateIdle, + kDeviceStateStarting, + kDeviceStateWifiConfiguring, + kDeviceStateListening, + kDeviceStateActivating, + }; + if (std::find(allowed_states.begin(), allowed_states.end(), device_state) != allowed_states.end()) { + icon = board.GetNetworkStateIcon(); + if (network_label_ != nullptr && icon != nullptr && network_icon_ != icon) { + DisplayLockGuard lock(this); + network_icon_ = icon; + lv_label_set_text(network_label_, network_icon_); + } + } + } + + esp_pm_lock_release(pm_lock_); +} + +void LvglDisplay::SetPreviewImage(const lv_img_dsc_t* image) { + // Do nothing but free the image + if (image != nullptr) { + heap_caps_free((void*)image->data); + heap_caps_free((void*)image); + } +} + +void LvglDisplay::SetPowerSaveMode(bool on) { + if (on) { + SetChatMessage("system", ""); + SetEmotion("sleepy"); + } else { + SetChatMessage("system", ""); + SetEmotion("neutral"); + } +} diff --git a/main/display/lvgl_display/lvgl_display.h b/main/display/lvgl_display/lvgl_display.h new file mode 100644 index 0000000..47d2e84 --- /dev/null +++ b/main/display/lvgl_display/lvgl_display.h @@ -0,0 +1,51 @@ +#ifndef LVGL_DISPLAY_H +#define LVGL_DISPLAY_H + +#include "display.h" + +#include +#include +#include +#include + +#include +#include + +class LvglDisplay : public Display { +public: + LvglDisplay(); + virtual ~LvglDisplay(); + + virtual void SetStatus(const char* status); + virtual void ShowNotification(const char* notification, int duration_ms = 3000); + virtual void ShowNotification(const std::string ¬ification, int duration_ms = 3000); + virtual void SetPreviewImage(const lv_img_dsc_t* image); + virtual void UpdateStatusBar(bool update_all = false); + virtual void SetPowerSaveMode(bool on); + +protected: + esp_pm_lock_handle_t pm_lock_ = nullptr; + lv_display_t *display_ = nullptr; + + lv_obj_t *network_label_ = nullptr; + lv_obj_t *status_label_ = nullptr; + lv_obj_t *notification_label_ = nullptr; + lv_obj_t *mute_label_ = nullptr; + lv_obj_t *battery_label_ = nullptr; + lv_obj_t* low_battery_popup_ = nullptr; + lv_obj_t* low_battery_label_ = nullptr; + + const char* battery_icon_ = nullptr; + const char* network_icon_ = nullptr; + bool muted_ = false; + + std::chrono::system_clock::time_point last_status_update_time_; + esp_timer_handle_t notification_timer_ = nullptr; + + friend class DisplayLockGuard; + virtual bool Lock(int timeout_ms = 0) = 0; + virtual void Unlock() = 0; +}; + + +#endif diff --git a/main/display/lvgl_display/lvgl_font.cc b/main/display/lvgl_display/lvgl_font.cc new file mode 100644 index 0000000..b0a45c7 --- /dev/null +++ b/main/display/lvgl_display/lvgl_font.cc @@ -0,0 +1,13 @@ +#include "lvgl_font.h" +#include + + +LvglCBinFont::LvglCBinFont(void* data) { + font_ = cbin_font_create(static_cast(data)); +} + +LvglCBinFont::~LvglCBinFont() { + if (font_ != nullptr) { + cbin_font_delete(font_); + } +} \ No newline at end of file diff --git a/main/display/lvgl_display/lvgl_font.h b/main/display/lvgl_display/lvgl_font.h new file mode 100644 index 0000000..d539dc0 --- /dev/null +++ b/main/display/lvgl_display/lvgl_font.h @@ -0,0 +1,31 @@ +#pragma once + +#include + + +class LvglFont { +public: + virtual const lv_font_t* font() const = 0; + virtual ~LvglFont() = default; +}; + +// Built-in font +class LvglBuiltInFont : public LvglFont { +public: + LvglBuiltInFont(const lv_font_t* font) : font_(font) {} + virtual const lv_font_t* font() const override { return font_; } + +private: + const lv_font_t* font_; +}; + + +class LvglCBinFont : public LvglFont { +public: + LvglCBinFont(void* data); + virtual ~LvglCBinFont(); + virtual const lv_font_t* font() const override { return font_; } + +private: + lv_font_t* font_; +}; diff --git a/main/display/lvgl_display/lvgl_image.cc b/main/display/lvgl_display/lvgl_image.cc new file mode 100644 index 0000000..eff91a1 --- /dev/null +++ b/main/display/lvgl_display/lvgl_image.cc @@ -0,0 +1,33 @@ +#include "lvgl_image.h" +#include + +#include +#include + +#define TAG "LvglImage" + + +LvglRawImage::LvglRawImage(void* data, size_t size) { + bzero(&image_dsc_, sizeof(image_dsc_)); + image_dsc_.header.magic = LV_IMAGE_HEADER_MAGIC; + image_dsc_.header.cf = LV_COLOR_FORMAT_RAW_ALPHA; + image_dsc_.header.w = 0; + image_dsc_.header.h = 0; + image_dsc_.data_size = size; + image_dsc_.data = static_cast(data); +} + +bool LvglRawImage::IsGif() const { + auto ptr = (const uint8_t*)image_dsc_.data; + return ptr[0] == 'G' && ptr[1] == 'I' && ptr[2] == 'F'; +} + +LvglCBinImage::LvglCBinImage(void* data) { + image_dsc_ = cbin_img_dsc_create(static_cast(data)); +} + +LvglCBinImage::~LvglCBinImage() { + if (image_dsc_ != nullptr) { + cbin_img_dsc_delete(image_dsc_); + } +} diff --git a/main/display/lvgl_display/lvgl_image.h b/main/display/lvgl_display/lvgl_image.h new file mode 100644 index 0000000..92f3490 --- /dev/null +++ b/main/display/lvgl_display/lvgl_image.h @@ -0,0 +1,42 @@ +#pragma once + +#include + + +// Wrap around lv_img_dsc_t +class LvglImage { +public: + virtual const lv_img_dsc_t* image_dsc() const = 0; + virtual bool IsGif() const { return false; } + virtual ~LvglImage() = default; +}; + + +class LvglRawImage : public LvglImage { +public: + LvglRawImage(void* data, size_t size); + virtual const lv_img_dsc_t* image_dsc() const override { return &image_dsc_; } + virtual bool IsGif() const; + +private: + lv_img_dsc_t image_dsc_; +}; + +class LvglCBinImage : public LvglImage { +public: + LvglCBinImage(void* data); + virtual ~LvglCBinImage(); + virtual const lv_img_dsc_t* image_dsc() const override { return image_dsc_; } + +private: + lv_img_dsc_t* image_dsc_ = nullptr; +}; + +class LvglSourceImage : public LvglImage { +public: + LvglSourceImage(const lv_img_dsc_t* image_dsc) : image_dsc_(image_dsc) {} + virtual const lv_img_dsc_t* image_dsc() const override { return image_dsc_; } + +private: + const lv_img_dsc_t* image_dsc_; +}; \ No newline at end of file diff --git a/main/display/lvgl_display/lvgl_theme.cc b/main/display/lvgl_display/lvgl_theme.cc new file mode 100644 index 0000000..f1bdffe --- /dev/null +++ b/main/display/lvgl_display/lvgl_theme.cc @@ -0,0 +1,30 @@ +#include "lvgl_theme.h" + +LvglTheme::LvglTheme(const std::string& name) : Theme(name) { +} + +lv_color_t LvglTheme::ParseColor(const std::string& color) { + if (color.find("#") == 0) { + // Convert #112233 to lv_color_t + uint8_t r = strtol(color.substr(1, 2).c_str(), nullptr, 16); + uint8_t g = strtol(color.substr(3, 2).c_str(), nullptr, 16); + uint8_t b = strtol(color.substr(5, 2).c_str(), nullptr, 16); + return lv_color_make(r, g, b); + } + return lv_color_black(); +} + +LvglThemeManager::LvglThemeManager() { +} + +LvglTheme* LvglThemeManager::GetTheme(const std::string& theme_name) { + auto it = themes_.find(theme_name); + if (it != themes_.end()) { + return it->second; + } + return nullptr; +} + +void LvglThemeManager::RegisterTheme(const std::string& theme_name, LvglTheme* theme) { + themes_[theme_name] = theme; +} diff --git a/main/display/lvgl_display/lvgl_theme.h b/main/display/lvgl_display/lvgl_theme.h new file mode 100644 index 0000000..85527a9 --- /dev/null +++ b/main/display/lvgl_display/lvgl_theme.h @@ -0,0 +1,94 @@ +#pragma once + +#include "display.h" +#include "lvgl_image.h" +#include "lvgl_font.h" +#include "emoji_collection.h" + +#include +#include +#include +#include + + +class LvglTheme : public Theme { +public: + static lv_color_t ParseColor(const std::string& color); + + LvglTheme(const std::string& name); + + // Properties + inline lv_color_t background_color() const { return background_color_; } + inline lv_color_t text_color() const { return text_color_; } + inline lv_color_t chat_background_color() const { return chat_background_color_; } + inline lv_color_t user_bubble_color() const { return user_bubble_color_; } + inline lv_color_t assistant_bubble_color() const { return assistant_bubble_color_; } + inline lv_color_t system_bubble_color() const { return system_bubble_color_; } + inline lv_color_t system_text_color() const { return system_text_color_; } + inline lv_color_t border_color() const { return border_color_; } + inline lv_color_t low_battery_color() const { return low_battery_color_; } + inline std::shared_ptr background_image() const { return background_image_; } + inline std::shared_ptr emoji_collection() const { return emoji_collection_; } + inline std::shared_ptr text_font() const { return text_font_; } + inline std::shared_ptr icon_font() const { return icon_font_; } + inline std::shared_ptr large_icon_font() const { return large_icon_font_; } + inline int spacing(int scale) const { return spacing_ * scale; } + + inline void set_background_color(lv_color_t background) { background_color_ = background; } + inline void set_text_color(lv_color_t text) { text_color_ = text; } + inline void set_chat_background_color(lv_color_t chat_background) { chat_background_color_ = chat_background; } + inline void set_user_bubble_color(lv_color_t user_bubble) { user_bubble_color_ = user_bubble; } + inline void set_assistant_bubble_color(lv_color_t assistant_bubble) { assistant_bubble_color_ = assistant_bubble; } + inline void set_system_bubble_color(lv_color_t system_bubble) { system_bubble_color_ = system_bubble; } + inline void set_system_text_color(lv_color_t system_text) { system_text_color_ = system_text; } + inline void set_border_color(lv_color_t border) { border_color_ = border; } + inline void set_low_battery_color(lv_color_t low_battery) { low_battery_color_ = low_battery; } + inline void set_background_image(std::shared_ptr background_image) { background_image_ = background_image; } + inline void set_emoji_collection(std::shared_ptr emoji_collection) { emoji_collection_ = emoji_collection; } + inline void set_text_font(std::shared_ptr text_font) { text_font_ = text_font; } + inline void set_icon_font(std::shared_ptr icon_font) { icon_font_ = icon_font; } + inline void set_large_icon_font(std::shared_ptr large_icon_font) { large_icon_font_ = large_icon_font; } + +private: + int spacing_ = 2; + + // Colors + lv_color_t background_color_; + lv_color_t text_color_; + lv_color_t chat_background_color_; + lv_color_t user_bubble_color_; + lv_color_t assistant_bubble_color_; + lv_color_t system_bubble_color_; + lv_color_t system_text_color_; + lv_color_t border_color_; + lv_color_t low_battery_color_; + + // Background image + std::shared_ptr background_image_ = nullptr; + + // fonts + std::shared_ptr text_font_ = nullptr; + std::shared_ptr icon_font_ = nullptr; + std::shared_ptr large_icon_font_ = nullptr; + + // Emoji collection + std::shared_ptr emoji_collection_ = nullptr; +}; + + +class LvglThemeManager { +public: + static LvglThemeManager& GetInstance() { + static LvglThemeManager instance; + return instance; + } + + void RegisterTheme(const std::string& theme_name, LvglTheme* theme); + LvglTheme* GetTheme(const std::string& theme_name); + +private: + LvglThemeManager(); + void InitializeDefaultThemes(); + + std::map themes_; +}; diff --git a/main/display/oled_display.cc b/main/display/oled_display.cc index 8e19e4b..918b5e1 100644 --- a/main/display/oled_display.cc +++ b/main/display/oled_display.cc @@ -1,5 +1,7 @@ #include "oled_display.h" #include "assets/lang_config.h" +#include "lvgl_theme.h" +#include "lvgl_font.h" #include #include @@ -11,19 +13,33 @@ #define TAG "OledDisplay" +LV_FONT_DECLARE(LVGL_TEXT_FONT); +LV_FONT_DECLARE(LVGL_ICON_FONT); LV_FONT_DECLARE(font_awesome_30_1); OledDisplay::OledDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, - int width, int height, bool mirror_x, bool mirror_y, DisplayFonts fonts) - : panel_io_(panel_io), panel_(panel), fonts_(fonts) { + int width, int height, bool mirror_x, bool mirror_y) + : panel_io_(panel_io), panel_(panel) { width_ = width; height_ = height; + auto text_font = std::make_shared(&LVGL_TEXT_FONT); + auto icon_font = std::make_shared(&LVGL_ICON_FONT); + auto large_icon_font = std::make_shared(&font_awesome_30_1); + + auto dark_theme = new LvglTheme("dark"); + dark_theme->set_text_font(text_font); + dark_theme->set_icon_font(icon_font); + dark_theme->set_large_icon_font(large_icon_font); + + auto& theme_manager = LvglThemeManager::GetInstance(); + theme_manager.RegisterTheme("dark", dark_theme); + current_theme_ = dark_theme; + ESP_LOGI(TAG, "Initialize LVGL"); lvgl_port_cfg_t port_cfg = ESP_LVGL_PORT_INIT_CONFIG(); port_cfg.task_priority = 1; port_cfg.task_stack = 6144; - port_cfg.timer_period_ms = 40; lvgl_port_init(&port_cfg); ESP_LOGI(TAG, "Adding OLED display"); @@ -120,8 +136,13 @@ void OledDisplay::SetChatMessage(const char* role, const char* content) { void OledDisplay::SetupUI_128x64() { DisplayLockGuard lock(this); + auto lvgl_theme = static_cast(current_theme_); + auto text_font = lvgl_theme->text_font()->font(); + auto icon_font = lvgl_theme->icon_font()->font(); + auto large_icon_font = lvgl_theme->large_icon_font()->font(); + auto screen = lv_screen_active(); - lv_obj_set_style_text_font(screen, fonts_.text_font, 0); + lv_obj_set_style_text_font(screen, text_font, 0); lv_obj_set_style_text_color(screen, lv_color_black(), 0); /* Container */ @@ -156,7 +177,7 @@ void OledDisplay::SetupUI_128x64() { lv_obj_set_style_border_width(content_left_, 0, 0); emotion_label_ = lv_label_create(content_left_); - lv_obj_set_style_text_font(emotion_label_, &font_awesome_30_1, 0); + lv_obj_set_style_text_font(emotion_label_, large_icon_font, 0); lv_label_set_text(emotion_label_, FONT_AWESOME_MICROCHIP_AI); lv_obj_center(emotion_label_); lv_obj_set_style_pad_top(emotion_label_, 8, 0); @@ -192,7 +213,7 @@ void OledDisplay::SetupUI_128x64() { network_label_ = lv_label_create(status_bar_); lv_label_set_text(network_label_, ""); - lv_obj_set_style_text_font(network_label_, fonts_.icon_font, 0); + lv_obj_set_style_text_font(network_label_, icon_font, 0); notification_label_ = lv_label_create(status_bar_); lv_obj_set_flex_grow(notification_label_, 1); @@ -207,15 +228,15 @@ void OledDisplay::SetupUI_128x64() { mute_label_ = lv_label_create(status_bar_); lv_label_set_text(mute_label_, ""); - lv_obj_set_style_text_font(mute_label_, fonts_.icon_font, 0); + lv_obj_set_style_text_font(mute_label_, icon_font, 0); battery_label_ = lv_label_create(status_bar_); lv_label_set_text(battery_label_, ""); - lv_obj_set_style_text_font(battery_label_, fonts_.icon_font, 0); + lv_obj_set_style_text_font(battery_label_, icon_font, 0); low_battery_popup_ = lv_obj_create(screen); lv_obj_set_scrollbar_mode(low_battery_popup_, LV_SCROLLBAR_MODE_OFF); - lv_obj_set_size(low_battery_popup_, LV_HOR_RES * 0.9, fonts_.text_font->line_height * 2); + lv_obj_set_size(low_battery_popup_, LV_HOR_RES * 0.9, text_font->line_height * 2); lv_obj_align(low_battery_popup_, LV_ALIGN_BOTTOM_MID, 0, 0); lv_obj_set_style_bg_color(low_battery_popup_, lv_color_black(), 0); lv_obj_set_style_radius(low_battery_popup_, 10, 0); @@ -229,8 +250,13 @@ void OledDisplay::SetupUI_128x64() { void OledDisplay::SetupUI_128x32() { DisplayLockGuard lock(this); + auto lvgl_theme = static_cast(current_theme_); + auto text_font = lvgl_theme->text_font()->font(); + auto icon_font = lvgl_theme->icon_font()->font(); + auto large_icon_font = lvgl_theme->large_icon_font()->font(); + auto screen = lv_screen_active(); - lv_obj_set_style_text_font(screen, fonts_.text_font, 0); + lv_obj_set_style_text_font(screen, text_font, 0); /* Container */ container_ = lv_obj_create(screen); @@ -248,7 +274,7 @@ void OledDisplay::SetupUI_128x32() { lv_obj_set_style_radius(content_, 0, 0); emotion_label_ = lv_label_create(content_); - lv_obj_set_style_text_font(emotion_label_, &font_awesome_30_1, 0); + lv_obj_set_style_text_font(emotion_label_, large_icon_font, 0); lv_label_set_text(emotion_label_, FONT_AWESOME_MICROCHIP_AI); lv_obj_center(emotion_label_); @@ -283,15 +309,15 @@ void OledDisplay::SetupUI_128x32() { mute_label_ = lv_label_create(status_bar_); lv_label_set_text(mute_label_, ""); - lv_obj_set_style_text_font(mute_label_, fonts_.icon_font, 0); + lv_obj_set_style_text_font(mute_label_, icon_font, 0); network_label_ = lv_label_create(status_bar_); lv_label_set_text(network_label_, ""); - lv_obj_set_style_text_font(network_label_, fonts_.icon_font, 0); + lv_obj_set_style_text_font(network_label_, icon_font, 0); battery_label_ = lv_label_create(status_bar_); lv_label_set_text(battery_label_, ""); - lv_obj_set_style_text_font(battery_label_, fonts_.icon_font, 0); + lv_obj_set_style_text_font(battery_label_, icon_font, 0); chat_message_label_ = lv_label_create(side_bar_); lv_obj_set_size(chat_message_label_, width_ - 32, LV_SIZE_CONTENT); @@ -308,3 +334,25 @@ void OledDisplay::SetupUI_128x32() { lv_obj_set_style_anim_duration(chat_message_label_, lv_anim_speed_clamped(60, 300, 60000), LV_PART_MAIN); } +void OledDisplay::SetEmotion(const char* emotion) { + const char* utf8 = font_awesome_get_utf8(emotion); + DisplayLockGuard lock(this); + if (emotion_label_ == nullptr) { + return; + } + if (utf8 != nullptr) { + lv_label_set_text(emotion_label_, utf8); + } else { + lv_label_set_text(emotion_label_, FONT_AWESOME_NEUTRAL); + } +} + +void OledDisplay::SetTheme(Theme* theme) { + DisplayLockGuard lock(this); + + auto lvgl_theme = static_cast(theme); + auto text_font = lvgl_theme->text_font()->font(); + + auto screen = lv_screen_active(); + lv_obj_set_style_text_font(screen, text_font, 0); +} diff --git a/main/display/oled_display.h b/main/display/oled_display.h index f605372..321f5da 100644 --- a/main/display/oled_display.h +++ b/main/display/oled_display.h @@ -1,12 +1,13 @@ #ifndef OLED_DISPLAY_H #define OLED_DISPLAY_H -#include "display.h" +#include "lvgl_display.h" #include #include -class OledDisplay : public Display { + +class OledDisplay : public LvglDisplay { private: esp_lcd_panel_io_handle_t panel_io_ = nullptr; esp_lcd_panel_handle_t panel_ = nullptr; @@ -17,8 +18,8 @@ private: lv_obj_t* content_right_ = nullptr; lv_obj_t* container_ = nullptr; lv_obj_t* side_bar_ = nullptr; - - DisplayFonts fonts_; + lv_obj_t *emotion_label_ = nullptr; + lv_obj_t* chat_message_label_ = nullptr; virtual bool Lock(int timeout_ms = 0) override; virtual void Unlock() override; @@ -27,11 +28,12 @@ private: void SetupUI_128x32(); public: - OledDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, bool mirror_x, bool mirror_y, - DisplayFonts fonts); + OledDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handle_t panel, int width, int height, bool mirror_x, bool mirror_y); ~OledDisplay(); virtual void SetChatMessage(const char* role, const char* content) override; + virtual void SetEmotion(const char* emotion) override; + virtual void SetTheme(Theme* theme) override; }; #endif // OLED_DISPLAY_H diff --git a/main/idf_component.yml b/main/idf_component.yml index 1e542d9..aa43c1f 100644 --- a/main/idf_component.yml +++ b/main/idf_component.yml @@ -6,7 +6,7 @@ dependencies: espressif/esp_lcd_st77916: ^1.0.1 espressif/esp_lcd_axs15231b: ^1.0.0 espressif/esp_lcd_st7796: - version: 1.3.2 + version: 1.3.4 rules: - if: target not in [esp32c3] espressif/esp_lcd_spd2010: ==1.0.2 @@ -15,8 +15,8 @@ dependencies: 78/esp_lcd_nv3023: ~1.0.0 78/esp-wifi-connect: ~2.5.2 78/esp-opus-encoder: ~2.4.1 - 78/esp-ml307: ~3.3.0 - 78/xiaozhi-fonts: ~1.5.0 + 78/esp-ml307: ~3.3.3 + 78/xiaozhi-fonts: ~1.5.2 espressif/led_strip: ~3.0.1 espressif/esp_codec_dev: ~1.4.0 espressif/esp-sr: ~2.1.5 @@ -32,7 +32,7 @@ dependencies: esp_lvgl_port: ~2.6.0 espressif/esp_io_expander_tca95xx_16bit: ^2.0.0 espressif2022/image_player: ==1.1.0~1 - espressif2022/esp_emote_gfx: ^1.0.0 + espressif2022/esp_emote_gfx: ==1.0.0~2 espressif/adc_mic: ^0.2.1 espressif/esp_mmap_assets: '>=1.2' txp666/otto-emoji-gif-component: ~1.0.2 diff --git a/main/main.cc b/main/main.cc index 06d91ab..c4bce23 100755 --- a/main/main.cc +++ b/main/main.cc @@ -17,8 +17,7 @@ extern "C" void app_main(void) // Initialize NVS flash for WiFi configuration esp_err_t ret = nvs_flash_init(); - if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) - { + if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_LOGW(TAG, "Erasing NVS flash to fix corruption"); ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); @@ -26,7 +25,7 @@ extern "C" void app_main(void) ESP_ERROR_CHECK(ret); // Launch the application - auto &app = Application::GetInstance(); + auto& app = Application::GetInstance(); app.Start(); app.MainEventLoop(); } diff --git a/main/mcp_server.cc b/main/mcp_server.cc index dec3912..95ea757 100644 --- a/main/mcp_server.cc +++ b/main/mcp_server.cc @@ -12,104 +12,127 @@ #include "application.h" #include "display.h" +#include "oled_display.h" #include "board.h" #include "boards/common/esp32_music.h" +#include "settings.h" +#include "lvgl_theme.h" +#include "lvgl_display.h" #define TAG "MCP" #define DEFAULT_TOOLCALL_STACK_SIZE 6144 -McpServer::McpServer() -{ +McpServer::McpServer() { } -McpServer::~McpServer() -{ - for (auto tool : tools_) - { +McpServer::~McpServer() { + for (auto tool : tools_) { delete tool; } tools_.clear(); } -void McpServer::AddCommonTools() -{ - // To speed up the response time, we add the common tools to the beginning of +void McpServer::AddCommonTools() { + // *Important* To speed up the response time, we add the common tools to the beginning of // the tools list to utilize the prompt cache. + // **重要** 为了提升响应速度,我们把常用的工具放在前面,利用 prompt cache 的特性。 + // Backup the original tools list and restore it after adding the common tools. auto original_tools = std::move(tools_); - auto &board = Board::GetInstance(); + auto& board = Board::GetInstance(); + + // Do not add custom tools here. + // Custom tools must be added in the board's InitializeTools function. AddTool("self.get_device_status", - "Provides the real-time information of the device, including the current status of the audio speaker, screen, battery, network, etc.\n" - "Use this tool for: \n" - "1. Answering questions about current condition (e.g. what is the current volume of the audio speaker?)\n" - "2. As the first step to control the device (e.g. turn up / down the volume of the audio speaker, etc.)", - PropertyList(), - [&board](const PropertyList &properties) -> ReturnValue - { - return board.GetDeviceStatusJson(); - }); + "Provides the real-time information of the device, including the current status of the audio speaker, screen, battery, network, etc.\n" + "Use this tool for: \n" + "1. Answering questions about current condition (e.g. what is the current volume of the audio speaker?)\n" + "2. As the first step to control the device (e.g. turn up / down the volume of the audio speaker, etc.)", + PropertyList(), + [&board](const PropertyList& properties) -> ReturnValue { + return board.GetDeviceStatusJson(); + }); + + AddTool("self.search_music", + "Transfer to music playback tool.\n" + "Use this tool for: \n" + "1. When a user sends a music playback request.\n" + "2. When music playback related parameters are not configured in the character introduction.\n", + PropertyList(), + [&board](const PropertyList &properties) -> ReturnValue { + ESP_LOGW(TAG, "Use self.music.play_song tool to play music."); + return "Please use MPC Tool self.music.play_song tool to play music."; + }); - AddTool("self.audio_speaker.set_volume", - "Set the volume of the audio speaker. If the current volume is unknown, you must call `self.get_device_status` tool first and then call this tool.", - PropertyList({Property("volume", kPropertyTypeInteger, 0, 100)}), - [&board](const PropertyList &properties) -> ReturnValue - { - auto codec = board.GetAudioCodec(); - codec->SetOutputVolume(properties["volume"].value()); + AddTool("self.audio_speaker.set_volume", + "Set the volume of the audio speaker. If the current volume is unknown, you must call `self.get_device_status` tool first and then call this tool.", + PropertyList({ + Property("volume", kPropertyTypeInteger, 0, 100) + }), + [&board](const PropertyList& properties) -> ReturnValue { + auto codec = board.GetAudioCodec(); + codec->SetOutputVolume(properties["volume"].value()); + return true; + }); + + auto backlight = board.GetBacklight(); + if (backlight) { + AddTool("self.screen.set_brightness", + "Set the brightness of the screen.", + PropertyList({ + Property("brightness", kPropertyTypeInteger, 0, 100) + }), + [backlight](const PropertyList& properties) -> ReturnValue { + uint8_t brightness = static_cast(properties["brightness"].value()); + backlight->SetBrightness(brightness, true); return true; }); - - auto backlight = board.GetBacklight(); - if (backlight) - { - AddTool("self.screen.set_brightness", - "Set the brightness of the screen.", - PropertyList({Property("brightness", kPropertyTypeInteger, 0, 100)}), - [backlight](const PropertyList &properties) -> ReturnValue - { - uint8_t brightness = static_cast(properties["brightness"].value()); - backlight->SetBrightness(brightness, true); - return true; - }); } +#ifdef HAVE_LVGL auto display = board.GetDisplay(); - if (display && !display->GetTheme().empty()) - { + if (display && display->GetTheme() != nullptr) { AddTool("self.screen.set_theme", - "Set the theme of the screen. The theme can be `light` or `dark`.", - PropertyList({Property("theme", kPropertyTypeString)}), - [display](const PropertyList &properties) -> ReturnValue - { - display->SetTheme(properties["theme"].value().c_str()); + "Set the theme of the screen. The theme can be `light` or `dark`.", + PropertyList({ + Property("theme", kPropertyTypeString) + }), + [display](const PropertyList& properties) -> ReturnValue { + auto theme_name = properties["theme"].value(); + auto& theme_manager = LvglThemeManager::GetInstance(); + auto theme = theme_manager.GetTheme(theme_name); + if (theme != nullptr) { + display->SetTheme(theme); return true; - }); + } + return false; + }); } auto camera = board.GetCamera(); - if (camera) - { + if (camera) { AddTool("self.camera.take_photo", - "Take a photo and explain it. Use this tool after the user asks you to see something.\n" - "Args:\n" - " `question`: The question that you want to ask about the photo.\n" - "Return:\n" - " A JSON object that provides the photo information.", - PropertyList({Property("question", kPropertyTypeString)}), - [camera](const PropertyList &properties) -> ReturnValue - { - if (!camera->Capture()) - { - return "{\"success\": false, \"message\": \"Failed to capture photo\"}"; - } - auto question = properties["question"].value(); - return camera->Explain(question); - }); + "Take a photo and explain it. Use this tool after the user asks you to see something.\n" + "Args:\n" + " `question`: The question that you want to ask about the photo.\n" + "Return:\n" + " A JSON object that provides the photo information.", + PropertyList({ + Property("question", kPropertyTypeString) + }), + [camera](const PropertyList& properties) -> ReturnValue { + if (!camera->Capture()) { + throw std::runtime_error("Failed to capture photo"); + } + auto question = properties["question"].value(); + return camera->Explain(question); + }); } +#endif - auto music = board.GetMusic(); +auto music = board.GetMusic(); if (music) { AddTool("self.music.play_song", @@ -174,30 +197,160 @@ void McpServer::AddCommonTools() tools_.insert(tools_.end(), original_tools.begin(), original_tools.end()); } -void McpServer::AddTool(McpTool *tool) -{ + +void McpServer::AddUserOnlyTools() { + // System tools + AddUserOnlyTool("self.get_system_info", + "Get the system information", + PropertyList(), + [this](const PropertyList& properties) -> ReturnValue { + auto& board = Board::GetInstance(); + return board.GetSystemInfoJson(); + }); + + AddUserOnlyTool("self.reboot", "Reboot the system", + PropertyList(), + [this](const PropertyList& properties) -> ReturnValue { + auto& app = Application::GetInstance(); + app.Schedule([]() { + ESP_LOGW(TAG, "User requested reboot"); + vTaskDelay(pdMS_TO_TICKS(1000)); + auto& app = Application::GetInstance(); + app.Reboot(); + }); + return true; + }); + + // Firmware upgrade + AddUserOnlyTool("self.upgrade_firmware", "Upgrade firmware from a specific URL. This will download and install the firmware, then reboot the device.", + PropertyList({ + Property("url", kPropertyTypeString, "The URL of the firmware binary file to download and install") + }), + [this](const PropertyList& properties) -> ReturnValue { + auto url = properties["url"].value(); + ESP_LOGI(TAG, "User requested firmware upgrade from URL: %s", url.c_str()); + + auto& app = Application::GetInstance(); + app.Schedule([url]() { + auto& app = Application::GetInstance(); + auto ota = std::make_unique(); + + bool success = app.UpgradeFirmware(*ota, url); + if (!success) { + ESP_LOGE(TAG, "Firmware upgrade failed"); + } + }); + + return true; + }); + + // Display control +#ifdef HAVE_LVGL + auto display = static_cast(Board::GetInstance().GetDisplay()); + if (display) { + AddUserOnlyTool("self.screen.get_info", "Information about the screen, including width, height, etc.", + PropertyList(), + [display](const PropertyList& properties) -> ReturnValue { + cJSON *json = cJSON_CreateObject(); + cJSON_AddNumberToObject(json, "width", display->width()); + cJSON_AddNumberToObject(json, "height", display->height()); + if (static_cast(display)) { + cJSON_AddBoolToObject(json, "monochrome", true); + } else { + cJSON_AddBoolToObject(json, "monochrome", false); + } + return json; + }); + + AddUserOnlyTool("self.screen.preview_image", "Preview an image on the screen", + PropertyList({ + Property("url", kPropertyTypeString) + }), + [display](const PropertyList& properties) -> ReturnValue { + auto url = properties["url"].value(); + auto http = Board::GetInstance().GetNetwork()->CreateHttp(3); + + if (!http->Open("GET", url)) { + throw std::runtime_error("Failed to open URL: " + url); + } + if (http->GetStatusCode() != 200) { + throw std::runtime_error("Unexpected status code: " + std::to_string(http->GetStatusCode())); + } + + size_t content_length = http->GetBodyLength(); + char* data = (char*)heap_caps_malloc(content_length, MALLOC_CAP_8BIT); + size_t total_read = 0; + while (total_read < content_length) { + int ret = http->Read(data + total_read, content_length - total_read); + if (ret < 0) { + heap_caps_free(data); + throw std::runtime_error("Failed to download image: " + url); + } + total_read += ret; + } + http->Close(); + + auto img_dsc = (lv_img_dsc_t*)heap_caps_calloc(1, sizeof(lv_img_dsc_t), MALLOC_CAP_8BIT); + img_dsc->data_size = content_length; + img_dsc->data = (uint8_t*)data; + if (lv_image_decoder_get_info(img_dsc, &img_dsc->header) != LV_RESULT_OK) { + heap_caps_free(data); + heap_caps_free(img_dsc); + throw std::runtime_error("Failed to get image info"); + } + ESP_LOGI(TAG, "Preview image: %s size: %d resolution: %d x %d", url.c_str(), content_length, img_dsc->header.w, img_dsc->header.h); + + auto& app = Application::GetInstance(); + app.Schedule([display, img_dsc]() { + display->SetPreviewImage(img_dsc); + }); + return true; + }); + } +#endif + + // Assets download url + auto assets = Board::GetInstance().GetAssets(); + if (assets) { + if (assets->partition_valid()) { + AddUserOnlyTool("self.assets.set_download_url", "Set the download url for the assets", + PropertyList({ + Property("url", kPropertyTypeString) + }), + [assets](const PropertyList& properties) -> ReturnValue { + auto url = properties["url"].value(); + Settings settings("assets", true); + settings.SetString("download_url", url); + return true; + }); + } + } +} + +void McpServer::AddTool(McpTool* tool) { // Prevent adding duplicate tools - if (std::find_if(tools_.begin(), tools_.end(), [tool](const McpTool *t) - { return t->name() == tool->name(); }) != tools_.end()) - { + if (std::find_if(tools_.begin(), tools_.end(), [tool](const McpTool* t) { return t->name() == tool->name(); }) != tools_.end()) { ESP_LOGW(TAG, "Tool %s already added", tool->name().c_str()); return; } - ESP_LOGI(TAG, "Add tool: %s", tool->name().c_str()); + ESP_LOGI(TAG, "Add tool: %s%s", tool->name().c_str(), tool->user_only() ? " [user]" : ""); tools_.push_back(tool); } -void McpServer::AddTool(const std::string &name, const std::string &description, const PropertyList &properties, std::function callback) -{ +void McpServer::AddTool(const std::string& name, const std::string& description, const PropertyList& properties, std::function callback) { AddTool(new McpTool(name, description, properties, callback)); } -void McpServer::ParseMessage(const std::string &message) -{ - cJSON *json = cJSON_Parse(message.c_str()); - if (json == nullptr) - { +void McpServer::AddUserOnlyTool(const std::string& name, const std::string& description, const PropertyList& properties, std::function callback) { + auto tool = new McpTool(name, description, properties, callback); + tool->set_user_only(true); + AddTool(tool); +} + +void McpServer::ParseMessage(const std::string& message) { + cJSON* json = cJSON_Parse(message.c_str()); + if (json == nullptr) { ESP_LOGE(TAG, "Failed to parse MCP message: %s", message.c_str()); return; } @@ -205,22 +358,17 @@ void McpServer::ParseMessage(const std::string &message) cJSON_Delete(json); } -void McpServer::ParseCapabilities(const cJSON *capabilities) -{ +void McpServer::ParseCapabilities(const cJSON* capabilities) { auto vision = cJSON_GetObjectItem(capabilities, "vision"); - if (cJSON_IsObject(vision)) - { + if (cJSON_IsObject(vision)) { auto url = cJSON_GetObjectItem(vision, "url"); auto token = cJSON_GetObjectItem(vision, "token"); - if (cJSON_IsString(url)) - { + if (cJSON_IsString(url)) { auto camera = Board::GetInstance().GetCamera(); - if (camera) - { + if (camera) { std::string url_str = std::string(url->valuestring); std::string token_str; - if (cJSON_IsString(token)) - { + if (cJSON_IsString(token)) { token_str = std::string(token->valuestring); } camera->SetExplainUrl(url_str, token_str); @@ -229,53 +377,44 @@ void McpServer::ParseCapabilities(const cJSON *capabilities) } } -void McpServer::ParseMessage(const cJSON *json) -{ +void McpServer::ParseMessage(const cJSON* json) { // Check JSONRPC version auto version = cJSON_GetObjectItem(json, "jsonrpc"); - if (version == nullptr || !cJSON_IsString(version) || strcmp(version->valuestring, "2.0") != 0) - { + if (version == nullptr || !cJSON_IsString(version) || strcmp(version->valuestring, "2.0") != 0) { ESP_LOGE(TAG, "Invalid JSONRPC version: %s", version ? version->valuestring : "null"); return; } - + // Check method auto method = cJSON_GetObjectItem(json, "method"); - if (method == nullptr || !cJSON_IsString(method)) - { + if (method == nullptr || !cJSON_IsString(method)) { ESP_LOGE(TAG, "Missing method"); return; } - + auto method_str = std::string(method->valuestring); - if (method_str.find("notifications") == 0) - { + if (method_str.find("notifications") == 0) { return; } - + // Check params auto params = cJSON_GetObjectItem(json, "params"); - if (params != nullptr && !cJSON_IsObject(params)) - { + if (params != nullptr && !cJSON_IsObject(params)) { ESP_LOGE(TAG, "Invalid params for method: %s", method_str.c_str()); return; } auto id = cJSON_GetObjectItem(json, "id"); - if (id == nullptr || !cJSON_IsNumber(id)) - { + if (id == nullptr || !cJSON_IsNumber(id)) { ESP_LOGE(TAG, "Invalid id for method: %s", method_str.c_str()); return; } auto id_int = id->valueint; - - if (method_str == "initialize") - { - if (cJSON_IsObject(params)) - { + + if (method_str == "initialize") { + if (cJSON_IsObject(params)) { auto capabilities = cJSON_GetObjectItem(params, "capabilities"); - if (cJSON_IsObject(capabilities)) - { + if (cJSON_IsObject(capabilities)) { ParseCapabilities(capabilities); } } @@ -284,60 +423,52 @@ void McpServer::ParseMessage(const cJSON *json) message += app_desc->version; message += "\"}}"; ReplyResult(id_int, message); - } - else if (method_str == "tools/list") - { + } else if (method_str == "tools/list") { std::string cursor_str = ""; - if (params != nullptr) - { + bool list_user_only_tools = false; + if (params != nullptr) { auto cursor = cJSON_GetObjectItem(params, "cursor"); - if (cJSON_IsString(cursor)) - { + if (cJSON_IsString(cursor)) { cursor_str = std::string(cursor->valuestring); } + auto with_user_tools = cJSON_GetObjectItem(params, "withUserTools"); + if (cJSON_IsBool(with_user_tools)) { + list_user_only_tools = with_user_tools->valueint == 1; + } } - GetToolsList(id_int, cursor_str); - } - else if (method_str == "tools/call") - { - if (!cJSON_IsObject(params)) - { + GetToolsList(id_int, cursor_str, list_user_only_tools); + } else if (method_str == "tools/call") { + if (!cJSON_IsObject(params)) { ESP_LOGE(TAG, "tools/call: Missing params"); ReplyError(id_int, "Missing params"); return; } auto tool_name = cJSON_GetObjectItem(params, "name"); - if (!cJSON_IsString(tool_name)) - { + if (!cJSON_IsString(tool_name)) { ESP_LOGE(TAG, "tools/call: Missing name"); ReplyError(id_int, "Missing name"); return; } auto tool_arguments = cJSON_GetObjectItem(params, "arguments"); - if (tool_arguments != nullptr && !cJSON_IsObject(tool_arguments)) - { + if (tool_arguments != nullptr && !cJSON_IsObject(tool_arguments)) { ESP_LOGE(TAG, "tools/call: Invalid arguments"); ReplyError(id_int, "Invalid arguments"); return; } auto stack_size = cJSON_GetObjectItem(params, "stackSize"); - if (stack_size != nullptr && !cJSON_IsNumber(stack_size)) - { + if (stack_size != nullptr && !cJSON_IsNumber(stack_size)) { ESP_LOGE(TAG, "tools/call: Invalid stackSize"); ReplyError(id_int, "Invalid stackSize"); return; } DoToolCall(id_int, std::string(tool_name->valuestring), tool_arguments, stack_size ? stack_size->valueint : DEFAULT_TOOLCALL_STACK_SIZE); - } - else - { + } else { ESP_LOGE(TAG, "Method not implemented: %s", method_str.c_str()); ReplyError(id_int, "Method not implemented: " + method_str); } } -void McpServer::ReplyResult(int id, const std::string &result) -{ +void McpServer::ReplyResult(int id, const std::string& result) { std::string payload = "{\"jsonrpc\":\"2.0\",\"id\":"; payload += std::to_string(id) + ",\"result\":"; payload += result; @@ -345,8 +476,7 @@ void McpServer::ReplyResult(int id, const std::string &result) Application::GetInstance().SendMcpMessage(payload); } -void McpServer::ReplyError(int id, const std::string &message) -{ +void McpServer::ReplyError(int id, const std::string& message) { std::string payload = "{\"jsonrpc\":\"2.0\",\"id\":"; payload += std::to_string(id); payload += ",\"error\":{\"message\":\""; @@ -355,120 +485,99 @@ void McpServer::ReplyError(int id, const std::string &message) Application::GetInstance().SendMcpMessage(payload); } -void McpServer::GetToolsList(int id, const std::string &cursor) -{ +void McpServer::GetToolsList(int id, const std::string& cursor, bool list_user_only_tools) { const int max_payload_size = 8000; std::string json = "{\"tools\":["; - + bool found_cursor = cursor.empty(); auto it = tools_.begin(); std::string next_cursor = ""; - - while (it != tools_.end()) - { + + while (it != tools_.end()) { // 如果我们还没有找到起始位置,继续搜索 - if (!found_cursor) - { - if ((*it)->name() == cursor) - { + if (!found_cursor) { + if ((*it)->name() == cursor) { found_cursor = true; - } - else - { + } else { ++it; continue; } } + if (!list_user_only_tools && (*it)->user_only()) { + ++it; + continue; + } + // 添加tool前检查大小 std::string tool_json = (*it)->to_json() + ","; - if (json.length() + tool_json.length() + 30 > max_payload_size) - { + if (json.length() + tool_json.length() + 30 > max_payload_size) { // 如果添加这个tool会超出大小限制,设置next_cursor并退出循环 next_cursor = (*it)->name(); break; } - + json += tool_json; ++it; } - - if (json.back() == ',') - { + + if (json.back() == ',') { json.pop_back(); } - - if (json.back() == '[' && !tools_.empty()) - { + + if (json.back() == '[' && !tools_.empty()) { // 如果没有添加任何tool,返回错误 ESP_LOGE(TAG, "tools/list: Failed to add tool %s because of payload size limit", next_cursor.c_str()); ReplyError(id, "Failed to add tool " + next_cursor + " because of payload size limit"); return; } - if (next_cursor.empty()) - { + if (next_cursor.empty()) { json += "]}"; - } - else - { + } else { json += "],\"nextCursor\":\"" + next_cursor + "\"}"; } - + ReplyResult(id, json); } -void McpServer::DoToolCall(int id, const std::string &tool_name, const cJSON *tool_arguments, int stack_size) -{ - auto tool_iter = std::find_if(tools_.begin(), tools_.end(), - [&tool_name](const McpTool *tool) - { - return tool->name() == tool_name; - }); - - if (tool_iter == tools_.end()) - { +void McpServer::DoToolCall(int id, const std::string& tool_name, const cJSON* tool_arguments, int stack_size) { + auto tool_iter = std::find_if(tools_.begin(), tools_.end(), + [&tool_name](const McpTool* tool) { + return tool->name() == tool_name; + }); + + if (tool_iter == tools_.end()) { ESP_LOGE(TAG, "tools/call: Unknown tool: %s", tool_name.c_str()); ReplyError(id, "Unknown tool: " + tool_name); return; } PropertyList arguments = (*tool_iter)->properties(); - try - { - for (auto &argument : arguments) - { + try { + for (auto& argument : arguments) { bool found = false; - if (cJSON_IsObject(tool_arguments)) - { + if (cJSON_IsObject(tool_arguments)) { auto value = cJSON_GetObjectItem(tool_arguments, argument.name().c_str()); - if (argument.type() == kPropertyTypeBoolean && cJSON_IsBool(value)) - { + if (argument.type() == kPropertyTypeBoolean && cJSON_IsBool(value)) { argument.set_value(value->valueint == 1); found = true; - } - else if (argument.type() == kPropertyTypeInteger && cJSON_IsNumber(value)) - { + } else if (argument.type() == kPropertyTypeInteger && cJSON_IsNumber(value)) { argument.set_value(value->valueint); found = true; - } - else if (argument.type() == kPropertyTypeString && cJSON_IsString(value)) - { + } else if (argument.type() == kPropertyTypeString && cJSON_IsString(value)) { argument.set_value(value->valuestring); found = true; } } - if (!argument.has_default_value() && !found) - { + if (!argument.has_default_value() && !found) { ESP_LOGE(TAG, "tools/call: Missing valid argument: %s", argument.name().c_str()); ReplyError(id, "Missing valid argument: " + argument.name()); return; } } - } - catch (const std::exception &e) - { + } catch (const std::exception& e) { ESP_LOGE(TAG, "tools/call: %s", e.what()); ReplyError(id, e.what()); return; @@ -482,13 +591,13 @@ void McpServer::DoToolCall(int id, const std::string &tool_name, const cJSON *to esp_pthread_set_cfg(&cfg); // Use a thread to call the tool to avoid blocking the main thread - tool_call_thread_ = std::thread([this, id, tool_iter, arguments = std::move(arguments)]() - { + tool_call_thread_ = std::thread([this, id, tool_iter, arguments = std::move(arguments)]() { try { ReplyResult(id, (*tool_iter)->Call(arguments)); } catch (const std::exception& e) { ESP_LOGE(TAG, "tools/call: %s", e.what()); ReplyError(id, e.what()); - } }); + } + }); tool_call_thread_.detach(); } \ No newline at end of file diff --git a/main/mcp_server.h b/main/mcp_server.h index 27ace32..547d138 100644 --- a/main/mcp_server.h +++ b/main/mcp_server.h @@ -9,11 +9,45 @@ #include #include #include +#include #include +class ImageContent { +private: + std::string encoded_data_; + std::string mime_type_; + + static std::string Base64Encode(const std::string& data) { + size_t dlen = 0, olen = 0; + mbedtls_base64_encode((unsigned char*)nullptr, 0, &dlen, (const unsigned char*)data.data(), data.size()); + std::string result(dlen, 0); + mbedtls_base64_encode((unsigned char*)result.data(), result.size(), &olen, (const unsigned char*)data.data(), data.size()); + return result; + } + +public: + ImageContent(const std::string& mime_type, const std::string& data) { + mime_type_ = mime_type; + // base64 encode data + encoded_data_ = Base64Encode(data); + } + + std::string to_json() const { + cJSON *json = cJSON_CreateObject(); + cJSON_AddStringToObject(json, "type", "image"); + cJSON_AddStringToObject(json, "mimeType", mime_type_.c_str()); + cJSON_AddStringToObject(json, "data", encoded_data_.c_str()); + char* json_str = cJSON_PrintUnformatted(json); + std::string result(json_str); + cJSON_free(json_str); + cJSON_Delete(json); + return result; + } +}; + // 添加类型别名 -using ReturnValue = std::variant; +using ReturnValue = std::variant; enum PropertyType { kPropertyTypeBoolean, @@ -177,6 +211,7 @@ private: std::string description_; PropertyList properties_; std::function callback_; + bool user_only_ = false; public: McpTool(const std::string& name, @@ -188,9 +223,11 @@ public: properties_(properties), callback_(callback) {} + void set_user_only(bool user_only) { user_only_ = user_only; } inline const std::string& name() const { return name_; } inline const std::string& description() const { return description_; } inline const PropertyList& properties() const { return properties_; } + inline bool user_only() const { return user_only_; } std::string to_json() const { std::vector required = properties_.GetRequired(); @@ -214,6 +251,15 @@ public: } cJSON_AddItemToObject(json, "inputSchema", input_schema); + + // Add audience annotation if the tool is user only (invisible to AI) + if (user_only_) { + cJSON *annotations = cJSON_CreateObject(); + cJSON *audience = cJSON_CreateArray(); + cJSON_AddItemToArray(audience, cJSON_CreateString("user")); + cJSON_AddItemToObject(annotations, "audience", audience); + cJSON_AddItemToObject(json, "annotations", annotations); + } char *json_str = cJSON_PrintUnformatted(json); std::string result(json_str); @@ -228,16 +274,32 @@ public: // 返回结果 cJSON* result = cJSON_CreateObject(); cJSON* content = cJSON_CreateArray(); - cJSON* text = cJSON_CreateObject(); - cJSON_AddStringToObject(text, "type", "text"); - if (std::holds_alternative(return_value)) { - cJSON_AddStringToObject(text, "text", std::get(return_value).c_str()); - } else if (std::holds_alternative(return_value)) { - cJSON_AddStringToObject(text, "text", std::get(return_value) ? "true" : "false"); - } else if (std::holds_alternative(return_value)) { - cJSON_AddStringToObject(text, "text", std::to_string(std::get(return_value)).c_str()); + + if (std::holds_alternative(return_value)) { + auto image_content = std::get(return_value); + cJSON* image = cJSON_CreateObject(); + cJSON_AddStringToObject(image, "type", "image"); + cJSON_AddStringToObject(image, "image", image_content->to_json().c_str()); + cJSON_AddItemToArray(content, image); + delete image_content; + } else { + cJSON* text = cJSON_CreateObject(); + cJSON_AddStringToObject(text, "type", "text"); + if (std::holds_alternative(return_value)) { + cJSON_AddStringToObject(text, "text", std::get(return_value).c_str()); + } else if (std::holds_alternative(return_value)) { + cJSON_AddStringToObject(text, "text", std::get(return_value) ? "true" : "false"); + } else if (std::holds_alternative(return_value)) { + cJSON_AddStringToObject(text, "text", std::to_string(std::get(return_value)).c_str()); + } else if (std::holds_alternative(return_value)) { + cJSON* json = std::get(return_value); + char* json_str = cJSON_PrintUnformatted(json); + cJSON_AddStringToObject(text, "text", json_str); + cJSON_free(json_str); + cJSON_Delete(json); + } + cJSON_AddItemToArray(content, text); } - cJSON_AddItemToArray(content, text); cJSON_AddItemToObject(result, "content", content); cJSON_AddBoolToObject(result, "isError", false); @@ -257,8 +319,10 @@ public: } void AddCommonTools(); + void AddUserOnlyTools(); void AddTool(McpTool* tool); void AddTool(const std::string& name, const std::string& description, const PropertyList& properties, std::function callback); + void AddUserOnlyTool(const std::string& name, const std::string& description, const PropertyList& properties, std::function callback); void ParseMessage(const cJSON* json); void ParseMessage(const std::string& message); @@ -271,7 +335,7 @@ private: void ReplyResult(int id, const std::string& result); void ReplyError(int id, const std::string& message); - void GetToolsList(int id, const std::string& cursor); + void GetToolsList(int id, const std::string& cursor, bool list_user_only_tools); void DoToolCall(int id, const std::string& tool_name, const cJSON* tool_arguments, int stack_size); std::vector tools_; diff --git a/main/ota.cc b/main/ota.cc index e3a086e..b793273 100644 --- a/main/ota.cc +++ b/main/ota.cc @@ -89,7 +89,7 @@ bool Ota::CheckVersion() { auto http = SetupHttp(); - std::string data = board.GetJson(); + std::string data = board.GetSystemInfoJson(); std::string method = data.length() > 0 ? "POST" : "GET"; http->SetContent(std::move(data)); @@ -325,13 +325,9 @@ bool Ota::Upgrade(const std::string& firmware_url) { if (image_header.size() >= sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t) + sizeof(esp_app_desc_t)) { esp_app_desc_t new_app_info; memcpy(&new_app_info, image_header.data() + sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t), sizeof(esp_app_desc_t)); - ESP_LOGI(TAG, "New firmware version: %s", new_app_info.version); - + auto current_version = esp_app_get_description()->version; - if (memcmp(new_app_info.version, current_version, sizeof(new_app_info.version)) == 0) { - ESP_LOGE(TAG, "Firmware version is the same, skipping upgrade"); - return false; - } + ESP_LOGI(TAG, "Current version: %s, New version: %s", current_version, new_app_info.version); if (esp_ota_begin(update_partition, OTA_WITH_SEQUENTIAL_WRITES, &update_handle)) { esp_ota_abort(update_handle); @@ -377,6 +373,11 @@ bool Ota::StartUpgrade(std::function callback) return Upgrade(firmware_url_); } +bool Ota::StartUpgradeFromUrl(const std::string& url, std::function callback) { + upgrade_callback_ = callback; + return Upgrade(url); +} + std::vector Ota::ParseVersion(const std::string& version) { std::vector versionNumbers; std::stringstream ss(version); diff --git a/main/ota.h b/main/ota.h index 7957698..82e670e 100644 --- a/main/ota.h +++ b/main/ota.h @@ -21,10 +21,12 @@ public: bool HasActivationCode() { return has_activation_code_; } bool HasServerTime() { return has_server_time_; } bool StartUpgrade(std::function callback); + bool StartUpgradeFromUrl(const std::string& url, std::function callback); void MarkCurrentVersionValid(); const std::string& GetFirmwareVersion() const { return firmware_version_; } const std::string& GetCurrentVersion() const { return current_version_; } + const std::string& GetFirmwareUrl() const { return firmware_url_; } const std::string& GetActivationMessage() const { return activation_message_; } const std::string& GetActivationCode() const { return activation_code_; } std::string GetCheckVersionUrl(); diff --git a/main/protocols/mqtt_protocol.cc b/main/protocols/mqtt_protocol.cc index 9380bb5..7fbd77f 100644 --- a/main/protocols/mqtt_protocol.cc +++ b/main/protocols/mqtt_protocol.cc @@ -36,6 +36,10 @@ MqttProtocol::~MqttProtocol() { esp_timer_stop(reconnect_timer_); esp_timer_delete(reconnect_timer_); } + + udp_.reset(); + mqtt_.reset(); + if (event_group_handle_ != nullptr) { vEventGroupDelete(event_group_handle_); } diff --git a/managed_components/78__esp-ml307/CHECKSUMS.json b/managed_components/78__esp-ml307/CHECKSUMS.json index 697a19e..3739e2a 100644 --- a/managed_components/78__esp-ml307/CHECKSUMS.json +++ b/managed_components/78__esp-ml307/CHECKSUMS.json @@ -1 +1 @@ -{"version": "1.0", "algorithm": "sha256", "created_at": "2025-08-27T17:32:08.865605+00:00", "files": [{"path": ".gitignore", "size": 28, "hash": "8bf6950f6c102e34e53b8db85f1f21d9056304fa2c7a977dd01dd6b71c945541"}, {"path": "CMakeLists.txt", "size": 864, "hash": "c40bc7f3b9d14f785f095f3f42f5cc97a7f2c24635ba16910e4404c57f7b6b47"}, {"path": "LICENSE", "size": 11357, "hash": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4"}, {"path": "README.md", "size": 11314, "hash": "86ad4a899e8bb31b381478bda53d4c0a26c9b8fdf6ac3465c7fc87a0476f9db3"}, {"path": "idf_component.yml", "size": 238, "hash": "e6c3ad32a8cc73b4c9ac917f6599fb7e74b529657e826368c71cc682caa811ba"}, {"path": "include/at_modem.h", "size": 2793, "hash": "a83d9d4f1513e0b743f677bd835988fad5d0691fb2cf73c4f49932d6283a50f5"}, {"path": "include/at_uart.h", "size": 3601, "hash": "9cc415f32ec766d4c0104b3bc40dccdbdeae5cf1ab9f38e31b03c9da1a7a7767"}, {"path": "include/esp_network.h", "size": 608, "hash": "e350afa76926a12c19ed6d7818ecdef41c171de5b5f5f3a3bf60a2c8a7e78285"}, {"path": "include/http.h", "size": 1133, "hash": "d6995e40d1443c275a83b77b48e22f720b61feb22630195e3f083159c54712ed"}, {"path": "include/http_client.h", "size": 4993, "hash": "9be04439477bc394a775fea1fefd2ef3ef99e22e2ef20b8f35290a2f363d8a2e"}, {"path": "include/mqtt.h", "size": 1556, "hash": "4dacac0ff092e972994f7e0b238f22e15960b269c21f42c1d2ca42a2dc2c251e"}, {"path": "include/network_interface.h", "size": 773, "hash": "591515c2062f739007f93d43e5cd6d05c40fd8d59c3ab79c5cad00c5d450c390"}, {"path": "include/tcp.h", "size": 847, "hash": "421f8770ef573a552e220119e5484ec366c9305c3760a9958a254bb321710bd0"}, {"path": "include/udp.h", "size": 591, "hash": "f2fe916e25c853854f8692fe0f569128d2a31bd39c286179352b90bc6a6fedd0"}, {"path": "include/web_socket.h", "size": 1764, "hash": "c613ac43f4986ac344a2f8c56bbe07651f908da9b116c44cbeaa044ab1e78c1e"}, {"path": "src/at_modem.cc", "size": 6707, "hash": "2b7301616c6a99db225ba879873d2f827a9cd69a368d9cd22601fb47dc02a0eb"}, {"path": "src/at_uart.cc", "size": 13682, "hash": "e352a2b0625ec50b71450fd609d9e653a9ea9bf940d98226fe15669d917c4af3"}, {"path": "src/http_client.cc", "size": 23359, "hash": "70449b0f4b254fd84ecb96775732eac4ccaa746ffb31edeade9d27cbe9c71bfc"}, {"path": "src/web_socket.cc", "size": 13587, "hash": "76c3b4e9c0500468d697aa3304b3bc044b4502138705e51fe4d3de811c52b892"}, {"path": "src/ec801e/ec801e_at_modem.cc", "size": 2088, "hash": "31c98894ca6328d74ad06655403b634a6d4d9e7ed5f99a8bdacbb506f8fb5ec2"}, {"path": "src/ec801e/ec801e_at_modem.h", "size": 855, "hash": "b0f117ae9759594e89ee460daf4ae820b86bcaa4804373e735f5b6cee9a1c69c"}, {"path": "src/ec801e/ec801e_mqtt.cc", "size": 10168, "hash": "b016bb7f2befd6d12e9b673890b5010d158d662c0a78b5b3a6ce88a8dbd2f80f"}, {"path": "src/ec801e/ec801e_mqtt.h", "size": 1251, "hash": "b90a1e5fb8fd894067e68f675a8325686bfabe6929fac576c6248153197a49d5"}, {"path": "src/ec801e/ec801e_ssl.cc", "size": 6355, "hash": "401d606065e88e32c1f9e85980970aa3fe844d8fb106e757311ebab27d9623b1"}, {"path": "src/ec801e/ec801e_ssl.h", "size": 885, "hash": "b235f570334190508f331a4981f6de44b5910353c580ca79f184ff3cc523f815"}, {"path": "src/ec801e/ec801e_tcp.cc", "size": 6200, "hash": "dc95373d0300942df3aadf6d1c881472df5de2f42e6d1beff22d1ce57a371c3c"}, {"path": "src/ec801e/ec801e_tcp.h", "size": 903, "hash": "2e364fec4990a1749e1e1644c80d1b35facb675a16e1b5567bb872b080b01a23"}, {"path": "src/ec801e/ec801e_udp.cc", "size": 5480, "hash": "3b0b760718649ac3c467aee5d45978c824b9c821f820ff4980446a5e34845e17"}, {"path": "src/ec801e/ec801e_udp.h", "size": 885, "hash": "83d0d81e35722239af796411db30b634270fdf70b37960c250e731f2975830bd"}, {"path": "src/esp/esp_mqtt.cc", "size": 4853, "hash": "da93823e12958a7e7e3885ddaa8ad6f543bc206f71fed5527886faf8a2a7ac8e"}, {"path": "src/esp/esp_mqtt.h", "size": 1128, "hash": "b3b237331234f315f264f9a5fa6d73faf27212db336b95792839da8fb4163c1f"}, {"path": "src/esp/esp_network.cc", "size": 897, "hash": "c6aada5d37c8a3ce8efb24b5777e8f9355510a9adf305d22a8cfb53e9e2bba3a"}, {"path": "src/esp/esp_ssl.cc", "size": 3596, "hash": "9d150a088981026191d1c028ec0e334bee78d02aefe6717dcae471aef74dd6a7"}, {"path": "src/esp/esp_ssl.h", "size": 619, "hash": "854bb0368457d7b3e5a610310334d34b220eda1012152537319ac956ef2e0de0"}, {"path": "src/esp/esp_tcp.cc", "size": 3362, "hash": "fd43ef920c446b7d699af26bff51fdef0e5ae98bec185c71c509c6439fbb76dc"}, {"path": "src/esp/esp_tcp.h", "size": 582, "hash": "f54121eb4cf6caa1a41f7a051a95f80a9323f72cb1eaa739dfd4440ebcca45e0"}, {"path": "src/esp/esp_udp.cc", "size": 2836, "hash": "967ff5e7faa91a4da414670d7f3715d44368814296ff8cbdb1a586eddc170950"}, {"path": "src/esp/esp_udp.h", "size": 572, "hash": "1a5fc98f94fb22eb482428040123f7e62edb59d732aaebee7c60cf3d71e68778"}, {"path": "src/ml307/ml307_at_modem.cc", "size": 3624, "hash": "dfaf39ccac17cd2c3b2c99e68cc4af82c26875652a6fa8fa6bf2c927bc28a46d"}, {"path": "src/ml307/ml307_at_modem.h", "size": 1067, "hash": "19625dae82994b584a08d3301aee1c720814dab999409edf7790192935321653"}, {"path": "src/ml307/ml307_http.cc", "size": 12799, "hash": "4bbddc82d3c28c3b94f1ed2d462e3f720cb7eea38940cd5c481a37ac6ef7205d"}, {"path": "src/ml307/ml307_http.h", "size": 2137, "hash": "90a6750a12dfa921dd2519ff8c30ddcfe1a354c5869f58174734bbd9dda8063f"}, {"path": "src/ml307/ml307_mqtt.cc", "size": 8124, "hash": "415f361e546d5b58862301c9d1dc2ebb05d0beb62913e1c42fb77fbcec28bb72"}, {"path": "src/ml307/ml307_mqtt.h", "size": 1160, "hash": "fe33fcd23a2652b09156df1b682de83d8f1df439e43215966d2bd15450a33205"}, {"path": "src/ml307/ml307_ssl.cc", "size": 672, "hash": "46fa9b489192a9330ef7d016dacd707054c141d47d588744de5e50ca4f452c3a"}, {"path": "src/ml307/ml307_ssl.h", "size": 303, "hash": "53011a89188012a4d43ce7cddecc668d5396a5f6cccd9ab88b2151a244cde183"}, {"path": "src/ml307/ml307_tcp.cc", "size": 7279, "hash": "dde2b415dc01c2b9ae5934f524e5d36b39952b1b20697e8449984b2d4513335f"}, {"path": "src/ml307/ml307_tcp.h", "size": 959, "hash": "6803164c015ae55e03863031387af6fe87bc01d8e5e7de9d1b1bc79b13aa20b0"}, {"path": "src/ml307/ml307_udp.cc", "size": 5806, "hash": "1c4542a8d7a0ccd6e38f7cec742cb2db34a037481b2f71c255b5cd5d13e530f8"}, {"path": "src/ml307/ml307_udp.h", "size": 869, "hash": "d03f6d1f5c7c5e1bab9a05c4725ec77ad42fe507574fa3bb8e58be540da23d5f"}]} \ No newline at end of file +{"version": "1.0", "algorithm": "sha256", "created_at": "2025-09-11T23:24:56.501437+00:00", "files": [{"path": ".gitignore", "size": 28, "hash": "8bf6950f6c102e34e53b8db85f1f21d9056304fa2c7a977dd01dd6b71c945541"}, {"path": "CMakeLists.txt", "size": 864, "hash": "c40bc7f3b9d14f785f095f3f42f5cc97a7f2c24635ba16910e4404c57f7b6b47"}, {"path": "LICENSE", "size": 11357, "hash": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4"}, {"path": "README.md", "size": 11314, "hash": "86ad4a899e8bb31b381478bda53d4c0a26c9b8fdf6ac3465c7fc87a0476f9db3"}, {"path": "idf_component.yml", "size": 238, "hash": "409d5729c6ac5da8f0d210ba4ab9fd3ad2aad896473c6c6ceb4babf71ddd1711"}, {"path": "include/at_modem.h", "size": 2793, "hash": "a83d9d4f1513e0b743f677bd835988fad5d0691fb2cf73c4f49932d6283a50f5"}, {"path": "include/at_uart.h", "size": 3601, "hash": "9cc415f32ec766d4c0104b3bc40dccdbdeae5cf1ab9f38e31b03c9da1a7a7767"}, {"path": "include/esp_network.h", "size": 608, "hash": "e350afa76926a12c19ed6d7818ecdef41c171de5b5f5f3a3bf60a2c8a7e78285"}, {"path": "include/http.h", "size": 1133, "hash": "d6995e40d1443c275a83b77b48e22f720b61feb22630195e3f083159c54712ed"}, {"path": "include/http_client.h", "size": 4993, "hash": "9be04439477bc394a775fea1fefd2ef3ef99e22e2ef20b8f35290a2f363d8a2e"}, {"path": "include/mqtt.h", "size": 1556, "hash": "4dacac0ff092e972994f7e0b238f22e15960b269c21f42c1d2ca42a2dc2c251e"}, {"path": "include/network_interface.h", "size": 773, "hash": "591515c2062f739007f93d43e5cd6d05c40fd8d59c3ab79c5cad00c5d450c390"}, {"path": "include/tcp.h", "size": 847, "hash": "421f8770ef573a552e220119e5484ec366c9305c3760a9958a254bb321710bd0"}, {"path": "include/udp.h", "size": 591, "hash": "f2fe916e25c853854f8692fe0f569128d2a31bd39c286179352b90bc6a6fedd0"}, {"path": "include/web_socket.h", "size": 1814, "hash": "04df1d16f147b23603ffa90fdbc8e60f0497231ae3374c1499f050ca8cf35c10"}, {"path": "src/at_modem.cc", "size": 6707, "hash": "2b7301616c6a99db225ba879873d2f827a9cd69a368d9cd22601fb47dc02a0eb"}, {"path": "src/at_uart.cc", "size": 13682, "hash": "e352a2b0625ec50b71450fd609d9e653a9ea9bf940d98226fe15669d917c4af3"}, {"path": "src/http_client.cc", "size": 23249, "hash": "9c310c3d393041f0d86f7a4d2b3ef7afb659816d7ec4b00a1e9d328e3399882e"}, {"path": "src/web_socket.cc", "size": 13709, "hash": "10002bbd377954cdb6a372a19c4b44c4f631bbdc405660d9775abc7a7e2d02fe"}, {"path": "src/ec801e/ec801e_at_modem.cc", "size": 2088, "hash": "31c98894ca6328d74ad06655403b634a6d4d9e7ed5f99a8bdacbb506f8fb5ec2"}, {"path": "src/ec801e/ec801e_at_modem.h", "size": 855, "hash": "b0f117ae9759594e89ee460daf4ae820b86bcaa4804373e735f5b6cee9a1c69c"}, {"path": "src/ec801e/ec801e_mqtt.cc", "size": 10168, "hash": "b016bb7f2befd6d12e9b673890b5010d158d662c0a78b5b3a6ce88a8dbd2f80f"}, {"path": "src/ec801e/ec801e_mqtt.h", "size": 1251, "hash": "b90a1e5fb8fd894067e68f675a8325686bfabe6929fac576c6248153197a49d5"}, {"path": "src/ec801e/ec801e_ssl.cc", "size": 6355, "hash": "401d606065e88e32c1f9e85980970aa3fe844d8fb106e757311ebab27d9623b1"}, {"path": "src/ec801e/ec801e_ssl.h", "size": 885, "hash": "b235f570334190508f331a4981f6de44b5910353c580ca79f184ff3cc523f815"}, {"path": "src/ec801e/ec801e_tcp.cc", "size": 6200, "hash": "dc95373d0300942df3aadf6d1c881472df5de2f42e6d1beff22d1ce57a371c3c"}, {"path": "src/ec801e/ec801e_tcp.h", "size": 903, "hash": "2e364fec4990a1749e1e1644c80d1b35facb675a16e1b5567bb872b080b01a23"}, {"path": "src/ec801e/ec801e_udp.cc", "size": 5480, "hash": "3b0b760718649ac3c467aee5d45978c824b9c821f820ff4980446a5e34845e17"}, {"path": "src/ec801e/ec801e_udp.h", "size": 885, "hash": "83d0d81e35722239af796411db30b634270fdf70b37960c250e731f2975830bd"}, {"path": "src/esp/esp_mqtt.cc", "size": 4853, "hash": "da93823e12958a7e7e3885ddaa8ad6f543bc206f71fed5527886faf8a2a7ac8e"}, {"path": "src/esp/esp_mqtt.h", "size": 1128, "hash": "b3b237331234f315f264f9a5fa6d73faf27212db336b95792839da8fb4163c1f"}, {"path": "src/esp/esp_network.cc", "size": 897, "hash": "c6aada5d37c8a3ce8efb24b5777e8f9355510a9adf305d22a8cfb53e9e2bba3a"}, {"path": "src/esp/esp_ssl.cc", "size": 3596, "hash": "9d150a088981026191d1c028ec0e334bee78d02aefe6717dcae471aef74dd6a7"}, {"path": "src/esp/esp_ssl.h", "size": 619, "hash": "854bb0368457d7b3e5a610310334d34b220eda1012152537319ac956ef2e0de0"}, {"path": "src/esp/esp_tcp.cc", "size": 3362, "hash": "fd43ef920c446b7d699af26bff51fdef0e5ae98bec185c71c509c6439fbb76dc"}, {"path": "src/esp/esp_tcp.h", "size": 582, "hash": "f54121eb4cf6caa1a41f7a051a95f80a9323f72cb1eaa739dfd4440ebcca45e0"}, {"path": "src/esp/esp_udp.cc", "size": 2836, "hash": "967ff5e7faa91a4da414670d7f3715d44368814296ff8cbdb1a586eddc170950"}, {"path": "src/esp/esp_udp.h", "size": 572, "hash": "1a5fc98f94fb22eb482428040123f7e62edb59d732aaebee7c60cf3d71e68778"}, {"path": "src/ml307/ml307_at_modem.cc", "size": 3624, "hash": "dfaf39ccac17cd2c3b2c99e68cc4af82c26875652a6fa8fa6bf2c927bc28a46d"}, {"path": "src/ml307/ml307_at_modem.h", "size": 1067, "hash": "19625dae82994b584a08d3301aee1c720814dab999409edf7790192935321653"}, {"path": "src/ml307/ml307_http.cc", "size": 12799, "hash": "4bbddc82d3c28c3b94f1ed2d462e3f720cb7eea38940cd5c481a37ac6ef7205d"}, {"path": "src/ml307/ml307_http.h", "size": 2137, "hash": "90a6750a12dfa921dd2519ff8c30ddcfe1a354c5869f58174734bbd9dda8063f"}, {"path": "src/ml307/ml307_mqtt.cc", "size": 8124, "hash": "415f361e546d5b58862301c9d1dc2ebb05d0beb62913e1c42fb77fbcec28bb72"}, {"path": "src/ml307/ml307_mqtt.h", "size": 1160, "hash": "fe33fcd23a2652b09156df1b682de83d8f1df439e43215966d2bd15450a33205"}, {"path": "src/ml307/ml307_ssl.cc", "size": 672, "hash": "46fa9b489192a9330ef7d016dacd707054c141d47d588744de5e50ca4f452c3a"}, {"path": "src/ml307/ml307_ssl.h", "size": 303, "hash": "53011a89188012a4d43ce7cddecc668d5396a5f6cccd9ab88b2151a244cde183"}, {"path": "src/ml307/ml307_tcp.cc", "size": 7279, "hash": "dde2b415dc01c2b9ae5934f524e5d36b39952b1b20697e8449984b2d4513335f"}, {"path": "src/ml307/ml307_tcp.h", "size": 959, "hash": "6803164c015ae55e03863031387af6fe87bc01d8e5e7de9d1b1bc79b13aa20b0"}, {"path": "src/ml307/ml307_udp.cc", "size": 5806, "hash": "1c4542a8d7a0ccd6e38f7cec742cb2db34a037481b2f71c255b5cd5d13e530f8"}, {"path": "src/ml307/ml307_udp.h", "size": 869, "hash": "d03f6d1f5c7c5e1bab9a05c4725ec77ad42fe507574fa3bb8e58be540da23d5f"}]} \ No newline at end of file diff --git a/managed_components/78__esp-ml307/idf_component.yml b/managed_components/78__esp-ml307/idf_component.yml index 8649642..04f325e 100644 --- a/managed_components/78__esp-ml307/idf_component.yml +++ b/managed_components/78__esp-ml307/idf_component.yml @@ -8,4 +8,4 @@ files: license: MIT repository: https://github.com/78/esp-ml307 url: https://github.com/78/esp-ml307 -version: 3.3.0 +version: 3.3.3 diff --git a/managed_components/78__esp-ml307/include/web_socket.h b/managed_components/78__esp-ml307/include/web_socket.h index ab85f7e..910ec53 100644 --- a/managed_components/78__esp-ml307/include/web_socket.h +++ b/managed_components/78__esp-ml307/include/web_socket.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -40,8 +41,10 @@ private: std::string receive_buffer_; bool handshake_completed_ = false; bool connected_ = false; + + // Mutex for sending data and replying pong + std::mutex send_mutex_; - // FreeRTOS 事件组用于同步握手 EventGroupHandle_t handshake_event_group_; static const EventBits_t HANDSHAKE_SUCCESS_BIT = BIT0; static const EventBits_t HANDSHAKE_FAILED_BIT = BIT1; diff --git a/managed_components/78__esp-ml307/src/http_client.cc b/managed_components/78__esp-ml307/src/http_client.cc index a13d96f..6cd0136 100644 --- a/managed_components/78__esp-ml307/src/http_client.cc +++ b/managed_components/78__esp-ml307/src/http_client.cc @@ -233,7 +233,7 @@ void HttpClient::Close() { void HttpClient::OnTcpData(const std::string& data) { std::lock_guard lock(mutex_); - // 检查 body_chunks_ 大小,如果超过 8KB 且 heap 小于 32KB 则阻塞 + // 检查 body_chunks_ 大小,如果超过 8KB { std::unique_lock read_lock(read_mutex_); write_cv_.wait(read_lock, [this, size=data.size()] { @@ -241,8 +241,7 @@ void HttpClient::OnTcpData(const std::string& data) { for (const auto& chunk : body_chunks_) { total_size += chunk.data.size(); } - size_t free_heap = esp_get_free_heap_size(); - return total_size < MAX_BODY_CHUNKS_SIZE || !connected_ || free_heap >= 32768; + return total_size < MAX_BODY_CHUNKS_SIZE || !connected_; }); } diff --git a/managed_components/78__esp-ml307/src/web_socket.cc b/managed_components/78__esp-ml307/src/web_socket.cc index fdbc39e..6900d0e 100644 --- a/managed_components/78__esp-ml307/src/web_socket.cc +++ b/managed_components/78__esp-ml307/src/web_socket.cc @@ -246,6 +246,7 @@ bool WebSocket::Send(const void* data, size_t len, bool binary, bool fin) { continuation_ = !fin; // 发送帧 + std::lock_guard lock(send_mutex_); return tcp_->Send(frame) >= 0; } @@ -381,11 +382,11 @@ void WebSocket::OnTcpData(const std::string& data) { } break; case 0x9: // Ping - // 发送 Pong - SendControlFrame(0xA, payload.data(), payload_length); + std::thread([this, payload, payload_length]() { + SendControlFrame(0xA, payload.data(), payload_length); + }).detach(); break; case 0xA: // Pong - // 可以在这里处理 Pong break; default: ESP_LOGE(TAG, "Unknown opcode: %d", opcode); @@ -432,5 +433,6 @@ bool WebSocket::SendControlFrame(uint8_t opcode, const void* data, size_t len) { } // 发送帧 + std::lock_guard lock(send_mutex_); return tcp_->Send(frame) >= 0; } \ No newline at end of file diff --git a/managed_components/78__xiaozhi-fonts/.component_hash b/managed_components/78__xiaozhi-fonts/.component_hash index dedbb22..c380817 100644 --- a/managed_components/78__xiaozhi-fonts/.component_hash +++ b/managed_components/78__xiaozhi-fonts/.component_hash @@ -1 +1 @@ -d9cc3aad735638e558cee514103b25d2cb60afc78ef53709ffeea443b4d1c835 \ No newline at end of file +677fa98425b8c20f3db336c81b5abdf0445ea0adf2ce40b28940daaa84c92dcb \ No newline at end of file diff --git a/managed_components/78__xiaozhi-fonts/CHECKSUMS.json b/managed_components/78__xiaozhi-fonts/CHECKSUMS.json index d96df4d..321bc0a 100644 --- a/managed_components/78__xiaozhi-fonts/CHECKSUMS.json +++ b/managed_components/78__xiaozhi-fonts/CHECKSUMS.json @@ -1 +1 @@ -{"version": "1.0", "algorithm": "sha256", "created_at": "2025-08-29T00:52:30.337473+00:00", "files": [{"path": ".gitignore", "size": 38, "hash": "840e8199b90dbbf802bece3a062cee45d7c1a437a905ab05cad9960c47c094fb"}, {"path": "AlibabaPuHuiTi-3-55-Regular.ttf", "size": 8532824, "hash": "be33bc8d45ced30fa5c542f6f056565baf85003d4e079522110d76016f8a04e2"}, {"path": "CMakeLists.txt", "size": 381, "hash": "b1402d6b49caa4d0b6bd3c86ac8cefcf11d017d4f675d1185f0e9ac57bff39c3"}, {"path": "LVGLImage.py", "size": 46186, "hash": "87c7ddbbf3670dd7fe0646f30e3d17dea5edf283a77cca25d36daf957c6e8f6f"}, {"path": "README.md", "size": 16, "hash": "76f667ed8e02be248fc03ead3117a809fa74b1a0b95ba3bdbb7abc54cb540f7e"}, {"path": "font_awesome.py", "size": 8488, "hash": "a2d4ad343c77004c37dcc5104067608f5418caf448abc35149f9a5ebf9405a2b"}, {"path": "font_emoji.py", "size": 4105, "hash": "e0d954ebd6d0029d66e3cf7ff40021648293cf7c734c62336d79722f0c8ba80f"}, {"path": "generate_emoji.py", "size": 1332, "hash": "9dced51c1dfac39a57febba169f159bd2411aea7eea20d0ff1ac1d0ad354c0d1"}, {"path": "generate_fonts.ipynb", "size": 60424, "hash": "650380812967db09ed37456657008be0eb0841a10834f5751090f8eb578cb55c"}, {"path": "generate_icons.py", "size": 998, "hash": "0bd84078f1e496617886843306c0b7cf3835f14b1f52a903a8a1dfa96aa566ff"}, {"path": "idf_component.yml", "size": 276, "hash": "37a8afbc4b8935d303de7bc23923f88cde1f316ec194e4602ae6d6e0d6d79206"}, {"path": "include/cbin_font.h", "size": 353, "hash": "750da4e2d07d252c219539322dd314ceaaa04ae4bb80d7dd5194a7ccc73e77db"}, {"path": "include/font_awesome.h", "size": 6954, "hash": "4ad8327b4ae7cc16e7259e05987451ceb037fc8d44fc4f94b24fe49fce51edc9"}, {"path": "include/font_emoji.h", "size": 233, "hash": "881b3e6772f16f1a59af7066af58463d7e6edf3da669da68590cf5a32d2f55b2"}, {"path": "include/font_puhui.h", "size": 0, "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {"path": "src/cbin_font.c", "size": 3254, "hash": "e7e33aecba5847c268c6e43a39532e6624c05362f311adc63efbdeccdb911a30"}, {"path": "src/font_awesome.c", "size": 4990, "hash": "b417980a2e109910eac331e377cbddbb1ff6dc12c058e5570bf2849212821868"}, {"path": "src/font_awesome_14_1.c", "size": 39528, "hash": "365d81d57784312da37f65f0f04bca438a89b1386bac2653dd5dc284a4e5ac0a"}, {"path": "src/font_awesome_16_4.c", "size": 118936, "hash": "ab4dd5aa88e5b8c0746c1a46cd008a5dfdd8b35e9759ef632c827150e589dcc4"}, {"path": "src/font_awesome_20_4.c", "size": 178151, "hash": "67eca7fe5be859a55a5b9c2fcded3e0337238de5fbf7f8f26d81787038302b6f"}, {"path": "src/font_awesome_30_1.c", "size": 102935, "hash": "6e63fb16fd0d3301cd5392a39b85693325f375cc6cf6cd624589ae2d2ed8dc0a"}, {"path": "src/font_awesome_30_4.c", "size": 354345, "hash": "5990d7354d7a4a0bd9f01d56c16f58aa601e132238b8b61679ff43af6fe5b943"}, {"path": "src/font_emoji_32.c", "size": 3087, "hash": "7b6668595b31bf22c05395ae3ba2e867402157356dfa0c54f85c45ca3c3fed67"}, {"path": "src/font_emoji_64.c", "size": 3108, "hash": "5620c01d45ad19e85f8b7f52e33fd0f28d27a4e53cf335b3bdadaa96c77ff5db"}, {"path": "src/font_puhui_14_1.c", "size": 1728877, "hash": "0684c8dbe08fe5ab374037b222fcc1376c28290146828baa67cf353ac465eac1"}, {"path": "src/font_puhui_16_4.c", "size": 5294353, "hash": "2fd48e20c140713a9632f4ff3ac537c16f5e9996d3ad31d89da8311f9e30bed1"}, {"path": "src/font_puhui_20_4.c", "size": 7556405, "hash": "3a23a7d14cf394ab8275c8724ee8928863a0d6f3ba6d23e0775650748e237fa0"}, {"path": "src/font_puhui_30_4.c", "size": 15044367, "hash": "14c3452e9efd55ded088175e0c9d1b12ef73a2daea50787584f6db8008bbd1dd"}, {"path": "src/font_puhui_basic_14_1.c", "size": 171593, "hash": "d0d12e6dc6c1b2e35bcac28dc9025902049fdb972738a3cbf0b8f4ab649faeac"}, {"path": "src/font_puhui_basic_16_4.c", "size": 430888, "hash": "d8900f55ea00ccc190fd25495e58d6d56acbdda129b46faf8dd949420b72da43"}, {"path": "src/font_puhui_basic_20_4.c", "size": 591875, "hash": "a785ac02a784ecc1e021bedd977dbda42e49cd760e3d2d9b473bf6de082e9878"}, {"path": "src/font_puhui_basic_30_4.c", "size": 1141498, "hash": "30087ab743b37a1312601218fd78b5cb352bfc4ad4aaeef277f21656ecdb814c"}, {"path": "src/emoji/emoji_1f602_32.c", "size": 16302, "hash": "b9c62d44b1f4970977e1ff58dcd6953d44ede0d5de9fc1f53fec2e0c04d2e9f9"}, {"path": "src/emoji/emoji_1f602_64.c", "size": 62623, "hash": "10c786e3b574c880436fe7bf18e9a246c104d94eb5503cac741eecdd6525dbf7"}, {"path": "src/emoji/emoji_1f606_32.c", "size": 16302, "hash": "c485ecedb1f6578ddb7b380eccc11539ddf16b75954bffcf0bd4ba8bdbf80f92"}, {"path": "src/emoji/emoji_1f606_64.c", "size": 62623, "hash": "08189e3edbc0b99d949a43b706d8f613615b307ee59979aab6a23e40f17f2784"}, {"path": "src/emoji/emoji_1f609_32.c", "size": 16302, "hash": "2b7f362198e2ffd86d1b329b108acbd4edce36f37c70f0b6cbb114e1118ae71b"}, {"path": "src/emoji/emoji_1f609_64.c", "size": 62623, "hash": "b678c64025328da71cae385f7e8c4c1b8f0127ca3135be7e7d69d22ab87978e3"}, {"path": "src/emoji/emoji_1f60c_32.c", "size": 16302, "hash": "f366b8ecdcc7247586f9a8bea7cd8b7213f9cbe20bc1fa8f759c3fc5aae38e4e"}, {"path": "src/emoji/emoji_1f60c_64.c", "size": 62623, "hash": "c42ec8a50b2e761f61a6c12900d7db13ad30fe3f0b6fbc89e4e21ddde7f62186"}, {"path": "src/emoji/emoji_1f60d_32.c", "size": 16302, "hash": "59a18fc35c36038ae7ac751b41e2414afce9a05b1c6abeedd9c6ff7ed1c6d5c3"}, {"path": "src/emoji/emoji_1f60d_64.c", "size": 62623, "hash": "40c59ca88412416b92cfa837ff627d78c0efdca8066df73cd43552ee326fb6fd"}, {"path": "src/emoji/emoji_1f60e_32.c", "size": 16302, "hash": "7a5696ee15c42d41a0e27f6cd7b97d92654d5214456f477442b9e96adfe90781"}, {"path": "src/emoji/emoji_1f60e_64.c", "size": 62623, "hash": "1b8842f0c32d476ee6e488bb3583d396c6bbe31e9a1f25c6fb0a89d7e4c57d6e"}, {"path": "src/emoji/emoji_1f60f_32.c", "size": 16302, "hash": "6b68ccd714411a2910f431b5038c894e79b0385ed91f095c8827ecf0d5032cd8"}, {"path": "src/emoji/emoji_1f60f_64.c", "size": 62623, "hash": "32a502efd4924c01539a6b5b7b4c21c31fec042074321a05b3f8ad3ebced12e9"}, {"path": "src/emoji/emoji_1f614_32.c", "size": 16302, "hash": "332c44cd73510cbd692df69547bfe0730ffd0b60094be7bee0cdfa01f15585c5"}, {"path": "src/emoji/emoji_1f614_64.c", "size": 62623, "hash": "ccc1ab7e76f5f3f55d21e8ee20121a9c960aa5bbbafa14354c11163c64d6c391"}, {"path": "src/emoji/emoji_1f618_32.c", "size": 16302, "hash": "8d22dbab90650f7280e6c778082d0f20d65354566aaa3d5e224a1ced334f7fe5"}, {"path": "src/emoji/emoji_1f618_64.c", "size": 62623, "hash": "b333f826e27bdc4bf97d5e463f779ca9aa7922555a9ab604284b6f66df3fc0d3"}, {"path": "src/emoji/emoji_1f61c_32.c", "size": 16302, "hash": "7ab9cbe6daca312b50cc1edc5cea28c4424510eaf36ff1d2f6c2a8513281fc20"}, {"path": "src/emoji/emoji_1f61c_64.c", "size": 62623, "hash": "8d1ccf6c8e8f51a2a9d245f4396491f84b1072257373b8777b667fc98b17c804"}, {"path": "src/emoji/emoji_1f620_32.c", "size": 16302, "hash": "20ce10fb4863a75d587662f2732ead059ef8bb56f9da93b4811a3a89c24d862f"}, {"path": "src/emoji/emoji_1f620_64.c", "size": 62623, "hash": "a7619b85538a826dd47e174868dcd39bdc04ec8862488a2d601311f6e01b32d9"}, {"path": "src/emoji/emoji_1f62d_32.c", "size": 16302, "hash": "f2b7d8e4a6a1bea7e731a402e0972f5c037a48e81ce6116f44ad335928c63688"}, {"path": "src/emoji/emoji_1f62d_64.c", "size": 62623, "hash": "8a46034e005bdd3e41ead858bba6f312534ae7839540ed37ff9a78f560f902d6"}, {"path": "src/emoji/emoji_1f62f_32.c", "size": 16302, "hash": "771e9f3216e1df08807934a240fca56d721b32d8f02b46231c2eb010400b05a3"}, {"path": "src/emoji/emoji_1f62f_64.c", "size": 62623, "hash": "dd819e40e094feaf2d8d3dcfd3035a7847806fb14c8d6c24d6189638c5b1c21a"}, {"path": "src/emoji/emoji_1f631_32.c", "size": 16302, "hash": "623384fbe5237a7294eb475b238b3a53d8b72788c6b6efa44360f727d251304c"}, {"path": "src/emoji/emoji_1f631_64.c", "size": 62623, "hash": "a7046375de3ae979d551ff9d9fa894298dad910d1d93509b615c8e07273cd1ff"}, {"path": "src/emoji/emoji_1f633_32.c", "size": 16302, "hash": "9e20c3e8aebf539336e9f9a506672aed8281ccbaf60a5fde34a0f7b38818110d"}, {"path": "src/emoji/emoji_1f633_64.c", "size": 62623, "hash": "91b82b6c527e48a498e2e028e935e59d20a2ba7273498031ec2b36ccaab8cfae"}, {"path": "src/emoji/emoji_1f634_32.c", "size": 16302, "hash": "81e731675ebb7174b6e16ec27f2f5553ed1a377a39c637e72129d697ea02aef9"}, {"path": "src/emoji/emoji_1f634_64.c", "size": 62623, "hash": "339c5784f47421f43f455960fea3b4cfa120af02bd9cbe3168b2c6f55bdad90c"}, {"path": "src/emoji/emoji_1f636_32.c", "size": 16302, "hash": "093f005ba6b2be39c519254b3f625ec6559f7fc93f9fc693f2b3d83e9ffe4bb1"}, {"path": "src/emoji/emoji_1f636_64.c", "size": 62623, "hash": "682666ce6d9dd6af7a1a99f96b59d40751b77142e8a82cdb86a7929ad809c677"}, {"path": "src/emoji/emoji_1f642_32.c", "size": 16302, "hash": "c4884c6ee50238578ffe8bdf618eb7a6e93c7023831cb2b0f336c89e6cf3b151"}, {"path": "src/emoji/emoji_1f642_64.c", "size": 62623, "hash": "1c008371c0696267839e5ef2e0f3ea57138a65de952165c9803635869e601f5a"}, {"path": "src/emoji/emoji_1f644_32.c", "size": 16302, "hash": "62c87defaf2a9adf30cfd454952a139e30cccc6c125e38113498f83788ab7b4e"}, {"path": "src/emoji/emoji_1f644_64.c", "size": 62623, "hash": "871fc7efc9602215c820e957d3238c43f1f9a13a8623a037ad1daad9ddcae66b"}, {"path": "src/emoji/emoji_1f914_32.c", "size": 16302, "hash": "6a989afe74c9bdd948fbbe2ec57a9df2c71f3f0e4c77128fb83f619f1dc47fe6"}, {"path": "src/emoji/emoji_1f914_64.c", "size": 62623, "hash": "99ca33d16011a8c33aa7de369728f6666cee46e61feb9b8b508fffddb089b221"}, {"path": "src/emoji/emoji_1f924_32.c", "size": 16302, "hash": "8ba10bbe7e3c25bd720841f156ab1bbbbacff42101e6efce5e0349d9ad3aa55d"}, {"path": "src/emoji/emoji_1f924_64.c", "size": 62623, "hash": "6aec0af8d1e7f622d1b6ad3a9c572942ad6b3aa62be280b026eb7a7c5b1451cc"}]} \ No newline at end of file +{"version": "1.0", "algorithm": "sha256", "created_at": "2025-09-02T02:55:14.159460+00:00", "files": [{"path": ".gitignore", "size": 38, "hash": "840e8199b90dbbf802bece3a062cee45d7c1a437a905ab05cad9960c47c094fb"}, {"path": "AlibabaPuHuiTi-3-55-Regular.ttf", "size": 8532824, "hash": "be33bc8d45ced30fa5c542f6f056565baf85003d4e079522110d76016f8a04e2"}, {"path": "CMakeLists.txt", "size": 381, "hash": "b1402d6b49caa4d0b6bd3c86ac8cefcf11d017d4f675d1185f0e9ac57bff39c3"}, {"path": "LVGLImage.py", "size": 46186, "hash": "87c7ddbbf3670dd7fe0646f30e3d17dea5edf283a77cca25d36daf957c6e8f6f"}, {"path": "README.md", "size": 16, "hash": "76f667ed8e02be248fc03ead3117a809fa74b1a0b95ba3bdbb7abc54cb540f7e"}, {"path": "font_awesome.py", "size": 8488, "hash": "a2d4ad343c77004c37dcc5104067608f5418caf448abc35149f9a5ebf9405a2b"}, {"path": "font_emoji.py", "size": 4105, "hash": "e0d954ebd6d0029d66e3cf7ff40021648293cf7c734c62336d79722f0c8ba80f"}, {"path": "generate_emoji.py", "size": 1332, "hash": "9dced51c1dfac39a57febba169f159bd2411aea7eea20d0ff1ac1d0ad354c0d1"}, {"path": "generate_fonts.ipynb", "size": 60814, "hash": "5a5ad2b02abc3077abf7ff56845e6a4fb03a96360f5a7ab414072610b50d37a3"}, {"path": "generate_icons.py", "size": 998, "hash": "0bd84078f1e496617886843306c0b7cf3835f14b1f52a903a8a1dfa96aa566ff"}, {"path": "idf_component.yml", "size": 276, "hash": "5ff0125c244a41df4faed9060b9e2cc7ee1a81e323e75d6fd6d26b40619f458e"}, {"path": "include/cbin_font.h", "size": 353, "hash": "750da4e2d07d252c219539322dd314ceaaa04ae4bb80d7dd5194a7ccc73e77db"}, {"path": "include/font_awesome.h", "size": 6954, "hash": "4ad8327b4ae7cc16e7259e05987451ceb037fc8d44fc4f94b24fe49fce51edc9"}, {"path": "include/font_emoji.h", "size": 233, "hash": "881b3e6772f16f1a59af7066af58463d7e6edf3da669da68590cf5a32d2f55b2"}, {"path": "include/font_puhui.h", "size": 0, "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {"path": "src/cbin_font.c", "size": 3254, "hash": "e7e33aecba5847c268c6e43a39532e6624c05362f311adc63efbdeccdb911a30"}, {"path": "src/font_awesome.c", "size": 4990, "hash": "b417980a2e109910eac331e377cbddbb1ff6dc12c058e5570bf2849212821868"}, {"path": "src/font_awesome_14_1.c", "size": 39528, "hash": "365d81d57784312da37f65f0f04bca438a89b1386bac2653dd5dc284a4e5ac0a"}, {"path": "src/font_awesome_16_4.c", "size": 118936, "hash": "ab4dd5aa88e5b8c0746c1a46cd008a5dfdd8b35e9759ef632c827150e589dcc4"}, {"path": "src/font_awesome_20_4.c", "size": 178151, "hash": "67eca7fe5be859a55a5b9c2fcded3e0337238de5fbf7f8f26d81787038302b6f"}, {"path": "src/font_awesome_30_1.c", "size": 102935, "hash": "6e63fb16fd0d3301cd5392a39b85693325f375cc6cf6cd624589ae2d2ed8dc0a"}, {"path": "src/font_awesome_30_4.c", "size": 354345, "hash": "5990d7354d7a4a0bd9f01d56c16f58aa601e132238b8b61679ff43af6fe5b943"}, {"path": "src/font_emoji_32.c", "size": 3087, "hash": "7b6668595b31bf22c05395ae3ba2e867402157356dfa0c54f85c45ca3c3fed67"}, {"path": "src/font_emoji_64.c", "size": 3108, "hash": "5620c01d45ad19e85f8b7f52e33fd0f28d27a4e53cf335b3bdadaa96c77ff5db"}, {"path": "src/font_puhui_14_1.c", "size": 1728877, "hash": "0684c8dbe08fe5ab374037b222fcc1376c28290146828baa67cf353ac465eac1"}, {"path": "src/font_puhui_16_4.c", "size": 5294353, "hash": "2fd48e20c140713a9632f4ff3ac537c16f5e9996d3ad31d89da8311f9e30bed1"}, {"path": "src/font_puhui_20_4.c", "size": 7556405, "hash": "3a23a7d14cf394ab8275c8724ee8928863a0d6f3ba6d23e0775650748e237fa0"}, {"path": "src/font_puhui_30_4.c", "size": 15044367, "hash": "14c3452e9efd55ded088175e0c9d1b12ef73a2daea50787584f6db8008bbd1dd"}, {"path": "src/font_puhui_basic_14_1.c", "size": 181399, "hash": "72036b2503211ccc5ea4ee2708517d42e96aabbf6298e5f492c415613c1d1cb0"}, {"path": "src/font_puhui_basic_16_4.c", "size": 459491, "hash": "260e7c27a68ab9edcf9b6b81e7c6abb9ba64fce2a3b4397c6dc4ffb731c8d847"}, {"path": "src/font_puhui_basic_20_4.c", "size": 637781, "hash": "fc57aac4848990286017d708609600c0f2bb260542047d6030e8f064217b22bf"}, {"path": "src/font_puhui_basic_30_4.c", "size": 1234404, "hash": "262e0efda9e907665aa246720e95434bd9c43170a046053cc339fba853f11b9d"}, {"path": "src/emoji/emoji_1f602_32.c", "size": 16302, "hash": "b9c62d44b1f4970977e1ff58dcd6953d44ede0d5de9fc1f53fec2e0c04d2e9f9"}, {"path": "src/emoji/emoji_1f602_64.c", "size": 62623, "hash": "10c786e3b574c880436fe7bf18e9a246c104d94eb5503cac741eecdd6525dbf7"}, {"path": "src/emoji/emoji_1f606_32.c", "size": 16302, "hash": "c485ecedb1f6578ddb7b380eccc11539ddf16b75954bffcf0bd4ba8bdbf80f92"}, {"path": "src/emoji/emoji_1f606_64.c", "size": 62623, "hash": "08189e3edbc0b99d949a43b706d8f613615b307ee59979aab6a23e40f17f2784"}, {"path": "src/emoji/emoji_1f609_32.c", "size": 16302, "hash": "2b7f362198e2ffd86d1b329b108acbd4edce36f37c70f0b6cbb114e1118ae71b"}, {"path": "src/emoji/emoji_1f609_64.c", "size": 62623, "hash": "b678c64025328da71cae385f7e8c4c1b8f0127ca3135be7e7d69d22ab87978e3"}, {"path": "src/emoji/emoji_1f60c_32.c", "size": 16302, "hash": "f366b8ecdcc7247586f9a8bea7cd8b7213f9cbe20bc1fa8f759c3fc5aae38e4e"}, {"path": "src/emoji/emoji_1f60c_64.c", "size": 62623, "hash": "c42ec8a50b2e761f61a6c12900d7db13ad30fe3f0b6fbc89e4e21ddde7f62186"}, {"path": "src/emoji/emoji_1f60d_32.c", "size": 16302, "hash": "59a18fc35c36038ae7ac751b41e2414afce9a05b1c6abeedd9c6ff7ed1c6d5c3"}, {"path": "src/emoji/emoji_1f60d_64.c", "size": 62623, "hash": "40c59ca88412416b92cfa837ff627d78c0efdca8066df73cd43552ee326fb6fd"}, {"path": "src/emoji/emoji_1f60e_32.c", "size": 16302, "hash": "7a5696ee15c42d41a0e27f6cd7b97d92654d5214456f477442b9e96adfe90781"}, {"path": "src/emoji/emoji_1f60e_64.c", "size": 62623, "hash": "1b8842f0c32d476ee6e488bb3583d396c6bbe31e9a1f25c6fb0a89d7e4c57d6e"}, {"path": "src/emoji/emoji_1f60f_32.c", "size": 16302, "hash": "6b68ccd714411a2910f431b5038c894e79b0385ed91f095c8827ecf0d5032cd8"}, {"path": "src/emoji/emoji_1f60f_64.c", "size": 62623, "hash": "32a502efd4924c01539a6b5b7b4c21c31fec042074321a05b3f8ad3ebced12e9"}, {"path": "src/emoji/emoji_1f614_32.c", "size": 16302, "hash": "332c44cd73510cbd692df69547bfe0730ffd0b60094be7bee0cdfa01f15585c5"}, {"path": "src/emoji/emoji_1f614_64.c", "size": 62623, "hash": "ccc1ab7e76f5f3f55d21e8ee20121a9c960aa5bbbafa14354c11163c64d6c391"}, {"path": "src/emoji/emoji_1f618_32.c", "size": 16302, "hash": "8d22dbab90650f7280e6c778082d0f20d65354566aaa3d5e224a1ced334f7fe5"}, {"path": "src/emoji/emoji_1f618_64.c", "size": 62623, "hash": "b333f826e27bdc4bf97d5e463f779ca9aa7922555a9ab604284b6f66df3fc0d3"}, {"path": "src/emoji/emoji_1f61c_32.c", "size": 16302, "hash": "7ab9cbe6daca312b50cc1edc5cea28c4424510eaf36ff1d2f6c2a8513281fc20"}, {"path": "src/emoji/emoji_1f61c_64.c", "size": 62623, "hash": "8d1ccf6c8e8f51a2a9d245f4396491f84b1072257373b8777b667fc98b17c804"}, {"path": "src/emoji/emoji_1f620_32.c", "size": 16302, "hash": "20ce10fb4863a75d587662f2732ead059ef8bb56f9da93b4811a3a89c24d862f"}, {"path": "src/emoji/emoji_1f620_64.c", "size": 62623, "hash": "a7619b85538a826dd47e174868dcd39bdc04ec8862488a2d601311f6e01b32d9"}, {"path": "src/emoji/emoji_1f62d_32.c", "size": 16302, "hash": "f2b7d8e4a6a1bea7e731a402e0972f5c037a48e81ce6116f44ad335928c63688"}, {"path": "src/emoji/emoji_1f62d_64.c", "size": 62623, "hash": "8a46034e005bdd3e41ead858bba6f312534ae7839540ed37ff9a78f560f902d6"}, {"path": "src/emoji/emoji_1f62f_32.c", "size": 16302, "hash": "771e9f3216e1df08807934a240fca56d721b32d8f02b46231c2eb010400b05a3"}, {"path": "src/emoji/emoji_1f62f_64.c", "size": 62623, "hash": "dd819e40e094feaf2d8d3dcfd3035a7847806fb14c8d6c24d6189638c5b1c21a"}, {"path": "src/emoji/emoji_1f631_32.c", "size": 16302, "hash": "623384fbe5237a7294eb475b238b3a53d8b72788c6b6efa44360f727d251304c"}, {"path": "src/emoji/emoji_1f631_64.c", "size": 62623, "hash": "a7046375de3ae979d551ff9d9fa894298dad910d1d93509b615c8e07273cd1ff"}, {"path": "src/emoji/emoji_1f633_32.c", "size": 16302, "hash": "9e20c3e8aebf539336e9f9a506672aed8281ccbaf60a5fde34a0f7b38818110d"}, {"path": "src/emoji/emoji_1f633_64.c", "size": 62623, "hash": "91b82b6c527e48a498e2e028e935e59d20a2ba7273498031ec2b36ccaab8cfae"}, {"path": "src/emoji/emoji_1f634_32.c", "size": 16302, "hash": "81e731675ebb7174b6e16ec27f2f5553ed1a377a39c637e72129d697ea02aef9"}, {"path": "src/emoji/emoji_1f634_64.c", "size": 62623, "hash": "339c5784f47421f43f455960fea3b4cfa120af02bd9cbe3168b2c6f55bdad90c"}, {"path": "src/emoji/emoji_1f636_32.c", "size": 16302, "hash": "093f005ba6b2be39c519254b3f625ec6559f7fc93f9fc693f2b3d83e9ffe4bb1"}, {"path": "src/emoji/emoji_1f636_64.c", "size": 62623, "hash": "682666ce6d9dd6af7a1a99f96b59d40751b77142e8a82cdb86a7929ad809c677"}, {"path": "src/emoji/emoji_1f642_32.c", "size": 16302, "hash": "c4884c6ee50238578ffe8bdf618eb7a6e93c7023831cb2b0f336c89e6cf3b151"}, {"path": "src/emoji/emoji_1f642_64.c", "size": 62623, "hash": "1c008371c0696267839e5ef2e0f3ea57138a65de952165c9803635869e601f5a"}, {"path": "src/emoji/emoji_1f644_32.c", "size": 16302, "hash": "62c87defaf2a9adf30cfd454952a139e30cccc6c125e38113498f83788ab7b4e"}, {"path": "src/emoji/emoji_1f644_64.c", "size": 62623, "hash": "871fc7efc9602215c820e957d3238c43f1f9a13a8623a037ad1daad9ddcae66b"}, {"path": "src/emoji/emoji_1f914_32.c", "size": 16302, "hash": "6a989afe74c9bdd948fbbe2ec57a9df2c71f3f0e4c77128fb83f619f1dc47fe6"}, {"path": "src/emoji/emoji_1f914_64.c", "size": 62623, "hash": "99ca33d16011a8c33aa7de369728f6666cee46e61feb9b8b508fffddb089b221"}, {"path": "src/emoji/emoji_1f924_32.c", "size": 16302, "hash": "8ba10bbe7e3c25bd720841f156ab1bbbbacff42101e6efce5e0349d9ad3aa55d"}, {"path": "src/emoji/emoji_1f924_64.c", "size": 62623, "hash": "6aec0af8d1e7f622d1b6ad3a9c572942ad6b3aa62be280b026eb7a7c5b1451cc"}]} \ No newline at end of file diff --git a/managed_components/78__xiaozhi-fonts/generate_fonts.ipynb b/managed_components/78__xiaozhi-fonts/generate_fonts.ipynb index 256f5b2..fd49a20 100644 --- a/managed_components/78__xiaozhi-fonts/generate_fonts.ipynb +++ b/managed_components/78__xiaozhi-fonts/generate_fonts.ipynb @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "c3acd714", "metadata": {}, "outputs": [ @@ -95,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "e4ab8eb6", "metadata": {}, "outputs": [ @@ -103,7 +103,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 128815/128815 [00:00<00:00, 363801.76it/s]" + " 0%| | 0/128815 [00:00" + "" ] }, "metadata": {}, @@ -350,9 +357,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAAAeCAYAAADjA+I1AAATxklEQVR4Ae2dUXYcuXJEpXdmN96Df58XYM1i7A+PP+zFjLwAv197DfZ2xn0pXTqUTKBQXU2KIwHnlABkRkZGJtDNJqnRfPzjNj7ssTuwO7A7sDuwO7A7sDuwO7A7sDtwdwd+uTtyB+4O7A7sDuwO7A7sDuwO7A7sDjyyA7/97Zjtt78eYx6JWNF0y/eXR+bcXLsDuwO7A7sDuwO7A7sDuwO7Az9jB/aH6p/x1HfNuwO7A7sDuwO7A7sDuwO7Aw/twP5Q/dB2brLdgd2B3YHdgd2B3YHdgd2Bn7ED+0P1z3jqu+bdgd2B3YHdgd2B3YHdgd2Bh3Zgf6h+aDs32e7A7sDuwO7A7sDuwO7A7sCVDvz6+d8+fPzXf/jA/J4GmnzU9vl//uvJxrw/VL+n03olLR8/fvyG+ddff/1Qbd8ADjafP3++FH9A/13cV3vSiX5knx7J1Wndtj9PB7gLf7bB+w2vsUeOR/UBnuTK9SP1bq7dgd2BtQ7w4fTz//73hz/+5T+f5rWo10fxYZrx+z/+09PDGhtaHfuf1LMTP+jcfSHji8anT58eXnGXqyb5/fffq2m6v/oFbrXO1+iJuenL2bqnTfkTOfkwRR+6+me+91YiZ0gdnumKPu/umZgVXrV0PR3Fo4W4o/8tAWcC74pm+KzRvMSd0WVcneWe6T3TB3V2dcHDMNcKL3w+aofbR9uef6wOcObcD18j7h9179+qW2ffe8EzfI28lc4uDx+4GZ8+vPE/qfdVDB+oP/3d33/R8HX2wzbG5w/VXo6vcU9vDt2bIzgGs2svmLFcOn3aZpfuLF5O54zvDh0tYLrR4ROXsV0NXraMqesuR2oWX/uonbniOy2Jd41+sI48l1zrd84Ybc6zuJlvxil3nUfnVnGjfe19py9tuR5x1jqONMI5wsBV+ToN2pyrtsqh33tT+3D0pmrc7E6a4z3N6M5e5Fqd9LCz66+zvTgTAwd5eGrvK/89+3u03JNnFOP7HjrUYr34XqPmkZYVu9qu6oKH++CoteNnzF43lSO5iNvj/XbA+17vwPc8N9+fatdmd7BiZ3trvframeWoPj60frr99NcPq87i+GD7vcav//HvHz7wDMbTh+o8lHyT6N4cbfCA79ksDwbf0Do+AxJvzAxvnNzuu9k3upqjw2qrb3zEdvGdTQ5mc6eNuhhyWgO97V4IiZeHmKP+mDs1ajOnfHXuXkDGyJF3Ad2jNxb1j/w1d+47HfrRgYYZRqxzatbmbH3uR3PmW42xZ5UTe+WbaRz5kqPm+Jn2q+fBa2L1Pnp2+Tq6t6dw5Rkmp3lmZymG/K5zPlNXrUGeaq97cTUXe3zUx5y1VY669z3iyF5zVvxr7q2NHKMzEkMPZhg4sj/E8Ry9pxO3x/ftwOr7xluozNdNvU++z4zu4Rl993JwpxmpbTXv75/++RnKT6f96fCzcXFxRUNNwV9HORy3ZvG/Kf/jVjTLb8bILogYMLdLpmk4gzniy2DxR9xyqiU5XM98YuoML8+V0XHM6prhR+cz09jVDX7W0y7GHqivm0ecYuV45Gwvr3Ie9eQe/nvrHtU0OpeRXc0jP/rwjYZxo3MdxVX7LM/MV3nO7tE9e1b57MMqPnGjOyCn/jonB+vqH+3hHZ2XMckt1j6pi9mHuDrEVbt7YsDk6GzpN9/RrGZijzgrf1eLPOkb8R7VbT40wpFa9c1m+c/GzTi378ftwNF90c9cx+iOV9zK3vsOpw85zV/vc4evmNuH1z8OnxDXcc40GEqcOlP7Cz0ErGi6YfgOYvgGYBIF1HkWW7Hs4SNmdYBvi/tKYH62ua789+Ql5uro9M90dr7Opq6ZDwz5s44OX/sLHtxs1Lrq3ljsPK810H6Vf6QR+1EfRnXNOGu/K8eoprN2ebszx3dUn3GdXrVYJ3OHO8pzpKHLc++Z2I8zs/nvzXlU36oWdPjYc/ZnRtXi+co3mrvajR3llyv92qzjSP8KDs5OX+Z1bX73xPlU34i34uTq5hFHh9VGzcSNemPf1ZGzHDmrQd7Ej3IQ3+FHfU7OXI/wq/yzWq2r1pr5XXc65M74XI/8XV7izMWcQ57057rT1vV+dFZyZc66HmGwd/mN73SM8NbJ7GPeLkaMs9hv6lz5AKvY2wyXNVVe9t3IGo2RB65v9ECwoumG+WX2o/FbgqdfSYFh/ZZDXaOc+HluhY8gl+xXef3VS+2bPe3EdTV3ti622syvfdQvcNSKLmPuqb3Wqe7bVVTCpZlfc5HjHm2jxGp8JKc97Oq2x/Z7pOs92/11I7V45vSRuh95PvDV82HP81a/Ivcsr9wPe3TlTCsH+2pb4c+YribPcfV+gk/O1DCy21P8HSbPPflGmtQMdsSZPGpmPjvgX4lbwZzNDV7ePDv7OeIjhidj2BNHPWmXwz4yM+SYve6SRzw50g5Xnq/85mB2qIG9fGkTV+fMZ1zVAYZaql0u4lbHDJt61ZK2muPMe6t54ZsN/GJnuOpTp/zq7+5A9jx5wHa5O7zn0X3dTM7RuuMEO9KAj/NndDmv6nn6hH8jfjFuQp98zN24NXzqz5gjrsTKyzwa9CL9xnR4sPUB39Ulj3ozrsN3+bARN8LLmf7Mm5xi0+ZajcmDT3vGws9Tx0xnxbKXW1/dH9n1n53RWfWb29rqfJSj4zRm5hNTZ/If9RP/DGNN4lbnqsW9mtw7w4tvNIxDj0NtXZx4sc6zPCPfLM/MZ85HzOZhvmdcjR/lpGdnNZ3RMjqTqgccTx3eg6pxhdfYvF9qJ77jVIdz1cM+OZJbbI1l3+Hk6XxyMVe+9I3WchM7Gh1vZzP+Xp/xOVMzfN0ZdP3ocltjh89cdW1czZ048nW8nQ7iRvZZri6HNvuTmnI94wWnv6uh4xbPPBvGVpy6Z7HVN+KqOPejHuvP+QV25afCSTBYv+AN3KwH1hrw5Z9Uv9m/U+13BText1peDr4z8OG7G3C3i/ASeLOAY4z8T874A1w+cJMDTd13UoTiU4N5ZvhI9/wd0KjW20E9weHLmslTY+p+JQ+8jIy1/oy/Z1375T5roSY1WJ+z9ntyj2LQ0D0jPHb0MDzbGo+v2tiPBnz6ay+s3ZxwHPXB83L2LN07ax/pmtnRm9pybS0Zr43cdahDTPWf2cvx2nlmmjwf6kKP+1lM57Mvne+sTQ3JqTZ89m3Em3EjzKpdLu4MuXlYowGf/lU+cOrPc4fH90v9yakfjLj0Jy/YjqPiR3vi5fC1Yu3Wj52RNVQ+NBjvTLy1VHzuwZwZI7z21X6IX83d4c01680q/yqu00GsGtQkn/tRnDhmsXKl7+x6xqUWMZn7KI+xR7gV/yO5VvK9BcaafP0yXx3P/6TeVaJZvEJnly99XB4e3nDqG+UKV9Vi47S7hx++zOHFRY844sB0eDlzhiNj08caHkatGS3EpZ01eJ7UZB+eiMofcnQYbOjLmg2vObTnXGtz39WrL+M7XPrvWWdfVuLtv1h0dr3CX+2zXFmbtWNjnXt50dGdA/7kYs+Q48vu///Efu/o8sDVcVZb7nN9r5bVOHta8Wjg4YyuDGshT96V2XnVfHJU+5U9nNZe7yW85pzd0Sv5M5Yc5PPBhzafxJ5ZEz8a1jfyj+zEwYtmzpDe3XtHjIMjaye3tc9qSFzqleuKtuQ7WqPx3n4ecVvLUR+OeK76ZzrUBsY1+ep+poGzytgZ9shH3hy5z3Vi3sva10Lq8XWSttdcn9WQPWXN42e89N2r+elXITfCF+PWmPZXPgJvF2rqByeG+cwwd427Fdn+msc8Z3J0MfDzdENNnU9bx6mPeeYf+cyrNnvgPvlz3fERA58j9x1enHPNmfFimNWctitr8qAvxz051H8U2+XL3LO13MyO2qf0iWE2Nm332I0fnelRfcalTns3mxOPhlmekU9+a6iz2qr9KK7iR3t5mK3Hc3FfY6t9phHfPSN1wVFzwikm+UdaEuO6i9d3ZYb3qO4ZptM1w6u1xtmL1FIxR7xymMP56I6IG83ypjaxI+6qXTwzvu6O4BvxaZe3zpWv+nNPnhz60rayVlPNnbFyd3Picm2/tR3lgduzqbF1L6fzCnenPW1Z/xGfedWVsfiyFrHOcmfuXCeXWPKw9km8vLNZ/DPmxF//uEeDMamX3OjAZt+e9bBY0cR/qHgjGY6rn9j97uEm8PRPBohhpAbXzPkTpCwA+z35kuPKGm1q73isofMRh79yYP9y3t9GWeu31vHO3CN9t8v01NeaPxnBcK6Ze8SXce9hbf3U8BaaZzlmPnqlVvvm3rna3deZPDWmYlb3cnV3cZVjBWeeFWzFHPW14us+e5V1HvHymji6V3IfcVVN7OF3zPKgmdemeoyZzeqaYd7K12mx9rN9ow8M+uVgDR95eM5yyvMaM9rQ3PWgs61oOFOjfaEntS/wjDR0eLiopb6GRhwrtRxhVnXIk/0mVm21dvE5g817lb571ubPfq3woGNF7wqGfGfvgD2rvfB9aKWGq5irGuyN7xeexb26fpGgOxzFmvRMEgXS7Hviu1zwjLhS6whTOY1JO7GdHczIbjwXklEvmP5Hzmo5kwt9R73BD2704sbvCwYNR3yPrPkql9qv8hzFezZHuJnfu1QxI3vFuafmM3fEuPc8P6K/o/rs76hn3Z035jVfC9Y8el3WesRjR1fuxfoe7T5nahr1oOLgXtWVsXVNPvKqq+pe0dNx1nMxT7XX2Pe09/zOajau1tLZtY36rL9ysa+67DEx1dfFP8pWc63o4M5xf1e1vsXr/agf1jk7EziO/DWP+NU7IN7X7Nn3AeLtZ9Wyur+qgTzek7P6O41/sXkKqyAPr9pnexsM9z3xcKunxsPZPeJWc4745ekO2phR7fiNH2Fm9iN+Y8Gh70wuuenPbKxyioNX7hnvka/r91HMe/XTD/tzpLH2jjhe2PWRr9rdk4fXXeWr+yM9M78aXvusZnmsR0zVi19M9R3tjYN7xF85zLeKJ948lWu2z3Oe4fQd6fEM5XU2Ho3dfdJ/dvY9exaHZnSoHQ2sicV+diRXjT16H0w8OuiXj+fn3ln7CJ+c3dp466+Ykb3i6l7etGtb5aTGM6PjN9dZrjN5K7bTkRjvgTj3ick1OJ4jXMasrO/pjTFqr3nss7jqP7uXr4vz9TnDdHHg6eUjNN6rgf6po9N42nYT8vz3R27BT+tbgU9/t4T9bIi7NeUZRkzygKnPM/i2ILb65TjKnzxqSZvrs/yZ31htWav8zLP8iSNeLrmNxc66G2IztsOlTV5sI27staYRVm55nTsO6zRmNoutOjKm02Rc4s6s4RyNLt8Im3Z7kjbWXY9m9hq/UmunGVuXu8NmTuuoZ6LdePZpSw7r6/If+ZKTNTrSVvOwt0fkS33YjU8ObDmMS1uuqz+5EsdaLaMc6sPPA1c+lW913+XtbGqvvOrCLoZ5NMSM/K9pT61X8tRzrbz6751r/+TH7pPcWYtn18XYe31gc2h3xp8xFa+PGZ8P8T41Ju3i5cFXR/pY+3RYY+HFX3PrZz6ro4udacgcHc66kjfXKzXIAb99SVvyubbuUUynlVjjak/Nx4zPRzxzxoiH0xjWDGO+7Po/5UueJ+TK31/+SpmxqxqogdzGZk3Qav+a4su0oumGeb71JrERkB4NE6cg42dz4mte41bypz61pM21nDmnBnE5y2fMkR5xyTFbV37iZ5rkP9KROc1hj9PHemQ3ruIzJnWoLfEzjsSxHmHR52MO98zGMae9rms+9/Zc7tXZ+Dqnnuoz16q94qgJjtnoclgT8Tmwo3c0rKXGgVeL3M5H2OpPnuob5Zlptha1q2s0i3cGN+PveGf4EV/HkxpnnGrt5uSt/qole09cxuZZ6Kt87o1z/5Zzrene3Pbe+Efxyldne2ZeZ+x1jLDG5Fzj8WHLsxafZ5w5Z1hia5x8da5ajnKs4Gvu5Kz53c94jQcDfsYPVs4OJ4ecdSZmJYc4czl3Oc1hbrHOs5jMU3Hpq1zsK14Mcw7taavr1P4N78oH2CAz16qGrPGbvF851RUplv9DxY8E3YTs8QN2gF9p8KuNesTYfCi7+ketkO924V78+gs+7PIyr3Lza+aO079GNNKzYu94jYP/9oJyuzzDmYNa6Q1jlM9aMp8xK/3PHMlBTnvOeoUL3B4vO0Af69lWVPYa7Aw/uteV8+zee2McmnJ0d6DTQlzl4m7Naso8rIlf6RvYo36BOTO6ms7Ei608dS/ue8z2tzvT1NNp7mwZs9dfOrDa492vN+zAb387TvbbX48xj0SsaLrlm/7rH4/Us7neVwf8Qlw/oM1U+sWzi/ELcX6R7nCVf6bj6AtJ5bpnr+57YonxDZn17AMJeag1+2MM89HwA0nHYexKv8Xu+WUHVu6C5/Ay+qXlte6vr5nMqK5RDZ0WsJ09eVfXnaYaC+ZR+Sr3lf171HSlnh273gHuJM/odbPOtJG7A186sD9U/8A3YfQh694vpitffFYw2XLe0EY6E/ca67NaOw1o54PyUQ1H/o672h7BUTn3/s/XgUfc20dV/T3v5Gv14bV4H9XzzXO9A36YZmZ8z3t8vZrN8J46sD9Uv6fT+Am1/AhvZj9CDT/h1dsl7w68+w6svrfsbwTOHaUfqvkB02qPz2XY6J+1A/tD9c968rvu3YHdgd2B3YEftgP7g/b4aPcH6XFvtudaB/Z/qHitfzt6d2B3YHdgd2B3YHdgd2B3YHfgw192D3YHdgd2B3YHdgd2B3YHdgd2B3YHrnXg/wC03Wbz1AjTPwAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuYAAAAeCAYAAABgx9sOAAAUXUlEQVR4Ae2dW5ZcN3JFSS3NxnPwb3sATQ3G/rD8YQ+G7AG4f+0x2NORcxe5S6eCAVzcm1mskgysdQkgHidOHCCzsh6t/vjbbXzYYyuwFdgKbAW2AluBrcBWYCuwFXhTBX5+0+q7+FZgK7AV2ApsBbYCW4GtwFbgkQr8+vdjtF//chzzyIgVTrd6Pz2y5sbaCmwFtgJbga3AVmArsBXYCmwFrimwP5hf021nbQW2AluBrcBWYCuwFdgKbAUeqsD+YP5QOTfYVmArsBXYCmwFtgJbga3AVuCaAvuD+TXddtZWYCuwFdgKbAW2AluBrcBW4KEK7A/mD5Vzg20FtgJbga3AVmArsBXYCry1Ar98+fcPH//tnz4wv6cBJx+5ffmf/3qyMe8P5u/ptF6Jy8ePH18g//LLLx+q7UXAwebLly935R/Av4n7Xk060o/U6ZFYHddt++MowF34ow3eb3iNPWI88rX6KC3BSaxcP6LnjbEV2AqcU4APuF/+978//Pav//k0n8t+vWg+kDM+//Wfnx7W2ODq2P+5RJX4k87dF0O+aHz69OnhHXe1apHPnz9X03R/7xe41T5fQxNro8vZvqei/IGcfCBDh67/me+9tcgZ0odnusLPu3smZwVXLp2mo3y4kHf0f1vBmYC7whk8e7QueWd4kQcGz9k8a45m+c16PqOlvXbagMOw1gqufYtLPtg+7Pf48ynAeXM/fJ25v/LaeUt1zr5/E8/wNfKW3PnQzvj04Qf/5xK/Nc2H8k//8I9fOXyb/cCO8fmDuZfjW97Tm0P3RumbCLNrL5i5XDp92maX7my8mM6Z3x06XIjpRhefcZnb9eBly5y67mokZ+OrjtqZa3zHJeNdw59YR55LrvU7Z44251nezDfDFLvOo3OrcaN91b7jl7ZcjzBrH0ccwRzFgFXxOg7anCu3iqHfe1N1OHpTNW92J63xnmZ4pxa5licadnb9dVaLMzlgUIenal/xr+yvcLlSZ5Tj+x485GK/+M70jL6zYa1ZzI/w2d+Z3jpe4GTPVT/8jNlrr2JYByzy9ni/CviaqXfgLc/N97iq2uwO1tjZ3l7vfe3MalQfH3w/3X4K7QdeZ+P4cPxW45e//ceHDzyD8fTBPA8l3yS6N1gFHuA9m8XB4Btah2dCxpszizdPbPfd7BtdrdHFaqtvfOR2+Z1NDGZrp80vNGLaA9p2L4SMF4ecI32snRy1WVO8OncvIHPEyLsA79Ebi/xH/lo79x0P/fCAwyzGWOfkrM3Z/tyP5qy3mqNmFRN7xZtxHPkSo9b4/7RfPQ9eE6v30bPL19FVTcHKM0xM68zO0hjqu875TF+1B3Gqve6Nq7XY46M/5uytYpzZVxzrVwzfZ47slXeNf829+lBjdM7GoOMsBozUhjyeo68L5O3xtgqsvvf8CJb5uqn3yfeq0T08w+8qBneakdxW637+9C/PofyU3J9SPxsXF/dwqCX405rDcRPrt1vQb7emWb4YI7tB5BBzu2SahjMxR3iZbPwRtphySQzXM58xdQaX557RYcz6msWPzmfGseub+JmmXY4ayK+bR5jGivHIWS3vxTzS5Ar+1b5HPY3OZWSX88gPP3yjYd7oXEd51T6rM/NVnLN7eM+eVTx1WI3PuNEdEFN/nRODdfWP9uCOzsucxDZWneTF7ENeHcZVu3tyiMnR2fR33PR186i+nI9m+wZ7xqvWHtUVByzHCHeGYS4zHMFIrukfrcU/mzfC2/Y/twJH90U/cx2jO17jVvbedzB9qGn9ep+7+Bpz+wD82+ET5DrMGQdTyZNncv+ODwkrnG4xfBcyfAOwiATqPMutsezBI2d1EN829w3A+mxzXfGv1CXn3tHxn/HsfJ1NXjMfMdTPPrr4qi/xxM1G7avuzcXO81oD7vfijzhiP9Jh1NcMs+pdMUY9nbWL2505vqP+zOv4ysU+mbu4ozpHHLo6V89EPc7M1r9a86i/VS7w8FFz9mdG5eL5ijeau97NHdUXK/3a7CP568v4XFMvn6N4c7ta+pzB6nrUn3OtO+M0wq0YiV/XI4wal3t6Ji/1TT+c5VDnjHMtB3EzZ1SD3C5+pHNi5noUv4o/69W+7JM5a+e64yF25ud65O/q1todTvLJdcet0350VmJlzboexWDv6pvf8RjFqxezj3W7HGOcjX3R58qHYMneZrDsqeKy70b2aI44YL3gA8AKp1vMz7Mf0d8KPP1qjBjWP3LIa1QTP8+t8VHIXfZ7cf0VUNVNTTtyXc+drcutNutrH+lFHL3Cy5wrvdc+5X27ilK4a+bXbdS4wm1UWI6PxFTDrm81Vu8Rr/ds99ee9OKZoyN9P/J8wKvnw57nR/2q3rO8536o0T1nWjHYV9sKfuZ0PXmOq/eT+MRMDiO7muIfxSQOa+qcGXl3Mm/Ul30Tu8LLvs/yEn8lbyUme1tdi5vn75mMMMjhyRz25KFX2sVQR89YjNlrN3GMp0bawc/zFR87OTnkoA9/2jI211lvxIMYeun4WS8xZ+vKO2OTr1zSlrGsz7w/Wxe82cBv7Cyu+uQpvvy7O5CaJw6xXe0u3vPovvYm5mjdYRI74oCP82d0Ne/l8/Rdwg34u3Ej+uRj7sZN8Kk/c46wMlZc5tFAi/Sb08UTWx/iu77EkW/mdfFdPWzkjeLFTH/WTUxj0+ZajomDT3vmgs9Tx4xnjWUvtr66P7LrPzvDs/K3tr3V+ahGh2nOzGdMnal/pCf+WYw9Gbc6Vy7u5eTeGVx8o2EefBxy6/KMN9Z5Vmfkm9WZ+az5iNk6zFfGvfmjmmh2ltMZLqMzqXyI46nDe1A5znBHWBXbvTXc56yP2WH/1Ol4Wd/ZvJwTI7GNqbnsuzhxOp9YzBUvfaO12OSORofb2cy/6jM/Z3oGrzuDTo+utj128Vmrrs2rtTOOeh1ux4O8kX1Wq6uhTX2SU65nuMTp73rosI1nng1za5y8Z7nVN8Kqce5HGuvP+bvYlZ9OJ8Bg/R1uxM00sNcIX/6J+Q/775j7ncWN7K2X7wffXfjwHRJxt4vwfeDNQhxj5H9yxj/E5QM2NfI77wh/WuKTg3Vm8Zl/1OvtoJ5rZM/UqfrU/Uqdrr79Z/6Vdf3u1T017YVZDmlL+5Xaoxw4dM8oHjtcGJ5tzcdXbexHAzz9VYvUwHz1cV9nz8vZe+DeWXvNX9nDN7nl2l4SRxu165CHMdV/Zi/Ga9eZcfJ86As+7mc5nU9dOt9ZmxwSU2741G2Em3mjmFW7WNwZavOwhgM+/at4xImR95D1maEGeXfg4nuu/sTUT4xx6WdtHrGua8zKnnwx7FP9sn+wsoeKDQfzncm3lxqfe2LOjFG89lU9jF+t3cVba6bNKv5qXMeDXDnISTz3ozzjmI0VK31n1zMsuRiTtY/qmHsUt+J/JNZKvR8RY0++fpnvHc//ucR7gWb5Ep1dvvRxeXh4w6lvlCtYlYvCaXcPPnhZw4sLH+PII6aLFzNnMDI3fazBYdSe4UJe2lkTz5Oc1OEJqPwjRheDDX7Zs+m1hvaca2/uu371ZX4Xl/4r69RlJV/9jYVnpxX+ap/Vyt7sHRvr3IsLj+4c8CcWe4YYX3e//4v96ujqgNVhVlvuc32Vy2qemtZ4OPBwRvcMe6FO3pXZedV6YlT7PXsw7b3eS3CtObuj99TPXGpQzwcf3Hwy9mhtT/Jnz3A+yq/+WZ41as7Rnjxw6Zt7gP5X75l5YKR+cKCGz4xTFyPWPdxmNasPDlf1rFh1by/UeMsx4yE3YlzDte5n/DmrzJ3FHvmomyP3uc6Y97L2tZB8fJ2k7TXXZzmkpqx5/JyYvqucn34lcwP8btyEaX/1ZODtQk39xBnDfGZYu+bdmmx/3WSdMzW6HPB5uiGnzqetw9THPPOPfNaVmxq4T/xcd3jkgOfIfRdvnHOtmfnGMMs5bfesqQO/HFdqyP8ot6uXtWdrsZkdVaf0GcNsbtqu2M0fnelRf+YlT7WbzRkPh1mdkU98e6iz3Kr9KK/Gj/biMNuP5+K+5lb7jCO+KyN5gVFrgmlM4o+4ZIzrLl/fPTO4V/uudel7hDWr0/U2i7duzVPP5FBjjnDFsIYzvZHbna0xs1nc5Gb8CLtyN555xmWEp13cOtfeqj/3yUU++M8OOdXaiZN16zrjcq3e2o7qgOvZ1Ny6F9N5Bbvyrvvs/wjPuvLKXHzZi7HOYtf67hPLWOqw9jGWeWUY/xx74k9ZrnAwJ/lSGx7Y1O2ZD4sVTvyPP28gw3Hvp36/A7kRPP3TBXIYycE1c/4kKxvAfqVeYtyzhpvcOxx76Hzk4a8Y2L+e98sse31pHe+sPeJ3u0xPutb6iUgM55q1R3iZ9x7W9k8PP4LzrMbMh1ZyVTf3ztXuvs7UqTk1ZnUvVncXVzFW4qyzEltjjnSt8XWfWmWfR7i8Jo7uldhHWJUTe/Adszpw5rUpH3Nms7xmMW/ho4fKDe1m/cOz5mBTv7PaoyWDmg7WcqPWWUxxXmOGG5w7DTrbCoczPaoLmlRdwBlx6OLBopf6OhxhrPRyFLPKQ5zUm1y51d6Nz5nYvFfpu7K2fuq1ggOPFb4rMdQ7ewfUrGrhe9lKD/fG3MtBbXy/8Cyu8vpZgO5wJGvRM0UkiNhX8rta4IywkusopmKak3ZyOzsxI7v5XEhGvWD6HznL5Uwt+B1pg5+40Ysbvy8YOBzhPbLne7Hkfi/OUb5ncxQ383uXaszIXuPc0/OZO2Lee54foe+oP/UdadbdeXNe87Vgz6PXZe3HeOzwyr2xvke7z5meRhrUOLBXeWXuaA3eSFN88IZbpzd2cu2t9r7SU+XV1bJOx6Hmv5e9d+AsZ/NqH51d20hn/RWLfeWlxuRUX5f/KFuttcKDO8drYJXr6H4/qocVHPucnQk4R/5ay/jVO2C8r9mz7yXkq2flsrq/lwN1vCdn+Xccf1I8idUgD6/aZ3sFBvtKPtjyqflgdo9xqzVH+OJ0B23OqHf85o9iZvYjfHOJg9+ZWmKjz2ysYhoHrtgz3CNfp/dRznv1o4f6HHGs2pHHC7s+4lW7e+rwuqt4dX/EZ+aXw2uf1ayO/RhT+eI3pvqO9uaBPcKvGNZbjSffOhVrts9znsXpO+LjGYrrbD4cu/uk/+zse/ZKXnIzzxmeDGMqHn0TY//0wZp8c2vObJ9YNQ7M1QEPOPt4B9w7ax/FH9Uz3/5r/Mhe4+pe3LRrW8WkxzOjw7fWWawzdWtsxyNjvAfGuc+YXBPHcxSXOSvrK9qYI/daR52Nq/6ze/G6PF+fs5guj3i0fATHqxzQTx4dx9O2G5Hnv4W5JT+tbw0+/Z0M+9kw7ibKcxg5iUNMfZ6Dbwtyq1+Mo/qJI5e0uT6Ln/XN1Za9is88q59x5IsltrnYWXfD2Mzt4tImLrYRNvba0yhWbHGdOwz7NGc2G1t5ZE7HybyMO7MGczS6eqPYtKtJ2lh3Gs3sNX+l144ztq52F5s17aOeiXbz2actMeyvq3/kS0zW8EhbrcNejaiX/LCbnxjYcpiXtlxXf2JlHGu5jGrIDz8PWPlUvNV9V7ezyb3iygu7McyjYczIf8WeHLr8R9Y8qtXV72zg8Dgqrv6rcz0D8bH7JLY8mD3/Lkct9RGbQ7sz/syp8fqY8fmQ71Nz0m68OPjqSB9rny7WXHDx19r6mc/y6HJnHLJGF2dfiZvrlR7EAF9d0pZ4ru17lNNxJde8qqn1mPH5GM+cOcaDaQ5rhjlfd/2/4iXOU+TK33N/g8zcVQ70QG1zsydgtX8r8XVa4XSLeb71FlEIQI+GhZOQ+bM542td81bqJz+5pM21mDknB+NyFs+cIz7GJcZsXfHJn3ES/4hH1rSGGqeP9chuXo3PnOQht4yfYWQc61Es/Hys4Z7ZPOa013Wt517NxV6dza9z8qk+a63aaxw9gTEbXQ17Ij8HdviOhr3UPOLlIrbzUWz1J071jerMONuL3OU1mo13Jm6G3+HO4kd4HU5ynGHKtZsTt/orl9SevMzNs9BX8dyb5/4Rc+VaMR9Z86hWrT3ae376H4UrXp3VwLrO2OsYxZqTc83Hhy3vi/F5T7LmLJbcmidenSuXoxor8bV2Ytb67me45hND/AyfWDG7ODHErDM5KzWMs5ZzV9Ma1jbWeZaTdWpc+ioW+xpvDHMO7Wmr6+T+AnflQ3CAWWuVQ/b4ou43THlFieX/8edHkm5E9vgTKsCvVvgVSz1ibD60Xf0jKcS7Xbjvfg0HHnZxmVex+ZV5h+mfRI34rNg7XPPAv72g3C7PYOagV7RhjOrZS9YzZ0X/rJEY1FRz1itYxO3xvQLoWM+2RqXWxM7iR/e6Yp7de2/Mg1OO7g50XMirWNytWU9ZhzX5K7oRe6QXMYx8rVQuybnr8yvC+r+dLuvZv0dWnLr/PfLHrzyjI706zp3tx3fw/iuuavz+O/kTMfz178fN/PqX45hHRqxwutWb/ldZHslnY70vBfxiXj/kzVj6BbjL8QtofqHv4ir+jMfRF5KKdWUv7yu55PiGzHr2oYY6+aGCeMaKRsSRP8LAz1jF+hq9/60KrNwFz6HmdvvXur++ZrKmvEY9dFyI7eyJu7ruONVcYlbqEcMHwnwvqVgrODXnNffvjc9r9rqxXyrAveYZvfZeRu/dVuBYgf3B/FijP2zE6IPa1S/IK198VmJSUN7QRjwz7jXWZ7l2HODOB4ijHo78HXa1PQKjYu79H0+BR9zbR3X9WneSHv3Ak1x573rkB6DX0vK1cFOLvX5bBbyfzIzXei28bZe7+lsosP+U5S1U3zW3AluBrcBWYCvwzhXYf8oyPiB/W8o3ivtD+VinN/Os/NnI/lOWNzueXXgrsBXYCmwFtgJbgZMK7J/8jwXbH8bH2mzPfQrsn5jfp9/O3gpsBbYCW4GtwFZgK7AV2Ao8RIGfHoKyQbYCW4GtwFZgK7AV2ApsBbYCW4G7FPg/ivwLBT6LEE8AAAAASUVORK5CYII=", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -367,9 +374,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAAAeCAYAAADjA+I1AAAYXklEQVR4Ae2dTbIdSVKFn8pqBTCjp6UlsIZu1RLoEcwYlDYAZl0YrKBk1swY0QuAgVS9hWYJ0hQYAUsQ+WXV98qfyyMyIu99f1KEWSoiI9yPHz/hkTfvlar7xcet3ay2FFgKLAWWAkuBpcBSYCmwFFgKnFbg69Oey3EpsBRYCiwFlgJLgaXAUmApcE0Fvv/jMdr3vz62uabFCKct3lfXjLmwlgJLgaXAUmApsBRYCiwFlgJfogLrpfpL3PWV81JgKbAUWAosBZYCS4GlwFUVWC/VV5VzgS0FlgJLgaXAUmApsBRYCnyJCqyX6i9x11fOS4GlwFJgKbAUWAosBZYCV1VgvVRfVc4FthS4q8CHDx/uTqy7pcBSYCmwFFgKLAW6Cnz7h7+/efEPv7l5/e73XbuHXPzwv/918/KHv955wQ2OzL17/x/7HP16qX7IHXmEWLzUvXz58ia+3L1+/frmxYsXp9m8e/fuIv/Tge/R8VJNKmpv3rz5RPvKbmROrBHbZfN5K8D5e0qNZ0t8vlTceN58++231VJz7ggTHY5smuBhgbPFZbsWrnirXwosBeYU4OX0/f/8583H3/148+ZP/z7nfI/Wr/7173b0t3/1jzdctJdv/mbj+G/7mD/W/6TerRSf5+CHH37YP3i++eab2wT50Hj16tXt/eyg9UHGi2lrjRhwgM9Mix92M37afvfddw67/aWaVODERhNyns27wutpW9k/9hx8+UKHDjn/3tpj867i80JIHjPnxpez0Rqs4lZzcsmaVrbOcY6wf//+vVOf9O4JdiOc4UGOsaHP27dv49SpMecGzvCNzy7B4Er80Xi9vSAWMcz5CJfY4HFFPal1+Igj19V/PgpQk9QLNc5eUwNnzuNjKuI5p05HniHac0ZivT9EDvwKbHPMC/c3f/YXN69uHvZ/Uo/4H/7vv29++M3f3rx6+Zc7LXrmfdlm8val2ocuAtIoGATPDzQfTj5UsLXAGNPywxYM8X6yuPvnrP1d75u9yOFPq/6/bCz87Md966GtbdSlKsKRX3yrGH5oGAeN0Budqoa92rOunnl/si8+EVMMPgDULPtw3/tg6B2s1hp1FXlUMas58j7b0CbnUeUMZx8c1XqOHzHx6z2Y4NDD9KUzxmCPclPXag3blrbWWTwX5opP6wVIv3y2M6+ndu8LkecCfXNDS+a1yev53rPX0jjbe89esfexXlw727N3tFku1vjZuNkP/eACD7mQLxdr1mv2e6x79gFul+4FOD6TqB/ri3zNn/XeuQGDZ4Z7iSZgoWPvWfJY2q24vyhA/bDXPGdsj71vPp9yPTF/ab2To/VOfT9U42X15Z9+tf8KTEz+qUVsvNg+Vnv94z/fcLXa/lLtSy0Hm01gc+LDMX74WEzMccWNjEHiZoLFg4Qrfri37ME8stdXbO+r3mKInLSLuTlHj0/MFV8/PKJdhem6Onpv74s4eFw+kInHQzVj5g8wcf3w6uWAbXxQoyuN/NRFXrGHV8bFV67YetgcxzhiEV+s1guctlXfqhds4QMHOGWuFRZzkXO2OdJE+7g/xFZT16u+ZxPxzKnCYM6azOstndD/S2oze1jVa9YK/dgT6ivuU7ar7ivt4cceWq++lOFPLcV+v0l/xDPLmBj40XPPWavOWcUlQd/Gz/P53rjoETXk3vqln9HLZ2KOFfVhrZVf9ruPe/Lm+cHeMXYPYyzm2V+u1nMJG5rPRfcQzVizDiLuGj8dBaj5WPePxYy68Xzk55PnEJ6X1JPPjVYtH+UOD9rMs0DMt7/9p33IL8H8U5CXf/6r/Z5fqWfaJRxiHOK+/+5f4tQn453bJhb/N+UftwO+fS7/0nrzWm1C7b7bQ9ypZr9t7m6Lz0jT/ghb7vBnXLXeWmVv7luhfmR8tuGfOZkXfW7Y4hOb9lm3yDHax3HOW58qtn7uqfexh1/rqvbJeDmniHnJWG0u2SM59jQ5w7HayxGerZxa+9Kal3O1bs75zOtDr1+1r9GuNzYOWLn11rLt7D3Y8OZCz3wxj81I8wyN2kdM6j7XPjhguhbPk3MRA/to0xrji86t/crY4KoDPZd7Dj/G8ox8GGvX0gSO+MZWzcV1MEcu81OXHCdixjF2cKga8+hja3HtYehLD0cwZp8p4ptjxFzjpUBWwHpp1ZnnlD42z06ejzYzY+Jzfqh5L7i1+GV7fD/J4Xc/ftz+PXX/CiQzpme4xUFXzpo2kXt5Bo/4/LzON4hdiApEoSSQ+55vtuXeRKu1POfGfyJ2MFQMpuI4mOxD8mB9tB3lPYLT4q9mFUaVQzWnb2/N+Ghuw57cYsv7jv3RYcMm7gv3Gcf4OV6MPTMGjys2OBA7z0ebo3Frr5k/0qGFXWGqR9St8jenvDY7r39Vb3KhHlpNv7yv2MPFHNGfcZWXcSode2tyynGIBRa+D9HI3Zhn4l3iG+Ohg5d6w21Gh8zF/WW+dbXOQO+5A285xhycM4+qrrQnL9axbdlZP70aFo/eelUz8sfXXFi3wbXCFUO7Vi+3qu5bPsyTL7HpqyZXbPKV7SMHNJQ7foxbMcDBPuMTW+2MZYxsy32ln37Ejnwq+16u2X6Wh7Wf85FftW6Mak9jLmLQz+SgX9amtVfyYb3X3Jtoo2+Vi3ajNYA9OPCg54p5V3WgjfZyvFOTIy+wkj3BAVfiGRue8nLuk2fPCKfN5uv4V1Eb2J22Bdr/Og8bxg/Z5LVtVhnWvyrbEi/X4yR/hTHKH1uuTfAIMT32nxlsG3XH17+uIUbObSv2oTkB9a+wjK8tenJFvfDjrymZQx99ernjQ4uxuTcvxjT3j5yu0cCHY+R/KS41RD4tTHOdiYOe+OW80YtaUONcFzMxHtOWfSC/WC/sNXmRc692ZnijI7joJib37BlXdVZm8Eds3Svjj/hoY+3kc+H6TB9rBU5ozzXaKi7kZH7ioCm6sxZjum7v2Wc/Mo8qln6sGbOVg/uuj32LE5zFROsWb3nBGRt654xx1Fv7R3ZwuqSpb8YQN9Yj414enhnsxOX8oBl4Ect46mjtgsHFnslBW3pw3QPutWcv87PV/cUn7hU+sbFmbYkXa8Zcos8oD7iiAblX+bMGVhUjxmMMt5b+szlYX+SpnuBXe+U+qFHm5T3rchzJR7+ZGqg0RBMw5Ckufbbnnn/+RR9rIvocjTMm9j0OrKvx9n7N7W3TT91vFyYG+9s6b+65bUT3te1g5KX9fhOgux6dwNg4db8hbxuwfxsWdyuICHE7xg6suM6Yuaoxny/sq7yMTe5bEd7xY26kya9lDy6X8bGPcWMMOcQ5x639UevoC37UCwx5ysM58atebNfk4L19a9712T7vN/7GILfq6sUwd/yqhnZZr8ouzlmDUc+4ztg9admYU67Xo/scx3vywzc2c+/lp1/k6d5Xmpl7Faeyl0O11ovjWo975HB27D7Qn2nypL9WU7NZzBku1Eq1JzEHeVDLuVkHmSO4R3tGXO2IQQOnOjNywN6r4iOGNhUH1qIv95WdOrImv51k+CPyatkE89uh9RZ53C7+PMg8mVabbHvEo+WXcbwnZ+LHfTVGVS8VftRP3JFev9ZZnOVBzIof861YrRjgoI36gFG1Fq62rldaVtjWS0sTcT1T4Ntaubje6uURsVq2zFMvXCMNHblu28ivwrfG7UGLw5EG5noHeYQTv1RvQQ9b65vYoWMw8FvBtslh9pdh/g9VsNsK5heDMNoS3u+2zQ2z7SE424bdGvDNjW+j9GCIh4G5whcOrDEHxlEOBjiy2zZ0/xbHt/bYiJH18dsrHGIO+KkPNrGBiy3cyZOmrfllLGyqGMzHhmbRl1y4J2djRfuZfY1+M+MqLv7mXGG55/Amb/KKTZ0yNn4xf3ywjXsgZsTLY/ZI7fIa95k7/Lha8xXG0Rx4eX96PmphfUdb6laOahvXZ8bg0Ko46q/NDO6MLbHZZ/Iib/bKuREc6yfWxYhfz8a9V1/rFm405l2LONfmEnWhfozpnrR4RE7VGJ3Bjs91sMBFR9aNpT/30d752Fu3YsW1mTH+1gN84GqPxuyDWsOJ9aqRT372Ywe2e1z5MTdbT3CueDCPLnBhfNQ83+Z3ZA/PbGt9HOV4hD2zXvHAn7PMlfOXI/keNfQjR3zAuqRZoxWO2keunvlqbyMP6yXvRbQZHctjFAtuo7ZwmLEd5XzEQX04j+rbO7sjcYdeqkeAejYQRrDeYYoPRpLzwFs84lN0YEV711p9PiA8RMBBUPoYwzH48WEDhvYZL8aFG/x7NuCoh4eCfOUSdWKMPVwY0+OrDsQWQx7aRhzXmIOfeTpPT5ycd1xnjC92Nu6JxxVbS4dsF33Ojo84Z1z1dx4t0DM3dY7zxMp6c88VdcFXXcBnf6kJ8+dMMK72gXhV/bTqivley3y1ZV4+ztmDSQ6xRa6sec9YDtkn+o+OxWjxzvsnrs8M9uiSBg6NOPFLB/PbLxdD0GqTcyC3PDcEuBmhMfsFD86xOukv79nzoL99xnU+9j6LiGmucIs1Hu2Pxsas6lG9jHOEFdfBRTd4ccbZU87e2Rohb3B8jlr3xIQ7a9XZjZzgkG3AQUv4VtzURy0iXm/csreOxO1hsDZjxz6pecQVo8Up2l46JlaLB9jWA5rHmsv3PR7u9TXyibUtd2IztsbUr8fpPtda8dEB3Wzowfl4yDbLIeoNd+65OJvqDX9yPrO/zZ/oN2H2te2Q3/kV3JutMLvr2GlDP9OIueV0568it6Q/mRNzOxj7mvcjfeWzCdjEUQ94tFqFGW1762qV8dUCPbzA6XElpngxPv7kQVNP9xd7MHsNf22yf/RTqzh3yZi45BybMbJe0SaP1ezIF7scL2O17t0vda10In7FW14Ze3Ze/2pP5dPLz9oxB/DUzhqs+mhvHLBy660ZJ/t4D29iZ/2Yw/fSFvMyH/X3PsfI83LMdmD3dM/23quX3MDIMbFRu6iNeylWr7+WhjnGUd7m19Im8zqyN756ea8WsSYz9hFXfKs6Yz+Yp1bOtIqbOGDDK2O739rZq0+2d72Fh72Yahf7iGeMuO640kdcOYz2La76z/LQL59R49DnZgzrxr3SLmM5by921M81erVRv6qPvMDBpoUntjyjb85FW3swe3xiTHkQhxhc2V/cXm+8W5uRf2rxs/EZDvBUP/kCxxxr6oZWt22EE//8Y0um+S10A9xinG/+pL4RnP7mshXpHjh+a5AP3yziN6PIkF+WzsSLGGfHfquUe4VDPmheNfzICxtysDHPfvtNUf/4V6/a9no1i9jR3m97xG/lsBXc/ktPjN2yjdhPYUxeaEgOfCO9r+Y+9WK09kBOcI3Ne3vXPBPe5z5/887rM/dgkdtPz54Zzzlb4xx5eQ6wU/NLa9EzAibaGkNc47BuY85fP7VzLfbu3dHeRx/H24PfYfNvk+BKDPTjLFPnRw3u8jqyvc91uMsfTupOTHKh9bTdDdIf6ECLOqAj+Owz62f2An+uqrXmK9s8Bzef/3nNPYq6ZJvqvvV8qHj6/EfnWG/gEj+ejRgL+6gj2GDxGRGfFaPnOmLPjEd5iEmOcCIv+JvfUZ2RH7ZZI3HP9GoT9erhWAet/dXXfQZ/pM3WgHWZtUBP9v8h2qUcrHf5ci/mGf5fA0CBAJKLSeA8PxLIIkHseOBGfFs2YLaw4EoBsT7KtypIeVccKvtoZ2HZx7VrjD1IYPkAmImFbU8b8FnnYLVyZZ01dKpq5hp53hcG3H1o+bC5j1iem7hfs3F4Sataa76yZY6cL+ERccVBO8dx/VpjsVtxWrV5jfjUPo0XMXlw77iKrQ9notcuqTlrivhyqWK5FnnKK+vZetZhR05c4lWxmPOHkyNeLf84z/MJPHgRl968uZ951olbPfPYW3JrfZbo+5R6deA8zzT9so/1EfdX2/glJPr5mRPnGINR8UJjMF0zVq7DjHf2fpSH+NhzUSPUAlxHaoK8aCO2xjrqZ7XxTLtnLXzXxW/ZOa/9aA1YR7yQEsN78Lg/eub55eTITn5Vb8yzHODps0esKs7o3FcWSD4wJMnlgRgFxIfk6NmYs4Unnxjf5BEgXxYZ89GnxRv8Kj/5qkv0xwcOXFVjnditdXxYIy5Xbubc88cHO/jB9cjWGBwWYqJPr4HZ4qcfMdUYXHm7PtsTj3wqTWaxnoI9mqjPEZ+sHfpzsPNlXeZ574nDGch4rF+rmVN1Nq4VA5xeHOtYG+N6DsgfmzNNP7AzfgvPePksyifWtHN5j1rYcZ595AuhGHGtGvs8rNaY87yJC3bEh2NVTy28o3k+C46ePWgOn1jrzOF3po4jVuZ3xCXaowV6ecnFe3v3lTpyjt66ipjVWP9cez6P83yFkefwreK3YmV/78ljpqlRrEP5z2LNxM22FY9oAxc0Uo8jbmjJ1XrpjNgz41lteA7gE7nneObiecrrs/fiVX7+WNWzyX5wx56zSC6jz7aM4/0ZDviyn3yZZ08v5QDe124OwBwAN9cim3n4AKg/vQXIfGwIKXniYOc9dtwjOG02/u4U/nDjKnzm8uFwc+VlPkd6WExHfFn31xhjQdecmTNmSGMvPnLBjsZBOYqV/WO8uBbHxga7hU+u8IADupj72cPLgw+cEX6R61Mcs7e0lnaZs2dB3VmPtaq9H07VmjbUhx8izkU+Z/dHLDhysffxWcG6dRnjy5W91d45+2qtioM/MYxT6ctZJl8u8NVU7eQGBlphrw05WMcVNus04zPGHv7Eyj4xprkSizEY/PDAfkQ7MOFFy8+lfXLgD/jQYl7GJ3/HxvFeaObxVUtyxC/np/1oH/n0fOBzaawe/pk16yL7qnWejzXCmprGMfsetbcmsYn5EyPeZy7uI/Ng5jOO7pwHei72Un4Rl7isEw97ccDPdtjGBl7UghjexxzlgD1cubcxh98lbZRHjEGeaMcF18g32jlGD2wid9cu6Y+0ATvrw76gI9wdww2OaEHjPu+fObJH7oNz8JipAeyNBRbXQ7dLOMCdK38WXJTD9na/t034O/84fSP6yX8IpK39VpC3/7DbuW1z9rmNVLPfEtB8/0ft2RYMsGcafMHJbSvEO3lhAz759hrxYy5Heojbw3QNTvI19x4n7MWHF/cjLe4P/tmPfajm9atioBs+8KfJjbnYehjRjnHLllhe4KuRc2qIv3O5j7UW48pbDcAfvbKO4kY+ztHHWCPz0cYxecGvFdsY2MVmTlEHbd3DaO/YPYl+rhEjng1iuDfa2Msbm4zVW8O/igOvlgb4sIZN5qcO9qxHnBlNxKBvaSgeXHI74tfCzDjx3rzhRG6xVVyse2zhEznFfWK+x4c1YhLjIZs59biN8sma9fZ1FLNnp2bE8XIfsl9lq0/uoxbqw/6xn+Brz5izVbV85rQVL/o5J27s4cJ61XIM/CL37GOtxtjR5iwPMdS4hY9djBHPR8bwPvdHOWhfaeMeaJP7eHbdgyMf4mib88kcxFKDrBPrYNHH5nycy2O4lzxG/qPAAGasUQ7uB7FzPsDK604Nj3DabF4AsAGv9hkqwDdYvnWyxX7DJk3m/IbG/VY4d76hY0vbCnTv/UO87SF055c07MFgHmzG9LSR8vJXu624DbX3zF/atsPxyTd1MOHMt+rtcO3jmThgxoaW/LpDa8UjF/REQxv5wmNEI2NkDLDQm3X3Ie+b8VbfV4CapYZ7+nl2QGKvsW+1Vl1ne/atFzPb+0s88+45PQ0c6iE3uORzS81Qj9GXmuzllHHhAk4+E9mOe87biF3lm+fgDF7OKduN3Gdt8v0Ixn3ZqO/RMyJzVp/W8+i++D5H3FGNn2Nuz5bz9388pv79r49trmkxwmmL9yD/O9XXzGthnVMgf2jzwcscH6p5Ld8bkQ/P6kMMe318UeQ+vySLE3tfvivbow+SiHN27AfzWX+/aODPC3rrhYQPN3KNL9WjGoENboXBGk0s9+Gn2fXnjAIjL3zYjNgRd7R+Z/fML1Hmhj+cqJFW/VVcsK1ewMWd6T3HPR959mweY63S5jF4rJgPrwCfaaNfCh+e3Yr4HBVYv1Q/x137jDjzK4EvBM8xLX4R4gtB9aXgOeazOC8FlgJPR4HRX1HXL9Vze8aLtH/rxJe9a325nGOxrJsKjPwqvH6pbsq3Fr5gBfh19zk3Hsjrhfo57+DivhR4ugqM/vM0/+bx6WbytJj5Qs0POuv5/bT25rmzWf/847nv4OK/FFgKLAWWAp+tAnxxP2rZhvv1z1raqj33H3Pama2Vx1Zg/fOPx96BFX8psBRYCiwFlgJLgaXAUuDZK/DVs89gJbAUWAosBZYCS4GlwFJgKbAUeGQF/h8FIN0zX5EUdgAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuYAAAAeCAYAAABgx9sOAAAZGElEQVR4Ae2dTbIdSVJGn8pqBTCjp6UlsIZu1RLoEcwYlDYAZl0YrEBl1swY0QuAgVS9hWYJ0hQYAUsQebL6vPLnzyMyIu99f+pws1RERvjP55975M17pep+9XmTmyWLgcXAYmAxsBhYDCwGFgOLgcXAkzLw9ZNGX8EXA4uBxcBiYDGwGFgMLAYWA9dk4PvfH3v7/pfHOtfUGMG0xfvqmjGXr8XAYmAxsBhYDCwGFgOLgcXAYuAcA+vF/Bxvy2oxsBhYDCwGFgOLgcXAYmAxcFUG1ov5VelczhYDi4HFwGJgMbAYWAwsBhYD5xhYL+bneFtWi4HFwGJgMbAYWAwsBhYDi4GrMrBezK9K53K2GLjLwKdPn+4urLvFwGJgMbAYWAwsBh6cgW9/9/c3r/7hVzdvP/z2wWONBvj0v/918/rdX++4wAZG1j58/I99jXG9mI+y+UL1eDF8/fr1TXxBfPv27c2rV69OZ/Thw4eL7E8HfkDDSzmpoP3www/3uK/0Rtb0NaK7dL5sBjh/z0l4tsTnS4WN5823335bbU2vcVZ5po3IES64PNIZicP55FKu5Vd/a1wMLAbmGOAF9+P//OfN59/8ePPDH/59zvgBtd/869/t3t//1T/ecCGvf/ibDeO/7XP+WP9zibdUfJmTd+/e7R8833zzzW2CfGi8efPm9n520vog4wOztUcMMIBnRuKH3Yydut99953T7ngpJ5VzYsMJOc/mXfnrcVvpP/UaeHmBgoecf2/vqXFX8XmpJI+Zc+PL2WgPVnGrNbFkTitd1zhH6H/8+NGle6M1QW8EMzjIMQr8vH//Pi4dzsEGrtF8wMl1JJw9fcfnn3b4IIdRzL16EosY8nbkl9j444o14byARz9iXeOXwwA9Sb9wTqg1PXDmTD8lI/Rv69le4VKfMxL7vdK99hq/RivOeWn/5s/+4ubNzeP+zyUS/9P//ffNu1/97c2b13+5w2Jk3Rd2Fm9fzH1wQyBCw/CgzA80H04+VNC1wZgj+YGND/39pHH3z1n9u9Y3e5ODH6n+/5Js/GzHPU2Sc4x6kRcelvnDY+SX5yqGHxrGAgO+4akS9OWeffnsYUcPm+hTHxwqOUMvS++DoXewWnv0VcSR47XuyfuswE3Oo8oZzD44qv0cP/rELvdE1AdDz6cPt2hDjbLIa7WHbotb+yyeC3PFpvUSpV0+2xnXc7v3hchzAb9Z4JJ1dfJ+vvfstTjO+t5TK2of+8W9syO1Q2ax2ONn42Y7+AMLOMRCvlzs2a/Zrrrn/PTO0cgztvJ77TVqSX6X1hM/PtfoQXsUzuSQ/d7Zw4e8mSe+qEXveaTuGp+OAfqHWvOsUp66bj7jfL6Ai35i/dJ+x5f9Tn8/lvDC+/oPv9h/jSYm/2wkCi/HTyVvf/znG66W7C/mvhhTCIpAceIDlnXFZmKNKxZSHcZYTHzxIOGKLwgtfXwe6Wurb++r0WaImNSLubnGiE3MFVs/gKJe5dN9efTe0Q8a/HH5QCYeD9XsM38I6tcPwF4O6MYHNbwi5Ccv4oojuLJfbMWKrofNeYyjL+Lrq/USqG41tvoFXfCAAUwZa+WLtYg56xxxon6sD7Hl1P1q7OlEf+ZU+WDNnsz7LZ7g/09JZmpY9WvmCv6oCf0V65T1qvuKe/BRQ/vVlzLs6aU47jfpj3hmmRMDO0buOWvVOauwJNe38fN6vjcufEQOubd/GWf5ynG8z36M776jz1XvHSPHrLU4Uv8hR7DzDKL+zO2DGJN1eoSr9WxDB/HZah/AO3v2UvS75s+HAc5NPDtPhYy+8XzkZ5xnGZyX9JPPnlYvH+UODiQ/B47s2H//63/a1fhFmn/W8vrPf7Hf82v5jFyCIcYh7sfv/iUu3Zvv2DayPm87n7cDvn22/yy9dbU2onbb7YPApea4FXfXxWZE1D/yLXbwM6+kt1fpm/vWqJ+ZnxXsMybzYsyCLjZR1M+8RYxRP85z3tpUsbWzpt7HEXytq6qT8XJO0eclc7m5pEZi7HFyBmNVyxGcrZxadWmti7naN+d85rVh1K6qa9TrzY2Dryy9vaw7e49vcHPBZ75YR2dEPEOj+tEnfZ97Hz/4dC+eJ9eiD/SjTmuOLTy36pV941ceGLmsOfiYizPiYa5eixMwYhulWnMfbOyPCr4rfXCNXHIktxlrC0crLvrgIQ+llW/Ph7aMYMTH7HNJ/+YYfa75YiAzYL+0+syzzhjFs5PXo87MnPg+B+h7z08LX9bH9l4Ov/nx8/bvy/tXAJl9HmHQlLMmzoi9PINHeP64z7eQnYTKiUQJII8926zLvYlWe3nNwt8jOyhKBktxHlT2KXmwPypHeY/4aeGXs8pHlUO1pm1vz/hwrqBPblFy3dE/OmzoxLpwn/0YP8eLsWfm+OOKAgZi5/WoczRv1Zr1Ix5aviuf8hF5q+zNKe/Nrmtf9ZtY6IeWaJfrij5YzBH+mVd5GafisbcnphyHWPjC9jGE3I15Jt4ltjEePHjJN9hmeMhYrC/rrat1BnrPHXCLMebgmnnEvrKXon6cgzVeR/rYwg0xiBdjRb/2YO8cRH3jyjuYsJUP9hXyrfzqQ73WKDZizAj5EpuxErGik6+sHzHAodixY96KgR/0s39iy52xjJF1ua/4047YEU+l38s168/ioC74yPmIr9o3RlXTmIs+GGdy0C5z06qVeNjvCXlyRdG2ykW90R5AHz/gYOSKeVd9oI76YrzTkyMvwYI9gQFT4hkbnOJy7d6zZwTTpvN1/Cuxzdkd2QLtfzWJDvPHFHFtxSrD+ld2W+Llflzkr1JG8aPLtREeXUzP/ScTW6Hu2PrXRsTIuW3NPrSmQ+0rX8ZXFz65Il/Y8delrMGPNr3csUFibO7Nizli/cjpGoJ/MEb8l/qlh8in5dNcZ+LAJ3Y5b/iiF+Q498VMjKfUpQ7kF/uFWpMXOfd6ZwY3POIX3vTJPTXjqs7KjP8RXWtl/BEbdeydfC7cnxljr4AJ7rlGpcJCTuanHziFd/ZiTPcdPfvUI+OoYmnHnjFncqDeM2LvZJtWXuQtLurVyt3cyBsdRtdyrNa956e17zqYLhFrlH3oN/Y0814enjv09EtN4Ax/0Zfx5NH+xwcXdReDuoz4tQbcq08t8/PZ+mITa4VNFPbsT/3FvjOXaDOKA6xwQO5V/uzhq4oR4zEHW4v/2RzsL/KUT/xXtbIOcpRxec++GEfy0W6mByoO4QQf4tQvY9bnnn/Kxhh7ItoczbNP9HsY2Jfj7R2d21vRTt5vNyYm974N8U0A2YDue9vB+Gkh/bkR0N2P6vjYMHW/ZW8F2L+B6ndriOjido4evuI+c9YqYT1f6Fd5GZvctya8Y8faiIivpY9fLuOjH+PGGGKIa85b9ZHraIv/yBc+xCkO1/Rfjfp2TwzeO7bW3Z8dc72xNwa5VVcvhrljVwncZb4qvbhmD0Y+4z5za9LSMafcr0f3OY735IdtFHPv5addxGntK87MvYpT6Yuh2uvFca+HPWI4O7cOjGdEnIzXEjmb9TmDhV6pahJzEAe9nMU+yBjx26qZZyL74p5YWYyR17kHu7G0BYsxIi7zQN+rygm/cqhv1qKwHm1bevohB/FFP8wjrpZOtuHeno04sl7Gyb7cZN0jHC277Md761bVoOq5yn/kT78jo3at82yuoziIWeFjvRWrFQM/cCM/+Kik5Vdd96scKt/2S4sT/Xqm8K+0cnG/NYoj+mrpsk6/co0IPHLdysiv07fK7UkLwxEH5nrH8wgmfjHfgh5K69vcoWFQ8JvFVuSw+vM0/4c76G0N87NCmG0J73dbccNqe4qfrWC3Cnz74xstIz70h4K5ghcM7LGGj6McDHCktxV0/ybIN/8oxMj8+A0YDDEH7OQHnSj4RRfs5Imoa37ZFzpVDNajwFm0JRfuydlYUX+mrtFuZl7Fxd6cK1/WHNzkTV5R5Cn7xi7mjw26sQb6jP7ynBrJXd7jPmMHH1drvfJxtIa/XJ+ejVzY31GXvhWj3Mb9mTl+kCqO/Ksz43dGl9jUmbzIm1q5NuLH/ol9MWLX07H28mvfgg1h3b3o59pYIi/0jzGtSQtHxFTNPRPsiZlY5lfZ5DVqhU38bAAP2KgF++LVlvuo73oc7X19xb2ZOfb2FHjA6kjO5GruYGK/EvLJnx/o4ds+qexYm+1JMFc4WIcXsDA/Ep8R5nekD86sa48d5Xjke2a/woE9zwOunL8YyfdI4I8cscHXJWKPVn7kPmL1XFW1jTjsl1yLqDM6F8eoL7CN6oJhRncU8xEG+eE8ym/v7I7EHXoxH3HU0wEwhPUOU3wwkpwH3ubRP02Hr6jvXmvMB4SHCH4glDHGcI7/+LDBh/rZX4wLNvD3dPAjHx4K8hVL5Ik5+mBhzoitPBBbH+JQN/pxjzXwmafrjMTJecd95tiip3BPPK4oLR6yXrQ5Oz/CnP3Kv+twAZ9Z5DmuEyvzzT1X5AVbecE/9aUnzJ8zwbyqA/Gq/mn1Fes9yXjVZV08rjnikxyiRKzsec9cDNkm2o/O9dHCneunX58Z1OgSwQ9CnPjFhfXt148h13KTcyC3vDbkcFOCY+oFDs6xPGkv7tnzoL1j9ut6HH0WEdNcwRZ7POr35tZTP9zji3GGK3FXPa0fY/Tw5D38wj258ZwAF+f3bJ/BHX58Fnt2iAt29qrzH3GBIevgh3qAt8ImP3IR/fXmLX2wGq9n757xvW+N6FEnOY96+mhhirqXzns48G0/wEHsuXzfw2Gtr5FP7G2xE5u5PSZ/PUwPudeKDw/wpsAH5+MxZRZD5Bvs3HNxNuUb/OR8pr7NvyrYiNn3tkN+59d4b7bG7O6jpw7jjBBzy+nOX6tuSd9b0+d2MPY970fGymYjsOlHPsDRkspn1O3ty1X2Lxfw4YWfHlZi6i/Gx548EPm0vujjsyfYq5Pto51cxbVL5sQl5yjGyHxFnTyXsyNb9HK87Kt1b73kteKJ+BVucWXfs+vaVzUVTy8/e8cc8Cd39mA1Rn3j4CtLb8842cZ7cBM788catpdKzMt85N/7HCOvizHr4bvHe9b3Xr7Eho8cEx25i9xYS331xmtxmGOczTv74Z5aVBzKUbWHXc7tSB8bRM5/uvv5uRr7Ovs+yhfbqlepKevkeEasdcSmH3yDK/u2Z9RzlJ+s737LH/r6lLs4Rn/GiPvOK370K4bRsYVV+1kc2tFr4FWMw5jFGNbGWqmXfbnuqO/In3uMciN/1Rhx4Qedlj99izPa5lzUdcRnD0+MKQ7iEIMr2+u3NxrvVmfkn438UfkMBnDKn3hxxxp78gZXtzKCiX/KsiVz75eXzfEum0Onp0Z/2t8ATn/72Zp0jxm/eYiHbyfx21UExy9cZ+JFH2fnfjMVe+WHfOC8EuzICx1yUFin3n7b1D7+NbK6vVHOou+o7zdG4rdy2Bpu/7Uoxm7pRt/PYU5ecEgOfKt9KLFOvRitGogJrFG8d3TPM+F9HvO397w/c48vcvvp2TNjOadrnCMrzwF6cn5pL3pG8Am3xtCvcdhXWPMXVPXci6O1O6p9tHG+PfidNv9WC6zEgD/OMn1+JGAX15HuY+6DixwyNviFi4pD8pcD7K0duPGF9OqzK6Q/4BKJXBIf//QK+xWW5ObeLfZclbTWK928BjY/Q/KeXEZesk5133rGVDj9DLFO0R/x4/mKe+hHHvGNLz5n4vNm9NkQfc/MR3HoE77BRF7gN7+jPiM/dLG/lshN5Kvn2z5o1Vdb64z/EZntAfsycwGf1P8x5FIM9rt4udfnGfxf44AGwUluJh3n9ZFANglkxwM3YtvSwWfLF1hpIPZH8VYNKe4KQ6Uf9Wwsx7h3jbkHCV8+AGZiodvjBv/sc7BaubLPHjxVPXONPB/KB9h9aPmweYhYnptYr9k4vOhV0lqvdFkj50twRL/6gTvncf9ac3234rR68xrx6X2EFzFxcO+8iq0NZ6Inl/ScPUV8sVSx3Is4xZX5bD3r0CMnLv1VsVjzx5cjXC37ap1c7fPYv+BiD9w8y6rPAtaxRQfsjHLH/czzUmzVc5P+gJ8Kg3bPbZQHOJ0R7bKNPRZ7RN34RSba+bkV15jjo8IFx/h0z1i5l7O/s/ejOPSPPpf9CNaRniAvZETXWEfjLDecDcSatfy7r/+Wnuvqj/aAfcRLLTG8xx/31LonfsE50uv5MOZZDOD02aOvXryjva9skHxgSJLLA3HkyH1sSI6RwpxtPPHE+CYPAfmyyViPNuLKI/6r/MQrL9EOGzBwVcI+sVv72LBHXK4s5tyzxwY98IH1SNcYHBZiwk9P8NnCpx0x5Ri/4nZ/diQe+VSczPp6DvpwIj9HeDJ38M/Bzpd9mde9Jw5nIPtj/1piTtXZuFYM/PTi2MfqGNdzQP7onBHt8J39t/wZL59F8cSedi3XqOU7rlNHvlTqI+5Vc5+H1R5rnjf94jv6B2PVTy1/R+t8Fhw9e/ThSznYtMOWuV+sWz1I3bCL54U17Fmflegr247mgx18gtlLLN472hv0omuM9mbGkO+1z/3rMz2vZ/vqHtsqfitW5YM18pgROYq9LP5ZXzNxs26FI+qABY7k4wgbXHLRz9eUWW54lmATsWc85uJ5yvuz9/qr7I7OdmUDdnxyFsll9PlY+WLtDAbsqCfPLWp6KQb8fW1xcMwBsLg22czDB4faM9qArEeBSMETBz3v0eMewpHZ+LtR+MPCVf5Zy4fD4orLfI74sOGO8LLvLzrGAq45s2bMkMbefOSCHsJBOYqV7WO8uBfnxsZ3yz+5ggMM8GLuZw8vDz78jOCLWJ/j3JeKFncZs2dB3tmPvaq+H07Vnjr0hx8irkU8Z+ujLzByUfv4rGDfvozxxUpt1XfNsdqr4mBPDONU/HKWyZcL/3Iqd2LDB1yhrw452MeVb/YR4zNHH/zEyjYxprkSizk++PGCekQ9fIILyc+lfXHgD/AgMS/jk79z43iva9axlUtyxC7np/7oGPH0bMQFNxmbduyRJ7qVDmuX4jXWtUZ7K/uzXnk99hl71iXO6Z2Yv32NTsyfGPE+Y5Fz1vGZnxPUjjPFyEU/iC/6JS77xENfP/jPeuhGwV/kghjexxzFgD5YuVdYw+4SGcURY5An3HGBNeKNes7t24jdvUvGI27wnfmhLvAIdufgByNcINzn+pkjNbIOroFjpgfQNxa+uB5bLsEAdq78eXJRDts3hF024u/8Y/0N6L3/uEpdx60hb/+hu2tbcfa1DVRz3BJQff9H/lkXH/ieEfDiJ8vWiHfyQgf/5NsT4sdcjvjQb8+ne2ASr7n3MKGvf3BxPyKxPthnO+pQrWtXxYA3bMCPiI21KD0fUY95S5dYXviXI9fkEHvX8hh7LcYVtxzgf/TKPOo34nGNMcYaWY86zskLfK3YxkAvijlFHtS1hlHfuTWJdu4RI54NYlgbdRzFjU721dvDvooDrhYH2LCHTsYnD47sRz8znOiDscWh/sCS5Qhfy2f2E+/NG0zkFqXCYt+jC56IKdaJ9R4e9ohJjGuIWB8j5kis0Zwy773eGPXZ05N34nhZy2xX6WqTx8i7/NAD9AT+1WfO+awkn1t19RftXNNvHMHCfiU5BnYRe7ax32PsqHMWhz7kuOUfvRgjnrHsw/s8HuWgfsWNNVAnj/H8W4MjG+Kom/PJGPQlB5kn9vHFGMX1uJbnYC9xjPyHlsGZsUYxWA9i53xwK647PTyCadN5hYPN8ZIvkAG+BfPNlRL7LZ00WfNbHvdb49z5lo8usjXoPvqH/raH0J1f9NDHB+v4Zs6IjLSXvx5uzW2ofWT9UtkOx71v+/gEM9/Mt8O1z2fi4DMKXPILEdKKRy7wCYcK+YJjhCNjZB/4gm/2rUOum/HW2GeAnqWHe/x5dvBErdFvSauvsz5168XM+v6NAOvWnBHBD/2QBSz53NIz9GO0pSd7OWW/YMFPPhNZj3vO26gemMCS9eEfzK08q7itNWKAKfPS0u+tZ37zfc/2ofes0dFzJmOWH2qQn80Pjfml+R/l+KXl9aLxfv/7Y/jf//JY55oaI5i2eI/yv2N+zbyWr3MM5A9+PrxZ80Mues267vEBXH2Ioa+NL5vcjzzMfYGvdI8+SMR1yegH81kf8GcOvOS3Xmr4cPOlwlijHKGP38pH9mUdXF/jOAP5JbCyRGdED9vR/p2tmV/ExIc9mOiRVv9VWNCtXuL1OzN6Bno24uzpsOdzhrPFlQU/6Dwnqfh9TvgWlodjgF7kGn0uPByS5flLYWD9Yv6lVPKF5sEvDb5UvMQU/GWv+mLxEvNZmBcDz4UBX3g4Ywgv5L0vH88F93PDMfpr7vrFfK5y9CdfSBnpzWt9yZ1DsbSbDIz8Or1+MW/Stzb+hBngV+aXLDyQ10v5S67gwv5cGVgv4depzOg/1/NvUa8T9cv34ks5Pyytz4Avv96PmeH6pyyPyfaKtRhYDCwGFgOLgUdmgB8QjiTrcL/+iU6btZf+o1I7s7Xz1Aysf8ry1BVY8RcDi4HFwGJgMbAYWAwsBhYDGwNfLRYWA4uBxcBiYDGwGFgMLAYWA4uBp2fg/wGAAXPsx8lNbgAAAABJRU5ErkJggg==", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -384,9 +391,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAAAeCAYAAADjA+I1AAAcq0lEQVR4Ae3dP6wvx1UH8J8jF0QixXMFlLao6LBrKluhoIzdIUETV6SNgQJTgGI60jkIIVHaLQXIrhB0MVRUyC4hVR5SIoXusZ9f/L2ce97s/nbv/b3na3uOtG92Z86cP99z5szs3uvrF54sdJo0EZgITAQmAhOBicBEYCIwEZgI3BmBF+88c06cCEwEJgITgYnARGAiMBGYCFwTgXf/6bK0d799meeaHHtsWvR945o6p6yJwERgIjARmAhMBCYCE4GJwNcRgXmo/jpGffo8EZgITAQmAhOBicBEYCJwVQTmofqqcE5hE4GJwERgIjARmAhMBCYCX0cE5qH66xj16fNEYCIwEZgITAQmAhOBicBVEZiH6qvCOYVNBG4j8Nlnn93umE8TgYnARGAiMBGYCGwi8Mbf//Hppfe+c3rn47/d5Hueg5/813+eXvnrPzi98Oe/e77e+vAvTp89/u/Tx5/92/lZOw/VzzMiX4Auh7rXXnvt9Mknn9xof+edd04vvfTSzfPRmw8//PD0wgsvnB4/fnx06oPlvy8mI8d+9KMfnV555ZXTNQ7WZInjpInAxx9//KDWntriWqsH+tWLt956a3fwzLm0btShWtd2C2+M77333sn6Cl1LbuTNdiIwETiGwIf/8c+nx//7s9On3/u703v/+uGxyc+Q2yEaffT7f3n64Dt/cr5/5Yd/eHrvX/7fxvkn9c6wfHX/sVnYeF5++eUbJ20ar7766s3z0Ztsno8ePbo19e23397cCOn8wQ9+cGvOpQcb3l2Jfd/97nd3Tb8vJiMlb7755gkmfHj//fdHLLv7YH6NA8RuhVdgZK8Xge9///tPxX1r7Aqqry7ijTfeOOeSmO4lh19+8v9aJA/YMsJ0S0cOjj/+8Y9Pfd1mXmJijV6ymR1y27qp9Prrr58++OCDVR2Vd+veS67axd5RrXLgdkgXD/oukViYM6oHsFEfjfHrklxy+B2Z0c1O/rNpDePwzvbLiYBckZtyTpzlwF3W4xfpfdb53hoi330cska26sc1fXr0zV89Pf7Fz5evwD85i338i58th+yfn/s+/uzfTy8/+rXTm6fn+yf1fJH+7H9+cnr/9753ev3l3z7b9eZv/c75S7Wv6qGbQ3WKLgAVBMUB6L2gZaMQGPeK0EcffXTmj1BFKWP6BIM8xXpUbI7yR09axT1fGkb/LxsFkI4RrRVtvHwj1/wU5H4o9MUX3xZ1HfgtTHIzF87wXtu0w1/jw5Z6WB7ZQEct8uJCBn3BbDSvzunjsaH3e44/dUyfOXcheTmSuUcWH/smSl6n2AfL0XjnrwcO6wDGa0Sm8VHem6O/ymMLmZ2Cn/iNyPoaUdZGXRdkKZJivHYgkW+wyOYxkv0Q+6xzcYc7bHPFVvi69OPbQ7CA+xrGazLE3Rqr8V3j3dufPFizPb51eea5+H0NcpCQpzBJzYIRn71Iffrpp9dQczUZcpl9W3VtjzJy5AOSY8kz2MZ/49bNWr6QASdzxCuy2CZXrhWjs+D5z1UREB9xU1fVGrESt34uuKrSDWHyJ7mdfGKTvEw+bUzfNcRXMp3znlduOrS++hu/eXrtb/7obONLf3X7Y4aD7fMmh3z09j/88Hyt6T8fqiWHRa5QJ2k8uxRHAQoppijFJEUh41p9tXgpNjmcktcD0/kV6/D/9Kc/raKfuo/spwZKRw4p/YCFpfpWppwLJFzYlgQdFcl83ahzc59Cm+e0DjTxGebuYU2fL5rdzvz6RjYwchOffmCPDi1s8NavpBYgyvzzw+AfdvWN29zYako2F/dsrnr0IfrlDAzXDnC/5Bz/uxV/OWLBb2HQpcaH3u8ZXq5LxNfkMP+C6da8NR5y6qGLTxXXLjPrr/fDKTbVMfH6OtGlvA4Wa/ma8bSJb2pj+ve05naSX9mMxavGTKxcWwfS1DJys77p0e9SI0brDE/V1e3ynFy5xAdjujqGnuW5/NXWvB7pq31+PWRE/Vee7Csj/0Zzr93Hb77JBbWu10f6El/rtO+dsSc1RqxgDXd4woyOrfhHxmy/OATEfrTXPW+LrGnrQ/7kjJJ8Sq5q7Y93JXmJyFg7K23Jtp8hteEoffDmny5fpn92/lrtV0Ee/cq3Tr5gv/zo1w+Juo8NVZFDvl9H2SK2vQg0wFvg3kRC+gXMoaX21wNMimfmpK386avFtr/VbfGzTSEdkWSyQbEdpVh13mwoexcC33MQZNuoeEZH9yX9WvhJ8jpfgNnNlppo5PjqDafaj589Nqiqq8ZnbdGQhYKPOTDqus9Mn/8j3jCvNmecPLaHIt8z/r7osuhhwEbtF039kB4cYXvkEBA/5Gb9CqwfRvXHZeGFR8coY73tL5+wdnX709/n5/khYB5bnkcrFnB2iUPyVRsstKP8HtlnPaC9taPKYEPXI/7WY+zThtgVG9NnXC51Uvcq0SMX12olOTX3PLvoC0apn9a/dRGefsgLX61TsUWffQHPkfW0l7fjGb3Po83mbE/ocYp+sZUr4gPHkV+j/c58ew7cXKnZkTvbiUBHQG2ydkd7lxw0Lmetx3p26HK2nq23tXzNPDrsQ2xJnTXPGrEGuu7wqy9IXVI3Rmvl0Te/dXp1uS5RZO61IfLYZ656V21ny2gN7jrQL848WRQ8WYBb9qPbtABzHls28tsDnz8tilfn9glk0LMU/T40fF4OYWf+JSDDcZ2L00+WwD0h2z35I+KH8b2EP3L3zul8sX9J7ltDwWyEKWy6D1t+jfijLPr5ESJrSeA8nnET99iSGLFxi9iYuGROzx/66YZl5G/JvDRG3rK532KDLVuM3ZUS6z5fv7VxF4rM6nfiEdzW5BrnU52LN/19Xvo7f/iyvvOshSMdW2sxebp8FaxTz/d0yiMyXO71dYrPo3zaGoscMmEZPfKJPz0Pwn/tVk7Tfdc8uM/c6gsccsEA3myD4Vrc63z33ZbkRbDtbdbuyPfUnTXdZIlbCJ++5Alfer0Ir1Z85Z31vca3J4erzORrckdO8iO+xN7YOlobZMDlEsW2EXZbc1PP+p6ROdkLeqw8d6rrC4Z1HSUOfU6e8fMzetzDI9iFLzrClzb8a/kxWtd9f05cIrO3lf+oHcl980aU8epvdIxqWcW2+nzEh9gBm+Qqn9dilRxL3mZ+bxPH2r/lS/j25gB+eLFDm3WVeNU4RXZ48LtiI99v6M/+8cmTS9cN83EbTKUvdopV7ErfU7Xnkj2fj5+/VC9Cnvqiom8B5HyCd4p3/zwpX0OWYA3VervA40eBS1CGPOlk/xK8PG62eF1LYbsod0uQt0N2db3LIjlP85bWfdOX8cge9WUsvOztsuiv5I0seKWfbF9HluQ5x9fbJlqSKyxPteag6MtzbMkEurz5kX0pPpmz1bKTTvKuRXlDHcnMG+9RXewUj6Vw3fKb7XJhLS+O6jnCfw38o89PX/inHiS3xZpfMFsKVVjv1earHdwik14xcy2bylNr5V4KB5N96YGdWnCU2Ir6ujgqB39dj3CG+5F6PFqjME386OBn6oGxqtN4pfiUPKhjI10ZN5a6tGxiQx/yhTdz0opBtTf9bIhMdo145GXskqt41EP9R4j81LWtNRVdWzwjvbEn+HYecsnMejCuZkdf5/fMXuvFHHLp8Ly1XumAUewnA16wtu46WaPiGcKHH/Vf1anrOjnGJjoq0U8uijw60pe2ztlrB9mpI6O1zXay1uJQdQYXWCV+GT/qw5HaChN0qQ4Yj40jzGJrb4/kwAhD9vGnY0JPzd88+yk9O5MT3Z5Lz0dtIM/a4aecTq7rj+3WiH38MC3Czqf1cui/uV2cP4+NvlZhWgA4jy+Hkps5azdkLMYNv2iZ4w3P25e3qMhdEmIoDh9Z3i5CePV1ypcHY/XCP7I7upcg3Xq7h5O+PZQ3QfiNaFmsN1+b4nfVW+fgpXtEiU/3wzNf61zyO56xs87Xt0WJY97IYTLCPbaFb0vmnjEYdPujeyle55zhY7225CaHzB0R7Gp+jXh6X3Kw4ll5YLEUtjNeazzBrebqnvs1nOHR8ye+b/lnHr117Sf2I8zIwl/tSH6R1WlrbEtPcnvL9q7rLs/Jrb1rvuuID2tx7vx7noPZUZnB7NI8sRPDUbyqfbFDLtd448kaqHkTuWLmvs+JbHlFPz468LHZWtRf7U8O68/FnhElFpHdeayPzK22dr7I4SP9I2I3eXSt8fR5dCbfYkfn8UxmH/esv1NitGZHMF2LRZeX9V1jEB2jesCuXneC39G1m3lra/GoHXyre2P1lX8w67qio68NcuRD8FnD85IPGR9hOZKdfaLbWX1xP6rja770uf05dtQc6Dz1Wfx7DtTxeg9H1w3t+Sp8w7x+s2ZD6scIb9JSx25J3mPTwnP+DxUXxUsePU3pH71tPM293ZOvCYsTQ8b+d5OXZHjqjSYTfc1g25KI6dpslwQ8v3WawxdvIt5UvTUvCXLrbS9vgL5SscFlDv78DpO+LcoX3zVfl6Q+v8XRX4mdfc5SnM5vcL5GLElX2W++BiROGYSPeUtinO3WTzbKV40uyxjfzdsiPOZGZ57FN37X+UfiWucduRebEYlT7Kzj4hns4Q0Tb8mVkifdp6WwPBUH8+tbefKEPHJGRP+ysJ+SFV7xqrazz9ecpYiG5dzmK9Ktzp0PZK79B2IjEcFolP9wMS4f5N19KF+t+logk2z5F1vuo2drrnymh19yQBzdX1ofkbm1zsJztI3PwRfWrujKmq95Q0fGe/+a/rWcDT89cgAu1ne1JzjBakRbNljHZNe6TrYa7ffK6YuuyKan8qe/thU392zcsqPOrfd0xW/2sDW1EMa5zGGTsRGxQY3uRHbqdB9LTNZkdv48w2s0hy/wtNbWYhUZWjzsTi7VsdH9CN+s61H9GMm4Rt/IDnLZoE7zqfrvGdW+c8fgH/jBQ37mfDNg29UVvSNsgn2trcmHNf+iNOPhT/9d2tixlgN9XdF9RO8R3jX799oQXdawe+sx+Na12+Wt6a3950N17XgW9wwWCAeCBLnrkZiIExZfFrz+Okfycj78XU5/NrcnquSwYSuMFpbDTShgk18LePjp7/IyV8tPCwR/tTs85OcApoAmqOaQbbwWVrqMOYTBDz8d8IED6kUTD97RYTPzHOwrxS4JtVVQxIb8kGc4VayMsc1Yx6rzRc592h6rLVnxsxYG96OiiLf3w7rjLc76tC7z+A7HxBfusAh21oSrxyG29/yJTP2V9Kcg1/56P8pD42xeizX7k1+RVTEzRrdLf3grT+YdbSOj4xw5+vHQXX2rNSO8d2nJIVuuOjQmpvqXL1G3dK7Jjw/VPrz61/xak5V+cRYv65otVQd7Q30NZ6zbEv60GQ9/+ketGgWfaofclp9rOTWSk774kvWRfi282BaeOnbpXl7CjV3Wn5pv3e3dP7p8ficGZFsnofjf127G0+KrdRHe5ARL8esU3xOjPr72PMITb/ojdzS/5kG93+LFF1x6rYquu+b/SG/vi51bdpjDNnu/tVTzVa7I60s4ky9e5FzDn2DDNviR79LvGVWec8dz+IcNoXqfPm1wTB886hkm/c+yPWpD9UUOwFZNcM6q+ym+S7nQ/TofqquCypD+o0KrDM6mqPVFVvnqYUuSe1b8HGrydY7jSeTKX+XsvRd4MmpRNDc+j+Sznz2SPEWp68shbC2p4MGPvjnz2Vj8y0KlR5E1lq+rdLLPGFk9PlsbhljUgh77yYh/tchkPG0WOJxc9LMlV/j4AVu6un3huVa7Vz57vdCwWXwSK7YvP+a5ZU6+RI02uFuMywP99XDMbxc8yYYZPCpGeUHqsp7ns/xZy9Pk+cgeGI4IDntjMZqfvqzBNVnpx5d7c2GcdRNZd2nJQWKYFzaF1xrUN1of+sU3tOaDvDJ/T15FllbO5srGL4eqTnlWX9ZSo9ZsqfJzD0969lDN5z38e3hia+fVfzS25qiZfJLnWvVIfMUy+0rXdelZLoh3/Rhjjj5y6dna6/gxWnfWHNu0fTwxSUwv2Zhxthwh+nPI2DsPv6vSyMfE9qhNVe7W/V47IsM6tJbYxSbxc78Vu8yFE94ep4zftd1bW4NhMF3Tl/Hwr/HV/iM5EMyz15EjV+Ww9ojeasOR+2vYwM6ja2vNxhclv2IM/A7AXQJSFSnwOcQdTb5sXDnEkZvCEhCrrtz7cbYA7ymY8bf6ri/9kZl2rT/j7OMv29d4LVzBG42bxzc8dWHrd5HPVjEzv/7oNTZstWSbX2VXfhsOnvhQx3LvMCCuOXTqrxt7+B5iC1cYOiiN8L+WzclTcVqjtRiEn63VxqwD/ZWiq/bV+yqj9t/lPrK8ED5Lip66Lqs+/Sh87rM27puLWSNke1FKDCN3hLfYOLxZG9bpGllXaItnba6NDrFLbRvJUFfktrWJf8/Bne2uinXwXbOl9oe3xqKO772HswtG7KkbnIMqSgz2yGRXfiJY17t9SAzFmb7RB4ZL8s1PvnW/039JxmicbeLW1zhemKDk4/lhxz/sGVHiVsdyqIczW6pvbEoO1jnu8QdHcunEKw9rrYg8PLnvsu7zvNeO6GCzfHOpx3KCXaO1lTna+NcxqjxH74NHxWtLRvJgLb6Zm/Hwp3+tPZoDsGN7P2/BU/yfB93XBvEmw9kx8R+twb2+vKh4pbD2ohXBtcDtEWzR2GTIBfalA8QemXi2iiBQJJCF0v1Yk5+ES0JHB7tHC3/EX2Wn6Fhsa0TuJVrjqQuDLnwpZpdkGjdHAlV/6zzyYRe+OpZ78x02xFd+bMnLnIfSsjU/Icgm9Sxsy7qp8Tqqx4vLiOB+hPh8dP2uyY8/sLuWzJGu6LHeRnpG6zBrJu1I7p4+mwpyII0dnrNmRvIzZ2Qr/swd2U32HpJT5NSD/mgem/FFF57or7a4z09t6jh+Yw6yakvFwFgnfGrv1n8f0OesPdsr5De7YMmu1GLPW3V1S2bfD8SW3dfal9Z037Uf/p1SU7ovna8/r9W59NecFUfkJaTTyKbwyJGRXdYFuzOWXFpb15F313avHZHPd3McpuUC//fkBL/k5pG9NzrX2mCzt7YmbsmLNbkZD/8aX/qP5oBYyg0HUjryAgsf11be0OmsAX9y8N+F7msD7MVSTRjl/lGbvpEk4lwlwXVZEEecNccbCkcZGPlV9p772FOTgfMK6+hKUhrLIt7SI5BsdeiolOdslBmTHObQE10Z02ac7tF4ePkTbNOXlnxUfc5YbWHDPthe4s08i0VMLm1MkmvNvsiiM3rJjd0ZP9qyiz/0Pms6kst3sUUewCR5dEkG7GrhEVMHlH5lHfX+PPPLuuuxSMG5ZMee8ayrrM1Lc4J19S9ztsa29Ngk+NTxTT7yPxtJdO1txY2tZMeGzF2zFxb0iU9d97mvvqevxyg6ttrEOTK2eOmMvfhyX22x3uDokO5F0+VXoCKfjfJpb6y37KHfXnCp9sCcn8l19omreew8QnRWWX2uA3xw6WP9OfUWZsENT+9PXOVDeLXyag8F6557cBjtVXtkmjdaD7Gp61qTGdvWxnt/cq1iHF1HZXXZR55HdtT5cg1GsSm5V3nqPSxh17/MVp673B/Fxjo1p9re9Tok8r8f/hOTYNPnrT0HozpOlitf2Ec8lb/ey2vrA5ZqbuyqPHvu72MD+eLpI5aX7ewje/Su8Zy/VHOIYF8IBArYKRCXCmEXzDjzyZSAowVdNyBBkBgp5uaaA3BgHdXf7SFb4AJWlU9nXxzsxst/czseaz9SpQNdstd4vsbQFb/hz2f6XJXYDCfjsPEMw257ndPv2Udu9PXxPOOBO//X5JPFDosVn8WLLhWk6OhtCkP3u/N9GZ7zhbkXspHt4gg7eMsFlALR+RO3tH3cs/xwhcjPl22xvGt8Io+NYiRXHbiSK/SIIaqHH74g/Oyu+b41VvWkJuGngyw0WmfWJvz5TF/siy52xlY44a85lw1hJJtOcmo9sw7MUS/6WolOehKz+M8Hv7qVZ7JjW+I3+mISmfjXKHW7+pV5ZNc6qD/PkccOc2EjN/loXvcv/Hvbas/WHFjdV9eW/LuMiTFcOiVfer8cqXnCd7FGsJSfcE9eJCflt5jU/BPP6MGXWhudyRf9ZPY1Tjd99BsnQ/5pqx7y8NBlDUUOm9iQHIre2uKJjfrZlDk1v8hnD/29fsDLS9B9aK8dVQc/5bhLPKq9lS/3dOBJPNN/33YLGzpRra2erRP1ke3wZpc4iS08tfp6nBNLceAz3clF90dygHx6yMzFtrtQ7Do69z42wABWfS84asMt/vwdvgX4m78Hujh3/jt9SxAzPGyXg8OTRditvx+6BOfcp3/tWjaMG3n00ld5F5DOf19xefu54bt0syzWs4zOx4duE/n0bhHf6jzy1/BgJ/vJ3UPkLMl7y+8tm5Zic5bPnqUIrNrRdfMBtkvCnOeTU0kc2N39yrzKm3u4mcN+RCYdrkrJjT0x5BOZnejKRT7/86xlg3l01f56X3OtyuezucHG/d6r40UuP5OD7KlUdY3612ysvHxiX49heJIjS6FN17mNT1VHeBPDWxM+f0j84NOJLfI1ssXGc9dtHl7jeLusrbHM7XrkyhoG5hhje50XO9PG3hrHYCKGa5Q8jT/k4R/leGLec4FsfbW2xK60W3FZsy1+k0F2pfjG/lDyHk7sqZjVOJmzZU/WIB3Pk+LTlm177Uk+4E8tv4bckf7UiZpDYpY49FwKvsmNrbbmbs0/a7+uB/kxWqvstSZrbpqHN3jXedExsoktdX1VLEb1o9peed0nV6vuynNXOyIjGLNrjaqOWkvDHxk9fhm/5EP4RtgkBuGpLX1Zu8mp5POWP8bCX9c72cb25gD9yS1t9Z8MOrao1tRbuO75m9CfC76LDXQlb0c4xa5bdW2PTQvPC+xahE/6CiKQN9gl6c5fD5YkP3vpTdTbb95ml8S5eVPFkK8f4Q80voZ4I14K4K3fPcJP3lJYzm+5+VJh3p70yle7pWhG1bk98jeUb00sD8viGH75Yq+3/GVx3XxlLdM2b8lcisUNj7dd2HhjH+nTz0d4Gg/BElbiU+VlvLZilS9ccA4/2S42kLUU/6e+thgPf5X5dbjne6U1HILhsjE8hV+db+2IBTni4Fqjtbyu/PQmPmu2dX5fErM2zZXLYo/YL6e7LLZkLPLkDH8yl8xlg970KXPTsoWcviYyXls2kX8NYrOvnfBfDgX3ElmxgWfidl+59zLq88nB91KNUCtrXU59g/dyaLiGKV9ZGeqqNX0J468sAA/RsXf/6bJV7377Ms81OfbYtOg7/0m9a+qdsh4mAtmEY52im0NeH+vP5thsFJ7RJoY/c3JQ9LynmOMne8S750Aef+7a3nejz4sGOTbh0SErOvjqRScEIy8Sxi+RDdPBxQGmysi84O3g1GmP/D7nq/K813d89YVnzX+HlL0HQ5v0JaJ3r41k4bVe5FKexZ7tck+ejGhkC/5Rvo7mX+qLPVt87NyL3Zaca4+NsLm2jinvYSJgT3PteSl8mB5Mqx4aAvNL9UOLyNfMHl9irrm5P2/4fDHztc9LwZHD0fO2c+qbCEwEvnwIzC/VzyZmPk7k8rLnJ3yzfj8brO8kdc9X4fml+k7QzklfcQQewo9Y7wOxgtx/beU+8ubcicBEYCIQBNSWPS/sfoVvHgqD2uXWgTpfqPfge1ni5JgI/BKB+aV6ZsJEYCIwEZgITAQmAhOBicDDQOBL/KV6HqofRgpNKyYCE4GJwERgIjARmAhMBL7ECHzjS2z7NH0iMBGYCEwEJgITgYnARGAi8CAQ+D/OS7J/eZ1w2gAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuYAAAAeCAYAAABgx9sOAAAddUlEQVR4Ae3dP6wvx1UH8J8jF0QixXMFlLao6LBrKluhoIzdIUFjV6SNgQJTgGI60jkIIVHaLQWRXSHoYqiokF8JqWKkRArdYz+Lv5fzmzuzv93f/b3nZ2eOtG92Z86cP99z5szs3uvrF54sdJo0EZgITAQmAhOBicBEYCIwEZgIfKkIvPilap/KJwITgYnARGAiMBGYCEwEJgK3ROC9H12W9t63L/PckmOPTYu+b9xS55Q1EZgITAQmAhOBicBEYCIwEZgIXIfAPJhfh9ucNRGYCEwEJgITgYnARGAiMBG4KQLzYH5TOKewicBEYCIwEZgITAQmAhOBicB1CMyD+XW4zVkTgYnARGAiMBGYCEwEJgITgZsiMA/mN4VzCpsInCPw+PHj8475NBGYCEwEJgITgYnAU0fgjb//49NL73/n9O4nf/vUde1V8Ol//sfplb/+g9MLf/676/XWR39xevz5f50+efyv67N2Hsz3ovkV5XMwfO21106ffvrpnQfvvvvu6aWXXrp7Pnrz0UcfnV544YXT559/fnTqc8v/UEx6jv3whz88vfLKK6dbHM7JEsdJE4FPPvnkuVp7aotrVA/0qxdvvfXWTYJnre5ZC/ReWntqWa2N1xr4/vvvn6zR0K3kRt5sJwITgWMIfPTv/3T6/H9+dvrsu393ev9fPjo2+SlyO4ijj3//L08ffudP1vtXfvCHp/f/+f9tnH8ucYXl6/uPzcLG8/LLL985adN49dVX756P3mQDfvTo0dnUd955Z3MjpPP73//+2ZxLDza8a4l9b7/99q7pD8Wkp+TNN988wYQPH3zwQY9ldx/Mb3GA2K3wBozsdYD63ve+dy/uW2M3UH1zEW+88caaS2K6lxyg+cn/W5E8YEsP0y0dOTj++Mc/PrXrNvMSE2v0ks3skNvWTaXXX3/99OGHHw51VN7cs428vbWBnS5zRr6Q7QCv/vG5V+8c2r0siCmbL5F4mtOrKXxQY42x65JccmAXmdHNThiyacu38M/2q4eAXJGbck6c5cA1a/rL9Dy1Ym8dku8+UlkjWzXolj49+uavnj7/xc+Xr9E/WcV+/oufLQf1n699nzz+t9PLj37t9Obp2f65RF/GH//3T04f/N53T6+//NurXW/+1u+sX8x93Q/dHcxTuAGoICgOQG8LWjYbgXGvCH388ccrf4QqShnTJxjkKby9YnOUP3rS2iDytaL3/0tSAOno0aho4+UbueanILebhy/P+Lao1YHfwiQ3c+EM79HGH/4aH7bUA3fPBjpqkRcXMugLZr15dU47Hhvafs/xp47pM+cayqZ9zVw+tpsoeS3FPlj2xlv+emixDmA8IjKN9/LeHP1VHlvIbCn4iV+PrK8eZW3UdUGWIinGowOJfINFNo+e7OexzzoXd7jDNldsha9LP749BAu4jzAeyRB3a6zGd8S7tz95MLI9vrXyzHPx+xbkICFPYZKaBSM+exn77LPPdqsxh6y2tkaAr+3PA1kPfNyqjXvsJEdOIXmaXBWfYGjc2hvlHBlwM0fMI4tt8u1WcV4Fz39uioD4iJvarF6JlbiN8v+myjvC5E9yO/nEJnmZfOpMO9TFVzKdFZ9Vbjr4vvobv3l67W/+aLX1pb86/6jicPysyYsCeucffrBeI/3rwVxyWOSKfZLGs0uBFaCQgoxSTFIUMq7VV4uXYpMDLnltYFp+RTr8P/3pT6voe/eRfW+gdOSg0x7SsFTfypS1QMKFbUnQXpHMF5I6N/cptHlO61AUn2HuHtb0+bLa2mmjq5sguYlPe+iPDi1s8NavtRYgyvz1ofMPu9rN39zYako2F/dsrnr0IfrlDAxHh8D/4+z/uxV/OWLBb2HQSo0Pbb9neLkuEV+Tw/wLplvzRjzk1IMbnyqurcysv7YfTrGpjonXLxNdyutgMcrXjKdNfFMb07+nNbcl+ZXNWLxqzMTKtXWoTS0jN+ubHv2pEb11hqfqau3ynFy5xAdjuloMPctz+auted3Tt7evlUN/D9vRAb79tRd7Uw+jvfY8hI/t8JFP6mVbY8lOjljr7f4b3alT9iTxEjsxgTsdWzkUGbP98hAQ+95++awtso6sD/mTc07yKbmqtcdeS/ISkTE6b23Jtici9eUoffjmny5fyH+2fjX3ay2PfuVbJ1/SX37064dEPcSGqsiLgl+t2SK2vQg0wFvg3mZC+gXMwaf210NQCnDmpK386asFu30z3OJnm0LaI8lkk8uBOcWq5c2mtHch8D2HSbb1imd0tL6kXws/SV7nCzC72VITjRxf3+FU+/Gzx+ZUddX4jBYNWSj4mAOjVvfK9MU/4g3zanPGyWN7KPI9428XXRY9DNio/bKpPegHR9i2B4A9tsrN+jXaHBjVH9tFDjxajDLWtu0LLKxdrf3pb+fn+XnAPLY8i1Ys4OwSh+SrNlhoe/nds896QHtrR5XBhlaP+FuPsU8bYldsTJ9xudSSuleJHrk4qpXk1Nzz7KIvGKV+Wv/WRXjaQ174ap2KLfrsC3iuWU+RU9ta9/THtsrjfq++NiatnKf5nA3evtLGOnrlh3wTY7Ho+dXbM823b8HelbofubOdCLQIqG/Wf2//k4PG5aw13a7DVtbo2Xob5Wvm0GEvY0tqtXnWiDXQ6g6/GoXUNrWnt1YeffNbp1eX6xJF5l4bIo995qpL1Xa29NbgrpeCxZkni4InC3DLnnZOCzDr2HIYOB/44mlRPJzbTiCDnmXjaIe6z8tBbuVfAtId17k4/WQJ3BOy3ZPfI34Y30v4I3fvnJYv9i/JfTYUzHqYwqb1YcuvHn+URT8/QmQtCZzHFTdxjy2JERu3iI2JS+a0+UM/3bCM/C2Zl8bIWw4IZ2ywZYuxaymxbufrtzauocisficewW0k1zif6ly86W/npb/lD1/Wd561cKRjay0mT5cvi3Xqek+nPCLD5V5fS/G5l09bY5FDJiyjRz7xp82D8N+6ldN0X5sHD5lbfYFDLhjAm20wHMW9znff2pK8CLZtm7Xb8z11Z6SbLHEL4dOXPOFLrReJcfjblg31Su6N9JsvR+SuGlF1Vdl71kHlj97kn7yGRfCIz/G3t77IgO0lim09/Lfmpia2+07mZD9p4+25pbpGYZg41Vi2c/KMn5/R4x4ewS580RG+tOEfxbhXG9o9PnGJzLat/EftEBfyzOtRxqu/0dGrhxXb6vMRH2IHbJKrbHSvr6XkWPK2Hc9z4phn7ZYv4dubA/jhxQ5t1lXiVeMU2eHB74qNZ37+2T8+eXLpisArbDCVvtgpVrErffdqzyV7vhhfv5gvQu592dG3ALK+BXgTcP8sKV9llmB11XpDweNHkktQujzpZP8SvDxutnhdS2G7KHdLkDdMdrV6l0WyTvOm1/qmL+OR3evLWHjZ28qiv5K3uuCVfrJ9YVmSZ42vN1a0JFdY7rXmoOjLc2zJBLq8PZJ9KT6Zs9Wyk07ybkV5y+3JzFvzUV3sFI+lcJ35zXa5MMqLo3qO8N8C/+jzUyD+qQfJbbHmF8yWQhXWB7X58ge3yKRXzFzLpnJvrTxIYWeyr0WwUwuOEltRuy6OysFf1yOc4X6kHvfWKEwTPzr4mXpgrOo0Xik+JQ/qWE9Xxo2lLi2b2G4fxPsI5UtzO0ccq88Z50fs4luPR27HN/mOR03Vf4TIT23cWpfRtcXT0xt7EqOWh1wys6aMq/vR1/J7Zq8YmEMuHZ631jwdMIr9ZMAL1tZuS9a5nAjhw4/aXzuqtSF5yiY6KtFPLoo8OtKXts7ZawfZMHD16gPbyRrFoeoMLrBK/DJ+1Icj9Rkm6FItMR4be5jF1rY9kgM9DNnHnxYTemr+5tlvHLAzOdHac+n5qA3kWTv8lNPJdf2x3RpxFjhMi7D1xF9eHO5uF+fXsd5XM0wLAOv4crC5mzO6IWMxrvvmZo63RG9w3sQid0mIrjh8ZHlDCeHV11K+XhirF/6e3dG9BOnsCwGc9O2hvE3Cr0fLYr376hW/q946By/dPUp8Wj8887XOJb/FM3bW+fq2KHHMWz1MerjHtvBtydwzBoPW/uheiteaM3ys15bc5JC5PYJdza8eT9uXHKx4Vh5YLIVtxWvEE9xqru65H+EMjzZ/4vuWf+bRW9d+Yt/DjCz81Y7kF1ktbY1t6Ulub9ne6rrmObm1d823OuLDKM4t/57nYHZUZjC7NE/sxLAXr2pf7JDLNd54sgZq3kSumLlv52RNVB3u8cnVlqKjlYNPbvKBLnbi4bf1rL9ikHWgPxdbepR4RnbLY41lLp0jvsjhQ883ctlNHhkjnlY/ncnZ2NHyeCazHfesv6XEeWRHMO3FoZXlOTWixiA6ejWFXW3tCn5H13/mjdbzUTv4U/dXzyH+wazVFR3t+iJHPgSfEZ6XfMh4D8ue7Ow1rZ3xI21vLxj5kjmjNnbUHBjx6hf/NgdG/HB03dGer9N3zOObkQ2pHz28SUudOpO8x6aFZ/2PPxfFSx7dp/T33ljuc2/35IvE4kSXsf272ksy3HsrykRfRNi2JGK6NtslAdc3V3P44m3Gm6437yVBzt4Y8xbpaxkbXObgz+9j6duifHke+bok9fomSH8ldrZzluK0vgX6orEkXWW/+6KQOGUQPuYtibHarZ9slC8jrSxjfDdvi/CYG515Ft/4XecfiWudd+RebHokTrGzjotnsIc3TLxpV0qetD4theVeHMyvb/bJE/LI6RH9y8K+Jyu84lVtZ58vQksRDcva5kvUWefOBzJH/8FcT0Qw6uU/XIzLB3n3EMqXr3YtkEm2/IstD9GzNVc+08MvOSCO7i+tj8jcWmfhOdrG5+ALa1d0Zc3XvKEj423/SP8oZ8NPjxyAi/Vd7QlOsOrRlg3WhPmu2EyXermX1AJz6t7APnXe7+qzOfZGJlsrf/prW7F3z8YtX+rcek9XsGMPW1NP+ZzLHDYZ6xEb1PmWyE6tb8fYjEYyW/48w6s3hy/wtF5H8Y4MLR52J7Z1rHffwze1oVeDejJu0dezg1w2qPV8qv57RrVv7ej8Az94yM+ckTpsu7qit4dNsK/1Ofkw8i9KMx7+9F/Txo5RDrTriu4jeo/wjuzfa0N0WcPurcfgW9duK2+kt/avB/Pa8TTuGSwQDhUJcqtHYiJOWHxZ8PrrHMnL+fC3ctpnc9tElRw2fYXRwnJACgVs8msBDz/9rbzM1fLTAsFf7Q4P+TnEKaAJqjlkG6+FlS5jNi344acDPnBAbdHEg7d3YM28drOLXRJqq6CIDfkhz3CqWBljm7EWq5Yvch7StrHakhU/a2Fw3yuKeNt+WLd4i7M+rcs8vsMx8YU7LIKdNeFq4xDb2/yJTP2V9Kcg1/5638tD42wexZr9ya/IqpgZo9ulP7yVJ/OOtpHR4hw5+vHQXX2rNSO817TkkC1XHTwTU/3L16wznSP58aHah1f/yK+RrPSLs3hZ12ypOtgbatdwxlpbwp824+FPf69Vo+BT7ZDb8nOUUz05+uh18UcLH7K1R7AKHlljVR850VH799zLbdjzzRq2b1i7e/egVgfsEkeyrbVQMGzXf8bT4qu1VczISTzkQEvBBw5HqIen+emP3J7Mmkv1fosXX3Bp6110HcmLnq6tvti5ZYf5bHN+sB5rzssV+XsJZ/LFi5xb+BNs2AY/8l36PaPKs3Y8g3/YEKr36dMGx/TBo56D0v8026M2VF/kAGzVBGe1uifju5QLrV/rwbwqqAzpPyq0yuBsilq7yCqfRA5Jcs+Kn4NRvhJyPIlc+TPvSCvwZNSiaH587slnP3skeYpSqzMHuVFSwYMf7QbPZ2PxLwuVHkXWmICH2GeMrDY+WxuGWNSCHnlkxL9aZDKeNgscTi762ZIrfPyALV2tfeG5VbtXPnu9FLFZfBIrti8/bjozJ1+zehvcGePyQH89YPPbBU+yYQaPilFeslpZz/JZ/ozyNHnesweGPYLD3lj05qcva3AkK/34cm8ujLNuIuualhwkhnnpU3itQX299aFffEMjH+SV+XvyKrK0cjZXNn45VHXKs/rClxo1sqXKzz086dlDNZ/38I94tupVbw782FljX/nib+1zr/9ofpij7tJlrWjVNDkiH7I3tbouPcsnOVM/Cpmjj1x6tvZLfvTWrnXLNm07nrgmLy7ZmPERzhlvW/pzUGnHRs/4XZV6Pia2R22qcrfu99oRGXLRemQXm8TP/VbsMhdOeNs4Zfzadm99DobBdKQv4+Ef8dX+IzkQzLNfkiNX5bD2iN5qw5H7W9jAzqNra2Tji5JfQQd+C8A1AamKbBI5CB5Nvmx+OQiSm8ISEKuu3PvRvADvKZjxt/quL/2RmXbUn3H28TcbR/pra+EKXk+WeXzDUxe2fhf5bBUz8+uPkauO0T3Z5lfZldeGgyc+1LHcO1CIaw6u+uvhIHzPYwtXGDoI9PC/lc3JU3Ea0SgG4WdrtTHrQH+l6Kp99b7KqP3X3EeWl8qnSdFT12XVpx+Fz33WxkNzMWuEbC9biWHk9vAWG4c3a8M6HZF1hbZ4RnNtdIhdaltPhroit61N/HsO/2x3VayD78iW2h/eGos6fu09m/gg36sOPtpLeutHrFxwNr9ukg67KHHcYxe9+elmrRn0ywO5Ql/vQ8cl+eYnZ1vs0n9JRm+cbcGtHYcJSk6346Nn9vQocaljeTGAM1uqb2KZPK5z3OMPjuTSiVcu13oTeXhy38p6yPNeO6KDzfLNJSflBLt66zNztPGvxajyHL0PHhWvLRnJg1F8Mzfj4U//qD2aA7Bje3tmg6f4Pwt6qA3iTYbzZ+Lf7tVH/HhR8bJgXW3RiuBa4PYIt2hsVGQCu1dE98hpebaKIFAkkIXS+tHKyXMSLgmtnw529xZ+jz+ytCk6FtuIyL1EI566MOjCl2J2SaZxcyRQ9bfOIx924atjuTffgUV85ceWvMx5Xlq25icVYvy0KOumxuuoLi8/PYL7EeLz0fU7kh9/YHcrmT1d0WO99fT01mHWTNqe3D19NhXkUBs7PGfN9ORnTs9W/Jnbs5vsPSSnyKkvC715bMYXXXiiv9riPj89quP4jTnIqi0VA2Mt4VN7t/57iXbOpWfykv/yNzbwyRi7R/uKfmsEj3jwLfXc81ZtHtlFZrunyA++32pvG+m+tl8MW0pdan1p+drnUa1Mf8178UG9n4L0bIouMe7ZZW2xO2M1F6reyHlou9eO6GGDOQ7kcoH/e3KCX3LzyP4dnaM22Oytz8EveTGSm/Hwj/jSfzQHrGu54VBLR16C4ePayhs6nVfgTw7+a+ihNsBeLNWEXu4ftekbSSLOVRJclwVxxFlzvOVwlIGRX2XvuY89NRk4r7D2riSlsSziLT0CyVaFv1Kes9lmTHKYQ090ZUybcbp74+HlT7BNX1ryUfU5Y7WFDftge4k38ywWMbm0MUmukX2RRWf0khu7M360ZRd/6H3adCSXr7FFHsAkeXRJBuxq4RFTh5z2yjpq+/PML+uujUUKziU79oxnXWVtXpoTrKt/mbM1tqXHJsGnFt/kI/+zkUTX3lbc2Ep2bMjckb2woE986rrPffU9fW2MomOrTZwjY4uXztiLL/fVFusNjg76XlZdfp0r8tkon/bGesse+u0Fl2pPZDiUm8NnB+DUe/d5sbYB9kjczMt64aPcIIOvRyg2RFY714E92LZj7XNqNtyDPZ62P7khp8KrlZt7KPFq8xcOvf1uj0zzemsqNrW6RjJj22i87U++Voyj66isVvaR554ddb78gFFsGuVL5sASdvLnlnQUG2vdnGp7a491xv/2BSIxCTbtvNFzMKrjZLmsbdTjqfz1Xl5bH7BUt2NX5dlz/xAbyBdPdUuNyl60R++IZ/1iziGCfWUQKGCnQOwtplHAOPPJlIC9BS1xswEIgsTIs7nmABxYR/XHjrRkC1zAqvLpbBcHu/Hy39wWD8D3iA50yV7j+aJDV/yGP5/pc1ViM5yMw8YzDFvb65z2nn3kRl87nmc8cOf/SD5Z7LBY8WWTvFSQoqNtUxhav1u+r8JzvvS1haxnuzjCDt5yAaVAtPyJW9p23LP8cIXIzxd2sbw2PpHHRjGSqw5tyRV6xBDVww9fEH5213zfGqt6UpPw00EW6q0zaxP+fKYv9kUXO2MrnPDXnMuG0JNNJzm1nlkH5qgX7VqJTnoSs/jPB7+GlmeyY1vi1/vqEpn4R5S6Xf3KPLJrHdSf58hjh7mwkZt8NK/1L/x722rP1pzkUcWm8rPZWOpzaz9eeD/U3qrzFvfyBLYtJefafnlWcw1+/EbiIcf5ntxKXsMPRjWHYRU9+FKvozM5p5/Mtk7QTR/9xsmQw9qqhzw8dFmHkcMmNiQPo7e2eGKjfjZlTo0x+eyhv61B8PJS9hDaa0fVwU/rxCUe1d7Kl3s68CSe6X9ou4UNnajWZ8/WiRrLdnizS5zEFp5afW2cE0tx4DPdyUX3R3KAfHrIzMW2ayh2HZ37EBtgAKt2Pzlqwxl//sbiAvzd33pdnFv/BuMSxAx32+Xw8WQRdva3YZfgrH36R9ey6dzJo5e+yruAtP4t3eUN6o7v0s2yWFcZLR8fWpvIp3eL+FbnkT/Cg53sJ3cPkbMk75nfWzYtxWaVz56lCAztaHXzAbZLwqzzyakkDuxu/cq8ypt7uJnDfkQmHa5KyY09MeQTmS3RlYt8/udZywbz6Kr99b7mWpXPZ3ODjfu9V4sXufxMDrKnUtXV6x/ZWHn5xL42huFJjiyFNl1rG5+qjvAmhmcTvnhI/ODTElvka2SLjedWt3l4jeNtZW2NZW6rR66MMDDHGNvrvNiZNvbWOAYTMRxR8jT+kIe/l+OJeZsLZOurtSV2pd2Ky8i2+E0G2ZXiG/tDyXs4sadiVuNkzpY9WYN03IJi61YcbqUzurb82+tTcgp/9oNbyO3pT62peSjuiWWbj8Er+bXVVtxrDqsfdU3Jsd56Z691XfPbPLzBu86Ljp5NbKlrtGLRq0HV9srrPvledVeea+2IjGDMrhFVHbUehz8y2vhl/JIP4ethkxiEp7b0Zf0np5LPW/4YC3+tGWQb25sD9Ce3tNV/MujYolqXz3Dd8zfDvxB8jQ10JW97OMWus9q4x6aF5wV2LcInfQ0RyFvwknTrF4glyVcvvc16g84b8ZI4d2+7GPIFJfyBxhcVb9VLATz7PSr85C2FZX1TztcO8/akV74eLkUzqtb2yN/YPptYHpbF0f16xl5fCpbFdfe1t0zbvCVzKRZ3PN6YYeOtv6dPPx/haTwES1iJT5WX8dqKVb6SwTn8ZLvYQNZS/O99sTEe/irzl+Ge75VGOATDZWO4h1+db+2IBTni4BrRKK8rP72Jz8i2lt/XyKxNc+Wy2CP2y+lWFlsyFnlyhj+ZS+ayQW/6lLlp2UJOuyYyXls2kX+JfAll07LZ3eNnb75MqlsPITroEsPlYPEQUev6Dr5iktg/VO6DjPpicmJ0qc6ot7W2p0aKmVhMGiOgNqsLlzAeS5gjN0fgvR9dFvnety/z3JJjj02LvhdvqXPKen4RyEYeCxXdHBTbsfbZHJuNwtPbxPBnTg6bnvcUc/xk93j3HOrjz7Xt3sPCSH5eVsixCfcOatHBV4eKEIy8jBi/RDZMhx+HoCoj84K3w0FLe+S3c74uz3t9x1dfmkb+O6TsOVyab5O+RPTutZEsvNaLXMqz2LNd7smTHvVswd/L1978S32xZ4uPnXuw82LhoCPPXcGH34gcPM8T9fB9nuybtjw9BOyLrj0vp0/Piin564TA/GL+dYrmV9AXX3NueUB41hD46uYrnheLHCCetQ1T30Tg64iAl1AHnhzIrS8vHrd6mfg6YtbzaX4x76Hy8D75mcvLop9Wzj3g4bjeTMKer9PP6RfzeTC/WRZMQROBicBEYCIwEXi+EPBi43J43CIfGRwsc7icv8qyhdZp/Q9c81Pk+WFmG6svZXQezL8U2KfSicBEYCIwEZgITAQmAhOBicA5AvNgfo7HfJoITAQmAhOBicBEYCIwEZgITASOIfCNY+yTeyIwEZgITAQmAhOBicBEYCIwEXgaCPwvCd/rJE+psL0AAAAASUVORK5CYII=", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -399,6 +406,7 @@ "import json\n", "from IPython.display import display\n", "\n", + "# https://github.com/78/lv_font_conv (Support cbin format)\n", "lv_font_conv = \"node ./tmp/lv_font_conv/lv_font_conv.js\"\n", "flags = \"--force-fast-kern-format --no-compress --no-prefilter \"\n", "\n", @@ -493,7 +501,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "44c7121f", "metadata": {}, "outputs": [ @@ -504,15 +512,7 @@ "Generating src/font_puhui_basic_14_1.c...\n", "Generating src/font_puhui_basic_16_4.c...\n", "Generating src/font_puhui_basic_20_4.c...\n", - "Generating src/font_puhui_basic_30_4.c...\n", - "Generating build/font_puhui_common_14_1.bin...\n", - "Forced faster kerning format (via classes). Size increase is 700 bytes.\n", - "Generating build/font_puhui_common_16_4.bin...\n", - "Forced faster kerning format (via classes). Size increase is 700 bytes.\n", - "Generating build/font_puhui_common_20_4.bin...\n", - "Forced faster kerning format (via classes). Size increase is 700 bytes.\n", - "Generating build/font_puhui_common_30_4.bin...\n", - "Forced faster kerning format (via classes). Size increase is 700 bytes.\n" + "Generating src/font_puhui_basic_30_4.c...\n" ] } ], @@ -526,61 +526,47 @@ " cmd = f\"{lv_font_conv} {flags} --font {font_path} --format lvgl --lv-include lvgl.h --bpp {bpp} -o {output} --size {size} -r 0x0-0xfffff\"\n", " os.system(cmd)\n", "\n", + "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 14, 1)\n", + "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 16, 4)\n", + "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 20, 4)\n", + "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 30, 4)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0aa3e502", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating build/font_puhui_common_14_1.bin...\n", + "Forced faster kerning format (via classes). Size increase is 708 bytes.\n", + "Generating build/font_puhui_common_16_4.bin...\n", + "Forced faster kerning format (via classes). Size increase is 708 bytes.\n", + "Generating build/font_puhui_common_20_4.bin...\n", + "Forced faster kerning format (via classes). Size increase is 708 bytes.\n", + "Generating build/font_puhui_common_30_4.bin...\n", + "Forced faster kerning format (via classes). Size increase is 708 bytes.\n" + ] + } + ], + "source": [ "def generate_font_bin(font_path, name, size, bpp):\n", " output = f\"build/font_{name}_{size}_{bpp}.bin\"\n", " print(f\"Generating {output}...\")\n", " cmd = f\"{lv_font_conv} {flags} --font {font_path} --format cbin --bpp {bpp} -o {output} --size {size} -r 0x0-0xfffff\"\n", " os.system(cmd)\n", "\n", - "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 14, 1)\n", - "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 16, 4)\n", - "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 20, 4)\n", - "generate_font_source(\"build/puhui-basic.ttf\", \"puhui_basic\", 30, 4)\n", + "# Generate cbin font\n", "generate_font_bin(\"build/puhui-common.ttf\", \"puhui_common\", 14, 1)\n", "generate_font_bin(\"build/puhui-common.ttf\", \"puhui_common\", 16, 4)\n", "generate_font_bin(\"build/puhui-common.ttf\", \"puhui_common\", 20, 4)\n", "generate_font_bin(\"build/puhui-common.ttf\", \"puhui_common\", 30, 4)" ] }, - { - "cell_type": "code", - "execution_count": 12, - "id": "275869d3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating src/font_puhui_common_20_4.c...\n", - "Forced faster kerning format (via classes). Size increase is 700 bytes.\n" - ] - } - ], - "source": [ - "generate_font_source(\"build/puhui-common.ttf\", \"puhui_common\", 20, 4)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "58590bf1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating build/font_puhui_common_20_4.bin...\n", - "Forced faster kerning format (via classes). Size increase is 700 bytes.\n" - ] - } - ], - "source": [ - "\n", - "generate_font_bin(\"build/puhui-common.ttf\", \"puhui_common\", 20, 4)" - ] - }, { "cell_type": "code", "execution_count": 36, diff --git a/managed_components/78__xiaozhi-fonts/idf_component.yml b/managed_components/78__xiaozhi-fonts/idf_component.yml index cafec8d..dabad34 100644 --- a/managed_components/78__xiaozhi-fonts/idf_component.yml +++ b/managed_components/78__xiaozhi-fonts/idf_component.yml @@ -12,4 +12,4 @@ files: license: MIT repository: https://github.com/78/xiaozhi-fonts url: https://github.com/78/xiaozhi-fonts -version: 1.5.1 +version: 1.5.2 diff --git a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_14_1.c b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_14_1.c index a994bd4..63c381e 100644 --- a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_14_1.c +++ b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_14_1.c @@ -760,6 +760,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+0165 "ť" */ 0x15, 0x4f, 0x44, 0x44, 0x44, 0x70, + /* U+016F "ů" */ + 0x38, 0xa3, 0x80, 0x86, 0x18, 0x61, 0x86, 0x18, + 0xdd, + /* U+017A "ź" */ 0x8, 0x40, 0x1f, 0xc, 0x61, 0xc, 0x63, 0xf, 0xc0, @@ -956,6 +960,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+0E08 "จ" */ 0xfa, 0x10, 0x59, 0x64, 0xe1, 0x4, + /* U+0E09 "ฉ" */ + 0x7c, 0x2, 0x62, 0xa2, 0x62, 0x26, 0x3e, 0x26, + /* U+0E0A "ช" */ 0x67, 0x96, 0xd1, 0x45, 0x14, 0x4e, @@ -1170,6 +1177,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x86, 0x18, 0x61, 0x86, 0x18, 0xdd, 0x0, 0x1, 0x0, + /* U+1EE7 "ủ" */ + 0x38, 0x23, 0x0, 0x86, 0x18, 0x61, 0x86, 0x18, + 0xdd, + /* U+1EED "ử" */ 0x70, 0x8, 0x30, 0x1, 0x85, 0x87, 0x84, 0x84, 0x84, 0x84, 0x8c, 0x74, @@ -1194,9 +1205,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x14, 0x1f, /* U+304A "お" */ - 0x10, 0x1, 0x0, 0x12, 0x6f, 0xc3, 0x10, 0x1, - 0x0, 0x1f, 0xc3, 0x6, 0x50, 0x29, 0x2, 0x90, - 0x47, 0x38, + 0x10, 0x1, 0x2e, 0xfc, 0x31, 0x0, 0x10, 0x1, + 0xfc, 0x30, 0x65, 0x2, 0x90, 0x29, 0x4, 0x73, + 0x80, + + /* U+304B "か" */ + 0x8, 0x0, 0x80, 0x8, 0x47, 0xe6, 0x11, 0x21, + 0x13, 0x31, 0x12, 0x11, 0x21, 0x6, 0x10, 0x42, + 0xc, 0xe0, /* U+304C "が" */ 0x0, 0x0, 0x41, 0x42, 0xa, 0x10, 0x87, 0xe6, @@ -1211,6 +1227,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0x18, 0x61, 0x4, 0x10, 0x30, 0x30, 0x10, 0x10, 0x18, 0x10, + /* U+3053 "こ" */ + 0x7f, 0x0, 0x0, 0x0, 0x8, 0x4, 0x2, 0x1, + 0x80, 0x7f, 0x80, + /* U+3055 "さ" */ 0x8, 0x1, 0x0, 0x7d, 0xf8, 0x1, 0x0, 0x43, 0xe9, 0x86, 0x40, 0x10, 0x6, 0x0, 0x7c, @@ -1220,14 +1240,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x82, 0xc6, 0x78, /* U+3059 "す" */ - 0x2, 0x0, 0x43, 0xff, 0x81, 0x1, 0xe0, 0x44, - 0x8, 0x81, 0x10, 0x1e, 0x0, 0x40, 0x10, 0x1c, - 0x0, + 0x2, 0x7, 0xfe, 0x8, 0xf, 0x2, 0x20, 0x44, + 0x8, 0x80, 0xf0, 0x2, 0x0, 0x80, 0xe0, 0x0, /* U+305B "せ" */ - 0x0, 0x81, 0x8, 0x10, 0x81, 0x8, 0x3f, 0xfd, - 0x8, 0x10, 0x81, 0x38, 0x10, 0x1, 0x0, 0xf, - 0xc0, + 0x0, 0x81, 0x8, 0x10, 0x83, 0xff, 0xd0, 0x81, + 0x8, 0x13, 0x81, 0x0, 0x10, 0x0, 0xfc, /* U+305F "た" */ 0x0, 0x3, 0x0, 0x58, 0x7e, 0x1, 0x0, 0x27, @@ -1239,9 +1257,17 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xc8, 0x1, 0x0, 0x64, 0x8, 0x81, 0x10, 0x41, 0xf0, + /* U+3061 "ち" */ + 0x10, 0x4, 0x6f, 0xf0, 0x40, 0x20, 0xb, 0xe3, + 0xd, 0x81, 0x0, 0x40, 0x21, 0xf0, + /* U+3063 "っ" */ 0x1f, 0x70, 0xc0, 0x20, 0x10, 0x18, 0x18, 0x70, + /* U+3064 "つ" */ + 0xf, 0x8f, 0xb, 0x0, 0x80, 0x10, 0x2, 0x0, + 0x40, 0x10, 0xc, 0xe, 0x0, + /* U+3066 "て" */ 0xf, 0xff, 0x80, 0xc0, 0x20, 0x10, 0x4, 0x1, 0x0, 0x40, 0x8, 0x3, 0x0, 0x38, @@ -1259,10 +1285,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x40, 0x8, 0xff, 0x0, 0x40, 0x8, 0x1, 0x0, 0x22, 0x4, 0x40, 0x8c, 0x10, 0xfe, 0x0, 0x0, + /* U+306E "の" */ + 0x1f, 0x6, 0x99, 0x11, 0x62, 0x18, 0xc3, 0x10, + 0x62, 0xc, 0x82, 0x60, 0xc0, 0x60, + + /* U+306F "は" */ + 0x41, 0x8, 0x22, 0x7f, 0xc0, 0x88, 0x11, 0x2, + 0x20, 0x44, 0x78, 0x91, 0xd2, 0x26, 0x3c, 0x0, + /* U+307E "ま" */ 0x4, 0x1, 0xf, 0xfc, 0x10, 0x4, 0x1f, 0xe0, 0x40, 0x10, 0x7e, 0x21, 0xe8, 0x4d, 0xe0, + /* U+307F "み" */ + 0x3e, 0x0, 0x20, 0x4, 0x0, 0x44, 0x3e, 0x44, + 0x9c, 0x90, 0xeb, 0x9, 0xe1, 0x0, 0x60, 0x4, + 0x0, + /* U+3082 "も" */ 0x8, 0x1, 0x1, 0x20, 0x1f, 0x1, 0x1, 0x20, 0x1f, 0x88, 0x81, 0x10, 0x22, 0x4, 0x61, 0x7, @@ -1299,8 +1338,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x23, 0x88, 0x2, 0x0, 0x80, 0x20, 0x8, /* U+30A6 "ウ" */ - 0x8, 0x2, 0xf, 0xfe, 0x3, 0x80, 0xa0, 0x20, - 0x18, 0x4, 0x3, 0x1, 0x83, 0x80, + 0x8, 0x3f, 0xf8, 0xe, 0x2, 0x80, 0x80, 0x60, + 0x10, 0xc, 0x6, 0xe, 0x0, /* U+30A8 "エ" */ 0x7f, 0xc0, 0x80, 0x10, 0x2, 0x0, 0x40, 0x8, @@ -1311,8 +1350,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x21, 0x8, 0xe, 0x0, /* U+30AB "カ" */ - 0x8, 0x2, 0x0, 0x83, 0xff, 0x8, 0x46, 0x11, - 0x4, 0x41, 0x30, 0x48, 0x34, 0xb, 0x1e, + 0x8, 0x2, 0xf, 0xfc, 0x21, 0x18, 0x44, 0x11, + 0x4, 0xc1, 0x20, 0xd0, 0x2c, 0x78, /* U+30AD "キ" */ 0x4, 0x1, 0x80, 0x11, 0x1f, 0xe6, 0x40, 0x8, @@ -1329,14 +1368,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x6, 0x0, 0x40, 0x0, /* U+30B5 "サ" */ - 0x10, 0x81, 0x8, 0x10, 0x8f, 0xff, 0x10, 0x81, - 0x8, 0x11, 0x80, 0x10, 0x3, 0x0, 0x60, 0x1c, + 0x10, 0x81, 0x8, 0xff, 0xf1, 0x8, 0x10, 0x81, + 0x8, 0x11, 0x80, 0x10, 0x3, 0x0, 0x60, 0x18, 0x0, /* U+30B6 "ザ" */ - 0x0, 0x10, 0x85, 0x44, 0x28, 0x21, 0xf, 0xff, + 0x0, 0x10, 0x85, 0x44, 0x21, 0xff, 0xe1, 0x8, 0x8, 0x40, 0x42, 0x2, 0x30, 0x1, 0x0, 0x18, - 0x1, 0x80, 0x38, 0x0, + 0x1, 0x80, 0x30, 0x0, /* U+30B7 "シ" */ 0x60, 0x6, 0x0, 0x3, 0x1, 0x60, 0xc0, 0x20, @@ -1351,13 +1390,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0x61, 0x86, 0x60, 0x70, 0x0, /* U+30BB "セ" */ - 0x10, 0x2, 0x0, 0x5f, 0xfc, 0x21, 0xc, 0x23, + 0x10, 0x2, 0x0, 0x4f, 0xbf, 0x29, 0xc, 0x21, 0x4, 0x40, 0x80, 0x10, 0x1, 0xf8, /* U+30BF "タ" */ 0xc, 0x2, 0x1, 0xfc, 0xc3, 0x60, 0xb6, 0x20, 0xd0, 0xc, 0x6, 0x3, 0x3, 0x81, 0x80, + /* U+30C0 "ダ" */ + 0x0, 0x10, 0x21, 0x81, 0x8, 0x1f, 0xc1, 0x84, + 0x18, 0x21, 0xb3, 0x0, 0xd0, 0x3, 0x0, 0x18, + 0x3, 0x80, 0x30, 0x3, 0x0, 0x0, + /* U+30C3 "ッ" */ 0x11, 0x91, 0xdb, 0x42, 0x6, 0xc, 0x18, 0x70, 0x0, @@ -1384,9 +1428,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x7, 0xff, /* U+30CD "ネ" */ - 0x2, 0x0, 0x20, 0x3f, 0xc0, 0xc, 0x1, 0x80, - 0x30, 0x7, 0x81, 0xae, 0x62, 0x30, 0x20, 0x2, - 0x0, 0x20, + 0x2, 0x3, 0xfc, 0x0, 0xc0, 0x18, 0x3, 0x0, + 0x78, 0x1a, 0xe6, 0x23, 0x2, 0x0, 0x20, 0x2, + 0x0, /* U+30D0 "バ" */ 0x0, 0x50, 0x1, 0x42, 0x20, 0x18, 0x80, 0x86, @@ -1501,11 +1545,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x73, 0xfe, 0x92, 0x4, 0x90, 0x24, 0x41, 0x2a, 0x9, 0x92, 0x4a, 0x60, + /* U+4F60 "你" */ + 0x12, 0x0, 0x90, 0x9, 0xfc, 0x48, 0x26, 0xc9, + 0x30, 0x42, 0x8a, 0x84, 0x92, 0x24, 0x91, 0x44, + 0x4e, 0x22, 0x47, 0x0, + /* U+4FE1 "信" */ 0x0, 0x80, 0x84, 0x7, 0xfe, 0x40, 0x2, 0x0, 0x33, 0xf9, 0x80, 0x14, 0xfe, 0x20, 0x1, 0x3f, 0x89, 0x4, 0x48, 0x22, 0x7f, 0x0, + /* U+5019 "候" */ + 0x10, 0x0, 0xdf, 0xa, 0x8, 0x5f, 0xf6, 0x90, + 0x34, 0xfa, 0xa9, 0x5, 0x8, 0x2f, 0xf9, 0x45, + 0x8, 0x6c, 0x4c, 0x10, + /* U+5099 "備" */ 0x12, 0x41, 0x7f, 0x88, 0x90, 0xff, 0xf6, 0x40, 0x53, 0xf2, 0xb4, 0x86, 0xfc, 0x25, 0x21, 0x3f, @@ -1517,7 +1571,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf0, 0x0, /* U+5148 "先" */ - 0x12, 0x2, 0x20, 0x3f, 0xe6, 0x20, 0x42, 0x4, + 0x2, 0x2, 0x20, 0x3f, 0xe6, 0x20, 0x42, 0x4, 0x20, 0xff, 0xf0, 0x90, 0x9, 0x1, 0x11, 0x31, 0x1e, 0x1f, 0x0, 0x0, @@ -1557,10 +1611,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x10, 0x87, /* U+5230 "到" */ - 0x0, 0x3f, 0xd4, 0x82, 0xa2, 0x5f, 0xea, 0x25, + 0x0, 0x3f, 0xd4, 0x82, 0xb2, 0x5f, 0xea, 0x25, 0x44, 0x2f, 0xf5, 0x10, 0xa2, 0x7, 0xf8, 0x80, 0x70, + /* U+52A0 "加" */ + 0x20, 0x2, 0x1f, 0x7d, 0x12, 0x51, 0x25, 0x12, + 0x51, 0x25, 0x12, 0x51, 0x45, 0x14, 0x51, 0x45, + 0xf9, 0xd1, + /* U+52A1 "务" */ 0x8, 0x0, 0xff, 0xe, 0x10, 0xc9, 0x0, 0x70, 0x1c, 0x3d, 0x10, 0x7, 0xfc, 0x4, 0x20, 0x61, @@ -1577,7 +1636,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x84, 0xc4, 0x68, 0xc0, /* U+5316 "化" */ - 0x12, 0x1, 0x20, 0x32, 0x32, 0x26, 0x62, 0xce, + 0x12, 0x1, 0x20, 0x22, 0x32, 0x26, 0x62, 0xce, 0x38, 0xa3, 0x2, 0x60, 0x3a, 0x12, 0x21, 0x22, 0x12, 0x3e, @@ -1591,6 +1650,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0x4, 0x0, 0x70, 0x4, 0xc0, 0x42, 0x4, 0x0, 0x40, + /* U+53CB "友" */ + 0x4, 0x0, 0x60, 0x1f, 0xfe, 0x10, 0x0, 0xfe, + 0x6, 0x10, 0x50, 0x82, 0x48, 0x21, 0x81, 0x1e, + 0x13, 0x1c, 0x20, 0x30, + /* U+53D1 "发" */ 0x4, 0x86, 0x4c, 0x4c, 0x7, 0xff, 0x8, 0x0, 0x80, 0x1f, 0xc1, 0x84, 0x34, 0xc2, 0x78, 0x43, @@ -1617,14 +1681,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x14, 0x81, 0x8f, 0xf0, /* U+544A "告" */ - 0x2, 0x2, 0x20, 0x3f, 0xe4, 0x20, 0x42, 0xf, + 0x32, 0x2, 0x20, 0x3f, 0xe4, 0x20, 0x42, 0xf, 0xff, 0x0, 0x3, 0xfc, 0x20, 0x42, 0x4, 0x20, 0x43, 0xfc, /* U+547D "命" */ - 0x2, 0x0, 0x1e, 0x0, 0x8c, 0xc, 0x1c, 0xff, - 0xfc, 0x0, 0x0, 0x0, 0xf, 0x7c, 0x25, 0x10, - 0x94, 0x42, 0x51, 0xf, 0x4c, 0x1, 0x0, + 0x3, 0x0, 0x32, 0x1, 0x86, 0x1f, 0xff, 0x0, + 0x0, 0x0, 0x3, 0xdf, 0x9, 0x44, 0x25, 0x10, + 0x94, 0x43, 0xd3, 0x0, 0x40, /* U+54CD "响" */ 0x1, 0x0, 0x23, 0xbf, 0xd4, 0x1a, 0x83, 0x57, @@ -1632,9 +1696,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x10, 0x8e, /* U+554F "問" */ - 0xfb, 0xf1, 0x47, 0xef, 0xc5, 0x1f, 0xbf, 0x0, - 0x67, 0xcc, 0x89, 0x91, 0x33, 0xe6, 0x0, 0xc0, - 0xe0, + 0xfb, 0xff, 0x7e, 0x28, 0xfd, 0xf8, 0x3, 0x3e, + 0x64, 0x4c, 0x89, 0x9f, 0x30, 0x6, 0x7, 0x80, /* U+555F "啟" */ 0x10, 0x87, 0xc8, 0x45, 0xf4, 0x52, 0x7f, 0x24, @@ -1642,9 +1705,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xab, 0xd3, 0x2, 0x10, /* U+5668 "器" */ - 0x3c, 0xf0, 0x92, 0x42, 0x49, 0xf, 0x3c, 0x2, - 0x41, 0xff, 0xe0, 0x48, 0x1c, 0x1e, 0x7c, 0xf8, - 0x92, 0x42, 0x49, 0xf, 0x3c, + 0x3c, 0xf0, 0x92, 0x43, 0xcf, 0x0, 0x90, 0x7f, + 0xf8, 0x12, 0x7, 0x7, 0x9f, 0x3e, 0x24, 0x90, + 0x92, 0x43, 0xcf, 0x0, /* U+5728 "在" */ 0x2, 0x0, 0x20, 0x1f, 0xfe, 0x18, 0x0, 0x88, @@ -1652,7 +1715,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0x20, 0x3f, 0xf1, 0x0, 0x0, /* U+5831 "報" */ - 0x13, 0xf7, 0xe1, 0x12, 0x11, 0x27, 0xfe, 0x4, + 0x10, 0x7, 0xff, 0x12, 0x11, 0x27, 0xfe, 0x4, 0xbe, 0x4a, 0xaf, 0xea, 0x12, 0x6f, 0xe6, 0x12, 0xe1, 0x31, @@ -1671,6 +1734,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x20, 0xff, 0xf0, 0x60, 0x7, 0x0, 0x98, 0x30, 0xce, 0x3, 0x80, 0x0, + /* U+597D "好" */ + 0x20, 0x2, 0x3f, 0xf8, 0x24, 0x8c, 0x48, 0x84, + 0x88, 0x4f, 0xf5, 0x8, 0x30, 0x83, 0x88, 0x48, + 0x88, 0x38, + /* U+59CB "始" */ 0x20, 0x81, 0xd, 0x3e, 0x48, 0x94, 0x24, 0xff, 0xa4, 0x1, 0x20, 0xa, 0x7e, 0x72, 0x11, 0x90, @@ -1687,9 +1755,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xc, 0x80, 0xb4, 0xc, 0x7f, 0x80, 0x0, /* U+5BFB "寻" */ - 0x3f, 0xe0, 0x1, 0x0, 0x8, 0x7f, 0xc0, 0x2, - 0x1f, 0xf0, 0x1, 0x1f, 0xff, 0x10, 0x40, 0x42, - 0x1, 0x10, 0x3, 0x80, + 0x3f, 0xe0, 0x1, 0xf, 0xf8, 0x0, 0x43, 0xfe, + 0x0, 0x23, 0xff, 0xe2, 0x8, 0x8, 0x40, 0x22, + 0x0, 0x70, /* U+5C06 "将" */ 0x11, 0x0, 0x9f, 0x95, 0x84, 0xb6, 0x45, 0x1c, @@ -1697,14 +1765,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0x48, 0x21, 0xc0, /* U+5C07 "將" */ - 0x48, 0x82, 0x4f, 0x92, 0xac, 0xf2, 0xc0, 0x8e, + 0x8, 0x82, 0x4f, 0x92, 0xe4, 0xf2, 0x40, 0x8e, 0x5, 0xd3, 0xe8, 0x9f, 0xff, 0x4a, 0x22, 0x49, 0x12, 0x9, 0x11, 0xc0, /* U+5C0B "尋" */ - 0x7f, 0xc0, 0x4, 0x7f, 0xc0, 0x4, 0x7f, 0x8f, - 0xbe, 0x22, 0x2f, 0xfe, 0x0, 0x8f, 0xff, 0x30, - 0x80, 0x38, + 0x7f, 0xc7, 0xfc, 0x0, 0x47, 0xf8, 0xfb, 0xe2, + 0x22, 0xff, 0xe0, 0x8, 0xff, 0xf3, 0x8, 0x3, + 0x80, /* U+5C11 "少" */ 0x4, 0x0, 0x40, 0x34, 0x82, 0x4c, 0x64, 0x64, @@ -1736,14 +1804,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x90, 0x6, /* U+5F55 "录" */ - 0x7f, 0xc0, 0x4, 0x0, 0x47, 0xfc, 0x0, 0x4f, - 0xff, 0x44, 0x22, 0x64, 0xd, 0x83, 0x48, 0xe4, - 0x69, 0xc1, 0x0, 0x0, + 0x7f, 0xc0, 0x4, 0x7f, 0xc0, 0x4, 0xff, 0xf4, + 0x42, 0x26, 0x40, 0xd8, 0x34, 0x8e, 0x46, 0x9c, + 0x10, 0x0, /* U+5F85 "待" */ - 0x0, 0x0, 0x84, 0x8, 0x20, 0x8f, 0xe9, 0x8, - 0xf, 0xfc, 0x80, 0x8c, 0x4, 0xaf, 0xf9, 0x21, - 0x8, 0x88, 0x40, 0x42, 0xc, 0x0, + 0x10, 0x81, 0x84, 0x19, 0xfd, 0x21, 0x1, 0xff, + 0x90, 0x11, 0x80, 0x95, 0xff, 0x24, 0x21, 0x11, + 0x8, 0x8, 0x41, 0x80, /* U+5F8C "後" */ 0x11, 0x0, 0x89, 0x8, 0x98, 0x9f, 0x81, 0x1a, @@ -1780,6 +1848,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1f, 0x20, 0xaf, 0xc5, 0x7f, 0x29, 0x1, 0x64, 0x95, 0xa, 0xa7, 0x80, + /* U+6211 "我" */ + 0x1, 0xf, 0xd4, 0x11, 0x21, 0x10, 0xff, 0xf1, + 0x10, 0x11, 0x27, 0xd4, 0x91, 0x81, 0x39, 0x1c, + 0x96, 0x6, + /* U+624B "手" */ 0x0, 0x7, 0xfe, 0x6, 0x0, 0x60, 0x7f, 0xe0, 0x60, 0x6, 0xf, 0xff, 0x6, 0x0, 0x60, 0x6, @@ -1791,12 +1864,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf6, 0x1, /* U+627E "找" */ - 0x22, 0x2, 0x28, 0x22, 0x4f, 0xa1, 0x2f, 0xe2, - 0x22, 0x2a, 0x27, 0x14, 0xa1, 0x82, 0x30, 0x27, - 0x92, 0x8a, 0xe0, 0x60, + 0x22, 0x82, 0x24, 0xfa, 0x12, 0xfe, 0x22, 0x22, + 0xa2, 0x71, 0x4a, 0x18, 0x23, 0x2, 0x79, 0x28, + 0xae, 0x6, /* U+633F "挿" */ - 0x20, 0x1, 0x3f, 0x8, 0x21, 0xef, 0xf2, 0x8, + 0x20, 0x31, 0x3f, 0x8, 0x21, 0xef, 0xf2, 0x8, 0x13, 0xf8, 0xd2, 0x5c, 0xfe, 0x24, 0x91, 0x3f, 0x88, 0x20, 0x81, 0x0, @@ -1806,14 +1879,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x9, 0x8c, 0xd0, 0x30, /* U+6383 "掃" */ - 0x27, 0xf1, 0x0, 0x88, 0xfc, 0xf0, 0x22, 0x7f, + 0x20, 0x1, 0x3f, 0x88, 0xfc, 0xf0, 0x22, 0x7f, 0x14, 0x0, 0xdf, 0xec, 0x7e, 0x24, 0x91, 0x24, 0x88, 0x2c, 0xc1, 0x0, /* U+63A2 "探" */ - 0x20, 0x1, 0x7f, 0x8a, 0x5, 0xf5, 0x22, 0x24, - 0x12, 0x10, 0xe4, 0x5d, 0xfe, 0x23, 0x81, 0x3a, - 0xb, 0x4c, 0x72, 0x3c, 0x10, 0x0, + 0x20, 0x1, 0x7f, 0xbe, 0x84, 0x54, 0xa2, 0x42, + 0x1c, 0x8b, 0xbf, 0xc4, 0x70, 0x27, 0x41, 0x69, + 0x8e, 0x47, 0x82, 0x0, /* U+63A5 "接" */ 0x21, 0x2, 0xff, 0xf2, 0x42, 0x24, 0x2f, 0xf3, @@ -1821,9 +1894,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xcd, 0xc3, /* U+63CF "描" */ - 0x22, 0x42, 0x24, 0x2f, 0xff, 0x24, 0x20, 0x2, - 0xfe, 0x39, 0x2e, 0x92, 0x2f, 0xe2, 0x92, 0x29, - 0x22, 0x92, 0x6f, 0xe0, + 0x22, 0x42, 0xff, 0xf2, 0x42, 0x24, 0x2f, 0xe3, + 0x92, 0xe9, 0x22, 0xfe, 0x29, 0x22, 0x92, 0x29, + 0x26, 0xfe, /* U+63D2 "插" */ 0x20, 0x11, 0x3f, 0x3c, 0x20, 0x4f, 0xf2, 0x8, @@ -1836,9 +1909,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4e, 0xe3, 0x8, 0x10, /* U+6557 "敗" */ - 0x1, 0x7, 0x90, 0x49, 0x4, 0xbf, 0x7a, 0x24, - 0xe2, 0x79, 0x64, 0x94, 0x49, 0x47, 0x88, 0x1, - 0xc4, 0xb6, 0xc6, 0x38, 0x41, + 0x1, 0x7, 0x90, 0x49, 0xf7, 0xa2, 0x4e, 0x27, + 0x96, 0x49, 0x44, 0x94, 0x78, 0x80, 0x1c, 0x4b, + 0x6c, 0x63, 0x84, 0x10, /* U+65B0 "新" */ 0x0, 0x1, 0x3, 0xff, 0xc4, 0x90, 0x29, 0xf, @@ -1861,9 +1934,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x40, 0x1c, /* U+66F4 "更" */ - 0x7f, 0xf0, 0x10, 0x0, 0x80, 0x7f, 0xc2, 0x22, - 0x1f, 0xf0, 0x88, 0x87, 0xfc, 0x12, 0x0, 0x70, - 0x3, 0x80, 0x73, 0xe4, 0x0, 0x0, + 0x7f, 0xf0, 0x10, 0xf, 0xf8, 0x44, 0x43, 0xfe, + 0x11, 0x10, 0xff, 0x82, 0x40, 0xe, 0x0, 0x70, + 0xe, 0x7c, 0x80, 0x0, /* U+66FF "替" */ 0x8, 0x43, 0xff, 0xc2, 0x10, 0xff, 0xf1, 0x86, @@ -1871,22 +1944,26 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0x8, 0x3f, 0xc0, /* U+6700 "最" */ - 0x3f, 0xe1, 0x1, 0xf, 0xf8, 0x40, 0x41, 0xfc, - 0x7f, 0xfc, 0x90, 0x7, 0x9e, 0x3c, 0xa1, 0x23, - 0x3f, 0xb8, 0xa, 0x30, + 0x3f, 0xe1, 0xff, 0x8, 0x8, 0x3f, 0x8f, 0xff, + 0x92, 0x0, 0xf3, 0xc7, 0x94, 0x24, 0x67, 0xf7, + 0x1, 0x46, /* U+6709 "有" */ 0x2, 0x0, 0x30, 0x1f, 0xfe, 0x18, 0x0, 0x80, 0xf, 0xf0, 0xc0, 0x9b, 0xfc, 0x10, 0x20, 0x81, 0x7, 0xf8, 0x20, 0x41, 0xe, 0x0, + /* U+670B "朋" */ + 0x79, 0xe9, 0x25, 0x24, 0xbc, 0xf4, 0x92, 0x92, + 0x5e, 0x7a, 0x51, 0x4a, 0x31, 0x46, 0x79, 0x80, + /* U+670D "服" */ - 0x7b, 0xe4, 0xa2, 0x4a, 0x24, 0xae, 0x7a, 0x4, - 0xbe, 0x4b, 0x27, 0xaa, 0x4a, 0xc4, 0xa4, 0x8a, - 0xe9, 0x31, + 0x7b, 0xe4, 0xa2, 0x4a, 0x67, 0xa0, 0x4b, 0xe4, + 0xb2, 0x7a, 0xa4, 0xac, 0x4a, 0x48, 0xae, 0x93, + 0x10, /* U+671F "期" */ - 0x24, 0xf7, 0xe9, 0x24, 0x92, 0x49, 0x3c, 0xf2, + 0x24, 0x7, 0xef, 0x24, 0x92, 0x49, 0x3c, 0xf2, 0x49, 0x3c, 0x92, 0x4f, 0xfe, 0x92, 0x89, 0x65, 0x1c, 0x33, 0x0, 0x0, @@ -1901,12 +1978,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x44, 0x8a, 0x28, 0x70, /* U+67E5 "查" */ - 0x2, 0x3, 0xff, 0x81, 0xc0, 0x35, 0x8e, 0x23, - 0xcf, 0xe0, 0x41, 0x3, 0xf8, 0x10, 0x40, 0xfe, + 0x2, 0x3, 0xff, 0x81, 0xc0, 0x35, 0x86, 0x23, + 0x4f, 0xe0, 0x41, 0x3, 0xf8, 0x10, 0x40, 0xfe, 0x0, 0x0, 0xff, 0xe0, /* U+68C0 "检" */ - 0x11, 0x80, 0x8a, 0x1e, 0x88, 0x68, 0x23, 0x3e, + 0x10, 0x80, 0x8a, 0x1e, 0x88, 0x68, 0x23, 0x3e, 0x98, 0x1, 0x72, 0x4a, 0x54, 0x12, 0xa0, 0x95, 0x4, 0x10, 0x3f, 0xe0, @@ -1916,7 +1993,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0xc8, 0x38, 0x30, /* U+6A21 "模" */ - 0x11, 0x20, 0x5f, 0xe7, 0x92, 0xd, 0xfc, 0x34, + 0x11, 0x20, 0x5f, 0xe1, 0x12, 0x1f, 0xfc, 0x34, 0x10, 0xdf, 0xc5, 0xc1, 0x14, 0xf8, 0x17, 0xf8, 0x43, 0x1, 0x12, 0x7, 0x86, @@ -1926,7 +2003,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xb, 0x3a, 0x56, 0x70, /* U+6AA2 "檢" */ - 0x10, 0xc0, 0x44, 0x87, 0xb3, 0xd, 0xfe, 0x30, + 0x10, 0xc0, 0x47, 0x87, 0xb3, 0xd, 0xfe, 0x30, 0x0, 0xff, 0xc5, 0xcd, 0x15, 0xfc, 0x12, 0x20, 0x4c, 0x81, 0x45, 0x7, 0x22, @@ -1951,8 +2028,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x19, 0x50, 0x92, 0x95, 0x97, 0x0, 0x0, /* U+6D4B "测" */ - 0xde, 0x2e, 0x54, 0x4a, 0xcd, 0x5d, 0xaa, 0xb5, - 0x46, 0xaa, 0xd5, 0x5a, 0xb1, 0x86, 0x48, 0xd0, + 0x80, 0x2b, 0xd4, 0xca, 0x8d, 0x59, 0xaa, 0xb5, + 0x46, 0xaa, 0xd5, 0x5a, 0xa9, 0x86, 0x48, 0xd0, 0x70, /* U+6D4F "浏" */ @@ -1961,19 +2038,24 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x18, 0x7, /* U+6E2C "測" */ - 0x4f, 0x13, 0x95, 0x9, 0x58, 0xf5, 0x69, 0x52, - 0xf5, 0x9, 0x52, 0xf5, 0x40, 0x54, 0x71, 0x49, + 0x40, 0x16, 0xf5, 0x29, 0x50, 0xf5, 0x49, 0x52, + 0xf5, 0x9, 0x52, 0x95, 0x2f, 0x54, 0x71, 0x49, 0x15, 0x2, /* U+6E80 "満" */ - 0x2, 0x3, 0x12, 0xf, 0xfe, 0x4, 0x84, 0xff, - 0xb0, 0x40, 0x82, 0x1, 0xfe, 0x28, 0x91, 0x55, - 0x8a, 0xac, 0x97, 0xe4, 0x83, 0x0, + 0x42, 0x41, 0x7f, 0xc0, 0x90, 0x9f, 0xf6, 0x8, + 0x10, 0x40, 0x3f, 0xc5, 0x12, 0x2a, 0xb1, 0x55, + 0x92, 0xfc, 0x90, 0x60, + + /* U+6E90 "源" */ + 0x6f, 0xf9, 0xc4, 0x2, 0xfc, 0xd4, 0x22, 0xbf, + 0x5, 0x8, 0xaf, 0xcd, 0x10, 0x5a, 0xb2, 0xa4, + 0x95, 0x62, /* U+6EE1 "满" */ - 0x4, 0x8c, 0x48, 0x7f, 0xf0, 0x48, 0x9f, 0xfc, - 0x28, 0x62, 0x81, 0xfe, 0x54, 0xa5, 0x6a, 0x55, - 0x6d, 0x92, 0x90, 0x60, + 0x4, 0x85, 0xff, 0x4, 0x89, 0xff, 0xc2, 0x86, + 0x28, 0x1f, 0xe5, 0x4a, 0x56, 0xa5, 0x56, 0xd9, + 0x29, 0x6, /* U+6EFF "滿" */ 0x84, 0x45, 0xff, 0x24, 0x40, 0x7c, 0xc1, 0x5, @@ -1986,8 +2068,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x14, 0xa4, 0xee, 0x10, /* U+700F "瀏" */ - 0x9f, 0x17, 0x35, 0x1d, 0x59, 0xd5, 0x44, 0x50, - 0xa5, 0x3f, 0x54, 0x45, 0x5f, 0x55, 0x51, 0x84, + 0x88, 0x15, 0xf5, 0x7b, 0x51, 0xd5, 0xd5, 0x54, + 0xe5, 0x11, 0x54, 0xe5, 0x5f, 0x55, 0x51, 0x84, 0x1b, 0xf7, 0x80, 0x20, /* U+70B9 "点" */ @@ -2006,7 +2088,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x6, 0x92, 0x49, 0x24, 0x0, /* U+7248 "版" */ - 0x50, 0x2, 0x9f, 0x94, 0x80, 0xa4, 0x7, 0xbf, + 0x50, 0x12, 0x9f, 0x14, 0x80, 0xa4, 0x7, 0xbf, 0x21, 0x49, 0xca, 0x8a, 0x54, 0x52, 0x42, 0xa7, 0x27, 0x6d, 0x36, 0x30, @@ -2016,10 +2098,20 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x5, 0x84, 0x38, 0x10, /* U+72C0 "狀" */ - 0x48, 0x82, 0x45, 0x12, 0x24, 0x91, 0x7, 0xbf, + 0x8, 0x82, 0x45, 0x12, 0x24, 0x91, 0x7, 0xbf, 0x4, 0x43, 0xe2, 0x9, 0x18, 0x49, 0x42, 0x49, 0x12, 0x8d, 0x18, 0x20, + /* U+73B0 "现" */ + 0xf7, 0xe4, 0x52, 0x45, 0x24, 0x52, 0xf5, 0x24, + 0x52, 0x45, 0xa4, 0x7a, 0x52, 0x9e, 0x49, 0x18, + 0xf0, 0x0, + + /* U+73FE "現" */ + 0x7f, 0xf1, 0x20, 0x89, 0xfc, 0x48, 0x27, 0xff, + 0x12, 0x8, 0x9f, 0xc4, 0x28, 0x3a, 0x42, 0x12, + 0x43, 0x1e, 0x0, 0x0, + /* U+7528 "用" */ 0x3f, 0xf2, 0x21, 0x22, 0x13, 0xff, 0x22, 0x12, 0x21, 0x3f, 0xf2, 0x21, 0x22, 0x14, 0x21, 0x42, @@ -2031,14 +2123,19 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xe0, /* U+767B "登" */ - 0x2, 0x3, 0xea, 0x1, 0x64, 0x5b, 0x61, 0x8e, - 0x1f, 0xe1, 0x80, 0xd3, 0xf9, 0x10, 0x40, 0xfe, - 0x2, 0x20, 0x11, 0x7, 0xff, 0x0, + 0x2, 0x3, 0xea, 0x1, 0x64, 0x71, 0xc3, 0xfc, + 0x30, 0x1a, 0x7f, 0x22, 0x8, 0x1f, 0xc0, 0x44, + 0x2, 0x20, 0xff, 0xe0, /* U+767C "發" */ - 0x2, 0x3, 0xfe, 0x1, 0x44, 0x51, 0xc1, 0x4, - 0x3d, 0xfe, 0x29, 0xf, 0xce, 0x47, 0xe3, 0x83, - 0x4, 0xf0, 0x23, 0x83, 0x63, 0x0, + 0x2, 0x3, 0xee, 0x13, 0x4c, 0x61, 0x87, 0xbf, + 0x45, 0x21, 0xf9, 0xc8, 0xfc, 0x70, 0x60, 0x9e, + 0x4, 0x70, 0x6c, 0x60, + + /* U+7684 "的" */ + 0x0, 0x4, 0x20, 0x8c, 0x7d, 0xf8, 0xa3, 0x10, + 0x62, 0xcf, 0xc9, 0x88, 0xb1, 0x6, 0x20, 0xc4, + 0x1f, 0x8e, /* U+78BA "確" */ 0x0, 0x80, 0x4, 0x1f, 0xfe, 0x49, 0x12, 0x54, @@ -2081,9 +2178,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x15, 0x8, 0xaa, 0x5, 0x4e, 0x0, 0x0, /* U+7D44 "組" */ - 0x0, 0x1, 0x1f, 0x8a, 0x84, 0x94, 0x25, 0x21, - 0x79, 0xf8, 0xa8, 0x4f, 0x42, 0x3, 0xf3, 0x50, - 0xaa, 0x85, 0x54, 0x28, 0x7f, 0x80, + 0x0, 0x1, 0x1f, 0x9a, 0x84, 0xb4, 0x2f, 0x3f, + 0x15, 0x9, 0xe8, 0x40, 0x7e, 0x6a, 0x15, 0x50, + 0xaa, 0x85, 0xf, 0xf0, /* U+7D61 "絡" */ 0x21, 0x2, 0x3e, 0x4a, 0x2f, 0x54, 0x20, 0xc6, @@ -2101,9 +2198,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x15, 0x4b, 0x24, 0x70, /* U+7DB2 "網" */ - 0x20, 0x2, 0x7f, 0x44, 0x15, 0x55, 0xf5, 0x92, - 0x7d, 0x54, 0x9f, 0xfd, 0xd, 0x1b, 0x51, 0xb5, - 0xda, 0xc1, 0x84, 0x70, + 0x20, 0x2, 0x7f, 0x44, 0x59, 0x59, 0x67, 0xd5, + 0x49, 0xff, 0xd0, 0xd1, 0xb5, 0x1b, 0x5d, 0xac, + 0x18, 0x47, /* U+7EA7 "级" */ 0x10, 0x1, 0x3f, 0x10, 0x88, 0xa4, 0x8f, 0x27, @@ -2111,9 +2208,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3a, 0x48, 0x1c, 0x30, /* U+7EC4 "组" */ - 0x27, 0xe2, 0x42, 0x4c, 0x2d, 0x42, 0xf7, 0xe2, - 0x42, 0x44, 0x2f, 0x7e, 0x4, 0x20, 0x42, 0xf4, - 0x20, 0xff, + 0x27, 0xe4, 0x42, 0x4c, 0x2f, 0x7e, 0x24, 0x24, + 0x42, 0xf7, 0xe0, 0x42, 0x4, 0x2f, 0x42, 0xf, + 0xf0, /* U+7EDC "络" */ 0x11, 0x0, 0x87, 0xc2, 0xa1, 0x13, 0xc8, 0x74, @@ -2126,17 +2223,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0x93, 0xec, 0x90, 0xc3, 0x84, 0x0, /* U+7F51 "网" */ - 0xff, 0xf0, 0x6, 0x93, 0xd5, 0x59, 0xab, 0x22, - 0x66, 0x6d, 0xd5, 0xaa, 0xf8, 0x8e, 0x0, 0xc0, - 0x70, + 0xff, 0xf0, 0x6, 0x92, 0xd5, 0x59, 0x9b, 0x32, + 0x66, 0xed, 0x75, 0xe4, 0x70, 0x86, 0x3, 0x80, /* U+8046 "聆" */ - 0xf9, 0x85, 0x14, 0x52, 0x47, 0x53, 0x58, 0x95, + 0x1, 0x8f, 0x98, 0x52, 0x47, 0x72, 0x58, 0x95, 0x8, 0x77, 0xe5, 0x6, 0x52, 0x4f, 0xb8, 0x10, 0x81, 0x4, /* U+807D "聽" */ - 0x7c, 0x40, 0xaf, 0xe3, 0x84, 0xa, 0xfe, 0x3a, + 0x0, 0x41, 0xff, 0xe3, 0x84, 0xa, 0xfe, 0x3a, 0xa8, 0xaf, 0xe7, 0x80, 0x1e, 0xff, 0x2b, 0x41, 0xed, 0x22, 0xd1, 0x96, 0x7c, @@ -2150,13 +2246,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0x60, 0xce, 0xc, 0x20, 0xc2, 0xc, 0x20, 0xc2, 0x18, + /* U+898B "見" */ + 0x3f, 0xc2, 0x4, 0x3f, 0xc2, 0x4, 0x3f, 0xc2, + 0x4, 0x3f, 0xc0, 0x90, 0x9, 0x13, 0x11, 0xe1, + 0xf0, 0x0, + /* U+89BD "覽" */ - 0x1, 0x7, 0xd0, 0x53, 0xf7, 0xe4, 0x7f, 0xf7, - 0xff, 0x0, 0x3, 0xfc, 0x3f, 0xc3, 0xfc, 0x3f, - 0xc0, 0x91, 0xf1, 0xf0, + 0x1, 0x7, 0xdf, 0x7e, 0x47, 0xff, 0x7f, 0xf0, + 0x0, 0x3f, 0xc3, 0xfc, 0x3f, 0xc3, 0xfc, 0x9, + 0x1f, 0x1f, /* U+89C8 "览" */ - 0x49, 0x4, 0x9f, 0x4a, 0x84, 0xa6, 0x8, 0x23, + 0x9, 0x4, 0x9f, 0x4a, 0x84, 0xac, 0x48, 0x23, 0xfc, 0x20, 0x42, 0x24, 0x26, 0x40, 0x61, 0x1a, 0x1e, 0x1f, 0x0, 0x0, @@ -2200,20 +2301,25 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x22, 0x72, 0x20, 0x3e, 0x71, 0x45, 0x14, 0x52, 0x57, 0x47, + /* U+8AAD "読" */ + 0x20, 0x82, 0x7f, 0xf8, 0x80, 0x3e, 0x70, 0x0, + 0x7f, 0x74, 0x10, 0x55, 0x71, 0x45, 0x14, 0x52, + 0x57, 0x47, + /* U+8ACB "請" */ 0x20, 0x82, 0x7f, 0xf8, 0x80, 0x7e, 0x78, 0x80, 0x77, 0x7b, 0xe0, 0x22, 0x7b, 0xe4, 0xa2, 0x4b, 0xe7, 0xa2, /* U+8B66 "警" */ - 0x24, 0x83, 0xf7, 0xdf, 0xe5, 0xf4, 0xc7, 0xb9, + 0x24, 0x47, 0xff, 0xdf, 0xe5, 0xf4, 0xc7, 0xb9, 0x83, 0x3, 0xff, 0xe7, 0xfc, 0x0, 0x0, 0xff, 0xf, 0xf8, 0x7f, 0xc0, /* U+8BBE "设" */ - 0x67, 0xc2, 0x44, 0x4, 0x40, 0xc7, 0xe8, 0x2, - 0xfe, 0x24, 0x22, 0x64, 0x23, 0x83, 0x18, 0x26, - 0xe1, 0x83, + 0x67, 0xc2, 0x44, 0x4, 0x4e, 0x83, 0x2f, 0xe2, + 0x42, 0x26, 0x42, 0x38, 0x31, 0x82, 0x6e, 0x18, + 0x30, /* U+8BBF "访" */ 0x0, 0x82, 0x8, 0x3f, 0xf0, 0x20, 0xe2, 0x2, @@ -2221,9 +2327,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x20, 0x8e, /* U+8BD5 "试" */ - 0x0, 0x43, 0x2, 0x88, 0x10, 0x1f, 0xf0, 0x4, - 0x70, 0x20, 0xbf, 0x4, 0x48, 0x22, 0x41, 0x12, - 0xc, 0xaa, 0x5e, 0x50, 0x3, 0x0, + 0x40, 0x61, 0x2, 0x83, 0xfe, 0x0, 0x8e, 0x4, + 0x17, 0xe0, 0x89, 0x4, 0x48, 0x22, 0x41, 0x95, + 0x4b, 0xca, 0x0, 0x60, /* U+8BDD "话" */ 0x40, 0x11, 0x7f, 0xc, 0x20, 0x1, 0xe, 0xff, @@ -2231,9 +2337,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x8d, 0x4, 0x4f, 0xe0, /* U+8BEF "误" */ - 0x67, 0xf1, 0xa0, 0x85, 0x4, 0xf, 0xee, 0x0, - 0x17, 0xfc, 0x82, 0x4, 0x10, 0x2f, 0xf9, 0xe, - 0xe, 0x58, 0x5c, 0x70, 0x80, 0x80, + 0x67, 0xf1, 0xa0, 0x81, 0xfd, 0xc0, 0x2, 0xff, + 0x90, 0x40, 0x82, 0x5, 0xff, 0x21, 0xc1, 0xcb, + 0xb, 0x8e, 0x10, 0x10, /* U+8BF4 "说" */ 0x0, 0x23, 0x11, 0xc, 0x50, 0xf, 0xe0, 0x41, @@ -2241,7 +2347,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4d, 0x92, 0x18, 0xf0, /* U+8BF7 "请" */ - 0x40, 0x81, 0x7f, 0x8c, 0x20, 0xf, 0xe0, 0x8, + 0x0, 0x81, 0x7f, 0x8c, 0x20, 0xf, 0xe0, 0x8, 0x37, 0xbc, 0x9f, 0xc4, 0x82, 0x27, 0xf1, 0xff, 0x8d, 0x4, 0x8, 0xc0, @@ -2252,27 +2358,47 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+8D25 "败" */ 0x0, 0x83, 0xe4, 0x11, 0x7e, 0xaa, 0x25, 0x71, - 0x2b, 0x51, 0x52, 0x8a, 0x94, 0x54, 0x41, 0x47, - 0x1b, 0x6d, 0x84, 0x30, 0x0, 0x0, + 0x2b, 0x51, 0x52, 0x8a, 0x94, 0x54, 0x41, 0xc6, + 0xb, 0x69, 0x8e, 0x38, 0x20, 0x80, + + /* U+8D44 "资" */ + 0x44, 0x1, 0x3f, 0x82, 0x4c, 0x47, 0xc, 0xe6, + 0x48, 0xc, 0xff, 0x84, 0x44, 0x22, 0x21, 0x21, + 0x6, 0x70, 0xc0, 0x60, /* U+8D85 "超" */ - 0x27, 0xef, 0x92, 0x21, 0x22, 0x32, 0xfa, 0xe1, + 0x20, 0xf, 0xfe, 0x21, 0x22, 0x12, 0xfa, 0xe1, 0x0, 0x53, 0xe5, 0x22, 0x5a, 0x2d, 0x3e, 0xb0, 0x9, 0xff, /* U+8DB3 "足" */ - 0x3f, 0xe1, 0x1, 0x8, 0x8, 0x40, 0x43, 0xfe, - 0x1, 0x0, 0x88, 0x4, 0x7e, 0x22, 0x1, 0x90, - 0x16, 0x81, 0x8f, 0xf0, + 0x3f, 0xe1, 0x1, 0x8, 0x8, 0x7f, 0xc0, 0x20, + 0x11, 0x0, 0x8f, 0xc4, 0x40, 0x32, 0x2, 0xd0, + 0x31, 0xfe, /* U+8DEF "路" */ - 0x1, 0x3, 0xcf, 0x92, 0x84, 0x9a, 0x47, 0x8e, + 0x1, 0x83, 0xcf, 0x92, 0x84, 0x9a, 0x47, 0x8e, 0x8, 0xf1, 0x58, 0x6b, 0x7e, 0x52, 0x12, 0xb0, 0xbe, 0xfc, 0x4, 0x20, + /* U+8F09 "載" */ + 0x11, 0x47, 0xf2, 0x11, 0xf, 0xff, 0x7e, 0xa1, + 0xa, 0x7e, 0xa7, 0xec, 0x52, 0xc3, 0xc9, 0xff, + 0x51, 0x26, + + /* U+8F7D "载" */ + 0x11, 0x7, 0xd6, 0x11, 0x2f, 0xff, 0x31, 0xf, + 0xf2, 0x21, 0x25, 0xc, 0x7c, 0xc1, 0x9, 0xff, + 0xd1, 0x26, + + /* U+8FBC "込" */ + 0x2, 0x2, 0x8, 0x8, 0x20, 0x41, 0x0, 0x18, + 0x70, 0xc0, 0x89, 0x4, 0x4c, 0x24, 0x21, 0x60, + 0x88, 0x0, 0xa0, 0x8, 0xff, 0x80, + /* U+8FDB "进" */ - 0x42, 0x23, 0x11, 0xf, 0xfe, 0x4, 0x4e, 0x22, - 0x11, 0x10, 0xbf, 0xe4, 0x44, 0x24, 0x23, 0x61, + 0x42, 0x21, 0x11, 0xf, 0xfe, 0x4, 0x4e, 0x22, + 0x71, 0x10, 0xbf, 0xe4, 0x44, 0x24, 0x21, 0x61, 0x16, 0x1, 0xf, 0xf0, /* U+8FDE "连" */ @@ -2286,9 +2412,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x94, 0x1, 0x1f, 0xe0, /* U+9023 "連" */ - 0x40, 0x83, 0x7f, 0xc8, 0x20, 0xf, 0xe0, 0x49, - 0x73, 0xf8, 0x92, 0x44, 0xfe, 0x20, 0x81, 0x7f, - 0xdc, 0x21, 0x1f, 0xf0, + 0x40, 0x81, 0x7f, 0xc8, 0x20, 0xf, 0xe0, 0x49, + 0x73, 0xf8, 0x92, 0x44, 0x7c, 0x2f, 0xf9, 0x4, + 0x16, 0x21, 0x1f, 0xf0, + + /* U+9054 "達" */ + 0x40, 0x83, 0x3f, 0x8c, 0x20, 0x1f, 0xf0, 0x24, + 0x37, 0xfc, 0x82, 0x4, 0xfe, 0x2f, 0xfb, 0x4, + 0x16, 0x21, 0x1f, 0xf0, /* U+914D "配" */ 0xfe, 0xf1, 0x40, 0x9f, 0x84, 0xd4, 0x26, 0xae, @@ -2296,14 +2427,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x5f, 0xbc, /* U+91CD "重" */ - 0x7f, 0xf0, 0x10, 0x3f, 0xfe, 0x4, 0x3, 0xfe, - 0x11, 0x10, 0xff, 0x84, 0x44, 0x1f, 0xc3, 0xff, - 0x80, 0x81, 0xff, 0xf0, + 0x7f, 0xf0, 0x10, 0x3f, 0xfe, 0x7f, 0xc2, 0x22, + 0x1f, 0xf0, 0x88, 0x83, 0xf8, 0x7f, 0xf0, 0x10, + 0x3f, 0xfe, /* U+91CF "量" */ - 0x3f, 0xc2, 0x4, 0x3f, 0xc3, 0xfc, 0xff, 0xf3, - 0xfc, 0x22, 0x43, 0xfc, 0x3f, 0xc0, 0x20, 0x7f, - 0xef, 0xff, + 0x3f, 0xc3, 0xfc, 0x3f, 0xcf, 0xff, 0x3f, 0xc2, + 0x24, 0x3f, 0xc3, 0xfc, 0x2, 0x7, 0xfe, 0xff, + 0xf0, /* U+932F "錯" */ 0x11, 0x21, 0x5f, 0x99, 0x49, 0xfa, 0x41, 0x3f, @@ -2316,24 +2447,20 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x8a, 0x84, 0x67, 0xe0, /* U+9589 "閉" */ - 0xfb, 0xf1, 0x47, 0xef, 0xc5, 0x1f, 0xbf, 0x4, - 0x6f, 0xec, 0x31, 0x8a, 0x36, 0x46, 0x18, 0xc0, - 0x70, + 0xfb, 0xff, 0x7e, 0x28, 0xfd, 0xf8, 0x23, 0x7f, + 0x61, 0x8c, 0x51, 0xb2, 0x30, 0xc6, 0x3, 0x0, /* U+958B "開" */ - 0xf3, 0xf2, 0x47, 0xcf, 0xc9, 0x1e, 0x1f, 0x7f, - 0x64, 0x8c, 0x91, 0xff, 0xb2, 0x46, 0x88, 0xc0, - 0x60, + 0xf3, 0xfe, 0x7e, 0x48, 0xf0, 0xfb, 0xfb, 0x24, + 0x64, 0x8f, 0xfd, 0x92, 0x34, 0x46, 0x3, 0x0, /* U+9593 "間" */ - 0xfb, 0xf1, 0x47, 0xef, 0xc5, 0x1f, 0xbf, 0x0, - 0x67, 0xcc, 0x89, 0x9f, 0x32, 0x26, 0x7c, 0xc0, - 0x60, + 0xfb, 0xff, 0x7e, 0x28, 0xfd, 0xf8, 0x3, 0x3e, + 0x64, 0x4c, 0xf9, 0x91, 0x33, 0xe6, 0x3, 0x0, /* U+95DC "關" */ - 0xfb, 0xf1, 0x47, 0xef, 0xfd, 0xf9, 0x2b, 0x7e, - 0x66, 0xad, 0xfd, 0xaa, 0xb7, 0x76, 0x28, 0xd9, - 0x70, + 0xfb, 0xff, 0x7f, 0xef, 0xc9, 0x5b, 0xf3, 0x35, + 0x6f, 0xed, 0x55, 0xbb, 0xb1, 0x46, 0xcb, 0x80, /* U+95ED "闭" */ 0xc0, 0xd, 0xfe, 0x88, 0xc1, 0x1b, 0xfb, 0xc, @@ -2346,9 +2473,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x70, /* U+96FB "電" */ - 0x7f, 0xe0, 0x40, 0xff, 0xeb, 0x5a, 0xb5, 0xa0, - 0x0, 0x7f, 0xc4, 0x44, 0x7f, 0xc7, 0xfd, 0x4, - 0x10, 0x7e, + 0x7f, 0xef, 0xfe, 0xb5, 0xab, 0x5a, 0x35, 0x87, + 0xfc, 0x44, 0x47, 0xfc, 0x7f, 0xd0, 0x41, 0x7, + 0xe0, /* U+9759 "静" */ 0x11, 0x7, 0xef, 0x4, 0x90, 0xf3, 0xef, 0xc9, @@ -2356,7 +2483,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x12, 0x20, 0xb3, 0x0, /* U+975C "靜" */ - 0x11, 0xf7, 0xf0, 0x4, 0xa4, 0xf8, 0x41, 0x3f, + 0x10, 0x17, 0xff, 0x84, 0xa4, 0xf8, 0x41, 0x3f, 0x76, 0x49, 0xef, 0xe9, 0x12, 0x7b, 0xf3, 0xc4, 0x12, 0x20, 0xb3, 0x0, @@ -2366,9 +2493,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xc2, 0x4, 0x3f, 0xc0, /* U+97FF "響" */ - 0x24, 0x5, 0xff, 0x59, 0xae, 0xfa, 0x5f, 0xa2, - 0xfb, 0x42, 0x83, 0xd4, 0xff, 0xf0, 0x0, 0x3f, - 0xc3, 0xfc, 0x3f, 0xc0, + 0x24, 0x5, 0xff, 0xff, 0xa7, 0xfa, 0x1e, 0x92, + 0xda, 0xc2, 0x8f, 0xff, 0x0, 0x3, 0xfc, 0x3f, + 0xc3, 0xfc, /* U+AC00 "가" */ 0x0, 0x4f, 0xc4, 0x4, 0x40, 0x44, 0x4, 0x70, @@ -2376,7 +2503,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x40, 0x4, /* U+AC04 "간" */ - 0x0, 0x9f, 0x90, 0x12, 0x6, 0x41, 0x8e, 0xe1, + 0x0, 0x9f, 0x90, 0x12, 0x2, 0x40, 0x8e, 0x61, 0x30, 0x20, 0x4, 0x20, 0x84, 0x0, 0x80, 0x1f, 0xe0, @@ -2389,8 +2516,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x7f, 0x10, 0x44, 0x11, 0x7, 0xc2, 0x11, 0x84, 0xc1, 0xe0, 0x40, 0x10, 0x4, 0x1, + /* U+ACAC "견" */ + 0x0, 0x5f, 0x88, 0x1f, 0x6, 0x20, 0x84, 0x67, + 0xb0, 0x10, 0x2, 0x10, 0x42, 0x0, 0x40, 0xf, + 0xf0, + /* U+ACB0 "결" */ - 0x0, 0x5f, 0x88, 0x1f, 0x6, 0x21, 0xbd, 0xc0, + 0x0, 0x5f, 0x88, 0x1f, 0x6, 0x23, 0xbc, 0xc0, 0x80, 0x0, 0xfe, 0x0, 0x43, 0xf8, 0x40, 0x8, 0x1, 0xfe, @@ -2413,6 +2545,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x24, 0x10, 0x41, 0x4, 0x11, 0x4f, 0xf4, 0x0, 0x40, 0x4, + /* U+AD6C "구" */ + 0x7f, 0xc0, 0x4, 0x0, 0x40, 0xc, 0x0, 0x8f, + 0xff, 0x6, 0x0, 0x60, 0x6, 0x0, 0x60, 0x6, + 0x0, + /* U+ADF8 "그" */ 0x7f, 0xc0, 0x4, 0x0, 0x40, 0xc, 0x0, 0xc0, 0x8, 0x0, 0x80, 0x0, 0xff, 0xf0, @@ -2432,7 +2569,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+B124 "네" */ 0x2, 0x60, 0x98, 0x26, 0x9, 0x9e, 0x60, 0x98, - 0x27, 0xe9, 0x2, 0x40, 0x90, 0x24, 0x1, + 0x26, 0x9, 0xfa, 0x40, 0x90, 0x24, 0x1, + + /* U+B155 "녕" */ + 0x0, 0x60, 0xf8, 0x6, 0x1, 0x83, 0xe1, 0x1f, + 0x84, 0x3e, 0x30, 0xc8, 0x12, 0x4, 0xc3, 0xf, + 0x80, /* U+B294 "는" */ 0x20, 0x2, 0x0, 0x20, 0x3, 0xfc, 0x0, 0x0, @@ -2440,9 +2582,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3, 0xfc, /* U+B2A5 "능" */ - 0x20, 0x2, 0x0, 0x20, 0x3, 0xfc, 0x0, 0x0, - 0x0, 0xff, 0xf0, 0x0, 0x1f, 0x2, 0x8, 0x20, - 0xc2, 0x8, 0x1f, 0x0, + 0x20, 0x2, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0xf, + 0xff, 0x0, 0x1, 0xf0, 0x20, 0x82, 0xc, 0x20, + 0x81, 0xf0, /* U+B2C8 "니" */ 0x0, 0xc0, 0x60, 0x30, 0x18, 0xc, 0x6, 0x3, @@ -2460,7 +2602,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+B300 "대" */ 0x2, 0x7c, 0x98, 0x26, 0x9, 0x83, 0xe0, 0x98, - 0x27, 0xe9, 0x2, 0x40, 0x90, 0x24, 0x1, + 0x26, 0x9, 0xfa, 0x40, 0x90, 0x24, 0x1, /* U+B3C4 "도" */ 0x3f, 0xc2, 0x0, 0x20, 0x2, 0x0, 0x3f, 0xc0, @@ -2468,52 +2610,61 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+B428 "됨" */ 0x0, 0x5f, 0x94, 0x5, 0x1, 0x7e, 0x42, 0x10, - 0xff, 0xf9, 0x0, 0x7, 0xf1, 0x84, 0x61, 0x1f, + 0x87, 0xff, 0x0, 0x7, 0xf1, 0x84, 0x61, 0x1f, 0xc0, /* U+B4C8 "듈" */ - 0x3f, 0xc2, 0x0, 0x20, 0x3, 0xfc, 0x0, 0xf, - 0xff, 0x11, 0x1, 0x10, 0x3f, 0x80, 0x8, 0x3f, - 0x82, 0x0, 0x3f, 0xc0, + 0x3f, 0xc2, 0x0, 0x3f, 0xc0, 0x0, 0xff, 0xf1, + 0x10, 0x11, 0x3, 0xf8, 0x0, 0x83, 0xf8, 0x20, + 0x3, 0xfc, /* U+B4DC "드" */ 0x3f, 0xc2, 0x0, 0x20, 0x2, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, /* U+B4E3 "듣" */ - 0x3f, 0xc2, 0x0, 0x20, 0x2, 0x0, 0x3f, 0xc0, - 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xfc, 0x20, - 0x2, 0x0, 0x3f, 0xc0, + 0x3f, 0xc2, 0x0, 0x20, 0x3, 0xfc, 0x0, 0xf, + 0xff, 0x0, 0x0, 0x0, 0x3f, 0xc2, 0x0, 0x20, + 0x3, 0xfc, + + /* U+B529 "딩" */ + 0x0, 0x7f, 0x18, 0x6, 0x1, 0x80, 0x7f, 0x90, + 0x4, 0x3e, 0x10, 0xc8, 0x12, 0x4, 0xc3, 0xf, + 0x80, /* U+B808 "레" */ 0x1, 0x7c, 0x51, 0x14, 0x45, 0xf7, 0x60, 0x58, - 0x17, 0xf5, 0xd1, 0x40, 0x50, 0x14, 0x1, + 0x16, 0x5, 0xfd, 0x40, 0x50, 0x14, 0x1, + + /* U+B824 "려" */ + 0x0, 0x7e, 0x10, 0x84, 0x2f, 0x8, 0x7e, 0x18, + 0x3e, 0x1, 0xfe, 0x40, 0x10, 0x4, 0x1, /* U+B85C "로" */ 0x3f, 0xc0, 0xc, 0x3f, 0xc2, 0x0, 0x20, 0x3, 0xfc, 0x4, 0x0, 0x40, 0xff, 0xf0, /* U+B958 "류" */ - 0x3f, 0xc0, 0xc, 0x0, 0xc3, 0xfc, 0x20, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0xff, 0xf1, 0x10, 0x11, - 0x1, 0x10, + 0x3f, 0xc0, 0xc, 0x3f, 0xc2, 0x0, 0x3f, 0xc0, + 0x0, 0x0, 0xf, 0xff, 0x11, 0x1, 0x10, 0x11, + 0x0, /* U+B968 "륨" */ - 0x3f, 0xc0, 0xc, 0x3f, 0xc2, 0x0, 0x3f, 0xc0, - 0x0, 0x0, 0xf, 0xff, 0x11, 0x3, 0xfc, 0x20, - 0xc2, 0xc, 0x3f, 0xc0, + 0x3f, 0xc0, 0xc, 0x3f, 0x3, 0xfc, 0x0, 0x0, + 0x0, 0xff, 0xf1, 0x10, 0x3f, 0xc2, 0xc, 0x20, + 0xc3, 0xfc, /* U+B97C "를" */ - 0x3f, 0x80, 0x8, 0x3f, 0x82, 0x0, 0x3f, 0xc0, - 0x0, 0xff, 0xf0, 0x0, 0x7f, 0x80, 0x8, 0x3f, - 0x82, 0x0, 0x3f, 0xc0, + 0x3f, 0x80, 0x8, 0x3f, 0x3, 0xfc, 0x0, 0xf, + 0xff, 0x0, 0x7, 0xf8, 0x0, 0x83, 0xf8, 0x20, + 0x3, 0xfc, /* U+B9AC "리" */ 0x0, 0x7f, 0x10, 0x44, 0x11, 0xfc, 0x60, 0x18, 0x6, 0x1, 0xfe, 0x40, 0x10, 0x4, 0x1, /* U+B9D0 "말" */ - 0x0, 0x9f, 0x92, 0x13, 0xc2, 0x4f, 0xc8, 0x1, + 0x0, 0x9f, 0x92, 0x12, 0x42, 0x78, 0x49, 0xf9, 0x0, 0x1, 0xfc, 0x0, 0x87, 0xf0, 0x80, 0x10, 0x3, 0xfc, @@ -2521,9 +2672,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3f, 0xc2, 0x4, 0x20, 0x42, 0x4, 0x3f, 0xc0, 0x60, 0x6, 0x0, 0x60, 0xff, 0xf0, + /* U+BC1C "발" */ + 0x0, 0x90, 0x92, 0x12, 0x7e, 0x78, 0x49, 0xf9, + 0x0, 0x1, 0xfc, 0x0, 0x87, 0xf0, 0x80, 0x10, + 0x3, 0xfc, + /* U+BC30 "배" */ 0x2, 0x62, 0x98, 0xa7, 0xe9, 0x8b, 0xe2, 0x98, - 0xa7, 0xe9, 0x2, 0x40, 0x90, 0x24, 0x1, + 0xa6, 0x29, 0xfa, 0x40, 0x90, 0x24, 0x1, /* U+BC84 "버" */ 0x0, 0x61, 0x18, 0x46, 0x11, 0xfc, 0x61, 0xf8, @@ -2553,13 +2709,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x40, 0x4, /* U+C0BD "삽" */ - 0x0, 0x41, 0x84, 0x18, 0x41, 0x87, 0x3c, 0x4e, + 0x0, 0x41, 0x84, 0x18, 0x41, 0x87, 0x3c, 0x46, 0x74, 0x0, 0x40, 0x0, 0x10, 0x41, 0xfc, 0x10, 0x41, 0x4, 0x1f, 0xc0, /* U+C0C1 "상" */ - 0x0, 0x41, 0x4, 0x10, 0x41, 0x87, 0x28, 0x46, - 0x64, 0xc2, 0x40, 0x4, 0xf, 0x81, 0x84, 0x10, + 0x0, 0x41, 0x4, 0x10, 0x41, 0x87, 0x2c, 0x4c, + 0x74, 0x0, 0x40, 0x0, 0xf, 0x81, 0x84, 0x10, 0x41, 0x84, 0xf, 0x80, /* U+C0C8 "새" */ @@ -2577,18 +2733,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1, 0xfe, /* U+C131 "성" */ - 0x0, 0x44, 0x11, 0x4, 0x4f, 0x28, 0x5b, 0x1c, - 0x64, 0x1, 0xf, 0x86, 0x11, 0x4, 0x61, 0xf, + 0x0, 0x44, 0x11, 0x4, 0x4f, 0x28, 0x71, 0x98, + 0x4, 0x0, 0xf, 0x86, 0x11, 0x4, 0x61, 0xf, 0x80, /* U+C138 "세" */ - 0x0, 0xa2, 0x14, 0x42, 0x89, 0xd1, 0xa, 0x51, + 0x0, 0xa2, 0x14, 0x42, 0x88, 0x51, 0x3a, 0x71, 0x4b, 0x2a, 0x35, 0x0, 0xa0, 0x14, 0x2, 0x80, 0x10, + /* U+C14B "셋" */ + 0x0, 0xa2, 0x14, 0x4e, 0x88, 0x52, 0x8a, 0x8d, + 0x50, 0xa8, 0x9, 0x1, 0x0, 0x60, 0x1b, 0xc, + 0x30, + /* U+C18C "소" */ - 0x6, 0x0, 0x60, 0x6, 0x0, 0xf0, 0x19, 0x86, - 0x6, 0x6, 0x0, 0x60, 0x6, 0xf, 0xff, + 0x6, 0x0, 0x60, 0x6, 0x1, 0x98, 0x60, 0x60, + 0x60, 0x6, 0x0, 0x60, 0xff, 0xf0, /* U+C18D "속" */ 0x4, 0x0, 0x60, 0xf, 0x7, 0x1e, 0x4, 0x0, @@ -2601,13 +2762,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x43, 0xc, 0x1f, 0x80, /* U+C218 "수" */ - 0x6, 0x0, 0x60, 0x6, 0x1, 0x98, 0x70, 0xe0, - 0x2, 0x0, 0xf, 0xff, 0x6, 0x0, 0x60, 0x6, - 0x0, 0x60, + 0x6, 0x0, 0x60, 0xf, 0x3, 0xc, 0x40, 0x20, + 0x0, 0xff, 0xf0, 0x60, 0x6, 0x0, 0x60, 0x6, + 0x0, /* U+C2A4 "스" */ - 0x6, 0x0, 0x60, 0x6, 0x0, 0xf0, 0x19, 0x87, - 0xe, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, + 0x6, 0x0, 0x60, 0x6, 0x0, 0x90, 0x70, 0xe4, + 0x2, 0x0, 0x0, 0x0, 0xff, 0xf0, /* U+C2B5 "습" */ 0x6, 0x0, 0x60, 0xf, 0x3, 0x9c, 0x40, 0x20, @@ -2619,28 +2780,33 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xc5, 0x19, 0x82, 0x40, 0x10, 0x4, 0x1, /* U+C2E4 "실" */ - 0x0, 0x42, 0x8, 0x41, 0x1c, 0x26, 0x65, 0x4, + 0x0, 0x42, 0x8, 0x41, 0xc, 0x26, 0xc5, 0x4, 0x80, 0x0, 0xfe, 0x0, 0x43, 0xf8, 0x40, 0x8, 0x1, 0xfe, + /* U+C548 "안" */ + 0x0, 0x47, 0x84, 0xcc, 0x48, 0x44, 0x84, 0x7c, + 0xc4, 0x78, 0x40, 0x4, 0x20, 0x42, 0x0, 0x20, + 0x3, 0xfc, + /* U+C5C5 "업" */ - 0x0, 0x5f, 0x18, 0x46, 0x1f, 0x84, 0x5f, 0x10, + 0x0, 0x5e, 0x18, 0x46, 0x1f, 0x84, 0x5e, 0x10, 0x4, 0x0, 0x10, 0x47, 0xf1, 0x4, 0x41, 0x1f, 0xc0, /* U+C5C6 "없" */ - 0x0, 0x4f, 0x8a, 0x11, 0x43, 0xe8, 0x44, 0xf8, - 0x84, 0x10, 0x0, 0x64, 0x8f, 0x91, 0x92, 0x32, + 0x0, 0x4f, 0xa, 0x11, 0x43, 0xe8, 0x44, 0xf0, + 0x80, 0x10, 0x0, 0x64, 0x8f, 0x91, 0x92, 0x32, 0xa7, 0xe2, /* U+C5D0 "에" */ - 0x1, 0x2e, 0x26, 0x24, 0xc4, 0x98, 0xf3, 0x12, - 0x62, 0x4a, 0xc9, 0x21, 0x20, 0x24, 0x4, 0x80, + 0x1, 0x2e, 0x27, 0x64, 0xc4, 0x98, 0xf3, 0x12, + 0x62, 0x4e, 0xc9, 0x71, 0x20, 0x24, 0x4, 0x80, 0x10, /* U+C5F0 "연" */ - 0x10, 0x4f, 0xa, 0x17, 0x42, 0x28, 0x5c, 0xf0, - 0x80, 0x10, 0x2, 0x10, 0x42, 0x0, 0x40, 0xf, + 0x0, 0x4f, 0xb, 0x37, 0x42, 0x28, 0x45, 0x9b, + 0x9e, 0x10, 0x2, 0x10, 0x42, 0x0, 0x40, 0xf, 0xf0, /* U+C624 "오" */ @@ -2648,9 +2814,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x60, 0x6, 0x0, 0x60, 0xff, 0xf0, /* U+C644 "완" */ - 0x18, 0x47, 0xe4, 0x42, 0x44, 0x24, 0x3c, 0x70, - 0x84, 0x8, 0x4f, 0xf4, 0x10, 0x41, 0x0, 0x10, - 0x1, 0xfe, + 0x0, 0x43, 0xc4, 0x42, 0x44, 0x24, 0x7e, 0x70, + 0x84, 0x8, 0x4f, 0xfc, 0x0, 0x41, 0x0, 0x10, + 0x1, 0x0, 0x1f, 0xe0, /* U+C694 "요" */ 0x1f, 0x83, 0xc, 0x60, 0x42, 0x4, 0x30, 0xc1, @@ -2661,11 +2827,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x98, 0xff, 0xf0, 0x0, 0x0, 0x1, 0xf8, 0x20, 0x42, 0x4, 0x1f, 0x80, + /* U+C6B4 "운" */ + 0x1f, 0x2, 0x8, 0x20, 0xc2, 0x8, 0x1f, 0x0, + 0x0, 0x0, 0xf, 0xff, 0x6, 0x2, 0x60, 0x20, + 0x2, 0x0, 0x3f, 0xc0, + /* U+C6CC "워" */ 0x0, 0x27, 0xc5, 0x8c, 0xa0, 0x96, 0x32, 0x7c, 0x40, 0xf, 0xfd, 0x8, 0x21, 0x3c, 0x20, 0x84, 0x10, + /* U+C744 "을" */ + 0x1f, 0x2, 0x8, 0x20, 0xc2, 0x8, 0x1f, 0x0, + 0x0, 0xff, 0xf0, 0x0, 0x3f, 0x80, 0x8, 0x3f, + 0x82, 0x0, 0x3f, 0xc0, + /* U+C74C "음" */ 0x1f, 0x83, 0xc, 0x20, 0x43, 0xc, 0x1f, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xfc, 0x20, @@ -2681,66 +2857,81 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x25, 0x11, 0x7c, 0x40, 0x10, 0x4, 0x1, /* U+C778 "인" */ - 0x10, 0x5e, 0x18, 0x46, 0x11, 0x84, 0x5e, 0x10, - 0x4, 0x1, 0x20, 0x48, 0x2, 0x0, 0xff, + 0x0, 0x5e, 0x1c, 0xc6, 0x11, 0x84, 0x73, 0x17, + 0x84, 0x1, 0x20, 0x48, 0x2, 0x0, 0xff, /* U+C785 "입" */ 0x0, 0x5e, 0x18, 0x46, 0x11, 0x84, 0x5e, 0x10, 0x4, 0x0, 0x10, 0x47, 0xf1, 0x4, 0x41, 0x1f, 0xc0, + /* U+C7A0 "잠" */ + 0x0, 0x4f, 0xe4, 0x10, 0x41, 0x7, 0x28, 0x4e, + 0x64, 0x82, 0x40, 0x0, 0x3f, 0xc3, 0x4, 0x30, + 0x43, 0x4, 0x3f, 0xc0, + /* U+C804 "전" */ - 0x0, 0x5f, 0xc8, 0x41, 0x18, 0xe2, 0x85, 0x9c, + 0x0, 0x5f, 0xc8, 0x41, 0x8, 0xe2, 0x84, 0x9c, 0xa0, 0x10, 0x2, 0x10, 0x42, 0x0, 0x40, 0xf, 0xf0, /* U+C811 "접" */ - 0x0, 0x7f, 0x91, 0x4, 0xc7, 0x28, 0x71, 0x98, + 0x0, 0x7f, 0x91, 0x4, 0xc7, 0x28, 0x71, 0x90, 0x4, 0x0, 0x10, 0x47, 0xf1, 0x4, 0x41, 0x1f, 0xc0, /* U+C815 "정" */ - 0x0, 0x7f, 0x91, 0x4, 0xc7, 0x28, 0x71, 0x90, + 0x0, 0x7f, 0x91, 0x4, 0xc7, 0x28, 0x71, 0x98, 0x4, 0x3e, 0x18, 0xc4, 0x11, 0x4, 0x63, 0xf, 0x80, /* U+C871 "족" */ - 0x7f, 0xc0, 0x60, 0xe, 0x7, 0x9e, 0x4, 0x0, - 0x40, 0xff, 0xf0, 0x0, 0x0, 0x7, 0xfc, 0x0, - 0x40, 0x4, 0x0, 0x40, + 0x7f, 0xc0, 0x60, 0x1b, 0x82, 0x44, 0x4, 0xf, + 0xff, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x4, 0x0, + 0x40, 0x4, + + /* U+C8FC "주" */ + 0x3f, 0xc0, 0x60, 0x6, 0x1, 0xf8, 0x30, 0xc0, + 0x0, 0xff, 0xf0, 0x60, 0x6, 0x0, 0x60, 0x6, + 0x0, /* U+C911 "중" */ - 0x3f, 0xc0, 0x60, 0xf, 0x7, 0x9e, 0x0, 0x0, - 0x0, 0xff, 0xf0, 0x60, 0x1f, 0x83, 0xc, 0x20, - 0x43, 0xc, 0x1f, 0x80, + 0x3f, 0xc0, 0x60, 0xf, 0x7, 0xe, 0x0, 0xf, + 0xff, 0x6, 0x1, 0xf8, 0x30, 0xc2, 0x4, 0x30, + 0xc1, 0xf8, /* U+C9C0 "지" */ 0x0, 0x7f, 0x91, 0x4, 0x41, 0x10, 0x4a, 0x16, 0xc7, 0x19, 0x82, 0x40, 0x10, 0x4, 0x1, /* U+C9C4 "진" */ - 0x0, 0x5f, 0xc8, 0x41, 0xc, 0x22, 0x85, 0xcc, + 0x0, 0x5f, 0xc8, 0x41, 0x8, 0x23, 0x84, 0xcc, 0xa0, 0x90, 0x2, 0x10, 0x42, 0x0, 0x40, 0xf, 0xf0, /* U+CC3E "찾" */ - 0x10, 0x41, 0x4, 0xfe, 0x41, 0x7, 0x38, 0x46, + 0x10, 0x4f, 0xe4, 0xfe, 0x41, 0x7, 0x38, 0x46, 0xc4, 0xc2, 0x40, 0x0, 0x3f, 0xc0, 0x60, 0x6, 0x1, 0xd8, 0x30, 0xc0, /* U+CD08 "초" */ - 0x6, 0x0, 0x60, 0x3f, 0xc0, 0x60, 0x6, 0x1, - 0x98, 0x70, 0xe0, 0x60, 0x6, 0xf, 0xff, + 0x6, 0x3, 0xfc, 0x6, 0x0, 0x60, 0x19, 0x87, + 0xe, 0x6, 0x0, 0x60, 0xff, 0xf0, /* U+CD5C "최" */ - 0x8, 0x21, 0x5, 0xfc, 0x84, 0x10, 0xc2, 0x28, + 0x0, 0x21, 0x5, 0xfc, 0x84, 0x10, 0xc2, 0x28, 0x58, 0xca, 0x41, 0x8, 0x3f, 0xf4, 0x0, 0x80, 0x10, /* U+CDA9 "충" */ - 0x6, 0x0, 0x60, 0x3f, 0xc0, 0x60, 0xf, 0x7, - 0xe, 0x0, 0xf, 0xff, 0x6, 0x1, 0xf8, 0x30, - 0xc2, 0x4, 0x30, 0xc1, 0xf8, + 0x6, 0x3, 0xfc, 0x6, 0x0, 0xf0, 0x70, 0xe0, + 0x0, 0xff, 0xf0, 0x60, 0x1f, 0x83, 0xc, 0x20, + 0x43, 0xc, 0x1f, 0x80, + + /* U+CE5C "친" */ + 0x10, 0x42, 0xb, 0xf9, 0x8, 0x21, 0x84, 0x58, + 0xb1, 0x90, 0x2, 0x30, 0x46, 0x0, 0xc0, 0x1f, + 0xf0, /* U+CE74 "카" */ 0x0, 0x4f, 0xc4, 0x4, 0x40, 0x44, 0xfc, 0x70, @@ -2749,7 +2940,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+CE94 "캔" */ 0x1, 0x5f, 0x28, 0x25, 0x7c, 0xe1, 0x94, 0x62, - 0xb0, 0x50, 0xa, 0x11, 0x42, 0x0, 0x40, 0xf, + 0xb8, 0x50, 0xa, 0x11, 0x42, 0x0, 0x40, 0xf, 0xf0, /* U+CF1C "켜" */ @@ -2762,7 +2953,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+D0DC "태" */ 0x2, 0x7e, 0x98, 0x26, 0x9, 0xf3, 0xe0, 0x98, - 0x26, 0x29, 0xe2, 0x40, 0x90, 0x24, 0x1, + 0x26, 0x9, 0xfa, 0x40, 0x90, 0x24, 0x1, /* U+D130 "터" */ 0x0, 0x7f, 0x18, 0x6, 0x1, 0xfb, 0xe0, 0x18, @@ -2770,7 +2961,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+D15C "템" */ 0x1, 0x7c, 0x58, 0x17, 0xdd, 0x81, 0x60, 0x5f, - 0xd4, 0x1, 0x1f, 0xc4, 0x11, 0x4, 0x41, 0x1f, + 0xd4, 0x0, 0x1f, 0xc4, 0x11, 0x4, 0x41, 0x1f, 0xc0, /* U+D2B8 "트" */ @@ -2779,7 +2970,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+D31F "팟" */ 0x0, 0x4f, 0xe4, 0x6c, 0x46, 0xc4, 0x6c, 0x76, - 0xc4, 0xfe, 0x40, 0x44, 0x4, 0x0, 0x60, 0x1b, + 0xc4, 0xfe, 0x40, 0x4, 0x4, 0x0, 0x60, 0xb, 0x3, 0xc, /* U+D328 "패" */ @@ -2794,7 +2985,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+D55C "한" */ 0x10, 0x4f, 0xe4, 0x0, 0x47, 0xc4, 0x44, 0x74, - 0x44, 0x7c, 0x40, 0x4, 0x30, 0x43, 0x0, 0x30, + 0x44, 0x44, 0x43, 0x84, 0x30, 0x43, 0x0, 0x30, 0x3, 0xfc, /* U+D560 "할" */ @@ -2804,17 +2995,17 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+D569 "합" */ 0x10, 0x4f, 0xe4, 0x0, 0x47, 0xc7, 0x44, 0x44, - 0x44, 0x38, 0x40, 0x0, 0x30, 0x43, 0xfc, 0x30, + 0x44, 0x3c, 0x40, 0x0, 0x30, 0x43, 0xfc, 0x30, 0x43, 0x4, 0x3f, 0xc0, /* U+D56B "핫" */ - 0x10, 0x4f, 0xe4, 0x0, 0x47, 0xc7, 0x44, 0x44, - 0x44, 0x7c, 0x40, 0x4, 0x6, 0x0, 0x60, 0xb, + 0x10, 0x4f, 0xe4, 0x0, 0x43, 0xc4, 0x6c, 0x74, + 0x44, 0x44, 0x43, 0x84, 0x6, 0x0, 0x60, 0xb, 0x3, 0xc, /* U+D588 "했" */ - 0x31, 0x7f, 0xac, 0x45, 0xbc, 0xf4, 0x56, 0x9a, - 0xcc, 0x58, 0x0, 0x8, 0x83, 0x10, 0x75, 0x13, + 0x31, 0x7f, 0xac, 0x45, 0xb4, 0xf4, 0x56, 0x9a, + 0xde, 0x58, 0x0, 0x8, 0x83, 0x10, 0x75, 0x13, 0x90, /* U+D654 "화" */ @@ -2828,13 +3019,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x40, 0x4, 0x0, 0x40, /* U+D658 "환" */ - 0x18, 0x4f, 0xf4, 0x7e, 0x44, 0x24, 0x62, 0x73, - 0xc4, 0x18, 0x4f, 0xfc, 0x0, 0x41, 0x0, 0x10, - 0x1, 0xfe, + 0x18, 0x4f, 0xf4, 0x66, 0x44, 0x24, 0x66, 0x73, + 0xc4, 0x18, 0x4f, 0xfc, 0x0, 0x40, 0x0, 0x10, + 0x1, 0x0, 0x1f, 0xe0, /* U+D65C "활" */ 0x18, 0x4f, 0xf4, 0x66, 0x44, 0x27, 0x7e, 0x41, - 0x84, 0xff, 0xc0, 0x4, 0x3f, 0xc0, 0x4, 0x1f, + 0x84, 0xff, 0xcf, 0xe4, 0x3f, 0xc0, 0x4, 0x1f, 0xc1, 0x0, 0x1f, 0xe0, /* U+D6C4 "후" */ @@ -2842,6 +3033,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xc, 0x1f, 0x80, 0x0, 0xff, 0xf0, 0x60, 0x6, 0x0, 0x60, + /* U+FF01 "!" */ + 0xfe, 0xc0, + /* U+FF0C "," */ 0x5a, @@ -3065,481 +3259,524 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { {.bitmap_index = 1653, .adv_w = 107, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, {.bitmap_index = 1660, .adv_w = 107, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 1667, .adv_w = 76, .box_w = 4, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1673, .adv_w = 113, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1673, .adv_w = 137, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 1682, .adv_w = 113, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 1691, .adv_w = 113, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1700, .adv_w = 148, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1709, .adv_w = 107, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 1716, .adv_w = 75, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 1723, .adv_w = 61, .box_w = 1, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1725, .adv_w = 149, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1737, .adv_w = 140, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1746, .adv_w = 139, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1754, .adv_w = 111, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1761, .adv_w = 127, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1769, .adv_w = 165, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1779, .adv_w = 186, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1791, .adv_w = 159, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1800, .adv_w = 166, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1810, .adv_w = 159, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1819, .adv_w = 134, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1827, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1836, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1845, .adv_w = 146, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1854, .adv_w = 137, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1860, .adv_w = 138, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1870, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1876, .adv_w = 86, .box_w = 4, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1880, .adv_w = 137, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 1890, .adv_w = 129, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1896, .adv_w = 164, .box_w = 9, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1905, .adv_w = 109, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1910, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1916, .adv_w = 144, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1925, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1930, .adv_w = 132, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1937, .adv_w = 165, .box_w = 8, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1945, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1951, .adv_w = 138, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1958, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1964, .adv_w = 142, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 1974, .adv_w = 111, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1980, .adv_w = 101, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1986, .adv_w = 118, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 1996, .adv_w = 202, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2016, .adv_w = 116, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2023, .adv_w = 147, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 2032, .adv_w = 136, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2038, .adv_w = 200, .box_w = 9, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2047, .adv_w = 176, .box_w = 8, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2055, .adv_w = 128, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2061, .adv_w = 187, .box_w = 9, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2070, .adv_w = 117, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2076, .adv_w = 60, .box_w = 1, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2078, .adv_w = 60, .box_w = 4, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2084, .adv_w = 136, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2090, .adv_w = 122, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2096, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2102, .adv_w = 110, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2107, .adv_w = 112, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2113, .adv_w = 122, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2119, .adv_w = 124, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2125, .adv_w = 198, .box_w = 11, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2136, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2142, .adv_w = 145, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2149, .adv_w = 137, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2155, .adv_w = 142, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2163, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2171, .adv_w = 140, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2179, .adv_w = 140, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2190, .adv_w = 143, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2196, .adv_w = 157, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2205, .adv_w = 157, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2218, .adv_w = 144, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2225, .adv_w = 139, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2231, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2237, .adv_w = 99, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2242, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2248, .adv_w = 97, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2253, .adv_w = 131, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2260, .adv_w = 138, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2267, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2273, .adv_w = 131, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2281, .adv_w = 86, .box_w = 4, .box_h = 7, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 2285, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -5, .ofs_y = 9}, - {.bitmap_index = 2288, .adv_w = 87, .box_w = 4, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2292, .adv_w = 87, .box_w = 8, .box_h = 11, .ofs_x = -4, .ofs_y = 0}, - {.bitmap_index = 2303, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, - {.bitmap_index = 2306, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, - {.bitmap_index = 2309, .adv_w = 0, .box_w = 7, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, - {.bitmap_index = 2312, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, - {.bitmap_index = 2315, .adv_w = 0, .box_w = 3, .box_h = 3, .ofs_x = -3, .ofs_y = -4}, - {.bitmap_index = 2317, .adv_w = 0, .box_w = 5, .box_h = 3, .ofs_x = -6, .ofs_y = -4}, - {.bitmap_index = 2319, .adv_w = 69, .box_w = 3, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2322, .adv_w = 135, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2329, .adv_w = 79, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2337, .adv_w = 79, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2345, .adv_w = 79, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2353, .adv_w = 0, .box_w = 5, .box_h = 3, .ofs_x = -6, .ofs_y = 9}, - {.bitmap_index = 2355, .adv_w = 0, .box_w = 1, .box_h = 2, .ofs_x = -2, .ofs_y = 9}, - {.bitmap_index = 2356, .adv_w = 0, .box_w = 5, .box_h = 3, .ofs_x = -5, .ofs_y = 9}, - {.bitmap_index = 2358, .adv_w = 0, .box_w = 4, .box_h = 3, .ofs_x = -4, .ofs_y = 8}, - {.bitmap_index = 2360, .adv_w = 137, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2369, .adv_w = 137, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2378, .adv_w = 137, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2389, .adv_w = 137, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2398, .adv_w = 137, .box_w = 6, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2409, .adv_w = 137, .box_w = 6, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2419, .adv_w = 129, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2428, .adv_w = 125, .box_w = 6, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2438, .adv_w = 129, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2449, .adv_w = 129, .box_w = 7, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2461, .adv_w = 129, .box_w = 6, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2472, .adv_w = 60, .box_w = 1, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2474, .adv_w = 138, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2485, .adv_w = 138, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2496, .adv_w = 138, .box_w = 7, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2508, .adv_w = 138, .box_w = 7, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2521, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2532, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2543, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2555, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2567, .adv_w = 137, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2576, .adv_w = 148, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2588, .adv_w = 220, .box_w = 3, .box_h = 3, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2590, .adv_w = 220, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2592, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2606, .adv_w = 220, .box_w = 8, .box_h = 12, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 2618, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2636, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2654, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2676, .adv_w = 220, .box_w = 9, .box_h = 12, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 2690, .adv_w = 220, .box_w = 7, .box_h = 12, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 2701, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2716, .adv_w = 220, .box_w = 8, .box_h = 11, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2727, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2744, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2761, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2778, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2795, .adv_w = 220, .box_w = 9, .box_h = 7, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2803, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2817, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2833, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2850, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2866, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2881, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2898, .adv_w = 220, .box_w = 7, .box_h = 12, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2909, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2927, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2944, .adv_w = 220, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2959, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 2975, .adv_w = 220, .box_w = 9, .box_h = 9, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2986, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3001, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 3015, .adv_w = 220, .box_w = 11, .box_h = 8, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 3026, .adv_w = 220, .box_w = 10, .box_h = 9, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3038, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3053, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3070, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3085, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3105, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3122, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3142, .adv_w = 220, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 3155, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 3169, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3183, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 3197, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3212, .adv_w = 220, .box_w = 8, .box_h = 9, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 3221, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3237, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3255, .adv_w = 220, .box_w = 7, .box_h = 11, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 3265, .adv_w = 220, .box_w = 7, .box_h = 11, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 3275, .adv_w = 220, .box_w = 11, .box_h = 8, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 3286, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3304, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 3322, .adv_w = 220, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3335, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3355, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3377, .adv_w = 220, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 3391, .adv_w = 220, .box_w = 11, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 3404, .adv_w = 220, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3417, .adv_w = 220, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 3432, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 3446, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3458, .adv_w = 220, .box_w = 9, .box_h = 7, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 3466, .adv_w = 220, .box_w = 7, .box_h = 8, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 3473, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3487, .adv_w = 220, .box_w = 7, .box_h = 11, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 3497, .adv_w = 220, .box_w = 13, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 3514, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 3526, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3538, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 3550, .adv_w = 220, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 3563, .adv_w = 220, .box_w = 10, .box_h = 1, .ofs_x = 2, .ofs_y = 4}, - {.bitmap_index = 3565, .adv_w = 220, .box_w = 12, .box_h = 1, .ofs_x = 1, .ofs_y = 5}, - {.bitmap_index = 3567, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3584, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3602, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3619, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3635, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3653, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3673, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3695, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3715, .adv_w = 220, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3733, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3753, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3771, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3791, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3809, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3826, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3846, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3863, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3881, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3898, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3918, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3938, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3958, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3976, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 3994, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4012, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4032, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4049, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4067, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4085, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4105, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4123, .adv_w = 220, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4146, .adv_w = 220, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4164, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 4181, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 4201, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4222, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4244, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4262, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4282, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4302, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 4322, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4342, .adv_w = 220, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4360, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4383, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4403, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4423, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4443, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4461, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4479, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4495, .adv_w = 220, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 4516, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4536, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4553, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4571, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 4591, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4613, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4635, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4657, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4679, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4699, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4719, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4739, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4759, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4777, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4795, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4815, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4835, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4855, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4875, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4897, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4915, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 4935, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 4955, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4975, .adv_w = 220, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 4996, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5016, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5033, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5051, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5069, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 5091, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5111, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5131, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5153, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5171, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 5191, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5211, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5231, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5251, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5271, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5291, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5312, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5332, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5353, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5370, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5390, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5410, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 5433, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5450, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5468, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5486, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5508, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5528, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5546, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5566, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 5586, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5604, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 5626, .adv_w = 220, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 5647, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5667, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5687, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5707, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5724, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 5741, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5763, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5785, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5807, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5828, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5846, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 5866, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5886, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5904, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5924, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 5947, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 5969, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 5987, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6009, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6029, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6049, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6069, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6087, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6108, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 6131, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 6148, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6166, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6187, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6207, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6225, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6245, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 6265, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6283, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 6303, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 6323, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6343, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6361, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6381, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 6401, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6419, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6437, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6457, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6475, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6493, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6515, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6535, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 6557, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6577, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6597, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6617, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 6639, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6657, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6677, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6697, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6717, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6737, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6757, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6777, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6795, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6815, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6833, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6853, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 6873, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6890, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 6907, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 6924, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 6941, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 6958, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 6975, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 6993, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 7013, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 7033, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7053, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7073, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7091, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7108, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 7126, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7141, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7159, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7176, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7190, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7208, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 7226, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7240, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7255, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7269, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 7286, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7301, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7319, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7339, .adv_w = 211, .box_w = 9, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 7353, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7370, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7388, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7403, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7417, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7434, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7454, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7468, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7488, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7503, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7517, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7535, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7555, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7575, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 7590, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7608, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7622, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7637, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7652, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7666, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7686, .adv_w = 211, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7703, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 7718, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7736, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 7756, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7776, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 7793, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7808, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7826, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7843, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 7860, .adv_w = 211, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7875, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7895, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7915, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7933, .adv_w = 211, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 7948, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 7968, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 7983, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8001, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8018, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8036, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8053, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8070, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 8084, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 8102, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 8116, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8136, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8153, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8173, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8193, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8208, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8223, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8240, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8257, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8274, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8291, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8311, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8331, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8346, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8363, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8383, .adv_w = 211, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 8398, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 8415, .adv_w = 211, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8436, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8454, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8471, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8486, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 8500, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8515, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8530, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8547, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 8561, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8579, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8596, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8614, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8632, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8652, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 8672, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8690, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8707, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8725, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 8745, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 8763, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 8783, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 8801, .adv_w = 220, .box_w = 2, .box_h = 4, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 8802, .adv_w = 220, .box_w = 2, .box_h = 8, .ofs_x = 3, .ofs_y = 0} + {.bitmap_index = 1700, .adv_w = 113, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1709, .adv_w = 148, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1718, .adv_w = 107, .box_w = 5, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 1725, .adv_w = 75, .box_w = 4, .box_h = 13, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 1732, .adv_w = 61, .box_w = 1, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1734, .adv_w = 149, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1746, .adv_w = 140, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1755, .adv_w = 139, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1763, .adv_w = 111, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1770, .adv_w = 127, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1778, .adv_w = 165, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1788, .adv_w = 186, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1800, .adv_w = 159, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1809, .adv_w = 166, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1819, .adv_w = 159, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1828, .adv_w = 134, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1836, .adv_w = 134, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1845, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1854, .adv_w = 146, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1863, .adv_w = 137, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1869, .adv_w = 138, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1879, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1885, .adv_w = 86, .box_w = 4, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1889, .adv_w = 137, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1899, .adv_w = 129, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1905, .adv_w = 164, .box_w = 9, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1914, .adv_w = 109, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1919, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1925, .adv_w = 144, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1934, .adv_w = 112, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1939, .adv_w = 132, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1946, .adv_w = 165, .box_w = 8, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1954, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1960, .adv_w = 138, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1967, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1973, .adv_w = 142, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 1983, .adv_w = 111, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1989, .adv_w = 101, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1995, .adv_w = 118, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 2005, .adv_w = 202, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2025, .adv_w = 116, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2032, .adv_w = 147, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 2041, .adv_w = 136, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2047, .adv_w = 200, .box_w = 9, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2056, .adv_w = 176, .box_w = 8, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2064, .adv_w = 128, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2070, .adv_w = 187, .box_w = 9, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2079, .adv_w = 117, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2085, .adv_w = 60, .box_w = 1, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2087, .adv_w = 60, .box_w = 4, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2093, .adv_w = 136, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2099, .adv_w = 122, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2105, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2111, .adv_w = 110, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2116, .adv_w = 112, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2122, .adv_w = 129, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2130, .adv_w = 122, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2136, .adv_w = 124, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2142, .adv_w = 198, .box_w = 11, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2153, .adv_w = 144, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2159, .adv_w = 145, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2166, .adv_w = 137, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2172, .adv_w = 142, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2180, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2188, .adv_w = 140, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2196, .adv_w = 140, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2207, .adv_w = 143, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2213, .adv_w = 157, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2222, .adv_w = 157, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2235, .adv_w = 144, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2242, .adv_w = 139, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2248, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2254, .adv_w = 99, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2259, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2265, .adv_w = 97, .box_w = 5, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2270, .adv_w = 131, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2277, .adv_w = 138, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2284, .adv_w = 130, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2290, .adv_w = 131, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2298, .adv_w = 86, .box_w = 4, .box_h = 7, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 2302, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -5, .ofs_y = 9}, + {.bitmap_index = 2305, .adv_w = 87, .box_w = 4, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2309, .adv_w = 87, .box_w = 8, .box_h = 11, .ofs_x = -4, .ofs_y = 0}, + {.bitmap_index = 2320, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, + {.bitmap_index = 2323, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, + {.bitmap_index = 2326, .adv_w = 0, .box_w = 7, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, + {.bitmap_index = 2329, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = 9}, + {.bitmap_index = 2332, .adv_w = 0, .box_w = 3, .box_h = 3, .ofs_x = -3, .ofs_y = -4}, + {.bitmap_index = 2334, .adv_w = 0, .box_w = 5, .box_h = 3, .ofs_x = -6, .ofs_y = -4}, + {.bitmap_index = 2336, .adv_w = 69, .box_w = 3, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2339, .adv_w = 135, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2346, .adv_w = 79, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2354, .adv_w = 79, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2362, .adv_w = 79, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2370, .adv_w = 0, .box_w = 5, .box_h = 3, .ofs_x = -6, .ofs_y = 9}, + {.bitmap_index = 2372, .adv_w = 0, .box_w = 1, .box_h = 2, .ofs_x = -2, .ofs_y = 9}, + {.bitmap_index = 2373, .adv_w = 0, .box_w = 5, .box_h = 3, .ofs_x = -5, .ofs_y = 9}, + {.bitmap_index = 2375, .adv_w = 0, .box_w = 4, .box_h = 3, .ofs_x = -4, .ofs_y = 8}, + {.bitmap_index = 2377, .adv_w = 137, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2386, .adv_w = 137, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2395, .adv_w = 137, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2406, .adv_w = 137, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2415, .adv_w = 137, .box_w = 6, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2426, .adv_w = 137, .box_w = 6, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2436, .adv_w = 129, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2445, .adv_w = 125, .box_w = 6, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2455, .adv_w = 129, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2466, .adv_w = 129, .box_w = 7, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2478, .adv_w = 129, .box_w = 6, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2489, .adv_w = 60, .box_w = 1, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2491, .adv_w = 138, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2502, .adv_w = 138, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2513, .adv_w = 138, .box_w = 7, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2525, .adv_w = 138, .box_w = 7, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2538, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2549, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2560, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2572, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2584, .adv_w = 137, .box_w = 6, .box_h = 11, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 2593, .adv_w = 137, .box_w = 6, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2602, .adv_w = 148, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2614, .adv_w = 220, .box_w = 3, .box_h = 3, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2616, .adv_w = 220, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2618, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 2632, .adv_w = 220, .box_w = 8, .box_h = 12, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 2644, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2662, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2679, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2697, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2719, .adv_w = 220, .box_w = 9, .box_h = 12, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 2733, .adv_w = 220, .box_w = 7, .box_h = 12, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 2744, .adv_w = 220, .box_w = 9, .box_h = 9, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 2755, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2770, .adv_w = 220, .box_w = 8, .box_h = 11, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 2781, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2797, .adv_w = 220, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2812, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2829, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 2846, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2860, .adv_w = 220, .box_w = 9, .box_h = 7, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 2868, .adv_w = 220, .box_w = 11, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2881, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2895, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2911, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2928, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2944, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2958, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2974, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 2989, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3006, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3023, .adv_w = 220, .box_w = 7, .box_h = 12, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 3034, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3052, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3069, .adv_w = 220, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3084, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3100, .adv_w = 220, .box_w = 9, .box_h = 9, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3111, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3126, .adv_w = 220, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 3139, .adv_w = 220, .box_w = 11, .box_h = 8, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 3150, .adv_w = 220, .box_w = 10, .box_h = 9, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3162, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3176, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3193, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3208, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3228, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3245, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3265, .adv_w = 220, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 3278, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 3292, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3306, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3320, .adv_w = 220, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3335, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3357, .adv_w = 220, .box_w = 8, .box_h = 9, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 3366, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3382, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3400, .adv_w = 220, .box_w = 7, .box_h = 11, .ofs_x = 5, .ofs_y = -1}, + {.bitmap_index = 3410, .adv_w = 220, .box_w = 7, .box_h = 11, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 3420, .adv_w = 220, .box_w = 11, .box_h = 8, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 3431, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3448, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3466, .adv_w = 220, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3479, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3499, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3521, .adv_w = 220, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 3535, .adv_w = 220, .box_w = 11, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3548, .adv_w = 220, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3561, .adv_w = 220, .box_w = 12, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3576, .adv_w = 220, .box_w = 11, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3590, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3602, .adv_w = 220, .box_w = 9, .box_h = 7, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 3610, .adv_w = 220, .box_w = 7, .box_h = 8, .ofs_x = 4, .ofs_y = 0}, + {.bitmap_index = 3617, .adv_w = 220, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3631, .adv_w = 220, .box_w = 7, .box_h = 11, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 3641, .adv_w = 220, .box_w = 13, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3658, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 3670, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3682, .adv_w = 220, .box_w = 9, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 3694, .adv_w = 220, .box_w = 10, .box_h = 10, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 3707, .adv_w = 220, .box_w = 10, .box_h = 1, .ofs_x = 2, .ofs_y = 4}, + {.bitmap_index = 3709, .adv_w = 220, .box_w = 12, .box_h = 1, .ofs_x = 1, .ofs_y = 5}, + {.bitmap_index = 3711, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3728, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3746, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 3763, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3779, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3797, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3817, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3837, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3859, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3879, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3899, .adv_w = 220, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 3917, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 3937, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3955, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 3975, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3993, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 4010, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 4030, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4047, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4065, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4082, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4100, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4120, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 4140, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4160, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4178, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4196, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4214, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4234, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4254, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4271, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4289, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4307, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4327, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4345, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4366, .adv_w = 220, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4384, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 4400, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 4420, .adv_w = 220, .box_w = 14, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4440, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4462, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4480, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4500, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4520, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 4540, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4558, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4578, .adv_w = 220, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4596, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4619, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4637, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4657, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4677, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4694, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4712, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4728, .adv_w = 220, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 4749, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4769, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4786, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4804, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 4822, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4842, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4864, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4886, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4908, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4928, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4948, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 4968, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4988, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5006, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5024, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5042, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5060, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5080, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5100, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5120, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5140, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5158, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5176, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5196, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 5216, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 5236, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5256, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5273, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5291, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5309, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 5329, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5349, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5367, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5389, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5405, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5422, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 5442, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5462, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5482, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5502, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5522, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5542, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5563, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5583, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5604, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5621, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5641, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5661, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 5684, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5701, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5719, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5737, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5757, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5775, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5793, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5811, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 5831, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 5851, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5869, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 5891, .adv_w = 220, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 5912, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5932, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5952, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 5972, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 5990, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 6010, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6027, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 6044, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6064, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6084, .adv_w = 220, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6102, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6124, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6145, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6163, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 6183, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6203, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6221, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6241, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 6264, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6284, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6302, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6324, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6344, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6362, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6382, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6399, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6420, .adv_w = 220, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 6443, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 6459, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6477, .adv_w = 220, .box_w = 14, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6498, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6518, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6536, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 6554, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6572, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 6592, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6610, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 6630, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 6650, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6670, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6688, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6708, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 6728, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6746, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6764, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6782, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6802, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6819, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6837, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6857, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6877, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 6897, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6917, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 6937, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6957, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 6979, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 6999, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7017, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7035, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7055, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7073, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7091, .adv_w = 220, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7113, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7133, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7153, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7173, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7193, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7213, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7231, .adv_w = 220, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7249, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7266, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7286, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7306, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7322, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 7338, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 7354, .adv_w = 220, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 7370, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 7387, .adv_w = 220, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 7404, .adv_w = 220, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7421, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7441, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7461, .adv_w = 220, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7481, .adv_w = 220, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7499, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7517, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7534, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 7552, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7567, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7584, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7602, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7619, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 7633, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7651, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 7669, .adv_w = 211, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7686, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 7700, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7715, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 7729, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 7746, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7761, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 7778, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7796, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7814, .adv_w = 211, .box_w = 9, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 7828, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7845, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7863, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7878, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 7892, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7909, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7927, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 7941, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 7959, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 7976, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 7991, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8006, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 8020, .adv_w = 211, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8037, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8055, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8073, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 8088, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8106, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 8120, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8138, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8153, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8168, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 8182, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8202, .adv_w = 211, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8219, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 8234, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8252, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 8272, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8292, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 8309, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8324, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8342, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8359, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 8376, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 8393, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 8407, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8427, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8447, .adv_w = 211, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8464, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 8478, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8498, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8513, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8531, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8549, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8566, .adv_w = 211, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8584, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8601, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8618, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 8632, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 8652, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 8666, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8686, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8706, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8723, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8743, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8763, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8783, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8798, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8813, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8830, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8850, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8867, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8884, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8901, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8919, .adv_w = 211, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8936, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 8954, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8969, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 8986, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 9006, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 9020, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 9037, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 9057, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9074, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9092, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9109, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9124, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 9138, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9153, .adv_w = 211, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9168, .adv_w = 211, .box_w = 10, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 9185, .adv_w = 211, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 9199, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9217, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9234, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9252, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9270, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 9290, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 9310, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9328, .adv_w = 211, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9345, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9363, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 9383, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 9403, .adv_w = 211, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 9423, .adv_w = 211, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 9441, .adv_w = 220, .box_w = 1, .box_h = 10, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 9443, .adv_w = 220, .box_w = 2, .box_h = 4, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 9444, .adv_w = 220, .box_w = 2, .box_h = 8, .ofs_x = 3, .ofs_y = 0} }; /*--------------------- @@ -3549,66 +3786,72 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { static const uint16_t unicode_list_2[] = { 0x0, 0x2, 0x4, 0x9, 0xa, 0xd, 0xe, 0x16, 0x18, 0x1c, 0x2e, 0x3e, 0x3f, 0x56, 0x58, 0x5b, - 0x5c, 0x5e, 0x62, 0x77, 0x79, 0x7b, 0xad, 0x116, - 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, 0x315, - 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x324 + 0x5c, 0x5e, 0x62, 0x6c, 0x77, 0x79, 0x7b, 0xad, + 0x116, 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, + 0x315, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, + 0x324 }; static const uint16_t unicode_list_4[] = { 0x0, 0x1, 0x3, 0x4, 0xb, 0xc, 0x9b6, 0x9b7, - 0x9b9, 0x9bc, 0x9bd, 0x9bf, 0x9c0, 0x9c8, 0x9c9, 0x9ca, - 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, 0x9d4, - 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, 0x9e0, - 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, - 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, 0x9f8, - 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, 0x1a5a, - 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, 0x1a7c, - 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, - 0x1a98, 0x1a9a, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, 0x2bfb, 0x2bfd, - 0x2bff, 0x2c01, 0x2c02, 0x2c04, 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, - 0x2c14, 0x2c15, 0x2c18, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c33, - 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, 0x2c59, - 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, 0x2c6a, - 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c78, 0x2c7b, - 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, 0x2c8a, 0x2c8b, - 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, 0x2c98, 0x2c9a, - 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, 0x2ca4, 0x2ca8, - 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, 0x4aef, 0x4b03, - 0x4b96, 0x4c4e, 0x4cfa, 0x4cfd, 0x4d1a, 0x4d28, 0x4d42, 0x4daf, - 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, - 0x4efc, 0x4f16, 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, - 0x5032, 0x5082, 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, - 0x54dc, 0x54e6, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, - 0x57c0, 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, - 0x5b3a, 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, + 0x9b9, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c8, 0x9c9, + 0x9ca, 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, + 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, + 0x9e0, 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, + 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, + 0x9f8, 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, + 0x1a5a, 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, + 0x1a7c, 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, + 0x1a94, 0x1a98, 0x1a9a, 0x1a9c, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, + 0x2bfb, 0x2bfd, 0x2bff, 0x2c00, 0x2c01, 0x2c02, 0x2c04, 0x2c08, + 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, 0x2c14, 0x2c15, 0x2c16, 0x2c18, + 0x2c19, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c23, 0x2c24, 0x2c33, + 0x2c34, 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, + 0x2c59, 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, + 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c75, + 0x2c78, 0x2c7b, 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, + 0x2c8a, 0x2c8b, 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, + 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, + 0x2ca4, 0x2ca8, 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, + 0x4aef, 0x4b03, 0x4b15, 0x4b96, 0x4bce, 0x4c4e, 0x4cfa, 0x4cfd, + 0x4d1a, 0x4d28, 0x4d42, 0x4daf, 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, + 0x4e55, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, 0x4efc, 0x4f16, 0x4f80, + 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, 0x5032, 0x5082, + 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, 0x54dc, 0x54e6, + 0x5532, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, 0x57c0, + 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, 0x5b3a, + 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, 0x5dc6, 0x5e00, 0x5e20, 0x5e33, 0x5ef4, 0x5f17, 0x5f38, 0x5f57, 0x5f5a, 0x5f84, 0x5f87, 0x5f90, 0x610c, 0x6165, 0x6195, 0x61ab, 0x61f7, - 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c2, 0x62d4, 0x62e1, 0x62ef, - 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, 0x688a, - 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a96, 0x6ab4, - 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, 0x6e6b, 0x6e75, - 0x70dd, 0x70ea, 0x7230, 0x7231, 0x746f, 0x7587, 0x75c2, 0x76fe, - 0x7709, 0x78b0, 0x78cf, 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, - 0x7967, 0x7a5c, 0x7a79, 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, - 0x7cb2, 0x8401, 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, - 0x8626, 0x8642, 0x8659, 0x865f, 0x8680, 0x871b, 0x8773, 0x8774, - 0x878a, 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x893a, - 0x8968, 0x89a4, 0x8b90, 0x8b93, 0x8bb6, 0x8bd8, 0x8d02, 0x8d82, - 0x8d84, 0x8ee4, 0x90ce, 0x913e, 0x9140, 0x9148, 0x9191, 0x91a2, - 0x91a3, 0x92b0, 0x930e, 0x9311, 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, - 0xa7c5, 0xa825, 0xa865, 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa9ad, - 0xa9e5, 0xabf9, 0xac4d, 0xacd9, 0xae49, 0xae5a, 0xae7d, 0xae99, - 0xaeaa, 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb3bd, - 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, 0xb7e5, - 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, 0xbc72, 0xbc76, - 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd41, 0xbd42, 0xbd56, - 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, 0xc17a, 0xc17b, 0xc185, - 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, 0xc25e, 0xc281, 0xc301, 0xc306, - 0xc329, 0xc32d, 0xc33a, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4c6, - 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca29, 0xca49, - 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, 0xcedd, - 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, 0xd20a, - 0xd20d, 0xd211, 0xd279, 0xfac1, 0xfacf + 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c0, 0x62c2, 0x62d4, 0x62e1, + 0x62ef, 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, + 0x688a, 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a45, + 0x6a96, 0x6ab4, 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, + 0x6e6b, 0x6e75, 0x6f65, 0x6fb3, 0x70dd, 0x70ea, 0x7230, 0x7231, + 0x7239, 0x746f, 0x7587, 0x75c2, 0x76fe, 0x7709, 0x78b0, 0x78cf, + 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, 0x7967, 0x7a5c, 0x7a79, + 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, 0x7cb2, 0x8401, 0x8540, + 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, 0x8626, 0x8642, + 0x8659, 0x865f, 0x8662, 0x8680, 0x871b, 0x8773, 0x8774, 0x878a, + 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x88f9, 0x893a, + 0x8968, 0x89a4, 0x8abe, 0x8b32, 0x8b71, 0x8b90, 0x8b93, 0x8bb6, + 0x8bd8, 0x8c09, 0x8d02, 0x8d82, 0x8d84, 0x8ee4, 0x90ce, 0x913e, + 0x9140, 0x9148, 0x9191, 0x91a2, 0x91a3, 0x92b0, 0x930e, 0x9311, + 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, 0xa7c5, 0xa825, 0xa861, 0xa865, + 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa921, 0xa9ad, 0xa9e5, 0xabf9, + 0xac4d, 0xacd9, 0xad0a, 0xae49, 0xae5a, 0xae7d, 0xae99, 0xaeaa, + 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb0de, 0xb3bd, + 0xb3d9, 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, + 0xb7d1, 0xb7e5, 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, + 0xbc72, 0xbc76, 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd00, + 0xbd41, 0xbd42, 0xbd56, 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, + 0xc0fd, 0xc17a, 0xc17b, 0xc185, 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, + 0xc25e, 0xc269, 0xc281, 0xc2f9, 0xc301, 0xc306, 0xc329, 0xc32d, + 0xc33a, 0xc355, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4b1, 0xc4c6, + 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca11, 0xca29, + 0xca49, 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, + 0xcedd, 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, + 0xd20a, 0xd20d, 0xd211, 0xd279, 0xfab6, 0xfac1, 0xfacf }; /*Collect the unicode lists and glyph_id offsets*/ @@ -3624,15 +3867,15 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = }, { .range_start = 259, .range_length = 805, .glyph_id_start = 191, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 41, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY }, { - .range_start = 1072, .range_length = 25, .glyph_id_start = 231, + .range_start = 1072, .range_length = 25, .glyph_id_start = 232, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY }, { - .range_start = 1099, .range_length = 64208, .glyph_id_start = 256, - .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 429, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .range_start = 1099, .range_length = 64208, .glyph_id_start = 257, + .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 471, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; @@ -3670,13 +3913,13 @@ static const uint8_t kern_left_class_mapping[] = 44, 44, 44, 44, 45, 32, 45, 31, 59, 0, 11, 0, 12, 60, 33, 33, 0, 36, 19, 61, 41, 42, 23, 42, - 42, 62, 47, 47, 47, 0, 42, 43, - 63, 64, 65, 66, 67, 66, 63, 63, - 63, 68, 63, 69, 70, 67, 63, 71, - 72, 73, 74, 75, 76, 77, 73, 78, - 79, 77, 79, 79, 79, 80, 78, 80, - 81, 74, 82, 80, 83, 75, 78, 79, - 78, 84, 80, 78, 85, 86, 0, 0, + 42, 62, 44, 47, 47, 47, 0, 42, + 43, 63, 64, 65, 66, 67, 66, 63, + 63, 63, 68, 63, 69, 70, 67, 63, + 71, 72, 73, 74, 75, 76, 77, 73, + 78, 79, 77, 79, 79, 79, 80, 78, + 80, 81, 74, 82, 80, 83, 75, 78, + 79, 78, 84, 80, 78, 85, 86, 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, @@ -3729,7 +3972,12 @@ static const uint8_t kern_left_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Map glyph_ids to kern right classes*/ @@ -3761,13 +4009,13 @@ static const uint8_t kern_right_class_mapping[] = 37, 37, 37, 37, 38, 0, 38, 49, 25, 26, 14, 50, 48, 26, 26, 50, 28, 30, 13, 55, 0, 35, 16, 35, - 56, 36, 41, 41, 41, 0, 35, 36, - 57, 58, 57, 57, 57, 0, 57, 57, - 57, 59, 57, 57, 59, 60, 61, 62, - 0, 63, 63, 64, 65, 66, 67, 63, - 63, 63, 68, 63, 63, 65, 63, 63, - 65, 69, 70, 65, 71, 63, 72, 63, - 63, 63, 63, 63, 73, 74, 0, 0, + 56, 36, 37, 41, 41, 41, 0, 35, + 36, 57, 58, 57, 57, 57, 0, 57, + 57, 57, 59, 57, 57, 59, 60, 61, + 62, 0, 63, 63, 64, 65, 66, 67, + 63, 63, 63, 68, 63, 63, 65, 63, + 63, 65, 69, 70, 65, 71, 63, 72, + 63, 63, 63, 63, 63, 73, 74, 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, @@ -3820,7 +4068,12 @@ static const uint8_t kern_right_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Kern values between classes*/ diff --git a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_16_4.c b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_16_4.c index 1bcd19f..ba5c673 100644 --- a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_16_4.c +++ b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_16_4.c @@ -1707,6 +1707,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x7, 0xe0, 0x0, 0x7, 0xe0, 0x0, 0x5, 0xf5, 0x30, 0x0, 0xbf, 0xf1, + /* U+016F "ů" */ + 0x0, 0x5e, 0xd3, 0x0, 0x0, 0xb5, 0x88, 0x0, + 0x0, 0x4d, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x9c, 0x0, 0x0, 0xf5, 0x9c, 0x0, 0x0, 0xf5, + 0x9c, 0x0, 0x0, 0xf5, 0x9c, 0x0, 0x0, 0xf5, + 0x9c, 0x0, 0x0, 0xf5, 0x9c, 0x0, 0x0, 0xf5, + 0x8d, 0x0, 0x3, 0xf5, 0x5f, 0x51, 0x4c, 0xf5, + 0x8, 0xef, 0xd5, 0xe5, + /* U+017A "ź" */ 0x0, 0x0, 0xbd, 0x10, 0x0, 0x5, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff, 0xf4, @@ -2161,6 +2170,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xf, 0xde, 0x30, 0x0, 0xc, 0xc1, 0x0, 0x0, 0x8, 0xc0, 0x0, + /* U+0E09 "ฉ" */ + 0xa, 0xdf, 0xfd, 0x70, 0x0, 0x84, 0x33, 0x7f, + 0x80, 0x0, 0x0, 0x0, 0x9d, 0x4, 0xdb, 0x10, + 0x7, 0xe0, 0xa5, 0xb5, 0x0, 0x7e, 0x4, 0xcf, + 0x60, 0xc, 0xa0, 0x0, 0xe7, 0x5c, 0xfc, 0x20, + 0xe, 0xea, 0xc7, 0x79, 0x0, 0xe6, 0x4, 0xdd, + 0x40, + /* U+0E0A "ช" */ 0xc, 0xdb, 0x0, 0xab, 0x3d, 0xf, 0x20, 0xd8, 0x8, 0xdf, 0x2f, 0xd0, 0x0, 0xe7, 0x4, 0xf4, @@ -2651,6 +2668,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x8, 0xef, 0xd5, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x60, 0x0, 0x0, 0xd, 0xa0, 0x0, + /* U+1EE7 "ủ" */ + 0x0, 0x8d, 0xd5, 0x0, 0x0, 0x0, 0x5c, 0x0, + 0x0, 0xd, 0xa3, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x9c, 0x0, 0x0, 0xf5, 0x9c, 0x0, 0x0, 0xf5, + 0x9c, 0x0, 0x0, 0xf5, 0x9c, 0x0, 0x0, 0xf5, + 0x9c, 0x0, 0x0, 0xf5, 0x9c, 0x0, 0x0, 0xf5, + 0x8d, 0x0, 0x3, 0xf5, 0x5f, 0x51, 0x4c, 0xf5, + 0x8, 0xef, 0xd5, 0xe5, + /* U+1EED "ử" */ 0x0, 0x9d, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x6, 0xb0, 0x0, 0x0, 0x0, 0xe, 0xa2, 0x0, 0x2, @@ -2667,8 +2693,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0xf4, 0x0, 0x4, 0x0, /* U+3002 "。" */ - 0x0, 0x0, 0x0, 0x8, 0xdd, 0x50, 0x2d, 0x1, - 0xe0, 0x2d, 0x1, 0xe0, 0x7, 0xdd, 0x50, + 0x0, 0x0, 0x0, 0xa, 0xde, 0x70, 0x2d, 0x0, + 0xf0, 0x9, 0xee, 0x70, /* U+3044 "い" */ 0xd, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, @@ -2727,6 +2753,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x68, 0xed, 0x10, 0x6, 0xcf, 0xe2, 0x0, 0xcb, 0x60, 0x0, + /* U+304B "か" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf2, + 0x0, 0x0, 0xb4, 0x0, 0x37, 0x9c, 0xfe, 0xec, + 0x30, 0x8e, 0x10, 0x7b, 0x9d, 0xb3, 0x3b, 0xc0, + 0xd, 0x90, 0x0, 0xe, 0x50, 0x5, 0xf0, 0x5, + 0xf2, 0x0, 0x4f, 0x10, 0x4, 0xf0, 0x0, 0xe8, + 0x0, 0xab, 0x0, 0x5, 0xf0, 0x0, 0x9d, 0x0, + 0xf5, 0x0, 0x6, 0xe0, 0x0, 0x22, 0x7, 0xe0, + 0x0, 0x8, 0xd0, 0x0, 0x0, 0xe, 0x80, 0x0, + 0xc, 0x90, 0x0, 0x0, 0x6f, 0x11, 0x96, 0x8f, + 0x40, 0x0, 0x0, 0x87, 0x0, 0xac, 0xc6, 0x0, + 0x0, 0x0, + /* U+304C "が" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xa0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0xb5, 0xa5, @@ -2767,6 +2808,17 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0xde, 0x30, 0x0, 0x0, 0x1, 0xe7, 0x0, 0x0, 0x0, 0x1, 0x0, + /* U+3053 "こ" */ + 0x1, 0xca, 0x87, 0x76, 0x78, 0x30, 0x0, 0x8a, + 0xcc, 0xdd, 0xdc, 0x40, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x30, + 0x0, 0x0, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, 0x0, 0x0, + 0xf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf9, + 0x42, 0x22, 0x35, 0x70, 0x0, 0x6c, 0xff, 0xff, + 0xff, 0xc0, 0x0, 0x0, 0x1, 0x21, 0x10, 0x0, + /* U+3055 "さ" */ 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe0, @@ -2853,6 +2905,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xa7, 0x67, 0x82, 0x2a, 0x0, 0x0, 0x4, 0xac, 0xdd, 0xc3, + /* U+3061 "ち" */ + 0x0, 0x7, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x9, + 0xa0, 0x0, 0x2, 0x0, 0x34, 0x4c, 0xb7, 0xac, + 0xfb, 0x0, 0x9d, 0xdf, 0xca, 0x86, 0x30, 0x0, + 0x0, 0x2f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, + 0x0, 0x1, 0x0, 0x0, 0x0, 0xc7, 0x7d, 0xff, + 0xfc, 0x30, 0x2, 0xff, 0xc5, 0x10, 0x2b, 0xe1, + 0xa, 0xf5, 0x0, 0x0, 0x0, 0xf6, 0x2, 0x30, + 0x0, 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xf2, 0x0, 0x3, 0x43, 0x57, 0xcf, 0x60, + 0x0, 0x4, 0xff, 0xec, 0x82, 0x0, + /* U+3063 "っ" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x59, 0xdf, 0xfd, 0x60, 0x2d, 0xfe, 0x95, 0x33, 0x7f, @@ -2862,6 +2926,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1, 0x36, 0xbf, 0x70, 0x0, 0x1, 0xff, 0xd9, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, + /* U+3064 "つ" */ + 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, + 0x1, 0x59, 0xdf, 0xff, 0xe6, 0x0, 0x27, 0xcf, + 0xfa, 0x63, 0x13, 0x9f, 0x70, 0x5e, 0xa5, 0x0, + 0x0, 0x0, 0x9, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xb0, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xee, 0x20, 0x0, + 0x0, 0x16, 0x8a, 0xef, 0xa1, 0x0, 0x0, 0x0, + 0x1d, 0xca, 0x61, 0x0, 0x0, + /* U+3066 "て" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, 0x13, 0x57, 0x9a, 0xce, 0xff, 0xf0, 0x6f, 0xff, @@ -2920,6 +2996,35 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x8e, 0xff, 0xff, 0xe5, 0x7, 0x80, 0x0, 0x0, 0x1, 0x10, 0x0, + /* U+306E "の" */ + 0x0, 0x0, 0x6b, 0xef, 0xda, 0x30, 0x0, 0x0, + 0x3d, 0xd7, 0xe7, 0x4a, 0xf7, 0x0, 0x2, 0xe9, + 0x0, 0xe5, 0x0, 0x5f, 0x40, 0xb, 0xb0, 0x0, + 0xf3, 0x0, 0xa, 0xc0, 0x2f, 0x30, 0x4, 0xf0, + 0x0, 0x5, 0xf0, 0x5e, 0x0, 0x9, 0xb0, 0x0, + 0x3, 0xf2, 0x7d, 0x0, 0xe, 0x50, 0x0, 0x4, + 0xf0, 0x7e, 0x0, 0x6e, 0x0, 0x0, 0x8, 0xd0, + 0x3f, 0x51, 0xe7, 0x0, 0x0, 0x2f, 0x70, 0xa, + 0xff, 0xb0, 0x0, 0x4, 0xec, 0x0, 0x0, 0x45, + 0x0, 0x7, 0xcf, 0xb0, 0x0, 0x0, 0x0, 0x0, + 0x5, 0x93, 0x0, 0x0, + + /* U+306F "は" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3e, 0x10, 0x0, 0x0, 0xe7, 0x0, 0x0, 0x4, + 0xf0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x6d, + 0x0, 0x0, 0x0, 0xe8, 0x46, 0x20, 0x9, 0xb0, + 0x1f, 0xff, 0xff, 0xfe, 0xb3, 0x0, 0xb8, 0x0, + 0x22, 0x21, 0xd7, 0x0, 0x0, 0xd, 0x60, 0x0, + 0x0, 0xd, 0x80, 0x0, 0x0, 0xf5, 0x0, 0x0, + 0x0, 0xc9, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, + 0xa, 0xa0, 0x0, 0x0, 0xf4, 0x0, 0x29, 0xcd, + 0xed, 0x10, 0x0, 0xf, 0x50, 0xe, 0xa4, 0x4b, + 0xff, 0x60, 0x0, 0xe6, 0x2, 0xf1, 0x0, 0xab, + 0x7f, 0x80, 0xc, 0xa0, 0xe, 0xa5, 0x6f, 0x60, + 0x5d, 0x0, 0x7a, 0x0, 0x2a, 0xdc, 0x60, 0x0, + 0x0, + /* U+307E "ま" */ 0x0, 0x0, 0x2, 0x60, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x2, 0x21, 0x4, 0xf2, @@ -2933,6 +3038,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3f, 0x51, 0x29, 0xe0, 0x5, 0xd8, 0x5, 0xcf, 0xfc, 0x30, 0x0, 0x0, + /* U+307F "み" */ + 0x0, 0x25, 0x67, 0x99, 0x0, 0x0, 0x0, 0x0, + 0x6d, 0xcb, 0xaf, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xf3, 0x0, 0x20, 0x0, 0x0, 0x0, 0x7, 0xc0, + 0x0, 0xc6, 0x0, 0x0, 0x1, 0x4e, 0x80, 0x0, + 0xe4, 0x0, 0x3, 0xce, 0xef, 0xef, 0xb6, 0xf1, + 0x0, 0x3f, 0x60, 0xd6, 0x1, 0x7d, 0xf6, 0x0, + 0xa8, 0x6, 0xd0, 0x0, 0xd, 0xae, 0xb1, 0xb7, + 0x4f, 0x30, 0x0, 0x6e, 0x1, 0xc7, 0x6f, 0xf6, + 0x0, 0x4, 0xf4, 0x0, 0x0, 0x1, 0x0, 0x0, + 0x7f, 0x70, 0x0, 0x0, 0x0, 0x0, 0x7, 0xe4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+3082 "も" */ 0x0, 0x0, 0x2, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, @@ -3243,6 +3363,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+30C0 "ダ" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, + 0x0, 0x0, 0x5, 0x0, 0x0, 0xb3, 0xd1, 0x0, + 0x0, 0x4, 0xf4, 0x0, 0x4, 0xb6, 0x80, 0x0, + 0x0, 0xdd, 0x33, 0x33, 0x37, 0x0, 0x0, 0x0, + 0x8f, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x5f, + 0x60, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x4f, 0x90, + 0x0, 0x0, 0xcb, 0x0, 0x0, 0x6f, 0xa2, 0xc4, + 0x0, 0x4f, 0x40, 0x0, 0x1d, 0x70, 0xa, 0xf8, + 0xd, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xfe, + 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf5, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2c, 0xf7, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x8f, 0xe4, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xde, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+30C3 "ッ" */ 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x11, 0x8, 0xd0, 0x0, 0x76, 0xc, 0xb0, 0x1f, 0x50, 0xd, @@ -3586,44 +3723,42 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x44, 0x44, 0x46, 0xf5, 0x44, 0x44, 0x43, 0x0, 0x0, 0x0, 0x2f, 0x20, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x2, 0xf2, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x2f, 0x7e, 0x40, 0x0, 0x0, 0x0, 0x0, - 0x2, 0xf2, 0x7f, 0x60, 0x0, 0x0, 0x0, 0x0, - 0x2f, 0x20, 0x6f, 0x80, 0x0, 0x0, 0x0, 0x2, - 0xf2, 0x0, 0x5f, 0x60, 0x0, 0x0, 0x0, 0x2f, - 0x20, 0x0, 0x62, 0x0, 0x0, 0x0, 0x2, 0xf2, + 0x0, 0x2, 0xf3, 0x50, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2f, 0x6f, 0x90, 0x0, 0x0, 0x0, 0x0, + 0x2, 0xf2, 0x3e, 0xb1, 0x0, 0x0, 0x0, 0x0, + 0x2f, 0x20, 0x1d, 0xd1, 0x0, 0x0, 0x0, 0x2, + 0xf2, 0x0, 0xc, 0x60, 0x0, 0x0, 0x0, 0x2f, + 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x20, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, - 0x0, + 0x0, 0x0, /* U+4E0D "不" */ 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, - 0x24, 0x44, 0x44, 0x7f, 0x64, 0x44, 0x40, 0x0, - 0x0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0x52, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xea, 0xe5, 0xcb, 0x10, 0x0, 0x0, 0x1, 0xdc, - 0xe, 0x51, 0xdd, 0x10, 0x0, 0x1, 0xdd, 0x10, - 0xe5, 0x1, 0xce, 0x20, 0x4, 0xec, 0x10, 0xe, - 0x50, 0x1, 0xde, 0x12, 0xfb, 0x0, 0x0, 0xe5, - 0x0, 0x1, 0xe7, 0x4, 0x0, 0x0, 0xe, 0x50, - 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0xe5, 0x0, + 0x24, 0x44, 0x44, 0x8f, 0x54, 0x44, 0x40, 0x0, + 0x0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0xff, 0x55, 0x20, 0x0, 0x0, 0x0, 0x5, + 0xf5, 0xe5, 0x9f, 0x40, 0x0, 0x0, 0x6, 0xf6, + 0xe, 0x50, 0x7f, 0x70, 0x0, 0x9, 0xf6, 0x0, + 0xe5, 0x0, 0x5f, 0x80, 0x1c, 0xe4, 0x0, 0xe, + 0x50, 0x0, 0x5f, 0x70, 0x81, 0x0, 0x0, 0xe5, + 0x0, 0x0, 0x51, 0x0, 0x0, 0x0, 0xe, 0x50, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xe5, 0x0, 0x0, - 0x0, + 0x0, 0x0, /* U+4E2D "中" */ 0x0, 0x0, 0x0, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xe5, 0x0, 0x0, 0x2, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf8, 0x2f, 0x43, 0x33, 0xf8, 0x33, 0x3c, - 0x82, 0xf1, 0x0, 0xe, 0x50, 0x0, 0xb8, 0x2f, + 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x50, + 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x82, 0xf4, 0x33, 0x3f, 0x83, 0x33, 0xc8, 0x2f, 0x10, 0x0, 0xe5, 0x0, 0xb, 0x82, 0xf1, 0x0, - 0xe, 0x50, 0x0, 0xb8, 0x2f, 0x43, 0x33, 0xf7, - 0x33, 0x3c, 0x82, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x0, 0x0, 0xe5, 0x0, 0x0, 0x0, + 0xe, 0x50, 0x0, 0xb8, 0x2f, 0x10, 0x0, 0xe5, + 0x0, 0xb, 0x82, 0xf4, 0x33, 0x3f, 0x73, 0x33, + 0xc8, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe5, 0x0, @@ -3656,7 +3791,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0xf0, 0x2, 0xf0, 0x2f, 0x0, 0x3e, 0x2, 0xff, 0xff, 0xf0, 0x2f, 0x0, 0x3e, 0x0, 0x22, 0x22, 0x33, 0x8f, 0x0, 0x3e, 0x0, 0x0, 0x0, - 0x8f, 0xe7, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x0, + 0x8f, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+4F4E "低" */ @@ -3672,9 +3807,26 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x3e, 0x0, 0xf3, 0x0, 0x6c, 0x0, 0x0, 0x0, 0x3e, 0x0, 0xf3, 0x5a, 0x2f, 0x0, 0x10, 0x0, 0x3e, 0x0, 0xfb, 0xf4, 0xe, 0x51, 0xe0, - 0x0, 0x3e, 0x3, 0xfb, 0xc8, 0x7, 0xea, 0xb0, - 0x0, 0x3e, 0x1, 0x70, 0x3f, 0x40, 0xae, 0x20, - 0x0, 0x3e, 0x0, 0x0, 0x9, 0x30, 0x0, 0x0, + 0x0, 0x3e, 0x3, 0xfb, 0xb8, 0x7, 0xea, 0xb0, + 0x0, 0x3e, 0x1, 0x70, 0xc, 0x40, 0xae, 0x20, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, + + /* U+4F60 "你" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xd0, 0x9, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x8, 0xb0, 0xe, 0x30, 0x0, 0x0, 0x0, + 0x0, 0xe, 0x50, 0x6f, 0xff, 0xff, 0xff, 0x40, + 0x0, 0x6f, 0x0, 0xd7, 0x33, 0x33, 0x5f, 0x20, + 0x0, 0xde, 0x6, 0xd0, 0x6, 0x20, 0x9b, 0x0, + 0x6, 0xfe, 0xe, 0x50, 0xd, 0x50, 0x93, 0x0, + 0x1f, 0x8e, 0x3, 0x1, 0xd, 0x50, 0x10, 0x0, + 0x28, 0x3e, 0x0, 0x6a, 0xd, 0x54, 0xd0, 0x0, + 0x0, 0x3e, 0x0, 0xc4, 0xd, 0x50, 0xc6, 0x0, + 0x0, 0x3e, 0x3, 0xe0, 0xd, 0x50, 0x5d, 0x0, + 0x0, 0x3e, 0xb, 0x70, 0xd, 0x50, 0xe, 0x40, + 0x0, 0x3e, 0x3e, 0x0, 0xd, 0x50, 0x7, 0xb0, + 0x0, 0x3e, 0x45, 0x1, 0x4e, 0x50, 0x2, 0xa0, + 0x0, 0x3e, 0x0, 0x9, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+4FE1 "信" */ @@ -3692,7 +3844,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x4e, 0x1, 0xf1, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x4e, 0x1, 0xf4, 0x33, 0x33, 0x7e, 0x0, 0x0, 0x4e, 0x1, 0xfe, 0xee, 0xee, 0xee, 0x0, - 0x0, 0x4e, 0x1, 0xf1, 0x0, 0x0, 0x5e, 0x0, + + /* U+5019 "候" */ + 0x0, 0x9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0x10, 0xc, 0xff, 0xff, 0xf0, 0x0, + 0x0, 0x6b, 0x3d, 0x0, 0x0, 0x4, 0xf0, 0x0, + 0x0, 0xc6, 0x3d, 0x12, 0x22, 0x27, 0xe2, 0x10, + 0x3, 0xf4, 0x3d, 0x9e, 0xee, 0xee, 0xee, 0xb0, + 0xb, 0xf4, 0x3d, 0x3, 0xa0, 0x0, 0x0, 0x0, + 0x3f, 0xd4, 0x3d, 0x9, 0xd8, 0x88, 0x88, 0x0, + 0xb7, 0xc4, 0x3d, 0x2e, 0x89, 0xf8, 0x87, 0x0, + 0x20, 0xc4, 0x3d, 0x67, 0x3, 0xe0, 0x0, 0x0, + 0x0, 0xc4, 0x3d, 0x8b, 0xbc, 0xfb, 0xbb, 0x60, + 0x0, 0xc4, 0x3d, 0x34, 0x4b, 0xf6, 0x44, 0x20, + 0x0, 0xc4, 0x3d, 0x0, 0x3f, 0xbc, 0x10, 0x0, + 0x0, 0xc4, 0x2, 0x18, 0xe6, 0x7, 0xe6, 0x0, + 0x0, 0xc4, 0x1, 0xe8, 0x10, 0x0, 0x2a, 0xb0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5099 "備" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -3709,8 +3877,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x3e, 0x3, 0xe0, 0xc, 0x50, 0x4c, 0x0, 0x0, 0x3e, 0x3, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x3e, 0x3, 0xe0, 0xc, 0x50, 0x4c, 0x0, - 0x0, 0x3e, 0x3, 0xe0, 0xc, 0x5b, 0xeb, 0x0, - 0x0, 0x3e, 0x3, 0xe0, 0x0, 0x9, 0xb3, 0x0, + 0x0, 0x3e, 0x3, 0xe0, 0xc, 0x59, 0xc5, 0x0, /* U+5145 "充" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -3792,9 +3959,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0x6e, 0x22, 0x2c, 0x82, 0x25, 0xf2, 0x20, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x4e, 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, - 0x0, 0x4e, 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, - 0x0, 0x4e, 0x0, 0x0, 0x2, 0x7c, 0xe0, 0x0, - 0x0, 0x4e, 0x0, 0x0, 0x1, 0xdb, 0x40, 0x0, + 0x0, 0x4e, 0x0, 0x0, 0x0, 0x17, 0xf0, 0x0, + 0x0, 0x4e, 0x0, 0x0, 0x2, 0xec, 0x60, 0x0, /* U+51FA "出" */ 0x0, 0x0, 0x0, 0xa3, 0x0, 0x0, 0x0, 0x25, @@ -3802,14 +3968,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xe4, 0x0, 0x1f, 0x20, 0x6c, 0x0, 0xe, 0x40, 0x1, 0xf2, 0x6, 0xc0, 0x0, 0xe4, 0x0, 0x1f, 0x20, 0x6d, 0x33, 0x3f, 0x73, 0x35, 0xf2, 0x6, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, - 0xe, 0x40, 0x0, 0x0, 0x5, 0x0, 0x0, 0xe4, - 0x0, 0x2, 0x51, 0xf2, 0x0, 0xe, 0x40, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x50, 0x0, + 0xe, 0x40, 0x0, 0x25, 0x1f, 0x20, 0x0, 0xe4, + 0x0, 0x7, 0xd1, 0xf2, 0x0, 0xe, 0x40, 0x0, 0x7d, 0x1f, 0x20, 0x0, 0xe4, 0x0, 0x7, 0xd1, 0xf2, 0x0, 0xe, 0x40, 0x0, 0x7d, 0x1f, 0x53, 0x33, 0xf7, 0x33, 0x39, 0xd1, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xd0, + 0xff, 0xff, 0xfd, /* U+5207 "切" */ 0x0, 0x19, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -3836,14 +4001,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd4, 0x0, 0xc5, 0x0, 0x2f, 0x0, 0x0, 0x99, 0x3, 0xd, 0x40, 0x3, 0xf0, 0x0, 0x6f, 0x25, 0xc0, 0xf3, 0x0, 0x4e, 0x0, 0x5e, 0xfa, 0xe2, - 0x1f, 0x20, 0x4, 0xe0, 0x5e, 0x3f, 0xdc, 0x13, - 0xf0, 0x0, 0x5d, 0x2, 0x21, 0xf2, 0xa8, 0x7d, - 0x0, 0x6, 0xc0, 0x0, 0x1f, 0x10, 0x1d, 0x90, - 0x0, 0x6c, 0x0, 0x1, 0xf1, 0x7, 0xf2, 0x0, - 0x8, 0xb0, 0x0, 0x1f, 0x13, 0xfa, 0x2, 0x46, - 0xe9, 0x0, 0x1, 0xf2, 0xee, 0x10, 0x7f, 0xeb, - 0x10, 0x0, 0x1f, 0x19, 0x40, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0x10, 0x4, 0xe0, 0x5e, 0x3f, 0xdc, 0x13, + 0xf0, 0x0, 0x5d, 0x2, 0x21, 0xf2, 0xa8, 0x7b, + 0x0, 0x6, 0xc0, 0x0, 0x1f, 0x10, 0x1d, 0x50, + 0x0, 0x6c, 0x0, 0x1, 0xf1, 0x7, 0xc0, 0x0, + 0x8, 0xb0, 0x0, 0x1f, 0x13, 0xe2, 0x2, 0x46, + 0xe9, 0x0, 0x1, 0xf2, 0xd4, 0x0, 0x7f, 0xeb, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, /* U+5229 "利" */ 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x2a, 0x0, @@ -3859,7 +4024,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xa0, 0x3f, 0x2, 0x80, 0xc, 0x60, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0xc6, 0x0, 0x0, 0x23, 0xaf, 0x0, 0x0, 0xc, 0x60, 0x0, 0xa, 0xfd, - 0x60, 0x0, 0x0, 0xc6, 0x0, 0x0, 0x0, 0x0, + 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5230 "到" */ @@ -3873,10 +4038,27 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0x44, 0x9c, 0x44, 0x30, 0xf1, 0x3f, 0x9, 0xdd, 0xef, 0xdd, 0xc0, 0xf1, 0x3f, 0x0, 0x0, 0x7b, 0x0, 0x0, 0xf1, 0x3f, 0x0, 0x0, 0x7b, - 0x0, 0x0, 0x10, 0x3f, 0x1, 0x34, 0xad, 0x9b, - 0xd4, 0x0, 0x3f, 0x5f, 0xff, 0xed, 0xba, 0x82, - 0x13, 0x9f, 0x3, 0x10, 0x0, 0x0, 0x0, 0x8f, - 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x13, 0x41, 0x10, 0x3f, 0x3b, 0xde, 0xfe, 0xdb, + 0xa3, 0x13, 0x9f, 0x3, 0x21, 0x0, 0x0, 0x0, + 0x8f, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, + + /* U+52A0 "加" */ + 0x0, 0xc, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x2e, 0x62, 0x21, 0x1f, 0xff, 0xff, 0x10, 0xff, + 0xff, 0xff, 0x61, 0xf3, 0x23, 0xf1, 0x0, 0xf, + 0x30, 0xd5, 0x1f, 0x10, 0x1f, 0x10, 0x0, 0xf2, + 0xd, 0x51, 0xf1, 0x1, 0xf1, 0x0, 0x1f, 0x10, + 0xe5, 0x1f, 0x10, 0x1f, 0x10, 0x3, 0xf0, 0xe, + 0x41, 0xf1, 0x1, 0xf1, 0x0, 0x6c, 0x0, 0xe4, + 0x1f, 0x10, 0x1f, 0x10, 0xa, 0x90, 0xf, 0x41, + 0xf1, 0x1, 0xf1, 0x0, 0xe4, 0x0, 0xf3, 0x1f, + 0x10, 0x1f, 0x10, 0x6e, 0x0, 0xf, 0x31, 0xf4, + 0x34, 0xf1, 0x1e, 0x60, 0x14, 0xf2, 0x1f, 0xff, + 0xff, 0x18, 0xc0, 0xa, 0xd8, 0x1, 0xf1, 0x1, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, /* U+52A1 "务" */ 0x0, 0x0, 0x9, 0x40, 0x0, 0x0, 0x0, 0x0, @@ -3943,43 +4125,61 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x7, 0xb0, 0x0, 0xe5, 0x0, 0x3f, 0x0, 0x0, 0x9a, 0x0, 0xe, 0x50, 0x2, 0xf7, 0x33, 0x4e, 0x70, 0x0, 0xe5, 0x0, 0xa, 0xff, 0xff, - 0xc1, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x0, + 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5347 "升" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, - 0x0, 0x0, 0x36, 0x9b, 0xb, 0x90, 0x0, 0x5, - 0xce, 0xff, 0xa6, 0x30, 0xb9, 0x0, 0x0, 0x13, - 0x17, 0xd0, 0x0, 0xb, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0x79, 0xb, 0x90, 0x0, 0x3, + 0x8a, 0xdf, 0xfb, 0x70, 0xb9, 0x0, 0x0, 0x4b, + 0x9a, 0xe0, 0x0, 0xb, 0x90, 0x0, 0x0, 0x0, 0x7d, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0, 0x7, - 0xd0, 0x0, 0xb, 0x90, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xc0, 0x33, 0x39, 0xd3, - 0x33, 0x3c, 0xa3, 0x32, 0x0, 0x0, 0x8b, 0x0, - 0x0, 0xb9, 0x0, 0x0, 0x0, 0xa, 0x90, 0x0, - 0xb, 0x90, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, - 0xb9, 0x0, 0x0, 0x0, 0x8f, 0x0, 0x0, 0xb, - 0x90, 0x0, 0x0, 0x5f, 0x60, 0x0, 0x0, 0xb9, - 0x0, 0x0, 0x7f, 0x90, 0x0, 0x0, 0xb, 0x90, - 0x0, 0xa, 0x80, 0x0, 0x0, 0x0, 0xb9, 0x0, + 0xd0, 0x0, 0xb, 0x90, 0x0, 0x0, 0x0, 0x7d, + 0x0, 0x0, 0xb9, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, 0x3, 0x33, 0x9d, 0x33, + 0x33, 0xca, 0x33, 0x20, 0x0, 0x8, 0xb0, 0x0, + 0xb, 0x90, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x0, + 0xb9, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0xb, + 0x90, 0x0, 0x0, 0x2e, 0xa0, 0x0, 0x0, 0xb9, + 0x0, 0x0, 0x4e, 0xb0, 0x0, 0x0, 0xb, 0x90, + 0x0, 0xa, 0x90, 0x0, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5361 "卡" */ 0x0, 0x0, 0x0, 0x15, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xff, 0xff, 0xf5, 0x0, 0x0, - 0x0, 0x3, 0xf3, 0x33, 0x33, 0x10, 0x0, 0x0, - 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xa0, 0x33, 0x33, 0x36, - 0xf3, 0x33, 0x33, 0x32, 0x0, 0x0, 0x0, 0x3f, - 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf7, - 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x2, - 0xbf, 0x70, 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, - 0x6f, 0xa0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, - 0x25, 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, + 0x0, 0x3f, 0x33, 0x33, 0x31, 0x0, 0x0, 0x0, + 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfa, 0x3, 0x33, 0x33, 0x6f, + 0x33, 0x33, 0x33, 0x20, 0x0, 0x0, 0x3, 0xf6, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x4c, + 0xe7, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf0, 0x4, + 0xdd, 0x40, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, + 0x79, 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, + /* U+53CB "友" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xd, 0x70, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x3, 0x33, 0x6f, 0x43, 0x33, 0x33, 0x33, 0x20, + 0x0, 0x0, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x9d, 0x44, 0x44, 0x44, 0x40, 0x0, + 0x0, 0x0, 0xef, 0xed, 0xdd, 0xde, 0xf0, 0x0, + 0x0, 0x4, 0xfa, 0xb0, 0x0, 0x9, 0xb0, 0x0, + 0x0, 0x9, 0xc0, 0xe4, 0x0, 0x3f, 0x30, 0x0, + 0x0, 0x2f, 0x50, 0x5e, 0x21, 0xe9, 0x0, 0x0, + 0x0, 0xad, 0x0, 0x8, 0xed, 0xb0, 0x0, 0x0, + 0x3, 0xf4, 0x0, 0x6, 0xff, 0x60, 0x0, 0x0, + 0x1e, 0xa0, 0x5, 0xde, 0x65, 0xed, 0x50, 0x0, + 0x7d, 0x7, 0xef, 0x81, 0x0, 0x18, 0xfe, 0x80, + 0x1, 0x7, 0x60, 0x0, 0x0, 0x0, 0x6, 0x70, + /* U+53D1 "发" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x70, 0xd, 0x60, 0x4d, 0x50, 0x0, 0x0, @@ -4020,14 +4220,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x4e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xd0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, 0xf, 0xff, - 0xff, 0xff, 0xf4, 0x0, 0x9, 0x90, 0xf3, 0x22, - 0x22, 0x2e, 0x40, 0x0, 0xe6, 0xf, 0x20, 0x0, - 0x0, 0xe4, 0x0, 0x5f, 0x10, 0xf2, 0x0, 0x0, - 0xe, 0x40, 0xd, 0x90, 0xf, 0xdd, 0xdd, 0xdd, - 0xf4, 0x5, 0xf1, 0x0, 0xf5, 0x44, 0x44, 0x4f, - 0x40, 0x3, 0x0, 0xf, 0x20, 0x0, 0x0, 0xe4, - 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0xf, 0xff, + 0xff, 0xff, 0xf4, 0x0, 0xa, 0x80, 0xf3, 0x22, + 0x22, 0x2e, 0x40, 0x0, 0xf3, 0xf, 0x20, 0x0, + 0x0, 0xe4, 0x0, 0x6d, 0x0, 0xf2, 0x0, 0x0, + 0xe, 0x40, 0xe, 0x40, 0xf, 0xdd, 0xdd, 0xdd, + 0xf4, 0x3, 0x80, 0x0, 0xf5, 0x44, 0x44, 0x4f, + 0x40, /* U+542C "听" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, @@ -4036,15 +4235,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3e, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x3e, 0x3, 0xe0, 0x3f, 0x0, 0x0, 0x0, 0x3, 0xe0, 0x3e, 0x3, 0xf2, 0x22, 0x22, 0x21, 0x3e, 0x3, 0xe0, - 0x3f, 0xff, 0xff, 0xff, 0x73, 0xe0, 0x3e, 0x3, + 0x3f, 0xff, 0xff, 0xff, 0x73, 0xe0, 0x3e, 0x4, 0xe0, 0x5, 0xe0, 0x0, 0x3e, 0x3, 0xe0, 0x4d, - 0x0, 0x5e, 0x0, 0x3, 0xe0, 0x3e, 0x5, 0xc0, - 0x5, 0xe0, 0x0, 0x3e, 0x35, 0xe0, 0x8a, 0x0, - 0x5e, 0x0, 0x3, 0xff, 0xfe, 0xc, 0x60, 0x5, - 0xe0, 0x0, 0x0, 0x0, 0x4, 0xf1, 0x0, 0x5e, - 0x0, 0x0, 0x0, 0x1, 0xe8, 0x0, 0x5, 0xe0, - 0x0, 0x0, 0x0, 0x6c, 0x0, 0x0, 0x5e, 0x0, + 0x0, 0x5e, 0x0, 0x3, 0xe0, 0x3e, 0x6, 0xb0, + 0x5, 0xe0, 0x0, 0x3e, 0x35, 0xe0, 0xa8, 0x0, + 0x5e, 0x0, 0x3, 0xff, 0xfe, 0x1f, 0x30, 0x5, + 0xe0, 0x0, 0x0, 0x0, 0xc, 0xa0, 0x0, 0x5e, + 0x0, 0x0, 0x0, 0x6, 0xd1, 0x0, 0x5, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, /* U+542F "启" */ 0x0, 0x0, 0x0, 0x4, 0xd0, 0x0, 0x0, 0x0, @@ -4055,13 +4254,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x4e, 0x22, 0x22, 0x22, 0x22, 0x22, 0x0, 0x5, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7b, 0x4d, 0xdd, - 0xdd, 0xdd, 0xdb, 0x0, 0xa, 0x86, 0xe4, 0x44, - 0x44, 0x47, 0xe0, 0x0, 0xf4, 0x6d, 0x0, 0x0, - 0x0, 0x5e, 0x0, 0x6e, 0x6, 0xd0, 0x0, 0x0, - 0x5, 0xe0, 0xe, 0x70, 0x6e, 0x33, 0x33, 0x33, - 0x7e, 0x6, 0xe0, 0x6, 0xfd, 0xdd, 0xdd, 0xde, - 0xe0, 0x2, 0x0, 0x6d, 0x0, 0x0, 0x0, 0x5e, - 0x0, + 0xdd, 0xdd, 0xdb, 0x0, 0xa, 0x76, 0xe4, 0x44, + 0x44, 0x47, 0xe0, 0x0, 0xf2, 0x6d, 0x0, 0x0, + 0x0, 0x5e, 0x0, 0x6c, 0x6, 0xd0, 0x0, 0x0, + 0x5, 0xe0, 0xe, 0x30, 0x6e, 0x33, 0x33, 0x33, + 0x7e, 0x4, 0x90, 0x6, 0xfd, 0xdd, 0xdd, 0xde, + 0xe0, /* U+544A "告" */ 0x0, 0x1, 0x50, 0x5, 0x80, 0x0, 0x0, 0x0, @@ -4077,7 +4275,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x5, 0xe0, 0x0, 0x1, 0xf1, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0x1f, 0x32, 0x22, 0x22, 0x26, 0xe0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0x1f, 0x10, 0x0, 0x0, 0x5, 0xe0, 0x0, /* U+547D "命" */ @@ -4093,9 +4290,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xe4, 0x15, 0xd0, 0xe4, 0x0, 0xe3, 0x0, 0x0, 0xe3, 0x4, 0xd0, 0xe3, 0x0, 0xe3, 0x0, 0x0, 0xe3, 0x4, 0xd0, 0xe3, 0x0, 0xe3, 0x0, - 0x0, 0xe5, 0x25, 0xd0, 0xe3, 0x4, 0xf3, 0x0, - 0x0, 0xef, 0xff, 0xd0, 0xe3, 0x3f, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xe3, 0x0, 0x0, 0x0, + 0x0, 0xe5, 0x25, 0xd0, 0xe3, 0x4, 0xf2, 0x0, + 0x0, 0xef, 0xff, 0xd0, 0xe3, 0x3f, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe3, 0x0, 0x0, 0x0, /* U+54CD "响" */ @@ -4125,9 +4321,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xe2, 0x0, 0x2d, 0x2, 0xf0, 0x3e, 0x0, 0xe2, 0x0, 0x2d, 0x2, 0xf0, 0x3e, 0x0, 0xef, 0xff, 0xfd, 0x2, 0xf0, 0x3e, 0x0, 0x1, 0x11, - 0x10, 0x2, 0xf0, 0x3e, 0x0, 0x0, 0x0, 0x5, - 0x9d, 0xe0, 0x3e, 0x0, 0x0, 0x0, 0x8, 0xfc, - 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x10, 0x16, 0xf0, 0x3e, 0x0, 0x0, 0x0, 0x9, + 0xfc, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, /* U+555F "啟" */ 0x0, 0x0, 0x92, 0x0, 0x0, 0x75, 0x0, 0x0, @@ -4159,8 +4355,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xdc, 0xce, 0x94, 0x0, 0xf1, 0x1, 0xf0, 0xa7, 0x0, 0xa7, 0x0, 0xf, 0x21, 0x2f, 0xa, 0x71, 0x1a, 0x70, 0x0, 0xfd, 0xdd, 0xf0, 0xae, 0xdd, - 0xe7, 0x0, 0xf, 0x10, 0x1f, 0xa, 0x70, 0xa, - 0x70, + 0xe7, 0x0, /* U+5728 "在" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -4177,7 +4372,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0xf, 0x40, 0x0, 0xf, 0x30, 0x0, 0x0, 0x0, 0xf7, 0xee, 0xee, 0xfe, 0xee, 0xe9, 0x0, 0xf, 0x43, 0x33, 0x33, 0x33, 0x33, - 0x20, 0x0, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x20, /* U+5831 "報" */ 0x0, 0x1, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -4191,10 +4386,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x9, 0xff, 0xff, 0xf7, 0xd4, 0xe1, 0x1d, 0x0, 0x0, 0x13, 0xf1, 0x10, 0xd4, 0x98, 0x78, 0x0, 0x2, 0x23, 0xf2, 0x21, 0xd4, 0x1e, 0xe1, 0x0, - 0x3f, 0xff, 0xff, 0xfb, 0xd4, 0xd, 0xd0, 0x0, - 0x0, 0x2, 0xf0, 0x0, 0xd4, 0xab, 0xba, 0x0, - 0x0, 0x2, 0xf0, 0x0, 0xde, 0xd1, 0xd, 0xb0, - 0x0, 0x2, 0xf0, 0x0, 0xd8, 0x10, 0x1, 0x90, + 0x3f, 0xff, 0xff, 0xfb, 0xd4, 0x1d, 0xd1, 0x0, + 0x0, 0x2, 0xf0, 0x0, 0xd7, 0xd8, 0x7d, 0x40, + 0x0, 0x2, 0xf0, 0x0, 0xdb, 0x40, 0x4, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5907 "备" */ @@ -4213,7 +4407,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x4e, 0x22, 0x2e, 0x62, 0x26, 0xe0, 0x0, 0x0, 0x4e, 0x0, 0xe, 0x40, 0x5, 0xe0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, - 0x0, 0x4e, 0x0, 0x0, 0x0, 0x4, 0xe0, 0x0, /* U+5927 "大" */ 0x0, 0x0, 0x0, 0xa, 0x40, 0x0, 0x0, 0x0, @@ -4249,6 +4442,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf7, 0x5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4, 0x10, + /* U+597D "好" */ + 0x0, 0xd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xf0, 0x0, 0x7c, 0xcc, 0xcc, 0xc2, 0x0, + 0x3f, 0x0, 0x3, 0x66, 0x66, 0xce, 0x11, 0xff, + 0xff, 0xfc, 0x0, 0x0, 0x7e, 0x20, 0x3, 0x9b, + 0x38, 0xb0, 0x0, 0x8e, 0x20, 0x0, 0xb, 0x70, + 0x88, 0x0, 0xe, 0x50, 0x0, 0x0, 0xe4, 0xb, + 0x73, 0x33, 0xf7, 0x33, 0x30, 0x1f, 0x0, 0xe6, + 0xff, 0xff, 0xff, 0xfd, 0x5, 0xf2, 0x3e, 0x0, + 0x0, 0xe4, 0x0, 0x0, 0x8, 0xfc, 0x90, 0x0, + 0xe, 0x40, 0x0, 0x0, 0x8, 0xfa, 0x0, 0x0, + 0xe4, 0x0, 0x0, 0x4, 0xf7, 0xec, 0x10, 0xe, + 0x40, 0x0, 0x5, 0xf7, 0x1, 0xb1, 0x35, 0xf4, + 0x0, 0x1, 0xe6, 0x0, 0x0, 0xd, 0xfb, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, + /* U+59CB "始" */ 0x0, 0x49, 0x0, 0x0, 0x7, 0x80, 0x0, 0x0, 0x6, 0xa0, 0x0, 0x1, 0xe5, 0x0, 0x0, 0x0, @@ -4260,11 +4470,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x8, 0x90, 0xb8, 0xe, 0xff, 0xff, 0xfe, 0x0, 0x6f, 0x7f, 0x30, 0xe5, 0x22, 0x25, 0xe0, 0x0, 0x5f, 0xe0, 0xe, 0x30, - 0x0, 0x4e, 0x0, 0x0, 0xef, 0x80, 0xe3, 0x0, - 0x4, 0xe0, 0x0, 0xab, 0x4f, 0x6e, 0x63, 0x33, - 0x6e, 0x0, 0x8e, 0x10, 0x52, 0xee, 0xdd, 0xde, - 0xe0, 0xe, 0x30, 0x0, 0xe, 0x30, 0x0, 0x4e, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4e, 0x0, 0x1, 0xef, 0x80, 0xe3, 0x0, + 0x4, 0xe0, 0x0, 0xc9, 0x4f, 0x6e, 0x63, 0x33, + 0x6e, 0x0, 0xb7, 0x0, 0x52, 0xee, 0xdd, 0xde, + 0xe0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, /* U+5B8C "完" */ 0x0, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x0, @@ -4318,10 +4528,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, /* U+5C06 "将" */ - 0x0, 0x0, 0x30, 0x0, 0x6, 0x10, 0x0, 0x0, - 0x0, 0x3, 0xe0, 0x0, 0x8d, 0x21, 0x11, 0x0, - 0x9, 0x3, 0xe0, 0x9, 0xed, 0xdd, 0xdf, 0x40, - 0xc, 0x63, 0xe2, 0xcf, 0x50, 0x0, 0xac, 0x0, + 0x0, 0x0, 0x30, 0x0, 0x5, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xe0, 0x0, 0x5f, 0x30, 0x0, 0x0, + 0x0, 0x3, 0xe0, 0x2, 0xfb, 0x11, 0x11, 0x0, + 0x9, 0x3, 0xe0, 0x2e, 0xed, 0xdd, 0xdf, 0x40, + 0xc, 0x63, 0xe3, 0xef, 0x50, 0x0, 0xac, 0x0, 0x6, 0xc3, 0xe7, 0x84, 0xe6, 0x1b, 0xc1, 0x0, 0x1, 0xf5, 0xe0, 0x0, 0x3a, 0xe8, 0x0, 0x0, 0x0, 0x95, 0xe0, 0x5a, 0xea, 0x22, 0xd0, 0x0, @@ -4331,25 +4542,25 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x27, 0x3, 0xe0, 0xb, 0xc0, 0x3, 0xf0, 0x0, 0x0, 0x3, 0xe0, 0x0, 0xc8, 0x3, 0xf0, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x10, 0x16, 0xf0, 0x0, - 0x0, 0x3, 0xe0, 0x0, 0x5, 0xff, 0x80, 0x0, - 0x0, 0x3, 0xe0, 0x0, 0x1, 0x20, 0x0, 0x0, + 0x0, 0x3, 0xe0, 0x0, 0x4, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5C07 "將" */ - 0x0, 0x50, 0x15, 0x0, 0x2, 0x70, 0x0, 0x0, - 0x1, 0xf0, 0x2e, 0x0, 0x1d, 0x71, 0x11, 0x0, - 0x1, 0xf0, 0x2e, 0x1, 0xdf, 0xff, 0xff, 0x40, - 0x1, 0xf0, 0x2e, 0x5e, 0x9c, 0x60, 0x7c, 0x0, + 0x0, 0x0, 0x15, 0x0, 0x2, 0x50, 0x0, 0x0, + 0x0, 0x50, 0x2e, 0x0, 0xb, 0xb0, 0x0, 0x0, + 0x1, 0xf0, 0x2e, 0x0, 0x7f, 0x51, 0x11, 0x0, + 0x1, 0xf0, 0x2e, 0x5, 0xff, 0xff, 0xff, 0x40, + 0x1, 0xf0, 0x2e, 0x6f, 0x9c, 0x60, 0x7c, 0x0, 0x1, 0xfd, 0xde, 0x57, 0xc2, 0x48, 0xd1, 0x0, 0x0, 0x55, 0x6e, 0x0, 0x45, 0xcc, 0x50, 0x0, 0x0, 0x0, 0x2e, 0x7, 0xde, 0x62, 0xf0, 0x0, 0x18, 0x88, 0x9e, 0xb, 0x50, 0x2, 0xf0, 0x0, 0x1a, 0xfa, 0xbe, 0x8f, 0xff, 0xff, 0xff, 0xf0, - 0x0, 0xe1, 0x2e, 0x14, 0x32, 0x23, 0xf2, 0x20, - 0x0, 0xf0, 0x2e, 0x8, 0xd2, 0x2, 0xf0, 0x0, - 0x2, 0xe0, 0x2e, 0x0, 0x9d, 0x2, 0xf0, 0x0, - 0x6, 0xa0, 0x2e, 0x0, 0x5, 0x2, 0xf0, 0x0, - 0xd, 0x50, 0x2e, 0x0, 0x2, 0x7b, 0xf0, 0x0, - 0x3d, 0x0, 0x2e, 0x0, 0x3, 0xdb, 0x50, 0x0, + 0x0, 0xe1, 0x2e, 0x17, 0x52, 0x23, 0xf2, 0x20, + 0x0, 0xf0, 0x2e, 0x5, 0xe5, 0x2, 0xf0, 0x0, + 0x4, 0xc0, 0x2e, 0x0, 0x3c, 0x2, 0xf0, 0x0, + 0xb, 0x70, 0x2e, 0x0, 0x1, 0x38, 0xf0, 0x0, + 0x3d, 0x0, 0x2e, 0x0, 0x4, 0xec, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5C0B "尋" */ @@ -4442,12 +4653,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x7c, 0x0, 0x0, 0xf5, 0x0, 0x0, 0x11, 0x18, 0xd1, 0x11, 0x1f, 0x61, 0x11, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x11, 0x19, 0xb1, - 0x11, 0x1f, 0x61, 0x11, 0x0, 0x0, 0xa9, 0x0, - 0x0, 0xf5, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, - 0xf, 0x50, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, - 0xf5, 0x0, 0x0, 0x1, 0xe9, 0x0, 0x0, 0xf, - 0x50, 0x0, 0x1, 0xcd, 0x0, 0x0, 0x0, 0xf5, - 0x0, 0x0, 0x5d, 0x10, 0x0, 0x0, 0xf, 0x50, + 0x11, 0x1f, 0x61, 0x11, 0x0, 0x0, 0xb8, 0x0, + 0x0, 0xf5, 0x0, 0x0, 0x0, 0x1f, 0x40, 0x0, + 0xf, 0x50, 0x0, 0x0, 0xa, 0xd0, 0x0, 0x0, + 0xf5, 0x0, 0x0, 0x9, 0xe2, 0x0, 0x0, 0xf, + 0x50, 0x0, 0x5, 0xe3, 0x0, 0x0, 0x0, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -4493,13 +4703,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x10, 0x1, 0xf3, 0x0, 0x0, 0x0, 0xd, 0xae, 0xee, 0xef, 0xee, 0xee, 0xb0, 0xa, 0xf0, 0x22, 0x22, 0x22, 0xf6, 0x22, 0x9, 0xff, 0x0, 0x0, - 0x0, 0xf, 0x40, 0x6, 0xe5, 0xf0, 0xef, 0xff, - 0xff, 0xff, 0xf5, 0x2, 0x3f, 0x1, 0x52, 0x22, - 0x2f, 0x52, 0x0, 0x3, 0xf0, 0xd, 0x90, 0x0, - 0xf4, 0x0, 0x0, 0x3f, 0x0, 0x2f, 0x70, 0xf, - 0x40, 0x0, 0x3, 0xf0, 0x0, 0x57, 0x0, 0xf4, - 0x0, 0x0, 0x3f, 0x0, 0x0, 0x6, 0xaf, 0x20, - 0x0, 0x3, 0xf0, 0x0, 0x0, 0xcb, 0x60, 0x0, + 0x0, 0xf, 0x40, 0x5, 0xe5, 0xf0, 0xef, 0xff, + 0xff, 0xff, 0xf5, 0x2, 0x3f, 0x1, 0x73, 0x22, + 0x2f, 0x52, 0x0, 0x3, 0xf0, 0xa, 0xc1, 0x0, + 0xf4, 0x0, 0x0, 0x3f, 0x0, 0xb, 0x90, 0xf, + 0x40, 0x0, 0x3, 0xf0, 0x0, 0x1, 0x25, 0xf3, + 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc, 0xc8, 0x0, + 0x0, /* U+5F8C "後" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -4511,13 +4721,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x7, 0xc0, 0x2b, 0xc2, 0x0, 0x9b, 0x0, 0x0, 0x2f, 0x28, 0xff, 0xee, 0xff, 0xff, 0x70, 0x1, 0xde, 0x2, 0x37, 0x61, 0x0, 0x5, 0x80, - 0xb, 0xde, 0x0, 0x1e, 0x83, 0x33, 0x31, 0x0, - 0x3c, 0x3e, 0x0, 0xce, 0xbb, 0xbb, 0xf6, 0x0, - 0x0, 0x2e, 0xb, 0xcf, 0x40, 0x8, 0xc0, 0x0, - 0x0, 0x2e, 0x7b, 0x4, 0xf6, 0x9d, 0x10, 0x0, - 0x0, 0x2e, 0x0, 0x0, 0x9f, 0xf5, 0x0, 0x0, - 0x0, 0x2e, 0x15, 0xaf, 0xc5, 0x7e, 0xe9, 0x40, - 0x0, 0x2e, 0x7c, 0x72, 0x0, 0x0, 0x49, 0xc0, + 0xb, 0xde, 0x0, 0x2e, 0x83, 0x33, 0x31, 0x0, + 0x3b, 0x3e, 0x1, 0xdf, 0xbb, 0xbb, 0xf5, 0x0, + 0x0, 0x2e, 0x2d, 0xad, 0x70, 0xa, 0xa0, 0x0, + 0x0, 0x2e, 0x45, 0x1, 0xbc, 0xd7, 0x0, 0x0, + 0x0, 0x2e, 0x1, 0x59, 0xd9, 0xcd, 0x84, 0x10, + 0x0, 0x2e, 0x7d, 0x94, 0x0, 0x2, 0x8d, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+5FDC "応" */ 0x0, 0x0, 0x0, 0x0, 0xb3, 0x0, 0x0, 0x0, @@ -4571,7 +4781,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+60C5 "情" */ - 0x0, 0x2, 0x0, 0x0, 0xc, 0x40, 0x0, 0x0, + 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2f, 0x0, 0x0, 0xc, 0x40, 0x0, 0x0, 0x0, 0x2f, 0x0, 0x22, 0x2d, 0x62, 0x22, 0x0, 0x0, 0x2f, 0x5, 0xcc, 0xcf, 0xdc, 0xcc, 0x30, 0xc, 0x6f, 0xd1, 0x56, 0x6e, 0x96, 0x64, 0x0, @@ -4583,9 +4794,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x2f, 0x0, 0xee, 0xee, 0xee, 0xf8, 0x0, 0x0, 0x2f, 0x0, 0xe2, 0x0, 0x0, 0x98, 0x0, 0x0, 0x2f, 0x0, 0xee, 0xee, 0xee, 0xf8, 0x0, - 0x0, 0x2f, 0x0, 0xe2, 0x0, 0x0, 0x98, 0x0, - 0x0, 0x2f, 0x0, 0xe2, 0x0, 0x2, 0xc7, 0x0, - 0x0, 0x2f, 0x0, 0xe2, 0x0, 0x3f, 0xc2, 0x0, + 0x0, 0x2f, 0x0, 0xe2, 0x0, 0x0, 0x97, 0x0, + 0x0, 0x2f, 0x0, 0xe2, 0x0, 0x2b, 0xc3, 0x0, /* U+614B "態" */ 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -4622,6 +4832,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xb7, 0x7b, 0x9, 0x10, 0x6f, 0xff, 0xf5, 0x2, 0x20, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6211 "我" */ + 0x0, 0x0, 0x0, 0x0, 0x55, 0x0, 0x0, 0x0, + 0x2, 0x46, 0x9d, 0x58, 0x94, 0xc1, 0x0, 0x7, + 0xec, 0xfa, 0x40, 0x7a, 0xa, 0xd1, 0x0, 0x0, + 0xe, 0x50, 0x7, 0xb0, 0xb, 0x80, 0x2, 0x22, + 0xe6, 0x22, 0x7c, 0x22, 0x32, 0x11, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0xe5, + 0x0, 0x3e, 0x0, 0x4, 0x0, 0x0, 0xe, 0x50, + 0x21, 0xf0, 0xb, 0xa0, 0x1, 0x47, 0xfe, 0xfb, + 0xf, 0x3a, 0xc0, 0x0, 0xdc, 0x9f, 0x70, 0x0, + 0xbe, 0xb0, 0x0, 0x0, 0x0, 0xe5, 0x0, 0x5e, + 0xd0, 0x2, 0x10, 0x0, 0xe, 0x55, 0xce, 0x6f, + 0x30, 0x8a, 0x0, 0x46, 0xf6, 0xd7, 0x0, 0x9d, + 0x5e, 0x40, 0xb, 0xd9, 0x0, 0x0, 0x0, 0xaf, + 0x90, + /* U+624B "手" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x43, 0x0, 0x9, 0xaa, 0xbc, 0xde, 0xff, 0xfd, 0x70, 0x0, @@ -4661,17 +4887,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xc5, 0x0, 0xe, 0x37, 0xe2, 0x0, 0x0, 0xc, 0x50, 0x0, 0xd4, 0x6, 0xe2, 0x0, 0xff, 0xff, 0xf4, 0xc, 0x50, 0x18, 0x55, 0x1, 0x1d, - 0x63, 0x79, 0xee, 0xff, 0xfc, 0x80, 0x0, 0xc5, - 0x2c, 0x9c, 0xa3, 0x10, 0x0, 0x0, 0xc, 0x50, - 0x10, 0x7a, 0x0, 0x7a, 0x0, 0x0, 0xdd, 0xf5, - 0x5, 0xc0, 0x3f, 0x30, 0x3a, 0xff, 0xb3, 0x0, - 0x3f, 0x3e, 0x60, 0x3, 0xa5, 0xd5, 0x0, 0x0, - 0xff, 0x70, 0x0, 0x0, 0xc, 0x50, 0x0, 0x6f, - 0xa0, 0x0, 0x0, 0x0, 0xc5, 0x2, 0xbf, 0xbc, - 0x0, 0x86, 0x0, 0xc, 0x58, 0xfb, 0x11, 0xf3, - 0xb, 0x60, 0x35, 0xe5, 0x54, 0x0, 0x8, 0xd6, - 0xf1, 0x7, 0xea, 0x0, 0x0, 0x0, 0xa, 0xf8, - 0x0, + 0x63, 0x89, 0xee, 0xff, 0xdb, 0x70, 0x0, 0xc5, + 0x19, 0x7b, 0xa1, 0x0, 0x20, 0x0, 0xc, 0x65, + 0x20, 0x7a, 0x0, 0xba, 0x0, 0x15, 0xef, 0xc3, + 0x4, 0xd0, 0x9d, 0x0, 0x5f, 0xce, 0x60, 0x0, + 0x1f, 0xad, 0x10, 0x0, 0x10, 0xc5, 0x0, 0x2, + 0xfc, 0x10, 0x0, 0x0, 0xc, 0x50, 0x7, 0xfd, + 0xa0, 0x6, 0x40, 0x0, 0xc5, 0x6e, 0xd3, 0x2f, + 0x20, 0xa6, 0x3, 0x5e, 0x55, 0x50, 0x0, 0x9d, + 0x6f, 0x20, 0x7e, 0xb1, 0x0, 0x0, 0x0, 0xaf, + 0x80, /* U+633F "挿" */ 0x0, 0x18, 0x0, 0x0, 0x1, 0x34, 0x68, 0x10, @@ -4685,9 +4910,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x38, 0xc3, 0x3d, 0x41, 0x74, 0xe0, 0xe, 0xdc, 0xde, 0xcc, 0xf4, 0x0, 0x2e, 0x0, 0xe2, 0x6, 0xb0, 0xc, 0x40, 0x2, 0xe0, 0xe, 0xff, 0xff, - 0xff, 0xf4, 0x0, 0x3e, 0x0, 0x12, 0x27, 0xb2, - 0x22, 0x0, 0xaf, 0xd0, 0x0, 0x0, 0x6b, 0x0, - 0x0, 0x5, 0x62, 0x0, 0x0, 0x6, 0xb0, 0x0, + 0xff, 0xf4, 0x2, 0x7e, 0x0, 0x12, 0x27, 0xb2, + 0x22, 0x0, 0x79, 0x40, 0x0, 0x0, 0x6b, 0x0, 0x0, /* U+6362 "换" */ @@ -4720,26 +4944,24 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xc0, 0x0, 0x4c, 0x0, 0x86, 0xd, 0x30, 0x3d, 0x0, 0x4, 0xc0, 0x8, 0x60, 0xd3, 0x3, 0xd0, 0x0, 0x5c, 0x0, 0x86, 0xd, 0x37, - 0xcb, 0x0, 0xdf, 0xb0, 0x3, 0x20, 0xd3, 0x44, - 0x0, 0xb, 0xa3, 0x0, 0x0, 0xd, 0x30, 0x0, + 0xcb, 0x0, 0xbb, 0x50, 0x3, 0x20, 0xd3, 0x34, 0x0, /* U+63A2 "探" */ 0x0, 0x3a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3d, 0x4, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x3d, 0x4, 0xb1, 0x11, 0x11, 0x1e, 0x10, - 0xf, 0xff, 0xf9, 0xb0, 0x60, 0x42, 0xe, 0x10, - 0x3, 0x6d, 0x31, 0x8, 0xc0, 0x5e, 0x51, 0x0, - 0x0, 0x3d, 0x0, 0x7d, 0x10, 0x3, 0xe6, 0x0, - 0x0, 0x3d, 0x35, 0xc1, 0xb, 0x20, 0x2d, 0x10, - 0x1, 0x8f, 0xe3, 0x21, 0x1e, 0x31, 0x12, 0x0, - 0x5f, 0xed, 0x8, 0xff, 0xff, 0xff, 0xff, 0x60, - 0x23, 0x3d, 0x0, 0x0, 0xcf, 0xf2, 0x0, 0x0, - 0x0, 0x3d, 0x0, 0x9, 0xbe, 0x8e, 0x20, 0x0, - 0x0, 0x3d, 0x0, 0x9d, 0x1e, 0x27, 0xe4, 0x0, - 0x0, 0x3d, 0x2c, 0xd1, 0xe, 0x20, 0x6f, 0x90, - 0x6, 0xbc, 0x3a, 0x10, 0xe, 0x20, 0x3, 0x90, - 0x8, 0x92, 0x0, 0x0, 0xe, 0x20, 0x0, 0x0, + 0xf, 0xff, 0xf9, 0xb0, 0x70, 0x43, 0xe, 0x10, + 0x3, 0x6d, 0x31, 0x2c, 0xb0, 0x5e, 0x92, 0x0, + 0x0, 0x3d, 0x4, 0xfb, 0xb, 0x21, 0xce, 0x10, + 0x0, 0x3e, 0xd5, 0x80, 0xe, 0x20, 0x7, 0x0, + 0x2, 0xbf, 0xc2, 0x11, 0x1e, 0x31, 0x11, 0x0, + 0x6f, 0xed, 0x8, 0xff, 0xff, 0xff, 0xff, 0x60, + 0x22, 0x3d, 0x0, 0x1, 0xdf, 0xe4, 0x0, 0x0, + 0x0, 0x3d, 0x0, 0x1d, 0x6e, 0x5e, 0x60, 0x0, + 0x0, 0x3d, 0x5, 0xe7, 0xe, 0x22, 0xcb, 0x30, + 0x3, 0x8c, 0x5d, 0x40, 0xe, 0x20, 0x7, 0xc0, + 0x9, 0xa4, 0x0, 0x0, 0xe, 0x20, 0x0, 0x0, /* U+63A5 "接" */ 0x0, 0x18, 0x0, 0x0, 0x6, 0x40, 0x0, 0x0, @@ -4771,9 +4993,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xf0, 0x0, 0x1f, 0x10, 0xd5, 0x8, 0xa0, 0x2f, 0x0, 0x1, 0xf1, 0xd, 0x50, 0x8a, 0x2, 0xf0, 0x0, 0x1f, 0x0, 0xd7, 0x4a, 0xb4, - 0x5f, 0x0, 0x8d, 0xf0, 0xd, 0xdc, 0xcc, 0xcc, - 0xf0, 0x8, 0xa5, 0x0, 0xd5, 0x0, 0x0, 0x2f, - 0x0, + 0x5f, 0x0, 0x7b, 0x80, 0xd, 0xdc, 0xcc, 0xcc, + 0xf0, /* U+63D2 "插" */ 0x0, 0x2d, 0x0, 0x0, 0x1, 0x34, 0x68, 0x0, @@ -4788,9 +5009,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xb6, 0xce, 0xf1, 0x0, 0x3e, 0x3, 0xd1, 0x1b, 0x61, 0x2f, 0x10, 0x3, 0xe0, 0x3d, 0x0, 0xb6, 0x0, 0xf1, 0x0, 0x3e, 0x3, 0xe5, 0x5c, 0x95, - 0x5f, 0x10, 0x7d, 0xe0, 0x3f, 0xcc, 0xcc, 0xcc, - 0xf1, 0x8, 0xd5, 0x3, 0xd0, 0x0, 0x0, 0xf, - 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5f, 0x10, 0x6b, 0x60, 0x3f, 0xcc, 0xcc, 0xcc, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, /* U+63DB "換" */ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, @@ -4837,13 +5058,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x9, 0x99, 0xeb, 0x99, 0x4e, 0xdd, 0xfe, 0xd0, 0x0, 0x0, 0xc5, 0x0, 0xe, 0x20, 0xe3, 0x0, 0xc, 0xff, 0xff, 0xff, 0xe, 0x20, 0xe3, 0x0, - 0x1, 0x31, 0xd6, 0x31, 0xf, 0x20, 0xe3, 0x0, - 0x0, 0xd3, 0xc6, 0xe2, 0xf, 0x0, 0xe3, 0x0, - 0x5, 0xc0, 0xc5, 0x7a, 0x4e, 0x0, 0xe3, 0x0, - 0xd, 0x50, 0xc5, 0xb, 0x99, 0x0, 0xe3, 0x0, - 0x4c, 0x6, 0xf4, 0x1, 0xf3, 0x0, 0xe3, 0x0, - 0x0, 0xb, 0xa0, 0x7, 0xc0, 0x0, 0xe3, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x42, 0xd6, 0x51, 0xf, 0x10, 0xe3, 0x0, + 0x1, 0xe2, 0xc5, 0xd4, 0x3f, 0x0, 0xe3, 0x0, + 0x9, 0x90, 0xc5, 0x3d, 0x8b, 0x0, 0xe3, 0x0, + 0x4e, 0x12, 0xe5, 0x4, 0xe5, 0x0, 0xe3, 0x0, + 0x1, 0xc, 0xb1, 0x7, 0xc0, 0x0, 0xe3, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, /* U+65E0 "无" */ 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, @@ -4927,7 +5147,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xf, 0x42, 0x22, 0x22, 0x2a, 0x80, 0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0x9, 0x80, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, - 0x0, 0xf, 0x20, 0x0, 0x0, 0x9, 0x80, 0x0, /* U+6700 "最" */ 0x0, 0x7, 0x88, 0x88, 0x88, 0x88, 0x50, 0x0, @@ -4939,12 +5158,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x89, 0x0, 0xa6, 0x12, 0x22, 0x21, 0x0, 0x0, 0x8e, 0xdd, 0xf6, 0xce, 0xcc, 0xec, 0x0, - 0x0, 0x89, 0x0, 0xa6, 0x2e, 0x0, 0xc6, 0x0, - 0x0, 0x8e, 0xdd, 0xf6, 0xa, 0x85, 0xd0, 0x0, - 0x0, 0x89, 0x0, 0xa7, 0x1, 0xee, 0x30, 0x0, - 0x2, 0xab, 0x8a, 0xef, 0x53, 0xef, 0x60, 0x0, - 0xe, 0xda, 0x85, 0xc7, 0x9f, 0x53, 0xdc, 0x40, - 0x0, 0x0, 0x0, 0xa7, 0x92, 0x0, 0x7, 0x60, + 0x0, 0x89, 0x0, 0xa6, 0x1e, 0x0, 0xc6, 0x0, + 0x0, 0x8e, 0xdd, 0xf6, 0x9, 0x96, 0xc0, 0x0, + 0x0, 0x89, 0x0, 0xb9, 0x20, 0xde, 0x20, 0x0, + 0x9, 0xde, 0xcb, 0xeb, 0x5a, 0xb9, 0xd5, 0x0, + 0x3, 0x10, 0x0, 0xa7, 0xb5, 0x0, 0x29, 0x70, /* U+6709 "有" */ 0x0, 0x0, 0x0, 0x89, 0x0, 0x0, 0x0, 0x0, @@ -4958,11 +5176,25 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xdd, 0xdd, 0xf0, 0x0, 0x0, 0x5d, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x5, 0xfe, 0xee, 0xee, 0xee, 0xf0, 0x0, 0x0, 0x5d, 0x22, 0x22, 0x22, - 0x5f, 0x0, 0x0, 0x5, 0xd0, 0x0, 0x0, 0x3, - 0xf0, 0x0, 0x0, 0x5d, 0x0, 0x0, 0x28, 0xcf, - 0x0, 0x0, 0x5, 0xd0, 0x0, 0x2, 0xec, 0x50, + 0x5f, 0x0, 0x0, 0x5, 0xd0, 0x0, 0x0, 0x27, + 0xf0, 0x0, 0x0, 0x5d, 0x0, 0x0, 0x3e, 0xc6, 0x0, + /* U+670B "朋" */ + 0x0, 0xef, 0xff, 0xe0, 0x2f, 0xff, 0xfe, 0x0, + 0xe5, 0x35, 0xe0, 0x3e, 0x33, 0x5e, 0x0, 0xe3, + 0x2, 0xe0, 0x3e, 0x0, 0x3e, 0x0, 0xe5, 0x24, + 0xe0, 0x3e, 0x22, 0x4e, 0x0, 0xef, 0xff, 0xe0, + 0x3f, 0xff, 0xfe, 0x0, 0xe3, 0x2, 0xe0, 0x3e, + 0x0, 0x3e, 0x0, 0xf3, 0x2, 0xe0, 0x3e, 0x0, + 0x3e, 0x0, 0xf5, 0x35, 0xe0, 0x3e, 0x33, 0x5e, + 0x0, 0xfe, 0xee, 0xe0, 0x4f, 0xee, 0xee, 0x2, + 0xf0, 0x2, 0xe0, 0x59, 0x0, 0x3e, 0x5, 0xd0, + 0x2, 0xe0, 0x97, 0x0, 0x3e, 0xb, 0x90, 0x3, + 0xe0, 0xe3, 0x0, 0x3e, 0x2f, 0x20, 0xae, 0xc7, + 0xd0, 0x9, 0xcd, 0x48, 0x0, 0x66, 0x18, 0x40, + 0x8, 0x82, + /* U+670D "服" */ 0x0, 0x0, 0x0, 0x0, 0x11, 0x11, 0x10, 0x0, 0x1, 0xff, 0xff, 0x44, 0xff, 0xff, 0xfd, 0x0, @@ -4971,14 +5203,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1, 0xf5, 0x5e, 0x44, 0xd0, 0x1e, 0xf6, 0x0, 0x1, 0xfb, 0xbf, 0x44, 0xd0, 0x2, 0x0, 0x0, 0x1, 0xf0, 0xd, 0x44, 0xff, 0xff, 0xff, 0x50, - 0x1, 0xf0, 0xd, 0x44, 0xd9, 0x91, 0x3f, 0x30, - 0x1, 0xfd, 0xdf, 0x44, 0xd4, 0xd0, 0x6d, 0x0, - 0x2, 0xf3, 0x3e, 0x44, 0xd0, 0xe3, 0xd7, 0x0, - 0x3, 0xd0, 0xd, 0x44, 0xd0, 0x7e, 0xd0, 0x0, - 0x5, 0xa0, 0xd, 0x44, 0xd0, 0x2f, 0x90, 0x0, - 0x9, 0x70, 0xe, 0x34, 0xd1, 0xda, 0xf8, 0x0, - 0xf, 0x23, 0xbf, 0x24, 0xed, 0xa0, 0x4e, 0xc0, - 0x4b, 0x2, 0x95, 0x4, 0xd4, 0x0, 0x1, 0x70, + 0x1, 0xf0, 0xd, 0x44, 0xd9, 0x91, 0x3f, 0x20, + 0x1, 0xfd, 0xdf, 0x44, 0xd3, 0xd0, 0x6c, 0x0, + 0x2, 0xe3, 0x3e, 0x44, 0xd0, 0xd5, 0xe5, 0x0, + 0x5, 0xb0, 0xd, 0x44, 0xd0, 0x4f, 0xa0, 0x0, + 0x8, 0x90, 0xd, 0x34, 0xd0, 0x6f, 0xc2, 0x0, + 0xe, 0x42, 0x6f, 0x24, 0xd9, 0xd1, 0x8f, 0x70, + 0x4c, 0x3, 0xa6, 0x4, 0xd6, 0x0, 0x3, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+671F "期" */ @@ -5001,36 +5232,36 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+672C "本" */ 0x0, 0x0, 0x0, 0x7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x2, 0x33, 0x33, 0x3e, 0x73, 0x33, 0x33, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x1, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xae, 0x9f, 0x10, 0x0, 0x0, - 0x0, 0x0, 0x2f, 0x2e, 0x5c, 0x90, 0x0, 0x0, - 0x0, 0x0, 0xc9, 0xe, 0x53, 0xf4, 0x0, 0x0, - 0x0, 0x9, 0xd0, 0xe, 0x50, 0x8e, 0x20, 0x0, - 0x0, 0x7f, 0x30, 0xe, 0x50, 0xb, 0xd1, 0x0, - 0x8, 0xf5, 0x33, 0x3e, 0x83, 0x33, 0xde, 0x20, - 0x7f, 0x51, 0xff, 0xff, 0xff, 0xf9, 0x1d, 0xe0, - 0x15, 0x0, 0x0, 0xe, 0x50, 0x0, 0x1, 0x40, - 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2f, 0x2e, 0x5b, 0x90, 0x0, 0x0, + 0x0, 0x0, 0xc8, 0xe, 0x52, 0xf4, 0x0, 0x0, + 0x0, 0x9, 0xd0, 0xe, 0x50, 0x7e, 0x20, 0x0, + 0x0, 0x7e, 0x10, 0xe, 0x50, 0xa, 0xd1, 0x0, + 0x8, 0xf3, 0x33, 0x3e, 0x83, 0x32, 0xbe, 0x20, + 0x7f, 0x31, 0xff, 0xff, 0xff, 0xf9, 0xa, 0xe0, + 0x2, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, /* U+673A "机" */ 0x0, 0x5, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xc, 0x60, 0x6, 0x99, 0x99, 0x20, 0x0, - 0x0, 0xc, 0x60, 0xc, 0xa7, 0x7f, 0x40, 0x0, + 0x0, 0xc, 0x60, 0x2, 0x33, 0x33, 0x0, 0x0, + 0x0, 0xc, 0x60, 0xc, 0xff, 0xff, 0x40, 0x0, + 0x0, 0xc, 0x60, 0xc, 0x83, 0x3f, 0x40, 0x0, 0xe, 0xff, 0xff, 0xac, 0x70, 0xe, 0x40, 0x0, 0x3, 0x3f, 0x83, 0x2c, 0x70, 0xe, 0x40, 0x0, 0x0, 0x5f, 0x60, 0xc, 0x70, 0xe, 0x40, 0x0, 0x0, 0xcf, 0xe4, 0xc, 0x60, 0xe, 0x40, 0x0, 0x4, 0xec, 0xae, 0x3c, 0x60, 0xe, 0x40, 0x0, - 0xd, 0x6c, 0x67, 0x7c, 0x60, 0xe, 0x40, 0x0, - 0x7d, 0xc, 0x60, 0xe, 0x40, 0xe, 0x40, 0x0, - 0x12, 0xc, 0x60, 0x1f, 0x20, 0xe, 0x41, 0xb0, - 0x0, 0xc, 0x60, 0x6f, 0x0, 0xe, 0x42, 0xf0, - 0x0, 0xc, 0x61, 0xe9, 0x0, 0xe, 0x76, 0xe0, - 0x0, 0xc, 0x6c, 0xf1, 0x0, 0x9, 0xff, 0x80, - 0x0, 0xc, 0x68, 0x50, 0x0, 0x0, 0x0, 0x0, + 0xd, 0x6c, 0x67, 0x7d, 0x50, 0xe, 0x40, 0x0, + 0x7d, 0xc, 0x60, 0xe, 0x30, 0xe, 0x40, 0x0, + 0x12, 0xc, 0x60, 0x2f, 0x0, 0xe, 0x41, 0xb0, + 0x0, 0xc, 0x60, 0x7a, 0x0, 0xe, 0x42, 0xf0, + 0x0, 0xc, 0x61, 0xe2, 0x0, 0xe, 0x76, 0xe0, + 0x0, 0xc, 0x6b, 0x60, 0x0, 0x9, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+67E5 "查" */ @@ -5050,8 +5281,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, /* U+68C0 "检" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x6, 0x0, 0x0, 0x1e, 0xb0, 0x0, 0x0, + 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0x0, 0x0, 0x1e, 0xb0, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x9b, 0xe5, 0x0, 0x0, 0x1, 0x2f, 0x11, 0x5, 0xe1, 0x4f, 0x20, 0x0, 0xf, 0xff, 0xfc, 0x4f, 0x30, 0x7, 0xe3, 0x0, @@ -5065,30 +5296,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x1f, 0x0, 0xb, 0x22, 0x2d, 0x60, 0x0, 0x0, 0x1f, 0x2, 0x22, 0x22, 0x4f, 0x22, 0x10, 0x0, 0x1f, 0xe, 0xff, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+691C "検" */ 0x0, 0x4, 0x0, 0x0, 0x3, 0x10, 0x0, 0x0, - 0x1, 0xf0, 0x0, 0x5, 0xec, 0x0, 0x0, 0x0, - 0x1f, 0x0, 0x3, 0xd1, 0x8b, 0x0, 0x0, 0xcc, - 0xfc, 0x64, 0xc2, 0x0, 0x8c, 0x10, 0x2, 0x6f, - 0x29, 0xdd, 0xff, 0xff, 0x9e, 0x40, 0x8, 0xf0, - 0x61, 0x0, 0xc5, 0x0, 0x42, 0x0, 0xef, 0x80, - 0x33, 0x3d, 0x73, 0x32, 0x0, 0x5d, 0xfe, 0x7f, - 0xdd, 0xfe, 0xde, 0xb0, 0xc, 0x7f, 0x36, 0xe0, - 0xe, 0x40, 0x6b, 0x5, 0xd1, 0xf0, 0xe, 0x22, - 0xf4, 0x28, 0xb0, 0x64, 0x1f, 0x0, 0xff, 0xff, - 0xff, 0xfa, 0x0, 0x1, 0xf0, 0x0, 0xc, 0xce, - 0x10, 0x0, 0x0, 0x1f, 0x0, 0xa, 0xd0, 0x9d, - 0x20, 0x0, 0x1, 0xf0, 0x4d, 0xd2, 0x0, 0x9f, - 0x81, 0x0, 0x1f, 0x1e, 0x80, 0x0, 0x0, 0x3c, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xf0, 0x0, 0x4, 0xfb, 0x0, 0x0, 0x0, + 0x1f, 0x0, 0x0, 0xd5, 0xd6, 0x0, 0x0, 0x1, + 0xf0, 0x0, 0x9a, 0x3, 0xf3, 0x0, 0xf, 0xff, + 0xf8, 0x8c, 0x0, 0x6, 0xf4, 0x0, 0x26, 0xf2, + 0xad, 0xdf, 0xff, 0xf9, 0xf5, 0x0, 0x8f, 0x6, + 0x10, 0xc, 0x50, 0x4, 0x20, 0xe, 0xf8, 0x3, + 0x33, 0xd7, 0x33, 0x20, 0x5, 0xdf, 0xe7, 0xfd, + 0xdf, 0xed, 0xeb, 0x0, 0xc7, 0xf3, 0x6e, 0x0, + 0xe4, 0x6, 0xb0, 0x5d, 0x1f, 0x0, 0xe2, 0x2f, + 0x42, 0x8b, 0x6, 0x41, 0xf0, 0xf, 0xff, 0xff, + 0xff, 0xa0, 0x0, 0x1f, 0x0, 0x1, 0xd9, 0xe3, + 0x0, 0x0, 0x1, 0xf0, 0x6, 0xe8, 0x4, 0xe9, + 0x20, 0x0, 0x1f, 0xe, 0xb3, 0x0, 0x0, 0x7d, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+6A21 "模" */ 0x0, 0x4, 0x0, 0x0, 0x50, 0x5, 0x0, 0x0, - 0x0, 0xf, 0x0, 0x2, 0xe0, 0xe, 0x20, 0x0, - 0x0, 0xf, 0x4, 0xee, 0xfe, 0xef, 0xee, 0x70, - 0xb, 0xbf, 0xb8, 0x1, 0xb0, 0xb, 0x10, 0x0, + 0x0, 0xf, 0x0, 0x1, 0xe0, 0xe, 0x20, 0x0, + 0x0, 0xf, 0x3, 0xab, 0xfa, 0xaf, 0xba, 0x50, + 0x0, 0xf, 0x2, 0x89, 0xf8, 0x8f, 0x98, 0x40, + 0xf, 0xff, 0xfb, 0x1, 0xa0, 0xa, 0x10, 0x0, 0x3, 0x6f, 0x42, 0xbe, 0xee, 0xee, 0xe8, 0x0, 0x0, 0x9f, 0x10, 0xc5, 0x0, 0x0, 0x89, 0x0, 0x1, 0xff, 0xd1, 0xce, 0xdd, 0xdd, 0xe9, 0x0, @@ -5096,47 +5327,45 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2f, 0x3f, 0x14, 0xbe, 0xef, 0xee, 0xe8, 0x0, 0x99, 0xf, 0x0, 0x0, 0x9, 0x60, 0x0, 0x0, 0x1, 0xf, 0x9, 0xff, 0xff, 0xff, 0xff, 0x90, - 0x0, 0xf, 0x0, 0x0, 0x2f, 0xe1, 0x0, 0x0, - 0x0, 0xf, 0x0, 0x2, 0xd9, 0x9c, 0x20, 0x0, - 0x0, 0xf, 0x14, 0xaf, 0x90, 0x9, 0xfa, 0x40, - 0x0, 0xf, 0x2f, 0xa3, 0x0, 0x0, 0x3b, 0xd0, + 0x0, 0xf, 0x0, 0x0, 0x4e, 0xe3, 0x0, 0x0, + 0x0, 0xf, 0x0, 0x39, 0xe4, 0x4e, 0x93, 0x0, + 0x0, 0xf, 0x2e, 0xc6, 0x0, 0x1, 0x7c, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+6A5F "機" */ - 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, - 0x0, 0x4, 0x0, 0x1, 0xc, 0x30, 0x40, 0x0, - 0x0, 0x2e, 0x0, 0x2b, 0xc, 0x44, 0xb1, 0x0, - 0x0, 0x2e, 0x0, 0xc3, 0xbb, 0x5c, 0x3d, 0x20, - 0xe, 0xff, 0xf9, 0xde, 0x6a, 0xaa, 0xe9, 0x0, - 0x2, 0x7e, 0x20, 0x2c, 0x99, 0x62, 0xd9, 0x30, + 0x0, 0x4, 0x0, 0x0, 0x2, 0x0, 0x10, 0x0, + 0x0, 0x2e, 0x0, 0x1c, 0xc, 0x31, 0xd0, 0x0, + 0x0, 0x2e, 0x0, 0x87, 0x4c, 0x48, 0x67, 0x20, + 0x0, 0x2e, 0x2, 0xe2, 0xbb, 0x7e, 0x3d, 0x0, + 0xe, 0xff, 0xfa, 0xde, 0x4a, 0xaa, 0xe6, 0x0, + 0x2, 0x7e, 0x20, 0x2b, 0x99, 0x62, 0xc8, 0x30, 0x0, 0xae, 0x32, 0xe7, 0xbc, 0x9d, 0xbb, 0x90, - 0x0, 0xff, 0xe7, 0x98, 0x7b, 0xa6, 0x83, 0x80, - 0x6, 0xbe, 0x46, 0x5c, 0x4, 0xc0, 0xa5, 0x0, - 0xd, 0x5e, 0xf, 0xff, 0xff, 0xff, 0xff, 0xd0, - 0x5c, 0x2e, 0x0, 0x5d, 0x0, 0xd2, 0x5, 0x0, - 0x44, 0x2e, 0x0, 0x7f, 0xb0, 0x97, 0xa9, 0x0, - 0x0, 0x2e, 0x0, 0xc6, 0xb4, 0x5f, 0xb0, 0x40, - 0x0, 0x2e, 0x3, 0xe0, 0x2, 0xcf, 0x20, 0xd0, - 0x0, 0x2e, 0xc, 0x61, 0x8e, 0x78, 0xb4, 0xc0, - 0x0, 0x2e, 0x5b, 0x2, 0x91, 0x0, 0xaf, 0x50, + 0x1, 0xff, 0xe7, 0x98, 0x7b, 0xa6, 0x83, 0x80, + 0x7, 0xbe, 0x46, 0x5c, 0x4, 0xc0, 0xa5, 0x0, + 0xe, 0x4e, 0xf, 0xff, 0xff, 0xff, 0xff, 0xd0, + 0x7a, 0x2e, 0x0, 0x6e, 0x10, 0xd3, 0x17, 0x0, + 0x11, 0x2e, 0x0, 0x8c, 0xd2, 0x8a, 0xd4, 0x0, + 0x0, 0x2e, 0x0, 0xe2, 0x32, 0x8f, 0x40, 0xc0, + 0x0, 0x2e, 0xa, 0x90, 0x6d, 0x9a, 0xa3, 0xd0, + 0x0, 0x2e, 0x5c, 0x2, 0x92, 0x0, 0xbf, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+6AA2 "檢" */ - 0x0, 0x5, 0x0, 0x0, 0x9, 0x80, 0x0, 0x0, + 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0x0, 0x0, 0x9, 0x80, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x6d, 0xd5, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x4, 0xf2, 0x3f, 0x40, 0x0, 0xc, 0xcf, 0xc7, 0x4f, 0x40, 0x4, 0xf5, 0x0, 0x4, 0x7f, 0x4a, 0xe8, 0xff, 0xff, 0x6f, 0x80, 0x0, 0x8f, 0x9, 0x20, 0x0, 0x0, 0x2, 0x90, 0x0, 0xef, 0xc0, 0xef, 0xf5, 0x9f, 0xfb, 0x0, - 0x4, 0xcf, 0xab, 0xe0, 0x86, 0x94, 0x1c, 0x0, + 0x5, 0xbf, 0xab, 0xe0, 0x86, 0x94, 0x1c, 0x0, 0xc, 0x5f, 0x17, 0xe0, 0x96, 0x95, 0x2c, 0x0, - 0x5c, 0x1f, 0x0, 0xdf, 0xf5, 0x8f, 0xfb, 0x0, - 0x73, 0x1f, 0x0, 0xc, 0x40, 0xb, 0x40, 0x0, - 0x0, 0x1f, 0x0, 0x3f, 0xc0, 0x1f, 0x30, 0x0, - 0x0, 0x1f, 0x0, 0xb5, 0x89, 0x9b, 0xe3, 0x0, - 0x0, 0x1f, 0x7, 0xc0, 0x6, 0xd0, 0x6e, 0x20, - 0x0, 0x1f, 0x1d, 0x10, 0xe, 0x30, 0x7, 0x60, + 0x6b, 0x1f, 0x0, 0xdf, 0xf5, 0x8f, 0xfb, 0x0, + 0x52, 0x1f, 0x0, 0xd, 0x40, 0xc, 0x30, 0x0, + 0x0, 0x1f, 0x0, 0x5c, 0xd4, 0x4f, 0x80, 0x0, + 0x0, 0x1f, 0x3, 0xd1, 0x27, 0xe3, 0xbb, 0x0, + 0x0, 0x1f, 0x1d, 0x20, 0xd, 0x50, 0x9, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+6B63 "正" */ @@ -5180,13 +5409,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x9f, 0x20, 0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0xf4, 0x0, 0x0, 0x0, 0x5, 0x12, 0xdd, - 0xdf, 0xed, 0xd7, 0x0, 0x0, 0xf3, 0x2f, 0x54, - 0x44, 0x4b, 0x90, 0x0, 0x5e, 0x2, 0xf0, 0x0, - 0x0, 0xa9, 0x0, 0xa, 0xa0, 0x2f, 0x0, 0x0, - 0xa, 0x90, 0x0, 0xf4, 0x2, 0xf5, 0x55, 0x55, - 0xc9, 0x0, 0x6e, 0x0, 0x2f, 0xdd, 0xdd, 0xdf, - 0x90, 0x5, 0x70, 0x2, 0xf0, 0x0, 0x0, 0xa9, - 0x0, + 0xdf, 0xed, 0xd7, 0x0, 0x1, 0xf3, 0x2f, 0x54, + 0x44, 0x4b, 0x90, 0x0, 0x5d, 0x2, 0xf0, 0x0, + 0x0, 0xa9, 0x0, 0xb, 0x70, 0x2f, 0x0, 0x0, + 0xa, 0x90, 0x1, 0xf1, 0x2, 0xf5, 0x55, 0x55, + 0xc9, 0x0, 0x89, 0x0, 0x2f, 0xdd, 0xdd, 0xdf, + 0x90, /* U+6D41 "流" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -5267,14 +5495,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x22, 0x2d, 0x52, 0x22, 0x20, 0x6, 0xe0, 0x0, 0x0, 0xc3, 0x0, 0x0, 0x0, 0x2, 0xa, 0xff, 0xff, 0xff, 0xff, 0x40, 0x3, 0x80, 0xa6, 0x51, - 0xc4, 0x32, 0xb4, 0x0, 0x6b, 0xa, 0x5f, 0xc, - 0x38, 0x6b, 0x40, 0xa, 0x80, 0xa5, 0xf0, 0xc3, - 0x86, 0xb4, 0x0, 0xe4, 0xa, 0x5f, 0xdf, 0xde, - 0x6b, 0x40, 0x2f, 0x10, 0xa5, 0x22, 0x22, 0x20, - 0xb4, 0x6, 0xc0, 0xa, 0x50, 0x0, 0x1, 0x9f, - 0x30, 0x97, 0x0, 0xa5, 0x0, 0x0, 0xd, 0xa0, + 0xc4, 0x32, 0xb4, 0x0, 0x7b, 0xa, 0x5f, 0xc, + 0x38, 0x6b, 0x40, 0xb, 0x70, 0xa5, 0xf0, 0xc3, + 0x86, 0xb4, 0x0, 0xf2, 0xa, 0x5f, 0xdf, 0xde, + 0x6b, 0x40, 0x5d, 0x0, 0xa5, 0x22, 0x22, 0x22, + 0xd4, 0x9, 0x80, 0xa, 0x50, 0x0, 0x1, 0xeb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6E90 "源" */ + 0x1, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0xe3, 0xe, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x6f, 0x4f, 0x42, 0x22, 0xf3, 0x22, 0x10, + 0x0, 0x4, 0x2f, 0x20, 0x5, 0xe0, 0x0, 0x0, + 0x1a, 0x20, 0xf, 0x2c, 0xff, 0xff, 0xfe, 0x0, + 0x8, 0xf5, 0xf, 0x2c, 0x50, 0x0, 0x3e, 0x0, + 0x0, 0x4c, 0xf, 0x2c, 0xfe, 0xee, 0xfe, 0x0, + 0x0, 0x0, 0xf, 0x2c, 0x50, 0x0, 0x3e, 0x0, + 0x0, 0x33, 0xf, 0x1c, 0x62, 0x22, 0x5e, 0x0, + 0x0, 0xa8, 0x2f, 0xa, 0xdd, 0xfd, 0xdb, 0x0, + 0x0, 0xe4, 0x5d, 0x2, 0x10, 0xe3, 0x30, 0x0, + 0x2, 0xf0, 0x99, 0xc, 0x50, 0xe3, 0x7b, 0x0, + 0x6, 0xb0, 0xe5, 0x7b, 0x0, 0xf3, 0xa, 0x90, + 0xc, 0x75, 0xe4, 0xe1, 0x7a, 0xf2, 0x1, 0xe3, + 0x7, 0x16, 0x70, 0x20, 0x78, 0x30, 0x0, 0x10, + /* U+6EE1 "满" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0xd4, 0x4, 0xe0, 0x0, 0x3, @@ -5284,14 +5528,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xee, 0xee, 0xee, 0xee, 0xe9, 0x7, 0xf3, 0x1, 0x15, 0xb1, 0x98, 0x11, 0x0, 0x7, 0xe0, 0x0, 0x5a, 0x9, 0x80, 0x0, 0x0, 0x3, 0xe, 0xff, - 0xff, 0xff, 0xff, 0x50, 0x1, 0x60, 0xe2, 0x78, - 0x9, 0x60, 0xd5, 0x0, 0x4e, 0xe, 0x29, 0xd0, - 0xb8, 0xd, 0x50, 0x8, 0xa0, 0xe2, 0xda, 0x9f, - 0xe5, 0xd5, 0x0, 0xd6, 0xe, 0x6d, 0x8, 0xb4, - 0xbd, 0x50, 0x2f, 0x10, 0xed, 0x51, 0xe3, 0x0, - 0xd5, 0x7, 0xd0, 0xe, 0x20, 0x16, 0x1, 0x4f, - 0x40, 0xa7, 0x0, 0xe2, 0x0, 0x0, 0x7f, 0xb1, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0x50, 0x1, 0x70, 0xe2, 0x78, + 0x9, 0x60, 0xd5, 0x0, 0x5d, 0xe, 0x2a, 0xe2, + 0xcb, 0xd, 0x50, 0xa, 0x80, 0xe2, 0xe5, 0xae, + 0xa9, 0xd5, 0x0, 0xf3, 0xe, 0xb8, 0xb, 0x70, + 0x4d, 0x50, 0x6e, 0x0, 0xe5, 0x2, 0xa0, 0x1, + 0xe4, 0xa, 0x70, 0xe, 0x20, 0x0, 0x7, 0xfc, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+6EFF "滿" */ 0x0, 0x0, 0x0, 0x75, 0x0, 0x9, 0x40, 0x0, @@ -5402,52 +5645,85 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xe3, 0x2f, 0xd, 0x40, 0x0, 0x0, 0x0, 0x0, 0xe5, 0x4f, 0x2d, 0x62, 0x22, 0x22, 0x0, 0x0, 0xef, 0xff, 0xcd, 0xff, 0xee, 0xfd, 0x0, - 0x0, 0xe3, 0x0, 0xd, 0x6f, 0x10, 0x7b, 0x0, - 0x0, 0xe5, 0x22, 0xd, 0x4d, 0x50, 0xb7, 0x0, - 0x0, 0xff, 0xfe, 0xe, 0x39, 0xa1, 0xf2, 0x0, - 0x0, 0xf2, 0x3e, 0xf, 0x22, 0xf9, 0xb0, 0x0, - 0x1, 0xf0, 0x3e, 0x1f, 0x0, 0xaf, 0x40, 0x0, - 0x3, 0xe0, 0x3e, 0x4d, 0x0, 0xaf, 0x40, 0x0, - 0x7, 0xb0, 0x3e, 0x88, 0x9, 0xd7, 0xf2, 0x0, - 0xc, 0x60, 0x3e, 0xe4, 0xbd, 0x10, 0x8f, 0x40, - 0x4e, 0x0, 0x3e, 0x6a, 0xa0, 0x0, 0x7, 0xd0, + 0x0, 0xe3, 0x0, 0xd, 0x5f, 0x10, 0x7b, 0x0, + 0x0, 0xf5, 0x22, 0xd, 0x3d, 0x50, 0xb6, 0x0, + 0x0, 0xff, 0xfe, 0xe, 0x38, 0xb1, 0xf1, 0x0, + 0x0, 0xf2, 0x3e, 0xf, 0x11, 0xea, 0x90, 0x0, + 0x3, 0xf0, 0x3e, 0x3e, 0x0, 0x8f, 0x20, 0x0, + 0x6, 0xd0, 0x3e, 0x7a, 0x2, 0xed, 0xa0, 0x0, + 0xc, 0x80, 0x3e, 0xd4, 0x6e, 0x50, 0xcb, 0x10, + 0x4f, 0x10, 0x3f, 0x79, 0xb2, 0x0, 0x9, 0xd0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, /* U+72B6 "状" */ 0x0, 0x0, 0x51, 0x0, 0x5, 0x10, 0x0, 0x0, - 0x0, 0xe, 0x40, 0x0, 0xe5, 0x94, 0x0, 0x6, - 0x10, 0xe4, 0x0, 0xe, 0x54, 0xf3, 0x0, 0xb8, - 0xe, 0x40, 0x0, 0xe5, 0x7, 0xc0, 0x3, 0xe0, - 0xe4, 0x44, 0x4f, 0x84, 0x46, 0x20, 0xd, 0x6e, - 0x5d, 0xdd, 0xfe, 0xdd, 0xd6, 0x0, 0x69, 0xe4, - 0x0, 0xf, 0x50, 0x0, 0x0, 0x0, 0xf, 0x40, - 0x1, 0xf9, 0x0, 0x0, 0x0, 0x1c, 0xf4, 0x0, - 0x5f, 0xe0, 0x0, 0x0, 0x3e, 0xcf, 0x40, 0x9, - 0x9e, 0x50, 0x0, 0x5f, 0xa0, 0xe4, 0x1, 0xf3, - 0x7d, 0x0, 0x3, 0x60, 0xe, 0x40, 0x9c, 0x0, - 0xe9, 0x0, 0x0, 0x0, 0xe4, 0x5f, 0x30, 0x4, - 0xf6, 0x0, 0x0, 0xe, 0x8f, 0x70, 0x0, 0x7, - 0xf6, 0x0, 0x0, 0xe9, 0x90, 0x0, 0x0, 0x8, - 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xe, 0x40, 0x0, 0xe5, 0x62, 0x0, 0x0, + 0x0, 0xe4, 0x0, 0xe, 0x59, 0xd0, 0x0, 0xd4, + 0xe, 0x40, 0x0, 0xe5, 0xd, 0x80, 0x8, 0xb0, + 0xe4, 0x0, 0xe, 0x50, 0x3a, 0x0, 0x2f, 0x1e, + 0x44, 0x44, 0xf8, 0x44, 0x42, 0x0, 0xb7, 0xe5, + 0xdd, 0xdf, 0xed, 0xdd, 0x60, 0x5, 0x8e, 0x40, + 0x0, 0xf6, 0x0, 0x0, 0x0, 0x1, 0xf4, 0x0, + 0x2f, 0xa0, 0x0, 0x0, 0x4, 0xef, 0x40, 0x6, + 0xef, 0x10, 0x0, 0x1a, 0xf6, 0xe4, 0x0, 0xc7, + 0xb8, 0x0, 0x7, 0xc2, 0xe, 0x40, 0x5e, 0x13, + 0xf4, 0x0, 0x0, 0x0, 0xe4, 0x2f, 0x60, 0x8, + 0xe3, 0x0, 0x0, 0xe, 0x6e, 0x90, 0x0, 0xa, + 0xf4, 0x0, 0x0, 0xea, 0x90, 0x0, 0x0, 0x8, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+72C0 "狀" */ - 0x0, 0x20, 0x5, 0x0, 0x1, 0x50, 0x0, 0x0, - 0x1, 0xf0, 0xe, 0x20, 0x3, 0xe2, 0xd2, 0x0, + 0x0, 0x0, 0x5, 0x0, 0x1, 0x50, 0x0, 0x0, + 0x0, 0x20, 0xe, 0x20, 0x3, 0xe0, 0x0, 0x0, + 0x1, 0xf0, 0xe, 0x20, 0x3, 0xe2, 0xe2, 0x0, 0x1, 0xf0, 0xe, 0x20, 0x3, 0xe0, 0x7d, 0x10, 0x1, 0xf0, 0xe, 0x20, 0x3, 0xe0, 0x8, 0x10, 0x1, 0xfa, 0xaf, 0x33, 0x36, 0xf3, 0x33, 0x20, 0x0, 0x88, 0x8f, 0x4f, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0xe, 0x20, 0x4, 0xf0, 0x0, 0x0, - 0x4, 0x44, 0x4f, 0x20, 0x6, 0xf3, 0x0, 0x0, - 0x3f, 0xff, 0xff, 0x20, 0x9, 0xf7, 0x0, 0x0, - 0x0, 0xc4, 0xe, 0x20, 0xe, 0xcd, 0x0, 0x0, - 0x0, 0xd3, 0xe, 0x20, 0x4f, 0x2f, 0x50, 0x0, - 0x0, 0xf1, 0xe, 0x20, 0xda, 0x8, 0xe1, 0x0, - 0x5, 0xd0, 0xe, 0x28, 0xf2, 0x0, 0xdb, 0x0, - 0xc, 0x70, 0xe, 0x8f, 0x70, 0x0, 0x2f, 0xb0, - 0x3d, 0x0, 0xe, 0x79, 0x0, 0x0, 0x3, 0x90, + 0x4, 0x44, 0x4f, 0x20, 0x7, 0xf3, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0x20, 0xa, 0xf9, 0x0, 0x0, + 0x0, 0xc4, 0xe, 0x20, 0x1f, 0xbf, 0x10, 0x0, + 0x0, 0xe2, 0xe, 0x20, 0x9e, 0x1d, 0xa0, 0x0, + 0x2, 0xf0, 0xe, 0x24, 0xf6, 0x3, 0xf7, 0x0, + 0xa, 0x90, 0xe, 0x5f, 0xa0, 0x0, 0x6f, 0x80, + 0x3e, 0x10, 0xe, 0x8a, 0x0, 0x0, 0x5, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+73B0 "现" */ + 0x0, 0x0, 0x0, 0x13, 0x33, 0x33, 0x33, 0x0, + 0x1d, 0xdd, 0xdb, 0x7f, 0xee, 0xee, 0xed, 0x0, + 0x5, 0x6f, 0x54, 0x79, 0x1, 0x0, 0x5d, 0x0, + 0x0, 0x2f, 0x0, 0x79, 0xd, 0x50, 0x5d, 0x0, + 0x0, 0x2f, 0x0, 0x79, 0xd, 0x50, 0x5d, 0x0, + 0x0, 0x2f, 0x0, 0x79, 0xd, 0x50, 0x5d, 0x0, + 0xf, 0xff, 0xfd, 0x79, 0xd, 0x40, 0x5d, 0x0, + 0x3, 0x4f, 0x32, 0x79, 0xf, 0x30, 0x5d, 0x0, + 0x0, 0x2f, 0x0, 0x79, 0x1f, 0x70, 0x5d, 0x0, + 0x0, 0x2f, 0x0, 0x57, 0x6f, 0xf0, 0x39, 0x0, + 0x0, 0x2f, 0x37, 0x1, 0xea, 0xf0, 0x0, 0x30, + 0x27, 0xbf, 0xea, 0x2b, 0xc4, 0xf0, 0x0, 0xe1, + 0x5a, 0x73, 0x2, 0xcd, 0x23, 0xf4, 0x24, 0xf0, + 0x0, 0x0, 0x2f, 0xc1, 0x0, 0xcf, 0xff, 0x90, + 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+73FE "現" */ + 0x0, 0x0, 0x0, 0x13, 0x33, 0x33, 0x31, 0x0, + 0xcd, 0xdd, 0xd7, 0xfd, 0xdd, 0xde, 0x90, 0x4, + 0x5f, 0x75, 0x7c, 0x0, 0x0, 0x69, 0x0, 0x0, + 0xe3, 0x6, 0xc2, 0x22, 0x28, 0x90, 0x0, 0xe, + 0x30, 0x6f, 0xdd, 0xdd, 0xe9, 0x0, 0x0, 0xe3, + 0x6, 0xc0, 0x0, 0x6, 0x90, 0xc, 0xff, 0xff, + 0x7f, 0xdd, 0xdd, 0xe9, 0x0, 0x22, 0xe5, 0x26, + 0xc2, 0x22, 0x28, 0x90, 0x0, 0xe, 0x30, 0x6c, + 0x11, 0x11, 0x79, 0x0, 0x0, 0xe3, 0x6, 0xff, + 0xff, 0xff, 0x90, 0x0, 0xe, 0x32, 0x10, 0xf2, + 0x3e, 0x0, 0x1, 0x68, 0xff, 0xd3, 0x6e, 0x3, + 0xe0, 0x17, 0x4a, 0x74, 0x10, 0x6f, 0x40, 0x2f, + 0x14, 0xd0, 0x0, 0x2, 0xde, 0x40, 0x0, 0xdf, + 0xf8, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, + 0x0, + /* U+7528 "用" */ 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x6d, 0x33, 0x37, 0xf3, 0x33, 0x7e, 0x0, 0x6d, @@ -5512,6 +5788,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x7f, 0xd6, 0x5e, 0x81, 0x2, 0x9f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, + /* U+7684 "的" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc, 0x40, 0x0, 0x89, 0x0, 0x0, 0x0, 0x2f, + 0x20, 0x0, 0xd6, 0x0, 0x0, 0x2, 0x8e, 0x22, + 0x3, 0xf6, 0x55, 0x52, 0x3f, 0xff, 0xff, 0x39, + 0xec, 0xcc, 0xf6, 0x3e, 0x0, 0xe, 0x5f, 0x30, + 0x0, 0xd6, 0x3e, 0x0, 0xe, 0x8b, 0x0, 0x0, + 0xd5, 0x3e, 0x0, 0xe, 0x30, 0x70, 0x0, 0xe5, + 0x3f, 0x33, 0x3f, 0x30, 0xe6, 0x0, 0xe5, 0x3f, + 0xff, 0xff, 0x30, 0x4f, 0x10, 0xe4, 0x3e, 0x0, + 0xe, 0x30, 0xb, 0xa0, 0xf4, 0x3e, 0x0, 0xe, + 0x30, 0x2, 0x20, 0xf3, 0x3e, 0x0, 0xe, 0x30, + 0x0, 0x0, 0xf3, 0x3e, 0x11, 0x1e, 0x30, 0x0, + 0x3, 0xf2, 0x3f, 0xff, 0xff, 0x30, 0x5, 0xef, + 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x53, 0x0, + /* U+78BA "確" */ 0x0, 0x0, 0x0, 0x0, 0x2, 0xb0, 0x0, 0x0, 0x33, 0x33, 0x30, 0x11, 0x7e, 0x11, 0x10, 0xe, @@ -5526,8 +5818,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xfe, 0x0, 0xe, 0x3, 0xb0, 0xe2, 0x2, 0xc0, 0x0, 0x0, 0xe9, 0xab, 0xe, 0x43, 0x5d, 0x33, 0x10, 0x7, 0x99, 0x60, 0xed, 0xcc, 0xcc, - 0xc8, 0x0, 0x0, 0x0, 0xe, 0x20, 0x0, 0x0, - 0x0, + 0xc8, /* U+79D2 "秒" */ 0x0, 0x0, 0x2, 0x30, 0x3, 0xe0, 0x0, 0x0, @@ -5537,14 +5828,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x7, 0x7d, 0xa7, 0x4b, 0x84, 0xe0, 0x3f, 0x20, 0xa, 0xaf, 0xca, 0x7f, 0x34, 0xe0, 0xb, 0x90, 0x0, 0x3f, 0x50, 0x7d, 0x4, 0xe0, 0x3, 0xf1, - 0x0, 0xaf, 0xc4, 0xe6, 0x4, 0xe0, 0x35, 0x81, - 0x3, 0xec, 0xaf, 0x60, 0x4, 0xe0, 0xd8, 0x0, - 0xc, 0x6c, 0x56, 0x90, 0x1, 0x59, 0xd0, 0x0, - 0x6c, 0xc, 0x50, 0x0, 0x0, 0x8f, 0x20, 0x0, - 0x12, 0xc, 0x50, 0x0, 0xa, 0xf4, 0x0, 0x0, - 0x0, 0xc, 0x50, 0x5, 0xed, 0x30, 0x0, 0x0, - 0x0, 0xc, 0x56, 0xdf, 0x80, 0x0, 0x0, 0x0, - 0x0, 0xc, 0x5a, 0x92, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xbf, 0xc4, 0xe6, 0x4, 0xe0, 0x35, 0x81, + 0x4, 0xdc, 0xaf, 0x60, 0x4, 0xe1, 0xe7, 0x0, + 0xe, 0x4c, 0x56, 0x90, 0x1, 0x6c, 0xb0, 0x0, + 0x69, 0xc, 0x50, 0x0, 0x2, 0xdb, 0x0, 0x0, + 0x0, 0xc, 0x50, 0x1, 0x8f, 0x80, 0x0, 0x0, + 0x0, 0xc, 0x53, 0x9f, 0xc3, 0x0, 0x0, 0x0, + 0x0, 0xc, 0x5b, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+7A0D "稍" */ @@ -5561,7 +5851,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0x0, 0x10, 0xf2, 0x5, 0xc1, 0x11, 0x13, 0xf0, 0x0, 0xf, 0x20, 0x5c, 0x0, 0x2, 0x6f, 0x0, 0x0, 0xf2, 0x5, 0xc0, 0x0, 0xef, - 0x90, 0x0, 0xf, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+7B49 "等" */ @@ -5595,8 +5885,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0x40, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, 0xe4, 0x0, 0x0, 0xf, 0x31, 0x11, 0x11, 0x1e, 0x40, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf4, - 0x0, 0x0, 0xf, 0x30, 0x0, 0x0, 0xe, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, /* U+7CFB "系" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x35, 0x0, @@ -5676,12 +5966,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1, 0xaf, 0xbf, 0x71, 0x0, 0x5e, 0x25, 0xd8, 0xfc, 0x20, 0x4d, 0xf7, 0x2f, 0xff, 0xff, 0x95, 0x11, 0x11, 0x14, 0x40, 0x53, 0x20, 0x53, 0xcf, - 0xff, 0xff, 0x20, 0xa, 0x3c, 0x3a, 0xc, 0x50, + 0xff, 0xff, 0x20, 0xa, 0x2c, 0x3a, 0xc, 0x50, 0x0, 0xe2, 0x0, 0xe0, 0xc2, 0xd1, 0xc5, 0x0, - 0xe, 0x20, 0x3c, 0xa, 0x49, 0x6c, 0x62, 0x22, - 0xe2, 0x8, 0x80, 0x95, 0x33, 0xce, 0xdd, 0xdf, - 0x20, 0x0, 0x0, 0x0, 0xc, 0x50, 0x0, 0xe2, - 0x0, + 0xe, 0x20, 0x4b, 0xa, 0x49, 0x6c, 0x62, 0x22, + 0xe2, 0x6, 0x50, 0x75, 0x33, 0xce, 0xdd, 0xdf, + 0x20, /* U+7D71 "統" */ 0x0, 0x7, 0x30, 0x0, 0x9, 0x60, 0x0, 0x0, @@ -5728,11 +6017,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd0, 0x1c, 0x30, 0x3b, 0xc, 0xfd, 0xff, 0x8d, 0xaf, 0xff, 0xe3, 0xb0, 0x44, 0x21, 0x46, 0xd1, 0xc0, 0x0, 0x3b, 0x4, 0x8a, 0x4d, 0x2d, 0x1c, - 0x11, 0x3, 0xb0, 0x77, 0x95, 0xc5, 0xd1, 0xff, - 0xf8, 0x3b, 0xb, 0x38, 0x68, 0x9d, 0x0, 0x0, - 0x4, 0xb1, 0xf0, 0x78, 0x25, 0xd0, 0x0, 0x38, - 0xca, 0x4, 0x0, 0x0, 0x2d, 0x0, 0x3, 0xdb, - 0x30, + 0x11, 0x3, 0xb0, 0x96, 0x95, 0xb6, 0xd1, 0xff, + 0xf8, 0x3b, 0xe, 0x18, 0x76, 0x9d, 0x0, 0x0, + 0x6, 0xb1, 0x70, 0x22, 0x2, 0xd0, 0x0, 0x4e, + 0xc3, /* U+7EA7 "级" */ 0x0, 0x8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -5782,7 +6070,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x2, 0x58, 0x2f, 0x20, 0x0, 0xe3, 0x0, 0x4c, 0xff, 0xda, 0x2f, 0x64, 0x44, 0xf3, 0x0, 0x26, 0x30, 0x0, 0xf, 0xcc, 0xcc, 0xf3, 0x0, - 0x0, 0x0, 0x0, 0xf, 0x20, 0x0, 0xe3, 0x0, /* U+7EDF "统" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -5804,17 +6091,17 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+7F51 "网" */ 0x1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3e, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xe3, 0xe0, 0x40, 0x1d, 0x0, - 0xa, 0x5e, 0x3e, 0x1e, 0x26, 0xba, 0x12, 0xf4, - 0xe3, 0xe0, 0x89, 0xc6, 0x8a, 0x8a, 0x3e, 0x3e, - 0x1, 0xff, 0x1, 0xee, 0x43, 0xe3, 0xe0, 0xa, - 0xb0, 0x8, 0xe0, 0x3e, 0x3e, 0x0, 0xef, 0x10, - 0xbf, 0x23, 0xe3, 0xe0, 0x6c, 0xb7, 0x3f, 0x9a, - 0x3e, 0x3e, 0xe, 0x45, 0xcb, 0x81, 0xf5, 0xe3, - 0xe7, 0xc0, 0x7, 0xe1, 0xa, 0xbe, 0x3e, 0x93, - 0x0, 0xb6, 0x0, 0x35, 0xe3, 0xe0, 0x0, 0x0, - 0x0, 0x23, 0x9d, 0x3e, 0x0, 0x0, 0x0, 0x9, - 0xfd, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xe3, 0xe1, 0x60, 0x2e, 0x0, + 0xb, 0x6e, 0x3e, 0xe, 0x37, 0xac, 0x33, 0xe3, + 0xe3, 0xe0, 0x5c, 0xd4, 0x5d, 0xa9, 0x3e, 0x3e, + 0x0, 0xdd, 0x0, 0xcf, 0x23, 0xe3, 0xe0, 0xb, + 0xd0, 0x8, 0xf0, 0x3e, 0x3e, 0x4, 0xed, 0x41, + 0xfd, 0x73, 0xe3, 0xe0, 0xc7, 0x7b, 0x8a, 0x3e, + 0x4e, 0x3e, 0x6d, 0x1, 0x8f, 0x20, 0xc9, 0xe3, + 0xea, 0x40, 0xb, 0x70, 0x4, 0x6e, 0x3e, 0x0, + 0x0, 0x10, 0x2, 0x39, 0xd3, 0xe0, 0x0, 0x0, + 0x0, 0x9f, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, /* U+8046 "聆" */ 0x1, 0x11, 0x11, 0x10, 0x1, 0xa2, 0x0, 0x0, @@ -5826,12 +6113,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3, 0xd0, 0x1f, 0x20, 0x0, 0x96, 0x0, 0x20, 0x3, 0xd4, 0x4f, 0x3, 0x33, 0x43, 0x32, 0x0, 0x3, 0xfd, 0xdf, 0x1d, 0xdd, 0xdd, 0xec, 0x0, - 0x3, 0xd0, 0x1f, 0x0, 0x0, 0x0, 0xe6, 0x0, - 0x3, 0xd0, 0x1f, 0x42, 0x60, 0xa, 0xb0, 0x0, - 0x29, 0xec, 0xef, 0xd3, 0xdb, 0x6e, 0x10, 0x0, - 0x5a, 0x85, 0x4f, 0x0, 0xa, 0xf6, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0x0, 0x0, 0x8f, 0x40, 0x0, - 0x0, 0x0, 0x1f, 0x0, 0x0, 0x6, 0x90, 0x0, + 0x3, 0xd0, 0x1f, 0x0, 0x0, 0x1, 0xe5, 0x0, + 0x3, 0xd2, 0x5f, 0x94, 0xb2, 0xd, 0x80, 0x0, + 0x5e, 0xec, 0xbf, 0x60, 0x7e, 0xda, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0x0, 0x2, 0xcc, 0x10, 0x0, + 0x0, 0x0, 0x1f, 0x0, 0x0, 0x8, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+807D "聽" */ @@ -5848,7 +6134,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd5, 0x3b, 0x0, 0x3a, 0x72, 0xe5, 0x8c, 0x33, 0x55, 0xc3, 0x28, 0xdd, 0x7e, 0xc2, 0xb4, 0x2, 0xc4, 0xb2, 0x42, 0x0, 0xf7, 0x7, 0xff, 0xf7, - 0x4, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0x0, + 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+80FD "能" */ @@ -5863,26 +6149,41 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0x40, 0xf1, 0x4, 0xc4, 0x2f, 0x0, 0xd, 0x40, 0xf7, 0xde, 0x70, 0x2f, 0xee, 0xef, 0x40, 0xfb, 0x50, 0x0, 0x2f, 0x11, 0x1d, 0x40, - 0xf1, 0x0, 0x4c, 0x2f, 0x0, 0xe, 0x40, 0xf5, - 0x11, 0xaa, 0x2f, 0x3, 0xff, 0x30, 0x8f, 0xff, - 0xd3, 0x2f, 0x1, 0xfb, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf1, 0x0, 0x4c, 0x2f, 0x0, 0xe, 0x30, 0xf5, + 0x11, 0xaa, 0x2f, 0x2, 0xfc, 0x10, 0x8f, 0xff, + 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+884C "行" */ 0x0, 0x0, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x32, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x5f, 0x50, 0x3, 0x33, 0x33, 0x33, 0x0, 0x6f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x50, - 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0x53, 0x33, 0x33, 0x33, 0x33, 0x0, 0xc, 0xa1, - 0xff, 0xff, 0xff, 0xff, 0xe0, 0xb, 0xf3, 0x0, - 0x0, 0x0, 0xf4, 0x0, 0xb, 0xdf, 0x30, 0x0, - 0x0, 0xf, 0x40, 0x7, 0xd1, 0xf3, 0x0, 0x0, - 0x0, 0xf4, 0x0, 0x1, 0xf, 0x30, 0x0, 0x0, + 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, + 0x53, 0x33, 0x33, 0x33, 0x33, 0x0, 0x1d, 0xa1, + 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1d, 0xf3, 0x0, + 0x0, 0x0, 0xf4, 0x0, 0x2d, 0xbf, 0x30, 0x0, + 0x0, 0xf, 0x40, 0x4, 0x80, 0xf3, 0x0, 0x0, + 0x0, 0xf4, 0x0, 0x0, 0xf, 0x30, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0, - 0xf4, 0x0, 0x0, 0xf, 0x30, 0x0, 0x0, 0xf, - 0x40, 0x0, 0x0, 0xf3, 0x0, 0x1, 0x69, 0xf2, - 0x0, 0x0, 0xf, 0x30, 0x0, 0x3f, 0xd7, 0x0, + 0xf4, 0x0, 0x0, 0xf, 0x30, 0x0, 0x13, 0x6f, + 0x30, 0x0, 0x0, 0xf3, 0x0, 0x3, 0xfd, 0x80, + 0x0, + + /* U+898B "見" */ + 0x0, 0x1, 0x11, 0x11, 0x11, 0x11, 0x0, 0x0, + 0x1, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, + 0x1f, 0x30, 0x0, 0x0, 0xd, 0x60, 0x0, 0x1, + 0xf6, 0x44, 0x44, 0x44, 0xd6, 0x0, 0x0, 0x1f, + 0xdc, 0xcc, 0xcc, 0xcf, 0x60, 0x0, 0x1, 0xf3, + 0x0, 0x0, 0x0, 0xd6, 0x0, 0x0, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0x60, 0x0, 0x1, 0xf4, 0x11, + 0x11, 0x11, 0xd6, 0x0, 0x0, 0x1f, 0x41, 0x11, + 0x11, 0x1d, 0x60, 0x0, 0x0, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0x0, 0x0, 0x0, 0xc, 0x80, 0x3f, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xf2, 0x3, 0xf0, + 0x0, 0x6a, 0x0, 0x18, 0xf6, 0x0, 0x2f, 0x42, + 0x2b, 0x91, 0xbf, 0xc3, 0x0, 0x0, 0xbf, 0xff, + 0xe3, 0x7, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+89BD "覽" */ @@ -5935,7 +6236,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0xc0, 0xe, 0x10, 0x4d, 0x0, 0xf1, 0xd3, 0x4, 0xc0, 0xe, 0x10, 0x4d, 0x0, 0xc9, 0xf0, 0x3, 0xff, 0xff, 0x10, 0x4d, 0x0, 0x5f, 0x70, - 0x0, 0x0, 0x0, 0x0, 0x4d, 0x0, 0x0, 0x0, /* U+8A2A "訪" */ 0x0, 0x7, 0x10, 0x0, 0x0, 0x83, 0x0, 0x0, @@ -5979,15 +6279,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2, 0x22, 0x22, 0x6f, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x22, 0x22, 0x38, 0x88, 0x9f, 0x88, 0x70, 0x3, 0xdd, 0xdd, 0x0, 0x0, 0xf, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x14, 0x44, 0x2f, 0x10, 0x0, - 0x4, 0xff, 0xff, 0x3d, 0xfd, 0x5f, 0x20, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xe1, 0xd, 0x30, 0x0, - 0x2, 0xff, 0xfd, 0x0, 0xe1, 0xc, 0x50, 0x0, - 0x3, 0xc1, 0x2e, 0x0, 0xe1, 0x9, 0x70, 0x10, - 0x3, 0xc0, 0x1e, 0x0, 0xe5, 0x77, 0xa0, 0xc3, - 0x3, 0xc1, 0x2e, 0x9e, 0xff, 0xd4, 0xe0, 0xe0, - 0x2, 0xee, 0xec, 0x78, 0x52, 0x0, 0xda, 0xd0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x50, + 0x0, 0x0, 0x0, 0x14, 0x44, 0x1f, 0x10, 0x0, + 0x4, 0xff, 0xff, 0x3d, 0xfd, 0x5e, 0x20, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xe1, 0xc, 0x40, 0x0, + 0x2, 0xff, 0xfd, 0x0, 0xe1, 0xa, 0x60, 0x0, + 0x3, 0xc1, 0x2e, 0x0, 0xe1, 0x8, 0x90, 0x20, + 0x3, 0xc0, 0x1e, 0x0, 0xe5, 0x75, 0xe0, 0xd2, + 0x3, 0xc1, 0x2e, 0x8d, 0xed, 0xb1, 0xe9, 0xe0, + 0x2, 0xee, 0xec, 0x0, 0x0, 0x0, 0x5f, 0x60, /* U+8A71 "話" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -6005,7 +6304,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3, 0xd0, 0xc, 0x45, 0xc0, 0x0, 0x2e, 0x0, 0x3, 0xd1, 0x1d, 0x45, 0xd5, 0x55, 0x7e, 0x0, 0x2, 0xff, 0xff, 0x35, 0xfc, 0xcc, 0xce, 0x0, - 0x0, 0x0, 0x0, 0x5, 0xc0, 0x0, 0x2e, 0x0, /* U+8A8D "認" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -6061,6 +6359,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3, 0xff, 0xfd, 0x7a, 0x0, 0x9, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, + /* U+8AAD "読" */ + 0x0, 0x48, 0x0, 0x0, 0x3, 0x90, 0x0, 0x0, + 0x0, 0x1e, 0x0, 0x37, 0x7a, 0xf7, 0x77, 0x40, + 0x2d, 0xdf, 0xdd, 0x77, 0x79, 0xf7, 0x77, 0x30, + 0x3, 0x33, 0x33, 0x0, 0x5, 0xe0, 0x0, 0x0, + 0x0, 0x11, 0x10, 0x1f, 0xff, 0xff, 0xfd, 0x0, + 0x8, 0xff, 0xf9, 0x3, 0x33, 0x33, 0x33, 0x0, + 0x0, 0x0, 0x0, 0x79, 0x99, 0x99, 0x99, 0x70, + 0x8, 0xff, 0xf9, 0xc5, 0x44, 0x44, 0x46, 0xd0, + 0x0, 0x0, 0x0, 0xc2, 0xa3, 0xc, 0x2, 0xd0, + 0x7, 0xff, 0xf8, 0x10, 0xd3, 0xf, 0x0, 0x10, + 0x7, 0x91, 0x79, 0x0, 0xe2, 0xf, 0x0, 0x0, + 0x7, 0x80, 0x69, 0x2, 0xe0, 0xf, 0x0, 0xb1, + 0x7, 0x80, 0x69, 0xa, 0x70, 0xf, 0x33, 0xf0, + 0x7, 0xff, 0xf8, 0x99, 0x0, 0xa, 0xff, 0xb0, + 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, + /* U+8ACB "請" */ 0x0, 0xb, 0x10, 0x0, 0x0, 0xb1, 0x0, 0x0, 0x0, 0xa, 0x60, 0x9, 0x99, 0xfa, 0x99, 0x60, @@ -6092,7 +6407,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xaa, 0x80, 0x0, 0x3, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0x0, 0x0, 0x5b, 0x11, 0x11, 0x11, 0x12, 0xe0, 0x0, 0x5, 0xeb, 0xbb, 0xbb, 0xbb, 0xce, - 0x0, 0x0, 0x5b, 0x0, 0x0, 0x0, 0x1, 0xe0, 0x0, /* U+8BBE "设" */ @@ -6158,10 +6472,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x4e, 0x0, 0x24, 0x4b, 0xb4, 0x42, 0x0, 0x0, 0x4e, 0x0, 0x9f, 0xee, 0xee, 0xfa, 0x0, 0x0, 0x4e, 0x2, 0x99, 0x0, 0x0, 0x9a, 0x0, - 0x0, 0x4e, 0x6e, 0x99, 0x0, 0x0, 0x9a, 0x0, - 0x0, 0x4f, 0xe4, 0x9b, 0x33, 0x33, 0xaa, 0x0, - 0x0, 0x8e, 0x20, 0x9f, 0xff, 0xff, 0xfa, 0x0, - 0x0, 0x12, 0x0, 0x99, 0x0, 0x0, 0x9a, 0x0, + 0x0, 0x4e, 0x6d, 0x99, 0x0, 0x0, 0x9a, 0x0, + 0x0, 0x4f, 0xd3, 0x9b, 0x33, 0x33, 0xaa, 0x0, + 0x0, 0x79, 0x0, 0x9f, 0xff, 0xff, 0xfa, 0x0, /* U+8BEF "误" */ 0x0, 0x50, 0x0, 0x11, 0x11, 0x11, 0x10, 0x0, @@ -6250,6 +6563,25 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3f, 0x80, 0x0, 0x8e, 0xc1, 0x0, 0x1b, 0xd1, 0x4, 0x0, 0x0, 0x28, 0x0, 0x0, 0x0, 0x60, + /* U+8D44 "资" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4, 0xa1, 0x0, 0x2f, 0x10, 0x0, 0x0, 0x0, + 0x1, 0xae, 0x30, 0xaf, 0xcc, 0xcc, 0xcc, 0x20, + 0x0, 0x6, 0x53, 0xe4, 0x44, 0x44, 0x7f, 0x10, + 0x0, 0x0, 0x1e, 0x60, 0x4a, 0x0, 0xc7, 0x0, + 0x0, 0xa, 0x85, 0x0, 0xcf, 0x40, 0x50, 0x0, + 0x2, 0xdb, 0x0, 0x4c, 0xb4, 0xea, 0x40, 0x0, + 0x2f, 0x70, 0xae, 0xd6, 0x0, 0x18, 0xee, 0xb0, + 0x2, 0x3, 0x86, 0x33, 0x33, 0x33, 0x33, 0x50, + 0x0, 0xf, 0xed, 0xdd, 0xdd, 0xde, 0xe0, 0x0, + 0x0, 0xf, 0x20, 0x8, 0x50, 0x4, 0xe0, 0x0, + 0x0, 0xf, 0x20, 0xd, 0x60, 0x4, 0xe0, 0x0, + 0x0, 0xf, 0x20, 0x6f, 0x51, 0x4, 0xe0, 0x0, + 0x0, 0x0, 0x2a, 0xf5, 0x9f, 0xc6, 0x10, 0x0, + 0x3, 0x8d, 0xfa, 0x20, 0x0, 0x6c, 0xfa, 0x20, + 0x6, 0xb6, 0x10, 0x0, 0x0, 0x0, 0x3b, 0x50, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8D85 "超" */ 0x0, 0x0, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf1, 0xa, 0xef, 0xfe, 0xef, 0x10, @@ -6301,6 +6633,57 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x10, 0x43, 0x10, 0x0, 0xe, 0x54, 0x44, 0xf1, 0x0, + /* U+8F09 "載" */ + 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, + 0x0, 0x2, 0xe0, 0x0, 0x6a, 0x36, 0x0, 0x4, + 0xcc, 0xcf, 0xcc, 0xa5, 0xb1, 0xd8, 0x0, 0x2, + 0x24, 0xe2, 0x22, 0x5b, 0x1, 0xa0, 0x2, 0x22, + 0x4e, 0x22, 0x26, 0xc2, 0x22, 0x21, 0xcc, 0xcd, + 0xfc, 0xcc, 0xcf, 0xcc, 0xc9, 0x6, 0xee, 0xef, + 0xee, 0xe4, 0xe0, 0x1d, 0x0, 0x13, 0x34, 0xd3, + 0x33, 0x1f, 0x5, 0xb0, 0x0, 0xcc, 0xcf, 0xcc, + 0x90, 0xf0, 0xa6, 0x0, 0xe, 0x2, 0xd0, 0x3b, + 0xd, 0x4e, 0x10, 0x0, 0xfc, 0xcf, 0xcc, 0xb0, + 0xac, 0x90, 0x0, 0xe, 0x78, 0xe7, 0x9b, 0x7, + 0xf1, 0x11, 0x0, 0x33, 0x5e, 0x33, 0x20, 0xbe, + 0x6, 0xa4, 0xee, 0xee, 0xfe, 0xee, 0xba, 0xd9, + 0xc7, 0x0, 0x0, 0x2d, 0x0, 0x79, 0x3, 0xed, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+8F7D "载" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6, 0xa0, 0x0, 0xe4, 0x20, 0x0, 0x0, + 0x22, 0x8b, 0x22, 0x1d, 0x4c, 0xa0, 0x0, 0x4d, + 0xde, 0xfd, 0xd6, 0xd5, 0x1d, 0x90, 0x0, 0x0, + 0x7b, 0x0, 0xc, 0x60, 0x15, 0x2, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1, 0x13, 0xb1, + 0x11, 0x1b, 0x91, 0x24, 0x10, 0x9c, 0xef, 0xcc, + 0xc8, 0x8a, 0x6, 0xc0, 0x3, 0x7f, 0x5b, 0x44, + 0x26, 0xc0, 0xd5, 0x0, 0xc, 0x81, 0xf0, 0x0, + 0x4f, 0x6e, 0x0, 0x1, 0xff, 0xff, 0xff, 0x80, + 0xff, 0x50, 0x0, 0x1, 0x12, 0xf1, 0x10, 0xe, + 0xb0, 0x31, 0x13, 0x45, 0x7f, 0xac, 0x9b, 0xfc, + 0x9, 0x85, 0xdc, 0xba, 0xf7, 0x9f, 0xe6, 0xf8, + 0xe5, 0x0, 0x0, 0x1f, 0x1, 0x80, 0x6, 0xfc, + 0x0, + + /* U+8FBC "込" */ + 0x0, 0x0, 0x0, 0x7, 0x50, 0x0, 0x0, 0x0, + 0x5, 0xb0, 0x0, 0x8, 0xdd, 0x0, 0x0, 0x0, + 0x0, 0xd7, 0x0, 0x0, 0xc, 0x60, 0x0, 0x0, + 0x0, 0x4f, 0x0, 0x0, 0x9, 0xa0, 0x0, 0x0, + 0x0, 0x2, 0x0, 0x0, 0xe, 0xe0, 0x0, 0x0, + 0x4, 0x44, 0x0, 0x0, 0x5d, 0xf2, 0x0, 0x0, + 0xb, 0xde, 0x0, 0x0, 0xd6, 0x99, 0x0, 0x0, + 0x0, 0x3e, 0x0, 0x7, 0xd0, 0x2f, 0x20, 0x0, + 0x0, 0x3e, 0x0, 0x3f, 0x40, 0x8, 0xd0, 0x0, + 0x0, 0x3e, 0x2, 0xe8, 0x0, 0x0, 0xdb, 0x0, + 0x0, 0x3e, 0xd, 0xb0, 0x0, 0x0, 0x2e, 0xa0, + 0x0, 0xaf, 0x42, 0x0, 0x0, 0x0, 0x2, 0x50, + 0xa, 0xd5, 0xfb, 0x63, 0x22, 0x12, 0x23, 0x30, + 0x3d, 0x10, 0x18, 0xce, 0xff, 0xff, 0xff, 0xd0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8FDB "进" */ 0x0, 0x50, 0x0, 0xc, 0x30, 0xc, 0x20, 0x0, 0x3f, 0x40, 0x0, 0xf4, 0x0, 0xe3, 0x0, 0x0, @@ -6369,6 +6752,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x2d, 0x10, 0x18, 0xce, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+9054 "達" */ + 0x0, 0x10, 0x0, 0x0, 0x9, 0x10, 0x0, 0x0, + 0x5, 0xd1, 0x8, 0xcc, 0xcf, 0xcc, 0xcb, 0x0, + 0x0, 0x8d, 0x1, 0x22, 0x2e, 0x52, 0x22, 0x0, + 0x0, 0xb, 0x33, 0x33, 0x3e, 0x53, 0x33, 0x20, + 0x0, 0x0, 0x3b, 0xbf, 0xcb, 0xbf, 0xcb, 0x90, + 0x7, 0x87, 0x0, 0xb, 0x50, 0x1e, 0x0, 0x0, + 0x6, 0x8e, 0xe, 0xef, 0xfe, 0xef, 0xee, 0x30, + 0x0, 0x3e, 0x0, 0x0, 0xe, 0x20, 0x0, 0x0, + 0x0, 0x3e, 0x7, 0xee, 0xef, 0xee, 0xeb, 0x0, + 0x0, 0x3e, 0x0, 0x0, 0xe, 0x20, 0x0, 0x0, + 0x0, 0x3e, 0x4e, 0xee, 0xef, 0xee, 0xee, 0xa0, + 0x0, 0xcf, 0x60, 0x0, 0xe, 0x20, 0x0, 0x0, + 0xb, 0xc5, 0xec, 0x63, 0x27, 0x21, 0x11, 0x20, + 0x3d, 0x10, 0x18, 0xce, 0xff, 0xff, 0xff, 0xf2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+914D "配" */ 0x2f, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0x0, 0x0, 0xb4, 0xe1, 0x0, 0x33, 0x35, 0xf0, 0x0, @@ -6432,8 +6832,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0xa9, 0x7d, 0x28, 0xfe, 0xee, 0xfc, 0x0, 0x0, 0x69, 0x85, 0x8, 0x70, 0x0, 0x4c, 0x0, 0x1, 0x3b, 0xcc, 0xe8, 0x70, 0x0, 0x4c, 0x0, - 0x6f, 0xdb, 0x86, 0x38, 0xfe, 0xee, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x8, 0x70, 0x0, 0x3c, 0x0, + 0x6d, 0xb9, 0x75, 0x38, 0xfe, 0xee, 0xec, 0x0, /* U+9519 "错" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -6448,9 +6847,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xee, 0xef, 0x60, 0x5, 0xac, 0x54, 0x5c, 0x0, 0x0, 0xb6, 0x0, 0x7, 0xa0, 0x5, 0xff, 0xff, 0xff, 0x60, 0x0, 0x7a, 0x25, 0x5c, 0x11, 0x11, - 0xc6, 0x0, 0x7, 0xde, 0x95, 0xd1, 0x11, 0x1c, - 0x60, 0x0, 0xbe, 0x50, 0x5f, 0xff, 0xff, 0xf6, - 0x0, 0x3, 0x10, 0x5, 0xc0, 0x0, 0xb, 0x60, + 0xc6, 0x0, 0x7, 0xde, 0x85, 0xd1, 0x11, 0x1c, + 0x60, 0x0, 0x99, 0x20, 0x5f, 0xff, 0xff, 0xf6, + 0x0, /* U+9589 "閉" */ 0x3f, 0xee, 0xef, 0x32, 0xfe, 0xee, 0xf0, 0x3e, @@ -6459,13 +6858,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x32, 0xe0, 0x1, 0xf0, 0x3f, 0xee, 0xee, 0x22, 0xee, 0xee, 0xf0, 0x3e, 0x0, 0x0, 0x0, 0xb0, 0x1, 0xf0, 0x3e, 0x1c, 0xcc, 0xcc, 0xfc, 0xc1, - 0xf0, 0x3e, 0x3, 0x33, 0xbc, 0xf4, 0x31, 0xf0, - 0x3e, 0x0, 0x6, 0xf2, 0xf1, 0x1, 0xf0, 0x3e, - 0x0, 0x6f, 0x40, 0xf1, 0x1, 0xf0, 0x3e, 0x1a, - 0xf5, 0x0, 0xf1, 0x1, 0xf0, 0x3e, 0xbc, 0x20, - 0x14, 0xf0, 0x1, 0xf0, 0x3e, 0x10, 0x3, 0xff, - 0x90, 0x6a, 0xf0, 0x3e, 0x0, 0x0, 0x20, 0x0, - 0xec, 0x50, + 0xf0, 0x3e, 0x3, 0x33, 0xcc, 0xf4, 0x31, 0xf0, + 0x3e, 0x0, 0x9, 0xd1, 0xf1, 0x1, 0xf0, 0x3e, + 0x1, 0xbc, 0x10, 0xf1, 0x1, 0xf0, 0x3e, 0x7f, + 0x80, 0x0, 0xf0, 0x1, 0xf0, 0x3e, 0x42, 0x3, + 0xce, 0xc0, 0x37, 0xf0, 0x3e, 0x0, 0x0, 0x42, + 0x0, 0xec, 0x60, /* U+958B "開" */ 0x3f, 0xff, 0xff, 0x17, 0xff, 0xff, 0xf3, 0xe0, @@ -6476,10 +6874,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd, 0xff, 0xee, 0xfe, 0x62, 0xf3, 0xe0, 0x5, 0xc0, 0x2f, 0x0, 0x2f, 0x3e, 0x4b, 0xce, 0xbc, 0xfb, 0xb3, 0xf3, 0xe1, 0x39, 0xb3, 0x5f, 0x33, - 0x2f, 0x3e, 0x0, 0xb7, 0x2, 0xf0, 0x2, 0xf3, - 0xe0, 0x5f, 0x10, 0x2f, 0x0, 0x3f, 0x3e, 0x2f, - 0x50, 0x2, 0xe2, 0x9d, 0xe3, 0xe0, 0x30, 0x0, - 0x0, 0x2e, 0xb4, + 0x2f, 0x3e, 0x0, 0xb6, 0x2, 0xf0, 0x2, 0xf3, + 0xe0, 0x5c, 0x0, 0x2f, 0x0, 0x3e, 0x3e, 0x1b, + 0x10, 0x2, 0xe1, 0x8a, 0x50, /* U+9593 "間" */ 0x3f, 0xff, 0xff, 0x42, 0xff, 0xff, 0xf0, 0x3e, @@ -6492,9 +6889,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3e, 0x1, 0xff, 0xff, 0xff, 0x1, 0xf0, 0x3e, 0x1, 0xf1, 0x0, 0xf, 0x1, 0xf0, 0x3e, 0x1, 0xfb, 0xbb, 0xbf, 0x1, 0xf0, 0x3e, 0x0, 0x44, - 0x44, 0x44, 0x2, 0xf0, 0x3e, 0x0, 0x0, 0x0, - 0x1, 0xbe, 0xf0, 0x3e, 0x0, 0x0, 0x0, 0x0, - 0xdc, 0x40, + 0x44, 0x44, 0x27, 0xf0, 0x3e, 0x0, 0x0, 0x0, + 0x1, 0xec, 0x50, /* U+95DC "關" */ 0x2f, 0xdd, 0xdf, 0x21, 0xfd, 0xdd, 0xf0, 0x2f, @@ -6506,17 +6902,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf0, 0x2e, 0x2f, 0xcd, 0xee, 0xdb, 0xe2, 0xf0, 0x2e, 0x3, 0x6, 0x73, 0x70, 0x51, 0xf0, 0x2e, 0xe, 0x1a, 0x54, 0xb1, 0xe0, 0xf0, 0x2e, 0xd, - 0xdf, 0x54, 0xfd, 0xd0, 0xf0, 0x2e, 0x0, 0x2e, - 0x24, 0xb0, 0x1, 0xf0, 0x2e, 0xa, 0xfa, 0x4, - 0xb0, 0xcf, 0xf0, 0x2e, 0xc, 0x70, 0x0, 0x0, - 0x99, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, + 0xdf, 0x44, 0xfd, 0xd0, 0xf0, 0x2e, 0x0, 0x2c, + 0x4, 0xb0, 0x1, 0xf0, 0x2e, 0x9, 0x91, 0x4, + 0xb0, 0xbd, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, /* U+95ED "闭" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb6, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf6, 0x2f, - 0xff, 0xff, 0xff, 0xe0, 0x5, 0xf2, 0x33, 0x33, - 0x33, 0x7f, 0x16, 0x2, 0x0, 0x2, 0xb0, 0x4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb7, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xf8, 0x2f, + 0xff, 0xff, 0xff, 0xe1, 0x64, 0xe2, 0x33, 0x5b, + 0x33, 0x7f, 0x3f, 0x1, 0x0, 0x3, 0xf0, 0x4, 0xf3, 0xf0, 0x0, 0x0, 0x3f, 0x0, 0x4f, 0x3f, 0x5f, 0xff, 0xff, 0xff, 0xf7, 0xf3, 0xf0, 0x11, 0x15, 0xff, 0x11, 0x4f, 0x3f, 0x0, 0x1, 0xe8, @@ -6524,24 +6919,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4f, 0x3f, 0x3, 0xeb, 0x3, 0xf0, 0x4, 0xf3, 0xf6, 0xfa, 0x0, 0x3f, 0x0, 0x4f, 0x3f, 0x25, 0x0, 0x5, 0xf0, 0x4, 0xf3, 0xf0, 0x0, 0x5e, - 0xfb, 0x0, 0x7f, 0x3f, 0x0, 0x1, 0x43, 0x6, - 0xff, 0xd3, 0xf0, 0x0, 0x0, 0x0, 0x4f, 0xe5, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xfb, 0x0, 0x7e, 0x3f, 0x0, 0x1, 0x43, 0x5, + 0xfe, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+95EE "问" */ - 0xb, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, - 0x44, 0xff, 0xff, 0xff, 0xfe, 0x0, 0xce, 0x14, - 0x44, 0x44, 0x47, 0xf0, 0x1, 0x90, 0x0, 0x0, + 0xb, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, + 0x44, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x6e, 0x14, + 0x44, 0x44, 0x47, 0xf4, 0xf0, 0x10, 0x0, 0x0, 0x0, 0x4f, 0x4f, 0x0, 0x22, 0x22, 0x21, 0x4, 0xf4, 0xf0, 0xf, 0xff, 0xff, 0xd0, 0x4f, 0x4f, 0x0, 0xf2, 0x0, 0x4d, 0x4, 0xf4, 0xf0, 0xf, 0x20, 0x4, 0xd0, 0x4f, 0x4f, 0x0, 0xf2, 0x0, 0x4d, 0x4, 0xf4, 0xf0, 0xf, 0x41, 0x15, 0xd0, 0x4f, 0x4f, 0x0, 0xff, 0xff, 0xfd, 0x4, 0xf4, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0x4f, 0x0, - 0x0, 0x0, 0x0, 0x5, 0xe4, 0xf0, 0x0, 0x0, - 0x0, 0x48, 0xdd, 0x4f, 0x0, 0x0, 0x0, 0x6, - 0xfc, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x4f, 0x0, + 0x0, 0x0, 0x0, 0x29, 0xd4, 0xf0, 0x0, 0x0, + 0x0, 0x7f, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, /* U+96FB "電" */ 0xa, 0xee, 0xee, 0xef, 0xee, 0xee, 0xc0, 0x0, @@ -6607,7 +7001,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xf0, 0x0, 0x1, 0xf2, 0x11, 0x11, 0x11, 0x5f, 0x0, 0x0, 0x1f, 0x31, 0x11, 0x11, 0x15, 0xf0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x1f, 0x10, 0x0, 0x0, 0x4, 0xf0, 0x0, /* U+97FF "響" */ @@ -6624,7 +7017,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x77, 0x60, 0x0, 0x1, 0xf5, 0x44, 0x44, 0x44, 0x8d, 0x0, 0x0, 0x1f, 0xbb, 0xbb, 0xbb, 0xbc, 0xd0, 0x0, 0x1, 0xfc, 0xcc, 0xcc, 0xcc, 0xdd, - 0x0, 0x0, 0x1f, 0x10, 0x0, 0x0, 0x5, 0xd0, 0x0, /* U+AC00 "가" */ @@ -6643,20 +7035,19 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf5, 0x0, /* U+AC04 "간" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0xa3, 0x0, 0x6b, - 0xbb, 0xbb, 0xb3, 0x1, 0xf5, 0x0, 0x59, 0x99, - 0x99, 0xf4, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x3, - 0xf2, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x9, 0xe0, - 0x1, 0xf7, 0x21, 0x0, 0x0, 0x6f, 0x60, 0x1, - 0xff, 0xfb, 0x0, 0x19, 0xf8, 0x0, 0x1, 0xf7, - 0x21, 0x39, 0xfe, 0x50, 0x0, 0x1, 0xf5, 0x0, - 0x7c, 0x60, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x2e, - 0x30, 0x0, 0x0, 0xf5, 0x0, 0x0, 0x2f, 0x40, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x40, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x2f, 0x63, 0x33, 0x33, - 0x33, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xfd, - 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xa3, 0x0, 0x7c, + 0xcc, 0xcc, 0xc3, 0x1, 0xf5, 0x0, 0x35, 0x55, + 0x56, 0xf4, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x5, + 0xf1, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x1d, 0xb0, + 0x1, 0xfb, 0x96, 0x0, 0x3, 0xdd, 0x10, 0x1, + 0xfb, 0x86, 0x5, 0xbf, 0x90, 0x0, 0x1, 0xf5, + 0x0, 0x8e, 0x92, 0x0, 0x0, 0x1, 0xf5, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, + 0x2e, 0x30, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x2f, + 0x40, 0x0, 0x0, 0xf5, 0x0, 0x0, 0x2f, 0x40, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x63, 0x33, + 0x33, 0x33, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, + 0xfd, 0x0, /* U+AC10 "감" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0xd4, 0x0, 0x8f, @@ -6670,8 +7061,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1f, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x2f, 0x74, 0x44, 0x45, 0xf5, 0x0, 0x0, 0x2f, 0x40, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x2f, 0x40, 0x0, - 0x1, 0xf5, 0x0, 0x0, 0x2f, 0x73, 0x33, 0x34, - 0xf5, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, 0xf5, + 0x1, 0xf5, 0x0, 0x0, 0x2f, 0x74, 0x44, 0x45, + 0xf5, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xf5, 0x0, /* U+AC70 "거" */ @@ -6687,6 +7078,20 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, + /* U+ACAC "견" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0x4, 0xcc, + 0xcc, 0xcc, 0x30, 0x6, 0xf0, 0x25, 0x55, 0x57, + 0xf5, 0x66, 0x9f, 0x0, 0x0, 0x0, 0x5f, 0x5c, + 0xcd, 0xf0, 0x0, 0x0, 0xd, 0xb0, 0x0, 0x6f, + 0x0, 0x0, 0x3c, 0xd1, 0x25, 0x59, 0xf0, 0x4, + 0xaf, 0xa1, 0x6, 0xcc, 0xdf, 0x4, 0xfa, 0x30, + 0x0, 0x0, 0x6, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6f, 0x0, 0x0, 0x7d, 0x0, 0x0, 0x6, + 0xf0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x6f, 0x0, + 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xf3, 0x33, 0x33, 0x33, 0x10, 0x0, 0x7f, 0xff, + 0xff, 0xff, 0xf8, + /* U+ACB0 "결" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, 0x3, 0x88, 0x88, 0x88, 0x10, 0x7, 0xf0, 0x4b, 0xbb, 0xbc, @@ -6764,6 +7169,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe7, 0x0, + /* U+AD6C "구" */ + 0x0, 0x5f, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x1, 0x44, 0x44, 0x44, 0x49, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x8d, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0x70, 0x0, 0x6, 0x66, 0x66, + 0x66, 0x67, 0xf9, 0x66, 0x1, 0xdd, 0xdd, 0xdd, + 0xfd, 0xdd, 0xdd, 0xd2, 0x0, 0x0, 0x0, 0x3f, + 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, + 0x0, 0x0, + /* U+ADF8 "그" */ 0x0, 0x14, 0x44, 0x44, 0x44, 0x44, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, @@ -6834,6 +7254,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x4, 0xf1, 0x2f, 0x40, 0x0, 0x0, 0x0, 0x3e, 0x12, 0xf4, + /* U+B155 "녕" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x2, 0xa1, + 0x0, 0x0, 0x12, 0x27, 0xf0, 0x3f, 0x20, 0x0, + 0xd, 0xff, 0xff, 0x3, 0xf2, 0x0, 0x0, 0x1, + 0x17, 0xf0, 0x3f, 0x20, 0x0, 0x4, 0x44, 0x9f, + 0x3, 0xf2, 0x0, 0x0, 0xcf, 0xff, 0xf0, 0x3f, + 0x31, 0x24, 0x50, 0x0, 0x6f, 0x3, 0xff, 0xff, + 0xec, 0x0, 0x6, 0xf0, 0x2, 0x21, 0x0, 0x0, + 0x0, 0x4b, 0x0, 0x0, 0x1, 0x9e, 0xff, 0xd7, + 0x0, 0x0, 0x0, 0xed, 0x63, 0x47, 0xfa, 0x0, + 0x0, 0x5f, 0x20, 0x0, 0x6, 0xf1, 0x0, 0x5, + 0xf1, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x1f, 0xb3, + 0x11, 0x5e, 0xc0, 0x0, 0x0, 0x3b, 0xff, 0xff, + 0x91, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, + /* U+B294 "는" */ 0x0, 0x2, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -7003,6 +7438,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x20, 0x0, + /* U+B529 "딩" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, 0x3, 0xee, + 0xee, 0xee, 0x60, 0x7, 0xe0, 0x4f, 0x75, 0x55, + 0x52, 0x0, 0x7e, 0x4, 0xf2, 0x0, 0x0, 0x0, + 0x7, 0xe0, 0x4f, 0x20, 0x0, 0x0, 0x0, 0x7e, + 0x4, 0xf2, 0x0, 0x0, 0x12, 0x7, 0xe0, 0x4f, + 0xdc, 0xde, 0xff, 0xc0, 0x7e, 0x1, 0x76, 0x66, + 0x53, 0x10, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x48, 0x0, 0x0, 0x2, 0xae, 0xff, 0xd6, + 0x0, 0x0, 0x1, 0xfc, 0x53, 0x37, 0xf9, 0x0, + 0x0, 0x7f, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x7, + 0xf0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x2f, 0xa3, + 0x11, 0x5e, 0xa0, 0x0, 0x0, 0x4c, 0xff, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, + /* U+B808 "레" */ 0x0, 0x0, 0x0, 0x0, 0x31, 0xe, 0x53, 0x44, 0x44, 0x20, 0xf, 0x60, 0xf5, 0xbf, 0xff, 0xf7, @@ -7017,6 +7467,19 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0xf6, 0xf, 0x50, 0x0, 0x0, 0x0, 0xe, 0x50, 0xf5, + /* U+B824 "려" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, 0x7b, 0xbb, + 0xbb, 0x50, 0x0, 0x7e, 0x58, 0x88, 0x8f, 0x70, + 0x0, 0x7e, 0x0, 0x0, 0xe, 0x75, 0xee, 0xfe, + 0x0, 0x0, 0xe, 0x72, 0x55, 0xae, 0x6d, 0xdd, + 0xdf, 0x70, 0x0, 0x7e, 0x7f, 0x77, 0x77, 0x30, + 0x0, 0x7e, 0x7f, 0x0, 0x0, 0x5, 0xff, 0xfe, + 0x7f, 0x0, 0x0, 0x1, 0x44, 0xae, 0x7f, 0x55, + 0x67, 0x98, 0x0, 0x7e, 0x7f, 0xee, 0xdc, 0xa6, + 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7e, + /* U+B85C "로" */ 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x44, 0x44, 0x44, 0x48, 0xf1, 0x0, 0x0, @@ -7045,7 +7508,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xc5, 0x55, 0x0, 0x0, 0xa, 0xc0, 0x0, 0xca, 0x0, 0x0, 0x0, 0x0, 0xac, 0x0, 0xc, 0xa0, 0x0, 0x0, 0x0, 0xa, 0xc0, 0x0, 0xca, 0x0, - 0x0, 0x0, 0x0, 0xac, 0x0, 0xc, 0xa0, 0x0, 0x0, /* U+B968 "륨" */ @@ -7125,6 +7587,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0x20, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, + /* U+BC1C "발" */ + 0x10, 0x0, 0x0, 0x10, 0x3, 0xc1, 0x0, 0xe7, + 0x0, 0x1, 0xf4, 0x4, 0xf2, 0x0, 0xe7, 0x0, + 0x1, 0xf4, 0x4, 0xf2, 0x0, 0xee, 0xcc, 0xcc, + 0xf4, 0x4, 0xf6, 0x42, 0xeb, 0x77, 0x78, 0xf4, + 0x4, 0xff, 0xf7, 0xe7, 0x0, 0x1, 0xf4, 0x4, + 0xf2, 0x0, 0xef, 0xff, 0xff, 0xf4, 0x4, 0xf2, + 0x0, 0x34, 0x44, 0x44, 0x41, 0x4, 0xf2, 0x0, + 0x0, 0x13, 0x33, 0x33, 0x33, 0x30, 0x0, 0x0, + 0x8f, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xf2, 0x0, 0x0, 0x6f, 0xff, + 0xff, 0xff, 0xf2, 0x0, 0x0, 0x7f, 0x33, 0x33, + 0x33, 0x30, 0x0, 0x0, 0x7f, 0x22, 0x22, 0x22, + 0x22, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x10, 0x0, + /* U+BC30 "배" */ 0x0, 0x0, 0x0, 0x0, 0x40, 0xe, 0x54, 0x70, 0x0, 0x83, 0x2f, 0x30, 0xf6, 0x7e, 0x0, 0xf, @@ -7197,7 +7675,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x11, 0x11, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0, 0x0, /* U+BE44 "비" */ @@ -7339,6 +7816,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf, 0x51, 0xf4, 0x0, 0x0, 0x0, 0x0, 0xe, 0x41, 0xf4, + /* U+C14B "셋" */ + 0x0, 0x0, 0x10, 0x0, 0x1c, 0x32, 0xc2, 0x0, + 0x7, 0xf0, 0x0, 0x1f, 0x43, 0xf2, 0x0, 0x7, + 0xf0, 0x0, 0x1f, 0x43, 0xf2, 0x0, 0x9, 0xf2, + 0x4e, 0xef, 0x43, 0xf2, 0x0, 0xe, 0xf7, 0x15, + 0x6f, 0x43, 0xf2, 0x0, 0x9e, 0x7f, 0x20, 0x1f, + 0x43, 0xf2, 0x9, 0xf4, 0xa, 0xf5, 0x1f, 0x43, + 0xf2, 0x3e, 0x40, 0x0, 0x8b, 0x1f, 0x43, 0xf2, + 0x1, 0x0, 0x0, 0x0, 0x4, 0x13, 0xf2, 0x0, + 0x0, 0x0, 0x4, 0xe1, 0x3, 0xf2, 0x0, 0x0, + 0x0, 0x6, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x3, 0xce, + 0x4f, 0x91, 0x0, 0x0, 0x5, 0xcf, 0xb1, 0x3, + 0xdf, 0xa3, 0x0, 0x7, 0x93, 0x0, 0x0, 0x5, + 0xa4, + /* U+C18C "소" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, @@ -7402,7 +7895,6 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0, 0x0, /* U+C2A4 "스" */ @@ -7466,6 +7958,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x22, 0x20, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x10, + /* U+C548 "안" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0xa3, 0x0, 0x6, + 0xef, 0xfc, 0x30, 0x1, 0xf5, 0x0, 0x6f, 0x61, + 0x2a, 0xf2, 0x1, 0xf5, 0x0, 0xc9, 0x0, 0x0, + 0xe7, 0x1, 0xf5, 0x0, 0xe8, 0x0, 0x0, 0xd9, + 0x1, 0xfb, 0x96, 0xbc, 0x0, 0x2, 0xf6, 0x1, + 0xfb, 0x86, 0x2e, 0xd8, 0x9f, 0xb0, 0x1, 0xf5, + 0x0, 0x0, 0x69, 0x85, 0x0, 0x1, 0xf5, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xf5, 0x0, 0x0, + 0x4e, 0x10, 0x0, 0x1, 0xf5, 0x0, 0x0, 0x5f, + 0x10, 0x0, 0x0, 0xf5, 0x0, 0x0, 0x5f, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x43, 0x33, + 0x33, 0x33, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, + 0xfd, 0x0, + /* U+C5C5 "업" */ 0x0, 0x2, 0x20, 0x0, 0x0, 0x6c, 0x7, 0xff, 0xfe, 0x50, 0x0, 0x7f, 0x5f, 0x50, 0x8, 0xf2, @@ -7512,19 +8019,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x33, 0xf3, /* U+C5F0 "연" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x0, 0x3c, - 0xff, 0xa1, 0x0, 0x7, 0xf0, 0x2f, 0xa4, 0x5d, - 0xd0, 0x88, 0xbf, 0x9, 0xd0, 0x0, 0x2f, 0x5c, - 0xcd, 0xf0, 0xba, 0x0, 0x0, 0xe7, 0x0, 0x7f, - 0xa, 0xb0, 0x0, 0xf, 0x61, 0x17, 0xf0, 0x6f, - 0x40, 0x8, 0xf2, 0xff, 0xff, 0x0, 0xaf, 0xde, - 0xf6, 0x3, 0x38, 0xf0, 0x0, 0x36, 0x62, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0xd, 0x70, 0x0, 0x0, 0x7e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x0, 0x5d, + 0xff, 0xc3, 0x0, 0x7, 0xf0, 0x4f, 0x71, 0x2a, + 0xe1, 0xbb, 0xdf, 0xa, 0xc0, 0x0, 0xf, 0x66, + 0x6a, 0xf0, 0xba, 0x0, 0x0, 0xe7, 0x0, 0x7f, + 0x8, 0xe0, 0x0, 0x3f, 0x4a, 0xac, 0xf0, 0x1d, + 0xd8, 0x9f, 0xa0, 0x77, 0xbf, 0x0, 0x6, 0x98, + 0x40, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x7, + 0xf0, 0x0, 0xe, 0x80, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xe8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x33, - 0x33, 0x33, 0x30, 0x0, 0xe, 0xff, 0xff, 0xff, - 0xff, 0x40, + 0x93, 0x33, 0x33, 0x33, 0x0, 0x0, 0xef, 0xff, + 0xff, 0xff, 0xf4, /* U+C624 "오" */ 0x0, 0x0, 0x5a, 0xce, 0xca, 0x50, 0x0, 0x0, @@ -7548,13 +8054,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x1e, 0x70, 0x2f, 0x30, 0x0, 0x2f, 0xd9, 0x9e, 0xd1, 0x2, 0xff, 0xf9, 0x0, 0x28, 0xfc, 0x60, 0x0, 0x2f, 0x63, 0x20, 0x0, 0xe, 0x70, - 0x0, 0x2, 0xf3, 0x0, 0x7b, 0xbb, 0xfe, 0xde, - 0xfc, 0x2f, 0x30, 0x5, 0x99, 0x88, 0x76, 0x53, - 0x12, 0xf3, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, + 0x0, 0x2, 0xf3, 0x0, 0x8b, 0xbc, 0xfe, 0xcd, + 0xd9, 0x2f, 0x30, 0x0, 0x11, 0x11, 0x0, 0x0, + 0x2, 0xf3, 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x2f, 0x30, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x9c, 0x33, 0x33, 0x33, 0x32, - 0x0, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x9, 0xc3, 0x33, 0x33, 0x33, + 0x20, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x0, /* U+C694 "요" */ @@ -7588,6 +8093,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x3, 0xdf, 0xee, 0xef, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x24, 0x54, 0x20, 0x0, 0x0, + /* U+C6B4 "운" */ + 0x0, 0x0, 0x2, 0x45, 0x42, 0x0, 0x0, 0x0, + 0x0, 0x3d, 0xfe, 0xde, 0xfd, 0x40, 0x0, 0x0, + 0xe, 0xb1, 0x0, 0x1, 0xae, 0x0, 0x0, 0x2, + 0xf4, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0xe, + 0xb1, 0x0, 0x1, 0xaf, 0x0, 0x0, 0x0, 0x3d, + 0xfe, 0xde, 0xfe, 0x40, 0x0, 0x0, 0x0, 0x2, + 0x45, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x20, 0x33, 0x33, 0x33, 0xea, + 0x33, 0x33, 0x30, 0x0, 0x8, 0x30, 0xd, 0x90, + 0x0, 0x0, 0x0, 0x0, 0xf7, 0x0, 0xc8, 0x0, + 0x0, 0x0, 0x0, 0xf, 0x70, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf9, 0x44, 0x44, 0x44, 0x41, + 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0x60, + 0x0, + /* U+C6CC "워" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xe1, 0x0, 0x7, 0xdf, 0xd9, 0x10, 0x4, 0xf2, 0x0, 0xae, @@ -7603,6 +8125,23 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x4, 0xf2, 0x0, 0x0, 0x1f, 0x50, 0x0, 0x4, 0xf2, + /* U+C744 "을" */ + 0x0, 0x0, 0x2, 0x45, 0x53, 0x0, 0x0, 0x0, + 0x0, 0x5e, 0xfe, 0xde, 0xfe, 0x50, 0x0, 0x0, + 0xf, 0xa1, 0x0, 0x0, 0x9f, 0x0, 0x0, 0x1, + 0xf5, 0x0, 0x0, 0x4, 0xf2, 0x0, 0x0, 0xc, + 0xe9, 0x65, 0x68, 0xec, 0x0, 0x0, 0x0, 0x6, + 0xbd, 0xdd, 0xb6, 0x0, 0x0, 0x2, 0x22, 0x22, + 0x22, 0x22, 0x22, 0x22, 0x2, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xee, 0xee, 0xee, + 0xee, 0xc0, 0x0, 0x0, 0x4, 0x44, 0x44, 0x44, + 0xae, 0x0, 0x0, 0x0, 0x33, 0x33, 0x33, 0x39, + 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xfd, + 0x0, 0x0, 0x1, 0xf4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x60, + 0x0, 0x0, 0x33, 0x33, 0x33, 0x33, 0x31, 0x0, + /* U+C74C "음" */ 0x0, 0x0, 0x2, 0x45, 0x42, 0x0, 0x0, 0x0, 0x0, 0x3d, 0xfe, 0xde, 0xfe, 0x40, 0x0, 0x0, @@ -7651,19 +8190,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x7e, /* U+C778 "인" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x0, 0x2b, - 0xff, 0xc3, 0x0, 0x7, 0xe0, 0xe, 0xc5, 0x4a, - 0xf3, 0x0, 0x7e, 0x6, 0xf1, 0x0, 0xc, 0xa0, - 0x7, 0xe0, 0x9d, 0x0, 0x0, 0x9d, 0x0, 0x7e, - 0x8, 0xe0, 0x0, 0xa, 0xb0, 0x7, 0xe0, 0x3f, - 0x60, 0x3, 0xf7, 0x0, 0x7e, 0x0, 0x7f, 0xed, - 0xfa, 0x0, 0x7, 0xe0, 0x0, 0x26, 0x63, 0x0, - 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xe0, 0x0, 0x8, 0x40, 0x0, 0x0, 0x7e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x0, 0x3c, + 0xff, 0xd6, 0x0, 0x7, 0xe0, 0x2f, 0x92, 0x16, + 0xf5, 0x0, 0x7e, 0x7, 0xe0, 0x0, 0xb, 0xb0, + 0x7, 0xe0, 0x9d, 0x0, 0x0, 0x9c, 0x0, 0x7e, + 0x6, 0xf2, 0x0, 0xd, 0x90, 0x7, 0xe0, 0xc, + 0xe9, 0x8d, 0xe1, 0x0, 0x7e, 0x0, 0x5, 0x99, + 0x60, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7e, 0x0, 0x0, 0x84, 0x0, 0x0, 0x7, + 0xe0, 0x0, 0xe, 0x70, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, - 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe9, 0x33, - 0x33, 0x33, 0x30, 0x0, 0xe, 0xff, 0xff, 0xff, - 0xff, 0x40, + 0x93, 0x33, 0x33, 0x33, 0x0, 0x0, 0xef, 0xff, + 0xff, 0xff, 0xf4, /* U+C785 "입" */ 0x0, 0x2, 0x30, 0x0, 0x0, 0x6c, 0x5, 0xef, @@ -7679,20 +8217,36 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xa4, 0x44, 0x44, 0x9f, 0x0, 0xe, 0xff, 0xff, 0xff, 0xfe, + /* U+C7A0 "잠" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x40, 0x0, + 0xdf, 0xff, 0xff, 0xfe, 0x1, 0xf5, 0x0, 0x4, + 0x44, 0xbd, 0x44, 0x40, 0x1f, 0x50, 0x0, 0x0, + 0xc, 0xe0, 0x0, 0x1, 0xf8, 0x43, 0x0, 0x2, + 0xff, 0x40, 0x0, 0x1f, 0xff, 0xa0, 0x2, 0xdd, + 0xbe, 0x30, 0x1, 0xf5, 0x0, 0x8, 0xfd, 0x21, + 0xbf, 0x90, 0x1f, 0x50, 0x0, 0xb8, 0x0, 0x0, + 0x59, 0x1, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5, 0x10, 0x0, 0x0, 0x4f, 0xff, 0xff, + 0xff, 0xf5, 0x0, 0x0, 0x4, 0xf5, 0x44, 0x44, + 0x4f, 0x60, 0x0, 0x0, 0x4f, 0x20, 0x0, 0x0, + 0xf6, 0x0, 0x0, 0x4, 0xf2, 0x0, 0x0, 0xf, + 0x60, 0x0, 0x0, 0x4f, 0x54, 0x44, 0x45, 0xf6, + 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0x50, + 0x0, + /* U+C804 "전" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0x7, 0xcc, - 0xcc, 0xcc, 0xb0, 0x5, 0xf1, 0x48, 0x8c, 0xf8, - 0x87, 0x0, 0x5f, 0x10, 0x0, 0x8f, 0x0, 0x0, - 0x5, 0xf1, 0x0, 0xb, 0xf2, 0x1, 0xcc, 0xdf, - 0x10, 0x3, 0xfe, 0xb0, 0x17, 0x7a, 0xf1, 0x3, - 0xeb, 0x3f, 0xa0, 0x0, 0x5f, 0x17, 0xfb, 0x0, - 0x3e, 0xe0, 0x5, 0xf1, 0x57, 0x0, 0x0, 0x15, - 0x0, 0x5f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x5, - 0xf1, 0x0, 0x8, 0xc0, 0x0, 0x0, 0x4f, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0x8, 0xdd, + 0xdd, 0xdd, 0xc0, 0x5, 0xf1, 0x24, 0x4a, 0xf4, + 0x44, 0x0, 0x5f, 0x10, 0x0, 0x9f, 0x0, 0x3, + 0x37, 0xf1, 0x0, 0xe, 0xf6, 0x2, 0xff, 0xff, + 0x10, 0xb, 0xe8, 0xf4, 0x0, 0x5, 0xf1, 0x3d, + 0xe3, 0x8, 0xfa, 0x0, 0x5f, 0x17, 0x91, 0x0, + 0x3, 0x80, 0x5, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5f, 0x10, 0x0, 0x8c, 0x0, 0x0, 0x5, + 0xf1, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x4f, 0x10, 0x0, 0x9d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, - 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9e, 0x33, - 0x33, 0x33, 0x31, 0x0, 0x9, 0xff, 0xff, 0xff, - 0xff, 0x70, + 0xe3, 0x33, 0x33, 0x33, 0x10, 0x0, 0x9f, 0xff, + 0xff, 0xff, 0xf7, /* U+C811 "접" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x19, 0xff, @@ -7741,6 +8295,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x60, 0x0, + /* U+C8FC "주" */ + 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, + 0x1, 0x44, 0x47, 0xf7, 0x44, 0x41, 0x0, 0x0, + 0x0, 0x0, 0x6f, 0x60, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1d, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x1, + 0x7f, 0xc2, 0xcf, 0x71, 0x0, 0x0, 0x6, 0xfd, + 0x60, 0x0, 0x6d, 0xf6, 0x0, 0x0, 0x13, 0x0, + 0x0, 0x0, 0x3, 0x10, 0x0, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x40, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0x3, 0xf3, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, + 0x0, 0x0, + /* U+C911 "중" */ 0x0, 0x3, 0x33, 0x33, 0x33, 0x33, 0x10, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x0, @@ -7773,19 +8342,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x5, 0xf1, /* U+C9C4 "진" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x7, 0xcc, - 0xcc, 0xcc, 0xc0, 0x7, 0xe0, 0x58, 0x8b, 0xf8, - 0x88, 0x0, 0x7e, 0x0, 0x0, 0x8f, 0x0, 0x0, - 0x7, 0xe0, 0x0, 0xb, 0xf3, 0x0, 0x0, 0x7e, - 0x0, 0x3, 0xfe, 0xc0, 0x0, 0x7, 0xe0, 0x3, - 0xeb, 0x2f, 0xb1, 0x0, 0x7e, 0x7, 0xfb, 0x0, - 0x3d, 0xf2, 0x7, 0xe0, 0x56, 0x0, 0x0, 0x6, - 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xe0, 0x0, 0xc, 0x80, 0x0, 0x0, 0x7e, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x8, 0xdd, + 0xdd, 0xdd, 0xd1, 0x7, 0xe0, 0x34, 0x49, 0xf4, + 0x44, 0x0, 0x7e, 0x0, 0x0, 0x8f, 0x10, 0x0, + 0x7, 0xe0, 0x0, 0xe, 0xf7, 0x0, 0x0, 0x7e, + 0x0, 0xa, 0xe8, 0xf5, 0x0, 0x7, 0xe0, 0x4d, + 0xe3, 0x7, 0xfb, 0x10, 0x7e, 0x7, 0x91, 0x0, + 0x2, 0x90, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7e, 0x0, 0x0, 0xc8, 0x0, 0x0, 0x7, + 0xe0, 0x0, 0xd, 0x90, 0x0, 0x0, 0x7e, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, - 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0x33, - 0x33, 0x33, 0x31, 0x0, 0xd, 0xff, 0xff, 0xff, - 0xff, 0x60, + 0xa3, 0x33, 0x33, 0x33, 0x10, 0x0, 0xdf, 0xff, + 0xff, 0xff, 0xf6, /* U+CC3E "찾" */ 0x0, 0x5, 0xa0, 0x0, 0x0, 0xd4, 0x0, 0x0, @@ -7849,6 +8417,21 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x3, 0xdf, 0xfe, 0xff, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x24, 0x54, 0x20, 0x0, 0x0, + /* U+CE5C "친" */ + 0x0, 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6f, 0x0, 0x0, 0x7, 0x30, 0x68, 0x8b, 0xf8, + 0x88, 0x10, 0xe7, 0x8, 0xbb, 0xdf, 0xbb, 0xb1, + 0xe, 0x70, 0x0, 0x7, 0xf1, 0x0, 0x0, 0xe7, + 0x0, 0x0, 0xcf, 0x50, 0x0, 0xe, 0x70, 0x0, + 0x6f, 0xae, 0x20, 0x0, 0xe7, 0x0, 0x7f, 0x70, + 0xae, 0x50, 0xe, 0x70, 0xaf, 0x50, 0x0, 0x7f, + 0x40, 0xe7, 0x4, 0x10, 0x0, 0x0, 0x10, 0xe, + 0x70, 0x0, 0xc, 0x40, 0x0, 0x0, 0xe7, 0x0, + 0x0, 0xf6, 0x0, 0x0, 0xe, 0x70, 0x0, 0xf, + 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x33, + 0x33, 0x33, 0x31, 0x0, 0xf, 0xff, 0xff, 0xff, + 0xff, 0x60, + /* U+CE74 "카" */ 0x0, 0x0, 0x0, 0x0, 0x1, 0xe4, 0x0, 0x25, 0x55, 0x55, 0x51, 0x1, 0xf5, 0x0, 0x7e, 0xee, @@ -7865,19 +8448,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf5, 0x0, /* U+CE94 "캔" */ - 0x0, 0x0, 0x0, 0x2, 0x70, 0x1a, 0x17, 0xcc, - 0xcc, 0xc0, 0x4f, 0x13, 0xf3, 0x58, 0x88, 0xaf, - 0x4, 0xf1, 0x3f, 0x30, 0x0, 0x6, 0xf0, 0x4f, - 0x13, 0xf3, 0x9c, 0xcc, 0xed, 0x4, 0xf9, 0xaf, - 0x35, 0x77, 0x8f, 0x80, 0x4f, 0xbc, 0xf3, 0x0, - 0xb, 0xe1, 0x4, 0xf1, 0x3f, 0x30, 0x3c, 0xf3, - 0x0, 0x4f, 0x13, 0xf3, 0x8f, 0xc2, 0x0, 0x4, - 0xf1, 0x3f, 0x33, 0x40, 0x0, 0x0, 0x4f, 0x13, - 0xf3, 0x0, 0x6, 0xc0, 0x4, 0xd1, 0x2f, 0x20, + 0x0, 0x0, 0x0, 0x2, 0x70, 0x1a, 0x18, 0xdd, + 0xdd, 0xd1, 0x4f, 0x13, 0xf3, 0x24, 0x44, 0x8f, + 0x4, 0xf1, 0x3f, 0x32, 0x22, 0x28, 0xe0, 0x4f, + 0x13, 0xf3, 0xbf, 0xff, 0xfb, 0x4, 0xff, 0xff, + 0x30, 0x0, 0x5f, 0x40, 0x4f, 0x35, 0xf3, 0x0, + 0x8f, 0x70, 0x4, 0xf1, 0x3f, 0x36, 0xed, 0x40, + 0x0, 0x4f, 0x13, 0xf3, 0x45, 0x0, 0x0, 0x4, + 0xf1, 0x3f, 0x30, 0x0, 0x6c, 0x0, 0x4f, 0x13, + 0xf3, 0x0, 0x7, 0xe0, 0x3, 0xb1, 0x2f, 0x20, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x33, - 0x33, 0x33, 0x32, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xff, 0xa0, + 0xf3, 0x33, 0x33, 0x33, 0x20, 0x0, 0x7f, 0xff, + 0xff, 0xff, 0xfa, /* U+CF1C "켜" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x28, 0x88, @@ -7943,9 +8525,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd1, 0x4f, 0x0, 0x0, 0x44, 0x44, 0x44, 0x44, 0x40, 0x0, 0xe, 0xfe, 0xee, 0xee, 0xff, 0x10, 0x0, 0xe7, 0x0, 0x0, 0x5, 0xf1, 0x0, 0xe, - 0x70, 0x0, 0x0, 0x5f, 0x10, 0x0, 0xe9, 0x33, - 0x33, 0x37, 0xf1, 0x0, 0xe, 0xff, 0xff, 0xff, - 0xff, 0x10, + 0x70, 0x0, 0x0, 0x5f, 0x10, 0x0, 0xea, 0x44, + 0x44, 0x48, 0xf1, 0x0, 0xe, 0xff, 0xff, 0xff, + 0xff, 0x0, /* U+D2B8 "트" */ 0x0, 0x2d, 0xdd, 0xdd, 0xdd, 0xdd, 0x30, 0x0, @@ -8011,19 +8593,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { /* U+D55C "한" */ 0x0, 0x0, 0x86, 0x0, 0x0, 0xa, 0x30, 0x0, - 0x0, 0xc, 0xa0, 0x0, 0x1, 0xf5, 0x0, 0x4f, - 0xff, 0xff, 0xff, 0xf3, 0x1f, 0x50, 0x0, 0x33, - 0x33, 0x43, 0x33, 0x1, 0xf5, 0x0, 0x0, 0x4d, - 0xff, 0xd5, 0x0, 0x1f, 0x50, 0x0, 0x2f, 0x92, - 0x28, 0xf2, 0x1, 0xfe, 0xea, 0x5, 0xf0, 0x0, - 0xe, 0x60, 0x1f, 0x96, 0x40, 0x4f, 0x20, 0x1, - 0xf5, 0x1, 0xf5, 0x0, 0x0, 0xcf, 0xaa, 0xec, - 0x0, 0x1f, 0x50, 0x0, 0x0, 0x58, 0x96, 0x0, - 0x1, 0xf5, 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, + 0x33, 0x3d, 0xb3, 0x33, 0x1, 0xf5, 0x0, 0x4e, + 0xee, 0xee, 0xee, 0xe2, 0x1f, 0x50, 0x0, 0x0, + 0x36, 0x63, 0x0, 0x1, 0xf5, 0x0, 0x0, 0xaf, + 0xbb, 0xfb, 0x0, 0x1f, 0x95, 0x40, 0x4f, 0x20, + 0x1, 0xf5, 0x1, 0xfd, 0xc8, 0x5, 0xf0, 0x0, + 0xf, 0x60, 0x1f, 0x50, 0x0, 0x1d, 0xc6, 0x6b, + 0xe1, 0x1, 0xf5, 0x0, 0x0, 0x17, 0xaa, 0x71, + 0x0, 0x1f, 0x50, 0x0, 0x0, 0x14, 0x0, 0x0, + 0x1, 0xf5, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0xf, 0x50, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x5f, 0x43, 0x33, 0x33, 0x33, - 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xd0, + 0x0, 0x0, 0x0, 0x5, 0xf4, 0x33, 0x33, 0x33, + 0x30, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xfd, 0x0, /* U+D560 "할" */ @@ -8135,13 +8716,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xc, 0x90, 0xf, 0x60, 0x0, 0xd, 0xa0, 0x2, 0xe7, 0x0, 0xff, 0xfb, 0x0, 0x4e, 0xed, 0xfc, 0x0, 0xf, 0x83, 0x20, 0x0, 0x9, 0xf2, - 0x0, 0x0, 0xf6, 0x0, 0x24, 0x44, 0x9f, 0x67, - 0x89, 0xf, 0x60, 0x8, 0xff, 0xff, 0xed, 0xcb, - 0x90, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0x60, 0x0, 0x0, 0x4d, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x5f, 0x43, 0x33, 0x33, 0x32, - 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x0, 0x0, 0xf6, 0x0, 0x24, 0x45, 0xaf, 0x67, + 0x89, 0xf, 0x60, 0x3, 0x77, 0x77, 0x65, 0x54, + 0x30, 0xf6, 0x0, 0x0, 0x4, 0xd0, 0x0, 0x0, + 0xf, 0x60, 0x0, 0x0, 0x5f, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x5, 0xf4, 0x33, 0x33, 0x33, + 0x20, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xfc, 0x0, /* U+D65C "활" */ @@ -8175,9 +8755,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xee, 0xee, 0x20, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0, 0x0, + /* U+FF01 "!" */ + 0x1, 0x6, 0xe0, 0x6d, 0x6, 0xd0, 0x5d, 0x5, + 0xd0, 0x5c, 0x5, 0xc0, 0x4c, 0x0, 0x20, 0x9e, + 0x2b, 0xf2, 0x0, 0x0, + /* U+FF0C "," */ 0x0, 0x0, 0x4, 0xf0, 0x8, 0xc0, 0xe, 0x50, 0x6c, 0x0, 0x11, 0x0, @@ -8404,481 +8988,524 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { {.bitmap_index = 9362, .adv_w = 123, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, {.bitmap_index = 9404, .adv_w = 123, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, {.bitmap_index = 9446, .adv_w = 87, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 9482, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 9530, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 9578, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 9626, .adv_w = 169, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 9687, .adv_w = 123, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 9729, .adv_w = 86, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 9771, .adv_w = 70, .box_w = 2, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 9782, .adv_w = 171, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 9843, .adv_w = 159, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 9893, .adv_w = 159, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 9937, .adv_w = 127, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 9976, .adv_w = 145, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 10020, .adv_w = 189, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10075, .adv_w = 212, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10136, .adv_w = 181, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10186, .adv_w = 190, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10241, .adv_w = 181, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10291, .adv_w = 153, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10335, .adv_w = 153, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10379, .adv_w = 135, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 10429, .adv_w = 167, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10473, .adv_w = 157, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 10514, .adv_w = 158, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10566, .adv_w = 148, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10602, .adv_w = 98, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10625, .adv_w = 156, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 10685, .adv_w = 148, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 10726, .adv_w = 188, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 10780, .adv_w = 124, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 10812, .adv_w = 165, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10848, .adv_w = 165, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10900, .adv_w = 128, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 10932, .adv_w = 151, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 10968, .adv_w = 188, .box_w = 10, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11013, .adv_w = 164, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11049, .adv_w = 158, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11090, .adv_w = 164, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11126, .adv_w = 163, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 11180, .adv_w = 127, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11216, .adv_w = 116, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11248, .adv_w = 135, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 11302, .adv_w = 230, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 11414, .adv_w = 132, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11455, .adv_w = 168, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 11515, .adv_w = 155, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11551, .adv_w = 229, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11605, .adv_w = 201, .box_w = 11, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11655, .adv_w = 146, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11691, .adv_w = 214, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11745, .adv_w = 134, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11777, .adv_w = 69, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11789, .adv_w = 69, .box_w = 6, .box_h = 12, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 11825, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11866, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11902, .adv_w = 165, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 11938, .adv_w = 126, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 11970, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12006, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12042, .adv_w = 142, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12078, .adv_w = 226, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12141, .adv_w = 165, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 12177, .adv_w = 166, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 12213, .adv_w = 156, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12254, .adv_w = 162, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12295, .adv_w = 155, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12340, .adv_w = 161, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12381, .adv_w = 161, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12435, .adv_w = 163, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 12471, .adv_w = 179, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12516, .adv_w = 179, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12576, .adv_w = 164, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12617, .adv_w = 159, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12658, .adv_w = 149, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 12690, .adv_w = 114, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12722, .adv_w = 149, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12758, .adv_w = 110, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12785, .adv_w = 150, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12830, .adv_w = 158, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12871, .adv_w = 149, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 12907, .adv_w = 150, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 12952, .adv_w = 98, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 12976, .adv_w = 0, .box_w = 7, .box_h = 3, .ofs_x = -6, .ofs_y = 10}, - {.bitmap_index = 12987, .adv_w = 100, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13010, .adv_w = 100, .box_w = 10, .box_h = 13, .ofs_x = -5, .ofs_y = 0}, - {.bitmap_index = 13075, .adv_w = 0, .box_w = 8, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, - {.bitmap_index = 13087, .adv_w = 0, .box_w = 8, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, - {.bitmap_index = 13099, .adv_w = 0, .box_w = 9, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, - {.bitmap_index = 13113, .adv_w = 0, .box_w = 8, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, - {.bitmap_index = 13125, .adv_w = 0, .box_w = 4, .box_h = 4, .ofs_x = -5, .ofs_y = -4}, - {.bitmap_index = 13133, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = -4}, - {.bitmap_index = 13142, .adv_w = 79, .box_w = 4, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 13160, .adv_w = 154, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 13201, .adv_w = 91, .box_w = 7, .box_h = 14, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 13250, .adv_w = 91, .box_w = 7, .box_h = 14, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 13299, .adv_w = 91, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13341, .adv_w = 0, .box_w = 7, .box_h = 4, .ofs_x = -8, .ofs_y = 10}, - {.bitmap_index = 13355, .adv_w = 0, .box_w = 2, .box_h = 3, .ofs_x = -3, .ofs_y = 10}, - {.bitmap_index = 13358, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -6, .ofs_y = 10}, - {.bitmap_index = 13367, .adv_w = 0, .box_w = 5, .box_h = 4, .ofs_x = -5, .ofs_y = 10}, - {.bitmap_index = 13377, .adv_w = 157, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 13431, .adv_w = 157, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13490, .adv_w = 157, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13560, .adv_w = 157, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13623, .adv_w = 157, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 13691, .adv_w = 157, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13754, .adv_w = 148, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13813, .adv_w = 142, .box_w = 8, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 13869, .adv_w = 148, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 13939, .adv_w = 148, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14007, .adv_w = 148, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 14075, .adv_w = 69, .box_w = 2, .box_h = 15, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 14090, .adv_w = 158, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14160, .adv_w = 158, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14223, .adv_w = 158, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14291, .adv_w = 158, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 14359, .adv_w = 165, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14425, .adv_w = 165, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14491, .adv_w = 165, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14563, .adv_w = 165, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 14635, .adv_w = 157, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 14683, .adv_w = 169, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 14755, .adv_w = 252, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 14768, .adv_w = 252, .box_w = 6, .box_h = 5, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 14783, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 14867, .adv_w = 252, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 14950, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 15055, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 15153, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 15265, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 15349, .adv_w = 252, .box_w = 9, .box_h = 15, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 15417, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 15501, .adv_w = 252, .box_w = 11, .box_h = 13, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 15573, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 15678, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 15790, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 15888, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 15986, .adv_w = 252, .box_w = 11, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 16041, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 16132, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 16230, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 16328, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 16419, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 16503, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 16594, .adv_w = 252, .box_w = 10, .box_h = 15, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 16669, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 16781, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 16872, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 16970, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 17061, .adv_w = 252, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 17122, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 17213, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 17297, .adv_w = 252, .box_w = 14, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17374, .adv_w = 252, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 17440, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 17538, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 17643, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 17741, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 17854, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 17959, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 18072, .adv_w = 252, .box_w = 13, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 18157, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 18255, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 18339, .adv_w = 252, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 18424, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 18522, .adv_w = 252, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 18583, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 18681, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 18794, .adv_w = 252, .box_w = 9, .box_h = 14, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 18857, .adv_w = 252, .box_w = 10, .box_h = 14, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 18927, .adv_w = 252, .box_w = 14, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 19004, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 19102, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19200, .adv_w = 252, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 19272, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 19385, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 19498, .adv_w = 252, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19594, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 19678, .adv_w = 252, .box_w = 11, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 19750, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 19841, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 19925, .adv_w = 252, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 19991, .adv_w = 252, .box_w = 12, .box_h = 9, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 20045, .adv_w = 252, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 20095, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 20179, .adv_w = 252, .box_w = 9, .box_h = 14, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 20242, .adv_w = 252, .box_w = 16, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 20346, .adv_w = 252, .box_w = 12, .box_h = 13, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 20424, .adv_w = 252, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 20496, .adv_w = 252, .box_w = 12, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 20574, .adv_w = 252, .box_w = 13, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 20659, .adv_w = 252, .box_w = 13, .box_h = 3, .ofs_x = 1, .ofs_y = 4}, - {.bitmap_index = 20679, .adv_w = 252, .box_w = 15, .box_h = 2, .ofs_x = 0, .ofs_y = 5}, - {.bitmap_index = 20694, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 20799, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 20904, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 21002, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 21093, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 21198, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 21326, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 21446, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 21574, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 21694, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 21807, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 21927, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 22047, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 22159, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 22257, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 22370, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 22490, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 22603, .adv_w = 252, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 22715, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 22835, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 22955, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 23075, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 23188, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 23308, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 23421, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 23541, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 23639, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 23752, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 23872, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 23985, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 24098, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 24226, .adv_w = 252, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 24330, .adv_w = 252, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 24442, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 24562, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 24667, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 24787, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 24915, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25043, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25156, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25269, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 25389, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25502, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25622, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25735, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25855, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 25983, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 26088, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 26201, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 26299, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 26419, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 26532, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 26645, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 26750, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 26863, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 26983, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27111, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27231, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27351, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27471, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27591, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27719, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27839, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 27952, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28065, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28178, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28291, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28411, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28524, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28644, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28757, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 28870, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 28990, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 29118, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 29238, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 29366, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 29471, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 29591, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 29711, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 29824, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 29944, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 30064, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 30177, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 30305, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 30418, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 30538, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 30666, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 30778, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 30906, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 31026, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 31154, .adv_w = 252, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 31290, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 31418, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 31516, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 31629, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 31742, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 31870, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 31983, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32096, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32209, .adv_w = 252, .box_w = 15, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 32337, .adv_w = 252, .box_w = 15, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 32465, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32578, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32698, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32811, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32924, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 33044, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 33164, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 33292, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 33412, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 33540, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 33638, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 33743, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 33855, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 33975, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 34088, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 34216, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 34329, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 34442, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 34562, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 34682, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 34802, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 34915, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35035, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35148, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35261, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35381, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35494, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35614, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 35726, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35846, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35966, .adv_w = 252, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 36070, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 36198, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 36311, .adv_w = 252, .box_w = 14, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 36430, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 36543, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 36663, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 36776, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 36904, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37024, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37152, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37272, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37400, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37528, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37656, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37784, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37904, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38017, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38137, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38250, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 38370, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38490, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38610, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38738, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 38851, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38979, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39099, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39219, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39339, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 39452, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39565, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39685, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39798, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39918, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 40023, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 40135, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 40240, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 40368, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 40488, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 40586, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 40677, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 40775, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 40880, .adv_w = 252, .box_w = 13, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 40991, .adv_w = 252, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 41095, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 41200, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 41313, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 41426, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 41539, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 41652, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 41750, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 41855, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 41960, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 42044, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 42148, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 42252, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 42342, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 42455, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 42560, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 42650, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 42734, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 42824, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 42922, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 43013, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 43126, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 43246, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 43330, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 43428, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 43533, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 43624, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 43714, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 43818, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 43938, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 44028, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 44148, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 44239, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 44329, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 44442, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 44562, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 44682, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 44766, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 44878, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 44968, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 45059, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 45143, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 45233, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 45353, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 45466, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 45550, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 45655, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 45768, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 45888, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 45986, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 46084, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 46188, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 46300, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 46398, .adv_w = 241, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 46496, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 46616, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 46736, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 46849, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 46939, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 47059, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 47150, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 47262, .adv_w = 241, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 47352, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 47464, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 47562, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 47660, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 47750, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 47863, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 47953, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 48073, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 48171, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 48291, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 48411, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 48495, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 48593, .adv_w = 241, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 48683, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 48781, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 48879, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 48983, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 49103, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 49223, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 49314, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 49412, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 49517, .adv_w = 241, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 49615, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 49706, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 49826, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 49924, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 50022, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 50106, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 50196, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 50280, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 50364, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 50462, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 50552, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 50665, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 50763, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 50868, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 50981, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 51101, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 51214, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 51327, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 51447, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 51552, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 51672, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 51785, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 51905, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 52018, .adv_w = 252, .box_w = 4, .box_h = 6, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 52030, .adv_w = 252, .box_w = 4, .box_h = 10, .ofs_x = 2, .ofs_y = -1} + {.bitmap_index = 9482, .adv_w = 157, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 9534, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 9582, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 9630, .adv_w = 130, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 9678, .adv_w = 169, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 9739, .adv_w = 123, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 9781, .adv_w = 86, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 9823, .adv_w = 70, .box_w = 2, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 9834, .adv_w = 171, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 9895, .adv_w = 159, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 9945, .adv_w = 159, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 9989, .adv_w = 127, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10028, .adv_w = 145, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 10072, .adv_w = 189, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10127, .adv_w = 212, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10188, .adv_w = 181, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10238, .adv_w = 190, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10293, .adv_w = 181, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10343, .adv_w = 153, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10387, .adv_w = 153, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10431, .adv_w = 135, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 10481, .adv_w = 167, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10525, .adv_w = 157, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 10566, .adv_w = 158, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10618, .adv_w = 148, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10654, .adv_w = 98, .box_w = 5, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10677, .adv_w = 156, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 10737, .adv_w = 148, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 10778, .adv_w = 188, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 10832, .adv_w = 124, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 10864, .adv_w = 165, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10900, .adv_w = 165, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10952, .adv_w = 128, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 10984, .adv_w = 151, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11020, .adv_w = 188, .box_w = 10, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11065, .adv_w = 164, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11101, .adv_w = 158, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11142, .adv_w = 164, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11178, .adv_w = 163, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 11232, .adv_w = 127, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11268, .adv_w = 116, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11300, .adv_w = 135, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 11354, .adv_w = 230, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 11466, .adv_w = 132, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11507, .adv_w = 168, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 11567, .adv_w = 155, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11603, .adv_w = 229, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11657, .adv_w = 201, .box_w = 11, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11707, .adv_w = 146, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11743, .adv_w = 214, .box_w = 12, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11797, .adv_w = 134, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11829, .adv_w = 69, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11841, .adv_w = 69, .box_w = 6, .box_h = 12, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 11877, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11918, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 11954, .adv_w = 165, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 11990, .adv_w = 126, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12022, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12058, .adv_w = 147, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12099, .adv_w = 139, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12135, .adv_w = 142, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12171, .adv_w = 226, .box_w = 14, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12234, .adv_w = 165, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 12270, .adv_w = 166, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 12306, .adv_w = 156, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12347, .adv_w = 162, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12388, .adv_w = 155, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12433, .adv_w = 161, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12474, .adv_w = 161, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12528, .adv_w = 163, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 12564, .adv_w = 179, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12609, .adv_w = 179, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12669, .adv_w = 164, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12710, .adv_w = 159, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12751, .adv_w = 149, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 12783, .adv_w = 114, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12815, .adv_w = 149, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12851, .adv_w = 110, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12878, .adv_w = 150, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12923, .adv_w = 158, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 12964, .adv_w = 149, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 13000, .adv_w = 150, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 13045, .adv_w = 98, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13069, .adv_w = 0, .box_w = 7, .box_h = 3, .ofs_x = -6, .ofs_y = 10}, + {.bitmap_index = 13080, .adv_w = 100, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13103, .adv_w = 100, .box_w = 10, .box_h = 13, .ofs_x = -5, .ofs_y = 0}, + {.bitmap_index = 13168, .adv_w = 0, .box_w = 8, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, + {.bitmap_index = 13180, .adv_w = 0, .box_w = 8, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, + {.bitmap_index = 13192, .adv_w = 0, .box_w = 9, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, + {.bitmap_index = 13206, .adv_w = 0, .box_w = 8, .box_h = 3, .ofs_x = -9, .ofs_y = 10}, + {.bitmap_index = 13218, .adv_w = 0, .box_w = 4, .box_h = 4, .ofs_x = -5, .ofs_y = -4}, + {.bitmap_index = 13226, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -7, .ofs_y = -4}, + {.bitmap_index = 13235, .adv_w = 79, .box_w = 4, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 13253, .adv_w = 154, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 13294, .adv_w = 91, .box_w = 7, .box_h = 14, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 13343, .adv_w = 91, .box_w = 7, .box_h = 14, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 13392, .adv_w = 91, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13434, .adv_w = 0, .box_w = 7, .box_h = 4, .ofs_x = -8, .ofs_y = 10}, + {.bitmap_index = 13448, .adv_w = 0, .box_w = 2, .box_h = 3, .ofs_x = -3, .ofs_y = 10}, + {.bitmap_index = 13451, .adv_w = 0, .box_w = 6, .box_h = 3, .ofs_x = -6, .ofs_y = 10}, + {.bitmap_index = 13460, .adv_w = 0, .box_w = 5, .box_h = 4, .ofs_x = -5, .ofs_y = 10}, + {.bitmap_index = 13470, .adv_w = 157, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 13524, .adv_w = 157, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13583, .adv_w = 157, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13653, .adv_w = 157, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13716, .adv_w = 157, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 13784, .adv_w = 157, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13847, .adv_w = 148, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 13906, .adv_w = 142, .box_w = 8, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 13962, .adv_w = 148, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14032, .adv_w = 148, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14100, .adv_w = 148, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 14168, .adv_w = 69, .box_w = 2, .box_h = 15, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 14183, .adv_w = 158, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14253, .adv_w = 158, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14316, .adv_w = 158, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14384, .adv_w = 158, .box_w = 9, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 14452, .adv_w = 165, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14518, .adv_w = 165, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14584, .adv_w = 165, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14656, .adv_w = 165, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 14728, .adv_w = 157, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 14776, .adv_w = 157, .box_w = 8, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 14828, .adv_w = 169, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 14900, .adv_w = 252, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 14913, .adv_w = 252, .box_w = 6, .box_h = 4, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 14925, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 15009, .adv_w = 252, .box_w = 11, .box_h = 15, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 15092, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 15197, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 15295, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 15393, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 15505, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 15589, .adv_w = 252, .box_w = 9, .box_h = 15, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 15657, .adv_w = 252, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 15729, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 15813, .adv_w = 252, .box_w = 11, .box_h = 13, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 15885, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 15990, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 16102, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 16200, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 16298, .adv_w = 252, .box_w = 12, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 16376, .adv_w = 252, .box_w = 11, .box_h = 10, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 16431, .adv_w = 252, .box_w = 14, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16508, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 16599, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 16697, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 16795, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 16886, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 16970, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 17075, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 17159, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 17257, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 17348, .adv_w = 252, .box_w = 10, .box_h = 15, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 17423, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 17535, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 17626, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 17724, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 17815, .adv_w = 252, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 17876, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 17967, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 18051, .adv_w = 252, .box_w = 14, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18128, .adv_w = 252, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 18194, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 18292, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 18397, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 18495, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 18608, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 18713, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 18826, .adv_w = 252, .box_w = 13, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 18911, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 19009, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 19093, .adv_w = 252, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 19178, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 19276, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 19396, .adv_w = 252, .box_w = 11, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 19457, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 19555, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 19668, .adv_w = 252, .box_w = 9, .box_h = 14, .ofs_x = 5, .ofs_y = -1}, + {.bitmap_index = 19731, .adv_w = 252, .box_w = 10, .box_h = 14, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 19801, .adv_w = 252, .box_w = 14, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 19878, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 19976, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 20074, .adv_w = 252, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 20146, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 20259, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 20372, .adv_w = 252, .box_w = 16, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 20468, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 20552, .adv_w = 252, .box_w = 11, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 20624, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 20715, .adv_w = 252, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 20799, .adv_w = 252, .box_w = 12, .box_h = 11, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 20865, .adv_w = 252, .box_w = 12, .box_h = 9, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 20919, .adv_w = 252, .box_w = 10, .box_h = 10, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 20969, .adv_w = 252, .box_w = 12, .box_h = 14, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 21053, .adv_w = 252, .box_w = 9, .box_h = 14, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 21116, .adv_w = 252, .box_w = 16, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 21220, .adv_w = 252, .box_w = 12, .box_h = 13, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 21298, .adv_w = 252, .box_w = 12, .box_h = 12, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 21370, .adv_w = 252, .box_w = 12, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 21448, .adv_w = 252, .box_w = 13, .box_h = 13, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 21533, .adv_w = 252, .box_w = 13, .box_h = 3, .ofs_x = 1, .ofs_y = 4}, + {.bitmap_index = 21553, .adv_w = 252, .box_w = 15, .box_h = 2, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 21568, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 21666, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 21764, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 21862, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 21953, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 22058, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 22178, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 22306, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 22418, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 22538, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 22658, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 22778, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 22891, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 23011, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 23131, .adv_w = 252, .box_w = 16, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 23235, .adv_w = 252, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 23326, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 23439, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 23552, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 23665, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 23770, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 23883, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 24003, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 24123, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 24243, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 24356, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 24476, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 24589, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 24717, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 24837, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 24935, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 25040, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 25153, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 25258, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 25363, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 25483, .adv_w = 252, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 25587, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 25692, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 25812, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 25910, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 26023, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26143, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 26263, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26376, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26489, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26602, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26715, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26828, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26948, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 27061, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 27189, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 27317, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 27422, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 27535, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 27633, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 27753, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 27866, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 27971, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 28076, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 28189, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 28302, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 28430, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 28550, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 28670, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 28790, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 28910, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 29038, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 29158, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 29263, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 29376, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 29489, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 29594, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 29699, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 29819, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 29924, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 30036, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 30149, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 30254, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 30367, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 30495, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 30615, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 30735, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 30840, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 30960, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 31080, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 31193, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 31305, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 31417, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 31522, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 31620, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 31740, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 31853, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 31973, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 32101, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 32213, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 32333, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 32453, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 32581, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 32709, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 32837, .adv_w = 252, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 32935, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33048, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 33153, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33281, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33394, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33507, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33620, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33740, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33860, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33980, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34093, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34213, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34326, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34439, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34559, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34679, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34799, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34919, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 35047, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 35167, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 35280, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 35378, .adv_w = 252, .box_w = 14, .box_h = 15, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 35483, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 35595, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 35715, .adv_w = 252, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 35827, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 35932, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36052, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36165, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36278, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36391, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36511, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36631, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36744, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 36864, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 36969, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 37082, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 37202, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 37307, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 37427, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 37539, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 37651, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 37771, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 37869, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 37989, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 38102, .adv_w = 252, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 38214, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 38319, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 38432, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 38552, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 38665, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 38785, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 38905, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39033, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 39145, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 39265, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39393, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39521, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39649, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39769, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39889, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 39994, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 40114, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 40227, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 40347, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 40459, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 40579, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 40707, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 40820, .adv_w = 252, .box_w = 16, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 40948, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 41068, .adv_w = 252, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 41204, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 41324, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 41444, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 41557, .adv_w = 252, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 41677, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 41790, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 41910, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 42023, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 42143, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 42256, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 42376, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 42496, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 42601, .adv_w = 252, .box_w = 16, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 42713, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 42818, .adv_w = 252, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 42938, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 43051, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 43142, .adv_w = 252, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 43227, .adv_w = 252, .box_w = 14, .box_h = 13, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 43318, .adv_w = 252, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 43416, .adv_w = 252, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 43520, .adv_w = 252, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 43618, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 43723, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 43836, .adv_w = 252, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 43949, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 44054, .adv_w = 252, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 44159, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 44257, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 44355, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 44460, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 44544, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 44635, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 44739, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 44843, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 44933, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 45046, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 45151, .adv_w = 241, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 45249, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 45339, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 45423, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 45513, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 45611, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 45702, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 45806, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 45919, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 46039, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 46123, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 46221, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 46326, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 46417, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 46507, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 46611, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 46731, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 46821, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 46941, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 47045, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 47136, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 47220, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 47310, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 47415, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 47535, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 47655, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 47739, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 47851, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 47941, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 48053, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 48144, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 48228, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 48318, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 48438, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 48543, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 48627, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 48732, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 48845, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 48965, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 49063, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 49161, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 49265, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 49377, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 49475, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 49580, .adv_w = 241, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 49678, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 49798, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 49918, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 50023, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 50113, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 50233, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 50324, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 50436, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 50534, .adv_w = 241, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 50624, .adv_w = 241, .box_w = 14, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 50736, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 50834, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 50925, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 51015, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 51120, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 51210, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 51330, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 51443, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 51541, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 51661, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 51781, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 51901, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 51985, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 52076, .adv_w = 241, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 52166, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 52279, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 52370, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 52468, .adv_w = 241, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 52572, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 52692, .adv_w = 241, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 52790, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 52910, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 53001, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 53092, .adv_w = 241, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 53197, .adv_w = 241, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 53295, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 53386, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 53506, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 53604, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 53702, .adv_w = 241, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 53793, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 53877, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 53967, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 54051, .adv_w = 241, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 54135, .adv_w = 241, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 54233, .adv_w = 241, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 54323, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 54436, .adv_w = 241, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 54534, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 54639, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 54744, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 54864, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 54977, .adv_w = 241, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 55090, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 55210, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 55315, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 55435, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 55540, .adv_w = 241, .box_w = 15, .box_h = 16, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 55660, .adv_w = 241, .box_w = 15, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 55765, .adv_w = 252, .box_w = 3, .box_h = 13, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 55785, .adv_w = 252, .box_w = 4, .box_h = 6, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 55797, .adv_w = 252, .box_w = 4, .box_h = 10, .ofs_x = 2, .ofs_y = -1} }; /*--------------------- @@ -8888,66 +9515,72 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { static const uint16_t unicode_list_2[] = { 0x0, 0x2, 0x4, 0x9, 0xa, 0xd, 0xe, 0x16, 0x18, 0x1c, 0x2e, 0x3e, 0x3f, 0x56, 0x58, 0x5b, - 0x5c, 0x5e, 0x62, 0x77, 0x79, 0x7b, 0xad, 0x116, - 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, 0x315, - 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x324 + 0x5c, 0x5e, 0x62, 0x6c, 0x77, 0x79, 0x7b, 0xad, + 0x116, 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, + 0x315, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, + 0x324 }; static const uint16_t unicode_list_4[] = { 0x0, 0x1, 0x3, 0x4, 0xb, 0xc, 0x9b6, 0x9b7, - 0x9b9, 0x9bc, 0x9bd, 0x9bf, 0x9c0, 0x9c8, 0x9c9, 0x9ca, - 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, 0x9d4, - 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, 0x9e0, - 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, - 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, 0x9f8, - 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, 0x1a5a, - 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, 0x1a7c, - 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, - 0x1a98, 0x1a9a, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, 0x2bfb, 0x2bfd, - 0x2bff, 0x2c01, 0x2c02, 0x2c04, 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, - 0x2c14, 0x2c15, 0x2c18, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c33, - 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, 0x2c59, - 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, 0x2c6a, - 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c78, 0x2c7b, - 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, 0x2c8a, 0x2c8b, - 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, 0x2c98, 0x2c9a, - 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, 0x2ca4, 0x2ca8, - 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, 0x4aef, 0x4b03, - 0x4b96, 0x4c4e, 0x4cfa, 0x4cfd, 0x4d1a, 0x4d28, 0x4d42, 0x4daf, - 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, - 0x4efc, 0x4f16, 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, - 0x5032, 0x5082, 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, - 0x54dc, 0x54e6, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, - 0x57c0, 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, - 0x5b3a, 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, + 0x9b9, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c8, 0x9c9, + 0x9ca, 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, + 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, + 0x9e0, 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, + 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, + 0x9f8, 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, + 0x1a5a, 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, + 0x1a7c, 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, + 0x1a94, 0x1a98, 0x1a9a, 0x1a9c, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, + 0x2bfb, 0x2bfd, 0x2bff, 0x2c00, 0x2c01, 0x2c02, 0x2c04, 0x2c08, + 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, 0x2c14, 0x2c15, 0x2c16, 0x2c18, + 0x2c19, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c23, 0x2c24, 0x2c33, + 0x2c34, 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, + 0x2c59, 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, + 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c75, + 0x2c78, 0x2c7b, 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, + 0x2c8a, 0x2c8b, 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, + 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, + 0x2ca4, 0x2ca8, 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, + 0x4aef, 0x4b03, 0x4b15, 0x4b96, 0x4bce, 0x4c4e, 0x4cfa, 0x4cfd, + 0x4d1a, 0x4d28, 0x4d42, 0x4daf, 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, + 0x4e55, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, 0x4efc, 0x4f16, 0x4f80, + 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, 0x5032, 0x5082, + 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, 0x54dc, 0x54e6, + 0x5532, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, 0x57c0, + 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, 0x5b3a, + 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, 0x5dc6, 0x5e00, 0x5e20, 0x5e33, 0x5ef4, 0x5f17, 0x5f38, 0x5f57, 0x5f5a, 0x5f84, 0x5f87, 0x5f90, 0x610c, 0x6165, 0x6195, 0x61ab, 0x61f7, - 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c2, 0x62d4, 0x62e1, 0x62ef, - 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, 0x688a, - 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a96, 0x6ab4, - 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, 0x6e6b, 0x6e75, - 0x70dd, 0x70ea, 0x7230, 0x7231, 0x746f, 0x7587, 0x75c2, 0x76fe, - 0x7709, 0x78b0, 0x78cf, 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, - 0x7967, 0x7a5c, 0x7a79, 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, - 0x7cb2, 0x8401, 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, - 0x8626, 0x8642, 0x8659, 0x865f, 0x8680, 0x871b, 0x8773, 0x8774, - 0x878a, 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x893a, - 0x8968, 0x89a4, 0x8b90, 0x8b93, 0x8bb6, 0x8bd8, 0x8d02, 0x8d82, - 0x8d84, 0x8ee4, 0x90ce, 0x913e, 0x9140, 0x9148, 0x9191, 0x91a2, - 0x91a3, 0x92b0, 0x930e, 0x9311, 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, - 0xa7c5, 0xa825, 0xa865, 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa9ad, - 0xa9e5, 0xabf9, 0xac4d, 0xacd9, 0xae49, 0xae5a, 0xae7d, 0xae99, - 0xaeaa, 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb3bd, - 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, 0xb7e5, - 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, 0xbc72, 0xbc76, - 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd41, 0xbd42, 0xbd56, - 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, 0xc17a, 0xc17b, 0xc185, - 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, 0xc25e, 0xc281, 0xc301, 0xc306, - 0xc329, 0xc32d, 0xc33a, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4c6, - 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca29, 0xca49, - 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, 0xcedd, - 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, 0xd20a, - 0xd20d, 0xd211, 0xd279, 0xfac1, 0xfacf + 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c0, 0x62c2, 0x62d4, 0x62e1, + 0x62ef, 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, + 0x688a, 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a45, + 0x6a96, 0x6ab4, 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, + 0x6e6b, 0x6e75, 0x6f65, 0x6fb3, 0x70dd, 0x70ea, 0x7230, 0x7231, + 0x7239, 0x746f, 0x7587, 0x75c2, 0x76fe, 0x7709, 0x78b0, 0x78cf, + 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, 0x7967, 0x7a5c, 0x7a79, + 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, 0x7cb2, 0x8401, 0x8540, + 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, 0x8626, 0x8642, + 0x8659, 0x865f, 0x8662, 0x8680, 0x871b, 0x8773, 0x8774, 0x878a, + 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x88f9, 0x893a, + 0x8968, 0x89a4, 0x8abe, 0x8b32, 0x8b71, 0x8b90, 0x8b93, 0x8bb6, + 0x8bd8, 0x8c09, 0x8d02, 0x8d82, 0x8d84, 0x8ee4, 0x90ce, 0x913e, + 0x9140, 0x9148, 0x9191, 0x91a2, 0x91a3, 0x92b0, 0x930e, 0x9311, + 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, 0xa7c5, 0xa825, 0xa861, 0xa865, + 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa921, 0xa9ad, 0xa9e5, 0xabf9, + 0xac4d, 0xacd9, 0xad0a, 0xae49, 0xae5a, 0xae7d, 0xae99, 0xaeaa, + 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb0de, 0xb3bd, + 0xb3d9, 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, + 0xb7d1, 0xb7e5, 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, + 0xbc72, 0xbc76, 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd00, + 0xbd41, 0xbd42, 0xbd56, 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, + 0xc0fd, 0xc17a, 0xc17b, 0xc185, 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, + 0xc25e, 0xc269, 0xc281, 0xc2f9, 0xc301, 0xc306, 0xc329, 0xc32d, + 0xc33a, 0xc355, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4b1, 0xc4c6, + 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca11, 0xca29, + 0xca49, 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, + 0xcedd, 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, + 0xd20a, 0xd20d, 0xd211, 0xd279, 0xfab6, 0xfac1, 0xfacf }; /*Collect the unicode lists and glyph_id offsets*/ @@ -8963,15 +9596,15 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = }, { .range_start = 259, .range_length = 805, .glyph_id_start = 191, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 41, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY }, { - .range_start = 1072, .range_length = 25, .glyph_id_start = 231, + .range_start = 1072, .range_length = 25, .glyph_id_start = 232, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY }, { - .range_start = 1099, .range_length = 64208, .glyph_id_start = 256, - .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 429, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .range_start = 1099, .range_length = 64208, .glyph_id_start = 257, + .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 471, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; @@ -9009,13 +9642,13 @@ static const uint8_t kern_left_class_mapping[] = 44, 44, 44, 44, 45, 32, 45, 31, 59, 0, 11, 0, 12, 60, 33, 33, 0, 36, 19, 61, 41, 42, 23, 42, - 42, 62, 47, 47, 47, 0, 42, 43, - 63, 64, 65, 66, 67, 66, 63, 63, - 63, 68, 63, 69, 70, 67, 63, 71, - 72, 73, 74, 75, 76, 77, 73, 78, - 79, 77, 79, 79, 79, 80, 78, 80, - 81, 74, 82, 80, 83, 75, 78, 79, - 78, 84, 80, 78, 85, 86, 0, 0, + 42, 62, 44, 47, 47, 47, 0, 42, + 43, 63, 64, 65, 66, 67, 66, 63, + 63, 63, 68, 63, 69, 70, 67, 63, + 71, 72, 73, 74, 75, 76, 77, 73, + 78, 79, 77, 79, 79, 79, 80, 78, + 80, 81, 74, 82, 80, 83, 75, 78, + 79, 78, 84, 80, 78, 85, 86, 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, @@ -9068,7 +9701,12 @@ static const uint8_t kern_left_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Map glyph_ids to kern right classes*/ @@ -9100,13 +9738,13 @@ static const uint8_t kern_right_class_mapping[] = 37, 37, 37, 37, 38, 0, 38, 49, 25, 26, 14, 50, 48, 26, 26, 50, 28, 30, 13, 55, 0, 35, 16, 35, - 56, 36, 41, 41, 41, 0, 35, 36, - 57, 58, 57, 57, 57, 0, 57, 57, - 57, 59, 57, 57, 59, 60, 61, 62, - 0, 63, 63, 64, 65, 66, 67, 63, - 63, 63, 68, 63, 63, 65, 63, 63, - 65, 69, 70, 65, 71, 63, 72, 63, - 63, 63, 63, 63, 73, 74, 0, 0, + 56, 36, 37, 41, 41, 41, 0, 35, + 36, 57, 58, 57, 57, 57, 0, 57, + 57, 57, 59, 57, 57, 59, 60, 61, + 62, 0, 63, 63, 64, 65, 66, 67, + 63, 63, 63, 68, 63, 63, 65, 63, + 63, 65, 69, 70, 65, 71, 63, 72, + 63, 63, 63, 63, 63, 73, 74, 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, @@ -9159,7 +9797,12 @@ static const uint8_t kern_right_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Kern values between classes*/ diff --git a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_20_4.c b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_20_4.c index 24db757..f218df7 100644 --- a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_20_4.c +++ b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_20_4.c @@ -2327,6 +2327,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xa0, 0x0, 0x0, 0xfb, 0x0, 0x0, 0xd, 0xf8, 0x73, 0x0, 0x3c, 0xff, 0x50, + /* U+016F "ů" */ + 0x0, 0x6, 0xde, 0x90, 0x0, 0x0, 0xd, 0x84, + 0xf2, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4f, 0x70, 0x0, 0x4, 0xf7, 0x4f, 0x70, + 0x0, 0x4, 0xf7, 0x4f, 0x70, 0x0, 0x4, 0xf7, + 0x4f, 0x70, 0x0, 0x4, 0xf7, 0x4f, 0x70, 0x0, + 0x4, 0xf7, 0x4f, 0x70, 0x0, 0x4, 0xf7, 0x4f, + 0x70, 0x0, 0x4, 0xf7, 0x3f, 0x70, 0x0, 0x5, + 0xf7, 0x2f, 0xa0, 0x0, 0xc, 0xf7, 0xc, 0xf9, + 0x56, 0xcd, 0xf7, 0x2, 0xbe, 0xfe, 0x92, 0xf7, + /* U+017A "ź" */ 0x0, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x0, 0x3f, 0x90, 0x0, 0x0, 0x0, 0x67, 0x0, 0x0, 0x0, @@ -2957,6 +2969,17 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x90, 0x0, 0x0, 0x0, 0xdc, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x0, 0x0, + /* U+0E09 "ฉ" */ + 0x5, 0xad, 0xff, 0xea, 0x20, 0x0, 0xce, 0xa9, + 0x9c, 0xff, 0x20, 0x1, 0x0, 0x0, 0x7, 0xfa, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xd0, 0x1c, 0xe7, + 0x0, 0x0, 0xdd, 0x8, 0xb4, 0xf2, 0x0, 0xd, + 0xe0, 0x9a, 0x2f, 0x30, 0x0, 0xec, 0x2, 0xdf, + 0xf3, 0x0, 0x4f, 0x90, 0x0, 0x6f, 0x30, 0x6f, + 0xf8, 0x0, 0x6, 0xfc, 0xfe, 0xf7, 0xc9, 0x0, + 0x6f, 0xa4, 0x3f, 0x3a, 0xb0, 0x6, 0xf3, 0x0, + 0xaf, 0xd3, + /* U+0E0A "ช" */ 0x7, 0xee, 0x80, 0x1, 0xfa, 0xf, 0x66, 0xf2, 0x2, 0xf9, 0xf, 0x76, 0xf2, 0x29, 0xf4, 0x4, @@ -3627,6 +3650,18 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0xcf, 0x10, 0x0, 0x0, 0x0, 0xce, 0x10, 0x0, + /* U+1EE7 "ủ" */ + 0x0, 0xa, 0xee, 0xb2, 0x0, 0x0, 0x2, 0x23, + 0xd7, 0x0, 0x0, 0x0, 0xce, 0xa1, 0x0, 0x0, + 0x0, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4f, 0x70, 0x0, 0x4, 0xf7, 0x4f, 0x70, + 0x0, 0x4, 0xf7, 0x4f, 0x70, 0x0, 0x4, 0xf7, + 0x4f, 0x70, 0x0, 0x4, 0xf7, 0x4f, 0x70, 0x0, + 0x4, 0xf7, 0x4f, 0x70, 0x0, 0x4, 0xf7, 0x4f, + 0x70, 0x0, 0x4, 0xf7, 0x3f, 0x70, 0x0, 0x5, + 0xf7, 0x2f, 0xa0, 0x0, 0xc, 0xf7, 0xc, 0xf9, + 0x56, 0xcd, 0xf7, 0x2, 0xbe, 0xfe, 0x92, 0xf7, + /* U+1EED "ử" */ 0x0, 0xb, 0xee, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x22, 0x3e, 0x50, 0x0, 0x0, 0x0, 0x0, 0xed, @@ -3731,6 +3766,28 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x6c, 0xef, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+304B "か" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xf3, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xd0, 0x0, + 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0xf, 0xa1, + 0x20, 0x0, 0x3f, 0xa0, 0x0, 0x28, 0xac, 0xef, + 0xff, 0xff, 0x80, 0x9, 0xf6, 0x0, 0x3f, 0xda, + 0xdf, 0x54, 0x4b, 0xf3, 0x0, 0xee, 0x10, 0x0, + 0x0, 0xdc, 0x0, 0x3, 0xf7, 0x0, 0x5f, 0x80, + 0x0, 0x2, 0xf7, 0x0, 0x1, 0xf8, 0x0, 0xe, + 0xe0, 0x0, 0x7, 0xf2, 0x0, 0x1, 0xf8, 0x0, + 0x7, 0xf5, 0x0, 0xd, 0xc0, 0x0, 0x2, 0xf7, + 0x0, 0x2, 0xf9, 0x0, 0x4f, 0x60, 0x0, 0x4, + 0xf6, 0x0, 0x0, 0x50, 0x0, 0xbf, 0x10, 0x0, + 0x6, 0xf4, 0x0, 0x0, 0x0, 0x2, 0xf9, 0x0, + 0x0, 0x9, 0xf2, 0x0, 0x0, 0x0, 0xa, 0xf2, + 0x1, 0x0, 0xe, 0xe0, 0x0, 0x0, 0x0, 0x3f, + 0xa0, 0xd, 0xcb, 0xef, 0x60, 0x0, 0x0, 0x0, + 0x4c, 0x10, 0x6, 0xbd, 0xc6, 0x0, 0x0, 0x0, + 0x0, + /* U+304C "が" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -3789,6 +3846,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x9, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x50, + /* U+3053 "こ" */ + 0x0, 0xa7, 0x54, 0x32, 0x22, 0x34, 0x30, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x2, + 0x45, 0x66, 0x76, 0x65, 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, 0x7, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x90, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xd9, 0x87, + 0x78, 0x9c, 0xe4, 0x0, 0x28, 0xcf, 0xff, 0xff, + 0xfe, 0xc3, 0x0, 0x0, 0x0, 0x11, 0x11, 0x0, + 0x0, + /* U+3055 "さ" */ 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf5, 0x0, 0x0, 0x0, 0x0, @@ -3916,6 +3989,25 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+3061 "ち" */ + 0x0, 0x0, 0x4, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0x50, 0x0, 0x0, 0x10, 0x0, 0x0, + 0x6, 0xf5, 0x46, 0x8b, 0xea, 0x0, 0x2f, 0xff, + 0xff, 0xff, 0xff, 0xc9, 0x40, 0x0, 0x77, 0x7e, + 0xd4, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x40, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf0, 0x3, + 0x68, 0x85, 0x10, 0x0, 0x0, 0xda, 0x6d, 0xff, + 0xef, 0xff, 0x50, 0x0, 0x2f, 0xff, 0xb4, 0x0, + 0x3, 0xdf, 0x30, 0x9, 0xfe, 0x50, 0x0, 0x0, + 0x2, 0xfa, 0x0, 0xde, 0x20, 0x0, 0x0, 0x0, + 0xe, 0xc0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, + 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x2, 0x8f, 0xd0, + 0x0, 0x0, 0x1b, 0x99, 0xad, 0xff, 0xc1, 0x0, + 0x0, 0x0, 0xcf, 0xfe, 0xc9, 0x40, 0x0, + /* U+3063 "っ" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x59, 0xdf, 0xff, 0xb3, 0x0, 0x39, 0xdf, @@ -3929,6 +4021,22 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x8f, 0xfd, 0x93, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, + /* U+3064 "つ" */ + 0x0, 0x0, 0x0, 0x1, 0x58, 0xaa, 0x95, 0x0, + 0x0, 0x0, 0x4, 0x9d, 0xff, 0xfe, 0xef, 0xfd, + 0x20, 0x6, 0xbf, 0xff, 0xc8, 0x30, 0x0, 0x18, + 0xfe, 0x10, 0xff, 0xc6, 0x10, 0x0, 0x0, 0x0, + 0x7, 0xf7, 0x3, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xd0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4, 0xf9, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xcf, 0x30, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xcf, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x49, 0xff, 0xa0, 0x0, 0x0, 0x0, + 0x9, 0xcd, 0xff, 0xfc, 0x40, 0x0, 0x0, 0x0, + 0x0, 0x7d, 0xb9, 0x61, 0x0, 0x0, 0x0, + /* U+3066 "て" */ 0x0, 0x0, 0x0, 0x1, 0x35, 0x78, 0xab, 0xde, 0x80, 0x68, 0xac, 0xef, 0xff, 0xff, 0xff, 0xca, @@ -4009,6 +4117,48 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xe, 0x90, 0x0, 0x0, 0x0, 0x12, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+306E "の" */ + 0x0, 0x0, 0x0, 0x6a, 0xcd, 0xb9, 0x40, 0x0, + 0x0, 0x0, 0x5, 0xef, 0xdf, 0xca, 0xef, 0xc1, + 0x0, 0x0, 0x9, 0xfb, 0x21, 0xf7, 0x0, 0x6f, + 0xe1, 0x0, 0x7, 0xf8, 0x0, 0x2f, 0x60, 0x0, + 0x4f, 0xb0, 0x2, 0xfb, 0x0, 0x4, 0xf5, 0x0, + 0x0, 0xaf, 0x20, 0x9f, 0x20, 0x0, 0x7f, 0x10, + 0x0, 0x4, 0xf7, 0xe, 0xc0, 0x0, 0xb, 0xe0, + 0x0, 0x0, 0x1f, 0x91, 0xf9, 0x0, 0x1, 0xf9, + 0x0, 0x0, 0x0, 0xfa, 0x1f, 0x80, 0x0, 0x6f, + 0x30, 0x0, 0x0, 0x2f, 0x81, 0xf9, 0x0, 0xd, + 0xc0, 0x0, 0x0, 0x6, 0xf6, 0xe, 0xd0, 0x6, + 0xf5, 0x0, 0x0, 0x0, 0xcf, 0x10, 0x8f, 0x85, + 0xfb, 0x0, 0x0, 0x0, 0x8f, 0x80, 0x0, 0xcf, + 0xfd, 0x10, 0x0, 0x1, 0xaf, 0xc0, 0x0, 0x0, + 0x56, 0x10, 0x0, 0x5a, 0xff, 0xb0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0xfb, 0x40, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+306F "は" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, + 0x0, 0x7, 0xd1, 0x0, 0x0, 0x0, 0x1f, 0x90, + 0x0, 0x0, 0x9, 0xf0, 0x0, 0x0, 0x0, 0x1f, + 0x90, 0x0, 0x0, 0xb, 0xe0, 0x0, 0x0, 0x0, + 0x1f, 0x90, 0x0, 0x0, 0xd, 0xc0, 0x2, 0x43, + 0x44, 0x6f, 0xc9, 0xad, 0x20, 0xf, 0x90, 0x9, + 0xff, 0xff, 0xff, 0xfe, 0xca, 0x10, 0x2f, 0x70, + 0x1, 0x33, 0x32, 0x2f, 0x90, 0x0, 0x0, 0x4f, + 0x40, 0x0, 0x0, 0x0, 0xf, 0xa0, 0x0, 0x0, + 0x6f, 0x30, 0x0, 0x0, 0x0, 0xe, 0xb0, 0x0, + 0x0, 0x7f, 0x20, 0x0, 0x0, 0x0, 0xd, 0xd0, + 0x0, 0x0, 0x8f, 0x10, 0x0, 0x0, 0x0, 0xc, + 0xe0, 0x0, 0x0, 0x8f, 0x10, 0x0, 0x3, 0x67, + 0x6d, 0xf0, 0x0, 0x0, 0x7f, 0x20, 0x1, 0xcf, + 0xee, 0xff, 0xfa, 0x30, 0x0, 0x6f, 0x30, 0x9, + 0xf3, 0x0, 0xa, 0xfe, 0xf8, 0x0, 0x5f, 0x50, + 0xa, 0xe0, 0x0, 0xd, 0xe0, 0x9f, 0xb0, 0x2f, + 0x90, 0x5, 0xfc, 0x87, 0xbf, 0x70, 0x6, 0xc0, + 0xe, 0xb0, 0x0, 0x5b, 0xee, 0xc6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+307E "ま" */ 0x0, 0x0, 0x0, 0x48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xf1, 0x0, 0x0, 0x0, 0x0, @@ -4028,6 +4178,28 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x5f, 0xc6, 0x59, 0xfa, 0x0, 0x0, 0x87, 0x0, 0x4b, 0xef, 0xd7, 0x0, 0x0, 0x0, 0x0, + /* U+307F "み" */ + 0x0, 0x3, 0x66, 0x79, 0xbd, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x8, 0xff, 0xfd, 0xcf, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x8f, 0x20, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, + 0xf3, 0x0, 0x6, 0x50, 0x0, 0x0, 0x0, 0x0, + 0xc, 0xc0, 0x0, 0xd, 0xa0, 0x0, 0x0, 0x0, + 0x0, 0x5f, 0x50, 0x0, 0xe, 0x80, 0x0, 0x0, + 0x18, 0xdf, 0xff, 0xfd, 0x94, 0x1f, 0x60, 0x0, + 0x3, 0xee, 0x76, 0xf8, 0x59, 0xef, 0xff, 0x30, + 0x0, 0xe, 0xc0, 0xa, 0xe0, 0x0, 0x4, 0xef, + 0xd4, 0x0, 0x4f, 0x20, 0x3f, 0x60, 0x0, 0x2, + 0xfa, 0xef, 0x70, 0x7f, 0x0, 0xdc, 0x0, 0x0, + 0xa, 0xf1, 0x1b, 0xf5, 0x5f, 0xac, 0xf2, 0x0, + 0x0, 0x6f, 0x70, 0x0, 0x70, 0x9, 0xeb, 0x30, + 0x0, 0x6, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x9f, 0xb0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xc, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x20, 0x0, 0x0, 0x0, + 0x0, + /* U+3082 "も" */ 0x0, 0x0, 0x0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf9, 0x0, 0x0, 0x0, 0x0, @@ -4459,6 +4631,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xbf, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+30C0 "ダ" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xb, + 0x50, 0x0, 0x0, 0x0, 0x29, 0x30, 0x0, 0xb, + 0x94, 0xe1, 0x0, 0x0, 0x0, 0xaf, 0x50, 0x0, + 0x1, 0xf3, 0xb7, 0x0, 0x0, 0x2, 0xfd, 0x0, + 0x0, 0x0, 0x74, 0x10, 0x0, 0x0, 0xd, 0xff, + 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x9f, + 0xb8, 0x88, 0x88, 0xaf, 0x90, 0x0, 0x0, 0x6, + 0xfd, 0x0, 0x0, 0x0, 0x8f, 0x40, 0x0, 0x0, + 0x5f, 0xe2, 0x0, 0x0, 0x0, 0xee, 0x0, 0x0, + 0x7, 0xfe, 0x25, 0x90, 0x0, 0x6, 0xf7, 0x0, + 0x0, 0xaf, 0xd1, 0xa, 0xfd, 0x20, 0x1e, 0xe0, + 0x0, 0x0, 0x17, 0x0, 0x0, 0x6f, 0xf5, 0xaf, + 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, + 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xaf, 0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5e, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4c, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0xef, 0xa2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, + /* U+30C3 "ッ" */ 0x0, 0x0, 0x3, 0x30, 0x0, 0x0, 0x0, 0x22, 0x0, 0xee, 0x0, 0x0, 0xca, 0x1f, 0xc0, 0x6, @@ -5070,6 +5266,33 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x4, 0xf2, 0x5, 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, + /* U+4F60 "你" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2c, 0x30, 0x8, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x10, + 0xd, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xda, 0x0, 0x4f, 0xa6, 0x66, 0x66, 0x66, 0x10, + 0x0, 0x4, 0xf4, 0x0, 0xbf, 0xff, 0xff, 0xff, + 0xff, 0x30, 0x0, 0xb, 0xf0, 0x3, 0xf6, 0x0, + 0x0, 0x0, 0x9e, 0x0, 0x0, 0x2f, 0xe0, 0xb, + 0xd0, 0x1, 0x41, 0x1, 0xf8, 0x0, 0x0, 0xbf, + 0xe0, 0x5f, 0x50, 0x3, 0xf4, 0x8, 0xf1, 0x0, + 0x4, 0xfe, 0xe0, 0x8c, 0x0, 0x3, 0xf4, 0x1, + 0x30, 0x0, 0xd, 0xc8, 0xe0, 0x0, 0x11, 0x3, + 0xf4, 0x2, 0x0, 0x0, 0x1c, 0x28, 0xe0, 0x0, + 0x9d, 0x3, 0xf4, 0x1f, 0x50, 0x0, 0x0, 0x8, + 0xe0, 0x0, 0xe7, 0x3, 0xf4, 0xa, 0xd0, 0x0, + 0x0, 0x8, 0xe0, 0x5, 0xf1, 0x3, 0xf4, 0x3, + 0xf4, 0x0, 0x0, 0x8, 0xe0, 0xc, 0xa0, 0x3, + 0xf4, 0x0, 0xcc, 0x0, 0x0, 0x8, 0xe0, 0x4f, + 0x30, 0x3, 0xf4, 0x0, 0x5f, 0x20, 0x0, 0x8, + 0xe0, 0xcc, 0x0, 0x3, 0xf4, 0x0, 0xe, 0x90, + 0x0, 0x8, 0xe5, 0xf3, 0x0, 0x4, 0xf3, 0x0, + 0x9, 0xe0, 0x0, 0x8, 0xe0, 0x40, 0x5, 0x7c, + 0xf2, 0x0, 0x2, 0x40, 0x0, 0x8, 0xe0, 0x0, + 0x8, 0xfe, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+4FE1 "信" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf4, 0x0, 0x0, 0xae, @@ -5095,6 +5318,31 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0x70, 0x0, 0x8, 0xe0, 0x8, 0xf0, 0x0, 0x0, 0x1, 0xf7, 0x0, + /* U+5019 "候" */ + 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0xdf, 0xff, + 0xff, 0xf6, 0x0, 0x0, 0x5, 0xf1, 0xb3, 0x4, + 0x55, 0x55, 0x6f, 0x40, 0x0, 0x0, 0xbb, 0xf, + 0x50, 0x0, 0x0, 0x2, 0xf3, 0x0, 0x0, 0x2f, + 0x60, 0xf5, 0x77, 0x77, 0x77, 0x9f, 0x87, 0x30, + 0x8, 0xf5, 0xf, 0x5d, 0xdd, 0xdd, 0xdd, 0xdd, + 0xd6, 0x1, 0xff, 0x50, 0xf5, 0x1, 0xb2, 0x0, + 0x0, 0x0, 0x0, 0x8f, 0xf5, 0xf, 0x50, 0x7f, + 0x33, 0x33, 0x33, 0x10, 0x2f, 0x7f, 0x50, 0xf5, + 0xe, 0xff, 0xff, 0xff, 0xf7, 0x5, 0xe0, 0xf5, + 0xf, 0x57, 0xe2, 0x29, 0xf2, 0x22, 0x10, 0x1, + 0xf, 0x50, 0xf5, 0xb6, 0x0, 0x8e, 0x0, 0x0, + 0x0, 0x0, 0xf5, 0xf, 0x6a, 0xaa, 0xad, 0xfa, + 0xaa, 0xa2, 0x0, 0xf, 0x50, 0xf6, 0xaa, 0xaa, + 0xef, 0xaa, 0xaa, 0x20, 0x0, 0xf5, 0xf, 0x50, + 0x0, 0x2f, 0xf7, 0x0, 0x0, 0x0, 0xf, 0x50, + 0xf4, 0x0, 0x1d, 0xe7, 0xf4, 0x0, 0x0, 0x0, + 0xf5, 0x0, 0x0, 0x4d, 0xe3, 0x9, 0xf7, 0x0, + 0x0, 0xf, 0x50, 0x5, 0xcf, 0xb2, 0x0, 0x7, + 0xfd, 0x60, 0x0, 0xf5, 0x0, 0x9c, 0x40, 0x0, + 0x0, 0x3, 0xc5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+5099 "備" */ 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x1, 0x20, 0x0, 0x0, 0x0, 0xc, 0xa0, 0x3, 0xf3, 0x0, @@ -5362,6 +5610,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xfd, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+52A0 "加" */ + 0x0, 0x1, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xf6, 0x0, 0x0, 0x8, + 0x99, 0x99, 0x95, 0x3, 0x89, 0xfb, 0x88, 0x84, + 0xe, 0xfe, 0xee, 0xf9, 0x6, 0xff, 0xff, 0xff, + 0xf9, 0xe, 0x80, 0x0, 0xe9, 0x0, 0x2, 0xf4, + 0x0, 0xf8, 0xe, 0x80, 0x0, 0xe9, 0x0, 0x3, + 0xf3, 0x0, 0xf8, 0xe, 0x80, 0x0, 0xe9, 0x0, + 0x4, 0xf2, 0x0, 0xf7, 0xe, 0x80, 0x0, 0xe9, + 0x0, 0x6, 0xf1, 0x0, 0xf7, 0xe, 0x80, 0x0, + 0xe9, 0x0, 0x8, 0xf0, 0x0, 0xf7, 0xe, 0x80, + 0x0, 0xe9, 0x0, 0xa, 0xd0, 0x1, 0xf6, 0xe, + 0x80, 0x0, 0xe9, 0x0, 0xd, 0xa0, 0x1, 0xf6, + 0xe, 0x80, 0x0, 0xe9, 0x0, 0x1f, 0x70, 0x2, + 0xf6, 0xe, 0x80, 0x0, 0xe9, 0x0, 0x6f, 0x20, + 0x2, 0xf5, 0xe, 0x80, 0x0, 0xe9, 0x0, 0xcd, + 0x0, 0x3, 0xf5, 0xe, 0xc7, 0x77, 0xf9, 0x4, + 0xf6, 0x0, 0x28, 0xf4, 0xe, 0xff, 0xff, 0xf9, + 0xd, 0xe0, 0xb, 0xff, 0xf2, 0xe, 0x80, 0x0, + 0xe9, 0x3f, 0x50, 0x6, 0xca, 0x50, 0xe, 0x80, + 0x0, 0xe9, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, + /* U+52A1 "务" */ 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xe1, 0x0, 0x0, @@ -5512,6 +5784,31 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf0, 0x0, 0x0, 0x0, 0x0, + /* U+53CB "友" */ + 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xb, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x68, 0x88, 0x8e, + 0xd8, 0x88, 0x88, 0x88, 0x88, 0x82, 0xd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, + 0x0, 0x0, 0x3f, 0x60, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xf2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x66, 0x66, + 0x66, 0x66, 0x60, 0x0, 0x0, 0x0, 0xe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0x4, + 0xfd, 0xe1, 0x0, 0x0, 0xa, 0xe0, 0x0, 0x0, + 0x0, 0xae, 0x1f, 0x80, 0x0, 0x3, 0xf7, 0x0, + 0x0, 0x0, 0x1f, 0x90, 0x7f, 0x30, 0x0, 0xdd, + 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0xce, 0x10, + 0xbf, 0x30, 0x0, 0x0, 0x1, 0xfa, 0x0, 0x2, + 0xed, 0xbf, 0x50, 0x0, 0x0, 0x0, 0xaf, 0x20, + 0x0, 0x6, 0xff, 0x90, 0x0, 0x0, 0x0, 0x5f, + 0x70, 0x0, 0x19, 0xfe, 0xcf, 0xa2, 0x0, 0x0, + 0x2e, 0xc0, 0x2, 0x9f, 0xf9, 0x0, 0x7f, 0xfb, + 0x40, 0x9, 0xe2, 0x3c, 0xff, 0x92, 0x0, 0x0, + 0x18, 0xff, 0xe4, 0x2, 0x0, 0xc7, 0x10, 0x0, + 0x0, 0x0, 0x1, 0x6c, 0x10, + /* U+53D1 "发" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x85, 0x0, 0x5e, 0x20, 0xd, @@ -5899,6 +6196,32 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xe4, 0x3c, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xb1, + /* U+597D "好" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x5f, 0x10, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6, 0xf0, 0x0, 0x9, + 0xbb, 0xbb, 0xbb, 0xb8, 0x0, 0x0, 0x8e, 0x0, + 0x0, 0x9c, 0xcc, 0xcc, 0xdf, 0xb0, 0x7, 0x8d, + 0xe8, 0x88, 0x20, 0x0, 0x0, 0x2d, 0xd1, 0x0, + 0xef, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x2e, 0xd1, + 0x0, 0x0, 0xf, 0x70, 0x1f, 0x40, 0x0, 0x3e, + 0xc1, 0x0, 0x0, 0x2, 0xf4, 0x3, 0xf2, 0x0, + 0x7, 0xf1, 0x0, 0x0, 0x0, 0x5f, 0x10, 0x6f, + 0x0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x8, 0xd0, + 0x9, 0xd8, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0xca, 0x0, 0xd9, 0x48, 0x88, 0xbf, 0x88, 0x88, + 0x40, 0xf, 0xc1, 0x2f, 0x50, 0x0, 0x7, 0xf1, + 0x0, 0x0, 0x0, 0x5f, 0xeb, 0xf1, 0x0, 0x0, + 0x7f, 0x10, 0x0, 0x0, 0x0, 0x3e, 0xfa, 0x0, + 0x0, 0x7, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xbf, + 0xf6, 0x0, 0x0, 0x7f, 0x10, 0x0, 0x0, 0x0, + 0x8f, 0x8e, 0xf6, 0x0, 0x7, 0xf1, 0x0, 0x0, + 0x0, 0x7f, 0xa0, 0x2e, 0xe0, 0x0, 0x8f, 0x10, + 0x0, 0x0, 0x9f, 0xb0, 0x0, 0x25, 0x7, 0x9f, + 0xf0, 0x0, 0x0, 0x1d, 0xa0, 0x0, 0x0, 0x0, + 0xdf, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+59CB "始" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0xaa, 0x0, 0x0, 0x0, 0x2f, @@ -6451,6 +6774,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xe7, 0x0, 0x20, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6211 "我" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x8, 0xe0, 0x20, + 0x0, 0x0, 0x1, 0x35, 0x8b, 0xef, 0x27, 0xf0, + 0xcd, 0x10, 0x0, 0x3f, 0xff, 0xfd, 0x73, 0x7, + 0xf0, 0x1d, 0xd1, 0x0, 0x3, 0x10, 0xe9, 0x0, + 0x6, 0xf0, 0x2, 0xec, 0x0, 0x0, 0x0, 0xe9, + 0x0, 0x5, 0xf1, 0x0, 0x36, 0x0, 0x56, 0x66, + 0xfb, 0x66, 0x69, 0xf7, 0x66, 0x66, 0x62, 0xef, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, + 0x0, 0x0, 0xe9, 0x0, 0x2, 0xf5, 0x0, 0x1, + 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0xf6, 0x0, + 0x4f, 0x30, 0x0, 0x0, 0xe9, 0x15, 0x50, 0xe8, + 0x1, 0xea, 0x0, 0x1, 0x47, 0xff, 0xff, 0xb0, + 0xca, 0x1d, 0xd0, 0x0, 0xbf, 0xff, 0xfc, 0x51, + 0x0, 0x9d, 0xce, 0x20, 0x0, 0x56, 0x30, 0xe9, + 0x0, 0x0, 0x7f, 0xe2, 0x0, 0x0, 0x0, 0x0, + 0xe9, 0x0, 0x8, 0xff, 0x60, 0x0, 0x70, 0x0, + 0x0, 0xe9, 0x5, 0xdf, 0xad, 0xc0, 0x3, 0xf4, + 0x0, 0x0, 0xf9, 0xbf, 0xe5, 0x5, 0xf5, 0x8, + 0xe0, 0x4, 0xad, 0xf6, 0x47, 0x0, 0x0, 0xcf, + 0xbf, 0x90, 0x4, 0xdb, 0x70, 0x0, 0x0, 0x0, + 0x1b, 0xfb, 0x10, + /* U+624B "手" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x0, 0x2, 0x44, 0x56, 0x67, 0x89, 0xbc, 0xef, @@ -6945,6 +7292,29 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xad, 0xf5, 0x0, 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0x6e, 0xc7, 0x0, 0x0, + /* U+670B "朋" */ + 0x0, 0x3f, 0xff, 0xff, 0xe0, 0xf, 0xff, 0xff, + 0xf6, 0x0, 0x3f, 0x97, 0x7b, 0xe0, 0xf, 0xa7, + 0x77, 0xf7, 0x0, 0x3f, 0x30, 0x7, 0xe0, 0xf, + 0x60, 0x0, 0xf7, 0x0, 0x3f, 0x30, 0x7, 0xe0, + 0xf, 0x60, 0x0, 0xf7, 0x0, 0x3f, 0x63, 0x39, + 0xe0, 0xf, 0x83, 0x33, 0xf7, 0x0, 0x3f, 0xff, + 0xff, 0xe0, 0xf, 0xff, 0xff, 0xf7, 0x0, 0x3f, + 0x52, 0x28, 0xe0, 0xf, 0x73, 0x33, 0xf7, 0x0, + 0x3f, 0x30, 0x7, 0xe0, 0xf, 0x50, 0x0, 0xf7, + 0x0, 0x3f, 0x30, 0x7, 0xe0, 0xf, 0x50, 0x0, + 0xf7, 0x0, 0x4f, 0x87, 0x7a, 0xe0, 0xf, 0xa7, + 0x77, 0xf7, 0x0, 0x5f, 0xff, 0xff, 0xe0, 0x1f, + 0xff, 0xff, 0xf7, 0x0, 0x7f, 0x0, 0x7, 0xe0, + 0x2f, 0x40, 0x0, 0xf7, 0x0, 0x9d, 0x0, 0x7, + 0xe0, 0x5f, 0x20, 0x0, 0xf7, 0x0, 0xea, 0x0, + 0x7, 0xe0, 0x9f, 0x0, 0x0, 0xf7, 0x4, 0xf5, + 0x0, 0x8, 0xe0, 0xea, 0x0, 0x0, 0xf6, 0xc, + 0xd0, 0x8, 0xdf, 0xc7, 0xf3, 0x3, 0xad, 0xf5, + 0x1d, 0x50, 0x5, 0xb8, 0x1a, 0xa0, 0x1, 0xdb, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+670D "服" */ 0x0, 0x1, 0x11, 0x11, 0x0, 0x11, 0x11, 0x11, 0x10, 0x0, 0x6, 0xff, 0xff, 0xf3, 0x7f, 0xff, @@ -7391,6 +7761,32 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x3e, 0xa1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6E90 "源" */ + 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x5, 0xf9, 0x0, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x70, 0x0, 0x6f, 0xc1, 0xeb, + 0x66, 0x66, 0xbe, 0x66, 0x66, 0x30, 0x0, 0x4, + 0xf5, 0xe8, 0x0, 0x0, 0xca, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x20, 0xe8, 0x3, 0x44, 0xf9, 0x44, + 0x40, 0x0, 0x1c, 0x40, 0x0, 0xe8, 0xe, 0xff, + 0xff, 0xff, 0xf3, 0x0, 0x1b, 0xf7, 0x0, 0xe8, + 0xe, 0x70, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x9f, + 0x80, 0xe8, 0xe, 0x94, 0x44, 0x46, 0xf3, 0x0, + 0x0, 0x7, 0x70, 0xf7, 0xe, 0xff, 0xff, 0xff, + 0xf3, 0x0, 0x0, 0x0, 0x0, 0xf7, 0xe, 0x70, + 0x0, 0x3, 0xf3, 0x0, 0x0, 0x8, 0x20, 0xf6, + 0xe, 0x94, 0x44, 0x46, 0xf3, 0x0, 0x0, 0x3f, + 0x32, 0xf5, 0xe, 0xff, 0xff, 0xff, 0xf3, 0x0, + 0x0, 0x6f, 0x4, 0xf3, 0x0, 0x0, 0x8e, 0x0, + 0x0, 0x0, 0x0, 0xbb, 0x8, 0xf0, 0x9, 0x80, + 0x8e, 0xb, 0x80, 0x0, 0x0, 0xf7, 0xc, 0xc0, + 0x4f, 0x30, 0x8e, 0x3, 0xf6, 0x0, 0x4, 0xf2, + 0x2f, 0x72, 0xe8, 0x0, 0x8e, 0x0, 0x6f, 0x30, + 0x9, 0xe0, 0x9f, 0x2e, 0xb0, 0x58, 0xed, 0x0, + 0xb, 0xd0, 0xa, 0x80, 0xe9, 0x6, 0x0, 0xae, + 0xb4, 0x0, 0x1, 0x30, 0x0, 0x0, 0x11, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6EE1 "满" */ 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0xf4, 0x0, @@ -7644,6 +8040,55 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x3a, 0x0, 0x0, 0x0, 0x6, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+73B0 "现" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x78, 0x88, 0x88, 0x2e, 0xff, 0xff, + 0xff, 0xff, 0x0, 0xe, 0xff, 0xff, 0xf3, 0xeb, + 0x66, 0x66, 0x6b, 0xf0, 0x0, 0x0, 0x8e, 0x0, + 0xe, 0x80, 0x15, 0x0, 0x8f, 0x0, 0x0, 0x8, + 0xe0, 0x0, 0xe8, 0x5, 0xf1, 0x8, 0xf0, 0x0, + 0x0, 0x8e, 0x0, 0xe, 0x80, 0x5f, 0x10, 0x8f, + 0x0, 0x0, 0x8, 0xe0, 0x0, 0xe8, 0x5, 0xf1, + 0x8, 0xf0, 0x0, 0x67, 0xbf, 0x77, 0x1e, 0x80, + 0x5f, 0x10, 0x8f, 0x0, 0xc, 0xff, 0xff, 0xf3, + 0xe8, 0x6, 0xf0, 0x8, 0xf0, 0x0, 0x0, 0x8e, + 0x0, 0xe, 0x80, 0x7f, 0x0, 0x8f, 0x0, 0x0, + 0x8, 0xe0, 0x0, 0xe8, 0xa, 0xd0, 0x8, 0xf0, + 0x0, 0x0, 0x8e, 0x0, 0xd, 0x80, 0xdf, 0x90, + 0x7e, 0x0, 0x0, 0x8, 0xe0, 0x0, 0x0, 0x4f, + 0xcc, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x7d, 0x80, + 0xc, 0xb9, 0xc0, 0x0, 0x74, 0x14, 0x9e, 0xff, + 0xe6, 0xa, 0xf2, 0x9c, 0x0, 0xb, 0x86, 0xff, + 0xd8, 0x30, 0xa, 0xf6, 0x9, 0xc0, 0x0, 0xd7, + 0x26, 0x20, 0x0, 0x2d, 0xf6, 0x0, 0x8f, 0x76, + 0x8f, 0x40, 0x0, 0x0, 0x2f, 0xf4, 0x0, 0x2, + 0xdf, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x61, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+73FE "現" */ + 0x6, 0x88, 0x88, 0x83, 0xff, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0xcf, 0xff, 0xff, 0x6f, 0x95, 0x55, + 0x55, 0xae, 0x0, 0x0, 0x6, 0xf0, 0x0, 0xf6, + 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x6f, 0x0, + 0xf, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x6, + 0xf0, 0x0, 0xf9, 0x55, 0x55, 0x5a, 0xe0, 0x0, + 0x0, 0x6f, 0x0, 0xf, 0x60, 0x0, 0x0, 0x7e, + 0x0, 0xb, 0xff, 0xff, 0xf6, 0xfd, 0xbb, 0xbb, + 0xbd, 0xe0, 0x0, 0x68, 0xbf, 0x88, 0x3f, 0xa7, + 0x77, 0x77, 0xbe, 0x0, 0x0, 0x6, 0xf0, 0x0, + 0xf6, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x6f, + 0x0, 0xf, 0x95, 0x55, 0x55, 0xae, 0x0, 0x0, + 0x6, 0xf0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x6f, 0x0, 0x0, 0x4f, 0x20, 0xe7, + 0x0, 0x0, 0x0, 0x6, 0xf5, 0x98, 0x7, 0xf0, + 0xe, 0x70, 0x0, 0x1, 0x59, 0xdf, 0xff, 0x80, + 0xdb, 0x0, 0xe7, 0x0, 0x84, 0x7f, 0xfc, 0x84, + 0x0, 0xaf, 0x30, 0xe, 0x70, 0xc, 0x81, 0x30, + 0x0, 0x2, 0xbf, 0x70, 0x0, 0xec, 0x56, 0xf6, + 0x0, 0x0, 0x3, 0xff, 0x60, 0x0, 0x7, 0xff, + 0xfd, 0x10, 0x0, 0x0, 0x8, 0x10, 0x0, 0x0, + 0x0, 0x0, 0x0, + /* U+7528 "用" */ 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0xf, 0xc7, 0x77, 0x7f, 0xc7, 0x77, @@ -7741,6 +8186,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x50, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, + /* U+7684 "的" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1c, 0x60, 0x0, 0x4, 0xf2, 0x0, + 0x0, 0x0, 0x5, 0xf5, 0x0, 0x0, 0x9e, 0x0, + 0x0, 0x0, 0x0, 0x9f, 0x10, 0x0, 0xe, 0x90, + 0x0, 0x0, 0x7, 0x7e, 0xe7, 0x77, 0x4, 0xfd, + 0xbb, 0xbb, 0x80, 0xff, 0xff, 0xff, 0xe0, 0xbe, + 0xbb, 0xbb, 0xfb, 0xf, 0x60, 0x0, 0x7e, 0x3f, + 0x60, 0x0, 0xd, 0xb0, 0xf6, 0x0, 0x7, 0xe9, + 0xe0, 0x0, 0x0, 0xdb, 0xf, 0x60, 0x0, 0x7e, + 0x2, 0x10, 0x0, 0xd, 0xa0, 0xf6, 0x0, 0x7, + 0xe0, 0x1f, 0x50, 0x0, 0xda, 0xf, 0xb8, 0x88, + 0xbe, 0x0, 0xae, 0x10, 0xe, 0xa0, 0xff, 0xff, + 0xff, 0xe0, 0x1, 0xfa, 0x0, 0xe9, 0xf, 0x60, + 0x0, 0x7e, 0x0, 0x7, 0xf3, 0xf, 0x90, 0xf6, + 0x0, 0x7, 0xe0, 0x0, 0xd, 0x40, 0xf8, 0xf, + 0x60, 0x0, 0x7e, 0x0, 0x0, 0x0, 0xf, 0x80, + 0xf6, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x0, 0xf7, + 0xf, 0x60, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x1f, + 0x70, 0xf9, 0x66, 0x6a, 0xe0, 0x0, 0x1, 0x27, + 0xf5, 0xf, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xef, + 0xfe, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, + 0x64, 0x0, + /* U+78BA "確" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, @@ -8298,6 +8767,31 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xfd, 0x0, 0x0, 0x0, 0x6, 0xf1, 0x0, 0x0, 0x4f, 0xda, 0x20, 0x0, 0x0, + /* U+898B "見" */ + 0x0, 0x1, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, + 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x90, 0x0, 0x0, 0x8, 0xf4, 0x33, 0x33, + 0x33, 0x33, 0xf9, 0x0, 0x0, 0x0, 0x8f, 0x10, + 0x0, 0x0, 0x0, 0xf, 0x90, 0x0, 0x0, 0x8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, + 0x0, 0x8f, 0x65, 0x55, 0x55, 0x55, 0x5f, 0x90, + 0x0, 0x0, 0x8, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0xf9, 0x0, 0x0, 0x0, 0x8f, 0x66, 0x66, 0x66, + 0x66, 0x6f, 0x90, 0x0, 0x0, 0x8, 0xfe, 0xee, + 0xee, 0xee, 0xee, 0xf9, 0x0, 0x0, 0x0, 0x8f, + 0x10, 0x0, 0x0, 0x0, 0xf, 0x90, 0x0, 0x0, + 0x8, 0xf6, 0x55, 0x55, 0x55, 0x55, 0xf9, 0x0, + 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x90, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x10, 0x1f, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xd0, + 0x1, 0xf7, 0x0, 0x1, 0x30, 0x0, 0x0, 0x5, + 0xf6, 0x0, 0x1f, 0x70, 0x0, 0x2f, 0x30, 0x0, + 0x5, 0xfc, 0x0, 0x1, 0xf7, 0x0, 0x4, 0xf1, + 0x0, 0x4b, 0xfb, 0x10, 0x0, 0xf, 0xd7, 0x67, + 0xce, 0x2, 0xdf, 0xd5, 0x0, 0x0, 0x0, 0x5e, + 0xff, 0xfe, 0x50, 0x8, 0x40, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+89BD "覽" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff, 0xfd, 0x8, 0xf6, @@ -8552,6 +9046,32 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xb, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8AAD "読" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xa8, 0x0, 0x0, 0x0, 0x8, + 0x80, 0x0, 0x0, 0x0, 0x7, 0xd0, 0x0, 0x22, + 0x22, 0xab, 0x22, 0x22, 0x0, 0x44, 0x7f, 0x54, + 0x3d, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xf, 0xff, + 0xff, 0xfd, 0x1, 0x11, 0xaa, 0x11, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x33, 0x3b, 0xb3, 0x33, + 0x0, 0x0, 0x55, 0x55, 0x50, 0x3f, 0xff, 0xff, + 0xff, 0xf1, 0x0, 0x2f, 0xff, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x0, 0x5, 0x55, + 0x55, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x2, + 0xff, 0xff, 0xf3, 0xf2, 0x11, 0x11, 0x11, 0x1f, + 0x30, 0x0, 0x0, 0x0, 0x3f, 0x11, 0x30, 0x13, + 0x0, 0xf3, 0x1, 0xff, 0xff, 0xe0, 0x20, 0x6e, + 0x4, 0xf1, 0x2, 0x0, 0x1f, 0x76, 0x8f, 0x0, + 0x7, 0xe0, 0x4f, 0x10, 0x0, 0x1, 0xf2, 0x3, + 0xf0, 0x0, 0xad, 0x4, 0xf1, 0x4, 0x20, 0x1f, + 0x20, 0x3f, 0x0, 0x1f, 0xa0, 0x4f, 0x10, 0xaa, + 0x1, 0xf6, 0x47, 0xf0, 0xb, 0xf4, 0x4, 0xf1, + 0xb, 0x90, 0x1f, 0xff, 0xfe, 0x2c, 0xf9, 0x0, + 0x3f, 0x86, 0xf7, 0x0, 0x0, 0x0, 0x5, 0xf8, + 0x0, 0x0, 0xbf, 0xfe, 0x20, 0x0, 0x0, 0x0, + 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8ACB "請" */ 0x0, 0x4, 0xa0, 0x0, 0x0, 0x0, 0x4b, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x1, 0x22, 0x27, @@ -8825,6 +9345,32 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x1b, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8D44 "资" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8, 0x30, 0x0, 0x6, 0xe1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xcf, 0x80, 0x0, 0xee, + 0x55, 0x55, 0x55, 0x53, 0x0, 0x0, 0x7f, 0x90, + 0x9f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x44, 0x6f, 0x70, 0x2b, 0x20, 0x7, 0xf2, 0x0, + 0x0, 0x5, 0x7b, 0x90, 0x7, 0xf5, 0x1, 0xd5, + 0x0, 0x0, 0x8, 0xf7, 0x0, 0x4, 0xfd, 0xf6, + 0x0, 0x0, 0x0, 0x1c, 0xf5, 0x0, 0x4b, 0xf9, + 0x7, 0xfd, 0x72, 0x0, 0xe, 0xd2, 0xa, 0xff, + 0xc4, 0x0, 0x2, 0x9f, 0xfd, 0x70, 0x40, 0x0, + 0x76, 0x10, 0x0, 0x0, 0x0, 0x4, 0x93, 0x0, + 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x4f, 0x86, 0x66, 0x76, 0x66, 0x6b, + 0xf0, 0x0, 0x0, 0x4, 0xf3, 0x0, 0xf, 0xa0, + 0x0, 0x8f, 0x0, 0x0, 0x0, 0x4f, 0x30, 0x1, + 0xf8, 0x0, 0x8, 0xf0, 0x0, 0x0, 0x4, 0xf3, + 0x0, 0x8f, 0x30, 0x0, 0x8f, 0x0, 0x0, 0x0, + 0x15, 0x11, 0x9f, 0x8b, 0xe9, 0x33, 0x50, 0x0, + 0x0, 0x0, 0x49, 0xff, 0x70, 0x17, 0xdf, 0xd7, + 0x10, 0x0, 0x2b, 0xff, 0xf9, 0x20, 0x0, 0x0, + 0x4a, 0xff, 0x90, 0x0, 0xda, 0x50, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x9b, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8D85 "超" */ 0x0, 0x0, 0xe, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0x0, 0xde, 0xee, @@ -8900,6 +9446,82 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x66, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0xe, 0x70, 0x0, + /* U+8F09 "載" */ + 0x0, 0x0, 0x0, 0xb5, 0x0, 0x0, 0xe5, 0x3, + 0x0, 0x0, 0x2, 0x33, 0x3e, 0x83, 0x33, 0xe, + 0x66, 0xf5, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, + 0xf2, 0xe7, 0x7, 0xf5, 0x0, 0x0, 0x0, 0xe, + 0x60, 0x0, 0xd, 0x80, 0x7, 0x40, 0xd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, + 0x23, 0x33, 0x34, 0x33, 0x33, 0x3c, 0xb3, 0x33, + 0x31, 0x0, 0x22, 0x22, 0xe7, 0x22, 0x21, 0xaa, + 0x0, 0x30, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, + 0x69, 0xb0, 0xd, 0x80, 0x0, 0x0, 0x0, 0xe5, + 0x0, 0x0, 0x7d, 0x2, 0xf3, 0x0, 0x7, 0xfe, + 0xef, 0xfe, 0xfe, 0x5, 0xf0, 0x8d, 0x0, 0x0, + 0x7a, 0x0, 0xe5, 0x3, 0xe0, 0x3f, 0x1e, 0x70, + 0x0, 0x7, 0xfe, 0xef, 0xfe, 0xfe, 0x0, 0xf9, + 0xe1, 0x0, 0x0, 0x7a, 0x0, 0xe5, 0x3, 0xe0, + 0xd, 0xf7, 0x0, 0x0, 0x6, 0xee, 0xef, 0xfe, + 0xed, 0x0, 0xbe, 0x0, 0x82, 0x3, 0x33, 0x33, + 0xe7, 0x33, 0x31, 0x6f, 0xf0, 0xe, 0x51, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0x7f, 0x61, 0xf2, + 0x0, 0x0, 0x0, 0xe5, 0x0, 0x4f, 0x90, 0x8e, + 0xce, 0x0, 0x0, 0x0, 0xe, 0x50, 0x5, 0xa0, + 0x0, 0xcf, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+8F7D "载" */ + 0x0, 0x0, 0x0, 0x20, 0x0, 0x3, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4f, 0x20, 0x0, 0xad, + 0x5, 0x0, 0x0, 0x0, 0x33, 0x37, 0xf5, 0x33, + 0x29, 0xd1, 0xec, 0x10, 0x0, 0xf, 0xff, 0xff, + 0xff, 0xfa, 0x8e, 0x1, 0xdc, 0x0, 0x0, 0x0, + 0x4, 0xf2, 0x0, 0x8, 0xf0, 0x2, 0xd2, 0x0, + 0x23, 0x33, 0x6f, 0x43, 0x33, 0x9f, 0x33, 0x33, + 0x31, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xa0, 0x12, 0x23, 0x93, 0x22, 0x22, + 0x6f, 0x42, 0x22, 0x21, 0x1, 0x33, 0x8f, 0x43, + 0x33, 0x23, 0xf4, 0x1, 0xe3, 0x0, 0x8f, 0xff, + 0xff, 0xff, 0xfe, 0x1f, 0x60, 0x7f, 0x10, 0x0, + 0x1a, 0xe2, 0x21, 0x11, 0x10, 0xf8, 0xe, 0x90, + 0x0, 0x4, 0xf5, 0xe, 0x90, 0x0, 0xc, 0xb8, + 0xf1, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xa0, + 0x8f, 0xf7, 0x0, 0x0, 0x3, 0x55, 0x5e, 0xb5, + 0x53, 0x5, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x2, + 0xeb, 0x67, 0x70, 0xbf, 0x70, 0x2f, 0x24, 0xee, + 0xff, 0xff, 0xfe, 0xc8, 0xaf, 0xdc, 0x4, 0xf1, + 0x16, 0x54, 0x32, 0xe9, 0x0, 0xaf, 0x66, 0xf2, + 0x7e, 0x0, 0x0, 0x0, 0xe, 0x90, 0x7f, 0x70, + 0xe, 0xde, 0xa0, 0x0, 0x0, 0x0, 0xe9, 0x0, + 0x50, 0x0, 0x3e, 0xd2, 0x0, + + /* U+8FBC "込" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xeb, 0x50, + 0x0, 0x0, 0x0, 0x0, 0xe9, 0x0, 0x0, 0x17, + 0xbf, 0x70, 0x0, 0x0, 0x0, 0x6, 0xf5, 0x0, + 0x0, 0x0, 0x8f, 0x0, 0x0, 0x0, 0x0, 0xc, + 0xe0, 0x0, 0x0, 0x3, 0xf3, 0x0, 0x0, 0x0, + 0x0, 0x2a, 0x0, 0x0, 0x0, 0x6f, 0x60, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xfa, + 0x0, 0x0, 0x0, 0x46, 0x65, 0x0, 0x0, 0x2, + 0xfb, 0xe0, 0x0, 0x0, 0xa, 0xff, 0xe0, 0x0, + 0x0, 0xad, 0x1f, 0x40, 0x0, 0x0, 0x0, 0x8e, + 0x0, 0x0, 0x2f, 0x70, 0xbb, 0x0, 0x0, 0x0, + 0x8, 0xe0, 0x0, 0xb, 0xe0, 0x4, 0xf4, 0x0, + 0x0, 0x0, 0x8e, 0x0, 0x6, 0xf5, 0x0, 0xb, + 0xe1, 0x0, 0x0, 0x8, 0xe0, 0x2, 0xfb, 0x0, + 0x0, 0x2f, 0xb0, 0x0, 0x0, 0x8e, 0x1, 0xee, + 0x10, 0x0, 0x0, 0x5f, 0x90, 0x0, 0x8, 0xe0, + 0x8f, 0x20, 0x0, 0x0, 0x0, 0x9f, 0x70, 0x1, + 0xdf, 0x30, 0x20, 0x0, 0x0, 0x0, 0x0, 0xa2, + 0x0, 0xce, 0xcf, 0x60, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xbf, 0x30, 0xaf, 0xea, 0x87, 0x66, + 0x66, 0x77, 0x86, 0x1c, 0x50, 0x0, 0x39, 0xce, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8FDB "进" */ 0x0, 0x42, 0x0, 0x0, 0x1f, 0x50, 0x0, 0xf6, 0x0, 0x0, 0xd, 0xd1, 0x0, 0x1, 0xf5, 0x0, @@ -9003,6 +9625,33 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+9054 "達" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x9, + 0xd0, 0x0, 0x0, 0x0, 0x1, 0xfb, 0x0, 0x3, + 0x33, 0x3a, 0xd3, 0x33, 0x31, 0x0, 0x0, 0x6f, + 0xa0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, + 0x0, 0x7, 0xf5, 0x0, 0x0, 0x9, 0xd0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x61, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x33, + 0x3f, 0x83, 0x34, 0xf5, 0x33, 0x10, 0x7, 0xbb, + 0xa0, 0x0, 0xd, 0x90, 0x5, 0xf0, 0x0, 0x0, + 0x6, 0xad, 0xe0, 0x8d, 0xdf, 0xfd, 0xde, 0xfd, + 0xdb, 0x0, 0x0, 0x8, 0xe0, 0x35, 0x55, 0x5b, + 0xd5, 0x55, 0x54, 0x0, 0x0, 0x8, 0xe0, 0x0, + 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x8, + 0xe0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, + 0x0, 0x8, 0xe0, 0x1, 0x11, 0x19, 0xd1, 0x11, + 0x10, 0x0, 0x0, 0x8, 0xe0, 0x44, 0x44, 0x4a, + 0xd4, 0x44, 0x44, 0x10, 0x0, 0x8, 0xe0, 0xee, + 0xee, 0xef, 0xfe, 0xee, 0xee, 0x60, 0x0, 0x2f, + 0xf6, 0x0, 0x0, 0x9, 0xd0, 0x0, 0x0, 0x0, + 0x1, 0xd9, 0x4f, 0x80, 0x0, 0x1, 0x10, 0x0, + 0x0, 0x0, 0xb, 0xd0, 0x4, 0xff, 0xa8, 0x66, + 0x55, 0x55, 0x66, 0x71, 0x1d, 0x30, 0x0, 0x17, + 0xbd, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+914D "配" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xdf, 0xff, @@ -9436,9 +10085,10 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x1f, 0xa0, 0x0, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x0, 0x1f, 0xa0, 0x0, 0x0, 0x1, 0xfa, 0x0, 0x0, 0x0, 0x1f, 0xa0, 0x0, - 0x0, 0x1, 0xfd, 0x88, 0x88, 0x88, 0x9f, 0xa0, + 0x0, 0x1, 0xfa, 0x0, 0x0, 0x0, 0x1f, 0xa0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xa0, 0x0, + 0xa0, 0x0, 0x0, 0x0, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x50, 0x0, /* U+AC70 "거" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x50, @@ -9460,6 +10110,26 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf0, + /* U+ACAC "견" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf0, + 0x2d, 0xdd, 0xdd, 0xdd, 0xd0, 0x0, 0xc, 0xf0, + 0x2b, 0xbb, 0xbb, 0xbe, 0xf0, 0x0, 0xc, 0xf0, + 0x0, 0x0, 0x0, 0xc, 0xf5, 0xee, 0xef, 0xf0, + 0x0, 0x0, 0x0, 0xf, 0xc3, 0xaa, 0xae, 0xf0, + 0x0, 0x0, 0x0, 0x8f, 0x60, 0x0, 0xc, 0xf0, + 0x0, 0x0, 0x6, 0xfd, 0x0, 0x0, 0xc, 0xf0, + 0x0, 0x1, 0xaf, 0xd1, 0x8, 0xdd, 0xdf, 0xf0, + 0x3, 0x9f, 0xfa, 0x10, 0x7, 0xbb, 0xbf, 0xf0, + 0x2f, 0xfb, 0x30, 0x0, 0x0, 0x0, 0xc, 0xf0, + 0x7, 0x20, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf0, + 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0xc, 0xf0, + 0x0, 0x0, 0xaf, 0x10, 0x0, 0x0, 0xc, 0xf0, + 0x0, 0x0, 0xaf, 0x10, 0x0, 0x0, 0x3, 0x40, + 0x0, 0x0, 0xaf, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xaf, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xaf, 0x98, 0x88, 0x88, 0x88, 0x85, + 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xf9, + /* U+ACB0 "결" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xb7, 0x0, 0x89, 0x99, 0x99, 0x99, 0x60, 0x0, 0x2f, @@ -9566,6 +10236,27 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xd0, 0x0, + /* U+AD6C "구" */ + 0x0, 0x69, 0x99, 0x99, 0x99, 0x99, 0x98, 0x0, + 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xaf, 0x20, 0x0, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xb7, 0x88, 0x88, 0x88, + 0xcf, 0xa8, 0x88, 0x88, 0x85, 0x0, 0x0, 0x0, + 0x7, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x40, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0x40, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, + 0x0, + /* U+ADF8 "그" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, @@ -9661,6 +10352,26 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xf9, 0x1, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfa, + /* U+B155 "녕" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x7, + 0x80, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf1, 0xcf, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x1c, 0xf0, + 0x0, 0x0, 0x8, 0x88, 0x8d, 0xf1, 0xcf, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xbf, 0x1c, 0xf0, 0x0, + 0x0, 0x9, 0x99, 0x9d, 0xf1, 0xcf, 0x0, 0x0, + 0x0, 0xff, 0xff, 0xff, 0x1c, 0xf0, 0x0, 0x1, + 0x20, 0x0, 0xb, 0xf1, 0xcf, 0xbc, 0xdf, 0xfc, + 0x0, 0x0, 0xbf, 0x1b, 0xed, 0xcb, 0x97, 0x50, + 0x0, 0xb, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6a, 0x0, 0x0, 0x0, 0x3a, 0xef, 0xfe, + 0xb3, 0x0, 0x0, 0x0, 0x5f, 0xfa, 0x88, 0xaf, + 0xf6, 0x0, 0x0, 0xf, 0xe2, 0x0, 0x0, 0x1e, + 0xf0, 0x0, 0x3, 0xf9, 0x0, 0x0, 0x0, 0x9f, + 0x30, 0x0, 0x2f, 0xb0, 0x0, 0x0, 0xa, 0xf2, + 0x0, 0x0, 0xdf, 0x70, 0x0, 0x7, 0xfd, 0x0, + 0x0, 0x2, 0xdf, 0xfe, 0xef, 0xfd, 0x20, 0x0, + 0x0, 0x0, 0x59, 0xaa, 0x95, 0x0, 0x0, + /* U+B294 "는" */ 0x0, 0x16, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -9894,6 +10605,26 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x39, 0x99, 0x99, 0x99, 0x99, 0x99, 0x30, 0x0, + /* U+B529 "딩" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x7, + 0x99, 0x99, 0x99, 0x95, 0x0, 0xa, 0xf1, 0xdf, + 0xff, 0xff, 0xff, 0x80, 0x0, 0xaf, 0x1d, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, 0xdf, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xaf, 0x1d, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0xa, 0xf1, 0xdf, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xaf, 0x1d, 0xf4, 0x55, 0x67, + 0x8a, 0xc1, 0xa, 0xf1, 0xdf, 0xff, 0xff, 0xfe, + 0xdb, 0x20, 0xaf, 0x13, 0x33, 0x32, 0x20, 0x0, + 0x0, 0xa, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x58, 0x0, 0x0, 0x0, 0x5c, 0xff, 0xfe, + 0xa3, 0x0, 0x0, 0x0, 0xaf, 0xe9, 0x78, 0xaf, + 0xf6, 0x0, 0x0, 0x4f, 0xb0, 0x0, 0x0, 0x2e, + 0xf0, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0x9f, + 0x30, 0x0, 0x6f, 0x60, 0x0, 0x0, 0xa, 0xf2, + 0x0, 0x1, 0xfe, 0x50, 0x0, 0x17, 0xfd, 0x0, + 0x0, 0x4, 0xef, 0xfe, 0xef, 0xfd, 0x20, 0x0, + 0x0, 0x0, 0x69, 0xaa, 0x84, 0x0, 0x0, + /* U+B808 "레" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x0, 0x53, 0x14, 0x44, 0x44, 0x40, 0x0, 0xaf, 0x0, 0xfb, @@ -9914,6 +10645,26 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x0, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfb, + /* U+B824 "려" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x50, + 0x1, 0x11, 0x11, 0x11, 0x0, 0x0, 0xa, 0xf1, + 0xf, 0xff, 0xff, 0xff, 0xa0, 0x0, 0xa, 0xf1, + 0x5, 0x55, 0x55, 0x6f, 0xa0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x0, 0x2f, 0xa5, 0xff, 0xff, 0xf1, + 0x0, 0x0, 0x0, 0x2f, 0xa2, 0x77, 0x7d, 0xf1, + 0x9, 0x99, 0x99, 0xaf, 0xa0, 0x0, 0xa, 0xf1, + 0x1f, 0xfd, 0xdd, 0xdd, 0x80, 0x0, 0xa, 0xf1, + 0x1f, 0xb0, 0x0, 0x0, 0x2, 0x77, 0x7d, 0xf1, + 0x1f, 0xb0, 0x0, 0x0, 0x5, 0xff, 0xff, 0xf1, + 0x1f, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, + 0x1f, 0xc5, 0x56, 0x78, 0xbb, 0x0, 0xa, 0xf1, + 0x1f, 0xff, 0xff, 0xff, 0xeb, 0x0, 0xa, 0xf1, + 0x3, 0x33, 0x32, 0x10, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, + /* U+B85C "로" */ 0x0, 0x39, 0x99, 0x99, 0x99, 0x99, 0x99, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, @@ -10061,6 +10812,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+BC1C "발" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x0, + 0x0, 0x9e, 0x20, 0x0, 0x1, 0xe9, 0x0, 0xaf, + 0x10, 0x0, 0xaf, 0x20, 0x0, 0x2, 0xfa, 0x0, + 0xaf, 0x10, 0x0, 0xaf, 0x87, 0x77, 0x78, 0xfa, + 0x0, 0xaf, 0x10, 0x0, 0xaf, 0xff, 0xff, 0xff, + 0xfa, 0x0, 0xaf, 0xff, 0xf0, 0xaf, 0x20, 0x0, + 0x2, 0xfa, 0x0, 0xaf, 0xa9, 0x90, 0xaf, 0x20, + 0x0, 0x2, 0xfa, 0x0, 0xaf, 0x10, 0x0, 0xaf, + 0x98, 0x88, 0x89, 0xfa, 0x0, 0xaf, 0x10, 0x0, + 0xaf, 0xff, 0xff, 0xff, 0xfa, 0x0, 0xaf, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d, + 0x10, 0x0, 0x0, 0x3, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x10, 0x0, 0x0, 0x2, 0x33, 0x33, + 0x33, 0x33, 0xbf, 0x10, 0x0, 0x0, 0x1, 0x33, + 0x33, 0x33, 0x33, 0xbf, 0x10, 0x0, 0x0, 0xa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, + 0xa, 0xf5, 0x44, 0x44, 0x44, 0x44, 0x0, 0x0, + 0x0, 0xa, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0x0, 0x0, 0x5, 0x88, 0x88, 0x88, 0x88, + 0x88, 0x80, 0x0, + /* U+BC30 "배" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x0, 0x53, 0x6, 0x40, 0x0, 0x46, 0x0, 0xfc, 0x0, 0xfb, @@ -10368,6 +11143,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfa, + /* U+C14B "셋" */ + 0x0, 0x0, 0x1, 0x0, 0x0, 0xf, 0xd0, 0x1f, + 0x90, 0x0, 0x0, 0x8f, 0x30, 0x0, 0xf, 0xe0, + 0x1f, 0xa0, 0x0, 0x0, 0x9f, 0x30, 0x0, 0xf, + 0xe0, 0x1f, 0xa0, 0x0, 0x0, 0xaf, 0x40, 0x35, + 0x5f, 0xe0, 0x1f, 0xa0, 0x0, 0x0, 0xdf, 0x70, + 0xaf, 0xff, 0xe0, 0x1f, 0xa0, 0x0, 0x3, 0xff, + 0xd0, 0x12, 0x2f, 0xe0, 0x1f, 0xa0, 0x0, 0xc, + 0xf7, 0xf7, 0x0, 0xf, 0xe0, 0x1f, 0xa0, 0x0, + 0xbf, 0x70, 0xbf, 0x70, 0xf, 0xe0, 0x1f, 0xa0, + 0x1d, 0xf8, 0x0, 0xb, 0xf9, 0xf, 0xe0, 0x1f, + 0xa0, 0xc, 0x60, 0x0, 0x0, 0x85, 0xf, 0xe0, + 0x1f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x10, 0x1f, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xe3, 0x0, 0x1f, 0xa0, 0x0, 0x0, 0x0, 0x0, + 0x9, 0xf4, 0x0, 0x5, 0x30, 0x0, 0x0, 0x0, + 0x0, 0xd, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xef, 0x30, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x19, 0xfc, 0x2e, 0xf7, 0x0, 0x0, + 0x0, 0x0, 0x49, 0xff, 0xa0, 0x2, 0xcf, 0xe9, + 0x40, 0x0, 0x0, 0xcf, 0xb4, 0x0, 0x0, 0x5, + 0xbf, 0xe0, 0x0, 0x0, 0x31, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x30, + /* U+C18C "소" */ 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x40, 0x0, 0x0, @@ -10538,6 +11337,29 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xf0, 0x0, 0x0, 0x58, 0x88, 0x88, 0x88, 0x88, 0x88, 0x0, + /* U+C548 "안" */ + 0x0, 0x0, 0x33, 0x10, 0x0, 0x0, 0x1f, 0xa0, + 0x0, 0x1, 0xaf, 0xff, 0xfb, 0x10, 0x0, 0x1f, + 0xa0, 0x0, 0xc, 0xfb, 0x66, 0xaf, 0xd0, 0x0, + 0x1f, 0xa0, 0x0, 0x5f, 0x90, 0x0, 0x7, 0xf7, + 0x0, 0x1f, 0xa0, 0x0, 0x9f, 0x30, 0x0, 0x1, + 0xfb, 0x0, 0x1f, 0xa0, 0x0, 0xaf, 0x10, 0x0, + 0x0, 0xfc, 0x0, 0x1f, 0xd7, 0x74, 0x8f, 0x40, + 0x0, 0x2, 0xfa, 0x0, 0x1f, 0xff, 0xfa, 0x3f, + 0xc1, 0x0, 0xb, 0xf5, 0x0, 0x1f, 0xa1, 0x10, + 0x8, 0xff, 0xbb, 0xef, 0xa0, 0x0, 0x1f, 0xa0, + 0x0, 0x0, 0x4b, 0xdd, 0xb5, 0x0, 0x0, 0x1f, + 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xa0, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, + 0x0, 0x1f, 0xa0, 0x0, 0x0, 0xa, 0xf2, 0x0, + 0x0, 0x0, 0x1f, 0xa0, 0x0, 0x0, 0xa, 0xf2, + 0x0, 0x0, 0x0, 0x4, 0x20, 0x0, 0x0, 0xa, + 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xa, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xf9, 0x88, 0x88, 0x88, 0x88, 0x70, + 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xd0, 0x0, + /* U+C5C5 "업" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xc0, 0x0, 0x7d, 0xff, 0xe7, 0x0, 0x0, 0xa, 0xf1, @@ -10705,6 +11527,29 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x4a, 0xde, 0xee, 0xc9, 0x30, 0x0, 0x0, + /* U+C6B4 "운" */ + 0x0, 0x0, 0x3, 0x68, 0x88, 0x62, 0x0, 0x0, + 0x0, 0x0, 0x3d, 0xff, 0xff, 0xff, 0xfb, 0x10, + 0x0, 0x0, 0x1e, 0xf6, 0x10, 0x0, 0x28, 0xfc, + 0x0, 0x0, 0x6, 0xf7, 0x0, 0x0, 0x0, 0xa, + 0xf2, 0x0, 0x0, 0x7f, 0x50, 0x0, 0x0, 0x0, + 0x9f, 0x30, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, + 0x2e, 0xf0, 0x0, 0x0, 0x9, 0xff, 0xb9, 0x89, + 0xbf, 0xf5, 0x0, 0x0, 0x0, 0x4, 0xad, 0xff, + 0xed, 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x85, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, + 0x0, 0x1f, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x0, 0x1, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xf9, 0x0, 0x1f, 0xb0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0x90, 0x0, 0x74, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x0, 0x0, 0x17, 0x77, 0x77, 0x77, 0x77, 0x77, + 0x30, 0x0, + /* U+C6CC "워" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x53, 0x0, 0x6, 0xdf, 0xfc, 0x70, 0x0, 0x2, 0xfa, @@ -10725,6 +11570,29 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0xd, 0xf0, 0x0, 0x0, 0x2, 0xfa, 0x0, 0x0, 0xd, 0xf0, 0x0, 0x0, 0x2, 0xfa, + /* U+C744 "을" */ + 0x0, 0x0, 0x4, 0x78, 0x88, 0x63, 0x0, 0x0, + 0x0, 0x0, 0x5e, 0xff, 0xff, 0xff, 0xfd, 0x30, + 0x0, 0x0, 0x2f, 0xd4, 0x10, 0x0, 0x16, 0xfe, + 0x0, 0x0, 0x6, 0xf5, 0x0, 0x0, 0x0, 0x9, + 0xf3, 0x0, 0x0, 0x5f, 0x90, 0x0, 0x0, 0x0, + 0xcf, 0x10, 0x0, 0x0, 0xdf, 0xc9, 0x77, 0x79, + 0xef, 0x90, 0x0, 0x0, 0x0, 0x7c, 0xff, 0xff, + 0xeb, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x89, 0x99, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x6e, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x70, 0x0, 0x0, 0x6f, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xd, 0xe0, 0x0, 0x0, + 0x28, 0x88, 0x88, 0x88, 0x88, 0xee, 0x0, 0x0, + 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, + 0x0, 0x5f, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5, 0xfb, 0x88, 0x88, 0x88, 0x88, 0x84, + 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x70, 0x0, + /* U+C74C "음" */ 0x0, 0x0, 0x4, 0x78, 0x88, 0x63, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xff, 0xff, 0xff, 0xfc, 0x20, @@ -10832,6 +11700,31 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x57, 0x77, 0x77, 0x77, 0x77, 0x70, + /* U+C7A0 "잠" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xa1, + 0x0, 0x0, 0x69, 0x99, 0x99, 0x99, 0x99, 0x0, + 0xaf, 0x10, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, + 0xf1, 0xa, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xaf, + 0x20, 0x0, 0x0, 0xaf, 0x10, 0x0, 0x0, 0x0, + 0xd, 0xf4, 0x0, 0x0, 0xa, 0xfa, 0x99, 0x0, + 0x0, 0x3, 0xff, 0xa0, 0x0, 0x0, 0xaf, 0xff, + 0xf1, 0x0, 0x2, 0xdf, 0xbf, 0x80, 0x0, 0xa, + 0xf1, 0x0, 0x0, 0x6, 0xff, 0x50, 0xbf, 0xc4, + 0x0, 0xaf, 0x10, 0x0, 0xd, 0xfd, 0x30, 0x0, + 0x7e, 0xf2, 0xa, 0xf1, 0x0, 0x0, 0x56, 0x0, + 0x0, 0x0, 0x4, 0x0, 0xaf, 0x10, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x20, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x7f, 0xb9, 0x99, 0x99, + 0x9d, 0xf2, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, + 0x0, 0x0, 0xaf, 0x20, 0x0, 0x0, 0x0, 0x7f, + 0x40, 0x0, 0x0, 0xa, 0xf2, 0x0, 0x0, 0x0, + 0x7, 0xf4, 0x0, 0x0, 0x0, 0xaf, 0x20, 0x0, + 0x0, 0x0, 0x7f, 0x50, 0x0, 0x0, 0xa, 0xf2, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x20, 0x0, 0x0, 0x0, 0x38, 0x88, 0x88, + 0x88, 0x88, 0x81, 0x0, 0x0, + /* U+C804 "전" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, 0x5e, 0xee, 0xee, 0xee, 0xee, 0x0, 0xa, 0xf1, @@ -10917,6 +11810,27 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d, 0x10, 0x0, + /* U+C8FC "주" */ + 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, + 0x0, 0x5, 0x99, 0x99, 0xcf, 0xb9, 0x99, 0x93, + 0x0, 0x0, 0x0, 0x0, 0x9, 0xf5, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xa0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xef, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xdf, 0xa2, 0xdf, + 0xc4, 0x0, 0x0, 0x0, 0x9f, 0xfd, 0x50, 0x0, + 0x8f, 0xfe, 0x70, 0x0, 0x8, 0xa4, 0x0, 0x0, + 0x0, 0x6, 0xb5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x88, 0x85, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, + 0x0, 0x8f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8f, 0x40, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8, 0xf4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x8f, 0x40, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x8, 0xf4, 0x0, 0x0, 0x0, + 0x0, + /* U+C911 "중" */ 0x0, 0x48, 0x88, 0x88, 0x88, 0x88, 0x88, 0x20, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, @@ -11066,6 +11980,26 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x4a, 0xde, 0xee, 0xc9, 0x20, 0x0, 0x0, + /* U+CE5C "친" */ + 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0xd, 0xe0, 0x0, 0x0, 0xa, 0xf1, + 0xa, 0xaa, 0xae, 0xfa, 0xaa, 0x80, 0xa, 0xf1, + 0x1e, 0xee, 0xef, 0xfe, 0xee, 0xb0, 0xa, 0xf1, + 0x0, 0x0, 0xd, 0xf0, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0xf, 0xf1, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x6f, 0xf8, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x2, 0xfc, 0xaf, 0x50, 0x0, 0xa, 0xf1, + 0x0, 0x4e, 0xe2, 0x1c, 0xf8, 0x0, 0xa, 0xf1, + 0x9, 0xfd, 0x20, 0x0, 0xaf, 0xe1, 0xa, 0xf1, + 0xe, 0xa1, 0x0, 0x0, 0x4, 0x90, 0xa, 0xf1, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x8e, 0x20, 0x0, 0x0, 0xa, 0xf1, + 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x1, 0x10, + 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x9f, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x9f, 0x98, 0x88, 0x88, 0x88, 0x86, + 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xfb, + /* U+CE74 "카" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, @@ -11205,8 +12139,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0xbf, 0x10, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x0, 0xbf, 0x0, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x0, 0xbf, 0x0, 0x0, 0x0, 0xa, 0xf1, - 0x0, 0x0, 0xbf, 0x88, 0x88, 0x88, 0x8d, 0xf1, + 0x0, 0x0, 0xbf, 0x10, 0x0, 0x0, 0xa, 0xf1, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0x0, 0x0, 0x58, 0x88, 0x88, 0x88, 0x88, 0x80, /* U+D2B8 "트" */ 0x0, 0x38, 0x88, 0x88, 0x88, 0x88, 0x88, 0x20, @@ -11538,6 +12473,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x8f, 0x40, 0x0, 0x0, 0x0, + /* U+FF01 "!" */ + 0x9, 0xf0, 0xa, 0xf0, 0x9, 0xf0, 0x9, 0xf0, + 0x9, 0xe0, 0x8, 0xe0, 0x8, 0xe0, 0x8, 0xd0, + 0x8, 0xd0, 0x7, 0xd0, 0x2, 0x40, 0x4, 0x50, + 0x1f, 0xf6, 0xf, 0xf4, 0x0, 0x10, + /* U+FF0C "," */ 0x0, 0x28, 0x30, 0x5, 0xf4, 0x0, 0x9f, 0x0, 0xe, 0x90, 0x6, 0xf1, 0x0, 0xa5, 0x0, @@ -11764,481 +12705,524 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { {.bitmap_index = 14224, .adv_w = 153, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, {.bitmap_index = 14284, .adv_w = 153, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 14344, .adv_w = 109, .box_w = 7, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14397, .adv_w = 162, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14472, .adv_w = 162, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14547, .adv_w = 162, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14622, .adv_w = 211, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 14707, .adv_w = 153, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 14767, .adv_w = 108, .box_w = 7, .box_h = 18, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 14830, .adv_w = 88, .box_w = 3, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 14851, .adv_w = 213, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 14949, .adv_w = 199, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15026, .adv_w = 198, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15096, .adv_w = 159, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15159, .adv_w = 181, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 15229, .adv_w = 236, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15313, .adv_w = 266, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15411, .adv_w = 227, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15495, .adv_w = 238, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15586, .adv_w = 227, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15670, .adv_w = 191, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15740, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15817, .adv_w = 169, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 15894, .adv_w = 209, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 15971, .adv_w = 196, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16026, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16114, .adv_w = 186, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16169, .adv_w = 123, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16208, .adv_w = 195, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 16298, .adv_w = 185, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16353, .adv_w = 235, .box_w = 15, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 16436, .adv_w = 156, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 16486, .adv_w = 206, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16547, .adv_w = 206, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16630, .adv_w = 160, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16680, .adv_w = 189, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 16735, .adv_w = 235, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16801, .adv_w = 205, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16862, .adv_w = 198, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16923, .adv_w = 205, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 16984, .adv_w = 203, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 17067, .adv_w = 159, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17117, .adv_w = 145, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 17167, .adv_w = 169, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 17250, .adv_w = 288, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 17402, .adv_w = 165, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 17463, .adv_w = 211, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 17553, .adv_w = 194, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17608, .adv_w = 286, .box_w = 16, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17696, .adv_w = 251, .box_w = 13, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17768, .adv_w = 182, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17823, .adv_w = 268, .box_w = 15, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17906, .adv_w = 167, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 17956, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 17979, .adv_w = 86, .box_w = 7, .box_h = 15, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 18032, .adv_w = 194, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 18092, .adv_w = 174, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18152, .adv_w = 206, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 18218, .adv_w = 157, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18272, .adv_w = 160, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18332, .adv_w = 174, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18392, .adv_w = 178, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18452, .adv_w = 283, .box_w = 16, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 18548, .adv_w = 206, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 18614, .adv_w = 207, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 18680, .adv_w = 196, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 18740, .adv_w = 203, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18806, .adv_w = 194, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18878, .adv_w = 201, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 18944, .adv_w = 201, .box_w = 11, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19032, .adv_w = 204, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 19092, .adv_w = 224, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19170, .adv_w = 224, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19274, .adv_w = 205, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19346, .adv_w = 199, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19412, .adv_w = 186, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 19466, .adv_w = 142, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19520, .adv_w = 186, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 19574, .adv_w = 138, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19616, .adv_w = 188, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 19688, .adv_w = 198, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19754, .adv_w = 186, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 19814, .adv_w = 188, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 19886, .adv_w = 123, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19921, .adv_w = 0, .box_w = 9, .box_h = 5, .ofs_x = -8, .ofs_y = 12}, - {.bitmap_index = 19944, .adv_w = 125, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 19986, .adv_w = 125, .box_w = 13, .box_h = 17, .ofs_x = -6, .ofs_y = 0}, - {.bitmap_index = 20097, .adv_w = 0, .box_w = 10, .box_h = 5, .ofs_x = -11, .ofs_y = 12}, - {.bitmap_index = 20122, .adv_w = 0, .box_w = 10, .box_h = 6, .ofs_x = -11, .ofs_y = 12}, - {.bitmap_index = 20152, .adv_w = 0, .box_w = 10, .box_h = 4, .ofs_x = -11, .ofs_y = 12}, - {.bitmap_index = 20172, .adv_w = 0, .box_w = 10, .box_h = 6, .ofs_x = -11, .ofs_y = 12}, - {.bitmap_index = 20202, .adv_w = 0, .box_w = 5, .box_h = 5, .ofs_x = -6, .ofs_y = -6}, - {.bitmap_index = 20215, .adv_w = 0, .box_w = 8, .box_h = 5, .ofs_x = -9, .ofs_y = -6}, - {.bitmap_index = 20235, .adv_w = 99, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 20265, .adv_w = 193, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 20331, .adv_w = 113, .box_w = 9, .box_h = 18, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 20412, .adv_w = 113, .box_w = 8, .box_h = 18, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 20484, .adv_w = 113, .box_w = 7, .box_h = 19, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 20551, .adv_w = 0, .box_w = 8, .box_h = 6, .ofs_x = -10, .ofs_y = 12}, - {.bitmap_index = 20575, .adv_w = 0, .box_w = 3, .box_h = 4, .ofs_x = -4, .ofs_y = 13}, - {.bitmap_index = 20581, .adv_w = 0, .box_w = 7, .box_h = 5, .ofs_x = -7, .ofs_y = 12}, - {.bitmap_index = 20599, .adv_w = 0, .box_w = 7, .box_h = 5, .ofs_x = -7, .ofs_y = 13}, - {.bitmap_index = 20617, .adv_w = 196, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 20692, .adv_w = 196, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 20772, .adv_w = 196, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 20866, .adv_w = 196, .box_w = 10, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 20951, .adv_w = 196, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 21046, .adv_w = 196, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21136, .adv_w = 185, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21216, .adv_w = 178, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21306, .adv_w = 185, .box_w = 12, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21408, .adv_w = 185, .box_w = 11, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21507, .adv_w = 185, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 21602, .adv_w = 86, .box_w = 3, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 21631, .adv_w = 198, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21725, .adv_w = 198, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21819, .adv_w = 198, .box_w = 11, .box_h = 19, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 21924, .adv_w = 198, .box_w = 11, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 22029, .adv_w = 206, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 22119, .adv_w = 206, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 22209, .adv_w = 206, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 22305, .adv_w = 206, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 22401, .adv_w = 196, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 22476, .adv_w = 211, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 22580, .adv_w = 315, .box_w = 5, .box_h = 5, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 22593, .adv_w = 315, .box_w = 6, .box_h = 5, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 22608, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 22736, .adv_w = 315, .box_w = 13, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 22853, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 23024, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 23177, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 23348, .adv_w = 315, .box_w = 14, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 23474, .adv_w = 315, .box_w = 12, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 23582, .adv_w = 315, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 23717, .adv_w = 315, .box_w = 14, .box_h = 17, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 23836, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 23989, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 24151, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 24313, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 24475, .adv_w = 315, .box_w = 14, .box_h = 12, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 24559, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 24687, .adv_w = 315, .box_w = 19, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 24830, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 24992, .adv_w = 315, .box_w = 16, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 25128, .adv_w = 315, .box_w = 15, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 25263, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 25407, .adv_w = 315, .box_w = 12, .box_h = 18, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 25515, .adv_w = 315, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 25685, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 25838, .adv_w = 315, .box_w = 18, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 25982, .adv_w = 315, .box_w = 16, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 26118, .adv_w = 315, .box_w = 13, .box_h = 14, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 26209, .adv_w = 315, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 26337, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 26481, .adv_w = 315, .box_w = 17, .box_h = 12, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 26583, .adv_w = 315, .box_w = 14, .box_h = 14, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 26681, .adv_w = 315, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 26816, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 26969, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 27113, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 27294, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 27456, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 27637, .adv_w = 315, .box_w = 16, .box_h = 16, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 27765, .adv_w = 315, .box_w = 16, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 27901, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 28029, .adv_w = 315, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 28165, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 28309, .adv_w = 315, .box_w = 13, .box_h = 13, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 28394, .adv_w = 315, .box_w = 17, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 28539, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 28720, .adv_w = 315, .box_w = 11, .box_h = 17, .ofs_x = 6, .ofs_y = -2}, - {.bitmap_index = 28814, .adv_w = 315, .box_w = 11, .box_h = 17, .ofs_x = 6, .ofs_y = -2}, - {.bitmap_index = 28908, .adv_w = 315, .box_w = 17, .box_h = 12, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 29010, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 29163, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 29325, .adv_w = 315, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 29438, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 29609, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 29771, .adv_w = 315, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 29921, .adv_w = 315, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 30040, .adv_w = 315, .box_w = 14, .box_h = 17, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 30159, .adv_w = 315, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 30295, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 30423, .adv_w = 315, .box_w = 14, .box_h = 15, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 30528, .adv_w = 315, .box_w = 14, .box_h = 11, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 30605, .adv_w = 315, .box_w = 12, .box_h = 13, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 30683, .adv_w = 315, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 30811, .adv_w = 315, .box_w = 11, .box_h = 18, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 30910, .adv_w = 315, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 31070, .adv_w = 315, .box_w = 14, .box_h = 16, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 31182, .adv_w = 315, .box_w = 14, .box_h = 15, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 31287, .adv_w = 315, .box_w = 14, .box_h = 15, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 31392, .adv_w = 315, .box_w = 16, .box_h = 15, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 31512, .adv_w = 315, .box_w = 16, .box_h = 2, .ofs_x = 2, .ofs_y = 6}, - {.bitmap_index = 31528, .adv_w = 315, .box_w = 19, .box_h = 3, .ofs_x = 0, .ofs_y = 6}, - {.bitmap_index = 31557, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 31710, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 31872, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 32024, .adv_w = 315, .box_w = 17, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 32169, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 32349, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 32539, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32720, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 32901, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 33081, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 33261, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 33432, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 33622, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 33784, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 33936, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 34116, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 34296, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 34467, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 34638, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 34828, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 35008, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 35198, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 35379, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 35550, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 35721, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 35911, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 36064, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 36235, .adv_w = 315, .box_w = 17, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 36397, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 36568, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 36730, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 36920, .adv_w = 315, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 37090, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 37242, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 37442, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37613, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 37794, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 37984, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 38165, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 38336, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 38498, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 38688, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 38868, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 39058, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 39229, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 39419, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 39609, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 39790, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 39970, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 40123, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 40313, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 40503, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 40674, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 40845, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 41016, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 41187, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 41387, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 41577, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 41767, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 41957, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 42128, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 42308, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 42489, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 42651, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 42831, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 43012, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 43183, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 43364, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 43535, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 43716, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 43906, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 44077, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 44267, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 44457, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 44657, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 44847, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 45018, .adv_w = 315, .box_w = 17, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 45180, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 45333, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 45514, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 45695, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 45866, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 46047, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 46228, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 46399, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 46589, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 46779, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 46969, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 47159, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 47340, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 47521, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 47711, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 47901, .adv_w = 315, .box_w = 19, .box_h = 16, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 48053, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 48234, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 48405, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 48595, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 48757, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 48919, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 49081, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 49271, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 49461, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 49642, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 49823, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 49985, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 50166, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 50347, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 50537, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 50718, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 50908, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 51108, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 51270, .adv_w = 315, .box_w = 17, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 51432, .adv_w = 315, .box_w = 20, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 51612, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 51802, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 51983, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 52183, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 52373, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 52554, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 52744, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 52915, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 53105, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 53295, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 53485, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 53666, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 53856, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 54046, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 54217, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 54407, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 54578, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 54759, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 54949, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 55101, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 55301, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 55491, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 55671, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 55852, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 56033, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 56213, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 56403, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 56593, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 56793, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 56983, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 57154, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 57344, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 57515, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 57695, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 57876, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 58057, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 58238, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 58418, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 58599, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 58770, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 58941, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 59131, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 59302, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 59473, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 59663, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 59844, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 60025, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 60206, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 60387, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 60577, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 60767, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 60957, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 61128, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 61299, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 61470, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 61651, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 61832, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 61976, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 62120, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 62264, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 62416, .adv_w = 315, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 62576, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 62728, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 62899, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 63080, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 63261, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 63432, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 63603, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 63765, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 63927, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 64089, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 64233, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 64395, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 64547, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 64666, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 64819, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 64981, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 65100, .adv_w = 301, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 65235, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 65354, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 65507, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 65651, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 65813, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 65975, .adv_w = 301, .box_w = 14, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 66101, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 66263, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 66434, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 66578, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 66706, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 66858, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 67020, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 67139, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 67301, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 67445, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 67573, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 67726, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 67888, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 68050, .adv_w = 301, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 68185, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 68356, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 68484, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 68628, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 68772, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 68900, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 69062, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 69215, .adv_w = 301, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 69350, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 69521, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 69702, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 69883, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 70036, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 70189, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 70360, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 70512, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 70665, .adv_w = 301, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 70801, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 70963, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 71125, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 71278, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 71397, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 71559, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 71703, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 71865, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 72017, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 72179, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 72323, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 72467, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 72595, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 72766, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 72894, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 73056, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 73200, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 73362, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 73524, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 73668, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 73812, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 73964, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 74108, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 74260, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 74412, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 74574, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 74736, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 74880, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 75024, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 75195, .adv_w = 301, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 75331, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 75475, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 75637, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 75799, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 75952, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 76096, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 76215, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 76359, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 76503, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 76647, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 76775, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 76946, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 77099, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 77270, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 77441, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 77622, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 77793, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 77974, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 78145, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 78316, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 78497, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 78668, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 78849, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 79002, .adv_w = 315, .box_w = 5, .box_h = 6, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 79017, .adv_w = 315, .box_w = 4, .box_h = 12, .ofs_x = 3, .ofs_y = -1} + {.bitmap_index = 14397, .adv_w = 196, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 14477, .adv_w = 162, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14552, .adv_w = 162, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14627, .adv_w = 162, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 14702, .adv_w = 211, .box_w = 13, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 14787, .adv_w = 153, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 14847, .adv_w = 108, .box_w = 7, .box_h = 18, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 14910, .adv_w = 88, .box_w = 3, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 14931, .adv_w = 213, .box_w = 14, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 15029, .adv_w = 199, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15106, .adv_w = 198, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15176, .adv_w = 159, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15239, .adv_w = 181, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 15309, .adv_w = 236, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15393, .adv_w = 266, .box_w = 14, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15491, .adv_w = 227, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15575, .adv_w = 238, .box_w = 13, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15666, .adv_w = 227, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15750, .adv_w = 191, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15820, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 15897, .adv_w = 169, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 15974, .adv_w = 209, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16051, .adv_w = 196, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16106, .adv_w = 198, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16194, .adv_w = 186, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16249, .adv_w = 123, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16288, .adv_w = 195, .box_w = 12, .box_h = 15, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 16378, .adv_w = 185, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16433, .adv_w = 235, .box_w = 15, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 16516, .adv_w = 156, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 16566, .adv_w = 206, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16627, .adv_w = 206, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16710, .adv_w = 160, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16760, .adv_w = 189, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 16815, .adv_w = 235, .box_w = 12, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16881, .adv_w = 205, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 16942, .adv_w = 198, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17003, .adv_w = 205, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17064, .adv_w = 203, .box_w = 11, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 17147, .adv_w = 159, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17197, .adv_w = 145, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 17247, .adv_w = 169, .box_w = 11, .box_h = 15, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 17330, .adv_w = 288, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 17482, .adv_w = 165, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 17543, .adv_w = 211, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 17633, .adv_w = 194, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17688, .adv_w = 286, .box_w = 16, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17776, .adv_w = 251, .box_w = 13, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17848, .adv_w = 182, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17903, .adv_w = 268, .box_w = 15, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 17986, .adv_w = 167, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18036, .adv_w = 86, .box_w = 3, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18059, .adv_w = 86, .box_w = 7, .box_h = 15, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 18112, .adv_w = 194, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18172, .adv_w = 174, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18232, .adv_w = 206, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18298, .adv_w = 157, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18352, .adv_w = 160, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18412, .adv_w = 184, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18478, .adv_w = 174, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18538, .adv_w = 178, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18598, .adv_w = 283, .box_w = 16, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18694, .adv_w = 206, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18760, .adv_w = 207, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18826, .adv_w = 196, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 18886, .adv_w = 203, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 18952, .adv_w = 194, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19024, .adv_w = 201, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19090, .adv_w = 201, .box_w = 11, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19178, .adv_w = 204, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 19238, .adv_w = 224, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19316, .adv_w = 224, .box_w = 13, .box_h = 16, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19420, .adv_w = 205, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19492, .adv_w = 199, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19558, .adv_w = 186, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 19612, .adv_w = 142, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19666, .adv_w = 186, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 19720, .adv_w = 138, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19762, .adv_w = 188, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 19834, .adv_w = 198, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 19900, .adv_w = 186, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 19960, .adv_w = 188, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 20032, .adv_w = 123, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 20067, .adv_w = 0, .box_w = 9, .box_h = 5, .ofs_x = -8, .ofs_y = 12}, + {.bitmap_index = 20090, .adv_w = 125, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 20132, .adv_w = 125, .box_w = 13, .box_h = 17, .ofs_x = -6, .ofs_y = 0}, + {.bitmap_index = 20243, .adv_w = 0, .box_w = 10, .box_h = 5, .ofs_x = -11, .ofs_y = 12}, + {.bitmap_index = 20268, .adv_w = 0, .box_w = 10, .box_h = 6, .ofs_x = -11, .ofs_y = 12}, + {.bitmap_index = 20298, .adv_w = 0, .box_w = 10, .box_h = 4, .ofs_x = -11, .ofs_y = 12}, + {.bitmap_index = 20318, .adv_w = 0, .box_w = 10, .box_h = 6, .ofs_x = -11, .ofs_y = 12}, + {.bitmap_index = 20348, .adv_w = 0, .box_w = 5, .box_h = 5, .ofs_x = -6, .ofs_y = -6}, + {.bitmap_index = 20361, .adv_w = 0, .box_w = 8, .box_h = 5, .ofs_x = -9, .ofs_y = -6}, + {.bitmap_index = 20381, .adv_w = 99, .box_w = 5, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 20411, .adv_w = 193, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 20477, .adv_w = 113, .box_w = 9, .box_h = 18, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 20558, .adv_w = 113, .box_w = 8, .box_h = 18, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 20630, .adv_w = 113, .box_w = 7, .box_h = 19, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 20697, .adv_w = 0, .box_w = 8, .box_h = 6, .ofs_x = -10, .ofs_y = 12}, + {.bitmap_index = 20721, .adv_w = 0, .box_w = 3, .box_h = 4, .ofs_x = -4, .ofs_y = 13}, + {.bitmap_index = 20727, .adv_w = 0, .box_w = 7, .box_h = 5, .ofs_x = -7, .ofs_y = 12}, + {.bitmap_index = 20745, .adv_w = 0, .box_w = 7, .box_h = 5, .ofs_x = -7, .ofs_y = 13}, + {.bitmap_index = 20763, .adv_w = 196, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 20838, .adv_w = 196, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 20918, .adv_w = 196, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21012, .adv_w = 196, .box_w = 10, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21097, .adv_w = 196, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 21192, .adv_w = 196, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21282, .adv_w = 185, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21362, .adv_w = 178, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21452, .adv_w = 185, .box_w = 12, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21554, .adv_w = 185, .box_w = 11, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21653, .adv_w = 185, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 21748, .adv_w = 86, .box_w = 3, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 21777, .adv_w = 198, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21871, .adv_w = 198, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 21965, .adv_w = 198, .box_w = 11, .box_h = 19, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 22070, .adv_w = 198, .box_w = 11, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 22175, .adv_w = 206, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 22265, .adv_w = 206, .box_w = 12, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 22355, .adv_w = 206, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 22451, .adv_w = 206, .box_w = 12, .box_h = 16, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 22547, .adv_w = 196, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 22622, .adv_w = 196, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 22702, .adv_w = 211, .box_w = 13, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 22806, .adv_w = 315, .box_w = 5, .box_h = 5, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 22819, .adv_w = 315, .box_w = 6, .box_h = 5, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 22834, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 22962, .adv_w = 315, .box_w = 13, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 23079, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 23250, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 23403, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 23556, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 23727, .adv_w = 315, .box_w = 14, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 23853, .adv_w = 315, .box_w = 12, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 23961, .adv_w = 315, .box_w = 14, .box_h = 15, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 24066, .adv_w = 315, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 24201, .adv_w = 315, .box_w = 14, .box_h = 17, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 24320, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 24473, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 24635, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 24797, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 24959, .adv_w = 315, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 25094, .adv_w = 315, .box_w = 14, .box_h = 12, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 25178, .adv_w = 315, .box_w = 17, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 25289, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 25417, .adv_w = 315, .box_w = 19, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 25560, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 25722, .adv_w = 315, .box_w = 16, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 25858, .adv_w = 315, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 25994, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 26156, .adv_w = 315, .box_w = 15, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 26291, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 26444, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 26588, .adv_w = 315, .box_w = 12, .box_h = 18, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 26696, .adv_w = 315, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 26866, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 27019, .adv_w = 315, .box_w = 18, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 27163, .adv_w = 315, .box_w = 16, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 27299, .adv_w = 315, .box_w = 13, .box_h = 14, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 27390, .adv_w = 315, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 27518, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 27662, .adv_w = 315, .box_w = 17, .box_h = 12, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 27764, .adv_w = 315, .box_w = 14, .box_h = 14, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 27862, .adv_w = 315, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 27997, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 28150, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 28294, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 28475, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 28637, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 28818, .adv_w = 315, .box_w = 16, .box_h = 16, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 28946, .adv_w = 315, .box_w = 16, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 29082, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 29210, .adv_w = 315, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 29346, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 29490, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 29661, .adv_w = 315, .box_w = 13, .box_h = 13, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 29746, .adv_w = 315, .box_w = 17, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 29891, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 30072, .adv_w = 315, .box_w = 11, .box_h = 17, .ofs_x = 6, .ofs_y = -2}, + {.bitmap_index = 30166, .adv_w = 315, .box_w = 11, .box_h = 17, .ofs_x = 6, .ofs_y = -2}, + {.bitmap_index = 30260, .adv_w = 315, .box_w = 17, .box_h = 12, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 30362, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 30515, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 30677, .adv_w = 315, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 30790, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 30961, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 31123, .adv_w = 315, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 31273, .adv_w = 315, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 31392, .adv_w = 315, .box_w = 14, .box_h = 17, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 31511, .adv_w = 315, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 31647, .adv_w = 315, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = -1}, + {.bitmap_index = 31775, .adv_w = 315, .box_w = 14, .box_h = 15, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 31880, .adv_w = 315, .box_w = 14, .box_h = 11, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 31957, .adv_w = 315, .box_w = 12, .box_h = 13, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 32035, .adv_w = 315, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 32163, .adv_w = 315, .box_w = 11, .box_h = 18, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 32262, .adv_w = 315, .box_w = 20, .box_h = 16, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 32422, .adv_w = 315, .box_w = 14, .box_h = 16, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 32534, .adv_w = 315, .box_w = 14, .box_h = 15, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 32639, .adv_w = 315, .box_w = 14, .box_h = 15, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 32744, .adv_w = 315, .box_w = 16, .box_h = 15, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 32864, .adv_w = 315, .box_w = 16, .box_h = 2, .ofs_x = 2, .ofs_y = 6}, + {.bitmap_index = 32880, .adv_w = 315, .box_w = 19, .box_h = 3, .ofs_x = 0, .ofs_y = 6}, + {.bitmap_index = 32909, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 33062, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 33224, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 33376, .adv_w = 315, .box_w = 17, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 33521, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 33701, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 33891, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 34091, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34272, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 34453, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 34634, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 34814, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 34994, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 35165, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 35355, .adv_w = 315, .box_w = 19, .box_h = 17, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 35517, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 35669, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 35849, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 36029, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 36200, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 36371, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 36542, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 36732, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 36912, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 37102, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 37283, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 37454, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 37625, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 37806, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 37996, .adv_w = 315, .box_w = 18, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 38149, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 38320, .adv_w = 315, .box_w = 17, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 38482, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 38653, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 38815, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39005, .adv_w = 315, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 39175, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 39327, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 39527, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39698, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 39879, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 40069, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 40250, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 40421, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 40583, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 40773, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 40963, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 41143, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 41333, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 41504, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 41694, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 41884, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 42065, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 42245, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 42398, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 42588, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 42778, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 42949, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 43120, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 43291, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 43462, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 43662, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 43852, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 44042, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 44232, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 44403, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 44583, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 44764, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 44935, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 45097, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 45277, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 45458, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 45629, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 45810, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 45981, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 46162, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 46352, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 46523, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 46713, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 46903, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 47103, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 47293, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 47464, .adv_w = 315, .box_w = 17, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 47626, .adv_w = 315, .box_w = 17, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 47779, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 47960, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 48141, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 48312, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 48493, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 48655, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 48836, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 49007, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 49197, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 49387, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 49577, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 49767, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 49948, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 50129, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 50319, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 50509, .adv_w = 315, .box_w = 19, .box_h = 16, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 50661, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 50842, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 51013, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 51203, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 51365, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 51527, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 51689, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 51879, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 52069, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 52259, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 52440, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 52621, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 52783, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 52964, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 53145, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 53335, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 53516, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 53706, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 53906, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 54087, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 54258, .adv_w = 315, .box_w = 18, .box_h = 18, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 54420, .adv_w = 315, .box_w = 17, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 54582, .adv_w = 315, .box_w = 20, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 54762, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 54952, .adv_w = 315, .box_w = 17, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 55122, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 55303, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 55503, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 55693, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 55874, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 56064, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 56235, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 56425, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 56615, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 56805, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 56986, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 57176, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 57366, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 57537, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 57727, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 57898, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 58079, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 58269, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 58421, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 58621, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 58811, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 58991, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 59172, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 59353, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 59534, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 59714, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 59904, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 60094, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 60294, .adv_w = 315, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 60484, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 60655, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 60845, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 61016, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 61196, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 61386, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 61567, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 61748, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 61929, .adv_w = 315, .box_w = 18, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 62109, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 62290, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 62461, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 62632, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 62822, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 62993, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 63164, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 63354, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 63544, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 63725, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 63906, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 64087, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 64268, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 64449, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 64639, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 64820, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 65010, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 65200, .adv_w = 315, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 65390, .adv_w = 315, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 65590, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 65761, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 65932, .adv_w = 315, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 66103, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 66284, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 66465, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 66609, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 66753, .adv_w = 315, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 66897, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 67049, .adv_w = 315, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 67209, .adv_w = 315, .box_w = 16, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 67361, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 67532, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 67713, .adv_w = 315, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 67894, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 68065, .adv_w = 315, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 68236, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 68398, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 68560, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 68731, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 68875, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 69019, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 69181, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 69333, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 69452, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 69605, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 69767, .adv_w = 301, .box_w = 17, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 69912, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 70031, .adv_w = 301, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 70166, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 70285, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 70438, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 70582, .adv_w = 301, .box_w = 15, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 70725, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 70887, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 71049, .adv_w = 301, .box_w = 14, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 71175, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 71337, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 71508, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 71652, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 71780, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 71932, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 72094, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 72213, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 72375, .adv_w = 301, .box_w = 15, .box_h = 19, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 72518, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 72662, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 72806, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 72934, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 73087, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 73249, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 73411, .adv_w = 301, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 73546, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 73717, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 73845, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 74016, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 74160, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 74304, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 74432, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 74594, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 74747, .adv_w = 301, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 74882, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 75053, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 75234, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 75415, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 75568, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 75721, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 75892, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 76044, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 76197, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 76368, .adv_w = 301, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 76504, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 76666, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 76828, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 76981, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 77100, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 77262, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 77406, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 77568, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 77730, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 77882, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 78044, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 78188, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 78332, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 78460, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 78631, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 78759, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 78921, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 79083, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 79227, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 79389, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 79551, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 79713, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 79857, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 80001, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 80153, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 80334, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 80478, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 80630, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 80782, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 80944, .adv_w = 301, .box_w = 17, .box_h = 17, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 81089, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 81251, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 81395, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 81539, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 81710, .adv_w = 301, .box_w = 17, .box_h = 16, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 81846, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 81990, .adv_w = 301, .box_w = 17, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 82152, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 82296, .adv_w = 301, .box_w = 18, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 82458, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 82611, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 82755, .adv_w = 301, .box_w = 17, .box_h = 14, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 82874, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 83018, .adv_w = 301, .box_w = 16, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 83162, .adv_w = 301, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 83314, .adv_w = 301, .box_w = 17, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 83442, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 83613, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 83766, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 83937, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 84108, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 84289, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 84460, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 84641, .adv_w = 301, .box_w = 18, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 84812, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 84983, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 85164, .adv_w = 301, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 85335, .adv_w = 301, .box_w = 19, .box_h = 19, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 85516, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 85669, .adv_w = 315, .box_w = 4, .box_h = 15, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 85699, .adv_w = 315, .box_w = 5, .box_h = 6, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 85714, .adv_w = 315, .box_w = 4, .box_h = 12, .ofs_x = 3, .ofs_y = -1} }; /*--------------------- @@ -12248,66 +13232,72 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { static const uint16_t unicode_list_2[] = { 0x0, 0x2, 0x4, 0x9, 0xa, 0xd, 0xe, 0x16, 0x18, 0x1c, 0x2e, 0x3e, 0x3f, 0x56, 0x58, 0x5b, - 0x5c, 0x5e, 0x62, 0x77, 0x79, 0x7b, 0xad, 0x116, - 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, 0x315, - 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x324 + 0x5c, 0x5e, 0x62, 0x6c, 0x77, 0x79, 0x7b, 0xad, + 0x116, 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, + 0x315, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, + 0x324 }; static const uint16_t unicode_list_4[] = { 0x0, 0x1, 0x3, 0x4, 0xb, 0xc, 0x9b6, 0x9b7, - 0x9b9, 0x9bc, 0x9bd, 0x9bf, 0x9c0, 0x9c8, 0x9c9, 0x9ca, - 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, 0x9d4, - 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, 0x9e0, - 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, - 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, 0x9f8, - 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, 0x1a5a, - 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, 0x1a7c, - 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, - 0x1a98, 0x1a9a, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, 0x2bfb, 0x2bfd, - 0x2bff, 0x2c01, 0x2c02, 0x2c04, 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, - 0x2c14, 0x2c15, 0x2c18, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c33, - 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, 0x2c59, - 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, 0x2c6a, - 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c78, 0x2c7b, - 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, 0x2c8a, 0x2c8b, - 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, 0x2c98, 0x2c9a, - 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, 0x2ca4, 0x2ca8, - 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, 0x4aef, 0x4b03, - 0x4b96, 0x4c4e, 0x4cfa, 0x4cfd, 0x4d1a, 0x4d28, 0x4d42, 0x4daf, - 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, - 0x4efc, 0x4f16, 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, - 0x5032, 0x5082, 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, - 0x54dc, 0x54e6, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, - 0x57c0, 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, - 0x5b3a, 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, + 0x9b9, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c8, 0x9c9, + 0x9ca, 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, + 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, + 0x9e0, 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, + 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, + 0x9f8, 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, + 0x1a5a, 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, + 0x1a7c, 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, + 0x1a94, 0x1a98, 0x1a9a, 0x1a9c, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, + 0x2bfb, 0x2bfd, 0x2bff, 0x2c00, 0x2c01, 0x2c02, 0x2c04, 0x2c08, + 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, 0x2c14, 0x2c15, 0x2c16, 0x2c18, + 0x2c19, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c23, 0x2c24, 0x2c33, + 0x2c34, 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, + 0x2c59, 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, + 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c75, + 0x2c78, 0x2c7b, 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, + 0x2c8a, 0x2c8b, 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, + 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, + 0x2ca4, 0x2ca8, 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, + 0x4aef, 0x4b03, 0x4b15, 0x4b96, 0x4bce, 0x4c4e, 0x4cfa, 0x4cfd, + 0x4d1a, 0x4d28, 0x4d42, 0x4daf, 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, + 0x4e55, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, 0x4efc, 0x4f16, 0x4f80, + 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, 0x5032, 0x5082, + 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, 0x54dc, 0x54e6, + 0x5532, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, 0x57c0, + 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, 0x5b3a, + 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, 0x5dc6, 0x5e00, 0x5e20, 0x5e33, 0x5ef4, 0x5f17, 0x5f38, 0x5f57, 0x5f5a, 0x5f84, 0x5f87, 0x5f90, 0x610c, 0x6165, 0x6195, 0x61ab, 0x61f7, - 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c2, 0x62d4, 0x62e1, 0x62ef, - 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, 0x688a, - 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a96, 0x6ab4, - 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, 0x6e6b, 0x6e75, - 0x70dd, 0x70ea, 0x7230, 0x7231, 0x746f, 0x7587, 0x75c2, 0x76fe, - 0x7709, 0x78b0, 0x78cf, 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, - 0x7967, 0x7a5c, 0x7a79, 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, - 0x7cb2, 0x8401, 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, - 0x8626, 0x8642, 0x8659, 0x865f, 0x8680, 0x871b, 0x8773, 0x8774, - 0x878a, 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x893a, - 0x8968, 0x89a4, 0x8b90, 0x8b93, 0x8bb6, 0x8bd8, 0x8d02, 0x8d82, - 0x8d84, 0x8ee4, 0x90ce, 0x913e, 0x9140, 0x9148, 0x9191, 0x91a2, - 0x91a3, 0x92b0, 0x930e, 0x9311, 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, - 0xa7c5, 0xa825, 0xa865, 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa9ad, - 0xa9e5, 0xabf9, 0xac4d, 0xacd9, 0xae49, 0xae5a, 0xae7d, 0xae99, - 0xaeaa, 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb3bd, - 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, 0xb7e5, - 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, 0xbc72, 0xbc76, - 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd41, 0xbd42, 0xbd56, - 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, 0xc17a, 0xc17b, 0xc185, - 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, 0xc25e, 0xc281, 0xc301, 0xc306, - 0xc329, 0xc32d, 0xc33a, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4c6, - 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca29, 0xca49, - 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, 0xcedd, - 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, 0xd20a, - 0xd20d, 0xd211, 0xd279, 0xfac1, 0xfacf + 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c0, 0x62c2, 0x62d4, 0x62e1, + 0x62ef, 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, + 0x688a, 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a45, + 0x6a96, 0x6ab4, 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, + 0x6e6b, 0x6e75, 0x6f65, 0x6fb3, 0x70dd, 0x70ea, 0x7230, 0x7231, + 0x7239, 0x746f, 0x7587, 0x75c2, 0x76fe, 0x7709, 0x78b0, 0x78cf, + 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, 0x7967, 0x7a5c, 0x7a79, + 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, 0x7cb2, 0x8401, 0x8540, + 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, 0x8626, 0x8642, + 0x8659, 0x865f, 0x8662, 0x8680, 0x871b, 0x8773, 0x8774, 0x878a, + 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x88f9, 0x893a, + 0x8968, 0x89a4, 0x8abe, 0x8b32, 0x8b71, 0x8b90, 0x8b93, 0x8bb6, + 0x8bd8, 0x8c09, 0x8d02, 0x8d82, 0x8d84, 0x8ee4, 0x90ce, 0x913e, + 0x9140, 0x9148, 0x9191, 0x91a2, 0x91a3, 0x92b0, 0x930e, 0x9311, + 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, 0xa7c5, 0xa825, 0xa861, 0xa865, + 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa921, 0xa9ad, 0xa9e5, 0xabf9, + 0xac4d, 0xacd9, 0xad0a, 0xae49, 0xae5a, 0xae7d, 0xae99, 0xaeaa, + 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb0de, 0xb3bd, + 0xb3d9, 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, + 0xb7d1, 0xb7e5, 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, + 0xbc72, 0xbc76, 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd00, + 0xbd41, 0xbd42, 0xbd56, 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, + 0xc0fd, 0xc17a, 0xc17b, 0xc185, 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, + 0xc25e, 0xc269, 0xc281, 0xc2f9, 0xc301, 0xc306, 0xc329, 0xc32d, + 0xc33a, 0xc355, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4b1, 0xc4c6, + 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca11, 0xca29, + 0xca49, 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, + 0xcedd, 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, + 0xd20a, 0xd20d, 0xd211, 0xd279, 0xfab6, 0xfac1, 0xfacf }; /*Collect the unicode lists and glyph_id offsets*/ @@ -12323,15 +13313,15 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = }, { .range_start = 259, .range_length = 805, .glyph_id_start = 191, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 41, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY }, { - .range_start = 1072, .range_length = 25, .glyph_id_start = 231, + .range_start = 1072, .range_length = 25, .glyph_id_start = 232, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY }, { - .range_start = 1099, .range_length = 64208, .glyph_id_start = 256, - .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 429, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .range_start = 1099, .range_length = 64208, .glyph_id_start = 257, + .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 471, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; @@ -12369,13 +13359,13 @@ static const uint8_t kern_left_class_mapping[] = 44, 44, 44, 44, 45, 32, 45, 31, 59, 0, 11, 0, 12, 60, 33, 33, 0, 36, 19, 61, 41, 42, 23, 42, - 42, 62, 47, 47, 47, 0, 42, 43, - 63, 64, 65, 66, 67, 66, 63, 63, - 63, 68, 63, 69, 70, 67, 63, 71, - 72, 73, 74, 75, 76, 77, 73, 78, - 79, 77, 79, 79, 79, 80, 78, 80, - 81, 74, 82, 80, 83, 75, 78, 79, - 78, 84, 80, 78, 85, 86, 0, 0, + 42, 62, 44, 47, 47, 47, 0, 42, + 43, 63, 64, 65, 66, 67, 66, 63, + 63, 63, 68, 63, 69, 70, 67, 63, + 71, 72, 73, 74, 75, 76, 77, 73, + 78, 79, 77, 79, 79, 79, 80, 78, + 80, 81, 74, 82, 80, 83, 75, 78, + 79, 78, 84, 80, 78, 85, 86, 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, @@ -12428,7 +13418,12 @@ static const uint8_t kern_left_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Map glyph_ids to kern right classes*/ @@ -12460,13 +13455,13 @@ static const uint8_t kern_right_class_mapping[] = 37, 37, 37, 37, 38, 0, 38, 49, 25, 26, 14, 50, 48, 26, 26, 50, 28, 30, 13, 55, 0, 35, 16, 35, - 56, 36, 41, 41, 41, 0, 35, 36, - 57, 58, 57, 57, 57, 0, 57, 57, - 57, 59, 57, 57, 59, 60, 61, 62, - 0, 63, 63, 64, 65, 66, 67, 63, - 63, 63, 68, 63, 63, 65, 63, 63, - 65, 69, 70, 65, 71, 63, 72, 63, - 63, 63, 63, 63, 73, 74, 0, 0, + 56, 36, 37, 41, 41, 41, 0, 35, + 36, 57, 58, 57, 57, 57, 0, 57, + 57, 57, 59, 57, 57, 59, 60, 61, + 62, 0, 63, 63, 64, 65, 66, 67, + 63, 63, 63, 68, 63, 63, 65, 63, + 63, 65, 69, 70, 65, 71, 63, 72, + 63, 63, 63, 63, 63, 73, 74, 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, @@ -12519,7 +13514,12 @@ static const uint8_t kern_right_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Kern values between classes*/ diff --git a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_30_4.c b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_30_4.c index 0dbb7dd..8d17073 100644 --- a/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_30_4.c +++ b/managed_components/78__xiaozhi-fonts/src/font_puhui_basic_30_4.c @@ -4477,6 +4477,31 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x43, 0x0, 0x6, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x5c, 0xef, 0xf7, + /* U+016F "ů" */ + 0x0, 0x0, 0x3, 0x9a, 0x70, 0x0, 0x0, 0x0, + 0x0, 0x4f, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, + 0xbf, 0x40, 0xbf, 0x20, 0x0, 0x0, 0x0, 0xdf, + 0x0, 0x7f, 0x40, 0x0, 0x0, 0x0, 0xbf, 0x40, + 0xbf, 0x20, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xfb, + 0x0, 0x0, 0x0, 0x0, 0x3, 0x9a, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, + 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, + 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, + 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, 0x0, + 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, 0x0, 0x0, + 0xe, 0xfa, 0x6f, 0xf3, 0x0, 0x0, 0x0, 0xe, + 0xfa, 0x6f, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, + 0x6f, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, + 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, + 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, + 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, 0x0, + 0x0, 0xf, 0xfa, 0x5f, 0xf6, 0x0, 0x0, 0x0, + 0x6f, 0xfa, 0x2f, 0xfc, 0x0, 0x0, 0x3, 0xff, + 0xfa, 0xd, 0xff, 0xc7, 0x67, 0xbf, 0xee, 0xfa, + 0x3, 0xff, 0xff, 0xff, 0xff, 0x4b, 0xfa, 0x0, + 0x29, 0xdf, 0xfd, 0x92, 0x9, 0xfa, + /* U+017A "ź" */ 0x0, 0x0, 0x0, 0xa, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x0, @@ -5686,6 +5711,28 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x9, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, + /* U+0E09 "ฉ" */ + 0x0, 0x48, 0xbd, 0xff, 0xfd, 0xa5, 0x0, 0x0, + 0x0, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x20, + 0x0, 0x2, 0xfd, 0x97, 0x65, 0x68, 0xef, 0xfe, + 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0xbf, + 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xd, 0xfc, 0x0, 0x6, 0xdf, 0xc3, 0x0, 0x0, + 0x0, 0xcf, 0xd0, 0x2, 0xfe, 0xaf, 0xe1, 0x0, + 0x0, 0xc, 0xfd, 0x0, 0x6f, 0x60, 0x9f, 0x40, + 0x0, 0x0, 0xcf, 0xc0, 0x5, 0xf8, 0xb, 0xf5, + 0x0, 0x0, 0xd, 0xfc, 0x0, 0xd, 0xff, 0xff, + 0x50, 0x0, 0x1, 0xff, 0x90, 0x0, 0x6, 0x8f, + 0xf5, 0x0, 0x0, 0xaf, 0xf3, 0x0, 0x0, 0x1, + 0xff, 0x50, 0x3, 0xcf, 0xfe, 0x70, 0x0, 0x0, + 0x1f, 0xf8, 0x8d, 0xff, 0xfe, 0xdf, 0xa0, 0x0, + 0x1, 0xff, 0xff, 0xfd, 0xff, 0x0, 0xdf, 0x0, + 0x0, 0x1f, 0xfe, 0x93, 0xe, 0xf0, 0xc, 0xf1, + 0x0, 0x1, 0xff, 0x50, 0x0, 0x9f, 0xcb, 0xfc, + 0x0, 0x0, 0x1f, 0xf5, 0x0, 0x1, 0xae, 0xfb, + 0x20, + /* U+0E0A "ช" */ 0x7, 0xdf, 0xd8, 0x0, 0x0, 0x2f, 0xf7, 0x5f, 0xea, 0xef, 0x70, 0x0, 0x2f, 0xf6, 0x9f, 0x60, @@ -6981,6 +7028,30 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, + /* U+1EE7 "ủ" */ + 0x0, 0x0, 0x8e, 0xff, 0xd8, 0x0, 0x0, 0x0, + 0x0, 0x9a, 0xaa, 0xef, 0x70, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xb0, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x7f, 0x90, 0x0, 0x0, 0x0, 0x3, 0xff, + 0xfc, 0x10, 0x0, 0x0, 0x0, 0x1, 0xfa, 0x20, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6f, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, + 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, + 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, + 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, 0x0, + 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, 0x0, 0x0, + 0xe, 0xfa, 0x6f, 0xf3, 0x0, 0x0, 0x0, 0xe, + 0xfa, 0x6f, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, + 0x6f, 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, + 0xf3, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, + 0x0, 0x0, 0x0, 0xe, 0xfa, 0x6f, 0xf3, 0x0, + 0x0, 0x0, 0xf, 0xfa, 0x5f, 0xf6, 0x0, 0x0, + 0x0, 0x6f, 0xfa, 0x2f, 0xfc, 0x0, 0x0, 0x3, + 0xff, 0xfa, 0xd, 0xff, 0xc7, 0x67, 0xbf, 0xee, + 0xfa, 0x3, 0xff, 0xff, 0xff, 0xff, 0x4b, 0xfa, + 0x0, 0x29, 0xdf, 0xfd, 0x92, 0x9, 0xfa, + /* U+1EED "ử" */ 0x0, 0x0, 0xae, 0xff, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xaa, 0xbf, 0xf5, 0x0, @@ -7020,11 +7091,12 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0xa, 0x30, /* U+3002 "。" */ - 0x0, 0x0, 0x10, 0x0, 0x0, 0x5d, 0xff, 0xe6, - 0x0, 0x6f, 0xe8, 0x8d, 0xf7, 0xd, 0xf1, 0x0, - 0x1e, 0xe0, 0xed, 0x0, 0x0, 0xcf, 0xc, 0xf2, - 0x0, 0x1f, 0xe0, 0x4f, 0xfa, 0xaf, 0xf6, 0x0, - 0x3b, 0xee, 0xc4, 0x0, + 0x0, 0x0, 0x10, 0x0, 0x0, 0x4d, 0xff, 0xe5, + 0x0, 0x5f, 0xe8, 0x8e, 0xf6, 0xc, 0xf2, 0x0, + 0x1f, 0xe0, 0xed, 0x0, 0x0, 0xcf, 0xd, 0xf0, + 0x0, 0xd, 0xf0, 0x8f, 0xb3, 0x3a, 0xf9, 0x0, + 0x9f, 0xff, 0xfb, 0x0, 0x0, 0x25, 0x63, 0x0, + 0x0, /* U+3044 "い" */ 0x17, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -7186,6 +7258,51 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xef, 0xc3, 0x0, 0x0, 0x4, 0x20, 0x0, 0x0, 0x0, 0x0, + /* U+304B "か" */ + 0x0, 0x0, 0x0, 0x0, 0xc9, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x9f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xc, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x4, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x70, 0x0, 0x0, 0x0, 0x7, 0xff, 0x60, 0x0, + 0x0, 0x0, 0x1, 0x35, 0x8f, 0xfd, 0xcd, 0xdb, + 0x70, 0x0, 0xc, 0xff, 0x30, 0x0, 0x5, 0xdf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, + 0x1f, 0xfd, 0x0, 0x0, 0x5f, 0xff, 0xec, 0xff, + 0xc5, 0x44, 0x5b, 0xff, 0x50, 0x0, 0x7f, 0xf6, + 0x0, 0x1, 0x63, 0x10, 0x1f, 0xf5, 0x0, 0x0, + 0xe, 0xf9, 0x0, 0x0, 0xdf, 0xe0, 0x0, 0x0, + 0x0, 0x6, 0xff, 0x10, 0x0, 0x0, 0xbf, 0xb0, + 0x0, 0x5, 0xff, 0x60, 0x0, 0x0, 0x0, 0xbf, + 0xc0, 0x0, 0x0, 0xa, 0xfd, 0x0, 0x0, 0xe, + 0xfd, 0x0, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, + 0x0, 0xaf, 0xd0, 0x0, 0x0, 0x7f, 0xf4, 0x0, + 0x0, 0x5, 0xff, 0x20, 0x0, 0x0, 0xa, 0xfc, + 0x0, 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0xcf, + 0xc0, 0x0, 0x0, 0x0, 0xbf, 0xb0, 0x0, 0x0, + 0xc, 0xfe, 0x0, 0x0, 0x2f, 0xf6, 0x0, 0x0, + 0x0, 0xd, 0xfa, 0x0, 0x0, 0x0, 0x7d, 0x50, + 0x0, 0x8, 0xff, 0x0, 0x0, 0x0, 0x0, 0xef, + 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, + 0xa0, 0x0, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf3, 0x0, 0x0, + 0x0, 0x3, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xd, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, + 0x50, 0x0, 0x0, 0x0, 0xc, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xdf, 0xd0, 0x0, 0xa7, + 0x31, 0x29, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xf4, 0x0, 0xc, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xfb, + 0x0, 0x0, 0x6d, 0xff, 0xff, 0xb2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, + 0x0, 0x23, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+304C "が" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, @@ -7305,6 +7422,36 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xae, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, + /* U+3053 "こ" */ + 0x0, 0x68, 0x53, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x1, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xee, + 0xde, 0xef, 0xff, 0x30, 0x0, 0x8e, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, + 0x2, 0x45, 0x66, 0x78, 0x88, 0x87, 0x65, 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, 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, 0x1, 0x40, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xfd, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4f, 0xf5, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf3, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0x70, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfe, 0x95, + 0x32, 0x11, 0x23, 0x45, 0x7a, 0xd3, 0x0, 0x5e, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, + 0x0, 0x0, 0x5a, 0xdf, 0xff, 0xff, 0xff, 0xff, + 0xfd, 0xa3, 0x0, 0x0, 0x0, 0x0, 0x13, 0x34, + 0x32, 0x10, 0x0, 0x0, + /* U+3055 "さ" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xef, @@ -7553,6 +7700,44 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x66, 0x66, 0x54, 0x10, + /* U+3061 "ち" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8d, 0x90, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xbf, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xdf, 0x90, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x60, 0x0, 0x0, 0x4, 0x8b, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x64, 0x58, 0xad, 0xff, 0xff, + 0x0, 0x0, 0xbf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xc8, 0x0, 0x0, 0xbf, 0xff, 0xff, + 0xff, 0xfe, 0xca, 0x86, 0x30, 0x0, 0x0, 0x0, + 0x12, 0x22, 0x2c, 0xfa, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf6, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xd0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x80, + 0x0, 0x0, 0x24, 0x42, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x30, 0x39, 0xdf, 0xff, 0xff, 0xfa, + 0x20, 0x0, 0x0, 0x6, 0xfd, 0x3c, 0xff, 0xff, + 0xed, 0xef, 0xff, 0xf7, 0x0, 0x0, 0xc, 0xfe, + 0xff, 0xf9, 0x40, 0x0, 0x0, 0x5e, 0xff, 0x50, + 0x0, 0x3f, 0xff, 0xf9, 0x10, 0x0, 0x0, 0x0, + 0x1, 0xef, 0xd0, 0x0, 0xbf, 0xfd, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf1, 0x0, 0xbf, + 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, + 0xf3, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x6f, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x16, 0xdf, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x89, 0x77, 0x78, 0xad, 0xff, 0xff, 0xa1, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xb4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2b, 0xcd, + 0xdc, 0xa8, 0x51, 0x0, 0x0, 0x0, + /* U+3063 "っ" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x15, 0x9c, 0xef, @@ -7577,6 +7762,40 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x12, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+3064 "つ" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0x58, 0xbe, 0xff, 0xfd, 0x93, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4, 0x9d, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x16, + 0xbf, 0xff, 0xff, 0xfc, 0x96, 0x55, 0x6a, 0xff, + 0xfd, 0x0, 0x18, 0xcf, 0xff, 0xff, 0xe9, 0x50, + 0x0, 0x0, 0x0, 0x1, 0xcf, 0xf9, 0x1, 0xff, + 0xff, 0xe9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdf, 0xf2, 0xb, 0xd8, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x70, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xfb, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xe, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf8, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xb, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2b, 0xff, 0xf5, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26, + 0xbf, 0xff, 0xe5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0x78, 0x9c, 0xef, 0xff, 0xff, 0xa1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, + 0xff, 0xd8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xad, 0xca, 0x75, 0x10, 0x0, 0x0, + 0x0, 0x0, + /* U+3066 "て" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -7745,6 +7964,87 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x27, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+306E "の" */ + 0x0, 0x0, 0x0, 0x0, 0x2, 0x7a, 0xcc, 0xcb, + 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6d, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xdf, 0xff, 0xcd, 0xfd, + 0x57, 0xaf, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x5, + 0xff, 0xf9, 0x10, 0x9f, 0xb0, 0x0, 0x19, 0xff, + 0xe2, 0x0, 0x0, 0x4, 0xff, 0xd2, 0x0, 0xa, + 0xfb, 0x0, 0x0, 0x6, 0xff, 0xd0, 0x0, 0x1, + 0xef, 0xd1, 0x0, 0x0, 0xbf, 0xa0, 0x0, 0x0, + 0x8, 0xff, 0x70, 0x0, 0xaf, 0xf2, 0x0, 0x0, + 0xd, 0xf8, 0x0, 0x0, 0x0, 0xd, 0xfe, 0x0, + 0x2f, 0xf8, 0x0, 0x0, 0x0, 0xff, 0x50, 0x0, + 0x0, 0x0, 0x7f, 0xf3, 0x8, 0xff, 0x10, 0x0, + 0x0, 0x4f, 0xf2, 0x0, 0x0, 0x0, 0x1, 0xff, + 0x70, 0xcf, 0xb0, 0x0, 0x0, 0x8, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf9, 0xf, 0xf7, 0x0, + 0x0, 0x0, 0xdf, 0x90, 0x0, 0x0, 0x0, 0x0, + 0xef, 0xa2, 0xff, 0x50, 0x0, 0x0, 0x3f, 0xf4, + 0x0, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x2f, 0xf4, + 0x0, 0x0, 0x9, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x92, 0xff, 0x50, 0x0, 0x1, 0xff, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf6, 0x1f, + 0xf7, 0x0, 0x0, 0x8f, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x8, 0xff, 0x20, 0xdf, 0xc0, 0x0, 0x2f, + 0xf8, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, + 0x8, 0xff, 0x30, 0xc, 0xfe, 0x10, 0x0, 0x0, + 0x0, 0x0, 0xaf, 0xf5, 0x0, 0x1f, 0xfe, 0x7b, + 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xfa, + 0x0, 0x0, 0x5f, 0xff, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x2, 0xbf, 0xfd, 0x10, 0x0, 0x0, 0x4c, + 0xfe, 0x60, 0x0, 0x0, 0x0, 0x39, 0xff, 0xfc, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x8, 0xef, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xfe, 0x91, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+306F "は" */ + 0x0, 0x44, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x89, 0x50, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xb0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xa0, 0x0, + 0x0, 0x0, 0x0, 0xdf, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xef, 0x90, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x90, 0x0, 0x0, 0x0, 0x1, 0xff, 0x50, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0x0, + 0x0, 0x3, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xef, 0xa4, 0x68, 0xac, 0x0, 0x6, 0xff, + 0x0, 0x0, 0xee, 0xdd, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0, 0x8, 0xfd, 0x0, 0x0, 0xdf, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0xca, 0x85, 0x0, + 0xb, 0xfb, 0x0, 0x0, 0x35, 0x55, 0x54, 0x33, + 0xdf, 0x90, 0x0, 0x0, 0x0, 0xd, 0xf9, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xa0, 0x0, + 0x0, 0x0, 0xf, 0xf6, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xbf, 0xb0, 0x0, 0x0, 0x0, 0x1f, + 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, + 0xc0, 0x0, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x9f, 0xe0, 0x0, 0x0, + 0x0, 0x4f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8f, 0xf0, 0x0, 0x0, 0x0, 0x4f, 0xf1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, + 0x0, 0x0, 0x0, 0x5f, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6f, 0xf2, 0x0, 0x0, 0x0, + 0x5f, 0xf2, 0x0, 0x0, 0x0, 0x49, 0xcd, 0xdc, + 0xcf, 0xf3, 0x0, 0x0, 0x0, 0x4f, 0xf2, 0x0, + 0x0, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x60, + 0x0, 0x0, 0x4f, 0xf4, 0x0, 0x0, 0xaf, 0xf8, + 0x43, 0x34, 0x9f, 0xff, 0xfd, 0x40, 0x0, 0x2f, + 0xf6, 0x0, 0x0, 0xff, 0x70, 0x0, 0x0, 0x4f, + 0xfa, 0xff, 0xf9, 0x0, 0xf, 0xf8, 0x0, 0x1, + 0xff, 0x50, 0x0, 0x0, 0x6f, 0xf2, 0x1b, 0xff, + 0xc0, 0xd, 0xfb, 0x0, 0x0, 0xef, 0xd3, 0x0, + 0x3, 0xef, 0xd0, 0x0, 0x8f, 0xf6, 0xa, 0xff, + 0x0, 0x0, 0x5f, 0xff, 0xfe, 0xff, 0xff, 0x40, + 0x0, 0x7, 0x80, 0x6, 0xff, 0x30, 0x0, 0x4, + 0xcf, 0xff, 0xff, 0xc3, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x52, 0x0, 0x0, 0x0, 0x1, 0x34, 0x30, + 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+307E "ま" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -7783,6 +8083,51 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x1, 0x50, 0x0, 0x6, 0xbd, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+307F "み" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, + 0x56, 0x78, 0xac, 0xef, 0xa0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4d, 0xdc, 0xba, 0x85, 0x9f, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xdf, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xb, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xf3, 0x0, 0x0, 0x8, 0x93, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xb0, 0x0, + 0x0, 0xd, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x40, 0x0, 0x0, 0xe, 0xf4, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0xfd, + 0x0, 0x0, 0x0, 0xf, 0xf3, 0x0, 0x0, 0x0, + 0x0, 0x38, 0xdf, 0xff, 0xff, 0xeb, 0x84, 0x0, + 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xfe, + 0xef, 0xfe, 0xff, 0xff, 0xe9, 0x8f, 0xc0, 0x0, + 0x0, 0x1, 0xdf, 0xe7, 0x10, 0xef, 0x70, 0x15, + 0x9e, 0xff, 0xff, 0x90, 0x0, 0x0, 0xc, 0xfc, + 0x10, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x5c, 0xff, + 0xf9, 0x0, 0x0, 0x5f, 0xf1, 0x0, 0xe, 0xf6, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xe4, 0x0, + 0x9f, 0x90, 0x0, 0x8f, 0xd0, 0x0, 0x0, 0x0, + 0xe, 0xf8, 0x7f, 0xff, 0x60, 0xbf, 0x60, 0x3, + 0xff, 0x40, 0x0, 0x0, 0x0, 0x7f, 0xf1, 0x2, + 0xdf, 0xf7, 0xbf, 0x80, 0x3e, 0xfa, 0x0, 0x0, + 0x0, 0x3, 0xff, 0x80, 0x0, 0xc, 0xf3, 0x7f, + 0xfe, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x1d, 0xfd, + 0x0, 0x0, 0x0, 0x40, 0xb, 0xff, 0xfa, 0x10, + 0x0, 0x0, 0x1, 0xdf, 0xf2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x24, 0x10, 0x0, 0x0, 0x0, 0x3e, + 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x19, 0xff, 0xf5, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0xef, 0xfd, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x70, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+3082 "も" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -8649,6 +8994,57 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+30C0 "ダ" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x4, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x31, 0x0, 0x0, 0x0, 0x5, 0xf8, 0xb, 0xf3, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xfa, 0x0, + 0x0, 0x0, 0xb, 0xf3, 0x2f, 0xd0, 0x0, 0x0, + 0x0, 0x0, 0x6, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x1f, 0xd0, 0x8f, 0x40, 0x0, 0x0, 0x0, 0x0, + 0xef, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x31, + 0x50, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xfa, 0x33, + 0x33, 0x33, 0x33, 0x34, 0x30, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x4f, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, + 0xd1, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x8, 0xff, 0xe2, 0x0, 0x0, + 0x0, 0x0, 0x2, 0xff, 0xb0, 0x0, 0x0, 0x0, + 0xa, 0xff, 0xe2, 0x9, 0xc3, 0x0, 0x0, 0x0, + 0xaf, 0xf4, 0x0, 0x0, 0x0, 0x2c, 0xff, 0xd2, + 0x5, 0xff, 0xf7, 0x0, 0x0, 0x3f, 0xfc, 0x0, + 0x0, 0x0, 0x8, 0xff, 0xa1, 0x0, 0x6, 0xff, + 0xfb, 0x0, 0xd, 0xff, 0x30, 0x0, 0x0, 0x0, + 0x4, 0x60, 0x0, 0x0, 0x2, 0xcf, 0xfd, 0x28, + 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xd1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, + 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x4, 0xff, 0xf9, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3d, 0xff, 0xf7, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xaf, + 0xff, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x28, 0xff, 0xff, 0xb1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6f, 0xff, 0xfd, 0x50, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xd6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+30C3 "ッ" */ 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xbf, 0x60, 0x0, @@ -9808,14 +10204,16 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x40, 0x2, 0xff, 0x0, 0x0, 0x0, 0xef, 0x20, 0x3, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, 0x2f, 0xf0, 0x0, 0x0, 0xe, 0xf2, 0x0, 0x3, 0x33, - 0x33, 0x33, 0x33, 0x0, 0x3, 0xff, 0x0, 0x0, + 0x33, 0x33, 0x33, 0x0, 0x2, 0xff, 0x0, 0x0, 0x0, 0xef, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x12, 0x46, 0xdf, 0xe0, 0x0, 0x0, 0xe, 0xf2, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, - 0xf9, 0x0, 0x0, 0x0, 0xef, 0x20, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xfe, 0xc7, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0xe, 0xf2, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x24, 0x6d, + 0xfe, 0x0, 0x0, 0x0, 0xef, 0x20, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0x80, 0x0, 0x0, 0xe, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x10, 0x0, 0x0, 0x0, + 0x7, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, + 0x0, 0x0, /* U+4F4E "低" */ 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, @@ -9872,6 +10270,59 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+4F60 "你" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xb9, 0x20, 0x0, 0x2f, 0xd1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5f, 0xf1, 0x0, 0x7, 0xfd, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xfb, + 0x0, 0x0, 0xdf, 0x70, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x60, 0x0, + 0x4f, 0xf3, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, + 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x0, 0xb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, + 0x0, 0xd, 0xf9, 0x0, 0x2, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x5, + 0xff, 0x30, 0x0, 0xaf, 0xc1, 0x11, 0x11, 0x11, + 0x11, 0x1c, 0xf8, 0x0, 0x0, 0x0, 0xcf, 0xf1, + 0x0, 0x2f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x4, + 0xff, 0x10, 0x0, 0x0, 0x5f, 0xff, 0x10, 0xb, + 0xfb, 0x0, 0x0, 0x89, 0x30, 0x0, 0xcf, 0x90, + 0x0, 0x0, 0xd, 0xff, 0xf1, 0x5, 0xff, 0x20, + 0x0, 0xd, 0xf5, 0x0, 0x5f, 0xf1, 0x0, 0x0, + 0x7, 0xff, 0xff, 0x10, 0xef, 0x90, 0x0, 0x0, + 0xdf, 0x50, 0x2, 0x98, 0x0, 0x0, 0x1, 0xff, + 0x8f, 0xf1, 0x3, 0xb0, 0x0, 0x0, 0xd, 0xf5, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xd1, 0xff, + 0x10, 0x0, 0x2, 0x20, 0x0, 0xdf, 0x50, 0x1, + 0x20, 0x0, 0x0, 0xd, 0xf3, 0xf, 0xf1, 0x0, + 0x0, 0xbf, 0x60, 0xd, 0xf5, 0x4, 0xfc, 0x0, + 0x0, 0x0, 0x5, 0x0, 0xff, 0x10, 0x0, 0x1f, + 0xf1, 0x0, 0xdf, 0x50, 0xe, 0xf5, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf1, 0x0, 0x6, 0xfb, 0x0, + 0xd, 0xf5, 0x0, 0x6f, 0xd0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x10, 0x0, 0xdf, 0x40, 0x0, 0xdf, + 0x50, 0x0, 0xdf, 0x50, 0x0, 0x0, 0x0, 0xf, + 0xf1, 0x0, 0x5f, 0xd0, 0x0, 0xd, 0xf5, 0x0, + 0x6, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xff, 0x10, + 0xc, 0xf6, 0x0, 0x0, 0xdf, 0x50, 0x0, 0xe, + 0xf4, 0x0, 0x0, 0x0, 0xf, 0xf1, 0x4, 0xfe, + 0x0, 0x0, 0xd, 0xf5, 0x0, 0x0, 0x8f, 0xb0, + 0x0, 0x0, 0x0, 0xff, 0x10, 0xcf, 0x70, 0x0, + 0x0, 0xdf, 0x50, 0x0, 0x1, 0xff, 0x20, 0x0, + 0x0, 0xf, 0xf1, 0x5f, 0xe0, 0x0, 0x0, 0xd, + 0xf5, 0x0, 0x0, 0xb, 0xf9, 0x0, 0x0, 0x0, + 0xff, 0x1e, 0xf6, 0x0, 0x0, 0x0, 0xef, 0x50, + 0x0, 0x0, 0x5f, 0xe0, 0x0, 0x0, 0xf, 0xf1, + 0x28, 0x0, 0x1, 0x24, 0x8f, 0xf4, 0x0, 0x0, + 0x0, 0xc4, 0x0, 0x0, 0x0, 0xff, 0x10, 0x0, + 0x0, 0x8f, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf1, 0x0, 0x0, 0x3, + 0xff, 0xeb, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x10, 0x0, 0x0, 0x7, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+4FE1 "信" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -9925,6 +10376,61 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0xff, 0x20, 0x1, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xe0, 0x0, + /* U+5019 "候" */ + 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xbf, 0x70, 0x0, 0x2, 0xbb, 0xbb, 0xbb, 0xbb, + 0xbb, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf2, + 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfa, + 0x0, 0x0, 0x0, 0x0, 0x4, 0xfd, 0xc, 0xd1, + 0x0, 0x33, 0x33, 0x33, 0x33, 0x9f, 0x90, 0x0, + 0x0, 0x0, 0x0, 0xbf, 0x70, 0xef, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x9, 0xf7, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf2, 0xe, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xaf, 0x60, 0x0, 0x0, 0x0, 0x7, + 0xfc, 0x0, 0xef, 0x16, 0x66, 0x66, 0x66, 0x66, + 0x6d, 0xf9, 0x66, 0x50, 0x0, 0x0, 0xdf, 0xb0, + 0xe, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfd, 0x0, 0x0, 0x5f, 0xfb, 0x0, 0xef, + 0x18, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x70, 0x0, 0xc, 0xff, 0xb0, 0xe, 0xf1, 0x0, + 0xd, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x4, 0xff, 0xfb, 0x0, 0xef, 0x10, 0x5, 0xfc, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, + 0xbf, 0xb0, 0xe, 0xf1, 0x0, 0xcf, 0xb8, 0x88, + 0x88, 0x88, 0x88, 0x20, 0x0, 0x6f, 0xe3, 0xfb, + 0x0, 0xef, 0x10, 0x4f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0x0, 0xf, 0xf6, 0x3f, 0xb0, 0xe, + 0xf1, 0xc, 0xf9, 0x77, 0x8f, 0xf7, 0x77, 0x77, + 0x20, 0x0, 0x6d, 0x3, 0xfb, 0x0, 0xef, 0x17, + 0xfd, 0x0, 0x2, 0xff, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xb0, 0xe, 0xf1, 0x9f, 0x40, + 0x0, 0x2f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xfb, 0x0, 0xef, 0x13, 0x63, 0x33, 0x35, + 0xff, 0x33, 0x33, 0x33, 0x10, 0x0, 0x0, 0x3f, + 0xb0, 0xe, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf7, 0x0, 0x0, 0x3, 0xfb, 0x0, + 0xef, 0x2b, 0xbb, 0xbb, 0xbd, 0xff, 0xbb, 0xbb, + 0xbb, 0x50, 0x0, 0x0, 0x3f, 0xb0, 0xe, 0xf1, + 0x0, 0x0, 0x0, 0xbf, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfb, 0x0, 0xef, 0x10, 0x0, + 0x0, 0x4f, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xb0, 0xe, 0xf1, 0x0, 0x0, 0x2e, + 0xf9, 0x8f, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xfb, 0x0, 0x23, 0x0, 0x0, 0x4e, 0xfd, 0x0, + 0xcf, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xb0, + 0x0, 0x0, 0x1, 0x9f, 0xfd, 0x10, 0x1, 0xdf, + 0xf6, 0x0, 0x0, 0x0, 0x3, 0xfb, 0x0, 0x0, + 0x29, 0xff, 0xfa, 0x0, 0x0, 0x1, 0xbf, 0xfd, + 0x60, 0x0, 0x0, 0x3f, 0xb0, 0x0, 0x2f, 0xff, + 0xd4, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0x10, + 0x0, 0x3, 0xfb, 0x0, 0x0, 0x9d, 0x50, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2b, 0x70, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+5099 "備" */ 0x0, 0x0, 0x0, 0x3b, 0x60, 0x0, 0x8, 0xe6, 0x0, 0x0, 0x6e, 0x80, 0x0, 0x0, 0x0, 0x0, @@ -10399,25 +10905,27 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xbf, 0xa0, 0x0, 0x5, 0xfe, 0x0, 0x0, 0xff, 0x50, 0x0, 0x0, 0xef, 0x8f, 0xf9, 0xff, 0xa0, 0x0, 0x5f, 0xe0, 0x0, 0xf, 0xf5, - 0x0, 0x0, 0x9f, 0xd1, 0xff, 0x26, 0xff, 0xa0, + 0x0, 0x0, 0x9f, 0xe1, 0xff, 0x26, 0xff, 0xa0, 0x5, 0xfe, 0x0, 0x0, 0xff, 0x50, 0x0, 0x6f, - 0xf3, 0xf, 0xf2, 0x7, 0xff, 0x80, 0x5f, 0xe0, - 0x0, 0xf, 0xf5, 0x0, 0x3f, 0xf8, 0x0, 0xff, + 0xf5, 0xf, 0xf2, 0x7, 0xff, 0x80, 0x5f, 0xe0, + 0x0, 0xf, 0xf5, 0x0, 0x3f, 0xfa, 0x0, 0xff, 0x20, 0x8, 0xfe, 0x5, 0xfe, 0x0, 0x0, 0xff, - 0x50, 0x2e, 0xfb, 0x0, 0xf, 0xf2, 0x0, 0xb, - 0x40, 0x5f, 0xe0, 0x0, 0xf, 0xf5, 0xd, 0xfd, - 0x0, 0x0, 0xff, 0x20, 0x0, 0x0, 0x3, 0xa9, - 0x0, 0x0, 0xff, 0x50, 0x3b, 0x10, 0x0, 0xf, + 0x50, 0x2e, 0xfd, 0x10, 0xf, 0xf2, 0x0, 0xb, + 0x40, 0x5f, 0xe0, 0x0, 0xf, 0xf5, 0xd, 0xff, + 0x30, 0x0, 0xff, 0x20, 0x0, 0x0, 0x3, 0xa9, + 0x0, 0x0, 0xff, 0x50, 0x5f, 0x50, 0x0, 0xf, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf5, 0x0, 0x0, 0x0, 0x0, 0xff, 0x30, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x40, 0x0, + 0xf5, 0x0, 0x20, 0x0, 0x0, 0xff, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x50, 0x0, 0x0, 0x0, 0xf, 0xf3, 0x0, 0x0, 0x0, 0x0, - 0x23, 0x47, 0xdf, 0xf2, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x30, 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf3, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xfe, 0xb7, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0x0, 0x0, + 0xff, 0x30, 0x0, 0x0, 0x0, 0x2, 0x34, 0x7d, + 0xff, 0x20, 0x0, 0x0, 0x0, 0xf, 0xf3, 0x0, + 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x30, 0x0, 0x0, 0x0, - 0x0, 0x10, 0x0, 0x0, 0x0, + 0x7, 0xff, 0xeb, 0x60, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, + 0x0, 0x0, /* U+5230 "到" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -10467,6 +10975,56 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, + /* U+52A0 "加" */ + 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x20, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2f, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0xff, 0x10, 0x0, 0x0, 0x0, 0x3a, 0xaa, + 0xaa, 0xaa, 0xaa, 0x30, 0x0, 0x0, 0x3f, 0xf1, + 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, + 0xf5, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x30, 0x4f, 0xf8, 0x88, 0x88, 0xff, 0x50, 0xd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x4, 0xfe, + 0x0, 0x0, 0xe, 0xf5, 0x0, 0x22, 0x26, 0xff, + 0x22, 0x24, 0xff, 0x20, 0x4f, 0xe0, 0x0, 0x0, + 0xef, 0x50, 0x0, 0x0, 0x4f, 0xe0, 0x0, 0x2f, + 0xf2, 0x4, 0xfe, 0x0, 0x0, 0xe, 0xf5, 0x0, + 0x0, 0x5, 0xfd, 0x0, 0x2, 0xff, 0x10, 0x4f, + 0xe0, 0x0, 0x0, 0xef, 0x50, 0x0, 0x0, 0x6f, + 0xc0, 0x0, 0x2f, 0xf1, 0x4, 0xfe, 0x0, 0x0, + 0xe, 0xf5, 0x0, 0x0, 0x8, 0xfb, 0x0, 0x3, + 0xff, 0x10, 0x4f, 0xe0, 0x0, 0x0, 0xef, 0x50, + 0x0, 0x0, 0x9f, 0x90, 0x0, 0x3f, 0xf0, 0x4, + 0xfe, 0x0, 0x0, 0xe, 0xf5, 0x0, 0x0, 0xb, + 0xf7, 0x0, 0x4, 0xff, 0x0, 0x4f, 0xe0, 0x0, + 0x0, 0xef, 0x50, 0x0, 0x0, 0xef, 0x50, 0x0, + 0x4f, 0xf0, 0x4, 0xfe, 0x0, 0x0, 0xe, 0xf5, + 0x0, 0x0, 0xf, 0xf3, 0x0, 0x4, 0xff, 0x0, + 0x4f, 0xe0, 0x0, 0x0, 0xef, 0x50, 0x0, 0x4, + 0xff, 0x0, 0x0, 0x5f, 0xf0, 0x4, 0xfe, 0x0, + 0x0, 0xe, 0xf5, 0x0, 0x0, 0x8f, 0xc0, 0x0, + 0x5, 0xfe, 0x0, 0x4f, 0xe0, 0x0, 0x0, 0xef, + 0x50, 0x0, 0xc, 0xf8, 0x0, 0x0, 0x5f, 0xe0, + 0x4, 0xfe, 0x0, 0x0, 0xe, 0xf5, 0x0, 0x2, + 0xff, 0x30, 0x0, 0x6, 0xfe, 0x0, 0x4f, 0xe0, + 0x0, 0x0, 0xef, 0x50, 0x0, 0x7f, 0xd0, 0x0, + 0x0, 0x6f, 0xd0, 0x4, 0xfe, 0x0, 0x0, 0xe, + 0xf5, 0x0, 0xe, 0xf7, 0x0, 0x0, 0x7, 0xfd, + 0x0, 0x4f, 0xf3, 0x33, 0x33, 0xff, 0x50, 0x7, + 0xfe, 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x4, 0xff, + 0xff, 0xff, 0xff, 0xf5, 0x1, 0xff, 0x70, 0x0, + 0x23, 0x5e, 0xfa, 0x0, 0x4f, 0xff, 0xff, 0xff, + 0xff, 0x50, 0xbf, 0xd0, 0x0, 0x1f, 0xff, 0xff, + 0x40, 0x4, 0xfe, 0x0, 0x0, 0xe, 0xf5, 0x2d, + 0xf4, 0x0, 0x0, 0xac, 0xa8, 0x30, 0x0, 0x4f, + 0xe0, 0x0, 0x0, 0xef, 0x50, 0x3, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+52A1 "务" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x83, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -10778,6 +11336,59 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+53CB "友" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x4, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x34, 0x44, 0x44, 0x49, 0xff, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, + 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xef, 0x70, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xd1, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xff, 0xf3, 0x11, 0x11, 0x11, 0x11, 0x2f, + 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf9, + 0x9f, 0xa0, 0x0, 0x0, 0x0, 0x8, 0xfd, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x31, 0xff, + 0x40, 0x0, 0x0, 0x2, 0xff, 0x50, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9f, 0xd0, 0x8, 0xfe, 0x0, + 0x0, 0x0, 0xcf, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf6, 0x0, 0xd, 0xfb, 0x0, 0x0, + 0x9f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, + 0xfe, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x7f, 0xf6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x70, + 0x0, 0x0, 0x6f, 0xf8, 0x8f, 0xf9, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xaf, 0xe0, 0x0, 0x0, + 0x0, 0x8f, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4f, 0xf5, 0x0, 0x0, 0x0, 0x4, + 0xff, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1e, 0xfb, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xff, + 0xff, 0x81, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, + 0x20, 0x0, 0x1, 0x9f, 0xff, 0xc2, 0x2c, 0xff, + 0xf8, 0x10, 0x0, 0x0, 0x8, 0xff, 0x60, 0x0, + 0x3a, 0xff, 0xfe, 0x60, 0x0, 0x6, 0xef, 0xff, + 0xa3, 0x0, 0x3, 0xff, 0x90, 0x17, 0xdf, 0xff, + 0xe7, 0x0, 0x0, 0x0, 0x1, 0x8f, 0xff, 0xfe, + 0x80, 0x7, 0xc0, 0x1, 0xff, 0xfd, 0x60, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x17, 0xef, 0xfc, 0x0, + 0x0, 0x0, 0x7, 0xb4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4b, 0x40, + /* U+53D1 "发" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -11467,6 +12078,8 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xef, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0x20, 0x0, 0x0, /* U+5927 "大" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xc0, @@ -11569,6 +12182,59 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x17, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+597D "好" */ + 0x0, 0x0, 0x5, 0x30, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xd0, + 0x0, 0x0, 0x3, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x44, 0x0, 0x0, 0x0, 0x6f, 0xb0, 0x0, 0x0, + 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, + 0x0, 0x0, 0x8f, 0xa0, 0x0, 0x0, 0xd, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, + 0xaf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6f, 0xf7, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0x70, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfd, + 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf7, 0x0, 0x0, + 0x4, 0x45, 0xff, 0x54, 0x47, 0xfc, 0x0, 0x0, + 0x0, 0x9, 0xff, 0x70, 0x0, 0x0, 0x0, 0x3, + 0xfe, 0x0, 0x5, 0xfa, 0x0, 0x0, 0x0, 0x8f, + 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xfb, 0x0, + 0x8, 0xf8, 0x0, 0x0, 0x0, 0xaf, 0xa0, 0x0, + 0x0, 0x0, 0x0, 0x9, 0xf8, 0x0, 0xa, 0xf6, + 0x0, 0x0, 0x0, 0xaf, 0x90, 0x0, 0x0, 0x0, + 0x0, 0xc, 0xf5, 0x0, 0xd, 0xf3, 0x0, 0x0, + 0x0, 0xaf, 0x90, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf1, 0x0, 0x1f, 0xf2, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf5, 0x0, 0x3f, 0xe0, 0x0, + 0x4f, 0xd1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0x0, 0x6f, 0xa0, 0x0, 0x9f, 0xa0, + 0x44, 0x44, 0x44, 0xcf, 0xb4, 0x44, 0x44, 0x41, + 0x0, 0xaf, 0xc1, 0x0, 0xef, 0x50, 0x0, 0x0, + 0x0, 0xaf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x8f, + 0xfe, 0x44, 0xff, 0x10, 0x0, 0x0, 0x0, 0xaf, + 0x90, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xfd, + 0xfb, 0x0, 0x0, 0x0, 0x0, 0xaf, 0x90, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xf4, 0x0, + 0x0, 0x0, 0x0, 0xaf, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, + 0x0, 0xaf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0xaf, + 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xfb, + 0xdf, 0xf9, 0x0, 0x0, 0x0, 0xaf, 0x90, 0x0, + 0x0, 0x0, 0x0, 0x3, 0xff, 0xd0, 0x1d, 0xff, + 0x90, 0x0, 0x0, 0xaf, 0x90, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xfe, 0x20, 0x1, 0xef, 0xa0, 0x0, + 0x0, 0xcf, 0x90, 0x0, 0x0, 0x0, 0x5, 0xff, + 0xe3, 0x0, 0x0, 0x2d, 0x10, 0x24, 0x59, 0xff, + 0x70, 0x0, 0x0, 0x0, 0x5f, 0xfe, 0x20, 0x0, + 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0x20, 0x0, + 0x0, 0x0, 0xb, 0xd2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5f, 0xfe, 0xb4, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+59CB "始" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -12679,6 +13345,56 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6211 "我" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, + 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0x1, 0xff, 0x10, 0x1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, + 0x9d, 0xd0, 0xf, 0xf2, 0xc, 0xe2, 0x0, 0x0, + 0x0, 0x5, 0x78, 0xbd, 0xff, 0xff, 0xfe, 0x0, + 0xff, 0x20, 0xbf, 0xe3, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xfa, 0x63, 0x0, 0xf, 0xf3, 0x0, + 0xbf, 0xe3, 0x0, 0x0, 0xa, 0x87, 0x44, 0xff, + 0x10, 0x0, 0x0, 0xef, 0x40, 0x0, 0xbf, 0xe2, + 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf1, 0x0, 0x0, + 0xd, 0xf5, 0x0, 0x0, 0xcf, 0x90, 0x0, 0x0, + 0x0, 0x2, 0xff, 0x10, 0x0, 0x0, 0xdf, 0x60, + 0x0, 0x2, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x2f, + 0xf1, 0x0, 0x0, 0xc, 0xf7, 0x0, 0x0, 0x0, + 0x0, 0x2, 0xee, 0xee, 0xee, 0xff, 0xee, 0xee, + 0xee, 0xff, 0xee, 0xee, 0xee, 0xee, 0xea, 0x2f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x22, 0x22, 0x24, + 0xff, 0x32, 0x22, 0x22, 0x9f, 0xb2, 0x22, 0x22, + 0x22, 0x21, 0x0, 0x0, 0x0, 0x2f, 0xf1, 0x0, + 0x0, 0x7, 0xfb, 0x0, 0x0, 0x6, 0x30, 0x0, + 0x0, 0x0, 0x2, 0xff, 0x10, 0x0, 0x0, 0x5f, + 0xd0, 0x0, 0x3, 0xff, 0x30, 0x0, 0x0, 0x0, + 0x2f, 0xf1, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, + 0xdf, 0xb0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x24, + 0x8c, 0xc0, 0x1f, 0xf0, 0x0, 0x9f, 0xe1, 0x0, + 0x0, 0x0, 0x3, 0x8f, 0xff, 0xff, 0xfe, 0x0, + 0xff, 0x30, 0x8f, 0xf4, 0x0, 0x0, 0x8b, 0xdf, + 0xff, 0xff, 0xfe, 0xa6, 0x20, 0xc, 0xf5, 0x7f, + 0xf6, 0x0, 0x0, 0xe, 0xff, 0xff, 0xdf, 0xf3, + 0x0, 0x0, 0x0, 0x9f, 0xdf, 0xf8, 0x0, 0x0, + 0x0, 0x79, 0x63, 0x2, 0xff, 0x10, 0x0, 0x0, + 0x5, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2f, 0xf1, 0x0, 0x0, 0x2, 0xdf, 0xf8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, + 0x10, 0x0, 0x7, 0xff, 0xff, 0x50, 0x0, 0x5, + 0xc2, 0x0, 0x0, 0x0, 0x2f, 0xf1, 0x0, 0x4d, + 0xff, 0xda, 0xfb, 0x0, 0x0, 0x8f, 0xa0, 0x0, + 0x0, 0x2, 0xff, 0x13, 0xbf, 0xff, 0x90, 0x2f, + 0xf4, 0x0, 0xc, 0xf6, 0x0, 0x0, 0x0, 0x4f, + 0xf2, 0xff, 0xfd, 0x40, 0x0, 0xaf, 0xd0, 0x2, + 0xff, 0x10, 0x0, 0x57, 0x9e, 0xfe, 0x6, 0xe6, + 0x0, 0x0, 0x2, 0xff, 0xd7, 0xdf, 0xb0, 0x0, + 0xe, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, + 0x5, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x8c, 0xa7, + 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xcf, + 0xd4, 0x0, + /* U+624B "手" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -13682,6 +14398,54 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xc9, 0x50, 0x0, 0x0, + /* U+670B "朋" */ + 0x0, 0x0, 0x23, 0x33, 0x33, 0x33, 0x30, 0x0, + 0x23, 0x33, 0x33, 0x33, 0x33, 0x0, 0x0, 0xe, + 0xff, 0xff, 0xff, 0xff, 0x20, 0xd, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0x0, 0x0, 0xef, 0xff, 0xff, + 0xff, 0xf2, 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, + 0x0, 0x0, 0xe, 0xf2, 0x0, 0x0, 0xef, 0x20, + 0xd, 0xf3, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, + 0xef, 0x20, 0x0, 0xe, 0xf2, 0x0, 0xdf, 0x30, + 0x0, 0x0, 0xff, 0x0, 0x0, 0xe, 0xf2, 0x0, + 0x0, 0xef, 0x20, 0xd, 0xf3, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0x0, 0xef, 0x20, 0x0, 0xe, 0xf2, + 0x0, 0xdf, 0x30, 0x0, 0x0, 0xff, 0x0, 0x0, + 0xe, 0xf4, 0x22, 0x22, 0xef, 0x20, 0xd, 0xf4, + 0x11, 0x11, 0x2f, 0xf0, 0x0, 0x0, 0xef, 0xff, + 0xff, 0xff, 0xf2, 0x0, 0xdf, 0xff, 0xff, 0xff, + 0xff, 0x0, 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, + 0x20, 0xd, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0, + 0x0, 0xef, 0x20, 0x0, 0xe, 0xf2, 0x0, 0xdf, + 0x30, 0x0, 0x0, 0xff, 0x0, 0x0, 0xe, 0xf2, + 0x0, 0x0, 0xef, 0x20, 0xd, 0xf3, 0x0, 0x0, + 0xf, 0xf0, 0x0, 0x0, 0xef, 0x20, 0x0, 0xe, + 0xf2, 0x0, 0xdf, 0x30, 0x0, 0x0, 0xff, 0x0, + 0x0, 0xf, 0xf2, 0x0, 0x0, 0xef, 0x20, 0xd, + 0xf3, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0xff, + 0x32, 0x22, 0x2e, 0xf2, 0x0, 0xef, 0x42, 0x22, + 0x22, 0xff, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, + 0xff, 0x20, 0xe, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x3f, + 0xe0, 0x0, 0x0, 0xef, 0x20, 0xf, 0xf3, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x6, 0xfc, 0x0, 0x0, + 0xe, 0xf2, 0x2, 0xff, 0x10, 0x0, 0x0, 0xff, + 0x0, 0x0, 0x9f, 0x90, 0x0, 0x0, 0xef, 0x20, + 0x5f, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0xd, + 0xf6, 0x0, 0x0, 0xe, 0xf2, 0x9, 0xfc, 0x0, + 0x0, 0x0, 0xff, 0x0, 0x3, 0xff, 0x10, 0x0, + 0x0, 0xef, 0x20, 0xef, 0x70, 0x0, 0x0, 0xf, + 0xf0, 0x0, 0xaf, 0xc0, 0x0, 0x0, 0x2f, 0xf1, + 0x5f, 0xf2, 0x0, 0x0, 0x2, 0xff, 0x0, 0x2f, + 0xf5, 0x0, 0x29, 0xbf, 0xff, 0xc, 0xfa, 0x0, + 0x5, 0x78, 0xdf, 0xf0, 0xb, 0xfd, 0x0, 0x1, + 0xff, 0xff, 0x76, 0xff, 0x20, 0x0, 0xaf, 0xff, + 0xf9, 0x0, 0x8f, 0x40, 0x0, 0x8, 0x96, 0x20, + 0x5e, 0x80, 0x0, 0x4, 0xcb, 0x95, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+670D "服" */ 0x0, 0x2d, 0xdd, 0xdd, 0xdd, 0xd2, 0xc, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xd2, 0x0, 0x0, 0x2f, @@ -13781,57 +14545,59 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x2, 0x0, 0x0, /* U+672C "本" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, 0x8f, - 0xf2, 0x22, 0x22, 0x22, 0x22, 0x21, 0x0, 0x0, + 0x0, 0x0, 0x33, 0x33, 0x33, 0x33, 0x33, 0x8f, + 0xf3, 0x33, 0x33, 0x33, 0x33, 0x31, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, 0x1, 0x11, 0x11, 0x11, 0x16, 0xff, 0xff, 0xfe, 0x11, 0x11, 0x11, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xdf, 0xdf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, + 0xdf, 0xdf, 0xfe, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xe7, 0xff, 0x8f, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf7, 0x6f, 0xf1, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfe, 0x6, 0xff, 0x9, 0xfd, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x2, 0xff, 0x60, 0x6f, 0xf0, 0x1f, 0xf9, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, - 0xc0, 0x6, 0xff, 0x0, 0x7f, 0xf4, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf2, 0x0, + 0x0, 0x0, 0x7, 0xfe, 0x6, 0xff, 0x9, 0xfe, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0x60, 0x6f, 0xf0, 0x1e, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, + 0xb0, 0x6, 0xff, 0x0, 0x6f, 0xf5, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf2, 0x0, 0x6f, 0xf0, 0x0, 0xcf, 0xe1, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x5f, 0xf7, 0x0, 0x6, 0xff, - 0x0, 0x2, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xfb, 0x0, 0x0, 0x6f, 0xf0, 0x0, - 0x5, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xfd, 0x10, 0x0, 0x6, 0xff, 0x0, 0x0, 0x8, - 0xff, 0x90, 0x0, 0x0, 0x0, 0x3e, 0xfe, 0x20, - 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, 0xa, 0xff, - 0xa0, 0x0, 0x0, 0x3f, 0xff, 0x31, 0x44, 0x44, - 0x49, 0xff, 0x44, 0x44, 0x44, 0xb, 0xff, 0xb0, - 0x0, 0x5f, 0xff, 0x30, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf1, 0xb, 0xff, 0xd2, 0x1e, - 0xff, 0x40, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0, 0xb, 0xff, 0x60, 0x2d, 0x30, + 0x0, 0x0, 0x0, 0x6f, 0xf6, 0x0, 0x6, 0xff, + 0x0, 0x1, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5f, 0xfa, 0x0, 0x0, 0x6f, 0xf0, 0x0, + 0x4, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x5f, + 0xfd, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x7, + 0xff, 0xc0, 0x0, 0x0, 0x0, 0x5f, 0xfe, 0x10, + 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, 0x9, 0xff, + 0xc1, 0x0, 0x0, 0x6f, 0xfe, 0x23, 0x77, 0x77, + 0x7b, 0xff, 0x77, 0x77, 0x77, 0xa, 0xff, 0xd2, + 0x0, 0x8f, 0xfe, 0x30, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf1, 0xa, 0xff, 0xf4, 0xd, + 0xfe, 0x30, 0x5, 0xbb, 0xbb, 0xbd, 0xff, 0xbb, + 0xbb, 0xbb, 0x0, 0x9, 0xff, 0x40, 0x1b, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x9, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x44, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, /* U+673A "机" */ 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0, @@ -14592,6 +15358,57 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6E90 "源" */ + 0x0, 0xb, 0x40, 0x0, 0x2, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x32, 0x0, 0x8, + 0xff, 0x80, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x8, 0xff, + 0xb1, 0xc, 0xfe, 0xdd, 0xdd, 0xdd, 0xdf, 0xfd, + 0xdd, 0xdd, 0xda, 0x0, 0x0, 0x5, 0xff, 0xd2, + 0xcf, 0x50, 0x0, 0x0, 0x5, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xee, 0x1c, 0xf5, + 0x0, 0x0, 0x0, 0xaf, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x40, 0xcf, 0x50, 0x0, + 0x0, 0xe, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x70, 0x0, 0x0, 0xc, 0xf5, 0x2, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xbf, 0xd2, + 0x0, 0x0, 0xcf, 0x50, 0x2f, 0xfc, 0xcc, 0xcc, + 0xcc, 0xdf, 0xe0, 0x0, 0x4, 0xef, 0xf5, 0x0, + 0xc, 0xf5, 0x2, 0xfe, 0x0, 0x0, 0x0, 0x2, + 0xfe, 0x0, 0x0, 0x1, 0xbf, 0xf8, 0x0, 0xcf, + 0x50, 0x2f, 0xe0, 0x0, 0x0, 0x0, 0x2f, 0xe0, + 0x0, 0x0, 0x0, 0x9f, 0xf4, 0xc, 0xf5, 0x2, + 0xff, 0xcc, 0xcc, 0xcc, 0xcd, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x8b, 0x0, 0xdf, 0x50, 0x2f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xd, 0xf5, 0x2, 0xfe, 0x0, 0x0, + 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdf, 0x40, 0x2f, 0xe0, 0x0, 0x0, 0x0, + 0x2f, 0xe0, 0x0, 0x0, 0x0, 0x36, 0x10, 0xf, + 0xf3, 0x2, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xfe, + 0x0, 0x0, 0x0, 0x9, 0xf9, 0x0, 0xff, 0x20, + 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, + 0x0, 0x0, 0xcf, 0x50, 0x2f, 0xf1, 0x1, 0xcc, + 0xcc, 0xdf, 0xfc, 0xcc, 0xcb, 0x0, 0x0, 0x0, + 0xf, 0xf1, 0x4, 0xfe, 0x0, 0x0, 0x0, 0x3, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xfd, + 0x0, 0x7f, 0xc0, 0x0, 0x37, 0x0, 0x3f, 0xe0, + 0x8, 0x50, 0x0, 0x0, 0x0, 0x9f, 0x90, 0xc, + 0xf8, 0x0, 0x1e, 0xf5, 0x3, 0xfe, 0x2, 0xff, + 0x40, 0x0, 0x0, 0xd, 0xf4, 0x0, 0xff, 0x40, + 0xa, 0xfa, 0x0, 0x3f, 0xe0, 0x4, 0xff, 0x20, + 0x0, 0x2, 0xff, 0x0, 0x6f, 0xf0, 0x7, 0xfe, + 0x10, 0x3, 0xfe, 0x0, 0x7, 0xfd, 0x0, 0x0, + 0x7f, 0xb0, 0xc, 0xf9, 0x5, 0xff, 0x30, 0x0, + 0x4f, 0xe0, 0x0, 0xb, 0xfa, 0x0, 0xc, 0xf6, + 0x3, 0xff, 0x35, 0xff, 0x50, 0x25, 0x6d, 0xfd, + 0x0, 0x0, 0x1e, 0xf6, 0x2, 0xff, 0x10, 0xbf, + 0xc0, 0x5f, 0x60, 0x6, 0xff, 0xff, 0x70, 0x0, + 0x0, 0x4d, 0x20, 0x17, 0x90, 0xb, 0xf4, 0x0, + 0x10, 0x0, 0x1c, 0xa8, 0x40, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+6EE1 "满" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -15115,6 +15932,106 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+73B0 "现" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xab, 0xbb, + 0xbb, 0xbb, 0xbb, 0xbb, 0xb3, 0x0, 0x4, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf4, 0x0, 0x4, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0xef, 0x86, 0x66, 0x66, 0x66, 0x6e, + 0xf4, 0x0, 0x1, 0x33, 0x3b, 0xf9, 0x33, 0x30, + 0xef, 0x30, 0x0, 0x0, 0x0, 0xe, 0xf4, 0x0, + 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0xef, 0x30, + 0x2, 0xba, 0x0, 0xe, 0xf4, 0x0, 0x0, 0x0, + 0xa, 0xf7, 0x0, 0x0, 0xef, 0x30, 0x2, 0xff, + 0x0, 0xe, 0xf4, 0x0, 0x0, 0x0, 0xa, 0xf7, + 0x0, 0x0, 0xef, 0x30, 0x2, 0xff, 0x0, 0xe, + 0xf4, 0x0, 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, + 0xef, 0x30, 0x2, 0xff, 0x0, 0xe, 0xf4, 0x0, + 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0xef, 0x30, + 0x3, 0xff, 0x0, 0xe, 0xf4, 0x0, 0x0, 0x0, + 0xa, 0xf7, 0x0, 0x0, 0xef, 0x30, 0x3, 0xff, + 0x0, 0xe, 0xf4, 0x0, 0x2, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0xef, 0x30, 0x3, 0xfe, 0x0, 0xe, + 0xf4, 0x0, 0x2, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0xef, 0x30, 0x4, 0xfd, 0x0, 0xe, 0xf4, 0x0, + 0x0, 0x22, 0x2b, 0xf8, 0x22, 0x20, 0xef, 0x30, + 0x5, 0xfc, 0x0, 0xe, 0xf4, 0x0, 0x0, 0x0, + 0xa, 0xf7, 0x0, 0x0, 0xef, 0x30, 0x7, 0xfb, + 0x0, 0xe, 0xf4, 0x0, 0x0, 0x0, 0xa, 0xf7, + 0x0, 0x0, 0xef, 0x30, 0xa, 0xf9, 0x10, 0xe, + 0xf4, 0x0, 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, + 0xef, 0x30, 0xe, 0xff, 0xd0, 0xe, 0xf4, 0x0, + 0x0, 0x0, 0xa, 0xf7, 0x0, 0x0, 0xdf, 0x30, + 0x4f, 0xff, 0xd0, 0xc, 0xe4, 0x0, 0x0, 0x0, + 0xa, 0xf7, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xcf, + 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf7, + 0x16, 0xb4, 0x0, 0x7, 0xff, 0x5f, 0xd0, 0x0, + 0x0, 0x50, 0x0, 0x0, 0xb, 0xff, 0xff, 0xf6, + 0x0, 0x4f, 0xfa, 0x1f, 0xd0, 0x0, 0x2, 0xfb, + 0x5, 0x9c, 0xff, 0xff, 0xfd, 0x82, 0x5, 0xff, + 0xd0, 0x1f, 0xd0, 0x0, 0x4, 0xfb, 0xf, 0xff, + 0xfe, 0xa6, 0x10, 0x0, 0x7f, 0xfe, 0x20, 0x1f, + 0xe0, 0x0, 0x5, 0xf9, 0xa, 0x95, 0x20, 0x0, + 0x0, 0x2b, 0xff, 0xe2, 0x0, 0xf, 0xf4, 0x11, + 0x3c, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0xfb, 0x10, 0x0, 0xd, 0xff, 0xff, 0xff, 0xf2, + 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0x70, 0x0, + 0x0, 0x4, 0xdf, 0xff, 0xfd, 0x60, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xb2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + + /* U+73FE "現" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x69, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x92, 0x0, 0x0, 0xef, + 0xff, 0xff, 0xff, 0xf6, 0xbf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf4, 0x0, 0x0, 0xff, 0xff, 0xff, + 0xff, 0xf6, 0xbf, 0x95, 0x55, 0x55, 0x55, 0x5e, + 0xf4, 0x0, 0x0, 0x33, 0x36, 0xfe, 0x33, 0x31, + 0xbf, 0x70, 0x0, 0x0, 0x0, 0xd, 0xf4, 0x0, + 0x0, 0x0, 0x3, 0xfd, 0x0, 0x0, 0xbf, 0x70, + 0x0, 0x0, 0x0, 0xd, 0xf4, 0x0, 0x0, 0x0, + 0x3, 0xfd, 0x0, 0x0, 0xbf, 0xed, 0xdd, 0xdd, + 0xdd, 0xdf, 0xf4, 0x0, 0x0, 0x0, 0x3, 0xfd, + 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf4, 0x0, 0x0, 0x0, 0x3, 0xfd, 0x0, 0x0, + 0xbf, 0x71, 0x11, 0x11, 0x11, 0x1d, 0xf4, 0x0, + 0x0, 0x0, 0x3, 0xfd, 0x0, 0x0, 0xbf, 0x70, + 0x0, 0x0, 0x0, 0xd, 0xf4, 0x0, 0x0, 0x11, + 0x15, 0xfd, 0x11, 0x10, 0xbf, 0x70, 0x0, 0x0, + 0x0, 0xd, 0xf4, 0x0, 0x0, 0xcf, 0xff, 0xff, + 0xff, 0xf6, 0xbf, 0xec, 0xcc, 0xcc, 0xcc, 0xcf, + 0xf4, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff, 0xf6, + 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, + 0x0, 0x1, 0x14, 0xfd, 0x11, 0x10, 0xbf, 0x70, + 0x0, 0x0, 0x0, 0xd, 0xf4, 0x0, 0x0, 0x0, + 0x3, 0xfd, 0x0, 0x0, 0xbf, 0x70, 0x0, 0x0, + 0x0, 0xd, 0xf4, 0x0, 0x0, 0x0, 0x3, 0xfd, + 0x0, 0x0, 0xbf, 0x70, 0x0, 0x0, 0x0, 0xd, + 0xf4, 0x0, 0x0, 0x0, 0x3, 0xfd, 0x0, 0x0, + 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x0, + 0x0, 0x0, 0x3, 0xfd, 0x0, 0x0, 0xaf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, + 0x3, 0xfd, 0x0, 0x0, 0x0, 0xf, 0xf1, 0x0, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfd, + 0x0, 0x46, 0x0, 0x2f, 0xf0, 0x0, 0xff, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xcf, 0xfd, + 0x0, 0x8f, 0xb0, 0x0, 0xff, 0x0, 0x0, 0x10, + 0x6, 0x9c, 0xff, 0xff, 0xff, 0xc7, 0x1, 0xff, + 0x50, 0x0, 0xff, 0x0, 0x3, 0xf8, 0xd, 0xff, + 0xfe, 0xb7, 0x40, 0x0, 0x1d, 0xfd, 0x0, 0x0, + 0xff, 0x0, 0x4, 0xfb, 0x6, 0x74, 0x10, 0x0, + 0x0, 0x5, 0xef, 0xe2, 0x0, 0x0, 0xff, 0x40, + 0x8, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x3, 0xbf, + 0xfe, 0x30, 0x0, 0x0, 0xef, 0xff, 0xff, 0xf5, + 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xb1, 0x0, + 0x0, 0x0, 0x5e, 0xff, 0xff, 0xb0, 0x0, 0x0, + 0x0, 0x0, 0x8, 0xd5, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+7528 "用" */ 0x0, 0x1, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x20, 0x0, 0x5f, 0xff, @@ -15308,6 +16225,52 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x50, 0x0, + /* U+7684 "的" */ + 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, + 0x90, 0x0, 0x0, 0x0, 0x9f, 0xb0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xe, 0xf9, 0x0, 0x0, 0x0, + 0xd, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, + 0xff, 0x50, 0x0, 0x0, 0x2, 0xff, 0x20, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x0, 0x0, + 0x0, 0x8f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xc, 0xfb, 0x0, 0x0, 0x0, 0xe, 0xfb, 0x66, + 0x66, 0x66, 0x63, 0xf, 0xff, 0xff, 0xff, 0xff, + 0xf3, 0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xcf, 0xec, + 0xcc, 0xcc, 0xce, 0xf9, 0xf, 0xf2, 0x11, 0x11, + 0x1e, 0xf3, 0x3f, 0xf3, 0x0, 0x0, 0x0, 0xbf, + 0x90, 0xff, 0x10, 0x0, 0x0, 0xef, 0x3b, 0xfc, + 0x0, 0x0, 0x0, 0xb, 0xf9, 0xf, 0xf1, 0x0, + 0x0, 0xe, 0xf6, 0xff, 0x40, 0x0, 0x0, 0x0, + 0xcf, 0x80, 0xff, 0x10, 0x0, 0x0, 0xef, 0x33, + 0x90, 0x0, 0x0, 0x0, 0xc, 0xf8, 0xf, 0xf1, + 0x0, 0x0, 0xe, 0xf3, 0x0, 0x6, 0x0, 0x0, + 0x0, 0xcf, 0x70, 0xff, 0x10, 0x0, 0x0, 0xef, + 0x30, 0xc, 0xf6, 0x0, 0x0, 0xd, 0xf7, 0xf, + 0xf1, 0x0, 0x0, 0xe, 0xf3, 0x0, 0x6f, 0xf2, + 0x0, 0x0, 0xdf, 0x70, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x30, 0x0, 0xcf, 0xc0, 0x0, 0xd, 0xf6, + 0xf, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x2, + 0xff, 0x60, 0x0, 0xef, 0x60, 0xff, 0x43, 0x33, + 0x33, 0xff, 0x30, 0x0, 0x8, 0xfe, 0x10, 0xe, + 0xf5, 0xf, 0xf1, 0x0, 0x0, 0xe, 0xf3, 0x0, + 0x0, 0x1e, 0xf9, 0x0, 0xff, 0x50, 0xff, 0x10, + 0x0, 0x0, 0xef, 0x30, 0x0, 0x0, 0x7e, 0x40, + 0xf, 0xf5, 0xf, 0xf1, 0x0, 0x0, 0xe, 0xf3, + 0x0, 0x0, 0x0, 0x10, 0x0, 0xff, 0x40, 0xff, + 0x10, 0x0, 0x0, 0xef, 0x30, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf3, 0xf, 0xf1, 0x0, 0x0, 0xe, + 0xf3, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x30, + 0xff, 0x10, 0x0, 0x0, 0xef, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x3f, 0xf2, 0xf, 0xf2, 0x11, 0x11, + 0x1e, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, + 0x0, 0x5a, 0xbd, 0xff, 0xd0, 0xf, 0xff, 0xff, + 0xff, 0xff, 0xf3, 0x0, 0x0, 0x5, 0xff, 0xff, + 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xa, 0x97, 0x51, 0x0, + /* U+78BA "確" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -15447,25 +16410,27 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0xc, 0xf6, 0xff, 0x5f, 0xe1, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x40, 0x0, 0x4f, - 0xd1, 0xff, 0xa, 0xfc, 0x5f, 0xd0, 0x0, 0x0, - 0x0, 0x0, 0xdf, 0x40, 0x0, 0xcf, 0x61, 0xff, + 0xe1, 0xff, 0xa, 0xfc, 0x5f, 0xd0, 0x0, 0x0, + 0x0, 0x0, 0xdf, 0x40, 0x0, 0xcf, 0x71, 0xff, 0x1, 0xed, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0x0, - 0xdf, 0x40, 0x5, 0xfd, 0x1, 0xff, 0x0, 0x62, + 0xdf, 0x40, 0x5, 0xfe, 0x1, 0xff, 0x0, 0x62, 0x5f, 0xe3, 0x33, 0x33, 0x33, 0x33, 0xef, 0x40, - 0xe, 0xf5, 0x1, 0xff, 0x0, 0x0, 0x5f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x7, 0xc0, + 0xe, 0xf6, 0x1, 0xff, 0x0, 0x0, 0x5f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x7, 0xd0, 0x1, 0xff, 0x0, 0x0, 0x5f, 0xfc, 0xcc, 0xcc, 0xcc, 0xcc, 0xff, 0x40, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x40, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x40, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x5f, 0xd0, - 0x0, 0x0, 0x1, 0x26, 0xff, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xef, 0x40, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x5f, 0xd0, 0x0, 0x0, - 0x1f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x4f, 0xc0, 0x0, 0x0, 0xc, 0xfe, - 0xb3, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, + 0x1, 0x27, 0xff, 0x30, 0x0, 0x0, 0x1, 0xff, + 0x0, 0x0, 0x5f, 0xd0, 0x0, 0x0, 0x1f, 0xff, + 0xfe, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, + 0x4f, 0xc0, 0x0, 0x0, 0xc, 0xfe, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+7B49 "等" */ 0x0, 0x0, 0x1, 0x74, 0x0, 0x0, 0x0, 0x0, @@ -16435,6 +17400,54 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x5, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xdb, 0x83, 0x0, 0x0, 0x0, 0x0, + /* U+898B "見" */ + 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xe0, 0x0, + 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x6, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6f, 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xee, + 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, + 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x6, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xe0, + 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x7f, 0xfe, 0xee, 0xee, 0xee, 0xee, 0xee, + 0xee, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6f, 0xe0, 0x0, 0x0, + 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, + 0xe0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x70, 0x0, 0x5f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, + 0xf2, 0x0, 0x5, 0xfe, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xa, 0xfd, 0x0, 0x0, + 0x5f, 0xe0, 0x0, 0x0, 0x4, 0xc6, 0x0, 0x0, + 0x0, 0x6, 0xff, 0x50, 0x0, 0x5, 0xfe, 0x0, + 0x0, 0x0, 0x6f, 0xb0, 0x0, 0x0, 0x8, 0xff, + 0xb0, 0x0, 0x0, 0x5f, 0xf0, 0x0, 0x0, 0x8, + 0xf9, 0x0, 0x0, 0x5d, 0xff, 0xb0, 0x0, 0x0, + 0x4, 0xff, 0x72, 0x22, 0x24, 0xdf, 0x70, 0x38, + 0xef, 0xff, 0x60, 0x0, 0x0, 0x0, 0x1e, 0xff, + 0xff, 0xff, 0xff, 0xf2, 0x7f, 0xff, 0xe8, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff, 0xff, + 0xc4, 0x0, 0xec, 0x50, 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, + /* U+89BD "覽" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -16930,18 +17943,71 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xf, 0xc0, 0xd, 0xf1, 0x0, 0x0, 0x0, 0x2, 0xfd, 0x0, 0x5, 0xf9, 0x0, 0x0, 0x3f, 0xb0, 0xd, 0xf1, 0x0, 0x0, 0x0, 0x2, 0xfd, - 0x0, 0x5, 0xf9, 0x0, 0x0, 0x7f, 0x70, 0xd, + 0x0, 0x5, 0xf9, 0x0, 0x0, 0x7f, 0x80, 0xd, 0xf1, 0x0, 0x1, 0x0, 0x2, 0xfd, 0x0, 0x5, - 0xf9, 0x0, 0x0, 0xef, 0x20, 0xd, 0xf1, 0x0, + 0xf9, 0x0, 0x0, 0xef, 0x40, 0xd, 0xf1, 0x0, 0xc, 0xc0, 0x2, 0xfd, 0x0, 0x5, 0xf9, 0x0, - 0xa, 0xf9, 0x0, 0xd, 0xf1, 0x0, 0xe, 0xe0, - 0x2, 0xff, 0xcc, 0xcd, 0xf9, 0x0, 0x9f, 0xc0, - 0x0, 0xd, 0xf5, 0x0, 0x4f, 0xc0, 0x2, 0xff, - 0xff, 0xff, 0xf9, 0x3d, 0xfc, 0x10, 0x0, 0xb, - 0xff, 0xff, 0xff, 0x80, 0x0, 0x22, 0x22, 0x22, - 0x23, 0xff, 0x80, 0x0, 0x0, 0x2, 0xbe, 0xff, - 0xea, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x42, + 0x9, 0xfd, 0x0, 0xd, 0xf1, 0x0, 0xd, 0xe0, + 0x2, 0xff, 0xcc, 0xcd, 0xf9, 0x0, 0x8f, 0xf5, + 0x0, 0xd, 0xf1, 0x0, 0xf, 0xd0, 0x2, 0xff, + 0xff, 0xff, 0xf9, 0x2b, 0xff, 0x90, 0x0, 0xd, + 0xf5, 0x0, 0x5f, 0xa0, 0x0, 0x22, 0x22, 0x22, + 0x24, 0xff, 0xf9, 0x0, 0x0, 0xa, 0xff, 0xff, + 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, + 0x60, 0x0, 0x0, 0x1, 0xae, 0xff, 0xd9, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+8AAD "読" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xde, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xb8, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0x30, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x2, + 0x44, 0x44, 0x46, 0xfd, 0x44, 0x44, 0x44, 0x0, + 0x0, 0x0, 0x2f, 0xc0, 0x0, 0x8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x5e, 0xee, + 0xef, 0xfe, 0xee, 0xd5, 0x99, 0x99, 0x9a, 0xfe, + 0x99, 0x99, 0x99, 0x10, 0x6f, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x1, 0xdd, + 0xdd, 0xdd, 0xd9, 0x0, 0x6c, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xb0, 0x0, 0x1, 0xff, 0xff, 0xff, + 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x21, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, 0x99, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x60, 0x0, 0x22, + 0x22, 0x22, 0x21, 0x2f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xb0, 0x1, 0xff, 0xff, 0xff, + 0xfb, 0x2f, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, + 0x9f, 0xb0, 0x1, 0xdd, 0xdd, 0xdd, 0xd9, 0x2f, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xb0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xe0, 0xc, + 0xc1, 0x1, 0xdb, 0x0, 0x2f, 0xb0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1b, 0xa0, 0xe, 0xf1, 0x1, + 0xfe, 0x0, 0x1b, 0x80, 0x0, 0xff, 0xff, 0xff, + 0xf9, 0x0, 0x0, 0xe, 0xf1, 0x1, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf9, 0x0, + 0x0, 0xf, 0xf0, 0x1, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0xfd, 0x0, 0x3, 0xf9, 0x0, 0x0, 0x1f, + 0xe0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xfd, + 0x0, 0x3, 0xf9, 0x0, 0x0, 0x4f, 0xb0, 0x1, + 0xfe, 0x0, 0x4, 0x40, 0x0, 0xfd, 0x0, 0x3, + 0xf9, 0x0, 0x0, 0xbf, 0x70, 0x1, 0xfe, 0x0, + 0x9, 0xf4, 0x0, 0xfd, 0x0, 0x3, 0xf9, 0x0, + 0x5, 0xfe, 0x0, 0x1, 0xfe, 0x0, 0xb, 0xf3, + 0x0, 0xff, 0xbb, 0xbc, 0xf9, 0x0, 0x5f, 0xf4, + 0x0, 0x0, 0xff, 0x31, 0x3f, 0xf2, 0x0, 0xff, + 0xff, 0xff, 0xf9, 0x19, 0xff, 0x50, 0x0, 0x0, + 0xdf, 0xff, 0xff, 0xf0, 0x0, 0x33, 0x33, 0x33, + 0x31, 0x8f, 0xe4, 0x0, 0x0, 0x0, 0x3c, 0xff, + 0xfe, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+8ACB "請" */ 0x0, 0x0, 0x7d, 0x20, 0x0, 0x0, 0x0, 0x0, @@ -16985,13 +18051,14 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0xff, 0x80, 0x0, 0x0, 0xff, 0x0, 0x0, 0xdf, 0x10, 0x7f, 0x71, 0x11, 0x11, 0x11, 0x7f, 0x80, 0x0, 0x0, 0xff, 0x11, 0x11, 0xdf, 0x10, - 0x7f, 0x70, 0x0, 0x0, 0x0, 0x7f, 0x70, 0x0, + 0x7f, 0x70, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0x10, 0x7f, 0x70, - 0x0, 0x0, 0x14, 0xdf, 0x40, 0x0, 0x0, 0xdd, - 0xdd, 0xdd, 0xdd, 0x0, 0x7f, 0x70, 0x0, 0xd, - 0xfe, 0xb6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x14, 0xdf, 0x70, 0x0, 0x0, 0xdd, + 0xdd, 0xdd, 0xdd, 0x0, 0x7f, 0x70, 0x0, 0xe, + 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0x70, 0x0, 0xa, 0xfd, 0xb5, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, /* U+8B66 "警" */ 0x0, 0x0, 0x1, 0x0, 0x0, 0x10, 0x0, 0x0, @@ -17387,13 +18454,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x11, 0x11, 0x11, 0xbf, 0x60, 0x0, 0x0, 0x0, 0xff, 0x7f, 0xf5, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0xff, 0xff, - 0x70, 0xaf, 0xca, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, - 0x60, 0x0, 0x0, 0x4, 0xff, 0xe3, 0x0, 0xaf, + 0xa0, 0xaf, 0xca, 0xaa, 0xaa, 0xaa, 0xaa, 0xef, + 0x60, 0x0, 0x0, 0x1, 0xff, 0xf9, 0x0, 0xaf, 0x60, 0x0, 0x0, 0x0, 0x0, 0xbf, 0x50, 0x0, - 0x0, 0x7, 0xfb, 0x10, 0x0, 0xaf, 0x60, 0x0, - 0x0, 0x4, 0x79, 0xff, 0x20, 0x0, 0x0, 0x0, - 0x40, 0x0, 0x0, 0xaf, 0x60, 0x0, 0x0, 0x5, - 0xfd, 0xa4, 0x0, 0x0, + 0x0, 0x8, 0xff, 0x80, 0x0, 0xaf, 0x60, 0x0, + 0x0, 0x0, 0x1, 0xdf, 0x50, 0x0, 0x0, 0x2, + 0xf7, 0x0, 0x0, 0xaf, 0x60, 0x0, 0x0, 0x7, + 0xef, 0xff, 0x20, 0x0, 0x0, 0x0, 0x20, 0x0, + 0x0, 0xaf, 0x60, 0x0, 0x0, 0x4, 0xfd, 0xa4, + 0x0, 0x0, /* U+8CC7 "資" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x0, @@ -17499,6 +18568,59 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+8D44 "资" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x33, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a, + 0x10, 0x0, 0x0, 0x0, 0xef, 0x50, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0xf6, 0x0, + 0x0, 0x6, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1b, 0xff, 0xa0, 0x0, 0xe, + 0xff, 0xee, 0xee, 0xee, 0xee, 0xee, 0xe6, 0x0, + 0x0, 0x0, 0x7f, 0xfa, 0x0, 0x8f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, + 0x4, 0xe4, 0x3, 0xff, 0x41, 0x11, 0x11, 0x11, + 0x11, 0x4f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x10, + 0x1e, 0xf9, 0x0, 0x8, 0xb5, 0x0, 0x0, 0xcf, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x40, 0xbf, 0xc0, + 0x0, 0xe, 0xf5, 0x0, 0x8, 0xfd, 0x0, 0x0, + 0x0, 0x0, 0x6, 0xf9, 0x2c, 0x20, 0x0, 0x5f, + 0xfd, 0x10, 0x3, 0xa3, 0x0, 0x0, 0x0, 0x0, + 0x9f, 0xf6, 0x0, 0x0, 0x3, 0xff, 0xef, 0xd3, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0xff, 0x50, + 0x0, 0x1, 0x9f, 0xfb, 0x1c, 0xff, 0xa3, 0x0, + 0x0, 0x0, 0x5, 0xff, 0xd2, 0x0, 0x15, 0xbf, + 0xff, 0x80, 0x0, 0x8f, 0xff, 0xd8, 0x30, 0x0, + 0x7f, 0xfb, 0x10, 0x4c, 0xff, 0xff, 0xa2, 0x0, + 0x0, 0x1, 0x9f, 0xff, 0xff, 0xc1, 0x1e, 0x70, + 0x0, 0x1f, 0xfc, 0x61, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x5a, 0xef, 0xc0, 0x0, 0x0, 0x2, 0x25, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, + 0x3, 0x20, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, + 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x4f, 0xe0, 0x0, 0x0, 0x3, 0x20, 0x0, 0x0, + 0x3f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xe0, + 0x0, 0x0, 0x4f, 0xf1, 0x0, 0x0, 0x3f, 0xf1, + 0x0, 0x0, 0x0, 0x0, 0x4f, 0xe0, 0x0, 0x0, + 0x6f, 0xf0, 0x0, 0x0, 0x3f, 0xf1, 0x0, 0x0, + 0x0, 0x0, 0x4f, 0xe0, 0x0, 0x0, 0xaf, 0xc0, + 0x0, 0x0, 0x3f, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x4f, 0xe0, 0x0, 0x2, 0xff, 0x70, 0x0, 0x0, + 0x3f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x4d, 0xc0, + 0x0, 0x2d, 0xfd, 0x3d, 0x83, 0x0, 0x2d, 0xd0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, + 0xf3, 0x9f, 0xff, 0xd7, 0x10, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x39, 0xff, 0xfd, 0x20, 0x3, + 0x9e, 0xff, 0xfb, 0x40, 0x0, 0x0, 0x0, 0x26, + 0xae, 0xff, 0xfe, 0x70, 0x0, 0x0, 0x0, 0x5b, + 0xff, 0xfe, 0x71, 0x0, 0x5, 0xff, 0xff, 0xfc, + 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x29, 0xff, + 0xff, 0x10, 0x0, 0xdf, 0xb6, 0x10, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0xec, 0x0, + 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, + /* U+8D85 "超" */ 0x0, 0x0, 0x0, 0x7, 0xc5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -17645,11 +18767,168 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0xb, 0xf7, 0x7a, 0xff, 0xff, 0xf3, 0xbf, 0x40, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, - 0xfe, 0xca, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x0, 0x5, 0xfe, 0xca, 0x75, 0x31, 0x0, + 0xff, 0xda, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe0, 0x0, 0x5, 0xff, 0xec, 0x97, 0x42, 0x0, 0x0, 0xbf, 0xee, 0xee, 0xee, 0xee, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, + 0x0, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf4, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0x40, + 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, + + /* U+8F09 "載" */ + 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, + 0x4, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf0, 0x0, 0x0, 0x1, 0xfd, 0x0, + 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x5f, 0xc1, 0x0, + 0x0, 0xa, 0xaa, 0xaa, 0xaf, 0xfa, 0xaa, 0xaa, + 0x50, 0xff, 0x1, 0xbf, 0xd1, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf, 0xf0, + 0x0, 0xaf, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0xbe, + 0x20, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, + 0x0, 0xe, 0xf1, 0x0, 0x0, 0x20, 0x5, 0xbb, + 0xbb, 0xbb, 0xbf, 0xfb, 0xbb, 0xbb, 0xbb, 0xff, + 0xbb, 0xbb, 0xbb, 0xb7, 0x8f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xb0, 0x0, 0x0, 0x0, 0x3, 0x20, 0x0, + 0x0, 0x0, 0xcf, 0x40, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xfd, 0x0, 0x0, 0x0, 0xb, + 0xf4, 0x0, 0x2, 0x0, 0x0, 0x3f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0x9f, 0x50, 0x0, + 0xdf, 0x20, 0x2, 0x99, 0x99, 0x99, 0xfe, 0x99, + 0x99, 0x99, 0x8, 0xf7, 0x0, 0x1f, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xd0, 0x0, 0x0, 0x0, + 0x6f, 0x80, 0x7, 0xf9, 0x0, 0x0, 0x5f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf3, 0x4, 0xfa, 0x0, + 0xcf, 0x30, 0x0, 0x5, 0xfa, 0x77, 0x7f, 0xe7, + 0x77, 0xbf, 0x30, 0x2f, 0xc0, 0x2f, 0xd0, 0x0, + 0x0, 0x5f, 0x40, 0x0, 0xfd, 0x0, 0x7, 0xf3, + 0x0, 0xfe, 0x9, 0xf7, 0x0, 0x0, 0x5, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0xd, 0xf3, + 0xff, 0x10, 0x0, 0x0, 0x5f, 0x97, 0x77, 0xfe, + 0x77, 0x7b, 0xf3, 0x0, 0xaf, 0xdf, 0x80, 0x0, + 0x0, 0x5, 0xf4, 0x0, 0xf, 0xd0, 0x0, 0x7f, + 0x30, 0x7, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x5f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x0, 0x3f, + 0xf7, 0x0, 0x35, 0x0, 0x2, 0x77, 0x77, 0x7f, + 0xe7, 0x77, 0x77, 0x10, 0x6, 0xff, 0x10, 0x6, + 0xf7, 0x0, 0x0, 0x0, 0x0, 0xfd, 0x0, 0x0, + 0x0, 0x3, 0xff, 0xf5, 0x0, 0x8f, 0x59, 0xcc, + 0xcc, 0xcc, 0xcf, 0xfc, 0xcc, 0xcc, 0xc2, 0xef, + 0xef, 0xa0, 0xb, 0xf2, 0xcf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xc2, 0xff, 0x10, + 0xef, 0x0, 0x0, 0x0, 0x0, 0xf, 0xd0, 0x0, + 0x0, 0xbf, 0xe1, 0xa, 0xfc, 0x9f, 0xc0, 0x0, + 0x0, 0x0, 0x0, 0xfd, 0x0, 0x0, 0x9f, 0xe2, + 0x0, 0x2f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xd0, 0x0, 0x1, 0xc2, 0x0, 0x0, 0x4d, + 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+8F7D "载" */ + 0x0, 0x0, 0x0, 0x0, 0x25, 0x30, 0x0, 0x0, + 0x9, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xb0, 0x0, 0x0, 0xf, 0xf3, + 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xb0, 0x0, 0x0, 0xe, 0xf4, 0x1e, 0xd1, + 0x0, 0x0, 0x0, 0x1, 0x11, 0x11, 0x8f, 0xb1, + 0x11, 0x11, 0xe, 0xf4, 0x2d, 0xfe, 0x10, 0x0, + 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xd, 0xf5, 0x1, 0xdf, 0xd1, 0x0, 0x0, 0xa, + 0xbb, 0xbb, 0xdf, 0xeb, 0xbb, 0xba, 0xd, 0xf6, + 0x0, 0x1d, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xb0, 0x0, 0x0, 0xc, 0xf6, 0x0, 0x1, + 0xe9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xb0, + 0x0, 0x0, 0xb, 0xf7, 0x0, 0x0, 0x20, 0x0, + 0x6, 0xee, 0xee, 0xee, 0xff, 0xfe, 0xee, 0xee, + 0xef, 0xff, 0xee, 0xee, 0xee, 0xed, 0x7, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x4, + 0x40, 0x0, 0x0, 0x0, 0x9, 0xfb, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf6, 0x0, + 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x50, 0x0, + 0x0, 0x0, 0x0, 0x5f, 0xf1, 0x0, 0x0, 0x0, + 0x5, 0xfd, 0x0, 0x2, 0xfe, 0x0, 0x0, 0xcf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0xff, + 0x0, 0x8, 0xfb, 0x0, 0x0, 0xad, 0xde, 0xff, + 0xdd, 0xdd, 0xdd, 0xdd, 0x41, 0xff, 0x10, 0xe, + 0xf4, 0x0, 0x0, 0x0, 0xe, 0xf7, 0x1, 0x10, + 0x0, 0x0, 0x0, 0xff, 0x40, 0x7f, 0xc0, 0x0, + 0x0, 0x0, 0x8f, 0xd0, 0xd, 0xf5, 0x0, 0x0, + 0x0, 0xcf, 0x60, 0xef, 0x40, 0x0, 0x0, 0x2, + 0xff, 0x50, 0xd, 0xf5, 0x0, 0x0, 0x0, 0x9f, + 0x98, 0xfc, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x0, 0x6f, 0xef, 0xf3, + 0x0, 0x0, 0x0, 0x6, 0xdd, 0xdd, 0xdf, 0xfe, + 0xdd, 0xdd, 0x0, 0x2f, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xd, 0xf5, 0x0, 0x0, + 0x0, 0xf, 0xfd, 0x0, 0x5, 0x20, 0x0, 0x0, + 0x0, 0x1, 0x2d, 0xf9, 0x78, 0x9b, 0x10, 0xaf, + 0xfa, 0x0, 0xb, 0xf4, 0xc, 0xdd, 0xef, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x29, 0xff, 0xff, 0x0, + 0xd, 0xf3, 0xe, 0xff, 0xfe, 0xdc, 0xbe, 0xf9, + 0x53, 0x20, 0x9f, 0xf4, 0xef, 0x60, 0xf, 0xf0, + 0x2, 0x11, 0x0, 0x0, 0xd, 0xf5, 0x0, 0xa, + 0xff, 0x50, 0x8f, 0xd0, 0x4f, 0xd0, 0x0, 0x0, + 0x0, 0x0, 0xd, 0xf5, 0x0, 0xcf, 0xf6, 0x0, + 0x1f, 0xfb, 0xcf, 0x90, 0x0, 0x0, 0x0, 0x0, + 0xd, 0xf5, 0x0, 0x6f, 0x60, 0x0, 0x6, 0xff, + 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf5, + 0x0, 0x3, 0x0, 0x0, 0x0, 0x7e, 0xe6, 0x0, + + /* U+8FBC "込" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xad, 0x83, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x80, + 0x0, 0x0, 0x0, 0xe, 0xff, 0xfc, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0x50, 0x0, + 0x0, 0x0, 0x5, 0x9f, 0xfc, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9, 0xff, 0x20, 0x0, 0x0, + 0x0, 0x0, 0x2f, 0xf3, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xaf, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x3f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x7, + 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x9e, 0x40, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x20, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x7, 0xff, 0xf6, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xdf, 0xcf, 0xb0, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x6f, + 0xe1, 0xff, 0x10, 0x0, 0x0, 0x0, 0x3, 0xff, + 0xff, 0xf2, 0x0, 0x0, 0x0, 0xe, 0xf7, 0xb, + 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x20, 0x0, 0x0, 0x6, 0xfe, 0x0, 0x4f, 0xe1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf2, 0x0, + 0x0, 0x1, 0xef, 0x60, 0x0, 0xdf, 0x90, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x20, 0x0, 0x0, + 0xbf, 0xd0, 0x0, 0x4, 0xff, 0x30, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf2, 0x0, 0x0, 0x7f, 0xf4, + 0x0, 0x0, 0xb, 0xfe, 0x10, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x20, 0x0, 0x3f, 0xf8, 0x0, 0x0, + 0x0, 0x1e, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf2, 0x0, 0x2e, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x5f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0xff, 0x20, + 0x2e, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x8f, + 0xf8, 0x0, 0x0, 0x0, 0xf, 0xf2, 0xa, 0xff, + 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf7, + 0x0, 0x0, 0x3, 0xff, 0x30, 0xb, 0x30, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0x70, 0x0, + 0x3, 0xef, 0xfd, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0x50, 0x0, 0x2, 0xef, + 0xcd, 0xff, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, 0xd1, 0xb, + 0xff, 0xfb, 0x75, 0x32, 0x11, 0x11, 0x11, 0x22, + 0x33, 0x44, 0x0, 0xdf, 0xd1, 0x0, 0x6, 0xef, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xd0, 0x5, 0xe2, 0x0, 0x0, 0x0, 0x48, 0xbd, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* U+8FDB "进" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x83, @@ -17860,6 +19139,59 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+9054 "達" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xa0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xa0, 0x0, + 0xb, 0xbb, 0xbb, 0xbb, 0xff, 0xbb, 0xbb, 0xbb, + 0xb2, 0x0, 0x0, 0x5, 0xff, 0x80, 0x0, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, + 0x0, 0x0, 0x7, 0xff, 0x60, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xb, 0x22, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xba, + 0xaa, 0xaa, 0xaa, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9f, 0x70, 0x0, 0x4, 0xfb, 0x0, 0x0, + 0x0, 0x1, 0x44, 0x44, 0x40, 0x0, 0x0, 0x6, + 0xf9, 0x0, 0x0, 0x7f, 0x70, 0x0, 0x0, 0x0, + 0x3f, 0xff, 0xff, 0x20, 0x0, 0x0, 0x3f, 0xc0, + 0x0, 0xc, 0xf3, 0x0, 0x0, 0x0, 0x2, 0xbb, + 0xbf, 0xf2, 0x8, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0xff, + 0x20, 0x7c, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, + 0xcc, 0xc9, 0x0, 0x0, 0x0, 0xf, 0xf2, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x20, 0x0, 0x0, + 0x0, 0x0, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xf2, 0x0, 0xbf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x20, 0x7, 0xaa, 0xaa, 0xaa, 0xff, + 0xaa, 0xaa, 0xaa, 0x90, 0x0, 0x0, 0x0, 0xf, + 0xf2, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x20, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x10, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xf2, 0x2f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0x0, 0x0, 0x2, 0xff, 0x21, 0xbb, 0xbb, 0xbb, + 0xbb, 0xff, 0xbb, 0xbb, 0xbb, 0xbb, 0x60, 0x0, + 0x2, 0xef, 0xfd, 0x20, 0x0, 0x0, 0x0, 0xf, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xef, + 0xcc, 0xff, 0x70, 0x0, 0x0, 0x0, 0xef, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x1, 0xdf, 0xd1, 0xb, + 0xff, 0xfa, 0x64, 0x21, 0x10, 0x0, 0x0, 0x0, + 0x11, 0x23, 0x20, 0xdf, 0xe1, 0x0, 0x5, 0xdf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x6, 0xe2, 0x0, 0x0, 0x0, 0x38, 0xbc, + 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x40, + 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+914D "配" */ 0x4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x30, 0x33, 0x33, 0x33, 0x33, 0x30, 0x3, 0xff, 0xff, @@ -18494,13 +19826,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xfd, 0x0, 0x0, 0xb, 0xf0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xd0, 0x0, 0x0, 0xcf, 0x0, 0x0, 0x0, 0x3f, - 0xb0, 0x0, 0x0, 0x0, 0x0, 0xfd, 0x0, 0x3b, - 0xdf, 0xd0, 0x0, 0x1c, 0xef, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xd0, 0x0, 0xcc, 0x92, 0x0, - 0x0, 0xdf, 0xd9, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xd0, 0x0, 0x0, 0xbf, 0x0, 0x0, 0x0, 0x1f, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0xfd, 0x0, 0x2, + 0x4e, 0xf0, 0x0, 0x3, 0x5a, 0xfb, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xd0, 0x3, 0xff, 0xfc, 0x0, + 0x1, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, + 0xfd, 0x0, 0xc, 0xb8, 0x10, 0x0, 0xc, 0xec, + 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, /* U+97F3 "音" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x10, @@ -18785,6 +20119,49 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x1f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, + /* U+ACAC "견" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xdd, 0x10, 0x1, 0x22, 0x22, 0x22, + 0x22, 0x22, 0x21, 0x0, 0x0, 0x9, 0xff, 0x10, + 0xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, + 0x0, 0x9, 0xff, 0x10, 0xc, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf9, 0x0, 0x0, 0x9, 0xff, 0x10, + 0x1, 0x22, 0x22, 0x22, 0x22, 0x3f, 0xf8, 0x34, + 0x44, 0x4a, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xf4, 0xff, + 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xcf, 0xf0, 0x0, 0x0, 0x9, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x80, 0x0, + 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x4f, 0xfe, 0x10, 0x0, 0x0, 0x9, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x7, 0xff, 0xf3, 0x0, 0x22, + 0x22, 0x2a, 0xff, 0x10, 0x0, 0x0, 0x3, 0xcf, + 0xff, 0x40, 0x6, 0xff, 0xff, 0xff, 0xff, 0x10, + 0x0, 0x4, 0xbf, 0xff, 0xc2, 0x0, 0x6, 0xff, + 0xff, 0xff, 0xff, 0x10, 0x7, 0xdf, 0xff, 0xf7, + 0x0, 0x0, 0x0, 0x22, 0x22, 0x29, 0xff, 0x10, + 0xb, 0xff, 0xe7, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xff, 0x10, 0x4, 0xb5, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0x23, + 0x30, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x10, + 0x0, 0x0, 0x0, 0xaf, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0xaf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x10, + 0x0, 0x0, 0x0, 0xaf, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xaf, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xaf, 0xf4, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x41, 0x0, 0x0, 0x0, 0xaf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, + 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf3, + /* U+ACB0 "결" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x48, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -19003,6 +20380,51 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, + /* U+AD6C "구" */ + 0x0, 0x0, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, + 0x0, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, + 0x4f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2f, 0xf7, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, + 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf4, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x8f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xef, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0xff, 0x80, 0x0, 0x0, 0x5, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x59, 0xff, 0x85, 0x55, + 0x54, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, + 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0xff, 0x80, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x2, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+ADF8 "그" */ 0x0, 0x0, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x53, 0x0, 0x0, 0x0, 0x1, 0xff, @@ -19203,6 +20625,48 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0xa, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0xaf, 0xf0, + /* U+B155 "녕" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xa5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf9, 0x9d, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xf9, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x8f, + 0xff, 0xff, 0xff, 0xf9, 0xbf, 0xf0, 0x0, 0x0, + 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xf9, 0xbf, + 0xf0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x44, 0x44, + 0x5f, 0xf9, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf9, 0xbf, 0xf0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf9, + 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, + 0xff, 0xff, 0xf9, 0xbf, 0xf0, 0x0, 0x0, 0x0, + 0x0, 0x8f, 0xff, 0xff, 0xff, 0xf9, 0xbf, 0xf0, + 0x0, 0x0, 0x0, 0x0, 0x25, 0x55, 0x55, 0x6f, + 0xf9, 0xbf, 0xf0, 0x0, 0x0, 0x0, 0x24, 0x0, + 0x0, 0x0, 0x1f, 0xf9, 0xbf, 0xf8, 0x9a, 0xbc, + 0xef, 0xff, 0x10, 0x0, 0x0, 0x1f, 0xf9, 0xbf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, + 0x1f, 0xf9, 0x9d, 0xdd, 0xcb, 0xa8, 0x75, 0x31, + 0x0, 0x0, 0x0, 0x1f, 0xf9, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf9, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x14, 0x66, 0x65, + 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5c, + 0xff, 0xff, 0xff, 0xfe, 0x81, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xff, 0xff, 0xed, 0xef, 0xff, 0xfe, + 0x30, 0x0, 0x0, 0x0, 0x9f, 0xfd, 0x51, 0x0, + 0x0, 0x39, 0xff, 0xe1, 0x0, 0x0, 0x1, 0xff, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf7, 0x0, + 0x0, 0x5, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xfb, 0x0, 0x0, 0x6, 0xff, 0x30, 0x0, + 0x0, 0x0, 0x0, 0xd, 0xfc, 0x0, 0x0, 0x4, + 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfb, + 0x0, 0x0, 0x0, 0xff, 0xe3, 0x0, 0x0, 0x0, + 0x0, 0xaf, 0xf6, 0x0, 0x0, 0x0, 0x6f, 0xff, + 0xa5, 0x32, 0x34, 0x8e, 0xff, 0xc0, 0x0, 0x0, + 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0xcf, 0xff, + 0xff, 0xda, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x12, 0x10, 0x0, 0x0, 0x0, + /* U+B294 "는" */ 0x0, 0x0, 0x1b, 0xb5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, @@ -19684,6 +21148,48 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+B529 "딩" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6c, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0xaf, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x9f, + 0xf1, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, + 0x0, 0x0, 0x9f, 0xf1, 0xbf, 0xf5, 0x55, 0x55, + 0x55, 0x55, 0x40, 0x0, 0x0, 0x9f, 0xf1, 0xbf, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x9f, 0xf1, 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9f, 0xf1, 0xbf, 0xe0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, + 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9f, 0xf1, 0xbf, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0xbf, 0xe0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x9f, + 0xf1, 0xbf, 0xf4, 0x45, 0x66, 0x78, 0xab, 0xdf, + 0xf3, 0x0, 0x9f, 0xf1, 0xbf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf4, 0x0, 0x9f, 0xf1, 0xbf, + 0xff, 0xff, 0xee, 0xdb, 0xa9, 0x75, 0x30, 0x0, + 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0xe1, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x25, 0x66, 0x64, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7e, + 0xff, 0xff, 0xff, 0xfc, 0x50, 0x0, 0x0, 0x0, + 0x0, 0x1d, 0xff, 0xff, 0xed, 0xef, 0xff, 0xfa, + 0x0, 0x0, 0x0, 0x0, 0xcf, 0xfb, 0x30, 0x0, + 0x1, 0x5d, 0xff, 0x80, 0x0, 0x0, 0x5, 0xff, + 0x90, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xf0, 0x0, + 0x0, 0x8, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x6f, 0xf4, 0x0, 0x0, 0x9, 0xff, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x5f, 0xf5, 0x0, 0x0, 0x8, + 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf3, + 0x0, 0x0, 0x3, 0xff, 0xc1, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x9f, 0xfe, + 0x85, 0x32, 0x36, 0xaf, 0xff, 0x40, 0x0, 0x0, + 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x39, 0xdf, 0xff, + 0xff, 0xc7, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x12, 0x10, 0x0, 0x0, 0x0, + /* U+B808 "레" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -19725,6 +21231,47 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x10, 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0xff, 0xa0, + /* U+B824 "려" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x9, 0xff, 0x12, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x50, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x6f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x9, + 0xff, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xff, 0x10, 0x22, 0x22, 0x2a, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0xf, + 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x9, 0xff, 0x10, 0xff, 0xff, 0xff, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x2, 0x22, + 0x22, 0xaf, 0xf1, 0x5, 0x55, 0x55, 0x55, 0x5b, + 0xff, 0x10, 0x0, 0x0, 0x9, 0xff, 0x11, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, + 0x9f, 0xf1, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x10, 0x0, 0x0, 0x9, 0xff, 0x11, 0xff, 0x90, + 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x11, 0x9f, + 0xf1, 0x1f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xff, 0xff, 0xff, 0x11, 0xff, 0x90, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xf1, + 0x1f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x33, + 0x33, 0x3a, 0xff, 0x11, 0xff, 0x90, 0x0, 0x0, + 0x0, 0x0, 0x10, 0x0, 0x0, 0x9f, 0xf1, 0x1f, + 0xfb, 0x55, 0x66, 0x78, 0xab, 0xef, 0x30, 0x0, + 0x9, 0xff, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf5, 0x0, 0x0, 0x9f, 0xf1, 0x1f, 0xff, + 0xff, 0xfe, 0xdc, 0xa9, 0x74, 0x10, 0x0, 0x9, + 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x10, + /* U+B85C "로" */ 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x5f, @@ -20032,6 +21579,54 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xeb, + /* U+BC1C "발" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x47, 0x70, 0x0, 0x0, 0x36, 0x60, 0x0, + 0x0, 0x0, 0x4, 0x65, 0x0, 0x0, 0x9f, 0xf1, + 0x0, 0x0, 0x9f, 0xf0, 0x0, 0x0, 0x0, 0xb, + 0xff, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x9f, + 0xf0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, + 0x9f, 0xf1, 0x0, 0x0, 0x9f, 0xf0, 0x0, 0x0, + 0x0, 0xb, 0xff, 0x0, 0x0, 0x9f, 0xf1, 0x0, + 0x0, 0x9f, 0xf8, 0x88, 0x88, 0x88, 0x8d, 0xff, + 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x9f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x9f, + 0xfb, 0xbb, 0xb5, 0x9f, 0xfc, 0xcc, 0xcc, 0xcc, + 0xce, 0xff, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xf8, + 0x9f, 0xf0, 0x0, 0x0, 0x0, 0xb, 0xff, 0x0, + 0x0, 0x9f, 0xfa, 0xaa, 0xa5, 0x9f, 0xf0, 0x0, + 0x0, 0x0, 0xb, 0xff, 0x0, 0x0, 0x9f, 0xf1, + 0x0, 0x0, 0x9f, 0xf0, 0x0, 0x0, 0x0, 0xb, + 0xff, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x9f, + 0xf9, 0x99, 0x99, 0x99, 0x9d, 0xff, 0x0, 0x0, + 0x9f, 0xf1, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0, 0x0, 0x9f, 0xf1, 0x0, + 0x0, 0x6b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, + 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x2f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0x0, 0x0, 0x0, 0x0, 0x4, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x9f, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x3, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x9f, 0xf1, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfa, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, + 0xfc, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x20, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, + 0x0, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x90, 0x0, + /* U+BC30 "배" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -20659,6 +22254,54 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0xef, 0xb0, + /* U+C14B "셋" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x77, 0x20, 0x6, 0x74, 0x0, 0x0, 0x0, 0x2, + 0x21, 0x0, 0x0, 0x0, 0x3f, 0xf5, 0x0, 0xef, + 0xa0, 0x0, 0x0, 0x3, 0xff, 0x60, 0x0, 0x0, + 0x3, 0xff, 0x50, 0xe, 0xfa, 0x0, 0x0, 0x0, + 0x3f, 0xf6, 0x0, 0x0, 0x0, 0x3f, 0xf5, 0x0, + 0xef, 0xa0, 0x0, 0x0, 0x4, 0xff, 0x70, 0x0, + 0x0, 0x3, 0xff, 0x50, 0xe, 0xfa, 0x0, 0x0, + 0x0, 0x5f, 0xf8, 0x0, 0x1, 0x11, 0x4f, 0xf5, + 0x0, 0xef, 0xa0, 0x0, 0x0, 0x7, 0xff, 0xa0, + 0x7, 0xff, 0xff, 0xff, 0x50, 0xe, 0xfa, 0x0, + 0x0, 0x0, 0xcf, 0xfe, 0x0, 0x7f, 0xff, 0xff, + 0xf5, 0x0, 0xef, 0xa0, 0x0, 0x0, 0x2f, 0xff, + 0xf4, 0x1, 0x33, 0x36, 0xff, 0x50, 0xe, 0xfa, + 0x0, 0x0, 0xa, 0xff, 0xdf, 0xd0, 0x0, 0x0, + 0x3f, 0xf5, 0x0, 0xef, 0xa0, 0x0, 0x6, 0xff, + 0x84, 0xff, 0x90, 0x0, 0x3, 0xff, 0x50, 0xe, + 0xfa, 0x0, 0x5, 0xff, 0xd0, 0xa, 0xff, 0x90, + 0x0, 0x3f, 0xf5, 0x0, 0xef, 0xa0, 0x7, 0xff, + 0xf2, 0x0, 0xc, 0xff, 0xc2, 0x3, 0xff, 0x50, + 0xe, 0xfa, 0xa, 0xff, 0xe3, 0x0, 0x0, 0xb, + 0xff, 0xe0, 0x3f, 0xf5, 0x0, 0xef, 0xa0, 0x5f, + 0xc2, 0x0, 0x0, 0x0, 0x7, 0xf6, 0x3, 0xff, + 0x50, 0xe, 0xfa, 0x0, 0x60, 0x0, 0x0, 0x0, + 0x0, 0x2, 0x0, 0x2b, 0xb3, 0x0, 0xef, 0xa0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xe, 0xfa, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x6d, 0xd1, 0x0, 0x0, 0xef, + 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, + 0xff, 0x20, 0x0, 0xe, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf3, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xfe, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x3, 0xff, 0xcf, 0xfb, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xf2, 0x8f, + 0xfc, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5d, 0xff, 0xf3, 0x0, 0x9f, 0xff, 0x92, 0x0, + 0x0, 0x0, 0x0, 0x5a, 0xef, 0xff, 0xc2, 0x0, + 0x0, 0x6f, 0xff, 0xfc, 0x71, 0x0, 0x0, 0xa, + 0xff, 0xfc, 0x50, 0x0, 0x0, 0x0, 0x19, 0xff, + 0xff, 0x10, 0x0, 0x0, 0x5d, 0x83, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6b, 0xc0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, + /* U+C18C "소" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -21018,6 +22661,54 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0xff, 0x90, 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + /* U+C548 "안" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xdd, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x59, 0xbb, 0x96, 0x10, 0x0, 0x0, 0x0, 0x9f, + 0xf1, 0x0, 0x0, 0x0, 0x5, 0xef, 0xff, 0xff, + 0xff, 0x70, 0x0, 0x0, 0x9, 0xff, 0x10, 0x0, + 0x0, 0x7, 0xff, 0xfc, 0x99, 0xbf, 0xff, 0x90, + 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x2, 0xff, + 0xe3, 0x0, 0x0, 0x2c, 0xff, 0x50, 0x0, 0x9, + 0xff, 0x10, 0x0, 0x0, 0x9f, 0xf4, 0x0, 0x0, + 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x9f, 0xf1, 0x0, + 0x0, 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x9f, + 0xf1, 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0xff, + 0xa0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x20, 0x0, + 0x9f, 0xf1, 0x0, 0x0, 0xf, 0xfa, 0x0, 0x0, + 0x0, 0x0, 0x7f, 0xf3, 0x0, 0x9, 0xff, 0xaa, + 0xaa, 0x50, 0xef, 0xc0, 0x0, 0x0, 0x0, 0x9, + 0xff, 0x10, 0x0, 0x9f, 0xff, 0xff, 0xf8, 0xa, + 0xff, 0x20, 0x0, 0x0, 0x0, 0xef, 0xd0, 0x0, + 0x9, 0xff, 0xaa, 0xaa, 0x50, 0x3f, 0xfd, 0x10, + 0x0, 0x0, 0xbf, 0xf6, 0x0, 0x0, 0x9f, 0xf1, + 0x0, 0x0, 0x0, 0x9f, 0xff, 0xa7, 0x79, 0xef, + 0xfb, 0x0, 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, + 0x0, 0x8f, 0xff, 0xff, 0xff, 0xfa, 0x0, 0x0, + 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x17, + 0xbd, 0xdc, 0x83, 0x0, 0x0, 0x0, 0x9, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, + 0x2, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, + 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf9, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x1, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf9, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, + 0xb4, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf1, 0x0, 0x0, + /* U+C5C5 "업" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x60, 0x0, 0x3, 0x79, 0x99, @@ -21372,6 +23063,54 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x1, 0x35, 0x66, 0x54, 0x20, 0x0, 0x0, 0x0, 0x0, + /* U+C6B4 "운" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x45, 0x43, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x5, 0xbf, 0xff, 0xff, 0xff, 0xfd, 0x81, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xff, 0xc6, 0x20, 0x0, 0x1, 0x49, + 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xfb, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x6f, 0xf3, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xd, 0xfc, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, + 0xfd, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf5, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xe, 0xfb, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xfe, 0x30, 0x0, 0x0, 0x0, + 0x0, 0xaf, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6, + 0xff, 0xfb, 0x86, 0x55, 0x57, 0xae, 0xff, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x59, 0xce, 0xff, 0xed, 0xb7, + 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, 0x5, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x54, 0x2f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfb, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xf2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0x74, 0x0, 0x0, 0x7f, 0xf2, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, + 0x0, 0x0, 0x7f, 0xf2, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x7f, + 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, + 0xfb, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x10, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, + 0x0, 0x1e, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, + 0xee, 0xee, 0x40, 0x0, + /* U+C6CC "워" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -21415,6 +23154,56 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0xbf, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9, + /* U+C744 "을" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x55, 0x43, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x17, 0xcf, 0xff, 0xff, 0xff, 0xfe, 0xa3, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, + 0x0, 0xe, 0xff, 0x94, 0x10, 0x0, 0x0, 0x37, + 0xef, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf6, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfb, 0x0, + 0x0, 0x0, 0x0, 0x7f, 0xf2, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xc, 0xfd, 0x0, 0x0, 0x0, 0x0, + 0x5f, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, + 0xfb, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x82, + 0x0, 0x0, 0x0, 0x15, 0xdf, 0xf6, 0x0, 0x0, + 0x0, 0x0, 0x4, 0xff, 0xff, 0xfe, 0xed, 0xef, + 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x19, 0xef, 0xff, 0xff, 0xff, 0xff, 0xb4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x45, + 0x66, 0x64, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x54, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfb, 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, 0x6f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, + 0x0, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, + 0x6f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf5, 0x0, + 0x0, 0x0, 0x0, 0x13, 0x33, 0x33, 0x33, 0x33, + 0x33, 0x33, 0x6f, 0xf5, 0x0, 0x0, 0x0, 0x0, + 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf5, 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0, + 0x0, 0x0, 0x5f, 0xf3, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, + 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, + 0x0, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x14, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x10, + 0x0, + /* U+C74C "음" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x45, 0x43, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -21642,6 +23431,56 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x1e, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xe1, + /* U+C7A0 "잠" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x7, 0xdd, 0x10, 0x0, 0x0, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x44, 0x44, 0x30, 0x0, 0x9f, + 0xf1, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x0, 0x9, 0xff, 0x10, 0x0, + 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xd, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x9, + 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, + 0xe0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x10, 0x0, + 0x0, 0x0, 0x9, 0xff, 0xdd, 0xdd, 0x60, 0x0, + 0x0, 0x6, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, + 0x9f, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x1, 0xef, + 0xff, 0xe2, 0x0, 0x0, 0x0, 0x9, 0xff, 0x87, + 0x77, 0x30, 0x0, 0x1, 0xcf, 0xf6, 0xff, 0xd2, + 0x0, 0x0, 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x0, + 0x4, 0xef, 0xf8, 0x7, 0xff, 0xf7, 0x0, 0x0, + 0x9, 0xff, 0x10, 0x0, 0x0, 0x2a, 0xff, 0xf8, + 0x0, 0x6, 0xff, 0xfd, 0x60, 0x0, 0x9f, 0xf1, + 0x0, 0x0, 0x3f, 0xff, 0xe5, 0x0, 0x0, 0x3, + 0xcf, 0xfd, 0x0, 0x9, 0xff, 0x10, 0x0, 0x0, + 0xcf, 0x91, 0x0, 0x0, 0x0, 0x0, 0x5d, 0x60, + 0x0, 0x9f, 0xf1, 0x0, 0x0, 0x3, 0x10, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, + 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, + 0x0, 0x0, 0x0, 0xf, 0xf9, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x8f, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x8, + 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf9, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf1, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0x90, 0x0, 0x0, + 0x0, 0x0, 0x8, 0xff, 0x10, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x8f, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0x90, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0x10, + 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xee, 0xee, + 0xee, 0xee, 0xee, 0xff, 0xf1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x6, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, + 0x0, 0x0, + /* U+C804 "전" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7d, 0xd1, 0x0, 0x34, 0x44, 0x44, @@ -21825,6 +23664,51 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x65, 0x0, 0x0, + /* U+C8FC "주" */ + 0x0, 0x0, 0x35, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x10, 0x0, 0x0, 0x0, 0x9f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x40, 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, + 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x1e, 0xff, 0xfa, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0xdf, 0xfe, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xb2, 0xef, + 0xfc, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, + 0x8e, 0xff, 0xf8, 0x0, 0x1c, 0xff, 0xfc, 0x61, + 0x0, 0x0, 0x0, 0x1, 0xdf, 0xff, 0xfb, 0x30, + 0x0, 0x0, 0x6d, 0xff, 0xff, 0xa0, 0x0, 0x0, + 0x0, 0xdf, 0xe8, 0x20, 0x0, 0x0, 0x0, 0x0, + 0x5b, 0xff, 0x70, 0x0, 0x0, 0x0, 0x33, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x10, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x2f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3, 0x33, 0x33, + 0x33, 0x33, 0x33, 0xff, 0xb3, 0x33, 0x33, 0x33, + 0x33, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, + 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, + 0x0, 0x0, + /* U+C911 "중" */ 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0xaf, @@ -22139,6 +24023,49 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x35, 0x66, 0x54, 0x20, 0x0, 0x0, 0x0, 0x0, + /* U+CE5C "친" */ + 0x0, 0x0, 0x0, 0x7, 0xa9, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x99, 0x50, 0x0, 0x0, 0x0, 0xb, + 0xfe, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, + 0x0, 0x0, 0x0, 0xb, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x90, 0x7, 0x77, 0x77, 0x7d, + 0xff, 0x77, 0x77, 0x75, 0x0, 0x1, 0xff, 0x90, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, + 0x0, 0x1, 0xff, 0x90, 0x1d, 0xdd, 0xdd, 0xdf, + 0xff, 0xdd, 0xdd, 0xd9, 0x0, 0x1, 0xff, 0x90, + 0x0, 0x0, 0x0, 0xb, 0xfe, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x0, 0xd, + 0xff, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, + 0x0, 0x0, 0x0, 0x1f, 0xff, 0x30, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x0, 0x7f, + 0xff, 0xa0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, + 0x0, 0x0, 0x1, 0xff, 0xef, 0xf5, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x1d, 0xff, + 0x2c, 0xff, 0x40, 0x0, 0x0, 0x1, 0xff, 0x90, + 0x0, 0x1, 0xdf, 0xf6, 0x2, 0xef, 0xf7, 0x0, + 0x0, 0x1, 0xff, 0x90, 0x0, 0x4e, 0xff, 0x70, + 0x0, 0x2d, 0xff, 0xd4, 0x0, 0x1, 0xff, 0x90, + 0x1a, 0xff, 0xf5, 0x0, 0x0, 0x1, 0xaf, 0xff, + 0x40, 0x1, 0xff, 0x90, 0xe, 0xfc, 0x20, 0x0, + 0x0, 0x0, 0x4, 0xdc, 0x0, 0x1, 0xff, 0x90, + 0x6, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, + 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x90, + 0x0, 0x0, 0x0, 0xce, 0xa0, 0x0, 0x0, 0x0, + 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x0, 0xef, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, + 0x0, 0x0, 0x0, 0xef, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xef, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, + 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xef, 0xd4, 0x44, 0x44, 0x44, + 0x44, 0x44, 0x44, 0x40, 0x0, 0x0, 0x0, 0xef, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0x0, 0x0, 0x0, 0xef, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf1, + /* U+CE74 "카" */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -23106,6 +25033,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, + /* U+FF01 "!" */ + 0x7, 0xff, 0x0, 0x7f, 0xf0, 0x7, 0xff, 0x0, + 0x7f, 0xf0, 0x6, 0xfe, 0x0, 0x6f, 0xe0, 0x6, + 0xfe, 0x0, 0x6f, 0xd0, 0x5, 0xfd, 0x0, 0x5f, + 0xd0, 0x5, 0xfc, 0x0, 0x4f, 0xc0, 0x4, 0xfc, + 0x0, 0x4f, 0xb0, 0x3, 0xfb, 0x0, 0x18, 0x60, + 0x0, 0x0, 0x0, 0x69, 0x81, 0x1f, 0xff, 0x82, + 0xff, 0xf9, 0xe, 0xff, 0x50, 0x1, 0x0, + /* U+FF0C "," */ 0x0, 0xc, 0xd5, 0x0, 0x2f, 0xf5, 0x0, 0x5f, 0xf2, 0x0, 0x9f, 0xc0, 0x0, 0xef, 0x60, 0x6, @@ -23337,481 +25273,524 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { {.bitmap_index = 31269, .adv_w = 230, .box_w = 12, .box_h = 23, .ofs_x = 1, .ofs_y = -6}, {.bitmap_index = 31407, .adv_w = 230, .box_w = 12, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, {.bitmap_index = 31545, .adv_w = 163, .box_w = 10, .box_h = 23, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 31660, .adv_w = 243, .box_w = 14, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 31821, .adv_w = 243, .box_w = 14, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 31982, .adv_w = 243, .box_w = 14, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 32143, .adv_w = 317, .box_w = 19, .box_h = 20, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 32333, .adv_w = 230, .box_w = 12, .box_h = 23, .ofs_x = 1, .ofs_y = -6}, - {.bitmap_index = 32471, .adv_w = 162, .box_w = 10, .box_h = 27, .ofs_x = 0, .ofs_y = -6}, - {.bitmap_index = 32606, .adv_w = 132, .box_w = 4, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 32648, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 32858, .adv_w = 299, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 33016, .adv_w = 298, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 33174, .adv_w = 239, .box_w = 13, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 33311, .adv_w = 271, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 33458, .adv_w = 354, .box_w = 18, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 33647, .adv_w = 398, .box_w = 21, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 33868, .adv_w = 340, .box_w = 17, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 34047, .adv_w = 357, .box_w = 19, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 34247, .adv_w = 340, .box_w = 17, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 34426, .adv_w = 287, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 34584, .adv_w = 288, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 34742, .adv_w = 253, .box_w = 16, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 34910, .adv_w = 314, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 35068, .adv_w = 294, .box_w = 15, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 35196, .adv_w = 297, .box_w = 16, .box_h = 24, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 35388, .adv_w = 278, .box_w = 14, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 35507, .adv_w = 184, .box_w = 9, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 35584, .adv_w = 293, .box_w = 18, .box_h = 22, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 35782, .adv_w = 277, .box_w = 15, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 35910, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 36097, .adv_w = 233, .box_w = 12, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 36199, .adv_w = 310, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 36327, .adv_w = 310, .box_w = 15, .box_h = 24, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 36507, .adv_w = 240, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 36618, .adv_w = 283, .box_w = 15, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 36746, .adv_w = 353, .box_w = 18, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 36899, .adv_w = 308, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 37027, .adv_w = 297, .box_w = 16, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 37163, .adv_w = 308, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 37291, .adv_w = 305, .box_w = 16, .box_h = 23, .ofs_x = 2, .ofs_y = -6}, - {.bitmap_index = 37475, .adv_w = 239, .box_w = 13, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 37586, .adv_w = 217, .box_w = 14, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 37705, .adv_w = 253, .box_w = 16, .box_h = 23, .ofs_x = 0, .ofs_y = -6}, - {.bitmap_index = 37889, .adv_w = 432, .box_w = 25, .box_h = 30, .ofs_x = 1, .ofs_y = -6}, - {.bitmap_index = 38264, .adv_w = 248, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 38400, .adv_w = 316, .box_w = 18, .box_h = 22, .ofs_x = 2, .ofs_y = -5}, - {.bitmap_index = 38598, .adv_w = 290, .box_w = 14, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 38717, .adv_w = 429, .box_w = 23, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 38913, .adv_w = 377, .box_w = 19, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 39075, .adv_w = 274, .box_w = 14, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 39194, .adv_w = 401, .box_w = 22, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 39381, .adv_w = 251, .box_w = 13, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 39492, .adv_w = 129, .box_w = 4, .box_h = 23, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 39538, .adv_w = 129, .box_w = 10, .box_h = 23, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 39653, .adv_w = 291, .box_w = 15, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 39788, .adv_w = 261, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 39905, .adv_w = 309, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 40040, .adv_w = 236, .box_w = 13, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 40157, .adv_w = 240, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 40274, .adv_w = 261, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 40400, .adv_w = 266, .box_w = 15, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 40535, .adv_w = 424, .box_w = 25, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 40760, .adv_w = 309, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 40895, .adv_w = 311, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 41030, .adv_w = 293, .box_w = 15, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 41165, .adv_w = 304, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 41318, .adv_w = 291, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 41471, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 41624, .adv_w = 301, .box_w = 17, .box_h = 24, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 41828, .adv_w = 306, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 41963, .adv_w = 336, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 42134, .adv_w = 336, .box_w = 19, .box_h = 24, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 42362, .adv_w = 308, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 42515, .adv_w = 298, .box_w = 15, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 42650, .adv_w = 279, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 42776, .adv_w = 213, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 42884, .adv_w = 279, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 43010, .adv_w = 207, .box_w = 11, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 43109, .adv_w = 281, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 43261, .adv_w = 297, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 43414, .adv_w = 279, .box_w = 14, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 43540, .adv_w = 281, .box_w = 15, .box_h = 19, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 43683, .adv_w = 184, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 43758, .adv_w = 0, .box_w = 13, .box_h = 7, .ofs_x = -12, .ofs_y = 20}, - {.bitmap_index = 43804, .adv_w = 187, .box_w = 10, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 43894, .adv_w = 187, .box_w = 18, .box_h = 26, .ofs_x = -8, .ofs_y = 0}, - {.bitmap_index = 44128, .adv_w = 0, .box_w = 14, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, - {.bitmap_index = 44170, .adv_w = 0, .box_w = 14, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, - {.bitmap_index = 44212, .adv_w = 0, .box_w = 15, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, - {.bitmap_index = 44257, .adv_w = 0, .box_w = 14, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, - {.bitmap_index = 44299, .adv_w = 0, .box_w = 6, .box_h = 8, .ofs_x = -8, .ofs_y = -9}, - {.bitmap_index = 44323, .adv_w = 0, .box_w = 11, .box_h = 7, .ofs_x = -13, .ofs_y = -8}, - {.bitmap_index = 44362, .adv_w = 148, .box_w = 7, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 44425, .adv_w = 289, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 44569, .adv_w = 170, .box_w = 12, .box_h = 28, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 44737, .adv_w = 170, .box_w = 12, .box_h = 28, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 44905, .adv_w = 170, .box_w = 11, .box_h = 28, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 45059, .adv_w = 0, .box_w = 12, .box_h = 7, .ofs_x = -15, .ofs_y = 19}, - {.bitmap_index = 45101, .adv_w = 0, .box_w = 4, .box_h = 6, .ofs_x = -6, .ofs_y = 20}, - {.bitmap_index = 45113, .adv_w = 0, .box_w = 10, .box_h = 6, .ofs_x = -10, .ofs_y = 19}, - {.bitmap_index = 45143, .adv_w = 0, .box_w = 10, .box_h = 7, .ofs_x = -10, .ofs_y = 19}, - {.bitmap_index = 45178, .adv_w = 294, .box_w = 15, .box_h = 23, .ofs_x = 1, .ofs_y = -6}, - {.bitmap_index = 45351, .adv_w = 294, .box_w = 15, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 45539, .adv_w = 294, .box_w = 17, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 45760, .adv_w = 294, .box_w = 15, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 45955, .adv_w = 294, .box_w = 15, .box_h = 29, .ofs_x = 1, .ofs_y = -6}, - {.bitmap_index = 46173, .adv_w = 294, .box_w = 15, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 46376, .adv_w = 277, .box_w = 15, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 46564, .adv_w = 267, .box_w = 14, .box_h = 27, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 46753, .adv_w = 277, .box_w = 18, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 46987, .adv_w = 277, .box_w = 16, .box_h = 28, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 47211, .adv_w = 277, .box_w = 15, .box_h = 29, .ofs_x = 1, .ofs_y = -6}, - {.bitmap_index = 47429, .adv_w = 129, .box_w = 4, .box_h = 29, .ofs_x = 2, .ofs_y = -6}, - {.bitmap_index = 47487, .adv_w = 297, .box_w = 17, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 47708, .adv_w = 297, .box_w = 16, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 47916, .adv_w = 297, .box_w = 16, .box_h = 28, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 48140, .adv_w = 297, .box_w = 16, .box_h = 29, .ofs_x = 1, .ofs_y = -6}, - {.bitmap_index = 48372, .adv_w = 309, .box_w = 18, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 48579, .adv_w = 309, .box_w = 18, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 48786, .adv_w = 309, .box_w = 18, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 49011, .adv_w = 309, .box_w = 18, .box_h = 26, .ofs_x = 1, .ofs_y = -6}, - {.bitmap_index = 49245, .adv_w = 294, .box_w = 14, .box_h = 23, .ofs_x = 2, .ofs_y = -6}, - {.bitmap_index = 49406, .adv_w = 317, .box_w = 19, .box_h = 25, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 49644, .adv_w = 472, .box_w = 8, .box_h = 7, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 49672, .adv_w = 472, .box_w = 9, .box_h = 8, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 49708, .adv_w = 472, .box_w = 25, .box_h = 22, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 49983, .adv_w = 472, .box_w = 19, .box_h = 27, .ofs_x = 5, .ofs_y = -3}, - {.bitmap_index = 50240, .adv_w = 472, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 50565, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 50903, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 51295, .adv_w = 472, .box_w = 20, .box_h = 26, .ofs_x = 5, .ofs_y = -2}, - {.bitmap_index = 51555, .adv_w = 472, .box_w = 18, .box_h = 27, .ofs_x = 5, .ofs_y = -3}, - {.bitmap_index = 51798, .adv_w = 472, .box_w = 21, .box_h = 26, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 52071, .adv_w = 472, .box_w = 19, .box_h = 25, .ofs_x = 7, .ofs_y = -2}, - {.bitmap_index = 52309, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 52634, .adv_w = 472, .box_w = 28, .box_h = 25, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 52984, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 53322, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 53660, .adv_w = 472, .box_w = 20, .box_h = 17, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 53830, .adv_w = 472, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 54130, .adv_w = 472, .box_w = 27, .box_h = 24, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 54454, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 54792, .adv_w = 472, .box_w = 25, .box_h = 24, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 55092, .adv_w = 472, .box_w = 22, .box_h = 26, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 55378, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 55690, .adv_w = 472, .box_w = 17, .box_h = 27, .ofs_x = 7, .ofs_y = -3}, - {.bitmap_index = 55920, .adv_w = 472, .box_w = 29, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 56283, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 56608, .adv_w = 472, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 56933, .adv_w = 472, .box_w = 24, .box_h = 24, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 57221, .adv_w = 472, .box_w = 18, .box_h = 21, .ofs_x = 5, .ofs_y = -2}, - {.bitmap_index = 57410, .adv_w = 472, .box_w = 22, .box_h = 25, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 57685, .adv_w = 472, .box_w = 22, .box_h = 27, .ofs_x = 4, .ofs_y = -3}, - {.bitmap_index = 57982, .adv_w = 472, .box_w = 25, .box_h = 19, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 58220, .adv_w = 472, .box_w = 21, .box_h = 21, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 58441, .adv_w = 472, .box_w = 23, .box_h = 25, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 58729, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 59054, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 59365, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 59757, .adv_w = 472, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 60082, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 60447, .adv_w = 472, .box_w = 24, .box_h = 23, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 60723, .adv_w = 472, .box_w = 24, .box_h = 25, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 61023, .adv_w = 472, .box_w = 25, .box_h = 22, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 61298, .adv_w = 472, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 61586, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 61897, .adv_w = 472, .box_w = 19, .box_h = 20, .ofs_x = 5, .ofs_y = -2}, - {.bitmap_index = 62087, .adv_w = 472, .box_w = 25, .box_h = 25, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 62400, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 62778, .adv_w = 472, .box_w = 16, .box_h = 25, .ofs_x = 9, .ofs_y = -2}, - {.bitmap_index = 62978, .adv_w = 472, .box_w = 17, .box_h = 25, .ofs_x = 9, .ofs_y = -2}, - {.bitmap_index = 63191, .adv_w = 472, .box_w = 25, .box_h = 19, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 63429, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 63767, .adv_w = 472, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 64117, .adv_w = 472, .box_w = 22, .box_h = 23, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 64370, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 64762, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 65140, .adv_w = 472, .box_w = 28, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 65434, .adv_w = 472, .box_w = 25, .box_h = 20, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 65684, .adv_w = 472, .box_w = 20, .box_h = 25, .ofs_x = 5, .ofs_y = -2}, - {.bitmap_index = 65934, .adv_w = 472, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 66222, .adv_w = 472, .box_w = 25, .box_h = 22, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 66497, .adv_w = 472, .box_w = 21, .box_h = 21, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 66718, .adv_w = 472, .box_w = 20, .box_h = 16, .ofs_x = 5, .ofs_y = 0}, - {.bitmap_index = 66878, .adv_w = 472, .box_w = 17, .box_h = 19, .ofs_x = 6, .ofs_y = -2}, - {.bitmap_index = 67040, .adv_w = 472, .box_w = 21, .box_h = 25, .ofs_x = 4, .ofs_y = -3}, - {.bitmap_index = 67303, .adv_w = 472, .box_w = 16, .box_h = 25, .ofs_x = 7, .ofs_y = -2}, - {.bitmap_index = 67503, .adv_w = 472, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 67848, .adv_w = 472, .box_w = 21, .box_h = 23, .ofs_x = 6, .ofs_y = -1}, - {.bitmap_index = 68090, .adv_w = 472, .box_w = 21, .box_h = 22, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 68321, .adv_w = 472, .box_w = 22, .box_h = 23, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 68574, .adv_w = 472, .box_w = 23, .box_h = 22, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 68827, .adv_w = 472, .box_w = 23, .box_h = 3, .ofs_x = 3, .ofs_y = 9}, - {.bitmap_index = 68862, .adv_w = 472, .box_w = 27, .box_h = 3, .ofs_x = 1, .ofs_y = 10}, - {.bitmap_index = 68903, .adv_w = 472, .box_w = 27, .box_h = 25, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 69241, .adv_w = 472, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 69592, .adv_w = 472, .box_w = 24, .box_h = 28, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 69928, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 70240, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 70605, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 71026, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 71432, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 71824, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 72216, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 72608, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 72986, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 73364, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 73728, .adv_w = 472, .box_w = 23, .box_h = 28, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 74050, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 74442, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 74834, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 75199, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 75563, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 75984, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 76390, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 76796, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 77174, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 77552, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 77930, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 78336, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 78674, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 79052, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 79416, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 79780, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 80145, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 80537, .adv_w = 472, .box_w = 25, .box_h = 28, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 80887, .adv_w = 472, .box_w = 24, .box_h = 27, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 81211, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 81617, .adv_w = 472, .box_w = 29, .box_h = 26, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 81994, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 82386, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 82792, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 83184, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 83562, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 83954, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 84360, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 84738, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 85130, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 85494, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 85900, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 86306, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 86670, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 87062, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 87387, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 87779, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 88185, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 88550, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 88915, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 89279, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 89657, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 90078, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 90456, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 90834, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 91240, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 91618, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 92010, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 92416, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 92781, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 93145, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 93523, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 93901, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 94293, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 94671, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 95063, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 95441, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 95833, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 96239, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 96631, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 97023, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 97444, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 97809, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 98160, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 98511, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 98889, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 99295, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 99673, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 100065, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 100443, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 100807, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 101213, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 101634, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 102026, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 102432, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 102838, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 103244, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 103665, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 104071, .adv_w = 472, .box_w = 27, .box_h = 24, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 104395, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 104773, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 105151, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 105572, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 105923, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 106274, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 106625, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 107003, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 107395, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 107787, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 108193, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 108558, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 108950, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 109356, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 109762, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 110183, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 110604, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 111010, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 111335, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 111686, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 112078, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 112484, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 112890, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 113311, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 113703, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 114081, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 114502, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 114880, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 115272, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 115678, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 116084, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 116476, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 116882, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 117274, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 117639, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 118017, .adv_w = 472, .box_w = 29, .box_h = 26, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 118394, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 118800, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 119206, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 119517, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 119923, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 120315, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 120707, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 121099, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 121477, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 121869, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 122261, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 122639, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 123045, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 123437, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 123815, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 124207, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 124585, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 124977, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 125355, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 125747, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 126139, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 126545, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 126923, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 127288, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 127666, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 128058, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 128422, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 128814, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 129220, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 129612, .adv_w = 472, .box_w = 29, .box_h = 26, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 129989, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 130381, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 130759, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 131165, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 131571, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 131977, .adv_w = 472, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 132328, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 132692, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 133056, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 133462, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 133854, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 134166, .adv_w = 472, .box_w = 23, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 134465, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, - {.bitmap_index = 134777, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 135088, .adv_w = 472, .box_w = 24, .box_h = 29, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 135436, .adv_w = 472, .box_w = 23, .box_h = 28, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 135758, .adv_w = 472, .box_w = 27, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 136109, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 136487, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 136852, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 137230, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 137608, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 137973, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 138324, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 138688, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 138999, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 139321, .adv_w = 451, .box_w = 22, .box_h = 29, .ofs_x = 3, .ofs_y = -5}, - {.bitmap_index = 139640, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 139913, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 140277, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 140642, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 140915, .adv_w = 451, .box_w = 22, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 141212, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 141485, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 141823, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 142134, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 142485, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 142849, .adv_w = 451, .box_w = 21, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 143133, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 143484, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 143848, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 144159, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 144432, .adv_w = 451, .box_w = 24, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 144768, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 145132, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 145405, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 145769, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 146080, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 146353, .adv_w = 451, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 146691, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 147068, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 147445, .adv_w = 451, .box_w = 22, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 147742, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 148106, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 148379, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 148690, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 149001, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 149287, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 149651, .adv_w = 451, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 149989, .adv_w = 451, .box_w = 22, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 150286, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 150651, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 151029, .adv_w = 451, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 151421, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 151759, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 152083, .adv_w = 451, .box_w = 25, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 152433, .adv_w = 451, .box_w = 24, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 152781, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 153119, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 153405, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 153782, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 154159, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 154510, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 154796, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 155173, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 155484, .adv_w = 451, .box_w = 25, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 155834, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 156156, .adv_w = 451, .box_w = 25, .box_h = 29, .ofs_x = 2, .ofs_y = -5}, - {.bitmap_index = 156519, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 156843, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 157167, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 157453, .adv_w = 451, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 157845, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 158131, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 158508, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 158832, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 159209, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 159586, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 159897, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 160221, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 160543, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 160881, .adv_w = 451, .box_w = 24, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 161217, .adv_w = 451, .box_w = 24, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 161565, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 161929, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 162293, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 162604, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 162928, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 163306, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 163592, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 163916, .adv_w = 451, .box_w = 26, .box_h = 30, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 164306, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 164657, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 164981, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 165292, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 165565, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 165876, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 166187, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 166509, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 166782, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 167160, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 167484, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 167849, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 168214, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 168592, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 168970, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 169348, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 169712, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 170077, .adv_w = 451, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 170483, .adv_w = 451, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, - {.bitmap_index = 170875, .adv_w = 451, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 171281, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 171632, .adv_w = 472, .box_w = 6, .box_h = 9, .ofs_x = 4, .ofs_y = -5}, - {.bitmap_index = 171659, .adv_w = 472, .box_w = 5, .box_h = 18, .ofs_x = 5, .ofs_y = -1} + {.bitmap_index = 31660, .adv_w = 294, .box_w = 14, .box_h = 26, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 31842, .adv_w = 243, .box_w = 14, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 32003, .adv_w = 243, .box_w = 14, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 32164, .adv_w = 243, .box_w = 14, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 32325, .adv_w = 317, .box_w = 19, .box_h = 20, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 32515, .adv_w = 230, .box_w = 12, .box_h = 23, .ofs_x = 1, .ofs_y = -6}, + {.bitmap_index = 32653, .adv_w = 162, .box_w = 10, .box_h = 27, .ofs_x = 0, .ofs_y = -6}, + {.bitmap_index = 32788, .adv_w = 132, .box_w = 4, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 32830, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 33040, .adv_w = 299, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 33198, .adv_w = 298, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 33356, .adv_w = 239, .box_w = 13, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 33493, .adv_w = 271, .box_w = 14, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 33640, .adv_w = 354, .box_w = 18, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 33829, .adv_w = 398, .box_w = 21, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 34050, .adv_w = 340, .box_w = 17, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 34229, .adv_w = 357, .box_w = 19, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 34429, .adv_w = 340, .box_w = 17, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 34608, .adv_w = 287, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 34766, .adv_w = 288, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 34924, .adv_w = 253, .box_w = 16, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 35092, .adv_w = 314, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 35250, .adv_w = 294, .box_w = 15, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 35378, .adv_w = 297, .box_w = 16, .box_h = 24, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 35570, .adv_w = 278, .box_w = 14, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 35689, .adv_w = 184, .box_w = 9, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 35766, .adv_w = 293, .box_w = 18, .box_h = 22, .ofs_x = 0, .ofs_y = -5}, + {.bitmap_index = 35964, .adv_w = 277, .box_w = 15, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 36092, .adv_w = 352, .box_w = 22, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 36279, .adv_w = 233, .box_w = 12, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 36381, .adv_w = 310, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 36509, .adv_w = 310, .box_w = 15, .box_h = 24, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 36689, .adv_w = 240, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 36800, .adv_w = 283, .box_w = 15, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 36928, .adv_w = 353, .box_w = 18, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 37081, .adv_w = 308, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 37209, .adv_w = 297, .box_w = 16, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 37345, .adv_w = 308, .box_w = 15, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 37473, .adv_w = 305, .box_w = 16, .box_h = 23, .ofs_x = 2, .ofs_y = -6}, + {.bitmap_index = 37657, .adv_w = 239, .box_w = 13, .box_h = 17, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 37768, .adv_w = 217, .box_w = 14, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 37887, .adv_w = 253, .box_w = 16, .box_h = 23, .ofs_x = 0, .ofs_y = -6}, + {.bitmap_index = 38071, .adv_w = 432, .box_w = 25, .box_h = 30, .ofs_x = 1, .ofs_y = -6}, + {.bitmap_index = 38446, .adv_w = 248, .box_w = 16, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 38582, .adv_w = 316, .box_w = 18, .box_h = 22, .ofs_x = 2, .ofs_y = -5}, + {.bitmap_index = 38780, .adv_w = 290, .box_w = 14, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 38899, .adv_w = 429, .box_w = 23, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 39095, .adv_w = 377, .box_w = 19, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 39257, .adv_w = 274, .box_w = 14, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 39376, .adv_w = 401, .box_w = 22, .box_h = 17, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 39563, .adv_w = 251, .box_w = 13, .box_h = 17, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 39674, .adv_w = 129, .box_w = 4, .box_h = 23, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 39720, .adv_w = 129, .box_w = 10, .box_h = 23, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 39835, .adv_w = 291, .box_w = 15, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 39970, .adv_w = 261, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 40087, .adv_w = 309, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 40222, .adv_w = 236, .box_w = 13, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 40339, .adv_w = 240, .box_w = 13, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 40456, .adv_w = 276, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 40609, .adv_w = 261, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 40735, .adv_w = 266, .box_w = 15, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 40870, .adv_w = 424, .box_w = 25, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 41095, .adv_w = 309, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 41230, .adv_w = 311, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 41365, .adv_w = 293, .box_w = 15, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 41500, .adv_w = 304, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 41653, .adv_w = 291, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 41806, .adv_w = 301, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 41959, .adv_w = 301, .box_w = 17, .box_h = 24, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 42163, .adv_w = 306, .box_w = 15, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 42298, .adv_w = 336, .box_w = 19, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 42469, .adv_w = 336, .box_w = 19, .box_h = 24, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 42697, .adv_w = 308, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 42850, .adv_w = 298, .box_w = 15, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 42985, .adv_w = 279, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 43111, .adv_w = 213, .box_w = 12, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 43219, .adv_w = 279, .box_w = 14, .box_h = 18, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 43345, .adv_w = 207, .box_w = 11, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 43444, .adv_w = 281, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 43596, .adv_w = 297, .box_w = 17, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 43749, .adv_w = 279, .box_w = 14, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 43875, .adv_w = 281, .box_w = 15, .box_h = 19, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 44018, .adv_w = 184, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 44093, .adv_w = 0, .box_w = 13, .box_h = 7, .ofs_x = -12, .ofs_y = 20}, + {.bitmap_index = 44139, .adv_w = 187, .box_w = 10, .box_h = 18, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 44229, .adv_w = 187, .box_w = 18, .box_h = 26, .ofs_x = -8, .ofs_y = 0}, + {.bitmap_index = 44463, .adv_w = 0, .box_w = 14, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, + {.bitmap_index = 44505, .adv_w = 0, .box_w = 14, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, + {.bitmap_index = 44547, .adv_w = 0, .box_w = 15, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, + {.bitmap_index = 44592, .adv_w = 0, .box_w = 14, .box_h = 6, .ofs_x = -16, .ofs_y = 20}, + {.bitmap_index = 44634, .adv_w = 0, .box_w = 6, .box_h = 8, .ofs_x = -8, .ofs_y = -9}, + {.bitmap_index = 44658, .adv_w = 0, .box_w = 11, .box_h = 7, .ofs_x = -13, .ofs_y = -8}, + {.bitmap_index = 44697, .adv_w = 148, .box_w = 7, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 44760, .adv_w = 289, .box_w = 16, .box_h = 18, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 44904, .adv_w = 170, .box_w = 12, .box_h = 28, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 45072, .adv_w = 170, .box_w = 12, .box_h = 28, .ofs_x = -1, .ofs_y = 0}, + {.bitmap_index = 45240, .adv_w = 170, .box_w = 11, .box_h = 28, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 45394, .adv_w = 0, .box_w = 12, .box_h = 7, .ofs_x = -15, .ofs_y = 19}, + {.bitmap_index = 45436, .adv_w = 0, .box_w = 4, .box_h = 6, .ofs_x = -6, .ofs_y = 20}, + {.bitmap_index = 45448, .adv_w = 0, .box_w = 10, .box_h = 6, .ofs_x = -10, .ofs_y = 19}, + {.bitmap_index = 45478, .adv_w = 0, .box_w = 10, .box_h = 7, .ofs_x = -10, .ofs_y = 19}, + {.bitmap_index = 45513, .adv_w = 294, .box_w = 15, .box_h = 23, .ofs_x = 1, .ofs_y = -6}, + {.bitmap_index = 45686, .adv_w = 294, .box_w = 15, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 45874, .adv_w = 294, .box_w = 17, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 46095, .adv_w = 294, .box_w = 15, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 46290, .adv_w = 294, .box_w = 15, .box_h = 29, .ofs_x = 1, .ofs_y = -6}, + {.bitmap_index = 46508, .adv_w = 294, .box_w = 15, .box_h = 27, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 46711, .adv_w = 277, .box_w = 15, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 46899, .adv_w = 267, .box_w = 14, .box_h = 27, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 47088, .adv_w = 277, .box_w = 18, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 47322, .adv_w = 277, .box_w = 16, .box_h = 28, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 47546, .adv_w = 277, .box_w = 15, .box_h = 29, .ofs_x = 1, .ofs_y = -6}, + {.bitmap_index = 47764, .adv_w = 129, .box_w = 4, .box_h = 29, .ofs_x = 2, .ofs_y = -6}, + {.bitmap_index = 47822, .adv_w = 297, .box_w = 17, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 48043, .adv_w = 297, .box_w = 16, .box_h = 26, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 48251, .adv_w = 297, .box_w = 16, .box_h = 28, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 48475, .adv_w = 297, .box_w = 16, .box_h = 29, .ofs_x = 1, .ofs_y = -6}, + {.bitmap_index = 48707, .adv_w = 309, .box_w = 18, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 48914, .adv_w = 309, .box_w = 18, .box_h = 23, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 49121, .adv_w = 309, .box_w = 18, .box_h = 25, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 49346, .adv_w = 309, .box_w = 18, .box_h = 26, .ofs_x = 1, .ofs_y = -6}, + {.bitmap_index = 49580, .adv_w = 294, .box_w = 14, .box_h = 23, .ofs_x = 2, .ofs_y = -6}, + {.bitmap_index = 49741, .adv_w = 294, .box_w = 14, .box_h = 25, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 49916, .adv_w = 317, .box_w = 19, .box_h = 25, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 50154, .adv_w = 472, .box_w = 8, .box_h = 7, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 50182, .adv_w = 472, .box_w = 9, .box_h = 9, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 50223, .adv_w = 472, .box_w = 25, .box_h = 22, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 50498, .adv_w = 472, .box_w = 19, .box_h = 27, .ofs_x = 5, .ofs_y = -3}, + {.bitmap_index = 50755, .adv_w = 472, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 51080, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 51418, .adv_w = 472, .box_w = 27, .box_h = 25, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 51756, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 52148, .adv_w = 472, .box_w = 20, .box_h = 26, .ofs_x = 5, .ofs_y = -2}, + {.bitmap_index = 52408, .adv_w = 472, .box_w = 18, .box_h = 27, .ofs_x = 5, .ofs_y = -3}, + {.bitmap_index = 52651, .adv_w = 472, .box_w = 20, .box_h = 22, .ofs_x = 5, .ofs_y = -1}, + {.bitmap_index = 52871, .adv_w = 472, .box_w = 21, .box_h = 26, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 53144, .adv_w = 472, .box_w = 19, .box_h = 25, .ofs_x = 7, .ofs_y = -2}, + {.bitmap_index = 53382, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 53707, .adv_w = 472, .box_w = 28, .box_h = 25, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 54057, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 54395, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 54733, .adv_w = 472, .box_w = 22, .box_h = 26, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 55019, .adv_w = 472, .box_w = 20, .box_h = 17, .ofs_x = 5, .ofs_y = -1}, + {.bitmap_index = 55189, .adv_w = 472, .box_w = 25, .box_h = 20, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 55439, .adv_w = 472, .box_w = 25, .box_h = 24, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 55739, .adv_w = 472, .box_w = 27, .box_h = 24, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 56063, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 56401, .adv_w = 472, .box_w = 25, .box_h = 24, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 56701, .adv_w = 472, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 56989, .adv_w = 472, .box_w = 26, .box_h = 25, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 57314, .adv_w = 472, .box_w = 22, .box_h = 26, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 57600, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 57938, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 58250, .adv_w = 472, .box_w = 17, .box_h = 27, .ofs_x = 7, .ofs_y = -3}, + {.bitmap_index = 58480, .adv_w = 472, .box_w = 29, .box_h = 25, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 58843, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 59168, .adv_w = 472, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 59493, .adv_w = 472, .box_w = 24, .box_h = 24, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 59781, .adv_w = 472, .box_w = 18, .box_h = 21, .ofs_x = 5, .ofs_y = -2}, + {.bitmap_index = 59970, .adv_w = 472, .box_w = 22, .box_h = 25, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 60245, .adv_w = 472, .box_w = 22, .box_h = 27, .ofs_x = 4, .ofs_y = -3}, + {.bitmap_index = 60542, .adv_w = 472, .box_w = 25, .box_h = 19, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 60780, .adv_w = 472, .box_w = 21, .box_h = 21, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 61001, .adv_w = 472, .box_w = 23, .box_h = 25, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 61289, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 61614, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 61925, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 62317, .adv_w = 472, .box_w = 26, .box_h = 25, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 62642, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 63007, .adv_w = 472, .box_w = 24, .box_h = 23, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 63283, .adv_w = 472, .box_w = 24, .box_h = 25, .ofs_x = 3, .ofs_y = -1}, + {.bitmap_index = 63583, .adv_w = 472, .box_w = 25, .box_h = 22, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 63858, .adv_w = 472, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 64146, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 64457, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 64849, .adv_w = 472, .box_w = 19, .box_h = 20, .ofs_x = 5, .ofs_y = -2}, + {.bitmap_index = 65039, .adv_w = 472, .box_w = 25, .box_h = 25, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 65352, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 65730, .adv_w = 472, .box_w = 16, .box_h = 25, .ofs_x = 9, .ofs_y = -2}, + {.bitmap_index = 65930, .adv_w = 472, .box_w = 17, .box_h = 25, .ofs_x = 9, .ofs_y = -2}, + {.bitmap_index = 66143, .adv_w = 472, .box_w = 25, .box_h = 19, .ofs_x = 2, .ofs_y = 1}, + {.bitmap_index = 66381, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 66719, .adv_w = 472, .box_w = 28, .box_h = 25, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 67069, .adv_w = 472, .box_w = 22, .box_h = 23, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 67322, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 67714, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 68092, .adv_w = 472, .box_w = 28, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 68386, .adv_w = 472, .box_w = 25, .box_h = 20, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 68636, .adv_w = 472, .box_w = 20, .box_h = 25, .ofs_x = 5, .ofs_y = -2}, + {.bitmap_index = 68886, .adv_w = 472, .box_w = 25, .box_h = 23, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 69174, .adv_w = 472, .box_w = 25, .box_h = 22, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 69449, .adv_w = 472, .box_w = 21, .box_h = 21, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 69670, .adv_w = 472, .box_w = 20, .box_h = 16, .ofs_x = 5, .ofs_y = 0}, + {.bitmap_index = 69830, .adv_w = 472, .box_w = 17, .box_h = 19, .ofs_x = 6, .ofs_y = -2}, + {.bitmap_index = 69992, .adv_w = 472, .box_w = 21, .box_h = 25, .ofs_x = 4, .ofs_y = -3}, + {.bitmap_index = 70255, .adv_w = 472, .box_w = 16, .box_h = 25, .ofs_x = 7, .ofs_y = -2}, + {.bitmap_index = 70455, .adv_w = 472, .box_w = 30, .box_h = 23, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 70800, .adv_w = 472, .box_w = 21, .box_h = 23, .ofs_x = 6, .ofs_y = -1}, + {.bitmap_index = 71042, .adv_w = 472, .box_w = 21, .box_h = 22, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 71273, .adv_w = 472, .box_w = 22, .box_h = 23, .ofs_x = 4, .ofs_y = -2}, + {.bitmap_index = 71526, .adv_w = 472, .box_w = 23, .box_h = 22, .ofs_x = 4, .ofs_y = -1}, + {.bitmap_index = 71779, .adv_w = 472, .box_w = 23, .box_h = 3, .ofs_x = 3, .ofs_y = 9}, + {.bitmap_index = 71814, .adv_w = 472, .box_w = 27, .box_h = 3, .ofs_x = 1, .ofs_y = 10}, + {.bitmap_index = 71855, .adv_w = 472, .box_w = 27, .box_h = 25, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 72193, .adv_w = 472, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 72544, .adv_w = 472, .box_w = 24, .box_h = 28, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 72880, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 73192, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 73570, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 73991, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 74397, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 74803, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 75224, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 75616, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 76008, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 76400, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 76778, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 77156, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 77520, .adv_w = 472, .box_w = 23, .box_h = 28, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 77842, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 78234, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 78626, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 79004, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 79368, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 79746, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 80167, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 80573, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 80979, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 81357, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 81735, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 82113, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 82519, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 82925, .adv_w = 472, .box_w = 26, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 83263, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 83641, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 84005, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 84369, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 84734, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 85126, .adv_w = 472, .box_w = 25, .box_h = 28, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 85476, .adv_w = 472, .box_w = 24, .box_h = 27, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 85800, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 86206, .adv_w = 472, .box_w = 29, .box_h = 26, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 86583, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 86975, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 87381, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 87787, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 88165, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 88557, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 88963, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 89369, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 89747, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 90139, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 90503, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 90909, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 91315, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 91679, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 92071, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 92396, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 92788, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 93194, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 93559, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 93924, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 94288, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 94666, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 95087, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 95465, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 95843, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 96249, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 96627, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 97019, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 97425, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 97803, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 98168, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 98532, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 98910, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 99288, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 99680, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 100058, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 100450, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 100828, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 101220, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 101626, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 102018, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 102410, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 102831, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 103196, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 103547, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 103898, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 104276, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 104682, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 105060, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 105452, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 105817, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 106195, .adv_w = 472, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 106559, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 106980, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 107401, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 107793, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 108199, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 108605, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 109011, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 109432, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 109838, .adv_w = 472, .box_w = 27, .box_h = 24, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 110162, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 110540, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 110918, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 111339, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 111690, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 112041, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 112392, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 112770, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 113162, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 113554, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 113946, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 114352, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 114717, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 115109, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 115515, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 115921, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 116342, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 116763, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 117169, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 117547, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 117925, .adv_w = 472, .box_w = 25, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 118250, .adv_w = 472, .box_w = 26, .box_h = 27, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 118601, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 118993, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 119399, .adv_w = 472, .box_w = 25, .box_h = 28, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 119749, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 120155, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 120576, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 120982, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 121360, .adv_w = 472, .box_w = 29, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 121781, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 122159, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 122551, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 122957, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 123363, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 123755, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 124161, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 124553, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 124918, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 125296, .adv_w = 472, .box_w = 29, .box_h = 26, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 125673, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 126079, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 126485, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 126796, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 127202, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 127594, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 127986, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 128378, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 128743, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 129121, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 129513, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 129905, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 130283, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 130689, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 131081, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 131459, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 131851, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 132229, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 132635, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 133027, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 133419, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 133811, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 134203, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 134609, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 134987, .adv_w = 472, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 135352, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 135730, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 136122, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 136500, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 136892, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 137298, .adv_w = 472, .box_w = 28, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 137704, .adv_w = 472, .box_w = 29, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 138096, .adv_w = 472, .box_w = 29, .box_h = 26, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 138473, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 138879, .adv_w = 472, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 139271, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 139663, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 140069, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 140447, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 140853, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 141259, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 141665, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 142071, .adv_w = 472, .box_w = 27, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 142422, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 142786, .adv_w = 472, .box_w = 28, .box_h = 26, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 143150, .adv_w = 472, .box_w = 29, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 143556, .adv_w = 472, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 143948, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 144260, .adv_w = 472, .box_w = 23, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 144559, .adv_w = 472, .box_w = 24, .box_h = 26, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 144871, .adv_w = 472, .box_w = 23, .box_h = 27, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 145182, .adv_w = 472, .box_w = 24, .box_h = 29, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 145530, .adv_w = 472, .box_w = 23, .box_h = 28, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 145852, .adv_w = 472, .box_w = 27, .box_h = 26, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 146203, .adv_w = 472, .box_w = 28, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 146581, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 146959, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 147337, .adv_w = 472, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 147715, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 148080, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 148431, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 148795, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 149106, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 149430, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 149752, .adv_w = 451, .box_w = 22, .box_h = 29, .ofs_x = 3, .ofs_y = -5}, + {.bitmap_index = 150071, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 150344, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 150708, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 151073, .adv_w = 451, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 151411, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 151684, .adv_w = 451, .box_w = 22, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 151981, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 152254, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 152592, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 152903, .adv_w = 451, .box_w = 22, .box_h = 29, .ofs_x = 3, .ofs_y = -5}, + {.bitmap_index = 153222, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 153573, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 153937, .adv_w = 451, .box_w = 21, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 154221, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 154572, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 154936, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 155247, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 155520, .adv_w = 451, .box_w = 24, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 155856, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 156220, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 156493, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 156857, .adv_w = 451, .box_w = 22, .box_h = 29, .ofs_x = 3, .ofs_y = -5}, + {.bitmap_index = 157176, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 157487, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 157798, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 158071, .adv_w = 451, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 158409, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 158786, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 159163, .adv_w = 451, .box_w = 22, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 159460, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 159824, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 160097, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 160461, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 160772, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 161083, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 161369, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 161733, .adv_w = 451, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 162071, .adv_w = 451, .box_w = 22, .box_h = 27, .ofs_x = 3, .ofs_y = -2}, + {.bitmap_index = 162368, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 162733, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 163111, .adv_w = 451, .box_w = 27, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 163503, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 163841, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 164165, .adv_w = 451, .box_w = 25, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 164515, .adv_w = 451, .box_w = 24, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 164863, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 165201, .adv_w = 451, .box_w = 25, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 165564, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 165850, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 166227, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 166604, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 166955, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 167241, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 167618, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 167929, .adv_w = 451, .box_w = 25, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 168279, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 168644, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 168966, .adv_w = 451, .box_w = 25, .box_h = 29, .ofs_x = 2, .ofs_y = -5}, + {.bitmap_index = 169329, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 169653, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 169977, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 170263, .adv_w = 451, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 170655, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 170941, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 171318, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 171682, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 172006, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 172383, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 172760, .adv_w = 451, .box_w = 26, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 173137, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 173448, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 173772, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 174094, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 174472, .adv_w = 451, .box_w = 25, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 174810, .adv_w = 451, .box_w = 24, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 175146, .adv_w = 451, .box_w = 24, .box_h = 29, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 175494, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 175858, .adv_w = 451, .box_w = 26, .box_h = 26, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 176196, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 176560, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 176871, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 177195, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 177573, .adv_w = 451, .box_w = 26, .box_h = 22, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 177859, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 178183, .adv_w = 451, .box_w = 26, .box_h = 30, .ofs_x = 1, .ofs_y = -5}, + {.bitmap_index = 178573, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 178897, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 179248, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 179572, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 179883, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 180156, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 180467, .adv_w = 451, .box_w = 23, .box_h = 27, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 180778, .adv_w = 451, .box_w = 23, .box_h = 28, .ofs_x = 2, .ofs_y = -4}, + {.bitmap_index = 181100, .adv_w = 451, .box_w = 26, .box_h = 21, .ofs_x = 1, .ofs_y = 1}, + {.bitmap_index = 181373, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 181751, .adv_w = 451, .box_w = 24, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 182075, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 182440, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 182805, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 183183, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 183561, .adv_w = 451, .box_w = 27, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 183939, .adv_w = 451, .box_w = 26, .box_h = 28, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 184303, .adv_w = 451, .box_w = 27, .box_h = 27, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 184668, .adv_w = 451, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -5}, + {.bitmap_index = 185074, .adv_w = 451, .box_w = 28, .box_h = 28, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 185466, .adv_w = 451, .box_w = 28, .box_h = 29, .ofs_x = 0, .ofs_y = -5}, + {.bitmap_index = 185872, .adv_w = 451, .box_w = 26, .box_h = 27, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 186223, .adv_w = 472, .box_w = 5, .box_h = 22, .ofs_x = 5, .ofs_y = -1}, + {.bitmap_index = 186278, .adv_w = 472, .box_w = 6, .box_h = 9, .ofs_x = 4, .ofs_y = -5}, + {.bitmap_index = 186305, .adv_w = 472, .box_w = 5, .box_h = 18, .ofs_x = 5, .ofs_y = -1} }; /*--------------------- @@ -23821,66 +25800,72 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { static const uint16_t unicode_list_2[] = { 0x0, 0x2, 0x4, 0x9, 0xa, 0xd, 0xe, 0x16, 0x18, 0x1c, 0x2e, 0x3e, 0x3f, 0x56, 0x58, 0x5b, - 0x5c, 0x5e, 0x62, 0x77, 0x79, 0x7b, 0xad, 0x116, - 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, 0x315, - 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x324 + 0x5c, 0x5e, 0x62, 0x6c, 0x77, 0x79, 0x7b, 0xad, + 0x116, 0x118, 0x303, 0x30d, 0x30e, 0x30f, 0x310, 0x314, + 0x315, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, + 0x324 }; static const uint16_t unicode_list_4[] = { 0x0, 0x1, 0x3, 0x4, 0xb, 0xc, 0x9b6, 0x9b7, - 0x9b9, 0x9bc, 0x9bd, 0x9bf, 0x9c0, 0x9c8, 0x9c9, 0x9ca, - 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, 0x9d4, - 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, 0x9e0, - 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, - 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, 0x9f8, - 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, 0x1a5a, - 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, 0x1a7c, - 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, 0x1a94, - 0x1a98, 0x1a9a, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, 0x2bfb, 0x2bfd, - 0x2bff, 0x2c01, 0x2c02, 0x2c04, 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, - 0x2c14, 0x2c15, 0x2c18, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c33, - 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, 0x2c59, - 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, 0x2c6a, - 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c78, 0x2c7b, - 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, 0x2c8a, 0x2c8b, - 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, 0x2c98, 0x2c9a, - 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, 0x2ca4, 0x2ca8, - 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, 0x4aef, 0x4b03, - 0x4b96, 0x4c4e, 0x4cfa, 0x4cfd, 0x4d1a, 0x4d28, 0x4d42, 0x4daf, - 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, - 0x4efc, 0x4f16, 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, - 0x5032, 0x5082, 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, - 0x54dc, 0x54e6, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, - 0x57c0, 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, - 0x5b3a, 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, + 0x9b9, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c8, 0x9c9, + 0x9ca, 0x9cb, 0x9cc, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d3, + 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9da, 0x9dc, 0x9df, + 0x9e0, 0x9e2, 0x9e3, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, + 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9f5, 0x9f6, 0x9f7, + 0x9f8, 0x9f9, 0x9fc, 0x9fd, 0x9fe, 0xa01, 0x1a56, 0x1a58, + 0x1a5a, 0x1a5c, 0x1a62, 0x1a64, 0x1a70, 0x1a72, 0x1a74, 0x1a78, + 0x1a7c, 0x1a80, 0x1a86, 0x1a88, 0x1a8c, 0x1a8e, 0x1a90, 0x1a92, + 0x1a94, 0x1a98, 0x1a9a, 0x1a9c, 0x1aa2, 0x2bb6, 0x2bb7, 0x2bf9, + 0x2bfb, 0x2bfd, 0x2bff, 0x2c00, 0x2c01, 0x2c02, 0x2c04, 0x2c08, + 0x2c0a, 0x2c0c, 0x2c0e, 0x2c10, 0x2c14, 0x2c15, 0x2c16, 0x2c18, + 0x2c19, 0x2c1b, 0x2c1c, 0x2c1f, 0x2c20, 0x2c23, 0x2c24, 0x2c33, + 0x2c34, 0x2c37, 0x2c3f, 0x2c41, 0x2c47, 0x2c48, 0x2c57, 0x2c58, + 0x2c59, 0x2c5b, 0x2c5d, 0x2c5e, 0x2c60, 0x2c62, 0x2c64, 0x2c65, + 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c70, 0x2c74, 0x2c75, + 0x2c78, 0x2c7b, 0x2c7c, 0x2c7d, 0x2c7e, 0x2c80, 0x2c82, 0x2c85, + 0x2c8a, 0x2c8b, 0x2c8c, 0x2c8e, 0x2c93, 0x2c94, 0x2c95, 0x2c97, + 0x2c98, 0x2c9a, 0x2c9c, 0x2c9e, 0x2c9f, 0x2ca0, 0x2ca1, 0x2ca2, + 0x2ca4, 0x2ca8, 0x2cb1, 0x49b5, 0x49c0, 0x49c2, 0x49e2, 0x4a3b, + 0x4aef, 0x4b03, 0x4b15, 0x4b96, 0x4bce, 0x4c4e, 0x4cfa, 0x4cfd, + 0x4d1a, 0x4d28, 0x4d42, 0x4daf, 0x4dbc, 0x4dd2, 0x4dde, 0x4de5, + 0x4e55, 0x4e56, 0x4e6e, 0x4e8e, 0x4ecb, 0x4efc, 0x4f16, 0x4f80, + 0x4f86, 0x4fa4, 0x4fc3, 0x4fe1, 0x4fe4, 0x4fff, 0x5032, 0x5082, + 0x5104, 0x5114, 0x521d, 0x52dd, 0x53e6, 0x54bc, 0x54dc, 0x54e6, + 0x5532, 0x5580, 0x5741, 0x574f, 0x57b0, 0x57bb, 0x57bc, 0x57c0, + 0x57c6, 0x59a7, 0x5a49, 0x5a5b, 0x5ab5, 0x5ac4, 0x5b0a, 0x5b3a, + 0x5b41, 0x5b91, 0x5bb6, 0x5c24, 0x5c7a, 0x5d00, 0x5d7e, 0x5dc6, 0x5e00, 0x5e20, 0x5e33, 0x5ef4, 0x5f17, 0x5f38, 0x5f57, 0x5f5a, 0x5f84, 0x5f87, 0x5f90, 0x610c, 0x6165, 0x6195, 0x61ab, 0x61f7, - 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c2, 0x62d4, 0x62e1, 0x62ef, - 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, 0x688a, - 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a96, 0x6ab4, - 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, 0x6e6b, 0x6e75, - 0x70dd, 0x70ea, 0x7230, 0x7231, 0x746f, 0x7587, 0x75c2, 0x76fe, - 0x7709, 0x78b0, 0x78cf, 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, - 0x7967, 0x7a5c, 0x7a79, 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, - 0x7cb2, 0x8401, 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, - 0x8626, 0x8642, 0x8659, 0x865f, 0x8680, 0x871b, 0x8773, 0x8774, - 0x878a, 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x893a, - 0x8968, 0x89a4, 0x8b90, 0x8b93, 0x8bb6, 0x8bd8, 0x8d02, 0x8d82, - 0x8d84, 0x8ee4, 0x90ce, 0x913e, 0x9140, 0x9148, 0x9191, 0x91a2, - 0x91a3, 0x92b0, 0x930e, 0x9311, 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, - 0xa7c5, 0xa825, 0xa865, 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa9ad, - 0xa9e5, 0xabf9, 0xac4d, 0xacd9, 0xae49, 0xae5a, 0xae7d, 0xae99, - 0xaeaa, 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb3bd, - 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, 0xb7e5, - 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, 0xbc72, 0xbc76, - 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd41, 0xbd42, 0xbd56, - 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, 0xc17a, 0xc17b, 0xc185, - 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, 0xc25e, 0xc281, 0xc301, 0xc306, - 0xc329, 0xc32d, 0xc33a, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4c6, - 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca29, 0xca49, - 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, 0xcedd, - 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, 0xd20a, - 0xd20d, 0xd211, 0xd279, 0xfac1, 0xfacf + 0x62a9, 0x62b4, 0x62b5, 0x62be, 0x62c0, 0x62c2, 0x62d4, 0x62e1, + 0x62ef, 0x639a, 0x6475, 0x64d1, 0x65d6, 0x6614, 0x6657, 0x6718, + 0x688a, 0x68f0, 0x68f6, 0x6900, 0x6904, 0x69e1, 0x6a35, 0x6a45, + 0x6a96, 0x6ab4, 0x6b75, 0x6bc4, 0x6c6e, 0x6ca2, 0x6cd6, 0x6dfd, + 0x6e6b, 0x6e75, 0x6f65, 0x6fb3, 0x70dd, 0x70ea, 0x7230, 0x7231, + 0x7239, 0x746f, 0x7587, 0x75c2, 0x76fe, 0x7709, 0x78b0, 0x78cf, + 0x78f7, 0x78f9, 0x7916, 0x7926, 0x794f, 0x7967, 0x7a5c, 0x7a79, + 0x7a91, 0x7a94, 0x7b06, 0x7bfb, 0x7c32, 0x7cb2, 0x8401, 0x8540, + 0x8572, 0x857d, 0x85bf, 0x85df, 0x85e2, 0x861b, 0x8626, 0x8642, + 0x8659, 0x865f, 0x8662, 0x8680, 0x871b, 0x8773, 0x8774, 0x878a, + 0x8792, 0x87a4, 0x87a9, 0x87ac, 0x887c, 0x88da, 0x88f9, 0x893a, + 0x8968, 0x89a4, 0x8abe, 0x8b32, 0x8b71, 0x8b90, 0x8b93, 0x8bb6, + 0x8bd8, 0x8c09, 0x8d02, 0x8d82, 0x8d84, 0x8ee4, 0x90ce, 0x913e, + 0x9140, 0x9148, 0x9191, 0x91a2, 0x91a3, 0x92b0, 0x930e, 0x9311, + 0x93a8, 0x93b4, 0xa7b5, 0xa7b9, 0xa7c5, 0xa825, 0xa861, 0xa865, + 0xa872, 0xa895, 0xa8aa, 0xa8b1, 0xa921, 0xa9ad, 0xa9e5, 0xabf9, + 0xac4d, 0xacd9, 0xad0a, 0xae49, 0xae5a, 0xae7d, 0xae99, 0xaeaa, + 0xaeb5, 0xaf79, 0xafdd, 0xb07d, 0xb091, 0xb098, 0xb0de, 0xb3bd, + 0xb3d9, 0xb411, 0xb50d, 0xb51d, 0xb531, 0xb561, 0xb585, 0xb65d, + 0xb7d1, 0xb7e5, 0xb839, 0xb8a9, 0xb8b1, 0xb935, 0xb9f9, 0xbc61, + 0xbc72, 0xbc76, 0xbc7d, 0xbcd1, 0xbcd9, 0xbce6, 0xbced, 0xbd00, + 0xbd41, 0xbd42, 0xbd56, 0xbdcd, 0xbe59, 0xbe6a, 0xbe91, 0xbe99, + 0xc0fd, 0xc17a, 0xc17b, 0xc185, 0xc1a5, 0xc1d9, 0xc1f9, 0xc249, + 0xc25e, 0xc269, 0xc281, 0xc2f9, 0xc301, 0xc306, 0xc329, 0xc32d, + 0xc33a, 0xc355, 0xc3b9, 0xc3c6, 0xc3ca, 0xc426, 0xc4b1, 0xc4c6, + 0xc575, 0xc579, 0xc7f3, 0xc8bd, 0xc911, 0xc95e, 0xca11, 0xca29, + 0xca49, 0xcad1, 0xcc21, 0xcc91, 0xcce5, 0xcd11, 0xce6d, 0xced4, + 0xcedd, 0xd10d, 0xd111, 0xd115, 0xd11e, 0xd120, 0xd13d, 0xd209, + 0xd20a, 0xd20d, 0xd211, 0xd279, 0xfab6, 0xfac1, 0xfacf }; /*Collect the unicode lists and glyph_id offsets*/ @@ -23896,15 +25881,15 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = }, { .range_start = 259, .range_length = 805, .glyph_id_start = 191, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 41, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY }, { - .range_start = 1072, .range_length = 25, .glyph_id_start = 231, + .range_start = 1072, .range_length = 25, .glyph_id_start = 232, .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY }, { - .range_start = 1099, .range_length = 64208, .glyph_id_start = 256, - .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 429, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .range_start = 1099, .range_length = 64208, .glyph_id_start = 257, + .unicode_list = unicode_list_4, .glyph_id_ofs_list = NULL, .list_length = 471, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; @@ -23942,13 +25927,13 @@ static const uint8_t kern_left_class_mapping[] = 44, 44, 44, 44, 45, 32, 45, 31, 59, 0, 11, 0, 12, 60, 33, 33, 0, 36, 19, 61, 41, 42, 23, 42, - 42, 62, 47, 47, 47, 0, 42, 43, - 63, 64, 65, 66, 67, 66, 63, 63, - 63, 68, 63, 69, 70, 67, 63, 71, - 72, 73, 74, 75, 76, 77, 73, 78, - 79, 77, 79, 79, 79, 80, 78, 80, - 81, 74, 82, 80, 83, 75, 78, 79, - 78, 84, 80, 78, 85, 86, 0, 0, + 42, 62, 44, 47, 47, 47, 0, 42, + 43, 63, 64, 65, 66, 67, 66, 63, + 63, 63, 68, 63, 69, 70, 67, 63, + 71, 72, 73, 74, 75, 76, 77, 73, + 78, 79, 77, 79, 79, 79, 80, 78, + 80, 81, 74, 82, 80, 83, 75, 78, + 79, 78, 84, 80, 78, 85, 86, 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, @@ -24001,7 +25986,12 @@ static const uint8_t kern_left_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Map glyph_ids to kern right classes*/ @@ -24033,13 +26023,13 @@ static const uint8_t kern_right_class_mapping[] = 37, 37, 37, 37, 38, 0, 38, 49, 25, 26, 14, 50, 48, 26, 26, 50, 28, 30, 13, 55, 0, 35, 16, 35, - 56, 36, 41, 41, 41, 0, 35, 36, - 57, 58, 57, 57, 57, 0, 57, 57, - 57, 59, 57, 57, 59, 60, 61, 62, - 0, 63, 63, 64, 65, 66, 67, 63, - 63, 63, 68, 63, 63, 65, 63, 63, - 65, 69, 70, 65, 71, 63, 72, 63, - 63, 63, 63, 63, 73, 74, 0, 0, + 56, 36, 37, 41, 41, 41, 0, 35, + 36, 57, 58, 57, 57, 57, 0, 57, + 57, 57, 59, 57, 57, 59, 60, 61, + 62, 0, 63, 63, 64, 65, 66, 67, + 63, 63, 63, 68, 63, 63, 65, 63, + 63, 65, 69, 70, 65, 71, 63, 72, + 63, 63, 63, 63, 63, 73, 74, 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, @@ -24092,7 +26082,12 @@ static const uint8_t kern_right_class_mapping[] = 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, + 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, 0, 0, 0 }; /*Kern values between classes*/ diff --git a/managed_components/espressif__esp_lcd_st7796/.component_hash b/managed_components/espressif__esp_lcd_st7796/.component_hash index 8ea22b1..0a93757 100644 --- a/managed_components/espressif__esp_lcd_st7796/.component_hash +++ b/managed_components/espressif__esp_lcd_st7796/.component_hash @@ -1 +1 @@ -00ab2872c56a4037e6d1efda104ef0da00c5296865f8f938cc7cc2fc3e99f962 \ No newline at end of file +9e165065cf25b4575dd9f587440ad22aa94d011359d55a97fc39bb691a9fc0cd \ No newline at end of file diff --git a/managed_components/espressif__esp_lcd_st7796/CHECKSUMS.json b/managed_components/espressif__esp_lcd_st7796/CHECKSUMS.json index a1d9ae8..7a681e0 100644 --- a/managed_components/espressif__esp_lcd_st7796/CHECKSUMS.json +++ b/managed_components/espressif__esp_lcd_st7796/CHECKSUMS.json @@ -1 +1 @@ -{"version": "1.0", "algorithm": "sha256", "created_at": "2025-05-21T15:56:53.722942+00:00", "files": [{"path": "CMakeLists.txt", "size": 456, "hash": "581b434233fe10f4ae03f48fe4ffcdc76e66027fbe744a663cb997910f492b4c"}, {"path": "idf_component.yml", "size": 419, "hash": "ad43d718c731c9544afc1212c7cdfa2a191b20ace26432a16834b0103d99023e"}, {"path": "esp_lcd_st7796_mipi.c", "size": 10806, "hash": "d072e86ab67b328e1377b5bfbb303273d4908c2fb3b6143ce10e5ed06eb01671"}, {"path": "esp_lcd_st7796.c", "size": 1238, "hash": "03c742b629f27d38a94cd3aa8a157195b9a9f8cc57618d30e96ecc3545b07b98"}, {"path": "README.md", "size": 6349, "hash": "bea9ce10526e7d6ad31f0ae522be18ecdd21275ff9935d3d5d86946f3da605da"}, {"path": "esp_lcd_st7796_general.c", "size": 13051, "hash": "d4b50de091a25cb3c001ed903d0178c6fc76d2705ea87daa11fe245a93592447"}, {"path": "license.txt", "size": 11358, "hash": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30"}, {"path": "include/esp_lcd_st7796.h", "size": 9569, "hash": "25837296fe53c0a3a6dbb7e80dae24a97cbf266abbae762264a000f1b245a7e2"}, {"path": "test_apps/CMakeLists.txt", "size": 316, "hash": "bb5058dad04df955f82c042f32ea8b9a5434a54104caa0f01b2929741a24f0e5"}, {"path": "test_apps/sdkconfig.defaults", "size": 353, "hash": "296f4a3a607c38d36f5d9405c3fc968a1a495447f762753f007b212b0d21fbb7"}, {"path": "priv_include/esp_lcd_st7796_interface.h", "size": 1275, "hash": "3dcf1fc8902350f3d7e172cfb956431047121a011f0e35f86fd22437a675a66b"}, {"path": "test_apps/main/test_esp_lcd_st7796_general.c", "size": 5226, "hash": "b1027efe0ff375cfe33452525160d645fd4f83887235d3590dedc06eddf0f533"}, {"path": "test_apps/main/CMakeLists.txt", "size": 113, "hash": "5b20a48123d65be888744cb5c81ce67aab07572469268b9daf97e7d8177918f0"}, {"path": "test_apps/main/idf_component.yml", "size": 148, "hash": "2c9d76d9b5cf309b56ac449dfb787fadc3b3bd9debd7c941f2e75b413e7eae04"}, {"path": "test_apps/main/test_esp_lcd_st7796_mipi.c", "size": 7985, "hash": "b76a27bec8fd126f51a5a60729e62d7e703d2e644da721a35ca0637420c64e2c"}, {"path": "test_apps/main/test_app_main.c", "size": 1499, "hash": "c1525b7878c26e6700e6e992037a132a18b8d5ac6a9006d80c245d039815c7b0"}]} \ No newline at end of file +{"version": "1.0", "algorithm": "sha256", "created_at": "2025-08-26T09:58:45.372697+00:00", "files": [{"path": "CMakeLists.txt", "size": 456, "hash": "581b434233fe10f4ae03f48fe4ffcdc76e66027fbe744a663cb997910f492b4c"}, {"path": "README.md", "size": 6088, "hash": "13d7a64f75cbac9c0ab647ec91e1c90d5c8fb7c2842c7fedca2e92bcce032110"}, {"path": "esp_lcd_st7796.c", "size": 1238, "hash": "03c742b629f27d38a94cd3aa8a157195b9a9f8cc57618d30e96ecc3545b07b98"}, {"path": "esp_lcd_st7796_general.c", "size": 13466, "hash": "dc67f5511567c20ca48ef1190a680504efb2653dfc14ad8312e9d7288cb6a440"}, {"path": "esp_lcd_st7796_mipi.c", "size": 11624, "hash": "844bd3958fa078a9fadbd9ffe12a766296f4f895f4ac0ff19aa62bfc0b96f44f"}, {"path": "idf_component.yml", "size": 419, "hash": "916ce7401966adbae5bd2b9a895c0290373c359d7ff73e5b5c4f896b09d93356"}, {"path": "license.txt", "size": 11358, "hash": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30"}, {"path": "include/esp_lcd_st7796.h", "size": 10809, "hash": "f27197e0c05577badc107428edbbd0145481dbcfa74dda0c96d0d6d5b3c1abd8"}, {"path": "priv_include/esp_lcd_st7796_interface.h", "size": 1275, "hash": "3dcf1fc8902350f3d7e172cfb956431047121a011f0e35f86fd22437a675a66b"}, {"path": "test_apps/CMakeLists.txt", "size": 263, "hash": "a44782cc239c58b39146a1fd9fbd40d952417ca0dcbcc34056d0f7af208024c6"}, {"path": "test_apps/sdkconfig.defaults", "size": 353, "hash": "296f4a3a607c38d36f5d9405c3fc968a1a495447f762753f007b212b0d21fbb7"}, {"path": "test_apps/main/CMakeLists.txt", "size": 159, "hash": "c7883535398f0b3c534d0fa2f98041d1b2fec5b098af36040af790222464c13d"}, {"path": "test_apps/main/idf_component.yml", "size": 148, "hash": "2c9d76d9b5cf309b56ac449dfb787fadc3b3bd9debd7c941f2e75b413e7eae04"}, {"path": "test_apps/main/test_app_main.c", "size": 1499, "hash": "c1525b7878c26e6700e6e992037a132a18b8d5ac6a9006d80c245d039815c7b0"}, {"path": "test_apps/main/test_esp_lcd_st7796_general.c", "size": 5331, "hash": "cf1e7ff95eecf164d402713bfb3380d7d5d3b8d21c2d3d58e8a088c7b9b3aeeb"}, {"path": "test_apps/main/test_esp_lcd_st7796_mipi.c", "size": 7985, "hash": "b76a27bec8fd126f51a5a60729e62d7e703d2e644da721a35ca0637420c64e2c"}]} \ No newline at end of file diff --git a/managed_components/espressif__esp_lcd_st7796/README.md b/managed_components/espressif__esp_lcd_st7796/README.md index 79a4c4f..bdb2ff2 100644 --- a/managed_components/espressif__esp_lcd_st7796/README.md +++ b/managed_components/espressif__esp_lcd_st7796/README.md @@ -14,7 +14,7 @@ Packages from this repository are uploaded to [Espressif's component service](ht You can add them to your project via `idf.py add-dependency`, e.g. ```bash -compote manifest add-dependency espressif/esp_lcd_st7796==1.0.0 +idf.py add-dependency "espressif/esp_lcd_st7796^1.3.0" ``` Alternatively, you can create `idf_component.yml`. More is in [Espressif's documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-component-manager.html). @@ -59,23 +59,15 @@ Alternatively, you can create `idf_component.yml`. More is in [Espressif's docum // .init_cmds_size = sizeof(lcd_init_cmds) / sizeof(st7796_lcd_init_cmd_t), // }; const esp_lcd_panel_dev_config_t panel_config = { - .reset_gpio_num = EXAMPLE_PIN_NUM_LCD_RST, // Set to -1 if not use -#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) // Implemented by LCD command `36h` - .color_space = ESP_LCD_COLOR_SPACE_RGB, -#else - .rgb_endian = LCD_RGB_ENDIAN_RGB, -#endif - .bits_per_pixel = EXAMPLE_LCD_BIT_PER_PIXEL, // Implemented by LCD command `3Ah` (16/18/24) - // .vendor_config = &vendor_config, // Uncomment this line if use custom initialization commands + .reset_gpio_num = EXAMPLE_PIN_NUM_LCD_RST, // Set to -1 if not use + .rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB, // RGB element order: R-G-B + .bits_per_pixel = EXAMPLE_LCD_BIT_PER_PIXEL, // Implemented by LCD command `3Ah` (16/18/24) + // .vendor_config = &vendor_config, // Uncomment this line if use custom initialization commands }; ESP_ERROR_CHECK(esp_lcd_new_panel_st7796(io_handle, &panel_config, &panel_handle)); ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle)); ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle)); -#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) - ESP_ERROR_CHECK(esp_lcd_panel_disp_off(panel_handle, false)); -#else ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true)); -#endif ``` ### MIPI Interface diff --git a/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_general.c b/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_general.c index b94c628..f20854f 100644 --- a/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_general.c +++ b/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_general.c @@ -74,7 +74,7 @@ esp_err_t esp_lcd_new_panel_st7796_general(const esp_lcd_panel_io_handle_t io, c ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported color space"); break; } -#else +#elif ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(6, 0, 0) switch (panel_dev_config->rgb_endian) { case LCD_RGB_ENDIAN_RGB: st7796->madctl_val = 0; @@ -86,6 +86,18 @@ esp_err_t esp_lcd_new_panel_st7796_general(const esp_lcd_panel_io_handle_t io, c ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported rgb endian"); break; } +#else + switch (panel_dev_config->rgb_ele_order) { + case LCD_RGB_ELEMENT_ORDER_RGB: + st7796->madctl_val = 0; + break; + case LCD_RGB_ELEMENT_ORDER_BGR: + st7796->madctl_val |= LCD_CMD_BGR_BIT; + break; + default: + ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported rgb element order"); + break; + } #endif switch (panel_dev_config->bits_per_pixel) { diff --git a/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_mipi.c b/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_mipi.c index 75df50b..9b10b88 100644 --- a/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_mipi.c +++ b/managed_components/espressif__esp_lcd_st7796/esp_lcd_st7796_mipi.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -65,7 +65,32 @@ esp_err_t esp_lcd_new_panel_st7796_mipi(const esp_lcd_panel_io_handle_t io, cons ESP_GOTO_ON_ERROR(gpio_config(&io_conf), err, TAG, "configure GPIO for RST line failed"); } +#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) switch (panel_dev_config->color_space) { + case ESP_LCD_COLOR_SPACE_RGB: + st7796->madctl_val = 0; + break; + case ESP_LCD_COLOR_SPACE_BGR: + st7796->madctl_val |= LCD_CMD_BGR_BIT; + break; + default: + ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported color space"); + break; + } +#elif ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(6, 0, 0) + switch (panel_dev_config->rgb_endian) { + case LCD_RGB_ENDIAN_RGB: + st7796->madctl_val = 0; + break; + case LCD_RGB_ENDIAN_BGR: + st7796->madctl_val |= LCD_CMD_BGR_BIT; + break; + default: + ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported rgb endian"); + break; + } +#else + switch (panel_dev_config->rgb_ele_order) { case LCD_RGB_ELEMENT_ORDER_RGB: st7796->madctl_val = 0; break; @@ -73,9 +98,10 @@ esp_err_t esp_lcd_new_panel_st7796_mipi(const esp_lcd_panel_io_handle_t io, cons st7796->madctl_val |= LCD_CMD_BGR_BIT; break; default: - ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported color space"); + ESP_GOTO_ON_FALSE(false, ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported rgb element order"); break; } +#endif switch (panel_dev_config->bits_per_pixel) { case 16: // RGB565 diff --git a/managed_components/espressif__esp_lcd_st7796/idf_component.yml b/managed_components/espressif__esp_lcd_st7796/idf_component.yml index 70f99d2..0e19f06 100644 --- a/managed_components/espressif__esp_lcd_st7796/idf_component.yml +++ b/managed_components/espressif__esp_lcd_st7796/idf_component.yml @@ -4,7 +4,7 @@ dependencies: description: ESP LCD ST7796 driver (SPI && I80 && MIPI DSI) repository: git://github.com/espressif/esp-bsp.git repository_info: - commit_sha: 7e5759a5dcae75624e0c7abb8d8aef6b95e33b1f + commit_sha: ca6290a9e2d65aa43af6297c9646cce09103f7be path: components/lcd/esp_lcd_st7796 targets: - esp32 @@ -12,4 +12,4 @@ targets: - esp32s3 - esp32p4 url: https://github.com/espressif/esp-bsp/tree/master/components/lcd/esp_lcd_st7796 -version: 1.3.2 +version: 1.3.4 diff --git a/managed_components/espressif__esp_lcd_st7796/include/esp_lcd_st7796.h b/managed_components/espressif__esp_lcd_st7796/include/esp_lcd_st7796.h index b0ac456..7b70bb9 100644 --- a/managed_components/espressif__esp_lcd_st7796/include/esp_lcd_st7796.h +++ b/managed_components/espressif__esp_lcd_st7796/include/esp_lcd_st7796.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -97,7 +97,7 @@ esp_err_t esp_lcd_new_panel_st7796(const esp_lcd_panel_io_handle_t io, const esp .bus_width = data_width, \ .max_transfer_bytes = max_trans_bytes, \ } -#else +#elif ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 3, 0) #define ST7796_PANEL_BUS_I80_CONFIG(max_trans_bytes, data_width, dc, wr, d0, d1, d2, d3, d4, \ d5, d6, d7, d8 , d9, d10, d11, d12, d13, d14, d15) \ { \ @@ -112,6 +112,20 @@ esp_err_t esp_lcd_new_panel_st7796(const esp_lcd_panel_io_handle_t io, const esp .psram_trans_align = 64, \ .sram_trans_align = 4, \ } +#else +#define ST7796_PANEL_BUS_I80_CONFIG(max_trans_bytes, data_width, dc, wr, d0, d1, d2, d3, d4, \ + d5, d6, d7, d8 , d9, d10, d11, d12, d13, d14, d15) \ + { \ + .clk_src = LCD_CLK_SRC_PLL160M, \ + .dc_gpio_num = dc, \ + .wr_gpio_num = wr, \ + .data_gpio_nums = { \ + d0, d1, d2, d3, d4, d5, d6, d7, d8 , d9, d10, d11, d12, d13, d14, d15 \ + }, \ + .bus_width = data_width, \ + .max_transfer_bytes = max_trans_bytes, \ + .dma_burst_size = 64, \ + } #endif /** diff --git a/managed_components/espressif__esp_lcd_st7796/test_apps/CMakeLists.txt b/managed_components/espressif__esp_lcd_st7796/test_apps/CMakeLists.txt index 7a850a1..23e9e63 100644 --- a/managed_components/espressif__esp_lcd_st7796/test_apps/CMakeLists.txt +++ b/managed_components/espressif__esp_lcd_st7796/test_apps/CMakeLists.txt @@ -1,6 +1,6 @@ # The following lines of boilerplate have to be in your project's CMakeLists # in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.5) -set(EXTRA_COMPONENT_DIRS "$ENV{IDF_PATH}/tools/unit-test-app/components") +set(COMPONENTS main) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(test_esp_lcd_st7796) diff --git a/managed_components/espressif__esp_lcd_st7796/test_apps/main/CMakeLists.txt b/managed_components/espressif__esp_lcd_st7796/test_apps/main/CMakeLists.txt index bcf584d..280483b 100644 --- a/managed_components/espressif__esp_lcd_st7796/test_apps/main/CMakeLists.txt +++ b/managed_components/espressif__esp_lcd_st7796/test_apps/main/CMakeLists.txt @@ -1,3 +1,4 @@ idf_component_register(SRC_DIRS "." INCLUDE_DIRS "." - WHOLE_ARCHIVE) \ No newline at end of file + REQUIRES unity driver + WHOLE_ARCHIVE) diff --git a/managed_components/espressif__esp_lcd_st7796/test_apps/main/test_esp_lcd_st7796_general.c b/managed_components/espressif__esp_lcd_st7796/test_apps/main/test_esp_lcd_st7796_general.c index dd879c1..30c718d 100644 --- a/managed_components/espressif__esp_lcd_st7796/test_apps/main/test_esp_lcd_st7796_general.c +++ b/managed_components/espressif__esp_lcd_st7796/test_apps/main/test_esp_lcd_st7796_general.c @@ -110,8 +110,10 @@ TEST_CASE("test st7796 to draw color bar with I80 interface", "[st7796][i80]") .reset_gpio_num = TEST_PIN_NUM_LCD_RST, #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) .color_space = ESP_LCD_COLOR_SPACE_BGR, -#else +#elif ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(6, 0, 0) .rgb_endian = LCD_RGB_ENDIAN_BGR, +#else + .rgb_ele_order = LCD_RGB_ELEMENT_ORDER_BGR, #endif .bits_per_pixel = TEST_LCD_BIT_PER_PIXEL, }; diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 93a47d1..349fb52 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -1,6 +1,7 @@ CONFIG_COMPILER_OPTIMIZATION_SIZE=y CONFIG_COMPILER_CXX_EXCEPTIONS=y CONFIG_COMPILER_CXX_EXCEPTIONS_EMG_POOL_SIZE=1024 +CONFIG_COMPILER_CXX_RTTI=y CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF=y CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y @@ -11,7 +12,7 @@ CONFIG_HTTPD_MAX_REQ_HDR_LEN=2048 CONFIG_HTTPD_MAX_URI_LEN=2048 CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v1/16m.csv" +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v2/16m.csv" CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_ESP_TASK_WDT_TIMEOUT_S=10 @@ -39,6 +40,10 @@ CONFIG_UART_ISR_IN_IRAM=y # Fix ESP_SSL error CONFIG_MBEDTLS_SSL_RENEGOTIATION=n +# ESP32 Camera +CONFIG_CAMERA_NO_AFFINITY=y +CONFIG_CAMERA_DMA_BUFFER_SIZE_MAX=8192 + # LVGL 9.2.2 CONFIG_LV_OS_NONE=y @@ -49,6 +54,7 @@ CONFIG_LV_USE_CLIB_SPRINTF=y CONFIG_LV_USE_IMGFONT=y CONFIG_LV_USE_ASSERT_STYLE=y CONFIG_LV_USE_GIF=y +CONFIG_LV_USE_LODEPNG=y # Use compressed font CONFIG_LV_FONT_FMT_TXT_LARGE=y @@ -74,4 +80,4 @@ CONFIG_LV_USE_TILEVIEW=n CONFIG_LV_USE_WIN=n CONFIG_LV_BUILD_EXAMPLES=n - +CONFIG_LV_BUILD_DEMOS=n \ No newline at end of file diff --git a/sdkconfig.defaults.esp32c3 b/sdkconfig.defaults.esp32c3 index 6114d30..be746bf 100644 --- a/sdkconfig.defaults.esp32c3 +++ b/sdkconfig.defaults.esp32c3 @@ -1,13 +1,15 @@ CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v2/16m_c3.csv" CONFIG_SR_WN_WN9S_NIHAOXIAOZHI=y CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=3 CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=6 CONFIG_ESP_WIFI_RX_BA_WIN=3 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=16 CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y + CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=n CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=0 CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=768 -CONFIG_LWIP_IPV6=n -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=16 \ No newline at end of file +CONFIG_LWIP_IPV6=n \ No newline at end of file diff --git a/sdkconfig.defaults.esp32c6 b/sdkconfig.defaults.esp32c6 index 7de622d..185cc47 100644 --- a/sdkconfig.defaults.esp32c6 +++ b/sdkconfig.defaults.esp32c6 @@ -1,4 +1,5 @@ CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions/v2/16m_c3.csv" CONFIG_ESPTOOLPY_FLASHMODE_QIO=y -CONFIG_SR_WN_WN9S_NIHAOXIAOZHI=y +CONFIG_SR_WN_WN9S_NIHAOXIAOZHI=y \ No newline at end of file diff --git a/sdkconfig.defaults.esp32p4 b/sdkconfig.defaults.esp32p4 index 63249d8..ef429b7 100644 --- a/sdkconfig.defaults.esp32p4 +++ b/sdkconfig.defaults.esp32p4 @@ -20,4 +20,4 @@ CONFIG_SLAVE_IDF_TARGET_ESP32C6=y CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=y -CONFIG_IDF_EXPERIMENTAL_FEATURES=y +CONFIG_IDF_EXPERIMENTAL_FEATURES=y \ No newline at end of file diff --git a/sdkconfig.defaults.esp32s3 b/sdkconfig.defaults.esp32s3 index 40036e4..8c1cbcf 100644 --- a/sdkconfig.defaults.esp32s3 +++ b/sdkconfig.defaults.esp32s3 @@ -12,10 +12,15 @@ CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536 CONFIG_SPIRAM_MEMTEST=n CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y +CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=3 +CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=6 +CONFIG_ESP_WIFI_RX_BA_WIN=3 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=16 +CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y + CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y -CONFIG_ESP32S3_DATA_CACHE_64KB=y CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=y -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096 \ No newline at end of file