mirror of
https://github.com/pelgraine/Meck.git
synced 2026-05-13 21:05:52 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 60ec294ee6 | |||
| 5497950892 |
@@ -1,4 +0,0 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: pelgraine
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
A fork created specifically to focus on enabling BLE & WiFi companion firmware for the LilyGo T-Deck Pro & LilyGo T5 E-Paper S3 Pro. Created wholly with Claude AI using Meshcore v1.11 code. 100% vibecoded.
|
||||
|
||||
[Check out the Meck discussion channel on the MeshCore Discord](https://discord.com/channels/1495203904898728149/1496789639556501614)
|
||||
[Check out the Meck discussion channel on the MeshCore Discord](https://discord.com/channels/1343693475589263471/1460136499390447670)
|
||||
|
||||
<img src="https://github.com/user-attachments/assets/b30ce6bd-79af-44d3-93c4-f5e7e21e5621" alt="IMG_1453" width="300" height="650">
|
||||
|
||||
@@ -15,7 +15,6 @@ A fork created specifically to focus on enabling BLE & WiFi companion firmware f
|
||||
- [Launcher](#launcher)
|
||||
- [OTA Firmware Update](#ota-firmware-update-v13)
|
||||
- [Path Hash Mode (v0.9.9+)](#path-hash-mode-v099)
|
||||
- [Region Scope (v1.7+)](#region-scope-v17)
|
||||
- [T-Deck Pro](#t-deck-pro)
|
||||
- [Build Variants](#t-deck-pro-build-variants)
|
||||
- [Keyboard Controls](#t-deck-pro-keyboard-controls)
|
||||
@@ -24,14 +23,11 @@ A fork created specifically to focus on enabling BLE & WiFi companion firmware f
|
||||
- [WiFi Companion](#wifi-companion)
|
||||
- [Clock & Timezone](#clock--timezone)
|
||||
- [Channel Message Screen](#channel-message-screen)
|
||||
- [Channel Picker](#channel-picker)
|
||||
- [Contacts Screen](#contacts-screen)
|
||||
- [Sending a Direct Message](#sending-a-direct-message)
|
||||
- [Roomservers](#roomservers)
|
||||
- [Repeater Admin Screen](#repeater-admin-screen)
|
||||
- [Trace Route Screen (v1.9+)](#trace-route-screen-v19)
|
||||
- [Settings Screen](#settings-screen)
|
||||
- [Font Styles](#font-styles)
|
||||
- [Compose Mode](#compose-mode)
|
||||
- [Symbol Entry (Sym Key)](#symbol-entry-sym-key)
|
||||
- [Emoji Picker](#emoji-picker)
|
||||
@@ -39,10 +35,14 @@ A fork created specifically to focus on enabling BLE & WiFi companion firmware f
|
||||
- [Web Browser & IRC](#web-browser--irc)
|
||||
- [Alarm Clock (Audio only)](#alarm-clock-audio-only)
|
||||
- [Voice Notes Over LoRa (Audio only)](#voice-notes-over-lora-audio-only)
|
||||
- [Contact Management — Select, Export & Import](#contact-management--select-export--import)
|
||||
- [Lock Screen (T-Deck Pro)](#lock-screen-t-deck-pro)
|
||||
- [Shutdown (T-Deck Pro)](#shutdown-t-deck-pro)
|
||||
- [Remote Repeater (T-Deck Pro 4G)](#remote-repeater-t-deck-pro-4g)
|
||||
- [WiFi Repeater](#wifi-repeater)
|
||||
- [Remote Repeater Build Variant](#remote-repeater-build-variant)
|
||||
- [Setting Up HiveMQ Cloud (Free MQTT Broker)](#setting-up-hivemq-cloud-free-mqtt-broker)
|
||||
- [SD Card Configuration](#remote-repeater-sd-card-configuration)
|
||||
- [Deploying the Remote Repeater](#deploying-the-remote-repeater)
|
||||
- [Remote Dashboard (Meck-Mycelium)](#remote-dashboard-meck-mycelium)
|
||||
- [T5S3 E-Paper Pro](#t5s3-e-paper-pro)
|
||||
- [Build Variants](#t5s3-build-variants)
|
||||
- [Touch Navigation](#touch-navigation)
|
||||
@@ -58,7 +58,6 @@ A fork created specifically to focus on enabling BLE & WiFi companion firmware f
|
||||
- [Text & EPUB Reader](TXT___EPUB_Reader_Guide.md)
|
||||
- [Web Browser & IRC Guide](Web_App_Guide.md)
|
||||
- [SMS & Phone App Guide](SMS___Phone_App_Guide.md)
|
||||
- [Audiobook Player Guide](Audiobook_Player_Guide.md)
|
||||
- [Meck-Mycelium Web App](#meck-mycelium-web-app)
|
||||
- [About MeshCore](#about-meshcore)
|
||||
- [What is MeshCore?](#what-is-meshcore)
|
||||
@@ -77,16 +76,14 @@ A fork created specifically to focus on enabling BLE & WiFi companion firmware f
|
||||
|
||||
## Supported Devices
|
||||
|
||||
Meck currently targets two LilyGo devices and also supports the Heltec V3 and V4 as remote repeaters:
|
||||
Meck currently targets two LilyGo devices:
|
||||
|
||||
| Device | Display | Input | LoRa | Battery | GPS | RTC |
|
||||
|--------|---------|-------|------|---------|-----|-----|
|
||||
| **T-Deck Pro** | 240×320 e-ink (GxEPD2) | TCA8418 keyboard + optional touch | SX1262 | BQ27220 fuel gauge, 1400 mAh | Yes | No (uses GPS time) |
|
||||
| **T5S3 E-Paper Pro** (V2, H752-B) | 960×540 e-ink (FastEPD, parallel) | GT911 capacitive touch (no keyboard) | SX1262 | BQ27220 fuel gauge, 1500 mAh | No (non-GPS variant) | Yes (PCF8563 hardware RTC) |
|
||||
| **Heltec V3** (remote repeater only) | 0.96" OLED (SSD1306) | — | SX1262 | — | No | No |
|
||||
| **Heltec V4** (remote repeater only) | 0.96" OLED (SSD1306) | — | SX1262 | — | No | No |
|
||||
|
||||
The T-Deck Pro and T5S3 use the ESP32-S3 with 16 MB flash and 8 MB PSRAM. The Heltec V3 and V4 use the ESP32-S3 with 8 MB flash and 8 MB PSRAM.
|
||||
Both devices use the ESP32-S3 with 16 MB flash and 8 MB PSRAM.
|
||||
|
||||
---
|
||||
|
||||
@@ -94,7 +91,7 @@ The T-Deck Pro and T5S3 use the ESP32-S3 with 16 MB flash and 8 MB PSRAM. The He
|
||||
|
||||
**An SD card is essential for Meck to function properly.** Many features — including the e-book reader, notes, bookmarks, web reader cache, audiobook playback, firmware updates, contact import/export, and WiFi credential storage — rely on files stored on the SD card. Without an SD card inserted, the device will boot and handle mesh messaging, but most extended features will be unavailable or will fail silently.
|
||||
|
||||
**Recommended:** A **32 GB or larger** microSD card formatted as **FAT32**. Meck's extensive feature set — audiobooks, e-books, voice recordings, contact exports, alarm sounds, web reader cache, notes, and firmware images — can accumulate significant storage over time, so a larger card is worthwhile. MeshCore users have found that **SanDisk** microSD cards are the most reliable across both the T-Deck Pro and T5S3.
|
||||
**Recommended:** A **32 GB or larger** microSD card formatted as **FAT32**. MeshCore users have found that **SanDisk** microSD cards are the most reliable across both the T-Deck Pro and T5S3.
|
||||
|
||||
---
|
||||
|
||||
@@ -122,7 +119,7 @@ On macOS the port is typically `/dev/cu.usbmodem*`. On Windows it will be a COM
|
||||
|
||||
**Using the MeshCore Flasher (web-based, T-Deck Pro only):**
|
||||
|
||||
1. Go to https://flasher.meshcore.io
|
||||
1. Go to https://flasher.meshcore.co.uk
|
||||
2. Select **Custom Firmware**
|
||||
3. Select the **merged** `.bin` file you downloaded
|
||||
4. Click **Flash**, select your device in the popup, and click **Connect**
|
||||
@@ -142,8 +139,6 @@ esptool.py --chip esp32s3 --port /dev/ttyACM0 --baud 921600 \
|
||||
|
||||
> **Tip:** If you're unsure whether the device already has a bootloader, it's always safe to use the merged file and flash at `0x0` — it will overwrite everything cleanly.
|
||||
|
||||
> **First boot:** On a fresh flash, the device will format its internal storage partition. The display shows "Formatting storage... First boot - please wait" — this takes 1-2 minutes and only happens once. If the device was previously running different firmware (e.g. stock LilyGo or Meshtastic), the partition is automatically erased and reformatted to ensure a clean start.
|
||||
|
||||
### Launcher
|
||||
|
||||
If you're loading firmware from an SD card via the LilyGo Launcher firmware, use the **non-merged** `.bin` file. The Launcher provides its own bootloader and only needs the application image.
|
||||
@@ -189,38 +184,21 @@ For a detailed explanation of what multibyte path hash means and why it matters,
|
||||
|
||||
---
|
||||
|
||||
## Region Scope (v1.7+)
|
||||
|
||||
Regions limit how far your flood messages propagate through the mesh. When you set a region, outgoing messages are tagged with a transport code that repeaters use to decide whether to forward them. Messages sent without a region reach all repeaters via the default wildcard, same as always.
|
||||
|
||||
Meck does not pre-set any region on a fresh flash. Region names are determined by your local mesh community — check with your local group for the names in use. Common patterns follow ISO 3166 country/subdivision codes (e.g. `au` for Australia, `gb-eng` for England, `us-ca` for California), but communities may also use custom names for their area. Region names must be lowercase alphanumeric characters and hyphens only, max 29 characters.
|
||||
|
||||
**Device-wide default region:** Set in **Settings → Default Region**. This applies to all channels and DMs unless a channel has its own override.
|
||||
|
||||
**Per-channel region:** In Settings → Channels, select a channel and press Enter to edit its region scope. This overrides the device default for that specific channel only.
|
||||
|
||||
**Settings nudge:** When exiting settings, if no region is configured anywhere (no device default and no per-channel scopes), a prompt reminds you to consider setting one. You can dismiss it to stay unscoped.
|
||||
|
||||
Region scope can also be configured via serial commands — see the [Serial Settings Guide](Serial_Settings_Guide.md) for `set region`, `get region`, `set channel.scope`, and `get channel.scope` commands.
|
||||
|
||||
---
|
||||
|
||||
## T-Deck Pro
|
||||
|
||||
### T-Deck Pro Build Variants
|
||||
|
||||
| Variant | Environment | BLE | WiFi | 4G Modem | Audio DAC | Web Reader | Max Contacts |
|
||||
|---------|------------|-----|------|----------|-----------|------------|-------------|
|
||||
| Audio + BLE | `meck_audio_ble` | Yes | Yes (web reader only) | — | PCM5102A | Yes | 2,000 |
|
||||
| Audio + WiFi | `meck_audio_wifi` | — | Yes (TCP:5000) | — | PCM5102A | Yes | 2,000 |
|
||||
| Audio + Standalone | `meck_audio_standalone` | — | — | — | PCM5102A | No | 2,000 |
|
||||
| 4G + BLE | `meck_4g_ble` | Yes | Yes | A7682E | — | Yes | 2,000 |
|
||||
| 4G + WiFi | `meck_4g_wifi` | — | Yes (TCP:5000) | A7682E | — | Yes | 2,000 |
|
||||
| 4G + Standalone | `meck_4g_standalone` | — | Yes | A7682E | — | Yes | 2,000 |
|
||||
| Audio + BLE | `meck_audio_ble` | Yes | Yes (via BLE stack) | — | PCM5102A | Yes | 500 |
|
||||
| Audio + WiFi | `meck_audio_wifi` | — | Yes (TCP:5000) | — | PCM5102A | Yes | 1,500 |
|
||||
| Audio + Standalone | `meck_audio_standalone` | — | — | — | PCM5102A | No | 1,500 |
|
||||
| 4G + BLE | `meck_4g_ble` | Yes | Yes | A7682E | — | Yes | 500 |
|
||||
| 4G + WiFi | `meck_4g_wifi` | — | Yes (TCP:5000) | A7682E | — | Yes | 1,500 |
|
||||
| 4G + Standalone | `meck_4g_standalone` | — | Yes | A7682E | — | Yes | 1,500 |
|
||||
| Remote Repeater (4G) | `meck_remote_repeater` | — | — | A7682E (MQTT) | — | No | — |
|
||||
| WiFi Repeater | `meck_wifi_repeater` | — | Yes (MQTT) | — | — | No | — |
|
||||
|
||||
The audio DAC and 4G modem occupy the same hardware slot and are mutually exclusive. The remote repeater and WiFi repeater variants operate as dedicated MeshCore repeaters — they forward mesh traffic and respond to guest logins as normal, but **admin management is handled remotely via MQTT** through the [Meck-Mycelium dashboard](https://pelgraine.github.io/Meck-Mycelium), not via the standard mesh admin password login. See [Remote Repeater](#remote-repeater-t-deck-pro-4g) and [WiFi Repeater](#wifi-repeater) below.
|
||||
The audio DAC and 4G modem occupy the same hardware slot and are mutually exclusive. The remote repeater variant operates as a dedicated MeshCore repeater with cellular MQTT management — see [Remote Repeater](#remote-repeater-t-deck-pro-4g) below.
|
||||
|
||||
### T-Deck Pro Keyboard Controls
|
||||
|
||||
@@ -242,11 +220,10 @@ The T-Deck Pro firmware includes full keyboard support for standalone messaging
|
||||
| T | Open SMS & Phone app (4G variant only) |
|
||||
| P | Open audiobook player (audio variant only) |
|
||||
| K | Open alarm clock (audio variant only) |
|
||||
| Mic (0) | Open voice messages (audio variant only) |
|
||||
| F | Open node discovery (search for nearby repeaters/nodes) |
|
||||
| H | Open last heard list (passive advert history) |
|
||||
| R | Open trace route screen (v1.9+) — see [Trace Route Screen](#trace-route-screen-v19) |
|
||||
| G | Open map screen (shows contacts with GPS positions) |
|
||||
| Mic | Open voice messages (audio variant only) |
|
||||
| Q | Back to home screen |
|
||||
| Double-click Boot | Lock / unlock screen |
|
||||
|
||||
@@ -271,6 +248,8 @@ Connect the MeshCore web app or meshcore.js to `<device IP>:5000`.
|
||||
|
||||
WiFi is also used by the web reader and IRC client on WiFi variants. The web reader shares the same connection — no extra setup needed.
|
||||
|
||||
> **Tip:** WiFi variants support up to 1,500 contacts (vs 500 for BLE variants) because they are not constrained by the BLE protocol ceiling.
|
||||
|
||||
### Clock & Timezone
|
||||
|
||||
The T-Deck Pro does not include a dedicated RTC chip, so after each reboot the device clock starts unset. The clock will appear in the nav bar (between node name and battery) once the time has been synced by one of these methods:
|
||||
@@ -298,100 +277,30 @@ The GPS page also shows the current time, satellite count, position, altitude, a
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W / S | Scroll messages up/down |
|
||||
| A / D | Open channel picker — shows all channels and DM inbox with unread badges. Select a channel and press Enter to switch. |
|
||||
| A / D | Switch between channels (press D past the last channel to reach the DM inbox, A to return) |
|
||||
| Enter | Compose new message |
|
||||
| R | Reply to a message — enter reply select mode, scroll to a message with W/S, then press Enter to compose a reply with an @mention |
|
||||
| V | View relay path of the last received message (scrollable, up to 20 hops) |
|
||||
| Q | Back to channel picker |
|
||||
|
||||
### Channel Picker
|
||||
|
||||
Pressing **A** or **D** on the channel messages screen opens the channel picker. All your channels and the DM inbox are shown in a single view with unread message badges, letting you jump directly to any channel instead of cycling through them one at a time.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W / S | Navigate up / down |
|
||||
| Enter | Switch to selected channel |
|
||||
| Q | Back to home screen |
|
||||
|
||||
On the T5S3, swiping left or right on the channel messages screen also opens the channel picker, which displays a **vertical bubble list** matching the Meck P4 aesthetic.
|
||||
|
||||
### Contacts Screen
|
||||
|
||||
Press **C** from the home screen to open the contacts list. All known mesh contacts are shown sorted by most recently heard, with their type prefix, estimated hop count, and time since last advert.
|
||||
|
||||
**Contact type prefixes**
|
||||
|
||||
| Prefix | Type |
|
||||
|--------|------|
|
||||
| C | Chat node |
|
||||
| R | Repeater |
|
||||
| RS | Room server |
|
||||
| ? | Unknown / sensor |
|
||||
|
||||
**Hop count display**
|
||||
|
||||
| Display | Meaning |
|
||||
|---------|---------|
|
||||
| `D` | Direct path known (path exchange completed) |
|
||||
| `D*` | Direct path, manually locked |
|
||||
| `N` | N-hop path known (e.g. `2` = 2 hops) |
|
||||
| `N*` | N-hop path, manually locked |
|
||||
| `~D` | Heard direct via flood advert (no path exchange yet) |
|
||||
| `~N` | Estimated N hops via flood advert |
|
||||
| `?` | No path information available |
|
||||
|
||||
Flood-based hop estimates (`~D`, `~N`) are drawn from a cache of up to 1,000 recently heard adverts and reset to `?` on reboot until each contact re-advertises. Confirmed path values (`D`, `N`) persist until overwritten by a new path exchange.
|
||||
|
||||
**Normal mode controls**
|
||||
Press **C** from the home screen to open the contacts list. All known mesh contacts are shown sorted by most recently seen, with their type (Chat, Repeater, Room, Sensor), hop count, and time since last advert.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W / S | Scroll up / down through contacts |
|
||||
| Shift+W / Shift+S | Page up / page down |
|
||||
| A / D | Cycle filter: All → Chat → Rptr → Room → Sens → Fav |
|
||||
| Enter | Enter select mode (highlights current contact, enables batch operations) |
|
||||
| P | Open path editor for the highlighted contact |
|
||||
| A / D | Cycle filter: All → Chat → Repeater → Room → Sensor → Favourites |
|
||||
| Enter | Open DM compose (Chat contact) or repeater admin (Repeater contact) |
|
||||
| Long-press Enter | Enter select mode (see [Contact Management](#contact-management--select-export--import)) |
|
||||
| P | Open Path Editor for selected contact (set direct or multi-hop path) |
|
||||
| X | Export contacts to SD card — exports selected contacts if in select mode, or all contacts otherwise |
|
||||
| R | Import contacts from SD card (auto-selects most recent export by timestamp) |
|
||||
| Q | Back to home screen |
|
||||
|
||||
> **Note:** The **Fav** filter shows only contacts you have marked as favourites. If it appears empty, no contacts have been favourited yet — use select mode (Enter) and then **F** to mark contacts.
|
||||
**Contact limits:** Standalone and WiFi variants support up to 1,500 contacts (stored in PSRAM). BLE variants (Audio-BLE and 4G-BLE) are limited to 500 contacts due to BLE protocol constraints.
|
||||
|
||||
**Select mode** — press Enter from the contacts list to enter select mode. The highlighted contact is pre-selected. Use W/S to scroll and Enter to toggle selection on any row.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W / S | Scroll up / down |
|
||||
| Enter | Toggle selection on current contact |
|
||||
| A | Select all contacts in current filter |
|
||||
| D | Deselect all |
|
||||
| F | Toggle favourite on all selected contacts |
|
||||
| X | Export selected contacts to SD card |
|
||||
| Backspace | Delete selected contacts |
|
||||
| Q | Exit select mode |
|
||||
|
||||
**Adding contacts**
|
||||
|
||||
Contacts can be added three ways:
|
||||
|
||||
1. **Automatic** — if Settings → Contacts → Add Mode is set to *Auto All*, any node whose advert is heard is added automatically. *Custom* mode adds only nodes matching the enabled type toggles (Companion, Repeater, Room Server, Sensor) — each toggle controls whether receiving an advert of that type triggers an auto-add. *Manual Only* disables all auto-add.
|
||||
|
||||
2. **From the Last Heard screen** — press **H** from the home screen to open the last-heard advert list. Scroll to the node you want and press **Enter** (or tap the row) to add it to contacts. Press **Enter** again on an existing contact to remove it (favourites require a second press within 3 seconds to confirm). Entries show `[+]` if already in contacts, `[★]` if a favourite.
|
||||
|
||||
> **Note:** The Last Heard list holds up to 1,000 entries in PSRAM, and advert data is stored persistently on the SD card — so contacts can be added long after the original advertisement was received, even across reboots. This makes Last Heard especially useful when auto-add is set to *Manual Only*, as it provides a passive catalogue of every node heard on the network.
|
||||
|
||||
3. **From the Discovery screen** — press **F** from the home screen to run an active discovery scan. Nodes that respond appear in a list; press **Enter** on any entry to add it to contacts.
|
||||
|
||||
**Deleting contacts**
|
||||
|
||||
Enter select mode (Enter), select the contacts to remove (Enter to toggle, A to select all), then press **Backspace** to delete. You will be returned to the contacts list once the deletion is complete.
|
||||
|
||||
**Exporting and importing contacts**
|
||||
|
||||
In select mode, press **X** to export. If contacts are selected, only those contacts are exported; if none are selected, all contacts are exported. Contacts are saved as a JSON file to `/meshcore/` on the SD card with a timestamp in the filename. The JSON format is compatible with MeshCore companion apps — you can copy the file from the SD card and import it into the Android, iOS, or web companion app.
|
||||
|
||||
Press **R** on the contacts list (outside select mode) to import contacts from a JSON file on the SD card. The most recent export file in `/meshcore/` is used automatically.
|
||||
|
||||
**Contact limits:** All variants support up to 2,000 contacts (stored in PSRAM).
|
||||
For detailed documentation on select mode, bulk operations, export format, and companion app interoperability, see [Contact Management — Select, Export & Import](#contact-management--select-export--import).
|
||||
|
||||
### Sending a Direct Message
|
||||
|
||||
@@ -399,7 +308,7 @@ Select a **Chat** contact in the contacts list and press **Enter** to start comp
|
||||
|
||||
Contacts with unread direct messages show a `*` marker next to their name in the contacts list.
|
||||
|
||||
**Reading received DMs:** On the Channel Messages screen, press **A** or **D** to open the channel picker, then select the **DM Inbox** entry to view received direct messages. This shows all received direct messages with sender name and timestamp. Entering the DM inbox marks all DM messages as read and clears the unread indicator.
|
||||
**Reading received DMs:** On the Channel Messages screen, press **D** past the last group channel to reach the **DM inbox**. This shows all received direct messages with sender name and timestamp. Entering the DM inbox marks all DM messages as read and clears the unread indicator. Press **A** to return to group channels.
|
||||
|
||||
### Roomservers
|
||||
|
||||
@@ -432,58 +341,6 @@ After a successful login, you'll see a menu with the following remote administra
|
||||
|
||||
Command responses are displayed in a scrollable view. Use **W / S** to scroll long responses and **Q** to return to the menu.
|
||||
|
||||
### Trace Route Screen (v1.9+)
|
||||
|
||||
The trace route screen lets you build a chain of repeaters and run a trace through them — the same feature available in the MeshCore companion app, but on-device. Each repeater in the chain that recognises its hash appends its receive SNR before forwarding the packet, giving you per-hop signal quality data for the whole route.
|
||||
|
||||
Press **R** from the home screen to open the trace screen. T5S3 users with a CardKB attached can use **R** as well.
|
||||
|
||||
**Building the path**
|
||||
|
||||
There are two ways to add hops to the path:
|
||||
|
||||
- **+ Add repeater** — opens a picker showing all known Repeater contacts. Press W/S to scroll, Enter to append the highlighted repeater to the path. The contact picker uses the repeater's stored public key bytes directly, so the hash is always correct regardless of mode.
|
||||
- **Type Path** — opens an inline text editor for comma-separated decimal hash values, matching the format the companion app uses (e.g. `3601,2198,1244,2198,3601`). Useful when the repeater isn't in your contacts but you know its hash from the app or a community listing.
|
||||
|
||||
The path is shown as a numbered list below the menu. Individual hops can be edited or removed, and the whole path can be cleared if you need to start over.
|
||||
|
||||
**Hash mode**
|
||||
|
||||
Meck supports both 1-byte and 2-byte hash modes. The screen defaults to your device's `path.hash.mode` setting but can be toggled on the fly:
|
||||
|
||||
- 1-byte mode (`Mode: 1-byte`) — older networks, more collision-prone but smaller packets
|
||||
- 2-byte mode (`Mode: 2-byte`) — current MeshCore default in most regions, fewer hash collisions
|
||||
|
||||
Use **A / D** on the mode row to toggle, or Enter to cycle.
|
||||
|
||||
**Running a trace**
|
||||
|
||||
Once at least one hop is in the path, scroll to **Run Trace** and press Enter. Meck creates a `PAYLOAD_TYPE_TRACE` packet and sends it direct-routed through the chain. The screen switches to a "Tracing..." state with an elapsed-time counter while waiting for the response.
|
||||
|
||||
When the trace completes, the screen shows:
|
||||
|
||||
- Each hop in order with its receive SNR (in dB)
|
||||
- The final SNR of the response packet arriving back at your device
|
||||
- Total round-trip time in milliseconds
|
||||
|
||||
If 30 seconds pass without a response, the trace times out and the screen returns to the build view so you can adjust the path and try again.
|
||||
|
||||
**Symmetric paths and direct visibility**
|
||||
|
||||
For a round-trip trace, the path needs to be symmetric. To trace through repeaters A → B → C and back, type `A,B,C,B,A`. The trace packet travels out through A→B→C, and the response comes back C→B→A.
|
||||
|
||||
You also need to be able to **hear the last repeater in the chain directly** — that's the one that sends the response back to your device. If the last hop is too far away to hear, the trace will time out even though the outbound leg succeeded.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W / S | Navigate menu items |
|
||||
| A / D | Toggle hash mode (1-byte / 2-byte) on the mode row |
|
||||
| Enter | Select / confirm / open editor |
|
||||
| 0–9 , | Path values (when the inline text editor is open) |
|
||||
| Q | Cancel edit / back to home screen |
|
||||
|
||||
The screen supports up to **16 hops** per trace.
|
||||
|
||||
### Settings Screen
|
||||
|
||||
Press **S** from the home screen to open settings. On first boot (when the device name is still the default hex ID), the settings screen launches automatically as an onboarding wizard to set your device name and radio preset.
|
||||
@@ -491,7 +348,6 @@ Press **S** from the home screen to open settings. On first boot (when the devic
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W / S | Navigate up / down through settings |
|
||||
| Shift+W / Shift+S | Page up / page down |
|
||||
| Enter | Edit selected setting, or enter a sub-screen |
|
||||
| Q | Back one level (sub-screen → top level → home screen) |
|
||||
|
||||
@@ -510,29 +366,16 @@ Press **S** from the home screen to open settings. On first boot (when the devic
|
||||
| Msg Rcvd LED Pulse | Toggle keyboard backlight flash on new message (Enter to toggle) |
|
||||
| GPS Baud Rate | A / D to cycle (Default 38400 / 4800 / 9600 / 19200 / 38400 / 57600 / 115200), Enter to confirm. **Requires reboot to take effect.** |
|
||||
| Path Hash Mode | W / S to cycle (1-byte / 2-byte / 3-byte), Enter to confirm |
|
||||
| Default Region | Text entry — type a region name (e.g. `au-nsw`), Enter to confirm. Empty = unscoped. See [Region Scope](#region-scope-v17). |
|
||||
| Dark Mode | Toggle inverted display — white text on black background (Enter to toggle) |
|
||||
| Larger Font | Toggle larger text size on channel messages, contacts, DM inbox, and repeater admin screens (Enter to toggle) |
|
||||
| Font Style | A / D to cycle styles (Classic / Noto Sans / Montserrat), Enter to apply. See [Font Styles](#font-styles). |
|
||||
| Auto Lock | A / D to cycle timeout (None / 2 / 5 / 10 / 15 / 30 min), Enter to confirm |
|
||||
| Contacts >> | Opens the Contacts sub-screen (see below) |
|
||||
| Channels >> | Opens the Channels sub-screen (see below) |
|
||||
| OTA Tools >> | Opens the OTA sub-screen — Firmware Update and SD File Manager (see [OTA Firmware Update](#ota-firmware-update-v13)) |
|
||||
| Device Info | Public key and firmware version (read-only) |
|
||||
|
||||
**Contacts sub-screen** — press Enter on the `Contacts >>` row to open. Contains the contact auto-add mode picker and, when set to Custom, per-type toggles:
|
||||
**Contacts sub-screen** — press Enter on the `Contacts >>` row to open. Contains the contact auto-add mode picker (Auto All / Custom / Manual) and, when set to Custom, per-type toggles for Chat, Repeater, Room Server, Sensor, and an Overwrite Oldest option. Press Q to return to the top-level settings list.
|
||||
|
||||
| Toggle | Meaning when ON |
|
||||
|--------|----------------|
|
||||
| Companion | Auto-add a chat node when its advert is heard |
|
||||
| Repeater | Auto-add repeaters heard via advert |
|
||||
| Room Server | Auto-add room servers heard via advert |
|
||||
| Sensor | Auto-add sensor nodes heard via advert |
|
||||
| Overwrite Oldest | When the contact list is full, overwrite the oldest non-favourite entry instead of discarding the new contact |
|
||||
|
||||
Press Q to return to the top-level settings list.
|
||||
|
||||
**Channels sub-screen** — press Enter on the `Channels >>` row to open. Lists all current channels with their region scope tags (e.g. `[au-nsw]` or `[*]` for device default). Press Enter on a channel to edit its region scope. Press X to delete non-primary channels. Press Q to return to the top-level settings list.
|
||||
**Channels sub-screen** — press Enter on the `Channels >>` row to open. Lists all current channels, with an option to add hashtag channels or delete non-primary channels (X). Press Q to return to the top-level settings list.
|
||||
|
||||
The top-level settings screen also displays your node ID and firmware version. On the 4G variant, IMEI, carrier name, and APN details are shown here as well.
|
||||
|
||||
@@ -542,16 +385,6 @@ If you've changed radio parameters, pressing Q will prompt you to apply changes
|
||||
|
||||
> **Tip:** All device settings (plus mesh tuning parameters not available on-screen) can also be configured via USB serial. See the [Serial Settings Guide](Serial_Settings_Guide.md) for complete documentation.
|
||||
|
||||
### Font Styles
|
||||
|
||||
Meck supports three font styles across the entire UI: **Classic** (the original FreeSans look), **Noto Sans** (clean, excellent Latin Extended coverage), and **Montserrat** (geometric, distinctive).
|
||||
|
||||
Change the font in **Settings → Font** — use A/D to cycle with a live preview, then Enter to apply. Press Q to cancel and revert. The selected style applies to all screens including channel messages, contacts, settings, and the e-reader.
|
||||
|
||||
Font styles are available in both Tiny and Larger text size modes. Custom fonts at Tiny size use 7pt glyphs; at Larger size, 9pt — matching the existing FreeSans layout. The font preference is saved and persists across reboots.
|
||||
|
||||
**Accented character support (v1.8+):** All three font styles now display accented and diacritical characters (Czech, Polish, French, German, etc.) instead of dropping them. **Noto Sans at Larger text size** renders diacritical marks natively (carons, accents, cedillas). All other font and size combinations fold accented characters to their ASCII base letter (ě→e, ž→z, ñ→n) — the letter is always visible, just without the diacritic mark.
|
||||
|
||||
### Compose Mode
|
||||
|
||||
| Key | Action |
|
||||
@@ -588,7 +421,7 @@ Press the **Sym** key then the letter key to enter numbers and symbols:
|
||||
|
||||
### Emoji Picker
|
||||
|
||||
While in compose mode, press the **$** key to open the emoji picker. A scrollable grid of 77 emoji is displayed in a 5-column layout, with faces and emotions grouped first. Scrolling wraps around — pressing W on the first row goes to the last row and vice versa.
|
||||
While in compose mode, press the **$** key to open the emoji picker. A scrollable grid of 47 emoji is displayed in a 5-column layout.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
@@ -670,12 +503,14 @@ Record and send voice messages of up to 12 seconds over LoRa. Audio is encoded o
|
||||
|
||||
Voice notes can be sent to another T-Deck Pro Audio device (plays automatically through the headphone jack) or to any MeshCore companion device connected to the [Meck-Mycelium web app](https://pelgraine.github.io/Meck-Mycelium) (plays through your phone's speaker as a tappable bubble in the DM view).
|
||||
|
||||
**Before sending, your contact must have a path set.** Go to Contacts (press **C**), select your contact, and press **P** to open the Path Editor. Set a direct (zero-hop) or multi-hop path and save.
|
||||
|
||||
**Sending a voice note:**
|
||||
|
||||
1. Press the **Microphone key** to open the Voice Messages screen
|
||||
2. Press and **hold** the Microphone key to record — release to stop (max 12 seconds)
|
||||
3. Press **S** to open the contact picker — contacts with a direct path appear at the top
|
||||
4. Scroll to your contact and press **Enter** to send
|
||||
4. Tap or scroll to your contact, then press **Enter** to send
|
||||
|
||||
Packets are sent with staggered 3-second delays to avoid congesting the channel. On a 62.5 kHz / SF7 radio preset (e.g. Australia Narrow), a 5-second voice note arrives in roughly 20 seconds and a 12-second recording in about 42 seconds.
|
||||
|
||||
@@ -684,15 +519,30 @@ Packets are sent with staggered 3-second delays to avoid congesting the channel.
|
||||
* **On a T-Deck Pro Audio device:** the voice message screen opens automatically and the message plays through the headphone jack. **Headphones are recommended** — the built-in speaker is very quiet.
|
||||
* **Via Meck-Mycelium:** voice messages appear as "🎙️ Voice message" bubbles in the DM view. Tap to play. Codec2 decoding happens entirely in the browser via WebAssembly.
|
||||
|
||||
> **Note:** Voice recording and sending requires the **Audio variant** hardware (PCM5102A DAC). Receiving and playback works on all Audio variants. Non-audio Meck devices can receive and relay voice packets but cannot play them locally — use the Meck-Mycelium web app for playback on those devices.
|
||||
> **Note:** Voice recording and sending requires the **Audio variant** hardware (PCM5102A DAC). 4G and standalone variants cannot record or send voice notes, but any device connected to Meck-Mycelium can receive and play them.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| Mic (hold) | Record voice note |
|
||||
| Mic (release) | Stop recording |
|
||||
| S | Open contact picker to send |
|
||||
| Enter | Send to selected contact |
|
||||
| Q | Back to home screen |
|
||||
### Contact Management — Select, Export & Import
|
||||
|
||||
The contacts screen supports a **select mode** for fine-grained contact management, as well as full export and import with MeshCore companion app compatibility.
|
||||
|
||||
**Select mode (T-Deck Pro):** Long-press **Enter** on the Contacts screen to enter select mode. Use **W / S** to scroll and press **Enter** to toggle selection on individual contacts.
|
||||
|
||||
**Select mode (T5S3):** Long-press the screen on the Contacts screen to enter select mode. Tap individual contacts to toggle their selection.
|
||||
|
||||
| Action | T-Deck Pro | T5S3 |
|
||||
|--------|-----------|------|
|
||||
| Enter select mode | Long-press Enter | Long-press screen |
|
||||
| Toggle selection | Enter | Tap |
|
||||
| Export selected | X | — |
|
||||
| Bulk delete selected | Shift+Del (double-confirm) | — |
|
||||
| Toggle favourite | F | — |
|
||||
| Exit select mode | Q | Boot button |
|
||||
|
||||
**Exporting contacts:** Press **X** to export. If contacts are selected in select mode, only those contacts are exported. If no contacts are selected (pressing **X** outside select mode), all contacts are exported. Contacts are saved as a JSON file to `/meshcore/meshcore_contacts.json` on the SD card with a timestamp in the filename. The JSON format is compatible with MeshCore companion apps — you can transfer the file to your phone or computer and import it into the Android, iOS, or web companion app.
|
||||
|
||||
**Importing contacts:** Press **R** on the Contacts screen (outside select mode) to import. The importer automatically finds the most recent export file by looking at the timestamp in the filename. Import is a non-destructive merge — new contacts are added without removing existing ones.
|
||||
|
||||
**Viewing and transferring exports:** Browse and download your exported JSON files using **OTA Tools → SD File Manager** (Settings → OTA Tools → SD File Manager — connects via WiFi AP and browser), or remove the SD card and copy the files directly.
|
||||
|
||||
### Lock Screen (T-Deck Pro)
|
||||
|
||||
@@ -702,50 +552,94 @@ Double-click the Boot button again to unlock and return to whatever screen you w
|
||||
|
||||
An auto-lock timer can be configured in **Settings → Auto Lock** (None / 2 / 5 / 10 / 15 / 30 minutes of idle time).
|
||||
|
||||
### Shutdown (T-Deck Pro)
|
||||
|
||||
The home screen includes a **Shutdown** page. Selecting it powers the device off completely — the ESP32-S3 enters deep sleep with no wake sources, peripheral power is cut, and the LoRa module is powered down. Only a hardware reset (reset button) or USB power-on will wake the device. This is distinct from the auto-lock hibernate, which maintains wake-on-LoRa capability.
|
||||
|
||||
---
|
||||
|
||||
## Remote Repeater (T-Deck Pro 4G)
|
||||
|
||||
> **TODO — This section needs full documentation.** The feature is implemented and shipping. Draft outline below.
|
||||
The remote repeater firmware turns a T-Deck Pro 4G into a self-contained MeshCore repeater with remote management over the internet. Insert an active SIM card with a data plan, configure your MQTT broker credentials on the SD card, and you can log in and manage the repeater from anywhere in the world via the [Meck-Mycelium remote dashboard](https://pelgraine.github.io/Meck-Mycelium).
|
||||
|
||||
The remote repeater variant (`meck_remote_repeater`) turns a T-Deck Pro 4G board into a dedicated MeshCore repeater with cellular MQTT remote management. The repeater functions as a normal MeshCore repeater on the mesh — it forwards packets and responds to guest logins — but **admin management (clock sync, send advert, reboot, get status, configuration) is performed remotely via MQTT** through the [Meck-Mycelium dashboard](https://pelgraine.github.io/Meck-Mycelium), not via the standard mesh admin password login. The device connects to an MQTT broker (HiveMQ Cloud recommended — free tier available) over cellular data, publishing telemetry (uptime, battery, signal strength, temperature, neighbour count) and subscribing to admin commands.
|
||||
The device connects to a free HiveMQ Cloud MQTT broker over the cellular network, publishing status updates (uptime, battery, signal strength, temperature, neighbour count) and subscribing to commands. The web dashboard lets you view live telemetry, sync the repeater's clock, trigger adverts, reboot the device, and more — all from a browser.
|
||||
|
||||
**Sections to write:**
|
||||
This is ideal for deploying repeaters in remote or hard-to-reach locations where you can't physically visit to administer them, but where cellular coverage exists.
|
||||
|
||||
- **Requirements** — T-Deck Pro 4G (A7682E), active SIM with data plan, SD card, MQTT broker account
|
||||
- **Setting up HiveMQ Cloud** — step-by-step free account creation, cluster setup, credentials
|
||||
- **SD card configuration** — `/remote/mqtt.cfg` (broker, port, username, password, device ID) and optional `/remote/apn.cfg`
|
||||
- **Deploying** — flash `meck_remote_repeater`, insert SIM and SD, boot sequence, display status indicators
|
||||
- **Dashboard usage** — connecting Meck-Mycelium to your MQTT broker, available commands (clock sync, send advert, reboot, get status), telemetry display
|
||||
- **Troubleshooting** — common issues (SIM not registering, MQTT auth failures, APN auto-detection)
|
||||
### Remote Repeater Build Variant
|
||||
|
||||
---
|
||||
| Variant | Environment | Companion | 4G Modem | Audio | Max Contacts |
|
||||
|---------|------------|-----------|----------|-------|-------------|
|
||||
| Remote Repeater (4G) | `meck_remote_repeater` | — | A7682E (MQTT) | — | — |
|
||||
|
||||
## WiFi Repeater
|
||||
The remote repeater variant does not function as a companion device or chat client. It operates exclusively as a MeshCore repeater node with cellular MQTT telemetry and remote command support.
|
||||
|
||||
> **TODO — This section needs full documentation.** The feature is implemented. Draft outline below.
|
||||
### Setting Up HiveMQ Cloud (Free MQTT Broker)
|
||||
|
||||
The WiFi repeater variants turn a device into a dedicated MeshCore repeater with WiFi MQTT remote management — similar to the cellular remote repeater but using WiFi instead of 4G. The repeater forwards mesh traffic and responds to guest logins as normal, but **admin management is performed remotely via MQTT** through the Meck-Mycelium dashboard, not via the standard mesh admin password login. Available for the following platforms:
|
||||
The remote repeater requires an MQTT broker to relay telemetry and commands between the device and the web dashboard. [HiveMQ Cloud](https://www.hivemq.com/mqtt-cloud-broker/) offers a free tier that is more than sufficient.
|
||||
|
||||
| Variant | Environment | Platform |
|
||||
|---------|------------|----------|
|
||||
| T-Deck Pro WiFi Repeater | `meck_wifi_repeater` | LilyGo T-Deck Pro |
|
||||
| T5S3 WiFi Repeater | `meck_wifi_repeater_t5s3` | LilyGo T5S3 E-Paper Pro |
|
||||
| Heltec V3 WiFi Repeater | `meck_wifi_repeater_heltec_v3` | Heltec V3 |
|
||||
| Heltec V4 WiFi Repeater | `meck_wifi_repeater_heltec_v4` | Heltec V4 |
|
||||
| Heltec V4 WiFi Repeater (headless) | `meck_wifi_repeater_heltec_v4_headless` | Heltec V4 (no display) |
|
||||
**Step 1 — Create a HiveMQ Cloud account:**
|
||||
|
||||
**Sections to write:**
|
||||
1. Go to https://console.hivemq.cloud/ and sign up for a free account
|
||||
2. After logging in, a **Serverless** cluster is created automatically
|
||||
3. Note the **cluster URL** shown on the overview page — it will look something like `abc123def456.s1.eu.hivemq.cloud`
|
||||
4. Note the **port** — for the T-Deck Pro 4G, use the TLS port which is typically **8883**
|
||||
|
||||
- **Requirements** — device, WiFi network, MQTT broker account, SD card (T-Deck Pro / T5S3) or SPIFFS config (Heltec V4)
|
||||
- **SD card configuration** — `/remote/wifi.cfg` (supports multiple SSIDs) and `/remote/mqtt.cfg`
|
||||
- **Heltec V4 specifics** — no SD card slot, config stored in SPIFFS, headless vs display variant
|
||||
- **OTA updates** — NTP time sync, HTTP firmware download over WiFi
|
||||
- **Dashboard** — same Meck-Mycelium dashboard as the cellular remote repeater
|
||||
**Step 2 — Create MQTT credentials:**
|
||||
|
||||
1. In the HiveMQ console, go to **Access Management**
|
||||
2. Create a new set of credentials — enter a **username** and **password**
|
||||
3. Save these — you'll need them for the SD card configuration file
|
||||
|
||||
**Step 3 — Note your connection details:**
|
||||
|
||||
You'll need these four values for the config file:
|
||||
- **Host:** your cluster URL (e.g. `abc123def456.s1.eu.hivemq.cloud`)
|
||||
- **Port:** `8883`
|
||||
- **Username:** the credentials you just created
|
||||
- **Password:** the credentials you just created
|
||||
|
||||
### Remote Repeater SD Card Configuration
|
||||
|
||||
Create a file called `mqtt.cfg` in the root of the SD card with your MQTT broker details:
|
||||
|
||||
```
|
||||
abc123.s1.eu.hivemq.cloud
|
||||
8883
|
||||
your_hivemq_username
|
||||
your_hivemq_password
|
||||
repeater-name
|
||||
```
|
||||
|
||||
The `topic` field sets the base MQTT topic. The device publishes status to `<topic>/status` and subscribes to commands on `<topic>/cmd`. If you're running multiple remote repeaters, give each one a unique topic (e.g. `meck/repeater/hilltop`, `meck/repeater/valley`).
|
||||
|
||||
**SD Card Folder Structure:**
|
||||
|
||||
```
|
||||
SD Card
|
||||
├── mqtt.cfg (MQTT broker credentials — required)
|
||||
├── meshcore/
|
||||
│ ├── contacts.bin (auto-created, repeater contact table)
|
||||
│ └── ...
|
||||
└── ...
|
||||
```
|
||||
|
||||
### Deploying the Remote Repeater
|
||||
|
||||
1. Flash `v1.6-Meck-Remote-Repeater-merged.bin` to your T-Deck Pro 4G using the MeshCore Web Flasher or esptool.py
|
||||
2. Insert a nano SIM card with an active data plan
|
||||
3. Insert an SD card with your `mqtt.cfg` file
|
||||
4. Power on the device — the modem will register on the cellular network (red LED indicates modem power)
|
||||
5. The device boots as a MeshCore repeater, connects to the cellular network, and begins publishing status updates to your MQTT broker
|
||||
6. Open the Meck-Mycelium remote dashboard to connect and manage it
|
||||
|
||||
The e-ink display shows the repeater's current status including node name, uptime, battery level, LoRa activity, cellular signal strength, and MQTT connection state.
|
||||
|
||||
### Remote Dashboard (Meck-Mycelium)
|
||||
|
||||
Open https://pelgraine.github.io/Meck-Mycelium and navigate to the **Remote** tab. Enter the same MQTT broker credentials and topic from your `mqtt.cfg` file. The dashboard connects directly to HiveMQ Cloud via secure WebSocket (no data passes through any third-party server) and displays live telemetry from your remote repeater.
|
||||
|
||||
**Dashboard features:**
|
||||
- Live status: uptime, battery, cellular signal strength, temperature, neighbour count
|
||||
- Clock sync: push your browser's clock to the repeater
|
||||
- Send advert: trigger a MeshCore advertisement broadcast
|
||||
- Reboot: remotely restart the device
|
||||
|
||||
---
|
||||
|
||||
@@ -757,12 +651,11 @@ The LilyGo T5S3 E-Paper Pro (V2, H752-B) is a 4.7-inch e-ink device with capacit
|
||||
|
||||
| Variant | Environment | BLE | WiFi | Web Reader | Max Contacts |
|
||||
|---------|------------|-----|------|------------|-------------|
|
||||
| Standalone | `meck_t5s3_standalone` | — | — | No | 2,000 |
|
||||
| BLE Companion | `meck_t5s3_ble` | Yes | — | No | 2,000 |
|
||||
| WiFi Companion | `meck_t5s3_wifi` | — | Yes (TCP:5000) | Yes | 2,000 |
|
||||
| WiFi Repeater | `meck_wifi_repeater_t5s3` | — | Yes (MQTT) | No | — |
|
||||
| Standalone | `meck_t5s3_standalone` | — | — | No | 1,500 |
|
||||
| BLE Companion | `meck_t5s3_ble` | Yes | — | No | 500 |
|
||||
| WiFi Companion | `meck_t5s3_wifi` | — | Yes (TCP:5000) | Yes | 1,500 |
|
||||
|
||||
The WiFi variant connects to the MeshCore web app or meshcore.js over your local network. The web reader shares the same WiFi connection — no extra setup needed. The WiFi Repeater variant is a dedicated remote repeater — see [WiFi Repeater](#wifi-repeater) for details on MQTT-based admin management.
|
||||
The WiFi variant connects to the MeshCore web app or meshcore.js over your local network. The web reader shares the same WiFi connection — no extra setup needed.
|
||||
|
||||
### Touch Navigation
|
||||
|
||||
@@ -826,9 +719,7 @@ Since the T5S3 has no physical keyboard, a full-screen QWERTY virtual keyboard a
|
||||
The virtual keyboard supports:
|
||||
- QWERTY letter layout with a symbol/number layer (tap the **123** key to switch)
|
||||
- Shift toggle for uppercase
|
||||
- Backspace (UTF-8 aware — correctly deletes multi-byte emoji) and Enter keys
|
||||
- **Emoji picker** — tap the **$** key to open a scrollable 8-column grid of 77 emoji sprites with page indicators. Tap an emoji to insert it inline in your message. Tap **Back** to return to the keyboard. Faces and emotions are grouped first for quick access.
|
||||
- Inline emoji rendering — emoji appear as pixel sprites in the text field as you type
|
||||
- Backspace and Enter keys
|
||||
- Phantom keystroke prevention (a brief cooldown after the keyboard opens prevents accidental taps)
|
||||
|
||||
Tap keys to type. Tap **Enter** to submit, or press the **Boot button** to cancel and close the keyboard.
|
||||
@@ -841,13 +732,12 @@ The CardKB is auto-detected on the I2C bus at address `0x5F`. No configuration i
|
||||
|
||||
### Display Settings
|
||||
|
||||
The T5S3 Settings screen includes display options shared with the T-Deck Pro, plus one T5S3-specific setting:
|
||||
The T5S3 Settings screen includes one additional display option not available on the T-Deck Pro:
|
||||
|
||||
| Setting | Description |
|
||||
|---------|-------------|
|
||||
| **Dark Mode** | Inverts the display — white text on black background. Tap to toggle on/off. Available on both T-Deck Pro and T5S3. |
|
||||
| **Larger Font** | Increases text size on channel messages, contacts, DM inbox, and repeater admin screens. Tap to toggle on/off. Available on both T-Deck Pro and T5S3. |
|
||||
| **Font Style** | Choose between Classic (FreeSans), Noto Sans, or Montserrat. Swipe left/right to cycle, tap to apply. Available on both T-Deck Pro and T5S3. |
|
||||
| **Portrait Mode** | Rotates the display 90° from landscape (960×540) to portrait (540×960). Touch coordinates are automatically remapped. Text reader layout recalculates on orientation change. T5S3 only. |
|
||||
|
||||
These settings are persisted and survive reboots.
|
||||
@@ -887,52 +777,20 @@ The UTC offset is configured in the Settings screen (same as T-Deck Pro) and is
|
||||
| Gesture | Action |
|
||||
|---------|--------|
|
||||
| Swipe up / down | Scroll messages |
|
||||
| Swipe left / right | Open channel picker — shows all channels and DM inbox in a vertical bubble list with unread badges. Tap to select. |
|
||||
| Swipe left / right | Switch between channels (swipe left past the last channel to reach the DM inbox) |
|
||||
| Tap footer area | View relay path of last received message |
|
||||
| Tap path overlay | Dismiss overlay |
|
||||
| Long press (touch) | Open virtual keyboard to compose message to current channel |
|
||||
|
||||
#### Contacts
|
||||
|
||||
The contacts list shows all known nodes sorted by most recently heard, with type prefix, estimated hop count, and time since last advert. See the [T-Deck Pro Contacts Screen](#contacts-screen) section for an explanation of the type prefix and hop count display — the same conventions apply on the T5S3.
|
||||
|
||||
**Normal mode**
|
||||
|
||||
| Gesture | Action |
|
||||
|---------|--------|
|
||||
| Swipe up / down | Scroll through contacts |
|
||||
| Swipe left / right | Cycle contact filter (All → Chat → Rptr → Room → Sens → Fav) |
|
||||
| Tap | Enter select mode (tapped contact is pre-selected) |
|
||||
| Swipe left / right | Cycle contact filter (All → Chat → Repeater → Room → Sensor → Favourites) |
|
||||
| Tap | Select contact |
|
||||
| Long press on Chat contact | View unread DMs (if any), then compose DM |
|
||||
| Long press on Repeater/RS contact | Open repeater admin login |
|
||||
|
||||
> **Note:** The **Fav** filter shows only contacts you have marked as favourites. If it appears empty, no contacts have been favourited yet — use select mode (tap a contact) and then long-press to mark favourites.
|
||||
|
||||
**Select mode** — tap any contact row to enter select mode. The tapped contact is pre-selected (shown with `*`). Swipe or tap to navigate and toggle selections. You can also use a **two-finger tap** anywhere on the contacts screen to toggle select mode on and off.
|
||||
|
||||
| Gesture | Action |
|
||||
|---------|--------|
|
||||
| Tap | Toggle selection on tapped row |
|
||||
| Swipe left | Select all contacts in current filter |
|
||||
| Swipe right | Deselect all |
|
||||
| Two-finger tap | Toggle select mode on/off |
|
||||
| Long press | Exit select mode (confirm favourites / deletions first) |
|
||||
|
||||
Batch operations (favourite toggle, delete) are triggered from the overlay that appears after exiting select mode with contacts selected.
|
||||
|
||||
**Adding contacts**
|
||||
|
||||
1. **Automatic** — if Settings → Contacts → Add Mode is set to *Auto All*, nodes are added as their adverts are heard. *Custom* mode adds only nodes matching the enabled type toggles (Companion, Repeater, Room Server, Sensor). *Manual Only* disables auto-add.
|
||||
|
||||
2. **From the Last Heard screen** — tap the **Discover** tile (or access via the home page on non-WiFi builds) and navigate to Last Heard. Tap any entry to add it to contacts, or tap an existing contact to remove it (favourites require a second tap within 3 seconds to confirm). Entries show `[+]` if already in contacts, `[★]` if a favourite.
|
||||
|
||||
> **Note:** The Last Heard list holds up to 1,000 entries in PSRAM, and advert data is stored persistently on the SD card — so contacts can be added long after the original advertisement was received, even across reboots. This makes Last Heard especially useful when auto-add is set to *Manual Only*, as it provides a passive catalogue of every node heard on the network.
|
||||
|
||||
3. **From the Discovery screen** — tap the Discover tile and run an active scan. Tap any result to add it to contacts.
|
||||
|
||||
**Deleting contacts**
|
||||
|
||||
Tap a contact to enter select mode, select the contacts to remove, exit select mode, and choose delete from the confirmation overlay.
|
||||
| Long press on Repeater contact | Open repeater admin login |
|
||||
|
||||
#### Text Reader (File List)
|
||||
|
||||
@@ -1014,17 +872,12 @@ Tap a contact to enter select mode, select the contacts to remove, exit select m
|
||||
|
||||
## Meck-Mycelium Web App
|
||||
|
||||
The [Meck-Mycelium web app](https://pelgraine.github.io/Meck-Mycelium) is a browser-based companion that connects to your MeshCore device via BLE (using WebBLE in Chrome) or to your MQTT broker for remote repeater management.
|
||||
[Meck-Mycelium](https://pelgraine.github.io/Meck-Mycelium) is a browser-based companion app that connects to your MeshCore device via BLE (using WebBLE in Chrome). It is a fork of [WattleFoxxo's Mycelium](https://github.com/WattleFoxxo/Mycelium) PWA, extended with Meck-specific features:
|
||||
|
||||
**Features:**
|
||||
- **Voice message playback** — voice notes sent from a Meck Audio device appear as tappable "🎙️ Voice message" bubbles in the DM view. Codec2 decoding happens entirely in the browser via WebAssembly — no native app or plugin required.
|
||||
- **Remote repeater dashboard** — connect to your MQTT broker to view live telemetry from remote repeater devices, send commands, sync clocks, and reboot remotely.
|
||||
|
||||
- **Voice message playback** — voice notes sent from a Meck Audio device appear as tappable playback bubbles in the DM view. Codec2 decoding happens entirely in the browser via WebAssembly — no app install or audio hardware needed on the receiving end.
|
||||
- **Remote repeater dashboard** — connect to your MQTT broker to administer remote repeater devices (cellular or WiFi). View live telemetry, send admin commands (clock sync, send advert, reboot, get status), and manage repeaters that are out of LoRa range. This replaces the standard mesh admin password login for remote repeater variants.
|
||||
- **Standard companion features** — messaging, contacts, channel messages via BLE.
|
||||
|
||||
Open **https://pelgraine.github.io/Meck-Mycelium** in Chrome on your phone or computer.
|
||||
|
||||
> **Note:** WebBLE requires Chrome (or a Chromium-based browser). Safari and Firefox do not support WebBLE.
|
||||
Open **https://pelgraine.github.io/Meck-Mycelium** in Chrome on your phone or computer. WebBLE requires Chrome or a Chromium-based browser (Edge, Brave, etc.) — Firefox and Safari do not support WebBLE.
|
||||
|
||||
---
|
||||
|
||||
@@ -1078,7 +931,6 @@ The companion firmware can be connected to via BLE (T-Deck Pro and T5S3 BLE vari
|
||||
> **Note:** On both the T-Deck Pro and T5S3, BLE and WiFi are disabled by default at boot. On the T-Deck Pro, navigate to the Bluetooth or WiFi home page and press Enter to enable. On the T5S3, navigate to the Bluetooth home page and long-press the screen to toggle BLE on.
|
||||
|
||||
- Web: https://app.meshcore.nz
|
||||
- Meck-Mycelium: https://pelgraine.github.io/Meck-Mycelium (voice playback, remote repeater dashboard)
|
||||
- Android: https://play.google.com/store/apps/details?id=com.liamcottle.meshcore.android
|
||||
- iOS: https://apps.apple.com/us/app/meshcore/id6742354151?platform=iphone
|
||||
- NodeJS: https://github.com/liamcottle/meshcore.js
|
||||
@@ -1086,7 +938,7 @@ The companion firmware can be connected to via BLE (T-Deck Pro and T5S3 BLE vari
|
||||
|
||||
## 🛠 Hardware Compatibility
|
||||
|
||||
MeshCore is designed for devices listed in the [MeshCore Flasher](https://flasher.meshcore.io). Meck specifically targets the LilyGo T-Deck Pro, LilyGo T5S3 E-Paper Pro, Heltec V3 (remote repeater only), and Heltec V4 (remote repeater only).
|
||||
MeshCore is designed for devices listed in the [MeshCore Flasher](https://flasher.meshcore.co.uk). Meck specifically targets the LilyGo T-Deck Pro and LilyGo T5S3 E-Paper Pro.
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -1123,24 +975,9 @@ There are a number of fairly major features in the pipeline, with no particular
|
||||
- [X] Roomserver message handling and mark-read on login
|
||||
- [X] Alarm clock with custom MP3 sounds (audio variant)
|
||||
- [X] Customised user option for larger-font mode
|
||||
- [X] Voice notes over LoRa (Codec2, audio variant)
|
||||
- [X] Contact select mode with batch favourite, export, import, and delete
|
||||
- [X] Path editor for manual contact route management
|
||||
- [X] Remote repeater with cellular MQTT admin management (4G variant)
|
||||
- [X] WiFi remote repeater with MQTT admin management
|
||||
- [X] SD File Manager via OTA Tools
|
||||
- [X] 2,000 contact support (PSRAM, all variants)
|
||||
- [X] Channel picker screen with unread badges
|
||||
- [X] Region scope (MeshCore v1.15+ compatibility)
|
||||
- [X] Selectable font styles (Classic, Noto Sans, Montserrat)
|
||||
- [X] Expanded emoji picker (77 emoji, reordered, wrap scrolling)
|
||||
- [X] 1,000-entry advert path cache (PSRAM)
|
||||
- [X] Accented character / diacritics support (Czech, Polish, French, German, Latin Extended)
|
||||
- [X] Page scroll (Shift+W/S) on all list screens
|
||||
- [X] True power off (deep sleep, no wake sources)
|
||||
- [X] BLE 2M PHY, DLE, and faster write interval
|
||||
- [X] Trace route screen with contact picker and typed-path entry (v1.9)
|
||||
- [X] DM message persistence across reboots (v1.9)
|
||||
- [X] Voice notes over LoRa (audio variant) with Meck-Mycelium web app playback
|
||||
- [X] Remote repeater firmware with cellular MQTT management (4G variant)
|
||||
- [X] Contact management: select mode, selective export, JSON import/export, bulk delete
|
||||
- [ ] Fix M4B rendering to enable chaptered audiobook playback
|
||||
- [ ] Better JPEG and PNG decoding
|
||||
- [ ] Improve EPUB rendering and EPUB format handling
|
||||
@@ -1167,67 +1004,33 @@ There are a number of fairly major features in the pipeline, with no particular
|
||||
- [X] DM inbox with per-contact unread indicators
|
||||
- [X] Roomserver message handling and mark-read on login
|
||||
- [X] Customised user option for larger-font mode
|
||||
- [X] Contact select mode with batch favourite and delete
|
||||
- [X] WiFi remote repeater with MQTT admin management
|
||||
- [X] 2,000 contact support (PSRAM, all variants)
|
||||
- [X] Channel picker screen with vertical bubble list layout
|
||||
- [X] Region scope (MeshCore v1.15+ compatibility)
|
||||
- [X] Selectable font styles (Classic, Noto Sans, Montserrat)
|
||||
- [X] Virtual keyboard emoji grid with scrollable pages
|
||||
- [X] Accented character / diacritics support (Czech, Polish, French, German, Latin Extended)
|
||||
- [X] DM message persistence across reboots (v1.9)
|
||||
- [ ] Improve EPUB rendering and EPUB format handling
|
||||
|
||||
**Heltec V4:**
|
||||
- [X] WiFi remote repeater with MQTT admin management
|
||||
- [X] Headless WiFi repeater variant (no display)
|
||||
|
||||
**Heltec V3:**
|
||||
- [X] WiFi remote repeater with MQTT admin management
|
||||
|
||||
**In development (WIP):**
|
||||
- [ ] T-Deck Pro MAX — ESP32-S3 with XL9555 I/O expander, combined 4G (A7682E) + audio (ES8311), working e-ink front-light, 1500 mAh battery. Variant files created; deferred until hardware ships.
|
||||
- [ ] T-Echo Card — nRF52840 (BLE-native) with SX1262, SSD1315 OLED (72×40), L76K GPS, speaker, PDM mic, IMU, solar charging, NFC. Preliminary variant files created; awaiting hardware.
|
||||
|
||||
## 📞 Get Support
|
||||
|
||||
- Join [MeshCore Discord](https://discord.gg/KWFeY45sN) to chat with the developers and get help from the community.
|
||||
- Join [MeshCore Discord](https://discord.gg/BMwCtwHj5V) to chat with the developers and get help from the community.
|
||||
|
||||
## 📜 License
|
||||
|
||||
The upstream [MeshCore](https://github.com/meshcore-dev/MeshCore) library is released under the **MIT License** (Copyright © 2025 Scott Powell / rippleradios.com). Meck-specific code (UI screens, display helpers, device integration) is also provided under the MIT License.
|
||||
|
||||
However, this firmware links against libraries with different license terms. Because some dependencies use the **GPL-3.0** copyleft license (GxEPD2, ESP32-audioI2S) and others use **LGPL-2.1** (Codec2, ESPAsyncWebServer, Arduino_LPS22HB), the combined firmware binary is effectively subject to GPL-3.0 obligations when distributed. Please review the individual licenses below if you intend to redistribute or modify this firmware.
|
||||
However, this firmware links against libraries with different license terms. Because two dependencies use the **GPL-3.0** copyleft license, the combined firmware binary is effectively subject to GPL-3.0 obligations when distributed. Please review the individual licenses below if you intend to redistribute or modify this firmware.
|
||||
|
||||
### Third-Party Libraries
|
||||
|
||||
| Library | License | Author / Source |
|
||||
|---------|---------|-----------------|
|
||||
| [MeshCore](https://github.com/meshcore-dev/MeshCore) | MIT | Scott Powell / rippleradios.com |
|
||||
| [RadioLib](https://github.com/jgromes/RadioLib) | MIT | Jan Gromeš |
|
||||
| [GxEPD2](https://github.com/ZinggJM/GxEPD2) | GPL-3.0 | Jean-Marc Zingg (T-Deck Pro) |
|
||||
| [FastEPD](https://github.com/bitbank2/FastEPD) | Apache-2.0 | Larry Bank / bitbank2 (T5S3) |
|
||||
| [GxEPD2](https://github.com/ZinggJM/GxEPD2) | GPL-3.0 | Jean-Marc Zingg |
|
||||
| [FastEPD](https://github.com/bitbank2/FastEPD) | Apache-2.0 | Larry Bank (bitbank2) |
|
||||
| [ESP32-audioI2S](https://github.com/schreibfaul1/ESP32-audioI2S) | GPL-3.0 | schreibfaul1 (Wolle) |
|
||||
| [Adafruit GFX Library](https://github.com/adafruit/Adafruit-GFX-Library) | BSD | Adafruit |
|
||||
| [SensorLib](https://github.com/lewisxhe/SensorLib) | MIT | Lewis He (T5S3 touch/RTC) |
|
||||
| [ESP32-audioI2S](https://github.com/schreibfaul1/ESP32-audioI2S) | GPL-3.0 | schreibfaul1 / Wolle |
|
||||
| [Codec2](https://github.com/sh123/esp32_codec2_arduino) | LGPL-2.1 | sh123 (ESP32 port) |
|
||||
| [JPEGDEC](https://github.com/bitbank2/JPEGDEC) | Apache-2.0 | Larry Bank / bitbank2 |
|
||||
| [PNGdec](https://github.com/bitbank2/PNGdec) | Apache-2.0 | Larry Bank / bitbank2 |
|
||||
| [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer) | LGPL-2.1 | Hristo Gochkov / me-no-dev (OTA) |
|
||||
| [PubSubClient](https://github.com/knolleary/pubsubclient) | MIT | Nick O'Leary (MQTT) |
|
||||
| [Arduino Crypto](https://github.com/rweather/arduinolibs) | MIT | Rhys Weatherley |
|
||||
| [base64](https://github.com/Densaugeo/base64_arduino) | MIT | densaugeo |
|
||||
| [RadioLib](https://github.com/jgromes/RadioLib) | MIT | Jan Gromeš |
|
||||
| [SensorLib](https://github.com/lewisxhe/SensorLib) | MIT | Lewis He |
|
||||
| [JPEGDEC](https://github.com/bitbank2/JPEGDEC) | Apache-2.0 | Larry Bank (bitbank2) |
|
||||
| [PNGdec](https://github.com/bitbank2/PNGdec) | Apache-2.0 | Larry Bank (bitbank2) |
|
||||
| [CRC32](https://github.com/bakercp/CRC32) | MIT | Christopher Baker |
|
||||
| [RTClib](https://github.com/adafruit/RTClib) | MIT | Adafruit |
|
||||
| [Melopero RV3028](https://github.com/melopero/Melopero_RV-3028_Arduino_Library) | MIT | Melopero |
|
||||
| [MicroNMEA](https://github.com/stevemarple/MicroNMEA) | MIT | Steve Marple (GPS) |
|
||||
| [CayenneLPP](https://github.com/ElectronicCats/CayenneLPP) | MIT | Electronic Cats |
|
||||
| [Adafruit ST7735/ST7789](https://github.com/adafruit/Adafruit-ST7735-Library) | MIT | Adafruit (Heltec V4 TFT) |
|
||||
| [INA226](https://github.com/RobTillaart/INA226) | MIT | Rob Tillaart |
|
||||
| [Arduino_LPS22HB](https://github.com/arduino-libraries/Arduino_LPS22HB) | LGPL-2.1 | Arduino |
|
||||
| Adafruit sensor drivers¹ | MIT / BSD | Adafruit |
|
||||
| [Sensirion I2C SHT4x](https://github.com/Sensirion/arduino-i2c-sht4x) | BSD-3-Clause | Sensirion |
|
||||
|
||||
¹ Includes INA219, INA260, INA3221, AHTX0, BME280, BMP280, BME680, BMP085, SHTC3, MLX90614, VL53L0X — all MIT or BSD licensed. Used via the sensor manager for optional environmental monitoring.
|
||||
| [base64](https://github.com/Densaugeo/base64_arduino) | MIT | densaugeo |
|
||||
| [Arduino Crypto](https://github.com/rweather/arduinolibs) | MIT | Rhys Weatherley |
|
||||
|
||||
Full license texts for each dependency are available in their respective repositories linked above.
|
||||
+21
-124
@@ -57,6 +57,7 @@ All commands follow a simple pattern: `get` to read, `set` to write.
|
||||
| `get radio` | All radio params in one line |
|
||||
| `get utc` | UTC offset (hours) |
|
||||
| `get notify` | Keyboard flash notification (on/off) |
|
||||
| `get largefont` | Larger font mode (on/off) |
|
||||
| `get gps` | GPS status and interval |
|
||||
| `get pin` | BLE pairing PIN |
|
||||
| `get path.hash.mode` | Path hash size (0=1-byte, 1=2-byte, 2=3-byte) |
|
||||
@@ -64,12 +65,10 @@ All commands follow a simple pattern: `get` to read, `set` to write.
|
||||
| `get af` | Airtime factor |
|
||||
| `get multi.acks` | Redundant ACKs (0 or 1) |
|
||||
| `get int.thresh` | Interference threshold (0=disabled) |
|
||||
| `get tx.fail.threshold` | TX fail reset threshold (0=disabled, default 3) |
|
||||
| `get rx.fail.threshold` | RX stuck reboot threshold (0=disabled, default 3) |
|
||||
| `get tx.fail.reset` | TX fail reset threshold (0=disabled, default 3) |
|
||||
| `get rx.fail.reboot` | RX stuck reboot threshold (0=disabled, default 3) |
|
||||
| `get gps.baud` | GPS baud rate (0=compile-time default) |
|
||||
| `get region` | Default region scope (e.g. `au-nsw`, or `none`) |
|
||||
| `get channels` | List all channels with index numbers and region scopes |
|
||||
| `get channel.scope <idx>` | Show region scope for a specific channel |
|
||||
| `get channels` | List all channels with index numbers |
|
||||
| `get presets` | List all radio presets with parameters |
|
||||
| `get pubkey` | Device public key (hex) |
|
||||
| `get firmware` | Firmware version string |
|
||||
@@ -168,6 +167,15 @@ set notify on
|
||||
set notify off
|
||||
```
|
||||
|
||||
#### Larger Font Mode
|
||||
|
||||
Toggle larger text on channel messages, contacts, DM inbox, and repeater admin screens:
|
||||
|
||||
```
|
||||
set largefont on
|
||||
set largefont off
|
||||
```
|
||||
|
||||
#### BLE PIN
|
||||
|
||||
```
|
||||
@@ -240,8 +248,8 @@ Values: 0 (disabled, default) or 14+ (14 is the typical setting). Values between
|
||||
Automatically resets the radio hardware after this many consecutive failed transmission attempts. This recovers from "zombie radio" states where the SX1262 stops responding to send commands.
|
||||
|
||||
```
|
||||
set tx.fail.threshold 3
|
||||
set tx.fail.threshold 0
|
||||
set tx.fail.reset 3
|
||||
set tx.fail.reset 0
|
||||
```
|
||||
|
||||
Values: 0 (disabled) or 1–10 (default: 3). After the threshold is reached, the radio is reset and the failed packet is re-queued.
|
||||
@@ -251,8 +259,8 @@ Values: 0 (disabled) or 1–10 (default: 3). After the threshold is reached, the
|
||||
Automatically reboots the device after this many consecutive RX-stuck recovery failures. An RX-stuck event occurs when the radio is not in receive mode for 8 seconds despite automatic recovery attempts.
|
||||
|
||||
```
|
||||
set rx.fail.threshold 3
|
||||
set rx.fail.threshold 0
|
||||
set rx.fail.reboot 3
|
||||
set rx.fail.reboot 0
|
||||
```
|
||||
|
||||
Values: 0 (disabled) or 1–10 (default: 3). A full device reboot is a last resort — this should only trigger in rare cases of persistent radio hardware malfunction.
|
||||
@@ -268,18 +276,6 @@ set gps.baud 0
|
||||
|
||||
Valid rates: 0 (default), 4800, 9600, 19200, 38400, 57600, 115200.
|
||||
|
||||
#### Backlight (T5S3 E-Paper Pro Only)
|
||||
|
||||
Control the front-light on the T5S3 display:
|
||||
|
||||
```
|
||||
set backlight on
|
||||
set backlight off
|
||||
set backlight 128
|
||||
```
|
||||
|
||||
Values: `on`, `off`, or a brightness level from 0–255.
|
||||
|
||||
### Channel Management
|
||||
|
||||
#### List Channels
|
||||
@@ -291,13 +287,11 @@ get channels
|
||||
Output:
|
||||
|
||||
```
|
||||
[0] #public [*]
|
||||
[1] #meck-test [au-nsw]
|
||||
[2] #local-group [*]
|
||||
[0] #public
|
||||
[1] #meck-test
|
||||
[2] #local-group
|
||||
```
|
||||
|
||||
Each channel shows its region scope in brackets. `[*]` means the channel uses the device default region (or unscoped if no default is set). A specific name like `[au-nsw]` means that channel has its own region override.
|
||||
|
||||
#### Add a Hashtag Channel
|
||||
|
||||
```
|
||||
@@ -314,82 +308,6 @@ set channel.del 2
|
||||
|
||||
Channels are referenced by their index number (shown in `get channels`). Channel 0 (public) cannot be deleted. Remaining channels are automatically compacted after deletion.
|
||||
|
||||
### Region Scope
|
||||
|
||||
Regions limit how far your flood messages propagate through the mesh. When you set a region, outgoing messages are tagged with a transport code that repeaters use to decide whether to forward them. Messages sent without a region reach all repeaters via the default wildcard, same as always.
|
||||
|
||||
Meck does not pre-set any region on a fresh flash. Region names are determined by your local mesh community — check with your local group for the names in use. Common patterns follow ISO 3166 country/subdivision codes (e.g. `au` for Australia, `gb-eng` for England, `us-ca` for California), but communities may also use custom names for their area.
|
||||
|
||||
Region names must be lowercase alphanumeric characters and hyphens only, max 29 characters.
|
||||
|
||||
#### View Default Region
|
||||
|
||||
```
|
||||
get region
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
> au-nsw
|
||||
```
|
||||
|
||||
Or if no region is set:
|
||||
|
||||
```
|
||||
> (none — unscoped)
|
||||
```
|
||||
|
||||
#### Set Default Region
|
||||
|
||||
```
|
||||
set region au-nsw
|
||||
```
|
||||
|
||||
This applies to all channels and DMs unless a channel has its own region override.
|
||||
|
||||
#### Clear Default Region
|
||||
|
||||
```
|
||||
set region none
|
||||
```
|
||||
|
||||
Returns to unscoped mode — messages reach all repeaters.
|
||||
|
||||
#### View Channel Region
|
||||
|
||||
```
|
||||
get channel.scope 2
|
||||
```
|
||||
|
||||
Output:
|
||||
|
||||
```
|
||||
> #local-group scope: au-syd
|
||||
```
|
||||
|
||||
Or if the channel uses the device default:
|
||||
|
||||
```
|
||||
> #local-group scope: (device default)
|
||||
```
|
||||
|
||||
#### Set Channel Region
|
||||
|
||||
```
|
||||
set channel.scope 2 au-syd
|
||||
```
|
||||
|
||||
This overrides the device default for that specific channel.
|
||||
|
||||
#### Clear Channel Region
|
||||
|
||||
```
|
||||
set channel.scope 2 none
|
||||
```
|
||||
|
||||
Returns the channel to using the device default region.
|
||||
|
||||
### 4G Modem (4G Variant Only)
|
||||
|
||||
#### Enable / Disable Modem
|
||||
@@ -502,7 +420,7 @@ set channel.add local-group
|
||||
get all
|
||||
```
|
||||
|
||||
### Switching to a Different Radio Preset
|
||||
### Switching to a New Region
|
||||
|
||||
Moving from Australia to the US? One command:
|
||||
|
||||
@@ -516,27 +434,6 @@ Verify with:
|
||||
get radio
|
||||
```
|
||||
|
||||
### Setting Up Regions
|
||||
|
||||
Check with your local mesh community for the region names in use, then set your device default:
|
||||
|
||||
```
|
||||
set region au-nsw
|
||||
```
|
||||
|
||||
If you want a specific channel to use a different region (e.g. a nationwide channel):
|
||||
|
||||
```
|
||||
set channel.scope 1 au
|
||||
```
|
||||
|
||||
Verify everything:
|
||||
|
||||
```
|
||||
get region
|
||||
get channels
|
||||
```
|
||||
|
||||
### Custom Radio Configuration
|
||||
|
||||
If none of the presets match your local group or you need specific parameters, set them directly. You can do it all in one command:
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino": {
|
||||
"ldscript": "nrf52840_s140_v6.ld"
|
||||
},
|
||||
"core": "nRF5",
|
||||
"cpu": "cortex-m4",
|
||||
"extra_flags": "-DNRF52840_XXAA",
|
||||
"f_cpu": "64000000L",
|
||||
"hwids": [
|
||||
["0x239A", "0x8029"]
|
||||
],
|
||||
"usb_product": "T-Echo Card",
|
||||
"mcu": "nrf52840",
|
||||
"variant": "lilygo_techo_card",
|
||||
"variants_dir": "variants_bsp",
|
||||
"bsp": {
|
||||
"name": "adafruit"
|
||||
},
|
||||
"softdevice": {
|
||||
"sd_flags": "-DS140",
|
||||
"sd_name": "s140",
|
||||
"sd_version": "6.1.1",
|
||||
"sd_fwid": "0x00B6"
|
||||
},
|
||||
"bootloader": {
|
||||
"settings_addr": "0xFF000"
|
||||
}
|
||||
},
|
||||
"connectivity": ["bluetooth"],
|
||||
"debug": {
|
||||
"jlink_device": "nRF52840_xxAA",
|
||||
"openocd_target": "nrf52840"
|
||||
},
|
||||
"frameworks": ["arduino"],
|
||||
"name": "LilyGo T-Echo Card (nRF52840, SX1262, 4MB Flash)",
|
||||
"upload": {
|
||||
"maximum_ram_size": 248832,
|
||||
"maximum_size": 815104,
|
||||
"speed": 115200,
|
||||
"protocol": "nrfutil",
|
||||
"protocols": ["nrfutil", "jlink", "cmsis-dap"],
|
||||
"native_usb": true,
|
||||
"use_1200bps_touch": true,
|
||||
"require_upload_port": true,
|
||||
"wait_for_upload_port": true
|
||||
},
|
||||
"url": "https://github.com/Xinyuan-LilyGO/T-Echo-Card",
|
||||
"vendor": "LILYGO"
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino": {
|
||||
"ldscript": "esp32s3_out.ld",
|
||||
"memory_type": "qio_qspi",
|
||||
"partitions": "default_16MB.csv"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": [
|
||||
"-DBOARD_HAS_PSRAM",
|
||||
"-DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"-DARDUINO_USB_MODE=1",
|
||||
"-DARDUINO_RUNNING_CORE=1",
|
||||
"-DARDUINO_EVENT_RUNNING_CORE=1"
|
||||
],
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
"hwids": [["0x303A", "0x1001"]],
|
||||
"mcu": "esp32s3",
|
||||
"variant": "esp32s3"
|
||||
},
|
||||
"connectivity": ["wifi", "bluetooth", "lora"],
|
||||
"debug": {
|
||||
"default_tool": "esp-builtin",
|
||||
"onboard_tools": ["esp-builtin"],
|
||||
"openocd_target": "esp32s3.cfg"
|
||||
},
|
||||
"frameworks": ["arduino", "espidf"],
|
||||
"name": "LilyGo T-Deck Pro MAX (16MB Flash 8MB QSPI PSRAM)",
|
||||
"upload": {
|
||||
"flash_size": "16MB",
|
||||
"maximum_ram_size": 327680,
|
||||
"maximum_size": 16777216,
|
||||
"require_upload_port": true,
|
||||
"speed": 921600
|
||||
},
|
||||
"url": "https://www.lilygo.cc/products/t-deck-pro",
|
||||
"vendor": "LilyGo"
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
6818ce5f77dd45bb90facf753ba81d81.s1.eu.hivemq.cloud
|
||||
8883
|
||||
meckremote
|
||||
yourpassword
|
||||
heltec-wifi-1
|
||||
@@ -1,2 +0,0 @@
|
||||
SSID
|
||||
Password
|
||||
@@ -36,7 +36,6 @@ public:
|
||||
void setHasConnection(bool connected) { _connected = connected; }
|
||||
bool hasConnection() const { return _connected; }
|
||||
uint16_t getBattMilliVolts() const { return _board->getBattMilliVolts(); }
|
||||
uint8_t getBatteryPercent() const { return _board->getBatteryPercent(); }
|
||||
bool isSerialEnabled() const { return _serial->isEnabled(); }
|
||||
void enableSerial() { _serial->enable(); }
|
||||
void disableSerial() { _serial->disable(); }
|
||||
@@ -51,14 +50,9 @@ public:
|
||||
|
||||
// Mark a channel as read when BLE companion app syncs a message
|
||||
virtual void markChannelReadFromBLE(uint8_t channel_idx) {}
|
||||
virtual void markAllChannelsRead() {} // Companion builds: zero all unread on app connect
|
||||
|
||||
// Repeater admin callbacks (from MyMesh)
|
||||
virtual void onAdminLoginResult(bool success, uint8_t permissions, uint32_t server_time) {}
|
||||
virtual void onAdminCliResponse(const char* from_name, const char* text) {}
|
||||
virtual void onAdminTelemetryResult(const uint8_t* data, uint8_t len) {}
|
||||
|
||||
// Trace path callback (from MyMesh::onTraceRecv)
|
||||
virtual void onTraceResult(uint32_t tag, uint8_t flags, const uint8_t* path_snrs,
|
||||
const uint8_t* path_hashes, uint8_t path_len, int8_t final_snr) {}
|
||||
};
|
||||
@@ -280,22 +280,12 @@ void DataStore::loadPrefsInt(const char *filename, NodePrefs& _prefs, double& no
|
||||
if (file.read((uint8_t *)&_prefs.rx_fail_reboot_threshold, sizeof(_prefs.rx_fail_reboot_threshold)) != sizeof(_prefs.rx_fail_reboot_threshold)) {
|
||||
_prefs.rx_fail_reboot_threshold = 3; // default: 3
|
||||
}
|
||||
if (file.read((uint8_t *)&_prefs.ui_font_style, sizeof(_prefs.ui_font_style)) != sizeof(_prefs.ui_font_style)) {
|
||||
_prefs.ui_font_style = 0; // default: Classic (FreeSans)
|
||||
}
|
||||
if (file.read((uint8_t *)_prefs.default_scope_name, sizeof(_prefs.default_scope_name)) != sizeof(_prefs.default_scope_name)) {
|
||||
memset(_prefs.default_scope_name, 0, sizeof(_prefs.default_scope_name));
|
||||
}
|
||||
if (file.read((uint8_t *)_prefs.default_scope_key, sizeof(_prefs.default_scope_key)) != sizeof(_prefs.default_scope_key)) {
|
||||
memset(_prefs.default_scope_key, 0, sizeof(_prefs.default_scope_key));
|
||||
}
|
||||
|
||||
// Clamp to valid ranges
|
||||
if (_prefs.dark_mode > 1) _prefs.dark_mode = 0;
|
||||
if (_prefs.portrait_mode > 1) _prefs.portrait_mode = 0;
|
||||
if (_prefs.hint_shown > 1) _prefs.hint_shown = 0;
|
||||
if (_prefs.large_font > 1) _prefs.large_font = 0;
|
||||
if (_prefs.ui_font_style > 2) _prefs.ui_font_style = 0;
|
||||
if (_prefs.tx_fail_reset_threshold > 10) _prefs.tx_fail_reset_threshold = 3;
|
||||
if (_prefs.rx_fail_reboot_threshold > 10) _prefs.rx_fail_reboot_threshold = 3;
|
||||
// auto_lock_minutes: only accept known options (0, 2, 5, 10, 15, 30)
|
||||
@@ -354,9 +344,6 @@ void DataStore::savePrefs(const NodePrefs& _prefs, double node_lat, double node_
|
||||
file.write((uint8_t *)&_prefs.large_font, sizeof(_prefs.large_font)); // 102
|
||||
file.write((uint8_t *)&_prefs.tx_fail_reset_threshold, sizeof(_prefs.tx_fail_reset_threshold)); // 103
|
||||
file.write((uint8_t *)&_prefs.rx_fail_reboot_threshold, sizeof(_prefs.rx_fail_reboot_threshold)); // 104
|
||||
file.write((uint8_t *)&_prefs.ui_font_style, sizeof(_prefs.ui_font_style)); // 105
|
||||
file.write((uint8_t *)_prefs.default_scope_name, sizeof(_prefs.default_scope_name)); // 106
|
||||
file.write((uint8_t *)_prefs.default_scope_key, sizeof(_prefs.default_scope_key)); // 137
|
||||
|
||||
file.close();
|
||||
}
|
||||
@@ -443,42 +430,10 @@ void DataStore::loadContacts(DataStoreHost* host) {
|
||||
|
||||
void DataStore::saveContacts(DataStoreHost* host) {
|
||||
FILESYSTEM* fs = _getContactsChannelsFS();
|
||||
|
||||
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
||||
// nRF52/STM32: direct write (no tmp+rename — InternalFS doesn't need atomic pattern)
|
||||
File file = openWrite(fs, "/contacts3");
|
||||
if (file) {
|
||||
uint32_t idx = 0;
|
||||
ContactInfo c;
|
||||
uint8_t unused = 0;
|
||||
uint32_t recordsWritten = 0;
|
||||
|
||||
while (host->getContactForSave(idx, c)) {
|
||||
bool success = (file.write(c.id.pub_key, 32) == 32);
|
||||
success = success && (file.write((uint8_t *)&c.name, 32) == 32);
|
||||
success = success && (file.write(&c.type, 1) == 1);
|
||||
success = success && (file.write(&c.flags, 1) == 1);
|
||||
success = success && (file.write(&unused, 1) == 1);
|
||||
success = success && (file.write((uint8_t *)&c.sync_since, 4) == 4);
|
||||
success = success && (file.write((uint8_t *)&c.out_path_len, 1) == 1);
|
||||
success = success && (file.write((uint8_t *)&c.last_advert_timestamp, 4) == 4);
|
||||
success = success && (file.write(c.out_path, 64) == 64);
|
||||
success = success && (file.write((uint8_t *)&c.lastmod, 4) == 4);
|
||||
success = success && (file.write((uint8_t *)&c.gps_lat, 4) == 4);
|
||||
success = success && (file.write((uint8_t *)&c.gps_lon, 4) == 4);
|
||||
|
||||
if (!success) break;
|
||||
recordsWritten++;
|
||||
idx++;
|
||||
}
|
||||
file.close();
|
||||
Serial.printf("DataStore: saved %d contacts\n", recordsWritten);
|
||||
}
|
||||
#else
|
||||
// ESP32: atomic tmp+rename pattern (protects against SD card corruption on power loss)
|
||||
const char* finalPath = "/contacts3";
|
||||
const char* tmpPath = "/contacts3.tmp";
|
||||
|
||||
// --- Step 1: Write all contacts to a temporary file ---
|
||||
File file = openWrite(fs, tmpPath);
|
||||
if (!file) {
|
||||
Serial.println("DataStore: saveContacts FAILED — cannot open tmp file");
|
||||
@@ -517,8 +472,9 @@ void DataStore::saveContacts(DataStoreHost* host) {
|
||||
|
||||
file.close();
|
||||
|
||||
// Verify the write completed
|
||||
size_t expectedBytes = recordsWritten * 152;
|
||||
// --- Step 2: Verify the write completed ---
|
||||
// Reopen read-only to get true on-disk size (SPIFFS file.size() is unreliable before close)
|
||||
size_t expectedBytes = recordsWritten * 152; // 152 bytes per contact record
|
||||
File verify = openRead(fs, tmpPath);
|
||||
size_t bytesWritten = verify ? verify.size() : 0;
|
||||
if (verify) verify.close();
|
||||
@@ -526,25 +482,23 @@ void DataStore::saveContacts(DataStoreHost* host) {
|
||||
if (!writeOk || bytesWritten != expectedBytes) {
|
||||
Serial.printf("DataStore: saveContacts ABORTED — wrote %d bytes, expected %d (%d records)\n",
|
||||
(int)bytesWritten, (int)expectedBytes, recordsWritten);
|
||||
fs->remove(tmpPath);
|
||||
return;
|
||||
fs->remove(tmpPath); // Clean up failed tmp file
|
||||
return; // Original /contacts3 is untouched
|
||||
}
|
||||
|
||||
// Replace original with verified temp file
|
||||
// --- Step 3: Replace original with verified temp file ---
|
||||
fs->remove(finalPath);
|
||||
if (fs->rename(tmpPath, finalPath)) {
|
||||
Serial.printf("DataStore: saved %d contacts (%d bytes)\n", recordsWritten, (int)bytesWritten);
|
||||
} else {
|
||||
// Rename failed — tmp file still has the good data
|
||||
Serial.println("DataStore: rename failed, tmp file preserved");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// =========================================================================
|
||||
// Chunked contact save — non-blocking across multiple loop iterations
|
||||
// Only for ESP32 with SD card — nRF52 uses blocking saveContacts() above
|
||||
// =========================================================================
|
||||
#if !defined(NRF52_PLATFORM) && !defined(STM32_PLATFORM)
|
||||
|
||||
bool DataStore::beginSaveContacts(DataStoreHost* host) {
|
||||
if (_saveInProgress) return false; // Already saving
|
||||
@@ -636,7 +590,6 @@ void DataStore::finishSaveContacts() {
|
||||
Serial.println("DataStore: rename failed, tmp file preserved");
|
||||
}
|
||||
}
|
||||
#endif // !NRF52_PLATFORM && !STM32_PLATFORM
|
||||
|
||||
void DataStore::loadChannels(DataStoreHost* host) {
|
||||
FILESYSTEM* fs = _getContactsChannelsFS();
|
||||
|
||||
@@ -24,15 +24,13 @@ class DataStore {
|
||||
void checkAdvBlobFile();
|
||||
#endif
|
||||
|
||||
#if !defined(NRF52_PLATFORM) && !defined(STM32_PLATFORM)
|
||||
// Chunked save state (ESP32 with SD card only)
|
||||
// Chunked save state
|
||||
File _saveFile;
|
||||
DataStoreHost* _saveHost = nullptr;
|
||||
uint32_t _saveIdx = 0;
|
||||
uint32_t _saveRecordsWritten = 0;
|
||||
bool _saveInProgress = false;
|
||||
bool _saveWriteOk = true;
|
||||
#endif
|
||||
|
||||
public:
|
||||
DataStore(FILESYSTEM& fs, mesh::RTCClock& clock);
|
||||
@@ -47,13 +45,14 @@ public:
|
||||
void savePrefs(const NodePrefs& prefs, double node_lat, double node_lon);
|
||||
void loadContacts(DataStoreHost* host);
|
||||
void saveContacts(DataStoreHost* host);
|
||||
#if !defined(NRF52_PLATFORM) && !defined(STM32_PLATFORM)
|
||||
// Chunked save — splits contact write across multiple loop iterations
|
||||
// to prevent blocking the main loop for 500ms+ on large contact lists.
|
||||
// Call beginSaveContacts(), then saveContactsChunk() each loop until it
|
||||
// returns false (done), then finishSaveContacts() to verify and commit.
|
||||
bool beginSaveContacts(DataStoreHost* host);
|
||||
bool saveContactsChunk(int batchSize = 20);
|
||||
bool saveContactsChunk(int batchSize = 20); // returns true if more to write
|
||||
void finishSaveContacts();
|
||||
bool isSaveInProgress() const { return _saveInProgress; }
|
||||
#endif
|
||||
void loadChannels(DataStoreHost* host);
|
||||
void saveChannels(DataStoreHost* host);
|
||||
void migrateToSecondaryFS();
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
#define CMD_SEND_BINARY_REQ 50
|
||||
#define CMD_FACTORY_RESET 51
|
||||
#define CMD_SEND_PATH_DISCOVERY_REQ 52
|
||||
#define CMD_SET_FLOOD_SCOPE_KEY 54 // v8+ (per-channel scope key from BLE app)
|
||||
#define CMD_SET_FLOOD_SCOPE 54 // v8+
|
||||
#define CMD_SEND_CONTROL_DATA 55 // v8+
|
||||
#define CMD_GET_STATS 56 // v8+, second byte is stats type
|
||||
|
||||
@@ -70,9 +70,6 @@
|
||||
#define CMD_SET_AUTOADD_CONFIG 58
|
||||
#define CMD_GET_AUTOADD_CONFIG 59
|
||||
#define CMD_SET_PATH_HASH_MODE 61
|
||||
#define CMD_SEND_CHANNEL_DATA 62
|
||||
#define CMD_SET_DEFAULT_FLOOD_SCOPE 63 // v1.15+ (device-wide default scope name+key)
|
||||
#define CMD_GET_DEFAULT_FLOOD_SCOPE 64 // v1.15+ (query current default scope)
|
||||
|
||||
// Stats sub-types for CMD_GET_STATS
|
||||
#define STATS_TYPE_CORE 0
|
||||
@@ -105,16 +102,12 @@
|
||||
#define RESP_CODE_TUNING_PARAMS 23
|
||||
#define RESP_CODE_STATS 24 // v8+, second byte is stats type
|
||||
#define RESP_CODE_AUTOADD_CONFIG 25
|
||||
#define RESP_ALLOWED_REPEAT_FREQ 26
|
||||
#define RESP_CODE_CHANNEL_DATA_RECV 27
|
||||
#define RESP_CODE_DEFAULT_FLOOD_SCOPE 28 // v1.15+
|
||||
|
||||
#define SEND_TIMEOUT_BASE_MILLIS 500
|
||||
#define FLOOD_SEND_TIMEOUT_FACTOR 16.0f
|
||||
#define DIRECT_SEND_PERHOP_FACTOR 6.0f
|
||||
#define DIRECT_SEND_PERHOP_EXTRA_MILLIS 250
|
||||
#define LAZY_CONTACTS_WRITE_DELAY 5000
|
||||
#define USER_IDLE_SAVE_THRESHOLD 15000 // Defer saves until 15s after last keypress
|
||||
|
||||
#define PUBLIC_GROUP_PSK "izOH6cXN6mrJ5e26oRXNcg=="
|
||||
|
||||
@@ -155,10 +148,6 @@
|
||||
#define AUTO_ADD_ROOM_SERVER (1 << 3) // 0x08 - auto-add Room Server (ADV_TYPE_ROOM)
|
||||
#define AUTO_ADD_SENSOR (1 << 4) // 0x10 - auto-add Sensor (ADV_TYPE_SENSOR)
|
||||
|
||||
// All type bits combined (excludes overwrite flag)
|
||||
#define AUTO_ADD_ALL_TYPES (AUTO_ADD_CHAT | AUTO_ADD_REPEATER | \
|
||||
AUTO_ADD_ROOM_SERVER | AUTO_ADD_SENSOR)
|
||||
|
||||
void MyMesh::writeOKFrame() {
|
||||
uint8_t buf[1];
|
||||
buf[0] = RESP_CODE_OK;
|
||||
@@ -177,7 +166,7 @@ void MyMesh::writeDisabledFrame() {
|
||||
_serial->writeFrame(buf, 1);
|
||||
}
|
||||
|
||||
size_t MyMesh::writeContactRespFrame(uint8_t code, const ContactInfo &contact) {
|
||||
void MyMesh::writeContactRespFrame(uint8_t code, const ContactInfo &contact) {
|
||||
int i = 0;
|
||||
out_frame[i++] = code;
|
||||
memcpy(&out_frame[i], contact.id.pub_key, PUB_KEY_SIZE);
|
||||
@@ -197,7 +186,7 @@ size_t MyMesh::writeContactRespFrame(uint8_t code, const ContactInfo &contact) {
|
||||
i += 4;
|
||||
memcpy(&out_frame[i], &contact.lastmod, 4);
|
||||
i += 4;
|
||||
return _serial->writeFrame(out_frame, i);
|
||||
_serial->writeFrame(out_frame, i);
|
||||
}
|
||||
|
||||
void MyMesh::updateContactFromFrame(ContactInfo &contact, uint32_t& last_mod, const uint8_t *frame, int len) {
|
||||
@@ -326,7 +315,6 @@ bool MyMesh::isAutoAddEnabled() const {
|
||||
}
|
||||
|
||||
bool MyMesh::shouldAutoAddContactType(uint8_t contact_type) const {
|
||||
if (_forceNextImport) return true; // explicit user add from Last Heard / Discovery
|
||||
if ((_prefs.manual_add_contacts & 1) == 0) {
|
||||
return true;
|
||||
}
|
||||
@@ -372,7 +360,6 @@ void MyMesh::onContactsFull() {
|
||||
}
|
||||
|
||||
void MyMesh::onDiscoveredContact(ContactInfo &contact, bool is_new, uint8_t path_len, const uint8_t* path) {
|
||||
_forceNextImport = false; // clear force-add flag (set by forceImportContact)
|
||||
if (_serial->isConnected()) {
|
||||
if (is_new) {
|
||||
writeContactRespFrame(PUSH_CODE_NEW_ADVERT, contact);
|
||||
@@ -578,24 +565,18 @@ bool MyMesh::filterRecvFloodPacket(mesh::Packet* packet) {
|
||||
return false; // never filter  let normal processing continue
|
||||
}
|
||||
|
||||
void MyMesh::sendFloodScoped(const TransportKey& scope, mesh::Packet* pkt, uint32_t delay_millis) {
|
||||
if (scope.isNull()) {
|
||||
sendFlood(pkt, delay_millis, getPathHashSize());
|
||||
} else {
|
||||
uint16_t codes[2];
|
||||
codes[0] = scope.calcTransportCode(pkt);
|
||||
codes[1] = 0; // reserved for home region
|
||||
sendFlood(pkt, codes, delay_millis, getPathHashSize());
|
||||
}
|
||||
}
|
||||
|
||||
void MyMesh::sendFloodScoped(const ContactInfo& recipient, mesh::Packet* pkt, uint32_t delay_millis) {
|
||||
Serial.printf("[sendFloodScoped] to '%s', delay=%lu, hash_mode=%d, bph=%d\n",
|
||||
recipient.name, delay_millis, _prefs.path_hash_mode, _prefs.path_hash_mode + 1);
|
||||
// DMs: use device default scope (no per-contact scope)
|
||||
TransportKey default_scope;
|
||||
memcpy(&default_scope.key, _prefs.default_scope_key, sizeof(default_scope.key));
|
||||
sendFloodScoped(default_scope, pkt, delay_millis);
|
||||
// TODO: dynamic send_scope, depending on recipient and current 'home' Region
|
||||
if (send_scope.isNull()) {
|
||||
sendFlood(pkt, delay_millis, getPathHashSize());
|
||||
} else {
|
||||
uint16_t codes[2];
|
||||
codes[0] = send_scope.calcTransportCode(pkt);
|
||||
codes[1] = 0; // REVISIT: set to 'home' Region, for sender/return region?
|
||||
sendFlood(pkt, codes, delay_millis, getPathHashSize());
|
||||
}
|
||||
}
|
||||
void MyMesh::sendFloodScoped(const mesh::GroupChannel& channel, mesh::Packet* pkt, uint32_t delay_millis) {
|
||||
// Capture payload fingerprint for repeat tracking before sending
|
||||
@@ -609,46 +590,15 @@ void MyMesh::sendFloodScoped(const mesh::GroupChannel& channel, mesh::Packet* pk
|
||||
MESH_DEBUG_PRINTLN("SentTrack: captured fingerprint for channel msg");
|
||||
}
|
||||
|
||||
// Scope priority: BLE app send_scope → per-channel scope → device default → unscoped
|
||||
TransportKey scope;
|
||||
if (!send_scope.isNull()) {
|
||||
// BLE app has set a scope via CMD 54 — use it (highest priority)
|
||||
memcpy(scope.key, send_scope.key, sizeof(scope.key));
|
||||
// TODO: have per-channel send_scope
|
||||
if (send_scope.isNull()) {
|
||||
sendFlood(pkt, delay_millis, getPathHashSize());
|
||||
} else {
|
||||
const char* ch_scope = getChannelScopeName(channel);
|
||||
if (ch_scope && ch_scope[0]) {
|
||||
deriveScopeKey(ch_scope, scope);
|
||||
} else {
|
||||
memcpy(scope.key, _prefs.default_scope_key, sizeof(scope.key));
|
||||
}
|
||||
uint16_t codes[2];
|
||||
codes[0] = send_scope.calcTransportCode(pkt);
|
||||
codes[1] = 0; // REVISIT: set to 'home' Region, for sender/return region?
|
||||
sendFlood(pkt, codes, delay_millis, getPathHashSize());
|
||||
}
|
||||
sendFloodScoped(scope, pkt, delay_millis);
|
||||
}
|
||||
|
||||
bool MyMesh::deriveScopeKey(const char* scopeName, TransportKey& keyOut) {
|
||||
if (!scopeName || scopeName[0] == '\0') {
|
||||
memset(keyOut.key, 0, sizeof(keyOut.key));
|
||||
return false;
|
||||
}
|
||||
// Region names are stored without '#' prefix in user-facing code,
|
||||
// but the key derivation prepends '#' (implicit auto hashtag region).
|
||||
char tmp[32];
|
||||
snprintf(tmp, sizeof(tmp), "#%s", scopeName);
|
||||
TransportKeyStore tempStore;
|
||||
tempStore.getAutoKeyFor(0, tmp, keyOut);
|
||||
return true;
|
||||
}
|
||||
|
||||
const char* MyMesh::getChannelScopeName(const mesh::GroupChannel& channel) {
|
||||
ChannelDetails ch;
|
||||
for (uint8_t i = 0; i < MAX_GROUP_CHANNELS; i++) {
|
||||
if (getChannel(i, ch) && ch.name[0] != '\0') {
|
||||
if (memcmp(ch.channel.secret, channel.secret, sizeof(channel.secret)) == 0) {
|
||||
return ch.scope_name;
|
||||
}
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void MyMesh::onMessageRecv(const ContactInfo &from, mesh::Packet *pkt, uint32_t sender_timestamp,
|
||||
@@ -1290,14 +1240,6 @@ void MyMesh::onTraceRecv(mesh::Packet *packet, uint32_t tag, uint32_t auth_code,
|
||||
} else {
|
||||
MESH_DEBUG_PRINTLN("onTraceRecv(), data received while app offline");
|
||||
}
|
||||
|
||||
// Route trace result to standalone UI (TraceScreen)
|
||||
#ifdef DISPLAY_CLASS
|
||||
if (_ui) {
|
||||
_ui->onTraceResult(tag, flags, path_snrs, path_hashes, path_len,
|
||||
(int8_t)(packet->getSNR() * 4));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
uint32_t MyMesh::calcFloodTimeoutMillisFor(uint32_t pkt_airtime_millis) const {
|
||||
@@ -1323,7 +1265,7 @@ MyMesh::MyMesh(mesh::Radio &radio, mesh::RNG &rng, mesh::RTCClock &rtc, SimpleMe
|
||||
next_ack_idx = 0;
|
||||
sign_data = NULL;
|
||||
dirty_contacts_expiry = 0;
|
||||
advert_paths = nullptr; // PSRAM-allocated in begin()
|
||||
memset(advert_paths, 0, sizeof(advert_paths));
|
||||
memset(send_scope.key, 0, sizeof(send_scope.key));
|
||||
memset(_sent_track, 0, sizeof(_sent_track));
|
||||
_sent_track_idx = 0;
|
||||
@@ -1350,7 +1292,6 @@ MyMesh::MyMesh(mesh::Radio &radio, mesh::RNG &rng, mesh::RTCClock &rtc, SimpleMe
|
||||
}
|
||||
|
||||
void MyMesh::begin(bool has_display) {
|
||||
advert_paths = (AdvertPath*)ps_calloc(ADVERT_PATH_TABLE_SIZE, sizeof(AdvertPath));
|
||||
BaseChatMesh::begin();
|
||||
|
||||
if (!_store->loadMainIdentity(self_id)) {
|
||||
@@ -1485,11 +1426,6 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
MESH_DEBUG_PRINTLN("App %s connected", app_name);
|
||||
|
||||
_iter_started = false; // stop any left-over ContactsIterator
|
||||
|
||||
#if defined(BLE_PIN_CODE) || defined(MECK_WIFI_COMPANION)
|
||||
// Companion builds: mark all channels/DMs as read on app connect
|
||||
if (_ui) _ui->markAllChannelsRead();
|
||||
#endif
|
||||
int i = 0;
|
||||
out_frame[i++] = RESP_CODE_SELF_INFO;
|
||||
out_frame[i++] = ADV_TYPE_CHAT; // what this node Advert identifies as (maybe node's pronouns too?? :-)
|
||||
@@ -1651,17 +1587,6 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
memcpy(&secs, &cmd_frame[1], 4);
|
||||
uint32_t curr = getRTCClock()->getCurrentTime();
|
||||
if (secs >= curr) {
|
||||
// Adjust stored advert timestamps if clock jumps significantly
|
||||
if (advert_paths && secs > curr + 60) {
|
||||
uint32_t delta = secs - curr;
|
||||
for (int i = 0; i < ADVERT_PATH_TABLE_SIZE; i++) {
|
||||
if (advert_paths[i].recv_timestamp > 0) {
|
||||
advert_paths[i].recv_timestamp += delta;
|
||||
}
|
||||
}
|
||||
Serial.printf("[ClockSync] Adjusted %d advert timestamps by +%lu seconds\n",
|
||||
ADVERT_PATH_TABLE_SIZE, (unsigned long)delta);
|
||||
}
|
||||
getRTCClock()->setCurrentTime(secs);
|
||||
writeOKFrame();
|
||||
} else {
|
||||
@@ -1790,12 +1715,23 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
#ifdef DISPLAY_CLASS
|
||||
if (_ui) {
|
||||
_ui->msgRead(offline_queue_len);
|
||||
// Note: we intentionally do NOT mark channels/DMs as read here.
|
||||
// CMD_SYNC_NEXT_MESSAGE fires during the automatic bulk sync when
|
||||
// the BLE app connects — "synced to app" ≠ "read by user in app".
|
||||
// Unread counts only clear when the user navigates to that channel
|
||||
// on the device itself. The MeshCore BLE protocol has no "mark as
|
||||
// read" command from the app side, so this is the safest behaviour.
|
||||
|
||||
// Mark channel as read when BLE companion app syncs the message.
|
||||
// Frame layout V3: [resp_code][snr][res1][res2][channel_idx][path_len]...
|
||||
// Frame layout V1: [resp_code][channel_idx][path_len]...
|
||||
bool is_v3_ch = (out_frame[0] == RESP_CODE_CHANNEL_MSG_RECV_V3);
|
||||
bool is_old_ch = (out_frame[0] == RESP_CODE_CHANNEL_MSG_RECV);
|
||||
if (is_v3_ch || is_old_ch) {
|
||||
uint8_t ch_idx = is_v3_ch ? out_frame[4] : out_frame[1];
|
||||
_ui->markChannelReadFromBLE(ch_idx);
|
||||
}
|
||||
|
||||
// Mark DM slot read when companion app syncs a contact (DM/room) message
|
||||
bool is_v3_dm = (out_frame[0] == RESP_CODE_CONTACT_MSG_RECV_V3);
|
||||
bool is_old_dm = (out_frame[0] == RESP_CODE_CONTACT_MSG_RECV);
|
||||
if (is_v3_dm || is_old_dm) {
|
||||
_ui->markChannelReadFromBLE(0xFF);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
@@ -2123,11 +2059,6 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
} else if (cmd_frame[0] == CMD_SET_CHANNEL && len >= 2 + 32 + 16) {
|
||||
uint8_t channel_idx = cmd_frame[1];
|
||||
ChannelDetails channel;
|
||||
// Preserve existing scope_name if channel already exists
|
||||
ChannelDetails existing;
|
||||
if (getChannel(channel_idx, existing) && existing.name[0] != '\0') {
|
||||
memcpy(channel.scope_name, existing.scope_name, sizeof(channel.scope_name));
|
||||
}
|
||||
StrHelper::strncpy(channel.name, (char *)&cmd_frame[2], 32);
|
||||
memset(channel.channel.secret, 0, sizeof(channel.channel.secret));
|
||||
memcpy(channel.channel.secret, &cmd_frame[2 + 32], 16); // NOTE: only 128-bit supported
|
||||
@@ -2181,9 +2112,6 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
memcpy(&auth, &cmd_frame[5], 4);
|
||||
auto pkt = createTrace(tag, auth, flags);
|
||||
if (pkt) {
|
||||
Serial.printf("[BLE Trace] flags=%d, path_len=%d, path hex:", flags, path_len);
|
||||
for (int pi = 0; pi < path_len; pi++) Serial.printf(" %02X", cmd_frame[10 + pi]);
|
||||
Serial.println();
|
||||
sendDirect(pkt, &cmd_frame[10], path_len);
|
||||
|
||||
uint32_t t = _radio->getEstAirtimeFor(pkt->payload_len + pkt->path_len + 2);
|
||||
@@ -2341,44 +2269,13 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
} else {
|
||||
writeErrFrame(ERR_CODE_FILE_IO_ERROR);
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_SET_FLOOD_SCOPE_KEY && len >= 2 && cmd_frame[1] == 0) {
|
||||
} else if (cmd_frame[0] == CMD_SET_FLOOD_SCOPE && len >= 2 && cmd_frame[1] == 0) {
|
||||
if (len >= 2 + 16) {
|
||||
memcpy(send_scope.key, &cmd_frame[2], sizeof(send_scope.key)); // set curr scope TransportKey
|
||||
Serial.printf("[CMD54] Per-channel scope key set (%d bytes)\n", len - 2);
|
||||
} else {
|
||||
memset(send_scope.key, 0, sizeof(send_scope.key)); // set scope to null
|
||||
Serial.println("[CMD54] Per-channel scope cleared");
|
||||
}
|
||||
writeOKFrame();
|
||||
} else if (cmd_frame[0] == CMD_SET_DEFAULT_FLOOD_SCOPE && len >= 1) {
|
||||
// v1.15+ — set device-wide default flood scope (name[31] + key[16])
|
||||
if (len >= 1+31+16) {
|
||||
int n = strlen((char *) &cmd_frame[1]);
|
||||
if (n > 0 && n < 31) {
|
||||
strcpy(_prefs.default_scope_name, (char *) &cmd_frame[1]);
|
||||
memcpy(_prefs.default_scope_key, &cmd_frame[1+31], 16);
|
||||
savePrefs();
|
||||
writeOKFrame();
|
||||
} else {
|
||||
writeErrFrame(ERR_CODE_ILLEGAL_ARG);
|
||||
}
|
||||
} else {
|
||||
// Clear default scope (unscoped)
|
||||
memset(_prefs.default_scope_name, 0, sizeof(_prefs.default_scope_name));
|
||||
memset(_prefs.default_scope_key, 0, sizeof(_prefs.default_scope_key));
|
||||
savePrefs();
|
||||
writeOKFrame();
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_GET_DEFAULT_FLOOD_SCOPE) {
|
||||
// v1.15+ — query current default flood scope
|
||||
out_frame[0] = RESP_CODE_DEFAULT_FLOOD_SCOPE;
|
||||
if (strlen(_prefs.default_scope_name) > 0) {
|
||||
memcpy(&out_frame[1], _prefs.default_scope_name, 31);
|
||||
memcpy(&out_frame[1+31], _prefs.default_scope_key, 16);
|
||||
_serial->writeFrame(out_frame, 1+31+16);
|
||||
} else {
|
||||
_serial->writeFrame(out_frame, 1); // no name or key means null/unscoped
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_SEND_CONTROL_DATA && len >= 2 && (cmd_frame[1] & 0x80) != 0) {
|
||||
auto resp = createControlData(&cmd_frame[1], len - 1);
|
||||
if (resp) {
|
||||
@@ -2479,26 +2376,6 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
Serial.printf(" > %lu (effective: %lu)\n",
|
||||
(unsigned long)_prefs.gps_baudrate, (unsigned long)effective);
|
||||
|
||||
} else if (strcmp(key, "region") == 0) {
|
||||
if (_prefs.default_scope_name[0]) {
|
||||
Serial.printf(" > %s\n", _prefs.default_scope_name);
|
||||
} else {
|
||||
Serial.println(" > (none — unscoped)");
|
||||
}
|
||||
} else if (memcmp(key, "channel.scope ", 14) == 0) {
|
||||
int idx = atoi(&key[14]);
|
||||
if (idx >= 0 && idx < MAX_GROUP_CHANNELS) {
|
||||
ChannelDetails ch;
|
||||
if (getChannel(idx, ch) && ch.name[0] != '\0') {
|
||||
Serial.printf(" > %s scope: %s\n", ch.name,
|
||||
ch.scope_name[0] ? ch.scope_name : "(device default)");
|
||||
} else {
|
||||
Serial.printf(" Error: channel %d is empty\n", idx);
|
||||
}
|
||||
} else {
|
||||
Serial.println(" Error: invalid channel index");
|
||||
}
|
||||
|
||||
} else if (strcmp(key, "radio") == 0) {
|
||||
Serial.printf(" > freq=%.3f bw=%.1f sf=%d cr=%d tx=%d\n",
|
||||
_prefs.freq, _prefs.bw, _prefs.sf, _prefs.cr, _prefs.tx_power_dbm);
|
||||
@@ -2513,11 +2390,7 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
for (uint8_t i = 0; i < MAX_GROUP_CHANNELS; i++) {
|
||||
ChannelDetails ch;
|
||||
if (getChannel(i, ch) && ch.name[0] != '\0') {
|
||||
if (ch.scope_name[0]) {
|
||||
Serial.printf(" [%d] %s [%s]\n", i, ch.name, ch.scope_name);
|
||||
} else {
|
||||
Serial.printf(" [%d] %s [*]\n", i, ch.name);
|
||||
}
|
||||
Serial.printf(" [%d] %s\n", i, ch.name);
|
||||
found = true;
|
||||
} else {
|
||||
break;
|
||||
@@ -2564,27 +2437,11 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
uint32_t eff_baud = _prefs.gps_baudrate ? _prefs.gps_baudrate : GPS_BAUDRATE;
|
||||
Serial.printf(" gps.baud: %lu\n", (unsigned long)eff_baud);
|
||||
}
|
||||
Serial.printf(" region: %s\n",
|
||||
_prefs.default_scope_name[0] ? _prefs.default_scope_name : "(none — unscoped)");
|
||||
#ifdef HAS_4G_MODEM
|
||||
Serial.printf(" modem: %s\n", ModemManager::loadEnabledConfig() ? "on" : "off");
|
||||
Serial.printf(" apn: %s\n", modemManager.getAPN());
|
||||
Serial.printf(" imei: %s\n", modemManager.getIMEI());
|
||||
#endif
|
||||
// Contact auto-add
|
||||
{
|
||||
const char* mode = (_prefs.manual_add_contacts & 1) == 0 ? "auto" :
|
||||
(_prefs.autoadd_config & AUTO_ADD_ALL_TYPES) == 0 ? "manual" : "custom";
|
||||
Serial.printf(" contacts: %s", mode);
|
||||
if ((_prefs.manual_add_contacts & 1) != 0 && (_prefs.autoadd_config & AUTO_ADD_ALL_TYPES) != 0) {
|
||||
Serial.printf(" [%s%s%s%s]",
|
||||
(_prefs.autoadd_config & AUTO_ADD_CHAT) ? "C" : "",
|
||||
(_prefs.autoadd_config & AUTO_ADD_REPEATER) ? "R" : "",
|
||||
(_prefs.autoadd_config & AUTO_ADD_ROOM_SERVER) ? "S" : "",
|
||||
(_prefs.autoadd_config & AUTO_ADD_SENSOR) ? "N" : "");
|
||||
}
|
||||
Serial.printf(" maxhops:%d\n", _prefs.autoadd_max_hops);
|
||||
}
|
||||
// Detect current preset
|
||||
bool presetFound = false;
|
||||
for (int i = 0; i < (int)NUM_RADIO_PRESETS; i++) {
|
||||
@@ -2614,41 +2471,13 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
for (uint8_t i = 0; i < MAX_GROUP_CHANNELS; i++) {
|
||||
ChannelDetails ch;
|
||||
if (getChannel(i, ch) && ch.name[0] != '\0') {
|
||||
if (ch.scope_name[0]) {
|
||||
Serial.printf(" [%d] %s [%s]\n", i, ch.name, ch.scope_name);
|
||||
} else {
|
||||
Serial.printf(" [%d] %s [*]\n", i, ch.name);
|
||||
}
|
||||
Serial.printf(" [%d] %s\n", i, ch.name);
|
||||
chFound = true;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!chFound) Serial.println(" (none)");
|
||||
|
||||
// --- Contact auto-add settings ---
|
||||
} else if (strcmp(key, "contact.mode") == 0) {
|
||||
if ((_prefs.manual_add_contacts & 1) == 0) {
|
||||
Serial.println(" > auto");
|
||||
} else if ((_prefs.autoadd_config & AUTO_ADD_ALL_TYPES) == 0) {
|
||||
Serial.println(" > manual");
|
||||
} else {
|
||||
Serial.println(" > custom");
|
||||
}
|
||||
} else if (strcmp(key, "contact.autoadd") == 0) {
|
||||
Serial.printf(" > chat:%s rptr:%s room:%s sensor:%s overwrite:%s\n",
|
||||
(_prefs.autoadd_config & AUTO_ADD_CHAT) ? "on" : "off",
|
||||
(_prefs.autoadd_config & AUTO_ADD_REPEATER) ? "on" : "off",
|
||||
(_prefs.autoadd_config & AUTO_ADD_ROOM_SERVER) ? "on" : "off",
|
||||
(_prefs.autoadd_config & AUTO_ADD_SENSOR) ? "on" : "off",
|
||||
(_prefs.autoadd_config & AUTO_ADD_OVERWRITE_OLDEST) ? "on" : "off");
|
||||
} else if (strcmp(key, "contact.maxhops") == 0) {
|
||||
if (_prefs.autoadd_max_hops == 0) {
|
||||
Serial.println(" > 0 (no limit)");
|
||||
} else {
|
||||
Serial.printf(" > %d\n", _prefs.autoadd_max_hops);
|
||||
}
|
||||
|
||||
} else {
|
||||
Serial.printf(" Error: unknown key '%s' (try 'help')\n", key);
|
||||
}
|
||||
@@ -3036,54 +2865,6 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
Serial.println(" Error: use 0 (default), 4800, 9600, 19200, 38400, 57600, or 115200");
|
||||
}
|
||||
|
||||
// Region scope commands
|
||||
} else if (memcmp(config, "region ", 7) == 0) {
|
||||
const char* name = &config[7];
|
||||
if (strcmp(name, "none") == 0 || strcmp(name, "clear") == 0 || name[0] == '\0') {
|
||||
memset(_prefs.default_scope_name, 0, sizeof(_prefs.default_scope_name));
|
||||
memset(_prefs.default_scope_key, 0, sizeof(_prefs.default_scope_key));
|
||||
savePrefs();
|
||||
Serial.println(" > region cleared (unscoped)");
|
||||
} else if (strlen(name) < 31) {
|
||||
strncpy(_prefs.default_scope_name, name, sizeof(_prefs.default_scope_name));
|
||||
_prefs.default_scope_name[30] = '\0';
|
||||
TransportKey key;
|
||||
deriveScopeKey(name, key);
|
||||
memcpy(_prefs.default_scope_key, key.key, sizeof(_prefs.default_scope_key));
|
||||
savePrefs();
|
||||
Serial.printf(" > region = %s\n", _prefs.default_scope_name);
|
||||
} else {
|
||||
Serial.println(" Error: region name too long (max 29 chars)");
|
||||
}
|
||||
} else if (memcmp(config, "channel.scope ", 14) == 0) {
|
||||
// set channel.scope <idx> <name> (or "set channel.scope <idx> none" to clear)
|
||||
int idx = atoi(&config[14]);
|
||||
const char* rest = strchr(&config[14], ' ');
|
||||
if (idx >= 0 && idx < MAX_GROUP_CHANNELS && rest) {
|
||||
rest++; // skip space
|
||||
ChannelDetails ch;
|
||||
if (getChannel(idx, ch) && ch.name[0] != '\0') {
|
||||
if (strcmp(rest, "none") == 0 || strcmp(rest, "clear") == 0) {
|
||||
memset(ch.scope_name, 0, sizeof(ch.scope_name));
|
||||
} else if (strlen(rest) < 31) {
|
||||
strncpy(ch.scope_name, rest, sizeof(ch.scope_name));
|
||||
ch.scope_name[30] = '\0';
|
||||
} else {
|
||||
Serial.println(" Error: scope name too long (max 29 chars)");
|
||||
cli_command[0] = 0;
|
||||
return;
|
||||
}
|
||||
setChannel(idx, ch);
|
||||
saveChannels();
|
||||
Serial.printf(" > %s scope = %s\n", ch.name,
|
||||
ch.scope_name[0] ? ch.scope_name : "(device default)");
|
||||
} else {
|
||||
Serial.printf(" Error: channel %d is empty\n", idx);
|
||||
}
|
||||
} else {
|
||||
Serial.println(" Usage: set channel.scope <idx> <name|none>");
|
||||
}
|
||||
|
||||
// Backlight control (T5S3 E-Paper Pro only)
|
||||
} else if (memcmp(config, "backlight ", 10) == 0) {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
@@ -3108,60 +2889,6 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
Serial.println(" Error: backlight not available on this device");
|
||||
#endif
|
||||
|
||||
// --- Contact auto-add settings ---
|
||||
} else if (memcmp(config, "contact.mode ", 13) == 0) {
|
||||
const char* val = &config[13];
|
||||
if (strcmp(val, "auto") == 0) {
|
||||
_prefs.manual_add_contacts &= ~1;
|
||||
savePrefs();
|
||||
Serial.println(" > auto-add all");
|
||||
} else if (strcmp(val, "custom") == 0) {
|
||||
_prefs.manual_add_contacts |= 1;
|
||||
if ((_prefs.autoadd_config & AUTO_ADD_ALL_TYPES) == 0) {
|
||||
_prefs.autoadd_config |= AUTO_ADD_ALL_TYPES;
|
||||
}
|
||||
savePrefs();
|
||||
Serial.println(" > custom (use contact.autoadd to configure)");
|
||||
} else if (strcmp(val, "manual") == 0) {
|
||||
_prefs.manual_add_contacts |= 1;
|
||||
_prefs.autoadd_config &= ~AUTO_ADD_ALL_TYPES;
|
||||
savePrefs();
|
||||
Serial.println(" > manual only (no auto-add)");
|
||||
} else if (strcmp(val, "repeater-only") == 0) {
|
||||
_prefs.manual_add_contacts |= 1;
|
||||
_prefs.autoadd_config = (_prefs.autoadd_config & AUTO_ADD_OVERWRITE_OLDEST) | AUTO_ADD_REPEATER;
|
||||
savePrefs();
|
||||
Serial.println(" > auto-add repeaters only");
|
||||
} else {
|
||||
Serial.println(" Error: auto|custom|manual|repeater-only");
|
||||
}
|
||||
} else if (memcmp(config, "contact.autoadd ", 16) == 0) {
|
||||
const char* rest = &config[16];
|
||||
uint8_t bit = 0;
|
||||
const char* val = NULL;
|
||||
if (memcmp(rest, "chat ", 5) == 0) { bit = AUTO_ADD_CHAT; val = &rest[5]; }
|
||||
else if (memcmp(rest, "repeater ", 9) == 0) { bit = AUTO_ADD_REPEATER; val = &rest[9]; }
|
||||
else if (memcmp(rest, "room ", 5) == 0) { bit = AUTO_ADD_ROOM_SERVER; val = &rest[5]; }
|
||||
else if (memcmp(rest, "sensor ", 7) == 0) { bit = AUTO_ADD_SENSOR; val = &rest[7]; }
|
||||
else if (memcmp(rest, "overwrite ", 10) == 0) { bit = AUTO_ADD_OVERWRITE_OLDEST; val = &rest[10]; }
|
||||
|
||||
if (bit && val) {
|
||||
if (strcmp(val, "on") == 0) { _prefs.autoadd_config |= bit; savePrefs(); Serial.println(" > OK"); }
|
||||
else if (strcmp(val, "off") == 0) { _prefs.autoadd_config &= ~bit; savePrefs(); Serial.println(" > OK"); }
|
||||
else { Serial.println(" Error: on|off"); }
|
||||
} else {
|
||||
Serial.println(" Error: chat|repeater|room|sensor|overwrite on|off");
|
||||
}
|
||||
} else if (memcmp(config, "contact.maxhops ", 16) == 0) {
|
||||
int h = atoi(&config[16]);
|
||||
if (h >= 0 && h <= 64) {
|
||||
_prefs.autoadd_max_hops = (uint8_t)h;
|
||||
savePrefs();
|
||||
Serial.printf(" > maxhops = %d%s\n", h, h == 0 ? " (no limit)" : "");
|
||||
} else {
|
||||
Serial.println(" Error: 0-64 (0=no limit)");
|
||||
}
|
||||
|
||||
} else {
|
||||
Serial.printf(" Error: unknown setting '%s' (try 'help')\n", config);
|
||||
}
|
||||
@@ -3172,17 +2899,6 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
} else if (memcmp(cli_command, "clock sync ", 11) == 0) {
|
||||
uint32_t epoch = (uint32_t)strtoul(&cli_command[11], nullptr, 10);
|
||||
if (epoch > 1704067200UL && epoch < 2082758400UL) {
|
||||
// Adjust stored advert timestamps if clock jumps significantly
|
||||
uint32_t curr = getRTCClock()->getCurrentTime();
|
||||
if (advert_paths && epoch > curr + 60) {
|
||||
uint32_t delta = epoch - curr;
|
||||
for (int i = 0; i < ADVERT_PATH_TABLE_SIZE; i++) {
|
||||
if (advert_paths[i].recv_timestamp > 0) {
|
||||
advert_paths[i].recv_timestamp += delta;
|
||||
}
|
||||
}
|
||||
Serial.printf(" > adjusted advert timestamps by +%lu seconds\n", (unsigned long)delta);
|
||||
}
|
||||
getRTCClock()->setCurrentTime(epoch);
|
||||
Serial.printf(" > clock synced to %lu\n", (unsigned long)epoch);
|
||||
} else {
|
||||
@@ -3253,18 +2969,6 @@ void MyMesh::checkCLIRescueCmd() {
|
||||
Serial.println(" set preset <name|num> Apply radio preset");
|
||||
Serial.println(" set channel.add <name> Add hashtag channel");
|
||||
Serial.println(" set channel.del <idx> Delete channel by index");
|
||||
Serial.println("");
|
||||
Serial.println(" Regions:");
|
||||
Serial.println(" get/set region Device default region (e.g. au-nsw)");
|
||||
Serial.println(" set region none Clear default region (unscoped)");
|
||||
Serial.println(" get channel.scope <i> Show scope for channel i");
|
||||
Serial.println(" set channel.scope <i> <name|none>");
|
||||
Serial.println("");
|
||||
Serial.println(" Contact auto-add:");
|
||||
Serial.println(" contact.mode auto|custom|manual|repeater-only");
|
||||
Serial.println(" contact.autoadd Show type toggles");
|
||||
Serial.println(" contact.autoadd <type> on|off chat|repeater|room|sensor|overwrite");
|
||||
Serial.println(" contact.maxhops <0-64> Max hops for auto-add (0=no limit)");
|
||||
#ifdef HAS_4G_MODEM
|
||||
Serial.println("");
|
||||
Serial.println(" 4G modem:");
|
||||
@@ -3438,29 +3142,20 @@ void MyMesh::checkSerialInterface() {
|
||||
} else if (_iter_started // check if our ContactsIterator is 'running'
|
||||
&& !_serial->isWriteBusy() // don't spam the Serial Interface too quickly!
|
||||
) {
|
||||
// Batch-fill: queue multiple contacts per loop iteration so the BLE
|
||||
// send queue stays saturated during sync. writeFrame() returns 0
|
||||
// when the queue is full, which naturally throttles us.
|
||||
ContactInfo contact;
|
||||
bool done = false;
|
||||
int queued = 0;
|
||||
while (!done && queued < 8) { // up to 8 per iteration to avoid starving loop()
|
||||
if (_iter.hasNext(this, contact)) {
|
||||
if (contact.lastmod > _iter_filter_since) { // apply the 'since' filter
|
||||
if (writeContactRespFrame(RESP_CODE_CONTACT, contact) == 0) break; // queue full
|
||||
queued++;
|
||||
if (contact.lastmod > _most_recent_lastmod) {
|
||||
_most_recent_lastmod = contact.lastmod;
|
||||
}
|
||||
if (_iter.hasNext(this, contact)) {
|
||||
if (contact.lastmod > _iter_filter_since) { // apply the 'since' filter
|
||||
writeContactRespFrame(RESP_CODE_CONTACT, contact);
|
||||
if (contact.lastmod > _most_recent_lastmod) {
|
||||
_most_recent_lastmod = contact.lastmod; // save for the RESP_CODE_END_OF_CONTACTS frame
|
||||
}
|
||||
} else { // EOF
|
||||
out_frame[0] = RESP_CODE_END_OF_CONTACTS;
|
||||
memcpy(&out_frame[1], &_most_recent_lastmod,
|
||||
4); // include the most recent lastmod, so app can update their 'since'
|
||||
_serial->writeFrame(out_frame, 5);
|
||||
_iter_started = false;
|
||||
done = true;
|
||||
}
|
||||
} else { // EOF
|
||||
out_frame[0] = RESP_CODE_END_OF_CONTACTS;
|
||||
memcpy(&out_frame[1], &_most_recent_lastmod,
|
||||
4); // include the most recent lastmod, so app can update their 'since'
|
||||
_serial->writeFrame(out_frame, 5);
|
||||
_iter_started = false;
|
||||
}
|
||||
//} else if (!_serial->isWriteBusy()) {
|
||||
// checkConnections(); // TODO - deprecate the 'Connections' stuff
|
||||
@@ -3479,36 +3174,22 @@ void MyMesh::loop() {
|
||||
}
|
||||
|
||||
// is there are pending dirty contacts write needed?
|
||||
bool userActive = _lastUserInput && (millis() - _lastUserInput) < USER_IDLE_SAVE_THRESHOLD;
|
||||
if (dirty_contacts_expiry && millisHasNowPassed(dirty_contacts_expiry)) {
|
||||
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
||||
// nRF52/STM32: blocking save (fast on internal flash, no chunking needed)
|
||||
if (!_deferSaves && !userActive) {
|
||||
_store->saveContacts(this);
|
||||
dirty_contacts_expiry = 0;
|
||||
} else {
|
||||
dirty_contacts_expiry = futureMillis(2000);
|
||||
}
|
||||
#else
|
||||
if (_deferSaves || userActive) {
|
||||
// Voice session or active keyboard use -- push save forward
|
||||
if (_deferSaves) {
|
||||
// Voice session receiving — push save forward to avoid SPI contention
|
||||
dirty_contacts_expiry = futureMillis(2000);
|
||||
} else if (!_store->isSaveInProgress()) {
|
||||
_store->beginSaveContacts(this);
|
||||
dirty_contacts_expiry = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !defined(NRF52_PLATFORM) && !defined(STM32_PLATFORM)
|
||||
// Drive chunked contact save -- write a batch each loop iteration
|
||||
// Paused while user is actively pressing keys or voice session is receiving
|
||||
if (_store->isSaveInProgress() && !_deferSaves && !userActive) {
|
||||
// Drive chunked contact save — write a batch each loop iteration
|
||||
if (_store->isSaveInProgress() && !_deferSaves) {
|
||||
if (!_store->saveContactsChunk(20)) { // 20 contacts per chunk (~3KB, ~30ms)
|
||||
_store->finishSaveContacts(); // Done or error -- verify and commit
|
||||
_store->finishSaveContacts(); // Done or error — verify and commit
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Discovery scan timeout
|
||||
if (_discoveryActive && millisHasNowPassed(_discoveryTimeout)) {
|
||||
@@ -3568,13 +3249,6 @@ void MyMesh::stopDiscovery() {
|
||||
_discoveryActive = false;
|
||||
}
|
||||
|
||||
bool MyMesh::forceImportContact(const uint8_t* blob, uint8_t len) {
|
||||
_forceNextImport = true;
|
||||
bool ok = importContact(blob, len);
|
||||
if (!ok) _forceNextImport = false; // clear if importContact failed (no loopback queued)
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool MyMesh::addDiscoveredToContacts(int idx) {
|
||||
if (idx < 0 || idx >= _discoveredCount) return false;
|
||||
if (_discovered[idx].already_in_contacts) return true; // already there
|
||||
@@ -3583,7 +3257,7 @@ bool MyMesh::addDiscoveredToContacts(int idx) {
|
||||
uint8_t buf[256];
|
||||
int plen = getBlobByKey(_discovered[idx].contact.id.pub_key, PUB_KEY_SIZE, buf);
|
||||
if (plen > 0) {
|
||||
bool ok = forceImportContact(buf, (uint8_t)plen);
|
||||
bool ok = importContact(buf, (uint8_t)plen);
|
||||
if (ok) {
|
||||
_discovered[idx].already_in_contacts = true;
|
||||
dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY);
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
#include "AbstractUITask.h"
|
||||
|
||||
/*------------ Frame Protocol --------------*/
|
||||
#define FIRMWARE_VER_CODE 11
|
||||
#define FIRMWARE_VER_CODE 10
|
||||
|
||||
#ifndef FIRMWARE_BUILD_DATE
|
||||
#define FIRMWARE_BUILD_DATE "7 May 2026"
|
||||
#define FIRMWARE_BUILD_DATE "31 March 2026"
|
||||
#endif
|
||||
|
||||
#ifndef FIRMWARE_VERSION
|
||||
#define FIRMWARE_VERSION "Meck v1.9"
|
||||
#define FIRMWARE_VERSION "Meck v1.6"
|
||||
#endif
|
||||
|
||||
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
||||
@@ -82,7 +82,7 @@
|
||||
#define REQ_TYPE_GET_TELEMETRY_DATA 0x03
|
||||
|
||||
struct AdvertPath {
|
||||
uint8_t pubkey_prefix[8];
|
||||
uint8_t pubkey_prefix[7];
|
||||
uint8_t path_len;
|
||||
uint8_t type; // ADV_TYPE_* (Chat/Repeater/Room/Sensor)
|
||||
char name[32];
|
||||
@@ -131,9 +131,6 @@ public:
|
||||
int getContactBlob(const uint8_t key[], int key_len, uint8_t dest_buf[]) {
|
||||
return getBlobByKey(key, key_len, dest_buf);
|
||||
}
|
||||
// Force-add a contact from a raw advert blob, bypassing auto-add settings.
|
||||
// Used by Last Heard and Discovery when the user explicitly selects a node to add.
|
||||
bool forceImportContact(const uint8_t* blob, uint8_t len);
|
||||
|
||||
// Queue a sent channel message for BLE app sync
|
||||
void queueSentChannelMessage(uint8_t channel_idx, uint32_t timestamp, const char* sender, const char* text);
|
||||
@@ -160,10 +157,6 @@ public:
|
||||
void setDeferSaves(bool defer) { _deferSaves = defer; }
|
||||
bool isDeferSaves() const { return _deferSaves; }
|
||||
|
||||
// Notify that the user pressed a key — defers contact saves until idle.
|
||||
// Call from main.cpp keyboard handler on every keypress.
|
||||
void notifyUserInput() { _lastUserInput = millis(); }
|
||||
|
||||
// Repeater admin - UI-initiated operations
|
||||
bool uiLoginToRepeater(uint32_t contact_idx, const char* password, uint32_t& est_timeout_ms);
|
||||
bool uiSendCliCommand(uint32_t contact_idx, const char* command);
|
||||
@@ -175,13 +168,6 @@ public:
|
||||
bool setCustomPath(int contactIdx, const uint8_t* path, uint8_t pathLen, bool lock);
|
||||
void clearCustomPath(int contactIdx);
|
||||
|
||||
// Region scope helpers (public — used by SettingsScreen)
|
||||
// Derive a TransportKey from a region scope name (e.g. "au-nsw" → "#au-nsw" → SHA256 → key).
|
||||
// Returns true if name is non-empty and key was derived; false if name is empty (unscoped).
|
||||
bool deriveScopeKey(const char* scopeName, TransportKey& keyOut);
|
||||
// Look up per-channel scope name by GroupChannel secret match. Returns nullptr if no scope set.
|
||||
const char* getChannelScopeName(const mesh::GroupChannel& channel);
|
||||
|
||||
|
||||
protected:
|
||||
float getAirtimeBudgetFactor() const override;
|
||||
@@ -199,7 +185,6 @@ protected:
|
||||
uint8_t getPathHashSize() const override { return _prefs.path_hash_mode + 1; }
|
||||
void sendFloodScoped(const ContactInfo& recipient, mesh::Packet* pkt, uint32_t delay_millis=0) override;
|
||||
void sendFloodScoped(const mesh::GroupChannel& channel, mesh::Packet* pkt, uint32_t delay_millis=0) override;
|
||||
void sendFloodScoped(const TransportKey& scope, mesh::Packet* pkt, uint32_t delay_millis=0);
|
||||
|
||||
void logRxRaw(float snr, float rssi, const uint8_t raw[], int len) override;
|
||||
bool isAutoAddEnabled() const override;
|
||||
@@ -258,7 +243,7 @@ private:
|
||||
void writeOKFrame();
|
||||
void writeErrFrame(uint8_t err_code);
|
||||
void writeDisabledFrame();
|
||||
size_t writeContactRespFrame(uint8_t code, const ContactInfo &contact);
|
||||
void writeContactRespFrame(uint8_t code, const ContactInfo &contact);
|
||||
void updateContactFromFrame(ContactInfo &contact, uint32_t& last_mod, const uint8_t *frame, int len);
|
||||
void addToOfflineQueue(const uint8_t frame[], int len);
|
||||
int getFromOfflineQueue(uint8_t frame[]);
|
||||
@@ -276,9 +261,7 @@ private:
|
||||
NodePrefs _prefs;
|
||||
VoiceRawHandler _voiceHandler = nullptr;
|
||||
VoiceEnvelopeHandler _voiceEnvHandler = nullptr;
|
||||
mutable bool _forceNextImport = false;
|
||||
bool _deferSaves = false;
|
||||
unsigned long _lastUserInput = 0; // millis() of last keypress -- defer saves until idle
|
||||
uint32_t pending_login;
|
||||
uint32_t pending_status;
|
||||
uint32_t pending_telemetry, pending_discovery; // pending _TELEMETRY_REQ
|
||||
@@ -322,10 +305,8 @@ private:
|
||||
AckTableEntry expected_ack_table[EXPECTED_ACK_TABLE_SIZE]; // circular table
|
||||
int next_ack_idx;
|
||||
|
||||
#ifndef ADVERT_PATH_TABLE_SIZE
|
||||
#define ADVERT_PATH_TABLE_SIZE 1000
|
||||
#endif
|
||||
AdvertPath* advert_paths; // PSRAM-allocated in begin(), size = ADVERT_PATH_TABLE_SIZE
|
||||
#define ADVERT_PATH_TABLE_SIZE 40
|
||||
AdvertPath advert_paths[ADVERT_PATH_TABLE_SIZE]; // circular table
|
||||
|
||||
// Sent message repeat tracking
|
||||
#define SENT_TRACK_SIZE 4
|
||||
|
||||
@@ -40,22 +40,12 @@ struct NodePrefs { // persisted to file
|
||||
uint8_t auto_lock_minutes; // 0=disabled, 2/5/10/15/30=auto-lock after idle
|
||||
uint8_t hint_shown; // 0=show nav hint on boot, 1=already shown (dismiss permanently)
|
||||
uint8_t large_font; // 0=tiny (built-in 6x8), 1=larger (FreeSans9pt) — T-Deck Pro only
|
||||
uint8_t ui_font_style; // 0=Classic (FreeSans), 1=Noto Sans, 2=Montserrat
|
||||
uint8_t tx_fail_reset_threshold; // 0=disabled, 1-10, default 3
|
||||
uint8_t rx_fail_reboot_threshold; // 0=disabled, 1-10, default 3
|
||||
|
||||
// --- Region scope (MeshCore v1.15+ compatibility) ---
|
||||
// Device-wide default region for flood messages.
|
||||
// Empty default_scope_name = unscoped (legacy flood, reaches all repeaters).
|
||||
// When set, all flood sends use ROUTE_TYPE_TRANSPORT_FLOOD with transport
|
||||
// codes derived from this key. Per-channel scope (in ChannelDetails) takes
|
||||
// priority when set.
|
||||
char default_scope_name[31]; // e.g. "au-nsw", empty = unscoped
|
||||
uint8_t default_scope_key[16]; // TransportKey derived from "#" + name
|
||||
|
||||
// --- Font helpers (inline, no overhead) ---
|
||||
// Returns the DisplayDriver text-size index for "small/body" text.
|
||||
// T-Deck Pro: 0 = built-in 6×8 (or 7pt with custom fonts), 1 = 9pt.
|
||||
// T-Deck Pro: 0 = built-in 6×8, 1 = FreeSans9pt.
|
||||
// T5S3: both 0 and 1 are 12pt fonts (regular vs bold) with identical line
|
||||
// height, so large_font has no layout effect there.
|
||||
inline uint8_t smallTextSize() const {
|
||||
@@ -64,8 +54,6 @@ struct NodePrefs { // persisted to file
|
||||
|
||||
// Returns the virtual-coordinate line height matching smallTextSize().
|
||||
// T-Deck Pro size 0 → 9 (6×8 + 1px gap), size 1 → 11 (9pt ascent+descent).
|
||||
// With custom fonts (Noto 7pt, Montserrat 7pt), size 0 is slightly taller
|
||||
// than built-in 6×8 but fits within the 9-unit virtual grid.
|
||||
// T5S3 size 0/1 → same 12pt height → always 9 in virtual coords.
|
||||
inline int smallLineH() const {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
@@ -78,18 +66,13 @@ struct NodePrefs { // persisted to file
|
||||
// Returns the Y offset for selection highlight fillRect (T-Deck Pro only).
|
||||
// Size 0 (built-in font): cursor positions at top-left, +5 offset in
|
||||
// setCursor places text below → fillRect at y+5 aligns with text.
|
||||
// Size 0 (custom 7pt fonts): baseline fonts, same behaviour as size 1.
|
||||
// Size 1 (9pt): cursor positions at baseline, ascenders render
|
||||
// Size 1 (FreeSans9pt): cursor positions at baseline, ascenders render
|
||||
// upward → fillRect must start above baseline to cover ascenders.
|
||||
// T5S3: always 0 (both sizes use baseline fonts with highlight at y).
|
||||
inline int smallHighlightOff() const {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
return 0;
|
||||
#else
|
||||
// Custom 7pt fonts at textSize 0 use GFXfont (baseline rendering), not built-in.
|
||||
// Offset 0: highlight starts at row top, covers 7pt ascenders without
|
||||
// bleeding into the row above (-2 was calibrated for taller 9pt ascenders).
|
||||
if (ui_font_style > 0 && !large_font) return 0;
|
||||
return large_font ? -2 : 5;
|
||||
#endif
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,22 +5,19 @@
|
||||
// Polls 0x5F on the shared I2C bus via QWIIC connector.
|
||||
// Maps CardKB special key codes to Meck key constants.
|
||||
//
|
||||
// Platform support:
|
||||
// - ESP32/ESP32-S3 (T5S3, T-Deck Pro): Wire.begin(SDA, SCL)
|
||||
// - nRF52840 (T-Echo Lite): Wire.begin() uses variant.h pins
|
||||
//
|
||||
// Usage:
|
||||
// CardKBKeyboard cardkb;
|
||||
// if (cardkb.begin()) { /* detected */ }
|
||||
// char key = cardkb.readKey(); // returns 0 if no key
|
||||
// =============================================================================
|
||||
|
||||
#if defined(MECK_CARDKB)
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro) && defined(MECK_CARDKB)
|
||||
#ifndef CARDKB_KEYBOARD_H
|
||||
#define CARDKB_KEYBOARD_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
#include "variant.h" // For I2C_SDA, I2C_SCL (bus recovery)
|
||||
|
||||
// I2C address (defined in variant.h, fallback here)
|
||||
#ifndef CARDKB_I2C_ADDR
|
||||
@@ -78,13 +75,7 @@ public:
|
||||
_errorCount++;
|
||||
if (_errorCount >= 3) {
|
||||
// I2C bus may be stuck — re-init to recover
|
||||
#if defined(ESP32)
|
||||
// ESP32: Wire.begin() accepts explicit SDA/SCL pins
|
||||
Wire.begin(I2C_SDA, I2C_SCL);
|
||||
#else
|
||||
// nRF52: Wire.begin() uses PIN_WIRE_SDA/SCL from variant.h
|
||||
Wire.begin();
|
||||
#endif
|
||||
Wire.setClock(100000);
|
||||
_pollInterval = 500; // Back off for 500ms
|
||||
_errorCount = 0;
|
||||
@@ -128,4 +119,4 @@ private:
|
||||
};
|
||||
|
||||
#endif // CARDKB_KEYBOARD_H
|
||||
#endif // MECK_CARDKB
|
||||
#endif // LilyGo_T5S3_EPaper_Pro && MECK_CARDKB
|
||||
@@ -13,12 +13,8 @@
|
||||
#endif
|
||||
|
||||
// Maximum messages to store in history
|
||||
#ifndef CHANNEL_MSG_HISTORY_SIZE
|
||||
#define CHANNEL_MSG_HISTORY_SIZE 300
|
||||
#endif
|
||||
#ifndef CHANNEL_MSG_TEXT_LEN
|
||||
#define CHANNEL_MSG_TEXT_LEN 160
|
||||
#endif
|
||||
#define MSG_PATH_MAX 20 // Max repeater hops stored per message
|
||||
|
||||
#ifndef MAX_GROUP_CHANNELS
|
||||
@@ -29,7 +25,7 @@
|
||||
// On-disk format for message persistence (SD card)
|
||||
// ---------------------------------------------------------------------------
|
||||
#define MSG_FILE_MAGIC 0x4D434853 // "MCHS" - MeshCore History Store
|
||||
#define MSG_FILE_VERSION 4 // v4: added dm_peer_hash for DM persistence
|
||||
#define MSG_FILE_VERSION 3 // v3: MSG_PATH_MAX=20, reserved→snr field
|
||||
#define MSG_FILE_PATH "/meshcore/messages.bin"
|
||||
|
||||
struct __attribute__((packed)) MsgFileHeader {
|
||||
@@ -46,11 +42,10 @@ struct __attribute__((packed)) MsgFileRecord {
|
||||
uint8_t path_len;
|
||||
uint8_t channel_idx;
|
||||
uint8_t valid;
|
||||
int8_t snr; // Receive SNR x 4 (was reserved; 0 = unknown)
|
||||
uint32_t dm_peer_hash; // DM peer name hash (v4+, for conversation filtering)
|
||||
int8_t snr; // Receive SNR × 4 (was reserved; 0 = unknown)
|
||||
uint8_t path[MSG_PATH_MAX]; // Repeater hop hashes (first byte of pub key)
|
||||
char text[CHANNEL_MSG_TEXT_LEN];
|
||||
// 192 bytes total
|
||||
// 188 bytes total
|
||||
};
|
||||
|
||||
class UITask; // Forward declaration
|
||||
@@ -337,11 +332,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// Mark all channels + DMs as read (companion app connected)
|
||||
void markAllRead() {
|
||||
memset(_unread, 0, sizeof(_unread));
|
||||
}
|
||||
|
||||
// Get unread count for a specific channel
|
||||
int getUnreadForChannel(uint8_t channel_idx) const {
|
||||
int slot = (channel_idx == 0xFF) ? MAX_GROUP_CHANNELS : channel_idx;
|
||||
@@ -435,7 +425,6 @@ public:
|
||||
rec.channel_idx = _messages[i].channel_idx;
|
||||
rec.valid = _messages[i].valid ? 1 : 0;
|
||||
rec.snr = _messages[i].snr;
|
||||
rec.dm_peer_hash = _messages[i].dm_peer_hash;
|
||||
memcpy(rec.path, _messages[i].path, MSG_PATH_MAX);
|
||||
memcpy(rec.text, _messages[i].text, CHANNEL_MSG_TEXT_LEN);
|
||||
f.write((uint8_t*)&rec, sizeof(rec));
|
||||
@@ -503,7 +492,6 @@ public:
|
||||
_messages[i].channel_idx = rec.channel_idx;
|
||||
_messages[i].valid = (rec.valid != 0);
|
||||
_messages[i].snr = rec.snr;
|
||||
_messages[i].dm_peer_hash = rec.dm_peer_hash;
|
||||
memcpy(_messages[i].path, rec.path, MSG_PATH_MAX);
|
||||
memcpy(_messages[i].text, rec.text, CHANNEL_MSG_TEXT_LEN);
|
||||
if (_messages[i].valid) loaded++;
|
||||
@@ -740,12 +728,6 @@ public:
|
||||
const char* rtInbox = "Hold:Open";
|
||||
display.setCursor(display.width() - display.getTextWidth(rtInbox) - 2, footerY);
|
||||
display.print(rtInbox);
|
||||
#elif defined(LILYGO_TECHO_LITE)
|
||||
display.setCursor(0, footerY);
|
||||
display.print("Q:Bk");
|
||||
const char* rtInbox = "Ent:Open";
|
||||
display.setCursor(display.width() - display.getTextWidth(rtInbox) - 2, footerY);
|
||||
display.print(rtInbox);
|
||||
#else
|
||||
display.setCursor(0, footerY);
|
||||
display.print("Q:Bck A/D:Ch");
|
||||
@@ -982,10 +964,6 @@ public:
|
||||
display.print("Swipe: Switch channel");
|
||||
display.setCursor(0, 40);
|
||||
display.print("Long press: Compose");
|
||||
#elif defined(LILYGO_TECHO_LITE)
|
||||
display.print("Arrows: Switch channel");
|
||||
display.setCursor(0, 40);
|
||||
display.print("Ent: Compose message");
|
||||
#else
|
||||
display.print("A/D: Switch channel");
|
||||
display.setCursor(0, 40);
|
||||
@@ -1238,16 +1216,9 @@ public:
|
||||
uint8_t b = (uint8_t)msg->text[pos];
|
||||
|
||||
if (b == EMOJI_PAD_BYTE) { pos++; continue; }
|
||||
|
||||
// --- UTF-8 lead byte detection ---
|
||||
// Must check BEFORE isEmojiEscape() because lead bytes 0xC2-0xCC
|
||||
// overlap the emoji escape range (0x80-0xCC). A byte >= 0xC2
|
||||
// followed by a continuation byte (0x80-0xBF) is always UTF-8.
|
||||
bool isUtf8 = (b >= 0xC2 && pos + 1 < textLen &&
|
||||
((uint8_t)msg->text[pos + 1] & 0xC0) == 0x80);
|
||||
|
||||
|
||||
// Word wrap: when starting a new text word, check if it fits
|
||||
if (b != ' ' && (isUtf8 || !isEmojiEscape(b)) && px > 0) {
|
||||
if (b != ' ' && !isEmojiEscape(b) && px > 0) {
|
||||
bool boundary = (pos == 0);
|
||||
if (!boundary) {
|
||||
for (int bp = pos - 1; bp >= 0; bp--) {
|
||||
@@ -1259,31 +1230,15 @@ public:
|
||||
}
|
||||
if (boundary) {
|
||||
int wordW = 0;
|
||||
for (int j = pos; j < textLen; ) {
|
||||
for (int j = pos; j < textLen; j++) {
|
||||
uint8_t wb = (uint8_t)msg->text[j];
|
||||
if (wb == EMOJI_PAD_BYTE) { j++; continue; }
|
||||
if (wb == ' ') break;
|
||||
// Check for UTF-8 lead byte in word scan
|
||||
bool wbUtf8 = (wb >= 0xC2 && j + 1 < textLen &&
|
||||
((uint8_t)msg->text[j + 1] & 0xC0) == 0x80);
|
||||
if (!wbUtf8 && isEmojiEscape(wb)) break;
|
||||
if (wbUtf8) {
|
||||
int clen = (wb < 0xE0) ? 2 : (wb < 0xF0) ? 3 : 4;
|
||||
int actual = (j + clen <= textLen) ? clen : textLen - j;
|
||||
char mbuf[5] = {0};
|
||||
memcpy(mbuf, &msg->text[j], actual);
|
||||
int charAdv = display.getTextWidth(mbuf);
|
||||
if (charAdv < 1) charAdv = 1;
|
||||
wordW += charAdv;
|
||||
j += actual;
|
||||
} else {
|
||||
charStr[0] = (char)wb;
|
||||
dblStr[0] = dblStr[1] = (char)wb;
|
||||
int charAdv = display.getTextWidth(dblStr) - display.getTextWidth(charStr);
|
||||
if (charAdv < 1) charAdv = 1;
|
||||
wordW += charAdv;
|
||||
j++;
|
||||
}
|
||||
if (wb == EMOJI_PAD_BYTE) continue;
|
||||
if (wb == ' ' || isEmojiEscape(wb)) break;
|
||||
charStr[0] = (char)wb;
|
||||
dblStr[0] = dblStr[1] = (char)wb;
|
||||
int charAdv = display.getTextWidth(dblStr) - display.getTextWidth(charStr);
|
||||
if (charAdv < 1) charAdv = 1;
|
||||
wordW += charAdv;
|
||||
}
|
||||
if (px + wordW > lineW) {
|
||||
px = 0;
|
||||
@@ -1294,25 +1249,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// --- Render: UTF-8 multi-byte character ---
|
||||
if (isUtf8) {
|
||||
int clen = (b < 0xE0) ? 2 : (b < 0xF0) ? 3 : 4;
|
||||
int actual = (pos + clen <= textLen) ? clen : textLen - pos;
|
||||
char mbuf[5] = {0};
|
||||
memcpy(mbuf, &msg->text[pos], actual);
|
||||
int adv = display.getTextWidth(mbuf);
|
||||
if (adv < 1) adv = 1;
|
||||
if (px + adv > lineW) {
|
||||
px = 0;
|
||||
linesForThisMsg++;
|
||||
y += lineHeight;
|
||||
if (linesForThisMsg >= maxLinesPerMsg || y + lineHeight > maxY) break;
|
||||
}
|
||||
display.setCursor(px, y);
|
||||
display.print(mbuf);
|
||||
px += adv;
|
||||
pos += actual;
|
||||
} else if (isEmojiEscape(b)) {
|
||||
if (isEmojiEscape(b)) {
|
||||
if (px + EMOJI_SM_W > lineW) {
|
||||
px = 0;
|
||||
linesForThisMsg++;
|
||||
@@ -1459,19 +1396,6 @@ public:
|
||||
display.setCursor(display.width() - display.getTextWidth(rtCh) - 2, footerY);
|
||||
display.print(rtCh);
|
||||
}
|
||||
#elif defined(LILYGO_TECHO_LITE)
|
||||
// T-Echo Lite: minimal footer for narrow display
|
||||
if (_viewChannelIdx == 0xFF) {
|
||||
display.print("Q:Bk");
|
||||
const char* rightText = "Ent:Reply";
|
||||
display.setCursor(display.width() - display.getTextWidth(rightText) - 2, footerY);
|
||||
display.print(rightText);
|
||||
} else {
|
||||
display.print("Q:Bk");
|
||||
const char* rightText = "Ent:New";
|
||||
display.setCursor(display.width() - display.getTextWidth(rightText) - 2, footerY);
|
||||
display.print(rightText);
|
||||
}
|
||||
#else
|
||||
// Left side: abbreviated controls
|
||||
if (_replySelectMode) {
|
||||
|
||||
@@ -1,441 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <helpers/ChannelDetails.h>
|
||||
#include <MeshCore.h>
|
||||
#include "ChannelScreen.h"
|
||||
|
||||
#ifndef MAX_GROUP_CHANNELS
|
||||
#define MAX_GROUP_CHANNELS 20
|
||||
#endif
|
||||
|
||||
class UITask; // Forward declaration
|
||||
class MyMesh; // Forward declaration
|
||||
extern MyMesh the_mesh;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ChannelPickerScreen
|
||||
// ---------------------------------------------------------------------------
|
||||
// A directory-style screen that lists every group channel + the DM inbox,
|
||||
// each with an unread-message badge. Selecting an entry jumps to the channel
|
||||
// messages screen pre-targeted at that channel.
|
||||
//
|
||||
// Replaces the A/D channel-cycling model in ChannelScreen. Pressing A or D
|
||||
// (or swiping left/right on T5S3) from the messages screen now opens the
|
||||
// picker instead of paging one channel at a time.
|
||||
//
|
||||
// Rendering:
|
||||
// T5S3 E-Paper Pro : vertical list of outlined "bubble" rows (full-width,
|
||||
// name left-aligned, unread badge right-aligned).
|
||||
// Matches the P4 channel picker aesthetic. 1-tap opens.
|
||||
// T-Deck Pro / MAX : vertical list with "> " cursor, unread badge, right-
|
||||
// aligned. Same highlight/tap convention as Contacts.
|
||||
//
|
||||
// Navigation signals use a wantsExit() flag (same pattern as PathEditor) —
|
||||
// UITask is only forward-declared, so the picker cannot call UITask methods
|
||||
// directly. main.cpp / UITask.cpp check the flag after injectKey().
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class ChannelPickerScreen : public UIScreen {
|
||||
UITask* _task;
|
||||
ChannelScreen* _channelScreen;
|
||||
|
||||
// Ordered list of items.
|
||||
// Index 0 is always the DM inbox (channel_idx == 0xFF).
|
||||
// Remaining entries are populated group channels in ascending slot order.
|
||||
uint8_t _items[MAX_GROUP_CHANNELS + 1];
|
||||
int _itemCount;
|
||||
|
||||
int _cursor;
|
||||
int _scrollTop; // Scroll offset (T-Deck Pro list only)
|
||||
|
||||
// Grid layout cache (T5S3) — set in render(), consumed by touch hit test
|
||||
int _cellW;
|
||||
int _cellH;
|
||||
int _gridTop;
|
||||
int _gridCols;
|
||||
|
||||
// Rebuild the items list from MyMesh. O(20), safe every render.
|
||||
void rebuildItems() {
|
||||
int n = 0;
|
||||
uint8_t tmp[MAX_GROUP_CHANNELS + 1];
|
||||
tmp[n++] = 0xFF; // DM inbox always first
|
||||
for (uint8_t i = 0; i < MAX_GROUP_CHANNELS; i++) {
|
||||
ChannelDetails ch;
|
||||
if (the_mesh.getChannel(i, ch) && ch.name[0] != '\0') {
|
||||
if (n < MAX_GROUP_CHANNELS + 1) tmp[n++] = i;
|
||||
}
|
||||
}
|
||||
memcpy(_items, tmp, n);
|
||||
_itemCount = n;
|
||||
if (_cursor >= _itemCount) _cursor = _itemCount - 1;
|
||||
if (_cursor < 0) _cursor = 0;
|
||||
}
|
||||
|
||||
void getItemName(int idx, char* buf, size_t bufLen) const {
|
||||
if (idx < 0 || idx >= _itemCount || bufLen == 0) { if (bufLen) buf[0] = '\0'; return; }
|
||||
uint8_t c = _items[idx];
|
||||
if (c == 0xFF) {
|
||||
strncpy(buf, "Direct Messages", bufLen - 1);
|
||||
buf[bufLen - 1] = '\0';
|
||||
return;
|
||||
}
|
||||
ChannelDetails ch;
|
||||
if (the_mesh.getChannel(c, ch) && ch.name[0] != '\0') {
|
||||
strncpy(buf, ch.name, bufLen - 1);
|
||||
buf[bufLen - 1] = '\0';
|
||||
} else {
|
||||
snprintf(buf, bufLen, "Ch %d", (int)c);
|
||||
}
|
||||
}
|
||||
|
||||
int getItemUnread(int idx) const {
|
||||
if (idx < 0 || idx >= _itemCount || !_channelScreen) return 0;
|
||||
return _channelScreen->getUnreadForChannel(_items[idx]);
|
||||
}
|
||||
|
||||
public:
|
||||
ChannelPickerScreen(UITask* task)
|
||||
: _task(task), _channelScreen(nullptr),
|
||||
_itemCount(0), _cursor(0), _scrollTop(0),
|
||||
_cellW(40), _cellH(12), _gridTop(14), _gridCols(3),
|
||||
_wantExit(false) {
|
||||
_items[0] = 0xFF;
|
||||
}
|
||||
|
||||
void setChannelScreen(ChannelScreen* cs) { _channelScreen = cs; }
|
||||
|
||||
// --- wantsExit flag — checked by main.cpp / UITask after injectKey() ---
|
||||
bool _wantExit;
|
||||
bool wantsExit() const { return _wantExit; }
|
||||
|
||||
// Called by UITask::gotoChannelPickerScreen().
|
||||
void enter(uint8_t currentChannelIdx) {
|
||||
rebuildItems();
|
||||
_cursor = 0;
|
||||
for (int i = 0; i < _itemCount; i++) {
|
||||
if (_items[i] == currentChannelIdx) { _cursor = i; break; }
|
||||
}
|
||||
_scrollTop = 0;
|
||||
_wantExit = false;
|
||||
}
|
||||
|
||||
uint8_t getSelectedChannel() const {
|
||||
if (_cursor >= 0 && _cursor < _itemCount) return _items[_cursor];
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Render
|
||||
// -----------------------------------------------------------------------
|
||||
int render(DisplayDriver& display) override {
|
||||
rebuildItems();
|
||||
|
||||
// === Header ===
|
||||
display.setCursor(0, 0);
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.print("Channels");
|
||||
|
||||
int totalUnread = 0;
|
||||
for (int i = 0; i < _itemCount; i++) totalUnread += getItemUnread(i);
|
||||
char tmp[24];
|
||||
if (totalUnread > 0) {
|
||||
snprintf(tmp, sizeof(tmp), "*%d", totalUnread);
|
||||
} else {
|
||||
snprintf(tmp, sizeof(tmp), "[%d]", _itemCount);
|
||||
}
|
||||
display.setCursor(display.width() - display.getTextWidth(tmp) - 2, 0);
|
||||
display.print(tmp);
|
||||
display.drawRect(0, 11, display.width(), 1);
|
||||
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
// =================================================================
|
||||
// T5S3: Vertical bubble list (matches P4 channel picker aesthetic)
|
||||
// Full-width outlined bubbles with channel name left-aligned and
|
||||
// unread badge right-aligned. 1-tap opens the channel.
|
||||
// =================================================================
|
||||
const int headerH = 14;
|
||||
const int footerH = 14;
|
||||
const int bodyH = display.height() - headerH - footerH;
|
||||
const int bubbleH = 11; // Bubble height in virtual coords
|
||||
const int gap = 2; // Gap between bubbles
|
||||
const int padX = 3; // Horizontal padding from screen edge
|
||||
const int bubbleW = display.width() - 2 * padX;
|
||||
int maxVisible = bodyH / (bubbleH + gap);
|
||||
if (maxVisible < 3) maxVisible = 3;
|
||||
if (maxVisible > _itemCount) maxVisible = _itemCount;
|
||||
|
||||
// Cache layout for touch hit test
|
||||
_cellW = bubbleW;
|
||||
_cellH = bubbleH + gap;
|
||||
_gridTop = headerH;
|
||||
_gridCols = 1; // Single column — list mode
|
||||
|
||||
// Centre scroll window on cursor
|
||||
_scrollTop = max(0, min(_cursor - maxVisible / 2, _itemCount - maxVisible));
|
||||
if (_scrollTop < 0) _scrollTop = 0;
|
||||
int endIdx = min(_itemCount, _scrollTop + maxVisible);
|
||||
|
||||
for (int i = _scrollTop; i < endIdx; i++) {
|
||||
int row = i - _scrollTop;
|
||||
int x = padX;
|
||||
int y = headerH + row * (bubbleH + gap) + 1;
|
||||
int w = bubbleW;
|
||||
int h = bubbleH;
|
||||
|
||||
bool selected = (i == _cursor);
|
||||
int unread = getItemUnread(i);
|
||||
|
||||
// Bubble: filled if selected, outlined otherwise
|
||||
if (selected) {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(x, y, w, h);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
} else {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(x, y, w, h);
|
||||
// Draw a second outline 1px inset for a bolder border
|
||||
display.drawRect(x + 1, y + 1, w - 2, h - 2);
|
||||
}
|
||||
|
||||
// Channel name — left-aligned with inner padding
|
||||
char name[32];
|
||||
getItemName(i, name, sizeof(name));
|
||||
char filtered[32];
|
||||
display.translateUTF8ToBlocks(filtered, name, sizeof(filtered));
|
||||
|
||||
int textY = y + (h - 9) / 2;
|
||||
if (textY < y + 1) textY = y + 1;
|
||||
int textX = x + 4;
|
||||
|
||||
// Badge width reservation
|
||||
int badgeW = 0;
|
||||
char badge[8];
|
||||
if (unread > 0) {
|
||||
if (unread > 99) snprintf(badge, sizeof(badge), "99+");
|
||||
else snprintf(badge, sizeof(badge), "*%d", unread);
|
||||
badgeW = display.getTextWidth(badge) + 4;
|
||||
}
|
||||
int nameMaxW = w - 8 - badgeW;
|
||||
if (nameMaxW < 8) nameMaxW = 8;
|
||||
|
||||
int nameW = display.getTextWidth(filtered);
|
||||
if (nameW <= nameMaxW) {
|
||||
display.setCursor(textX, textY);
|
||||
display.print(filtered);
|
||||
} else {
|
||||
display.drawTextEllipsized(textX, textY, nameMaxW, filtered);
|
||||
}
|
||||
|
||||
// Unread badge — right-aligned inside bubble
|
||||
if (unread > 0) {
|
||||
int bx = x + w - badgeW;
|
||||
display.setCursor(bx, textY);
|
||||
display.print(badge);
|
||||
}
|
||||
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
}
|
||||
|
||||
// Scroll indicator (if more items than visible)
|
||||
if (_itemCount > maxVisible) {
|
||||
const int sbW = 3;
|
||||
int sbX = display.width() - sbW;
|
||||
int sbTop = headerH;
|
||||
int sbHeight = bodyH;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(sbX, sbTop, sbW, sbHeight);
|
||||
int thumbH = (maxVisible * sbHeight) / _itemCount;
|
||||
if (thumbH < 4) thumbH = 4;
|
||||
int maxScroll = _itemCount - maxVisible;
|
||||
if (maxScroll < 1) maxScroll = 1;
|
||||
int thumbY = sbTop + (_scrollTop * (sbHeight - thumbH)) / maxScroll;
|
||||
display.fillRect(sbX + 1, thumbY + 1, sbW - 2, thumbH - 2);
|
||||
}
|
||||
|
||||
#else
|
||||
// =================================================================
|
||||
// T-Deck Pro / MAX: Vertical list
|
||||
// Uses NodePrefs font helpers for large_font compatibility.
|
||||
// =================================================================
|
||||
NodePrefs* prefs = the_mesh.getNodePrefs();
|
||||
int lineH = prefs->smallLineH();
|
||||
const int headerH = 14;
|
||||
const int footerH = 14;
|
||||
int maxY = display.height() - footerH;
|
||||
int y = headerH;
|
||||
int maxVisible = (maxY - headerH) / lineH;
|
||||
if (maxVisible < 3) maxVisible = 3;
|
||||
|
||||
// Centre scroll window on cursor
|
||||
_scrollTop = max(0, min(_cursor - maxVisible / 2, _itemCount - maxVisible));
|
||||
if (_scrollTop < 0) _scrollTop = 0;
|
||||
int endIdx = min(_itemCount, _scrollTop + maxVisible);
|
||||
|
||||
display.setTextSize(prefs->smallTextSize());
|
||||
|
||||
for (int i = _scrollTop; i < endIdx && y + lineH <= maxY; i++) {
|
||||
bool selected = (i == _cursor);
|
||||
int unread = getItemUnread(i);
|
||||
|
||||
if (selected) {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(0, y + prefs->smallHighlightOff(), display.width(), lineH);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
} else {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
}
|
||||
|
||||
display.setCursor(0, y);
|
||||
|
||||
// Prefix: "> " for selected, " " otherwise. "*N" badge if unread.
|
||||
char prefix[8];
|
||||
if (unread > 0) {
|
||||
snprintf(prefix, sizeof(prefix), "%s*%d ", selected ? ">" : " ", unread);
|
||||
} else {
|
||||
snprintf(prefix, sizeof(prefix), "%s ", selected ? ">" : " ");
|
||||
}
|
||||
display.print(prefix);
|
||||
|
||||
// Name
|
||||
char name[32];
|
||||
getItemName(i, name, sizeof(name));
|
||||
char filtered[32];
|
||||
display.translateUTF8ToBlocks(filtered, name, sizeof(filtered));
|
||||
|
||||
int nameX = display.getTextWidth(prefix) + 2;
|
||||
int nameMaxW = display.width() - nameX - 2;
|
||||
display.drawTextEllipsized(nameX, y, nameMaxW, filtered);
|
||||
|
||||
y += lineH;
|
||||
}
|
||||
|
||||
// Scroll indicator
|
||||
if (_itemCount > maxVisible) {
|
||||
const int sbW = 3;
|
||||
int sbX = display.width() - sbW;
|
||||
int sbTop = headerH;
|
||||
int sbHeight = maxY - headerH;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(sbX, sbTop, sbW, sbHeight);
|
||||
int thumbH = (maxVisible * sbHeight) / _itemCount;
|
||||
if (thumbH < 4) thumbH = 4;
|
||||
int maxScroll = _itemCount - maxVisible;
|
||||
if (maxScroll < 1) maxScroll = 1;
|
||||
int thumbY = sbTop + (_scrollTop * (sbHeight - thumbH)) / maxScroll;
|
||||
display.fillRect(sbX + 1, thumbY + 1, sbW - 2, thumbH - 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
// === Footer ===
|
||||
display.setTextSize(1);
|
||||
int footerY = display.height() - 12;
|
||||
display.drawRect(0, footerY - 2, display.width(), 1);
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
display.setCursor(0, footerY);
|
||||
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.print("Tap:Open");
|
||||
const char* rt = "Boot:Back";
|
||||
display.setCursor(display.width() - display.getTextWidth(rt) - 2, footerY);
|
||||
display.print(rt);
|
||||
#elif defined(LILYGO_TECHO_LITE)
|
||||
display.print("Q:Bk");
|
||||
const char* rt = "Ent:Open";
|
||||
display.setCursor(display.width() - display.getTextWidth(rt) - 2, footerY);
|
||||
display.print(rt);
|
||||
#else
|
||||
display.print("W/S:Nav Q:Back");
|
||||
const char* rt = "Ent:Open";
|
||||
display.setCursor(display.width() - display.getTextWidth(rt) - 2, footerY);
|
||||
display.print(rt);
|
||||
#endif
|
||||
|
||||
#ifdef USE_EINK
|
||||
return 5000;
|
||||
#else
|
||||
return 1000;
|
||||
#endif
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Input
|
||||
// -----------------------------------------------------------------------
|
||||
bool handleInput(char c) override {
|
||||
// W / UP
|
||||
if (c == 'w' || c == 'W' || c == 0xF2 || c == KEY_UP) {
|
||||
if (_cursor > 0) { _cursor--; return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
// S / DOWN
|
||||
if (c == 's' || c == 'S' || c == 0xF1 || c == KEY_DOWN) {
|
||||
if (_cursor < _itemCount - 1) { _cursor++; return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
// A / D — consumed (no channel cycling from picker)
|
||||
if (c == 'a' || c == 'A' || c == KEY_LEFT) {
|
||||
return true;
|
||||
}
|
||||
if (c == 'd' || c == 'D' || c == KEY_RIGHT) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Enter — select the highlighted channel and signal exit
|
||||
if (c == '\r' || c == 13 || c == KEY_ENTER || c == KEY_SELECT) {
|
||||
if (_channelScreen && _cursor >= 0 && _cursor < _itemCount) {
|
||||
_channelScreen->setViewChannelIdx(_items[_cursor]);
|
||||
}
|
||||
_wantExit = true;
|
||||
return true; // Consumed — caller checks wantsExit() and navigates
|
||||
}
|
||||
|
||||
// Q / backspace — cancel without changing channel, signal exit
|
||||
if (c == 'q' || c == 'Q' || c == '\b' || c == KEY_CANCEL) {
|
||||
_wantExit = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Touch hit test (virtual coordinates)
|
||||
// Returns: 0=miss, 1=cursor moved, 2=activate.
|
||||
// T5S3 bubbles: any tap on a bubble → 2 (direct open).
|
||||
// T-Deck Pro list: 1st tap → 1 (highlight), 2nd tap same row → 2.
|
||||
// -----------------------------------------------------------------------
|
||||
int selectAtVxVy(int vx, int vy) {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
// Vertical bubble list hit test
|
||||
if (vy < _gridTop || _cellH == 0) return 0;
|
||||
int footerY = 128 - 14;
|
||||
if (vy >= footerY) return 0;
|
||||
int row = (vy - _gridTop) / _cellH;
|
||||
int idx = _scrollTop + row;
|
||||
if (idx < 0 || idx >= _itemCount) return 0;
|
||||
_cursor = idx;
|
||||
return 2; // Direct open on tap
|
||||
#else
|
||||
// T-Deck Pro / MAX list hit test — uses NodePrefs for large_font compatibility
|
||||
NodePrefs* prefs = the_mesh.getNodePrefs();
|
||||
int lineH = prefs->smallLineH();
|
||||
const int headerH = 14;
|
||||
const int footerH = 14;
|
||||
int bodyTop = headerH + prefs->smallHighlightOff();
|
||||
if (vy < bodyTop || vy >= 128 - footerH) return 0;
|
||||
int maxVisible = (128 - headerH - footerH) / lineH;
|
||||
if (maxVisible < 3) maxVisible = 3;
|
||||
int startIdx = max(0, min(_cursor - maxVisible / 2, _itemCount - maxVisible));
|
||||
if (startIdx < 0) startIdx = 0;
|
||||
int tappedRow = startIdx + (vy - bodyTop) / lineH;
|
||||
if (tappedRow < 0 || tappedRow >= _itemCount) return 0;
|
||||
if (tappedRow == _cursor) return 2;
|
||||
_cursor = tappedRow;
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
@@ -4,11 +4,7 @@
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <MeshCore.h>
|
||||
|
||||
// Timestamps before this (Jan 1 2026 UTC) are treated as invalid/unsynced
|
||||
#define EPOCH_2026 1735689600UL
|
||||
|
||||
// Forward declarations — MyMesh.h (which defines AdvertPath) is always
|
||||
// included by the translation unit before this header.
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
class MyMesh;
|
||||
extern MyMesh the_mesh;
|
||||
@@ -37,10 +33,8 @@ private:
|
||||
// We rebuild this on filter change or when entering the screen
|
||||
// Arrays allocated in PSRAM when available (supports 1000+ contacts)
|
||||
uint16_t* _filteredIdx; // indices into contact table
|
||||
uint32_t* _filteredTs; // cached lastmod for sorting
|
||||
uint32_t* _filteredTs; // cached last_advert_timestamp for sorting
|
||||
int _filteredCount; // how many contacts match current filter
|
||||
AdvertPath _hopBuf[40]; // recently heard advert paths for hop-count display
|
||||
int _hopBufCount;
|
||||
bool _cacheValid;
|
||||
|
||||
// How many rows fit on screen (computed during render)
|
||||
@@ -67,12 +61,12 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
static const char* typeStr(uint8_t adv_type) {
|
||||
static char typeChar(uint8_t adv_type) {
|
||||
switch (adv_type) {
|
||||
case ADV_TYPE_CHAT: return "C";
|
||||
case ADV_TYPE_REPEATER: return "R";
|
||||
case ADV_TYPE_ROOM: return "RS";
|
||||
default: return "?";
|
||||
case ADV_TYPE_CHAT: return 'C';
|
||||
case ADV_TYPE_REPEATER: return 'R';
|
||||
case ADV_TYPE_ROOM: return 'S'; // Server
|
||||
default: return '?';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,13 +92,12 @@ private:
|
||||
if (the_mesh.getContactByIdx(i, contact)) {
|
||||
if (matchesFilter(contact.type, contact.flags)) {
|
||||
_filteredIdx[_filteredCount] = (uint16_t)i;
|
||||
// Use lastmod (our receive time) for sort/age; pre-2026 or zero → 0 sinks to bottom
|
||||
_filteredTs[_filteredCount] = (contact.lastmod >= EPOCH_2026) ? contact.lastmod : 0;
|
||||
_filteredTs[_filteredCount] = contact.last_advert_timestamp;
|
||||
_filteredCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Sort by lastmod descending (most recently heard first; pre-2026/unsynced sink to bottom)
|
||||
// Sort by last_advert_timestamp descending (most recently seen first)
|
||||
// Insertion sort — fine for up to ~1000 entries on ESP32
|
||||
for (int i = 1; i < _filteredCount; i++) {
|
||||
uint16_t tmpIdx = _filteredIdx[i];
|
||||
@@ -119,29 +112,28 @@ private:
|
||||
_filteredTs[j + 1] = tmpTs;
|
||||
}
|
||||
_cacheValid = true;
|
||||
// Refresh hop-count cache from the 12 most recently heard adverts
|
||||
_hopBufCount = the_mesh.getRecentlyHeard(_hopBuf, 40);
|
||||
// Clamp scroll position
|
||||
if (_scrollPos >= _filteredCount) {
|
||||
_scrollPos = (_filteredCount > 0) ? _filteredCount - 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Format seconds-ago as compact string: "3s" "5m" "2h" "4d" "--"
|
||||
// Format seconds-ago as compact string: "3s" "5m" "2h" "4d" "??"
|
||||
static void formatAge(char* buf, size_t bufLen, uint32_t now, uint32_t timestamp) {
|
||||
if (timestamp == 0 || timestamp < EPOCH_2026 || now < timestamp) {
|
||||
if (timestamp == 0) {
|
||||
strncpy(buf, "--", bufLen);
|
||||
return;
|
||||
}
|
||||
uint32_t secs = now - timestamp;
|
||||
int secs = (int)(now - timestamp);
|
||||
if (secs < 0) secs = 0;
|
||||
if (secs < 60) {
|
||||
snprintf(buf, bufLen, "%ds", (int)secs);
|
||||
snprintf(buf, bufLen, "%ds", secs);
|
||||
} else if (secs < 3600) {
|
||||
snprintf(buf, bufLen, "%dm", (int)(secs / 60));
|
||||
snprintf(buf, bufLen, "%dm", secs / 60);
|
||||
} else if (secs < 86400) {
|
||||
snprintf(buf, bufLen, "%dh", (int)(secs / 3600));
|
||||
snprintf(buf, bufLen, "%dh", secs / 3600);
|
||||
} else {
|
||||
snprintf(buf, bufLen, "%dd", (int)(secs / 86400));
|
||||
snprintf(buf, bufLen, "%dd", secs / 86400);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +152,7 @@ public:
|
||||
ContactsScreen(UITask* task, mesh::RTCClock* rtc)
|
||||
: _task(task), _rtc(rtc), _scrollPos(0), _filter(FILTER_ALL),
|
||||
_filteredCount(0), _cacheValid(false), _rowsPerPage(5),
|
||||
_selectMode(false), _hopBufCount(0) {
|
||||
_selectMode(false) {
|
||||
#if defined(ESP32) && defined(BOARD_HAS_PSRAM)
|
||||
_filteredIdx = (uint16_t*)ps_calloc(MAX_CONTACTS, sizeof(uint16_t));
|
||||
_filteredTs = (uint32_t*)ps_calloc(MAX_CONTACTS, sizeof(uint32_t));
|
||||
@@ -370,15 +362,15 @@ public:
|
||||
display.setCursor(0, y);
|
||||
|
||||
// Prefix: select mode uses * for selected, normal uses > for cursor
|
||||
char prefix[5];
|
||||
char prefix[4];
|
||||
if (_selectMode) {
|
||||
snprintf(prefix, sizeof(prefix), "%c%s",
|
||||
snprintf(prefix, sizeof(prefix), "%c%c",
|
||||
sel ? '*' : (selected ? '>' : ' '),
|
||||
typeStr(contact.type));
|
||||
typeChar(contact.type));
|
||||
} else if (selected) {
|
||||
snprintf(prefix, sizeof(prefix), ">%s", typeStr(contact.type));
|
||||
snprintf(prefix, sizeof(prefix), ">%c", typeChar(contact.type));
|
||||
} else {
|
||||
snprintf(prefix, sizeof(prefix), " %s", typeStr(contact.type));
|
||||
snprintf(prefix, sizeof(prefix), " %c", typeChar(contact.type));
|
||||
}
|
||||
display.print(prefix);
|
||||
|
||||
@@ -389,22 +381,7 @@ public:
|
||||
// Reserve space for hops + age on right side
|
||||
char hopStr[6];
|
||||
if (contact.out_path_len == 0xFF) {
|
||||
// No confirmed direct path — look up flood hop estimate from recent advert cache
|
||||
hopStr[0] = '?'; hopStr[1] = '\0'; // default
|
||||
for (int h = 0; h < _hopBufCount; h++) {
|
||||
if (memcmp(contact.id.pub_key, _hopBuf[h].pubkey_prefix, 7) == 0) {
|
||||
uint8_t bph = (_hopBuf[h].path_len >> 6) + 1;
|
||||
uint8_t hops = _hopBuf[h].path_len & 0x3F;
|
||||
uint8_t max_hops = 64 / bph; // sanity cap based on path encoding
|
||||
if (hops <= max_hops) {
|
||||
if (hops == 0)
|
||||
strcpy(hopStr, "~D");
|
||||
else
|
||||
snprintf(hopStr, sizeof(hopStr), "~%d", (int)hops);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
strcpy(hopStr, "?"); // unknown path
|
||||
} else if (contact.out_path_len == 0) {
|
||||
bool customDirect = (contact.flags & CONTACT_FLAG_CUSTOM_PATH) != 0;
|
||||
strcpy(hopStr, customDirect ? "D*" : "D");
|
||||
@@ -419,7 +396,7 @@ public:
|
||||
}
|
||||
|
||||
char ageStr[6];
|
||||
formatAge(ageStr, sizeof(ageStr), now, contact.lastmod);
|
||||
formatAge(ageStr, sizeof(ageStr), now, contact.last_advert_timestamp);
|
||||
|
||||
// Build right-side string: "*N hops age" if unread, else "hops age"
|
||||
int dmCount = (_dmUnread && _filteredIdx[i] < MAX_CONTACTS) ? _dmUnread[_filteredIdx[i]] : 0;
|
||||
@@ -466,16 +443,6 @@ public:
|
||||
display.setCursor(display.width() - display.getTextWidth(right) - 2, footerY);
|
||||
display.print(right);
|
||||
}
|
||||
#elif defined(LILYGO_TECHO_LITE)
|
||||
display.setCursor(0, footerY);
|
||||
if (_selectMode) {
|
||||
display.print("Q:Done");
|
||||
} else {
|
||||
display.print("Q:Bk");
|
||||
const char* right = "Ent:Sel";
|
||||
display.setCursor(display.width() - display.getTextWidth(right) - 2, footerY);
|
||||
display.print(right);
|
||||
}
|
||||
#else
|
||||
display.setCursor(0, footerY);
|
||||
if (_selectMode) {
|
||||
@@ -495,30 +462,16 @@ public:
|
||||
}
|
||||
|
||||
bool handleInput(char c) override {
|
||||
// Shift+W: page up
|
||||
if (c == 'W') {
|
||||
int pageSize = (128 - 14 - 14) / the_mesh.getNodePrefs()->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_scrollPos = max(0, _scrollPos - pageSize);
|
||||
return true;
|
||||
}
|
||||
// W - scroll up (previous contact)
|
||||
if (c == 'w' || c == 0xF2) {
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_scrollPos > 0) {
|
||||
_scrollPos--;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Shift+S: page down
|
||||
if (c == 'S') {
|
||||
int pageSize = (128 - 14 - 14) / the_mesh.getNodePrefs()->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_scrollPos = min(_filteredCount - 1, _scrollPos + pageSize);
|
||||
return true;
|
||||
}
|
||||
// S - scroll down (next contact)
|
||||
if (c == 's' || c == 0xF1) {
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
if (_scrollPos < _filteredCount - 1) {
|
||||
_scrollPos++;
|
||||
return true;
|
||||
|
||||
@@ -217,30 +217,16 @@ public:
|
||||
bool handleInput(char c) override {
|
||||
int count = the_mesh.getDiscoveredCount();
|
||||
|
||||
// Shift+W: page up
|
||||
if (c == 'W') {
|
||||
int pageSize = (128 - 14 - 14) / the_mesh.getNodePrefs()->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_scrollPos = max(0, _scrollPos - pageSize);
|
||||
return true;
|
||||
}
|
||||
// W - scroll up
|
||||
if (c == 'w' || c == 0xF2) {
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_scrollPos > 0) {
|
||||
_scrollPos--;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Shift+S: page down
|
||||
if (c == 'S') {
|
||||
int pageSize = (128 - 14 - 14) / the_mesh.getNodePrefs()->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_scrollPos = min(count - 1, _scrollPos + pageSize);
|
||||
return true;
|
||||
}
|
||||
// S - scroll down
|
||||
if (c == 's' || c == 0xF1) {
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
if (_scrollPos < count - 1) {
|
||||
_scrollPos++;
|
||||
return true;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// Emoji sprites for e-ink display - dual size
|
||||
// Large (12x12) for compose/picker, Small (10x10) for channel view
|
||||
// MSB-first, 2 bytes per row
|
||||
// 77 total emoji: joy/thumbsup/frown first, then 43 original, then 19 new, then 11 newest, then 1 latest
|
||||
// 65 total emoji: joy/thumbsup/frown first, then 43 original, then 19 new
|
||||
|
||||
#include <stdint.h>
|
||||
#ifdef ESP32
|
||||
@@ -15,11 +15,11 @@
|
||||
#define EMOJI_SM_W 10
|
||||
#define EMOJI_SM_H 10
|
||||
|
||||
#define EMOJI_COUNT 77
|
||||
#define EMOJI_COUNT 65
|
||||
|
||||
// Escape codes in 0x80+ range - safe from keyboard ASCII (32-126)
|
||||
#define EMOJI_ESCAPE_START 0x80
|
||||
#define EMOJI_ESCAPE_END 0xCC // 0x80 + 76
|
||||
#define EMOJI_ESCAPE_END 0xC0 // 0x80 + 64
|
||||
#define EMOJI_PAD_BYTE 0x7F // DEL, not typeable (key < 127 guard)
|
||||
|
||||
// ======== LARGE 12x12 SPRITES ========
|
||||
@@ -36,14 +36,6 @@ static const uint8_t emoji_lg_thumbsup[] PROGMEM = {
|
||||
static const uint8_t emoji_lg_frown[] PROGMEM = {
|
||||
0x1F,0x80, 0x20,0x40, 0x59,0xA0, 0x59,0xA0, 0x80,0x10, 0x9F,0x90, 0xA0,0x50, 0x40,0x20, 0x20,0x40, 0x1F,0x80, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [65] loudly_crying 😭
|
||||
static const uint8_t emoji_lg_loudly_crying[] PROGMEM = {
|
||||
0x1F,0x80, 0x20,0x40, 0x5B,0x40, 0x5B,0x20, 0x80,0x10, 0x9F,0x10, 0xA0,0x90, 0x60,0xC0, 0xA0,0xA0, 0x1F,0x00, 0x40,0x40, 0x00,0x00,
|
||||
};
|
||||
// [66] heart ♥️
|
||||
static const uint8_t emoji_lg_heart[] PROGMEM = {
|
||||
0x00,0x00, 0x73,0x80, 0xFF,0xC0, 0xFF,0xC0, 0xFF,0xC0, 0x7F,0x80, 0x3F,0x00, 0x1E,0x00, 0x0C,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [3] wireless
|
||||
static const uint8_t emoji_lg_wireless[] PROGMEM = {
|
||||
0x00,0x00, 0x3F,0xC0, 0x60,0x60, 0xC0,0x30, 0x0F,0x00, 0x19,0x80, 0x30,0xC0, 0x00,0x00, 0x06,0x00, 0x0F,0x00, 0x06,0x00, 0x00,0x00,
|
||||
@@ -292,73 +284,23 @@ static const uint8_t emoji_lg_tipping[] PROGMEM = {
|
||||
static const uint8_t emoji_lg_hedgehog[] PROGMEM = {
|
||||
0x00,0x00, 0x0A,0x80, 0x15,0x40, 0x2A,0xA0, 0x55,0x60, 0x7E,0xF0, 0xDB,0x90, 0xFF,0xD0, 0x7F,0xE0, 0x3F,0xC0, 0x24,0x80, 0x00,0x00,
|
||||
};
|
||||
// [67] diamond_suit ♦️
|
||||
static const uint8_t emoji_lg_diamond_suit[] PROGMEM = {
|
||||
0x00,0x00, 0x04,0x00, 0x0E,0x00, 0x1F,0x00, 0x3F,0x80, 0x7F,0xC0, 0x3F,0x80, 0x1F,0x00, 0x0E,0x00, 0x04,0x00, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [68] spade_suit ♠️
|
||||
static const uint8_t emoji_lg_spade_suit[] PROGMEM = {
|
||||
0x04,0x00, 0x0E,0x00, 0x1F,0x00, 0x3F,0x80, 0x7F,0xC0, 0xFF,0xE0, 0xFF,0xE0, 0x7F,0xC0, 0x15,0x00, 0x04,0x00, 0x0E,0x00, 0x00,0x00,
|
||||
};
|
||||
// [69] pizza 🍕
|
||||
static const uint8_t emoji_lg_pizza[] PROGMEM = {
|
||||
0x02,0x00, 0x06,0x00, 0x0F,0x00, 0x0B,0x00, 0x1F,0x80, 0x1D,0x80, 0x3F,0xC0, 0x2F,0x40, 0x7F,0xE0, 0x7F,0xE0, 0xFF,0xF0, 0x00,0x00,
|
||||
};
|
||||
// [70] four_leaf_clover 🍀
|
||||
static const uint8_t emoji_lg_four_leaf_clover[] PROGMEM = {
|
||||
0x0C,0x00, 0x1E,0x00, 0x1E,0x00, 0x6D,0x80, 0xF3,0xC0, 0xF3,0xC0, 0x6D,0x80, 0x1E,0x00, 0x1E,0x00, 0x0C,0x00, 0x06,0x00, 0x00,0x00,
|
||||
};
|
||||
// [71] cloud ☁️
|
||||
static const uint8_t emoji_lg_cloud[] PROGMEM = {
|
||||
0x00,0x00, 0x1C,0x00, 0x3E,0x00, 0x7F,0x80, 0xFF,0xC0, 0xFF,0xE0, 0xFF,0xE0, 0x7F,0xC0, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [72] rocket 🚀
|
||||
static const uint8_t emoji_lg_rocket[] PROGMEM = {
|
||||
0x04,0x00, 0x0E,0x00, 0x1F,0x00, 0x1B,0x00, 0x1B,0x00, 0x3F,0x80, 0x7F,0xC0, 0x5F,0x40, 0x9F,0x20, 0x0E,0x00, 0x15,0x00, 0x00,0x00,
|
||||
};
|
||||
// [73] passport_control 🛂
|
||||
static const uint8_t emoji_lg_passport_control[] PROGMEM = {
|
||||
0x3F,0xC0, 0x40,0x20, 0x46,0x20, 0x4F,0x20, 0x46,0x20, 0x40,0x20, 0x44,0x20, 0x4E,0x20, 0x5F,0x20, 0x40,0x20, 0x3F,0xC0, 0x00,0x00,
|
||||
};
|
||||
// [74] eight_spoked_asterisk ✳️
|
||||
static const uint8_t emoji_lg_eight_spoked_asterisk[] PROGMEM = {
|
||||
0x7F,0xE0, 0x84,0x10, 0xA4,0x90, 0x95,0x10, 0x8E,0x10, 0xFF,0xD0, 0x8E,0x10, 0x95,0x10, 0xA4,0x90, 0x84,0x10, 0x7F,0xE0, 0x00,0x00,
|
||||
};
|
||||
// [75] signal_strength 📶
|
||||
static const uint8_t emoji_lg_signal_strength[] PROGMEM = {
|
||||
0x00,0x20, 0x00,0x20, 0x00,0xA0, 0x00,0xA0, 0x02,0xA0, 0x02,0xA0, 0x0A,0xA0, 0x0A,0xA0, 0x2A,0xA0, 0x2A,0xA0, 0xAA,0xA0, 0xAA,0xA0,
|
||||
};
|
||||
// [76] beer 🍺
|
||||
static const uint8_t emoji_lg_beer[] PROGMEM = {
|
||||
0x24,0x80, 0x77,0x60, 0xFF,0x80, 0x7F,0xC0, 0x40,0x70, 0x5F,0x50, 0x5F,0x50, 0x5F,0x50, 0x40,0x70, 0x7F,0xC0, 0xFF,0xE0, 0x00,0x00,
|
||||
};
|
||||
|
||||
|
||||
static const uint8_t* const EMOJI_SPRITES_LG[] PROGMEM = {
|
||||
// Faces/emotion first
|
||||
emoji_lg_joy, emoji_lg_frown, emoji_lg_loudly_crying,
|
||||
emoji_lg_grimace, emoji_lg_zany_face, emoji_lg_cowboy,
|
||||
// Thumbsup + heart
|
||||
emoji_lg_thumbsup, emoji_lg_heart,
|
||||
// Everything else in original relative order
|
||||
emoji_lg_joy, emoji_lg_thumbsup, emoji_lg_frown,
|
||||
emoji_lg_wireless, emoji_lg_infinity, emoji_lg_trex, emoji_lg_skull, emoji_lg_cross,
|
||||
emoji_lg_lightning, emoji_lg_tophat, emoji_lg_motorcycle, emoji_lg_seedling, emoji_lg_flag_au,
|
||||
emoji_lg_umbrella, emoji_lg_nazar, emoji_lg_globe, emoji_lg_radioactive, emoji_lg_cow,
|
||||
emoji_lg_alien, emoji_lg_invader, emoji_lg_dagger,
|
||||
emoji_lg_alien, emoji_lg_invader, emoji_lg_dagger, emoji_lg_grimace,
|
||||
emoji_lg_mountain, emoji_lg_end_arrow, emoji_lg_hollow_circle, emoji_lg_dragon, emoji_lg_globe_meridians,
|
||||
emoji_lg_eggplant, emoji_lg_shield, emoji_lg_goggles, emoji_lg_lizard,
|
||||
emoji_lg_eggplant, emoji_lg_shield, emoji_lg_goggles, emoji_lg_lizard, emoji_lg_zany_face,
|
||||
emoji_lg_kangaroo, emoji_lg_feather, emoji_lg_bright, emoji_lg_part_alt, emoji_lg_motorboat,
|
||||
emoji_lg_domino, emoji_lg_satellite, emoji_lg_customs, emoji_lg_wheel,
|
||||
emoji_lg_domino, emoji_lg_satellite, emoji_lg_customs, emoji_lg_cowboy, emoji_lg_wheel,
|
||||
emoji_lg_koala, emoji_lg_control_knobs, emoji_lg_peach, emoji_lg_racing_car,
|
||||
emoji_lg_mouse, emoji_lg_mushroom, emoji_lg_biohazard, emoji_lg_panda,
|
||||
emoji_lg_anger, emoji_lg_dragon_face, emoji_lg_pager, emoji_lg_bee,
|
||||
emoji_lg_bulb, emoji_lg_cat, emoji_lg_fleur, emoji_lg_moon,
|
||||
emoji_lg_coffee, emoji_lg_tooth, emoji_lg_pretzel, emoji_lg_abacus,
|
||||
emoji_lg_moai, emoji_lg_tipping, emoji_lg_hedgehog,
|
||||
emoji_lg_diamond_suit, emoji_lg_spade_suit, emoji_lg_pizza, emoji_lg_four_leaf_clover,
|
||||
emoji_lg_cloud, emoji_lg_rocket, emoji_lg_passport_control,
|
||||
emoji_lg_eight_spoked_asterisk, emoji_lg_signal_strength,
|
||||
emoji_lg_beer,
|
||||
};
|
||||
|
||||
// ======== SMALL 10x10 SPRITES ========
|
||||
@@ -577,166 +519,94 @@ static const uint8_t emoji_sm_tipping[] PROGMEM = {
|
||||
static const uint8_t emoji_sm_hedgehog[] PROGMEM = {
|
||||
0x15,0x00, 0x2A,0x80, 0x55,0x40, 0xFF,0xC0, 0xDB,0x40, 0xFF,0x80, 0x7F,0x80, 0x3F,0x00, 0x24,0x00, 0x00,0x00,
|
||||
};
|
||||
// [65] loudly_crying 😭
|
||||
static const uint8_t emoji_sm_loudly_crying[] PROGMEM = {
|
||||
0x3E,0x00, 0x41,0x00, 0xB6,0x80, 0x80,0x40, 0xBE,0x40, 0x81,0x40, 0x63,0x00, 0x9C,0x80, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [66] heart ♥️
|
||||
static const uint8_t emoji_sm_heart[] PROGMEM = {
|
||||
0x00,0x00, 0x6C,0x00, 0xFE,0x00, 0xFE,0x00, 0x7C,0x00, 0x38,0x00, 0x10,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [67] diamond_suit ♦️
|
||||
static const uint8_t emoji_sm_diamond_suit[] PROGMEM = {
|
||||
0x00,0x00, 0x08,0x00, 0x1C,0x00, 0x3E,0x00, 0x7F,0x00, 0x3E,0x00, 0x1C,0x00, 0x08,0x00, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [68] spade_suit ♠️
|
||||
static const uint8_t emoji_sm_spade_suit[] PROGMEM = {
|
||||
0x08,0x00, 0x1C,0x00, 0x3E,0x00, 0x7F,0x00, 0xFF,0x80, 0xFF,0x80, 0x2A,0x00, 0x08,0x00, 0x1C,0x00, 0x00,0x00,
|
||||
};
|
||||
// [69] pizza 🍕
|
||||
static const uint8_t emoji_sm_pizza[] PROGMEM = {
|
||||
0x08,0x00, 0x1C,0x00, 0x14,0x00, 0x3E,0x00, 0x36,0x00, 0x6D,0x00, 0x7F,0x00, 0xFF,0x80, 0xFF,0x80, 0x00,0x00,
|
||||
};
|
||||
// [70] four_leaf_clover 🍀
|
||||
static const uint8_t emoji_sm_four_leaf_clover[] PROGMEM = {
|
||||
0x18,0x00, 0x3C,0x00, 0xDB,0x00, 0xE7,0x00, 0xE7,0x00, 0xDB,0x00, 0x3C,0x00, 0x18,0x00, 0x0C,0x00, 0x00,0x00,
|
||||
};
|
||||
// [71] cloud ☁️
|
||||
static const uint8_t emoji_sm_cloud[] PROGMEM = {
|
||||
0x00,0x00, 0x38,0x00, 0x7E,0x00, 0xFF,0x00, 0xFF,0x80, 0xFF,0x80, 0x7F,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
// [72] rocket 🚀
|
||||
static const uint8_t emoji_sm_rocket[] PROGMEM = {
|
||||
0x08,0x00, 0x1C,0x00, 0x36,0x00, 0x36,0x00, 0x7F,0x00, 0xBE,0x80, 0x3E,0x00, 0x1C,0x00, 0x2A,0x00, 0x00,0x00,
|
||||
};
|
||||
// [73] passport_control 🛂
|
||||
static const uint8_t emoji_sm_passport_control[] PROGMEM = {
|
||||
0x7F,0x80, 0x80,0x40, 0x8C,0x40, 0x9E,0x40, 0x8C,0x40, 0x80,0x40, 0x9C,0x40, 0xBE,0x40, 0x80,0x40, 0x7F,0x80,
|
||||
};
|
||||
// [74] eight_spoked_asterisk ✳️
|
||||
static const uint8_t emoji_sm_eight_spoked_asterisk[] PROGMEM = {
|
||||
0x7F,0x80, 0x84,0x40, 0xA5,0x40, 0x9E,0x40, 0xFF,0xC0, 0x9E,0x40, 0xA5,0x40, 0x84,0x40, 0x7F,0x80, 0x00,0x00,
|
||||
};
|
||||
// [75] signal_strength 📶
|
||||
static const uint8_t emoji_sm_signal_strength[] PROGMEM = {
|
||||
0x00,0x80, 0x00,0x80, 0x02,0x80, 0x02,0x80, 0x0A,0x80, 0x0A,0x80, 0x2A,0x80, 0x2A,0x80, 0xAA,0x80, 0xAA,0x80,
|
||||
};
|
||||
// [76] beer 🍺
|
||||
static const uint8_t emoji_sm_beer[] PROGMEM = {
|
||||
0x54,0x00, 0x6E,0xC0, 0xFF,0x80, 0x80,0xC0, 0xBE,0x40, 0xBE,0x40, 0x80,0xC0, 0xFF,0x80, 0x00,0x00, 0xFF,0x80,
|
||||
};
|
||||
|
||||
static const uint8_t* const EMOJI_SPRITES_SM[] PROGMEM = {
|
||||
// Faces/emotion first
|
||||
emoji_sm_joy, emoji_sm_frown, emoji_sm_loudly_crying,
|
||||
emoji_sm_grimace, emoji_sm_zany_face, emoji_sm_cowboy,
|
||||
// Thumbsup + heart
|
||||
emoji_sm_thumbsup, emoji_sm_heart,
|
||||
// Everything else in original relative order
|
||||
emoji_sm_joy, emoji_sm_thumbsup, emoji_sm_frown,
|
||||
emoji_sm_wireless, emoji_sm_infinity, emoji_sm_trex, emoji_sm_skull, emoji_sm_cross,
|
||||
emoji_sm_lightning, emoji_sm_tophat, emoji_sm_motorcycle, emoji_sm_seedling, emoji_sm_flag_au,
|
||||
emoji_sm_umbrella, emoji_sm_nazar, emoji_sm_globe, emoji_sm_radioactive, emoji_sm_cow,
|
||||
emoji_sm_alien, emoji_sm_invader, emoji_sm_dagger,
|
||||
emoji_sm_alien, emoji_sm_invader, emoji_sm_dagger, emoji_sm_grimace,
|
||||
emoji_sm_mountain, emoji_sm_end_arrow, emoji_sm_hollow_circle, emoji_sm_dragon, emoji_sm_globe_meridians,
|
||||
emoji_sm_eggplant, emoji_sm_shield, emoji_sm_goggles, emoji_sm_lizard,
|
||||
emoji_sm_eggplant, emoji_sm_shield, emoji_sm_goggles, emoji_sm_lizard, emoji_sm_zany_face,
|
||||
emoji_sm_kangaroo, emoji_sm_feather, emoji_sm_bright, emoji_sm_part_alt, emoji_sm_motorboat,
|
||||
emoji_sm_domino, emoji_sm_satellite, emoji_sm_customs, emoji_sm_wheel,
|
||||
emoji_sm_domino, emoji_sm_satellite, emoji_sm_customs, emoji_sm_cowboy, emoji_sm_wheel,
|
||||
emoji_sm_koala, emoji_sm_control_knobs, emoji_sm_peach, emoji_sm_racing_car,
|
||||
emoji_sm_mouse, emoji_sm_mushroom, emoji_sm_biohazard, emoji_sm_panda,
|
||||
emoji_sm_anger, emoji_sm_dragon_face, emoji_sm_pager, emoji_sm_bee,
|
||||
emoji_sm_bulb, emoji_sm_cat, emoji_sm_fleur, emoji_sm_moon,
|
||||
emoji_sm_coffee, emoji_sm_tooth, emoji_sm_pretzel, emoji_sm_abacus,
|
||||
emoji_sm_moai, emoji_sm_tipping, emoji_sm_hedgehog,
|
||||
emoji_sm_diamond_suit, emoji_sm_spade_suit, emoji_sm_pizza, emoji_sm_four_leaf_clover,
|
||||
emoji_sm_cloud, emoji_sm_rocket, emoji_sm_passport_control,
|
||||
emoji_sm_eight_spoked_asterisk, emoji_sm_signal_strength,
|
||||
emoji_sm_beer,
|
||||
};
|
||||
|
||||
// ---- Codepoint lookup for UTF-8 conversion ----
|
||||
struct EmojiCodepoint { uint32_t cp; uint32_t cp2; uint8_t escape; };
|
||||
|
||||
static const EmojiCodepoint EMOJI_CODEPOINTS[EMOJI_COUNT] = {
|
||||
// Faces/emotion first
|
||||
{ 0x1F602, 0x0000, 0x80 }, // joy
|
||||
{ 0x2639, 0x0000, 0x81 }, // frown
|
||||
{ 0x1F62D, 0x0000, 0x82 }, // loudly_crying
|
||||
{ 0x1F62C, 0x0000, 0x83 }, // grimace
|
||||
{ 0x1F92A, 0x0000, 0x84 }, // zany_face
|
||||
{ 0x1F920, 0x0000, 0x85 }, // cowboy
|
||||
// Thumbsup + heart
|
||||
{ 0x1F44D, 0x0000, 0x86 }, // thumbsup
|
||||
{ 0x2665, 0x0000, 0x87 }, // heart
|
||||
// Everything else in original relative order
|
||||
{ 0x1F6DC, 0x0000, 0x88 }, // wireless
|
||||
{ 0x267E, 0x0000, 0x89 }, // infinity
|
||||
{ 0x1F996, 0x0000, 0x8A }, // trex
|
||||
{ 0x2620, 0x0000, 0x8B }, // skull
|
||||
{ 0x271D, 0x0000, 0x8C }, // cross
|
||||
{ 0x26A1, 0x0000, 0x8D }, // lightning
|
||||
{ 0x1F3A9, 0x0000, 0x8E }, // tophat
|
||||
{ 0x1F3CD, 0x0000, 0x8F }, // motorcycle
|
||||
{ 0x1F331, 0x0000, 0x90 }, // seedling
|
||||
{ 0x1F1E6, 0x1F1FA, 0x91 }, // flag_au
|
||||
{ 0x2602, 0x0000, 0x92 }, // umbrella
|
||||
{ 0x1F9FF, 0x0000, 0x93 }, // nazar
|
||||
{ 0x1F30F, 0x0000, 0x94 }, // globe
|
||||
{ 0x2622, 0x0000, 0x95 }, // radioactive
|
||||
{ 0x1F404, 0x0000, 0x96 }, // cow
|
||||
{ 0x1F47D, 0x0000, 0x97 }, // alien
|
||||
{ 0x1F47E, 0x0000, 0x98 }, // invader
|
||||
{ 0x1F5E1, 0x0000, 0x99 }, // dagger
|
||||
{ 0x26F0, 0x0000, 0x9A }, // mountain
|
||||
{ 0x1F51A, 0x0000, 0x9B }, // end_arrow
|
||||
{ 0x2B55, 0x0000, 0x9C }, // hollow_circle
|
||||
{ 0x1F409, 0x0000, 0x9D }, // dragon
|
||||
{ 0x1F310, 0x0000, 0x9E }, // globe_meridians
|
||||
{ 0x1F346, 0x0000, 0x9F }, // eggplant
|
||||
{ 0x1F6E1, 0x0000, 0xA0 }, // shield
|
||||
{ 0x1F97D, 0x0000, 0xA1 }, // goggles
|
||||
{ 0x1F98E, 0x0000, 0xA2 }, // lizard
|
||||
{ 0x1F998, 0x0000, 0xA3 }, // kangaroo
|
||||
{ 0x1FAB6, 0x0000, 0xA4 }, // feather
|
||||
{ 0x1F506, 0x0000, 0xA5 }, // bright
|
||||
{ 0x303D, 0x0000, 0xA6 }, // part_alt
|
||||
{ 0x1F6E5, 0x0000, 0xA7 }, // motorboat
|
||||
{ 0x1F030, 0x0000, 0xA8 }, // domino
|
||||
{ 0x1F4E1, 0x0000, 0xA9 }, // satellite
|
||||
{ 0x1F6C3, 0x0000, 0xAA }, // customs
|
||||
{ 0x1F6DE, 0x0000, 0xAB }, // wheel
|
||||
{ 0x1F428, 0x0000, 0xAC }, // koala
|
||||
{ 0x1F39B, 0x0000, 0xAD }, // control_knobs
|
||||
{ 0x1F351, 0x0000, 0xAE }, // peach
|
||||
{ 0x1F3CE, 0x0000, 0xAF }, // racing_car
|
||||
{ 0x1F42D, 0x0000, 0xB0 }, // mouse
|
||||
{ 0x1F344, 0x0000, 0xB1 }, // mushroom
|
||||
{ 0x2623, 0x0000, 0xB2 }, // biohazard
|
||||
{ 0x1F43C, 0x0000, 0xB3 }, // panda
|
||||
{ 0x1F4A2, 0x0000, 0xB4 }, // anger
|
||||
{ 0x1F432, 0x0000, 0xB5 }, // dragon_face
|
||||
{ 0x1F4DF, 0x0000, 0xB6 }, // pager
|
||||
{ 0x1F41D, 0x0000, 0xB7 }, // bee
|
||||
{ 0x1F4A1, 0x0000, 0xB8 }, // bulb
|
||||
{ 0x1F431, 0x0000, 0xB9 }, // cat
|
||||
{ 0x269C, 0x0000, 0xBA }, // fleur
|
||||
{ 0x1F314, 0x0000, 0xBB }, // moon
|
||||
{ 0x2615, 0x0000, 0xBC }, // coffee
|
||||
{ 0x1F9B7, 0x0000, 0xBD }, // tooth
|
||||
{ 0x1F968, 0x0000, 0xBE }, // pretzel
|
||||
{ 0x1F9EE, 0x0000, 0xBF }, // abacus
|
||||
{ 0x1F5FF, 0x0000, 0xC0 }, // moai
|
||||
{ 0x1F481, 0x0000, 0xC1 }, // tipping
|
||||
{ 0x1F994, 0x0000, 0xC2 }, // hedgehog
|
||||
{ 0x2666, 0x0000, 0xC3 }, // diamond_suit
|
||||
{ 0x2660, 0x0000, 0xC4 }, // spade_suit
|
||||
{ 0x1F355, 0x0000, 0xC5 }, // pizza
|
||||
{ 0x1F340, 0x0000, 0xC6 }, // four_leaf_clover
|
||||
{ 0x2601, 0x0000, 0xC7 }, // cloud
|
||||
{ 0x1F680, 0x0000, 0xC8 }, // rocket
|
||||
{ 0x1F6C2, 0x0000, 0xC9 }, // passport_control
|
||||
{ 0x2733, 0x0000, 0xCA }, // eight_spoked_asterisk
|
||||
{ 0x1F4F6, 0x0000, 0xCB }, // signal_strength
|
||||
{ 0x1F37A, 0x0000, 0xCC }, // beer
|
||||
{ 0x1F44D, 0x0000, 0x81 }, // thumbsup
|
||||
{ 0x2639, 0x0000, 0x82 }, // frown
|
||||
{ 0x1F6DC, 0x0000, 0x83 }, // wireless
|
||||
{ 0x267E, 0x0000, 0x84 }, // infinity
|
||||
{ 0x1F996, 0x0000, 0x85 }, // trex
|
||||
{ 0x2620, 0x0000, 0x86 }, // skull
|
||||
{ 0x271D, 0x0000, 0x87 }, // cross
|
||||
{ 0x26A1, 0x0000, 0x88 }, // lightning
|
||||
{ 0x1F3A9, 0x0000, 0x89 }, // tophat
|
||||
{ 0x1F3CD, 0x0000, 0x8A }, // motorcycle
|
||||
{ 0x1F331, 0x0000, 0x8B }, // seedling
|
||||
{ 0x1F1E6, 0x1F1FA, 0x8C }, // flag_au
|
||||
{ 0x2602, 0x0000, 0x8D }, // umbrella
|
||||
{ 0x1F9FF, 0x0000, 0x8E }, // nazar
|
||||
{ 0x1F30F, 0x0000, 0x8F }, // globe
|
||||
{ 0x2622, 0x0000, 0x90 }, // radioactive
|
||||
{ 0x1F404, 0x0000, 0x91 }, // cow
|
||||
{ 0x1F47D, 0x0000, 0x92 }, // alien
|
||||
{ 0x1F47E, 0x0000, 0x93 }, // invader
|
||||
{ 0x1F5E1, 0x0000, 0x94 }, // dagger
|
||||
{ 0x1F62C, 0x0000, 0x95 }, // grimace
|
||||
{ 0x26F0, 0x0000, 0x96 }, // mountain
|
||||
{ 0x1F51A, 0x0000, 0x97 }, // end_arrow
|
||||
{ 0x2B55, 0x0000, 0x98 }, // hollow_circle
|
||||
{ 0x1F409, 0x0000, 0x99 }, // dragon
|
||||
{ 0x1F310, 0x0000, 0x9A }, // globe_meridians
|
||||
{ 0x1F346, 0x0000, 0x9B }, // eggplant
|
||||
{ 0x1F6E1, 0x0000, 0x9C }, // shield
|
||||
{ 0x1F97D, 0x0000, 0x9D }, // goggles
|
||||
{ 0x1F98E, 0x0000, 0x9E }, // lizard
|
||||
{ 0x1F92A, 0x0000, 0x9F }, // zany_face
|
||||
{ 0x1F998, 0x0000, 0xA0 }, // kangaroo
|
||||
{ 0x1FAB6, 0x0000, 0xA1 }, // feather
|
||||
{ 0x1F506, 0x0000, 0xA2 }, // bright
|
||||
{ 0x303D, 0x0000, 0xA3 }, // part_alt
|
||||
{ 0x1F6E5, 0x0000, 0xA4 }, // motorboat
|
||||
{ 0x1F030, 0x0000, 0xA5 }, // domino
|
||||
{ 0x1F4E1, 0x0000, 0xA6 }, // satellite
|
||||
{ 0x1F6C3, 0x0000, 0xA7 }, // customs
|
||||
{ 0x1F920, 0x0000, 0xA8 }, // cowboy
|
||||
{ 0x1F6DE, 0x0000, 0xA9 }, // wheel
|
||||
{ 0x1F428, 0x0000, 0xAA }, // koala
|
||||
{ 0x1F39B, 0x0000, 0xAB }, // control_knobs
|
||||
{ 0x1F351, 0x0000, 0xAC }, // peach
|
||||
{ 0x1F3CE, 0x0000, 0xAD }, // racing_car
|
||||
{ 0x1F42D, 0x0000, 0xAE }, // mouse
|
||||
{ 0x1F344, 0x0000, 0xAF }, // mushroom
|
||||
{ 0x2623, 0x0000, 0xB0 }, // biohazard
|
||||
{ 0x1F43C, 0x0000, 0xB1 }, // panda
|
||||
{ 0x1F4A2, 0x0000, 0xB2 }, // anger
|
||||
{ 0x1F432, 0x0000, 0xB3 }, // dragon_face
|
||||
{ 0x1F4DF, 0x0000, 0xB4 }, // pager
|
||||
{ 0x1F41D, 0x0000, 0xB5 }, // bee
|
||||
{ 0x1F4A1, 0x0000, 0xB6 }, // bulb
|
||||
{ 0x1F431, 0x0000, 0xB7 }, // cat
|
||||
{ 0x269C, 0x0000, 0xB8 }, // fleur
|
||||
{ 0x1F314, 0x0000, 0xB9 }, // moon
|
||||
{ 0x2615, 0x0000, 0xBA }, // coffee
|
||||
{ 0x1F9B7, 0x0000, 0xBB }, // tooth
|
||||
{ 0x1F968, 0x0000, 0xBC }, // pretzel
|
||||
{ 0x1F9EE, 0x0000, 0xBD }, // abacus
|
||||
{ 0x1F5FF, 0x0000, 0xBE }, // moai
|
||||
{ 0x1F481, 0x0000, 0xBF }, // tipping
|
||||
{ 0x1F994, 0x0000, 0xC0 }, // hedgehog
|
||||
};
|
||||
|
||||
// ---- Helper functions ----
|
||||
@@ -746,7 +616,7 @@ static const EmojiCodepoint EMOJI_CODEPOINTS[EMOJI_COUNT] = {
|
||||
struct EmojiAlias { uint32_t cp; uint8_t escape; };
|
||||
#define EMOJI_ALIAS_COUNT 1
|
||||
static const EmojiAlias EMOJI_ALIASES[EMOJI_ALIAS_COUNT] = {
|
||||
{ 0x1F08E, 0xA8 }, // domino tile (MWD node signifier) -> domino sprite
|
||||
{ 0x1F08E, 0xA5 }, // domino tile (MWD node signifier) -> domino sprite
|
||||
};
|
||||
|
||||
static uint32_t emojiDecodeUtf8(const uint8_t* s, int remaining, int* bytes_consumed) {
|
||||
@@ -780,7 +650,6 @@ static void emojiSanitize(const char* src, char* dst, int dstLen) {
|
||||
int consumed;
|
||||
uint32_t cp = emojiDecodeUtf8(s + si, srcLen - si, &consumed);
|
||||
if (cp == 0xFE0F) { si += consumed; continue; }
|
||||
if (cp == 0xFFFD) { si += consumed; continue; } // Invalid UTF-8 — skip stray bytes safely
|
||||
bool found = false;
|
||||
for (int e = 0; e < EMOJI_COUNT; e++) {
|
||||
if (EMOJI_CODEPOINTS[e].cp == cp) {
|
||||
@@ -815,20 +684,7 @@ static void emojiSanitize(const char* src, char* dst, int dstLen) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
// Preserve non-emoji UTF-8 (accented letters, Cyrillic, Greek, etc.) by
|
||||
// copying original bytes through to dst. UTF-8-aware render paths handle
|
||||
// them downstream. Emoji-escape disambiguation remains unambiguous because
|
||||
// emoji escapes (0x80-0xCC) only appear standalone — never as a continuation
|
||||
// byte following a UTF-8 lead byte (0xC2-0xF7), so the decoder can tell them
|
||||
// apart by tracking lead-byte state.
|
||||
if (di + consumed < dstLen) {
|
||||
for (int k = 0; k < consumed; k++) dst[di++] = (char)s[si + k];
|
||||
si += consumed;
|
||||
} else {
|
||||
break; // Not enough room for full UTF-8 sequence — stop cleanly
|
||||
}
|
||||
}
|
||||
if (!found) si += consumed; // Skip unknown multi-byte chars
|
||||
} else {
|
||||
dst[di++] = (char)b;
|
||||
si++;
|
||||
|
||||
@@ -1,214 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <MeshCore.h>
|
||||
#include "../NodePrefs.h"
|
||||
#include "MeckFonts.h"
|
||||
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
class MyMesh;
|
||||
extern MyMesh the_mesh;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// FontPreviewScreen
|
||||
// ---------------------------------------------------------------------------
|
||||
// Subscreen opened from Settings → Font Style. Shows a live preview of each
|
||||
// font style (Classic, Noto Sans, Montserrat) with sample body and title text.
|
||||
// The user cycles through styles with W/S (or swipe on T5S3), previews the
|
||||
// actual rendering on-screen, and applies with Enter or cancels with Q.
|
||||
//
|
||||
// The preview works by temporarily calling display.setFontStyle() for each
|
||||
// sample block during render(), then restoring the original style.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class FontPreviewScreen : public UIScreen {
|
||||
UITask* _task;
|
||||
NodePrefs* _prefs;
|
||||
uint8_t _cursor; // Currently highlighted style (0, 1, 2)
|
||||
uint8_t _originalStyle; // Style when screen was opened (for cancel)
|
||||
bool _wantExit;
|
||||
bool _applied; // True if user pressed Enter (vs Q cancel)
|
||||
|
||||
public:
|
||||
FontPreviewScreen(UITask* task, NodePrefs* prefs)
|
||||
: _task(task), _prefs(prefs),
|
||||
_cursor(0), _originalStyle(0),
|
||||
_wantExit(false), _applied(false) {}
|
||||
|
||||
// Called when entering the screen from Settings
|
||||
void enter() {
|
||||
_originalStyle = _prefs->ui_font_style;
|
||||
_cursor = _originalStyle;
|
||||
_wantExit = false;
|
||||
_applied = false;
|
||||
}
|
||||
|
||||
bool wantsExit() const { return _wantExit; }
|
||||
bool wasApplied() const { return _applied; }
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Render
|
||||
// -----------------------------------------------------------------------
|
||||
int render(DisplayDriver& display) override {
|
||||
// === Header ===
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.setCursor(0, 0);
|
||||
display.print("Font Style Preview");
|
||||
display.drawRect(0, 11, display.width(), 1);
|
||||
|
||||
// === Size mode indicator ===
|
||||
{
|
||||
const char* sizeLabel = _prefs->large_font ? "[LARGER]" : "[TINY]";
|
||||
display.setCursor(display.width() - display.getTextWidth(sizeLabel) - 2, 0);
|
||||
display.print(sizeLabel);
|
||||
}
|
||||
|
||||
// === Style preview rows ===
|
||||
// Each style gets a block showing: style name + sample text rendered in
|
||||
// that style. The selected style is highlighted.
|
||||
const int headerH = 14;
|
||||
const int footerH = 14;
|
||||
const int bodyH = display.height() - headerH - footerH;
|
||||
const int rowH = bodyH / MECK_FONT_STYLE_COUNT;
|
||||
|
||||
uint8_t savedStyle = display.getFontStyle();
|
||||
|
||||
for (int i = 0; i < MECK_FONT_STYLE_COUNT; i++) {
|
||||
int y = headerH + i * rowH;
|
||||
bool selected = (i == _cursor);
|
||||
|
||||
// Highlight selected row
|
||||
if (selected) {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(0, y, display.width(), rowH);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
} else {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
}
|
||||
|
||||
// Style name — rendered in default font (size 1)
|
||||
display.setFontStyle(MECK_FONT_CLASSIC); // Name label always in Classic
|
||||
display.setTextSize(1);
|
||||
display.setCursor(2, y + 1);
|
||||
const char* name = meckFontStyleName(i);
|
||||
|
||||
// Prefix with selection indicator
|
||||
char label[32];
|
||||
if (selected) {
|
||||
snprintf(label, sizeof(label), "> %s", name);
|
||||
} else {
|
||||
snprintf(label, sizeof(label), " %s", name);
|
||||
}
|
||||
display.print(label);
|
||||
|
||||
// Sample text — rendered in the preview style
|
||||
display.setFontStyle(i);
|
||||
|
||||
// Body text sample (textSize = smallTextSize based on current size pref)
|
||||
display.setTextSize(_prefs->smallTextSize());
|
||||
int sampleY = y + (rowH / 2) - 2;
|
||||
display.setCursor(4, sampleY);
|
||||
display.print("The quick brown fox 0123");
|
||||
|
||||
// Title sample (textSize 3) — only if row is tall enough
|
||||
if (rowH > 22) {
|
||||
display.setTextSize(3);
|
||||
int titleY = y + rowH - 6;
|
||||
display.setCursor(4, titleY);
|
||||
display.print("Meck");
|
||||
}
|
||||
}
|
||||
|
||||
// Restore original font style
|
||||
display.setFontStyle(savedStyle);
|
||||
|
||||
// === Footer ===
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
int footerY = display.height() - 12;
|
||||
display.drawRect(0, footerY - 2, display.width(), 1);
|
||||
display.setCursor(0, footerY);
|
||||
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.print("Swipe:Pick");
|
||||
const char* rt = "Boot:Back Tap:Apply";
|
||||
#else
|
||||
display.print("W/S:Pick Q:Back");
|
||||
const char* rt = "Enter:Apply";
|
||||
#endif
|
||||
display.setCursor(display.width() - display.getTextWidth(rt) - 2, footerY);
|
||||
display.print(rt);
|
||||
|
||||
#ifdef USE_EINK
|
||||
return 5000;
|
||||
#else
|
||||
return 1000;
|
||||
#endif
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Input
|
||||
// -----------------------------------------------------------------------
|
||||
bool handleInput(char c) override {
|
||||
// W / UP — previous style
|
||||
if (c == 'w' || c == 'W' || c == 0xF2 || c == KEY_UP) {
|
||||
if (_cursor > 0) {
|
||||
_cursor--;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// S / DOWN — next style
|
||||
if (c == 's' || c == 'S' || c == 0xF1 || c == KEY_DOWN) {
|
||||
if (_cursor < MECK_FONT_STYLE_COUNT - 1) {
|
||||
_cursor++;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Enter — apply selected style and exit
|
||||
if (c == '\r' || c == 13 || c == KEY_ENTER || c == KEY_SELECT) {
|
||||
_prefs->ui_font_style = _cursor;
|
||||
the_mesh.savePrefs();
|
||||
_applied = true;
|
||||
_wantExit = true;
|
||||
Serial.printf("FontPreview: Applied style = %s (%d)\n",
|
||||
meckFontStyleName(_cursor), _cursor);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Q / backspace — cancel, restore original style
|
||||
if (c == 'q' || c == 'Q' || c == '\b' || c == KEY_CANCEL) {
|
||||
_prefs->ui_font_style = _originalStyle;
|
||||
_wantExit = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Touch hit test (virtual coordinates)
|
||||
// Returns: 0=miss, 1=cursor moved, 2=activate (apply).
|
||||
// -----------------------------------------------------------------------
|
||||
int selectAtVxVy(int vx, int vy) {
|
||||
const int headerH = 14;
|
||||
const int footerH = 14;
|
||||
const int bodyH = 128 - headerH - footerH; // virtual 128×128
|
||||
const int rowH = bodyH / MECK_FONT_STYLE_COUNT;
|
||||
|
||||
if (vy < headerH || vy >= 128 - footerH) return 0;
|
||||
|
||||
int tapped = (vy - headerH) / rowH;
|
||||
if (tapped < 0 || tapped >= MECK_FONT_STYLE_COUNT) return 0;
|
||||
|
||||
if (tapped == _cursor) return 2; // Tap same row = apply
|
||||
_cursor = tapped;
|
||||
return 1; // Moved cursor
|
||||
}
|
||||
};
|
||||
@@ -13,15 +13,12 @@ extern MyMesh the_mesh;
|
||||
// recency. Unlike Discovery (active zero-hop scan), this is purely passive
|
||||
// — it shows nodes whose adverts have been received over time.
|
||||
// ==========================================================================
|
||||
// Display cap — we never need to show all 200 storage entries at once
|
||||
#define LAST_HEARD_DISPLAY_SIZE 100
|
||||
|
||||
class LastHeardScreen : public UIScreen {
|
||||
mesh::RTCClock* _rtc;
|
||||
int _scrollPos;
|
||||
|
||||
// Local sorted copy of advert paths (PSRAM-allocated, refreshed each render)
|
||||
AdvertPath* _entries;
|
||||
// Local sorted copy of advert paths (refreshed each render)
|
||||
AdvertPath _entries[ADVERT_PATH_TABLE_SIZE];
|
||||
int _count;
|
||||
|
||||
static char typeChar(uint8_t adv_type) {
|
||||
@@ -49,9 +46,7 @@ class LastHeardScreen : public UIScreen {
|
||||
|
||||
public:
|
||||
LastHeardScreen(mesh::RTCClock* rtc)
|
||||
: _rtc(rtc), _scrollPos(0), _count(0) {
|
||||
_entries = (AdvertPath*)ps_calloc(LAST_HEARD_DISPLAY_SIZE, sizeof(AdvertPath));
|
||||
}
|
||||
: _rtc(rtc), _scrollPos(0), _count(0) {}
|
||||
|
||||
void resetScroll() { _scrollPos = 0; }
|
||||
|
||||
@@ -96,7 +91,7 @@ public:
|
||||
|
||||
int render(DisplayDriver& display) override {
|
||||
// Refresh sorted list from mesh
|
||||
_count = the_mesh.getRecentlyHeard(_entries, LAST_HEARD_DISPLAY_SIZE);
|
||||
_count = the_mesh.getRecentlyHeard(_entries, ADVERT_PATH_TABLE_SIZE);
|
||||
|
||||
// Filter out empty entries (recv_timestamp == 0)
|
||||
int validCount = 0;
|
||||
@@ -223,28 +218,14 @@ public:
|
||||
}
|
||||
|
||||
bool handleInput(char c) override {
|
||||
// Shift+W: page up
|
||||
if (c == 'W') {
|
||||
int pageSize = (128 - 14 - 14) / the_mesh.getNodePrefs()->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_scrollPos = max(0, _scrollPos - pageSize);
|
||||
return true;
|
||||
}
|
||||
// Scroll up
|
||||
if (c == 'w' || c == 0xF2) {
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_scrollPos > 0) { _scrollPos--; return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
// Shift+S: page down
|
||||
if (c == 'S') {
|
||||
int pageSize = (128 - 14 - 14) / the_mesh.getNodePrefs()->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_scrollPos = min(_count - 1, _scrollPos + pageSize);
|
||||
return true;
|
||||
}
|
||||
// Scroll down
|
||||
if (c == 's' || c == 0xF1) {
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
if (_scrollPos < _count - 1) { _scrollPos++; return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,168 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// MeckFonts.h — Font style system for Meck
|
||||
// ---------------------------------------------------------------------------
|
||||
// Defines font styles (Classic, Noto Sans, Montserrat) and provides lookup
|
||||
// tables for each display driver's setTextSize() method.
|
||||
//
|
||||
// Place this file in: examples/companion_radio/ui-new/
|
||||
// Place font .h files in: examples/companion_radio/ui-new/fonts/
|
||||
//
|
||||
// Both GxEPDDisplay.h and FastEPDDisplay.h include this file.
|
||||
// The -I examples/companion_radio/ui-new flag (already in platformio.ini)
|
||||
// makes everything resolve.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include <Adafruit_GFX.h> // GFXfont type
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Font style IDs — stored in NodePrefs.ui_font_style
|
||||
// ---------------------------------------------------------------------------
|
||||
#define MECK_FONT_CLASSIC 0 // FreeSans (original Meck look)
|
||||
#define MECK_FONT_NOTO 1 // Noto Sans — clean, excellent Latin Extended
|
||||
#define MECK_FONT_MONTSERRAT 2 // Montserrat — geometric, distinctive
|
||||
#define MECK_FONT_STYLE_COUNT 3
|
||||
|
||||
static inline const char* meckFontStyleName(uint8_t style) {
|
||||
switch (style) {
|
||||
case MECK_FONT_CLASSIC: return "Classic";
|
||||
case MECK_FONT_NOTO: return "Noto Sans";
|
||||
case MECK_FONT_MONTSERRAT: return "Montserrat";
|
||||
default: return "Classic";
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Font includes — Noto Sans family
|
||||
// ---------------------------------------------------------------------------
|
||||
#include "fonts/NotoSans7pt7b.h"
|
||||
#include "fonts/NotoSans9pt8b.h"
|
||||
#include "fonts/NotoSans12pt8b.h"
|
||||
#include "fonts/NotoSansBold7pt7b.h"
|
||||
#include "fonts/NotoSansBold9pt7b.h"
|
||||
#include "fonts/NotoSansBold12pt7b.h"
|
||||
#include "fonts/NotoSansBold18pt7b.h"
|
||||
#include "fonts/NotoSansBold24pt7b.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Font includes — Montserrat family
|
||||
// ---------------------------------------------------------------------------
|
||||
#include "fonts/Montserrat7pt7b.h"
|
||||
#include "fonts/Montserrat9pt7b.h"
|
||||
#include "fonts/Montserrat12pt7b.h"
|
||||
#include "fonts/MontserratBold7pt7b.h"
|
||||
#include "fonts/MontserratBold9pt8b.h"
|
||||
#include "fonts/MontserratBold12pt8b.h"
|
||||
#include "fonts/MontserratBold18pt7b.h"
|
||||
#include "fonts/MontserratBold24pt7b.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// T-Deck Pro font lookup (240×320, GxEPD2)
|
||||
// ---------------------------------------------------------------------------
|
||||
// Maps (fontStyle, textSize) → GFXfont*.
|
||||
// Returns NULL for textSize 0 with Classic (built-in 6×8 font).
|
||||
//
|
||||
// textSize values used by Meck screens:
|
||||
// 0 = tiny body (built-in 6×8 or 7pt with custom fonts)
|
||||
// 1 = body (9pt)
|
||||
// 2 = medium (9pt, same as body in current layout)
|
||||
// 3 = title (12pt bold)
|
||||
// 5 = clock face (12pt bold ×2 scaling — caller handles setTextSize(2))
|
||||
//
|
||||
// yAdvance reference (physical pixels):
|
||||
// Classic 9pt=22, Noto 9pt=24, Montserrat 9pt=21 — close enough
|
||||
// Classic 12ptB=29, Noto 12ptB=32, Montserrat 12ptB=29 — close
|
||||
// ---------------------------------------------------------------------------
|
||||
#if !defined(LilyGo_T5S3_EPaper_Pro)
|
||||
|
||||
static inline const GFXfont* meckGetFont_TDeckPro(uint8_t style, int textSize) {
|
||||
// Classic — return NULL to let display driver use its defaults
|
||||
if (style == MECK_FONT_CLASSIC) return nullptr;
|
||||
|
||||
if (style == MECK_FONT_NOTO) {
|
||||
switch (textSize) {
|
||||
case 0: return &NotoSans_Regular7pt7b;
|
||||
case 1: return &NotoSans9pt8b;
|
||||
case 2: return &NotoSans9pt8b;
|
||||
case 3: return &NotoSans_Bold12pt7b;
|
||||
case 5: return &NotoSans_Bold12pt7b; // caller applies x2 scale
|
||||
default: return &NotoSans9pt8b;
|
||||
}
|
||||
}
|
||||
|
||||
// MECK_FONT_MONTSERRAT
|
||||
switch (textSize) {
|
||||
case 0: return &Montserrat_Regular7pt7b;
|
||||
case 1: return &Montserrat_Regular9pt7b;
|
||||
case 2: return &Montserrat_Regular9pt7b;
|
||||
case 3: return &MontserratBold12pt8b;
|
||||
case 5: return &MontserratBold12pt8b; // caller applies x2 scale
|
||||
default: return &Montserrat_Regular9pt7b;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // !LilyGo_T5S3_EPaper_Pro
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// T5S3 font lookup (960×540, FastEPD)
|
||||
// ---------------------------------------------------------------------------
|
||||
// Metric-matched to existing FreeSans sizes so virtual-coordinate layouts
|
||||
// stay intact. The larger Noto/Montserrat sizes (18-26pt) are available in
|
||||
// the fonts/ directory for a future T5S3 layout rework.
|
||||
//
|
||||
// textSize values used by Meck screens:
|
||||
// 0 = body (12pt regular)
|
||||
// 1 = heading (12pt bold)
|
||||
// 2 = large bold (18pt bold)
|
||||
// 3 = extra large (24pt bold)
|
||||
// 5 = clock face (24pt bold ×5 scaling)
|
||||
//
|
||||
// yAdvance reference (physical pixels):
|
||||
// FreeSans12pt=29, Noto12pt=32, Montserrat12pt=29
|
||||
// FreeSansBold18pt=42, NotoBold18pt=48, MontBold18pt=43
|
||||
// FreeSansBold24pt=56, NotoBold24pt=64, MontBold24pt=57
|
||||
// ---------------------------------------------------------------------------
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
|
||||
static inline const GFXfont* meckGetFont_T5S3(uint8_t style, int textSize) {
|
||||
if (style == MECK_FONT_CLASSIC) return nullptr;
|
||||
|
||||
if (style == MECK_FONT_NOTO) {
|
||||
switch (textSize) {
|
||||
case 0: return &NotoSans12pt8b;
|
||||
case 1: return &NotoSans_Bold12pt7b;
|
||||
case 2: return &NotoSans_Bold18pt7b;
|
||||
case 3: return &NotoSans_Bold24pt7b;
|
||||
case 5: return &NotoSans_Bold24pt7b; // caller applies x5 scale
|
||||
default: return &NotoSans12pt8b;
|
||||
}
|
||||
}
|
||||
|
||||
// MECK_FONT_MONTSERRAT
|
||||
switch (textSize) {
|
||||
case 0: return &Montserrat_Regular12pt7b;
|
||||
case 1: return &MontserratBold12pt8b;
|
||||
case 2: return &Montserrat_Bold18pt7b;
|
||||
case 3: return &Montserrat_Bold24pt7b;
|
||||
case 5: return &Montserrat_Bold24pt7b; // caller applies x5 scale
|
||||
default: return &Montserrat_Regular12pt7b;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // LilyGo_T5S3_EPaper_Pro
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Unified lookup — called from display driver setTextSize()
|
||||
// ---------------------------------------------------------------------------
|
||||
// Returns the GFXfont* for the given style and textSize.
|
||||
// If nullptr is returned, the display driver should use its built-in default
|
||||
// (FreeSans for Classic style, or built-in 6×8 for textSize 0).
|
||||
// ---------------------------------------------------------------------------
|
||||
static inline const GFXfont* meckGetFont(uint8_t style, int textSize) {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
return meckGetFont_T5S3(style, textSize);
|
||||
#else
|
||||
return meckGetFont_TDeckPro(style, textSize);
|
||||
#endif
|
||||
}
|
||||
@@ -909,26 +909,12 @@ private:
|
||||
bool handleFileListInput(char c) {
|
||||
int totalItems = 1 + (int)_fileList.size();
|
||||
|
||||
// Shift+W: page up
|
||||
if (c == 'W') {
|
||||
int pageSize = (128 - 14 - 14) / _prefs->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_selectedFile = max(0, _selectedFile - pageSize);
|
||||
return true;
|
||||
}
|
||||
if (c == 'w' || c == 0xF2) {
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_selectedFile > 0) { _selectedFile--; return true; }
|
||||
return false;
|
||||
}
|
||||
|
||||
// Shift+S: page down
|
||||
if (c == 'S') {
|
||||
int pageSize = (128 - 14 - 14) / _prefs->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_selectedFile = min(totalItems - 1, _selectedFile + pageSize);
|
||||
return true;
|
||||
}
|
||||
if (c == 's' || c == 0xF1) {
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
if (_selectedFile < totalItems - 1) { _selectedFile++; return true; }
|
||||
return false;
|
||||
}
|
||||
@@ -1234,35 +1220,6 @@ public:
|
||||
bool isConfirmingDelete() const { return _mode == CONFIRM_DELETE; }
|
||||
bool isEmpty() const { return _bufLen == 0; }
|
||||
|
||||
// Touch: select file list row by virtual Y coordinate
|
||||
// Returns: 0 = outside list, 1 = moved selection, 2 = tapped same row (open)
|
||||
int selectRowAtVY(int vy) {
|
||||
if (_mode != FILE_LIST) return 0;
|
||||
const int startY = 14, footerH = 14;
|
||||
const int listLineH = _prefs ? _prefs->smallLineH() : 9;
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
const int bodyTop = startY;
|
||||
#else
|
||||
const int bodyTop = startY + (_prefs ? _prefs->smallHighlightOff() : 5);
|
||||
#endif
|
||||
if (vy < bodyTop || vy >= 128 - footerH) return 0;
|
||||
|
||||
int totalItems = 1 + (int)_fileList.size();
|
||||
if (totalItems == 0) return 0;
|
||||
int maxVisible = (128 - startY - footerH) / listLineH;
|
||||
if (maxVisible < 3) maxVisible = 3;
|
||||
if (maxVisible > 15) maxVisible = 15;
|
||||
int startIdx = max(0, min(_selectedFile - maxVisible / 2,
|
||||
totalItems - maxVisible));
|
||||
|
||||
int tappedRow = startIdx + (vy - bodyTop) / listLineH;
|
||||
if (tappedRow < 0 || tappedRow >= totalItems) return 0;
|
||||
|
||||
if (tappedRow == _selectedFile) return 2;
|
||||
_selectedFile = tappedRow;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// ---- Cursor Navigation (called from main.cpp) ----
|
||||
|
||||
void moveCursorLeft() {
|
||||
|
||||
@@ -3,10 +3,8 @@
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <helpers/ChannelDetails.h>
|
||||
#include <helpers/TransportKeyStore.h>
|
||||
#include <MeshCore.h>
|
||||
#include "../NodePrefs.h"
|
||||
#include "MeckFonts.h"
|
||||
|
||||
// Inline edit hint shown next to values being adjusted
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
@@ -116,7 +114,6 @@ enum SettingsRowType : uint8_t {
|
||||
ROW_MSG_NOTIFY, // Keyboard flash on new msg toggle
|
||||
ROW_DARK_MODE, // Dark mode toggle (inverted display)
|
||||
ROW_LARGE_FONT, // Font size toggle: 0=tiny (default), 1=larger
|
||||
ROW_FONT_STYLE, // Font style: Classic / Noto Sans / Montserrat
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
ROW_PORTRAIT_MODE, // Portrait orientation toggle
|
||||
#endif
|
||||
@@ -125,7 +122,6 @@ enum SettingsRowType : uint8_t {
|
||||
#endif
|
||||
ROW_GPS_BAUD, // GPS baud rate picker (requires reboot)
|
||||
ROW_PATH_HASH_SIZE, // Path hash size (1, 2, or 3 bytes per hop)
|
||||
ROW_DEFAULT_SCOPE, // Device-wide default region (text editor)
|
||||
#ifdef MECK_WIFI_COMPANION
|
||||
ROW_WIFI_SETUP, // WiFi SSID/password configuration
|
||||
ROW_WIFI_TOGGLE, // WiFi radio on/off toggle
|
||||
@@ -214,13 +210,13 @@ enum FmPhase : uint8_t {
|
||||
|
||||
// Max rows in the settings list (increased for contact sub-toggles + WiFi)
|
||||
#if defined(HAS_4G_MODEM) && defined(MECK_WIFI_COMPANION)
|
||||
#define SETTINGS_MAX_ROWS 57 // Extra rows for IMEI, Carrier, APN, contacts, WiFi, scope
|
||||
#define SETTINGS_MAX_ROWS 56 // Extra rows for IMEI, Carrier, APN, contacts, WiFi
|
||||
#elif defined(HAS_4G_MODEM)
|
||||
#define SETTINGS_MAX_ROWS 55 // Extra rows for IMEI, Carrier, APN + contacts + scope
|
||||
#define SETTINGS_MAX_ROWS 54 // Extra rows for IMEI, Carrier, APN + contacts
|
||||
#elif defined(MECK_WIFI_COMPANION)
|
||||
#define SETTINGS_MAX_ROWS 51 // Extra rows for contacts + WiFi + scope
|
||||
#define SETTINGS_MAX_ROWS 50 // Extra rows for contacts + WiFi
|
||||
#else
|
||||
#define SETTINGS_MAX_ROWS 49 // Contacts section + scope
|
||||
#define SETTINGS_MAX_ROWS 48 // Contacts section
|
||||
#endif
|
||||
#define SETTINGS_TEXT_BUF 33 // 32 chars + null
|
||||
|
||||
@@ -249,7 +245,6 @@ private:
|
||||
int _editPickerIdx; // for preset picker / contact mode picker
|
||||
float _editFloat; // for freq/BW editing
|
||||
int _editInt; // for SF/CR/TX/UTC editing
|
||||
uint8_t _fontPickerOriginal; // font style before edit (for cancel revert)
|
||||
int _confirmAction; // 0=none, 1=delete channel, 2=apply radio
|
||||
|
||||
// Onboarding mode
|
||||
@@ -402,16 +397,10 @@ private:
|
||||
addRow(ROW_TX_POWER);
|
||||
addRow(ROW_UTC_OFFSET);
|
||||
addRow(ROW_MSG_NOTIFY);
|
||||
#if HAS_GPS
|
||||
addRow(ROW_GPS_BAUD);
|
||||
#endif
|
||||
addRow(ROW_PATH_HASH_SIZE);
|
||||
addRow(ROW_DEFAULT_SCOPE);
|
||||
addRow(ROW_DARK_MODE);
|
||||
#if !defined(LILYGO_TECHO_LITE)
|
||||
addRow(ROW_LARGE_FONT);
|
||||
addRow(ROW_FONT_STYLE);
|
||||
#endif
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
addRow(ROW_PORTRAIT_MODE);
|
||||
#endif
|
||||
@@ -581,7 +570,7 @@ public:
|
||||
: _task(task), _rtc(rtc), _prefs(prefs),
|
||||
_numRows(0), _cursor(0), _scrollTop(0),
|
||||
_editMode(EDIT_NONE), _editPos(0), _editPickerIdx(0),
|
||||
_editFloat(0), _editInt(0), _fontPickerOriginal(0), _confirmAction(0),
|
||||
_editFloat(0), _editInt(0), _confirmAction(0),
|
||||
_onboarding(false), _subScreen(SUB_NONE), _savedTopCursor(0),
|
||||
_radioChanged(false), _needsTextVKB(false) {
|
||||
memset(_editBuf, 0, sizeof(_editBuf));
|
||||
@@ -1753,17 +1742,6 @@ public:
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
case ROW_DEFAULT_SCOPE:
|
||||
if (editing && _editMode == EDIT_TEXT) {
|
||||
snprintf(tmp, sizeof(tmp), "Region: %s_", _editBuf);
|
||||
} else if (_prefs->default_scope_name[0]) {
|
||||
snprintf(tmp, sizeof(tmp), "Default Region: %s", _prefs->default_scope_name);
|
||||
} else {
|
||||
strcpy(tmp, "Default Region: (none)");
|
||||
}
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
case ROW_GPS_BAUD: {
|
||||
char baudStr[16];
|
||||
if (editing && _editMode == EDIT_PICKER) {
|
||||
@@ -1789,17 +1767,6 @@ public:
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
case ROW_FONT_STYLE:
|
||||
if (editing && _editMode == EDIT_PICKER) {
|
||||
snprintf(tmp, sizeof(tmp), "< Font: %s >",
|
||||
meckFontStyleName(_prefs->ui_font_style));
|
||||
} else {
|
||||
snprintf(tmp, sizeof(tmp), "Font: %s",
|
||||
meckFontStyleName(_prefs->ui_font_style));
|
||||
}
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
case ROW_PORTRAIT_MODE:
|
||||
snprintf(tmp, sizeof(tmp), "Portrait Mode: %s",
|
||||
@@ -1880,7 +1847,7 @@ public:
|
||||
break;
|
||||
|
||||
case ROW_AUTOADD_CHAT:
|
||||
snprintf(tmp, sizeof(tmp), " Companion: %s",
|
||||
snprintf(tmp, sizeof(tmp), " Chat: %s",
|
||||
(_prefs->autoadd_config & AUTO_ADD_CHAT) ? "ON" : "OFF");
|
||||
display.print(tmp);
|
||||
break;
|
||||
@@ -1919,22 +1886,17 @@ public:
|
||||
uint8_t chIdx = _rows[i].param;
|
||||
ChannelDetails ch;
|
||||
if (the_mesh.getChannel(chIdx, ch)) {
|
||||
if (editing && _editMode == EDIT_TEXT) {
|
||||
// Editing scope for this channel
|
||||
snprintf(tmp, sizeof(tmp), " %s [%s_]", ch.name, _editBuf);
|
||||
if (chIdx == 0) {
|
||||
// Public channel - not deletable
|
||||
snprintf(tmp, sizeof(tmp), " %s", ch.name);
|
||||
} else {
|
||||
// Show channel name + scope tag
|
||||
if (ch.scope_name[0]) {
|
||||
snprintf(tmp, sizeof(tmp), " %s [%s]", ch.name, ch.scope_name);
|
||||
} else {
|
||||
snprintf(tmp, sizeof(tmp), " %s [*]", ch.name);
|
||||
}
|
||||
snprintf(tmp, sizeof(tmp), " %s", ch.name);
|
||||
if (selected) {
|
||||
// Show edit/delete hints on right
|
||||
// Show delete hint on right
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
const char* hint = chIdx > 0 ? "Ent:Region Hold:Del" : "Ent:Region";
|
||||
const char* hint = "Hold:Del";
|
||||
#else
|
||||
const char* hint = chIdx > 0 ? "Ent:Region X:Del" : "Ent:Region";
|
||||
const char* hint = "X:Del";
|
||||
#endif
|
||||
int hintW = display.getTextWidth(hint);
|
||||
display.setCursor(display.width() - hintW - 2, y);
|
||||
@@ -2063,9 +2025,6 @@ public:
|
||||
display.drawTextCentered(display.width() / 2, by + 4, tmp);
|
||||
} else if (_confirmAction == 2) {
|
||||
display.drawTextCentered(display.width() / 2, by + 4, "Apply radio changes?");
|
||||
} else if (_confirmAction == 3) {
|
||||
display.drawTextCentered(display.width() / 2, by + 4, "Region not set.");
|
||||
display.drawTextCentered(display.width() / 2, by + 15, "Leave unset?");
|
||||
}
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(display.width() / 2, by + bh - 14, "Tap:Yes Boot:No");
|
||||
@@ -2408,21 +2367,6 @@ public:
|
||||
} else {
|
||||
display.print("Editing...");
|
||||
}
|
||||
#elif defined(LILYGO_TECHO_LITE)
|
||||
if (_editMode == EDIT_TEXT) {
|
||||
display.print("Ent:Ok Q:Cancel");
|
||||
} else if (_editMode == EDIT_PICKER) {
|
||||
display.print("A/D:Pick Ent:Ok");
|
||||
} else if (_editMode == EDIT_NUMBER) {
|
||||
display.print("W/S:Adj Ent:Ok");
|
||||
} else if (_editMode == EDIT_CONFIRM) {
|
||||
// overlay handles it
|
||||
} else {
|
||||
display.print("Q:Bk");
|
||||
const char* r = "Ent:Edit";
|
||||
display.setCursor(display.width() - display.getTextWidth(r) - 2, footerY);
|
||||
display.print(r);
|
||||
}
|
||||
#else
|
||||
if (_editMode == EDIT_TEXT) {
|
||||
display.print("Type, Enter:Ok Q:Cancel");
|
||||
@@ -2507,28 +2451,12 @@ public:
|
||||
rebuildRows();
|
||||
} else if (_confirmAction == 2) {
|
||||
applyRadioParams();
|
||||
} else if (_confirmAction == 3) {
|
||||
// Region nudge dismissed — user chose "Yes, leave unscoped"
|
||||
_editMode = EDIT_NONE;
|
||||
_confirmAction = 0;
|
||||
_onboarding = false;
|
||||
return false; // Let caller navigate away from settings
|
||||
}
|
||||
_editMode = EDIT_NONE;
|
||||
_confirmAction = 0;
|
||||
return true;
|
||||
}
|
||||
if (c == 'q' || c == 'Q') {
|
||||
if (_confirmAction == 3) {
|
||||
// Region nudge cancelled — scroll to Default Region row
|
||||
_editMode = EDIT_NONE;
|
||||
_confirmAction = 0;
|
||||
// Find and scroll to ROW_DEFAULT_SCOPE
|
||||
for (int r = 0; r < _numRows; r++) {
|
||||
if (_rows[r].type == ROW_DEFAULT_SCOPE) { _cursor = r; break; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
_editMode = EDIT_NONE;
|
||||
_confirmAction = 0;
|
||||
return true;
|
||||
@@ -2738,34 +2666,6 @@ public:
|
||||
rebuildRows();
|
||||
}
|
||||
_editMode = EDIT_NONE;
|
||||
} else if (type == ROW_DEFAULT_SCOPE) {
|
||||
// Save device-wide default scope
|
||||
strncpy(_prefs->default_scope_name, _editBuf, sizeof(_prefs->default_scope_name));
|
||||
_prefs->default_scope_name[30] = '\0';
|
||||
if (_editBuf[0]) {
|
||||
TransportKey key;
|
||||
the_mesh.deriveScopeKey(_editBuf, key);
|
||||
memcpy(_prefs->default_scope_key, key.key, sizeof(_prefs->default_scope_key));
|
||||
} else {
|
||||
memset(_prefs->default_scope_key, 0, sizeof(_prefs->default_scope_key));
|
||||
}
|
||||
the_mesh.savePrefs();
|
||||
Serial.printf("Settings: Default scope set to '%s'\n",
|
||||
_editBuf[0] ? _editBuf : "(unscoped)");
|
||||
_editMode = EDIT_NONE;
|
||||
} else if (type == ROW_CHANNEL) {
|
||||
// Save per-channel scope
|
||||
uint8_t chIdx = _rows[_cursor].param;
|
||||
ChannelDetails ch;
|
||||
if (the_mesh.getChannel(chIdx, ch)) {
|
||||
strncpy(ch.scope_name, _editBuf, sizeof(ch.scope_name));
|
||||
ch.scope_name[30] = '\0';
|
||||
the_mesh.setChannel(chIdx, ch);
|
||||
the_mesh.saveChannels();
|
||||
Serial.printf("Settings: Channel %d scope set to '%s'\n",
|
||||
chIdx, _editBuf[0] ? _editBuf : "(device default)");
|
||||
}
|
||||
_editMode = EDIT_NONE;
|
||||
}
|
||||
#ifdef HAS_4G_MODEM
|
||||
else if (type == ROW_APN) {
|
||||
@@ -2814,15 +2714,9 @@ public:
|
||||
} else if (type == ROW_GPS_BAUD) {
|
||||
_editPickerIdx--;
|
||||
if (_editPickerIdx < 0) _editPickerIdx = GPS_BAUD_OPTION_COUNT - 1;
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro) || defined(LilyGo_TDeck_Pro)
|
||||
} else if (type == ROW_AUTO_LOCK) {
|
||||
_editPickerIdx--;
|
||||
if (_editPickerIdx < 0) _editPickerIdx = AUTO_LOCK_OPTION_COUNT - 1;
|
||||
#endif
|
||||
} else if (type == ROW_FONT_STYLE) {
|
||||
_editPickerIdx--;
|
||||
if (_editPickerIdx < 0) _editPickerIdx = MECK_FONT_STYLE_COUNT - 1;
|
||||
_prefs->ui_font_style = _editPickerIdx; // Live preview
|
||||
} else {
|
||||
// Radio preset
|
||||
_editPickerIdx--;
|
||||
@@ -2837,15 +2731,9 @@ public:
|
||||
} else if (type == ROW_GPS_BAUD) {
|
||||
_editPickerIdx++;
|
||||
if (_editPickerIdx >= GPS_BAUD_OPTION_COUNT) _editPickerIdx = 0;
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro) || defined(LilyGo_TDeck_Pro)
|
||||
} else if (type == ROW_AUTO_LOCK) {
|
||||
_editPickerIdx++;
|
||||
if (_editPickerIdx >= AUTO_LOCK_OPTION_COUNT) _editPickerIdx = 0;
|
||||
#endif
|
||||
} else if (type == ROW_FONT_STYLE) {
|
||||
_editPickerIdx++;
|
||||
if (_editPickerIdx >= MECK_FONT_STYLE_COUNT) _editPickerIdx = 0;
|
||||
_prefs->ui_font_style = _editPickerIdx; // Live preview
|
||||
} else {
|
||||
// Radio preset
|
||||
_editPickerIdx++;
|
||||
@@ -2863,21 +2751,12 @@ public:
|
||||
_editMode = EDIT_NONE;
|
||||
Serial.printf("Settings: GPS baud set to %lu (reboot to apply)\n",
|
||||
(unsigned long)_prefs->gps_baudrate);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro) || defined(LilyGo_TDeck_Pro)
|
||||
} else if (type == ROW_AUTO_LOCK) {
|
||||
_prefs->auto_lock_minutes = AUTO_LOCK_OPTIONS[_editPickerIdx];
|
||||
the_mesh.savePrefs();
|
||||
_editMode = EDIT_NONE;
|
||||
Serial.printf("Settings: Auto lock = %s\n",
|
||||
autoLockLabel(_prefs->auto_lock_minutes));
|
||||
#endif
|
||||
} else if (type == ROW_FONT_STYLE) {
|
||||
_prefs->ui_font_style = _editPickerIdx;
|
||||
the_mesh.savePrefs();
|
||||
_editMode = EDIT_NONE;
|
||||
Serial.printf("Settings: Font style = %s (%d)\n",
|
||||
meckFontStyleName(_prefs->ui_font_style),
|
||||
_prefs->ui_font_style);
|
||||
} else {
|
||||
// Apply radio preset
|
||||
if (_editPickerIdx >= 0 && _editPickerIdx < (int)NUM_RADIO_PRESETS) {
|
||||
@@ -2911,10 +2790,6 @@ public:
|
||||
return true;
|
||||
}
|
||||
if (c == 'q' || c == 'Q') {
|
||||
// Revert live preview if font style picker was active
|
||||
if (type == ROW_FONT_STYLE) {
|
||||
_prefs->ui_font_style = _fontPickerOriginal;
|
||||
}
|
||||
_editMode = EDIT_NONE;
|
||||
return true;
|
||||
}
|
||||
@@ -3002,17 +2877,8 @@ public:
|
||||
|
||||
// --- Normal browsing mode ---
|
||||
|
||||
// W/S: navigate, Shift+W/S: page scroll
|
||||
if (c == 'W') {
|
||||
// Shift+W: page up
|
||||
int pageSize = (128 - 14 - 14) / _prefs->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_cursor = max(0, _cursor - pageSize);
|
||||
skipNonSelectable(-1);
|
||||
Serial.printf("Settings: page up cursor=%d/%d\n", _cursor, _numRows);
|
||||
return true;
|
||||
}
|
||||
if (c == 'w') {
|
||||
// W/S: navigate
|
||||
if (c == 'w' || c == 'W') {
|
||||
if (_cursor > 0) {
|
||||
_cursor--;
|
||||
skipNonSelectable(-1);
|
||||
@@ -3020,16 +2886,7 @@ public:
|
||||
Serial.printf("Settings: cursor=%d/%d row=%d\n", _cursor, _numRows, _rows[_cursor].type);
|
||||
return true;
|
||||
}
|
||||
if (c == 'S') {
|
||||
// Shift+S: page down
|
||||
int pageSize = (128 - 14 - 14) / _prefs->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_cursor = min(_numRows - 1, _cursor + pageSize);
|
||||
skipNonSelectable(1);
|
||||
Serial.printf("Settings: page down cursor=%d/%d\n", _cursor, _numRows);
|
||||
return true;
|
||||
}
|
||||
if (c == 's') {
|
||||
if (c == 's' || c == 'S') {
|
||||
if (_cursor < _numRows - 1) {
|
||||
_cursor++;
|
||||
skipNonSelectable(1);
|
||||
@@ -3094,10 +2951,6 @@ public:
|
||||
Serial.printf("Settings: Font size = %s\n",
|
||||
_prefs->large_font ? "LARGER" : "TINY");
|
||||
break;
|
||||
case ROW_FONT_STYLE:
|
||||
_fontPickerOriginal = _prefs->ui_font_style;
|
||||
startEditPicker(_prefs->ui_font_style);
|
||||
break;
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
case ROW_PORTRAIT_MODE:
|
||||
_prefs->portrait_mode = _prefs->portrait_mode ? 0 : 1;
|
||||
@@ -3255,18 +3108,7 @@ public:
|
||||
startFileMgr();
|
||||
break;
|
||||
#endif
|
||||
case ROW_CHANNEL: {
|
||||
// Enter on a channel row → edit its region scope
|
||||
uint8_t chIdx = _rows[_cursor].param;
|
||||
ChannelDetails ch;
|
||||
if (the_mesh.getChannel(chIdx, ch)) {
|
||||
startEditText(ch.scope_name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ROW_DEFAULT_SCOPE:
|
||||
startEditText(_prefs->default_scope_name);
|
||||
break;
|
||||
case ROW_CHANNEL:
|
||||
case ROW_PUB_KEY:
|
||||
case ROW_FIRMWARE:
|
||||
// Not directly editable on Enter
|
||||
@@ -3303,21 +3145,6 @@ public:
|
||||
_confirmAction = 2;
|
||||
return true;
|
||||
}
|
||||
// Nudge if no region is set anywhere (device default empty AND no per-channel scopes)
|
||||
if (_prefs->default_scope_name[0] == '\0') {
|
||||
bool anyChannelScoped = false;
|
||||
for (uint8_t ci = 0; ci < MAX_GROUP_CHANNELS && !anyChannelScoped; ci++) {
|
||||
ChannelDetails ch;
|
||||
if (the_mesh.getChannel(ci, ch) && ch.name[0] != '\0' && ch.scope_name[0] != '\0') {
|
||||
anyChannelScoped = true;
|
||||
}
|
||||
}
|
||||
if (!anyChannelScoped) {
|
||||
_editMode = EDIT_CONFIRM;
|
||||
_confirmAction = 3;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
_onboarding = false;
|
||||
return false; // Let the caller handle navigation back
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ class UITask;
|
||||
// ============================================================================
|
||||
#define BOOKS_FOLDER "/books"
|
||||
#define INDEX_FOLDER "/.indexes"
|
||||
#define INDEX_VERSION 13 // v13: font key in header — auto-invalidate on font/style change
|
||||
#define INDEX_VERSION 12 // v12: indexer breaks page BEFORE overflowing line (matches renderer pre-check)
|
||||
#define PREINDEX_PAGES 100
|
||||
#define READER_MAX_FILES 50
|
||||
#define READER_BUF_SIZE 4096
|
||||
@@ -106,6 +106,8 @@ inline WrapResult findLineBreak(const char* buffer, int bufLen, int lineStart, i
|
||||
// width variation in proportional fonts like FreeSans12pt.
|
||||
// maxChars is a safety upper bound to prevent runaway on spaceless lines.
|
||||
// ============================================================================
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
|
||||
inline WrapResult findLineBreakPixel(const char* buffer, int bufLen, int lineStart,
|
||||
DisplayDriver* display, int maxChars) {
|
||||
@@ -233,6 +235,7 @@ inline WrapResult findLineBreakPixel(const char* buffer, int bufLen, int lineSta
|
||||
result.nextStart = bufLen;
|
||||
return result;
|
||||
}
|
||||
#endif // LilyGo_T5S3_EPaper_Pro
|
||||
|
||||
// ============================================================================
|
||||
// Page Indexer (word-wrap aware, matches display rendering)
|
||||
@@ -244,8 +247,7 @@ inline int indexPagesWordWrap(File& file, long startPos,
|
||||
std::vector<long>& pagePositions,
|
||||
int linesPerPage, int charsPerLine,
|
||||
int maxPages,
|
||||
int textAreaHeight = 0, int lineHeight = 0,
|
||||
DisplayDriver* pixelDisplay = nullptr) {
|
||||
int textAreaHeight = 0, int lineHeight = 0) {
|
||||
const int BUF_SIZE = READER_BUF_SIZE; // Match page buffer to avoid chunk boundary wrap mismatches
|
||||
char buffer[BUF_SIZE];
|
||||
|
||||
@@ -267,10 +269,7 @@ inline int indexPagesWordWrap(File& file, long startPos,
|
||||
int pos = 0;
|
||||
while (pos < bufLen) {
|
||||
int lineStart = pos;
|
||||
// Pixel-based wrapping for proportional fonts; char-count for monospaced
|
||||
WrapResult wrap = pixelDisplay
|
||||
? findLineBreakPixel(buffer, bufLen, pos, pixelDisplay, charsPerLine)
|
||||
: findLineBreak(buffer, bufLen, pos, charsPerLine);
|
||||
WrapResult wrap = findLineBreak(buffer, bufLen, pos, charsPerLine);
|
||||
if (wrap.nextStart <= pos && wrap.lineEnd >= bufLen) break;
|
||||
|
||||
// Blank line = newline at line start (no printable content before it)
|
||||
@@ -323,8 +322,9 @@ inline int indexPagesWordWrap(File& file, long startPos,
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Pixel-based Page Indexer (proportional font word wrap)
|
||||
// Pixel-based Page Indexer for T5S3 (proportional font word wrap)
|
||||
// ============================================================================
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
inline int indexPagesWordWrapPixel(File& file, long startPos,
|
||||
std::vector<long>& pagePositions,
|
||||
int linesPerPage, int maxChars,
|
||||
@@ -377,6 +377,7 @@ inline int indexPagesWordWrapPixel(File& file, long startPos,
|
||||
display->setTextSize(1); // Restore
|
||||
return pagesAdded;
|
||||
}
|
||||
#endif // LilyGo_T5S3_EPaper_Pro
|
||||
|
||||
// ============================================================================
|
||||
// TextReaderScreen
|
||||
@@ -401,8 +402,7 @@ private:
|
||||
Mode _mode;
|
||||
bool _sdReady;
|
||||
bool _initialized; // Layout metrics calculated
|
||||
uint8_t _lastFontPref; // Font preference at last layout init (large_font | fontStyle<<4)
|
||||
uint8_t _fontKey; // Current font key stored in .idx files for cache invalidation
|
||||
uint8_t _lastFontPref; // Font preference at last layout init (detect changes)
|
||||
bool _bootIndexed; // Boot-time pre-indexing done
|
||||
DisplayDriver* _display; // Stored reference for splash screens
|
||||
|
||||
@@ -627,15 +627,6 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
// Font key: page boundaries depend on font metrics — discard if font changed
|
||||
uint8_t savedFontKey = 0;
|
||||
idxFile.read(&savedFontKey, 1);
|
||||
if (savedFontKey != _fontKey) {
|
||||
idxFile.close();
|
||||
SD.remove(idxPath.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
idxFile.read((uint8_t*)&savedSize, 4);
|
||||
idxFile.read((uint8_t*)&pageCount, 4);
|
||||
idxFile.read(&fullyFlag, 1);
|
||||
@@ -690,7 +681,6 @@ private:
|
||||
uint8_t fullyFlag = fullyIndexed ? 1 : 0;
|
||||
|
||||
idxFile.write(&version, 1);
|
||||
idxFile.write(&_fontKey, 1); // Font key for cache invalidation
|
||||
idxFile.write((uint8_t*)&fileSize, 4);
|
||||
idxFile.write((uint8_t*)&pageCount, 4);
|
||||
idxFile.write(&fullyFlag, 1);
|
||||
@@ -724,8 +714,8 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
// Seek to lastReadPage field: version(1) + fontKey(1) + fileSize(4) + pageCount(4) + fullyIndexed(1)
|
||||
idxFile.seek(1 + 1 + 4 + 4 + 1);
|
||||
// Seek to lastReadPage field: version(1) + fileSize(4) + pageCount(4) + fullyIndexed(1)
|
||||
idxFile.seek(1 + 4 + 4 + 1);
|
||||
idxFile.write((uint8_t*)&page, 4);
|
||||
idxFile.close();
|
||||
return true;
|
||||
@@ -945,19 +935,17 @@ private:
|
||||
}
|
||||
drawSplash("Indexing...", "Please wait", shortName);
|
||||
|
||||
DisplayDriver* pxd = (_prefs->large_font || _prefs->ui_font_style > 0) ? _display : nullptr;
|
||||
if (pxd) pxd->setTextSize(_prefs->smallTextSize());
|
||||
if (_pagePositions.empty()) {
|
||||
// Cache had no pages (e.g. dummy entry) — full index from scratch
|
||||
_pagePositions.push_back(0);
|
||||
indexPagesWordWrap(_file, 0, _pagePositions,
|
||||
_linesPerPage, _charsPerLine, 0,
|
||||
_textAreaHeight, _lineHeight, pxd);
|
||||
_textAreaHeight, _lineHeight);
|
||||
} else {
|
||||
long lastPos = cache->pagePositions.back();
|
||||
indexPagesWordWrap(_file, lastPos, _pagePositions,
|
||||
_linesPerPage, _charsPerLine, 0,
|
||||
_textAreaHeight, _lineHeight, pxd);
|
||||
_textAreaHeight, _lineHeight);
|
||||
}
|
||||
} else {
|
||||
// No cache — full index from scratch
|
||||
@@ -975,11 +963,9 @@ private:
|
||||
drawSplash("Indexing...", "Please wait", shortName);
|
||||
|
||||
_pagePositions.push_back(0);
|
||||
DisplayDriver* pxd = (_prefs->large_font || _prefs->ui_font_style > 0) ? _display : nullptr;
|
||||
if (pxd) pxd->setTextSize(_prefs->smallTextSize());
|
||||
indexPagesWordWrap(_file, 0, _pagePositions,
|
||||
_linesPerPage, _charsPerLine, 0,
|
||||
_textAreaHeight, _lineHeight, pxd);
|
||||
_textAreaHeight, _lineHeight);
|
||||
}
|
||||
|
||||
// Save complete index
|
||||
@@ -1123,8 +1109,7 @@ private:
|
||||
display.fillRect(0, y, display.width(), listLineH);
|
||||
#else
|
||||
// setCursor adds +5 to y internally, but fillRect does not.
|
||||
// NodePrefs::smallHighlightOff() returns the correct offset for all
|
||||
// font combinations (built-in, large_font, custom 7pt styles).
|
||||
// Offset fillRect by +5 to align highlight bar with text.
|
||||
display.fillRect(0, y + _prefs->smallHighlightOff(), display.width(), listLineH);
|
||||
#endif
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
@@ -1191,29 +1176,18 @@ private:
|
||||
int y = 0;
|
||||
int lineCount = 0;
|
||||
int pos = 0;
|
||||
int textArea = display.height() - _footerHeight; // total usable height (matches indexer's textAreaHeight)
|
||||
int maxY = display.height() - _footerHeight - _lineHeight;
|
||||
|
||||
// Render all lines in the page buffer using word wrap.
|
||||
// The buffer contains exactly the bytes for this page (from indexed positions),
|
||||
// so we render everything in it.
|
||||
// Proportional fonts use pixel-based wrapping to match the indexer exactly.
|
||||
bool usePixelWrap = (_prefs->large_font || display.getFontStyle() > 0);
|
||||
while (pos < _pageBufLen) {
|
||||
while (pos < _pageBufLen && y <= maxY) {
|
||||
int oldPos = pos;
|
||||
WrapResult wrap = usePixelWrap
|
||||
? findLineBreakPixel(_pageBuf, _pageBufLen, pos, &display, _charsPerLine)
|
||||
: findLineBreak(_pageBuf, _pageBufLen, pos, _charsPerLine);
|
||||
WrapResult wrap = findLineBreak(_pageBuf, _pageBufLen, pos, _charsPerLine);
|
||||
|
||||
// Safety: stop if wrap made no progress (stuck at end of buffer)
|
||||
// Safety: stop if findLineBreak made no progress (stuck at end of buffer)
|
||||
if (wrap.nextStart <= oldPos && wrap.lineEnd >= _pageBufLen) break;
|
||||
|
||||
// Height-aware stop check — must match the indexer exactly.
|
||||
// Blank lines (lineEnd == lineStart) get reduced height.
|
||||
// Check BEFORE rendering: does this line fit on the current page?
|
||||
bool isBlankLine = (wrap.lineEnd == pos);
|
||||
int thisH = isBlankLine ? max(2, _lineHeight * 2 / 5) : _lineHeight;
|
||||
if (y > 0 && y + thisH > textArea) break;
|
||||
|
||||
display.setCursor(0, y);
|
||||
// Print line with UTF-8 decoding: multi-byte sequences are decoded
|
||||
// to Unicode codepoints, then mapped to CP437 for the built-in font.
|
||||
@@ -1307,7 +1281,7 @@ private:
|
||||
|
||||
public:
|
||||
TextReaderScreen(UITask* task, NodePrefs* prefs = nullptr)
|
||||
: _task(task), _prefs(prefs), _mode(FILE_LIST), _sdReady(false), _initialized(false), _lastFontPref(0), _fontKey(0),
|
||||
: _task(task), _prefs(prefs), _mode(FILE_LIST), _sdReady(false), _initialized(false), _lastFontPref(0),
|
||||
_bootIndexed(false), _display(nullptr),
|
||||
_charsPerLine(38), _linesPerPage(22), _lineHeight(5),
|
||||
_textAreaHeight(100), _headerHeight(14), _footerHeight(14),
|
||||
@@ -1332,16 +1306,14 @@ public:
|
||||
|
||||
// Call once after display is available to calculate layout metrics
|
||||
void initLayout(DisplayDriver& display) {
|
||||
// Re-init if font preference OR font style changed since last layout
|
||||
uint8_t curFont = _prefs ? (_prefs->large_font | (display.getFontStyle() << 4)) : 0;
|
||||
// Re-init if font preference changed since last layout
|
||||
uint8_t curFont = _prefs ? _prefs->large_font : 0;
|
||||
if (_initialized && curFont != _lastFontPref) {
|
||||
_initialized = false;
|
||||
_fileCache.clear(); // Page positions are font-dependent — force re-index
|
||||
Serial.println("TextReader: font changed, recalculating layout");
|
||||
}
|
||||
if (_initialized) return;
|
||||
_lastFontPref = curFont;
|
||||
_fontKey = curFont; // Stored in .idx files for SD cache invalidation
|
||||
|
||||
// Store display reference for splash screens during openBook
|
||||
_display = &display;
|
||||
@@ -1372,16 +1344,13 @@ public:
|
||||
if (_charsPerLine < 15) _charsPerLine = 15;
|
||||
if (_charsPerLine > 80) _charsPerLine = 80;
|
||||
#else
|
||||
// T-Deck Pro: proportional font — measure average character width from
|
||||
// a sample sentence (M is widest glyph, ~40% wider than average).
|
||||
// Large font (9pt) uses 70% safety margin; custom tiny (7pt) uses 85%.
|
||||
if (_prefs && (_prefs->large_font || display.getFontStyle() > 0)) {
|
||||
// T-Deck Pro: large_font uses FreeSans9pt (proportional) — same fix
|
||||
if (_prefs && _prefs->large_font) {
|
||||
const char* sample = "the quick brown fox jumps over lazy dog";
|
||||
uint16_t sampleW = display.getTextWidth(sample);
|
||||
int sampleLen = strlen(sample);
|
||||
if (sampleW > 0 && sampleLen > 0) {
|
||||
int pct = _prefs->large_font ? 70 : 85;
|
||||
_charsPerLine = (display.width() * sampleLen * pct) / ((int)sampleW * 100);
|
||||
_charsPerLine = (display.width() * sampleLen * 70) / ((int)sampleW * 100);
|
||||
}
|
||||
}
|
||||
if (_charsPerLine < 15) _charsPerLine = 15;
|
||||
@@ -1409,13 +1378,10 @@ public:
|
||||
}
|
||||
#else
|
||||
// T-Deck Pro large_font uses FreeSans9pt (yAdvance=22px at scale 1.5625×).
|
||||
// Custom proportional fonts (Noto Sans, Montserrat) at size 0 also need
|
||||
// a tuned line height — the 6x8 formula above uses a width:height ratio
|
||||
// that doesn't apply to GFX fonts, causing overlap or excessive spacing.
|
||||
// The 6x8 formula above gives ~5-7 which is way too small — lines overlap.
|
||||
// Use smallLineH() which is already tuned for this font.
|
||||
if (_prefs && _prefs->large_font) {
|
||||
_lineHeight = _prefs->smallLineH(); // 11 — tested for FreeSans9pt
|
||||
} else if (display.getFontStyle() > 0) {
|
||||
_lineHeight = 7; // Custom 7pt fonts: 7 * 2.5 = 17.5px — fits ~16 lines/page
|
||||
_lineHeight = _prefs->smallLineH();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1516,12 +1482,10 @@ public:
|
||||
cache.pagePositions.clear();
|
||||
cache.pagePositions.push_back(0);
|
||||
|
||||
DisplayDriver* pxd = (_prefs->large_font || _prefs->ui_font_style > 0) ? _display : nullptr;
|
||||
if (pxd) pxd->setTextSize(_prefs->smallTextSize());
|
||||
indexPagesWordWrap(file, 0, cache.pagePositions,
|
||||
_linesPerPage, _charsPerLine,
|
||||
PREINDEX_PAGES - 1,
|
||||
_textAreaHeight, _lineHeight, pxd);
|
||||
_textAreaHeight, _lineHeight);
|
||||
cache.fullyIndexed = !file.available();
|
||||
file.close();
|
||||
|
||||
@@ -1648,12 +1612,10 @@ public:
|
||||
cache.pagePositions.clear();
|
||||
cache.pagePositions.push_back(0);
|
||||
|
||||
DisplayDriver* pxd = (_prefs->large_font || _prefs->ui_font_style > 0) ? _display : nullptr;
|
||||
if (pxd) pxd->setTextSize(_prefs->smallTextSize());
|
||||
int added = indexPagesWordWrap(file, 0, cache.pagePositions,
|
||||
_linesPerPage, _charsPerLine,
|
||||
PREINDEX_PAGES - 1,
|
||||
_textAreaHeight, _lineHeight, pxd);
|
||||
_textAreaHeight, _lineHeight);
|
||||
cache.fullyIndexed = !file.available();
|
||||
file.close();
|
||||
|
||||
@@ -1716,11 +1678,9 @@ public:
|
||||
// Layout was invalidated (orientation change) — reindex the open book
|
||||
Serial.println("TextReader: Reindexing after layout change");
|
||||
_pagePositions.push_back(0);
|
||||
DisplayDriver* pxd = (_prefs->large_font || _prefs->ui_font_style > 0) ? _display : nullptr;
|
||||
if (pxd) pxd->setTextSize(_prefs->smallTextSize());
|
||||
indexPagesWordWrap(_file, 0, _pagePositions,
|
||||
_linesPerPage, _charsPerLine, 0,
|
||||
_textAreaHeight, _lineHeight, pxd);
|
||||
_textAreaHeight, _lineHeight);
|
||||
_totalPages = _pagePositions.size();
|
||||
if (_currentPage >= _totalPages) _currentPage = 0;
|
||||
_mode = READING;
|
||||
@@ -1811,15 +1771,8 @@ public:
|
||||
bool handleFileListInput(char c) {
|
||||
int total = totalListItems();
|
||||
|
||||
// Shift+W: page up
|
||||
if (c == 'W') {
|
||||
int pageSize = (128 - 14 - 14) / _prefs->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_selectedFile = max(0, _selectedFile - pageSize);
|
||||
return true;
|
||||
}
|
||||
// W - scroll up
|
||||
if (c == 'w' || c == 0xF2) {
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_selectedFile > 0) {
|
||||
_selectedFile--;
|
||||
return true;
|
||||
@@ -1827,15 +1780,8 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
// Shift+S: page down
|
||||
if (c == 'S') {
|
||||
int pageSize = (128 - 14 - 14) / _prefs->smallLineH();
|
||||
if (pageSize < 3) pageSize = 3;
|
||||
_selectedFile = min(total - 1, _selectedFile + pageSize);
|
||||
return true;
|
||||
}
|
||||
// S - scroll down
|
||||
if (c == 's' || c == 0xF1) {
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
if (_selectedFile < total - 1) {
|
||||
_selectedFile++;
|
||||
return true;
|
||||
@@ -1903,12 +1849,10 @@ public:
|
||||
cache.lastReadPage = 0;
|
||||
cache.pagePositions.clear();
|
||||
cache.pagePositions.push_back(0);
|
||||
DisplayDriver* pxd = (_prefs->large_font || _prefs->ui_font_style > 0) ? _display : nullptr;
|
||||
if (pxd) pxd->setTextSize(_prefs->smallTextSize());
|
||||
indexPagesWordWrap(file, 0, cache.pagePositions,
|
||||
_linesPerPage, _charsPerLine,
|
||||
PREINDEX_PAGES - 1,
|
||||
_textAreaHeight, _lineHeight, pxd);
|
||||
_textAreaHeight, _lineHeight);
|
||||
cache.fullyIndexed = !file.available();
|
||||
file.close();
|
||||
saveIndex(cache.filename, cache.pagePositions, cache.fileSize,
|
||||
|
||||
@@ -1,988 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <MeshCore.h>
|
||||
#include <Packet.h>
|
||||
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
class MyMesh;
|
||||
extern MyMesh the_mesh;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// TraceScreen
|
||||
// ---------------------------------------------------------------------------
|
||||
// Standalone trace path tool for the T-Deck Pro. The user builds a repeater
|
||||
// chain from the contacts list or by typing comma-separated hash values, sends
|
||||
// a PAYLOAD_TYPE_TRACE packet direct-routed through the chain, and views
|
||||
// per-hop SNR results.
|
||||
//
|
||||
// Path size (1-byte or 2-byte hashes) follows the device's path_hash_mode
|
||||
// setting but can be toggled on this screen.
|
||||
//
|
||||
// The trace packet is created via Mesh::createTrace() and sent via
|
||||
// Mesh::sendDirect(). Each repeater in the chain checks if its pub_key
|
||||
// prefix matches the next hash in the payload; if so, it appends its receive
|
||||
// SNR*4 to the packet's path field and forwards. When the packet reaches
|
||||
// the end of its given path, onTraceRecv() fires on the receiving node.
|
||||
//
|
||||
// For round-trip traces the user should build a symmetric path
|
||||
// (e.g. A,B,C,B,A) and must be able to hear the last repeater directly.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#define TRACE_MAX_HOPS 16
|
||||
#define TRACE_TIMEOUT_MS 30000 // 30 second timeout
|
||||
#define TRACE_EDIT_BUF 80 // Max chars for typed path
|
||||
|
||||
class TraceScreen : public UIScreen {
|
||||
public:
|
||||
enum ScreenState {
|
||||
STATE_BUILD, // Building the path
|
||||
STATE_PICK_HOP, // Picking a repeater from contacts
|
||||
STATE_RUNNING, // Trace sent, waiting for response
|
||||
STATE_RESULTS // Showing results
|
||||
};
|
||||
|
||||
// Trace result data (filled by onTraceResult callback)
|
||||
struct TraceResult {
|
||||
uint8_t hashes[TRACE_MAX_HOPS * 2]; // Hash bytes (1 or 2 per hop)
|
||||
int8_t snrs[TRACE_MAX_HOPS]; // SNR*4 per hop
|
||||
int8_t final_snr; // SNR of the response arriving back
|
||||
int hopCount; // Number of hops that responded
|
||||
int totalHops; // Total hops in the path
|
||||
uint32_t duration_ms; // Round-trip time
|
||||
bool valid;
|
||||
};
|
||||
|
||||
private:
|
||||
UITask* _task;
|
||||
mesh::RTCClock* _rtc;
|
||||
|
||||
ScreenState _state;
|
||||
|
||||
// Path being built
|
||||
uint8_t _pathBuf[TRACE_MAX_HOPS * 2]; // Hash bytes (max 2 bytes per hop)
|
||||
int _hopCount;
|
||||
int _bytesPerHop; // 1 or 2
|
||||
|
||||
// Menu navigation (STATE_BUILD)
|
||||
int _menuSel;
|
||||
|
||||
// Inline text editor (for Type Path)
|
||||
bool _editing;
|
||||
char _editBuf[TRACE_EDIT_BUF];
|
||||
int _editPos;
|
||||
|
||||
// Repeater picker (STATE_PICK_HOP)
|
||||
static const int MAX_REPEATERS = 200;
|
||||
uint16_t* _repIdx; // Indices into contact table (PSRAM)
|
||||
int _repCount;
|
||||
int _repSel;
|
||||
int _repScroll;
|
||||
|
||||
// Trace state (STATE_RUNNING / STATE_RESULTS)
|
||||
uint32_t _traceTag;
|
||||
uint32_t _traceAuth;
|
||||
unsigned long _traceSentAt;
|
||||
TraceResult _result;
|
||||
|
||||
// Results scroll
|
||||
int _resultScroll;
|
||||
|
||||
bool _wantExit;
|
||||
|
||||
// --- Menu helpers (STATE_BUILD) ---
|
||||
// Menu layout:
|
||||
// 0: Mode selector (1-byte / 2-byte)
|
||||
// 1: Type Path (inline text editor)
|
||||
// 2..hopCount+1: each hop
|
||||
// next: + Add repeater (if < TRACE_MAX_HOPS)
|
||||
// next: Remove last (if hopCount > 0)
|
||||
// next: Run Trace (if hopCount > 0)
|
||||
// last: Exit
|
||||
enum MenuItem {
|
||||
MENU_PATH_SIZE = 0,
|
||||
MENU_TYPE_PATH = 1,
|
||||
MENU_HOP_BASE = 2,
|
||||
MENU_ADD_HOP = 200,
|
||||
MENU_REMOVE_LAST,
|
||||
MENU_RUN_TRACE,
|
||||
MENU_EXIT
|
||||
};
|
||||
|
||||
int buildMenuCount() const {
|
||||
int count = 2; // Mode + Type Path
|
||||
count += _hopCount;
|
||||
if (_hopCount < TRACE_MAX_HOPS) count++; // Add hop
|
||||
if (_hopCount > 0) count++; // Remove last
|
||||
if (_hopCount > 0) count++; // Run Trace
|
||||
count++; // Exit
|
||||
return count;
|
||||
}
|
||||
|
||||
MenuItem menuItemAt(int idx) const {
|
||||
if (idx == 0) return MENU_PATH_SIZE;
|
||||
if (idx == 1) return MENU_TYPE_PATH;
|
||||
int pos = 2;
|
||||
for (int h = 0; h < _hopCount; h++) {
|
||||
if (idx == pos) return (MenuItem)(MENU_HOP_BASE + h);
|
||||
pos++;
|
||||
}
|
||||
if (_hopCount < TRACE_MAX_HOPS) {
|
||||
if (idx == pos) return MENU_ADD_HOP;
|
||||
pos++;
|
||||
}
|
||||
if (_hopCount > 0) {
|
||||
if (idx == pos) return MENU_REMOVE_LAST;
|
||||
pos++;
|
||||
}
|
||||
if (_hopCount > 0) {
|
||||
if (idx == pos) return MENU_RUN_TRACE;
|
||||
pos++;
|
||||
}
|
||||
return MENU_EXIT;
|
||||
}
|
||||
|
||||
// Build repeater list from contacts
|
||||
void buildRepeaterList() {
|
||||
_repCount = 0;
|
||||
uint32_t numContacts = the_mesh.getNumContacts();
|
||||
ContactInfo c;
|
||||
for (uint32_t i = 0; i < numContacts && _repCount < MAX_REPEATERS; i++) {
|
||||
if (the_mesh.getContactByIdx(i, c)) {
|
||||
if (c.type == ADV_TYPE_REPEATER) {
|
||||
_repIdx[_repCount++] = (uint16_t)i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Look up contact name from hash prefix
|
||||
bool findNameForHash(const uint8_t* hash, int hashLen, char* name, size_t nameLen) const {
|
||||
uint32_t numContacts = the_mesh.getNumContacts();
|
||||
ContactInfo c;
|
||||
// First pass: repeaters only
|
||||
for (uint32_t i = 0; i < numContacts; i++) {
|
||||
if (the_mesh.getContactByIdx(i, c) && c.type == ADV_TYPE_REPEATER) {
|
||||
if (memcmp(c.id.pub_key, hash, hashLen) == 0) {
|
||||
strncpy(name, c.name, nameLen);
|
||||
name[nameLen - 1] = '\0';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Second pass: any contact
|
||||
for (uint32_t i = 0; i < numContacts; i++) {
|
||||
if (the_mesh.getContactByIdx(i, c)) {
|
||||
if (memcmp(c.id.pub_key, hash, hashLen) == 0) {
|
||||
strncpy(name, c.name, nameLen);
|
||||
name[nameLen - 1] = '\0';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Parse comma-separated decimal values from edit buffer into path
|
||||
// Returns number of hops parsed, or -1 on error
|
||||
int parseTypedPath() {
|
||||
if (_editBuf[0] == '\0') return 0;
|
||||
|
||||
uint8_t tmpPath[TRACE_MAX_HOPS * 2];
|
||||
int hops = 0;
|
||||
const char* p = _editBuf;
|
||||
|
||||
while (*p && hops < TRACE_MAX_HOPS) {
|
||||
// Skip whitespace/commas
|
||||
while (*p == ',' || *p == ' ') p++;
|
||||
if (*p == '\0') break;
|
||||
|
||||
// Parse hex number (companion app uses hex hash values)
|
||||
char* end;
|
||||
long val = strtol(p, &end, 16);
|
||||
if (end == p) return -1; // No digits found
|
||||
p = end;
|
||||
|
||||
if (_bytesPerHop == 1) {
|
||||
if (val < 0 || val > 255) return -1;
|
||||
tmpPath[hops] = (uint8_t)val;
|
||||
} else {
|
||||
if (val < 0 || val > 65535) return -1;
|
||||
// Big-endian storage: hash display = (pub_key[0] << 8) | pub_key[1]
|
||||
// So val >> 8 is pub_key[0], val & 0xFF is pub_key[1]
|
||||
tmpPath[hops * 2] = (uint8_t)((val >> 8) & 0xFF);
|
||||
tmpPath[hops * 2 + 1] = (uint8_t)(val & 0xFF);
|
||||
}
|
||||
hops++;
|
||||
}
|
||||
|
||||
if (hops > 0) {
|
||||
memcpy(_pathBuf, tmpPath, hops * _bytesPerHop);
|
||||
_hopCount = hops;
|
||||
}
|
||||
return hops;
|
||||
}
|
||||
|
||||
// Build display string from current path (for showing in edit field)
|
||||
void pathToEditBuf() {
|
||||
_editBuf[0] = '\0';
|
||||
_editPos = 0;
|
||||
for (int i = 0; i < _hopCount; i++) {
|
||||
char tmp[8];
|
||||
if (_bytesPerHop == 1) {
|
||||
snprintf(tmp, sizeof(tmp), "%02X", _pathBuf[i]);
|
||||
} else {
|
||||
uint16_t val = ((uint16_t)_pathBuf[i * 2] << 8) | _pathBuf[i * 2 + 1];
|
||||
snprintf(tmp, sizeof(tmp), "%04X", val);
|
||||
}
|
||||
if (i > 0) {
|
||||
if (_editPos < TRACE_EDIT_BUF - 1) _editBuf[_editPos++] = ',';
|
||||
}
|
||||
int tlen = strlen(tmp);
|
||||
if (_editPos + tlen < TRACE_EDIT_BUF - 1) {
|
||||
memcpy(&_editBuf[_editPos], tmp, tlen);
|
||||
_editPos += tlen;
|
||||
}
|
||||
}
|
||||
_editBuf[_editPos] = '\0';
|
||||
}
|
||||
|
||||
// Truncate long names to maxLen chars + "..." for display
|
||||
static void truncateName(char* name, int maxLen = 10) {
|
||||
if ((int)strlen(name) > maxLen) {
|
||||
name[maxLen] = '\0';
|
||||
// Remove trailing space before ellipsis
|
||||
while (maxLen > 0 && name[maxLen - 1] == ' ') {
|
||||
name[--maxLen] = '\0';
|
||||
}
|
||||
strcat(name, "...");
|
||||
}
|
||||
}
|
||||
|
||||
// Draw signal bars (3 bars) based on SNR
|
||||
void drawSignalBars(DisplayDriver& display, int x, int y, int8_t snr4) {
|
||||
float snr = snr4 / 4.0f;
|
||||
// 3 bars: low >= -5, mid >= 3, high >= 8
|
||||
int bars = 0;
|
||||
if (snr >= -5.0f) bars = 1;
|
||||
if (snr >= 3.0f) bars = 2;
|
||||
if (snr >= 8.0f) bars = 3;
|
||||
|
||||
int barW = 3;
|
||||
int gap = 1;
|
||||
int heights[] = { 4, 7, 10 };
|
||||
for (int b = 0; b < 3; b++) {
|
||||
int bx = x + b * (barW + gap);
|
||||
int by = y + 10 - heights[b];
|
||||
if (b < bars) {
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
} else {
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
}
|
||||
display.fillRect(bx, by, barW, heights[b]);
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
TraceScreen(UITask* task, mesh::RTCClock* rtc)
|
||||
: _task(task), _rtc(rtc), _state(STATE_BUILD),
|
||||
_hopCount(0), _bytesPerHop(2),
|
||||
_menuSel(0), _editing(false), _editPos(0),
|
||||
_repCount(0), _repSel(0), _repScroll(0),
|
||||
_traceTag(0), _traceAuth(0), _traceSentAt(0),
|
||||
_resultScroll(0), _wantExit(false) {
|
||||
memset(_pathBuf, 0, sizeof(_pathBuf));
|
||||
memset(_editBuf, 0, sizeof(_editBuf));
|
||||
memset(&_result, 0, sizeof(_result));
|
||||
#if defined(ESP32) && defined(BOARD_HAS_PSRAM)
|
||||
_repIdx = (uint16_t*)ps_calloc(MAX_REPEATERS, sizeof(uint16_t));
|
||||
#else
|
||||
_repIdx = new uint16_t[MAX_REPEATERS]();
|
||||
#endif
|
||||
}
|
||||
|
||||
bool wantsExit() const { return _wantExit; }
|
||||
bool isEditing() const { return _editing; }
|
||||
|
||||
// --- Public helpers for T5S3 long-press → virtual keyboard integration ---
|
||||
|
||||
// True if the highlighted menu row is the Type Path entry (STATE_BUILD only).
|
||||
bool isOnTypePathRow() const {
|
||||
return _state == STATE_BUILD && menuItemAt(_menuSel) == MENU_TYPE_PATH;
|
||||
}
|
||||
|
||||
// Returns the current path formatted as a comma-separated string, suitable
|
||||
// for pre-populating an external text editor (e.g. the T5S3 virtual keyboard).
|
||||
// The returned pointer references an internal buffer and is valid until the
|
||||
// next call to this method or to setTypedPath()/parseTypedPath().
|
||||
const char* getCurrentPathAsText() {
|
||||
pathToEditBuf();
|
||||
return _editBuf;
|
||||
}
|
||||
|
||||
// Apply a path typed externally (via virtual keyboard submission).
|
||||
// Replaces the working path buffer with whatever parses out of `text`
|
||||
// and ensures the inline editor flag is cleared so the menu redraws cleanly.
|
||||
void setTypedPath(const char* text) {
|
||||
if (!text) return;
|
||||
strncpy(_editBuf, text, sizeof(_editBuf) - 1);
|
||||
_editBuf[sizeof(_editBuf) - 1] = '\0';
|
||||
parseTypedPath();
|
||||
_editing = false;
|
||||
}
|
||||
|
||||
void enter(int pathHashMode) {
|
||||
_state = STATE_BUILD;
|
||||
_hopCount = 0;
|
||||
_menuSel = 0;
|
||||
_editing = false;
|
||||
_editPos = 0;
|
||||
memset(_editBuf, 0, sizeof(_editBuf));
|
||||
_repSel = 0;
|
||||
_repScroll = 0;
|
||||
_wantExit = false;
|
||||
_resultScroll = 0;
|
||||
memset(_pathBuf, 0, sizeof(_pathBuf));
|
||||
memset(&_result, 0, sizeof(_result));
|
||||
|
||||
// Default to device path hash mode (clamped to 1 or 2 for trace)
|
||||
_bytesPerHop = (pathHashMode >= 1) ? 2 : 1;
|
||||
}
|
||||
|
||||
// Called by MyMesh::onTraceRecv() via UITask
|
||||
void onTraceResult(uint32_t tag, uint8_t flags,
|
||||
const uint8_t* path_snrs, const uint8_t* path_hashes,
|
||||
uint8_t path_byte_len, int8_t final_snr) {
|
||||
if (_state != STATE_RUNNING) return;
|
||||
if (tag != _traceTag) return; // Not our trace
|
||||
|
||||
uint8_t pathSz = flags & 0x03;
|
||||
int numHops = (pathSz > 0) ? (path_byte_len >> pathSz) : path_byte_len;
|
||||
|
||||
_result.valid = true;
|
||||
_result.totalHops = numHops;
|
||||
_result.final_snr = final_snr;
|
||||
_result.duration_ms = millis() - _traceSentAt;
|
||||
|
||||
// Copy hash data
|
||||
int copyBytes = path_byte_len;
|
||||
if (copyBytes > (int)sizeof(_result.hashes)) copyBytes = sizeof(_result.hashes);
|
||||
memcpy(_result.hashes, path_hashes, copyBytes);
|
||||
|
||||
// Count SNR entries (= number of hops that actually forwarded)
|
||||
int snrCount = numHops;
|
||||
if (snrCount > TRACE_MAX_HOPS) snrCount = TRACE_MAX_HOPS;
|
||||
_result.hopCount = snrCount;
|
||||
for (int i = 0; i < snrCount; i++) {
|
||||
_result.snrs[i] = (int8_t)path_snrs[i];
|
||||
}
|
||||
|
||||
_state = STATE_RESULTS;
|
||||
_resultScroll = 0;
|
||||
Serial.printf("[Trace] Result received: %d hops, %dms\n", numHops, _result.duration_ms);
|
||||
}
|
||||
|
||||
// --- Render ---
|
||||
int render(DisplayDriver& display) override {
|
||||
// Header
|
||||
display.setCursor(0, 0);
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.print("Trace Path");
|
||||
display.drawRect(0, 11, display.width(), 1);
|
||||
|
||||
if (_state == STATE_BUILD) {
|
||||
return renderBuild(display);
|
||||
} else if (_state == STATE_PICK_HOP) {
|
||||
return renderPicker(display);
|
||||
} else if (_state == STATE_RUNNING) {
|
||||
return renderRunning(display);
|
||||
} else {
|
||||
return renderResults(display);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
int renderBuild(DisplayDriver& display) {
|
||||
char tmp[TRACE_EDIT_BUF + 16];
|
||||
int y = 14;
|
||||
int lineH = 11;
|
||||
int menuCount = buildMenuCount();
|
||||
int maxVisible = (display.height() - y - 14) / lineH;
|
||||
if (maxVisible < 1) maxVisible = 1;
|
||||
|
||||
// Scroll window
|
||||
int scrollTop = 0;
|
||||
if (_menuSel >= scrollTop + maxVisible) scrollTop = _menuSel - maxVisible + 1;
|
||||
if (_menuSel < scrollTop) scrollTop = _menuSel;
|
||||
|
||||
for (int vi = 0; vi < maxVisible && (scrollTop + vi) < menuCount; vi++) {
|
||||
int idx = scrollTop + vi;
|
||||
MenuItem item = menuItemAt(idx);
|
||||
char prefix = (idx == _menuSel) ? '>' : ' ';
|
||||
|
||||
display.setCursor(0, y);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
|
||||
switch (item) {
|
||||
case MENU_PATH_SIZE:
|
||||
snprintf(tmp, sizeof(tmp), "%c Mode: %d-byte", prefix, _bytesPerHop);
|
||||
display.print(tmp);
|
||||
if (idx == _menuSel) {
|
||||
const char* hint = "(A/D)";
|
||||
display.setCursor(display.width() - display.getTextWidth(hint) - 4, y);
|
||||
display.print(hint);
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_TYPE_PATH:
|
||||
if (_editing) {
|
||||
// Active text editor with cursor
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
snprintf(tmp, sizeof(tmp), " Path: %s_", _editBuf);
|
||||
display.print(tmp);
|
||||
} else if (_hopCount > 0) {
|
||||
// Show current path as decimal values
|
||||
char pathStr[TRACE_EDIT_BUF];
|
||||
pathStr[0] = '\0';
|
||||
int pos = 0;
|
||||
for (int i = 0; i < _hopCount && pos < (int)sizeof(pathStr) - 8; i++) {
|
||||
if (i > 0) pathStr[pos++] = ',';
|
||||
if (_bytesPerHop == 1) {
|
||||
pos += snprintf(&pathStr[pos], sizeof(pathStr) - pos, "%02X", _pathBuf[i]);
|
||||
} else {
|
||||
uint16_t val = ((uint16_t)_pathBuf[i * 2] << 8) | _pathBuf[i * 2 + 1];
|
||||
pos += snprintf(&pathStr[pos], sizeof(pathStr) - pos, "%04X", val);
|
||||
}
|
||||
}
|
||||
snprintf(tmp, sizeof(tmp), "%c Path: %s", prefix, pathStr);
|
||||
display.print(tmp);
|
||||
} else {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
snprintf(tmp, sizeof(tmp), "%c Type Path: [Long press]", prefix);
|
||||
#else
|
||||
snprintf(tmp, sizeof(tmp), "%c Type Path: [Press Enter]", prefix);
|
||||
#endif
|
||||
display.print(tmp);
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_ADD_HOP:
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
snprintf(tmp, sizeof(tmp), "%c + Add repeater...", prefix);
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
case MENU_REMOVE_LAST:
|
||||
snprintf(tmp, sizeof(tmp), "%c - Remove last", prefix);
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
case MENU_RUN_TRACE:
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
snprintf(tmp, sizeof(tmp), "%c Run Trace", prefix);
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
case MENU_EXIT:
|
||||
snprintf(tmp, sizeof(tmp), "%c Exit", prefix);
|
||||
display.print(tmp);
|
||||
break;
|
||||
|
||||
default:
|
||||
// Hop line
|
||||
if (item >= MENU_HOP_BASE && item < MENU_HOP_BASE + TRACE_MAX_HOPS) {
|
||||
int hopIdx = item - MENU_HOP_BASE;
|
||||
int offset = hopIdx * _bytesPerHop;
|
||||
char hopName[24];
|
||||
uint16_t hashVal;
|
||||
if (_bytesPerHop == 1) {
|
||||
hashVal = _pathBuf[offset];
|
||||
} else {
|
||||
hashVal = ((uint16_t)_pathBuf[offset] << 8) | _pathBuf[offset + 1];
|
||||
}
|
||||
if (findNameForHash(&_pathBuf[offset], _bytesPerHop, hopName, sizeof(hopName))) {
|
||||
truncateName(hopName);
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
snprintf(tmp, sizeof(tmp), "%c%d: %s (%X)", prefix, hopIdx + 1,
|
||||
hopName, hashVal);
|
||||
} else {
|
||||
snprintf(tmp, sizeof(tmp), "%c%d: (%X)", prefix, hopIdx + 1, hashVal);
|
||||
}
|
||||
display.print(tmp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
y += lineH;
|
||||
}
|
||||
|
||||
// Footer
|
||||
int footerY = display.height() - 12;
|
||||
display.setTextSize(1);
|
||||
display.drawRect(0, footerY - 2, display.width(), 1);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.setCursor(0, footerY);
|
||||
if (_editing) {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.print("Boot:Cancel Tap:Apply");
|
||||
#else
|
||||
display.print("Q:Cancel Enter:Apply");
|
||||
#endif
|
||||
} else {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.print("Boot:Exit Tap:Sel");
|
||||
#else
|
||||
display.print("Q:Exit W/S:Nav Ent:Sel");
|
||||
#endif
|
||||
}
|
||||
|
||||
return 5000;
|
||||
}
|
||||
|
||||
int renderPicker(DisplayDriver& display) {
|
||||
char tmp[48];
|
||||
int y = 14;
|
||||
int lineH = 11;
|
||||
int maxVisible = (display.height() - y - 14) / lineH;
|
||||
if (maxVisible < 1) maxVisible = 1;
|
||||
|
||||
if (_repCount == 0) {
|
||||
display.setCursor(0, y);
|
||||
display.setColor(DisplayDriver::RED);
|
||||
display.print("No repeaters in contacts");
|
||||
y += lineH;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.print("Press Q to go back");
|
||||
} else {
|
||||
// Clamp scroll
|
||||
if (_repSel >= _repCount) _repSel = _repCount - 1;
|
||||
if (_repSel < 0) _repSel = 0;
|
||||
if (_repSel < _repScroll) _repScroll = _repSel;
|
||||
if (_repSel >= _repScroll + maxVisible) _repScroll = _repSel - maxVisible + 1;
|
||||
|
||||
for (int vi = 0; vi < maxVisible && (_repScroll + vi) < _repCount; vi++) {
|
||||
int idx = _repScroll + vi;
|
||||
uint16_t contactIdx = _repIdx[idx];
|
||||
ContactInfo c;
|
||||
if (!the_mesh.getContactByIdx(contactIdx, c)) continue;
|
||||
|
||||
char prefix = (idx == _repSel) ? '>' : ' ';
|
||||
display.setCursor(0, y);
|
||||
|
||||
// Show name + decimal hash value
|
||||
char filteredName[24];
|
||||
display.translateUTF8ToBlocks(filteredName, c.name, sizeof(filteredName));
|
||||
truncateName(filteredName, 14); // Picker has more room
|
||||
uint16_t hashVal;
|
||||
if (_bytesPerHop == 1) {
|
||||
hashVal = c.id.pub_key[0];
|
||||
} else {
|
||||
hashVal = ((uint16_t)c.id.pub_key[0] << 8) | c.id.pub_key[1];
|
||||
}
|
||||
snprintf(tmp, sizeof(tmp), "%c %s (%X)", prefix, filteredName, hashVal);
|
||||
display.setColor((idx == _repSel) ? DisplayDriver::GREEN : DisplayDriver::LIGHT);
|
||||
display.print(tmp);
|
||||
y += lineH;
|
||||
}
|
||||
}
|
||||
|
||||
// Footer
|
||||
int footerY = display.height() - 12;
|
||||
display.setTextSize(1);
|
||||
display.drawRect(0, footerY - 2, display.width(), 1);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.setCursor(0, footerY);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.print("Boot:Back Tap:Add");
|
||||
#else
|
||||
display.print("Q:Back W/S:Scroll Ent:Add");
|
||||
#endif
|
||||
|
||||
return 5000;
|
||||
}
|
||||
|
||||
int renderRunning(DisplayDriver& display) {
|
||||
int y = 14;
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
display.setCursor(0, y);
|
||||
display.print("Tracing...");
|
||||
y += 14;
|
||||
|
||||
// Show path summary
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
char tmp[48];
|
||||
snprintf(tmp, sizeof(tmp), "%d hops, %d-byte mode", _hopCount, _bytesPerHop);
|
||||
display.setCursor(0, y);
|
||||
display.print(tmp);
|
||||
y += 14;
|
||||
|
||||
// Elapsed time
|
||||
unsigned long elapsed = millis() - _traceSentAt;
|
||||
snprintf(tmp, sizeof(tmp), "Elapsed: %lu ms", elapsed);
|
||||
display.setCursor(0, y);
|
||||
display.print(tmp);
|
||||
y += 14;
|
||||
|
||||
// Timeout bar
|
||||
int barW = display.width() - 20;
|
||||
int barH = 4;
|
||||
int barX = 10;
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
display.drawRect(barX, y, barW, barH);
|
||||
int fill = (int)((unsigned long)barW * elapsed / TRACE_TIMEOUT_MS);
|
||||
if (fill > barW) fill = barW;
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.fillRect(barX, y, fill, barH);
|
||||
|
||||
// Check timeout
|
||||
if (elapsed >= TRACE_TIMEOUT_MS) {
|
||||
_state = STATE_RESULTS;
|
||||
_result.valid = false;
|
||||
_result.duration_ms = TRACE_TIMEOUT_MS;
|
||||
Serial.println("[Trace] Timeout");
|
||||
}
|
||||
|
||||
// Footer
|
||||
int footerY = display.height() - 12;
|
||||
display.setTextSize(1);
|
||||
display.drawRect(0, footerY - 2, display.width(), 1);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.setCursor(0, footerY);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.print("Boot:Cancel");
|
||||
#else
|
||||
display.print("Q:Cancel");
|
||||
#endif
|
||||
|
||||
return 500; // Fast refresh for elapsed timer
|
||||
}
|
||||
|
||||
int renderResults(DisplayDriver& display) {
|
||||
char tmp[48];
|
||||
int y = 14;
|
||||
int lineH = 12;
|
||||
|
||||
if (!_result.valid) {
|
||||
display.setColor(DisplayDriver::RED);
|
||||
display.setCursor(0, y);
|
||||
display.print("Trace timed out");
|
||||
y += lineH;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
snprintf(tmp, sizeof(tmp), "No response after %ds", TRACE_TIMEOUT_MS / 1000);
|
||||
display.setCursor(0, y);
|
||||
display.print(tmp);
|
||||
} else {
|
||||
// Duration header
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
snprintf(tmp, sizeof(tmp), "Complete: %dms", (int)_result.duration_ms);
|
||||
display.setCursor(0, y);
|
||||
display.print(tmp);
|
||||
y += lineH + 2;
|
||||
|
||||
int maxVisible = (display.height() - y - 14) / lineH;
|
||||
if (maxVisible < 1) maxVisible = 1;
|
||||
|
||||
// Clamp scroll
|
||||
int totalItems = _result.hopCount + 1; // hops + final SNR line
|
||||
if (_resultScroll > totalItems - maxVisible) _resultScroll = totalItems - maxVisible;
|
||||
if (_resultScroll < 0) _resultScroll = 0;
|
||||
|
||||
for (int vi = 0; vi < maxVisible && (_resultScroll + vi) < totalItems; vi++) {
|
||||
int idx = _resultScroll + vi;
|
||||
display.setCursor(0, y);
|
||||
|
||||
if (idx < _result.hopCount) {
|
||||
// Hop entry
|
||||
int offset = idx * _bytesPerHop;
|
||||
char hopName[20];
|
||||
bool resolved = findNameForHash(&_result.hashes[offset], _bytesPerHop,
|
||||
hopName, sizeof(hopName));
|
||||
if (resolved) truncateName(hopName);
|
||||
|
||||
float snr = _result.snrs[idx] / 4.0f;
|
||||
|
||||
display.setColor(resolved ? DisplayDriver::GREEN : DisplayDriver::LIGHT);
|
||||
if (resolved) {
|
||||
snprintf(tmp, sizeof(tmp), "%d: %s", idx + 1, hopName);
|
||||
} else {
|
||||
uint16_t hashVal;
|
||||
if (_bytesPerHop == 1) {
|
||||
hashVal = _result.hashes[offset];
|
||||
} else {
|
||||
hashVal = ((uint16_t)_result.hashes[offset] << 8) | _result.hashes[offset + 1];
|
||||
}
|
||||
snprintf(tmp, sizeof(tmp), "%d: (%X)", idx + 1, hashVal);
|
||||
}
|
||||
display.print(tmp);
|
||||
|
||||
// SNR value on right
|
||||
snprintf(tmp, sizeof(tmp), "%.1fdB", snr);
|
||||
int snrW = display.getTextWidth(tmp);
|
||||
int barsW = 14;
|
||||
display.setCursor(display.width() - snrW - barsW - 4, y);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.print(tmp);
|
||||
|
||||
// Signal bars
|
||||
drawSignalBars(display, display.width() - barsW - 1, y, _result.snrs[idx]);
|
||||
|
||||
} else {
|
||||
// Final SNR (response arriving back at this node)
|
||||
float snr = _result.final_snr / 4.0f;
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
snprintf(tmp, sizeof(tmp), "Return SNR: %.1fdB", snr);
|
||||
display.print(tmp);
|
||||
drawSignalBars(display, display.width() - 15, y, _result.final_snr);
|
||||
}
|
||||
y += lineH;
|
||||
}
|
||||
}
|
||||
|
||||
// Footer
|
||||
int footerY = display.height() - 12;
|
||||
display.setTextSize(1);
|
||||
display.drawRect(0, footerY - 2, display.width(), 1);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.setCursor(0, footerY);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.print("Boot:Back Tap:New Trace");
|
||||
#else
|
||||
display.print("Q:Back Ent:New Trace");
|
||||
#endif
|
||||
|
||||
return 5000;
|
||||
}
|
||||
|
||||
public:
|
||||
// --- Input handling ---
|
||||
bool handleInput(char c) override {
|
||||
// Text editing mode consumes all keys
|
||||
if (_editing) {
|
||||
return handleEditInput(c);
|
||||
}
|
||||
|
||||
switch (_state) {
|
||||
case STATE_BUILD: return handleBuildInput(c);
|
||||
case STATE_PICK_HOP: return handlePickerInput(c);
|
||||
case STATE_RUNNING: return handleRunningInput(c);
|
||||
case STATE_RESULTS: return handleResultsInput(c);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
// --- Text editor for typed path ---
|
||||
bool handleEditInput(char c) {
|
||||
// Enter: apply typed path
|
||||
if (c == '\r' || c == 13) {
|
||||
int parsed = parseTypedPath();
|
||||
if (parsed < 0) {
|
||||
Serial.println("[Trace] Failed to parse typed path");
|
||||
// Stay in edit mode -- user can fix
|
||||
} else {
|
||||
Serial.printf("[Trace] Parsed %d hops from typed path\n", parsed);
|
||||
_editing = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Q or Escape: cancel edit
|
||||
if (c == 'q' || c == 'Q' || c == 27) {
|
||||
_editing = false;
|
||||
return true;
|
||||
}
|
||||
// Backspace
|
||||
if (c == '\b') {
|
||||
if (_editPos > 0) {
|
||||
_editPos--;
|
||||
_editBuf[_editPos] = '\0';
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Accept hex digits, commas, spaces
|
||||
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')
|
||||
|| c == ',' || c == ' ') {
|
||||
if (_editPos < TRACE_EDIT_BUF - 1) {
|
||||
_editBuf[_editPos++] = c;
|
||||
_editBuf[_editPos] = '\0';
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true; // Consume all keys in edit mode
|
||||
}
|
||||
|
||||
bool handleBuildInput(char c) {
|
||||
int menuCount = buildMenuCount();
|
||||
|
||||
// W - up
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_menuSel > 0) _menuSel--;
|
||||
return true;
|
||||
}
|
||||
// S - down
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
if (_menuSel < menuCount - 1) _menuSel++;
|
||||
return true;
|
||||
}
|
||||
// A/D - toggle mode on path size row
|
||||
if ((c == 'a' || c == 'A' || c == 'd' || c == 'D') && menuItemAt(_menuSel) == MENU_PATH_SIZE) {
|
||||
_bytesPerHop = (_bytesPerHop == 1) ? 2 : 1;
|
||||
// Changing mode clears path (byte layout is different)
|
||||
_hopCount = 0;
|
||||
memset(_pathBuf, 0, sizeof(_pathBuf));
|
||||
return true;
|
||||
}
|
||||
// Q - exit
|
||||
if (c == 'q' || c == 'Q' || c == '\b') {
|
||||
_wantExit = true;
|
||||
return true;
|
||||
}
|
||||
// Enter - select
|
||||
if (c == '\r' || c == 13) {
|
||||
MenuItem item = menuItemAt(_menuSel);
|
||||
switch (item) {
|
||||
case MENU_TYPE_PATH:
|
||||
// Enter edit mode -- pre-fill with current path if any
|
||||
pathToEditBuf();
|
||||
_editing = true;
|
||||
return true;
|
||||
|
||||
case MENU_ADD_HOP:
|
||||
buildRepeaterList();
|
||||
_repSel = 0;
|
||||
_repScroll = 0;
|
||||
_state = STATE_PICK_HOP;
|
||||
return true;
|
||||
|
||||
case MENU_REMOVE_LAST:
|
||||
if (_hopCount > 0) {
|
||||
_hopCount--;
|
||||
if (_menuSel >= buildMenuCount()) _menuSel = buildMenuCount() - 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
case MENU_RUN_TRACE:
|
||||
return sendTrace();
|
||||
|
||||
case MENU_EXIT:
|
||||
_wantExit = true;
|
||||
return true;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool handlePickerInput(char c) {
|
||||
// W - up
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_repSel > 0) _repSel--;
|
||||
return true;
|
||||
}
|
||||
// S - down
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
if (_repSel < _repCount - 1) _repSel++;
|
||||
return true;
|
||||
}
|
||||
// Q - back to build
|
||||
if (c == 'q' || c == 'Q' || c == '\b') {
|
||||
_state = STATE_BUILD;
|
||||
return true;
|
||||
}
|
||||
// Enter - add selected repeater
|
||||
if (c == '\r' || c == 13) {
|
||||
if (_repCount > 0 && _repSel >= 0 && _repSel < _repCount) {
|
||||
ContactInfo contact;
|
||||
if (the_mesh.getContactByIdx(_repIdx[_repSel], contact)) {
|
||||
int offset = _hopCount * _bytesPerHop;
|
||||
memcpy(&_pathBuf[offset], contact.id.pub_key, _bytesPerHop);
|
||||
_hopCount++;
|
||||
uint16_t hashVal = ((uint16_t)contact.id.pub_key[0] << 8)
|
||||
| contact.id.pub_key[1];
|
||||
Serial.printf("[Trace] Added hop %d: %s (%X)\n",
|
||||
_hopCount, contact.name, hashVal);
|
||||
}
|
||||
_state = STATE_BUILD;
|
||||
_menuSel = _hopCount + 1; // Point to row after last hop
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool handleRunningInput(char c) {
|
||||
// Q - cancel
|
||||
if (c == 'q' || c == 'Q' || c == '\b') {
|
||||
_state = STATE_BUILD;
|
||||
return true;
|
||||
}
|
||||
return true; // Consume all keys while running
|
||||
}
|
||||
|
||||
bool handleResultsInput(char c) {
|
||||
// W - scroll up
|
||||
if (c == 'w' || c == 'W' || c == 0xF2) {
|
||||
if (_resultScroll > 0) _resultScroll--;
|
||||
return true;
|
||||
}
|
||||
// S - scroll down
|
||||
if (c == 's' || c == 'S' || c == 0xF1) {
|
||||
_resultScroll++;
|
||||
return true;
|
||||
}
|
||||
// Q - back to build screen (keep path)
|
||||
if (c == 'q' || c == 'Q' || c == '\b') {
|
||||
_state = STATE_BUILD;
|
||||
_menuSel = 0;
|
||||
return true;
|
||||
}
|
||||
// Enter - new trace (re-run with same path)
|
||||
if (c == '\r' || c == 13) {
|
||||
return sendTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// --- Send trace ---
|
||||
bool sendTrace() {
|
||||
if (_hopCount <= 0) return true;
|
||||
|
||||
// Generate random tag and auth code
|
||||
the_mesh.getRNG()->random((uint8_t*)&_traceTag, 4);
|
||||
the_mesh.getRNG()->random((uint8_t*)&_traceAuth, 4);
|
||||
|
||||
// flags: lower 2 bits = path_sz
|
||||
// path_sz 0 = 1-byte hashes, path_sz 1 = 2-byte hashes
|
||||
uint8_t pathSz = (_bytesPerHop == 2) ? 1 : 0;
|
||||
uint8_t flags = pathSz;
|
||||
|
||||
mesh::Packet* pkt = the_mesh.createTrace(_traceTag, _traceAuth, flags);
|
||||
if (!pkt) {
|
||||
Serial.println("[Trace] Failed to create trace packet (pool empty)");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Path bytes to send
|
||||
uint8_t pathByteLen = _hopCount * _bytesPerHop;
|
||||
|
||||
// sendDirect for TRACE appends path to payload and sets path_len=0
|
||||
the_mesh.sendDirect(pkt, _pathBuf, pathByteLen);
|
||||
|
||||
_traceSentAt = millis();
|
||||
_state = STATE_RUNNING;
|
||||
memset(&_result, 0, sizeof(_result));
|
||||
|
||||
Serial.printf("[Trace] Sent: tag=0x%08X, %d hops, %d-byte, %d path bytes\n",
|
||||
_traceTag, _hopCount, _bytesPerHop, pathByteLen);
|
||||
Serial.printf("[Trace] Path hex:");
|
||||
for (int i = 0; i < pathByteLen; i++) {
|
||||
Serial.printf(" %02X", _pathBuf[i]);
|
||||
}
|
||||
Serial.println();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -66,7 +66,6 @@ class UITask : public AbstractUITask {
|
||||
int _msgcount;
|
||||
unsigned long ui_started_at, next_batt_chck;
|
||||
uint8_t _low_batt_count = 0; // Consecutive low-voltage readings for debounce
|
||||
bool _full_poweroff = false; // True = BQ25896 BATFET disconnect (USB-C wake only)
|
||||
int next_backlight_btn_check = 0;
|
||||
#ifdef PIN_STATUS_LED
|
||||
int led_state = 0;
|
||||
@@ -82,7 +81,6 @@ class UITask : public AbstractUITask {
|
||||
UIScreen* home;
|
||||
UIScreen* msg_preview;
|
||||
UIScreen* channel_screen; // Channel message history screen
|
||||
UIScreen* channel_picker_screen; // Channel picker (bubble/list view)
|
||||
UIScreen* contacts_screen; // Contacts list screen
|
||||
UIScreen* text_reader; // *** NEW: Text reader screen ***
|
||||
UIScreen* notes_screen; // Notes editor screen
|
||||
@@ -99,7 +97,6 @@ class UITask : public AbstractUITask {
|
||||
UIScreen* path_editor; // Custom path editor screen (lazy-init)
|
||||
UIScreen* discovery_screen; // Node discovery scan screen
|
||||
UIScreen* last_heard_screen; // Last heard passive advert list
|
||||
UIScreen* trace_screen; // Trace path screen (standalone trace tool)
|
||||
#ifdef MECK_WEB_READER
|
||||
UIScreen* web_reader; // Web reader screen (lazy-init, WiFi required)
|
||||
#endif
|
||||
@@ -182,8 +179,7 @@ public:
|
||||
void begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* node_prefs);
|
||||
|
||||
void gotoHomeScreen();
|
||||
void gotoChannelScreen(bool resetDmView = true); // Navigate to channel message screen
|
||||
void gotoChannelPickerScreen(); // Navigate to channel picker (bubble/list)
|
||||
void gotoChannelScreen(); // Navigate to channel message screen
|
||||
void gotoDMTab(); // Navigate directly to DM tab on channel screen
|
||||
void gotoDMConversation(const char* contactName, int contactIdx = -1, uint8_t perms = 0);
|
||||
void gotoContactsScreen(); // Navigate to contacts list
|
||||
@@ -201,7 +197,6 @@ public:
|
||||
void gotoPathEditor(int contactIdx); // Navigate to custom path editor
|
||||
void gotoDiscoveryScreen(); // Navigate to node discovery scan
|
||||
void gotoLastHeardScreen(); // Navigate to last heard passive list
|
||||
void gotoTraceScreen(); // Navigate to trace path screen
|
||||
#if HAS_GPS
|
||||
void gotoMapScreen(); // Navigate to map tile screen
|
||||
#endif
|
||||
@@ -218,8 +213,6 @@ public:
|
||||
void showBootHint(bool immediate = false); // Show navigation hint overlay on first boot
|
||||
void dismissBootHint(); // Dismiss hint and save preference
|
||||
bool isHintActive() const { return _hintActive; }
|
||||
// BQ25896 BATFET disconnect -- true power off, USB-C required to wake
|
||||
void setFullPowerOff(bool v) { _full_poweroff = v; }
|
||||
// Wake display and extend auto-off timer. Call this when handling keys
|
||||
// outside of injectKey() to prevent display auto-off during direct input.
|
||||
void keepAlive() {
|
||||
@@ -239,7 +232,6 @@ public:
|
||||
bool hasDisplay() const { return _display != NULL; }
|
||||
bool isButtonPressed() const;
|
||||
bool isOnChannelScreen() const { return curr == channel_screen; }
|
||||
bool isOnChannelPickerScreen() const { return curr == channel_picker_screen; }
|
||||
bool isOnContactsScreen() const { return curr == contacts_screen; }
|
||||
bool isOnTextReader() const { return curr == text_reader; } // *** NEW ***
|
||||
bool isOnHomeScreen() const { return curr == home; }
|
||||
@@ -258,7 +250,6 @@ public:
|
||||
bool isOnPathEditor() const { return curr == path_editor; }
|
||||
bool isOnDiscoveryScreen() const { return curr == discovery_screen; }
|
||||
bool isOnLastHeardScreen() const { return curr == last_heard_screen; }
|
||||
bool isOnTraceScreen() const { return curr == trace_screen; }
|
||||
bool isOnMapScreen() const { return curr == map_screen; }
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro) || defined(LilyGo_TDeck_Pro)
|
||||
bool isLocked() const { return _locked; }
|
||||
@@ -297,7 +288,6 @@ public:
|
||||
bool isEditingHomeScreen() const;
|
||||
// Check if home screen is showing the Recent Adverts page
|
||||
bool isHomeOnRecentPage() const;
|
||||
bool isHomeOnShutdownPage() const;
|
||||
|
||||
// Inject a key press from external source (e.g., keyboard)
|
||||
void injectKey(char c);
|
||||
@@ -308,17 +298,11 @@ public:
|
||||
|
||||
// Mark channel as read when BLE companion app syncs messages
|
||||
void markChannelReadFromBLE(uint8_t channel_idx) override;
|
||||
// Mark all channels + DMs as read (companion app connected)
|
||||
void markAllChannelsRead() override;
|
||||
|
||||
// Repeater admin callbacks
|
||||
void onAdminLoginResult(bool success, uint8_t permissions, uint32_t server_time) override;
|
||||
void onAdminCliResponse(const char* from_name, const char* text) override;
|
||||
void onAdminTelemetryResult(const uint8_t* data, uint8_t len) override;
|
||||
|
||||
// Trace path callback (from MyMesh::onTraceRecv)
|
||||
void onTraceResult(uint32_t tag, uint8_t flags, const uint8_t* path_snrs,
|
||||
const uint8_t* path_hashes, uint8_t path_len, int8_t final_snr) override;
|
||||
|
||||
// Get current screen for checking state
|
||||
UIScreen* getCurrentScreen() const { return curr; }
|
||||
@@ -327,12 +311,10 @@ public:
|
||||
UIScreen* getNotesScreen() const { return notes_screen; }
|
||||
UIScreen* getContactsScreen() const { return contacts_screen; }
|
||||
UIScreen* getChannelScreen() const { return channel_screen; }
|
||||
UIScreen* getChannelPickerScreen() const { return channel_picker_screen; }
|
||||
UIScreen* getSettingsScreen() const { return settings_screen; }
|
||||
NodePrefs* getNodePrefs() const { return _node_prefs; }
|
||||
UIScreen* getAudiobookScreen() const { return audiobook_screen; }
|
||||
void setAudiobookScreen(UIScreen* s) { audiobook_screen = s; }
|
||||
void setHomeScreen(UIScreen* s) { if (home) delete home; home = s; }
|
||||
#ifdef MECK_AUDIO_VARIANT
|
||||
UIScreen* getAlarmScreen() const { return alarm_screen; }
|
||||
void setAlarmScreen(UIScreen* s) { alarm_screen = s; }
|
||||
@@ -343,7 +325,6 @@ public:
|
||||
UIScreen* getPathEditorScreen() const { return path_editor; }
|
||||
UIScreen* getDiscoveryScreen() const { return discovery_screen; }
|
||||
UIScreen* getLastHeardScreen() const { return last_heard_screen; }
|
||||
UIScreen* getTraceScreen() const { return trace_screen; }
|
||||
UIScreen* getMapScreen() const { return map_screen; }
|
||||
#ifdef MECK_WEB_READER
|
||||
UIScreen* getWebReaderScreen() const { return web_reader; }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
// Emoji Picker with scrolling grid and scroll bar
|
||||
// 5 columns, 4 visible rows, scrollable through all 76 emoji
|
||||
// 5 columns, 4 visible rows, scrollable through all 65 emoji
|
||||
// WASD navigation, Enter to select, $/Q/Backspace to cancel
|
||||
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
@@ -12,86 +12,71 @@
|
||||
#define EMOJI_PICKER_TOTAL_ROWS ((EMOJI_COUNT + EMOJI_PICKER_COLS - 1) / EMOJI_PICKER_COLS)
|
||||
|
||||
static const char* EMOJI_LABELS[EMOJI_COUNT] = {
|
||||
// Faces/emotion
|
||||
"Lol", // 0 joy
|
||||
"Sad", // 1 frown
|
||||
"Cry", // 2 loudly_crying
|
||||
"Grim", // 3 grimace
|
||||
"Zany", // 4 zany_face
|
||||
"Cowb", // 5 cowboy
|
||||
// Thumbsup + heart
|
||||
"Like", // 6 thumbsup
|
||||
"Love", // 7 heart
|
||||
// Everything else
|
||||
"WiFi", // 8 wireless
|
||||
"Inf", // 9 infinity
|
||||
"Rex", // 10 trex
|
||||
"Skul", // 11 skull
|
||||
"Cros", // 12 cross
|
||||
"Bolt", // 13 lightning
|
||||
"Hat", // 14 tophat
|
||||
"Moto", // 15 motorcycle
|
||||
"Leaf", // 16 seedling
|
||||
"AU", // 17 flag_au
|
||||
"Umbr", // 18 umbrella
|
||||
"Eye", // 19 nazar
|
||||
"Glob", // 20 globe
|
||||
"Rad", // 21 radioactive
|
||||
"Cow", // 22 cow
|
||||
"ET", // 23 alien
|
||||
"Inv", // 24 invader
|
||||
"Dagr", // 25 dagger
|
||||
"Mtn", // 26 mountain
|
||||
"End", // 27 end_arrow
|
||||
"Ring", // 28 hollow_circle
|
||||
"Drag", // 29 dragon
|
||||
"Web", // 30 globe_meridians
|
||||
"Eggp", // 31 eggplant
|
||||
"Shld", // 32 shield
|
||||
"Gogl", // 33 goggles
|
||||
"Lzrd", // 34 lizard
|
||||
"Roo", // 35 kangaroo
|
||||
"Fthr", // 36 feather
|
||||
"Sun", // 37 bright
|
||||
"Wave", // 38 part_alt
|
||||
"Boat", // 39 motorboat
|
||||
"Domi", // 40 domino
|
||||
"Dish", // 41 satellite
|
||||
"Pass", // 42 customs
|
||||
"Whl", // 43 wheel
|
||||
"Koal", // 44 koala
|
||||
"Knob", // 45 control_knobs
|
||||
"Pch", // 46 peach
|
||||
"Race", // 47 racing_car
|
||||
"Mous", // 48 mouse
|
||||
"Shrm", // 49 mushroom
|
||||
"Bio", // 50 biohazard
|
||||
"Pnda", // 51 panda
|
||||
"Bang", // 52 anger
|
||||
"DrgF", // 53 dragon_face
|
||||
"Pagr", // 54 pager
|
||||
"Bee", // 55 bee
|
||||
"Bulb", // 56 bulb
|
||||
"Cat", // 57 cat
|
||||
"Flur", // 58 fleur
|
||||
"Moon", // 59 moon
|
||||
"Cafe", // 60 coffee
|
||||
"Toth", // 61 tooth
|
||||
"Prtz", // 62 pretzel
|
||||
"Abac", // 63 abacus
|
||||
"Moai", // 64 moai
|
||||
"Hiii", // 65 tipping
|
||||
"Hedg", // 66 hedgehog
|
||||
"Diam", // 67 diamond_suit
|
||||
"Spde", // 68 spade_suit
|
||||
"Piza", // 69 pizza
|
||||
"Luck", // 70 four_leaf_clover
|
||||
"Cld", // 71 cloud
|
||||
"Rckt", // 72 rocket
|
||||
"HFC", // 73 passport_control
|
||||
"Star", // 74 eight_spoked_asterisk
|
||||
"Sig", // 75 signal_strength
|
||||
"Beer", // 76 beer
|
||||
"Like", // 1 thumbsup
|
||||
"Sad", // 2 frown
|
||||
"WiFi", // 3 wireless
|
||||
"Inf", // 4 infinity
|
||||
"Rex", // 5 trex
|
||||
"Skul", // 6 skull
|
||||
"Cros", // 7 cross
|
||||
"Bolt", // 8 lightning
|
||||
"Hat", // 9 tophat
|
||||
"Moto", // 10 motorcycle
|
||||
"Leaf", // 11 seedling
|
||||
"AU", // 12 flag_au
|
||||
"Umbr", // 13 umbrella
|
||||
"Eye", // 14 nazar
|
||||
"Glob", // 15 globe
|
||||
"Rad", // 16 radioactive
|
||||
"Cow", // 17 cow
|
||||
"ET", // 18 alien
|
||||
"Inv", // 19 invader
|
||||
"Dagr", // 20 dagger
|
||||
"Grim", // 21 grimace
|
||||
"Mtn", // 22 mountain
|
||||
"End", // 23 end_arrow
|
||||
"Ring", // 24 hollow_circle
|
||||
"Drag", // 25 dragon
|
||||
"Web", // 26 globe_meridians
|
||||
"Eggp", // 27 eggplant
|
||||
"Shld", // 28 shield
|
||||
"Gogl", // 29 goggles
|
||||
"Lzrd", // 30 lizard
|
||||
"Zany", // 31 zany_face
|
||||
"Roo", // 32 kangaroo
|
||||
"Fthr", // 33 feather
|
||||
"Sun", // 34 bright
|
||||
"Wave", // 35 part_alt
|
||||
"Boat", // 36 motorboat
|
||||
"Domi", // 37 domino
|
||||
"Dish", // 38 satellite
|
||||
"Pass", // 39 customs
|
||||
"Cowb", // 40 cowboy
|
||||
"Whl", // 41 wheel
|
||||
"Koal", // 42 koala
|
||||
"Knob", // 43 control_knobs
|
||||
"Pch", // 44 peach
|
||||
"Race", // 45 racing_car
|
||||
"Mous", // 46 mouse
|
||||
"Shrm", // 47 mushroom
|
||||
"Bio", // 48 biohazard
|
||||
"Pnda", // 49 panda
|
||||
"Bang", // 50 anger
|
||||
"DrgF", // 51 dragon_face
|
||||
"Pagr", // 52 pager
|
||||
"Bee", // 53 bee
|
||||
"Bulb", // 54 bulb
|
||||
"Cat", // 55 cat
|
||||
"Flur", // 56 fleur
|
||||
"Moon", // 57 moon
|
||||
"Cafe", // 58 coffee
|
||||
"Toth", // 59 tooth
|
||||
"Prtz", // 60 pretzel
|
||||
"Abac", // 61 abacus
|
||||
"Moai", // 62 moai
|
||||
"Hiii", // 63 tipping
|
||||
"Hedg", // 64 hedgehog
|
||||
};
|
||||
|
||||
struct EmojiPicker {
|
||||
@@ -120,23 +105,13 @@ struct EmojiPicker {
|
||||
|
||||
switch (key) {
|
||||
case 'w': case 'W': case 0xF2:
|
||||
if (row > 0) {
|
||||
cursor -= EMOJI_PICKER_COLS;
|
||||
} else {
|
||||
// Wrap to last row, same column
|
||||
int target = (EMOJI_PICKER_TOTAL_ROWS - 1) * EMOJI_PICKER_COLS + col;
|
||||
cursor = (target >= EMOJI_COUNT) ? EMOJI_COUNT - 1 : target;
|
||||
}
|
||||
if (row > 0) cursor -= EMOJI_PICKER_COLS;
|
||||
break;
|
||||
case 's': case 'S': case 0xF1:
|
||||
if (cursor + EMOJI_PICKER_COLS < EMOJI_COUNT) {
|
||||
if (cursor + EMOJI_PICKER_COLS < EMOJI_COUNT)
|
||||
cursor += EMOJI_PICKER_COLS;
|
||||
} else if (row < EMOJI_PICKER_TOTAL_ROWS - 1) {
|
||||
else if (row < EMOJI_PICKER_TOTAL_ROWS - 1)
|
||||
cursor = EMOJI_COUNT - 1;
|
||||
} else {
|
||||
// Wrap to first row, same column
|
||||
cursor = col;
|
||||
}
|
||||
break;
|
||||
case 'a': case 'A':
|
||||
if (cursor > 0) cursor--;
|
||||
|
||||
@@ -1,288 +0,0 @@
|
||||
#ifndef MONTSERRAT12PT7B_H
|
||||
#define MONTSERRAT12PT7B_H
|
||||
const uint8_t Montserrat_Regular12pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x8C, 0x63, 0x18, 0xC6, 0x20, 0x04,
|
||||
0x10, 0x18, 0x20, 0x30, 0x40, 0x61, 0x80, 0x83, 0x1F, 0xFF, 0xC2, 0x08,
|
||||
0x04, 0x10, 0x08, 0x20, 0x30, 0x40, 0x60, 0x87, 0xFF, 0xE1, 0x06, 0x02,
|
||||
0x0C, 0x04, 0x10, 0x08, 0x20, 0x10, 0x40, 0x02, 0x00, 0x10, 0x00, 0x80,
|
||||
0x1F, 0x83, 0xFF, 0x31, 0x09, 0x88, 0x08, 0x40, 0x42, 0x03, 0x10, 0x0E,
|
||||
0x80, 0x3F, 0x00, 0x3E, 0x01, 0x18, 0x08, 0x60, 0x43, 0x02, 0x1E, 0x11,
|
||||
0x9E, 0xF8, 0x3F, 0x80, 0x20, 0x01, 0x00, 0x08, 0x00, 0x3C, 0x02, 0x19,
|
||||
0x81, 0x8C, 0x20, 0xC2, 0x08, 0x20, 0x83, 0x10, 0x20, 0xCC, 0x08, 0x22,
|
||||
0x01, 0x19, 0x00, 0x3C, 0xCF, 0x00, 0x26, 0x60, 0x11, 0x0C, 0x0C, 0xC1,
|
||||
0x02, 0x30, 0x41, 0x0C, 0x10, 0xC1, 0x0C, 0x20, 0x62, 0x10, 0x0F, 0x00,
|
||||
0x0F, 0x80, 0x3B, 0x80, 0xC1, 0x01, 0x82, 0x03, 0x04, 0x03, 0x18, 0x06,
|
||||
0xE0, 0x07, 0x00, 0x1E, 0x00, 0x66, 0x11, 0x86, 0x36, 0x06, 0x4C, 0x07,
|
||||
0x98, 0x06, 0x18, 0x0E, 0x3C, 0x76, 0x1F, 0x84, 0xFE, 0x18, 0x8C, 0x46,
|
||||
0x31, 0x88, 0x42, 0x31, 0x84, 0x21, 0x08, 0x63, 0x18, 0x43, 0x08, 0x60,
|
||||
0xC4, 0x66, 0x23, 0x33, 0x11, 0x11, 0x11, 0x13, 0x33, 0x26, 0x64, 0xC0,
|
||||
0x10, 0x10, 0x93, 0x7E, 0x38, 0x7C, 0x93, 0x10, 0x10, 0x0C, 0x03, 0x00,
|
||||
0xC0, 0x30, 0xFF, 0xC3, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0x1D, 0xA4,
|
||||
0xB0, 0xFE, 0x1F, 0x80, 0x00, 0xC0, 0x20, 0x18, 0x06, 0x01, 0x00, 0xC0,
|
||||
0x30, 0x08, 0x06, 0x01, 0x00, 0x40, 0x30, 0x08, 0x02, 0x01, 0x80, 0x40,
|
||||
0x30, 0x0C, 0x02, 0x01, 0x80, 0x60, 0x10, 0x00, 0x07, 0x80, 0x7F, 0x83,
|
||||
0x03, 0x18, 0x06, 0x60, 0x19, 0x00, 0x6C, 0x00, 0xF0, 0x03, 0xC0, 0x0F,
|
||||
0x00, 0x3C, 0x00, 0xD0, 0x02, 0x60, 0x19, 0x80, 0x63, 0x03, 0x07, 0xF8,
|
||||
0x0F, 0xC0, 0xFF, 0xF0, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C,
|
||||
0x30, 0xC3, 0x0C, 0x1F, 0x83, 0xFF, 0x38, 0x18, 0x00, 0x60, 0x03, 0x00,
|
||||
0x18, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xC0,
|
||||
0x0C, 0x00, 0xC0, 0x0F, 0xFF, 0x7F, 0xF8, 0x7F, 0xF7, 0xFF, 0x00, 0x60,
|
||||
0x0C, 0x01, 0x80, 0x30, 0x03, 0x00, 0x60, 0x07, 0xE0, 0x07, 0x00, 0x30,
|
||||
0x01, 0x00, 0x10, 0x03, 0x40, 0x37, 0xDE, 0x1F, 0xC0, 0x00, 0x60, 0x01,
|
||||
0x80, 0x06, 0x00, 0x18, 0x00, 0x60, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x30,
|
||||
0x30, 0x60, 0xC0, 0xC1, 0x81, 0x87, 0xFF, 0xFF, 0xFF, 0xE0, 0x0C, 0x00,
|
||||
0x18, 0x00, 0x30, 0x00, 0x60, 0x3F, 0xE7, 0xFE, 0x60, 0x06, 0x00, 0x60,
|
||||
0x06, 0x00, 0x60, 0x07, 0xF0, 0x7F, 0xC0, 0x06, 0x00, 0x60, 0x03, 0x00,
|
||||
0x30, 0x02, 0xC0, 0x6F, 0xBC, 0x3F, 0x80, 0x07, 0xE0, 0xFF, 0x8E, 0x00,
|
||||
0xC0, 0x06, 0x00, 0x20, 0x03, 0x00, 0x19, 0xF8, 0xDE, 0xE7, 0x81, 0xB8,
|
||||
0x07, 0xC0, 0x36, 0x01, 0xB0, 0x0C, 0xC0, 0xC3, 0x9E, 0x0F, 0xC0, 0xFF,
|
||||
0xFF, 0xFF, 0x80, 0x38, 0x06, 0x80, 0x60, 0x0C, 0x00, 0xC0, 0x18, 0x01,
|
||||
0x80, 0x10, 0x03, 0x00, 0x30, 0x06, 0x00, 0x60, 0x0C, 0x00, 0xC0, 0x18,
|
||||
0x00, 0x0F, 0x81, 0xFF, 0x18, 0x0C, 0xC0, 0x26, 0x01, 0xB0, 0x09, 0x80,
|
||||
0xC7, 0xBC, 0x1F, 0xE3, 0x83, 0x98, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0D,
|
||||
0x80, 0xEF, 0x1E, 0x1F, 0xC0, 0x1F, 0x07, 0xFC, 0xE0, 0x6C, 0x02, 0xC0,
|
||||
0x38, 0x03, 0xC0, 0x3C, 0x07, 0x71, 0xD3, 0xF9, 0x00, 0x30, 0x03, 0x00,
|
||||
0x30, 0x06, 0x00, 0xE6, 0x7C, 0x7F, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x7E,
|
||||
0x1F, 0x80, 0x00, 0x00, 0x76, 0x92, 0xC0, 0x00, 0xC1, 0xE1, 0xE3, 0xC0,
|
||||
0xC0, 0x3C, 0x03, 0xC0, 0x1E, 0x01, 0xC0, 0x00, 0xFF, 0xFF, 0xF0, 0x00,
|
||||
0x00, 0x00, 0x00, 0x0F, 0xFC, 0xC0, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0xC0,
|
||||
0xF0, 0xE1, 0xE0, 0xC0, 0x00, 0x00, 0x1F, 0x87, 0xFE, 0xE0, 0x60, 0x03,
|
||||
0x00, 0x30, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x03, 0x00, 0x20,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0xFE, 0x00, 0x07,
|
||||
0x07, 0x00, 0x30, 0x01, 0x80, 0xC0, 0x01, 0x83, 0x00, 0x01, 0x84, 0x1F,
|
||||
0x91, 0x10, 0x61, 0xA3, 0x21, 0x80, 0xC2, 0xC2, 0x01, 0x85, 0x8C, 0x01,
|
||||
0x0B, 0x18, 0x02, 0x1E, 0x30, 0x04, 0x3C, 0x60, 0x08, 0x58, 0x40, 0x30,
|
||||
0x90, 0xC0, 0xE1, 0x30, 0xE3, 0x64, 0x20, 0xFC, 0x78, 0x60, 0x00, 0x00,
|
||||
0x60, 0x00, 0x00, 0x70, 0x00, 0x00, 0x3C, 0xF0, 0x00, 0x1F, 0x80, 0x00,
|
||||
0x00, 0xC0, 0x00, 0xE0, 0x00, 0x58, 0x00, 0x6C, 0x00, 0x22, 0x00, 0x31,
|
||||
0x80, 0x18, 0x40, 0x18, 0x30, 0x0C, 0x18, 0x0C, 0x06, 0x06, 0x03, 0x03,
|
||||
0xFF, 0xC3, 0xFF, 0xE1, 0x00, 0x19, 0x80, 0x0C, 0xC0, 0x02, 0xC0, 0x01,
|
||||
0x80, 0xFF, 0xC3, 0xFF, 0xCC, 0x03, 0x30, 0x06, 0xC0, 0x1B, 0x00, 0x6C,
|
||||
0x01, 0x30, 0x1C, 0xFF, 0xE3, 0x00, 0xEC, 0x01, 0xB0, 0x03, 0xC0, 0x0F,
|
||||
0x00, 0x3C, 0x01, 0xB0, 0x3E, 0xFF, 0xE0, 0x03, 0xF0, 0x1F, 0xF8, 0x70,
|
||||
0x19, 0x80, 0x06, 0x00, 0x0C, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01,
|
||||
0x80, 0x03, 0x00, 0x03, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x01, 0x87,
|
||||
0xBE, 0x07, 0xF8, 0xFF, 0x80, 0xFF, 0xF0, 0xC0, 0x38, 0xC0, 0x0C, 0xC0,
|
||||
0x06, 0xC0, 0x06, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0,
|
||||
0x02, 0xC0, 0x06, 0xC0, 0x06, 0xC0, 0x0C, 0xC0, 0x38, 0xFF, 0xF0, 0xFF,
|
||||
0xC0, 0xFF, 0xEF, 0xFE, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C,
|
||||
0x00, 0xFF, 0xCC, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0F,
|
||||
0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30,
|
||||
0x06, 0x00, 0xFF, 0xDF, 0xFB, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06,
|
||||
0x00, 0xC0, 0x00, 0x03, 0xF0, 0x1F, 0xF8, 0x70, 0x19, 0x80, 0x06, 0x00,
|
||||
0x0C, 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x07, 0x00, 0x0B,
|
||||
0x00, 0x16, 0x00, 0x26, 0x00, 0x46, 0x01, 0x87, 0xDF, 0x03, 0xF8, 0xC0,
|
||||
0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0,
|
||||
0x03, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C,
|
||||
0x00, 0xF0, 0x03, 0xC0, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0x9F,
|
||||
0xC0, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x80, 0x40, 0x20, 0x10,
|
||||
0x08, 0x0F, 0x07, 0xEE, 0x3E, 0x00, 0xC0, 0x1B, 0x00, 0xCC, 0x06, 0x30,
|
||||
0x30, 0xC1, 0x83, 0x0C, 0x0C, 0x60, 0x33, 0x00, 0xDE, 0x03, 0xFC, 0x0F,
|
||||
0x30, 0x38, 0x60, 0xC0, 0xC3, 0x01, 0x8C, 0x03, 0x30, 0x0E, 0xC0, 0x1C,
|
||||
0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0,
|
||||
0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x07, 0xFF, 0xFF, 0xE0,
|
||||
0x80, 0x00, 0xE0, 0x00, 0xF8, 0x00, 0xFC, 0x00, 0x7B, 0x00, 0x7C, 0x80,
|
||||
0x2E, 0x60, 0x37, 0x10, 0x33, 0x8C, 0x19, 0xC3, 0x18, 0xE1, 0x88, 0x70,
|
||||
0x6C, 0x38, 0x14, 0x1C, 0x0E, 0x0E, 0x02, 0x07, 0x00, 0x03, 0x80, 0x01,
|
||||
0x80, 0x80, 0x0F, 0x00, 0x3E, 0x00, 0xFC, 0x03, 0xF8, 0x0F, 0x60, 0x3C,
|
||||
0xC0, 0xF1, 0x83, 0xC3, 0x0F, 0x0E, 0x3C, 0x18, 0xF0, 0x33, 0xC0, 0x6F,
|
||||
0x00, 0xFC, 0x03, 0xF0, 0x07, 0xC0, 0x0C, 0x03, 0xF0, 0x03, 0xFF, 0x01,
|
||||
0xC0, 0x60, 0xC0, 0x0C, 0x60, 0x01, 0x98, 0x00, 0x6C, 0x00, 0x0F, 0x00,
|
||||
0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0D, 0x80, 0x02, 0x60, 0x01,
|
||||
0x8C, 0x00, 0xC1, 0x80, 0x70, 0x3C, 0xF0, 0x03, 0xF8, 0x00, 0xFF, 0x87,
|
||||
0xFF, 0x30, 0x1D, 0x80, 0x6C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0,
|
||||
0x36, 0x03, 0xBF, 0xF9, 0xFE, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x18, 0x00,
|
||||
0xC0, 0x00, 0x03, 0xF0, 0x01, 0xFF, 0x80, 0x70, 0x18, 0x18, 0x01, 0x86,
|
||||
0x00, 0x18, 0xC0, 0x03, 0x30, 0x00, 0x36, 0x00, 0x06, 0xC0, 0x00, 0xD8,
|
||||
0x00, 0x1B, 0x00, 0x03, 0x30, 0x00, 0xC6, 0x00, 0x18, 0x60, 0x06, 0x06,
|
||||
0x01, 0xC0, 0x79, 0xE0, 0x07, 0xF8, 0x00, 0x0E, 0x00, 0x00, 0xE3, 0x80,
|
||||
0x07, 0xE0, 0xFF, 0x87, 0xFF, 0x30, 0x1D, 0x80, 0x6C, 0x01, 0xE0, 0x0F,
|
||||
0x00, 0x78, 0x03, 0xC0, 0x36, 0x03, 0xBF, 0xF9, 0xFF, 0x0C, 0x0C, 0x60,
|
||||
0x33, 0x01, 0x98, 0x06, 0xC0, 0x18, 0x0F, 0xC1, 0xFF, 0x98, 0x04, 0xC0,
|
||||
0x04, 0x00, 0x20, 0x01, 0x80, 0x07, 0x00, 0x1F, 0x80, 0x0F, 0x00, 0x0C,
|
||||
0x00, 0x30, 0x01, 0x80, 0x0F, 0x00, 0xCF, 0x3C, 0x1F, 0xC0, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0,
|
||||
0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x00, 0x30,
|
||||
0x00, 0xC0, 0x03, 0x00, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x18, 0x00,
|
||||
0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x3C,
|
||||
0x01, 0xE0, 0x0D, 0x80, 0xC7, 0xBC, 0x1F, 0xC0, 0xC0, 0x01, 0xB0, 0x01,
|
||||
0x98, 0x00, 0xC4, 0x00, 0xC3, 0x00, 0x61, 0x80, 0x20, 0x60, 0x30, 0x30,
|
||||
0x10, 0x0C, 0x18, 0x06, 0x0C, 0x01, 0x8C, 0x00, 0xC6, 0x00, 0x26, 0x00,
|
||||
0x1B, 0x00, 0x0D, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xC0, 0x18, 0x01,
|
||||
0xE0, 0x0E, 0x00, 0x90, 0x07, 0x00, 0xCC, 0x06, 0x80, 0x66, 0x03, 0x60,
|
||||
0x21, 0x01, 0x30, 0x30, 0xC1, 0x88, 0x18, 0x60, 0xC6, 0x08, 0x18, 0x43,
|
||||
0x0C, 0x0C, 0x60, 0x86, 0x06, 0x30, 0x62, 0x01, 0x10, 0x33, 0x00, 0xD8,
|
||||
0x09, 0x80, 0x6C, 0x06, 0x80, 0x1C, 0x03, 0xC0, 0x0E, 0x00, 0xE0, 0x07,
|
||||
0x00, 0x60, 0x00, 0x60, 0x06, 0x60, 0x18, 0xE0, 0x60, 0xC0, 0x80, 0xC3,
|
||||
0x00, 0xCC, 0x01, 0xF0, 0x01, 0xE0, 0x01, 0x80, 0x07, 0x80, 0x1B, 0x80,
|
||||
0x63, 0x00, 0xC3, 0x03, 0x03, 0x0C, 0x07, 0x18, 0x06, 0x60, 0x06, 0xC0,
|
||||
0x06, 0xC0, 0x09, 0x80, 0x31, 0x80, 0xC1, 0x81, 0x83, 0x06, 0x03, 0x08,
|
||||
0x06, 0x30, 0x06, 0xC0, 0x07, 0x80, 0x0E, 0x00, 0x0C, 0x00, 0x18, 0x00,
|
||||
0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xF0, 0x01,
|
||||
0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x1C, 0x00, 0x60, 0x03, 0x00, 0x18,
|
||||
0x00, 0xC0, 0x07, 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00, 0x3F, 0xFF, 0xFF,
|
||||
0xFC, 0xFF, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x8F,
|
||||
0xF0, 0xC0, 0x10, 0x06, 0x01, 0x80, 0x20, 0x0C, 0x01, 0x00, 0x40, 0x18,
|
||||
0x02, 0x00, 0x80, 0x30, 0x04, 0x01, 0x80, 0x60, 0x08, 0x03, 0x00, 0xC0,
|
||||
0x10, 0x06, 0x01, 0x80, 0x20, 0xFF, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6,
|
||||
0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0xFF, 0xE0, 0x0C, 0x07, 0x01, 0x60,
|
||||
0x48, 0x33, 0x08, 0x46, 0x19, 0x02, 0xC0, 0xA0, 0x30, 0xFF, 0xF0, 0xE0,
|
||||
0xC1, 0x80, 0x0E, 0x0F, 0xF9, 0x83, 0x00, 0x30, 0x06, 0x00, 0xCF, 0xFB,
|
||||
0x03, 0xC0, 0x78, 0x0F, 0x03, 0xB8, 0xF3, 0xF6, 0xC0, 0x06, 0x00, 0x30,
|
||||
0x01, 0x80, 0x0C, 0x00, 0x63, 0xC3, 0x7F, 0x9E, 0x0E, 0xE0, 0x36, 0x00,
|
||||
0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x80, 0x7E, 0x06, 0xDC, 0xE6,
|
||||
0x7E, 0x00, 0x07, 0x01, 0xFC, 0x30, 0x66, 0x00, 0xC0, 0x0C, 0x00, 0xC0,
|
||||
0x0C, 0x00, 0xC0, 0x06, 0x00, 0x60, 0x23, 0xDE, 0x0F, 0x80, 0x00, 0x18,
|
||||
0x00, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x83, 0x8C, 0x7F, 0x6E, 0x0F, 0x60,
|
||||
0x3E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0D, 0x80, 0xEC, 0x07,
|
||||
0x3D, 0xD8, 0xFC, 0xC0, 0x07, 0x01, 0xFC, 0x70, 0x66, 0x03, 0xC0, 0x3C,
|
||||
0x01, 0xFF, 0xFC, 0x00, 0xC0, 0x06, 0x00, 0x60, 0x23, 0xDE, 0x0F, 0xC0,
|
||||
0x0F, 0x0F, 0xC6, 0x02, 0x01, 0x07, 0xFB, 0xFC, 0x20, 0x10, 0x08, 0x04,
|
||||
0x02, 0x01, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x07, 0x19, 0xFE,
|
||||
0xDC, 0x1E, 0xC0, 0x7C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B,
|
||||
0x01, 0xCC, 0x1E, 0x3F, 0xB0, 0x21, 0x80, 0x0C, 0x00, 0x6C, 0x06, 0x3F,
|
||||
0xE0, 0x7C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x78,
|
||||
0xDF, 0xCF, 0x06, 0xE0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03,
|
||||
0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xF0, 0x3F, 0xFF, 0xFF, 0xF0, 0x0C,
|
||||
0x30, 0x00, 0x00, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C,
|
||||
0x30, 0xC3, 0x0F, 0xE7, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0,
|
||||
0x0C, 0x07, 0xC0, 0xEC, 0x1C, 0xC3, 0x0C, 0x60, 0xCC, 0x0D, 0xE0, 0xF3,
|
||||
0x0E, 0x18, 0xC1, 0x8C, 0x0C, 0xC0, 0x6C, 0x03, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF0, 0xC7, 0x01, 0xC6, 0xFE, 0x7F, 0xBC, 0x1E, 0x0D, 0xC0, 0xE0, 0x3C,
|
||||
0x03, 0x01, 0xE0, 0x18, 0x0F, 0x00, 0xC0, 0x78, 0x06, 0x03, 0xC0, 0x30,
|
||||
0x1E, 0x01, 0x80, 0xF0, 0x0C, 0x07, 0x80, 0x60, 0x3C, 0x03, 0x01, 0x80,
|
||||
0xC7, 0x8D, 0xFC, 0xF0, 0x6E, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03,
|
||||
0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x30, 0x07, 0x00, 0xFE, 0x0C,
|
||||
0x1C, 0xC0, 0x6C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B, 0x01,
|
||||
0x98, 0x0C, 0x7B, 0xC0, 0xF8, 0x00, 0xC7, 0x86, 0xFF, 0x3C, 0x1D, 0xC0,
|
||||
0x6C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1F, 0x00, 0xFC, 0x0D,
|
||||
0xB9, 0xCC, 0xFC, 0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00, 0x00,
|
||||
0x07, 0x18, 0xFE, 0xDC, 0x1E, 0xC0, 0x7C, 0x01, 0xE0, 0x0F, 0x00, 0x78,
|
||||
0x03, 0xC0, 0x1B, 0x01, 0xD8, 0x0E, 0x7B, 0xB1, 0xF9, 0x80, 0x0C, 0x00,
|
||||
0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0xC7, 0xBF, 0xC7, 0x0C, 0x18, 0x30,
|
||||
0x60, 0xC1, 0x83, 0x06, 0x0C, 0x00, 0x0E, 0x1F, 0xFC, 0x0B, 0x00, 0xC0,
|
||||
0x38, 0x07, 0xE0, 0x1E, 0x00, 0xC0, 0x38, 0x0F, 0xCE, 0x7F, 0x00, 0x10,
|
||||
0x08, 0x3F, 0xDF, 0xE1, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02,
|
||||
0x01, 0x80, 0xE4, 0x3E, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C,
|
||||
0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, 0x60, 0x77, 0x9F, 0x1F, 0x30,
|
||||
0xC0, 0x1A, 0x00, 0xD8, 0x0C, 0xC0, 0x63, 0x06, 0x18, 0x30, 0x41, 0x03,
|
||||
0x18, 0x08, 0x80, 0x6C, 0x03, 0x40, 0x0E, 0x00, 0x70, 0x00, 0xC0, 0x20,
|
||||
0x1A, 0x03, 0x80, 0xD8, 0x1C, 0x04, 0xC0, 0xA0, 0x62, 0x0D, 0x82, 0x18,
|
||||
0x44, 0x30, 0xC2, 0x31, 0x82, 0x31, 0x88, 0x19, 0x04, 0xC0, 0x58, 0x34,
|
||||
0x03, 0xC0, 0xA0, 0x1C, 0x07, 0x00, 0x60, 0x30, 0x00, 0x60, 0x32, 0x06,
|
||||
0x30, 0x41, 0x8C, 0x0D, 0x80, 0x70, 0x06, 0x00, 0x70, 0x0D, 0x81, 0x8C,
|
||||
0x30, 0x43, 0x06, 0x60, 0x30, 0x60, 0x0C, 0x80, 0x33, 0x01, 0x8C, 0x06,
|
||||
0x18, 0x30, 0x60, 0xC0, 0xC2, 0x03, 0x18, 0x04, 0x40, 0x1B, 0x00, 0x28,
|
||||
0x00, 0xE0, 0x03, 0x80, 0x0C, 0x00, 0x30, 0x01, 0x80, 0xFC, 0x00, 0xE0,
|
||||
0x00, 0xFF, 0xFF, 0xF0, 0x18, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x18,
|
||||
0x0C, 0x06, 0x03, 0x00, 0xFF, 0xC0, 0x0E, 0x3C, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x18, 0x30, 0x60, 0xC7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83,
|
||||
0x03, 0xC3, 0x80, 0xFF, 0xFF, 0xFE, 0xE1, 0xE0, 0x60, 0xC1, 0x83, 0x06,
|
||||
0x0C, 0x18, 0x30, 0x60, 0x71, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1,
|
||||
0x9E, 0x38, 0x00, 0x7C, 0x28, 0xC5, 0x0F, 0x00 };
|
||||
|
||||
const GFXglyph Montserrat_Regular12pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 2, 17, 6, 2, -16 }, // 0x21 '!'
|
||||
{ 6, 5, 7, 9, 2, -16 }, // 0x22 '"'
|
||||
{ 11, 15, 17, 17, 1, -16 }, // 0x23 '#'
|
||||
{ 43, 13, 23, 15, 1, -19 }, // 0x24 '$'
|
||||
{ 81, 18, 17, 20, 1, -16 }, // 0x25 '%'
|
||||
{ 120, 15, 17, 16, 1, -16 }, // 0x26 '&'
|
||||
{ 152, 1, 7, 5, 2, -16 }, // 0x27 '''
|
||||
{ 153, 5, 23, 8, 2, -17 }, // 0x28 '('
|
||||
{ 168, 4, 23, 8, 1, -17 }, // 0x29 ')'
|
||||
{ 180, 8, 9, 9, 1, -17 }, // 0x2A '*'
|
||||
{ 189, 10, 10, 14, 2, -12 }, // 0x2B '+'
|
||||
{ 202, 3, 7, 5, 1, -2 }, // 0x2C ','
|
||||
{ 205, 7, 1, 9, 1, -6 }, // 0x2D '-'
|
||||
{ 206, 3, 3, 5, 1, -2 }, // 0x2E '.'
|
||||
{ 208, 10, 22, 8, -1, -19 }, // 0x2F '/'
|
||||
{ 236, 14, 17, 16, 1, -16 }, // 0x30 '0'
|
||||
{ 266, 6, 17, 9, 0, -16 }, // 0x31 '1'
|
||||
{ 279, 13, 17, 14, 0, -16 }, // 0x32 '2'
|
||||
{ 307, 12, 17, 14, 0, -16 }, // 0x33 '3'
|
||||
{ 333, 15, 17, 16, 1, -16 }, // 0x34 '4'
|
||||
{ 365, 12, 17, 14, 1, -16 }, // 0x35 '5'
|
||||
{ 391, 13, 17, 15, 1, -16 }, // 0x36 '6'
|
||||
{ 419, 12, 17, 14, 1, -16 }, // 0x37 '7'
|
||||
{ 445, 13, 17, 15, 1, -16 }, // 0x38 '8'
|
||||
{ 473, 12, 17, 15, 1, -16 }, // 0x39 '9'
|
||||
{ 499, 3, 13, 5, 1, -12 }, // 0x3A ':'
|
||||
{ 504, 3, 17, 5, 1, -12 }, // 0x3B ';'
|
||||
{ 511, 10, 10, 14, 2, -12 }, // 0x3C '<'
|
||||
{ 524, 10, 7, 14, 2, -11 }, // 0x3D '='
|
||||
{ 533, 10, 10, 14, 2, -12 }, // 0x3E '>'
|
||||
{ 546, 12, 17, 14, 0, -16 }, // 0x3F '?'
|
||||
{ 572, 23, 22, 25, 1, -16 }, // 0x40 '@'
|
||||
{ 636, 17, 17, 17, 0, -16 }, // 0x41 'A'
|
||||
{ 673, 14, 17, 18, 3, -16 }, // 0x42 'B'
|
||||
{ 703, 15, 17, 17, 1, -16 }, // 0x43 'C'
|
||||
{ 735, 16, 17, 20, 3, -16 }, // 0x44 'D'
|
||||
{ 769, 12, 17, 16, 3, -16 }, // 0x45 'E'
|
||||
{ 795, 11, 17, 15, 3, -16 }, // 0x46 'F'
|
||||
{ 819, 15, 17, 19, 1, -16 }, // 0x47 'G'
|
||||
{ 851, 14, 17, 20, 3, -16 }, // 0x48 'H'
|
||||
{ 881, 2, 17, 7, 3, -16 }, // 0x49 'I'
|
||||
{ 886, 9, 17, 12, 0, -16 }, // 0x4A 'J'
|
||||
{ 906, 14, 17, 17, 3, -16 }, // 0x4B 'K'
|
||||
{ 936, 11, 17, 14, 3, -16 }, // 0x4C 'L'
|
||||
{ 960, 17, 17, 23, 3, -16 }, // 0x4D 'M'
|
||||
{ 997, 14, 17, 20, 3, -16 }, // 0x4E 'N'
|
||||
{ 1027, 18, 17, 20, 1, -16 }, // 0x4F 'O'
|
||||
{ 1066, 13, 17, 17, 3, -16 }, // 0x50 'P'
|
||||
{ 1094, 19, 20, 20, 1, -16 }, // 0x51 'Q'
|
||||
{ 1142, 13, 17, 17, 3, -16 }, // 0x52 'R'
|
||||
{ 1170, 13, 17, 15, 1, -16 }, // 0x53 'S'
|
||||
{ 1198, 14, 17, 14, 0, -16 }, // 0x54 'T'
|
||||
{ 1228, 13, 17, 19, 3, -16 }, // 0x55 'U'
|
||||
{ 1256, 17, 17, 17, 0, -16 }, // 0x56 'V'
|
||||
{ 1293, 25, 17, 27, 1, -16 }, // 0x57 'W'
|
||||
{ 1347, 15, 17, 16, 0, -16 }, // 0x58 'X'
|
||||
{ 1379, 15, 17, 15, 0, -16 }, // 0x59 'Y'
|
||||
{ 1411, 14, 17, 16, 1, -16 }, // 0x5A 'Z'
|
||||
{ 1441, 4, 23, 8, 3, -17 }, // 0x5B '['
|
||||
{ 1453, 10, 22, 8, -1, -19 }, // 0x5C '\'
|
||||
{ 1481, 5, 23, 8, 0, -17 }, // 0x5D ']'
|
||||
{ 1496, 10, 10, 14, 2, -12 }, // 0x5E '^'
|
||||
{ 1509, 12, 1, 12, 0, 1 }, // 0x5F '_'
|
||||
{ 1511, 6, 3, 14, 3, -17 }, // 0x60 '`'
|
||||
{ 1514, 11, 13, 14, 1, -12 }, // 0x61 'a'
|
||||
{ 1532, 13, 18, 16, 2, -17 }, // 0x62 'b'
|
||||
{ 1562, 12, 13, 14, 1, -12 }, // 0x63 'c'
|
||||
{ 1582, 13, 18, 16, 1, -17 }, // 0x64 'd'
|
||||
{ 1612, 12, 13, 15, 1, -12 }, // 0x65 'e'
|
||||
{ 1632, 9, 18, 8, 0, -17 }, // 0x66 'f'
|
||||
{ 1653, 13, 18, 16, 1, -12 }, // 0x67 'g'
|
||||
{ 1683, 12, 18, 16, 2, -17 }, // 0x68 'h'
|
||||
{ 1710, 2, 18, 6, 2, -17 }, // 0x69 'i'
|
||||
{ 1715, 6, 23, 7, -2, -17 }, // 0x6A 'j'
|
||||
{ 1733, 12, 18, 14, 2, -17 }, // 0x6B 'k'
|
||||
{ 1760, 2, 18, 6, 2, -17 }, // 0x6C 'l'
|
||||
{ 1765, 21, 13, 25, 2, -12 }, // 0x6D 'm'
|
||||
{ 1800, 12, 13, 16, 2, -12 }, // 0x6E 'n'
|
||||
{ 1820, 13, 13, 15, 1, -12 }, // 0x6F 'o'
|
||||
{ 1842, 13, 18, 16, 2, -12 }, // 0x70 'p'
|
||||
{ 1872, 13, 18, 16, 1, -12 }, // 0x71 'q'
|
||||
{ 1902, 7, 13, 10, 2, -12 }, // 0x72 'r'
|
||||
{ 1914, 10, 13, 12, 1, -12 }, // 0x73 's'
|
||||
{ 1931, 9, 15, 10, 0, -14 }, // 0x74 't'
|
||||
{ 1948, 12, 13, 16, 2, -12 }, // 0x75 'u'
|
||||
{ 1968, 13, 13, 13, 0, -12 }, // 0x76 'v'
|
||||
{ 1990, 21, 13, 21, 0, -12 }, // 0x77 'w'
|
||||
{ 2025, 12, 13, 13, 0, -12 }, // 0x78 'x'
|
||||
{ 2045, 14, 18, 13, -1, -12 }, // 0x79 'y'
|
||||
{ 2077, 10, 13, 12, 1, -12 }, // 0x7A 'z'
|
||||
{ 2094, 7, 23, 8, 1, -17 }, // 0x7B '{'
|
||||
{ 2115, 1, 23, 7, 3, -17 }, // 0x7C '|'
|
||||
{ 2118, 7, 23, 8, 0, -17 }, // 0x7D '}'
|
||||
{ 2139, 11, 3, 14, 1, -9 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Regular12pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Regular12pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Regular12pt7bGlyphs,
|
||||
0x20, 0x7E, 29 };
|
||||
|
||||
// Approx. 2816 bytes
|
||||
|
||||
#endif // MONTSERRAT12PT7B_H
|
||||
@@ -1,481 +0,0 @@
|
||||
#ifndef MONTSERRAT18PT7B_H
|
||||
#define MONTSERRAT18PT7B_H
|
||||
const uint8_t Montserrat_Regular18pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x6C, 0x00, 0x3F, 0xE0, 0xE3,
|
||||
0xF1, 0xF8, 0xFC, 0x76, 0x1B, 0x0D, 0x86, 0x82, 0x41, 0x20, 0x80, 0x01,
|
||||
0x80, 0xC0, 0x06, 0x03, 0x00, 0x18, 0x0C, 0x00, 0x60, 0x30, 0x01, 0x80,
|
||||
0xC0, 0x06, 0x03, 0x00, 0x30, 0x08, 0x1F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFC,
|
||||
0x0C, 0x06, 0x00, 0x30, 0x18, 0x00, 0xC0, 0x60, 0x03, 0x01, 0x80, 0x0C,
|
||||
0x06, 0x00, 0x60, 0x10, 0x01, 0x80, 0xC0, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF,
|
||||
0xE0, 0x60, 0x30, 0x01, 0x80, 0xC0, 0x06, 0x03, 0x00, 0x18, 0x0C, 0x00,
|
||||
0xC0, 0x20, 0x03, 0x01, 0x80, 0x0C, 0x06, 0x00, 0x00, 0xC0, 0x00, 0x30,
|
||||
0x00, 0x0C, 0x00, 0x03, 0x00, 0x01, 0xF0, 0x03, 0xFF, 0x83, 0xFF, 0xF9,
|
||||
0xE3, 0x0C, 0x70, 0xC0, 0x38, 0x30, 0x0E, 0x0C, 0x03, 0x83, 0x00, 0xE0,
|
||||
0xC0, 0x1C, 0x30, 0x07, 0x8C, 0x00, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F,
|
||||
0x80, 0x0D, 0xF0, 0x03, 0x1E, 0x00, 0xC1, 0xC0, 0x30, 0x70, 0x0C, 0x1C,
|
||||
0x03, 0x07, 0x80, 0xC1, 0xF8, 0x30, 0xEF, 0x8C, 0xF0, 0xFF, 0xF8, 0x0F,
|
||||
0xF8, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x06,
|
||||
0x00, 0x06, 0x03, 0xF0, 0x01, 0x80, 0xC3, 0x00, 0x70, 0x30, 0x30, 0x0C,
|
||||
0x06, 0x06, 0x03, 0x00, 0x80, 0x40, 0xE0, 0x30, 0x0C, 0x18, 0x06, 0x01,
|
||||
0x86, 0x00, 0x40, 0x21, 0x80, 0x0C, 0x0C, 0x30, 0x01, 0x81, 0x8C, 0x00,
|
||||
0x18, 0x63, 0x00, 0x01, 0xF8, 0x63, 0xF0, 0x0C, 0x18, 0xFF, 0x00, 0x06,
|
||||
0x38, 0x70, 0x00, 0xC6, 0x06, 0x00, 0x30, 0x80, 0x40, 0x0C, 0x10, 0x08,
|
||||
0x01, 0x86, 0x01, 0x80, 0x60, 0x40, 0x30, 0x18, 0x08, 0x04, 0x07, 0x01,
|
||||
0x81, 0x80, 0xC0, 0x30, 0x30, 0x30, 0x03, 0xFC, 0x0E, 0x00, 0x3F, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x3F, 0xC0, 0x03, 0x87, 0x00, 0x38, 0x18, 0x01, 0x80,
|
||||
0xE0, 0x0C, 0x03, 0x00, 0x60, 0x38, 0x03, 0x81, 0x80, 0x0C, 0x18, 0x00,
|
||||
0x73, 0x80, 0x01, 0xF8, 0x00, 0x07, 0x80, 0x00, 0xFC, 0x00, 0x0E, 0x70,
|
||||
0x00, 0xE1, 0xC1, 0xCE, 0x07, 0x0C, 0xE0, 0x1C, 0x66, 0x00, 0x77, 0x30,
|
||||
0x01, 0xF1, 0x80, 0x07, 0x8E, 0x00, 0x1C, 0x70, 0x03, 0xF1, 0xE0, 0x39,
|
||||
0xC7, 0xFF, 0x87, 0x0F, 0xF0, 0x10, 0xFF, 0xF6, 0xDA, 0x48, 0x1C, 0x63,
|
||||
0x8C, 0x31, 0xC6, 0x18, 0xE3, 0x8E, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C,
|
||||
0x30, 0xC3, 0x0E, 0x38, 0xE1, 0x86, 0x1C, 0x30, 0xC3, 0x86, 0x0C, 0x60,
|
||||
0xE0, 0xC1, 0xC3, 0x83, 0x07, 0x0E, 0x0C, 0x18, 0x30, 0x70, 0xE1, 0xC3,
|
||||
0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x06, 0x0C, 0x38, 0x70, 0xC3,
|
||||
0x86, 0x0C, 0x38, 0x60, 0x06, 0x00, 0x60, 0x06, 0x0C, 0x67, 0x77, 0xE1,
|
||||
0xF8, 0x0F, 0x03, 0xF8, 0xF6, 0xEC, 0x62, 0x06, 0x00, 0x60, 0x06, 0x00,
|
||||
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
|
||||
0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
|
||||
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x4E, 0xFE, 0x66, 0x4C, 0xC0, 0xFF,
|
||||
0xFF, 0xFF, 0xE0, 0x4E, 0xFE, 0x00, 0x1C, 0x00, 0x60, 0x01, 0x80, 0x0E,
|
||||
0x00, 0x30, 0x00, 0xC0, 0x07, 0x00, 0x18, 0x00, 0x60, 0x03, 0x00, 0x0C,
|
||||
0x00, 0x70, 0x01, 0x80, 0x06, 0x00, 0x38, 0x00, 0xC0, 0x03, 0x00, 0x1C,
|
||||
0x00, 0x60, 0x01, 0x80, 0x0E, 0x00, 0x30, 0x00, 0xC0, 0x07, 0x00, 0x18,
|
||||
0x00, 0x60, 0x03, 0x80, 0x0C, 0x00, 0x30, 0x01, 0x80, 0x06, 0x00, 0x38,
|
||||
0x00, 0xC0, 0x00, 0x00, 0xE0, 0x00, 0xFF, 0x80, 0x3F, 0xFC, 0x0E, 0x03,
|
||||
0xC3, 0x80, 0x38, 0xE0, 0x03, 0x9C, 0x00, 0x33, 0x00, 0x07, 0xE0, 0x00,
|
||||
0xFC, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00,
|
||||
0xF0, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0xFC, 0x00, 0x1D, 0x80, 0x03,
|
||||
0x38, 0x00, 0xE3, 0x80, 0x1C, 0x78, 0x07, 0x07, 0x83, 0xC0, 0x7F, 0xF0,
|
||||
0x03, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07,
|
||||
0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0,
|
||||
0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x80, 0x03, 0xE0, 0x07, 0xFE,
|
||||
0x07, 0xFF, 0xE3, 0xC0, 0x3C, 0xC0, 0x07, 0x00, 0x00, 0xC0, 0x00, 0x30,
|
||||
0x00, 0x0C, 0x00, 0x03, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x38, 0x00,
|
||||
0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0,
|
||||
0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0x9F, 0xFF, 0xE7, 0xFF, 0xF8,
|
||||
0x00, 0x1C, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00,
|
||||
0x70, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x07, 0xE0, 0x01, 0xFE, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x1C,
|
||||
0x00, 0x07, 0x40, 0x01, 0xD8, 0x00, 0xE7, 0xC0, 0xF0, 0xFF, 0xF8, 0x0F,
|
||||
0xF8, 0x00, 0x00, 0x07, 0x00, 0x00, 0x18, 0x00, 0x00, 0xE0, 0x00, 0x07,
|
||||
0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x06, 0x00, 0x00, 0x38, 0x00,
|
||||
0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x00, 0x01, 0x80, 0xE0, 0x0E,
|
||||
0x03, 0x80, 0x70, 0x0E, 0x03, 0x80, 0x38, 0x1C, 0x00, 0xE0, 0x7F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xE0, 0x00, 0x03, 0x80,
|
||||
0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x1F,
|
||||
0xFF, 0x0F, 0xFF, 0x87, 0xFF, 0xC7, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00,
|
||||
0xE0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x07, 0xFF,
|
||||
0x03, 0xFF, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x01, 0x80,
|
||||
0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00, 0x3F, 0x00, 0x3B, 0xE0, 0x7C,
|
||||
0x7F, 0xFC, 0x0F, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0xFF, 0xE0, 0xFF, 0xF0,
|
||||
0x78, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x01, 0x80, 0x00, 0xE0,
|
||||
0x00, 0x38, 0x00, 0x0C, 0x0F, 0x03, 0x1F, 0xF8, 0xCF, 0xBF, 0x37, 0x00,
|
||||
0xEF, 0x80, 0x1F, 0xC0, 0x07, 0xE0, 0x00, 0xF8, 0x00, 0x36, 0x00, 0x0D,
|
||||
0xC0, 0x07, 0x70, 0x01, 0xCE, 0x00, 0xE1, 0xE0, 0x78, 0x3F, 0xF8, 0x03,
|
||||
0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xE0,
|
||||
0x03, 0xB8, 0x00, 0xEE, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x03,
|
||||
0x80, 0x00, 0xC0, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x03, 0x80,
|
||||
0x01, 0xC0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x00, 0x01,
|
||||
0xC0, 0x00, 0x60, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x00, 0x01,
|
||||
0xF0, 0x01, 0xFF, 0xC0, 0xFC, 0xFC, 0x3C, 0x03, 0xC7, 0x00, 0x38, 0xC0,
|
||||
0x03, 0x98, 0x00, 0x73, 0x00, 0x0E, 0x60, 0x01, 0xCE, 0x00, 0x70, 0xE0,
|
||||
0x1C, 0x0F, 0xFF, 0x00, 0xFF, 0xE0, 0x7C, 0x3E, 0x1C, 0x00, 0xE7, 0x00,
|
||||
0x0E, 0xE0, 0x00, 0xD8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7E, 0x00,
|
||||
0x1C, 0xE0, 0x03, 0x9F, 0x01, 0xE1, 0xFF, 0xF8, 0x0F, 0xFC, 0x00, 0x03,
|
||||
0xC0, 0x01, 0xFF, 0x80, 0xFD, 0xF8, 0x3C, 0x03, 0x87, 0x00, 0x39, 0xC0,
|
||||
0x07, 0x38, 0x00, 0x77, 0x00, 0x0E, 0xE0, 0x01, 0xDC, 0x00, 0x39, 0x80,
|
||||
0x0F, 0x38, 0x03, 0xE3, 0xC0, 0xEC, 0x3F, 0xF9, 0x81, 0xFC, 0x30, 0x00,
|
||||
0x06, 0x00, 0x00, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x30, 0x00, 0x1E, 0x0C, 0x0F, 0x81, 0xFF, 0xE0, 0x1F, 0xF0, 0x00, 0x4E,
|
||||
0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xEF, 0xE0, 0x4E, 0xFE, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x04, 0xEF, 0xE6, 0x64, 0xCC, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0x1F, 0x00, 0xFC, 0x03, 0xE0, 0x1F, 0x80, 0x7C, 0x00, 0xE0,
|
||||
0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0xC0, 0x01, 0xF0, 0x00, 0x7E, 0x00,
|
||||
0x0F, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0xE0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00,
|
||||
0x3E, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x7C, 0x03, 0xF0, 0x0F, 0x80, 0x7E,
|
||||
0x00, 0xF0, 0x00, 0xC0, 0x00, 0x01, 0xF0, 0x07, 0xFE, 0x0F, 0xFF, 0xCF,
|
||||
0x00, 0xE6, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x06, 0x00, 0x03, 0x00, 0x03,
|
||||
0x80, 0x01, 0x80, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01,
|
||||
0xC0, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x00,
|
||||
0x03, 0xE0, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x01, 0xF0, 0x0F, 0x80, 0x03,
|
||||
0x80, 0x01, 0xE0, 0x07, 0x00, 0x00, 0x70, 0x0C, 0x00, 0x00, 0x38, 0x18,
|
||||
0x00, 0x00, 0x1C, 0x30, 0x07, 0xC1, 0x8C, 0x30, 0x1F, 0xF1, 0x86, 0x60,
|
||||
0x3C, 0x3D, 0x86, 0x60, 0x70, 0x0D, 0x83, 0xC0, 0xE0, 0x07, 0x83, 0xC0,
|
||||
0xC0, 0x03, 0x83, 0xC1, 0xC0, 0x03, 0x83, 0xC1, 0x80, 0x03, 0x83, 0xC1,
|
||||
0x80, 0x03, 0x81, 0xC1, 0x80, 0x01, 0x81, 0xC1, 0x80, 0x03, 0x83, 0xC1,
|
||||
0xC0, 0x03, 0x83, 0xC1, 0xC0, 0x03, 0x83, 0xC0, 0xE0, 0x07, 0x83, 0x60,
|
||||
0xE0, 0x0F, 0x86, 0x60, 0x78, 0x1D, 0x86, 0x70, 0x3F, 0xF9, 0xFC, 0x30,
|
||||
0x0F, 0xE0, 0xF8, 0x18, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0E,
|
||||
0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x01, 0xE0, 0x06, 0x00, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x0E,
|
||||
0x00, 0x00, 0x0F, 0x80, 0x00, 0x06, 0xC0, 0x00, 0x07, 0x70, 0x00, 0x03,
|
||||
0x98, 0x00, 0x01, 0x8E, 0x00, 0x01, 0xC7, 0x00, 0x00, 0xC1, 0x80, 0x00,
|
||||
0xE0, 0xE0, 0x00, 0x60, 0x30, 0x00, 0x70, 0x1C, 0x00, 0x30, 0x06, 0x00,
|
||||
0x38, 0x03, 0x80, 0x18, 0x00, 0xC0, 0x1C, 0x00, 0x70, 0x0F, 0xFF, 0xF8,
|
||||
0x0F, 0xFF, 0xFE, 0x07, 0x00, 0x07, 0x03, 0x00, 0x01, 0xC3, 0x80, 0x00,
|
||||
0xE1, 0x80, 0x00, 0x31, 0xC0, 0x00, 0x1C, 0xC0, 0x00, 0x06, 0xE0, 0x00,
|
||||
0x03, 0x80, 0xFF, 0xE0, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x8E, 0x00, 0x3C,
|
||||
0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0x6E, 0x00, 0x06, 0xE0, 0x00,
|
||||
0xEE, 0x00, 0x0E, 0xE0, 0x01, 0xCE, 0x01, 0xF8, 0xFF, 0xFF, 0x0F, 0xFF,
|
||||
0xFC, 0xE0, 0x00, 0xEE, 0x00, 0x07, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x03, 0xEF,
|
||||
0xFF, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x3E, 0x00, 0x07, 0xFF, 0x00, 0x7F,
|
||||
0xFF, 0x03, 0xC0, 0x1E, 0x1E, 0x00, 0x18, 0xE0, 0x00, 0x07, 0x00, 0x00,
|
||||
0x1C, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x30,
|
||||
0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x01, 0x80, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00,
|
||||
0x3C, 0x00, 0x18, 0x78, 0x00, 0xF0, 0xFC, 0x0F, 0x80, 0xFF, 0xF8, 0x00,
|
||||
0xFF, 0x80, 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x07, 0x00,
|
||||
0x1F, 0x0E, 0x00, 0x0F, 0x1C, 0x00, 0x07, 0x38, 0x00, 0x0F, 0x70, 0x00,
|
||||
0x0E, 0xE0, 0x00, 0x0D, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x3B, 0x80, 0x00, 0x77, 0x00, 0x01, 0xCE,
|
||||
0x00, 0x07, 0x1C, 0x00, 0x3E, 0x38, 0x03, 0xF0, 0x7F, 0xFF, 0xC0, 0xFF,
|
||||
0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x0E, 0x00,
|
||||
0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38,
|
||||
0x00, 0x1F, 0xFF, 0xCF, 0xFF, 0xE7, 0xFF, 0xF3, 0x80, 0x01, 0xC0, 0x00,
|
||||
0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00,
|
||||
0x03, 0x80, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0,
|
||||
0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0F, 0xFF, 0xE7,
|
||||
0xFF, 0xF3, 0xFF, 0xF9, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00,
|
||||
0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0,
|
||||
0x00, 0x00, 0x00, 0x3E, 0x00, 0x07, 0xFF, 0x80, 0x7F, 0xFF, 0x03, 0xC0,
|
||||
0x1F, 0x1E, 0x00, 0x18, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x1C, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x30, 0x00, 0x00, 0xC0,
|
||||
0x00, 0x03, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00,
|
||||
0x1D, 0x80, 0x00, 0x77, 0x00, 0x01, 0xCE, 0x00, 0x07, 0x3C, 0x00, 0x1C,
|
||||
0x78, 0x00, 0xF0, 0xFC, 0x0F, 0x80, 0xFF, 0xFC, 0x00, 0xFF, 0x80, 0xE0,
|
||||
0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E,
|
||||
0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03,
|
||||
0xE0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
|
||||
0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00,
|
||||
0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
|
||||
0x3F, 0xFC, 0xFF, 0xF3, 0xFF, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01,
|
||||
0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00,
|
||||
0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x40,
|
||||
0x1B, 0x80, 0xEF, 0x07, 0x9F, 0xFC, 0x1F, 0xC0, 0xE0, 0x00, 0x77, 0x00,
|
||||
0x07, 0x38, 0x00, 0x71, 0xC0, 0x07, 0x0E, 0x00, 0x70, 0x70, 0x07, 0x03,
|
||||
0x80, 0x70, 0x1C, 0x07, 0x00, 0xE0, 0x70, 0x07, 0x07, 0x00, 0x38, 0x70,
|
||||
0x01, 0xC7, 0x00, 0x0E, 0x7C, 0x00, 0x77, 0xF0, 0x03, 0xFB, 0xC0, 0x1F,
|
||||
0x8F, 0x00, 0xF8, 0x3C, 0x07, 0x80, 0xE0, 0x38, 0x03, 0x81, 0xC0, 0x0E,
|
||||
0x0E, 0x00, 0x38, 0x70, 0x00, 0xE3, 0x80, 0x07, 0x9C, 0x00, 0x1C, 0xE0,
|
||||
0x00, 0x70, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0x70,
|
||||
0x00, 0x37, 0x98, 0x00, 0x3B, 0xCE, 0x00, 0x19, 0xE3, 0x00, 0x1C, 0xF1,
|
||||
0xC0, 0x1C, 0x78, 0x70, 0x0C, 0x3C, 0x18, 0x0E, 0x1E, 0x0E, 0x06, 0x0F,
|
||||
0x03, 0x07, 0x07, 0x81, 0xC3, 0x03, 0xC0, 0x73, 0x01, 0xE0, 0x1B, 0x80,
|
||||
0xF0, 0x0F, 0x80, 0x78, 0x03, 0xC0, 0x3C, 0x01, 0xC0, 0x1E, 0x00, 0x60,
|
||||
0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x01, 0x80, 0xC0,
|
||||
0x00, 0x3E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F,
|
||||
0xC0, 0x03, 0xEE, 0x00, 0x3E, 0xF0, 0x03, 0xE7, 0x00, 0x3E, 0x38, 0x03,
|
||||
0xE1, 0xC0, 0x3E, 0x0E, 0x03, 0xE0, 0xF0, 0x3E, 0x07, 0x03, 0xE0, 0x38,
|
||||
0x3E, 0x01, 0xC3, 0xE0, 0x0E, 0x3E, 0x00, 0xF3, 0xE0, 0x07, 0x3E, 0x00,
|
||||
0x3B, 0xE0, 0x01, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x07, 0xE0,
|
||||
0x00, 0x30, 0x00, 0x3E, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x3C, 0x01, 0xF0, 0x1C, 0x00, 0x1E, 0x0E, 0x00, 0x03, 0x87, 0x00, 0x00,
|
||||
0x71, 0xC0, 0x00, 0x0C, 0xE0, 0x00, 0x03, 0xB8, 0x00, 0x00, 0xEE, 0x00,
|
||||
0x00, 0x1B, 0x00, 0x00, 0x06, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7E,
|
||||
0x00, 0x00, 0x1B, 0x80, 0x00, 0x06, 0xE0, 0x00, 0x03, 0x98, 0x00, 0x00,
|
||||
0xE7, 0x00, 0x00, 0x70, 0xE0, 0x00, 0x3C, 0x3C, 0x00, 0x1E, 0x07, 0x80,
|
||||
0x0F, 0x00, 0xFC, 0x0F, 0x80, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0x80, 0x00,
|
||||
0xFF, 0xC0, 0x1F, 0xFF, 0xC3, 0xFF, 0xFC, 0x70, 0x03, 0xCE, 0x00, 0x1D,
|
||||
0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0x7C, 0x00, 0x0F,
|
||||
0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0D, 0xC0, 0x03, 0xB8, 0x01, 0xE7,
|
||||
0xFF, 0xF8, 0xFF, 0xFC, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E,
|
||||
0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x00,
|
||||
0x00, 0x3E, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0x80,
|
||||
0x3E, 0x01, 0xC0, 0x01, 0xE0, 0x70, 0x00, 0x1C, 0x1C, 0x00, 0x01, 0xC3,
|
||||
0x80, 0x00, 0x18, 0xE0, 0x00, 0x03, 0x9C, 0x00, 0x00, 0x73, 0x80, 0x00,
|
||||
0x06, 0x60, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x1D, 0x80, 0x00, 0x03, 0xB8,
|
||||
0x00, 0x00, 0x67, 0x00, 0x00, 0x0C, 0xE0, 0x00, 0x03, 0x8E, 0x00, 0x00,
|
||||
0x71, 0xC0, 0x00, 0x1C, 0x1C, 0x00, 0x07, 0x83, 0xC0, 0x01, 0xE0, 0x3C,
|
||||
0x00, 0x78, 0x03, 0xF0, 0x3E, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0x80,
|
||||
0x00, 0x00, 0xE0, 0x00, 0x00, 0x0E, 0x03, 0x00, 0x00, 0xF0, 0xE0, 0x00,
|
||||
0x0F, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0xFF,
|
||||
0xFF, 0x0E, 0x00, 0x78, 0xE0, 0x01, 0xCE, 0x00, 0x0E, 0xE0, 0x00, 0xEE,
|
||||
0x00, 0x0E, 0xE0, 0x00, 0x6E, 0x00, 0x06, 0xE0, 0x00, 0xEE, 0x00, 0x0E,
|
||||
0xE0, 0x00, 0xCE, 0x00, 0x1C, 0xE0, 0x07, 0x8F, 0xFF, 0xF0, 0xFF, 0xFC,
|
||||
0x0E, 0x01, 0xC0, 0xE0, 0x0E, 0x0E, 0x00, 0x70, 0xE0, 0x03, 0x0E, 0x00,
|
||||
0x38, 0xE0, 0x01, 0xCE, 0x00, 0x0E, 0xE0, 0x00, 0xE0, 0x01, 0xF0, 0x03,
|
||||
0xFF, 0x83, 0xFF, 0xF9, 0xE0, 0x0C, 0x70, 0x00, 0x38, 0x00, 0x0E, 0x00,
|
||||
0x03, 0x80, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x07, 0x80, 0x00, 0xFE, 0x00,
|
||||
0x0F, 0xF8, 0x00, 0x7F, 0x80, 0x01, 0xF0, 0x00, 0x1E, 0x00, 0x01, 0xC0,
|
||||
0x00, 0x70, 0x00, 0x1C, 0x00, 0x07, 0x80, 0x01, 0xF8, 0x00, 0xEF, 0x80,
|
||||
0xF0, 0xFF, 0xF8, 0x0F, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00,
|
||||
0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00,
|
||||
0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60,
|
||||
0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06,
|
||||
0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0xC0, 0x00, 0x7C,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x66, 0x00, 0x0E, 0x70,
|
||||
0x00, 0xE3, 0x80, 0x1C, 0x3E, 0x07, 0x80, 0xFF, 0xF0, 0x03, 0xFC, 0x00,
|
||||
0xE0, 0x00, 0x03, 0x60, 0x00, 0x07, 0x70, 0x00, 0x06, 0x70, 0x00, 0x0E,
|
||||
0x38, 0x00, 0x0E, 0x38, 0x00, 0x0C, 0x1C, 0x00, 0x1C, 0x1C, 0x00, 0x18,
|
||||
0x0C, 0x00, 0x38, 0x0E, 0x00, 0x30, 0x06, 0x00, 0x70, 0x07, 0x00, 0x70,
|
||||
0x07, 0x00, 0xE0, 0x03, 0x80, 0xE0, 0x03, 0x80, 0xC0, 0x01, 0xC1, 0xC0,
|
||||
0x01, 0xC1, 0x80, 0x00, 0xC3, 0x80, 0x00, 0xE3, 0x00, 0x00, 0x67, 0x00,
|
||||
0x00, 0x77, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3C, 0x00,
|
||||
0x00, 0x1C, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x3B, 0x00, 0x03, 0x80, 0x01,
|
||||
0x9C, 0x00, 0x1C, 0x00, 0x1C, 0xE0, 0x01, 0xF0, 0x00, 0xE3, 0x00, 0x0D,
|
||||
0x80, 0x06, 0x1C, 0x00, 0x6C, 0x00, 0x70, 0xE0, 0x07, 0x70, 0x03, 0x83,
|
||||
0x00, 0x31, 0x80, 0x18, 0x1C, 0x01, 0x8C, 0x01, 0xC0, 0xE0, 0x1C, 0x70,
|
||||
0x0E, 0x03, 0x00, 0xC1, 0x80, 0x60, 0x1C, 0x06, 0x0C, 0x07, 0x00, 0xE0,
|
||||
0x70, 0x70, 0x38, 0x03, 0x03, 0x01, 0x81, 0x80, 0x1C, 0x38, 0x0C, 0x1C,
|
||||
0x00, 0xE1, 0xC0, 0x70, 0xE0, 0x03, 0x0C, 0x01, 0x86, 0x00, 0x1C, 0xE0,
|
||||
0x0E, 0x70, 0x00, 0xE7, 0x00, 0x73, 0x80, 0x03, 0x30, 0x01, 0x98, 0x00,
|
||||
0x1F, 0x80, 0x0F, 0xC0, 0x00, 0xF8, 0x00, 0x7E, 0x00, 0x03, 0xC0, 0x01,
|
||||
0xE0, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x00, 0xE0, 0x00, 0x78, 0x00, 0xE0,
|
||||
0x00, 0x3B, 0x80, 0x03, 0x8E, 0x00, 0x38, 0x70, 0x01, 0xC1, 0xC0, 0x1C,
|
||||
0x07, 0x01, 0xC0, 0x1C, 0x1C, 0x00, 0xE0, 0xE0, 0x03, 0x8E, 0x00, 0x0E,
|
||||
0xE0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x07, 0x70, 0x00, 0x3B, 0x80, 0x03, 0x8E, 0x00, 0x38, 0x38, 0x03, 0x80,
|
||||
0xE0, 0x1C, 0x07, 0x01, 0xC0, 0x1C, 0x1C, 0x00, 0x71, 0xC0, 0x01, 0xCE,
|
||||
0x00, 0x0E, 0xE0, 0x00, 0x38, 0xE0, 0x00, 0x0D, 0x80, 0x00, 0x77, 0x00,
|
||||
0x03, 0x8E, 0x00, 0x0C, 0x38, 0x00, 0x70, 0x70, 0x01, 0x80, 0xC0, 0x0E,
|
||||
0x03, 0x80, 0x70, 0x07, 0x01, 0x80, 0x0C, 0x0E, 0x00, 0x38, 0x70, 0x00,
|
||||
0x71, 0x80, 0x01, 0xCE, 0x00, 0x03, 0xB0, 0x00, 0x07, 0xC0, 0x00, 0x1E,
|
||||
0x00, 0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00,
|
||||
0x00, 0x30, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x0C, 0x00, 0x00,
|
||||
0x30, 0x00, 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xE0, 0x00, 0x1C,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C,
|
||||
0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x0F,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFC, 0x30, 0xC3, 0x0C, 0x30, 0xC3,
|
||||
0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3,
|
||||
0x0C, 0x30, 0xC3, 0x0C, 0x3F, 0xFC, 0xC0, 0x03, 0x80, 0x06, 0x00, 0x18,
|
||||
0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x06, 0x00, 0x18, 0x00, 0x70, 0x00,
|
||||
0xC0, 0x03, 0x00, 0x0E, 0x00, 0x18, 0x00, 0x60, 0x01, 0xC0, 0x03, 0x00,
|
||||
0x0C, 0x00, 0x38, 0x00, 0x60, 0x01, 0x80, 0x07, 0x00, 0x0C, 0x00, 0x30,
|
||||
0x00, 0x60, 0x01, 0x80, 0x06, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xE0, 0x01,
|
||||
0x80, 0x06, 0x00, 0x1C, 0xFF, 0xF0, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30,
|
||||
0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30,
|
||||
0xC3, 0x0C, 0x30, 0xFF, 0xFC, 0x03, 0x00, 0x0E, 0x00, 0x78, 0x01, 0xE0,
|
||||
0x0C, 0xC0, 0x33, 0x01, 0xC6, 0x06, 0x18, 0x18, 0x30, 0xC0, 0xC3, 0x03,
|
||||
0x18, 0x06, 0x60, 0x19, 0x80, 0x3C, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF0, 0xE0, 0x70, 0x38, 0x0C, 0x07, 0x01, 0x00, 0x3F, 0xE1, 0xFF, 0xF3,
|
||||
0x80, 0xE4, 0x00, 0xE0, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, 0x3F,
|
||||
0xFD, 0xF8, 0x1F, 0x00, 0x3E, 0x00, 0x78, 0x00, 0xF0, 0x03, 0xF0, 0x07,
|
||||
0x70, 0x3E, 0xFF, 0xEC, 0x7F, 0x18, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80,
|
||||
0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00,
|
||||
0x00, 0xE3, 0xFC, 0x1D, 0xFF, 0xE3, 0xF0, 0x1E, 0x7C, 0x00, 0xEF, 0x00,
|
||||
0x1D, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0x7C, 0x00,
|
||||
0x0F, 0x80, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x0D, 0xE0, 0x03, 0xBE, 0x00,
|
||||
0xE7, 0x70, 0x7C, 0xE7, 0xFE, 0x1C, 0x7F, 0x80, 0x00, 0x40, 0x0F, 0xFC,
|
||||
0x1F, 0xFE, 0x3C, 0x0F, 0x70, 0x03, 0x60, 0x00, 0xE0, 0x00, 0xC0, 0x00,
|
||||
0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0x70, 0x02, 0x78, 0x07, 0x3C, 0x0F, 0x1F, 0xFE, 0x07, 0xF8, 0x00, 0x00,
|
||||
0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30,
|
||||
0x00, 0x0C, 0x02, 0x03, 0x0F, 0xF8, 0xC7, 0xFF, 0x33, 0xC0, 0xED, 0xC0,
|
||||
0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x01, 0xDC, 0x00, 0xF7,
|
||||
0x80, 0x7C, 0xF0, 0x3B, 0x1F, 0xFC, 0xC1, 0xFC, 0x30, 0x00, 0xC0, 0x03,
|
||||
0xFE, 0x01, 0xFF, 0xC0, 0xE0, 0x38, 0x70, 0x07, 0x38, 0x00, 0xEE, 0x00,
|
||||
0x1B, 0x00, 0x06, 0xC0, 0x01, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||
0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x01, 0xE0, 0x0C, 0x3E, 0x0F, 0x07,
|
||||
0xFF, 0x80, 0x7F, 0x80, 0x07, 0xE0, 0xFF, 0x1E, 0x01, 0xC0, 0x18, 0x01,
|
||||
0x80, 0x18, 0x01, 0x80, 0xFF, 0xEF, 0xFE, 0x18, 0x01, 0x80, 0x18, 0x01,
|
||||
0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01,
|
||||
0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x00, 0x80, 0x01, 0xFF, 0x1C,
|
||||
0x7F, 0xFB, 0x9C, 0x03, 0xF7, 0x00, 0x3F, 0xC0, 0x03, 0xF8, 0x00, 0x3E,
|
||||
0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7E,
|
||||
0x00, 0x1E, 0xC0, 0x03, 0xDC, 0x00, 0xF9, 0xE0, 0x77, 0x1F, 0xFC, 0xE0,
|
||||
0xFF, 0x1C, 0x00, 0x03, 0x00, 0x00, 0x60, 0x00, 0x1C, 0x00, 0x03, 0x9C,
|
||||
0x00, 0xE3, 0xF0, 0xF8, 0x1F, 0xFE, 0x00, 0xFF, 0x00, 0xE0, 0x00, 0x70,
|
||||
0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01,
|
||||
0xC0, 0x80, 0xE7, 0xFC, 0x77, 0xFF, 0x3F, 0x01, 0xDF, 0x00, 0x7F, 0x00,
|
||||
0x3F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8,
|
||||
0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03,
|
||||
0xE0, 0x01, 0xF0, 0x00, 0xC0, 0xFF, 0xA0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0x03, 0x81, 0xC0, 0xE0, 0x20, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0,
|
||||
0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18,
|
||||
0x1F, 0x1D, 0xFE, 0x7C, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03,
|
||||
0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0,
|
||||
0x07, 0x38, 0x03, 0x8E, 0x01, 0xC3, 0x80, 0xE0, 0xE0, 0x70, 0x38, 0x78,
|
||||
0x0E, 0x3C, 0x03, 0x9E, 0x00, 0xEF, 0xC0, 0x3F, 0x38, 0x0F, 0x87, 0x03,
|
||||
0xC1, 0xE0, 0xE0, 0x38, 0x38, 0x07, 0x0E, 0x00, 0xE3, 0x80, 0x1C, 0xE0,
|
||||
0x07, 0xB8, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFC, 0x00, 0x60, 0x01, 0x01, 0xCF, 0xF8, 0x3F, 0xE3, 0xBF, 0xF8,
|
||||
0xFF, 0xE7, 0xE0, 0x7B, 0x81, 0xEF, 0x80, 0x7E, 0x01, 0xDE, 0x00, 0x78,
|
||||
0x01, 0xF8, 0x00, 0xE0, 0x03, 0xF0, 0x01, 0xC0, 0x07, 0xE0, 0x03, 0x80,
|
||||
0x0F, 0xC0, 0x07, 0x00, 0x1F, 0x80, 0x0E, 0x00, 0x3F, 0x00, 0x1C, 0x00,
|
||||
0x7E, 0x00, 0x38, 0x00, 0xFC, 0x00, 0x70, 0x01, 0xF8, 0x00, 0xE0, 0x03,
|
||||
0xF0, 0x01, 0xC0, 0x07, 0xE0, 0x03, 0x80, 0x0F, 0xC0, 0x07, 0x00, 0x1F,
|
||||
0x80, 0x0E, 0x00, 0x38, 0x00, 0x40, 0x73, 0xFE, 0x3B, 0xFF, 0x9F, 0x80,
|
||||
0xEF, 0x80, 0x3F, 0x80, 0x1F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0,
|
||||
0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07,
|
||||
0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x60, 0x00, 0x00, 0x03,
|
||||
0xFF, 0x01, 0xFF, 0xE0, 0xF0, 0x3C, 0x70, 0x03, 0x98, 0x00, 0x6E, 0x00,
|
||||
0x1F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03,
|
||||
0xE0, 0x01, 0xF8, 0x00, 0x77, 0x00, 0x39, 0xE0, 0x1E, 0x3C, 0x0F, 0x07,
|
||||
0xFF, 0x80, 0x7F, 0x80, 0x00, 0x00, 0x1C, 0x7F, 0x83, 0xBF, 0xFC, 0x7E,
|
||||
0x03, 0xCF, 0x80, 0x1D, 0xE0, 0x03, 0xBC, 0x00, 0x3F, 0x00, 0x07, 0xE0,
|
||||
0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xE0,
|
||||
0x01, 0xBC, 0x00, 0x77, 0xC0, 0x1C, 0xEE, 0x0F, 0x9C, 0xFF, 0xC3, 0x8F,
|
||||
0xF0, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x80, 0x03, 0xFE, 0x31, 0xFF,
|
||||
0xCC, 0xF0, 0x3B, 0x70, 0x03, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x00, 0x07,
|
||||
0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xE0, 0x01, 0xF8,
|
||||
0x00, 0x77, 0x00, 0x3D, 0xE0, 0x1F, 0x3C, 0x0E, 0xC7, 0xFF, 0x30, 0x7F,
|
||||
0x0C, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x03,
|
||||
0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x79, 0xFE, 0xFF, 0xF0, 0xF8, 0x3C,
|
||||
0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03,
|
||||
0x80, 0xE0, 0x38, 0x0E, 0x00, 0x01, 0x00, 0x3F, 0xF0, 0xFF, 0xF3, 0x80,
|
||||
0x66, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x7E, 0x00, 0x3F, 0xC0,
|
||||
0x1F, 0xE0, 0x01, 0xE0, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0xA0, 0x07, 0xF0,
|
||||
0x1C, 0xFF, 0xF0, 0x7F, 0xC0, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0xFF,
|
||||
0xEF, 0xFE, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x18,
|
||||
0x01, 0x80, 0x18, 0x01, 0x80, 0x18, 0x01, 0x80, 0x1C, 0x01, 0xE0, 0x0F,
|
||||
0xF0, 0x7E, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00,
|
||||
0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8,
|
||||
0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3B, 0x80, 0x3D, 0xC0, 0x1E, 0x78, 0x3B,
|
||||
0x1F, 0xF9, 0x87, 0xF8, 0xC0, 0xE0, 0x00, 0xEC, 0x00, 0x19, 0xC0, 0x07,
|
||||
0x18, 0x00, 0xC3, 0x80, 0x38, 0x30, 0x06, 0x07, 0x01, 0xC0, 0x60, 0x30,
|
||||
0x0E, 0x06, 0x01, 0xC1, 0xC0, 0x18, 0x30, 0x03, 0x8E, 0x00, 0x31, 0x80,
|
||||
0x07, 0x70, 0x00, 0x6C, 0x00, 0x0F, 0x80, 0x00, 0xE0, 0x00, 0x1C, 0x00,
|
||||
0x60, 0x03, 0x80, 0x0D, 0x80, 0x0E, 0x00, 0x77, 0x00, 0x7C, 0x01, 0x8C,
|
||||
0x01, 0xB0, 0x06, 0x30, 0x0E, 0xC0, 0x38, 0xE0, 0x33, 0x80, 0xC1, 0x80,
|
||||
0xC6, 0x03, 0x07, 0x07, 0x18, 0x1C, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x60,
|
||||
0xC3, 0x80, 0xE3, 0x03, 0x8C, 0x01, 0x8C, 0x06, 0x30, 0x06, 0x70, 0x19,
|
||||
0xC0, 0x1D, 0x80, 0x76, 0x00, 0x36, 0x00, 0xD8, 0x00, 0xF8, 0x03, 0xC0,
|
||||
0x01, 0xC0, 0x07, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x60, 0x07, 0x38, 0x07,
|
||||
0x0E, 0x03, 0x03, 0x83, 0x80, 0xE3, 0x80, 0x33, 0x80, 0x1D, 0x80, 0x07,
|
||||
0xC0, 0x01, 0xC0, 0x01, 0xE0, 0x01, 0xF8, 0x00, 0xCE, 0x00, 0xE3, 0x80,
|
||||
0xE0, 0xE0, 0xE0, 0x30, 0x60, 0x1C, 0x70, 0x07, 0x70, 0x01, 0xC0, 0x70,
|
||||
0x00, 0x73, 0x00, 0x06, 0x38, 0x00, 0xE1, 0x80, 0x0C, 0x1C, 0x01, 0xC0,
|
||||
0xC0, 0x18, 0x0E, 0x03, 0x80, 0x60, 0x30, 0x07, 0x03, 0x00, 0x70, 0x70,
|
||||
0x03, 0x06, 0x00, 0x38, 0xE0, 0x01, 0x8C, 0x00, 0x1D, 0xC0, 0x00, 0xD8,
|
||||
0x00, 0x0F, 0x80, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x06,
|
||||
0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x63, 0x80, 0x0F, 0xF8, 0x00, 0x3E,
|
||||
0x00, 0x00, 0x7F, 0xFE, 0xFF, 0xFC, 0x00, 0x70, 0x00, 0xC0, 0x03, 0x80,
|
||||
0x0E, 0x00, 0x38, 0x00, 0xE0, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70,
|
||||
0x01, 0xC0, 0x03, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xFF, 0xFF, 0xFF, 0xFC,
|
||||
0x07, 0x87, 0xC7, 0x03, 0x81, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
|
||||
0x03, 0x01, 0x80, 0xC0, 0x61, 0xF0, 0xF0, 0x3C, 0x06, 0x03, 0x01, 0x80,
|
||||
0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xE0, 0x78, 0x1F,
|
||||
0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF0,
|
||||
0x7C, 0x0E, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03,
|
||||
0x81, 0xC0, 0xE0, 0x70, 0x1F, 0x07, 0x87, 0x07, 0x03, 0x81, 0xC0, 0xE0,
|
||||
0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0xE1, 0xF0, 0xE0,
|
||||
0x00, 0x3E, 0x03, 0x7F, 0x03, 0x63, 0x83, 0xC1, 0xEE, 0xC0, 0x7C };
|
||||
|
||||
const GFXglyph Montserrat_Regular18pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 9, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 3, 25, 9, 3, -24 }, // 0x21 '!'
|
||||
{ 11, 9, 10, 13, 2, -24 }, // 0x22 '"'
|
||||
{ 23, 22, 25, 24, 1, -24 }, // 0x23 '#'
|
||||
{ 92, 18, 33, 22, 2, -28 }, // 0x24 '$'
|
||||
{ 167, 27, 25, 29, 1, -24 }, // 0x25 '%'
|
||||
{ 252, 21, 25, 23, 2, -24 }, // 0x26 '&'
|
||||
{ 318, 3, 10, 7, 2, -24 }, // 0x27 '''
|
||||
{ 322, 6, 33, 12, 4, -25 }, // 0x28 '('
|
||||
{ 347, 7, 33, 12, 1, -25 }, // 0x29 ')'
|
||||
{ 376, 12, 13, 14, 1, -25 }, // 0x2A '*'
|
||||
{ 396, 16, 15, 20, 2, -19 }, // 0x2B '+'
|
||||
{ 426, 4, 9, 7, 2, -3 }, // 0x2C ','
|
||||
{ 431, 9, 3, 13, 2, -10 }, // 0x2D '-'
|
||||
{ 435, 4, 4, 7, 2, -3 }, // 0x2E '.'
|
||||
{ 437, 14, 33, 12, -1, -28 }, // 0x2F '/'
|
||||
{ 495, 19, 25, 23, 2, -24 }, // 0x30 '0'
|
||||
{ 555, 9, 25, 13, 0, -24 }, // 0x31 '1'
|
||||
{ 584, 18, 25, 20, 1, -24 }, // 0x32 '2'
|
||||
{ 641, 18, 25, 20, 0, -24 }, // 0x33 '3'
|
||||
{ 698, 22, 25, 23, 1, -24 }, // 0x34 '4'
|
||||
{ 767, 17, 25, 20, 1, -24 }, // 0x35 '5'
|
||||
{ 821, 18, 25, 21, 2, -24 }, // 0x36 '6'
|
||||
{ 878, 18, 25, 21, 1, -24 }, // 0x37 '7'
|
||||
{ 935, 19, 25, 22, 2, -24 }, // 0x38 '8'
|
||||
{ 995, 19, 25, 21, 1, -24 }, // 0x39 '9'
|
||||
{ 1055, 4, 19, 7, 2, -18 }, // 0x3A ':'
|
||||
{ 1065, 4, 24, 7, 2, -18 }, // 0x3B ';'
|
||||
{ 1077, 16, 15, 20, 2, -19 }, // 0x3C '<'
|
||||
{ 1107, 16, 10, 20, 2, -16 }, // 0x3D '='
|
||||
{ 1127, 16, 15, 20, 2, -19 }, // 0x3E '>'
|
||||
{ 1157, 17, 25, 20, 0, -24 }, // 0x3F '?'
|
||||
{ 1211, 32, 32, 36, 2, -24 }, // 0x40 '@'
|
||||
{ 1339, 25, 25, 25, 0, -24 }, // 0x41 'A'
|
||||
{ 1418, 20, 25, 26, 4, -24 }, // 0x42 'B'
|
||||
{ 1481, 22, 25, 25, 2, -24 }, // 0x43 'C'
|
||||
{ 1550, 23, 25, 29, 4, -24 }, // 0x44 'D'
|
||||
{ 1622, 17, 25, 23, 4, -24 }, // 0x45 'E'
|
||||
{ 1676, 17, 25, 22, 4, -24 }, // 0x46 'F'
|
||||
{ 1730, 22, 25, 27, 2, -24 }, // 0x47 'G'
|
||||
{ 1799, 20, 25, 28, 4, -24 }, // 0x48 'H'
|
||||
{ 1862, 3, 25, 11, 4, -24 }, // 0x49 'I'
|
||||
{ 1872, 14, 25, 18, 0, -24 }, // 0x4A 'J'
|
||||
{ 1916, 21, 25, 25, 4, -24 }, // 0x4B 'K'
|
||||
{ 1982, 16, 25, 21, 4, -24 }, // 0x4C 'L'
|
||||
{ 2032, 25, 25, 33, 4, -24 }, // 0x4D 'M'
|
||||
{ 2111, 20, 25, 28, 4, -24 }, // 0x4E 'N'
|
||||
{ 2174, 26, 25, 29, 2, -24 }, // 0x4F 'O'
|
||||
{ 2256, 19, 25, 25, 4, -24 }, // 0x50 'P'
|
||||
{ 2316, 27, 30, 29, 2, -24 }, // 0x51 'Q'
|
||||
{ 2418, 20, 25, 25, 4, -24 }, // 0x52 'R'
|
||||
{ 2481, 18, 25, 22, 2, -24 }, // 0x53 'S'
|
||||
{ 2538, 20, 25, 20, 0, -24 }, // 0x54 'T'
|
||||
{ 2601, 20, 25, 28, 4, -24 }, // 0x55 'U'
|
||||
{ 2664, 24, 25, 24, 0, -24 }, // 0x56 'V'
|
||||
{ 2739, 37, 25, 39, 1, -24 }, // 0x57 'W'
|
||||
{ 2855, 21, 25, 23, 1, -24 }, // 0x58 'X'
|
||||
{ 2921, 22, 25, 22, 0, -24 }, // 0x59 'Y'
|
||||
{ 2990, 20, 25, 23, 2, -24 }, // 0x5A 'Z'
|
||||
{ 3053, 6, 33, 11, 4, -25 }, // 0x5B '['
|
||||
{ 3078, 14, 33, 12, -1, -28 }, // 0x5C '\'
|
||||
{ 3136, 6, 33, 11, 1, -25 }, // 0x5D ']'
|
||||
{ 3161, 14, 15, 20, 3, -19 }, // 0x5E '^'
|
||||
{ 3188, 18, 2, 18, 0, 1 }, // 0x5F '_'
|
||||
{ 3193, 8, 5, 21, 5, -25 }, // 0x60 '`'
|
||||
{ 3198, 15, 19, 21, 2, -18 }, // 0x61 'a'
|
||||
{ 3234, 19, 26, 24, 3, -25 }, // 0x62 'b'
|
||||
{ 3296, 16, 19, 20, 2, -18 }, // 0x63 'c'
|
||||
{ 3334, 18, 26, 24, 2, -25 }, // 0x64 'd'
|
||||
{ 3393, 18, 19, 21, 2, -18 }, // 0x65 'e'
|
||||
{ 3436, 12, 26, 12, 1, -25 }, // 0x66 'f'
|
||||
{ 3475, 19, 26, 24, 2, -18 }, // 0x67 'g'
|
||||
{ 3537, 17, 26, 24, 3, -25 }, // 0x68 'h'
|
||||
{ 3593, 3, 26, 9, 3, -25 }, // 0x69 'i'
|
||||
{ 3603, 9, 33, 10, -3, -25 }, // 0x6A 'j'
|
||||
{ 3641, 18, 26, 21, 3, -25 }, // 0x6B 'k'
|
||||
{ 3700, 3, 26, 9, 3, -25 }, // 0x6C 'l'
|
||||
{ 3710, 31, 19, 37, 3, -18 }, // 0x6D 'm'
|
||||
{ 3784, 17, 19, 24, 3, -18 }, // 0x6E 'n'
|
||||
{ 3825, 18, 19, 22, 2, -18 }, // 0x6F 'o'
|
||||
{ 3868, 19, 26, 24, 3, -18 }, // 0x70 'p'
|
||||
{ 3930, 18, 26, 24, 2, -18 }, // 0x71 'q'
|
||||
{ 3989, 10, 19, 14, 3, -18 }, // 0x72 'r'
|
||||
{ 4013, 15, 19, 17, 1, -18 }, // 0x73 's'
|
||||
{ 4049, 12, 22, 14, 1, -21 }, // 0x74 't'
|
||||
{ 4082, 17, 18, 24, 3, -17 }, // 0x75 'u'
|
||||
{ 4121, 19, 18, 19, 0, -17 }, // 0x76 'v'
|
||||
{ 4164, 30, 18, 31, 0, -17 }, // 0x77 'w'
|
||||
{ 4232, 17, 18, 19, 1, -17 }, // 0x78 'x'
|
||||
{ 4271, 20, 25, 19, -1, -17 }, // 0x79 'y'
|
||||
{ 4334, 15, 18, 18, 1, -17 }, // 0x7A 'z'
|
||||
{ 4368, 9, 33, 12, 2, -25 }, // 0x7B '{'
|
||||
{ 4406, 2, 33, 10, 4, -25 }, // 0x7C '|'
|
||||
{ 4415, 9, 33, 12, 1, -25 }, // 0x7D '}'
|
||||
{ 4453, 16, 5, 20, 2, -14 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Regular18pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Regular18pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Regular18pt7bGlyphs,
|
||||
0x20, 0x7E, 43 };
|
||||
|
||||
// Approx. 5135 bytes
|
||||
|
||||
#endif // MONTSERRAT18PT7B_H
|
||||
@@ -1,568 +0,0 @@
|
||||
#ifndef MONTSERRAT20PT7B_H
|
||||
#define MONTSERRAT20PT7B_H
|
||||
const uint8_t Montserrat_Regular20pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0x77, 0x77, 0x76, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x00,
|
||||
0x06, 0xFF, 0x70, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
|
||||
0xC1, 0xE0, 0xC0, 0x00, 0xC0, 0x30, 0x00, 0x60, 0x18, 0x00, 0x30, 0x0C,
|
||||
0x00, 0x18, 0x06, 0x00, 0x0C, 0x03, 0x00, 0x0E, 0x01, 0x80, 0x06, 0x01,
|
||||
0xC0, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x80, 0xC0, 0x30, 0x00, 0x60,
|
||||
0x18, 0x00, 0x30, 0x0C, 0x00, 0x18, 0x06, 0x00, 0x1C, 0x03, 0x00, 0x0C,
|
||||
0x03, 0x80, 0x06, 0x01, 0x80, 0x03, 0x00, 0xC0, 0x7F, 0xFF, 0xFF, 0xBF,
|
||||
0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xE0, 0x30, 0x0C, 0x00, 0x38, 0x06, 0x00,
|
||||
0x18, 0x07, 0x00, 0x0C, 0x03, 0x00, 0x06, 0x01, 0x80, 0x03, 0x00, 0xC0,
|
||||
0x01, 0x80, 0x60, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00,
|
||||
0x06, 0x00, 0x00, 0x70, 0x00, 0x7F, 0xF0, 0x1F, 0xFF, 0xC3, 0xE6, 0x3E,
|
||||
0x78, 0x60, 0x47, 0x06, 0x00, 0x70, 0x60, 0x0E, 0x06, 0x00, 0xE0, 0x60,
|
||||
0x07, 0x06, 0x00, 0x70, 0x60, 0x07, 0xC6, 0x00, 0x3F, 0x60, 0x00, 0xFF,
|
||||
0x00, 0x03, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x67, 0xE0, 0x06, 0x1E, 0x00,
|
||||
0x60, 0xF0, 0x06, 0x07, 0x00, 0x60, 0x70, 0x06, 0x07, 0x00, 0x60, 0x7C,
|
||||
0x06, 0x0F, 0xF0, 0x61, 0xE7, 0xE6, 0x7C, 0x3F, 0xFF, 0x80, 0x7F, 0xE0,
|
||||
0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x18, 0x1E, 0x70, 0x01, 0x80,
|
||||
0xC0, 0xC0, 0x1C, 0x0C, 0x06, 0x00, 0xC0, 0x60, 0x18, 0x0C, 0x03, 0x00,
|
||||
0xC0, 0xE0, 0x18, 0x06, 0x06, 0x00, 0xC0, 0x30, 0x60, 0x06, 0x01, 0x87,
|
||||
0x00, 0x30, 0x0C, 0x30, 0x01, 0x80, 0xC3, 0x00, 0x06, 0x0E, 0x38, 0x00,
|
||||
0x3F, 0xE1, 0x81, 0x80, 0x7E, 0x18, 0x7F, 0x00, 0x01, 0xC7, 0x1C, 0x00,
|
||||
0x0C, 0x70, 0x70, 0x00, 0xC3, 0x01, 0x80, 0x0E, 0x18, 0x0C, 0x00, 0xE1,
|
||||
0x80, 0x30, 0x06, 0x0C, 0x01, 0x80, 0x60, 0x60, 0x0C, 0x07, 0x03, 0x00,
|
||||
0x60, 0x30, 0x0C, 0x06, 0x03, 0x00, 0x60, 0x30, 0x38, 0x01, 0x83, 0x81,
|
||||
0x80, 0x0F, 0xF8, 0x18, 0x00, 0x1F, 0x00, 0x00, 0x20, 0x00, 0x03, 0xFC,
|
||||
0x00, 0x07, 0xFE, 0x00, 0x0E, 0x07, 0x00, 0x0C, 0x03, 0x00, 0x1C, 0x03,
|
||||
0x80, 0x1C, 0x03, 0x80, 0x1C, 0x03, 0x00, 0x0C, 0x07, 0x00, 0x0E, 0x0E,
|
||||
0x00, 0x07, 0x1C, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x1E, 0x78, 0x00, 0x38, 0x3C, 0x0C, 0x70, 0x1E,
|
||||
0x1C, 0xE0, 0x0F, 0x1C, 0xE0, 0x07, 0x98, 0xE0, 0x03, 0xF8, 0xE0, 0x01,
|
||||
0xF0, 0xE0, 0x00, 0xF0, 0xE0, 0x00, 0xF8, 0x70, 0x01, 0xFC, 0x3C, 0x0F,
|
||||
0x9E, 0x1F, 0xFF, 0x0E, 0x07, 0xFC, 0x06, 0xFF, 0xFF, 0xF0, 0x0E, 0x18,
|
||||
0x70, 0xE3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0x83, 0x0E, 0x1C, 0x38, 0x70,
|
||||
0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0xC1, 0xC3, 0x87, 0x06,
|
||||
0x0E, 0x1C, 0x18, 0x38, 0x70, 0x70, 0x60, 0xC1, 0xC1, 0xC3, 0x83, 0x07,
|
||||
0x0E, 0x0C, 0x1C, 0x38, 0x70, 0x60, 0xC1, 0xC3, 0x87, 0x0E, 0x1C, 0x38,
|
||||
0x70, 0xE1, 0xC3, 0x87, 0x0C, 0x38, 0x70, 0xE1, 0xC3, 0x0E, 0x1C, 0x30,
|
||||
0xE1, 0x87, 0x0C, 0x00, 0x02, 0x00, 0x10, 0x00, 0x81, 0x84, 0x3F, 0x27,
|
||||
0x9D, 0x70, 0x3E, 0x01, 0xF0, 0x3F, 0xE7, 0x93, 0xF8, 0x86, 0x04, 0x00,
|
||||
0x20, 0x01, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x30, 0x00,
|
||||
0x18, 0x00, 0x0C, 0x00, 0x06, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x03,
|
||||
0x00, 0x01, 0x80, 0x00, 0x7F, 0xF7, 0x76, 0x66, 0xCC, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x80, 0x7F, 0xF7, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x60,
|
||||
0x01, 0xC0, 0x03, 0x80, 0x06, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x60, 0x01,
|
||||
0xC0, 0x03, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x30, 0x00, 0x60, 0x01, 0xC0,
|
||||
0x03, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x30, 0x00, 0xE0, 0x01, 0xC0, 0x03,
|
||||
0x00, 0x0E, 0x00, 0x1C, 0x00, 0x30, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x00,
|
||||
0x0E, 0x00, 0x18, 0x00, 0x30, 0x00, 0xE0, 0x01, 0x80, 0x03, 0x00, 0x0E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xF8, 0x03, 0xC1,
|
||||
0xF0, 0x1E, 0x01, 0xE0, 0xE0, 0x03, 0xC3, 0x80, 0x07, 0x1C, 0x00, 0x0E,
|
||||
0x70, 0x00, 0x39, 0x80, 0x00, 0xEE, 0x00, 0x01, 0xB8, 0x00, 0x07, 0xE0,
|
||||
0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00,
|
||||
0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0x9C, 0x00, 0x0E, 0x70, 0x00, 0x39,
|
||||
0xC0, 0x01, 0xE3, 0x80, 0x07, 0x0F, 0x00, 0x3C, 0x1E, 0x01, 0xE0, 0x3F,
|
||||
0x3F, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0x80, 0xFF, 0xFF, 0xF0, 0x1C, 0x07,
|
||||
0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0,
|
||||
0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C,
|
||||
0x07, 0x01, 0xC0, 0x70, 0x1C, 0x00, 0x40, 0x00, 0xFF, 0xE0, 0x3F, 0xFF,
|
||||
0x07, 0xC0, 0xF8, 0xF0, 0x03, 0xC4, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x1C, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00,
|
||||
0x03, 0x80, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00,
|
||||
0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00,
|
||||
0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xF7, 0xFF, 0xFF, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x3C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x3C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0x00,
|
||||
0x0F, 0xFC, 0x00, 0x03, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x00, 0x07,
|
||||
0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x60, 0x00,
|
||||
0xEF, 0x80, 0x1E, 0x7F, 0x1F, 0xC1, 0xFF, 0xF8, 0x07, 0xFE, 0x00, 0x00,
|
||||
0x07, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03,
|
||||
0x80, 0x00, 0x0F, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0,
|
||||
0x00, 0x07, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x38, 0x0E, 0x00, 0xE0, 0x1C,
|
||||
0x03, 0x80, 0x38, 0x0E, 0x00, 0x70, 0x3C, 0x00, 0xE0, 0x70, 0x01, 0xC1,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1C, 0x00,
|
||||
0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x03, 0x80, 0x00, 0x07, 0x00, 0x1F, 0xFF, 0xC1, 0xFF, 0xFC, 0x1C, 0x00,
|
||||
0x01, 0x80, 0x00, 0x18, 0x00, 0x01, 0x80, 0x00, 0x38, 0x00, 0x03, 0x80,
|
||||
0x00, 0x38, 0x00, 0x03, 0x80, 0x00, 0x38, 0x00, 0x03, 0xFF, 0xC0, 0x3F,
|
||||
0xFF, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xE0,
|
||||
0x00, 0x0E, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x60, 0x00, 0x0E,
|
||||
0x40, 0x01, 0xEF, 0x00, 0x3C, 0x7F, 0x1F, 0x83, 0xFF, 0xF0, 0x07, 0xFC,
|
||||
0x00, 0x00, 0x0C, 0x00, 0x0F, 0xFE, 0x01, 0xFF, 0xF8, 0x1F, 0x01, 0x81,
|
||||
0xE0, 0x00, 0x1E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0x70, 0x00,
|
||||
0x03, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x1F, 0xF0, 0x73,
|
||||
0xFF, 0xE3, 0xBC, 0x0F, 0x9F, 0x80, 0x1C, 0xF8, 0x00, 0x77, 0x80, 0x03,
|
||||
0xBC, 0x00, 0x0C, 0xE0, 0x00, 0x77, 0x00, 0x03, 0xB8, 0x00, 0x18, 0xE0,
|
||||
0x01, 0xC7, 0x00, 0x0E, 0x1C, 0x00, 0xE0, 0x78, 0x1E, 0x01, 0xFF, 0xE0,
|
||||
0x03, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7E, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x01, 0xC0, 0x00, 0x1C, 0x00,
|
||||
0x03, 0x80, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x0E, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xC0, 0x00, 0x1C, 0x00, 0x03, 0x80,
|
||||
0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x00, 0xE0,
|
||||
0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x00,
|
||||
0x20, 0x00, 0x3F, 0xF8, 0x07, 0xFF, 0xF0, 0x7C, 0x07, 0xC3, 0x80, 0x0E,
|
||||
0x38, 0x00, 0x39, 0xC0, 0x01, 0xCE, 0x00, 0x0E, 0x70, 0x00, 0x73, 0x80,
|
||||
0x03, 0x9E, 0x00, 0x38, 0x78, 0x03, 0xC1, 0xF8, 0xFC, 0x03, 0xFF, 0x80,
|
||||
0x7F, 0xFF, 0x07, 0x80, 0x7C, 0x78, 0x00, 0xF7, 0x80, 0x03, 0xB8, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xEE,
|
||||
0x00, 0x0E, 0x78, 0x00, 0xF1, 0xF0, 0x1F, 0x07, 0xFF, 0xF0, 0x0F, 0xFE,
|
||||
0x00, 0x00, 0x60, 0x00, 0x3F, 0xF0, 0x07, 0xFF, 0xC0, 0x78, 0x0F, 0x07,
|
||||
0x80, 0x1C, 0x38, 0x00, 0x73, 0x80, 0x03, 0x9C, 0x00, 0x0E, 0xE0, 0x00,
|
||||
0x77, 0x00, 0x03, 0xB8, 0x00, 0x1C, 0xE0, 0x01, 0xF7, 0x00, 0x1F, 0x9C,
|
||||
0x01, 0xDC, 0xFE, 0x7C, 0xE1, 0xFF, 0xC7, 0x03, 0xF8, 0x38, 0x00, 0x01,
|
||||
0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00,
|
||||
0x03, 0x80, 0x00, 0x38, 0x00, 0x07, 0x81, 0xC0, 0xF8, 0x0F, 0xFF, 0x80,
|
||||
0x3F, 0xF0, 0x00, 0x7F, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
|
||||
0xFF, 0x70, 0x7F, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
|
||||
0x77, 0x66, 0x6C, 0xC0, 0x00, 0x00, 0x80, 0x01, 0xC0, 0x07, 0xE0, 0x0F,
|
||||
0xC0, 0x3F, 0x00, 0x7E, 0x01, 0xF8, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x7C,
|
||||
0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x3E,
|
||||
0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
|
||||
0xFF, 0xE0, 0x00, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x07, 0xE0, 0x00, 0xFC,
|
||||
0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0x80, 0x0F, 0xC0,
|
||||
0x1F, 0x80, 0x7E, 0x00, 0xFC, 0x03, 0xF0, 0x03, 0xE0, 0x01, 0x80, 0x00,
|
||||
0x00, 0x60, 0x00, 0xFF, 0xC0, 0x7F, 0xFE, 0x3E, 0x03, 0xEF, 0x00, 0x1E,
|
||||
0x40, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C,
|
||||
0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x80,
|
||||
0x00, 0xE0, 0x00, 0x38, 0x00, 0x0F, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00,
|
||||
0x0F, 0x00, 0x01, 0xE0, 0x00, 0x38, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
|
||||
0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xDF, 0xE0, 0x00, 0x1F, 0x00, 0x07,
|
||||
0x80, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x0E, 0x00,
|
||||
0x00, 0x03, 0x01, 0xC0, 0x00, 0x00, 0x18, 0x18, 0x01, 0xF8, 0x71, 0xC3,
|
||||
0x00, 0xFF, 0xE7, 0x0C, 0x30, 0x1F, 0x1F, 0x70, 0x66, 0x03, 0xC0, 0x3F,
|
||||
0x06, 0x60, 0x78, 0x01, 0xF0, 0x76, 0x07, 0x00, 0x0F, 0x03, 0xE0, 0xE0,
|
||||
0x00, 0x70, 0x3C, 0x0E, 0x00, 0x07, 0x03, 0xC0, 0xE0, 0x00, 0x70, 0x3C,
|
||||
0x0E, 0x00, 0x07, 0x03, 0xC0, 0xE0, 0x00, 0x70, 0x3C, 0x0E, 0x00, 0x07,
|
||||
0x03, 0xC0, 0xE0, 0x00, 0x70, 0x3C, 0x0E, 0x00, 0x07, 0x03, 0xE0, 0x70,
|
||||
0x00, 0xF0, 0x36, 0x07, 0x00, 0x0F, 0x06, 0x60, 0x38, 0x03, 0xF0, 0x67,
|
||||
0x01, 0xE0, 0x73, 0x8E, 0x30, 0x0F, 0xFE, 0x3F, 0xC3, 0x80, 0x3F, 0x81,
|
||||
0xF8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x07, 0x00,
|
||||
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x40, 0x00,
|
||||
0x07, 0xE0, 0x7C, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xC0,
|
||||
0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00,
|
||||
0x01, 0xF8, 0x00, 0x00, 0x39, 0xC0, 0x00, 0x03, 0x9C, 0x00, 0x00, 0x70,
|
||||
0xE0, 0x00, 0x07, 0x0E, 0x00, 0x00, 0x60, 0x60, 0x00, 0x0E, 0x07, 0x00,
|
||||
0x00, 0xC0, 0x70, 0x00, 0x1C, 0x03, 0x80, 0x01, 0xC0, 0x38, 0x00, 0x38,
|
||||
0x01, 0xC0, 0x03, 0x80, 0x1C, 0x00, 0x70, 0x00, 0xE0, 0x07, 0x00, 0x0E,
|
||||
0x00, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, 0x1C,
|
||||
0x00, 0x03, 0x81, 0xC0, 0x00, 0x38, 0x38, 0x00, 0x01, 0xC3, 0x80, 0x00,
|
||||
0x1C, 0x70, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x70,
|
||||
0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xC3, 0x80, 0x07, 0xC7, 0x00, 0x03, 0xCE,
|
||||
0x00, 0x03, 0x9C, 0x00, 0x03, 0xB8, 0x00, 0x07, 0x70, 0x00, 0x0E, 0xE0,
|
||||
0x00, 0x1D, 0xC0, 0x00, 0x73, 0x80, 0x01, 0xE7, 0x00, 0x0F, 0x8F, 0xFF,
|
||||
0xFC, 0x1F, 0xFF, 0xFC, 0x38, 0x00, 0xFE, 0x70, 0x00, 0x1E, 0xE0, 0x00,
|
||||
0x1F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00,
|
||||
0xFC, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x1E, 0xE0, 0x03, 0xF9,
|
||||
0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00, 0x00, 0x7F, 0xF0,
|
||||
0x01, 0xFF, 0xFC, 0x07, 0xE0, 0x3E, 0x0F, 0x80, 0x0F, 0x1E, 0x00, 0x02,
|
||||
0x3C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00,
|
||||
0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00,
|
||||
0x1C, 0x00, 0x02, 0x1E, 0x00, 0x07, 0x0F, 0x80, 0x0F, 0x07, 0xF8, 0xFE,
|
||||
0x01, 0xFF, 0xF8, 0x00, 0x7F, 0xE0, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xF8,
|
||||
0x0E, 0x00, 0x3F, 0x83, 0x80, 0x01, 0xF0, 0xE0, 0x00, 0x1E, 0x38, 0x00,
|
||||
0x03, 0xCE, 0x00, 0x00, 0x73, 0x80, 0x00, 0x0E, 0xE0, 0x00, 0x03, 0xB8,
|
||||
0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01,
|
||||
0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00,
|
||||
0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3B, 0x80, 0x00, 0x0E, 0xE0,
|
||||
0x00, 0x07, 0x38, 0x00, 0x03, 0xCE, 0x00, 0x01, 0xE3, 0x80, 0x01, 0xF0,
|
||||
0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF,
|
||||
0xEF, 0xFF, 0xFE, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0,
|
||||
0x00, 0x0E, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0xE0, 0x00, 0x0E,
|
||||
0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
|
||||
0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00,
|
||||
0x01, 0xFF, 0xFF, 0x3F, 0xFF, 0xE7, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00,
|
||||
0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00,
|
||||
0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x7F, 0xFF, 0x00, 0xFC, 0x07, 0xE0,
|
||||
0xF8, 0x00, 0x78, 0xF0, 0x00, 0x18, 0xF0, 0x00, 0x00, 0x70, 0x00, 0x00,
|
||||
0x70, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1C, 0x00, 0x00,
|
||||
0x0E, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x80, 0x00, 0x0D, 0xC0, 0x00,
|
||||
0x06, 0xE0, 0x00, 0x03, 0x70, 0x00, 0x01, 0x9C, 0x00, 0x00, 0xCE, 0x00,
|
||||
0x00, 0x67, 0x80, 0x00, 0x31, 0xC0, 0x00, 0x18, 0x70, 0x00, 0x0C, 0x3C,
|
||||
0x00, 0x06, 0x0F, 0x80, 0x0F, 0x01, 0xFC, 0x3F, 0x80, 0x7F, 0xFF, 0x00,
|
||||
0x07, 0xFC, 0x00, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F,
|
||||
0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0,
|
||||
0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00,
|
||||
0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x38, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFE, 0x7F, 0xFC,
|
||||
0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00,
|
||||
0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03,
|
||||
0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE8,
|
||||
0x01, 0xD0, 0x03, 0xF8, 0x0E, 0x7C, 0x7C, 0x7F, 0xF0, 0x3F, 0x80, 0xE0,
|
||||
0x00, 0x1C, 0xE0, 0x00, 0x38, 0xE0, 0x00, 0x70, 0xE0, 0x00, 0xE0, 0xE0,
|
||||
0x01, 0xC0, 0xE0, 0x03, 0x80, 0xE0, 0x07, 0x00, 0xE0, 0x0E, 0x00, 0xE0,
|
||||
0x1C, 0x00, 0xE0, 0x38, 0x00, 0xE0, 0x70, 0x00, 0xE0, 0xE0, 0x00, 0xE1,
|
||||
0xE0, 0x00, 0xE3, 0xF0, 0x00, 0xE7, 0xF8, 0x00, 0xEF, 0x3C, 0x00, 0xFE,
|
||||
0x1E, 0x00, 0xFC, 0x0E, 0x00, 0xF8, 0x07, 0x00, 0xF0, 0x03, 0x80, 0xE0,
|
||||
0x03, 0xC0, 0xE0, 0x01, 0xE0, 0xE0, 0x00, 0xF0, 0xE0, 0x00, 0x78, 0xE0,
|
||||
0x00, 0x38, 0xE0, 0x00, 0x1C, 0xE0, 0x00, 0x0E, 0xE0, 0x00, 0x1C, 0x00,
|
||||
0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00,
|
||||
0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00,
|
||||
0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x38, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x80, 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F,
|
||||
0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0xFF, 0xB8,
|
||||
0x00, 0x0E, 0xFC, 0xC0, 0x00, 0x77, 0xE7, 0x00, 0x07, 0x3F, 0x1C, 0x00,
|
||||
0x39, 0xF8, 0xE0, 0x03, 0x8F, 0xC3, 0x80, 0x18, 0x7E, 0x1C, 0x01, 0xC3,
|
||||
0xF0, 0x70, 0x1C, 0x1F, 0x81, 0xC0, 0xE0, 0xFC, 0x0E, 0x0E, 0x07, 0xE0,
|
||||
0x38, 0x60, 0x3F, 0x01, 0xC7, 0x01, 0xF8, 0x07, 0x30, 0x0F, 0xC0, 0x1B,
|
||||
0x80, 0x7E, 0x00, 0xF8, 0x03, 0xF0, 0x03, 0xC0, 0x1F, 0x80, 0x1C, 0x00,
|
||||
0xFC, 0x00, 0x40, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8,
|
||||
0x00, 0x00, 0x0E, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x3F,
|
||||
0xE0, 0x00, 0x7F, 0xE0, 0x00, 0xFD, 0xC0, 0x01, 0xF9, 0xC0, 0x03, 0xF3,
|
||||
0xC0, 0x07, 0xE3, 0xC0, 0x0F, 0xC3, 0xC0, 0x1F, 0x83, 0x80, 0x3F, 0x03,
|
||||
0x80, 0x7E, 0x07, 0x80, 0xFC, 0x07, 0x81, 0xF8, 0x07, 0x83, 0xF0, 0x07,
|
||||
0x07, 0xE0, 0x07, 0x0F, 0xC0, 0x0F, 0x1F, 0x80, 0x0F, 0x3F, 0x00, 0x0F,
|
||||
0x7E, 0x00, 0x0E, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x1F,
|
||||
0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x38, 0x00, 0x02, 0x00,
|
||||
0x00, 0x03, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0x00, 0x0F, 0xC0, 0x7E, 0x00,
|
||||
0xF0, 0x00, 0xF8, 0x0F, 0x00, 0x01, 0xE0, 0xF0, 0x00, 0x07, 0x07, 0x00,
|
||||
0x00, 0x1C, 0x70, 0x00, 0x00, 0xE3, 0x80, 0x00, 0x03, 0xB8, 0x00, 0x00,
|
||||
0x1D, 0xC0, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F,
|
||||
0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00,
|
||||
0x00, 0x03, 0x9C, 0x00, 0x00, 0x1C, 0xE0, 0x00, 0x00, 0xE7, 0x80, 0x00,
|
||||
0x0E, 0x1C, 0x00, 0x00, 0xF0, 0x70, 0x00, 0x0F, 0x03, 0xC0, 0x00, 0xF0,
|
||||
0x0F, 0x80, 0x0F, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0x00,
|
||||
0x7F, 0xC0, 0x00, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x0E, 0x00, 0x7E, 0x38,
|
||||
0x00, 0x3C, 0xE0, 0x00, 0x7B, 0x80, 0x00, 0xEE, 0x00, 0x01, 0xF8, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x3B, 0x80, 0x01, 0xEE, 0x00, 0x0F, 0x38, 0x01, 0xF8, 0xFF,
|
||||
0xFF, 0xC3, 0xFF, 0xFC, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03,
|
||||
0x80, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0xFF,
|
||||
0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x01, 0xF8, 0x0F, 0xC0, 0x0F, 0x00, 0x0F,
|
||||
0x80, 0x78, 0x00, 0x0F, 0x03, 0xC0, 0x00, 0x1C, 0x0E, 0x00, 0x00, 0x38,
|
||||
0x70, 0x00, 0x00, 0xE1, 0xC0, 0x00, 0x01, 0xCE, 0x00, 0x00, 0x07, 0x38,
|
||||
0x00, 0x00, 0x1C, 0xE0, 0x00, 0x00, 0x3B, 0x80, 0x00, 0x00, 0xEE, 0x00,
|
||||
0x00, 0x03, 0xB8, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x3B, 0x80, 0x00,
|
||||
0x01, 0xC7, 0x00, 0x00, 0x07, 0x1C, 0x00, 0x00, 0x1C, 0x78, 0x00, 0x00,
|
||||
0xE0, 0xE0, 0x00, 0x07, 0x81, 0xC0, 0x00, 0x3C, 0x07, 0x80, 0x01, 0xE0,
|
||||
0x0F, 0x80, 0x0F, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xFF, 0xC0, 0x00,
|
||||
0x0F, 0xF8, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x07, 0x80, 0x20, 0x00,
|
||||
0x0F, 0x83, 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0xFF, 0xFF,
|
||||
0x03, 0xFF, 0xFF, 0x0E, 0x00, 0x7E, 0x38, 0x00, 0x3C, 0xE0, 0x00, 0x7B,
|
||||
0x80, 0x00, 0xEE, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80,
|
||||
0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x3B, 0x80, 0x01,
|
||||
0xEE, 0x00, 0x0F, 0x38, 0x00, 0xF8, 0xFF, 0xFF, 0xC3, 0xFF, 0xFC, 0x0E,
|
||||
0x00, 0x70, 0x38, 0x00, 0xE0, 0xE0, 0x03, 0xC3, 0x80, 0x07, 0x0E, 0x00,
|
||||
0x0E, 0x38, 0x00, 0x1C, 0xE0, 0x00, 0x73, 0x80, 0x00, 0xEE, 0x00, 0x01,
|
||||
0xC0, 0x00, 0x30, 0x00, 0x7F, 0xF0, 0x1F, 0xFF, 0xC3, 0xE0, 0x3E, 0x78,
|
||||
0x00, 0x47, 0x00, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x07,
|
||||
0x00, 0x00, 0x70, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x03, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1E, 0x00, 0x00,
|
||||
0xF0, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x0F, 0xF0, 0x01, 0xE7, 0xE0, 0x7C, 0x3F, 0xFF, 0x80, 0x7F, 0xE0, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38,
|
||||
0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0,
|
||||
0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03,
|
||||
0x80, 0x00, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00,
|
||||
0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x33, 0x80, 0x00, 0xE7,
|
||||
0x00, 0x01, 0xCF, 0x00, 0x07, 0x8E, 0x00, 0x1E, 0x0F, 0x00, 0x78, 0x1F,
|
||||
0xC7, 0xE0, 0x0F, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0xF0, 0x00, 0x00, 0xEE,
|
||||
0x00, 0x00, 0x39, 0xC0, 0x00, 0x07, 0x1C, 0x00, 0x00, 0xC3, 0x80, 0x00,
|
||||
0x38, 0x38, 0x00, 0x07, 0x07, 0x00, 0x01, 0xC0, 0x70, 0x00, 0x38, 0x0E,
|
||||
0x00, 0x0E, 0x01, 0xE0, 0x01, 0xC0, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x0E,
|
||||
0x00, 0x38, 0x01, 0x80, 0x07, 0x00, 0x70, 0x00, 0x70, 0x0E, 0x00, 0x0E,
|
||||
0x03, 0x80, 0x00, 0xE0, 0x70, 0x00, 0x1C, 0x1C, 0x00, 0x03, 0xC3, 0x80,
|
||||
0x00, 0x38, 0xE0, 0x00, 0x07, 0x1C, 0x00, 0x00, 0x73, 0x00, 0x00, 0x0E,
|
||||
0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x1C, 0x00, 0x03, 0xB8, 0x00, 0x0F,
|
||||
0x00, 0x01, 0x9C, 0x00, 0x0F, 0x80, 0x01, 0xC7, 0x00, 0x07, 0xC0, 0x00,
|
||||
0xE3, 0x80, 0x03, 0x70, 0x00, 0x61, 0xC0, 0x03, 0xB8, 0x00, 0x70, 0x70,
|
||||
0x01, 0xCC, 0x00, 0x38, 0x38, 0x00, 0xC7, 0x00, 0x18, 0x1C, 0x00, 0xE3,
|
||||
0x80, 0x1C, 0x07, 0x00, 0x70, 0xC0, 0x0E, 0x03, 0x80, 0x30, 0x70, 0x0E,
|
||||
0x01, 0xC0, 0x38, 0x38, 0x07, 0x00, 0x70, 0x1C, 0x0C, 0x03, 0x80, 0x38,
|
||||
0x0C, 0x07, 0x03, 0x80, 0x1C, 0x0E, 0x03, 0x81, 0xC0, 0x07, 0x07, 0x00,
|
||||
0xC0, 0xE0, 0x03, 0x83, 0x00, 0x70, 0xE0, 0x01, 0xC3, 0x80, 0x38, 0x70,
|
||||
0x00, 0x71, 0xC0, 0x0C, 0x38, 0x00, 0x38, 0xC0, 0x07, 0x38, 0x00, 0x1C,
|
||||
0xE0, 0x03, 0x9C, 0x00, 0x07, 0x70, 0x00, 0xEE, 0x00, 0x03, 0xB0, 0x00,
|
||||
0x7E, 0x00, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x0F, 0x80,
|
||||
0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x70,
|
||||
0x00, 0x1E, 0x38, 0x00, 0x1C, 0x3C, 0x00, 0x38, 0x1C, 0x00, 0x70, 0x0E,
|
||||
0x00, 0x70, 0x07, 0x00, 0xE0, 0x07, 0x81, 0xC0, 0x03, 0x83, 0x80, 0x01,
|
||||
0xC3, 0x80, 0x01, 0xE7, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00,
|
||||
0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xEE, 0x00, 0x01,
|
||||
0xE7, 0x00, 0x01, 0xC3, 0x80, 0x03, 0x83, 0xC0, 0x07, 0x01, 0xC0, 0x0F,
|
||||
0x00, 0xE0, 0x0E, 0x00, 0xF0, 0x1C, 0x00, 0x78, 0x3C, 0x00, 0x38, 0x78,
|
||||
0x00, 0x1C, 0x70, 0x00, 0x1E, 0xE0, 0x00, 0x0F, 0x70, 0x00, 0x07, 0x38,
|
||||
0x00, 0x03, 0x8E, 0x00, 0x03, 0x87, 0x00, 0x01, 0x81, 0xC0, 0x01, 0xC0,
|
||||
0x70, 0x01, 0xC0, 0x38, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0xE0,
|
||||
0x01, 0xC0, 0x70, 0x00, 0x70, 0x70, 0x00, 0x38, 0x38, 0x00, 0x0E, 0x38,
|
||||
0x00, 0x07, 0xB8, 0x00, 0x01, 0xDC, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3C,
|
||||
0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x80, 0x00, 0x01,
|
||||
0xC0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x38, 0x00, 0x00,
|
||||
0x1C, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xF0, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x07, 0x80, 0x00, 0x3C, 0x00, 0x00, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x3C,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x70,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00,
|
||||
0x1C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
|
||||
0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0x01, 0xC0, 0x03, 0x80, 0x03, 0x00, 0x07, 0x00, 0x06, 0x00,
|
||||
0x0C, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x30, 0x00, 0x70, 0x00, 0x60, 0x00,
|
||||
0xE0, 0x01, 0xC0, 0x01, 0x80, 0x03, 0x80, 0x07, 0x00, 0x06, 0x00, 0x0E,
|
||||
0x00, 0x1C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0,
|
||||
0x00, 0xC0, 0x01, 0x80, 0x03, 0x80, 0x03, 0x00, 0x06, 0x00, 0x0E, 0x00,
|
||||
0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x30, 0x00, 0x70, 0x00, 0xE0, 0xFF,
|
||||
0xFC, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3,
|
||||
0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70,
|
||||
0xE1, 0xC3, 0x87, 0x0E, 0x1F, 0xFF, 0xFF, 0xE0, 0x01, 0xC0, 0x01, 0xC0,
|
||||
0x03, 0xC0, 0x03, 0x60, 0x06, 0x60, 0x06, 0x70, 0x0E, 0x30, 0x0C, 0x30,
|
||||
0x0C, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x38, 0x0C, 0x30, 0x0E, 0x70, 0x06,
|
||||
0x60, 0x06, 0x60, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3C, 0x07,
|
||||
0x01, 0xC0, 0x78, 0x01, 0xC0, 0x0F, 0xFE, 0x1F, 0xFF, 0x8F, 0x01, 0xE2,
|
||||
0x00, 0x78, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x03, 0x00, 0x01, 0x80, 0xFF,
|
||||
0xC7, 0xFF, 0xE7, 0xE0, 0x37, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0,
|
||||
0x07, 0xE0, 0x03, 0xB8, 0x03, 0xDE, 0x07, 0x67, 0xFF, 0x30, 0xFF, 0x18,
|
||||
0xE0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00,
|
||||
0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x70, 0x07,
|
||||
0x1F, 0xF0, 0x3B, 0xFF, 0xE1, 0xFC, 0x07, 0x8F, 0x80, 0x1E, 0x78, 0x00,
|
||||
0x73, 0xC0, 0x01, 0xDC, 0x00, 0x0E, 0xE0, 0x00, 0x37, 0x00, 0x01, 0xF8,
|
||||
0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3B, 0x80, 0x01,
|
||||
0xDE, 0x00, 0x1E, 0xF8, 0x00, 0xE7, 0xE0, 0x0E, 0x3B, 0xC3, 0xF1, 0xCF,
|
||||
0xFE, 0x0E, 0x1F, 0xC0, 0x00, 0x00, 0xF0, 0x01, 0xFF, 0x80, 0xFF, 0xF8,
|
||||
0x78, 0x0F, 0x38, 0x01, 0xDC, 0x00, 0x27, 0x00, 0x03, 0x80, 0x00, 0xE0,
|
||||
0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00,
|
||||
0x0E, 0x00, 0x01, 0xC0, 0x00, 0x78, 0x00, 0x8F, 0x00, 0x71, 0xF0, 0xF8,
|
||||
0x3F, 0xFC, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x0E, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0,
|
||||
0x00, 0x07, 0x00, 0x60, 0x38, 0x3F, 0xF1, 0xC7, 0xFF, 0xCE, 0x7C, 0x07,
|
||||
0x73, 0x80, 0x1F, 0xB8, 0x00, 0x7D, 0xC0, 0x01, 0xFC, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03,
|
||||
0xF0, 0x00, 0x3F, 0x80, 0x01, 0xEE, 0x00, 0x1F, 0x78, 0x00, 0xF9, 0xE0,
|
||||
0x0F, 0xC7, 0xC3, 0xEE, 0x1F, 0xFE, 0x70, 0x3F, 0xC3, 0x80, 0x00, 0xE0,
|
||||
0x00, 0x7F, 0xE0, 0x1F, 0xFF, 0x03, 0xC0, 0x78, 0x38, 0x01, 0xC7, 0x00,
|
||||
0x0E, 0x60, 0x00, 0xEE, 0x00, 0x06, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x07,
|
||||
0x00, 0x00, 0x78, 0x00, 0x83, 0xC0, 0x1C, 0x1F, 0x87, 0xC0, 0xFF, 0xF8,
|
||||
0x03, 0xFE, 0x00, 0x03, 0xF8, 0x1F, 0xE0, 0xF1, 0x83, 0x80, 0x1C, 0x00,
|
||||
0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x03, 0xFF, 0xCF, 0xFF, 0x07, 0x00,
|
||||
0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0,
|
||||
0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70,
|
||||
0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x3F, 0xF1, 0xC7,
|
||||
0xFF, 0xEE, 0x7C, 0x07, 0xF7, 0x80, 0x0F, 0xB8, 0x00, 0x3F, 0xC0, 0x01,
|
||||
0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3D, 0xC0, 0x01, 0xEF, 0x00, 0x1F,
|
||||
0x3C, 0x01, 0xF8, 0xF8, 0x3D, 0xC3, 0xFF, 0xCE, 0x07, 0xF8, 0x70, 0x00,
|
||||
0x03, 0x80, 0x00, 0x1C, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x30, 0x00, 0xF3,
|
||||
0xE0, 0x0F, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0x00, 0x1F, 0x80, 0x00, 0xE0,
|
||||
0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0,
|
||||
0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0xF0, 0x1C, 0xFF, 0xC3, 0xBF,
|
||||
0xFC, 0x7E, 0x03, 0xCF, 0x80, 0x3D, 0xE0, 0x03, 0xB8, 0x00, 0x37, 0x00,
|
||||
0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00,
|
||||
0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00,
|
||||
0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0E, 0xEF, 0xFE, 0x00, 0x00,
|
||||
0x0E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE0, 0x00,
|
||||
0xE0, 0x0F, 0x00, 0xF0, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00,
|
||||
0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00,
|
||||
0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00,
|
||||
0xE4, 0x1C, 0x7F, 0xC7, 0xF8, 0x1C, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03,
|
||||
0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07,
|
||||
0x00, 0x00, 0xE0, 0x00, 0x5C, 0x00, 0x73, 0x80, 0x1C, 0x70, 0x07, 0x0E,
|
||||
0x01, 0xC1, 0xC0, 0xF0, 0x38, 0x3C, 0x07, 0x0F, 0x00, 0xE3, 0xC0, 0x1C,
|
||||
0xF8, 0x03, 0xBF, 0x80, 0x7F, 0x78, 0x0F, 0xC7, 0x01, 0xE0, 0x70, 0x38,
|
||||
0x07, 0x07, 0x00, 0xF0, 0xE0, 0x0F, 0x1C, 0x00, 0xE3, 0x80, 0x0E, 0x70,
|
||||
0x00, 0xEE, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFE, 0x00, 0x60, 0x00, 0xE0, 0x39, 0xFF, 0x81, 0xFF, 0x0E,
|
||||
0xFF, 0xF1, 0xFF, 0xE3, 0xF0, 0x1E, 0xF0, 0x3C, 0xF8, 0x03, 0xF0, 0x07,
|
||||
0xBC, 0x00, 0x78, 0x00, 0xEE, 0x00, 0x1E, 0x00, 0x1B, 0x80, 0x07, 0x80,
|
||||
0x07, 0xE0, 0x01, 0xC0, 0x01, 0xF8, 0x00, 0x70, 0x00, 0x7E, 0x00, 0x1C,
|
||||
0x00, 0x1F, 0x80, 0x07, 0x00, 0x07, 0xE0, 0x01, 0xC0, 0x01, 0xF8, 0x00,
|
||||
0x70, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x1F, 0x80, 0x07, 0x00, 0x07, 0xE0,
|
||||
0x01, 0xC0, 0x01, 0xF8, 0x00, 0x70, 0x00, 0x7E, 0x00, 0x1C, 0x00, 0x1F,
|
||||
0x80, 0x07, 0x00, 0x07, 0xE0, 0x01, 0xC0, 0x01, 0xC0, 0x00, 0xF0, 0x1C,
|
||||
0xFF, 0xC3, 0xBF, 0xFC, 0x7E, 0x03, 0xCF, 0x80, 0x3D, 0xE0, 0x03, 0xB8,
|
||||
0x00, 0x37, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0,
|
||||
0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0,
|
||||
0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0E, 0x00,
|
||||
0x70, 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0xE0, 0x3C, 0x07, 0x83, 0x80, 0x1E,
|
||||
0x38, 0x00, 0x71, 0xC0, 0x01, 0xDC, 0x00, 0x0E, 0xE0, 0x00, 0x37, 0x00,
|
||||
0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3B,
|
||||
0x80, 0x01, 0xCE, 0x00, 0x1E, 0x78, 0x00, 0xE1, 0xE0, 0x0E, 0x07, 0xC3,
|
||||
0xE0, 0x1F, 0xFE, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x70, 0x07, 0x1F, 0xF0,
|
||||
0x3B, 0xFF, 0xE1, 0xFC, 0x07, 0x8F, 0x80, 0x1E, 0x78, 0x00, 0x73, 0xC0,
|
||||
0x01, 0xDC, 0x00, 0x0E, 0xE0, 0x00, 0x37, 0x00, 0x01, 0xF8, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x3B, 0x80, 0x01, 0xDE, 0x00,
|
||||
0x1E, 0xF8, 0x00, 0xE7, 0xE0, 0x0E, 0x3B, 0xC3, 0xF1, 0xCF, 0xFE, 0x0E,
|
||||
0x1F, 0xC0, 0x70, 0x00, 0x03, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x07, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00, 0x00, 0x00,
|
||||
0x00, 0x60, 0x00, 0x3F, 0xF1, 0xC7, 0xFF, 0xCE, 0x7C, 0x07, 0x73, 0x80,
|
||||
0x1F, 0xB8, 0x00, 0x7D, 0xC0, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x3F,
|
||||
0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x3F, 0x80, 0x01, 0xEE, 0x00, 0x1F, 0x78, 0x00, 0xF9, 0xE0, 0x0F, 0xC7,
|
||||
0xC3, 0xEE, 0x1F, 0xFE, 0x70, 0x3F, 0xC3, 0x80, 0x00, 0x1C, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x01, 0xC0, 0x00, 0x0E, 0x00,
|
||||
0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x79, 0xFE, 0xFF, 0xF8, 0xF8, 0x3C,
|
||||
0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03,
|
||||
0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x00, 0x01, 0xE0, 0x07, 0xFF,
|
||||
0x0F, 0xFF, 0xCF, 0x00, 0xC7, 0x00, 0x03, 0x80, 0x01, 0x80, 0x00, 0xE0,
|
||||
0x00, 0x78, 0x00, 0x1F, 0x80, 0x07, 0xFE, 0x00, 0x7F, 0xC0, 0x01, 0xF0,
|
||||
0x00, 0x3C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0xB0, 0x03, 0xBF, 0x07,
|
||||
0xCF, 0xFF, 0xC0, 0xFF, 0x80, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00,
|
||||
0x1C, 0x03, 0xFF, 0xCF, 0xFF, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0,
|
||||
0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70,
|
||||
0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xF1, 0x81, 0xFF, 0x03,
|
||||
0xF8, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C,
|
||||
0x00, 0x0F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xC0,
|
||||
0x0F, 0x78, 0x07, 0xCF, 0x8F, 0xB1, 0xFF, 0xCC, 0x3F, 0xC3, 0xE0, 0x00,
|
||||
0x3B, 0x80, 0x03, 0x9C, 0x00, 0x1C, 0x70, 0x00, 0xC3, 0x80, 0x0E, 0x0E,
|
||||
0x00, 0x60, 0x70, 0x07, 0x01, 0x80, 0x38, 0x0E, 0x03, 0x80, 0x70, 0x1C,
|
||||
0x01, 0xC1, 0xC0, 0x0E, 0x0E, 0x00, 0x38, 0x60, 0x01, 0xC7, 0x00, 0x06,
|
||||
0x30, 0x00, 0x3B, 0x80, 0x00, 0xDC, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x60, 0x00, 0xE0, 0x01, 0xDC, 0x00, 0x78, 0x00, 0x67,
|
||||
0x00, 0x1E, 0x00, 0x38, 0xC0, 0x0F, 0xC0, 0x0C, 0x38, 0x03, 0xB0, 0x03,
|
||||
0x06, 0x00, 0xCE, 0x01, 0xC1, 0xC0, 0x73, 0x80, 0x60, 0x70, 0x18, 0x60,
|
||||
0x38, 0x0C, 0x06, 0x1C, 0x0E, 0x03, 0x83, 0x83, 0x03, 0x00, 0xE0, 0xC0,
|
||||
0xC1, 0xC0, 0x18, 0x70, 0x38, 0x60, 0x07, 0x1C, 0x06, 0x18, 0x00, 0xC6,
|
||||
0x01, 0xCE, 0x00, 0x3B, 0x80, 0x73, 0x00, 0x0E, 0xC0, 0x0D, 0xC0, 0x01,
|
||||
0xB0, 0x03, 0xF0, 0x00, 0x7C, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x1E, 0x00,
|
||||
0x03, 0x80, 0x07, 0x00, 0x70, 0x01, 0xC7, 0x00, 0x70, 0xF0, 0x1C, 0x0E,
|
||||
0x07, 0x80, 0xE0, 0xE0, 0x0E, 0x38, 0x00, 0xEE, 0x00, 0x1F, 0x80, 0x01,
|
||||
0xF0, 0x00, 0x1C, 0x00, 0x07, 0xC0, 0x01, 0xF8, 0x00, 0x3B, 0x80, 0x0E,
|
||||
0x38, 0x03, 0x83, 0x80, 0xE0, 0x78, 0x3C, 0x07, 0x07, 0x00, 0x71, 0xC0,
|
||||
0x07, 0x70, 0x00, 0x70, 0x70, 0x00, 0x1C, 0xE0, 0x00, 0xE3, 0x80, 0x03,
|
||||
0x87, 0x00, 0x0C, 0x1C, 0x00, 0x70, 0x38, 0x01, 0x80, 0xE0, 0x0E, 0x01,
|
||||
0x80, 0x38, 0x07, 0x01, 0xC0, 0x1C, 0x07, 0x00, 0x38, 0x38, 0x00, 0xE0,
|
||||
0xE0, 0x01, 0xC3, 0x00, 0x07, 0x1C, 0x00, 0x0E, 0x60, 0x00, 0x3B, 0x80,
|
||||
0x00, 0x6E, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0E, 0x00, 0x00,
|
||||
0x38, 0x00, 0x00, 0xC0, 0x00, 0x07, 0x00, 0x00, 0x38, 0x00, 0x40, 0xE0,
|
||||
0x03, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x07, 0x80, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00,
|
||||
0xE0, 0x01, 0xC0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1E,
|
||||
0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x03, 0xC1, 0xF0, 0xF0, 0x38, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C,
|
||||
0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x3F, 0x0F,
|
||||
0x80, 0xF0, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70,
|
||||
0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x03, 0x80, 0xFC, 0x1F, 0x00, 0xC0,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFE, 0xF0, 0x3E, 0x03, 0xC0, 0x70, 0x0E, 0x03, 0x80, 0xE0, 0x38,
|
||||
0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03,
|
||||
0xF0, 0x7C, 0x3C, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0,
|
||||
0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x07, 0x0F, 0xC3, 0xE0, 0xC0,
|
||||
0x00, 0x0E, 0x00, 0xCF, 0xE0, 0x37, 0xBC, 0x0D, 0x83, 0x86, 0x60, 0x7F,
|
||||
0xB0, 0x0F, 0xC0 };
|
||||
|
||||
const GFXglyph Montserrat_Regular20pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 10, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 4, 27, 10, 3, -26 }, // 0x21 '!'
|
||||
{ 15, 9, 10, 15, 3, -26 }, // 0x22 '"'
|
||||
{ 27, 25, 27, 27, 1, -26 }, // 0x23 '#'
|
||||
{ 112, 20, 37, 24, 2, -31 }, // 0x24 '$'
|
||||
{ 205, 29, 28, 32, 2, -27 }, // 0x25 '%'
|
||||
{ 307, 24, 28, 26, 2, -27 }, // 0x26 '&'
|
||||
{ 391, 2, 10, 8, 3, -26 }, // 0x27 '''
|
||||
{ 394, 7, 37, 13, 4, -28 }, // 0x28 '('
|
||||
{ 427, 7, 37, 13, 2, -28 }, // 0x29 ')'
|
||||
{ 460, 13, 14, 15, 1, -28 }, // 0x2A '*'
|
||||
{ 483, 17, 17, 22, 3, -21 }, // 0x2B '+'
|
||||
{ 520, 4, 10, 8, 2, -3 }, // 0x2C ','
|
||||
{ 525, 11, 3, 15, 2, -11 }, // 0x2D '-'
|
||||
{ 530, 4, 4, 8, 2, -3 }, // 0x2E '.'
|
||||
{ 532, 15, 37, 13, -1, -32 }, // 0x2F '/'
|
||||
{ 602, 22, 28, 26, 2, -27 }, // 0x30 '0'
|
||||
{ 679, 10, 27, 14, 0, -26 }, // 0x31 '1'
|
||||
{ 713, 20, 28, 22, 1, -27 }, // 0x32 '2'
|
||||
{ 783, 20, 27, 22, 0, -26 }, // 0x33 '3'
|
||||
{ 851, 23, 27, 26, 2, -26 }, // 0x34 '4'
|
||||
{ 929, 20, 27, 22, 1, -26 }, // 0x35 '5'
|
||||
{ 997, 21, 28, 24, 2, -27 }, // 0x36 '6'
|
||||
{ 1071, 20, 27, 23, 1, -26 }, // 0x37 '7'
|
||||
{ 1139, 21, 28, 25, 2, -27 }, // 0x38 '8'
|
||||
{ 1213, 21, 28, 24, 1, -27 }, // 0x39 '9'
|
||||
{ 1287, 4, 21, 8, 2, -20 }, // 0x3A ':'
|
||||
{ 1298, 4, 27, 8, 2, -20 }, // 0x3B ';'
|
||||
{ 1312, 17, 16, 22, 3, -21 }, // 0x3C '<'
|
||||
{ 1346, 17, 11, 22, 3, -18 }, // 0x3D '='
|
||||
{ 1370, 17, 16, 22, 3, -21 }, // 0x3E '>'
|
||||
{ 1404, 19, 28, 22, 0, -27 }, // 0x3F '?'
|
||||
{ 1471, 36, 36, 40, 2, -27 }, // 0x40 '@'
|
||||
{ 1633, 28, 27, 28, 0, -26 }, // 0x41 'A'
|
||||
{ 1728, 23, 27, 29, 4, -26 }, // 0x42 'B'
|
||||
{ 1806, 24, 28, 28, 2, -27 }, // 0x43 'C'
|
||||
{ 1890, 26, 27, 32, 4, -26 }, // 0x44 'D'
|
||||
{ 1978, 20, 27, 26, 4, -26 }, // 0x45 'E'
|
||||
{ 2046, 19, 27, 25, 4, -26 }, // 0x46 'F'
|
||||
{ 2111, 25, 28, 30, 2, -27 }, // 0x47 'G'
|
||||
{ 2199, 23, 27, 32, 4, -26 }, // 0x48 'H'
|
||||
{ 2277, 3, 27, 12, 4, -26 }, // 0x49 'I'
|
||||
{ 2288, 15, 27, 20, 0, -26 }, // 0x4A 'J'
|
||||
{ 2339, 24, 27, 28, 4, -26 }, // 0x4B 'K'
|
||||
{ 2420, 19, 27, 23, 4, -26 }, // 0x4C 'L'
|
||||
{ 2485, 29, 27, 37, 4, -26 }, // 0x4D 'M'
|
||||
{ 2583, 23, 27, 32, 4, -26 }, // 0x4E 'N'
|
||||
{ 2661, 29, 28, 33, 2, -27 }, // 0x4F 'O'
|
||||
{ 2763, 22, 27, 28, 4, -26 }, // 0x50 'P'
|
||||
{ 2838, 30, 33, 33, 2, -27 }, // 0x51 'Q'
|
||||
{ 2962, 22, 27, 28, 4, -26 }, // 0x52 'R'
|
||||
{ 3037, 20, 28, 24, 2, -27 }, // 0x53 'S'
|
||||
{ 3107, 22, 27, 22, 0, -26 }, // 0x54 'T'
|
||||
{ 3182, 23, 27, 31, 4, -26 }, // 0x55 'U'
|
||||
{ 3260, 27, 27, 27, 0, -26 }, // 0x56 'V'
|
||||
{ 3352, 41, 27, 43, 1, -26 }, // 0x57 'W'
|
||||
{ 3491, 24, 27, 26, 1, -26 }, // 0x58 'X'
|
||||
{ 3572, 25, 27, 25, 0, -26 }, // 0x59 'Y'
|
||||
{ 3657, 22, 27, 25, 2, -26 }, // 0x5A 'Z'
|
||||
{ 3732, 8, 37, 12, 4, -28 }, // 0x5B '['
|
||||
{ 3769, 15, 37, 13, -1, -32 }, // 0x5C '\'
|
||||
{ 3839, 7, 37, 12, 1, -28 }, // 0x5D ']'
|
||||
{ 3872, 16, 16, 22, 3, -21 }, // 0x5E '^'
|
||||
{ 3904, 20, 2, 20, 0, 1 }, // 0x5F '_'
|
||||
{ 3909, 9, 5, 23, 5, -28 }, // 0x60 '`'
|
||||
{ 3915, 17, 21, 23, 2, -20 }, // 0x61 'a'
|
||||
{ 3960, 21, 29, 26, 4, -28 }, // 0x62 'b'
|
||||
{ 4037, 18, 21, 22, 2, -20 }, // 0x63 'c'
|
||||
{ 4085, 21, 29, 26, 2, -28 }, // 0x64 'd'
|
||||
{ 4162, 20, 21, 24, 2, -20 }, // 0x65 'e'
|
||||
{ 4215, 14, 29, 13, 1, -28 }, // 0x66 'f'
|
||||
{ 4266, 21, 29, 27, 2, -20 }, // 0x67 'g'
|
||||
{ 4343, 19, 29, 26, 4, -28 }, // 0x68 'h'
|
||||
{ 4412, 4, 29, 10, 4, -28 }, // 0x69 'i'
|
||||
{ 4427, 12, 37, 11, -4, -28 }, // 0x6A 'j'
|
||||
{ 4483, 19, 29, 23, 4, -28 }, // 0x6B 'k'
|
||||
{ 4552, 3, 29, 10, 4, -28 }, // 0x6C 'l'
|
||||
{ 4563, 34, 21, 41, 4, -20 }, // 0x6D 'm'
|
||||
{ 4653, 19, 21, 26, 4, -20 }, // 0x6E 'n'
|
||||
{ 4703, 21, 21, 24, 2, -20 }, // 0x6F 'o'
|
||||
{ 4759, 21, 29, 26, 4, -20 }, // 0x70 'p'
|
||||
{ 4836, 21, 29, 26, 2, -20 }, // 0x71 'q'
|
||||
{ 4913, 10, 21, 16, 4, -20 }, // 0x72 'r'
|
||||
{ 4940, 17, 21, 19, 1, -20 }, // 0x73 's'
|
||||
{ 4985, 14, 25, 16, 1, -24 }, // 0x74 't'
|
||||
{ 5029, 18, 20, 26, 4, -19 }, // 0x75 'u'
|
||||
{ 5074, 21, 20, 21, 0, -19 }, // 0x76 'v'
|
||||
{ 5127, 34, 20, 34, 0, -19 }, // 0x77 'w'
|
||||
{ 5212, 19, 20, 21, 1, -19 }, // 0x78 'x'
|
||||
{ 5260, 22, 28, 21, -1, -19 }, // 0x79 'y'
|
||||
{ 5337, 16, 20, 20, 2, -19 }, // 0x7A 'z'
|
||||
{ 5377, 10, 37, 13, 2, -28 }, // 0x7B '{'
|
||||
{ 5424, 3, 37, 11, 4, -28 }, // 0x7C '|'
|
||||
{ 5438, 10, 37, 13, 1, -28 }, // 0x7D '}'
|
||||
{ 5485, 18, 6, 22, 2, -16 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Regular20pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Regular20pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Regular20pt7bGlyphs,
|
||||
0x20, 0x7E, 48 };
|
||||
|
||||
// Approx. 6171 bytes
|
||||
|
||||
#endif // MONTSERRAT20PT7B_H
|
||||
@@ -1,170 +0,0 @@
|
||||
#ifndef MONTSERRAT7PT7B_H
|
||||
#define MONTSERRAT7PT7B_H
|
||||
const uint8_t Montserrat_Regular7pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xAA, 0xA8, 0x30, 0xB6, 0xD0, 0x11, 0x08, 0x84, 0x4F, 0xF1, 0x20,
|
||||
0x91, 0xFC, 0x44, 0x22, 0x11, 0x00, 0x10, 0xFB, 0x44, 0x89, 0x0E, 0x07,
|
||||
0x09, 0x13, 0x25, 0xF0, 0x81, 0x00, 0x60, 0x24, 0x49, 0x22, 0x50, 0xB4,
|
||||
0x12, 0xE1, 0x24, 0x51, 0x22, 0x50, 0xE0, 0x38, 0x44, 0x44, 0x48, 0x30,
|
||||
0x50, 0x89, 0x86, 0x86, 0x79, 0xF0, 0x29, 0x25, 0x24, 0x49, 0x22, 0xA5,
|
||||
0x55, 0x56, 0x80, 0x23, 0xDC, 0x52, 0x00, 0x00, 0x41, 0x3F, 0x10, 0x40,
|
||||
0xE0, 0xF0, 0x80, 0x08, 0x44, 0x21, 0x10, 0x84, 0x42, 0x11, 0x08, 0x00,
|
||||
0x38, 0x44, 0x82, 0x82, 0x83, 0x81, 0x82, 0x82, 0x46, 0x3C, 0xE4, 0x92,
|
||||
0x49, 0x24, 0x3D, 0x8C, 0x08, 0x10, 0x41, 0x86, 0x18, 0x60, 0xFC, 0x7E,
|
||||
0x08, 0x30, 0x41, 0x80, 0xC0, 0x81, 0x82, 0xF8, 0x04, 0x08, 0x10, 0x20,
|
||||
0x44, 0x44, 0xFF, 0x04, 0x04, 0x04, 0x7E, 0x81, 0x02, 0x07, 0x80, 0xC0,
|
||||
0x81, 0x02, 0xF8, 0x3C, 0x82, 0x04, 0x0B, 0xD8, 0xE0, 0xC1, 0x42, 0x78,
|
||||
0xFF, 0x82, 0x82, 0x04, 0x04, 0x0C, 0x08, 0x08, 0x10, 0x10, 0x79, 0x8E,
|
||||
0x0C, 0x17, 0xD8, 0xA0, 0xC1, 0x82, 0xF8, 0x3C, 0x42, 0x82, 0x83, 0x43,
|
||||
0x3D, 0x01, 0x02, 0x02, 0x7C, 0x82, 0x83, 0x80, 0x04, 0x6E, 0x30, 0x38,
|
||||
0x10, 0xFC, 0x00, 0x3F, 0x81, 0x81, 0xC3, 0x72, 0x00, 0x3D, 0x8C, 0x08,
|
||||
0x10, 0x41, 0x04, 0x00, 0x00, 0x30, 0x0F, 0x81, 0x83, 0x10, 0x05, 0x1E,
|
||||
0xA9, 0x0C, 0xC8, 0x26, 0x41, 0x32, 0x09, 0x90, 0xCC, 0x7B, 0x90, 0x00,
|
||||
0x60, 0x00, 0xF8, 0x00, 0x0C, 0x03, 0x01, 0x20, 0x48, 0x12, 0x08, 0x43,
|
||||
0xF1, 0x02, 0x40, 0xA0, 0x10, 0xFC, 0x82, 0x82, 0x82, 0x86, 0xFE, 0x81,
|
||||
0x81, 0x83, 0xFE, 0x1E, 0x61, 0xC0, 0x80, 0x80, 0x80, 0x80, 0xC0, 0x61,
|
||||
0x3E, 0xFC, 0x41, 0x20, 0x50, 0x18, 0x0C, 0x06, 0x03, 0x02, 0x83, 0x7E,
|
||||
0x00, 0xFD, 0x02, 0x04, 0x08, 0x1F, 0x20, 0x40, 0x81, 0xFC, 0xFE, 0x08,
|
||||
0x20, 0x83, 0xF8, 0x20, 0x82, 0x00, 0x1E, 0x30, 0xF0, 0x10, 0x08, 0x04,
|
||||
0x0A, 0x05, 0x82, 0x61, 0x1F, 0x80, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFD,
|
||||
0x81, 0x81, 0x81, 0x81, 0xFF, 0xC0, 0x7C, 0x30, 0xC3, 0x0C, 0x30, 0xC2,
|
||||
0x89, 0xE0, 0x82, 0x84, 0x88, 0x90, 0xA0, 0xF0, 0xC8, 0x8C, 0x86, 0x82,
|
||||
0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x83, 0xF0, 0x80, 0x60, 0x3C, 0x0F,
|
||||
0x05, 0xA2, 0x64, 0x99, 0x46, 0x31, 0x88, 0x60, 0x10, 0x81, 0x81, 0xC1,
|
||||
0xA1, 0x91, 0x99, 0x89, 0x85, 0x83, 0x81, 0x1E, 0x18, 0x6C, 0x0A, 0x01,
|
||||
0x80, 0x60, 0x18, 0x07, 0x02, 0x61, 0x8F, 0x80, 0xF9, 0x0E, 0x0C, 0x18,
|
||||
0x30, 0xFE, 0x40, 0x81, 0x00, 0x1E, 0x18, 0x6C, 0x0A, 0x01, 0x80, 0x60,
|
||||
0x18, 0x07, 0x02, 0x61, 0x8F, 0x80, 0x60, 0x0F, 0xF9, 0x0E, 0x0C, 0x18,
|
||||
0x30, 0xFE, 0x42, 0x85, 0x04, 0x7D, 0x82, 0x04, 0x06, 0x03, 0x80, 0x81,
|
||||
0x82, 0xF8, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0xC2, 0x7C, 0x80, 0x50,
|
||||
0x24, 0x08, 0x84, 0x21, 0x08, 0x81, 0x20, 0x58, 0x0C, 0x03, 0x00, 0x82,
|
||||
0x06, 0x0C, 0x18, 0x30, 0x91, 0x42, 0x44, 0x89, 0x22, 0x42, 0x89, 0x0A,
|
||||
0x14, 0x30, 0x60, 0x41, 0x80, 0x41, 0x30, 0x88, 0x82, 0x80, 0xC0, 0x60,
|
||||
0x50, 0x44, 0x61, 0x20, 0xC0, 0x80, 0xA0, 0x98, 0x84, 0x41, 0x40, 0xA0,
|
||||
0x20, 0x10, 0x08, 0x04, 0x00, 0xFF, 0x02, 0x04, 0x08, 0x18, 0x10, 0x20,
|
||||
0x40, 0x80, 0xFF, 0xEA, 0xAA, 0xAA, 0xC0, 0x84, 0x20, 0x84, 0x20, 0x84,
|
||||
0x20, 0x84, 0x20, 0x80, 0x64, 0x92, 0x49, 0x24, 0x9E, 0x30, 0xC2, 0x92,
|
||||
0x4A, 0x10, 0xFE, 0x44, 0xF8, 0x10, 0x7F, 0x86, 0x37, 0x40, 0x80, 0x80,
|
||||
0x80, 0xBE, 0xC2, 0x81, 0x81, 0xC1, 0xC2, 0xBC, 0x7E, 0x08, 0x20, 0x83,
|
||||
0x17, 0x80, 0x02, 0x04, 0x0B, 0xF8, 0x30, 0x60, 0xC1, 0xC6, 0xF4, 0x7D,
|
||||
0x0A, 0x0F, 0xF8, 0x18, 0x1F, 0x00, 0x39, 0x08, 0xE2, 0x10, 0x84, 0x21,
|
||||
0x00, 0x7F, 0x06, 0x0C, 0x18, 0x38, 0xCE, 0x81, 0xC6, 0x70, 0x81, 0x02,
|
||||
0x05, 0xEC, 0x30, 0x60, 0xC1, 0x83, 0x04, 0xC2, 0xAA, 0xA0, 0x30, 0x02,
|
||||
0x22, 0x22, 0x22, 0x22, 0xC0, 0x81, 0x02, 0x04, 0x28, 0x92, 0x2E, 0x64,
|
||||
0x85, 0x04, 0xFF, 0xC0, 0xBD, 0xF6, 0x10, 0xA0, 0x83, 0x04, 0x18, 0x20,
|
||||
0xC1, 0x06, 0x08, 0x20, 0xBD, 0x86, 0x0C, 0x18, 0x30, 0x60, 0x80, 0x7D,
|
||||
0x06, 0x0C, 0x18, 0x38, 0xDE, 0x00, 0xBE, 0xC2, 0x81, 0x81, 0xC1, 0xC2,
|
||||
0xBC, 0x80, 0x80, 0x80, 0x7F, 0x06, 0x0C, 0x18, 0x38, 0xDE, 0x81, 0x02,
|
||||
0x04, 0xBC, 0x88, 0x88, 0x80, 0x7D, 0x04, 0x0F, 0x04, 0x17, 0xC0, 0x21,
|
||||
0x1C, 0x42, 0x10, 0x84, 0x38, 0x83, 0x06, 0x0C, 0x18, 0x28, 0xDE, 0x80,
|
||||
0x82, 0x42, 0x44, 0x24, 0x28, 0x18, 0x18, 0x86, 0x14, 0x61, 0x45, 0x22,
|
||||
0x92, 0x29, 0x43, 0x0C, 0x10, 0xC0, 0x46, 0x48, 0x60, 0x82, 0x8C, 0x90,
|
||||
0x80, 0x82, 0x42, 0x44, 0x24, 0x28, 0x18, 0x18, 0x10, 0x30, 0xE0, 0xF8,
|
||||
0x61, 0x08, 0x42, 0x0F, 0xC0, 0x69, 0x24, 0xB2, 0x49, 0x22, 0xFF, 0xF8,
|
||||
0x62, 0x22, 0x22, 0x32, 0x22, 0x22, 0xC0, 0xE6, 0x70 };
|
||||
|
||||
const GFXglyph Montserrat_Regular7pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 4, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 2, 10, 4, 1, -9 }, // 0x21 '!'
|
||||
{ 4, 3, 4, 5, 1, -9 }, // 0x22 '"'
|
||||
{ 6, 9, 10, 10, 0, -9 }, // 0x23 '#'
|
||||
{ 18, 7, 13, 9, 1, -10 }, // 0x24 '$'
|
||||
{ 30, 10, 10, 12, 1, -9 }, // 0x25 '%'
|
||||
{ 43, 8, 10, 9, 1, -9 }, // 0x26 '&'
|
||||
{ 53, 1, 4, 3, 1, -9 }, // 0x27 '''
|
||||
{ 54, 3, 13, 5, 1, -9 }, // 0x28 '('
|
||||
{ 59, 2, 13, 5, 1, -9 }, // 0x29 ')'
|
||||
{ 63, 5, 5, 5, 0, -9 }, // 0x2A '*'
|
||||
{ 67, 6, 6, 8, 1, -7 }, // 0x2B '+'
|
||||
{ 72, 1, 3, 3, 1, 0 }, // 0x2C ','
|
||||
{ 73, 4, 1, 5, 1, -3 }, // 0x2D '-'
|
||||
{ 74, 1, 1, 3, 1, 0 }, // 0x2E '.'
|
||||
{ 75, 5, 13, 5, 0, -11 }, // 0x2F '/'
|
||||
{ 84, 8, 10, 9, 1, -9 }, // 0x30 '0'
|
||||
{ 94, 3, 10, 5, 0, -9 }, // 0x31 '1'
|
||||
{ 98, 7, 10, 8, 0, -9 }, // 0x32 '2'
|
||||
{ 107, 7, 10, 8, 0, -9 }, // 0x33 '3'
|
||||
{ 116, 8, 10, 9, 1, -9 }, // 0x34 '4'
|
||||
{ 126, 7, 10, 8, 0, -9 }, // 0x35 '5'
|
||||
{ 135, 7, 10, 9, 1, -9 }, // 0x36 '6'
|
||||
{ 144, 8, 10, 8, 0, -9 }, // 0x37 '7'
|
||||
{ 154, 7, 10, 9, 1, -9 }, // 0x38 '8'
|
||||
{ 163, 8, 10, 9, 0, -9 }, // 0x39 '9'
|
||||
{ 173, 1, 7, 3, 1, -6 }, // 0x3A ':'
|
||||
{ 174, 1, 9, 3, 1, -6 }, // 0x3B ';'
|
||||
{ 176, 6, 6, 8, 1, -7 }, // 0x3C '<'
|
||||
{ 181, 6, 4, 8, 1, -6 }, // 0x3D '='
|
||||
{ 184, 6, 6, 8, 1, -7 }, // 0x3E '>'
|
||||
{ 189, 7, 10, 8, 0, -9 }, // 0x3F '?'
|
||||
{ 198, 13, 13, 14, 1, -9 }, // 0x40 '@'
|
||||
{ 220, 10, 10, 10, 0, -9 }, // 0x41 'A'
|
||||
{ 233, 8, 10, 11, 2, -9 }, // 0x42 'B'
|
||||
{ 243, 8, 10, 10, 1, -9 }, // 0x43 'C'
|
||||
{ 253, 9, 10, 12, 2, -9 }, // 0x44 'D'
|
||||
{ 265, 7, 10, 9, 2, -9 }, // 0x45 'E'
|
||||
{ 274, 6, 10, 9, 2, -9 }, // 0x46 'F'
|
||||
{ 282, 9, 10, 11, 1, -9 }, // 0x47 'G'
|
||||
{ 294, 8, 10, 11, 2, -9 }, // 0x48 'H'
|
||||
{ 304, 1, 10, 4, 2, -9 }, // 0x49 'I'
|
||||
{ 306, 6, 10, 7, 0, -9 }, // 0x4A 'J'
|
||||
{ 314, 8, 10, 10, 2, -9 }, // 0x4B 'K'
|
||||
{ 324, 6, 10, 8, 2, -9 }, // 0x4C 'L'
|
||||
{ 332, 10, 10, 13, 2, -9 }, // 0x4D 'M'
|
||||
{ 345, 8, 10, 11, 2, -9 }, // 0x4E 'N'
|
||||
{ 355, 10, 10, 12, 1, -9 }, // 0x4F 'O'
|
||||
{ 368, 7, 10, 10, 2, -9 }, // 0x50 'P'
|
||||
{ 377, 10, 12, 12, 1, -9 }, // 0x51 'Q'
|
||||
{ 392, 7, 10, 10, 2, -9 }, // 0x52 'R'
|
||||
{ 401, 7, 10, 9, 1, -9 }, // 0x53 'S'
|
||||
{ 410, 8, 10, 8, 0, -9 }, // 0x54 'T'
|
||||
{ 420, 8, 10, 11, 2, -9 }, // 0x55 'U'
|
||||
{ 430, 10, 10, 10, 0, -9 }, // 0x56 'V'
|
||||
{ 443, 14, 10, 16, 1, -9 }, // 0x57 'W'
|
||||
{ 461, 9, 10, 9, 0, -9 }, // 0x58 'X'
|
||||
{ 473, 9, 10, 9, 0, -9 }, // 0x59 'Y'
|
||||
{ 485, 8, 10, 9, 1, -9 }, // 0x5A 'Z'
|
||||
{ 495, 2, 13, 4, 2, -9 }, // 0x5B '['
|
||||
{ 499, 5, 13, 5, 0, -11 }, // 0x5C '\'
|
||||
{ 508, 3, 13, 4, 0, -9 }, // 0x5D ']'
|
||||
{ 513, 6, 6, 8, 1, -7 }, // 0x5E '^'
|
||||
{ 518, 7, 1, 7, 0, 1 }, // 0x5F '_'
|
||||
{ 519, 3, 2, 8, 2, -9 }, // 0x60 '`'
|
||||
{ 520, 6, 7, 8, 1, -6 }, // 0x61 'a'
|
||||
{ 526, 8, 10, 9, 1, -9 }, // 0x62 'b'
|
||||
{ 536, 6, 7, 8, 1, -6 }, // 0x63 'c'
|
||||
{ 542, 7, 10, 9, 1, -9 }, // 0x64 'd'
|
||||
{ 551, 7, 7, 8, 1, -6 }, // 0x65 'e'
|
||||
{ 558, 5, 10, 5, 0, -9 }, // 0x66 'f'
|
||||
{ 565, 7, 10, 10, 1, -6 }, // 0x67 'g'
|
||||
{ 574, 7, 10, 9, 1, -9 }, // 0x68 'h'
|
||||
{ 583, 2, 10, 4, 1, -9 }, // 0x69 'i'
|
||||
{ 586, 4, 13, 4, -1, -9 }, // 0x6A 'j'
|
||||
{ 593, 7, 10, 8, 1, -9 }, // 0x6B 'k'
|
||||
{ 602, 1, 10, 4, 1, -9 }, // 0x6C 'l'
|
||||
{ 604, 13, 7, 15, 1, -6 }, // 0x6D 'm'
|
||||
{ 616, 7, 7, 9, 1, -6 }, // 0x6E 'n'
|
||||
{ 623, 7, 7, 9, 1, -6 }, // 0x6F 'o'
|
||||
{ 630, 8, 10, 9, 1, -6 }, // 0x70 'p'
|
||||
{ 640, 7, 10, 9, 1, -6 }, // 0x71 'q'
|
||||
{ 649, 4, 7, 6, 1, -6 }, // 0x72 'r'
|
||||
{ 653, 6, 7, 7, 0, -6 }, // 0x73 's'
|
||||
{ 659, 5, 9, 6, 0, -8 }, // 0x74 't'
|
||||
{ 665, 7, 7, 9, 1, -6 }, // 0x75 'u'
|
||||
{ 672, 8, 7, 8, 0, -6 }, // 0x76 'v'
|
||||
{ 679, 12, 7, 12, 0, -6 }, // 0x77 'w'
|
||||
{ 690, 7, 7, 7, 0, -6 }, // 0x78 'x'
|
||||
{ 697, 8, 10, 8, 0, -6 }, // 0x79 'y'
|
||||
{ 707, 6, 7, 7, 1, -6 }, // 0x7A 'z'
|
||||
{ 713, 3, 13, 5, 1, -9 }, // 0x7B '{'
|
||||
{ 718, 1, 13, 4, 2, -9 }, // 0x7C '|'
|
||||
{ 720, 4, 13, 5, 0, -9 }, // 0x7D '}'
|
||||
{ 727, 6, 2, 8, 1, -5 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Regular7pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Regular7pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Regular7pt7bGlyphs,
|
||||
0x20, 0x7E, 17 };
|
||||
|
||||
// Approx. 1401 bytes
|
||||
|
||||
#endif // MONTSERRAT7PT7B_H
|
||||
@@ -1,210 +0,0 @@
|
||||
#ifndef MONTSERRAT9PT7B_H
|
||||
#define MONTSERRAT9PT7B_H
|
||||
const uint8_t Montserrat_Regular9pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0x55, 0x55, 0x41, 0xC0, 0x99, 0x99, 0x90, 0x10, 0x82, 0x10, 0x42,
|
||||
0x08, 0x8F, 0xFE, 0x22, 0x08, 0x41, 0x08, 0x21, 0x1F, 0xF8, 0x84, 0x10,
|
||||
0x82, 0x20, 0x08, 0x04, 0x07, 0x8F, 0x7C, 0x84, 0x43, 0x20, 0xD0, 0x3C,
|
||||
0x07, 0x82, 0x61, 0x10, 0x8E, 0x4D, 0xF8, 0x10, 0x08, 0x00, 0x30, 0x26,
|
||||
0x43, 0x22, 0x11, 0x11, 0x08, 0x90, 0x44, 0x81, 0xC9, 0xC0, 0x93, 0x04,
|
||||
0x88, 0x48, 0x44, 0x42, 0x21, 0x12, 0x07, 0x00, 0x1C, 0x06, 0x40, 0x8C,
|
||||
0x11, 0x82, 0x60, 0x38, 0x0E, 0x03, 0x22, 0xC2, 0x50, 0x7A, 0x06, 0x61,
|
||||
0xE3, 0xE6, 0xF8, 0x69, 0x69, 0x24, 0x92, 0x4C, 0x93, 0x89, 0x36, 0x49,
|
||||
0x24, 0x96, 0x94, 0x11, 0xA8, 0xE1, 0xC5, 0x42, 0x00, 0x08, 0x08, 0x08,
|
||||
0xFF, 0x08, 0x08, 0x08, 0x08, 0xF6, 0x80, 0xF8, 0xF0, 0x04, 0x08, 0x10,
|
||||
0x40, 0x81, 0x04, 0x08, 0x30, 0x40, 0x83, 0x04, 0x08, 0x30, 0x40, 0x80,
|
||||
0x0C, 0x0F, 0xC6, 0x1B, 0x02, 0xC0, 0xE0, 0x18, 0x06, 0x01, 0x80, 0x70,
|
||||
0x34, 0x09, 0x84, 0x1E, 0x00, 0xFF, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
|
||||
0x1C, 0x1D, 0xC4, 0x18, 0x02, 0x00, 0x80, 0x60, 0x30, 0x18, 0x0C, 0x06,
|
||||
0x03, 0x01, 0x80, 0x7F, 0xC0, 0x7F, 0xBF, 0xC0, 0xC0, 0x40, 0x40, 0x40,
|
||||
0x3C, 0x03, 0x00, 0x80, 0x40, 0x38, 0x33, 0xE0, 0x03, 0x00, 0x40, 0x10,
|
||||
0x04, 0x01, 0x80, 0x60, 0x08, 0x42, 0x08, 0x81, 0x1F, 0xFC, 0x04, 0x00,
|
||||
0x80, 0x10, 0x3F, 0x9F, 0xC8, 0x04, 0x02, 0x03, 0x01, 0xFC, 0x03, 0x00,
|
||||
0x80, 0x40, 0x3C, 0x33, 0xF0, 0x0F, 0x1C, 0x98, 0x08, 0x0C, 0x04, 0x62,
|
||||
0xFD, 0x83, 0xC0, 0xE0, 0x50, 0x2C, 0x31, 0xF0, 0xFF, 0xFF, 0xE0, 0x50,
|
||||
0x60, 0x20, 0x10, 0x10, 0x08, 0x0C, 0x04, 0x06, 0x02, 0x03, 0x00, 0x1C,
|
||||
0x1C, 0xC4, 0x0B, 0x02, 0xC0, 0x98, 0x63, 0xE1, 0x06, 0x80, 0xA0, 0x38,
|
||||
0x0B, 0x06, 0x3F, 0x00, 0x38, 0x33, 0x20, 0x50, 0x38, 0x1C, 0x0F, 0x0A,
|
||||
0x79, 0x00, 0x80, 0xC0, 0x40, 0xCF, 0xC0, 0xF0, 0x00, 0xF0, 0xF0, 0x00,
|
||||
0xF6, 0x80, 0x01, 0x0E, 0x38, 0xC0, 0x70, 0x1C, 0x03, 0xFF, 0x00, 0x00,
|
||||
0x00, 0xFF, 0xC0, 0x70, 0x0E, 0x03, 0x07, 0x38, 0xE0, 0x1C, 0x39, 0x90,
|
||||
0x60, 0x10, 0x18, 0x08, 0x08, 0x08, 0x0C, 0x00, 0x00, 0x01, 0x80, 0xC0,
|
||||
0x03, 0xE0, 0x06, 0x0C, 0x0C, 0x01, 0x0C, 0x00, 0x44, 0x3C, 0x94, 0x21,
|
||||
0x4A, 0x20, 0x63, 0x10, 0x11, 0x88, 0x08, 0xC4, 0x04, 0x62, 0x06, 0x58,
|
||||
0x85, 0x24, 0x3C, 0xE1, 0x00, 0x00, 0xC0, 0x00, 0x1C, 0x60, 0x01, 0xC0,
|
||||
0x00, 0x02, 0x00, 0x38, 0x01, 0x40, 0x1B, 0x00, 0x88, 0x0C, 0x40, 0x41,
|
||||
0x02, 0x08, 0x20, 0x61, 0xFF, 0x18, 0x0C, 0x80, 0x2C, 0x01, 0x80, 0xFE,
|
||||
0x1F, 0xF2, 0x03, 0x40, 0x28, 0x0D, 0x01, 0x3F, 0xC4, 0x06, 0x80, 0x50,
|
||||
0x0E, 0x01, 0x40, 0x6F, 0xF8, 0x07, 0x03, 0xB9, 0x80, 0xA0, 0x0C, 0x01,
|
||||
0x00, 0x20, 0x04, 0x00, 0xC0, 0x08, 0x01, 0x80, 0x18, 0x30, 0xF8, 0xFC,
|
||||
0x0F, 0xF8, 0x80, 0x48, 0x02, 0x80, 0x38, 0x01, 0x80, 0x18, 0x01, 0x80,
|
||||
0x38, 0x02, 0x80, 0x68, 0x1C, 0xFF, 0x00, 0xFF, 0xFF, 0xE0, 0x10, 0x08,
|
||||
0x04, 0x03, 0xFD, 0x00, 0x80, 0x40, 0x20, 0x10, 0x0F, 0xF8, 0xFF, 0xFF,
|
||||
0xE0, 0x10, 0x08, 0x04, 0x03, 0xFD, 0xFE, 0x80, 0x40, 0x20, 0x10, 0x08,
|
||||
0x00, 0x07, 0x03, 0xBD, 0x80, 0xA0, 0x0C, 0x01, 0x00, 0x20, 0x04, 0x01,
|
||||
0xC0, 0x28, 0x05, 0x80, 0x98, 0x30, 0xFC, 0x80, 0x70, 0x0E, 0x01, 0xC0,
|
||||
0x38, 0x07, 0x00, 0xFF, 0xFC, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38,
|
||||
0x06, 0xFF, 0xF8, 0x7E, 0xFC, 0x08, 0x10, 0x20, 0x40, 0x81, 0x02, 0x04,
|
||||
0x0E, 0x37, 0xC0, 0x80, 0x50, 0x12, 0x04, 0x41, 0x08, 0x41, 0x10, 0x26,
|
||||
0x05, 0xE0, 0xE6, 0x18, 0x62, 0x06, 0x40, 0x48, 0x04, 0x80, 0x80, 0x80,
|
||||
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFF, 0x80, 0x0E,
|
||||
0x00, 0xF0, 0x07, 0x40, 0x7B, 0x02, 0xC8, 0x26, 0x61, 0x31, 0x11, 0x85,
|
||||
0x8C, 0x28, 0x60, 0x83, 0x00, 0x18, 0x00, 0x80, 0x80, 0x78, 0x0F, 0x81,
|
||||
0xD8, 0x39, 0x07, 0x10, 0xE3, 0x1C, 0x33, 0x83, 0x70, 0x2E, 0x03, 0xC0,
|
||||
0x78, 0x06, 0x07, 0x00, 0xEF, 0x18, 0x0C, 0x80, 0x2C, 0x01, 0xC0, 0x06,
|
||||
0x00, 0x30, 0x01, 0xC0, 0x0A, 0x00, 0xD8, 0x0C, 0x60, 0xC0, 0xFC, 0x00,
|
||||
0xFC, 0x3F, 0xC8, 0x0A, 0x03, 0x80, 0x60, 0x18, 0x0E, 0x06, 0xFF, 0x20,
|
||||
0x08, 0x02, 0x00, 0x80, 0x00, 0x07, 0x00, 0x77, 0x86, 0x03, 0x10, 0x04,
|
||||
0xC0, 0x1A, 0x00, 0x28, 0x00, 0xA0, 0x02, 0xC0, 0x09, 0x00, 0x66, 0x03,
|
||||
0x0C, 0x18, 0x0F, 0xC0, 0x06, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x3F, 0xC8,
|
||||
0x0A, 0x03, 0x80, 0x60, 0x18, 0x0E, 0x06, 0xFF, 0x20, 0xC8, 0x12, 0x02,
|
||||
0x80, 0xC0, 0x1E, 0x39, 0xF0, 0x10, 0x0C, 0x03, 0x00, 0xF0, 0x0E, 0x01,
|
||||
0x80, 0x40, 0x38, 0x37, 0xE0, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03,
|
||||
0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x00, 0x80, 0x60,
|
||||
0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x70, 0x1C, 0x0D,
|
||||
0x86, 0x3F, 0x00, 0xC0, 0x12, 0x00, 0x90, 0x0C, 0xC0, 0x42, 0x06, 0x18,
|
||||
0x20, 0x43, 0x03, 0x10, 0x08, 0x80, 0x6C, 0x01, 0x40, 0x0E, 0x00, 0x60,
|
||||
0x00, 0x80, 0xC0, 0x60, 0x30, 0x1C, 0x0C, 0x0D, 0x07, 0x82, 0x41, 0x20,
|
||||
0x98, 0x48, 0x62, 0x33, 0x10, 0x88, 0x44, 0x32, 0x13, 0x05, 0x86, 0x81,
|
||||
0x40, 0xA0, 0x70, 0x38, 0x08, 0x04, 0x00, 0x40, 0x26, 0x04, 0x30, 0xC1,
|
||||
0x18, 0x09, 0x00, 0xE0, 0x06, 0x00, 0xE0, 0x09, 0x01, 0x18, 0x30, 0xC6,
|
||||
0x04, 0x40, 0x20, 0x80, 0x28, 0x0D, 0x81, 0x10, 0x61, 0x08, 0x32, 0x02,
|
||||
0xC0, 0x70, 0x04, 0x00, 0x80, 0x10, 0x02, 0x00, 0x40, 0xFF, 0xFF, 0xF0,
|
||||
0x18, 0x04, 0x02, 0x01, 0x80, 0xC0, 0x60, 0x10, 0x08, 0x06, 0x03, 0x00,
|
||||
0xFF, 0xC0, 0xF2, 0x49, 0x24, 0x92, 0x49, 0x27, 0x40, 0x81, 0x01, 0x02,
|
||||
0x06, 0x04, 0x08, 0x18, 0x10, 0x20, 0x60, 0x40, 0x80, 0x81, 0x02, 0xF3,
|
||||
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x18, 0x18, 0x14, 0x24, 0x22,
|
||||
0x42, 0x42, 0xFF, 0x80, 0x60, 0x80, 0x18, 0x7E, 0x03, 0x01, 0x01, 0x7F,
|
||||
0x81, 0x81, 0xC3, 0x7D, 0x80, 0x40, 0x20, 0x11, 0x0B, 0xF6, 0x0E, 0x03,
|
||||
0x01, 0x80, 0xC0, 0x70, 0x7C, 0x6B, 0xE0, 0x08, 0x3F, 0x41, 0xC0, 0x80,
|
||||
0x80, 0x80, 0xC0, 0x63, 0x3E, 0x00, 0x80, 0x40, 0x21, 0x17, 0xEA, 0x0F,
|
||||
0x03, 0x01, 0x80, 0xC0, 0x70, 0x2C, 0x73, 0xE8, 0x08, 0x3F, 0x10, 0x50,
|
||||
0x18, 0x0F, 0xFE, 0x01, 0x80, 0x61, 0x1F, 0x00, 0x1E, 0x40, 0x81, 0x0F,
|
||||
0xC4, 0x08, 0x10, 0x20, 0x40, 0x81, 0x02, 0x00, 0x08, 0x1F, 0xF4, 0x1E,
|
||||
0x03, 0x80, 0xE0, 0x38, 0x0F, 0x07, 0x7F, 0xC7, 0x30, 0x08, 0x02, 0x7F,
|
||||
0x03, 0x00, 0x80, 0x40, 0x20, 0x11, 0x0B, 0xE6, 0x0A, 0x05, 0x02, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x38, 0x18, 0xC0, 0x55, 0x55, 0x40, 0x18, 0x00, 0x00,
|
||||
0x84, 0x21, 0x08, 0x42, 0x10, 0x84, 0x2F, 0x20, 0x80, 0x40, 0x20, 0x10,
|
||||
0x28, 0x24, 0x22, 0x61, 0x60, 0xF8, 0x66, 0x21, 0x90, 0x48, 0x10, 0xFF,
|
||||
0xF8, 0x08, 0x11, 0x7C, 0xFB, 0x0E, 0x0C, 0x08, 0x18, 0x10, 0x30, 0x20,
|
||||
0x60, 0x40, 0xC0, 0x81, 0x81, 0x03, 0x02, 0x04, 0x08, 0x5F, 0x30, 0x50,
|
||||
0x28, 0x14, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xC0, 0x08, 0x1F, 0x90, 0x78,
|
||||
0x18, 0x0C, 0x06, 0x03, 0x81, 0x63, 0x1F, 0x00, 0x08, 0x5F, 0xB0, 0x70,
|
||||
0x18, 0x0C, 0x06, 0x03, 0x83, 0xE3, 0x5F, 0x20, 0x10, 0x08, 0x00, 0x08,
|
||||
0x3F, 0x50, 0x78, 0x18, 0x0C, 0x06, 0x03, 0x81, 0x63, 0x9F, 0x40, 0x20,
|
||||
0x10, 0x08, 0x0D, 0xF1, 0x08, 0x42, 0x10, 0x84, 0x00, 0x08, 0x7F, 0x40,
|
||||
0x40, 0x60, 0x1E, 0x03, 0x01, 0x43, 0x7E, 0x20, 0x40, 0x87, 0xE2, 0x04,
|
||||
0x08, 0x10, 0x20, 0x40, 0xC0, 0xF0, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
|
||||
0x81, 0xC3, 0x7D, 0xC0, 0x90, 0x26, 0x10, 0x84, 0x33, 0x04, 0x81, 0x60,
|
||||
0x30, 0x0C, 0x00, 0xC1, 0x82, 0x41, 0x82, 0x42, 0xC6, 0x22, 0x44, 0x26,
|
||||
0x44, 0x34, 0x28, 0x14, 0x28, 0x18, 0x28, 0x08, 0x10, 0x61, 0x91, 0x85,
|
||||
0x81, 0x80, 0xC0, 0xB0, 0xC8, 0x42, 0x41, 0x80, 0xC0, 0x90, 0x26, 0x10,
|
||||
0x84, 0x33, 0x04, 0x81, 0x60, 0x30, 0x0C, 0x02, 0x00, 0x83, 0xC0, 0x60,
|
||||
0x00, 0xFE, 0x08, 0x30, 0xC1, 0x04, 0x18, 0x60, 0xFE, 0x39, 0x18, 0xC6,
|
||||
0x31, 0x8C, 0xE3, 0x18, 0xC6, 0x30, 0x87, 0xFF, 0xFF, 0xE1, 0x0C, 0x63,
|
||||
0x18, 0xC6, 0x39, 0x8C, 0x63, 0x18, 0x9C, 0x61, 0xD9, 0x8F };
|
||||
|
||||
const GFXglyph Montserrat_Regular9pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 5, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 2, 13, 5, 1, -12 }, // 0x21 '!'
|
||||
{ 5, 4, 5, 7, 1, -12 }, // 0x22 '"'
|
||||
{ 8, 11, 13, 13, 1, -12 }, // 0x23 '#'
|
||||
{ 26, 9, 17, 11, 1, -14 }, // 0x24 '$'
|
||||
{ 46, 13, 13, 15, 1, -12 }, // 0x25 '%'
|
||||
{ 68, 11, 13, 12, 1, -12 }, // 0x26 '&'
|
||||
{ 86, 1, 5, 4, 1, -12 }, // 0x27 '''
|
||||
{ 87, 3, 16, 6, 2, -12 }, // 0x28 '('
|
||||
{ 93, 3, 16, 6, 1, -12 }, // 0x29 ')'
|
||||
{ 99, 7, 6, 7, 0, -12 }, // 0x2A '*'
|
||||
{ 105, 8, 8, 10, 1, -9 }, // 0x2B '+'
|
||||
{ 113, 2, 5, 4, 1, -1 }, // 0x2C ','
|
||||
{ 115, 5, 1, 7, 1, -4 }, // 0x2D '-'
|
||||
{ 116, 2, 2, 4, 1, -1 }, // 0x2E '.'
|
||||
{ 117, 7, 17, 6, 0, -14 }, // 0x2F '/'
|
||||
{ 132, 10, 13, 12, 1, -12 }, // 0x30 '0'
|
||||
{ 149, 4, 13, 7, 0, -12 }, // 0x31 '1'
|
||||
{ 156, 10, 13, 10, 0, -12 }, // 0x32 '2'
|
||||
{ 173, 9, 13, 10, 0, -12 }, // 0x33 '3'
|
||||
{ 188, 11, 13, 12, 1, -12 }, // 0x34 '4'
|
||||
{ 206, 9, 13, 10, 0, -12 }, // 0x35 '5'
|
||||
{ 221, 9, 13, 11, 1, -12 }, // 0x36 '6'
|
||||
{ 236, 9, 13, 11, 1, -12 }, // 0x37 '7'
|
||||
{ 251, 10, 13, 11, 1, -12 }, // 0x38 '8'
|
||||
{ 268, 9, 13, 11, 1, -12 }, // 0x39 '9'
|
||||
{ 283, 2, 10, 4, 1, -9 }, // 0x3A ':'
|
||||
{ 286, 2, 13, 4, 1, -9 }, // 0x3B ';'
|
||||
{ 290, 8, 7, 10, 1, -9 }, // 0x3C '<'
|
||||
{ 297, 8, 5, 10, 1, -8 }, // 0x3D '='
|
||||
{ 302, 8, 7, 10, 1, -9 }, // 0x3E '>'
|
||||
{ 309, 9, 13, 10, 0, -12 }, // 0x3F '?'
|
||||
{ 324, 17, 17, 19, 1, -12 }, // 0x40 '@'
|
||||
{ 361, 13, 13, 13, 0, -12 }, // 0x41 'A'
|
||||
{ 383, 11, 13, 14, 2, -12 }, // 0x42 'B'
|
||||
{ 401, 11, 13, 13, 1, -12 }, // 0x43 'C'
|
||||
{ 419, 12, 13, 15, 2, -12 }, // 0x44 'D'
|
||||
{ 439, 9, 13, 12, 2, -12 }, // 0x45 'E'
|
||||
{ 454, 9, 13, 11, 2, -12 }, // 0x46 'F'
|
||||
{ 469, 11, 13, 14, 1, -12 }, // 0x47 'G'
|
||||
{ 487, 11, 13, 15, 2, -12 }, // 0x48 'H'
|
||||
{ 505, 1, 13, 5, 2, -12 }, // 0x49 'I'
|
||||
{ 507, 7, 13, 9, 0, -12 }, // 0x4A 'J'
|
||||
{ 519, 11, 13, 13, 2, -12 }, // 0x4B 'K'
|
||||
{ 537, 8, 13, 11, 2, -12 }, // 0x4C 'L'
|
||||
{ 550, 13, 13, 17, 2, -12 }, // 0x4D 'M'
|
||||
{ 572, 11, 13, 15, 2, -12 }, // 0x4E 'N'
|
||||
{ 590, 13, 13, 15, 1, -12 }, // 0x4F 'O'
|
||||
{ 612, 10, 13, 13, 2, -12 }, // 0x50 'P'
|
||||
{ 629, 14, 16, 15, 1, -12 }, // 0x51 'Q'
|
||||
{ 657, 10, 13, 13, 2, -12 }, // 0x52 'R'
|
||||
{ 674, 9, 13, 11, 1, -12 }, // 0x53 'S'
|
||||
{ 689, 10, 13, 10, 0, -12 }, // 0x54 'T'
|
||||
{ 706, 10, 13, 14, 2, -12 }, // 0x55 'U'
|
||||
{ 723, 13, 13, 13, 0, -12 }, // 0x56 'V'
|
||||
{ 745, 18, 13, 20, 1, -12 }, // 0x57 'W'
|
||||
{ 775, 12, 13, 12, 0, -12 }, // 0x58 'X'
|
||||
{ 795, 11, 13, 11, 0, -12 }, // 0x59 'Y'
|
||||
{ 813, 10, 13, 12, 1, -12 }, // 0x5A 'Z'
|
||||
{ 830, 3, 16, 6, 2, -12 }, // 0x5B '['
|
||||
{ 836, 7, 17, 6, -1, -14 }, // 0x5C '\'
|
||||
{ 851, 4, 16, 6, 0, -12 }, // 0x5D ']'
|
||||
{ 859, 8, 7, 10, 1, -9 }, // 0x5E '^'
|
||||
{ 866, 9, 1, 9, 0, 1 }, // 0x5F '_'
|
||||
{ 868, 5, 2, 11, 2, -12 }, // 0x60 '`'
|
||||
{ 870, 8, 10, 11, 1, -9 }, // 0x61 'a'
|
||||
{ 880, 9, 13, 12, 2, -12 }, // 0x62 'b'
|
||||
{ 895, 8, 10, 10, 1, -9 }, // 0x63 'c'
|
||||
{ 905, 9, 13, 12, 1, -12 }, // 0x64 'd'
|
||||
{ 920, 9, 10, 11, 1, -9 }, // 0x65 'e'
|
||||
{ 932, 7, 13, 6, 0, -12 }, // 0x66 'f'
|
||||
{ 944, 10, 14, 12, 1, -9 }, // 0x67 'g'
|
||||
{ 962, 9, 13, 12, 2, -12 }, // 0x68 'h'
|
||||
{ 977, 2, 13, 5, 1, -12 }, // 0x69 'i'
|
||||
{ 981, 5, 17, 5, -2, -12 }, // 0x6A 'j'
|
||||
{ 992, 9, 13, 11, 2, -12 }, // 0x6B 'k'
|
||||
{ 1007, 1, 13, 5, 2, -12 }, // 0x6C 'l'
|
||||
{ 1009, 15, 10, 19, 2, -9 }, // 0x6D 'm'
|
||||
{ 1028, 9, 10, 12, 2, -9 }, // 0x6E 'n'
|
||||
{ 1040, 9, 10, 11, 1, -9 }, // 0x6F 'o'
|
||||
{ 1052, 9, 13, 12, 2, -9 }, // 0x70 'p'
|
||||
{ 1067, 9, 13, 12, 1, -9 }, // 0x71 'q'
|
||||
{ 1082, 5, 10, 7, 2, -9 }, // 0x72 'r'
|
||||
{ 1089, 8, 10, 9, 0, -9 }, // 0x73 's'
|
||||
{ 1099, 7, 12, 7, 0, -11 }, // 0x74 't'
|
||||
{ 1110, 8, 9, 12, 2, -8 }, // 0x75 'u'
|
||||
{ 1119, 10, 9, 10, 0, -8 }, // 0x76 'v'
|
||||
{ 1131, 16, 9, 16, 0, -8 }, // 0x77 'w'
|
||||
{ 1149, 9, 9, 10, 0, -8 }, // 0x78 'x'
|
||||
{ 1160, 10, 13, 10, 0, -8 }, // 0x79 'y'
|
||||
{ 1177, 7, 9, 9, 1, -8 }, // 0x7A 'z'
|
||||
{ 1185, 5, 16, 6, 1, -12 }, // 0x7B '{'
|
||||
{ 1195, 1, 16, 5, 2, -12 }, // 0x7C '|'
|
||||
{ 1197, 5, 16, 6, 0, -12 }, // 0x7D '}'
|
||||
{ 1207, 8, 3, 10, 1, -7 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Regular9pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Regular9pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Regular9pt7bGlyphs,
|
||||
0x20, 0x7E, 21 };
|
||||
|
||||
// Approx. 1882 bytes
|
||||
|
||||
#endif // MONTSERRAT9PT7B_H
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,536 +0,0 @@
|
||||
#ifndef MONTSERRATBOLD18PT7B_H
|
||||
#define MONTSERRATBOLD18PT7B_H
|
||||
const uint8_t Montserrat_Bold18pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7D, 0xE7,
|
||||
0x9E, 0x78, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0x78, 0xF1, 0xFE, 0x3F, 0xC7,
|
||||
0xF8, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3C, 0x01, 0xE0,
|
||||
0xF0, 0x03, 0xC0, 0xF0, 0x03, 0xC1, 0xE0, 0x03, 0xC1, 0xE0, 0x03, 0xC1,
|
||||
0xE0, 0x03, 0xC1, 0xE0, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF,
|
||||
0xFE, 0x7F, 0xFF, 0xFE, 0x07, 0x83, 0xC0, 0x07, 0x83, 0xC0, 0x07, 0x83,
|
||||
0xC0, 0x07, 0x83, 0xC0, 0x07, 0x83, 0xC0, 0x07, 0x83, 0xC0, 0xFF, 0xFF,
|
||||
0xFC, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0x0F, 0x07, 0x80, 0x0F, 0x07,
|
||||
0x80, 0x0F, 0x07, 0x80, 0x0F, 0x07, 0x80, 0x0F, 0x07, 0x80, 0x0F, 0x07,
|
||||
0x80, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x01,
|
||||
0xFE, 0x00, 0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFE, 0x7F, 0xFF, 0xC7,
|
||||
0xE7, 0x1C, 0x7C, 0x70, 0x4F, 0xC7, 0x00, 0xFC, 0x70, 0x07, 0xF7, 0x00,
|
||||
0x7F, 0xF0, 0x03, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0xFF, 0xFE, 0x01, 0xFF,
|
||||
0xE0, 0x07, 0xFF, 0x00, 0x73, 0xF0, 0x07, 0x1F, 0x00, 0x71, 0xF7, 0x07,
|
||||
0x3F, 0x7E, 0x77, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xE7, 0xFF, 0xF8, 0x0F,
|
||||
0xFF, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00,
|
||||
0x0F, 0x00, 0x07, 0x81, 0xFE, 0x00, 0x78, 0x1F, 0xF8, 0x07, 0x80, 0xF3,
|
||||
0xC0, 0x3C, 0x0F, 0x0F, 0x03, 0xC0, 0x78, 0x78, 0x3C, 0x03, 0x81, 0xC1,
|
||||
0xE0, 0x1C, 0x0E, 0x1E, 0x00, 0xF0, 0xF1, 0xE0, 0x07, 0x87, 0x9F, 0x00,
|
||||
0x1E, 0x78, 0xF0, 0x00, 0xFF, 0xCF, 0x00, 0x03, 0xFC, 0xF8, 0xFC, 0x07,
|
||||
0x87, 0x9F, 0xF0, 0x00, 0x78, 0xFF, 0xC0, 0x07, 0xCF, 0x1E, 0x00, 0x3C,
|
||||
0x70, 0x78, 0x03, 0xC3, 0x83, 0xC0, 0x3E, 0x1C, 0x1E, 0x01, 0xE0, 0xE0,
|
||||
0xF0, 0x1E, 0x07, 0x07, 0x81, 0xE0, 0x3C, 0x78, 0x0F, 0x00, 0xFF, 0xC0,
|
||||
0xF0, 0x07, 0xFC, 0x0F, 0x00, 0x0F, 0xC0, 0x00, 0xF8, 0x00, 0x03, 0xFF,
|
||||
0x00, 0x0F, 0xFF, 0x80, 0x0F, 0xFF, 0x80, 0x1F, 0x87, 0xC0, 0x1F, 0x07,
|
||||
0xC0, 0x1F, 0x07, 0xC0, 0x1F, 0x0F, 0xC0, 0x0F, 0x9F, 0x80, 0x0F, 0xFF,
|
||||
0x00, 0x07, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xFC, 0x00, 0x1F, 0xFE,
|
||||
0x3C, 0x3F, 0x7F, 0x3E, 0x7E, 0x3F, 0xBE, 0x7C, 0x1F, 0xFC, 0xFC, 0x0F,
|
||||
0xFC, 0xFC, 0x07, 0xF8, 0xFC, 0x03, 0xF8, 0x7E, 0x07, 0xFC, 0x7F, 0xFF,
|
||||
0xFE, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0x9C, 0x07, 0xFE, 0x0C, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x0F, 0x8F, 0x8F, 0xC7, 0xC3, 0xE3, 0xF1, 0xF0, 0xF8,
|
||||
0xFC, 0x7E, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E,
|
||||
0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF8, 0xFC, 0x3E, 0x1F, 0x0F, 0xC3, 0xE1,
|
||||
0xF8, 0x7C, 0x3E, 0x0F, 0x80, 0x7C, 0x1F, 0x03, 0xE0, 0xFC, 0x3F, 0x07,
|
||||
0xC1, 0xF8, 0x7E, 0x0F, 0x83, 0xE0, 0xFC, 0x3F, 0x0F, 0xC1, 0xF0, 0x7C,
|
||||
0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x3F, 0x0F, 0xC3, 0xF0, 0xF8, 0x3E, 0x0F,
|
||||
0x87, 0xE1, 0xF8, 0x7C, 0x3F, 0x0F, 0x83, 0xE1, 0xF0, 0xFC, 0x00, 0x03,
|
||||
0x80, 0x07, 0x00, 0x8E, 0x23, 0xDC, 0xE7, 0xFF, 0xE7, 0xFF, 0x87, 0xFC,
|
||||
0x0F, 0xF8, 0x7F, 0xFC, 0xFF, 0xF9, 0xCE, 0x71, 0x1C, 0x40, 0x38, 0x00,
|
||||
0x70, 0x00, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E,
|
||||
0x00, 0x1F, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
|
||||
0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0,
|
||||
0x10, 0xFB, 0xFF, 0xFF, 0xEF, 0xDF, 0x1E, 0x3C, 0xF1, 0xE3, 0x80, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0xFB, 0xFF, 0xFF, 0xEF, 0xDF, 0x00, 0x00,
|
||||
0x1F, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x7C, 0x00,
|
||||
0x7C, 0x00, 0x78, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF0, 0x01, 0xF0, 0x01,
|
||||
0xF0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x07,
|
||||
0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x1F, 0x00, 0x1F,
|
||||
0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x78,
|
||||
0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xF8, 0x03, 0xFF,
|
||||
0xE0, 0x3F, 0xFF, 0x81, 0xFF, 0xFE, 0x1F, 0xC3, 0xF9, 0xFC, 0x0F, 0xCF,
|
||||
0xC0, 0x3F, 0x7E, 0x01, 0xFB, 0xE0, 0x0F, 0xFF, 0x00, 0x3F, 0xF8, 0x01,
|
||||
0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7F, 0xF0, 0x03, 0xEF, 0x80, 0x3F, 0x7C,
|
||||
0x01, 0xFB, 0xF0, 0x0F, 0xDF, 0x80, 0xFC, 0x7E, 0x07, 0xE3, 0xFC, 0xFF,
|
||||
0x0F, 0xFF, 0xF0, 0x3F, 0xFF, 0x00, 0xFF, 0xF0, 0x03, 0xFE, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0,
|
||||
0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC,
|
||||
0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0x03, 0xF8,
|
||||
0x00, 0xFF, 0xF0, 0x3F, 0xFF, 0x87, 0xFF, 0xFC, 0xFF, 0xFF, 0xC7, 0xC0,
|
||||
0xFE, 0x18, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00,
|
||||
0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00,
|
||||
0x3F, 0xFF, 0xF7, 0xFF, 0xFF, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xF0, 0x7F, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE7, 0xFF,
|
||||
0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x1F,
|
||||
0x80, 0x07, 0xE0, 0x00, 0xFF, 0x80, 0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7F,
|
||||
0xF8, 0x00, 0x3F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x98, 0x03,
|
||||
0xF7, 0xE1, 0xFE, 0xFF, 0xFF, 0xBF, 0xFF, 0xF3, 0xFF, 0xF8, 0x1F, 0xFE,
|
||||
0x00, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0,
|
||||
0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x00,
|
||||
0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 0x01,
|
||||
0xF8, 0x7E, 0x07, 0xE0, 0xFC, 0x1F, 0x81, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
|
||||
0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07,
|
||||
0xE0, 0x1F, 0xFF, 0xC1, 0xFF, 0xFC, 0x1F, 0xFF, 0xC1, 0xFF, 0xFC, 0x1F,
|
||||
0xFF, 0xC1, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x1F, 0xFE, 0x03, 0xFF, 0xF8, 0x3F, 0xFF, 0xC3, 0xFF, 0xFE,
|
||||
0x00, 0x3F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03,
|
||||
0xF3, 0x00, 0x7F, 0x3F, 0x1F, 0xE7, 0xFF, 0xFE, 0xFF, 0xFF, 0xC7, 0xFF,
|
||||
0xF8, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x0F, 0xFF, 0x01, 0xFF, 0xF8,
|
||||
0x1F, 0xFF, 0xC1, 0xFF, 0xFC, 0x1F, 0xE0, 0x20, 0xFC, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x3F, 0xC1, 0xFF, 0xFF, 0x8F,
|
||||
0xFF, 0xFE, 0x7F, 0xFF, 0xFB, 0xFC, 0x1F, 0xDF, 0xC0, 0x7E, 0x7E, 0x01,
|
||||
0xFB, 0xF0, 0x0F, 0xDF, 0x80, 0x7E, 0xFC, 0x03, 0xE3, 0xF0, 0x3F, 0x0F,
|
||||
0xFF, 0xF0, 0x7F, 0xFF, 0x80, 0xFF, 0xF8, 0x03, 0xFF, 0x00, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x80,
|
||||
0x7E, 0xF8, 0x0F, 0xEF, 0x80, 0xFC, 0xF8, 0x0F, 0xC0, 0x01, 0xF8, 0x00,
|
||||
0x1F, 0x80, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x80,
|
||||
0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0x01, 0xFC, 0x00, 0x7F, 0xFC, 0x07, 0xFF, 0xF0, 0x7F, 0xFF, 0xC3,
|
||||
0xF8, 0xFE, 0x3F, 0x01, 0xF9, 0xF8, 0x0F, 0xCF, 0xC0, 0x7E, 0x7E, 0x03,
|
||||
0xF1, 0xF8, 0x3F, 0x8F, 0xFF, 0xF8, 0x3F, 0xFF, 0x81, 0xFF, 0xFC, 0x1F,
|
||||
0xFF, 0xF1, 0xFE, 0x1F, 0xCF, 0xC0, 0x7E, 0xFC, 0x01, 0xFF, 0xE0, 0x0F,
|
||||
0xFF, 0x00, 0x7F, 0xF8, 0x03, 0xF7, 0xE0, 0x3F, 0x3F, 0xFF, 0xF8, 0xFF,
|
||||
0xFF, 0x83, 0xFF, 0xF8, 0x07, 0xFF, 0x00, 0x03, 0xF0, 0x01, 0xFF, 0xE0,
|
||||
0x3F, 0xFF, 0x07, 0xFF, 0xF8, 0x7F, 0x3F, 0xCF, 0xC0, 0x7E, 0xFC, 0x07,
|
||||
0xEF, 0x80, 0x3E, 0xF8, 0x03, 0xFF, 0xC0, 0x7F, 0xFC, 0x07, 0xFF, 0xFB,
|
||||
0xFF, 0x7F, 0xFF, 0xF3, 0xFF, 0xFF, 0x1F, 0xFB, 0xF0, 0x7E, 0x3F, 0x00,
|
||||
0x03, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x38, 0x7F, 0xC3,
|
||||
0xFF, 0xF8, 0x7F, 0xFF, 0x07, 0xFF, 0xE0, 0x3F, 0xF8, 0x00, 0x10, 0xFB,
|
||||
0xFF, 0xFF, 0xEF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1F, 0x7F,
|
||||
0xFF, 0xFD, 0xFB, 0xE0, 0x10, 0xFB, 0xFF, 0xFF, 0xEF, 0xDF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, 0x1F, 0x7F, 0xFF, 0xFD, 0xFB, 0xE3, 0xC7, 0x9E,
|
||||
0x3C, 0x70, 0x00, 0x00, 0x80, 0x03, 0xC0, 0x07, 0xE0, 0x1F, 0xF0, 0x7F,
|
||||
0xF8, 0xFF, 0xE3, 0xFF, 0x81, 0xFF, 0x00, 0xFC, 0x00, 0x7F, 0x00, 0x3F,
|
||||
0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x0F, 0xFC, 0x01, 0xFE, 0x00, 0x1F,
|
||||
0x00, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x80, 0x00, 0x78, 0x00, 0x3F,
|
||||
0x00, 0x1F, 0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xE0, 0x0F, 0xFE, 0x01, 0xFF,
|
||||
0x00, 0x1F, 0x80, 0x1F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE7, 0xFF, 0x87, 0xFE,
|
||||
0x03, 0xFC, 0x01, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x01, 0xFF,
|
||||
0xE0, 0xFF, 0xFE, 0x3F, 0xFF, 0xEF, 0xFF, 0xFC, 0xF8, 0x1F, 0xC6, 0x01,
|
||||
0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F,
|
||||
0xC0, 0x07, 0xF0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xC0, 0x00, 0xF8,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x1F, 0x80, 0x03, 0xF8,
|
||||
0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00,
|
||||
0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFE, 0xFF,
|
||||
0xC0, 0x07, 0xF0, 0x01, 0xF8, 0x03, 0xF0, 0x00, 0x1F, 0x01, 0xF0, 0x00,
|
||||
0x03, 0xE0, 0x78, 0x00, 0x00, 0x7C, 0x3E, 0x0F, 0xF7, 0xCF, 0x0F, 0x07,
|
||||
0xFF, 0xF1, 0xE7, 0x83, 0xFF, 0xFC, 0x79, 0xE1, 0xFF, 0xFF, 0x0E, 0x78,
|
||||
0x7C, 0x0F, 0xC3, 0xDE, 0x3E, 0x01, 0xF0, 0xFF, 0x0F, 0x80, 0x7C, 0x3F,
|
||||
0xC3, 0xE0, 0x1F, 0x0F, 0xF0, 0xF8, 0x07, 0xC3, 0xFC, 0x3E, 0x01, 0xF0,
|
||||
0xFF, 0x0F, 0x80, 0x7C, 0x3D, 0xE3, 0xF0, 0x3F, 0x0E, 0x78, 0x7E, 0x1F,
|
||||
0xC7, 0x9E, 0x1F, 0xFF, 0xFF, 0xE3, 0xC3, 0xFF, 0xFF, 0xF0, 0xF0, 0x7F,
|
||||
0xE7, 0xF8, 0x1E, 0x0F, 0xE0, 0xFC, 0x07, 0xC0, 0x00, 0x00, 0x00, 0xF8,
|
||||
0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x03, 0xFC, 0x0F, 0x00, 0x00,
|
||||
0x7F, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xF8, 0x00,
|
||||
0x00, 0x1F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F,
|
||||
0xE0, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3E, 0xF8, 0x00,
|
||||
0x0F, 0xDF, 0x00, 0x01, 0xF3, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x0F, 0xC7,
|
||||
0xE0, 0x01, 0xF0, 0x7C, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0x81, 0xF8, 0x03,
|
||||
0xF0, 0x1F, 0x00, 0x7F, 0xFF, 0xF0, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF,
|
||||
0xE0, 0x7F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xC3, 0xE0, 0x01, 0xF8, 0xFC,
|
||||
0x00, 0x1F, 0x9F, 0x80, 0x03, 0xF7, 0xE0, 0x00, 0x3E, 0xFC, 0x00, 0x07,
|
||||
0xE0, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x0F, 0xFF, 0xFE, 0x3F, 0xFF, 0xFC,
|
||||
0xFF, 0xFF, 0xFB, 0xF0, 0x0F, 0xEF, 0xC0, 0x1F, 0xBF, 0x00, 0x7E, 0xFC,
|
||||
0x01, 0xFB, 0xF0, 0x07, 0xEF, 0xC0, 0xFF, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF,
|
||||
0xE3, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xBF, 0x00, 0x3F, 0xFC, 0x00, 0xFF,
|
||||
0xF0, 0x01, 0xFF, 0xC0, 0x07, 0xFF, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xF8, 0xFF, 0xFF, 0x80, 0x00, 0x3F,
|
||||
0x80, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0xFC, 0x0F, 0xFF, 0xFE, 0x1F, 0xFF,
|
||||
0xFF, 0x1F, 0xE0, 0x7E, 0x3F, 0x80, 0x1C, 0x7F, 0x00, 0x00, 0x7E, 0x00,
|
||||
0x00, 0x7E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00,
|
||||
0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x00, 0x3F, 0x00, 0x18, 0x3F, 0xC0, 0x3C, 0x1F, 0xF9,
|
||||
0xFE, 0x0F, 0xFF, 0xFE, 0x07, 0xFF, 0xFC, 0x03, 0xFF, 0xF8, 0x00, 0xFF,
|
||||
0xE0, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xC0, 0x3F, 0xFF, 0xF8, 0x1F, 0xFF,
|
||||
0xFE, 0x0F, 0xFF, 0xFF, 0x87, 0xE0, 0x3F, 0xE3, 0xF0, 0x03, 0xF9, 0xF8,
|
||||
0x00, 0xFC, 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x1F, 0xBF, 0x00, 0x07, 0xDF,
|
||||
0x80, 0x03, 0xEF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x7D,
|
||||
0xF8, 0x00, 0x7E, 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x3F, 0xBF, 0x00, 0x3F,
|
||||
0x9F, 0x80, 0x3F, 0xCF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF,
|
||||
0xC1, 0xFF, 0xFF, 0x80, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xDF, 0xFF,
|
||||
0xFB, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0xFF, 0xFD, 0xF8, 0x00, 0x3F, 0x00,
|
||||
0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFF, 0xFE, 0x7F, 0xFF,
|
||||
0xCF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE7, 0xE0, 0x00, 0xFC, 0x00,
|
||||
0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xC0, 0x03,
|
||||
0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFF,
|
||||
0xFF, 0xBF, 0xFF, 0xEF, 0xFF, 0xFB, 0xFF, 0xFE, 0xFC, 0x00, 0x3F, 0x00,
|
||||
0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03,
|
||||
0xF0, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x01, 0xFF, 0xF0, 0x03,
|
||||
0xFF, 0xFC, 0x0F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x1F, 0xE0, 0x7E, 0x3F,
|
||||
0x80, 0x1C, 0x7F, 0x00, 0x08, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7C,
|
||||
0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x3F, 0x7E, 0x00, 0x3F, 0x7E, 0x00, 0x3F, 0x7F, 0x00, 0x3F, 0x3F,
|
||||
0x00, 0x3F, 0x3F, 0xC0, 0x3F, 0x1F, 0xF9, 0xFF, 0x0F, 0xFF, 0xFF, 0x07,
|
||||
0xFF, 0xFE, 0x03, 0xFF, 0xFC, 0x00, 0xFF, 0xE0, 0xFC, 0x00, 0x7F, 0xF0,
|
||||
0x01, 0xFF, 0xC0, 0x07, 0xFF, 0x00, 0x1F, 0xFC, 0x00, 0x7F, 0xF0, 0x01,
|
||||
0xFF, 0xC0, 0x07, 0xFF, 0x00, 0x1F, 0xFC, 0x00, 0x7F, 0xF0, 0x01, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x00, 0x1F, 0xFC, 0x00, 0x7F, 0xF0, 0x01, 0xFF, 0xC0, 0x07,
|
||||
0xFF, 0x00, 0x1F, 0xFC, 0x00, 0x7F, 0xF0, 0x01, 0xFF, 0xC0, 0x07, 0xFF,
|
||||
0x00, 0x1F, 0xFC, 0x00, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
|
||||
0x1F, 0xFF, 0x8F, 0xFF, 0xC7, 0xFF, 0xE3, 0xFF, 0xF1, 0xFF, 0xF8, 0x00,
|
||||
0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0,
|
||||
0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F,
|
||||
0x80, 0x07, 0xC4, 0x07, 0xE7, 0x03, 0xF3, 0xE3, 0xFB, 0xFF, 0xF9, 0xFF,
|
||||
0xFC, 0x7F, 0xFC, 0x0F, 0xF8, 0x00, 0xFC, 0x00, 0xFF, 0xF8, 0x03, 0xFB,
|
||||
0xF0, 0x0F, 0xE7, 0xE0, 0x1F, 0x8F, 0xC0, 0x7E, 0x1F, 0x81, 0xF8, 0x3F,
|
||||
0x07, 0xE0, 0x7E, 0x1F, 0x80, 0xFC, 0x7E, 0x01, 0xF9, 0xF8, 0x03, 0xF7,
|
||||
0xE0, 0x07, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x80, 0x3F, 0xFF,
|
||||
0x80, 0x7F, 0xFF, 0x80, 0xFF, 0x3F, 0x81, 0xFC, 0x3F, 0x03, 0xF0, 0x7F,
|
||||
0x07, 0xE0, 0x7F, 0x0F, 0xC0, 0x7F, 0x1F, 0x80, 0x7F, 0x3F, 0x00, 0x7E,
|
||||
0x7E, 0x00, 0xFE, 0xFC, 0x00, 0xFE, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0,
|
||||
0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00,
|
||||
0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F,
|
||||
0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0,
|
||||
0x03, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xC0, 0xF8, 0x00, 0x01, 0xEF, 0x80, 0x00, 0x3E, 0xFC, 0x00,
|
||||
0x03, 0xEF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x0F, 0xEF, 0xF0, 0x00, 0xFE,
|
||||
0xFF, 0x00, 0x1F, 0xEF, 0xF8, 0x01, 0xFE, 0xFF, 0x80, 0x3F, 0xEF, 0xFC,
|
||||
0x07, 0xFE, 0xFF, 0xE0, 0x7F, 0xEF, 0xBE, 0x0F, 0xBE, 0xFB, 0xF0, 0xFB,
|
||||
0xEF, 0x9F, 0x1F, 0x3E, 0xF8, 0xFB, 0xF3, 0xEF, 0x8F, 0xFE, 0x3E, 0xF8,
|
||||
0x7F, 0xC3, 0xEF, 0x87, 0xFC, 0x3E, 0xF8, 0x3F, 0x83, 0xEF, 0x81, 0xF8,
|
||||
0x3F, 0xF8, 0x1F, 0x03, 0xFF, 0x80, 0xF0, 0x3F, 0xF8, 0x00, 0x03, 0xFF,
|
||||
0x80, 0x00, 0x3F, 0xF8, 0x00, 0x03, 0xF0, 0xF8, 0x00, 0x7F, 0xE0, 0x01,
|
||||
0xFF, 0xC0, 0x07, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x7F, 0xFE, 0x01, 0xFF,
|
||||
0xFC, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x7F, 0xFF, 0xC1, 0xFF, 0xFF,
|
||||
0x87, 0xFF, 0x7F, 0x1F, 0xFD, 0xFC, 0x7F, 0xF3, 0xF9, 0xFF, 0xC7, 0xF7,
|
||||
0xFF, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF,
|
||||
0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x0F, 0xFF, 0x00,
|
||||
0x3F, 0xFC, 0x00, 0x7C, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x0F,
|
||||
0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, 0x3F, 0xC0, 0xFF,
|
||||
0x0F, 0xE0, 0x07, 0xF3, 0xF8, 0x00, 0x7E, 0x7E, 0x00, 0x0F, 0xCF, 0xC0,
|
||||
0x00, 0xFD, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x7F,
|
||||
0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x3F, 0x7E, 0x00,
|
||||
0x07, 0xEF, 0xE0, 0x01, 0xF8, 0xFC, 0x00, 0x7F, 0x1F, 0xE0, 0x1F, 0xC1,
|
||||
0xFF, 0x9F, 0xF8, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF,
|
||||
0xC0, 0x00, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0xF8, 0x3F, 0xFF,
|
||||
0xF1, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x7E, 0x03, 0xFB, 0xF0, 0x0F, 0xFF,
|
||||
0x80, 0x3F, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xF8, 0x03,
|
||||
0xFF, 0xC0, 0x3F, 0xFE, 0x0F, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFC, 0xFF,
|
||||
0xFF, 0x87, 0xFF, 0xF0, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x00,
|
||||
0x3F, 0x80, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0xFF, 0xFF,
|
||||
0xE0, 0x1F, 0xFF, 0xFF, 0x01, 0xFE, 0x07, 0xF8, 0x3F, 0x80, 0x1F, 0xC7,
|
||||
0xF0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x7E, 0x7C, 0x00,
|
||||
0x07, 0xEF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7E,
|
||||
0xFC, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x7E, 0x7E, 0x00, 0x07, 0xE7, 0xF0,
|
||||
0x00, 0xFC, 0x3F, 0x00, 0x1F, 0xC3, 0xFC, 0x03, 0xF8, 0x1F, 0xF9, 0xFF,
|
||||
0x80, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0x80, 0x00,
|
||||
0xFF, 0xE0, 0x00, 0x00, 0xFE, 0x06, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x3F,
|
||||
0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, 0x00,
|
||||
0xFF, 0xE0, 0x03, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0xFF,
|
||||
0xFF, 0xF3, 0xF0, 0x1F, 0xCF, 0xC0, 0x3F, 0xBF, 0x00, 0x7E, 0xFC, 0x01,
|
||||
0xFB, 0xF0, 0x07, 0xEF, 0xC0, 0x1F, 0xBF, 0x00, 0x7E, 0xFC, 0x03, 0xFB,
|
||||
0xF0, 0x7F, 0xCF, 0xFF, 0xFF, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0x83, 0xFF,
|
||||
0xFC, 0x0F, 0xC1, 0xF8, 0x3F, 0x03, 0xF0, 0xFC, 0x0F, 0xC3, 0xF0, 0x1F,
|
||||
0x8F, 0xC0, 0x3F, 0x3F, 0x00, 0xFE, 0xFC, 0x01, 0xF8, 0x01, 0xFE, 0x00,
|
||||
0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFE, 0x7F, 0xFF, 0xC7, 0xE0, 0x1C,
|
||||
0x7C, 0x00, 0x4F, 0xC0, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xE0,
|
||||
0x03, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0xFF, 0xFE, 0x01, 0xFF, 0xE0, 0x01,
|
||||
0xFF, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF7, 0x00, 0x3F, 0x7E,
|
||||
0x07, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xE7, 0xFF, 0xF8, 0x0F, 0xFF, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x80, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E,
|
||||
0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00,
|
||||
0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0,
|
||||
0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0xF8, 0x00, 0xFF, 0xE0, 0x03, 0xFF,
|
||||
0x80, 0x0F, 0xFE, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0x80,
|
||||
0x0F, 0xFE, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0x80, 0x0F,
|
||||
0xFE, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0x80, 0x0F, 0xFE,
|
||||
0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, 0x1F, 0x9F, 0x80,
|
||||
0xFE, 0x7F, 0xDF, 0xF8, 0xFF, 0xFF, 0xC1, 0xFF, 0xFE, 0x03, 0xFF, 0xF0,
|
||||
0x03, 0xFF, 0x00, 0xFC, 0x00, 0x07, 0xFF, 0x00, 0x03, 0xF7, 0xE0, 0x00,
|
||||
0xFD, 0xF8, 0x00, 0x3E, 0x7F, 0x00, 0x1F, 0x8F, 0xC0, 0x07, 0xC3, 0xF0,
|
||||
0x03, 0xF0, 0x7E, 0x00, 0xF8, 0x1F, 0x80, 0x7E, 0x03, 0xF0, 0x1F, 0x80,
|
||||
0xFC, 0x0F, 0xC0, 0x3F, 0x83, 0xF0, 0x07, 0xE0, 0xF8, 0x01, 0xF8, 0x7E,
|
||||
0x00, 0x3F, 0x1F, 0x00, 0x0F, 0xCF, 0xC0, 0x01, 0xFB, 0xF0, 0x00, 0x7F,
|
||||
0xF8, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x00,
|
||||
0x00, 0xFC, 0x00, 0x7C, 0x00, 0x3F, 0xF8, 0x00, 0xFC, 0x00, 0xFF, 0xF0,
|
||||
0x03, 0xF8, 0x01, 0xF3, 0xF0, 0x07, 0xF0, 0x03, 0xE7, 0xE0, 0x0F, 0xE0,
|
||||
0x0F, 0xCF, 0xC0, 0x3F, 0xE0, 0x1F, 0x0F, 0xC0, 0x7F, 0xC0, 0x3E, 0x1F,
|
||||
0x80, 0xFF, 0x80, 0xFC, 0x3F, 0x03, 0xFF, 0x81, 0xF0, 0x3F, 0x07, 0xDF,
|
||||
0x03, 0xE0, 0x7E, 0x0F, 0xBE, 0x0F, 0xC0, 0xFC, 0x3E, 0x7E, 0x1F, 0x00,
|
||||
0xFC, 0x7C, 0x7C, 0x3E, 0x01, 0xF8, 0xF8, 0xF8, 0xFC, 0x03, 0xF3, 0xE1,
|
||||
0xF9, 0xF0, 0x03, 0xE7, 0xC1, 0xF3, 0xE0, 0x07, 0xEF, 0x83, 0xEF, 0xC0,
|
||||
0x0F, 0xFE, 0x07, 0xFF, 0x00, 0x0F, 0xFC, 0x07, 0xFE, 0x00, 0x1F, 0xF8,
|
||||
0x0F, 0xFC, 0x00, 0x3F, 0xE0, 0x1F, 0xF0, 0x00, 0x3F, 0xC0, 0x1F, 0xE0,
|
||||
0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0xFC,
|
||||
0x00, 0x7E, 0x00, 0x7E, 0x00, 0x3F, 0x3F, 0x80, 0x3F, 0x8F, 0xC0, 0x1F,
|
||||
0x83, 0xF0, 0x1F, 0x81, 0xFC, 0x1F, 0x80, 0x7F, 0x0F, 0xC0, 0x1F, 0x8F,
|
||||
0xC0, 0x07, 0xEF, 0xC0, 0x03, 0xFF, 0xE0, 0x00, 0xFF, 0xE0, 0x00, 0x3F,
|
||||
0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x03,
|
||||
0xFE, 0x00, 0x03, 0xFF, 0x80, 0x03, 0xFF, 0xE0, 0x01, 0xFB, 0xF0, 0x01,
|
||||
0xF8, 0xFC, 0x01, 0xF8, 0x3F, 0x01, 0xFC, 0x1F, 0xC0, 0xFC, 0x07, 0xE0,
|
||||
0xFC, 0x01, 0xF8, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x3F, 0x80, 0xFC, 0x00,
|
||||
0x1F, 0xFC, 0x00, 0x3F, 0x7E, 0x00, 0x7E, 0x7E, 0x00, 0x7C, 0x3F, 0x00,
|
||||
0xFC, 0x1F, 0x80, 0xF8, 0x1F, 0x81, 0xF8, 0x0F, 0xC3, 0xF0, 0x0F, 0xC3,
|
||||
0xE0, 0x07, 0xE7, 0xE0, 0x03, 0xF7, 0xC0, 0x03, 0xFF, 0xC0, 0x01, 0xFF,
|
||||
0x80, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E,
|
||||
0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E,
|
||||
0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E,
|
||||
0x00, 0x7F, 0xFF, 0xF9, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x9F, 0xFF, 0xFE,
|
||||
0x7F, 0xFF, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x00, 0xFC,
|
||||
0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x7F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F,
|
||||
0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1,
|
||||
0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
|
||||
0x7C, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF0,
|
||||
0x00, 0x7C, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x00,
|
||||
0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0,
|
||||
0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x01,
|
||||
0xE0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x07, 0xC0,
|
||||
0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1,
|
||||
0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C,
|
||||
0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x80, 0x03, 0xE0, 0x01, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00,
|
||||
0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0x78, 0x1E, 0x3C, 0x1F, 0x1F, 0x0F, 0x07,
|
||||
0x87, 0x83, 0xC7, 0x80, 0xF3, 0xC0, 0x7B, 0xC0, 0x1E, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFC, 0x7E, 0x07, 0xE0, 0x3E, 0x03, 0xE0, 0x3C, 0x07,
|
||||
0xF8, 0x0F, 0xFF, 0x87, 0xFF, 0xF0, 0xFF, 0xFE, 0x3E, 0x3F, 0xC4, 0x03,
|
||||
0xF0, 0x00, 0xFC, 0x00, 0x1F, 0x0F, 0xFF, 0xCF, 0xFF, 0xF7, 0xFF, 0xFD,
|
||||
0xF8, 0x1F, 0xFC, 0x07, 0xFF, 0x03, 0xFF, 0xC0, 0xFD, 0xFC, 0xFF, 0x7F,
|
||||
0xFF, 0xCF, 0xFD, 0xF1, 0xFE, 0x7C, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8,
|
||||
0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F,
|
||||
0x9F, 0xC0, 0xFB, 0xFF, 0x0F, 0xFF, 0xF8, 0xFF, 0xFF, 0xCF, 0xF9, 0xFE,
|
||||
0xFE, 0x07, 0xEF, 0xC0, 0x3F, 0xF8, 0x03, 0xFF, 0x80, 0x3F, 0xF8, 0x03,
|
||||
0xFF, 0x80, 0x3F, 0xF8, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x07, 0xEF, 0xF1,
|
||||
0xFE, 0xFF, 0xFF, 0xCF, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, 0x9F, 0xE0, 0x01,
|
||||
0xFC, 0x00, 0xFF, 0xE0, 0x7F, 0xFF, 0x1F, 0xFF, 0xE7, 0xFC, 0xFE, 0xFC,
|
||||
0x07, 0x9F, 0x00, 0x47, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0,
|
||||
0x00, 0x7E, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x07, 0x1F, 0xE3, 0xF9, 0xFF,
|
||||
0xFF, 0x1F, 0xFF, 0xC1, 0xFF, 0xF0, 0x0F, 0xF8, 0x00, 0x00, 0x01, 0xF8,
|
||||
0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00,
|
||||
0xFC, 0x00, 0x07, 0xE0, 0x7F, 0x3F, 0x0F, 0xFF, 0xF8, 0xFF, 0xFF, 0xCF,
|
||||
0xFF, 0xFE, 0xFF, 0x9F, 0xF7, 0xE0, 0x3F, 0xBF, 0x01, 0xFF, 0xF0, 0x07,
|
||||
0xFF, 0x80, 0x3F, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7E, 0xF8,
|
||||
0x03, 0xF7, 0xE0, 0x3F, 0xBF, 0xC7, 0xFC, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF,
|
||||
0x0F, 0xFF, 0xF8, 0x1F, 0xCF, 0xC0, 0x03, 0xFC, 0x00, 0xFF, 0xF0, 0x1F,
|
||||
0xFF, 0x83, 0xFF, 0xFC, 0x7F, 0x0F, 0xE7, 0xE0, 0x3E, 0x7C, 0x03, 0xFF,
|
||||
0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
|
||||
0x7C, 0x00, 0x07, 0xE0, 0x10, 0x7F, 0x87, 0x83, 0xFF, 0xFC, 0x1F, 0xFF,
|
||||
0xC0, 0xFF, 0xF8, 0x03, 0xFE, 0x00, 0x01, 0xFC, 0x0F, 0xF8, 0x3F, 0xF0,
|
||||
0x7F, 0xE1, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0xFF, 0xF9, 0xFF,
|
||||
0xF3, 0xFF, 0xE7, 0xFF, 0xC1, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0,
|
||||
0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07,
|
||||
0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x03, 0xF8, 0xF8, 0x7F, 0xF7,
|
||||
0xC7, 0xFF, 0xFE, 0x7F, 0xFF, 0xF7, 0xF8, 0xFF, 0xBF, 0x01, 0xFF, 0xF0,
|
||||
0x07, 0xFF, 0x80, 0x3F, 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x7F,
|
||||
0xF8, 0x03, 0xF7, 0xE0, 0x3F, 0xBF, 0xE7, 0xFC, 0xFF, 0xFF, 0xE3, 0xFF,
|
||||
0xFF, 0x0F, 0xFF, 0xF8, 0x1F, 0xCF, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF1,
|
||||
0x80, 0x3F, 0x1F, 0x8F, 0xF8, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0x1F, 0xFF,
|
||||
0x80, 0x3F, 0xF0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C,
|
||||
0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC7, 0xE0, 0xFB,
|
||||
0xFF, 0x1F, 0xFF, 0xF3, 0xFF, 0xFF, 0x7F, 0xFF, 0xEF, 0xE0, 0xFD, 0xF8,
|
||||
0x0F, 0xFE, 0x01, 0xFF, 0xC0, 0x3F, 0xF8, 0x07, 0xFF, 0x00, 0xFF, 0xE0,
|
||||
0x1F, 0xFC, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x0F, 0xFE, 0x01, 0xFF, 0xC0,
|
||||
0x3F, 0xF8, 0x07, 0xFF, 0x00, 0xFC, 0x10, 0xFB, 0xFF, 0xFF, 0xEF, 0x84,
|
||||
0x00, 0x00, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE7,
|
||||
0xCF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE0, 0x00, 0x80, 0x3E, 0x07, 0xF0,
|
||||
0x7F, 0x07, 0xF0, 0x3E, 0x00, 0x80, 0x00, 0x00, 0x00, 0x3E, 0x03, 0xE0,
|
||||
0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0,
|
||||
0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0,
|
||||
0x3E, 0x03, 0xE0, 0x7E, 0x47, 0xE7, 0xFC, 0xFF, 0xCF, 0xF8, 0x7E, 0x00,
|
||||
0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00,
|
||||
0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x7E, 0xF8, 0x0F, 0xCF, 0x83,
|
||||
0xF8, 0xF8, 0x7F, 0x0F, 0x8F, 0xE0, 0xF9, 0xFC, 0x0F, 0xBF, 0x80, 0xFF,
|
||||
0xF0, 0x0F, 0xFF, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0x80, 0xFF, 0xFC, 0x0F,
|
||||
0xEF, 0xE0, 0xFC, 0x7F, 0x0F, 0x83, 0xF8, 0xF8, 0x1F, 0x8F, 0x80, 0xFC,
|
||||
0xF8, 0x0F, 0xEF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF9, 0xFC,
|
||||
0x0F, 0xE1, 0xF7, 0xFE, 0x7F, 0xF3, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF,
|
||||
0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0xFE, 0x0F, 0xFF, 0x03, 0xF8,
|
||||
0x1F, 0xFC, 0x07, 0xE0, 0x1F, 0xF8, 0x07, 0xC0, 0x3F, 0xF0, 0x0F, 0x80,
|
||||
0x7F, 0xE0, 0x1F, 0x00, 0xFF, 0xC0, 0x3E, 0x01, 0xFF, 0x80, 0x7C, 0x03,
|
||||
0xFF, 0x00, 0xF8, 0x07, 0xFE, 0x01, 0xF0, 0x0F, 0xFC, 0x03, 0xE0, 0x1F,
|
||||
0xF8, 0x07, 0xC0, 0x3F, 0xF0, 0x0F, 0x80, 0x7F, 0xE0, 0x1F, 0x00, 0xF8,
|
||||
0xF8, 0xFC, 0x1F, 0x7F, 0xE3, 0xFF, 0xFE, 0x7F, 0xFF, 0xEF, 0xFF, 0xFD,
|
||||
0xFC, 0x1F, 0xBF, 0x01, 0xFF, 0xC0, 0x3F, 0xF8, 0x07, 0xFF, 0x00, 0xFF,
|
||||
0xE0, 0x1F, 0xFC, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x0F, 0xFE, 0x01, 0xFF,
|
||||
0xC0, 0x3F, 0xF8, 0x07, 0xFF, 0x00, 0xFF, 0xE0, 0x1F, 0x80, 0x01, 0xFC,
|
||||
0x00, 0x3F, 0xF8, 0x07, 0xFF, 0xF0, 0x7F, 0xFF, 0xC7, 0xF8, 0xFE, 0x3F,
|
||||
0x01, 0xF9, 0xF0, 0x0F, 0xDF, 0x80, 0x3F, 0xFC, 0x01, 0xFF, 0xE0, 0x0F,
|
||||
0xFF, 0x00, 0x7F, 0xF8, 0x03, 0xF7, 0xC0, 0x1F, 0x3F, 0x01, 0xF9, 0xFE,
|
||||
0x3F, 0xC7, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0x7F, 0xFC, 0x00, 0xFF, 0x80,
|
||||
0xF9, 0xFC, 0x0F, 0xBF, 0xF0, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0xFF, 0x9F,
|
||||
0xEF, 0xE0, 0x7E, 0xFC, 0x03, 0xFF, 0x80, 0x3F, 0xF8, 0x03, 0xFF, 0x80,
|
||||
0x3F, 0xF8, 0x03, 0xFF, 0x80, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x7E, 0xFF,
|
||||
0x1F, 0xEF, 0xFF, 0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0xF9, 0xFE, 0x0F,
|
||||
0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00,
|
||||
0xF8, 0x00, 0x0F, 0x80, 0x00, 0x03, 0xF9, 0xF8, 0x7F, 0xFF, 0xC7, 0xFF,
|
||||
0xFE, 0x7F, 0xFF, 0xF7, 0xF9, 0xFF, 0xBF, 0x01, 0xFF, 0xF0, 0x0F, 0xFF,
|
||||
0x80, 0x3F, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xF8, 0x03,
|
||||
0xFF, 0xC0, 0x1F, 0xBF, 0x01, 0xFD, 0xFE, 0x3F, 0xE7, 0xFF, 0xFF, 0x1F,
|
||||
0xFF, 0xF8, 0x7F, 0xFF, 0xC0, 0xFE, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F,
|
||||
0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00,
|
||||
0x0F, 0xC0, 0xF8, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0x07,
|
||||
0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0,
|
||||
0xF8, 0x1F, 0x03, 0xE0, 0x00, 0x07, 0xFC, 0x0F, 0xFF, 0x9F, 0xFF, 0xCF,
|
||||
0xFF, 0xCF, 0xC0, 0xE7, 0xC0, 0x03, 0xF0, 0x01, 0xFE, 0x00, 0x7F, 0xF8,
|
||||
0x3F, 0xFF, 0x07, 0xFF, 0xC0, 0x3F, 0xE0, 0x01, 0xFA, 0x00, 0x7D, 0xC0,
|
||||
0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0xFF, 0x0F, 0xFE, 0x00, 0x1F, 0x80,
|
||||
0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x0F, 0xFF, 0x9F, 0xFF, 0x3F, 0xFE, 0x7F,
|
||||
0xFC, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0,
|
||||
0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, 0x7F, 0xE0,
|
||||
0xFF, 0xC0, 0xFF, 0x80, 0xFF, 0x00, 0xFC, 0x03, 0xFF, 0x80, 0x7F, 0xF0,
|
||||
0x0F, 0xFE, 0x01, 0xFF, 0xC0, 0x3F, 0xF8, 0x07, 0xFF, 0x00, 0xFF, 0xE0,
|
||||
0x1F, 0xFC, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x0F, 0xFE, 0x01, 0xF7, 0xC0,
|
||||
0x7E, 0xFC, 0x0F, 0xDF, 0xEF, 0xFB, 0xFF, 0xFF, 0x3F, 0xFF, 0xE3, 0xFF,
|
||||
0xFC, 0x1F, 0xCF, 0x80, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xDF, 0x00, 0x7C,
|
||||
0xFC, 0x03, 0xE3, 0xE0, 0x3E, 0x1F, 0x81, 0xF0, 0xFC, 0x1F, 0x83, 0xE0,
|
||||
0xF8, 0x1F, 0x8F, 0xC0, 0x7C, 0x7C, 0x03, 0xF3, 0xE0, 0x1F, 0xBE, 0x00,
|
||||
0x7D, 0xF0, 0x03, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x01, 0xFC,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x7E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0xBE, 0x01,
|
||||
0xF0, 0x0F, 0x9F, 0x01, 0xFC, 0x07, 0xCF, 0x80, 0xFE, 0x03, 0xE3, 0xE0,
|
||||
0x7F, 0x03, 0xE1, 0xF0, 0x7F, 0xC1, 0xF0, 0xF8, 0x3F, 0xE0, 0xF0, 0x3E,
|
||||
0x1F, 0xF0, 0xF8, 0x1F, 0x1F, 0x7C, 0x7C, 0x0F, 0x8F, 0xBE, 0x3C, 0x03,
|
||||
0xEF, 0x8F, 0xBE, 0x01, 0xF7, 0xC7, 0xDF, 0x00, 0xFB, 0xE3, 0xFF, 0x00,
|
||||
0x3F, 0xE0, 0xFF, 0x80, 0x1F, 0xF0, 0x7F, 0xC0, 0x07, 0xF0, 0x3F, 0xC0,
|
||||
0x03, 0xF8, 0x0F, 0xE0, 0x01, 0xFC, 0x07, 0xE0, 0x00, 0x7C, 0x03, 0xF0,
|
||||
0x00, 0x7E, 0x03, 0xF3, 0xF0, 0x1F, 0x0F, 0xC1, 0xF8, 0x3F, 0x1F, 0x80,
|
||||
0xFD, 0xF8, 0x07, 0xEF, 0x80, 0x1F, 0xFC, 0x00, 0x7F, 0xC0, 0x01, 0xFC,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x07, 0xFC, 0x00, 0x7F, 0xF0, 0x07,
|
||||
0xEF, 0xC0, 0x3E, 0x7E, 0x03, 0xF1, 0xF8, 0x3F, 0x07, 0xE3, 0xF0, 0x3F,
|
||||
0x9F, 0x00, 0xFC, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xDF, 0x00, 0x7C, 0xFC,
|
||||
0x03, 0xE3, 0xE0, 0x3E, 0x1F, 0x81, 0xF0, 0xFC, 0x1F, 0x83, 0xE0, 0xF8,
|
||||
0x1F, 0x8F, 0xC0, 0x7C, 0x7C, 0x03, 0xF3, 0xE0, 0x0F, 0xBE, 0x00, 0x7D,
|
||||
0xF0, 0x03, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x01, 0xFC, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x80, 0x39, 0xF8,
|
||||
0x01, 0xFF, 0xC0, 0x1F, 0xFC, 0x00, 0xFF, 0xC0, 0x01, 0xF8, 0x00, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xF0, 0x03,
|
||||
0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF8, 0x01, 0xF8, 0x01,
|
||||
0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xE1, 0xFC, 0x7F, 0x8F, 0xF1, 0xF8,
|
||||
0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x7E,
|
||||
0x3F, 0xC7, 0xF0, 0xFC, 0x1F, 0xC3, 0xFC, 0x1F, 0x81, 0xF0, 0x3E, 0x07,
|
||||
0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xFC, 0x3F, 0xC3, 0xF8,
|
||||
0x3F, 0x01, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
|
||||
0xF8, 0x1F, 0x83, 0xF8, 0x7F, 0x87, 0xF0, 0x7E, 0x07, 0xC0, 0xF8, 0x1F,
|
||||
0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xF8, 0x7F, 0x07, 0xE3,
|
||||
0xFC, 0x7F, 0x8F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0,
|
||||
0x7C, 0x1F, 0x8F, 0xF1, 0xFE, 0x3F, 0x87, 0xE0, 0xF0, 0x00, 0x0C, 0x00,
|
||||
0x1F, 0xC1, 0xDF, 0xF1, 0xFF, 0xFF, 0xFF, 0x3F, 0xF7, 0x07, 0xFB, 0x81,
|
||||
0xF8 };
|
||||
|
||||
const GFXglyph Montserrat_Bold18pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 10, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 6, 25, 10, 2, -24 }, // 0x21 '!'
|
||||
{ 20, 11, 10, 15, 2, -24 }, // 0x22 '"'
|
||||
{ 34, 24, 25, 25, 1, -24 }, // 0x23 '#'
|
||||
{ 109, 20, 33, 22, 1, -28 }, // 0x24 '$'
|
||||
{ 192, 29, 25, 31, 1, -24 }, // 0x25 '%'
|
||||
{ 283, 24, 25, 25, 1, -24 }, // 0x26 '&'
|
||||
{ 358, 4, 10, 8, 2, -24 }, // 0x27 '''
|
||||
{ 363, 9, 33, 13, 3, -25 }, // 0x28 '('
|
||||
{ 401, 10, 33, 13, 0, -25 }, // 0x29 ')'
|
||||
{ 443, 15, 14, 15, 0, -25 }, // 0x2A '*'
|
||||
{ 470, 17, 16, 21, 2, -19 }, // 0x2B '+'
|
||||
{ 504, 7, 12, 9, 1, -6 }, // 0x2C ','
|
||||
{ 515, 10, 4, 14, 2, -11 }, // 0x2D '-'
|
||||
{ 520, 7, 7, 9, 1, -6 }, // 0x2E '.'
|
||||
{ 527, 16, 33, 14, -1, -28 }, // 0x2F '/'
|
||||
{ 593, 21, 25, 24, 1, -24 }, // 0x30 '0'
|
||||
{ 659, 11, 25, 14, 0, -24 }, // 0x31 '1'
|
||||
{ 694, 20, 25, 21, 0, -24 }, // 0x32 '2'
|
||||
{ 757, 19, 25, 21, 0, -24 }, // 0x33 '3'
|
||||
{ 817, 23, 25, 24, 1, -24 }, // 0x34 '4'
|
||||
{ 889, 20, 25, 21, 0, -24 }, // 0x35 '5'
|
||||
{ 952, 21, 25, 22, 1, -24 }, // 0x36 '6'
|
||||
{ 1018, 20, 25, 22, 1, -24 }, // 0x37 '7'
|
||||
{ 1081, 21, 25, 23, 1, -24 }, // 0x38 '8'
|
||||
{ 1147, 20, 25, 22, 1, -24 }, // 0x39 '9'
|
||||
{ 1210, 7, 20, 9, 1, -19 }, // 0x3A ':'
|
||||
{ 1228, 7, 25, 9, 1, -19 }, // 0x3B ';'
|
||||
{ 1250, 17, 17, 21, 2, -20 }, // 0x3C '<'
|
||||
{ 1287, 17, 13, 21, 2, -18 }, // 0x3D '='
|
||||
{ 1315, 17, 17, 21, 2, -20 }, // 0x3E '>'
|
||||
{ 1352, 19, 25, 21, 0, -24 }, // 0x3F '?'
|
||||
{ 1412, 34, 32, 36, 1, -24 }, // 0x40 '@'
|
||||
{ 1548, 27, 25, 27, 0, -24 }, // 0x41 'A'
|
||||
{ 1633, 22, 25, 27, 3, -24 }, // 0x42 'B'
|
||||
{ 1702, 24, 25, 25, 1, -24 }, // 0x43 'C'
|
||||
{ 1777, 25, 25, 29, 3, -24 }, // 0x44 'D'
|
||||
{ 1856, 19, 25, 23, 3, -24 }, // 0x45 'E'
|
||||
{ 1916, 18, 25, 22, 3, -24 }, // 0x46 'F'
|
||||
{ 1973, 24, 25, 27, 1, -24 }, // 0x47 'G'
|
||||
{ 2048, 22, 25, 28, 3, -24 }, // 0x48 'H'
|
||||
{ 2117, 6, 25, 11, 3, -24 }, // 0x49 'I'
|
||||
{ 2136, 17, 25, 19, -1, -24 }, // 0x4A 'J'
|
||||
{ 2190, 23, 25, 26, 3, -24 }, // 0x4B 'K'
|
||||
{ 2262, 18, 25, 21, 3, -24 }, // 0x4C 'L'
|
||||
{ 2319, 28, 25, 33, 3, -24 }, // 0x4D 'M'
|
||||
{ 2407, 22, 25, 28, 3, -24 }, // 0x4E 'N'
|
||||
{ 2476, 27, 25, 30, 1, -24 }, // 0x4F 'O'
|
||||
{ 2561, 21, 25, 26, 3, -24 }, // 0x50 'P'
|
||||
{ 2627, 28, 31, 30, 1, -24 }, // 0x51 'Q'
|
||||
{ 2736, 22, 25, 26, 3, -24 }, // 0x52 'R'
|
||||
{ 2805, 20, 25, 22, 1, -24 }, // 0x53 'S'
|
||||
{ 2868, 21, 25, 22, 0, -24 }, // 0x54 'T'
|
||||
{ 2934, 22, 25, 28, 3, -24 }, // 0x55 'U'
|
||||
{ 3003, 26, 25, 26, 0, -24 }, // 0x56 'V'
|
||||
{ 3085, 39, 25, 41, 1, -24 }, // 0x57 'W'
|
||||
{ 3207, 25, 25, 25, 0, -24 }, // 0x58 'X'
|
||||
{ 3286, 24, 25, 24, 0, -24 }, // 0x59 'Y'
|
||||
{ 3361, 22, 25, 23, 1, -24 }, // 0x5A 'Z'
|
||||
{ 3430, 9, 33, 13, 3, -25 }, // 0x5B '['
|
||||
{ 3468, 17, 33, 14, -2, -28 }, // 0x5C '\'
|
||||
{ 3539, 9, 33, 13, 1, -25 }, // 0x5D ']'
|
||||
{ 3577, 17, 15, 21, 2, -19 }, // 0x5E '^'
|
||||
{ 3609, 18, 3, 18, 0, 1 }, // 0x5F '_'
|
||||
{ 3616, 11, 5, 21, 3, -25 }, // 0x60 '`'
|
||||
{ 3623, 18, 19, 22, 1, -18 }, // 0x61 'a'
|
||||
{ 3666, 20, 26, 24, 3, -25 }, // 0x62 'b'
|
||||
{ 3731, 19, 19, 21, 1, -18 }, // 0x63 'c'
|
||||
{ 3777, 21, 26, 24, 1, -25 }, // 0x64 'd'
|
||||
{ 3846, 20, 19, 22, 1, -18 }, // 0x65 'e'
|
||||
{ 3894, 15, 26, 14, 0, -25 }, // 0x66 'f'
|
||||
{ 3943, 21, 26, 25, 1, -18 }, // 0x67 'g'
|
||||
{ 4012, 19, 26, 24, 3, -25 }, // 0x68 'h'
|
||||
{ 4074, 7, 28, 11, 2, -27 }, // 0x69 'i'
|
||||
{ 4099, 12, 35, 11, -3, -27 }, // 0x6A 'j'
|
||||
{ 4152, 20, 26, 23, 3, -25 }, // 0x6B 'k'
|
||||
{ 4217, 5, 26, 11, 3, -25 }, // 0x6C 'l'
|
||||
{ 4234, 31, 19, 37, 3, -18 }, // 0x6D 'm'
|
||||
{ 4308, 19, 19, 24, 3, -18 }, // 0x6E 'n'
|
||||
{ 4354, 21, 19, 23, 1, -18 }, // 0x6F 'o'
|
||||
{ 4404, 20, 26, 24, 3, -18 }, // 0x70 'p'
|
||||
{ 4469, 21, 26, 24, 1, -18 }, // 0x71 'q'
|
||||
{ 4538, 11, 19, 15, 3, -18 }, // 0x72 'r'
|
||||
{ 4565, 17, 19, 19, 1, -18 }, // 0x73 's'
|
||||
{ 4606, 15, 23, 15, 0, -22 }, // 0x74 't'
|
||||
{ 4650, 19, 19, 24, 2, -18 }, // 0x75 'u'
|
||||
{ 4696, 21, 19, 21, 0, -18 }, // 0x76 'v'
|
||||
{ 4746, 33, 19, 33, 0, -18 }, // 0x77 'w'
|
||||
{ 4825, 21, 19, 21, 0, -18 }, // 0x78 'x'
|
||||
{ 4875, 21, 26, 21, 0, -18 }, // 0x79 'y'
|
||||
{ 4944, 17, 19, 19, 1, -18 }, // 0x7A 'z'
|
||||
{ 4985, 11, 33, 14, 2, -25 }, // 0x7B '{'
|
||||
{ 5031, 5, 33, 11, 3, -25 }, // 0x7C '|'
|
||||
{ 5052, 11, 33, 14, 1, -25 }, // 0x7D '}'
|
||||
{ 5098, 17, 7, 21, 2, -15 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Bold18pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Bold18pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Bold18pt7bGlyphs,
|
||||
0x20, 0x7E, 43 };
|
||||
|
||||
// Approx. 5785 bytes
|
||||
|
||||
#endif // MONTSERRATBOLD18PT7B_H
|
||||
@@ -1,745 +0,0 @@
|
||||
#ifndef MONTSERRATBOLD22PT7B_H
|
||||
#define MONTSERRATBOLD22PT7B_H
|
||||
const uint8_t Montserrat_Bold22pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
|
||||
0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x3E, 0x00, 0x00, 0x00,
|
||||
0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0x3E, 0xFC, 0x7F, 0xF8, 0xFF, 0xF1,
|
||||
0xFF, 0xE3, 0xFF, 0xC7, 0xFF, 0x8F, 0xFF, 0x1F, 0xFE, 0x3F, 0xFC, 0x7F,
|
||||
0xF0, 0xFB, 0xE1, 0xF3, 0xC1, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x07, 0xC0,
|
||||
0xF8, 0x00, 0x3E, 0x07, 0xC0, 0x01, 0xF0, 0x3E, 0x00, 0x0F, 0x81, 0xF0,
|
||||
0x00, 0x7C, 0x0F, 0x80, 0x03, 0xC0, 0x7C, 0x0F, 0xFF, 0xFF, 0xFF, 0x7F,
|
||||
0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFE, 0x03, 0xE0,
|
||||
0x7C, 0x00, 0x1F, 0x03, 0xE0, 0x00, 0xF8, 0x1F, 0x00, 0x07, 0x80, 0xF8,
|
||||
0x00, 0x7C, 0x07, 0x80, 0x03, 0xE0, 0x7C, 0x00, 0x1F, 0x03, 0xE0, 0x3F,
|
||||
0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xC0, 0xF8, 0x0F, 0x00, 0x07, 0xC0, 0xF8,
|
||||
0x00, 0x3E, 0x07, 0xC0, 0x01, 0xF0, 0x3E, 0x00, 0x0F, 0x81, 0xF0, 0x00,
|
||||
0x7C, 0x0F, 0x80, 0x03, 0xE0, 0x7C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F,
|
||||
0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x0F,
|
||||
0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFE, 0x1F,
|
||||
0xFF, 0xFF, 0x1F, 0xF7, 0x9F, 0x8F, 0xE3, 0xC1, 0x87, 0xF1, 0xE0, 0x03,
|
||||
0xF8, 0xF0, 0x01, 0xFC, 0x78, 0x00, 0xFF, 0x3C, 0x00, 0x7F, 0xFE, 0x00,
|
||||
0x1F, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF,
|
||||
0xE0, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x1E,
|
||||
0x7F, 0x80, 0x0F, 0x1F, 0xC0, 0x07, 0x8F, 0xE6, 0x03, 0xC7, 0xF3, 0xC1,
|
||||
0xE3, 0xFB, 0xFC, 0xF7, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFC, 0x7F,
|
||||
0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0x7C, 0x01, 0xFF, 0x80, 0x0F, 0xC0, 0x3F, 0xFC, 0x00,
|
||||
0xF8, 0x07, 0xC7, 0xC0, 0x1F, 0x00, 0x78, 0x3E, 0x03, 0xF0, 0x0F, 0x83,
|
||||
0xE0, 0x3E, 0x00, 0xF8, 0x1E, 0x07, 0xC0, 0x0F, 0x81, 0xE0, 0xFC, 0x00,
|
||||
0xF8, 0x1E, 0x0F, 0x80, 0x0F, 0x81, 0xE1, 0xF0, 0x00, 0xF8, 0x3E, 0x3E,
|
||||
0x00, 0x07, 0x83, 0xC3, 0xE0, 0x00, 0x7E, 0xFC, 0x7C, 0x00, 0x03, 0xFF,
|
||||
0x8F, 0x80, 0x00, 0x1F, 0xF0, 0xF8, 0x7E, 0x00, 0xFE, 0x1F, 0x1F, 0xF8,
|
||||
0x00, 0x03, 0xE3, 0xFF, 0xC0, 0x00, 0x3E, 0x3E, 0x7E, 0x00, 0x07, 0xC7,
|
||||
0xC3, 0xE0, 0x00, 0xF8, 0x78, 0x1E, 0x00, 0x1F, 0x87, 0x81, 0xE0, 0x01,
|
||||
0xF0, 0x78, 0x1F, 0x00, 0x3E, 0x07, 0x81, 0xF0, 0x07, 0xE0, 0x78, 0x1E,
|
||||
0x00, 0x7C, 0x07, 0x81, 0xE0, 0x0F, 0x80, 0x7C, 0x3E, 0x01, 0xF8, 0x03,
|
||||
0xE7, 0xE0, 0x1F, 0x00, 0x3F, 0xFC, 0x03, 0xE0, 0x01, 0xFF, 0x80, 0x7C,
|
||||
0x00, 0x0F, 0xF0, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x07, 0xFF,
|
||||
0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xE3, 0xF8, 0x01, 0xFC, 0x1F, 0x80,
|
||||
0x1F, 0x81, 0xF8, 0x01, 0xF8, 0x1F, 0x80, 0x1F, 0xC1, 0xF8, 0x00, 0xFC,
|
||||
0x7F, 0x00, 0x0F, 0xEF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xC0,
|
||||
0x00, 0x3F, 0xF0, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xF8, 0x3C, 0x3F,
|
||||
0xFF, 0xC3, 0xE7, 0xF9, 0xFE, 0x7E, 0xFE, 0x0F, 0xF7, 0xEF, 0xE0, 0x7F,
|
||||
0xFE, 0xFC, 0x03, 0xFF, 0xCF, 0xC0, 0x1F, 0xFC, 0xFC, 0x00, 0xFF, 0x8F,
|
||||
0xE0, 0x07, 0xF8, 0xFF, 0x01, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xFF, 0xF3, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xE1, 0xC0, 0x7F, 0xF8, 0x0C,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
|
||||
0x9E, 0x07, 0xF0, 0x7E, 0x0F, 0xE0, 0xFC, 0x1F, 0xC1, 0xF8, 0x3F, 0x83,
|
||||
0xF8, 0x3F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7E, 0x07, 0xE0, 0xFE, 0x0F,
|
||||
0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F,
|
||||
0xE0, 0xFE, 0x0F, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xF0, 0x7F, 0x03,
|
||||
0xF0, 0x3F, 0x83, 0xF8, 0x1F, 0x81, 0xFC, 0x1F, 0xC0, 0xFC, 0x0F, 0xE0,
|
||||
0x7E, 0x7E, 0x07, 0xF0, 0x3F, 0x03, 0xF8, 0x1F, 0x81, 0xFC, 0x1F, 0xC0,
|
||||
0xFC, 0x0F, 0xE0, 0xFE, 0x07, 0xE0, 0x7E, 0x07, 0xF0, 0x7F, 0x07, 0xF0,
|
||||
0x7F, 0x07, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0,
|
||||
0x3F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7E, 0x0F, 0xE0,
|
||||
0xFE, 0x0F, 0xE0, 0xFC, 0x1F, 0xC1, 0xF8, 0x3F, 0x83, 0xF8, 0x7F, 0x07,
|
||||
0xE0, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x0C, 0x78, 0xEF, 0xBC, 0xF7,
|
||||
0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xF8, 0x0F, 0xF8, 0x0F, 0xFE, 0x1F, 0xFF,
|
||||
0xDF, 0xFF, 0xFF, 0xBD, 0xF3, 0x9E, 0x38, 0x0F, 0x00, 0x07, 0x80, 0x03,
|
||||
0xC0, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80,
|
||||
0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F,
|
||||
0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01,
|
||||
0xF8, 0x00, 0x1F, 0x80, 0x1E, 0x3F, 0x9F, 0xEF, 0xF7, 0xFB, 0xFD, 0xFC,
|
||||
0x7E, 0x1F, 0x1F, 0x0F, 0x87, 0x83, 0xC3, 0xE1, 0xE0, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x3F, 0x9F, 0xFF, 0xFF, 0xFB,
|
||||
0xFD, 0xFC, 0x7C, 0x00, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00,
|
||||
0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00,
|
||||
0x1F, 0x80, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x7E, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0,
|
||||
0x01, 0xF8, 0x00, 0x1F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x03, 0xF0,
|
||||
0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x00, 0xFC,
|
||||
0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x3F,
|
||||
0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07,
|
||||
0xE0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x00, 0xFF,
|
||||
0xE0, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0xFF,
|
||||
0xFF, 0xF0, 0xFF, 0x8F, 0xF8, 0xFF, 0x01, 0xFE, 0x7F, 0x00, 0x7F, 0x3F,
|
||||
0x80, 0x3F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x03, 0xFF,
|
||||
0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, 0x00, 0x3F,
|
||||
0xFF, 0x00, 0x1F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x03,
|
||||
0xFF, 0xF0, 0x01, 0xFD, 0xFC, 0x01, 0xFE, 0xFE, 0x00, 0xFE, 0x7F, 0x80,
|
||||
0xFF, 0x1F, 0xFB, 0xFF, 0x07, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x80, 0xFF,
|
||||
0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x38, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0xFC, 0x0F, 0xE0, 0x7F,
|
||||
0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F, 0x81, 0xFC, 0x0F, 0xE0,
|
||||
0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F, 0x81, 0xFC, 0x0F,
|
||||
0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F, 0x81, 0xFC,
|
||||
0x00, 0x18, 0x00, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF8,
|
||||
0x7F, 0xFF, 0xFC, 0xFF, 0xFF, 0xFC, 0x7F, 0x87, 0xFE, 0x3E, 0x01, 0xFE,
|
||||
0x0C, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x01, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80,
|
||||
0x00, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF,
|
||||
0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE,
|
||||
0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFC,
|
||||
0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0xC0,
|
||||
0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0xFF, 0xFE,
|
||||
0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x7F, 0x30, 0x00, 0xFF, 0x38, 0x00, 0xFE, 0x7F, 0x87, 0xFE,
|
||||
0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xF0,
|
||||
0x0F, 0xFF, 0xC0, 0x00, 0x18, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F,
|
||||
0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00,
|
||||
0x03, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00,
|
||||
0x07, 0xF8, 0x7E, 0x00, 0xFF, 0x07, 0xE0, 0x0F, 0xE0, 0x7E, 0x01, 0xFC,
|
||||
0x07, 0xE0, 0x3F, 0xC0, 0x7E, 0x07, 0xF8, 0x07, 0xE0, 0x7F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00,
|
||||
0x00, 0x07, 0xE0, 0x0F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFE,
|
||||
0x0F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFE, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00,
|
||||
0x1F, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFC,
|
||||
0x1F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x10, 0x00, 0x7F,
|
||||
0x3C, 0x00, 0xFF, 0x3F, 0xC7, 0xFF, 0x7F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFC,
|
||||
0x7F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00,
|
||||
0x00, 0x03, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x7F, 0xFF, 0x80, 0xFF, 0xFF,
|
||||
0xC0, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0xFF, 0xC0, 0x60, 0x7F, 0x80,
|
||||
0x00, 0x7F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xC0,
|
||||
0x00, 0x0F, 0xE1, 0xF8, 0x07, 0xF7, 0xFF, 0x83, 0xFF, 0xFF, 0xE1, 0xFF,
|
||||
0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x7F, 0xF1, 0xFF, 0xBF, 0xE0, 0x3F, 0xDF,
|
||||
0xE0, 0x0F, 0xEF, 0xF0, 0x03, 0xF7, 0xF8, 0x01, 0xFF, 0xF8, 0x00, 0xFC,
|
||||
0xFE, 0x00, 0xFE, 0x7F, 0x00, 0x7F, 0x1F, 0xE0, 0x7F, 0x8F, 0xFF, 0xFF,
|
||||
0x83, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0x80, 0x07, 0xFF,
|
||||
0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
|
||||
0xFE, 0xFC, 0x01, 0xFE, 0xFC, 0x01, 0xFC, 0xFC, 0x01, 0xFC, 0x00, 0x03,
|
||||
0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x1F,
|
||||
0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x80, 0x00, 0x7F,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFE,
|
||||
0x00, 0x01, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x0E,
|
||||
0x00, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x1F,
|
||||
0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xC3, 0xFC, 0x07, 0xF0, 0xFE, 0x01, 0xFE,
|
||||
0x3F, 0x80, 0x3F, 0x8F, 0xE0, 0x0F, 0xE3, 0xF8, 0x03, 0xF8, 0xFE, 0x01,
|
||||
0xFC, 0x3F, 0xE0, 0xFF, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xC0, 0x3F,
|
||||
0xFF, 0xF0, 0x1F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xC7, 0xFC, 0x07, 0xF9,
|
||||
0xFC, 0x00, 0xFE, 0x7F, 0x00, 0x3F, 0xDF, 0xC0, 0x07, 0xFF, 0xF0, 0x01,
|
||||
0xFD, 0xFC, 0x00, 0x7F, 0x7F, 0x00, 0x3F, 0xDF, 0xE0, 0x1F, 0xE3, 0xFF,
|
||||
0xFF, 0xF8, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0x00,
|
||||
0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0xFF, 0xC0,
|
||||
0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x83, 0xFF, 0xFF,
|
||||
0xE1, 0xFC, 0x07, 0xF9, 0xFC, 0x01, 0xFC, 0xFE, 0x00, 0x7F, 0x7F, 0x00,
|
||||
0x3F, 0xBF, 0x80, 0x1F, 0xDF, 0xC0, 0x0F, 0xEF, 0xE0, 0x0F, 0xFF, 0xF8,
|
||||
0x0F, 0xFD, 0xFF, 0x9F, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x8F,
|
||||
0xFF, 0xDF, 0xC1, 0xFF, 0xCF, 0xE0, 0x3F, 0x0F, 0xE0, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x10, 0x03, 0xFE,
|
||||
0x0E, 0x07, 0xFE, 0x0F, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x07, 0xFF, 0xFE,
|
||||
0x03, 0xFF, 0xFE, 0x00, 0x7F, 0xF8, 0x00, 0x01, 0x80, 0x00, 0x1E, 0x3F,
|
||||
0x9F, 0xFF, 0xFF, 0xFB, 0xFD, 0xFC, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x3C, 0x7F, 0x3F, 0xFF, 0xFF, 0xF7, 0xFB, 0xF8, 0xF8,
|
||||
0x1E, 0x3F, 0x9F, 0xFF, 0xFF, 0xFB, 0xFD, 0xFC, 0x7C, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x7F, 0x3F, 0xDF, 0xEF, 0xF7, 0xFB,
|
||||
0xF8, 0xFC, 0x3E, 0x3E, 0x1F, 0x0F, 0x07, 0x87, 0xC3, 0xC0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x07, 0x00, 0x01, 0xF0, 0x00, 0xFF, 0x00, 0x7F, 0xF0, 0x1F,
|
||||
0xFF, 0x0F, 0xFF, 0xC7, 0xFF, 0xE0, 0xFF, 0xF8, 0x0F, 0xFC, 0x00, 0xFE,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, 0x00,
|
||||
0xFF, 0xFC, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x1F,
|
||||
0x00, 0x00, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0E,
|
||||
0x00, 0x00, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x80,
|
||||
0x3F, 0xFF, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x07,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x3F, 0xF0, 0x1F, 0xFF, 0x0F, 0xFF, 0xC7, 0xFF,
|
||||
0xF0, 0xFF, 0xF8, 0x0F, 0xFC, 0x00, 0xFF, 0x00, 0x0F, 0x80, 0x00, 0xC0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x07, 0xFF, 0x80, 0x3F, 0xFF,
|
||||
0xC1, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xDF, 0xE0, 0xFF,
|
||||
0x9F, 0x00, 0xFF, 0x0C, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x3E, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFE, 0x00, 0x07, 0xFC,
|
||||
0x00, 0x07, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00,
|
||||
0x1C, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00,
|
||||
0x1F, 0xF0, 0x00, 0xFF, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x1F, 0xC0,
|
||||
0x00, 0x03, 0xF0, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x0F, 0x80, 0x00, 0x00,
|
||||
0x3E, 0x0F, 0xC0, 0x7F, 0x9F, 0x8F, 0x8F, 0xC0, 0xFF, 0xEF, 0xC7, 0xC7,
|
||||
0xC0, 0xFF, 0xFF, 0xE1, 0xF3, 0xE0, 0xFF, 0xFF, 0xF0, 0xFB, 0xE0, 0xFF,
|
||||
0xFF, 0xF8, 0x3D, 0xF0, 0x7F, 0x03, 0xFC, 0x1E, 0xF8, 0x7F, 0x00, 0xFE,
|
||||
0x0F, 0xFC, 0x3F, 0x00, 0x3F, 0x07, 0xFE, 0x1F, 0x80, 0x1F, 0x83, 0xFF,
|
||||
0x0F, 0xC0, 0x0F, 0xC1, 0xFF, 0x87, 0xE0, 0x07, 0xE0, 0xFF, 0xC3, 0xF0,
|
||||
0x03, 0xF0, 0x7F, 0xE1, 0xF8, 0x01, 0xF8, 0x3F, 0xF0, 0xFC, 0x00, 0xFC,
|
||||
0x1E, 0xF8, 0x7F, 0x00, 0xFE, 0x0F, 0x7C, 0x1F, 0xC0, 0xFF, 0x8F, 0x9F,
|
||||
0x0F, 0xFF, 0xFF, 0xEF, 0x8F, 0x83, 0xFF, 0xFF, 0xFF, 0xC7, 0xE0, 0xFF,
|
||||
0xF9, 0xFF, 0xC1, 0xF0, 0x3F, 0xF8, 0xFF, 0xC0, 0xFC, 0x07, 0xF8, 0x1F,
|
||||
0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x06, 0x00, 0x00, 0x3F, 0xF8,
|
||||
0x7F, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xE0,
|
||||
0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00,
|
||||
0x03, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xE0, 0x00,
|
||||
0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x7F, 0x7F, 0x00,
|
||||
0x00, 0x3F, 0x1F, 0x80, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x1F, 0x87, 0xF0,
|
||||
0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x07, 0xE0, 0x3F,
|
||||
0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x03, 0xF0, 0x0F, 0xE0, 0x03, 0xF8, 0x03,
|
||||
0xF8, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
|
||||
0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF,
|
||||
0xFF, 0xF8, 0x3F, 0x80, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x7F, 0x1F, 0xC0,
|
||||
0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x07, 0xFF, 0xF0,
|
||||
0x00, 0x01, 0xFC, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF,
|
||||
0xF8, 0x7F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF9, 0xF8, 0x01, 0xFF, 0x3F,
|
||||
0x00, 0x0F, 0xF7, 0xE0, 0x01, 0xFE, 0xFC, 0x00, 0x1F, 0xDF, 0x80, 0x03,
|
||||
0xF3, 0xF0, 0x00, 0xFE, 0x7E, 0x00, 0x3F, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF,
|
||||
0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF,
|
||||
0x9F, 0x80, 0x0F, 0xFB, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xC0,
|
||||
0x00, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0xFF,
|
||||
0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xFF, 0xCF, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0x80,
|
||||
0x00, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFC, 0x07,
|
||||
0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0x3F, 0xF3, 0xFE, 0x00,
|
||||
0x7C, 0x7F, 0xC0, 0x01, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00,
|
||||
0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x00, 0x7F, 0x80, 0x01, 0x03, 0xFC, 0x00, 0x3C, 0x3F, 0xF0, 0x07,
|
||||
0xE1, 0xFF, 0xE7, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, 0x03,
|
||||
0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x08,
|
||||
0x00, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xE0,
|
||||
0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x8F,
|
||||
0xE0, 0x07, 0xFE, 0x3F, 0x80, 0x07, 0xFC, 0xFE, 0x00, 0x0F, 0xFB, 0xF8,
|
||||
0x00, 0x1F, 0xEF, 0xE0, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00,
|
||||
0x01, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0x80, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F,
|
||||
0xBF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x07, 0xFB, 0xF8, 0x00, 0x3F, 0xCF,
|
||||
0xE0, 0x01, 0xFF, 0x3F, 0x80, 0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF,
|
||||
0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF,
|
||||
0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFB,
|
||||
0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xDF, 0x80, 0x00, 0x3F,
|
||||
0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF0,
|
||||
0x00, 0x07, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFE, 0x3F, 0xFF,
|
||||
0xFC, 0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF1, 0xF8, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xCF,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFC, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xCF, 0xFF,
|
||||
0xFF, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F,
|
||||
0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x01, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xC0, 0x7F,
|
||||
0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFC, 0x7F, 0xF0, 0xFF, 0xC7, 0xFE, 0x00,
|
||||
0xFC, 0x7F, 0xC0, 0x01, 0xC3, 0xFC, 0x00, 0x04, 0x1F, 0xC0, 0x00, 0x01,
|
||||
0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8,
|
||||
0x00, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0xFE, 0x00, 0x03, 0xF7, 0xF0, 0x00,
|
||||
0x1F, 0xBF, 0x80, 0x00, 0xFD, 0xFC, 0x00, 0x07, 0xEF, 0xF0, 0x00, 0x3F,
|
||||
0x3F, 0x80, 0x01, 0xF9, 0xFE, 0x00, 0x0F, 0xC7, 0xF8, 0x00, 0x7E, 0x3F,
|
||||
0xF0, 0x03, 0xF0, 0xFF, 0xFB, 0xFF, 0x83, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF,
|
||||
0xFF, 0xE0, 0x3F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0xFF, 0xF8,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8,
|
||||
0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F,
|
||||
0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0xC0,
|
||||
0x01, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x07, 0xFF,
|
||||
0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x3F, 0xFF,
|
||||
0x00, 0x07, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xC0, 0xFF, 0xFF,
|
||||
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, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0xC7, 0xFF, 0xFE, 0x3F, 0xFF, 0xF1,
|
||||
0xFF, 0xFF, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80,
|
||||
0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F,
|
||||
0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x60,
|
||||
0x0F, 0xE7, 0x80, 0xFF, 0x3F, 0x0F, 0xF3, 0xFF, 0xFF, 0x9F, 0xFF, 0xF8,
|
||||
0x7F, 0xFF, 0x81, 0xFF, 0xF8, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFC,
|
||||
0x00, 0x1F, 0xEF, 0xC0, 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x8F, 0xC0, 0x0F,
|
||||
0xF0, 0xFC, 0x01, 0xFE, 0x0F, 0xC0, 0x3F, 0xC0, 0xFC, 0x03, 0xF8, 0x0F,
|
||||
0xC0, 0x7F, 0x80, 0xFC, 0x0F, 0xF0, 0x0F, 0xC1, 0xFE, 0x00, 0xFC, 0x3F,
|
||||
0xC0, 0x0F, 0xC7, 0xF8, 0x00, 0xFC, 0xFF, 0x00, 0x0F, 0xDF, 0xE0, 0x00,
|
||||
0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF,
|
||||
0xFC, 0x00, 0xFF, 0xDF, 0xE0, 0x0F, 0xF8, 0xFF, 0x00, 0xFF, 0x0F, 0xF8,
|
||||
0x0F, 0xE0, 0x7F, 0xC0, 0xFC, 0x03, 0xFC, 0x0F, 0xC0, 0x1F, 0xE0, 0xFC,
|
||||
0x00, 0xFF, 0x0F, 0xC0, 0x0F, 0xF8, 0xFC, 0x00, 0x7F, 0xCF, 0xC0, 0x03,
|
||||
0xFC, 0xFC, 0x00, 0x1F, 0xEF, 0xC0, 0x00, 0xFF, 0xFE, 0x00, 0x03, 0xF8,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F,
|
||||
0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F,
|
||||
0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0x00, 0x00, 0x1F, 0xBF,
|
||||
0x00, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xFC, 0x00, 0x00, 0xFE,
|
||||
0xFF, 0x00, 0x00, 0x7F, 0xBF, 0xE0, 0x00, 0x3F, 0xEF, 0xF8, 0x00, 0x0F,
|
||||
0xFB, 0xFF, 0x00, 0x07, 0xFE, 0xFF, 0xE0, 0x01, 0xFF, 0xBF, 0xF8, 0x00,
|
||||
0xFF, 0xEF, 0xFF, 0x00, 0x7F, 0xFB, 0xFF, 0xC0, 0x1F, 0xFE, 0xFF, 0xF8,
|
||||
0x0F, 0xFF, 0xBF, 0x7F, 0x03, 0xF7, 0xEF, 0xDF, 0xC1, 0xF9, 0xFB, 0xF3,
|
||||
0xF8, 0xFE, 0x7E, 0xFC, 0x7E, 0x3F, 0x1F, 0xBF, 0x1F, 0xDF, 0xC7, 0xEF,
|
||||
0xC3, 0xFF, 0xE1, 0xFB, 0xF0, 0xFF, 0xF0, 0x7E, 0xFC, 0x1F, 0xFC, 0x1F,
|
||||
0xBF, 0x03, 0xFE, 0x07, 0xEF, 0xC0, 0xFF, 0x81, 0xFB, 0xF0, 0x1F, 0xC0,
|
||||
0x7E, 0xFC, 0x03, 0xE0, 0x1F, 0xBF, 0x00, 0xF8, 0x07, 0xEF, 0xC0, 0x1C,
|
||||
0x01, 0xFB, 0xF0, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x1F, 0xBF, 0x00,
|
||||
0x00, 0x07, 0xE0, 0xFC, 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00,
|
||||
0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0x80, 0x1F, 0xFF,
|
||||
0xF8, 0x03, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x01,
|
||||
0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xDF, 0xF0, 0xFF, 0xF9,
|
||||
0xFE, 0x1F, 0xFF, 0x1F, 0xE3, 0xFF, 0xE1, 0xFE, 0x7F, 0xFC, 0x3F, 0xEF,
|
||||
0xFF, 0x83, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xC0,
|
||||
0x3F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xE0, 0x07, 0xFF,
|
||||
0xFC, 0x00, 0x7F, 0xFF, 0x80, 0x07, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00,
|
||||
0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0x80,
|
||||
0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF,
|
||||
0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x7F, 0xF0,
|
||||
0xFF, 0xE0, 0x7F, 0xC0, 0x0F, 0xF8, 0x7F, 0xC0, 0x03, 0xFE, 0x3F, 0xC0,
|
||||
0x00, 0xFF, 0x1F, 0xC0, 0x00, 0x3F, 0xDF, 0xE0, 0x00, 0x0F, 0xEF, 0xE0,
|
||||
0x00, 0x07, 0xF7, 0xF0, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x01, 0xFF, 0xFC,
|
||||
0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF,
|
||||
0x80, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, 0xEF, 0xF0, 0x00, 0x07, 0xF3,
|
||||
0xF8, 0x00, 0x07, 0xF9, 0xFE, 0x00, 0x07, 0xF8, 0x7F, 0x80, 0x07, 0xFC,
|
||||
0x3F, 0xF0, 0x07, 0xFC, 0x0F, 0xFF, 0x3F, 0xFC, 0x03, 0xFF, 0xFF, 0xFE,
|
||||
0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFC,
|
||||
0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80,
|
||||
0x3F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF,
|
||||
0xFF, 0x3F, 0xFF, 0xFF, 0xCF, 0xE0, 0x0F, 0xFB, 0xF8, 0x00, 0xFE, 0xFE,
|
||||
0x00, 0x3F, 0xBF, 0x80, 0x0F, 0xFF, 0xE0, 0x01, 0xFF, 0xF8, 0x00, 0x7F,
|
||||
0xFE, 0x00, 0x3F, 0xFF, 0x80, 0x0F, 0xEF, 0xE0, 0x07, 0xFB, 0xF8, 0x03,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE3, 0xFF,
|
||||
0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0x80, 0x0F, 0xE0, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00,
|
||||
0x01, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF8, 0x00,
|
||||
0x0F, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFE,
|
||||
0x01, 0xFF, 0xC3, 0xFF, 0x80, 0xFF, 0x80, 0x1F, 0xF0, 0x7F, 0xC0, 0x03,
|
||||
0xFE, 0x1F, 0xE0, 0x00, 0x7F, 0x87, 0xF0, 0x00, 0x0F, 0xF3, 0xFC, 0x00,
|
||||
0x01, 0xFC, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x1F, 0xCF, 0xE0,
|
||||
0x00, 0x07, 0xFB, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0xBF,
|
||||
0x80, 0x00, 0x1F, 0xEF, 0xE0, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x01, 0xFC,
|
||||
0xFF, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x3F, 0xC7, 0xF8, 0x00, 0x1F,
|
||||
0xE0, 0xFF, 0x00, 0x0F, 0xF8, 0x3F, 0xF0, 0x07, 0xFC, 0x07, 0xFF, 0x9F,
|
||||
0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0x80, 0x03, 0xFF,
|
||||
0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00,
|
||||
0x0F, 0xF8, 0x0C, 0x00, 0x01, 0xFF, 0x8F, 0x80, 0x00, 0x3F, 0xFF, 0xF0,
|
||||
0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF,
|
||||
0x00, 0x00, 0x00, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFC, 0x0F,
|
||||
0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF,
|
||||
0xCF, 0xE0, 0x0F, 0xFB, 0xF8, 0x00, 0xFE, 0xFE, 0x00, 0x3F, 0xBF, 0x80,
|
||||
0x0F, 0xFF, 0xE0, 0x01, 0xFF, 0xF8, 0x00, 0x7F, 0xFE, 0x00, 0x3F, 0xFF,
|
||||
0x80, 0x0F, 0xEF, 0xE0, 0x07, 0xFB, 0xF8, 0x03, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
0x3F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF,
|
||||
0xF0, 0x3F, 0xFF, 0xFC, 0x0F, 0xE0, 0x3F, 0x83, 0xF8, 0x0F, 0xF0, 0xFE,
|
||||
0x01, 0xFC, 0x3F, 0x80, 0x3F, 0x8F, 0xE0, 0x0F, 0xF3, 0xF8, 0x01, 0xFE,
|
||||
0xFE, 0x00, 0x3F, 0xBF, 0x80, 0x0F, 0xF0, 0x00, 0x0E, 0x00, 0x00, 0xFF,
|
||||
0xFC, 0x01, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xE1, 0xFF,
|
||||
0xFF, 0xF1, 0xFF, 0x01, 0xF8, 0xFE, 0x00, 0x18, 0x7F, 0x00, 0x00, 0x3F,
|
||||
0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x01,
|
||||
0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x07, 0xFF, 0xFE,
|
||||
0x00, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0xF0, 0x00, 0x07,
|
||||
0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x60, 0x00, 0x7F, 0x3C, 0x00,
|
||||
0x3F, 0xBF, 0xC0, 0x7F, 0xDF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xC7, 0xFF,
|
||||
0xFF, 0xC0, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x00, 0x18, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xF8, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x00,
|
||||
0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF8,
|
||||
0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF,
|
||||
0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00,
|
||||
0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F,
|
||||
0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0,
|
||||
0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07,
|
||||
0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0xFE, 0x7F,
|
||||
0x00, 0x0F, 0xE7, 0xF0, 0x00, 0xFE, 0x7F, 0x80, 0x1F, 0xE3, 0xFC, 0x03,
|
||||
0xFC, 0x3F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x7F, 0x80, 0x00, 0x3F, 0x9F, 0xC0,
|
||||
0x00, 0x3F, 0x8F, 0xF0, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x0F, 0xE1, 0xFE,
|
||||
0x00, 0x0F, 0xE0, 0xFF, 0x00, 0x07, 0xF0, 0x3F, 0x80, 0x07, 0xF0, 0x1F,
|
||||
0xE0, 0x03, 0xF8, 0x07, 0xF0, 0x03, 0xF8, 0x03, 0xFC, 0x01, 0xFC, 0x00,
|
||||
0xFE, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x3F, 0xC0, 0x7F, 0x00,
|
||||
0x0F, 0xE0, 0x7F, 0x00, 0x07, 0xF8, 0x3F, 0x80, 0x01, 0xFC, 0x3F, 0x80,
|
||||
0x00, 0xFF, 0x1F, 0xC0, 0x00, 0x3F, 0x8F, 0xC0, 0x00, 0x1F, 0xCF, 0xE0,
|
||||
0x00, 0x0F, 0xF7, 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF8,
|
||||
0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x0F, 0xFC,
|
||||
0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x7F, 0x00, 0x0F, 0xF0, 0x00, 0x7E,
|
||||
0x7F, 0x00, 0x0F, 0xF8, 0x00, 0xFE, 0x7F, 0x80, 0x1F, 0xF8, 0x00, 0xFE,
|
||||
0x3F, 0x80, 0x1F, 0xF8, 0x00, 0xFC, 0x3F, 0x80, 0x1F, 0xFC, 0x01, 0xFC,
|
||||
0x3F, 0xC0, 0x3F, 0xFC, 0x01, 0xFC, 0x1F, 0xC0, 0x3F, 0xFC, 0x01, 0xF8,
|
||||
0x1F, 0xC0, 0x3F, 0xFE, 0x03, 0xF8, 0x1F, 0xE0, 0x7F, 0xFE, 0x03, 0xF8,
|
||||
0x0F, 0xE0, 0x7E, 0x7E, 0x03, 0xF0, 0x0F, 0xE0, 0x7E, 0x7F, 0x07, 0xF0,
|
||||
0x0F, 0xF0, 0xFE, 0x7F, 0x07, 0xF0, 0x07, 0xF0, 0xFC, 0x3F, 0x07, 0xE0,
|
||||
0x07, 0xF0, 0xFC, 0x3F, 0x8F, 0xE0, 0x07, 0xF1, 0xFC, 0x3F, 0x8F, 0xE0,
|
||||
0x03, 0xF9, 0xF8, 0x1F, 0x8F, 0xC0, 0x03, 0xF9, 0xF8, 0x1F, 0xDF, 0xC0,
|
||||
0x03, 0xFB, 0xF8, 0x1F, 0xDF, 0xC0, 0x01, 0xFF, 0xF0, 0x0F, 0xDF, 0x80,
|
||||
0x01, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xF0, 0x0F, 0xFF, 0x80,
|
||||
0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00,
|
||||
0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00,
|
||||
0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x7F, 0x80, 0x03, 0xF8, 0x7F, 0x80,
|
||||
0x0F, 0xF0, 0x7F, 0x00, 0x3F, 0xC0, 0xFF, 0x00, 0x7F, 0x00, 0xFF, 0x01,
|
||||
0xFE, 0x00, 0xFF, 0x07, 0xF8, 0x01, 0xFE, 0x0F, 0xE0, 0x01, 0xFE, 0x3F,
|
||||
0x80, 0x01, 0xFE, 0xFF, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x03, 0xFF, 0xF0,
|
||||
0x00, 0x03, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x07, 0xFE, 0x00,
|
||||
0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF8, 0x00,
|
||||
0x00, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xF0, 0x00,
|
||||
0x1F, 0xEF, 0xF0, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0xFE, 0x1F, 0xE0, 0x03,
|
||||
0xFC, 0x1F, 0xE0, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x3F, 0xC0, 0x7F,
|
||||
0x80, 0x3F, 0xC1, 0xFE, 0x00, 0x3F, 0xC7, 0xF8, 0x00, 0x7F, 0xDF, 0xE0,
|
||||
0x00, 0x7F, 0x80, 0x7F, 0x00, 0x01, 0xFC, 0xFF, 0x00, 0x03, 0xF8, 0xFE,
|
||||
0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x1F, 0xC1, 0xFE, 0x00, 0x7F, 0x01, 0xFC,
|
||||
0x01, 0xFC, 0x03, 0xFC, 0x03, 0xF8, 0x03, 0xF8, 0x0F, 0xE0, 0x03, 0xF8,
|
||||
0x1F, 0xC0, 0x07, 0xF8, 0x7F, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x0F, 0xF3,
|
||||
0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x1F, 0xFF,
|
||||
0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x3F, 0xE0,
|
||||
0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xF0, 0x00,
|
||||
0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0x7F, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8,
|
||||
0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x7F,
|
||||
0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03,
|
||||
0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x07,
|
||||
0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0,
|
||||
0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC,
|
||||
0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F,
|
||||
0x83, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x3F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x3F,
|
||||
0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01,
|
||||
0xF8, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x01, 0xF8,
|
||||
0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F,
|
||||
0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07,
|
||||
0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0,
|
||||
0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC,
|
||||
0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0x80,
|
||||
0x1F, 0x7C, 0x00, 0xF9, 0xF0, 0x07, 0xCF, 0x80, 0x7C, 0x3E, 0x03, 0xE1,
|
||||
0xF0, 0x3E, 0x07, 0xC1, 0xF0, 0x3E, 0x1F, 0x01, 0xF0, 0xF8, 0x07, 0xCF,
|
||||
0xC0, 0x3E, 0x7C, 0x00, 0xFB, 0xE0, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFC, 0x07, 0xF0,
|
||||
0x0F, 0xC0, 0x3F, 0x00, 0xF8, 0x0F, 0xFF, 0x00, 0xFF, 0xFF, 0x07, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0xF0, 0x1F, 0xE1, 0x00, 0x3F,
|
||||
0x80, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x03, 0xFF, 0xF1, 0xFF, 0xFF, 0xCF,
|
||||
0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x00,
|
||||
0x7F, 0xFC, 0x03, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x7F, 0xFF, 0xFC, 0xFF, 0xF7, 0xF0, 0xFF, 0x9F, 0xC0, 0xFE, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0x7F, 0x3F, 0xF0, 0x3F, 0xBF, 0xFC, 0x1F, 0xFF, 0xFF, 0x8F, 0xFF,
|
||||
0xFF, 0xE7, 0xFF, 0xFF, 0xF3, 0xFF, 0x07, 0xFD, 0xFF, 0x01, 0xFE, 0xFF,
|
||||
0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF,
|
||||
0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x7F, 0xBF, 0xF8, 0x7F, 0xDF, 0xFF, 0xFF,
|
||||
0xCF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xC3, 0xFB, 0xFF, 0xC1, 0xFC, 0xFF,
|
||||
0x80, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF,
|
||||
0xFC, 0x1F, 0xFF, 0xFE, 0x3F, 0xE1, 0xFE, 0x7F, 0x80, 0x7C, 0x7F, 0x00,
|
||||
0x30, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00,
|
||||
0x30, 0x7F, 0x80, 0x7C, 0x3F, 0xE1, 0xFF, 0x1F, 0xFF, 0xFE, 0x1F, 0xFF,
|
||||
0xFC, 0x07, 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xC0, 0x00, 0x00,
|
||||
0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x00,
|
||||
0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x1F, 0xC0, 0x7F, 0xE7, 0xF0, 0x7F, 0xFD, 0xFC, 0x3F, 0xFF,
|
||||
0xFF, 0x1F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF3, 0xFE, 0x1F, 0xFD, 0xFE,
|
||||
0x01, 0xFF, 0x7F, 0x00, 0x3F, 0xDF, 0xC0, 0x07, 0xF7, 0xE0, 0x01, 0xFF,
|
||||
0xF8, 0x00, 0x7F, 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x07, 0xF7, 0xF0, 0x01,
|
||||
0xFD, 0xFC, 0x00, 0xFF, 0x7F, 0x00, 0x3F, 0xDF, 0xE0, 0x1F, 0xF3, 0xFE,
|
||||
0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF0,
|
||||
0x3F, 0xFD, 0xFC, 0x07, 0xFC, 0x7F, 0x00, 0xFF, 0xC0, 0x01, 0xFF, 0xF8,
|
||||
0x03, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xE1, 0xFE, 0x07,
|
||||
0xF1, 0xFC, 0x01, 0xFC, 0xFE, 0x00, 0x7E, 0x7E, 0x00, 0x3F, 0x7F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF0,
|
||||
0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x10, 0x1F,
|
||||
0xF0, 0x3C, 0x07, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xC0,
|
||||
0x1F, 0xFF, 0xC0, 0x03, 0xFF, 0x80, 0x00, 0x7F, 0x80, 0x7F, 0xF0, 0x3F,
|
||||
0xF8, 0x1F, 0xFE, 0x07, 0xFF, 0x83, 0xFC, 0x00, 0xFE, 0x00, 0x3F, 0x80,
|
||||
0x0F, 0xC0, 0x3F, 0xFF, 0xCF, 0xFF, 0xF3, 0xFF, 0xFC, 0xFF, 0xFF, 0x3F,
|
||||
0xFF, 0xCF, 0xFF, 0xF0, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE,
|
||||
0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80,
|
||||
0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03,
|
||||
0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x01, 0xFF, 0x8F, 0xC1, 0xFF, 0xF3,
|
||||
0xF0, 0xFF, 0xFE, 0xFC, 0x7F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xCF, 0xF8,
|
||||
0x3F, 0xF7, 0xF8, 0x03, 0xFD, 0xFC, 0x00, 0xFF, 0x7F, 0x00, 0x1F, 0xFF,
|
||||
0x80, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xF8, 0x00, 0x7F, 0xFE, 0x00, 0x1F,
|
||||
0xDF, 0xC0, 0x07, 0xF7, 0xF8, 0x03, 0xFD, 0xFF, 0x01, 0xFF, 0x3F, 0xFF,
|
||||
0xFF, 0xC7, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x03,
|
||||
0xFF, 0x9F, 0xC0, 0x1F, 0x87, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7E,
|
||||
0x08, 0x00, 0x3F, 0x87, 0xC0, 0x1F, 0xE1, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF,
|
||||
0xFC, 0x3F, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0x00,
|
||||
0xFC, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x7F, 0xE0, 0xFE, 0xFF, 0xF0, 0xFF,
|
||||
0xFF, 0xF8, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0xE7, 0xFE, 0xFF,
|
||||
0x80, 0xFE, 0xFF, 0x00, 0xFF, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x7F, 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x18, 0x00, 0x00,
|
||||
0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
|
||||
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
|
||||
0x00, 0x78, 0x01, 0xF8, 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0,
|
||||
0x3F, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x1F,
|
||||
0xC0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0,
|
||||
0x0F, 0xE0, 0x1F, 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x01, 0xFC, 0x03,
|
||||
0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0xFE,
|
||||
0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xCF, 0xFF, 0x9F,
|
||||
0xFE, 0x3F, 0xF8, 0xFF, 0xF1, 0xFF, 0x80, 0x38, 0x00, 0xFE, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x7F, 0xBF, 0x80, 0x7F, 0x9F, 0xC0, 0x7F, 0x8F, 0xE0,
|
||||
0x7F, 0x87, 0xF0, 0x7F, 0x83, 0xF8, 0x7F, 0x81, 0xFC, 0x7F, 0x80, 0xFE,
|
||||
0x7F, 0x80, 0x7F, 0xFF, 0x80, 0x3F, 0xFF, 0x80, 0x1F, 0xFF, 0xE0, 0x0F,
|
||||
0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0x01, 0xFF, 0x7F, 0xC0,
|
||||
0xFF, 0x1F, 0xF0, 0x7F, 0x07, 0xF8, 0x3F, 0x81, 0xFE, 0x1F, 0xC0, 0x7F,
|
||||
0x8F, 0xE0, 0x1F, 0xE7, 0xF0, 0x0F, 0xF3, 0xF8, 0x03, 0xFD, 0xFC, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0x7F, 0xC0, 0x7F, 0xC1, 0xFD, 0xFF,
|
||||
0xE3, 0xFF, 0xE3, 0xFF, 0xFF, 0xEF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0,
|
||||
0x7F, 0xE0, 0x7F, 0xFF, 0x80, 0x7F, 0x80, 0x7F, 0xFE, 0x00, 0xFE, 0x00,
|
||||
0xFF, 0xFC, 0x01, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xF8, 0x03, 0xFF, 0xF0,
|
||||
0x07, 0xF0, 0x07, 0xFF, 0xE0, 0x0F, 0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xC0,
|
||||
0x1F, 0xFF, 0x80, 0x3F, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xF8,
|
||||
0x03, 0xFF, 0xF0, 0x07, 0xF0, 0x07, 0xFF, 0xE0, 0x0F, 0xE0, 0x0F, 0xFF,
|
||||
0xC0, 0x1F, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0x80, 0x3F, 0x80, 0xFE, 0x7F,
|
||||
0xE0, 0xFE, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF,
|
||||
0xFE, 0xFF, 0xE7, 0xFE, 0xFF, 0x80, 0xFE, 0xFF, 0x00, 0xFF, 0xFE, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0x00, 0xFF, 0xC0, 0x00, 0xFF,
|
||||
0xFC, 0x00, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x0F,
|
||||
0xF8, 0x7F, 0xC7, 0xF8, 0x07, 0xF9, 0xFC, 0x00, 0xFE, 0x7F, 0x00, 0x3F,
|
||||
0xBF, 0x80, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xF8, 0x00, 0x7F, 0xFE, 0x00,
|
||||
0x1F, 0xDF, 0x80, 0x07, 0xF7, 0xF0, 0x03, 0xF9, 0xFC, 0x00, 0xFE, 0x7F,
|
||||
0x80, 0x7F, 0x8F, 0xF8, 0x7F, 0xC1, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xF8,
|
||||
0x07, 0xFF, 0xFC, 0x00, 0xFF, 0xFC, 0x00, 0x0F, 0xFC, 0x00, 0xFE, 0x7F,
|
||||
0xE0, 0x7F, 0x7F, 0xF8, 0x3F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xCF, 0xFF,
|
||||
0xFF, 0xE7, 0xFE, 0x0F, 0xFB, 0xFE, 0x03, 0xFD, 0xFE, 0x00, 0xFF, 0xFE,
|
||||
0x00, 0x3F, 0xFF, 0x00, 0x1F, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF,
|
||||
0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFE, 0x00, 0xFF,
|
||||
0xFF, 0x80, 0xFF, 0x7F, 0xF0, 0xFF, 0xBF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF,
|
||||
0xCF, 0xFF, 0xFF, 0xC7, 0xF7, 0xFF, 0x83, 0xF9, 0xFF, 0x01, 0xFC, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01,
|
||||
0xFF, 0x9F, 0xC1, 0xFF, 0xF7, 0xF0, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF,
|
||||
0x3F, 0xFF, 0xFF, 0xCF, 0xF8, 0x7F, 0xF7, 0xF8, 0x07, 0xFD, 0xFC, 0x00,
|
||||
0xFF, 0x7F, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xF8,
|
||||
0x00, 0x7F, 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x07, 0xF7, 0xF0, 0x03, 0xFD,
|
||||
0xFC, 0x00, 0xFF, 0x7F, 0x80, 0x7F, 0xCF, 0xF8, 0x7F, 0xF3, 0xFF, 0xFF,
|
||||
0xFC, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xC1, 0xFF, 0xF7, 0xF0, 0x1F,
|
||||
0xF1, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07,
|
||||
0xF0, 0x00, 0x01, 0xFC, 0xFE, 0x3F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xC0, 0xFF, 0x03, 0xF8, 0x0F, 0xE0, 0x3F,
|
||||
0x80, 0xFE, 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xF8, 0x0F,
|
||||
0xE0, 0x3F, 0x80, 0xFE, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x07, 0xFF, 0xC0,
|
||||
0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0xFF, 0xFF, 0xC7, 0xFF, 0xFE, 0x3F, 0x00,
|
||||
0x63, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x80, 0x03, 0xFF, 0xE0, 0x1F,
|
||||
0xFF, 0xE0, 0x7F, 0xFF, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0xF8, 0x00, 0x3F,
|
||||
0xE0, 0x00, 0x7F, 0x20, 0x03, 0xFB, 0xC0, 0x1F, 0xDF, 0xFF, 0xFD, 0xFF,
|
||||
0xFF, 0xEF, 0xFF, 0xFE, 0x3F, 0xFF, 0xE0, 0x3F, 0xFC, 0x00, 0x0F, 0xE0,
|
||||
0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x3F, 0xFF, 0xCF,
|
||||
0xFF, 0xF3, 0xFF, 0xFC, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0xFE, 0x00, 0x3F,
|
||||
0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0,
|
||||
0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03, 0xF8, 0x00,
|
||||
0xFF, 0x00, 0x3F, 0xFE, 0x07, 0xFF, 0x81, 0xFF, 0xE0, 0x3F, 0xFC, 0x03,
|
||||
0xFE, 0xFE, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xF8, 0x01, 0xFF, 0xF0, 0x03,
|
||||
0xFF, 0xE0, 0x07, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x3F,
|
||||
0xFE, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xF8, 0x01, 0xFF, 0xF0, 0x03, 0xFF,
|
||||
0xE0, 0x07, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0xFF,
|
||||
0x01, 0xFE, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF3, 0xFF,
|
||||
0xFF, 0xE3, 0xFF, 0xEF, 0xC1, 0xFF, 0x1F, 0x80, 0xFE, 0x00, 0x1F, 0xFF,
|
||||
0x80, 0x07, 0xE7, 0xF0, 0x03, 0xF9, 0xFC, 0x00, 0xFE, 0x3F, 0x00, 0x3F,
|
||||
0x0F, 0xE0, 0x1F, 0xC3, 0xF8, 0x07, 0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0,
|
||||
0xFC, 0x03, 0xF0, 0x3F, 0x00, 0xFE, 0x1F, 0xC0, 0x1F, 0x87, 0xE0, 0x07,
|
||||
0xF3, 0xF8, 0x01, 0xFC, 0xFC, 0x00, 0x3F, 0xFF, 0x00, 0x0F, 0xFF, 0x80,
|
||||
0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x03, 0xFF,
|
||||
0x00, 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0xFE,
|
||||
0x00, 0x7E, 0x00, 0x3F, 0x7E, 0x00, 0x7F, 0x00, 0x3F, 0x7E, 0x00, 0x7F,
|
||||
0x00, 0x7E, 0x7F, 0x00, 0xFF, 0x00, 0x7E, 0x3F, 0x00, 0xFF, 0x80, 0x7E,
|
||||
0x3F, 0x01, 0xFF, 0x80, 0xFC, 0x3F, 0x81, 0xFF, 0xC0, 0xFC, 0x1F, 0x81,
|
||||
0xFF, 0xC0, 0xF8, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x0F, 0xC3, 0xF7, 0xE1,
|
||||
0xF8, 0x0F, 0xC3, 0xF7, 0xE3, 0xF0, 0x0F, 0xC7, 0xE7, 0xE3, 0xF0, 0x07,
|
||||
0xE7, 0xE3, 0xF3, 0xF0, 0x07, 0xE7, 0xC3, 0xF7, 0xE0, 0x07, 0xEF, 0xC3,
|
||||
0xF7, 0xE0, 0x03, 0xFF, 0xC1, 0xFF, 0xE0, 0x03, 0xFF, 0x81, 0xFF, 0xC0,
|
||||
0x03, 0xFF, 0x81, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x01, 0xFF,
|
||||
0x00, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0xFE, 0x00, 0x7F,
|
||||
0x00, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x9F, 0xC0, 0x3F,
|
||||
0x8F, 0xF0, 0x3F, 0x83, 0xFC, 0x3F, 0x80, 0xFE, 0x3F, 0xC0, 0x3F, 0x9F,
|
||||
0xC0, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x01, 0xFF, 0xE0, 0x00, 0x7F,
|
||||
0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x0F,
|
||||
0xFE, 0x00, 0x07, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x07, 0xF7, 0xF8, 0x07,
|
||||
0xF9, 0xFC, 0x03, 0xF8, 0x7F, 0x03, 0xF8, 0x3F, 0xC3, 0xF8, 0x0F, 0xF3,
|
||||
0xFC, 0x03, 0xF9, 0xFC, 0x01, 0xFE, 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x07,
|
||||
0xE7, 0xF0, 0x03, 0xF9, 0xFC, 0x00, 0xFE, 0x3F, 0x80, 0x3F, 0x0F, 0xE0,
|
||||
0x1F, 0xC3, 0xF8, 0x07, 0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFC, 0x03,
|
||||
0xF8, 0x3F, 0x00, 0xFE, 0x1F, 0xC0, 0x1F, 0x87, 0xE0, 0x07, 0xF3, 0xF8,
|
||||
0x01, 0xFC, 0xFC, 0x00, 0x3F, 0xBF, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF,
|
||||
0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, 0x03, 0xFF, 0x00, 0x00,
|
||||
0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x08, 0x3F, 0x80, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0xF0,
|
||||
0x00, 0xFF, 0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3C,
|
||||
0x00, 0x00, 0x7F, 0xFF, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF,
|
||||
0xF7, 0xFF, 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x80, 0x07, 0xF8, 0x00,
|
||||
0x7F, 0x80, 0x07, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0xC0,
|
||||
0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xFC,
|
||||
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xE0, 0x00, 0xFC, 0x0F, 0xF0, 0x7F, 0xC3, 0xFF, 0x0F, 0xFC,
|
||||
0x3F, 0xC0, 0xFE, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0,
|
||||
0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0x0F, 0xFC,
|
||||
0x3F, 0xE0, 0xFF, 0x03, 0xFE, 0x0F, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F,
|
||||
0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F,
|
||||
0xC0, 0x3F, 0x80, 0xFE, 0x03, 0xFF, 0x0F, 0xFC, 0x1F, 0xF0, 0x3F, 0xC0,
|
||||
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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xFC, 0x0F, 0xF8,
|
||||
0x3F, 0xE0, 0xFF, 0xC1, 0xFF, 0x01, 0xFC, 0x07, 0xF0, 0x0F, 0xC0, 0x3F,
|
||||
0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F,
|
||||
0xC0, 0x3F, 0xC0, 0xFF, 0xC1, 0xFF, 0x03, 0xFC, 0x3F, 0xF0, 0xFF, 0xC3,
|
||||
0xF8, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00,
|
||||
0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x7F, 0x03, 0xFC, 0x3F, 0xF0, 0xFF, 0xC3,
|
||||
0xFE, 0x0F, 0xF0, 0x3F, 0x80, 0x1F, 0xC0, 0x7C, 0xFF, 0x81, 0xF7, 0xFF,
|
||||
0x87, 0x9F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFB, 0xE1, 0xFF, 0xCF, 0x81, 0xFE,
|
||||
0x3C, 0x03, 0xF0 };
|
||||
|
||||
const GFXglyph Montserrat_Bold22pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 12, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 8, 30, 12, 2, -29 }, // 0x21 '!'
|
||||
{ 31, 15, 12, 19, 2, -29 }, // 0x22 '"'
|
||||
{ 54, 29, 30, 31, 1, -29 }, // 0x23 '#'
|
||||
{ 163, 25, 40, 27, 1, -34 }, // 0x24 '$'
|
||||
{ 288, 36, 30, 38, 1, -29 }, // 0x25 '%'
|
||||
{ 423, 28, 31, 31, 2, -29 }, // 0x26 '&'
|
||||
{ 532, 6, 12, 10, 2, -29 }, // 0x27 '''
|
||||
{ 541, 12, 40, 15, 3, -31 }, // 0x28 '('
|
||||
{ 601, 12, 40, 15, 0, -31 }, // 0x29 ')'
|
||||
{ 661, 17, 17, 19, 1, -31 }, // 0x2A '*'
|
||||
{ 698, 20, 20, 26, 3, -24 }, // 0x2B '+'
|
||||
{ 748, 9, 15, 11, 1, -7 }, // 0x2C ','
|
||||
{ 765, 12, 6, 17, 2, -14 }, // 0x2D '-'
|
||||
{ 774, 9, 8, 11, 1, -7 }, // 0x2E '.'
|
||||
{ 783, 20, 40, 17, -1, -35 }, // 0x2F '/'
|
||||
{ 883, 25, 32, 29, 2, -30 }, // 0x30 '0'
|
||||
{ 983, 13, 30, 17, 0, -29 }, // 0x31 '1'
|
||||
{ 1032, 24, 31, 25, 0, -30 }, // 0x32 '2'
|
||||
{ 1125, 24, 31, 25, 0, -29 }, // 0x33 '3'
|
||||
{ 1218, 28, 30, 30, 1, -29 }, // 0x34 '4'
|
||||
{ 1323, 24, 31, 26, 0, -29 }, // 0x35 '5'
|
||||
{ 1416, 25, 32, 27, 2, -30 }, // 0x36 '6'
|
||||
{ 1516, 24, 30, 27, 1, -29 }, // 0x37 '7'
|
||||
{ 1606, 26, 32, 28, 1, -30 }, // 0x38 '8'
|
||||
{ 1710, 25, 32, 27, 1, -30 }, // 0x39 '9'
|
||||
{ 1810, 9, 23, 11, 1, -22 }, // 0x3A ':'
|
||||
{ 1836, 9, 30, 11, 1, -22 }, // 0x3B ';'
|
||||
{ 1870, 20, 22, 26, 3, -25 }, // 0x3C '<'
|
||||
{ 1925, 20, 16, 26, 3, -22 }, // 0x3D '='
|
||||
{ 1965, 20, 22, 26, 3, -25 }, // 0x3E '>'
|
||||
{ 2020, 23, 31, 25, 0, -30 }, // 0x3F '?'
|
||||
{ 2110, 41, 40, 45, 2, -30 }, // 0x40 '@'
|
||||
{ 2315, 33, 30, 33, 0, -29 }, // 0x41 'A'
|
||||
{ 2439, 27, 30, 33, 4, -29 }, // 0x42 'B'
|
||||
{ 2541, 28, 32, 31, 2, -30 }, // 0x43 'C'
|
||||
{ 2653, 30, 30, 36, 4, -29 }, // 0x44 'D'
|
||||
{ 2766, 23, 30, 29, 4, -29 }, // 0x45 'E'
|
||||
{ 2853, 22, 30, 27, 4, -29 }, // 0x46 'F'
|
||||
{ 2936, 29, 32, 33, 2, -30 }, // 0x47 'G'
|
||||
{ 3052, 27, 30, 35, 4, -29 }, // 0x48 'H'
|
||||
{ 3154, 7, 30, 14, 4, -29 }, // 0x49 'I'
|
||||
{ 3181, 21, 31, 23, -1, -29 }, // 0x4A 'J'
|
||||
{ 3263, 28, 30, 32, 4, -29 }, // 0x4B 'K'
|
||||
{ 3368, 22, 30, 26, 4, -29 }, // 0x4C 'L'
|
||||
{ 3451, 34, 30, 41, 4, -29 }, // 0x4D 'M'
|
||||
{ 3579, 27, 30, 35, 4, -29 }, // 0x4E 'N'
|
||||
{ 3681, 33, 32, 36, 2, -30 }, // 0x4F 'O'
|
||||
{ 3813, 26, 30, 31, 4, -29 }, // 0x50 'P'
|
||||
{ 3911, 34, 38, 36, 2, -30 }, // 0x51 'Q'
|
||||
{ 4073, 26, 30, 32, 4, -29 }, // 0x52 'R'
|
||||
{ 4171, 25, 32, 27, 1, -30 }, // 0x53 'S'
|
||||
{ 4271, 26, 30, 27, 0, -29 }, // 0x54 'T'
|
||||
{ 4369, 28, 31, 34, 3, -29 }, // 0x55 'U'
|
||||
{ 4478, 33, 30, 32, 0, -29 }, // 0x56 'V'
|
||||
{ 4602, 48, 30, 50, 1, -29 }, // 0x57 'W'
|
||||
{ 4782, 31, 30, 31, 0, -29 }, // 0x58 'X'
|
||||
{ 4899, 31, 30, 29, -1, -29 }, // 0x59 'Y'
|
||||
{ 5016, 26, 30, 29, 2, -29 }, // 0x5A 'Z'
|
||||
{ 5114, 11, 40, 16, 4, -31 }, // 0x5B '['
|
||||
{ 5169, 20, 40, 17, -2, -35 }, // 0x5C '\'
|
||||
{ 5269, 11, 40, 16, 1, -31 }, // 0x5D ']'
|
||||
{ 5324, 21, 18, 26, 2, -23 }, // 0x5E '^'
|
||||
{ 5372, 22, 4, 22, 0, 1 }, // 0x5F '_'
|
||||
{ 5383, 13, 6, 26, 4, -31 }, // 0x60 '`'
|
||||
{ 5393, 22, 23, 27, 2, -22 }, // 0x61 'a'
|
||||
{ 5457, 25, 32, 30, 3, -31 }, // 0x62 'b'
|
||||
{ 5557, 24, 23, 25, 1, -22 }, // 0x63 'c'
|
||||
{ 5626, 26, 32, 30, 1, -31 }, // 0x64 'd'
|
||||
{ 5730, 25, 23, 27, 1, -22 }, // 0x65 'e'
|
||||
{ 5802, 18, 32, 17, 0, -31 }, // 0x66 'f'
|
||||
{ 5874, 26, 32, 30, 1, -22 }, // 0x67 'g'
|
||||
{ 5978, 24, 32, 30, 3, -31 }, // 0x68 'h'
|
||||
{ 6074, 8, 34, 13, 3, -33 }, // 0x69 'i'
|
||||
{ 6108, 15, 43, 13, -4, -33 }, // 0x6A 'j'
|
||||
{ 6189, 25, 32, 28, 3, -31 }, // 0x6B 'k'
|
||||
{ 6289, 7, 32, 13, 3, -31 }, // 0x6C 'l'
|
||||
{ 6317, 39, 23, 45, 3, -22 }, // 0x6D 'm'
|
||||
{ 6430, 24, 23, 30, 3, -22 }, // 0x6E 'n'
|
||||
{ 6499, 26, 23, 28, 1, -22 }, // 0x6F 'o'
|
||||
{ 6574, 25, 31, 30, 3, -22 }, // 0x70 'p'
|
||||
{ 6671, 26, 31, 30, 1, -22 }, // 0x71 'q'
|
||||
{ 6772, 14, 23, 19, 3, -22 }, // 0x72 'r'
|
||||
{ 6813, 21, 23, 23, 1, -22 }, // 0x73 's'
|
||||
{ 6874, 18, 28, 19, 0, -27 }, // 0x74 't'
|
||||
{ 6937, 23, 23, 30, 3, -22 }, // 0x75 'u'
|
||||
{ 7004, 26, 23, 26, 0, -22 }, // 0x76 'v'
|
||||
{ 7079, 40, 23, 40, 0, -22 }, // 0x77 'w'
|
||||
{ 7194, 25, 23, 26, 0, -22 }, // 0x78 'x'
|
||||
{ 7266, 26, 32, 26, 0, -22 }, // 0x79 'y'
|
||||
{ 7370, 21, 23, 23, 1, -22 }, // 0x7A 'z'
|
||||
{ 7431, 14, 40, 17, 2, -31 }, // 0x7B '{'
|
||||
{ 7501, 6, 40, 13, 4, -31 }, // 0x7C '|'
|
||||
{ 7531, 14, 40, 17, 1, -31 }, // 0x7D '}'
|
||||
{ 7601, 22, 8, 26, 2, -18 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Bold22pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Bold22pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Bold22pt7bGlyphs,
|
||||
0x20, 0x7E, 53 };
|
||||
|
||||
// Approx. 8295 bytes
|
||||
|
||||
#endif // MONTSERRATBOLD22PT7B_H
|
||||
@@ -1,873 +0,0 @@
|
||||
#ifndef MONTSERRATBOLD24PT7B_H
|
||||
#define MONTSERRATBOLD24PT7B_H
|
||||
const uint8_t Montserrat_Bold24pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE, 0xFF, 0x7F, 0xBF,
|
||||
0xDF, 0xCF, 0xE7, 0xF3, 0xF9, 0xFC, 0xFE, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3,
|
||||
0xF1, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0xCF, 0xFF, 0xFF, 0xFD, 0xFE,
|
||||
0xFF, 0x3F, 0x00, 0xFE, 0x3F, 0xFF, 0x1F, 0xFF, 0x0F, 0xDF, 0x87, 0xEF,
|
||||
0xC3, 0xF7, 0xE1, 0xF9, 0xF0, 0x7C, 0xF8, 0x3E, 0x7C, 0x1F, 0x3E, 0x0F,
|
||||
0x9F, 0x07, 0xCF, 0x83, 0xE7, 0xC1, 0xF0, 0x00, 0x7C, 0x07, 0xE0, 0x00,
|
||||
0x7C, 0x07, 0xE0, 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x7C, 0x07, 0xC0, 0x00,
|
||||
0x7C, 0x07, 0xC0, 0x00, 0x7C, 0x07, 0xC0, 0x00, 0xFC, 0x07, 0xC0, 0x00,
|
||||
0xFC, 0x0F, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F,
|
||||
0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0xF8, 0x0F, 0x80, 0x01, 0xF8, 0x0F, 0x80, 0x01, 0xF8, 0x1F, 0x80, 0x01,
|
||||
0xF0, 0x1F, 0x80, 0x01, 0xF0, 0x1F, 0x80, 0x01, 0xF0, 0x1F, 0x00, 0x01,
|
||||
0xF0, 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC, 0x03,
|
||||
0xE0, 0x3F, 0x00, 0x03, 0xE0, 0x3E, 0x00, 0x03, 0xE0, 0x3E, 0x00, 0x03,
|
||||
0xE0, 0x3E, 0x00, 0x03, 0xE0, 0x3E, 0x00, 0x07, 0xE0, 0x3E, 0x00, 0x07,
|
||||
0xE0, 0x7E, 0x00, 0x07, 0xE0, 0x7E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
|
||||
0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80,
|
||||
0x00, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xF8, 0x0F,
|
||||
0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF,
|
||||
0xF8, 0x3F, 0xCF, 0x8F, 0x87, 0xF8, 0xF8, 0x30, 0x7F, 0x8F, 0x80, 0x07,
|
||||
0xF8, 0xF8, 0x00, 0x7F, 0x8F, 0x80, 0x07, 0xFC, 0xF8, 0x00, 0x7F, 0xFF,
|
||||
0x80, 0x03, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0,
|
||||
0x0F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x00,
|
||||
0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xF9, 0xFF, 0x00, 0x0F, 0x8F,
|
||||
0xF0, 0x00, 0xF8, 0xFF, 0x10, 0x0F, 0x8F, 0xF3, 0x80, 0xF8, 0xFE, 0x3F,
|
||||
0x0F, 0x9F, 0xE7, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF,
|
||||
0xF8, 0x7F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xF8, 0x00,
|
||||
0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xF0, 0x00,
|
||||
0x0F, 0x80, 0x3F, 0xF8, 0x00, 0x3F, 0x00, 0xFF, 0xF8, 0x00, 0xFC, 0x01,
|
||||
0xFF, 0xF0, 0x01, 0xF0, 0x07, 0xC1, 0xF0, 0x07, 0xE0, 0x0F, 0x83, 0xE0,
|
||||
0x1F, 0x80, 0x3E, 0x03, 0xC0, 0x3E, 0x00, 0x7C, 0x07, 0xC0, 0xFC, 0x00,
|
||||
0xF8, 0x0F, 0x83, 0xF0, 0x01, 0xF0, 0x1F, 0x07, 0xC0, 0x03, 0xE0, 0x3C,
|
||||
0x1F, 0x80, 0x03, 0xC0, 0x78, 0x7E, 0x00, 0x07, 0xC1, 0xF0, 0xF8, 0x00,
|
||||
0x0F, 0xC7, 0xE3, 0xE0, 0x00, 0x0F, 0xFF, 0x8F, 0xC0, 0x00, 0x0F, 0xFE,
|
||||
0x1F, 0x03, 0xC0, 0x0F, 0xF8, 0x7C, 0x3F, 0xE0, 0x07, 0xC1, 0xF8, 0xFF,
|
||||
0xE0, 0x00, 0x07, 0xE3, 0xFF, 0xE0, 0x00, 0x0F, 0x87, 0xC7, 0xE0, 0x00,
|
||||
0x3F, 0x1F, 0x07, 0xC0, 0x00, 0xFC, 0x3E, 0x07, 0xC0, 0x01, 0xF0, 0x78,
|
||||
0x0F, 0x80, 0x07, 0xE0, 0xF0, 0x1F, 0x00, 0x1F, 0x81, 0xE0, 0x3E, 0x00,
|
||||
0x3E, 0x03, 0xC0, 0x7C, 0x00, 0xFC, 0x07, 0xC0, 0xF8, 0x03, 0xF0, 0x0F,
|
||||
0x81, 0xF0, 0x07, 0xC0, 0x1F, 0x87, 0xC0, 0x1F, 0x80, 0x1F, 0xFF, 0x80,
|
||||
0x7E, 0x00, 0x1F, 0xFE, 0x00, 0xF8, 0x00, 0x3F, 0xF8, 0x03, 0xF0, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF,
|
||||
0xE0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xE0, 0x01, 0xFC, 0x1F,
|
||||
0xC0, 0x03, 0xF0, 0x1F, 0x80, 0x07, 0xE0, 0x3F, 0x00, 0x0F, 0xC0, 0x7E,
|
||||
0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x7F, 0xBF, 0xE0,
|
||||
0x00, 0x7F, 0xFF, 0x80, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00,
|
||||
0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0xC0, 0x3F, 0xFF, 0xC1, 0xF0,
|
||||
0xFF, 0xFF, 0xC3, 0xF3, 0xFC, 0x7F, 0xC7, 0xE7, 0xF0, 0x7F, 0xDF, 0xDF,
|
||||
0xC0, 0x7F, 0xFF, 0x3F, 0x80, 0x7F, 0xFE, 0x7F, 0x00, 0x7F, 0xF8, 0xFE,
|
||||
0x00, 0x7F, 0xF1, 0xFC, 0x00, 0x7F, 0xE3, 0xFC, 0x00, 0xFF, 0xE7, 0xFE,
|
||||
0x0F, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF,
|
||||
0xFF, 0x3F, 0x07, 0xFF, 0xFC, 0x3C, 0x03, 0xFF, 0xE0, 0x30, 0x00, 0x30,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0xF7, 0xEF, 0xDF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3,
|
||||
0xE7, 0xC0, 0x03, 0xF8, 0x3F, 0xC1, 0xFC, 0x1F, 0xE0, 0xFE, 0x0F, 0xF0,
|
||||
0x7F, 0x03, 0xF8, 0x3F, 0xC1, 0xFC, 0x0F, 0xE0, 0x7F, 0x07, 0xF8, 0x3F,
|
||||
0x81, 0xFC, 0x0F, 0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC1, 0xFE, 0x0F, 0xF0,
|
||||
0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07,
|
||||
0xF0, 0x3F, 0x81, 0xFC, 0x0F, 0xF0, 0x3F, 0x81, 0xFC, 0x0F, 0xE0, 0x7F,
|
||||
0x81, 0xFC, 0x0F, 0xE0, 0x7F, 0x81, 0xFC, 0x0F, 0xE0, 0x3F, 0x81, 0xFC,
|
||||
0x07, 0xF0, 0x7F, 0x03, 0xF8, 0x0F, 0xE0, 0x7F, 0x01, 0xFC, 0x0F, 0xE0,
|
||||
0x7F, 0x81, 0xFC, 0x0F, 0xE0, 0x7F, 0x81, 0xFC, 0x0F, 0xE0, 0x7F, 0x03,
|
||||
0xFC, 0x0F, 0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F,
|
||||
0x81, 0xFC, 0x0F, 0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0,
|
||||
0x3F, 0x81, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF0, 0x3F, 0x81, 0xFC, 0x1F,
|
||||
0xE0, 0xFE, 0x07, 0xF0, 0x7F, 0x03, 0xF8, 0x3F, 0xC1, 0xFC, 0x1F, 0xC0,
|
||||
0xFE, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x30, 0xF0, 0xC7,
|
||||
0x9E, 0x3D, 0xFB, 0xDF, 0xBF, 0xFF, 0xFB, 0xFF, 0xFC, 0x1F, 0xFE, 0x00,
|
||||
0xFF, 0x80, 0x7F, 0xFC, 0x3F, 0xFF, 0xEF, 0xFF, 0xFF, 0xFB, 0xDF, 0x9C,
|
||||
0x78, 0xE1, 0x0F, 0x04, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00,
|
||||
0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00,
|
||||
0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
|
||||
0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03,
|
||||
0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x1C, 0x3F,
|
||||
0x3F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0x1F, 0x0F, 0x8F, 0xC7,
|
||||
0xC3, 0xE1, 0xE1, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xF0, 0x18, 0x3F, 0x3F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFE,
|
||||
0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x00,
|
||||
0x7E, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xFC,
|
||||
0x00, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F,
|
||||
0x80, 0x00, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00,
|
||||
0x01, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x07,
|
||||
0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x00,
|
||||
0xFE, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xF8,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x07, 0xF0, 0x00,
|
||||
0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xFF,
|
||||
0x80, 0x07, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0x01,
|
||||
0xFF, 0xFF, 0xF8, 0x3F, 0xF0, 0xFF, 0xC3, 0xFC, 0x03, 0xFC, 0x7F, 0x80,
|
||||
0x1F, 0xE7, 0xF8, 0x01, 0xFE, 0xFF, 0x00, 0x0F, 0xEF, 0xF0, 0x00, 0xFF,
|
||||
0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0,
|
||||
0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x0F,
|
||||
0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF,
|
||||
0x00, 0x0F, 0xE7, 0xF8, 0x01, 0xFE, 0x7F, 0x80, 0x1F, 0xE3, 0xFC, 0x03,
|
||||
0xFC, 0x3F, 0xE0, 0x7F, 0xC1, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x80,
|
||||
0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF,
|
||||
0xE0, 0x00, 0x00, 0x60, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x03, 0xFC,
|
||||
0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x01,
|
||||
0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F,
|
||||
0x80, 0xFF, 0x01, 0xFE, 0x03, 0xFC, 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0,
|
||||
0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x01, 0xFE, 0x01, 0xFF, 0xE0, 0x01, 0xFF,
|
||||
0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0x3F,
|
||||
0xFF, 0xFF, 0xE7, 0xF8, 0x1F, 0xF8, 0x78, 0x01, 0xFE, 0x0C, 0x00, 0x7F,
|
||||
0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00,
|
||||
0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xFC, 0x00,
|
||||
0x03, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x7F, 0xC0,
|
||||
0x00, 0x3F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x0F, 0xFC,
|
||||
0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFC,
|
||||
0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0x8F, 0xFF,
|
||||
0xFF, 0xE3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0x8F,
|
||||
0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC,
|
||||
0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xF0, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xF8, 0x00, 0x03, 0xFF,
|
||||
0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0x3F, 0xCE, 0x00, 0x1F, 0xF3, 0xF0, 0x0F, 0xF9, 0xFF,
|
||||
0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xE0,
|
||||
0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF8,
|
||||
0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00,
|
||||
0x00, 0x7F, 0x80, 0x00, 0x01, 0xFE, 0x0F, 0xF0, 0x07, 0xFC, 0x1F, 0xE0,
|
||||
0x0F, 0xF0, 0x3F, 0xC0, 0x3F, 0xC0, 0x7F, 0x80, 0xFF, 0x80, 0xFF, 0x01,
|
||||
0xFE, 0x01, 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00,
|
||||
0x03, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x07, 0xFF, 0xFF, 0x81, 0xFF, 0xFF,
|
||||
0xF0, 0x3F, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x1F,
|
||||
0xFF, 0xFF, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFF,
|
||||
0xE0, 0x00, 0x3F, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF8,
|
||||
0x1F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x00, 0x00,
|
||||
0x3F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xF8,
|
||||
0x00, 0x00, 0xFF, 0x10, 0x00, 0x1F, 0xE3, 0x80, 0x07, 0xF8, 0xFC, 0x01,
|
||||
0xFF, 0x1F, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x1F,
|
||||
0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0x80,
|
||||
0x00, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x03,
|
||||
0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFE, 0x07, 0xFE, 0x01,
|
||||
0x81, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFE,
|
||||
0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xF0, 0x3C, 0x01, 0xFE, 0x7F, 0xF0,
|
||||
0x3F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF,
|
||||
0xFF, 0xFB, 0xFF, 0xC1, 0xFF, 0x7F, 0xE0, 0x1F, 0xFF, 0xF8, 0x01, 0xFF,
|
||||
0xFF, 0x00, 0x3F, 0xFF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, 0x7F, 0x7F, 0x80,
|
||||
0x1F, 0xEF, 0xF0, 0x03, 0xFC, 0xFF, 0x00, 0xFF, 0x1F, 0xF8, 0x7F, 0xE1,
|
||||
0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF,
|
||||
0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x80, 0x0F, 0xF7, 0xF0, 0x03, 0xFE, 0xFE,
|
||||
0x00, 0x7F, 0x9F, 0xC0, 0x1F, 0xF3, 0xF8, 0x03, 0xFC, 0x7F, 0x00, 0x7F,
|
||||
0x80, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xE0,
|
||||
0x00, 0x07, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x07,
|
||||
0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF8, 0x00,
|
||||
0x01, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFE,
|
||||
0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00,
|
||||
0x01, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xF8, 0x0F, 0xFF,
|
||||
0xFF, 0x83, 0xFF, 0xFF, 0xF8, 0xFF, 0xC1, 0xFF, 0x9F, 0xF0, 0x0F, 0xF3,
|
||||
0xFC, 0x01, 0xFE, 0x7F, 0x00, 0x1F, 0xCF, 0xE0, 0x03, 0xF9, 0xFE, 0x00,
|
||||
0xFF, 0x3F, 0xC0, 0x1F, 0xE3, 0xFC, 0x07, 0xF8, 0x7F, 0xFF, 0xFF, 0x07,
|
||||
0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF,
|
||||
0xF1, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0x1F, 0xEF, 0xF0, 0x01, 0xFF, 0xFE,
|
||||
0x00, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0x1F,
|
||||
0xFF, 0xE0, 0x03, 0xFF, 0xFE, 0x00, 0xFF, 0xBF, 0xF0, 0x7F, 0xE7, 0xFF,
|
||||
0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xF0,
|
||||
0x01, 0xFF, 0xF0, 0x00, 0x00, 0xA0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0xFF,
|
||||
0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xF0,
|
||||
0xFF, 0xC3, 0xFF, 0x1F, 0xE0, 0x1F, 0xE7, 0xF8, 0x01, 0xFE, 0xFF, 0x00,
|
||||
0x3F, 0xDF, 0xC0, 0x03, 0xFB, 0xF8, 0x00, 0x7F, 0xFF, 0x80, 0x1F, 0xFF,
|
||||
0xF0, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xDF, 0xF0, 0x3F, 0xFB, 0xFF, 0xFF,
|
||||
0xFF, 0x3F, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x81,
|
||||
0xFF, 0xCF, 0xF0, 0x07, 0xC1, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xF0, 0x20,
|
||||
0x0F, 0xFC, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xF8,
|
||||
0x0F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0C,
|
||||
0x00, 0x00, 0x18, 0x3F, 0x3F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFE, 0x7E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1F, 0x9F,
|
||||
0xEF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x3F, 0x00, 0x18, 0x3F, 0x3F, 0xDF,
|
||||
0xFF, 0xFF, 0xFF, 0xFD, 0xFE, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x0E, 0x1F, 0x9F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x1F, 0x8F, 0x87, 0xC7, 0xE3, 0xE1, 0xF0, 0xF0, 0xF8, 0x00, 0x00, 0x00,
|
||||
0x04, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0xC0, 0x01, 0xFF, 0x00, 0x3F, 0xFC,
|
||||
0x03, 0xFF, 0xF0, 0x7F, 0xFF, 0x87, 0xFF, 0xF0, 0xFF, 0xFE, 0x03, 0xFF,
|
||||
0xC0, 0x0F, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0xFF, 0x80, 0x03, 0xFF, 0xC0,
|
||||
0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0xF0, 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0xF0,
|
||||
0x03, 0xFF, 0xC0, 0x01, 0xFF, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFC, 0x80, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xE0, 0x00,
|
||||
0xFF, 0xF0, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xFC, 0x01,
|
||||
0xFF, 0xFC, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0x00, 0x07,
|
||||
0xFC, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0xC1, 0xFF, 0xFC, 0x3F, 0xFF, 0x83,
|
||||
0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0x3F, 0xE0, 0x00, 0xFE, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x03, 0xFF, 0xFC, 0x07,
|
||||
0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFD,
|
||||
0xFE, 0x03, 0xFE, 0x3C, 0x00, 0xFF, 0x0C, 0x00, 0x7F, 0x80, 0x00, 0x1F,
|
||||
0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01,
|
||||
0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xFC, 0x00,
|
||||
0x03, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0x80,
|
||||
0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00,
|
||||
0x00, 0x07, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
|
||||
0x1F, 0xFC, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x1F,
|
||||
0xE0, 0x00, 0x03, 0xFC, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x0F, 0xC0,
|
||||
0x00, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x0F, 0xC0, 0x3F,
|
||||
0xE3, 0xF1, 0xF0, 0x7E, 0x03, 0xFF, 0xDF, 0x87, 0xC7, 0xE0, 0x7F, 0xFF,
|
||||
0xFC, 0x3E, 0x3F, 0x07, 0xFF, 0xFF, 0xE0, 0xF9, 0xF0, 0x3F, 0xFF, 0xFF,
|
||||
0x07, 0xDF, 0x83, 0xFE, 0x0F, 0xF8, 0x3E, 0xFC, 0x1F, 0xC0, 0x3F, 0xC0,
|
||||
0xFF, 0xC1, 0xFC, 0x00, 0xFE, 0x07, 0xFE, 0x0F, 0xE0, 0x03, 0xF0, 0x3F,
|
||||
0xF0, 0x7F, 0x00, 0x1F, 0x81, 0xFF, 0x83, 0xF0, 0x00, 0xFC, 0x0F, 0xFC,
|
||||
0x1F, 0x80, 0x07, 0xE0, 0x7F, 0xE0, 0xFC, 0x00, 0x3F, 0x03, 0xFF, 0x07,
|
||||
0xF0, 0x01, 0xF8, 0x1F, 0xF8, 0x3F, 0x80, 0x1F, 0xC0, 0xF7, 0xE1, 0xFC,
|
||||
0x00, 0xFE, 0x0F, 0xBF, 0x07, 0xF0, 0x0F, 0xF0, 0x7C, 0xF8, 0x3F, 0xE1,
|
||||
0xFF, 0xC7, 0xE7, 0xE0, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0x07, 0xFF, 0xFF,
|
||||
0xFF, 0xE0, 0xFC, 0x1F, 0xFF, 0xDF, 0xFF, 0x07, 0xE0, 0x3F, 0xFC, 0x7F,
|
||||
0xF0, 0x1F, 0x80, 0xFF, 0x81, 0xFE, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
||||
0x3F, 0xC0, 0x00, 0x10, 0x00, 0x00, 0xFF, 0xC0, 0x07, 0x80, 0x00, 0x03,
|
||||
0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,
|
||||
0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03,
|
||||
0xE0, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00,
|
||||
0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x0F, 0xFF,
|
||||
0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01,
|
||||
0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x03, 0xF9, 0xFC, 0x00,
|
||||
0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x00, 0x7F, 0x0F,
|
||||
0xE0, 0x00, 0x0F, 0xE0, 0xFF, 0x00, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x1F,
|
||||
0xE0, 0x7F, 0x80, 0x01, 0xFC, 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x3F, 0xC0,
|
||||
0x03, 0xF8, 0x03, 0xFC, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x07, 0xFF, 0xFF,
|
||||
0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xF8,
|
||||
0x3F, 0xC0, 0x00, 0x3F, 0xC3, 0xFC, 0x00, 0x03, 0xFC, 0x3F, 0x80, 0x00,
|
||||
0x1F, 0xC7, 0xF8, 0x00, 0x01, 0xFE, 0x7F, 0x00, 0x00, 0x1F, 0xEF, 0xF0,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0xFF, 0xFF, 0xF8, 0x03,
|
||||
0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xF0, 0xFF,
|
||||
0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xCF, 0xE0, 0x01, 0xFF, 0x3F, 0x80,
|
||||
0x03, 0xFC, 0xFE, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0xCF, 0xE0, 0x00,
|
||||
0x7F, 0x3F, 0x80, 0x03, 0xFC, 0xFE, 0x00, 0x1F, 0xF3, 0xF8, 0x03, 0xFF,
|
||||
0x8F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xC3,
|
||||
0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0x07, 0xFE, 0xFE,
|
||||
0x00, 0x07, 0xFB, 0xF8, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x80,
|
||||
0x00, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xE0, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF,
|
||||
0xCF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x00,
|
||||
0x00, 0x1F, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xC0,
|
||||
0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xC7,
|
||||
0xFF, 0x81, 0xFF, 0x1F, 0xF8, 0x00, 0x7C, 0x3F, 0xE0, 0x00, 0x70, 0xFF,
|
||||
0x80, 0x00, 0x41, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x80,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00,
|
||||
0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00,
|
||||
0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x10, 0x3F, 0xE0, 0x00,
|
||||
0x70, 0x7F, 0xE0, 0x01, 0xF0, 0x7F, 0xF0, 0x0F, 0xF0, 0x7F, 0xFF, 0xFF,
|
||||
0xF0, 0x7F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFC,
|
||||
0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0xA0, 0x00,
|
||||
0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xE0,
|
||||
0x1F, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF,
|
||||
0xC3, 0xFC, 0x03, 0xFF, 0xF1, 0xFE, 0x00, 0x1F, 0xF8, 0xFF, 0x00, 0x03,
|
||||
0xFE, 0x7F, 0x80, 0x00, 0xFF, 0xBF, 0xC0, 0x00, 0x3F, 0xDF, 0xE0, 0x00,
|
||||
0x1F, 0xEF, 0xF0, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFC, 0x00,
|
||||
0x01, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x80,
|
||||
0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF0,
|
||||
0x00, 0x07, 0xFF, 0xF8, 0x00, 0x07, 0xFB, 0xFC, 0x00, 0x03, 0xFD, 0xFE,
|
||||
0x00, 0x03, 0xFE, 0xFF, 0x00, 0x03, 0xFE, 0x7F, 0x80, 0x07, 0xFF, 0x3F,
|
||||
0xC0, 0x1F, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x07,
|
||||
0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFC, 0x00,
|
||||
0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00,
|
||||
0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFF, 0xFF,
|
||||
0xF3, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF,
|
||||
0xFF, 0x3F, 0xFF, 0xFF, 0x9F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFE,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F,
|
||||
0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01,
|
||||
0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF,
|
||||
0x9F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xE7, 0xF8, 0x00, 0x03, 0xFC, 0x00,
|
||||
0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0,
|
||||
0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC,
|
||||
0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
|
||||
0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF,
|
||||
0xFC, 0x07, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFE, 0x03,
|
||||
0xFC, 0x3F, 0xF0, 0x00, 0xF8, 0x3F, 0xE0, 0x00, 0x70, 0x7F, 0xC0, 0x00,
|
||||
0x00, 0x7F, 0x80, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00,
|
||||
0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x80, 0x00,
|
||||
0xFE, 0x7F, 0x80, 0x00, 0xFE, 0x7F, 0xC0, 0x00, 0xFE, 0x3F, 0xE0, 0x00,
|
||||
0xFE, 0x3F, 0xF0, 0x00, 0xFE, 0x1F, 0xFC, 0x03, 0xFE, 0x0F, 0xFF, 0xFF,
|
||||
0xFE, 0x07, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF,
|
||||
0xF8, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x70,
|
||||
0x00, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x3F,
|
||||
0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0xFF,
|
||||
0xF0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFC,
|
||||
0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x00,
|
||||
0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0xFF,
|
||||
0xF0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFC,
|
||||
0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x00,
|
||||
0x03, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xC0, 0x00,
|
||||
0xFF, 0xFF, 0x00, 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x0F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0x7F,
|
||||
0xFF, 0xF0, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0x80, 0x00,
|
||||
0xFF, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFF,
|
||||
0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x08,
|
||||
0x01, 0xFE, 0x38, 0x07, 0xF8, 0xFC, 0x1F, 0xF3, 0xFF, 0xFF, 0xEF, 0xFF,
|
||||
0xFF, 0x8F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0x07, 0xFF,
|
||||
0x80, 0x00, 0x70, 0x00, 0xFE, 0x00, 0x03, 0xFD, 0xFC, 0x00, 0x0F, 0xF3,
|
||||
0xF8, 0x00, 0x3F, 0xC7, 0xF0, 0x00, 0xFF, 0x0F, 0xE0, 0x03, 0xFC, 0x1F,
|
||||
0xC0, 0x0F, 0xF0, 0x3F, 0x80, 0x3F, 0xE0, 0x7F, 0x00, 0xFF, 0x80, 0xFE,
|
||||
0x03, 0xFE, 0x01, 0xFC, 0x0F, 0xF8, 0x03, 0xF8, 0x3F, 0xE0, 0x07, 0xF0,
|
||||
0xFF, 0x80, 0x0F, 0xE3, 0xFE, 0x00, 0x1F, 0xCF, 0xF8, 0x00, 0x3F, 0xBF,
|
||||
0xE0, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF,
|
||||
0xC0, 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF,
|
||||
0x80, 0x1F, 0xFC, 0xFF, 0x80, 0x3F, 0xF0, 0xFF, 0x80, 0x7F, 0xC0, 0xFF,
|
||||
0x80, 0xFF, 0x01, 0xFF, 0x81, 0xFC, 0x01, 0xFF, 0x03, 0xF8, 0x01, 0xFF,
|
||||
0x07, 0xF0, 0x01, 0xFF, 0x0F, 0xE0, 0x01, 0xFF, 0x1F, 0xC0, 0x01, 0xFF,
|
||||
0x3F, 0x80, 0x03, 0xFE, 0x7F, 0x00, 0x03, 0xFE, 0xFE, 0x00, 0x03, 0xFE,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x1F,
|
||||
0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF,
|
||||
0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x03,
|
||||
0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0x1F, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFB, 0xF8, 0x0F, 0xEF,
|
||||
0xFF, 0xDF, 0xC0, 0xFE, 0x7F, 0xFE, 0x7F, 0x07, 0xF3, 0xFF, 0xF3, 0xFC,
|
||||
0x7F, 0x1F, 0xFF, 0x8F, 0xE3, 0xF8, 0xFF, 0xFC, 0x3F, 0xBF, 0x87, 0xFF,
|
||||
0xE1, 0xFF, 0xF8, 0x3F, 0xFF, 0x07, 0xFF, 0xC1, 0xFF, 0xF8, 0x3F, 0xFC,
|
||||
0x0F, 0xFF, 0xC0, 0xFF, 0xE0, 0x7F, 0xFE, 0x03, 0xFE, 0x03, 0xFF, 0xF0,
|
||||
0x1F, 0xF0, 0x1F, 0xFF, 0x80, 0x7F, 0x00, 0xFF, 0xFC, 0x03, 0xF0, 0x07,
|
||||
0xFF, 0xE0, 0x0F, 0x80, 0x3F, 0xFF, 0x00, 0x38, 0x01, 0xFF, 0xF8, 0x00,
|
||||
0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x03, 0xF8,
|
||||
0xFE, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x1F, 0xFF,
|
||||
0xE0, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFE,
|
||||
0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0,
|
||||
0x07, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x01,
|
||||
0xFF, 0xFB, 0xFE, 0x07, 0xFF, 0xE7, 0xFC, 0x1F, 0xFF, 0x9F, 0xF8, 0x7F,
|
||||
0xFE, 0x3F, 0xF1, 0xFF, 0xF8, 0x7F, 0xC7, 0xFF, 0xE0, 0xFF, 0x9F, 0xFF,
|
||||
0x81, 0xFF, 0x7F, 0xFE, 0x03, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0,
|
||||
0x1F, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xF8, 0x00,
|
||||
0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFE, 0x00, 0x0F,
|
||||
0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x7F,
|
||||
0xFE, 0x00, 0x01, 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFE,
|
||||
0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x07, 0xFF,
|
||||
0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFE, 0x07, 0xFF, 0x83,
|
||||
0xFF, 0x00, 0x1F, 0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0xC7, 0xFC, 0x00, 0x03,
|
||||
0xFC, 0x7F, 0x80, 0x00, 0x3F, 0xE7, 0xF8, 0x00, 0x01, 0xFE, 0xFF, 0x00,
|
||||
0x00, 0x1F, 0xEF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF,
|
||||
0xF0, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00,
|
||||
0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0x1F, 0xE7, 0xF8, 0x00, 0x01, 0xFE, 0x7F, 0x80, 0x00, 0x3F, 0xE7,
|
||||
0xFC, 0x00, 0x03, 0xFC, 0x3F, 0xE0, 0x00, 0x7F, 0xC3, 0xFF, 0x00, 0x1F,
|
||||
0xF8, 0x1F, 0xFC, 0x07, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF,
|
||||
0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xF8, 0x00,
|
||||
0x07, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F,
|
||||
0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, 0x01,
|
||||
0xFF, 0xEF, 0xF0, 0x01, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF,
|
||||
0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0x07, 0xFF, 0xF0,
|
||||
0x00, 0x7F, 0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x1F,
|
||||
0xFF, 0xF0, 0x1F, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFC, 0xFF,
|
||||
0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFE,
|
||||
0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
|
||||
0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x07,
|
||||
0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xFF,
|
||||
0x80, 0x7F, 0xF8, 0x1F, 0xFE, 0x07, 0xFE, 0x00, 0x3F, 0xF0, 0x3F, 0xE0,
|
||||
0x00, 0x7F, 0xC3, 0xFE, 0x00, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x0F, 0xF8,
|
||||
0xFF, 0x00, 0x00, 0x3F, 0xCF, 0xF0, 0x00, 0x01, 0xFE, 0x7F, 0x80, 0x00,
|
||||
0x07, 0xFB, 0xFC, 0x00, 0x00, 0x3F, 0xDF, 0xE0, 0x00, 0x01, 0xFE, 0xFF,
|
||||
0x00, 0x00, 0x0F, 0xF7, 0xF8, 0x00, 0x00, 0x7F, 0xBF, 0xC0, 0x00, 0x03,
|
||||
0xFD, 0xFE, 0x00, 0x00, 0x1F, 0xEF, 0xF0, 0x00, 0x01, 0xFE, 0x3F, 0xC0,
|
||||
0x00, 0x0F, 0xF1, 0xFE, 0x00, 0x00, 0xFF, 0x8F, 0xF8, 0x00, 0x07, 0xF8,
|
||||
0x3F, 0xE0, 0x00, 0x7F, 0xC1, 0xFF, 0x80, 0x0F, 0xFC, 0x07, 0xFF, 0x01,
|
||||
0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x01,
|
||||
0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFC,
|
||||
0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFC, 0x03, 0x00, 0x00,
|
||||
0x3F, 0xF8, 0x7C, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF,
|
||||
0x80, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00,
|
||||
0x3F, 0xF8, 0x00, 0x00, 0x00, 0x08, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF,
|
||||
0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF,
|
||||
0xFC, 0x7F, 0xFF, 0xFF, 0xF3, 0xFC, 0x07, 0xFF, 0x9F, 0xE0, 0x03, 0xFE,
|
||||
0xFF, 0x00, 0x0F, 0xF7, 0xF8, 0x00, 0x7F, 0xBF, 0xC0, 0x01, 0xFD, 0xFE,
|
||||
0x00, 0x0F, 0xEF, 0xF0, 0x00, 0x7F, 0x7F, 0x80, 0x03, 0xFB, 0xFC, 0x00,
|
||||
0x3F, 0xDF, 0xE0, 0x01, 0xFE, 0xFF, 0x00, 0x1F, 0xF7, 0xF8, 0x07, 0xFF,
|
||||
0x3F, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0x7F,
|
||||
0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0x80, 0xFF, 0x01,
|
||||
0xFE, 0x07, 0xF8, 0x07, 0xF8, 0x3F, 0xC0, 0x3F, 0xE1, 0xFE, 0x00, 0xFF,
|
||||
0x0F, 0xF0, 0x03, 0xFC, 0x7F, 0x80, 0x1F, 0xF3, 0xFC, 0x00, 0x7F, 0x9F,
|
||||
0xE0, 0x01, 0xFE, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x3F,
|
||||
0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF,
|
||||
0x83, 0xFF, 0xFF, 0xF8, 0x3F, 0xC0, 0x0F, 0x87, 0xF8, 0x00, 0x30, 0x7F,
|
||||
0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xFC, 0x00,
|
||||
0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xE0, 0x01,
|
||||
0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF,
|
||||
0xFF, 0xC0, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF,
|
||||
0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x10, 0x00, 0x0F, 0xF3, 0x80,
|
||||
0x00, 0xFE, 0x3F, 0x00, 0x1F, 0xE7, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF,
|
||||
0xCF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x03,
|
||||
0xFF, 0xF8, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00,
|
||||
0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F,
|
||||
0x80, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F,
|
||||
0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0,
|
||||
0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00,
|
||||
0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0xF0, 0x00,
|
||||
0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x3F,
|
||||
0xFF, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xFC, 0x00,
|
||||
0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x0F,
|
||||
0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xFF,
|
||||
0x80, 0x00, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x80,
|
||||
0x03, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x80, 0x0F,
|
||||
0xFB, 0xFE, 0x00, 0xFF, 0x9F, 0xF8, 0x0F, 0xFC, 0x7F, 0xFF, 0xFF, 0xC3,
|
||||
0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFE, 0x00, 0x7F,
|
||||
0xFF, 0xC0, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x50, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0x0F, 0xEF, 0xF0, 0x00, 0x01, 0xFE, 0x7F, 0x80, 0x00, 0x1F, 0xE7,
|
||||
0xF8, 0x00, 0x03, 0xFC, 0x7F, 0xC0, 0x00, 0x3F, 0xC3, 0xFC, 0x00, 0x03,
|
||||
0xF8, 0x3F, 0xE0, 0x00, 0x7F, 0x81, 0xFE, 0x00, 0x07, 0xF0, 0x1F, 0xE0,
|
||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x0F, 0xF0, 0x01, 0xFE, 0x00,
|
||||
0xFF, 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x01, 0xFC, 0x00, 0x7F, 0xC0, 0x3F,
|
||||
0xC0, 0x03, 0xFC, 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x7F, 0x80, 0x01, 0xFE,
|
||||
0x07, 0xF0, 0x00, 0x1F, 0xE0, 0xFF, 0x00, 0x00, 0xFF, 0x0F, 0xF0, 0x00,
|
||||
0x0F, 0xF0, 0xFE, 0x00, 0x00, 0xFF, 0x1F, 0xE0, 0x00, 0x07, 0xF9, 0xFC,
|
||||
0x00, 0x00, 0x7F, 0xBF, 0xC0, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x3F,
|
||||
0xFF, 0x80, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00,
|
||||
0x01, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xE0,
|
||||
0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03,
|
||||
0xFC, 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF7, 0xF8, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x3F, 0x9F, 0xE0, 0x00, 0xFF, 0x80, 0x01, 0xFC, 0xFF,
|
||||
0x00, 0x07, 0xFC, 0x00, 0x1F, 0xE7, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0xFE,
|
||||
0x1F, 0xE0, 0x03, 0xFF, 0x80, 0x07, 0xF0, 0xFF, 0x00, 0x1F, 0xFC, 0x00,
|
||||
0x7F, 0x87, 0xF8, 0x00, 0xFF, 0xF0, 0x03, 0xF8, 0x1F, 0xE0, 0x0F, 0xFF,
|
||||
0x80, 0x1F, 0xC0, 0xFF, 0x00, 0x7F, 0xFC, 0x01, 0xFE, 0x07, 0xF8, 0x03,
|
||||
0xFF, 0xF0, 0x0F, 0xE0, 0x1F, 0xE0, 0x3F, 0xBF, 0x80, 0x7F, 0x00, 0xFF,
|
||||
0x01, 0xFD, 0xFC, 0x07, 0xF8, 0x07, 0xF8, 0x0F, 0xEF, 0xE0, 0x3F, 0x80,
|
||||
0x1F, 0xE0, 0xFE, 0x3F, 0x81, 0xFC, 0x00, 0xFF, 0x07, 0xF1, 0xFC, 0x1F,
|
||||
0xE0, 0x07, 0xF8, 0x3F, 0x8F, 0xE0, 0xFE, 0x00, 0x1F, 0xE3, 0xF8, 0x3F,
|
||||
0x87, 0xF0, 0x00, 0xFF, 0x1F, 0xC1, 0xFC, 0x7F, 0x80, 0x07, 0xF8, 0xFE,
|
||||
0x0F, 0xE3, 0xF8, 0x00, 0x1F, 0xCF, 0xE0, 0x3F, 0x9F, 0xC0, 0x00, 0xFF,
|
||||
0x7F, 0x01, 0xFD, 0xFE, 0x00, 0x07, 0xFB, 0xF8, 0x0F, 0xEF, 0xE0, 0x00,
|
||||
0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8,
|
||||
0x00, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x00, 0x1F, 0xFE, 0x00, 0x3F,
|
||||
0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00,
|
||||
0x0F, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF,
|
||||
0xC0, 0x01, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x1F, 0xE0,
|
||||
0x00, 0xFF, 0x8F, 0xF8, 0x00, 0x7F, 0x83, 0xFE, 0x00, 0x7F, 0x80, 0xFF,
|
||||
0x80, 0x7F, 0x80, 0x3F, 0xC0, 0x3F, 0xC0, 0x1F, 0xF0, 0x3F, 0xC0, 0x07,
|
||||
0xFC, 0x3F, 0xC0, 0x01, 0xFE, 0x3F, 0xE0, 0x00, 0xFF, 0x9F, 0xE0, 0x00,
|
||||
0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00,
|
||||
0x01, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00,
|
||||
0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0x80,
|
||||
0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFC,
|
||||
0x00, 0x03, 0xFD, 0xFF, 0x00, 0x03, 0xFC, 0x7F, 0xC0, 0x03, 0xFE, 0x1F,
|
||||
0xE0, 0x01, 0xFE, 0x0F, 0xF8, 0x01, 0xFE, 0x03, 0xFE, 0x01, 0xFF, 0x00,
|
||||
0xFF, 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0xFF, 0x00, 0x1F, 0xF0, 0xFF, 0x80,
|
||||
0x07, 0xFC, 0xFF, 0x80, 0x01, 0xFE, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x7F,
|
||||
0x80, 0x00, 0x3F, 0xBF, 0xC0, 0x00, 0x3F, 0xCF, 0xF0, 0x00, 0x1F, 0xC7,
|
||||
0xF8, 0x00, 0x1F, 0xC1, 0xFE, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x0F, 0xE0,
|
||||
0x3F, 0xC0, 0x0F, 0xF0, 0x0F, 0xF0, 0x07, 0xF0, 0x07, 0xF8, 0x07, 0xF0,
|
||||
0x01, 0xFE, 0x07, 0xF8, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x3F, 0xC3, 0xFC,
|
||||
0x00, 0x0F, 0xF1, 0xFC, 0x00, 0x07, 0xF9, 0xFC, 0x00, 0x01, 0xFF, 0xFE,
|
||||
0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x0F, 0xFF,
|
||||
0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x7F,
|
||||
0x80, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01,
|
||||
0xFE, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00,
|
||||
0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00,
|
||||
0x07, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xBF,
|
||||
0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF,
|
||||
0xFF, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF,
|
||||
0x80, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00,
|
||||
0x00, 0x7F, 0xC0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x07,
|
||||
0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xE0,
|
||||
0x00, 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x03, 0xFE, 0x00, 0x00,
|
||||
0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFF,
|
||||
0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F, 0x81, 0xFC, 0x0F,
|
||||
0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F, 0x81, 0xFC,
|
||||
0x0F, 0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F, 0x81,
|
||||
0xFC, 0x0F, 0xE0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, 0x07, 0xF0, 0x3F,
|
||||
0x81, 0xFC, 0x0F, 0xE0, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xE0, 0x00,
|
||||
0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x0F,
|
||||
0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x00,
|
||||
0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7E, 0x00, 0x01,
|
||||
0xFC, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0xFE,
|
||||
0x00, 0x01, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00,
|
||||
0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x1F,
|
||||
0x80, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0x1F, 0x80, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07,
|
||||
0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07,
|
||||
0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07,
|
||||
0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07,
|
||||
0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x00, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F,
|
||||
0xF8, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xF0, 0x01, 0xFB, 0xE0, 0x03, 0xE7,
|
||||
0xC0, 0x0F, 0xCF, 0xC0, 0x1F, 0x0F, 0x80, 0x7E, 0x1F, 0x80, 0xFC, 0x1F,
|
||||
0x01, 0xF0, 0x3F, 0x07, 0xE0, 0x7E, 0x0F, 0x80, 0x7C, 0x3F, 0x00, 0xFC,
|
||||
0x7E, 0x00, 0xF9, 0xF8, 0x01, 0xFB, 0xF0, 0x01, 0xF0, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF,
|
||||
0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x00, 0x7C, 0x00, 0x07,
|
||||
0xFF, 0xC0, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0xFC, 0x3F,
|
||||
0xFF, 0xFC, 0x3F, 0x07, 0xFE, 0x18, 0x01, 0xFE, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x3F,
|
||||
0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x00, 0xFF, 0xFE,
|
||||
0x00, 0xFF, 0xFE, 0x00, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0x03, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x3F, 0xFF, 0x7F, 0x1F, 0xFE, 0x7F, 0x0F,
|
||||
0xFC, 0x7F, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x38,
|
||||
0x00, 0xFF, 0x3F, 0xF8, 0x0F, 0xF7, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F,
|
||||
0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0x9F, 0xFC, 0xFF, 0xC0,
|
||||
0x3F, 0xEF, 0xF8, 0x01, 0xFE, 0xFF, 0x80, 0x0F, 0xEF, 0xF0, 0x00, 0xFF,
|
||||
0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0,
|
||||
0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x80, 0x1F,
|
||||
0xEF, 0xF8, 0x01, 0xFE, 0xFF, 0xE0, 0x7F, 0xEF, 0xFF, 0xFF, 0xFC, 0xFF,
|
||||
0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0xFE, 0xFF, 0xFF, 0x0F, 0xE7, 0xFF,
|
||||
0xC0, 0xFE, 0x1F, 0xF0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x3F, 0xFE, 0x00,
|
||||
0x3F, 0xFF, 0xC0, 0x1F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF,
|
||||
0xE3, 0xFF, 0x8F, 0xFC, 0xFF, 0x80, 0xFE, 0x7F, 0xC0, 0x1E, 0x1F, 0xE0,
|
||||
0x02, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x00,
|
||||
0x1F, 0xE0, 0x02, 0x07, 0xFC, 0x01, 0xE0, 0xFF, 0x80, 0xFE, 0x1F, 0xFF,
|
||||
0xFF, 0xC7, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xF8, 0x01,
|
||||
0xFF, 0xFC, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x01,
|
||||
0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F,
|
||||
0xE0, 0x03, 0x81, 0xFC, 0x07, 0xFE, 0x3F, 0x83, 0xFF, 0xF7, 0xF0, 0xFF,
|
||||
0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFB, 0xFF, 0x8F, 0xFF,
|
||||
0x7F, 0xC0, 0x7F, 0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x80, 0x03, 0xFF,
|
||||
0xF0, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, 0xFC, 0x00,
|
||||
0x7F, 0xFF, 0xC0, 0x1F, 0xF7, 0xFC, 0x07, 0xFE, 0xFF, 0xFF, 0xFF, 0xCF,
|
||||
0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFD,
|
||||
0xFC, 0x07, 0xFE, 0x3F, 0x80, 0x00, 0x06, 0x00, 0x00, 0x1F, 0xFE, 0x00,
|
||||
0x0F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF,
|
||||
0xFF, 0x0F, 0xF8, 0x1F, 0xE1, 0xFE, 0x01, 0xFE, 0x7F, 0x80, 0x1F, 0xCF,
|
||||
0xE0, 0x01, 0xFD, 0xFC, 0x00, 0x3F, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFB, 0xF8, 0x00, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x10, 0x1F, 0xF0, 0x0F,
|
||||
0x01, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0x3F,
|
||||
0xFF, 0xF8, 0x01, 0xFF, 0xFE, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xE0,
|
||||
0x0F, 0xFF, 0x01, 0xFF, 0xE0, 0x3F, 0xFE, 0x07, 0xFF, 0xC0, 0x7F, 0xFC,
|
||||
0x07, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0xFF, 0xFF,
|
||||
0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xCF, 0xFF,
|
||||
0xFC, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0x00, 0x0E, 0x00, 0x00, 0x1F, 0xFE, 0x3F, 0x03, 0xFF, 0xF3, 0xF0,
|
||||
0xFF, 0xFF, 0xBF, 0x1F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8,
|
||||
0xFF, 0xF7, 0xFE, 0x01, 0xFF, 0x7F, 0x80, 0x0F, 0xF7, 0xF8, 0x00, 0xFF,
|
||||
0x7F, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0x07, 0xF7, 0xF0,
|
||||
0x00, 0x7F, 0x7F, 0x00, 0x07, 0xF7, 0xF8, 0x00, 0x7F, 0x7F, 0x80, 0x0F,
|
||||
0xF7, 0xFC, 0x01, 0xFF, 0x3F, 0xF8, 0x7F, 0xF1, 0xFF, 0xFF, 0xFF, 0x1F,
|
||||
0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xF7, 0xF0, 0x1F, 0xFE,
|
||||
0x7F, 0x00, 0x1F, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF0,
|
||||
0xC0, 0x00, 0xFF, 0x0F, 0x00, 0x1F, 0xE1, 0xFF, 0x1F, 0xFE, 0x1F, 0xFF,
|
||||
0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xE0,
|
||||
0x01, 0xFF, 0xF8, 0x00, 0x00, 0x60, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x3F, 0xC0, 0xE0, 0x0F, 0xF3, 0xFF, 0x83, 0xFD, 0xFF, 0xF8, 0xFF, 0xFF,
|
||||
0xFF, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFE, 0xFF,
|
||||
0xE0, 0x7F, 0xFF, 0xE0, 0x0F, 0xFF, 0xF8, 0x03, 0xFF, 0xFC, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xF0, 0x01, 0xFF, 0xFC,
|
||||
0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xF0, 0x01, 0xFF,
|
||||
0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xF0, 0x01,
|
||||
0xFC, 0x3C, 0x7F, 0xBF, 0xDF, 0xFF, 0xFF, 0xFB, 0xFC, 0xFC, 0x00, 0x00,
|
||||
0x00, 0x00, 0x0F, 0xF7, 0xFB, 0xFD, 0xFE, 0xFF, 0x7F, 0xBF, 0xDF, 0xEF,
|
||||
0xF7, 0xFB, 0xFD, 0xFE, 0xFF, 0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD,
|
||||
0xFE, 0xFF, 0x7F, 0xBF, 0xDF, 0xEF, 0xF0, 0x00, 0x78, 0x01, 0xFE, 0x01,
|
||||
0xFE, 0x01, 0xFF, 0x01, 0xFF, 0x01, 0xFE, 0x01, 0xFE, 0x00, 0xFC, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0x00,
|
||||
0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00,
|
||||
0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00,
|
||||
0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00,
|
||||
0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0xFE, 0x00,
|
||||
0xFE, 0x01, 0xFE, 0x63, 0xFE, 0x7F, 0xFC, 0x7F, 0xFC, 0xFF, 0xF8, 0xFF,
|
||||
0xF0, 0xFF, 0xC0, 0x04, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00,
|
||||
0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x3F, 0xEF, 0xF0, 0x07, 0xF8, 0xFF,
|
||||
0x01, 0xFF, 0x0F, 0xF0, 0x3F, 0xE0, 0xFF, 0x07, 0xFC, 0x0F, 0xF0, 0xFF,
|
||||
0xC0, 0xFF, 0x1F, 0xF8, 0x0F, 0xF3, 0xFF, 0x00, 0xFF, 0x7F, 0xE0, 0x0F,
|
||||
0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF,
|
||||
0xC0, 0x0F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x0F, 0xFE, 0xFF, 0x80,
|
||||
0xFF, 0xCF, 0xF8, 0x0F, 0xF8, 0x7F, 0xC0, 0xFF, 0x03, 0xFE, 0x0F, 0xF0,
|
||||
0x1F, 0xF0, 0xFF, 0x00, 0xFF, 0x8F, 0xF0, 0x0F, 0xF8, 0xFF, 0x00, 0x7F,
|
||||
0xCF, 0xF0, 0x03, 0xFE, 0xFF, 0x00, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0x00, 0x00, 0xC0,
|
||||
0x1F, 0xC7, 0xFE, 0x03, 0xFF, 0x83, 0xF9, 0xFF, 0xF0, 0xFF, 0xFC, 0x7F,
|
||||
0x7F, 0xFF, 0x3F, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0x07, 0xFF,
|
||||
0x81, 0xFF, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xFF, 0xE0, 0x07, 0xF8, 0x03,
|
||||
0xFF, 0xFC, 0x00, 0xFF, 0x00, 0x3F, 0xFF, 0x80, 0x1F, 0xE0, 0x07, 0xFF,
|
||||
0xF0, 0x03, 0xF8, 0x00, 0xFF, 0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xFF, 0xC0,
|
||||
0x0F, 0xE0, 0x03, 0xFF, 0xF8, 0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x3F,
|
||||
0x80, 0x0F, 0xFF, 0xE0, 0x07, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0xFE, 0x00,
|
||||
0x3F, 0xFF, 0x80, 0x1F, 0xC0, 0x07, 0xFF, 0xF0, 0x03, 0xF8, 0x00, 0xFF,
|
||||
0xFE, 0x00, 0x7F, 0x00, 0x1F, 0xFF, 0xC0, 0x0F, 0xE0, 0x03, 0xFF, 0xF8,
|
||||
0x01, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0x80, 0x0F, 0xFF, 0xE0, 0x07,
|
||||
0xF0, 0x01, 0xFC, 0x00, 0x03, 0x80, 0x3F, 0x8F, 0xFE, 0x0F, 0xE7, 0xFF,
|
||||
0xE3, 0xFB, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xEF, 0xFF,
|
||||
0xFF, 0xFB, 0xFF, 0x81, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xE0, 0x0F, 0xFF,
|
||||
0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x07,
|
||||
0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0,
|
||||
0x07, 0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF,
|
||||
0xC0, 0x07, 0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F,
|
||||
0xFF, 0xC0, 0x07, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x03,
|
||||
0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF,
|
||||
0xFC, 0x3F, 0xF8, 0xFF, 0xC3, 0xFE, 0x03, 0xFE, 0x7F, 0xC0, 0x1F, 0xE7,
|
||||
0xF8, 0x00, 0xFF, 0x7F, 0x00, 0x0F, 0xF7, 0xF0, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x07, 0xFF, 0xF0, 0x00, 0x7F, 0x7F, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x7F,
|
||||
0x7F, 0x80, 0x0F, 0xF7, 0xF8, 0x00, 0xFF, 0x3F, 0xC0, 0x1F, 0xE3, 0xFE,
|
||||
0x03, 0xFE, 0x1F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF,
|
||||
0x80, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0x00, 0x00,
|
||||
0x03, 0x80, 0x0F, 0xE3, 0xFF, 0x80, 0xFE, 0x7F, 0xFE, 0x0F, 0xFF, 0xFF,
|
||||
0xF0, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFC, 0xFF, 0xF9, 0xFF, 0xCF,
|
||||
0xFC, 0x03, 0xFE, 0xFF, 0x80, 0x1F, 0xEF, 0xF8, 0x00, 0xFE, 0xFF, 0x00,
|
||||
0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF,
|
||||
0xFF, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xF8,
|
||||
0x01, 0xFE, 0xFF, 0x80, 0x1F, 0xEF, 0xFE, 0x07, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
0xCF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF0, 0xFF,
|
||||
0x7F, 0xFC, 0x0F, 0xF1, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0F, 0xFC, 0x7F, 0x03, 0xFF, 0xF7,
|
||||
0xF0, 0x7F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x3F,
|
||||
0xF8, 0xFF, 0xF3, 0xFE, 0x03, 0xFF, 0x7F, 0xC0, 0x1F, 0xF7, 0xF8, 0x00,
|
||||
0xFF, 0x7F, 0x00, 0x0F, 0xF7, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0x07, 0xFF,
|
||||
0xF0, 0x00, 0x7F, 0x7F, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x7F, 0x7F, 0x80,
|
||||
0x0F, 0xF7, 0xF8, 0x00, 0xFF, 0x7F, 0xC0, 0x1F, 0xF3, 0xFE, 0x03, 0xFF,
|
||||
0x3F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F,
|
||||
0xFF, 0xFF, 0x03, 0xFF, 0xE7, 0xF0, 0x0F, 0xFC, 0x7F, 0x00, 0x00, 0x07,
|
||||
0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00,
|
||||
0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFE, 0x3F, 0xFE, 0x7F, 0xFE,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xC0, 0xFF,
|
||||
0x80, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x3E, 0x00,
|
||||
0x07, 0xFF, 0xE0, 0x3F, 0xFF, 0xF0, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x8F,
|
||||
0xFF, 0xFF, 0x1F, 0xE0, 0x1C, 0x3F, 0x80, 0x08, 0x7F, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xFC, 0x03, 0xFF, 0xFE, 0x03, 0xFF,
|
||||
0xFF, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x03,
|
||||
0xFC, 0x80, 0x03, 0xF9, 0xC0, 0x07, 0xF7, 0xF0, 0x3F, 0xCF, 0xFF, 0xFF,
|
||||
0xBF, 0xFF, 0xFE, 0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0xE0, 0x1F, 0xFF, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xCF, 0xFF,
|
||||
0xFC, 0xFF, 0xFF, 0xC0, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x7F, 0xDC, 0x07, 0xFF, 0xC0, 0x7F, 0xFE, 0x03, 0xFF,
|
||||
0xE0, 0x1F, 0xFF, 0x00, 0x7F, 0xC0, 0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x07,
|
||||
0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0,
|
||||
0x07, 0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF,
|
||||
0xC0, 0x07, 0xFF, 0xF0, 0x01, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x1F,
|
||||
0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0x03, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0x00,
|
||||
0x7F, 0xDF, 0xE0, 0x1F, 0xF7, 0xFC, 0x1F, 0xFD, 0xFF, 0xFF, 0xFF, 0x3F,
|
||||
0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFC, 0x3F, 0xFE, 0x7F,
|
||||
0x03, 0xFE, 0x1F, 0xC0, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x7F, 0x7F,
|
||||
0x00, 0x0F, 0xE7, 0xF8, 0x00, 0xFE, 0x3F, 0x80, 0x1F, 0xC3, 0xFC, 0x01,
|
||||
0xFC, 0x3F, 0xC0, 0x1F, 0xC1, 0xFC, 0x03, 0xF8, 0x1F, 0xE0, 0x3F, 0x80,
|
||||
0xFE, 0x07, 0xF0, 0x0F, 0xF0, 0x7F, 0x00, 0x7F, 0x0F, 0xF0, 0x07, 0xF0,
|
||||
0xFE, 0x00, 0x7F, 0x8F, 0xE0, 0x03, 0xF9, 0xFC, 0x00, 0x3F, 0xDF, 0xC0,
|
||||
0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xF8, 0x00, 0x0F,
|
||||
0xFF, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xE0,
|
||||
0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x1F, 0xC0,
|
||||
0x07, 0xF7, 0xF0, 0x03, 0xFC, 0x00, 0x7E, 0x7F, 0x00, 0x3F, 0xC0, 0x0F,
|
||||
0xE7, 0xF0, 0x03, 0xFE, 0x00, 0xFE, 0x3F, 0x80, 0x7F, 0xE0, 0x0F, 0xC3,
|
||||
0xF8, 0x07, 0xFE, 0x01, 0xFC, 0x3F, 0x80, 0x7F, 0xF0, 0x1F, 0xC1, 0xFC,
|
||||
0x0F, 0xFF, 0x01, 0xF8, 0x1F, 0xC0, 0xFF, 0xF0, 0x3F, 0x80, 0xFC, 0x0F,
|
||||
0xFF, 0x83, 0xF0, 0x0F, 0xE1, 0xFD, 0xF8, 0x3F, 0x00, 0xFE, 0x1F, 0x9F,
|
||||
0x87, 0xF0, 0x07, 0xE3, 0xF9, 0xFC, 0x7E, 0x00, 0x7F, 0x3F, 0x8F, 0xC7,
|
||||
0xE0, 0x07, 0xF3, 0xF0, 0xFE, 0xFE, 0x00, 0x3F, 0x7F, 0x0F, 0xEF, 0xC0,
|
||||
0x03, 0xFF, 0xE0, 0x7F, 0xFC, 0x00, 0x3F, 0xFE, 0x07, 0xFF, 0xC0, 0x01,
|
||||
0xFF, 0xE0, 0x7F, 0xF8, 0x00, 0x1F, 0xFC, 0x03, 0xFF, 0x80, 0x00, 0xFF,
|
||||
0xC0, 0x3F, 0xF0, 0x00, 0x0F, 0xFC, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0x80,
|
||||
0x1F, 0xF0, 0x00, 0x07, 0xF8, 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x0F,
|
||||
0xE0, 0x00, 0x7F, 0x80, 0x1F, 0xE3, 0xFC, 0x03, 0xFC, 0x1F, 0xE0, 0x3F,
|
||||
0x81, 0xFF, 0x07, 0xF8, 0x0F, 0xF0, 0xFF, 0x00, 0x7F, 0x9F, 0xE0, 0x03,
|
||||
0xFD, 0xFC, 0x00, 0x3F, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFF,
|
||||
0x00, 0x00, 0x7F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00,
|
||||
0x07, 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x01, 0xFF,
|
||||
0xF8, 0x00, 0x3F, 0xFF, 0xC0, 0x07, 0xF9, 0xFE, 0x00, 0xFF, 0x0F, 0xF0,
|
||||
0x0F, 0xF0, 0xFF, 0x01, 0xFE, 0x07, 0xF8, 0x3F, 0xC0, 0x3F, 0xC7, 0xF8,
|
||||
0x03, 0xFE, 0x7F, 0x80, 0x1F, 0xE0, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x00,
|
||||
0x7F, 0x7F, 0x00, 0x0F, 0xE7, 0xF8, 0x00, 0xFE, 0x3F, 0x80, 0x1F, 0xC3,
|
||||
0xFC, 0x01, 0xFC, 0x1F, 0xC0, 0x1F, 0xC1, 0xFC, 0x03, 0xF8, 0x1F, 0xE0,
|
||||
0x3F, 0x80, 0xFE, 0x07, 0xF0, 0x0F, 0xF0, 0x7F, 0x00, 0x7F, 0x07, 0xE0,
|
||||
0x07, 0xF0, 0xFE, 0x00, 0x3F, 0x8F, 0xE0, 0x03, 0xF9, 0xFC, 0x00, 0x3F,
|
||||
0xDF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFF, 0xF8,
|
||||
0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00,
|
||||
0x7F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC,
|
||||
0x00, 0x00, 0x3F, 0x80, 0x02, 0x07, 0xF8, 0x00, 0x7D, 0xFF, 0x00, 0x07,
|
||||
0xFF, 0xF0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0xF8,
|
||||
0x00, 0x03, 0xFE, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
|
||||
0x3F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xC0, 0x01, 0xFE,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0x7F, 0x80, 0x03, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xFC,
|
||||
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0x01, 0xFF, 0x03, 0xFF,
|
||||
0x07, 0xFF, 0x07, 0xFF, 0x0F, 0xFF, 0x0F, 0xF8, 0x0F, 0xF0, 0x0F, 0xE0,
|
||||
0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0,
|
||||
0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0xFF, 0xE0, 0xFF, 0xE0,
|
||||
0xFF, 0xC0, 0xFF, 0x80, 0xFF, 0xC0, 0xFF, 0xE0, 0x1F, 0xE0, 0x0F, 0xE0,
|
||||
0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0,
|
||||
0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF,
|
||||
0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x01, 0xFF, 0x00, 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, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF0, 0xFC, 0x01, 0xFE, 0x03, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F, 0xFC,
|
||||
0x07, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xC0, 0x3F, 0x80, 0x7F, 0x00,
|
||||
0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xC0, 0x3F,
|
||||
0xC0, 0x7F, 0xF0, 0x7F, 0xE0, 0x7F, 0xC0, 0xFF, 0x83, 0xFF, 0x0F, 0xFE,
|
||||
0x1F, 0xE0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x07,
|
||||
0xF0, 0x0F, 0xE0, 0x1F, 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x03, 0xFC,
|
||||
0x3F, 0xF8, 0x7F, 0xF0, 0xFF, 0xC1, 0xFF, 0x83, 0xFC, 0x07, 0xF0, 0x00,
|
||||
0x0F, 0xC0, 0x1F, 0x1F, 0xF0, 0x1F, 0x3F, 0xF8, 0x1F, 0x7F, 0xFE, 0x3E,
|
||||
0x7F, 0xFF, 0xFE, 0x7C, 0x7F, 0xFE, 0x78, 0x1F, 0xFC, 0xF8, 0x0F, 0xF8,
|
||||
0xF8, 0x03, 0xF0 };
|
||||
|
||||
const GFXglyph Montserrat_Bold24pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 13, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 9, 33, 14, 2, -32 }, // 0x21 '!'
|
||||
{ 39, 17, 13, 21, 2, -32 }, // 0x22 '"'
|
||||
{ 67, 32, 33, 34, 1, -32 }, // 0x23 '#'
|
||||
{ 199, 28, 45, 30, 1, -38 }, // 0x24 '$'
|
||||
{ 357, 39, 33, 41, 1, -32 }, // 0x25 '%'
|
||||
{ 518, 31, 34, 34, 2, -32 }, // 0x26 '&'
|
||||
{ 650, 7, 13, 11, 2, -32 }, // 0x27 '''
|
||||
{ 662, 13, 44, 17, 3, -34 }, // 0x28 '('
|
||||
{ 734, 13, 44, 17, 0, -34 }, // 0x29 ')'
|
||||
{ 806, 19, 19, 20, 1, -34 }, // 0x2A '*'
|
||||
{ 852, 22, 21, 28, 3, -26 }, // 0x2B '+'
|
||||
{ 910, 9, 16, 12, 2, -8 }, // 0x2C ','
|
||||
{ 928, 14, 6, 18, 2, -15 }, // 0x2D '-'
|
||||
{ 939, 9, 9, 12, 2, -8 }, // 0x2E '.'
|
||||
{ 950, 22, 45, 18, -2, -39 }, // 0x2F '/'
|
||||
{ 1074, 28, 34, 32, 2, -32 }, // 0x30 '0'
|
||||
{ 1193, 15, 33, 18, 0, -32 }, // 0x31 '1'
|
||||
{ 1255, 26, 33, 28, 0, -32 }, // 0x32 '2'
|
||||
{ 1363, 26, 34, 28, 0, -32 }, // 0x33 '3'
|
||||
{ 1474, 31, 33, 32, 1, -32 }, // 0x34 '4'
|
||||
{ 1602, 27, 34, 28, 0, -32 }, // 0x35 '5'
|
||||
{ 1717, 27, 34, 30, 2, -32 }, // 0x36 '6'
|
||||
{ 1832, 27, 33, 29, 1, -32 }, // 0x37 '7'
|
||||
{ 1944, 27, 34, 31, 2, -32 }, // 0x38 '8'
|
||||
{ 2059, 27, 34, 30, 1, -32 }, // 0x39 '9'
|
||||
{ 2174, 9, 26, 12, 2, -25 }, // 0x3A ':'
|
||||
{ 2204, 9, 33, 12, 2, -25 }, // 0x3B ';'
|
||||
{ 2242, 22, 23, 28, 3, -27 }, // 0x3C '<'
|
||||
{ 2306, 22, 17, 28, 3, -24 }, // 0x3D '='
|
||||
{ 2353, 22, 23, 28, 3, -27 }, // 0x3E '>'
|
||||
{ 2417, 25, 33, 28, 0, -32 }, // 0x3F '?'
|
||||
{ 2521, 45, 43, 49, 2, -32 }, // 0x40 '@'
|
||||
{ 2763, 36, 33, 36, 0, -32 }, // 0x41 'A'
|
||||
{ 2912, 30, 33, 36, 4, -32 }, // 0x42 'B'
|
||||
{ 3036, 31, 34, 34, 2, -32 }, // 0x43 'C'
|
||||
{ 3168, 33, 33, 39, 4, -32 }, // 0x44 'D'
|
||||
{ 3305, 25, 33, 32, 4, -32 }, // 0x45 'E'
|
||||
{ 3409, 25, 33, 30, 4, -32 }, // 0x46 'F'
|
||||
{ 3513, 32, 34, 36, 2, -32 }, // 0x47 'G'
|
||||
{ 3649, 30, 33, 38, 4, -32 }, // 0x48 'H'
|
||||
{ 3773, 8, 33, 15, 4, -32 }, // 0x49 'I'
|
||||
{ 3806, 23, 34, 25, -1, -32 }, // 0x4A 'J'
|
||||
{ 3904, 31, 33, 35, 4, -32 }, // 0x4B 'K'
|
||||
{ 4032, 24, 33, 28, 4, -32 }, // 0x4C 'L'
|
||||
{ 4131, 37, 33, 45, 4, -32 }, // 0x4D 'M'
|
||||
{ 4284, 30, 33, 38, 4, -32 }, // 0x4E 'N'
|
||||
{ 4408, 36, 34, 40, 2, -32 }, // 0x4F 'O'
|
||||
{ 4561, 28, 33, 34, 4, -32 }, // 0x50 'P'
|
||||
{ 4677, 37, 41, 40, 2, -32 }, // 0x51 'Q'
|
||||
{ 4867, 29, 33, 35, 4, -32 }, // 0x52 'R'
|
||||
{ 4987, 28, 34, 30, 1, -32 }, // 0x53 'S'
|
||||
{ 5106, 29, 33, 29, 0, -32 }, // 0x54 'T'
|
||||
{ 5226, 29, 34, 37, 4, -32 }, // 0x55 'U'
|
||||
{ 5350, 36, 33, 35, 0, -32 }, // 0x56 'V'
|
||||
{ 5499, 53, 33, 55, 1, -32 }, // 0x57 'W'
|
||||
{ 5718, 33, 33, 34, 0, -32 }, // 0x58 'X'
|
||||
{ 5855, 33, 33, 32, -1, -32 }, // 0x59 'Y'
|
||||
{ 5992, 29, 33, 32, 2, -32 }, // 0x5A 'Z'
|
||||
{ 6112, 13, 44, 17, 4, -34 }, // 0x5B '['
|
||||
{ 6184, 22, 45, 18, -2, -39 }, // 0x5C '\'
|
||||
{ 6308, 12, 44, 17, 1, -34 }, // 0x5D ']'
|
||||
{ 6374, 23, 19, 28, 3, -25 }, // 0x5E '^'
|
||||
{ 6429, 24, 4, 24, 0, 1 }, // 0x5F '_'
|
||||
{ 6441, 14, 6, 28, 4, -34 }, // 0x60 '`'
|
||||
{ 6452, 24, 26, 29, 2, -25 }, // 0x61 'a'
|
||||
{ 6530, 28, 35, 32, 3, -34 }, // 0x62 'b'
|
||||
{ 6653, 26, 26, 28, 1, -25 }, // 0x63 'c'
|
||||
{ 6738, 27, 35, 33, 2, -34 }, // 0x64 'd'
|
||||
{ 6857, 27, 26, 30, 1, -25 }, // 0x65 'e'
|
||||
{ 6945, 20, 35, 18, 0, -34 }, // 0x66 'f'
|
||||
{ 7033, 28, 36, 33, 1, -25 }, // 0x67 'g'
|
||||
{ 7159, 26, 35, 32, 3, -34 }, // 0x68 'h'
|
||||
{ 7273, 9, 37, 14, 3, -36 }, // 0x69 'i'
|
||||
{ 7315, 16, 47, 14, -4, -36 }, // 0x6A 'j'
|
||||
{ 7409, 28, 35, 31, 3, -34 }, // 0x6B 'k'
|
||||
{ 7532, 8, 35, 14, 3, -34 }, // 0x6C 'l'
|
||||
{ 7567, 43, 26, 49, 3, -25 }, // 0x6D 'm'
|
||||
{ 7707, 26, 26, 32, 3, -25 }, // 0x6E 'n'
|
||||
{ 7792, 28, 26, 31, 1, -25 }, // 0x6F 'o'
|
||||
{ 7883, 28, 35, 32, 3, -25 }, // 0x70 'p'
|
||||
{ 8006, 28, 35, 32, 1, -25 }, // 0x71 'q'
|
||||
{ 8129, 16, 26, 20, 3, -25 }, // 0x72 'r'
|
||||
{ 8181, 23, 26, 25, 1, -25 }, // 0x73 's'
|
||||
{ 8256, 20, 31, 20, 0, -30 }, // 0x74 't'
|
||||
{ 8334, 26, 25, 32, 3, -24 }, // 0x75 'u'
|
||||
{ 8416, 28, 25, 28, 0, -24 }, // 0x76 'v'
|
||||
{ 8504, 44, 25, 44, 0, -24 }, // 0x77 'w'
|
||||
{ 8642, 28, 25, 28, 0, -24 }, // 0x78 'x'
|
||||
{ 8730, 28, 35, 28, 0, -24 }, // 0x79 'y'
|
||||
{ 8853, 22, 25, 26, 2, -24 }, // 0x7A 'z'
|
||||
{ 8922, 16, 44, 18, 2, -34 }, // 0x7B '{'
|
||||
{ 9010, 7, 44, 15, 4, -34 }, // 0x7C '|'
|
||||
{ 9049, 15, 44, 18, 1, -34 }, // 0x7D '}'
|
||||
{ 9132, 24, 9, 28, 2, -20 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Bold24pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Bold24pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Bold24pt7bGlyphs,
|
||||
0x20, 0x7E, 57 };
|
||||
|
||||
// Approx. 9831 bytes
|
||||
|
||||
#endif // MONTSERRATBOLD24PT7B_H
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,182 +0,0 @@
|
||||
#ifndef MONTSERRATBOLD7PT7B_H
|
||||
#define MONTSERRATBOLD7PT7B_H
|
||||
const uint8_t Montserrat_Bold7pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFC, 0xF0, 0xDC, 0xA5, 0x20, 0x19, 0x04, 0x47, 0xFD, 0xFF,
|
||||
0x13, 0x0C, 0xCF, 0xFB, 0xFE, 0x32, 0x08, 0x80, 0x08, 0x1F, 0x1F, 0xCD,
|
||||
0x06, 0x83, 0xE0, 0xFC, 0x16, 0x0B, 0xBF, 0x9F, 0x81, 0x00, 0x80, 0x70,
|
||||
0xC5, 0x88, 0xC9, 0x8C, 0xB0, 0x7A, 0x00, 0x6E, 0x0D, 0xB0, 0x93, 0x19,
|
||||
0xB3, 0x0E, 0x1C, 0x0F, 0x83, 0x30, 0xD8, 0x1C, 0x1F, 0x36, 0x79, 0x8E,
|
||||
0x7F, 0xCF, 0xA0, 0xEA, 0x66, 0xEC, 0xCC, 0xCC, 0xCE, 0x66, 0x30, 0x66,
|
||||
0x73, 0x33, 0x33, 0x37, 0x66, 0xC0, 0x33, 0xF7, 0xBF, 0x30, 0x30, 0x63,
|
||||
0xFF, 0xF3, 0x06, 0x00, 0x4D, 0xB4, 0xFF, 0x5D, 0x80, 0x0C, 0x31, 0x86,
|
||||
0x18, 0xC3, 0x0C, 0x61, 0x86, 0x30, 0xC0, 0x3C, 0x7E, 0xE6, 0xC7, 0xC3,
|
||||
0xC3, 0xC3, 0xC7, 0xFE, 0x7C, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x3C, 0xFE,
|
||||
0x47, 0x07, 0x06, 0x0C, 0x18, 0x30, 0x7F, 0xFF, 0xFE, 0xFE, 0x0E, 0x1C,
|
||||
0x1C, 0x1E, 0x07, 0x07, 0xFE, 0x7C, 0x06, 0x03, 0x01, 0xC0, 0x60, 0x33,
|
||||
0x1C, 0xCF, 0xFF, 0xFF, 0x03, 0x00, 0xC0, 0x7E, 0x7E, 0x60, 0x60, 0x7E,
|
||||
0x7F, 0x03, 0x03, 0xFF, 0x7E, 0x3E, 0x7E, 0xE0, 0xC0, 0xFC, 0xFE, 0xC7,
|
||||
0xC7, 0xFE, 0x7C, 0xFF, 0xFF, 0xC7, 0xC6, 0x06, 0x0E, 0x0C, 0x1C, 0x18,
|
||||
0x38, 0x3E, 0x3F, 0x98, 0xCC, 0x63, 0xF3, 0xF9, 0x8E, 0xC7, 0x7F, 0x1F,
|
||||
0x00, 0x3C, 0x7E, 0xE3, 0xE3, 0x67, 0x7F, 0x03, 0x07, 0x7E, 0x7C, 0x5D,
|
||||
0x80, 0xBB, 0x5D, 0x80, 0x9B, 0x68, 0x0E, 0x7B, 0xC7, 0x07, 0xC1, 0xC0,
|
||||
0x80, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0xC1, 0xF0, 0x78, 0xF7, 0x9C, 0x00,
|
||||
0x00, 0x3C, 0xFE, 0x46, 0x06, 0x0E, 0x1C, 0x18, 0x00, 0x18, 0x18, 0x0F,
|
||||
0x81, 0xC7, 0x18, 0x0D, 0x9D, 0xA9, 0xFD, 0xCC, 0x6E, 0x43, 0x33, 0x1B,
|
||||
0x9F, 0xD6, 0x7B, 0x98, 0x00, 0x73, 0x00, 0xF8, 0x00, 0x0E, 0x01, 0xC0,
|
||||
0x7C, 0x0D, 0x83, 0x30, 0x63, 0x1F, 0xE3, 0xFE, 0x60, 0xD8, 0x1C, 0xFE,
|
||||
0x7F, 0xB0, 0xF8, 0x7F, 0xF7, 0xFB, 0x07, 0x83, 0xFF, 0xFF, 0x80, 0x1E,
|
||||
0x3F, 0xF8, 0x58, 0x0C, 0x06, 0x03, 0x01, 0xC2, 0x7F, 0x9F, 0x80, 0xFE,
|
||||
0x3F, 0xCC, 0x3B, 0x07, 0xC0, 0xF0, 0x3C, 0x1F, 0x06, 0xFF, 0xBF, 0x80,
|
||||
0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0xC0, 0xC0, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0x1E, 0x3F, 0xF8, 0x58,
|
||||
0x0C, 0x06, 0x0F, 0x07, 0xC3, 0x7F, 0x9F, 0x80, 0xC1, 0xE0, 0xF0, 0x78,
|
||||
0x3F, 0xFF, 0xFF, 0x07, 0x83, 0xC1, 0xE0, 0xC0, 0xFF, 0xFF, 0xF0, 0x7E,
|
||||
0xFC, 0x38, 0x70, 0xE1, 0xC3, 0x86, 0xFC, 0xF0, 0xC3, 0xB0, 0xCC, 0x63,
|
||||
0x30, 0xD8, 0x3F, 0x0E, 0xE3, 0x1C, 0xC3, 0x30, 0xE0, 0xC1, 0x83, 0x06,
|
||||
0x0C, 0x18, 0x30, 0x60, 0xFF, 0xFC, 0xC0, 0x7C, 0x0F, 0x83, 0xF8, 0xFF,
|
||||
0x9F, 0xB6, 0xF3, 0xDE, 0x73, 0xC4, 0x78, 0x0C, 0xC1, 0xF0, 0xFC, 0x7F,
|
||||
0x3D, 0xDE, 0x6F, 0x3F, 0x8F, 0xC3, 0xE0, 0xC0, 0x1E, 0x1F, 0xEE, 0x1F,
|
||||
0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x87, 0x7F, 0x8F, 0xC0, 0xFC, 0x7F, 0xB0,
|
||||
0xD8, 0x7C, 0x3F, 0xFB, 0xF9, 0x80, 0xC0, 0x60, 0x00, 0x1E, 0x0F, 0xF3,
|
||||
0x87, 0x60, 0x6C, 0x0D, 0x81, 0xB0, 0x37, 0x0E, 0x7F, 0x87, 0xE0, 0x3D,
|
||||
0x01, 0xE0, 0xFC, 0x7F, 0xB0, 0xD8, 0x7C, 0x3F, 0xFB, 0xF9, 0x8C, 0xC7,
|
||||
0x61, 0x80, 0x3E, 0x3F, 0x98, 0x0C, 0x07, 0xC1, 0xF8, 0x0C, 0x07, 0x7F,
|
||||
0x3F, 0x00, 0xFF, 0xFF, 0xC6, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18,
|
||||
0x0C, 0x00, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0xC7, 0x7F,
|
||||
0x1F, 0x00, 0xC0, 0xDC, 0x19, 0x87, 0x38, 0xC3, 0x38, 0x76, 0x06, 0xC0,
|
||||
0xF0, 0x1E, 0x01, 0xC0, 0xE1, 0x83, 0x61, 0xC7, 0x63, 0xC6, 0x73, 0xC6,
|
||||
0x33, 0x6E, 0x36, 0x6C, 0x3E, 0x6C, 0x1E, 0x3C, 0x1C, 0x38, 0x1C, 0x38,
|
||||
0xE1, 0xDC, 0xE3, 0x30, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0xCC, 0x73, 0xB8,
|
||||
0x70, 0xC1, 0x98, 0x67, 0x30, 0xDC, 0x3E, 0x07, 0x00, 0xC0, 0x30, 0x0C,
|
||||
0x03, 0x00, 0xFF, 0xFF, 0x06, 0x0C, 0x1C, 0x38, 0x70, 0xE0, 0xFF, 0xFF,
|
||||
0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCF, 0xF0, 0xC0, 0xC1, 0x81, 0x03, 0x06,
|
||||
0x06, 0x0C, 0x18, 0x18, 0x30, 0x60, 0x60, 0xF3, 0x33, 0x33, 0x33, 0x33,
|
||||
0x3F, 0xF0, 0x30, 0x71, 0xE3, 0x6C, 0xD8, 0x80, 0xFE, 0xE3, 0x10, 0x31,
|
||||
0xFA, 0x38, 0x7F, 0xF9, 0xF3, 0xFB, 0xC0, 0xC0, 0xDC, 0xFE, 0xE7, 0xC3,
|
||||
0xC3, 0xE3, 0xFF, 0xFE, 0x1C, 0x3F, 0x63, 0x60, 0xE0, 0x62, 0x7F, 0x3E,
|
||||
0x03, 0x81, 0xC6, 0xEF, 0xF6, 0x3B, 0x1F, 0x86, 0xC7, 0x7F, 0x9E, 0xC0,
|
||||
0x1C, 0x3E, 0x63, 0x63, 0xFF, 0x60, 0x7E, 0x3E, 0x00, 0xF7, 0x18, 0xF9,
|
||||
0x86, 0x18, 0x61, 0x86, 0x00, 0x19, 0xBF, 0xD8, 0xFC, 0x3E, 0x1B, 0x1D,
|
||||
0xFE, 0x33, 0x03, 0xBF, 0x8F, 0x80, 0xC0, 0xC0, 0xCC, 0xFE, 0xE7, 0xC7,
|
||||
0xC3, 0xC3, 0xC3, 0xC3, 0xDC, 0x6D, 0xB6, 0xDB, 0x00, 0x31, 0xC0, 0x63,
|
||||
0x18, 0xC6, 0x31, 0x8C, 0x6F, 0x70, 0xC0, 0xC0, 0xC7, 0xCE, 0xDC, 0xF8,
|
||||
0xFC, 0xEC, 0xCE, 0xC7, 0xFF, 0xFF, 0xF0, 0xD8, 0x67, 0xFF, 0xB9, 0xCF,
|
||||
0x8E, 0x3C, 0x61, 0xE3, 0x0F, 0x18, 0x78, 0xC3, 0xCC, 0xFE, 0xE7, 0xC7,
|
||||
0xC3, 0xC3, 0xC3, 0xC3, 0x1C, 0x1F, 0x98, 0xCC, 0x7E, 0x1B, 0x1D, 0xFC,
|
||||
0x7C, 0xDC, 0xFE, 0xE7, 0xC3, 0xC3, 0xE3, 0xFF, 0xDE, 0xC0, 0xC0, 0xC0,
|
||||
0x19, 0xBF, 0xD8, 0xEC, 0x7E, 0x1B, 0x1D, 0xFE, 0x7F, 0x03, 0x81, 0xC0,
|
||||
0xE0, 0xCF, 0xF9, 0x8C, 0x63, 0x18, 0x18, 0xFF, 0x83, 0x87, 0xE0, 0xDF,
|
||||
0xBE, 0x63, 0xEF, 0x98, 0x61, 0x86, 0x1E, 0x3C, 0xC7, 0xC7, 0xC7, 0xC7,
|
||||
0xC7, 0xC7, 0xFF, 0x7B, 0xC3, 0xE3, 0x63, 0x66, 0x36, 0x3C, 0x3C, 0x1C,
|
||||
0xC3, 0x1E, 0x38, 0xD9, 0xCC, 0xCF, 0x66, 0xDB, 0x1E, 0xF0, 0xE3, 0x83,
|
||||
0x1C, 0xE3, 0x66, 0x3E, 0x3C, 0x1C, 0x3C, 0x76, 0xE7, 0xC3, 0xE3, 0x63,
|
||||
0x66, 0x36, 0x3C, 0x3C, 0x18, 0x18, 0xF8, 0xE0, 0x7E, 0xFC, 0x30, 0xE3,
|
||||
0x8E, 0x1F, 0xFF, 0x76, 0x66, 0x6E, 0xE6, 0x66, 0x67, 0x30, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0xE3, 0x9C, 0xE7, 0x1C, 0xEE, 0x73, 0x9D, 0xCC, 0x00, 0xF7,
|
||||
0x38 };
|
||||
|
||||
const GFXglyph Montserrat_Bold7pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 4, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 2, 10, 4, 1, -9 }, // 0x21 '!'
|
||||
{ 4, 5, 4, 6, 1, -9 }, // 0x22 '"'
|
||||
{ 7, 10, 10, 10, 0, -9 }, // 0x23 '#'
|
||||
{ 20, 9, 13, 9, 0, -10 }, // 0x24 '$'
|
||||
{ 35, 12, 10, 12, 0, -9 }, // 0x25 '%'
|
||||
{ 50, 10, 10, 10, 0, -9 }, // 0x26 '&'
|
||||
{ 63, 2, 4, 3, 1, -9 }, // 0x27 '''
|
||||
{ 64, 4, 13, 5, 1, -9 }, // 0x28 '('
|
||||
{ 71, 4, 13, 5, 0, -9 }, // 0x29 ')'
|
||||
{ 78, 6, 5, 6, 0, -9 }, // 0x2A '*'
|
||||
{ 82, 7, 6, 8, 1, -7 }, // 0x2B '+'
|
||||
{ 88, 3, 5, 4, 0, -2 }, // 0x2C ','
|
||||
{ 90, 4, 2, 5, 1, -4 }, // 0x2D '-'
|
||||
{ 91, 3, 3, 4, 0, -2 }, // 0x2E '.'
|
||||
{ 93, 6, 13, 5, 0, -11 }, // 0x2F '/'
|
||||
{ 103, 8, 10, 10, 1, -9 }, // 0x30 '0'
|
||||
{ 113, 4, 10, 5, 0, -9 }, // 0x31 '1'
|
||||
{ 118, 8, 10, 8, 0, -9 }, // 0x32 '2'
|
||||
{ 128, 8, 10, 8, 0, -9 }, // 0x33 '3'
|
||||
{ 138, 10, 10, 10, 0, -9 }, // 0x34 '4'
|
||||
{ 151, 8, 10, 8, 0, -9 }, // 0x35 '5'
|
||||
{ 161, 8, 10, 9, 1, -9 }, // 0x36 '6'
|
||||
{ 171, 8, 10, 9, 0, -9 }, // 0x37 '7'
|
||||
{ 181, 9, 10, 9, 0, -9 }, // 0x38 '8'
|
||||
{ 193, 8, 10, 9, 0, -9 }, // 0x39 '9'
|
||||
{ 203, 3, 8, 4, 0, -7 }, // 0x3A ':'
|
||||
{ 206, 3, 10, 4, 0, -7 }, // 0x3B ';'
|
||||
{ 210, 7, 7, 8, 1, -7 }, // 0x3C '<'
|
||||
{ 217, 7, 5, 8, 1, -6 }, // 0x3D '='
|
||||
{ 222, 7, 7, 8, 1, -7 }, // 0x3E '>'
|
||||
{ 229, 8, 10, 8, 0, -9 }, // 0x3F '?'
|
||||
{ 239, 13, 13, 14, 1, -9 }, // 0x40 '@'
|
||||
{ 261, 11, 10, 11, 0, -9 }, // 0x41 'A'
|
||||
{ 275, 9, 10, 11, 1, -9 }, // 0x42 'B'
|
||||
{ 287, 9, 10, 10, 1, -9 }, // 0x43 'C'
|
||||
{ 299, 10, 10, 12, 1, -9 }, // 0x44 'D'
|
||||
{ 312, 8, 10, 9, 1, -9 }, // 0x45 'E'
|
||||
{ 322, 8, 10, 9, 1, -9 }, // 0x46 'F'
|
||||
{ 332, 9, 10, 11, 1, -9 }, // 0x47 'G'
|
||||
{ 344, 9, 10, 11, 1, -9 }, // 0x48 'H'
|
||||
{ 356, 2, 10, 5, 1, -9 }, // 0x49 'I'
|
||||
{ 359, 7, 10, 8, 0, -9 }, // 0x4A 'J'
|
||||
{ 368, 10, 10, 10, 1, -9 }, // 0x4B 'K'
|
||||
{ 381, 7, 10, 8, 1, -9 }, // 0x4C 'L'
|
||||
{ 390, 11, 10, 13, 1, -9 }, // 0x4D 'M'
|
||||
{ 404, 9, 10, 11, 1, -9 }, // 0x4E 'N'
|
||||
{ 416, 10, 10, 12, 1, -9 }, // 0x4F 'O'
|
||||
{ 429, 9, 10, 10, 1, -9 }, // 0x50 'P'
|
||||
{ 441, 11, 12, 12, 1, -9 }, // 0x51 'Q'
|
||||
{ 458, 9, 10, 10, 1, -9 }, // 0x52 'R'
|
||||
{ 470, 9, 10, 9, 0, -9 }, // 0x53 'S'
|
||||
{ 482, 9, 10, 9, 0, -9 }, // 0x54 'T'
|
||||
{ 494, 9, 10, 11, 1, -9 }, // 0x55 'U'
|
||||
{ 506, 11, 10, 10, 0, -9 }, // 0x56 'V'
|
||||
{ 520, 16, 10, 16, 0, -9 }, // 0x57 'W'
|
||||
{ 540, 10, 10, 10, 0, -9 }, // 0x58 'X'
|
||||
{ 553, 10, 10, 9, 0, -9 }, // 0x59 'Y'
|
||||
{ 566, 8, 10, 9, 1, -9 }, // 0x5A 'Z'
|
||||
{ 576, 4, 13, 5, 1, -9 }, // 0x5B '['
|
||||
{ 583, 7, 13, 5, -1, -11 }, // 0x5C '\'
|
||||
{ 595, 4, 13, 5, 0, -9 }, // 0x5D ']'
|
||||
{ 602, 7, 6, 8, 1, -7 }, // 0x5E '^'
|
||||
{ 608, 7, 1, 7, 0, 1 }, // 0x5F '_'
|
||||
{ 609, 4, 3, 8, 1, -10 }, // 0x60 '`'
|
||||
{ 611, 7, 8, 9, 1, -7 }, // 0x61 'a'
|
||||
{ 618, 8, 10, 10, 1, -9 }, // 0x62 'b'
|
||||
{ 628, 8, 8, 8, 0, -7 }, // 0x63 'c'
|
||||
{ 636, 9, 10, 10, 0, -9 }, // 0x64 'd'
|
||||
{ 648, 8, 8, 9, 0, -7 }, // 0x65 'e'
|
||||
{ 656, 6, 11, 5, 0, -10 }, // 0x66 'f'
|
||||
{ 665, 9, 11, 10, 0, -7 }, // 0x67 'g'
|
||||
{ 678, 8, 10, 10, 1, -9 }, // 0x68 'h'
|
||||
{ 688, 3, 11, 4, 1, -10 }, // 0x69 'i'
|
||||
{ 693, 5, 14, 4, -1, -10 }, // 0x6A 'j'
|
||||
{ 702, 8, 10, 9, 1, -9 }, // 0x6B 'k'
|
||||
{ 712, 2, 10, 4, 1, -9 }, // 0x6C 'l'
|
||||
{ 715, 13, 8, 15, 1, -7 }, // 0x6D 'm'
|
||||
{ 728, 8, 8, 10, 1, -7 }, // 0x6E 'n'
|
||||
{ 736, 9, 8, 9, 0, -7 }, // 0x6F 'o'
|
||||
{ 745, 8, 11, 10, 1, -7 }, // 0x70 'p'
|
||||
{ 756, 9, 11, 10, 0, -7 }, // 0x71 'q'
|
||||
{ 769, 5, 8, 6, 1, -7 }, // 0x72 'r'
|
||||
{ 774, 7, 8, 7, 0, -7 }, // 0x73 's'
|
||||
{ 781, 6, 9, 6, 0, -8 }, // 0x74 't'
|
||||
{ 788, 8, 8, 10, 1, -7 }, // 0x75 'u'
|
||||
{ 796, 8, 8, 8, 0, -7 }, // 0x76 'v'
|
||||
{ 804, 13, 8, 13, 0, -7 }, // 0x77 'w'
|
||||
{ 817, 8, 8, 8, 0, -7 }, // 0x78 'x'
|
||||
{ 825, 8, 11, 8, 0, -7 }, // 0x79 'y'
|
||||
{ 836, 7, 8, 8, 0, -7 }, // 0x7A 'z'
|
||||
{ 843, 4, 13, 5, 1, -9 }, // 0x7B '{'
|
||||
{ 850, 2, 13, 4, 1, -9 }, // 0x7C '|'
|
||||
{ 854, 5, 13, 5, 0, -9 }, // 0x7D '}'
|
||||
{ 863, 7, 2, 8, 1, -5 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont Montserrat_Bold7pt7b PROGMEM = {
|
||||
(uint8_t *)Montserrat_Bold7pt7bBitmaps,
|
||||
(GFXglyph *)Montserrat_Bold7pt7bGlyphs,
|
||||
0x20, 0x7E, 17 };
|
||||
|
||||
// Approx. 1537 bytes
|
||||
|
||||
#endif // MONTSERRATBOLD7PT7B_H
|
||||
@@ -1,899 +0,0 @@
|
||||
// MontserratBold9pt8b.h
|
||||
//
|
||||
// Adafruit GFX font header — Latin Extended-A coverage (U+0020 to U+017F).
|
||||
// Source: Montserrat Bold at 9pt.
|
||||
// 352 glyphs covering ASCII, Latin-1 Supplement, and Latin Extended-A.
|
||||
// Supports Czech, Polish, German, French, Spanish, Italian, Croatian,
|
||||
// Hungarian, Slovak, Romanian, and other European languages.
|
||||
//
|
||||
// Codepoints 0x7F-0x9F (C0/C1 control codes) are present as empty glyphs.
|
||||
// They are never rendered in normal use because UTF-8 decoding does not
|
||||
// produce them as standalone codepoints.
|
||||
//
|
||||
// To render glyphs above 0x7F, use a drawCodepoint(font, x, y, cp) helper
|
||||
// that walks the glyph table directly. Adafruit GFX's print() / write() /
|
||||
// drawChar() are byte-oriented (uint8_t) and cannot address indices > 255.
|
||||
|
||||
#ifndef MONTSERRATBOLD9PT8B_H
|
||||
#define MONTSERRATBOLD9PT8B_H
|
||||
|
||||
const uint8_t MontserratBold9pt8bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0xCF, 0x3C, 0xF3, 0xCF, 0x30, 0x0C,
|
||||
0x60, 0x66, 0x03, 0x30, 0xFF, 0xF7, 0xFF, 0x8C, 0x60, 0x63, 0x03, 0x18,
|
||||
0xFF, 0xF7, 0xFF, 0x86, 0x60, 0x33, 0x03, 0x18, 0x00, 0x06, 0x00, 0xC0,
|
||||
0x3E, 0x1F, 0xE7, 0xFC, 0xEC, 0x1D, 0x83, 0xF0, 0x3F, 0x81, 0xF8, 0x1F,
|
||||
0x83, 0x76, 0x6E, 0xFF, 0x8F, 0xE0, 0x30, 0x06, 0x00, 0x38, 0x18, 0xF8,
|
||||
0x71, 0x98, 0xC6, 0x33, 0x04, 0x6C, 0x0D, 0x98, 0x0F, 0x67, 0x01, 0x9F,
|
||||
0x03, 0x66, 0x0C, 0xCC, 0x31, 0x98, 0x63, 0xB1, 0x83, 0xC0, 0x1E, 0x03,
|
||||
0xF0, 0x73, 0x87, 0x38, 0x77, 0x03, 0xE0, 0x3C, 0x0F, 0xE6, 0xE7, 0xEC,
|
||||
0x3E, 0xE1, 0xEF, 0xFF, 0x7F, 0x60, 0xFF, 0xF0, 0x39, 0x9C, 0xE6, 0x73,
|
||||
0x9C, 0xE7, 0x38, 0xC7, 0x38, 0xC7, 0x63, 0x9C, 0x73, 0x9C, 0xE7, 0x39,
|
||||
0xCE, 0x73, 0x99, 0xCC, 0x18, 0x5E, 0x7E, 0x3C, 0xFE, 0x5A, 0x18, 0x1C,
|
||||
0x0E, 0x07, 0x1F, 0xFF, 0xF8, 0xE0, 0x70, 0x38, 0xFF, 0xFD, 0x80, 0xFF,
|
||||
0xC0, 0xFF, 0x80, 0x03, 0x81, 0x81, 0xC0, 0xE0, 0x60, 0x70, 0x38, 0x18,
|
||||
0x1C, 0x0C, 0x06, 0x07, 0x03, 0x01, 0x81, 0xC0, 0xC0, 0x60, 0x00, 0x1E,
|
||||
0x07, 0xF1, 0xFE, 0x70, 0xEE, 0x1D, 0xC3, 0xB8, 0x37, 0x06, 0xE1, 0xDC,
|
||||
0x39, 0xCF, 0x3F, 0xC3, 0xF0, 0xFF, 0xFF, 0xC7, 0x1C, 0x71, 0xC7, 0x1C,
|
||||
0x71, 0xC7, 0x1C, 0x1E, 0x1F, 0xEF, 0xF8, 0x07, 0x01, 0xC0, 0xE0, 0x78,
|
||||
0x3C, 0x1E, 0x0F, 0x07, 0x81, 0xFF, 0x7F, 0xC0, 0x7F, 0x9F, 0xE7, 0xF8,
|
||||
0x1C, 0x0E, 0x03, 0x81, 0xF8, 0x7F, 0x01, 0xC0, 0x76, 0x3F, 0xFE, 0x7F,
|
||||
0x00, 0x07, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0xC0, 0x70, 0x1C, 0xE7, 0x1C,
|
||||
0xFF, 0xFF, 0xFC, 0x0E, 0x01, 0xC0, 0x38, 0x3F, 0x8F, 0xE3, 0xF9, 0xC0,
|
||||
0x70, 0x1F, 0xC7, 0xF8, 0x1F, 0x01, 0xC0, 0x76, 0x3F, 0xFE, 0x7F, 0x00,
|
||||
0x0F, 0x0F, 0xE7, 0xFB, 0xC0, 0xE0, 0x3B, 0xCF, 0xFB, 0xCF, 0xE1, 0xF8,
|
||||
0x7F, 0x1D, 0xFE, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x70, 0xEE, 0x3C,
|
||||
0x07, 0x00, 0xE0, 0x38, 0x07, 0x01, 0xC0, 0x38, 0x0F, 0x01, 0xC0, 0x1E,
|
||||
0x1F, 0xEF, 0x3F, 0x87, 0xE1, 0xDF, 0xE7, 0xFB, 0xCF, 0xE1, 0xF8, 0x7E,
|
||||
0x1F, 0xFE, 0x3F, 0x00, 0x1E, 0x07, 0xF1, 0xCF, 0x70, 0xEE, 0x1E, 0xE3,
|
||||
0xDF, 0xF9, 0xF7, 0x00, 0xE0, 0x38, 0x0F, 0x3F, 0xC7, 0xF0, 0xFF, 0x80,
|
||||
0x3F, 0xE0, 0xFF, 0x80, 0x3F, 0xFF, 0x60, 0x00, 0x83, 0xC7, 0xFF, 0x8E,
|
||||
0x07, 0xC0, 0xFC, 0x1F, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x07,
|
||||
0xFF, 0xFE, 0x80, 0x70, 0x3F, 0x03, 0xF0, 0x38, 0x7D, 0xF9, 0xE0, 0xC0,
|
||||
0x00, 0x1E, 0x1F, 0xEF, 0xF8, 0x07, 0x01, 0xC0, 0xE0, 0x70, 0x38, 0x0E,
|
||||
0x00, 0x00, 0xE0, 0x38, 0x0E, 0x00, 0x03, 0xE0, 0x0F, 0xFC, 0x0E, 0x07,
|
||||
0x8E, 0x00, 0xC6, 0x3F, 0xB6, 0x3F, 0xCF, 0x38, 0xE7, 0x98, 0x73, 0xCC,
|
||||
0x39, 0xE6, 0x1C, 0xF3, 0x8E, 0x79, 0xFF, 0xE6, 0x3D, 0xE3, 0x80, 0x00,
|
||||
0xF0, 0x40, 0x1F, 0xE0, 0x03, 0xC0, 0x00, 0x07, 0x00, 0x1E, 0x00, 0x78,
|
||||
0x03, 0xF0, 0x0D, 0xC0, 0x73, 0x81, 0xCE, 0x0E, 0x1C, 0x3F, 0xF1, 0xFF,
|
||||
0xC7, 0x03, 0x98, 0x0E, 0xE0, 0x1C, 0xFF, 0x0F, 0xFC, 0xFF, 0xEE, 0x0E,
|
||||
0xE0, 0xEE, 0x1E, 0xFF, 0xCF, 0xFE, 0xE0, 0x7E, 0x07, 0xE0, 0xFF, 0xFE,
|
||||
0xFF, 0xC0, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06, 0xE0, 0x0E, 0x00, 0xE0,
|
||||
0x0E, 0x00, 0xE0, 0x0F, 0x00, 0x78, 0xE3, 0xFE, 0x1F, 0xC0, 0xFF, 0x07,
|
||||
0xFE, 0x3F, 0xFD, 0xC0, 0xEE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0,
|
||||
0x3F, 0x03, 0xF8, 0x7D, 0xFF, 0xCF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x80, 0xE0, 0x3F, 0xEF, 0xFB, 0xFE, 0xE0, 0x38, 0x0E, 0x03, 0xFF, 0xFF,
|
||||
0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x38, 0x0F, 0xFB, 0xFE, 0xE0,
|
||||
0x38, 0x0E, 0x03, 0x80, 0xE0, 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06,
|
||||
0xE0, 0x0E, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, 0x07, 0x78, 0xF3, 0xFF,
|
||||
0x1F, 0xC0, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x70, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFE, 0x7F, 0x7F, 0x7F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||
0x07, 0xC7, 0xFF, 0x7E, 0xE0, 0x77, 0x07, 0x38, 0x71, 0xC7, 0x0E, 0x70,
|
||||
0x77, 0x03, 0xF8, 0x1F, 0xE0, 0xFF, 0x87, 0x9E, 0x38, 0x79, 0xC1, 0xCE,
|
||||
0x07, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80,
|
||||
0xE0, 0x38, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0xE0, 0x0F, 0xE0, 0x1F, 0xC0,
|
||||
0x7F, 0xC1, 0xFF, 0x83, 0xFF, 0x8F, 0xFB, 0x9B, 0xF7, 0x77, 0xE7, 0xCF,
|
||||
0xC7, 0x9F, 0x8E, 0x3F, 0x08, 0x7E, 0x00, 0xE0, 0xE0, 0x7F, 0x07, 0xF8,
|
||||
0x7F, 0x87, 0xFC, 0x7F, 0xE7, 0xEF, 0x7E, 0x7F, 0xE3, 0xFE, 0x1F, 0xE0,
|
||||
0xFE, 0x0F, 0xE0, 0x70, 0x0F, 0x81, 0xFF, 0x1F, 0xFC, 0xE0, 0xFE, 0x03,
|
||||
0xF0, 0x1F, 0x80, 0x7C, 0x07, 0xE0, 0x3F, 0x81, 0xDE, 0x3C, 0x7F, 0xC1,
|
||||
0xFC, 0x00, 0xFE, 0x1F, 0xFB, 0xFF, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F,
|
||||
0xFF, 0xFF, 0xDF, 0xC3, 0x80, 0x70, 0x0E, 0x00, 0x0F, 0x80, 0xFF, 0x87,
|
||||
0xFF, 0x1C, 0x1E, 0xE0, 0x3B, 0x80, 0xEE, 0x01, 0xB8, 0x0E, 0xE0, 0x3B,
|
||||
0xC0, 0xE7, 0x8F, 0x0F, 0xF8, 0x1F, 0xC0, 0x0F, 0x20, 0x1F, 0xC0, 0x1E,
|
||||
0xFE, 0x0F, 0xFC, 0xFF, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEF, 0xFE,
|
||||
0xFF, 0xCE, 0x38, 0xE1, 0xCE, 0x1E, 0xE0, 0xE0, 0x0F, 0x87, 0xF9, 0xFF,
|
||||
0x38, 0x07, 0x00, 0xF8, 0x0F, 0xE0, 0x7E, 0x01, 0xE0, 0x1D, 0x83, 0xBF,
|
||||
0xE3, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0xE0, 0x1C, 0x03, 0x80,
|
||||
0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0xE0, 0x7E, 0x07, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x77, 0x0F, 0x79,
|
||||
0xE3, 0xFE, 0x1F, 0x80, 0xE0, 0x1F, 0x80, 0xE7, 0x03, 0x9C, 0x1C, 0x38,
|
||||
0x70, 0xE1, 0x83, 0xCE, 0x07, 0x38, 0x1D, 0xC0, 0x3F, 0x00, 0xF8, 0x01,
|
||||
0xE0, 0x07, 0x00, 0xE0, 0x70, 0x3B, 0x83, 0x83, 0x9C, 0x1E, 0x1C, 0xE1,
|
||||
0xF0, 0xE3, 0x8D, 0x8E, 0x1C, 0x6E, 0x70, 0xE7, 0x73, 0x83, 0xB3, 0xB8,
|
||||
0x1D, 0x8F, 0xC0, 0xFC, 0x7E, 0x03, 0xC3, 0xE0, 0x1E, 0x0F, 0x00, 0xF0,
|
||||
0x78, 0x00, 0xF0, 0x73, 0x83, 0x8E, 0x38, 0x7B, 0x81, 0xFC, 0x07, 0xC0,
|
||||
0x1C, 0x01, 0xF0, 0x1F, 0xC0, 0xEE, 0x0E, 0x38, 0xE1, 0xEF, 0x07, 0x00,
|
||||
0xE0, 0x3F, 0x07, 0x70, 0xE3, 0x8E, 0x39, 0xC1, 0xD8, 0x1F, 0x80, 0xF0,
|
||||
0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0xFF, 0xDF, 0xFB, 0xFF,
|
||||
0x01, 0xC0, 0x78, 0x1E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0xC0, 0x7F,
|
||||
0xFF, 0xFE, 0xFF, 0xF9, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0xFF,
|
||||
0xE0, 0x30, 0x1C, 0x06, 0x03, 0x01, 0xC0, 0x60, 0x30, 0x1C, 0x06, 0x03,
|
||||
0x01, 0xC0, 0x60, 0x38, 0x1C, 0x06, 0x03, 0x80, 0xFF, 0xCE, 0x73, 0x9C,
|
||||
0xE7, 0x39, 0xCE, 0x73, 0x9F, 0xFF, 0x1C, 0x0E, 0x0D, 0x86, 0xC6, 0x73,
|
||||
0x1B, 0x8C, 0xFF, 0xFF, 0xC0, 0xE3, 0x8E, 0x3C, 0x7F, 0x99, 0xE0, 0x73,
|
||||
0xFF, 0xFF, 0x8F, 0x87, 0xFF, 0xBF, 0xC0, 0xE0, 0x1C, 0x03, 0x80, 0x77,
|
||||
0x8F, 0xF9, 0xF7, 0xBC, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0xC7, 0x7F, 0xEE,
|
||||
0xF8, 0x1E, 0x3F, 0xFF, 0xFC, 0x2C, 0x06, 0x03, 0x81, 0xE7, 0x7F, 0x9F,
|
||||
0x80, 0x01, 0xC0, 0x70, 0x1C, 0x77, 0x7F, 0xFF, 0xFE, 0x1F, 0x87, 0xC1,
|
||||
0xF8, 0x7F, 0x3D, 0xFF, 0x3F, 0xC0, 0x1E, 0x1F, 0xCF, 0x3B, 0x87, 0xFF,
|
||||
0xFF, 0xFE, 0x03, 0xC4, 0x7F, 0x8F, 0xC0, 0x00, 0x1E, 0x3E, 0x30, 0x30,
|
||||
0xFE, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1C, 0xDF, 0xFF,
|
||||
0xFF, 0x87, 0xC1, 0xF8, 0x7E, 0x1F, 0xFF, 0x7F, 0xC2, 0x74, 0x1D, 0xFF,
|
||||
0xFF, 0x87, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0xBC, 0xFF, 0xBF, 0xFF, 0x1F,
|
||||
0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xC0, 0xFF, 0x8F, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0x1C, 0x71, 0xC0, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C,
|
||||
0x71, 0xDF, 0x79, 0xC0, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0xEE, 0x39, 0xCE,
|
||||
0x3B, 0x87, 0xF0, 0xFE, 0x1E, 0xE3, 0x9E, 0x71, 0xEE, 0x1E, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFE, 0xEF, 0x1C, 0x7F, 0xFF, 0xBF, 0xFF, 0xDC, 0x38, 0x7E,
|
||||
0x1C, 0x3F, 0x0E, 0x1F, 0x87, 0x0F, 0xC3, 0x87, 0xE1, 0xC3, 0xF0, 0xE1,
|
||||
0xC0, 0xEF, 0x3F, 0xEF, 0xFF, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1,
|
||||
0xF8, 0x70, 0x1E, 0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0, 0x7E, 0x1F, 0xCF,
|
||||
0x7F, 0x8F, 0xC0, 0xEF, 0x1F, 0xF3, 0xEF, 0x78, 0x7E, 0x0F, 0xC1, 0xF8,
|
||||
0x3F, 0x8E, 0xFF, 0xDD, 0xF3, 0x80, 0x70, 0x0E, 0x00, 0x1D, 0xDF, 0xFF,
|
||||
0xFF, 0x87, 0xC1, 0xF0, 0x7E, 0x1F, 0xCF, 0x7F, 0xCF, 0xF0, 0x1C, 0x07,
|
||||
0x01, 0xC0, 0xEF, 0xFF, 0xFC, 0xE3, 0x8E, 0x38, 0xE3, 0x80, 0x1F, 0x3F,
|
||||
0xDC, 0x4C, 0x07, 0xE1, 0xFC, 0x0E, 0x87, 0x7F, 0xBF, 0x80, 0x30, 0x30,
|
||||
0xFE, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x3E, 0x1F, 0xE1, 0xF8,
|
||||
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0xCF, 0xF0, 0xE0,
|
||||
0xFC, 0x19, 0xC7, 0x38, 0xE3, 0x38, 0x77, 0x0E, 0xC0, 0xF8, 0x1E, 0x01,
|
||||
0xC0, 0xE1, 0xC3, 0xF0, 0xE1, 0x98, 0x70, 0xCE, 0x7C, 0xE3, 0x36, 0x61,
|
||||
0xBB, 0xB0, 0xFD, 0xF8, 0x3C, 0x78, 0x1E, 0x3C, 0x0E, 0x1E, 0x00, 0xE1,
|
||||
0xCE, 0x38, 0xEE, 0x0F, 0x81, 0xE0, 0x1C, 0x07, 0xC1, 0xDC, 0x73, 0xDC,
|
||||
0x38, 0xE0, 0xFC, 0x19, 0xC7, 0x38, 0xE3, 0x38, 0x77, 0x06, 0xC0, 0xF8,
|
||||
0x1E, 0x01, 0xC0, 0x38, 0x7E, 0x0F, 0x80, 0xE0, 0x00, 0xFF, 0xFF, 0x07,
|
||||
0x0E, 0x1C, 0x38, 0x70, 0xE0, 0xFF, 0xFF, 0x3C, 0xF7, 0x1C, 0x71, 0xC7,
|
||||
0x3C, 0xF1, 0xC7, 0x1C, 0x71, 0xC7, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF3, 0xE3, 0x8E, 0x38, 0xE3, 0x8F, 0x3C, 0xE3, 0x8E, 0x38, 0xEF,
|
||||
0xBC, 0x71, 0xFF, 0xF3, 0xC0, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70,
|
||||
0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E,
|
||||
0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x3F, 0xF8, 0x00, 0x7F, 0x81, 0xFF,
|
||||
0xFF, 0xFE, 0x0C, 0x06, 0x07, 0x8F, 0xFF, 0xFF, 0x6B, 0x31, 0x98, 0xEC,
|
||||
0x7F, 0xDF, 0xE7, 0xE0, 0xC0, 0x60, 0x07, 0xC3, 0xFC, 0xFF, 0x1C, 0x07,
|
||||
0x00, 0xE0, 0x3F, 0xE7, 0xFC, 0x70, 0x0E, 0x01, 0xC0, 0x7F, 0xEF, 0xFC,
|
||||
0x00, 0x26, 0x07, 0x7F, 0xF3, 0xFE, 0x38, 0xE3, 0x06, 0x30, 0x63, 0x0E,
|
||||
0x39, 0xC7, 0xFE, 0xFF, 0x76, 0x02, 0xE0, 0x1B, 0xC0, 0xE7, 0x07, 0x0E,
|
||||
0x38, 0x1C, 0xE0, 0x77, 0x00, 0xF8, 0x0F, 0xF8, 0x3F, 0xE0, 0x1C, 0x03,
|
||||
0xFE, 0x01, 0xC0, 0x07, 0x00, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x1E,
|
||||
0x1F, 0xDC, 0x4C, 0x07, 0x83, 0xF9, 0x9E, 0xC7, 0x73, 0xBF, 0x87, 0xC0,
|
||||
0x74, 0x33, 0xF8, 0xF8, 0x03, 0xB6, 0xC0, 0x07, 0x03, 0xFC, 0x60, 0x64,
|
||||
0xF3, 0x9F, 0x99, 0x81, 0xB8, 0x19, 0x81, 0x9F, 0x9C, 0xFB, 0x40, 0x23,
|
||||
0x0C, 0x1F, 0x80, 0x00, 0xF8, 0x33, 0xF4, 0x6F, 0xC0, 0x33, 0x33, 0x3B,
|
||||
0x99, 0x86, 0x63, 0xB8, 0xEE, 0xFF, 0xFF, 0xC0, 0xE0, 0x70, 0x38, 0xFF,
|
||||
0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70,
|
||||
0x3F, 0xF8, 0x07, 0x03, 0xFC, 0x60, 0x65, 0xF3, 0x9F, 0x99, 0x89, 0x99,
|
||||
0x99, 0xF9, 0x99, 0x9D, 0x9B, 0x40, 0x23, 0x0C, 0x1F, 0x80, 0xFF, 0xFC,
|
||||
0x73, 0xE8, 0xE3, 0xCF, 0xE0, 0x1C, 0x0E, 0x07, 0x1F, 0xFF, 0xF8, 0xE0,
|
||||
0x70, 0x38, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x38, 0xF9, 0x18, 0x71, 0xC7,
|
||||
0x1F, 0xBF, 0x7E, 0x18, 0x60, 0xF0, 0x6D, 0xDF, 0x00, 0x3B, 0xB8, 0xE1,
|
||||
0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0xFF, 0xFF, 0xBE,
|
||||
0x03, 0x80, 0xE0, 0x00, 0x3F, 0xEF, 0xFF, 0xF1, 0xFE, 0x37, 0xC6, 0xF8,
|
||||
0xC3, 0x18, 0x63, 0x0C, 0x61, 0x8C, 0x31, 0x86, 0x30, 0xC6, 0x18, 0xC3,
|
||||
0x18, 0x7F, 0xB0, 0x67, 0x1F, 0xF0, 0xC3, 0x0C, 0x33, 0xFF, 0xC0, 0x00,
|
||||
0xF9, 0x9E, 0x36, 0x6F, 0x80, 0x77, 0x0C, 0xC3, 0xB8, 0x66, 0x3B, 0x9D,
|
||||
0xC6, 0x60, 0x00, 0x0C, 0x78, 0x0C, 0x0C, 0x0E, 0x06, 0x06, 0x03, 0x06,
|
||||
0x01, 0x87, 0x03, 0xF3, 0x19, 0xFB, 0x18, 0x03, 0x9C, 0x01, 0x8D, 0x81,
|
||||
0x8F, 0xE1, 0x80, 0x60, 0xC0, 0x30, 0x00, 0x0C, 0x78, 0x0C, 0x0C, 0x0E,
|
||||
0x06, 0x06, 0x03, 0x06, 0x01, 0x87, 0x73, 0xF3, 0x7D, 0xFB, 0x23, 0x03,
|
||||
0x83, 0x81, 0x83, 0x81, 0x83, 0x81, 0x83, 0xF0, 0xC1, 0xF8, 0x00, 0x06,
|
||||
0x1F, 0x83, 0x00, 0xC1, 0xC0, 0x60, 0x60, 0x1E, 0x30, 0x01, 0x9C, 0x06,
|
||||
0xE6, 0x31, 0xF3, 0x18, 0x01, 0xCE, 0x00, 0x63, 0x60, 0x31, 0xFC, 0x18,
|
||||
0x06, 0x06, 0x01, 0x80, 0x18, 0x07, 0x01, 0xC0, 0x00, 0x00, 0x07, 0x03,
|
||||
0x81, 0xC0, 0xE0, 0x38, 0x4F, 0x3D, 0xFE, 0x3E, 0x00, 0x0E, 0x00, 0x1C,
|
||||
0x00, 0x38, 0x00, 0x00, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x03, 0xF0, 0x0D,
|
||||
0xC0, 0x73, 0x81, 0xCE, 0x0E, 0x1C, 0x3F, 0xF1, 0xFF, 0xC7, 0x03, 0x98,
|
||||
0x0E, 0xE0, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x00, 0x00, 0x07, 0x00,
|
||||
0x1E, 0x00, 0x78, 0x03, 0xF0, 0x0D, 0xC0, 0x73, 0x81, 0xCE, 0x0E, 0x1C,
|
||||
0x3F, 0xF1, 0xFF, 0xC7, 0x03, 0x98, 0x0E, 0xE0, 0x1C, 0x03, 0x80, 0x1F,
|
||||
0x00, 0xCE, 0x00, 0x00, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x03, 0xF0, 0x0D,
|
||||
0xC0, 0x73, 0x81, 0xCE, 0x0E, 0x1C, 0x3F, 0xF1, 0xFF, 0xC7, 0x03, 0x98,
|
||||
0x0E, 0xE0, 0x1C, 0x0F, 0x60, 0x37, 0x80, 0x00, 0x01, 0xC0, 0x07, 0x80,
|
||||
0x1E, 0x00, 0xFC, 0x03, 0x70, 0x1C, 0xE0, 0x73, 0x83, 0x87, 0x0F, 0xFC,
|
||||
0x7F, 0xF1, 0xC0, 0xE6, 0x03, 0xB8, 0x07, 0x00, 0x00, 0x3B, 0x00, 0x6C,
|
||||
0x00, 0x00, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x03, 0xF0, 0x0D, 0xC0, 0x73,
|
||||
0x81, 0xCE, 0x0E, 0x1C, 0x3F, 0xF1, 0xFF, 0xC7, 0x03, 0x98, 0x0E, 0xE0,
|
||||
0x1C, 0x03, 0x80, 0x1B, 0x00, 0x4C, 0x00, 0xE0, 0x00, 0x00, 0x1C, 0x00,
|
||||
0x78, 0x01, 0xE0, 0x0F, 0xC0, 0x37, 0x01, 0xCE, 0x07, 0x38, 0x38, 0x70,
|
||||
0xFF, 0xC7, 0xFF, 0x1C, 0x0E, 0x60, 0x3B, 0x80, 0x70, 0x01, 0xFF, 0xC0,
|
||||
0x7F, 0xF8, 0x0F, 0xFF, 0x03, 0xB8, 0x00, 0x67, 0x00, 0x1C, 0xFF, 0x83,
|
||||
0x1F, 0xF0, 0xE3, 0xFE, 0x3F, 0xF0, 0x07, 0xFE, 0x01, 0xC1, 0xC0, 0x38,
|
||||
0x3F, 0xFE, 0x07, 0xFE, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06, 0xE0, 0x0E,
|
||||
0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0F, 0x00, 0x78, 0xE3, 0xFE, 0x1F, 0xC0,
|
||||
0x60, 0x07, 0x00, 0x10, 0x0F, 0x00, 0x38, 0x07, 0x00, 0xE0, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x3F, 0xEF, 0xFB, 0xFE, 0xE0, 0x38, 0x0E,
|
||||
0x03, 0xFF, 0xFF, 0xC0, 0x03, 0x81, 0xC0, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x80, 0xE0, 0x3F, 0xEF, 0xFB, 0xFE, 0xE0, 0x38, 0x0E, 0x03, 0xFF,
|
||||
0xFF, 0xC0, 0x0E, 0x07, 0xC3, 0x38, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
|
||||
0xE0, 0x3F, 0xEF, 0xFB, 0xFE, 0xE0, 0x38, 0x0E, 0x03, 0xFF, 0xFF, 0xC0,
|
||||
0x00, 0x0E, 0xC1, 0xB0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x3F,
|
||||
0xEF, 0xFB, 0xFE, 0xE0, 0x38, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0xE3, 0x8E,
|
||||
0x07, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x70, 0x1C, 0xE7, 0x00,
|
||||
0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE0, 0x38, 0xFB,
|
||||
0x38, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38,
|
||||
0x70, 0x03, 0xB6, 0xC0, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7,
|
||||
0x1C, 0x70, 0xFF, 0x07, 0xFE, 0x3F, 0xFD, 0xC0, 0xEE, 0x03, 0xF0, 0x1F,
|
||||
0xF8, 0xFF, 0xC7, 0xE0, 0x3F, 0x03, 0xF8, 0x7D, 0xFF, 0xCF, 0xF8, 0x00,
|
||||
0x1E, 0xC1, 0xBC, 0x00, 0x0E, 0x07, 0xF0, 0x7F, 0x87, 0xF8, 0x7F, 0xC7,
|
||||
0xFE, 0x7E, 0xF7, 0xE7, 0xFE, 0x3F, 0xE1, 0xFE, 0x0F, 0xE0, 0xFE, 0x07,
|
||||
0x1C, 0x00, 0x70, 0x01, 0xC0, 0x00, 0x00, 0xF8, 0x1F, 0xF1, 0xFF, 0xCE,
|
||||
0x0F, 0xE0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x7E, 0x03, 0xF8, 0x1D, 0xE3,
|
||||
0xC7, 0xFC, 0x1F, 0xC0, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x00, 0x00, 0xF8,
|
||||
0x1F, 0xF1, 0xFF, 0xCE, 0x0F, 0xE0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x7E,
|
||||
0x03, 0xF8, 0x1D, 0xE3, 0xC7, 0xFC, 0x1F, 0xC0, 0x07, 0x00, 0x7C, 0x06,
|
||||
0x70, 0x00, 0x00, 0xF8, 0x1F, 0xF1, 0xFF, 0xCE, 0x0F, 0xE0, 0x3F, 0x01,
|
||||
0xF8, 0x07, 0xC0, 0x7E, 0x03, 0xF8, 0x1D, 0xE3, 0xC7, 0xFC, 0x1F, 0xC0,
|
||||
0x1E, 0xC0, 0xDE, 0x00, 0x00, 0x1F, 0x03, 0xFE, 0x3F, 0xF9, 0xC1, 0xFC,
|
||||
0x07, 0xE0, 0x3F, 0x00, 0xF8, 0x0F, 0xC0, 0x7F, 0x03, 0xBC, 0x78, 0xFF,
|
||||
0x83, 0xF8, 0x00, 0x00, 0xEC, 0x03, 0x60, 0x00, 0x00, 0xF8, 0x1F, 0xF1,
|
||||
0xFF, 0xCE, 0x0F, 0xE0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x7E, 0x03, 0xF8,
|
||||
0x1D, 0xE3, 0xC7, 0xFC, 0x1F, 0xC0, 0x45, 0xDD, 0xF1, 0xC7, 0xDD, 0xF1,
|
||||
0x80, 0x00, 0x60, 0x7F, 0x0F, 0xF8, 0xFF, 0xE7, 0x1F, 0xF1, 0x9F, 0x8C,
|
||||
0xFC, 0xC3, 0xE6, 0x3F, 0x61, 0xFF, 0x0E, 0xF1, 0xE3, 0xFE, 0x1F, 0xE0,
|
||||
0x80, 0x00, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xE0, 0x7E, 0x07, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x77, 0x0F, 0x79,
|
||||
0xE3, 0xFE, 0x1F, 0x80, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x00, 0xE0, 0x7E,
|
||||
0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x77,
|
||||
0x0F, 0x79, 0xE3, 0xFE, 0x1F, 0x80, 0x07, 0x00, 0xF8, 0x19, 0xC0, 0x00,
|
||||
0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07,
|
||||
0xE0, 0x77, 0x0F, 0x79, 0xE3, 0xFE, 0x1F, 0x80, 0x00, 0x01, 0xD8, 0x0D,
|
||||
0x80, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x77, 0x0F, 0x79, 0xE3, 0xFE, 0x1F, 0x80, 0x01, 0xC0,
|
||||
0x38, 0x07, 0x00, 0x00, 0xE0, 0x3F, 0x07, 0x70, 0xE3, 0x8E, 0x39, 0xC1,
|
||||
0xD8, 0x1F, 0x80, 0xF0, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00,
|
||||
0xE0, 0x1C, 0x03, 0xFE, 0x7F, 0xEE, 0x1F, 0xC1, 0xF8, 0x3F, 0x07, 0xE3,
|
||||
0xFF, 0xFB, 0xFE, 0x70, 0x0E, 0x00, 0x00, 0x07, 0xE1, 0xFE, 0x38, 0xEE,
|
||||
0x1D, 0xC3, 0xB9, 0xE7, 0x3E, 0xE7, 0xDC, 0x1F, 0x83, 0xF0, 0xFE, 0xFD,
|
||||
0xDF, 0x00, 0x70, 0x1C, 0x07, 0x00, 0x03, 0xC7, 0xF9, 0x9E, 0x07, 0x3F,
|
||||
0xFF, 0xF8, 0xF8, 0x7F, 0xFB, 0xFC, 0x07, 0x07, 0x07, 0x00, 0x03, 0xC7,
|
||||
0xF9, 0x9E, 0x07, 0x3F, 0xFF, 0xF8, 0xF8, 0x7F, 0xFB, 0xFC, 0x1C, 0x1F,
|
||||
0x19, 0xC0, 0x03, 0xC7, 0xF9, 0x9E, 0x07, 0x3F, 0xFF, 0xF8, 0xF8, 0x7F,
|
||||
0xFB, 0xFC, 0x30, 0x3D, 0x93, 0x80, 0x03, 0xC7, 0xF9, 0x9E, 0x07, 0x3F,
|
||||
0xFF, 0xF8, 0xF8, 0x7F, 0xFB, 0xFC, 0x00, 0x3B, 0x0D, 0x80, 0x03, 0xC7,
|
||||
0xF9, 0x9E, 0x07, 0x3F, 0xFF, 0xF8, 0xF8, 0x7F, 0xFB, 0xFC, 0x1C, 0x1B,
|
||||
0x09, 0x83, 0x80, 0x01, 0xE3, 0xFC, 0xCF, 0x03, 0x9F, 0xFF, 0xFC, 0x7C,
|
||||
0x3F, 0xFD, 0xFE, 0x3C, 0x78, 0xFF, 0xFE, 0x67, 0xCF, 0x03, 0x87, 0x3F,
|
||||
0xFF, 0xFF, 0xFF, 0xE3, 0x80, 0xC3, 0xC6, 0xFF, 0xFF, 0x7C, 0x7C, 0x1E,
|
||||
0x3F, 0xFF, 0xFC, 0x2C, 0x06, 0x03, 0x81, 0xE7, 0x7F, 0x9F, 0x86, 0x03,
|
||||
0x80, 0x41, 0xE0, 0x70, 0x0E, 0x01, 0xC0, 0x00, 0x1E, 0x1F, 0xCF, 0x3B,
|
||||
0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4, 0x7F, 0x8F, 0xC0, 0x07, 0x03, 0x81,
|
||||
0xC0, 0x00, 0x1E, 0x1F, 0xCF, 0x3B, 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4,
|
||||
0x7F, 0x8F, 0xC0, 0x1C, 0x0F, 0x86, 0x70, 0x00, 0x1E, 0x1F, 0xCF, 0x3B,
|
||||
0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4, 0x7F, 0x8F, 0xC0, 0x00, 0x1D, 0x83,
|
||||
0x60, 0x00, 0x1E, 0x1F, 0xCF, 0x3B, 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4,
|
||||
0x7F, 0x8F, 0xC0, 0xE3, 0x8E, 0x03, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C,
|
||||
0x3B, 0xB8, 0x0E, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x70, 0x38, 0xF1, 0xB0,
|
||||
0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x00, 0xDE, 0xC0,
|
||||
0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x00, 0x3D, 0x83, 0xC1, 0xF0, 0xCE,
|
||||
0x01, 0x8F, 0xF7, 0xFD, 0xC7, 0xE1, 0xF8, 0x77, 0x1D, 0xFE, 0x3F, 0x00,
|
||||
0x18, 0x0F, 0x62, 0x70, 0x00, 0xEF, 0x3F, 0xEF, 0xFF, 0xC7, 0xE1, 0xF8,
|
||||
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70, 0x70, 0x0E, 0x01, 0xC0, 0x00, 0x1E,
|
||||
0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0, 0x7E, 0x1F, 0xCF, 0x7F, 0x8F, 0xC0,
|
||||
0x07, 0x03, 0x81, 0xC0, 0x00, 0x1E, 0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0,
|
||||
0x7E, 0x1F, 0xCF, 0x7F, 0x8F, 0xC0, 0x1C, 0x0F, 0x86, 0x70, 0x00, 0x1E,
|
||||
0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0, 0x7E, 0x1F, 0xCF, 0x7F, 0x8F, 0xC0,
|
||||
0x30, 0x1E, 0xC4, 0xE0, 0x00, 0x1E, 0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0,
|
||||
0x7E, 0x1F, 0xCF, 0x7F, 0x8F, 0xC0, 0x00, 0x1D, 0x83, 0x60, 0x00, 0x1E,
|
||||
0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0, 0x7E, 0x1F, 0xCF, 0x7F, 0x8F, 0xC0,
|
||||
0x08, 0x0E, 0x07, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x1C, 0x0E, 0x06,
|
||||
0x00, 0x01, 0x07, 0xC7, 0xFB, 0xFE, 0xE5, 0xF3, 0x7C, 0x9F, 0xE7, 0xF3,
|
||||
0xDF, 0xE3, 0xF1, 0x80, 0x38, 0x07, 0x00, 0xE0, 0x00, 0xE1, 0xF8, 0x7E,
|
||||
0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0xCF, 0xF0, 0x03, 0x81,
|
||||
0xC0, 0xE0, 0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F,
|
||||
0xCF, 0x7F, 0xCF, 0xF0, 0x0E, 0x07, 0xC3, 0x38, 0x00, 0xE1, 0xF8, 0x7E,
|
||||
0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0xCF, 0xF0, 0x00, 0x0E,
|
||||
0xC1, 0xB0, 0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F,
|
||||
0xCF, 0x7F, 0xCF, 0xF0, 0x03, 0x80, 0xE0, 0x38, 0x00, 0x0E, 0x0F, 0xC1,
|
||||
0x9C, 0x73, 0x8E, 0x33, 0x87, 0x70, 0x6C, 0x0F, 0x81, 0xE0, 0x1C, 0x03,
|
||||
0x87, 0xE0, 0xF8, 0x0E, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x77, 0x8F, 0xF9,
|
||||
0xF7, 0xBC, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0xC7, 0x7F, 0xEE, 0xF9, 0xC0,
|
||||
0x38, 0x07, 0x00, 0x00, 0x07, 0x60, 0x6C, 0x00, 0x0E, 0x0F, 0xC1, 0x9C,
|
||||
0x73, 0x8E, 0x33, 0x87, 0x70, 0x6C, 0x0F, 0x81, 0xE0, 0x1C, 0x03, 0x87,
|
||||
0xE0, 0xF8, 0x0E, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x00, 0x01, 0xC0, 0x07,
|
||||
0x80, 0x1E, 0x00, 0xFC, 0x03, 0x70, 0x1C, 0xE0, 0x73, 0x83, 0x87, 0x0F,
|
||||
0xFC, 0x7F, 0xF1, 0xC0, 0xE6, 0x03, 0xB8, 0x07, 0x7F, 0x3F, 0x80, 0x07,
|
||||
0x8F, 0xF3, 0x3C, 0x0E, 0x7F, 0xFF, 0xF1, 0xF0, 0xFF, 0xF7, 0xF8, 0x0C,
|
||||
0x60, 0x33, 0x00, 0x7C, 0x00, 0x00, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x03,
|
||||
0xF0, 0x0D, 0xC0, 0x73, 0x81, 0xCE, 0x0E, 0x1C, 0x3F, 0xF1, 0xFF, 0xC7,
|
||||
0x03, 0x98, 0x0E, 0xE0, 0x1C, 0x63, 0x33, 0x0F, 0x80, 0x03, 0xC7, 0xF9,
|
||||
0x9E, 0x07, 0x3F, 0xFF, 0xF8, 0xF8, 0x7F, 0xFB, 0xFC, 0x07, 0x00, 0x1E,
|
||||
0x00, 0x78, 0x03, 0xF0, 0x0D, 0xC0, 0x73, 0x81, 0xCE, 0x0E, 0x1C, 0x3F,
|
||||
0xF1, 0xFF, 0xC7, 0x03, 0x98, 0x0E, 0xE0, 0x1C, 0x00, 0xE0, 0x03, 0x00,
|
||||
0x0C, 0x00, 0x3C, 0x3C, 0x7F, 0x99, 0xE0, 0x73, 0xFF, 0xFF, 0x8F, 0x87,
|
||||
0xFF, 0xBF, 0xC1, 0xC0, 0xC0, 0x60, 0x3C, 0x01, 0xC0, 0x38, 0x07, 0x00,
|
||||
0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06, 0xE0, 0x0E, 0x00, 0xE0, 0x0E,
|
||||
0x00, 0xE0, 0x0F, 0x00, 0x78, 0xE3, 0xFE, 0x1F, 0xC0, 0x07, 0x07, 0x07,
|
||||
0x00, 0x01, 0xE3, 0xFF, 0xFF, 0xC2, 0xC0, 0x60, 0x38, 0x1E, 0x77, 0xF9,
|
||||
0xF8, 0x07, 0x00, 0xF8, 0x19, 0xC0, 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7,
|
||||
0x06, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0F, 0x00, 0x78, 0xE3,
|
||||
0xFE, 0x1F, 0xC0, 0x1C, 0x1F, 0x19, 0xC0, 0x01, 0xE3, 0xFF, 0xFF, 0xC2,
|
||||
0xC0, 0x60, 0x38, 0x1E, 0x77, 0xF9, 0xF8, 0x07, 0x00, 0x70, 0x07, 0x00,
|
||||
0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06, 0xE0, 0x0E, 0x00, 0xE0, 0x0E,
|
||||
0x00, 0xE0, 0x0F, 0x00, 0x78, 0xE3, 0xFE, 0x1F, 0xC0, 0x1C, 0x0E, 0x07,
|
||||
0x00, 0x01, 0xE3, 0xFF, 0xFF, 0xC2, 0xC0, 0x60, 0x38, 0x1E, 0x77, 0xF9,
|
||||
0xF8, 0x18, 0xC0, 0xD8, 0x07, 0x00, 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7,
|
||||
0x06, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0F, 0x00, 0x78, 0xE3,
|
||||
0xFE, 0x1F, 0xC0, 0x63, 0x1B, 0x07, 0x00, 0x01, 0xE3, 0xFF, 0xFF, 0xC2,
|
||||
0xC0, 0x60, 0x38, 0x1E, 0x77, 0xF9, 0xF8, 0x31, 0x80, 0xD8, 0x03, 0x80,
|
||||
0x00, 0x0F, 0xF0, 0x7F, 0xE3, 0xFF, 0xDC, 0x0E, 0xE0, 0x3F, 0x01, 0xF8,
|
||||
0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x3F, 0x87, 0xDF, 0xFC, 0xFF, 0x80, 0x00,
|
||||
0x18, 0x07, 0x60, 0x1D, 0x80, 0x70, 0x1D, 0xC1, 0xFF, 0x0F, 0xFC, 0x38,
|
||||
0x70, 0xE1, 0xC3, 0x07, 0x0E, 0x1C, 0x3C, 0xF0, 0x7F, 0xC0, 0xFF, 0x00,
|
||||
0xFF, 0x07, 0xFE, 0x3F, 0xFD, 0xC0, 0xEE, 0x03, 0xF0, 0x1F, 0xF8, 0xFF,
|
||||
0xC7, 0xE0, 0x3F, 0x03, 0xF8, 0x7D, 0xFF, 0xCF, 0xF8, 0x00, 0x0F, 0xE1,
|
||||
0xFC, 0x07, 0x0E, 0xE7, 0xFD, 0xFF, 0xB8, 0x77, 0x0E, 0xC1, 0xDC, 0x3B,
|
||||
0xCF, 0x3F, 0xE3, 0xFC, 0x3F, 0x8F, 0xE0, 0x03, 0xFF, 0xFF, 0xFF, 0xFE,
|
||||
0x03, 0x80, 0xFF, 0xBF, 0xEF, 0xFB, 0x80, 0xE0, 0x38, 0x0F, 0xFF, 0xFF,
|
||||
0x7F, 0x1F, 0xC0, 0x00, 0x78, 0x7F, 0x3C, 0xEE, 0x1F, 0xFF, 0xFF, 0xF8,
|
||||
0x0F, 0x11, 0xFE, 0x3F, 0x00, 0x31, 0x8C, 0xC1, 0xF0, 0x00, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x80, 0xE0, 0x3F, 0xEF, 0xFB, 0xFE, 0xE0, 0x38, 0x0E, 0x03,
|
||||
0xFF, 0xFF, 0xC0, 0x63, 0x19, 0x83, 0xE0, 0x00, 0x1E, 0x1F, 0xCF, 0x3B,
|
||||
0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4, 0x7F, 0x8F, 0xC0, 0x0E, 0x03, 0x80,
|
||||
0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x3F, 0xEF, 0xFB, 0xFE,
|
||||
0xE0, 0x38, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0x1C, 0x07, 0x01, 0xC0, 0x00,
|
||||
0x1E, 0x1F, 0xCF, 0x3B, 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4, 0x7F, 0x8F,
|
||||
0xC0, 0xFF, 0xDF, 0xFB, 0xFF, 0x70, 0x0E, 0x01, 0xFF, 0x3F, 0xE7, 0xFC,
|
||||
0xE0, 0x1C, 0x03, 0x80, 0x7F, 0xEF, 0xFC, 0x03, 0x80, 0x60, 0x0C, 0x01,
|
||||
0xE0, 0x1E, 0x1F, 0xCF, 0x3B, 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4, 0x7F,
|
||||
0x8F, 0xC0, 0x60, 0x10, 0x06, 0x01, 0xE0, 0x31, 0x86, 0xC0, 0xE0, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x3F, 0xEF, 0xFB, 0xFE, 0xE0, 0x38,
|
||||
0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0x63, 0x0D, 0x81, 0xC0, 0x00, 0x1E, 0x1F,
|
||||
0xCF, 0x3B, 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC4, 0x7F, 0x8F, 0xC0, 0x07,
|
||||
0x00, 0xF8, 0x19, 0xC0, 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06, 0xE0,
|
||||
0x0E, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, 0x07, 0x78, 0xF3, 0xFF, 0x1F,
|
||||
0xC0, 0x0E, 0x07, 0xC3, 0x38, 0x00, 0x1C, 0xDF, 0xFF, 0xFF, 0x87, 0xC1,
|
||||
0xF8, 0x7E, 0x1F, 0xFF, 0x7F, 0xC2, 0x74, 0x1D, 0xFF, 0xFF, 0x87, 0x00,
|
||||
0x18, 0xC1, 0x98, 0x0F, 0x80, 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06,
|
||||
0xE0, 0x0E, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, 0x07, 0x78, 0xF3, 0xFF,
|
||||
0x1F, 0xC0, 0x31, 0x8C, 0xC1, 0xF0, 0x00, 0x1C, 0xDF, 0xFF, 0xFF, 0x87,
|
||||
0xC1, 0xF8, 0x7E, 0x1F, 0xFF, 0x7F, 0xC2, 0x74, 0x1D, 0xFF, 0xFF, 0x87,
|
||||
0x00, 0x07, 0x00, 0x70, 0x07, 0x00, 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7,
|
||||
0x06, 0xE0, 0x0E, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, 0x07, 0x78, 0xF3,
|
||||
0xFF, 0x1F, 0xC0, 0x0E, 0x03, 0x80, 0xE0, 0x00, 0x1C, 0xDF, 0xFF, 0xFF,
|
||||
0x87, 0xC1, 0xF8, 0x7E, 0x1F, 0xFF, 0x7F, 0xC2, 0x74, 0x1D, 0xFF, 0xFF,
|
||||
0x87, 0x00, 0x0F, 0x83, 0xFE, 0x7F, 0xF7, 0x06, 0xE0, 0x0E, 0x00, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7F, 0x07, 0x78, 0xF3, 0xFF, 0x1F, 0xC0, 0x00, 0x06,
|
||||
0x00, 0x70, 0x02, 0x00, 0x60, 0x06, 0x01, 0x00, 0xE0, 0x38, 0x00, 0x07,
|
||||
0x37, 0xFF, 0xFF, 0xE1, 0xF0, 0x7E, 0x1F, 0x87, 0xFF, 0xDF, 0xF0, 0x9D,
|
||||
0x07, 0x7F, 0xFF, 0xE1, 0xC0, 0x07, 0x00, 0xF8, 0x19, 0xC0, 0x00, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x70, 0x38, 0x07, 0xC0, 0xCE, 0x00,
|
||||
0x00, 0x38, 0x03, 0x80, 0x38, 0x03, 0xBC, 0x3F, 0xE3, 0xFF, 0x3C, 0x73,
|
||||
0x87, 0x38, 0x73, 0x87, 0x38, 0x73, 0x87, 0x38, 0x70, 0x38, 0x38, 0x70,
|
||||
0x73, 0xFF, 0xFF, 0xFF, 0xF3, 0x83, 0x87, 0x07, 0x0F, 0xFE, 0x1F, 0xFC,
|
||||
0x38, 0x38, 0x70, 0x70, 0xE0, 0xE1, 0xC1, 0xC3, 0x83, 0x80, 0x30, 0x1F,
|
||||
0xC0, 0xC0, 0x19, 0xC3, 0xFE, 0x7F, 0xCE, 0x39, 0x83, 0x30, 0x66, 0x0C,
|
||||
0xC1, 0x98, 0x33, 0x06, 0x75, 0xB8, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70,
|
||||
0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x21, 0xDD, 0xC0, 0x38, 0xE3, 0x8E,
|
||||
0x38, 0xE3, 0x8E, 0x38, 0xE0, 0xFF, 0xC1, 0xCE, 0x73, 0x9C, 0xE7, 0x39,
|
||||
0xCE, 0x73, 0x9C, 0xFF, 0xC0, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x00,
|
||||
0xC7, 0x99, 0xF0, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E,
|
||||
0x1C, 0x38, 0x70, 0x8E, 0xFC, 0x07, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x38,
|
||||
0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE6, 0x66, 0x70, 0xFF, 0x8F, 0xFF,
|
||||
0xFF, 0xFF, 0xF6, 0xDC, 0x77, 0x70, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
|
||||
0xE0, 0xFF, 0xFF, 0xFF, 0xFC, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F,
|
||||
0xC1, 0xF8, 0x38, 0x07, 0x00, 0xE0, 0x39, 0x8F, 0x7F, 0xC7, 0xF0, 0xE3,
|
||||
0xF1, 0xF8, 0xE0, 0x0E, 0x77, 0x3B, 0x9D, 0xCE, 0xE7, 0x73, 0xB9, 0xDC,
|
||||
0xEE, 0x77, 0x38, 0x1C, 0x3E, 0x1E, 0x0E, 0x00, 0x1C, 0x3E, 0x67, 0x00,
|
||||
0x7F, 0x7F, 0x7F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xC7, 0xFF,
|
||||
0x7E, 0x1C, 0x3C, 0x36, 0x00, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
|
||||
0x1C, 0x1C, 0x1C, 0x1C, 0x7C, 0x78, 0x70, 0xE0, 0x77, 0x07, 0x38, 0x71,
|
||||
0xC7, 0x0E, 0x70, 0x77, 0x03, 0xF8, 0x1F, 0xE0, 0xFF, 0x87, 0x9E, 0x38,
|
||||
0x79, 0xC1, 0xCE, 0x07, 0x00, 0x00, 0x30, 0x01, 0xC0, 0x04, 0x00, 0x60,
|
||||
0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0xEE, 0x39, 0xCE, 0x3B, 0x87, 0xF0,
|
||||
0xFE, 0x1E, 0xE3, 0x9E, 0x71, 0xEE, 0x1E, 0x00, 0x06, 0x00, 0xE0, 0x08,
|
||||
0x03, 0x00, 0xE1, 0xDC, 0x73, 0x9C, 0x77, 0x0F, 0xE1, 0xFC, 0x3D, 0xC7,
|
||||
0x3C, 0xE3, 0xDC, 0x3C, 0x1C, 0x0E, 0x07, 0x00, 0x00, 0xE0, 0x38, 0x0E,
|
||||
0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0xFF,
|
||||
0xFF, 0xC0, 0x3B, 0xB8, 0x0E, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C,
|
||||
0xE0, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0,
|
||||
0x38, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0xC0, 0x38, 0x04, 0x03, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x37, 0x58, 0xE3, 0x38, 0xCE, 0x33, 0x80,
|
||||
0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0xFF, 0xFF, 0xC0,
|
||||
0x0D, 0xDB, 0xB7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C,
|
||||
0x00, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE3, 0xB8, 0xEE, 0x3B, 0x80, 0xE0,
|
||||
0x38, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0xE1, 0xC3, 0x87, 0x0E, 0x1D, 0xBB,
|
||||
0xF6, 0xE1, 0xC3, 0x87, 0x0E, 0x00, 0x70, 0x0E, 0x01, 0xC0, 0x3B, 0x87,
|
||||
0xE0, 0xF8, 0x1C, 0x07, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x3F, 0xF7, 0xFE,
|
||||
0x38, 0x70, 0xE1, 0xC3, 0xC7, 0xCF, 0x3C, 0xF8, 0xF0, 0xE1, 0xC3, 0x80,
|
||||
0x01, 0xC0, 0x38, 0x07, 0x00, 0x00, 0xE0, 0x7F, 0x07, 0xF8, 0x7F, 0x87,
|
||||
0xFC, 0x7F, 0xE7, 0xEF, 0x7E, 0x7F, 0xE3, 0xFE, 0x1F, 0xE0, 0xFE, 0x0F,
|
||||
0xE0, 0x70, 0x03, 0x81, 0xC0, 0xE0, 0x00, 0xEF, 0x3F, 0xEF, 0xFF, 0xC7,
|
||||
0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70, 0xE0, 0x7F, 0x07, 0xF8,
|
||||
0x7F, 0x87, 0xFC, 0x7F, 0xE7, 0xEF, 0x7E, 0x7F, 0xE3, 0xFE, 0x1F, 0xE0,
|
||||
0xFE, 0x0F, 0xE0, 0x70, 0x00, 0x06, 0x00, 0x70, 0x02, 0x00, 0x60, 0xEF,
|
||||
0x3F, 0xEF, 0xFF, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70,
|
||||
0x00, 0x30, 0x0E, 0x01, 0x00, 0xC0, 0x18, 0xC0, 0xD8, 0x07, 0x00, 0x00,
|
||||
0xE0, 0x7F, 0x07, 0xF8, 0x7F, 0x87, 0xFC, 0x7F, 0xE7, 0xEF, 0x7E, 0x7F,
|
||||
0xE3, 0xFE, 0x1F, 0xE0, 0xFE, 0x0F, 0xE0, 0x70, 0x31, 0x86, 0xC0, 0xE0,
|
||||
0x00, 0xEF, 0x3F, 0xEF, 0xFF, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1,
|
||||
0xF8, 0x70, 0x00, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0D, 0xDE, 0x6F, 0xFB,
|
||||
0x7F, 0xE3, 0xC7, 0x1C, 0x38, 0xE1, 0xC7, 0x0E, 0x38, 0x71, 0xC3, 0x8E,
|
||||
0x1C, 0xE0, 0x7F, 0x07, 0xF8, 0x7F, 0x87, 0xFC, 0x7F, 0xE7, 0xEF, 0x7E,
|
||||
0x7F, 0xE3, 0xFE, 0x1F, 0xE0, 0xFE, 0x0F, 0xE0, 0x70, 0x07, 0x07, 0xF0,
|
||||
0xFE, 0x03, 0x80, 0xEF, 0x3F, 0xEF, 0xFF, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F,
|
||||
0x87, 0xE1, 0xF8, 0x70, 0x1C, 0x1F, 0x07, 0x81, 0xC0, 0x1F, 0xC0, 0xFE,
|
||||
0x00, 0x00, 0x1F, 0x03, 0xFE, 0x3F, 0xF9, 0xC1, 0xFC, 0x07, 0xE0, 0x3F,
|
||||
0x00, 0xF8, 0x0F, 0xC0, 0x7F, 0x03, 0xBC, 0x78, 0xFF, 0x83, 0xF8, 0x7F,
|
||||
0x1F, 0xC0, 0x00, 0x78, 0x7F, 0xBF, 0xEE, 0x1F, 0x07, 0xC1, 0xF8, 0x7F,
|
||||
0x3D, 0xFE, 0x3F, 0x00, 0x18, 0xC0, 0xCC, 0x03, 0xE0, 0x00, 0x00, 0xF8,
|
||||
0x1F, 0xF1, 0xFF, 0xCE, 0x0F, 0xE0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x7E,
|
||||
0x03, 0xF8, 0x1D, 0xE3, 0xC7, 0xFC, 0x1F, 0xC0, 0x63, 0x19, 0x83, 0xE0,
|
||||
0x00, 0x1E, 0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0, 0x7E, 0x1F, 0xCF, 0x7F,
|
||||
0x8F, 0xC0, 0x06, 0xE0, 0x76, 0x03, 0x70, 0x00, 0x00, 0xF8, 0x1F, 0xF1,
|
||||
0xFF, 0xCE, 0x0F, 0xE0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x7E, 0x03, 0xF8,
|
||||
0x1D, 0xE3, 0xC7, 0xFC, 0x1F, 0xC0, 0x1B, 0x8E, 0xC3, 0x70, 0x00, 0x1E,
|
||||
0x1F, 0xEF, 0xFB, 0x87, 0xC1, 0xF0, 0x7E, 0x1F, 0xCF, 0x7F, 0x8F, 0xC0,
|
||||
0x07, 0xFF, 0xC7, 0xFF, 0xF9, 0xFF, 0xFF, 0x38, 0x38, 0x0E, 0x07, 0x01,
|
||||
0xC0, 0xFF, 0xB8, 0x1F, 0xF7, 0x03, 0xFE, 0xE0, 0x70, 0x1E, 0x0E, 0x01,
|
||||
0xF1, 0xC0, 0x1F, 0xFF, 0xF0, 0xFF, 0xFE, 0x1E, 0x1C, 0x1F, 0xDF, 0xCF,
|
||||
0xFE, 0x3B, 0x87, 0x06, 0xC1, 0xFF, 0xF0, 0x7F, 0xFE, 0x1C, 0x03, 0xCF,
|
||||
0x84, 0x7F, 0xFF, 0x8F, 0x8F, 0xC0, 0x03, 0x80, 0x70, 0x0E, 0x00, 0x00,
|
||||
0xFE, 0x0F, 0xFC, 0xFF, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEF, 0xFE,
|
||||
0xFF, 0xCE, 0x38, 0xE1, 0xCE, 0x1E, 0xE0, 0xE0, 0x0E, 0x38, 0xE0, 0x0E,
|
||||
0xDF, 0xBF, 0x78, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x00, 0xFE, 0x0F, 0xFC,
|
||||
0xFF, 0xEE, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xEF, 0xFE, 0xFF, 0xCE, 0x38,
|
||||
0xE1, 0xCE, 0x1E, 0xE0, 0xE0, 0x00, 0x0C, 0x00, 0xE0, 0x04, 0x00, 0xC0,
|
||||
0xEF, 0xFF, 0xFC, 0xE3, 0x8E, 0x38, 0xE3, 0x80, 0x30, 0xE1, 0x0C, 0x00,
|
||||
0x31, 0x81, 0xB0, 0x0E, 0x00, 0x00, 0xFE, 0x0F, 0xFC, 0xFF, 0xEE, 0x0E,
|
||||
0xE0, 0xEE, 0x0E, 0xE0, 0xEF, 0xFE, 0xFF, 0xCE, 0x38, 0xE1, 0xCE, 0x1E,
|
||||
0xE0, 0xE0, 0xC6, 0xD8, 0xE0, 0x0E, 0xDF, 0xBF, 0x78, 0xE1, 0xC3, 0x87,
|
||||
0x0E, 0x1C, 0x00, 0x03, 0x80, 0xE0, 0x38, 0x00, 0x00, 0xF8, 0x7F, 0x9F,
|
||||
0xF3, 0x80, 0x70, 0x0F, 0x80, 0xFE, 0x07, 0xE0, 0x1E, 0x01, 0xD8, 0x3B,
|
||||
0xFE, 0x3F, 0x80, 0x07, 0x07, 0x07, 0x00, 0x01, 0xF3, 0xFD, 0xC4, 0xC0,
|
||||
0x7E, 0x1F, 0xC0, 0xE8, 0x77, 0xFB, 0xF8, 0x0E, 0x03, 0xE0, 0xCE, 0x00,
|
||||
0x00, 0xF8, 0x7F, 0x9F, 0xF3, 0x80, 0x70, 0x0F, 0x80, 0xFE, 0x07, 0xE0,
|
||||
0x1E, 0x01, 0xD8, 0x3B, 0xFE, 0x3F, 0x80, 0x1C, 0x1F, 0x19, 0xC0, 0x01,
|
||||
0xF3, 0xFD, 0xC4, 0xC0, 0x7E, 0x1F, 0xC0, 0xE8, 0x77, 0xFB, 0xF8, 0x0F,
|
||||
0x87, 0xF9, 0xFF, 0x38, 0x07, 0x00, 0xF8, 0x0F, 0xE0, 0x7E, 0x01, 0xE0,
|
||||
0x1D, 0x83, 0xBF, 0xE3, 0xF8, 0x18, 0x03, 0x80, 0x10, 0x1E, 0x00, 0x1F,
|
||||
0x3F, 0xDC, 0x4C, 0x07, 0xE1, 0xFC, 0x0E, 0x87, 0x7F, 0xBF, 0x86, 0x03,
|
||||
0x80, 0x41, 0xE0, 0x31, 0x83, 0x60, 0x38, 0x00, 0x00, 0xF8, 0x7F, 0x9F,
|
||||
0xF3, 0x80, 0x70, 0x0F, 0x80, 0xFE, 0x07, 0xE0, 0x1E, 0x01, 0xD8, 0x3B,
|
||||
0xFE, 0x3F, 0x80, 0x63, 0x1B, 0x07, 0x00, 0x01, 0xF3, 0xFD, 0xC4, 0xC0,
|
||||
0x7E, 0x1F, 0xC0, 0xE8, 0x77, 0xFB, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x87,
|
||||
0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00,
|
||||
0xE0, 0x18, 0x03, 0x80, 0x10, 0x1E, 0x00, 0x30, 0x30, 0xFE, 0xFE, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x38, 0x3E, 0x1F, 0x18, 0x1C, 0x04, 0x3C, 0x31,
|
||||
0x83, 0x60, 0x38, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x70, 0x0E, 0x01,
|
||||
0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x00, 0x06,
|
||||
0x06, 0x36, 0x30, 0xFE, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x3E,
|
||||
0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x00, 0xE0, 0x1C, 0x0F, 0xE1, 0xFC,
|
||||
0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x38, 0x38, 0x38, 0xFE, 0xFE,
|
||||
0x38, 0xFC, 0xFC, 0x38, 0x38, 0x3E, 0x1F, 0x1E, 0xC1, 0xBC, 0x00, 0x0E,
|
||||
0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
|
||||
0x07, 0x70, 0xF7, 0x9E, 0x3F, 0xE1, 0xF8, 0x18, 0x0F, 0x62, 0x70, 0x00,
|
||||
0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0xCF,
|
||||
0xF0, 0x1F, 0xC1, 0xFC, 0x00, 0x0E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
|
||||
0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0x70, 0xF7, 0x9E, 0x3F, 0xE1,
|
||||
0xF8, 0x3F, 0x8F, 0xE0, 0x03, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1,
|
||||
0xF8, 0x7F, 0x3D, 0xFF, 0x3F, 0xC0, 0x18, 0xC1, 0x98, 0x0F, 0x80, 0x00,
|
||||
0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07,
|
||||
0xE0, 0x77, 0x0F, 0x79, 0xE3, 0xFE, 0x1F, 0x80, 0x31, 0x8C, 0xC1, 0xF0,
|
||||
0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F,
|
||||
0xCF, 0xF0, 0x07, 0x00, 0xD8, 0x09, 0x80, 0x70, 0x00, 0x0E, 0x07, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0x70,
|
||||
0xF7, 0x9E, 0x3F, 0xE1, 0xF8, 0x0E, 0x06, 0xC1, 0x30, 0x38, 0x00, 0x38,
|
||||
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xF3, 0xDF, 0xF3, 0xFC,
|
||||
0x06, 0xE0, 0xEC, 0x0D, 0xC0, 0x00, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07,
|
||||
0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x77, 0x0F, 0x79, 0xE3, 0xFE,
|
||||
0x1F, 0x80, 0x0D, 0xC7, 0x61, 0xB8, 0x00, 0xE1, 0xF8, 0x7E, 0x1F, 0x87,
|
||||
0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0xCF, 0xF0, 0xE0, 0x7E, 0x07, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x77, 0x0F, 0x79,
|
||||
0xE3, 0xFC, 0x1F, 0x80, 0x60, 0x0C, 0x00, 0xC0, 0x07, 0x00, 0xE1, 0xF8,
|
||||
0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0xCF, 0xF0, 0x38,
|
||||
0x0C, 0x03, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x07, 0xC0, 0x00, 0x67, 0x00,
|
||||
0x00, 0x00, 0x0E, 0x07, 0x03, 0xB8, 0x38, 0x39, 0xC1, 0xE1, 0xCE, 0x1F,
|
||||
0x0E, 0x38, 0xD8, 0xE1, 0xC6, 0xE7, 0x0E, 0x77, 0x38, 0x3B, 0x3B, 0x81,
|
||||
0xD8, 0xFC, 0x0F, 0xC7, 0xE0, 0x3C, 0x3E, 0x01, 0xE0, 0xF0, 0x0F, 0x07,
|
||||
0x80, 0x01, 0xC0, 0x01, 0xF0, 0x01, 0x9C, 0x00, 0x00, 0x0E, 0x1C, 0x3F,
|
||||
0x0E, 0x19, 0x87, 0x0C, 0xE7, 0xCE, 0x33, 0x66, 0x1B, 0xBB, 0x0F, 0xDF,
|
||||
0x83, 0xC7, 0x81, 0xE3, 0xC0, 0xE1, 0xE0, 0x07, 0x00, 0xF8, 0x19, 0xC0,
|
||||
0x00, 0xE0, 0x3F, 0x07, 0x70, 0xE3, 0x8E, 0x39, 0xC1, 0xD8, 0x1F, 0x80,
|
||||
0xF0, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x0E, 0x03, 0xE0,
|
||||
0xCE, 0x00, 0x0E, 0x0F, 0xC1, 0x9C, 0x73, 0x8E, 0x33, 0x87, 0x70, 0x6C,
|
||||
0x0F, 0x81, 0xE0, 0x1C, 0x03, 0x87, 0xE0, 0xF8, 0x0E, 0x00, 0x00, 0x01,
|
||||
0xD8, 0x0D, 0x80, 0x00, 0xE0, 0x3F, 0x07, 0x70, 0xE3, 0x8E, 0x39, 0xC1,
|
||||
0xD8, 0x1F, 0x80, 0xF0, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00,
|
||||
0x03, 0x80, 0xE0, 0x38, 0x00, 0x0F, 0xFD, 0xFF, 0xBF, 0xF0, 0x1C, 0x07,
|
||||
0x81, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x3C, 0x07, 0xFF, 0xFF, 0xE0,
|
||||
0x07, 0x0E, 0x1C, 0x00, 0xFF, 0xFF, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0,
|
||||
0xFF, 0xFF, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0x0F, 0xFD, 0xFF, 0xBF, 0xF0,
|
||||
0x1C, 0x07, 0x81, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x3C, 0x07, 0xFF,
|
||||
0xFF, 0xE0, 0x1C, 0x1C, 0x1C, 0x00, 0xFF, 0xFF, 0x07, 0x0E, 0x1C, 0x38,
|
||||
0x70, 0xE0, 0xFF, 0xFF, 0x31, 0x83, 0x60, 0x38, 0x00, 0x0F, 0xFD, 0xFF,
|
||||
0xBF, 0xF0, 0x1C, 0x07, 0x81, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x3C,
|
||||
0x07, 0xFF, 0xFF, 0xE0, 0x63, 0x36, 0x1C, 0x00, 0xFF, 0xFF, 0x07, 0x0E,
|
||||
0x1C, 0x38, 0x70, 0xE0, 0xFF, 0xFF, 0x00, 0x1F, 0x3E, 0x38, 0x38, 0xF8,
|
||||
0xF8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38 };
|
||||
|
||||
const GFXglyph MontserratBold9pt8bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 5, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 3, 13, 5, 1, -12 }, // 0x21 '!'
|
||||
{ 6, 6, 6, 8, 1, -12 }, // 0x22 '"'
|
||||
{ 11, 13, 13, 13, 0, -12 }, // 0x23 '#'
|
||||
{ 33, 11, 17, 11, 0, -14 }, // 0x24 '$'
|
||||
{ 57, 15, 13, 16, 0, -12 }, // 0x25 '%'
|
||||
{ 82, 12, 13, 13, 1, -12 }, // 0x26 '&'
|
||||
{ 102, 2, 6, 4, 1, -12 }, // 0x27 '''
|
||||
{ 104, 5, 16, 6, 1, -12 }, // 0x28 '('
|
||||
{ 114, 5, 16, 6, 0, -12 }, // 0x29 ')'
|
||||
{ 124, 8, 7, 8, 0, -12 }, // 0x2A '*'
|
||||
{ 131, 9, 8, 11, 1, -9 }, // 0x2B '+'
|
||||
{ 140, 3, 6, 5, 1, -2 }, // 0x2C ','
|
||||
{ 143, 5, 2, 7, 1, -5 }, // 0x2D '-'
|
||||
{ 145, 3, 3, 5, 1, -2 }, // 0x2E '.'
|
||||
{ 147, 9, 17, 7, -1, -14 }, // 0x2F '/'
|
||||
{ 167, 11, 13, 12, 1, -12 }, // 0x30 '0'
|
||||
{ 185, 6, 13, 7, 0, -12 }, // 0x31 '1'
|
||||
{ 195, 10, 13, 11, 0, -12 }, // 0x32 '2'
|
||||
{ 212, 10, 13, 11, 0, -12 }, // 0x33 '3'
|
||||
{ 229, 11, 13, 12, 1, -12 }, // 0x34 '4'
|
||||
{ 247, 10, 13, 11, 0, -12 }, // 0x35 '5'
|
||||
{ 264, 10, 13, 11, 1, -12 }, // 0x36 '6'
|
||||
{ 281, 11, 13, 11, 0, -12 }, // 0x37 '7'
|
||||
{ 299, 10, 13, 12, 1, -12 }, // 0x38 '8'
|
||||
{ 316, 11, 13, 11, 0, -12 }, // 0x39 '9'
|
||||
{ 334, 3, 9, 5, 1, -8 }, // 0x3A ':'
|
||||
{ 338, 3, 12, 5, 1, -8 }, // 0x3B ';'
|
||||
{ 343, 9, 9, 11, 1, -10 }, // 0x3C '<'
|
||||
{ 354, 9, 7, 11, 1, -9 }, // 0x3D '='
|
||||
{ 362, 9, 9, 11, 1, -10 }, // 0x3E '>'
|
||||
{ 373, 10, 13, 11, 0, -12 }, // 0x3F '?'
|
||||
{ 390, 17, 17, 19, 1, -12 }, // 0x40 '@'
|
||||
{ 427, 14, 13, 14, 0, -12 }, // 0x41 'A'
|
||||
{ 450, 12, 13, 14, 1, -12 }, // 0x42 'B'
|
||||
{ 470, 12, 13, 13, 1, -12 }, // 0x43 'C'
|
||||
{ 490, 13, 13, 15, 1, -12 }, // 0x44 'D'
|
||||
{ 512, 10, 13, 12, 1, -12 }, // 0x45 'E'
|
||||
{ 529, 10, 13, 12, 1, -12 }, // 0x46 'F'
|
||||
{ 546, 12, 13, 14, 1, -12 }, // 0x47 'G'
|
||||
{ 566, 12, 13, 15, 1, -12 }, // 0x48 'H'
|
||||
{ 586, 3, 13, 6, 1, -12 }, // 0x49 'I'
|
||||
{ 591, 8, 13, 10, 0, -12 }, // 0x4A 'J'
|
||||
{ 604, 13, 13, 13, 1, -12 }, // 0x4B 'K'
|
||||
{ 626, 10, 13, 11, 1, -12 }, // 0x4C 'L'
|
||||
{ 643, 15, 13, 17, 1, -12 }, // 0x4D 'M'
|
||||
{ 668, 12, 13, 15, 1, -12 }, // 0x4E 'N'
|
||||
{ 688, 13, 13, 15, 1, -12 }, // 0x4F 'O'
|
||||
{ 710, 11, 13, 13, 1, -12 }, // 0x50 'P'
|
||||
{ 728, 14, 16, 15, 1, -12 }, // 0x51 'Q'
|
||||
{ 756, 12, 13, 13, 1, -12 }, // 0x52 'R'
|
||||
{ 776, 11, 13, 11, 0, -12 }, // 0x53 'S'
|
||||
{ 794, 11, 13, 11, 0, -12 }, // 0x54 'T'
|
||||
{ 812, 12, 13, 14, 1, -12 }, // 0x55 'U'
|
||||
{ 832, 14, 13, 13, 0, -12 }, // 0x56 'V'
|
||||
{ 855, 21, 13, 21, 0, -12 }, // 0x57 'W'
|
||||
{ 890, 13, 13, 13, 0, -12 }, // 0x58 'X'
|
||||
{ 912, 12, 13, 12, 0, -12 }, // 0x59 'Y'
|
||||
{ 932, 11, 13, 12, 1, -12 }, // 0x5A 'Z'
|
||||
{ 950, 5, 16, 7, 1, -12 }, // 0x5B '['
|
||||
{ 960, 9, 17, 7, -1, -14 }, // 0x5C '\'
|
||||
{ 980, 5, 16, 7, 0, -12 }, // 0x5D ']'
|
||||
{ 990, 9, 7, 11, 1, -9 }, // 0x5E '^'
|
||||
{ 998, 9, 2, 9, 0, 1 }, // 0x5F '_'
|
||||
{ 1001, 5, 3, 11, 2, -13 }, // 0x60 '`'
|
||||
{ 1003, 9, 10, 11, 1, -9 }, // 0x61 'a'
|
||||
{ 1015, 11, 13, 12, 1, -12 }, // 0x62 'b'
|
||||
{ 1033, 9, 10, 11, 1, -9 }, // 0x63 'c'
|
||||
{ 1045, 10, 13, 12, 1, -12 }, // 0x64 'd'
|
||||
{ 1062, 10, 10, 11, 1, -9 }, // 0x65 'e'
|
||||
{ 1075, 8, 14, 7, 0, -13 }, // 0x66 'f'
|
||||
{ 1089, 10, 14, 13, 1, -9 }, // 0x67 'g'
|
||||
{ 1107, 10, 13, 12, 1, -12 }, // 0x68 'h'
|
||||
{ 1124, 3, 14, 5, 1, -13 }, // 0x69 'i'
|
||||
{ 1130, 6, 18, 6, -2, -13 }, // 0x6A 'j'
|
||||
{ 1144, 11, 13, 12, 1, -12 }, // 0x6B 'k'
|
||||
{ 1162, 3, 13, 5, 1, -12 }, // 0x6C 'l'
|
||||
{ 1167, 17, 10, 19, 1, -9 }, // 0x6D 'm'
|
||||
{ 1189, 10, 10, 12, 1, -9 }, // 0x6E 'n'
|
||||
{ 1202, 10, 10, 12, 1, -9 }, // 0x6F 'o'
|
||||
{ 1215, 11, 13, 12, 1, -9 }, // 0x70 'p'
|
||||
{ 1233, 10, 13, 12, 1, -9 }, // 0x71 'q'
|
||||
{ 1250, 6, 10, 8, 1, -9 }, // 0x72 'r'
|
||||
{ 1258, 9, 10, 10, 0, -9 }, // 0x73 's'
|
||||
{ 1270, 8, 12, 8, 0, -11 }, // 0x74 't'
|
||||
{ 1282, 10, 10, 12, 1, -9 }, // 0x75 'u'
|
||||
{ 1295, 11, 10, 11, 0, -9 }, // 0x76 'v'
|
||||
{ 1309, 17, 10, 17, 0, -9 }, // 0x77 'w'
|
||||
{ 1331, 11, 10, 11, 0, -9 }, // 0x78 'x'
|
||||
{ 1345, 11, 14, 11, 0, -9 }, // 0x79 'y'
|
||||
{ 1365, 8, 10, 10, 1, -9 }, // 0x7A 'z'
|
||||
{ 1375, 6, 16, 7, 1, -12 }, // 0x7B '{'
|
||||
{ 1387, 3, 16, 6, 1, -12 }, // 0x7C '|'
|
||||
{ 1393, 6, 16, 7, 0, -12 }, // 0x7D '}'
|
||||
{ 1405, 9, 3, 11, 1, -7 }, // 0x7E '~'
|
||||
{ 1409, 9, 13, 11, 1, -12 }, // 0x7F
|
||||
{ 1424, 9, 13, 11, 1, -12 }, // 0x80
|
||||
{ 1439, 9, 13, 11, 1, -12 }, // 0x81
|
||||
{ 1454, 9, 13, 11, 1, -12 }, // 0x82
|
||||
{ 1469, 9, 13, 11, 1, -12 }, // 0x83
|
||||
{ 1484, 9, 13, 11, 1, -12 }, // 0x84
|
||||
{ 1499, 9, 13, 11, 1, -12 }, // 0x85
|
||||
{ 1514, 9, 13, 11, 1, -12 }, // 0x86
|
||||
{ 1529, 9, 13, 11, 1, -12 }, // 0x87
|
||||
{ 1544, 9, 13, 11, 1, -12 }, // 0x88
|
||||
{ 1559, 9, 13, 11, 1, -12 }, // 0x89
|
||||
{ 1574, 9, 13, 11, 1, -12 }, // 0x8A
|
||||
{ 1589, 9, 13, 11, 1, -12 }, // 0x8B
|
||||
{ 1604, 9, 13, 11, 1, -12 }, // 0x8C
|
||||
{ 1619, 9, 13, 11, 1, -12 }, // 0x8D
|
||||
{ 1634, 9, 13, 11, 1, -12 }, // 0x8E
|
||||
{ 1649, 9, 13, 11, 1, -12 }, // 0x8F
|
||||
{ 1664, 9, 13, 11, 1, -12 }, // 0x90
|
||||
{ 1679, 9, 13, 11, 1, -12 }, // 0x91
|
||||
{ 1694, 9, 13, 11, 1, -12 }, // 0x92
|
||||
{ 1709, 9, 13, 11, 1, -12 }, // 0x93
|
||||
{ 1724, 9, 13, 11, 1, -12 }, // 0x94
|
||||
{ 1739, 9, 13, 11, 1, -12 }, // 0x95
|
||||
{ 1754, 9, 13, 11, 1, -12 }, // 0x96
|
||||
{ 1769, 9, 13, 11, 1, -12 }, // 0x97
|
||||
{ 1784, 9, 13, 11, 1, -12 }, // 0x98
|
||||
{ 1799, 9, 13, 11, 1, -12 }, // 0x99
|
||||
{ 1814, 9, 13, 11, 1, -12 }, // 0x9A
|
||||
{ 1829, 9, 13, 11, 1, -12 }, // 0x9B
|
||||
{ 1844, 9, 13, 11, 1, -12 }, // 0x9C
|
||||
{ 1859, 9, 13, 11, 1, -12 }, // 0x9D
|
||||
{ 1874, 9, 13, 11, 1, -12 }, // 0x9E
|
||||
{ 1889, 9, 13, 11, 1, -12 }, // 0x9F
|
||||
{ 1904, 1, 1, 5, 0, 0 }, // 0xA0
|
||||
{ 1905, 3, 13, 5, 1, -9 }, // 0xA1
|
||||
{ 1910, 9, 14, 11, 1, -11 }, // 0xA2
|
||||
{ 1926, 11, 13, 12, 1, -12 }, // 0xA3
|
||||
{ 1944, 12, 12, 13, 0, -11 }, // 0xA4
|
||||
{ 1962, 14, 13, 13, 0, -12 }, // 0xA5
|
||||
{ 1985, 3, 16, 6, 1, -12 }, // 0xA6
|
||||
{ 1991, 9, 15, 9, 0, -12 }, // 0xA7
|
||||
{ 2008, 6, 3, 11, 2, -13 }, // 0xA8
|
||||
{ 2011, 12, 13, 14, 1, -12 }, // 0xA9
|
||||
{ 2031, 7, 6, 7, 0, -13 }, // 0xAA
|
||||
{ 2037, 9, 7, 10, 1, -7 }, // 0xAB
|
||||
{ 2045, 9, 5, 11, 1, -6 }, // 0xAC
|
||||
{ 2051, 9, 13, 11, 1, -12 }, // 0xAD
|
||||
{ 2066, 12, 13, 14, 1, -12 }, // 0xAE
|
||||
{ 2086, 7, 2, 11, 2, -12 }, // 0xAF
|
||||
{ 2088, 6, 6, 8, 1, -12 }, // 0xB0
|
||||
{ 2093, 9, 12, 11, 1, -11 }, // 0xB1
|
||||
{ 2107, 7, 8, 8, 0, -13 }, // 0xB2
|
||||
{ 2114, 7, 7, 8, 0, -12 }, // 0xB3
|
||||
{ 2121, 5, 3, 11, 4, -13 }, // 0xB4
|
||||
{ 2123, 10, 13, 12, 1, -9 }, // 0xB5
|
||||
{ 2140, 11, 15, 12, 0, -12 }, // 0xB6
|
||||
{ 2161, 3, 4, 5, 1, -6 }, // 0xB7
|
||||
{ 2163, 4, 4, 11, 3, 1 }, // 0xB8
|
||||
{ 2165, 6, 7, 8, 1, -12 }, // 0xB9
|
||||
{ 2171, 7, 6, 8, 0, -13 }, // 0xBA
|
||||
{ 2177, 10, 7, 10, 0, -7 }, // 0xBB
|
||||
{ 2186, 17, 13, 19, 1, -12 }, // 0xBC
|
||||
{ 2214, 17, 13, 19, 1, -12 }, // 0xBD
|
||||
{ 2242, 18, 13, 19, 0, -12 }, // 0xBE
|
||||
{ 2272, 10, 13, 11, 1, -9 }, // 0xBF
|
||||
{ 2289, 14, 17, 14, 0, -16 }, // 0xC0
|
||||
{ 2319, 14, 17, 14, 0, -16 }, // 0xC1
|
||||
{ 2349, 14, 17, 14, 0, -16 }, // 0xC2
|
||||
{ 2379, 14, 16, 14, 0, -15 }, // 0xC3
|
||||
{ 2407, 14, 17, 14, 0, -16 }, // 0xC4
|
||||
{ 2437, 14, 18, 14, 0, -17 }, // 0xC5
|
||||
{ 2469, 19, 13, 19, 0, -12 }, // 0xC6
|
||||
{ 2500, 12, 17, 13, 1, -12 }, // 0xC7
|
||||
{ 2526, 10, 17, 12, 1, -16 }, // 0xC8
|
||||
{ 2548, 10, 17, 12, 1, -16 }, // 0xC9
|
||||
{ 2570, 10, 17, 12, 1, -16 }, // 0xCA
|
||||
{ 2592, 10, 17, 12, 1, -16 }, // 0xCB
|
||||
{ 2614, 5, 17, 6, 0, -16 }, // 0xCC
|
||||
{ 2625, 6, 17, 6, 1, -16 }, // 0xCD
|
||||
{ 2638, 7, 17, 6, 0, -16 }, // 0xCE
|
||||
{ 2653, 6, 17, 6, 0, -16 }, // 0xCF
|
||||
{ 2666, 13, 13, 15, 1, -12 }, // 0xD0
|
||||
{ 2688, 12, 16, 15, 1, -15 }, // 0xD1
|
||||
{ 2712, 13, 17, 15, 1, -16 }, // 0xD2
|
||||
{ 2740, 13, 17, 15, 1, -16 }, // 0xD3
|
||||
{ 2768, 13, 17, 15, 1, -16 }, // 0xD4
|
||||
{ 2796, 13, 16, 15, 1, -15 }, // 0xD5
|
||||
{ 2822, 13, 17, 15, 1, -16 }, // 0xD6
|
||||
{ 2850, 7, 8, 11, 2, -9 }, // 0xD7
|
||||
{ 2857, 13, 15, 15, 1, -13 }, // 0xD8
|
||||
{ 2882, 12, 17, 14, 1, -16 }, // 0xD9
|
||||
{ 2908, 12, 17, 14, 1, -16 }, // 0xDA
|
||||
{ 2934, 12, 17, 14, 1, -16 }, // 0xDB
|
||||
{ 2960, 12, 17, 14, 1, -16 }, // 0xDC
|
||||
{ 2986, 12, 17, 12, 0, -16 }, // 0xDD
|
||||
{ 3012, 11, 13, 13, 1, -12 }, // 0xDE
|
||||
{ 3030, 11, 14, 12, 1, -13 }, // 0xDF
|
||||
{ 3050, 9, 14, 11, 1, -13 }, // 0xE0
|
||||
{ 3066, 9, 14, 11, 1, -13 }, // 0xE1
|
||||
{ 3082, 9, 14, 11, 1, -13 }, // 0xE2
|
||||
{ 3098, 9, 14, 11, 1, -13 }, // 0xE3
|
||||
{ 3114, 9, 14, 11, 1, -13 }, // 0xE4
|
||||
{ 3130, 9, 15, 11, 1, -14 }, // 0xE5
|
||||
{ 3147, 16, 10, 18, 1, -9 }, // 0xE6
|
||||
{ 3167, 9, 14, 11, 1, -9 }, // 0xE7
|
||||
{ 3183, 10, 14, 11, 1, -13 }, // 0xE8
|
||||
{ 3201, 10, 14, 11, 1, -13 }, // 0xE9
|
||||
{ 3219, 10, 14, 11, 1, -13 }, // 0xEA
|
||||
{ 3237, 10, 14, 11, 1, -13 }, // 0xEB
|
||||
{ 3255, 5, 14, 5, -1, -13 }, // 0xEC
|
||||
{ 3264, 5, 14, 5, 1, -13 }, // 0xED
|
||||
{ 3273, 7, 14, 5, -1, -13 }, // 0xEE
|
||||
{ 3286, 5, 13, 5, 0, -12 }, // 0xEF
|
||||
{ 3295, 10, 13, 11, 0, -12 }, // 0xF0
|
||||
{ 3312, 10, 14, 12, 1, -13 }, // 0xF1
|
||||
{ 3330, 10, 14, 12, 1, -13 }, // 0xF2
|
||||
{ 3348, 10, 14, 12, 1, -13 }, // 0xF3
|
||||
{ 3366, 10, 14, 12, 1, -13 }, // 0xF4
|
||||
{ 3384, 10, 14, 12, 1, -13 }, // 0xF5
|
||||
{ 3402, 10, 14, 12, 1, -13 }, // 0xF6
|
||||
{ 3420, 9, 11, 11, 1, -11 }, // 0xF7
|
||||
{ 3433, 10, 12, 12, 1, -10 }, // 0xF8
|
||||
{ 3448, 10, 14, 12, 1, -13 }, // 0xF9
|
||||
{ 3466, 10, 14, 12, 1, -13 }, // 0xFA
|
||||
{ 3484, 10, 14, 12, 1, -13 }, // 0xFB
|
||||
{ 3502, 10, 14, 12, 1, -13 }, // 0xFC
|
||||
{ 3520, 11, 18, 11, 0, -13 }, // 0xFD
|
||||
{ 3545, 11, 16, 12, 1, -12 }, // 0xFE
|
||||
{ 3567, 11, 18, 11, 0, -13 }, // 0xFF
|
||||
{ 3592, 14, 16, 14, 0, -15 }, // 0x100
|
||||
{ 3620, 9, 13, 11, 1, -12 }, // 0x101
|
||||
{ 3635, 14, 17, 14, 0, -16 }, // 0x102
|
||||
{ 3665, 9, 14, 11, 1, -13 }, // 0x103
|
||||
{ 3681, 14, 17, 14, 0, -12 }, // 0x104
|
||||
{ 3711, 9, 14, 11, 1, -9 }, // 0x105
|
||||
{ 3727, 12, 17, 13, 1, -16 }, // 0x106
|
||||
{ 3753, 9, 14, 11, 1, -13 }, // 0x107
|
||||
{ 3769, 12, 17, 13, 1, -16 }, // 0x108
|
||||
{ 3795, 9, 14, 11, 1, -13 }, // 0x109
|
||||
{ 3811, 12, 17, 13, 1, -16 }, // 0x10A
|
||||
{ 3837, 9, 14, 11, 1, -13 }, // 0x10B
|
||||
{ 3853, 12, 17, 13, 1, -16 }, // 0x10C
|
||||
{ 3879, 9, 14, 11, 1, -13 }, // 0x10D
|
||||
{ 3895, 13, 17, 15, 1, -16 }, // 0x10E
|
||||
{ 3923, 14, 14, 12, 1, -13 }, // 0x10F
|
||||
{ 3948, 13, 13, 15, 1, -12 }, // 0x110
|
||||
{ 3970, 11, 13, 12, 1, -12 }, // 0x111
|
||||
{ 3988, 10, 16, 12, 1, -15 }, // 0x112
|
||||
{ 4008, 10, 13, 11, 1, -12 }, // 0x113
|
||||
{ 4025, 10, 17, 12, 1, -16 }, // 0x114
|
||||
{ 4047, 10, 14, 11, 1, -13 }, // 0x115
|
||||
{ 4065, 10, 17, 12, 1, -16 }, // 0x116
|
||||
{ 4087, 10, 14, 11, 1, -13 }, // 0x117
|
||||
{ 4105, 11, 17, 12, 1, -12 }, // 0x118
|
||||
{ 4129, 10, 14, 11, 1, -9 }, // 0x119
|
||||
{ 4147, 10, 17, 12, 1, -16 }, // 0x11A
|
||||
{ 4169, 10, 14, 11, 1, -13 }, // 0x11B
|
||||
{ 4187, 12, 17, 14, 1, -16 }, // 0x11C
|
||||
{ 4213, 10, 18, 13, 1, -13 }, // 0x11D
|
||||
{ 4236, 12, 17, 14, 1, -16 }, // 0x11E
|
||||
{ 4262, 10, 18, 13, 1, -13 }, // 0x11F
|
||||
{ 4285, 12, 17, 14, 1, -16 }, // 0x120
|
||||
{ 4311, 10, 18, 13, 1, -13 }, // 0x121
|
||||
{ 4334, 12, 18, 14, 1, -12 }, // 0x122
|
||||
{ 4361, 10, 19, 13, 1, -14 }, // 0x123
|
||||
{ 4385, 12, 17, 15, 1, -16 }, // 0x124
|
||||
{ 4411, 12, 17, 12, -1, -16 }, // 0x125
|
||||
{ 4437, 15, 13, 15, 0, -12 }, // 0x126
|
||||
{ 4462, 11, 13, 13, 0, -12 }, // 0x127
|
||||
{ 4480, 7, 16, 6, 0, -15 }, // 0x128
|
||||
{ 4494, 6, 14, 5, -1, -13 }, // 0x129
|
||||
{ 4505, 5, 16, 6, 1, -15 }, // 0x12A
|
||||
{ 4515, 5, 13, 5, 0, -12 }, // 0x12B
|
||||
{ 4524, 7, 17, 6, 0, -16 }, // 0x12C
|
||||
{ 4539, 5, 14, 5, 0, -13 }, // 0x12D
|
||||
{ 4548, 4, 17, 6, 1, -12 }, // 0x12E
|
||||
{ 4557, 3, 18, 5, 1, -13 }, // 0x12F
|
||||
{ 4564, 4, 17, 6, 1, -16 }, // 0x130
|
||||
{ 4573, 3, 10, 5, 1, -9 }, // 0x131
|
||||
{ 4577, 11, 13, 13, 1, -12 }, // 0x132
|
||||
{ 4595, 9, 18, 11, 1, -13 }, // 0x133
|
||||
{ 4616, 8, 17, 10, 0, -16 }, // 0x134
|
||||
{ 4633, 8, 18, 6, -2, -13 }, // 0x135
|
||||
{ 4651, 13, 18, 13, 1, -12 }, // 0x136
|
||||
{ 4681, 11, 18, 12, 1, -12 }, // 0x137
|
||||
{ 4706, 11, 10, 12, 1, -9 }, // 0x138
|
||||
{ 4720, 10, 17, 11, 1, -16 }, // 0x139
|
||||
{ 4742, 5, 17, 5, 1, -16 }, // 0x13A
|
||||
{ 4753, 10, 18, 11, 1, -12 }, // 0x13B
|
||||
{ 4776, 3, 18, 5, 1, -12 }, // 0x13C
|
||||
{ 4783, 10, 13, 11, 1, -12 }, // 0x13D
|
||||
{ 4800, 7, 14, 5, 1, -13 }, // 0x13E
|
||||
{ 4813, 10, 13, 11, 1, -12 }, // 0x13F
|
||||
{ 4830, 7, 13, 8, 1, -12 }, // 0x140
|
||||
{ 4842, 11, 13, 11, 0, -12 }, // 0x141
|
||||
{ 4860, 7, 13, 5, -1, -12 }, // 0x142
|
||||
{ 4872, 12, 17, 15, 1, -16 }, // 0x143
|
||||
{ 4898, 10, 14, 12, 1, -13 }, // 0x144
|
||||
{ 4916, 12, 18, 15, 1, -12 }, // 0x145
|
||||
{ 4943, 10, 15, 12, 1, -9 }, // 0x146
|
||||
{ 4962, 12, 17, 15, 1, -16 }, // 0x147
|
||||
{ 4988, 10, 14, 12, 1, -13 }, // 0x148
|
||||
{ 5006, 13, 14, 14, 0, -13 }, // 0x149
|
||||
{ 5029, 12, 17, 15, 1, -12 }, // 0x14A
|
||||
{ 5055, 10, 14, 12, 1, -9 }, // 0x14B
|
||||
{ 5073, 13, 16, 15, 1, -15 }, // 0x14C
|
||||
{ 5099, 10, 13, 12, 1, -12 }, // 0x14D
|
||||
{ 5116, 13, 17, 15, 1, -16 }, // 0x14E
|
||||
{ 5144, 10, 14, 12, 1, -13 }, // 0x14F
|
||||
{ 5162, 13, 17, 15, 1, -16 }, // 0x150
|
||||
{ 5190, 10, 14, 12, 1, -13 }, // 0x151
|
||||
{ 5208, 19, 13, 20, 1, -12 }, // 0x152
|
||||
{ 5239, 18, 10, 19, 1, -9 }, // 0x153
|
||||
{ 5262, 12, 17, 13, 1, -16 }, // 0x154
|
||||
{ 5288, 7, 14, 8, 1, -13 }, // 0x155
|
||||
{ 5301, 12, 18, 13, 1, -12 }, // 0x156
|
||||
{ 5328, 6, 15, 8, 1, -9 }, // 0x157
|
||||
{ 5340, 12, 17, 13, 1, -16 }, // 0x158
|
||||
{ 5366, 7, 14, 8, 1, -13 }, // 0x159
|
||||
{ 5379, 11, 17, 11, 0, -16 }, // 0x15A
|
||||
{ 5403, 9, 14, 10, 0, -13 }, // 0x15B
|
||||
{ 5419, 11, 17, 11, 0, -16 }, // 0x15C
|
||||
{ 5443, 9, 14, 10, 0, -13 }, // 0x15D
|
||||
{ 5459, 11, 17, 11, 0, -12 }, // 0x15E
|
||||
{ 5483, 9, 14, 10, 0, -9 }, // 0x15F
|
||||
{ 5499, 11, 17, 11, 0, -16 }, // 0x160
|
||||
{ 5523, 9, 14, 10, 0, -13 }, // 0x161
|
||||
{ 5539, 11, 17, 11, 0, -12 }, // 0x162
|
||||
{ 5563, 8, 16, 8, 0, -11 }, // 0x163
|
||||
{ 5579, 11, 17, 11, 0, -16 }, // 0x164
|
||||
{ 5603, 8, 14, 8, 0, -13 }, // 0x165
|
||||
{ 5617, 11, 13, 11, 0, -12 }, // 0x166
|
||||
{ 5635, 8, 12, 8, 0, -11 }, // 0x167
|
||||
{ 5647, 12, 16, 14, 1, -15 }, // 0x168
|
||||
{ 5671, 10, 14, 12, 1, -13 }, // 0x169
|
||||
{ 5689, 12, 16, 14, 1, -15 }, // 0x16A
|
||||
{ 5713, 10, 13, 12, 1, -12 }, // 0x16B
|
||||
{ 5730, 12, 17, 14, 1, -16 }, // 0x16C
|
||||
{ 5756, 10, 14, 12, 1, -13 }, // 0x16D
|
||||
{ 5774, 12, 18, 14, 1, -17 }, // 0x16E
|
||||
{ 5801, 10, 15, 12, 1, -14 }, // 0x16F
|
||||
{ 5820, 12, 17, 14, 1, -16 }, // 0x170
|
||||
{ 5846, 10, 14, 12, 1, -13 }, // 0x171
|
||||
{ 5864, 12, 17, 14, 1, -12 }, // 0x172
|
||||
{ 5890, 10, 14, 12, 1, -9 }, // 0x173
|
||||
{ 5908, 21, 17, 21, 0, -16 }, // 0x174
|
||||
{ 5953, 17, 14, 17, 0, -13 }, // 0x175
|
||||
{ 5983, 12, 17, 12, 0, -16 }, // 0x176
|
||||
{ 6009, 11, 18, 11, 0, -13 }, // 0x177
|
||||
{ 6034, 12, 17, 12, 0, -16 }, // 0x178
|
||||
{ 6060, 11, 17, 12, 1, -16 }, // 0x179
|
||||
{ 6084, 8, 14, 10, 1, -13 }, // 0x17A
|
||||
{ 6098, 11, 17, 12, 1, -16 }, // 0x17B
|
||||
{ 6122, 8, 14, 10, 1, -13 }, // 0x17C
|
||||
{ 6136, 11, 17, 12, 1, -16 }, // 0x17D
|
||||
{ 6160, 8, 14, 10, 1, -13 }, // 0x17E
|
||||
{ 6174, 8, 14, 6, 0, -13 } }; // 0x17F
|
||||
|
||||
const GFXfont MontserratBold9pt8b PROGMEM = {
|
||||
(uint8_t *)MontserratBold9pt8bBitmaps,
|
||||
(GFXglyph *)MontserratBold9pt8bGlyphs,
|
||||
0x20, 0x17F, 21 };
|
||||
|
||||
// Approx. 8659 bytes
|
||||
|
||||
#endif // MONTSERRATBOLD9PT8B_H
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,464 +0,0 @@
|
||||
#ifndef NOTOSANS18PT7B_H
|
||||
#define NOTOSANS18PT7B_H
|
||||
const uint8_t NotoSans_Regular18pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFE, 0xEE, 0xEE, 0xEE, 0xEE, 0xE6, 0x66, 0x66, 0x00, 0x0E,
|
||||
0xFF, 0xF4, 0xF1, 0xFC, 0x76, 0x1D, 0x87, 0x61, 0xD8, 0x76, 0x1D, 0x87,
|
||||
0x61, 0x80, 0x00, 0xC1, 0xC0, 0x0E, 0x0C, 0x00, 0x70, 0x60, 0x03, 0x83,
|
||||
0x00, 0x18, 0x38, 0x00, 0xC1, 0xC0, 0x0E, 0x0E, 0x0F, 0xFF, 0xFF, 0x7F,
|
||||
0xFF, 0xFB, 0xFF, 0xFF, 0xC0, 0xC1, 0xC0, 0x06, 0x0E, 0x00, 0x70, 0x60,
|
||||
0x03, 0x83, 0x00, 0x18, 0x38, 0x1F, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0xFF,
|
||||
0xFF, 0x83, 0x83, 0x00, 0x1C, 0x38, 0x00, 0xC1, 0xC0, 0x06, 0x0E, 0x00,
|
||||
0x70, 0x60, 0x03, 0x83, 0x00, 0x1C, 0x38, 0x00, 0x01, 0x80, 0x01, 0x80,
|
||||
0x01, 0x80, 0x03, 0xE0, 0x1F, 0xFE, 0x3F, 0xFE, 0x79, 0x8E, 0xF1, 0x80,
|
||||
0xE1, 0x80, 0xE1, 0x80, 0xF1, 0x80, 0x79, 0x80, 0x7F, 0x80, 0x3F, 0xE0,
|
||||
0x0F, 0xF8, 0x01, 0xFE, 0x01, 0xBE, 0x01, 0x8F, 0x01, 0x87, 0x01, 0x87,
|
||||
0x01, 0x87, 0x81, 0x8F, 0xFD, 0xFE, 0xFF, 0xFC, 0x7F, 0xF0, 0x01, 0x80,
|
||||
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x08, 0x00, 0x00, 0x0F, 0xC0, 0x0E,
|
||||
0x07, 0xF8, 0x07, 0x03, 0x86, 0x01, 0xC0, 0xE1, 0xC0, 0xE0, 0x38, 0x70,
|
||||
0x30, 0x0C, 0x1C, 0x1C, 0x03, 0x03, 0x06, 0x00, 0xC0, 0xC3, 0x80, 0x30,
|
||||
0x31, 0xC0, 0x0C, 0x1C, 0x70, 0x03, 0x87, 0x39, 0xF8, 0xE1, 0xCE, 0xFF,
|
||||
0x1C, 0xE7, 0x38, 0xE7, 0xF9, 0x8C, 0x38, 0xFC, 0xE7, 0x06, 0x00, 0x31,
|
||||
0xC1, 0x80, 0x1C, 0x70, 0x70, 0x0E, 0x1C, 0x1C, 0x03, 0x87, 0x07, 0x01,
|
||||
0xC1, 0xC1, 0x80, 0x70, 0x70, 0x60, 0x38, 0x0C, 0x38, 0x0C, 0x03, 0x8E,
|
||||
0x07, 0x00, 0x7F, 0x03, 0x80, 0x0F, 0x80, 0x00, 0x80, 0x00, 0x0F, 0xF8,
|
||||
0x00, 0x1F, 0xFC, 0x00, 0x1E, 0x3C, 0x00, 0x3C, 0x1E, 0x00, 0x38, 0x0E,
|
||||
0x00, 0x38, 0x0E, 0x00, 0x3C, 0x1E, 0x00, 0x1C, 0x1C, 0x00, 0x1E, 0x3C,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0xE0,
|
||||
0x1C, 0x3C, 0xF0, 0x1C, 0x78, 0x78, 0x3C, 0xF0, 0x3C, 0x38, 0xE0, 0x1E,
|
||||
0x38, 0xE0, 0x0F, 0x70, 0xE0, 0x07, 0xF0, 0xE0, 0x03, 0xE0, 0xF0, 0x03,
|
||||
0xE0, 0xF0, 0x07, 0xF0, 0x7E, 0x7F, 0x78, 0x3F, 0xFE, 0x3C, 0x1F, 0xF8,
|
||||
0x1F, 0xFF, 0x66, 0x66, 0x66, 0x60, 0x07, 0x87, 0x03, 0x83, 0x81, 0xC1,
|
||||
0xC0, 0xE0, 0xF0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x07, 0x83, 0xC1, 0xE0,
|
||||
0xF0, 0x78, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xE0, 0x70, 0x38, 0x1E, 0x07,
|
||||
0x03, 0xC0, 0xE0, 0x38, 0x0C, 0xF0, 0x70, 0x38, 0x38, 0x1C, 0x1C, 0x0E,
|
||||
0x0E, 0x0E, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||
0x07, 0x0F, 0x0E, 0x0E, 0x0E, 0x1E, 0x1C, 0x3C, 0x38, 0x78, 0x70, 0xE0,
|
||||
0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x02, 0x0E,
|
||||
0x09, 0xF3, 0x7E, 0xFF, 0xFF, 0x9F, 0xFE, 0x01, 0xF0, 0x00, 0xDC, 0x00,
|
||||
0xEE, 0x00, 0xE3, 0x80, 0xF1, 0xE0, 0x78, 0x78, 0x08, 0x30, 0x01, 0x80,
|
||||
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
|
||||
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x3C, 0xE3, 0x8E, 0x71,
|
||||
0xC7, 0x18, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xEF, 0xFF, 0x40, 0x00, 0x78,
|
||||
0x03, 0x80, 0x1C, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x00, 0x38, 0x03,
|
||||
0xC0, 0x1C, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x38, 0x01, 0xC0,
|
||||
0x0E, 0x00, 0xE0, 0x07, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xC0, 0x0E,
|
||||
0x00, 0xF0, 0x00, 0x00, 0x80, 0x0F, 0xF0, 0x1F, 0xF8, 0x3C, 0x3C, 0x78,
|
||||
0x1E, 0x70, 0x0E, 0x70, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0,
|
||||
0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0,
|
||||
0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0x70, 0x0F, 0x70, 0x0E, 0x38,
|
||||
0x1E, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, 0x03, 0xC1, 0xF1, 0xFC, 0xF7,
|
||||
0x79, 0xFC, 0xF6, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
|
||||
0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C,
|
||||
0x0F, 0x03, 0xC0, 0x01, 0x00, 0x1F, 0xF0, 0x7F, 0xFC, 0xF8, 0x3C, 0x60,
|
||||
0x1E, 0x40, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00,
|
||||
0x1E, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xE0, 0x01,
|
||||
0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x3F, 0xF0, 0x7F,
|
||||
0xFC, 0xF8, 0x3C, 0x40, 0x1E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00,
|
||||
0x0E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0xF8, 0x1F, 0xE0, 0x1F, 0xF8, 0x01,
|
||||
0xFC, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00,
|
||||
0x07, 0x00, 0x0F, 0x80, 0x1E, 0xF8, 0x7E, 0xFF, 0xFC, 0x7F, 0xF0, 0x00,
|
||||
0x1E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x01, 0xF8, 0x00, 0xEE, 0x00, 0x73,
|
||||
0x80, 0x1C, 0xE0, 0x0E, 0x38, 0x07, 0x0E, 0x01, 0xC3, 0x80, 0xE0, 0xE0,
|
||||
0x70, 0x38, 0x1C, 0x0E, 0x0E, 0x03, 0x87, 0x00, 0xE1, 0x80, 0x38, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03,
|
||||
0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x3F, 0xFC, 0x3F, 0xFC,
|
||||
0x3F, 0xFC, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00,
|
||||
0x70, 0x00, 0x70, 0x00, 0x7F, 0xF0, 0x7F, 0xFC, 0x30, 0x7E, 0x00, 0x1E,
|
||||
0x00, 0x0F, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07,
|
||||
0x00, 0x0E, 0x80, 0x1E, 0xF8, 0x7C, 0xFF, 0xF8, 0x7F, 0xF0, 0x00, 0x10,
|
||||
0x01, 0xFF, 0x01, 0xFF, 0x83, 0xE0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xE0,
|
||||
0x00, 0xE0, 0x00, 0x70, 0x00, 0x78, 0x00, 0x38, 0x78, 0x1C, 0xFF, 0x8E,
|
||||
0xFF, 0xE7, 0xC0, 0x73, 0xC0, 0x1D, 0xE0, 0x0E, 0xE0, 0x07, 0x70, 0x03,
|
||||
0xF8, 0x01, 0xDC, 0x00, 0xE7, 0x00, 0x73, 0x80, 0x38, 0xE0, 0x38, 0x7C,
|
||||
0x7C, 0x1F, 0xFC, 0x03, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x07, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x3C,
|
||||
0x00, 0x38, 0x00, 0x78, 0x00, 0x70, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xE0,
|
||||
0x01, 0xC0, 0x01, 0xC0, 0x03, 0xC0, 0x03, 0x80, 0x07, 0x80, 0x07, 0x00,
|
||||
0x0F, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x01, 0x80, 0x0F, 0xF8,
|
||||
0x3F, 0xFC, 0x78, 0x1E, 0x70, 0x0E, 0x70, 0x0F, 0x70, 0x07, 0x70, 0x0F,
|
||||
0x70, 0x0E, 0x78, 0x1E, 0x3C, 0x3C, 0x1F, 0xF8, 0x0F, 0xE0, 0x0F, 0xF0,
|
||||
0x3E, 0xFC, 0x78, 0x1E, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07,
|
||||
0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0F, 0x7C, 0x1E, 0x3F, 0xFC, 0x1F, 0xF8,
|
||||
0x01, 0x00, 0x0F, 0xF0, 0x3F, 0xF8, 0x7C, 0x3C, 0x70, 0x1E, 0xF0, 0x0E,
|
||||
0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07,
|
||||
0xF0, 0x0F, 0x78, 0x3F, 0x3F, 0xF7, 0x1F, 0xE7, 0x07, 0x07, 0x00, 0x07,
|
||||
0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x3C, 0x41, 0xF8,
|
||||
0x3F, 0xF0, 0x3F, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E,
|
||||
0xFF, 0xF4, 0x39, 0xF7, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x0E, 0x39, 0xE7, 0x1C, 0x71, 0x8E, 0x30, 0x00, 0x03, 0x00, 0x0F,
|
||||
0x00, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xF8, 0x00,
|
||||
0xE0, 0x00, 0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x7E,
|
||||
0x00, 0x1F, 0x00, 0x07, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0x00, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0,
|
||||
0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x7C, 0x03, 0xF0,
|
||||
0x0F, 0xC0, 0x7F, 0x00, 0xF8, 0x00, 0xE0, 0x00, 0x80, 0x00, 0x01, 0x00,
|
||||
0xFF, 0xCF, 0xFF, 0x9E, 0x1F, 0x40, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07,
|
||||
0x00, 0x1C, 0x00, 0xF0, 0x03, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x38,
|
||||
0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x70, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0x20, 0x00, 0x00, 0x3F,
|
||||
0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x03, 0xF0, 0x3E, 0x00, 0x78, 0x00, 0xF0,
|
||||
0x0E, 0x00, 0x03, 0x81, 0xC0, 0x00, 0x1C, 0x38, 0x00, 0x00, 0xC3, 0x81,
|
||||
0xFF, 0x0E, 0x70, 0x3F, 0xF0, 0x67, 0x07, 0x07, 0x06, 0x60, 0xE0, 0x70,
|
||||
0x7E, 0x0C, 0x07, 0x07, 0xE1, 0xC0, 0x70, 0x7E, 0x1C, 0x07, 0x07, 0xE1,
|
||||
0xC0, 0x70, 0x6E, 0x1C, 0x07, 0x06, 0xE1, 0xC0, 0xF0, 0xEE, 0x0C, 0x0F,
|
||||
0x0E, 0xE0, 0xE1, 0xB1, 0xC6, 0x07, 0xFB, 0xF8, 0x70, 0x3F, 0x1F, 0x07,
|
||||
0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x1E, 0x00,
|
||||
0x08, 0x00, 0xFC, 0x0F, 0x80, 0x03, 0xFF, 0xF8, 0x00, 0x0F, 0xFC, 0x00,
|
||||
0x00, 0x38, 0x00, 0x01, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0x00, 0x00,
|
||||
0xEE, 0x00, 0x03, 0xB8, 0x00, 0x1C, 0xE0, 0x00, 0x71, 0xC0, 0x03, 0x87,
|
||||
0x00, 0x0E, 0x1C, 0x00, 0x38, 0x38, 0x01, 0xC0, 0xE0, 0x07, 0x01, 0xC0,
|
||||
0x3C, 0x07, 0x00, 0xFF, 0xFC, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xE0, 0x70,
|
||||
0x03, 0xC1, 0xC0, 0x07, 0x0E, 0x00, 0x1C, 0x38, 0x00, 0x79, 0xE0, 0x00,
|
||||
0xE7, 0x00, 0x03, 0xDC, 0x00, 0x07, 0xE0, 0x00, 0x1C, 0xFF, 0xF8, 0x3F,
|
||||
0xFF, 0x8F, 0xFF, 0xF3, 0xC0, 0x3E, 0xF0, 0x07, 0xBC, 0x00, 0xEF, 0x00,
|
||||
0x3B, 0xC0, 0x0E, 0xF0, 0x07, 0xBC, 0x01, 0xCF, 0x07, 0xE3, 0xFF, 0xE0,
|
||||
0xFF, 0xFE, 0x3C, 0x07, 0xCF, 0x00, 0x7B, 0xC0, 0x0F, 0xF0, 0x03, 0xFC,
|
||||
0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x0F, 0xF0, 0x03, 0xFC, 0x01, 0xEF, 0xFF,
|
||||
0xF3, 0xFF, 0xF8, 0xFF, 0xF8, 0x00, 0x00, 0x18, 0x00, 0x3F, 0xF8, 0x1F,
|
||||
0xFF, 0x87, 0xE1, 0xE1, 0xF0, 0x04, 0x78, 0x00, 0x0E, 0x00, 0x03, 0xC0,
|
||||
0x00, 0x70, 0x00, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x0E, 0x00,
|
||||
0x01, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x07, 0xC0,
|
||||
0x00, 0x7F, 0xBE, 0x07, 0xFF, 0xC0, 0x3F, 0xF8, 0xFF, 0xF8, 0x07, 0xFF,
|
||||
0xF0, 0x3F, 0xFF, 0xE1, 0xE0, 0x0F, 0x8F, 0x00, 0x3E, 0x78, 0x00, 0xF3,
|
||||
0xC0, 0x03, 0xDE, 0x00, 0x1E, 0xF0, 0x00, 0x77, 0x80, 0x03, 0xBC, 0x00,
|
||||
0x1D, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xC0, 0x01, 0xDE,
|
||||
0x00, 0x0E, 0xF0, 0x00, 0x77, 0x80, 0x07, 0xBC, 0x00, 0x39, 0xE0, 0x03,
|
||||
0xCF, 0x00, 0x3C, 0x78, 0x07, 0xC3, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0xFF,
|
||||
0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xF0, 0x03, 0xC0,
|
||||
0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C,
|
||||
0x00, 0xF0, 0x03, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00,
|
||||
0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0,
|
||||
0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0x04, 0x00, 0x0F, 0xFF, 0x81,
|
||||
0xFF, 0xFE, 0x1F, 0xC3, 0xE1, 0xF0, 0x01, 0x1E, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x0F, 0x00, 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0,
|
||||
0x00, 0x0F, 0x00, 0x00, 0x70, 0x07, 0xFF, 0x80, 0x3F, 0xFE, 0x01, 0xFF,
|
||||
0xF0, 0x00, 0x3B, 0x80, 0x01, 0xDC, 0x00, 0x0E, 0xF0, 0x00, 0x73, 0x80,
|
||||
0x03, 0x9E, 0x00, 0x1C, 0x7C, 0x00, 0xE1, 0xFE, 0x3F, 0x07, 0xFF, 0xF8,
|
||||
0x0F, 0xFF, 0x00, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xF0, 0xFF, 0xFF, 0xF1, 0xE0, 0x78, 0x1E,
|
||||
0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81,
|
||||
0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE3, 0xFF,
|
||||
0xFF, 0xC0, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03,
|
||||
0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0,
|
||||
0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x7F, 0xFB,
|
||||
0xF8, 0xF0, 0xF0, 0x03, 0xDE, 0x00, 0xF3, 0xC0, 0x3C, 0x78, 0x0F, 0x0F,
|
||||
0x01, 0xC1, 0xE0, 0x70, 0x3C, 0x1C, 0x07, 0x87, 0x00, 0xF1, 0xE0, 0x1E,
|
||||
0x78, 0x03, 0xDE, 0x00, 0x7F, 0xC0, 0x0F, 0xFC, 0x01, 0xFB, 0x80, 0x3C,
|
||||
0x78, 0x07, 0x87, 0x80, 0xF0, 0x78, 0x1E, 0x07, 0x03, 0xC0, 0xF0, 0x78,
|
||||
0x0F, 0x0F, 0x00, 0xF1, 0xE0, 0x1E, 0x3C, 0x01, 0xE7, 0x80, 0x1E, 0xF0,
|
||||
0x01, 0xE0, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1E,
|
||||
0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80,
|
||||
0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03,
|
||||
0xC0, 0x07, 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0xFF, 0xF0,
|
||||
0x00, 0x77, 0xEE, 0x00, 0x1D, 0xFB, 0x80, 0x07, 0xFE, 0x70, 0x03, 0xBF,
|
||||
0x9C, 0x00, 0xEF, 0xE7, 0x00, 0x33, 0xF8, 0xE0, 0x1C, 0xFE, 0x38, 0x07,
|
||||
0x3F, 0x8E, 0x03, 0x8F, 0xE1, 0xC0, 0xE3, 0xF8, 0x70, 0x38, 0xFE, 0x0E,
|
||||
0x1C, 0x3F, 0x83, 0x87, 0x0F, 0xE0, 0xE3, 0x83, 0xF8, 0x1C, 0xE0, 0xFE,
|
||||
0x07, 0x38, 0x3F, 0x81, 0xFC, 0x0F, 0xE0, 0x3F, 0x03, 0xF8, 0x0F, 0x80,
|
||||
0xFE, 0x01, 0xE0, 0x3F, 0x80, 0x78, 0x0F, 0xE0, 0x1C, 0x03, 0xC0, 0xF8,
|
||||
0x00, 0x7F, 0x80, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFE, 0x00, 0x7E,
|
||||
0xF0, 0x07, 0xE7, 0x00, 0x7E, 0x78, 0x07, 0xE3, 0xC0, 0x7E, 0x1C, 0x07,
|
||||
0xE1, 0xE0, 0x7E, 0x0F, 0x07, 0xE0, 0x70, 0x7E, 0x07, 0x87, 0xE0, 0x3C,
|
||||
0x7E, 0x01, 0xC7, 0xE0, 0x1E, 0x7E, 0x00, 0xE7, 0xE0, 0x0F, 0x3E, 0x00,
|
||||
0x7B, 0xE0, 0x03, 0xBE, 0x00, 0x3F, 0xE0, 0x01, 0xFE, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0xF0, 0x00, 0x10, 0x00, 0x07, 0xFF, 0x00, 0x1F, 0xFF, 0x80, 0xFC,
|
||||
0x1F, 0x81, 0xE0, 0x07, 0x87, 0x80, 0x07, 0x1E, 0x00, 0x0F, 0x3C, 0x00,
|
||||
0x0E, 0x70, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00,
|
||||
0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07,
|
||||
0xF0, 0x00, 0x0E, 0xE0, 0x00, 0x1D, 0xC0, 0x00, 0x7B, 0xC0, 0x00, 0xE3,
|
||||
0x80, 0x03, 0xC7, 0x80, 0x0F, 0x07, 0x80, 0x3E, 0x07, 0xF3, 0xF8, 0x07,
|
||||
0xFF, 0xE0, 0x03, 0xFF, 0x00, 0xFF, 0xF0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9E,
|
||||
0x03, 0xEF, 0x00, 0xF7, 0x80, 0x3B, 0xC0, 0x1D, 0xE0, 0x0F, 0xF0, 0x07,
|
||||
0x78, 0x03, 0xBC, 0x03, 0xDE, 0x03, 0xCF, 0xFF, 0xE7, 0xFF, 0xC3, 0xFF,
|
||||
0x81, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F,
|
||||
0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x00, 0x00,
|
||||
0x10, 0x00, 0x07, 0xFF, 0x00, 0x1F, 0xFF, 0x80, 0xFC, 0x1F, 0x81, 0xE0,
|
||||
0x07, 0x87, 0x80, 0x07, 0x1E, 0x00, 0x0F, 0x3C, 0x00, 0x0E, 0x70, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00,
|
||||
0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0E,
|
||||
0xE0, 0x00, 0x1D, 0xC0, 0x00, 0x7B, 0xC0, 0x00, 0xE3, 0x80, 0x03, 0xC7,
|
||||
0x80, 0x0F, 0x07, 0x80, 0x3E, 0x07, 0xF3, 0xF8, 0x07, 0xFF, 0xE0, 0x03,
|
||||
0xFF, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1E, 0x00, 0x00,
|
||||
0x3E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x3E, 0xFF, 0xF0, 0x3F, 0xFF, 0x0F,
|
||||
0xFF, 0xE3, 0xC0, 0x3C, 0xF0, 0x07, 0x3C, 0x01, 0xCF, 0x00, 0x7B, 0xC0,
|
||||
0x1E, 0xF0, 0x07, 0x3C, 0x01, 0xCF, 0x00, 0xF3, 0xC0, 0xF8, 0xFF, 0xFC,
|
||||
0x3F, 0xFC, 0x0F, 0xFF, 0x03, 0xC1, 0xE0, 0xF0, 0x38, 0x3C, 0x0F, 0x0F,
|
||||
0x01, 0xC3, 0xC0, 0x78, 0xF0, 0x0F, 0x3C, 0x01, 0xCF, 0x00, 0x7B, 0xC0,
|
||||
0x0E, 0xF0, 0x03, 0xC0, 0x00, 0x80, 0x1F, 0xFC, 0x3F, 0xFE, 0x7E, 0x3E,
|
||||
0x70, 0x04, 0xF0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x70, 0x00,
|
||||
0x78, 0x00, 0x3F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7E,
|
||||
0x00, 0x1E, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x0E,
|
||||
0x80, 0x1E, 0xFC, 0xFC, 0xFF, 0xF8, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x80, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38,
|
||||
0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70,
|
||||
0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0,
|
||||
0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0,
|
||||
0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xFE, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F,
|
||||
0xE0, 0x00, 0xFE, 0x00, 0x0E, 0xF0, 0x00, 0xE7, 0x00, 0x0E, 0x78, 0x01,
|
||||
0xE3, 0xC0, 0x3C, 0x3F, 0x9F, 0x81, 0xFF, 0xF0, 0x07, 0xFE, 0x00, 0xF0,
|
||||
0x00, 0x3B, 0x80, 0x03, 0xDC, 0x00, 0x1C, 0xF0, 0x01, 0xE3, 0x80, 0x0F,
|
||||
0x1C, 0x00, 0x70, 0xF0, 0x07, 0x83, 0x80, 0x38, 0x1C, 0x01, 0xC0, 0xF0,
|
||||
0x1E, 0x03, 0x80, 0xE0, 0x1C, 0x07, 0x00, 0x70, 0x78, 0x03, 0x83, 0x80,
|
||||
0x1C, 0x1C, 0x00, 0x71, 0xE0, 0x03, 0x8E, 0x00, 0x1E, 0x70, 0x00, 0x77,
|
||||
0x80, 0x03, 0xB8, 0x00, 0x1D, 0xC0, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x70, 0x00, 0xF0, 0x03, 0xC0, 0x07, 0x70, 0x03, 0xC0,
|
||||
0x07, 0x70, 0x03, 0xE0, 0x0F, 0x78, 0x03, 0xE0, 0x0E, 0x38, 0x07, 0xE0,
|
||||
0x0E, 0x38, 0x07, 0x70, 0x0E, 0x38, 0x07, 0x70, 0x1E, 0x3C, 0x0E, 0x70,
|
||||
0x1C, 0x1C, 0x0E, 0x38, 0x1C, 0x1C, 0x0E, 0x38, 0x1C, 0x1C, 0x1E, 0x38,
|
||||
0x3C, 0x0E, 0x1C, 0x38, 0x38, 0x0E, 0x1C, 0x1C, 0x38, 0x0E, 0x1C, 0x1C,
|
||||
0x38, 0x0E, 0x38, 0x1C, 0x70, 0x07, 0x38, 0x0E, 0x70, 0x07, 0x38, 0x0E,
|
||||
0x70, 0x07, 0x30, 0x0E, 0x70, 0x07, 0x70, 0x0E, 0xE0, 0x03, 0xF0, 0x07,
|
||||
0xE0, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xE0, 0x07, 0xE0, 0x03, 0xE0, 0x03,
|
||||
0xC0, 0x01, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x03, 0xC0, 0x78, 0x00, 0xF1,
|
||||
0xC0, 0x0F, 0x0F, 0x00, 0x70, 0x38, 0x07, 0x80, 0xE0, 0x38, 0x07, 0x83,
|
||||
0x80, 0x1C, 0x3C, 0x00, 0x71, 0xC0, 0x03, 0xDC, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x3E, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x73, 0x80, 0x03, 0x8E, 0x00, 0x38, 0x78, 0x03, 0xC1, 0xC0, 0x1C,
|
||||
0x07, 0x01, 0xC0, 0x3C, 0x1E, 0x00, 0xE0, 0xE0, 0x07, 0x8E, 0x00, 0x1E,
|
||||
0xF0, 0x00, 0x78, 0xF0, 0x00, 0xF7, 0x00, 0x0E, 0x78, 0x01, 0xE3, 0x80,
|
||||
0x1C, 0x1C, 0x03, 0x81, 0xC0, 0x38, 0x0E, 0x07, 0x00, 0xE0, 0xF0, 0x07,
|
||||
0x0E, 0x00, 0x79, 0xE0, 0x03, 0x9C, 0x00, 0x3F, 0xC0, 0x01, 0xF8, 0x00,
|
||||
0x1F, 0x80, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x7F, 0xFF, 0x9F, 0xFF, 0xE7, 0xFF,
|
||||
0xF8, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x03, 0x80, 0x01, 0xE0, 0x00, 0xF0,
|
||||
0x00, 0x38, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x03, 0x80, 0x01, 0xE0, 0x00,
|
||||
0xF0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x03, 0x80, 0x01, 0xE0,
|
||||
0x00, 0xF0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
|
||||
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xF0, 0x03,
|
||||
0x80, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x0E,
|
||||
0x00, 0x70, 0x03, 0x80, 0x0E, 0x00, 0x70, 0x03, 0xC0, 0x0E, 0x00, 0x70,
|
||||
0x01, 0xC0, 0x0E, 0x00, 0x70, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x01, 0xC0,
|
||||
0x0E, 0x00, 0x38, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0x01, 0xC0,
|
||||
0x00, 0x78, 0x00, 0x3E, 0x00, 0x0D, 0xC0, 0x03, 0x30, 0x01, 0xCE, 0x00,
|
||||
0x61, 0x80, 0x38, 0x70, 0x0C, 0x0C, 0x07, 0x03, 0x81, 0x80, 0x60, 0xE0,
|
||||
0x1C, 0x30, 0x03, 0x1C, 0x00, 0xE7, 0x00, 0x1B, 0x80, 0x07, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xF0, 0x78, 0x3C, 0x1C, 0x0E, 0x07, 0x0F, 0xF0, 0x7F, 0xF0,
|
||||
0xF9, 0xF1, 0x00, 0xF0, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x0F,
|
||||
0xFE, 0x7F, 0xFD, 0xE0, 0x3F, 0x80, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x07,
|
||||
0xF0, 0x1F, 0xF8, 0xFE, 0xFF, 0xDC, 0xFF, 0x18, 0xE0, 0x00, 0x70, 0x00,
|
||||
0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0,
|
||||
0x00, 0xE7, 0xF0, 0x77, 0xFE, 0x3F, 0x9F, 0x9F, 0x01, 0xCF, 0x00, 0xF7,
|
||||
0x80, 0x3B, 0x80, 0x1D, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x01,
|
||||
0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x80, 0x3B, 0xC0, 0x1D, 0xF0, 0x1E, 0xFE,
|
||||
0x3E, 0x77, 0xFE, 0x31, 0xFE, 0x00, 0x07, 0xF8, 0x7F, 0xF3, 0xF7, 0x9E,
|
||||
0x00, 0x70, 0x03, 0xC0, 0x0E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0E,
|
||||
0x00, 0x38, 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x1E, 0x00, 0x3E, 0x38,
|
||||
0x7F, 0xE0, 0xFF, 0x80, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00,
|
||||
0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x0F, 0xE3, 0x8F,
|
||||
0xFD, 0xCF, 0x9F, 0xEF, 0x01, 0xF7, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x1F,
|
||||
0xC0, 0x0F, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00,
|
||||
0x7F, 0x80, 0x3D, 0xC0, 0x1E, 0xF0, 0x1F, 0x3E, 0x3F, 0x8F, 0xFD, 0xC3,
|
||||
0xF8, 0xE0, 0x07, 0xF0, 0x1F, 0xF8, 0x3E, 0x3C, 0x78, 0x1E, 0x70, 0x0E,
|
||||
0x70, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x78, 0x01, 0x3F, 0x1E,
|
||||
0x1F, 0xFE, 0x07, 0xFC, 0x03, 0xF8, 0x3F, 0x83, 0xFC, 0x3C, 0x01, 0xC0,
|
||||
0x0E, 0x00, 0x70, 0x03, 0x80, 0x7F, 0xE7, 0xFF, 0x3F, 0xF8, 0x38, 0x01,
|
||||
0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38,
|
||||
0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00,
|
||||
0x0F, 0xE3, 0x8F, 0xFD, 0xCF, 0x9F, 0xEF, 0x01, 0xF7, 0x00, 0x7F, 0x80,
|
||||
0x3F, 0x80, 0x1F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC,
|
||||
0x00, 0x7E, 0x00, 0x7F, 0x80, 0x3D, 0xC0, 0x1E, 0xF0, 0x1F, 0x3E, 0x3F,
|
||||
0x8F, 0xFD, 0xC3, 0xF8, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x3C, 0x00,
|
||||
0x1C, 0x80, 0x1E, 0x78, 0x1E, 0x3F, 0xFF, 0x0F, 0xFE, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE3, 0xF8, 0xEF, 0xFC, 0xFE, 0x3E, 0xF8, 0x0E, 0xF0, 0x0F,
|
||||
0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07,
|
||||
0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07,
|
||||
0xE0, 0x07, 0xE0, 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFC, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
|
||||
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0xFE, 0xFC,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x1E, 0xE0, 0x3C, 0xE0, 0x78, 0xE0, 0xF0,
|
||||
0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x00, 0xFF, 0x00,
|
||||
0xFF, 0x80, 0xF3, 0xC0, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xE0, 0x78,
|
||||
0xE0, 0x3C, 0xE0, 0x1C, 0xE0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE7, 0xF0, 0x7F, 0x1D, 0xFF, 0x9F, 0xFB,
|
||||
0xF9, 0xF7, 0x9F, 0x7C, 0x0F, 0xC0, 0xFF, 0x00, 0xF0, 0x0F, 0xE0, 0x1C,
|
||||
0x01, 0xF8, 0x03, 0x80, 0x3F, 0x00, 0x70, 0x07, 0xE0, 0x0E, 0x00, 0xFC,
|
||||
0x01, 0xC0, 0x1F, 0x80, 0x38, 0x03, 0xF0, 0x07, 0x00, 0x7E, 0x00, 0xE0,
|
||||
0x0F, 0xC0, 0x1C, 0x01, 0xF8, 0x03, 0x80, 0x3F, 0x00, 0x70, 0x07, 0xE0,
|
||||
0x0E, 0x00, 0xFC, 0x01, 0xC0, 0x1F, 0x80, 0x38, 0x03, 0x80, 0xE3, 0xF8,
|
||||
0xEF, 0xFC, 0xFF, 0x3E, 0xF8, 0x0E, 0xF0, 0x0F, 0xF0, 0x07, 0xE0, 0x07,
|
||||
0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07,
|
||||
0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07,
|
||||
0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xCF, 0x8F, 0x01, 0xE7, 0x00, 0x77, 0x80,
|
||||
0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC,
|
||||
0x00, 0x7E, 0x00, 0x3B, 0x80, 0x1D, 0xC0, 0x1C, 0xF0, 0x1E, 0x3E, 0x1E,
|
||||
0x0F, 0xFE, 0x01, 0xFE, 0x00, 0xE3, 0xF0, 0x77, 0xFE, 0x3F, 0x9F, 0x9F,
|
||||
0x01, 0xCF, 0x00, 0xF7, 0x80, 0x3B, 0x80, 0x1D, 0xC0, 0x0F, 0xE0, 0x07,
|
||||
0xF0, 0x01, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x77, 0x80, 0x3B, 0xC0,
|
||||
0x3D, 0xF0, 0x1C, 0xFC, 0x3E, 0x77, 0xFE, 0x39, 0xFE, 0x1C, 0x00, 0x0E,
|
||||
0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00,
|
||||
0x38, 0x00, 0x00, 0x0F, 0xE3, 0x8F, 0xFD, 0xCF, 0x9E, 0xEF, 0x01, 0xF7,
|
||||
0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x1F, 0xC0, 0x0F, 0xE0, 0x03, 0xF0, 0x01,
|
||||
0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x7F, 0x80, 0x3D, 0xC0, 0x1E, 0xF0,
|
||||
0x1F, 0x3E, 0x3F, 0x8F, 0xFD, 0xC3, 0xF8, 0xE0, 0x00, 0x70, 0x00, 0x38,
|
||||
0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00,
|
||||
0xE0, 0xE3, 0xFC, 0xFF, 0xBF, 0xFE, 0x0F, 0x81, 0xE0, 0x38, 0x07, 0x00,
|
||||
0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0,
|
||||
0x1C, 0x03, 0x80, 0x00, 0x1F, 0xF3, 0xFF, 0xFE, 0x3D, 0xC0, 0x0E, 0x00,
|
||||
0x70, 0x03, 0xC0, 0x0F, 0x80, 0x3F, 0x00, 0xFF, 0x00, 0xFC, 0x01, 0xF0,
|
||||
0x03, 0x80, 0x1C, 0x00, 0xF0, 0x07, 0xE0, 0xFF, 0xFF, 0x9F, 0xF0, 0x18,
|
||||
0x03, 0x00, 0x60, 0x1C, 0x07, 0xFF, 0xFF, 0xFF, 0xF9, 0xC0, 0x38, 0x07,
|
||||
0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00,
|
||||
0xE0, 0x1E, 0x01, 0xE2, 0x3F, 0xC3, 0xF8, 0xE0, 0x07, 0xE0, 0x07, 0xE0,
|
||||
0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0,
|
||||
0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0,
|
||||
0x0F, 0xF0, 0x1F, 0x78, 0x7F, 0x7F, 0xF7, 0x1F, 0xC7, 0xE0, 0x03, 0xDC,
|
||||
0x00, 0xE7, 0x00, 0x39, 0xE0, 0x1E, 0x38, 0x07, 0x0E, 0x01, 0xC3, 0xC0,
|
||||
0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x03, 0x87, 0x00, 0xE1, 0xC0, 0x38, 0xF0,
|
||||
0x07, 0x38, 0x01, 0xCE, 0x00, 0x77, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00,
|
||||
0x78, 0x00, 0x1E, 0x00, 0xF0, 0x0F, 0x00, 0xEE, 0x01, 0xE0, 0x1D, 0xC0,
|
||||
0x7C, 0x07, 0xB8, 0x0F, 0xC0, 0xE3, 0x81, 0xF8, 0x1C, 0x70, 0x77, 0x03,
|
||||
0x8E, 0x0E, 0x70, 0xF1, 0xE1, 0xCE, 0x1C, 0x1C, 0x31, 0xC3, 0x83, 0x8E,
|
||||
0x18, 0x70, 0x71, 0xC3, 0x9C, 0x07, 0x30, 0x73, 0x80, 0xEE, 0x0E, 0x70,
|
||||
0x1D, 0xC0, 0xEE, 0x03, 0xB8, 0x1F, 0x80, 0x36, 0x03, 0xF0, 0x07, 0xC0,
|
||||
0x3E, 0x00, 0xF8, 0x07, 0x80, 0x1E, 0x00, 0xF0, 0x00, 0xF0, 0x07, 0xB8,
|
||||
0x07, 0x8E, 0x03, 0x87, 0x83, 0x81, 0xE3, 0xC0, 0x73, 0xC0, 0x3D, 0xC0,
|
||||
0x0F, 0xC0, 0x03, 0xE0, 0x01, 0xE0, 0x00, 0xF8, 0x00, 0xFE, 0x00, 0xF7,
|
||||
0x00, 0x71, 0xC0, 0x70, 0xF0, 0x78, 0x3C, 0x78, 0x0E, 0x38, 0x07, 0xB8,
|
||||
0x01, 0xE0, 0xF0, 0x03, 0xDC, 0x00, 0xE7, 0x00, 0x39, 0xE0, 0x1E, 0x38,
|
||||
0x07, 0x0E, 0x01, 0xC1, 0xC0, 0xF0, 0x70, 0x38, 0x1E, 0x0E, 0x03, 0x87,
|
||||
0x00, 0xE1, 0xC0, 0x1C, 0x70, 0x07, 0x38, 0x01, 0xCE, 0x00, 0x3B, 0x80,
|
||||
0x0F, 0xC0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01,
|
||||
0xC0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x3F, 0xC0,
|
||||
0x0F, 0xC0, 0x00, 0x7F, 0xFD, 0xFF, 0xF7, 0xFF, 0xC0, 0x0E, 0x00, 0x78,
|
||||
0x03, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0xC0,
|
||||
0x1E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x70, 0x03, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0x00, 0xE0, 0x7C, 0x1F, 0x83, 0x80, 0xF0, 0x1C, 0x03, 0x80, 0x70,
|
||||
0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x7C, 0x3E, 0x07, 0x80, 0xFC,
|
||||
0x03, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01,
|
||||
0xC0, 0x3C, 0x03, 0xC0, 0x7E, 0x03, 0xC0, 0x08, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x1F,
|
||||
0x81, 0xF0, 0x0F, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0,
|
||||
0x38, 0x07, 0x00, 0xF0, 0x0F, 0x00, 0xF8, 0x0F, 0x07, 0xE1, 0xE0, 0x38,
|
||||
0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x1F,
|
||||
0x0F, 0xC1, 0xF0, 0x30, 0x00, 0x1C, 0x01, 0xFF, 0x81, 0xFF, 0xFF, 0xC1,
|
||||
0xFF, 0x80, 0x3C };
|
||||
|
||||
const GFXglyph NotoSans_Regular18pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 9, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 4, 26, 9, 3, -24 }, // 0x21 '!'
|
||||
{ 14, 10, 9, 14, 2, -24 }, // 0x22 '"'
|
||||
{ 26, 21, 25, 23, 1, -24 }, // 0x23 '#'
|
||||
{ 92, 16, 29, 20, 2, -26 }, // 0x24 '$'
|
||||
{ 150, 26, 26, 29, 2, -25 }, // 0x25 '%'
|
||||
{ 235, 24, 26, 26, 2, -25 }, // 0x26 '&'
|
||||
{ 313, 4, 9, 8, 2, -24 }, // 0x27 '''
|
||||
{ 318, 9, 31, 11, 1, -24 }, // 0x28 '('
|
||||
{ 353, 8, 31, 11, 1, -24 }, // 0x29 ')'
|
||||
{ 384, 17, 16, 19, 1, -26 }, // 0x2A '*'
|
||||
{ 418, 16, 17, 20, 2, -20 }, // 0x2B '+'
|
||||
{ 452, 6, 9, 9, 1, -3 }, // 0x2C ','
|
||||
{ 459, 9, 3, 11, 1, -10 }, // 0x2D '-'
|
||||
{ 463, 4, 5, 9, 3, -3 }, // 0x2E '.'
|
||||
{ 466, 13, 25, 13, 0, -24 }, // 0x2F '/'
|
||||
{ 507, 16, 26, 20, 2, -25 }, // 0x30 '0'
|
||||
{ 559, 10, 25, 20, 3, -24 }, // 0x31 '1'
|
||||
{ 591, 16, 26, 20, 2, -25 }, // 0x32 '2'
|
||||
{ 643, 16, 26, 20, 2, -25 }, // 0x33 '3'
|
||||
{ 695, 18, 25, 20, 1, -24 }, // 0x34 '4'
|
||||
{ 752, 16, 25, 20, 2, -24 }, // 0x35 '5'
|
||||
{ 802, 17, 26, 20, 2, -25 }, // 0x36 '6'
|
||||
{ 858, 16, 25, 20, 2, -24 }, // 0x37 '7'
|
||||
{ 908, 16, 26, 20, 2, -25 }, // 0x38 '8'
|
||||
{ 960, 16, 26, 20, 2, -25 }, // 0x39 '9'
|
||||
{ 1012, 4, 20, 9, 3, -18 }, // 0x3A ':'
|
||||
{ 1022, 6, 24, 9, 1, -18 }, // 0x3B ';'
|
||||
{ 1040, 16, 17, 20, 2, -20 }, // 0x3C '<'
|
||||
{ 1074, 16, 9, 20, 2, -16 }, // 0x3D '='
|
||||
{ 1092, 16, 17, 20, 2, -20 }, // 0x3E '>'
|
||||
{ 1126, 14, 27, 15, 0, -25 }, // 0x3F '?'
|
||||
{ 1174, 28, 28, 32, 2, -24 }, // 0x40 '@'
|
||||
{ 1272, 22, 25, 23, 0, -24 }, // 0x41 'A'
|
||||
{ 1341, 18, 25, 23, 3, -24 }, // 0x42 'B'
|
||||
{ 1398, 19, 26, 22, 2, -25 }, // 0x43 'C'
|
||||
{ 1460, 21, 25, 26, 3, -24 }, // 0x44 'D'
|
||||
{ 1526, 14, 25, 20, 3, -24 }, // 0x45 'E'
|
||||
{ 1570, 14, 25, 18, 3, -24 }, // 0x46 'F'
|
||||
{ 1614, 21, 26, 26, 2, -25 }, // 0x47 'G'
|
||||
{ 1683, 20, 25, 26, 3, -24 }, // 0x48 'H'
|
||||
{ 1746, 10, 25, 12, 1, -24 }, // 0x49 'I'
|
||||
{ 1778, 9, 32, 10, -3, -24 }, // 0x4A 'J'
|
||||
{ 1814, 19, 25, 22, 3, -24 }, // 0x4B 'K'
|
||||
{ 1874, 15, 25, 18, 3, -24 }, // 0x4C 'L'
|
||||
{ 1921, 26, 25, 32, 3, -24 }, // 0x4D 'M'
|
||||
{ 2003, 20, 25, 27, 3, -24 }, // 0x4E 'N'
|
||||
{ 2066, 23, 26, 28, 2, -25 }, // 0x4F 'O'
|
||||
{ 2141, 17, 25, 21, 3, -24 }, // 0x50 'P'
|
||||
{ 2195, 23, 32, 28, 2, -25 }, // 0x51 'Q'
|
||||
{ 2287, 18, 25, 22, 3, -24 }, // 0x52 'R'
|
||||
{ 2344, 16, 26, 19, 2, -25 }, // 0x53 'S'
|
||||
{ 2396, 19, 25, 20, 0, -24 }, // 0x54 'T'
|
||||
{ 2456, 20, 25, 26, 3, -24 }, // 0x55 'U'
|
||||
{ 2519, 21, 25, 21, 0, -24 }, // 0x56 'V'
|
||||
{ 2585, 32, 25, 33, 0, -24 }, // 0x57 'W'
|
||||
{ 2685, 21, 25, 21, 0, -24 }, // 0x58 'X'
|
||||
{ 2751, 20, 25, 20, 0, -24 }, // 0x59 'Y'
|
||||
{ 2814, 18, 25, 20, 1, -24 }, // 0x5A 'Z'
|
||||
{ 2871, 8, 31, 12, 3, -24 }, // 0x5B '['
|
||||
{ 2902, 13, 25, 13, 0, -24 }, // 0x5C '\'
|
||||
{ 2943, 8, 31, 12, 1, -24 }, // 0x5D ']'
|
||||
{ 2974, 18, 16, 20, 1, -24 }, // 0x5E '^'
|
||||
{ 3010, 16, 2, 16, 0, 4 }, // 0x5F '_'
|
||||
{ 3014, 8, 6, 10, 1, -26 }, // 0x60 '`'
|
||||
{ 3020, 15, 19, 20, 2, -18 }, // 0x61 'a'
|
||||
{ 3056, 17, 27, 22, 3, -26 }, // 0x62 'b'
|
||||
{ 3114, 14, 19, 17, 2, -18 }, // 0x63 'c'
|
||||
{ 3148, 17, 27, 22, 2, -26 }, // 0x64 'd'
|
||||
{ 3206, 16, 19, 20, 2, -18 }, // 0x65 'e'
|
||||
{ 3244, 13, 27, 12, 1, -26 }, // 0x66 'f'
|
||||
{ 3288, 17, 27, 22, 2, -18 }, // 0x67 'g'
|
||||
{ 3346, 16, 27, 22, 3, -26 }, // 0x68 'h'
|
||||
{ 3400, 3, 26, 9, 3, -25 }, // 0x69 'i'
|
||||
{ 3410, 8, 34, 9, -2, -25 }, // 0x6A 'j'
|
||||
{ 3444, 16, 27, 19, 3, -26 }, // 0x6B 'k'
|
||||
{ 3498, 3, 27, 9, 3, -26 }, // 0x6C 'l'
|
||||
{ 3509, 27, 19, 33, 3, -18 }, // 0x6D 'm'
|
||||
{ 3574, 16, 19, 22, 3, -18 }, // 0x6E 'n'
|
||||
{ 3612, 17, 19, 21, 2, -18 }, // 0x6F 'o'
|
||||
{ 3653, 17, 27, 22, 3, -18 }, // 0x70 'p'
|
||||
{ 3711, 17, 27, 22, 2, -18 }, // 0x71 'q'
|
||||
{ 3769, 11, 19, 15, 3, -18 }, // 0x72 'r'
|
||||
{ 3796, 13, 19, 17, 2, -18 }, // 0x73 's'
|
||||
{ 3827, 11, 23, 13, 1, -22 }, // 0x74 't'
|
||||
{ 3859, 16, 19, 22, 3, -18 }, // 0x75 'u'
|
||||
{ 3897, 18, 19, 18, 0, -18 }, // 0x76 'v'
|
||||
{ 3940, 27, 19, 28, 0, -18 }, // 0x77 'w'
|
||||
{ 4005, 17, 19, 19, 1, -18 }, // 0x78 'x'
|
||||
{ 4046, 18, 27, 18, 0, -18 }, // 0x79 'y'
|
||||
{ 4107, 14, 19, 17, 1, -18 }, // 0x7A 'z'
|
||||
{ 4141, 11, 31, 13, 1, -24 }, // 0x7B '{'
|
||||
{ 4184, 3, 36, 19, 8, -26 }, // 0x7C '|'
|
||||
{ 4198, 11, 31, 13, 1, -24 }, // 0x7D '}'
|
||||
{ 4241, 16, 5, 20, 2, -14 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Regular18pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Regular18pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Regular18pt7bGlyphs,
|
||||
0x20, 0x7E, 48 };
|
||||
|
||||
// Approx. 4923 bytes
|
||||
|
||||
#endif // NOTOSANS18PT7B_H
|
||||
@@ -1,545 +0,0 @@
|
||||
#ifndef NOTOSANS20PT7B_H
|
||||
#define NOTOSANS20PT7B_H
|
||||
const uint8_t NotoSans_Regular20pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xF7, 0xBD, 0xEF, 0x7B, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73,
|
||||
0x98, 0xC0, 0x00, 0x0C, 0xF7, 0xFF, 0xE2, 0x00, 0xE1, 0xF8, 0x7E, 0x1F,
|
||||
0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x70, 0x00, 0x70, 0x70,
|
||||
0x01, 0xC0, 0xE0, 0x03, 0x81, 0x80, 0x07, 0x03, 0x00, 0x0E, 0x0E, 0x00,
|
||||
0x1C, 0x1C, 0x00, 0x70, 0x38, 0x00, 0xE0, 0x60, 0x7F, 0xFF, 0xFE, 0xFF,
|
||||
0xFF, 0xFD, 0xFF, 0xFF, 0xF8, 0x0C, 0x0E, 0x00, 0x38, 0x1C, 0x00, 0x70,
|
||||
0x70, 0x00, 0xE0, 0xE0, 0x01, 0xC1, 0xC0, 0x03, 0x03, 0x81, 0xFF, 0xFF,
|
||||
0xFB, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE0, 0x70, 0x70, 0x00, 0xC0, 0xE0,
|
||||
0x03, 0x81, 0xC0, 0x07, 0x03, 0x00, 0x0E, 0x0E, 0x00, 0x1C, 0x1C, 0x00,
|
||||
0x30, 0x38, 0x00, 0xE0, 0x70, 0x00, 0x00, 0xC0, 0x00, 0x30, 0x00, 0x0C,
|
||||
0x00, 0x03, 0x00, 0x0F, 0xFF, 0x07, 0xFF, 0xE3, 0xFF, 0xF9, 0xE3, 0x04,
|
||||
0x70, 0xC0, 0x3C, 0x30, 0x0F, 0x0C, 0x01, 0xC3, 0x00, 0x78, 0xC0, 0x1F,
|
||||
0xB0, 0x03, 0xFC, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x0C,
|
||||
0xFC, 0x03, 0x0F, 0x00, 0xC1, 0xC0, 0x30, 0x70, 0x0C, 0x1E, 0x03, 0x0F,
|
||||
0xF0, 0xCF, 0xBF, 0xFF, 0xEF, 0xFF, 0xE0, 0x7F, 0xE0, 0x00, 0xC0, 0x00,
|
||||
0x30, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x1F, 0x80, 0x0F, 0x01, 0xFE, 0x00,
|
||||
0x70, 0x1C, 0x70, 0x07, 0x00, 0xE1, 0xC0, 0x38, 0x0E, 0x0E, 0x03, 0x80,
|
||||
0x70, 0x70, 0x3C, 0x03, 0x81, 0x81, 0xC0, 0x1C, 0x0C, 0x1C, 0x00, 0xE0,
|
||||
0x70, 0xE0, 0x07, 0x03, 0x0E, 0x00, 0x38, 0x18, 0x70, 0x01, 0xC1, 0xC7,
|
||||
0x1F, 0x0E, 0x0E, 0x39, 0xFE, 0x38, 0x73, 0x9E, 0xF1, 0xEF, 0x3C, 0xE1,
|
||||
0xC7, 0xF9, 0xCE, 0x0E, 0x1F, 0x1C, 0x70, 0x30, 0x00, 0xE3, 0x81, 0xC0,
|
||||
0x0E, 0x1C, 0x0E, 0x00, 0x70, 0xE0, 0x70, 0x07, 0x07, 0x03, 0x80, 0x38,
|
||||
0x38, 0x1C, 0x03, 0x81, 0xC0, 0xC0, 0x1C, 0x0E, 0x0E, 0x01, 0xC0, 0x38,
|
||||
0x70, 0x1C, 0x01, 0xC7, 0x00, 0xE0, 0x07, 0xF8, 0x0E, 0x00, 0x1F, 0x80,
|
||||
0x03, 0xFC, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x0F, 0x07,
|
||||
0x80, 0x01, 0xC0, 0x78, 0x00, 0x38, 0x0F, 0x00, 0x07, 0x01, 0xE0, 0x00,
|
||||
0xE0, 0x38, 0x00, 0x1E, 0x0F, 0x00, 0x01, 0xE3, 0xC0, 0x00, 0x3E, 0xF0,
|
||||
0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x07,
|
||||
0xFE, 0x01, 0xE1, 0xF3, 0xE0, 0x38, 0x7C, 0x3E, 0x07, 0x0F, 0x03, 0xE1,
|
||||
0xE3, 0xC0, 0x3E, 0x38, 0x78, 0x03, 0xEF, 0x0F, 0x00, 0x3F, 0xC1, 0xE0,
|
||||
0x03, 0xF8, 0x3C, 0x00, 0x3E, 0x07, 0xC0, 0x0F, 0xE0, 0x7C, 0x07, 0xFE,
|
||||
0x07, 0xFF, 0xFB, 0xE0, 0x7F, 0xFC, 0x3E, 0x07, 0xFE, 0x03, 0xF0, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0x07, 0x87, 0x87, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xF0,
|
||||
0x70, 0x78, 0x3C, 0x1E, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38,
|
||||
0x1C, 0x0E, 0x07, 0x03, 0xC1, 0xE0, 0xF0, 0x38, 0x1E, 0x0F, 0x03, 0x81,
|
||||
0xE0, 0x70, 0x3C, 0x0E, 0x03, 0xC0, 0xF0, 0x3C, 0x0E, 0x07, 0x81, 0xC0,
|
||||
0xF0, 0x38, 0x1E, 0x0F, 0x03, 0x81, 0xC0, 0xF0, 0x78, 0x3C, 0x0E, 0x07,
|
||||
0x03, 0x81, 0xC0, 0xE0, 0x70, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x07, 0x83,
|
||||
0xC1, 0xC1, 0xE0, 0xF0, 0xF0, 0x70, 0x78, 0x78, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x70, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x0E, 0x1C,
|
||||
0x3B, 0xFB, 0x7F, 0xFF, 0xFF, 0xC7, 0xFF, 0x80, 0x3E, 0x00, 0x1D, 0xC0,
|
||||
0x07, 0x78, 0x03, 0xCE, 0x01, 0xE3, 0xC0, 0xF8, 0x78, 0x1C, 0x1C, 0x01,
|
||||
0x02, 0x00, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00,
|
||||
0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00,
|
||||
0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x3D, 0xE7, 0x9E,
|
||||
0x71, 0xCF, 0x38, 0xE3, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x67, 0xBF, 0xFF,
|
||||
0x10, 0x00, 0x1C, 0x00, 0xF0, 0x03, 0x80, 0x0E, 0x00, 0x78, 0x01, 0xC0,
|
||||
0x0F, 0x00, 0x38, 0x00, 0xE0, 0x07, 0x80, 0x1C, 0x00, 0x70, 0x03, 0xC0,
|
||||
0x0E, 0x00, 0x78, 0x01, 0xC0, 0x07, 0x00, 0x3C, 0x00, 0xE0, 0x03, 0x80,
|
||||
0x1E, 0x00, 0x70, 0x03, 0xC0, 0x0E, 0x00, 0x38, 0x01, 0xE0, 0x07, 0x00,
|
||||
0x3C, 0x00, 0x07, 0xF8, 0x03, 0xFF, 0x81, 0xFF, 0xF0, 0xF0, 0x3C, 0x78,
|
||||
0x07, 0x9E, 0x00, 0xE7, 0x00, 0x3D, 0xC0, 0x0F, 0xF0, 0x01, 0xFC, 0x00,
|
||||
0x7F, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F,
|
||||
0x80, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0x70,
|
||||
0x03, 0xDC, 0x00, 0xF7, 0x80, 0x38, 0xE0, 0x1E, 0x3C, 0x0F, 0x07, 0xFF,
|
||||
0xC0, 0xFF, 0xE0, 0x1F, 0xE0, 0x01, 0xE0, 0x7C, 0x1F, 0x87, 0xF3, 0xEF,
|
||||
0xF9, 0xDC, 0x39, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01,
|
||||
0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0,
|
||||
0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0xF8, 0x0F, 0xFF,
|
||||
0x87, 0xFF, 0xF3, 0xE0, 0x3C, 0x60, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x38,
|
||||
0x00, 0x0E, 0x00, 0x03, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1C, 0x00,
|
||||
0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78,
|
||||
0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xC0, 0x01,
|
||||
0xE0, 0x00, 0x70, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
|
||||
0xF8, 0x1F, 0xFF, 0x8F, 0xFF, 0xF1, 0xC0, 0x3E, 0x40, 0x07, 0x80, 0x00,
|
||||
0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0xF0,
|
||||
0x00, 0xF8, 0x0F, 0xFC, 0x03, 0xFC, 0x00, 0xFF, 0xE0, 0x00, 0x7C, 0x00,
|
||||
0x07, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x3C, 0x00, 0x1F, 0xC0, 0x0F, 0xBF, 0xFF, 0xCF, 0xFF, 0xE1,
|
||||
0xFF, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x7C, 0x00, 0x07, 0xE0, 0x00, 0x7F,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x3B, 0xC0, 0x03, 0xDE, 0x00, 0x1C, 0xF0, 0x01,
|
||||
0xC7, 0x80, 0x1E, 0x3C, 0x00, 0xE1, 0xE0, 0x0E, 0x0F, 0x00, 0xE0, 0x78,
|
||||
0x0F, 0x03, 0xC0, 0x70, 0x1E, 0x07, 0x00, 0xF0, 0x78, 0x07, 0x83, 0x80,
|
||||
0x3C, 0x38, 0x01, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
|
||||
0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x0F, 0x00, 0x3F, 0xFF, 0x0F, 0xFF, 0xC3, 0xFF, 0xF0, 0xE0,
|
||||
0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00,
|
||||
0x1E, 0x00, 0x07, 0x80, 0x01, 0xFF, 0xE0, 0x7F, 0xFE, 0x0F, 0xFF, 0xC0,
|
||||
0x00, 0xF8, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x1C, 0x00,
|
||||
0x07, 0x00, 0x01, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1E, 0xC0, 0x0F,
|
||||
0xBF, 0xFF, 0xCF, 0xFF, 0xE0, 0xFF, 0xE0, 0x00, 0xFF, 0x00, 0x7F, 0xE0,
|
||||
0x3F, 0xEC, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x0E, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x80, 0x79, 0xFF, 0x0F,
|
||||
0x7F, 0xF1, 0xFE, 0x1F, 0x3F, 0x00, 0xF7, 0xC0, 0x1E, 0xF0, 0x01, 0xDE,
|
||||
0x00, 0x3B, 0xC0, 0x07, 0xF8, 0x00, 0xF7, 0x00, 0x1C, 0xE0, 0x03, 0x9E,
|
||||
0x00, 0x71, 0xC0, 0x1E, 0x3C, 0x07, 0x83, 0xFF, 0xF0, 0x3F, 0xFC, 0x01,
|
||||
0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0x00,
|
||||
0x03, 0xC0, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x1C, 0x00, 0x0F, 0x00, 0x03,
|
||||
0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0x80,
|
||||
0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x01,
|
||||
0xE0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0,
|
||||
0x00, 0xF0, 0x00, 0x78, 0x00, 0x07, 0xFC, 0x07, 0xFF, 0x83, 0xFB, 0xF1,
|
||||
0xF0, 0x1E, 0x78, 0x03, 0x9C, 0x00, 0xE7, 0x00, 0x3D, 0xC0, 0x0E, 0x78,
|
||||
0x03, 0x8E, 0x01, 0xE3, 0xE0, 0xF0, 0x7E, 0xF8, 0x0F, 0xF8, 0x01, 0xFE,
|
||||
0x00, 0xFF, 0xE0, 0xF8, 0xFC, 0x7C, 0x0F, 0x9E, 0x00, 0xFF, 0x00, 0x3F,
|
||||
0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x0F, 0x78,
|
||||
0x07, 0xDF, 0xCF, 0xE3, 0xFF, 0xF0, 0x3F, 0xF0, 0x07, 0xF8, 0x07, 0xFF,
|
||||
0x03, 0xFF, 0xE1, 0xF0, 0x3C, 0x78, 0x07, 0xBC, 0x00, 0xEF, 0x00, 0x3F,
|
||||
0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xC0, 0x0F, 0xF0,
|
||||
0x03, 0xDE, 0x01, 0xF7, 0xE1, 0xFC, 0xFF, 0xF7, 0x0F, 0xF1, 0xC0, 0x40,
|
||||
0x70, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x01, 0xE0, 0x00, 0x70,
|
||||
0x00, 0x3C, 0x00, 0x3E, 0x0C, 0xFF, 0x03, 0xFF, 0x80, 0xFF, 0x80, 0x27,
|
||||
0xBF, 0xFF, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3D, 0xFF,
|
||||
0xF8, 0x80, 0x08, 0x78, 0xF9, 0xF3, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xF1, 0xE3, 0x8F, 0x1E, 0x38, 0x70,
|
||||
0xC3, 0x80, 0x00, 0x00, 0x40, 0x00, 0x30, 0x00, 0x3C, 0x00, 0x3F, 0x00,
|
||||
0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x00,
|
||||
0x0F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0x1F, 0xC0,
|
||||
0x01, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xF0, 0x00, 0x0C, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x80, 0x00,
|
||||
0x38, 0x00, 0x0F, 0x80, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00,
|
||||
0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF0, 0x00, 0x3C, 0x00,
|
||||
0x3F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0xFE, 0x00,
|
||||
0x3C, 0x00, 0x0C, 0x00, 0x00, 0x1F, 0xF0, 0xFF, 0xFC, 0x7F, 0xFE, 0x70,
|
||||
0x1E, 0x00, 0x0F, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00,
|
||||
0x0E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x01, 0xE0, 0x03,
|
||||
0xC0, 0x03, 0x80, 0x03, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07,
|
||||
0x80, 0x01, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x03,
|
||||
0xFF, 0xFE, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x78, 0x00, 0x0F, 0x01, 0xE0,
|
||||
0x00, 0x0E, 0x07, 0x80, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x0E, 0x38, 0x07,
|
||||
0xFC, 0x1C, 0x70, 0x3F, 0xF8, 0x39, 0xC0, 0xF0, 0x70, 0x3B, 0x83, 0xC0,
|
||||
0xE0, 0x77, 0x07, 0x01, 0xC0, 0xEC, 0x1E, 0x03, 0x81, 0xF8, 0x38, 0x07,
|
||||
0x03, 0xF0, 0x70, 0x0E, 0x07, 0xE0, 0xE0, 0x1C, 0x0F, 0xC1, 0xC0, 0x38,
|
||||
0x1F, 0x83, 0x80, 0xF0, 0x77, 0x03, 0x81, 0xE0, 0xE6, 0x07, 0x87, 0xE3,
|
||||
0x8E, 0x07, 0xFD, 0xFF, 0x1C, 0x0F, 0xF1, 0xFC, 0x38, 0x03, 0x80, 0xE0,
|
||||
0x38, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
|
||||
0x78, 0x00, 0x10, 0x00, 0x7E, 0x01, 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x00,
|
||||
0x1F, 0xFF, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x07, 0xE0, 0x00, 0x07, 0x70, 0x00, 0x03, 0xB8, 0x00, 0x03,
|
||||
0xDE, 0x00, 0x01, 0xC7, 0x00, 0x00, 0xE3, 0x80, 0x00, 0xF1, 0xE0, 0x00,
|
||||
0x70, 0x70, 0x00, 0x78, 0x3C, 0x00, 0x38, 0x0E, 0x00, 0x1C, 0x07, 0x00,
|
||||
0x1E, 0x03, 0xC0, 0x0E, 0x00, 0xE0, 0x0F, 0xFF, 0xF8, 0x07, 0xFF, 0xFC,
|
||||
0x03, 0xFF, 0xFE, 0x03, 0xC0, 0x07, 0x81, 0xC0, 0x03, 0xC0, 0xE0, 0x00,
|
||||
0xE0, 0xF0, 0x00, 0x78, 0x70, 0x00, 0x1C, 0x78, 0x00, 0x0F, 0x3C, 0x00,
|
||||
0x07, 0x9C, 0x00, 0x01, 0xDE, 0x00, 0x00, 0xF0, 0xFF, 0xF8, 0x1F, 0xFF,
|
||||
0xE3, 0xFF, 0xFE, 0x70, 0x07, 0xEE, 0x00, 0x3D, 0xC0, 0x07, 0xB8, 0x00,
|
||||
0x77, 0x00, 0x0E, 0xE0, 0x01, 0xDC, 0x00, 0x7B, 0x80, 0x0E, 0x70, 0x07,
|
||||
0xCF, 0xFF, 0xE1, 0xFF, 0xF8, 0x3F, 0xFF, 0xE7, 0x00, 0x3E, 0xE0, 0x03,
|
||||
0xFC, 0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x03,
|
||||
0xF8, 0x00, 0x7F, 0x00, 0x1F, 0xE0, 0x07, 0xDF, 0xFF, 0xF3, 0xFF, 0xFC,
|
||||
0x7F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x0F, 0xFF, 0xF0, 0x7F, 0xFF, 0x83,
|
||||
0xF0, 0x0E, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xC0, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x00, 0x00, 0x1C, 0x00, 0x00,
|
||||
0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x01, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x10,
|
||||
0x1F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x3F, 0xFC, 0xFF, 0xF8, 0x03, 0xFF,
|
||||
0xFC, 0x0F, 0xFF, 0xF8, 0x38, 0x03, 0xF0, 0xE0, 0x03, 0xE3, 0x80, 0x03,
|
||||
0xCE, 0x00, 0x0F, 0xB8, 0x00, 0x1E, 0xE0, 0x00, 0x3B, 0x80, 0x00, 0xFE,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x1E, 0xE0, 0x00, 0x7B, 0x80, 0x03, 0xEE, 0x00, 0x1F, 0x38,
|
||||
0x00, 0xF8, 0xE0, 0x1F, 0xC3, 0xFF, 0xFE, 0x0F, 0xFF, 0xE0, 0x3F, 0xFC,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0E, 0x00, 0x1C, 0x00,
|
||||
0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0F,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80,
|
||||
0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0,
|
||||
0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38,
|
||||
0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00,
|
||||
0x7F, 0xF8, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x0F, 0xC0, 0x0C, 0x1F,
|
||||
0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x78,
|
||||
0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x00, 0xF0, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0x70,
|
||||
0x00, 0x0F, 0x70, 0x00, 0x0F, 0x78, 0x00, 0x0F, 0x78, 0x00, 0x0F, 0x78,
|
||||
0x00, 0x0F, 0x3C, 0x00, 0x0F, 0x3E, 0x00, 0x0F, 0x1F, 0x00, 0x0F, 0x0F,
|
||||
0xC0, 0x0F, 0x07, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFC, 0xE0,
|
||||
0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03,
|
||||
0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00,
|
||||
0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC,
|
||||
0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x70, 0xFF, 0xFF, 0xF7, 0xF0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C,
|
||||
0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01,
|
||||
0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x0F, 0xCF, 0xFF, 0xFF,
|
||||
0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0,
|
||||
0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C,
|
||||
0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01,
|
||||
0xC0, 0xF0, 0x3C, 0x1E, 0xFF, 0xBF, 0xCF, 0xE0, 0xE0, 0x01, 0xFE, 0x00,
|
||||
0x3C, 0xE0, 0x07, 0xCE, 0x00, 0x78, 0xE0, 0x0F, 0x0E, 0x01, 0xE0, 0xE0,
|
||||
0x3C, 0x0E, 0x07, 0x80, 0xE0, 0xF0, 0x0E, 0x1E, 0x00, 0xE3, 0xC0, 0x0E,
|
||||
0x78, 0x00, 0xEF, 0x80, 0x0E, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0x9E, 0x00,
|
||||
0xF0, 0xF0, 0x0E, 0x0F, 0x80, 0xE0, 0x78, 0x0E, 0x03, 0xC0, 0xE0, 0x1E,
|
||||
0x0E, 0x01, 0xF0, 0xE0, 0x0F, 0x0E, 0x00, 0x78, 0xE0, 0x07, 0xCE, 0x00,
|
||||
0x3C, 0xE0, 0x01, 0xEE, 0x00, 0x0F, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00,
|
||||
0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x00, 0x03,
|
||||
0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFE, 0xE0, 0x00, 0xFF, 0xEE,
|
||||
0x00, 0x0E, 0xFE, 0xF0, 0x00, 0xEF, 0xE7, 0x00, 0x1C, 0xFE, 0x78, 0x01,
|
||||
0xCF, 0xE3, 0x80, 0x1C, 0xFE, 0x38, 0x03, 0x8F, 0xE3, 0xC0, 0x38, 0xFE,
|
||||
0x1C, 0x07, 0x8F, 0xE1, 0xC0, 0x70, 0xFE, 0x1E, 0x07, 0x0F, 0xE0, 0xE0,
|
||||
0xE0, 0xFE, 0x0F, 0x0E, 0x0F, 0xE0, 0x71, 0xE0, 0xFE, 0x07, 0x1C, 0x0F,
|
||||
0xE0, 0x79, 0xC0, 0xFE, 0x03, 0xBC, 0x0F, 0xE0, 0x3B, 0x80, 0xFE, 0x03,
|
||||
0xF8, 0x0F, 0xE0, 0x1F, 0x00, 0xFE, 0x01, 0xF0, 0x0F, 0xE0, 0x0F, 0x00,
|
||||
0xFE, 0x00, 0xE0, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x01,
|
||||
0xFF, 0x00, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0x7E, 0xF0, 0x01, 0xF9,
|
||||
0xE0, 0x07, 0xE7, 0x80, 0x1F, 0x8F, 0x00, 0x7E, 0x1E, 0x01, 0xF8, 0x78,
|
||||
0x07, 0xE0, 0xF0, 0x1F, 0x81, 0xE0, 0x7E, 0x07, 0x81, 0xF8, 0x0F, 0x07,
|
||||
0xE0, 0x3C, 0x1F, 0x80, 0x78, 0x7E, 0x00, 0xF1, 0xF8, 0x03, 0xC7, 0xE0,
|
||||
0x07, 0x9F, 0x80, 0x0F, 0x7E, 0x00, 0x3D, 0xF8, 0x00, 0x7F, 0xE0, 0x00,
|
||||
0xFF, 0x80, 0x03, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0x00, 0xFF, 0xE0,
|
||||
0x00, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xC0, 0x3E, 0x00, 0xF8, 0x1F, 0x00,
|
||||
0x1F, 0x0F, 0x80, 0x03, 0xC3, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x1E, 0x78,
|
||||
0x00, 0x03, 0x9E, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00,
|
||||
0x0F, 0x70, 0x00, 0x03, 0xDC, 0x00, 0x00, 0xF7, 0x80, 0x00, 0x3D, 0xE0,
|
||||
0x00, 0x0E, 0x78, 0x00, 0x07, 0x8F, 0x00, 0x01, 0xE3, 0xC0, 0x00, 0xF0,
|
||||
0x7C, 0x00, 0x7C, 0x0F, 0x80, 0x3E, 0x01, 0xFF, 0xFF, 0x00, 0x3F, 0xFF,
|
||||
0x80, 0x03, 0xFF, 0x80, 0xFF, 0xF0, 0x3F, 0xFF, 0x0F, 0xFF, 0xF3, 0x80,
|
||||
0xFC, 0xE0, 0x0F, 0xB8, 0x01, 0xEE, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x03,
|
||||
0xF8, 0x00, 0xFE, 0x00, 0x3B, 0x80, 0x1E, 0xE0, 0x0F, 0xB8, 0x07, 0xCF,
|
||||
0xFF, 0xE3, 0xFF, 0xF0, 0xFF, 0xF0, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80,
|
||||
0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00,
|
||||
0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0xFF,
|
||||
0xFE, 0x00, 0x7F, 0xFF, 0xC0, 0x3E, 0x00, 0xF8, 0x1F, 0x00, 0x1F, 0x0F,
|
||||
0x80, 0x03, 0xC3, 0xC0, 0x00, 0x79, 0xE0, 0x00, 0x1E, 0x78, 0x00, 0x03,
|
||||
0x9E, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0x70,
|
||||
0x00, 0x03, 0xDC, 0x00, 0x00, 0xF7, 0x80, 0x00, 0x3D, 0xE0, 0x00, 0x0E,
|
||||
0x78, 0x00, 0x07, 0x8F, 0x00, 0x01, 0xE3, 0xC0, 0x00, 0xF0, 0x7C, 0x00,
|
||||
0x7C, 0x0F, 0x80, 0x3E, 0x01, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0x80, 0x03,
|
||||
0xFF, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80,
|
||||
0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00,
|
||||
0xF8, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0xFF, 0xFF, 0x0E, 0x01, 0xF8, 0xE0,
|
||||
0x07, 0x8E, 0x00, 0x78, 0xE0, 0x03, 0xCE, 0x00, 0x3C, 0xE0, 0x03, 0xCE,
|
||||
0x00, 0x3C, 0xE0, 0x03, 0x8E, 0x00, 0x78, 0xE0, 0x0F, 0x0F, 0xFF, 0xE0,
|
||||
0xFF, 0xFC, 0x0F, 0xFF, 0x00, 0xE0, 0x78, 0x0E, 0x03, 0x80, 0xE0, 0x3C,
|
||||
0x0E, 0x01, 0xE0, 0xE0, 0x1E, 0x0E, 0x00, 0xF0, 0xE0, 0x0F, 0x0E, 0x00,
|
||||
0x78, 0xE0, 0x03, 0xCE, 0x00, 0x3C, 0xE0, 0x01, 0xEE, 0x00, 0x1F, 0x07,
|
||||
0xFE, 0x07, 0xFF, 0xE3, 0xFF, 0xF9, 0xF0, 0x0C, 0x78, 0x00, 0x3C, 0x00,
|
||||
0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x07, 0xC0, 0x00,
|
||||
0xFC, 0x00, 0x1F, 0xC0, 0x03, 0xFE, 0x00, 0x3F, 0xC0, 0x01, 0xFC, 0x00,
|
||||
0x1F, 0x80, 0x01, 0xE0, 0x00, 0x38, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00,
|
||||
0xF0, 0x00, 0x38, 0x00, 0x1E, 0xC0, 0x0F, 0xBF, 0xFF, 0xCF, 0xFF, 0xE1,
|
||||
0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xF0,
|
||||
0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00,
|
||||
0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80,
|
||||
0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E,
|
||||
0x00, 0x00, 0xF0, 0x00, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00,
|
||||
0x07, 0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E,
|
||||
0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00,
|
||||
0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF8,
|
||||
0x00, 0x3F, 0xC0, 0x03, 0xCF, 0x00, 0x1E, 0x7C, 0x03, 0xE1, 0xFF, 0xFE,
|
||||
0x07, 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xF0, 0x00, 0x0F, 0x70, 0x00, 0x1E,
|
||||
0x78, 0x00, 0x1E, 0x78, 0x00, 0x1C, 0x38, 0x00, 0x3C, 0x3C, 0x00, 0x3C,
|
||||
0x3C, 0x00, 0x78, 0x1C, 0x00, 0x78, 0x1E, 0x00, 0x70, 0x1E, 0x00, 0xF0,
|
||||
0x0E, 0x00, 0xF0, 0x0F, 0x00, 0xE0, 0x0F, 0x01, 0xE0, 0x07, 0x01, 0xE0,
|
||||
0x07, 0x81, 0xC0, 0x03, 0x83, 0xC0, 0x03, 0x83, 0xC0, 0x03, 0xC3, 0x80,
|
||||
0x01, 0xC7, 0x80, 0x01, 0xE7, 0x80, 0x01, 0xE7, 0x00, 0x00, 0xEF, 0x00,
|
||||
0x00, 0xEE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x7C, 0x00, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF7, 0x80,
|
||||
0x0F, 0x00, 0x0F, 0x78, 0x00, 0xF8, 0x00, 0xE7, 0x80, 0x1F, 0x80, 0x1E,
|
||||
0x38, 0x01, 0xF8, 0x01, 0xE3, 0xC0, 0x1F, 0xC0, 0x1C, 0x3C, 0x03, 0xDC,
|
||||
0x01, 0xC3, 0xC0, 0x39, 0xC0, 0x3C, 0x1C, 0x03, 0x9C, 0x03, 0xC1, 0xE0,
|
||||
0x79, 0xE0, 0x38, 0x1E, 0x07, 0x8E, 0x03, 0x80, 0xE0, 0x70, 0xE0, 0x78,
|
||||
0x0E, 0x07, 0x0F, 0x07, 0x80, 0xF0, 0xF0, 0x70, 0x70, 0x0F, 0x0E, 0x07,
|
||||
0x07, 0x00, 0x70, 0xE0, 0x78, 0xF0, 0x07, 0x1E, 0x03, 0x8F, 0x00, 0x79,
|
||||
0xE0, 0x38, 0xE0, 0x07, 0x9C, 0x03, 0x8E, 0x00, 0x39, 0xC0, 0x3D, 0xE0,
|
||||
0x03, 0xBC, 0x01, 0xDC, 0x00, 0x3B, 0x80, 0x1D, 0xC0, 0x03, 0xF8, 0x01,
|
||||
0xDC, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x1F,
|
||||
0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x0F, 0x00, 0x07, 0x80,
|
||||
0x78, 0x00, 0x3C, 0x78, 0x00, 0xF0, 0xF0, 0x01, 0xE0, 0xF0, 0x07, 0x80,
|
||||
0xE0, 0x0E, 0x01, 0xE0, 0x3C, 0x01, 0xE0, 0xF0, 0x01, 0xC1, 0xC0, 0x03,
|
||||
0xC7, 0x80, 0x03, 0xDE, 0x00, 0x03, 0xB8, 0x00, 0x07, 0xF0, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xEE,
|
||||
0x00, 0x03, 0x9E, 0x00, 0x0F, 0x1E, 0x00, 0x1C, 0x1C, 0x00, 0x78, 0x3C,
|
||||
0x01, 0xE0, 0x3C, 0x03, 0x80, 0x78, 0x0F, 0x00, 0x78, 0x3C, 0x00, 0x78,
|
||||
0x70, 0x00, 0xF1, 0xE0, 0x00, 0xF7, 0x80, 0x01, 0xF0, 0xF0, 0x00, 0x3D,
|
||||
0xE0, 0x00, 0xE7, 0x80, 0x07, 0x8F, 0x00, 0x1C, 0x3C, 0x00, 0xF0, 0x78,
|
||||
0x07, 0x81, 0xE0, 0x1E, 0x03, 0xC0, 0xF0, 0x07, 0x03, 0xC0, 0x1E, 0x1E,
|
||||
0x00, 0x38, 0x70, 0x00, 0xF3, 0xC0, 0x01, 0xCE, 0x00, 0x07, 0xF8, 0x00,
|
||||
0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07,
|
||||
0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80,
|
||||
0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00,
|
||||
0x1E, 0x00, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0x7F, 0xFF, 0xE0, 0x00, 0x1E,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x0F,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F,
|
||||
0x00, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x07,
|
||||
0x80, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x78, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C,
|
||||
0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07,
|
||||
0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xFF,
|
||||
0xFF, 0xFF, 0xC0, 0xF0, 0x01, 0xC0, 0x07, 0x80, 0x0E, 0x00, 0x38, 0x00,
|
||||
0xF0, 0x01, 0xC0, 0x07, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xC0,
|
||||
0x07, 0x00, 0x1E, 0x00, 0x38, 0x00, 0xF0, 0x01, 0xC0, 0x07, 0x00, 0x1E,
|
||||
0x00, 0x38, 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x1E, 0x00, 0x38, 0x00,
|
||||
0xE0, 0x03, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
|
||||
0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
|
||||
0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0,
|
||||
0x78, 0x3C, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xE0, 0x00, 0x0F, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xB8, 0x00, 0x39, 0xC0, 0x03, 0x1C,
|
||||
0x00, 0x70, 0xE0, 0x07, 0x0E, 0x00, 0xE0, 0x70, 0x0E, 0x07, 0x01, 0xC0,
|
||||
0x38, 0x1C, 0x03, 0x83, 0x80, 0x1C, 0x38, 0x01, 0xC7, 0x00, 0x0E, 0x70,
|
||||
0x00, 0xEF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF1, 0xE1, 0xE1,
|
||||
0xE1, 0xC1, 0xC0, 0x0F, 0xFC, 0x1F, 0xFF, 0x07, 0xEF, 0xC2, 0x01, 0xE0,
|
||||
0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x7F, 0x87, 0xFF,
|
||||
0xCF, 0xFF, 0xEF, 0x80, 0xFF, 0x00, 0x7F, 0x80, 0x3F, 0x80, 0x1F, 0xC0,
|
||||
0x0F, 0xF0, 0x0F, 0xF8, 0x0F, 0xDF, 0x3E, 0xEF, 0xFE, 0x71, 0xFE, 0x38,
|
||||
0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x7F, 0x83,
|
||||
0xDF, 0xFC, 0x7F, 0xFF, 0xCF, 0xC0, 0x79, 0xF0, 0x07, 0xBE, 0x00, 0x77,
|
||||
0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0xFF,
|
||||
0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x00, 0x7F, 0x80, 0x0F, 0xF8, 0x03, 0xDF,
|
||||
0x00, 0x7B, 0xF0, 0x1E, 0x77, 0xDF, 0xCE, 0x7F, 0xF1, 0xC7, 0xF8, 0x00,
|
||||
0x07, 0xFF, 0x0F, 0xFE, 0x1F, 0xFE, 0x3C, 0x02, 0x78, 0x00, 0x78, 0x00,
|
||||
0x70, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0x00,
|
||||
0xF0, 0x00, 0xF0, 0x00, 0x70, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3C, 0x02,
|
||||
0x1F, 0xFE, 0x0F, 0xFE, 0x07, 0xFE, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00,
|
||||
0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00,
|
||||
0x0F, 0x00, 0x01, 0xE0, 0xFF, 0x3C, 0x7F, 0xF7, 0x9F, 0xDF, 0x73, 0xC0,
|
||||
0x7E, 0xF0, 0x07, 0xDE, 0x00, 0x7B, 0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00,
|
||||
0x3F, 0xC0, 0x07, 0xF8, 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x00,
|
||||
0x7B, 0x80, 0x0F, 0x78, 0x01, 0xEF, 0x00, 0x7C, 0xF0, 0x1F, 0x9F, 0xDF,
|
||||
0x71, 0xFF, 0xCE, 0x0F, 0xF1, 0xC0, 0x07, 0xFC, 0x03, 0xFF, 0x81, 0xFB,
|
||||
0xF0, 0xF0, 0x1E, 0x78, 0x07, 0x9E, 0x00, 0xF7, 0x00, 0x3F, 0xC0, 0x0F,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xF0, 0x00, 0x3C,
|
||||
0x00, 0x07, 0x00, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x0F, 0x80, 0x21, 0xFF,
|
||||
0xF8, 0x3F, 0xFE, 0x03, 0xFF, 0x00, 0x01, 0xF8, 0x1F, 0xF0, 0xFF, 0xC3,
|
||||
0xC0, 0x0E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x01, 0xFF, 0xCF,
|
||||
0xFF, 0x3F, 0xFC, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00,
|
||||
0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80,
|
||||
0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0x07,
|
||||
0xF8, 0xE3, 0xFF, 0x9C, 0xFF, 0xFB, 0x9E, 0x03, 0xF7, 0x80, 0x3E, 0xF0,
|
||||
0x03, 0xDC, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xC0,
|
||||
0x07, 0xF8, 0x00, 0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xDC, 0x00, 0x7B, 0xC0,
|
||||
0x0F, 0x78, 0x03, 0xE7, 0x80, 0xFC, 0xFE, 0xFF, 0x8F, 0xFE, 0xF0, 0x7F,
|
||||
0x9E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xC0, 0x00,
|
||||
0x78, 0x80, 0x1F, 0x1F, 0xDF, 0xC3, 0xFF, 0xF0, 0x3F, 0xF8, 0x00, 0xF0,
|
||||
0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00,
|
||||
0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x7F, 0x8F, 0x7F, 0xF3,
|
||||
0xFF, 0xFE, 0xFC, 0x07, 0xBE, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x07, 0xF0,
|
||||
0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00,
|
||||
0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F,
|
||||
0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x70, 0x6F, 0xFF, 0x20, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0x03,
|
||||
0xC1, 0xE0, 0xF0, 0x10, 0x00, 0x00, 0x00, 0x07, 0x83, 0xC1, 0xE0, 0xF0,
|
||||
0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E,
|
||||
0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
|
||||
0xC1, 0xDB, 0xEF, 0xF7, 0xE0, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03,
|
||||
0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0,
|
||||
0x00, 0x3C, 0x03, 0xEF, 0x00, 0xF3, 0xC0, 0x78, 0xF0, 0x3C, 0x3C, 0x1E,
|
||||
0x0F, 0x0F, 0x03, 0xC7, 0x80, 0xF3, 0xC0, 0x3D, 0xE0, 0x0F, 0xF8, 0x03,
|
||||
0xFF, 0x00, 0xFF, 0xC0, 0x3E, 0x78, 0x0F, 0x0F, 0x03, 0xC1, 0xE0, 0xF0,
|
||||
0x78, 0x3C, 0x0F, 0x0F, 0x01, 0xE3, 0xC0, 0x3C, 0xF0, 0x0F, 0x3C, 0x01,
|
||||
0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFC, 0x1F, 0xE3, 0x9F, 0xF8, 0xFF, 0xEF,
|
||||
0xFF, 0xF7, 0xFF, 0xBF, 0x03, 0xF8, 0x0F, 0xF8, 0x07, 0xC0, 0x3F, 0xC0,
|
||||
0x1F, 0x00, 0x7F, 0x00, 0x38, 0x01, 0xFC, 0x00, 0xE0, 0x07, 0xF0, 0x03,
|
||||
0x80, 0x1F, 0xC0, 0x0E, 0x00, 0x7F, 0x00, 0x38, 0x01, 0xFC, 0x00, 0xE0,
|
||||
0x07, 0xF0, 0x03, 0x80, 0x1F, 0xC0, 0x0E, 0x00, 0x7F, 0x00, 0x38, 0x01,
|
||||
0xFC, 0x00, 0xE0, 0x07, 0xF0, 0x03, 0x80, 0x1F, 0xC0, 0x0E, 0x00, 0x7F,
|
||||
0x00, 0x38, 0x01, 0xFC, 0x00, 0xE0, 0x07, 0xF0, 0x03, 0x80, 0x1C, 0xE3,
|
||||
0xFE, 0x39, 0xFF, 0xCF, 0xFF, 0xFB, 0xF0, 0x1E, 0xF8, 0x03, 0xFE, 0x00,
|
||||
0xFF, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F,
|
||||
0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0,
|
||||
0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xC0, 0x07,
|
||||
0xFC, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x83, 0xC0, 0x7C, 0x78, 0x03, 0xC7,
|
||||
0x80, 0x1E, 0x70, 0x01, 0xEF, 0x00, 0x0E, 0xF0, 0x00, 0xEF, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xEF, 0x00, 0x0E, 0x70, 0x01,
|
||||
0xE7, 0x80, 0x1E, 0x78, 0x03, 0xC3, 0xC0, 0x7C, 0x1F, 0xFF, 0x80, 0xFF,
|
||||
0xF0, 0x03, 0xFC, 0x00, 0xE3, 0xFC, 0x1C, 0xFF, 0xE3, 0xFF, 0xFE, 0x7E,
|
||||
0x03, 0xCF, 0x80, 0x3D, 0xE0, 0x07, 0xBC, 0x00, 0x7F, 0x80, 0x0F, 0xF0,
|
||||
0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0xFF, 0x00, 0x1F, 0xE0,
|
||||
0x03, 0xFC, 0x00, 0x7F, 0xC0, 0x1E, 0xF8, 0x03, 0xDF, 0x80, 0xF3, 0xFE,
|
||||
0xFE, 0x7B, 0xFF, 0x8F, 0x3F, 0xC1, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80,
|
||||
0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x00, 0x07, 0xF8, 0xE3, 0xFF, 0x9C, 0xFE, 0xFB, 0x9E,
|
||||
0x03, 0xF7, 0x80, 0x3E, 0xF0, 0x03, 0xDC, 0x00, 0x7F, 0x80, 0x0F, 0xF0,
|
||||
0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0xFF, 0x00, 0x1F, 0xE0,
|
||||
0x03, 0xDC, 0x00, 0x7B, 0xC0, 0x0F, 0x78, 0x03, 0xE7, 0x80, 0xFC, 0xFE,
|
||||
0xFF, 0x8F, 0xFE, 0xF0, 0x7F, 0x9E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00,
|
||||
0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00,
|
||||
0x1E, 0x00, 0x03, 0xC0, 0xE1, 0xFF, 0x1F, 0xB9, 0xFD, 0xFC, 0x0F, 0xC0,
|
||||
0x7C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F,
|
||||
0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0,
|
||||
0x0F, 0x00, 0x00, 0x1F, 0xF8, 0x7F, 0xFD, 0xFB, 0xF7, 0x80, 0x2E, 0x00,
|
||||
0x1C, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x7F, 0x00, 0x7F, 0x80, 0x3F, 0xC0,
|
||||
0x0F, 0xC0, 0x07, 0xC0, 0x03, 0xC0, 0x07, 0x80, 0x07, 0x00, 0x1F, 0x00,
|
||||
0x3F, 0xE3, 0xF7, 0xFF, 0xC7, 0xFE, 0x00, 0x0C, 0x00, 0xC0, 0x1C, 0x01,
|
||||
0xC0, 0x1C, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x01, 0xC0, 0x1C, 0x01,
|
||||
0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x1C, 0x01,
|
||||
0xC0, 0x1C, 0x01, 0xC0, 0x1E, 0x01, 0xFB, 0x0F, 0xF0, 0x7F, 0xF0, 0x03,
|
||||
0xFC, 0x00, 0xFF, 0x00, 0x3F, 0xC0, 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0xFF,
|
||||
0x00, 0x3F, 0xC0, 0x0F, 0xF0, 0x03, 0xFC, 0x00, 0xFF, 0x00, 0x3F, 0xC0,
|
||||
0x0F, 0xF0, 0x03, 0xFC, 0x00, 0xFF, 0x00, 0x3F, 0xC0, 0x0F, 0xF0, 0x07,
|
||||
0xDE, 0x03, 0xF7, 0xF7, 0xDC, 0xFF, 0xE7, 0x1F, 0xF1, 0xC0, 0xF0, 0x00,
|
||||
0xF7, 0x00, 0x0E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x38, 0x01, 0xC3, 0xC0,
|
||||
0x3C, 0x3C, 0x03, 0x81, 0xC0, 0x78, 0x1E, 0x07, 0x80, 0xE0, 0x70, 0x0E,
|
||||
0x0F, 0x00, 0xF0, 0xF0, 0x07, 0x0E, 0x00, 0x79, 0xE0, 0x07, 0x9C, 0x00,
|
||||
0x39, 0xC0, 0x03, 0xBC, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x00,
|
||||
0x00, 0xF0, 0x00, 0xF0, 0x07, 0x80, 0x1D, 0xC0, 0x1F, 0x00, 0xF7, 0x80,
|
||||
0x7C, 0x03, 0xDE, 0x03, 0xF0, 0x0E, 0x38, 0x0E, 0xE0, 0x38, 0xE0, 0x3B,
|
||||
0x81, 0xE3, 0xC1, 0xEE, 0x07, 0x8F, 0x07, 0x3C, 0x1C, 0x1C, 0x1C, 0x70,
|
||||
0x70, 0x70, 0x71, 0xC3, 0xC1, 0xE3, 0x87, 0x8E, 0x03, 0x8E, 0x0E, 0x38,
|
||||
0x0E, 0x38, 0x38, 0xE0, 0x39, 0xC0, 0xE7, 0x80, 0xF7, 0x01, 0xDC, 0x01,
|
||||
0xDC, 0x07, 0x70, 0x07, 0x70, 0x1D, 0xC0, 0x1F, 0x80, 0x7F, 0x00, 0x3E,
|
||||
0x00, 0xF8, 0x00, 0xF8, 0x03, 0xE0, 0x03, 0xC0, 0x0F, 0x80, 0xF0, 0x03,
|
||||
0xEF, 0x00, 0x78, 0xF0, 0x1E, 0x0E, 0x07, 0x81, 0xE0, 0xE0, 0x1E, 0x3C,
|
||||
0x01, 0xCF, 0x00, 0x3D, 0xC0, 0x03, 0xF8, 0x00, 0x3E, 0x00, 0x07, 0xC0,
|
||||
0x01, 0xF8, 0x00, 0x3F, 0x80, 0x0F, 0x78, 0x03, 0xC7, 0x00, 0x70, 0xF0,
|
||||
0x1E, 0x0F, 0x07, 0x80, 0xF1, 0xE0, 0x1E, 0x3C, 0x01, 0xEF, 0x00, 0x1E,
|
||||
0xF0, 0x00, 0xF7, 0x00, 0x0E, 0x78, 0x01, 0xE7, 0x80, 0x1E, 0x38, 0x01,
|
||||
0xC3, 0xC0, 0x3C, 0x1C, 0x03, 0xC1, 0xE0, 0x38, 0x1E, 0x07, 0x80, 0xE0,
|
||||
0x70, 0x0F, 0x0F, 0x00, 0x70, 0xF0, 0x07, 0x0E, 0x00, 0x79, 0xE0, 0x03,
|
||||
0x9E, 0x00, 0x39, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00,
|
||||
0x0F, 0x80, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00,
|
||||
0x01, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0xC0, 0x0D, 0xF8, 0x00, 0xFF, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xE0, 0x03,
|
||||
0x80, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xC0, 0x07, 0x80, 0x1E, 0x00,
|
||||
0x38, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x78, 0x01, 0xE0,
|
||||
0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x78, 0x0F, 0xC0, 0xFE,
|
||||
0x0F, 0x80, 0x78, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01,
|
||||
0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x3C, 0x0F, 0xC0, 0xFC, 0x07, 0xC0,
|
||||
0x3F, 0x80, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00,
|
||||
0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0xC0, 0x1E, 0x00, 0x7F, 0x01,
|
||||
0xF8, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF0, 0x07, 0xE0, 0x3F, 0x80, 0x3C,
|
||||
0x00, 0xF0, 0x07, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0,
|
||||
0x0E, 0x00, 0x70, 0x03, 0x80, 0x1E, 0x00, 0x7E, 0x01, 0xF8, 0x07, 0xC0,
|
||||
0xFE, 0x0F, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38,
|
||||
0x01, 0xC0, 0x0E, 0x00, 0x70, 0x07, 0x80, 0x7C, 0x1F, 0xC0, 0xFC, 0x07,
|
||||
0x80, 0x00, 0x7F, 0x80, 0x7F, 0xF8, 0x3F, 0x7F, 0xFF, 0x03, 0xFE, 0x80,
|
||||
0x1E, 0x00 };
|
||||
|
||||
const GFXglyph NotoSans_Regular20pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 10, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 5, 29, 11, 3, -27 }, // 0x21 '!'
|
||||
{ 20, 10, 10, 16, 3, -27 }, // 0x22 '"'
|
||||
{ 33, 23, 28, 25, 1, -27 }, // 0x23 '#'
|
||||
{ 114, 18, 32, 22, 2, -29 }, // 0x24 '$'
|
||||
{ 186, 29, 28, 33, 2, -27 }, // 0x25 '%'
|
||||
{ 288, 27, 28, 29, 2, -27 }, // 0x26 '&'
|
||||
{ 383, 3, 10, 9, 3, -27 }, // 0x27 '''
|
||||
{ 387, 9, 34, 12, 2, -27 }, // 0x28 '('
|
||||
{ 426, 9, 34, 12, 1, -27 }, // 0x29 ')'
|
||||
{ 465, 18, 18, 22, 2, -29 }, // 0x2A '*'
|
||||
{ 506, 18, 19, 22, 2, -22 }, // 0x2B '+'
|
||||
{ 549, 6, 10, 11, 2, -4 }, // 0x2C ','
|
||||
{ 557, 9, 3, 13, 2, -11 }, // 0x2D '-'
|
||||
{ 561, 5, 6, 11, 3, -4 }, // 0x2E '.'
|
||||
{ 565, 14, 28, 15, 0, -27 }, // 0x2F '/'
|
||||
{ 614, 18, 28, 22, 2, -27 }, // 0x30 '0'
|
||||
{ 677, 11, 28, 22, 3, -27 }, // 0x31 '1'
|
||||
{ 716, 18, 28, 22, 2, -27 }, // 0x32 '2'
|
||||
{ 779, 18, 28, 22, 2, -27 }, // 0x33 '3'
|
||||
{ 842, 21, 28, 22, 1, -27 }, // 0x34 '4'
|
||||
{ 916, 18, 28, 22, 2, -27 }, // 0x35 '5'
|
||||
{ 979, 19, 28, 22, 2, -27 }, // 0x36 '6'
|
||||
{ 1046, 18, 28, 22, 2, -27 }, // 0x37 '7'
|
||||
{ 1109, 18, 28, 22, 2, -27 }, // 0x38 '8'
|
||||
{ 1172, 18, 28, 22, 2, -27 }, // 0x39 '9'
|
||||
{ 1235, 5, 23, 11, 3, -21 }, // 0x3A ':'
|
||||
{ 1250, 7, 27, 11, 1, -21 }, // 0x3B ';'
|
||||
{ 1274, 18, 19, 22, 2, -23 }, // 0x3C '<'
|
||||
{ 1317, 18, 11, 22, 2, -18 }, // 0x3D '='
|
||||
{ 1342, 18, 19, 22, 2, -23 }, // 0x3E '>'
|
||||
{ 1385, 16, 29, 17, 0, -27 }, // 0x3F '?'
|
||||
{ 1443, 31, 31, 35, 2, -27 }, // 0x40 '@'
|
||||
{ 1564, 25, 28, 25, 0, -27 }, // 0x41 'A'
|
||||
{ 1652, 19, 28, 25, 4, -27 }, // 0x42 'B'
|
||||
{ 1719, 22, 28, 25, 2, -27 }, // 0x43 'C'
|
||||
{ 1796, 22, 28, 29, 4, -27 }, // 0x44 'D'
|
||||
{ 1873, 15, 28, 22, 4, -27 }, // 0x45 'E'
|
||||
{ 1926, 15, 28, 20, 4, -27 }, // 0x46 'F'
|
||||
{ 1979, 24, 28, 29, 2, -27 }, // 0x47 'G'
|
||||
{ 2063, 21, 28, 29, 4, -27 }, // 0x48 'H'
|
||||
{ 2137, 10, 28, 13, 2, -27 }, // 0x49 'I'
|
||||
{ 2172, 10, 35, 11, -3, -27 }, // 0x4A 'J'
|
||||
{ 2216, 20, 28, 24, 4, -27 }, // 0x4B 'K'
|
||||
{ 2286, 16, 28, 21, 4, -27 }, // 0x4C 'L'
|
||||
{ 2342, 28, 28, 36, 4, -27 }, // 0x4D 'M'
|
||||
{ 2440, 22, 28, 30, 4, -27 }, // 0x4E 'N'
|
||||
{ 2517, 26, 28, 31, 2, -27 }, // 0x4F 'O'
|
||||
{ 2608, 18, 28, 24, 4, -27 }, // 0x50 'P'
|
||||
{ 2671, 26, 35, 31, 2, -27 }, // 0x51 'Q'
|
||||
{ 2785, 20, 28, 24, 4, -27 }, // 0x52 'R'
|
||||
{ 2855, 18, 28, 22, 2, -27 }, // 0x53 'S'
|
||||
{ 2918, 21, 28, 22, 0, -27 }, // 0x54 'T'
|
||||
{ 2992, 21, 28, 29, 4, -27 }, // 0x55 'U'
|
||||
{ 3066, 24, 28, 24, 0, -27 }, // 0x56 'V'
|
||||
{ 3150, 36, 28, 36, 0, -27 }, // 0x57 'W'
|
||||
{ 3276, 23, 28, 23, 0, -27 }, // 0x58 'X'
|
||||
{ 3357, 22, 28, 22, 0, -27 }, // 0x59 'Y'
|
||||
{ 3434, 20, 28, 22, 1, -27 }, // 0x5A 'Z'
|
||||
{ 3504, 9, 34, 13, 3, -27 }, // 0x5B '['
|
||||
{ 3543, 14, 28, 15, 0, -27 }, // 0x5C '\'
|
||||
{ 3592, 9, 34, 13, 1, -27 }, // 0x5D ']'
|
||||
{ 3631, 20, 18, 22, 1, -27 }, // 0x5E '^'
|
||||
{ 3676, 17, 2, 17, 0, 5 }, // 0x5F '_'
|
||||
{ 3681, 7, 6, 11, 2, -29 }, // 0x60 '`'
|
||||
{ 3687, 17, 21, 22, 2, -20 }, // 0x61 'a'
|
||||
{ 3732, 19, 30, 24, 3, -29 }, // 0x62 'b'
|
||||
{ 3804, 16, 21, 19, 2, -20 }, // 0x63 'c'
|
||||
{ 3846, 19, 30, 24, 2, -29 }, // 0x64 'd'
|
||||
{ 3918, 18, 21, 22, 2, -20 }, // 0x65 'e'
|
||||
{ 3966, 14, 30, 13, 1, -29 }, // 0x66 'f'
|
||||
{ 4019, 19, 30, 24, 2, -20 }, // 0x67 'g'
|
||||
{ 4091, 18, 30, 24, 3, -29 }, // 0x68 'h'
|
||||
{ 4159, 4, 29, 10, 3, -28 }, // 0x69 'i'
|
||||
{ 4174, 9, 38, 10, -2, -28 }, // 0x6A 'j'
|
||||
{ 4217, 18, 30, 21, 3, -29 }, // 0x6B 'k'
|
||||
{ 4285, 4, 30, 10, 3, -29 }, // 0x6C 'l'
|
||||
{ 4300, 30, 21, 37, 3, -20 }, // 0x6D 'm'
|
||||
{ 4379, 18, 21, 24, 3, -20 }, // 0x6E 'n'
|
||||
{ 4427, 20, 21, 24, 2, -20 }, // 0x6F 'o'
|
||||
{ 4480, 19, 30, 24, 3, -20 }, // 0x70 'p'
|
||||
{ 4552, 19, 30, 24, 2, -20 }, // 0x71 'q'
|
||||
{ 4624, 13, 21, 16, 3, -20 }, // 0x72 'r'
|
||||
{ 4659, 15, 21, 19, 2, -20 }, // 0x73 's'
|
||||
{ 4699, 12, 26, 14, 1, -25 }, // 0x74 't'
|
||||
{ 4738, 18, 21, 24, 3, -20 }, // 0x75 'u'
|
||||
{ 4786, 20, 21, 20, 0, -20 }, // 0x76 'v'
|
||||
{ 4839, 30, 21, 31, 0, -20 }, // 0x77 'w'
|
||||
{ 4918, 19, 21, 21, 1, -20 }, // 0x78 'x'
|
||||
{ 4968, 20, 30, 20, 0, -20 }, // 0x79 'y'
|
||||
{ 5043, 15, 21, 18, 2, -20 }, // 0x7A 'z'
|
||||
{ 5083, 13, 34, 15, 1, -27 }, // 0x7B '{'
|
||||
{ 5139, 3, 39, 22, 9, -29 }, // 0x7C '|'
|
||||
{ 5154, 13, 34, 15, 1, -27 }, // 0x7D '}'
|
||||
{ 5210, 18, 5, 22, 2, -15 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Regular20pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Regular20pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Regular20pt7bGlyphs,
|
||||
0x20, 0x7E, 53 };
|
||||
|
||||
// Approx. 5894 bytes
|
||||
|
||||
#endif // NOTOSANS20PT7B_H
|
||||
@@ -1,639 +0,0 @@
|
||||
#ifndef NOTOSANS22PT7B_H
|
||||
#define NOTOSANS22PT7B_H
|
||||
const uint8_t NotoSans_Regular22pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFB, 0xDE, 0xF7, 0xBD, 0xEF, 0x7B, 0xDE, 0xF7, 0xB9, 0xCE, 0x73,
|
||||
0x9C, 0xE7, 0x18, 0x00, 0x00, 0x1F, 0xFF, 0xFD, 0xE4, 0xF0, 0xFF, 0x0F,
|
||||
0xF0, 0xFF, 0x0F, 0xF0, 0xEF, 0x0E, 0xE0, 0xEE, 0x0E, 0xE0, 0xE6, 0x0E,
|
||||
0x60, 0xE0, 0x00, 0x38, 0x1C, 0x00, 0x1E, 0x07, 0x00, 0x07, 0x01, 0xC0,
|
||||
0x01, 0xC0, 0xE0, 0x00, 0x70, 0x38, 0x00, 0x1C, 0x0E, 0x00, 0x0F, 0x03,
|
||||
0x80, 0x03, 0x80, 0xE0, 0x00, 0xE0, 0x70, 0x0F, 0xFF, 0xFF, 0xF3, 0xFF,
|
||||
0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0x70, 0x00, 0x70, 0x38, 0x00,
|
||||
0x1C, 0x0E, 0x00, 0x07, 0x03, 0x80, 0x01, 0xC0, 0xE0, 0x00, 0xE0, 0x38,
|
||||
0x00, 0x38, 0x1C, 0x03, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF,
|
||||
0xFF, 0xC0, 0x70, 0x1C, 0x00, 0x1C, 0x0F, 0x00, 0x07, 0x03, 0x80, 0x01,
|
||||
0xC0, 0xE0, 0x00, 0x70, 0x38, 0x00, 0x3C, 0x0E, 0x00, 0x0E, 0x07, 0x80,
|
||||
0x03, 0x81, 0xC0, 0x00, 0xE0, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00,
|
||||
0x03, 0x80, 0x00, 0x70, 0x00, 0x7F, 0xE0, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3,
|
||||
0xF7, 0x7E, 0xF0, 0xE0, 0x9E, 0x1C, 0x03, 0x83, 0x80, 0x70, 0x70, 0x0F,
|
||||
0x0E, 0x01, 0xE1, 0xC0, 0x3F, 0x38, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x01,
|
||||
0xFF, 0xC0, 0x07, 0xFE, 0x00, 0x7F, 0xE0, 0x0E, 0x7E, 0x01, 0xC3, 0xC0,
|
||||
0x38, 0x78, 0x07, 0x07, 0x00, 0xE1, 0xE0, 0x1C, 0x3F, 0x03, 0x8F, 0xFF,
|
||||
0x7F, 0xEF, 0xFF, 0xF9, 0xFF, 0xFC, 0x07, 0xFC, 0x00, 0x07, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x1F, 0x80, 0x01,
|
||||
0xC0, 0x3F, 0xE0, 0x03, 0x80, 0x3F, 0xE0, 0x07, 0x80, 0x70, 0xF0, 0x07,
|
||||
0x00, 0x70, 0x70, 0x0F, 0x00, 0xF0, 0x70, 0x0E, 0x00, 0xE0, 0x38, 0x1E,
|
||||
0x00, 0xE0, 0x38, 0x1C, 0x00, 0xE0, 0x38, 0x3C, 0x00, 0xE0, 0x38, 0x38,
|
||||
0x00, 0xE0, 0x38, 0x70, 0x00, 0xE0, 0x38, 0x70, 0x00, 0xE0, 0x78, 0xE1,
|
||||
0xE0, 0x70, 0x71, 0xE7, 0xF8, 0x70, 0x71, 0xC7, 0xFC, 0x78, 0xF3, 0xCF,
|
||||
0x1E, 0x3F, 0xE3, 0x8E, 0x0E, 0x3F, 0xE7, 0x9E, 0x0E, 0x0F, 0x87, 0x1C,
|
||||
0x0E, 0x00, 0x0E, 0x1C, 0x0F, 0x00, 0x0E, 0x1C, 0x0F, 0x00, 0x1C, 0x1C,
|
||||
0x07, 0x00, 0x3C, 0x1C, 0x07, 0x00, 0x38, 0x1C, 0x0F, 0x00, 0x78, 0x1C,
|
||||
0x0F, 0x00, 0x70, 0x1C, 0x0E, 0x00, 0xF0, 0x1E, 0x0E, 0x00, 0xE0, 0x0E,
|
||||
0x1E, 0x01, 0xC0, 0x0F, 0xBC, 0x01, 0xC0, 0x07, 0xFC, 0x03, 0x80, 0x03,
|
||||
0xF8, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x03, 0xFF, 0xE0, 0x00,
|
||||
0x1F, 0x0F, 0x80, 0x01, 0xE0, 0x3C, 0x00, 0x0F, 0x00, 0xE0, 0x00, 0x78,
|
||||
0x07, 0x80, 0x03, 0xC0, 0x38, 0x00, 0x1E, 0x03, 0xC0, 0x00, 0x78, 0x1E,
|
||||
0x00, 0x03, 0xE1, 0xE0, 0x00, 0x0F, 0x3E, 0x00, 0x00, 0x3F, 0xE0, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x02, 0x1F,
|
||||
0xFE, 0x01, 0xE1, 0xF1, 0xF8, 0x0F, 0x1F, 0x07, 0xE0, 0x78, 0xF0, 0x1F,
|
||||
0x87, 0x87, 0x80, 0x7E, 0x3C, 0x78, 0x00, 0xFB, 0xC3, 0xC0, 0x03, 0xFE,
|
||||
0x1E, 0x00, 0x0F, 0xE0, 0xF0, 0x00, 0x3E, 0x03, 0xC0, 0x01, 0xF8, 0x1F,
|
||||
0x00, 0x3F, 0xE0, 0xFC, 0x07, 0xEF, 0x83, 0xFF, 0xFE, 0x3E, 0x0F, 0xFF,
|
||||
0xE0, 0xF8, 0x1F, 0xF8, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xEE, 0xE6, 0x60,
|
||||
0x03, 0xC1, 0xE0, 0xF0, 0x38, 0x1E, 0x07, 0x03, 0xC0, 0xF0, 0x78, 0x1E,
|
||||
0x07, 0x81, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
|
||||
0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x01, 0xE0, 0x78,
|
||||
0x1E, 0x03, 0xC0, 0xF0, 0x1C, 0x07, 0x80, 0xE0, 0x3C, 0x07, 0x80, 0xF0,
|
||||
0xF0, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x07, 0x01,
|
||||
0xE0, 0x78, 0x1E, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C,
|
||||
0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x78, 0x1E, 0x07,
|
||||
0x81, 0xE0, 0xF0, 0x3C, 0x1E, 0x07, 0x83, 0xC0, 0xF0, 0x78, 0x3C, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xE0,
|
||||
0x00, 0x0E, 0x00, 0x80, 0xE0, 0x2F, 0x8E, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x0F, 0xFF, 0x00, 0x1F, 0x00, 0x03, 0xF8, 0x00, 0x3B, 0xC0, 0x07,
|
||||
0x9E, 0x00, 0xF1, 0xE0, 0x1F, 0x0F, 0x01, 0xE0, 0xF8, 0x0E, 0x06, 0x00,
|
||||
0x20, 0x40, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00,
|
||||
0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70,
|
||||
0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x70, 0x00, 0x07,
|
||||
0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x07, 0x00, 0x00,
|
||||
0x70, 0x00, 0x07, 0x00, 0x00, 0x70, 0x00, 0x3C, 0xF7, 0xDE, 0x79, 0xE7,
|
||||
0x3C, 0xE3, 0x8E, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xF7, 0x98,
|
||||
0x00, 0x0F, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x3C,
|
||||
0x00, 0x38, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0xE0,
|
||||
0x01, 0xE0, 0x01, 0xE0, 0x01, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0x80,
|
||||
0x07, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x1E, 0x00,
|
||||
0x1E, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x78, 0x00, 0x78, 0x00,
|
||||
0xF0, 0x00, 0x03, 0xFC, 0x00, 0x3F, 0xF8, 0x07, 0xFF, 0xE0, 0x3E, 0x0F,
|
||||
0x83, 0xC0, 0x3C, 0x1E, 0x00, 0xF1, 0xE0, 0x07, 0x8F, 0x00, 0x1E, 0x78,
|
||||
0x00, 0xF3, 0x80, 0x07, 0xBC, 0x00, 0x3D, 0xE0, 0x00, 0xEF, 0x00, 0x07,
|
||||
0x78, 0x00, 0x3B, 0xC0, 0x01, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80,
|
||||
0x03, 0xBC, 0x00, 0x1D, 0xE0, 0x00, 0xEF, 0x00, 0x0F, 0x38, 0x00, 0x79,
|
||||
0xE0, 0x03, 0xCF, 0x00, 0x1E, 0x78, 0x01, 0xE1, 0xE0, 0x0F, 0x0F, 0x00,
|
||||
0xF8, 0x3C, 0x0F, 0x81, 0xFF, 0xF8, 0x07, 0xFF, 0x80, 0x0F, 0xF8, 0x00,
|
||||
0x00, 0xE0, 0x3C, 0x1F, 0x87, 0xF1, 0xEE, 0xF9, 0xFE, 0x3F, 0x87, 0x60,
|
||||
0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0,
|
||||
0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C,
|
||||
0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x03, 0xFC, 0x01, 0xFF, 0xF0,
|
||||
0x3F, 0xFF, 0x8F, 0xE0, 0xFC, 0x78, 0x03, 0xC2, 0x00, 0x1E, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x1E, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00,
|
||||
0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00,
|
||||
0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x7C, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF0, 0x07, 0xFC, 0x01, 0xFF, 0xF0, 0x7F, 0xFF, 0x8F, 0xC0, 0x7C, 0x70,
|
||||
0x03, 0xE2, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xE0,
|
||||
0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x0F, 0xF0,
|
||||
0x07, 0xFC, 0x00, 0x7F, 0xE0, 0x07, 0xFF, 0x80, 0x00, 0x7E, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x0F, 0x00, 0x00, 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xEE, 0x00, 0x7E, 0xFF,
|
||||
0xFF, 0xCF, 0xFF, 0xF0, 0x3F, 0xFE, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x0F,
|
||||
0x80, 0x00, 0x1F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xB8,
|
||||
0x00, 0x0E, 0x70, 0x00, 0x3C, 0xE0, 0x00, 0xF1, 0xC0, 0x01, 0xC3, 0x80,
|
||||
0x07, 0x87, 0x00, 0x1E, 0x0E, 0x00, 0x38, 0x1C, 0x00, 0xF0, 0x38, 0x03,
|
||||
0xC0, 0x70, 0x07, 0x00, 0xE0, 0x1E, 0x01, 0xC0, 0x78, 0x03, 0x81, 0xE0,
|
||||
0x07, 0x03, 0x80, 0x0E, 0x0F, 0x00, 0x1C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, 0x07,
|
||||
0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70,
|
||||
0x00, 0x3F, 0xFF, 0x8F, 0xFF, 0xF1, 0xFF, 0xFE, 0x3F, 0xFF, 0xC7, 0x80,
|
||||
0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x70, 0x00, 0x0E, 0x00,
|
||||
0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x7F, 0x00, 0xFF, 0xFC, 0x3F, 0xFF,
|
||||
0xC1, 0xC3, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0x80, 0x00,
|
||||
0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x7A, 0x00, 0x1F, 0x70, 0x07, 0xCF, 0xFF, 0xF1, 0xFF, 0xFC,
|
||||
0x1F, 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x0F, 0xFE, 0x00, 0xFF, 0xF0, 0x0F,
|
||||
0xC0, 0x00, 0xF8, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00,
|
||||
0x38, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x0F,
|
||||
0xF0, 0x39, 0xFF, 0xC3, 0xDF, 0xFF, 0x1F, 0xE0, 0x7C, 0xFC, 0x01, 0xF7,
|
||||
0xC0, 0x07, 0xBE, 0x00, 0x1D, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xB8, 0x00,
|
||||
0x3D, 0xC0, 0x01, 0xEF, 0x00, 0x0E, 0x78, 0x00, 0xF1, 0xE0, 0x07, 0x8F,
|
||||
0x80, 0x78, 0x3E, 0x07, 0xC0, 0xFF, 0xFC, 0x03, 0xFF, 0xC0, 0x07, 0xF8,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
|
||||
0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x07, 0x80, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x01, 0xE0,
|
||||
0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x00,
|
||||
0x0F, 0x80, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x00, 0x03,
|
||||
0xFE, 0x00, 0xFF, 0xF8, 0x1F, 0xFF, 0xC3, 0xE0, 0x7E, 0x3C, 0x01, 0xE7,
|
||||
0x80, 0x1E, 0x78, 0x00, 0xE7, 0x80, 0x0F, 0x78, 0x00, 0xE7, 0x80, 0x1E,
|
||||
0x3C, 0x01, 0xE3, 0xE0, 0x3C, 0x1F, 0x8F, 0x80, 0xFF, 0xF0, 0x03, 0xFC,
|
||||
0x00, 0x7F, 0xE0, 0x0F, 0xFF, 0x81, 0xF0, 0xFC, 0x3C, 0x03, 0xE7, 0x80,
|
||||
0x1F, 0x70, 0x00, 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x7F, 0x00, 0x0F, 0x78, 0x00, 0xF7, 0xC0, 0x3E, 0x3F, 0xFF, 0xC1,
|
||||
0xFF, 0xF8, 0x07, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0xFF, 0xF0, 0x1F, 0xFF,
|
||||
0x83, 0xE0, 0xFC, 0x7C, 0x03, 0xC7, 0x80, 0x1E, 0x78, 0x01, 0xEF, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xF7, 0x80, 0x0F, 0x78, 0x01, 0xF7, 0xC0, 0x3F, 0x3F, 0xFF, 0x71,
|
||||
0xFF, 0xEF, 0x0F, 0xF8, 0xF0, 0x08, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0E,
|
||||
0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x07,
|
||||
0x80, 0x01, 0xF0, 0x3F, 0xFE, 0x03, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0x37,
|
||||
0xFF, 0xFF, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
|
||||
0xFF, 0xEF, 0x30, 0x0C, 0x7C, 0xF9, 0xF3, 0xE3, 0xC0, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF3, 0xE7, 0x8F, 0x1E,
|
||||
0x78, 0xF1, 0xC3, 0x87, 0x1C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00,
|
||||
0x01, 0xF0, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xF8, 0x00,
|
||||
0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x00, 0xF8, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x7F, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0xFF, 0x00, 0x01, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x10, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0xFC, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07,
|
||||
0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0xF0, 0x00, 0x1F, 0x00,
|
||||
0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x7F, 0x80, 0x1F, 0xC0, 0x0F,
|
||||
0xF0, 0x00, 0xFC, 0x00, 0x0F, 0x00, 0x00, 0x80, 0x00, 0x00, 0x1F, 0xF0,
|
||||
0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0x07, 0xE4, 0x00, 0xF0, 0x00, 0x38, 0x00,
|
||||
0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0x80, 0x03, 0xC0, 0x03, 0xC0,
|
||||
0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0,
|
||||
0x01, 0xE0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00,
|
||||
0x7C, 0x00, 0x3E, 0x00, 0x06, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07,
|
||||
0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x03,
|
||||
0xF0, 0x00, 0x7C, 0x01, 0xF0, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0xF0,
|
||||
0x3C, 0x00, 0x00, 0x1C, 0x1E, 0x00, 0x00, 0x07, 0x87, 0x00, 0xFF, 0xC0,
|
||||
0xE3, 0x80, 0xFF, 0xF8, 0x3C, 0xE0, 0x7E, 0x3E, 0x07, 0x78, 0x1E, 0x07,
|
||||
0x81, 0xDC, 0x0F, 0x01, 0xE0, 0x77, 0x03, 0x80, 0x78, 0x1D, 0xC1, 0xE0,
|
||||
0x1E, 0x07, 0x70, 0x78, 0x07, 0x81, 0xDC, 0x1E, 0x01, 0xC0, 0x7F, 0x07,
|
||||
0x00, 0x70, 0x1F, 0xC1, 0xE0, 0x1C, 0x07, 0x70, 0x78, 0x07, 0x03, 0x9C,
|
||||
0x0E, 0x03, 0xC0, 0xE7, 0x03, 0xC1, 0xF8, 0x79, 0xC0, 0xFD, 0xE7, 0x3C,
|
||||
0x70, 0x1F, 0xF9, 0xFE, 0x0E, 0x01, 0xF8, 0x3F, 0x03, 0x80, 0x00, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0F, 0xC0, 0x1F, 0x00, 0x01, 0xFF,
|
||||
0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
|
||||
0x0F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x00, 0x77, 0x80, 0x00, 0x0E, 0xF0, 0x00, 0x03,
|
||||
0xCE, 0x00, 0x00, 0x71, 0xE0, 0x00, 0x1E, 0x3C, 0x00, 0x03, 0xC3, 0xC0,
|
||||
0x00, 0x70, 0x78, 0x00, 0x1E, 0x07, 0x00, 0x03, 0xC0, 0xF0, 0x00, 0xF0,
|
||||
0x1E, 0x00, 0x1E, 0x01, 0xC0, 0x03, 0x80, 0x3C, 0x00, 0xF0, 0x07, 0x80,
|
||||
0x1F, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xE0, 0x1E, 0x00,
|
||||
0x1E, 0x07, 0x80, 0x03, 0xC0, 0xF0, 0x00, 0x3C, 0x1C, 0x00, 0x07, 0x87,
|
||||
0x80, 0x00, 0xF0, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x01, 0xE7, 0x80, 0x00,
|
||||
0x3E, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x78, 0xFF, 0xF0, 0x03, 0xFF,
|
||||
0xFE, 0x0F, 0xFF, 0xFE, 0x3F, 0xFF, 0xF8, 0xF0, 0x03, 0xF3, 0xC0, 0x03,
|
||||
0xCF, 0x00, 0x0F, 0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xCF,
|
||||
0x00, 0x0F, 0x3C, 0x00, 0x3C, 0xF0, 0x01, 0xE3, 0xFF, 0xFF, 0x0F, 0xFF,
|
||||
0xE0, 0x3F, 0xFF, 0xE0, 0xFF, 0xFF, 0xE3, 0xC0, 0x07, 0xCF, 0x00, 0x0F,
|
||||
0xBC, 0x00, 0x1E, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC,
|
||||
0x00, 0x1F, 0xF0, 0x00, 0x7B, 0xC0, 0x03, 0xEF, 0x00, 0x1F, 0xBC, 0x03,
|
||||
0xFC, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x7F,
|
||||
0xF0, 0x03, 0xFF, 0xFC, 0x1F, 0xFF, 0xF0, 0x7F, 0x83, 0xE1, 0xF8, 0x00,
|
||||
0xC7, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x3E, 0x00, 0x00, 0x78, 0x00, 0x01,
|
||||
0xF0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E,
|
||||
0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1F, 0x00,
|
||||
0x00, 0x1E, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00,
|
||||
0x00, 0x7C, 0x00, 0x00, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF,
|
||||
0x80, 0x3F, 0xFE, 0x00, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xC0, 0x3F, 0xFF,
|
||||
0xF8, 0x1F, 0xFF, 0xFE, 0x0F, 0x00, 0x1F, 0x87, 0x80, 0x03, 0xE3, 0xC0,
|
||||
0x00, 0xF9, 0xE0, 0x00, 0x3C, 0xF0, 0x00, 0x1F, 0x78, 0x00, 0x07, 0xBC,
|
||||
0x00, 0x03, 0xDE, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03,
|
||||
0xFC, 0x00, 0x03, 0xFE, 0x00, 0x01, 0xEF, 0x00, 0x00, 0xF7, 0x80, 0x00,
|
||||
0x7B, 0xC0, 0x00, 0x7D, 0xE0, 0x00, 0x3C, 0xF0, 0x00, 0x3E, 0x78, 0x00,
|
||||
0x3E, 0x3C, 0x00, 0x7E, 0x1E, 0x03, 0xFE, 0x0F, 0xFF, 0xFE, 0x07, 0xFF,
|
||||
0xFC, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00,
|
||||
0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F,
|
||||
0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00,
|
||||
0x3C, 0x00, 0x1E, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0x80, 0x03,
|
||||
0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00,
|
||||
0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFC, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01,
|
||||
0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00,
|
||||
0x07, 0x80, 0x03, 0xC0, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x7F, 0xFF, 0xC0,
|
||||
0xFF, 0xFF, 0xC1, 0xFF, 0x07, 0xE1, 0xF8, 0x00, 0x30, 0xF8, 0x00, 0x00,
|
||||
0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00, 0x00,
|
||||
0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00,
|
||||
0x03, 0xC0, 0x00, 0x01, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x00,
|
||||
0xFF, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0xC0,
|
||||
0x00, 0x3D, 0xE0, 0x00, 0x1E, 0xF8, 0x00, 0x0F, 0x3C, 0x00, 0x07, 0x9F,
|
||||
0x00, 0x03, 0xC7, 0xE0, 0x01, 0xE1, 0xFC, 0x00, 0xF0, 0x7F, 0xFF, 0xF8,
|
||||
0x1F, 0xFF, 0xFC, 0x03, 0xFF, 0xF8, 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, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xF0, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x01, 0xE0, 0x3C, 0x07,
|
||||
0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80,
|
||||
0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0,
|
||||
0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x07, 0xFD, 0xFF, 0xFF, 0xF8, 0x01, 0xE0,
|
||||
0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C,
|
||||
0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07,
|
||||
0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80,
|
||||
0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x0F, 0x47, 0xEF,
|
||||
0xF9, 0xFE, 0x3F, 0x00, 0xF0, 0x00, 0x7D, 0xE0, 0x00, 0xF3, 0xC0, 0x03,
|
||||
0xC7, 0x80, 0x0F, 0x0F, 0x00, 0x3C, 0x1E, 0x00, 0xF0, 0x3C, 0x03, 0xE0,
|
||||
0x78, 0x0F, 0x80, 0xF0, 0x3E, 0x01, 0xE0, 0xF8, 0x03, 0xC3, 0xE0, 0x07,
|
||||
0x87, 0x80, 0x0F, 0x1E, 0x00, 0x1E, 0x78, 0x00, 0x3D, 0xF8, 0x00, 0x7F,
|
||||
0xF0, 0x00, 0xFF, 0xF0, 0x01, 0xF9, 0xF0, 0x03, 0xE1, 0xF0, 0x07, 0x81,
|
||||
0xE0, 0x0F, 0x03, 0xE0, 0x1E, 0x03, 0xE0, 0x3C, 0x03, 0xC0, 0x78, 0x03,
|
||||
0xC0, 0xF0, 0x07, 0xC1, 0xE0, 0x07, 0xC3, 0xC0, 0x07, 0x87, 0x80, 0x0F,
|
||||
0x8F, 0x00, 0x0F, 0x9E, 0x00, 0x0F, 0xBC, 0x00, 0x0F, 0x80, 0xF0, 0x00,
|
||||
0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F,
|
||||
0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0,
|
||||
0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00,
|
||||
0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F,
|
||||
0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0,
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0x00, 0x00, 0x7F,
|
||||
0xF8, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFE,
|
||||
0xF0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0xFD, 0xC0, 0x00, 0x77, 0xFB,
|
||||
0xC0, 0x01, 0xEF, 0xF7, 0x80, 0x03, 0xDF, 0xE7, 0x00, 0x07, 0x3F, 0xCF,
|
||||
0x00, 0x1E, 0x7F, 0x9E, 0x00, 0x38, 0xFF, 0x1E, 0x00, 0xF1, 0xFE, 0x3C,
|
||||
0x01, 0xE3, 0xFC, 0x38, 0x03, 0x87, 0xF8, 0x78, 0x0F, 0x0F, 0xF0, 0xF0,
|
||||
0x1C, 0x1F, 0xE0, 0xE0, 0x38, 0x3F, 0xC1, 0xE0, 0xF0, 0x7F, 0x83, 0xC1,
|
||||
0xC0, 0xFF, 0x03, 0xC7, 0x81, 0xFE, 0x07, 0x8F, 0x03, 0xFC, 0x07, 0x1C,
|
||||
0x07, 0xF8, 0x0F, 0x78, 0x0F, 0xF0, 0x1E, 0xE0, 0x1F, 0xE0, 0x1F, 0xC0,
|
||||
0x3F, 0xC0, 0x3F, 0x80, 0x7F, 0x80, 0x7E, 0x00, 0xFF, 0x00, 0x7C, 0x01,
|
||||
0xFE, 0x00, 0xF8, 0x03, 0xFC, 0x00, 0xE0, 0x07, 0x80, 0xF8, 0x00, 0x07,
|
||||
0xFC, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00,
|
||||
0x7F, 0x78, 0x00, 0x3F, 0xBE, 0x00, 0x1F, 0xEF, 0x00, 0x0F, 0xF3, 0xC0,
|
||||
0x07, 0xF9, 0xF0, 0x03, 0xFC, 0x78, 0x01, 0xFE, 0x3E, 0x00, 0xFF, 0x0F,
|
||||
0x80, 0x7F, 0x83, 0xC0, 0x3F, 0xC1, 0xF0, 0x1F, 0xE0, 0x7C, 0x0F, 0xF0,
|
||||
0x1E, 0x07, 0xF8, 0x0F, 0x83, 0xFC, 0x03, 0xC1, 0xFE, 0x00, 0xF0, 0xFF,
|
||||
0x00, 0x7C, 0x7F, 0x80, 0x1E, 0x3F, 0xC0, 0x07, 0x9F, 0xE0, 0x03, 0xEF,
|
||||
0xF0, 0x00, 0xF7, 0xF8, 0x00, 0x7F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x07,
|
||||
0xFF, 0x00, 0x03, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x3E, 0x00, 0x7F,
|
||||
0xE0, 0x00, 0x3F, 0xFF, 0x80, 0x07, 0xFF, 0xFE, 0x00, 0xFE, 0x07, 0xF0,
|
||||
0x1F, 0x00, 0x1F, 0x83, 0xE0, 0x00, 0x78, 0x3C, 0x00, 0x03, 0xC7, 0x80,
|
||||
0x00, 0x3C, 0x78, 0x00, 0x01, 0xEF, 0x80, 0x00, 0x1E, 0xF0, 0x00, 0x01,
|
||||
0xEF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFF,
|
||||
0x80, 0x00, 0x1E, 0x78, 0x00, 0x01, 0xE7, 0x80, 0x00, 0x3E, 0x7C, 0x00,
|
||||
0x03, 0xC3, 0xE0, 0x00, 0x7C, 0x1F, 0x00, 0x0F, 0x81, 0xFC, 0x03, 0xF0,
|
||||
0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xF0, 0x00, 0xFF,
|
||||
0xF0, 0x0F, 0xFF, 0xE0, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0xF0, 0x07, 0xEF,
|
||||
0x00, 0x3E, 0xF0, 0x01, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x01, 0xEF, 0x00, 0x1E, 0xF0, 0x07,
|
||||
0xCF, 0x03, 0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xE0, 0xFF, 0xF8, 0x0F, 0x00,
|
||||
0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F,
|
||||
0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xFF, 0x80,
|
||||
0x07, 0xFF, 0xFE, 0x00, 0xFE, 0x07, 0xF0, 0x1F, 0x00, 0x1F, 0x83, 0xE0,
|
||||
0x00, 0x78, 0x3C, 0x00, 0x03, 0xC7, 0x80, 0x00, 0x3C, 0x78, 0x00, 0x01,
|
||||
0xEF, 0x80, 0x00, 0x1E, 0xF0, 0x00, 0x01, 0xEF, 0x00, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x1E, 0x78, 0x00,
|
||||
0x01, 0xE7, 0x80, 0x00, 0x3E, 0x7C, 0x00, 0x03, 0xC3, 0xE0, 0x00, 0x7C,
|
||||
0x1F, 0x00, 0x0F, 0x81, 0xFC, 0x03, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0x3F,
|
||||
0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8,
|
||||
0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03, 0xF0, 0x00,
|
||||
0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0xFF, 0xF0, 0x03, 0xFF, 0xFC, 0x0F,
|
||||
0xFF, 0xF8, 0x3F, 0xFF, 0xF0, 0xF0, 0x07, 0xE3, 0xC0, 0x07, 0x8F, 0x00,
|
||||
0x1F, 0x3C, 0x00, 0x3C, 0xF0, 0x00, 0xF3, 0xC0, 0x03, 0xCF, 0x00, 0x0F,
|
||||
0x3C, 0x00, 0x7C, 0xF0, 0x01, 0xE3, 0xC0, 0x0F, 0x8F, 0x00, 0xFC, 0x3F,
|
||||
0xFF, 0xE0, 0xFF, 0xFE, 0x03, 0xFF, 0xF0, 0x0F, 0x03, 0xC0, 0x3C, 0x07,
|
||||
0x80, 0xF0, 0x1F, 0x03, 0xC0, 0x3C, 0x0F, 0x00, 0x78, 0x3C, 0x01, 0xF0,
|
||||
0xF0, 0x03, 0xC3, 0xC0, 0x0F, 0x8F, 0x00, 0x1E, 0x3C, 0x00, 0x3C, 0xF0,
|
||||
0x00, 0xFB, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xC0, 0x03, 0xFF, 0x00, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0xE3, 0xF0, 0x7C, 0x7C, 0x00, 0x47, 0x80, 0x00, 0x78,
|
||||
0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xE0,
|
||||
0x00, 0xFF, 0x80, 0x03, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01,
|
||||
0xE0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x1E, 0x80, 0x03, 0xEF, 0x00, 0x7C, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0x7F,
|
||||
0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E,
|
||||
0x00, 0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00,
|
||||
0x00, 0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00,
|
||||
0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 0x1E, 0x00, 0x00,
|
||||
0x3C, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x07, 0x80, 0x00, 0x0F, 0x00, 0x00, 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, 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, 0x0E, 0xF0, 0x00, 0x1E, 0xF0, 0x00, 0x1E, 0x78, 0x00, 0x1E, 0x78,
|
||||
0x00, 0x3C, 0x7C, 0x00, 0x7C, 0x3F, 0x01, 0xF8, 0x1F, 0xFF, 0xF0, 0x0F,
|
||||
0xFF, 0xE0, 0x03, 0xFF, 0x80, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xE7,
|
||||
0x80, 0x00, 0x79, 0xE0, 0x00, 0x1E, 0x3C, 0x00, 0x0F, 0x0F, 0x00, 0x03,
|
||||
0xC3, 0xC0, 0x00, 0xF0, 0x78, 0x00, 0x78, 0x1E, 0x00, 0x1E, 0x07, 0x80,
|
||||
0x0F, 0x80, 0xF0, 0x03, 0xC0, 0x3C, 0x00, 0xF0, 0x0F, 0x00, 0x78, 0x01,
|
||||
0xE0, 0x1E, 0x00, 0x78, 0x07, 0x80, 0x1E, 0x03, 0xC0, 0x03, 0xC0, 0xF0,
|
||||
0x00, 0xF0, 0x3C, 0x00, 0x1C, 0x1E, 0x00, 0x07, 0x87, 0x80, 0x01, 0xE1,
|
||||
0xE0, 0x00, 0x3C, 0xF0, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0xCF, 0x00, 0x00,
|
||||
0x77, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00,
|
||||
0x00, 0x3F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xE0, 0x00, 0xF0, 0x00,
|
||||
0x78, 0x00, 0x3F, 0xE0, 0x01, 0xF0, 0x00, 0x7B, 0xC0, 0x03, 0xF0, 0x00,
|
||||
0xF7, 0x80, 0x07, 0xE0, 0x01, 0xE7, 0x80, 0x0F, 0xC0, 0x07, 0x8F, 0x00,
|
||||
0x3F, 0x80, 0x0F, 0x1E, 0x00, 0x7F, 0x80, 0x1E, 0x3C, 0x00, 0xEF, 0x00,
|
||||
0x3C, 0x3C, 0x03, 0xCE, 0x00, 0xF0, 0x78, 0x07, 0x9E, 0x01, 0xE0, 0xF0,
|
||||
0x0F, 0x3C, 0x03, 0xC0, 0xE0, 0x1C, 0x38, 0x07, 0x81, 0xE0, 0x78, 0x78,
|
||||
0x1E, 0x03, 0xC0, 0xF0, 0xF0, 0x3C, 0x07, 0x81, 0xC1, 0xE0, 0x78, 0x07,
|
||||
0x07, 0x81, 0xE0, 0xE0, 0x0F, 0x0F, 0x03, 0xC3, 0xC0, 0x1E, 0x1E, 0x07,
|
||||
0x87, 0x80, 0x3C, 0x38, 0x07, 0x0F, 0x00, 0x38, 0xF0, 0x0F, 0x1C, 0x00,
|
||||
0x79, 0xE0, 0x1E, 0x78, 0x00, 0xF3, 0x80, 0x1C, 0xF0, 0x01, 0xEF, 0x00,
|
||||
0x39, 0xE0, 0x01, 0xDE, 0x00, 0x7B, 0x80, 0x03, 0xF8, 0x00, 0xFF, 0x00,
|
||||
0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x0F, 0xC0,
|
||||
0x03, 0xF0, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0,
|
||||
0x00, 0x3C, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x0F, 0x1E, 0x00, 0x0F,
|
||||
0x8F, 0x80, 0x07, 0x83, 0xC0, 0x07, 0x80, 0xF0, 0x03, 0xC0, 0x78, 0x03,
|
||||
0xC0, 0x1E, 0x03, 0xC0, 0x07, 0x81, 0xE0, 0x03, 0xC1, 0xE0, 0x00, 0xF1,
|
||||
0xE0, 0x00, 0x7C, 0xF0, 0x00, 0x1E, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x03,
|
||||
0xF8, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7F, 0x00, 0x00,
|
||||
0x3F, 0x80, 0x00, 0x3D, 0xE0, 0x00, 0x3C, 0x78, 0x00, 0x1E, 0x3C, 0x00,
|
||||
0x1E, 0x0F, 0x00, 0x0F, 0x03, 0xC0, 0x0F, 0x01, 0xE0, 0x0F, 0x00, 0x78,
|
||||
0x07, 0x80, 0x3E, 0x07, 0x80, 0x0F, 0x07, 0x80, 0x03, 0xC3, 0xC0, 0x01,
|
||||
0xE3, 0xC0, 0x00, 0x7B, 0xE0, 0x00, 0x3E, 0xF0, 0x00, 0x0F, 0x78, 0x00,
|
||||
0x0F, 0x78, 0x00, 0x1E, 0x3C, 0x00, 0x3E, 0x3C, 0x00, 0x3C, 0x1E, 0x00,
|
||||
0x7C, 0x1F, 0x00, 0x78, 0x0F, 0x00, 0xF0, 0x0F, 0x80, 0xF0, 0x07, 0x81,
|
||||
0xE0, 0x03, 0xC1, 0xE0, 0x03, 0xC3, 0xC0, 0x01, 0xE3, 0xC0, 0x01, 0xE7,
|
||||
0x80, 0x00, 0xF7, 0x80, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7E,
|
||||
0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C,
|
||||
0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C,
|
||||
0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x3C,
|
||||
0x00, 0x00, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00,
|
||||
0xF8, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0xC0, 0x00, 0x3C, 0x00,
|
||||
0x03, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x01, 0xF0,
|
||||
0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x78, 0x00, 0x07,
|
||||
0x80, 0x00, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x03, 0xE0, 0x00,
|
||||
0x1E, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
|
||||
0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C,
|
||||
0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03,
|
||||
0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0xF0, 0x00, 0x78, 0x00, 0x78, 0x00, 0x38, 0x00, 0x3C, 0x00,
|
||||
0x3C, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x0F, 0x00,
|
||||
0x07, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0x80, 0x03, 0xC0, 0x03, 0xC0,
|
||||
0x01, 0xE0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x70,
|
||||
0x00, 0x78, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x1E,
|
||||
0x00, 0x1E, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0x03, 0xC0, 0xF0,
|
||||
0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F,
|
||||
0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0,
|
||||
0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3F,
|
||||
0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x60, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00,
|
||||
0x03, 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xCE, 0x00, 0x0E, 0x70, 0x00, 0xE1,
|
||||
0xC0, 0x07, 0x0E, 0x00, 0x70, 0x38, 0x03, 0x81, 0xC0, 0x3C, 0x07, 0x01,
|
||||
0xC0, 0x38, 0x1E, 0x00, 0xE0, 0xE0, 0x07, 0x0F, 0x00, 0x1C, 0x70, 0x00,
|
||||
0xE3, 0x80, 0x03, 0xB8, 0x00, 0x1D, 0xC0, 0x00, 0x70, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xF0, 0xF8, 0x7C, 0x3C, 0x1E, 0x0F, 0x07,
|
||||
0x07, 0xFE, 0x03, 0xFF, 0xF0, 0x7F, 0xFF, 0x0E, 0x03, 0xE0, 0x00, 0x3C,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x1F, 0xFC,
|
||||
0x3F, 0xFF, 0x9F, 0xFF, 0xF7, 0xE0, 0x1E, 0xF0, 0x03, 0xFC, 0x00, 0x7F,
|
||||
0x80, 0x0F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, 0x1F, 0xFC, 0x07, 0xF7,
|
||||
0xFF, 0xDE, 0x7F, 0xF1, 0xC7, 0xFC, 0x38, 0xE0, 0x00, 0x0E, 0x00, 0x00,
|
||||
0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE3, 0xFE, 0x0E, 0x7F,
|
||||
0xF0, 0xEF, 0xFF, 0xCF, 0xC0, 0x7C, 0xF8, 0x03, 0xEF, 0x00, 0x1E, 0xF0,
|
||||
0x01, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x00, 0xFE,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F,
|
||||
0xF0, 0x01, 0xFF, 0x80, 0x1E, 0xF8, 0x03, 0xEF, 0xC0, 0x7C, 0xEF, 0xFF,
|
||||
0x8E, 0x7F, 0xF0, 0xE3, 0xFE, 0x00, 0x00, 0x10, 0x01, 0xFF, 0xC3, 0xFF,
|
||||
0xE3, 0xFF, 0xF3, 0xF0, 0x11, 0xE0, 0x01, 0xF0, 0x00, 0xF0, 0x00, 0x78,
|
||||
0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03,
|
||||
0xC0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x07, 0x80,
|
||||
0x03, 0xF0, 0x18, 0xFF, 0xFC, 0x3F, 0xFE, 0x07, 0xFE, 0x00, 0x00, 0x78,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00,
|
||||
0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x03, 0x03, 0xC1,
|
||||
0xFF, 0x1E, 0x1F, 0xFE, 0xF1, 0xFF, 0xFF, 0x9F, 0x01, 0xFC, 0xF0, 0x07,
|
||||
0xEF, 0x80, 0x1F, 0x78, 0x00, 0xFB, 0xC0, 0x03, 0xDE, 0x00, 0x1F, 0xE0,
|
||||
0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00, 0x0F,
|
||||
0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDE, 0x00, 0x3E, 0xF8, 0x01, 0xF3, 0xC0,
|
||||
0x1F, 0x9F, 0x01, 0xFC, 0x7F, 0xFF, 0xE1, 0xFF, 0xEF, 0x03, 0xFC, 0x38,
|
||||
0x00, 0x20, 0x00, 0x3F, 0xE0, 0x0F, 0xFF, 0x81, 0xFF, 0xFC, 0x1E, 0x03,
|
||||
0xC3, 0xC0, 0x1E, 0x78, 0x01, 0xE7, 0x80, 0x0F, 0x78, 0x00, 0xF7, 0x00,
|
||||
0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF0,
|
||||
0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, 0x7C, 0x00, 0x03,
|
||||
0xE0, 0x00, 0x1F, 0x00, 0x61, 0xFF, 0xFE, 0x07, 0xFF, 0xE0, 0x3F, 0xFC,
|
||||
0x00, 0xFE, 0x03, 0xFF, 0x07, 0xFE, 0x07, 0xC2, 0x0F, 0x00, 0x0F, 0x00,
|
||||
0x0F, 0x00, 0x0F, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x7F, 0xF8, 0xFF, 0xF8,
|
||||
0xFF, 0xF8, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00,
|
||||
0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00,
|
||||
0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00,
|
||||
0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x00, 0x60, 0x00, 0x3F, 0xE1, 0xC3,
|
||||
0xFF, 0xCE, 0x3F, 0xFF, 0xF3, 0xE0, 0x3F, 0x9E, 0x00, 0xFD, 0xF0, 0x03,
|
||||
0xEF, 0x00, 0x1F, 0x78, 0x00, 0x7B, 0xC0, 0x03, 0xFC, 0x00, 0x1F, 0xE0,
|
||||
0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xE0, 0x01, 0xEF, 0x00, 0x0F,
|
||||
0x78, 0x00, 0x7B, 0xC0, 0x03, 0xDF, 0x00, 0x3E, 0x78, 0x03, 0xF3, 0xE0,
|
||||
0x3F, 0x8F, 0xFF, 0xFC, 0x3F, 0xFD, 0xE0, 0x7F, 0x8F, 0x00, 0x00, 0x78,
|
||||
0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x10, 0x00,
|
||||
0xF8, 0xE0, 0x0F, 0x87, 0xFF, 0xFC, 0x3F, 0xFF, 0xC0, 0x7F, 0xF8, 0x00,
|
||||
0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01,
|
||||
0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03,
|
||||
0x8F, 0xFC, 0x73, 0xFF, 0xCE, 0xFF, 0xFD, 0xF8, 0x0F, 0xBE, 0x00, 0xFF,
|
||||
0xC0, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0xFE,
|
||||
0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC,
|
||||
0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03, 0xF8,
|
||||
0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xE0, 0x33, 0xFF, 0xF7, 0x00, 0x00,
|
||||
0x03, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C,
|
||||
0xE7, 0x39, 0xCE, 0x01, 0x80, 0xF0, 0x7C, 0x1F, 0x03, 0x80, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03,
|
||||
0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0,
|
||||
0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E,
|
||||
0x03, 0x81, 0xE0, 0x7B, 0xFE, 0xFF, 0x3F, 0x80, 0xE0, 0x00, 0x1C, 0x00,
|
||||
0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00,
|
||||
0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x1F, 0x70, 0x07,
|
||||
0x8E, 0x01, 0xF1, 0xC0, 0x7C, 0x38, 0x1F, 0x07, 0x07, 0xC0, 0xE1, 0xF0,
|
||||
0x1C, 0x7C, 0x03, 0x9F, 0x00, 0x73, 0xC0, 0x0E, 0xF8, 0x01, 0xFF, 0x80,
|
||||
0x3F, 0xF8, 0x07, 0xCF, 0x00, 0xE0, 0xF0, 0x1C, 0x1F, 0x03, 0x81, 0xF0,
|
||||
0x70, 0x1E, 0x0E, 0x01, 0xE1, 0xC0, 0x3E, 0x38, 0x03, 0xE7, 0x00, 0x3C,
|
||||
0xE0, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x20, 0x00, 0xC0, 0x71, 0xFF, 0x03, 0xFE,
|
||||
0x39, 0xFF, 0xC7, 0xFF, 0x9D, 0xFF, 0xF7, 0xFF, 0xEF, 0xC0, 0x7F, 0x81,
|
||||
0xF7, 0xC0, 0x3F, 0x80, 0x7B, 0xC0, 0x0F, 0x80, 0x1F, 0xE0, 0x07, 0xC0,
|
||||
0x0F, 0xF0, 0x03, 0xC0, 0x07, 0xF8, 0x01, 0xE0, 0x03, 0xFC, 0x00, 0xF0,
|
||||
0x01, 0xFC, 0x00, 0x78, 0x00, 0xFE, 0x00, 0x3C, 0x00, 0x7F, 0x00, 0x1E,
|
||||
0x00, 0x3F, 0x80, 0x0F, 0x00, 0x1F, 0xC0, 0x07, 0x80, 0x0F, 0xE0, 0x03,
|
||||
0xC0, 0x07, 0xF0, 0x01, 0xE0, 0x03, 0xF8, 0x00, 0xF0, 0x01, 0xFC, 0x00,
|
||||
0x78, 0x00, 0xFE, 0x00, 0x3C, 0x00, 0x7F, 0x00, 0x1E, 0x00, 0x3F, 0x80,
|
||||
0x0F, 0x00, 0x1F, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x30, 0x1C, 0x7F, 0xE3,
|
||||
0x9F, 0xFE, 0x77, 0xFF, 0xEF, 0xC0, 0x7D, 0xF0, 0x07, 0xFC, 0x00, 0x7F,
|
||||
0x80, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x07, 0xF0, 0x00, 0xFE,
|
||||
0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC,
|
||||
0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03, 0xF8,
|
||||
0x00, 0x7F, 0x00, 0x0F, 0x00, 0x10, 0x00, 0x0F, 0xFC, 0x00, 0xFF, 0xFC,
|
||||
0x07, 0xFF, 0xF8, 0x3E, 0x03, 0xE0, 0xF0, 0x03, 0xC7, 0xC0, 0x0F, 0x9E,
|
||||
0x00, 0x1E, 0x78, 0x00, 0x79, 0xE0, 0x00, 0xEF, 0x00, 0x03, 0xFC, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xDE, 0x00, 0x0E,
|
||||
0x78, 0x00, 0x79, 0xE0, 0x01, 0xE3, 0xC0, 0x0F, 0x8F, 0x00, 0x3C, 0x1F,
|
||||
0x03, 0xE0, 0x3F, 0xFF, 0x80, 0x7F, 0xFC, 0x00, 0xFF, 0xC0, 0x00, 0x20,
|
||||
0x0E, 0x3F, 0xE0, 0xE7, 0xFF, 0x8E, 0xFF, 0xFC, 0xFC, 0x07, 0xCF, 0x80,
|
||||
0x3E, 0xF0, 0x01, 0xEF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0xFF,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x1E, 0xF8, 0x01, 0xEF, 0x80, 0x3E,
|
||||
0xFE, 0x07, 0xCE, 0xFF, 0xF8, 0xE7, 0xFF, 0x0E, 0x3F, 0xE0, 0xE0, 0x00,
|
||||
0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00,
|
||||
0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0x00,
|
||||
0x60, 0x00, 0x1F, 0xE1, 0xC3, 0xFF, 0xCE, 0x3F, 0xFF, 0xF3, 0xE0, 0x3F,
|
||||
0x9E, 0x00, 0xFD, 0xF0, 0x03, 0xEF, 0x00, 0x1F, 0x78, 0x00, 0x7B, 0xC0,
|
||||
0x03, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x3F,
|
||||
0xC0, 0x01, 0xEF, 0x00, 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x07, 0xDF, 0x00,
|
||||
0x3E, 0x78, 0x03, 0xF3, 0xE0, 0x3F, 0x8F, 0xFF, 0xFC, 0x3F, 0xFD, 0xE0,
|
||||
0x7F, 0x8F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00,
|
||||
0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00,
|
||||
0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x27, 0x0F, 0xF9, 0xFF, 0xDF, 0xFE,
|
||||
0xF0, 0x7E, 0x03, 0xE0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xC0,
|
||||
0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01,
|
||||
0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0x00, 0xC0, 0x07, 0xFF,
|
||||
0x0F, 0xFF, 0xCF, 0xFF, 0xE7, 0x80, 0x67, 0x80, 0x03, 0xC0, 0x01, 0xE0,
|
||||
0x00, 0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0x7F, 0xC0,
|
||||
0x0F, 0xF0, 0x00, 0xFC, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01,
|
||||
0xE0, 0x00, 0xEE, 0x00, 0xF7, 0xFF, 0xF3, 0xFF, 0xF8, 0xFF, 0xF0, 0x0E,
|
||||
0x00, 0x38, 0x00, 0xE0, 0x07, 0x80, 0x1E, 0x01, 0xFF, 0xEF, 0xFF, 0xBF,
|
||||
0xFE, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01,
|
||||
0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00,
|
||||
0x78, 0x01, 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x3F, 0xF0, 0x7F, 0xC0, 0xFF,
|
||||
0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xF7, 0x80, 0x1F, 0x78, 0x03, 0xF7,
|
||||
0xC0, 0x7F, 0x3F, 0xFF, 0xF1, 0xFF, 0xE7, 0x0F, 0xF8, 0x70, 0xF0, 0x00,
|
||||
0x3D, 0xE0, 0x01, 0xE7, 0x80, 0x07, 0x9E, 0x00, 0x1E, 0x3C, 0x00, 0xF0,
|
||||
0xF0, 0x03, 0xC1, 0xC0, 0x1E, 0x07, 0x80, 0x78, 0x1E, 0x01, 0xE0, 0x3C,
|
||||
0x0F, 0x00, 0xF0, 0x3C, 0x03, 0xC0, 0xE0, 0x07, 0x87, 0x80, 0x1E, 0x1E,
|
||||
0x00, 0x38, 0x70, 0x00, 0xF3, 0xC0, 0x03, 0xCF, 0x00, 0x07, 0x38, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x07,
|
||||
0x80, 0x00, 0xF8, 0x01, 0xE0, 0x07, 0xBC, 0x01, 0xF8, 0x03, 0xDE, 0x00,
|
||||
0xFC, 0x01, 0xEF, 0x00, 0x7E, 0x00, 0xE3, 0xC0, 0x7F, 0x00, 0xF1, 0xE0,
|
||||
0x3B, 0xC0, 0x78, 0xF0, 0x1C, 0xE0, 0x3C, 0x38, 0x1E, 0x70, 0x1C, 0x1E,
|
||||
0x0F, 0x3C, 0x1E, 0x0F, 0x07, 0x1E, 0x0F, 0x07, 0x83, 0x87, 0x07, 0x01,
|
||||
0xC3, 0xC3, 0xC7, 0x80, 0xF1, 0xC1, 0xE3, 0xC0, 0x78, 0xE0, 0x71, 0xE0,
|
||||
0x3C, 0xF0, 0x38, 0xE0, 0x0E, 0x70, 0x1E, 0xF0, 0x07, 0xB8, 0x07, 0x78,
|
||||
0x03, 0xDC, 0x03, 0xBC, 0x00, 0xFE, 0x01, 0xDC, 0x00, 0x7E, 0x00, 0xFE,
|
||||
0x00, 0x3F, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x1F, 0x00, 0x07, 0x80, 0x0F,
|
||||
0x80, 0xF8, 0x00, 0xFB, 0xE0, 0x0F, 0x0F, 0x00, 0x78, 0x3C, 0x07, 0x81,
|
||||
0xF0, 0x78, 0x07, 0x83, 0xC0, 0x1E, 0x3C, 0x00, 0x7B, 0xC0, 0x03, 0xFE,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0xC0, 0x01,
|
||||
0xFE, 0x00, 0x0F, 0x78, 0x00, 0xF1, 0xE0, 0x0F, 0x8F, 0x00, 0x78, 0x3C,
|
||||
0x07, 0x80, 0xF0, 0x78, 0x07, 0xC3, 0xC0, 0x1E, 0x3C, 0x00, 0x7B, 0xC0,
|
||||
0x03, 0xE0, 0xF0, 0x00, 0x3D, 0xE0, 0x01, 0xE7, 0x80, 0x07, 0x9E, 0x00,
|
||||
0x1E, 0x3C, 0x00, 0xF0, 0xF0, 0x03, 0xC1, 0xE0, 0x1E, 0x07, 0x80, 0x78,
|
||||
0x1E, 0x01, 0xE0, 0x3C, 0x0F, 0x00, 0xF0, 0x3C, 0x01, 0xC0, 0xF0, 0x07,
|
||||
0x87, 0x80, 0x0E, 0x1E, 0x00, 0x3C, 0x70, 0x00, 0xF3, 0xC0, 0x01, 0xCF,
|
||||
0x00, 0x07, 0xB8, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00,
|
||||
0x01, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0x78, 0x00, 0x03,
|
||||
0xC0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00,
|
||||
0x0F, 0xFC, 0x00, 0x3F, 0xE0, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0x7F,
|
||||
0xFF, 0xBF, 0xFF, 0xC0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x00, 0xF0,
|
||||
0x00, 0xF0, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78,
|
||||
0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x1E, 0x00, 0x1E,
|
||||
0x00, 0x1E, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x1C,
|
||||
0x01, 0xF0, 0x1F, 0xC0, 0xFE, 0x03, 0xC0, 0x0F, 0x00, 0x78, 0x01, 0xE0,
|
||||
0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78,
|
||||
0x01, 0xE0, 0x0F, 0x83, 0xFC, 0x0F, 0xC0, 0x3F, 0x00, 0xFF, 0x00, 0x3E,
|
||||
0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07,
|
||||
0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x03, 0xC0, 0x0F, 0x00, 0x3F, 0x80,
|
||||
0x7F, 0x00, 0xFC, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x03,
|
||||
0xF0, 0x0F, 0xE0, 0x1F, 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x78, 0x01, 0xE0,
|
||||
0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78,
|
||||
0x01, 0xE0, 0x03, 0xC0, 0x07, 0xF0, 0x0F, 0xC0, 0x1F, 0x01, 0xFC, 0x0F,
|
||||
0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07,
|
||||
0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x07, 0xF0, 0x3F,
|
||||
0x80, 0xFC, 0x03, 0x80, 0x00, 0x1F, 0x80, 0x17, 0xFE, 0x01, 0xFF, 0xFE,
|
||||
0xFE, 0x0F, 0xFF, 0xC0, 0x3F, 0xE8, 0x00, 0x78 };
|
||||
|
||||
const GFXglyph NotoSans_Regular22pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 11, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 5, 32, 12, 3, -30 }, // 0x21 '!'
|
||||
{ 21, 12, 11, 18, 3, -30 }, // 0x22 '"'
|
||||
{ 38, 26, 31, 28, 1, -30 }, // 0x23 '#'
|
||||
{ 139, 19, 36, 25, 3, -32 }, // 0x24 '$'
|
||||
{ 225, 32, 31, 36, 2, -30 }, // 0x25 '%'
|
||||
{ 349, 29, 31, 32, 2, -30 }, // 0x26 '&'
|
||||
{ 462, 4, 11, 10, 3, -30 }, // 0x27 '''
|
||||
{ 468, 10, 38, 13, 2, -30 }, // 0x28 '('
|
||||
{ 516, 10, 38, 13, 1, -30 }, // 0x29 ')'
|
||||
{ 564, 20, 20, 24, 2, -32 }, // 0x2A '*'
|
||||
{ 614, 20, 21, 25, 2, -25 }, // 0x2B '+'
|
||||
{ 667, 6, 11, 12, 2, -4 }, // 0x2C ','
|
||||
{ 676, 10, 3, 14, 2, -12 }, // 0x2D '-'
|
||||
{ 680, 5, 6, 12, 3, -4 }, // 0x2E '.'
|
||||
{ 684, 16, 31, 16, 0, -30 }, // 0x2F '/'
|
||||
{ 746, 21, 31, 25, 2, -30 }, // 0x30 '0'
|
||||
{ 828, 11, 31, 25, 4, -30 }, // 0x31 '1'
|
||||
{ 871, 20, 31, 25, 2, -30 }, // 0x32 '2'
|
||||
{ 949, 20, 31, 25, 2, -30 }, // 0x33 '3'
|
||||
{ 1027, 23, 31, 25, 1, -30 }, // 0x34 '4'
|
||||
{ 1117, 19, 31, 25, 3, -30 }, // 0x35 '5'
|
||||
{ 1191, 21, 31, 25, 2, -30 }, // 0x36 '6'
|
||||
{ 1273, 21, 31, 25, 2, -30 }, // 0x37 '7'
|
||||
{ 1355, 20, 31, 25, 2, -30 }, // 0x38 '8'
|
||||
{ 1433, 20, 31, 25, 2, -30 }, // 0x39 '9'
|
||||
{ 1511, 5, 25, 12, 3, -23 }, // 0x3A ':'
|
||||
{ 1527, 7, 30, 12, 1, -23 }, // 0x3B ';'
|
||||
{ 1554, 20, 21, 25, 2, -25 }, // 0x3C '<'
|
||||
{ 1607, 20, 12, 25, 2, -20 }, // 0x3D '='
|
||||
{ 1637, 20, 21, 25, 2, -25 }, // 0x3E '>'
|
||||
{ 1690, 17, 32, 19, 1, -30 }, // 0x3F '?'
|
||||
{ 1758, 34, 35, 39, 2, -30 }, // 0x40 '@'
|
||||
{ 1907, 27, 31, 28, 0, -30 }, // 0x41 'A'
|
||||
{ 2012, 22, 31, 28, 4, -30 }, // 0x42 'B'
|
||||
{ 2098, 23, 31, 27, 3, -30 }, // 0x43 'C'
|
||||
{ 2188, 25, 31, 31, 4, -30 }, // 0x44 'D'
|
||||
{ 2285, 17, 31, 24, 4, -30 }, // 0x45 'E'
|
||||
{ 2351, 17, 31, 22, 4, -30 }, // 0x46 'F'
|
||||
{ 2417, 25, 31, 31, 3, -30 }, // 0x47 'G'
|
||||
{ 2514, 24, 31, 32, 4, -30 }, // 0x48 'H'
|
||||
{ 2607, 11, 31, 15, 2, -30 }, // 0x49 'I'
|
||||
{ 2650, 11, 39, 12, -3, -30 }, // 0x4A 'J'
|
||||
{ 2704, 23, 31, 27, 4, -30 }, // 0x4B 'K'
|
||||
{ 2794, 18, 31, 23, 4, -30 }, // 0x4C 'L'
|
||||
{ 2864, 31, 31, 39, 4, -30 }, // 0x4D 'M'
|
||||
{ 2985, 25, 31, 33, 4, -30 }, // 0x4E 'N'
|
||||
{ 3082, 28, 31, 34, 3, -30 }, // 0x4F 'O'
|
||||
{ 3191, 20, 31, 26, 4, -30 }, // 0x50 'P'
|
||||
{ 3269, 28, 38, 34, 3, -30 }, // 0x51 'Q'
|
||||
{ 3402, 22, 31, 27, 4, -30 }, // 0x52 'R'
|
||||
{ 3488, 20, 31, 24, 2, -30 }, // 0x53 'S'
|
||||
{ 3566, 23, 31, 24, 0, -30 }, // 0x54 'T'
|
||||
{ 3656, 24, 31, 31, 4, -30 }, // 0x55 'U'
|
||||
{ 3749, 26, 31, 26, 0, -30 }, // 0x56 'V'
|
||||
{ 3850, 39, 31, 40, 1, -30 }, // 0x57 'W'
|
||||
{ 4002, 25, 31, 25, 0, -30 }, // 0x58 'X'
|
||||
{ 4099, 24, 31, 24, 0, -30 }, // 0x59 'Y'
|
||||
{ 4192, 21, 31, 25, 2, -30 }, // 0x5A 'Z'
|
||||
{ 4274, 10, 38, 14, 3, -30 }, // 0x5B '['
|
||||
{ 4322, 16, 31, 16, 0, -30 }, // 0x5C '\'
|
||||
{ 4384, 10, 38, 14, 1, -30 }, // 0x5D ']'
|
||||
{ 4432, 21, 20, 25, 2, -30 }, // 0x5E '^'
|
||||
{ 4485, 19, 3, 19, 0, 5 }, // 0x5F '_'
|
||||
{ 4493, 8, 7, 12, 2, -32 }, // 0x60 '`'
|
||||
{ 4500, 19, 23, 24, 2, -22 }, // 0x61 'a'
|
||||
{ 4555, 20, 33, 27, 4, -32 }, // 0x62 'b'
|
||||
{ 4638, 17, 24, 21, 2, -23 }, // 0x63 'c'
|
||||
{ 4689, 21, 33, 27, 2, -32 }, // 0x64 'd'
|
||||
{ 4776, 20, 24, 24, 2, -23 }, // 0x65 'e'
|
||||
{ 4836, 16, 33, 15, 1, -32 }, // 0x66 'f'
|
||||
{ 4902, 21, 34, 27, 2, -23 }, // 0x67 'g'
|
||||
{ 4992, 19, 33, 27, 4, -32 }, // 0x68 'h'
|
||||
{ 5071, 5, 32, 11, 3, -31 }, // 0x69 'i'
|
||||
{ 5091, 10, 42, 11, -2, -31 }, // 0x6A 'j'
|
||||
{ 5144, 19, 33, 23, 4, -32 }, // 0x6B 'k'
|
||||
{ 5223, 3, 33, 11, 4, -32 }, // 0x6C 'l'
|
||||
{ 5236, 33, 24, 40, 4, -23 }, // 0x6D 'm'
|
||||
{ 5335, 19, 24, 27, 4, -23 }, // 0x6E 'n'
|
||||
{ 5392, 22, 24, 26, 2, -23 }, // 0x6F 'o'
|
||||
{ 5458, 20, 34, 27, 4, -23 }, // 0x70 'p'
|
||||
{ 5543, 21, 34, 27, 2, -23 }, // 0x71 'q'
|
||||
{ 5633, 13, 24, 18, 4, -23 }, // 0x72 'r'
|
||||
{ 5672, 17, 24, 21, 2, -23 }, // 0x73 's'
|
||||
{ 5723, 14, 28, 16, 1, -27 }, // 0x74 't'
|
||||
{ 5772, 20, 23, 27, 3, -22 }, // 0x75 'u'
|
||||
{ 5830, 22, 23, 22, 0, -22 }, // 0x76 'v'
|
||||
{ 5894, 33, 23, 34, 0, -22 }, // 0x77 'w'
|
||||
{ 5989, 21, 23, 23, 1, -22 }, // 0x78 'x'
|
||||
{ 6050, 22, 33, 22, 0, -22 }, // 0x79 'y'
|
||||
{ 6141, 17, 23, 20, 2, -22 }, // 0x7A 'z'
|
||||
{ 6190, 14, 38, 16, 1, -30 }, // 0x7B '{'
|
||||
{ 6257, 3, 43, 24, 10, -32 }, // 0x7C '|'
|
||||
{ 6274, 14, 38, 16, 1, -30 }, // 0x7D '}'
|
||||
{ 6341, 20, 6, 25, 2, -17 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Regular22pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Regular22pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Regular22pt7bGlyphs,
|
||||
0x20, 0x7E, 59 };
|
||||
|
||||
// Approx. 7028 bytes
|
||||
|
||||
#endif // NOTOSANS22PT7B_H
|
||||
@@ -1,166 +0,0 @@
|
||||
#ifndef NOTOSANS7PT7B_H
|
||||
#define NOTOSANS7PT7B_H
|
||||
const uint8_t NotoSans_Regular7pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFA, 0xA8, 0xB0, 0xBB, 0x99, 0x12, 0x09, 0x04, 0x8F, 0xF1, 0x41,
|
||||
0x23, 0xFC, 0x48, 0x24, 0x16, 0x00, 0x21, 0xFA, 0x28, 0xE0, 0xE2, 0x49,
|
||||
0xF8, 0x82, 0x00, 0xE1, 0x2C, 0x89, 0x22, 0x50, 0x97, 0xBA, 0xB1, 0x24,
|
||||
0x49, 0x22, 0x58, 0xE0, 0x78, 0x24, 0x13, 0x09, 0x03, 0x02, 0x8A, 0x25,
|
||||
0x0C, 0x86, 0x3C, 0xC0, 0xF0, 0x6A, 0x49, 0x24, 0x93, 0x30, 0xC4, 0x22,
|
||||
0x23, 0x32, 0x22, 0x6C, 0x22, 0x9F, 0xCC, 0x5B, 0x20, 0x20, 0x82, 0x3F,
|
||||
0x20, 0x80, 0xEA, 0xE0, 0xB0, 0x08, 0x84, 0x22, 0x11, 0x88, 0x44, 0x00,
|
||||
0x7B, 0x28, 0x61, 0x86, 0x18, 0x61, 0xCD, 0xE0, 0x37, 0xD1, 0x11, 0x11,
|
||||
0x11, 0x7A, 0x20, 0xC3, 0x08, 0x43, 0x18, 0xC3, 0xF0, 0x7A, 0x30, 0x43,
|
||||
0x78, 0x60, 0x41, 0x8F, 0xE0, 0x04, 0x0C, 0x14, 0x14, 0x24, 0x44, 0xC4,
|
||||
0xFF, 0x04, 0x04, 0xFA, 0x08, 0x20, 0xF8, 0x30, 0x41, 0x8F, 0xE0, 0x39,
|
||||
0x0C, 0x20, 0xFA, 0x18, 0x61, 0xC5, 0xE0, 0xFC, 0x10, 0xC2, 0x18, 0x43,
|
||||
0x08, 0x21, 0x00, 0x7B, 0x38, 0x73, 0x79, 0x68, 0x61, 0x85, 0xE0, 0x73,
|
||||
0x28, 0x61, 0x87, 0xF0, 0x43, 0x0B, 0xC0, 0xB0, 0x0B, 0x4C, 0x00, 0x1A,
|
||||
0x50, 0x0C, 0xEC, 0x30, 0x30, 0x30, 0xFC, 0x00, 0x3F, 0x81, 0x81, 0x83,
|
||||
0x33, 0x00, 0x7A, 0x20, 0xC2, 0x18, 0xC2, 0x00, 0x20, 0x80, 0x0E, 0x06,
|
||||
0x31, 0x01, 0x47, 0xA9, 0x23, 0x24, 0x64, 0x94, 0xBA, 0x88, 0x88, 0x00,
|
||||
0xFC, 0x00, 0x08, 0x0C, 0x05, 0x02, 0x82, 0x61, 0x11, 0xF8, 0x82, 0x41,
|
||||
0x40, 0xC0, 0xF9, 0x8F, 0x0E, 0x3F, 0xD9, 0xB0, 0xE1, 0xC7, 0xF8, 0x3E,
|
||||
0xC7, 0x04, 0x08, 0x10, 0x20, 0x60, 0x60, 0x7C, 0xF8, 0xC6, 0xC3, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0xC3, 0xC6, 0xFC, 0xFF, 0x0C, 0x30, 0xFF, 0x0C, 0x30,
|
||||
0xC3, 0xF0, 0xFF, 0x0C, 0x30, 0xC3, 0xFC, 0x30, 0xC3, 0x00, 0x1E, 0x61,
|
||||
0xC0, 0x80, 0x80, 0x87, 0x81, 0xC1, 0x61, 0x3F, 0xC1, 0xC1, 0xC1, 0xC1,
|
||||
0xFF, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xE9, 0x24, 0x92, 0x5C, 0x33, 0x33,
|
||||
0x33, 0x33, 0x33, 0x2E, 0xC0, 0xC3, 0x8B, 0x26, 0x8E, 0x1A, 0x36, 0x66,
|
||||
0xC5, 0x84, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0xF0, 0xC0, 0xF8,
|
||||
0x3A, 0x1E, 0x85, 0x91, 0x64, 0x99, 0xA6, 0x29, 0x8C, 0x63, 0x10, 0xC1,
|
||||
0xE1, 0xA1, 0xB1, 0x99, 0x89, 0x8D, 0x85, 0x83, 0x83, 0x3E, 0x31, 0xB0,
|
||||
0x50, 0x38, 0x0C, 0x06, 0x07, 0x82, 0x43, 0x1F, 0x00, 0xF9, 0x9B, 0x1E,
|
||||
0x3C, 0x5F, 0x30, 0x60, 0xC1, 0x80, 0x3E, 0x31, 0xB0, 0x50, 0x38, 0x0C,
|
||||
0x06, 0x07, 0x82, 0x43, 0x1F, 0x01, 0x80, 0x60, 0xF9, 0x9B, 0x1E, 0x3C,
|
||||
0x5F, 0x32, 0x66, 0xC5, 0x84, 0x7B, 0x18, 0x20, 0x60, 0xE0, 0xC1, 0x8F,
|
||||
0xE0, 0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x81, 0x81,
|
||||
0x81, 0x81, 0x81, 0x81, 0x81, 0xC3, 0x42, 0x3C, 0x81, 0xC3, 0x42, 0x42,
|
||||
0x26, 0x24, 0x34, 0x1C, 0x18, 0x18, 0xC2, 0x1A, 0x30, 0x91, 0x44, 0x8A,
|
||||
0x66, 0xD2, 0x14, 0xD0, 0xA2, 0x85, 0x1C, 0x30, 0xC0, 0x82, 0x00, 0xC3,
|
||||
0x42, 0x24, 0x3C, 0x18, 0x18, 0x3C, 0x24, 0x42, 0xC3, 0x83, 0x42, 0x66,
|
||||
0x24, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFC, 0x10, 0x86, 0x10, 0x86,
|
||||
0x10, 0x83, 0xF0, 0xF2, 0x49, 0x24, 0x92, 0x70, 0x82, 0x10, 0xC2, 0x10,
|
||||
0xC2, 0x10, 0x40, 0xE4, 0x92, 0x49, 0x24, 0xF0, 0x20, 0xC5, 0x12, 0x8A,
|
||||
0x10, 0xFC, 0xB4, 0xF8, 0x30, 0xFF, 0x8E, 0x3F, 0x40, 0x81, 0x02, 0x07,
|
||||
0xEC, 0x50, 0xE1, 0xC3, 0xC5, 0x78, 0x7C, 0x21, 0x08, 0x61, 0xE0, 0x04,
|
||||
0x10, 0x5F, 0x86, 0x18, 0x61, 0xC5, 0xF0, 0x7A, 0x18, 0x7F, 0x83, 0x07,
|
||||
0xC0, 0x39, 0x19, 0xF6, 0x31, 0x8C, 0x63, 0x00, 0x7E, 0x18, 0x61, 0x87,
|
||||
0x17, 0xC1, 0x07, 0xE0, 0x82, 0x08, 0x2F, 0xC6, 0x18, 0x61, 0x86, 0x10,
|
||||
0x9F, 0xC0, 0x20, 0x12, 0x49, 0x24, 0x9E, 0x82, 0x08, 0x62, 0x92, 0x8F,
|
||||
0x24, 0x8A, 0x30, 0xFF, 0xC0, 0xFF, 0xD8, 0x8E, 0x10, 0xC2, 0x18, 0x43,
|
||||
0x08, 0x61, 0x08, 0xFF, 0x18, 0x61, 0x86, 0x18, 0x40, 0x7D, 0x0A, 0x14,
|
||||
0x38, 0x58, 0x9E, 0x00, 0xFD, 0x8A, 0x1C, 0x38, 0x78, 0xAF, 0x40, 0x81,
|
||||
0x00, 0x7E, 0x18, 0x61, 0x87, 0x17, 0xC1, 0x04, 0x10, 0xBC, 0x88, 0x88,
|
||||
0x80, 0xFC, 0x30, 0x60, 0x87, 0xC0, 0x22, 0x3E, 0x84, 0x21, 0x0C, 0x38,
|
||||
0x86, 0x18, 0x61, 0x87, 0x17, 0xC0, 0xC6, 0x89, 0x13, 0x62, 0x85, 0x04,
|
||||
0x00, 0xCC, 0x69, 0x49, 0x29, 0x25, 0x67, 0x38, 0x63, 0x0C, 0x60, 0xC6,
|
||||
0x58, 0xE0, 0xC2, 0x8C, 0xB1, 0x80, 0xC6, 0x89, 0x11, 0x62, 0x85, 0x04,
|
||||
0x08, 0x31, 0xC0, 0xF8, 0x88, 0xC4, 0x43, 0xE0, 0x19, 0x88, 0x42, 0x33,
|
||||
0x84, 0x21, 0x08, 0x30, 0xFF, 0xF8, 0xC1, 0x08, 0x42, 0x18, 0x64, 0x21,
|
||||
0x09, 0xC0, 0xE6, 0xF0 };
|
||||
|
||||
const GFXglyph NotoSans_Regular7pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 4, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 2, 10, 4, 1, -9 }, // 0x21 '!'
|
||||
{ 4, 4, 4, 6, 1, -9 }, // 0x22 '"'
|
||||
{ 6, 9, 10, 9, 0, -9 }, // 0x23 '#'
|
||||
{ 18, 6, 11, 8, 1, -9 }, // 0x24 '$'
|
||||
{ 27, 10, 10, 11, 1, -9 }, // 0x25 '%'
|
||||
{ 40, 9, 10, 10, 1, -9 }, // 0x26 '&'
|
||||
{ 52, 1, 4, 3, 1, -9 }, // 0x27 '''
|
||||
{ 53, 3, 12, 4, 1, -9 }, // 0x28 '('
|
||||
{ 58, 4, 12, 4, 0, -9 }, // 0x29 ')'
|
||||
{ 64, 6, 6, 8, 1, -9 }, // 0x2A '*'
|
||||
{ 69, 6, 6, 8, 1, -7 }, // 0x2B '+'
|
||||
{ 74, 2, 4, 4, 1, -1 }, // 0x2C ','
|
||||
{ 75, 3, 1, 4, 1, -3 }, // 0x2D '-'
|
||||
{ 76, 2, 2, 4, 1, -1 }, // 0x2E '.'
|
||||
{ 77, 5, 10, 5, 0, -9 }, // 0x2F '/'
|
||||
{ 84, 6, 10, 8, 1, -9 }, // 0x30 '0'
|
||||
{ 92, 4, 10, 8, 1, -9 }, // 0x31 '1'
|
||||
{ 97, 6, 10, 8, 1, -9 }, // 0x32 '2'
|
||||
{ 105, 6, 10, 8, 1, -9 }, // 0x33 '3'
|
||||
{ 113, 8, 10, 8, 0, -9 }, // 0x34 '4'
|
||||
{ 123, 6, 10, 8, 1, -9 }, // 0x35 '5'
|
||||
{ 131, 6, 10, 8, 1, -9 }, // 0x36 '6'
|
||||
{ 139, 6, 10, 8, 1, -9 }, // 0x37 '7'
|
||||
{ 147, 6, 10, 8, 1, -9 }, // 0x38 '8'
|
||||
{ 155, 6, 10, 8, 1, -9 }, // 0x39 '9'
|
||||
{ 163, 2, 8, 4, 1, -7 }, // 0x3A ':'
|
||||
{ 165, 3, 10, 4, 0, -7 }, // 0x3B ';'
|
||||
{ 169, 6, 6, 8, 1, -7 }, // 0x3C '<'
|
||||
{ 174, 6, 4, 8, 1, -6 }, // 0x3D '='
|
||||
{ 177, 6, 6, 8, 1, -7 }, // 0x3E '>'
|
||||
{ 182, 6, 10, 6, 0, -9 }, // 0x3F '?'
|
||||
{ 190, 11, 11, 12, 1, -9 }, // 0x40 '@'
|
||||
{ 206, 9, 10, 9, 0, -9 }, // 0x41 'A'
|
||||
{ 218, 7, 10, 9, 1, -9 }, // 0x42 'B'
|
||||
{ 227, 7, 10, 9, 1, -9 }, // 0x43 'C'
|
||||
{ 236, 8, 10, 10, 1, -9 }, // 0x44 'D'
|
||||
{ 246, 6, 10, 8, 1, -9 }, // 0x45 'E'
|
||||
{ 254, 6, 10, 7, 1, -9 }, // 0x46 'F'
|
||||
{ 262, 8, 10, 10, 1, -9 }, // 0x47 'G'
|
||||
{ 272, 8, 10, 10, 1, -9 }, // 0x48 'H'
|
||||
{ 282, 3, 10, 5, 1, -9 }, // 0x49 'I'
|
||||
{ 286, 4, 13, 4, -1, -9 }, // 0x4A 'J'
|
||||
{ 293, 7, 10, 8, 1, -9 }, // 0x4B 'K'
|
||||
{ 302, 6, 10, 7, 1, -9 }, // 0x4C 'L'
|
||||
{ 310, 10, 10, 12, 1, -9 }, // 0x4D 'M'
|
||||
{ 323, 8, 10, 10, 1, -9 }, // 0x4E 'N'
|
||||
{ 333, 9, 10, 11, 1, -9 }, // 0x4F 'O'
|
||||
{ 345, 7, 10, 8, 1, -9 }, // 0x50 'P'
|
||||
{ 354, 9, 12, 11, 1, -9 }, // 0x51 'Q'
|
||||
{ 368, 7, 10, 9, 1, -9 }, // 0x52 'R'
|
||||
{ 377, 6, 10, 8, 1, -9 }, // 0x53 'S'
|
||||
{ 385, 7, 10, 8, 0, -9 }, // 0x54 'T'
|
||||
{ 394, 8, 10, 10, 1, -9 }, // 0x55 'U'
|
||||
{ 404, 8, 10, 8, 0, -9 }, // 0x56 'V'
|
||||
{ 414, 13, 10, 13, 0, -9 }, // 0x57 'W'
|
||||
{ 431, 8, 10, 8, 0, -9 }, // 0x58 'X'
|
||||
{ 441, 8, 10, 8, 0, -9 }, // 0x59 'Y'
|
||||
{ 451, 6, 10, 8, 1, -9 }, // 0x5A 'Z'
|
||||
{ 459, 3, 12, 5, 1, -9 }, // 0x5B '['
|
||||
{ 464, 5, 10, 5, 0, -9 }, // 0x5C '\'
|
||||
{ 471, 3, 12, 5, 0, -9 }, // 0x5D ']'
|
||||
{ 476, 6, 6, 8, 1, -9 }, // 0x5E '^'
|
||||
{ 481, 6, 1, 6, 0, 2 }, // 0x5F '_'
|
||||
{ 482, 2, 3, 4, 1, -10 }, // 0x60 '`'
|
||||
{ 483, 6, 7, 8, 1, -6 }, // 0x61 'a'
|
||||
{ 489, 7, 10, 8, 1, -9 }, // 0x62 'b'
|
||||
{ 498, 5, 7, 7, 1, -6 }, // 0x63 'c'
|
||||
{ 503, 6, 10, 8, 1, -9 }, // 0x64 'd'
|
||||
{ 511, 6, 7, 8, 1, -6 }, // 0x65 'e'
|
||||
{ 517, 5, 10, 5, 0, -9 }, // 0x66 'f'
|
||||
{ 524, 6, 10, 8, 1, -6 }, // 0x67 'g'
|
||||
{ 532, 6, 10, 8, 1, -9 }, // 0x68 'h'
|
||||
{ 540, 1, 10, 4, 1, -9 }, // 0x69 'i'
|
||||
{ 542, 3, 13, 4, -1, -9 }, // 0x6A 'j'
|
||||
{ 547, 6, 10, 7, 1, -9 }, // 0x6B 'k'
|
||||
{ 555, 1, 10, 4, 1, -9 }, // 0x6C 'l'
|
||||
{ 557, 11, 7, 13, 1, -6 }, // 0x6D 'm'
|
||||
{ 567, 6, 7, 8, 1, -6 }, // 0x6E 'n'
|
||||
{ 573, 7, 7, 8, 1, -6 }, // 0x6F 'o'
|
||||
{ 580, 7, 10, 8, 1, -6 }, // 0x70 'p'
|
||||
{ 589, 6, 10, 8, 1, -6 }, // 0x71 'q'
|
||||
{ 597, 4, 7, 6, 1, -6 }, // 0x72 'r'
|
||||
{ 601, 5, 7, 7, 1, -6 }, // 0x73 's'
|
||||
{ 606, 5, 9, 5, 0, -8 }, // 0x74 't'
|
||||
{ 612, 6, 7, 8, 1, -6 }, // 0x75 'u'
|
||||
{ 618, 7, 7, 7, 0, -6 }, // 0x76 'v'
|
||||
{ 625, 11, 7, 11, 0, -6 }, // 0x77 'w'
|
||||
{ 635, 7, 7, 7, 0, -6 }, // 0x78 'x'
|
||||
{ 642, 7, 10, 7, 0, -6 }, // 0x79 'y'
|
||||
{ 651, 5, 7, 6, 1, -6 }, // 0x7A 'z'
|
||||
{ 656, 5, 12, 5, 0, -9 }, // 0x7B '{'
|
||||
{ 664, 1, 13, 8, 3, -9 }, // 0x7C '|'
|
||||
{ 666, 5, 12, 5, 0, -9 }, // 0x7D '}'
|
||||
{ 674, 6, 2, 8, 1, -5 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Regular7pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Regular7pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Regular7pt7bGlyphs,
|
||||
0x20, 0x7E, 19 };
|
||||
|
||||
// Approx. 1348 bytes
|
||||
|
||||
#endif // NOTOSANS7PT7B_H
|
||||
@@ -1,789 +0,0 @@
|
||||
// NotoSans9pt8b.h
|
||||
//
|
||||
// Adafruit GFX font header — Latin Extended-A coverage (U+0020 to U+017F).
|
||||
// Source: Noto Sans at 9pt.
|
||||
// 352 glyphs covering ASCII, Latin-1 Supplement, and Latin Extended-A.
|
||||
// Supports Czech, Polish, German, French, Spanish, Italian, Croatian,
|
||||
// Hungarian, Slovak, Romanian, and other European languages.
|
||||
//
|
||||
// Codepoints 0x7F-0x9F (C0/C1 control codes) are present as empty glyphs.
|
||||
// They are never rendered in normal use because UTF-8 decoding does not
|
||||
// produce them as standalone codepoints.
|
||||
//
|
||||
// To render glyphs above 0x7F, use a drawCodepoint(font, x, y, cp) helper
|
||||
// that walks the glyph table directly. Adafruit GFX's print() / write() /
|
||||
// drawChar() are byte-oriented (uint8_t) and cannot address indices > 255.
|
||||
|
||||
#ifndef NOTOSANS9PT8B_H
|
||||
#define NOTOSANS9PT8B_H
|
||||
|
||||
const uint8_t NotoSans9pt8bBitmaps[] PROGMEM = {
|
||||
0x00, 0xF5, 0x55, 0x43, 0xC0, 0xDE, 0xF3, 0x9C, 0x80, 0x0C, 0x81, 0x10,
|
||||
0x22, 0x04, 0x47, 0xFE, 0x32, 0x04, 0x40, 0x88, 0xFF, 0xC2, 0x60, 0xC8,
|
||||
0x11, 0x02, 0x20, 0x18, 0x3E, 0x7F, 0xD8, 0xD8, 0xF8, 0x3C, 0x1F, 0x1B,
|
||||
0x19, 0x9B, 0xFE, 0x18, 0x18, 0x70, 0x46, 0xC2, 0x22, 0x21, 0x13, 0x08,
|
||||
0x90, 0x45, 0xB3, 0x6B, 0x4E, 0xD3, 0x04, 0x98, 0x44, 0xC2, 0x26, 0x21,
|
||||
0x23, 0x07, 0x00, 0x1C, 0x07, 0x60, 0x62, 0x06, 0x20, 0x26, 0x03, 0xC0,
|
||||
0x38, 0x06, 0xC6, 0xC6, 0x6C, 0x3C, 0xC1, 0x8E, 0x3C, 0x7E, 0x70, 0xFF,
|
||||
0xC0, 0x32, 0x64, 0xCC, 0x88, 0x88, 0x8C, 0xC4, 0x63, 0x8C, 0x46, 0x22,
|
||||
0x23, 0x33, 0x22, 0x64, 0xC8, 0x18, 0x10, 0xD3, 0xFF, 0x18, 0x2C, 0x66,
|
||||
0x24, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x7E, 0xF0, 0xF0,
|
||||
0x04, 0x30, 0xC2, 0x18, 0x41, 0x0C, 0x21, 0x86, 0x10, 0xC0, 0x3C, 0x7E,
|
||||
0x42, 0xC3, 0xC1, 0x81, 0x81, 0x81, 0xC1, 0xC3, 0xC3, 0x66, 0x3C, 0x13,
|
||||
0xD9, 0x11, 0x11, 0x11, 0x11, 0x10, 0x3C, 0xFE, 0x83, 0x03, 0x03, 0x02,
|
||||
0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFF, 0x3C, 0xFE, 0x83, 0x03, 0x03,
|
||||
0x06, 0x38, 0x06, 0x03, 0x03, 0x03, 0x86, 0xFC, 0x03, 0x01, 0xC0, 0x70,
|
||||
0x3C, 0x1B, 0x04, 0xC2, 0x31, 0x8C, 0x43, 0x3F, 0xF0, 0x30, 0x0C, 0x03,
|
||||
0x00, 0x7E, 0x7E, 0x40, 0x40, 0x40, 0xFC, 0x7E, 0x03, 0x03, 0x03, 0x03,
|
||||
0x86, 0xFC, 0x0E, 0x3E, 0x60, 0x40, 0xC0, 0xDC, 0xE7, 0xC3, 0xC1, 0xC1,
|
||||
0xC3, 0x63, 0x3E, 0xFF, 0xFF, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x0C, 0x18,
|
||||
0x18, 0x10, 0x30, 0x60, 0x3C, 0x7E, 0xC3, 0xC3, 0x43, 0x76, 0x3C, 0x66,
|
||||
0xC3, 0x81, 0x81, 0xC3, 0x7E, 0x38, 0x7E, 0xC3, 0xC3, 0x81, 0xC3, 0xC3,
|
||||
0x7D, 0x03, 0x03, 0x02, 0x0E, 0x78, 0x74, 0x00, 0xF0, 0x74, 0x00, 0xFA,
|
||||
0x01, 0x03, 0x0C, 0x30, 0xC0, 0xE0, 0x1C, 0x07, 0x01, 0xFF, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x07, 0x38, 0xE0, 0x80, 0x39,
|
||||
0xFC, 0x08, 0x10, 0x60, 0x86, 0x08, 0x30, 0x00, 0x01, 0x83, 0x00, 0x03,
|
||||
0x80, 0x7F, 0x83, 0x01, 0x18, 0x02, 0x47, 0xCF, 0x31, 0x38, 0x84, 0x62,
|
||||
0x31, 0x88, 0xCE, 0x23, 0x2C, 0x77, 0x10, 0x00, 0x60, 0x00, 0x7F, 0x00,
|
||||
0x30, 0x00, 0x04, 0x01, 0xC0, 0x28, 0x05, 0x81, 0xB0, 0x22, 0x04, 0x61,
|
||||
0x84, 0x3F, 0xCC, 0x19, 0x81, 0x20, 0x3C, 0x06, 0xF8, 0x7F, 0x20, 0xD0,
|
||||
0x68, 0x34, 0x33, 0xF1, 0x06, 0x81, 0x40, 0xE0, 0x50, 0xEF, 0xE0, 0x0F,
|
||||
0x0F, 0xF6, 0x01, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x06,
|
||||
0x00, 0xC2, 0x1F, 0x80, 0xF8, 0x3F, 0xC8, 0x3A, 0x06, 0x80, 0xE0, 0x38,
|
||||
0x0E, 0x03, 0x80, 0xE0, 0x68, 0x1A, 0x1C, 0xFC, 0x00, 0xFF, 0xFE, 0x04,
|
||||
0x08, 0x10, 0x3F, 0x40, 0x81, 0x02, 0x04, 0x0F, 0xE0, 0xFF, 0xFE, 0x04,
|
||||
0x08, 0x10, 0x3F, 0x7E, 0x81, 0x02, 0x04, 0x08, 0x00, 0x0F, 0x87, 0xF9,
|
||||
0xC0, 0x30, 0x0C, 0x01, 0x80, 0x30, 0xFE, 0x1F, 0xC0, 0x68, 0x0D, 0x81,
|
||||
0x98, 0x31, 0xFE, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0xFF, 0x01,
|
||||
0x80, 0xC0, 0x60, 0x30, 0x18, 0x08, 0xFF, 0x66, 0x66, 0x66, 0x66, 0x66,
|
||||
0xF0, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x3E, 0x81, 0xC1, 0xA1,
|
||||
0x91, 0x89, 0x85, 0x83, 0xC1, 0xB0, 0x8C, 0x46, 0x21, 0x90, 0x68, 0x18,
|
||||
0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x02, 0x04, 0x0F, 0xE0,
|
||||
0xC0, 0x3C, 0x03, 0xE0, 0x7A, 0x05, 0xB0, 0xDB, 0x09, 0x90, 0x99, 0x99,
|
||||
0x89, 0x18, 0xB1, 0x8F, 0x18, 0x61, 0x86, 0x10, 0xC0, 0xF0, 0x3E, 0x0E,
|
||||
0xC3, 0xB0, 0xE6, 0x38, 0x8E, 0x33, 0x86, 0xE0, 0xB8, 0x3E, 0x07, 0x80,
|
||||
0xC0, 0x0F, 0x03, 0xFC, 0x60, 0x64, 0x06, 0xC0, 0x2C, 0x03, 0xC0, 0x3C,
|
||||
0x03, 0xC0, 0x3C, 0x02, 0x60, 0x63, 0x0C, 0x1F, 0x80, 0xF0, 0xFE, 0x82,
|
||||
0x83, 0x83, 0x83, 0x86, 0xFC, 0x80, 0x80, 0x80, 0x80, 0x80, 0x0F, 0x03,
|
||||
0xFC, 0x60, 0x64, 0x06, 0xC0, 0x2C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C,
|
||||
0x02, 0x60, 0x63, 0x0C, 0x1F, 0x80, 0x18, 0x01, 0xC0, 0x0E, 0xF0, 0x7F,
|
||||
0x20, 0xD0, 0x68, 0x34, 0x13, 0xF9, 0xF0, 0x8C, 0x43, 0x21, 0x90, 0x68,
|
||||
0x18, 0x3D, 0x7E, 0xC0, 0xC0, 0xC0, 0x60, 0x3C, 0x0E, 0x03, 0x03, 0x03,
|
||||
0x86, 0xFC, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30,
|
||||
0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18,
|
||||
0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x70, 0x7C, 0x63, 0xE0, 0xC0, 0x78,
|
||||
0x09, 0x03, 0x30, 0x46, 0x18, 0x43, 0x0C, 0x40, 0x98, 0x1B, 0x03, 0x40,
|
||||
0x38, 0x07, 0x00, 0xC0, 0xC1, 0x83, 0x41, 0x83, 0x41, 0xC3, 0x63, 0xC2,
|
||||
0x63, 0x46, 0x22, 0x46, 0x22, 0x66, 0x36, 0x24, 0x34, 0x2C, 0x14, 0x3C,
|
||||
0x14, 0x38, 0x1C, 0x18, 0x18, 0x18, 0xC0, 0xD8, 0x22, 0x18, 0xCC, 0x1A,
|
||||
0x03, 0x80, 0xC0, 0x38, 0x1A, 0x0C, 0xC2, 0x19, 0x82, 0xC0, 0xC0, 0xC0,
|
||||
0xD0, 0x26, 0x18, 0x84, 0x33, 0x04, 0x81, 0xE0, 0x30, 0x0C, 0x03, 0x00,
|
||||
0xC0, 0x30, 0x0C, 0x00, 0xFF, 0xFF, 0x03, 0x06, 0x04, 0x0C, 0x18, 0x10,
|
||||
0x30, 0x60, 0x40, 0xC0, 0xFF, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCF, 0xC1, 0x04, 0x18, 0x20, 0xC3, 0x04, 0x18, 0x20, 0x83, 0x04, 0xFF,
|
||||
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F, 0x10, 0x18, 0x38, 0x24, 0x64,
|
||||
0x42, 0x42, 0x81, 0xFF, 0xD9, 0x80, 0x18, 0xFC, 0x08, 0x11, 0xEE, 0x70,
|
||||
0xC1, 0xC6, 0xF4, 0xC0, 0x60, 0x30, 0x19, 0x8F, 0xF7, 0x0B, 0x07, 0x83,
|
||||
0xC1, 0xE0, 0xF0, 0x7C, 0x6D, 0xE0, 0x1C, 0xFD, 0x06, 0x0C, 0x18, 0x30,
|
||||
0x60, 0x62, 0x7C, 0x01, 0x01, 0x01, 0x19, 0x7F, 0xC3, 0xC1, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0x63, 0x3D, 0x18, 0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0,
|
||||
0x61, 0x3F, 0x1E, 0x60, 0x81, 0x0F, 0xC4, 0x08, 0x10, 0x20, 0x40, 0x81,
|
||||
0x02, 0x00, 0x18, 0x7F, 0x43, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x3D,
|
||||
0x01, 0x01, 0x43, 0x7E, 0xC0, 0xC0, 0xC0, 0xCC, 0xFF, 0xE1, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xF0, 0xFF, 0xFF, 0xC0, 0x33, 0x00, 0x33,
|
||||
0x33, 0x33, 0x33, 0x33, 0x33, 0xE0, 0xC0, 0xC0, 0xC0, 0xC1, 0xC6, 0xCC,
|
||||
0xD8, 0xD0, 0xF8, 0xCC, 0xC4, 0xC6, 0xC3, 0xFF, 0xFF, 0xFF, 0xC0, 0x0C,
|
||||
0x33, 0xFB, 0xFE, 0x38, 0xF0, 0xC3, 0xC1, 0x07, 0x04, 0x1C, 0x10, 0x70,
|
||||
0x41, 0xC1, 0x07, 0x04, 0x10, 0x0C, 0xFF, 0xE1, 0xC1, 0xC1, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0x18, 0x3F, 0x10, 0xD8, 0x3C, 0x1E, 0x0F, 0x07, 0x82,
|
||||
0x63, 0x1F, 0x00, 0x0C, 0x7F, 0xB8, 0x58, 0x3C, 0x1E, 0x0F, 0x07, 0x83,
|
||||
0xE3, 0x6F, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x18, 0x7F, 0xC3, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0x63, 0x3D, 0x01, 0x01, 0x01, 0x01, 0x0F, 0x7E, 0x30,
|
||||
0xC3, 0x0C, 0x30, 0xC3, 0x00, 0x39, 0xFA, 0x06, 0x07, 0x07, 0x81, 0x83,
|
||||
0x85, 0xF8, 0x20, 0x86, 0x3F, 0x20, 0x82, 0x08, 0x20, 0x83, 0x0F, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0xC1, 0xA0, 0x98, 0xCC,
|
||||
0x42, 0x21, 0xB0, 0x50, 0x28, 0x1C, 0x00, 0xC3, 0x0D, 0x1C, 0x26, 0x79,
|
||||
0x99, 0x26, 0x24, 0x90, 0xB3, 0x43, 0x8F, 0x0E, 0x18, 0x18, 0x60, 0xE3,
|
||||
0x99, 0x05, 0x83, 0x80, 0xC0, 0xB0, 0xC8, 0xC6, 0xC1, 0x80, 0xC1, 0xA0,
|
||||
0x98, 0xC4, 0x43, 0x21, 0xB0, 0x50, 0x38, 0x0C, 0x04, 0x06, 0x02, 0x0F,
|
||||
0x00, 0xFC, 0x18, 0x20, 0xC3, 0x0C, 0x10, 0x60, 0xFE, 0x04, 0x71, 0x04,
|
||||
0x10, 0x41, 0x3C, 0xE0, 0xC1, 0x04, 0x10, 0x41, 0xC3, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0x87, 0x18, 0x42, 0x10, 0x87, 0x39, 0x08, 0x42, 0x33, 0x90,
|
||||
0xF9, 0x8F, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0xFF, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C,
|
||||
0x1F, 0xE0, 0x00, 0x74, 0x55, 0x57, 0xC0, 0x10, 0x21, 0xFE, 0x0C, 0x10,
|
||||
0x20, 0x40, 0x81, 0x81, 0xF0, 0x81, 0x00, 0x1E, 0x3F, 0x60, 0x60, 0x60,
|
||||
0x60, 0xFC, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xFF, 0xDB, 0x7E, 0x42, 0x43,
|
||||
0x42, 0x62, 0xFF, 0x81, 0xC0, 0xD0, 0x26, 0x18, 0x84, 0x33, 0x04, 0x81,
|
||||
0xE0, 0xFC, 0x0C, 0x03, 0x03, 0xF0, 0x30, 0x0C, 0x00, 0xFF, 0xF0, 0x03,
|
||||
0xFF, 0xC0, 0x7F, 0x83, 0x03, 0x85, 0xD8, 0xF0, 0xB3, 0x3C, 0x1C, 0x1C,
|
||||
0x3F, 0xC0, 0x9C, 0x80, 0x0F, 0x01, 0x86, 0x18, 0x08, 0x9F, 0x28, 0x81,
|
||||
0x4C, 0x06, 0x60, 0x33, 0x01, 0x98, 0x0E, 0x6C, 0x91, 0xCC, 0x60, 0xC1,
|
||||
0xF8, 0x00, 0x69, 0x1F, 0x9F, 0x32, 0xCB, 0x34, 0xC4, 0xCC, 0xCC, 0x80,
|
||||
0xFF, 0x01, 0x01, 0x01, 0x01, 0xF0, 0x0F, 0x01, 0x86, 0x18, 0x08, 0x9E,
|
||||
0x28, 0x99, 0x44, 0x46, 0x3C, 0x31, 0xE1, 0x89, 0x0E, 0x4C, 0x92, 0x3C,
|
||||
0x60, 0xC1, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x73, 0x28, 0xE3, 0xC8, 0xC0,
|
||||
0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFF, 0x7A,
|
||||
0x42, 0x11, 0x11, 0x1F, 0xF9, 0x20, 0x9E, 0x08, 0x38, 0x9C, 0x6F, 0x00,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xE3, 0xFD, 0xC0, 0xC0, 0xC0,
|
||||
0xC0, 0x7F, 0xFE, 0x7F, 0x3F, 0x9F, 0xCF, 0xE7, 0xF2, 0xF9, 0x04, 0x82,
|
||||
0x41, 0x20, 0x90, 0x48, 0x24, 0x12, 0xF0, 0x66, 0x3E, 0x7E, 0x92, 0x49,
|
||||
0x74, 0xE3, 0x18, 0xF8, 0x98, 0x99, 0x99, 0x96, 0x59, 0xA6, 0x00, 0x20,
|
||||
0x4E, 0x0C, 0xA0, 0x82, 0x10, 0x23, 0x02, 0x22, 0x26, 0x62, 0x4A, 0x09,
|
||||
0xA1, 0x92, 0x13, 0xF2, 0x02, 0x60, 0x20, 0x10, 0x63, 0x82, 0x34, 0x20,
|
||||
0x23, 0x01, 0x10, 0x09, 0xB8, 0x4A, 0x62, 0x81, 0x0C, 0x18, 0x41, 0x86,
|
||||
0x18, 0x21, 0x82, 0x0F, 0x80, 0x70, 0x13, 0x20, 0x80, 0x86, 0x06, 0x10,
|
||||
0x78, 0xC0, 0x32, 0x68, 0xD3, 0xBE, 0xCE, 0x02, 0x58, 0x13, 0x60, 0x4F,
|
||||
0xC2, 0x06, 0x18, 0x18, 0x08, 0x38, 0x20, 0x00, 0x81, 0x06, 0x18, 0x61,
|
||||
0x83, 0x02, 0x17, 0xE0, 0x0C, 0x01, 0x80, 0x18, 0x00, 0x00, 0x40, 0x1C,
|
||||
0x02, 0x80, 0x58, 0x1B, 0x02, 0x20, 0x46, 0x18, 0x43, 0xFC, 0xC1, 0x98,
|
||||
0x12, 0x03, 0xC0, 0x60, 0x03, 0x00, 0x60, 0x18, 0x00, 0x00, 0x40, 0x1C,
|
||||
0x02, 0x80, 0x58, 0x1B, 0x02, 0x20, 0x46, 0x18, 0x43, 0xFC, 0xC1, 0x98,
|
||||
0x12, 0x03, 0xC0, 0x60, 0x04, 0x01, 0xC0, 0x6C, 0x00, 0x40, 0x40, 0x1C,
|
||||
0x02, 0x80, 0x58, 0x1B, 0x02, 0x20, 0x46, 0x18, 0x43, 0xFC, 0xC1, 0x98,
|
||||
0x12, 0x03, 0xC0, 0x60, 0x1C, 0x82, 0xF0, 0x00, 0x02, 0x00, 0xE0, 0x14,
|
||||
0x02, 0xC0, 0xD8, 0x11, 0x02, 0x30, 0xC2, 0x1F, 0xE6, 0x0C, 0xC0, 0x90,
|
||||
0x1E, 0x03, 0x09, 0x81, 0x20, 0x00, 0x02, 0x00, 0xE0, 0x14, 0x02, 0xC0,
|
||||
0xD8, 0x11, 0x02, 0x30, 0xC2, 0x1F, 0xE6, 0x0C, 0xC0, 0x90, 0x1E, 0x03,
|
||||
0x0E, 0x01, 0x20, 0x38, 0x07, 0x00, 0xA0, 0x16, 0x06, 0xC0, 0x88, 0x11,
|
||||
0x86, 0x10, 0xFF, 0x30, 0x66, 0x04, 0x80, 0xF0, 0x18, 0x03, 0xFC, 0x1F,
|
||||
0xF0, 0x6C, 0x03, 0x30, 0x0C, 0xC0, 0x23, 0x01, 0x8F, 0xC4, 0x30, 0x3F,
|
||||
0xC0, 0x83, 0x06, 0x0C, 0x10, 0x30, 0xC0, 0xFC, 0x0F, 0x0F, 0xF6, 0x01,
|
||||
0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x06, 0x00, 0xC2, 0x1F,
|
||||
0x81, 0x00, 0x60, 0x0C, 0x0E, 0x00, 0x60, 0xC0, 0xC0, 0x0F, 0xFF, 0xE0,
|
||||
0x40, 0x81, 0x03, 0xF4, 0x08, 0x10, 0x20, 0x40, 0xFE, 0x0C, 0x18, 0x60,
|
||||
0x0F, 0xFF, 0xE0, 0x40, 0x81, 0x03, 0xF4, 0x08, 0x10, 0x20, 0x40, 0xFE,
|
||||
0x10, 0x71, 0xB0, 0x1F, 0xFF, 0xE0, 0x40, 0x81, 0x03, 0xF4, 0x08, 0x10,
|
||||
0x20, 0x40, 0xFE, 0x4C, 0x90, 0x07, 0xFF, 0xF0, 0x20, 0x40, 0x81, 0xFA,
|
||||
0x04, 0x08, 0x10, 0x20, 0x7F, 0xCC, 0x60, 0xFF, 0x66, 0x66, 0x66, 0x66,
|
||||
0x66, 0xF0, 0x33, 0x60, 0xFF, 0x66, 0x66, 0x66, 0x66, 0x66, 0xF0, 0x21,
|
||||
0xCD, 0x81, 0x79, 0xE3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x78,
|
||||
0x9C, 0x81, 0xEF, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x9E, 0x7C, 0x0F,
|
||||
0xE1, 0x07, 0x20, 0x64, 0x06, 0x80, 0xFF, 0x1A, 0x03, 0x40, 0x68, 0x19,
|
||||
0x03, 0x21, 0xC7, 0xE0, 0x39, 0x0B, 0xC0, 0x03, 0x03, 0xC0, 0xF8, 0x3B,
|
||||
0x0E, 0xC3, 0x98, 0xE2, 0x38, 0xCE, 0x1B, 0x82, 0xE0, 0xF8, 0x1E, 0x03,
|
||||
0x0C, 0x00, 0xC0, 0x06, 0x00, 0x00, 0x0F, 0x03, 0xFC, 0x60, 0x64, 0x06,
|
||||
0xC0, 0x2C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x02, 0x60, 0x63, 0x0C,
|
||||
0x1F, 0x80, 0x03, 0x00, 0x30, 0x06, 0x00, 0x00, 0x0F, 0x03, 0xFC, 0x60,
|
||||
0x64, 0x06, 0xC0, 0x2C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x02, 0x60,
|
||||
0x63, 0x0C, 0x1F, 0x80, 0x04, 0x00, 0xE0, 0x1B, 0x00, 0x08, 0x0F, 0x03,
|
||||
0xFC, 0x60, 0x64, 0x06, 0xC0, 0x2C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C,
|
||||
0x02, 0x60, 0x63, 0x0C, 0x1F, 0x80, 0x1C, 0x81, 0x78, 0x00, 0x00, 0xF0,
|
||||
0x3F, 0xC6, 0x06, 0x40, 0x6C, 0x02, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03,
|
||||
0xC0, 0x26, 0x06, 0x30, 0xC1, 0xF8, 0x09, 0x80, 0x90, 0x00, 0x00, 0xF0,
|
||||
0x3F, 0xC6, 0x06, 0x40, 0x6C, 0x02, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03,
|
||||
0xC0, 0x26, 0x06, 0x30, 0xC1, 0xF8, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x66,
|
||||
0xC3, 0x41, 0x0F, 0x63, 0xFC, 0x60, 0xE4, 0x1E, 0xC1, 0x2C, 0x23, 0xC6,
|
||||
0x3C, 0xC3, 0xC8, 0x3D, 0x82, 0x70, 0x63, 0x0C, 0x7F, 0x84, 0x00, 0x30,
|
||||
0x18, 0x06, 0x00, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30,
|
||||
0x18, 0x0C, 0x07, 0x07, 0xC6, 0x3E, 0x00, 0x06, 0x03, 0x03, 0x00, 0x08,
|
||||
0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0x07,
|
||||
0xC6, 0x3E, 0x00, 0x08, 0x0E, 0x0D, 0x80, 0x28, 0x0C, 0x06, 0x03, 0x01,
|
||||
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0x07, 0xC6, 0x3E, 0x00, 0x26,
|
||||
0x12, 0x00, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30,
|
||||
0x18, 0x0E, 0x0F, 0x8C, 0x7C, 0x06, 0x01, 0x80, 0xC0, 0x00, 0xC0, 0xD0,
|
||||
0x26, 0x18, 0x84, 0x33, 0x04, 0x81, 0xE0, 0x30, 0x0C, 0x03, 0x00, 0xC0,
|
||||
0x30, 0x0C, 0x00, 0x80, 0x80, 0x80, 0xFE, 0x86, 0x83, 0x83, 0x83, 0x86,
|
||||
0xFC, 0x80, 0x80, 0x80, 0x7F, 0x21, 0x90, 0x58, 0x6C, 0x66, 0x63, 0x31,
|
||||
0x8E, 0xC3, 0xE0, 0x70, 0x3A, 0x3D, 0xF0, 0x30, 0x60, 0x60, 0x01, 0x8F,
|
||||
0xC0, 0x81, 0x1E, 0xE7, 0x0C, 0x1C, 0x6F, 0x40, 0x0C, 0x18, 0x60, 0x01,
|
||||
0x8F, 0xC0, 0x81, 0x1E, 0xE7, 0x0C, 0x1C, 0x6F, 0x40, 0x10, 0x71, 0xB0,
|
||||
0x11, 0x8F, 0xC0, 0x81, 0x1E, 0xE7, 0x0C, 0x1C, 0x6F, 0x40, 0x72, 0xBC,
|
||||
0x00, 0xC7, 0xE0, 0x40, 0x8F, 0x73, 0x86, 0x0E, 0x37, 0xA0, 0x26, 0x48,
|
||||
0x00, 0xC7, 0xE0, 0x40, 0x8F, 0x73, 0x86, 0x0E, 0x37, 0xA0, 0x38, 0x48,
|
||||
0xE0, 0x01, 0x8F, 0xC0, 0x81, 0x1E, 0xE7, 0x0C, 0x1C, 0x6F, 0x40, 0x18,
|
||||
0x63, 0xFF, 0x81, 0xC6, 0x04, 0x11, 0xFF, 0xB9, 0xFF, 0x08, 0x10, 0xE0,
|
||||
0xC5, 0x8B, 0xC7, 0xC0, 0x1C, 0xFD, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x62,
|
||||
0x7C, 0x40, 0xC0, 0xC7, 0x00, 0x30, 0x30, 0x18, 0x00, 0x18, 0x7E, 0x43,
|
||||
0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0x61, 0x3F, 0x0C, 0x0C, 0x18, 0x00, 0x18,
|
||||
0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0x61, 0x3F, 0x10, 0x38, 0x6C,
|
||||
0x02, 0x18, 0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0x61, 0x3F, 0x26,
|
||||
0x24, 0x00, 0x18, 0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0x61, 0x3F,
|
||||
0xD9, 0x80, 0xDB, 0x6D, 0xB6, 0xC0, 0x33, 0x60, 0x0C, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0x21, 0xCD, 0x81, 0x01, 0x86, 0x18, 0x61, 0x86, 0x18, 0x61, 0x80,
|
||||
0x9C, 0x80, 0x06, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x00, 0x3B, 0x06, 0x0D,
|
||||
0x84, 0x60, 0x33, 0xF9, 0x0F, 0x83, 0xC1, 0xE0, 0xF0, 0x4C, 0x63, 0xE0,
|
||||
0x39, 0x2F, 0x00, 0x0C, 0xFF, 0xE1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
|
||||
0xC1, 0x30, 0x18, 0x06, 0x00, 0x01, 0x83, 0xF1, 0x0D, 0x83, 0xC1, 0xE0,
|
||||
0xF0, 0x78, 0x26, 0x31, 0xF0, 0x06, 0x03, 0x03, 0x00, 0x01, 0x83, 0xF1,
|
||||
0x0D, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x26, 0x31, 0xF0, 0x08, 0x0E, 0x0D,
|
||||
0x80, 0x21, 0x83, 0xF1, 0x0D, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x26, 0x31,
|
||||
0xF0, 0x72, 0x2F, 0x00, 0x03, 0x07, 0xE2, 0x1B, 0x07, 0x83, 0xC1, 0xE0,
|
||||
0xF0, 0x4C, 0x63, 0xE0, 0x26, 0x12, 0x00, 0x03, 0x07, 0xE2, 0x1B, 0x07,
|
||||
0x83, 0xC1, 0xE0, 0xF0, 0x4C, 0x63, 0xE0, 0x18, 0x18, 0x00, 0xFF, 0x00,
|
||||
0x00, 0x18, 0x18, 0x19, 0x3F, 0x90, 0xD8, 0xAC, 0xDE, 0xCF, 0x47, 0xE2,
|
||||
0x63, 0x7F, 0x10, 0x00, 0x30, 0x30, 0x18, 0x00, 0x00, 0xC1, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x06, 0x06, 0x0C, 0x00, 0x00, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x08, 0x1C, 0x36, 0x01,
|
||||
0x00, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x26, 0x24,
|
||||
0x00, 0x00, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x06,
|
||||
0x03, 0x03, 0x00, 0x00, 0x06, 0x0D, 0x04, 0xC6, 0x22, 0x19, 0x0D, 0x82,
|
||||
0x81, 0xC0, 0x60, 0x20, 0x30, 0x10, 0x78, 0x00, 0xC0, 0x60, 0x30, 0x19,
|
||||
0x8F, 0xF7, 0x0B, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x6D, 0xE6, 0x03,
|
||||
0x01, 0x80, 0xC0, 0x00, 0x26, 0x12, 0x00, 0x00, 0x0C, 0x1A, 0x09, 0x8C,
|
||||
0x44, 0x32, 0x1B, 0x05, 0x03, 0x80, 0xC0, 0x40, 0x60, 0x20, 0xF0, 0x00,
|
||||
0x1F, 0x00, 0x00, 0x10, 0x07, 0x00, 0xA0, 0x16, 0x06, 0xC0, 0x88, 0x11,
|
||||
0x86, 0x10, 0xFF, 0x30, 0x66, 0x04, 0x80, 0xF0, 0x18, 0x3E, 0x00, 0x63,
|
||||
0xF0, 0x20, 0x47, 0xB9, 0xC3, 0x07, 0x1B, 0xD0, 0x11, 0x03, 0xE0, 0x00,
|
||||
0x02, 0x00, 0xE0, 0x14, 0x02, 0xC0, 0xD8, 0x11, 0x02, 0x30, 0xC2, 0x1F,
|
||||
0xE6, 0x0C, 0xC0, 0x90, 0x1E, 0x03, 0x22, 0x7C, 0x00, 0xC7, 0xE0, 0x40,
|
||||
0x8F, 0x73, 0x86, 0x0E, 0x37, 0xA0, 0x04, 0x00, 0xE0, 0x0A, 0x00, 0xB0,
|
||||
0x1B, 0x01, 0x10, 0x11, 0x83, 0x08, 0x3F, 0xC6, 0x0C, 0x60, 0x44, 0x06,
|
||||
0xC0, 0x60, 0x06, 0x00, 0x40, 0x04, 0x00, 0x70, 0x18, 0x7E, 0x02, 0x02,
|
||||
0x1E, 0x72, 0xC2, 0x82, 0xC6, 0x7A, 0x06, 0x04, 0x04, 0x07, 0x03, 0x00,
|
||||
0xC0, 0x60, 0x00, 0x0F, 0x0F, 0xF6, 0x01, 0x80, 0xC0, 0x30, 0x0C, 0x03,
|
||||
0x00, 0xC0, 0x30, 0x06, 0x00, 0xC2, 0x1F, 0x80, 0x0C, 0x18, 0x60, 0x01,
|
||||
0xCF, 0xD0, 0x60, 0xC1, 0x83, 0x06, 0x06, 0x27, 0xC0, 0x04, 0x03, 0x81,
|
||||
0xB0, 0x02, 0x0F, 0x0F, 0xF6, 0x01, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00,
|
||||
0xC0, 0x30, 0x06, 0x00, 0xC2, 0x1F, 0x80, 0x10, 0x71, 0xB0, 0x11, 0xCF,
|
||||
0xD0, 0x60, 0xC1, 0x83, 0x06, 0x06, 0x27, 0xC0, 0x04, 0x01, 0x80, 0x00,
|
||||
0x3C, 0x3F, 0xD8, 0x06, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0,
|
||||
0x18, 0x03, 0x08, 0x7E, 0x10, 0x30, 0x00, 0xE7, 0xE8, 0x30, 0x60, 0xC1,
|
||||
0x83, 0x03, 0x13, 0xE0, 0x10, 0x86, 0xC0, 0xE0, 0x00, 0x0F, 0x0F, 0xF6,
|
||||
0x01, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x06, 0x00, 0xC2,
|
||||
0x1F, 0x80, 0x42, 0xD8, 0xE0, 0x01, 0xCF, 0xD0, 0x60, 0xC1, 0x83, 0x06,
|
||||
0x06, 0x27, 0xC0, 0x21, 0x0D, 0x81, 0xC0, 0x00, 0xF8, 0x3F, 0xC8, 0x3A,
|
||||
0x06, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x68, 0x1A, 0x1C, 0xFC,
|
||||
0x00, 0x01, 0x60, 0x28, 0x04, 0x0C, 0x87, 0xF1, 0x86, 0x30, 0x46, 0x08,
|
||||
0xC1, 0x18, 0x23, 0x04, 0x31, 0x83, 0xD0, 0x7C, 0x0F, 0xE1, 0x07, 0x20,
|
||||
0x64, 0x06, 0x80, 0xFF, 0x1A, 0x03, 0x40, 0x68, 0x19, 0x03, 0x21, 0xC7,
|
||||
0xE0, 0x01, 0x07, 0xF0, 0x10, 0x64, 0x7F, 0x30, 0xCC, 0x13, 0x04, 0xC1,
|
||||
0x30, 0x4C, 0x11, 0x8C, 0x3D, 0x00, 0x7C, 0x03, 0xFF, 0xF8, 0x10, 0x20,
|
||||
0x40, 0xFD, 0x02, 0x04, 0x08, 0x10, 0x3F, 0x80, 0x3E, 0x00, 0x18, 0x7E,
|
||||
0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0x61, 0x3F, 0x44, 0xF8, 0x07, 0xFF,
|
||||
0xF0, 0x20, 0x40, 0x81, 0xFA, 0x04, 0x08, 0x10, 0x20, 0x7F, 0x22, 0x3E,
|
||||
0x00, 0x18, 0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0x61, 0x3F, 0x10,
|
||||
0x30, 0x07, 0xFF, 0xF0, 0x20, 0x40, 0x81, 0xFA, 0x04, 0x08, 0x10, 0x20,
|
||||
0x7F, 0x10, 0x18, 0x00, 0x18, 0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0,
|
||||
0x61, 0x3F, 0xFF, 0xFE, 0x04, 0x08, 0x10, 0x3F, 0x40, 0x81, 0x02, 0x04,
|
||||
0x0F, 0xE1, 0x82, 0x04, 0x0E, 0x18, 0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0,
|
||||
0xC0, 0x61, 0x3F, 0x06, 0x04, 0x04, 0x07, 0x42, 0xD8, 0xE0, 0x0F, 0xFF,
|
||||
0xE0, 0x40, 0x81, 0x03, 0xF4, 0x08, 0x10, 0x20, 0x40, 0xFE, 0x42, 0x6C,
|
||||
0x38, 0x00, 0x18, 0x7E, 0x43, 0xC3, 0xFF, 0xFF, 0xC0, 0xC0, 0x61, 0x3F,
|
||||
0x04, 0x01, 0xC0, 0x6C, 0x00, 0x40, 0xF8, 0x7F, 0x9C, 0x03, 0x00, 0xC0,
|
||||
0x18, 0x03, 0x0F, 0xE1, 0xFC, 0x06, 0x80, 0xD8, 0x19, 0x83, 0x1F, 0xE0,
|
||||
0x08, 0x1C, 0x36, 0x01, 0x18, 0x7F, 0x43, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
|
||||
0x63, 0x3D, 0x01, 0x01, 0x43, 0x7E, 0x08, 0x81, 0xF0, 0x00, 0x07, 0xC3,
|
||||
0xFC, 0xE0, 0x18, 0x06, 0x00, 0xC0, 0x18, 0x7F, 0x0F, 0xE0, 0x34, 0x06,
|
||||
0xC0, 0xCC, 0x18, 0xFF, 0x22, 0x3E, 0x00, 0x18, 0x7F, 0x43, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0x63, 0x3D, 0x01, 0x01, 0x43, 0x7E, 0x02, 0x00, 0x60,
|
||||
0x00, 0x07, 0xC3, 0xFC, 0xE0, 0x18, 0x06, 0x00, 0xC0, 0x18, 0x7F, 0x0F,
|
||||
0xE0, 0x34, 0x06, 0xC0, 0xCC, 0x18, 0xFF, 0x08, 0x0C, 0x00, 0x18, 0x7F,
|
||||
0x43, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x3D, 0x01, 0x01, 0x43, 0x7E,
|
||||
0x0F, 0x87, 0xF9, 0xC0, 0x30, 0x0C, 0x01, 0x80, 0x30, 0xFE, 0x1F, 0xC0,
|
||||
0x68, 0x0D, 0x81, 0x98, 0x31, 0xFE, 0x00, 0x00, 0x80, 0x30, 0x04, 0x00,
|
||||
0x08, 0x08, 0x18, 0x00, 0x18, 0x7F, 0x43, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
|
||||
0x63, 0x3D, 0x01, 0x01, 0x43, 0x7E, 0x08, 0x0E, 0x0D, 0x80, 0x28, 0x0C,
|
||||
0x06, 0x03, 0x01, 0x80, 0xC0, 0x7F, 0xF0, 0x18, 0x0C, 0x06, 0x03, 0x01,
|
||||
0x80, 0x80, 0x20, 0x38, 0x36, 0x00, 0x80, 0x03, 0x01, 0x80, 0xC0, 0x66,
|
||||
0x3F, 0xDC, 0x2C, 0x16, 0x0B, 0x05, 0x82, 0xC1, 0x60, 0xB0, 0x40, 0x20,
|
||||
0x21, 0x01, 0x08, 0x09, 0xFF, 0xF2, 0x02, 0x10, 0x10, 0xFF, 0x84, 0x04,
|
||||
0x20, 0x21, 0x01, 0x08, 0x08, 0x40, 0x42, 0x02, 0x00, 0x60, 0x7F, 0x18,
|
||||
0x0C, 0x06, 0xFB, 0x8D, 0x82, 0xC1, 0x60, 0xB0, 0x58, 0x2C, 0x16, 0x08,
|
||||
0xE6, 0xF0, 0x1E, 0x78, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x1E,
|
||||
0xE6, 0xF0, 0x00, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xF8, 0x3D,
|
||||
0xE6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x33, 0xC0, 0xF8, 0x00, 0xC6, 0x31,
|
||||
0x8C, 0x63, 0x18, 0xC0, 0x8F, 0xC1, 0xEF, 0x31, 0x8C, 0x63, 0x18, 0xC6,
|
||||
0x31, 0x9E, 0x8F, 0xC0, 0x06, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x00, 0xF7,
|
||||
0x98, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xCF, 0x18, 0x84, 0x38, 0xD8, 0x0D,
|
||||
0xB6, 0xDB, 0x6D, 0xA4, 0xE0, 0x46, 0x0F, 0xF6, 0x66, 0x66, 0x66, 0x66,
|
||||
0x6F, 0xFF, 0xFF, 0xC0, 0xF1, 0xF1, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
|
||||
0x61, 0x61, 0x61, 0x61, 0xF1, 0x01, 0x03, 0x0E, 0xC7, 0x8C, 0x00, 0x0C,
|
||||
0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x60, 0xC1, 0x83, 0x1C, 0x10,
|
||||
0x71, 0xB0, 0x11, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x81, 0x02, 0x04,
|
||||
0x08, 0x10, 0x20, 0xC7, 0x00, 0x10, 0x71, 0xB0, 0x10, 0x06, 0x0C, 0x18,
|
||||
0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x31, 0xC0, 0x81, 0xC1, 0xA1,
|
||||
0x91, 0x89, 0x85, 0x83, 0xC1, 0xB0, 0x8C, 0x46, 0x21, 0x90, 0x68, 0x18,
|
||||
0x00, 0x20, 0x30, 0x10, 0x00, 0xC0, 0xC0, 0xC0, 0xC1, 0xC6, 0xCC, 0xD8,
|
||||
0xD0, 0xF8, 0xCC, 0xC4, 0xC6, 0xC3, 0x00, 0x08, 0x18, 0x10, 0xC7, 0xCC,
|
||||
0xC8, 0xD8, 0xF8, 0xCC, 0xC4, 0xC6, 0xC3, 0x60, 0xC3, 0x00, 0x08, 0x10,
|
||||
0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0xFE, 0x33, 0x60,
|
||||
0x0C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x81, 0x02, 0x04, 0x08, 0x10,
|
||||
0x20, 0x40, 0x81, 0x02, 0x04, 0x0F, 0xE0, 0x04, 0x18, 0x20, 0xFF, 0xFF,
|
||||
0xFF, 0xC7, 0x80, 0x87, 0x0A, 0x14, 0x08, 0x10, 0x20, 0x40, 0x81, 0x02,
|
||||
0x04, 0x0F, 0xE0, 0xDE, 0xB1, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x00,
|
||||
0x81, 0x02, 0x04, 0x08, 0x10, 0x22, 0x46, 0x81, 0x02, 0x04, 0x0F, 0xE0,
|
||||
0xC6, 0x31, 0x8C, 0x6B, 0x78, 0xC6, 0x31, 0x8C, 0x00, 0x20, 0x10, 0x08,
|
||||
0x04, 0x02, 0x01, 0x20, 0xE0, 0xE0, 0xE0, 0x10, 0x08, 0x04, 0x03, 0xF8,
|
||||
0x63, 0x18, 0xC6, 0x3D, 0xDC, 0xE3, 0x18, 0xC6, 0x00, 0x06, 0x01, 0x80,
|
||||
0xC0, 0x00, 0xC0, 0xF0, 0x3E, 0x0E, 0xC3, 0xB0, 0xE6, 0x38, 0x8E, 0x33,
|
||||
0x86, 0xE0, 0xB8, 0x3E, 0x07, 0x80, 0xC0, 0x06, 0x06, 0x0C, 0x00, 0x0C,
|
||||
0xFF, 0xE1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xF0, 0x3E,
|
||||
0x0E, 0xC3, 0xB0, 0xE6, 0x38, 0x8E, 0x33, 0x86, 0xE0, 0xB8, 0x3E, 0x07,
|
||||
0x80, 0xC0, 0x00, 0x40, 0x30, 0x08, 0x00, 0x0C, 0xFF, 0xE1, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x00, 0x08, 0x18, 0x10, 0x21, 0x0D, 0x81,
|
||||
0xC0, 0x00, 0xC0, 0xF0, 0x3E, 0x0E, 0xC3, 0xB0, 0xE6, 0x38, 0x8E, 0x33,
|
||||
0x86, 0xE0, 0xB8, 0x3E, 0x07, 0x80, 0xC0, 0x21, 0x36, 0x1C, 0x00, 0x0C,
|
||||
0xFF, 0xE1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x60, 0x18, 0x04,
|
||||
0x01, 0x0C, 0xBF, 0xCE, 0x13, 0x04, 0xC1, 0x30, 0x4C, 0x13, 0x04, 0xC1,
|
||||
0x30, 0x40, 0xC0, 0xF0, 0x3E, 0x0E, 0xC3, 0xB0, 0xE6, 0x38, 0xCE, 0x33,
|
||||
0x86, 0xE0, 0xF8, 0x1E, 0x07, 0x80, 0xC0, 0x30, 0x08, 0x1E, 0x0C, 0xFF,
|
||||
0xE1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x01, 0x01, 0x01, 0x07,
|
||||
0x0F, 0x80, 0x00, 0x0F, 0x03, 0xFC, 0x60, 0x64, 0x06, 0xC0, 0x2C, 0x03,
|
||||
0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x02, 0x60, 0x63, 0x0C, 0x1F, 0x80, 0x3E,
|
||||
0x00, 0x06, 0x0F, 0xC4, 0x36, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0x98, 0xC7,
|
||||
0xC0, 0x11, 0x01, 0xF0, 0x00, 0x00, 0xF0, 0x3F, 0xC6, 0x06, 0x40, 0x6C,
|
||||
0x02, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x26, 0x06, 0x30, 0xC1,
|
||||
0xF8, 0x22, 0x1F, 0x00, 0x03, 0x07, 0xE2, 0x1B, 0x07, 0x83, 0xC1, 0xE0,
|
||||
0xF0, 0x4C, 0x63, 0xE0, 0x0D, 0x80, 0x90, 0x13, 0x00, 0x00, 0x0F, 0x03,
|
||||
0xFC, 0x60, 0x64, 0x06, 0xC0, 0x2C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C,
|
||||
0x02, 0x60, 0x63, 0x0C, 0x1F, 0x80, 0x36, 0x12, 0x13, 0x00, 0x01, 0x83,
|
||||
0xF1, 0x0D, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x26, 0x31, 0xF0, 0x0F, 0xFC,
|
||||
0xFF, 0xF6, 0x08, 0x10, 0x20, 0xC0, 0x83, 0x02, 0x0C, 0x0F, 0xF0, 0x20,
|
||||
0xC0, 0x83, 0x02, 0x06, 0x08, 0x0C, 0x20, 0x1F, 0xFC, 0x18, 0x30, 0xFD,
|
||||
0xF9, 0x0E, 0x16, 0x0C, 0x3C, 0x1F, 0xF8, 0x3F, 0xF0, 0x60, 0x60, 0xC0,
|
||||
0x63, 0xC4, 0x7C, 0xF8, 0x0C, 0x06, 0x06, 0x00, 0x0F, 0x07, 0xF2, 0x0D,
|
||||
0x06, 0x83, 0x41, 0x3F, 0x9F, 0x08, 0xC4, 0x32, 0x19, 0x06, 0x81, 0x80,
|
||||
0x0C, 0x31, 0x80, 0x0F, 0x7E, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x00, 0xF0,
|
||||
0x7F, 0x20, 0xD0, 0x68, 0x34, 0x13, 0xF9, 0xF0, 0x8C, 0x43, 0x21, 0x90,
|
||||
0x68, 0x18, 0x00, 0x20, 0x30, 0x10, 0x00, 0x0F, 0x7E, 0x30, 0xC3, 0x0C,
|
||||
0x30, 0xC3, 0x00, 0x10, 0xC2, 0x00, 0x42, 0x36, 0x0E, 0x00, 0x0F, 0x07,
|
||||
0xF2, 0x0D, 0x06, 0x83, 0x41, 0x3F, 0x9F, 0x08, 0xC4, 0x32, 0x19, 0x06,
|
||||
0x81, 0x80, 0x42, 0xD8, 0xE0, 0x00, 0xDB, 0xB8, 0x60, 0xC1, 0x83, 0x06,
|
||||
0x0C, 0x18, 0x00, 0x0C, 0x0C, 0x18, 0x00, 0x3D, 0x7E, 0xC0, 0xC0, 0xC0,
|
||||
0x60, 0x3C, 0x0E, 0x03, 0x03, 0x03, 0x86, 0xFC, 0x0C, 0x18, 0x60, 0x03,
|
||||
0x9F, 0xA0, 0x60, 0x70, 0x78, 0x18, 0x38, 0x5F, 0x80, 0x10, 0x38, 0x6C,
|
||||
0x02, 0x3D, 0x7E, 0xC0, 0xC0, 0xC0, 0x60, 0x3C, 0x0E, 0x03, 0x03, 0x03,
|
||||
0x86, 0xFC, 0x10, 0x71, 0xB0, 0x13, 0x9F, 0xA0, 0x60, 0x70, 0x78, 0x18,
|
||||
0x38, 0x5F, 0x80, 0x3D, 0x7E, 0xC0, 0xC0, 0xC0, 0x60, 0x3C, 0x0E, 0x03,
|
||||
0x03, 0x03, 0x86, 0xFC, 0x10, 0x18, 0x0C, 0x38, 0x39, 0xFA, 0x06, 0x07,
|
||||
0x07, 0x81, 0x83, 0x85, 0xF8, 0x81, 0x81, 0x8E, 0x00, 0x42, 0x6C, 0x38,
|
||||
0x00, 0x3D, 0x7E, 0xC0, 0xC0, 0xC0, 0x60, 0x3C, 0x0E, 0x03, 0x03, 0x03,
|
||||
0x86, 0xFC, 0x42, 0xD8, 0xE0, 0x03, 0x9F, 0xA0, 0x60, 0x70, 0x78, 0x18,
|
||||
0x38, 0x5F, 0x80, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0,
|
||||
0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x02, 0x00, 0xC0, 0x18, 0x1C,
|
||||
0x00, 0x20, 0x86, 0x3F, 0x20, 0x82, 0x08, 0x20, 0x83, 0x0F, 0x10, 0x60,
|
||||
0xCE, 0x21, 0x0D, 0x81, 0xC0, 0x00, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C,
|
||||
0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x00, 0x01,
|
||||
0x23, 0x20, 0x60, 0xFC, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x3C,
|
||||
0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x07, 0xF0, 0x30, 0x0C, 0x03,
|
||||
0x00, 0xC0, 0x30, 0x0C, 0x00, 0x20, 0x86, 0x3F, 0x20, 0x8F, 0xC8, 0x20,
|
||||
0x83, 0x0F, 0x39, 0x17, 0x80, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
|
||||
0xC0, 0x60, 0x30, 0x18, 0x0E, 0x0F, 0x8C, 0x7C, 0x39, 0x2F, 0x00, 0x00,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x3E, 0x00, 0x20,
|
||||
0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x1C, 0x1F,
|
||||
0x18, 0xF8, 0x3E, 0x00, 0x00, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
|
||||
0x63, 0x7D, 0x22, 0x1F, 0x00, 0x10, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80,
|
||||
0xC0, 0x60, 0x30, 0x18, 0x0E, 0x0F, 0x8C, 0x7C, 0x22, 0x3E, 0x00, 0x00,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x1C, 0x09, 0x07,
|
||||
0x00, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C,
|
||||
0x07, 0x07, 0xC6, 0x3E, 0x00, 0x1C, 0x12, 0x1C, 0x00, 0x00, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x1B, 0x09, 0x09, 0x80, 0x08,
|
||||
0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x07, 0x07,
|
||||
0xC6, 0x3E, 0x00, 0x1B, 0x12, 0x26, 0x00, 0x00, 0xC1, 0xC1, 0xC1, 0xC1,
|
||||
0xC1, 0xC1, 0xC1, 0x63, 0x7D, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
|
||||
0x03, 0x01, 0x80, 0xC0, 0x70, 0x7C, 0x63, 0xE0, 0x10, 0x10, 0x08, 0x07,
|
||||
0x00, 0xC1, 0x60, 0xB0, 0x58, 0x2C, 0x16, 0x0B, 0x04, 0xC6, 0x7D, 0x01,
|
||||
0x80, 0x80, 0x40, 0x38, 0x00, 0x80, 0x01, 0xC0, 0x03, 0x60, 0x00, 0x10,
|
||||
0xC1, 0x83, 0x41, 0x83, 0x41, 0xC3, 0x63, 0xC2, 0x63, 0x46, 0x22, 0x46,
|
||||
0x22, 0x66, 0x36, 0x24, 0x34, 0x2C, 0x14, 0x3C, 0x14, 0x38, 0x1C, 0x18,
|
||||
0x18, 0x18, 0x02, 0x00, 0x1C, 0x00, 0xD8, 0x00, 0x10, 0x00, 0x07, 0x0C,
|
||||
0x24, 0x70, 0x99, 0xE6, 0x64, 0x98, 0x92, 0x42, 0xCD, 0x0E, 0x3C, 0x38,
|
||||
0x60, 0x61, 0x80, 0x08, 0x07, 0x03, 0x60, 0x04, 0xC0, 0xD0, 0x26, 0x18,
|
||||
0x84, 0x33, 0x04, 0x81, 0xE0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C,
|
||||
0x00, 0x08, 0x0E, 0x0D, 0x80, 0x20, 0x06, 0x0D, 0x04, 0xC6, 0x22, 0x19,
|
||||
0x0D, 0x82, 0x81, 0xC0, 0x60, 0x20, 0x30, 0x10, 0x78, 0x00, 0x13, 0x04,
|
||||
0x80, 0x03, 0x03, 0x40, 0x98, 0x62, 0x10, 0xCC, 0x12, 0x07, 0x80, 0xC0,
|
||||
0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x0C, 0x18, 0x00, 0xFF, 0xFF,
|
||||
0x03, 0x06, 0x04, 0x0C, 0x18, 0x10, 0x30, 0x60, 0x40, 0xC0, 0xFF, 0x0C,
|
||||
0x18, 0x60, 0x00, 0x1F, 0x83, 0x04, 0x18, 0x61, 0x82, 0x0C, 0x1F, 0xC0,
|
||||
0x08, 0x0C, 0x00, 0xFF, 0xFF, 0x03, 0x06, 0x04, 0x0C, 0x18, 0x10, 0x30,
|
||||
0x60, 0x40, 0xC0, 0xFF, 0x10, 0x30, 0x00, 0x0F, 0xC1, 0x82, 0x0C, 0x30,
|
||||
0xC1, 0x06, 0x0F, 0xE0, 0x42, 0x6C, 0x38, 0x00, 0xFF, 0xFF, 0x03, 0x06,
|
||||
0x04, 0x0C, 0x18, 0x10, 0x30, 0x60, 0x40, 0xC0, 0xFF, 0x85, 0xB1, 0xC0,
|
||||
0x00, 0x1F, 0x83, 0x04, 0x18, 0x61, 0x82, 0x0C, 0x1F, 0xC0, 0x7A, 0x11,
|
||||
0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x00 };
|
||||
|
||||
const GFXglyph NotoSans9pt8bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 5, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 2, 13, 5, 1, -12 }, // 0x21 '!'
|
||||
{ 5, 5, 5, 7, 1, -12 }, // 0x22 '"'
|
||||
{ 9, 11, 13, 11, 0, -12 }, // 0x23 '#'
|
||||
{ 27, 8, 14, 10, 1, -12 }, // 0x24 '$'
|
||||
{ 41, 13, 13, 15, 1, -12 }, // 0x25 '%'
|
||||
{ 63, 12, 13, 13, 1, -12 }, // 0x26 '&'
|
||||
{ 83, 2, 5, 4, 1, -12 }, // 0x27 '''
|
||||
{ 85, 4, 16, 5, 1, -12 }, // 0x28 '('
|
||||
{ 93, 4, 16, 5, 1, -12 }, // 0x29 ')'
|
||||
{ 101, 8, 8, 10, 1, -12 }, // 0x2A '*'
|
||||
{ 109, 8, 8, 10, 1, -9 }, // 0x2B '+'
|
||||
{ 117, 2, 4, 5, 1, -1 }, // 0x2C ','
|
||||
{ 118, 4, 1, 6, 1, -4 }, // 0x2D '-'
|
||||
{ 119, 2, 2, 5, 1, -1 }, // 0x2E '.'
|
||||
{ 120, 6, 13, 7, 0, -12 }, // 0x2F '/'
|
||||
{ 130, 8, 13, 10, 1, -12 }, // 0x30 '0'
|
||||
{ 143, 4, 13, 10, 2, -12 }, // 0x31 '1'
|
||||
{ 150, 8, 13, 10, 1, -12 }, // 0x32 '2'
|
||||
{ 163, 8, 13, 10, 1, -12 }, // 0x33 '3'
|
||||
{ 176, 10, 13, 10, 0, -12 }, // 0x34 '4'
|
||||
{ 193, 8, 13, 10, 1, -12 }, // 0x35 '5'
|
||||
{ 206, 8, 13, 10, 1, -12 }, // 0x36 '6'
|
||||
{ 219, 8, 13, 10, 1, -12 }, // 0x37 '7'
|
||||
{ 232, 8, 13, 10, 1, -12 }, // 0x38 '8'
|
||||
{ 245, 8, 13, 10, 1, -12 }, // 0x39 '9'
|
||||
{ 258, 2, 10, 5, 1, -9 }, // 0x3A ':'
|
||||
{ 261, 2, 12, 5, 1, -9 }, // 0x3B ';'
|
||||
{ 264, 8, 9, 10, 1, -10 }, // 0x3C '<'
|
||||
{ 273, 8, 5, 10, 1, -8 }, // 0x3D '='
|
||||
{ 278, 8, 9, 10, 1, -10 }, // 0x3E '>'
|
||||
{ 287, 7, 13, 8, 0, -12 }, // 0x3F '?'
|
||||
{ 299, 14, 15, 16, 1, -12 }, // 0x40 '@'
|
||||
{ 326, 11, 13, 11, 0, -12 }, // 0x41 'A'
|
||||
{ 344, 9, 13, 11, 2, -12 }, // 0x42 'B'
|
||||
{ 359, 10, 13, 11, 1, -12 }, // 0x43 'C'
|
||||
{ 376, 10, 13, 13, 2, -12 }, // 0x44 'D'
|
||||
{ 393, 7, 13, 10, 2, -12 }, // 0x45 'E'
|
||||
{ 405, 7, 13, 9, 2, -12 }, // 0x46 'F'
|
||||
{ 417, 11, 13, 13, 1, -12 }, // 0x47 'G'
|
||||
{ 435, 9, 13, 13, 2, -12 }, // 0x48 'H'
|
||||
{ 450, 4, 13, 6, 1, -12 }, // 0x49 'I'
|
||||
{ 457, 4, 16, 5, -1, -12 }, // 0x4A 'J'
|
||||
{ 465, 9, 13, 11, 2, -12 }, // 0x4B 'K'
|
||||
{ 480, 7, 13, 9, 2, -12 }, // 0x4C 'L'
|
||||
{ 492, 12, 13, 16, 2, -12 }, // 0x4D 'M'
|
||||
{ 512, 10, 13, 13, 2, -12 }, // 0x4E 'N'
|
||||
{ 529, 12, 13, 14, 1, -12 }, // 0x4F 'O'
|
||||
{ 549, 8, 13, 11, 2, -12 }, // 0x50 'P'
|
||||
{ 562, 12, 16, 14, 1, -12 }, // 0x51 'Q'
|
||||
{ 586, 9, 13, 11, 2, -12 }, // 0x52 'R'
|
||||
{ 601, 8, 13, 10, 1, -12 }, // 0x53 'S'
|
||||
{ 614, 10, 13, 10, 0, -12 }, // 0x54 'T'
|
||||
{ 631, 9, 13, 13, 2, -12 }, // 0x55 'U'
|
||||
{ 646, 11, 13, 11, 0, -12 }, // 0x56 'V'
|
||||
{ 664, 16, 13, 16, 0, -12 }, // 0x57 'W'
|
||||
{ 690, 10, 13, 10, 0, -12 }, // 0x58 'X'
|
||||
{ 707, 10, 13, 10, 0, -12 }, // 0x59 'Y'
|
||||
{ 724, 8, 13, 10, 1, -12 }, // 0x5A 'Z'
|
||||
{ 737, 4, 16, 6, 1, -12 }, // 0x5B '['
|
||||
{ 745, 6, 13, 7, 0, -12 }, // 0x5C '\'
|
||||
{ 755, 4, 16, 6, 0, -12 }, // 0x5D ']'
|
||||
{ 763, 8, 8, 10, 1, -12 }, // 0x5E '^'
|
||||
{ 771, 8, 1, 8, 0, 3 }, // 0x5F '_'
|
||||
{ 772, 3, 3, 5, 1, -13 }, // 0x60 '`'
|
||||
{ 774, 7, 10, 10, 1, -9 }, // 0x61 'a'
|
||||
{ 783, 9, 13, 11, 1, -12 }, // 0x62 'b'
|
||||
{ 798, 7, 10, 8, 1, -9 }, // 0x63 'c'
|
||||
{ 807, 8, 13, 11, 1, -12 }, // 0x64 'd'
|
||||
{ 820, 8, 10, 10, 1, -9 }, // 0x65 'e'
|
||||
{ 830, 7, 13, 6, 0, -12 }, // 0x66 'f'
|
||||
{ 842, 8, 14, 11, 1, -9 }, // 0x67 'g'
|
||||
{ 856, 8, 13, 11, 1, -12 }, // 0x68 'h'
|
||||
{ 869, 2, 13, 5, 1, -12 }, // 0x69 'i'
|
||||
{ 873, 4, 17, 5, -1, -12 }, // 0x6A 'j'
|
||||
{ 882, 8, 13, 9, 1, -12 }, // 0x6B 'k'
|
||||
{ 895, 2, 13, 5, 1, -12 }, // 0x6C 'l'
|
||||
{ 899, 14, 10, 16, 1, -9 }, // 0x6D 'm'
|
||||
{ 917, 8, 10, 11, 1, -9 }, // 0x6E 'n'
|
||||
{ 927, 9, 10, 11, 1, -9 }, // 0x6F 'o'
|
||||
{ 939, 9, 14, 11, 1, -9 }, // 0x70 'p'
|
||||
{ 955, 8, 14, 11, 1, -9 }, // 0x71 'q'
|
||||
{ 969, 6, 10, 7, 1, -9 }, // 0x72 'r'
|
||||
{ 977, 7, 10, 8, 1, -9 }, // 0x73 's'
|
||||
{ 986, 6, 12, 6, 0, -11 }, // 0x74 't'
|
||||
{ 995, 8, 9, 11, 1, -8 }, // 0x75 'u'
|
||||
{ 1004, 9, 9, 9, 0, -8 }, // 0x76 'v'
|
||||
{ 1015, 14, 9, 14, 0, -8 }, // 0x77 'w'
|
||||
{ 1031, 9, 9, 9, 0, -8 }, // 0x78 'x'
|
||||
{ 1042, 9, 13, 9, 0, -8 }, // 0x79 'y'
|
||||
{ 1057, 7, 9, 8, 1, -8 }, // 0x7A 'z'
|
||||
{ 1065, 6, 16, 7, 0, -12 }, // 0x7B '{'
|
||||
{ 1077, 2, 17, 10, 4, -12 }, // 0x7C '|'
|
||||
{ 1082, 5, 16, 7, 1, -12 }, // 0x7D '}'
|
||||
{ 1092, 8, 2, 10, 1, -6 }, // 0x7E '~'
|
||||
{ 1094, 7, 13, 11, 2, -12 }, // 0x7F
|
||||
{ 1106, 7, 13, 11, 2, -12 }, // 0x80
|
||||
{ 1118, 7, 13, 11, 2, -12 }, // 0x81
|
||||
{ 1130, 7, 13, 11, 2, -12 }, // 0x82
|
||||
{ 1142, 7, 13, 11, 2, -12 }, // 0x83
|
||||
{ 1154, 7, 13, 11, 2, -12 }, // 0x84
|
||||
{ 1166, 7, 13, 11, 2, -12 }, // 0x85
|
||||
{ 1178, 7, 13, 11, 2, -12 }, // 0x86
|
||||
{ 1190, 7, 13, 11, 2, -12 }, // 0x87
|
||||
{ 1202, 7, 13, 11, 2, -12 }, // 0x88
|
||||
{ 1214, 7, 13, 11, 2, -12 }, // 0x89
|
||||
{ 1226, 7, 13, 11, 2, -12 }, // 0x8A
|
||||
{ 1238, 7, 13, 11, 2, -12 }, // 0x8B
|
||||
{ 1250, 7, 13, 11, 2, -12 }, // 0x8C
|
||||
{ 1262, 7, 13, 11, 2, -12 }, // 0x8D
|
||||
{ 1274, 7, 13, 11, 2, -12 }, // 0x8E
|
||||
{ 1286, 7, 13, 11, 2, -12 }, // 0x8F
|
||||
{ 1298, 7, 13, 11, 2, -12 }, // 0x90
|
||||
{ 1310, 7, 13, 11, 2, -12 }, // 0x91
|
||||
{ 1322, 7, 13, 11, 2, -12 }, // 0x92
|
||||
{ 1334, 7, 13, 11, 2, -12 }, // 0x93
|
||||
{ 1346, 7, 13, 11, 2, -12 }, // 0x94
|
||||
{ 1358, 7, 13, 11, 2, -12 }, // 0x95
|
||||
{ 1370, 7, 13, 11, 2, -12 }, // 0x96
|
||||
{ 1382, 7, 13, 11, 2, -12 }, // 0x97
|
||||
{ 1394, 7, 13, 11, 2, -12 }, // 0x98
|
||||
{ 1406, 7, 13, 11, 2, -12 }, // 0x99
|
||||
{ 1418, 7, 13, 11, 2, -12 }, // 0x9A
|
||||
{ 1430, 7, 13, 11, 2, -12 }, // 0x9B
|
||||
{ 1442, 7, 13, 11, 2, -12 }, // 0x9C
|
||||
{ 1454, 7, 13, 11, 2, -12 }, // 0x9D
|
||||
{ 1466, 7, 13, 11, 2, -12 }, // 0x9E
|
||||
{ 1478, 7, 13, 11, 2, -12 }, // 0x9F
|
||||
{ 1490, 1, 1, 5, 0, 0 }, // 0xA0
|
||||
{ 1491, 2, 13, 5, 1, -9 }, // 0xA1
|
||||
{ 1495, 7, 13, 10, 2, -12 }, // 0xA2
|
||||
{ 1507, 8, 13, 10, 1, -12 }, // 0xA3
|
||||
{ 1520, 8, 8, 10, 1, -9 }, // 0xA4
|
||||
{ 1528, 10, 13, 10, 0, -12 }, // 0xA5
|
||||
{ 1545, 2, 17, 10, 4, -12 }, // 0xA6
|
||||
{ 1550, 7, 13, 9, 1, -12 }, // 0xA7
|
||||
{ 1562, 5, 2, 10, 3, -12 }, // 0xA8
|
||||
{ 1564, 13, 13, 15, 1, -12 }, // 0xA9
|
||||
{ 1586, 4, 6, 6, 1, -12 }, // 0xAA
|
||||
{ 1589, 7, 7, 9, 1, -7 }, // 0xAB
|
||||
{ 1596, 8, 5, 10, 1, -6 }, // 0xAC
|
||||
{ 1601, 4, 1, 6, 1, -4 }, // 0xAD
|
||||
{ 1602, 13, 13, 15, 1, -12 }, // 0xAE
|
||||
{ 1624, 9, 2, 9, 0, -14 }, // 0xAF
|
||||
{ 1627, 6, 6, 8, 1, -12 }, // 0xB0
|
||||
{ 1632, 8, 11, 10, 1, -10 }, // 0xB1
|
||||
{ 1643, 5, 8, 6, 0, -14 }, // 0xB2
|
||||
{ 1648, 6, 8, 6, 0, -14 }, // 0xB3
|
||||
{ 1654, 3, 3, 5, 1, -13 }, // 0xB4
|
||||
{ 1656, 8, 13, 11, 1, -8 }, // 0xB5
|
||||
{ 1669, 9, 15, 12, 1, -12 }, // 0xB6
|
||||
{ 1686, 2, 2, 5, 1, -6 }, // 0xB7
|
||||
{ 1687, 4, 4, 4, 0, 1 }, // 0xB8
|
||||
{ 1689, 3, 8, 6, 1, -14 }, // 0xB9
|
||||
{ 1692, 5, 6, 7, 1, -12 }, // 0xBA
|
||||
{ 1696, 7, 7, 9, 1, -7 }, // 0xBB
|
||||
{ 1703, 12, 13, 13, 1, -12 }, // 0xBC
|
||||
{ 1723, 13, 13, 14, 0, -12 }, // 0xBD
|
||||
{ 1745, 14, 13, 14, 0, -12 }, // 0xBE
|
||||
{ 1768, 7, 13, 8, 0, -9 }, // 0xBF
|
||||
{ 1780, 11, 17, 11, 0, -16 }, // 0xC0
|
||||
{ 1804, 11, 17, 11, 0, -16 }, // 0xC1
|
||||
{ 1828, 11, 17, 11, 0, -16 }, // 0xC2
|
||||
{ 1852, 11, 16, 11, 0, -15 }, // 0xC3
|
||||
{ 1874, 11, 16, 11, 0, -15 }, // 0xC4
|
||||
{ 1896, 11, 15, 11, 0, -14 }, // 0xC5
|
||||
{ 1917, 14, 13, 16, 0, -12 }, // 0xC6
|
||||
{ 1940, 10, 17, 11, 1, -12 }, // 0xC7
|
||||
{ 1962, 7, 17, 10, 2, -16 }, // 0xC8
|
||||
{ 1977, 7, 17, 10, 2, -16 }, // 0xC9
|
||||
{ 1992, 7, 17, 10, 2, -16 }, // 0xCA
|
||||
{ 2007, 7, 16, 10, 2, -15 }, // 0xCB
|
||||
{ 2021, 4, 17, 6, 1, -16 }, // 0xCC
|
||||
{ 2030, 4, 17, 6, 1, -16 }, // 0xCD
|
||||
{ 2039, 6, 17, 6, 0, -16 }, // 0xCE
|
||||
{ 2052, 5, 16, 6, 1, -15 }, // 0xCF
|
||||
{ 2062, 11, 13, 13, 1, -12 }, // 0xD0
|
||||
{ 2080, 10, 16, 13, 2, -15 }, // 0xD1
|
||||
{ 2100, 12, 17, 14, 1, -16 }, // 0xD2
|
||||
{ 2126, 12, 17, 14, 1, -16 }, // 0xD3
|
||||
{ 2152, 12, 17, 14, 1, -16 }, // 0xD4
|
||||
{ 2178, 12, 16, 14, 1, -15 }, // 0xD5
|
||||
{ 2202, 12, 16, 14, 1, -15 }, // 0xD6
|
||||
{ 2226, 8, 8, 10, 1, -9 }, // 0xD7
|
||||
{ 2234, 12, 14, 14, 1, -12 }, // 0xD8
|
||||
{ 2255, 9, 17, 13, 2, -16 }, // 0xD9
|
||||
{ 2275, 9, 17, 13, 2, -16 }, // 0xDA
|
||||
{ 2295, 9, 17, 13, 2, -16 }, // 0xDB
|
||||
{ 2315, 9, 16, 13, 2, -15 }, // 0xDC
|
||||
{ 2333, 10, 17, 10, 0, -16 }, // 0xDD
|
||||
{ 2355, 8, 13, 11, 2, -12 }, // 0xDE
|
||||
{ 2368, 9, 13, 11, 1, -12 }, // 0xDF
|
||||
{ 2383, 7, 14, 10, 1, -13 }, // 0xE0
|
||||
{ 2396, 7, 14, 10, 1, -13 }, // 0xE1
|
||||
{ 2409, 7, 14, 10, 1, -13 }, // 0xE2
|
||||
{ 2422, 7, 13, 10, 1, -12 }, // 0xE3
|
||||
{ 2434, 7, 13, 10, 1, -12 }, // 0xE4
|
||||
{ 2446, 7, 14, 10, 1, -13 }, // 0xE5
|
||||
{ 2459, 13, 10, 15, 1, -9 }, // 0xE6
|
||||
{ 2476, 7, 14, 8, 1, -9 }, // 0xE7
|
||||
{ 2489, 8, 14, 10, 1, -13 }, // 0xE8
|
||||
{ 2503, 8, 14, 10, 1, -13 }, // 0xE9
|
||||
{ 2517, 8, 14, 10, 1, -13 }, // 0xEA
|
||||
{ 2531, 8, 13, 10, 1, -12 }, // 0xEB
|
||||
{ 2544, 3, 14, 5, 0, -13 }, // 0xEC
|
||||
{ 2550, 4, 14, 5, 1, -13 }, // 0xED
|
||||
{ 2557, 6, 14, 5, 0, -13 }, // 0xEE
|
||||
{ 2568, 5, 13, 5, 0, -12 }, // 0xEF
|
||||
{ 2577, 9, 13, 11, 1, -12 }, // 0xF0
|
||||
{ 2592, 8, 13, 11, 1, -12 }, // 0xF1
|
||||
{ 2605, 9, 14, 11, 1, -13 }, // 0xF2
|
||||
{ 2621, 9, 14, 11, 1, -13 }, // 0xF3
|
||||
{ 2637, 9, 14, 11, 1, -13 }, // 0xF4
|
||||
{ 2653, 9, 13, 11, 1, -12 }, // 0xF5
|
||||
{ 2668, 9, 13, 11, 1, -12 }, // 0xF6
|
||||
{ 2683, 8, 8, 10, 1, -9 }, // 0xF7
|
||||
{ 2691, 9, 11, 11, 1, -9 }, // 0xF8
|
||||
{ 2704, 8, 14, 11, 1, -13 }, // 0xF9
|
||||
{ 2718, 8, 14, 11, 1, -13 }, // 0xFA
|
||||
{ 2732, 8, 14, 11, 1, -13 }, // 0xFB
|
||||
{ 2746, 8, 13, 11, 1, -12 }, // 0xFC
|
||||
{ 2759, 9, 18, 9, 0, -13 }, // 0xFD
|
||||
{ 2780, 9, 17, 11, 1, -12 }, // 0xFE
|
||||
{ 2800, 9, 17, 9, 0, -12 }, // 0xFF
|
||||
{ 2820, 11, 15, 11, 0, -14 }, // 0x100
|
||||
{ 2841, 7, 12, 10, 1, -11 }, // 0x101
|
||||
{ 2852, 11, 16, 11, 0, -15 }, // 0x102
|
||||
{ 2874, 7, 13, 10, 1, -12 }, // 0x103
|
||||
{ 2886, 12, 17, 11, 0, -12 }, // 0x104
|
||||
{ 2912, 8, 14, 10, 1, -9 }, // 0x105
|
||||
{ 2926, 10, 17, 11, 1, -16 }, // 0x106
|
||||
{ 2948, 7, 14, 8, 1, -13 }, // 0x107
|
||||
{ 2961, 10, 17, 11, 1, -16 }, // 0x108
|
||||
{ 2983, 7, 14, 8, 1, -13 }, // 0x109
|
||||
{ 2996, 10, 16, 11, 1, -15 }, // 0x10A
|
||||
{ 3016, 7, 13, 8, 1, -12 }, // 0x10B
|
||||
{ 3028, 10, 17, 11, 1, -16 }, // 0x10C
|
||||
{ 3050, 7, 14, 8, 1, -13 }, // 0x10D
|
||||
{ 3063, 10, 17, 13, 2, -16 }, // 0x10E
|
||||
{ 3085, 11, 13, 11, 1, -12 }, // 0x10F
|
||||
{ 3103, 11, 13, 13, 1, -12 }, // 0x110
|
||||
{ 3121, 10, 13, 11, 1, -12 }, // 0x111
|
||||
{ 3138, 7, 15, 10, 2, -14 }, // 0x112
|
||||
{ 3152, 8, 12, 10, 1, -11 }, // 0x113
|
||||
{ 3164, 7, 16, 10, 2, -15 }, // 0x114
|
||||
{ 3178, 8, 13, 10, 1, -12 }, // 0x115
|
||||
{ 3191, 7, 16, 10, 2, -15 }, // 0x116
|
||||
{ 3205, 8, 13, 10, 1, -12 }, // 0x117
|
||||
{ 3218, 7, 17, 10, 2, -12 }, // 0x118
|
||||
{ 3233, 8, 14, 10, 1, -9 }, // 0x119
|
||||
{ 3247, 7, 17, 10, 2, -16 }, // 0x11A
|
||||
{ 3262, 8, 14, 10, 1, -13 }, // 0x11B
|
||||
{ 3276, 11, 17, 13, 1, -16 }, // 0x11C
|
||||
{ 3300, 8, 18, 11, 1, -13 }, // 0x11D
|
||||
{ 3318, 11, 16, 13, 1, -15 }, // 0x11E
|
||||
{ 3340, 8, 17, 11, 1, -12 }, // 0x11F
|
||||
{ 3357, 11, 16, 13, 1, -15 }, // 0x120
|
||||
{ 3379, 8, 17, 11, 1, -12 }, // 0x121
|
||||
{ 3396, 11, 17, 13, 1, -12 }, // 0x122
|
||||
{ 3420, 8, 18, 11, 1, -13 }, // 0x123
|
||||
{ 3438, 9, 17, 13, 2, -16 }, // 0x124
|
||||
{ 3458, 9, 18, 11, 0, -17 }, // 0x125
|
||||
{ 3479, 13, 13, 13, 0, -12 }, // 0x126
|
||||
{ 3501, 9, 13, 11, 0, -12 }, // 0x127
|
||||
{ 3516, 6, 16, 6, 0, -15 }, // 0x128
|
||||
{ 3528, 6, 13, 5, -1, -12 }, // 0x129
|
||||
{ 3538, 5, 15, 6, 1, -14 }, // 0x12A
|
||||
{ 3548, 5, 12, 5, 0, -11 }, // 0x12B
|
||||
{ 3556, 5, 16, 6, 1, -15 }, // 0x12C
|
||||
{ 3566, 5, 13, 5, 0, -12 }, // 0x12D
|
||||
{ 3575, 5, 17, 6, 1, -12 }, // 0x12E
|
||||
{ 3586, 3, 17, 5, 1, -12 }, // 0x12F
|
||||
{ 3593, 4, 16, 6, 1, -15 }, // 0x130
|
||||
{ 3601, 2, 9, 5, 1, -8 }, // 0x131
|
||||
{ 3604, 8, 16, 11, 1, -12 }, // 0x132
|
||||
{ 3620, 7, 17, 9, 1, -12 }, // 0x133
|
||||
{ 3635, 7, 20, 5, -1, -16 }, // 0x134
|
||||
{ 3653, 7, 18, 5, -1, -13 }, // 0x135
|
||||
{ 3669, 9, 17, 11, 2, -12 }, // 0x136
|
||||
{ 3689, 8, 17, 9, 1, -12 }, // 0x137
|
||||
{ 3706, 8, 9, 9, 1, -8 }, // 0x138
|
||||
{ 3715, 7, 17, 9, 2, -16 }, // 0x139
|
||||
{ 3730, 4, 18, 5, 1, -17 }, // 0x13A
|
||||
{ 3739, 7, 17, 9, 2, -12 }, // 0x13B
|
||||
{ 3754, 2, 17, 5, 1, -12 }, // 0x13C
|
||||
{ 3759, 7, 13, 9, 2, -12 }, // 0x13D
|
||||
{ 3771, 5, 13, 5, 1, -12 }, // 0x13E
|
||||
{ 3780, 7, 13, 9, 2, -12 }, // 0x13F
|
||||
{ 3792, 5, 13, 5, 1, -12 }, // 0x140
|
||||
{ 3801, 9, 13, 9, 0, -12 }, // 0x141
|
||||
{ 3816, 5, 13, 5, 0, -12 }, // 0x142
|
||||
{ 3825, 10, 17, 13, 2, -16 }, // 0x143
|
||||
{ 3847, 8, 14, 11, 1, -13 }, // 0x144
|
||||
{ 3861, 10, 17, 13, 2, -12 }, // 0x145
|
||||
{ 3883, 8, 14, 11, 1, -9 }, // 0x146
|
||||
{ 3897, 10, 17, 13, 2, -16 }, // 0x147
|
||||
{ 3919, 8, 14, 11, 1, -13 }, // 0x148
|
||||
{ 3933, 10, 13, 12, 0, -12 }, // 0x149
|
||||
{ 3950, 10, 16, 13, 2, -12 }, // 0x14A
|
||||
{ 3970, 8, 14, 11, 1, -9 }, // 0x14B
|
||||
{ 3984, 12, 15, 14, 1, -14 }, // 0x14C
|
||||
{ 4007, 9, 12, 11, 1, -11 }, // 0x14D
|
||||
{ 4021, 12, 16, 14, 1, -15 }, // 0x14E
|
||||
{ 4045, 9, 13, 11, 1, -12 }, // 0x14F
|
||||
{ 4060, 12, 17, 14, 1, -16 }, // 0x150
|
||||
{ 4086, 9, 14, 11, 1, -13 }, // 0x151
|
||||
{ 4102, 14, 13, 16, 1, -12 }, // 0x152
|
||||
{ 4125, 15, 10, 17, 1, -9 }, // 0x153
|
||||
{ 4144, 9, 17, 11, 2, -16 }, // 0x154
|
||||
{ 4164, 6, 14, 7, 1, -13 }, // 0x155
|
||||
{ 4175, 9, 17, 11, 2, -12 }, // 0x156
|
||||
{ 4195, 6, 14, 7, 1, -9 }, // 0x157
|
||||
{ 4206, 9, 17, 11, 2, -16 }, // 0x158
|
||||
{ 4226, 7, 14, 7, 1, -13 }, // 0x159
|
||||
{ 4239, 8, 17, 10, 1, -16 }, // 0x15A
|
||||
{ 4256, 7, 14, 8, 1, -13 }, // 0x15B
|
||||
{ 4269, 8, 17, 10, 1, -16 }, // 0x15C
|
||||
{ 4286, 7, 14, 8, 1, -13 }, // 0x15D
|
||||
{ 4299, 8, 17, 10, 1, -12 }, // 0x15E
|
||||
{ 4316, 7, 14, 8, 1, -9 }, // 0x15F
|
||||
{ 4329, 8, 17, 10, 1, -16 }, // 0x160
|
||||
{ 4346, 7, 14, 8, 1, -13 }, // 0x161
|
||||
{ 4359, 10, 17, 10, 0, -12 }, // 0x162
|
||||
{ 4381, 6, 16, 6, 0, -11 }, // 0x163
|
||||
{ 4393, 10, 17, 10, 0, -16 }, // 0x164
|
||||
{ 4415, 8, 13, 6, 0, -12 }, // 0x165
|
||||
{ 4428, 10, 13, 10, 0, -12 }, // 0x166
|
||||
{ 4445, 6, 12, 6, 0, -11 }, // 0x167
|
||||
{ 4454, 9, 16, 13, 2, -15 }, // 0x168
|
||||
{ 4472, 8, 13, 11, 1, -12 }, // 0x169
|
||||
{ 4485, 9, 15, 13, 2, -14 }, // 0x16A
|
||||
{ 4502, 8, 12, 11, 1, -11 }, // 0x16B
|
||||
{ 4514, 9, 16, 13, 2, -15 }, // 0x16C
|
||||
{ 4532, 8, 13, 11, 1, -12 }, // 0x16D
|
||||
{ 4545, 9, 17, 13, 2, -16 }, // 0x16E
|
||||
{ 4565, 8, 14, 11, 1, -13 }, // 0x16F
|
||||
{ 4579, 9, 17, 13, 2, -16 }, // 0x170
|
||||
{ 4599, 8, 14, 11, 1, -13 }, // 0x171
|
||||
{ 4613, 9, 17, 13, 2, -12 }, // 0x172
|
||||
{ 4633, 9, 13, 11, 1, -8 }, // 0x173
|
||||
{ 4648, 16, 17, 16, 0, -16 }, // 0x174
|
||||
{ 4682, 14, 14, 14, 0, -13 }, // 0x175
|
||||
{ 4707, 10, 17, 10, 0, -16 }, // 0x176
|
||||
{ 4729, 9, 18, 9, 0, -13 }, // 0x177
|
||||
{ 4750, 10, 16, 10, 0, -15 }, // 0x178
|
||||
{ 4770, 8, 17, 10, 1, -16 }, // 0x179
|
||||
{ 4787, 7, 14, 8, 1, -13 }, // 0x17A
|
||||
{ 4800, 8, 16, 10, 1, -15 }, // 0x17B
|
||||
{ 4816, 7, 13, 8, 1, -12 }, // 0x17C
|
||||
{ 4828, 8, 17, 10, 1, -16 }, // 0x17D
|
||||
{ 4845, 7, 14, 8, 1, -13 }, // 0x17E
|
||||
{ 4858, 5, 13, 6, 1, -12 } }; // 0x17F
|
||||
|
||||
const GFXfont NotoSans9pt8b PROGMEM = {
|
||||
(uint8_t *)NotoSans9pt8bBitmaps,
|
||||
(GFXglyph *)NotoSans9pt8bGlyphs,
|
||||
0x20, 0x17F, 24 };
|
||||
|
||||
// Approx. 7338 bytes
|
||||
|
||||
#endif // NOTOSANS9PT8B_H
|
||||
@@ -1,285 +0,0 @@
|
||||
#ifndef NOTOSANSBOLD12PT7B_H
|
||||
#define NOTOSANSBOLD12PT7B_H
|
||||
const uint8_t NotoSans_Bold12pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0x77, 0x77, 0x77, 0x77, 0x06, 0xFF, 0x70, 0xF7, 0xB9,
|
||||
0xDC, 0xEE, 0x77, 0x33, 0x18, 0x0E, 0x70, 0x39, 0xC0, 0xE6, 0x03, 0x18,
|
||||
0x0C, 0x63, 0xFF, 0xFF, 0xFF, 0xC7, 0x30, 0x1C, 0xC0, 0x63, 0x0F, 0xFF,
|
||||
0xBF, 0xFE, 0x39, 0x80, 0xE6, 0x03, 0x18, 0x0C, 0xE0, 0x73, 0x80, 0x06,
|
||||
0x00, 0x60, 0x1F, 0xC7, 0xFE, 0xFF, 0xEF, 0x62, 0xF6, 0x0F, 0xE0, 0x7F,
|
||||
0x03, 0xFC, 0x0F, 0xE0, 0x7E, 0x06, 0xF8, 0x6E, 0xFF, 0xEF, 0xFC, 0x7F,
|
||||
0x80, 0x60, 0x06, 0x00, 0x3C, 0x07, 0x0F, 0xC1, 0xC3, 0xB8, 0x30, 0x73,
|
||||
0x8E, 0x0E, 0x73, 0x81, 0x8E, 0x70, 0x39, 0xDC, 0x07, 0x33, 0xBE, 0xFE,
|
||||
0xEF, 0xEF, 0x99, 0xDC, 0x47, 0x31, 0x80, 0xCE, 0x30, 0x38, 0xC6, 0x0E,
|
||||
0x18, 0xC1, 0xC3, 0xB8, 0x70, 0x7F, 0x0E, 0x07, 0xC0, 0x0F, 0x80, 0x1F,
|
||||
0xE0, 0x0F, 0xF8, 0x0F, 0x3C, 0x07, 0x8E, 0x01, 0xCF, 0x00, 0xFF, 0x00,
|
||||
0x3F, 0x00, 0x3F, 0x0F, 0x3F, 0xC7, 0x3C, 0xF7, 0x9E, 0x3F, 0xCF, 0x0F,
|
||||
0xC7, 0x83, 0xC3, 0xFF, 0xF0, 0xFF, 0xFC, 0x3F, 0xCF, 0x80, 0xF7, 0x77,
|
||||
0x76, 0x1C, 0xE3, 0x9C, 0x71, 0xCE, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8E,
|
||||
0x1C, 0x71, 0xC3, 0x8E, 0x1C, 0xE1, 0xC7, 0x0E, 0x38, 0xE3, 0xC7, 0x1C,
|
||||
0x71, 0xC7, 0x1C, 0x73, 0xCE, 0x38, 0xE7, 0x38, 0xE0, 0x0E, 0x01, 0xC0,
|
||||
0x38, 0x47, 0x3F, 0xFF, 0xFF, 0xC7, 0x80, 0xF8, 0x3B, 0x8E, 0x78, 0xC4,
|
||||
0x00, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x70,
|
||||
0x0E, 0x01, 0xC0, 0x38, 0x00, 0x77, 0xFE, 0xEC, 0xFF, 0xFF, 0xC0, 0x6F,
|
||||
0xF7, 0x03, 0xC0, 0xE0, 0x38, 0x1C, 0x07, 0x03, 0xC0, 0xE0, 0x38, 0x1E,
|
||||
0x07, 0x01, 0xC0, 0xE0, 0x38, 0x1E, 0x07, 0x01, 0xC0, 0xF0, 0x00, 0x1F,
|
||||
0x03, 0xFC, 0x7F, 0xC7, 0x1E, 0xF0, 0xEF, 0x0E, 0xE0, 0xEE, 0x0F, 0xE0,
|
||||
0xFE, 0x0F, 0xE0, 0xFF, 0x0E, 0xF0, 0xE7, 0x1E, 0x7F, 0xE3, 0xFC, 0x1F,
|
||||
0x80, 0x07, 0x87, 0xC7, 0xE7, 0xFF, 0xFB, 0xBC, 0x9E, 0x0F, 0x07, 0x83,
|
||||
0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x80, 0x1F, 0x87, 0xFC,
|
||||
0xFF, 0xE7, 0x1E, 0x40, 0xE0, 0x0E, 0x01, 0xE0, 0x1C, 0x03, 0xC0, 0x78,
|
||||
0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F,
|
||||
0x0F, 0xFC, 0xFF, 0xE6, 0x1E, 0x00, 0xE0, 0x1E, 0x01, 0xC3, 0xF8, 0x3F,
|
||||
0x83, 0xFE, 0x01, 0xE0, 0x0E, 0x00, 0xF8, 0x1E, 0xFF, 0xEF, 0xFC, 0xFF,
|
||||
0x80, 0x00, 0xE0, 0x0F, 0x00, 0xF8, 0x07, 0xC0, 0x7E, 0x07, 0x70, 0x73,
|
||||
0x83, 0x9C, 0x38, 0xE3, 0x87, 0x1C, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
|
||||
0x03, 0x80, 0x1C, 0x00, 0xE0, 0x7F, 0xCF, 0xF9, 0xFF, 0x38, 0x07, 0x00,
|
||||
0xE0, 0x1F, 0xC3, 0xFE, 0xFF, 0xE8, 0x7C, 0x03, 0x80, 0x70, 0x0F, 0x03,
|
||||
0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0x07, 0xC1, 0xFC, 0x3F, 0xC7, 0x80, 0x70,
|
||||
0x0F, 0x00, 0xE7, 0x8E, 0xFC, 0xFF, 0xEF, 0x0E, 0xE0, 0xFE, 0x0F, 0xF0,
|
||||
0xFF, 0x0E, 0x7F, 0xE3, 0xFC, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
|
||||
0x0E, 0x01, 0xE0, 0x1C, 0x03, 0xC0, 0x38, 0x07, 0x80, 0x78, 0x07, 0x00,
|
||||
0xF0, 0x0E, 0x01, 0xE0, 0x1C, 0x03, 0xC0, 0x3C, 0x00, 0x1F, 0x07, 0xFC,
|
||||
0x7F, 0xEF, 0x0E, 0xF0, 0xE7, 0x1E, 0x7B, 0xC3, 0xF8, 0x1F, 0x87, 0xFC,
|
||||
0xF1, 0xEE, 0x0E, 0xE0, 0xFE, 0x0F, 0xF9, 0xE7, 0xFC, 0x3F, 0x80, 0x1F,
|
||||
0x07, 0xF8, 0x7F, 0xCF, 0x1E, 0xE0, 0xEE, 0x0E, 0xE0, 0xFF, 0x1F, 0xFF,
|
||||
0xF7, 0xFE, 0x3E, 0xE0, 0x0E, 0x01, 0xE0, 0x1C, 0x7F, 0xC7, 0xF8, 0x7E,
|
||||
0x00, 0x7F, 0xF6, 0x00, 0x00, 0x06, 0xFF, 0x70, 0x7F, 0xF6, 0x00, 0x00,
|
||||
0x00, 0x77, 0xFE, 0xEC, 0x00, 0x20, 0x0C, 0x07, 0x83, 0xE1, 0xF0, 0xF8,
|
||||
0x3C, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0x80, 0x30, 0x02, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x80, 0x18, 0x03, 0xC0,
|
||||
0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x78, 0x1F, 0x1F, 0x8F, 0xC3, 0xE0, 0x70,
|
||||
0x08, 0x00, 0x3F, 0x1F, 0xF9, 0xFF, 0x20, 0xF0, 0x1E, 0x03, 0xC0, 0xF0,
|
||||
0x3C, 0x0F, 0x03, 0xC0, 0x70, 0x0E, 0x00, 0x00, 0x10, 0x07, 0x80, 0xF0,
|
||||
0x1E, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xC0, 0x7C, 0x3E, 0x1E, 0x01, 0xE3,
|
||||
0x83, 0x1C, 0xE3, 0xF9, 0xD8, 0xFF, 0x3F, 0x38, 0xE7, 0xE7, 0x1C, 0xFC,
|
||||
0xC3, 0x9F, 0x98, 0x73, 0xF3, 0x8E, 0x6E, 0x7F, 0xFC, 0xC7, 0xCF, 0x1C,
|
||||
0x00, 0x01, 0xC0, 0x00, 0x3E, 0x1E, 0x01, 0xFF, 0xC0, 0x0F, 0xE0, 0x00,
|
||||
0x03, 0xC0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0x70, 0x0E, 0x70,
|
||||
0x0E, 0x78, 0x1E, 0x78, 0x1E, 0x38, 0x1C, 0x3C, 0x3F, 0xFC, 0x3F, 0xFC,
|
||||
0x3F, 0xFE, 0x78, 0x1E, 0x78, 0x0E, 0x70, 0x0F, 0xF0, 0x0F, 0xFF, 0x8F,
|
||||
0xFE, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF1, 0xEF, 0xFE, 0xFF, 0xCF,
|
||||
0xFF, 0xF0, 0xFF, 0x07, 0xF0, 0x7F, 0x0F, 0xFF, 0xFF, 0xFE, 0xFF, 0x80,
|
||||
0x07, 0xF0, 0xFF, 0xCF, 0xFE, 0x78, 0x27, 0x80, 0x3C, 0x03, 0xC0, 0x1E,
|
||||
0x00, 0xF0, 0x07, 0x80, 0x3C, 0x00, 0xE0, 0x07, 0x80, 0x3E, 0x04, 0xFF,
|
||||
0xE3, 0xFF, 0x0F, 0xF0, 0xFF, 0x03, 0xFF, 0x8F, 0xFF, 0x3C, 0x7E, 0xF0,
|
||||
0x7B, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC,
|
||||
0x0F, 0xF0, 0x7B, 0xC3, 0xEF, 0xFF, 0x3F, 0xF8, 0xFF, 0x80, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xFE, 0xFF, 0xBF, 0xEF, 0x03,
|
||||
0xC0, 0xF0, 0x3C, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xFE, 0xFF, 0xBF, 0xEF, 0x03, 0xC0, 0xF0,
|
||||
0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x00, 0x03, 0xF8, 0x3F, 0xF3, 0xFF, 0xCF,
|
||||
0x82, 0x78, 0x01, 0xE0, 0x07, 0x00, 0x3C, 0x00, 0xF1, 0xFF, 0xC7, 0xFF,
|
||||
0x1F, 0xDC, 0x07, 0x78, 0x1D, 0xF0, 0x73, 0xFF, 0xC7, 0xFF, 0x0F, 0xF8,
|
||||
0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0xC0, 0xFF, 0x03,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0xC0,
|
||||
0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3C, 0xFF, 0xFF, 0xF9, 0xC3, 0x87, 0x0E,
|
||||
0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x1F, 0x7F, 0xFE, 0x0F, 0x0F, 0x0F,
|
||||
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
||||
0x0F, 0x0F, 0x0F, 0x1E, 0xFE, 0xFC, 0xF8, 0xF0, 0x7F, 0xC1, 0xEF, 0x0F,
|
||||
0x3C, 0x78, 0xF3, 0xC3, 0xDE, 0x0F, 0x78, 0x3F, 0xC0, 0xFF, 0x03, 0xFE,
|
||||
0x0F, 0x3C, 0x3C, 0xF0, 0xF1, 0xE3, 0xC7, 0x8F, 0x0F, 0x3C, 0x1E, 0xF0,
|
||||
0x7C, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0,
|
||||
0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0xF8,
|
||||
0x07, 0xFE, 0x01, 0xFF, 0xC0, 0xFF, 0xF0, 0x3F, 0xFC, 0x0F, 0xFB, 0x87,
|
||||
0x7E, 0xE1, 0xDF, 0xB8, 0x77, 0xE7, 0x39, 0xF9, 0xCE, 0x7E, 0x73, 0x9F,
|
||||
0x8D, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3E, 0x1F, 0x87, 0x87, 0xE1,
|
||||
0xE1, 0xC0, 0xF8, 0x0F, 0xF0, 0x1F, 0xF0, 0x3F, 0xF0, 0x7F, 0xE0, 0xFD,
|
||||
0xE1, 0xFB, 0xC3, 0xF3, 0xC7, 0xE3, 0x8F, 0xC7, 0x9F, 0x87, 0xBF, 0x0F,
|
||||
0x7E, 0x0F, 0xFC, 0x1F, 0xF8, 0x1F, 0xF0, 0x1F, 0xE0, 0x3E, 0x07, 0xF0,
|
||||
0x1F, 0xF8, 0x3F, 0xFE, 0x7C, 0x3E, 0x78, 0x0F, 0x78, 0x0F, 0xF0, 0x0F,
|
||||
0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x70, 0x0F, 0x78, 0x0F,
|
||||
0x7C, 0x1E, 0x3F, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0xFF, 0x0F, 0xFC, 0xFF,
|
||||
0xEF, 0x1E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x1E, 0xFF, 0xEF, 0xFC, 0xFF,
|
||||
0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x00, 0x07, 0xF0,
|
||||
0x1F, 0xF8, 0x3F, 0xFE, 0x7C, 0x3E, 0x78, 0x0F, 0x78, 0x0F, 0xF0, 0x0F,
|
||||
0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x70, 0x0F, 0x78, 0x0F,
|
||||
0x7C, 0x1E, 0x3F, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x00, 0x78, 0x00, 0x3C,
|
||||
0x00, 0x3E, 0x00, 0x1F, 0xFF, 0x07, 0xFE, 0x3F, 0xF9, 0xE3, 0xCF, 0x0F,
|
||||
0x78, 0x7B, 0xC3, 0xDE, 0x3C, 0xFF, 0xC7, 0xFC, 0x3F, 0xE1, 0xE7, 0x8F,
|
||||
0x1E, 0x78, 0xF3, 0xC3, 0xDE, 0x1E, 0xF0, 0x78, 0x1F, 0x87, 0xFD, 0xFF,
|
||||
0x78, 0x2F, 0x01, 0xE0, 0x1E, 0x03, 0xF0, 0x3F, 0x81, 0xF8, 0x0F, 0x80,
|
||||
0xF0, 0x0F, 0x83, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C,
|
||||
0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80,
|
||||
0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0xC0, 0xFF, 0x03,
|
||||
0xFC, 0x0F, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0xE1,
|
||||
0xE7, 0xFF, 0x8F, 0xFC, 0x1F, 0xE0, 0xF0, 0x0F, 0xE0, 0x3D, 0xC0, 0x7B,
|
||||
0xC0, 0xE7, 0x83, 0xC7, 0x07, 0x0F, 0x0E, 0x1E, 0x3C, 0x1C, 0x70, 0x3C,
|
||||
0xE0, 0x7B, 0xC0, 0x77, 0x00, 0xEE, 0x01, 0xFC, 0x01, 0xF0, 0x03, 0xE0,
|
||||
0x03, 0xC0, 0xF0, 0x38, 0x1F, 0xE0, 0xF0, 0x39, 0xC1, 0xF0, 0x73, 0x83,
|
||||
0xE1, 0xE7, 0x87, 0xC3, 0xCF, 0x1D, 0x87, 0x0E, 0x3B, 0x8E, 0x1C, 0x77,
|
||||
0x3C, 0x38, 0xEE, 0x78, 0x7B, 0x9C, 0xE0, 0x77, 0x1D, 0xC0, 0xEE, 0x3B,
|
||||
0x81, 0xD8, 0x7F, 0x03, 0xF0, 0xFC, 0x03, 0xE0, 0xF8, 0x07, 0xC1, 0xF0,
|
||||
0x0F, 0x03, 0xE0, 0xF8, 0x1E, 0x78, 0x3C, 0x3C, 0x3C, 0x1C, 0x78, 0x1E,
|
||||
0x78, 0x0F, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x03, 0xC0, 0x07, 0xE0, 0x0F,
|
||||
0xE0, 0x0E, 0xF0, 0x1E, 0x78, 0x3C, 0x78, 0x3C, 0x3C, 0x78, 0x1E, 0xF0,
|
||||
0x1F, 0xF0, 0x1E, 0xF0, 0x79, 0xE0, 0xE1, 0xE3, 0xC3, 0xC7, 0x03, 0xDE,
|
||||
0x07, 0xB8, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x80, 0x1E, 0x00, 0x1C, 0x00,
|
||||
0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0x1E, 0x01, 0xC0, 0x3C, 0x07, 0x80, 0x70, 0x0F, 0x01, 0xE0,
|
||||
0x3C, 0x03, 0xC0, 0x78, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF,
|
||||
0xFF, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x3F, 0xFF,
|
||||
0x80, 0xF0, 0x1C, 0x07, 0x01, 0xE0, 0x38, 0x0E, 0x03, 0xC0, 0x70, 0x1C,
|
||||
0x03, 0x80, 0xE0, 0x3C, 0x07, 0x01, 0xC0, 0x78, 0x0E, 0x03, 0xC0, 0xFF,
|
||||
0xFE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xFF, 0xFF,
|
||||
0x80, 0x0C, 0x00, 0xE0, 0x1E, 0x01, 0xF0, 0x1B, 0x83, 0xB8, 0x31, 0xC7,
|
||||
0x1C, 0x60, 0xEE, 0x0E, 0xC0, 0x70, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0x70,
|
||||
0x70, 0x1F, 0x8F, 0xFC, 0xFF, 0x80, 0x70, 0x0E, 0x3F, 0xDF, 0xFF, 0xC7,
|
||||
0xF0, 0xFE, 0x1F, 0xEF, 0xFF, 0xF7, 0xE6, 0xE0, 0x0E, 0x00, 0xE0, 0x0E,
|
||||
0x00, 0xE0, 0x0E, 0x78, 0xFF, 0xCF, 0xFE, 0xF1, 0xEE, 0x0F, 0xE0, 0xFE,
|
||||
0x0F, 0xE0, 0xFE, 0x0F, 0xF1, 0xEF, 0xFE, 0xFF, 0xCE, 0xF8, 0x0F, 0xCF,
|
||||
0xF7, 0xFD, 0xE0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3E, 0x17, 0xFC,
|
||||
0xFF, 0x1F, 0xC0, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x71, 0xE7,
|
||||
0x3F, 0x77, 0xFF, 0xF8, 0xFF, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x07,
|
||||
0xF0, 0xF7, 0xFF, 0x7F, 0x73, 0xF7, 0x1F, 0x83, 0xFC, 0x7F, 0xE7, 0x0F,
|
||||
0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x07, 0x00, 0x7C, 0xE3, 0xFE,
|
||||
0x1F, 0xE0, 0x0F, 0xC7, 0xF1, 0xF8, 0xF0, 0x3C, 0x0F, 0xEF, 0xFB, 0xFE,
|
||||
0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F,
|
||||
0x00, 0x1E, 0x73, 0xF7, 0x7F, 0xF7, 0x8F, 0xF0, 0x7F, 0x07, 0xF0, 0x7F,
|
||||
0x07, 0xF0, 0x7F, 0x0F, 0x7F, 0xF7, 0xF7, 0x3F, 0x70, 0x07, 0x00, 0xF6,
|
||||
0x1F, 0x7F, 0xE7, 0xFC, 0x0F, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00,
|
||||
0xE0, 0x0E, 0x7C, 0xFF, 0xEF, 0xFE, 0xF0, 0xFF, 0x0F, 0xE0, 0xFE, 0x0F,
|
||||
0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xFF, 0xA1, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFC, 0x1C, 0x71, 0xC2, 0x00, 0x71, 0xC7, 0x1C, 0x71,
|
||||
0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x3F, 0xFF, 0x98, 0xE0, 0x07,
|
||||
0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x7B, 0x87, 0x9C, 0x78, 0xE7,
|
||||
0x87, 0x78, 0x3B, 0x81, 0xFE, 0x0F, 0xF0, 0x7B, 0xC3, 0x8F, 0x1C, 0x3C,
|
||||
0xE1, 0xE7, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xEF,
|
||||
0x8F, 0x9F, 0xFF, 0xFB, 0xFF, 0xFF, 0xF8, 0xF8, 0xFF, 0x0F, 0x0F, 0xC1,
|
||||
0xC1, 0xF8, 0x38, 0x3F, 0x07, 0x07, 0xE0, 0xE0, 0xFC, 0x1C, 0x1F, 0x83,
|
||||
0x83, 0xF0, 0x70, 0x7E, 0x0E, 0x0E, 0xE7, 0xCF, 0xFE, 0xFF, 0xEF, 0x0F,
|
||||
0xF0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F,
|
||||
0xE0, 0xF0, 0x1F, 0x81, 0xFF, 0x1F, 0xF8, 0xE1, 0xEF, 0x07, 0x78, 0x3B,
|
||||
0xC1, 0xFE, 0x0F, 0xF0, 0x73, 0x87, 0x9F, 0xFC, 0x7F, 0xC1, 0xFC, 0x00,
|
||||
0xE7, 0x8F, 0xFC, 0xFF, 0xEF, 0x1E, 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F,
|
||||
0xE0, 0xFF, 0x1E, 0xFF, 0xEF, 0xFC, 0xEF, 0x8E, 0x00, 0xE0, 0x0E, 0x00,
|
||||
0xE0, 0x0E, 0x00, 0xE0, 0x00, 0x1E, 0x73, 0xF7, 0x7F, 0xFF, 0x8F, 0xF0,
|
||||
0x7F, 0x07, 0xF0, 0x7F, 0x07, 0xF0, 0x7F, 0x0F, 0x7F, 0xF7, 0xF7, 0x3F,
|
||||
0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0xE7, 0xEF,
|
||||
0xFF, 0xF8, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x3F,
|
||||
0x9F, 0xFF, 0xBB, 0xC0, 0xF8, 0x1F, 0x83, 0xF8, 0x3E, 0x03, 0xC0, 0xFF,
|
||||
0x7F, 0xFE, 0xFF, 0x00, 0x38, 0x38, 0x38, 0x7F, 0xFF, 0xFF, 0x78, 0x78,
|
||||
0x78, 0x78, 0x78, 0x78, 0x78, 0x7F, 0x3F, 0x1F, 0xE0, 0xFE, 0x0F, 0xE0,
|
||||
0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xE0, 0xFE, 0x0F, 0xE0, 0xFF, 0x1F, 0xFF,
|
||||
0xFF, 0xFF, 0x7E, 0x70, 0xF0, 0x3B, 0x83, 0xDC, 0x1E, 0xF0, 0xE3, 0x8F,
|
||||
0x1C, 0x70, 0xF3, 0x83, 0xBC, 0x1D, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x00,
|
||||
0x78, 0x00, 0xF0, 0xF0, 0xF7, 0x0F, 0x0F, 0x70, 0xF8, 0xE7, 0x9F, 0x8E,
|
||||
0x79, 0xF9, 0xE3, 0x99, 0x9C, 0x39, 0x9D, 0xC3, 0xF9, 0xDC, 0x1F, 0x9F,
|
||||
0x81, 0xF0, 0xF8, 0x1F, 0x0F, 0x81, 0xF0, 0xF8, 0x0F, 0x0F, 0x00, 0xF8,
|
||||
0x7B, 0xC7, 0x8F, 0x3C, 0x3B, 0xC1, 0xFC, 0x07, 0xE0, 0x3E, 0x01, 0xF8,
|
||||
0x1F, 0xC1, 0xEF, 0x0F, 0x3C, 0xF0, 0xEF, 0x07, 0x80, 0xF0, 0x3B, 0x83,
|
||||
0xDE, 0x1E, 0xF0, 0xE3, 0x8F, 0x1E, 0x70, 0x73, 0x83, 0xBC, 0x1D, 0xC0,
|
||||
0x7E, 0x03, 0xF0, 0x0F, 0x00, 0x78, 0x03, 0x80, 0x3C, 0x03, 0xE0, 0x7E,
|
||||
0x03, 0xE0, 0x1C, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x1E, 0x0F, 0x03, 0x81,
|
||||
0xE0, 0xF0, 0x78, 0x1C, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0x0F, 0x1F,
|
||||
0x1E, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0xFC, 0xF0, 0xFC, 0x1C, 0x1C, 0x1C,
|
||||
0x1C, 0x1C, 0x1E, 0x1F, 0x0F, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xF8, 0xE0, 0xF0, 0xF8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3C,
|
||||
0x1F, 0x07, 0x3F, 0x3C, 0x38, 0x38, 0x38, 0x38, 0x38, 0xF8, 0xF0, 0xC0,
|
||||
0x7C, 0x3F, 0xFF, 0x3F, 0xC0, 0xC0 };
|
||||
|
||||
const GFXglyph NotoSans_Bold12pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 4, 17, 7, 1, -16 }, // 0x21 '!'
|
||||
{ 10, 9, 6, 11, 1, -16 }, // 0x22 '"'
|
||||
{ 17, 14, 17, 15, 1, -16 }, // 0x23 '#'
|
||||
{ 47, 12, 19, 13, 1, -17 }, // 0x24 '$'
|
||||
{ 76, 19, 17, 21, 1, -16 }, // 0x25 '%'
|
||||
{ 117, 17, 17, 18, 1, -16 }, // 0x26 '&'
|
||||
{ 154, 4, 6, 6, 1, -16 }, // 0x27 '''
|
||||
{ 157, 6, 21, 8, 1, -16 }, // 0x28 '('
|
||||
{ 173, 6, 21, 8, 1, -16 }, // 0x29 ')'
|
||||
{ 189, 11, 11, 13, 1, -17 }, // 0x2A '*'
|
||||
{ 205, 11, 11, 13, 1, -13 }, // 0x2B '+'
|
||||
{ 221, 4, 6, 7, 1, -2 }, // 0x2C ','
|
||||
{ 224, 6, 3, 8, 1, -7 }, // 0x2D '-'
|
||||
{ 227, 4, 4, 7, 1, -3 }, // 0x2E '.'
|
||||
{ 229, 10, 17, 10, 0, -16 }, // 0x2F '/'
|
||||
{ 251, 12, 17, 13, 1, -16 }, // 0x30 '0'
|
||||
{ 277, 9, 17, 13, 1, -16 }, // 0x31 '1'
|
||||
{ 297, 12, 17, 13, 1, -16 }, // 0x32 '2'
|
||||
{ 323, 12, 17, 13, 1, -16 }, // 0x33 '3'
|
||||
{ 349, 13, 17, 13, 0, -16 }, // 0x34 '4'
|
||||
{ 377, 11, 17, 13, 1, -16 }, // 0x35 '5'
|
||||
{ 401, 12, 17, 13, 1, -16 }, // 0x36 '6'
|
||||
{ 427, 12, 17, 13, 1, -16 }, // 0x37 '7'
|
||||
{ 453, 12, 17, 13, 1, -16 }, // 0x38 '8'
|
||||
{ 479, 12, 17, 13, 1, -16 }, // 0x39 '9'
|
||||
{ 505, 4, 13, 7, 1, -12 }, // 0x3A ':'
|
||||
{ 512, 4, 16, 7, 1, -12 }, // 0x3B ';'
|
||||
{ 520, 11, 13, 13, 1, -14 }, // 0x3C '<'
|
||||
{ 538, 11, 7, 13, 1, -11 }, // 0x3D '='
|
||||
{ 548, 11, 13, 13, 1, -14 }, // 0x3E '>'
|
||||
{ 566, 11, 17, 11, 0, -16 }, // 0x3F '?'
|
||||
{ 590, 19, 19, 21, 1, -16 }, // 0x40 '@'
|
||||
{ 636, 16, 17, 16, 0, -16 }, // 0x41 'A'
|
||||
{ 670, 12, 17, 16, 2, -16 }, // 0x42 'B'
|
||||
{ 696, 13, 17, 15, 1, -16 }, // 0x43 'C'
|
||||
{ 724, 14, 17, 17, 2, -16 }, // 0x44 'D'
|
||||
{ 754, 10, 17, 13, 2, -16 }, // 0x45 'E'
|
||||
{ 776, 10, 17, 13, 2, -16 }, // 0x46 'F'
|
||||
{ 798, 14, 17, 17, 1, -16 }, // 0x47 'G'
|
||||
{ 828, 14, 17, 18, 2, -16 }, // 0x48 'H'
|
||||
{ 858, 7, 17, 9, 1, -16 }, // 0x49 'I'
|
||||
{ 873, 8, 22, 8, -2, -16 }, // 0x4A 'J'
|
||||
{ 895, 14, 17, 16, 2, -16 }, // 0x4B 'K'
|
||||
{ 925, 10, 17, 13, 2, -16 }, // 0x4C 'L'
|
||||
{ 947, 18, 17, 22, 2, -16 }, // 0x4D 'M'
|
||||
{ 986, 15, 17, 19, 2, -16 }, // 0x4E 'N'
|
||||
{ 1018, 16, 17, 19, 1, -16 }, // 0x4F 'O'
|
||||
{ 1052, 12, 17, 15, 2, -16 }, // 0x50 'P'
|
||||
{ 1078, 16, 21, 19, 1, -16 }, // 0x51 'Q'
|
||||
{ 1120, 13, 17, 15, 2, -16 }, // 0x52 'R'
|
||||
{ 1148, 11, 17, 13, 1, -16 }, // 0x53 'S'
|
||||
{ 1172, 13, 17, 14, 0, -16 }, // 0x54 'T'
|
||||
{ 1200, 14, 17, 18, 2, -16 }, // 0x55 'U'
|
||||
{ 1230, 15, 17, 15, 0, -16 }, // 0x56 'V'
|
||||
{ 1262, 23, 17, 23, 0, -16 }, // 0x57 'W'
|
||||
{ 1311, 16, 17, 16, 0, -16 }, // 0x58 'X'
|
||||
{ 1345, 15, 17, 15, 0, -16 }, // 0x59 'Y'
|
||||
{ 1377, 12, 17, 14, 1, -16 }, // 0x5A 'Z'
|
||||
{ 1403, 5, 21, 8, 2, -16 }, // 0x5B '['
|
||||
{ 1417, 10, 17, 10, 0, -16 }, // 0x5C '\'
|
||||
{ 1439, 5, 21, 8, 1, -16 }, // 0x5D ']'
|
||||
{ 1453, 12, 11, 13, 1, -16 }, // 0x5E '^'
|
||||
{ 1470, 10, 2, 10, 0, 3 }, // 0x5F '_'
|
||||
{ 1473, 7, 4, 9, 1, -17 }, // 0x60 '`'
|
||||
{ 1477, 11, 13, 14, 1, -12 }, // 0x61 'a'
|
||||
{ 1495, 12, 18, 15, 2, -17 }, // 0x62 'b'
|
||||
{ 1522, 10, 13, 12, 1, -12 }, // 0x63 'c'
|
||||
{ 1539, 12, 18, 15, 1, -17 }, // 0x64 'd'
|
||||
{ 1566, 12, 13, 14, 1, -12 }, // 0x65 'e'
|
||||
{ 1586, 10, 18, 9, 0, -17 }, // 0x66 'f'
|
||||
{ 1609, 12, 19, 15, 1, -12 }, // 0x67 'g'
|
||||
{ 1638, 12, 18, 15, 2, -17 }, // 0x68 'h'
|
||||
{ 1665, 3, 18, 7, 2, -17 }, // 0x69 'i'
|
||||
{ 1672, 6, 24, 7, -1, -17 }, // 0x6A 'j'
|
||||
{ 1690, 13, 18, 15, 2, -17 }, // 0x6B 'k'
|
||||
{ 1720, 3, 18, 7, 2, -17 }, // 0x6C 'l'
|
||||
{ 1727, 19, 13, 23, 2, -12 }, // 0x6D 'm'
|
||||
{ 1758, 12, 13, 15, 2, -12 }, // 0x6E 'n'
|
||||
{ 1778, 13, 13, 15, 1, -12 }, // 0x6F 'o'
|
||||
{ 1800, 12, 19, 15, 2, -12 }, // 0x70 'p'
|
||||
{ 1829, 12, 19, 15, 1, -12 }, // 0x71 'q'
|
||||
{ 1858, 8, 13, 11, 2, -12 }, // 0x72 'r'
|
||||
{ 1871, 10, 13, 12, 1, -12 }, // 0x73 's'
|
||||
{ 1888, 8, 16, 10, 1, -15 }, // 0x74 't'
|
||||
{ 1904, 12, 13, 15, 2, -12 }, // 0x75 'u'
|
||||
{ 1924, 13, 13, 13, 0, -12 }, // 0x76 'v'
|
||||
{ 1946, 20, 13, 20, 0, -12 }, // 0x77 'w'
|
||||
{ 1979, 13, 13, 14, 0, -12 }, // 0x78 'x'
|
||||
{ 2001, 13, 19, 13, 0, -12 }, // 0x79 'y'
|
||||
{ 2032, 10, 13, 12, 1, -12 }, // 0x7A 'z'
|
||||
{ 2049, 8, 21, 9, 0, -16 }, // 0x7B '{'
|
||||
{ 2070, 3, 23, 13, 5, -17 }, // 0x7C '|'
|
||||
{ 2079, 8, 21, 9, 1, -16 }, // 0x7D '}'
|
||||
{ 2100, 11, 4, 13, 1, -9 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Bold12pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Bold12pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Bold12pt7bGlyphs,
|
||||
0x20, 0x7E, 32 };
|
||||
|
||||
// Approx. 2778 bytes
|
||||
|
||||
#endif // NOTOSANSBOLD12PT7B_H
|
||||
@@ -1,498 +0,0 @@
|
||||
#ifndef NOTOSANSBOLD18PT7B_H
|
||||
#define NOTOSANSBOLD18PT7B_H
|
||||
const uint8_t NotoSans_Bold18pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x9E, 0x79, 0xE7,
|
||||
0x9E, 0x78, 0x00, 0x00, 0x7B, 0xFF, 0xFF, 0x78, 0xF8, 0xFF, 0xC7, 0xFE,
|
||||
0x3F, 0xF1, 0xE7, 0x8F, 0x3C, 0x79, 0xE3, 0xCF, 0x1E, 0x78, 0xF0, 0x01,
|
||||
0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0x87, 0x80, 0x3C, 0x38,
|
||||
0x01, 0xE3, 0xC0, 0x0F, 0x1E, 0x0F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFB, 0xFF,
|
||||
0xFF, 0xC1, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x78, 0xF0, 0x03, 0x87, 0x83,
|
||||
0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x83, 0xC7,
|
||||
0x80, 0x1C, 0x38, 0x01, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x78, 0xF0, 0x03,
|
||||
0xC7, 0x80, 0x1C, 0x38, 0x00, 0x01, 0x80, 0x00, 0xC0, 0x00, 0x60, 0x01,
|
||||
0xFF, 0x83, 0xFF, 0xF3, 0xFF, 0xFB, 0xFF, 0xFD, 0xFB, 0x1C, 0xF9, 0x80,
|
||||
0x7C, 0xC0, 0x3F, 0x60, 0x1F, 0xF0, 0x07, 0xFC, 0x01, 0xFF, 0xC0, 0x7F,
|
||||
0xF0, 0x0F, 0xFC, 0x01, 0xFF, 0x00, 0xDF, 0xC0, 0x67, 0xE0, 0x31, 0xFC,
|
||||
0x19, 0xFF, 0xFF, 0xFB, 0xFF, 0xFD, 0xFF, 0xFC, 0xFF, 0xF8, 0x01, 0xE0,
|
||||
0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7E,
|
||||
0x00, 0x7C, 0x03, 0xFC, 0x01, 0xE0, 0x1F, 0xF8, 0x0F, 0x00, 0x79, 0xE0,
|
||||
0x3C, 0x03, 0xE3, 0xC1, 0xE0, 0x0F, 0x0F, 0x07, 0x80, 0x3C, 0x3C, 0x3C,
|
||||
0x00, 0xF0, 0xF1, 0xF0, 0x03, 0xC3, 0xC7, 0x80, 0x0F, 0x0F, 0x3E, 0x00,
|
||||
0x3E, 0x7C, 0xF3, 0xF8, 0x79, 0xE7, 0x9F, 0xF1, 0xFF, 0x9E, 0x7F, 0xE3,
|
||||
0xFC, 0xF3, 0xE7, 0x87, 0xE3, 0xCF, 0x1E, 0x00, 0x1E, 0x3C, 0x7C, 0x00,
|
||||
0xF8, 0xF0, 0xF0, 0x03, 0xC3, 0xC3, 0xC0, 0x1F, 0x0F, 0x0F, 0x00, 0x78,
|
||||
0x3C, 0x7C, 0x03, 0xC0, 0xF1, 0xE0, 0x0F, 0x03, 0xE7, 0x80, 0x78, 0x07,
|
||||
0xFE, 0x01, 0xE0, 0x0F, 0xF0, 0x0F, 0x00, 0x1F, 0x80, 0x00, 0x60, 0x00,
|
||||
0x03, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x03, 0xFF, 0xE0, 0x01, 0xFF, 0xF8,
|
||||
0x00, 0xF8, 0x7C, 0x00, 0x78, 0x3E, 0x00, 0x3E, 0x1F, 0x00, 0x1F, 0x1F,
|
||||
0x00, 0x0F, 0xDF, 0x80, 0x03, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF,
|
||||
0x81, 0xF0, 0xFF, 0xC0, 0xF8, 0xFF, 0xF0, 0xFC, 0xFF, 0xFC, 0x7C, 0x7E,
|
||||
0x7F, 0x7E, 0x3E, 0x1F, 0xFF, 0x3F, 0x07, 0xFF, 0x1F, 0x81, 0xFF, 0x07,
|
||||
0xC0, 0x7F, 0x83, 0xF8, 0x7F, 0xC1, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFC,
|
||||
0x1F, 0xFF, 0x7F, 0x03, 0xFE, 0x1F, 0xC0, 0xFF, 0xFF, 0xF7, 0xBD, 0xEF,
|
||||
0x78, 0x07, 0xC3, 0xE0, 0xF0, 0x7C, 0x1E, 0x0F, 0x83, 0xC1, 0xF0, 0x7C,
|
||||
0x1F, 0x07, 0x81, 0xE0, 0x78, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x07,
|
||||
0x81, 0xE0, 0x7C, 0x1F, 0x07, 0xC0, 0xF0, 0x3E, 0x0F, 0x81, 0xE0, 0x7C,
|
||||
0x0F, 0x81, 0xE0, 0x3C, 0xF8, 0x1F, 0x03, 0xC0, 0xF8, 0x1E, 0x07, 0xC1,
|
||||
0xF0, 0x3C, 0x0F, 0x83, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x7C, 0x1F,
|
||||
0x07, 0xC1, 0xE0, 0x78, 0x1E, 0x0F, 0x83, 0xE0, 0xF8, 0x3C, 0x1F, 0x07,
|
||||
0xC3, 0xE0, 0xF8, 0x7C, 0x1E, 0x0F, 0x00, 0x03, 0xE0, 0x01, 0xF0, 0x00,
|
||||
0x78, 0x00, 0x38, 0x00, 0x1C, 0x03, 0x0E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x83, 0xF8, 0x01, 0xFC, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0xF9,
|
||||
0xE0, 0xF8, 0xF8, 0x1C, 0x30, 0x04, 0x10, 0x00, 0x03, 0xC0, 0x01, 0xE0,
|
||||
0x00, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x01, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF0, 0x00, 0x78, 0x00, 0x3C, 0x00,
|
||||
0x1E, 0x00, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x00, 0x3E, 0x7D, 0xF3,
|
||||
0xE7, 0xCF, 0x1E, 0x78, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7B,
|
||||
0xFF, 0xFF, 0x78, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0x80, 0x3E, 0x00, 0xF8,
|
||||
0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x03, 0xE0, 0x0F, 0x80, 0x3C, 0x01, 0xF0,
|
||||
0x07, 0xC0, 0x1E, 0x00, 0xF8, 0x03, 0xE0, 0x1F, 0x00, 0x7C, 0x01, 0xF0,
|
||||
0x0F, 0x80, 0x3E, 0x00, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0xF8, 0x00, 0x00,
|
||||
0x40, 0x01, 0xFE, 0x01, 0xFF, 0xE0, 0xFF, 0xF8, 0x3F, 0xFF, 0x1F, 0x87,
|
||||
0xE7, 0xC0, 0xF9, 0xF0, 0x3E, 0x7C, 0x0F, 0xBF, 0x03, 0xFF, 0xC0, 0xFF,
|
||||
0xF0, 0x1F, 0xFC, 0x07, 0xFF, 0x01, 0xFF, 0xC0, 0x7F, 0xF0, 0x3F, 0xFC,
|
||||
0x0F, 0xDF, 0x03, 0xF7, 0xC0, 0xF9, 0xF0, 0x3E, 0x7E, 0x0F, 0x8F, 0x87,
|
||||
0xE3, 0xFF, 0xF0, 0x7F, 0xF8, 0x0F, 0xFE, 0x01, 0xFE, 0x00, 0x01, 0xF8,
|
||||
0x1F, 0xC1, 0xFE, 0x1F, 0xF3, 0xFF, 0xBF, 0xFF, 0xF7, 0xEF, 0x3F, 0x31,
|
||||
0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F,
|
||||
0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0,
|
||||
0x3F, 0x01, 0xF8, 0x00, 0x40, 0x03, 0xFF, 0x03, 0xFF, 0xE1, 0xFF, 0xFC,
|
||||
0xFF, 0xFF, 0x8F, 0x07, 0xE3, 0x80, 0xF8, 0x40, 0x3E, 0x00, 0x0F, 0x80,
|
||||
0x03, 0xE0, 0x01, 0xF8, 0x00, 0x7C, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F,
|
||||
0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00,
|
||||
0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xF0, 0x00, 0xC0, 0x07, 0xFF, 0x07, 0xFF, 0xE3, 0xFF, 0xFC, 0x7F,
|
||||
0xFF, 0x8E, 0x07, 0xE2, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x07,
|
||||
0xC0, 0x03, 0xF0, 0x3F, 0xF0, 0x0F, 0xF0, 0x03, 0xFF, 0x00, 0xFF, 0xF0,
|
||||
0x00, 0xFE, 0x00, 0x0F, 0x80, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x80,
|
||||
0x0F, 0xF8, 0x0F, 0xEF, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFE, 0x0F, 0xFE,
|
||||
0x00, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x7F, 0x80, 0x1F,
|
||||
0xF0, 0x03, 0xFE, 0x00, 0xFF, 0xC0, 0x3F, 0xF8, 0x07, 0xBF, 0x01, 0xE7,
|
||||
0xE0, 0x7C, 0xFC, 0x0F, 0x1F, 0x83, 0xC3, 0xF0, 0xF8, 0x7E, 0x1E, 0x0F,
|
||||
0xC7, 0x81, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF0, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F,
|
||||
0x00, 0x7F, 0xFE, 0x3F, 0xFF, 0x1F, 0xFF, 0x8F, 0xFF, 0xC7, 0xC0, 0x03,
|
||||
0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x7F, 0xF8, 0x3F, 0xFF,
|
||||
0x1F, 0xFF, 0xCF, 0xFF, 0xF1, 0x87, 0xF8, 0x00, 0xFC, 0x00, 0x3E, 0x00,
|
||||
0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xD0, 0x07, 0xEE, 0x07, 0xF7, 0xFF, 0xF3,
|
||||
0xFF, 0xF9, 0xFF, 0xF0, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0xC0,
|
||||
0xFF, 0xF0, 0x7F, 0xFC, 0x3F, 0x80, 0x0F, 0x80, 0x07, 0xC0, 0x01, 0xF0,
|
||||
0x00, 0x7C, 0x00, 0x1E, 0x7F, 0x8F, 0xBF, 0xF3, 0xFF, 0xFE, 0xFF, 0xFF,
|
||||
0xBF, 0x83, 0xFF, 0xC0, 0xFF, 0xF0, 0x1F, 0xFC, 0x07, 0xFF, 0x01, 0xF7,
|
||||
0xC0, 0x7D, 0xF0, 0x3F, 0x7E, 0x1F, 0x8F, 0xFF, 0xE1, 0xFF, 0xF0, 0x3F,
|
||||
0xF8, 0x07, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x01, 0xF8, 0x00, 0x7C, 0x00, 0x3F,
|
||||
0x00, 0x0F, 0x80, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x3F, 0x00,
|
||||
0x0F, 0x80, 0x07, 0xE0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F,
|
||||
0x80, 0x07, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x80,
|
||||
0x00, 0x0F, 0xFC, 0x07, 0xFF, 0x83, 0xFF, 0xF1, 0xFC, 0xFE, 0x7C, 0x0F,
|
||||
0x9F, 0x03, 0xE7, 0xC0, 0xF9, 0xF0, 0x3E, 0x3E, 0x1F, 0x0F, 0xFF, 0xC1,
|
||||
0xFF, 0xE0, 0x3F, 0xE0, 0x0F, 0xFC, 0x07, 0xFF, 0x83, 0xF3, 0xF1, 0xF8,
|
||||
0x7E, 0x7C, 0x0F, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xFC, 0x0F,
|
||||
0xDF, 0xFF, 0xE7, 0xFF, 0xF8, 0xFF, 0xF8, 0x0F, 0xFC, 0x00, 0x0F, 0xF8,
|
||||
0x07, 0xFF, 0x03, 0xFF, 0xE1, 0xFF, 0xFC, 0x7E, 0x1F, 0xBF, 0x03, 0xEF,
|
||||
0x80, 0xFB, 0xE0, 0x3F, 0xF8, 0x07, 0xFE, 0x03, 0xFF, 0xC0, 0xFD, 0xF8,
|
||||
0x7F, 0x7F, 0xFF, 0xCF, 0xFF, 0xF3, 0xFF, 0x7C, 0x3F, 0x9E, 0x00, 0x07,
|
||||
0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x7F, 0x0F, 0xFF, 0x83,
|
||||
0xFF, 0xC0, 0xFF, 0xE0, 0x3F, 0xE0, 0x00, 0x33, 0xFF, 0xFF, 0xFD, 0xE0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xDE, 0x18, 0xFD,
|
||||
0xFB, 0xF7, 0xE7, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x3E, 0x7D, 0xF3, 0xE7, 0xCF, 0x1E, 0x78, 0xF0, 0x00, 0x00, 0x80, 0x01,
|
||||
0xC0, 0x03, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0x80, 0x7F,
|
||||
0x00, 0xFE, 0x00, 0x7C, 0x00, 0x3F, 0x80, 0x0F, 0xF8, 0x01, 0xFF, 0x00,
|
||||
0x3F, 0xE0, 0x07, 0xFE, 0x00, 0x7F, 0x00, 0x0F, 0x80, 0x01, 0xC0, 0x00,
|
||||
0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xE0, 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x1F, 0xC0, 0x0F, 0xF8, 0x00,
|
||||
0xFF, 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x00, 0x7F, 0x80, 0x0F, 0xC0, 0x1F,
|
||||
0xE0, 0x3F, 0xC0, 0xFF, 0x81, 0xFF, 0x03, 0xFE, 0x01, 0xF8, 0x00, 0xF0,
|
||||
0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, 0x1F, 0xF8, 0xFF, 0xFC,
|
||||
0x7F, 0xFE, 0x7F, 0xFF, 0x30, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F,
|
||||
0x00, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xC0,
|
||||
0x07, 0xC0, 0x07, 0x80, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x07, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x07, 0xC0, 0x00, 0x7F,
|
||||
0xF0, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0x00, 0xFE, 0x01, 0xF8,
|
||||
0x1F, 0x80, 0x07, 0xC3, 0xE0, 0x00, 0x3C, 0x3C, 0x0F, 0xC1, 0xE7, 0x83,
|
||||
0xFF, 0x9E, 0x78, 0x7F, 0xF8, 0xFF, 0x0F, 0xCF, 0x8F, 0xF1, 0xF0, 0x78,
|
||||
0xFF, 0x1E, 0x07, 0x8F, 0xF1, 0xE0, 0xF0, 0xFF, 0x1E, 0x0F, 0x0F, 0xF1,
|
||||
0xE0, 0xF0, 0xFF, 0x1E, 0x0F, 0x0F, 0xF1, 0xE0, 0xF1, 0xEF, 0x1F, 0x1F,
|
||||
0x9E, 0xF0, 0xFF, 0xFF, 0xCF, 0x0F, 0xFB, 0xF8, 0x78, 0x3E, 0x1F, 0x07,
|
||||
0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0xC0, 0x1F, 0xFB,
|
||||
0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x80,
|
||||
0x01, 0xFF, 0x80, 0x01, 0xF7, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xE7, 0xC0,
|
||||
0x03, 0xE7, 0xE0, 0x07, 0xE3, 0xE0, 0x07, 0xC3, 0xE0, 0x07, 0xC3, 0xF0,
|
||||
0x0F, 0xC1, 0xF0, 0x0F, 0x81, 0xF0, 0x0F, 0x81, 0xF8, 0x1F, 0xFF, 0xF8,
|
||||
0x1F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0x00, 0x7C,
|
||||
0x3E, 0x00, 0x7E, 0x7E, 0x00, 0x7E, 0x7E, 0x00, 0x3F, 0x7C, 0x00, 0x3F,
|
||||
0xFC, 0x00, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFE, 0x7F, 0xFF,
|
||||
0xEF, 0x81, 0xFD, 0xF0, 0x1F, 0xBE, 0x03, 0xF7, 0xC0, 0x7E, 0xF8, 0x0F,
|
||||
0xDF, 0x03, 0xF3, 0xFF, 0xFC, 0x7F, 0xFE, 0x0F, 0xFF, 0xF1, 0xFF, 0xFF,
|
||||
0x3E, 0x07, 0xF7, 0xC0, 0x3E, 0xF8, 0x07, 0xFF, 0x00, 0xFF, 0xE0, 0x1F,
|
||||
0xFC, 0x07, 0xEF, 0x81, 0xFD, 0xFF, 0xFF, 0xBF, 0xFF, 0xE7, 0xFF, 0xF8,
|
||||
0xFF, 0xF8, 0x00, 0x00, 0x18, 0x00, 0x1F, 0xFC, 0x07, 0xFF, 0xF0, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0xE3, 0xF8, 0x1C, 0x7F, 0x00, 0x07, 0xE0, 0x00, 0x7C,
|
||||
0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x7C, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x23, 0xFC, 0x1E, 0x3F, 0xFF,
|
||||
0xE1, 0xFF, 0xFE, 0x07, 0xFF, 0xE0, 0x3F, 0xF8, 0xFF, 0xF8, 0x07, 0xFF,
|
||||
0xF8, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF, 0x8F, 0x83, 0xFE, 0x7C, 0x03, 0xF3,
|
||||
0xE0, 0x0F, 0xDF, 0x00, 0x7E, 0xF8, 0x01, 0xFF, 0xC0, 0x0F, 0xFE, 0x00,
|
||||
0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x1F, 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFF,
|
||||
0x00, 0x3F, 0xF8, 0x01, 0xF7, 0xC0, 0x1F, 0xBE, 0x01, 0xFD, 0xF0, 0x1F,
|
||||
0xCF, 0x87, 0xFC, 0x7F, 0xFF, 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0xFF,
|
||||
0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F,
|
||||
0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xFF, 0xF7, 0xFF,
|
||||
0xEF, 0xFF, 0xDF, 0xFF, 0xBF, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03,
|
||||
0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0x00,
|
||||
0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xFF, 0xEF,
|
||||
0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0,
|
||||
0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00,
|
||||
0x00, 0x04, 0x00, 0x0F, 0xFF, 0x01, 0xFF, 0xFE, 0x1F, 0xFF, 0xE1, 0xFF,
|
||||
0xFF, 0x1F, 0xE0, 0x30, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x07,
|
||||
0xE0, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC1, 0xFF, 0xFE, 0x0F,
|
||||
0xFF, 0xF0, 0x7F, 0xFF, 0x83, 0xFF, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0xDF,
|
||||
0x00, 0x7E, 0xFC, 0x03, 0xF7, 0xF0, 0x1F, 0x9F, 0xE0, 0xFC, 0x7F, 0xFF,
|
||||
0xE1, 0xFF, 0xFF, 0x07, 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0xFC, 0x01, 0xFF,
|
||||
0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xC0, 0x1F, 0xFE, 0x00,
|
||||
0xFF, 0xF0, 0x07, 0xFF, 0x80, 0x3F, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07,
|
||||
0xFF, 0x80, 0x3F, 0xFC, 0x01, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x7F, 0xF8,
|
||||
0x03, 0xFF, 0xC0, 0x1F, 0xFE, 0x00, 0xFF, 0xF0, 0x07, 0xFF, 0x80, 0x3F,
|
||||
0xFC, 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0x1F, 0x81, 0xF8,
|
||||
0x1F, 0x81, 0xF8, 0x1F, 0x81, 0xF8, 0x1F, 0x81, 0xF8, 0x1F, 0x81, 0xF8,
|
||||
0x1F, 0x81, 0xF8, 0x1F, 0x81, 0xF8, 0x1F, 0x81, 0xF8, 0x1F, 0x87, 0xFE,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03,
|
||||
0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03,
|
||||
0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03,
|
||||
0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x7E, 0xFF,
|
||||
0xEF, 0xFC, 0xFF, 0x8F, 0xF0, 0xFC, 0x03, 0xFF, 0xC0, 0x7E, 0xFC, 0x0F,
|
||||
0xCF, 0xC1, 0xF8, 0xFC, 0x1F, 0x8F, 0xC3, 0xF0, 0xFC, 0x7E, 0x0F, 0xCF,
|
||||
0xC0, 0xFC, 0xFC, 0x0F, 0xDF, 0x80, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0xFF,
|
||||
0xF8, 0x0F, 0xFF, 0x80, 0xFF, 0xFC, 0x0F, 0xCF, 0xC0, 0xFC, 0x7E, 0x0F,
|
||||
0xC3, 0xF0, 0xFC, 0x3F, 0x0F, 0xC1, 0xF8, 0xFC, 0x0F, 0xCF, 0xC0, 0xFC,
|
||||
0xFC, 0x07, 0xEF, 0xC0, 0x7E, 0xFC, 0x03, 0xF0, 0xF8, 0x00, 0xF8, 0x00,
|
||||
0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00,
|
||||
0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00,
|
||||
0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00,
|
||||
0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
|
||||
0x0F, 0xFF, 0xE0, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x0F, 0xFF,
|
||||
0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xE0, 0x0F, 0xFF, 0xFE, 0x03,
|
||||
0xDF, 0xFB, 0xC0, 0x7B, 0xFF, 0x78, 0x0F, 0x7F, 0xEF, 0x83, 0xEF, 0xFC,
|
||||
0xF0, 0x79, 0xFF, 0x9E, 0x0F, 0x3F, 0xF3, 0xE3, 0xE7, 0xFE, 0x3C, 0x78,
|
||||
0xFF, 0xC7, 0x8F, 0x1F, 0xF8, 0xFB, 0xE3, 0xFF, 0x0F, 0x78, 0x7F, 0xE1,
|
||||
0xEF, 0x0F, 0xFC, 0x3F, 0xE1, 0xFF, 0x87, 0xF8, 0x3F, 0xF0, 0x7F, 0x07,
|
||||
0xFE, 0x0F, 0xE0, 0xFF, 0xC1, 0xF8, 0x1F, 0xF8, 0x1F, 0x03, 0xE0, 0xFE,
|
||||
0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0,
|
||||
0x3F, 0xFF, 0x00, 0xFF, 0xFE, 0x03, 0xFE, 0xF8, 0x0F, 0xFB, 0xF0, 0x3F,
|
||||
0xE7, 0xE0, 0xFF, 0x9F, 0x83, 0xFE, 0x3F, 0x0F, 0xF8, 0x7C, 0x3F, 0xE1,
|
||||
0xF8, 0xFF, 0x83, 0xE3, 0xFE, 0x0F, 0xCF, 0xF8, 0x1F, 0xBF, 0xE0, 0x7E,
|
||||
0xFF, 0x80, 0xFF, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x0F, 0xFF,
|
||||
0x80, 0x3F, 0xFE, 0x00, 0x7F, 0xF8, 0x01, 0xFC, 0x00, 0x18, 0x00, 0x03,
|
||||
0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x3F,
|
||||
0x81, 0xFC, 0x7F, 0x00, 0xFE, 0x7E, 0x00, 0x7E, 0x7C, 0x00, 0x7E, 0xFC,
|
||||
0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x3F, 0x7E, 0x00, 0x7E, 0x7E, 0x00, 0x7E, 0x7F, 0x00, 0xFC, 0x3F,
|
||||
0xC3, 0xFC, 0x1F, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x07, 0xFF, 0xE0, 0x01,
|
||||
0xFF, 0x80, 0xFF, 0xF8, 0x7F, 0xFF, 0x3F, 0xFF, 0xDF, 0xFF, 0xEF, 0x83,
|
||||
0xFF, 0xC0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE,
|
||||
0x07, 0xFF, 0x1F, 0xFF, 0xFF, 0xF7, 0xFF, 0xF3, 0xFF, 0xF1, 0xFF, 0xE0,
|
||||
0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0,
|
||||
0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03,
|
||||
0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x3F,
|
||||
0x81, 0xFC, 0x7F, 0x00, 0xFE, 0x7E, 0x00, 0x7E, 0x7C, 0x00, 0x7E, 0xFC,
|
||||
0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x3F, 0x7E, 0x00, 0x7E, 0x7E, 0x00, 0x7E, 0x7F, 0x00, 0xFC, 0x3F,
|
||||
0xC3, 0xFC, 0x1F, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x07, 0xFF, 0xE0, 0x01,
|
||||
0xFF, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF,
|
||||
0xE0, 0xFF, 0xFF, 0x0F, 0xFF, 0xF8, 0xF8, 0x3F, 0x8F, 0x80, 0xF8, 0xF8,
|
||||
0x0F, 0xCF, 0x80, 0xFC, 0xF8, 0x0F, 0x8F, 0x80, 0xF8, 0xF8, 0x1F, 0x8F,
|
||||
0xFF, 0xF0, 0xFF, 0xFE, 0x0F, 0xFF, 0xC0, 0xFF, 0xF8, 0x0F, 0x8F, 0xC0,
|
||||
0xF8, 0x7E, 0x0F, 0x83, 0xE0, 0xF8, 0x3F, 0x0F, 0x81, 0xF8, 0xF8, 0x1F,
|
||||
0x8F, 0x80, 0xFC, 0xF8, 0x07, 0xEF, 0x80, 0x7E, 0xF8, 0x03, 0xF0, 0x00,
|
||||
0x80, 0x0F, 0xFC, 0x3F, 0xFF, 0x7F, 0xFE, 0x7F, 0xFE, 0xFC, 0x0E, 0xF8,
|
||||
0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFC, 0x00, 0xFF, 0x00, 0x7F, 0xC0, 0x3F,
|
||||
0xF0, 0x1F, 0xF8, 0x07, 0xFC, 0x01, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x00,
|
||||
0x1F, 0x00, 0x1F, 0x80, 0x3F, 0xF0, 0x7F, 0xFF, 0xFE, 0xFF, 0xFC, 0xFF,
|
||||
0xF8, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF0, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0,
|
||||
0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0,
|
||||
0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0,
|
||||
0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80,
|
||||
0x03, 0xF0, 0x00, 0xF8, 0x01, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7F, 0xF0,
|
||||
0x03, 0xFF, 0x80, 0x1F, 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x3F,
|
||||
0xF8, 0x01, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80,
|
||||
0x1F, 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x3F, 0xF8, 0x01, 0xFF,
|
||||
0xE0, 0x0F, 0xFF, 0x00, 0x7C, 0xF8, 0x07, 0xE7, 0xF0, 0x7F, 0x1F, 0xFF,
|
||||
0xF0, 0xFF, 0xFF, 0x03, 0xFF, 0xF0, 0x07, 0xFE, 0x00, 0xFC, 0x00, 0x7E,
|
||||
0xF8, 0x00, 0xF9, 0xF0, 0x01, 0xF3, 0xF0, 0x07, 0xE3, 0xE0, 0x0F, 0x87,
|
||||
0xC0, 0x1F, 0x0F, 0x80, 0x7E, 0x0F, 0x80, 0xF8, 0x1F, 0x01, 0xF0, 0x3E,
|
||||
0x07, 0xE0, 0x3E, 0x0F, 0x80, 0x7C, 0x1F, 0x00, 0xF8, 0x7E, 0x00, 0xF8,
|
||||
0xF8, 0x01, 0xF1, 0xF0, 0x03, 0xE3, 0xE0, 0x03, 0xEF, 0x80, 0x07, 0xDF,
|
||||
0x00, 0x0F, 0xBE, 0x00, 0x0F, 0x78, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xE0,
|
||||
0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0xF8, 0x03, 0xF0,
|
||||
0x07, 0xFF, 0x00, 0xFC, 0x03, 0xF7, 0xC0, 0x3F, 0x00, 0xF9, 0xF0, 0x0F,
|
||||
0xE0, 0x3E, 0x7C, 0x07, 0xF8, 0x0F, 0x9F, 0x81, 0xFE, 0x07, 0xE3, 0xE0,
|
||||
0x7F, 0x81, 0xF0, 0xF8, 0x1F, 0xF0, 0x7C, 0x3E, 0x0F, 0xFC, 0x1F, 0x0F,
|
||||
0xC3, 0xCF, 0x07, 0xC1, 0xF0, 0xF3, 0xC3, 0xE0, 0x7C, 0x7C, 0xF8, 0xF8,
|
||||
0x1F, 0x1F, 0x3E, 0x3E, 0x07, 0xC7, 0x87, 0x8F, 0x80, 0xF9, 0xE1, 0xE7,
|
||||
0xC0, 0x3E, 0xF8, 0x7D, 0xF0, 0x0F, 0xBE, 0x1F, 0x7C, 0x01, 0xEF, 0x03,
|
||||
0xDF, 0x00, 0x7B, 0xC0, 0xF7, 0x80, 0x1F, 0xF0, 0x3F, 0xE0, 0x07, 0xFC,
|
||||
0x0F, 0xF8, 0x00, 0xFE, 0x01, 0xFE, 0x00, 0x3F, 0x80, 0x7F, 0x00, 0x0F,
|
||||
0xE0, 0x1F, 0xC0, 0x03, 0xF8, 0x07, 0xF0, 0x00, 0x7E, 0x00, 0xFE, 0x7E,
|
||||
0x01, 0xF8, 0xFC, 0x07, 0xE0, 0xFC, 0x0F, 0xC0, 0xF8, 0x3F, 0x01, 0xF8,
|
||||
0xFC, 0x01, 0xF9, 0xF8, 0x01, 0xF7, 0xE0, 0x03, 0xFF, 0x80, 0x03, 0xFF,
|
||||
0x00, 0x07, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xE0,
|
||||
0x00, 0x7F, 0xC0, 0x01, 0xFF, 0xC0, 0x03, 0xEF, 0xC0, 0x0F, 0xCF, 0x80,
|
||||
0x3F, 0x1F, 0x80, 0x7E, 0x1F, 0x81, 0xF8, 0x3F, 0x07, 0xE0, 0x3F, 0x0F,
|
||||
0xC0, 0x3F, 0x3F, 0x00, 0x7E, 0xFC, 0x00, 0x7E, 0xFC, 0x00, 0xFD, 0xF8,
|
||||
0x07, 0xE7, 0xE0, 0x1F, 0x8F, 0xC0, 0xFC, 0x3F, 0x03, 0xF0, 0x7E, 0x1F,
|
||||
0x80, 0xF8, 0x7C, 0x03, 0xF3, 0xF0, 0x07, 0xCF, 0x80, 0x1F, 0xFE, 0x00,
|
||||
0x3F, 0xF0, 0x00, 0xFF, 0xC0, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x0F,
|
||||
0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x3F, 0x00, 0x00, 0xFC, 0x00, 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF,
|
||||
0x7F, 0xFF, 0xE0, 0x00, 0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x01, 0xF0,
|
||||
0x00, 0x7E, 0x00, 0x1F, 0x80, 0x03, 0xE0, 0x00, 0xFC, 0x00, 0x3F, 0x00,
|
||||
0x0F, 0xC0, 0x01, 0xF0, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x03, 0xE0, 0x00,
|
||||
0xFC, 0x00, 0x3F, 0x00, 0x07, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x87, 0xC3,
|
||||
0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8,
|
||||
0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F,
|
||||
0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0x01, 0xF0, 0x07, 0xC0, 0x0F, 0x00, 0x3E,
|
||||
0x00, 0xF8, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x01,
|
||||
0xE0, 0x07, 0xC0, 0x1F, 0x00, 0x3C, 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0,
|
||||
0x1F, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xE0, 0x07, 0x80, 0x1F, 0x00, 0x7C,
|
||||
0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
||||
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
||||
0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0x00, 0x78, 0x00,
|
||||
0x3E, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xDE, 0x00, 0xF7, 0x80, 0x3C,
|
||||
0xF0, 0x1E, 0x3C, 0x07, 0x87, 0x83, 0xC1, 0xE0, 0xF0, 0x3C, 0x78, 0x0F,
|
||||
0x9E, 0x01, 0xE7, 0x80, 0x7F, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF8, 0xFE, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0x70, 0x00, 0x60, 0x03,
|
||||
0xFF, 0x83, 0xFF, 0xF0, 0x7F, 0xFE, 0x1F, 0x1F, 0x82, 0x03, 0xE0, 0x00,
|
||||
0xFC, 0x00, 0x3F, 0x03, 0xFF, 0xC7, 0xFF, 0xF3, 0xFF, 0xFD, 0xFC, 0x3F,
|
||||
0x7C, 0x0F, 0xFF, 0x03, 0xFF, 0xC0, 0xFF, 0xF0, 0x7F, 0x7F, 0xFF, 0xDF,
|
||||
0xFF, 0xF3, 0xFF, 0x7C, 0x7F, 0x0F, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80,
|
||||
0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x80,
|
||||
0xF9, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3, 0xFF, 0xFE, 0xFC, 0x1F, 0xBE,
|
||||
0x03, 0xEF, 0x80, 0xFB, 0xE0, 0x3E, 0xF8, 0x0F, 0xFE, 0x03, 0xFF, 0x80,
|
||||
0xFF, 0xE0, 0x3E, 0xF8, 0x0F, 0xBF, 0x07, 0xEF, 0xE3, 0xFB, 0xFF, 0xFC,
|
||||
0xFF, 0xFF, 0x3D, 0xFF, 0x8F, 0x1F, 0xC0, 0x00, 0xC0, 0x1F, 0xFC, 0x7F,
|
||||
0xF9, 0xFF, 0xF7, 0xFF, 0xCF, 0xC0, 0xBF, 0x00, 0x7C, 0x00, 0xF8, 0x01,
|
||||
0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3F,
|
||||
0x07, 0x7F, 0xFE, 0x7F, 0xFC, 0x7F, 0xF8, 0x3F, 0xE0, 0x00, 0x0F, 0xC0,
|
||||
0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00,
|
||||
0xFC, 0x0C, 0x3F, 0x1F, 0xEF, 0xCF, 0xFD, 0xF7, 0xFF, 0xFD, 0xFF, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0x03, 0xFF, 0x80, 0xFF, 0xE0, 0x1F, 0xF8, 0x07, 0xFE,
|
||||
0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x0F, 0xFF, 0x03, 0xFF, 0xE1,
|
||||
0xFD, 0xFF, 0xFF, 0x7F, 0xFF, 0xCF, 0xFD, 0xF0, 0xFC, 0x7C, 0x00, 0xC0,
|
||||
0x07, 0xFE, 0x07, 0xFF, 0x87, 0xFF, 0xE7, 0xE3, 0xF3, 0xE0, 0x7F, 0xF0,
|
||||
0x3F, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x80, 0x07, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x02, 0x7F, 0xFF, 0x1F, 0xFF,
|
||||
0x87, 0xFF, 0xC0, 0xFF, 0xC0, 0x03, 0xF8, 0x3F, 0xF1, 0xFF, 0xC7, 0xFE,
|
||||
0x1F, 0x88, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x7F, 0xF3, 0xFF, 0xCF, 0xFF,
|
||||
0x3F, 0xFC, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C,
|
||||
0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F,
|
||||
0x00, 0x7C, 0x01, 0xF0, 0x00, 0x03, 0x00, 0x07, 0xF9, 0xF3, 0xFF, 0x7D,
|
||||
0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x07, 0xFF, 0xC0, 0xFF, 0xE0, 0x3F, 0xF8,
|
||||
0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x03,
|
||||
0xFF, 0xC0, 0xFF, 0xF8, 0x7F, 0x7F, 0xFF, 0xDF, 0xFF, 0xF3, 0xFF, 0xFC,
|
||||
0x3F, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xF9, 0x80, 0x7E, 0x7F,
|
||||
0xFF, 0x9F, 0xFF, 0xC7, 0xFF, 0xE1, 0xFF, 0xE0, 0xF8, 0x00, 0x7C, 0x00,
|
||||
0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0,
|
||||
0x60, 0xF9, 0xFE, 0x7F, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF,
|
||||
0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03,
|
||||
0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8,
|
||||
0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xE0, 0x39, 0xFF, 0xFF, 0x7C, 0x00, 0x00,
|
||||
0x7D, 0xF7, 0xDF, 0x7D, 0xF7, 0xDF, 0x7D, 0xF7, 0xDF, 0x7D, 0xF7, 0xDF,
|
||||
0x7D, 0xF7, 0xC0, 0x03, 0x81, 0xF0, 0xFC, 0x3F, 0x07, 0xC0, 0x00, 0x00,
|
||||
0x00, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07,
|
||||
0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0,
|
||||
0x7C, 0x1F, 0x07, 0xC3, 0xF0, 0xFF, 0xFF, 0xFF, 0xBF, 0xCF, 0xE0, 0xF8,
|
||||
0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0,
|
||||
0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x0F, 0xDF, 0x03, 0xF3, 0xE0,
|
||||
0xFC, 0x7C, 0x3F, 0x0F, 0x8F, 0xC1, 0xF3, 0xF0, 0x3E, 0xFC, 0x07, 0xDF,
|
||||
0x00, 0xFF, 0xE0, 0x1F, 0xFE, 0x03, 0xFF, 0xE0, 0x7F, 0xFC, 0x0F, 0xCF,
|
||||
0xC1, 0xF0, 0xFC, 0x3E, 0x0F, 0xC7, 0xC1, 0xF8, 0xF8, 0x1F, 0x9F, 0x01,
|
||||
0xFB, 0xE0, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x20, 0x06,
|
||||
0x07, 0x9F, 0xF1, 0xFE, 0x3D, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF,
|
||||
0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0, 0xFF, 0xF0, 0x7F, 0x07, 0xFF, 0x03,
|
||||
0xF0, 0x3F, 0xF8, 0x0F, 0x80, 0xFF, 0xC0, 0x7C, 0x07, 0xFE, 0x03, 0xE0,
|
||||
0x3F, 0xF0, 0x1F, 0x01, 0xFF, 0x80, 0xF8, 0x0F, 0xFC, 0x07, 0xC0, 0x7F,
|
||||
0xE0, 0x3E, 0x03, 0xFF, 0x01, 0xF0, 0x1F, 0xF8, 0x0F, 0x80, 0xFF, 0xC0,
|
||||
0x7C, 0x07, 0xFE, 0x03, 0xE0, 0x3F, 0xF0, 0x1F, 0x01, 0xF0, 0x00, 0x20,
|
||||
0x79, 0xFF, 0x3D, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xF0,
|
||||
0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF,
|
||||
0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07,
|
||||
0xFE, 0x03, 0xFF, 0x01, 0xF0, 0x00, 0xE0, 0x03, 0xFF, 0x01, 0xFF, 0xE0,
|
||||
0xFF, 0xFC, 0x7F, 0xFF, 0x9F, 0x03, 0xEF, 0xC0, 0xFF, 0xE0, 0x1F, 0xF8,
|
||||
0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01,
|
||||
0xFF, 0xC0, 0xFD, 0xF8, 0x7E, 0x7F, 0xFF, 0x8F, 0xFF, 0xC1, 0xFF, 0xE0,
|
||||
0x1F, 0xE0, 0x00, 0x30, 0x3C, 0x7F, 0x0F, 0x7F, 0xE3, 0xFF, 0xFC, 0xFF,
|
||||
0xFF, 0xBF, 0x07, 0xEF, 0x80, 0xFB, 0xE0, 0x3E, 0xF8, 0x0F, 0xFE, 0x03,
|
||||
0xFF, 0x80, 0xFF, 0xE0, 0x3F, 0xF8, 0x0F, 0xBE, 0x03, 0xEF, 0xC1, 0xFB,
|
||||
0xF8, 0xFE, 0xFF, 0xFF, 0x3F, 0xFF, 0xCF, 0xFF, 0xE3, 0xE7, 0xF0, 0xF8,
|
||||
0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00,
|
||||
0x0F, 0x80, 0x03, 0xE0, 0x00, 0x03, 0x00, 0x07, 0xF9, 0xF3, 0xFF, 0x7D,
|
||||
0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x07, 0xFF, 0xC0, 0xFF, 0xE0, 0x3F, 0xF8,
|
||||
0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x03,
|
||||
0xFF, 0xC0, 0xFF, 0xF8, 0x7F, 0x7F, 0xFF, 0xDF, 0xFF, 0xF3, 0xFF, 0xFC,
|
||||
0x3F, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00,
|
||||
0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x3F, 0x1F, 0xF3,
|
||||
0xFF, 0x7F, 0xFF, 0xFF, 0xF9, 0xFC, 0x0F, 0xC0, 0xF8, 0x0F, 0x80, 0xF8,
|
||||
0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8,
|
||||
0x0F, 0x80, 0x03, 0x00, 0xFF, 0xE7, 0xFF, 0xFF, 0xFE, 0xF8, 0x3B, 0xE0,
|
||||
0x2F, 0x80, 0x3F, 0x80, 0xFF, 0x81, 0xFF, 0x83, 0xFF, 0x83, 0xFF, 0x01,
|
||||
0xFC, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xBF,
|
||||
0xF8, 0x0F, 0x00, 0x78, 0x07, 0xC0, 0x3E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80,
|
||||
0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x3F, 0xF1, 0xFF, 0x87,
|
||||
0xFC, 0x1F, 0xE0, 0xFC, 0x07, 0xFF, 0x01, 0xFF, 0xC0, 0x7F, 0xF0, 0x1F,
|
||||
0xFC, 0x07, 0xFF, 0x01, 0xFF, 0xC0, 0x7F, 0xF0, 0x1F, 0xFC, 0x07, 0xFF,
|
||||
0x01, 0xFF, 0xC0, 0x7F, 0xF0, 0x1F, 0xFC, 0x07, 0xDF, 0x03, 0xF7, 0xE1,
|
||||
0xFD, 0xFF, 0xFF, 0x7F, 0xFF, 0xCF, 0xFC, 0xF1, 0xFE, 0x3C, 0xFC, 0x03,
|
||||
0xF7, 0xC0, 0x3E, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x3E, 0x07, 0xC3, 0xE0,
|
||||
0x7C, 0x1F, 0x0F, 0xC1, 0xF0, 0xF8, 0x1F, 0x0F, 0x80, 0xF9, 0xF0, 0x0F,
|
||||
0x9F, 0x00, 0xF9, 0xF0, 0x07, 0xFE, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00,
|
||||
0x3F, 0xC0, 0x03, 0xFC, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0xFC, 0x0F,
|
||||
0xC0, 0xFD, 0xF0, 0x3F, 0x03, 0xE7, 0xC0, 0xFE, 0x0F, 0x9F, 0x87, 0xF8,
|
||||
0x3E, 0x3E, 0x1F, 0xE1, 0xF0, 0xF8, 0x7B, 0x87, 0xC3, 0xE3, 0xCF, 0x1F,
|
||||
0x07, 0xCF, 0x3C, 0x7C, 0x1F, 0x3C, 0xF3, 0xE0, 0x7C, 0xF3, 0xCF, 0x81,
|
||||
0xF3, 0x87, 0xBE, 0x03, 0xDE, 0x1E, 0xF0, 0x0F, 0xF8, 0x7B, 0xC0, 0x3F,
|
||||
0xE1, 0xFF, 0x00, 0x7F, 0x83, 0xFC, 0x01, 0xFC, 0x0F, 0xE0, 0x07, 0xF0,
|
||||
0x3F, 0x80, 0x1F, 0xC0, 0xFE, 0x00, 0x3F, 0x03, 0xF0, 0x00, 0xFE, 0x07,
|
||||
0xF3, 0xF0, 0x7E, 0x3F, 0x0F, 0xC1, 0xF8, 0xF8, 0x0F, 0x9F, 0x80, 0xFF,
|
||||
0xF0, 0x07, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFC, 0x00, 0x3F, 0xC0, 0x03,
|
||||
0xFE, 0x00, 0x7F, 0xE0, 0x0F, 0xFF, 0x00, 0xFD, 0xF8, 0x1F, 0x9F, 0x83,
|
||||
0xF0, 0xFC, 0x3F, 0x07, 0xE7, 0xE0, 0x7E, 0xFC, 0x03, 0xF0, 0xFC, 0x03,
|
||||
0xF7, 0xC0, 0x3E, 0x7E, 0x03, 0xE7, 0xE0, 0x7E, 0x3E, 0x07, 0xC3, 0xF0,
|
||||
0x7C, 0x1F, 0x0F, 0xC1, 0xF0, 0xF8, 0x1F, 0x0F, 0x80, 0xF9, 0xF0, 0x0F,
|
||||
0x9F, 0x00, 0x79, 0xF0, 0x07, 0xDE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00,
|
||||
0x3F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x80,
|
||||
0x01, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x07, 0xFE, 0x00, 0x7F, 0xC0,
|
||||
0x07, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0xFE, 0xFF, 0xFD, 0xFF, 0xFB,
|
||||
0xFF, 0xF0, 0x0F, 0xC0, 0x1F, 0x00, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x0F,
|
||||
0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x80, 0x7F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xE0, 0xFC, 0x3F, 0x87, 0xF0,
|
||||
0xF8, 0x1F, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x81, 0xF1,
|
||||
0xFE, 0x3F, 0x07, 0xC0, 0xFE, 0x0F, 0xE0, 0x7C, 0x07, 0x80, 0xF0, 0x1E,
|
||||
0x03, 0xC0, 0x78, 0x0F, 0x01, 0xF0, 0x3F, 0x07, 0xF0, 0x7E, 0x07, 0xC0,
|
||||
0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0x0F, 0xE0, 0xFF, 0x0F,
|
||||
0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01,
|
||||
0xF0, 0x0F, 0x80, 0xFF, 0x07, 0xF0, 0x3F, 0x0F, 0xF0, 0xFE, 0x1F, 0x81,
|
||||
0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x3F, 0x0F,
|
||||
0xF0, 0xFE, 0x0F, 0xC0, 0x80, 0x00, 0x7F, 0x00, 0xFF, 0xF1, 0xFF, 0xFF,
|
||||
0xFD, 0xFF, 0xF8, 0x0F, 0xF4, 0x00, 0x00 };
|
||||
|
||||
const GFXglyph NotoSans_Bold18pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 9, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 6, 25, 10, 2, -24 }, // 0x21 '!'
|
||||
{ 20, 13, 9, 17, 2, -24 }, // 0x22 '"'
|
||||
{ 35, 21, 25, 23, 1, -24 }, // 0x23 '#'
|
||||
{ 101, 17, 29, 20, 2, -26 }, // 0x24 '$'
|
||||
{ 163, 30, 26, 32, 1, -25 }, // 0x25 '%'
|
||||
{ 261, 25, 26, 26, 1, -25 }, // 0x26 '&'
|
||||
{ 343, 5, 9, 9, 2, -24 }, // 0x27 '''
|
||||
{ 349, 10, 31, 12, 1, -24 }, // 0x28 '('
|
||||
{ 388, 10, 31, 12, 1, -24 }, // 0x29 ')'
|
||||
{ 427, 17, 17, 19, 1, -26 }, // 0x2A '*'
|
||||
{ 464, 17, 17, 20, 2, -20 }, // 0x2B '+'
|
||||
{ 501, 7, 9, 10, 1, -3 }, // 0x2C ','
|
||||
{ 509, 9, 5, 11, 1, -11 }, // 0x2D '-'
|
||||
{ 515, 6, 5, 10, 2, -4 }, // 0x2E '.'
|
||||
{ 519, 14, 25, 15, 0, -24 }, // 0x2F '/'
|
||||
{ 563, 18, 26, 20, 1, -25 }, // 0x30 '0'
|
||||
{ 622, 13, 25, 20, 2, -24 }, // 0x31 '1'
|
||||
{ 663, 18, 26, 20, 1, -25 }, // 0x32 '2'
|
||||
{ 722, 18, 26, 20, 1, -25 }, // 0x33 '3'
|
||||
{ 781, 19, 25, 20, 1, -24 }, // 0x34 '4'
|
||||
{ 841, 17, 25, 20, 2, -24 }, // 0x35 '5'
|
||||
{ 895, 18, 25, 20, 1, -24 }, // 0x36 '6'
|
||||
{ 952, 18, 25, 20, 1, -24 }, // 0x37 '7'
|
||||
{ 1009, 18, 25, 20, 1, -24 }, // 0x38 '8'
|
||||
{ 1066, 18, 25, 20, 1, -24 }, // 0x39 '9'
|
||||
{ 1123, 6, 20, 10, 2, -19 }, // 0x3A ':'
|
||||
{ 1138, 7, 25, 10, 1, -19 }, // 0x3B ';'
|
||||
{ 1160, 17, 19, 20, 2, -21 }, // 0x3C '<'
|
||||
{ 1201, 17, 11, 20, 2, -17 }, // 0x3D '='
|
||||
{ 1225, 17, 19, 20, 2, -21 }, // 0x3E '>'
|
||||
{ 1266, 16, 26, 17, 0, -25 }, // 0x3F '?'
|
||||
{ 1318, 28, 28, 32, 2, -24 }, // 0x40 '@'
|
||||
{ 1416, 24, 25, 24, 0, -24 }, // 0x41 'A'
|
||||
{ 1491, 19, 25, 23, 3, -24 }, // 0x42 'B'
|
||||
{ 1551, 20, 26, 23, 2, -25 }, // 0x43 'C'
|
||||
{ 1616, 21, 25, 26, 3, -24 }, // 0x44 'D'
|
||||
{ 1682, 15, 25, 20, 3, -24 }, // 0x45 'E'
|
||||
{ 1729, 15, 25, 19, 3, -24 }, // 0x46 'F'
|
||||
{ 1776, 21, 26, 26, 2, -25 }, // 0x47 'G'
|
||||
{ 1845, 21, 25, 27, 3, -24 }, // 0x48 'H'
|
||||
{ 1911, 12, 25, 14, 1, -24 }, // 0x49 'I'
|
||||
{ 1949, 12, 32, 12, -3, -24 }, // 0x4A 'J'
|
||||
{ 1997, 20, 25, 23, 3, -24 }, // 0x4B 'K'
|
||||
{ 2060, 16, 25, 20, 3, -24 }, // 0x4C 'L'
|
||||
{ 2110, 27, 25, 33, 3, -24 }, // 0x4D 'M'
|
||||
{ 2195, 22, 25, 29, 3, -24 }, // 0x4E 'N'
|
||||
{ 2264, 24, 26, 28, 2, -25 }, // 0x4F 'O'
|
||||
{ 2342, 17, 25, 22, 3, -24 }, // 0x50 'P'
|
||||
{ 2396, 24, 32, 28, 2, -25 }, // 0x51 'Q'
|
||||
{ 2492, 20, 25, 23, 3, -24 }, // 0x52 'R'
|
||||
{ 2555, 16, 26, 19, 2, -25 }, // 0x53 'S'
|
||||
{ 2607, 19, 25, 20, 1, -24 }, // 0x54 'T'
|
||||
{ 2667, 21, 25, 27, 3, -24 }, // 0x55 'U'
|
||||
{ 2733, 23, 25, 23, 0, -24 }, // 0x56 'V'
|
||||
{ 2805, 34, 25, 34, 0, -24 }, // 0x57 'W'
|
||||
{ 2912, 23, 25, 24, 0, -24 }, // 0x58 'X'
|
||||
{ 2984, 22, 25, 22, 0, -24 }, // 0x59 'Y'
|
||||
{ 3053, 19, 25, 20, 1, -24 }, // 0x5A 'Z'
|
||||
{ 3113, 9, 31, 12, 2, -24 }, // 0x5B '['
|
||||
{ 3148, 14, 25, 15, 0, -24 }, // 0x5C '\'
|
||||
{ 3192, 8, 31, 12, 1, -24 }, // 0x5D ']'
|
||||
{ 3223, 18, 16, 20, 1, -24 }, // 0x5E '^'
|
||||
{ 3259, 15, 3, 14, 0, 4 }, // 0x5F '_'
|
||||
{ 3265, 10, 6, 13, 1, -26 }, // 0x60 '`'
|
||||
{ 3273, 18, 20, 21, 1, -19 }, // 0x61 'a'
|
||||
{ 3318, 18, 27, 22, 3, -26 }, // 0x62 'b'
|
||||
{ 3379, 15, 20, 18, 2, -19 }, // 0x63 'c'
|
||||
{ 3417, 18, 27, 22, 2, -26 }, // 0x64 'd'
|
||||
{ 3478, 17, 20, 21, 2, -19 }, // 0x65 'e'
|
||||
{ 3521, 14, 27, 14, 1, -26 }, // 0x66 'f'
|
||||
{ 3569, 18, 28, 22, 2, -19 }, // 0x67 'g'
|
||||
{ 3632, 17, 27, 23, 3, -26 }, // 0x68 'h'
|
||||
{ 3690, 6, 27, 11, 2, -26 }, // 0x69 'i'
|
||||
{ 3711, 10, 35, 11, -2, -26 }, // 0x6A 'j'
|
||||
{ 3755, 19, 27, 22, 3, -26 }, // 0x6B 'k'
|
||||
{ 3820, 5, 27, 11, 3, -26 }, // 0x6C 'l'
|
||||
{ 3837, 29, 20, 34, 3, -19 }, // 0x6D 'm'
|
||||
{ 3910, 17, 20, 23, 3, -19 }, // 0x6E 'n'
|
||||
{ 3953, 18, 20, 22, 2, -19 }, // 0x6F 'o'
|
||||
{ 3998, 18, 28, 22, 3, -19 }, // 0x70 'p'
|
||||
{ 4061, 18, 28, 22, 2, -19 }, // 0x71 'q'
|
||||
{ 4124, 12, 20, 16, 3, -19 }, // 0x72 'r'
|
||||
{ 4154, 14, 20, 18, 2, -19 }, // 0x73 's'
|
||||
{ 4189, 13, 23, 15, 1, -22 }, // 0x74 't'
|
||||
{ 4227, 18, 19, 23, 2, -18 }, // 0x75 'u'
|
||||
{ 4270, 20, 19, 20, 0, -18 }, // 0x76 'v'
|
||||
{ 4318, 30, 19, 30, 0, -18 }, // 0x77 'w'
|
||||
{ 4390, 20, 19, 20, 0, -18 }, // 0x78 'x'
|
||||
{ 4438, 20, 27, 20, 0, -18 }, // 0x79 'y'
|
||||
{ 4506, 15, 19, 17, 1, -18 }, // 0x7A 'z'
|
||||
{ 4542, 11, 31, 14, 1, -24 }, // 0x7B '{'
|
||||
{ 4585, 4, 35, 19, 8, -26 }, // 0x7C '|'
|
||||
{ 4603, 12, 31, 14, 1, -24 }, // 0x7D '}'
|
||||
{ 4650, 17, 6, 20, 2, -14 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Bold18pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Bold18pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Bold18pt7bGlyphs,
|
||||
0x20, 0x7E, 48 };
|
||||
|
||||
// Approx. 5335 bytes
|
||||
|
||||
#endif // NOTOSANSBOLD18PT7B_H
|
||||
@@ -1,801 +0,0 @@
|
||||
#ifndef NOTOSANSBOLD24PT7B_H
|
||||
#define NOTOSANSBOLD24PT7B_H
|
||||
const uint8_t NotoSans_Bold24pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
|
||||
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x7C, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x10,
|
||||
0xFE, 0x3F, 0xFF, 0x1F, 0xFF, 0x0F, 0xDF, 0x87, 0xEF, 0xC3, 0xF7, 0xE1,
|
||||
0xFB, 0xF0, 0xFD, 0xF8, 0x7E, 0xFC, 0x1F, 0x3E, 0x0F, 0x9F, 0x07, 0xCF,
|
||||
0x83, 0xE7, 0xC1, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x03, 0xE1, 0xF0, 0x00,
|
||||
0x3E, 0x1F, 0x00, 0x03, 0xE1, 0xF0, 0x00, 0x7C, 0x1F, 0x00, 0x07, 0xC1,
|
||||
0xF0, 0x00, 0x7C, 0x1E, 0x00, 0x07, 0xC3, 0xE0, 0x00, 0x7C, 0x3E, 0x00,
|
||||
0x0F, 0x83, 0xE0, 0x3F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF,
|
||||
0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF0, 0x1F, 0x07, 0xC0,
|
||||
0x01, 0xF0, 0x7C, 0x00, 0x1F, 0x0F, 0x80, 0x01, 0xF0, 0xF8, 0x00, 0x3E,
|
||||
0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
0xEF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xE0, 0x7C, 0x1F, 0x00, 0x07,
|
||||
0xC1, 0xF0, 0x00, 0x7C, 0x3E, 0x00, 0x07, 0xC3, 0xE0, 0x00, 0x7C, 0x3E,
|
||||
0x00, 0x0F, 0x83, 0xE0, 0x00, 0xF8, 0x3E, 0x00, 0x0F, 0x87, 0xC0, 0x00,
|
||||
0xF8, 0x7C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00,
|
||||
0x01, 0xC0, 0x00, 0x3F, 0xFE, 0x01, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F,
|
||||
0xFF, 0xFE, 0x7F, 0xFF, 0xF9, 0xFF, 0xF7, 0xF3, 0xFC, 0xE0, 0xE7, 0xF1,
|
||||
0xC0, 0x0F, 0xE3, 0x80, 0x1F, 0xE7, 0x00, 0x3F, 0xEE, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF,
|
||||
0x80, 0x1F, 0xFF, 0x80, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x1D, 0xFF,
|
||||
0x00, 0x38, 0xFE, 0x00, 0x71, 0xFE, 0x00, 0xE3, 0xFF, 0x81, 0xCF, 0xFF,
|
||||
0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFE, 0x7F, 0xFF, 0xF8, 0x7F,
|
||||
0xFF, 0xE0, 0x1F, 0xFE, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03,
|
||||
0x80, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x1F,
|
||||
0x00, 0x0F, 0xF8, 0x00, 0x3F, 0x00, 0x1F, 0xFC, 0x00, 0x7E, 0x00, 0x3F,
|
||||
0xFE, 0x00, 0x7E, 0x00, 0x7F, 0xFE, 0x00, 0xFC, 0x00, 0x7E, 0x3F, 0x00,
|
||||
0xF8, 0x00, 0x7C, 0x3F, 0x01, 0xF8, 0x00, 0x7C, 0x1F, 0x01, 0xF0, 0x00,
|
||||
0xFC, 0x1F, 0x03, 0xF0, 0x00, 0xFC, 0x1F, 0x03, 0xE0, 0x00, 0xFC, 0x1F,
|
||||
0x07, 0xE0, 0x00, 0xFC, 0x1F, 0x0F, 0xC0, 0x00, 0xFC, 0x1F, 0x0F, 0xC0,
|
||||
0x00, 0x7C, 0x1F, 0x1F, 0x83, 0xC0, 0x7C, 0x3F, 0x1F, 0x0F, 0xF0, 0x7E,
|
||||
0x3F, 0x3F, 0x3F, 0xF8, 0x7F, 0xFE, 0x3E, 0x3F, 0xFC, 0x3F, 0xFE, 0x7E,
|
||||
0x7F, 0xFE, 0x1F, 0xFC, 0x7C, 0x7E, 0x7E, 0x0F, 0xF8, 0xFC, 0xFC, 0x3E,
|
||||
0x07, 0xF0, 0xF8, 0xFC, 0x3F, 0x00, 0x01, 0xF8, 0xFC, 0x3F, 0x00, 0x03,
|
||||
0xF0, 0xFC, 0x3F, 0x00, 0x03, 0xE0, 0xFC, 0x3F, 0x00, 0x07, 0xE0, 0xFC,
|
||||
0x3F, 0x00, 0x07, 0xC0, 0xFC, 0x3F, 0x00, 0x0F, 0xC0, 0xFC, 0x3F, 0x00,
|
||||
0x0F, 0x80, 0xFC, 0x3F, 0x00, 0x1F, 0x80, 0x7C, 0x3E, 0x00, 0x1F, 0x00,
|
||||
0x7E, 0x7E, 0x00, 0x3F, 0x00, 0x7F, 0xFE, 0x00, 0x7E, 0x00, 0x3F, 0xFC,
|
||||
0x00, 0x7C, 0x00, 0x1F, 0xF8, 0x00, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x01, 0xFF,
|
||||
0xFF, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x7F,
|
||||
0x07, 0xF0, 0x00, 0x3F, 0x03, 0xF8, 0x00, 0x1F, 0x81, 0xFC, 0x00, 0x0F,
|
||||
0xC0, 0xFE, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x03, 0xF8, 0xFF, 0x00, 0x00,
|
||||
0xFE, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00,
|
||||
0x07, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0xFF, 0x0F, 0xFF, 0x80, 0x7F,
|
||||
0x0F, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xF8, 0x3F, 0xC7, 0xF9, 0xFE, 0x1F,
|
||||
0xC7, 0xF8, 0x7F, 0x8F, 0xE3, 0xFC, 0x1F, 0xEF, 0xE1, 0xFC, 0x07, 0xFF,
|
||||
0xF0, 0xFE, 0x01, 0xFF, 0xF0, 0x7F, 0x00, 0x7F, 0xF8, 0x3F, 0xC0, 0x1F,
|
||||
0xF8, 0x1F, 0xF0, 0x0F, 0xFC, 0x07, 0xFF, 0x7F, 0xFF, 0x03, 0xFF, 0xFF,
|
||||
0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF,
|
||||
0xF1, 0xFF, 0x01, 0xFF, 0xE0, 0x7F, 0xC0, 0xFF, 0xFF, 0xF7, 0xEF, 0xDF,
|
||||
0xBF, 0x7E, 0xFC, 0xF9, 0xF3, 0xE7, 0xC0, 0x01, 0xF8, 0x1F, 0x81, 0xF8,
|
||||
0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0x7E, 0x07, 0xF0, 0x3F, 0x01, 0xF8, 0x1F,
|
||||
0xC0, 0xFC, 0x07, 0xE0, 0x3F, 0x03, 0xF8, 0x1F, 0x80, 0xFC, 0x07, 0xE0,
|
||||
0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07,
|
||||
0xE0, 0x3F, 0x01, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xE0, 0x3F,
|
||||
0x01, 0xF8, 0x0F, 0xE0, 0x3F, 0x01, 0xFC, 0x07, 0xE0, 0x1F, 0x80, 0xFC,
|
||||
0x03, 0xF0, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x7E, 0x01, 0xF8, 0x0F, 0xE0,
|
||||
0x3F, 0x01, 0xF8, 0x07, 0xE0, 0x3F, 0x01, 0xFC, 0x07, 0xE0, 0x3F, 0x01,
|
||||
0xF8, 0x0F, 0xC0, 0x7F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F,
|
||||
0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x07, 0xE0,
|
||||
0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0xFE, 0x07, 0xE0, 0x3F, 0x03, 0xF0, 0x1F,
|
||||
0x81, 0xF8, 0x0F, 0xC0, 0xFC, 0x07, 0xE0, 0xFE, 0x00, 0x00, 0x7E, 0x00,
|
||||
0x00, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00,
|
||||
0x0F, 0x80, 0x10, 0x1F, 0x00, 0xBC, 0x3E, 0x1E, 0x7F, 0xBD, 0xFE, 0xFF,
|
||||
0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFE, 0x00, 0x1F,
|
||||
0xE0, 0x00, 0x7F, 0xE0, 0x01, 0xF7, 0xC0, 0x07, 0xEF, 0xC0, 0x0F, 0xCF,
|
||||
0xC0, 0x3F, 0x1F, 0xC0, 0xFE, 0x1F, 0x80, 0x78, 0x3E, 0x00, 0x30, 0x30,
|
||||
0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0,
|
||||
0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00,
|
||||
0x00, 0x7C, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07,
|
||||
0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x1F, 0xCF, 0xE3, 0xF8,
|
||||
0xFC, 0x3F, 0x0F, 0xC7, 0xE1, 0xF8, 0x7E, 0x1F, 0x0F, 0xC0, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C, 0xFE, 0xFF, 0xFF,
|
||||
0xFF, 0xFE, 0xFE, 0x10, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00,
|
||||
0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00,
|
||||
0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01,
|
||||
0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x7F, 0x00, 0x0F,
|
||||
0xE0, 0x01, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x7F,
|
||||
0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x03, 0xF8,
|
||||
0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x03, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xC0,
|
||||
0x00, 0x01, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x3F, 0xFF, 0x80, 0xFF, 0xFF,
|
||||
0x83, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x1F, 0xE0, 0xFE, 0x3F, 0x80, 0xFE,
|
||||
0x7F, 0x01, 0xFD, 0xFC, 0x03, 0xFB, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF,
|
||||
0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xE0,
|
||||
0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0xFE, 0x01,
|
||||
0xFE, 0xFE, 0x03, 0xF9, 0xFC, 0x07, 0xF3, 0xFC, 0x1F, 0xE3, 0xFC, 0x7F,
|
||||
0x87, 0xFF, 0xFF, 0x07, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0xC0,
|
||||
0x07, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x7F, 0x00, 0xFF, 0x01, 0xFF, 0x07,
|
||||
0xFF, 0x0F, 0xFF, 0x1F, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7E,
|
||||
0x7F, 0x38, 0x7F, 0x10, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00,
|
||||
0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00,
|
||||
0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00,
|
||||
0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x7F, 0x01,
|
||||
0xFF, 0x00, 0x1F, 0xFF, 0x80, 0x7F, 0xFF, 0x83, 0xFF, 0xFF, 0x8F, 0xFF,
|
||||
0xFF, 0x9F, 0xFF, 0xFF, 0x9F, 0xC0, 0xFF, 0x1E, 0x00, 0xFE, 0x18, 0x01,
|
||||
0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F,
|
||||
0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0,
|
||||
0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFC, 0x03, 0xFE, 0x00, 0x3F, 0xFF, 0x81, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF,
|
||||
0xC7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0x8F, 0x00, 0xFF, 0x08, 0x00, 0xFE,
|
||||
0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xC0,
|
||||
0x00, 0x3F, 0x80, 0x01, 0xFE, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x07,
|
||||
0xFE, 0x00, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x00,
|
||||
0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00,
|
||||
0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x1F, 0xEF, 0xC0, 0xFF,
|
||||
0xDF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFE, 0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xC0,
|
||||
0x7F, 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFE,
|
||||
0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0xFF,
|
||||
0xE0, 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0xFC, 0x00, 0x3E,
|
||||
0xFE, 0x00, 0x3F, 0x7F, 0x00, 0x3F, 0x3F, 0x80, 0x1F, 0x1F, 0xC0, 0x1F,
|
||||
0x8F, 0xE0, 0x1F, 0x87, 0xF0, 0x0F, 0x83, 0xF8, 0x0F, 0xC1, 0xFC, 0x0F,
|
||||
0xC0, 0xFE, 0x07, 0xC0, 0x7F, 0x07, 0xE0, 0x3F, 0x87, 0xE0, 0x1F, 0xC3,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F,
|
||||
0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01,
|
||||
0xFC, 0x00, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF,
|
||||
0xFF, 0x83, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xC0, 0x00, 0x1F, 0x80,
|
||||
0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8,
|
||||
0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF8, 0x78, 0x7F, 0xF0, 0x00, 0x1F, 0xE0,
|
||||
0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00,
|
||||
0x01, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF7, 0x00, 0x1F, 0xEF, 0xE1,
|
||||
0xFF, 0xDF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFC, 0x7F, 0xFF, 0xF0, 0xFF, 0xFF,
|
||||
0xC0, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xF0, 0x07, 0xFF,
|
||||
0xE0, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x07, 0xF8, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03,
|
||||
0xF0, 0x00, 0x0F, 0xE1, 0xF8, 0x1F, 0x8F, 0xFC, 0x3F, 0x3F, 0xFC, 0x7E,
|
||||
0xFF, 0xFC, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFB, 0xFE, 0x07, 0xFF, 0xF8,
|
||||
0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFD, 0xFC, 0x03, 0xFB, 0xFC, 0x0F,
|
||||
0xF3, 0xFC, 0x7F, 0xC7, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x07, 0xFF, 0xF8,
|
||||
0x07, 0xFF, 0xE0, 0x03, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC,
|
||||
0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8,
|
||||
0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x80,
|
||||
0x00, 0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xFC, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x0F, 0xFF, 0x80, 0x7F, 0xFF, 0xC1, 0xFF, 0xFF, 0xC3,
|
||||
0xFF, 0xFF, 0x8F, 0xF8, 0xFF, 0x9F, 0xC0, 0x7F, 0x3F, 0x80, 0xFE, 0x7E,
|
||||
0x01, 0xFC, 0xFC, 0x03, 0xF9, 0xFC, 0x07, 0xF3, 0xFC, 0x1F, 0xC3, 0xFC,
|
||||
0x7F, 0x83, 0xFF, 0xFE, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x03, 0xFF,
|
||||
0x80, 0x1F, 0xFF, 0x80, 0x7F, 0xFF, 0xC1, 0xFF, 0xFF, 0xC7, 0xF8, 0x7F,
|
||||
0xCF, 0xE0, 0x7F, 0xBF, 0x80, 0x3F, 0xFE, 0x00, 0x7F, 0xFC, 0x00, 0x7F,
|
||||
0xF8, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xF0, 0x1F, 0xEF,
|
||||
0xFF, 0xFF, 0x9F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFC, 0x1F, 0xFF, 0xE0, 0x0F,
|
||||
0xFF, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x1F,
|
||||
0xFF, 0xF0, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x7F, 0x81, 0xFE, 0x7F,
|
||||
0x00, 0xFE, 0x7F, 0x00, 0xFE, 0x7F, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x7F, 0x7E, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x00, 0xFF, 0x7F,
|
||||
0x80, 0xFF, 0x7F, 0xC3, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xBF, 0x1F,
|
||||
0xFF, 0xBF, 0x0F, 0xFF, 0x7F, 0x03, 0xFC, 0x7F, 0x00, 0x00, 0x7E, 0x00,
|
||||
0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00,
|
||||
0x03, 0xF8, 0x20, 0x1F, 0xF8, 0x1F, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x1F,
|
||||
0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0x1F, 0xFC, 0x00, 0x7C, 0xFE, 0xFF, 0xFF,
|
||||
0xFF, 0xFE, 0xFE, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x7C, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x10, 0x1F,
|
||||
0x0F, 0xE3, 0xFC, 0xFF, 0x3F, 0xCF, 0xE1, 0xF8, 0x38, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x07, 0xF3, 0xF8, 0xFE, 0x3F, 0x0F, 0xC3, 0xF1, 0xF8, 0x7E, 0x1F,
|
||||
0x87, 0xC3, 0xF0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x3C, 0x00, 0x01, 0xF8,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x80, 0x1F, 0xFC, 0x00,
|
||||
0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0x80, 0x07, 0xFC,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFF,
|
||||
0x00, 0x07, 0xFF, 0x80, 0x03, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x7F,
|
||||
0xF0, 0x00, 0x3F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x03,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xF0,
|
||||
0x00, 0x07, 0xF8, 0x00, 0x0F, 0xFC, 0x00, 0x0F, 0xFE, 0x00, 0x07, 0xFF,
|
||||
0x00, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x3F,
|
||||
0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0xC0, 0x07, 0xFF,
|
||||
0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xC0, 0x3F, 0xFE, 0x01, 0xFF, 0xE0, 0x07,
|
||||
0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0x3C, 0x00, 0x00, 0x60,
|
||||
0x00, 0x00, 0x03, 0xFE, 0x00, 0xFF, 0xFE, 0x1F, 0xFF, 0xF9, 0xFF, 0xFF,
|
||||
0xE7, 0xFF, 0xFF, 0x9F, 0xFF, 0xFC, 0xF0, 0x0F, 0xE6, 0x00, 0x7F, 0x00,
|
||||
0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x7F,
|
||||
0x00, 0x07, 0xF8, 0x00, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0xFF, 0x80, 0x0F,
|
||||
0xF0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xF8, 0x00,
|
||||
0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x03, 0xE0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0x7F, 0x80, 0x03, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xC0,
|
||||
0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xF0,
|
||||
0x00, 0xFF, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x03, 0xF8, 0x00, 0x01, 0xF8,
|
||||
0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x7E, 0x03, 0xFF, 0x07, 0xE3, 0xF0, 0x3F,
|
||||
0xFF, 0x0F, 0x8F, 0x81, 0xFF, 0xFC, 0x3E, 0x3E, 0x0F, 0xFF, 0xF0, 0xFD,
|
||||
0xF8, 0x7F, 0x07, 0xC1, 0xF7, 0xC3, 0xF8, 0x1F, 0x07, 0xDF, 0x0F, 0xC0,
|
||||
0x7C, 0x1F, 0xFC, 0x3E, 0x01, 0xF0, 0x7F, 0xF0, 0xF8, 0x07, 0xC1, 0xFF,
|
||||
0x87, 0xE0, 0x1F, 0x07, 0xFE, 0x1F, 0x80, 0xFC, 0x1F, 0xF8, 0x7E, 0x03,
|
||||
0xF0, 0x7F, 0xE0, 0xF8, 0x0F, 0xC3, 0xEF, 0x83, 0xE0, 0x3F, 0x0F, 0xBF,
|
||||
0x0F, 0xC1, 0xFC, 0x7E, 0x7C, 0x3F, 0xDF, 0xFB, 0xF1, 0xF0, 0x7F, 0xFF,
|
||||
0xFF, 0x87, 0xC0, 0xFF, 0xE7, 0xFE, 0x1F, 0x81, 0xFF, 0x0F, 0xF0, 0x3F,
|
||||
0x01, 0xF0, 0x0E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x01, 0x00, 0x0F, 0xF8, 0x00, 0x7C, 0x00, 0x1F,
|
||||
0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00,
|
||||
0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00,
|
||||
0x03, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00,
|
||||
0x00, 0xFF, 0xF8, 0x00, 0x00, 0xFE, 0xFC, 0x00, 0x00, 0x7F, 0x7F, 0x00,
|
||||
0x00, 0x3F, 0x3F, 0x80, 0x00, 0x3F, 0x8F, 0xC0, 0x00, 0x1F, 0xC7, 0xF0,
|
||||
0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x0F, 0xE1, 0xFC, 0x00, 0x07, 0xF0, 0x7F,
|
||||
0x00, 0x07, 0xF8, 0x3F, 0x80, 0x03, 0xF8, 0x1F, 0xC0, 0x01, 0xFC, 0x07,
|
||||
0xF0, 0x01, 0xFE, 0x03, 0xF8, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x7F, 0xFF,
|
||||
0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF,
|
||||
0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFE, 0x07, 0xF0,
|
||||
0x00, 0xFF, 0x07, 0xF8, 0x00, 0x3F, 0x83, 0xFC, 0x00, 0x1F, 0xE1, 0xFC,
|
||||
0x00, 0x0F, 0xF1, 0xFE, 0x00, 0x03, 0xF8, 0xFF, 0x00, 0x01, 0xFE, 0x7F,
|
||||
0x00, 0x00, 0xFF, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0xFF, 0xF0, 0x00, 0x7F,
|
||||
0xFF, 0xF0, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xE7,
|
||||
0xFF, 0xFF, 0xF3, 0xF8, 0x0F, 0xFD, 0xFC, 0x01, 0xFE, 0xFE, 0x00, 0xFF,
|
||||
0x7F, 0x00, 0x3F, 0xBF, 0x80, 0x1F, 0xDF, 0xC0, 0x1F, 0xEF, 0xE0, 0x0F,
|
||||
0xE7, 0xF0, 0x1F, 0xF3, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF,
|
||||
0xE0, 0x7F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x9F, 0xC0, 0x7F, 0xEF, 0xE0,
|
||||
0x0F, 0xF7, 0xF0, 0x03, 0xFF, 0xF8, 0x01, 0xFF, 0xFC, 0x00, 0xFF, 0xFE,
|
||||
0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFF, 0x80, 0x1F, 0xFF, 0xC0, 0x1F, 0xEF,
|
||||
0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF8,
|
||||
0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x3F,
|
||||
0xFF, 0xC0, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0x87,
|
||||
0xFF, 0xFF, 0xC3, 0xFF, 0x80, 0xF0, 0xFF, 0x80, 0x0C, 0x7F, 0xC0, 0x00,
|
||||
0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x00,
|
||||
0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00,
|
||||
0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF,
|
||||
0xC0, 0x0C, 0x3F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0,
|
||||
0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0xFF, 0xF0,
|
||||
0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0,
|
||||
0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0xFF, 0x8F, 0xE0,
|
||||
0x0F, 0xFC, 0xFE, 0x00, 0x3F, 0xCF, 0xE0, 0x03, 0xFE, 0xFE, 0x00, 0x1F,
|
||||
0xEF, 0xE0, 0x01, 0xFE, 0xFE, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0xFF, 0xFE,
|
||||
0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00,
|
||||
0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF,
|
||||
0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x1F, 0xEF, 0xE0, 0x01, 0xFE, 0xFE, 0x00,
|
||||
0x3F, 0xEF, 0xE0, 0x03, 0xFC, 0xFE, 0x00, 0xFF, 0xCF, 0xE0, 0x3F, 0xF8,
|
||||
0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF,
|
||||
0xFF, 0x80, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0xFF, 0xEF, 0xFF,
|
||||
0xFE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xEF, 0xE0, 0x00, 0xFE,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x0F,
|
||||
0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00,
|
||||
0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFC, 0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03,
|
||||
0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07,
|
||||
0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x0F,
|
||||
0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFC,
|
||||
0x3F, 0xFF, 0xFF, 0x87, 0xFF, 0x00, 0xE1, 0xFF, 0x80, 0x04, 0x3F, 0xC0,
|
||||
0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F,
|
||||
0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x1F,
|
||||
0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF,
|
||||
0x01, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xC0, 0x03,
|
||||
0xFF, 0xF8, 0x00, 0x7F, 0x7F, 0x80, 0x0F, 0xEF, 0xF0, 0x01, 0xFD, 0xFF,
|
||||
0x00, 0x3F, 0x9F, 0xF0, 0x07, 0xF1, 0xFF, 0xE7, 0xFE, 0x3F, 0xFF, 0xFF,
|
||||
0xC3, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x0F,
|
||||
0xFF, 0xE0, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07,
|
||||
0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00,
|
||||
0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF,
|
||||
0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0,
|
||||
0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07,
|
||||
0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE,
|
||||
0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00,
|
||||
0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x1F,
|
||||
0xFC, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07,
|
||||
0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07,
|
||||
0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07,
|
||||
0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xF8, 0x7F,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFC, 0x07,
|
||||
0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01,
|
||||
0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0,
|
||||
0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0,
|
||||
0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC,
|
||||
0x07, 0xF0, 0x1F, 0xC0, 0x7F, 0x01, 0xFC, 0x07, 0xF0, 0x1F, 0xC0, 0x7F,
|
||||
0x03, 0xFE, 0x1F, 0xFF, 0xFF, 0xBF, 0xFE, 0xFF, 0xF3, 0xFF, 0x8F, 0xFC,
|
||||
0x3F, 0x80, 0xFE, 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xFB, 0xF8, 0x00, 0xFF,
|
||||
0x7F, 0x00, 0x3F, 0xCF, 0xE0, 0x0F, 0xF1, 0xFC, 0x03, 0xFC, 0x3F, 0x80,
|
||||
0xFF, 0x07, 0xF0, 0x1F, 0xE0, 0xFE, 0x07, 0xF8, 0x1F, 0xC1, 0xFE, 0x03,
|
||||
0xF8, 0x7F, 0x80, 0x7F, 0x1F, 0xE0, 0x0F, 0xE3, 0xFC, 0x01, 0xFC, 0xFF,
|
||||
0x00, 0x3F, 0xBF, 0xC0, 0x07, 0xF7, 0xF8, 0x00, 0xFF, 0xFF, 0x00, 0x1F,
|
||||
0xFF, 0xF0, 0x03, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xE0, 0x0F, 0xF9, 0xFE,
|
||||
0x01, 0xFE, 0x3F, 0xC0, 0x3F, 0x83, 0xFC, 0x07, 0xF0, 0x3F, 0xC0, 0xFE,
|
||||
0x07, 0xF8, 0x1F, 0xC0, 0x7F, 0x83, 0xF8, 0x0F, 0xF0, 0x7F, 0x00, 0xFF,
|
||||
0x0F, 0xE0, 0x0F, 0xF1, 0xFC, 0x01, 0xFE, 0x3F, 0x80, 0x1F, 0xE7, 0xF0,
|
||||
0x01, 0xFE, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x03, 0xFC, 0xFE, 0x00, 0x07,
|
||||
0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F,
|
||||
0x80, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00,
|
||||
0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC,
|
||||
0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00,
|
||||
0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xC0, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF,
|
||||
0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00,
|
||||
0x7F, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x0F, 0xFF, 0xFD, 0xF0, 0x00, 0xFB, 0xFF, 0xDF, 0x80, 0x1F, 0xBF,
|
||||
0xFD, 0xF8, 0x01, 0xFB, 0xFF, 0xCF, 0x80, 0x1F, 0x3F, 0xFC, 0xFC, 0x03,
|
||||
0xF3, 0xFF, 0xCF, 0xC0, 0x3F, 0x3F, 0xFC, 0xFC, 0x03, 0xE3, 0xFF, 0xE7,
|
||||
0xE0, 0x7E, 0x7F, 0xFE, 0x7E, 0x07, 0xE7, 0xFF, 0xE7, 0xE0, 0x7C, 0x7F,
|
||||
0xFE, 0x3E, 0x0F, 0xC7, 0xFF, 0xE3, 0xF0, 0xFC, 0x7F, 0xFE, 0x3F, 0x0F,
|
||||
0x87, 0xFF, 0xE1, 0xF1, 0xF8, 0x7F, 0xFE, 0x1F, 0x9F, 0x87, 0xFF, 0xE1,
|
||||
0xF9, 0xF0, 0x7F, 0xFE, 0x1F, 0x9F, 0x07, 0xFF, 0xE0, 0xFF, 0xF0, 0x7F,
|
||||
0xFE, 0x0F, 0xFE, 0x07, 0xFF, 0xE0, 0xFF, 0xE0, 0x7F, 0xFE, 0x07, 0xFE,
|
||||
0x07, 0xFF, 0xE0, 0x7F, 0xC0, 0x7F, 0xFE, 0x07, 0xFC, 0x07, 0xFF, 0xE0,
|
||||
0x3F, 0xC0, 0x7F, 0xFE, 0x03, 0xF8, 0x07, 0xFF, 0xE0, 0x3F, 0x80, 0x7F,
|
||||
0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0xFF,
|
||||
0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF,
|
||||
0x80, 0x0F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0xFF, 0xF7, 0xF0,
|
||||
0x03, 0xFF, 0xDF, 0xE0, 0x0F, 0xFF, 0x3F, 0xC0, 0x3F, 0xFC, 0x7F, 0x00,
|
||||
0xFF, 0xF1, 0xFE, 0x03, 0xFF, 0xC3, 0xF8, 0x0F, 0xFF, 0x0F, 0xF0, 0x3F,
|
||||
0xFE, 0x1F, 0xE0, 0xFF, 0xF8, 0x7F, 0x83, 0xFF, 0xE0, 0xFF, 0x0F, 0xFF,
|
||||
0x81, 0xFC, 0x3F, 0xFE, 0x07, 0xF8, 0xFF, 0xF8, 0x0F, 0xE3, 0xFF, 0xE0,
|
||||
0x3F, 0xCF, 0xFF, 0x80, 0x7F, 0xBF, 0xFE, 0x01, 0xFE, 0xFF, 0xF8, 0x03,
|
||||
0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFE, 0x00, 0x3F,
|
||||
0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF,
|
||||
0xFE, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xF8, 0x00,
|
||||
0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xE0,
|
||||
0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF0, 0x3F, 0xF0, 0x1F, 0xF8,
|
||||
0x3F, 0xC0, 0x07, 0xFC, 0x7F, 0x80, 0x03, 0xFC, 0x7F, 0x80, 0x03, 0xFC,
|
||||
0xFF, 0x00, 0x01, 0xFE, 0xFF, 0x00, 0x01, 0xFE, 0xFF, 0x00, 0x00, 0xFE,
|
||||
0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xFE,
|
||||
0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF,
|
||||
0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0xFE,
|
||||
0xFF, 0x00, 0x01, 0xFE, 0xFF, 0x00, 0x01, 0xFE, 0x7F, 0x80, 0x01, 0xFC,
|
||||
0x7F, 0x80, 0x03, 0xFC, 0x7F, 0xC0, 0x07, 0xFC, 0x3F, 0xE0, 0x0F, 0xF8,
|
||||
0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0,
|
||||
0x07, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFC, 0x00,
|
||||
0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x8F,
|
||||
0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xBF, 0x83, 0xFF, 0x7F, 0x01, 0xFF, 0xFE,
|
||||
0x01, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xE0,
|
||||
0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x80, 0x7F, 0xFF, 0x03, 0xFE, 0xFF, 0xFF,
|
||||
0xFD, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x0F, 0xFF, 0xFC,
|
||||
0x1F, 0xFF, 0xC0, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01,
|
||||
0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F,
|
||||
0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC,
|
||||
0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF,
|
||||
0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF,
|
||||
0xFF, 0xF0, 0x3F, 0xF0, 0x1F, 0xF8, 0x3F, 0xC0, 0x07, 0xFC, 0x7F, 0x80,
|
||||
0x03, 0xFC, 0x7F, 0x80, 0x03, 0xFC, 0xFF, 0x00, 0x01, 0xFE, 0xFF, 0x00,
|
||||
0x01, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00,
|
||||
0x00, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00,
|
||||
0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00,
|
||||
0x00, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x01, 0xFE, 0xFF, 0x00,
|
||||
0x01, 0xFE, 0x7F, 0x80, 0x01, 0xFE, 0x7F, 0x80, 0x03, 0xFC, 0x7F, 0xC0,
|
||||
0x07, 0xFC, 0x3F, 0xE0, 0x0F, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF,
|
||||
0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xC0, 0x01, 0xFF,
|
||||
0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00,
|
||||
0x7F, 0xC0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00,
|
||||
0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00,
|
||||
0x03, 0xFE, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xC0,
|
||||
0x7F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xF8, 0x3F, 0x81,
|
||||
0xFF, 0x87, 0xF0, 0x0F, 0xF0, 0xFE, 0x00, 0xFE, 0x1F, 0xC0, 0x1F, 0xC3,
|
||||
0xF8, 0x03, 0xF8, 0x7F, 0x00, 0x7F, 0x0F, 0xE0, 0x0F, 0xE1, 0xFC, 0x03,
|
||||
0xFC, 0x3F, 0x80, 0xFF, 0x07, 0xF0, 0xFF, 0xE0, 0xFF, 0xFF, 0xF8, 0x1F,
|
||||
0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xE0, 0x0F, 0xFF, 0xFC,
|
||||
0x01, 0xFC, 0x3F, 0xC0, 0x3F, 0x83, 0xF8, 0x07, 0xF0, 0x3F, 0x80, 0xFE,
|
||||
0x07, 0xF8, 0x1F, 0xC0, 0x7F, 0x03, 0xF8, 0x0F, 0xF0, 0x7F, 0x00, 0xFF,
|
||||
0x0F, 0xE0, 0x1F, 0xE1, 0xFC, 0x01, 0xFE, 0x3F, 0x80, 0x1F, 0xE7, 0xF0,
|
||||
0x03, 0xFC, 0xFE, 0x00, 0x3F, 0xDF, 0xC0, 0x07, 0xFC, 0x00, 0xFF, 0x80,
|
||||
0x1F, 0xFF, 0xC0, 0xFF, 0xFF, 0xC7, 0xFF, 0xFE, 0x3F, 0xFF, 0xF9, 0xFF,
|
||||
0xFF, 0xE7, 0xF8, 0x0F, 0x1F, 0xC0, 0x04, 0x7F, 0x00, 0x01, 0xFC, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0xC0, 0x03,
|
||||
0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x80, 0x1F,
|
||||
0xFF, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xF8, 0x00, 0x3F, 0xF0, 0x00, 0x3F,
|
||||
0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xFC, 0x00, 0x1F, 0xFC,
|
||||
0x00, 0xFF, 0xFF, 0x9F, 0xFB, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0x3F, 0xFF,
|
||||
0xF8, 0xFF, 0xFF, 0xC0, 0x7F, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFC, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00,
|
||||
0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00,
|
||||
0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00,
|
||||
0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x07,
|
||||
0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00,
|
||||
0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF,
|
||||
0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00,
|
||||
0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF,
|
||||
0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0,
|
||||
0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F,
|
||||
0xFF, 0xE0, 0x00, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFE,
|
||||
0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFE, 0xFF, 0x00, 0x0F, 0xEF, 0xF0, 0x00,
|
||||
0xFE, 0x7F, 0x80, 0x1F, 0xE7, 0xFC, 0x03, 0xFC, 0x7F, 0xFF, 0xFF, 0xC3,
|
||||
0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xE0, 0x07, 0xFF,
|
||||
0xFC, 0x00, 0x1F, 0xFF, 0x00, 0xFE, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x03,
|
||||
0xF9, 0xFC, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0xE7, 0xF0, 0x00, 0x3F,
|
||||
0x87, 0xF0, 0x00, 0x7F, 0x0F, 0xE0, 0x01, 0xFE, 0x1F, 0xC0, 0x03, 0xF8,
|
||||
0x1F, 0xC0, 0x07, 0xF0, 0x3F, 0x80, 0x1F, 0xC0, 0x7F, 0x00, 0x3F, 0x80,
|
||||
0x7F, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0xFC, 0x01, 0xFC, 0x03, 0xF8, 0x01,
|
||||
0xFC, 0x07, 0xF0, 0x03, 0xF8, 0x0F, 0xC0, 0x07, 0xF0, 0x3F, 0x80, 0x07,
|
||||
0xF0, 0x7F, 0x00, 0x0F, 0xE0, 0xFC, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x1F,
|
||||
0xC7, 0xF0, 0x00, 0x3F, 0x8F, 0xC0, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x7E,
|
||||
0x7F, 0x00, 0x00, 0xFE, 0xFC, 0x00, 0x01, 0xFD, 0xF8, 0x00, 0x01, 0xFF,
|
||||
0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x07, 0xFF,
|
||||
0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0,
|
||||
0x00, 0x00, 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03, 0xFF, 0xF0,
|
||||
0x00, 0xFE, 0x00, 0x1F, 0xDF, 0x80, 0x07, 0xF8, 0x00, 0xFE, 0xFE, 0x00,
|
||||
0x3F, 0xC0, 0x07, 0xF7, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0x3F, 0x80, 0x1F,
|
||||
0xF0, 0x03, 0xF8, 0xFC, 0x00, 0xFF, 0xC0, 0x1F, 0xC7, 0xF0, 0x07, 0xFE,
|
||||
0x00, 0xFE, 0x3F, 0x80, 0x7F, 0xF0, 0x07, 0xE1, 0xFC, 0x03, 0xFF, 0x80,
|
||||
0x7F, 0x07, 0xE0, 0x1F, 0x7E, 0x03, 0xF8, 0x3F, 0x81, 0xFB, 0xF0, 0x1F,
|
||||
0xC1, 0xFC, 0x0F, 0xDF, 0x80, 0xFC, 0x0F, 0xE0, 0x7E, 0x7C, 0x0F, 0xE0,
|
||||
0x3F, 0x03, 0xF3, 0xF0, 0x7F, 0x01, 0xFC, 0x3F, 0x1F, 0x83, 0xF8, 0x0F,
|
||||
0xE1, 0xF8, 0xFC, 0x1F, 0x80, 0x7F, 0x0F, 0xC3, 0xF1, 0xFC, 0x01, 0xF8,
|
||||
0x7E, 0x1F, 0x8F, 0xE0, 0x0F, 0xC7, 0xE0, 0xFC, 0x7F, 0x00, 0x7F, 0x3F,
|
||||
0x07, 0xE3, 0xF0, 0x03, 0xF9, 0xF8, 0x1F, 0x1F, 0x80, 0x0F, 0xCF, 0xC0,
|
||||
0xFD, 0xFC, 0x00, 0x7E, 0x7C, 0x07, 0xEF, 0xE0, 0x03, 0xF7, 0xE0, 0x3F,
|
||||
0x7E, 0x00, 0x1F, 0xFF, 0x00, 0xFB, 0xF0, 0x00, 0x7F, 0xF8, 0x07, 0xDF,
|
||||
0x80, 0x03, 0xFF, 0x80, 0x3F, 0xFC, 0x00, 0x1F, 0xFC, 0x01, 0xFF, 0xC0,
|
||||
0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00,
|
||||
0x1F, 0xF0, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0x07,
|
||||
0xFC, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x03, 0xFE, 0xFF, 0x00, 0x07,
|
||||
0xF8, 0xFF, 0x00, 0x1F, 0xE0, 0xFF, 0x00, 0x3F, 0xC1, 0xFE, 0x00, 0xFF,
|
||||
0x01, 0xFE, 0x03, 0xFC, 0x01, 0xFC, 0x07, 0xF8, 0x03, 0xFC, 0x1F, 0xE0,
|
||||
0x03, 0xFC, 0x3F, 0x80, 0x03, 0xF8, 0xFF, 0x00, 0x07, 0xF9, 0xFC, 0x00,
|
||||
0x07, 0xF7, 0xF8, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00,
|
||||
0x0F, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00,
|
||||
0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x07,
|
||||
0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x3F, 0xBF, 0xC0, 0x00, 0xFF,
|
||||
0x3F, 0x80, 0x03, 0xFC, 0x7F, 0x80, 0x07, 0xF0, 0x7F, 0x80, 0x1F, 0xE0,
|
||||
0xFF, 0x00, 0x7F, 0x80, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x03, 0xFC, 0x01,
|
||||
0xFE, 0x0F, 0xF0, 0x01, 0xFE, 0x1F, 0xE0, 0x03, 0xFE, 0x7F, 0x80, 0x03,
|
||||
0xFD, 0xFE, 0x00, 0x03, 0xFC, 0xFF, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x3F,
|
||||
0xDF, 0xE0, 0x01, 0xFC, 0x7F, 0x00, 0x1F, 0xE3, 0xFC, 0x00, 0xFE, 0x0F,
|
||||
0xE0, 0x0F, 0xF0, 0x7F, 0x80, 0x7F, 0x01, 0xFC, 0x07, 0xF8, 0x0F, 0xF0,
|
||||
0x3F, 0x80, 0x3F, 0x83, 0xFC, 0x01, 0xFE, 0x1F, 0xC0, 0x07, 0xF1, 0xFC,
|
||||
0x00, 0x3F, 0xCF, 0xE0, 0x00, 0xFE, 0xFE, 0x00, 0x03, 0xFF, 0xF0, 0x00,
|
||||
0x1F, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x0F,
|
||||
0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xE0,
|
||||
0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00,
|
||||
0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01,
|
||||
0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8,
|
||||
0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
|
||||
0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF,
|
||||
0xFB, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x01,
|
||||
0xFC, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00,
|
||||
0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00,
|
||||
0x7F, 0x80, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xC0, 0x00,
|
||||
0x3F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00,
|
||||
0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E,
|
||||
0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F,
|
||||
0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1,
|
||||
0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xFC, 0x00,
|
||||
0x3F, 0x80, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00,
|
||||
0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0x7E, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0x00,
|
||||
0x07, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, 0xFC, 0x00, 0x3F, 0x80,
|
||||
0x03, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0xC0,
|
||||
0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xE0,
|
||||
0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xC1, 0xF8,
|
||||
0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F,
|
||||
0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07,
|
||||
0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0,
|
||||
0xFC, 0x1F, 0x83, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
|
||||
0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xC0, 0x00,
|
||||
0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00,
|
||||
0x03, 0xE7, 0xC0, 0x01, 0xF3, 0xE0, 0x01, 0xF8, 0xF8, 0x00, 0xF8, 0x7C,
|
||||
0x00, 0xFC, 0x1F, 0x00, 0x7C, 0x0F, 0x80, 0x3E, 0x03, 0xE0, 0x3E, 0x01,
|
||||
0xF0, 0x1F, 0x00, 0x7C, 0x1F, 0x00, 0x3E, 0x0F, 0x80, 0x0F, 0x8F, 0xC0,
|
||||
0x07, 0xC7, 0xC0, 0x01, 0xF7, 0xE0, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, 0x80, 0xFE,
|
||||
0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x01, 0xFF, 0x80, 0x1F, 0xFF, 0xC0, 0x7F,
|
||||
0xFF, 0xE0, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xC1, 0xF0, 0x7F, 0x83, 0x00,
|
||||
0x7F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x03, 0xFF,
|
||||
0xF8, 0x7F, 0xFF, 0xF1, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xDF, 0xF8, 0x3F,
|
||||
0xFF, 0x80, 0x7F, 0xFE, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x07, 0xFF,
|
||||
0xF0, 0x0F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xBF,
|
||||
0xFF, 0x3F, 0x3F, 0xFC, 0x7E, 0x1F, 0xF0, 0x7C, 0xFF, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0xFE, 0x1F, 0xC0, 0xFE, 0x3F, 0xF0, 0xFE, 0xFF, 0xF8, 0xFE,
|
||||
0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0x81, 0xFE, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF,
|
||||
0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF,
|
||||
0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0xFF,
|
||||
0x80, 0xFF, 0xFF, 0xE3, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0xFE,
|
||||
0xFF, 0xF8, 0xFE, 0x7F, 0xF0, 0xFC, 0x3F, 0xE0, 0x00, 0x7F, 0xC0, 0x1F,
|
||||
0xFF, 0xC1, 0xFF, 0xFE, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF, 0x1F, 0xFF, 0xF1,
|
||||
0xFF, 0x00, 0x8F, 0xF0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x3F, 0xC0,
|
||||
0x01, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F,
|
||||
0xE0, 0x00, 0xFF, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00,
|
||||
0x23, 0xFE, 0x1F, 0x1F, 0xFF, 0xF8, 0x7F, 0xFF, 0xC1, 0xFF, 0xFE, 0x07,
|
||||
0xFF, 0xF0, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x01,
|
||||
0xFC, 0x7F, 0x07, 0xFE, 0x7F, 0x0F, 0xFF, 0x7F, 0x1F, 0xFF, 0xFF, 0x3F,
|
||||
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0xC1, 0xFF, 0x7F, 0x80, 0xFF, 0x7F,
|
||||
0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xFE,
|
||||
0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xFF, 0x00, 0x3F, 0xFF,
|
||||
0x00, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x80, 0xFF, 0x7F,
|
||||
0xE3, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x1F, 0xFF, 0xBF, 0x0F,
|
||||
0xFF, 0x3F, 0x03, 0xFC, 0x1F, 0x00, 0xFF, 0x80, 0x03, 0xFF, 0xE0, 0x0F,
|
||||
0xFF, 0xF0, 0x1F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x3F, 0xC1, 0xFE, 0x7F,
|
||||
0x80, 0xFE, 0x7F, 0x00, 0x7E, 0x7F, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F,
|
||||
0x00, 0x00, 0x7F, 0x80, 0x02, 0x3F, 0xE0, 0x1C, 0x3F, 0xFF, 0xFC, 0x1F,
|
||||
0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, 0x01, 0xFF, 0xF0, 0x00,
|
||||
0x7F, 0x80, 0x3F, 0xFC, 0x0F, 0xFF, 0x83, 0xFF, 0xE0, 0xFF, 0xFC, 0x1F,
|
||||
0xFF, 0x83, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x7F,
|
||||
0xFE, 0x3F, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE7, 0xFF,
|
||||
0xFC, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, 0xFE,
|
||||
0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC,
|
||||
0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03, 0xF8,
|
||||
0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07, 0xF0,
|
||||
0x00, 0x01, 0xFC, 0x3F, 0x07, 0xFE, 0x3F, 0x0F, 0xFF, 0xBF, 0x1F, 0xFF,
|
||||
0xBF, 0x3F, 0xFF, 0xFF, 0x3F, 0xF7, 0xFF, 0x7F, 0x80, 0xFF, 0x7F, 0x80,
|
||||
0x7F, 0x7F, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x3F, 0xFE, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xFF, 0x00,
|
||||
0x3F, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x80,
|
||||
0xFF, 0x7F, 0xC1, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x1F, 0xFF,
|
||||
0xFF, 0x0F, 0xFF, 0x7F, 0x03, 0xFC, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFF, 0x30, 0x01, 0xFF, 0x3F, 0x07,
|
||||
0xFE, 0x3F, 0xFF, 0xFE, 0x3F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF,
|
||||
0xF0, 0x0F, 0xFF, 0x80, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x1F,
|
||||
0xE0, 0xFE, 0x7F, 0xF8, 0xFE, 0xFF, 0xFC, 0xFE, 0xFF, 0xFE, 0xFF, 0xFF,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x7F, 0x3C, 0x7E, 0xFF, 0xFF, 0xFF, 0x7F, 0x7E, 0x00,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0x1F, 0x81, 0xFE, 0x0F, 0xF0, 0x7F,
|
||||
0x81, 0xFC, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x0F, 0xF0,
|
||||
0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F,
|
||||
0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE,
|
||||
0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1,
|
||||
0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF4, 0xFF,
|
||||
0xBF, 0xFD, 0xFF, 0xCF, 0xFE, 0x7F, 0xE3, 0xFC, 0x00, 0xFE, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00,
|
||||
0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00,
|
||||
0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x3F, 0xFF, 0xC0, 0x1F, 0xCF, 0xE0,
|
||||
0x1F, 0xE7, 0xF0, 0x1F, 0xE3, 0xF8, 0x1F, 0xE1, 0xFC, 0x1F, 0xE0, 0xFE,
|
||||
0x1F, 0xE0, 0x7F, 0x1F, 0xE0, 0x3F, 0x9F, 0xE0, 0x1F, 0xDF, 0xE0, 0x0F,
|
||||
0xCF, 0xE0, 0x07, 0xEF, 0xE0, 0x03, 0xFF, 0xF8, 0x01, 0xFF, 0xFE, 0x00,
|
||||
0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xC0, 0x3F, 0xEF, 0xF0, 0x1F, 0xC3, 0xFC,
|
||||
0x0F, 0xE0, 0xFF, 0x07, 0xF0, 0x7F, 0x83, 0xF8, 0x1F, 0xE1, 0xFC, 0x07,
|
||||
0xF8, 0xFE, 0x01, 0xFE, 0x7F, 0x00, 0xFF, 0x3F, 0x80, 0x3F, 0xDF, 0xC0,
|
||||
0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 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, 0x1F, 0xE0, 0x1F, 0xE1, 0xF8, 0xFF, 0xF0, 0xFF, 0xF3,
|
||||
0xFB, 0xFF, 0xF3, 0xFF, 0xF7, 0xFF, 0xFF, 0xEF, 0xFF, 0xEF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xE0, 0x7F,
|
||||
0xFF, 0xC0, 0x7F, 0xC0, 0x7F, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFE, 0x01,
|
||||
0xFE, 0x01, 0xFF, 0xFC, 0x03, 0xFC, 0x03, 0xFF, 0xF8, 0x07, 0xF8, 0x07,
|
||||
0xFF, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF, 0xE0, 0x1F, 0xE0, 0x1F, 0xFF, 0xC0,
|
||||
0x3F, 0xC0, 0x3F, 0xFF, 0x80, 0x7F, 0x80, 0x7F, 0xFF, 0x00, 0xFF, 0x00,
|
||||
0xFF, 0xFE, 0x01, 0xFE, 0x01, 0xFF, 0xFC, 0x03, 0xFC, 0x03, 0xFF, 0xF8,
|
||||
0x07, 0xF8, 0x07, 0xFF, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF, 0xE0, 0x1F, 0xE0,
|
||||
0x1F, 0xFF, 0xC0, 0x3F, 0xC0, 0x3F, 0xFF, 0x80, 0x7F, 0x80, 0x7F, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF, 0xFE, 0x01, 0xFE, 0x01, 0xFC, 0xFC, 0x1F, 0xE0,
|
||||
0xFC, 0x7F, 0xF8, 0xFE, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F,
|
||||
0xFF, 0x00, 0x7F, 0x00, 0xFF, 0x80, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0xFE,
|
||||
0x03, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xE1, 0xFF, 0x1F, 0xF1, 0xFE, 0x03,
|
||||
0xFC, 0xFF, 0x00, 0xFE, 0x7F, 0x00, 0x7F, 0xBF, 0x80, 0x3F, 0xFF, 0xC0,
|
||||
0x0F, 0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8,
|
||||
0x00, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0x3F, 0xBF, 0x80, 0x3F, 0xDF,
|
||||
0xC0, 0x1F, 0xCF, 0xF0, 0x1F, 0xE3, 0xFC, 0x1F, 0xF0, 0xFF, 0xFF, 0xF0,
|
||||
0x7F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xE0,
|
||||
0x00, 0xFC, 0x1F, 0xC0, 0xFE, 0x7F, 0xF0, 0xFE, 0xFF, 0xF8, 0xFE, 0xFF,
|
||||
0xFC, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0x81, 0xFF, 0xFF, 0x80,
|
||||
0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, 0x81,
|
||||
0xFF, 0xFF, 0xE3, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0xFE, 0xFF,
|
||||
0xF8, 0xFE, 0x7F, 0xF0, 0xFE, 0x3F, 0xE0, 0xFF, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x07, 0xFE, 0x3F, 0x0F, 0xFF,
|
||||
0x3F, 0x1F, 0xFF, 0xBF, 0x3F, 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0x7F, 0x80,
|
||||
0xFF, 0x7F, 0x80, 0x7F, 0x7F, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xFF, 0x00,
|
||||
0x7F, 0xFF, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xFE, 0x00,
|
||||
0x3F, 0xFF, 0x00, 0x3F, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x7F, 0x7F, 0x00,
|
||||
0x7F, 0x7F, 0x80, 0xFF, 0x7F, 0xE1, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF,
|
||||
0xFF, 0x1F, 0xFF, 0xFF, 0x0F, 0xFF, 0x7F, 0x03, 0xFC, 0x7F, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0xFC, 0x0F, 0xFE, 0x1F, 0xFF,
|
||||
0x1F, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
|
||||
0xFF, 0x80, 0x7F, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8,
|
||||
0x03, 0xFC, 0x01, 0xFE, 0x00, 0xFF, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x1F,
|
||||
0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, 0x01, 0xFE, 0x00, 0xFF, 0x00,
|
||||
0x7F, 0x80, 0x00, 0x03, 0xFE, 0x01, 0xFF, 0xFE, 0x3F, 0xFF, 0xE7, 0xFF,
|
||||
0xFE, 0x7F, 0xFF, 0xCF, 0xF0, 0x3C, 0xFE, 0x00, 0x4F, 0xE0, 0x00, 0xFF,
|
||||
0x00, 0x0F, 0xFC, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xE0, 0x3F, 0xFF, 0x80,
|
||||
0xFF, 0xFC, 0x03, 0xFF, 0xE0, 0x0F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0xFF,
|
||||
0x00, 0x07, 0xF8, 0x00, 0x7F, 0xF0, 0x0F, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF,
|
||||
0xEF, 0xFF, 0xFC, 0xFF, 0xFF, 0x83, 0xFF, 0xE0, 0x03, 0xC0, 0x01, 0xF0,
|
||||
0x00, 0x7C, 0x00, 0x1F, 0x00, 0x0F, 0xC0, 0x03, 0xFF, 0xF3, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0x00, 0x1F,
|
||||
0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0,
|
||||
0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00,
|
||||
0x7F, 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x30, 0xFF, 0xFC, 0x3F, 0xFF, 0x07,
|
||||
0xFF, 0xC0, 0xFF, 0xF0, 0x1F, 0xF8, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F,
|
||||
0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F,
|
||||
0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F,
|
||||
0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F,
|
||||
0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFF, 0x00, 0xFF,
|
||||
0xFF, 0x00, 0xFF, 0xFF, 0x01, 0xFF, 0x7F, 0xC7, 0xFF, 0x7F, 0xFF, 0xFF,
|
||||
0x7F, 0xFF, 0xFF, 0x3F, 0xFF, 0xBF, 0x1F, 0xFF, 0x3F, 0x07, 0xFC, 0x3F,
|
||||
0xFE, 0x00, 0x1F, 0xFF, 0xE0, 0x03, 0xF9, 0xFC, 0x00, 0x7F, 0x3F, 0x80,
|
||||
0x1F, 0xE3, 0xF8, 0x03, 0xF8, 0x7F, 0x00, 0x7F, 0x0F, 0xE0, 0x1F, 0xE0,
|
||||
0xFE, 0x03, 0xF8, 0x1F, 0xC0, 0x7F, 0x03, 0xF8, 0x1F, 0xC0, 0x3F, 0x83,
|
||||
0xF8, 0x07, 0xF0, 0x7F, 0x00, 0x7E, 0x1F, 0xC0, 0x0F, 0xE3, 0xF8, 0x01,
|
||||
0xFC, 0x7E, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xFB, 0xF8, 0x00, 0x3F, 0x7E,
|
||||
0x00, 0x07, 0xEF, 0xC0, 0x00, 0xFF, 0xF8, 0x00, 0x0F, 0xFE, 0x00, 0x01,
|
||||
0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x7F, 0xC0,
|
||||
0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0xFF,
|
||||
0x00, 0x7E, 0x7F, 0x00, 0xFF, 0x80, 0xFE, 0x7F, 0x01, 0xFF, 0x80, 0xFE,
|
||||
0x3F, 0x81, 0xFF, 0x80, 0xFE, 0x3F, 0x81, 0xFF, 0x80, 0xFC, 0x3F, 0x81,
|
||||
0xFF, 0xC1, 0xFC, 0x1F, 0x83, 0xF7, 0xC1, 0xFC, 0x1F, 0xC3, 0xE7, 0xC1,
|
||||
0xF8, 0x1F, 0xC3, 0xE7, 0xC3, 0xF8, 0x1F, 0xC3, 0xE7, 0xC3, 0xF8, 0x0F,
|
||||
0xC7, 0xE3, 0xE3, 0xF8, 0x0F, 0xE7, 0xC3, 0xE3, 0xF0, 0x0F, 0xE7, 0xC3,
|
||||
0xE7, 0xF0, 0x0F, 0xE7, 0xC3, 0xE7, 0xF0, 0x07, 0xE7, 0xC3, 0xF7, 0xE0,
|
||||
0x07, 0xEF, 0x81, 0xF7, 0xE0, 0x07, 0xEF, 0x81, 0xF7, 0xE0, 0x03, 0xFF,
|
||||
0x81, 0xF7, 0xE0, 0x03, 0xFF, 0x81, 0xFF, 0xC0, 0x03, 0xFF, 0x80, 0xFF,
|
||||
0xC0, 0x03, 0xFF, 0x00, 0xFF, 0xC0, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x01,
|
||||
0xFF, 0x00, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0xFE, 0x00,
|
||||
0x7F, 0x80, 0x7F, 0x80, 0x1F, 0xEF, 0xF0, 0x07, 0xF8, 0xFF, 0x01, 0xFE,
|
||||
0x0F, 0xF0, 0x3F, 0x81, 0xFE, 0x0F, 0xF0, 0x1F, 0xE3, 0xFC, 0x01, 0xFC,
|
||||
0x7F, 0x00, 0x3F, 0xDF, 0xE0, 0x03, 0xFF, 0xF8, 0x00, 0x3F, 0xFE, 0x00,
|
||||
0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF,
|
||||
0xC0, 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x00,
|
||||
0x7F, 0x7F, 0x00, 0x1F, 0xEF, 0xF0, 0x03, 0xF8, 0xFF, 0x00, 0xFF, 0x0F,
|
||||
0xE0, 0x3F, 0xC1, 0xFE, 0x07, 0xF0, 0x1F, 0xE1, 0xFE, 0x03, 0xFC, 0x7F,
|
||||
0x80, 0x3F, 0xDF, 0xE0, 0x03, 0xFC, 0xFF, 0x00, 0x1F, 0xFF, 0xE0, 0x03,
|
||||
0xF9, 0xFC, 0x00, 0x7F, 0x3F, 0xC0, 0x1F, 0xE3, 0xF8, 0x03, 0xF8, 0x7F,
|
||||
0x00, 0x7F, 0x0F, 0xE0, 0x1F, 0xE0, 0xFE, 0x03, 0xF8, 0x1F, 0xC0, 0x7F,
|
||||
0x01, 0xFC, 0x0F, 0xC0, 0x3F, 0x83, 0xF8, 0x07, 0xF0, 0x7F, 0x00, 0x7E,
|
||||
0x0F, 0xC0, 0x0F, 0xE3, 0xF8, 0x00, 0xFC, 0x7F, 0x00, 0x1F, 0x8F, 0xC0,
|
||||
0x03, 0xFB, 0xF8, 0x00, 0x3F, 0x7E, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7F,
|
||||
0xF8, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00,
|
||||
0x03, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE,
|
||||
0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00,
|
||||
0x3F, 0x80, 0x01, 0x3F, 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0x80,
|
||||
0x00, 0xFF, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F,
|
||||
0xFF, 0xF3, 0xFF, 0xFF, 0x9F, 0xFF, 0xFC, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF,
|
||||
0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x03,
|
||||
0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0xFE, 0x00,
|
||||
0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0,
|
||||
0x00, 0x7F, 0x80, 0x07, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0x00, 0xFF,
|
||||
0x01, 0xFF, 0x03, 0xFF, 0x03, 0xFF, 0x03, 0xFF, 0x03, 0xF0, 0x03, 0xF0,
|
||||
0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0,
|
||||
0x03, 0xF0, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xE0, 0xFF, 0xE0, 0xFF, 0xC0,
|
||||
0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xC0, 0xFF, 0xE0, 0x0F, 0xE0, 0x07, 0xF0,
|
||||
0x07, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0,
|
||||
0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, 0xF8, 0x03, 0xFF, 0x03, 0xFF,
|
||||
0x03, 0xFF, 0x01, 0xFF, 0x00, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
|
||||
0x80, 0x00, 0xFE, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0xFF, 0xC0, 0xFF, 0xC0,
|
||||
0x1F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0,
|
||||
0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xE0, 0x0F, 0xF0,
|
||||
0x07, 0xFF, 0x03, 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x07, 0xFF, 0x07, 0xFF,
|
||||
0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0,
|
||||
0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x1F, 0xC0,
|
||||
0xFF, 0xC0, 0xFF, 0xC0, 0xFF, 0x80, 0xFF, 0x00, 0xFE, 0x00, 0x3F, 0xE0,
|
||||
0x02, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xF8, 0x07, 0xFF, 0xA0, 0x03, 0xFE, 0x00 };
|
||||
|
||||
const GFXglyph NotoSans_Bold24pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 12, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 8, 35, 13, 3, -33 }, // 0x21 '!'
|
||||
{ 36, 17, 13, 23, 3, -33 }, // 0x22 '"'
|
||||
{ 64, 28, 34, 30, 1, -33 }, // 0x23 '#'
|
||||
{ 183, 23, 39, 27, 2, -35 }, // 0x24 '$'
|
||||
{ 296, 40, 34, 42, 1, -33 }, // 0x25 '%'
|
||||
{ 466, 33, 34, 35, 2, -33 }, // 0x26 '&'
|
||||
{ 607, 7, 13, 13, 3, -33 }, // 0x27 '''
|
||||
{ 619, 13, 41, 16, 2, -33 }, // 0x28 '('
|
||||
{ 686, 13, 41, 16, 1, -33 }, // 0x29 ')'
|
||||
{ 753, 23, 22, 25, 1, -35 }, // 0x2A '*'
|
||||
{ 817, 23, 23, 27, 2, -27 }, // 0x2B '+'
|
||||
{ 884, 10, 11, 13, 1, -4 }, // 0x2C ','
|
||||
{ 898, 13, 6, 15, 1, -15 }, // 0x2D '-'
|
||||
{ 908, 8, 8, 13, 3, -6 }, // 0x2E '.'
|
||||
{ 916, 19, 34, 20, 0, -33 }, // 0x2F '/'
|
||||
{ 997, 23, 34, 27, 2, -33 }, // 0x30 '0'
|
||||
{ 1095, 16, 34, 27, 3, -33 }, // 0x31 '1'
|
||||
{ 1163, 23, 34, 27, 2, -33 }, // 0x32 '2'
|
||||
{ 1261, 23, 34, 27, 2, -33 }, // 0x33 '3'
|
||||
{ 1359, 25, 34, 27, 1, -33 }, // 0x34 '4'
|
||||
{ 1466, 23, 34, 27, 2, -33 }, // 0x35 '5'
|
||||
{ 1564, 23, 34, 27, 2, -33 }, // 0x36 '6'
|
||||
{ 1662, 24, 34, 27, 1, -33 }, // 0x37 '7'
|
||||
{ 1764, 23, 34, 27, 2, -33 }, // 0x38 '8'
|
||||
{ 1862, 24, 34, 27, 1, -33 }, // 0x39 '9'
|
||||
{ 1964, 8, 27, 13, 3, -25 }, // 0x3A ':'
|
||||
{ 1991, 10, 32, 13, 1, -25 }, // 0x3B ';'
|
||||
{ 2031, 23, 24, 27, 2, -28 }, // 0x3C '<'
|
||||
{ 2100, 23, 14, 27, 2, -23 }, // 0x3D '='
|
||||
{ 2141, 23, 24, 27, 2, -28 }, // 0x3E '>'
|
||||
{ 2210, 21, 35, 22, 0, -33 }, // 0x3F '?'
|
||||
{ 2302, 38, 38, 42, 2, -33 }, // 0x40 '@'
|
||||
{ 2483, 33, 34, 33, 0, -33 }, // 0x41 'A'
|
||||
{ 2624, 25, 34, 31, 4, -33 }, // 0x42 'B'
|
||||
{ 2731, 26, 34, 30, 3, -33 }, // 0x43 'C'
|
||||
{ 2842, 28, 34, 34, 4, -33 }, // 0x44 'D'
|
||||
{ 2961, 20, 34, 26, 4, -33 }, // 0x45 'E'
|
||||
{ 3046, 19, 34, 26, 4, -33 }, // 0x46 'F'
|
||||
{ 3127, 27, 34, 34, 3, -33 }, // 0x47 'G'
|
||||
{ 3242, 28, 34, 36, 4, -33 }, // 0x48 'H'
|
||||
{ 3361, 16, 34, 18, 1, -33 }, // 0x49 'I'
|
||||
{ 3429, 14, 44, 16, -3, -33 }, // 0x4A 'J'
|
||||
{ 3506, 27, 34, 31, 4, -33 }, // 0x4B 'K'
|
||||
{ 3621, 21, 34, 26, 4, -33 }, // 0x4C 'L'
|
||||
{ 3711, 36, 34, 44, 4, -33 }, // 0x4D 'M'
|
||||
{ 3864, 30, 34, 38, 4, -33 }, // 0x4E 'N'
|
||||
{ 3992, 32, 34, 37, 3, -33 }, // 0x4F 'O'
|
||||
{ 4128, 23, 34, 29, 4, -33 }, // 0x50 'P'
|
||||
{ 4226, 32, 42, 37, 3, -33 }, // 0x51 'Q'
|
||||
{ 4394, 27, 34, 31, 4, -33 }, // 0x52 'R'
|
||||
{ 4509, 22, 34, 26, 2, -33 }, // 0x53 'S'
|
||||
{ 4603, 25, 34, 27, 1, -33 }, // 0x54 'T'
|
||||
{ 4710, 28, 34, 36, 4, -33 }, // 0x55 'U'
|
||||
{ 4829, 31, 34, 31, 0, -33 }, // 0x56 'V'
|
||||
{ 4961, 45, 34, 45, 0, -33 }, // 0x57 'W'
|
||||
{ 5153, 31, 34, 31, 0, -33 }, // 0x58 'X'
|
||||
{ 5285, 29, 34, 29, 0, -33 }, // 0x59 'Y'
|
||||
{ 5409, 25, 34, 27, 1, -33 }, // 0x5A 'Z'
|
||||
{ 5516, 11, 41, 16, 3, -33 }, // 0x5B '['
|
||||
{ 5573, 19, 34, 20, 0, -33 }, // 0x5C '\'
|
||||
{ 5654, 11, 41, 16, 1, -33 }, // 0x5D ']'
|
||||
{ 5711, 25, 22, 27, 1, -33 }, // 0x5E '^'
|
||||
{ 5780, 19, 3, 19, 0, 5 }, // 0x5F '_'
|
||||
{ 5788, 13, 8, 17, 2, -35 }, // 0x60 '`'
|
||||
{ 5801, 23, 26, 28, 2, -25 }, // 0x61 'a'
|
||||
{ 5876, 24, 36, 30, 3, -35 }, // 0x62 'b'
|
||||
{ 5984, 21, 26, 24, 2, -25 }, // 0x63 'c'
|
||||
{ 6053, 24, 36, 30, 2, -35 }, // 0x64 'd'
|
||||
{ 6161, 24, 26, 28, 2, -25 }, // 0x65 'e'
|
||||
{ 6239, 19, 36, 18, 1, -35 }, // 0x66 'f'
|
||||
{ 6325, 24, 37, 30, 2, -25 }, // 0x67 'g'
|
||||
{ 6436, 24, 36, 31, 3, -35 }, // 0x68 'h'
|
||||
{ 6544, 8, 36, 14, 3, -35 }, // 0x69 'i'
|
||||
{ 6580, 13, 47, 14, -2, -35 }, // 0x6A 'j'
|
||||
{ 6657, 25, 36, 29, 4, -35 }, // 0x6B 'k'
|
||||
{ 6770, 8, 36, 14, 3, -35 }, // 0x6C 'l'
|
||||
{ 6806, 39, 26, 46, 3, -25 }, // 0x6D 'm'
|
||||
{ 6933, 24, 26, 31, 3, -25 }, // 0x6E 'n'
|
||||
{ 7011, 25, 26, 29, 2, -25 }, // 0x6F 'o'
|
||||
{ 7093, 24, 37, 30, 3, -25 }, // 0x70 'p'
|
||||
{ 7204, 24, 37, 30, 2, -25 }, // 0x71 'q'
|
||||
{ 7315, 17, 26, 21, 3, -25 }, // 0x72 'r'
|
||||
{ 7371, 20, 26, 24, 2, -25 }, // 0x73 's'
|
||||
{ 7436, 18, 31, 20, 1, -30 }, // 0x74 't'
|
||||
{ 7506, 24, 26, 31, 3, -25 }, // 0x75 'u'
|
||||
{ 7584, 27, 26, 27, 0, -25 }, // 0x76 'v'
|
||||
{ 7672, 40, 26, 40, 0, -25 }, // 0x77 'w'
|
||||
{ 7802, 27, 26, 27, 0, -25 }, // 0x78 'x'
|
||||
{ 7890, 27, 37, 27, 0, -25 }, // 0x79 'y'
|
||||
{ 8015, 21, 26, 23, 1, -25 }, // 0x7A 'z'
|
||||
{ 8084, 16, 41, 19, 1, -33 }, // 0x7B '{'
|
||||
{ 8166, 5, 47, 26, 10, -35 }, // 0x7C '|'
|
||||
{ 8196, 16, 41, 19, 2, -33 }, // 0x7D '}'
|
||||
{ 8278, 23, 7, 27, 2, -19 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Bold24pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Bold24pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Bold24pt7bGlyphs,
|
||||
0x20, 0x7E, 64 };
|
||||
|
||||
// Approx. 8971 bytes
|
||||
|
||||
#endif // NOTOSANSBOLD24PT7B_H
|
||||
@@ -1,171 +0,0 @@
|
||||
#ifndef NOTOSANSBOLD7PT7B_H
|
||||
#define NOTOSANSBOLD7PT7B_H
|
||||
const uint8_t NotoSans_Bold7pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFC, 0xF0, 0xDE, 0xF7, 0xA0, 0x1A, 0x09, 0x04, 0x8F, 0xF3,
|
||||
0x61, 0xA3, 0xFC, 0x48, 0x2C, 0x36, 0x00, 0x23, 0xFE, 0x78, 0xF0, 0xF2,
|
||||
0xEB, 0xFC, 0x82, 0x00, 0x70, 0xC5, 0x98, 0xD9, 0x0D, 0xB0, 0x5A, 0xE7,
|
||||
0x6B, 0x05, 0xB0, 0xDB, 0x19, 0xB1, 0x8E, 0x78, 0x3E, 0x33, 0x0F, 0x87,
|
||||
0x87, 0xCF, 0x7D, 0x9E, 0xFF, 0x3F, 0xC0, 0xFF, 0x6B, 0x69, 0x24, 0xDB,
|
||||
0x30, 0xC6, 0x23, 0x33, 0x33, 0x33, 0x6E, 0x19, 0x27, 0xF9, 0xC2, 0xCD,
|
||||
0x80, 0x30, 0xCF, 0xFF, 0x30, 0xC0, 0x6D, 0x60, 0xFF, 0xF0, 0x0C, 0x61,
|
||||
0x84, 0x30, 0xC6, 0x18, 0x63, 0x00, 0x3C, 0xFD, 0x9B, 0x36, 0x7C, 0xD9,
|
||||
0xB3, 0x7E, 0x78, 0x1B, 0xFF, 0x31, 0x8C, 0x63, 0x18, 0xC0, 0x7B, 0xF8,
|
||||
0xC3, 0x1C, 0x63, 0x18, 0xFF, 0xF0, 0x7B, 0xF0, 0xC3, 0x79, 0xF0, 0xC3,
|
||||
0xFF, 0xE0, 0x0C, 0x0C, 0x1C, 0x3C, 0x2C, 0x6C, 0xFF, 0xFF, 0x0C, 0x0C,
|
||||
0xFF, 0xFC, 0x30, 0xFA, 0x70, 0xC3, 0xFF, 0xE0, 0x1E, 0x7D, 0x83, 0x05,
|
||||
0xFC, 0xD9, 0xB3, 0x7E, 0x78, 0xFF, 0xFC, 0x18, 0x70, 0xC1, 0x86, 0x0C,
|
||||
0x30, 0x60, 0x3C, 0xFD, 0x9B, 0x33, 0xCF, 0x99, 0xE3, 0x66, 0xF8, 0x38,
|
||||
0xFD, 0x9E, 0x36, 0x6F, 0xCD, 0x83, 0x5C, 0xF0, 0xFC, 0x0F, 0x6D, 0x80,
|
||||
0x1B, 0x58, 0x04, 0x33, 0xB8, 0xC1, 0xE0, 0xC1, 0xFF, 0xF0, 0x3F, 0x83,
|
||||
0x07, 0x07, 0x1D, 0xCC, 0x20, 0x7B, 0xF0, 0xC3, 0x18, 0xC3, 0x00, 0x30,
|
||||
0xC0, 0x1F, 0x06, 0x31, 0x03, 0x6F, 0xA9, 0x37, 0x66, 0xEC, 0xD4, 0xFE,
|
||||
0xC0, 0x0C, 0x20, 0xFC, 0x00, 0x1C, 0x0E, 0x07, 0x86, 0xC3, 0x31, 0x99,
|
||||
0xFC, 0xFF, 0x61, 0xE0, 0xC0, 0xFD, 0xFF, 0x1E, 0x3F, 0xDF, 0xF1, 0xE3,
|
||||
0xFF, 0xF8, 0x3E, 0xFF, 0x86, 0x0C, 0x18, 0x30, 0x70, 0x7E, 0x7C, 0xF8,
|
||||
0xFE, 0xC7, 0xC3, 0xC3, 0xC3, 0xC3, 0xC7, 0xFE, 0xFC, 0xFF, 0xFC, 0x30,
|
||||
0xFF, 0xFC, 0x30, 0xFF, 0xF0, 0xFF, 0xFC, 0x30, 0xFF, 0xFC, 0x30, 0xC3,
|
||||
0x00, 0x1E, 0x7F, 0xE0, 0xC0, 0xCF, 0xCF, 0xC3, 0xE3, 0x7F, 0x3F, 0xC3,
|
||||
0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xC3, 0xC3, 0xC3, 0xC3, 0xFB, 0xCC, 0x63,
|
||||
0x18, 0xC6, 0x77, 0xC0, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0xE0, 0xC3,
|
||||
0xC6, 0xCC, 0xD8, 0xF8, 0xF8, 0xCC, 0xCE, 0xC6, 0xC7, 0xC3, 0x0C, 0x30,
|
||||
0xC3, 0x0C, 0x30, 0xFF, 0xF0, 0xE0, 0xFC, 0x3F, 0xC7, 0xF8, 0xBD, 0x37,
|
||||
0xB6, 0xF6, 0x9E, 0x73, 0xCE, 0x79, 0x8C, 0xE1, 0xF8, 0xFC, 0x7B, 0x3D,
|
||||
0x9E, 0x6F, 0x37, 0x8F, 0xC7, 0xE1, 0xC0, 0x3E, 0x3F, 0xB8, 0xF8, 0x3C,
|
||||
0x1E, 0x0F, 0x07, 0xC7, 0x7F, 0x1F, 0x00, 0xF9, 0xFB, 0x1E, 0x3C, 0xFF,
|
||||
0xBC, 0x60, 0xC1, 0x80, 0x3E, 0x3F, 0xB8, 0xF8, 0x3C, 0x1E, 0x0F, 0x07,
|
||||
0xC7, 0x7F, 0x1F, 0x01, 0x80, 0x70, 0xF8, 0xFE, 0xC6, 0xC6, 0xCE, 0xFC,
|
||||
0xCC, 0xCC, 0xC6, 0xC7, 0x7B, 0xFC, 0x30, 0xF0, 0xE1, 0xC3, 0xFF, 0xE0,
|
||||
0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xC3, 0xC3,
|
||||
0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x7F, 0x3E, 0xC1, 0xE1, 0x98, 0xCC,
|
||||
0x66, 0x61, 0xB0, 0xD8, 0x68, 0x1C, 0x0E, 0x00, 0xC3, 0x1E, 0x38, 0xD9,
|
||||
0xC6, 0xCA, 0x66, 0x5B, 0x36, 0xD8, 0xB2, 0xC7, 0x14, 0x38, 0xE1, 0xC7,
|
||||
0x00, 0xE3, 0xB1, 0x8D, 0x87, 0xC1, 0xC0, 0xE0, 0xF8, 0x6C, 0x63, 0x71,
|
||||
0xC0, 0xC3, 0xB1, 0x99, 0x86, 0xC3, 0xC0, 0xE0, 0x60, 0x30, 0x18, 0x0C,
|
||||
0x00, 0xFE, 0xFE, 0x06, 0x0C, 0x18, 0x18, 0x30, 0x60, 0xFF, 0xFF, 0xFF,
|
||||
0x6D, 0xB6, 0xDB, 0x70, 0xC1, 0x06, 0x18, 0x30, 0xC3, 0x06, 0x18, 0x30,
|
||||
0xFF, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x10, 0x18, 0x38, 0x2C, 0x64, 0x46,
|
||||
0xC3, 0xFC, 0xCC, 0x80, 0x33, 0xF0, 0xCF, 0xFF, 0x3D, 0xFD, 0xC1, 0x83,
|
||||
0x67, 0xEC, 0x78, 0xF1, 0xE3, 0xFF, 0xF8, 0x39, 0xFC, 0x30, 0xC3, 0x0F,
|
||||
0x9E, 0x06, 0x0C, 0x9F, 0xFC, 0xF8, 0xF1, 0xE3, 0xFE, 0xEC, 0x30, 0xFB,
|
||||
0x37, 0xFF, 0xF8, 0x39, 0x3E, 0x3D, 0xC6, 0x3E, 0x61, 0x86, 0x18, 0x61,
|
||||
0x80, 0x21, 0xFF, 0x3E, 0x3C, 0x78, 0xFF, 0xBB, 0x07, 0x1B, 0xF0, 0xC1,
|
||||
0x83, 0x67, 0xFE, 0x78, 0xF1, 0xE3, 0xC7, 0x8C, 0xD3, 0xFF, 0xF0, 0x31,
|
||||
0x03, 0x33, 0x33, 0x33, 0x3B, 0xF0, 0xC0, 0xC0, 0xC2, 0xCC, 0xDC, 0xF8,
|
||||
0xF8, 0xDC, 0xCC, 0xC7, 0xFF, 0xFF, 0xF0, 0x18, 0xDF, 0xFF, 0x39, 0xE3,
|
||||
0x3C, 0x67, 0x8C, 0xF1, 0x9E, 0x33, 0x19, 0xFF, 0x9E, 0x3C, 0x78, 0xF1,
|
||||
0xE3, 0x31, 0xFB, 0x3E, 0x3C, 0x78, 0xFB, 0x3C, 0x19, 0xFB, 0x1E, 0x3C,
|
||||
0x78, 0xFF, 0xFE, 0xC1, 0x83, 0x00, 0x21, 0xFF, 0x3E, 0x3C, 0x78, 0xFF,
|
||||
0xBB, 0x06, 0x0C, 0x18, 0x1F, 0xF9, 0x8C, 0x63, 0x18, 0x77, 0xF1, 0xC7,
|
||||
0x8E, 0x7F, 0x21, 0x8F, 0x98, 0x61, 0x86, 0x1F, 0x3C, 0xC7, 0x8F, 0x1E,
|
||||
0x3C, 0x7F, 0xDF, 0x80, 0xC7, 0x66, 0x66, 0x2C, 0x3C, 0x3C, 0x18, 0xC6,
|
||||
0x76, 0xE6, 0x6F, 0x66, 0xB4, 0x29, 0xC3, 0x9C, 0x39, 0xC0, 0xE7, 0x3C,
|
||||
0x3C, 0x3C, 0x3C, 0x66, 0xE7, 0xC7, 0x66, 0x66, 0x2C, 0x3C, 0x3C, 0x18,
|
||||
0x18, 0x30, 0xF0, 0x7C, 0x31, 0x8C, 0x71, 0xFF, 0xC0, 0x19, 0xCC, 0x63,
|
||||
0x73, 0x86, 0x31, 0x8C, 0x70, 0xFF, 0xFF, 0xFF, 0xC0, 0xCC, 0x44, 0x67,
|
||||
0x76, 0x44, 0xCC, 0xE7, 0xF0 };
|
||||
|
||||
const GFXglyph NotoSans_Bold7pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 4, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 2, 10, 4, 1, -9 }, // 0x21 '!'
|
||||
{ 4, 5, 4, 7, 1, -9 }, // 0x22 '"'
|
||||
{ 7, 9, 10, 9, 0, -9 }, // 0x23 '#'
|
||||
{ 19, 6, 11, 8, 1, -9 }, // 0x24 '$'
|
||||
{ 28, 12, 10, 12, 0, -9 }, // 0x25 '%'
|
||||
{ 43, 9, 10, 10, 1, -9 }, // 0x26 '&'
|
||||
{ 55, 2, 4, 4, 1, -9 }, // 0x27 '''
|
||||
{ 56, 3, 12, 5, 1, -9 }, // 0x28 '('
|
||||
{ 61, 4, 12, 5, 0, -9 }, // 0x29 ')'
|
||||
{ 67, 7, 6, 7, 0, -9 }, // 0x2A '*'
|
||||
{ 73, 6, 6, 8, 1, -7 }, // 0x2B '+'
|
||||
{ 78, 3, 4, 4, 0, -1 }, // 0x2C ','
|
||||
{ 80, 4, 2, 4, 0, -4 }, // 0x2D '-'
|
||||
{ 81, 2, 2, 4, 1, -1 }, // 0x2E '.'
|
||||
{ 82, 6, 10, 6, 0, -9 }, // 0x2F '/'
|
||||
{ 90, 7, 10, 8, 0, -9 }, // 0x30 '0'
|
||||
{ 99, 5, 10, 8, 1, -9 }, // 0x31 '1'
|
||||
{ 106, 6, 10, 8, 1, -9 }, // 0x32 '2'
|
||||
{ 114, 6, 10, 8, 1, -9 }, // 0x33 '3'
|
||||
{ 122, 8, 10, 8, 0, -9 }, // 0x34 '4'
|
||||
{ 132, 6, 10, 8, 1, -9 }, // 0x35 '5'
|
||||
{ 140, 7, 10, 8, 0, -9 }, // 0x36 '6'
|
||||
{ 149, 7, 10, 8, 0, -9 }, // 0x37 '7'
|
||||
{ 158, 7, 10, 8, 0, -9 }, // 0x38 '8'
|
||||
{ 167, 7, 10, 8, 0, -9 }, // 0x39 '9'
|
||||
{ 176, 2, 8, 4, 1, -7 }, // 0x3A ':'
|
||||
{ 178, 3, 10, 4, 0, -7 }, // 0x3B ';'
|
||||
{ 182, 6, 8, 8, 1, -8 }, // 0x3C '<'
|
||||
{ 188, 6, 4, 8, 1, -6 }, // 0x3D '='
|
||||
{ 191, 6, 8, 8, 1, -8 }, // 0x3E '>'
|
||||
{ 197, 6, 10, 7, 0, -9 }, // 0x3F '?'
|
||||
{ 205, 11, 11, 12, 1, -9 }, // 0x40 '@'
|
||||
{ 221, 9, 10, 9, 0, -9 }, // 0x41 'A'
|
||||
{ 233, 7, 10, 9, 1, -9 }, // 0x42 'B'
|
||||
{ 242, 7, 10, 9, 1, -9 }, // 0x43 'C'
|
||||
{ 251, 8, 10, 10, 1, -9 }, // 0x44 'D'
|
||||
{ 261, 6, 10, 8, 1, -9 }, // 0x45 'E'
|
||||
{ 269, 6, 10, 8, 1, -9 }, // 0x46 'F'
|
||||
{ 277, 8, 10, 10, 1, -9 }, // 0x47 'G'
|
||||
{ 287, 8, 10, 10, 1, -9 }, // 0x48 'H'
|
||||
{ 297, 5, 10, 5, 0, -9 }, // 0x49 'I'
|
||||
{ 304, 4, 13, 5, -1, -9 }, // 0x4A 'J'
|
||||
{ 311, 8, 10, 9, 1, -9 }, // 0x4B 'K'
|
||||
{ 321, 6, 10, 8, 1, -9 }, // 0x4C 'L'
|
||||
{ 329, 11, 10, 13, 1, -9 }, // 0x4D 'M'
|
||||
{ 343, 9, 10, 11, 1, -9 }, // 0x4E 'N'
|
||||
{ 355, 9, 10, 11, 1, -9 }, // 0x4F 'O'
|
||||
{ 367, 7, 10, 9, 1, -9 }, // 0x50 'P'
|
||||
{ 376, 9, 12, 11, 1, -9 }, // 0x51 'Q'
|
||||
{ 390, 8, 10, 9, 1, -9 }, // 0x52 'R'
|
||||
{ 400, 6, 10, 8, 1, -9 }, // 0x53 'S'
|
||||
{ 408, 8, 10, 8, 0, -9 }, // 0x54 'T'
|
||||
{ 418, 8, 10, 10, 1, -9 }, // 0x55 'U'
|
||||
{ 428, 9, 10, 9, 0, -9 }, // 0x56 'V'
|
||||
{ 440, 13, 10, 13, 0, -9 }, // 0x57 'W'
|
||||
{ 457, 9, 10, 9, 0, -9 }, // 0x58 'X'
|
||||
{ 469, 9, 10, 9, 0, -9 }, // 0x59 'Y'
|
||||
{ 481, 8, 10, 8, 0, -9 }, // 0x5A 'Z'
|
||||
{ 491, 3, 12, 5, 1, -9 }, // 0x5B '['
|
||||
{ 496, 6, 10, 6, 0, -9 }, // 0x5C '\'
|
||||
{ 504, 4, 12, 5, 0, -9 }, // 0x5D ']'
|
||||
{ 510, 8, 7, 8, 0, -9 }, // 0x5E '^'
|
||||
{ 517, 6, 1, 6, 0, 2 }, // 0x5F '_'
|
||||
{ 518, 3, 3, 5, 1, -10 }, // 0x60 '`'
|
||||
{ 520, 6, 8, 8, 1, -7 }, // 0x61 'a'
|
||||
{ 526, 7, 10, 9, 1, -9 }, // 0x62 'b'
|
||||
{ 535, 6, 8, 7, 1, -7 }, // 0x63 'c'
|
||||
{ 541, 7, 10, 9, 1, -9 }, // 0x64 'd'
|
||||
{ 550, 7, 8, 8, 1, -7 }, // 0x65 'e'
|
||||
{ 557, 6, 10, 5, 0, -9 }, // 0x66 'f'
|
||||
{ 565, 7, 11, 9, 1, -7 }, // 0x67 'g'
|
||||
{ 575, 7, 10, 9, 1, -9 }, // 0x68 'h'
|
||||
{ 584, 2, 10, 4, 1, -9 }, // 0x69 'i'
|
||||
{ 587, 4, 13, 4, -1, -9 }, // 0x6A 'j'
|
||||
{ 594, 8, 10, 9, 1, -9 }, // 0x6B 'k'
|
||||
{ 604, 2, 10, 4, 1, -9 }, // 0x6C 'l'
|
||||
{ 607, 11, 8, 13, 1, -7 }, // 0x6D 'm'
|
||||
{ 618, 7, 8, 9, 1, -7 }, // 0x6E 'n'
|
||||
{ 625, 7, 8, 9, 1, -7 }, // 0x6F 'o'
|
||||
{ 632, 7, 11, 9, 1, -7 }, // 0x70 'p'
|
||||
{ 642, 7, 11, 9, 1, -7 }, // 0x71 'q'
|
||||
{ 652, 5, 8, 6, 1, -7 }, // 0x72 'r'
|
||||
{ 657, 5, 8, 7, 1, -7 }, // 0x73 's'
|
||||
{ 662, 6, 9, 6, 0, -8 }, // 0x74 't'
|
||||
{ 669, 7, 7, 9, 1, -6 }, // 0x75 'u'
|
||||
{ 676, 8, 7, 8, 0, -6 }, // 0x76 'v'
|
||||
{ 683, 12, 7, 12, 0, -6 }, // 0x77 'w'
|
||||
{ 694, 8, 7, 8, 0, -6 }, // 0x78 'x'
|
||||
{ 701, 8, 10, 8, 0, -6 }, // 0x79 'y'
|
||||
{ 711, 6, 7, 7, 0, -6 }, // 0x7A 'z'
|
||||
{ 717, 5, 12, 5, 0, -9 }, // 0x7B '{'
|
||||
{ 725, 2, 13, 8, 3, -9 }, // 0x7C '|'
|
||||
{ 729, 4, 12, 5, 1, -9 }, // 0x7D '}'
|
||||
{ 735, 6, 2, 8, 1, -5 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Bold7pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Bold7pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Bold7pt7bGlyphs,
|
||||
0x20, 0x7E, 19 };
|
||||
|
||||
// Approx. 1409 bytes
|
||||
|
||||
#endif // NOTOSANSBOLD7PT7B_H
|
||||
@@ -1,210 +0,0 @@
|
||||
#ifndef NOTOSANSBOLD9PT7B_H
|
||||
#define NOTOSANSBOLD9PT7B_H
|
||||
const uint8_t NotoSans_Bold9pt7bBitmaps[] PROGMEM = {
|
||||
0x00, 0xFF, 0xFF, 0xFF, 0xE1, 0x7E, 0xEF, 0xBC, 0xF3, 0xCC, 0x0C, 0xC1,
|
||||
0x90, 0x36, 0x04, 0xC7, 0xFE, 0xFF, 0xC6, 0x40, 0xD8, 0xFF, 0xDF, 0xF8,
|
||||
0xCC, 0x19, 0x03, 0x60, 0x18, 0x7F, 0xFF, 0xF9, 0xF8, 0xF8, 0x7E, 0x1F,
|
||||
0x1F, 0x9B, 0xFF, 0xFE, 0x18, 0x18, 0x70, 0x63, 0xE1, 0x8D, 0x8C, 0x36,
|
||||
0x30, 0xDD, 0x83, 0x66, 0xEF, 0xB7, 0xDD, 0xDB, 0x06, 0xCC, 0x33, 0x30,
|
||||
0xCE, 0xC6, 0x1F, 0x38, 0x38, 0x1C, 0x07, 0xF0, 0x77, 0x06, 0x30, 0x77,
|
||||
0x03, 0xE0, 0x7C, 0x7F, 0xE6, 0xEF, 0xEC, 0x7C, 0xE3, 0xCF, 0xFE, 0x7E,
|
||||
0xF0, 0xFF, 0x6C, 0x33, 0x66, 0xCC, 0xCC, 0xCC, 0xCC, 0xE6, 0x73, 0xCC,
|
||||
0x66, 0x73, 0x33, 0x33, 0x33, 0x76, 0xEC, 0x18, 0x18, 0xDB, 0xFF, 0x38,
|
||||
0x3C, 0x6E, 0x24, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18,
|
||||
0xFF, 0x60, 0xFF, 0xC0, 0x5F, 0x80, 0x06, 0x1C, 0x30, 0x61, 0xC3, 0x06,
|
||||
0x1C, 0x30, 0xE1, 0x83, 0x0E, 0x00, 0x3C, 0x7E, 0xE7, 0xE7, 0xC3, 0xC3,
|
||||
0xC3, 0xC3, 0xC3, 0xE3, 0xE7, 0x7E, 0x3C, 0x0C, 0x77, 0xFB, 0x4C, 0x30,
|
||||
0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x3C, 0x7F, 0x3B, 0xC8, 0xE0, 0x70, 0x38,
|
||||
0x38, 0x38, 0x38, 0x38, 0x38, 0x1F, 0xFF, 0xF8, 0x3C, 0xFE, 0xEF, 0x07,
|
||||
0x07, 0x1E, 0x3C, 0x3F, 0x07, 0x03, 0x87, 0xFF, 0xFE, 0x03, 0x01, 0xC0,
|
||||
0xF0, 0x3C, 0x1B, 0x0E, 0xC3, 0x31, 0x8C, 0xFF, 0xFF, 0xF0, 0x30, 0x0C,
|
||||
0x03, 0x00, 0x7E, 0x7E, 0xFE, 0xE0, 0xE0, 0xFE, 0xFF, 0x07, 0x03, 0x03,
|
||||
0x87, 0xFE, 0xFC, 0x0F, 0x1F, 0x9E, 0x5C, 0x0C, 0x06, 0xF3, 0xFD, 0xC6,
|
||||
0xC3, 0xE1, 0xB9, 0xCF, 0xE3, 0xE0, 0xFF, 0xFF, 0xFF, 0xF8, 0x0E, 0x03,
|
||||
0x01, 0xC0, 0x70, 0x38, 0x0E, 0x03, 0x01, 0xC0, 0x60, 0x38, 0x00, 0x3C,
|
||||
0x7E, 0xE7, 0xE3, 0xE7, 0x7E, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xFF, 0x7E,
|
||||
0x38, 0x7E, 0xEF, 0xC3, 0xC3, 0xC3, 0xEF, 0xFF, 0x33, 0x07, 0x06, 0xFE,
|
||||
0xF8, 0xFF, 0x80, 0x02, 0xFC, 0xFF, 0x80, 0x00, 0xFF, 0x60, 0x01, 0x07,
|
||||
0x1E, 0x78, 0xE0, 0xF0, 0x3E, 0x0F, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0xFF,
|
||||
0x80, 0xE0, 0x78, 0x1E, 0x07, 0x0F, 0x7C, 0xF0, 0x80, 0x3C, 0xFE, 0x67,
|
||||
0x03, 0x07, 0x0E, 0x1C, 0x18, 0x38, 0x00, 0x18, 0x38, 0x38, 0x03, 0x80,
|
||||
0x7F, 0xC3, 0x83, 0x98, 0x06, 0x67, 0xCF, 0x33, 0x3D, 0x8C, 0xF6, 0x33,
|
||||
0xD8, 0xCF, 0x3F, 0xEC, 0xF7, 0x18, 0x00, 0x78, 0x60, 0x7F, 0x80, 0x0F,
|
||||
0x00, 0xF0, 0x0F, 0x01, 0xF8, 0x1D, 0x81, 0x9C, 0x39, 0xC3, 0x8C, 0x3F,
|
||||
0xE7, 0xFE, 0x70, 0xE6, 0x07, 0xE0, 0x70, 0xFC, 0x3F, 0xEF, 0xFB, 0x87,
|
||||
0xE1, 0xBF, 0xEF, 0xF3, 0x9E, 0xE1, 0xF8, 0x7E, 0x3F, 0xFE, 0xFF, 0x00,
|
||||
0x0F, 0x0F, 0xF7, 0xF9, 0xC0, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38,
|
||||
0x07, 0x09, 0xFE, 0x1F, 0x80, 0xFC, 0x1F, 0xF3, 0xFF, 0x70, 0xEE, 0x0F,
|
||||
0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x3B, 0x8F, 0x7F, 0xCF, 0xE0, 0xFF,
|
||||
0xFF, 0xFE, 0x0C, 0x1F, 0xFF, 0xFF, 0xC1, 0x83, 0x07, 0xFF, 0xE0, 0xFF,
|
||||
0xFF, 0xFE, 0x0C, 0x18, 0x3F, 0x7E, 0xC1, 0x83, 0x06, 0x0C, 0x00, 0x0F,
|
||||
0x8F, 0xF7, 0xDD, 0xC0, 0xE0, 0x38, 0x0E, 0x7F, 0x9F, 0xE0, 0xF8, 0x37,
|
||||
0x0C, 0xFF, 0x1F, 0xC0, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xC0, 0xFF, 0xDC, 0xE7,
|
||||
0x39, 0xCE, 0x73, 0x9D, 0xFF, 0x80, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18,
|
||||
0xC6, 0x31, 0x9F, 0xFE, 0xE0, 0xC1, 0xF0, 0xEC, 0x73, 0x38, 0xDC, 0x37,
|
||||
0x0F, 0xC3, 0xF0, 0xCE, 0x33, 0x8C, 0x73, 0x0E, 0xC3, 0xC0, 0xE0, 0xE0,
|
||||
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xE0,
|
||||
0x7F, 0x83, 0xFC, 0x1F, 0xE1, 0xBF, 0x0D, 0xEC, 0x6F, 0x67, 0x7B, 0x33,
|
||||
0xCD, 0x9E, 0x7C, 0xF3, 0xC7, 0x9E, 0x3C, 0x71, 0x80, 0xE0, 0xFE, 0x1F,
|
||||
0xC3, 0xFC, 0x7F, 0x8F, 0xB9, 0xF3, 0x3E, 0x77, 0xC7, 0xF8, 0xFF, 0x0F,
|
||||
0xE1, 0xFC, 0x1E, 0x0F, 0x03, 0xFC, 0x79, 0xE7, 0x0E, 0xE0, 0x7E, 0x07,
|
||||
0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0x70, 0xE3, 0xFC, 0x1F, 0x80, 0xFC,
|
||||
0x7F, 0xBF, 0xFC, 0x7E, 0x3F, 0x1F, 0xFF, 0xFE, 0xF8, 0x70, 0x38, 0x1C,
|
||||
0x0E, 0x00, 0x0F, 0x03, 0xFC, 0x79, 0xE7, 0x0E, 0xE0, 0x7E, 0x07, 0xE0,
|
||||
0x7E, 0x07, 0xE0, 0x7E, 0x07, 0x70, 0xE3, 0xFC, 0x1F, 0x80, 0x3C, 0x01,
|
||||
0xE0, 0x0F, 0xFC, 0x1F, 0xE3, 0xFE, 0x71, 0xCE, 0x19, 0xC7, 0x3F, 0xC7,
|
||||
0xF0, 0xE7, 0x1C, 0xE3, 0x8E, 0x70, 0xEE, 0x1E, 0x3C, 0x7F, 0xF6, 0xE0,
|
||||
0xE0, 0xF0, 0x7C, 0x1E, 0x07, 0x07, 0x87, 0xFE, 0xFC, 0xFF, 0xFF, 0xFF,
|
||||
0xFC, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30,
|
||||
0x0C, 0x00, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F,
|
||||
0x07, 0xE0, 0xEC, 0x1D, 0xC7, 0x3F, 0xE1, 0xF8, 0xE0, 0x7C, 0x1D, 0x83,
|
||||
0xB8, 0x67, 0x1C, 0x63, 0x8E, 0x61, 0xCC, 0x1B, 0x83, 0x60, 0x7C, 0x07,
|
||||
0x80, 0xE0, 0xE1, 0xC3, 0xF0, 0xE1, 0xD8, 0x70, 0xEC, 0x7C, 0x67, 0x36,
|
||||
0x73, 0x9B, 0x38, 0xCD, 0x98, 0x6E, 0xEC, 0x36, 0x36, 0x1F, 0x1F, 0x07,
|
||||
0x8F, 0x03, 0xC7, 0x81, 0xC1, 0xC0, 0xE0, 0xE7, 0x0E, 0x39, 0xC3, 0x98,
|
||||
0x1F, 0x80, 0xF0, 0x0F, 0x00, 0xF0, 0x1F, 0x83, 0xB8, 0x39, 0xC7, 0x0E,
|
||||
0xE0, 0xF0, 0xE0, 0xEC, 0x19, 0xC7, 0x18, 0xC3, 0xB8, 0x36, 0x07, 0xC0,
|
||||
0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x7F, 0xDF, 0xF7, 0xF8,
|
||||
0x0E, 0x07, 0x03, 0x80, 0xE0, 0x70, 0x38, 0x0C, 0x07, 0x03, 0xFF, 0xFF,
|
||||
0xC0, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFF, 0xE0, 0xC1, 0x83,
|
||||
0x83, 0x06, 0x0E, 0x0C, 0x1C, 0x38, 0x30, 0x70, 0x60, 0xFF, 0xCE, 0x73,
|
||||
0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9F, 0xFF, 0x08, 0x03, 0x01, 0xE0, 0x78,
|
||||
0x33, 0x0C, 0xC6, 0x19, 0x86, 0xC0, 0xC0, 0xFE, 0xE3, 0x0E, 0x3C, 0x7F,
|
||||
0x47, 0x03, 0x3F, 0xFF, 0xE3, 0xC7, 0xFF, 0x7B, 0xE0, 0x70, 0x38, 0x1D,
|
||||
0xCF, 0xF7, 0x9F, 0x8F, 0xC3, 0xE1, 0xF1, 0xF8, 0xFF, 0xFE, 0xF0, 0x1F,
|
||||
0x7E, 0xF2, 0xE0, 0xE0, 0xE0, 0xE0, 0xE1, 0x7E, 0x3E, 0x03, 0x81, 0xC0,
|
||||
0xE7, 0x77, 0xFF, 0xBF, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xEF, 0xF7, 0xD8,
|
||||
0x1C, 0x3F, 0xB8, 0xDC, 0x7F, 0xFF, 0xFF, 0x81, 0xC1, 0x7F, 0x1F, 0x80,
|
||||
0x3F, 0x3E, 0x30, 0x3E, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x39, 0xBF, 0xFD, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0x7F, 0xBF,
|
||||
0xC0, 0xF0, 0x7F, 0xF7, 0xF0, 0xE0, 0x70, 0x38, 0x1D, 0xCF, 0xFF, 0x9F,
|
||||
0x8F, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x18, 0xFC, 0x7F, 0xFF, 0xFF,
|
||||
0xFE, 0x39, 0xC0, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xFF, 0xF0,
|
||||
0xE0, 0x38, 0x0E, 0x03, 0x87, 0xE3, 0xB9, 0xCE, 0xE3, 0xF0, 0xFE, 0x3F,
|
||||
0x8E, 0x73, 0x8E, 0xE1, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xCE, 0x39,
|
||||
0xFF, 0xFB, 0xCF, 0x3F, 0x1C, 0x7E, 0x38, 0xFC, 0x71, 0xF8, 0xE3, 0xF1,
|
||||
0xC7, 0xE3, 0x8F, 0xC7, 0x1C, 0xCE, 0x7F, 0xFC, 0xFC, 0x7E, 0x1F, 0x0F,
|
||||
0x87, 0xC3, 0xE1, 0xF0, 0xC0, 0x1C, 0x3F, 0xB8, 0xFC, 0x7E, 0x3F, 0x1F,
|
||||
0x8F, 0xC7, 0x7F, 0x1F, 0x00, 0xCE, 0x7F, 0xBC, 0xFC, 0x7E, 0x1F, 0x0F,
|
||||
0x8F, 0xC7, 0xFF, 0xFF, 0xB8, 0x1C, 0x0E, 0x07, 0x00, 0x39, 0xBF, 0xFD,
|
||||
0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0x7F, 0xBF, 0xC0, 0xE0, 0x70, 0x38,
|
||||
0x1C, 0xCF, 0xFF, 0xF7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC0, 0x3D, 0xFF,
|
||||
0x17, 0x0F, 0x87, 0xC3, 0xC3, 0xFF, 0xF8, 0x10, 0x60, 0xFF, 0xF3, 0x06,
|
||||
0x0C, 0x18, 0x30, 0x60, 0xF8, 0xF0, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F,
|
||||
0x1F, 0x8F, 0xC7, 0x7F, 0xBE, 0xC0, 0xE1, 0xF8, 0x76, 0x19, 0xCE, 0x33,
|
||||
0x0C, 0xC3, 0xF0, 0x78, 0x1E, 0x07, 0x80, 0xE3, 0x8F, 0xC7, 0x1D, 0x8B,
|
||||
0x33, 0xB6, 0xE7, 0x6D, 0xC6, 0xDB, 0x0D, 0x96, 0x1A, 0x3C, 0x3C, 0x78,
|
||||
0x38, 0xE0, 0xE1, 0xDC, 0xE3, 0xB8, 0xFC, 0x1E, 0x07, 0x83, 0xF0, 0xEC,
|
||||
0x73, 0xB8, 0x70, 0xE1, 0xF8, 0x77, 0x19, 0xCE, 0x33, 0x8E, 0xC3, 0xF0,
|
||||
0x78, 0x1E, 0x03, 0x80, 0xC0, 0x70, 0x78, 0x1C, 0x00, 0xFF, 0xFC, 0x38,
|
||||
0xE3, 0x86, 0x1C, 0x70, 0xFF, 0xFC, 0x04, 0x73, 0x8E, 0x38, 0xE3, 0xBC,
|
||||
0xF0, 0xE3, 0x8E, 0x38, 0xE1, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x83,
|
||||
0x86, 0x18, 0x61, 0x87, 0x0F, 0x3D, 0xC6, 0x18, 0x61, 0x8E, 0x30, 0x61,
|
||||
0xFF, 0x9F };
|
||||
|
||||
const GFXglyph NotoSans_Bold9pt7bGlyphs[] PROGMEM = {
|
||||
{ 0, 1, 1, 5, 0, 0 }, // 0x20 ' '
|
||||
{ 1, 3, 13, 5, 1, -12 }, // 0x21 '!'
|
||||
{ 6, 6, 5, 8, 1, -12 }, // 0x22 '"'
|
||||
{ 10, 11, 13, 11, 0, -12 }, // 0x23 '#'
|
||||
{ 28, 8, 14, 10, 1, -12 }, // 0x24 '$'
|
||||
{ 42, 14, 13, 16, 1, -12 }, // 0x25 '%'
|
||||
{ 65, 12, 13, 13, 1, -12 }, // 0x26 '&'
|
||||
{ 85, 3, 5, 5, 1, -12 }, // 0x27 '''
|
||||
{ 87, 4, 16, 6, 1, -12 }, // 0x28 '('
|
||||
{ 95, 4, 16, 6, 1, -12 }, // 0x29 ')'
|
||||
{ 103, 8, 8, 10, 1, -12 }, // 0x2A '*'
|
||||
{ 111, 8, 9, 10, 1, -10 }, // 0x2B '+'
|
||||
{ 120, 3, 4, 5, 1, -1 }, // 0x2C ','
|
||||
{ 122, 5, 2, 6, 0, -5 }, // 0x2D '-'
|
||||
{ 124, 3, 3, 5, 1, -2 }, // 0x2E '.'
|
||||
{ 126, 7, 13, 7, 0, -12 }, // 0x2F '/'
|
||||
{ 138, 8, 13, 10, 1, -12 }, // 0x30 '0'
|
||||
{ 151, 6, 13, 10, 1, -12 }, // 0x31 '1'
|
||||
{ 161, 9, 13, 10, 1, -12 }, // 0x32 '2'
|
||||
{ 176, 8, 13, 10, 1, -12 }, // 0x33 '3'
|
||||
{ 189, 10, 13, 10, 0, -12 }, // 0x34 '4'
|
||||
{ 206, 8, 13, 10, 1, -12 }, // 0x35 '5'
|
||||
{ 219, 9, 13, 10, 1, -12 }, // 0x36 '6'
|
||||
{ 234, 10, 13, 10, 0, -12 }, // 0x37 '7'
|
||||
{ 251, 8, 13, 10, 1, -12 }, // 0x38 '8'
|
||||
{ 264, 8, 13, 10, 1, -12 }, // 0x39 '9'
|
||||
{ 277, 3, 10, 5, 1, -9 }, // 0x3A ':'
|
||||
{ 281, 3, 12, 5, 1, -9 }, // 0x3B ';'
|
||||
{ 286, 8, 9, 10, 1, -10 }, // 0x3C '<'
|
||||
{ 295, 8, 5, 10, 1, -8 }, // 0x3D '='
|
||||
{ 300, 8, 9, 10, 1, -10 }, // 0x3E '>'
|
||||
{ 309, 8, 13, 8, 0, -12 }, // 0x3F '?'
|
||||
{ 322, 14, 14, 16, 1, -12 }, // 0x40 '@'
|
||||
{ 347, 12, 13, 12, 0, -12 }, // 0x41 'A'
|
||||
{ 367, 10, 13, 12, 1, -12 }, // 0x42 'B'
|
||||
{ 384, 10, 13, 11, 1, -12 }, // 0x43 'C'
|
||||
{ 401, 11, 13, 13, 1, -12 }, // 0x44 'D'
|
||||
{ 419, 7, 13, 10, 2, -12 }, // 0x45 'E'
|
||||
{ 431, 7, 13, 10, 2, -12 }, // 0x46 'F'
|
||||
{ 443, 10, 13, 13, 1, -12 }, // 0x47 'G'
|
||||
{ 460, 10, 13, 13, 2, -12 }, // 0x48 'H'
|
||||
{ 477, 5, 13, 7, 1, -12 }, // 0x49 'I'
|
||||
{ 486, 5, 17, 6, -1, -12 }, // 0x4A 'J'
|
||||
{ 497, 10, 13, 12, 2, -12 }, // 0x4B 'K'
|
||||
{ 514, 8, 13, 10, 1, -12 }, // 0x4C 'L'
|
||||
{ 527, 13, 13, 17, 2, -12 }, // 0x4D 'M'
|
||||
{ 549, 11, 13, 14, 2, -12 }, // 0x4E 'N'
|
||||
{ 567, 12, 13, 14, 1, -12 }, // 0x4F 'O'
|
||||
{ 587, 9, 13, 11, 1, -12 }, // 0x50 'P'
|
||||
{ 602, 12, 16, 14, 1, -12 }, // 0x51 'Q'
|
||||
{ 626, 11, 13, 12, 1, -12 }, // 0x52 'R'
|
||||
{ 644, 8, 13, 10, 1, -12 }, // 0x53 'S'
|
||||
{ 657, 10, 13, 10, 0, -12 }, // 0x54 'T'
|
||||
{ 674, 11, 13, 13, 1, -12 }, // 0x55 'U'
|
||||
{ 692, 11, 13, 11, 0, -12 }, // 0x56 'V'
|
||||
{ 710, 17, 13, 17, 0, -12 }, // 0x57 'W'
|
||||
{ 738, 12, 13, 12, 0, -12 }, // 0x58 'X'
|
||||
{ 758, 11, 13, 11, 0, -12 }, // 0x59 'Y'
|
||||
{ 776, 10, 13, 10, 0, -12 }, // 0x5A 'Z'
|
||||
{ 793, 4, 16, 6, 1, -12 }, // 0x5B '['
|
||||
{ 801, 7, 13, 7, 0, -12 }, // 0x5C '\'
|
||||
{ 813, 5, 16, 6, 0, -12 }, // 0x5D ']'
|
||||
{ 823, 10, 9, 10, 0, -12 }, // 0x5E '^'
|
||||
{ 835, 7, 1, 7, 0, 3 }, // 0x5F '_'
|
||||
{ 836, 5, 3, 6, 1, -13 }, // 0x60 '`'
|
||||
{ 838, 8, 10, 11, 1, -9 }, // 0x61 'a'
|
||||
{ 848, 9, 13, 11, 1, -12 }, // 0x62 'b'
|
||||
{ 863, 8, 10, 9, 1, -9 }, // 0x63 'c'
|
||||
{ 873, 9, 13, 11, 1, -12 }, // 0x64 'd'
|
||||
{ 888, 9, 10, 11, 1, -9 }, // 0x65 'e'
|
||||
{ 900, 8, 13, 7, 0, -12 }, // 0x66 'f'
|
||||
{ 913, 9, 14, 11, 1, -9 }, // 0x67 'g'
|
||||
{ 929, 9, 13, 11, 1, -12 }, // 0x68 'h'
|
||||
{ 944, 3, 13, 5, 1, -12 }, // 0x69 'i'
|
||||
{ 949, 5, 17, 5, -1, -12 }, // 0x6A 'j'
|
||||
{ 960, 10, 13, 11, 1, -12 }, // 0x6B 'k'
|
||||
{ 977, 3, 13, 5, 1, -12 }, // 0x6C 'l'
|
||||
{ 982, 15, 10, 17, 1, -9 }, // 0x6D 'm'
|
||||
{ 1001, 9, 10, 11, 1, -9 }, // 0x6E 'n'
|
||||
{ 1013, 9, 10, 11, 1, -9 }, // 0x6F 'o'
|
||||
{ 1025, 9, 14, 11, 1, -9 }, // 0x70 'p'
|
||||
{ 1041, 9, 14, 11, 1, -9 }, // 0x71 'q'
|
||||
{ 1057, 7, 10, 8, 1, -9 }, // 0x72 'r'
|
||||
{ 1066, 7, 10, 9, 1, -9 }, // 0x73 's'
|
||||
{ 1075, 7, 12, 8, 0, -11 }, // 0x74 't'
|
||||
{ 1086, 9, 10, 11, 1, -9 }, // 0x75 'u'
|
||||
{ 1098, 10, 10, 10, 0, -9 }, // 0x76 'v'
|
||||
{ 1111, 15, 10, 15, 0, -9 }, // 0x77 'w'
|
||||
{ 1130, 10, 10, 10, 0, -9 }, // 0x78 'x'
|
||||
{ 1143, 10, 14, 10, 0, -9 }, // 0x79 'y'
|
||||
{ 1161, 7, 10, 9, 1, -9 }, // 0x7A 'z'
|
||||
{ 1170, 6, 16, 7, 0, -12 }, // 0x7B '{'
|
||||
{ 1182, 2, 17, 10, 4, -12 }, // 0x7C '|'
|
||||
{ 1187, 6, 16, 7, 1, -12 }, // 0x7D '}'
|
||||
{ 1199, 8, 3, 10, 1, -7 } }; // 0x7E '~'
|
||||
|
||||
const GFXfont NotoSans_Bold9pt7b PROGMEM = {
|
||||
(uint8_t *)NotoSans_Bold9pt7bBitmaps,
|
||||
(GFXglyph *)NotoSans_Bold9pt7bGlyphs,
|
||||
0x20, 0x7E, 24 };
|
||||
|
||||
// Approx. 1874 bytes
|
||||
|
||||
#endif // NOTOSANSBOLD9PT7B_H
|
||||
@@ -54,12 +54,6 @@ static const uint8_t icon_alarm[] PROGMEM = {
|
||||
0x40,0x40, 0x20,0x80, 0x1F,0x00, 0x00,0x00, 0x20,0x40, 0x40,0x20,
|
||||
};
|
||||
|
||||
// ➡ Right arrow (Trace Route)
|
||||
static const uint8_t icon_trace[] PROGMEM = {
|
||||
0x00,0x00, 0x00,0x00, 0x00,0x80, 0x00,0xC0, 0x00,0xE0, 0xFF,0xF0,
|
||||
0xFF,0xF0, 0x00,0xE0, 0x00,0xC0, 0x00,0x80, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
|
||||
// 🔔 Bell — 7x8 status bar indicator (alarm enabled)
|
||||
// MSB-first, 1 byte per row
|
||||
#define BELL_ICON_W 7
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include "EmojiSprites.h"
|
||||
|
||||
enum VKBStatus { VKB_EDITING, VKB_SUBMITTED, VKB_CANCELLED };
|
||||
|
||||
@@ -39,7 +38,6 @@ enum VKBPurpose {
|
||||
VKB_WEB_LINK, // Web reader link number entry
|
||||
#endif
|
||||
VKB_TEXT_PAGE, // Text reader: go to page number
|
||||
VKB_TRACE_PATH, // Trace screen: type comma-separated path values
|
||||
};
|
||||
|
||||
class VirtualKeyboard {
|
||||
@@ -47,8 +45,7 @@ public:
|
||||
static const int MAX_TEXT = 140;
|
||||
|
||||
VirtualKeyboard() : _status(VKB_CANCELLED), _purpose(VKB_CHANNEL_MSG),
|
||||
_contextIdx(0), _textLen(0), _shifted(false), _symbols(false),
|
||||
_emojiMode(false), _emojiScroll(0) {
|
||||
_contextIdx(0), _textLen(0), _shifted(false), _symbols(false) {
|
||||
_text[0] = '\0';
|
||||
_label[0] = '\0';
|
||||
}
|
||||
@@ -59,8 +56,6 @@ public:
|
||||
_status = VKB_EDITING;
|
||||
_shifted = false;
|
||||
_symbols = false;
|
||||
_emojiMode = false;
|
||||
_emojiScroll = 0;
|
||||
_maxLen = (maxLen > 0 && maxLen < MAX_TEXT) ? maxLen : MAX_TEXT;
|
||||
|
||||
strncpy(_label, label, sizeof(_label) - 1);
|
||||
@@ -95,8 +90,13 @@ public:
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(0, 10, 128, 18); // Border
|
||||
|
||||
// Render text with inline emoji sprites
|
||||
renderTextField(display);
|
||||
display.setCursor(2, 12);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
|
||||
// Show text with cursor
|
||||
char dispBuf[MAX_TEXT + 2];
|
||||
snprintf(dispBuf, sizeof(dispBuf), "%s_", _text);
|
||||
display.print(dispBuf);
|
||||
|
||||
// Character count
|
||||
{
|
||||
@@ -111,11 +111,6 @@ public:
|
||||
// Separator
|
||||
display.drawRect(0, 30, 128, 1);
|
||||
|
||||
if (_emojiMode) {
|
||||
renderEmojiGrid(display);
|
||||
return;
|
||||
}
|
||||
|
||||
// --- Draw keyboard rows ---
|
||||
const char* const* layout = getLayout();
|
||||
|
||||
@@ -188,8 +183,6 @@ public:
|
||||
bool handleTap(int vx, int vy) {
|
||||
if (_status != VKB_EDITING) return false;
|
||||
|
||||
if (_emojiMode) return handleEmojiTap(vx, vy);
|
||||
|
||||
// Check keyboard rows 0-2
|
||||
const char* const* layout = getLayout();
|
||||
|
||||
@@ -260,169 +253,6 @@ private:
|
||||
char _label[40];
|
||||
bool _shifted;
|
||||
bool _symbols;
|
||||
bool _emojiMode;
|
||||
int _emojiScroll;
|
||||
|
||||
// Emoji grid constants (virtual coords)
|
||||
static const int EMJ_COLS = 8;
|
||||
static const int EMJ_CELL = 15; // 12px sprite + 3px gap
|
||||
static const int EMJ_GRID_X = 4;
|
||||
static const int EMJ_GRID_Y = 34;
|
||||
static const int EMJ_VIS_ROWS = 5;
|
||||
|
||||
int emojiTotalRows() const { return (EMOJI_COUNT + EMJ_COLS - 1) / EMJ_COLS; }
|
||||
int emojiMaxScroll() const { int m = emojiTotalRows() - EMJ_VIS_ROWS; return m < 0 ? 0 : m; }
|
||||
|
||||
void renderEmojiGrid(DisplayDriver& display) {
|
||||
display.setTextSize(0);
|
||||
|
||||
for (int vr = 0; vr < EMJ_VIS_ROWS; vr++) {
|
||||
int absRow = _emojiScroll + vr;
|
||||
if (absRow >= emojiTotalRows()) break;
|
||||
|
||||
for (int col = 0; col < EMJ_COLS; col++) {
|
||||
int idx = absRow * EMJ_COLS + col;
|
||||
if (idx >= EMOJI_COUNT) break;
|
||||
|
||||
int cx = EMJ_GRID_X + col * EMJ_CELL;
|
||||
int cy = EMJ_GRID_Y + vr * EMJ_CELL;
|
||||
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
const uint8_t* sprite = (const uint8_t*)pgm_read_ptr(&EMOJI_SPRITES_LG[idx]);
|
||||
if (sprite) {
|
||||
display.drawXbm(cx + 1, cy + 1, sprite, EMOJI_LG_W, EMOJI_LG_H);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Footer: [Back] [▲] page/total [▼]
|
||||
int fy = EMJ_GRID_Y + EMJ_VIS_ROWS * EMJ_CELL + 2;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(0, fy - 1, 128, 1);
|
||||
|
||||
// Back button (inverted)
|
||||
display.fillRect(4, fy + 1, 30, 12);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
int bw = display.getTextWidth("Back");
|
||||
display.setCursor(4 + (30 - bw) / 2, fy + 2);
|
||||
display.print("Back");
|
||||
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
|
||||
// Scroll arrows (only if scrollable)
|
||||
if (emojiTotalRows() > EMJ_VIS_ROWS) {
|
||||
// Up arrow
|
||||
if (_emojiScroll > 0) {
|
||||
display.fillRect(50, fy + 1, 12, 12);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
display.setCursor(53, fy + 2);
|
||||
display.print("^");
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
}
|
||||
|
||||
// Page info
|
||||
char pg[8];
|
||||
snprintf(pg, sizeof(pg), "%d/%d", _emojiScroll + 1, emojiMaxScroll() + 1);
|
||||
int pw = display.getTextWidth(pg);
|
||||
display.setCursor(75 - pw / 2, fy + 2);
|
||||
display.print(pg);
|
||||
|
||||
// Down arrow
|
||||
if (_emojiScroll < emojiMaxScroll()) {
|
||||
display.fillRect(90, fy + 1, 12, 12);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
display.setCursor(93, fy + 2);
|
||||
display.print("v");
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool handleEmojiTap(int vx, int vy) {
|
||||
int fy = EMJ_GRID_Y + EMJ_VIS_ROWS * EMJ_CELL + 2;
|
||||
|
||||
// Footer area
|
||||
if (vy >= fy) {
|
||||
if (vx >= 4 && vx < 34) {
|
||||
// Back button
|
||||
_emojiMode = false;
|
||||
return true;
|
||||
}
|
||||
if (vx >= 50 && vx < 62 && _emojiScroll > 0) {
|
||||
_emojiScroll--;
|
||||
return true;
|
||||
}
|
||||
if (vx >= 90 && vx < 102 && _emojiScroll < emojiMaxScroll()) {
|
||||
_emojiScroll++;
|
||||
return true;
|
||||
}
|
||||
return true; // Consume tap in footer
|
||||
}
|
||||
|
||||
// Grid area
|
||||
if (vy >= EMJ_GRID_Y && vy < EMJ_GRID_Y + EMJ_VIS_ROWS * EMJ_CELL) {
|
||||
int col = (vx - EMJ_GRID_X) / EMJ_CELL;
|
||||
int vr = (vy - EMJ_GRID_Y) / EMJ_CELL;
|
||||
if (col < 0 || col >= EMJ_COLS || vr < 0 || vr >= EMJ_VIS_ROWS) return true;
|
||||
|
||||
int idx = (_emojiScroll + vr) * EMJ_COLS + col;
|
||||
if (idx >= 0 && idx < EMOJI_COUNT) {
|
||||
insertEmoji(idx);
|
||||
_emojiMode = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return true; // Consume any tap while in emoji mode
|
||||
}
|
||||
|
||||
void insertEmoji(int idx) {
|
||||
// Insert as UTF-8 directly (not escape bytes) so sent messages are valid
|
||||
uint8_t utf8[8];
|
||||
int len = emojiEncodeUtf8(EMOJI_CODEPOINTS[idx].cp, utf8);
|
||||
if (EMOJI_CODEPOINTS[idx].cp2 != 0)
|
||||
len += emojiEncodeUtf8(EMOJI_CODEPOINTS[idx].cp2, utf8 + len);
|
||||
if (_textLen + len > _maxLen) return;
|
||||
memcpy(_text + _textLen, utf8, len);
|
||||
_textLen += len;
|
||||
_text[_textLen] = '\0';
|
||||
}
|
||||
|
||||
// Render text field with inline emoji sprites (10×10)
|
||||
void renderTextField(DisplayDriver& display) {
|
||||
// Convert UTF-8 emoji to escape bytes for sprite lookup
|
||||
char sanitized[MAX_TEXT + 1];
|
||||
emojiSanitize(_text, sanitized, sizeof(sanitized));
|
||||
|
||||
int x = 2;
|
||||
int maxX = 124;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.setTextSize(0);
|
||||
|
||||
for (int i = 0; sanitized[i] && x < maxX; i++) {
|
||||
uint8_t b = (uint8_t)sanitized[i];
|
||||
if (b == EMOJI_PAD_BYTE) continue;
|
||||
|
||||
if (isEmojiEscape(b)) {
|
||||
const uint8_t* sprite = getEmojiSpriteSm(b);
|
||||
if (sprite && x + EMOJI_SM_W < maxX) {
|
||||
display.drawXbm(x, 14, sprite, EMOJI_SM_W, EMOJI_SM_H);
|
||||
x += EMOJI_SM_W + 1;
|
||||
}
|
||||
} else {
|
||||
char ch[2] = { (char)b, '\0' };
|
||||
display.setCursor(x, 12);
|
||||
display.print(ch);
|
||||
x += display.getTextWidth(ch);
|
||||
}
|
||||
}
|
||||
|
||||
// Blinking cursor
|
||||
if (x < maxX) {
|
||||
display.setCursor(x, 12);
|
||||
display.print("_");
|
||||
}
|
||||
}
|
||||
|
||||
// Layout constants (virtual coords)
|
||||
static const int KEY_W = 11;
|
||||
@@ -431,7 +261,7 @@ private:
|
||||
static const int KEY_START_Y = 34;
|
||||
|
||||
// Key layouts — rows 0-2 as char arrays
|
||||
// Special: ^ = shift, < = backspace, \x01 = sym toggle, \x02 = emoji, > = enter, ~ = space
|
||||
// Special: ^ = shift, < = backspace, # = symbols, > = enter, ~ = space
|
||||
const char* const* getLayout() const {
|
||||
static const char* const lower[3] = { "qwertyuiop", "asdfghjkl", "^zxcvbnm<" };
|
||||
static const char* const upper[3] = { "QWERTYUIOP", "ASDFGHJKL", "^ZXCVBNM<" };
|
||||
@@ -439,22 +269,26 @@ private:
|
||||
return _symbols ? syms : (_shifted ? upper : lower);
|
||||
}
|
||||
|
||||
// Row 4: variable-width keys [#/ABC] [,] [$] [SPACE] [.] [Enter]
|
||||
// Row 4: variable-width keys [#/ABC] [,] [SPACE] [.] [Enter]
|
||||
// Defined by physical zones, not the char-array approach
|
||||
struct R4Key { int x; int w; char ch; const char* label; };
|
||||
|
||||
void drawRow4(DisplayDriver& display, int y) {
|
||||
// # or ABC toggle: x=4, w=20
|
||||
// comma: x=26, w=11
|
||||
// space: x=39, w=50
|
||||
// period: x=91, w=11
|
||||
// enter: x=104, w=20
|
||||
const R4Key keys[] = {
|
||||
{ 4, 20, '\x01', _symbols ? "ABC" : "123" },
|
||||
{ 26, 11, ',', "," },
|
||||
{ 39, 11, '\x02', "$" },
|
||||
{ 52, 37, '~', "space" },
|
||||
{ 39, 50, '~', "space" },
|
||||
{ 91, 11, '.', "." },
|
||||
{ 104, 20, '>', "Send" }
|
||||
};
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
bool special = (keys[i].ch == '\x01' || keys[i].ch == '>' || keys[i].ch == '\x02');
|
||||
for (int i = 0; i < 5; i++) {
|
||||
bool special = (keys[i].ch == '\x01' || keys[i].ch == '>');
|
||||
if (special) {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(keys[i].x, y + 1, keys[i].w, KEY_H - 1);
|
||||
@@ -478,12 +312,11 @@ private:
|
||||
const R4Key keys[] = {
|
||||
{ 4, 20, '\x01', nullptr },
|
||||
{ 26, 11, ',', nullptr },
|
||||
{ 39, 11, '\x02', nullptr },
|
||||
{ 52, 37, '~', nullptr },
|
||||
{ 39, 50, '~', nullptr },
|
||||
{ 91, 11, '.', nullptr },
|
||||
{ 104, 20, '>', nullptr }
|
||||
};
|
||||
for (int i = 0; i < 6; i++) {
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if (vx >= keys[i].x && vx < keys[i].x + keys[i].w) {
|
||||
processKey(keys[i].ch);
|
||||
return true;
|
||||
@@ -501,17 +334,10 @@ private:
|
||||
// Symbol/letter toggle
|
||||
_symbols = !_symbols;
|
||||
_shifted = false;
|
||||
} else if (ch == '\x02') {
|
||||
// Emoji picker toggle
|
||||
_emojiMode = !_emojiMode;
|
||||
_emojiScroll = 0;
|
||||
} else if (ch == '<') {
|
||||
// Backspace — UTF-8 aware (walk back past continuation bytes 10xxxxxx)
|
||||
// Backspace
|
||||
if (_textLen > 0) {
|
||||
_textLen--;
|
||||
while (_textLen > 0 && ((uint8_t)_text[_textLen] & 0xC0) == 0x80) {
|
||||
_textLen--;
|
||||
}
|
||||
_text[_textLen] = '\0';
|
||||
}
|
||||
} else if (ch == '>') {
|
||||
|
||||
@@ -100,10 +100,6 @@ struct TelemetryData {
|
||||
char apn[40];
|
||||
char oper[24];
|
||||
bool mqtt_connected;
|
||||
// Routing settings (v1.8+)
|
||||
uint8_t loop_detect; // 0=off, 1=minimal, 2=moderate, 3=strict
|
||||
uint8_t path_hash_mode; // 0=1-byte, 1=2-byte, 2=3-byte
|
||||
uint8_t flood_max; // max flood hop count (0-64)
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -218,6 +214,7 @@ private:
|
||||
int httpGet(const char* url);
|
||||
bool httpReadChunk(int offset, int len, uint8_t* dest, int* bytesRead);
|
||||
void httpTerm();
|
||||
void otaPublish(const char* msg);
|
||||
int readRawBytes(uint8_t* dest, int count, uint32_t timeout_ms);
|
||||
|
||||
// --- Task ---
|
||||
|
||||
@@ -4,23 +4,23 @@
|
||||
/* ------------------------------ Config -------------------------------- */
|
||||
|
||||
#ifndef LORA_FREQ
|
||||
#define LORA_FREQ 923.125
|
||||
#define LORA_FREQ 915.0
|
||||
#endif
|
||||
#ifndef LORA_BW
|
||||
#define LORA_BW 62.5
|
||||
#define LORA_BW 250
|
||||
#endif
|
||||
#ifndef LORA_SF
|
||||
#define LORA_SF 8
|
||||
#define LORA_SF 10
|
||||
#endif
|
||||
#ifndef LORA_CR
|
||||
#define LORA_CR 8
|
||||
#define LORA_CR 5
|
||||
#endif
|
||||
#ifndef LORA_TX_POWER
|
||||
#define LORA_TX_POWER 22
|
||||
#define LORA_TX_POWER 20
|
||||
#endif
|
||||
|
||||
#ifndef ADVERT_NAME
|
||||
#define ADVERT_NAME "remote-repeater"
|
||||
#define ADVERT_NAME "repeater"
|
||||
#endif
|
||||
#ifndef ADVERT_LAT
|
||||
#define ADVERT_LAT 0.0
|
||||
@@ -501,51 +501,6 @@ bool MyMesh::filterRecvFloodPacket(mesh::Packet* pkt) {
|
||||
} else {
|
||||
recv_pkt_region = NULL;
|
||||
}
|
||||
|
||||
// --- Loop detection (MeshCore v1.14+) ---
|
||||
// Walk the packet's path and count how many times our own hash appears.
|
||||
// If it exceeds the threshold for the configured detection level, drop
|
||||
// the packet to break routing loops caused by misbehaving nodes.
|
||||
if (_prefs.loop_detect != LOOP_DETECT_OFF) {
|
||||
uint8_t hops = pkt->path_len & 0x3F;
|
||||
uint8_t bph = (pkt->path_len >> 6) + 1; // bytes per hop (1, 2, or 3)
|
||||
|
||||
if (hops > 0 && hops * bph <= MAX_PATH_SIZE) {
|
||||
// Count self-hash appearances in the path
|
||||
int selfCount = 0;
|
||||
for (uint8_t i = 0; i < hops; i++) {
|
||||
if (self_id.isHashMatch(&pkt->path[i * bph], bph)) {
|
||||
selfCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Threshold depends on detection level and path hash size
|
||||
// 1-byte 2-byte 3-byte
|
||||
// minimal: 4 2 1
|
||||
// moderate: 2 1 1
|
||||
// strict: 1 1 1
|
||||
int threshold;
|
||||
switch (_prefs.loop_detect) {
|
||||
case LOOP_DETECT_MINIMAL:
|
||||
threshold = (bph == 1) ? 4 : (bph == 2) ? 2 : 1;
|
||||
break;
|
||||
case LOOP_DETECT_MODERATE:
|
||||
threshold = (bph == 1) ? 2 : 1;
|
||||
break;
|
||||
case LOOP_DETECT_STRICT:
|
||||
default:
|
||||
threshold = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (selfCount >= threshold) {
|
||||
MESH_DEBUG_PRINTLN("Loop detected: self-hash appears %d times (threshold %d, bph=%d, mode=%d) — dropping",
|
||||
selfCount, threshold, (int)bph, (int)_prefs.loop_detect);
|
||||
return true; // Drop the packet
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// do normal processing
|
||||
return false;
|
||||
}
|
||||
@@ -579,10 +534,10 @@ void MyMesh::onAnonDataRecv(mesh::Packet *packet, const uint8_t *secret, const m
|
||||
// let this sender know path TO here, so they can use sendDirect(), and ALSO encode the response
|
||||
mesh::Packet* path = createPathReturn(sender, secret, packet->path, packet->path_len,
|
||||
PAYLOAD_TYPE_RESPONSE, reply_data, reply_len);
|
||||
if (path) sendFlood(path, (uint32_t)SERVER_RESPONSE_DELAY, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
if (path) sendFlood(path, SERVER_RESPONSE_DELAY);
|
||||
} else if (reply_path_len < 0) {
|
||||
mesh::Packet* reply = createDatagram(PAYLOAD_TYPE_RESPONSE, sender, secret, reply_data, reply_len);
|
||||
if (reply) sendFlood(reply, (uint32_t)SERVER_RESPONSE_DELAY, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
if (reply) sendFlood(reply, SERVER_RESPONSE_DELAY);
|
||||
} else {
|
||||
mesh::Packet* reply = createDatagram(PAYLOAD_TYPE_RESPONSE, sender, secret, reply_data, reply_len);
|
||||
if (reply) sendDirect(reply, reply_path, reply_path_len, SERVER_RESPONSE_DELAY);
|
||||
@@ -654,7 +609,7 @@ void MyMesh::onPeerDataRecv(mesh::Packet *packet, uint8_t type, int sender_idx,
|
||||
// let this sender know path TO here, so they can use sendDirect(), and ALSO encode the response
|
||||
mesh::Packet *path = createPathReturn(client->id, secret, packet->path, packet->path_len,
|
||||
PAYLOAD_TYPE_RESPONSE, reply_data, reply_len);
|
||||
if (path) sendFlood(path, (uint32_t)SERVER_RESPONSE_DELAY, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
if (path) sendFlood(path, SERVER_RESPONSE_DELAY);
|
||||
} else {
|
||||
mesh::Packet *reply =
|
||||
createDatagram(PAYLOAD_TYPE_RESPONSE, client->id, secret, reply_data, reply_len);
|
||||
@@ -662,7 +617,7 @@ void MyMesh::onPeerDataRecv(mesh::Packet *packet, uint8_t type, int sender_idx,
|
||||
if (client->out_path_len >= 0) { // we have an out_path, so send DIRECT
|
||||
sendDirect(reply, client->out_path, client->out_path_len, SERVER_RESPONSE_DELAY);
|
||||
} else {
|
||||
sendFlood(reply, (uint32_t)SERVER_RESPONSE_DELAY, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
sendFlood(reply, SERVER_RESPONSE_DELAY);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -693,7 +648,7 @@ void MyMesh::onPeerDataRecv(mesh::Packet *packet, uint8_t type, int sender_idx,
|
||||
mesh::Packet *ack = createAck(ack_hash);
|
||||
if (ack) {
|
||||
if (client->out_path_len < 0) {
|
||||
sendFlood(ack, (uint32_t)TXT_ACK_DELAY, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
sendFlood(ack, TXT_ACK_DELAY);
|
||||
} else {
|
||||
sendDirect(ack, client->out_path, client->out_path_len, TXT_ACK_DELAY);
|
||||
}
|
||||
@@ -721,7 +676,7 @@ void MyMesh::onPeerDataRecv(mesh::Packet *packet, uint8_t type, int sender_idx,
|
||||
auto reply = createDatagram(PAYLOAD_TYPE_TXT_MSG, client->id, secret, temp, 5 + text_len);
|
||||
if (reply) {
|
||||
if (client->out_path_len < 0) {
|
||||
sendFlood(reply, (uint32_t)CLI_REPLY_DELAY_MILLIS, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
sendFlood(reply, CLI_REPLY_DELAY_MILLIS);
|
||||
} else {
|
||||
sendDirect(reply, client->out_path, client->out_path_len, CLI_REPLY_DELAY_MILLIS);
|
||||
}
|
||||
@@ -846,8 +801,6 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
|
||||
_prefs.advert_loc_policy = ADVERT_LOC_PREFS;
|
||||
|
||||
_prefs.adc_multiplier = 0.0f; // 0.0f means use default board multiplier
|
||||
_prefs.path_hash_mode = 0; // 1-byte path hashes (legacy default)
|
||||
_prefs.loop_detect = LOOP_DETECT_OFF; // no loop detection by default
|
||||
}
|
||||
|
||||
void MyMesh::begin(FILESYSTEM *fs) {
|
||||
@@ -904,7 +857,7 @@ bool MyMesh::formatFileSystem() {
|
||||
void MyMesh::sendSelfAdvertisement(int delay_millis) {
|
||||
mesh::Packet *pkt = createSelfAdvert();
|
||||
if (pkt) {
|
||||
sendFlood(pkt, (uint32_t)delay_millis, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
sendFlood(pkt, delay_millis);
|
||||
} else {
|
||||
MESH_DEBUG_PRINTLN("ERROR: unable to create advertisement packet!");
|
||||
}
|
||||
@@ -1166,26 +1119,6 @@ void MyMesh::handleCommand(uint32_t sender_timestamp, char *command, char *reply
|
||||
} else if (n == 2 && strcmp(parts[1], "home") == 0) {
|
||||
auto home = region_map.getHomeRegion();
|
||||
sprintf(reply, " home is %s", home ? home->name : "*");
|
||||
} else if (n >= 3 && strcmp(parts[1], "default") == 0) {
|
||||
// "region default <name>" — set default scope
|
||||
auto def = region_map.findByNamePrefix(parts[2]);
|
||||
if (def) {
|
||||
region_map.setDefaultRegion(def);
|
||||
sprintf(reply, " default is now %s", def->name);
|
||||
} else {
|
||||
// empty or unrecognised name → clear default scope
|
||||
region_map.setDefaultRegion(NULL);
|
||||
strcpy(reply, " default cleared");
|
||||
}
|
||||
} else if (n == 2 && strcmp(parts[1], "default") == 0) {
|
||||
auto def = region_map.getDefaultRegion();
|
||||
sprintf(reply, " default is %s", def ? def->name : "(none)");
|
||||
} else if (n >= 3 && strcmp(parts[1], "list") == 0 && sender_timestamp == 0) {
|
||||
// "region list allowed" / "region list denied" — serial only
|
||||
bool denied = (strcmp(parts[2], "denied") == 0);
|
||||
char buf[256];
|
||||
region_map.exportNamesTo(buf, sizeof(buf), REGION_DENY_FLOOD, denied);
|
||||
Serial.printf("Regions (%s): %s\n", parts[2], buf);
|
||||
} else if (n >= 3 && strcmp(parts[1], "put") == 0) {
|
||||
auto parent = n >= 4 ? region_map.findByNamePrefix(parts[3]) : ®ion_map.getWildcard();
|
||||
if (parent == NULL) {
|
||||
@@ -1212,37 +1145,6 @@ void MyMesh::handleCommand(uint32_t sender_timestamp, char *command, char *reply
|
||||
} else {
|
||||
strcpy(reply, "Err - ??");
|
||||
}
|
||||
} else if (memcmp(command, "set path.hash.mode ", 19) == 0) {
|
||||
int mode = atoi(&command[19]);
|
||||
if (mode >= 0 && mode <= 2) {
|
||||
_prefs.path_hash_mode = (uint8_t)mode;
|
||||
savePrefs();
|
||||
sprintf(reply, "OK - path.hash.mode = %d (%d-byte hashes)", mode, mode + 1);
|
||||
} else {
|
||||
strcpy(reply, "ERR: mode must be 0, 1, or 2");
|
||||
}
|
||||
} else if (strcmp(command, "get path.hash.mode") == 0) {
|
||||
sprintf(reply, "> %d (%d-byte path hashes)", _prefs.path_hash_mode, _prefs.path_hash_mode + 1);
|
||||
} else if (memcmp(command, "set loop.detect ", 16) == 0) {
|
||||
const char* val = &command[16];
|
||||
if (strcmp(val, "off") == 0) {
|
||||
_prefs.loop_detect = LOOP_DETECT_OFF;
|
||||
} else if (strcmp(val, "minimal") == 0) {
|
||||
_prefs.loop_detect = LOOP_DETECT_MINIMAL;
|
||||
} else if (strcmp(val, "moderate") == 0) {
|
||||
_prefs.loop_detect = LOOP_DETECT_MODERATE;
|
||||
} else if (strcmp(val, "strict") == 0) {
|
||||
_prefs.loop_detect = LOOP_DETECT_STRICT;
|
||||
} else {
|
||||
strcpy(reply, "ERR: use off, minimal, moderate, or strict");
|
||||
return;
|
||||
}
|
||||
savePrefs();
|
||||
sprintf(reply, "OK - loop.detect = %s", val);
|
||||
} else if (strcmp(command, "get loop.detect") == 0) {
|
||||
const char* labels[] = { "off", "minimal", "moderate", "strict" };
|
||||
uint8_t mode = _prefs.loop_detect <= 3 ? _prefs.loop_detect : 0;
|
||||
sprintf(reply, "> %s", labels[mode]);
|
||||
} else{
|
||||
_cli.handleCommand(sender_timestamp, command, reply); // common CLI commands
|
||||
}
|
||||
@@ -1257,7 +1159,7 @@ void MyMesh::loop() {
|
||||
|
||||
if (next_flood_advert && millisHasNowPassed(next_flood_advert)) {
|
||||
mesh::Packet *pkt = createSelfAdvert();
|
||||
if (pkt) sendFlood(pkt, (uint32_t)0, (uint8_t)(_prefs.path_hash_mode + 1));
|
||||
if (pkt) sendFlood(pkt);
|
||||
|
||||
updateFloodAdvertTimer(); // schedule next flood advert
|
||||
updateAdvertTimer(); // also schedule local advert (so they don't overlap)
|
||||
|
||||
@@ -68,11 +68,11 @@ struct NeighbourInfo {
|
||||
};
|
||||
|
||||
#ifndef FIRMWARE_BUILD_DATE
|
||||
#define FIRMWARE_BUILD_DATE "3 April 2026"
|
||||
#define FIRMWARE_BUILD_DATE "30 Nov 2025"
|
||||
#endif
|
||||
|
||||
#ifndef FIRMWARE_VERSION
|
||||
#define FIRMWARE_VERSION "v0.2"
|
||||
#define FIRMWARE_VERSION "v1.11.0"
|
||||
#endif
|
||||
|
||||
#define FIRMWARE_ROLE "repeater"
|
||||
|
||||
@@ -4,13 +4,6 @@
|
||||
|
||||
#ifdef HAS_4G_MODEM
|
||||
#include "CellularMQTT.h"
|
||||
#endif
|
||||
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
#include "WiFiMQTT.h"
|
||||
#endif
|
||||
|
||||
#if defined(HAS_4G_MODEM) || defined(MECK_WIFI_REMOTE)
|
||||
#define AUTO_OFF_DISABLED true
|
||||
#else
|
||||
#define AUTO_OFF_DISABLED false
|
||||
@@ -64,10 +57,8 @@ void UITask::renderCurrScreen() {
|
||||
_display->setCursor((_display->width() - versionWidth) / 2, 22);
|
||||
_display->print(_version_info);
|
||||
|
||||
#if defined(HAS_4G_MODEM)
|
||||
#ifdef HAS_4G_MODEM
|
||||
const char* node_type = "< Remote Repeater >";
|
||||
#elif defined(MECK_WIFI_REMOTE)
|
||||
const char* node_type = "< WiFi Repeater >";
|
||||
#else
|
||||
const char* node_type = "< Repeater >";
|
||||
#endif
|
||||
@@ -75,7 +66,7 @@ void UITask::renderCurrScreen() {
|
||||
_display->setCursor((_display->width() - typeWidth) / 2, 35);
|
||||
_display->print(node_type);
|
||||
} else {
|
||||
// Home screen — node info + connection status
|
||||
// Home screen — node info + cellular status
|
||||
_display->setCursor(0, 0);
|
||||
_display->setTextSize(1);
|
||||
_display->setColor(DisplayDriver::GREEN);
|
||||
@@ -90,7 +81,6 @@ void UITask::renderCurrScreen() {
|
||||
sprintf(tmp, "BW: %03.2f CR: %d", _node_prefs->bw, _node_prefs->cr);
|
||||
_display->print(tmp);
|
||||
|
||||
// --- Cellular status (4G variant) ---
|
||||
#ifdef HAS_4G_MODEM
|
||||
int y = 44;
|
||||
|
||||
@@ -119,55 +109,11 @@ void UITask::renderCurrScreen() {
|
||||
_display->print(tmp);
|
||||
y += 10;
|
||||
|
||||
const char* ip4g = cellularMQTT.getIPAddress();
|
||||
if (ip4g[0]) {
|
||||
const char* ip = cellularMQTT.getIPAddress();
|
||||
if (ip[0]) {
|
||||
_display->setColor(DisplayDriver::LIGHT);
|
||||
_display->setCursor(0, y);
|
||||
sprintf(tmp, "IP: %s", ip4g);
|
||||
_display->print(tmp);
|
||||
y += 10;
|
||||
}
|
||||
|
||||
uint32_t upSec = millis() / 1000;
|
||||
uint32_t upH = upSec / 3600;
|
||||
uint32_t upM = (upSec % 3600) / 60;
|
||||
_display->setColor(DisplayDriver::LIGHT);
|
||||
_display->setCursor(0, y);
|
||||
sprintf(tmp, "Up: %luh %lum Heap:%dk", upH, upM, ESP.getFreeHeap() / 1024);
|
||||
_display->print(tmp);
|
||||
#endif
|
||||
|
||||
// --- WiFi status (WiFi variant) ---
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
int y = 44;
|
||||
|
||||
_display->setCursor(0, y);
|
||||
_display->setColor(DisplayDriver::LIGHT);
|
||||
sprintf(tmp, "WiFi: %s", wifiMQTT.stateString());
|
||||
_display->print(tmp);
|
||||
y += 10;
|
||||
|
||||
_display->setCursor(0, y);
|
||||
sprintf(tmp, "RSSI: %d (%d bars)", wifiMQTT.getRSSI(), wifiMQTT.getSignalBars());
|
||||
_display->print(tmp);
|
||||
y += 10;
|
||||
|
||||
_display->setCursor(0, y);
|
||||
sprintf(tmp, "SSID: %.16s", wifiMQTT.getSSID());
|
||||
_display->print(tmp);
|
||||
y += 10;
|
||||
|
||||
_display->setCursor(0, y);
|
||||
_display->setColor(wifiMQTT.isConnected() ? DisplayDriver::GREEN : DisplayDriver::YELLOW);
|
||||
sprintf(tmp, "MQTT: %s", wifiMQTT.isConnected() ? "Connected" : "---");
|
||||
_display->print(tmp);
|
||||
y += 10;
|
||||
|
||||
const char* ipWifi = wifiMQTT.getIPAddress();
|
||||
if (ipWifi[0]) {
|
||||
_display->setColor(DisplayDriver::LIGHT);
|
||||
_display->setCursor(0, y);
|
||||
sprintf(tmp, "IP: %s", ipWifi);
|
||||
sprintf(tmp, "IP: %s", ip);
|
||||
_display->print(tmp);
|
||||
y += 10;
|
||||
}
|
||||
|
||||
@@ -78,6 +78,17 @@ void CellularMQTT::updateTelemetry(const TelemetryData& data) {
|
||||
}
|
||||
}
|
||||
|
||||
void CellularMQTT::requestOTA(const char* url) {
|
||||
if (_state == CellState::OTA_IN_PROGRESS) {
|
||||
Serial.println("[OTA] Already in progress");
|
||||
return;
|
||||
}
|
||||
strncpy(_otaUrl, url, sizeof(_otaUrl) - 1);
|
||||
_otaUrl[sizeof(_otaUrl) - 1] = '\0';
|
||||
_otaPending = true;
|
||||
Serial.printf("[OTA] Requested: %s\n", url);
|
||||
}
|
||||
|
||||
int CellularMQTT::getSignalBars() const {
|
||||
if (_csq == 99 || _csq == 0) return 0;
|
||||
if (_csq <= 5) return 1;
|
||||
@@ -104,25 +115,8 @@ const char* CellularMQTT::stateString() const {
|
||||
}
|
||||
}
|
||||
|
||||
void CellularMQTT::requestOTA(const char* url) {
|
||||
if (_state == CellState::OTA_IN_PROGRESS) {
|
||||
Serial.println("[OTA] Already in progress");
|
||||
return;
|
||||
}
|
||||
strncpy(_otaUrl, url, sizeof(_otaUrl) - 1);
|
||||
_otaUrl[sizeof(_otaUrl) - 1] = '\0';
|
||||
_otaPending = true;
|
||||
Serial.printf("[OTA] Requested: %s\n", url);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Config file: /remote/mqtt.cfg
|
||||
// Format (one value per line):
|
||||
// broker.hivemq.cloud
|
||||
// 8883
|
||||
// myusername
|
||||
// mypassword
|
||||
// mydeviceid (optional — auto-generated from MAC if omitted)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool CellularMQTT::loadConfig(MQTTConfig& cfg) {
|
||||
@@ -146,7 +140,6 @@ bool CellularMQTT::loadConfig(MQTTConfig& cfg) {
|
||||
line = f.readStringUntil('\n'); line.trim();
|
||||
strncpy(cfg.password, line.c_str(), sizeof(cfg.password) - 1);
|
||||
|
||||
// Optional device ID
|
||||
if (f.available()) {
|
||||
line = f.readStringUntil('\n'); line.trim();
|
||||
if (line.length() > 0) {
|
||||
@@ -156,7 +149,6 @@ bool CellularMQTT::loadConfig(MQTTConfig& cfg) {
|
||||
|
||||
f.close();
|
||||
|
||||
// Auto-generate device ID from ESP32 MAC if not provided
|
||||
if (cfg.deviceId[0] == '\0') {
|
||||
uint8_t mac[6];
|
||||
esp_efuse_mac_get_default(mac);
|
||||
@@ -168,7 +160,7 @@ bool CellularMQTT::loadConfig(MQTTConfig& cfg) {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Modem power-on (same sequence as ModemManager)
|
||||
// Modem power-on
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool CellularMQTT::modemPowerOn() {
|
||||
@@ -379,6 +371,7 @@ void CellularMQTT::handleMqttRxPayload(const char* data, int len) {
|
||||
Serial.println("[Cell] Command queue full, dropping");
|
||||
}
|
||||
} else if (strstr(_rxTopic, "/ota")) {
|
||||
// Handle OTA directly in the modem task (not queued through main loop)
|
||||
requestOTA(data);
|
||||
}
|
||||
}
|
||||
@@ -395,11 +388,10 @@ void CellularMQTT::handleMqttConnLost(const char* line) {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// APN resolution (reuses Meck's ApnDatabase)
|
||||
// APN resolution
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void CellularMQTT::resolveAPN() {
|
||||
// 1. Check SD config
|
||||
File f = SD.open("/remote/apn.cfg", FILE_READ);
|
||||
if (f) {
|
||||
String line = f.readStringUntil('\n');
|
||||
@@ -415,7 +407,6 @@ void CellularMQTT::resolveAPN() {
|
||||
}
|
||||
}
|
||||
|
||||
// 2. Check modem's current APN
|
||||
if (sendAT("AT+CGDCONT?", "OK", 3000)) {
|
||||
char* p = strstr(_atBuf, "+CGDCONT:");
|
||||
if (p) {
|
||||
@@ -438,7 +429,6 @@ void CellularMQTT::resolveAPN() {
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Auto-detect from IMSI
|
||||
if (_imsi[0]) {
|
||||
const ApnEntry* entry = apnLookupFromIMSI(_imsi);
|
||||
if (entry) {
|
||||
@@ -456,7 +446,7 @@ void CellularMQTT::resolveAPN() {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Data connection — activate PDP context
|
||||
// Data connection
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool CellularMQTT::activateData() {
|
||||
@@ -471,7 +461,6 @@ bool CellularMQTT::activateData() {
|
||||
}
|
||||
}
|
||||
|
||||
// Query IP address
|
||||
if (sendAT("AT+CGPADDR=1", "OK", 5000)) {
|
||||
char* p = strstr(_atBuf, "+CGPADDR:");
|
||||
if (p) {
|
||||
@@ -506,7 +495,6 @@ bool CellularMQTT::mqttStart() {
|
||||
}
|
||||
}
|
||||
|
||||
// Acquire client with SSL enabled (third param = 1 for SSL)
|
||||
char cmd[120];
|
||||
snprintf(cmd, sizeof(cmd), "AT+CMQTTACCQ=0,\"%s\",1", _config.deviceId);
|
||||
if (!sendAT(cmd, "OK", 5000)) {
|
||||
@@ -514,16 +502,9 @@ bool CellularMQTT::mqttStart() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Configure TLS 1.2 (sslversion 4 = TLS 1.2)
|
||||
sendAT("AT+CSSLCFG=\"sslversion\",0,4", "OK", 3000);
|
||||
|
||||
// Skip certificate verification (no CA cert loaded on device)
|
||||
sendAT("AT+CSSLCFG=\"authmode\",0,0", "OK", 3000);
|
||||
|
||||
// Enable SNI — required for HiveMQ Cloud (shared IP, multiple clusters)
|
||||
sendAT("AT+CSSLCFG=\"enableSNI\",0,1", "OK", 3000);
|
||||
|
||||
// Bind SSL config to MQTT session
|
||||
sendAT("AT+CMQTTSSLCFG=0,0", "OK", 3000);
|
||||
|
||||
return true;
|
||||
@@ -538,11 +519,9 @@ bool CellularMQTT::mqttConnect() {
|
||||
|
||||
Serial.printf("[Cell] TX: AT+CMQTTCONNECT=0,\"ssl://%s:%d\",...\n",
|
||||
_config.broker, _config.port);
|
||||
Serial.printf("[Cell] Full cmd (%d chars): %s\n", strlen(cmd), cmd);
|
||||
Serial.printf("[Cell] Full cmd (%d chars): %s\n", strlen(cmd), cmd);
|
||||
MODEM_SERIAL.println(cmd);
|
||||
|
||||
// Wait for +CMQTTCONNECT URC (any result code, not just success)
|
||||
// Don't use waitResponse — it bails on "ERROR" before we see the code
|
||||
unsigned long start = millis();
|
||||
int pos = 0;
|
||||
_atBuf[0] = '\0';
|
||||
@@ -554,10 +533,8 @@ bool CellularMQTT::mqttConnect() {
|
||||
_atBuf[pos++] = c;
|
||||
_atBuf[pos] = '\0';
|
||||
}
|
||||
// Check for the URC regardless of what else is in the buffer
|
||||
char* p = strstr(_atBuf, "+CMQTTCONNECT:");
|
||||
if (p) {
|
||||
// Give it a moment to complete the line
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
while (MODEM_SERIAL.available() && pos < AT_BUF_SIZE - 1) {
|
||||
_atBuf[pos++] = MODEM_SERIAL.read();
|
||||
@@ -579,7 +556,6 @@ bool CellularMQTT::mqttConnect() {
|
||||
vTaskDelay(pdMS_TO_TICKS(50));
|
||||
}
|
||||
|
||||
// Timeout — dump what we got
|
||||
int len = strlen(_atBuf);
|
||||
while (len > 0 && (_atBuf[len-1] == '\r' || _atBuf[len-1] == '\n')) _atBuf[--len] = '\0';
|
||||
Serial.printf("[Cell] MQTT connect timeout. Buffer: %.200s\n", _atBuf);
|
||||
@@ -605,7 +581,6 @@ bool CellularMQTT::mqttPublish(const char* topic, const char* payload) {
|
||||
int tlen = strlen(topic);
|
||||
int plen = strlen(payload);
|
||||
|
||||
// Step 1: Set topic
|
||||
char cmd[80];
|
||||
snprintf(cmd, sizeof(cmd), "AT+CMQTTTOPIC=0,%d", tlen);
|
||||
MODEM_SERIAL.println(cmd);
|
||||
@@ -620,7 +595,6 @@ bool CellularMQTT::mqttPublish(const char* topic, const char* payload) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Step 2: Set payload
|
||||
snprintf(cmd, sizeof(cmd), "AT+CMQTTPAYLOAD=0,%d", plen);
|
||||
MODEM_SERIAL.println(cmd);
|
||||
if (!waitPrompt(5000)) {
|
||||
@@ -633,14 +607,12 @@ bool CellularMQTT::mqttPublish(const char* topic, const char* payload) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Step 3: Publish QoS 1, 60s timeout
|
||||
if (!sendAT("AT+CMQTTPUB=0,1,60", "OK", 15000)) {
|
||||
_pubFailCount++;
|
||||
Serial.printf("[Cell] Publish failed (%d consecutive)\n", _pubFailCount);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Success — reset failure counter
|
||||
_pubFailCount = 0;
|
||||
return true;
|
||||
}
|
||||
@@ -652,9 +624,14 @@ void CellularMQTT::mqttDisconnect() {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// OTA — HTTP download via A7682E + ESP32 flash
|
||||
// OTA — HTTP download + ESP32 flash
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void CellularMQTT::otaPublish(const char* msg) {
|
||||
Serial.printf("[OTA] %s\n", msg);
|
||||
mqttPublish(_topicRsp, msg);
|
||||
}
|
||||
|
||||
int CellularMQTT::readRawBytes(uint8_t* dest, int count, uint32_t timeout_ms) {
|
||||
unsigned long start = millis();
|
||||
int received = 0;
|
||||
@@ -668,6 +645,7 @@ int CellularMQTT::readRawBytes(uint8_t* dest, int count, uint32_t timeout_ms) {
|
||||
}
|
||||
|
||||
int CellularMQTT::httpGet(const char* url) {
|
||||
// Terminate any previous HTTP session
|
||||
sendAT("AT+HTTPTERM", "OK", 2000);
|
||||
vTaskDelay(pdMS_TO_TICKS(500));
|
||||
|
||||
@@ -676,6 +654,7 @@ int CellularMQTT::httpGet(const char* url) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Set URL via prompt pattern
|
||||
int urlLen = strlen(url);
|
||||
char cmd[40];
|
||||
snprintf(cmd, sizeof(cmd), "AT+HTTPPARA=\"URL\",%d", urlLen);
|
||||
@@ -692,19 +671,23 @@ int CellularMQTT::httpGet(const char* url) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// SSL config for HTTPS
|
||||
if (strncmp(url, "https://", 8) == 0) {
|
||||
sendAT("AT+HTTPPARA=\"SSLCFG\",0", "OK", 3000);
|
||||
}
|
||||
|
||||
// Follow redirects (GitHub releases use 302)
|
||||
sendAT("AT+HTTPPARA=\"REDIR\",1", "OK", 2000);
|
||||
|
||||
// Execute GET — response: +HTTPACTION: 0,<status>,<content_length>
|
||||
MODEM_SERIAL.println("AT+HTTPACTION=0");
|
||||
|
||||
// Wait for +HTTPACTION URC — download can take minutes over Cat-1
|
||||
unsigned long start = millis();
|
||||
int pos = 0;
|
||||
_atBuf[0] = '\0';
|
||||
|
||||
while (millis() - start < 180000) {
|
||||
while (millis() - start < 180000) { // 3 minute timeout
|
||||
while (MODEM_SERIAL.available()) {
|
||||
char c = MODEM_SERIAL.read();
|
||||
if (pos < AT_BUF_SIZE - 1) {
|
||||
@@ -742,10 +725,13 @@ int CellularMQTT::httpGet(const char* url) {
|
||||
bool CellularMQTT::httpReadChunk(int offset, int len, uint8_t* dest, int* bytesRead) {
|
||||
*bytesRead = 0;
|
||||
|
||||
// AT+HTTPREAD=<offset>,<length>
|
||||
// Response: +HTTPREAD: <actual_len>\r\n<binary data>\r\nOK
|
||||
char cmd[40];
|
||||
snprintf(cmd, sizeof(cmd), "AT+HTTPREAD=%d,%d", offset, len);
|
||||
MODEM_SERIAL.println(cmd);
|
||||
|
||||
// Wait for +HTTPREAD: <len> header
|
||||
unsigned long start = millis();
|
||||
int pos = 0;
|
||||
_atBuf[0] = '\0';
|
||||
@@ -769,6 +755,7 @@ bool CellularMQTT::httpReadChunk(int offset, int len, uint8_t* dest, int* bytesR
|
||||
return false;
|
||||
}
|
||||
|
||||
// Read exactly actualLen binary bytes
|
||||
int got = readRawBytes(dest, actualLen, 15000);
|
||||
if (got != actualLen) {
|
||||
Serial.printf("[OTA] Short read: got %d expected %d\n", got, actualLen);
|
||||
@@ -776,6 +763,8 @@ bool CellularMQTT::httpReadChunk(int offset, int len, uint8_t* dest, int* bytesR
|
||||
}
|
||||
|
||||
*bytesRead = actualLen;
|
||||
|
||||
// Drain trailing \r\nOK\r\n
|
||||
waitResponse("OK", 3000, _atBuf, AT_BUF_SIZE);
|
||||
return true;
|
||||
}
|
||||
@@ -796,12 +785,14 @@ void CellularMQTT::performOTA() {
|
||||
_otaPending = false;
|
||||
_state = CellState::OTA_IN_PROGRESS;
|
||||
|
||||
otaPublish("OTA: Starting download...");
|
||||
Serial.printf("[OTA] URL: %s\n", _otaUrl);
|
||||
|
||||
// Disconnect MQTT — modem can only do one thing at a time
|
||||
mqttDisconnect();
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
|
||||
// Download firmware via HTTP
|
||||
int fileSize = httpGet(_otaUrl);
|
||||
if (fileSize <= 0) {
|
||||
Serial.println("[OTA] Download failed");
|
||||
@@ -812,6 +803,7 @@ void CellularMQTT::performOTA() {
|
||||
|
||||
Serial.printf("[OTA] Downloaded %d bytes, flashing...\n", fileSize);
|
||||
|
||||
// Begin ESP32 OTA
|
||||
if (!Update.begin(fileSize)) {
|
||||
Serial.printf("[OTA] Update.begin failed: %s\n", Update.errorString());
|
||||
httpTerm();
|
||||
@@ -819,6 +811,7 @@ void CellularMQTT::performOTA() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Allocate chunk buffer
|
||||
uint8_t* chunk = (uint8_t*)malloc(OTA_CHUNK_SIZE);
|
||||
if (!chunk) {
|
||||
Serial.println("[OTA] malloc failed");
|
||||
@@ -863,7 +856,7 @@ void CellularMQTT::performOTA() {
|
||||
lastPct = pct;
|
||||
}
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
vTaskDelay(pdMS_TO_TICKS(10)); // Yield to watchdog
|
||||
}
|
||||
|
||||
free(chunk);
|
||||
@@ -948,7 +941,6 @@ restart:
|
||||
if (!registered) Serial.println("[Cell] Registration timeout — continuing");
|
||||
}
|
||||
|
||||
// Operator name
|
||||
sendAT("AT+COPS=3,0", "OK", 2000);
|
||||
if (sendAT("AT+COPS?", "OK", 5000)) {
|
||||
char* p = strchr(_atBuf, '"');
|
||||
@@ -974,7 +966,7 @@ restart:
|
||||
Serial.printf("[Cell] Registered: oper=%s CSQ=%d APN=%s IMEI=%s\n",
|
||||
_operator, _csq, _apn[0] ? _apn : "(none)", _imei);
|
||||
|
||||
// Sync ESP32 system clock from modem network time
|
||||
// Sync ESP32 system clock from modem network time
|
||||
for (int attempt = 0; attempt < 5; attempt++) {
|
||||
if (attempt > 0) vTaskDelay(pdMS_TO_TICKS(2000));
|
||||
if (sendAT("AT+CCLK?", "OK", 3000)) {
|
||||
@@ -982,7 +974,7 @@ restart:
|
||||
if (p) {
|
||||
int yy=0, mo=0, dd=0, hh=0, mm=0, ss=0, tz=0;
|
||||
if (sscanf(p, "+CCLK: \"%d/%d/%d,%d:%d:%d", &yy, &mo, &dd, &hh, &mm, &ss) >= 6) {
|
||||
if (yy < 24 || yy > 50) continue; // Not synced yet
|
||||
if (yy < 24 || yy > 50) continue;
|
||||
char* tzp = p + 7;
|
||||
while (*tzp && *tzp != '+' && *tzp != '-') tzp++;
|
||||
if (*tzp) tz = atoi(tzp);
|
||||
@@ -1030,10 +1022,9 @@ restart:
|
||||
goto restart;
|
||||
}
|
||||
|
||||
// Allow MQTT session to stabilise before subscribing
|
||||
// Allow MQTT session to stabilise before subscribing
|
||||
vTaskDelay(pdMS_TO_TICKS(2000));
|
||||
|
||||
// Subscribe with retry — the modem sometimes misses the first prompt
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (mqttSubscribe(_topicCmd)) break;
|
||||
Serial.printf("[Cell] Subscribe retry %d for cmd topic\n", i + 1);
|
||||
@@ -1059,12 +1050,12 @@ restart:
|
||||
// Check for pending OTA request
|
||||
if (_otaPending && _state == CellState::CONNECTED) {
|
||||
performOTA();
|
||||
continue;
|
||||
continue; // After OTA failure, reconnect loop handles recovery
|
||||
}
|
||||
|
||||
drainURCs();
|
||||
|
||||
// Health check: too many consecutive publish failures = silent disconnect
|
||||
// Health check
|
||||
if (_pubFailCount >= MQTT_PUB_FAIL_MAX && _state == CellState::CONNECTED) {
|
||||
Serial.printf("[Cell] %d consecutive publish failures — forcing reconnect\n", _pubFailCount);
|
||||
_state = CellState::RECONNECTING;
|
||||
@@ -1079,7 +1070,6 @@ restart:
|
||||
mqttDisconnect();
|
||||
vTaskDelay(pdMS_TO_TICKS(2000));
|
||||
|
||||
// Check data is still active
|
||||
if (!sendAT("AT+CGACT?", "OK", 5000) || !strstr(_atBuf, ",1")) {
|
||||
if (!activateData()) {
|
||||
vTaskDelay(pdMS_TO_TICKS(10000));
|
||||
@@ -1088,7 +1078,7 @@ restart:
|
||||
}
|
||||
|
||||
if (!mqttStart() || !mqttConnect()) {
|
||||
continue; // Retry with backoff
|
||||
continue;
|
||||
}
|
||||
|
||||
mqttSubscribe(_topicCmd);
|
||||
@@ -1124,24 +1114,19 @@ restart:
|
||||
xSemaphoreGive(_telemetryMutex);
|
||||
}
|
||||
|
||||
static const char* loopLabels[] = { "off", "minimal", "moderate", "strict" };
|
||||
const char* loopStr = td.loop_detect <= 3 ? loopLabels[td.loop_detect] : "off";
|
||||
|
||||
char json[512];
|
||||
char json[400];
|
||||
snprintf(json, sizeof(json),
|
||||
"{\"uptime\":%lu,\"batt_mv\":%d,\"batt_pct\":%d,\"temp\":%.1f,"
|
||||
"\"csq\":%d,\"bars\":%d,\"neighbors\":%d,"
|
||||
"\"freq\":%.3f,\"bw\":%.1f,\"sf\":%d,\"cr\":%d,\"tx\":%d,"
|
||||
"\"name\":\"%s\",\"ip\":\"%s\",\"oper\":\"%s\",\"apn\":\"%s\","
|
||||
"\"heap\":%d,"
|
||||
"\"loop_detect\":\"%s\",\"path_hash_mode\":%d,\"flood_max\":%d}",
|
||||
"\"heap\":%d}",
|
||||
td.uptime_secs, td.battery_mv, td.battery_pct,
|
||||
td.temperature / 10.0f,
|
||||
_csq, getSignalBars(), td.neighbor_count,
|
||||
td.freq, td.bw, td.sf, td.cr, td.tx_power,
|
||||
td.node_name, _ipAddr, _operator, _apn,
|
||||
ESP.getFreeHeap(),
|
||||
loopStr, td.path_hash_mode, td.flood_max);
|
||||
ESP.getFreeHeap());
|
||||
|
||||
mqttPublish(_topicTelem, json);
|
||||
lastTelem = millis();
|
||||
|
||||
@@ -8,13 +8,6 @@
|
||||
#include "CellularMQTT.h"
|
||||
#endif
|
||||
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
#if defined(HAS_SDCARD) || defined(SDCARD_CS)
|
||||
#include <SD.h>
|
||||
#endif
|
||||
#include "WiFiMQTT.h"
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_CLASS
|
||||
#include "UITask.h"
|
||||
static UITask ui_task(display);
|
||||
@@ -35,7 +28,7 @@ static char command[160];
|
||||
unsigned long lastActive = 0; // mark last active time
|
||||
unsigned long nextSleepinSecs = 120; // next sleep in seconds. The first sleep (if enabled) is after 2 minutes from boot
|
||||
|
||||
#if (defined(HAS_4G_MODEM) || defined(MECK_WIFI_REMOTE)) && (defined(HAS_SDCARD) || defined(SDCARD_CS))
|
||||
#ifdef HAS_4G_MODEM
|
||||
static bool sdCardReady = false;
|
||||
#endif
|
||||
|
||||
@@ -100,12 +93,10 @@ void setup() {
|
||||
the_mesh.begin(fs);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// SD card init — needed for MQTT config on devices with SD slots.
|
||||
// T-Deck Pro: SD shares display SPI bus (HSPI via displaySpi)
|
||||
// T5S3: SD shares LoRa SPI bus (SCK=14, MOSI=13, MISO=21)
|
||||
// Heltec V4 and others without SD: config lives in SPIFFS (already init'd)
|
||||
// SD card init — needed for CellularMQTT config (/remote/mqtt.cfg)
|
||||
// SD, LoRa, and e-ink share the same SPI bus on T-Deck Pro.
|
||||
// ---------------------------------------------------------------------------
|
||||
#if (defined(HAS_4G_MODEM) || defined(MECK_WIFI_REMOTE)) && (defined(HAS_SDCARD) || defined(SDCARD_CS))
|
||||
#ifdef HAS_4G_MODEM
|
||||
{
|
||||
// Deselect all SPI devices before SD init to prevent bus contention
|
||||
#ifdef SDCARD_CS
|
||||
@@ -123,12 +114,7 @@ void setup() {
|
||||
delay(100);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
// T5S3: SD shares LoRa SPI bus — create local HSPI reference
|
||||
static SPIClass sdSpi(HSPI);
|
||||
sdSpi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI, SDCARD_CS);
|
||||
if (SD.begin(SDCARD_CS, sdSpi, 4000000)) { sdCardReady = true; break; }
|
||||
#elif defined(SDCARD_CS)
|
||||
#ifdef SDCARD_CS
|
||||
extern SPIClass displaySpi;
|
||||
if (SD.begin(SDCARD_CS, displaySpi)) { sdCardReady = true; break; }
|
||||
#else
|
||||
@@ -138,10 +124,8 @@ void setup() {
|
||||
}
|
||||
Serial.printf("SD card: %s\n", sdCardReady ? "ready" : "FAILED");
|
||||
}
|
||||
#endif
|
||||
|
||||
// Start MQTT backhaul
|
||||
#ifdef HAS_4G_MODEM
|
||||
// Start cellular MQTT
|
||||
if (sdCardReady) {
|
||||
cellularMQTT.begin();
|
||||
Serial.println("Cellular MQTT starting...");
|
||||
@@ -150,21 +134,6 @@ void setup() {
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
#if defined(HAS_SDCARD) || defined(SDCARD_CS)
|
||||
if (sdCardReady) {
|
||||
wifiMQTT.begin();
|
||||
Serial.println("WiFi MQTT starting...");
|
||||
} else {
|
||||
Serial.println("WiFi MQTT skipped — no SD card for config");
|
||||
}
|
||||
#else
|
||||
// No SD card slot — config lives in SPIFFS (already initialized above)
|
||||
wifiMQTT.begin();
|
||||
Serial.println("WiFi MQTT starting (SPIFFS config)...");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef DISPLAY_CLASS
|
||||
ui_task.begin(the_mesh.getNodePrefs(), FIRMWARE_BUILD_DATE, FIRMWARE_VERSION);
|
||||
#endif
|
||||
@@ -201,12 +170,13 @@ void loop() {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// MQTT → CLI bridge: process incoming commands from MQTT (cellular)
|
||||
// MQTT → CLI bridge: process incoming commands from MQTT
|
||||
// ---------------------------------------------------------------------------
|
||||
#ifdef HAS_4G_MODEM
|
||||
{
|
||||
MQTTCommand mqttCmd;
|
||||
while (cellularMQTT.recvCommand(mqttCmd)) {
|
||||
// CLI command — process through the same handler as serial/LoRa admin
|
||||
Serial.printf("[MQTT] CLI: %s\n", mqttCmd.cmd);
|
||||
char reply[512];
|
||||
reply[0] = '\0';
|
||||
@@ -219,7 +189,7 @@ void loop() {
|
||||
}
|
||||
}
|
||||
|
||||
// Periodic telemetry snapshot for cellular MQTT
|
||||
// Periodic telemetry snapshot for MQTT publishing
|
||||
{
|
||||
static unsigned long lastTelemUpdate = 0;
|
||||
if (millis() - lastTelemUpdate > 10000) {
|
||||
@@ -228,13 +198,8 @@ void loop() {
|
||||
memset(&td, 0, sizeof(td));
|
||||
td.uptime_secs = millis() / 1000;
|
||||
td.battery_mv = board.getBattMilliVolts();
|
||||
#ifdef HAS_BQ27220
|
||||
td.battery_pct = board.getBatteryPercent();
|
||||
td.temperature = board.getBattTemperature();
|
||||
#else
|
||||
td.battery_pct = 0;
|
||||
td.temperature = 0;
|
||||
#endif
|
||||
td.csq = cellularMQTT.getCSQ();
|
||||
td.freq = p->freq;
|
||||
td.bw = p->bw;
|
||||
@@ -246,9 +211,6 @@ void loop() {
|
||||
strncpy(td.oper, cellularMQTT.getOperator(), sizeof(td.oper) - 1);
|
||||
td.mqtt_connected = cellularMQTT.isConnected();
|
||||
td.neighbor_count = 0; // TODO: expose from MyMesh
|
||||
td.loop_detect = p->loop_detect;
|
||||
td.path_hash_mode = p->path_hash_mode;
|
||||
td.flood_max = p->flood_max;
|
||||
|
||||
cellularMQTT.updateTelemetry(td);
|
||||
lastTelemUpdate = millis();
|
||||
@@ -256,62 +218,6 @@ void loop() {
|
||||
}
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// MQTT → CLI bridge: process incoming commands from MQTT (WiFi)
|
||||
// ---------------------------------------------------------------------------
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
wifiMQTT.loop();
|
||||
|
||||
{
|
||||
MQTTCommand mqttCmd;
|
||||
while (wifiMQTT.recvCommand(mqttCmd)) {
|
||||
Serial.printf("[MQTT] CLI: %s\n", mqttCmd.cmd);
|
||||
char reply[512];
|
||||
reply[0] = '\0';
|
||||
the_mesh.handleCommand((uint32_t)time(nullptr), mqttCmd.cmd, reply);
|
||||
|
||||
if (reply[0] == '\0') strcpy(reply, "OK");
|
||||
|
||||
wifiMQTT.sendResponse(wifiMQTT.getRspTopic(), reply);
|
||||
Serial.printf("[MQTT] Reply: %.80s\n", reply);
|
||||
}
|
||||
}
|
||||
|
||||
// Periodic telemetry snapshot for WiFi MQTT
|
||||
{
|
||||
static unsigned long lastTelemUpdate = 0;
|
||||
if (millis() - lastTelemUpdate > 10000) {
|
||||
NodePrefs* p = the_mesh.getNodePrefs();
|
||||
TelemetryData td;
|
||||
memset(&td, 0, sizeof(td));
|
||||
td.uptime_secs = millis() / 1000;
|
||||
td.battery_mv = board.getBattMilliVolts();
|
||||
#ifdef HAS_BQ27220
|
||||
td.battery_pct = board.getBatteryPercent();
|
||||
td.temperature = board.getBattTemperature();
|
||||
#else
|
||||
td.battery_pct = 0;
|
||||
td.temperature = 0;
|
||||
#endif
|
||||
td.rssi = wifiMQTT.getRSSI();
|
||||
td.freq = p->freq;
|
||||
td.bw = p->bw;
|
||||
td.sf = p->sf;
|
||||
td.cr = p->cr;
|
||||
td.tx_power = p->tx_power_dbm;
|
||||
strncpy(td.node_name, p->node_name, sizeof(td.node_name) - 1);
|
||||
td.mqtt_connected = wifiMQTT.isConnected();
|
||||
td.neighbor_count = 0;
|
||||
td.loop_detect = p->loop_detect;
|
||||
td.path_hash_mode = p->path_hash_mode;
|
||||
td.flood_max = p->flood_max;
|
||||
|
||||
wifiMQTT.updateTelemetry(td);
|
||||
lastTelemUpdate = millis();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
the_mesh.loop();
|
||||
sensors.loop();
|
||||
#ifdef DISPLAY_CLASS
|
||||
@@ -319,7 +225,7 @@ void loop() {
|
||||
#endif
|
||||
rtc_clock.tick();
|
||||
|
||||
#if !defined(HAS_4G_MODEM) && !defined(MECK_WIFI_REMOTE)
|
||||
#ifndef HAS_4G_MODEM
|
||||
if (the_mesh.getNodePrefs()->powersaving_enabled &&
|
||||
the_mesh.millisHasNowPassed(lastActive + nextSleepinSecs * 1000)) {
|
||||
if (!the_mesh.hasPendingWork()) {
|
||||
|
||||
@@ -1,510 +0,0 @@
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
|
||||
#include "target.h"
|
||||
#include "WiFiMQTT.h"
|
||||
#include <esp_mac.h>
|
||||
#include <Update.h>
|
||||
#include <HTTPClient.h>
|
||||
|
||||
WiFiMQTT wifiMQTT;
|
||||
|
||||
#define WIFI_CONFIG_FILE "/remote/wifi.cfg"
|
||||
#define MQTT_CONFIG_FILE "/remote/mqtt.cfg"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Public API
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void WiFiMQTT::begin() {
|
||||
Serial.println("[WiFi] begin()");
|
||||
|
||||
_state = WiFiMQTTState::OFF;
|
||||
_cmdHead = _cmdTail = 0;
|
||||
_rspHead = _rspTail = 0;
|
||||
_activeNetwork = 0;
|
||||
|
||||
if (!loadConfig(_config)) {
|
||||
Serial.println("[WiFi] ERROR: Missing config files — cannot start");
|
||||
_state = WiFiMQTTState::ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.printf("[WiFi] Config: %d network(s), broker=%s:%d id=%s\n",
|
||||
_config.networkCount, _config.broker, _config.port, _config.deviceId);
|
||||
for (int i = 0; i < _config.networkCount; i++) {
|
||||
Serial.printf("[WiFi] %d: %s\n", i + 1, _config.networks[i].ssid);
|
||||
}
|
||||
|
||||
snprintf(_topicCmd, sizeof(_topicCmd), "meck/%s/cmd", _config.deviceId);
|
||||
snprintf(_topicRsp, sizeof(_topicRsp), "meck/%s/rsp", _config.deviceId);
|
||||
snprintf(_topicTelem, sizeof(_topicTelem), "meck/%s/telemetry", _config.deviceId);
|
||||
snprintf(_topicOta, sizeof(_topicOta), "meck/%s/ota", _config.deviceId);
|
||||
|
||||
// Configure TLS — skip server cert verification (same as cellular)
|
||||
_wifiClient.setInsecure();
|
||||
|
||||
_mqttClient.setClient(_wifiClient);
|
||||
_mqttClient.setServer(_config.broker, _config.port);
|
||||
_mqttClient.setCallback(mqttCallback);
|
||||
_mqttClient.setBufferSize(MQTT_PAYLOAD_MAX + MQTT_TOPIC_MAX);
|
||||
|
||||
_state = WiFiMQTTState::WIFI_CONNECTING;
|
||||
}
|
||||
|
||||
void WiFiMQTT::loop() {
|
||||
if (_state == WiFiMQTTState::OFF || _state == WiFiMQTTState::ERROR) return;
|
||||
|
||||
// Check for pending OTA
|
||||
if (_otaPending && _state == WiFiMQTTState::CONNECTED) {
|
||||
performOTA();
|
||||
return;
|
||||
}
|
||||
|
||||
// WiFi connection management
|
||||
if (WiFi.status() != WL_CONNECTED) {
|
||||
if (_state == WiFiMQTTState::CONNECTED || _state == WiFiMQTTState::MQTT_CONNECTING) {
|
||||
Serial.println("[WiFi] Connection lost");
|
||||
_state = WiFiMQTTState::WIFI_CONNECTING;
|
||||
}
|
||||
if (millis() - _lastWifiAttempt > WIFI_RECONNECT_MS) {
|
||||
connectWiFi();
|
||||
_lastWifiAttempt = millis();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// WiFi is up — check MQTT
|
||||
if (!_mqttClient.connected()) {
|
||||
if (_state == WiFiMQTTState::CONNECTED) {
|
||||
Serial.println("[WiFi] MQTT disconnected");
|
||||
}
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
if (millis() - _lastMqttAttempt > MQTT_RECONNECT_MS) {
|
||||
connectMQTT();
|
||||
_lastMqttAttempt = millis();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Connected — run MQTT loop
|
||||
_mqttClient.loop();
|
||||
|
||||
// Publish queued responses
|
||||
publishQueuedResponses();
|
||||
|
||||
// Periodic RSSI
|
||||
if (millis() - _lastRSSI > 30000) {
|
||||
_rssi = WiFi.RSSI();
|
||||
_lastRSSI = millis();
|
||||
}
|
||||
|
||||
// Periodic telemetry
|
||||
if (millis() - _lastTelem > TELEMETRY_INTERVAL) {
|
||||
publishTelemetry();
|
||||
_lastTelem = millis();
|
||||
}
|
||||
}
|
||||
|
||||
bool WiFiMQTT::recvCommand(MQTTCommand& out) {
|
||||
if (_cmdHead == _cmdTail) return false;
|
||||
memcpy(&out, &_cmdBuf[_cmdTail], sizeof(MQTTCommand));
|
||||
_cmdTail = (_cmdTail + 1) % CMD_QUEUE_SIZE;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WiFiMQTT::sendResponse(const char* topic, const char* payload) {
|
||||
int next = (_rspHead + 1) % RSP_QUEUE_SIZE;
|
||||
if (next == _rspTail) return false; // Full
|
||||
memset(&_rspBuf[_rspHead], 0, sizeof(MQTTResponse));
|
||||
strncpy(_rspBuf[_rspHead].topic, topic, MQTT_TOPIC_MAX - 1);
|
||||
strncpy(_rspBuf[_rspHead].payload, payload, MQTT_PAYLOAD_MAX - 1);
|
||||
_rspHead = next;
|
||||
return true;
|
||||
}
|
||||
|
||||
void WiFiMQTT::updateTelemetry(const TelemetryData& data) {
|
||||
memcpy(&_telemetry, &data, sizeof(data));
|
||||
}
|
||||
|
||||
void WiFiMQTT::requestOTA(const char* url) {
|
||||
if (_state == WiFiMQTTState::OTA_IN_PROGRESS) return;
|
||||
strncpy(_otaUrl, url, sizeof(_otaUrl) - 1);
|
||||
_otaUrl[sizeof(_otaUrl) - 1] = '\0';
|
||||
_otaPending = true;
|
||||
Serial.printf("[OTA] Requested: %s\n", url);
|
||||
}
|
||||
|
||||
int WiFiMQTT::getSignalBars() const {
|
||||
if (_rssi == 0) return 0;
|
||||
if (_rssi > -50) return 5;
|
||||
if (_rssi > -60) return 4;
|
||||
if (_rssi > -70) return 3;
|
||||
if (_rssi > -80) return 2;
|
||||
return 1;
|
||||
}
|
||||
|
||||
const char* WiFiMQTT::stateString() const {
|
||||
switch (_state) {
|
||||
case WiFiMQTTState::OFF: return "OFF";
|
||||
case WiFiMQTTState::WIFI_CONNECTING: return "WiFi...";
|
||||
case WiFiMQTTState::WIFI_CONNECTED: return "WiFi OK";
|
||||
case WiFiMQTTState::MQTT_CONNECTING: return "MQTT...";
|
||||
case WiFiMQTTState::CONNECTED: return "CONNECTED";
|
||||
case WiFiMQTTState::OTA_IN_PROGRESS: return "OTA";
|
||||
case WiFiMQTTState::ERROR: return "ERROR";
|
||||
default: return "???";
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Config files
|
||||
//
|
||||
// /remote/wifi.cfg — SSID/password pairs, two lines each:
|
||||
// HomeNetwork
|
||||
// HomePassword
|
||||
// BackupNetwork
|
||||
// BackupPassword
|
||||
//
|
||||
// /remote/mqtt.cfg — same format as cellular variant
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool WiFiMQTT::loadConfig(WiFiMQTTConfig& cfg) {
|
||||
memset(&cfg, 0, sizeof(cfg));
|
||||
|
||||
// Determine filesystem: SD if available, otherwise SPIFFS
|
||||
// Heltec V4 and other headless boards have no SD slot — config lives in SPIFFS.
|
||||
// Upload config files via: pio run -t uploadfs (with data/ folder)
|
||||
#if defined(HAS_SDCARD) || defined(SDCARD_CS)
|
||||
fs::FS& configFS = SD;
|
||||
Serial.println("[WiFi] Config source: SD card");
|
||||
#else
|
||||
fs::FS& configFS = SPIFFS;
|
||||
Serial.println("[WiFi] Config source: SPIFFS");
|
||||
#endif
|
||||
|
||||
// WiFi config: read SSID/password pairs
|
||||
File wf = configFS.open(WIFI_CONFIG_FILE, FILE_READ);
|
||||
if (!wf) {
|
||||
Serial.printf("[WiFi] No %s\n", WIFI_CONFIG_FILE);
|
||||
return false;
|
||||
}
|
||||
|
||||
cfg.networkCount = 0;
|
||||
while (wf.available() && cfg.networkCount < MAX_WIFI_NETWORKS) {
|
||||
String ssid = wf.readStringUntil('\n'); ssid.trim();
|
||||
if (ssid.length() == 0) break;
|
||||
String pass = wf.readStringUntil('\n'); pass.trim();
|
||||
strncpy(cfg.networks[cfg.networkCount].ssid, ssid.c_str(), sizeof(cfg.networks[0].ssid) - 1);
|
||||
strncpy(cfg.networks[cfg.networkCount].password, pass.c_str(), sizeof(cfg.networks[0].password) - 1);
|
||||
cfg.networkCount++;
|
||||
}
|
||||
wf.close();
|
||||
|
||||
if (cfg.networkCount == 0) {
|
||||
Serial.println("[WiFi] No networks in wifi.cfg");
|
||||
return false;
|
||||
}
|
||||
|
||||
// MQTT config: /remote/mqtt.cfg (same format as cellular)
|
||||
File mf = configFS.open(MQTT_CONFIG_FILE, FILE_READ);
|
||||
if (!mf) {
|
||||
Serial.printf("[WiFi] No %s\n", MQTT_CONFIG_FILE);
|
||||
return false;
|
||||
}
|
||||
String line;
|
||||
line = mf.readStringUntil('\n'); line.trim();
|
||||
strncpy(cfg.broker, line.c_str(), sizeof(cfg.broker) - 1);
|
||||
line = mf.readStringUntil('\n'); line.trim();
|
||||
cfg.port = line.length() > 0 ? line.toInt() : 8883;
|
||||
line = mf.readStringUntil('\n'); line.trim();
|
||||
strncpy(cfg.username, line.c_str(), sizeof(cfg.username) - 1);
|
||||
line = mf.readStringUntil('\n'); line.trim();
|
||||
strncpy(cfg.password, line.c_str(), sizeof(cfg.password) - 1);
|
||||
if (mf.available()) {
|
||||
line = mf.readStringUntil('\n'); line.trim();
|
||||
if (line.length() > 0) {
|
||||
strncpy(cfg.deviceId, line.c_str(), sizeof(cfg.deviceId) - 1);
|
||||
}
|
||||
}
|
||||
mf.close();
|
||||
|
||||
// Auto-generate device ID if not provided
|
||||
if (cfg.deviceId[0] == '\0') {
|
||||
uint8_t mac[6];
|
||||
esp_efuse_mac_get_default(mac);
|
||||
snprintf(cfg.deviceId, sizeof(cfg.deviceId), "meck-%02x%02x%02x%02x",
|
||||
mac[2], mac[3], mac[4], mac[5]);
|
||||
}
|
||||
|
||||
return cfg.broker[0] != '\0';
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// WiFi connection — tries each configured network in order
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool WiFiMQTT::connectWiFi() {
|
||||
WiFi.mode(WIFI_STA);
|
||||
|
||||
for (int n = 0; n < _config.networkCount; n++) {
|
||||
Serial.printf("[WiFi] Trying %s (%d/%d)...\n",
|
||||
_config.networks[n].ssid, n + 1, _config.networkCount);
|
||||
WiFi.begin(_config.networks[n].ssid, _config.networks[n].password);
|
||||
|
||||
unsigned long start = millis();
|
||||
while (WiFi.status() != WL_CONNECTED && millis() - start < 10000) {
|
||||
delay(100);
|
||||
}
|
||||
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
IPAddress ip = WiFi.localIP();
|
||||
snprintf(_ipAddr, sizeof(_ipAddr), "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
|
||||
_rssi = WiFi.RSSI();
|
||||
_activeNetwork = n;
|
||||
Serial.printf("[WiFi] Connected to %s — IP: %s RSSI: %d\n",
|
||||
_config.networks[n].ssid, _ipAddr, _rssi);
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
IPAddress ip = WiFi.localIP();
|
||||
snprintf(_ipAddr, sizeof(_ipAddr), "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
|
||||
_rssi = WiFi.RSSI();
|
||||
_activeNetwork = n;
|
||||
Serial.printf("[WiFi] Connected to %s — IP: %s RSSI: %d\n",
|
||||
_config.networks[n].ssid, _ipAddr, _rssi);
|
||||
|
||||
// Sync clock via NTP
|
||||
configTime(0, 0, "pool.ntp.org", "time.google.com");
|
||||
Serial.print("[WiFi] NTP sync...");
|
||||
int tries = 0;
|
||||
while (time(nullptr) < 1700000000 && tries < 20) {
|
||||
delay(500);
|
||||
tries++;
|
||||
}
|
||||
time_t now = time(nullptr);
|
||||
if (now > 1700000000) {
|
||||
extern AutoDiscoverRTCClock rtc_clock;
|
||||
rtc_clock.setCurrentTime((uint32_t)now);
|
||||
Serial.printf(" OK (%lu)\n", (unsigned long)now);
|
||||
} else {
|
||||
Serial.println(" timeout");
|
||||
}
|
||||
|
||||
_state = WiFiMQTTState::WIFI_CONNECTED;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
WiFi.disconnect();
|
||||
delay(500);
|
||||
}
|
||||
|
||||
Serial.println("[WiFi] All networks failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// MQTT connection
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool WiFiMQTT::connectMQTT() {
|
||||
Serial.printf("[WiFi] MQTT connecting to %s:%d...\n", _config.broker, _config.port);
|
||||
|
||||
char clientId[48];
|
||||
snprintf(clientId, sizeof(clientId), "%s-%lu", _config.deviceId, millis() & 0xFFFF);
|
||||
|
||||
if (_mqttClient.connect(clientId, _config.username, _config.password)) {
|
||||
Serial.println("[WiFi] MQTT connected!");
|
||||
|
||||
_mqttClient.subscribe(_topicCmd, 1);
|
||||
_mqttClient.subscribe(_topicOta, 1);
|
||||
|
||||
_state = WiFiMQTTState::CONNECTED;
|
||||
|
||||
// Publish boot event
|
||||
_mqttClient.publish(_topicTelem, "{\"event\":\"boot\",\"state\":\"connected\"}", true);
|
||||
return true;
|
||||
}
|
||||
|
||||
Serial.printf("[WiFi] MQTT connect failed, rc=%d\n", _mqttClient.state());
|
||||
return false;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// MQTT message callback
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void WiFiMQTT::mqttCallback(char* topic, byte* payload, unsigned int length) {
|
||||
wifiMQTT.onMessage(topic, payload, length);
|
||||
}
|
||||
|
||||
void WiFiMQTT::onMessage(char* topic, byte* payload, unsigned int length) {
|
||||
char buf[MQTT_PAYLOAD_MAX];
|
||||
int len = (length < MQTT_PAYLOAD_MAX - 1) ? length : MQTT_PAYLOAD_MAX - 1;
|
||||
memcpy(buf, payload, len);
|
||||
buf[len] = '\0';
|
||||
|
||||
Serial.printf("[WiFi] RX [%s]: %.80s\n", topic, buf);
|
||||
|
||||
if (strstr(topic, "/cmd")) {
|
||||
int next = (_cmdHead + 1) % CMD_QUEUE_SIZE;
|
||||
if (next != _cmdTail) {
|
||||
memset(&_cmdBuf[_cmdHead], 0, sizeof(MQTTCommand));
|
||||
strncpy(_cmdBuf[_cmdHead].cmd, buf, MQTT_PAYLOAD_MAX - 1);
|
||||
_cmdHead = next;
|
||||
Serial.printf("[WiFi] Queued CLI: %s\n", buf);
|
||||
} else {
|
||||
Serial.println("[WiFi] Command queue full");
|
||||
}
|
||||
} else if (strstr(topic, "/ota")) {
|
||||
requestOTA(buf);
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Publish helpers
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void WiFiMQTT::publishQueuedResponses() {
|
||||
while (_rspHead != _rspTail) {
|
||||
_mqttClient.publish(_rspBuf[_rspTail].topic, _rspBuf[_rspTail].payload);
|
||||
_rspTail = (_rspTail + 1) % RSP_QUEUE_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
void WiFiMQTT::publishTelemetry() {
|
||||
_rssi = WiFi.RSSI();
|
||||
|
||||
static const char* loopLabels[] = { "off", "minimal", "moderate", "strict" };
|
||||
const char* loopStr = _telemetry.loop_detect <= 3 ? loopLabels[_telemetry.loop_detect] : "off";
|
||||
|
||||
char json[512];
|
||||
snprintf(json, sizeof(json),
|
||||
"{\"uptime\":%lu,\"batt_mv\":%d,\"batt_pct\":%d,\"temp\":%.1f,"
|
||||
"\"rssi\":%d,\"bars\":%d,\"neighbors\":%d,"
|
||||
"\"freq\":%.3f,\"bw\":%.1f,\"sf\":%d,\"cr\":%d,\"tx\":%d,"
|
||||
"\"name\":\"%s\",\"ip\":\"%s\",\"ssid\":\"%s\","
|
||||
"\"heap\":%d,"
|
||||
"\"loop_detect\":\"%s\",\"path_hash_mode\":%d,\"flood_max\":%d}",
|
||||
_telemetry.uptime_secs, _telemetry.battery_mv, _telemetry.battery_pct,
|
||||
_telemetry.temperature / 10.0f,
|
||||
_rssi, getSignalBars(), _telemetry.neighbor_count,
|
||||
_telemetry.freq, _telemetry.bw, _telemetry.sf, _telemetry.cr, _telemetry.tx_power,
|
||||
_telemetry.node_name, _ipAddr, _config.networks[_activeNetwork].ssid,
|
||||
ESP.getFreeHeap(),
|
||||
loopStr, _telemetry.path_hash_mode, _telemetry.flood_max);
|
||||
|
||||
_mqttClient.publish(_topicTelem, json);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// OTA — HTTP download over WiFi + ESP32 flash
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void WiFiMQTT::performOTA() {
|
||||
_otaPending = false;
|
||||
_state = WiFiMQTTState::OTA_IN_PROGRESS;
|
||||
|
||||
Serial.printf("[OTA] URL: %s\n", _otaUrl);
|
||||
|
||||
_mqttClient.publish(_topicRsp, "OTA: Starting download...");
|
||||
_mqttClient.loop();
|
||||
|
||||
// Disconnect MQTT cleanly before starting HTTP download —
|
||||
// we can't reuse _wifiClient (PubSubClient holds the socket)
|
||||
_mqttClient.disconnect();
|
||||
delay(100);
|
||||
|
||||
// Use a dedicated TLS client for the firmware download
|
||||
WiFiClientSecure otaClient;
|
||||
otaClient.setInsecure(); // skip cert verification (same as MQTT client)
|
||||
otaClient.setTimeout(30); // 30 second socket timeout
|
||||
|
||||
HTTPClient http;
|
||||
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
|
||||
http.setTimeout(180000);
|
||||
|
||||
if (!http.begin(otaClient, _otaUrl)) {
|
||||
Serial.println("[OTA] HTTP begin failed");
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING; // trigger MQTT reconnect
|
||||
return;
|
||||
}
|
||||
|
||||
int httpCode = http.GET();
|
||||
if (httpCode != HTTP_CODE_OK) {
|
||||
Serial.printf("[OTA] HTTP error: %d\n", httpCode);
|
||||
http.end();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
return;
|
||||
}
|
||||
|
||||
int fileSize = http.getSize();
|
||||
if (fileSize <= 0) {
|
||||
Serial.println("[OTA] Unknown content length");
|
||||
http.end();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.printf("[OTA] File size: %d bytes\n", fileSize);
|
||||
|
||||
if (!Update.begin(fileSize)) {
|
||||
Serial.printf("[OTA] Update.begin failed: %s\n", Update.errorString());
|
||||
http.end();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
return;
|
||||
}
|
||||
|
||||
WiFiClient* stream = http.getStreamPtr();
|
||||
uint8_t buf[1024];
|
||||
int offset = 0;
|
||||
int lastPct = -1;
|
||||
|
||||
while (offset < fileSize) {
|
||||
int avail = stream->available();
|
||||
if (avail <= 0) {
|
||||
if (!stream->connected()) break;
|
||||
delay(10);
|
||||
continue;
|
||||
}
|
||||
|
||||
int toRead = (avail < (int)sizeof(buf)) ? avail : sizeof(buf);
|
||||
int got = stream->readBytes(buf, toRead);
|
||||
if (got <= 0) break;
|
||||
|
||||
size_t written = Update.write(buf, got);
|
||||
if (written != (size_t)got) {
|
||||
Serial.printf("[OTA] Write failed: %d of %d\n", written, got);
|
||||
break;
|
||||
}
|
||||
|
||||
offset += got;
|
||||
|
||||
int pct = (offset * 100) / fileSize;
|
||||
if (pct / 10 != lastPct / 10) {
|
||||
Serial.printf("[OTA] Progress: %d%% (%d/%d)\n", pct, offset, fileSize);
|
||||
lastPct = pct;
|
||||
}
|
||||
|
||||
delay(1);
|
||||
}
|
||||
|
||||
http.end();
|
||||
|
||||
if (offset < fileSize) {
|
||||
Serial.printf("[OTA] Incomplete: %d of %d\n", offset, fileSize);
|
||||
Update.abort();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Update.end(true)) {
|
||||
Serial.printf("[OTA] Update.end failed: %s\n", Update.errorString());
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println("[OTA] SUCCESS — rebooting in 3 seconds");
|
||||
delay(3000);
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
#endif // MECK_WIFI_REMOTE
|
||||
@@ -1,195 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// =============================================================================
|
||||
// WiFiMQTT — WiFi + MQTT for audio variant remote repeater
|
||||
//
|
||||
// Same interface as CellularMQTT but uses ESP32 native WiFi + PubSubClient.
|
||||
// No modem, no AT commands, no FreeRTOS task — runs in the main loop.
|
||||
//
|
||||
// Supports multiple WiFi networks in wifi.cfg (SSID/password pairs).
|
||||
// Tries each in order on connect/reconnect.
|
||||
//
|
||||
// Guard: MECK_WIFI_REMOTE (set in platformio env build_flags)
|
||||
// =============================================================================
|
||||
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
|
||||
#ifndef WIFI_MQTT_H
|
||||
#define WIFI_MQTT_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <WiFi.h>
|
||||
#include <WiFiClientSecure.h>
|
||||
#include <PubSubClient.h>
|
||||
#if defined(HAS_SDCARD) || defined(SDCARD_CS)
|
||||
#include <SD.h>
|
||||
#endif
|
||||
#include <SPIFFS.h>
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Configuration
|
||||
// ---------------------------------------------------------------------------
|
||||
#define MQTT_TOPIC_MAX 80
|
||||
#define MQTT_PAYLOAD_MAX 512
|
||||
#define MQTT_CLIENT_ID_MAX 32
|
||||
|
||||
#define CMD_QUEUE_SIZE 8
|
||||
#define RSP_QUEUE_SIZE 8
|
||||
|
||||
#define MAX_WIFI_NETWORKS 4
|
||||
|
||||
#define TELEMETRY_INTERVAL 60000 // 60 seconds
|
||||
#define WIFI_RECONNECT_MS 10000 // 10 seconds between WiFi reconnect attempts
|
||||
#define MQTT_RECONNECT_MS 5000 // 5 seconds between MQTT reconnect attempts
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// State machine
|
||||
// ---------------------------------------------------------------------------
|
||||
enum class WiFiMQTTState : uint8_t {
|
||||
OFF,
|
||||
WIFI_CONNECTING,
|
||||
WIFI_CONNECTED,
|
||||
MQTT_CONNECTING,
|
||||
CONNECTED,
|
||||
OTA_IN_PROGRESS,
|
||||
ERROR
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Queue message types (same as CellularMQTT for compatibility)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
struct MQTTCommand {
|
||||
char cmd[MQTT_PAYLOAD_MAX];
|
||||
};
|
||||
|
||||
struct MQTTResponse {
|
||||
char topic[MQTT_TOPIC_MAX];
|
||||
char payload[MQTT_PAYLOAD_MAX];
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Config (loaded from SD)
|
||||
// ---------------------------------------------------------------------------
|
||||
struct WiFiNetwork {
|
||||
char ssid[40];
|
||||
char password[64];
|
||||
};
|
||||
|
||||
struct WiFiMQTTConfig {
|
||||
WiFiNetwork networks[MAX_WIFI_NETWORKS];
|
||||
int networkCount;
|
||||
char broker[80];
|
||||
uint16_t port; // 8883 for MQTT TLS
|
||||
char username[40];
|
||||
char password[40];
|
||||
char deviceId[MQTT_CLIENT_ID_MAX];
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Telemetry snapshot
|
||||
// ---------------------------------------------------------------------------
|
||||
struct TelemetryData {
|
||||
uint32_t uptime_secs;
|
||||
uint16_t battery_mv;
|
||||
uint8_t battery_pct;
|
||||
int16_t temperature;
|
||||
int rssi;
|
||||
uint8_t neighbor_count;
|
||||
float freq;
|
||||
float bw;
|
||||
uint8_t sf;
|
||||
uint8_t cr;
|
||||
uint8_t tx_power;
|
||||
char node_name[32];
|
||||
bool mqtt_connected;
|
||||
// Routing settings (v1.8+)
|
||||
uint8_t loop_detect; // 0=off, 1=minimal, 2=moderate, 3=strict
|
||||
uint8_t path_hash_mode; // 0=1-byte, 1=2-byte, 2=3-byte
|
||||
uint8_t flood_max; // max flood hop count (0-64)
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// WiFiMQTT class
|
||||
// ---------------------------------------------------------------------------
|
||||
class WiFiMQTT {
|
||||
public:
|
||||
void begin();
|
||||
void loop(); // Call from main loop — handles WiFi, MQTT, publish/subscribe
|
||||
|
||||
// --- Queue API (called from main loop) ---
|
||||
bool recvCommand(MQTTCommand& out);
|
||||
bool sendResponse(const char* topic, const char* payload);
|
||||
|
||||
// --- Telemetry ---
|
||||
void updateTelemetry(const TelemetryData& data);
|
||||
|
||||
// --- OTA ---
|
||||
void requestOTA(const char* url);
|
||||
bool isOTAInProgress() const { return _state == WiFiMQTTState::OTA_IN_PROGRESS; }
|
||||
|
||||
// --- State queries ---
|
||||
WiFiMQTTState getState() const { return _state; }
|
||||
bool isConnected() const { return _state == WiFiMQTTState::CONNECTED; }
|
||||
int getRSSI() const { return _rssi; }
|
||||
int getSignalBars() const;
|
||||
const char* getSSID() const { return _config.networks[_activeNetwork].ssid; }
|
||||
const char* getIPAddress() const { return _ipAddr; }
|
||||
const char* getBroker() const { return _config.broker; }
|
||||
const char* getRspTopic() const { return _topicRsp; }
|
||||
const char* stateString() const;
|
||||
|
||||
static bool loadConfig(WiFiMQTTConfig& cfg);
|
||||
|
||||
private:
|
||||
WiFiMQTTState _state = WiFiMQTTState::OFF;
|
||||
int _rssi = 0;
|
||||
int _activeNetwork = 0;
|
||||
|
||||
char _ipAddr[20] = {0};
|
||||
WiFiMQTTConfig _config = {};
|
||||
TelemetryData _telemetry = {};
|
||||
|
||||
// Topic strings
|
||||
char _topicCmd[MQTT_TOPIC_MAX] = {0};
|
||||
char _topicRsp[MQTT_TOPIC_MAX] = {0};
|
||||
char _topicTelem[MQTT_TOPIC_MAX] = {0};
|
||||
char _topicOta[MQTT_TOPIC_MAX] = {0};
|
||||
|
||||
// Command/response ring buffers (no FreeRTOS queues needed — single-threaded)
|
||||
MQTTCommand _cmdBuf[CMD_QUEUE_SIZE];
|
||||
int _cmdHead = 0, _cmdTail = 0;
|
||||
|
||||
MQTTResponse _rspBuf[RSP_QUEUE_SIZE];
|
||||
int _rspHead = 0, _rspTail = 0;
|
||||
|
||||
// MQTT client stack
|
||||
WiFiClientSecure _wifiClient;
|
||||
PubSubClient _mqttClient;
|
||||
|
||||
// Timers
|
||||
unsigned long _lastWifiAttempt = 0;
|
||||
unsigned long _lastMqttAttempt = 0;
|
||||
unsigned long _lastTelem = 0;
|
||||
unsigned long _lastRSSI = 0;
|
||||
|
||||
// OTA state
|
||||
bool _otaPending = false;
|
||||
char _otaUrl[256] = {0};
|
||||
|
||||
// --- Internal ---
|
||||
bool connectWiFi();
|
||||
bool connectMQTT();
|
||||
void publishTelemetry();
|
||||
void publishQueuedResponses();
|
||||
void performOTA();
|
||||
|
||||
// PubSubClient callback (static → instance)
|
||||
static void mqttCallback(char* topic, byte* payload, unsigned int length);
|
||||
void onMessage(char* topic, byte* payload, unsigned int length);
|
||||
};
|
||||
|
||||
extern WiFiMQTT wifiMQTT;
|
||||
|
||||
#endif // WIFI_MQTT_H
|
||||
#endif // MECK_WIFI_REMOTE
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"name": "PDM_nrf52",
|
||||
"version": "1.0.0",
|
||||
"description": "PDM microphone library for nRF52840 (from Adafruit BSP)",
|
||||
"license": "LGPL-2.1",
|
||||
"frameworks": "arduino",
|
||||
"platforms": "*"
|
||||
}
|
||||
@@ -1,261 +0,0 @@
|
||||
/*
|
||||
PDM.cpp - library to interface with nRF52840 PDM peripheral
|
||||
Part of Arduino - http://www.arduino.cc/
|
||||
|
||||
Copyright (c) 2019 Arduino SA
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General
|
||||
Public License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "PDM.h"
|
||||
#include <hal/nrf_pdm.h>
|
||||
|
||||
#include <Adafruit_TinyUSB.h> // for Serial
|
||||
|
||||
#define DEFAULT_PDM_GAIN 20
|
||||
#define PDM_IRQ_PRIORITY 7
|
||||
|
||||
#define NRF_PDM_FREQ_1280K (nrf_pdm_freq_t)(0x0A000000UL) ///< PDM_CLK= 1.280 MHz (32 MHz / 25) => Fs= 20000 Hz
|
||||
#define NRF_PDM_FREQ_2000K (nrf_pdm_freq_t)(0x10000000UL) ///< PDM_CLK= 2.000 MHz (32 MHz / 16) => Fs= 31250 Hz
|
||||
#define NRF_PDM_FREQ_2667K (nrf_pdm_freq_t)(0x15000000UL) ///< PDM_CLK= 2.667 MHz (32 MHz / 12) => Fs= 41667 Hz
|
||||
#define NRF_PDM_FREQ_3200K (nrf_pdm_freq_t)(0x19000000UL) ///< PDM_CLK= 3.200 MHz (32 MHz / 10) => Fs= 50000 Hz
|
||||
#define NRF_PDM_FREQ_4000K (nrf_pdm_freq_t)(0x20000000UL) ///< PDM_CLK= 4.000 MHz (32 MHz / 8) => Fs= 62500 Hz
|
||||
|
||||
PDMClass::PDMClass(int dinPin, int clkPin, int pwrPin) :
|
||||
_dinPin(dinPin),
|
||||
_clkPin(clkPin),
|
||||
_pwrPin(pwrPin),
|
||||
_onReceive(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
PDMClass::~PDMClass()
|
||||
{
|
||||
}
|
||||
|
||||
void PDMClass::setPins(int dataPin, int clkPin, int pwrPin)
|
||||
{
|
||||
_dinPin = dataPin;
|
||||
_clkPin = clkPin;
|
||||
_pwrPin = pwrPin;
|
||||
}
|
||||
|
||||
int PDMClass::begin(int channels, long sampleRate)
|
||||
{
|
||||
_channels = channels;
|
||||
|
||||
// Enable high frequency oscillator if not already enabled
|
||||
uint8_t sd_en = 0;
|
||||
sd_softdevice_is_enabled(&sd_en);
|
||||
|
||||
if (sd_en)
|
||||
{
|
||||
uint32_t is_running;
|
||||
sd_clock_hfclk_is_running(&is_running);
|
||||
|
||||
if (!is_running) {
|
||||
sd_clock_hfclk_request();
|
||||
|
||||
while(!is_running) {
|
||||
yield();
|
||||
sd_clock_hfclk_is_running(&is_running);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {
|
||||
NRF_CLOCK->TASKS_HFCLKSTART = 1;
|
||||
while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) yield();
|
||||
}
|
||||
}
|
||||
|
||||
// configure the sample rate and channels
|
||||
switch (sampleRate) {
|
||||
case 16000:
|
||||
#ifndef NRF52832_XXAA
|
||||
NRF_PDM->RATIO = ((PDM_RATIO_RATIO_Ratio80 << PDM_RATIO_RATIO_Pos) & PDM_RATIO_RATIO_Msk);
|
||||
#endif
|
||||
nrf_pdm_clock_set(NRF_PDM, NRF_PDM_FREQ_1280K);
|
||||
break;
|
||||
case 41667:
|
||||
nrf_pdm_clock_set(NRF_PDM, NRF_PDM_FREQ_2667K);
|
||||
break;
|
||||
default:
|
||||
return 0; // unsupported
|
||||
}
|
||||
|
||||
switch (channels) {
|
||||
case 2:
|
||||
nrf_pdm_mode_set(NRF_PDM, NRF_PDM_MODE_STEREO, NRF_PDM_EDGE_LEFTFALLING);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
nrf_pdm_mode_set(NRF_PDM, NRF_PDM_MODE_MONO, NRF_PDM_EDGE_LEFTFALLING);
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0; // unsupported
|
||||
}
|
||||
|
||||
setGain(DEFAULT_PDM_GAIN);
|
||||
|
||||
// configure the I/O and mux
|
||||
pinMode(_clkPin, OUTPUT);
|
||||
digitalWrite(_clkPin, LOW);
|
||||
|
||||
pinMode(_dinPin, INPUT);
|
||||
|
||||
nrf_pdm_psel_connect(NRF_PDM, digitalPinToPinName(_clkPin), digitalPinToPinName(_dinPin));
|
||||
|
||||
// clear events and enable PDM interrupts
|
||||
nrf_pdm_event_clear(NRF_PDM, NRF_PDM_EVENT_STARTED);
|
||||
nrf_pdm_event_clear(NRF_PDM, NRF_PDM_EVENT_END);
|
||||
nrf_pdm_event_clear(NRF_PDM, NRF_PDM_EVENT_STOPPED);
|
||||
nrf_pdm_int_enable(NRF_PDM, NRF_PDM_INT_STARTED | NRF_PDM_INT_STOPPED);
|
||||
|
||||
if (_pwrPin > -1) {
|
||||
// power the mic on
|
||||
pinMode(_pwrPin, OUTPUT);
|
||||
digitalWrite(_pwrPin, HIGH);
|
||||
}
|
||||
|
||||
// clear the buffer
|
||||
_doubleBuffer.reset();
|
||||
|
||||
// set the PDM IRQ priority and enable
|
||||
NVIC_SetPriority(PDM_IRQn, PDM_IRQ_PRIORITY);
|
||||
NVIC_ClearPendingIRQ(PDM_IRQn);
|
||||
NVIC_EnableIRQ(PDM_IRQn);
|
||||
|
||||
// set the buffer for transfer
|
||||
// nrf_pdm_buffer_set((uint32_t*)_doubleBuffer.data(), _doubleBuffer.availableForWrite() / (sizeof(int16_t) * _channels));
|
||||
// _doubleBuffer.swap();
|
||||
|
||||
// enable and trigger start task
|
||||
nrf_pdm_enable(NRF_PDM);
|
||||
nrf_pdm_event_clear(NRF_PDM, NRF_PDM_EVENT_STARTED);
|
||||
nrf_pdm_task_trigger(NRF_PDM, NRF_PDM_TASK_START);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void PDMClass::end()
|
||||
{
|
||||
// disable PDM and IRQ
|
||||
nrf_pdm_disable(NRF_PDM);
|
||||
|
||||
NVIC_DisableIRQ(PDM_IRQn);
|
||||
|
||||
if (_pwrPin > -1) {
|
||||
// power the mic off
|
||||
digitalWrite(_pwrPin, LOW);
|
||||
pinMode(_pwrPin, INPUT);
|
||||
}
|
||||
|
||||
// Don't disable high frequency oscillator since it could be in use by RADIO
|
||||
|
||||
// unconfigure the I/O and un-mux
|
||||
nrf_pdm_psel_disconnect(NRF_PDM);
|
||||
|
||||
pinMode(_clkPin, INPUT);
|
||||
}
|
||||
|
||||
int PDMClass::available()
|
||||
{
|
||||
NVIC_DisableIRQ(PDM_IRQn);
|
||||
|
||||
size_t avail = _doubleBuffer.available();
|
||||
|
||||
NVIC_EnableIRQ(PDM_IRQn);
|
||||
|
||||
return avail;
|
||||
}
|
||||
|
||||
int PDMClass::read(void* buffer, size_t size)
|
||||
{
|
||||
NVIC_DisableIRQ(PDM_IRQn);
|
||||
|
||||
int read = _doubleBuffer.read(buffer, size);
|
||||
|
||||
NVIC_EnableIRQ(PDM_IRQn);
|
||||
|
||||
return read;
|
||||
}
|
||||
|
||||
void PDMClass::onReceive(void(*function)(void))
|
||||
{
|
||||
_onReceive = function;
|
||||
}
|
||||
|
||||
void PDMClass::setGain(int gain)
|
||||
{
|
||||
nrf_pdm_gain_set(NRF_PDM, gain, gain);
|
||||
}
|
||||
|
||||
void PDMClass::setBufferSize(int bufferSize)
|
||||
{
|
||||
_doubleBuffer.setSize(bufferSize);
|
||||
}
|
||||
|
||||
void PDMClass::IrqHandler()
|
||||
{
|
||||
if (nrf_pdm_event_check(NRF_PDM, NRF_PDM_EVENT_STARTED)) {
|
||||
nrf_pdm_event_clear(NRF_PDM, NRF_PDM_EVENT_STARTED);
|
||||
|
||||
if (_doubleBuffer.available() == 0) {
|
||||
// switch to the next buffer
|
||||
nrf_pdm_buffer_set(NRF_PDM, (uint32_t*)_doubleBuffer.data(), _doubleBuffer.availableForWrite() / (sizeof(int16_t) * _channels));
|
||||
|
||||
// make the current one available for reading
|
||||
_doubleBuffer.swap(_doubleBuffer.availableForWrite());
|
||||
|
||||
// call receive callback if provided
|
||||
if (_onReceive) {
|
||||
_onReceive();
|
||||
}
|
||||
} else {
|
||||
// buffer overflow, stop
|
||||
nrf_pdm_disable(NRF_PDM);
|
||||
}
|
||||
} else if (nrf_pdm_event_check(NRF_PDM, NRF_PDM_EVENT_STOPPED)) {
|
||||
nrf_pdm_event_clear(NRF_PDM, NRF_PDM_EVENT_STOPPED);
|
||||
} else if (nrf_pdm_event_check(NRF_PDM, NRF_PDM_EVENT_END)) {
|
||||
nrf_pdm_event_clear(NRF_PDM, NRF_PDM_EVENT_END);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"
|
||||
{
|
||||
void PDM_IRQHandler(void)
|
||||
{
|
||||
PDM.IrqHandler();
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef PIN_PDM_DIN
|
||||
#define PIN_PDM_DIN -1
|
||||
#endif
|
||||
|
||||
#ifndef PIN_PDM_CLK
|
||||
#define PIN_PDM_CLK -1
|
||||
#endif
|
||||
|
||||
#ifndef PIN_PDM_PWR
|
||||
#define PIN_PDM_PWR -1
|
||||
#endif
|
||||
|
||||
PDMClass PDM(PIN_PDM_DIN, PIN_PDM_CLK, PIN_PDM_PWR);
|
||||
@@ -1,65 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2019 Arduino LLC. All right reserved.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _PDM_H_INCLUDED
|
||||
#define _PDM_H_INCLUDED
|
||||
|
||||
#if !defined(ARDUINO_NRF52_ADAFRUIT)
|
||||
#error "This library targets only Adafruit NRF52840 boards"
|
||||
#endif
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <Adafruit_TinyUSB.h> // for Serial
|
||||
#include "utility/PDMDoubleBuffer.h"
|
||||
|
||||
class PDMClass
|
||||
{
|
||||
public:
|
||||
PDMClass(int dataPin, int clkPin, int pwrPin);
|
||||
virtual ~PDMClass();
|
||||
|
||||
void setPins(int dataPin, int clkPin, int pwrPin);
|
||||
int begin(int channels, long sampleRate);
|
||||
void end();
|
||||
|
||||
virtual int available();
|
||||
virtual int read(void* buffer, size_t size);
|
||||
|
||||
void onReceive(void(*)(void));
|
||||
|
||||
void setGain(int gain);
|
||||
void setBufferSize(int bufferSize);
|
||||
|
||||
// private:
|
||||
void IrqHandler();
|
||||
|
||||
private:
|
||||
int _dinPin;
|
||||
int _clkPin;
|
||||
int _pwrPin;
|
||||
|
||||
int _channels;
|
||||
|
||||
PDMDoubleBuffer _doubleBuffer;
|
||||
|
||||
void (*_onReceive)(void);
|
||||
};
|
||||
|
||||
extern PDMClass PDM;
|
||||
|
||||
#endif
|
||||
@@ -1,133 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2016 Arduino LLC. All right reserved.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "PDMDoubleBuffer.h"
|
||||
|
||||
PDMDoubleBuffer::PDMDoubleBuffer() :
|
||||
_size(DEFAULT_PDM_BUFFER_SIZE)
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
PDMDoubleBuffer::~PDMDoubleBuffer()
|
||||
{
|
||||
}
|
||||
|
||||
void PDMDoubleBuffer::setSize(int size)
|
||||
{
|
||||
_size = size;
|
||||
}
|
||||
|
||||
void PDMDoubleBuffer::reset()
|
||||
{
|
||||
_buffer[0] = (uint8_t*)realloc(_buffer[0], _size);
|
||||
_buffer[1] = (uint8_t*)realloc(_buffer[1], _size);
|
||||
|
||||
memset(_buffer[0], 0x00, _size);
|
||||
memset(_buffer[1], 0x00, _size);
|
||||
|
||||
_index = 0;
|
||||
_length[0] = 0;
|
||||
_length[1] = 0;
|
||||
_readOffset[0] = 0;
|
||||
_readOffset[1] = 0;
|
||||
}
|
||||
|
||||
size_t PDMDoubleBuffer::availableForWrite()
|
||||
{
|
||||
return (_size - (_length[_index] - _readOffset[_index]));
|
||||
}
|
||||
|
||||
size_t PDMDoubleBuffer::write(const void *buffer, size_t size)
|
||||
{
|
||||
size_t space = availableForWrite();
|
||||
|
||||
if (size > space) {
|
||||
size = space;
|
||||
}
|
||||
|
||||
if (size == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy(&_buffer[_index][_length[_index]], buffer, size);
|
||||
|
||||
_length[_index] += size;
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
size_t PDMDoubleBuffer::read(void *buffer, size_t size)
|
||||
{
|
||||
size_t avail = available();
|
||||
|
||||
if (size > avail) {
|
||||
size = avail;
|
||||
}
|
||||
|
||||
if (size == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy(buffer, &_buffer[_index][_readOffset[_index]], size);
|
||||
_readOffset[_index] += size;
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
size_t PDMDoubleBuffer::peek(void *buffer, size_t size)
|
||||
{
|
||||
size_t avail = available();
|
||||
|
||||
if (size > avail) {
|
||||
size = avail;
|
||||
}
|
||||
|
||||
if (size == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy(buffer, &_buffer[_index][_readOffset[_index]], size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
void* PDMDoubleBuffer::data()
|
||||
{
|
||||
return (void*)_buffer[_index];
|
||||
}
|
||||
|
||||
size_t PDMDoubleBuffer::available()
|
||||
{
|
||||
return _length[_index] - _readOffset[_index];
|
||||
}
|
||||
|
||||
void PDMDoubleBuffer::swap(int length)
|
||||
{
|
||||
if (_index == 0) {
|
||||
_index = 1;
|
||||
} else {
|
||||
_index = 0;
|
||||
}
|
||||
|
||||
_length[_index] = length;
|
||||
_readOffset[_index] = 0;
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2016 Arduino LLC. All right reserved.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _PDM_DOUBLE_BUFFER_H_INCLUDED
|
||||
#define _PDM_DOUBLE_BUFFER_H_INCLUDED
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define DEFAULT_PDM_BUFFER_SIZE 512
|
||||
|
||||
class PDMDoubleBuffer
|
||||
{
|
||||
public:
|
||||
PDMDoubleBuffer();
|
||||
virtual ~PDMDoubleBuffer();
|
||||
|
||||
void setSize(int size);
|
||||
|
||||
void reset();
|
||||
|
||||
size_t availableForWrite();
|
||||
size_t write(const void *buffer, size_t size);
|
||||
size_t read(void *buffer, size_t size);
|
||||
size_t peek(void *buffer, size_t size);
|
||||
void* data();
|
||||
size_t available();
|
||||
void swap(int length = 0);
|
||||
|
||||
private:
|
||||
uint8_t* _buffer[2];
|
||||
int _size;
|
||||
volatile int _length[2];
|
||||
volatile int _readOffset[2];
|
||||
volatile int _index;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "codec2_nrf52",
|
||||
"version": "0.7.0",
|
||||
"description": "Codec2 low-bitrate speech codec - stripped for nRF52840 (1200bps mode)",
|
||||
"license": "LGPL-2.1",
|
||||
"frameworks": "arduino",
|
||||
"platforms": "*",
|
||||
"build": {
|
||||
"flags": "-DCODEC2_MODE_EN_DEFAULT"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,29 +0,0 @@
|
||||
/*
|
||||
FILE....: ../src/HRA_112_112.h
|
||||
|
||||
Static arrays for CML LDPC, generated by ldpc_gen_h_file.m.
|
||||
*/
|
||||
|
||||
#define HRA_112_112_NUMBERPARITYBITS 112
|
||||
#define HRA_112_112_MAX_ROW_WEIGHT 3
|
||||
#define HRA_112_112_CODELENGTH 224
|
||||
#define HRA_112_112_NUMBERROWSHCOLS 112
|
||||
#define HRA_112_112_MAX_COL_WEIGHT 3
|
||||
#define HRA_112_112_DEC_TYPE 0
|
||||
#define HRA_112_112_MAX_ITER 100
|
||||
|
||||
double HRA_112_112_H_rows[] = {
|
||||
22, 18, 15, 63, 16, 13, 1, 2, 29, 25, 28, 4, 36, 10, 38, 7, 60, 23, 11, 38, 28, 1, 12, 31, 57, 45, 57, 30, 23, 59, 67, 14, 16, 4, 14, 62, 15, 50, 7, 70, 64, 6, 42, 48, 9, 31, 19, 40, 49, 2, 25, 3, 41, 49, 36, 9, 29, 39, 31, 5, 17, 1, 29, 25, 11, 21, 18, 2, 8, 22, 39, 15, 8, 22, 13, 3, 19, 4, 21, 62, 34, 43, 6, 24, 17, 60, 8, 74, 6, 44, 60, 10, 33, 12, 26, 24, 45, 81, 69, 80, 41, 28, 23, 5, 10, 20, 52, 18, 13, 86, 3, 7, 59, 21, 65, 72, 34, 37, 26, 55, 47, 48, 34, 5, 44, 47, 68, 96, 82, 111, 61, 74, 30, 17, 55, 98, 81, 66, 89, 35, 74, 82, 91, 51, 55, 51, 30, 89, 61, 75, 40, 71, 73, 11, 56, 54, 19, 47, 94, 69, 64, 20, 64, 12, 54, 77, 42, 88, 36, 52, 90, 63, 70, 27, 32, 73, 91, 32, 56, 46, 9, 78, 51, 68, 88, 67, 20, 43, 40, 14, 66, 86, 39, 97, 38, 27, 50, 84, 54, 92, 61, 46, 67, 24, 58, 35, 58, 37, 98, 85, 73, 84, 48, 35, 57, 16, 26, 37, 65, 32, 72, 95, 107, 33, 77, 33, 85, 105, 106, 75, 56, 71, 79, 59, 52, 105, 79, 90, 93, 100, 88, 112, 86, 80, 65, 42, 106, 100, 93, 94, 99, 97, 93, 101, 111, 99, 83, 53, 85, 95, 108, 107, 41, 109, 84, 78, 104, 101, 69, 110, 98, 103, 80, 83, 77, 71, 76, 78, 87, 102, 104, 95, 96, 83, 87, 50, 110, 103, 112, 45, 58, 70, 94, 91, 89, 81, 101, 82, 63, 72, 100, 97, 76, 112, 53, 105, 49, 75, 109, 102, 66, 111, 68, 87, 92, 79, 96, 43, 90, 44, 110, 99, 102, 92, 103, 106, 62, 53, 27, 46, 108, 104, 107, 108, 109, 76
|
||||
};
|
||||
|
||||
double HRA_112_112_H_cols[] = {
|
||||
7, 8, 52, 12, 12, 42, 16, 69, 45, 14, 19, 23, 6, 32, 3, 5, 22, 2, 45, 50, 2, 1, 18, 84, 10, 7, 62, 11, 9, 21, 24, 63, 2, 5, 28, 13, 6, 15, 58, 39, 39, 22, 76, 13, 26, 68, 9, 10, 49, 38, 32, 11, 34, 44, 8, 7, 25, 67, 1, 17, 19, 36, 4, 41, 3, 26, 31, 15, 45, 40, 8, 4, 41, 20, 6, 53, 1, 42, 9, 20, 25, 17, 33, 41, 3, 19, 55, 17, 27, 14, 31, 88, 15, 26, 36, 16, 28, 24, 27, 16, 30, 56, 48, 43, 4, 5, 38, 37, 40, 46, 18, 18, 22, 50, 76, 34, 60, 83, 39, 73, 56, 92, 42, 52, 75, 35, 37, 33, 61, 67, 47, 75, 66, 70, 29, 92, 51, 95, 84, 21, 57, 28, 46, 66, 93, 11, 94, 55, 96, 20, 71, 48, 53, 43, 82, 90, 66, 90, 14, 44, 54, 62, 34, 58, 81, 53, 23, 43, 27, 93, 10, 86, 37, 80, 60, 49, 21, 79, 74, 72, 48, 61, 40, 76, 64, 29, 38, 79, 51, 54, 13, 49, 72, 30, 50, 86, 35, 80, 61, 56, 36, 59, 65, 91, 25, 47, 58, 59, 78, 47, 32, 24, 44, 86, 64, 57, 12, 23, 109, 107, 85, 63, 31, 65, 62, 68, 111, 78, 104, 89, 112, 87, 69, 105, 65, 94, 109, 78, 72, 104, 85, 108, 77, 106, 79, 74, 103, 96, 64, 105, 105, 102, 63, 35, 59, 108, 112, 81, 102, 57, 106, 83, 81, 77, 101, 55, 94, 96, 97, 106, 46, 101, 83, 85, 71, 107, 104, 87, 33, 67, 103, 95, 30, 91, 89, 103, 75, 51, 107, 87, 91, 89, 99, 68, 52, 109, 99, 88, 84, 112, 54, 70, 92, 100, 98, 74, 60, 100, 98, 110, 90, 73, 71, 95, 70, 100, 29, 69, 110, 93, 82, 97, 98, 77, 73, 99, 101, 108, 82, 102, 111, 110, 111, 97, 88, 80
|
||||
};
|
||||
|
||||
double HRA_112_112_input[] = {
|
||||
-5.7868467875518395, -6.340739523388657, 3.6654768375589399, 4.1452438183910827, -4.6746135252043111, -4.8353634065473701, -6.0729133999971285, 4.0335561282226271, -6.1114855315699135, 4.1029513876344916, -4.6481634503883624, 5.7650915278538646, 6.5567610490570312, 5.1810523550761207, 3.4789051916752669, 4.2678848515507122, 4.0314705275547089, 6.0297078342283799, 4.9101169653222163, -6.4577297598332324, -7.4273487270443095, 3.472130985267488, -6.5346233967202254, 7.5312028458762414, -5.2618748211985915, 6.4198074556254969, 3.7500207659511484, 5.4040878141701141, 5.7554260586578803, 3.3973620625026886, 7.1815269888532907, 5.0031747952824963, 5.1377243276145599, 5.385229914081755, -0.61384230253605643, 0.46954911161835722, 3.5182611493679663, 3.393698829567279, 6.147483866535171, 3.8374563885989228, 1.3663773773557015, -4.0917661778352352, -3.2968298202652835, -6.0371912041431148, -8.4279246895331781, -0.98556788606912304, -3.515442879601625, 4.2642476942514875, -5.5905016743156972, 3.6920101668161727, -4.035860013856472, 5.3290190966269995, -2.9729656070594057, -2.5054371041338537, 6.8683150013190115, -7.1109038108500098, 6.7301890172695158, 2.5782062882356374, 4.4161464916633282, 2.2692851122935322, -1.3682527221025034, 3.0794629981237631, -7.8655412763279973, 1.1479897597156494, 0.22370696314520414, 1.1222453403894148, -3.1335220808128219, -3.8352985265277089, -1.2463521619727009, 2.9511814015293218, -8.668811041413111, 3.0185610517830548, -6.9592962351476091, 3.9653416636625414, -3.9384322074229408, 1.6789027505247516, 2.9579632055145502, -2.1212672699995125, -3.8892168640945193, 7.516114544807583, -0.84285604179011253, 4.1295390817792512, 0.26093278495228162, -3.6071666499996047, -0.065323173773821908, -1.9146584862100915, 4.7951161310834367, 5.5440002982088803, 3.5917539980319364, -0.81416023563684481, -2.6588977758747721, -3.0404494660606227, 4.5389936536649662, 2.7870543501114082, 3.5622966707453889, 5.1982116994791161, 2.4775319712999302, 0.70541080068007755, 0.89622787904518464, 4.3789020039207758, -2.4976040580619445, -0.7201255450933205, 4.2071986295109394, -5.2418379271657001, -4.092365654835163, -4.3510198326542557, 3.7404138637596001, 1.2496890930262492, -7.1053909336149728, -4.8888279905256748, -6.3523901926735249, -1.8757980409249277, 3.6256343910366273, -3.6165398844758228, -0.38322352317510561, -0.84747550047769449, -1.2717892264620718, -2.3899810721111154, 4.1368500898628637, 3.0440159002314924, 3.4235543074310728, -2.146097053557551, -1.7537615307751735, -1.0280987119225686, 4.9009275359419204, 5.0046047156368116, -0.47700833783807428, -4.5989492891875567, 1.4154839158712684, 0.33410724822249849, -4.771937854508927, -1.1817007924012972, -2.5960865023249302, 0.30422629502493687, -2.2097849377516763, -4.343244940878872, 1.9464288912612249, -9.0976989032526809, -8.6454142547592685, -1.8164317522989997, 2.2780845702169961, -4.8775405042023356, -0.61834757216625769, -1.985554501661331, -0.87599558657596699, -8.0610201531782124, -5.9847574894882554, -10.365536404711067, 2.9782191161319376, -6.9443820217795169, 0.72935566343949876, -4.5326632961380664, 1.1307250622386897, -4.0853969692041314, 5.4926924507347596, 5.6722555096362042, -2.5069992226180222, 2.0460084066662092, 2.5375899018238197, -3.5264293517823679, 3.2103083878487557, 5.793713046583183, -2.7633653287377995, 6.482851815629938, -1.2471646528152021, 3.0010491047486085, 0.29072399293868856, -4.0686659405747738, -2.6253508133431289, -6.3896590677017171, 5.7054076607727886, 4.3053292399977092, 2.2372599539047151, -4.8975607398431897, 5.8124794005531406, -0.69648233429781359, 5.5509723605410004, 2.0900652762982923, -4.7944253330785118, -2.9224693872108287, 6.0218579796888303, 4.7027436964063387, -4.1564871824868659, -1.324779121305123, 0.38031612697724176, -0.69335927945709175, -0.4028295686263082, 2.0967669774299189, 2.7947186736855909, 2.1473880039026203, 6.368702510367898, -3.0691782325684049, 1.6125827087903837, 3.5925359669662518, 5.178224480471127, -2.5070763799556617, 4.4280512389456632, -6.5385259627250134, 2.8047951999607603, -3.0185715385981151, -0.33348983718789993, -4.3285127692183556, -7.9609407359365134, 7.064973172264966, 0.95714371675898213, -5.5481272272415545, -1.6024149180708045, -4.5740915350065992, -1.5117120929647263, 1.9996824689403947, 5.9527526663437724, 5.0239857792804967, 6.2677418491798784, -1.9758548902654505, 2.1709284879472324, 2.5054563138111572, 4.4483685492445115, 3.2098357106645676, -4.5306213859481099, 1.1291114493451548, 1.5827945023160555, -5.2733490015732292, 5.0664709821503457, 1.9652801880230106
|
||||
};
|
||||
|
||||
char HRA_112_112_detected_data[] = {
|
||||
1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0
|
||||
};
|
||||
@@ -1,164 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2003-2010, Mark Borgerding
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
* Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* kiss_fft.h
|
||||
defines kiss_fft_scalar as either short or a float type
|
||||
and defines
|
||||
typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */
|
||||
#include "kiss_fft.h"
|
||||
#include <limits.h>
|
||||
|
||||
#define MAXFACTORS 32
|
||||
/* e.g. an fft of length 128 has 4 factors
|
||||
as far as kissfft is concerned
|
||||
4*4*4*2
|
||||
*/
|
||||
|
||||
struct kiss_fft_state{
|
||||
int nfft;
|
||||
int inverse;
|
||||
int factors[2*MAXFACTORS];
|
||||
kiss_fft_cpx twiddles[1];
|
||||
};
|
||||
|
||||
/*
|
||||
Explanation of macros dealing with complex math:
|
||||
|
||||
C_MUL(m,a,b) : m = a*b
|
||||
C_FIXDIV( c , div ) : if a fixed point impl., c /= div. noop otherwise
|
||||
C_SUB( res, a,b) : res = a - b
|
||||
C_SUBFROM( res , a) : res -= a
|
||||
C_ADDTO( res , a) : res += a
|
||||
* */
|
||||
#ifdef FIXED_POINT
|
||||
#if (FIXED_POINT==32)
|
||||
# define FRACBITS 31
|
||||
# define SAMPPROD int64_t
|
||||
#define SAMP_MAX 2147483647
|
||||
#else
|
||||
# define FRACBITS 15
|
||||
# define SAMPPROD int32_t
|
||||
#define SAMP_MAX 32767
|
||||
#endif
|
||||
|
||||
#define SAMP_MIN -SAMP_MAX
|
||||
|
||||
#if defined(CHECK_OVERFLOW)
|
||||
# define CHECK_OVERFLOW_OP(a,op,b) \
|
||||
if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \
|
||||
fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) ); }
|
||||
#endif
|
||||
|
||||
|
||||
# define smul(a,b) ( (SAMPPROD)(a)*(b) )
|
||||
# define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS )
|
||||
|
||||
# define S_MUL(a,b) sround( smul(a,b) )
|
||||
|
||||
# define C_MUL(m,a,b) \
|
||||
do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \
|
||||
(m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0)
|
||||
|
||||
# define DIVSCALAR(x,k) \
|
||||
(x) = sround( smul( x, SAMP_MAX/k ) )
|
||||
|
||||
# define C_FIXDIV(c,div) \
|
||||
do { DIVSCALAR( (c).r , div); \
|
||||
DIVSCALAR( (c).i , div); }while (0)
|
||||
|
||||
# define C_MULBYSCALAR( c, s ) \
|
||||
do{ (c).r = sround( smul( (c).r , s ) ) ;\
|
||||
(c).i = sround( smul( (c).i , s ) ) ; }while(0)
|
||||
|
||||
#else /* not FIXED_POINT*/
|
||||
|
||||
# define S_MUL(a,b) ( (a)*(b) )
|
||||
#define C_MUL(m,a,b) \
|
||||
do{ (m).r = (a).r*(b).r - (a).i*(b).i;\
|
||||
(m).i = (a).r*(b).i + (a).i*(b).r; }while(0)
|
||||
# define C_FIXDIV(c,div) /* NOOP */
|
||||
# define C_MULBYSCALAR( c, s ) \
|
||||
do{ (c).r *= (s);\
|
||||
(c).i *= (s); }while(0)
|
||||
#endif
|
||||
|
||||
#ifndef CHECK_OVERFLOW_OP
|
||||
# define CHECK_OVERFLOW_OP(a,op,b) /* noop */
|
||||
#endif
|
||||
|
||||
#define C_ADD( res, a,b)\
|
||||
do { \
|
||||
CHECK_OVERFLOW_OP((a).r,+,(b).r)\
|
||||
CHECK_OVERFLOW_OP((a).i,+,(b).i)\
|
||||
(res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \
|
||||
}while(0)
|
||||
#define C_SUB( res, a,b)\
|
||||
do { \
|
||||
CHECK_OVERFLOW_OP((a).r,-,(b).r)\
|
||||
CHECK_OVERFLOW_OP((a).i,-,(b).i)\
|
||||
(res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \
|
||||
}while(0)
|
||||
#define C_ADDTO( res , a)\
|
||||
do { \
|
||||
CHECK_OVERFLOW_OP((res).r,+,(a).r)\
|
||||
CHECK_OVERFLOW_OP((res).i,+,(a).i)\
|
||||
(res).r += (a).r; (res).i += (a).i;\
|
||||
}while(0)
|
||||
|
||||
#define C_SUBFROM( res , a)\
|
||||
do {\
|
||||
CHECK_OVERFLOW_OP((res).r,-,(a).r)\
|
||||
CHECK_OVERFLOW_OP((res).i,-,(a).i)\
|
||||
(res).r -= (a).r; (res).i -= (a).i; \
|
||||
}while(0)
|
||||
|
||||
|
||||
#ifdef FIXED_POINT
|
||||
# define KISS_FFT_COS(phase) floorf(.5+SAMP_MAX * cosf (phase))
|
||||
# define KISS_FFT_SIN(phase) floorf(.5+SAMP_MAX * sinf (phase))
|
||||
# define HALF_OF(x) ((x)>>1)
|
||||
#elif defined(USE_SIMD)
|
||||
# define KISS_FFT_COS(phase) _mm_set1_ps( cosf(phase) )
|
||||
# define KISS_FFT_SIN(phase) _mm_set1_ps( sinf(phase) )
|
||||
# define HALF_OF(x) ((x)*_mm_set1_ps(.5))
|
||||
#else
|
||||
# define KISS_FFT_COS(phase) (kiss_fft_scalar) cosf(phase)
|
||||
# define KISS_FFT_SIN(phase) (kiss_fft_scalar) sinf(phase)
|
||||
# define HALF_OF(x) ((x)*.5)
|
||||
#endif
|
||||
|
||||
#define kf_cexp(x,phase) \
|
||||
do{ \
|
||||
(x)->r = KISS_FFT_COS(phase);\
|
||||
(x)->i = KISS_FFT_SIN(phase);\
|
||||
}while(0)
|
||||
|
||||
|
||||
/* a debugging function */
|
||||
#define pcpx(c)\
|
||||
fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) )
|
||||
|
||||
|
||||
#ifdef KISS_FFT_USE_ALLOCA
|
||||
// define this to allow use of alloca instead of malloc for temporary buffers
|
||||
// Temporary buffers are used in two case:
|
||||
// 1. FFT sizes that have "bad" factors. i.e. not 2,3 and 5
|
||||
// 2. "in-place" FFTs. Notice the quotes, since kissfft does not really do an in-place transform.
|
||||
#include <alloca.h>
|
||||
#define KISS_FFT_TMP_ALLOC(nbytes) alloca(nbytes)
|
||||
#define KISS_FFT_TMP_FREE(ptr)
|
||||
#else
|
||||
#define KISS_FFT_TMP_ALLOC(nbytes) KISS_FFT_MALLOC(nbytes)
|
||||
#define KISS_FFT_TMP_FREE(ptr) KISS_FFT_FREE(ptr)
|
||||
#endif
|
||||
@@ -1,39 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: ampexp.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: & August 2012
|
||||
|
||||
Functions for experimenting with amplitude quantisation.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2012 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not,see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __AMPEX__
|
||||
#define __AMPEXP__
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
struct AEXP;
|
||||
|
||||
struct AEXP *amp_experiment_create();
|
||||
void amp_experiment_destroy(struct AEXP *aexp);
|
||||
void amp_experiment(struct AEXP *aexp, MODEL *model, char *arg);
|
||||
|
||||
#endif
|
||||
@@ -1,106 +0,0 @@
|
||||
#define BPF_N 101
|
||||
|
||||
float bpf[]={
|
||||
0.002174,
|
||||
0.003245,
|
||||
0.002147,
|
||||
0.001866,
|
||||
0.002764,
|
||||
0.000567,
|
||||
-0.001641,
|
||||
-0.000565,
|
||||
-0.002415,
|
||||
-0.005837,
|
||||
-0.003620,
|
||||
-0.002828,
|
||||
-0.006268,
|
||||
-0.002787,
|
||||
0.001963,
|
||||
-0.001234,
|
||||
0.001446,
|
||||
0.009200,
|
||||
0.005331,
|
||||
0.003521,
|
||||
0.011821,
|
||||
0.006951,
|
||||
-0.002015,
|
||||
0.005137,
|
||||
0.001828,
|
||||
-0.013390,
|
||||
-0.007058,
|
||||
-0.003273,
|
||||
-0.020458,
|
||||
-0.014321,
|
||||
0.001751,
|
||||
-0.012891,
|
||||
-0.009730,
|
||||
0.018993,
|
||||
0.008544,
|
||||
0.000534,
|
||||
0.035755,
|
||||
0.029074,
|
||||
-0.001192,
|
||||
0.030852,
|
||||
0.030983,
|
||||
-0.029834,
|
||||
-0.009550,
|
||||
0.011945,
|
||||
-0.081971,
|
||||
-0.082875,
|
||||
0.000423,
|
||||
-0.133526,
|
||||
-0.211778,
|
||||
0.182628,
|
||||
0.514906,
|
||||
0.182628,
|
||||
-0.211778,
|
||||
-0.133526,
|
||||
0.000423,
|
||||
-0.082875,
|
||||
-0.081971,
|
||||
0.011945,
|
||||
-0.009550,
|
||||
-0.029834,
|
||||
0.030983,
|
||||
0.030852,
|
||||
-0.001192,
|
||||
0.029074,
|
||||
0.035755,
|
||||
0.000534,
|
||||
0.008544,
|
||||
0.018993,
|
||||
-0.009730,
|
||||
-0.012891,
|
||||
0.001751,
|
||||
-0.014321,
|
||||
-0.020458,
|
||||
-0.003273,
|
||||
-0.007058,
|
||||
-0.013390,
|
||||
0.001828,
|
||||
0.005137,
|
||||
-0.002015,
|
||||
0.006951,
|
||||
0.011821,
|
||||
0.003521,
|
||||
0.005331,
|
||||
0.009200,
|
||||
0.001446,
|
||||
-0.001234,
|
||||
0.001963,
|
||||
-0.002787,
|
||||
-0.006268,
|
||||
-0.002828,
|
||||
-0.003620,
|
||||
-0.005837,
|
||||
-0.002415,
|
||||
-0.000565,
|
||||
-0.001641,
|
||||
0.000567,
|
||||
0.002764,
|
||||
0.001866,
|
||||
0.002147,
|
||||
0.003245,
|
||||
0.002174
|
||||
};
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
#define BPFB_N 101
|
||||
|
||||
float bpfb[]={
|
||||
0.003795,
|
||||
0.006827,
|
||||
0.002261,
|
||||
0.002523,
|
||||
0.005758,
|
||||
-0.000264,
|
||||
-0.000674,
|
||||
0.003113,
|
||||
-0.004144,
|
||||
-0.004923,
|
||||
0.000043,
|
||||
-0.008017,
|
||||
-0.008711,
|
||||
-0.001802,
|
||||
-0.010210,
|
||||
-0.010428,
|
||||
-0.000899,
|
||||
-0.009413,
|
||||
-0.009072,
|
||||
0.003469,
|
||||
-0.005335,
|
||||
-0.004828,
|
||||
0.010724,
|
||||
0.000941,
|
||||
0.000708,
|
||||
0.018957,
|
||||
0.007084,
|
||||
0.004825,
|
||||
0.025418,
|
||||
0.010147,
|
||||
0.004452,
|
||||
0.027434,
|
||||
0.007550,
|
||||
-0.002861,
|
||||
0.023483,
|
||||
-0.001944,
|
||||
-0.018138,
|
||||
0.014122,
|
||||
-0.017583,
|
||||
-0.040768,
|
||||
0.002598,
|
||||
-0.036604,
|
||||
-0.069541,
|
||||
-0.004273,
|
||||
-0.054876,
|
||||
-0.107289,
|
||||
0.010068,
|
||||
-0.068052,
|
||||
-0.200119,
|
||||
0.207287,
|
||||
0.597150,
|
||||
0.207287,
|
||||
-0.200119,
|
||||
-0.068052,
|
||||
0.010068,
|
||||
-0.107289,
|
||||
-0.054876,
|
||||
-0.004273,
|
||||
-0.069541,
|
||||
-0.036604,
|
||||
0.002598,
|
||||
-0.040768,
|
||||
-0.017583,
|
||||
0.014122,
|
||||
-0.018138,
|
||||
-0.001944,
|
||||
0.023483,
|
||||
-0.002861,
|
||||
0.007550,
|
||||
0.027434,
|
||||
0.004452,
|
||||
0.010147,
|
||||
0.025418,
|
||||
0.004825,
|
||||
0.007084,
|
||||
0.018957,
|
||||
0.000708,
|
||||
0.000941,
|
||||
0.010724,
|
||||
-0.004828,
|
||||
-0.005335,
|
||||
0.003469,
|
||||
-0.009072,
|
||||
-0.009413,
|
||||
-0.000899,
|
||||
-0.010428,
|
||||
-0.010210,
|
||||
-0.001802,
|
||||
-0.008711,
|
||||
-0.008017,
|
||||
0.000043,
|
||||
-0.004923,
|
||||
-0.004144,
|
||||
0.003113,
|
||||
-0.000674,
|
||||
-0.000264,
|
||||
0.005758,
|
||||
0.002523,
|
||||
0.002261,
|
||||
0.006827,
|
||||
0.003795
|
||||
};
|
||||
@@ -1,245 +0,0 @@
|
||||
/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */
|
||||
|
||||
/*
|
||||
* This intermediary file and the files that used to create it are under
|
||||
* The LGPL. See the file COPYING.
|
||||
*/
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp1.txt */
|
||||
static const float codes0[] = {
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp2.txt */
|
||||
static const float codes1[] = {
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp3.txt */
|
||||
static const float codes2[] = {
|
||||
500,
|
||||
550,
|
||||
600,
|
||||
650,
|
||||
700,
|
||||
750,
|
||||
800,
|
||||
850,
|
||||
900,
|
||||
950,
|
||||
1000,
|
||||
1050,
|
||||
1100,
|
||||
1150,
|
||||
1200,
|
||||
1250
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp4.txt */
|
||||
static const float codes3[] = {
|
||||
700,
|
||||
800,
|
||||
900,
|
||||
1000,
|
||||
1100,
|
||||
1200,
|
||||
1300,
|
||||
1400,
|
||||
1500,
|
||||
1600,
|
||||
1700,
|
||||
1800,
|
||||
1900,
|
||||
2000,
|
||||
2100,
|
||||
2200
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp5.txt */
|
||||
static const float codes4[] = {
|
||||
950,
|
||||
1050,
|
||||
1150,
|
||||
1250,
|
||||
1350,
|
||||
1450,
|
||||
1550,
|
||||
1650,
|
||||
1750,
|
||||
1850,
|
||||
1950,
|
||||
2050,
|
||||
2150,
|
||||
2250,
|
||||
2350,
|
||||
2450
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp6.txt */
|
||||
static const float codes5[] = {
|
||||
1100,
|
||||
1200,
|
||||
1300,
|
||||
1400,
|
||||
1500,
|
||||
1600,
|
||||
1700,
|
||||
1800,
|
||||
1900,
|
||||
2000,
|
||||
2100,
|
||||
2200,
|
||||
2300,
|
||||
2400,
|
||||
2500,
|
||||
2600
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp7.txt */
|
||||
static const float codes6[] = {
|
||||
1500,
|
||||
1600,
|
||||
1700,
|
||||
1800,
|
||||
1900,
|
||||
2000,
|
||||
2100,
|
||||
2200,
|
||||
2300,
|
||||
2400,
|
||||
2500,
|
||||
2600,
|
||||
2700,
|
||||
2800,
|
||||
2900,
|
||||
3000
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp8.txt */
|
||||
static const float codes7[] = {
|
||||
2300,
|
||||
2400,
|
||||
2500,
|
||||
2600,
|
||||
2700,
|
||||
2800,
|
||||
2900,
|
||||
3000
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp9.txt */
|
||||
static const float codes8[] = {
|
||||
2500,
|
||||
2600,
|
||||
2700,
|
||||
2800,
|
||||
2900,
|
||||
3000,
|
||||
3100,
|
||||
3200
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp10.txt */
|
||||
static const float codes9[] = {
|
||||
2900,
|
||||
3100,
|
||||
3300,
|
||||
3500
|
||||
};
|
||||
|
||||
const struct lsp_codebook lsp_cb[] = {
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp1.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes0
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp2.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes1
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp3.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes2
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp4.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes3
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp5.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes4
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp6.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes5
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp7.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes6
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp8.txt */
|
||||
{
|
||||
1,
|
||||
3,
|
||||
8,
|
||||
codes7
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp9.txt */
|
||||
{
|
||||
1,
|
||||
3,
|
||||
8,
|
||||
codes8
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lsp10.txt */
|
||||
{
|
||||
1,
|
||||
2,
|
||||
4,
|
||||
codes9
|
||||
},
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
@@ -1,433 +0,0 @@
|
||||
/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */
|
||||
|
||||
/*
|
||||
* This intermediary file and the files that used to create it are under
|
||||
* The LGPL. See the file COPYING.
|
||||
*/
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp1.txt */
|
||||
static const float codes0[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700,
|
||||
725,
|
||||
750,
|
||||
775,
|
||||
800
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp2.txt */
|
||||
static const float codes1[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700,
|
||||
725,
|
||||
750,
|
||||
775,
|
||||
800
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp3.txt */
|
||||
static const float codes2[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700,
|
||||
725,
|
||||
750,
|
||||
775,
|
||||
800
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp4.txt */
|
||||
static const float codes3[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
250,
|
||||
300,
|
||||
350,
|
||||
400,
|
||||
450,
|
||||
500,
|
||||
550,
|
||||
600,
|
||||
650,
|
||||
700,
|
||||
750,
|
||||
800,
|
||||
850,
|
||||
900,
|
||||
950,
|
||||
1000,
|
||||
1050,
|
||||
1100,
|
||||
1150,
|
||||
1200,
|
||||
1250,
|
||||
1300,
|
||||
1350,
|
||||
1400
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp5.txt */
|
||||
static const float codes4[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
250,
|
||||
300,
|
||||
350,
|
||||
400,
|
||||
450,
|
||||
500,
|
||||
550,
|
||||
600,
|
||||
650,
|
||||
700,
|
||||
750,
|
||||
800,
|
||||
850,
|
||||
900,
|
||||
950,
|
||||
1000,
|
||||
1050,
|
||||
1100,
|
||||
1150,
|
||||
1200,
|
||||
1250,
|
||||
1300,
|
||||
1350,
|
||||
1400
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp6.txt */
|
||||
static const float codes5[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
250,
|
||||
300,
|
||||
350,
|
||||
400,
|
||||
450,
|
||||
500,
|
||||
550,
|
||||
600,
|
||||
650,
|
||||
700,
|
||||
750,
|
||||
800,
|
||||
850,
|
||||
900,
|
||||
950,
|
||||
1000,
|
||||
1050,
|
||||
1100,
|
||||
1150,
|
||||
1200,
|
||||
1250,
|
||||
1300,
|
||||
1350,
|
||||
1400
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp7.txt */
|
||||
static const float codes6[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700,
|
||||
725,
|
||||
750,
|
||||
775,
|
||||
800
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp8.txt */
|
||||
static const float codes7[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700,
|
||||
725,
|
||||
750,
|
||||
775,
|
||||
800
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp9.txt */
|
||||
static const float codes8[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700,
|
||||
725,
|
||||
750,
|
||||
775,
|
||||
800
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp10.txt */
|
||||
static const float codes9[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
200,
|
||||
225,
|
||||
250,
|
||||
275,
|
||||
300,
|
||||
325,
|
||||
350,
|
||||
375,
|
||||
400,
|
||||
425,
|
||||
450,
|
||||
475,
|
||||
500,
|
||||
525,
|
||||
550,
|
||||
575,
|
||||
600,
|
||||
625,
|
||||
650,
|
||||
675,
|
||||
700,
|
||||
725,
|
||||
750,
|
||||
775,
|
||||
800
|
||||
};
|
||||
|
||||
const struct lsp_codebook lsp_cbd[] = {
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp1.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes0
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp2.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes1
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp3.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes2
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp4.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes3
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp5.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes4
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp6.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes5
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp7.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes6
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp8.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes7
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp9.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes8
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/dlsp10.txt */
|
||||
{
|
||||
1,
|
||||
5,
|
||||
32,
|
||||
codes9
|
||||
},
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
@@ -1,279 +0,0 @@
|
||||
/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */
|
||||
|
||||
/*
|
||||
* This intermediary file and the files that used to create it are under
|
||||
* The LGPL. See the file COPYING.
|
||||
*/
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/gecb.txt */
|
||||
static const float codes0[] = {
|
||||
2.71, 12.0184,
|
||||
0.04675, -2.73881,
|
||||
0.120993, 8.38895,
|
||||
-1.58028, -0.892307,
|
||||
1.19307, -1.91561,
|
||||
0.187101, -3.27679,
|
||||
0.332251, -7.66455,
|
||||
-1.47944, 31.2461,
|
||||
1.52761, 27.7095,
|
||||
-0.524379, 5.25012,
|
||||
0.55333, 7.4388,
|
||||
-0.843451, -1.95299,
|
||||
2.26389, 8.61029,
|
||||
0.143143, 2.36549,
|
||||
0.616506, 1.28427,
|
||||
-1.71133, 22.0967,
|
||||
1.00813, 17.3965,
|
||||
-0.106718, 1.41891,
|
||||
-0.136246, 14.2736,
|
||||
-1.70909, -20.5319,
|
||||
1.65787, -3.39107,
|
||||
0.138049, -4.95785,
|
||||
0.536729, -1.94375,
|
||||
0.196307, 36.8519,
|
||||
1.27248, 22.5565,
|
||||
-0.670219, -1.90604,
|
||||
0.382092, 6.40113,
|
||||
-0.756911, -4.90102,
|
||||
1.82931, 4.6138,
|
||||
0.318794, 0.73683,
|
||||
0.612815, -2.07505,
|
||||
-0.410151, 24.7871,
|
||||
1.77602, 13.1909,
|
||||
0.106457, -0.104492,
|
||||
0.192206, 10.1838,
|
||||
-1.82442, -7.71565,
|
||||
0.931346, 4.34835,
|
||||
0.308813, -4.086,
|
||||
0.397143, -11.8089,
|
||||
-0.048715, 41.2273,
|
||||
0.877342, 35.8503,
|
||||
-0.759794, 0.476634,
|
||||
0.978593, 7.67467,
|
||||
-1.19506, 3.03883,
|
||||
2.63989, -3.41106,
|
||||
0.191127, 3.60351,
|
||||
0.402932, 1.0843,
|
||||
-2.15202, 18.1076,
|
||||
1.5468, 8.32271,
|
||||
-0.143089, -4.07592,
|
||||
-0.150142, 5.86674,
|
||||
-1.40844, -3.2507,
|
||||
1.56615, -10.4132,
|
||||
0.178171, -10.2267,
|
||||
0.362164, -0.028556,
|
||||
-0.070125, 24.3907,
|
||||
0.594752, 17.4828,
|
||||
-0.28698, -6.90407,
|
||||
0.464818, 10.2055,
|
||||
-1.00684, -14.3572,
|
||||
2.32957, -3.69161,
|
||||
0.335745, 2.40714,
|
||||
1.01966, -3.15565,
|
||||
-1.25945, 7.9919,
|
||||
2.38369, 19.6806,
|
||||
-0.094947, -2.41374,
|
||||
0.20933, 6.66477,
|
||||
-2.22103, 1.37986,
|
||||
1.29239, 2.04633,
|
||||
0.243626, -0.890741,
|
||||
0.428773, -7.19366,
|
||||
-1.11374, 41.3414,
|
||||
2.6098, 31.1405,
|
||||
-0.446468, 2.53419,
|
||||
0.490104, 4.62757,
|
||||
-1.11723, -3.24174,
|
||||
1.79156, 8.41493,
|
||||
0.156012, 0.183336,
|
||||
0.532447, 3.15455,
|
||||
-0.764484, 18.514,
|
||||
0.952395, 11.7713,
|
||||
-0.332567, 0.346987,
|
||||
0.202165, 14.7168,
|
||||
-2.12924, -15.559,
|
||||
1.35358, -1.92679,
|
||||
-0.010963, -16.3364,
|
||||
0.399053, -2.79057,
|
||||
0.750657, 31.1483,
|
||||
0.655743, 24.4819,
|
||||
-0.45321, -0.735879,
|
||||
0.2869, 6.5467,
|
||||
-0.715673, -12.3578,
|
||||
1.54849, 3.87217,
|
||||
0.271874, 0.802339,
|
||||
0.502073, -4.85485,
|
||||
-0.497037, 17.7619,
|
||||
1.19116, 13.9544,
|
||||
0.01563, 1.33157,
|
||||
0.341867, 8.93537,
|
||||
-2.31601, -5.39506,
|
||||
0.75861, 1.9645,
|
||||
0.24132, -3.23769,
|
||||
0.267151, -11.2344,
|
||||
-0.273126, 32.6248,
|
||||
1.75352, 40.432,
|
||||
-0.784011, 3.04576,
|
||||
0.705987, 5.66118,
|
||||
-1.3864, 1.35356,
|
||||
2.37646, 1.67485,
|
||||
0.242973, 4.73218,
|
||||
0.491227, 0.354061,
|
||||
-1.60676, 8.65895,
|
||||
1.16711, 5.9871,
|
||||
-0.137601, -12.0417,
|
||||
-0.251375, 10.3972,
|
||||
-1.43151, -8.90411,
|
||||
0.98828, -13.209,
|
||||
0.261484, -6.35497,
|
||||
0.395932, -0.702529,
|
||||
0.283704, 26.8996,
|
||||
0.420959, 15.4418,
|
||||
-0.355804, -13.7278,
|
||||
0.527372, 12.3985,
|
||||
-1.16956, -15.9985,
|
||||
1.90669, -5.81605,
|
||||
0.354492, 3.85157,
|
||||
0.82576, -4.16264,
|
||||
-0.49019, 13.0572,
|
||||
2.25577, 13.5264,
|
||||
-0.004956, -3.23713,
|
||||
0.026709, 7.86645,
|
||||
-1.81037, -0.451183,
|
||||
1.08383, -0.18362,
|
||||
0.135836, -2.26658,
|
||||
0.375812, -5.51225,
|
||||
-1.96644, 38.6829,
|
||||
1.97799, 24.5655,
|
||||
-0.704656, 6.35881,
|
||||
0.480786, 7.05175,
|
||||
-0.976417, -2.42273,
|
||||
2.50215, 6.75935,
|
||||
0.083588, 3.2588,
|
||||
0.543629, 0.910013,
|
||||
-1.23196, 23.0915,
|
||||
0.785492, 14.807,
|
||||
-0.213554, 1.688,
|
||||
0.004748, 18.1718,
|
||||
-1.54719, -16.1168,
|
||||
1.50104, -3.28114,
|
||||
0.080133, -4.63472,
|
||||
0.476592, -2.18093,
|
||||
0.44247, 40.304,
|
||||
1.07277, 27.592,
|
||||
-0.594738, -4.16681,
|
||||
0.42248, 7.61609,
|
||||
-0.927521, -7.27441,
|
||||
1.99162, 1.29636,
|
||||
0.291307, 2.39878,
|
||||
0.721081, -1.95062,
|
||||
-0.804256, 24.9295,
|
||||
1.64839, 19.1197,
|
||||
0.060852, -0.590639,
|
||||
0.266085, 9.10325,
|
||||
-1.9574, -2.88461,
|
||||
1.11693, 2.6724,
|
||||
0.35458, -2.74854,
|
||||
0.330733, -14.1561,
|
||||
-0.527851, 39.5756,
|
||||
0.991152, 43.195,
|
||||
-0.589619, 1.26919,
|
||||
0.787401, 8.73071,
|
||||
-1.0138, 1.02507,
|
||||
2.8254, 1.89538,
|
||||
0.24089, 2.74557,
|
||||
0.427195, 2.54446,
|
||||
-1.95311, 12.244,
|
||||
1.44862, 12.0607,
|
||||
-0.210492, -3.37906,
|
||||
-0.056713, 10.204,
|
||||
-1.65237, -5.10274,
|
||||
1.29475, -12.2708,
|
||||
0.111608, -8.67592,
|
||||
0.326634, -1.16763,
|
||||
0.021781, 31.1258,
|
||||
0.455335, 21.4684,
|
||||
-0.37544, -3.37121,
|
||||
0.39362, 11.302,
|
||||
-0.851456, -19.4149,
|
||||
2.10703, -2.22886,
|
||||
0.373233, 1.92406,
|
||||
0.884438, -1.72058,
|
||||
-0.975127, 9.84013,
|
||||
2.0033, 17.3954,
|
||||
-0.036915, -1.11137,
|
||||
0.148456, 5.39997,
|
||||
-1.91441, 4.77382,
|
||||
1.44791, 0.537122,
|
||||
0.194979, -1.03818,
|
||||
0.495771, -9.95502,
|
||||
-1.05899, 32.9471,
|
||||
2.01122, 32.4544,
|
||||
-0.30965, 4.71911,
|
||||
0.436082, 4.63552,
|
||||
-1.23711, -1.25428,
|
||||
2.02274, 9.42834,
|
||||
0.190342, 1.46077,
|
||||
0.479017, 2.48479,
|
||||
-1.07848, 16.2217,
|
||||
1.20764, 9.65421,
|
||||
-0.258087, -1.67236,
|
||||
0.071852, 13.416,
|
||||
-1.87723, -16.072,
|
||||
1.28957, -4.87118,
|
||||
0.067713, -13.4427,
|
||||
0.435551, -4.1655,
|
||||
0.46614, 30.5895,
|
||||
0.904895, 21.598,
|
||||
-0.518369, -2.53205,
|
||||
0.337363, 5.63726,
|
||||
-0.554975, -17.4005,
|
||||
1.69188, 1.14574,
|
||||
0.227934, 0.889297,
|
||||
0.587303, -5.72973,
|
||||
-0.262133, 18.6666,
|
||||
1.39505, 17.0029,
|
||||
-0.01909, 4.30838,
|
||||
0.304235, 12.6699,
|
||||
-2.07406, -6.46084,
|
||||
0.920546, 1.21296,
|
||||
0.284927, -1.78547,
|
||||
0.209724, -16.024,
|
||||
-0.636067, 31.5768,
|
||||
1.34989, 34.6775,
|
||||
-0.971625, 5.30086,
|
||||
0.590249, 4.44971,
|
||||
-1.56787, 3.60239,
|
||||
2.1455, 4.51666,
|
||||
0.296022, 4.12017,
|
||||
0.445299, 0.868772,
|
||||
-1.44193, 14.1284,
|
||||
1.35575, 6.0074,
|
||||
-0.012814, -7.49657,
|
||||
-0.43, 8.50012,
|
||||
-1.20469, -7.11326,
|
||||
1.10102, -6.83682,
|
||||
0.196463, -6.234,
|
||||
0.436747, -1.12979,
|
||||
0.141052, 22.8549,
|
||||
0.290821, 18.8114,
|
||||
-0.529536, -7.73251,
|
||||
0.63428, 10.7898,
|
||||
-1.33472, -20.3258,
|
||||
1.81564, -1.90332,
|
||||
0.394778, 3.79758,
|
||||
0.732682, -8.18382,
|
||||
-0.741244, 11.7683
|
||||
};
|
||||
|
||||
const struct lsp_codebook ge_cb[] = {
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/gecb.txt */
|
||||
{
|
||||
2,
|
||||
8,
|
||||
256,
|
||||
codes0
|
||||
},
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,235 +0,0 @@
|
||||
/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */
|
||||
|
||||
/*
|
||||
* This intermediary file and the files that used to create it are under
|
||||
* The LGPL. See the file COPYING.
|
||||
*/
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lspmelvq1.txt */
|
||||
static const float codes0[] = {
|
||||
640.185, 893.139, 1393.85, 1494.06, 1656.26, 1700.82,
|
||||
558.516, 716.906, 1057.36, 1182.62, 1503.8, 1610.03,
|
||||
615.108, 769.622, 1120.16, 1222.84, 1366.46, 1465.05,
|
||||
663.458, 736.833, 964.764, 1043.54, 1623.17, 1681.29,
|
||||
487.957, 577.723, 1017.43, 1177.04, 1552.1, 1615.69,
|
||||
536.099, 733.407, 1292.28, 1406.09, 1577.7, 1637.49,
|
||||
473.015, 542.559, 877.397, 1285.82, 1591.04, 1647.44,
|
||||
525.343, 652.014, 1206.83, 1493.96, 1647.97, 1698.3,
|
||||
510.887, 572.868, 945.226, 1445.68, 1678.17, 1705.53,
|
||||
534.915, 721.265, 1275.92, 1415.76, 1648.5, 1695.73,
|
||||
865.189, 1047, 1267.14, 1389.32, 1646.57, 1696.97,
|
||||
608.033, 869.887, 1300.95, 1432.87, 1639.74, 1689.41,
|
||||
554.972, 649.352, 866.845, 979.873, 1645.31, 1695.39,
|
||||
696.079, 813.97, 1102.49, 1219.79, 1536.49, 1621.94,
|
||||
553.879, 691.097, 1200.84, 1339.34, 1629.08, 1683.5,
|
||||
778.561, 997.776, 1258.63, 1390.34, 1601.99, 1657.86,
|
||||
713.107, 778.893, 992.875, 1051.95, 1497.45, 1650.66,
|
||||
490.27, 598.18, 1116.02, 1244.13, 1622.26, 1672.21,
|
||||
448.556, 512.085, 1271.7, 1448.18, 1579.37, 1642.48,
|
||||
465.688, 535.312, 1099.19, 1535.79, 1684.29, 1710.9,
|
||||
812.222, 1087.53, 1470.44, 1559.73, 1692.18, 1726.38,
|
||||
428.174, 489.426, 1160.33, 1409.3, 1597.5, 1651.3,
|
||||
712.81, 957.56, 1433.02, 1516.37, 1675.39, 1710.06,
|
||||
717.255, 934.073, 1305.2, 1436.72, 1647.2, 1693.09,
|
||||
492.888, 580.393, 1339.52, 1461.07, 1592, 1653.42,
|
||||
550.467, 675.888, 990.888, 1177.44, 1615.64, 1658,
|
||||
714.528, 801.792, 1072.94, 1146.08, 1637.06, 1706.58,
|
||||
513.819, 590.989, 798.691, 895.755, 1557.76, 1624.56,
|
||||
436.653, 518.413, 1281.99, 1547.08, 1685.12, 1717.76,
|
||||
681.854, 758.354, 1046.65, 1120.92, 1412.25, 1603.42,
|
||||
873.962, 1118.49, 1376.61, 1465.07, 1665.38, 1707.18,
|
||||
553.529, 634.092, 1144.77, 1284.8, 1542.87, 1620.63,
|
||||
448.532, 519.097, 1054.57, 1319.66, 1591.26, 1649.85,
|
||||
742.267, 885.293, 1152.83, 1318.51, 1569.36, 1631.45,
|
||||
529.03, 654.522, 1355.76, 1511.75, 1662.39, 1706.4,
|
||||
463.794, 597.77, 1176.05, 1366.13, 1629.37, 1678.01,
|
||||
626.936, 706.66, 1058.04, 1323.62, 1473.28, 1599.68,
|
||||
477.322, 615.5, 1488.89, 1550.5, 1683.1, 1712.34,
|
||||
547.442, 815.442, 1313.38, 1486.96, 1671.97, 1717.4,
|
||||
610.671, 819.955, 1219.11, 1363.66, 1592.05, 1654.31,
|
||||
547.414, 746.54, 1438.43, 1517.72, 1659.64, 1695.57,
|
||||
604.823, 821.146, 1137.94, 1358.29, 1598.94, 1655.64,
|
||||
525.935, 616.739, 1060.13, 1427.33, 1593.35, 1657.48,
|
||||
622.5, 762.143, 1318.65, 1410.96, 1618.12, 1680.06,
|
||||
436.917, 516.583, 1390.29, 1475.86, 1594.71, 1633.74,
|
||||
792.487, 1031.24, 1362.62, 1472.68, 1649.26, 1697.35,
|
||||
457.707, 526.207, 865.966, 1120.47, 1564.83, 1625.28,
|
||||
526.39, 624.21, 1269.65, 1374.23, 1558.07, 1620.96,
|
||||
483.768, 573.505, 1440.66, 1512.43, 1622.37, 1671.31,
|
||||
953.061, 1194.03, 1416.67, 1515.82, 1678.82, 1718.21,
|
||||
499.947, 627.358, 1299.94, 1394.23, 1643.17, 1685.33,
|
||||
648.723, 838.181, 1225.5, 1383.45, 1637.46, 1691.67,
|
||||
672.588, 1022.6, 1346.21, 1443.75, 1651.15, 1695.43,
|
||||
581.833, 674.944, 955.167, 1020.5, 1370.5, 1503.11,
|
||||
536.143, 652.531, 1243.84, 1315.27, 1425.1, 1505.73,
|
||||
560.558, 786.65, 1224.66, 1373.98, 1630.06, 1682.68,
|
||||
591.926, 783.722, 982, 1140.81, 1581.61, 1625.28,
|
||||
548.537, 644.524, 940.451, 1048.74, 1557.89, 1609.48,
|
||||
516.916, 723.253, 1135.95, 1309.19, 1600.08, 1669.48,
|
||||
426.521, 506.077, 1457.73, 1535.02, 1641.35, 1678.45,
|
||||
645.189, 776.595, 1020.78, 1240.07, 1597, 1648.7,
|
||||
637.105, 941.474, 1242.21, 1372.49, 1646.7, 1694.8,
|
||||
691.228, 788.141, 1202.12, 1294.89, 1626.97, 1681.77,
|
||||
699.08, 886.655, 1300.9, 1399.28, 1579.94, 1646.79
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lspmelvq2.txt */
|
||||
static const float codes1[] = {
|
||||
4.44342, 51.1708, 7.45726, -27.4373, -18.5056, -18.1989,
|
||||
51.58, 63.3166, 57.7796, -44.1591, -18.4834, -6.93392,
|
||||
-20.2795, -21.7454, 4.66947, 52.1569, 30.4367, 36.8582,
|
||||
-29.1104, -5.63933, -3.45383, -63.0261, -20.4423, -19.0485,
|
||||
2.91622, 40.8374, 16.579, -51.8461, 38.5045, 18.1728,
|
||||
-20.6977, -11.4022, -36.6173, -16.6116, -56.8965, -24.301,
|
||||
-20.2385, 26.6332, 33.1191, 27.6284, -36.7493, -25.6041,
|
||||
54.9871, 0.71748, 23.0674, -22.1031, 11.6643, 10.9938,
|
||||
-62.7215, 21.7547, 21.2907, -7.64891, -4.5533, -9.71777,
|
||||
-9.56338, -3.85841, 25.0454, -9.45216, 6.05017, 5.35043,
|
||||
47.3823, 56.6122, -27.0315, -24.67, 4.86343, -0.225495,
|
||||
26.3997, 26.7857, -1.66167, 62.8366, -19.7653, -8.55169,
|
||||
-8.77648, -9.04545, -7.88996, 28.2433, -35.0963, -21.9709,
|
||||
14.8423, 25.4563, -56.1262, -50.2934, -22.9393, -15.8113,
|
||||
4.94186, 27.7798, 8.34579, 10.8553, -3.12587, -3.97807,
|
||||
12.6426, -52.2317, 37.2487, -57.2067, -14.5125, -5.54035,
|
||||
13.485, 15.3246, -23.9644, -21.3135, 19.5779, 14.1597,
|
||||
-55.3543, -45.2077, 10.5185, 43.0461, -24.9859, -19.3484,
|
||||
27.7226, 32.1882, 20.0321, 24.3328, -72.8194, -51.1823,
|
||||
-31.3818, -5.25745, -43.7806, 14.1312, 17.6392, 9.81024,
|
||||
-48.26, -26.2973, -44.1428, -31.9001, 22.5085, -0.467938,
|
||||
7.37202, -7.79071, -12.5732, 27.1074, 9.34052, 14.4477,
|
||||
14.5295, 8.82597, 57.0009, -16.3234, -32.4142, -21.0224,
|
||||
32.4616, 48.6062, 38.5452, 9.77182, 1.82856, 11.5063,
|
||||
-43.8275, -22.6263, -29.8278, 13.6115, 9.66849, -63.5218,
|
||||
-11.9967, 2.74308, -73.6375, -20.9809, -4.11839, 7.71405,
|
||||
24.0162, -2.29513, -6.80983, -26.4043, -21.8529, -16.3381,
|
||||
-16.1484, 35.9086, -3.0837, 3.83958, 42.3003, 17.5003,
|
||||
54.1225, -48.7513, -14.8712, -38.1256, 15.2903, 7.33079,
|
||||
53.0929, 13.9221, 10.6536, 24.345, -16.5952, -16.0365,
|
||||
33.1415, 38.5714, -26.0251, 22.021, 15.6866, 13.2593,
|
||||
15.7194, -49.4061, 31.4552, 10.1896, 0.219911, 1.62902,
|
||||
4.10868, 14.2755, 58.475, -1.16668, 52.6265, 43.4938,
|
||||
358.653, -112.587, 85.9867, 52.08, -52.88, -249.24,
|
||||
-12.5792, -6.64039, -33.0106, 1.51449, 50.3259, 61.6091,
|
||||
-6.81685, 14.3146, 14.1563, 53.6363, 83.6051, 38.174,
|
||||
-18.0006, 41.3575, -46.3736, 8.47794, -10.4611, -11.3847,
|
||||
28.7711, 31.4689, -39.5744, 1.43977, -37.7309, -30.5309,
|
||||
-34.4692, -11.0778, 44.4681, -60.0045, -44.9729, -34.8364,
|
||||
38.7401, 41.0529, -7.92946, 20.0279, 74.4246, 54.6498,
|
||||
81.8008, 133.531, -5.47375, 34.4759, 75.7417, 52.6112,
|
||||
-61.5067, -76.6328, -47.2471, -43.5928, -9.46878, 0.832598,
|
||||
-11.544, -44.7728, -13.9257, -3.32122, 24.816, 21.9064,
|
||||
2.83945, -45.0522, -36.8776, -14.7577, -11.9912, -8.75366,
|
||||
-8.97657, -14.0499, 39.2628, 48.8038, -14.3789, -4.79625,
|
||||
31.6292, 32.0168, 5.52278, -79.8411, -24.1789, -15.7597,
|
||||
15.893, 10.4667, -43.9057, -20.4885, 80.7594, 6.8023,
|
||||
22.3285, -69.4942, -5.16156, 48.8868, 4.01995, -3.04376,
|
||||
31.4062, -20.0952, -55.1259, 0.505988, 20.86, 15.0816,
|
||||
-12.9696, 37.2548, 18.1009, 51.0767, 18.2053, 19.8474,
|
||||
-45.4855, -45.3454, -4.22795, -15.8693, -6.07272, -1.99631,
|
||||
-9.25462, 45.0241, 70.2879, -44.4484, 2.63165, 4.15336,
|
||||
-51.1589, -27.7586, 19.7999, -9.87882, 63.4125, 48.3124,
|
||||
-8.94084, -13.4815, -44.9602, 52.839, -17.2582, -1.59439,
|
||||
23.18, -3.00374, 33.162, 31.5424, 29.111, 25.9327,
|
||||
-28.4665, -10.6868, 88.7543, -3.88024, 17.5881, 13.7336,
|
||||
-10.6578, 7.43021, -20.945, -17.6491, -11.2815, -10.8001,
|
||||
-35.6182, -6.90301, 3.92829, 26.9695, 2.8894, 5.01685,
|
||||
-3.78263, -19.2095, -10.5568, -67.7468, 20.3733, 29.552,
|
||||
53.8109, -33.8374, -27.8223, -7.73289, -31.3462, -23.5678,
|
||||
-38.8762, -17.7679, 11.457, 28.4607, 50.7006, -19.2488,
|
||||
-44.6024, -60.2806, 56.35, 21.7545, 5.23677, 7.66608,
|
||||
-3.80758, -39.1425, 28.8305, -3.09285, -42.7534, -25.1803,
|
||||
45.2559, 28.8742, 60.0723, 64.461, 3.51203, -27.883
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lspmelvq3.txt */
|
||||
static const float codes2[] = {
|
||||
-9.63558, 27.5501, 15.4445, -4.34872, -1.8587, 1.27054,
|
||||
-15.5343, 23.0515, -15.4436, -2.01887, -6.19433, -13.5085,
|
||||
8.38867, -1.60998, -32.3903, 10.1765, 1.9467, 12.2454,
|
||||
-3.06306, -9.55983, 14.367, -1.87159, 19.6192, -3.78366,
|
||||
-18.495, -13.3811, -23.8928, -20.3745, -6.87856, -17.4887,
|
||||
15.4925, 14.707, -0.0697855, 15.7541, 12.6051, -3.19768,
|
||||
9.60466, -4.56494, 10.1616, 15.5594, 6.89224, -31.5602,
|
||||
-11.5625, -23.0872, 34.9163, 12.3052, 7.67426, -1.26298,
|
||||
2.5486, -3.90251, -19.1132, 7.6131, -31.0016, 12.4759,
|
||||
2.74156, 12.4124, -39.5057, -0.325024, -22.9186, -28.5606,
|
||||
6.30148, 15.4402, -2.6284, -20.1603, 5.22906, -12.3451,
|
||||
-6.91862, 16.6335, -1.65064, 2.99602, -23.9479, -1.43947,
|
||||
-14.3907, -31.417, 10.1113, 1.70013, -21.5733, 4.736,
|
||||
-1.67171, 6.22751, -13.7187, 21.0936, -9.69243, -10.5756,
|
||||
2.15266, 21.2198, -13.0171, -1.43135, 18.8831, 10.6664,
|
||||
13.8913, 27.3565, 0.472838, -7.40477, -14.8705, 25.7448,
|
||||
28.402, -2.05484, -9.32712, -17.3169, 15.643, 6.96908,
|
||||
-15.863, -17.8482, -24.9238, 12.5574, 7.17566, 0.0161972,
|
||||
5.99291, -41.0228, 1.95791, -6.78012, 9.20162, 4.6234,
|
||||
-6.33629, -7.61679, 27.7318, -8.9214, -14.1931, 7.88247,
|
||||
-12.2367, -21.245, -2.5927, 13.7776, -2.7864, -24.5072,
|
||||
23.15, -9.93687, -2.92559, 3.88086, 11.2667, 11.1998,
|
||||
9.67437, -9.4269, 6.2582, 36.5694, 2.88654, 1.82052,
|
||||
15.385, -2.88243, 19.8377, -14.5111, 5.92264, -2.55757,
|
||||
-20.9648, 3.76147, 18.5074, -13.5547, -7.84261, -19.98,
|
||||
24.6032, 16.989, -19.1622, 1.35535, -0.0122027, 0.166227,
|
||||
9.98886, -6.89666, -20.5111, -2.89196, 2.58467, -17.049,
|
||||
-9.17761, -23.7209, 12.6088, -18.2654, 2.17718, -13.0865,
|
||||
-9.73326, -12.2682, 6.80914, 20.3469, -10.2912, 4.85191,
|
||||
-5.19406, 6.78014, 18.0099, 14.3782, -0.124328, -10.0141,
|
||||
-4.69806, 6.71393, -19.1371, 8.19814, 23.3987, -10.3316,
|
||||
1.02965, -4.63654, 21.9822, 11.5088, -30.9617, -20.6354,
|
||||
-33.2824, 31.4666, -11.4837, 11.5144, -1.36834, 9.44599,
|
||||
-37.5431, -3.16317, -2.09497, -2.62712, 40.4714, -33.0527,
|
||||
-8.79595, -15.5174, -15.7916, 7.97003, 37.2542, 40.7063,
|
||||
-14.7261, -12.6884, 2.42105, -10.2686, 25.9033, 14.8525,
|
||||
22.9598, -16.6224, -3.64949, 4.44269, -22.3897, 13.6968,
|
||||
-10.874, 4.18931, -24.2284, -3.63764, -15.1379, 40.9515,
|
||||
28.2393, -8.63225, -12.544, 28.8282, -0.987894, -4.9824,
|
||||
-25.0777, -0.481678, -3.37082, 5.55114, -9.89898, -8.07628,
|
||||
23.3581, 3.12034, -8.63348, 0.63042, -18.2216, -22.1886,
|
||||
44.9505, 19.8267, 23.7129, 8.58075, 7.80458, 1.78796,
|
||||
-8.13112, -2.1262, -7.12776, -25.0529, -16.7287, 8.41402,
|
||||
2.01965, 19.2579, 20.0963, 5.99199, 28.1098, 5.96128,
|
||||
2.42493, -6.33216, -26.5858, -23.8607, 8.27049, 3.05805,
|
||||
0.0153248, 0.446112, -4.92759, 19.0023, 22.7346, 15.5451,
|
||||
-7.39591, 40.285, 10.8414, 25.7961, -8.81069, -13.5,
|
||||
5.81306, 11.2384, 6.93765, -9.43067, 9.51418, 22.9709,
|
||||
-9.17611, -16.4993, -1.56929, -2.9111, 4.17113, 10.9228,
|
||||
10.0376, -27.4993, -8.25332, -1.715, -11.5063, -10.467,
|
||||
23.6637, -13.8338, 14.7284, 8.00341, -2.71881, -8.80708,
|
||||
27.101, 2.42801, 11.4599, -24.1577, -20.9901, 4.52358,
|
||||
16.8065, 19.3315, 11.1219, 13.3391, -13.1522, 0.91428,
|
||||
-25.2603, 6.04837, 12.1994, 21.9372, 14.8795, 6.93368,
|
||||
-1.24639, -7.96856, 16.4064, -2.36409, -25.9093, 46.0938,
|
||||
8.81687, 24.8004, 11.4475, -13.261, -19.8693, -28.4793,
|
||||
15.3175, -12.5335, 24.1778, 10.5133, 22.2244, 9.93191,
|
||||
-18.7982, 38.939, -20.0631, -35.4052, 7.5879, -0.599373,
|
||||
-18.1388, 9.5843, 17.4375, -21.057, 8.1634, 6.31216,
|
||||
-61.5486, -8.71159, 19.7502, -25.2365, 3.56558, -1.64973,
|
||||
-26.9863, 0.291017, -12.5337, -10.505, 11.0614, 4.84072,
|
||||
-0.630579, -3.87056, -0.707795, -13.1306, -19.6548, -16.2436,
|
||||
4.87022, -5.90744, 3.46971, -40.0866, 16.8741, 10.3333,
|
||||
-1.00985, 16.234, -0.475836, 28.3848, 1.75473, 28.2608
|
||||
};
|
||||
|
||||
const struct lsp_codebook lspmelvq_cb[] = {
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lspmelvq1.txt */
|
||||
{
|
||||
6,
|
||||
6,
|
||||
64,
|
||||
codes0
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lspmelvq2.txt */
|
||||
{
|
||||
6,
|
||||
6,
|
||||
64,
|
||||
codes1
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/lspmelvq3.txt */
|
||||
{
|
||||
6,
|
||||
6,
|
||||
64,
|
||||
codes2
|
||||
},
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
@@ -1,121 +0,0 @@
|
||||
/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */
|
||||
|
||||
/*
|
||||
* This intermediary file and the files that used to create it are under
|
||||
* The LGPL. See the file COPYING.
|
||||
*/
|
||||
|
||||
#include "defines.h"
|
||||
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel1.txt */
|
||||
static const float codes0[] = {
|
||||
550,
|
||||
600,
|
||||
650,
|
||||
700,
|
||||
750,
|
||||
800,
|
||||
850,
|
||||
900
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel2.txt */
|
||||
static const float codes1[] = {
|
||||
50,
|
||||
100,
|
||||
200,
|
||||
300
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel3.txt */
|
||||
static const float codes2[] = {
|
||||
800,
|
||||
850,
|
||||
900,
|
||||
950,
|
||||
1000,
|
||||
1050,
|
||||
1100,
|
||||
1150,
|
||||
1200,
|
||||
1250,
|
||||
1300,
|
||||
1350,
|
||||
1400,
|
||||
1450,
|
||||
1500,
|
||||
1650
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel4.txt */
|
||||
static const float codes3[] = {
|
||||
25,
|
||||
50,
|
||||
75,
|
||||
100,
|
||||
125,
|
||||
150,
|
||||
175,
|
||||
250
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel5.txt */
|
||||
static const float codes4[] = {
|
||||
1350,
|
||||
1400,
|
||||
1450,
|
||||
1500,
|
||||
1550,
|
||||
1600,
|
||||
1650,
|
||||
1700
|
||||
};
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel6.txt */
|
||||
static const float codes5[] = {
|
||||
25,
|
||||
50,
|
||||
100,
|
||||
150
|
||||
};
|
||||
|
||||
const struct lsp_codebook mel_cb[] = {
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel1.txt */
|
||||
{
|
||||
1,
|
||||
3,
|
||||
8,
|
||||
codes0
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel2.txt */
|
||||
{
|
||||
1,
|
||||
2,
|
||||
4,
|
||||
codes1
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel3.txt */
|
||||
{
|
||||
1,
|
||||
4,
|
||||
16,
|
||||
codes2
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel4.txt */
|
||||
{
|
||||
1,
|
||||
3,
|
||||
8,
|
||||
codes3
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel5.txt */
|
||||
{
|
||||
1,
|
||||
3,
|
||||
8,
|
||||
codes4
|
||||
},
|
||||
/* /Users/brandon/freetel-code/codec2/branches/0.6/src/codebook/mel6.txt */
|
||||
{
|
||||
1,
|
||||
2,
|
||||
4,
|
||||
codes5
|
||||
},
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,69 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: codec2.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: 21 August 2010
|
||||
|
||||
Codec 2 fully quantised encoder and decoder functions. If you want use
|
||||
Codec 2, these are the functions you need to call.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2010 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef __CODEC2__
|
||||
#define __CODEC2__
|
||||
|
||||
#define CODEC2_MODE_3200 0
|
||||
#define CODEC2_MODE_2400 1
|
||||
#define CODEC2_MODE_1600 2
|
||||
#define CODEC2_MODE_1400 3
|
||||
#define CODEC2_MODE_1300 4
|
||||
#define CODEC2_MODE_1200 5
|
||||
#define CODEC2_MODE_700 6
|
||||
#define CODEC2_MODE_700B 7
|
||||
#define CODEC2_MODE_700C 8
|
||||
|
||||
struct CODEC2;
|
||||
|
||||
struct CODEC2 * codec2_create(int mode);
|
||||
void codec2_destroy(struct CODEC2 *codec2_state);
|
||||
void codec2_encode(struct CODEC2 *codec2_state, unsigned char * bits, short speech_in[]);
|
||||
void codec2_decode(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits);
|
||||
void codec2_decode_ber(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits, float ber_est);
|
||||
int codec2_samples_per_frame(struct CODEC2 *codec2_state);
|
||||
int codec2_bits_per_frame(struct CODEC2 *codec2_state);
|
||||
|
||||
void codec2_set_lpc_post_filter(struct CODEC2 *codec2_state, int enable, int bass_boost, float beta, float gamma);
|
||||
int codec2_get_spare_bit_index(struct CODEC2 *codec2_state);
|
||||
int codec2_rebuild_spare_bit(struct CODEC2 *codec2_state, int unpacked_bits[]);
|
||||
void codec2_set_natural_or_gray(struct CODEC2 *codec2_state, int gray);
|
||||
void codec2_set_softdec(struct CODEC2 *c2, float *softdec);
|
||||
float codec2_get_energy(struct CODEC2 *codec2_state, const unsigned char *bits);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: codec2_cohpsk.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: March 2015
|
||||
|
||||
Functions that implement a coherent PSK FDM modem.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2015 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __CODEC2_COHPSK__
|
||||
#define __CODEC2_COHPSK__
|
||||
|
||||
#define COHPSK_BITS_PER_FRAME 56 /* hard coded for now */
|
||||
#define COHPSK_NC 7 /* hard coded for now */
|
||||
#define COHPSK_NOM_SAMPLES_PER_FRAME 600
|
||||
#define COHPSK_MAX_SAMPLES_PER_FRAME 625
|
||||
#define COHPSK_RS 75
|
||||
#define COHPSK_FS 7500 /* note this is a wierd
|
||||
value to get an integer
|
||||
oversampling rate */
|
||||
|
||||
#include "comp.h"
|
||||
#include "modem_stats.h"
|
||||
|
||||
struct COHPSK;
|
||||
|
||||
extern const int test_bits_coh[];
|
||||
|
||||
struct COHPSK *cohpsk_create(void);
|
||||
void cohpsk_destroy(struct COHPSK *coh);
|
||||
void cohpsk_mod(struct COHPSK *cohpsk, COMP tx_fdm[], int tx_bits[], int nbits);
|
||||
void cohpsk_clip(COMP tx_fdm[]);
|
||||
void cohpsk_demod(struct COHPSK *cohpsk, float rx_bits[], int *sync, COMP rx_fdm[], int *nin_frame);
|
||||
void cohpsk_get_demod_stats(struct COHPSK *cohpsk, struct MODEM_STATS *stats);
|
||||
void cohpsk_set_verbose(struct COHPSK *coh, int verbose);
|
||||
void cohpsk_get_test_bits(struct COHPSK *coh, int rx_bits[]);
|
||||
void cohpsk_put_test_bits(struct COHPSK *coh, int *state, short error_pattern[],
|
||||
int *bit_errors, char rx_bits[], int channel);
|
||||
int cohpsk_error_pattern_size(void);
|
||||
void cohpsk_set_frame(struct COHPSK *coh, int frame);
|
||||
void fdmdv_freq_shift_coh(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, float Fs,
|
||||
COMP *foff_phase_rect, int nin);
|
||||
|
||||
/* used for accessing upper and lower bits before diversity combination */
|
||||
|
||||
float *cohpsk_get_rx_bits_lower(struct COHPSK *coh);
|
||||
float *cohpsk_get_rx_bits_upper(struct COHPSK *coh);
|
||||
void cohpsk_set_carrier_ampl(struct COHPSK *coh, int c, float ampl);
|
||||
|
||||
#endif
|
||||
@@ -1,113 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: codec2_fdmdv.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: April 14 2012
|
||||
|
||||
A 1400 bit/s (nominal) Frequency Division Multiplexed Digital Voice
|
||||
(FDMDV) modem. Used for digital audio over HF SSB. See
|
||||
README_fdmdv.txt for more information, and fdmdv_mod.c and
|
||||
fdmdv_demod.c for example usage.
|
||||
|
||||
The name codec2_fdmdv.h is used to make it unique when "make
|
||||
installed".
|
||||
|
||||
References:
|
||||
|
||||
[1] http://n1su.com/fdmdv/FDMDV_Docs_Rel_1_4b.pdf
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2012 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FDMDV__
|
||||
#define __FDMDV__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* set up the calling convention for DLL function import/export for
|
||||
WIN32 cross compiling */
|
||||
|
||||
#ifdef __CODEC2_WIN32__
|
||||
#ifdef __CODEC2_BUILDING_DLL__
|
||||
#define CODEC2_WIN32SUPPORT __declspec(dllexport) __stdcall
|
||||
#else
|
||||
#define CODEC2_WIN32SUPPORT __declspec(dllimport) __stdcall
|
||||
#endif
|
||||
#else
|
||||
#define CODEC2_WIN32SUPPORT
|
||||
#endif
|
||||
|
||||
#include "comp.h"
|
||||
#include "modem_stats.h"
|
||||
|
||||
#define FDMDV_NC 14 /* default number of data carriers */
|
||||
#define FDMDV_NC_MAX 20 /* maximum number of data carriers */
|
||||
#define FDMDV_BITS_PER_FRAME 28 /* 20ms frames, for nominal 1400 bit/s */
|
||||
#define FDMDV_NOM_SAMPLES_PER_FRAME 160 /* modulator output samples/frame and nominal demod samples/frame */
|
||||
/* at 8000 Hz sample rate */
|
||||
#define FDMDV_MAX_SAMPLES_PER_FRAME 200 /* max demod samples/frame, use this to allocate storage */
|
||||
#define FDMDV_SCALE 1000 /* suggested scaling for 16 bit shorts */
|
||||
#define FDMDV_FCENTRE 1500 /* Centre frequency, Nc/2 carriers below this, Nc/2 carriers above (Hz) */
|
||||
|
||||
/* 8 to 48 kHz sample rate conversion */
|
||||
|
||||
#define FDMDV_OS 2 /* oversampling rate */
|
||||
#define FDMDV_OS_TAPS_16K 48 /* number of OS filter taps at 16kHz */
|
||||
#define FDMDV_OS_TAPS_8K (FDMDV_OS_TAPS_16K/FDMDV_OS) /* number of OS filter taps at 8kHz */
|
||||
|
||||
/* FDMDV states and stats structures */
|
||||
|
||||
struct FDMDV;
|
||||
|
||||
struct FDMDV * fdmdv_create(int Nc);
|
||||
void fdmdv_destroy(struct FDMDV *fdmdv_state);
|
||||
void fdmdv_use_old_qpsk_mapping(struct FDMDV *fdmdv_state);
|
||||
int fdmdv_bits_per_frame(struct FDMDV *fdmdv_state);
|
||||
float fdmdv_get_fsep(struct FDMDV *fdmdv_state);
|
||||
void fdmdv_set_fsep(struct FDMDV *fdmdv_state, float fsep);
|
||||
|
||||
void fdmdv_mod(struct FDMDV *fdmdv_state, COMP tx_fdm[], int tx_bits[], int *sync_bit);
|
||||
void fdmdv_demod(struct FDMDV *fdmdv_state, int rx_bits[], int *reliable_sync_bit, COMP rx_fdm[], int *nin);
|
||||
|
||||
void fdmdv_get_test_bits(struct FDMDV *fdmdv_state, int tx_bits[]);
|
||||
int fdmdv_error_pattern_size(struct FDMDV *fdmdv_state);
|
||||
void fdmdv_put_test_bits(struct FDMDV *f, int *sync, short error_pattern[], int *bit_errors, int *ntest_bits, int rx_bits[]);
|
||||
|
||||
void fdmdv_get_demod_stats(struct FDMDV *fdmdv_state, struct MODEM_STATS *stats);
|
||||
|
||||
void fdmdv_8_to_16(float out16k[], float in8k[], int n);
|
||||
void fdmdv_8_to_16_short(short out16k[], short in8k[], int n);
|
||||
void fdmdv_16_to_8(float out8k[], float in16k[], int n);
|
||||
void fdmdv_16_to_8_short(short out8k[], short in16k[], int n);
|
||||
|
||||
void fdmdv_freq_shift(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, COMP *foff_phase_rect, int nin);
|
||||
|
||||
/* debug/development function(s) */
|
||||
|
||||
void fdmdv_dump_osc_mags(struct FDMDV *f);
|
||||
void fdmdv_simulate_channel(float *sig_pwr_av, COMP samples[], int nin, float target_snr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,155 +0,0 @@
|
||||
/*
|
||||
* codec2_fft.c
|
||||
*
|
||||
* Created on: 24.09.2016
|
||||
* Author: danilo
|
||||
*/
|
||||
|
||||
#include "codec2_fft.h"
|
||||
#ifdef USE_KISS_FFT
|
||||
#include "_kiss_fft_guts.h"
|
||||
|
||||
#else
|
||||
#if 0
|
||||
// caching constants in RAM did not seem to have an effect on performance
|
||||
// TODO: Decide what to with this code
|
||||
#define FFT_INIT_CACHE_SIZE 4
|
||||
const arm_cfft_instance_f32* fft_init_cache[FFT_INIT_CACHE_SIZE];
|
||||
|
||||
static const arm_cfft_instance_f32* arm_fft_instance2ram(const arm_cfft_instance_f32* in)
|
||||
{
|
||||
|
||||
arm_cfft_instance_f32* out = malloc(sizeof(arm_cfft_instance_f32));
|
||||
|
||||
if (out) {
|
||||
memcpy(out,in,sizeof(arm_cfft_instance_f32));
|
||||
out->pBitRevTable = malloc(out->bitRevLength * sizeof(uint16_t));
|
||||
out->pTwiddle = malloc(out->fftLen * sizeof(float32_t));
|
||||
memcpy((void*)out->pBitRevTable,in->pBitRevTable,out->bitRevLength * sizeof(uint16_t));
|
||||
memcpy((void*)out->pTwiddle,in->pTwiddle,out->fftLen * sizeof(float32_t));
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
static const arm_cfft_instance_f32* arm_fft_cache_get(const arm_cfft_instance_f32* romfft)
|
||||
{
|
||||
const arm_cfft_instance_f32* retval = NULL;
|
||||
static int used = 0;
|
||||
for (int i = 0; fft_init_cache[i] != NULL && i < used; i++)
|
||||
{
|
||||
if (romfft->fftLen == fft_init_cache[i]->fftLen)
|
||||
{
|
||||
retval = fft_init_cache[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (retval == NULL && used < FFT_INIT_CACHE_SIZE)
|
||||
{
|
||||
retval = arm_fft_instance2ram(romfft);
|
||||
fft_init_cache[used++] = retval;
|
||||
}
|
||||
if (retval == NULL)
|
||||
{
|
||||
retval = romfft;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void codec2_fft_free(codec2_fft_cfg cfg)
|
||||
{
|
||||
#ifdef USE_KISS_FFT
|
||||
KISS_FFT_FREE(cfg);
|
||||
#else
|
||||
free(cfg);
|
||||
#endif
|
||||
}
|
||||
|
||||
codec2_fft_cfg codec2_fft_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem)
|
||||
{
|
||||
codec2_fft_cfg retval;
|
||||
#ifdef USE_KISS_FFT
|
||||
retval = kiss_fft_alloc(nfft, inverse_fft, mem, lenmem);
|
||||
#else
|
||||
retval = malloc(sizeof(codec2_fft_struct));
|
||||
retval->inverse = inverse_fft;
|
||||
switch(nfft)
|
||||
{
|
||||
case 128:
|
||||
retval->instance = &arm_cfft_sR_f32_len128;
|
||||
break;
|
||||
case 256:
|
||||
retval->instance = &arm_cfft_sR_f32_len256;
|
||||
break;
|
||||
case 512:
|
||||
retval->instance = &arm_cfft_sR_f32_len512;
|
||||
break;
|
||||
// case 1024:
|
||||
// retval->instance = &arm_cfft_sR_f32_len1024;
|
||||
// break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
// retval->instance = arm_fft_cache_get(retval->instance);
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
||||
codec2_fftr_cfg codec2_fftr_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem)
|
||||
{
|
||||
codec2_fftr_cfg retval;
|
||||
#ifdef USE_KISS_FFT
|
||||
retval = kiss_fftr_alloc(nfft, inverse_fft, mem, lenmem);
|
||||
#else
|
||||
retval = malloc(sizeof(codec2_fftr_struct));
|
||||
retval->inverse = inverse_fft;
|
||||
retval->instance = malloc(sizeof(arm_rfft_fast_instance_f32));
|
||||
arm_rfft_fast_init_f32(retval->instance,nfft);
|
||||
// memcpy(&retval->instance->Sint,arm_fft_cache_get(&retval->instance->Sint),sizeof(arm_cfft_instance_f32));
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
void codec2_fftr_free(codec2_fftr_cfg cfg)
|
||||
{
|
||||
#ifdef USE_KISS_FFT
|
||||
KISS_FFT_FREE(cfg);
|
||||
#else
|
||||
free(cfg->instance);
|
||||
free(cfg);
|
||||
#endif
|
||||
}
|
||||
|
||||
// there is a little overhead for inplace kiss_fft but this is
|
||||
// on the powerful platforms like the Raspberry or even x86 PC based ones
|
||||
// not noticeable
|
||||
// the reduced usage of RAM and increased performance on STM32 platforms
|
||||
// should be worth it.
|
||||
void codec2_fft_inplace(codec2_fft_cfg cfg, codec2_fft_cpx* inout)
|
||||
{
|
||||
|
||||
#ifdef USE_KISS_FFT
|
||||
kiss_fft_cpx in[512];
|
||||
// decide whether to use the local stack based buffer for in
|
||||
// or to allow kiss_fft to allocate RAM
|
||||
// second part is just to play safe since first method
|
||||
// is much faster and uses less RAM
|
||||
if (cfg->nfft <= 512)
|
||||
{
|
||||
memcpy(in,inout,cfg->nfft*sizeof(kiss_fft_cpx));
|
||||
kiss_fft(cfg, in, (kiss_fft_cpx*)inout);
|
||||
}
|
||||
else
|
||||
{
|
||||
kiss_fft(cfg, (kiss_fft_cpx*)inout, (kiss_fft_cpx*)inout);
|
||||
}
|
||||
#else
|
||||
arm_cfft_f32(cfg->instance,(float*)inout,cfg->inverse,1);
|
||||
if (cfg->inverse)
|
||||
{
|
||||
arm_scale_f32(inout,cfg->instance->fftLen,inout,cfg->instance->fftLen*2);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
/*
|
||||
* codec2_fft.h
|
||||
*
|
||||
* Created on: 17.09.2016
|
||||
* Author: danilo
|
||||
*/
|
||||
|
||||
#ifndef DRIVERS_FREEDV_CODEC2_FFT_H_
|
||||
#define DRIVERS_FREEDV_CODEC2_FFT_H_
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#ifdef ARM_MATH_CM4
|
||||
#include "stm32f4xx.h"
|
||||
#include "core_cm4.h"
|
||||
#include "arm_math.h"
|
||||
#include "arm_const_structs.h"
|
||||
#endif
|
||||
|
||||
#include "defines.h"
|
||||
#include "comp.h"
|
||||
|
||||
#ifndef ARM_MATH_CM4
|
||||
#define USE_KISS_FFT
|
||||
#endif
|
||||
// #define USE_KISS_FFT
|
||||
|
||||
|
||||
typedef COMP codec2_fft_cpx;
|
||||
#include "kiss_fftr.h"
|
||||
|
||||
#ifdef USE_KISS_FFT
|
||||
#include "kiss_fft.h"
|
||||
typedef kiss_fftr_cfg codec2_fftr_cfg;
|
||||
typedef kiss_fft_cfg codec2_fft_cfg;
|
||||
typedef kiss_fft_scalar codec2_fft_scalar;
|
||||
#else
|
||||
typedef float32_t codec2_fft_scalar;
|
||||
typedef struct {
|
||||
arm_rfft_fast_instance_f32* instance;
|
||||
int inverse;
|
||||
} codec2_fftr_struct;
|
||||
|
||||
typedef codec2_fftr_struct* codec2_fftr_cfg;
|
||||
|
||||
typedef struct {
|
||||
const arm_cfft_instance_f32* instance;
|
||||
int inverse;
|
||||
} codec2_fft_struct;
|
||||
typedef codec2_fft_struct* codec2_fft_cfg;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static inline void codec2_fftr(codec2_fftr_cfg cfg, codec2_fft_scalar* in, codec2_fft_cpx* out)
|
||||
{
|
||||
|
||||
#ifdef USE_KISS_FFT
|
||||
kiss_fftr(cfg, in, (kiss_fft_cpx*)out);
|
||||
#else
|
||||
arm_rfft_fast_f32(cfg->instance,in,(float*)out,cfg->inverse);
|
||||
out->imag = 0; // remove out[FFT_ENC/2]->real stored in out[0].imag
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void codec2_fftri(codec2_fftr_cfg cfg, codec2_fft_cpx* in, codec2_fft_scalar* out)
|
||||
{
|
||||
#ifdef USE_KISS_FFT
|
||||
kiss_fftri(cfg, (kiss_fft_cpx*)in, out);
|
||||
#else
|
||||
arm_rfft_fast_f32(cfg->instance,(float*)in,out,cfg->inverse);
|
||||
// arm_scale_f32(out,cfg->instance->fftLenRFFT,out,cfg->instance->fftLenRFFT);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
codec2_fft_cfg codec2_fft_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem);
|
||||
codec2_fftr_cfg codec2_fftr_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem);
|
||||
void codec2_fft_free(codec2_fft_cfg cfg);
|
||||
void codec2_fftr_free(codec2_fftr_cfg cfg);
|
||||
|
||||
|
||||
static inline void codec2_fft(codec2_fft_cfg cfg, codec2_fft_cpx* in, codec2_fft_cpx* out)
|
||||
{
|
||||
|
||||
#ifdef USE_KISS_FFT
|
||||
kiss_fft(cfg, (kiss_fft_cpx*)in, (kiss_fft_cpx*)out);
|
||||
#else
|
||||
memcpy(out,in,cfg->instance->fftLen*2*sizeof(float));
|
||||
arm_cfft_f32(cfg->instance,(float*)out,cfg->inverse,0);
|
||||
// TODO: this is not nice, but for now required to keep changes minimal
|
||||
// however, since main goal is to reduce the memory usage
|
||||
// we should convert to an in place interface
|
||||
// on PC like platforms the overhead of using the "inplace" kiss_fft calls
|
||||
// is neglectable compared to the gain in memory usage on STM32 platforms
|
||||
if (cfg->inverse)
|
||||
{
|
||||
arm_scale_f32((float*)out,cfg->instance->fftLen,(float*)out,cfg->instance->fftLen*2);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void codec2_fft_inplace(codec2_fft_cfg cfg, codec2_fft_cpx* inout);
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,60 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: codec2_fifo.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: Oct 15 2012
|
||||
|
||||
A FIFO design useful in gluing the FDMDV modem and codec together in
|
||||
integrated applications.
|
||||
|
||||
The name codec2_fifo.h is used to make it unique when "make
|
||||
installed".
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2012 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FIFO__
|
||||
#define __FIFO__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct FIFO;
|
||||
|
||||
struct FIFO *fifo_create(int nshort);
|
||||
void fifo_destroy(struct FIFO *fifo);
|
||||
int fifo_write(struct FIFO *fifo, short data[], int n);
|
||||
int fifo_read(struct FIFO *fifo, short data[], int n);
|
||||
|
||||
/*!
|
||||
* Return the number of bytes stored in the FIFO.
|
||||
*/
|
||||
int fifo_used(const struct FIFO * const fifo);
|
||||
|
||||
/*!
|
||||
* Return the space available in the FIFO.
|
||||
*/
|
||||
int fifo_free(const struct FIFO * const fifo);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,53 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: codec2_fm.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: February 2015
|
||||
|
||||
Functions that implement analog FM, see also octave/fm.m.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2015 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __CODEC2_FM__
|
||||
#define __CODEC2_FM__
|
||||
|
||||
#include "comp.h"
|
||||
|
||||
struct FM {
|
||||
float Fs; /* setme: sample rate */
|
||||
float fm_max; /* setme: maximum modulation frequency */
|
||||
float fd; /* setme: maximum deviation */
|
||||
float fc; /* setme: carrier frequency */
|
||||
COMP *rx_bb;
|
||||
COMP rx_bb_filt_prev;
|
||||
float *rx_dem_mem;
|
||||
float tx_phase;
|
||||
int nsam;
|
||||
COMP lo_phase;
|
||||
};
|
||||
|
||||
struct FM *fm_create(int nsam);
|
||||
void fm_destroy(struct FM *fm_states);
|
||||
void fm_demod(struct FM *fm, float rx_out[], float rx[]);
|
||||
void fm_mod(struct FM *fm, float tx_in[], float tx_out[]);
|
||||
void fm_mod_comp(struct FM *fm_states, float tx_in[], COMP tx_out[]);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: codec2_internal.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: April 16 2012
|
||||
|
||||
Header file for Codec2 internal states, exposed via this header
|
||||
file to assist in testing.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2012 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __CODEC2_INTERNAL__
|
||||
#define __CODEC2_INTERNAL__
|
||||
|
||||
#include "codec2_fft.h"
|
||||
|
||||
struct CODEC2 {
|
||||
int mode;
|
||||
C2CONST c2const;
|
||||
int Fs;
|
||||
int n_samp;
|
||||
int m_pitch;
|
||||
codec2_fft_cfg fft_fwd_cfg; /* forward FFT config */
|
||||
codec2_fftr_cfg fftr_fwd_cfg; /* forward real FFT config */
|
||||
float *w; /* [m_pitch] time domain hamming window */
|
||||
COMP W[FFT_ENC]; /* DFT of w[] */
|
||||
float *Pn; /* [2*n_samp] trapezoidal synthesis window */
|
||||
float *bpf_buf; /* buffer for band pass filter */
|
||||
float *Sn; /* [m_pitch] input speech */
|
||||
float hpf_states[2]; /* high pass filter states */
|
||||
void *nlp; /* pitch predictor states */
|
||||
int gray; /* non-zero for gray encoding */
|
||||
|
||||
codec2_fftr_cfg fftr_inv_cfg; /* inverse FFT config */
|
||||
float *Sn_; /* [2*n_samp] synthesised output speech */
|
||||
float ex_phase; /* excitation model phase track */
|
||||
float bg_est; /* background noise estimate for post filter */
|
||||
float prev_f0_enc; /* previous frame's f0 estimate */
|
||||
MODEL prev_model_dec; /* previous frame's model parameters */
|
||||
float prev_lsps_dec[LPC_ORD]; /* previous frame's LSPs */
|
||||
float prev_e_dec; /* previous frame's LPC energy */
|
||||
|
||||
int lpc_pf; /* LPC post filter on */
|
||||
int bass_boost; /* LPC post filter bass boost */
|
||||
float beta; /* LPC post filter parameters */
|
||||
float gamma;
|
||||
|
||||
float xq_enc[2]; /* joint pitch and energy VQ states */
|
||||
float xq_dec[2];
|
||||
|
||||
int smoothing; /* enable smoothing for channels with errors */
|
||||
float *softdec; /* optional soft decn bits from demod */
|
||||
|
||||
/* newamp1 states */
|
||||
|
||||
float Wo_left;
|
||||
int voicing_left;
|
||||
codec2_fft_cfg phase_fft_fwd_cfg;
|
||||
codec2_fft_cfg phase_fft_inv_cfg;
|
||||
};
|
||||
|
||||
// test and debug
|
||||
void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]);
|
||||
void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model,
|
||||
COMP Aw[]);
|
||||
#endif
|
||||
@@ -1,69 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: codec2_ofdm.h
|
||||
AUTHORS.....: David Rowe & Steve Sampson
|
||||
DATE CREATED: June 2017
|
||||
|
||||
External user references to the modem library.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2017 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef CODEC2_OFDM_H
|
||||
#define CODEC2_OFDM_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes */
|
||||
|
||||
#include <complex.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "comp.h"
|
||||
|
||||
/* Defines */
|
||||
|
||||
struct OFDM;
|
||||
|
||||
/* Prototypes */
|
||||
|
||||
struct OFDM *ofdm_create(void);
|
||||
void ofdm_destroy(struct OFDM *);
|
||||
void ofdm_mod(struct OFDM *, COMP *, const int *);
|
||||
void ofdm_demod(struct OFDM *, int *, COMP *);
|
||||
int ofdm_get_nin(struct OFDM *);
|
||||
int ofdm_get_samples_per_frame(void);
|
||||
int ofdm_get_max_samples_per_frame(void);
|
||||
|
||||
/* option setters */
|
||||
|
||||
void ofdm_set_verbose(struct OFDM *, int);
|
||||
void ofdm_set_timing_enable(struct OFDM *, bool);
|
||||
void ofdm_set_foff_est_enable(struct OFDM *, bool);
|
||||
void ofdm_set_phase_est_enable(struct OFDM *, bool);
|
||||
void ofdm_set_off_est_hz(struct OFDM *, float);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/* Generated by write_pilot_file() Octave function */
|
||||
|
||||
#define NSYMROW 4 /* number of data symbols per carrier (number of rows) */
|
||||
#define NS 4 /* number of data symbols between pilots */
|
||||
#define NPILOTSFRAME 2 /* number of pilot symbols per carrier */
|
||||
#define PILOTS_NC 7 /* number of carriers */
|
||||
|
||||
#define NSYMROWPILOT 6 /* number of rows after pilots inserted */
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: cohpsk_internal.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: March 2015
|
||||
|
||||
Functions that implement a coherent PSK FDM modem.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2015 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __COHPSK_INTERNAL__
|
||||
#define __COHPSK_INTERNAL__
|
||||
|
||||
#define NCT_SYMB_BUF (2*NSYMROWPILOT+2)
|
||||
#define ND 2 /* diversity factor ND 1 is no diveristy, ND we have orginal plus
|
||||
one copy */
|
||||
#define NSW 4 /* number of sync window frames */
|
||||
#define COHPSK_ND 2 /* diversity factor */
|
||||
#define COHPSK_M 100 /* oversampling rate */
|
||||
#define COHPSK_NSYM 6
|
||||
#define COHPSK_NFILTER (COHPSK_NSYM*COHPSK_M)
|
||||
#define COHPSK_EXCESS_BW 0.5 /* excess BW factor of root nyq filter */
|
||||
#define COHPSK_NT 5 /* number of symbols we estimate timing over */
|
||||
#define COHPSK_CLIP 6.5 /* hard clipping for Nc*Nc=14 to reduce PAPR */
|
||||
|
||||
#include "fdmdv_internal.h"
|
||||
#include "kiss_fft.h"
|
||||
|
||||
struct COHPSK {
|
||||
COMP ch_fdm_frame_buf[NSW*NSYMROWPILOT*COHPSK_M]; /* buffer of several frames of symbols from channel */
|
||||
float pilot2[2*NPILOTSFRAME][COHPSK_NC];
|
||||
float phi_[NSYMROWPILOT][COHPSK_NC*ND]; /* phase estimates for this frame of rx data symbols */
|
||||
float amp_[NSYMROW][COHPSK_NC*ND]; /* amplitude estimates for this frame of rx data symbols */
|
||||
COMP rx_symb[NSYMROWPILOT][COHPSK_NC*ND]; /* demodulated symbols */
|
||||
float f_est;
|
||||
COMP rx_filter_memory[COHPSK_NC*ND][COHPSK_NFILTER];
|
||||
COMP ct_symb_buf[NCT_SYMB_BUF][COHPSK_NC*ND];
|
||||
int ct; /* coarse timing offset in symbols */
|
||||
float rx_timing; /* fine timing for last symbol in frame */
|
||||
int nin; /* number of samples to input for next symbol */
|
||||
float f_fine_est;
|
||||
COMP ff_rect;
|
||||
COMP ff_phase;
|
||||
COMP ct_symb_ff_buf[NSYMROWPILOT+2][COHPSK_NC*ND];
|
||||
int sync;
|
||||
int sync_timer;
|
||||
|
||||
int frame;
|
||||
float ratio;
|
||||
|
||||
float sig_rms;
|
||||
float noise_rms;
|
||||
|
||||
struct FDMDV *fdmdv;
|
||||
|
||||
int verbose;
|
||||
|
||||
int *ptest_bits_coh_tx;
|
||||
int *ptest_bits_coh_rx[2];
|
||||
int *ptest_bits_coh_end;
|
||||
|
||||
/* counting bit errors using pilots */
|
||||
|
||||
int npilotbits;
|
||||
int npilotbiterrors;
|
||||
|
||||
/* optional log variables used for testing Octave to C port */
|
||||
|
||||
COMP *rx_baseband_log;
|
||||
int rx_baseband_log_col_index;
|
||||
int rx_baseband_log_col_sz;
|
||||
|
||||
COMP *rx_filt_log;
|
||||
int rx_filt_log_col_index;
|
||||
int rx_filt_log_col_sz;
|
||||
|
||||
COMP *ch_symb_log;
|
||||
int ch_symb_log_r;
|
||||
int ch_symb_log_col_sz;
|
||||
|
||||
float *rx_timing_log;
|
||||
int rx_timing_log_index;
|
||||
|
||||
/* demodulated bits before diversity combination for test/instrumentation purposes */
|
||||
|
||||
float rx_bits_lower[COHPSK_BITS_PER_FRAME];
|
||||
float rx_bits_upper[COHPSK_BITS_PER_FRAME];
|
||||
|
||||
/* tx amplitude weights for each carrier for test/instrumentation */
|
||||
|
||||
float carrier_ampl[COHPSK_NC*ND];
|
||||
};
|
||||
|
||||
void bits_to_qpsk_symbols(COMP tx_symb[][COHPSK_NC*COHPSK_ND], int tx_bits[], int nbits);
|
||||
void qpsk_symbols_to_bits(struct COHPSK *coh, float rx_bits[], COMP ct_symb_buf[][COHPSK_NC*COHPSK_ND]);
|
||||
void tx_filter_and_upconvert_coh(COMP tx_fdm[], int Nc, COMP tx_symbols[],
|
||||
COMP tx_filter_memory[COHPSK_NC][COHPSK_NSYM],
|
||||
COMP phase_tx[], COMP freq[],
|
||||
COMP *fbb_phase, COMP fbb_rect);
|
||||
void fdm_downconvert_coh(COMP rx_baseband[COHPSK_NC][COHPSK_M+COHPSK_M/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin);
|
||||
void rx_filter_coh(COMP rx_filt[COHPSK_NC+1][P+1], int Nc, COMP rx_baseband[COHPSK_NC+1][COHPSK_M+COHPSK_M/P], COMP rx_filter_memory[COHPSK_NC+1][COHPSK_NFILTER], int nin);
|
||||
void frame_sync_fine_freq_est(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*COHPSK_ND], int sync, int *next_sync);
|
||||
void fine_freq_correct(struct COHPSK *coh, int sync, int next_sync);
|
||||
int sync_state_machine(struct COHPSK *coh, int sync, int next_sync);
|
||||
int cohpsk_fs_offset(COMP out[], COMP in[], int n, float sample_rate_ppm);
|
||||
|
||||
#endif
|
||||
@@ -1,38 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: comp.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: 24/08/09
|
||||
|
||||
Complex number definition.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2009 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __COMP__
|
||||
#define __COMP__
|
||||
|
||||
/* Complex number */
|
||||
|
||||
typedef struct {
|
||||
float real;
|
||||
float imag;
|
||||
} COMP;
|
||||
|
||||
#endif
|
||||
@@ -1,141 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: comp_prim.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: Marh 2015
|
||||
|
||||
Complex number maths primitives.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2015 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __COMP_PRIM__
|
||||
#define __COMP_PRIM__
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FUNCTIONS
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
inline static COMP cneg(COMP a)
|
||||
{
|
||||
COMP res;
|
||||
|
||||
res.real = -a.real;
|
||||
res.imag = -a.imag;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
inline static COMP cconj(COMP a)
|
||||
{
|
||||
COMP res;
|
||||
|
||||
res.real = a.real;
|
||||
res.imag = -a.imag;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
inline static COMP cmult(COMP a, COMP b)
|
||||
{
|
||||
COMP res;
|
||||
|
||||
res.real = a.real*b.real - a.imag*b.imag;
|
||||
res.imag = a.real*b.imag + a.imag*b.real;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
inline static COMP fcmult(float a, COMP b)
|
||||
{
|
||||
COMP res;
|
||||
|
||||
res.real = a*b.real;
|
||||
res.imag = a*b.imag;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
inline static COMP cadd(COMP a, COMP b)
|
||||
{
|
||||
COMP res;
|
||||
|
||||
res.real = a.real + b.real;
|
||||
res.imag = a.imag + b.imag;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
inline static float cabsolute(COMP a)
|
||||
{
|
||||
return sqrtf(powf(a.real, 2.0) + powf(a.imag, 2.0));
|
||||
}
|
||||
|
||||
/*
|
||||
* Euler's formula in a new convenient function
|
||||
*/
|
||||
inline static COMP comp_exp_j(float phi){
|
||||
COMP res;
|
||||
res.real = cosf(phi);
|
||||
res.imag = sinf(phi);
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Quick and easy complex 0
|
||||
*/
|
||||
inline static COMP comp0(){
|
||||
COMP res;
|
||||
res.real = 0;
|
||||
res.imag = 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Quick and easy complex subtract
|
||||
*/
|
||||
inline static COMP csub(COMP a, COMP b){
|
||||
COMP res;
|
||||
res.real = a.real-b.real;
|
||||
res.imag = a.imag-b.imag;
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compare the magnitude of a and b. if |a|>|b|, return true, otw false.
|
||||
* This needs no square roots
|
||||
*/
|
||||
inline static int comp_mag_gt(COMP a,COMP b){
|
||||
return ((a.real*a.real)+(a.imag*a.imag)) > ((b.real*b.real)+(b.imag*b.imag));
|
||||
}
|
||||
|
||||
/*
|
||||
* Normalize a complex number's magnitude to 1
|
||||
*/
|
||||
inline static COMP comp_normalize(COMP a){
|
||||
COMP b;
|
||||
float av = cabsolute(a);
|
||||
b.real = a.real/av;
|
||||
b.imag = a.imag/av;
|
||||
return b;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,113 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: defines.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: 23/4/93
|
||||
|
||||
Defines and structures used throughout the codec.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2009 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __DEFINES__
|
||||
#define __DEFINES__
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
DEFINES
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/* General defines */
|
||||
|
||||
#define N_S 0.010 /* buffer size in s */
|
||||
#define TW_S 0.005 /* trapezoidal synth window overlap */
|
||||
#define MAX_AMP 160 /* maximum number of harmonics */
|
||||
#ifndef PI
|
||||
#define PI 3.141592654 /* mathematical constant */
|
||||
#endif
|
||||
#define TWO_PI 6.283185307 /* mathematical constant */
|
||||
#define MAX_STR 2048 /* maximum string size */
|
||||
|
||||
#define FFT_ENC 512 /* size of FFT used for encoder */
|
||||
#define FFT_DEC 512 /* size of FFT used in decoder */
|
||||
#define V_THRESH 6.0 /* voicing threshold in dB */
|
||||
#define LPC_ORD 10 /* LPC order */
|
||||
#define LPC_ORD_LOW 6 /* LPC order for lower rates */
|
||||
|
||||
/* Pitch estimation defines */
|
||||
|
||||
#define M_PITCH_S 0.0400 /* pitch analysis window in s */
|
||||
#define P_MIN_S 0.0025 /* minimum pitch period in s */
|
||||
#define P_MAX_S 0.0200 /* maximum pitch period in s */
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
TYPEDEFS
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/* Structure to hold constants calculated at run time based on sample rate */
|
||||
|
||||
typedef struct {
|
||||
int Fs; /* sample rate of this instance */
|
||||
int n_samp; /* number of samples per 10ms frame at Fs */
|
||||
int max_amp; /* maximum number of harmonics */
|
||||
int m_pitch; /* pitch estimation window size in samples */
|
||||
int p_min; /* minimum pitch period in samples */
|
||||
int p_max; /* maximum pitch period in samples */
|
||||
float Wo_min;
|
||||
float Wo_max;
|
||||
int nw; /* analysis window size in samples */
|
||||
int tw; /* trapezoidal synthesis window overlap */
|
||||
} C2CONST;
|
||||
|
||||
/* Structure to hold model parameters for one frame */
|
||||
|
||||
typedef struct {
|
||||
float Wo; /* fundamental frequency estimate in radians */
|
||||
int L; /* number of harmonics */
|
||||
float A[MAX_AMP+1]; /* amplitiude of each harmonic */
|
||||
float phi[MAX_AMP+1]; /* phase of each harmonic */
|
||||
int voiced; /* non-zero if this frame is voiced */
|
||||
} MODEL;
|
||||
|
||||
/* describes each codebook */
|
||||
|
||||
struct lsp_codebook {
|
||||
int k; /* dimension of vector */
|
||||
int log2m; /* number of bits in m */
|
||||
int m; /* elements in codebook */
|
||||
const float * cb; /* The elements */
|
||||
};
|
||||
|
||||
extern const struct lsp_codebook lsp_cb[];
|
||||
extern const struct lsp_codebook lsp_cbd[];
|
||||
extern const struct lsp_codebook lsp_cbvq[];
|
||||
extern const struct lsp_codebook lsp_cbjnd[];
|
||||
extern const struct lsp_codebook lsp_cbdt[];
|
||||
extern const struct lsp_codebook lsp_cbjvm[];
|
||||
extern const struct lsp_codebook lsp_cbvqanssi[];
|
||||
extern const struct lsp_codebook mel_cb[];
|
||||
extern const struct lsp_codebook ge_cb[];
|
||||
extern const struct lsp_codebook lspmelvq_cb[];
|
||||
extern const struct lsp_codebook newamp1vq_cb[];
|
||||
extern const struct lsp_codebook newamp1_energy_cb[];
|
||||
|
||||
#endif
|
||||
@@ -1,674 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: dump.c
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: 25/8/09
|
||||
|
||||
Routines to dump data to text files for Octave analysis.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "defines.h"
|
||||
#include "comp.h"
|
||||
#include "dump.h"
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
#ifdef __EMBEDDED__
|
||||
#include "gdb_stdio.h"
|
||||
#define fprintf gdb_stdio_fprintf
|
||||
#define fopen gdb_stdio_fopen
|
||||
#define fclose gdb_stdio_fclose
|
||||
#endif
|
||||
|
||||
#ifdef DUMP
|
||||
static int dumpon = 0;
|
||||
|
||||
static FILE *fsn = NULL;
|
||||
static FILE *fsw = NULL;
|
||||
static FILE *few = NULL;
|
||||
static FILE *fsw_ = NULL;
|
||||
static FILE *fsoftdec = NULL;
|
||||
static FILE *fmodel = NULL;
|
||||
static FILE *fqmodel = NULL;
|
||||
static FILE *fpwb = NULL;
|
||||
static FILE *fpw = NULL;
|
||||
static FILE *frw = NULL;
|
||||
static FILE *flsp = NULL;
|
||||
static FILE *fweights = NULL;
|
||||
static FILE *flsp_ = NULL;
|
||||
static FILE *fmel = NULL;
|
||||
static FILE *fmel_indexes = NULL;
|
||||
static FILE *fphase = NULL;
|
||||
static FILE *fphase_ = NULL;
|
||||
static FILE *ffw = NULL;
|
||||
static FILE *fe = NULL;
|
||||
static FILE *fsq = NULL;
|
||||
static FILE *fdec = NULL;
|
||||
static FILE *fsnr = NULL;
|
||||
static FILE *flpcsnr = NULL;
|
||||
static FILE *fak = NULL;
|
||||
static FILE *fak_ = NULL;
|
||||
static FILE *fbg = NULL;
|
||||
static FILE *fE = NULL;
|
||||
static FILE *frk = NULL;
|
||||
static FILE *fhephase = NULL;
|
||||
|
||||
static char prefix[MAX_STR];
|
||||
|
||||
void dump_on(char p[]) {
|
||||
dumpon = 1;
|
||||
strcpy(prefix, p);
|
||||
}
|
||||
|
||||
void dump_off(){
|
||||
if (fsn != NULL)
|
||||
fclose(fsn);
|
||||
if (fsw != NULL)
|
||||
fclose(fsw);
|
||||
if (fsw_ != NULL)
|
||||
fclose(fsw_);
|
||||
if (few != NULL)
|
||||
fclose(few);
|
||||
if (fmodel != NULL)
|
||||
fclose(fmodel);
|
||||
if (fsoftdec != NULL)
|
||||
fclose(fsoftdec);
|
||||
if (fqmodel != NULL)
|
||||
fclose(fqmodel);
|
||||
if (fpwb != NULL)
|
||||
fclose(fpwb);
|
||||
if (fpw != NULL)
|
||||
fclose(fpw);
|
||||
if (frw != NULL)
|
||||
fclose(frw);
|
||||
if (flsp != NULL)
|
||||
fclose(flsp);
|
||||
if (fweights != NULL)
|
||||
fclose(fweights);
|
||||
if (flsp_ != NULL)
|
||||
fclose(flsp_);
|
||||
if (fmel != NULL)
|
||||
fclose(fmel);
|
||||
if (fmel_indexes != NULL)
|
||||
fclose(fmel_indexes);
|
||||
if (fphase != NULL)
|
||||
fclose(fphase);
|
||||
if (fphase_ != NULL)
|
||||
fclose(fphase_);
|
||||
if (ffw != NULL)
|
||||
fclose(ffw);
|
||||
if (fe != NULL)
|
||||
fclose(fe);
|
||||
if (fsq != NULL)
|
||||
fclose(fsq);
|
||||
if (fdec != NULL)
|
||||
fclose(fdec);
|
||||
if (fsnr != NULL)
|
||||
fclose(fsnr);
|
||||
if (flpcsnr != NULL)
|
||||
fclose(flpcsnr);
|
||||
if (fak != NULL)
|
||||
fclose(fak);
|
||||
if (fak_ != NULL)
|
||||
fclose(fak_);
|
||||
if (fbg != NULL)
|
||||
fclose(fbg);
|
||||
if (fE != NULL)
|
||||
fclose(fE);
|
||||
if (frk != NULL)
|
||||
fclose(frk);
|
||||
if (fhephase != NULL)
|
||||
fclose(fhephase);
|
||||
}
|
||||
|
||||
void dump_Sn(int m_pitch, float Sn[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fsn == NULL) {
|
||||
sprintf(s,"%s_sn.txt", prefix);
|
||||
fsn = fopen(s, "wt");
|
||||
assert(fsn != NULL);
|
||||
}
|
||||
|
||||
/* split across two lines to avoid max line length problems */
|
||||
/* reconstruct in Octave */
|
||||
|
||||
for(i=0; i<m_pitch/2; i++)
|
||||
fprintf(fsn,"%f\t",Sn[i]);
|
||||
fprintf(fsn,"\n");
|
||||
for(i=m_pitch/2; i<m_pitch; i++)
|
||||
fprintf(fsn,"%f\t",Sn[i]);
|
||||
fprintf(fsn,"\n");
|
||||
}
|
||||
|
||||
void dump_Sw(COMP Sw[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fsw == NULL) {
|
||||
sprintf(s,"%s_sw.txt", prefix);
|
||||
fsw = fopen(s, "wt");
|
||||
assert(fsw != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<FFT_ENC/2; i++)
|
||||
fprintf(fsw,"%f\t",
|
||||
10.0*log10(Sw[i].real*Sw[i].real + Sw[i].imag*Sw[i].imag));
|
||||
fprintf(fsw,"\n");
|
||||
}
|
||||
|
||||
void dump_Sw_(COMP Sw_[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fsw_ == NULL) {
|
||||
sprintf(s,"%s_sw_.txt", prefix);
|
||||
fsw_ = fopen(s, "wt");
|
||||
assert(fsw_ != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<FFT_ENC/2; i++)
|
||||
fprintf(fsw_,"%f\t",
|
||||
10.0*log10(Sw_[i].real*Sw_[i].real + Sw_[i].imag*Sw_[i].imag));
|
||||
fprintf(fsw_,"\n");
|
||||
}
|
||||
|
||||
void dump_Ew(COMP Ew[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (few == NULL) {
|
||||
sprintf(s,"%s_ew.txt", prefix);
|
||||
few = fopen(s, "wt");
|
||||
assert(few != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<FFT_ENC/2; i++)
|
||||
fprintf(few,"%f\t",
|
||||
10.0*log10(Ew[i].real*Ew[i].real + Ew[i].imag*Ew[i].imag));
|
||||
fprintf(few,"\n");
|
||||
}
|
||||
|
||||
void dump_softdec(float *softdec, int n)
|
||||
{
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fsoftdec == NULL) {
|
||||
sprintf(s,"%s_softdec.txt", prefix);
|
||||
fsoftdec = fopen(s, "wt");
|
||||
assert(fsoftdec != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<n; i++)
|
||||
fprintf(fsoftdec,"%f\t", softdec[i]);
|
||||
fprintf(fsoftdec,"\n");
|
||||
}
|
||||
|
||||
void dump_model(MODEL *model) {
|
||||
int l;
|
||||
char s[MAX_STR];
|
||||
char line[MAX_STR*10];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fmodel == NULL) {
|
||||
sprintf(s,"%s_model.txt", prefix);
|
||||
fmodel = fopen(s, "wt");
|
||||
assert(fmodel != NULL);
|
||||
}
|
||||
|
||||
sprintf(line,"%12f %12d ", model->Wo, model->L);
|
||||
for(l=1; l<=model->L; l++) {
|
||||
sprintf(s,"%12f ",model->A[l]);
|
||||
strcat(line, s);
|
||||
assert(strlen(line) < MAX_STR*10);
|
||||
}
|
||||
for(l=model->L+1; l<=MAX_AMP; l++) {
|
||||
sprintf(s,"%12f ", 0.0);
|
||||
strcat(line,s);
|
||||
assert(strlen(line) < MAX_STR*10);
|
||||
}
|
||||
|
||||
sprintf(s,"%d\n",model->voiced);
|
||||
strcat(line,s);
|
||||
fprintf(fmodel,"%s",line);
|
||||
}
|
||||
|
||||
void dump_quantised_model(MODEL *model) {
|
||||
int l;
|
||||
char s[MAX_STR];
|
||||
char line[2048];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fqmodel == NULL) {
|
||||
sprintf(s,"%s_qmodel.txt", prefix);
|
||||
fqmodel = fopen(s, "wt");
|
||||
assert(fqmodel != NULL);
|
||||
}
|
||||
|
||||
sprintf(line,"%12f %12d ", model->Wo, model->L);
|
||||
for(l=1; l<=model->L; l++) {
|
||||
sprintf(s,"%12f ",model->A[l]);
|
||||
strcat(line, s);
|
||||
}
|
||||
for(l=model->L+1; l<=MAX_AMP; l++) {
|
||||
sprintf(s,"%12f ", 0.0);
|
||||
strcat(line, s);
|
||||
}
|
||||
|
||||
sprintf(s,"%d\n",model->voiced);
|
||||
strcat(line, s);
|
||||
fprintf(fqmodel, "%s", line);
|
||||
}
|
||||
|
||||
void dump_phase(float phase[], int L) {
|
||||
int l;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fphase == NULL) {
|
||||
sprintf(s,"%s_phase.txt", prefix);
|
||||
fphase = fopen(s, "wt");
|
||||
assert(fphase != NULL);
|
||||
}
|
||||
|
||||
for(l=1; l<=L; l++)
|
||||
fprintf(fphase,"%f\t",phase[l]);
|
||||
for(l=L+1; l<=MAX_AMP; l++)
|
||||
fprintf(fphase,"%f\t",0.0);
|
||||
fprintf(fphase,"\n");
|
||||
}
|
||||
|
||||
void dump_phase_(float phase_[], int L) {
|
||||
int l;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fphase_ == NULL) {
|
||||
sprintf(s,"%s_phase_.txt", prefix);
|
||||
fphase_ = fopen(s, "wt");
|
||||
assert(fphase_ != NULL);
|
||||
}
|
||||
|
||||
for(l=1; l<=L; l++)
|
||||
fprintf(fphase_,"%f\t",phase_[l]);
|
||||
for(l=L+1; l<MAX_AMP; l++)
|
||||
fprintf(fphase_,"%f\t",0.0);
|
||||
fprintf(fphase_,"\n");
|
||||
}
|
||||
|
||||
|
||||
void dump_hephase(int ind[], int dim) {
|
||||
int m;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fhephase == NULL) {
|
||||
sprintf(s,"%s_hephase.txt", prefix);
|
||||
fhephase = fopen(s, "wt");
|
||||
assert(fhephase != NULL);
|
||||
}
|
||||
|
||||
for(m=0; m<dim; m++)
|
||||
fprintf(fhephase,"%d\t",ind[m]);
|
||||
fprintf(fhephase,"\n");
|
||||
}
|
||||
|
||||
|
||||
void dump_snr(float snr) {
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fsnr == NULL) {
|
||||
sprintf(s,"%s_snr.txt", prefix);
|
||||
fsnr = fopen(s, "wt");
|
||||
assert(fsnr != NULL);
|
||||
}
|
||||
|
||||
fprintf(fsnr,"%f\n",snr);
|
||||
}
|
||||
|
||||
void dump_lpc_snr(float snr) {
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (flpcsnr == NULL) {
|
||||
sprintf(s,"%s_lpc_snr.txt", prefix);
|
||||
flpcsnr = fopen(s, "wt");
|
||||
assert(flpcsnr != NULL);
|
||||
}
|
||||
|
||||
fprintf(flpcsnr,"%f\n",snr);
|
||||
}
|
||||
|
||||
/* Pw "before" post filter so we can plot before and after */
|
||||
|
||||
void dump_Pwb(float Pwb[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fpwb == NULL) {
|
||||
sprintf(s,"%s_pwb.txt", prefix);
|
||||
fpwb = fopen(s, "wt");
|
||||
assert(fpwb != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<FFT_ENC/2; i++)
|
||||
fprintf(fpwb,"%f\t",Pwb[i]);
|
||||
fprintf(fpwb,"\n");
|
||||
}
|
||||
|
||||
void dump_Pw(float Pw[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fpw == NULL) {
|
||||
sprintf(s,"%s_pw.txt", prefix);
|
||||
fpw = fopen(s, "wt");
|
||||
assert(fpw != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<FFT_ENC/2; i++)
|
||||
fprintf(fpw,"%f\t",Pw[i]);
|
||||
fprintf(fpw,"\n");
|
||||
}
|
||||
|
||||
void dump_Rw(float Rw[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (frw == NULL) {
|
||||
sprintf(s,"%s_rw.txt", prefix);
|
||||
frw = fopen(s, "wt");
|
||||
assert(frw != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<FFT_ENC/2; i++)
|
||||
fprintf(frw,"%f\t",Rw[i]);
|
||||
fprintf(frw,"\n");
|
||||
}
|
||||
|
||||
void dump_weights(float w[], int order) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fweights == NULL) {
|
||||
sprintf(s,"%s_weights.txt", prefix);
|
||||
fweights = fopen(s, "wt");
|
||||
assert(fweights != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<order; i++)
|
||||
fprintf(fweights,"%f\t", w[i]);
|
||||
fprintf(fweights,"\n");
|
||||
}
|
||||
|
||||
void dump_lsp(float lsp[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (flsp == NULL) {
|
||||
sprintf(s,"%s_lsp.txt", prefix);
|
||||
flsp = fopen(s, "wt");
|
||||
assert(flsp != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<10; i++)
|
||||
fprintf(flsp,"%f\t",lsp[i]);
|
||||
fprintf(flsp,"\n");
|
||||
}
|
||||
|
||||
void dump_lsp_(float lsp_[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (flsp_ == NULL) {
|
||||
sprintf(s,"%s_lsp_.txt", prefix);
|
||||
flsp_ = fopen(s, "wt");
|
||||
assert(flsp_ != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<10; i++)
|
||||
fprintf(flsp_,"%f\t",lsp_[i]);
|
||||
fprintf(flsp_,"\n");
|
||||
}
|
||||
|
||||
void dump_mel(float mel[], int order) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fmel == NULL) {
|
||||
sprintf(s,"%s_mel.txt", prefix);
|
||||
fmel = fopen(s, "wt");
|
||||
assert(fmel != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<order; i++)
|
||||
fprintf(fmel,"%f\t",mel[i]);
|
||||
fprintf(fmel,"\n");
|
||||
}
|
||||
|
||||
void dump_mel_indexes(int mel_indexes[], int order) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fmel_indexes == NULL) {
|
||||
sprintf(s,"%s_mel_indexes.txt", prefix);
|
||||
fmel_indexes = fopen(s, "wt");
|
||||
assert(fmel_indexes != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<order; i++)
|
||||
fprintf(fmel_indexes,"%d\t",mel_indexes[i]);
|
||||
fprintf(fmel_indexes,"\n");
|
||||
}
|
||||
|
||||
void dump_ak(float ak[], int order) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fak == NULL) {
|
||||
sprintf(s,"%s_ak.txt", prefix);
|
||||
fak = fopen(s, "wt");
|
||||
assert(fak != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<=order; i++)
|
||||
fprintf(fak,"%f\t",ak[i]);
|
||||
fprintf(fak,"\n");
|
||||
}
|
||||
|
||||
void dump_ak_(float ak_[], int order) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fak_ == NULL) {
|
||||
sprintf(s,"%s_ak_.txt", prefix);
|
||||
fak_ = fopen(s, "wt");
|
||||
assert(fak_ != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<=order; i++)
|
||||
fprintf(fak_,"%f\t",ak_[i]);
|
||||
fprintf(fak_,"\n");
|
||||
}
|
||||
|
||||
void dump_Fw(COMP Fw[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (ffw == NULL) {
|
||||
sprintf(s,"%s_fw.txt", prefix);
|
||||
ffw = fopen(s, "wt");
|
||||
assert(ffw != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<256; i++)
|
||||
fprintf(ffw,"%f\t",Fw[i].real);
|
||||
fprintf(ffw,"\n");
|
||||
}
|
||||
|
||||
void dump_e(float e_hz[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fe == NULL) {
|
||||
sprintf(s,"%s_e.txt", prefix);
|
||||
fe = fopen(s, "wt");
|
||||
assert(fe != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<500/2; i++)
|
||||
fprintf(fe,"%f\t",e_hz[i]);
|
||||
fprintf(fe,"\n");
|
||||
for(i=500/2; i<500; i++)
|
||||
fprintf(fe,"%f\t",e_hz[i]);
|
||||
fprintf(fe,"\n");
|
||||
}
|
||||
|
||||
void dump_sq(int m_pitch, float sq[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fsq == NULL) {
|
||||
sprintf(s,"%s_sq.txt", prefix);
|
||||
fsq = fopen(s, "wt");
|
||||
assert(fsq != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<m_pitch/2; i++)
|
||||
fprintf(fsq,"%f\t",sq[i]);
|
||||
fprintf(fsq,"\n");
|
||||
for(i=m_pitch/2; i<m_pitch; i++)
|
||||
fprintf(fsq,"%f\t",sq[i]);
|
||||
fprintf(fsq,"\n");
|
||||
}
|
||||
|
||||
void dump_dec(COMP Fw[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fdec == NULL) {
|
||||
sprintf(s,"%s_dec.txt", prefix);
|
||||
fdec = fopen(s, "wt");
|
||||
assert(fdec != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<320/5; i++)
|
||||
fprintf(fdec,"%f\t",Fw[i].real);
|
||||
fprintf(fdec,"\n");
|
||||
}
|
||||
|
||||
void dump_bg(float e, float bg_est, float percent_uv) {
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fbg == NULL) {
|
||||
sprintf(s,"%s_bg.txt", prefix);
|
||||
fbg = fopen(s, "wt");
|
||||
assert(fbg != NULL);
|
||||
}
|
||||
|
||||
fprintf(fbg,"%f\t%f\t%f\n", e, bg_est, percent_uv);
|
||||
}
|
||||
|
||||
void dump_E(float E) {
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (fE == NULL) {
|
||||
sprintf(s,"%s_E.txt", prefix);
|
||||
fE = fopen(s, "wt");
|
||||
assert(fE != NULL);
|
||||
}
|
||||
|
||||
fprintf(fE,"%f\n", 10.0*log10(E));
|
||||
}
|
||||
|
||||
#if 0
|
||||
void dump_Rk(float Rk[]) {
|
||||
int i;
|
||||
char s[MAX_STR];
|
||||
|
||||
if (!dumpon) return;
|
||||
|
||||
if (frk == NULL) {
|
||||
sprintf(s,"%s_rk.txt", prefix);
|
||||
frk = fopen(s, "wt");
|
||||
assert(frk != NULL);
|
||||
}
|
||||
|
||||
for(i=0; i<P_MAX; i++)
|
||||
fprintf(frk,"%f\t",Rk[i]);
|
||||
fprintf(frk,"\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,82 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: dump.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: 25/8/09
|
||||
|
||||
Routines to dump data to text files for Octave analysis.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __DUMP__
|
||||
#define __DUMP__
|
||||
|
||||
#include "defines.h"
|
||||
#include "comp.h"
|
||||
#include "codec2_fft.h"
|
||||
#include "codec2_internal.h"
|
||||
|
||||
void dump_on(char filename_prefix[]);
|
||||
void dump_off();
|
||||
|
||||
void dump_Sn(int m_pitch, float Sn[]);
|
||||
void dump_Sw(COMP Sw[]);
|
||||
void dump_Sw_(COMP Sw_[]);
|
||||
void dump_Ew(COMP Ew[]);
|
||||
void dump_softdec(float *softdec, int n);
|
||||
|
||||
/* amplitude modelling */
|
||||
|
||||
void dump_model(MODEL *m);
|
||||
void dump_quantised_model(MODEL *m);
|
||||
void dump_Pwn(COMP Pw[]);
|
||||
void dump_Pw(float Pw[]);
|
||||
void dump_Rw(float Rw[]);
|
||||
void dump_lsp(float lsp[]);
|
||||
void dump_weights(float w[], int ndim);
|
||||
void dump_lsp_(float lsp_[]);
|
||||
void dump_mel(float mel[], int order);
|
||||
void dump_mel_indexes(int mel_indexes[], int order);
|
||||
void dump_ak(float ak[], int order);
|
||||
void dump_ak_(float ak[], int order);
|
||||
void dump_E(float E);
|
||||
void dump_lpc_snr(float snr);
|
||||
|
||||
/* phase modelling */
|
||||
|
||||
void dump_snr(float snr);
|
||||
void dump_phase(float phase[], int L);
|
||||
void dump_phase_(float phase[], int L);
|
||||
void dump_hephase(int ind[], int dim);
|
||||
|
||||
/* NLP states */
|
||||
|
||||
void dump_sq(int m_pitch, float sq[]);
|
||||
void dump_dec(COMP Fw[]);
|
||||
void dump_Fw(COMP Fw[]);
|
||||
void dump_e(float e_hz[]);
|
||||
#if 0
|
||||
void dump_Rk(float Rk[]);
|
||||
#endif
|
||||
|
||||
/* post filter */
|
||||
|
||||
void dump_bg(float e, float bg_est, float percent_uv);
|
||||
void dump_Pwb(float Pwb[]);
|
||||
|
||||
#endif
|
||||
@@ -1,192 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FILE........: fdmdv_internal.h
|
||||
AUTHOR......: David Rowe
|
||||
DATE CREATED: April 16 2012
|
||||
|
||||
Header file for FDMDV internal functions, exposed via this header
|
||||
file for testing.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
Copyright (C) 2012 David Rowe
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License version 2.1, as
|
||||
published by the Free Software Foundation. This program is
|
||||
distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __FDMDV_INTERNAL__
|
||||
#define __FDMDV_INTERNAL__
|
||||
|
||||
#include "comp.h"
|
||||
#include "codec2_fdmdv.h"
|
||||
#include "codec2_fft.h"
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
DEFINES
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef PI
|
||||
#define PI 3.141592654
|
||||
#endif
|
||||
#define FS 8000 /* sample rate in Hz */
|
||||
#define T (1.0/FS) /* sample period in seconds */
|
||||
#define RS 50 /* symbol rate in Hz */
|
||||
#define NC 20 /* max number of data carriers (plus one pilot in the centre) */
|
||||
#define NB 2 /* Bits/symbol for QPSK modulation */
|
||||
#define RB (NC*RS*NB) /* bit rate */
|
||||
#define M_FAC (FS/RS) /* oversampling factor */
|
||||
#define NSYM 6 /* number of symbols to filter over */
|
||||
#define NFILTER (NSYM*M_FAC) /* size of tx/rx filters at sample rate M */
|
||||
|
||||
#define FSEP 75 /* Default separation between carriers (Hz) */
|
||||
|
||||
#define NT 5 /* number of symbols we estimate timing over */
|
||||
#define P 4 /* oversample factor used for initial rx symbol filtering output */
|
||||
#define Q (M_FAC/4) /* oversample factor used for initial rx symbol filtering input */
|
||||
#define NRXDEC 31 /* number of taps in the rx decimation filter */
|
||||
|
||||
#define NPILOT_LUT (4*M_FAC) /* number of pilot look up table samples */
|
||||
#define NPILOTCOEFF 30 /* number of FIR filter coeffs in LP filter */
|
||||
#define NPILOTBASEBAND (NPILOTCOEFF+M_FAC+M_FAC/P) /* number of pilot baseband samples reqd for pilot LPF */
|
||||
#define NPILOTLPF (4*M_FAC) /* number of samples we DFT pilot over, pilot est window */
|
||||
#define MPILOTFFT 256
|
||||
|
||||
#define NSYNC_MEM 6
|
||||
|
||||
/* averaging filter coeffs */
|
||||
|
||||
#define TRACK_COEFF 0.5
|
||||
#define SNR_COEFF 0.9 /* SNR est averaging filter coeff */
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
STRUCT for States
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
struct FDMDV {
|
||||
|
||||
int Nc;
|
||||
float fsep;
|
||||
|
||||
/* test data (test frame) states */
|
||||
|
||||
int ntest_bits;
|
||||
int current_test_bit;
|
||||
int *rx_test_bits_mem;
|
||||
|
||||
/* Modulator */
|
||||
|
||||
int old_qpsk_mapping;
|
||||
int tx_pilot_bit;
|
||||
COMP prev_tx_symbols[NC+1];
|
||||
COMP tx_filter_memory[NC+1][NSYM];
|
||||
COMP phase_tx[NC+1];
|
||||
COMP freq[NC+1];
|
||||
float freq_pol[NC+1];
|
||||
|
||||
/* Pilot generation at demodulator */
|
||||
|
||||
COMP pilot_lut[NPILOT_LUT];
|
||||
int pilot_lut_index;
|
||||
int prev_pilot_lut_index;
|
||||
|
||||
/* freq offset estimation states */
|
||||
|
||||
codec2_fft_cfg fft_pilot_cfg;
|
||||
COMP pilot_baseband1[NPILOTBASEBAND];
|
||||
COMP pilot_baseband2[NPILOTBASEBAND];
|
||||
COMP pilot_lpf1[NPILOTLPF];
|
||||
COMP pilot_lpf2[NPILOTLPF];
|
||||
COMP S1[MPILOTFFT];
|
||||
COMP S2[MPILOTFFT];
|
||||
|
||||
/* baseband to low IF carrier states */
|
||||
|
||||
COMP fbb_rect;
|
||||
float fbb_pol;
|
||||
COMP fbb_phase_tx;
|
||||
COMP fbb_phase_rx;
|
||||
|
||||
/* freq offset correction states */
|
||||
|
||||
float foff;
|
||||
COMP foff_phase_rect;
|
||||
float foff_filt;
|
||||
|
||||
/* Demodulator */
|
||||
|
||||
COMP rxdec_lpf_mem[NRXDEC-1+M_FAC];
|
||||
COMP rx_fdm_mem[NFILTER+M_FAC];
|
||||
COMP phase_rx[NC+1];
|
||||
COMP rx_filter_mem_timing[NC+1][NT*P];
|
||||
float rx_timing;
|
||||
COMP phase_difference[NC+1];
|
||||
COMP prev_rx_symbols[NC+1];
|
||||
|
||||
/* sync state machine */
|
||||
|
||||
int sync_mem[NSYNC_MEM];
|
||||
int fest_state;
|
||||
int sync;
|
||||
int timer;
|
||||
|
||||
/* SNR estimation states */
|
||||
|
||||
float sig_est[NC+1];
|
||||
float noise_est[NC+1];
|
||||
|
||||
/* channel simulation */
|
||||
|
||||
float sig_pwr_av;
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
|
||||
FUNCTION PROTOTYPES
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
void bits_to_dqpsk_symbols(COMP tx_symbols[], int Nc, COMP prev_tx_symbols[], int tx_bits[], int *pilot_bit, int old_qpsk_mapping);
|
||||
void tx_filter(COMP tx_baseband[NC+1][M_FAC], int Nc, COMP tx_symbols[], COMP tx_filter_memory[NC+1][NSYM]);
|
||||
void fdm_upconvert(COMP tx_fdm[], int Nc, COMP tx_baseband[NC+1][M_FAC], COMP phase_tx[], COMP freq_tx[],
|
||||
COMP *fbb_phase, COMP fbb_rect);
|
||||
void tx_filter_and_upconvert(COMP tx_fdm[], int Nc, COMP tx_symbols[],
|
||||
COMP tx_filter_memory[NC+1][NSYM],
|
||||
COMP phase_tx[], COMP freq[], COMP *fbb_phase, COMP fbb_rect);
|
||||
void generate_pilot_fdm(COMP *pilot_fdm, int *bit, float *symbol, float *filter_mem, COMP *phase, COMP *freq);
|
||||
void generate_pilot_lut(COMP pilot_lut[], COMP *pilot_freq);
|
||||
float rx_est_freq_offset(struct FDMDV *f, COMP rx_fdm[], int nin, int do_fft);
|
||||
void lpf_peak_pick(float *foff, float *max, COMP pilot_baseband[], COMP pilot_lpf[], codec2_fft_cfg fft_pilot_cfg, COMP S[], int nin, int do_fft);
|
||||
void fdm_downconvert(COMP rx_baseband[NC+1][M_FAC+M_FAC/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin);
|
||||
void rxdec_filter(COMP rx_fdm_filter[], COMP rx_fdm[], COMP rxdec_lpf_mem[], int nin);
|
||||
void rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_baseband[NC+1][M_FAC+M_FAC/P], COMP rx_filter_memory[NC+1][NFILTER], int nin);
|
||||
void down_convert_and_rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_fdm[],
|
||||
COMP rx_fdm_mem[], COMP phase_rx[], COMP freq[],
|
||||
float freq_pol[], int nin, int dec_rate);
|
||||
float rx_est_timing(COMP rx_symbols[], int Nc,
|
||||
COMP rx_filt[NC+1][P+1],
|
||||
COMP rx_filter_mem_timing[NC+1][NT*P],
|
||||
float env[],
|
||||
int nin,
|
||||
int m);
|
||||
float qpsk_to_bits(int rx_bits[], int *sync_bit, int Nc, COMP phase_difference[], COMP prev_rx_symbols[], COMP rx_symbols[], int old_qpsk_mapping);
|
||||
void snr_update(float sig_est[], float noise_est[], int Nc, COMP phase_difference[]);
|
||||
int freq_state(int *reliable_sync_bit, int sync_bit, int *state, int *timer, int *sync_mem);
|
||||
float calc_snr(int Nc, float sig_est[], float noise_est[]);
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user