diff options
220 files changed, 1386 insertions, 9833 deletions
diff --git a/.clang-format b/.clang-format index 7430d4d..dec5818 100644 --- a/.clang-format +++ b/.clang-format @@ -8,9 +8,9 @@ AlignConsecutiveDeclarations: false AlignEscapedNewlines: Right AlignOperands: Align AlignTrailingComments: true -AllowAllArgumentsOnNextLine: true +AllowAllArgumentsOnNextLine: false AllowAllConstructorInitializersOnNextLine: true -AllowAllParametersOfDeclarationOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None @@ -83,6 +83,8 @@ IndentGotoLabels: true IndentPPDirectives: BeforeHash IndentWidth: 2 IndentWrappedFunctionNames: false +# Requires Clang >= 15, could also cause incorrect code formatting: +# InsertBraces: true JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: true diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000..9ebacc0 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,38 @@ +name: Code formatting + +on: + pull_request: + branches: [ master, develop ] + paths: + - '**.cpp' + - '**.h' + - '!src/libs/**' + +jobs: + test-format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 1000 + + - name: Configure git + run: | + git config --global user.email "-" + git config --global user.name "Autoformatter" + git fetch origin "$GITHUB_BASE_REF":"$GITHUB_BASE_REF" --depth=1000 + + - name: Install clang-format + run: | + sudo apt-get update + sudo apt-get -y install clang-format-12 + + - name: Check formatting + run: tests/test-format.sh + + - name: Upload patches + uses: actions/upload-artifact@v3 + if: failure() + with: + name: Patches + path: ./*.patch diff --git a/.github/workflows/lv_sim.yml b/.github/workflows/lv_sim.yml index 59ee7b3..aa71260 100644 --- a/.github/workflows/lv_sim.yml +++ b/.github/workflows/lv_sim.yml @@ -1,24 +1,15 @@ # GitHub Actions Workflow to build Simulator for PineTime Smart Watch LVGL Interface -# Name of this Workflow name: Build PineTime LVGL Simulator -# When to run this Workflow... on: - - # Run on all branches push: - branches: [] - - # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch + branches: [ master, develop ] pull_request: branches: [ master, develop ] -# Steps to run for the Workflow jobs: build: - - # Run these steps on Ubuntu runs-on: ubuntu-latest steps: @@ -34,6 +25,10 @@ jobs: sudo apt-get update sudo apt-get -y install libsdl2-dev + - name: Install lv_font_conv + run: + npm i -g lv_font_conv@1.5.2 + ######################################################################################### # Checkout @@ -60,15 +55,12 @@ jobs: ######################################################################################### # Build and Upload simulator - # For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details. - # For Faster Builds: Add "make" option "-j" - - name: Build simulator executable run: | cmake --build build_lv_sim - name: Upload simulator executable - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: - name: infinisim + name: infinisim-${{ github.head_ref }} path: build_lv_sim/infinisim diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 58a6393..8d12972 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,168 +3,45 @@ # Based on https://github.com/JF002/InfiniTime/blob/master/doc/buildAndProgram.md # and https://github.com/JF002/InfiniTime/blob/master/bootloader/README.md -# Name of this Workflow name: Build PineTime Firmware -# When to run this Workflow... on: - - # Run this Workflow when files are updated (Pushed) in the "master" and "develop" Branch push: branches: [ master, develop ] - - # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch pull_request: branches: [ master, develop ] -# Steps to run for the Workflow jobs: build: - - # Run these steps on Ubuntu runs-on: ubuntu-latest - + container: + image: infinitime/infinitime-build steps: - - ######################################################################################### - # Download and Cache Dependencies - - - name: Install cmake - uses: lukka/get-cmake@v3.18.3 - - - name: Check cache for Embedded Arm Toolchain arm-none-eabi-gcc - id: cache-toolchain - uses: actions/cache@v2 - env: - cache-name: cache-toolchain-9-2020-q2 - with: - path: ${{ runner.temp }}/arm-none-eabi - key: ${{ runner.os }}-build-${{ env.cache-name }} - restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - - - name: Install Embedded Arm Toolchain arm-none-eabi-gcc - if: steps.cache-toolchain.outputs.cache-hit != 'true' # Install toolchain if not found in cache - uses: fiam/arm-none-eabi-gcc@v1.0.4 - with: - # GNU Embedded Toolchain for Arm release name, in the V-YYYY-qZ format (e.g. "9-2019-q4") - release: 9-2020-q2 - # Directory to unpack GCC to. Defaults to a temporary directory. - directory: ${{ runner.temp }}/arm-none-eabi - - - name: Check cache for nRF5 SDK - id: cache-nrf5sdk - uses: actions/cache@v2 - env: - cache-name: cache-nrf5sdk - with: - path: ${{ runner.temp }}/nrf5_sdk - key: ${{ runner.os }}-build-${{ env.cache-name }} - restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - - - name: Install nRF5 SDK - if: steps.cache-nrf5sdk.outputs.cache-hit != 'true' # Install SDK if not found in cache - run: | - cd ${{ runner.temp }} - curl https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip -o nrf5_sdk.zip - unzip nrf5_sdk.zip - mv nRF5_SDK_15.3.0_59ac345 nrf5_sdk - - - name: Check cache for MCUBoot - id: cache-mcuboot - uses: actions/cache@v2 - env: - cache-name: cache-mcuboot - with: - path: ${{ runner.temp }}/mcuboot - key: ${{ runner.os }}-build-${{ env.cache-name }} - restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - - - name: Install MCUBoot - if: steps.cache-mcuboot.outputs.cache-hit != 'true' # Install MCUBoot if not found in cache - run: | - cd ${{ runner.temp }} - git clone --branch v1.7.2 https://github.com/mcu-tools/mcuboot - - - name: Install imgtool dependencies - run: | - pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt - - - name: Install adafruit-nrfutil - run: | - pip3 install --user wheel - pip3 install --user setuptools - pip3 install --user adafruit-nrfutil - - ######################################################################################### - # Checkout - + # This workaround fixes the error "unsafe repository (REPO is owned by someone else)". + # See https://github.com/actions/checkout/issues/760 and https://github.com/actions/checkout/issues/766 + # The fix in "actions/checkout@v2" was not sufficient as the build process also uses git (to get the current + # commit hash, for example). + - name: Workaround permission issues + run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Checkout source files uses: actions/checkout@v2 with: submodules: recursive - - - name: Show files - run: set ; pwd ; ls -l - - ######################################################################################### - # CMake - - - name: CMake - run: | - mkdir -p build - cd build - cmake -G Ninja -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 -DBUILD_DFU=1 ../ - - ######################################################################################### - # Make and Upload DFU Package - # pinetime-mcuboot-app.img must be flashed at address 0x8000 in the internal flash memory with OpenOCD: - # program image.bin 0x8000 - - # For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details. - # For Faster Builds: Add "make" option "-j" - - - name: Make pinetime-mcuboot-app - run: | - cmake --build build --target pinetime-mcuboot-app - + - name: Build + shell: bash + env: + SOURCES_DIR: . + run: /opt/build.sh all + # Unzip the package because Upload Artifact will zip up the files - name: Unzip DFU package - run: | - # Unzip the package because Upload Artifact will zip up the files - unzip build/src/pinetime-mcuboot-app-dfu*.zip -d build/src/pinetime-mcuboot-app-dfu - - - name: Upload DFU package - uses: actions/upload-artifact@v2 + run: unzip ./build/output/pinetime-mcuboot-app-dfu-*.zip -d ./build/output/pinetime-mcuboot-app-dfu + - name: Upload DFU artifacts + uses: actions/upload-artifact@v3 with: - name: pinetime-mcuboot-app-dfu - path: build/src/pinetime-mcuboot-app-dfu/* - - ######################################################################################### - # Make and Upload Standalone Firmware - - - name: Make pinetime-app - run: | - cmake --build build --target pinetime-app - - - name: Upload standalone firmware - uses: actions/upload-artifact@v2 + name: InfiniTime DFU ${{ github.head_ref }} + path: ./build/output/pinetime-mcuboot-app-dfu/* + - name: Upload MCUBoot image artifacts + uses: actions/upload-artifact@v3 with: - name: pinetime-app.out - path: build/src/pinetime-app*.out - - ######################################################################################### - # Make but don't Upload the Recovery Firmware to be sure it builds correctly - - - name: Make pinetime-recovery - run: | - cmake --build build --target pinetime-recovery - - ######################################################################################### - # Finish - - - name: Find output - run: | - find . -name "pinetime-app.*" -ls - find . -name "pinetime-mcuboot-app.*" -ls - -# Embedded Arm Toolchain and nRF5 SDK will only be cached if the build succeeds. -# So make sure that the first build always succeeds, e.g. comment out the "Make" step. + name: InfiniTime MCUBoot image ${{ github.head_ref }} + path: ./build/output/pinetime-mcuboot-app-image-*.bin @@ -15,7 +15,7 @@ Fast open-source firmware for the [PineTime smartwatch](https://www.pine64.org/p - [Gadgetbridge](https://gadgetbridge.org/) (Android) - [AmazFish](https://openrepos.net/content/piggz/amazfish/) (SailfishOS) - [Siglo](https://github.com/alexr4535/siglo) (Linux) - - [InfiniLink](https://github.com/xan-m/InfiniLink) **[Experimental]** (iOS) + - [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) **[Experimental]** **[Unmaintained, looking for developers/maintainers]** (iOS) - [ITD](https://gitea.arsenm.dev/Arsen6331/itd) (Linux) ## Development diff --git a/bootloader/README.md b/bootloader/README.md index 1a02ebd..2cb6b8b 100644 --- a/bootloader/README.md +++ b/bootloader/README.md @@ -9,14 +9,14 @@ Integrating a BLE stack for the OTA functionality would have used to much memory When it is run, this bootloader looks in the SPI flash memory if a new firmware is available. It there is one, it *swaps* the current firmware with the new one (the new one is copied in the main flash memory, and the current one is copied in the SPI flash memory) and run the new one. If the new one fails to run properly, the bootloader is able to revert to the old one and mark the new one as not working. -As this bootloader does not provide any OTA capability, it is not able to actually download a new version of the application. Providing OTA functionality is thus the responsability of the application firmware. +As this bootloader does not provide any OTA capability, it is not able to actually download a new version of the application. Providing OTA functionality is thus the responsibility of the application firmware. # About MCUBoot MCUBoot is run at boot time. In normal operation, it just jumps to the reset handler of the application firmware to run it. Once the application firmware is running, MCUBoot does not run at all.  -But MCUBoot does much more than that : it can upgrade the firmware that is currently running by a new one, and it is also able to revert to the previous version of the firmware in case the new one does not run propertly. +But MCUBoot does much more than that : it can upgrade the firmware that is currently running by a new one, and it is also able to revert to the previous version of the firmware in case the new one does not run properly. To do this, it uses 2 memory 'slots' : - **The primary slot** : it contains the current firmware, the one that will be executed by MCUBoot @@ -40,7 +40,7 @@ This chapter describes degraded cases that are handled by our bootloader and tho Case | Current bootloader | Solution -----|--------------------|---------------------------------------------- Data got corrupted during file transfer | [OK] Application firmware does a CRC check before applying the update, and does not proceed if it fails. | N/A -New firmware does not run at all (bad file) (1) | [NOK] MCU executes unknown instructions and will most likely end up in an infinite loop or freeze in an error handler. The bootloader does not run, it can do nothing, the MCU is stucked until next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. +New firmware does not run at all (bad file) (1) | [NOK] MCU executes unknown instructions and will most likely end up in an infinite loop or freeze in an error handler. The bootloader does not run, it can do nothing, the MCU is stuck until next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. New firmware runs, does not set the valid bit and does not refresh the watchdog | [NOK] The new firmware runs until the next reset. The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. New firmware does not run properly, does not set the valid bit but refreshes the watchdog | [NOK] The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged and will be able to rollback to the previous version. New firmware does not run properly but sets the valid bit and refreshes the watchdog | [NOK] The bootloader won't revert to the previous version because the valid flag is set | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged. Then, the bootloader must provide a way for the user to force the rollback to the previous version diff --git a/bootloader/ota-dfu-python/.gitignore b/bootloader/ota-dfu-python/.gitignore new file mode 100644 index 0000000..ed8ebf5 --- /dev/null +++ b/bootloader/ota-dfu-python/.gitignore @@ -0,0 +1 @@ +__pycache__
\ No newline at end of file diff --git a/bootloader/ota-dfu-python/ble_secure_dfu_controller.py b/bootloader/ota-dfu-python/ble_secure_dfu_controller.py index 7065458..c2038eb 100644 --- a/bootloader/ota-dfu-python/ble_secure_dfu_controller.py +++ b/bootloader/ota-dfu-python/ble_secure_dfu_controller.py @@ -236,7 +236,7 @@ class BleDfuControllerSecure(NrfBleDfuController): self._dfu_send_command(Procedures.EXECUTE) self._wait_and_parse_notify() - print("Init packet successfully transfered") + print("Init packet successfully transferred") # -------------------------------------------------------------------------- # Send the Firmware image to peripheral device. @@ -319,5 +319,5 @@ class BleDfuControllerSecure(NrfBleDfuController): self._dfu_send_command(Procedures.EXECUTE) self._wait_and_parse_notify() - # If everything executed correctly, return amount of bytes transfered + # If everything executed correctly, return amount of bytes transferred return obj_max_size diff --git a/cmake-nRF5x/readme.md b/cmake-nRF5x/readme.md index 0127a2e..1a556b1 100755 --- a/cmake-nRF5x/readme.md +++ b/cmake-nRF5x/readme.md @@ -7,7 +7,7 @@ Cmake script for projects targeting Nordic Semiconductor nRF5x series devices us The script makes use of the following tools: - nRF5x SDK by Nordic Semiconductor - SoC specific drivers and libraries (also includes a lot of examples) -- JLink by Segger - interface software for the JLink familiy of programmers +- JLink by Segger - interface software for the JLink family of programmers - nrfjprog by Nordic Semiconductor - Wrapper utility around JLink - arm-non-eabi-gcc by ARM and the GCC Team - compiler toolchain for embedded (= bare metal) ARM chips @@ -15,11 +15,11 @@ The script makes use of the following tools: 1. Download this repo (or add as submodule) to the directory `cmake-nRF5x` in your project -1. Search the SDK `example` directory for a `sdk_config.h`, `main.c` and a linker script (normally named `<project_name>_gcc_<chip familly>.ld`) that fits your chip and project needs. +1. Search the SDK `example` directory for a `sdk_config.h`, `main.c` and a linker script (normally named `<project_name>_gcc_<chip family>.ld`) that fits your chip and project needs. 1. Copy the `sdk_config.h` and the project `main.c` into a new directory `src`. Modify them as required for your project. -1. Copy the linker script into the root of your project. Rename it to just `gcc_<chip familly>.ld` For example: +1. Copy the linker script into the root of your project. Rename it to just `gcc_<chip family>.ld` For example: ``` gcc_nrf51.ld diff --git a/doc/MemoryAnalysis.md b/doc/MemoryAnalysis.md index 376f98f..9afca4e 100644 --- a/doc/MemoryAnalysis.md +++ b/doc/MemoryAnalysis.md @@ -60,7 +60,7 @@ Puncover is really easy to install: - Launch a browser at http://localhost:5000/ ### Analysis -Using the MAP file and tools, we can easily see what symbols are using most of the flash memory. In this case, unsuprisingly, fonts and graphics are the largest use of flash memory. +Using the MAP file and tools, we can easily see what symbols are using most of the flash memory. In this case, unsurprisingly, fonts and graphics are the largest use of flash memory.  @@ -150,7 +150,7 @@ You can then display the file using objdump: hexdump ram.bin -v | less ``` -The stack is positionned at the end of the RAM -> 0xFFFF. Its size is 8192 bytes, so the end of the stack is at 0xE000. +The stack is positioned at the end of the RAM -> 0xFFFF. Its size is 8192 bytes, so the end of the stack is at 0xE000. On the following dump, the maximum stack usage is 520 bytes (0xFFFF - 0xFDF8): ``` diff --git a/doc/NavigationService.md b/doc/NavigationService.md index 5a4f69e..d890cb2 100644 --- a/doc/NavigationService.md +++ b/doc/NavigationService.md @@ -13,7 +13,7 @@ The service UUID is 00010000-78fc-48fe-8e23-433b3a1942d0 ## Characteristics ## Flags (UUID 00010001-78fc-48fe-8e23-433b3a1942d0) -All included icons are from pure-maps, which provides the actual routing from the client. The icon names ultimately come from the mapbox project "direction-icons", See https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation See the end of this document for the full lsit of supported icon names. +All included icons are from pure-maps, which provides the actual routing from the client. The icon names ultimately come from the mapbox project "direction-icons", See https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation See the end of this document for the full list of supported icon names. ## Narrative (UUID 00010002-78fc-48fe-8e23-433b3a1942d0) This is a client supplied string describing the upcoming instruction such as "At the roundabout take the first exit". diff --git a/doc/PinetimeStubWithNrf52DK.md b/doc/PinetimeStubWithNrf52DK.md index dcaad69..afa8a74 100644 --- a/doc/PinetimeStubWithNrf52DK.md +++ b/doc/PinetimeStubWithNrf52DK.md @@ -1,5 +1,5 @@ # Build a stub for PineTime using NRF52-DK -[NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK) is the official developpment kit for the NRF52832 SoC from Nordic Semiconductor used in the PineTime. +[NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK) is the official development kit for the NRF52832 SoC from Nordic Semiconductor used in the PineTime. This development kit can be very useful for PineTime development: * You can use its embedded JLink SWD programmer/debugger to program and debug your code on the PineTime @@ -146,14 +146,14 @@ The new alert characteristic allows sending new notifications to InfiniTime. It For example, here is what a normal notification looks like in Golang (language of `itd`): ```go -// \x00 is the category for simple alert, and there is one new notifcation, hence \x01. +// \x00 is the category for simple alert, and there is one new notification, hence \x01. "\x00\x01\x00Test Title\x00Test Body" ``` A call notification looks like so: ```go -// \x03 is the category for calls, and there is one new call notifcation, hence \x01. +// \x03 is the category for calls, and there is one new call notification, hence \x01. "\x03\x01\x00Mary" ``` diff --git a/doc/ble/connection_sequence.puml b/doc/ble/connection_sequence.puml index 5553182..b71a341 100644 --- a/doc/ble/connection_sequence.puml +++ b/doc/ble/connection_sequence.puml @@ -3,7 +3,7 @@ Pinetime --> CompanionApp: Start advertising group BLE Connection CompanionApp -> Pinetime: Connection request -CompanionApp <-> Pinetime: Connection parameters negociation, security procedure,... +CompanionApp <-> Pinetime: Connection parameters negotiation, security procedure,... end group Service Discovery diff --git a/doc/branches.md b/doc/branches.md index 3c86375..c12c764 100644 --- a/doc/branches.md +++ b/doc/branches.md @@ -5,7 +5,7 @@ The project is based on 2 main branches: - **master** : this branch is always ready to be deployed. It means that at any time, we should be able to build the branch and release a new version of the application. - **develop** : this branch contains the latest development that will be integrated in the next release once it's considered as stable. -New features should be implemented in **feature branches** created from **develop**. When the feature is ready, a pull-request is created and it'll be merge into **develop** when it is succesfully reviewed and accepted. +New features should be implemented in **feature branches** created from **develop**. When the feature is ready, a pull-request is created and it'll be merge into **develop** when it is successfully reviewed and accepted. To release a new version of the application, when develop is considered stable, a **release** branch is created from **develop**. This can be considered as a *release candidate* branch. When everything is OK, this release branch is merged into **master** and the release is generated (a tag is applied to git, the release note is finalized, binaries are built,...) from **master**. diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index feef9f6..6362235 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -12,6 +12,10 @@ To build this project, you'll need: python -m pip install -r tools/mcuboot/requirements.txt ``` - A reasonably recent version of CMake (I use 3.16.5) + - lv_font_conv, to generate the font .c files + - see [lv_font_conv](https://github.com/lvgl/lv_font_conv#install-the-script) + - install npm (commonly done via the package manager, ensure node's version is at least 12) + - install lv_font_conv: `npm install lv_font_conv` ## Build steps ### Clone the repo @@ -43,7 +47,7 @@ By default, this variable is set to *Release*. It compiles the code with size an The *Debug* mode disables all optimizations, which makes the code easier to debug. However, the binary size will likely be too big to fit in the internal flash memory. If you want to build and debug a *Debug* binary, you'll need to disable some parts of the code. For example, the icons for the **Navigation** app use a lot of memory space. You can comment the content of `m_iconMap` in the [Navigation](https://github.com/InfiniTimeOrg/InfiniTime/blob/develop/src/displayapp/screens/Navigation.h#L148) application to free some memory. ####(**) Note about **BUILD_DFU**: -DFU files are the files you'll need to install your build of InfiniTime using OTA (over-the-air) mecanism. To generate the DFU file, the Python tool [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) is needed on your system. Check that this tool is properly installed before enabling this option. +DFU files are the files you'll need to install your build of InfiniTime using OTA (over-the-air) mechanism. To generate the DFU file, the Python tool [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) is needed on your system. Check that this tool is properly installed before enabling this option. #### CMake command line for JLink ``` diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index a57893c..1bea838 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -1,62 +1,58 @@ # Build the project using Docker -A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and AMD64 architectures. These images make the build of the firmware and the generation of the DFU file for OTA quite easy, as well as preventing clashes with any other toolchains or development environments you may have installed. +A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and AMD64 architectures. +These images make the build of the firmware and the generation of the DFU file for OTA quite easy, as well as preventing clashes with any other toolchains or development environments you may have installed. -Based on Ubuntu 18.04 with the following build dependencies: +Based on Ubuntu 22.04 with the following build dependencies: * ARM GCC Toolchain * nRF SDK * MCUBoot * adafruit-nrfutil +* lv_font_conv ## Run a container to build the project -The `infinitime-build` image contains all the dependencies you need. The default `CMD` will compile sources found in `/sources`, so you need only mount your code. +The `infinitime-build` image contains all the dependencies you need. +The default `CMD` will compile sources found in `/sources`, so you need only mount your code. Before continuing, make sure you first build the image as indicated in the [Build the image](#build-the-image) section, or check the [Using the image from Docker Hub](#using-the-image-from-docker-hub) section if you prefer to use a pre-made image. -This example will build the firmware, generate the MCUBoot image and generate the DFU file. For cloning the repo, see [these instructions](../doc/buildAndProgram.md#clone-the-repo). Outputs will be written to **<project_root>/build/output**: +This example will build the firmware, generate the MCUBoot image and generate the DFU file. +For cloning the repo, see [these instructions](../doc/buildAndProgram.md#clone-the-repo). Outputs will be written to **<project_root>/build/output**: ```bash cd <project_root> # e.g. cd ./work/Pinetime -docker run --rm -it -v $(pwd):/sources infinitime-build +docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime-build ``` -If you only want to build a single CMake target, you can pass it in as the first parameter to the build script. This means calling the script explicitly as it will override the `CMD`. Here's an example For `pinetime-app`: +By default, the container runs as `root`, which is not convenient as all the files generated by the build will also belong to `root`. +The parameter `--user` overrides that default behavior. +The command above will run as your current user. -```bash -docker run --rm -it -v $(pwd):/sources infinitime-build /opt/build.sh pinetime-app -``` - -The image is built using 1000:1000 for the user id and group id. If this is different to your user or group ids (run `id -u` and `id -g` to find out what your id values are if you are unsure), you will need to override them via the `--user` parameter in order to prevent permission errors with the output files (and the cmake build cache). - -Running with this image is the same as above, you just specify the ids to `docker run`: +If you only want to build a single CMake target, you can pass it in as the first parameter to the build script. +This means calling the script explicitly as it will override the `CMD`. +Here's an example for `pinetime-app`: ```bash -docker run --rm -it -v $(pwd):/sources --user $(id -u):$(id -g) infinitime-build -``` - -Or you can specify your user id and group id (by number, not by name) directly: - -```bash -docker run --rm -it -v $(pwd):/sources --user 1234:1234 infinitime-build +docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime-build /opt/build.sh pinetime-app ``` ## Using the image from Docker Hub -The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [pfeerick/infinitime-build](https://hub.docker.com/r/pfeerick/infinitime-build). +The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [infinitime/infinitime-build](https://hub.docker.com/repository/docker/infinitime/infinitime-build). -It can be pulled (downloaded) using the following command: +You can run it using the following command: ```bash -docker pull pfeerick/infinitime-build +docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime/infinitime-build ``` The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually: -* For AMD64 (x86_64) systems: `docker pull pfeerick/infinitime-build:amd64` +* For AMD64 (x86_64) systems: `docker pull --platform linux/amd64 infinitime/infinitime-build` -* For ARM64v8 (ARM64/aarch64) systems: `docker pull pfeerick/infinitime-build:arm64v8` +* For ARM64v8 (ARM64/aarch64) systems: `docker pull --platform linux/arm64 infinitime/infinitime-build` ## Build the image @@ -65,11 +61,5 @@ You can build the image yourself if you like! The following commands must be run from the root of the project. This operation will take some time but, when done, a new image named *infinitime-build* is available. ```bash -docker image build -t infinitime-build ./docker -``` - -The `PUID` and `PGID` build arguments are used to set the user and group ids used in the container, meaning you will not need to specify it later unless they change for some reason. Specifying them is not mandatory, as this can be over-ridden at build time via the `--user` flag, but doing so will make the command you need to run later a bit shorter. In the below examples, they are set to your current user id and group id automatically. You can specify them manually, but they must be specified by number, not by name. - -```bash -docker image build -t infinitime-build --build-arg PUID=$(id -u) --build-arg PGID=$(id -g) ./docker -``` +docker build -t infinitime-build ./docker +```
\ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index 0a4f69f..f2d187d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:18.04 +FROM ubuntu:22.04 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update -qq \ @@ -11,21 +11,27 @@ RUN apt-get update -qq \ make \ python3 \ python3-pip \ + python-is-python3 \ tar \ unzip \ - wget \ -# aarch64 packages + wget \ + curl \ + # aarch64 packages libffi-dev \ libssl-dev \ python3-dev \ - python \ git \ + apt-utils \ + && curl -sL https://deb.nodesource.com/setup_18.x | bash - \ + && apt-get install -y nodejs \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; # Git needed for PROJECT_GIT_COMMIT_HASH variable setting RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 +RUN pip3 install cbor +RUN npm i lv_font_conv@1.5.2 -g # build.sh knows how to compile COPY build.sh /opt/ @@ -38,10 +44,5 @@ RUN bash -c "source /opt/build.sh; GetNrfSdk;" # McuBoot RUN bash -c "source /opt/build.sh; GetMcuBoot;" -ARG PUID=1000 -ARG PGID=1000 -RUN groupadd --system --gid $PGID infinitime && useradd --system --uid $PUID --gid $PGID infinitime - -USER infinitime:infinitime ENV SOURCES_DIR /sources CMD ["/opt/build.sh"] diff --git a/docker/build.sh b/docker/build.sh index d86e7c2..878d9ec 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -9,7 +9,7 @@ set -e export TOOLS_DIR="${TOOLS_DIR:=/opt}" export SOURCES_DIR="${SOURCES_DIR:=/sources}" export BUILD_DIR="${BUILD_DIR:=$SOURCES_DIR/build}" -export OUTPUT_DIR="${OUTPUT_DIR:=$BUILD_DIR/output}" +export OUTPUT_DIR="${OUTPUT_DIR:=$SOURCES_DIR/build/output}" export BUILD_TYPE=${BUILD_TYPE:=Release} export GCC_ARM_VER=${GCC_ARM_VER:="gcc-arm-none-eabi-9-2020-q2-update"} @@ -22,7 +22,7 @@ main() { local target="$1" mkdir -p "$TOOLS_DIR" - + [[ ! -d "$TOOLS_DIR/$GCC_ARM_VER" ]] && GetGcc [[ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ]] && GetNrfSdk [[ ! -d "$TOOLS_DIR/mcuboot" ]] && GetMcuBoot @@ -31,7 +31,7 @@ main() { CmakeGenerate CmakeBuild $target - BUILD_RESULT=$? + BUILD_RESULT=$? if [ "$DISABLE_POSTBUILD" != "true" -a "$BUILD_RESULT" == 0 ]; then source "$BUILD_DIR/post_build.sh" fi @@ -54,18 +54,14 @@ GetNrfSdk() { } CmakeGenerate() { - # We can swap the CD and trailing SOURCES_DIR for -B and -S respectively - # once we go to newer CMake (Ubuntu 18.10 gives us CMake 3.10) - cd "$BUILD_DIR" - cmake -G "Unix Makefiles" \ + -S "$SOURCES_DIR" \ + -B "$BUILD_DIR" \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DUSE_OPENOCD=1 \ -DARM_NONE_EABI_TOOLCHAIN_PATH="$TOOLS_DIR/$GCC_ARM_VER" \ -DNRF5_SDK_PATH="$TOOLS_DIR/$NRF_SDK_VER" \ - -DBUILD_DFU=1 \ - "$SOURCES_DIR" - cmake -L -N . + -DBUILD_DFU=1 } CmakeBuild() { diff --git a/docker/post_build.sh.in b/docker/post_build.sh.in index db6e7a9..8c94471 100755 --- a/docker/post_build.sh.in +++ b/docker/post_build.sh.in @@ -15,12 +15,10 @@ cp "$BUILD_DIR/src/pinetime-mcuboot-app-dfu-$PROJECT_VERSION.zip" "$OUTPUT_DIR/p cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin" cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip" - mkdir -p "$OUTPUT_DIR/src" -cd "$BUILD_DIR" -cp src/*.bin "$OUTPUT_DIR/src" -cp src/*.hex "$OUTPUT_DIR/src" -cp src/*.out "$OUTPUT_DIR/src" -cp src/*.map "$OUTPUT_DIR/src" +cp $BUILD_DIR/src/*.bin "$OUTPUT_DIR/src/" +cp $BUILD_DIR/src/*.hex "$OUTPUT_DIR/src/" +cp $BUILD_DIR/src/*.out "$OUTPUT_DIR/src/" +cp $BUILD_DIR/src/*.map "$OUTPUT_DIR/src/" ls -RUv1 "$OUTPUT_DIR" | sed 's;^\([^/]\); \1;g'
\ No newline at end of file @@ -13659,12 +13659,12 @@ POSSIBILITY OF SUCH DAMAGE.\n <usage>read</usage> <enumeratedValue> <name>NotPresent</name> - <description>Read: no overrun occured</description> + <description>Read: no overrun occurred</description> <value>0</value> </enumeratedValue> <enumeratedValue> <name>Present</name> - <description>Read: overrun occured</description> + <description>Read: overrun occurred</description> <value>1</value> </enumeratedValue> </enumeratedValues> diff --git a/src/BootloaderVersion.cpp b/src/BootloaderVersion.cpp index 07a1da4..7f7f5c8 100644 --- a/src/BootloaderVersion.cpp +++ b/src/BootloaderVersion.cpp @@ -31,6 +31,10 @@ const bool BootloaderVersion::IsValid() { void BootloaderVersion::SetVersion(uint32_t v) { BootloaderVersion::version = v; - snprintf(BootloaderVersion::versionString, BootloaderVersion::VERSION_STR_LEN, "%ld.%ld.%ld", - BootloaderVersion::Major(), BootloaderVersion::Minor(), BootloaderVersion::Patch()); + snprintf(BootloaderVersion::versionString, + BootloaderVersion::VERSION_STR_LEN, + "%ld.%ld.%ld", + BootloaderVersion::Major(), + BootloaderVersion::Minor(), + BootloaderVersion::Patch()); } diff --git a/src/BootloaderVersion.h b/src/BootloaderVersion.h index 309c23c..7ed90fa 100644 --- a/src/BootloaderVersion.h +++ b/src/BootloaderVersion.h @@ -12,6 +12,7 @@ namespace Pinetime { static const char* VersionString(); static const bool IsValid(); static void SetVersion(uint32_t v); + private: static uint32_t version; static constexpr size_t VERSION_STR_LEN = 12; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 82c6c51..5599243 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -42,7 +42,6 @@ set(SDK_SOURCE_FILES "${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_gpiote.c" "${NRF5_SDK_PATH}/modules/nrfx/soc/nrfx_atomic.c" "${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_saadc.c" - "${NRF5_SDK_PATH}/components/libraries/timer/app_timer.h" # FreeRTOS ${NRF5_SDK_PATH}/external/freertos/source/croutine.c @@ -366,36 +365,8 @@ set(QCBOR_SRC ) list(APPEND IMAGE_FILES - displayapp/icons/battery/os_battery_error.c - displayapp/icons/battery/os_battery_100.c - displayapp/icons/battery/os_battery_090.c - displayapp/icons/battery/os_battery_080.c - displayapp/icons/battery/os_battery_070.c - displayapp/icons/battery/os_battery_060.c - displayapp/icons/battery/os_battery_050.c - displayapp/icons/battery/os_battery_040.c - displayapp/icons/battery/os_battery_030.c - displayapp/icons/battery/os_battery_020.c - displayapp/icons/battery/os_battery_010.c - displayapp/icons/battery/os_battery_005.c - - displayapp/icons/battery/os_batterycharging_100.c - displayapp/icons/battery/os_batterycharging_090.c - displayapp/icons/battery/os_batterycharging_080.c - displayapp/icons/battery/os_batterycharging_070.c - displayapp/icons/battery/os_batterycharging_060.c - displayapp/icons/battery/os_batterycharging_050.c - displayapp/icons/battery/os_batterycharging_040.c - displayapp/icons/battery/os_batterycharging_030.c - displayapp/icons/battery/os_batterycharging_020.c - displayapp/icons/battery/os_batterycharging_010.c - displayapp/icons/battery/os_batterycharging_005.c - - displayapp/icons/bluetooth/os_bt_connected.c - displayapp/icons/bluetooth/os_bt_disconnected.c - + displayapp/icons/battery/batteryicon.c ) - list(APPEND SOURCE_FILES BootloaderVersion.cpp logging/NrfLogger.cpp @@ -403,14 +374,12 @@ list(APPEND SOURCE_FILES displayapp/screens/Screen.cpp displayapp/screens/Clock.cpp displayapp/screens/Tile.cpp - displayapp/screens/Meter.cpp displayapp/screens/InfiniPaint.cpp displayapp/screens/Paddle.cpp displayapp/screens/StopWatch.cpp displayapp/screens/BatteryIcon.cpp displayapp/screens/BleIcon.cpp displayapp/screens/NotificationIcon.cpp - displayapp/screens/Brightness.cpp displayapp/screens/SystemInfo.cpp displayapp/screens/Label.cpp displayapp/screens/FirmwareUpdate.cpp @@ -458,7 +427,7 @@ list(APPEND SOURCE_FILES displayapp/screens/WatchFaceAnalog24.cpp displayapp/screens/WatchFaceDigital.cpp displayapp/screens/WatchFaceTerminal.cpp - displayapp/screens/PineTimeStyle.cpp + displayapp/screens/WatchFacePineTimeStyle.cpp ## @@ -490,7 +459,6 @@ list(APPEND SOURCE_FILES components/ble/MusicService.cpp components/ble/weather/WeatherService.cpp components/ble/NavigationService.cpp - displayapp/fonts/lv_font_navi_80.c components/ble/BatteryInformationService.cpp components/ble/FSService.cpp components/ble/ImmediateAlertService.cpp @@ -509,12 +477,6 @@ list(APPEND SOURCE_FILES FreeRTOS/port_cmsis.c displayapp/LittleVgl.cpp - displayapp/fonts/jetbrains_mono_extrabold_compressed.c - displayapp/fonts/jetbrains_mono_bold_20.c - displayapp/fonts/jetbrains_mono_76.c - displayapp/fonts/jetbrains_mono_42.c - displayapp/fonts/lv_font_sys_48.c - displayapp/fonts/open_sans_light.c displayapp/lv_pinetime_theme.c systemtask/SystemTask.cpp @@ -628,14 +590,12 @@ set(INCLUDE_FILES displayapp/screens/Screen.h displayapp/screens/Clock.h displayapp/screens/Tile.h - displayapp/screens/Meter.h displayapp/screens/InfiniPaint.h displayapp/screens/StopWatch.h displayapp/screens/Paddle.h displayapp/screens/BatteryIcon.h displayapp/screens/BleIcon.h displayapp/screens/NotificationIcon.h - displayapp/screens/Brightness.h displayapp/screens/SystemInfo.h displayapp/screens/ScreenList.h displayapp/screens/Label.h @@ -829,6 +789,15 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif () +add_subdirectory(displayapp/fonts) +target_compile_options(infinitime_fonts PUBLIC + $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -Og -g3> + $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:RELEASE>>: ${COMMON_FLAGS} -Os> + $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>: ${COMMON_FLAGS} -Os -fno-rtti> + $<$<COMPILE_LANGUAGE:ASM>: -MP -MD -x assembler-with-cpp> + ) + # NRF SDK add_library(nrf-sdk STATIC ${SDK_SOURCE_FILES}) target_include_directories(nrf-sdk SYSTEM PUBLIC . ../) @@ -902,7 +871,7 @@ set(EXECUTABLE_FILE_NAME ${EXECUTABLE_NAME}-${pinetime_VERSION_MAJOR}.${pinetime set(NRF5_LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/gcc_nrf52.ld") add_executable(${EXECUTABLE_NAME} ${SOURCE_FILES}) set_target_properties(${EXECUTABLE_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_FILE_NAME}) -target_link_libraries(${EXECUTABLE_NAME} nimble nrf-sdk lvgl littlefs QCBOR) +target_link_libraries(${EXECUTABLE_NAME} nimble nrf-sdk lvgl littlefs QCBOR infinitime_fonts) target_compile_options(${EXECUTABLE_NAME} PUBLIC $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -Wextra -Wformat -Wno-missing-field-initializers -Wno-unused-parameter -Og -g3> $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:RELEASE>>: ${COMMON_FLAGS} -Wextra -Wformat -Wno-missing-field-initializers -Wno-unused-parameter -Os> @@ -923,7 +892,6 @@ add_custom_command(TARGET ${EXECUTABLE_NAME} COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_FILE_NAME}.out "${EXECUTABLE_FILE_NAME}.hex" COMMENT "post build steps for ${EXECUTABLE_FILE_NAME}") - # Build binary intended to be used by bootloader set(EXECUTABLE_MCUBOOT_NAME "pinetime-mcuboot-app") set(EXECUTABLE_MCUBOOT_FILE_NAME ${EXECUTABLE_MCUBOOT_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}) @@ -931,7 +899,7 @@ set(IMAGE_MCUBOOT_FILE_NAME ${EXECUTABLE_MCUBOOT_NAME}-image-${pinetime_VERSION_ set(DFU_MCUBOOT_FILE_NAME ${EXECUTABLE_MCUBOOT_NAME}-dfu-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.zip) set(NRF5_LINKER_SCRIPT_MCUBOOT "${CMAKE_SOURCE_DIR}/gcc_nrf52-mcuboot.ld") add_executable(${EXECUTABLE_MCUBOOT_NAME} ${SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_MCUBOOT_NAME} nimble nrf-sdk lvgl littlefs QCBOR) +target_link_libraries(${EXECUTABLE_MCUBOOT_NAME} nimble nrf-sdk lvgl littlefs QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_MCUBOOT_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_MCUBOOT_FILE_NAME}) target_compile_options(${EXECUTABLE_MCUBOOT_NAME} PUBLIC $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -Og -g3> @@ -967,7 +935,7 @@ endif() set(EXECUTABLE_RECOVERY_NAME "pinetime-recovery") set(EXECUTABLE_RECOVERY_FILE_NAME ${EXECUTABLE_RECOVERY_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}) add_executable(${EXECUTABLE_RECOVERY_NAME} ${RECOVERY_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_RECOVERY_NAME} nimble nrf-sdk littlefs QCBOR) +target_link_libraries(${EXECUTABLE_RECOVERY_NAME} nimble nrf-sdk littlefs QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_RECOVERY_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_RECOVERY_FILE_NAME}) target_compile_definitions(${EXECUTABLE_RECOVERY_NAME} PUBLIC "PINETIME_IS_RECOVERY") target_compile_options(${EXECUTABLE_RECOVERY_NAME} PUBLIC @@ -997,7 +965,7 @@ set(EXECUTABLE_RECOVERY_MCUBOOT_FILE_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_NAME}-${ set(IMAGE_RECOVERY_MCUBOOT_FILE_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_NAME}-image-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.bin) set(DFU_RECOVERY_MCUBOOT_FILE_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_NAME}-dfu-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.zip) add_executable(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} ${RECOVERY_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} nimble nrf-sdk littlefs QCBOR) +target_link_libraries(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} nimble nrf-sdk littlefs QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_FILE_NAME}) target_compile_definitions(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PUBLIC "PINETIME_IS_RECOVERY") target_compile_options(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PUBLIC @@ -1035,7 +1003,7 @@ endif() set(EXECUTABLE_RECOVERYLOADER_NAME "pinetime-recovery-loader") set(EXECUTABLE_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_RECOVERYLOADER_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}) add_executable(${EXECUTABLE_RECOVERYLOADER_NAME} ${RECOVERYLOADER_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_RECOVERYLOADER_NAME} nrf-sdk QCBOR) +target_link_libraries(${EXECUTABLE_RECOVERYLOADER_NAME} nrf-sdk QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_RECOVERYLOADER_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_RECOVERYLOADER_FILE_NAME}) target_compile_options(${EXECUTABLE_RECOVERYLOADER_NAME} PUBLIC $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -Og -g3> @@ -1068,7 +1036,7 @@ set(EXECUTABLE_MCUBOOT_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOA set(IMAGE_MCUBOOT_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME}-image-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.bin) set(DFU_MCUBOOT_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME}-dfu-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.zip) add_executable(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} ${RECOVERYLOADER_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} nrf-sdk QCBOR) +target_link_libraries(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} nrf-sdk QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_FILE_NAME}) target_compile_options(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PUBLIC $<$<AND:$<COMPILE_LANGUAGE:C>,$<CONFIG:DEBUG>>: ${COMMON_FLAGS} -Og -g3> diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index 5432e75..596bcaf 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -17,7 +17,6 @@ */ #include "components/alarm/AlarmController.h" #include "systemtask/SystemTask.h" -#include "app_timer.h" #include "task.h" #include <chrono> @@ -36,7 +35,7 @@ namespace { void AlarmController::Init(System::SystemTask* systemTask) { this->systemTask = systemTask; - alarmAppTimer = xTimerCreate("alarmAppTm", 1, pdFALSE, this, SetOffAlarm); + alarmTimer = xTimerCreate("Alarm", 1, pdFALSE, this, SetOffAlarm); } void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) { @@ -65,11 +64,11 @@ void AlarmController::OnAdjustTime() { void AlarmController::ScheduleAlarm() { // Determine the next time the alarm needs to go off and set the timer - xTimerStop(alarmAppTimer, 0); + xTimerStop(alarmTimer, 0); auto now = dateTimeController.CurrentDateTime(); alarmTime = now; - time_t ttAlarmTime = std::chrono::system_clock::to_time_t(alarmTime); + time_t ttAlarmTime = std::chrono::system_clock::to_time_t(std::chrono::time_point_cast<std::chrono::system_clock::duration>(alarmTime)); tm* tmAlarmTime = std::localtime(&ttAlarmTime); // If the time being set has already passed today,the alarm should be set for tomorrow @@ -95,9 +94,9 @@ void AlarmController::ScheduleAlarm() { // now can convert back to a time_point alarmTime = std::chrono::system_clock::from_time_t(std::mktime(tmAlarmTime)); - auto mSecToAlarm = std::chrono::duration_cast<std::chrono::milliseconds>(alarmTime - now).count(); - xTimerChangePeriod(alarmAppTimer, APP_TIMER_TICKS(mSecToAlarm), 0); - xTimerStart(alarmAppTimer, 0); + auto secondsToAlarm = std::chrono::duration_cast<std::chrono::seconds>(alarmTime - now).count(); + xTimerChangePeriod(alarmTimer, secondsToAlarm * configTICK_RATE_HZ, 0); + xTimerStart(alarmTimer, 0); state = AlarmState::Set; } @@ -107,7 +106,7 @@ uint32_t AlarmController::SecondsToAlarm() { } void AlarmController::DisableAlarm() { - xTimerStop(alarmAppTimer, 0); + xTimerStop(alarmTimer, 0); state = AlarmState::Not_Set; } @@ -117,20 +116,12 @@ void AlarmController::SetOffAlarmNow() { } void AlarmController::StopAlerting() { - systemTask->PushMessage(System::Messages::StopRinging); -} - -void AlarmController::OnStopRinging() { - if (state != AlarmState::Alerting) { - return; - } - // Alarm state is off unless this is a recurring alarm if (recurrence == RecurType::None) { state = AlarmState::Not_Set; } else { - state = AlarmState::Set; // set next instance ScheduleAlarm(); } + systemTask->PushMessage(System::Messages::StopRinging); } diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h index 6ad220f..c3a9fec 100644 --- a/src/components/alarm/AlarmController.h +++ b/src/components/alarm/AlarmController.h @@ -59,12 +59,11 @@ namespace Pinetime { protected: friend class Pinetime::System::SystemTask; void Init(System::SystemTask* systemTask); - void OnStopRinging(); private: Controllers::DateTime& dateTimeController; System::SystemTask* systemTask = nullptr; - TimerHandle_t alarmAppTimer; + TimerHandle_t alarmTimer; uint8_t hours = 7; uint8_t minutes = 0; std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> alarmTime; diff --git a/src/components/ble/AlertNotificationClient.cpp b/src/components/ble/AlertNotificationClient.cpp index 335845e..095fdef 100644 --- a/src/components/ble/AlertNotificationClient.cpp +++ b/src/components/ble/AlertNotificationClient.cpp @@ -26,8 +26,11 @@ namespace { return client->OnCharacteristicsDiscoveryEvent(conn_handle, error, chr); } - int OnAlertNotificationDescriptorDiscoveryEventCallback( - uint16_t conn_handle, const struct ble_gatt_error* error, uint16_t chr_val_handle, const struct ble_gatt_dsc* dsc, void* arg) { + int OnAlertNotificationDescriptorDiscoveryEventCallback(uint16_t conn_handle, + const struct ble_gatt_error* error, + uint16_t chr_val_handle, + const struct ble_gatt_dsc* dsc, + void* arg) { auto client = static_cast<AlertNotificationClient*>(arg); return client->OnDescriptorDiscoveryEventCallback(conn_handle, error, chr_val_handle, dsc); } diff --git a/src/components/ble/BatteryInformationService.h b/src/components/ble/BatteryInformationService.h index 1303fd6..c6fc52e 100644 --- a/src/components/ble/BatteryInformationService.h +++ b/src/components/ble/BatteryInformationService.h @@ -18,6 +18,7 @@ namespace Pinetime { int OnBatteryServiceRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context); void NotifyBatteryLevel(uint16_t connectionHandle, uint8_t level); + private: Controllers::Battery& batteryController; static constexpr uint16_t batteryInformationServiceId {0x180F}; diff --git a/src/components/ble/CurrentTimeClient.cpp b/src/components/ble/CurrentTimeClient.cpp index dd8171b..53e98cb 100644 --- a/src/components/ble/CurrentTimeClient.cpp +++ b/src/components/ble/CurrentTimeClient.cpp @@ -85,10 +85,21 @@ int CurrentTimeClient::OnCurrentTimeReadResult(uint16_t conn_handle, const ble_g // TODO check that attribute->handle equals the handle discovered in OnCharacteristicDiscoveryEvent CtsData result; os_mbuf_copydata(attribute->om, 0, sizeof(CtsData), &result); - NRF_LOG_INFO( - "Received data: %d-%d-%d %d:%d:%d", result.year, result.month, result.dayofmonth, result.hour, result.minute, result.second); - dateTimeController.SetTime( - result.year, result.month, result.dayofmonth, 0, result.hour, result.minute, result.second, nrf_rtc_counter_get(portNRF_RTC_REG)); + NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d", + result.year, + result.month, + result.dayofmonth, + result.hour, + result.minute, + result.second); + dateTimeController.SetTime(result.year, + result.month, + result.dayofmonth, + 0, + result.hour, + result.minute, + result.second, + nrf_rtc_counter_get(portNRF_RTC_REG)); } else { NRF_LOG_INFO("Error retrieving current time: %d", error->status); } diff --git a/src/components/ble/CurrentTimeService.cpp b/src/components/ble/CurrentTimeService.cpp index e509aea..8430d1b 100644 --- a/src/components/ble/CurrentTimeService.cpp +++ b/src/components/ble/CurrentTimeService.cpp @@ -29,11 +29,22 @@ int CurrentTimeService::OnTimeAccessed(uint16_t conn_handle, uint16_t attr_handl CtsData result; os_mbuf_copydata(ctxt->om, 0, sizeof(CtsData), &result); - NRF_LOG_INFO( - "Received data: %d-%d-%d %d:%d:%d", result.year, result.month, result.dayofmonth, result.hour, result.minute, result.second); + NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d", + result.year, + result.month, + result.dayofmonth, + result.hour, + result.minute, + result.second); - m_dateTimeController.SetTime( - result.year, result.month, result.dayofmonth, 0, result.hour, result.minute, result.second, nrf_rtc_counter_get(portNRF_RTC_REG)); + m_dateTimeController.SetTime(result.year, + result.month, + result.dayofmonth, + 0, + result.hour, + result.minute, + result.second, + nrf_rtc_counter_get(portNRF_RTC_REG)); } else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) { CtsData currentDateTime; diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index cf99f01..1f06b69 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -119,8 +119,10 @@ int DfuService::WritePacketHandler(uint16_t connectionHandle, os_mbuf* om) { bootloaderSize = om->om_data[4] + (om->om_data[5] << 8) + (om->om_data[6] << 16) + (om->om_data[7] << 24); applicationSize = om->om_data[8] + (om->om_data[9] << 8) + (om->om_data[10] << 16) + (om->om_data[11] << 24); bleController.FirmwareUpdateTotalBytes(applicationSize); - NRF_LOG_INFO( - "[DFU] -> Start data received : SD size : %d, BT size : %d, app size : %d", softdeviceSize, bootloaderSize, applicationSize); + NRF_LOG_INFO("[DFU] -> Start data received : SD size : %d, BT size : %d, app size : %d", + softdeviceSize, + bootloaderSize, + applicationSize); // wait until SystemTask has finished waking up all devices while (systemTask.IsSleeping()) { @@ -165,10 +167,10 @@ int DfuService::WritePacketHandler(uint16_t connectionHandle, os_mbuf* om) { if ((nbPacketReceived % nbPacketsToNotify) == 0 && bytesReceived != applicationSize) { uint8_t data[5] {static_cast<uint8_t>(Opcodes::PacketReceiptNotification), - (uint8_t)(bytesReceived & 0x000000FFu), - (uint8_t)(bytesReceived >> 8u), - (uint8_t)(bytesReceived >> 16u), - (uint8_t)(bytesReceived >> 24u)}; + static_cast<uint8_t>(bytesReceived & 0x000000FFu), + static_cast<uint8_t>(bytesReceived >> 8u), + static_cast<uint8_t>(bytesReceived >> 16u), + static_cast<uint8_t>(bytesReceived >> 24u)}; NRF_LOG_INFO("[DFU] -> Send packet notification: %d bytes received", bytesReceived); notificationManager.Send(connectionHandle, controlPointCharacteristicHandle, data, 5); } @@ -244,7 +246,7 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) { NRF_LOG_INFO("[DFU] -> Receive firmware image requested, but we are not in Start Init"); return 0; } - // TODO the chunk size is dependant of the implementation of the host application... + // TODO the chunk size is dependent of the implementation of the host application... dfuImage.Init(20, applicationSize, expectedCrc); NRF_LOG_INFO("[DFU] -> Starting receive firmware"); state = States::Data; @@ -423,9 +425,9 @@ uint16_t DfuService::DfuImage::ComputeCrc(uint8_t const* p_data, uint32_t size, uint16_t crc = (p_crc == NULL) ? 0xFFFF : *p_crc; for (uint32_t i = 0; i < size; i++) { - crc = (uint8_t)(crc >> 8) | (crc << 8); + crc = static_cast<uint8_t>(crc >> 8) | (crc << 8); crc ^= p_data[i]; - crc ^= (uint8_t)(crc & 0xFF) >> 4; + crc ^= static_cast<uint8_t>(crc & 0xFF) >> 4; crc ^= (crc << 8) << 4; crc ^= ((crc & 0xFF) << 4) << 1; } diff --git a/src/components/ble/FSService.cpp b/src/components/ble/FSService.cpp index 8dc9ed6..fda6b39 100644 --- a/src/components/ble/FSService.cpp +++ b/src/components/ble/FSService.cpp @@ -81,7 +81,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { return -1; } memcpy(filepath, header->pathstr, plen); - filepath[plen] = 0; // Copy and null teminate string + filepath[plen] = 0; // Copy and null terminate string ReadResponse resp; os_mbuf* om; resp.command = commands::READ_DATA; @@ -148,7 +148,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { return -1; // TODO make this actually return a BLE notif } memcpy(filepath, header->pathstr, plen); - filepath[plen] = 0; // Copy and null teminate string + filepath[plen] = 0; // Copy and null terminate string fileSize = header->totalSize; WriteResponse resp; resp.command = commands::WRITE_PACING; @@ -193,7 +193,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { uint16_t plen = header->pathlen; char path[plen + 1] = {0}; memcpy(path, header->pathstr, plen); - path[plen] = 0; // Copy and null teminate string + path[plen] = 0; // Copy and null terminate string DelResponse resp {}; resp.command = commands::DELETE_STATUS; int res = fs.FileDelete(path); @@ -208,7 +208,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { uint16_t plen = header->pathlen; char path[plen + 1] = {0}; memcpy(path, header->pathstr, plen); - path[plen] = 0; // Copy and null teminate string + path[plen] = 0; // Copy and null terminate string MKDirResponse resp {}; resp.command = commands::MKDIR_STATUS; resp.modification_time = 0; @@ -223,7 +223,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { ListDirHeader* header = (ListDirHeader*) om->om_data; uint16_t plen = header->pathlen; char path[plen + 1] = {0}; - path[plen] = 0; // Copy and null teminate string + path[plen] = 0; // Copy and null terminate string memcpy(path, header->pathstr, plen); ListDirResponse resp {}; @@ -290,7 +290,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { header->pathstr[plen] = 0; char path[header->NewPathLength + 1] = {0}; memcpy(path, &header->pathstr[plen + 1], header->NewPathLength); - path[header->NewPathLength] = 0; // Copy and null teminate string + path[header->NewPathLength] = 0; // Copy and null terminate string MoveResponse resp {}; resp.command = commands::MOVE_STATUS; int8_t res = (int8_t) fs.Rename(header->pathstr, path); diff --git a/src/components/ble/HeartRateService.cpp b/src/components/ble/HeartRateService.cpp index 4824a6b..d49a02c 100644 --- a/src/components/ble/HeartRateService.cpp +++ b/src/components/ble/HeartRateService.cpp @@ -57,7 +57,8 @@ int HeartRateService::OnHeartRateRequested(uint16_t connectionHandle, uint16_t a } void HeartRateService::OnNewHeartRateValue(uint8_t heartRateValue) { - if(!heartRateMeasurementNotificationEnable) return; + if (!heartRateMeasurementNotificationEnable) + return; uint8_t buffer[2] = {0, heartRateController.HeartRate()}; // [0] = flags, [1] = hr value auto* om = ble_hs_mbuf_from_flat(buffer, 2); @@ -72,11 +73,11 @@ void HeartRateService::OnNewHeartRateValue(uint8_t heartRateValue) { } void HeartRateService::SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == heartRateMeasurementHandle) + if (attributeHandle == heartRateMeasurementHandle) heartRateMeasurementNotificationEnable = true; } void HeartRateService::UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == heartRateMeasurementHandle) + if (attributeHandle == heartRateMeasurementHandle) heartRateMeasurementNotificationEnable = false; }
\ No newline at end of file diff --git a/src/components/ble/MotionService.cpp b/src/components/ble/MotionService.cpp index 87923c2..121ad3b 100644 --- a/src/components/ble/MotionService.cpp +++ b/src/components/ble/MotionService.cpp @@ -8,10 +8,8 @@ using namespace Pinetime::Controllers; namespace { // 0003yyxx-78fc-48fe-8e23-433b3a1942d0 constexpr ble_uuid128_t CharUuid(uint8_t x, uint8_t y) { - return ble_uuid128_t{ - .u = {.type = BLE_UUID_TYPE_128}, - .value = { 0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x03, 0x00 } - }; + return ble_uuid128_t {.u = {.type = BLE_UUID_TYPE_128}, + .value = {0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x03, 0x00}}; } // 00030000-78fc-48fe-8e23-433b3a1942d0 @@ -45,11 +43,7 @@ MotionService::MotionService(Pinetime::System::SystemTask& system, Controllers:: .val_handle = &motionValuesHandle}, {0}}, serviceDefinition { - { - .type = BLE_GATT_SVC_TYPE_PRIMARY, - .uuid = &motionServiceUuid.u, - .characteristics = characteristicDefinition - }, + {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &motionServiceUuid.u, .characteristics = characteristicDefinition}, {0}, } { // TODO refactor to prevent this loop dependency (service depends on controller and controller depends on service) @@ -72,8 +66,8 @@ int MotionService::OnStepCountRequested(uint16_t connectionHandle, uint16_t attr int res = os_mbuf_append(context->om, &buffer, 4); return (res == 0) ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; - } else if(attributeHandle == motionValuesHandle) { - int16_t buffer[3] = { motionController.X(), motionController.Y(), motionController.Z() }; + } else if (attributeHandle == motionValuesHandle) { + int16_t buffer[3] = {motionController.X(), motionController.Y(), motionController.Z()}; int res = os_mbuf_append(context->om, buffer, 3 * sizeof(int16_t)); return (res == 0) ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; @@ -82,7 +76,8 @@ int MotionService::OnStepCountRequested(uint16_t connectionHandle, uint16_t attr } void MotionService::OnNewStepCountValue(uint32_t stepCount) { - if(!stepCountNoficationEnabled) return; + if (!stepCountNoficationEnabled) + return; uint32_t buffer = stepCount; auto* om = ble_hs_mbuf_from_flat(&buffer, 4); @@ -96,9 +91,10 @@ void MotionService::OnNewStepCountValue(uint32_t stepCount) { ble_gattc_notify_custom(connectionHandle, stepCountHandle, om); } void MotionService::OnNewMotionValues(int16_t x, int16_t y, int16_t z) { - if(!motionValuesNoficationEnabled) return; + if (!motionValuesNoficationEnabled) + return; - int16_t buffer[3] = { motionController.X(), motionController.Y(), motionController.Z() }; + int16_t buffer[3] = {motionController.X(), motionController.Y(), motionController.Z()}; auto* om = ble_hs_mbuf_from_flat(buffer, 3 * sizeof(int16_t)); uint16_t connectionHandle = system.nimble().connHandle(); @@ -111,15 +107,15 @@ void MotionService::OnNewMotionValues(int16_t x, int16_t y, int16_t z) { } void MotionService::SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == stepCountHandle) + if (attributeHandle == stepCountHandle) stepCountNoficationEnabled = true; - else if(attributeHandle == motionValuesHandle) + else if (attributeHandle == motionValuesHandle) motionValuesNoficationEnabled = true; } void MotionService::UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == stepCountHandle) + if (attributeHandle == stepCountHandle) stepCountNoficationEnabled = false; - else if(attributeHandle == motionValuesHandle) + else if (attributeHandle == motionValuesHandle) motionValuesNoficationEnabled = false; } diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index c99aa1e..fc7cef0 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -22,10 +22,8 @@ namespace { // 0000yyxx-78fc-48fe-8e23-433b3a1942d0 constexpr ble_uuid128_t CharUuid(uint8_t x, uint8_t y) { - return ble_uuid128_t{ - .u = {.type = BLE_UUID_TYPE_128}, - .value = { 0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x00, 0x00 } - }; + return ble_uuid128_t {.u = {.type = BLE_UUID_TYPE_128}, + .value = {0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x00, 0x00}}; } // 00000000-78fc-48fe-8e23-433b3a1942d0 @@ -111,8 +109,7 @@ Pinetime::Controllers::MusicService::MusicService(Pinetime::System::SystemTask& .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; characteristicDefinition[13] = {0}; - serviceDefinition[0] = { - .type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &msUuid.u, .characteristics = characteristicDefinition}; + serviceDefinition[0] = {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &msUuid.u, .characteristics = characteristicDefinition}; serviceDefinition[1] = {0}; } @@ -137,9 +134,9 @@ int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_ os_mbuf_copydata(ctxt->om, 0, bufferSize, data); if (notifSize > bufferSize) { - data[bufferSize-1] = '.'; - data[bufferSize-2] = '.'; - data[bufferSize-3] = '.'; + data[bufferSize - 1] = '.'; + data[bufferSize - 2] = '.'; + data[bufferSize - 3] = '.'; } data[bufferSize] = '\0'; @@ -152,12 +149,21 @@ int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_ albumName = s; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msStatusCharUuid.u) == 0) { playing = s[0]; + // These variables need to be updated, because the progress may not be updated immediately, + // leading to getProgress() returning an incorrect position. + if (playing) { + trackProgressUpdateTime = xTaskGetTickCount(); + } else { + trackProgress += + static_cast<int>((static_cast<float>(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); + } } else if (ble_uuid_cmp(ctxt->chr->uuid, &msRepeatCharUuid.u) == 0) { repeat = s[0]; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msShuffleCharUuid.u) == 0) { shuffle = s[0]; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msPositionCharUuid.u) == 0) { trackProgress = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; + trackProgressUpdateTime = xTaskGetTickCount(); } else if (ble_uuid_cmp(ctxt->chr->uuid, &msTotalLengthCharUuid.u) == 0) { trackLength = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msTrackNumberCharUuid.u) == 0) { @@ -192,6 +198,10 @@ float Pinetime::Controllers::MusicService::getPlaybackSpeed() const { } int Pinetime::Controllers::MusicService::getProgress() const { + if (isPlaying()) { + return trackProgress + + static_cast<int>((static_cast<float>(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); + } return trackProgress; } diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index 1ad9a42..047d0d2 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -81,6 +81,7 @@ namespace Pinetime { int trackLength {0}; int trackNumber {}; int tracksTotal {}; + TickType_t trackProgressUpdateTime {0}; float playbackSpeed {1.0f}; diff --git a/src/components/ble/NavigationService.cpp b/src/components/ble/NavigationService.cpp index 5418b9e..7614368 100644 --- a/src/components/ble/NavigationService.cpp +++ b/src/components/ble/NavigationService.cpp @@ -46,15 +46,23 @@ namespace { } // namespace Pinetime::Controllers::NavigationService::NavigationService(Pinetime::System::SystemTask& system) : m_system(system) { - characteristicDefinition[0] = { - .uuid = &navFlagCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - - characteristicDefinition[1] = { - .uuid = &navNarrativeCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[2] = { - .uuid = &navManDistCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[3] = { - .uuid = &navProgressCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[0] = {.uuid = &navFlagCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + + characteristicDefinition[1] = {.uuid = &navNarrativeCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[2] = {.uuid = &navManDistCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[3] = {.uuid = &navProgressCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; characteristicDefinition[4] = {0}; diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index ce54bb7..b2cccf7 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -236,7 +236,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { currentTimeClient.Reset(); alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; - if(bleController.IsConnected()) { + if (bleController.IsConnected()) { bleController.Disconnect(); fastAdvCount = 0; StartAdvertising(); diff --git a/src/components/ble/weather/WeatherService.h b/src/components/ble/weather/WeatherService.h index eca70cb..e37417d 100644 --- a/src/components/ble/weather/WeatherService.h +++ b/src/components/ble/weather/WeatherService.h @@ -127,7 +127,8 @@ namespace Pinetime { {.uuid = &weatherControlCharUuid.u, .access_cb = WeatherCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}, {nullptr}}; const struct ble_gatt_svc_def serviceDefinition[2] = { - {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &weatherUuid.u, .characteristics = characteristicDefinition}, {0}}; + {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &weatherUuid.u, .characteristics = characteristicDefinition}, + {0}}; uint16_t eventHandle {}; diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 7545058..1f7182c 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -19,8 +19,14 @@ void DateTime::SetCurrentTime(std::chrono::time_point<std::chrono::system_clock, UpdateTime(previousSystickCounter); // Update internal state without updating the time } -void DateTime::SetTime( - uint16_t year, uint8_t month, uint8_t day, uint8_t dayOfWeek, uint8_t hour, uint8_t minute, uint8_t second, uint32_t systickCounter) { +void DateTime::SetTime(uint16_t year, + uint8_t month, + uint8_t day, + uint8_t dayOfWeek, + uint8_t hour, + uint8_t minute, + uint8_t second, + uint32_t systickCounter) { std::tm tm = { /* .tm_sec = */ second, /* .tm_min = */ minute, diff --git a/src/components/fs/FS.cpp b/src/components/fs/FS.cpp index 8c98ae3..14b0552 100644 --- a/src/components/fs/FS.cpp +++ b/src/components/fs/FS.cpp @@ -95,8 +95,8 @@ int FS::DirRewind(lfs_dir_t* dir) { int FS::DirCreate(const char* path) { return lfs_mkdir(&lfs, path); } -int FS::Rename(const char* oldPath, const char* newPath){ - return lfs_rename(&lfs,oldPath,newPath); +int FS::Rename(const char* oldPath, const char* newPath) { + return lfs_rename(&lfs, oldPath, newPath); } int FS::Stat(const char* path, lfs_info* info) { return lfs_stat(&lfs, path, info); diff --git a/src/components/fs/FS.h b/src/components/fs/FS.h index 2b27ae5..87fcdc2 100644 --- a/src/components/fs/FS.h +++ b/src/components/fs/FS.h @@ -26,7 +26,7 @@ namespace Pinetime { int DirRead(lfs_dir_t* dir, lfs_info* info); int DirRewind(lfs_dir_t* dir); int DirCreate(const char* path); - + lfs_ssize_t GetFSSize(); int Rename(const char* oldPath, const char* newPath); int Stat(const char* path, lfs_info* info); diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index 4c44fc4..90e41d2 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -1,41 +1,36 @@ #include "components/motor/MotorController.h" #include <hal/nrf_gpio.h> #include "systemtask/SystemTask.h" -#include "app_timer.h" #include "drivers/PinMap.h" -APP_TIMER_DEF(shortVibTimer); -APP_TIMER_DEF(longVibTimer); - using namespace Pinetime::Controllers; void MotorController::Init() { nrf_gpio_cfg_output(PinMap::Motor); nrf_gpio_pin_set(PinMap::Motor); - shortVibTimer = xTimerCreate("shortVibTm", 1, pdFALSE, nullptr, StopMotor); - longVibTimer = xTimerCreate("longVibTm", 1, pdTRUE, this, Ring); + shortVib = xTimerCreate("shortVib", 1, pdFALSE, nullptr, StopMotor); + longVib = xTimerCreate("longVib", pdMS_TO_TICKS(1000), pdTRUE, this, Ring); } void MotorController::Ring(TimerHandle_t xTimer) { - auto motorController = static_cast<MotorController*>(pvTimerGetTimerID(xTimer)); - xTimerChangePeriod(motorController->longVibTimer, APP_TIMER_TICKS(1000), 0); + auto* motorController = static_cast<MotorController*>(pvTimerGetTimerID(xTimer)); motorController->RunForDuration(50); } void MotorController::RunForDuration(uint8_t motorDuration) { - if (xTimerChangePeriod(shortVibTimer, APP_TIMER_TICKS(motorDuration), 0) == pdPASS && xTimerStart(shortVibTimer, 0) == pdPASS) { + if (xTimerChangePeriod(shortVib, pdMS_TO_TICKS(motorDuration), 0) == pdPASS && xTimerStart(shortVib, 0) == pdPASS) { nrf_gpio_pin_clear(PinMap::Motor); } } void MotorController::StartRinging() { - xTimerChangePeriod(longVibTimer, 1, 0); - xTimerStart(longVibTimer, 0); + RunForDuration(50); + xTimerStart(longVib, 0); } void MotorController::StopRinging() { - xTimerStop(longVibTimer, 0); + xTimerStop(longVib, 0); nrf_gpio_pin_set(PinMap::Motor); } diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index 3c6cbd2..6dea6d1 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -19,8 +19,8 @@ namespace Pinetime { private: static void Ring(TimerHandle_t xTimer); static void StopMotor(TimerHandle_t xTimer); - TimerHandle_t shortVibTimer; - TimerHandle_t longVibTimer; + TimerHandle_t shortVib; + TimerHandle_t longVib; }; } } diff --git a/src/components/settings/Settings.cpp b/src/components/settings/Settings.cpp index fee62da..1ae00a2 100644 --- a/src/components/settings/Settings.cpp +++ b/src/components/settings/Settings.cpp @@ -26,12 +26,12 @@ void Settings::LoadSettingsFromFile() { SettingsData bufferSettings; lfs_file_t settingsFile; - if ( fs.FileOpen(&settingsFile, "/settings.dat", LFS_O_RDONLY) != LFS_ERR_OK) { + if (fs.FileOpen(&settingsFile, "/settings.dat", LFS_O_RDONLY) != LFS_ERR_OK) { return; } fs.FileRead(&settingsFile, reinterpret_cast<uint8_t*>(&bufferSettings), sizeof(settings)); fs.FileClose(&settingsFile); - if ( bufferSettings.version == settingsVersion ) { + if (bufferSettings.version == settingsVersion) { settings = bufferSettings; } } @@ -39,7 +39,7 @@ void Settings::LoadSettingsFromFile() { void Settings::SaveSettingsToFile() { lfs_file_t settingsFile; - if ( fs.FileOpen(&settingsFile, "/settings.dat", LFS_O_WRONLY | LFS_O_CREAT) != LFS_ERR_OK) { + if (fs.FileOpen(&settingsFile, "/settings.dat", LFS_O_WRONLY | LFS_O_CREAT) != LFS_ERR_OK) { return; } fs.FileWrite(&settingsFile, reinterpret_cast<uint8_t*>(&settings), sizeof(settings)); diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 5914e1a..393a734 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -140,15 +140,14 @@ namespace Pinetime { return settings.screenTimeOut; }; - void SetShakeThreshold(uint16_t thresh){ - if(settings.shakeWakeThreshold != thresh){ - settings.shakeWakeThreshold = thresh; - settingsChanged = true; + void SetShakeThreshold(uint16_t thresh) { + if (settings.shakeWakeThreshold != thresh) { + settings.shakeWakeThreshold = thresh; + settingsChanged = true; } - } - int16_t GetShakeThreshold() const{ + int16_t GetShakeThreshold() const { return settings.shakeWakeThreshold; } @@ -195,20 +194,20 @@ namespace Pinetime { if (goal != settings.stepsGoal) { settingsChanged = true; } - settings.stepsGoal = goal; + settings.stepsGoal = goal; }; - + uint32_t GetStepsGoal() const { return settings.stepsGoal; }; - void SetBleRadioEnabled(bool enabled) { - bleRadioEnabled = enabled; - }; + void SetBleRadioEnabled(bool enabled) { + bleRadioEnabled = enabled; + }; - bool GetBleRadioEnabled() const { - return bleRadioEnabled; - }; + bool GetBleRadioEnabled() const { + return bleRadioEnabled; + }; void SetBluetoothPasskeyEnabled(bool enabled) { settings.bluetoothPasskeyEnabled = enabled; diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 31635a5..eeee61f 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -1,62 +1,40 @@ -// -// Created by florian on 16.05.21. -// - #include "components/timer/TimerController.h" #include "systemtask/SystemTask.h" -#include "task.h" using namespace Pinetime::Controllers; -namespace { - void TimerEnd(TimerHandle_t xTimer) { - auto controller = static_cast<Pinetime::Controllers::TimerController*>(pvTimerGetTimerID(xTimer)); - controller->OnTimerEnd(); - } +void TimerCallback(TimerHandle_t xTimer) { + auto* controller = static_cast<TimerController*>(pvTimerGetTimerID(xTimer)); + controller->OnTimerEnd(); } -void TimerController::Init(System::SystemTask* systemTask) { +void TimerController::Init(Pinetime::System::SystemTask* systemTask) { this->systemTask = systemTask; - timerAppTimer = xTimerCreate("timerAppTm", 1, pdFALSE, this, TimerEnd); + timer = xTimerCreate("Timer", 1, pdFALSE, this, TimerCallback); } void TimerController::StartTimer(uint32_t duration) { - xTimerStop(timerAppTimer, 0); - auto currentTicks = xTaskGetTickCount(); - TickType_t durationTicks = APP_TIMER_TICKS(duration); - xTimerChangePeriod(timerAppTimer, durationTicks, 0); - xTimerStart(timerAppTimer, 0); - endTicks = currentTicks + durationTicks; - timerRunning = true; + xTimerChangePeriod(timer, pdMS_TO_TICKS(duration), 0); + xTimerStart(timer, 0); } uint32_t TimerController::GetTimeRemaining() { - if (!timerRunning) { - return 0; - } - auto currentTicks = xTaskGetTickCount(); - - TickType_t deltaTicks = 0; - if (currentTicks > endTicks) { - deltaTicks = 0xffffffff - currentTicks; - deltaTicks += (endTicks + 1); - } else { - deltaTicks = endTicks - currentTicks; + if (IsRunning()) { + TickType_t remainingTime = xTimerGetExpiryTime(timer) - xTaskGetTickCount(); + return (remainingTime * 1000 / configTICK_RATE_HZ); } - - return (static_cast<TickType_t>(deltaTicks) / static_cast<TickType_t>(configTICK_RATE_HZ)) * 1000; + return 0; } void TimerController::StopTimer() { - xTimerStop(timerAppTimer, 0); - timerRunning = false; + xTimerStop(timer, 0); } bool TimerController::IsRunning() { - return timerRunning; + return (xTimerIsTimerActive(timer) == pdTRUE); } + void TimerController::OnTimerEnd() { - timerRunning = false; - if (systemTask != nullptr) - systemTask->PushMessage(System::Messages::OnTimerDone); + systemTask->PushMessage(System::Messages::OnTimerDone); } + diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h index 24d7150..93d8afc 100644 --- a/src/components/timer/TimerController.h +++ b/src/components/timer/TimerController.h @@ -2,9 +2,6 @@ #include <FreeRTOS.h> #include <timers.h> -#include <cstdint> -#include "app_timer.h" -#include "portmacro_cmsis.h" namespace Pinetime { namespace System { @@ -16,7 +13,10 @@ namespace Pinetime { public: TimerController() = default; + void Init(System::SystemTask* systemTask); + void StartTimer(uint32_t duration); + void StopTimer(); uint32_t GetTimeRemaining(); @@ -25,15 +25,9 @@ namespace Pinetime { void OnTimerEnd(); - protected: - friend class Pinetime::System::SystemTask; - void Init(System::SystemTask* systemTask); - private: System::SystemTask* systemTask = nullptr; - TimerHandle_t timerAppTimer; - TickType_t endTicks; - bool timerRunning = false; + TimerHandle_t timer; }; } -}
\ No newline at end of file +} diff --git a/src/displayapp/Colors.cpp b/src/displayapp/Colors.cpp index 93b1aa0..106c516 100644 --- a/src/displayapp/Colors.cpp +++ b/src/displayapp/Colors.cpp @@ -5,23 +5,41 @@ using namespace Pinetime::Controllers; lv_color_t Pinetime::Applications::Convert(Pinetime::Controllers::Settings::Colors color) { switch (color) { - case Pinetime::Controllers::Settings::Colors::White: return LV_COLOR_WHITE; - case Pinetime::Controllers::Settings::Colors::Silver: return LV_COLOR_SILVER; - case Pinetime::Controllers::Settings::Colors::Gray: return LV_COLOR_GRAY; - case Pinetime::Controllers::Settings::Colors::Black: return LV_COLOR_BLACK; - case Pinetime::Controllers::Settings::Colors::Red: return LV_COLOR_RED; - case Pinetime::Controllers::Settings::Colors::Maroon: return LV_COLOR_MAROON; - case Pinetime::Controllers::Settings::Colors::Yellow: return LV_COLOR_YELLOW; - case Pinetime::Controllers::Settings::Colors::Olive: return LV_COLOR_OLIVE; - case Pinetime::Controllers::Settings::Colors::Lime: return LV_COLOR_LIME; - case Pinetime::Controllers::Settings::Colors::Green: return LV_COLOR_GREEN; - case Pinetime::Controllers::Settings::Colors::Cyan: return LV_COLOR_CYAN; - case Pinetime::Controllers::Settings::Colors::Teal: return LV_COLOR_TEAL; - case Pinetime::Controllers::Settings::Colors::Blue: return LV_COLOR_BLUE; - case Pinetime::Controllers::Settings::Colors::Navy: return LV_COLOR_NAVY; - case Pinetime::Controllers::Settings::Colors::Magenta: return LV_COLOR_MAGENTA; - case Pinetime::Controllers::Settings::Colors::Purple: return LV_COLOR_PURPLE; - case Pinetime::Controllers::Settings::Colors::Orange: return LV_COLOR_ORANGE; - default: return LV_COLOR_WHITE; + case Pinetime::Controllers::Settings::Colors::White: + return LV_COLOR_WHITE; + case Pinetime::Controllers::Settings::Colors::Silver: + return LV_COLOR_SILVER; + case Pinetime::Controllers::Settings::Colors::Gray: + return LV_COLOR_GRAY; + case Pinetime::Controllers::Settings::Colors::Black: + return LV_COLOR_BLACK; + case Pinetime::Controllers::Settings::Colors::Red: + return LV_COLOR_RED; + case Pinetime::Controllers::Settings::Colors::Maroon: + return LV_COLOR_MAKE(0xb0, 0x0, 0x0); + case Pinetime::Controllers::Settings::Colors::Yellow: + return LV_COLOR_YELLOW; + case Pinetime::Controllers::Settings::Colors::Olive: + return LV_COLOR_MAKE(0xb0, 0xb0, 0x0); + case Pinetime::Controllers::Settings::Colors::Lime: + return LV_COLOR_LIME; + case Pinetime::Controllers::Settings::Colors::Green: + return LV_COLOR_MAKE(0x0, 0xb0, 0x0); + case Pinetime::Controllers::Settings::Colors::Cyan: + return LV_COLOR_CYAN; + case Pinetime::Controllers::Settings::Colors::Teal: + return LV_COLOR_MAKE(0x0, 0xb0, 0xb0); + case Pinetime::Controllers::Settings::Colors::Blue: + return LV_COLOR_BLUE; + case Pinetime::Controllers::Settings::Colors::Navy: + return LV_COLOR_MAKE(0x0, 0x0, 0xb0); + case Pinetime::Controllers::Settings::Colors::Magenta: + return LV_COLOR_MAGENTA; + case Pinetime::Controllers::Settings::Colors::Purple: + return LV_COLOR_MAKE(0xb0, 0x0, 0xb0); + case Pinetime::Controllers::Settings::Colors::Orange: + return LV_COLOR_ORANGE; + default: + return LV_COLOR_WHITE; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 8f08e04..376f73a 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -12,14 +12,12 @@ #include "components/motion/MotionController.h" #include "components/motor/MotorController.h" #include "displayapp/screens/ApplicationList.h" -#include "displayapp/screens/Brightness.h" #include "displayapp/screens/Clock.h" #include "displayapp/screens/FirmwareUpdate.h" #include "displayapp/screens/FirmwareValidation.h" #include "displayapp/screens/InfiniPaint.h" #include "displayapp/screens/Paddle.h" #include "displayapp/screens/StopWatch.h" -#include "displayapp/screens/Meter.h" #include "displayapp/screens/Metronome.h" #include "displayapp/screens/Music.h" #include "displayapp/screens/Navigation.h" @@ -164,12 +162,10 @@ void DisplayApp::Refresh() { brightnessController.Lower(); vTaskDelay(100); } - lcd.DisplayOff(); PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping); state = States::Idle; break; case Messages::GoToRunning: - lcd.DisplayOn(); brightnessController.Restore(); state = States::Running; break; @@ -354,13 +350,21 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::Notifications: - currentScreen = std::make_unique<Screens::Notifications>( - this, notificationManager, systemTask->nimble().alertService(), motorController, *systemTask, Screens::Notifications::Modes::Normal); + currentScreen = std::make_unique<Screens::Notifications>(this, + notificationManager, + systemTask->nimble().alertService(), + motorController, + *systemTask, + Screens::Notifications::Modes::Normal); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: - currentScreen = std::make_unique<Screens::Notifications>( - this, notificationManager, systemTask->nimble().alertService(), motorController, *systemTask, Screens::Notifications::Modes::Preview); + currentScreen = std::make_unique<Screens::Notifications>(this, + notificationManager, + systemTask->nimble().alertService(), + motorController, + *systemTask, + Screens::Notifications::Modes::Preview); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::Timer: @@ -372,8 +376,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) // Settings case Apps::QuickSettings: - currentScreen = std::make_unique<Screens::QuickSettings>( - this, batteryController, dateTimeController, brightnessController, motorController, settingsController); + currentScreen = std::make_unique<Screens::QuickSettings>(this, + batteryController, + dateTimeController, + brightnessController, + motorController, + settingsController); ReturnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); break; case Apps::Settings: @@ -425,8 +433,14 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SysInfo: - currentScreen = std::make_unique<Screens::SystemInfo>( - this, dateTimeController, batteryController, brightnessController, bleController, watchdog, motionController, touchPanel); + currentScreen = std::make_unique<Screens::SystemInfo>(this, + dateTimeController, + batteryController, + brightnessController, + bleController, + watchdog, + motionController, + touchPanel); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::FlashLight: diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 1eaefaa..4397223 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -88,7 +88,7 @@ namespace Pinetime { Pinetime::Controllers::MotionController& motionController; Pinetime::Controllers::TimerController& timerController; Pinetime::Controllers::AlarmController& alarmController; - Pinetime::Controllers::BrightnessController &brightnessController; + Pinetime::Controllers::BrightnessController& brightnessController; Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::FirmwareValidator validator; diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 9d6eb22..ca15dba 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -26,7 +26,6 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, bleController {bleController} { - } void DisplayApp::Start() { @@ -121,5 +120,4 @@ void DisplayApp::PushMessage(Display::Messages msg) { } void DisplayApp::Register(Pinetime::System::SystemTask* systemTask) { - } diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 61f1c9b..0e80122 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -61,7 +61,9 @@ namespace Pinetime { Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Controllers::TouchHandler& touchHandler); void Start(); - void Start(Pinetime::System::BootErrors){ Start(); }; + void Start(Pinetime::System::BootErrors) { + Start(); + }; void PushMessage(Pinetime::Applications::Display::Messages msg); void Register(Pinetime::System::SystemTask* systemTask); diff --git a/src/displayapp/DummyLittleVgl.h b/src/displayapp/DummyLittleVgl.h index 47c9e02..05355a9 100644 --- a/src/displayapp/DummyLittleVgl.h +++ b/src/displayapp/DummyLittleVgl.h @@ -20,7 +20,6 @@ namespace Pinetime { LittleVgl& operator=(LittleVgl&&) = delete; void Init() { - } void FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { @@ -33,7 +32,6 @@ namespace Pinetime { void SetNewTapEvent(uint16_t x, uint16_t y) { } void SetNewTouchPoint(uint16_t x, uint16_t y, bool contact) { - } }; } diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index e7b58c1..64c9926 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -16,14 +16,22 @@ static void disp_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_ lvgl->FlushDisplay(area, color_p); } +static void rounder(lv_disp_drv_t* disp_drv, lv_area_t* area) { + auto* lvgl = static_cast<LittleVgl*>(disp_drv->user_data); + if (lvgl->GetFullRefresh()) { + area->x1 = 0; + area->x2 = LV_HOR_RES - 1; + area->y1 = 0; + area->y2 = LV_VER_RES - 1; + } +} + bool touchpad_read(lv_indev_drv_t* indev_drv, lv_indev_data_t* data) { auto* lvgl = static_cast<LittleVgl*>(indev_drv->user_data); return lvgl->GetTouchPadInfo(data); } -LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Drivers::Cst816S& touchPanel) - : lcd {lcd}, touchPanel {touchPanel}, previousClick {0, 0} { - +LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Drivers::Cst816S& touchPanel) : lcd {lcd}, touchPanel {touchPanel} { } void LittleVgl::Init() { @@ -48,6 +56,7 @@ void LittleVgl::InitDisplay() { /*Set a display buffer*/ disp_drv.buffer = &disp_buf_2; disp_drv.user_data = this; + disp_drv.rounder_cb = rounder; /*Finally register the driver*/ lv_disp_drv_register(&disp_drv); @@ -78,14 +87,15 @@ void LittleVgl::SetFullRefresh(FullRefreshDirections direction) { lv_disp_set_direction(lv_disp_get_default(), 4); } } + fullRefresh = true; } void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { uint16_t y1, y2, width, height = 0; ulTaskNotifyTake(pdTRUE, 200); - // NOtification is still needed (even if there is a mutex on SPI) because of the DataCommand pin - // which cannot be set/clear during a transfert. + // Notification is still needed (even if there is a mutex on SPI) because of the DataCommand pin + // which cannot be set/clear during a transfer. if ((scrollDirection == LittleVgl::FullRefreshDirections::Down) && (area->y2 == visibleNbLines - 1)) { writeOffset = ((writeOffset + totalNbLines) - visibleNbLines) % totalNbLines; @@ -185,8 +195,13 @@ bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) { void LittleVgl::InitTheme() { - lv_theme_t* th = lv_pinetime_theme_init( - LV_COLOR_WHITE, LV_COLOR_SILVER, 0, &jetbrains_mono_bold_20, &jetbrains_mono_bold_20, &jetbrains_mono_bold_20, &jetbrains_mono_bold_20); + lv_theme_t* th = lv_pinetime_theme_init(LV_COLOR_WHITE, + LV_COLOR_SILVER, + 0, + &jetbrains_mono_bold_20, + &jetbrains_mono_bold_20, + &jetbrains_mono_bold_20, + &jetbrains_mono_bold_20); lv_theme_set_act(th); } diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h index 1f8a3d7..4582616 100644 --- a/src/displayapp/LittleVgl.h +++ b/src/displayapp/LittleVgl.h @@ -26,6 +26,14 @@ namespace Pinetime { void SetFullRefresh(FullRefreshDirections direction); void SetNewTouchPoint(uint16_t x, uint16_t y, bool contact); + bool GetFullRefresh() { + bool returnValue = fullRefresh; + if (fullRefresh) { + fullRefresh = false; + } + return returnValue; + } + private: void InitDisplay(); void InitTouchpad(); @@ -39,9 +47,8 @@ namespace Pinetime { lv_color_t buf2_2[LV_HOR_RES_MAX * 4]; lv_disp_drv_t disp_drv; - lv_point_t previousClick; - bool firstTouch = true; + bool fullRefresh = false; static constexpr uint8_t nbWriteLines = 4; static constexpr uint16_t totalNbLines = 320; static constexpr uint16_t visibleNbLines = 240; diff --git a/src/displayapp/fonts/CMakeLists.txt b/src/displayapp/fonts/CMakeLists.txt new file mode 100644 index 0000000..d00c802 --- /dev/null +++ b/src/displayapp/fonts/CMakeLists.txt @@ -0,0 +1,35 @@ +set(FONTS jetbrains_mono_42 jetbrains_mono_76 jetbrains_mono_bold_20 + jetbrains_mono_extrabold_compressed lv_font_navi_80 lv_font_sys_48 + open_sans_light) +find_program(LV_FONT_CONV "lv_font_conv" NO_CACHE REQUIRED + HINTS "${CMAKE_SOURCE_DIR}/node_modules/.bin") +message(STATUS "Using ${LV_FONT_CONV} to generate font files") +configure_file(${CMAKE_CURRENT_LIST_DIR}/jetbrains_mono_bold_20.c_zero.patch + ${CMAKE_CURRENT_BINARY_DIR}/jetbrains_mono_bold_20.c_zero.patch COPYONLY) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12) + # FindPython3 module introduces with CMake 3.12 + # https://cmake.org/cmake/help/latest/module/FindPython3.html + find_package(Python3 REQUIRED) +else() + set(Python3_EXECUTABLE "python") +endif() + +# create static library building fonts +add_library(infinitime_fonts STATIC) +# add include directory to lvgl headers needed to compile the font files on its own +target_include_directories(infinitime_fonts PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../libs") +foreach(FONT ${FONTS}) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FONT}.c + COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/generate.py + --lv-font-conv "${LV_FONT_CONV}" + --font ${FONT} ${CMAKE_CURRENT_SOURCE_DIR}/fonts.json + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/fonts.json + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + add_custom_target(infinitime_fonts_${FONT} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${FONT}.c + ) + target_sources(infinitime_fonts PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${FONT}.c") + add_dependencies(infinitime_fonts infinitime_fonts_${FONT}) +endforeach() diff --git a/src/displayapp/fonts/FontAwesome5-Solid+Brands+Regular.woff b/src/displayapp/fonts/FontAwesome5-Solid+Brands+Regular.woff Binary files differnew file mode 100644 index 0000000..791b410 --- /dev/null +++ b/src/displayapp/fonts/FontAwesome5-Solid+Brands+Regular.woff diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index c7a8e2b..cfb6079 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -4,17 +4,10 @@ * [Awesome font from LVGL](https://lvgl.io/assets/others/FontAwesome5-Solid+Brands+Regular.woff) * [Open Sans Light from Google](https://fonts.google.com/specimen/Open+Sans) -## Generate the fonts: - -* Open the [LVGL font converter](https://lvgl.io/tools/fontconverter) -* Enter the settings for the font that you wish to convert -* Click on Convert, download the file and place it in `src/DisplayApp/Fonts` - ### How to add new symbols: * Browse [this cheatsheet](https://fontawesome.com/cheatsheet/free/solid) and pick symbols -* For each symbol, add its hex code (0xf641 for the 'Ad' icon, for example) to the *Range* list (Remember to keep this - readme updated with newest range list) +* For each symbol, add its hex code (0xf641 for the 'Ad' icon, for example) to the *Range* list (or the symbol list when its simple enough) in the `fonts.json` file * Convert this hex value into a UTF-8 code using [this site](http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=f185&mode=hex) * Define the new symbols in `src/displayapp/screens/Symbols.h`: @@ -23,77 +16,17 @@ static constexpr const char* newSymbol = "\xEF\x86\x85"; ``` -### Small font - -* Name: jetbrains_mono_bold_20 -* Size: 20 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x20-0x7e, 0x410-0x44f` -* Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following - range: `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015` -* Fix an error in the font conversion. - -Replace the following: - - /* U+0030 "0" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, - 0xdf, 0xf7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - -with - - /* U+0030 "0" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - -(there are two changes: 7f -> 7e and f7 -> b7) - -### Medium font +### the config file format: -* Name: jetbrains_mono_42 -* Size: 42 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-Regular.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x25, 0x30-0x3a` - -### Large font - -* Name: jetbrains_mono_76 -* Size: 76 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-Regular.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x25, 0x2D, 0x2F, 0x30-0x3a` - -### Digital watchface font - -* Name: jetbrains_mono_extrabold_compressed -* Size: 80 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-ExtraBold.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x30-0x3a` - -### PineTimeStyle font - -* Name: open_sans_light -* Size: 150 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `open_sans_light.tff` (use the file in this repo to ensure the version matches) and specify the following symbols: `0123456789` - -### Symbols font (Used in QuickSettings for example) - -* Name: lv_font_sys_48 -* Size: 48 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `icons_sys_48.tff` and specify the following range: `0xe902, 0xe904-0xe907, 0xe90b-0xe90c` +inside `fonts`, there is a dictionary of fonts, +and for each font there is: +* sources - list of file,range(,symbols) wanted (as a dictionary of those) +* bpp - bits per pixel. +* size - size. +* patches - list of extra "patches" to run: a path to a .patch file. (may be relative) +* compress - optional. default disabled. add `"compress": true` to enable ### Navigation font `navigtion.ttf` is created with the web app [icomoon](https://icomoon.io/app) by importing the svg files from `src/displayapp/icons/navigation/unique` and generating the font. `lv_font_navi_80.json` is a project file for the site, which you can import to add or remove icons. -This font must be generated with the `lv_font_conv` tool, which has additional options not available in the online converter. - -`lv_font_conv --font navigation.ttf -r '0xe900-0xe929' --size 80 --format lvgl --bpp 2 -o lv_font_navi_80.c` diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json new file mode 100644 index 0000000..5e91127 --- /dev/null +++ b/src/displayapp/fonts/fonts.json @@ -0,0 +1,78 @@ +{ + "jetbrains_mono_bold_20": { + "sources": [ + { + "file": "JetBrainsMono-Bold.ttf", + "range": "0x20-0x7e, 0x410-0x44f" + }, + { + "file": "FontAwesome5-Solid+Brands+Regular.woff", + "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015" + } + ], + "bpp": 1, + "size": 20, + "patches": ["jetbrains_mono_bold_20.c_zero.patch"] + }, + "jetbrains_mono_42": { + "sources": [ + { + "file": "JetBrainsMono-Regular.ttf", + "range": "0x25, 0x30-0x3a" + } + ], + "bpp": 1, + "size": 42 + }, + "jetbrains_mono_76": { + "sources": [ + { + "file": "JetBrainsMono-Regular.ttf", + "range": "0x25, 0x2D, 0x2F, 0x30-0x3a" + } + ], + "bpp": 1, + "size": 76 + }, + "jetbrains_mono_extrabold_compressed": { + "sources": [ + { + "file": "JetBrainsMono-ExtraBold.ttf", + "range": "0x30-0x3a" + } + ], + "bpp": 1, + "size": 80 + }, + "open_sans_light": { + "sources": [ + { + "file": "open_sans_light.ttf", + "symbols": "0123456789" + } + ], + "bpp": 1, + "size": 150 + }, + "lv_font_sys_48": { + "sources": [ + { + "file": "icons_sys_48.ttf", + "range": "0xe902, 0xe904-0xe907, 0xe90b-0xe90c" + } + ], + "bpp": 1, + "size": 48 + }, + "lv_font_navi_80": { + "sources": [ + { + "file": "navigation.ttf", + "range": "0xe900-0xe929" + } + ], + "bpp": 2, + "size": 80, + "compress": true + } +} diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py new file mode 100755 index 0000000..c172df0 --- /dev/null +++ b/src/displayapp/fonts/generate.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +import io +import sys +import json +import shutil +import typing +import os.path +import argparse +import subprocess + +class Source(object): + def __init__(self, d): + self.file = d['file'] + if not os.path.exists(self.file): + self.file = os.path.join(os.path.dirname(sys.argv[0]), self.file) + self.range = d.get('range') + self.symbols = d.get('symbols') + + +def gen_lvconv_line(lv_font_conv: str, dest: str, size: int, bpp: int, sources: typing.List[Source], compress:bool=False): + args = [lv_font_conv, '--size', str(size), '--output', dest, '--bpp', str(bpp), '--format', 'lvgl'] + if not compress: + args.append('--no-compress') + for source in sources: + args.extend(['--font', source.file]) + if source.range: + args.extend(['--range', source.range]) + if source.symbols: + args.extend(['--symbols', source.symbols]) + + return args + +def main(): + ap = argparse.ArgumentParser(description='auto generate LVGL font files from fonts') + ap.add_argument('config', type=str, help='config file to use') + ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) + ap.add_argument('--lv-font-conv', type=str, help='Path to "lv_font_conf" executable', default="lv_font_conv") + args = ap.parse_args() + + if not shutil.which(args.lv_font_conv): + sys.exit(f"Missing lv_font_conv. Make sure it's findable (in PATH) or specify it manually") + if not os.path.exists(args.config): + sys.exit(f'Error: the config file {args.config} does not exist.') + if not os.access(args.config, os.R_OK): + sys.exit(f'Error: the config file {args.config} is not accessible (permissions?).') + with open(args.config, 'r') as fd: + data = json.load(fd) + + fonts_to_run = set(data.keys()) + + if args.font: + enabled_fonts = set() + for font in args.font: + enabled_fonts.add(font[:-2] if font.endswith('.c') else font) + d = enabled_fonts.difference(fonts_to_run) + if d: + print(f'Warning: requested font{"s" if len(d)>1 else ""} missing: {" ".join(d)}') + fonts_to_run = fonts_to_run.intersection(enabled_fonts) + + for name in fonts_to_run: + font = data[name] + sources = font.pop('sources') + patches = font.pop('patches') if 'patches' in font else [] + font['sources'] = [Source(thing) for thing in sources] + line = gen_lvconv_line(args.lv_font_conv, f'{name}.c', **font) + subprocess.check_call(line) + if patches: + for patch in patches: + subprocess.check_call(['/usr/bin/patch', name+'.c', patch]) + + + +if __name__ == '__main__': + main() diff --git a/src/displayapp/fonts/jetbrains_mono_42.c b/src/displayapp/fonts/jetbrains_mono_42.c deleted file mode 100644 index b5218b9..0000000 --- a/src/displayapp/fonts/jetbrains_mono_42.c +++ /dev/null @@ -1,258 +0,0 @@ -/******************************************************************************* - * Size: 42 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_42 -#define JETBRAINS_MONO_42 1 -#endif - -#if JETBRAINS_MONO_42 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0025 "%" */ - 0x1f, 0x80, 0x7, 0x3f, 0xc0, 0xe, 0x7f, 0xe0, - 0x1c, 0xf0, 0xf0, 0x1c, 0xe0, 0x70, 0x38, 0xe0, - 0x70, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, - 0xe0, 0x71, 0xc0, 0xe0, 0x71, 0xc0, 0xf0, 0xf3, - 0x80, 0x7f, 0xe7, 0x0, 0x3f, 0xc7, 0x0, 0x1f, - 0x8e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3c, 0x0, - 0x0, 0x38, 0x0, 0x0, 0x71, 0xf8, 0x0, 0xe3, - 0xfc, 0x0, 0xe7, 0xfe, 0x1, 0xcf, 0xf, 0x3, - 0x8e, 0x7, 0x3, 0x8e, 0x7, 0x7, 0xe, 0x7, - 0xe, 0xe, 0x7, 0xe, 0xe, 0x7, 0x1c, 0xe, - 0x7, 0x38, 0xf, 0xf, 0x38, 0x7, 0xfe, 0x70, - 0x3, 0xfc, 0xe0, 0x1, 0xf8, - - /* U+0030 "0" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0xff, 0xfe, 0x1f, - 0x7, 0xc7, 0xc0, 0x7c, 0xf0, 0x7, 0xbc, 0x0, - 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xfe, 0x0, 0x3f, - 0xc0, 0x7, 0xf8, 0x0, 0xff, 0xe, 0x1f, 0xe3, - 0xe3, 0xfc, 0x7c, 0x7f, 0x8f, 0x8f, 0xf0, 0xe1, - 0xfe, 0x0, 0x3f, 0xc0, 0x7, 0xf8, 0x0, 0xff, - 0x0, 0x1f, 0xe0, 0x3, 0xfc, 0x0, 0x7f, 0x80, - 0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, - 0x1f, 0x7, 0xc3, 0xff, 0xf8, 0x1f, 0xfc, 0x0, - 0xfe, 0x0, - - /* U+0031 "1" */ - 0x3, 0xf0, 0x0, 0xfe, 0x0, 0x3f, 0xc0, 0x1f, - 0xf8, 0x7, 0xcf, 0x1, 0xf1, 0xe0, 0x3c, 0x3c, - 0x7, 0x7, 0x80, 0x80, 0xf0, 0x0, 0x1e, 0x0, - 0x3, 0xc0, 0x0, 0x78, 0x0, 0xf, 0x0, 0x1, - 0xe0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, - 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x78, 0x0, - 0xf, 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x7, - 0x80, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x3, 0xc0, - 0x0, 0x78, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf8, - - /* U+0032 "2" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0xff, 0xfc, 0x1f, - 0x7, 0xc7, 0xc0, 0x7c, 0xf0, 0x7, 0xbc, 0x0, - 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xe0, 0x0, 0x3c, - 0x0, 0x7, 0x80, 0x1, 0xf0, 0x0, 0x3c, 0x0, - 0xf, 0x80, 0x1, 0xe0, 0x0, 0x7c, 0x0, 0x1f, - 0x0, 0x7, 0xc0, 0x1, 0xf0, 0x0, 0x7c, 0x0, - 0x1f, 0x0, 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3e, - 0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, - 0x3e, 0x0, 0x7, 0xff, 0xfe, 0xff, 0xff, 0xdf, - 0xff, 0xf8, - - /* U+0033 "3" */ - 0x7f, 0xff, 0x8f, 0xff, 0xf1, 0xff, 0xfe, 0x0, - 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, - 0x0, 0x3, 0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, - 0x7, 0x80, 0x1, 0xfc, 0x0, 0x3f, 0xe0, 0x7, - 0xfe, 0x0, 0xff, 0xe0, 0x0, 0x3e, 0x0, 0x3, - 0xc0, 0x0, 0x7c, 0x0, 0x7, 0x80, 0x0, 0xf0, - 0x0, 0x1e, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, - 0xf, 0xf0, 0x1, 0xff, 0x0, 0x79, 0xe0, 0x1f, - 0x1f, 0x7, 0xc3, 0xff, 0xf0, 0x1f, 0xfc, 0x0, - 0xfe, 0x0, - - /* U+0034 "4" */ - 0x0, 0x1e, 0x0, 0xf, 0x80, 0x3, 0xc0, 0x1, - 0xe0, 0x0, 0x78, 0x0, 0x3c, 0x0, 0x1f, 0x0, - 0x7, 0x80, 0x3, 0xc0, 0x1, 0xf0, 0x0, 0x78, - 0x0, 0x3e, 0x0, 0xf, 0x0, 0x7, 0x80, 0xf3, - 0xe0, 0x3c, 0xf0, 0xf, 0x7c, 0x3, 0xde, 0x0, - 0xff, 0x0, 0x3f, 0xc0, 0xf, 0xf0, 0x3, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x3, - 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, - 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, - - /* U+0035 "5" */ - 0x7f, 0xff, 0x9f, 0xff, 0xe7, 0xff, 0xf9, 0xe0, - 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x80, 0x1, - 0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x8f, - 0x81, 0xef, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xe7, - 0xc0, 0x79, 0xe0, 0x1f, 0x0, 0x3, 0xc0, 0x0, - 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0xc0, - 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0xf0, 0x3, - 0xde, 0x1, 0xe7, 0x80, 0x78, 0xf8, 0x7e, 0x3f, - 0xff, 0x3, 0xff, 0x80, 0x3f, 0x0, - - /* U+0036 "6" */ - 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x78, 0x0, - 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, 0x0, 0x3, - 0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x70, - 0x0, 0xf, 0x0, 0x1, 0xe7, 0xc0, 0x1f, 0xff, - 0x3, 0xff, 0xfc, 0x3f, 0xf, 0xc7, 0xc0, 0x3e, - 0x78, 0x1, 0xe7, 0x80, 0x1f, 0xf0, 0x0, 0xff, - 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, - 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, 0xe7, 0x80, - 0x1e, 0x7c, 0x3, 0xe3, 0xf0, 0xfc, 0x1f, 0xff, - 0x80, 0xff, 0xf0, 0x1, 0xf8, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x1e, 0xf0, 0x1, 0xef, 0x0, 0x1e, 0xf0, - 0x3, 0xcf, 0x0, 0x3c, 0x0, 0x3, 0x80, 0x0, - 0x78, 0x0, 0x7, 0x80, 0x0, 0xf0, 0x0, 0xf, - 0x0, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x1, 0xe0, - 0x0, 0x3c, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, - 0x7, 0x80, 0x0, 0x78, 0x0, 0x7, 0x80, 0x0, - 0xf0, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, - 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x3, 0xc0, - 0x0, 0x7c, 0x0, 0x7, 0x80, 0x0, - - /* U+0038 "8" */ - 0x1, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, - 0xf0, 0xfc, 0x3c, 0x3, 0xc7, 0xc0, 0x3e, 0x78, - 0x1, 0xe7, 0x80, 0x1e, 0x78, 0x1, 0xe7, 0x80, - 0x1e, 0x3c, 0x3, 0xc3, 0xe0, 0x7c, 0x1f, 0xf, - 0x80, 0xff, 0xf0, 0x3, 0xfc, 0x0, 0x7f, 0xe0, - 0xf, 0xff, 0x3, 0xe0, 0x7c, 0x3c, 0x3, 0xc7, - 0x80, 0x1e, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, - 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x80, - 0x1f, 0x7c, 0x3, 0xe7, 0xe0, 0x7e, 0x3f, 0xff, - 0xc0, 0xff, 0xf0, 0x3, 0xfc, 0x0, - - /* U+0039 "9" */ - 0x3, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, - 0xe0, 0xfc, 0x7c, 0x3, 0xe7, 0x80, 0x1e, 0xf8, - 0x1, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, - 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, - 0xf7, 0x80, 0x1e, 0x7c, 0x3, 0xe3, 0xe0, 0x7e, - 0x3f, 0xff, 0xc1, 0xff, 0xfc, 0x7, 0xe7, 0x80, - 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, - 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, 0x7, - 0x80, 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, - 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, - - /* U+003A ":" */ - 0x7d, 0xff, 0xff, 0xff, 0xef, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xf7, 0xff, 0xff, 0xff, 0xbe -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 403, .box_w = 24, .box_h = 31, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 93, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 167, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 241, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 315, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 389, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 459, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 529, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 607, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 685, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 763, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 841, .adv_w = 403, .box_w = 7, .box_h = 24, .ofs_x = 9, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 37, .range_length = 1, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 48, .range_length = 11, .glyph_id_start = 2, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 2, - .bpp = 1, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t jetbrains_mono_42 = { -#else -lv_font_t jetbrains_mono_42 = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 31, /*The maximum line height required by the font*/ - .base_line = 0, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = -7, - .underline_thickness = 2, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_42*/ - diff --git a/src/displayapp/fonts/jetbrains_mono_76.c b/src/displayapp/fonts/jetbrains_mono_76.c deleted file mode 100644 index 2200e39..0000000 --- a/src/displayapp/fonts/jetbrains_mono_76.c +++ /dev/null @@ -1,554 +0,0 @@ -/******************************************************************************* - * Size: 76 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_76 -#define JETBRAINS_MONO_76 1 -#endif - -#if JETBRAINS_MONO_76 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0025 "%" */ - 0x1, 0xfc, 0x0, 0x0, 0x7, 0xe1, 0xff, 0xf0, - 0x0, 0x1, 0xf8, 0x7f, 0xff, 0x0, 0x0, 0x3f, - 0x1f, 0xff, 0xf0, 0x0, 0xf, 0xc7, 0xff, 0xff, - 0x0, 0x3, 0xf0, 0xfe, 0xf, 0xe0, 0x0, 0x7e, - 0x3f, 0x80, 0xfc, 0x0, 0x1f, 0x87, 0xe0, 0xf, - 0xc0, 0x7, 0xe0, 0xfc, 0x1, 0xf8, 0x0, 0xfc, - 0x1f, 0x80, 0x3f, 0x0, 0x3f, 0x3, 0xf0, 0x7, - 0xe0, 0xf, 0xc0, 0x7e, 0x0, 0xfc, 0x1, 0xf8, - 0xf, 0xc0, 0x1f, 0x80, 0x7e, 0x1, 0xf8, 0x3, - 0xf0, 0x1f, 0x80, 0x3f, 0x0, 0x7e, 0x3, 0xf0, - 0x7, 0xe0, 0xf, 0xc0, 0xfc, 0x0, 0xfc, 0x1, - 0xf8, 0x3f, 0x0, 0x1f, 0x80, 0x3f, 0x7, 0xe0, - 0x3, 0xf8, 0xf, 0xe1, 0xf8, 0x0, 0x3f, 0x83, - 0xf8, 0x7e, 0x0, 0x7, 0xff, 0xff, 0xf, 0xc0, - 0x0, 0x7f, 0xff, 0xc3, 0xf0, 0x0, 0x7, 0xff, - 0xf0, 0xfc, 0x0, 0x0, 0x7f, 0xfc, 0x1f, 0x80, - 0x0, 0x1, 0xfc, 0x7, 0xe0, 0x0, 0x0, 0x0, - 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, - 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, - 0x7, 0xe0, 0x3f, 0x80, 0x0, 0x0, 0xfc, 0x3f, - 0xfe, 0x0, 0x0, 0x3f, 0xf, 0xff, 0xe0, 0x0, - 0xf, 0xc3, 0xff, 0xfe, 0x0, 0x1, 0xf8, 0xff, - 0xff, 0xe0, 0x0, 0x7e, 0x1f, 0xc1, 0xfc, 0x0, - 0x1f, 0x83, 0xf0, 0x1f, 0x80, 0x3, 0xf0, 0xfc, - 0x1, 0xf8, 0x0, 0xfc, 0x1f, 0x80, 0x3f, 0x0, - 0x3f, 0x3, 0xf0, 0x7, 0xe0, 0x7, 0xe0, 0x7e, - 0x0, 0xfc, 0x1, 0xf8, 0xf, 0xc0, 0x1f, 0x80, - 0x7e, 0x1, 0xf8, 0x3, 0xf0, 0xf, 0xc0, 0x3f, - 0x0, 0x7e, 0x3, 0xf0, 0x7, 0xe0, 0xf, 0xc0, - 0xfc, 0x0, 0xfc, 0x1, 0xf8, 0x1f, 0x80, 0x1f, - 0x80, 0x3f, 0x7, 0xe0, 0x3, 0xf8, 0xf, 0xe1, - 0xf8, 0x0, 0x7f, 0x1, 0xfc, 0x3f, 0x0, 0x7, - 0xff, 0xff, 0xf, 0xc0, 0x0, 0xff, 0xff, 0xe3, - 0xf0, 0x0, 0xf, 0xff, 0xf8, 0xfe, 0x0, 0x0, - 0xff, 0xfe, 0x1f, 0x80, 0x0, 0xf, 0xff, 0x87, - 0xe0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, - - /* U+002D "-" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, - - /* U+002F "/" */ - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0x80, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - 0xf, 0xe0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x3f, 0x80, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0xf, 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, - - /* U+0030 "0" */ - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xe0, - 0x0, 0x1f, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, - 0xc0, 0x7, 0xff, 0xff, 0xf8, 0x3, 0xff, 0xff, - 0xff, 0x1, 0xff, 0xc0, 0xff, 0xe0, 0xff, 0x80, - 0x7, 0xfc, 0x3f, 0xc0, 0x0, 0xff, 0x1f, 0xe0, - 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x7, 0xf9, 0xfc, - 0x0, 0x0, 0xfe, 0xff, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, - 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, - 0xff, 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, - 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0x1f, 0xff, 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x1, 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x3, - 0xe0, 0x1f, 0xff, 0x81, 0xfc, 0x7, 0xff, 0xe0, - 0xff, 0x81, 0xff, 0xf8, 0x3f, 0xe0, 0x7f, 0xfe, - 0xf, 0xf8, 0x1f, 0xff, 0x83, 0xfe, 0x7, 0xff, - 0xe0, 0xff, 0x81, 0xff, 0xf8, 0x1f, 0xc0, 0x7f, - 0xfe, 0x3, 0xe0, 0x1f, 0xff, 0x80, 0x0, 0x7, - 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, 0x0, 0x0, - 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, 0x0, - 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, - 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, - 0xc0, 0x0, 0xf, 0xf7, 0xf0, 0x0, 0x3, 0xf9, - 0xfe, 0x0, 0x1, 0xfe, 0x7f, 0xc0, 0x0, 0xff, - 0x8f, 0xf8, 0x0, 0x7f, 0xc1, 0xff, 0x0, 0x3f, - 0xe0, 0x7f, 0xff, 0xff, 0xf8, 0xf, 0xff, 0xff, - 0xfc, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x3f, 0xff, - 0xff, 0x0, 0x3, 0xff, 0xff, 0x0, 0x0, 0x3f, - 0xff, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, - - /* U+0031 "1" */ - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x7, 0xff, 0x0, - 0x0, 0x7, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf0, - 0x0, 0x1, 0xff, 0xfc, 0x0, 0x1, 0xff, 0xff, - 0x0, 0x0, 0xff, 0xdf, 0xc0, 0x0, 0x7f, 0xe7, - 0xf0, 0x0, 0x7f, 0xe1, 0xfc, 0x0, 0x3f, 0xf0, - 0x7f, 0x0, 0xf, 0xf8, 0x1f, 0xc0, 0x3, 0xfc, - 0x7, 0xf0, 0x0, 0xfc, 0x1, 0xfc, 0x0, 0x3e, - 0x0, 0x7f, 0x0, 0xf, 0x0, 0x1f, 0xc0, 0x3, - 0x0, 0x7, 0xf0, 0x0, 0x80, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0xf, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - - /* U+0032 "2" */ - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xe0, - 0x0, 0x1f, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, - 0xc0, 0x7, 0xff, 0xff, 0xf8, 0x3, 0xff, 0xff, - 0xff, 0x1, 0xff, 0xc0, 0x7f, 0xe0, 0xff, 0x80, - 0x7, 0xfc, 0x3f, 0xc0, 0x0, 0xff, 0x1f, 0xe0, - 0x0, 0x1f, 0xe7, 0xf0, 0x0, 0x3, 0xf9, 0xfc, - 0x0, 0x0, 0xfe, 0xff, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, - 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x3, 0xfe, 0x0, - 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x1f, - 0xf0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x7, - 0xfc, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, - 0xff, 0x80, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0xf, 0xf8, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x1, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, - 0xff, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, - 0xff, 0xff, 0xc0, - - /* U+0033 "3" */ - 0x3f, 0xff, 0xff, 0xfe, 0xf, 0xff, 0xff, 0xff, - 0x83, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, - 0xf8, 0x3f, 0xff, 0xff, 0xfe, 0xf, 0xff, 0xff, - 0xff, 0x80, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x3f, 0xc0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x1, 0xff, - 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xc0, 0x0, 0x1f, - 0xff, 0xf8, 0x0, 0x7, 0xff, 0xff, 0x0, 0x1, - 0xff, 0xff, 0xe0, 0x0, 0x0, 0xf, 0xfc, 0x0, - 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, - 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x3f, 0xdf, - 0xc0, 0x0, 0xf, 0xe7, 0xf8, 0x0, 0x7, 0xf9, - 0xfe, 0x0, 0x1, 0xfe, 0x3f, 0xc0, 0x0, 0xff, - 0xf, 0xfc, 0x0, 0xff, 0x81, 0xff, 0xff, 0xff, - 0xe0, 0x3f, 0xff, 0xff, 0xf0, 0x7, 0xff, 0xff, - 0xf8, 0x0, 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, - 0xfc, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, - 0xc0, 0x0, 0x0, - - /* U+0034 "4" */ - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3f, 0xc0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x7, 0xf8, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x1f, 0xe0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x7f, 0x7, 0xf8, 0x0, 0x7f, - 0xf, 0xf0, 0x0, 0x7f, 0xf, 0xe0, 0x0, 0x7f, - 0x1f, 0xe0, 0x0, 0x7f, 0x3f, 0xc0, 0x0, 0x7f, - 0x3f, 0xc0, 0x0, 0x7f, 0x7f, 0x80, 0x0, 0x7f, - 0x7f, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - - /* U+0035 "5" */ - 0x7f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfc, - 0x7f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfc, - 0x7f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfc, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x3, 0xfc, 0x0, - 0x7f, 0xf, 0xff, 0x80, 0x7f, 0x3f, 0xff, 0xc0, - 0x7f, 0x7f, 0xff, 0xf0, 0x7f, 0x7f, 0xff, 0xf8, - 0x7f, 0xff, 0xff, 0xf8, 0x7f, 0xf8, 0x1f, 0xfc, - 0x7f, 0xe0, 0x7, 0xfc, 0x7f, 0xc0, 0x1, 0xfe, - 0x7f, 0x80, 0x1, 0xfe, 0x7f, 0x80, 0x0, 0xfe, - 0x7f, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0xfe, - 0xff, 0x0, 0x0, 0xfe, 0x7f, 0x0, 0x1, 0xfe, - 0x7f, 0x80, 0x3, 0xfc, 0x3f, 0xe0, 0x7, 0xfc, - 0x3f, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xf0, - 0xf, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xff, 0xc0, - 0x1, 0xff, 0xff, 0x80, 0x0, 0x7f, 0xfc, 0x0, - 0x0, 0x1, 0x0, 0x0, - - /* U+0036 "6" */ - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x7f, 0x80, 0x0, - 0x7f, 0x9f, 0xff, 0x0, 0x7, 0xf7, 0xff, 0xf8, - 0x0, 0xfe, 0xff, 0xff, 0xe0, 0xf, 0xff, 0xff, - 0xff, 0x1, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xfe, - 0x7, 0xff, 0x83, 0xff, 0x0, 0xf, 0xfc, 0x3f, - 0xe0, 0x0, 0x7f, 0xc7, 0xfc, 0x0, 0x3, 0xfe, - 0x7f, 0x80, 0x0, 0x1f, 0xe7, 0xf0, 0x0, 0x0, - 0xfe, 0x7f, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x0, 0xff, 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, - 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, 0xff, - 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, - 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0x7f, 0x0, - 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xfe, 0x7f, - 0x80, 0x0, 0x1f, 0xe3, 0xf8, 0x0, 0x1, 0xfc, - 0x3f, 0xc0, 0x0, 0x3f, 0xc1, 0xfe, 0x0, 0x7, - 0xf8, 0x1f, 0xf8, 0x1, 0xff, 0x80, 0xff, 0xff, - 0xff, 0xf0, 0x7, 0xff, 0xff, 0xfe, 0x0, 0x3f, - 0xff, 0xff, 0xc0, 0x1, 0xff, 0xff, 0xf8, 0x0, - 0x7, 0xff, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x6, 0x0, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xf, 0xef, - 0xe0, 0x0, 0x0, 0xfe, 0xfe, 0x0, 0x0, 0x1f, - 0xef, 0xe0, 0x0, 0x1, 0xfc, 0xfe, 0x0, 0x0, - 0x1f, 0xcf, 0xe0, 0x0, 0x3, 0xf8, 0xfe, 0x0, - 0x0, 0x3f, 0x8f, 0xe0, 0x0, 0x7, 0xf8, 0xfe, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0xf, 0xe0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xfc, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, - - /* U+0038 "8" */ - 0x0, 0x7, 0xfe, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0, 0x3f, 0xff, - 0xff, 0xc0, 0x7, 0xff, 0xff, 0xfe, 0x0, 0xff, - 0xff, 0xff, 0xf0, 0x1f, 0xfc, 0x3, 0xff, 0x81, - 0xff, 0x0, 0xf, 0xf8, 0x3f, 0xe0, 0x0, 0x7f, - 0xc3, 0xfc, 0x0, 0x3, 0xfc, 0x7f, 0x80, 0x0, - 0x1f, 0xc7, 0xf8, 0x0, 0x1, 0xfe, 0x7f, 0x0, - 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xfe, 0x7f, - 0x0, 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xfe, - 0x7f, 0x0, 0x0, 0xf, 0xe7, 0xf8, 0x0, 0x1, - 0xfe, 0x3f, 0x80, 0x0, 0x1f, 0xc3, 0xfc, 0x0, - 0x3, 0xfc, 0x1f, 0xc0, 0x0, 0x7f, 0x81, 0xff, - 0x0, 0xf, 0xf8, 0xf, 0xf8, 0x1, 0xff, 0x0, - 0x7f, 0xe0, 0x7f, 0xe0, 0x3, 0xff, 0x9f, 0xfc, - 0x0, 0xf, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, - 0xe0, 0x0, 0x1, 0xff, 0xf8, 0x0, 0x0, 0x7f, - 0xff, 0xe0, 0x0, 0xf, 0xff, 0xff, 0x0, 0x3, - 0xff, 0x9f, 0xfc, 0x0, 0x7f, 0xe0, 0x7f, 0xe0, - 0xf, 0xf8, 0x1, 0xff, 0x1, 0xfe, 0x0, 0x7, - 0xf8, 0x1f, 0xc0, 0x0, 0x3f, 0x83, 0xf8, 0x0, - 0x1, 0xfc, 0x7f, 0x80, 0x0, 0x1f, 0xe7, 0xf0, - 0x0, 0x0, 0xfe, 0x7f, 0x0, 0x0, 0xf, 0xef, - 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, - 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, - 0x0, 0x7, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, - 0x0, 0x0, 0xf, 0xf7, 0xf8, 0x0, 0x1, 0xfe, - 0x7f, 0xc0, 0x0, 0x3f, 0xe3, 0xfe, 0x0, 0x7, - 0xfc, 0x3f, 0xf8, 0x1, 0xff, 0xc1, 0xff, 0xff, - 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0x0, 0x7f, - 0xff, 0xff, 0xe0, 0x3, 0xff, 0xff, 0xfc, 0x0, - 0xf, 0xff, 0xff, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x6, 0x0, 0x0, - - /* U+0039 "9" */ - 0x0, 0x7, 0xfe, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0, 0x1f, 0xff, - 0xff, 0x80, 0x3, 0xff, 0xff, 0xfe, 0x0, 0x7f, - 0xff, 0xff, 0xf0, 0xf, 0xfc, 0x7, 0xff, 0x1, - 0xff, 0x0, 0xf, 0xf8, 0x3f, 0xe0, 0x0, 0x7f, - 0xc3, 0xfc, 0x0, 0x3, 0xfc, 0x7f, 0x80, 0x0, - 0x1f, 0xe7, 0xf0, 0x0, 0x1, 0xfe, 0x7f, 0x0, - 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xff, 0xfe, - 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, - 0x7f, 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, - 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0xf, 0xef, - 0xf0, 0x0, 0x0, 0xfe, 0x7f, 0x0, 0x0, 0x1f, - 0xe7, 0xf8, 0x0, 0x1, 0xfe, 0x7f, 0xc0, 0x0, - 0x3f, 0xc3, 0xfe, 0x0, 0x7, 0xfc, 0x3f, 0xf0, - 0x0, 0xff, 0x81, 0xff, 0xe0, 0x3f, 0xf8, 0xf, - 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xf0, - 0x3, 0xff, 0xff, 0xff, 0x0, 0x1f, 0xff, 0xef, - 0xe0, 0x0, 0xff, 0xf9, 0xfc, 0x0, 0x1, 0xfe, - 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, - - /* U+003A ":" */ - 0xf, 0x81, 0xff, 0x1f, 0xfd, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf1, 0xff, - 0x7, 0xe0, 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, 0x2, 0x0, 0xff, 0x1f, - 0xfc, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xf3, 0xff, 0x8f, 0xf8, 0x4, 0x0 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 730, .box_w = 43, .box_h = 57, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 307, .adv_w = 730, .box_w = 24, .box_h = 6, .ofs_x = 11, .ofs_y = 22}, - {.bitmap_index = 325, .adv_w = 730, .box_w = 34, .box_h = 72, .ofs_x = 6, .ofs_y = -8}, - {.bitmap_index = 631, .adv_w = 730, .box_w = 34, .box_h = 58, .ofs_x = 6, .ofs_y = -1}, - {.bitmap_index = 878, .adv_w = 730, .box_w = 34, .box_h = 56, .ofs_x = 7, .ofs_y = 0}, - {.bitmap_index = 1116, .adv_w = 730, .box_w = 34, .box_h = 57, .ofs_x = 6, .ofs_y = 0}, - {.bitmap_index = 1359, .adv_w = 730, .box_w = 34, .box_h = 57, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 1602, .adv_w = 730, .box_w = 32, .box_h = 56, .ofs_x = 5, .ofs_y = 0}, - {.bitmap_index = 1826, .adv_w = 730, .box_w = 32, .box_h = 57, .ofs_x = 7, .ofs_y = -1}, - {.bitmap_index = 2054, .adv_w = 730, .box_w = 36, .box_h = 58, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 2315, .adv_w = 730, .box_w = 36, .box_h = 56, .ofs_x = 6, .ofs_y = 0}, - {.bitmap_index = 2567, .adv_w = 730, .box_w = 36, .box_h = 58, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 2828, .adv_w = 730, .box_w = 36, .box_h = 57, .ofs_x = 5, .ofs_y = 0}, - {.bitmap_index = 3085, .adv_w = 730, .box_w = 13, .box_h = 44, .ofs_x = 16, .ofs_y = -1} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - -static const uint16_t unicode_list_0[] = { - 0x0, 0x8 -}; - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 37, .range_length = 9, .glyph_id_start = 1, - .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 2, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY - }, - { - .range_start = 47, .range_length = 12, .glyph_id_start = 3, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 2, - .bpp = 1, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t jetbrains_mono_76 = { -#else -lv_font_t jetbrains_mono_76 = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 72, /*The maximum line height required by the font*/ - .base_line = 8, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = -12, - .underline_thickness = 4, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_76*/ - diff --git a/src/displayapp/fonts/jetbrains_mono_bold_20.c b/src/displayapp/fonts/jetbrains_mono_bold_20.c deleted file mode 100644 index 5c40d49..0000000 --- a/src/displayapp/fonts/jetbrains_mono_bold_20.c +++ /dev/null @@ -1,1334 +0,0 @@ -/******************************************************************************* - * Size: 20 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_BOLD_20 -#define JETBRAINS_MONO_BOLD_20 1 -#endif - -#if JETBRAINS_MONO_BOLD_20 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0020 " " */ - 0x0, - - /* U+0021 "!" */ - 0xff, 0xff, 0xff, 0xfc, 0xf, 0xc0, - - /* U+0022 "\"" */ - 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xc0, - - /* U+0023 "#" */ - 0x8, 0xc3, 0x18, 0x62, 0x3f, 0xf7, 0xfe, 0x23, - 0xc, 0x61, 0x88, 0xff, 0xdf, 0xf8, 0x8c, 0x11, - 0x86, 0x30, 0xc4, 0x0, - - /* U+0024 "$" */ - 0x8, 0x2, 0x0, 0x81, 0xfc, 0x7f, 0xba, 0x7e, - 0x9f, 0xa0, 0xf8, 0x1f, 0x83, 0xf8, 0x3f, 0x9, - 0xfa, 0x7e, 0x9d, 0xfe, 0x7f, 0x2, 0x0, 0x80, - 0x20, - - /* U+0025 "%" */ - 0x78, 0x3f, 0xc6, 0xcc, 0xcc, 0xcc, 0xfd, 0x87, - 0xb0, 0x6, 0x0, 0x7e, 0xf, 0xf1, 0xb3, 0x33, - 0x33, 0x33, 0x63, 0xfc, 0x1e, - - /* U+0026 "&" */ - 0x1e, 0xf, 0xe1, 0x8e, 0x30, 0x6, 0x0, 0x60, - 0x1e, 0x7, 0xe6, 0xed, 0xdc, 0xf3, 0x9e, 0x73, - 0xcf, 0xfc, 0xf9, 0x80, - - /* U+0027 "'" */ - 0xff, 0xff, 0xc0, - - /* U+0028 "(" */ - 0x2, 0x1c, 0x79, 0xc7, 0x1e, 0x38, 0x70, 0xe1, - 0xc3, 0x87, 0xe, 0x1c, 0x3c, 0x38, 0x3c, 0x3c, - 0x38, - - /* U+0029 ")" */ - 0x1, 0xc3, 0xc3, 0xc1, 0xc3, 0xc3, 0x87, 0xe, - 0x1c, 0x38, 0x70, 0xe1, 0xc7, 0xe, 0x79, 0xe3, - 0x0, - - /* U+002A "*" */ - 0xc, 0x3, 0x8, 0xc7, 0xb7, 0x7f, 0x83, 0x1, - 0xe0, 0xcc, 0x73, 0x80, 0x0, - - /* U+002B "+" */ - 0x1c, 0x7, 0x1, 0xc3, 0xff, 0xff, 0xc7, 0x1, - 0xc0, 0x70, 0x1c, 0x0, - - /* U+002C "," */ - 0x7b, 0x9c, 0xce, 0x60, - - /* U+002D "-" */ - 0xff, 0xf0, - - /* U+002E "." */ - 0xff, 0xf0, - - /* U+002F "/" */ - 0x1, 0xc0, 0x60, 0x38, 0xe, 0x3, 0x1, 0xc0, - 0x70, 0x18, 0xe, 0x3, 0x1, 0xc0, 0x70, 0x18, - 0xe, 0x3, 0x80, 0xc0, 0x70, 0x18, 0xe, 0x0, - - /* U+0030 "0" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0031 "1" */ - 0x1e, 0x3f, 0x3f, 0x99, 0xc8, 0xe0, 0x70, 0x38, - 0x1c, 0xe, 0x7, 0x3, 0x81, 0xcf, 0xff, 0xfc, - - /* U+0032 "2" */ - 0x3e, 0x3f, 0xbd, 0xfc, 0x70, 0x38, 0x1c, 0x1c, - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xf, 0xff, 0xfc, - - /* U+0033 "3" */ - 0x7f, 0x9f, 0xe0, 0x30, 0x18, 0xc, 0x7, 0xc1, - 0xf8, 0xf, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0034 "4" */ - 0x7, 0x7, 0x3, 0x83, 0x83, 0x83, 0xc1, 0xcf, - 0xe7, 0xe3, 0xff, 0xff, 0xe0, 0x70, 0x38, 0x1c, - - /* U+0035 "5" */ - 0x7f, 0x9f, 0xe7, 0x1, 0xc0, 0x77, 0x1f, 0xe7, - 0x3c, 0x7, 0x1, 0xc0, 0x77, 0x1d, 0xcf, 0x7f, - 0x87, 0xc0, - - /* U+0036 "6" */ - 0xe, 0x3, 0x1, 0xc0, 0x60, 0x38, 0x1d, 0xc7, - 0xfb, 0xcf, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0x80, - - /* U+0037 "7" */ - 0xff, 0xff, 0xfe, 0x1f, 0x86, 0x3, 0x80, 0xe0, - 0x30, 0x1c, 0x6, 0x3, 0x80, 0xc0, 0x70, 0x1c, - 0xe, 0x0, - - /* U+0038 "8" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xdc, 0xe3, - 0xf0, 0xfc, 0x73, 0xb8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0039 "9" */ - 0x1e, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, - 0x3d, 0xfe, 0x3b, 0x81, 0xc0, 0x60, 0x38, 0xc, - 0x7, 0x0, - - /* U+003A ":" */ - 0xff, 0x80, 0x0, 0xff, 0x80, - - /* U+003B ";" */ - 0x7b, 0xde, 0x0, 0x0, 0x0, 0x3, 0xdc, 0xe6, - 0x73, 0x0, - - /* U+003C "<" */ - 0x0, 0x81, 0xc3, 0xe7, 0xcf, 0x6, 0x3, 0xc0, - 0x7c, 0xf, 0x81, 0xc0, 0x20, - - /* U+003D "=" */ - 0xff, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xfe, - - /* U+003E ">" */ - 0x80, 0x70, 0x3e, 0x7, 0xc0, 0xf8, 0xc, 0x1e, - 0x3c, 0xf8, 0x70, 0x20, 0x0, - - /* U+003F "?" */ - 0xfc, 0xfe, 0xf, 0x7, 0x7, 0xf, 0x3e, 0x3c, - 0x30, 0x30, 0x0, 0x0, 0x70, 0x70, - - /* U+0040 "@" */ - 0x1f, 0x7, 0xf9, 0xc3, 0x70, 0x3c, 0x7, 0x8e, - 0xf3, 0xfe, 0x63, 0xcc, 0x79, 0x8f, 0x31, 0xe6, - 0x3c, 0xff, 0x8e, 0xf8, 0x3, 0x80, 0x3e, 0x3, - 0xc0, - - /* U+0041 "A" */ - 0x1e, 0x7, 0x81, 0xe0, 0xfc, 0x3f, 0xc, 0xc3, - 0x31, 0xce, 0x73, 0x9f, 0xe7, 0xfb, 0x87, 0xe1, - 0xf0, 0x30, - - /* U+0042 "B" */ - 0xfe, 0x3f, 0xce, 0x3b, 0x8e, 0xe3, 0xb8, 0xef, - 0xe3, 0xfc, 0xe3, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0xc0, - - /* U+0043 "C" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x80, 0xe0, 0x38, 0xe, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0044 "D" */ - 0xfe, 0x7f, 0xb9, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0xff, 0xf7, 0xf0, - - /* U+0045 "E" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xfd, - 0xfe, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - - /* U+0046 "F" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xff, - 0xff, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x0, - - /* U+0047 "G" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x7f, 0x9f, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0048 "H" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0xff, - 0xff, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+0049 "I" */ - 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, - - /* U+004A "J" */ - 0x1f, 0xc7, 0xf0, 0x1c, 0x7, 0x1, 0xc0, 0x70, - 0x1c, 0x7, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+004B "K" */ - 0xe1, 0xf8, 0x7e, 0x3b, 0x8e, 0xe7, 0x39, 0xcf, - 0xe3, 0xf8, 0xe7, 0x39, 0xce, 0x3b, 0x8e, 0xe1, - 0xf8, 0x70, - - /* U+004C "L" */ - 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x3, 0x81, - 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - - /* U+004D "M" */ - 0xf3, 0xfc, 0xfd, 0x3f, 0xcf, 0xff, 0xff, 0xfe, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, - 0xf8, 0x70, - - /* U+004E "N" */ - 0xe1, 0xf0, 0xfc, 0x7e, 0x3f, 0x9e, 0xcf, 0x67, - 0x9b, 0xcd, 0xe6, 0xf1, 0xf8, 0xfc, 0x7e, 0x1c, - - /* U+004F "O" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+0050 "P" */ - 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, - 0xfb, 0xfc, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, - 0x38, 0x0, - - /* U+0051 "Q" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, - 0x1f, 0x87, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0x80, 0x70, 0xe, 0x3, 0x80, 0x70, - - /* U+0052 "R" */ - 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, - 0xfb, 0xf8, 0xe6, 0x39, 0xce, 0x33, 0x8e, 0xe3, - 0xb8, 0x70, - - /* U+0053 "S" */ - 0x3f, 0x1f, 0xee, 0x3f, 0x87, 0xe0, 0x3e, 0x7, - 0xf0, 0xfe, 0x3, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0054 "T" */ - 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, - 0x3, 0x80, - - /* U+0055 "U" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+0056 "V" */ - 0xc0, 0xf8, 0x7e, 0x1d, 0x86, 0x61, 0x9c, 0xe7, - 0x38, 0xcc, 0x33, 0xe, 0xc3, 0xf0, 0x78, 0x1e, - 0x7, 0x80, - - /* U+0057 "W" */ - 0xce, 0x79, 0xcf, 0x29, 0xe5, 0x3c, 0xa7, 0xd5, - 0xda, 0xb3, 0x56, 0x7b, 0xcf, 0x79, 0xef, 0x38, - 0xe7, 0x1c, 0xe3, 0x80, - - /* U+0058 "X" */ - 0xe1, 0xd8, 0x67, 0x38, 0xcc, 0x3f, 0x7, 0x81, - 0xe0, 0x78, 0x1e, 0xf, 0xc3, 0x31, 0xce, 0xe1, - 0xf8, 0x70, - - /* U+0059 "Y" */ - 0xe0, 0xfc, 0x1d, 0xc7, 0x38, 0xe3, 0xb8, 0x77, - 0x6, 0xc0, 0xf8, 0xe, 0x1, 0xc0, 0x38, 0x7, - 0x0, 0xe0, 0x1c, 0x0, - - /* U+005A "Z" */ - 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0x70, 0x70, 0x70, - 0x38, 0x38, 0x38, 0x1c, 0x1c, 0xf, 0xff, 0xfc, - - /* U+005B "[" */ - 0xff, 0xfe, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, - 0x38, 0xe3, 0x8e, 0x38, 0xff, 0xf0, - - /* U+005C "\\" */ - 0xe0, 0x18, 0x7, 0x1, 0xc0, 0x30, 0xe, 0x3, - 0x80, 0x60, 0x1c, 0x3, 0x0, 0xe0, 0x38, 0x6, - 0x1, 0xc0, 0x70, 0xc, 0x3, 0x80, 0x60, 0x1c, - - /* U+005D "]" */ - 0xff, 0xf1, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, - 0xc7, 0x1c, 0x71, 0xc7, 0xff, 0xf0, - - /* U+005E "^" */ - 0xc, 0x7, 0x81, 0xe0, 0xfc, 0x33, 0x1c, 0xe6, - 0x19, 0x86, - - /* U+005F "_" */ - 0xff, 0xff, 0xf0, - - /* U+0060 "`" */ - 0xe3, 0x8c, - - /* U+0061 "a" */ - 0x1f, 0x1f, 0xe7, 0x1c, 0x7, 0x3f, 0xdf, 0xfe, - 0x1f, 0x87, 0xe3, 0xff, 0xf3, 0xdc, - - /* U+0062 "b" */ - 0xe0, 0x70, 0x38, 0x1d, 0xcf, 0xf7, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7f, 0xf7, 0x70, - - /* U+0063 "c" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x87, 0xf3, 0xdf, 0xe3, 0xf0, - - /* U+0064 "d" */ - 0x3, 0x81, 0xc0, 0xe7, 0x77, 0xff, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf9, 0xdc, - - /* U+0065 "e" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7f, 0xff, 0xff, 0x81, - 0xc0, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0066 "f" */ - 0xf, 0xc7, 0xf1, 0xc0, 0x70, 0xff, 0xff, 0xf1, - 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1c, - 0x7, 0x0, - - /* U+0067 "g" */ - 0x3b, 0xbf, 0xfd, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xf7, 0xbf, 0xce, 0xe0, 0x70, 0x39, 0xf8, - 0xf8, - - /* U+0068 "h" */ - 0xe0, 0x70, 0x38, 0x1d, 0xcf, 0xf7, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+0069 "i" */ - 0x1c, 0x7, 0x1, 0xc0, 0x0, 0x0, 0x3f, 0xf, - 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1c, - 0x7, 0xf, 0xff, 0xff, - - /* U+006A "j" */ - 0x7, 0x7, 0x7, 0x0, 0xff, 0xff, 0x7, 0x7, - 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, - 0xf, 0xfe, 0xfc, - - /* U+006B "k" */ - 0xe0, 0x38, 0xe, 0x3, 0x87, 0xe3, 0xb8, 0xee, - 0x73, 0xf8, 0xfe, 0x39, 0xce, 0x33, 0x8e, 0xe1, - 0xb8, 0x70, - - /* U+006C "l" */ - 0xfe, 0x1f, 0xc0, 0x38, 0x7, 0x0, 0xe0, 0x1c, - 0x3, 0x80, 0x70, 0xe, 0x1, 0xc0, 0x38, 0x7, - 0x0, 0x7e, 0x7, 0xc0, - - /* U+006D "m" */ - 0xd9, 0xbf, 0xfc, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcc, - - /* U+006E "n" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - - /* U+006F "o" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0070 "p" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xff, 0xbb, 0x9c, 0xe, 0x7, 0x3, - 0x80, - - /* U+0071 "q" */ - 0x3b, 0xbf, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0xce, 0xe0, 0x70, 0x38, 0x1c, - 0xe, - - /* U+0072 "r" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x3, 0x81, - 0xc0, 0xe0, 0x70, 0x38, 0x0, - - /* U+0073 "s" */ - 0x1f, 0x1f, 0xf7, 0x1d, 0xc0, 0x7c, 0xf, 0xe0, - 0x3c, 0x7, 0x71, 0xdf, 0xf3, 0xf0, - - /* U+0074 "t" */ - 0x1c, 0x7, 0x1, 0xc3, 0xff, 0xff, 0xc7, 0x1, - 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1f, - 0xc3, 0xf0, - - /* U+0075 "u" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0076 "v" */ - 0xc0, 0xf8, 0x7e, 0x1d, 0x86, 0x73, 0x8c, 0xc3, - 0x30, 0xfc, 0x1e, 0x7, 0x81, 0xe0, - - /* U+0077 "w" */ - 0xc6, 0x36, 0x66, 0x66, 0x66, 0xf6, 0x6f, 0x66, - 0x96, 0x69, 0x62, 0x94, 0x29, 0x43, 0x9c, 0x39, - 0xc0, - - /* U+0078 "x" */ - 0xe1, 0xdc, 0xe3, 0x30, 0xfc, 0x1e, 0x7, 0x81, - 0xe0, 0xfc, 0x73, 0x9c, 0xee, 0x1c, - - /* U+0079 "y" */ - 0xe0, 0xf8, 0x76, 0x19, 0xce, 0x73, 0x8c, 0xc3, - 0xf0, 0x7c, 0x1e, 0x7, 0x80, 0xe0, 0x30, 0x1c, - 0x6, 0x3, 0x80, - - /* U+007A "z" */ - 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0x7f, 0xff, 0xe0, - - /* U+007B "{" */ - 0x7, 0x87, 0xc3, 0x81, 0xc0, 0xe0, 0x70, 0x38, - 0x1c, 0xfc, 0x7e, 0x3, 0x81, 0xc0, 0xe0, 0x70, - 0x30, 0x1c, 0xf, 0x83, 0xc0, - - /* U+007C "|" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, - - /* U+007D "}" */ - 0xf0, 0x7c, 0xe, 0x7, 0x3, 0x81, 0xc0, 0xe0, - 0x70, 0x1f, 0x8f, 0xce, 0x7, 0x3, 0x81, 0xc0, - 0x60, 0x70, 0xf8, 0x78, 0x0, - - /* U+007E "~" */ - 0x78, 0xff, 0x3c, 0xcf, 0x3f, 0xc7, 0x80, - - /* U+0410 "А" */ - 0x1e, 0x7, 0x81, 0xe0, 0xfc, 0x3f, 0xc, 0xc3, - 0x31, 0xce, 0x73, 0x9f, 0xe7, 0xfb, 0x87, 0xe1, - 0xf0, 0x30, - - /* U+0411 "Б" */ - 0xff, 0xbf, 0xee, 0x3, 0x80, 0xe0, 0x3f, 0xcf, - 0xfb, 0x8f, 0xe1, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0xc0, - - /* U+0412 "В" */ - 0xfe, 0x3f, 0xce, 0x3b, 0x8e, 0xe3, 0xb8, 0xef, - 0xe3, 0xfc, 0xe3, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0xc0, - - /* U+0413 "Г" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0x81, - 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x0, - - /* U+0414 "Д" */ - 0x3f, 0xc7, 0xf8, 0xe7, 0x1c, 0xe3, 0x9c, 0x73, - 0x8e, 0x71, 0xce, 0x39, 0xc7, 0x38, 0xe7, 0x38, - 0xef, 0xff, 0xff, 0xf8, 0x3f, 0x7, 0xe0, 0xe0, - - /* U+0415 "Е" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xfd, - 0xfe, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - - /* U+0416 "Ж" */ - 0xe6, 0x76, 0x66, 0x66, 0x67, 0x66, 0x36, 0xc3, - 0x6c, 0x3f, 0xc3, 0x6c, 0x36, 0xc7, 0x6e, 0x66, - 0x66, 0x66, 0x66, 0x6c, 0x63, - - /* U+0417 "З" */ - 0x3f, 0x1f, 0xef, 0x1f, 0x87, 0x1, 0xc7, 0xc1, - 0xf8, 0xf, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0x80, - - /* U+0418 "И" */ - 0xc3, 0xe3, 0xf1, 0xf8, 0xfc, 0xde, 0x6f, 0x37, - 0xb3, 0xd9, 0xfc, 0xfc, 0x7e, 0x3e, 0x1f, 0xc, - - /* U+0419 "Й" */ - 0x63, 0x31, 0x8f, 0x83, 0x80, 0x6, 0x1f, 0x1f, - 0x8f, 0xc7, 0xe7, 0xf3, 0x79, 0xbd, 0x9e, 0xcf, - 0xe7, 0xe3, 0xf1, 0xf8, 0xf8, 0x60, - - /* U+041A "К" */ - 0xe1, 0xf8, 0x7e, 0x3b, 0x8e, 0xe7, 0x39, 0xcf, - 0xe3, 0xf8, 0xe7, 0x39, 0xce, 0x3b, 0x8e, 0xe1, - 0xf8, 0x70, - - /* U+041B "Л" */ - 0x3f, 0xcf, 0xf3, 0x9c, 0xe7, 0x39, 0xce, 0x73, - 0x9c, 0xe7, 0x39, 0xce, 0x73, 0x9d, 0xe7, 0xf1, - 0xf8, 0x70, - - /* U+041C "М" */ - 0xf3, 0xfc, 0xfd, 0x3f, 0xcf, 0xff, 0xff, 0xfe, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, - 0xf8, 0x70, - - /* U+041D "Н" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0xff, - 0xff, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+041E "О" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+041F "П" */ - 0xff, 0xff, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+0420 "Р" */ - 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, - 0xfb, 0xfc, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, - 0x38, 0x0, - - /* U+0421 "С" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x80, 0xe0, 0x38, 0xe, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0422 "Т" */ - 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, - 0x3, 0x80, - - /* U+0423 "У" */ - 0xe1, 0xf8, 0x76, 0x19, 0xce, 0x33, 0x8c, 0xc3, - 0xb0, 0x7c, 0x1e, 0x3, 0x80, 0xc0, 0x70, 0x1c, - 0x6, 0x0, - - /* U+0424 "Ф" */ - 0xc, 0xf, 0xc7, 0xfb, 0xb7, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0xb7, 0x7f, - 0x8f, 0xc0, 0xc0, 0x30, - - /* U+0425 "Х" */ - 0xe1, 0xd8, 0x67, 0x38, 0xcc, 0x3f, 0x7, 0x81, - 0xe0, 0x78, 0x1e, 0xf, 0xc3, 0x31, 0xce, 0xe1, - 0xf8, 0x70, - - /* U+0426 "Ц" */ - 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xe3, 0xb8, 0xee, - 0x3b, 0x8e, 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xff, - 0xff, 0xf0, 0x1c, 0x7, 0x1, 0xc0, - - /* U+0427 "Ч" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xff, 0x3f, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x1c, - - /* U+0428 "Ш" */ - 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xff, - 0xff, 0xf0, - - /* U+0429 "Щ" */ - 0xcc, 0xd9, 0x9b, 0x33, 0x66, 0x6c, 0xcd, 0x99, - 0xb3, 0x36, 0x66, 0xcc, 0xd9, 0x9b, 0x33, 0x66, - 0x6f, 0xff, 0xff, 0xc0, 0x18, 0x3, - - /* U+042A "Ъ" */ - 0xfc, 0xf, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x1, - 0xfc, 0x1f, 0xe1, 0xcf, 0x1c, 0x71, 0xc7, 0x1c, - 0x71, 0xcf, 0x1f, 0xe1, 0xfc, - - /* U+042B "Ы" */ - 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xfe, 0x3f, - 0xcf, 0x3b, 0xc6, 0xf1, 0xbc, 0x6f, 0x3b, 0xfc, - 0xfe, 0x30, - - /* U+042C "Ь" */ - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x3f, 0xcf, - 0xfb, 0x8f, 0xe1, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0x80, - - /* U+042D "Э" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x70, 0x38, 0x1c, 0x7e, - 0x3f, 0x3, 0x81, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+042E "Ю" */ - 0xc7, 0xb3, 0xfc, 0xcf, 0x33, 0xcc, 0xff, 0x3f, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcf, - 0xf1, 0xe0, - - /* U+042F "Я" */ - 0x3f, 0xdf, 0xff, 0x1f, 0x87, 0xe1, 0xfc, 0x77, - 0xfc, 0x7f, 0x19, 0xce, 0x73, 0x1d, 0xc7, 0x71, - 0xf8, 0x70, - - /* U+0430 "а" */ - 0x1f, 0x1f, 0xe7, 0x1c, 0x7, 0x3f, 0xdf, 0xfe, - 0x1f, 0x87, 0xe3, 0xff, 0xf3, 0xdc, - - /* U+0431 "б" */ - 0x1f, 0x3f, 0x9c, 0x1c, 0xe, 0xe7, 0xfb, 0x9f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfe, 0xf7, 0xf1, 0xf0, - - /* U+0432 "в" */ - 0xff, 0x3f, 0xee, 0x3b, 0x8e, 0xfe, 0x3f, 0xee, - 0x1f, 0x87, 0xe1, 0xff, 0xef, 0xf0, - - /* U+0433 "г" */ - 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, - - /* U+0434 "д" */ - 0x3f, 0xc7, 0xf8, 0xe7, 0x1c, 0xe3, 0x9c, 0x73, - 0x8e, 0x71, 0xce, 0x71, 0xdf, 0xff, 0xff, 0xf0, - 0x7e, 0xf, 0xc1, 0xc0, - - /* U+0435 "е" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7f, 0xff, 0xff, 0x81, - 0xc0, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0436 "ж" */ - 0xe6, 0x76, 0x66, 0x66, 0x63, 0x6c, 0x36, 0xc3, - 0xfc, 0x36, 0xc3, 0x6e, 0x66, 0x66, 0x66, 0xe6, - 0x70, - - /* U+0437 "з" */ - 0x3f, 0x1f, 0xfe, 0x1c, 0x7, 0x1f, 0x7, 0xe0, - 0x1c, 0x7, 0xe1, 0xdf, 0xe3, 0xf0, - - /* U+0438 "и" */ - 0xc3, 0xe3, 0xf1, 0xf9, 0xfc, 0xde, 0xef, 0x67, - 0xb3, 0xf1, 0xf8, 0xf8, 0x60, - - /* U+0439 "й" */ - 0x63, 0x31, 0x8f, 0x83, 0x80, 0x6, 0x1f, 0x1f, - 0x8f, 0xcf, 0xe6, 0xf7, 0x7b, 0x3f, 0x9f, 0x8f, - 0xc7, 0xc3, - - /* U+043A "к" */ - 0xe1, 0xf8, 0xee, 0x3b, 0x9c, 0xfe, 0x3f, 0x8e, - 0x73, 0x8c, 0xe3, 0xb8, 0x6e, 0x1c, - - /* U+043B "л" */ - 0x3f, 0xcf, 0xf3, 0x9c, 0xe7, 0x39, 0xce, 0x73, - 0x9c, 0xe7, 0x39, 0xfc, 0x7e, 0x1c, - - /* U+043C "м" */ - 0xe1, 0xf8, 0x7f, 0x3f, 0xcf, 0xda, 0xf7, 0xbd, - 0xef, 0x33, 0xc0, 0xf0, 0x3c, 0xc, - - /* U+043D "н" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7f, 0xff, 0xff, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - - /* U+043E "о" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+043F "п" */ - 0xff, 0xff, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - - /* U+0440 "р" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xff, 0xbb, 0x9c, 0xe, 0x7, 0x3, - 0x80, - - /* U+0441 "с" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x87, 0xf3, 0xdf, 0xe3, 0xf0, - - /* U+0442 "т" */ - 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, - - /* U+0443 "у" */ - 0xe0, 0xf8, 0x76, 0x19, 0xce, 0x73, 0x8c, 0xc3, - 0xf0, 0x7c, 0x1e, 0x7, 0x80, 0xe0, 0x30, 0x1c, - 0x6, 0x3, 0x80, - - /* U+0444 "ф" */ - 0xc, 0x3, 0x0, 0xc0, 0xfc, 0x7f, 0xbb, 0x7c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0xb7, 0x7f, - 0x8f, 0xc0, 0xc0, 0x30, 0xc, 0x3, 0x0, - - /* U+0445 "х" */ - 0xe1, 0xdc, 0xe3, 0x30, 0xfc, 0x1e, 0x7, 0x81, - 0xe0, 0xfc, 0x73, 0x9c, 0xee, 0x1c, - - /* U+0446 "ц" */ - 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xe3, 0xb8, 0xee, - 0x3b, 0x8e, 0xe3, 0xbf, 0xff, 0xfc, 0x7, 0x1, - 0xc0, 0x70, - - /* U+0447 "ч" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0xfd, 0xfe, - 0x7, 0x3, 0x81, 0xc0, 0xe0, - - /* U+0448 "ш" */ - 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xff, 0xff, 0xfc, - - /* U+0449 "щ" */ - 0xcc, 0xd9, 0x9b, 0x33, 0x66, 0x6c, 0xcd, 0x99, - 0xb3, 0x36, 0x66, 0xcc, 0xdf, 0xff, 0xff, 0x80, - 0x30, 0x6, - - /* U+044A "ъ" */ - 0xfc, 0xf, 0xc0, 0x1c, 0x1, 0xc0, 0x1f, 0xc1, - 0xfe, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xfe, 0x1f, - 0xc0, - - /* U+044B "ы" */ - 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xf8, 0xff, 0x3c, - 0xef, 0x1b, 0xc6, 0xff, 0x3f, 0x8c, - - /* U+044C "ь" */ - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xff, 0x3f, 0xee, - 0x1f, 0x87, 0xe1, 0xff, 0xef, 0xf0, - - /* U+044D "э" */ - 0x1f, 0x1f, 0xe6, 0x3c, 0x7, 0xf, 0xc3, 0xf0, - 0x1d, 0x87, 0x73, 0xdf, 0xe1, 0xf0, - - /* U+044E "ю" */ - 0xc7, 0xb3, 0xfc, 0xcf, 0x33, 0xfc, 0xff, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0xfc, 0x78, - - /* U+044F "я" */ - 0x3f, 0xbf, 0xf8, 0xfc, 0x7e, 0x3b, 0xfc, 0xfe, - 0x77, 0x33, 0xb9, 0xf8, 0xe0, - - /* U+F001 "" */ - 0x0, 0x0, 0x70, 0x0, 0x7f, 0x0, 0x3f, 0xf0, - 0x1f, 0xff, 0x7, 0xff, 0xf0, 0x7f, 0xff, 0x7, - 0xfc, 0x70, 0x7e, 0x7, 0x7, 0x0, 0x70, 0x70, - 0x7, 0x7, 0x0, 0x70, 0x70, 0x7, 0x7, 0x0, - 0x70, 0x70, 0x7f, 0x7, 0xf, 0xf7, 0xf0, 0xff, - 0xff, 0x7, 0xef, 0xf0, 0x10, 0xff, 0x0, 0x3, - 0xc0, 0x0, - - /* U+F015 "" */ - 0x0, 0x38, 0xe0, 0x0, 0xf9, 0xc0, 0x3, 0xfb, - 0x80, 0x1e, 0x3f, 0x0, 0x79, 0x3e, 0x1, 0xe7, - 0x3c, 0xf, 0x9f, 0xbc, 0x3c, 0xff, 0x9e, 0xf3, - 0xff, 0x9e, 0xcf, 0xff, 0x98, 0x3f, 0xff, 0x80, - 0x7f, 0xff, 0x0, 0xfc, 0x7e, 0x1, 0xf8, 0xfc, - 0x3, 0xf1, 0xf8, 0x7, 0xe3, 0xf0, 0xf, 0xc7, - 0xe0, - - /* U+F017 "" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0x7f, 0xfc, 0x1f, - 0xff, 0xc7, 0xf1, 0xfc, 0xfe, 0x3f, 0x9f, 0xc7, - 0xf7, 0xf8, 0xff, 0xff, 0x1f, 0xff, 0xe3, 0xff, - 0xfc, 0x3f, 0xff, 0x83, 0xff, 0xfc, 0x7e, 0xff, - 0xcf, 0x9f, 0xff, 0xf1, 0xff, 0xfc, 0x1f, 0xff, - 0x1, 0xff, 0xc0, 0x1f, 0xf0, 0x0, 0x70, 0x0, - - /* U+F024 "" */ - 0x70, 0x0, 0xf, 0x80, 0x0, 0xf9, 0x0, 0xf, - 0xff, 0xf, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0x7f, - 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xf7, 0xff, - 0xff, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, - 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xe7, 0x0, 0xf8, - 0x70, 0x0, 0x7, 0x0, 0x0, 0x70, 0x0, 0x7, - 0x0, 0x0, - - /* U+F027 "" */ - 0x0, 0xc0, 0x3, 0x80, 0xf, 0x0, 0x3e, 0xf, - 0xfc, 0x9f, 0xf9, 0xbf, 0xf1, 0xff, 0xe3, 0xff, - 0xc7, 0xff, 0x9b, 0xff, 0x20, 0x3e, 0x0, 0x3c, - 0x0, 0x38, 0x0, 0x30, 0x0, - - /* U+F028 "" */ - 0x0, 0x0, 0x40, 0x0, 0x0, 0xc0, 0x3, 0x0, - 0xc0, 0xe, 0x18, 0xc0, 0x3c, 0x39, 0xc0, 0xf8, - 0x39, 0xbf, 0xf2, 0x33, 0xff, 0xe6, 0x33, 0xff, - 0xc6, 0x67, 0xff, 0x8c, 0xcf, 0xff, 0x19, 0x9f, - 0xfe, 0x63, 0x3f, 0xfc, 0x8c, 0xe0, 0xf8, 0x39, - 0x80, 0xf0, 0xe7, 0x0, 0xe1, 0x8c, 0x0, 0xc0, - 0x30, 0x0, 0x0, 0xc0, 0x0, 0x1, 0x0, - - /* U+F029 "" */ - 0xff, 0x3f, 0xff, 0xcf, 0xfe, 0x73, 0x9f, 0x9c, - 0xe7, 0xe7, 0x39, 0xff, 0xcf, 0xff, 0xf3, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf3, - 0xcf, 0xfc, 0xff, 0xff, 0x3f, 0xf9, 0xcf, 0xfe, - 0x73, 0xbf, 0xfc, 0xe0, 0xff, 0x3a, 0xc0, - - /* U+F03A "" */ - 0xf0, 0x0, 0xf, 0x3f, 0xff, 0xf3, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0x0, 0x0, 0xf3, 0xff, 0xff, 0x3f, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0x0, 0x0, 0xf3, 0xff, 0xff, 0x3f, 0xff, - 0xf0, 0x0, 0x0, - - /* U+F048 "" */ - 0xe0, 0x3f, 0x3, 0xf8, 0x3f, 0xc3, 0xfe, 0x3f, - 0xf3, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfb, 0xff, 0xcf, 0xfe, 0x3f, 0xf0, 0xff, 0x83, - 0xfc, 0xf, 0xe0, 0x38, - - /* U+F04B "" */ - 0x0, 0x0, 0x3c, 0x0, 0xf, 0xc0, 0x3, 0xfc, - 0x0, 0xff, 0x80, 0x3f, 0xf8, 0xf, 0xff, 0x83, - 0xff, 0xf8, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x8f, - 0xff, 0x83, 0xff, 0x80, 0xff, 0x80, 0x3f, 0xc0, - 0xf, 0xc0, 0x3, 0xc0, 0x0, 0x0, 0x0, 0x0, - - /* U+F04C "" */ - 0x7e, 0x1f, 0xbf, 0xcf, 0xff, 0xf3, 0xff, 0xfc, - 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf3, 0xff, - 0xfc, 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf3, - 0xff, 0xfc, 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, - 0xf3, 0xff, 0xfc, 0xff, 0x7e, 0x1f, 0x80, - - /* U+F04D "" */ - 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x80, - - /* U+F051 "" */ - 0xe0, 0x3f, 0x81, 0xfe, 0xf, 0xf8, 0x7f, 0xe3, - 0xff, 0x9f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xef, 0xfe, 0x7f, 0xe3, 0xfe, 0x1f, 0xe0, - 0xfe, 0x7, 0xe0, 0x38, - - /* U+F069 "" */ - 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, - 0x70, 0x6, 0xe, 0xc, 0xf1, 0xc7, 0x9f, 0xbb, - 0xf1, 0xff, 0xfc, 0xf, 0xfe, 0x0, 0x7f, 0x0, - 0xf, 0xe0, 0x7, 0xff, 0x3, 0xff, 0xf8, 0xfd, - 0xdf, 0x9e, 0x38, 0xf3, 0x7, 0x6, 0x0, 0xe0, - 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0x70, 0x0, - - /* U+F06E "" */ - 0x0, 0xfe, 0x0, 0xf, 0xff, 0x80, 0x3e, 0xf, - 0x80, 0xf8, 0xf, 0x83, 0xe3, 0x8f, 0x8f, 0x87, - 0x8f, 0xbf, 0x1f, 0x9f, 0xfe, 0xff, 0x3f, 0xfd, - 0xfe, 0x7e, 0xf9, 0xf8, 0xf8, 0xf9, 0xe3, 0xe0, - 0xf8, 0xf, 0x80, 0xf8, 0x3e, 0x0, 0xff, 0xf0, - 0x0, 0x3f, 0x80, 0x0, - - /* U+F095 "" */ - 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7, 0xf0, - 0x0, 0x7f, 0x0, 0x7, 0xf0, 0x0, 0xff, 0x0, - 0x7, 0xf0, 0x0, 0x3e, 0x0, 0x1, 0xe0, 0x0, - 0x3e, 0x0, 0x3, 0xc0, 0x0, 0x7c, 0x0, 0xf, - 0x81, 0xc1, 0xf0, 0x7e, 0x3e, 0xf, 0xff, 0xc0, - 0xff, 0xf8, 0xf, 0xff, 0x0, 0x7f, 0xc0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0x0, - - /* U+F129 "" */ - 0x3c, 0x7e, 0x7e, 0x7e, 0x3c, 0x0, 0x0, 0xfc, - 0xfc, 0xfc, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, - 0xff, 0xff, 0xff, - - /* U+F185 "" */ - 0x0, 0x60, 0x0, 0x6, 0x0, 0x0, 0xf0, 0x1, - 0xcf, 0x38, 0x1f, 0xff, 0x81, 0xf0, 0xf8, 0xc, - 0xf3, 0x1, 0xdf, 0xb8, 0x7b, 0xfd, 0xef, 0xbf, - 0xdf, 0x7b, 0xfd, 0xe1, 0x9f, 0x98, 0xc, 0xf3, - 0x0, 0xc0, 0x30, 0x1f, 0xf, 0x81, 0xff, 0xf8, - 0x1c, 0xf3, 0x80, 0xf, 0x0, 0x0, 0x60, 0x0, - 0x6, 0x0, - - /* U+F1E6 "" */ - 0x18, 0x30, 0x70, 0x70, 0xe0, 0xe1, 0xc1, 0xc3, - 0x83, 0x80, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x7f, - 0xfc, 0xff, 0xf9, 0xff, 0xf1, 0xff, 0xc3, 0xff, - 0x83, 0xfe, 0x3, 0xf8, 0x1, 0xc0, 0x3, 0x80, - 0x7, 0x0, 0xe, 0x0, - - /* U+F1FC "" */ - 0x0, 0x0, 0xf0, 0x0, 0x1f, 0x0, 0x3, 0xf0, - 0x0, 0x7e, 0x0, 0xf, 0xe0, 0x3, 0xfc, 0x0, - 0x7f, 0xc0, 0xf, 0xf8, 0x0, 0xff, 0x80, 0x1f, - 0xf0, 0x0, 0xfe, 0x0, 0xf, 0xe0, 0xe, 0x7c, - 0x1, 0xf8, 0x0, 0x9f, 0xc0, 0xf, 0xfc, 0x0, - 0x7f, 0xc0, 0x7, 0xf8, 0x0, 0x1f, 0x0, 0x0, - - /* U+F201 "" */ - 0x40, 0x0, 0x7, 0x0, 0x0, 0x38, 0x1, 0xf9, - 0xc0, 0x7, 0xce, 0x18, 0x1e, 0x71, 0xe1, 0xf3, - 0x9f, 0x9d, 0x9d, 0xff, 0xc4, 0xe6, 0x7c, 0x7, - 0x1, 0xc0, 0x38, 0x0, 0x1, 0xc0, 0x0, 0xe, - 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe0, - - /* U+F21E "" */ - 0x1e, 0x7, 0x83, 0xf9, 0xfe, 0x7f, 0xff, 0xef, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfc, - 0xf7, 0xf7, 0xd6, 0x3e, 0x79, 0x6b, 0xe0, 0x34, - 0x80, 0x1f, 0x9f, 0x80, 0xf9, 0xf0, 0x7, 0xfe, - 0x0, 0x3f, 0xc0, 0x1, 0xf8, 0x0, 0xf, 0x0, - 0x0, 0x60, 0x0, - - /* U+F240 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0x7f, - 0x7f, 0xff, 0x9f, 0xbf, 0xff, 0xcf, 0xdf, 0xff, - 0xef, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F241 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xff, 0xe0, 0xfe, 0xff, 0xf0, 0x7f, - 0x7f, 0xf8, 0x1f, 0xbf, 0xfc, 0xf, 0xdf, 0xfe, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F242 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xfe, 0x0, 0xfe, 0xff, 0x0, 0x7f, - 0x7f, 0x80, 0x1f, 0xbf, 0xc0, 0xf, 0xdf, 0xe0, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F243 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xf0, 0x0, 0xfe, 0xf8, 0x0, 0x7f, - 0x7c, 0x0, 0x1f, 0xbe, 0x0, 0xf, 0xdf, 0x0, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F244 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x1f, 0x80, 0x0, 0xf, 0xc0, 0x0, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F252 "" */ - 0xff, 0xff, 0xff, 0xfd, 0x80, 0x33, 0x80, 0xe7, - 0xff, 0xc7, 0xff, 0xf, 0xfe, 0xf, 0xf8, 0xf, - 0xe0, 0xf, 0x80, 0x7f, 0xc0, 0xe3, 0x83, 0x83, - 0x86, 0x3, 0x1f, 0xff, 0x3f, 0xfe, 0x7f, 0xfd, - 0xff, 0xff, 0xff, 0xf8, - - /* U+F293 "" */ - 0x7, 0xe0, 0x3f, 0xe0, 0xfb, 0xe3, 0xf3, 0xe7, - 0xe3, 0xdf, 0xd3, 0xf9, 0xb3, 0xf9, 0x4f, 0xf8, - 0x3f, 0xf8, 0xff, 0xf1, 0xff, 0xc1, 0xff, 0x29, - 0xfc, 0xd9, 0xff, 0xa7, 0xbf, 0x1e, 0x7e, 0x7c, - 0x7d, 0xf0, 0x7f, 0xe0, 0x7f, 0x0, - - /* U+F294 "" */ - 0x0, 0x0, 0x80, 0x18, 0x3, 0x80, 0x78, 0x8d, - 0xb9, 0x9b, 0xb6, 0x3f, 0x83, 0xe0, 0x38, 0x7, - 0x81, 0xf8, 0x6d, 0x99, 0x9a, 0x36, 0x7, 0x80, - 0xe0, 0x18, 0x2, 0x0, 0x0, - - /* U+F2F2 "" */ - 0x7, 0xe0, 0x7, 0xe0, 0x1, 0x80, 0x3, 0xc0, - 0xf, 0xf2, 0x1f, 0xff, 0x3e, 0x7e, 0x7e, 0x7e, - 0xfe, 0x7e, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, - 0xfe, 0x7f, 0xff, 0xff, 0x7f, 0xfe, 0x7f, 0xfe, - 0x3f, 0xfc, 0x1f, 0xf8, 0x7, 0xe0, - - /* U+F3DD "" */ - 0x40, 0x0, 0x40, 0x70, 0x0, 0x7e, 0x3c, 0x0, - 0x3f, 0x8f, 0x80, 0x1f, 0x81, 0xe0, 0x1f, 0xc0, - 0x78, 0xf, 0xe0, 0x1e, 0x7, 0xf0, 0x3, 0xc1, - 0xf8, 0x0, 0xf0, 0x78, 0x0, 0x3c, 0x3c, 0x0, - 0xf, 0xbe, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x7e, - 0x0, 0x1c, 0x1f, 0x0, 0x7f, 0x3, 0xc0, 0x3f, - 0xf0, 0xf0, 0x1f, 0xfc, 0x3c, 0xf, 0xfe, 0x7, - 0x87, 0xfe, 0x1, 0xe3, 0xf8, 0x0, 0x70, 0x80, - 0x0, 0x10, - - /* U+F3FD "" */ - 0x0, 0xfe, 0x0, 0x7, 0xff, 0x0, 0x3f, 0xbf, - 0x80, 0xfe, 0x2f, 0x83, 0xfe, 0xcf, 0x8f, 0x3f, - 0x27, 0x9e, 0x7e, 0x4f, 0x3f, 0xfc, 0xfe, 0xff, - 0xf3, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xcf, 0xff, - 0xfe, 0x3f, 0xfe, 0x78, 0x3c, 0xff, 0xf0, 0x7f, - 0xdf, 0xe0, 0xff, 0x3f, 0xff, 0xfe, 0x3f, 0xff, - 0xf8, - - /* U+F45D "" */ - 0x0, 0x10, 0x0, 0xf, 0xe0, 0x3, 0xff, 0x80, - 0x7f, 0xfc, 0xf, 0xff, 0xe0, 0xff, 0xfe, 0x7, - 0xff, 0xe2, 0x3f, 0xff, 0x31, 0xff, 0xf3, 0x8f, - 0xff, 0x3e, 0x7f, 0xf3, 0xf3, 0xc2, 0x1f, 0x90, - 0x0, 0xfc, 0x3c, 0x1f, 0xe7, 0xe3, 0xfe, 0xff, - 0x7e, 0xef, 0xff, 0xc6, 0xff, 0x78, 0x7, 0xe3, - 0x0, 0x3c, - - /* U+F54B "" */ - 0x0, 0xf, 0xf8, 0x1, 0xdf, 0xff, 0x1, 0xef, - 0xff, 0xc0, 0xf7, 0xff, 0xf0, 0x7b, 0xff, 0xf8, - 0x1d, 0xff, 0xfc, 0x0, 0x1f, 0xfc, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0xf, 0xfe, - 0x3, 0xbf, 0xff, 0x83, 0xdf, 0xff, 0xc1, 0xef, - 0xff, 0xe0, 0xf7, 0xff, 0xe0, 0x3b, 0xff, 0xe0, - 0x0, 0x7f, 0xc0, 0x0, - - /* U+F560 "" */ - 0x0, 0x0, 0x0, 0x0, 0x60, 0x0, 0xf, 0x0, - 0x1, 0xf0, 0x8, 0x3e, 0x1, 0xc7, 0xc4, 0x1e, - 0xf8, 0xe1, 0xff, 0x1f, 0xf, 0xe3, 0xf0, 0x7c, - 0x7e, 0x23, 0x8f, 0xc7, 0x11, 0xf8, 0xf8, 0x3f, - 0xf, 0xc7, 0xe0, 0x7e, 0xfc, 0x3, 0xff, 0x80, - 0x1f, 0xf0, 0x0, 0xfe, 0x0, 0x7, 0xc0, 0x0, - 0x38, 0x0, 0x1, 0x0, 0x0, - - /* U+F569 "" */ - 0x0, 0x0, 0x4, 0x0, 0x0, 0x3c, 0x0, 0x0, - 0xf0, 0x0, 0x7, 0xc0, 0x1f, 0xfe, 0x3, 0xff, - 0xfe, 0xf, 0x87, 0xfe, 0x38, 0x3e, 0xe, 0xc0, - 0xf8, 0x7, 0x81, 0xc0, 0xf, 0x0, 0x0, 0x1f, - 0x80, 0x0, 0xff, 0xe0, 0xf, 0xff, 0xff, 0xff, - 0xf9, 0xff, 0xf3, 0xf3, 0xe3, 0xe7, 0xe7, 0xc7, - 0xce, 0xcf, 0x8f, 0x98, 0x9f, 0x1f, 0x20, 0x3e, - 0x3e, 0x0, 0x4, 0x60, 0x0, - - /* U+F59F "" */ - 0x0, 0x78, 0x0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, - 0x0, 0xff, 0xc0, 0x3, 0xff, 0x0, 0xf, 0xfc, - 0x0, 0x3f, 0xf0, 0x47, 0x7f, 0x87, 0x7d, 0xfe, - 0x7f, 0xf3, 0xf3, 0xff, 0xc7, 0x8f, 0xff, 0x5c, - 0xbf, 0xfd, 0xb6, 0xff, 0xf6, 0x1b, 0xff, 0xdf, - 0xef, 0xff, 0x7f, 0xbf, 0xfd, 0xfe, 0xff, 0xf7, - 0xfb, 0xff, 0x3, 0xef, 0x30, 0x1, 0xb0, - - /* U+F5A0 "" */ - 0x0, 0x78, 0x0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, - 0x0, 0xf3, 0xc0, 0x3, 0x87, 0x0, 0xf, 0x3c, - 0x0, 0x9f, 0xe1, 0xcf, 0x7f, 0x9f, 0xfc, 0xfc, - 0xff, 0xf1, 0xe3, 0xff, 0xd7, 0xaf, 0xff, 0x4d, - 0xbf, 0xfd, 0x86, 0xff, 0xf7, 0xfb, 0xff, 0xdf, - 0xef, 0xff, 0x7f, 0xbf, 0xfd, 0xfe, 0xff, 0xc0, - 0xfb, 0xcc, 0x0, 0x6c, 0x0, - - /* U+F6A9 "" */ - 0x0, 0xc0, 0x0, 0x1c, 0x0, 0x3, 0xc0, 0x0, - 0x7c, 0x0, 0xff, 0xc6, 0x2f, 0xfc, 0x77, 0xff, - 0xc7, 0xef, 0xfc, 0x3c, 0xff, 0xc7, 0xef, 0xfc, - 0x77, 0xff, 0xc6, 0x20, 0x7c, 0x0, 0x3, 0xc0, - 0x0, 0x1c, 0x0, 0x0, 0xc0, 0x0 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 192, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1, .adv_w = 192, .box_w = 3, .box_h = 14, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 7, .adv_w = 192, .box_w = 7, .box_h = 6, .ofs_x = 3, .ofs_y = 8}, - {.bitmap_index = 13, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 33, .adv_w = 192, .box_w = 10, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 58, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 79, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 99, .adv_w = 192, .box_w = 3, .box_h = 6, .ofs_x = 5, .ofs_y = 8}, - {.bitmap_index = 102, .adv_w = 192, .box_w = 7, .box_h = 19, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 119, .adv_w = 192, .box_w = 7, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 136, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 149, .adv_w = 192, .box_w = 10, .box_h = 9, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 161, .adv_w = 192, .box_w = 5, .box_h = 6, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 165, .adv_w = 192, .box_w = 6, .box_h = 2, .ofs_x = 3, .ofs_y = 5}, - {.bitmap_index = 167, .adv_w = 192, .box_w = 4, .box_h = 3, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 169, .adv_w = 192, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 193, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 211, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 227, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 243, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 261, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 277, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 295, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 313, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 331, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 349, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 367, .adv_w = 192, .box_w = 3, .box_h = 11, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 372, .adv_w = 192, .box_w = 5, .box_h = 15, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 382, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 395, .adv_w = 192, .box_w = 9, .box_h = 7, .ofs_x = 2, .ofs_y = 3}, - {.bitmap_index = 403, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 416, .adv_w = 192, .box_w = 8, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 430, .adv_w = 192, .box_w = 11, .box_h = 18, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 455, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 473, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 491, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 509, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 525, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 541, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 557, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 575, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 591, .adv_w = 192, .box_w = 8, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 605, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 623, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 641, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 657, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 675, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 691, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 707, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 725, .adv_w = 192, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 748, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 766, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 784, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 802, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 818, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 836, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 856, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 874, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 894, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 910, .adv_w = 192, .box_w = 6, .box_h = 18, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 924, .adv_w = 192, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 948, .adv_w = 192, .box_w = 6, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 962, .adv_w = 192, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 7}, - {.bitmap_index = 972, .adv_w = 192, .box_w = 10, .box_h = 2, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 975, .adv_w = 192, .box_w = 5, .box_h = 3, .ofs_x = 3, .ofs_y = 13}, - {.bitmap_index = 977, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 991, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1007, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1021, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1037, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1050, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1068, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1085, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1101, .adv_w = 192, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1121, .adv_w = 192, .box_w = 8, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1140, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1158, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1178, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1192, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1205, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1218, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 1235, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1252, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1265, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1279, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1297, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1310, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1324, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1341, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1355, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1374, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1387, .adv_w = 192, .box_w = 9, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 1408, .adv_w = 192, .box_w = 3, .box_h = 18, .ofs_x = 5, .ofs_y = -2}, - {.bitmap_index = 1415, .adv_w = 192, .box_w = 9, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 1436, .adv_w = 192, .box_w = 10, .box_h = 5, .ofs_x = 1, .ofs_y = 5}, - {.bitmap_index = 1443, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1461, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1479, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1497, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1513, .adv_w = 192, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 1537, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1553, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1574, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1592, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1608, .adv_w = 192, .box_w = 9, .box_h = 19, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1630, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1648, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1666, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1684, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1700, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1716, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1732, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1750, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1768, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1786, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1804, .adv_w = 192, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 1824, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1842, .adv_w = 192, .box_w = 10, .box_h = 17, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 1864, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1880, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1898, .adv_w = 192, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 1920, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1941, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1959, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1977, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1993, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2011, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2029, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2043, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2059, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2073, .adv_w = 192, .box_w = 8, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2084, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2104, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2117, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2134, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2148, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2161, .adv_w = 192, .box_w = 9, .box_h = 16, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2179, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2193, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2207, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2221, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2234, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2247, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2260, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 2277, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2291, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2305, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 2324, .adv_w = 192, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 2347, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2361, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 2379, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2392, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2406, .adv_w = 192, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 2424, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2441, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2455, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2469, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2483, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2497, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2510, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2560, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2609, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2657, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2707, .adv_w = 240, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2736, .adv_w = 360, .box_w = 23, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 2791, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2830, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2873, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2901, .adv_w = 280, .box_w = 18, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2949, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2988, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3027, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3055, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3103, .adv_w = 360, .box_w = 23, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 3147, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3200, .adv_w = 120, .box_w = 8, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3219, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3269, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3305, .adv_w = 320, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3353, .adv_w = 320, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 3393, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3436, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3474, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3512, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3550, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3588, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3626, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3662, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 3700, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3729, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3767, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3833, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3882, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3932, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3992, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 4045, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 4106, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4161, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4214, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - -static const uint16_t unicode_list_2[] = { - 0x0, 0x14, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39, - 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x6d, 0x94, - 0x128, 0x184, 0x1e5, 0x1fb, 0x200, 0x21d, 0x23f, 0x240, - 0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2f1, 0x3dc, - 0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f, 0x6a8 -}; - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 32, .range_length = 95, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 1040, .range_length = 64, .glyph_id_start = 96, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 61441, .range_length = 1705, .glyph_id_start = 160, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 3, - .bpp = 1, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t jetbrains_mono_bold_20 = { -#else -lv_font_t jetbrains_mono_bold_20 = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 23, /*The maximum line height required by the font*/ - .base_line = 4, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = -3, - .underline_thickness = 1, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_BOLD_20*/ - diff --git a/src/displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch b/src/displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch new file mode 100644 index 0000000..ecb9966 --- /dev/null +++ b/src/displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch @@ -0,0 +1,6 @@ +91,92c91,92 +< 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, +< 0xdf, 0xf7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, +--- +> 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, +> 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, diff --git a/src/displayapp/fonts/jetbrains_mono_extrabold_compressed.c b/src/displayapp/fonts/jetbrains_mono_extrabold_compressed.c deleted file mode 100644 index ab0a5c4..0000000 --- a/src/displayapp/fonts/jetbrains_mono_extrabold_compressed.c +++ /dev/null @@ -1,523 +0,0 @@ -/******************************************************************************* - * Size: 80 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_EXTRABOLD_COMPRESSED -#define JETBRAINS_MONO_EXTRABOLD_COMPRESSED 1 -#endif - -#if JETBRAINS_MONO_EXTRABOLD_COMPRESSED - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0030 "0" */ - 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, - 0xe0, 0x0, 0x1, 0xff, 0xff, 0xf0, 0x0, 0xf, - 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xf8, - 0x0, 0xff, 0xff, 0xff, 0xf8, 0x3, 0xff, 0xff, - 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0xf8, 0x3f, - 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, - 0xf1, 0xff, 0xfc, 0x7, 0xff, 0xf3, 0xff, 0xe0, - 0x3, 0xff, 0xe7, 0xff, 0x80, 0x3, 0xff, 0xdf, - 0xfe, 0x0, 0x3, 0xff, 0xff, 0xfc, 0x0, 0x3, - 0xff, 0xff, 0xf0, 0x0, 0x7, 0xff, 0xff, 0xe0, - 0x0, 0xf, 0xff, 0xff, 0xc0, 0x0, 0x1f, 0xff, - 0xff, 0x80, 0x0, 0x3f, 0xff, 0xff, 0x0, 0x0, - 0x7f, 0xff, 0xfe, 0x0, 0x0, 0xff, 0xff, 0xfc, - 0x0, 0x1, 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, - 0xff, 0xf0, 0x0, 0x7, 0xff, 0xff, 0xe0, 0x7c, - 0xf, 0xff, 0xff, 0xc1, 0xfe, 0x1f, 0xff, 0xff, - 0x87, 0xfc, 0x3f, 0xff, 0xff, 0x1f, 0xfc, 0x7f, - 0xff, 0xfe, 0x3f, 0xf8, 0xff, 0xff, 0xfc, 0x7f, - 0xf1, 0xff, 0xff, 0xf8, 0xff, 0xe3, 0xff, 0xff, - 0xf1, 0xff, 0xc7, 0xff, 0xff, 0xe1, 0xff, 0xf, - 0xff, 0xff, 0xc1, 0xfc, 0x1f, 0xff, 0xff, 0x81, - 0xf0, 0x3f, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, - 0xfe, 0x0, 0x0, 0xff, 0xff, 0xfc, 0x0, 0x1, - 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, 0xff, 0xf0, - 0x0, 0x7, 0xff, 0xff, 0xe0, 0x0, 0xf, 0xff, - 0xff, 0xc0, 0x0, 0x1f, 0xff, 0xff, 0x80, 0x0, - 0x3f, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xfe, - 0x0, 0x0, 0xff, 0xff, 0xfe, 0x0, 0x1, 0xff, - 0xff, 0xfc, 0x0, 0x7, 0xff, 0xbf, 0xfc, 0x0, - 0x1f, 0xfe, 0x7f, 0xfc, 0x0, 0x7f, 0xfc, 0xff, - 0xfe, 0x3, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, - 0xe1, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, - 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xfc, 0x1, - 0xff, 0xff, 0xff, 0xf0, 0x1, 0xff, 0xff, 0xff, - 0xc0, 0x1, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, - 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xff, 0xc0, 0x0, - 0x0, 0x1f, 0xfc, 0x0, 0x0, - - /* U+0031 "1" */ - 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, 0x1f, - 0xff, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, - 0x7, 0xff, 0xff, 0x80, 0x0, 0x7f, 0xff, 0xfe, - 0x0, 0x3, 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, - 0xff, 0xe0, 0x1, 0xff, 0xff, 0xff, 0x80, 0xf, - 0xff, 0xff, 0xfe, 0x0, 0x3f, 0xff, 0xff, 0xf8, - 0x0, 0xff, 0xfd, 0xff, 0xe0, 0x3, 0xff, 0xc7, - 0xff, 0x80, 0xf, 0xfe, 0x1f, 0xfe, 0x0, 0x3f, - 0xe0, 0x7f, 0xf8, 0x0, 0xff, 0x1, 0xff, 0xe0, - 0x3, 0xf8, 0x7, 0xff, 0x80, 0xf, 0x80, 0x1f, - 0xfe, 0x0, 0x3c, 0x0, 0x7f, 0xf8, 0x0, 0xe0, - 0x1, 0xff, 0xe0, 0x2, 0x0, 0x7, 0xff, 0x80, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, - 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, - 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, 0x0, - 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, - 0xe0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, - 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, - 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7, 0xff, - 0x80, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, - 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, - 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, - 0xff, 0xe0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xf8, - 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7, - 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0xf8, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xc0, - - /* U+0032 "2" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, - 0xe0, 0x0, 0x1, 0xff, 0xff, 0xf8, 0x0, 0xf, - 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xf8, - 0x0, 0xff, 0xff, 0xff, 0xfc, 0x3, 0xff, 0xff, - 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0xf8, 0x1f, - 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, - 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xfc, - 0xf, 0xff, 0xe7, 0xff, 0xe0, 0xf, 0xff, 0xcf, - 0xff, 0x80, 0xf, 0xff, 0xff, 0xfe, 0x0, 0xf, - 0xff, 0xff, 0xfc, 0x0, 0x1f, 0xff, 0xff, 0xf0, - 0x0, 0x1f, 0xff, 0xff, 0xe0, 0x0, 0x3f, 0xff, - 0xff, 0xc0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x0, - 0xff, 0xf0, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, - 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, - 0x0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0xfc, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0xf, 0xff, - 0xc0, 0x0, 0x0, 0x3f, 0xff, 0x0, 0x0, 0x0, - 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x0, - 0x0, 0xf, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x3, - 0xff, 0xfc, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0xff, 0xff, - 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0xf, - 0xff, 0xf0, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, - 0x0, 0xff, 0xff, 0x0, 0x0, 0x3, 0xff, 0xf8, - 0x0, 0x0, 0xf, 0xff, 0xe0, 0x0, 0x0, 0x3f, - 0xff, 0x80, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, - 0x3, 0xff, 0xf8, 0x0, 0x0, 0xf, 0xff, 0xe0, - 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x0, 0xff, - 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, - 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, - 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfb, - 0xff, 0xff, 0xff, 0xff, 0xf0, - - /* U+0033 "3" */ - 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, - 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xe0, 0xff, - 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, - 0x83, 0xff, 0xff, 0xff, 0xff, 0x7, 0xff, 0xff, - 0xff, 0xfe, 0xf, 0xff, 0xff, 0xff, 0xfc, 0x1f, - 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, - 0xf0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, - 0xf, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0, - 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, - 0xc0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, - 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, - 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, - 0xff, 0xf8, 0x0, 0x0, 0x3, 0xff, 0xfe, 0x0, - 0x0, 0x7, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, - 0xff, 0x80, 0x0, 0x1f, 0xff, 0xff, 0x80, 0x0, - 0x3f, 0xff, 0xff, 0x80, 0x0, 0x7f, 0xff, 0xff, - 0x80, 0x0, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0x0, 0x3, 0xff, 0xff, 0xff, 0x0, - 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x7f, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x3, - 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, 0x1f, 0xfe, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xc0, 0x0, - 0x7f, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, - 0x0, 0x1, 0xff, 0xff, 0xff, 0x0, 0x7, 0xff, - 0xff, 0xfe, 0x0, 0xf, 0xff, 0xbf, 0xfe, 0x0, - 0x3f, 0xfe, 0x7f, 0xff, 0x1, 0xff, 0xfc, 0xff, - 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, - 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xfc, 0x1, - 0xff, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff, - 0x80, 0x0, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, - 0xff, 0xf0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, - - /* U+0034 "4" */ - 0x0, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, 0x1f, - 0xff, 0x80, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, - 0x3, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, - 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, - 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, 0xff, 0xfc, - 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x0, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x0, - 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, - 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x0, 0x3f, 0xff, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, 0x3f, - 0xff, 0x0, 0xff, 0xf0, 0xff, 0xf8, 0x3, 0xff, - 0xc7, 0xff, 0xc0, 0xf, 0xff, 0x3f, 0xff, 0x0, - 0x3f, 0xfd, 0xff, 0xf8, 0x0, 0xff, 0xf7, 0xff, - 0xc0, 0x3, 0xff, 0xff, 0xfe, 0x0, 0xf, 0xff, - 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xc0, 0x0, - 0xff, 0xff, 0xfe, 0x0, 0x3, 0xff, 0xff, 0xf8, - 0x0, 0xf, 0xff, 0xff, 0xe0, 0x0, 0x3f, 0xff, - 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x3f, - 0xfc, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, - 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, 0x0, - 0x0, 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0xff, - 0xf0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, - 0xf, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0, - 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, - 0xc0, - - /* U+0035 "5" */ - 0x7f, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, - 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, - 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xf1, - 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, - 0xff, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, - 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xc7, - 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, - 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, - 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, - 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7, 0xff, 0x80, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, - 0xf8, 0x1f, 0xf0, 0x1, 0xff, 0xe1, 0xff, 0xf0, - 0x7, 0xff, 0x9f, 0xff, 0xf0, 0x1f, 0xfe, 0xff, - 0xff, 0xe0, 0x7f, 0xfb, 0xff, 0xff, 0xc1, 0xff, - 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, - 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, - 0xf0, 0x3f, 0xff, 0x9f, 0xff, 0x0, 0x3f, 0xfe, - 0x7f, 0xf8, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x1, - 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, - 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xfc, - 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, - 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, - 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, - 0xff, 0xff, 0xf0, 0x0, 0x3f, 0xff, 0xff, 0xc0, - 0x0, 0xff, 0xff, 0xff, 0x0, 0x7, 0xff, 0xff, - 0xfe, 0x0, 0x1f, 0xfe, 0xff, 0xfc, 0x0, 0xff, - 0xf9, 0xff, 0xfc, 0xf, 0xff, 0xe7, 0xff, 0xff, - 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xfc, 0x3f, - 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, - 0x80, 0xff, 0xff, 0xff, 0xfc, 0x1, 0xff, 0xff, - 0xff, 0xe0, 0x3, 0xff, 0xff, 0xfe, 0x0, 0x3, - 0xff, 0xff, 0xf0, 0x0, 0x3, 0xff, 0xff, 0x0, - 0x0, 0x1, 0xff, 0xc0, 0x0, - - /* U+0036 "6" */ - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0x80, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, - 0x7, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, - 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3, - 0xff, 0xe0, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, - 0x0, 0x1, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0xfc, - 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0x87, 0xf8, 0x0, 0x7, 0xff, 0x8f, 0xff, 0x0, - 0x7, 0xff, 0xcf, 0xff, 0xe0, 0x3, 0xff, 0xdf, - 0xff, 0xf8, 0x3, 0xff, 0xef, 0xff, 0xfe, 0x1, - 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, - 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0x81, 0xff, - 0xff, 0x3f, 0xff, 0x0, 0x3f, 0xff, 0x9f, 0xff, - 0x0, 0x7, 0xff, 0xdf, 0xff, 0x80, 0x3, 0xff, - 0xef, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xc0, - 0x0, 0x7f, 0xff, 0xff, 0xc0, 0x0, 0x1f, 0xff, - 0xff, 0xe0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, - 0x7, 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, 0xff, - 0xfc, 0x0, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x0, - 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xfb, 0xff, - 0xc0, 0x0, 0x7f, 0xfd, 0xff, 0xf0, 0x0, 0x7f, - 0xfc, 0xff, 0xf8, 0x0, 0x3f, 0xfe, 0x3f, 0xfe, - 0x0, 0x3f, 0xff, 0x1f, 0xff, 0xc0, 0x7f, 0xff, - 0x7, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, - 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0x80, - 0x3f, 0xff, 0xff, 0xff, 0xc0, 0xf, 0xff, 0xff, - 0xff, 0xc0, 0x3, 0xff, 0xff, 0xff, 0x80, 0x0, - 0xff, 0xff, 0xff, 0x80, 0x0, 0x1f, 0xff, 0xff, - 0x0, 0x0, 0x3, 0xff, 0xfe, 0x0, 0x0, 0x0, - 0x3f, 0xf8, 0x0, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x3, 0xff, - 0xff, 0xfe, 0x0, 0x1, 0xff, 0xef, 0xff, 0x0, - 0x1, 0xff, 0xf7, 0xff, 0x80, 0x0, 0xff, 0xf3, - 0xff, 0xc0, 0x0, 0xff, 0xf9, 0xff, 0xe0, 0x0, - 0x7f, 0xfc, 0xff, 0xf0, 0x0, 0x7f, 0xfc, 0x7f, - 0xf8, 0x0, 0x3f, 0xfe, 0x3f, 0xfc, 0x0, 0x3f, - 0xfe, 0x1f, 0xfe, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, - 0x80, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, - 0x7, 0xff, 0xc0, 0x0, 0x0, 0x3, 0xff, 0xe0, - 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x1, - 0xff, 0xf0, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xfe, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0x1f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, - 0x0, 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, - 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, - 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, 0xe0, - 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, 0x0, 0x1, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0x0, 0x0, - - /* U+0038 "8" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xff, 0x80, 0x0, - 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x3f, 0xff, 0xff, - 0xfc, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x0, 0x3f, - 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, - 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, - 0xff, 0xff, 0xfe, 0xf, 0xff, 0xe0, 0x7f, 0xff, - 0x7, 0xff, 0xc0, 0xf, 0xff, 0x87, 0xff, 0xc0, - 0x3, 0xff, 0xe3, 0xff, 0xe0, 0x1, 0xff, 0xf1, - 0xff, 0xe0, 0x0, 0x7f, 0xf8, 0xff, 0xf0, 0x0, - 0x3f, 0xfc, 0x7f, 0xf8, 0x0, 0x1f, 0xfe, 0x3f, - 0xfc, 0x0, 0xf, 0xff, 0x1f, 0xfe, 0x0, 0x7, - 0xff, 0x8f, 0xff, 0x80, 0x7, 0xff, 0xc3, 0xff, - 0xc0, 0x3, 0xff, 0xc1, 0xff, 0xf0, 0x3, 0xff, - 0xe0, 0x7f, 0xfc, 0x3, 0xff, 0xe0, 0x3f, 0xff, - 0x3, 0xff, 0xf0, 0xf, 0xff, 0xe7, 0xff, 0xf0, - 0x3, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, - 0xff, 0xf0, 0x0, 0x1f, 0xff, 0xff, 0xf0, 0x0, - 0x7, 0xff, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xff, - 0xf0, 0x0, 0x3, 0xff, 0xff, 0xfc, 0x0, 0x3, - 0xff, 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, - 0xe0, 0x3, 0xff, 0xff, 0xff, 0xf8, 0x3, 0xff, - 0xf0, 0xff, 0xfe, 0x3, 0xff, 0xf0, 0x1f, 0xff, - 0x83, 0xff, 0xe0, 0x7, 0xff, 0xe3, 0xff, 0xe0, - 0x1, 0xff, 0xf1, 0xff, 0xe0, 0x0, 0x7f, 0xfc, - 0xff, 0xf0, 0x0, 0x1f, 0xfe, 0xff, 0xf0, 0x0, - 0x7, 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, 0xff, - 0xfc, 0x0, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x0, - 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xc0, 0x0, 0x7f, 0xff, 0xff, 0xe0, 0x0, 0x3f, - 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0x7f, 0xfe, - 0x0, 0x3f, 0xff, 0x3f, 0xff, 0xc0, 0x7f, 0xff, - 0x9f, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, - 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xc0, - 0x7f, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xff, - 0xff, 0xe0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x1, - 0xff, 0xff, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0xff, - 0x80, 0x0, 0x7, 0xff, 0xff, 0x0, 0x0, 0x0, - 0x3f, 0xf8, 0x0, 0x0, - - /* U+0039 "9" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x7, 0xff, - 0xfc, 0x0, 0x0, 0xf, 0xff, 0xff, 0x80, 0x0, - 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x1f, 0xff, 0xff, - 0xfc, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x0, 0x1f, - 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xff, - 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xff, 0xfe, 0xf, 0xff, 0xf0, 0x7f, 0xff, - 0x8f, 0xff, 0xe0, 0xf, 0xff, 0xc7, 0xff, 0xc0, - 0x1, 0xff, 0xf3, 0xff, 0xe0, 0x0, 0xff, 0xfb, - 0xff, 0xe0, 0x0, 0x3f, 0xfd, 0xff, 0xf0, 0x0, - 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x7, 0xff, 0xff, - 0xf8, 0x0, 0x3, 0xff, 0xff, 0xfc, 0x0, 0x1, - 0xff, 0xff, 0xfe, 0x0, 0x0, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x7f, 0xff, 0xff, 0x80, 0x0, 0x3f, - 0xff, 0xff, 0xe0, 0x0, 0x3f, 0xff, 0xff, 0xf0, - 0x0, 0x1f, 0xff, 0x7f, 0xfc, 0x0, 0x1f, 0xff, - 0x3f, 0xfe, 0x0, 0xf, 0xff, 0x9f, 0xff, 0xc0, - 0x1f, 0xff, 0xc7, 0xff, 0xf8, 0x3f, 0xff, 0xe3, - 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x1f, - 0xff, 0xff, 0xff, 0xf8, 0x7, 0xff, 0xff, 0xbf, - 0xfc, 0x1, 0xff, 0xff, 0xbf, 0xfc, 0x0, 0x7f, - 0xff, 0xbf, 0xfe, 0x0, 0xf, 0xff, 0x1f, 0xfe, - 0x0, 0x1, 0xfe, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0xf, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, - 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, - 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, - 0x1, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, - 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xff, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, 0x80, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, - - /* U+003A ":" */ - 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0x3f, 0xfc, - 0x1f, 0xf8, 0x7, 0xe0, 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, - 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0x3f, 0xfc, - 0x1f, 0xf8, 0x7, 0xe0 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 768, .box_w = 39, .box_h = 60, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 293, .adv_w = 768, .box_w = 38, .box_h = 59, .ofs_x = 6, .ofs_y = 0}, - {.bitmap_index = 574, .adv_w = 768, .box_w = 39, .box_h = 60, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 867, .adv_w = 768, .box_w = 39, .box_h = 59, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 1155, .adv_w = 768, .box_w = 38, .box_h = 59, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 1436, .adv_w = 768, .box_w = 38, .box_h = 60, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 1721, .adv_w = 768, .box_w = 41, .box_h = 60, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2029, .adv_w = 768, .box_w = 41, .box_h = 58, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 2327, .adv_w = 768, .box_w = 41, .box_h = 60, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2635, .adv_w = 768, .box_w = 41, .box_h = 60, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2943, .adv_w = 768, .box_w = 16, .box_h = 46, .ofs_x = 16, .ofs_y = -1} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 48, .range_length = 11, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 1, - .bpp = 1, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t jetbrains_mono_extrabold_compressed = { -#else -lv_font_t jetbrains_mono_extrabold_compressed = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 61, /*The maximum line height required by the font*/ - .base_line = 1, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = -12, - .underline_thickness = 4, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_EXTRABOLD_COMPRESSED*/ - diff --git a/src/displayapp/fonts/lv_font_navi_80.c b/src/displayapp/fonts/lv_font_navi_80.c deleted file mode 100644 index 8fd3979..0000000 --- a/src/displayapp/fonts/lv_font_navi_80.c +++ /dev/null @@ -1,2636 +0,0 @@ -/******************************************************************************* - * Size: 80 px - * Bpp: 2 - * Opts: --font navigation.ttf -r 0xe900-0xe929 --size 80 --format lvgl --bpp 2 -o lv_font_navi_80.c - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef LV_FONT_NAVI_80 -#define LV_FONT_NAVI_80 1 -#endif - -#if LV_FONT_NAVI_80 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+E900 "" */ - 0xf, 0xfe, 0x2d, 0xfa, 0xf, 0xfe, 0xa3, 0xa1, - 0x9d, 0xf, 0xfe, 0x8d, 0x3, 0xf4, 0x87, 0xff, - 0x3d, 0x41, 0xfe, 0x90, 0xff, 0xe7, 0x41, 0xff, - 0xc0, 0x83, 0xff, 0x9a, 0x87, 0xff, 0x9, 0xf, - 0xfe, 0x66, 0x1f, 0xfc, 0x2c, 0x3f, 0xf9, 0x88, - 0x7f, 0xf0, 0x90, 0xff, 0xff, 0x87, 0xff, 0xe5, - 0xf, 0xfe, 0x12, 0x1f, 0xfc, 0xcc, 0x3f, 0xf8, - 0x58, 0x7f, 0xf3, 0x10, 0xff, 0xe1, 0x21, 0xff, - 0xcd, 0xc3, 0xff, 0x81, 0x87, 0xff, 0x3e, 0xf, - 0xf4, 0x1f, 0xfd, 0x6, 0xf, 0xda, 0x1f, 0xfd, - 0x17, 0x90, 0x36, 0x1f, 0xfd, 0x56, 0xf4, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xfb, 0x28, 0x1f, 0xfd, 0xa5, - 0x7, 0xff, 0x67, 0x6, 0x1f, 0xfd, 0x78, 0x34, - 0x1f, 0xfd, 0x55, 0x6, 0x50, 0x7f, 0xf5, 0x20, - 0xf4, 0x1f, 0xfd, 0x38, 0x3f, 0x41, 0xff, 0xd1, - 0x50, 0x7e, 0x50, 0x7f, 0xf4, 0x20, 0xff, 0x41, - 0xff, 0xcf, 0xc3, 0xff, 0x81, 0x87, 0xff, 0x35, - 0xf, 0xfe, 0x12, 0x1f, 0xfc, 0xc8, 0x3f, 0xf8, - 0x50, 0x7f, 0xf2, 0xf0, 0xff, 0xe2, 0x61, 0xff, - 0xc9, 0x83, 0xff, 0x8d, 0x7, 0xff, 0x1d, 0x41, - 0xff, 0xc6, 0x50, 0x7f, 0xf1, 0xa0, 0xff, 0xe4, - 0x41, 0xff, 0xc5, 0x83, 0xff, 0x95, 0x7, 0xff, - 0xd, 0x41, 0xff, 0xca, 0x50, 0x7f, 0xf0, 0xa0, - 0xff, 0xe6, 0x41, 0xff, 0xc1, 0x83, 0xff, 0x9d, - 0x7, 0xfc, 0xa0, 0xff, 0xe7, 0x28, 0x3f, 0xd0, - 0x7f, 0xf4, 0x20, 0xfe, 0xc3, 0xff, 0xa5, 0x87, - 0xd0, 0x7f, 0xf5, 0x20, 0xf2, 0x1f, 0xe8, 0x3f, - 0xd0, 0x7f, 0x90, 0xec, 0x3f, 0xad, 0xc3, 0xf6, - 0xf0, 0x7f, 0x61, 0x41, 0xfa, 0xd0, 0xff, 0xe1, - 0x3c, 0x1f, 0xa1, 0x41, 0xeb, 0x43, 0xff, 0x8c, - 0xf0, 0x79, 0x50, 0x75, 0xa1, 0xff, 0xca, 0x78, - 0x3a, 0xd, 0x68, 0x7f, 0xf3, 0x9e, 0xd, 0xb6, - 0x87, 0xff, 0x49, 0xe7, 0x24, 0x3f, 0xfa, 0xcc, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xde, 0xf, 0x61, 0xff, - 0xc4, - - /* U+E901 "" */ - 0xf, 0xff, 0x35, 0xc1, 0xff, 0xff, 0x34, 0x43, - 0xff, 0xfc, 0xe1, 0xff, 0xff, 0x3, 0x6, 0x43, - 0xff, 0xf9, 0x40, 0xe8, 0x3f, 0xff, 0x7a, 0x1c, - 0x87, 0xff, 0xe9, 0xc3, 0xec, 0x3f, 0xff, 0x34, - 0xf, 0xc8, 0x7f, 0xfe, 0x34, 0x3f, 0x41, 0xff, - 0xf7, 0x70, 0xff, 0x21, 0xff, 0xf6, 0xa0, 0x7f, - 0xa0, 0xff, 0xfb, 0x48, 0x7f, 0xc8, 0x7f, 0xfd, - 0x74, 0x3f, 0xe4, 0x3f, 0xfb, 0x2d, 0xe9, 0xf, - 0xfe, 0x4b, 0x87, 0xff, 0x6, 0xf, 0xfe, 0xbd, - 0xc8, 0x1b, 0x83, 0xff, 0x8d, 0x40, 0xff, 0xe0, - 0xa1, 0xff, 0xd7, 0xd0, 0xfc, 0xe1, 0xff, 0xc4, - 0xd0, 0xff, 0xe1, 0x41, 0xff, 0xd6, 0xc3, 0xff, - 0x81, 0x87, 0xff, 0x5, 0xc3, 0xff, 0xcd, 0x7, - 0xff, 0xa, 0xf, 0xfa, 0x81, 0xff, 0xc5, 0x83, - 0xff, 0xaa, 0x87, 0xff, 0x9, 0xf, 0xf6, 0x87, - 0xff, 0x19, 0xff, 0xf4, 0x87, 0xff, 0x22, 0xf, - 0xfe, 0x22, 0x1f, 0x38, 0x7f, 0xf4, 0xdb, 0xc8, - 0x7f, 0xf1, 0x50, 0xff, 0xe2, 0x61, 0xe6, 0xf, - 0xfe, 0xc5, 0xc1, 0xff, 0xd4, 0x43, 0xa8, 0x1f, - 0xfd, 0xb7, 0x83, 0xff, 0xae, 0xa0, 0xff, 0xef, - 0x3a, 0x1f, 0xfd, 0x4, 0x33, 0x7, 0xff, 0x82, - 0x81, 0xfe, 0x43, 0xff, 0x89, 0x87, 0x38, 0x7f, - 0xf8, 0x18, 0x3f, 0xb0, 0xff, 0xe2, 0x21, 0xf6, - 0x87, 0xff, 0x7d, 0xc3, 0xf2, 0x1f, 0xfc, 0x34, - 0x3f, 0xa8, 0x1f, 0xfc, 0x84, 0x32, 0x1f, 0xfc, - 0x6c, 0x3f, 0x61, 0xff, 0xc2, 0x83, 0xfc, 0xe1, - 0xff, 0xc6, 0xef, 0xd7, 0xd2, 0x1f, 0xfc, 0x28, - 0x3f, 0x41, 0xff, 0xc0, 0xc3, 0xff, 0x83, 0xa1, - 0xff, 0xce, 0x6e, 0xf, 0xfe, 0x2, 0x83, 0xe7, - 0xf, 0xe7, 0xf, 0xfe, 0x1c, 0x87, 0xff, 0xd, - 0xf, 0xfe, 0x3, 0xc1, 0xff, 0x41, 0xfd, 0xc8, - 0x67, 0x83, 0xff, 0x8b, 0x40, 0xff, 0xe1, 0x41, - 0xff, 0xc2, 0x70, 0xff, 0xb0, 0xfe, 0x6f, 0xd0, - 0x7f, 0xf2, 0x1c, 0x3f, 0xf8, 0x48, 0x7f, 0xf0, - 0xf4, 0x3f, 0xc8, 0x7f, 0xf6, 0x74, 0x3f, 0xf8, - 0x18, 0x7f, 0xf1, 0x20, 0xff, 0x41, 0xff, 0xda, - 0xa0, 0x7f, 0xc8, 0x7f, 0xf1, 0x70, 0xff, 0x21, - 0xff, 0xda, 0x70, 0xff, 0xa0, 0xff, 0xe2, 0xe1, - 0xfd, 0x7, 0xff, 0x73, 0x43, 0xf9, 0xf, 0xfe, - 0x32, 0x1f, 0xc8, 0x7f, 0xf7, 0x28, 0x1f, 0xd0, - 0x7f, 0xf1, 0x60, 0xfe, 0xc3, 0xff, 0xba, 0xc1, - 0xf9, 0xf, 0xfe, 0x34, 0x1f, 0x90, 0xff, 0xef, - 0x38, 0x7e, 0x43, 0xff, 0x8a, 0x87, 0xff, 0xa7, - 0x43, 0xd0, 0x7f, 0xf1, 0x90, 0xfc, 0x87, 0xff, - 0x82, 0x81, 0xe4, 0x3f, 0xf8, 0xb8, 0x7e, 0xc3, - 0xff, 0xc2, 0xe1, 0xd0, 0x7f, 0xf1, 0x50, 0xff, - 0xf6, 0x68, 0x7f, 0xf4, 0x90, 0xff, 0xf2, 0x50, - 0x3f, 0xff, 0xe1, 0x9e, 0xc3, 0xff, 0xfe, 0x12, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xd5, 0x87, 0xd0, 0x7f, - 0xff, 0x3f, 0xe4, - - /* U+E902 "" */ - 0xf, 0xfe, 0x7d, 0xc1, 0xff, 0xff, 0x2, 0x38, - 0x7f, 0xff, 0xc3, 0xb4, 0x3f, 0xff, 0xc8, 0x69, - 0xf, 0xff, 0xec, 0x1d, 0x40, 0xff, 0xfe, 0xa1, - 0xce, 0x1f, 0xff, 0xcc, 0x3e, 0xd0, 0xff, 0xfd, - 0x21, 0xfa, 0x81, 0xff, 0xfa, 0x83, 0xf3, 0x87, - 0xff, 0xe5, 0xf, 0xf6, 0x87, 0xff, 0xe2, 0xf, - 0xf5, 0x3, 0xff, 0xee, 0x87, 0xfc, 0xc1, 0xff, - 0xf7, 0x43, 0xfe, 0x70, 0xff, 0xfb, 0x41, 0xff, - 0xc1, 0xd0, 0xff, 0xe4, 0xb7, 0xa4, 0x3f, 0xfb, - 0x48, 0x7f, 0xf0, 0x68, 0x1f, 0xfc, 0x6b, 0x90, - 0x37, 0x7, 0xff, 0x62, 0xf, 0xfe, 0x13, 0x87, - 0xff, 0x13, 0x43, 0xf3, 0x87, 0xff, 0xa3, 0x43, - 0xff, 0x83, 0x87, 0xff, 0x3, 0xf, 0xfe, 0xb4, - 0x1f, 0xfc, 0x5a, 0x7, 0xfd, 0x7, 0xff, 0xa, - 0xf, 0xfe, 0x4b, 0x7f, 0xf9, 0xf, 0xfe, 0x33, - 0x87, 0xf9, 0xf, 0xfe, 0x12, 0x1f, 0xfc, 0x67, - 0xd2, 0x1f, 0xfd, 0x3d, 0xf, 0x90, 0xff, 0xe2, - 0x41, 0xff, 0xc3, 0xb8, 0x3f, 0xfb, 0x12, 0x1e, - 0xc3, 0xff, 0x88, 0x87, 0xff, 0x6, 0xd0, 0xff, - 0xed, 0xd0, 0x39, 0xf, 0xfe, 0x83, 0xa1, 0xff, - 0xde, 0x50, 0x7f, 0xf5, 0x28, 0x1f, 0xfe, 0x9, - 0xc, 0x87, 0xff, 0x3a, 0x43, 0xff, 0xc1, 0xa1, - 0xd8, 0x7f, 0xf1, 0x10, 0xfd, 0xa1, 0xff, 0xdf, - 0x70, 0xf9, 0xf, 0xfe, 0x26, 0x1f, 0x61, 0xff, - 0xc6, 0x43, 0x21, 0xff, 0xc8, 0xa0, 0x7f, 0x21, - 0xff, 0xc3, 0x43, 0xd0, 0x7f, 0xf0, 0x9b, 0xeb, - 0xf5, 0x87, 0xff, 0x1b, 0x43, 0xfd, 0x7, 0xff, - 0xb, 0xf, 0x28, 0x3f, 0xf8, 0x17, 0x21, 0xff, - 0xce, 0x70, 0xff, 0xe0, 0xe1, 0xff, 0xc0, 0x83, - 0xe8, 0x3f, 0xeb, 0x43, 0xff, 0x80, 0x87, 0xff, - 0xd, 0x83, 0xff, 0x87, 0xa1, 0xfd, 0xa1, 0xec, - 0x3f, 0xed, 0xf, 0xfe, 0x14, 0x1f, 0xfc, 0x2a, - 0x7, 0xff, 0x16, 0xd0, 0xcd, 0x87, 0xc8, 0x7f, - 0x9c, 0x3f, 0xf8, 0x68, 0x7f, 0xf0, 0xb4, 0x3f, - 0xf9, 0x17, 0xe9, 0xf, 0xd0, 0x7f, 0x30, 0x7f, - 0xf1, 0x30, 0xff, 0xe0, 0x38, 0x7f, 0xf6, 0x10, - 0xff, 0x41, 0xff, 0xc5, 0x43, 0xfe, 0xa0, 0x7f, - 0xf6, 0x60, 0xfe, 0xc3, 0xff, 0x8b, 0x7, 0xfd, - 0xa1, 0xff, 0xd9, 0x43, 0xf9, 0xf, 0xfe, 0x32, - 0x1f, 0xce, 0x1f, 0xfd, 0xbc, 0x3f, 0xa0, 0xff, - 0xe2, 0xc1, 0xfd, 0x40, 0xff, 0xee, 0x21, 0xfa, - 0xf, 0xfe, 0x32, 0x1f, 0xa4, 0x3f, 0xfc, 0xc8, - 0x7f, 0xf1, 0x50, 0xfd, 0xa1, 0xff, 0xdd, 0x43, - 0xf2, 0x1f, 0xfc, 0x68, 0x3c, 0xe1, 0xff, 0xdf, - 0xc3, 0xf6, 0x1f, 0xfc, 0x54, 0x3d, 0x40, 0xff, - 0xf4, 0xa1, 0xff, 0xc5, 0x83, 0xb4, 0x3f, 0xfc, - 0x28, 0x7f, 0xf4, 0x9c, 0x3f, 0xff, 0xe0, 0xa0, - 0x7f, 0xff, 0xfb, 0x43, 0xff, 0xfe, 0x4, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xa0, 0xfb, 0xf, 0xff, 0xdb, 0xff, - 0x7, 0xff, 0xf0, - - /* U+E903 "" */ - 0xe, 0xf4, 0x1f, 0xff, 0x4b, 0xc1, 0xfd, 0x81, - 0xc3, 0xff, 0xe5, 0xa0, 0xc3, 0xec, 0x3b, 0xf, - 0xff, 0x86, 0x1d, 0x87, 0x61, 0xf6, 0x1f, 0xfe, - 0xec, 0x3e, 0xc2, 0xc3, 0xfb, 0xf, 0xff, 0x66, - 0x1f, 0xd9, 0x87, 0xfd, 0x87, 0xff, 0xab, 0xf, - 0xfb, 0xf, 0xfe, 0xe, 0x1f, 0xfe, 0x8c, 0x3f, - 0xf8, 0x28, 0x7f, 0xf0, 0x70, 0xff, 0xf3, 0x61, - 0xff, 0xc1, 0x60, 0xff, 0xe1, 0x61, 0xff, 0xe4, - 0xc3, 0xff, 0x85, 0x18, 0x7f, 0xf0, 0xb0, 0xff, - 0xf1, 0x61, 0xff, 0xc2, 0xc2, 0xc3, 0xff, 0x85, - 0x87, 0xff, 0x83, 0xf, 0xfe, 0x16, 0x1d, 0x87, - 0xff, 0xb, 0xf, 0xfe, 0xf6, 0x1f, 0xfc, 0x2c, - 0x3e, 0xc3, 0xff, 0x85, 0x87, 0xff, 0x73, 0xf, - 0xfe, 0x16, 0x1f, 0xd8, 0x7f, 0xf0, 0xb0, 0xff, - 0xed, 0x61, 0xff, 0xc2, 0xc3, 0xfe, 0xc3, 0xff, - 0x85, 0x87, 0xff, 0x63, 0xf, 0xfe, 0x16, 0x1f, - 0xfc, 0x1c, 0x3f, 0xf8, 0x58, 0x7f, 0xf5, 0xb0, - 0xff, 0xe1, 0x61, 0xff, 0xc3, 0xc3, 0xff, 0x85, - 0x87, 0xff, 0x53, 0xf, 0xfe, 0x16, 0x1f, 0xfc, - 0x5c, 0x3f, 0xf8, 0x58, 0x7f, 0xf4, 0xb0, 0xff, - 0xe1, 0x61, 0xff, 0xc7, 0xc3, 0xff, 0x85, 0x87, - 0xff, 0x43, 0xf, 0xfe, 0x16, 0x1f, 0xfc, 0x9c, - 0x3f, 0xf8, 0x58, 0x7f, 0xf3, 0xb0, 0xff, 0xe1, - 0x61, 0xff, 0xcb, 0xc3, 0xff, 0x85, 0x87, 0xff, - 0x33, 0xf, 0xfe, 0x16, 0x1f, 0xfc, 0xdc, 0x3f, - 0xf8, 0x58, 0x7f, 0xf2, 0xb0, 0xff, 0xe1, 0x61, - 0xff, 0xcf, 0xc3, 0xff, 0x85, 0x87, 0xff, 0x23, - 0xf, 0xfe, 0x16, 0x1f, 0xfd, 0x1c, 0x3f, 0xf8, - 0x58, 0x7f, 0xf1, 0xb0, 0xff, 0xe1, 0x61, 0xff, - 0xd3, 0xc3, 0xff, 0x85, 0x87, 0xff, 0x13, 0xf, - 0xfe, 0x16, 0x1f, 0xfd, 0x5c, 0x3f, 0xf8, 0x58, - 0x7f, 0xf0, 0xb0, 0xff, 0xe1, 0x61, 0xff, 0xd7, - 0xc3, 0xff, 0x85, 0x87, 0xff, 0x3, 0xf, 0xfe, - 0x16, 0x1f, 0xfd, 0x9c, 0x3f, 0xf8, 0x58, 0x7f, - 0xb0, 0xff, 0xe1, 0x61, 0xff, 0xdb, 0xc3, 0xff, - 0x85, 0x87, 0xec, 0x3f, 0xf8, 0x58, 0x7f, 0xf7, - 0x70, 0xff, 0xe1, 0x61, 0xec, 0x3f, 0xf8, 0x58, - 0x7f, 0xf7, 0xf0, 0xff, 0xe1, 0x61, 0xb0, 0xff, - 0xe1, 0x61, 0xff, 0xe1, 0xc3, 0xff, 0x85, 0xf8, - 0x3f, 0xf8, 0x58, 0x7f, 0xf8, 0xf0, 0xff, 0xe9, - 0x61, 0xff, 0xe5, 0xc3, 0xff, 0xa1, 0x87, 0xff, - 0x9f, 0xf, 0xfe, 0x76, 0x1f, 0xfe, 0x9c, 0x3f, - 0xf9, 0x98, 0x7f, 0xfa, 0xf0, 0xff, 0xe5, 0x61, - 0xff, 0xed, 0xc3, 0xff, 0x91, 0x87, 0xff, 0xbf, - 0xf, 0xfe, 0x36, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0x7f, 0xf1, - 0xb0, 0xff, 0xf7, 0xe1, 0xff, 0xc8, 0xc3, 0xff, - 0xdb, 0x87, 0xff, 0x2b, 0xf, 0xff, 0x5e, 0x1f, - 0xfc, 0xcc, 0x3f, 0xfd, 0x38, 0x7f, 0xf3, 0xb0, - 0xff, 0xf3, 0xe1, 0xff, 0xd0, 0xc3, 0xff, 0xcb, - 0x87, 0xff, 0x4b, 0xf, 0xff, 0x1e, 0x1f, 0xfc, - 0x2f, 0xc1, 0xff, 0xc2, 0xc3, 0xff, 0xc3, 0x87, - 0xff, 0xb, 0xd, 0x87, 0xff, 0xb, 0xf, 0xfe, - 0xfe, 0x1f, 0xfc, 0x2c, 0x3d, 0x87, 0xff, 0xb, - 0xf, 0xfe, 0xee, 0x1f, 0xfc, 0x2c, 0x3f, 0x61, - 0xff, 0xc2, 0xc3, 0xff, 0xb7, 0x87, 0xff, 0xb, - 0xf, 0xf6, 0x1f, 0xfc, 0x2c, 0x3f, 0xfb, 0x38, - 0x7f, 0xf0, 0xb0, 0xff, 0xe0, 0x61, 0xff, 0xc2, - 0xc3, 0xff, 0xaf, 0x87, 0xff, 0xb, 0xf, 0xfe, - 0x16, 0x1f, 0xfc, 0x2c, 0x3f, 0xfa, 0xb8, 0x7f, - 0xf0, 0xb0, 0xff, 0xe2, 0x61, 0xff, 0xc2, 0xc3, - 0xff, 0xa7, 0x87, 0xff, 0xb, 0xf, 0xfe, 0x36, - 0x1f, 0xfc, 0x2c, 0x3f, 0xfa, 0x38, 0x7f, 0xf0, - 0xb0, 0xff, 0xe4, 0x61, 0xff, 0xc2, 0xc3, 0xff, - 0x9f, 0x87, 0xff, 0xb, 0xf, 0xfe, 0x56, 0x1f, - 0xfc, 0x2c, 0x3f, 0xf9, 0xb8, 0x7f, 0xf0, 0xb0, - 0xff, 0xe6, 0x61, 0xff, 0xc2, 0xc3, 0xff, 0x97, - 0x87, 0xff, 0xb, 0xf, 0xfe, 0x76, 0x1f, 0xfc, - 0x2c, 0x3f, 0xf9, 0x38, 0x7f, 0xf0, 0xb0, 0xff, - 0xe8, 0x61, 0xff, 0xc2, 0xc3, 0xff, 0x8f, 0x87, - 0xff, 0xb, 0xf, 0xfe, 0x96, 0x1f, 0xfc, 0x2c, - 0x3f, 0xf8, 0xb8, 0x7f, 0xf0, 0xb0, 0xff, 0xea, - 0x61, 0xff, 0xc2, 0xc3, 0xff, 0x87, 0x87, 0xff, - 0xb, 0xf, 0xfe, 0xb6, 0x1f, 0xfc, 0x2c, 0x3f, - 0xf8, 0x38, 0x7f, 0xf0, 0xb0, 0xff, 0xec, 0x61, - 0xff, 0xc2, 0xc3, 0xfe, 0xc3, 0xff, 0x85, 0x87, - 0xff, 0x6b, 0xf, 0xfe, 0x16, 0x1f, 0xd8, 0x7f, - 0xf0, 0xb0, 0xff, 0xee, 0x61, 0xff, 0xc2, 0xc3, - 0xec, 0x3f, 0xf8, 0x58, 0x7f, 0xf7, 0xb0, 0xff, - 0xe1, 0x61, 0xd8, 0x7f, 0xf0, 0xb0, 0xff, 0xf0, - 0x61, 0xff, 0xc2, 0xc2, 0xc3, 0xff, 0x85, 0x87, - 0xff, 0x8b, 0xf, 0xfe, 0x16, 0x41, 0xff, 0xc2, - 0xc3, 0xff, 0xc9, 0x87, 0xff, 0xa, 0x43, 0xff, - 0x83, 0x87, 0xff, 0x9b, 0xf, 0xfe, 0xa, 0x1f, - 0xfc, 0x1c, 0x3f, 0xfd, 0x18, 0x7f, 0xf0, 0x70, - 0xff, 0xb0, 0xff, 0xf5, 0x61, 0xff, 0x66, 0x1f, - 0xd8, 0x7f, 0xfb, 0x30, 0xfe, 0xc2, 0xc3, 0xec, - 0x3f, 0xfd, 0xd8, 0x7d, 0x87, 0x61, 0xd8, 0x7f, - 0xfc, 0x30, 0xec, 0x3e, 0xc0, 0xe1, 0xff, 0xf2, - 0xd0, 0x61, 0x80, - - /* U+E904 "" */ - 0xf, 0xfe, 0x62, 0x83, 0xff, 0xc9, 0x40, 0xff, - 0xf1, 0xe0, 0xc3, 0xff, 0xc3, 0x6, 0x83, 0xff, - 0xbe, 0xa0, 0xca, 0xf, 0xfe, 0xeb, 0x7, 0xa4, - 0x3f, 0xfb, 0x90, 0x7e, 0x83, 0xff, 0xb7, 0x87, - 0xfb, 0xf, 0xfe, 0xcc, 0x1f, 0xfc, 0x8, 0x3f, - 0xfa, 0xea, 0xf, 0xfe, 0x2, 0x83, 0xff, 0xad, - 0x7, 0xff, 0xa, 0xf, 0xfe, 0xae, 0x1f, 0xfc, - 0x4c, 0x3f, 0xfa, 0x70, 0x7f, 0xf1, 0xa0, 0xff, - 0xe8, 0xa8, 0x3f, 0xf8, 0xca, 0xf, 0xfe, 0x84, - 0x1f, 0xfc, 0x88, 0x3f, 0xf9, 0xf8, 0x7f, 0xf2, - 0xb0, 0xff, 0xe6, 0xc1, 0xff, 0xcc, 0x83, 0xff, - 0x97, 0x21, 0xff, 0xcc, 0x60, 0xff, 0xe4, 0xa8, - 0x3f, 0xf9, 0xca, 0xf, 0xfe, 0x44, 0x1f, 0xfd, - 0x8, 0x3f, 0xf8, 0xf8, 0x7f, 0xf4, 0xb0, 0xff, - 0xe2, 0xc1, 0xff, 0xd4, 0x83, 0xff, 0x86, 0xa0, - 0xff, 0xea, 0x28, 0x3f, 0xf8, 0x50, 0x7f, 0xf5, - 0xa0, 0xff, 0xe0, 0xe1, 0xff, 0xd8, 0xc3, 0xfe, - 0x83, 0xff, 0xb5, 0x7, 0xf2, 0x83, 0xff, 0xb4, - 0xa0, 0xf9, 0x83, 0xff, 0xb9, 0x21, 0xe8, 0x3f, - 0xf8, 0x17, 0xa0, 0xff, 0x5e, 0x83, 0xff, 0x81, - 0x7, 0x61, 0xff, 0x5a, 0x4, 0x3f, 0xc8, 0x1e, - 0xf, 0xfb, 0xa, 0xf, 0xf5, 0xa1, 0xff, 0xc8, - 0x78, 0x3f, 0xd0, 0xa0, 0xf9, 0xf2, 0x1f, 0xfc, - 0xc7, 0xc8, 0x7c, 0xa8, 0x3c, 0xf0, 0x7f, 0xf4, - 0xad, 0xf, 0x41, 0xd7, 0x7, 0xff, 0x5a, 0xe0, - 0xe8, 0x16, 0x87, 0xff, 0x69, 0xe0, 0x4f, 0x90, - 0xff, 0xef, 0x3e, 0x43, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xf9, 0x8, - 0x7e, 0x43, 0xff, 0xb9, 0x21, 0xe6, 0xf, 0xfe, - 0x40, - - /* U+E905 "" */ - 0xf, 0xfe, 0x9b, 0xe4, 0x3f, 0xfe, 0xb4, 0x4, - 0x1f, 0xff, 0x4d, 0xf, 0xff, 0xb3, 0x87, 0x41, - 0xff, 0xf1, 0x60, 0xf2, 0x1f, 0xff, 0xa, 0x7, - 0xa0, 0xff, 0xf8, 0x68, 0x7c, 0x87, 0xff, 0xb9, - 0xc3, 0xf2, 0x1f, 0xfe, 0xea, 0x7, 0xf4, 0x1f, - 0xfe, 0xdd, 0xf, 0xe4, 0x3f, 0xfd, 0x8e, 0x1f, - 0xf4, 0x1f, 0xfe, 0xb6, 0xf, 0xf9, 0xf, 0xff, - 0x5d, 0x3, 0xff, 0x81, 0x87, 0xff, 0xab, 0x43, - 0xff, 0x82, 0x87, 0xff, 0xa1, 0xc3, 0xff, 0x85, - 0x7, 0xff, 0xa2, 0x81, 0xff, 0xc3, 0x43, 0xff, - 0xcf, 0xa1, 0xff, 0xc3, 0x83, 0xff, 0xcc, 0xe1, - 0xff, 0xc5, 0x43, 0xff, 0xcb, 0x40, 0xff, 0xfb, - 0xc8, 0x7f, 0xf1, 0xd0, 0xff, 0xf1, 0xe8, 0x7f, - 0xf2, 0x2f, 0xff, 0xe1, 0x51, 0xf, 0xfe, 0x83, - 0x87, 0xff, 0x65, 0x57, 0xa4, 0x3f, 0xf9, 0x74, - 0xf, 0xfe, 0xfb, 0x70, 0x7f, 0xf2, 0x34, 0x3f, - 0xfc, 0x6f, 0x7, 0xff, 0x11, 0xc3, 0xff, 0xce, - 0xf0, 0x7f, 0xfe, 0x5c, 0x3f, 0xf8, 0x2e, 0x1f, - 0xfe, 0xbd, 0xf, 0xfe, 0xe, 0x1f, 0xfe, 0xba, - 0x7, 0xff, 0x7, 0x43, 0xff, 0xd4, 0xc1, 0xff, - 0xc1, 0xa0, 0x7f, 0xfa, 0x98, 0x3f, 0xf8, 0x2e, - 0x1f, 0xfc, 0x9b, 0xff, 0xf8, 0x52, 0x1f, 0xfc, - 0x46, 0xf, 0xfe, 0x16, 0x87, 0xff, 0x1d, 0xf, - 0xfe, 0x13, 0x79, 0xf, 0xfe, 0x12, 0x83, 0xff, - 0x85, 0x40, 0xff, 0xec, 0xda, 0x1f, 0xfc, 0x18, - 0x3f, 0xf8, 0x6e, 0x1f, 0xfc, 0x58, 0x3f, 0xf9, - 0x16, 0x1f, 0xfc, 0x1c, 0x3f, 0xf8, 0x9a, 0x1f, - 0xfc, 0x34, 0x3f, 0xf9, 0x5a, 0x1f, 0xfc, 0x4, - 0x3f, 0xf8, 0x94, 0xf, 0xfe, 0x1a, 0x1f, 0xfc, - 0xaa, 0x7, 0xfd, 0x7, 0xff, 0x15, 0xc3, 0xff, - 0x85, 0x7, 0xff, 0x2d, 0x83, 0xfe, 0x83, 0xff, - 0x8d, 0xa1, 0xff, 0xc1, 0x43, 0xff, 0x96, 0xa0, - 0xff, 0x21, 0xff, 0xc7, 0x90, 0xff, 0xe0, 0x41, - 0xff, 0xcc, 0x83, 0xfe, 0x43, 0xff, 0x8f, 0x40, - 0xff, 0xec, 0xe1, 0xfe, 0x83, 0xff, 0x90, 0xe1, - 0xff, 0x41, 0xff, 0xcd, 0x43, 0xff, 0xa9, 0xa1, - 0xfc, 0x87, 0xff, 0x36, 0xf, 0xf4, 0x1f, 0xfc, - 0xaa, 0x7, 0xf4, 0x1f, 0xfc, 0xd4, 0x3f, 0x90, - 0xff, 0xe5, 0xb8, 0x7e, 0x43, 0xff, 0x9b, 0x7, - 0xff, 0x5f, 0x43, 0xe8, 0x3f, 0xfa, 0xe8, 0x7f, - 0xf3, 0x68, 0x1e, 0x43, 0xff, 0x9a, 0x87, 0xff, - 0x61, 0xc3, 0xc8, 0x7f, 0xf3, 0x30, 0xfe, 0xc3, - 0xff, 0xa1, 0xa1, 0xa0, 0xff, 0xfa, 0x48, 0x7f, - 0xf4, 0x10, 0xfe, 0x43, 0xff, 0xa5, 0x40, 0x61, - 0xff, 0xf6, 0x7c, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0x85, 0xf, 0xff, 0x86, 0x1f, 0x30, - - /* U+E906 "" */ - 0xf, 0xfe, 0xbb, 0xe4, 0x3f, 0xfe, 0xd0, 0x28, - 0x1f, 0xff, 0x96, 0xf, 0xff, 0xa4, 0x19, 0xc3, - 0xff, 0xe6, 0x87, 0xb4, 0x3f, 0xfe, 0x48, 0x7a, - 0x81, 0xff, 0xf1, 0x83, 0xe7, 0xf, 0xff, 0x8a, - 0x1f, 0xb4, 0x3f, 0xfd, 0xf0, 0x7f, 0x50, 0x3f, - 0xfd, 0xe8, 0x7f, 0x30, 0x7f, 0xfb, 0xb0, 0xff, - 0x38, 0x7f, 0xfb, 0x50, 0xff, 0xe0, 0x68, 0x7f, - 0xfb, 0x20, 0xff, 0xe0, 0x50, 0x3f, 0xfd, 0x68, - 0x7f, 0xf0, 0x5c, 0x3f, 0xfd, 0x70, 0x7f, 0xf0, - 0xb4, 0x3f, 0xfd, 0x28, 0x7f, 0xf0, 0xe8, 0x1f, - 0xfe, 0x94, 0x3f, 0xf8, 0x6c, 0x1f, 0xfe, 0x88, - 0x3f, 0xf8, 0x8e, 0x1f, 0xff, 0xad, 0xf, 0xff, - 0x2c, 0x1f, 0xfc, 0x7a, 0x7, 0xff, 0x49, 0x57, - 0xff, 0xf0, 0xd0, 0xff, 0xe4, 0x38, 0x7f, 0xf3, - 0x9b, 0xa2, 0x1f, 0xfd, 0xad, 0xf, 0xfe, 0x55, - 0xc8, 0x7f, 0xf7, 0xe8, 0x1f, 0xfc, 0x7b, 0x43, - 0xff, 0xc6, 0xc1, 0xff, 0xc4, 0xb4, 0x3f, 0xfc, - 0xce, 0x1f, 0xfc, 0x17, 0x43, 0xff, 0xd4, 0x87, - 0xfc, 0xc1, 0xff, 0xeb, 0xd0, 0xff, 0x50, 0x3f, - 0xfd, 0x4e, 0x1f, 0xf4, 0x87, 0xff, 0xaa, 0x81, - 0xff, 0x48, 0x7f, 0xfa, 0xb4, 0x3f, 0xe9, 0xf, - 0xfe, 0x23, 0x7f, 0xff, 0x9, 0xf, 0xfe, 0x43, - 0x87, 0xff, 0x1, 0x41, 0xff, 0xc2, 0xbd, 0x21, - 0xff, 0xc2, 0x83, 0xff, 0x8e, 0xc1, 0xff, 0xc1, - 0x83, 0xff, 0x83, 0x68, 0x7f, 0xf6, 0x68, 0x1f, - 0xfc, 0x1c, 0x3f, 0xf8, 0xe, 0x87, 0xff, 0x22, - 0xf, 0xfe, 0x2e, 0x87, 0xff, 0x6, 0xf, 0xfe, - 0x3, 0x7, 0xff, 0x29, 0xf, 0xfe, 0x1b, 0x87, - 0xff, 0xd, 0xf, 0xfa, 0x81, 0xff, 0xca, 0x83, - 0xff, 0x87, 0x40, 0xff, 0xe1, 0xc1, 0xff, 0x48, - 0x7f, 0xf2, 0xd0, 0xff, 0xe1, 0x68, 0x7f, 0xf1, - 0x10, 0xff, 0x28, 0x3f, 0xf9, 0x68, 0x7f, 0xf0, - 0x5c, 0x3f, 0xf8, 0xb0, 0x7f, 0xd0, 0x7f, 0xf3, - 0x20, 0xff, 0xe0, 0x50, 0x3f, 0xf8, 0xc8, 0x7f, - 0xb0, 0xff, 0xe6, 0x21, 0xff, 0xc0, 0xd0, 0xff, - 0xe3, 0x21, 0xfe, 0x43, 0xff, 0x9b, 0x7, 0xf9, - 0xc3, 0xff, 0x91, 0x87, 0xfa, 0xf, 0xfe, 0xbb, - 0x7, 0xff, 0x25, 0xf, 0xe4, 0x3f, 0xf9, 0xb0, - 0x7f, 0x50, 0x3f, 0xfa, 0x90, 0x7f, 0xf3, 0x50, - 0xfd, 0xa1, 0xff, 0xca, 0x43, 0xff, 0xaf, 0x7, - 0xce, 0x1f, 0xfc, 0xcc, 0x3f, 0x90, 0xff, 0xe6, - 0xa1, 0xea, 0x7, 0xff, 0x35, 0xf, 0xec, 0x3f, - 0xf9, 0x90, 0x7b, 0x43, 0xff, 0xb0, 0x87, 0xff, - 0x31, 0xc, 0xe1, 0xff, 0xf7, 0xa0, 0x7f, 0xfd, - 0x20, 0x68, 0x7f, 0xfd, 0x5f, 0x7, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xfc, 0x68, 0x7e, 0x43, 0xff, 0xe1, 0x21, 0xe6, - 0xf, 0xff, 0x80, - - /* U+E907 "" */ - 0xf, 0xff, 0x67, 0xfd, 0x5c, 0xb8, 0x3f, 0xfc, - 0x4b, 0xd5, 0xbf, 0xfa, 0xb2, 0xf0, 0x7f, 0xf2, - 0x50, 0xff, 0xe6, 0x2e, 0xae, 0xff, 0xd2, 0x1f, - 0xf6, 0x1f, 0xfd, 0xd6, 0x43, 0xff, 0xd5, 0x87, - 0xf9, 0xf, 0xfe, 0xfc, 0x1f, 0xfe, 0x87, 0xf, - 0xfe, 0x2, 0x1f, 0xfd, 0xab, 0x83, 0xff, 0x83, - 0x87, 0xff, 0x62, 0xd0, 0xff, 0xf3, 0x5a, 0x1f, - 0xfc, 0x54, 0x3f, 0xfa, 0x6f, 0x90, 0xff, 0xf2, - 0xbc, 0x1f, 0xfc, 0xb4, 0x3f, 0xf9, 0xcf, 0x7, - 0xff, 0x37, 0xf, 0xfe, 0x65, 0xc1, 0xff, 0xe7, - 0x50, 0x7f, 0xf4, 0x50, 0xff, 0xff, 0x84, 0x87, - 0xff, 0x4d, 0xf, 0xfe, 0x5e, 0x87, 0xff, 0x47, - 0xf, 0xfe, 0x64, 0x87, 0xff, 0x41, 0xf, 0xfe, - 0x6d, 0x3, 0xff, 0xd4, 0xe1, 0xff, 0xeb, 0xc3, - 0xff, 0x9c, 0x87, 0xff, 0x43, 0x43, 0xff, 0x99, - 0x87, 0xff, 0x46, 0x43, 0xff, 0x96, 0x87, 0xff, - 0x1, 0xf0, 0x7f, 0xf0, 0xe8, 0x1f, 0xfd, 0x78, - 0x1a, 0x1f, 0xfc, 0x27, 0xf, 0xfe, 0xd4, 0x87, - 0xff, 0xf, 0xf, 0xfe, 0x4a, 0x1f, 0xe4, 0x3a, - 0x81, 0xff, 0xc3, 0xd0, 0xff, 0xe3, 0xe1, 0xfe, - 0x83, 0xce, 0x1f, 0xfc, 0x39, 0xf, 0xfe, 0x32, - 0x1f, 0xfc, 0x7c, 0x3f, 0xf8, 0x72, 0x1f, 0xfc, - 0xf4, 0x3f, 0xda, 0x1f, 0xfc, 0x29, 0xf, 0xfe, - 0x76, 0x1f, 0xf4, 0x87, 0xff, 0xa, 0xf, 0xfe, - 0x2a, 0x1f, 0x90, 0xff, 0xe0, 0x50, 0x3f, 0xf8, - 0x58, 0x7f, 0xf1, 0x30, 0xf9, 0xf, 0xfe, 0x13, - 0x7, 0xff, 0xa, 0xf, 0xfe, 0x1a, 0x1f, 0x61, - 0xff, 0xc3, 0x70, 0xff, 0xe0, 0xa8, 0x3f, 0xf9, - 0x48, 0x7f, 0xf1, 0x70, 0xff, 0xe0, 0xc1, 0xff, - 0xdd, 0xc3, 0xff, 0x83, 0x7, 0xff, 0x9, 0xe, - 0x43, 0xff, 0x91, 0x87, 0xff, 0x1, 0xf, 0xfe, - 0x16, 0x1d, 0x87, 0xff, 0x27, 0xf, 0xfe, 0x4, - 0x1f, 0xfc, 0x14, 0x39, 0xf, 0xfe, 0x56, 0x1f, - 0xf2, 0x1f, 0xfc, 0x64, 0x3f, 0xf9, 0x90, 0x7f, - 0xd0, 0x7f, 0xf1, 0x70, 0xff, 0xe6, 0x21, 0xff, - 0x21, 0xff, 0xc1, 0x82, 0x43, 0xff, 0x9b, 0x87, - 0xfd, 0x7, 0xff, 0x1, 0xa6, 0x1f, 0xfc, 0xf4, - 0x3f, 0xc8, 0x7f, 0xf0, 0x54, 0x1f, 0xfd, 0x8, - 0x3f, 0xfd, 0x68, 0x7f, 0xa0, 0xff, 0xef, 0xe1, - 0xfe, 0x43, 0xff, 0xbe, 0x87, 0xff, 0xad, 0xf, - 0xf2, 0x1f, 0xfd, 0xfc, 0x3f, 0xfd, 0x48, 0x7f, - 0xb0, 0xff, 0xf5, 0x21, 0xff, 0xff, 0xf, 0xfe, - 0x62, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0x32, 0xf, 0xe4, 0x3f, 0xfc, 0x32, - 0x1e, 0x60, - - /* U+E908 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf1, 0x17, 0xab, 0x7f, - 0xc1, 0xff, 0xc8, 0x5e, 0xad, 0xff, 0xd5, 0xcb, - 0x83, 0xff, 0x8a, 0xdf, 0xfa, 0xb9, 0x70, 0x7f, - 0xf5, 0xe4, 0x3f, 0xfb, 0xa8, 0x7f, 0x21, 0xff, - 0xdf, 0xc3, 0xf9, 0xf, 0xfe, 0xfa, 0x1f, 0xed, - 0xf, 0xff, 0x4d, 0xc1, 0xff, 0xe9, 0x78, 0x3f, - 0xfb, 0x8, 0x7f, 0xf1, 0x1e, 0x43, 0xff, 0xab, - 0x87, 0xff, 0x19, 0xb4, 0x3f, 0xfa, 0x68, 0x7f, - 0xf2, 0x6d, 0xf, 0xff, 0x4d, 0xc1, 0xff, 0xe9, - 0x78, 0x3f, 0xf9, 0x88, 0x7f, 0xf4, 0x18, 0x3f, - 0xf9, 0x78, 0x7f, 0xfa, 0x50, 0xff, 0xe8, 0xc1, - 0xff, 0xe7, 0x70, 0xff, 0xf3, 0xb0, 0x7f, 0xf3, - 0x10, 0xff, 0xe7, 0x50, 0x3f, 0xf9, 0xb8, 0x7f, - 0xf3, 0x64, 0x3f, 0xf9, 0xc8, 0x7f, 0xf3, 0x34, - 0x3f, 0xfc, 0xf8, 0x7f, 0xf9, 0xdc, 0x3f, 0xfa, - 0x28, 0x7f, 0xf2, 0x68, 0x1f, 0xfc, 0x3f, 0x21, - 0xff, 0xc0, 0xc3, 0xff, 0x91, 0x21, 0xff, 0xc3, - 0xc1, 0x7, 0xff, 0x1, 0xf, 0xfe, 0x3e, 0x87, - 0xff, 0x9, 0xc3, 0x21, 0xff, 0xd2, 0xc3, 0xff, - 0x87, 0x40, 0xec, 0x3f, 0xfa, 0x38, 0x7f, 0xf0, - 0xe4, 0x3c, 0x87, 0xf9, 0xf, 0xfe, 0x2e, 0x1f, - 0xfc, 0x3d, 0xf, 0xfe, 0x36, 0x1f, 0xfc, 0x4c, - 0x3f, 0xf8, 0x78, 0x7f, 0x90, 0xfe, 0x43, 0xff, - 0x87, 0x87, 0xff, 0x9, 0xc3, 0xfe, 0x83, 0xff, - 0x99, 0x7, 0xff, 0x9, 0x83, 0xff, 0xb1, 0x21, - 0xff, 0xc1, 0xa0, 0x7f, 0xf0, 0x90, 0xf9, 0xf, - 0xfe, 0x12, 0x1f, 0xfc, 0x19, 0xf, 0xfe, 0x1e, - 0x1f, 0x61, 0xff, 0xc1, 0xc3, 0xff, 0x83, 0xa1, - 0xff, 0xc4, 0x43, 0xe4, 0x3f, 0xf8, 0x10, 0x7f, - 0xf0, 0x70, 0xff, 0xe3, 0xa1, 0xff, 0xc7, 0x43, - 0xff, 0x81, 0x87, 0xff, 0x23, 0xf, 0xfe, 0x34, - 0x1f, 0xfc, 0xc, 0x3f, 0xf9, 0x28, 0x72, 0x1f, - 0xfc, 0x4, 0x3f, 0xe8, 0x3f, 0xfa, 0x18, 0x7f, - 0xd0, 0x7f, 0xca, 0xf, 0xfe, 0x5a, 0x19, 0xf, - 0xf9, 0xf, 0xfa, 0xf, 0xfe, 0x66, 0x1f, 0xfc, - 0x34, 0x3f, 0xe8, 0x3f, 0xf9, 0xa8, 0x48, 0x7f, - 0xd0, 0x7f, 0xc8, 0x7f, 0xf3, 0xba, 0x83, 0xff, - 0x95, 0x7, 0xff, 0x41, 0x41, 0xff, 0x21, 0xff, - 0x21, 0xff, 0xdd, 0xc3, 0xfd, 0x7, 0xff, 0x79, - 0xf, 0xf2, 0x1f, 0xfe, 0x84, 0x3f, 0xfb, 0xc8, - 0x7f, 0xb0, 0xff, 0xef, 0x61, 0xfe, 0x43, 0xff, - 0xfe, 0x1f, 0xfc, 0x94, 0x3f, 0xff, 0xe1, 0xff, - 0xde, 0x43, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xe4, - 0x3f, 0xb0, 0xff, 0xef, 0xd0, 0x3e, 0x90, 0xff, - 0xef, 0x80, - - /* U+E909 "" */ - 0xf, 0xfe, 0xfb, 0x7f, 0xe9, 0xf, 0xff, 0x93, - 0x7a, 0x43, 0xf3, 0x7a, 0x43, 0xff, 0xd8, 0xf2, - 0x1f, 0xfc, 0x46, 0xe0, 0xff, 0xf4, 0x3c, 0x1f, - 0xfc, 0xa7, 0x83, 0xff, 0xc8, 0xf0, 0x7f, 0xf3, - 0x9d, 0xf, 0xff, 0xd, 0x3, 0xff, 0xa5, 0x40, - 0xff, 0xef, 0xe8, 0x7f, 0xf5, 0x1c, 0x3f, 0xfb, - 0xb8, 0x7f, 0xf6, 0x34, 0x3f, 0xfb, 0x58, 0x7f, - 0xf6, 0xa4, 0x3f, 0xfb, 0x18, 0x7f, 0xf7, 0x20, - 0xff, 0xeb, 0xe1, 0xff, 0xc5, 0x55, 0x72, 0x1f, - 0xfc, 0x5c, 0x3f, 0xfa, 0xb0, 0x7f, 0xf0, 0xdf, - 0x51, 0x7a, 0xf2, 0x1f, 0xfc, 0x3c, 0x3f, 0xfa, - 0x6a, 0xf, 0xfe, 0xb, 0xc1, 0xff, 0xc0, 0xb4, - 0x3f, 0xf8, 0x50, 0x7f, 0xf4, 0xa0, 0xff, 0xe0, - 0xf0, 0x7f, 0xf1, 0x2d, 0xf, 0xfe, 0x2, 0x1f, - 0xfd, 0x18, 0x3f, 0xf8, 0xe, 0x1f, 0xfc, 0x89, - 0xf, 0xfe, 0x6, 0x1f, 0xfd, 0x4, 0x3f, 0xea, - 0x7, 0xff, 0x2a, 0x81, 0xff, 0xc0, 0x43, 0xff, - 0x9d, 0x7, 0xfd, 0x21, 0xff, 0xcc, 0x60, 0xff, - 0xa0, 0xff, 0xe7, 0x21, 0xfe, 0x50, 0x7f, 0xf3, - 0x94, 0x1f, 0xf2, 0x1f, 0xfc, 0xc8, 0x3f, 0xe8, - 0x3f, 0xfa, 0x10, 0x7f, 0xd8, 0x7f, 0xf3, 0x10, - 0xff, 0x41, 0xff, 0xd2, 0x83, 0xfc, 0x87, 0xff, - 0x5d, 0xf, 0xfe, 0x92, 0x83, 0xfc, 0x87, 0xff, - 0x29, 0xf, 0xf4, 0x1f, 0xfd, 0x4c, 0x3f, 0xd8, - 0x7f, 0xf2, 0xb0, 0xff, 0x21, 0xff, 0xd4, 0x43, - 0xfc, 0x87, 0xff, 0x29, 0xf, 0xe4, 0x3f, 0xfa, - 0xc8, 0x7f, 0xf7, 0xb0, 0xff, 0xeb, 0x61, 0xff, - 0xff, 0x2, 0x1f, 0xe4, 0x3f, 0xfa, 0x68, 0x7f, - 0xfd, 0x90, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0x49, 0xf4, 0x1f, 0xfd, 0xf6, 0xf0, 0x7f, 0xf3, - 0xe0, 0x3c, 0x1f, 0xfd, 0xb7, 0x90, 0x41, 0xff, - 0xd3, 0x78, 0x3f, 0xfa, 0xef, 0x7, 0x61, 0xff, - 0xce, 0x83, 0xcf, 0x90, 0xff, 0xe9, 0x5c, 0x1f, - 0x21, 0xff, 0xce, 0x50, 0x7e, 0xb4, 0x3f, 0xf9, - 0xd6, 0x87, 0xec, 0x3f, 0xfa, 0x10, 0x7f, 0xad, - 0xf, 0xfe, 0x55, 0xa1, 0xfd, 0x7, 0xff, 0x4b, - 0xf, 0xfa, 0xe0, 0xb0, 0xff, 0x20, 0x7c, 0x87, - 0xf9, 0x41, 0xff, 0xd3, 0x83, 0xff, 0x80, 0xfc, - 0x87, 0xfa, 0xf4, 0x1f, 0xfc, 0x18, 0x3f, 0xfa, - 0x8c, 0x1f, 0xfd, 0xec, 0x3f, 0xfa, 0xca, 0xf, - 0xfe, 0xe4, 0x1f, 0xfd, 0x88, 0x3f, 0xfb, 0x72, - 0x1f, 0xfd, 0x9c, 0x3f, 0xfb, 0x2a, 0xf, 0xfe, - 0xdc, 0x1f, 0xfd, 0x88, 0x3f, 0xfb, 0x8a, 0xf, - 0xfe, 0xb6, 0x1f, 0xfd, 0xe8, 0x3f, 0xfa, 0xb0, - 0x7f, 0xf8, 0x30, 0xff, 0xe9, 0xa8, 0x3f, 0xfc, - 0x30, 0x7f, 0xf4, 0xa0, 0xff, 0xf1, 0x28, 0x3f, - 0xfa, 0x18, 0x7f, 0xf9, 0x24, 0x3f, 0xf9, 0xd0, - 0x7f, 0xf9, 0xa0, 0xff, 0xe6, 0xa8, 0x3f, 0xfc, - 0xf8, 0x7f, 0xf3, 0x20, 0xff, 0xf4, 0xc1, 0xff, - 0xca, 0xc3, 0xff, 0xd4, 0xa0, 0xff, 0xe4, 0x61, - 0xff, 0xec, 0x83, 0xff, 0x8f, 0x7, 0xff, 0xbb, - 0xf, 0xfe, 0x2a, 0x83, 0xff, 0xdf, 0x7, 0xff, - 0x12, 0xf, 0xff, 0x82, 0x83, 0xff, 0x85, 0x87, - 0xff, 0xca, 0xf, 0xfe, 0xc, 0x1f, 0xff, 0x4c, - 0x3f, 0xe5, 0x7, 0xff, 0xd6, 0xf, 0xf4, 0x1f, - 0xff, 0x66, 0xf, 0xd8, 0x7f, 0xfe, 0x14, 0x1e, - 0x83, 0xff, 0xf5, 0x7, 0x48, 0x7f, 0xfe, 0xf0, - 0x94, 0x1f, 0xff, 0xd8, 0x10, 0x7f, 0xf6, 0xd0, - 0xfe, 0x43, 0xff, 0x98, 0xac, 0x3f, 0xfb, 0x92, - 0x1f, 0x40, - - /* U+E90A "" */ - 0xf, 0xfe, 0x54, 0x1f, 0xfd, 0xfd, 0x83, 0xff, - 0xbb, 0x1, 0x41, 0xff, 0xdb, 0x50, 0x50, 0x7f, - 0xf6, 0xe0, 0xec, 0x3f, 0xfb, 0x38, 0x7d, 0x7, - 0xff, 0x5e, 0xf, 0xca, 0xf, 0xfe, 0xaa, 0x83, - 0xfa, 0xf, 0xfe, 0xac, 0x1f, 0xf6, 0x1f, 0xfd, - 0x3c, 0x3f, 0xf8, 0x30, 0x7f, 0xf4, 0x60, 0xff, - 0xe1, 0x28, 0x3f, 0xf9, 0xea, 0xf, 0xfe, 0x1c, - 0x87, 0xff, 0x35, 0x83, 0xff, 0x8b, 0x7, 0xff, - 0x36, 0xf, 0xfe, 0x3e, 0x1f, 0xfc, 0xbc, 0x3f, - 0xf9, 0x30, 0x7f, 0xf2, 0x60, 0xff, 0xe5, 0x28, - 0x3f, 0xf8, 0xea, 0xf, 0xfe, 0x5c, 0x1f, 0xfc, - 0x78, 0x3f, 0xf9, 0xb8, 0x7f, 0xf1, 0x70, 0xff, - 0xe7, 0xc1, 0xff, 0xc3, 0x83, 0xff, 0xa0, 0xa0, - 0xff, 0xe0, 0xa8, 0x3f, 0xfa, 0x30, 0x7f, 0xf0, - 0x60, 0xff, 0xe9, 0xe1, 0xff, 0x61, 0xff, 0xd5, - 0x83, 0xfa, 0xf, 0xfe, 0xb3, 0x7, 0xca, 0xf, - 0xfe, 0xba, 0x83, 0x98, 0x3f, 0xd7, 0xa0, 0xfe, - 0xf9, 0xf, 0xf4, 0x1d, 0x7, 0xf5, 0xa0, 0x43, - 0xff, 0x81, 0x70, 0x7f, 0x61, 0x61, 0xf3, 0x68, - 0x7f, 0xf1, 0xde, 0xf, 0xd1, 0x7, 0x9e, 0x43, - 0xff, 0x96, 0xf2, 0x1c, 0xb0, 0x67, 0x83, 0xff, - 0xa0, 0xda, 0x1b, 0x81, 0x70, 0x7f, 0xf5, 0x6d, - 0x4, 0xf9, 0xf, 0xfe, 0xcd, 0xe0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xed, 0x43, 0xff, 0xb1, - 0x7, 0xd8, 0x7f, 0xf6, 0x1e, 0xbb, 0x43, 0xff, - 0xb4, 0xbc, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xea, 0x69, - 0xd0, 0x3f, 0xfb, 0x2f, 0x28, 0x57, 0x83, 0xff, - 0xad, 0x40, 0xfe, 0xd0, 0xff, 0xe9, 0xa8, 0x3f, - 0xe9, 0xf, 0xfe, 0x94, 0x1f, 0xfc, 0x18, 0x3f, - 0xfa, 0x38, 0x7f, 0xf0, 0xe0, 0xff, 0xf0, 0x21, - 0xff, 0xcf, 0x43, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xe8, 0xa1, 0xff, 0xf1, 0x43, 0xff, 0xa1, - 0x7, 0xff, 0xe, 0xf, 0xfe, 0x82, 0x83, 0xff, - 0x83, 0x7, 0xff, 0x4a, 0x43, 0xfe, 0x50, 0x7f, - 0xf4, 0xe4, 0x3f, 0xa8, 0x1f, 0xfd, 0x5b, 0x43, - 0x36, 0x87, 0xff, 0x14, - - /* U+E90B "" */ - 0xf, 0xfe, 0x97, 0x90, 0xff, 0xf9, 0x38, 0x20, - 0xff, 0xf8, 0xd0, 0x3f, 0xfe, 0x9a, 0x1a, 0xf, - 0xff, 0x73, 0x87, 0x90, 0xff, 0xf6, 0xd0, 0x3d, - 0x7, 0xff, 0xb7, 0x43, 0xe4, 0x3f, 0xfd, 0x6e, - 0x1f, 0x90, 0xff, 0xf5, 0xb0, 0x7f, 0x41, 0xff, - 0xea, 0xa0, 0x7f, 0x21, 0xff, 0xea, 0xd0, 0xff, - 0x41, 0xff, 0xe8, 0x70, 0xff, 0xfa, 0x50, 0x3f, - 0xf8, 0x10, 0x7f, 0xf9, 0xf4, 0x3f, 0xf8, 0x28, - 0x7f, 0xf9, 0x5c, 0x3f, 0xf8, 0x50, 0x7f, 0xf9, - 0x68, 0x1f, 0xfc, 0x34, 0x3f, 0xfc, 0x92, 0x1f, - 0xfc, 0x38, 0x3f, 0xfc, 0x9a, 0x1f, 0xff, 0x37, - 0xf, 0xfe, 0x34, 0x1f, 0xfe, 0x1a, 0x7, 0xff, - 0x23, 0xff, 0xd4, 0x43, 0xff, 0xa7, 0xa1, 0xff, - 0xd3, 0x55, 0xe4, 0x3f, 0xf9, 0xce, 0x1f, 0xfd, - 0xab, 0x83, 0xff, 0x97, 0x40, 0xff, 0xee, 0xbc, - 0x1f, 0xfc, 0x89, 0xf, 0xff, 0x3, 0xa1, 0xff, - 0xc6, 0x90, 0xff, 0xf1, 0x50, 0x3f, 0xf8, 0xd2, - 0x1f, 0xfe, 0x27, 0xf, 0xfe, 0x35, 0x3, 0xff, - 0xc7, 0x87, 0xff, 0x19, 0xc3, 0xff, 0xc7, 0x87, - 0xff, 0x1f, 0x43, 0xff, 0x91, 0x5f, 0xc8, 0x7f, - 0xf1, 0x30, 0xff, 0xe3, 0xd0, 0x3f, 0xf8, 0xd2, - 0xff, 0x5e, 0x43, 0xff, 0x85, 0x87, 0xff, 0x1d, - 0xc3, 0xff, 0xa5, 0x70, 0x7f, 0xf0, 0x60, 0xff, - 0xe4, 0x68, 0x7f, 0xf0, 0xe0, 0xff, 0xe1, 0x3a, - 0x1f, 0xf2, 0x83, 0xff, 0x91, 0x40, 0xff, 0xe1, - 0xa1, 0xff, 0xc3, 0xa0, 0x7f, 0xd0, 0x7f, 0xf2, - 0x58, 0x3f, 0xf8, 0x50, 0x7f, 0xf1, 0x1c, 0x3f, - 0xe8, 0x3f, 0xf9, 0x2e, 0x1f, 0xfd, 0x4c, 0x3f, - 0xc8, 0x7f, 0xf2, 0xf4, 0x3f, 0xf8, 0x10, 0x7f, - 0xf1, 0xa0, 0xff, 0x41, 0xff, 0xcb, 0xa0, 0x7f, - 0xc8, 0x7f, 0xf1, 0x94, 0x1f, 0xc8, 0x7f, 0xf3, - 0x1c, 0x3f, 0xe8, 0x3f, 0xf8, 0xd0, 0x7f, 0x90, - 0xff, 0xe6, 0xe8, 0x7f, 0x21, 0xff, 0xc7, 0x83, - 0xfa, 0xf, 0xfe, 0x75, 0x3, 0xf9, 0xf, 0xfe, - 0x32, 0x1f, 0xfd, 0x97, 0xf, 0xd0, 0x7f, 0xf1, - 0xe0, 0xfe, 0x43, 0xff, 0xa1, 0xa1, 0xf2, 0x1f, - 0xfc, 0x64, 0x3f, 0xb0, 0xff, 0xe8, 0xc8, 0x7a, - 0xf, 0xfe, 0x82, 0x1f, 0xfd, 0x2a, 0x7, 0x90, - 0xff, 0xe3, 0x21, 0xff, 0xdc, 0x70, 0xe8, 0x3f, - 0xf8, 0xd8, 0x7f, 0xf7, 0xb4, 0x3f, 0xf9, 0x48, - 0x7f, 0xf7, 0xe8, 0x8, 0x3f, 0xfe, 0x6f, 0x90, - 0xff, 0xe8, 0x21, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0x19, 0xf, 0xff, 0x6a, - 0x1f, 0x21, 0xff, 0xee, 0xba, 0xf8, 0x3f, 0xfe, - 0xb, 0xe0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xd8, 0x6f, 0xa4, 0x3f, 0xfd, - 0xcf, 0x21, 0x37, 0x7, 0xff, 0xae, 0x81, 0xfc, - 0xe1, 0xff, 0xe9, 0x90, 0xff, 0xe0, 0x61, 0xff, - 0xe7, 0x50, 0x7f, 0xf0, 0xa0, 0xff, 0xf3, 0x41, - 0xff, 0xc3, 0x43, 0xff, 0xca, 0x87, 0xff, 0x16, - 0xf, 0xff, 0x26, 0x1f, 0xfc, 0x54, 0x3f, 0xff, - 0xe1, 0xff, 0xdc, 0x43, 0xff, 0xec, 0x87, 0xff, - 0xfc, 0x3f, 0xfd, 0xd8, 0x7f, 0xf1, 0x50, 0xff, - 0xf2, 0x21, 0xff, 0xc5, 0x83, 0xff, 0xcb, 0x7, - 0xff, 0xd, 0xf, 0xff, 0x32, 0x83, 0xff, 0x85, - 0x7, 0xff, 0x9e, 0x43, 0xff, 0x81, 0x87, 0xff, - 0xa6, 0x81, 0xfc, 0xe1, 0xff, 0xeb, 0x79, 0xc, - 0xf0, 0x70, - - /* U+E90C "" */ - 0xf, 0xfe, 0xab, 0xe0, 0xff, 0xfa, 0x40, 0xd0, - 0xff, 0xf9, 0x21, 0x50, 0x3f, 0xfe, 0x38, 0x67, - 0xf, 0xff, 0x82, 0x1e, 0xd0, 0xff, 0xf7, 0xc1, - 0xea, 0x7, 0xff, 0xb9, 0xf, 0x9c, 0x3f, 0xfd, - 0xd0, 0x7e, 0xd0, 0xff, 0xf6, 0x21, 0xfd, 0x40, - 0xff, 0xf6, 0x21, 0xfc, 0xc1, 0xff, 0xeb, 0x83, - 0xfc, 0xe1, 0xff, 0xeb, 0x43, 0xfe, 0xd0, 0xff, - 0xf4, 0xc1, 0xff, 0xc0, 0xa0, 0x7f, 0xfd, 0x9c, - 0x3f, 0xfd, 0x10, 0x7f, 0xf0, 0xb4, 0x3f, 0xfc, - 0xc8, 0x7f, 0xf0, 0xe8, 0x1f, 0xfe, 0x68, 0x3f, - 0xf8, 0x6e, 0x1f, 0xff, 0x7d, 0xf, 0xff, 0x1c, - 0x1f, 0xfc, 0x69, 0xf, 0xfe, 0xab, 0x4f, 0xff, - 0x7, 0xff, 0x22, 0x81, 0xff, 0xd1, 0x6e, 0x50, - 0x7f, 0xf4, 0xdc, 0x3f, 0xf9, 0xd7, 0x21, 0xff, - 0xd9, 0xd0, 0xff, 0xe5, 0x5a, 0x1f, 0xfd, 0xda, - 0x7, 0xff, 0x1d, 0xd0, 0xff, 0xf0, 0x38, 0x7f, - 0xf1, 0x68, 0x1f, 0xfe, 0x3c, 0x3f, 0xf8, 0x9a, - 0x1f, 0xfe, 0x27, 0xf, 0xfe, 0x26, 0x1f, 0xfe, - 0x3a, 0x7, 0xff, 0x13, 0xf, 0xff, 0x1e, 0x87, - 0xff, 0x13, 0xf, 0xfe, 0x23, 0x5f, 0xc1, 0xff, - 0xc8, 0x70, 0xff, 0xe2, 0xe1, 0xff, 0xc2, 0x7d, - 0x2f, 0xf4, 0x1f, 0xfc, 0x6a, 0x7, 0xff, 0x16, - 0xf, 0xfe, 0xd, 0xc1, 0xff, 0xd2, 0xd0, 0xff, - 0xe2, 0xa8, 0x3f, 0xe7, 0x43, 0xff, 0x85, 0x7, - 0xff, 0xd, 0xc3, 0xff, 0x8f, 0x7, 0xfd, 0x40, - 0xff, 0xe9, 0xb0, 0x7f, 0xf1, 0xe0, 0xff, 0xa4, - 0x3f, 0xf8, 0x90, 0x7f, 0xf0, 0xa8, 0x1f, 0xfc, - 0x84, 0x3f, 0xda, 0x1f, 0xfc, 0x54, 0x3f, 0xf8, - 0x3a, 0x1f, 0xfc, 0x88, 0x3f, 0xd0, 0x7f, 0xf1, - 0xa0, 0xff, 0xe0, 0x38, 0x7f, 0xf2, 0x90, 0xfe, - 0x50, 0x7f, 0xf1, 0x90, 0xff, 0xa8, 0x1f, 0xfc, - 0xa4, 0x3f, 0xd0, 0x7f, 0xf1, 0x90, 0xff, 0xb4, - 0x3f, 0xf9, 0x70, 0x7f, 0x41, 0xff, 0xc7, 0x83, - 0xf9, 0xc3, 0xff, 0xae, 0x87, 0xff, 0x19, 0xf, - 0xea, 0x7, 0xff, 0x35, 0xf, 0xe4, 0x3f, 0xf8, - 0xf0, 0x7e, 0x90, 0xff, 0xe7, 0x61, 0xfd, 0x7, - 0xff, 0x19, 0xf, 0xda, 0x1f, 0xfc, 0xf4, 0x3f, - 0xfa, 0x10, 0x79, 0xc3, 0xff, 0xb4, 0x87, 0xff, - 0x36, 0x81, 0xff, 0xdb, 0xc3, 0xff, 0x8d, 0x7, - 0x68, 0x7f, 0xfb, 0xd0, 0x9c, 0x3f, 0xfe, 0x30, - 0x28, 0x1f, 0xfd, 0x54, 0x3f, 0x90, 0xff, 0xe3, - 0x3e, 0x43, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xf1, 0x43, 0xff, 0xee, 0x87, 0xc8, 0x7f, 0xfb, - 0xab, 0xee, 0xf, 0xff, 0x7a, 0xf8, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xf6, - 0x5b, 0xe9, 0xf, 0xff, 0x73, 0xc8, 0x4d, 0xa1, - 0xff, 0xeb, 0xa0, 0x7f, 0x50, 0x3f, 0xfd, 0x32, - 0x1f, 0xf3, 0x7, 0xff, 0x9e, 0x43, 0xff, 0x82, - 0xa0, 0xff, 0xf3, 0x21, 0xff, 0xc3, 0x83, 0xff, - 0xca, 0x87, 0xff, 0x15, 0xf, 0xff, 0x24, 0x1f, - 0xfc, 0x5c, 0x3f, 0xfe, 0xc8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xfe, 0x64, 0x3f, 0xfc, 0x88, - 0x7f, 0xf1, 0x70, 0xff, 0xf2, 0x41, 0xff, 0xc5, - 0x43, 0xff, 0xca, 0x87, 0xff, 0xe, 0xf, 0xff, - 0x34, 0x1f, 0xfc, 0x25, 0x7, 0xff, 0x9f, 0xf, - 0xfe, 0x3, 0x7, 0xff, 0xa7, 0x43, 0xf9, 0x83, - 0xff, 0xd7, 0x68, 0x75, 0xc1, 0xff, 0xe8, - - /* U+E90D "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf4, 0xdf, 0x21, 0xff, - 0xfa, 0xa0, 0x20, 0xff, 0xfc, 0xe8, 0x7f, 0xfe, - 0xdc, 0x3a, 0xf, 0xff, 0xb5, 0x3, 0xc8, 0x7f, - 0xfd, 0x64, 0x3d, 0x7, 0xff, 0xd7, 0x43, 0xe4, - 0x3f, 0xfe, 0x6e, 0x1f, 0x90, 0xff, 0xf9, 0xd0, - 0x3f, 0xa0, 0xff, 0xf9, 0x68, 0x7f, 0x21, 0xff, - 0xf1, 0x70, 0xff, 0xa0, 0xff, 0xf8, 0x50, 0x3f, - 0xe4, 0x3f, 0xfe, 0x12, 0x1f, 0xfc, 0xc, 0x3f, - 0xfd, 0xfa, 0x1f, 0xfc, 0x14, 0x3f, 0xfd, 0xae, - 0x1f, 0xfc, 0x28, 0x3f, 0xfd, 0xb4, 0xf, 0xfe, - 0x1a, 0x1f, 0xfe, 0xcd, 0xf, 0xfe, 0x1c, 0x1f, - 0xfe, 0xb7, 0xf, 0xfe, 0x2a, 0x1f, 0xfe, 0xaa, - 0x7, 0xff, 0xf3, 0x43, 0xff, 0x8e, 0x87, 0xff, - 0xa3, 0xf, 0xfe, 0x4d, 0xff, 0xfe, 0x8, 0x39, - 0xc3, 0xff, 0xbf, 0x7f, 0xff, 0x2c, 0x82, 0xa0, - 0x7f, 0xf8, 0x2e, 0xf, 0xfe, 0x4c, 0x83, 0x43, - 0xff, 0xc6, 0xf0, 0x7f, 0xf2, 0x5c, 0x3f, 0xfc, - 0xef, 0x7, 0xff, 0xf9, 0xc3, 0xff, 0x8c, 0xe1, - 0xff, 0xeb, 0xd0, 0xff, 0xe3, 0x68, 0x7f, 0xfa, - 0xa8, 0x1f, 0xfc, 0x69, 0xf, 0xff, 0x53, 0x7, - 0xff, 0x2, 0x43, 0x50, 0x3f, 0xfd, 0x4f, 0xff, - 0xf0, 0x8, 0x39, 0xc3, 0xff, 0x93, 0x7f, 0xff, - 0x6, 0x88, 0x7f, 0xf1, 0x5f, 0xff, 0x41, 0xfb, - 0x43, 0xff, 0x8e, 0x87, 0xff, 0x5, 0x57, 0x90, - 0xff, 0xe1, 0x28, 0x3f, 0xf8, 0xf4, 0xf, 0xfe, - 0xcd, 0xa1, 0xff, 0xc1, 0x83, 0xff, 0x90, 0xe1, - 0xff, 0xc5, 0x83, 0xff, 0x91, 0x61, 0xff, 0xc1, - 0xc3, 0xff, 0x93, 0xa1, 0xff, 0xc3, 0x43, 0xff, - 0x95, 0xa1, 0xff, 0xc0, 0x43, 0xff, 0x93, 0x40, - 0xff, 0xe1, 0xa1, 0xff, 0xca, 0xa0, 0x7f, 0xd0, - 0x7f, 0xf2, 0x9c, 0x3f, 0xf8, 0x50, 0x7f, 0xf2, - 0xd8, 0x3f, 0xe8, 0x3f, 0xf9, 0x7a, 0x1f, 0xfc, - 0x14, 0x3f, 0xf9, 0x6a, 0xf, 0xf2, 0x1f, 0xfc, - 0xc9, 0xf, 0xfe, 0x4, 0x1f, 0xfc, 0xc8, 0x3f, - 0xe4, 0x3f, 0xf9, 0x94, 0xf, 0xfe, 0xce, 0x1f, - 0xe8, 0x3f, 0xf9, 0xae, 0x1f, 0xf4, 0x1f, 0xfc, - 0xd4, 0x3f, 0xfb, 0x3a, 0x1f, 0xc8, 0x7f, 0xf3, - 0x60, 0xff, 0x41, 0xff, 0xcf, 0xa0, 0x7f, 0x41, - 0xff, 0xcd, 0x43, 0xf9, 0xf, 0xfe, 0x83, 0x87, - 0xe4, 0x3f, 0xf9, 0xb0, 0x7f, 0xf7, 0x34, 0x3e, - 0x83, 0xff, 0xae, 0x87, 0xff, 0x4a, 0x81, 0xe4, - 0x3f, 0xf9, 0xa8, 0x7f, 0xf7, 0x5c, 0x3c, 0x87, - 0xff, 0x33, 0xf, 0xec, 0x3f, 0xfa, 0xba, 0x1a, - 0xf, 0xff, 0xcc, 0x87, 0xff, 0x41, 0xf, 0xe4, - 0x3f, 0xfa, 0xf4, 0x6, 0x1f, 0xff, 0xb7, 0xc1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xfd, 0x74, 0x3f, 0xfe, 0xb8, 0x7c, - 0xc1, 0xc0, - - /* U+E90E "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf9, 0x9f, 0x21, 0xff, - 0xff, 0x20, 0x50, 0x3f, 0xff, 0xe1, 0x9c, 0x3f, - 0xff, 0xd0, 0x76, 0x1f, 0xff, 0xd4, 0x3d, 0xa1, - 0xff, 0xfc, 0x43, 0xd4, 0xf, 0xff, 0xdc, 0x1f, - 0x38, 0x7f, 0xfe, 0xd0, 0xfd, 0xa1, 0xff, 0xf9, - 0x83, 0xfa, 0x81, 0xff, 0xf9, 0x43, 0xf9, 0xc3, - 0xff, 0xf1, 0x87, 0xfd, 0x87, 0xff, 0xdd, 0xf, - 0xfe, 0x6, 0x87, 0xff, 0xda, 0xf, 0xfe, 0x5, - 0x3, 0xff, 0xea, 0x87, 0xff, 0x5, 0xc3, 0xff, - 0xeb, 0x7, 0xff, 0xb, 0x43, 0xff, 0xe6, 0x87, - 0xff, 0xe, 0x81, 0xff, 0xf3, 0x43, 0xff, 0x86, - 0xe1, 0xff, 0xf2, 0x83, 0xff, 0x8b, 0x87, 0xff, - 0xfc, 0x3b, 0x43, 0xff, 0xdf, 0x7, 0xff, 0x1e, - 0x81, 0xfa, 0xff, 0xff, 0x2a, 0x1f, 0xfc, 0x87, - 0xf, 0x47, 0xff, 0xf4, 0x10, 0xff, 0xef, 0xe8, - 0x66, 0xf, 0xfe, 0x6b, 0x68, 0x7f, 0xf8, 0x28, - 0x1f, 0xfd, 0x1e, 0x43, 0xff, 0xc6, 0xe1, 0xff, - 0xce, 0xb0, 0xff, 0xf4, 0x61, 0xff, 0xcb, 0x74, - 0x3f, 0xfd, 0x48, 0x7f, 0xf2, 0x68, 0x1f, 0xfe, - 0xbd, 0xf, 0xfe, 0x44, 0x87, 0xff, 0xa9, 0xc2, - 0x43, 0xff, 0x8b, 0x21, 0xff, 0xea, 0xa0, 0x5d, - 0xff, 0xfc, 0x54, 0x3f, 0xfd, 0x5a, 0x1d, 0xff, - 0xfc, 0x44, 0x3f, 0xf8, 0xad, 0xff, 0xfc, 0x24, - 0x3f, 0xf9, 0xe, 0x1f, 0xfc, 0xa9, 0xf, 0xfe, - 0x15, 0xe9, 0xf, 0xfe, 0x14, 0x1f, 0xfc, 0x7a, - 0x7, 0xff, 0x29, 0x41, 0xff, 0xc1, 0xb4, 0x3f, - 0xfb, 0x32, 0x1f, 0xfc, 0xb8, 0x3f, 0xf8, 0xe, - 0x87, 0xff, 0x22, 0xf, 0xfe, 0x2e, 0x87, 0xff, - 0x2e, 0xf, 0xfe, 0x5, 0x3, 0xff, 0x94, 0x87, - 0xff, 0xd, 0xc3, 0xff, 0x9a, 0x87, 0xfd, 0x21, - 0xff, 0xca, 0x83, 0xff, 0x87, 0x40, 0xff, 0xe6, - 0xc1, 0xff, 0x48, 0x7f, 0xf2, 0xd0, 0xff, 0xe1, - 0x68, 0x7f, 0xf3, 0x90, 0xff, 0x48, 0x7f, 0xf2, - 0xd0, 0xff, 0xe0, 0xb8, 0x7f, 0xf3, 0xe0, 0xff, - 0x28, 0x3f, 0xf9, 0x90, 0x7f, 0xf0, 0x28, 0x1f, - 0xfd, 0x4, 0x3f, 0xd0, 0x7f, 0xf3, 0x10, 0xff, - 0xe0, 0x68, 0x7f, 0xf4, 0x10, 0xff, 0x41, 0xff, - 0xcd, 0x83, 0xfc, 0xe1, 0xff, 0xd2, 0xc3, 0xfc, - 0x87, 0xff, 0x5d, 0x83, 0xff, 0xa6, 0x87, 0xf2, - 0x1f, 0xfc, 0xd8, 0x3f, 0xa8, 0x1f, 0xfd, 0x34, - 0x3f, 0xd0, 0x7f, 0xf3, 0x50, 0xfd, 0xa1, 0xff, - 0xf8, 0x83, 0xe7, 0xf, 0xfe, 0xb6, 0x1f, 0xc8, - 0x7f, 0xf3, 0x50, 0xf5, 0x3, 0xff, 0xae, 0x87, - 0xf6, 0x1f, 0xfc, 0xc8, 0x3d, 0xa1, 0xff, 0xe2, - 0x43, 0xff, 0x98, 0x86, 0x70, 0xff, 0xff, 0x82, - 0x81, 0xff, 0xfe, 0x81, 0xa1, 0xff, 0xff, 0x7c, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xfe, 0x7a, 0x1f, - 0x90, 0xff, 0xfd, 0x48, 0x79, 0x83, 0xff, 0xe0, - - /* U+E90F "" */ - 0xf, 0xfe, 0x63, 0x7f, 0xff, 0x16, 0x81, 0xff, - 0xe4, 0xe4, 0x3f, 0xf8, 0xaa, 0xd0, 0xff, 0xf0, - 0xe1, 0xff, 0xcb, 0x83, 0xff, 0xc0, 0x87, 0xff, - 0x36, 0xf, 0xfe, 0xfe, 0x1f, 0xfc, 0xd4, 0x3f, - 0xfb, 0x6b, 0xc1, 0xff, 0xce, 0x5c, 0x1f, 0xfd, - 0x5b, 0xac, 0x1f, 0xfc, 0xfa, 0xde, 0x43, 0xff, - 0xa0, 0xe8, 0x7f, 0xf6, 0xa8, 0x1f, 0xfc, 0xe6, - 0xf, 0xfe, 0xeb, 0x7, 0xff, 0x36, 0xf, 0xfe, - 0xfa, 0x1f, 0xfc, 0xc8, 0x3f, 0xfc, 0x38, 0x7f, - 0xf2, 0xd0, 0xef, 0xff, 0xeb, 0x87, 0xff, 0x41, - 0xe, 0xc3, 0xff, 0xaf, 0x87, 0x21, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0x9, - 0xe0, 0xff, 0xfa, 0xbc, 0x3a, 0x1f, 0xff, 0x17, - 0x83, 0xad, 0xf, 0xff, 0x75, 0x3, 0xfa, 0x81, - 0xff, 0xeb, 0xb4, 0x3f, 0xe7, 0x83, 0xff, 0xce, - 0xe8, 0x7f, 0xf0, 0xdd, 0xf, 0xff, 0x1b, 0xc1, - 0xff, 0xc7, 0xb4, 0x3f, 0xfc, 0x1c, 0x1f, 0xfc, - 0xba, 0x7, 0xff, 0x76, 0xc3, 0xff, 0x9c, 0xf0, - 0x7f, 0xf6, 0x6d, 0xf, 0xfe, 0x8b, 0xa1, 0xff, - 0xd6, 0xd0, 0xff, 0xea, 0xd8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xfc, 0x58, 0x3f, 0xfc, 0x70, - 0x7f, 0xf1, 0xdc, 0x3f, 0xfc, 0xba, 0x1f, 0xfc, - 0x4a, 0x7, 0xff, 0x9e, 0x81, 0xff, 0xc1, 0x74, - 0x3f, 0xfd, 0x2e, 0x87, 0xfa, 0x81, 0xff, 0xed, - 0xa0, 0x7e, 0xd0, 0xff, 0xf7, 0xb8, 0x7f, 0xff, - 0xc1, 0x7, 0xff, 0xc6, 0xf, 0x90, 0xff, 0xf8, - 0xa1, 0xfa, 0xf, 0xff, 0x7c, 0x1f, 0xc8, 0x7f, - 0xfb, 0xd0, 0xff, 0x41, 0xff, 0xed, 0x83, 0xfe, - 0x43, 0xff, 0xda, 0x87, 0xff, 0x2, 0xf, 0xff, - 0x5c, 0x1f, 0xfc, 0x14, 0x3f, 0xfd, 0x68, 0x7f, - 0xf0, 0xa0, 0xff, 0xf4, 0xc1, 0xff, 0xc3, 0x43, - 0xff, 0xd2, 0x87, 0xff, 0x12, 0xf, 0xff, 0x3c, - 0x1f, 0xfc, 0x54, 0x3f, 0xfc, 0xca, 0xf, 0xfe, - 0x34, 0x1f, 0xfe, 0x58, 0x3f, 0xf8, 0xe8, 0x7f, - 0xf9, 0x10, 0xff, 0xe4, 0xc1, 0xff, 0xe3, 0x83, - 0xff, 0x92, 0x87, 0xff, 0x89, 0xf, 0xfe, 0x5c, - 0x1f, 0xfe, 0x18, 0x3f, 0xf9, 0x68, 0x7f, 0xf8, - 0x10, 0xff, 0xe6, 0xc1, 0xff, 0xdf, 0x83, 0xff, - 0x9a, 0x87, 0xff, 0x4d, 0x70, 0x7c, 0x87, 0xff, - 0x3e, 0xc, 0xdf, 0xe9, 0xf, 0xfe, 0x3, 0x7a, - 0xb7, 0xa4, 0x28, 0x3f, 0xf9, 0xe8, 0x1e, 0x43, - 0xcd, 0xc1, 0xf9, 0xe4, 0x3f, 0x36, 0xa0, 0xff, - 0xe8, 0xdc, 0x1f, 0xfc, 0x7, 0x83, 0xb8, 0x3f, - 0xf8, 0x54, 0xf, 0xfe, 0x8a, 0x1f, 0xfc, 0x47, - 0x3, 0x87, 0xff, 0xdb, 0xa0, 0x7f, 0xfe, 0x10, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xfe, 0x1d, 0x10, 0xff, 0xe2, - 0xb5, 0x90, 0xff, 0xe3, 0x35, 0x21, 0xff, 0xc6, - 0x61, 0x56, 0x87, 0xff, 0x6, 0xe5, 0xd7, 0x7, - 0xff, 0x5, 0xf4, 0xb5, 0xe4, 0x3f, 0xf8, 0xf, - 0xa4, 0x3a, 0x81, 0xfe, 0x74, 0x3f, 0x3a, 0x1f, - 0xee, 0xf, 0xea, 0x7, 0xfa, 0x81, 0xfe, 0x74, - 0x3e, 0x60, 0xff, 0xe0, 0x48, 0x7e, 0xc3, 0xff, - 0x80, 0xc1, 0xfb, 0x43, 0xff, 0x83, 0x21, 0xd4, - 0xf, 0xfe, 0x15, 0x3, 0x9c, 0x3f, 0xf8, 0x4e, - 0x1e, 0xc3, 0xff, 0x89, 0x45, 0xb4, 0x3e, 0x43, - 0xf3, 0xa0, 0xa0, 0x7f, 0xf1, 0x79, 0x56, 0x1f, - 0xdc, 0x1f, 0x35, 0x7, 0xd7, 0x78, 0x3f, 0x5e, - 0x43, 0xd7, 0xe0, 0xfc, 0xd1, 0xf, 0x3e, 0x3, - 0x87, 0xff, 0x13, 0x43, 0x68, 0x7f, 0xf0, 0xe4, - 0x36, 0x87, 0xff, 0xd, 0x83, 0xd8, 0x7f, 0xf0, - 0xb0, 0xfa, 0x43, 0xff, 0x83, 0xa1, 0xe9, 0xf, - 0xfe, 0xd, 0x3, 0xf6, 0x87, 0xf9, 0xc3, 0xfa, - 0x81, 0xfe, 0x70, 0xfe, 0xa0, 0x7f, 0xda, 0x1f, - 0xeb, 0x43, 0xcf, 0x7, 0xfc, 0xf0, 0x79, 0xe0, - 0xff, 0x9d, 0xf, 0x36, 0x1f, 0xfc, 0x2b, 0xfd, - 0x7, 0xff, 0xd, 0xff, 0x41, 0xff, 0xc3, 0xbf, - 0xd2, 0x1f, 0x80, - - /* U+E910 "" */ - 0x2f, 0x7, 0xff, 0x3, 0xff, 0xfd, 0xcc, 0x83, - 0xf, 0xff, 0xc4, 0xa0, 0xc8, 0x7f, 0xfd, 0xa4, - 0x3f, 0xff, 0x92, 0x1f, 0xff, 0xc5, 0x7, 0xff, - 0xf1, 0x83, 0xff, 0xf8, 0xc1, 0xff, 0xfd, 0x83, - 0xff, 0xfb, 0x87, 0xff, 0xf7, 0xf, 0xff, 0xee, - 0x1f, 0xff, 0xdc, 0x3f, 0xff, 0xb8, 0x7f, 0xff, - 0x60, 0xff, 0xfe, 0xc8, 0x7f, 0xff, 0x24, 0x3f, - 0xff, 0x8a, 0xf, 0xff, 0xe3, 0x7, 0xff, 0xf1, - 0x83, 0xff, 0xf8, 0xc1, 0xff, 0xfd, 0x83, 0xff, - 0xfb, 0x7, 0xff, 0xfa, 0xf, 0xff, 0xfe, 0x1f, - 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0x7f, 0xff, 0xf0, - 0xff, 0xff, 0xc1, 0xff, 0xfe, 0x60, 0xff, 0xff, - 0x30, 0x7f, 0xff, 0x98, 0x3f, 0xff, 0xca, 0xf, - 0xff, 0xf4, 0x87, 0xff, 0xfa, 0x43, 0xff, 0xfd, - 0x7, 0xff, 0xff, 0xf, 0xff, 0xfe, 0x1f, 0xff, - 0xfc, 0x3f, 0xff, 0xf8, 0x7f, 0xff, 0xf0, 0xff, - 0xff, 0xc1, 0xff, 0xfe, 0x60, 0xff, 0xe2, 0xaf, - 0xff, 0xb4, 0x43, 0xff, 0x89, 0x5f, 0xfe, 0xe4, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0x43, 0x21, 0xff, 0xf9, 0x90, 0x61, 0xff, - 0xfa, - - /* U+E911 "" */ - 0x3f, 0x57, 0x2e, 0xf, 0xff, 0x4a, 0xf5, 0x77, - 0xd0, 0x72, 0xf5, 0x6f, 0xfe, 0xae, 0x5c, 0x1f, - 0xfc, 0x55, 0xea, 0xdf, 0xfd, 0x5c, 0xbc, 0x16, - 0x21, 0xff, 0xc9, 0x5e, 0xad, 0xfd, 0x7, 0xbf, - 0xab, 0x97, 0x7, 0xff, 0xc1, 0xe, 0x83, 0xff, - 0xb0, 0x98, 0x7f, 0xf7, 0x70, 0xff, 0xed, 0x21, - 0xff, 0xd6, 0x70, 0xe7, 0x43, 0xff, 0xaa, 0x87, - 0xff, 0x5e, 0xe0, 0xfd, 0x68, 0x7f, 0xf4, 0xf0, - 0x90, 0xff, 0xe8, 0xda, 0x1f, 0xfc, 0xb, 0x43, - 0xff, 0xe0, 0xda, 0x1f, 0xfc, 0x4b, 0x83, 0xff, - 0x9e, 0x85, 0x87, 0xff, 0x31, 0xe4, 0x3f, 0xf9, - 0xf, 0x7, 0xff, 0x45, 0xf, 0xfe, 0x53, 0xc1, - 0xff, 0xcd, 0x78, 0x3f, 0xf9, 0x48, 0x7f, 0xf3, - 0x5e, 0xf, 0xfe, 0x8b, 0xe0, 0xff, 0xe4, 0x61, - 0xc8, 0x7f, 0xf1, 0xe0, 0xff, 0xeb, 0x21, 0xff, - 0xe1, 0x43, 0xff, 0xac, 0x87, 0xff, 0x1d, 0xe, - 0xc3, 0xff, 0x8f, 0x21, 0xff, 0xd4, 0x83, 0xff, - 0x9c, 0x87, 0xff, 0x22, 0x81, 0xff, 0xd2, 0xd0, - 0xff, 0xe3, 0xa1, 0xff, 0xd0, 0x60, 0xff, 0xe8, - 0x61, 0xff, 0xc9, 0xc3, 0xe4, 0x3f, 0xf9, 0x2e, - 0x1f, 0xfc, 0xd7, 0xf, 0xff, 0x56, 0x1f, 0xfc, - 0xba, 0x7, 0xff, 0x2d, 0xf, 0xb0, 0xff, 0xe6, - 0x68, 0x7f, 0xf2, 0x24, 0x3f, 0xfa, 0x88, 0x7f, - 0xdc, 0x1f, 0xfc, 0x9, 0xf, 0xfe, 0x36, 0x87, - 0xff, 0x2, 0x81, 0xfe, 0x43, 0xff, 0x8f, 0x8e, - 0x1f, 0xfc, 0xa, 0x7, 0xff, 0x13, 0xf, 0xfe, - 0x3, 0xac, 0x1f, 0xd8, 0x7f, 0x21, 0xff, 0xc1, - 0xc3, 0xff, 0x80, 0xc1, 0xff, 0xc1, 0x70, 0xff, - 0xe0, 0x30, 0x58, 0x7f, 0xf1, 0xf0, 0xfc, 0x87, - 0x68, 0x7f, 0xce, 0x1f, 0xf3, 0x7, 0xff, 0x2, - 0x81, 0x90, 0xfe, 0x43, 0xff, 0x8d, 0x87, 0xa4, - 0x3f, 0xf8, 0x18, 0x7f, 0x30, 0x7f, 0xf0, 0x34, - 0x3c, 0x87, 0xff, 0x19, 0xf, 0xc8, 0x7d, 0x40, - 0xff, 0xe0, 0x61, 0xf3, 0x7, 0xff, 0x3, 0xf, - 0xd8, 0x7c, 0x87, 0xff, 0x19, 0xf, 0xe6, 0xf, - 0xfe, 0x6, 0x1c, 0xc1, 0xff, 0x38, 0x7f, 0x21, - 0xf6, 0x1f, 0xf2, 0x1e, 0xc3, 0xfc, 0xe1, 0xff, - 0xc0, 0x83, 0x41, 0xff, 0x30, 0x7f, 0xf1, 0x90, - 0xff, 0xb0, 0xf2, 0x1f, 0xfc, 0xc, 0x3f, 0xe5, - 0x3, 0xf, 0xfa, 0x81, 0xff, 0xc0, 0x43, 0xff, - 0xb7, 0xa1, 0xfe, 0x84, 0x3f, 0xe9, 0xf, 0xfe, - 0xe, 0x1f, 0xfc, 0x64, 0x39, 0xf, 0xfe, 0x1c, - 0x87, 0xfb, 0x83, 0xfd, 0xa1, 0xff, 0xc2, 0x43, - 0x90, 0xff, 0xe3, 0x41, 0xff, 0xc4, 0x90, 0xff, - 0xe4, 0x41, 0xff, 0xc5, 0x43, 0x61, 0xff, 0xc1, - 0x43, 0xff, 0x95, 0x7, 0xff, 0x1e, 0x43, 0xff, - 0x8b, 0x86, 0x43, 0xff, 0x83, 0x84, 0x87, 0xff, - 0x1f, 0xf, 0xfe, 0x2a, 0x83, 0xff, 0x8c, 0x87, - 0xff, 0x2b, 0xf, 0xfe, 0x44, 0x1f, 0xfc, 0x48, - 0x3f, 0xfb, 0x48, 0x48, 0x7f, 0xf2, 0x10, 0xff, - 0xe1, 0xc1, 0xff, 0xc9, 0x80, 0x87, 0xff, 0xf, - 0xb0, 0xff, 0xe5, 0x61, 0xff, 0xc2, 0x43, 0xff, - 0x92, 0xd4, 0x1f, 0xfc, 0x44, 0x3f, 0xf9, 0x88, - 0x7f, 0xf0, 0x20, 0xff, 0xe5, 0xa8, 0x3f, 0xfb, - 0xd8, 0x7f, 0xf0, 0x10, 0xff, 0xfb, 0xa1, 0xff, - 0x41, 0xff, 0xf9, 0x43, 0xfc, 0x87, 0xff, 0xe7, - 0xf, 0xff, 0xf8, 0x72, 0x1f, 0xc8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xf6, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x81, 0xf, 0xff, 0xf8, 0x7f, 0xf0, - 0x90, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xf4, - 0x50, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xfe, 0x30, 0xfc, 0x87, - 0xff, 0xed, 0x97, 0xd8, 0x7f, 0xf6, 0x0, - - /* U+E912 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf5, 0x9f, 0x7, 0xff, - 0xfc, 0x14, 0x2, 0x1f, 0xff, 0xfd, 0xf, 0xff, - 0xf8, 0x1c, 0x39, 0xf, 0xff, 0xe5, 0x3, 0xa0, - 0xff, 0xfe, 0x68, 0x79, 0xf, 0xff, 0xd3, 0x87, - 0xd0, 0x7f, 0xfe, 0x98, 0x3f, 0x21, 0xff, 0xf9, - 0xa0, 0x7e, 0x43, 0xff, 0xf3, 0xa1, 0xfd, 0x7, - 0xff, 0xdd, 0xc3, 0xfc, 0x87, 0xff, 0xde, 0x81, - 0xff, 0x41, 0xff, 0xf6, 0xd0, 0xff, 0x90, 0xff, - 0xfa, 0xb8, 0x7f, 0xf0, 0x70, 0xff, 0xfa, 0x50, - 0x3f, 0xf8, 0x48, 0x7f, 0xfc, 0xe4, 0x3f, 0xf8, - 0x50, 0x7f, 0xfc, 0xf4, 0x3f, 0xf8, 0x68, 0x7f, - 0xfc, 0x5c, 0x3f, 0xf8, 0xb0, 0x7f, 0xfc, 0x28, - 0x1f, 0xfc, 0x67, 0xff, 0xf8, 0x52, 0x1f, 0xfd, - 0xfd, 0xf, 0xfe, 0xb3, 0x7a, 0xf, 0xfe, 0xd3, - 0x87, 0xff, 0x71, 0xf2, 0x1f, 0xfc, 0xdb, 0xe0, - 0xea, 0x7, 0xff, 0x82, 0xd0, 0xff, 0xe5, 0x67, - 0x98, 0x25, 0x7, 0xff, 0x8e, 0x81, 0xff, 0xc8, - 0xe8, 0x8, 0x80, 0xc1, 0xff, 0xe4, 0x74, 0x3f, - 0xf8, 0x8f, 0x21, 0xa5, 0x1, 0x83, 0xff, 0xcb, - 0x40, 0xff, 0xe1, 0x36, 0x87, 0xb8, 0x27, 0xf, - 0xff, 0x2b, 0x7, 0xff, 0x2, 0x98, 0x7f, 0x21, - 0xda, 0x1f, 0xfe, 0x46, 0xf, 0xf6, 0x61, 0xfc, - 0xa0, 0xf5, 0x3, 0xff, 0x8d, 0x7f, 0xff, 0x6, - 0x43, 0xff, 0x84, 0xa0, 0xfd, 0xb0, 0x7f, 0x36, - 0x1f, 0x38, 0x7f, 0xf1, 0x50, 0xff, 0xe0, 0xb7, - 0x90, 0xff, 0xe0, 0x48, 0x7b, 0xa0, 0x7f, 0x5e, - 0xf, 0xf6, 0x87, 0xff, 0xd, 0xf, 0xfe, 0x2d, - 0x87, 0xff, 0x2, 0xe, 0xe4, 0x3f, 0xa2, 0xf, - 0xfe, 0x5, 0x3, 0xff, 0x85, 0x7, 0xff, 0x1f, - 0x83, 0xfe, 0x82, 0xe4, 0x3f, 0xbd, 0x7, 0xff, - 0x9, 0xc3, 0xff, 0x84, 0x87, 0xff, 0x1d, 0x83, - 0xfc, 0x83, 0x90, 0xfe, 0xf2, 0x1f, 0xfc, 0x5d, - 0xf, 0xfe, 0x4, 0x1f, 0xfc, 0x87, 0xf, 0xf7, - 0x28, 0x3f, 0x3e, 0xf, 0xfe, 0x45, 0x3, 0xff, - 0x80, 0x87, 0xff, 0x26, 0xf, 0xf3, 0x7, 0xe7, - 0xc1, 0xff, 0xca, 0x70, 0xff, 0xa0, 0xff, 0xe4, - 0xa8, 0x3f, 0xf8, 0xd7, 0x7, 0xff, 0x37, 0xf, - 0xfe, 0xac, 0x1f, 0xfc, 0x58, 0x83, 0xff, 0x9f, - 0xa1, 0xfd, 0x7, 0xff, 0x2a, 0xf, 0xe4, 0x39, - 0x20, 0xff, 0xe8, 0xd0, 0x3f, 0x21, 0xff, 0xca, - 0x43, 0xfa, 0xc, 0xd0, 0x3f, 0xfa, 0x6e, 0x1f, - 0xa0, 0xff, 0xe5, 0x41, 0xff, 0xc1, 0xb0, 0xff, - 0xeb, 0x68, 0x79, 0xf, 0xfe, 0x52, 0x1f, 0xc8, - 0x28, 0x1f, 0xfd, 0x8a, 0x7, 0x90, 0xff, 0xe5, - 0x21, 0xff, 0x28, 0x3f, 0xfb, 0x2e, 0x1d, 0x7, - 0xff, 0x2b, 0xf, 0xd9, 0x40, 0xff, 0xee, 0x68, - 0x64, 0x3f, 0xfa, 0x8a, 0xf, 0xfe, 0xed, 0x3, - 0xff, 0x9a, 0x87, 0xe6, 0x81, 0xff, 0xdf, 0x75, - 0x83, 0xff, 0xa6, 0xa0, 0xff, 0xf0, 0xd0, 0x3f, - 0xfa, 0x88, 0x7f, 0xff, 0xc3, 0xb0, 0xff, 0xff, - 0x87, 0x21, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xfc, 0x14, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xb4, 0x87, 0xff, - 0xfc, 0x3d, 0x7, 0xd8, 0x7f, 0xf1, 0x80, - - /* U+E913 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xfb, 0x3c, 0x87, 0xff, - 0xfc, 0x10, 0x28, 0x1f, 0xff, 0xf3, 0x9, 0xc3, - 0xff, 0xfe, 0x87, 0x68, 0x7f, 0xff, 0xa0, 0xe9, - 0xf, 0xff, 0xea, 0x1e, 0xa0, 0x7f, 0xff, 0x50, - 0xf3, 0x87, 0xff, 0xf2, 0xf, 0xda, 0x1f, 0xff, - 0xb4, 0x3f, 0x50, 0x3f, 0xff, 0x50, 0x7f, 0x38, - 0x7f, 0xfe, 0x90, 0xff, 0x68, 0x7f, 0xfe, 0x30, - 0xff, 0xa4, 0x3f, 0xfe, 0xe8, 0x7f, 0xf0, 0x28, - 0x1f, 0xff, 0x78, 0x3f, 0xf8, 0xe, 0x1f, 0xff, - 0x64, 0x3f, 0xf8, 0x5a, 0x1f, 0xff, 0x58, 0x3f, - 0xf8, 0x54, 0xf, 0xff, 0xf8, 0x73, 0x87, 0xff, - 0xce, 0xf, 0xfe, 0x2e, 0x87, 0xff, 0x86, 0x9f, - 0xff, 0xc2, 0xf, 0xfe, 0x3d, 0x3, 0xff, 0xb8, - 0xde, 0x50, 0x7f, 0xf5, 0x98, 0x3f, 0x5e, 0x83, - 0xff, 0x9a, 0xf2, 0x1f, 0xfd, 0xb7, 0xf, 0x47, - 0x8c, 0x3f, 0xf9, 0x4f, 0x7, 0xff, 0x83, 0x42, - 0x88, 0x14, 0xc3, 0xff, 0x91, 0x40, 0xff, 0xf1, - 0xc8, 0xa8, 0x33, 0x68, 0x7f, 0xf1, 0x1d, 0xf, - 0xff, 0x24, 0x96, 0x1e, 0x79, 0xf, 0xfe, 0x13, - 0x7, 0xff, 0x97, 0x40, 0x87, 0xf7, 0x40, 0xff, - 0xe0, 0x50, 0x3f, 0xfc, 0x8e, 0x19, 0x41, 0xfd, - 0x90, 0x7f, 0xa4, 0x3f, 0xfc, 0x94, 0xe, 0xe4, - 0x3f, 0xaf, 0x7, 0xe5, 0x7, 0xff, 0x5, 0xbf, - 0xff, 0x84, 0x87, 0xff, 0x1b, 0x43, 0xef, 0x41, - 0xfc, 0xd8, 0x7d, 0x7, 0xff, 0x1, 0xe4, 0x3f, - 0xf8, 0x58, 0x7f, 0xf1, 0x1c, 0x3f, 0xd1, 0x87, - 0xf3, 0x61, 0xd8, 0x7f, 0xcf, 0x7, 0xff, 0x17, - 0xf, 0xfe, 0x1b, 0x7, 0xff, 0x2, 0x98, 0x7f, - 0x36, 0x14, 0x1f, 0xf5, 0x3, 0xff, 0x8e, 0x87, - 0xff, 0xa, 0x81, 0xff, 0xc2, 0x7c, 0x87, 0xe6, - 0xc0, 0x87, 0xfb, 0x43, 0xff, 0x8e, 0x87, 0xff, - 0xb, 0x43, 0xff, 0x8b, 0xc8, 0x7e, 0x55, 0x3, - 0xfd, 0x87, 0xff, 0x26, 0xf, 0xfe, 0x3, 0x87, - 0xff, 0x23, 0xd0, 0x7e, 0x94, 0x1f, 0xd8, 0x7f, - 0xf2, 0x50, 0xff, 0xe0, 0x50, 0x3f, 0xf9, 0x51, - 0x7, 0xff, 0x1a, 0xf, 0xfe, 0x54, 0x1f, 0xf6, - 0x87, 0xff, 0x32, 0x20, 0xff, 0xe2, 0x28, 0x3f, - 0xf9, 0x28, 0x7f, 0x9c, 0x3f, 0xf9, 0xf1, 0x7, - 0x21, 0xfd, 0x7, 0xff, 0x2a, 0xf, 0xea, 0x7, - 0xff, 0x46, 0x50, 0x6c, 0x3f, 0x21, 0xff, 0xd4, - 0xd0, 0xff, 0xe9, 0xf0, 0x64, 0x3f, 0x41, 0xff, - 0xca, 0x83, 0xe7, 0xf, 0xfe, 0xb5, 0x3, 0xff, - 0xae, 0x87, 0x98, 0x3f, 0xfa, 0xea, 0x2, 0x1f, - 0x90, 0xff, 0xe5, 0x41, 0xea, 0x7, 0xff, 0x67, - 0x8c, 0x3f, 0x61, 0xff, 0xca, 0x43, 0xb4, 0x3f, - 0xfc, 0xc8, 0x7f, 0xf2, 0x50, 0xce, 0x1f, 0xfd, - 0xde, 0xf, 0xfe, 0xbd, 0x3, 0xff, 0xbc, 0xb0, - 0x7f, 0xf4, 0x96, 0xd0, 0xff, 0xf0, 0x21, 0xff, - 0xd4, 0xa0, 0x7f, 0xf8, 0xb0, 0xff, 0xff, 0x87, - 0x21, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xce, 0x1f, 0x61, 0xff, - 0xea, - - /* U+E914 "" */ - 0xf, 0xff, 0xfd, 0xff, 0x56, 0x5c, 0x1f, 0xfe, - 0xfc, 0x3e, 0x5d, 0x5b, 0xff, 0xab, 0x97, 0x7, - 0xff, 0xd9, 0x7a, 0xb7, 0xff, 0x41, 0xff, 0xd3, - 0x43, 0xff, 0xbc, 0xc1, 0xff, 0xfe, 0x43, 0xff, - 0xa6, 0x87, 0xff, 0x7a, 0xf, 0xfe, 0x9e, 0x1f, - 0xfd, 0xc6, 0x43, 0xff, 0xf4, 0xf2, 0x1f, 0xfd, - 0x44, 0x3f, 0xfb, 0xf, 0x7, 0xff, 0xea, 0xe0, - 0xff, 0xed, 0x21, 0xff, 0xd3, 0xb4, 0x3f, 0xfb, - 0x98, 0x7f, 0xf4, 0x6d, 0xf, 0xff, 0xcb, 0xe4, - 0x3f, 0xfc, 0x8, 0x7f, 0xf3, 0x1e, 0xf, 0xff, - 0xe4, 0x1f, 0xfe, 0x64, 0x3f, 0xff, 0xd8, 0x7f, - 0xf2, 0xd0, 0xff, 0xff, 0x50, 0x3f, 0xfc, 0xa8, - 0x7f, 0xf3, 0x18, 0x3f, 0xfb, 0x17, 0xa0, 0xff, - 0xeb, 0x38, 0x7f, 0xf5, 0xb7, 0xcc, 0x1f, 0x90, - 0xff, 0xe7, 0x61, 0xff, 0xd4, 0xdc, 0x1b, 0x7, - 0xd8, 0x7f, 0xf3, 0xf4, 0x3f, 0xfa, 0xf, 0x40, - 0xda, 0x83, 0xff, 0xaf, 0x40, 0xff, 0xe7, 0x34, - 0x43, 0xd4, 0xf, 0x21, 0xff, 0xd1, 0x60, 0xff, - 0xe6, 0x53, 0x43, 0xe6, 0xc3, 0xff, 0x8f, 0x68, - 0x7f, 0xf0, 0x9c, 0x3f, 0xf9, 0x53, 0x87, 0xf9, - 0xf, 0x90, 0xff, 0xa4, 0xa0, 0x7f, 0xf0, 0xf0, - 0xff, 0xe4, 0x66, 0x1f, 0xfc, 0x7c, 0x3f, 0xe4, - 0x27, 0xf, 0xfe, 0x1e, 0x87, 0xff, 0x17, 0x60, - 0xff, 0xe0, 0x78, 0x3f, 0xf9, 0x98, 0x7f, 0xf0, - 0xe4, 0x3f, 0xf8, 0x4f, 0x40, 0xff, 0x9f, 0x7, - 0xc8, 0x7f, 0x90, 0xfb, 0x43, 0xff, 0x85, 0x21, - 0xff, 0xc0, 0x68, 0x87, 0xfd, 0x4c, 0x3f, 0xf8, - 0xf8, 0x7e, 0x90, 0xff, 0xe1, 0x48, 0x7f, 0x9b, - 0x43, 0xfe, 0x8c, 0x3f, 0xc8, 0x7f, 0x21, 0xfd, - 0x40, 0xff, 0xe1, 0x48, 0x7e, 0x6c, 0x3f, 0xf8, - 0x19, 0x7, 0xfd, 0x87, 0xe4, 0x3f, 0xe6, 0xf, - 0xfe, 0x14, 0x1f, 0xac, 0x3f, 0xf8, 0x1d, 0x3, - 0xff, 0x93, 0x87, 0xff, 0x1, 0xc3, 0xff, 0x85, - 0x87, 0xb8, 0x3f, 0xe7, 0x90, 0xff, 0xe0, 0xa1, - 0xf9, 0xf, 0xfe, 0x16, 0x1f, 0xfc, 0x2c, 0x34, - 0xa0, 0xff, 0x36, 0x87, 0xff, 0x6f, 0x43, 0xff, - 0x83, 0x1, 0x50, 0x7f, 0xa9, 0x87, 0xff, 0x15, - 0xf, 0x21, 0xff, 0xc5, 0x90, 0xff, 0xe0, 0x20, - 0xb0, 0xff, 0x46, 0x1f, 0xfc, 0x6c, 0x3d, 0x7, - 0xff, 0x1a, 0x81, 0xff, 0xc0, 0xe4, 0x3f, 0xd1, - 0x7, 0xff, 0x89, 0x41, 0xff, 0xc0, 0x60, 0xfe, - 0x88, 0x3f, 0xf9, 0x8, 0x72, 0x1f, 0xfc, 0x99, - 0xf, 0xfe, 0x4a, 0xa0, 0xff, 0xe7, 0xe1, 0xff, - 0xca, 0x83, 0xff, 0x80, 0x87, 0xcd, 0x87, 0xff, - 0x2d, 0xc, 0x87, 0xff, 0x2f, 0xf, 0xfa, 0xf, - 0xa8, 0x1f, 0xfc, 0xcc, 0x24, 0x3f, 0xf9, 0xb0, - 0x7f, 0xc8, 0x74, 0xa0, 0xff, 0xe6, 0x21, 0x61, - 0xff, 0xcd, 0x43, 0xfe, 0xc3, 0x98, 0x3f, 0xf9, - 0xdd, 0x10, 0xff, 0xe7, 0x41, 0xfe, 0x43, 0x50, - 0x3f, 0xfa, 0xa, 0xf, 0xfe, 0x7a, 0x1f, 0xf2, - 0x12, 0x83, 0xff, 0xdd, 0x7, 0xfb, 0x4, 0x87, - 0xff, 0xbd, 0xf, 0xf2, 0x6, 0xf, 0xff, 0x82, - 0x1f, 0xf2, 0x83, 0xff, 0xe3, 0x87, 0xf9, 0xf0, - 0x7f, 0xfc, 0x50, 0xff, 0x6a, 0xf, 0xff, 0xe2, - 0x1f, 0xff, 0x44, 0x3f, 0xff, 0xd8, 0x7f, 0x90, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xcd, 0xf, 0xf4, 0x1f, 0xff, - 0x48, 0x3f, 0x41, 0xff, 0xca, - - /* U+E915 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xfb, 0x57, 0x57, 0x7f, - 0xc1, 0xff, 0xdc, 0x5d, 0x5d, 0xff, 0xd5, 0x97, - 0x83, 0xc8, 0x7f, 0xf4, 0xaf, 0xfe, 0xac, 0xbc, - 0x1f, 0xfc, 0xcc, 0x3f, 0xfa, 0x32, 0x1f, 0xfd, - 0xe4, 0x3f, 0xfa, 0x28, 0x7f, 0xff, 0x60, 0xff, - 0xef, 0x21, 0xff, 0xd2, 0x74, 0x3f, 0xff, 0xb6, - 0x87, 0xff, 0x6b, 0xf, 0xfe, 0xb5, 0xa1, 0xff, - 0xd8, 0x43, 0xff, 0xb1, 0x70, 0x7f, 0xff, 0x5e, - 0xf, 0xfe, 0x9a, 0x1f, 0xfd, 0xd7, 0x90, 0xff, - 0xfe, 0x36, 0x87, 0xff, 0x3b, 0xf, 0xff, 0x15, - 0xa1, 0xff, 0xcc, 0x43, 0xff, 0xc9, 0x7, 0xff, - 0xfc, 0x3f, 0xf9, 0x48, 0x7f, 0xf9, 0x50, 0xff, - 0xfe, 0x50, 0x3f, 0xf9, 0x78, 0x7d, 0x7a, 0xf, - 0xfe, 0xc4, 0x87, 0xff, 0x31, 0xf, 0x2a, 0xcc, - 0x3f, 0xfa, 0xda, 0x1f, 0xfd, 0x36, 0xd2, 0x74, - 0x3f, 0xfa, 0x78, 0x7f, 0xf3, 0x90, 0xf5, 0x3, - 0x54, 0x87, 0xff, 0x41, 0xc3, 0xff, 0xab, 0xc8, - 0x73, 0xd0, 0x3f, 0xf9, 0xcc, 0x1f, 0xfd, 0xc, - 0x34, 0xa0, 0xfd, 0xb0, 0x7f, 0xf3, 0x28, 0x1f, - 0xfd, 0x14, 0x33, 0x7, 0xfb, 0x30, 0xff, 0xe5, - 0x68, 0x7f, 0xf0, 0x9e, 0xf, 0xfe, 0x32, 0x83, - 0xfe, 0x9c, 0x3f, 0xf9, 0x18, 0x7f, 0xf0, 0xe8, - 0x30, 0x7f, 0xc8, 0x75, 0x10, 0xff, 0xa9, 0xa1, - 0xff, 0xc4, 0x70, 0xff, 0xe1, 0xc8, 0x48, 0x7f, - 0xf1, 0xba, 0x7, 0xfc, 0xd4, 0x1f, 0xfc, 0x26, - 0xf, 0xfe, 0x1e, 0x87, 0xff, 0x13, 0xf, 0xb2, - 0xf, 0xf9, 0xd4, 0x1f, 0xfc, 0x6, 0xf, 0xfe, - 0x1e, 0x1f, 0x21, 0xfe, 0x43, 0xf4, 0x61, 0xff, - 0xc0, 0xe4, 0x3f, 0xcc, 0x1f, 0xfc, 0x27, 0xf, - 0xd0, 0x7f, 0xf2, 0x29, 0x87, 0xff, 0x3, 0x90, - 0xfc, 0xc1, 0xff, 0xc2, 0xa0, 0x7f, 0xf1, 0xd0, - 0xff, 0x9b, 0x43, 0xfe, 0xe4, 0x3e, 0x83, 0xff, - 0x85, 0x21, 0xff, 0x21, 0xff, 0xc9, 0x79, 0xf, - 0xfb, 0x83, 0xd8, 0x7f, 0xf0, 0xb4, 0x3f, 0xf8, - 0x18, 0x7e, 0xc3, 0xff, 0x85, 0xd0, 0x3f, 0xeb, - 0xd, 0x87, 0xff, 0xb, 0xf, 0xfe, 0x12, 0x1f, - 0x90, 0xff, 0xe1, 0xe6, 0x1f, 0xe5, 0x40, 0x43, - 0xff, 0x82, 0xe1, 0xff, 0xdd, 0xa6, 0x1f, 0xe9, - 0x4, 0x1f, 0xfc, 0x6, 0xf, 0xfe, 0x2c, 0x1e, - 0x43, 0xff, 0x8c, 0xd8, 0x7f, 0xaf, 0x7, 0xff, - 0x1, 0x83, 0xff, 0x8c, 0x87, 0xff, 0x39, 0xb0, - 0xfe, 0x43, 0xff, 0x82, 0xc1, 0xff, 0xce, 0xc3, - 0xff, 0x90, 0xa8, 0x3f, 0xf9, 0x2c, 0x1f, 0xfc, - 0x94, 0x39, 0xf, 0xfe, 0x4c, 0xa0, 0xf9, 0xf, - 0xfe, 0x4, 0x1f, 0xfc, 0xac, 0x3f, 0xfa, 0x1c, - 0x1f, 0x41, 0xff, 0x61, 0xff, 0xcb, 0x43, 0x21, - 0xff, 0xcc, 0xb0, 0xff, 0xe2, 0xa1, 0xff, 0xcd, - 0x43, 0xff, 0xa0, 0x88, 0x68, 0x3f, 0xe8, 0x3f, - 0xf9, 0xb8, 0x50, 0x7f, 0xf3, 0x68, 0x19, 0xf, - 0xf4, 0x1f, 0xfc, 0xe6, 0x98, 0x7f, 0xf3, 0x91, - 0x2, 0x1f, 0xf2, 0x1f, 0xfc, 0xf5, 0x7, 0xff, - 0x42, 0x80, 0xc3, 0xfd, 0x7, 0xff, 0xb9, 0x9, - 0xf, 0xf2, 0x1f, 0xfe, 0xf6, 0xf, 0xf9, 0xf, - 0xff, 0x84, 0xa0, 0xff, 0x61, 0xff, 0xf2, 0xc3, - 0xfc, 0x87, 0xff, 0xc5, 0x41, 0xff, 0xff, 0xf, - 0xc8, 0x7f, 0xfc, 0xb0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0x61, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xfe, 0xd8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0x3c, 0x3f, - 0xfe, 0x48, 0x7f, 0x90, 0xff, 0xf9, 0xc1, 0xfa, - 0xf, 0xfe, 0xf8, - - /* U+E916 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf8, 0x14, 0x1f, 0xff, - 0xf0, 0xa8, 0x87, 0xff, 0xfc, 0xc1, 0x7, 0xff, - 0xfe, 0xd, 0x87, 0xff, 0xf5, 0x41, 0xd0, 0x7f, - 0xff, 0x20, 0xf2, 0x83, 0xff, 0xf5, 0x87, 0xe8, - 0x3f, 0xff, 0x30, 0x7f, 0xb0, 0xff, 0xfb, 0xc8, - 0x7f, 0xd0, 0x7f, 0xfd, 0x54, 0x1f, 0xfc, 0x5, - 0x7, 0xff, 0xd2, 0xf, 0xfe, 0x14, 0x1f, 0xff, - 0x3c, 0x3f, 0xf8, 0x98, 0x7f, 0xfc, 0x60, 0xff, - 0xe3, 0x41, 0xff, 0xef, 0x50, 0x7f, 0xf1, 0x94, - 0x1f, 0xfe, 0xe8, 0x3f, 0xf9, 0x12, 0x1f, 0xfe, - 0xcc, 0x3f, 0xf9, 0x50, 0x7f, 0xfa, 0xe0, 0xff, - 0xe6, 0x61, 0xff, 0xe9, 0x50, 0x7f, 0xf3, 0x60, - 0xff, 0xf4, 0x41, 0xff, 0xce, 0x50, 0x7f, 0xf4, - 0x90, 0xff, 0xe3, 0xe1, 0xff, 0xd0, 0x83, 0xff, - 0xa1, 0x7c, 0x1f, 0xfc, 0x5c, 0x3f, 0xfa, 0x58, - 0x7f, 0xf1, 0x7b, 0x43, 0x93, 0xbc, 0x1f, 0xfc, - 0x38, 0x3f, 0xfa, 0x90, 0x7f, 0xf0, 0xfa, 0x72, - 0x13, 0x40, 0xbc, 0x87, 0xff, 0x1, 0x41, 0xff, - 0xd4, 0x50, 0x7f, 0xf0, 0x1f, 0x20, 0xe4, 0x16, - 0x1d, 0xe8, 0x3f, 0xe8, 0x3f, 0xfa, 0xd0, 0x7f, - 0xcd, 0x87, 0x71, 0xe0, 0xfa, 0x20, 0xfe, 0xc3, - 0xff, 0xb1, 0x87, 0xf5, 0xe0, 0xfb, 0xc1, 0xfe, - 0xbc, 0x1f, 0x41, 0xff, 0x3e, 0xf, 0xf7, 0xa0, - 0xff, 0xa0, 0xfb, 0x20, 0xff, 0x30, 0x7f, 0x36, - 0x1c, 0xa0, 0xfe, 0xb8, 0x10, 0x7e, 0x40, 0xf0, - 0x7f, 0x28, 0x3b, 0xa0, 0x7f, 0x4c, 0x41, 0xfc, - 0xf9, 0xa, 0xf, 0xd6, 0x87, 0xff, 0x19, 0xe0, - 0xfd, 0x20, 0x7c, 0x87, 0xf4, 0x45, 0xe0, 0xff, - 0x72, 0x61, 0xe6, 0xd0, 0xff, 0xe5, 0x3e, 0x43, - 0xd0, 0xd8, 0x7f, 0xb2, 0x9, 0xb0, 0xff, 0x76, - 0x1c, 0xf2, 0x1f, 0xfc, 0xfb, 0x43, 0xbb, 0xf, - 0xf7, 0x40, 0xe7, 0xc8, 0x7f, 0x61, 0x9e, 0xf, - 0xfe, 0xa5, 0xa1, 0xb0, 0xfe, 0x7c, 0x87, 0xee, - 0x81, 0xfd, 0x8f, 0x7, 0xff, 0x62, 0xe3, 0xf, - 0xe6, 0xc3, 0xfe, 0xc8, 0x3f, 0xb4, 0x3f, 0xfb, - 0x96, 0x1f, 0xd7, 0x83, 0xff, 0x83, 0x18, 0x7f, - 0x50, 0x3f, 0xfb, 0x54, 0xf, 0xe8, 0x83, 0xff, - 0x87, 0x4c, 0x3f, 0x22, 0x1f, 0xfd, 0x84, 0x43, - 0xf7, 0xa0, 0xff, 0xe2, 0xb6, 0x1f, 0xa8, 0x1f, - 0xfd, 0x8a, 0x7, 0xee, 0x43, 0xff, 0x8e, 0xd8, - 0x7e, 0xa0, 0x7f, 0xf5, 0xa8, 0x1f, 0xa8, 0x87, - 0xff, 0x25, 0x50, 0x7c, 0xa0, 0xff, 0xeb, 0x28, - 0x3e, 0x84, 0x3f, 0xf9, 0x70, 0x87, 0xd4, 0xf, - 0xfe, 0xa5, 0x3, 0xe5, 0x41, 0xff, 0xcd, 0xa0, - 0x7c, 0xa0, 0xff, 0xea, 0x28, 0x3e, 0xb0, 0xff, - 0xe7, 0xd0, 0x3e, 0x50, 0x7f, 0xf4, 0x94, 0x1f, - 0x28, 0x3f, 0xfa, 0xa, 0xf, 0xa8, 0x1f, 0xfd, - 0x2e, 0xf, 0xa8, 0x1f, 0xfd, 0x19, 0xf, 0xfe, - 0xd2, 0x1f, 0x30, 0x7f, 0xf4, 0x98, 0x3e, 0x50, - 0x7f, 0xf4, 0x14, 0x1f, 0x48, 0x7f, 0xf4, 0xd4, - 0x1e, 0xf0, 0x7f, 0xf4, 0x3c, 0x1f, 0x21, 0xff, - 0xd4, 0xf0, 0x79, 0x41, 0xff, 0xd0, 0x50, 0x7a, - 0xc3, 0xff, 0xa8, 0xa0, 0xff, 0xf0, 0x28, 0x3f, - 0xfb, 0xa8, 0x7f, 0xf4, 0x10, 0xff, 0xef, 0x21, - 0xf9, 0xf, 0xfe, 0x72, 0x1f, 0x90, 0xff, 0xeb, - 0xa1, 0xff, 0xde, 0x43, 0xff, 0xbf, 0x87, 0xff, - 0x43, 0xf, 0xb0, 0xff, 0xeb, 0x61, 0xfb, 0xf, - 0xfe, 0x76, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xcb, 0xf, 0xfe, 0x76, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xfe, 0x8, 0x3d, 0x21, 0xf9, 0xf, 0xd8, 0x7f, - 0x41, 0xec, 0x3f, 0xfa, 0xed, 0xfe, 0x83, 0xfd, - 0x7, 0xa4, 0x3f, 0x37, 0xfc, 0x87, 0xff, 0x14, - - /* U+E917 "" */ - 0xf, 0xfe, 0x62, 0x83, 0xff, 0xfe, 0x1a, 0x81, - 0xff, 0xff, 0xb, 0x6, 0x1f, 0xff, 0xf2, 0xd, - 0x87, 0xff, 0xf9, 0x41, 0xd0, 0x7f, 0xff, 0x60, - 0xf2, 0x83, 0xff, 0xf7, 0x87, 0xe8, 0x3f, 0xff, - 0x50, 0x7f, 0xb0, 0xff, 0xfc, 0x48, 0x7f, 0xd0, - 0x7f, 0xfd, 0x94, 0x1f, 0xfc, 0x5, 0x7, 0xff, - 0xd6, 0xf, 0xfe, 0x14, 0x1f, 0xff, 0x4c, 0x3f, - 0xf8, 0x98, 0x7f, 0xfc, 0xa0, 0xff, 0xe3, 0x41, - 0xff, 0xf0, 0x50, 0x7f, 0xf1, 0x94, 0x1f, 0xfe, - 0xf8, 0x3f, 0xf9, 0x12, 0x1f, 0xfe, 0xdc, 0x3f, - 0xf9, 0x50, 0x7f, 0xfb, 0x20, 0xff, 0xe6, 0x61, - 0xff, 0xea, 0x90, 0xff, 0xe6, 0xc1, 0xff, 0xe8, - 0x50, 0x7f, 0xf3, 0x94, 0x1f, 0xfe, 0x78, 0x3f, - 0xfa, 0x10, 0x7f, 0xf9, 0xb0, 0xff, 0xe9, 0x61, - 0xff, 0xe4, 0x83, 0xff, 0xa9, 0x7, 0xff, 0x89, - 0x41, 0xff, 0xd4, 0x50, 0x7f, 0xf8, 0x60, 0xff, - 0xeb, 0x41, 0xff, 0xe0, 0xc3, 0xff, 0xb1, 0x87, - 0xff, 0x7a, 0xf, 0xfe, 0xd4, 0x1f, 0xfd, 0xc5, - 0x7, 0xff, 0x69, 0x83, 0xff, 0xb4, 0xc1, 0xff, - 0xdc, 0x50, 0x7f, 0xf6, 0x60, 0xff, 0xe0, 0x5e, - 0x83, 0xfc, 0xfa, 0xf, 0xfe, 0x4, 0x1f, 0xfd, - 0x8c, 0x3f, 0xeb, 0x40, 0x87, 0xfa, 0x3, 0xc1, - 0xff, 0x61, 0xff, 0xd6, 0x83, 0xf9, 0xb4, 0x3f, - 0xf9, 0xf, 0x7, 0xfa, 0xf, 0xfe, 0xa2, 0x83, - 0xe7, 0x90, 0xff, 0xe6, 0x3e, 0x43, 0xe5, 0x7, - 0xff, 0x4e, 0xf, 0x3c, 0x1f, 0xfd, 0x2b, 0x43, - 0xd0, 0x7f, 0xf6, 0x2e, 0xf, 0xfe, 0xb5, 0xc1, - 0xff, 0xd8, 0x81, 0x68, 0x7f, 0xf6, 0x9e, 0x4, - 0x1f, 0xfd, 0x37, 0xc8, 0x7f, 0xf7, 0x9f, 0x21, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xf9, 0x48, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xf6, 0x1f, 0xff, 0xf0, 0xe4, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xfe, 0x4, - 0x1f, 0xff, 0xf0, 0xe4, 0x3f, 0xff, 0x50, 0x7f, - 0xa0, 0xff, 0xfc, 0xa1, 0xfe, 0x43, 0xff, 0xf4, - 0x87, 0xfb, 0xf, 0xff, 0xcc, 0x1f, 0xf4, 0x1f, - 0xff, 0x94, 0x3f, 0xca, 0xf, 0xff, 0xc4, 0x1f, - 0xf4, 0x87, 0xff, 0xe2, 0xf, 0xfa, 0x81, 0xff, - 0xf7, 0x43, 0xff, 0x80, 0xe1, 0xff, 0xf7, 0xc3, - 0xff, 0x83, 0xc1, 0xff, 0xf6, 0x83, 0xff, 0x82, - 0xf0, 0x7f, 0xfd, 0x14, 0x1f, 0xfc, 0x27, 0xd2, - 0x1f, 0xff, 0x19, 0xf, 0xfe, 0x23, 0x7f, 0xff, - 0x50, 0x3f, 0xfa, 0x50, 0x7f, 0xf9, 0xb0, 0xff, - 0xe9, 0xa1, 0xff, 0xff, 0xe, 0xa0, 0x7f, 0xff, - 0xc3, 0x9c, 0x3f, 0xff, 0xe1, 0xed, 0xf, 0xff, - 0xf8, 0x75, 0xa1, 0xff, 0xff, 0xe, 0xb4, 0x3f, - 0xff, 0xe1, 0xd7, 0x21, 0xff, 0xff, 0xc, 0xde, - 0x94, 0x1f, 0xfd, 0x4c, 0x3f, 0xfc, 0x2d, 0x3f, - 0xff, 0xa8, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xe8, 0xc1, - 0xe4, 0x3f, 0xff, 0x91, 0xfe, 0xb0, 0xff, 0xf3, - 0x80, - - /* U+E918 "" */ - 0xf, 0xff, 0x52, 0x83, 0xff, 0xfe, 0x1a, 0x81, - 0xff, 0xff, 0xb, 0x6, 0x1f, 0xff, 0xf2, 0xd, - 0x7, 0xff, 0xf9, 0x41, 0x98, 0x3f, 0xff, 0xb0, - 0x79, 0x41, 0xff, 0xfb, 0xc3, 0xf4, 0x1f, 0xff, - 0xac, 0x3f, 0xd8, 0x7f, 0xfe, 0x20, 0xff, 0xe0, - 0x41, 0xff, 0xf6, 0x50, 0x7f, 0xf0, 0x14, 0x1f, - 0xff, 0x58, 0x3f, 0xf8, 0x50, 0x7f, 0xfd, 0x30, - 0xff, 0xe2, 0x61, 0xff, 0xf2, 0x83, 0xff, 0x8d, - 0x7, 0xff, 0xc1, 0x41, 0xff, 0xc6, 0x60, 0xff, - 0xf7, 0xc1, 0xff, 0xc8, 0x50, 0x7f, 0xfb, 0x70, - 0xff, 0xe5, 0x41, 0xff, 0xec, 0x83, 0xff, 0x99, - 0x87, 0xff, 0xa9, 0x41, 0xff, 0xcd, 0x83, 0xff, - 0xd3, 0x7, 0xff, 0x39, 0x41, 0xff, 0xe7, 0xc3, - 0xff, 0xa1, 0x7, 0xff, 0x9a, 0xf, 0xfe, 0x96, - 0x1f, 0xfe, 0x49, 0xf, 0xfe, 0x9c, 0x1f, 0xfe, - 0x25, 0x7, 0xff, 0x51, 0x83, 0xff, 0xc3, 0x7, - 0xff, 0x59, 0x41, 0xff, 0xdf, 0xc3, 0xff, 0xb1, - 0x7, 0xff, 0x7a, 0xf, 0xfe, 0xd6, 0x1f, 0xfd, - 0xc5, 0x7, 0xff, 0x6e, 0xf, 0xfe, 0xdc, 0x1f, - 0xfd, 0xc5, 0x7, 0xff, 0x67, 0xf, 0xfe, 0x3, - 0xe8, 0x3f, 0xcf, 0xa0, 0xff, 0xe0, 0x41, 0xff, - 0xd8, 0x83, 0xfe, 0xb8, 0x8, 0x7f, 0xa0, 0x3c, - 0x1f, 0xf6, 0x1f, 0xfd, 0x65, 0x7, 0xf5, 0xa1, - 0xff, 0xc8, 0x79, 0xf, 0xe8, 0x3f, 0xfa, 0xb0, - 0x7c, 0xda, 0x1f, 0xfc, 0xc6, 0xd0, 0xf9, 0x83, - 0xff, 0xa7, 0x87, 0x9e, 0x43, 0xff, 0xa3, 0x68, - 0x79, 0xf, 0xfe, 0xc3, 0xc1, 0xff, 0xd6, 0xb8, - 0x3f, 0xfb, 0x18, 0x2e, 0xf, 0xfe, 0xd3, 0xc0, - 0x83, 0xff, 0xa9, 0xe4, 0x3f, 0xfb, 0xcf, 0x90, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0x2d, 0xf, 0xff, 0xf8, 0x76, 0x1f, 0xff, - 0xf0, 0xe4, 0x3f, 0xff, 0xe1, 0x90, 0xff, 0xff, - 0x87, 0x41, 0xff, 0xff, 0xc, 0x87, 0xf9, 0xf, - 0xff, 0xcc, 0x1f, 0xe8, 0x3f, 0xff, 0x10, 0x7f, - 0x90, 0xff, 0xfc, 0x28, 0x3f, 0xd8, 0x7f, 0xfd, - 0xd8, 0x3f, 0xe4, 0x3f, 0xfe, 0xcc, 0x1f, 0xf4, - 0x1f, 0xff, 0x66, 0xf, 0xf9, 0x41, 0xff, 0xf5, - 0xa0, 0x7f, 0xf0, 0x20, 0xff, 0xfa, 0x3a, 0x1f, - 0xfc, 0x8, 0x3f, 0xfe, 0x77, 0x7, 0xff, 0x5, - 0x41, 0xff, 0xef, 0x6f, 0x21, 0xff, 0xc2, 0x60, - 0xff, 0xe8, 0x5f, 0xff, 0xd3, 0x90, 0xff, 0xe2, - 0xc1, 0xff, 0xd0, 0xd0, 0xff, 0xf2, 0xe1, 0xff, - 0xff, 0x9, 0xf, 0xff, 0xf8, 0x66, 0xf, 0xff, - 0xf8, 0x54, 0xf, 0xff, 0xf8, 0x1d, 0xf, 0xff, - 0xf8, 0xf0, 0x7f, 0xff, 0xc7, 0x83, 0xff, 0xb2, - 0x87, 0xff, 0x65, 0xb8, 0x3f, 0xfb, 0x72, 0x1f, - 0xfd, 0x46, 0x9c, 0x87, 0xff, 0x7a, 0xff, 0xfe, - 0xa4, 0xa0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xf8, 0xa8, 0x3c, 0xa0, 0xff, 0xfd, 0xdf, 0xfa, - 0xf, 0xfe, 0x48, - - /* U+E919 "" */ - 0xf, 0xfe, 0x5a, 0x1f, 0xfe, 0xfa, 0x21, 0xff, - 0xed, 0x51, 0x7, 0xff, 0xb6, 0xb, 0xf, 0xff, - 0x5e, 0x1d, 0x7, 0xff, 0xa6, 0xf, 0x28, 0x3f, - 0xfc, 0xea, 0xf, 0xa4, 0x3f, 0xfc, 0xd0, 0x7f, - 0x41, 0xff, 0xe5, 0xc3, 0xfe, 0xc3, 0xff, 0xc7, - 0x7, 0xff, 0x6, 0xf, 0xff, 0xa, 0x83, 0xff, - 0x82, 0xa0, 0xff, 0xef, 0xb0, 0x7f, 0xf0, 0xe0, - 0xff, 0xef, 0xc1, 0xff, 0xc5, 0xc3, 0xff, 0xbb, - 0x87, 0xff, 0x1e, 0xf, 0xfe, 0xdc, 0x1f, 0xfc, - 0x85, 0x7, 0xff, 0x65, 0x41, 0xff, 0xc9, 0x83, - 0xff, 0xb3, 0x7, 0xff, 0x2f, 0xf, 0xfe, 0xbe, - 0x1f, 0xfc, 0xd8, 0x3f, 0xfa, 0xb0, 0x7f, 0xf3, - 0x94, 0x1f, 0xfd, 0x35, 0x7, 0xff, 0x3e, 0x43, - 0xff, 0xa5, 0x7, 0xff, 0x46, 0xf, 0xfe, 0x8e, - 0x1f, 0xfd, 0x3c, 0x3f, 0xf9, 0xf0, 0x7f, 0xf5, - 0x60, 0xff, 0xe6, 0xa8, 0x3f, 0xfa, 0xaa, 0xf, - 0xfe, 0x5b, 0x7, 0xff, 0x5e, 0xf, 0xfe, 0x5c, - 0x1f, 0xfd, 0x9c, 0x3f, 0xf9, 0x38, 0x7f, 0xf0, - 0x18, 0x3f, 0xe9, 0xf, 0xfe, 0x4, 0x1f, 0xfc, - 0x78, 0x3f, 0xeb, 0x98, 0x3f, 0xb6, 0xd0, 0xff, - 0x28, 0x3f, 0xf8, 0xaa, 0xf, 0xeb, 0x42, 0x43, - 0xff, 0x83, 0x70, 0x7f, 0x41, 0xff, 0xc5, 0x83, - 0xe6, 0xd0, 0xff, 0xe4, 0xbc, 0x1f, 0xb0, 0xff, - 0xe1, 0xe1, 0xe7, 0x90, 0xff, 0xe6, 0xbc, 0x87, - 0xa0, 0xff, 0xe3, 0xbc, 0x1f, 0xfd, 0x26, 0xd0, - 0xc8, 0x7f, 0xf0, 0xa0, 0x5c, 0x1f, 0xfd, 0x7b, - 0x41, 0x7, 0xff, 0x9, 0xf2, 0x1f, 0xfd, 0xbb, - 0xc8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xfa, - 0xa8, 0x7f, 0xfc, 0x30, 0xff, 0xff, 0x87, 0xff, - 0x89, 0xf, 0xff, 0x8a, 0x1f, 0xff, 0xc, 0x3f, - 0xfe, 0x8, 0x7f, 0xf9, 0xe0, 0xfe, 0x83, 0xff, - 0xcc, 0x87, 0xf2, 0x1f, 0xfe, 0x74, 0x3f, 0xb0, - 0xff, 0xf3, 0x41, 0xfe, 0x83, 0xff, 0xcc, 0x87, - 0xf2, 0x83, 0xff, 0xcb, 0x7, 0xfa, 0x43, 0xff, - 0xca, 0x87, 0xfa, 0x43, 0xff, 0xc9, 0x7, 0xfd, - 0x40, 0xff, 0xf2, 0x41, 0xff, 0x38, 0x7f, 0xf8, - 0xd4, 0x1f, 0xfc, 0xe, 0xf, 0xff, 0x14, 0x87, - 0xff, 0x1, 0xd0, 0xff, 0xf0, 0xc1, 0xff, 0xc2, - 0xa0, 0x7f, 0xfc, 0x1d, 0xf, 0xff, 0x6, 0x87, - 0xff, 0xa, 0xc3, 0xff, 0xc1, 0x21, 0xff, 0xc3, - 0xe0, 0xff, 0xef, 0xd0, 0x3f, 0xf8, 0x6e, 0x87, - 0xff, 0x79, 0xd0, 0xff, 0xe1, 0xd0, 0x3f, 0xfb, - 0xf4, 0xf, 0xfe, 0x1b, 0xa1, 0xff, 0xde, 0x74, - 0x3f, 0xf8, 0x76, 0x1f, 0xfd, 0xfb, 0xf, 0xfe, - 0x27, 0x7, 0xff, 0x7f, 0x83, 0xff, 0x86, 0xe8, - 0x7f, 0xf7, 0x9d, 0xf, 0xfe, 0x1d, 0x3, 0xff, - 0xbf, 0x40, 0xff, 0xe1, 0xb8, 0x7f, 0xf7, 0xdd, - 0xf, 0xfe, 0x1e, 0x1f, 0xfe, 0xb, 0xf, 0xff, - 0x8f, 0x7, 0xff, 0x2, 0xf, 0xff, 0x1b, 0xa1, - 0xfe, 0x43, 0xff, 0xcb, 0x40, 0xfd, 0x87, 0xff, - 0x9d, 0xd0, 0xe4, 0x3f, 0xfd, 0x56, 0x1a, 0xf, - 0xff, 0x67, 0x4c, 0x3f, 0xfa, 0x28, 0x7f, 0xf4, - 0x14, 0x1f, 0xfc, 0xbf, 0xfa, 0xc3, 0xff, 0xaa, - - /* U+E91A "" */ - 0xf, 0xfe, 0xca, 0x1f, 0xfe, 0xf6, 0x81, 0xff, - 0xee, 0x85, 0x7, 0xff, 0xb3, 0xa, 0xf, 0xff, - 0x5c, 0x1d, 0x87, 0xff, 0xa6, 0x43, 0xd0, 0x7f, - 0xf9, 0xd4, 0x1f, 0x28, 0x3f, 0xfc, 0xd0, 0x7f, - 0x41, 0xff, 0xe5, 0xc3, 0xfe, 0xc3, 0xff, 0xc7, - 0x7, 0xff, 0x6, 0xf, 0xff, 0xa, 0x83, 0xff, - 0x82, 0xa0, 0xff, 0xf0, 0x41, 0xff, 0xc3, 0x90, - 0xff, 0xef, 0x61, 0xff, 0xc5, 0x83, 0xff, 0xbb, - 0x7, 0xff, 0x1f, 0xf, 0xfe, 0xdc, 0x87, 0xff, - 0x22, 0xf, 0xfe, 0xca, 0x83, 0xff, 0x92, 0xa0, - 0xff, 0xec, 0x41, 0xff, 0xcb, 0x83, 0xff, 0xaf, - 0x87, 0xff, 0x37, 0xf, 0xfe, 0xac, 0x1f, 0xfc, - 0xf8, 0x3f, 0xfa, 0x6a, 0xf, 0xfe, 0x7a, 0x83, - 0xff, 0xa5, 0x7, 0xff, 0x46, 0xf, 0xfe, 0x8e, - 0x1f, 0xfd, 0x3c, 0x3f, 0xf9, 0xf0, 0x7f, 0xf5, - 0x60, 0xff, 0xe6, 0xa8, 0x3f, 0xfa, 0xaa, 0xf, - 0xfe, 0x5b, 0x7, 0xff, 0x5e, 0x43, 0xff, 0x95, - 0x7, 0xff, 0x66, 0xf, 0xfe, 0x4e, 0x1f, 0xfc, - 0x6, 0xf, 0xfa, 0x43, 0xff, 0x81, 0x87, 0xff, - 0x1e, 0xf, 0xf9, 0xe7, 0xf, 0xe9, 0xb8, 0x3f, - 0xe8, 0x3f, 0xf8, 0xaa, 0xf, 0xeb, 0x83, 0xff, - 0x82, 0x84, 0xf0, 0x7f, 0x28, 0x3f, 0xf8, 0x90, - 0x7e, 0xb4, 0x3f, 0xf9, 0x2f, 0x21, 0xf4, 0x1f, - 0xfc, 0x3c, 0x3c, 0xf9, 0xf, 0xfe, 0x6b, 0x68, - 0x7b, 0xf, 0xfe, 0x3b, 0xc1, 0xff, 0xd3, 0xb4, - 0x3f, 0xf8, 0xf0, 0x2e, 0xf, 0xfe, 0xbd, 0xc0, - 0x83, 0xff, 0x84, 0xf9, 0xf, 0xfe, 0xdb, 0xe4, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xfc, 0xb4, - 0x3f, 0xfe, 0x18, 0x7f, 0xfc, 0x10, 0xff, 0xff, - 0x87, 0xff, 0x85, 0xf, 0xff, 0x86, 0x1f, 0xff, - 0x4, 0x3f, 0xfd, 0xf0, 0x7f, 0x41, 0xff, 0xe6, - 0x43, 0xf9, 0xf, 0xff, 0x2e, 0x1f, 0xc8, 0x7f, - 0xf9, 0x60, 0xff, 0x41, 0xff, 0xe4, 0x50, 0x7f, - 0x21, 0xff, 0xe4, 0x60, 0xff, 0x41, 0xff, 0xe3, - 0x60, 0xff, 0x21, 0xff, 0xe3, 0x60, 0xff, 0xa0, - 0xff, 0xf1, 0x70, 0x7f, 0xd0, 0x7f, 0xf8, 0x6c, - 0x3f, 0xf8, 0xa, 0xf, 0xfe, 0xfb, 0xa1, 0xff, - 0xc0, 0x60, 0xff, 0xef, 0xd0, 0x3f, 0xf8, 0x50, - 0x7f, 0xf7, 0x9d, 0xf, 0xff, 0x6f, 0x7, 0xff, - 0x9, 0xc3, 0xff, 0xbb, 0x61, 0xff, 0xc3, 0x60, - 0xff, 0xee, 0x3a, 0x1f, 0xfc, 0x3a, 0x7, 0xff, - 0x72, 0x81, 0xff, 0xc3, 0x74, 0x3f, 0xfb, 0x6e, - 0x87, 0xff, 0xe, 0x81, 0xff, 0xdc, 0xe0, 0xff, - 0xe1, 0xba, 0x1f, 0xfd, 0xbb, 0xf, 0xfe, 0x27, - 0x7, 0xff, 0x6d, 0xd0, 0xff, 0xe1, 0xd8, 0x7f, - 0xf7, 0x28, 0x1f, 0xfc, 0x37, 0x43, 0xff, 0xb9, - 0xa1, 0xff, 0xc3, 0xa0, 0x7f, 0xf7, 0x70, 0xff, - 0xe1, 0xba, 0x1f, 0xfe, 0xde, 0xf, 0xff, 0x4, - 0x1f, 0xfc, 0xb, 0xf, 0xff, 0x12, 0x1f, 0xe7, - 0x43, 0xff, 0xc9, 0x87, 0xea, 0x7, 0xff, 0x9d, - 0xe, 0x74, 0x3f, 0xfd, 0x10, 0x6e, 0xf, 0xff, - 0x5f, 0x4c, 0x3f, 0xfd, 0xca, 0xf, 0xff, 0xf8, - 0x7f, 0xf0, 0x7f, 0xf8, 0x3f, 0xf8, 0xe0, - - /* U+E91B "" */ - 0xf, 0xff, 0x8b, 0x7f, 0xe9, 0xf, 0xff, 0xa3, - 0x7a, 0x43, 0xf3, 0x70, 0x7f, 0xfc, 0x1e, 0x43, - 0xff, 0x86, 0xe8, 0x7f, 0xfb, 0x78, 0x3f, 0xf9, - 0x12, 0x1f, 0xfe, 0xab, 0xf, 0xfe, 0x5c, 0x1f, - 0xfe, 0x9d, 0xf, 0xfe, 0x6c, 0x1f, 0xfe, 0x7c, - 0x3f, 0xf9, 0xe8, 0x7f, 0xf9, 0xb0, 0xff, 0xe8, - 0xa1, 0xff, 0xe3, 0x70, 0xff, 0xe9, 0x61, 0xff, - 0xe2, 0x60, 0xff, 0xe9, 0xa1, 0xff, 0xe1, 0xa0, - 0x7f, 0xf1, 0x97, 0x7, 0xff, 0xaf, 0x43, 0xff, - 0x86, 0xde, 0xac, 0x87, 0xff, 0x21, 0x83, 0xff, - 0xa7, 0x87, 0xff, 0xd, 0xe4, 0x3f, 0xf9, 0xd4, - 0x70, 0xff, 0xe8, 0xe1, 0xff, 0xc3, 0xa0, 0x7f, - 0xf4, 0x50, 0x90, 0xff, 0xe7, 0x38, 0x7f, 0xf0, - 0xf4, 0x3f, 0xfa, 0xd8, 0x7f, 0xf3, 0x68, 0x1f, - 0xfc, 0x3c, 0x3f, 0xfa, 0x68, 0x64, 0x3f, 0xf9, - 0x92, 0x1f, 0xfc, 0x27, 0xf, 0xfe, 0xa6, 0x1f, - 0xfd, 0xd, 0xf, 0xfe, 0x13, 0x7, 0xff, 0x55, - 0xe, 0x43, 0xff, 0x93, 0x87, 0xff, 0xe, 0x81, - 0xff, 0xdc, 0xc3, 0xff, 0x91, 0x87, 0xff, 0xe, - 0x43, 0xff, 0xba, 0x87, 0xff, 0x19, 0xc3, 0xff, - 0x87, 0xa1, 0xff, 0xd7, 0x43, 0xe4, 0x3f, 0xf8, - 0x94, 0xf, 0xfe, 0x1e, 0x1f, 0xfd, 0x9c, 0x3e, - 0xc3, 0xff, 0x87, 0x21, 0xff, 0xc2, 0x70, 0xff, - 0xed, 0x21, 0xf2, 0x1f, 0xfc, 0x2d, 0xf, 0xfe, - 0x13, 0x7, 0xff, 0xc7, 0xf, 0xfe, 0x1d, 0x3, - 0xff, 0xb6, 0x87, 0xf2, 0x1f, 0xe7, 0xf, 0xfe, - 0x1c, 0x87, 0xff, 0x73, 0xf, 0xec, 0x3f, 0x98, - 0x3f, 0xf8, 0x7a, 0x1f, 0xfd, 0xd4, 0x3f, 0x90, - 0xfd, 0x40, 0xff, 0xe1, 0xe1, 0xff, 0xf1, 0x90, - 0xff, 0xe1, 0x38, 0x7f, 0xfa, 0xe0, 0xed, 0xf, - 0xfe, 0x13, 0x7, 0xff, 0x81, 0xf, 0xf9, 0xd, - 0x87, 0xff, 0xe, 0x81, 0xff, 0xe1, 0xc3, 0xff, - 0x80, 0x8e, 0x1f, 0xfc, 0x39, 0xf, 0xff, 0x12, - 0x1f, 0xfc, 0xb, 0x83, 0xff, 0x87, 0xa1, 0xff, - 0xff, 0x6, 0x1f, 0xfe, 0x44, 0x3f, 0xfa, 0xe, - 0x1f, 0xfe, 0x5c, 0x3f, 0xf9, 0xec, 0x1f, 0xff, - 0xf0, 0x50, 0x3f, 0xfc, 0xe8, 0x7f, 0xf3, 0x64, - 0x3f, 0xff, 0xe0, 0xd0, 0xff, 0xf4, 0x21, 0xff, - 0xcc, 0xc3, 0xff, 0xd5, 0x87, 0xff, 0x2f, 0xf, - 0xff, 0x5a, 0x1f, 0xff, 0xf0, 0xff, 0xe8, 0x41, - 0xff, 0xff, 0xc, 0xf0, 0x7f, 0xfa, 0x10, 0xff, - 0xe7, 0x3c, 0x1f, 0xfe, 0x6c, 0x3f, 0xfa, 0xf, - 0x7, 0xff, 0x91, 0xf, 0xfe, 0x93, 0xc1, 0xff, - 0xff, 0xc, 0xf2, 0x1f, 0xfd, 0xe4, 0x3f, 0xfa, - 0xed, 0xa1, 0xff, 0xdc, 0xc3, 0xff, 0xb5, 0x68, - 0x7f, 0xf6, 0x90, 0xff, 0xee, 0x58, 0x7f, 0xff, - 0xc3, 0xa0, 0xff, 0xff, 0x87, 0xff, 0x71, 0xf, - 0xfe, 0xfc, 0x1f, 0xfd, 0x7c, 0x3f, 0xf9, 0xab, - 0xea, 0xf7, 0xf8, 0x3f, 0xfb, 0x6b, 0xea, 0xf7, - 0xff, 0xd5, 0xe5, 0xf0, 0x7f, 0xf7, 0xaf, 0x57, - 0x97, 0xc1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xc2, 0xc3, 0xf9, 0xf, 0xff, 0xca, - 0x83, 0xe6, - - /* U+E91C "" */ - 0xf, 0x9b, 0xff, 0x48, 0x7f, 0xfd, 0xae, 0x43, - 0xf3, 0x7a, 0x43, 0xff, 0xe0, 0xe8, 0x7f, 0xf0, - 0xdb, 0x43, 0xff, 0xda, 0xc1, 0xff, 0xc8, 0xb0, - 0xff, 0xf6, 0x41, 0xff, 0xcb, 0xe0, 0xff, 0xf4, - 0xc1, 0xff, 0xcd, 0x70, 0xff, 0xf4, 0x21, 0xff, - 0xcf, 0xc3, 0xff, 0xcc, 0x87, 0xff, 0x47, 0xf, - 0xff, 0x2e, 0x1f, 0xfd, 0x2d, 0xf, 0xff, 0x1a, - 0x1f, 0xfd, 0x39, 0xf, 0xff, 0x6a, 0xe0, 0xff, - 0xe3, 0x50, 0x3f, 0xfd, 0x6d, 0x6f, 0x48, 0x7f, - 0xf0, 0xdc, 0x3f, 0xfe, 0x2d, 0xa1, 0xff, 0xc3, - 0xc3, 0xff, 0xa7, 0x21, 0xff, 0xd2, 0xa0, 0x7f, - 0xf0, 0xf0, 0xff, 0xe8, 0xed, 0x3, 0xff, 0xa4, - 0xe1, 0xff, 0xc3, 0xd0, 0xff, 0xe7, 0x21, 0x21, - 0xff, 0xd4, 0xc3, 0xff, 0x87, 0x40, 0xff, 0xe6, - 0xe1, 0xff, 0xd9, 0xd0, 0xff, 0xe1, 0x30, 0x7f, - 0xf3, 0x10, 0xc8, 0x7f, 0xf5, 0x64, 0x3f, 0xf8, - 0x4e, 0x1f, 0xfd, 0xc, 0x3f, 0xfa, 0xd4, 0xf, - 0xfe, 0x1e, 0x1f, 0xfc, 0x94, 0x39, 0xf, 0xfe, - 0xbb, 0x7, 0xff, 0xf, 0xf, 0xfe, 0x46, 0x1f, - 0xfd, 0xe7, 0xf, 0xfe, 0x1e, 0x87, 0xff, 0x19, - 0xf, 0xff, 0x6, 0x1f, 0xfc, 0x3a, 0x7, 0xff, - 0x11, 0xf, 0x90, 0xff, 0xed, 0x68, 0x7f, 0xf0, - 0x98, 0x3f, 0xf8, 0x78, 0x7d, 0x87, 0xff, 0x6e, - 0x43, 0xff, 0x84, 0xe1, 0xff, 0xc2, 0x43, 0xe4, - 0x3f, 0xfb, 0x94, 0xf, 0xfe, 0x1e, 0x1f, 0xff, - 0x36, 0xf, 0xfe, 0x1e, 0x87, 0xf9, 0xf, 0xe4, - 0x3f, 0xfb, 0xae, 0x1f, 0xfc, 0x39, 0xf, 0xec, - 0x3f, 0xb0, 0xff, 0xef, 0xe1, 0xff, 0xc3, 0xa0, - 0x7e, 0x43, 0xf9, 0xf, 0xff, 0x6, 0x87, 0xff, - 0x9, 0x83, 0xff, 0xe7, 0x21, 0xff, 0xc2, 0x70, - 0xe8, 0x3f, 0xfd, 0xb4, 0xf, 0xfe, 0x1e, 0x19, - 0xf, 0xf9, 0xf, 0xff, 0x13, 0x7, 0xff, 0xf, - 0x44, 0x3f, 0xf8, 0x18, 0x7f, 0xf8, 0xdc, 0x3f, - 0xf8, 0x77, 0x7, 0xff, 0x1, 0xf, 0xff, 0x2e, - 0x1f, 0xff, 0xf0, 0xed, 0xf, 0xfe, 0x82, 0x1f, - 0xfe, 0x69, 0xf, 0xff, 0xf8, 0x6a, 0x7, 0xff, - 0x3b, 0xf, 0xff, 0x43, 0x7, 0xff, 0x35, 0xf, - 0xff, 0x4b, 0x87, 0xff, 0xfc, 0x3b, 0xf, 0xfe, - 0x62, 0x1f, 0xfe, 0xbc, 0x3f, 0xf9, 0x78, 0x7f, - 0xff, 0xc3, 0x21, 0xff, 0xeb, 0x83, 0xff, 0xfe, - 0xb, 0x43, 0xff, 0xff, 0x68, 0x7f, 0xf3, 0x90, - 0xff, 0xf2, 0x5a, 0x1f, 0xfd, 0xc, 0x3f, 0xfc, - 0x56, 0x87, 0xff, 0x49, 0xf, 0xfe, 0xfb, 0x68, - 0x7f, 0xff, 0x9e, 0x43, 0xff, 0xae, 0x87, 0xff, - 0x69, 0xe0, 0xff, 0xed, 0x61, 0xff, 0xd9, 0xe0, - 0xff, 0xee, 0x21, 0xff, 0xd8, 0x83, 0xff, 0xfe, - 0x19, 0xf, 0xff, 0xf8, 0x6c, 0x3f, 0xfb, 0xe8, - 0x7f, 0xf6, 0x3f, 0xd5, 0xe5, 0xf0, 0x7f, 0xf3, - 0x70, 0xff, 0xef, 0x2f, 0xab, 0xdf, 0xff, 0x57, - 0x97, 0xc1, 0xff, 0xf8, 0x5f, 0x57, 0xbd, 0x7, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xfd, 0x24, 0x3f, 0xb0, 0xff, 0xfc, - 0xc8, 0x7c, 0xa0, 0xff, 0xfc, 0x80, - - /* U+E91D "" */ - 0xf, 0xfe, 0x9b, 0xe4, 0x3f, 0xf9, 0xd7, 0xfa, - 0xf, 0xfe, 0x9d, 0x1, 0x7, 0xff, 0x37, 0xff, - 0x10, 0x7f, 0xf4, 0x74, 0x3f, 0xfa, 0x48, 0x7a, - 0x43, 0xff, 0x9e, 0xe1, 0xd0, 0x7f, 0xfc, 0x58, - 0x3c, 0x87, 0xff, 0xc2, 0x81, 0xe8, 0x3f, 0xfe, - 0x1a, 0x1f, 0x21, 0xff, 0xee, 0x70, 0xfc, 0x87, - 0xff, 0xba, 0x81, 0xfd, 0x7, 0xff, 0xb7, 0x43, - 0xf9, 0xf, 0xff, 0x63, 0x87, 0xfd, 0x7, 0xff, - 0xad, 0x83, 0xfe, 0x43, 0xff, 0xd7, 0x40, 0xff, - 0xe0, 0x61, 0xff, 0xea, 0xd0, 0xff, 0xe0, 0xa1, - 0xff, 0xe8, 0x70, 0xff, 0xe1, 0x41, 0xff, 0xe8, - 0xa0, 0x7f, 0xf0, 0xd0, 0xff, 0xf3, 0xe8, 0x7f, - 0xf0, 0xe0, 0xff, 0xf3, 0x38, 0x7f, 0xf1, 0x50, - 0xff, 0xf2, 0xd0, 0x3f, 0xfe, 0xf2, 0x1f, 0xfc, - 0x74, 0x3f, 0xfc, 0x7a, 0x1f, 0xfc, 0x8b, 0xff, - 0xf8, 0x54, 0x43, 0xff, 0xa0, 0xe1, 0xff, 0xd9, - 0x55, 0xe9, 0xf, 0xfe, 0x5d, 0x3, 0xff, 0xbe, - 0xdc, 0x1f, 0xfc, 0x8d, 0xf, 0xff, 0x1b, 0xc1, - 0xff, 0xc4, 0x70, 0xff, 0xf3, 0xbc, 0x1f, 0xff, - 0x97, 0xf, 0xfe, 0xb, 0x87, 0xff, 0xaf, 0x43, - 0xff, 0x83, 0x87, 0xff, 0xae, 0x81, 0xff, 0xc1, - 0xd0, 0xff, 0xf5, 0x21, 0xff, 0xc2, 0xa0, 0x7f, - 0xfa, 0xe0, 0xff, 0xe0, 0xb8, 0x7f, 0xf2, 0x6f, - 0xff, 0xe1, 0x48, 0x7f, 0xf1, 0x18, 0x3f, 0xf8, - 0x5a, 0x1f, 0xfc, 0x74, 0x3f, 0xf8, 0x4d, 0xe4, - 0x3f, 0xf8, 0x4a, 0xf, 0xfe, 0x15, 0x3, 0xff, - 0xb3, 0x68, 0x7f, 0xf0, 0x60, 0xff, 0xe1, 0xb8, - 0x7f, 0xf1, 0x60, 0xff, 0xe4, 0x58, 0x7f, 0xf0, - 0x70, 0xff, 0xe2, 0x68, 0x7f, 0xf0, 0xd0, 0xff, - 0xe5, 0x68, 0x7f, 0xf0, 0x10, 0xff, 0xe2, 0x50, - 0x3f, 0xf8, 0x68, 0x7f, 0xf2, 0xa8, 0x1f, 0xf4, - 0x1f, 0xfc, 0x57, 0xf, 0xfe, 0x14, 0x1f, 0xfc, - 0xb6, 0xf, 0xfa, 0xf, 0xfe, 0x36, 0x87, 0xff, - 0x5, 0xf, 0xfe, 0x5a, 0x83, 0xfc, 0x87, 0xff, - 0x1e, 0x43, 0xff, 0x81, 0x7, 0xff, 0x32, 0xf, - 0xf9, 0xf, 0xfe, 0x3d, 0x3, 0xff, 0xb3, 0x87, - 0xfa, 0xf, 0xfe, 0x43, 0x87, 0xfd, 0x7, 0xff, - 0x35, 0xf, 0xf2, 0x1f, 0xfc, 0x9d, 0xf, 0xe4, - 0x3f, 0xf9, 0xb0, 0x7f, 0xb0, 0xff, 0xe5, 0x50, - 0x3f, 0xa0, 0xff, 0xe6, 0xa1, 0xfc, 0x87, 0xff, - 0x2d, 0xc3, 0xf2, 0x1f, 0xfc, 0xd8, 0x3f, 0xfa, - 0xfa, 0x1f, 0x41, 0xff, 0xf1, 0xa0, 0x79, 0xf, - 0xfe, 0x6a, 0x1f, 0xfd, 0x87, 0xf, 0x21, 0xff, - 0xf3, 0xd0, 0xd0, 0x7f, 0xf3, 0x30, 0xff, 0xed, - 0xc8, 0x7f, 0xf4, 0x10, 0xff, 0xee, 0x50, 0x18, - 0x7f, 0xfd, 0x9f, 0x7, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xfe, 0x9c, 0x1f, 0xb0, - - /* U+E91E "" */ - 0x2f, 0xf4, 0x1f, 0xfc, 0xe7, 0xc8, 0x7f, 0xf4, - 0xe3, 0xfc, 0x41, 0xff, 0xcd, 0x81, 0x40, 0xff, - 0xe9, 0x30, 0x7a, 0x43, 0xff, 0xa2, 0xc1, 0xff, - 0xf4, 0x83, 0x38, 0x7f, 0xfc, 0xd0, 0xf6, 0x87, - 0xff, 0xc9, 0xf, 0x50, 0x3f, 0xfe, 0x30, 0x7c, - 0xe1, 0xff, 0xf1, 0x43, 0xf6, 0x87, 0xff, 0xbe, - 0xf, 0xea, 0x7, 0xff, 0xbd, 0xf, 0xe7, 0xf, - 0xff, 0x76, 0x1f, 0xf6, 0x1f, 0xfe, 0xd4, 0x3f, - 0xf8, 0x1a, 0x1f, 0xfe, 0xc8, 0x3f, 0xf8, 0x14, - 0xf, 0xff, 0x5a, 0x1f, 0xfc, 0x17, 0xf, 0xff, - 0x5c, 0x1f, 0xfc, 0x2d, 0xf, 0xff, 0x4a, 0x1f, - 0xfc, 0x3a, 0x7, 0xff, 0xa5, 0xf, 0xfe, 0x1b, - 0x87, 0xff, 0xa2, 0xf, 0xfe, 0x2e, 0x87, 0xff, - 0xe6, 0x43, 0xff, 0xcb, 0x7, 0xff, 0x1e, 0x81, - 0xff, 0xd2, 0x55, 0xff, 0xfc, 0x34, 0x3f, 0xf9, - 0xe, 0x1f, 0xfc, 0xe7, 0xd4, 0x43, 0xff, 0xb5, - 0xa1, 0xff, 0xca, 0xb8, 0x3f, 0xfc, 0x14, 0xf, - 0xfe, 0x3d, 0xa1, 0xff, 0xe3, 0x70, 0xff, 0xe2, - 0x5a, 0x1f, 0xfe, 0x7d, 0xf, 0xfe, 0x3, 0xa1, - 0xff, 0xf6, 0x60, 0xff, 0xf5, 0xe8, 0x7f, 0xa8, - 0x1f, 0xfe, 0xa7, 0xf, 0xfe, 0x2, 0x1f, 0xfe, - 0xaa, 0x7, 0xfd, 0x7, 0xff, 0xaf, 0x43, 0xfe, - 0x90, 0xff, 0xe2, 0x37, 0xff, 0xf0, 0xa0, 0xff, - 0xe4, 0x38, 0x7f, 0xf0, 0x14, 0x1f, 0xfc, 0x2b, - 0xd2, 0x1f, 0xfc, 0x24, 0x3f, 0xf8, 0xec, 0x1f, - 0xfc, 0x18, 0x3f, 0xf8, 0x36, 0x87, 0xff, 0x66, - 0x81, 0xff, 0xc1, 0xc3, 0xff, 0x80, 0xe8, 0x7f, - 0xf2, 0x20, 0xff, 0xe2, 0xe8, 0x7f, 0xf0, 0x60, - 0xff, 0xe0, 0x50, 0x3f, 0xf9, 0x48, 0x7f, 0xf0, - 0xdc, 0x3f, 0xf8, 0x68, 0x7f, 0xd2, 0x1f, 0xfc, - 0xa8, 0x3f, 0xf8, 0x74, 0xf, 0xfe, 0x1c, 0x1f, - 0xf4, 0x87, 0xff, 0x2d, 0xf, 0xfe, 0x16, 0x87, - 0xff, 0x11, 0xf, 0xf4, 0x87, 0xff, 0x2d, 0xf, - 0xfe, 0xb, 0x87, 0xff, 0x16, 0xf, 0xf2, 0x83, - 0xff, 0x99, 0x7, 0xff, 0x2, 0x81, 0xff, 0xc6, - 0x43, 0xfd, 0x7, 0xff, 0x31, 0xf, 0xfe, 0x6, - 0x87, 0xff, 0x19, 0xf, 0xf4, 0x1f, 0xfc, 0xd8, - 0x3f, 0xce, 0x1f, 0xfc, 0x8c, 0x3f, 0xc8, 0x7f, - 0xf5, 0xd8, 0x3f, 0xf9, 0x28, 0x7f, 0x21, 0xff, - 0xcd, 0x83, 0xfa, 0x81, 0xff, 0xd4, 0x83, 0xff, - 0x9a, 0x87, 0xed, 0xf, 0xff, 0x74, 0x1f, 0x38, - 0x7f, 0xf5, 0x90, 0xff, 0xe6, 0xa1, 0xea, 0x7, - 0xff, 0x5f, 0xf, 0xfe, 0x64, 0x1e, 0xd0, 0xff, - 0xec, 0x21, 0xff, 0xcc, 0x43, 0x38, 0x7f, 0xfd, - 0xe8, 0x1f, 0xff, 0x4c, 0x1a, 0x1f, 0xff, 0x6f, - 0x7, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xde, 0xc3, - 0xf6, 0x1f, 0xff, 0x0, - - /* U+E91F "" */ - 0xf, 0xfe, 0xed, 0xfe, 0x83, 0xff, 0xbb, 0x7f, - 0xe8, 0x3f, 0xfb, 0x8a, 0xf, 0x28, 0x3f, 0xff, - 0xe1, 0xff, 0xcd, 0xff, 0xab, 0x2e, 0xf, 0xfe, - 0xba, 0x1e, 0x5d, 0x5b, 0xff, 0xab, 0x97, 0x7, - 0xff, 0x17, 0xf, 0xfe, 0x5a, 0xf5, 0x6f, 0xf8, - 0x3f, 0xfc, 0xf8, 0x7e, 0x43, 0xff, 0xfe, 0x1f, - 0xfc, 0x38, 0x3f, 0x90, 0xff, 0xec, 0xc2, 0x1f, - 0xd8, 0x7f, 0xf5, 0xed, 0xf, 0xff, 0x3, 0x68, - 0x7f, 0xf0, 0x50, 0xff, 0xe9, 0x3c, 0x87, 0xff, - 0x81, 0xe0, 0xff, 0xe3, 0xa1, 0xff, 0xcd, 0xb8, - 0x3f, 0xf9, 0x38, 0x7f, 0xf2, 0xed, 0xf, 0xff, - 0x16, 0x87, 0xff, 0x35, 0xf, 0xff, 0xe4, 0x1f, - 0xfc, 0xf4, 0x3f, 0xf9, 0x2c, 0x1f, 0xfc, 0xec, - 0x3f, 0xf9, 0x4e, 0x1f, 0xfe, 0x6c, 0x3f, 0xf9, - 0x88, 0x7f, 0xf3, 0x74, 0x3f, 0xfc, 0xb4, 0xf, - 0xfe, 0x52, 0x1f, 0xfc, 0xe6, 0xf, 0xfe, 0x4e, - 0x1f, 0xfc, 0x4, 0x3f, 0xf8, 0x4e, 0x1f, 0xfd, - 0x4a, 0x70, 0x7f, 0xf0, 0xb0, 0xff, 0xe3, 0xa1, - 0xff, 0x20, 0x60, 0xff, 0xe1, 0x68, 0x7f, 0xf5, - 0x5c, 0x3f, 0xf8, 0x52, 0x1f, 0xfc, 0x54, 0x3f, - 0xa0, 0xf6, 0x1f, 0xfc, 0x2a, 0x7, 0xff, 0x13, - 0xf, 0xe4, 0x3e, 0xd0, 0xff, 0xe0, 0xb0, 0x7f, - 0xf5, 0xa8, 0x1f, 0xfc, 0x14, 0x3f, 0xf8, 0x68, - 0x7e, 0x43, 0xfc, 0xc1, 0xff, 0xc2, 0x43, 0xff, - 0x95, 0x87, 0xfc, 0xe1, 0xff, 0xc1, 0x83, 0xff, - 0x84, 0x87, 0xc8, 0x7f, 0xf0, 0x70, 0xff, 0xe0, - 0xe1, 0xff, 0xc1, 0xc3, 0xc8, 0x7f, 0xf0, 0xf4, - 0x3f, 0xf8, 0x10, 0x7f, 0xf0, 0x10, 0xf6, 0x1f, - 0xfc, 0x49, 0xf, 0xf9, 0x41, 0xff, 0xc6, 0x43, - 0xff, 0x8b, 0x21, 0xff, 0x41, 0xff, 0xd9, 0x90, - 0xff, 0xa0, 0xff, 0x90, 0xd0, 0x7f, 0xf2, 0x20, - 0xff, 0x90, 0xff, 0xb0, 0xc8, 0x7f, 0xf2, 0x70, - 0xff, 0xa0, 0xff, 0x21, 0xff, 0xcf, 0x83, 0xfc, - 0x87, 0xff, 0x9, 0xf, 0xfe, 0x5a, 0x83, 0xfc, - 0x87, 0xfa, 0x18, 0x3f, 0xf9, 0x90, 0x7f, 0xa0, - 0xff, 0x3c, 0x1f, 0xfc, 0xe4, 0x3f, 0xfc, 0xb0, - 0x7f, 0x90, 0xff, 0xf2, 0xe1, 0xff, 0xdb, 0x83, - 0xf9, 0xf, 0xfe, 0xda, 0x1f, 0xff, 0xf0, 0xff, - 0xe6, 0xa1, 0xff, 0xe5, 0xc3, 0xff, 0xca, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0x9a, 0xf, 0xd8, - - /* U+E920 "" */ - 0x2f, 0xf4, 0x1f, 0xfd, 0xdb, 0xff, 0x41, 0xff, - 0xdc, 0x50, 0x79, 0x41, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xf3, 0x57, 0x56, 0xff, 0x83, 0xff, - 0x8a, 0xba, 0xbb, 0xff, 0xab, 0x2e, 0xf, 0x21, - 0xfe, 0xff, 0xab, 0x2f, 0x7, 0xff, 0x2f, 0xf, - 0xd8, 0x7f, 0xff, 0xc3, 0xff, 0x86, 0x87, 0xe8, - 0x3f, 0xfc, 0xa9, 0x7, 0xff, 0x65, 0xf, 0xf9, - 0xe0, 0xff, 0xeb, 0xe1, 0xff, 0xc1, 0x79, 0xf, - 0xff, 0x23, 0x68, 0x7f, 0xf4, 0x90, 0xff, 0xe3, - 0x5a, 0x1f, 0xfe, 0x5b, 0x83, 0xff, 0x9a, 0x87, - 0xff, 0x2d, 0xe0, 0xff, 0xe5, 0xe1, 0xff, 0xcd, - 0x70, 0xff, 0xfe, 0x21, 0xff, 0xce, 0x83, 0xff, - 0xc9, 0xa1, 0xff, 0xc9, 0x43, 0xff, 0x9b, 0x87, - 0xff, 0x2f, 0xf, 0xfe, 0x66, 0x1f, 0xfe, 0x37, - 0xf, 0xfe, 0x6a, 0x1f, 0xfc, 0x9a, 0x7, 0xff, - 0x8e, 0x43, 0xff, 0x9c, 0x87, 0xff, 0x23, 0x43, - 0xff, 0x84, 0x87, 0xff, 0x3, 0xf, 0xfe, 0x3e, - 0x1f, 0xfc, 0x2b, 0xa0, 0x7f, 0xf4, 0x5c, 0x3f, - 0xf8, 0x52, 0x4, 0x3f, 0xe4, 0x3f, 0xf8, 0x8c, - 0x1f, 0xfc, 0x2d, 0xf, 0xfe, 0x9d, 0x3, 0xff, - 0x85, 0x87, 0xa0, 0xfe, 0x43, 0xff, 0x87, 0x21, - 0xff, 0xc1, 0x70, 0xf9, 0xf, 0xec, 0x3f, 0xf8, - 0x68, 0x7f, 0xf0, 0x68, 0x1f, 0xfc, 0x64, 0x3f, - 0xf8, 0x28, 0x7f, 0xf0, 0xa4, 0x3f, 0xc8, 0x7f, - 0xf2, 0xa0, 0xff, 0xe0, 0xe8, 0x7f, 0xd8, 0x7f, - 0xf2, 0x70, 0xff, 0xe0, 0xe1, 0xff, 0xc1, 0x43, - 0xe4, 0x3f, 0xf8, 0x10, 0x7f, 0xf0, 0x1c, 0x3f, - 0xf8, 0x68, 0x7b, 0xf, 0xf9, 0x41, 0xff, 0x30, - 0x7f, 0xf1, 0x30, 0xf2, 0x1f, 0xf4, 0x1f, 0xf3, - 0x7, 0xff, 0x15, 0xf, 0xfe, 0x2c, 0x1f, 0xf3, - 0x7, 0xff, 0x61, 0xf, 0xfa, 0xf, 0xfe, 0x44, - 0x19, 0xf, 0xf4, 0x1f, 0xf6, 0x1f, 0xfc, 0x94, - 0x36, 0x1f, 0xe4, 0x3f, 0xd0, 0x7f, 0xf3, 0xd0, - 0xfe, 0x43, 0xfc, 0xa0, 0xff, 0xe5, 0xa1, 0xff, - 0xc1, 0x83, 0xfd, 0x7, 0xff, 0x32, 0x48, 0x3f, - 0xf9, 0x8, 0x7f, 0xf3, 0xad, 0xf, 0xe4, 0x3f, - 0xd0, 0x7f, 0xf6, 0xb0, 0xff, 0xf2, 0xa1, 0xfd, - 0x7, 0xff, 0x95, 0xf, 0xff, 0xf8, 0x7f, 0xf2, - 0xd0, 0xff, 0xf2, 0xe1, 0xff, 0xe5, 0x43, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xb7, 0x87, 0xec, 0x3f, 0xfb, 0x80, - - /* U+E921 "" */ - 0xf, 0xff, 0xaa, 0xaf, 0x83, 0xff, 0xee, 0xd3, - 0xf5, 0x10, 0xff, 0xf9, 0x2a, 0x9f, 0xa5, 0x7, - 0xf4, 0x1f, 0xfe, 0xbb, 0xea, 0x28, 0x3f, 0xf8, - 0x7a, 0x1f, 0xfe, 0xb4, 0x3f, 0xf9, 0xe, 0x1f, - 0xfe, 0xd4, 0x3f, 0xf8, 0xfc, 0x1f, 0xfe, 0xe8, - 0x3f, 0xf8, 0xae, 0x1f, 0xff, 0xf0, 0x50, 0x3f, - 0xfe, 0x50, 0x7f, 0xf0, 0xa4, 0x3f, 0xfe, 0x68, - 0x7f, 0xf0, 0xb0, 0xff, 0xf0, 0xd0, 0x3f, 0xf8, - 0xc8, 0x7f, 0xf0, 0x5c, 0x3f, 0xfb, 0xce, 0xa0, - 0xff, 0xe3, 0x41, 0xff, 0xc3, 0xd0, 0xff, 0xed, - 0xd0, 0x2c, 0x3f, 0xf8, 0xc8, 0x7f, 0xf0, 0xe8, - 0x1f, 0xfd, 0x99, 0xe, 0x43, 0xff, 0x8b, 0x87, - 0xff, 0x11, 0xc3, 0xff, 0xaf, 0xa1, 0xe8, 0x3f, - 0xf8, 0xa8, 0x7f, 0xf1, 0xb0, 0xff, 0xea, 0xe1, - 0xff, 0xcf, 0x43, 0xeb, 0x43, 0xf6, 0x1f, 0xfd, - 0x3c, 0x3f, 0x58, 0x7f, 0xf1, 0xa0, 0xf9, 0x28, - 0x1f, 0xb0, 0xff, 0xe8, 0xc1, 0xfb, 0x43, 0xff, - 0x90, 0x87, 0xf3, 0xa1, 0xf6, 0x1f, 0xfc, 0xf9, - 0xf, 0xb0, 0xff, 0xe5, 0x61, 0xff, 0x48, 0x7d, - 0x87, 0xff, 0x39, 0xf, 0xb0, 0xff, 0xe5, 0xa1, - 0xff, 0xc0, 0xa0, 0x7c, 0x87, 0xff, 0x33, 0xf, - 0xb0, 0xff, 0xe6, 0xc1, 0x90, 0xf9, 0x41, 0xe8, - 0x3f, 0xf9, 0x70, 0x7d, 0x87, 0xff, 0x39, 0xf, - 0xfe, 0xc, 0x87, 0xb0, 0xff, 0xe5, 0x21, 0xec, - 0x3f, 0xfa, 0x8, 0x58, 0x7f, 0x41, 0xf2, 0x1f, - 0xfc, 0x88, 0x3d, 0x7, 0xff, 0x46, 0xf, 0xfe, - 0x16, 0x1e, 0x83, 0xff, 0x90, 0x87, 0x90, 0xff, - 0xf0, 0xa1, 0xe4, 0x3f, 0xf8, 0xd0, 0x7b, 0xf, - 0xfe, 0x9c, 0x4, 0x3f, 0xe8, 0x3d, 0x7, 0xff, - 0x19, 0xe, 0x43, 0xff, 0xa8, 0xb0, 0x7f, 0xf0, - 0x60, 0xf2, 0x1f, 0xfc, 0x44, 0x3d, 0x7, 0xff, - 0x56, 0x81, 0xff, 0xc1, 0x43, 0xd8, 0x7f, 0xf1, - 0x20, 0xe4, 0x3f, 0xfc, 0xd0, 0x72, 0x1f, 0xfc, - 0xac, 0x3f, 0xfc, 0xc8, 0x79, 0xf, 0xfe, 0x12, - 0x1e, 0x43, 0xff, 0xce, 0x87, 0x41, 0xff, 0xc2, - 0xc3, 0x90, 0xff, 0xf4, 0x61, 0xff, 0xc8, 0x43, - 0xb0, 0xff, 0xf4, 0x21, 0xff, 0xce, 0x43, 0xff, - 0xde, 0x87, 0xff, 0x1, 0xf, 0xff, 0x82, 0x1d, - 0x87, 0xff, 0xf7, 0xf, 0x3a, 0x1f, 0xfc, 0x34, - 0x3f, 0xad, 0xf, 0xff, 0x2c, 0x5c, 0x1f, 0x61, - 0xff, 0xc1, 0xb4, 0xc3, 0xff, 0xc8, 0xe1, 0x3c, - 0x1f, 0xfc, 0x5b, 0x42, 0x83, 0xff, 0xcd, 0x6, - 0x79, 0xf, 0xf9, 0xf2, 0x1a, 0xf, 0xfe, 0xfb, - 0xfe, 0x14, 0x1c, 0xdc, 0x87, 0x37, 0x7, 0x94, - 0x1f, 0xfe, 0x88, 0x3f, 0x21, 0xf2, 0x1f, 0xa0, - 0xff, 0xf5, 0x61, 0xff, 0xcb, 0xc3, 0xff, 0xd9, - 0x7, 0xff, 0x26, 0xf, 0xff, 0x6a, 0x83, 0xff, - 0x8e, 0xa0, 0xff, 0xf7, 0x41, 0xff, 0xc6, 0x60, - 0xff, 0xf8, 0x61, 0xff, 0xc5, 0x83, 0xff, 0xe5, - 0x7, 0xff, 0xf, 0xf, 0xff, 0x9a, 0x83, 0xff, - 0x83, 0x7, 0xff, 0xd6, 0x43, 0xfe, 0x50, 0x7f, - 0xfd, 0xa0, 0xff, 0xa0, 0xff, 0xfc, 0x61, 0xfd, - 0x87, 0xff, 0xea, 0xf, 0xa0, 0xff, 0xfd, 0xa8, - 0x39, 0x41, 0xff, 0xd4, 0xb9, 0x41, 0xff, 0xd7, - 0x83, 0xa0, 0xff, 0xea, 0x28, 0x69, 0xfa, 0x88, - 0x7f, 0xf4, 0x70, 0xb0, 0xff, 0xea, 0xa8, 0x3f, - 0x2a, 0xfd, 0x45, 0x7, 0xff, 0x2a, 0x20, 0xff, - 0xeb, 0xd0, 0x3f, 0xf8, 0x4a, 0xa7, 0xd4, 0xf, - 0xfe, 0x2b, 0xa1, 0xff, 0xd8, 0x74, 0x3f, 0xf8, - 0xea, 0xf, 0xff, 0x75, 0x3, 0xff, 0x8e, 0x87, - 0xff, 0xbd, 0xc3, 0xff, 0x8d, 0x7, 0xff, 0xc7, - 0x43, 0xff, 0x86, 0x87, 0xff, 0xce, 0x43, 0xff, - 0x85, 0x87, 0xff, 0xfc, 0x32, 0x1f, 0xfd, 0x8d, - 0xf, 0xfe, 0x63, 0xa1, 0xff, 0xc1, 0x83, 0xff, - 0xb1, 0x16, 0x87, 0xff, 0x21, 0xe0, 0xff, 0xe1, - 0xa1, 0xff, 0xd8, 0x42, 0xb9, 0xf, 0xfe, 0x13, - 0x70, 0x7f, 0xf1, 0x10, 0xff, 0xec, 0x41, 0xe6, - 0xf5, 0x17, 0xd4, 0xf4, 0x87, 0xff, 0x1b, 0xf, - 0xfe, 0xba, 0x83, 0xfc, 0xaa, 0xf2, 0x83, 0xff, - 0x94, 0x87, 0xff, 0xe1, 0xd0, 0xfa, 0xf, 0xfe, - 0xc3, 0xc1, 0xff, 0xd0, 0x78, 0x83, 0xe4, 0x3f, - 0xfb, 0x4f, 0x21, 0xff, 0xcb, 0xb8, 0x3f, 0xc8, - 0x7f, 0xf7, 0x5b, 0x90, 0xff, 0xe2, 0xbe, 0x43, - 0xff, 0x81, 0x7, 0xff, 0x81, 0xbd, 0x28, 0x3c, - 0xaa, 0x7a, 0xf, 0xff, 0xa3, 0x4f, 0xf5, 0x14, - 0x1f, 0xfc, 0x4, 0x34, 0x1f, 0xff, 0xf0, 0xc8, - 0x7f, 0xff, 0xc2, 0x43, 0xff, 0xff, 0x85, 0x7, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xfa, 0xf, 0xff, - 0xf8, 0x81, 0xf, 0xff, 0xf8, 0x3c, 0x1f, 0xfc, - 0x0, - - /* U+E922 "" */ - 0xf, 0xff, 0x55, 0xff, 0xd0, 0x7f, 0xfd, 0xef, - 0x21, 0xfc, 0xfa, 0xf, 0xff, 0x97, 0x90, 0xff, - 0xe1, 0xbe, 0xf, 0xff, 0x73, 0x87, 0xff, 0x27, - 0x83, 0xff, 0xd7, 0xc1, 0xff, 0xcb, 0x70, 0xff, - 0xf4, 0xe1, 0xff, 0x34, 0x50, 0x7f, 0xd8, 0x7f, - 0xf9, 0xf0, 0xfc, 0xfd, 0x2a, 0x9f, 0x21, 0xfb, - 0xf, 0xff, 0x2e, 0x1f, 0xb8, 0x3f, 0xeb, 0x43, - 0xec, 0x3f, 0xf9, 0x56, 0x87, 0xff, 0x2b, 0xf, - 0xbc, 0x1f, 0xfc, 0x3b, 0xf, 0xb0, 0xff, 0xe4, - 0x68, 0x7f, 0xf2, 0xd0, 0xfb, 0xf, 0xfe, 0x3e, - 0x1f, 0x41, 0xff, 0xc6, 0xc2, 0x43, 0xff, 0x93, - 0x7, 0xb0, 0xff, 0xe4, 0xe1, 0xe4, 0x3f, 0xf8, - 0x8e, 0x14, 0x1f, 0xfc, 0x98, 0x3d, 0x87, 0xff, - 0x2f, 0xf, 0x61, 0xff, 0xc2, 0xa0, 0x64, 0x3f, - 0xf9, 0x28, 0x76, 0x1f, 0xfc, 0xdc, 0x3f, 0xf8, - 0xfa, 0x19, 0xf, 0xfe, 0x4c, 0x1f, 0xfd, 0x54, - 0x3a, 0xf, 0xf3, 0x87, 0xa0, 0xff, 0xe4, 0xa1, - 0xd8, 0x7f, 0xf3, 0xe0, 0xe4, 0x3f, 0xa8, 0x1e, - 0x43, 0xff, 0xda, 0x87, 0xff, 0x7, 0x43, 0xe8, - 0x3f, 0xf9, 0x28, 0x76, 0x1f, 0xfd, 0x18, 0x3a, - 0xe, 0x70, 0xff, 0xe9, 0xc1, 0xff, 0xdd, 0x43, - 0x30, 0x7f, 0x97, 0xff, 0x94, 0x1f, 0xfe, 0x2a, - 0x7, 0xfd, 0x5f, 0xfc, 0xa0, 0xff, 0xec, 0xa1, - 0xf6, 0x87, 0xff, 0x6d, 0xf, 0xfe, 0xd4, 0x1f, - 0xff, 0xf0, 0xe9, 0xf, 0xff, 0xf8, 0x75, 0x3, - 0xff, 0xb6, 0x87, 0xff, 0x4d, 0xf, 0xce, 0x1f, - 0xf7, 0xff, 0xf2, 0x95, 0xe9, 0xf, 0xfe, 0xf6, - 0x87, 0xff, 0x4f, 0x9, 0x41, 0xff, 0xdf, 0xa0, - 0x7e, 0x43, 0xff, 0x92, 0xa0, 0xc8, 0x7f, 0xf4, - 0x50, 0xe4, 0x3e, 0x70, 0xfa, 0xf, 0xfe, 0x75, - 0x87, 0xff, 0x46, 0xe, 0x83, 0xfb, 0x43, 0xc8, - 0x7f, 0xf2, 0x58, 0xa, 0xf, 0xfe, 0x82, 0x1f, - 0xfc, 0x5a, 0x7, 0x41, 0xff, 0xc9, 0x90, 0xac, - 0x3f, 0xf9, 0xf0, 0x72, 0x1f, 0xfc, 0x7, 0xf, - 0xfe, 0x82, 0x4, 0x43, 0xff, 0x9b, 0x7, 0xa0, - 0xff, 0xe1, 0x68, 0x50, 0x7f, 0xf2, 0x68, 0x17, - 0x21, 0xff, 0xcb, 0x50, 0x7f, 0xf2, 0xa8, 0x4, - 0x3f, 0xf9, 0x2a, 0x82, 0xa0, 0x7f, 0xf2, 0x98, - 0x3d, 0x87, 0xff, 0x15, 0xc0, 0x87, 0xff, 0x26, - 0x50, 0x1b, 0x43, 0xff, 0x8f, 0x40, 0xf4, 0x1f, - 0xfc, 0x8e, 0x43, 0xff, 0x95, 0x40, 0x9e, 0x81, - 0xff, 0xc5, 0xd0, 0xf9, 0xf, 0xfe, 0x4a, 0x1f, - 0xfc, 0xb6, 0xc3, 0x66, 0x87, 0xff, 0x7, 0xc1, - 0xfb, 0xf, 0xff, 0x1a, 0xb0, 0xd7, 0xd2, 0x1e, - 0x6f, 0x7, 0xf6, 0x1f, 0xfe, 0x59, 0xc3, 0xaf, - 0xfe, 0x90, 0xff, 0x61, 0xff, 0xe7, 0xa7, 0x7, - 0x36, 0x1f, 0xfc, 0x4c, 0x3f, 0xfd, 0x2e, 0x68, - 0x7f, 0xf2, 0x2c, 0x3f, 0xfd, 0x95, 0x70, 0x7f, - 0xf1, 0x74, 0x3f, 0xfd, 0xcf, 0x1e, 0xa0, 0x7f, - 0x9f, 0x7, 0xff, 0xc9, 0xbb, 0xf, 0xcf, 0xa0, - 0xff, 0xfb, 0xaa, 0xe, 0xf4, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xfd, 0x30, - - /* U+E923 "" */ - 0xf, 0xfe, 0x23, 0x7f, 0xa8, 0x87, 0xff, 0xdd, - 0xfd, 0x7f, 0x8f, 0x48, 0x7f, 0xfc, 0xaf, 0x5c, - 0xa0, 0xe6, 0x9e, 0xb4, 0x3f, 0xfd, 0xce, 0x72, - 0x1f, 0xfc, 0x17, 0xd6, 0x1f, 0xfe, 0xca, 0x70, - 0x73, 0x7e, 0xa2, 0x1d, 0xda, 0x1f, 0xfe, 0x9c, - 0xc3, 0x3f, 0xaf, 0xfa, 0xc, 0xf4, 0xf, 0xff, - 0x3e, 0xc1, 0x3f, 0xa5, 0x4, 0xab, 0xe8, 0x36, - 0xc1, 0xff, 0xe5, 0xd8, 0x2e, 0xe0, 0xff, 0xe0, - 0x39, 0xa1, 0x6c, 0x1f, 0xfe, 0x39, 0x82, 0xdc, - 0x3f, 0xf8, 0x97, 0x40, 0xb5, 0x7, 0xff, 0x29, - 0xe0, 0xff, 0xe4, 0x2a, 0xb, 0xa0, 0x7f, 0xf1, - 0xf6, 0xb, 0x83, 0xff, 0x98, 0xe1, 0xff, 0xc7, - 0xa0, 0x5c, 0x87, 0xff, 0x27, 0x50, 0x4c, 0x1f, - 0xfc, 0x94, 0x2d, 0xf, 0xfe, 0x24, 0xa0, 0x6a, - 0xf, 0xfe, 0x5f, 0x20, 0x94, 0x1f, 0xfc, 0x98, - 0x29, 0xf, 0xfe, 0x1b, 0x1, 0x20, 0xff, 0xe6, - 0xd0, 0x2a, 0x7, 0xff, 0x25, 0xd, 0x40, 0xff, - 0xe0, 0xc8, 0x54, 0xf, 0xfe, 0x72, 0x20, 0x43, - 0xff, 0x96, 0x86, 0x70, 0xff, 0xe0, 0x38, 0x16, - 0xf, 0xfe, 0x7d, 0x2, 0x60, 0xff, 0xe4, 0xc1, - 0xed, 0xf, 0xf9, 0x5, 0x87, 0xff, 0x41, 0x10, - 0x48, 0x7f, 0xf2, 0x90, 0xf5, 0x3, 0xf2, 0x83, - 0x21, 0xff, 0xd1, 0x70, 0xff, 0xe7, 0x41, 0xf3, - 0x87, 0xde, 0x2, 0x83, 0xff, 0xa5, 0x21, 0x28, - 0x3f, 0xfa, 0x7a, 0x1c, 0x85, 0xe0, 0xff, 0xea, - 0x2e, 0x97, 0xff, 0x94, 0x1f, 0xe9, 0xe, 0x43, - 0xff, 0xb1, 0x50, 0x2b, 0xff, 0x94, 0x1f, 0xf5, - 0x3, 0xff, 0xfe, 0x1c, 0xe1, 0xff, 0xff, 0xf, - 0x41, 0xff, 0xff, 0xc, 0xc1, 0xff, 0xff, 0xa, - 0x81, 0x20, 0xf0, 0x7f, 0xf4, 0x90, 0xf7, 0xff, - 0xf2, 0x83, 0xfe, 0xd0, 0x90, 0x94, 0x1f, 0xfd, - 0x28, 0x39, 0xf, 0xfe, 0x9b, 0x87, 0x78, 0x3f, - 0xfb, 0x98, 0x7f, 0xf2, 0x50, 0xfd, 0x40, 0xf2, - 0x82, 0x60, 0xff, 0xe8, 0x21, 0xe4, 0x3f, 0xf9, - 0x30, 0x7d, 0xa1, 0xfc, 0x82, 0x43, 0xff, 0xa1, - 0x7, 0xff, 0x3d, 0xf, 0x38, 0x7f, 0xac, 0x26, - 0xf, 0xfe, 0x72, 0x1e, 0x83, 0xff, 0x93, 0x7, - 0x50, 0x3f, 0xe5, 0x5, 0x28, 0x3f, 0xf9, 0xb0, - 0x79, 0xf, 0xfe, 0x42, 0x1d, 0xa1, 0xff, 0xc1, - 0xa0, 0x5c, 0x1f, 0xfc, 0xcc, 0x3d, 0x7, 0xff, - 0x27, 0x9, 0xc3, 0xff, 0x86, 0xb0, 0x56, 0x1f, - 0xfc, 0xac, 0x3e, 0x43, 0xff, 0x92, 0x81, 0x83, - 0xff, 0x8b, 0x40, 0x9b, 0x43, 0xff, 0x8f, 0x87, - 0xd8, 0x7f, 0xf2, 0x50, 0x50, 0x3f, 0xf8, 0xca, - 0xc2, 0x6a, 0xf, 0xfe, 0x25, 0x87, 0xc8, 0x7f, - 0xf2, 0x9b, 0x43, 0xff, 0x91, 0x30, 0x4e, 0x68, - 0x7f, 0xf0, 0x1d, 0xf, 0xd0, 0x7f, 0xf2, 0xd0, - 0xff, 0xe5, 0xcc, 0x1a, 0xee, 0x43, 0xcf, 0xa0, - 0xfe, 0xc3, 0xff, 0xcb, 0x98, 0x77, 0xff, 0xa0, - 0xff, 0xb0, 0xff, 0xf3, 0xd3, 0x43, 0x9a, 0x7, - 0xff, 0xd, 0xc3, 0xff, 0xd2, 0xf6, 0x87, 0xff, - 0x23, 0x83, 0xff, 0xd9, 0xd3, 0x43, 0xff, 0x89, - 0x61, 0xff, 0xef, 0x7b, 0xea, 0x7, 0xfa, 0xd0, - 0xff, 0xf9, 0x37, 0x61, 0xfa, 0xf2, 0x1f, 0xff, - 0x75, 0x41, 0xde, 0x43, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xf2, - - /* U+E924 "" */ - 0xf, 0xff, 0x1d, 0xff, 0xf2, 0x1f, 0xff, 0x4f, - 0x90, 0xff, 0xaf, 0x41, 0xff, 0xee, 0x7c, 0x1f, - 0xfc, 0x67, 0xc1, 0xff, 0xeb, 0xe0, 0xff, 0xe5, - 0xf8, 0x3f, 0xfc, 0xfe, 0xf, 0xfe, 0x7f, 0x7, - 0xff, 0x93, 0xf, 0xfe, 0x93, 0x87, 0xff, 0x85, - 0xc3, 0xff, 0xab, 0x87, 0xff, 0x7e, 0x81, 0xff, - 0xc0, 0xbf, 0xf9, 0xf, 0xfe, 0x6, 0x1f, 0xfd, - 0xd5, 0x7, 0xfa, 0xf2, 0x1f, 0xd7, 0x90, 0xff, - 0x61, 0xff, 0xdb, 0x60, 0xfe, 0xb4, 0x3f, 0xf8, - 0x76, 0x87, 0xf6, 0x1f, 0xfd, 0xa8, 0x3f, 0xb4, - 0x3f, 0xf8, 0xf6, 0x1f, 0xd8, 0x7f, 0xf6, 0x30, - 0xfd, 0x61, 0xff, 0xcb, 0xc3, 0xf9, 0xf, 0xfe, - 0xb2, 0x1f, 0xa4, 0x3f, 0xf9, 0xba, 0x1f, 0x41, - 0xff, 0xd6, 0x83, 0xe9, 0xf, 0xfe, 0x7c, 0x1f, - 0xb0, 0xff, 0xea, 0x61, 0xf2, 0x83, 0xff, 0xa3, - 0x87, 0xff, 0x92, 0xf, 0xfe, 0x9e, 0x1f, 0x61, - 0xff, 0xd2, 0x83, 0xec, 0x3f, 0xfa, 0xa8, 0x7f, - 0xf6, 0x50, 0xff, 0xee, 0xc1, 0xf4, 0x1f, 0xfd, - 0x8c, 0x3f, 0xfa, 0xe8, 0x79, 0xf, 0xfe, 0x84, - 0x1f, 0xfd, 0xf8, 0x3f, 0xfa, 0xe8, 0x7a, 0xf, - 0xff, 0x4, 0x1f, 0xfd, 0x64, 0x3f, 0xfb, 0x28, - 0x79, 0xf, 0xff, 0xe4, 0x1f, 0xfd, 0x54, 0x3f, - 0xff, 0xe1, 0xb0, 0xff, 0xff, 0x87, 0xfc, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xf0, 0x30, 0xf2, 0x1f, 0xff, - 0xc4, 0x3f, 0xff, 0xe1, 0xff, 0xe6, 0x43, 0xff, - 0xba, 0x87, 0xff, 0x66, 0xf, 0x21, 0xff, 0xd6, - 0x83, 0xff, 0xc1, 0x7, 0xff, 0x3e, 0xf, 0xfe, - 0xfa, 0x1f, 0xfd, 0x74, 0x3e, 0xc3, 0xff, 0xaf, - 0x7, 0xff, 0xfc, 0x24, 0x3e, 0xc3, 0xff, 0xa3, - 0x87, 0xd8, 0x7f, 0xf5, 0x60, 0xff, 0xf1, 0x21, - 0xff, 0xd3, 0xc3, 0xe8, 0x3f, 0xfa, 0x78, 0x7d, - 0x7, 0xff, 0x4a, 0xf, 0xc8, 0x7f, 0xf7, 0x30, - 0xff, 0xe8, 0x28, 0x3e, 0x83, 0xff, 0xab, 0x87, - 0xec, 0x3f, 0xf9, 0xd4, 0xf, 0xc8, 0x7f, 0xf5, - 0xa0, 0xfd, 0xa1, 0xff, 0xcb, 0xd0, 0xfd, 0x87, - 0xff, 0x5d, 0xf, 0xea, 0x7, 0xff, 0x21, 0xc3, - 0xfb, 0xf, 0xfe, 0xc6, 0x1f, 0xb9, 0xd0, 0xff, - 0xe2, 0xf0, 0x7f, 0x41, 0xff, 0xd8, 0xc3, 0xf6, - 0x3b, 0x68, 0x7f, 0xf0, 0x2f, 0x7, 0xfa, 0x43, - 0xff, 0xaf, 0x87, 0xec, 0x35, 0xb7, 0xae, 0xb7, - 0xe4, 0x3f, 0xe9, 0xf, 0xfe, 0xbe, 0x1f, 0xd8, - 0x7a, 0xf4, 0x5, 0xc1, 0xff, 0xc3, 0x90, 0xff, - 0xeb, 0xe1, 0xfb, 0xc6, 0x87, 0xcc, 0x1f, 0xfc, - 0x7d, 0xf, 0xfe, 0xbe, 0x1f, 0xb0, 0x74, 0xd0, - 0xff, 0xe6, 0x58, 0x7f, 0xf6, 0x30, 0xfd, 0x86, - 0x76, 0xe0, 0xff, 0xe4, 0xe8, 0x7f, 0xf6, 0x30, - 0xfd, 0x87, 0xd7, 0x3e, 0x94, 0x1f, 0xfc, 0x17, - 0xc1, 0xff, 0xc6, 0x90, 0xff, 0xe2, 0xe1, 0xfb, - 0xf, 0xf3, 0xe8, 0xa0, 0x7f, 0x9f, 0x41, 0xff, - 0xc7, 0x98, 0x3f, 0xf8, 0x98, 0x7e, 0xc3, 0xff, - 0x84, 0xde, 0xf, 0xbe, 0x83, 0xff, 0x94, 0x81, - 0xf, 0xfe, 0x16, 0x1f, 0xb0, 0xff, 0xe6, 0xa1, - 0xff, 0xd1, 0x83, 0xff, 0x83, 0x87, 0xec, 0x3f, - 0xff, 0x38, 0x7e, 0xc3, 0xff, 0xdd, 0x7, 0xfb, - 0xf, 0xd8, 0x7f, 0xfa, 0x90, 0xc8, 0x7f, 0x61, - 0xfb, 0xf, 0xff, 0x8a, 0x1f, 0x61, 0xfb, 0xf, - 0xff, 0x66, 0x1d, 0x87, 0xb0, 0xfd, 0x87, 0xff, - 0xcd, 0xe, 0xc3, 0xf6, 0x1f, 0xfe, 0xe4, 0x3c, - 0x85, 0x87, 0xec, 0x3f, 0xfe, 0xd0, 0xe1, 0xfb, - 0xf, 0xff, 0xc7, 0x7, 0xec, 0x3f, 0xff, 0xe1, - 0x61, 0xff, 0xf1, 0x43, 0xff, 0x89, 0x87, 0xff, - 0xfc, 0x2c, 0x3f, 0xfe, 0x78, 0x7f, 0xf0, 0xa0, - 0xff, 0xff, 0x86, 0x43, 0xff, 0xe8, 0x87, 0xff, - 0xb, 0x43, 0xff, 0xfe, 0x1a, 0xe4, 0x3f, 0xff, - 0xe1, 0x37, 0x7, 0xff, 0xfc, 0x33, 0xe4, 0x3f, - 0xf9, 0x95, 0xf0, 0x7f, 0xf2, 0xd0, 0xff, 0xe6, - 0x5a, 0x1f, 0xfc, 0xa5, 0xf0, 0x7f, 0xf9, 0xf0, - 0xff, 0xf4, 0x61, 0xff, 0xcd, 0x60, 0xff, 0xfd, - 0x2a, 0x9f, 0xa0, 0xff, 0xf4, 0xa1, 0xfc, 0xaa, - 0x7e, 0xa2, 0x83, 0xff, 0xe0, 0xaa, 0x7e, 0xa2, - 0x83, 0xff, 0xec, - - /* U+E925 "" */ - 0xf, 0xfe, 0x42, 0xaf, 0xfa, 0x88, 0x7f, 0xfd, - 0x1b, 0xa0, 0xd7, 0x23, 0x79, 0xf, 0xff, 0x7d, - 0xc5, 0xea, 0x2f, 0x53, 0xd3, 0x70, 0x7f, 0xfa, - 0xdd, 0x5c, 0x87, 0xff, 0x5, 0xb9, 0xe0, 0xff, - 0xf3, 0xbd, 0x38, 0x3f, 0xf8, 0xef, 0x3a, 0x1f, - 0xfe, 0x46, 0x74, 0x3e, 0x69, 0xfa, 0x50, 0x79, - 0xea, 0xf, 0xff, 0x15, 0x60, 0xf5, 0xe8, 0xc, - 0xa2, 0x9c, 0x87, 0x3b, 0x87, 0xff, 0x83, 0x74, - 0x33, 0xe6, 0xf5, 0x4d, 0x5e, 0x8b, 0x43, 0xb7, - 0xf, 0xfe, 0xf6, 0x61, 0xd4, 0x7c, 0x87, 0xfc, - 0xdb, 0x61, 0xd3, 0x87, 0xff, 0x72, 0x30, 0xce, - 0xd0, 0x3f, 0xf8, 0xb6, 0xe8, 0x69, 0xc3, 0xff, - 0xb5, 0x38, 0x66, 0x74, 0x3f, 0xf9, 0x15, 0x83, - 0x46, 0x1f, 0xfd, 0x85, 0x41, 0xab, 0x7, 0xff, - 0x2d, 0xd8, 0x36, 0x41, 0xff, 0xd7, 0x94, 0x12, - 0xa4, 0x3f, 0xf9, 0xdb, 0x6, 0x90, 0xff, 0xeb, - 0x24, 0x13, 0x44, 0x3f, 0xfa, 0x1b, 0x4, 0xac, - 0x3f, 0xfa, 0xb4, 0xd, 0x28, 0x3f, 0xfa, 0x52, - 0x82, 0x84, 0x3f, 0xfa, 0x70, 0x85, 0x10, 0x7f, - 0xf4, 0xd5, 0x6, 0x60, 0xff, 0xe9, 0xa8, 0x33, - 0x7, 0xff, 0x56, 0x10, 0xa1, 0xf, 0xfe, 0x8a, - 0x41, 0x42, 0x1f, 0xfd, 0x66, 0xc, 0xe1, 0xff, - 0xd1, 0xd0, 0xcc, 0x1f, 0xfd, 0x78, 0x42, 0xd0, - 0xff, 0xe8, 0xb8, 0x50, 0x87, 0xff, 0x61, 0x82, - 0x44, 0x3f, 0xf9, 0xe8, 0x84, 0xc1, 0xff, 0xd9, - 0xc3, 0xd8, 0x7f, 0xf5, 0x90, 0xff, 0xec, 0xa2, - 0x12, 0x83, 0xff, 0x9f, 0xa1, 0x21, 0xff, 0xdd, - 0xc2, 0xc3, 0xff, 0xa0, 0x86, 0xc3, 0xff, 0xb8, - 0x86, 0x43, 0xff, 0xa3, 0x86, 0x43, 0xff, 0xb7, - 0xa1, 0xc8, 0x7f, 0xff, 0xc3, 0xff, 0xb0, 0x87, - 0xff, 0xfc, 0x32, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xf9, 0xf, 0xfe, 0xde, 0x1e, 0x43, 0xff, - 0x9c, 0xe1, 0x61, 0xff, 0xdd, 0x42, 0x43, 0xff, - 0xa2, 0x84, 0x87, 0xff, 0x71, 0xc3, 0xff, 0xa9, - 0x87, 0x90, 0xff, 0xed, 0xa1, 0x68, 0x7f, 0xf3, - 0xd1, 0x9, 0x83, 0xff, 0xb3, 0x7, 0x38, 0x7f, - 0xf4, 0x70, 0xa0, 0xff, 0xed, 0x30, 0x72, 0x1f, - 0xfd, 0x9, 0xe, 0x83, 0xff, 0xae, 0x88, 0x50, - 0x7f, 0xf4, 0x91, 0xa, 0x43, 0xff, 0xaf, 0x21, - 0x98, 0x3f, 0xfa, 0x4c, 0x12, 0xb0, 0xff, 0xea, - 0xc4, 0x12, 0x21, 0xff, 0xd2, 0x84, 0x28, 0x83, - 0xff, 0xa6, 0xa8, 0x34, 0x87, 0xff, 0x51, 0x83, - 0x4a, 0xf, 0xfe, 0x94, 0x1c, 0x90, 0x7f, 0xf5, - 0x21, 0x9, 0x50, 0x7f, 0xf4, 0x70, 0x48, 0x28, - 0x1f, 0xfd, 0x6a, 0x6, 0x9d, 0xf, 0xfe, 0x6b, - 0x86, 0x9c, 0x43, 0xff, 0xac, 0xac, 0x34, 0xc8, - 0x7f, 0xf2, 0xe8, 0x1e, 0x8c, 0x3f, 0xfb, 0x11, - 0x6, 0xac, 0x1f, 0xfc, 0x9d, 0xf, 0xe4, 0x3f, - 0xfb, 0x3b, 0x6, 0x77, 0x83, 0xff, 0x8b, 0xe0, - 0xff, 0xa4, 0x3f, 0xfb, 0x3b, 0x7, 0x73, 0xc8, - 0x7f, 0xcf, 0x83, 0xff, 0x85, 0x21, 0xff, 0xd9, - 0xdc, 0x39, 0xe6, 0xfe, 0xbf, 0xa0, 0xff, 0xe2, - 0xc8, 0x7f, 0xf6, 0x73, 0x43, 0x9f, 0x48, 0x48, - 0x7f, 0xf3, 0x24, 0x3f, 0xfb, 0x3b, 0x40, 0xf9, - 0x90, 0xff, 0xe3, 0x78, 0x3f, 0x48, 0x7f, 0xf6, - 0x6d, 0xe0, 0xff, 0xe6, 0xe0, 0xc3, 0xf4, 0x87, - 0xff, 0x6b, 0x9e, 0x43, 0xff, 0x91, 0xe0, 0xd8, - 0x7e, 0x90, 0xff, 0xed, 0x3c, 0x5e, 0x94, 0x1f, - 0xfc, 0x1f, 0x7, 0xd8, 0x7e, 0x90, 0xff, 0xed, - 0xb7, 0x2a, 0xf, 0xfa, 0xf0, 0x7f, 0xb0, 0xfd, - 0x21, 0xff, 0xc4, 0x60, 0xff, 0xe5, 0xb7, 0x83, - 0xef, 0xc8, 0x7f, 0xf0, 0x70, 0xfd, 0x21, 0xff, - 0xc3, 0x98, 0x3f, 0xf9, 0xc8, 0x7f, 0xf3, 0x70, - 0xfd, 0x21, 0xff, 0xc1, 0x40, 0x87, 0xff, 0xa7, - 0xf, 0xd2, 0x1f, 0xfc, 0x8, 0x3f, 0xfd, 0xb8, - 0x7e, 0x90, 0xff, 0xfd, 0x61, 0xfa, 0x43, 0xfa, - 0xf, 0xff, 0x86, 0x1f, 0xa0, 0xfe, 0x43, 0x21, - 0xff, 0xec, 0xc3, 0xf6, 0x1f, 0x21, 0xff, 0xf3, - 0xc3, 0xf6, 0x1e, 0xc3, 0xb0, 0xff, 0xf7, 0x61, - 0xfb, 0xe, 0x43, 0xff, 0xeb, 0x87, 0xec, 0x24, - 0x3c, 0x87, 0xff, 0xc3, 0xf, 0xda, 0x41, 0xff, - 0xf8, 0xc3, 0xf5, 0x87, 0xff, 0xeb, 0xf, 0xff, - 0xf8, 0x76, 0x1f, 0xfc, 0x44, 0x3f, 0xfe, 0x78, - 0x7f, 0xff, 0xc3, 0xa0, 0xff, 0xe1, 0x61, 0xff, - 0xf4, 0x43, 0xff, 0xfe, 0x13, 0x87, 0xff, 0x9, - 0xf, 0xff, 0x83, 0x70, 0x7f, 0xff, 0xae, 0x43, - 0xff, 0xbd, 0x5f, 0x7, 0xff, 0x31, 0xf2, 0x1f, - 0xfe, 0x25, 0xf0, 0x7f, 0xf2, 0x9e, 0xf, 0xfe, - 0x62, 0x1f, 0xfe, 0x8c, 0x3f, 0xff, 0xe1, 0xa4, - 0x3f, 0xf9, 0xb8, 0x7f, 0xfa, 0x6f, 0xd4, 0x50, - 0x7f, 0xff, 0xc5, 0x53, 0xf5, 0x14, 0x1f, 0xc8, - 0x7f, 0xfd, 0x95, 0x4f, 0xd4, 0x50, 0x0, - - /* U+E926 "" */ - 0xf, 0xff, 0xb7, 0xd4, 0x50, 0x7f, 0xfc, 0x55, - 0x4f, 0xd2, 0x83, 0xff, 0xce, 0x87, 0xf9, 0xa7, - 0xea, 0x28, 0x3f, 0xfe, 0x2a, 0xa0, 0x7f, 0xf7, - 0xf0, 0xff, 0xe4, 0x21, 0xff, 0xf1, 0x6e, 0xf, - 0xfe, 0xfa, 0x1f, 0xfc, 0x3b, 0x90, 0xff, 0xf7, - 0x3e, 0x43, 0xff, 0xe3, 0x7, 0xff, 0xd1, 0xf, - 0xff, 0x42, 0x1f, 0xf4, 0x87, 0xff, 0xd2, 0x43, - 0xff, 0xcd, 0x87, 0xff, 0x6, 0x43, 0xff, 0xd6, - 0xf8, 0x3d, 0x21, 0xff, 0xe4, 0x43, 0xb0, 0x61, - 0xe9, 0xf, 0xff, 0x4a, 0x16, 0x1e, 0x90, 0xff, - 0xf3, 0xa1, 0xd8, 0x7a, 0x43, 0xff, 0xcd, 0x7, - 0xb0, 0xf4, 0x87, 0xff, 0x85, 0xf, 0xfa, 0xf, - 0x48, 0x7f, 0xf8, 0x30, 0x41, 0xf9, 0x83, 0xd2, - 0x1f, 0xfe, 0x24, 0x3f, 0x98, 0x3d, 0x21, 0xff, - 0xde, 0x44, 0x3f, 0xe6, 0xf, 0x48, 0x7f, 0xcf, - 0xff, 0x21, 0xff, 0xc8, 0xe0, 0xff, 0xe0, 0x30, - 0x7a, 0x43, 0xe7, 0xd0, 0x7f, 0x5e, 0x83, 0xff, - 0xa8, 0xc1, 0xe9, 0xc, 0xf0, 0x7f, 0xf0, 0xdf, - 0x7, 0xff, 0x4d, 0x83, 0xd2, 0xe, 0xf, 0xfe, - 0x46, 0x87, 0xff, 0x49, 0x83, 0xd4, 0xc3, 0xff, - 0x97, 0x61, 0xff, 0xd2, 0x60, 0xf2, 0x1f, 0xfc, - 0xec, 0x3f, 0xfa, 0x4c, 0x1f, 0xfc, 0x3b, 0xfc, - 0x87, 0xfb, 0xf, 0xfe, 0x93, 0x7, 0xfd, 0x79, - 0xf, 0x5e, 0x43, 0xf6, 0x1f, 0xfd, 0x25, 0x7, - 0xeb, 0x43, 0xff, 0x81, 0x61, 0xfb, 0xf, 0xfe, - 0x92, 0x83, 0xda, 0x1f, 0xfc, 0x4e, 0xf, 0xa0, - 0xff, 0xe8, 0x4d, 0x3, 0x61, 0xff, 0xc7, 0x70, - 0xf2, 0x1f, 0xfc, 0xf5, 0x43, 0x3, 0xf, 0xfe, - 0x54, 0x1e, 0xc3, 0xff, 0x9d, 0x40, 0xb3, 0xf, - 0xfe, 0x5a, 0x83, 0xff, 0xaa, 0x84, 0xe1, 0xff, - 0xcd, 0x83, 0xd0, 0x7f, 0xf3, 0x24, 0x29, 0xf, - 0xfe, 0x7c, 0x1c, 0x87, 0xff, 0x31, 0x82, 0x60, - 0xff, 0xe7, 0xa1, 0xff, 0xd6, 0x50, 0x7f, 0xf4, - 0x60, 0xe8, 0x3f, 0xf9, 0x4a, 0xb, 0xc1, 0xff, - 0xd1, 0x43, 0x90, 0xff, 0xe5, 0x61, 0x94, 0x1f, - 0xfe, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xcd, 0x43, - 0xff, 0x9e, 0x87, 0xff, 0xd1, 0xf, 0xff, 0xf8, - 0x7f, 0xfa, 0xf0, 0xff, 0xeb, 0xa1, 0xff, 0xcf, - 0xc3, 0xff, 0xe8, 0xa0, 0x94, 0x1f, 0xff, 0x3e, - 0xf, 0xfe, 0x8c, 0x1d, 0x7, 0xff, 0x2d, 0x80, - 0x88, 0x7f, 0xf4, 0x10, 0xe4, 0x3f, 0xf9, 0x7a, - 0x15, 0x3, 0xff, 0x9f, 0x7, 0xff, 0x49, 0x10, - 0x22, 0x1f, 0xfc, 0xe4, 0x3b, 0xf, 0xfe, 0x6d, - 0x2, 0xe0, 0xff, 0xe6, 0xe1, 0xff, 0xd4, 0x44, - 0x2b, 0xf, 0xfe, 0x5e, 0x1e, 0xc3, 0xff, 0x9f, - 0xc1, 0x2b, 0xf, 0xfe, 0x4e, 0x1e, 0x43, 0xff, - 0xa3, 0x61, 0x4e, 0x1f, 0xfc, 0x7c, 0x3e, 0x83, - 0xff, 0xa2, 0xac, 0x2a, 0x70, 0x7f, 0xf0, 0xec, - 0x3e, 0xc3, 0xff, 0xa7, 0x38, 0x4e, 0x70, 0x7f, - 0xd6, 0x87, 0xd8, 0x7f, 0xf5, 0x67, 0xd, 0x67, - 0xaa, 0x69, 0xf2, 0x1f, 0xb0, 0xff, 0xeb, 0xd3, - 0x43, 0x5c, 0x2a, 0x50, 0x7f, 0xd8, 0x7f, 0xf6, - 0x5e, 0xd0, 0xcc, 0x1f, 0xfc, 0x27, 0xf, 0xfe, - 0xe7, 0x4d, 0xf, 0xfe, 0x2f, 0x7, 0xff, 0x79, - 0xef, 0xa4, 0x3f, 0xef, 0x7, 0xff, 0x89, 0xb8, - 0x83, 0xf5, 0xe0, 0xff, 0xf3, 0xb6, 0x1d, 0x79, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xc, - - /* U+E927 "" */ - 0xf, 0xff, 0x82, 0xa8, 0x1f, 0xfe, 0x95, 0x53, - 0xf5, 0x14, 0x1f, 0xfe, 0x15, 0x53, 0xf5, 0x14, - 0x1f, 0xfe, 0x7b, 0xa2, 0x83, 0xff, 0xfe, 0x1f, - 0xfe, 0x5b, 0x43, 0xff, 0x8c, 0x87, 0xff, 0x86, - 0xe4, 0x3f, 0xfe, 0x6d, 0xc8, 0x7f, 0xf0, 0x30, - 0xff, 0xf3, 0x32, 0x1f, 0xf2, 0x1f, 0xfe, 0x84, - 0x3f, 0xfe, 0x78, 0x7f, 0xfc, 0xf0, 0xff, 0xf9, - 0xe1, 0xff, 0xc1, 0x43, 0xff, 0xcb, 0x87, 0x9e, - 0xf, 0xff, 0x56, 0x1e, 0x61, 0xe, 0xc3, 0xff, - 0xc7, 0x87, 0x98, 0x24, 0x3f, 0xfc, 0xf8, 0x79, - 0x83, 0x61, 0x90, 0xff, 0xf0, 0xe1, 0xe6, 0xe, - 0x43, 0xff, 0xcb, 0x87, 0x98, 0x3e, 0x43, 0xff, - 0xc7, 0x87, 0x98, 0x3f, 0x41, 0xff, 0xe2, 0xc3, - 0xcc, 0x1f, 0xe4, 0x43, 0xff, 0xbd, 0x87, 0x98, - 0x3f, 0xec, 0xc3, 0xff, 0x8c, 0xdf, 0xfd, 0x21, - 0xfe, 0xc3, 0xcc, 0x1f, 0xfc, 0x7, 0x43, 0xff, - 0x86, 0xdf, 0xff, 0x45, 0xc1, 0xf6, 0x1e, 0x60, - 0xff, 0xe9, 0x77, 0xa4, 0x3f, 0x37, 0x8e, 0xd, - 0x87, 0x98, 0x3f, 0xfa, 0x37, 0x68, 0x7f, 0xf0, - 0xec, 0xd3, 0xf, 0x30, 0x7f, 0xf4, 0x73, 0x43, - 0x37, 0xfd, 0x21, 0xae, 0xc3, 0xd4, 0xf, 0xfe, - 0x8f, 0x40, 0xd7, 0xff, 0xd6, 0x87, 0xfd, 0x21, - 0xff, 0xd1, 0xe4, 0x2b, 0xe9, 0xf, 0x9f, 0xc9, - 0x87, 0xa4, 0x3f, 0xfa, 0x3c, 0x85, 0x9a, 0x1f, - 0xfc, 0x1a, 0xb0, 0xf4, 0x87, 0xff, 0x47, 0x90, - 0x3d, 0x3, 0xff, 0x88, 0xe1, 0xf4, 0x1f, 0xfd, - 0x19, 0x40, 0x6d, 0xf, 0xfe, 0x3e, 0x1f, 0x41, - 0xff, 0xd0, 0x60, 0xa8, 0x1f, 0xfc, 0xac, 0x3c, - 0x87, 0xff, 0x3e, 0x81, 0x72, 0x1f, 0xfc, 0xbc, - 0x3d, 0x87, 0xff, 0x39, 0x40, 0x58, 0x3f, 0xf9, - 0xb0, 0x7f, 0xf4, 0xe4, 0x2a, 0x7, 0xff, 0x39, - 0xf, 0x41, 0xff, 0xcc, 0x60, 0x28, 0x3f, 0xfa, - 0x18, 0x72, 0x1f, 0xfc, 0xb4, 0x35, 0x3, 0xff, - 0xdd, 0xa1, 0xff, 0xd6, 0x43, 0xa0, 0xff, 0xe5, - 0xe0, 0x50, 0x7f, 0xf4, 0xa0, 0xe4, 0x3f, 0xf9, - 0x48, 0x5e, 0xf, 0xff, 0x82, 0x1f, 0xff, 0x74, - 0x3f, 0xfe, 0x88, 0x7f, 0xff, 0xc3, 0xff, 0xce, - 0x85, 0x87, 0xff, 0xbd, 0xb, 0xf, 0xfe, 0x9a, - 0x1f, 0xfd, 0x1c, 0xa, 0xf, 0xfe, 0x94, 0x1c, - 0x87, 0xff, 0x2b, 0x42, 0x50, 0x7f, 0xf5, 0xe0, - 0xff, 0xe5, 0x21, 0xb8, 0x3f, 0xfa, 0x10, 0x7f, - 0xf4, 0x98, 0x8, 0x87, 0xff, 0x3d, 0xe, 0x43, - 0xff, 0x99, 0x21, 0x50, 0x3f, 0xf9, 0xd0, 0x7a, - 0xf, 0xfe, 0x6a, 0x80, 0xa8, 0x3f, 0xf9, 0x8a, - 0xf, 0xfe, 0xa5, 0x2, 0x94, 0x1f, 0xfc, 0xb8, - 0x3d, 0x87, 0xff, 0x3d, 0x82, 0xe4, 0x3f, 0xf9, - 0x38, 0x7a, 0xf, 0xfe, 0x84, 0xa0, 0xba, 0x7, - 0xff, 0x19, 0xc3, 0xe4, 0x3f, 0xfa, 0x3c, 0x85, - 0x9a, 0x1f, 0xfc, 0x3e, 0xf, 0xb0, 0xff, 0xe9, - 0xf2, 0x15, 0x64, 0x3f, 0xef, 0x7, 0xec, 0x3f, - 0xfa, 0xbc, 0x84, 0xfa, 0xe5, 0xeb, 0xe0, 0xfe, - 0xc3, 0xff, 0xaf, 0xd0, 0x33, 0xf5, 0x72, 0x1f, - 0xf6, 0x1f, 0xfd, 0x9c, 0xd0, 0xe6, 0xf, 0xfe, - 0x13, 0x87, 0xff, 0x6e, 0xee, 0xf, 0xfe, 0x37, - 0x7, 0xff, 0x7b, 0x8f, 0x4e, 0x1f, 0xf7, 0x83, - 0xff, 0xc2, 0xdc, 0x48, 0x7e, 0xbc, 0x1f, 0xfe, - 0x66, 0xe0, 0xef, 0x90, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xf6, - 0x40, - - /* U+E928 "" */ - 0xf, 0xfe, 0x3c, 0x1f, 0xfd, 0xa5, 0x61, 0xff, - 0xd9, 0x81, 0x7, 0xff, 0x5f, 0x9, 0x41, 0xff, - 0xd5, 0x83, 0xa4, 0x3f, 0xfa, 0x6a, 0xf, 0x41, - 0xff, 0xd2, 0x60, 0xfd, 0x87, 0xff, 0x46, 0xf, - 0xf4, 0x1f, 0xfc, 0xfc, 0x3f, 0xe5, 0x7, 0xff, - 0x36, 0xf, 0xfe, 0xc, 0x1f, 0xfc, 0xc5, 0x7, - 0xff, 0xb, 0xf, 0xfe, 0x5c, 0x1f, 0xfc, 0x48, - 0x3f, 0xf9, 0x38, 0x7f, 0xf1, 0x54, 0x1f, 0xfc, - 0x78, 0x3f, 0xf8, 0xf0, 0x7f, 0xf1, 0x94, 0x19, - 0xb0, 0xeb, 0x83, 0xb0, 0xff, 0xe2, 0xc1, 0x3c, - 0x88, 0x79, 0xe0, 0xd8, 0x7f, 0xf0, 0xe0, 0x3c, - 0x1f, 0xfc, 0x17, 0x90, 0xff, 0xe2, 0xd3, 0x83, - 0xff, 0x8a, 0xdc, 0x1f, 0xfc, 0x44, 0x3f, 0xf9, - 0x48, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xc1, 0x64, 0x35, 0xe4, 0x3f, 0xf9, - 0xd7, 0xe0, 0xfd, 0x78, 0x3f, 0xf9, 0x56, 0x7a, - 0x50, 0x7f, 0xbc, 0x1f, 0xfc, 0x67, 0x38, 0x3f, - 0xf8, 0xbc, 0x1f, 0xfc, 0x3a, 0x70, 0x66, 0x43, - 0xff, 0x82, 0xe1, 0xff, 0xc1, 0x8c, 0x35, 0xff, - 0xa0, 0xff, 0x61, 0xff, 0x44, 0x15, 0xf4, 0x87, - 0x3f, 0x7, 0xec, 0x3f, 0xa2, 0xb, 0x34, 0x3f, - 0xf8, 0x1e, 0xf, 0xb0, 0xf9, 0x50, 0x5d, 0x3, - 0xff, 0x89, 0x87, 0xd0, 0x7a, 0xc2, 0xe4, 0x3f, - 0xf8, 0xda, 0x1c, 0x87, 0x48, 0x5c, 0x87, 0xff, - 0x22, 0xf, 0x61, 0x98, 0x12, 0x83, 0xff, 0x95, - 0x87, 0xf4, 0x84, 0xc1, 0xff, 0xcc, 0xc3, 0xb0, - 0x30, 0x28, 0x1f, 0xfd, 0xa5, 0x7, 0xff, 0x3b, - 0xe, 0x58, 0xa, 0xf, 0xfe, 0xad, 0xe0, 0x78, - 0x3f, 0xfa, 0xca, 0x2, 0x83, 0xff, 0xa1, 0x7, - 0xff, 0x6d, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xf9, 0xe, 0x50, 0x14, 0x1f, 0xfd, 0x8, 0x3b, - 0xc0, 0xf0, 0x7f, 0xf5, 0x94, 0x5, 0x7, 0xff, - 0x56, 0xe, 0x50, 0x7f, 0xf3, 0xb0, 0xe4, 0x60, - 0x50, 0x3f, 0xfa, 0xd2, 0x13, 0x7, 0xff, 0x33, - 0xe, 0xc2, 0x60, 0x4a, 0xf, 0xfe, 0x56, 0x1f, - 0xe9, 0xb, 0x90, 0xff, 0xe4, 0x41, 0xec, 0x3a, - 0xc2, 0xe4, 0x3f, 0xf8, 0xda, 0x1c, 0x87, 0x95, - 0x5, 0xd0, 0x3f, 0xf8, 0x98, 0x7d, 0x7, 0xd1, - 0x5, 0xf2, 0x1f, 0xfc, 0xf, 0x7, 0xd8, 0x7f, - 0x44, 0x13, 0xf4, 0x87, 0x3f, 0x7, 0xec, 0x3f, - 0xe8, 0xc3, 0x5f, 0xfa, 0xf, 0xf6, 0x1f, 0xfc, - 0x1a, 0x70, 0x66, 0x43, 0xff, 0x82, 0xe1, 0xff, - 0xc3, 0x73, 0x83, 0xff, 0x8b, 0xc1, 0xff, 0xc6, - 0xb3, 0xd2, 0x83, 0xfd, 0xe0, 0xff, 0xe5, 0x5f, - 0x83, 0xf5, 0xe0, 0xff, 0xe7, 0xb2, 0x1a, 0xf2, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xfe, - - /* U+E929 "" */ - 0xf, 0xfe, 0x54, 0x1f, 0xfd, 0xfd, 0x83, 0xff, - 0xbb, 0x1, 0x41, 0xff, 0xdb, 0x50, 0x50, 0x7f, - 0xf6, 0xe0, 0xec, 0x3f, 0xfb, 0x38, 0x7d, 0x7, - 0xff, 0x5e, 0xf, 0xca, 0xf, 0xfe, 0xaa, 0x83, - 0xfa, 0xf, 0xfe, 0xac, 0x1f, 0xf6, 0x1f, 0xfd, - 0x3c, 0x3f, 0xf8, 0x30, 0x7f, 0xf4, 0x60, 0xff, - 0xe1, 0x28, 0x3f, 0xf9, 0xf2, 0x1f, 0xfc, 0x39, - 0xf, 0xfe, 0x6a, 0x83, 0xff, 0x8b, 0x7, 0xff, - 0x36, 0xf, 0xfe, 0x3e, 0x1f, 0xfc, 0xbc, 0x3f, - 0xf9, 0x30, 0x7f, 0xf2, 0x60, 0xff, 0xe5, 0x28, - 0x3f, 0xf8, 0xea, 0xf, 0xfe, 0x5c, 0x1f, 0xfc, - 0x78, 0x3f, 0xf9, 0xb8, 0x7f, 0xf1, 0x70, 0xff, - 0xe7, 0xc1, 0xff, 0xc3, 0x83, 0xff, 0xa0, 0xa0, - 0xff, 0xe0, 0xa8, 0x3f, 0xfa, 0x30, 0x7f, 0xf0, - 0x18, 0x3f, 0xfa, 0x78, 0x7f, 0xd0, 0x7f, 0xf5, - 0x60, 0xfe, 0xc3, 0xff, 0xac, 0xc1, 0xf4, 0x1f, - 0xfd, 0x85, 0x7, 0x28, 0x3f, 0xd7, 0xa0, 0xfe, - 0xf9, 0xf, 0xf4, 0x1d, 0x7, 0xf5, 0xa0, 0x43, - 0xff, 0x81, 0x68, 0x7f, 0x61, 0x61, 0xf3, 0x68, - 0x7f, 0xf1, 0xee, 0xf, 0xd1, 0x7, 0x9e, 0x43, - 0xff, 0x96, 0xf0, 0x79, 0x60, 0xcf, 0x7, 0xff, - 0x41, 0xf2, 0x1b, 0x81, 0x70, 0x7f, 0xf5, 0x6d, - 0x4, 0xf9, 0xf, 0xfe, 0xcd, 0xe0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xf8, 0x8f, 0x90, 0xff, 0xec, 0xde, 0x20, - 0x5c, 0x1f, 0xfd, 0x5b, 0x41, 0x21, 0x9e, 0xf, - 0xfe, 0x83, 0xe4, 0x37, 0x7, 0x9e, 0x43, 0xff, - 0x96, 0xf0, 0x79, 0x46, 0x1f, 0x36, 0x87, 0xff, - 0x1e, 0xe0, 0xfd, 0x5, 0x7, 0xf5, 0xa0, 0x43, - 0xff, 0x81, 0x68, 0x7f, 0x61, 0x94, 0x1f, 0xeb, - 0xd0, 0x7f, 0x7c, 0x87, 0xfa, 0xf, 0x41, 0xff, - 0xd8, 0x50, 0x7d, 0x87, 0xff, 0x59, 0x83, 0xfa, - 0xf, 0xfe, 0xac, 0x1f, 0xe6, 0xf, 0xfe, 0x9e, - 0x1f, 0xfc, 0x5, 0x7, 0xff, 0x46, 0xf, 0xfe, - 0x14, 0x1f, 0xfd, 0x5, 0x7, 0xff, 0xf, 0xf, - 0xfe, 0x7c, 0x1f, 0xfc, 0x58, 0x3f, 0xf9, 0xb8, - 0x7f, 0xf1, 0x94, 0x1f, 0xfc, 0xb8, 0x3f, 0xf9, - 0x10, 0x7f, 0xf2, 0x94, 0x1f, 0xfc, 0x9c, 0x3f, - 0xf9, 0x30, 0x7f, 0xf2, 0xe0, 0xff, 0xe3, 0xe1, - 0xff, 0xcc, 0x50, 0x7f, 0xf1, 0x60, 0xff, 0xe7, - 0x48, 0x7f, 0xf0, 0xe4, 0x3f, 0xf9, 0xf0, 0x7f, - 0xf0, 0x94, 0x1f, 0xfd, 0x1c, 0x3f, 0xf8, 0x30, - 0x7f, 0xf4, 0xe0, 0xff, 0xb0, 0xff, 0xea, 0x28, - 0x3f, 0xa0, 0xff, 0xeb, 0x41, 0xf9, 0x41, 0xff, - 0xd7, 0xc3, 0xe8, 0x3f, 0xfb, 0x30, 0x76, 0x1f, - 0xfd, 0xa5, 0x5, 0x7, 0xff, 0x72, 0x2, 0x83, - 0xff, 0xbb, 0xb0, 0x7f, 0xf2, 0x40 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 640, .box_w = 40, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 305, .adv_w = 1280, .box_w = 80, .box_h = 54, .ofs_x = 0, .ofs_y = 7}, - {.bitmap_index = 716, .adv_w = 1280, .box_w = 80, .box_h = 54, .ofs_x = 0, .ofs_y = 7}, - {.bitmap_index = 1127, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 1842, .adv_w = 800, .box_w = 50, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 2139, .adv_w = 1118, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 2570, .adv_w = 1118, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 3005, .adv_w = 854, .box_w = 55, .box_h = 81, .ofs_x = -1, .ofs_y = -5}, - {.bitmap_index = 3399, .adv_w = 854, .box_w = 54, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 3793, .adv_w = 1240, .box_w = 78, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 4307, .adv_w = 711, .box_w = 45, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 4623, .adv_w = 1058, .box_w = 67, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 5089, .adv_w = 1058, .box_w = 67, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 5552, .adv_w = 1198, .box_w = 75, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 5994, .adv_w = 1278, .box_w = 80, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 6450, .adv_w = 1108, .box_w = 70, .box_h = 81, .ofs_x = 0, .ofs_y = -6}, - {.bitmap_index = 6997, .adv_w = 1195, .box_w = 75, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 7238, .adv_w = 1280, .box_w = 81, .box_h = 67, .ofs_x = -1, .ofs_y = 2}, - {.bitmap_index = 7773, .adv_w = 1280, .box_w = 81, .box_h = 73, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 8252, .adv_w = 1280, .box_w = 81, .box_h = 73, .ofs_x = -1, .ofs_y = -1}, - {.bitmap_index = 8717, .adv_w = 1188, .box_w = 75, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 9234, .adv_w = 1185, .box_w = 74, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 9757, .adv_w = 1280, .box_w = 80, .box_h = 73, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 10293, .adv_w = 1283, .box_w = 81, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 10718, .adv_w = 1283, .box_w = 81, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 11145, .adv_w = 978, .box_w = 61, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 11577, .adv_w = 978, .box_w = 61, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 12008, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 12482, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 12952, .adv_w = 1118, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 13391, .adv_w = 1119, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 13827, .adv_w = 800, .box_w = 50, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 14185, .adv_w = 800, .box_w = 50, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 14545, .adv_w = 1280, .box_w = 80, .box_h = 81, .ofs_x = 0, .ofs_y = -6}, - {.bitmap_index = 15178, .adv_w = 1280, .box_w = 81, .box_h = 59, .ofs_x = -1, .ofs_y = 6}, - {.bitmap_index = 15628, .adv_w = 1280, .box_w = 81, .box_h = 59, .ofs_x = 0, .ofs_y = 6}, - {.bitmap_index = 16108, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 16679, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 17334, .adv_w = 1024, .box_w = 65, .box_h = 81, .ofs_x = -1, .ofs_y = -5}, - {.bitmap_index = 17819, .adv_w = 1026, .box_w = 65, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 18308, .adv_w = 640, .box_w = 40, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 18689, .adv_w = 711, .box_w = 45, .box_h = 80, .ofs_x = 0, .ofs_y = -5} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 59648, .range_length = 42, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 1, - .bpp = 2, - .kern_classes = 0, - .bitmap_format = 1, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t lv_font_navi_80 = { -#else -lv_font_t lv_font_navi_80 = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 82, /*The maximum line height required by the font*/ - .base_line = 6, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = 0, - .underline_thickness = 0, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if LV_FONT_NAVI_80*/ - diff --git a/src/displayapp/fonts/lv_font_sys_48.c b/src/displayapp/fonts/lv_font_sys_48.c deleted file mode 100644 index ca007e3..0000000 --- a/src/displayapp/fonts/lv_font_sys_48.c +++ /dev/null @@ -1,324 +0,0 @@ -/******************************************************************************* - * Size: 48 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef LV_FONT_SYS_48 -#define LV_FONT_SYS_48 1 -#endif - -#if LV_FONT_SYS_48 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+E902 "" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, - 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, - 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x6, 0x7, - 0xff, 0xe0, 0x60, 0xf, 0x8f, 0xff, 0xf1, 0xf0, - 0xf, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, - 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, - 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, - 0xfe, 0x7f, 0xff, 0x81, 0xff, 0xfe, 0x7f, 0xff, - 0x0, 0xff, 0xfe, 0x3f, 0xfe, 0x0, 0x7f, 0xfc, - 0x1f, 0xfc, 0x0, 0x3f, 0xf8, 0xf, 0xf8, 0x0, - 0x1f, 0xf0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, 0x7, - 0xf8, 0x0, 0x1f, 0xe0, 0x7, 0xf8, 0x0, 0x1f, - 0xe0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, 0xf, 0xf8, - 0x0, 0x1f, 0xf0, 0x1f, 0xfc, 0x0, 0x3f, 0xf8, - 0x3f, 0xfe, 0x0, 0x7f, 0xfc, 0x7f, 0xff, 0x0, - 0xff, 0xfe, 0x7f, 0xff, 0x81, 0xff, 0xfe, 0x7f, - 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, - 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0xf0, - 0xf, 0x8f, 0xff, 0xf1, 0xf0, 0x6, 0x7, 0xff, - 0xe0, 0x60, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, - 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, - 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, - 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, - - /* U+E904 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, - 0x7f, 0xf8, 0xf, 0xff, 0x80, 0x1, 0xff, 0x80, - 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0xf, 0xf8, - 0x0, 0x1f, 0xe0, 0x0, 0x1f, 0xe0, 0x0, 0x7f, - 0x3, 0xf0, 0x3f, 0x80, 0x1, 0xf8, 0x3f, 0xf0, - 0x7e, 0x0, 0xf, 0xc1, 0xff, 0xe0, 0xfc, 0x0, - 0x7f, 0xf, 0xff, 0xc3, 0xf8, 0x3, 0xfc, 0x3f, - 0xff, 0xf, 0xf0, 0x1f, 0xe1, 0xff, 0xfe, 0x1f, - 0xe0, 0xff, 0x87, 0xff, 0xf8, 0x7f, 0xc7, 0xfe, - 0x1f, 0xff, 0xe1, 0xff, 0x9f, 0xf8, 0x7f, 0xff, - 0x87, 0xfe, 0x3f, 0xe1, 0xff, 0xfe, 0x1f, 0xf0, - 0x7f, 0x87, 0xff, 0xf8, 0x7f, 0x80, 0xff, 0xf, - 0xff, 0xc3, 0xfc, 0x1, 0xfc, 0x3f, 0xff, 0xf, - 0xe0, 0x3, 0xf0, 0x7f, 0xf8, 0x3f, 0x0, 0x7, - 0xe0, 0xff, 0xc1, 0xf8, 0x0, 0x1f, 0xc0, 0xfc, - 0xf, 0xe0, 0x0, 0x7f, 0x80, 0x0, 0x7f, 0x80, - 0x1, 0xff, 0x0, 0x3, 0xfe, 0x0, 0x7, 0xfe, - 0x0, 0x1f, 0xf8, 0x0, 0x1f, 0xff, 0x3, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E905 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, - 0x7f, 0xf8, 0xf, 0xff, 0x80, 0x1, 0xff, 0x80, - 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0xf, 0xf8, - 0x0, 0x1f, 0xe0, 0x0, 0x1f, 0xe0, 0x0, 0x7f, - 0x0, 0x0, 0x3f, 0x80, 0x1, 0xf8, 0x0, 0x0, - 0x7e, 0x0, 0xf, 0xc0, 0x0, 0x0, 0xfc, 0x0, - 0x7f, 0x0, 0x0, 0x3, 0xf8, 0x3, 0xfc, 0x0, - 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, 0x1f, - 0xe0, 0xff, 0x80, 0x0, 0x0, 0x7f, 0xc7, 0xfe, - 0x0, 0x0, 0x1, 0xff, 0x9f, 0xf8, 0x0, 0x0, - 0x7, 0xfe, 0x3f, 0xe0, 0x0, 0x0, 0x1f, 0xf0, - 0x7f, 0x80, 0x0, 0x0, 0x7f, 0x80, 0xff, 0x0, - 0x0, 0x3, 0xfc, 0x1, 0xfc, 0x0, 0x0, 0xf, - 0xe0, 0x3, 0xf0, 0x0, 0x0, 0x3f, 0x0, 0x7, - 0xe0, 0x0, 0x1, 0xf8, 0x0, 0x1f, 0xc0, 0x0, - 0xf, 0xe0, 0x0, 0x7f, 0x80, 0x0, 0x7f, 0x80, - 0x1, 0xff, 0x0, 0x3, 0xfe, 0x0, 0x7, 0xfe, - 0x0, 0x1f, 0xf8, 0x0, 0x1f, 0xff, 0x3, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E906 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, - 0x7f, 0xff, 0x8f, 0xff, 0x80, 0x1, 0xff, 0xfe, - 0x7, 0xfe, 0x0, 0x7, 0xff, 0xf8, 0xf, 0xf8, - 0x0, 0x1f, 0xff, 0xe0, 0x1f, 0xe0, 0x0, 0x7f, - 0xff, 0x80, 0x3f, 0x80, 0x1, 0xff, 0xfe, 0x0, - 0x7e, 0x0, 0xf, 0xff, 0xf8, 0x0, 0xfc, 0x0, - 0x7f, 0xff, 0xe0, 0x3, 0xf8, 0x3, 0xff, 0xff, - 0x80, 0xf, 0xf0, 0x1f, 0xff, 0xfe, 0x0, 0x1f, - 0xe0, 0xff, 0xff, 0xf8, 0x0, 0x7f, 0xc7, 0xff, - 0xff, 0xe0, 0x1, 0xff, 0x9f, 0xff, 0xff, 0x80, - 0x7, 0xfe, 0x3f, 0xff, 0xfe, 0x0, 0x1f, 0xf0, - 0x7f, 0xff, 0xf8, 0x0, 0x7f, 0x80, 0xff, 0xff, - 0xe0, 0x3, 0xfc, 0x1, 0xff, 0xff, 0x80, 0xf, - 0xe0, 0x3, 0xff, 0xfe, 0x0, 0x3f, 0x0, 0x7, - 0xff, 0xf8, 0x1, 0xf8, 0x0, 0x1f, 0xff, 0xe0, - 0xf, 0xe0, 0x0, 0x7f, 0xff, 0x80, 0x7f, 0x80, - 0x1, 0xff, 0xfe, 0x3, 0xfe, 0x0, 0x7, 0xff, - 0xf8, 0x1f, 0xf8, 0x0, 0x1f, 0xff, 0xe3, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E907 "" */ - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0, 0x7, 0x80, - 0x0, 0x0, 0x1, 0xe0, 0x0, 0x8, 0x0, 0x78, - 0x0, 0x47, 0x0, 0x0, 0x0, 0x3b, 0xe0, 0x0, - 0x0, 0x1f, 0x7c, 0x0, 0x0, 0xf, 0x8f, 0x80, - 0x0, 0x7, 0xc1, 0xc0, 0x0, 0x0, 0xe0, 0x20, - 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0x80, - 0x1f, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xff, 0xf8, - 0x1, 0xff, 0xff, 0xfe, 0x0, 0x7f, 0xff, 0xff, - 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xff, - 0xf8, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x7f, 0xff, - 0xff, 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x7, 0xff, - 0xff, 0xf8, 0x0, 0xff, 0xff, 0xfc, 0x0, 0x1f, - 0xff, 0xfe, 0x0, 0x3, 0xff, 0xff, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0x0, 0xf, 0xff, 0xc0, 0x0, - 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xf8, 0x0, - 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x7, 0xff, 0x80, - 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xf8, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x7, 0xff, - 0x80, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7f, - 0xf8, 0x0, - - /* U+E90B "" */ - 0x0, 0x3, 0xc0, 0x0, 0x0, 0x1, 0xf8, 0x0, - 0x2, 0x0, 0x7e, 0x0, 0x1, 0xc0, 0x1f, 0x80, - 0x0, 0xf8, 0x7, 0xe0, 0x0, 0x1f, 0xf, 0xff, - 0x0, 0x3, 0xe1, 0xff, 0xe0, 0x0, 0x7c, 0x3f, - 0xfc, 0x0, 0xf, 0x87, 0xff, 0x80, 0x1, 0xf0, - 0xff, 0xf0, 0x0, 0x7e, 0x1f, 0xfe, 0x0, 0x1f, - 0xc3, 0xff, 0x80, 0x7, 0xf8, 0x7f, 0xe0, 0x3, - 0xff, 0xf, 0xfc, 0x0, 0xff, 0xe1, 0xff, 0x0, - 0x3f, 0xfc, 0x3f, 0xc0, 0xf, 0xff, 0x87, 0xf0, - 0x3, 0xff, 0xf1, 0xfc, 0x0, 0xff, 0xfe, 0x3f, - 0x0, 0x3f, 0xff, 0xc7, 0xc0, 0xf, 0xff, 0xf8, - 0xf0, 0x3, 0xff, 0xfe, 0x1c, 0x0, 0xff, 0xff, - 0xc3, 0x0, 0x3f, 0xff, 0xf8, 0x40, 0xf, 0xff, - 0xff, 0x0, 0x3, 0xff, 0xff, 0xe0, 0x0, 0xff, - 0xff, 0xfc, 0x0, 0x7f, 0xff, 0xff, 0x80, 0x3f, - 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xfe, 0xf, - 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x3, - 0xe0, 0x0, 0x0, 0x0, 0x7c, 0x0, 0x3f, 0xc0, - 0xe, 0x0, 0xf, 0xf0, 0x1, 0x0, 0x1, 0xf8, - 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, - - /* U+E90C "" */ - 0x0, 0x0, 0x3c, 0x0, 0x0, 0x1, 0x80, 0x7e, - 0x1, 0x80, 0x3, 0xc0, 0x7e, 0x3, 0xc0, 0x7, - 0xe0, 0x7e, 0x7, 0xe0, 0xf, 0xc0, 0x7e, 0x3, - 0xf0, 0x1f, 0x83, 0xff, 0xc1, 0xf8, 0x3f, 0x7, - 0xff, 0xe0, 0xf8, 0x3e, 0xf, 0xff, 0xf0, 0x7c, - 0x7e, 0x1f, 0xff, 0xf8, 0x3c, 0x7c, 0x3f, 0xff, - 0xfc, 0x3e, 0x78, 0x7f, 0xff, 0xfe, 0x1e, 0xf8, - 0x7f, 0xff, 0xfe, 0x1e, 0xf8, 0x7f, 0xff, 0xfe, - 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xf, 0xf0, 0xff, - 0xff, 0xff, 0xf, 0xf0, 0xff, 0xff, 0xff, 0xf, - 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, - 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, - 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, - 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, - 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, - 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, - 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x1, - 0xff, 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, - 0xc0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0xf, 0xff, - 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xff, 0xf0, - 0xf, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, - 0x3c, 0x0, 0x0 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 768, .box_w = 40, .box_h = 40, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 200, .adv_w = 768, .box_w = 46, .box_h = 46, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 465, .adv_w = 768, .box_w = 46, .box_h = 46, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 730, .adv_w = 768, .box_w = 46, .box_h = 46, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 995, .adv_w = 768, .box_w = 34, .box_h = 40, .ofs_x = 7, .ofs_y = 0}, - {.bitmap_index = 1165, .adv_w = 768, .box_w = 34, .box_h = 39, .ofs_x = 8, .ofs_y = 0}, - {.bitmap_index = 1331, .adv_w = 768, .box_w = 40, .box_h = 39, .ofs_x = 4, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - -static const uint8_t glyph_id_ofs_list_0[] = { - 0, 0, 1, 2, 3, 4, 0, 0, - 0, 5, 6 -}; - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 59650, .range_length = 11, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 11, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 1, - .bpp = 1, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t lv_font_sys_48 = { -#else -lv_font_t lv_font_sys_48 = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 46, /*The maximum line height required by the font*/ - .base_line = 3, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = 0, - .underline_thickness = 0, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if LV_FONT_SYS_48*/ - diff --git a/src/displayapp/fonts/open_sans_light.c b/src/displayapp/fonts/open_sans_light.c deleted file mode 100644 index 84b7869..0000000 --- a/src/displayapp/fonts/open_sans_light.c +++ /dev/null @@ -1,1261 +0,0 @@ -/******************************************************************************* - * Size: 150 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef OPEN_SANS_LIGHT -#define OPEN_SANS_LIGHT 1 -#endif - -#if OPEN_SANS_LIGHT - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0030 "0" */ - 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0xf, 0xff, 0xe0, - 0x3, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xfe, - 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0xff, - 0xe0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x7, - 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, - 0x7f, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xf8, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0xf, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x81, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xe0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x87, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x3f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x1f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xbf, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf9, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xcf, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x9f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x87, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfe, 0x7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfc, 0x7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x80, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0x0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0xf, 0xf8, - 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x3f, - 0xf0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, - 0x3, 0xff, 0x80, 0x0, 0x3, 0xff, 0x80, 0x0, - 0x0, 0xf, 0xff, 0x0, 0x0, 0x7f, 0xf8, 0x0, - 0x0, 0x0, 0x3f, 0xff, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, 0x0, - - /* U+0031 "1" */ - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, - 0xf, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf8, 0x0, - 0x0, 0xff, 0xbf, 0x0, 0x0, 0x7f, 0xe7, 0xe0, - 0x0, 0x1f, 0xf8, 0xfc, 0x0, 0x7, 0xfe, 0x1f, - 0x80, 0x3, 0xff, 0x83, 0xf0, 0x0, 0xff, 0xc0, - 0xfe, 0x0, 0x3f, 0xf0, 0x1f, 0xc0, 0x1f, 0xfc, - 0x3, 0xf8, 0x7, 0xff, 0x0, 0x7f, 0x1, 0xff, - 0x80, 0xf, 0xe0, 0xff, 0xe0, 0x1, 0xfc, 0x3f, - 0xf8, 0x0, 0x3f, 0x8f, 0xfc, 0x0, 0x7, 0xf7, - 0xff, 0x0, 0x0, 0xff, 0xff, 0xc0, 0x0, 0x1f, - 0xff, 0xf0, 0x0, 0x3, 0xfb, 0xf8, 0x0, 0x0, - 0x7f, 0x3e, 0x0, 0x0, 0xf, 0xe3, 0x80, 0x0, - 0x1, 0xfc, 0x20, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, - 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0x3f, 0x80, - - /* U+0032 "2" */ - 0x0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0xff, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xf0, 0x1, 0xff, - 0xfe, 0x0, 0x0, 0xf, 0xff, 0xc0, 0x0, 0x3, - 0xff, 0xe0, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, - 0x1f, 0xfe, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, - 0x0, 0xff, 0xe0, 0x0, 0x7f, 0xf0, 0x0, 0x0, - 0x0, 0xf, 0xfe, 0x0, 0xf, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xc0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xfc, 0x0, 0xf, 0x80, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xc0, 0x1, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x10, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf0, - - /* U+0033 "3" */ - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, - 0xff, 0xff, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x0, 0x3, 0xff, 0xc0, 0x1, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0xf, 0xfe, 0x0, 0x3f, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x7, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x1, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0xe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, - 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, - 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xf8, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0xe0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xfc, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0xf, 0xff, 0xff, 0x80, 0x0, - 0xff, 0xff, 0xe0, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x0, 0x1, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x0, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, - 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, - - /* U+0034 "4" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfb, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfd, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfc, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xfe, 0x3f, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x1f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, - 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x3, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x80, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x7e, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x3f, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x1f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x7, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x3, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x1, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x7e, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x3f, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf8, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x7, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x3, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x7e, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x3f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x7, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x3, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7e, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, - 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x7e, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x7, - 0xe0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x7e, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xe0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, - 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7e, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xc0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xe0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xfc, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7e, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - - /* U+0035 "5" */ - 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x80, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x7f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x3f, 0x8f, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, - 0xfc, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x3f, 0xff, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0xff, 0x80, 0x0, 0x18, 0x0, 0x0, - 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, - 0x3f, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xe0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x3, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0xf8, - 0x0, 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x3f, 0xff, 0xfc, 0x0, 0xf, 0xff, 0xfc, - 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xc0, - 0x0, 0x0, 0x0, - - /* U+0036 "6" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, - 0xff, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, - 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7, 0xff, - 0xfc, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0xff, - 0xfe, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0xf, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x1, 0xff, - 0xff, 0xf0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x7f, - 0xff, 0xff, 0xf0, 0x0, 0x0, 0xfe, 0x0, 0xf, - 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf, 0xf0, 0x1, - 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x7f, 0x0, - 0x3f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0xf8, - 0x3, 0xff, 0xf0, 0x1, 0xff, 0xfe, 0x0, 0x1f, - 0xc0, 0x7f, 0xf8, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0xfe, 0x7, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xe0, - 0x7, 0xf0, 0x7f, 0xc0, 0x0, 0x0, 0x3, 0xff, - 0x80, 0x3f, 0x87, 0xf8, 0x0, 0x0, 0x0, 0x7, - 0xfe, 0x1, 0xfc, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x1f, 0xf8, 0xf, 0xe7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xe0, 0x7f, 0x7f, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0x3, 0xff, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfc, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf0, 0xff, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x8f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7f, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x9f, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x9f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xbf, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xef, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfb, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xdf, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x9f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe7, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc7, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x3f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x80, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x3, 0xfe, 0x0, 0x1, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, 0x3f, - 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, - 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x3, 0xff, 0xc0, 0x0, 0x0, 0x7f, 0xf0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x1f, 0xff, 0x0, - 0x0, 0x0, 0x1f, 0xff, 0xc0, 0xf, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, - 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0xe0, 0x0, 0x0, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, - - /* U+0038 "8" */ - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x1, - 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, - 0x1, 0xff, 0xf0, 0x0, 0x0, 0x3f, 0xf8, 0x0, - 0x0, 0x3, 0xff, 0x80, 0x0, 0x7, 0xfe, 0x0, - 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xff, 0xc0, - 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x1f, 0xf8, - 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x3f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x7, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, - 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, - 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xe0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xc0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x80, 0x1, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x1f, 0xf8, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0xff, 0xe0, 0x0, - 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x7, 0xff, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x3f, 0xf8, - 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x1, 0xff, - 0xe0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0xf, - 0xff, 0x80, 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0xfe, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, - 0x1, 0xff, 0xf8, 0x0, 0xff, 0xe0, 0x0, 0x0, - 0x0, 0xf, 0xff, 0xe0, 0x3f, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xff, 0x9f, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xe7, - 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xfe, - 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, - 0x80, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, - 0xe0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x3f, - 0xf8, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x7, - 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, - 0xff, 0xc0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, - 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, - 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, - 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xe0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xff, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xf0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x81, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf8, 0x3f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xc3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x7f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xe7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfe, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe7, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc3, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x81, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, - 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xe0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xfc, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0x80, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, - 0x7f, 0xf0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0x1f, 0xfe, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0xf, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xfe, 0x0, - 0xf, 0xff, 0xf8, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x1, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, - - /* U+0039 "9" */ - 0x0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf0, 0x3, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, - 0x3, 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xfc, 0x0, - 0x0, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0x0, - 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x7f, 0xc0, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0xf, 0xf8, - 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x3f, - 0xe0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfc, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xfe, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0x87, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf8, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x87, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xcf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xcf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xff, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0xf1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xff, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xf7, 0xf0, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0xfe, 0x7f, 0x7, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc7, 0xf0, 0x7f, 0xe0, 0x0, 0x0, - 0x0, 0x3, 0xf8, 0x7f, 0x3, 0xff, 0x80, 0x0, - 0x0, 0x0, 0xff, 0xf, 0xf0, 0x1f, 0xfc, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0xff, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x7, 0xfc, 0xf, 0xf0, 0x7, 0xff, - 0xc0, 0x0, 0x3, 0xff, 0x80, 0xfe, 0x0, 0x3f, - 0xff, 0xc0, 0x3, 0xff, 0xf0, 0xf, 0xe0, 0x1, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0xfe, 0x0, - 0x7, 0xff, 0xff, 0xff, 0xff, 0x0, 0xf, 0xe0, - 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, 0xfe, - 0x0, 0x0, 0x7f, 0xff, 0xff, 0xf0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0xff, 0xff, 0xf8, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0xf8, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0xff, - 0xff, 0xc0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, - 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 1370, .box_w = 69, .box_h = 110, .ofs_x = 8, .ofs_y = -1}, - {.bitmap_index = 949, .adv_w = 1370, .box_w = 35, .box_h = 107, .ofs_x = 15, .ofs_y = 0}, - {.bitmap_index = 1418, .adv_w = 1370, .box_w = 67, .box_h = 108, .ofs_x = 8, .ofs_y = 0}, - {.bitmap_index = 2323, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 7, .ofs_y = -1}, - {.bitmap_index = 3258, .adv_w = 1370, .box_w = 81, .box_h = 108, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 4352, .adv_w = 1370, .box_w = 66, .box_h = 108, .ofs_x = 10, .ofs_y = -1}, - {.bitmap_index = 5243, .adv_w = 1370, .box_w = 69, .box_h = 110, .ofs_x = 9, .ofs_y = -1}, - {.bitmap_index = 6192, .adv_w = 1370, .box_w = 69, .box_h = 106, .ofs_x = 8, .ofs_y = 0}, - {.bitmap_index = 7107, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 9, .ofs_y = -1}, - {.bitmap_index = 8042, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 8, .ofs_y = -1} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 48, .range_length = 10, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 1, - .bpp = 1, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t open_sans_light = { -#else -lv_font_t open_sans_light = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 110, /*The maximum line height required by the font*/ - .base_line = 1, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = -11, - .underline_thickness = 7, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if OPEN_SANS_LIGHT*/ - diff --git a/src/displayapp/icons/battery/battery.png b/src/displayapp/icons/battery/battery.png Binary files differnew file mode 100644 index 0000000..0fca804 --- /dev/null +++ b/src/displayapp/icons/battery/battery.png diff --git a/src/displayapp/icons/battery/batteryicon.c b/src/displayapp/icons/battery/batteryicon.c new file mode 100644 index 0000000..05ddf16 --- /dev/null +++ b/src/displayapp/icons/battery/batteryicon.c @@ -0,0 +1,52 @@ +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATTERYICON +#define LV_ATTRIBUTE_IMG_BATTERYICON +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATTERYICON uint8_t batteryicon_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x6a, 0xfc, 0x6c, 0xff, /*Color of index 1*/ + + 0xe0, 0x70, + 0xe0, 0x70, + 0x00, 0x00, + 0x00, 0x00, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x00, 0x00, + 0x00, 0x00, +}; + +const lv_img_dsc_t batteryicon = { + { + LV_IMG_CF_INDEXED_1BIT, + 0, + 0, + 12, + 20, + }, + 48, + batteryicon_map, +}; diff --git a/src/displayapp/icons/battery/os_battery_005.c b/src/displayapp/icons/battery/os_battery_005.c deleted file mode 100644 index 64832b5..0000000 --- a/src/displayapp/icons/battery/os_battery_005.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005 uint8_t ck_os_battery_005_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - - 0xfc, 0x00, 0x3f, - 0xf8, 0x00, 0x1f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0x00, 0xff, 0x00, - 0x00, 0xff, 0x00, - 0x00, 0xff, 0x00, - 0x00, 0xff, 0x00, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, -}; - -const lv_img_dsc_t ck_os_battery_005 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_005_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_005.png b/src/displayapp/icons/battery/os_battery_005.png Binary files differdeleted file mode 100644 index 963767b..0000000 --- a/src/displayapp/icons/battery/os_battery_005.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_010.c b/src/displayapp/icons/battery/os_battery_010.c deleted file mode 100644 index f36b684..0000000 --- a/src/displayapp/icons/battery/os_battery_010.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010 uint8_t ck_os_battery_010_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0x04, 0x7a, 0xf4, 0xff, /*Color of index 2*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 3*/ - - 0x55, 0x5f, 0xff, 0xff, 0xf5, 0x55, 0x55, - 0x55, 0x7f, 0xff, 0xff, 0xfd, 0x55, 0x55, - 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, - 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xff, 0x55, 0x55, 0x6a, 0xaa, 0xaa, 0xa9, - 0xff, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x50, 0x05, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0x50, 0x05, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0xff, 0xf5, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0xff, 0xf5, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0xff, 0xf5, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0xff, 0xf5, 0x6a, 0xaa, 0xaa, 0xa9, -}; - -const lv_img_dsc_t ck_os_battery_010 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_010_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_010.png b/src/displayapp/icons/battery/os_battery_010.png Binary files differdeleted file mode 100644 index 68a9f40..0000000 --- a/src/displayapp/icons/battery/os_battery_010.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_020.c b/src/displayapp/icons/battery/os_battery_020.c deleted file mode 100644 index 3f648fb..0000000 --- a/src/displayapp/icons/battery/os_battery_020.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020 uint8_t ck_os_battery_020_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, -}; - -const lv_img_dsc_t ck_os_battery_020 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_020_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_020.png b/src/displayapp/icons/battery/os_battery_020.png Binary files differdeleted file mode 100644 index 32eca65..0000000 --- a/src/displayapp/icons/battery/os_battery_020.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_030.c b/src/displayapp/icons/battery/os_battery_030.c deleted file mode 100644 index 4d5719b..0000000 --- a/src/displayapp/icons/battery/os_battery_030.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030 uint8_t ck_os_battery_030_map[] = { - 0x04, 0x7a, 0xf4, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, -}; - -const lv_img_dsc_t ck_os_battery_030 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_030_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_030.png b/src/displayapp/icons/battery/os_battery_030.png Binary files differdeleted file mode 100644 index aeb5eb1..0000000 --- a/src/displayapp/icons/battery/os_battery_030.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_040.c b/src/displayapp/icons/battery/os_battery_040.c deleted file mode 100644 index 0606fc3..0000000 --- a/src/displayapp/icons/battery/os_battery_040.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040 uint8_t ck_os_battery_040_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_040 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_040_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_040.png b/src/displayapp/icons/battery/os_battery_040.png Binary files differdeleted file mode 100644 index d84fda4..0000000 --- a/src/displayapp/icons/battery/os_battery_040.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_050.c b/src/displayapp/icons/battery/os_battery_050.c deleted file mode 100644 index 8732dc7..0000000 --- a/src/displayapp/icons/battery/os_battery_050.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050 uint8_t ck_os_battery_050_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_050 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_050_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_050.png b/src/displayapp/icons/battery/os_battery_050.png Binary files differdeleted file mode 100644 index 224d38d..0000000 --- a/src/displayapp/icons/battery/os_battery_050.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_060.c b/src/displayapp/icons/battery/os_battery_060.c deleted file mode 100644 index a65936b..0000000 --- a/src/displayapp/icons/battery/os_battery_060.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060 uint8_t ck_os_battery_060_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_060 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_060_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_060.png b/src/displayapp/icons/battery/os_battery_060.png Binary files differdeleted file mode 100644 index e5e00ed..0000000 --- a/src/displayapp/icons/battery/os_battery_060.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_070.c b/src/displayapp/icons/battery/os_battery_070.c deleted file mode 100644 index 949c0b8..0000000 --- a/src/displayapp/icons/battery/os_battery_070.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070 uint8_t ck_os_battery_070_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_070 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_070_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_070.png b/src/displayapp/icons/battery/os_battery_070.png Binary files differdeleted file mode 100644 index dee969b..0000000 --- a/src/displayapp/icons/battery/os_battery_070.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_080.c b/src/displayapp/icons/battery/os_battery_080.c deleted file mode 100644 index f447370..0000000 --- a/src/displayapp/icons/battery/os_battery_080.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080 uint8_t ck_os_battery_080_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_080 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_080_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_080.png b/src/displayapp/icons/battery/os_battery_080.png Binary files differdeleted file mode 100644 index 3b13fbb..0000000 --- a/src/displayapp/icons/battery/os_battery_080.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_090.c b/src/displayapp/icons/battery/os_battery_090.c deleted file mode 100644 index 6fa41b2..0000000 --- a/src/displayapp/icons/battery/os_battery_090.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090 uint8_t ck_os_battery_090_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_090 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_090_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_090.png b/src/displayapp/icons/battery/os_battery_090.png Binary files differdeleted file mode 100644 index d79f396..0000000 --- a/src/displayapp/icons/battery/os_battery_090.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_100.c b/src/displayapp/icons/battery/os_battery_100.c deleted file mode 100644 index 92cf9a4..0000000 --- a/src/displayapp/icons/battery/os_battery_100.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100 uint8_t ck_os_battery_100_map[] = { - 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, - 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, -}; - -const lv_img_dsc_t ck_os_battery_100 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_100_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_100.png b/src/displayapp/icons/battery/os_battery_100.png Binary files differdeleted file mode 100644 index dd0d306..0000000 --- a/src/displayapp/icons/battery/os_battery_100.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_battery_error.c b/src/displayapp/icons/battery/os_battery_error.c deleted file mode 100644 index af6aba5..0000000 --- a/src/displayapp/icons/battery/os_battery_error.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR uint8_t ck_os_battery_error_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xc4, 0xc2, 0xc4, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x00, 0x05, 0x55, 0x55, 0x50, 0x00, - 0x00, 0x15, 0x55, 0x55, 0x54, 0x00, - 0x00, 0x55, 0x55, 0x55, 0x55, 0x00, - 0x00, 0x55, 0x55, 0x55, 0x55, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, - 0x55, 0x54, 0x00, 0x00, 0x15, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0xaa, 0xaa, 0x00, 0x55, - 0x55, 0x02, 0xaa, 0xaa, 0x80, 0x55, - 0x55, 0x02, 0xaa, 0xaa, 0x80, 0x55, - 0x55, 0x0a, 0xa8, 0x2a, 0xa0, 0x55, - 0x55, 0x0a, 0xa0, 0x0a, 0xa0, 0x55, - 0x55, 0x00, 0x00, 0x0a, 0xa0, 0x55, - 0x55, 0x00, 0x00, 0x2a, 0xa0, 0x55, - 0x55, 0x00, 0x02, 0xaa, 0x80, 0x55, - 0x55, 0x00, 0x0a, 0xaa, 0x80, 0x55, - 0x55, 0x00, 0x0a, 0xaa, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x55, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x55, - 0x55, 0x00, 0x02, 0x80, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x02, 0x80, 0x00, 0x55, - 0x55, 0x55, 0x40, 0x01, 0x55, 0x55, - 0x55, 0x55, 0x50, 0x05, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, -}; - -const lv_img_dsc_t ck_os_battery_error = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_error_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_error.png b/src/displayapp/icons/battery/os_battery_error.png Binary files differdeleted file mode 100644 index 4c7632f..0000000 --- a/src/displayapp/icons/battery/os_battery_error.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_005.c b/src/displayapp/icons/battery/os_batterycharging_005.c deleted file mode 100644 index 1b0c71d..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_005.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005 uint8_t ck_os_batterycharging_005_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x07, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x1f, 0x00, - 0xf0, 0x00, 0x3e, 0x00, - 0xf0, 0x00, 0x7e, 0x00, - 0xf0, 0x00, 0xfc, 0x00, - 0xf0, 0x01, 0xff, 0xf0, - 0xf0, 0x03, 0xff, 0xf0, - 0xf0, 0x03, 0xff, 0xf0, - 0xf0, 0x03, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_005 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_005_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_005.png b/src/displayapp/icons/battery/os_batterycharging_005.png Binary files differdeleted file mode 100644 index f9545bc..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_005.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_010.c b/src/displayapp/icons/battery/os_batterycharging_010.c deleted file mode 100644 index 304c018..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_010.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010 uint8_t ck_os_batterycharging_010_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55, - 0xaa, 0x55, 0x55, 0x56, 0xaa, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55, -}; - -const lv_img_dsc_t ck_os_batterycharging_010 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_010_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_010.png b/src/displayapp/icons/battery/os_batterycharging_010.png Binary files differdeleted file mode 100644 index 04d5f82..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_010.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_020.c b/src/displayapp/icons/battery/os_batterycharging_020.c deleted file mode 100644 index 1721be1..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_020.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020 uint8_t ck_os_batterycharging_020_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55, - 0xaa, 0x55, 0x55, 0x56, 0xaa, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55, -}; - -const lv_img_dsc_t ck_os_batterycharging_020 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_020_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_020.png b/src/displayapp/icons/battery/os_batterycharging_020.png Binary files differdeleted file mode 100644 index 6416e1e..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_020.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_030.c b/src/displayapp/icons/battery/os_batterycharging_030.c deleted file mode 100644 index 83101fd..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_030.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030 uint8_t ck_os_batterycharging_030_map[] = { - 0x04, 0x7a, 0xf4, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55, - 0xaa, 0x50, 0x00, 0x56, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55, -}; - -const lv_img_dsc_t ck_os_batterycharging_030 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_030_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_030.png b/src/displayapp/icons/battery/os_batterycharging_030.png Binary files differdeleted file mode 100644 index 96b44d2..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_030.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_040.c b/src/displayapp/icons/battery/os_batterycharging_040.c deleted file mode 100644 index 02af00e..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_040.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040 uint8_t ck_os_batterycharging_040_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x07, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x1f, 0x00, - 0xf0, 0x00, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_040 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_040_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_040.png b/src/displayapp/icons/battery/os_batterycharging_040.png Binary files differdeleted file mode 100644 index 5a42caf..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_040.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_050.c b/src/displayapp/icons/battery/os_batterycharging_050.c deleted file mode 100644 index d2eea82..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_050.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050 uint8_t ck_os_batterycharging_050_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x07, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf3, 0xfe, 0x1f, 0x00, - 0xf3, 0xfc, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_050 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_050_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_050.png b/src/displayapp/icons/battery/os_batterycharging_050.png Binary files differdeleted file mode 100644 index ca0e04d..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_050.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_060.c b/src/displayapp/icons/battery/os_batterycharging_060.c deleted file mode 100644 index 05f8b97..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_060.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060 uint8_t ck_os_batterycharging_060_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf3, 0xff, 0x87, 0x00, - 0xf3, 0xff, 0x0f, 0x00, - 0xf3, 0xfe, 0x1f, 0x00, - 0xf3, 0xfc, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_060 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_060_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_060.png b/src/displayapp/icons/battery/os_batterycharging_060.png Binary files differdeleted file mode 100644 index 2930068..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_060.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_070.c b/src/displayapp/icons/battery/os_batterycharging_070.c deleted file mode 100644 index ac3e319..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_070.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070 uint8_t ck_os_batterycharging_070_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf3, 0xff, 0xc0, 0x00, - 0xf3, 0xff, 0xc0, 0x00, - 0xf3, 0xff, 0x87, 0x00, - 0xf3, 0xff, 0x0f, 0x00, - 0xf3, 0xfe, 0x1f, 0x00, - 0xf3, 0xfc, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_070 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_070_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_070.png b/src/displayapp/icons/battery/os_batterycharging_070.png Binary files differdeleted file mode 100644 index 7d5f55d..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_070.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_080.c b/src/displayapp/icons/battery/os_batterycharging_080.c deleted file mode 100644 index cc1c1d2..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_080.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080 uint8_t ck_os_batterycharging_080_map[] = { - 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, 0xaa, - 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x2a, 0x95, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x02, 0xa9, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x0a, 0xa5, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0x2a, 0x95, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0xaa, 0x55, 0x5a, 0xaa, - 0x55, 0xa0, 0x00, 0xa9, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x56, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x5a, - 0x55, 0xaa, 0xaa, 0xaa, 0xa9, 0x55, 0x6a, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x55, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x56, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x5a, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x6a, 0xaa, -}; - -const lv_img_dsc_t ck_os_batterycharging_080 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_080_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_080.png b/src/displayapp/icons/battery/os_batterycharging_080.png Binary files differdeleted file mode 100644 index cce5052..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_080.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_090.c b/src/displayapp/icons/battery/os_batterycharging_090.c deleted file mode 100644 index 85e1c26..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_090.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090 uint8_t ck_os_batterycharging_090_map[] = { - 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, 0xaa, - 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x2a, 0x95, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x02, 0xa9, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x0a, 0xa5, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0x2a, 0x95, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0xaa, 0x55, 0x5a, 0xaa, - 0x55, 0xa0, 0x00, 0xa9, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x56, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x5a, - 0x55, 0xaa, 0xaa, 0xaa, 0xa9, 0x55, 0x6a, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x55, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x56, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x5a, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x6a, 0xaa, -}; - -const lv_img_dsc_t ck_os_batterycharging_090 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_090_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_090.png b/src/displayapp/icons/battery/os_batterycharging_090.png Binary files differdeleted file mode 100644 index fc7b443..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_090.png +++ /dev/null diff --git a/src/displayapp/icons/battery/os_batterycharging_100.c b/src/displayapp/icons/battery/os_batterycharging_100.c deleted file mode 100644 index 8dec0cb..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_100.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100 uint8_t ck_os_batterycharging_100_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x07, 0x0f, - 0xf0, 0x0f, 0x0f, - 0xf0, 0x1f, 0x0f, - 0xf0, 0x3e, 0x0f, - 0xf0, 0x7e, 0x0f, - 0xf0, 0xfc, 0x0f, - 0xf1, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0x8f, - 0xf0, 0x3f, 0x0f, - 0xf0, 0x7e, 0x0f, - 0xf0, 0x7c, 0x0f, - 0xf0, 0xf8, 0x0f, - 0xf0, 0xf0, 0x0f, - 0xf0, 0xe0, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_batterycharging_100 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_100_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_100.png b/src/displayapp/icons/battery/os_batterycharging_100.png Binary files differdeleted file mode 100644 index 7c8ce0c..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_100.png +++ /dev/null diff --git a/src/displayapp/icons/bluetooth/ck_os_bt_connected.png b/src/displayapp/icons/bluetooth/ck_os_bt_connected.png Binary files differdeleted file mode 100644 index 5371611..0000000 --- a/src/displayapp/icons/bluetooth/ck_os_bt_connected.png +++ /dev/null diff --git a/src/displayapp/icons/bluetooth/ck_os_bt_disconnected.png b/src/displayapp/icons/bluetooth/ck_os_bt_disconnected.png Binary files differdeleted file mode 100644 index 3275895..0000000 --- a/src/displayapp/icons/bluetooth/ck_os_bt_disconnected.png +++ /dev/null diff --git a/src/displayapp/icons/bluetooth/os_bt_connected.c b/src/displayapp/icons/bluetooth/os_bt_connected.c deleted file mode 100644 index d30dc9d..0000000 --- a/src/displayapp/icons/bluetooth/os_bt_connected.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED -#define LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED uint8_t ck_os_bt_connected_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x0f, 0x00, 0x00, - 0x00, 0x0f, 0x80, 0x00, - 0x00, 0x0f, 0xc0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x03, 0x8f, 0xf8, 0x00, - 0x03, 0xcf, 0x7c, 0x00, - 0x03, 0xef, 0x3e, 0x00, - 0x01, 0xff, 0x1f, 0x00, - 0x00, 0xff, 0x1f, 0x00, - 0x00, 0x7f, 0x3e, 0x00, - 0x00, 0x3f, 0x7c, 0x00, - 0x00, 0x1f, 0xf8, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x00, 0x1f, 0xf8, 0x00, - 0x00, 0x3f, 0x7c, 0x00, - 0x00, 0x7f, 0x3e, 0x00, - 0x00, 0xff, 0x1f, 0x00, - 0x01, 0xff, 0x1f, 0x00, - 0x03, 0xef, 0x3e, 0x00, - 0x03, 0xcf, 0x7c, 0x00, - 0x03, 0x8f, 0xf8, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xc0, 0x00, - 0x00, 0x0f, 0x80, 0x00, - 0x00, 0x0f, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, -}; - -const lv_img_dsc_t ck_os_bt_connected = { - .header.always_zero = 0, - .header.w = 32, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_bt_connected_map, -}; diff --git a/src/displayapp/icons/bluetooth/os_bt_connected.png b/src/displayapp/icons/bluetooth/os_bt_connected.png Binary files differdeleted file mode 100644 index 5371611..0000000 --- a/src/displayapp/icons/bluetooth/os_bt_connected.png +++ /dev/null diff --git a/src/displayapp/icons/bluetooth/os_bt_disconnected.c b/src/displayapp/icons/bluetooth/os_bt_disconnected.c deleted file mode 100644 index 930179b..0000000 --- a/src/displayapp/icons/bluetooth/os_bt_disconnected.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED -#define LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED uint8_t ck_os_bt_disconnected_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xc4, 0xc2, 0xc4, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, - 0x2a, 0x80, 0x00, 0x55, 0x40, 0x00, 0x00, 0x00, - 0x2a, 0xa0, 0x00, 0x55, 0x50, 0x00, 0x00, 0x00, - 0x0a, 0xa8, 0x00, 0x55, 0x54, 0x00, 0x00, 0x00, - 0x02, 0xaa, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, - 0x00, 0xaa, 0x80, 0x55, 0x55, 0x40, 0x00, 0x00, - 0x00, 0x2a, 0xa0, 0x55, 0x15, 0x50, 0x00, 0x00, - 0x00, 0x0a, 0xa8, 0x15, 0x05, 0x54, 0x00, 0x00, - 0x00, 0x02, 0xaa, 0x05, 0x01, 0x55, 0x00, 0x00, - 0x00, 0x00, 0xaa, 0x81, 0x01, 0x55, 0x00, 0x00, - 0x00, 0x00, 0x2a, 0xa0, 0x05, 0x54, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xa8, 0x15, 0x50, 0x00, 0x00, - 0x00, 0x00, 0x02, 0xaa, 0x05, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xaa, 0x81, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2a, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0a, 0xa8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xaa, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x50, 0xaa, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x54, 0x2a, 0xa0, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x55, 0x0a, 0xa8, 0x00, 0x00, - 0x00, 0x00, 0x55, 0x55, 0x02, 0xaa, 0x00, 0x00, - 0x00, 0x01, 0x55, 0x55, 0x00, 0xaa, 0x80, 0x00, - 0x00, 0x05, 0x54, 0x55, 0x04, 0x2a, 0xa0, 0x00, - 0x00, 0x05, 0x50, 0x55, 0x15, 0x0a, 0xa8, 0x00, - 0x00, 0x05, 0x40, 0x55, 0x55, 0x42, 0xaa, 0x00, - 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0xaa, 0x80, - 0x00, 0x00, 0x00, 0x55, 0x54, 0x00, 0x2a, 0xa0, - 0x00, 0x00, 0x00, 0x55, 0x50, 0x00, 0x0a, 0xa8, - 0x00, 0x00, 0x00, 0x55, 0x40, 0x00, 0x02, 0xa8, - 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0xa0, - 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, -}; - -const lv_img_dsc_t ck_os_bt_disconnected = { - .header.always_zero = 0, - .header.w = 32, - .header.h = 32, - .data_size = 272, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_bt_disconnected_map, -}; diff --git a/src/displayapp/icons/bluetooth/os_bt_disconnected.png b/src/displayapp/icons/bluetooth/os_bt_disconnected.png Binary files differdeleted file mode 100644 index 3275895..0000000 --- a/src/displayapp/icons/bluetooth/os_bt_disconnected.png +++ /dev/null diff --git a/src/displayapp/icons/music/disc.cpp b/src/displayapp/icons/music/disc.c index 0957873..0957873 100644 --- a/src/displayapp/icons/music/disc.cpp +++ b/src/displayapp/icons/music/disc.c diff --git a/src/displayapp/icons/music/disc_f_1.cpp b/src/displayapp/icons/music/disc_f_1.c index 9b6b741..9b6b741 100644 --- a/src/displayapp/icons/music/disc_f_1.cpp +++ b/src/displayapp/icons/music/disc_f_1.c diff --git a/src/displayapp/icons/music/disc_f_2.cpp b/src/displayapp/icons/music/disc_f_2.c index 3d2331d..3d2331d 100644 --- a/src/displayapp/icons/music/disc_f_2.cpp +++ b/src/displayapp/icons/music/disc_f_2.c diff --git a/src/displayapp/lv_pinetime_theme.c b/src/displayapp/lv_pinetime_theme.c index 4fce5d6..e18742c 100644 --- a/src/displayapp/lv_pinetime_theme.c +++ b/src/displayapp/lv_pinetime_theme.c @@ -26,7 +26,6 @@ static void theme_apply(lv_obj_t* obj, lv_theme_style_t name); **********************/ static lv_theme_t theme; -static lv_style_t style_pad; static lv_style_t style_circle; static lv_style_t style_bg; @@ -77,12 +76,6 @@ static void style_init_reset(lv_style_t* style) { static void basic_init(void) { - style_init_reset(&style_pad); - lv_style_set_pad_top(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 30); - lv_style_set_pad_bottom(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 30); - lv_style_set_pad_left(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 40); - lv_style_set_pad_right(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 40); - style_init_reset(&style_circle); lv_style_set_radius(&style_circle, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); @@ -113,9 +106,9 @@ static void basic_init(void) { style_init_reset(&style_btn); lv_style_set_radius(&style_btn, LV_STATE_DEFAULT, 10); lv_style_set_bg_opa(&style_btn, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0x2F3540)); - lv_style_set_bg_color(&style_btn, LV_STATE_CHECKED, LV_COLOR_GREEN); - lv_style_set_bg_color(&style_btn, LV_STATE_DISABLED, lv_color_hex(0x2F3540)); + lv_style_set_bg_color(&style_btn, LV_STATE_DEFAULT, LV_PINETIME_BLUE); + lv_style_set_bg_color(&style_btn, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); + lv_style_set_bg_color(&style_btn, LV_STATE_DISABLED, LV_PINETIME_BLUE); lv_style_set_bg_color(&style_btn, LV_STATE_DISABLED | LV_STATE_CHECKED, lv_color_hex3(0x888)); lv_style_set_border_color(&style_btn, LV_STATE_DEFAULT, theme.color_primary); lv_style_set_border_width(&style_btn, LV_STATE_DEFAULT, 0); @@ -166,7 +159,7 @@ static void basic_init(void) { style_init_reset(&style_scrollbar); lv_style_set_bg_opa(&style_scrollbar, LV_STATE_DEFAULT, LV_OPA_COVER); lv_style_set_radius(&style_scrollbar, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_style_set_bg_color(&style_scrollbar, LV_STATE_DEFAULT, LV_PINETIME_LIGHT_GRAY); + lv_style_set_bg_color(&style_scrollbar, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_style_set_size(&style_scrollbar, LV_STATE_DEFAULT, LV_HOR_RES / 80); lv_style_set_pad_right(&style_scrollbar, LV_STATE_DEFAULT, LV_HOR_RES / 60); @@ -188,10 +181,13 @@ static void basic_init(void) { lv_style_set_pad_inner(&style_list_btn, LV_STATE_DEFAULT, LV_HOR_RES / 50); style_init_reset(&style_ddlist_list); + // Causes lag unfortunately, so we'll have to live with the selected item overflowing the corner + //lv_style_set_clip_corner(&style_ddlist_list, LV_STATE_DEFAULT, true); lv_style_set_text_line_space(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 25); lv_style_set_shadow_width(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 20); - lv_style_set_shadow_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_PINETIME_GRAY); - lv_style_set_bg_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_PINETIME_GRAY); + lv_style_set_shadow_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + lv_style_set_bg_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + lv_style_set_pad_all(&style_ddlist_list, LV_STATE_DEFAULT, 20); style_init_reset(&style_ddlist_selected); lv_style_set_bg_opa(&style_ddlist_selected, LV_STATE_DEFAULT, LV_OPA_COVER); @@ -204,7 +200,7 @@ static void basic_init(void) { style_init_reset(&style_sw_indic); lv_style_set_bg_opa(&style_sw_indic, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&style_sw_indic, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_style_set_bg_color(&style_sw_indic, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); style_init_reset(&style_sw_knob); lv_style_set_bg_opa(&style_sw_knob, LV_STATE_DEFAULT, LV_OPA_COVER); @@ -237,7 +233,7 @@ static void basic_init(void) { lv_style_set_line_rounded(&style_arc_indic, LV_STATE_DEFAULT, true); style_init_reset(&style_arc_bg); - lv_style_set_line_color(&style_arc_bg, LV_STATE_DEFAULT, LV_PINETIME_GRAY); + lv_style_set_line_color(&style_arc_bg, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_style_set_line_width(&style_arc_bg, LV_STATE_DEFAULT, LV_DPX(25)); lv_style_set_line_rounded(&style_arc_bg, LV_STATE_DEFAULT, true); lv_style_set_pad_all(&style_arc_bg, LV_STATE_DEFAULT, LV_DPX(5)); @@ -245,7 +241,7 @@ static void basic_init(void) { lv_style_reset(&style_arc_knob); lv_style_set_radius(&style_arc_knob, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_style_set_bg_opa(&style_arc_knob, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&style_arc_knob, LV_STATE_DEFAULT, LV_PINETIME_LIGHT_GRAY); + lv_style_set_bg_color(&style_arc_knob, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_style_set_pad_all(&style_arc_knob, LV_STATE_DEFAULT, LV_DPX(5)); style_init_reset(&style_table_cell); @@ -479,13 +475,11 @@ static void theme_apply(lv_obj_t* obj, lv_theme_style_t name) { lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_MAIN); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_MAIN); _lv_style_list_add_style(list, &style_btn); - _lv_style_list_add_style(list, &style_pad); lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_LIST); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_LIST); _lv_style_list_add_style(list, &style_box); _lv_style_list_add_style(list, &style_ddlist_list); - _lv_style_list_add_style(list, &style_pad); lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_SELECTED); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_SELECTED); diff --git a/src/displayapp/lv_pinetime_theme.h b/src/displayapp/lv_pinetime_theme.h index 714c424..67cee0f 100644 --- a/src/displayapp/lv_pinetime_theme.h +++ b/src/displayapp/lv_pinetime_theme.h @@ -23,7 +23,7 @@ extern "C" { #define LV_PINETIME_LIGHT lv_color_hex(0xf3f8fe) #define LV_PINETIME_GRAY lv_color_hex(0x8a8a8a) #define LV_PINETIME_LIGHT_GRAY lv_color_hex(0xc4c4c4) -#define LV_PINETIME_BLUE lv_color_hex(0x2f3540) +#define LV_PINETIME_BLUE lv_color_hex(0x5d697e) #define LV_PINETIME_GREEN lv_color_hex(0x4cb242) #define LV_PINETIME_RED lv_color_hex(0xd51732) diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index 2557242..cfb151c 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -40,7 +40,7 @@ Alarm::Alarm(DisplayApp* app, time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); alarmHours = alarmController.Hours(); alarmMinutes = alarmController.Minutes(); @@ -50,7 +50,7 @@ Alarm::Alarm(DisplayApp* app, lblampm = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(lblampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); - lv_obj_set_style_local_text_color(lblampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(lblampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(lblampm, " "); lv_label_set_align(lblampm, LV_LABEL_ALIGN_CENTER); lv_obj_align(lblampm, lv_scr_act(), LV_ALIGN_CENTER, 0, 30); @@ -300,8 +300,12 @@ void Alarm::ShowInfo() { auto minToAlarm = (timeToAlarm % 3600) / 60; auto secToAlarm = timeToAlarm % 60; - lv_label_set_text_fmt( - txtMessage, "Time to\nalarm:\n%2lu Days\n%2lu Hours\n%2lu Minutes\n%2lu Seconds", daysToAlarm, hrsToAlarm, minToAlarm, secToAlarm); + lv_label_set_text_fmt(txtMessage, + "Time to\nalarm:\n%2lu Days\n%2lu Hours\n%2lu Minutes\n%2lu Seconds", + daysToAlarm, + hrsToAlarm, + minToAlarm, + secToAlarm); } else { lv_label_set_text_static(txtMessage, "Alarm\nis not\nset."); } diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index f74dd68..80e446f 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -45,8 +45,8 @@ namespace Pinetime { Controllers::Settings& settingsController; System::SystemTask& systemTask; - lv_obj_t *time, *lblampm, *btnStop, *txtStop, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, - *txtMinDown, *txtHrUp, *txtHrDown, *btnRecur, *txtRecur, *btnInfo, *txtInfo, *enableSwitch; + lv_obj_t *time, *lblampm, *btnStop, *txtStop, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, *txtMinDown, + *txtHrUp, *txtHrDown, *btnRecur, *txtRecur, *btnInfo, *txtInfo, *enableSwitch; lv_obj_t* txtMessage = nullptr; lv_obj_t* btnMessage = nullptr; lv_task_t* taskStopAlarm = nullptr; diff --git a/src/displayapp/screens/BatteryIcon.cpp b/src/displayapp/screens/BatteryIcon.cpp index 08aaab7..2fe7c25 100644 --- a/src/displayapp/screens/BatteryIcon.cpp +++ b/src/displayapp/screens/BatteryIcon.cpp @@ -1,23 +1,34 @@ #include "displayapp/screens/BatteryIcon.h" #include <cstdint> #include "displayapp/screens/Symbols.h" +#include "displayapp/icons/battery/batteryicon.c" using namespace Pinetime::Applications::Screens; -const char* BatteryIcon::GetBatteryIcon(uint8_t batteryPercent) { - if (batteryPercent > 87) - return Symbols::batteryFull; - if (batteryPercent > 62) - return Symbols::batteryThreeQuarter; - if (batteryPercent > 37) - return Symbols::batteryHalf; - if (batteryPercent > 12) - return Symbols::batteryOneQuarter; - return Symbols::batteryEmpty; +void BatteryIcon::Create(lv_obj_t* parent) { + batteryImg = lv_img_create(parent, nullptr); + lv_img_set_src(batteryImg, &batteryicon); + lv_obj_set_style_local_image_recolor(batteryImg, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + + batteryJuice = lv_obj_create(batteryImg, nullptr); + lv_obj_set_width(batteryJuice, 8); + lv_obj_align(batteryJuice, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -2, -2); + lv_obj_set_style_local_radius(batteryJuice, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 0); +} + +lv_obj_t* BatteryIcon::GetObject() { + return batteryImg; +} + +void BatteryIcon::SetBatteryPercentage(uint8_t percentage) { + lv_obj_set_height(batteryJuice, percentage * 14 / 100); + lv_obj_realign(batteryJuice); } -const char* BatteryIcon::GetUnknownIcon() { - return Symbols::batteryEmpty; +void BatteryIcon::SetColor(lv_color_t color) { + lv_obj_set_style_local_image_recolor(batteryImg, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, color); + lv_obj_set_style_local_image_recolor_opa(batteryImg, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_bg_color(batteryJuice, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, color); } const char* BatteryIcon::GetPlugIcon(bool isCharging) { diff --git a/src/displayapp/screens/BatteryIcon.h b/src/displayapp/screens/BatteryIcon.h index bec2e4e..45d8f0e 100644 --- a/src/displayapp/screens/BatteryIcon.h +++ b/src/displayapp/screens/BatteryIcon.h @@ -1,15 +1,25 @@ #pragma once #include <cstdint> +#include <lvgl/src/lv_core/lv_obj.h> namespace Pinetime { namespace Applications { namespace Screens { class BatteryIcon { public: + void Create(lv_obj_t* parent); + + void SetColor(lv_color_t); + void SetBatteryPercentage(uint8_t percentage); + lv_obj_t* GetObject(); + static const char* GetUnknownIcon(); - static const char* GetBatteryIcon(uint8_t batteryPercent); static const char* GetPlugIcon(bool isCharging); + + private: + lv_obj_t* batteryImg; + lv_obj_t* batteryJuice; }; } } -}
\ No newline at end of file +} diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index e17de9a..d9d479f 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -33,17 +33,11 @@ BatteryInfo::BatteryInfo(Pinetime::Applications::DisplayApp* app, Pinetime::Cont lv_obj_align(percent, nullptr, LV_ALIGN_CENTER, 0, -60); voltage = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(voltage, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xC6A600)); + lv_obj_set_style_local_text_color(voltage, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_text_fmt(voltage, "%1i.%02i volts", batteryVoltage / 1000, batteryVoltage % 1000 / 10); lv_label_set_align(voltage, LV_LABEL_ALIGN_CENTER); lv_obj_align(voltage, nullptr, LV_ALIGN_CENTER, 0, 95); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - taskRefresh = lv_task_create(RefreshTaskCallback, 5000, LV_TASK_PRIO_MID, this); Refresh(); } @@ -68,7 +62,7 @@ void BatteryInfo::Refresh() { lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_YELLOW); lv_label_set_text_static(status, "Battery low"); } else { - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_label_set_text_static(status, "Discharging"); } diff --git a/src/displayapp/screens/Brightness.cpp b/src/displayapp/screens/Brightness.cpp deleted file mode 100644 index d9901ae..0000000 --- a/src/displayapp/screens/Brightness.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "displayapp/screens/Brightness.h" -#include <lvgl/lvgl.h> - -using namespace Pinetime::Applications::Screens; - -void slider_event_cb(lv_obj_t* slider, lv_event_t event) { - if (event == LV_EVENT_VALUE_CHANGED) { - auto* brightnessSlider = static_cast<Brightness*>(slider->user_data); - brightnessSlider->OnValueChanged(); - } -} - -Brightness::Brightness(Pinetime::Applications::DisplayApp* app, Controllers::BrightnessController& brightness) - : Screen(app), brightness {brightness} { - slider = lv_slider_create(lv_scr_act(), nullptr); - lv_obj_set_user_data(slider, this); - lv_obj_set_width(slider, LV_DPI * 2); - lv_obj_align(slider, nullptr, LV_ALIGN_CENTER, 0, 0); - lv_obj_set_event_cb(slider, slider_event_cb); - lv_slider_set_range(slider, 0, 2); - lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF); - - slider_label = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(slider_label, LevelToString(brightness.Level())); - lv_obj_set_auto_realign(slider_label, true); - lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 30); -} - -Brightness::~Brightness() { - lv_obj_clean(lv_scr_act()); -} - -const char* Brightness::LevelToString(Pinetime::Controllers::BrightnessController::Levels level) { - switch (level) { - case Pinetime::Controllers::BrightnessController::Levels::Off: - return "Off"; - case Pinetime::Controllers::BrightnessController::Levels::Low: - return "Low"; - case Pinetime::Controllers::BrightnessController::Levels::Medium: - return "Medium"; - case Pinetime::Controllers::BrightnessController::Levels::High: - return "High"; - default: - return "???"; - } -} - -void Brightness::OnValueChanged() { - SetValue(lv_slider_get_value(slider)); -} - -void Brightness::SetValue(uint8_t value) { - switch (value) { - case 0: - brightness.Set(Controllers::BrightnessController::Levels::Low); - break; - case 1: - brightness.Set(Controllers::BrightnessController::Levels::Medium); - break; - case 2: - brightness.Set(Controllers::BrightnessController::Levels::High); - break; - } - lv_label_set_text(slider_label, LevelToString(brightness.Level())); -} - -uint8_t Brightness::LevelToInt(Pinetime::Controllers::BrightnessController::Levels level) { - switch (level) { - case Pinetime::Controllers::BrightnessController::Levels::Off: - return 0; - case Pinetime::Controllers::BrightnessController::Levels::Low: - return 0; - case Pinetime::Controllers::BrightnessController::Levels::Medium: - return 1; - case Pinetime::Controllers::BrightnessController::Levels::High: - return 2; - default: - return 0; - } -} - -bool Brightness::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - switch (event) { - case TouchEvents::SwipeLeft: - brightness.Lower(); - if (brightness.Level() == Pinetime::Controllers::BrightnessController::Levels::Off) { - brightness.Set(Controllers::BrightnessController::Levels::Low); - } - SetValue(); - return true; - case TouchEvents::SwipeRight: - brightness.Higher(); - SetValue(); - return true; - default: - return false; - } -} - -void Brightness::SetValue() { - lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF); - lv_label_set_text(slider_label, LevelToString(brightness.Level())); -} diff --git a/src/displayapp/screens/Brightness.h b/src/displayapp/screens/Brightness.h deleted file mode 100644 index 693570c..0000000 --- a/src/displayapp/screens/Brightness.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include <lvgl/src/lv_core/lv_obj.h> -#include <cstdint> -#include "displayapp/screens/Screen.h" -#include "components/brightness/BrightnessController.h" - -namespace Pinetime { - namespace Applications { - namespace Screens { - class Brightness : public Screen { - public: - Brightness(DisplayApp* app, Controllers::BrightnessController& brightness); - ~Brightness() override; - - bool OnTouchEvent(TouchEvents event) override; - - void OnValueChanged(); - - private: - Controllers::BrightnessController& brightness; - - lv_obj_t* slider_label; - lv_obj_t* slider; - - const char* LevelToString(Controllers::BrightnessController::Levels level); - uint8_t LevelToInt(Controllers::BrightnessController::Levels level); - void SetValue(uint8_t value); - void SetValue(); - }; - } - } -} diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 67598c0..6e4e9af 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -12,7 +12,7 @@ #include "displayapp/screens/WatchFaceTerminal.h" #include "displayapp/screens/WatchFaceAnalog.h" #include "displayapp/screens/WatchFaceAnalog24.h" -#include "displayapp/screens/PineTimeStyle.h" +#include "displayapp/screens/WatchFacePineTimeStyle.h" using namespace Pinetime::Applications::Screens; @@ -44,7 +44,7 @@ Clock::Clock(DisplayApp* app, return WatchFaceAnalog24Screen(); break; case 3: - return PineTimeStyleScreen(); + return WatchFacePineTimeStyleScreen(); break; case 4: return WatchFaceTerminalScreen(); @@ -79,8 +79,12 @@ std::unique_ptr<Screen> Clock::WatchFaceDigitalScreen() { } std::unique_ptr<Screen> Clock::WatchFaceAnalogScreen() { - return std::make_unique<Screens::WatchFaceAnalog>( - app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); + return std::make_unique<Screens::WatchFaceAnalog>(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController); } std::unique_ptr<Screen> Clock::WatchFaceAnalog24Screen() { @@ -94,9 +98,14 @@ std::unique_ptr<Screen> Clock::WatchFaceAnalog24Screen() { motionController); } -std::unique_ptr<Screen> Clock::PineTimeStyleScreen() { - return std::make_unique<Screens::PineTimeStyle>( - app, dateTimeController, batteryController, bleController, notificatioManager, settingsController, motionController); +std::unique_ptr<Screen> Clock::WatchFacePineTimeStyleScreen() { + return std::make_unique<Screens::WatchFacePineTimeStyle>(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController, + motionController); } std::unique_ptr<Screen> Clock::WatchFaceTerminalScreen() { diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 2fcb1e6..3b5d896 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -47,7 +47,7 @@ namespace Pinetime { std::unique_ptr<Screen> WatchFaceDigitalScreen(); std::unique_ptr<Screen> WatchFaceAnalogScreen(); std::unique_ptr<Screen> WatchFaceAnalog24Screen(); - std::unique_ptr<Screen> PineTimeStyleScreen(); + std::unique_ptr<Screen> WatchFacePineTimeStyleScreen(); std::unique_ptr<Screen> WatchFaceTerminalScreen(); }; } diff --git a/src/displayapp/screens/Error.cpp b/src/displayapp/screens/Error.cpp index d546d61..82cb706 100644 --- a/src/displayapp/screens/Error.cpp +++ b/src/displayapp/screens/Error.cpp @@ -9,8 +9,7 @@ namespace { } } -Error::Error(Pinetime::Applications::DisplayApp* app, System::BootErrors error) - : Screen(app) { +Error::Error(Pinetime::Applications::DisplayApp* app, System::BootErrors error) : Screen(app) { lv_obj_t* warningLabel = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(warningLabel, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); diff --git a/src/displayapp/screens/Error.h b/src/displayapp/screens/Error.h index 2316754..6dbcc38 100644 --- a/src/displayapp/screens/Error.h +++ b/src/displayapp/screens/Error.h @@ -13,6 +13,7 @@ namespace Pinetime { ~Error() override; void ButtonEventHandler(); + private: lv_obj_t* btnOk; }; diff --git a/src/displayapp/screens/FirmwareUpdate.cpp b/src/displayapp/screens/FirmwareUpdate.cpp index 0a8544b..01530e1 100644 --- a/src/displayapp/screens/FirmwareUpdate.cpp +++ b/src/displayapp/screens/FirmwareUpdate.cpp @@ -8,26 +8,19 @@ using namespace Pinetime::Applications::Screens; FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Ble& bleController) : Screen(app), bleController {bleController} { - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - titleLabel = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(titleLabel, "Firmware update"); - lv_obj_set_auto_realign(titleLabel, true); lv_obj_align(titleLabel, nullptr, LV_ALIGN_IN_TOP_MID, 0, 50); bar1 = lv_bar_create(lv_scr_act(), nullptr); lv_obj_set_size(bar1, 200, 30); lv_obj_align(bar1, nullptr, LV_ALIGN_CENTER, 0, 0); - lv_bar_set_anim_time(bar1, 10); - lv_bar_set_range(bar1, 0, 100); + lv_bar_set_range(bar1, 0, 1000); lv_bar_set_value(bar1, 0, LV_ANIM_OFF); percentLabel = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(percentLabel, "Waiting..."); + lv_label_set_recolor(percentLabel, true); lv_obj_set_auto_realign(percentLabel, true); lv_obj_align(percentLabel, bar1, LV_ALIGN_OUT_TOP_MID, 0, 60); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); @@ -55,8 +48,9 @@ void FirmwareUpdate::Refresh() { } break; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Running: - if (state != States::Running) + if (state != States::Running) { state = States::Running; + } DisplayProgression(); break; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated: @@ -78,21 +72,20 @@ void FirmwareUpdate::Refresh() { } void FirmwareUpdate::DisplayProgression() const { - float current = bleController.FirmwareUpdateCurrentBytes() / 1024.0f; - float total = bleController.FirmwareUpdateTotalBytes() / 1024.0f; - int16_t pc = (current / total) * 100.0f; - lv_label_set_text_fmt(percentLabel, "%d %%", pc); + const uint32_t current = bleController.FirmwareUpdateCurrentBytes(); + const uint32_t total = bleController.FirmwareUpdateTotalBytes(); + const int16_t permille = current / (total / 1000); - lv_bar_set_value(bar1, pc, LV_ANIM_OFF); + lv_label_set_text_fmt(percentLabel, "%d %%", permille / 10); + + lv_bar_set_value(bar1, permille, LV_ANIM_OFF); } void FirmwareUpdate::UpdateValidated() { - lv_label_set_recolor(percentLabel, true); lv_label_set_text_static(percentLabel, "#00ff00 Image Ok!#"); } void FirmwareUpdate::UpdateError() { - lv_label_set_recolor(percentLabel, true); lv_label_set_text_static(percentLabel, "#ff0000 Error!#"); startTime = xTaskGetTickCount(); } diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 16244ad..a3c9761 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -7,11 +7,10 @@ using namespace Pinetime::Applications::Screens; namespace { - static void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { - FirmwareValidation* screen = static_cast<FirmwareValidation*>(obj->user_data); + void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<FirmwareValidation*>(obj->user_data); screen->OnButtonEvent(obj, event); } - } FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::FirmwareValidator& validator) @@ -35,14 +34,15 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, if (validator.IsValidated()) lv_label_set_text_static(labelIsValidated, "You have already\n#00ff00 validated# this firmware#"); else { - lv_label_set_text_static(labelIsValidated, "Please #00ff00 Validate# this version or\n#ff0000 Reset# to rollback to the previous version."); + lv_label_set_text_static(labelIsValidated, + "Please #00ff00 Validate# this version or\n#ff0000 Reset# to rollback to the previous version."); buttonValidate = lv_btn_create(lv_scr_act(), nullptr); buttonValidate->user_data = this; lv_obj_set_size(buttonValidate, 115, 50); lv_obj_align(buttonValidate, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_set_event_cb(buttonValidate, ButtonEventHandler); - lv_obj_set_style_local_bg_color(buttonValidate, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x009900)); + lv_obj_set_style_local_bg_color(buttonValidate, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); labelButtonValidate = lv_label_create(buttonValidate, nullptr); lv_label_set_text_static(labelButtonValidate, "Validate"); @@ -51,7 +51,7 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, buttonReset->user_data = this; lv_obj_set_size(buttonReset, 115, 50); lv_obj_align(buttonReset, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); - lv_obj_set_style_local_bg_color(buttonReset, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x990000)); + lv_obj_set_style_local_bg_color(buttonReset, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0x0, 0x0)); lv_obj_set_event_cb(buttonReset, ButtonEventHandler); labelButtonReset = lv_label_create(buttonReset, nullptr); diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index 0634187..2a1884f 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -28,7 +28,7 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app, lv_label_set_text_static(flashLight, Symbols::highlight); lv_obj_align(flashLight, nullptr, LV_ALIGN_CENTER, 0, 0); - for (auto & i : indicators) { + for (auto& i : indicators) { i = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_size(i, 15, 10); lv_obj_set_style_local_border_width(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 2); @@ -63,16 +63,16 @@ FlashLight::~FlashLight() { void FlashLight::SetColors() { if (isOn) { lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - for (auto & i : indicators) { - lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + for (auto& i : indicators) { + lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_WHITE); - lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); } } else { lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - for (auto & i : indicators) { + for (auto& i : indicators) { lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_BLACK); lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index 89b43bb..35e06bb 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -21,8 +21,8 @@ namespace { return ""; } - static void btnStartStopEventHandler(lv_obj_t* obj, lv_event_t event) { - HeartRate* screen = static_cast<HeartRate*>(obj->user_data); + void btnStartStopEventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<HeartRate*>(obj->user_data); screen->OnStartStopEvent(event); } } @@ -37,9 +37,9 @@ HeartRate::HeartRate(Pinetime::Applications::DisplayApp* app, lv_obj_set_style_local_text_font(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); if (isHrRunning) - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); else - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(label_hr, "000"); lv_obj_align(label_hr, nullptr, LV_ALIGN_CENTER, 0, -40); @@ -49,7 +49,7 @@ HeartRate::HeartRate(Pinetime::Applications::DisplayApp* app, lv_obj_align(label_bpm, label_hr, LV_ALIGN_OUT_TOP_MID, 0, -20); label_status = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(label_status, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); + lv_obj_set_style_local_text_color(label_status, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); lv_label_set_text_static(label_status, ToString(Pinetime::Controllers::HeartRateController::States::NotEnoughData)); lv_obj_align(label_status, label_hr, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); @@ -97,12 +97,12 @@ void HeartRate::OnStartStopEvent(lv_event_t event) { heartRateController.Start(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); } else { heartRateController.Stop(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); } } } diff --git a/src/displayapp/screens/InfiniPaint.cpp b/src/displayapp/screens/InfiniPaint.cpp index d279faf..733b4e2 100644 --- a/src/displayapp/screens/InfiniPaint.cpp +++ b/src/displayapp/screens/InfiniPaint.cpp @@ -26,7 +26,7 @@ bool InfiniPaint::OnTouchEvent(Pinetime::Applications::TouchEvents event) { selectColor = LV_COLOR_MAGENTA; break; case 1: - selectColor = LV_COLOR_GREEN; + selectColor = LV_COLOR_MAKE(0x0, 0xb0, 0x0); break; case 2: selectColor = LV_COLOR_WHITE; diff --git a/src/displayapp/screens/Label.cpp b/src/displayapp/screens/Label.cpp index 62ec1f0..4486d6f 100644 --- a/src/displayapp/screens/Label.cpp +++ b/src/displayapp/screens/Label.cpp @@ -27,7 +27,7 @@ Label::Label(uint8_t screenID, uint8_t numScreens, Pinetime::Applications::Displ pageIndicator = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_obj_set_style_local_line_rounded(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index af3f30f..0bc7da8 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -5,11 +5,10 @@ using namespace Pinetime::Applications::Screens; namespace { - static void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { - List* screen = static_cast<List*>(obj->user_data); + void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<List*>(obj->user_data); screen->OnButtonEvent(obj, event); } - } List::List(uint8_t screenID, @@ -45,7 +44,7 @@ List::List(uint8_t screenID, pageIndicator = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } @@ -68,7 +67,7 @@ List::List(uint8_t screenID, if (applications[i].application != Apps::None) { itemApps[i] = lv_btn_create(container1, nullptr); - lv_obj_set_style_local_bg_opa(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_style_local_bg_opa(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); lv_obj_set_style_local_radius(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 57); lv_obj_set_style_local_bg_color(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); @@ -86,12 +85,6 @@ List::List(uint8_t screenID, lv_label_set_text_fmt(labelBt, " %s", applications[i].name); } } - - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, LV_HOR_RES, LV_VER_RES); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } List::~List() { diff --git a/src/displayapp/screens/List.h b/src/displayapp/screens/List.h index 023de3a..88ef28e 100644 --- a/src/displayapp/screens/List.h +++ b/src/displayapp/screens/List.h @@ -2,7 +2,7 @@ #include <lvgl/lvgl.h> #include <cstdint> -#include <memory> +#include <array> #include "displayapp/screens/Screen.h" #include "displayapp/Apps.h" #include "components/settings/Settings.h" diff --git a/src/displayapp/screens/Meter.cpp b/src/displayapp/screens/Meter.cpp deleted file mode 100644 index 9c85310..0000000 --- a/src/displayapp/screens/Meter.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "displayapp/screens/Meter.h" -#include <lvgl/lvgl.h> -#include "displayapp/DisplayApp.h" - -using namespace Pinetime::Applications::Screens; - -Meter::Meter(Pinetime::Applications::DisplayApp* app) : Screen(app) { - - /*Create a line meter */ - lmeter = lv_linemeter_create(lv_scr_act(), nullptr); - lv_linemeter_set_range(lmeter, 0, 60); /*Set the range*/ - lv_linemeter_set_value(lmeter, value); /*Set the current value*/ - lv_linemeter_set_angle_offset(lmeter, 180); - lv_linemeter_set_scale(lmeter, 360, 60); /*Set the angle and number of lines*/ - - lv_obj_set_style_local_scale_end_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(255, 0, 0)); - lv_obj_set_style_local_scale_grad_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(160, 0, 0)); - lv_obj_set_style_local_line_width(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, 2); - lv_obj_set_style_local_line_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_SILVER); - - lv_obj_set_size(lmeter, 200, 200); - lv_obj_align(lmeter, nullptr, LV_ALIGN_CENTER, 0, 0); - - taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); -} - -Meter::~Meter() { - lv_task_del(taskRefresh); - lv_obj_clean(lv_scr_act()); -} - -void Meter::Refresh() { - lv_linemeter_set_value(lmeter, value++); /*Set the current value*/ - if (value >= 60) - value = 0; -} diff --git a/src/displayapp/screens/Meter.h b/src/displayapp/screens/Meter.h deleted file mode 100644 index 50d9f83..0000000 --- a/src/displayapp/screens/Meter.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include <cstdint> -#include "displayapp/screens/Screen.h" -#include <lvgl/src/lv_core/lv_style.h> -#include <lvgl/src/lv_core/lv_obj.h> - -namespace Pinetime { - namespace Applications { - namespace Screens { - - class Meter : public Screen { - public: - Meter(DisplayApp* app); - ~Meter() override; - - void Refresh() override; - - private: - lv_style_t style_lmeter; - lv_obj_t* lmeter; - - uint32_t value = 0; - - lv_task_t* taskRefresh; - }; - } - } -} diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 8b511ca..734910b 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -12,7 +12,7 @@ namespace { lv_obj_t* createLabel(const char* name, lv_obj_t* reference, lv_align_t align, lv_font_t* font, uint8_t x, uint8_t y) { lv_obj_t* label = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font); - lv_obj_set_style_local_text_color(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text(label, name); lv_obj_align(label, reference, align, x, y); @@ -47,8 +47,6 @@ Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorControl bpbDropdown = lv_dropdown_create(lv_scr_act(), nullptr); bpbDropdown->user_data = this; lv_obj_set_event_cb(bpbDropdown, eventHandler); - lv_obj_set_style_local_pad_left(bpbDropdown, LV_DROPDOWN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_pad_left(bpbDropdown, LV_DROPDOWN_PART_LIST, LV_STATE_DEFAULT, 20); lv_obj_set_size(bpbDropdown, 115, 50); lv_obj_align(bpbDropdown, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_dropdown_set_options(bpbDropdown, "1\n2\n3\n4\n5\n6\n7\n8\n9"); diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h index 6e6589f..8933b17 100644 --- a/src/displayapp/screens/Metronome.h +++ b/src/displayapp/screens/Metronome.h @@ -30,7 +30,7 @@ namespace Pinetime { lv_obj_t *bpmArc, *bpmTap, *bpmValue; lv_obj_t *bpbDropdown, *currentBpbText; - lv_obj_t *playPause; + lv_obj_t* playPause; lv_task_t* taskRefresh; }; diff --git a/src/displayapp/screens/Motion.cpp b/src/displayapp/screens/Motion.cpp index 799dcb3..f7ffcc7 100644 --- a/src/displayapp/screens/Motion.cpp +++ b/src/displayapp/screens/Motion.cpp @@ -19,7 +19,7 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr /*Add 3 data series*/ ser1 = lv_chart_add_series(chart, LV_COLOR_RED); - ser2 = lv_chart_add_series(chart, LV_COLOR_GREEN); + ser2 = lv_chart_add_series(chart, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); ser3 = lv_chart_add_series(chart, LV_COLOR_YELLOW); lv_chart_init_points(chart, ser1, 0); @@ -28,7 +28,7 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr lv_chart_refresh(chart); /*Required after direct set*/ label = lv_label_create(lv_scr_act(), NULL); - lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", 0, 0, 0); + lv_label_set_text_fmt(label, "X #FF0000 %d# Y #00B000 %d# Z #FFFF00 %d#", 0, 0, 0); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); lv_label_set_recolor(label, true); @@ -53,7 +53,7 @@ void Motion::Refresh() { lv_label_set_text_fmt(labelStep, "Steps %lu", motionController.NbSteps()); lv_label_set_text_fmt(label, - "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", + "X #FF0000 %d# Y #00B000 %d# Z #FFFF00 %d#", motionController.X() / 0x10, motionController.Y() / 0x10, motionController.Z() / 0x10); diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index d14ae3a..1abb16a 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -20,9 +20,9 @@ #include <cstdint> #include "displayapp/DisplayApp.h" #include "components/ble/MusicService.h" -#include "displayapp/icons/music/disc.cpp" -#include "displayapp/icons/music/disc_f_1.cpp" -#include "displayapp/icons/music/disc_f_2.cpp" +#include "displayapp/icons/music/disc.c" +#include "displayapp/icons/music/disc_f_1.c" +#include "displayapp/icons/music/disc_f_2.c" using namespace Pinetime::Applications::Screens; @@ -53,7 +53,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_style_init(&btn_style); lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, 20); lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_20); + lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_50); btnVolDown = lv_btn_create(lv_scr_act(), nullptr); btnVolDown->user_data = this; @@ -152,32 +152,24 @@ Music::~Music() { void Music::Refresh() { if (artist != musicService.getArtist()) { artist = musicService.getArtist(); - currentLength = 0; lv_label_set_text(txtArtist, artist.data()); } if (track != musicService.getTrack()) { track = musicService.getTrack(); - currentLength = 0; lv_label_set_text(txtTrack, track.data()); } if (album != musicService.getAlbum()) { album = musicService.getAlbum(); - currentLength = 0; } if (playing != musicService.isPlaying()) { playing = musicService.isPlaying(); } - // Because we increment this ourselves, - // we can't compare with the old data directly - // have to update it when there's actually new data - // just to avoid unnecessary draws that make UI choppy - if (lastLength != musicService.getProgress()) { - currentLength = musicService.getProgress(); - lastLength = currentLength; + if (currentPosition != musicService.getProgress()) { + currentPosition = musicService.getProgress(); UpdateLength(); } @@ -186,7 +178,7 @@ void Music::Refresh() { UpdateLength(); } - if (playing == Pinetime::Controllers::MusicService::MusicStatus::Playing) { + if (playing) { lv_label_set_text_static(txtPlayPause, Symbols::pause); if (xTaskGetTickCount() - 1024 >= lastIncrement) { @@ -197,18 +189,12 @@ void Music::Refresh() { } frameB = !frameB; - if (currentLength < totalLength) { - currentLength += - static_cast<int>((static_cast<float>(xTaskGetTickCount() - lastIncrement) / 1024.0f) * musicService.getPlaybackSpeed()); - } else { + if (currentPosition >= totalLength) { // Let's assume the getTrack finished, paused when the timer ends // and there's no new getTrack being sent to us - // TODO: ideally this would be configurable playing = false; } lastIncrement = xTaskGetTickCount(); - - UpdateLength(); } } else { lv_label_set_text_static(txtPlayPause, Symbols::play); @@ -219,23 +205,19 @@ void Music::UpdateLength() { if (totalLength > (99 * 60 * 60)) { lv_label_set_text_static(txtTrackDuration, "Inf/Inf"); } else if (totalLength > (99 * 60)) { - char timer[12]; - sprintf(timer, - "%02d:%02d/%02d:%02d", - (currentLength / (60 * 60)) % 100, - ((currentLength % (60 * 60)) / 60) % 100, - (totalLength / (60 * 60)) % 100, - ((totalLength % (60 * 60)) / 60) % 100); - lv_label_set_text(txtTrackDuration, timer); + lv_label_set_text_fmt(txtTrackDuration, + "%02d:%02d/%02d:%02d", + (currentPosition / (60 * 60)) % 100, + ((currentPosition % (60 * 60)) / 60) % 100, + (totalLength / (60 * 60)) % 100, + ((totalLength % (60 * 60)) / 60) % 100); } else { - char timer[12]; - sprintf(timer, - "%02d:%02d/%02d:%02d", - (currentLength / 60) % 100, - (currentLength % 60) % 100, - (totalLength / 60) % 100, - (totalLength % 60) % 100); - lv_label_set_text(txtTrackDuration, timer); + lv_label_set_text_fmt(txtTrackDuration, + "%02d:%02d/%02d:%02d", + (currentPosition / 60) % 100, + (currentPosition % 60) % 100, + (totalLength / 60) % 100, + (totalLength % 60) % 100); } } diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index 27b2d3d..258a402 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -70,10 +70,8 @@ namespace Pinetime { /** Total length in seconds */ int totalLength = 0; - /** Current length in seconds */ - int currentLength; - /** Last length */ - int lastLength; + /** Current position in seconds */ + int currentPosition; /** Last time an animation update or timer was incremented */ TickType_t lastIncrement = 0; diff --git a/src/displayapp/screens/Navigation.cpp b/src/displayapp/screens/Navigation.cpp index 0dd0d30..5779df3 100644 --- a/src/displayapp/screens/Navigation.cpp +++ b/src/displayapp/screens/Navigation.cpp @@ -192,7 +192,7 @@ void Navigation::Refresh() { if (progress > 90) { lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_RED); } else { - lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); } } } diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 600f748..d7fe93a 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -181,7 +181,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, : mode {mode}, alertNotificationService {alertNotificationService}, motorController {motorController} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); - lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); + lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x38, 0x38, 0x38)); lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -197,13 +197,13 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_align(alert_count, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 16); lv_obj_t* alert_type = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x888888)); - if(title == nullptr) { + lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + if (title == nullptr) { lv_label_set_text_static(alert_type, "Notification"); } else { // copy title to label and replace newlines with spaces lv_label_set_text(alert_type, title); - char *pchar = strchr(lv_label_get_text(alert_type), '\n'); + char* pchar = strchr(lv_label_get_text(alert_type), '\n'); while (pchar != nullptr) { *pchar = ' '; pchar = strchr(pchar + 1, '\n'); @@ -218,7 +218,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, switch (category) { default: { lv_obj_t* alert_subject = lv_label_create(container1, nullptr); - lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_long_mode(alert_subject, LV_LABEL_LONG_BREAK); lv_obj_set_width(alert_subject, LV_HOR_RES - 20); lv_label_set_text(alert_subject, msg); @@ -226,7 +226,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, case Controllers::NotificationManager::Categories::IncomingCall: { lv_obj_set_height(container1, 108); lv_obj_t* alert_subject = lv_label_create(container1, nullptr); - lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_long_mode(alert_subject, LV_LABEL_LONG_BREAK); lv_obj_set_width(alert_subject, LV_HOR_RES - 20); lv_label_set_text_static(alert_subject, "Incoming call from"); @@ -244,7 +244,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_align(bt_accept, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); label_accept = lv_label_create(bt_accept, nullptr); lv_label_set_text_static(label_accept, Symbols::phone); - lv_obj_set_style_local_bg_color(bt_accept, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(bt_accept, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); bt_reject = lv_btn_create(lv_scr_act(), nullptr); bt_reject->user_data = this; @@ -262,15 +262,9 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_align(bt_mute, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); label_mute = lv_label_create(bt_mute, nullptr); lv_label_set_text_static(label_mute, Symbols::volumMute); - lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); } break; } - - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } void Notifications::NotificationItem::OnCallButtonEvent(lv_obj_t* obj, lv_event_t event) { diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp index 79401ff..1fb2508 100644 --- a/src/displayapp/screens/Paddle.cpp +++ b/src/displayapp/screens/Paddle.cpp @@ -53,7 +53,7 @@ void Paddle::Refresh() { if (ballX >= LV_HOR_RES - ballSize - 1) { dx *= -1; dy += rand() % 3 - 1; // add a little randomization in wall bounce direction, one of [-1, 0, 1] - if (dy > 5) { // limit dy to be in range [-5 to 5] + if (dy > 5) { // limit dy to be in range [-5 to 5] dy = 5; } if (dy < -5) { @@ -85,7 +85,14 @@ bool Paddle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { bool Paddle::OnTouchEvent(uint16_t x, uint16_t y) { // sets the center paddle pos. (30px offset) with the the y_coordinate of the finger - lv_obj_set_pos(paddle, 0, y - 30); + // but clamp it such that the paddle never clips off screen + if (y < 31) { + lv_obj_set_pos(paddle, 0, 1); + } else if (y > LV_VER_RES - 31) { + lv_obj_set_pos(paddle, 0, LV_VER_RES - 61); + } else { + lv_obj_set_pos(paddle, 0, y - 30); + } paddlePos = y; return true; } diff --git a/src/displayapp/screens/PassKey.cpp b/src/displayapp/screens/PassKey.cpp index e9715cd..4057a7e 100644 --- a/src/displayapp/screens/PassKey.cpp +++ b/src/displayapp/screens/PassKey.cpp @@ -9,16 +9,8 @@ PassKey::PassKey(Pinetime::Applications::DisplayApp* app, uint32_t key) : Screen lv_obj_set_style_local_text_font(passkeyLabel, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); lv_label_set_text_fmt(passkeyLabel, "%06u", key); lv_obj_align(passkeyLabel, nullptr, LV_ALIGN_CENTER, 0, -20); - - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } PassKey::~PassKey() { lv_obj_clean(lv_scr_act()); } - diff --git a/src/displayapp/screens/PassKey.h b/src/displayapp/screens/PassKey.h index 16e72a3..82735b5 100644 --- a/src/displayapp/screens/PassKey.h +++ b/src/displayapp/screens/PassKey.h @@ -14,7 +14,6 @@ namespace Pinetime { private: lv_obj_t* passkeyLabel; - lv_obj_t* backgroundLabel; }; } } diff --git a/src/displayapp/screens/Screen.h b/src/displayapp/screens/Screen.h index 04bb152..e72a236 100644 --- a/src/displayapp/screens/Screen.h +++ b/src/displayapp/screens/Screen.h @@ -35,7 +35,7 @@ namespace Pinetime { private: T value {}; // NSDMI - default initialise type - bool isUpdated {true}; // NSDMI - use brace initilisation + bool isUpdated {true}; // NSDMI - use brace initialisation }; class Screen { diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h index e316e36..ad88294 100644 --- a/src/displayapp/screens/ScreenList.h +++ b/src/displayapp/screens/ScreenList.h @@ -17,8 +17,12 @@ namespace Pinetime { uint8_t initScreen, const std::array<std::function<std::unique_ptr<Screen>()>, N>&& screens, ScreenListModes mode) - : Screen(app), initScreen {initScreen}, screens {std::move(screens)}, mode {mode}, screenIndex{initScreen}, current {this->screens[initScreen]()} { - + : Screen(app), + initScreen {initScreen}, + screens {std::move(screens)}, + mode {mode}, + screenIndex {initScreen}, + current {this->screens[initScreen]()} { } ScreenList(const ScreenList&) = delete; diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp index 411b73d..de24354 100644 --- a/src/displayapp/screens/Steps.cpp +++ b/src/displayapp/screens/Steps.cpp @@ -38,7 +38,7 @@ Steps::Steps(Pinetime::Applications::DisplayApp* app, lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -40); lv_obj_t* lstepsL = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); lv_label_set_text_static(lstepsL, "Steps"); lv_obj_align(lstepsL, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 5); @@ -48,12 +48,6 @@ Steps::Steps(Pinetime::Applications::DisplayApp* app, lv_label_set_align(lstepsGoal, LV_LABEL_ALIGN_CENTER); lv_obj_align(lstepsGoal, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 40); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - resetBtn = lv_btn_create(lv_scr_act(), nullptr); resetBtn->user_data = this; lv_obj_set_event_cb(resetBtn, lap_event_handler); diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index ca479b5..10825ff 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -8,38 +8,26 @@ using namespace Pinetime::Applications::Screens; -// Anonymous namespace for local functions namespace { TimeSeparated_t convertTicksToTimeSegments(const TickType_t timeElapsed) { - const int timeElapsedMillis = (static_cast<float>(timeElapsed) / static_cast<float>(configTICK_RATE_HZ)) * 1000; + // Centiseconds + const int timeElapsedCentis = timeElapsed * 100 / configTICK_RATE_HZ; - const int hundredths = (timeElapsedMillis % 1000) / 10; // Get only the first two digits and ignore the last - const int secs = (timeElapsedMillis / 1000) % 60; - const int mins = (timeElapsedMillis / 1000) / 60; + const int hundredths = (timeElapsedCentis % 100); + const int secs = (timeElapsedCentis / 100) % 60; + const int mins = (timeElapsedCentis / 100) / 60; return TimeSeparated_t {mins, secs, hundredths}; } - TickType_t calculateDelta(const TickType_t startTime, const TickType_t currentTime) { - TickType_t delta = 0; - // Take care of overflow - if (startTime > currentTime) { - delta = 0xffffffff - startTime; - delta += (currentTime + 1); - } else { - delta = currentTime - startTime; - } - return delta; + void play_pause_event_handler(lv_obj_t* obj, lv_event_t event) { + auto* stopWatch = static_cast<StopWatch*>(obj->user_data); + stopWatch->playPauseBtnEventHandler(event); } -} -static void play_pause_event_handler(lv_obj_t* obj, lv_event_t event) { - auto stopWatch = static_cast<StopWatch*>(obj->user_data); - stopWatch->playPauseBtnEventHandler(event); -} - -static void stop_lap_event_handler(lv_obj_t* obj, lv_event_t event) { - auto stopWatch = static_cast<StopWatch*>(obj->user_data); - stopWatch->stopLapBtnEventHandler(event); + void stop_lap_event_handler(lv_obj_t* obj, lv_event_t event) { + auto* stopWatch = static_cast<StopWatch*>(obj->user_data); + stopWatch->stopLapBtnEventHandler(event); + } } StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) @@ -54,21 +42,20 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(time, "00:00"); - lv_obj_align(time, nullptr, LV_ALIGN_CENTER, 0, -45); + lv_obj_align(time, lv_scr_act(), LV_ALIGN_CENTER, 0, -45); msecTime = lv_label_create(lv_scr_act(), nullptr); // lv_obj_set_style_local_text_font(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); - lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(msecTime, "00"); - lv_obj_align(msecTime, nullptr, LV_ALIGN_CENTER, 0, 3); + lv_obj_align(msecTime, lv_scr_act(), LV_ALIGN_CENTER, 0, 3); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; lv_obj_set_event_cb(btnPlayPause, play_pause_event_handler); - lv_obj_set_height(btnPlayPause, 50); - lv_obj_set_width(btnPlayPause, 115); + lv_obj_set_size(btnPlayPause, 115, 50); lv_obj_align(btnPlayPause, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); txtPlayPause = lv_label_create(btnPlayPause, nullptr); lv_label_set_text_static(txtPlayPause, Symbols::play); @@ -76,12 +63,11 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) btnStopLap = lv_btn_create(lv_scr_act(), nullptr); btnStopLap->user_data = this; lv_obj_set_event_cb(btnStopLap, stop_lap_event_handler); - lv_obj_set_height(btnStopLap, 50); - lv_obj_set_width(btnStopLap, 115); + lv_obj_set_size(btnStopLap, 115, 50); lv_obj_align(btnStopLap, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); - lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x080808)); + lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_MAKE(0x18, 0x18, 0x18)); txtStopLap = lv_label_create(btnStopLap, nullptr); - lv_obj_set_style_local_text_color(txtStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x888888)); + lv_obj_set_style_local_text_color(txtStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(txtStopLap, Symbols::stop); lv_obj_set_state(btnStopLap, LV_STATE_DISABLED); lv_obj_set_state(txtStopLap, LV_STATE_DISABLED); @@ -107,11 +93,11 @@ StopWatch::~StopWatch() { lv_obj_clean(lv_scr_act()); } -void StopWatch::reset() { +void StopWatch::Reset() { currentState = States::Init; oldTimeElapsed = 0; - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(time, "00:00"); lv_label_set_text_static(msecTime, "00"); @@ -124,11 +110,11 @@ void StopWatch::reset() { lv_obj_set_state(txtStopLap, LV_STATE_DISABLED); } -void StopWatch::start() { +void StopWatch::Start() { lv_obj_set_state(btnStopLap, LV_STATE_DEFAULT); lv_obj_set_state(txtStopLap, LV_STATE_DEFAULT); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); - lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); + lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_label_set_text_static(txtPlayPause, Symbols::pause); lv_label_set_text_static(txtStopLap, Symbols::lapsFlag); startTime = xTaskGetTickCount(); @@ -136,7 +122,7 @@ void StopWatch::start() { systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); } -void StopWatch::pause() { +void StopWatch::Pause() { startTime = 0; // Store the current time elapsed in cache oldTimeElapsed += timeElapsed; @@ -150,7 +136,7 @@ void StopWatch::pause() { void StopWatch::Refresh() { if (currentState == States::Running) { - timeElapsed = calculateDelta(startTime, xTaskGetTickCount()); + timeElapsed = xTaskGetTickCount() - startTime; currentTimeSeparated = convertTicksToTimeSegments((oldTimeElapsed + timeElapsed)); lv_label_set_text_fmt(time, "%02d:%02d", currentTimeSeparated.mins, currentTimeSeparated.secs); @@ -163,11 +149,11 @@ void StopWatch::playPauseBtnEventHandler(lv_event_t event) { return; } if (currentState == States::Init) { - start(); + Start(); } else if (currentState == States::Running) { - pause(); + Pause(); } else if (currentState == States::Halted) { - start(); + Start(); } } @@ -180,20 +166,24 @@ void StopWatch::stopLapBtnEventHandler(lv_event_t event) { lapBuffer.addLaps(currentTimeSeparated); lapNr++; if (lapBuffer[1]) { - lv_label_set_text_fmt( - lapOneText, "#%2d %2d:%02d.%02d", (lapNr - 1), lapBuffer[1]->mins, lapBuffer[1]->secs, lapBuffer[1]->hundredths); + lv_label_set_text_fmt(lapOneText, + "#%2d %2d:%02d.%02d", + (lapNr - 1), + lapBuffer[1]->mins, + lapBuffer[1]->secs, + lapBuffer[1]->hundredths); } if (lapBuffer[0]) { lv_label_set_text_fmt(lapTwoText, "#%2d %2d:%02d.%02d", lapNr, lapBuffer[0]->mins, lapBuffer[0]->secs, lapBuffer[0]->hundredths); } } else if (currentState == States::Halted) { - reset(); + Reset(); } } bool StopWatch::OnButtonPushed() { if (currentState == States::Running) { - pause(); + Pause(); return true; } return false; diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h index 06193f6..ef55e2d 100644 --- a/src/displayapp/screens/StopWatch.h +++ b/src/displayapp/screens/StopWatch.h @@ -70,9 +70,9 @@ namespace Pinetime::Applications::Screens { void stopLapBtnEventHandler(lv_event_t event); bool OnButtonPushed() override; - void reset(); - void start(); - void pause(); + void Reset(); + void Start(); + void Pause(); private: Pinetime::System::SystemTask& systemTask; diff --git a/src/displayapp/screens/Styles.cpp b/src/displayapp/screens/Styles.cpp index 7f43fb9..bcfd584 100644 --- a/src/displayapp/screens/Styles.cpp +++ b/src/displayapp/screens/Styles.cpp @@ -3,6 +3,6 @@ void Pinetime::Applications::Screens::SetRadioButtonStyle(lv_obj_t* checkbox) { lv_obj_set_style_local_radius(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_obj_set_style_local_border_width(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, 9); - lv_obj_set_style_local_border_color(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_GREEN); + lv_obj_set_style_local_border_color(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_obj_set_style_local_bg_color(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_WHITE); } diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index e68a7af..f973181 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -5,13 +5,8 @@ namespace Pinetime { namespace Screens { namespace Symbols { static constexpr const char* none = ""; - static constexpr const char* batteryFull = "\xEF\x89\x80"; - static constexpr const char* batteryEmpty = "\xEF\x89\x84"; - static constexpr const char* batteryThreeQuarter = "\xEF\x89\x81"; static constexpr const char* batteryHalf = "\xEF\x89\x82"; - static constexpr const char* batteryOneQuarter = "\xEF\x89\x83"; static constexpr const char* heartBeat = "\xEF\x88\x9E"; - static constexpr const char* bluetoothFull = "\xEF\x8A\x93"; static constexpr const char* bluetooth = "\xEF\x8A\x94"; static constexpr const char* plug = "\xEF\x87\xA6"; static constexpr const char* shoe = "\xEF\x95\x8B"; @@ -22,11 +17,9 @@ namespace Pinetime { static constexpr const char* check = "\xEF\x95\xA0"; static constexpr const char* music = "\xEF\x80\x81"; static constexpr const char* tachometer = "\xEF\x8F\xBD"; - static constexpr const char* asterisk = "\xEF\x81\xA9"; static constexpr const char* paintbrush = "\xEF\x87\xBC"; static constexpr const char* paddle = "\xEF\x91\x9D"; static constexpr const char* map = "\xEF\x96\xa0"; - static constexpr const char* qrcode = "\xEF\x80\xa9"; static constexpr const char* phone = "\xEF\x82\x95"; static constexpr const char* phoneSlash = "\xEF\x8F\x9D"; static constexpr const char* volumMute = "\xEF\x9A\xA9"; diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 0586877..65961d5 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -78,12 +78,12 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen1() { lv_label_set_recolor(label, true); lv_label_set_text_fmt(label, "#FFFF00 InfiniTime#\n\n" - "#444444 Version# %ld.%ld.%ld\n" - "#444444 Short Ref# %s\n" - "#444444 Build date#\n" + "#808080 Version# %ld.%ld.%ld\n" + "#808080 Short Ref# %s\n" + "#808080 Build date#\n" "%s\n" "%s\n\n" - "#444444 Bootloader# %s", + "#808080 Bootloader# %s", Version::Major(), Version::Minor(), Version::Patch(), @@ -139,14 +139,14 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen2() { lv_obj_t* label = lv_label_create(lv_scr_act(), nullptr); lv_label_set_recolor(label, true); lv_label_set_text_fmt(label, - "#444444 Date# %02d/%02d/%04d\n" - "#444444 Time# %02d:%02d:%02d\n" - "#444444 Uptime#\n %02lud %02lu:%02lu:%02lu\n" - "#444444 Battery# %d%%/%03imV\n" - "#444444 Backlight# %s\n" - "#444444 Last reset# %s\n" - "#444444 Accel.# %s\n" - "#444444 Touch.# %x.%x.%x\n", + "#808080 Date# %02d/%02d/%04d\n" + "#808080 Time# %02d:%02d:%02d\n" + "#808080 Uptime#\n %02lud %02lu:%02lu:%02lu\n" + "#808080 Battery# %d%%/%03imV\n" + "#808080 Backlight# %s\n" + "#808080 Last reset# %s\n" + "#808080 Accel.# %s\n" + "#808080 Touch.# %x.%x.%x\n", dateTimeController.Day(), static_cast<uint8_t>(dateTimeController.Month()), dateTimeController.Year(), @@ -177,14 +177,14 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen3() { lv_label_set_recolor(label, true); auto& bleAddr = bleController.Address(); lv_label_set_text_fmt(label, - "#444444 BLE MAC#\n" + "#808080 BLE MAC#\n" " %02x:%02x:%02x:%02x:%02x:%02x" "\n" - "#444444 LVGL Memory#\n" - " #444444 used# %d (%d%%)\n" - " #444444 max used# %lu\n" - " #444444 frag# %d%%\n" - " #444444 free# %d", + "#808080 LVGL Memory#\n" + " #808080 used# %d (%d%%)\n" + " #808080 max used# %lu\n" + " #808080 frag# %d%%\n" + " #808080 free# %d", bleAddr[5], bleAddr[4], bleAddr[3], @@ -212,7 +212,7 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen4() { lv_table_set_col_cnt(infoTask, 4); lv_table_set_row_cnt(infoTask, maxTaskCount + 1); lv_obj_set_style_local_pad_all(infoTask, LV_TABLE_PART_CELL1, LV_STATE_DEFAULT, 0); - lv_obj_set_style_local_border_color(infoTask, LV_TABLE_PART_CELL1, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_border_color(infoTask, LV_TABLE_PART_CELL1, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_table_set_cell_value(infoTask, 0, 0, "#"); lv_table_set_col_width(infoTask, 0, 30); @@ -269,11 +269,11 @@ std::unique_ptr<Screen> SystemInfo::CreateScreen5() { "under the terms of\n" "the GNU General\n" "Public License v3\n" - "#444444 Source code#\n" + "#808080 Source code#\n" "#FFFF00 https://github.com/#\n" "#FFFF00 InfiniTimeOrg/#\n" "#FFFF00 InfiniTime#"); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, nullptr, LV_ALIGN_CENTER, 0, 0); return std::make_unique<Screens::Label>(4, 5, app, label); -}
\ No newline at end of file +} diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 4df69fe..cce1d2e 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -5,13 +5,15 @@ using namespace Pinetime::Applications::Screens; namespace { - static void lv_update_task(struct _lv_task_t* task) { + void lv_update_task(struct _lv_task_t* task) { auto* user_data = static_cast<Tile*>(task->user_data); user_data->UpdateScreen(); } - static void event_handler(lv_obj_t* obj, lv_event_t event) { - if (event != LV_EVENT_VALUE_CHANGED) return; + void event_handler(lv_obj_t* obj, lv_event_t event) { + if (event != LV_EVENT_VALUE_CHANGED) { + return; + } Tile* screen = static_cast<Tile*>(obj->user_data); auto* eventDataPtr = (uint32_t*) lv_event_get_data(); @@ -33,14 +35,12 @@ Tile::Tile(uint8_t screenID, // Time label_time = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER); lv_obj_align(label_time, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); // Battery - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); - lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, -8, 0); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, -8, 0); if (numScreens > 1) { pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; @@ -63,7 +63,7 @@ Tile::Tile(uint8_t screenID, pageIndicator = lv_line_create(lv_scr_act(), nullptr); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } @@ -87,9 +87,9 @@ Tile::Tile(uint8_t screenID, lv_obj_align(btnm1, NULL, LV_ALIGN_CENTER, 0, 10); lv_obj_set_style_local_radius(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_OPA_50); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_20); + lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_50); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 10); @@ -104,13 +104,9 @@ Tile::Tile(uint8_t screenID, btnm1->user_data = this; lv_obj_set_event_cb(btnm1, event_handler); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); + + UpdateScreen(); } Tile::~Tile() { @@ -120,11 +116,12 @@ Tile::~Tile() { void Tile::UpdateScreen() { lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + batteryIcon.SetBatteryPercentage(batteryController.PercentRemaining()); } void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { - if(obj != btnm1) return; + if (obj != btnm1) + return; app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); running = false; diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 4869fef..4874714 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -9,6 +9,7 @@ #include "components/settings/Settings.h" #include "components/datetime/DateTimeController.h" #include "components/battery/BatteryController.h" +#include <displayapp/screens/BatteryIcon.h> namespace Pinetime { namespace Applications { @@ -40,13 +41,14 @@ namespace Pinetime { lv_task_t* taskUpdate; lv_obj_t* label_time; - lv_obj_t* batteryIcon; lv_point_t pageIndicatorBasePoints[2]; lv_point_t pageIndicatorPoints[2]; lv_obj_t* pageIndicatorBase; lv_obj_t* pageIndicator; lv_obj_t* btnm1; + BatteryIcon batteryIcon; + const char* btnmMap[8]; Pinetime::Applications::Apps apps[6]; }; diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index 3b41446..9ef620a 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -14,68 +14,57 @@ void Timer::CreateButtons() { btnMinutesUp = lv_btn_create(lv_scr_act(), nullptr); btnMinutesUp->user_data = this; lv_obj_set_event_cb(btnMinutesUp, btnEventHandler); - lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -80); - lv_obj_set_height(btnMinutesUp, 40); - lv_obj_set_width(btnMinutesUp, 60); + lv_obj_set_size(btnMinutesUp, 60, 40); + lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -85); txtMUp = lv_label_create(btnMinutesUp, nullptr); - lv_label_set_text(txtMUp, "+"); + lv_label_set_text_static(txtMUp, "+"); btnMinutesDown = lv_btn_create(lv_scr_act(), nullptr); btnMinutesDown->user_data = this; lv_obj_set_event_cb(btnMinutesDown, btnEventHandler); - lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, +40); - lv_obj_set_height(btnMinutesDown, 40); - lv_obj_set_width(btnMinutesDown, 60); + lv_obj_set_size(btnMinutesDown, 60, 40); + lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, 35); txtMDown = lv_label_create(btnMinutesDown, nullptr); - lv_label_set_text(txtMDown, "-"); + lv_label_set_text_static(txtMDown, "-"); btnSecondsUp = lv_btn_create(lv_scr_act(), nullptr); btnSecondsUp->user_data = this; lv_obj_set_event_cb(btnSecondsUp, btnEventHandler); - lv_obj_align(btnSecondsUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, -80); - lv_obj_set_height(btnSecondsUp, 40); - lv_obj_set_width(btnSecondsUp, 60); + lv_obj_set_size(btnSecondsUp, 60, 40); + lv_obj_align(btnSecondsUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, -85); txtSUp = lv_label_create(btnSecondsUp, nullptr); - lv_label_set_text(txtSUp, "+"); + lv_label_set_text_static(txtSUp, "+"); btnSecondsDown = lv_btn_create(lv_scr_act(), nullptr); btnSecondsDown->user_data = this; lv_obj_set_event_cb(btnSecondsDown, btnEventHandler); - lv_obj_align(btnSecondsDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, +40); - lv_obj_set_height(btnSecondsDown, 40); - lv_obj_set_width(btnSecondsDown, 60); + lv_obj_set_size(btnSecondsDown, 60, 40); + lv_obj_align(btnSecondsDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, 35); txtSDown = lv_label_create(btnSecondsDown, nullptr); - lv_label_set_text(txtSDown, "-"); + lv_label_set_text_static(txtSDown, "-"); } Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) : Screen(app), running {true}, timerController {timerController} { - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); uint32_t seconds = timerController.GetTimeRemaining() / 1000; lv_label_set_text_fmt(time, "%02lu:%02lu", seconds / 60, seconds % 60); - - lv_obj_align(time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -20); + lv_obj_align(time, lv_scr_act(), LV_ALIGN_CENTER, 0, -25); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; lv_obj_set_event_cb(btnPlayPause, btnEventHandler); - lv_obj_align(btnPlayPause, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, -10); - lv_obj_set_height(btnPlayPause, 40); + lv_obj_set_size(btnPlayPause, 120, 50); + lv_obj_align(btnPlayPause, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, 0); txtPlayPause = lv_label_create(btnPlayPause, nullptr); if (timerController.IsRunning()) { - lv_label_set_text(txtPlayPause, Symbols::pause); + lv_label_set_text_static(txtPlayPause, Symbols::pause); } else { - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtPlayPause, Symbols::play); CreateButtons(); } @@ -98,7 +87,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { if (event == LV_EVENT_CLICKED) { if (obj == btnPlayPause) { if (timerController.IsRunning()) { - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtPlayPause, Symbols::play); uint32_t seconds = timerController.GetTimeRemaining() / 1000; minutesToSet = seconds / 60; secondsToSet = seconds % 60; @@ -106,7 +95,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { CreateButtons(); } else if (secondsToSet + minutesToSet > 0) { - lv_label_set_text(txtPlayPause, Symbols::pause); + lv_label_set_text_static(txtPlayPause, Symbols::pause); timerController.StartTimer((secondsToSet + minutesToSet * 60) * 1000); lv_obj_del(btnSecondsDown); @@ -158,8 +147,8 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } void Timer::SetDone() { - lv_label_set_text(time, "00:00"); - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(time, "00:00"); + lv_label_set_text_static(txtPlayPause, Symbols::play); secondsToSet = 0; minutesToSet = 0; CreateButtons(); diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h index 93e84c8..c1f7f9e 100644 --- a/src/displayapp/screens/Timer.h +++ b/src/displayapp/screens/Timer.h @@ -24,7 +24,6 @@ namespace Pinetime::Applications::Screens { uint8_t secondsToSet = 0; uint8_t minutesToSet = 0; Controllers::TimerController& timerController; - lv_obj_t* backgroundLabel; lv_obj_t* time; lv_obj_t* msecTime; lv_obj_t* btnPlayPause; diff --git a/src/displayapp/screens/Twos.cpp b/src/displayapp/screens/Twos.cpp index ca9295d..7e465fc 100644 --- a/src/displayapp/screens/Twos.cpp +++ b/src/displayapp/screens/Twos.cpp @@ -85,12 +85,6 @@ Twos::Twos(Pinetime::Applications::DisplayApp* app) : Screen(app) { lv_obj_align(scoreText, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 10); lv_label_set_recolor(scoreText, true); lv_label_set_text_fmt(scoreText, "Score #FFFF00 %i#", score); - - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } Twos::~Twos() { diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 4cfc969..251a560 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -12,35 +12,33 @@ LV_IMG_DECLARE(bg_clock); using namespace Pinetime::Applications::Screens; namespace { -constexpr int16_t HourLength = 70; -constexpr int16_t MinuteLength = 90; -constexpr int16_t SecondLength = 110; + constexpr int16_t HourLength = 70; + constexpr int16_t MinuteLength = 90; + constexpr int16_t SecondLength = 110; -// sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor -const auto LV_TRIG_SCALE = _lv_trigo_sin(90); + // sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor + const auto LV_TRIG_SCALE = _lv_trigo_sin(90); -int16_t Cosine(int16_t angle) { - return _lv_trigo_sin(angle + 90); -} + int16_t Cosine(int16_t angle) { + return _lv_trigo_sin(angle + 90); + } -int16_t Sine(int16_t angle) { - return _lv_trigo_sin(angle); -} + int16_t Sine(int16_t angle) { + return _lv_trigo_sin(angle); + } -int16_t CoordinateXRelocate(int16_t x) { - return (x + LV_HOR_RES / 2); -} + int16_t CoordinateXRelocate(int16_t x) { + return (x + LV_HOR_RES / 2); + } -int16_t CoordinateYRelocate(int16_t y) { - return std::abs(y - LV_HOR_RES / 2); -} + int16_t CoordinateYRelocate(int16_t y) { + return std::abs(y - LV_HOR_RES / 2); + } -lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) { - return lv_point_t{ - .x = CoordinateXRelocate(radius * static_cast<int32_t>(Sine(angle)) / LV_TRIG_SCALE), - .y = CoordinateYRelocate(radius * static_cast<int32_t>(Cosine(angle)) / LV_TRIG_SCALE) - }; -} + lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) { + return lv_point_t {.x = CoordinateXRelocate(radius * static_cast<int32_t>(Sine(angle)) / LV_TRIG_SCALE), + .y = CoordinateYRelocate(radius * static_cast<int32_t>(Cosine(angle)) / LV_TRIG_SCALE)}; + } } @@ -66,10 +64,13 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_img_set_src(bg_clock_img, &bg_clock); lv_obj_align(bg_clock_img, NULL, LV_ALIGN_CENTER, 0, 0); - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, Symbols::batteryHalf); - lv_obj_align(batteryIcon, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0); - lv_obj_set_auto_realign(batteryIcon, true); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); + + plugIcon = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(plugIcon, Symbols::plug); + lv_obj_set_style_local_text_color(plugIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); + lv_obj_align(plugIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); notificationIcon = lv_label_create(lv_scr_act(), NULL); lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); @@ -79,7 +80,7 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, // Date - Day / Week day label_date_day = lv_label_create(lv_scr_act(), NULL); - lv_obj_set_style_local_text_color(label_date_day, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xf0a500)); + lv_obj_set_style_local_text_color(label_date_day, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_text_fmt(label_date_day, "%s\n%02i", dateTimeController.DayOfWeekShortToString(), dateTimeController.Day()); lv_label_set_align(label_date_day, LV_LABEL_ALIGN_CENTER); lv_obj_align(label_date_day, NULL, LV_ALIGN_CENTER, 50, 0); @@ -121,7 +122,8 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_obj_add_style(hour_body_trace, LV_LINE_PART_MAIN, &hour_line_style_trace); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); - UpdateClock(); + + Refresh(); } WatchFaceAnalog::~WatchFaceAnalog() { @@ -180,21 +182,18 @@ void WatchFaceAnalog::UpdateClock() { void WatchFaceAnalog::SetBatteryIcon() { auto batteryPercent = batteryPercentRemaining.Get(); - if (batteryPercent == 100) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); - } else { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - } - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + batteryIcon.SetBatteryPercentage(batteryPercent); } void WatchFaceAnalog::Refresh() { isCharging = batteryController.IsCharging(); if (isCharging.IsUpdated()) { if (isCharging.Get()) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); - lv_label_set_text_static(batteryIcon, Symbols::plug); + lv_obj_set_hidden(batteryIcon.GetObject(), true); + lv_obj_set_hidden(plugIcon, false); } else { + lv_obj_set_hidden(batteryIcon.GetObject(), false); + lv_obj_set_hidden(plugIcon, true); SetBatteryIcon(); } } diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index 4d76298..04d9e71 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -9,6 +9,7 @@ #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/ble/NotificationManager.h" +#include <displayapp/screens/BatteryIcon.h> namespace Pinetime { namespace Controllers { @@ -64,9 +65,11 @@ namespace Pinetime { lv_style_t second_line_style; lv_obj_t* label_date_day; - lv_obj_t* batteryIcon; + lv_obj_t* plugIcon; lv_obj_t* notificationIcon; + BatteryIcon batteryIcon; + const Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 34a73c3..fb88f60 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -33,14 +33,13 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, heartRateController {heartRateController}, motionController {motionController} { - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, Symbols::batteryFull); - lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); batteryPlug = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryPlug, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xFF0000)); lv_label_set_text_static(batteryPlug, Symbols::plug); - lv_obj_align(batteryPlug, batteryIcon, LV_ALIGN_OUT_LEFT_MID, -5, 0); + lv_obj_align(batteryPlug, batteryIcon.GetObject(), LV_ALIGN_OUT_LEFT_MID, -5, 0); bleIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x0082FC)); @@ -65,13 +64,6 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_text_static(label_time_ampm, ""); lv_obj_align(label_time_ampm, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -30, -55); - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(heartbeatIcon, Symbols::heartBeat); lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xCE1B1B)); @@ -110,19 +102,13 @@ void WatchFaceDigital::Refresh() { batteryPercentRemaining = batteryController.PercentRemaining(); if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); - if (batteryPercent == 100) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); - } else { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - } - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + batteryIcon.SetBatteryPercentage(batteryPercent); } bleState = bleController.IsConnected(); if (bleState.IsUpdated()) { lv_label_set_text_static(bleIcon, BleIcon::GetIcon(bleState.Get())); } - lv_obj_realign(batteryIcon); lv_obj_realign(batteryPlug); lv_obj_realign(bleIcon); @@ -173,11 +159,19 @@ void WatchFaceDigital::Refresh() { if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { - lv_label_set_text_fmt( - label_date, "%s %d %s %d", dateTimeController.DayOfWeekShortToString(), day, dateTimeController.MonthShortToString(), year); + lv_label_set_text_fmt(label_date, + "%s %d %s %d", + dateTimeController.DayOfWeekShortToString(), + day, + dateTimeController.MonthShortToString(), + year); } else { - lv_label_set_text_fmt( - label_date, "%s %s %d %d", dateTimeController.DayOfWeekShortToString(), dateTimeController.MonthShortToString(), day, year); + lv_label_set_text_fmt(label_date, + "%s %s %d %d", + dateTimeController.DayOfWeekShortToString(), + dateTimeController.MonthShortToString(), + day, + year); } lv_obj_realign(label_date); diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index 3b436c3..71602fc 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -1,5 +1,6 @@ #pragma once +#include <displayapp/screens/BatteryIcon.h> #include <lvgl/src/lv_core/lv_obj.h> #include <chrono> #include <cstdint> @@ -57,8 +58,6 @@ namespace Pinetime { lv_obj_t* label_time; lv_obj_t* label_time_ampm; lv_obj_t* label_date; - lv_obj_t* backgroundLabel; - lv_obj_t* batteryIcon; lv_obj_t* bleIcon; lv_obj_t* batteryPlug; lv_obj_t* heartbeatIcon; @@ -67,6 +66,8 @@ namespace Pinetime { lv_obj_t* stepValue; lv_obj_t* notificationIcon; + BatteryIcon batteryIcon; + Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index c82ef80..0343c0a 100644 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -19,7 +19,7 @@ * Style/layout copied from TimeStyle for Pebble by Dan Tilden (github.com/tilden) */ -#include "displayapp/screens/PineTimeStyle.h" +#include "displayapp/screens/WatchFacePineTimeStyle.h" #include <date/date.h> #include <lvgl/lvgl.h> #include <cstdio> @@ -39,25 +39,25 @@ using namespace Pinetime::Applications::Screens; namespace { void event_handler(lv_obj_t* obj, lv_event_t event) { - auto* screen = static_cast<PineTimeStyle*>(obj->user_data); + auto* screen = static_cast<WatchFacePineTimeStyle*>(obj->user_data); screen->UpdateSelected(obj, event); } bool IsBleIconVisible(bool isRadioEnabled, bool isConnected) { - if(!isRadioEnabled) { + if (!isRadioEnabled) { return true; } return isConnected; } } -PineTimeStyle::PineTimeStyle(DisplayApp* app, - Controllers::DateTime& dateTimeController, - Controllers::Battery& batteryController, - Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, - Controllers::Settings& settingsController, - Controllers::MotionController& motionController) +WatchFacePineTimeStyle::WatchFacePineTimeStyle(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController) : Screen(app), currentDateTime {{}}, dateTimeController {dateTimeController}, @@ -101,11 +101,14 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); // Display icons - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_label_set_text_static(batteryIcon, Symbols::batteryFull); - lv_obj_align(batteryIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); - lv_obj_set_auto_realign(batteryIcon, true); + batteryIcon.Create(sidebar); + batteryIcon.SetColor(LV_COLOR_BLACK); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_MID, 0, 2); + + plugIcon = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(plugIcon, Symbols::plug); + lv_obj_set_style_local_text_color(plugIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_align(plugIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); bleIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -195,13 +198,6 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - btnNextTime = lv_btn_create(lv_scr_act(), nullptr); btnNextTime->user_data = this; lv_obj_set_size(btnNextTime, 60, 60); @@ -300,12 +296,12 @@ PineTimeStyle::PineTimeStyle(DisplayApp* app, Refresh(); } -PineTimeStyle::~PineTimeStyle() { +WatchFacePineTimeStyle::~WatchFacePineTimeStyle() { lv_task_del(taskRefresh); lv_obj_clean(lv_scr_act()); } -bool PineTimeStyle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { +bool WatchFacePineTimeStyle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { if ((event == Pinetime::Applications::TouchEvents::LongTap) && lv_obj_get_hidden(btnRandom)) { lv_obj_set_hidden(btnSet, false); savedTick = lv_tick_get(); @@ -317,7 +313,7 @@ bool PineTimeStyle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { return false; } -void PineTimeStyle::CloseMenu() { +void WatchFacePineTimeStyle::CloseMenu() { settingsController.SaveSettings(); lv_obj_set_hidden(btnNextTime, true); lv_obj_set_hidden(btnPrevTime, true); @@ -330,7 +326,7 @@ void PineTimeStyle::CloseMenu() { lv_obj_set_hidden(btnClose, true); } -bool PineTimeStyle::OnButtonPushed() { +bool WatchFacePineTimeStyle::OnButtonPushed() { if (!lv_obj_get_hidden(btnClose)) { CloseMenu(); return true; @@ -338,13 +334,12 @@ bool PineTimeStyle::OnButtonPushed() { return false; } -void PineTimeStyle::SetBatteryIcon() { +void WatchFacePineTimeStyle::SetBatteryIcon() { auto batteryPercent = batteryPercentRemaining.Get(); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + batteryIcon.SetBatteryPercentage(batteryPercent); } - -void PineTimeStyle::AlignIcons() { +void WatchFacePineTimeStyle::AlignIcons() { if (notificationState.Get() && bleState.Get()) { lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 8, 25); lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, -8, 25); @@ -355,12 +350,15 @@ void PineTimeStyle::AlignIcons() { } } -void PineTimeStyle::Refresh() { +void WatchFacePineTimeStyle::Refresh() { isCharging = batteryController.IsCharging(); if (isCharging.IsUpdated()) { if (isCharging.Get()) { - lv_label_set_text_static(batteryIcon, Symbols::plug); + lv_obj_set_hidden(batteryIcon.GetObject(), true); + lv_obj_set_hidden(plugIcon, false); } else { + lv_obj_set_hidden(batteryIcon.GetObject(), false); + lv_obj_set_hidden(plugIcon, true); SetBatteryIcon(); } } @@ -373,7 +371,7 @@ void PineTimeStyle::Refresh() { bleState = bleController.IsConnected(); if (bleState.IsUpdated()) { - lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get())); + lv_label_set_text_static(bleIcon, BleIcon::GetIcon(bleState.Get())); AlignIcons(); } @@ -424,10 +422,10 @@ void PineTimeStyle::Refresh() { } if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - lv_label_set_text_fmt(dateDayOfWeek, "%s", dateTimeController.DayOfWeekShortToString()); + lv_label_set_text_static(dateDayOfWeek, dateTimeController.DayOfWeekShortToString()); lv_label_set_text_fmt(dateDay, "%d", day); lv_obj_realign(dateDay); - lv_label_set_text_fmt(dateMonth, "%s", dateTimeController.MonthShortToString()); + lv_label_set_text_static(dateMonth, dateTimeController.MonthShortToString()); currentYear = year; currentMonth = month; @@ -454,7 +452,7 @@ void PineTimeStyle::Refresh() { } } -void PineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { +void WatchFacePineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { auto valueTime = settingsController.GetPTSColorTime(); auto valueBar = settingsController.GetPTSColorBar(); auto valueBG = settingsController.GetPTSColorBG(); @@ -575,7 +573,7 @@ void PineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { } } -Pinetime::Controllers::Settings::Colors PineTimeStyle::GetNext(Pinetime::Controllers::Settings::Colors color) { +Pinetime::Controllers::Settings::Colors WatchFacePineTimeStyle::GetNext(Pinetime::Controllers::Settings::Colors color) { auto colorAsInt = static_cast<uint8_t>(color); Pinetime::Controllers::Settings::Colors nextColor; if (colorAsInt < 16) { @@ -586,7 +584,7 @@ Pinetime::Controllers::Settings::Colors PineTimeStyle::GetNext(Pinetime::Control return nextColor; } -Pinetime::Controllers::Settings::Colors PineTimeStyle::GetPrevious(Pinetime::Controllers::Settings::Colors color) { +Pinetime::Controllers::Settings::Colors WatchFacePineTimeStyle::GetPrevious(Pinetime::Controllers::Settings::Colors color) { auto colorAsInt = static_cast<uint8_t>(color); Pinetime::Controllers::Settings::Colors prevColor; diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/WatchFacePineTimeStyle.h index 9e52844..217b92b 100644 --- a/src/displayapp/screens/PineTimeStyle.h +++ b/src/displayapp/screens/WatchFacePineTimeStyle.h @@ -8,6 +8,7 @@ #include "displayapp/Colors.h" #include "components/datetime/DateTimeController.h" #include "components/ble/BleController.h" +#include <displayapp/screens/BatteryIcon.h> namespace Pinetime { namespace Controllers { @@ -21,23 +22,23 @@ namespace Pinetime { namespace Applications { namespace Screens { - class PineTimeStyle : public Screen { + class WatchFacePineTimeStyle : public Screen { public: - PineTimeStyle(DisplayApp* app, - Controllers::DateTime& dateTimeController, - Controllers::Battery& batteryController, - Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, - Controllers::Settings& settingsController, - Controllers::MotionController& motionController); - ~PineTimeStyle() override; + WatchFacePineTimeStyle(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController); + ~WatchFacePineTimeStyle() override; bool OnTouchEvent(TouchEvents event) override; bool OnButtonPushed() override; void Refresh() override; - void UpdateSelected(lv_obj_t *object, lv_event_t event); + void UpdateSelected(lv_obj_t* object, lv_event_t event); private: uint8_t displayedHour = -1; @@ -77,8 +78,7 @@ namespace Pinetime { lv_obj_t* dateDayOfWeek; lv_obj_t* dateDay; lv_obj_t* dateMonth; - lv_obj_t* backgroundLabel; - lv_obj_t* batteryIcon; + lv_obj_t* plugIcon; lv_obj_t* bleIcon; lv_obj_t* calendarOuter; lv_obj_t* calendarInner; @@ -92,6 +92,8 @@ namespace Pinetime { lv_obj_t* lbl_btnSet; lv_color_t needle_colors[1]; + BatteryIcon batteryIcon; + Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; diff --git a/src/displayapp/screens/WatchFaceTerminal.cpp b/src/displayapp/screens/WatchFaceTerminal.cpp index 57395b7..63ea2e7 100644 --- a/src/displayapp/screens/WatchFaceTerminal.cpp +++ b/src/displayapp/screens/WatchFaceTerminal.cpp @@ -31,13 +31,6 @@ WatchFaceTerminal::WatchFaceTerminal(DisplayApp* app, heartRateController {heartRateController}, motionController {motionController} { - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - uint16_t y = -100; for (auto& line : lines) { line = lv_label_create(lv_scr_act(), nullptr); @@ -76,7 +69,7 @@ void WatchFaceTerminal::Refresh() { bleState = bleController.IsConnected(); bleRadioEnabled = bleController.IsRadioEnabled(); if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { - if(!bleRadioEnabled.Get()) { + if (!bleRadioEnabled.Get()) { lv_label_set_text_static(connectState, "[STAT]#0082fc Disabled#"); } else { if (bleState.Get()) { diff --git a/src/displayapp/screens/WatchFaceTerminal.h b/src/displayapp/screens/WatchFaceTerminal.h index d01e50f..056b51e 100644 --- a/src/displayapp/screens/WatchFaceTerminal.h +++ b/src/displayapp/screens/WatchFaceTerminal.h @@ -70,7 +70,6 @@ namespace Pinetime { }; lv_obj_t *lines[9]; // This should match exactly the number of labels in the struct above! }; - lv_obj_t* backgroundLabel; Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 388525b..708d510 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -6,12 +6,12 @@ using namespace Pinetime::Applications::Screens; namespace { - static void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { + void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast<QuickSettings*>(obj->user_data); screen->OnButtonEvent(obj, event); } - static void lv_update_task(struct _lv_task_t* task) { + void lv_update_task(struct _lv_task_t* task) { auto* user_data = static_cast<QuickSettings*>(task->user_data); user_data->UpdateScreen(); } @@ -35,23 +35,21 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, // Time label_time = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER); lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); - lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); static constexpr uint8_t barHeight = 20 + innerDistance; static constexpr uint8_t buttonHeight = (LV_VER_RES_MAX - barHeight - innerDistance) / 2; static constexpr uint8_t buttonWidth = (LV_HOR_RES_MAX - innerDistance) / 2; // wide buttons - //static constexpr uint8_t buttonWidth = buttonHeight; // square buttons + // static constexpr uint8_t buttonWidth = buttonHeight; // square buttons static constexpr uint8_t buttonXOffset = (LV_HOR_RES_MAX - buttonWidth * 2 - innerDistance) / 2; lv_style_init(&btn_style); lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, buttonHeight / 4); - lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x38, 0x38, 0x38)); btn1 = lv_btn_create(lv_scr_act(), nullptr); btn1->user_data = this; @@ -69,7 +67,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_set_event_cb(btn2, ButtonEventHandler); lv_obj_add_style(btn2, LV_BTN_PART_MAIN, &btn_style); lv_obj_set_size(btn2, buttonWidth, buttonHeight); - lv_obj_align(btn2, nullptr, LV_ALIGN_IN_TOP_RIGHT, - buttonXOffset, barHeight); + lv_obj_align(btn2, nullptr, LV_ALIGN_IN_TOP_RIGHT, -buttonXOffset, barHeight); lv_obj_t* lbl_btn; lbl_btn = lv_label_create(btn2, nullptr); @@ -81,7 +79,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_set_event_cb(btn3, ButtonEventHandler); lv_btn_set_checkable(btn3, true); lv_obj_add_style(btn3, LV_BTN_PART_MAIN, &btn_style); - lv_obj_set_style_local_bg_color(btn3, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(btn3, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_obj_set_size(btn3, buttonWidth, buttonHeight); lv_obj_align(btn3, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, buttonXOffset, 0); @@ -100,19 +98,15 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_set_event_cb(btn4, ButtonEventHandler); lv_obj_add_style(btn4, LV_BTN_PART_MAIN, &btn_style); lv_obj_set_size(btn4, buttonWidth, buttonHeight); - lv_obj_align(btn4, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, - buttonXOffset, 0); + lv_obj_align(btn4, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -buttonXOffset, 0); lbl_btn = lv_label_create(btn4, nullptr); lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); lv_label_set_text_static(lbl_btn, Symbols::settings); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); + + UpdateScreen(); } QuickSettings::~QuickSettings() { @@ -124,7 +118,7 @@ QuickSettings::~QuickSettings() { void QuickSettings::UpdateScreen() { lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); - lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + batteryIcon.SetBatteryPercentage(batteryController.PercentRemaining()); } void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index 7913898..40a2a2e 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -8,6 +8,7 @@ #include "components/motor/MotorController.h" #include "components/settings/Settings.h" #include "components/battery/BatteryController.h" +#include <displayapp/screens/BatteryIcon.h> namespace Pinetime { @@ -37,7 +38,6 @@ namespace Pinetime { Controllers::Settings& settingsController; lv_task_t* taskUpdate; - lv_obj_t* batteryIcon; lv_obj_t* label_time; lv_style_t btn_style; @@ -48,6 +48,8 @@ namespace Pinetime { lv_obj_t* btn3; lv_obj_t* btn3_lvl; lv_obj_t* btn4; + + BatteryIcon batteryIcon; }; } } diff --git a/src/displayapp/screens/settings/SettingBluetooth.cpp b/src/displayapp/screens/settings/SettingBluetooth.cpp index ed7fbee..09556c4 100644 --- a/src/displayapp/screens/settings/SettingBluetooth.cpp +++ b/src/displayapp/screens/settings/SettingBluetooth.cpp @@ -9,12 +9,12 @@ using namespace Pinetime::Applications::Screens; namespace { - static void OnBluetoothDisabledEvent(lv_obj_t* obj, lv_event_t event) { + void OnBluetoothDisabledEvent(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast<SettingBluetooth*>(obj->user_data); screen->OnBluetoothDisabled(obj, event); } - static void OnBluetoothEnabledEvent(lv_obj_t* obj, lv_event_t event) { + void OnBluetoothEnabledEvent(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast<SettingBluetooth*>(obj->user_data); screen->OnBluetoothEnabled(obj, event); } @@ -108,4 +108,3 @@ void SettingBluetooth::OnBluetoothPasskeyEnableToggle(lv_obj_t* object, lv_event lv_checkbox_set_checked(cbPasskey, enabled); } } - diff --git a/src/displayapp/screens/settings/SettingChimes.cpp b/src/displayapp/screens/settings/SettingChimes.cpp index ae89a49..d07b0d4 100644 --- a/src/displayapp/screens/settings/SettingChimes.cpp +++ b/src/displayapp/screens/settings/SettingChimes.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingChimes* screen = static_cast<SettingChimes*>(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<SettingChimes*>(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp index 9e972af..bf2087a 100644 --- a/src/displayapp/screens/settings/SettingDisplay.cpp +++ b/src/displayapp/screens/settings/SettingDisplay.cpp @@ -9,8 +9,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingDisplay* screen = static_cast<SettingDisplay*>(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<SettingDisplay*>(obj->user_data); screen->UpdateSelected(obj, event); } } @@ -46,7 +46,7 @@ SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime char buffer[12]; for (unsigned int i = 0; i < options.size(); i++) { cbOption[i] = lv_checkbox_create(container1, nullptr); - sprintf(buffer, "%3d seconds", options[i] / 1000); + sprintf(buffer, "%3d seconds", options[i] / 1000); lv_checkbox_set_text(cbOption[i], buffer); cbOption[i]->user_data = this; lv_obj_set_event_cb(cbOption[i], event_handler); diff --git a/src/displayapp/screens/settings/SettingSetDate.cpp b/src/displayapp/screens/settings/SettingSetDate.cpp index 8bfded3..7acf0c1 100644 --- a/src/displayapp/screens/settings/SettingSetDate.cpp +++ b/src/displayapp/screens/settings/SettingSetDate.cpp @@ -15,23 +15,22 @@ namespace { constexpr int16_t POS_Y_TEXT = -6; constexpr int16_t POS_Y_MINUS = 40; - void event_handler(lv_obj_t * obj, lv_event_t event) { - auto* screen = static_cast<SettingSetDate *>(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<SettingSetDate*>(obj->user_data); screen->HandleButtonPress(obj, event); } } -SettingSetDate::SettingSetDate(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::DateTime &dateTimeController) : - Screen(app), - dateTimeController {dateTimeController} { - lv_obj_t * title = lv_label_create(lv_scr_act(), nullptr); +SettingSetDate::SettingSetDate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::DateTime& dateTimeController) + : Screen(app), dateTimeController {dateTimeController} { + lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(title, "Set current date"); lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); - lv_obj_t * icon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - + lv_label_set_text_static(icon, Symbols::clock); lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); @@ -113,7 +112,7 @@ SettingSetDate::~SettingSetDate() { lv_obj_clean(lv_scr_act()); } -void SettingSetDate::HandleButtonPress(lv_obj_t *object, lv_event_t event) { +void SettingSetDate::HandleButtonPress(lv_obj_t* object, lv_event_t event) { if (event != LV_EVENT_CLICKED) return; @@ -194,5 +193,6 @@ void SettingSetDate::CheckDay() { void SettingSetDate::UpdateMonthLabel() { lv_label_set_text_static( - lblMonth, Pinetime::Controllers::DateTime::MonthShortToStringLow(static_cast<Pinetime::Controllers::DateTime::Months>(monthValue))); + lblMonth, + Pinetime::Controllers::DateTime::MonthShortToStringLow(static_cast<Pinetime::Controllers::DateTime::Months>(monthValue))); } diff --git a/src/displayapp/screens/settings/SettingSetDate.h b/src/displayapp/screens/settings/SettingSetDate.h index 477337f..a179594 100644 --- a/src/displayapp/screens/settings/SettingSetDate.h +++ b/src/displayapp/screens/settings/SettingSetDate.h @@ -8,33 +8,33 @@ namespace Pinetime { namespace Applications { namespace Screens { - class SettingSetDate : public Screen{ - public: - SettingSetDate(DisplayApp* app, Pinetime::Controllers::DateTime &dateTimeController); - ~SettingSetDate() override; + class SettingSetDate : public Screen { + public: + SettingSetDate(DisplayApp* app, Pinetime::Controllers::DateTime& dateTimeController); + ~SettingSetDate() override; - void HandleButtonPress(lv_obj_t *object, lv_event_t event); - - private: - Controllers::DateTime& dateTimeController; + void HandleButtonPress(lv_obj_t* object, lv_event_t event); - int dayValue; - int monthValue; - int yearValue; - lv_obj_t * lblDay; - lv_obj_t * lblMonth; - lv_obj_t * lblYear; - lv_obj_t * btnDayPlus; - lv_obj_t * btnDayMinus; - lv_obj_t * btnMonthPlus; - lv_obj_t * btnMonthMinus; - lv_obj_t * btnYearPlus; - lv_obj_t * btnYearMinus; - lv_obj_t * btnSetTime; + private: + Controllers::DateTime& dateTimeController; - int MaximumDayOfMonth() const; - void CheckDay(); - void UpdateMonthLabel(); + int dayValue; + int monthValue; + int yearValue; + lv_obj_t* lblDay; + lv_obj_t* lblMonth; + lv_obj_t* lblYear; + lv_obj_t* btnDayPlus; + lv_obj_t* btnDayMinus; + lv_obj_t* btnMonthPlus; + lv_obj_t* btnMonthMinus; + lv_obj_t* btnYearPlus; + lv_obj_t* btnYearMinus; + lv_obj_t* btnSetTime; + + int MaximumDayOfMonth() const; + void CheckDay(); + void UpdateMonthLabel(); }; } } diff --git a/src/displayapp/screens/settings/SettingShakeThreshold.cpp b/src/displayapp/screens/settings/SettingShakeThreshold.cpp index c354bdc..aac1eaf 100644 --- a/src/displayapp/screens/settings/SettingShakeThreshold.cpp +++ b/src/displayapp/screens/settings/SettingShakeThreshold.cpp @@ -64,9 +64,9 @@ SettingShakeThreshold::SettingShakeThreshold(DisplayApp* app, vDecay = xTaskGetTickCount(); calibrating = false; EnableForCal = false; - if(!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake)){ + if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake)) { EnableForCal = true; - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake,true); + settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake, true); } refreshTask = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } @@ -74,8 +74,8 @@ SettingShakeThreshold::SettingShakeThreshold(DisplayApp* app, SettingShakeThreshold::~SettingShakeThreshold() { settingsController.SetShakeThreshold(lv_arc_get_value(positionArc)); - if(EnableForCal){ - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake,false); + if (EnableForCal) { + settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake, false); EnableForCal = false; } lv_task_del(refreshTask); @@ -123,8 +123,8 @@ void SettingShakeThreshold::UpdateSelected(lv_obj_t* object, lv_event_t event) { vCalTime = xTaskGetTickCount(); lv_label_set_text_static(calLabel, "Ready!"); lv_obj_set_click(positionArc, false); - lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); - lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); + lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); } else if (lv_btn_get_state(calButton) == LV_BTN_STATE_RELEASED) { calibrating = 0; lv_obj_set_click(positionArc, true); diff --git a/src/displayapp/screens/settings/SettingShakeThreshold.h b/src/displayapp/screens/settings/SettingShakeThreshold.h index 37f4a65..4331946 100644 --- a/src/displayapp/screens/settings/SettingShakeThreshold.h +++ b/src/displayapp/screens/settings/SettingShakeThreshold.h @@ -28,8 +28,8 @@ namespace Pinetime { System::SystemTask& systemTask; uint8_t calibrating; bool EnableForCal; - uint32_t vDecay,vCalTime; - lv_obj_t *positionArc, *animArc,*calButton, *calLabel; + uint32_t vDecay, vCalTime; + lv_obj_t *positionArc, *animArc, *calButton, *calLabel; lv_task_t* refreshTask; }; } diff --git a/src/displayapp/screens/settings/SettingSteps.cpp b/src/displayapp/screens/settings/SettingSteps.cpp index 5ca3eec..e92600c 100644 --- a/src/displayapp/screens/settings/SettingSteps.cpp +++ b/src/displayapp/screens/settings/SettingSteps.cpp @@ -12,15 +12,12 @@ namespace { } } -SettingSteps::SettingSteps( - Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : - Screen(app), - settingsController{settingsController} -{ +SettingSteps::SettingSteps(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : Screen(app), settingsController {settingsController} { - lv_obj_t * container1 = lv_cont_create(lv_scr_act(), nullptr); + lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); - //lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + // lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); @@ -31,13 +28,13 @@ SettingSteps::SettingSteps( lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(title,"Daily steps goal"); + lv_label_set_text_static(title, "Daily steps goal"); lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - + lv_label_set_text_static(icon, Symbols::shoe); lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); @@ -61,7 +58,6 @@ SettingSteps::SettingSteps( lv_obj_set_event_cb(btnMinus, event_handler); lv_obj_align(btnMinus, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); lv_obj_set_style_local_value_str(btnMinus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "-"); - } SettingSteps::~SettingSteps() { @@ -69,24 +65,23 @@ SettingSteps::~SettingSteps() { settingsController.SaveSettings(); } -void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { +void SettingSteps::UpdateSelected(lv_obj_t* object, lv_event_t event) { uint32_t value = settingsController.GetStepsGoal(); - if(object == btnPlus && (event == LV_EVENT_PRESSED)) { + if (object == btnPlus && (event == LV_EVENT_PRESSED)) { value += 1000; - if ( value <= 500000 ) { + if (value <= 500000) { settingsController.SetStepsGoal(value); lv_label_set_text_fmt(stepValue, "%lu", settingsController.GetStepsGoal()); lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); } } - if(object == btnMinus && (event == LV_EVENT_PRESSED)) { + if (object == btnMinus && (event == LV_EVENT_PRESSED)) { value -= 1000; - if ( value >= 1000 ) { + if (value >= 1000) { settingsController.SetStepsGoal(value); lv_label_set_text_fmt(stepValue, "%lu", settingsController.GetStepsGoal()); lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); } } - } diff --git a/src/displayapp/screens/settings/SettingTimeFormat.cpp b/src/displayapp/screens/settings/SettingTimeFormat.cpp index bd9af15..5502794 100644 --- a/src/displayapp/screens/settings/SettingTimeFormat.cpp +++ b/src/displayapp/screens/settings/SettingTimeFormat.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingTimeFormat* screen = static_cast<SettingTimeFormat*>(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<SettingTimeFormat*>(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/SettingWakeUp.cpp b/src/displayapp/screens/settings/SettingWakeUp.cpp index e1b6e36..4a4b60f 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.cpp +++ b/src/displayapp/screens/settings/SettingWakeUp.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingWakeUp* screen = static_cast<SettingWakeUp*>(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<SettingWakeUp*>(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 9e2748c..e6f940a 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingWatchFace* screen = static_cast<SettingWatchFace*>(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast<SettingWatchFace*>(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index bc7efcc..a91b8f7 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -13,18 +13,19 @@ Settings::Settings(Pinetime::Applications::DisplayApp* app, Pinetime::Controller settingsController {settingsController}, screens {app, settingsController.GetSettingsMenu(), - {[this]() -> std::unique_ptr<Screen> { - return CreateScreen1(); - }, - [this]() -> std::unique_ptr<Screen> { - return CreateScreen2(); - }, - [this]() -> std::unique_ptr<Screen> { - return CreateScreen3(); - }, - [this]() -> std::unique_ptr<Screen> { - return CreateScreen4(); - }, + { + [this]() -> std::unique_ptr<Screen> { + return CreateScreen1(); + }, + [this]() -> std::unique_ptr<Screen> { + return CreateScreen2(); + }, + [this]() -> std::unique_ptr<Screen> { + return CreateScreen3(); + }, + [this]() -> std::unique_ptr<Screen> { + return CreateScreen4(); + }, }, Screens::ScreenListModes::UpDown} { } @@ -53,7 +54,8 @@ std::unique_ptr<Screen> Settings::CreateScreen2() { {Symbols::shoe, "Steps", Apps::SettingSteps}, {Symbols::clock, "Set date", Apps::SettingSetDate}, {Symbols::clock, "Set time", Apps::SettingSetTime}, - {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}}}; + {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, + }}; return std::make_unique<Screens::List>(1, 4, app, settingsController, applications); } @@ -64,7 +66,7 @@ std::unique_ptr<Screen> Settings::CreateScreen3() { {Symbols::clock, "Chimes", Apps::SettingChimes}, {Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, - {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth} + {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, }}; return std::make_unique<Screens::List>(2, 4, app, settingsController, applications); @@ -76,7 +78,7 @@ std::unique_ptr<Screen> Settings::CreateScreen4() { {Symbols::list, "About", Apps::SysInfo}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, - {Symbols::none, "None", Apps::None} + {Symbols::none, "None", Apps::None}, }}; return std::make_unique<Screens::List>(3, 4, app, settingsController, applications); diff --git a/src/drivers/Bma421.cpp b/src/drivers/Bma421.cpp index 2f60f42..539cc8d 100644 --- a/src/drivers/Bma421.cpp +++ b/src/drivers/Bma421.cpp @@ -42,10 +42,16 @@ void Bma421::Init() { if (ret != BMA4_OK) return; - switch(bma.chip_id) { - case BMA423_CHIP_ID: deviceType = DeviceTypes::BMA421; break; - case BMA425_CHIP_ID: deviceType = DeviceTypes::BMA425; break; - default: deviceType = DeviceTypes::Unknown; break; + switch (bma.chip_id) { + case BMA423_CHIP_ID: + deviceType = DeviceTypes::BMA421; + break; + case BMA425_CHIP_ID: + deviceType = DeviceTypes::BMA425; + break; + default: + deviceType = DeviceTypes::Unknown; + break; } ret = bma423_write_config_file(&bma); diff --git a/src/drivers/Bma421.h b/src/drivers/Bma421.h index 2e40883..fef4dc0 100644 --- a/src/drivers/Bma421.h +++ b/src/drivers/Bma421.h @@ -10,11 +10,7 @@ namespace Pinetime { class TwiMaster; class Bma421 { public: - enum class DeviceTypes : uint8_t { - Unknown, - BMA421, - BMA425 - }; + enum class DeviceTypes : uint8_t { Unknown, BMA421, BMA425 }; struct Values { uint32_t steps; int16_t x; diff --git a/src/drivers/Bma421_C/bma4.c b/src/drivers/Bma421_C/bma4.c index 59e2a72..8472147 100644 --- a/src/drivers/Bma421_C/bma4.c +++ b/src/drivers/Bma421_C/bma4.c @@ -621,7 +621,7 @@ static int8_t get_average_of_sensor_data(uint8_t accel_en, * * @param[in] accel_en : Variable to store status of accel * @param[in] accel_g_axis : Accel axis to FOC - * @param[in] avg_foc_data : Average value of sensor sample datas + * @param[in] avg_foc_data : Average value of sensor sample data * @param[in] dev : Structure instance of bma4_dev. * * @return Result of API execution status @@ -637,7 +637,7 @@ static int8_t validate_foc_position(uint8_t accel_en, /*! * @brief This internal API validates accel FOC axis given as input * - * @param[in] avg_foc_data : Average value of sensor sample datas + * @param[in] avg_foc_data : Average value of sensor sample data * @param[in] dev : Structure instance of bma4_dev. * * @return Result of API execution status diff --git a/src/drivers/Bma421_C/bma4_defs.h b/src/drivers/Bma421_C/bma4_defs.h index 2db99c0..45e4920 100644 --- a/src/drivers/Bma421_C/bma4_defs.h +++ b/src/drivers/Bma421_C/bma4_defs.h @@ -259,7 +259,7 @@ #define BMA4_ACCEL_RANGE_8G UINT8_C(2) #define BMA4_ACCEL_RANGE_16G UINT8_C(3) -/**\name CONDITION CHECK FOR READING AND WRTING DATA*/ +/**\name CONDITION CHECK FOR READING AND WRITING DATA*/ #define BMA4_MAX_VALUE_FIFO_FILTER UINT8_C(1) #define BMA4_MAX_VALUE_SPI3 UINT8_C(1) #define BMA4_MAX_VALUE_SELFTEST_AMP UINT8_C(1) diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index e9573df..cf10c89 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -80,14 +80,9 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { Gestures gesture = static_cast<Gestures>(touchData[gestureIndex]); // Validity check - if(x >= maxX || y >= maxY || - (gesture != Gestures::None && - gesture != Gestures::SlideDown && - gesture != Gestures::SlideUp && - gesture != Gestures::SlideLeft && - gesture != Gestures::SlideRight && - gesture != Gestures::SingleTap && - gesture != Gestures::DoubleTap && + if (x >= maxX || y >= maxY || + (gesture != Gestures::None && gesture != Gestures::SlideDown && gesture != Gestures::SlideUp && gesture != Gestures::SlideLeft && + gesture != Gestures::SlideRight && gesture != Gestures::SingleTap && gesture != Gestures::DoubleTap && gesture != Gestures::LongPress)) { info.isValid = false; return info; diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index 4a548d4..9d426c9 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -44,21 +44,22 @@ namespace Pinetime { uint8_t GetFwVersion() const { return fwVersion; } + private: bool CheckDeviceIds(); // Unused/Unavailable commented out static constexpr uint8_t gestureIndex = 1; static constexpr uint8_t touchPointNumIndex = 2; - //static constexpr uint8_t touchEventIndex = 3; + // static constexpr uint8_t touchEventIndex = 3; static constexpr uint8_t touchXHighIndex = 3; static constexpr uint8_t touchXLowIndex = 4; - //static constexpr uint8_t touchIdIndex = 5; + // static constexpr uint8_t touchIdIndex = 5; static constexpr uint8_t touchYHighIndex = 5; static constexpr uint8_t touchYLowIndex = 6; - //static constexpr uint8_t touchStep = 6; - //static constexpr uint8_t touchXYIndex = 7; - //static constexpr uint8_t touchMiscIndex = 8; + // static constexpr uint8_t touchStep = 6; + // static constexpr uint8_t touchXYIndex = 7; + // static constexpr uint8_t touchMiscIndex = 8; static constexpr uint8_t maxX = 240; static constexpr uint8_t maxY = 240; diff --git a/src/drivers/DebugPins.cpp b/src/drivers/DebugPins.cpp index 9209128..4b2f0f1 100644 --- a/src/drivers/DebugPins.cpp +++ b/src/drivers/DebugPins.cpp @@ -19,16 +19,16 @@ void debugpins_init() { nrf_gpio_pin_clear(DebugPin4); } void debugpins_set(debugpins_pins pin) { - nrf_gpio_pin_set((uint32_t) (pin)); + nrf_gpio_pin_set(static_cast<uint32_t>(pin)); } void debugpins_clear(debugpins_pins pin) { - nrf_gpio_pin_clear((uint32_t) (pin)); + nrf_gpio_pin_clear(static_cast<uint32_t>(pin)); } void debugpins_pulse(debugpins_pins pin) { - nrf_gpio_pin_set((uint32_t) (pin)); - nrf_gpio_pin_clear((uint32_t) (pin)); + nrf_gpio_pin_set(static_cast<uint32_t>(pin)); + nrf_gpio_pin_clear(static_cast<uint32_t>(pin)); } #else void debugpins_init() { @@ -42,4 +42,4 @@ void debugpins_clear(debugpins_pins pin) { void debugpins_pulse(debugpins_pins pin) { } -#endif
\ No newline at end of file +#endif diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h index 579bf38..833c647 100644 --- a/src/drivers/PinMap.h +++ b/src/drivers/PinMap.h @@ -3,21 +3,23 @@ namespace Pinetime { namespace PinMap { - - #ifdef WATCH_P8 - // COLMI P8 - static constexpr uint8_t Charging = 19; - static constexpr uint8_t Cst816sReset = 13; - static constexpr uint8_t Button = 17; - #else - // Pinetime - static constexpr uint8_t Charging = 12; - static constexpr uint8_t Cst816sReset = 10; - static constexpr uint8_t Button = 13; - #endif +#ifdef WATCH_P8 + // COLMI P8 + static constexpr uint8_t Charging = 19; + static constexpr uint8_t Cst816sReset = 13; + static constexpr uint8_t Button = 17; +#else + // Pinetime + static constexpr uint8_t Charging = 12; + static constexpr uint8_t Cst816sReset = 10; + static constexpr uint8_t Button = 13; +#endif + + static constexpr uint8_t ButtonEnable = 15; static constexpr uint8_t Cst816sIrq = 28; static constexpr uint8_t PowerPresent = 19; + static constexpr uint8_t Bma421Irq = 8; static constexpr uint8_t Motor = 16; diff --git a/src/drivers/SpiMaster.cpp b/src/drivers/SpiMaster.cpp index 747dbc8..38f72fe 100644 --- a/src/drivers/SpiMaster.cpp +++ b/src/drivers/SpiMaster.cpp @@ -10,7 +10,7 @@ SpiMaster::SpiMaster(const SpiMaster::SpiModule spi, const SpiMaster::Parameters } bool SpiMaster::Init() { - if(mutex == nullptr) { + if (mutex == nullptr) { mutex = xSemaphoreCreateBinary(); ASSERT(mutex != nullptr); } diff --git a/src/drivers/SpiNorFlash.cpp b/src/drivers/SpiNorFlash.cpp index ebe3174..28f82fe 100644 --- a/src/drivers/SpiNorFlash.cpp +++ b/src/drivers/SpiNorFlash.cpp @@ -11,8 +11,10 @@ SpiNorFlash::SpiNorFlash(Spi& spi) : spi {spi} { void SpiNorFlash::Init() { device_id = ReadIdentificaion(); - NRF_LOG_INFO( - "[SpiNorFlash] Manufacturer : %d, Memory type : %d, memory density : %d", device_id.manufacturer, device_id.type, device_id.density); + NRF_LOG_INFO("[SpiNorFlash] Manufacturer : %d, Memory type : %d, memory density : %d", + device_id.manufacturer, + device_id.type, + device_id.density); } void SpiNorFlash::Uninit() { @@ -70,7 +72,10 @@ uint8_t SpiNorFlash::ReadConfigurationRegister() { void SpiNorFlash::Read(uint32_t address, uint8_t* buffer, size_t size) { static constexpr uint8_t cmdSize = 4; - uint8_t cmd[cmdSize] = {static_cast<uint8_t>(Commands::Read), (uint8_t) (address >> 16U), (uint8_t) (address >> 8U), (uint8_t) address}; + uint8_t cmd[cmdSize] = {static_cast<uint8_t>(Commands::Read), + static_cast<uint8_t>(address >> 16U), + static_cast<uint8_t>(address >> 8U), + static_cast<uint8_t>(address)}; spi.Read(reinterpret_cast<uint8_t*>(&cmd), cmdSize, buffer, size); } @@ -82,9 +87,9 @@ void SpiNorFlash::WriteEnable() { void SpiNorFlash::SectorErase(uint32_t sectorAddress) { static constexpr uint8_t cmdSize = 4; uint8_t cmd[cmdSize] = {static_cast<uint8_t>(Commands::SectorErase), - (uint8_t) (sectorAddress >> 16U), - (uint8_t) (sectorAddress >> 8U), - (uint8_t) sectorAddress}; + static_cast<uint8_t>(sectorAddress >> 16U), + static_cast<uint8_t>(sectorAddress >> 8U), + static_cast<uint8_t>(sectorAddress)}; WriteEnable(); while (!WriteEnabled()) @@ -121,7 +126,10 @@ void SpiNorFlash::Write(uint32_t address, const uint8_t* buffer, size_t size) { uint32_t pageLimit = (addr & ~(pageSize - 1u)) + pageSize; uint32_t toWrite = pageLimit - addr > len ? len : pageLimit - addr; - uint8_t cmd[cmdSize] = {static_cast<uint8_t>(Commands::PageProgram), (uint8_t) (addr >> 16U), (uint8_t) (addr >> 8U), (uint8_t) addr}; + uint8_t cmd[cmdSize] = {static_cast<uint8_t>(Commands::PageProgram), + static_cast<uint8_t>(addr >> 16U), + static_cast<uint8_t>(addr >> 8U), + static_cast<uint8_t>(addr)}; WriteEnable(); while (!WriteEnabled()) diff --git a/src/drivers/SpiNorFlash.h b/src/drivers/SpiNorFlash.h index ed6ab31..ad4d090 100644 --- a/src/drivers/SpiNorFlash.h +++ b/src/drivers/SpiNorFlash.h @@ -13,11 +13,11 @@ namespace Pinetime { SpiNorFlash(SpiNorFlash&&) = delete; SpiNorFlash& operator=(SpiNorFlash&&) = delete; - typedef struct __attribute__((packed)) { + struct __attribute__((packed)) Identification { uint8_t manufacturer = 0; uint8_t type = 0; uint8_t density = 0; - } Identification; + }; Identification ReadIdentificaion(); uint8_t ReadStatusRegister(); diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index fd1366f..3ed1beb 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -23,6 +23,7 @@ void St7789::Init() { RowAddressSet(); DisplayInversionOn(); NormalModeOn(); + SetVdv(); DisplayOn(); } @@ -114,6 +115,13 @@ void St7789::WriteToRam() { WriteCommand(static_cast<uint8_t>(Commands::WriteToRam)); } +void St7789::SetVdv() { + // By default there is a large step from pixel brightness zero to one. + // After experimenting with VCOMS, VRH and VDV, this was found to produce good results. + WriteCommand(static_cast<uint8_t>(Commands::VdvSet)); + WriteData(0x10); +} + void St7789::DisplayOff() { WriteCommand(static_cast<uint8_t>(Commands::DisplayOff)); nrf_delay_ms(500); diff --git a/src/drivers/St7789.h b/src/drivers/St7789.h index 4fbccbe..8c2ac09 100644 --- a/src/drivers/St7789.h +++ b/src/drivers/St7789.h @@ -22,9 +22,6 @@ namespace Pinetime { void DrawBuffer(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t* data, size_t size); - void DisplayOn(); - void DisplayOff(); - void Sleep(); void Wakeup(); @@ -42,7 +39,11 @@ namespace Pinetime { void DisplayInversionOn(); void NormalModeOn(); void WriteToRam(); + void DisplayOn(); + void DisplayOff(); + void SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); + void SetVdv(); void WriteCommand(uint8_t cmd); void WriteSpi(const uint8_t* data, size_t size); @@ -61,6 +62,7 @@ namespace Pinetime { VerticalScrollDefinition = 0x33, VerticalScrollStartAddress = 0x37, ColMod = 0x3a, + VdvSet = 0xc4, }; void WriteData(uint8_t data); void ColumnAddressSet(); diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 9b456d5..25d23c2 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -13,19 +13,13 @@ TwiMaster::TwiMaster(NRF_TWIM_Type* module, uint32_t frequency, uint8_t pinSda, } void TwiMaster::ConfigurePins() const { - NRF_GPIO->PIN_CNF[pinScl] = - (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | - (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | - (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | - (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); - - NRF_GPIO->PIN_CNF[pinSda] = - (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | - (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | - (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | - (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); + NRF_GPIO->PIN_CNF[pinScl] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | + (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); + + NRF_GPIO->PIN_CNF[pinSda] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | + (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); } void TwiMaster::Init() { diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 2f689b9..bc22762 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -6,7 +6,7 @@ using namespace Pinetime::Applications; HeartRateTask::HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller) - : heartRateSensor {heartRateSensor}, controller {controller}, ppg{} { + : heartRateSensor {heartRateSensor}, controller {controller}, ppg {} { } void HeartRateTask::Start() { diff --git a/src/libs/lvgl b/src/libs/lvgl -Subproject e100d920f823e4308b8b43d7eb4130afa74f272 +Subproject 23430cf20e32294549fff9b2879a9466dacc19b diff --git a/src/main.cpp b/src/main.cpp index fa492d0..3d70af4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,6 @@ #include <hal/nrf_wdt.h> #include <legacy/nrf_drv_clock.h> #include <libraries/gpiote/app_gpiote.h> -#include <libraries/timer/app_timer.h> #include <softdevice/common/nrf_sdh.h> #include <nrf_delay.h> @@ -159,7 +158,7 @@ Pinetime::System::SystemTask systemTask(spi, touchHandler, buttonHandler); -/* Variable Declarations for variables in noinit SRAM +/* Variable Declarations for variables in noinit SRAM Increment NoInit_MagicValue upon adding variables to this area */ extern uint32_t __start_noinit_data; @@ -168,7 +167,6 @@ static constexpr uint32_t NoInit_MagicValue = 0xDEAD0000; uint32_t NoInit_MagicWord __attribute__((section(".noinit"))); std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> NoInit_BackUpTime __attribute__((section(".noinit"))); - void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == Pinetime::PinMap::Cst816sIrq) { systemTask.OnTouchEvent(); @@ -327,12 +325,11 @@ int main(void) { // retrieve version stored by bootloader Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]); - if (NoInit_MagicWord == NoInit_MagicValue) { dateTimeController.SetCurrentTime(NoInit_BackUpTime); } else { - //Clear Memory to known state - memset(&__start_noinit_data,0,(uintptr_t)&__stop_noinit_data-(uintptr_t)&__start_noinit_data); + // Clear Memory to known state + memset(&__start_noinit_data, 0, (uintptr_t) &__stop_noinit_data - (uintptr_t) &__start_noinit_data); NoInit_MagicWord = NoInit_MagicValue; } diff --git a/src/recoveryLoader.cpp b/src/recoveryLoader.cpp index acec14c..27a79d9 100644 --- a/src/recoveryLoader.cpp +++ b/src/recoveryLoader.cpp @@ -28,7 +28,6 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif - static constexpr uint8_t displayWidth = 240; static constexpr uint8_t displayHeight = 240; static constexpr uint8_t bytesPerPixel = 2; diff --git a/src/sdk_config.h b/src/sdk_config.h index fa9d630..b42b392 100644 --- a/src/sdk_config.h +++ b/src/sdk_config.h @@ -1224,7 +1224,7 @@ // <q> PM_SERVICE_CHANGED_ENABLED - Enable/disable the service changed management for GATT server in Peer Manager. -// <i> If not using a GATT server, or using a server wihout a service changed characteristic, +// <i> If not using a GATT server, or using a server without a service changed characteristic, // <i> disable this to save code space. #ifndef PM_SERVICE_CHANGED_ENABLED @@ -7667,7 +7667,7 @@ #endif // <e> USE_COMP - Use the comparator to implement the capacitive sensor driver. -// <i> Due to Anomaly 84, COMP I_SOURCE is not functional. It has too high a varation. +// <i> Due to Anomaly 84, COMP I_SOURCE is not functional. It has too high a variation. //========================================================== #ifndef USE_COMP #define USE_COMP 0 @@ -8200,7 +8200,7 @@ #define NRF_LOG_DEFAULT_LEVEL 3 #endif -// <q> NRF_LOG_DEFERRED - Enable deffered logger. +// <q> NRF_LOG_DEFERRED - Enable deferred logger. // <i> Log data is buffered and can be processed in idle. @@ -11620,7 +11620,7 @@ #define NRF_SDH_ANT_OBSERVER_PRIO_LEVELS 2 #endif -// <h> ANT Observers priorities - Invididual priorities +// <h> ANT Observers priorities - Individual priorities //========================================================== // <o> ANT_BPWR_ANT_OBSERVER_PRIO @@ -11696,7 +11696,7 @@ // <h> BLE Stack configuration - Stack configuration parameters // <i> The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. -// <i> Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref +// <i> Other libraries might depend on these values; keep them up-to-date even if you are not explicitly calling @ref // nrf_sdh_ble_default_cfg_set. //========================================================== // <o> NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> @@ -11766,7 +11766,7 @@ #define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 #endif -// <h> BLE Observers priorities - Invididual priorities +// <h> BLE Observers priorities - Individual priorities //========================================================== // <o> BLE_ADV_BLE_OBSERVER_PRIO @@ -12302,7 +12302,7 @@ #define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 #endif -// <h> State Observers priorities - Invididual priorities +// <h> State Observers priorities - Individual priorities //========================================================== // <o> CLOCK_CONFIG_STATE_OBSERVER_PRIO @@ -12329,7 +12329,7 @@ // </h> //========================================================== -// <h> Stack Event Observers priorities - Invididual priorities +// <h> Stack Event Observers priorities - Individual priorities //========================================================== // <o> NRF_SDH_ANT_STACK_OBSERVER_PRIO @@ -12383,7 +12383,7 @@ #define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 #endif -// <h> SoC Observers priorities - Invididual priorities +// <h> SoC Observers priorities - Individual priorities //========================================================== // <o> BLE_ADV_SOC_OBSERVER_PRIO diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 716aeef..f939900 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -33,7 +33,7 @@ namespace Pinetime { StartFileTransfer, StopFileTransfer, BleRadioEnableToggle, - BluetoothPasskeyEnableToggle + BluetoothPasskeyEnableToggle, }; } } diff --git a/src/systemtask/SystemMonitor.cpp b/src/systemtask/SystemMonitor.cpp index 90765e3..2edee7b 100644 --- a/src/systemtask/SystemMonitor.cpp +++ b/src/systemtask/SystemMonitor.cpp @@ -1,9 +1,9 @@ #include "systemtask/SystemTask.h" #if configUSE_TRACE_FACILITY == 1 -// FreeRtosMonitor -#include <FreeRTOS.h> -#include <task.h> -#include <nrf_log.h> + // FreeRtosMonitor + #include <FreeRTOS.h> + #include <task.h> + #include <nrf_log.h> void Pinetime::System::SystemMonitor::Process() { if (xTaskGetTickCount() - lastTick > 10000) { @@ -14,13 +14,14 @@ void Pinetime::System::SystemMonitor::Process() { NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark); if (tasksStatus[i].usStackHighWaterMark < 20) NRF_LOG_INFO("WARNING!!! Task %s task is nearly full, only %dB available", - tasksStatus[i].pcTaskName, - tasksStatus[i].usStackHighWaterMark * 4); + tasksStatus[i].pcTaskName, + tasksStatus[i].usStackHighWaterMark * 4); } lastTick = xTaskGetTickCount(); } } #else // DummyMonitor -void Pinetime::System::SystemMonitor::Process() {} +void Pinetime::System::SystemMonitor::Process() { +} #endif diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 6f6d474..3353a45 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -2,7 +2,6 @@ #include <hal/nrf_rtc.h> #include <libraries/gpiote/app_gpiote.h> #include <libraries/log/nrf_log.h> - #include "BootloaderVersion.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" @@ -176,39 +175,29 @@ void SystemTask::Work() { buttonHandler.Init(this); - // Button - nrf_gpio_cfg_output(15); - nrf_gpio_pin_set(15); - + // Setup Interrupts nrfx_gpiote_in_config_t pinConfig; pinConfig.skip_gpio_setup = false; pinConfig.hi_accuracy = false; pinConfig.is_watcher = false; - pinConfig.sense = static_cast<nrf_gpiote_polarity_t>(NRF_GPIOTE_POLARITY_TOGGLE); - pinConfig.pull = static_cast<nrf_gpio_pin_pull_t>(GPIO_PIN_CNF_PULL_Pulldown); + // Button + nrf_gpio_cfg_output(PinMap::ButtonEnable); + nrf_gpio_pin_set(PinMap::ButtonEnable); + pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; + pinConfig.pull = NRF_GPIO_PIN_PULLDOWN; nrfx_gpiote_in_init(PinMap::Button, &pinConfig, nrfx_gpiote_evt_handler); nrfx_gpiote_in_event_enable(PinMap::Button, true); // Touchscreen - nrf_gpio_cfg_sense_input(PinMap::Cst816sIrq, - static_cast<nrf_gpio_pin_pull_t>(GPIO_PIN_CNF_PULL_Pullup), - static_cast<nrf_gpio_pin_sense_t>(GPIO_PIN_CNF_SENSE_Low)); - - pinConfig.skip_gpio_setup = true; - pinConfig.hi_accuracy = false; - pinConfig.is_watcher = false; - pinConfig.sense = static_cast<nrf_gpiote_polarity_t>(NRF_GPIOTE_POLARITY_HITOLO); - pinConfig.pull = static_cast<nrf_gpio_pin_pull_t>(GPIO_PIN_CNF_PULL_Pullup); - + pinConfig.sense = NRF_GPIOTE_POLARITY_HITOLO; + pinConfig.pull = NRF_GPIO_PIN_PULLUP; nrfx_gpiote_in_init(PinMap::Cst816sIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_event_enable(PinMap::Cst816sIrq, true); // Power present pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; pinConfig.pull = NRF_GPIO_PIN_NOPULL; - pinConfig.is_watcher = false; - pinConfig.hi_accuracy = false; - pinConfig.skip_gpio_setup = false; nrfx_gpiote_in_init(PinMap::PowerPresent, &pinConfig, nrfx_gpiote_evt_handler); nrfx_gpiote_in_event_enable(PinMap::PowerPresent, true); @@ -262,27 +251,27 @@ void SystemTask::Work() { nimbleController.RestartFastAdv(); } - isSleeping = false; - isWakingUp = false; + state = SystemTaskState::Running; isDimmed = false; break; case Messages::TouchWakeUp: { if (touchHandler.GetNewTouchInfo()) { auto gesture = touchHandler.GestureGet(); - if (gesture != Pinetime::Applications::TouchEvents::None and - ((gesture == Pinetime::Applications::TouchEvents::DoubleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or - (gesture == Pinetime::Applications::TouchEvents::Tap and + if (gesture != Pinetime::Applications::TouchEvents::None && + ((gesture == Pinetime::Applications::TouchEvents::DoubleTap && + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) || + (gesture == Pinetime::Applications::TouchEvents::Tap && settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { GoToRunning(); } } - } break; + break; + } case Messages::GoToSleep: if (doNotGoToSleep) { break; } - isGoingToSleep = true; + state = SystemTaskState::GoingToSleep; // Already set in PushMessage() NRF_LOG_INFO("[systemtask] Going to sleep"); xTimerStop(idleTimer, 0); xTimerStop(dimTimer, 0); @@ -304,7 +293,7 @@ void SystemTask::Work() { break; case Messages::OnNewNotification: if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { - if (isSleeping && !isWakingUp) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } else { ReloadIdleTimer(); @@ -313,14 +302,14 @@ void SystemTask::Work() { } break; case Messages::OnTimerDone: - if (isSleeping && !isWakingUp) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } motorController.RunForDuration(35); displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone); break; case Messages::SetOffAlarm: - if (isSleeping && !isWakingUp) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } motorController.StartRinging(); @@ -328,7 +317,6 @@ void SystemTask::Work() { break; case Messages::StopRinging: motorController.StopRinging(); - alarmController.OnStopRinging(); break; case Messages::BleConnected: ReloadIdleTimer(); @@ -337,7 +325,7 @@ void SystemTask::Work() { break; case Messages::BleFirmwareUpdateStarted: doNotGoToSleep = true; - if (isSleeping && !isWakingUp) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); @@ -352,8 +340,9 @@ void SystemTask::Work() { case Messages::StartFileTransfer: NRF_LOG_INFO("[systemtask] FS Started"); doNotGoToSleep = true; - if (isSleeping && !isWakingUp) + if (state == SystemTaskState::Sleeping) { GoToRunning(); + } // TODO add intent of fs access icon or something break; case Messages::StopFileTransfer: @@ -402,8 +391,7 @@ void SystemTask::Work() { touchPanel.Sleep(); } - isSleeping = true; - isGoingToSleep = false; + state = SystemTaskState::Sleeping; break; case Messages::OnNewDay: // We might be sleeping (with TWI device disabled. @@ -422,14 +410,15 @@ void SystemTask::Work() { if (message == Messages::OnNewHour) { chimeDuration = 22; chimeWakeup = true; - } else if (chimeOption >= Controllers::Settings::ChimesOption::HalfHours && (minute = dateTimeController.Minutes()) == 30) { + } else if (chimeOption >= Controllers::Settings::ChimesOption::HalfHours && + (minute = dateTimeController.Minutes()) == 30) { chimeDuration = 18; } else if (chimeOption > Controllers::Settings::ChimesOption::HalfHours) { chimeDuration = 11; } else { break; } - if (chimeWakeup && isSleeping && !isWakingUp) { + if (chimeWakeup && state == SystemTaskState::Sleeping) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); } @@ -441,7 +430,7 @@ void SystemTask::Work() { batteryController.ReadPowerState(); motorController.RunForDuration(15); ReloadIdleTimer(); - if (isSleeping && !isWakingUp) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } break; @@ -452,7 +441,7 @@ void SystemTask::Work() { nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); break; case Messages::OnPairing: - if (isSleeping && !isWakingUp) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } motorController.RunForDuration(35); @@ -480,7 +469,7 @@ void SystemTask::Work() { if (isBleDiscoveryTimerRunning) { if (bleDiscoveryTimer == 0) { isBleDiscoveryTimerRunning = false; - // Services discovery is deffered from 3 seconds to avoid the conflicts between the host communicating with the + // Services discovery is deferred from 3 seconds to avoid the conflicts between the host communicating with the // target and vice-versa. I'm not sure if this is the right way to handle this... nimbleController.StartDiscovery(); } else { @@ -500,14 +489,15 @@ void SystemTask::Work() { } void SystemTask::UpdateMotion() { - if (isGoingToSleep or isWakingUp) { + if (state == SystemTaskState::GoingToSleep || state == SystemTaskState::WakingUp) { return; } - if (isSleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { + if (state == SystemTaskState::Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { return; } + if (stepCounterMustBeReset) { motionSensor.ResetStepCounter(); stepCounterMustBeReset = false; @@ -519,7 +509,7 @@ void SystemTask::UpdateMotion() { motionController.Update(motionValues.x, motionValues.y, motionValues.z, motionValues.steps); if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) && - motionController.Should_RaiseWake(isSleeping)) { + motionController.Should_RaiseWake(state == SystemTaskState::Sleeping)) { GoToRunning(); } if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) && @@ -540,7 +530,7 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { switch (action) { case Actions::Click: // If the first action after fast wakeup is a click, it should be ignored. - if (!fastWakeUpDone && !isGoingToSleep) { + if (!fastWakeUpDone && state != SystemTaskState::GoingToSleep) { displayApp.PushMessage(Applications::Display::Messages::ButtonPushed); } break; @@ -561,20 +551,16 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { } void SystemTask::GoToRunning() { - if (isGoingToSleep or (not isSleeping) or isWakingUp) { - return; + if (state == SystemTaskState::Sleeping) { + state = SystemTaskState::WakingUp; + PushMessage(Messages::GoToRunning); } - isWakingUp = true; - PushMessage(Messages::GoToRunning); } void SystemTask::OnTouchEvent() { - if (isGoingToSleep) { - return; - } - if (!isSleeping) { + if (state == SystemTaskState::Running) { PushMessage(Messages::OnTouchEvent); - } else if (!isWakingUp) { + } else if (state == SystemTaskState::Sleeping) { if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { PushMessage(Messages::TouchWakeUp); @@ -584,7 +570,7 @@ void SystemTask::OnTouchEvent() { void SystemTask::PushMessage(System::Messages msg) { if (msg == Messages::GoToSleep && !doNotGoToSleep) { - isGoingToSleep = true; + state = SystemTaskState::GoingToSleep; } if (in_isr()) { @@ -619,7 +605,7 @@ void SystemTask::OnIdle() { } void SystemTask::ReloadIdleTimer() { - if (isSleeping || isGoingToSleep) { + if (state != SystemTaskState::Running) { return; } if (isDimmed) { diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index f59b2af..e884ca3 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -53,6 +53,7 @@ namespace Pinetime { namespace System { class SystemTask { public: + enum class SystemTaskState { Sleeping, Running, GoingToSleep, WakingUp }; SystemTask(Drivers::SpiMaster& spi, Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, @@ -91,7 +92,7 @@ namespace Pinetime { }; bool IsSleeping() const { - return isSleeping; + return state == SystemTaskState::Sleeping || state == SystemTaskState::WakingUp; } // For accelerator-based games @@ -119,10 +120,6 @@ namespace Pinetime { Pinetime::Controllers::TimerController& timerController; Pinetime::Controllers::AlarmController& alarmController; QueueHandle_t systemTasksMsgQueue; - std::atomic<bool> isSleeping {false}; - std::atomic<bool> isGoingToSleep {false}; - std::atomic<bool> isWakingUp {false}; - std::atomic<bool> isDimmed {false}; Pinetime::Drivers::Watchdog& watchdog; Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::MotorController& motorController; @@ -148,6 +145,8 @@ namespace Pinetime { TimerHandle_t idleTimer; TimerHandle_t measureBatteryTimer; bool doNotGoToSleep = false; + bool isDimmed = false; + SystemTaskState state = SystemTaskState::Running; void HandleButtonAction(Controllers::ButtonActions action); bool fastWakeUpDone = false; diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h index fb3d265..332041e 100644 --- a/src/touchhandler/TouchHandler.h +++ b/src/touchhandler/TouchHandler.h @@ -11,30 +11,30 @@ namespace Pinetime { } namespace Controllers { class TouchHandler { - public: - explicit TouchHandler(Drivers::Cst816S&, Components::LittleVgl&); - void CancelTap(); - bool GetNewTouchInfo(); - void UpdateLvglTouchPoint(); + public: + explicit TouchHandler(Drivers::Cst816S&, Components::LittleVgl&); + void CancelTap(); + bool GetNewTouchInfo(); + void UpdateLvglTouchPoint(); - bool IsTouching() const { - return info.touching; - } - uint8_t GetX() const { - return info.x; - } - uint8_t GetY() const { - return info.y; - } - Pinetime::Applications::TouchEvents GestureGet(); - private: + bool IsTouching() const { + return info.touching; + } + uint8_t GetX() const { + return info.x; + } + uint8_t GetY() const { + return info.y; + } + Pinetime::Applications::TouchEvents GestureGet(); - Pinetime::Drivers::Cst816S::TouchInfos info; - Pinetime::Drivers::Cst816S& touchPanel; - Pinetime::Components::LittleVgl& lvgl; - Pinetime::Applications::TouchEvents gesture; - bool isCancelled = false; - bool gestureReleased = true; + private: + Pinetime::Drivers::Cst816S::TouchInfos info; + Pinetime::Drivers::Cst816S& touchPanel; + Pinetime::Components::LittleVgl& lvgl; + Pinetime::Applications::TouchEvents gesture; + bool isCancelled = false; + bool gestureReleased = true; }; } } diff --git a/tests/test-format.sh b/tests/test-format.sh new file mode 100755 index 0000000..86667c7 --- /dev/null +++ b/tests/test-format.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +set -e + +if [ -z "$GITHUB_BASE_REF" ] +then + echo "This script is only meant to be run in a GitHub Workflow" + exit 1 +fi + +CHANGED_FILES=$(git diff --name-only "$GITHUB_BASE_REF"...HEAD) + +CHANGED=0 + +for file in $CHANGED_FILES +do + [ -e "$file" ] || continue + case "$file" in + src/libs/*) continue ;; + *.cpp|*.h) + echo Checking "$file" + clang-format -i "$file" + if ! git diff --quiet + then + printf "\033[31mError:\033[0m Formatting error in %s\n" "$file" + CHANGED=1 + git add "$file" + git commit -q -m "Apply clang-format to $(basename "$file")" + printf "Creating patch " + git format-patch HEAD~ + fi + esac +done + +if [ $CHANGED = 1 ] +then + printf "\033[31mError:\033[0m Issues found. You may use the patches provided as artifacts to format the code." + exit 1 +fi + +exit 0 diff --git a/tools/rle_encode.py b/tools/rle_encode.py index 80a0926..58c45b7 100644 --- a/tools/rle_encode.py +++ b/tools/rle_encode.py @@ -101,7 +101,7 @@ class ReverseCLUT: rd = r - (candidate >> 16) gd = g - ((candidate >> 8) & 0xff) bd = b - (candidate & 0xff) - # This is the Euclidian distance (squared) + # This is the Euclidean distance (squared) distance = rd * rd + gd * gd + bd * bd if distance < best: best = distance |
