mirror of
https://github.com/pelgraine/Meck.git
synced 2026-05-15 13:55:52 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d601edd0ce | |||
| a378f4f1aa |
@@ -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,18 +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)
|
||||
- [Delete Message History (v1.10+)](#delete-message-history-v110)
|
||||
- [Per-Channel Notification Preferences (v1.10+)](#per-channel-notification-preferences-v110)
|
||||
- [Custom Notification Tones (v1.10+)](#custom-notification-tones-v110)
|
||||
- [Games (v1.10+)](#games-v110)
|
||||
- [Settings Screen](#settings-screen)
|
||||
- [Font Styles](#font-styles)
|
||||
- [Compose Mode](#compose-mode)
|
||||
- [Symbol Entry (Sym Key)](#symbol-entry-sym-key)
|
||||
- [Emoji Picker](#emoji-picker)
|
||||
@@ -44,7 +36,6 @@ A fork created specifically to focus on enabling BLE & WiFi companion firmware f
|
||||
- [Alarm Clock (Audio only)](#alarm-clock-audio-only)
|
||||
- [Voice Notes Over LoRa (Audio only)](#voice-notes-over-lora-audio-only)
|
||||
- [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)
|
||||
- [T5S3 E-Paper Pro](#t5s3-e-paper-pro)
|
||||
@@ -98,7 +89,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.
|
||||
|
||||
---
|
||||
|
||||
@@ -126,7 +117,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**
|
||||
@@ -146,8 +137,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.
|
||||
@@ -193,22 +182,6 @@ 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
|
||||
@@ -248,8 +221,6 @@ The T-Deck Pro firmware includes full keyboard support for standalone messaging
|
||||
| K | Open alarm clock (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) |
|
||||
| J | Open games menu (v1.10+) -- see [Games](#games-v110) |
|
||||
| G | Open map screen (shows contacts with GPS positions) |
|
||||
| Mic | Open voice messages (audio variant only) |
|
||||
| Q | Back to home screen |
|
||||
@@ -303,27 +274,12 @@ 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 |
|
||||
| X | Delete message history for highlighted channel (v1.10+) |
|
||||
| Q | Back to home screen |
|
||||
|
||||
Pressing **X** on any highlighted channel brings up a confirmation overlay. Press **Enter** to confirm deletion or **Q** to cancel. This clears all stored messages for that channel from the circular buffer and saves to SD. The channel itself is not removed -- only its message history.
|
||||
|
||||
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. Long-press a channel to bring up the delete history confirmation.
|
||||
|
||||
### 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.
|
||||
@@ -349,14 +305,13 @@ Press **C** from the home screen to open the contacts list. All known mesh conta
|
||||
| `~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.
|
||||
Flood-based hop estimates (`~D`, `~N`) are shown for the 12 most recently heard contacts 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**
|
||||
|
||||
| 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 |
|
||||
@@ -407,7 +362,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
|
||||
|
||||
@@ -440,115 +395,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.
|
||||
|
||||
### Delete Message History (v1.10+)
|
||||
|
||||
You can clear all stored messages for any individual channel or the DM inbox without removing the channel itself.
|
||||
|
||||
From the home screen, press **M** to open the channel messages screen, then **A** or **D** to open the channel picker. Navigate to the channel you want to clear and press **X**. A confirmation overlay appears asking "Delete message history?" -- press **Enter** to confirm or **Q** to cancel.
|
||||
|
||||
On the T5S3, long-press the channel in the channel picker to bring up the same confirmation. Tap to confirm or press the Boot button to cancel.
|
||||
|
||||
Messages are invalidated in the circular buffer and the change is saved to SD immediately. The unread counter is also reset. New messages will continue to appear as they arrive.
|
||||
|
||||
### Per-Channel Notification Preferences (v1.10+)
|
||||
|
||||
Each channel (and the DM inbox) can be individually set to one of three notification levels:
|
||||
|
||||
- **All** -- notify on every message (default)
|
||||
- **@ (Mentions)** -- only notify when someone tags you with @YourNodeName or @[YourNodeName]
|
||||
- **Off** -- completely muted (no buzzer, no keyboard flash, no screen wake, no toast)
|
||||
|
||||
Messages are always stored in history regardless of the notification setting -- only the alerts and unread badges are suppressed.
|
||||
|
||||
To change a channel's notification preference: from the home screen, press **S** to open settings, scroll down to the **Channels >>** section and open it. Navigate to the channel you want to configure, and press **N** to cycle through the three modes. The current setting is shown in the channel row hint as `N:All`, `N:@`, or `N:Off`.
|
||||
|
||||
### Custom Notification Tones (v1.10+)
|
||||
|
||||
Each channel can have its own notification tone instead of the default buzzer sound. When a message arrives on a channel with a custom tone assigned, that tone plays through the speaker instead of the RTTTL buzzer.
|
||||
|
||||
To assign a tone: from the home screen, press **S** to open settings, scroll down to the **Channels >>** section and open it. Navigate to the channel you want, and press **T**. The tone picker appears with a list of available sounds. Use **W/S** to browse, **Enter** to select, or **Q** to cancel. Select "Default (silent)" to remove a custom tone and revert to the standard buzzer.
|
||||
|
||||
**Audio variant (PCM5102A DAC):** A selection of bundled tones are copied to the `/alarms/` folder on the SD card on first boot. You can also add your own MP3 files to that folder -- they'll appear in the tone picker alongside the bundled options. This gives you complete flexibility to use any short MP3 as a notification sound.
|
||||
|
||||
**4G variant (A7682E modem):** Seven bundled notification tones are embedded in the firmware as 8kHz mono WAV files and transferred to the modem's internal filesystem on boot. Playback goes through the modem's own speaker amplifier via AT+CCMXPLAY. Custom user-supplied tones are not supported on the 4G variant -- only the bundled set is available.
|
||||
|
||||
**Available bundled tones:** Bell, Ding, High Trill, Low Soft Ding (x2), Mid Trill, and Soft Notif. All are short, 1-2 second alert sounds.
|
||||
|
||||
### Games (v1.10+)
|
||||
|
||||
Press **J** from the home screen to open the games menu. Two classic games are included:
|
||||
|
||||
**Snake** -- the Nokia classic. Guide the snake around the screen to eat food and grow longer without crashing into the walls or your own tail. The game runs on the e-ink display at a pace suited to the refresh rate.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W | Turn up |
|
||||
| A | Turn left |
|
||||
| S | Turn down |
|
||||
| D | Turn right |
|
||||
| Q | Quit to games menu |
|
||||
|
||||
**Minesweeper** -- clear the board without hitting a mine. Numbers reveal how many adjacent cells contain mines. Flag cells you suspect are mines to keep track.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| W / A / S / D | Move cursor |
|
||||
| Enter | Reveal cell |
|
||||
| F | Toggle flag on cell |
|
||||
| Q | Quit to games menu |
|
||||
|
||||
### 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.
|
||||
@@ -556,7 +402,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) |
|
||||
|
||||
@@ -575,10 +420,8 @@ 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) |
|
||||
@@ -597,15 +440,7 @@ Press **S** from the home screen to open settings. On first boot (when the devic
|
||||
|
||||
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). The hint line for each channel shows its current notification preference (`N:All`, `N:@`, or `N:Off`) and available actions.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| Enter | Edit channel region scope |
|
||||
| N | Cycle notification preference (All / Mentions / Off) -- see [Per-Channel Notification Preferences](#per-channel-notification-preferences-v110) |
|
||||
| T | Open notification tone picker (audio and 4G variants) -- see [Custom Notification Tones](#custom-notification-tones-v110) |
|
||||
| X | Delete channel (non-primary channels only) |
|
||||
| Q | Back to top-level settings |
|
||||
**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.
|
||||
|
||||
@@ -615,16 +450,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 |
|
||||
@@ -661,7 +486,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 emoji is displayed in a 5-column layout.
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
@@ -775,10 +600,6 @@ 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)
|
||||
@@ -900,7 +721,7 @@ 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.
|
||||
- **Emoji picker** — tap the **$** key to open a scrollable grid of emoji sprites. Tap an emoji to insert it inline in your message. Tap **Back** to return to the keyboard.
|
||||
- Inline emoji rendering — emoji appear as pixel sprites in the text field as you type
|
||||
- Phantom keystroke prevention (a brief cooldown after the keyboard opens prevents accidental taps)
|
||||
|
||||
@@ -914,13 +735,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.
|
||||
@@ -960,7 +780,7 @@ 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 |
|
||||
@@ -1159,7 +979,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, LilyGo T5S3 E-Paper Pro, Heltec V3 (remote repeater only), and Heltec V4 (remote repeater only).
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -1203,26 +1023,11 @@ There are a number of fairly major features in the pipeline, with no particular
|
||||
- [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] Per-channel message history deletion (v1.10)
|
||||
- [X] Per-channel notification preferences with @mention support (v1.10)
|
||||
- [X] Custom notification tones per channel -- audio variant (MP3) and 4G variant (WAV via modem) (v1.10)
|
||||
- [X] Games menu with Snake and Minesweeper (v1.10)
|
||||
- [X] MAX_GROUP_CHANNELS expanded to 40 for all builds (v1.10)
|
||||
- [ ] Fix M4B rendering to enable chaptered audiobook playback
|
||||
- [ ] Better JPEG and PNG decoding
|
||||
- [ ] Improve EPUB rendering and EPUB format handling
|
||||
- [ ] Incoming call ringer silence (hardware limitation -- A7682E drives speaker autonomously on RING, no software mute path available)
|
||||
- [ ] Figure out a way to silence the ringtone
|
||||
- [ ] Figure out a way to customise the ringtone
|
||||
|
||||
**T5S3 E-Paper Pro:**
|
||||
- [X] Core port: display, touch input, LoRa, battery, RTC
|
||||
@@ -1247,12 +1052,6 @@ There are a number of fairly major features in the pipeline, with no particular
|
||||
- [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:**
|
||||
@@ -1263,48 +1062,36 @@ There are a number of fairly major features in the pipeline, with no particular
|
||||
- [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-Deck Pro MAX — ESP32-S3 with XL9555 I/O expander, combined 4G (A7682E) + audio (ES8311), working e-ink front-light, 1500 mAh battery. LoRa mesh, keyboard, display, GPS, touch, SD card all working. Modem and ES8311 audio integration pending hardware validation.
|
||||
- [ ] 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 |
|
||||
| [PubSubClient](https://github.com/knolleary/pubsubclient) | MIT | Nick O'Leary |
|
||||
| [Codec2](https://github.com/sh123/esp32_codec2_arduino) | LGPL-2.1 | sh123 (ESP32 port) |
|
||||
|
||||
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:
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"frameworks": ["arduino"],
|
||||
"name": "Heltec nrf (Adafruit BSP)",
|
||||
"upload": {
|
||||
"maximum_ram_size": 248832,
|
||||
"maximum_ram_size": 235520,
|
||||
"maximum_size": 815104,
|
||||
"speed": 115200,
|
||||
"protocol": "nrfutil",
|
||||
|
||||
@@ -5,29 +5,26 @@
|
||||
},
|
||||
"core": "nRF5",
|
||||
"cpu": "cortex-m4",
|
||||
"extra_flags": "-DNRF52840_XXAA",
|
||||
"f_cpu": "64000000L",
|
||||
"hwids": [
|
||||
["0x239A", "0x8029"]
|
||||
"extra_flags": [
|
||||
"-DARDUINO_NRF52840_TECHO_CARD",
|
||||
"-DNRF52840_XXAA",
|
||||
"-DNRF52_SERIES"
|
||||
],
|
||||
"usb_product": "T-Echo Card",
|
||||
"f_cpu": "64000000L",
|
||||
"hwids": [["0x239A", "0x8029"]],
|
||||
"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"
|
||||
}
|
||||
"usb_product": "T-Echo Card"
|
||||
},
|
||||
"connectivity": ["bluetooth"],
|
||||
"connectivity": ["bluetooth", "lora"],
|
||||
"debug": {
|
||||
"jlink_device": "nRF52840_xxAA",
|
||||
"openocd_target": "nrf52840"
|
||||
@@ -35,16 +32,17 @@
|
||||
"frameworks": ["arduino"],
|
||||
"name": "LilyGo T-Echo Card (nRF52840, SX1262, 4MB Flash)",
|
||||
"upload": {
|
||||
"flash_size": "796KB",
|
||||
"maximum_ram_size": 248832,
|
||||
"maximum_size": 815104,
|
||||
"speed": 115200,
|
||||
"native_usb": true,
|
||||
"protocol": "nrfutil",
|
||||
"protocols": ["nrfutil", "jlink", "cmsis-dap"],
|
||||
"native_usb": true,
|
||||
"use_1200bps_touch": true,
|
||||
"require_upload_port": true,
|
||||
"speed": 115200,
|
||||
"use_1200bps_touch": true,
|
||||
"wait_for_upload_port": true
|
||||
},
|
||||
"url": "https://github.com/Xinyuan-LilyGO/T-Echo-Card",
|
||||
"vendor": "LILYGO"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {}
|
||||
};
|
||||
@@ -2,7 +2,7 @@
|
||||
#include "DataStore.h"
|
||||
|
||||
#if defined(EXTRAFS) || defined(QSPIFLASH)
|
||||
#define MAX_BLOBRECS 100
|
||||
#define MAX_BLOBRECS 1000
|
||||
#else
|
||||
#define MAX_BLOBRECS 20
|
||||
#endif
|
||||
@@ -280,31 +280,14 @@ 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));
|
||||
}
|
||||
if (file.read((uint8_t *)_prefs.channel_notif, sizeof(_prefs.channel_notif)) != sizeof(_prefs.channel_notif)) {
|
||||
memset(_prefs.channel_notif, 0, sizeof(_prefs.channel_notif)); // default: NOTIF_ALL
|
||||
}
|
||||
|
||||
// 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;
|
||||
// Clamp channel notification preferences to valid range
|
||||
for (int i = 0; i < (int)sizeof(_prefs.channel_notif); i++) {
|
||||
if (_prefs.channel_notif[i] > 2) _prefs.channel_notif[i] = 0;
|
||||
}
|
||||
// auto_lock_minutes: only accept known options (0, 2, 5, 10, 15, 30)
|
||||
{
|
||||
uint8_t alm = _prefs.auto_lock_minutes;
|
||||
@@ -361,10 +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.write((uint8_t *)_prefs.channel_notif, sizeof(_prefs.channel_notif)); // 153
|
||||
|
||||
file.close();
|
||||
}
|
||||
@@ -451,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");
|
||||
@@ -525,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();
|
||||
@@ -534,33 +482,38 @@ 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
|
||||
|
||||
FILESYSTEM* fs = _getContactsChannelsFS();
|
||||
_saveFile = openWrite(fs, "/contacts3.tmp");
|
||||
if (!_saveFile) {
|
||||
// Defensive cleanup in case a previous save didn't reach finishSaveContacts()
|
||||
if (_saveFile) {
|
||||
_saveFile->close();
|
||||
delete _saveFile;
|
||||
_saveFile = nullptr;
|
||||
}
|
||||
_saveFile = new File(openWrite(fs, "/contacts3.tmp"));
|
||||
if (!_saveFile || !*_saveFile) {
|
||||
Serial.println("DataStore: chunked save FAILED — cannot open tmp file");
|
||||
if (_saveFile) { delete _saveFile; _saveFile = nullptr; }
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -581,18 +534,18 @@ bool DataStore::saveContactsChunk(int batchSize) {
|
||||
int written = 0;
|
||||
|
||||
while (written < batchSize && _saveHost->getContactForSave(_saveIdx, c)) {
|
||||
bool success = (_saveFile.write(c.id.pub_key, 32) == 32);
|
||||
success = success && (_saveFile.write((uint8_t *)&c.name, 32) == 32);
|
||||
success = success && (_saveFile.write(&c.type, 1) == 1);
|
||||
success = success && (_saveFile.write(&c.flags, 1) == 1);
|
||||
success = success && (_saveFile.write(&unused, 1) == 1);
|
||||
success = success && (_saveFile.write((uint8_t *)&c.sync_since, 4) == 4);
|
||||
success = success && (_saveFile.write((uint8_t *)&c.out_path_len, 1) == 1);
|
||||
success = success && (_saveFile.write((uint8_t *)&c.last_advert_timestamp, 4) == 4);
|
||||
success = success && (_saveFile.write(c.out_path, 64) == 64);
|
||||
success = success && (_saveFile.write((uint8_t *)&c.lastmod, 4) == 4);
|
||||
success = success && (_saveFile.write((uint8_t *)&c.gps_lat, 4) == 4);
|
||||
success = success && (_saveFile.write((uint8_t *)&c.gps_lon, 4) == 4);
|
||||
bool success = (_saveFile->write(c.id.pub_key, 32) == 32);
|
||||
success = success && (_saveFile->write((uint8_t *)&c.name, 32) == 32);
|
||||
success = success && (_saveFile->write(&c.type, 1) == 1);
|
||||
success = success && (_saveFile->write(&c.flags, 1) == 1);
|
||||
success = success && (_saveFile->write(&unused, 1) == 1);
|
||||
success = success && (_saveFile->write((uint8_t *)&c.sync_since, 4) == 4);
|
||||
success = success && (_saveFile->write((uint8_t *)&c.out_path_len, 1) == 1);
|
||||
success = success && (_saveFile->write((uint8_t *)&c.last_advert_timestamp, 4) == 4);
|
||||
success = success && (_saveFile->write(c.out_path, 64) == 64);
|
||||
success = success && (_saveFile->write((uint8_t *)&c.lastmod, 4) == 4);
|
||||
success = success && (_saveFile->write((uint8_t *)&c.gps_lat, 4) == 4);
|
||||
success = success && (_saveFile->write((uint8_t *)&c.gps_lon, 4) == 4);
|
||||
|
||||
if (!success) {
|
||||
_saveWriteOk = false;
|
||||
@@ -616,7 +569,11 @@ bool DataStore::saveContactsChunk(int batchSize) {
|
||||
void DataStore::finishSaveContacts() {
|
||||
if (!_saveInProgress) return;
|
||||
|
||||
_saveFile.close();
|
||||
if (_saveFile) {
|
||||
_saveFile->close();
|
||||
delete _saveFile;
|
||||
_saveFile = nullptr;
|
||||
}
|
||||
_saveInProgress = false;
|
||||
|
||||
FILESYSTEM* fs = _getContactsChannelsFS();
|
||||
@@ -644,7 +601,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();
|
||||
@@ -746,16 +702,27 @@ struct BlobRec {
|
||||
};
|
||||
|
||||
void DataStore::checkAdvBlobFile() {
|
||||
if (!_getContactsChannelsFS()->exists("/adv_blobs")) {
|
||||
File file = openWrite(_getContactsChannelsFS(), "/adv_blobs");
|
||||
if (file) {
|
||||
BlobRec zeroes;
|
||||
memset(&zeroes, 0, sizeof(zeroes));
|
||||
for (int i = 0; i < MAX_BLOBRECS; i++) { // pre-allocate to fixed size
|
||||
file.write((uint8_t *) &zeroes, sizeof(zeroes));
|
||||
}
|
||||
file.close();
|
||||
FILESYSTEM* fs = _getContactsChannelsFS();
|
||||
size_t expectedSize = (size_t)MAX_BLOBRECS * sizeof(BlobRec);
|
||||
|
||||
if (fs->exists("/adv_blobs")) {
|
||||
File existing = openRead(fs, "/adv_blobs");
|
||||
size_t actualSize = existing ? (size_t)existing.size() : 0;
|
||||
if (existing) existing.close();
|
||||
if (actualSize == expectedSize) return; // already correct size
|
||||
Serial.printf("[DataStore] adv_blobs wrong size (%u vs %u) — recreating\n",
|
||||
(unsigned)actualSize, (unsigned)expectedSize);
|
||||
fs->remove("/adv_blobs"); // delete undersized (or oversized) file
|
||||
}
|
||||
|
||||
File file = openWrite(fs, "/adv_blobs");
|
||||
if (file) {
|
||||
BlobRec zeroes;
|
||||
memset(&zeroes, 0, sizeof(zeroes));
|
||||
for (int i = 0; i < MAX_BLOBRECS; i++) {
|
||||
file.write((uint8_t *) &zeroes, sizeof(zeroes));
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -928,10 +895,14 @@ uint8_t DataStore::getBlobByKey(const uint8_t key[], int key_len, uint8_t dest_b
|
||||
|
||||
if (key_len > 8) key_len = 8; // just use first 8 bytes (prefix)
|
||||
mesh::Utils::toHex(fname, key, key_len);
|
||||
// Prefer SD card (_fsExtra) — unlimited file count vs SPIFFS ~100-200 file limit.
|
||||
// Fall back to SPIFFS (_fs) for devices without SD.
|
||||
FILESYSTEM* blobFs = (_fsExtra != nullptr) ? _fsExtra : _fs;
|
||||
|
||||
sprintf(path, "/bl/%s", fname);
|
||||
|
||||
if (_fs->exists(path)) {
|
||||
File f = openRead(_fs, path);
|
||||
if (blobFs->exists(path)) {
|
||||
File f = openRead(blobFs, path);
|
||||
if (f) {
|
||||
int len = f.read(dest_buf, 255); // currently MAX 255 byte blob len supported!!
|
||||
f.close();
|
||||
@@ -947,15 +918,20 @@ bool DataStore::putBlobByKey(const uint8_t key[], int key_len, const uint8_t src
|
||||
|
||||
if (key_len > 8) key_len = 8; // just use first 8 bytes (prefix)
|
||||
mesh::Utils::toHex(fname, key, key_len);
|
||||
// Prefer SD card (_fsExtra) — unlimited file count vs SPIFFS ~100-200 file limit.
|
||||
FILESYSTEM* blobFs = (_fsExtra != nullptr) ? _fsExtra : _fs;
|
||||
|
||||
blobFs->mkdir("/bl"); // ensure directory exists on chosen filesystem
|
||||
|
||||
sprintf(path, "/bl/%s", fname);
|
||||
|
||||
File f = openWrite(_fs, path);
|
||||
File f = openWrite(blobFs, path);
|
||||
if (f) {
|
||||
int n = f.write(src_buf, len);
|
||||
f.close();
|
||||
if (n == len) return true; // success!
|
||||
|
||||
_fs->remove(path); // blob was only partially written!
|
||||
blobFs->remove(path); // blob was only partially written!
|
||||
}
|
||||
return false; // error
|
||||
}
|
||||
|
||||
@@ -24,15 +24,16 @@ class DataStore {
|
||||
void checkAdvBlobFile();
|
||||
#endif
|
||||
|
||||
#if !defined(NRF52_PLATFORM) && !defined(STM32_PLATFORM)
|
||||
// Chunked save state (ESP32 with SD card only)
|
||||
File _saveFile;
|
||||
// Chunked save state
|
||||
// Stored as a pointer (allocated in beginSaveContacts, freed in
|
||||
// finishSaveContacts) because Adafruit_LittleFS::File has no default
|
||||
// constructor — we can't keep one as a default-initialized value member.
|
||||
File* _saveFile = nullptr;
|
||||
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 +48,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();
|
||||
|
||||
+118
-351
@@ -12,6 +12,13 @@
|
||||
#include "ModemManager.h" // Serial CLI modem commands
|
||||
#endif
|
||||
|
||||
// Fallback for variants that don't define GPS_BAUDRATE (HAS_GPS=0 boards like
|
||||
// Heltec Meshpocket). Used in CLI "get/set gps.baud" handlers as the default
|
||||
// when node prefs haven't been configured. Zero means "not applicable".
|
||||
#ifndef GPS_BAUDRATE
|
||||
#define GPS_BAUDRATE 0
|
||||
#endif
|
||||
|
||||
#define CMD_APP_START 1
|
||||
#define CMD_SEND_TXT_MSG 2
|
||||
#define CMD_SEND_CHANNEL_TXT_MSG 3
|
||||
@@ -59,7 +66,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 +77,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 +109,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 +155,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;
|
||||
@@ -578,24 +574,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 +599,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 +1249,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 {
|
||||
@@ -1350,17 +1301,34 @@ MyMesh::MyMesh(mesh::Radio &radio, mesh::RNG &rng, mesh::RTCClock &rtc, SimpleMe
|
||||
}
|
||||
|
||||
void MyMesh::begin(bool has_display) {
|
||||
#if defined(ESP32)
|
||||
// ESP32 variants have PSRAM — allocate the large advert path table there
|
||||
advert_paths = (AdvertPath*)ps_calloc(ADVERT_PATH_TABLE_SIZE, sizeof(AdvertPath));
|
||||
#else
|
||||
// nRF52 / other non-PSRAM platforms — fall back to regular heap. Table size
|
||||
// is smaller on these platforms (see ADVERT_PATH_TABLE_SIZE in MyMesh.h) to
|
||||
// avoid blowing the limited SRAM budget.
|
||||
advert_paths = (AdvertPath*)calloc(ADVERT_PATH_TABLE_SIZE, sizeof(AdvertPath));
|
||||
#endif
|
||||
BaseChatMesh::begin();
|
||||
|
||||
if (!_store->loadMainIdentity(self_id)) {
|
||||
Serial.println("[ID] loadMainIdentity FAILED — generating new identity");
|
||||
self_id = radio_new_identity(); // create new random identity
|
||||
int count = 0;
|
||||
while (count < 10 && (self_id.pub_key[0] == 0x00 || self_id.pub_key[0] == 0xFF)) { // reserved id hashes
|
||||
self_id = radio_new_identity();
|
||||
count++;
|
||||
}
|
||||
_store->saveMainIdentity(self_id);
|
||||
bool ok = _store->saveMainIdentity(self_id);
|
||||
Serial.printf("[ID] saveMainIdentity returned %d\n", ok ? 1 : 0);
|
||||
} else {
|
||||
Serial.println("[ID] loadMainIdentity OK — using persisted identity");
|
||||
}
|
||||
{
|
||||
char hex[10];
|
||||
mesh::Utils::toHex(hex, self_id.pub_key, 4);
|
||||
Serial.printf("[ID] pub_key[0..3] = %s\n", hex);
|
||||
}
|
||||
|
||||
// if name is provided as a build flag, use that as default node name instead
|
||||
@@ -1459,6 +1427,7 @@ void MyMesh::startInterface(BaseSerialInterface &serial) {
|
||||
}
|
||||
|
||||
void MyMesh::handleCmdFrame(size_t len) {
|
||||
Serial.printf("[CMD] rx opcode=0x%02X len=%d\n", cmd_frame[0], (int)len);
|
||||
if (cmd_frame[0] == CMD_DEVICE_QEURY && len >= 2) { // sent when app establishes connection
|
||||
app_target_ver = cmd_frame[1]; // which version of protocol does app understand
|
||||
|
||||
@@ -1485,11 +1454,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 +1615,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 {
|
||||
@@ -1777,12 +1730,19 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
}
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_IMPORT_CONTACT && len > 2 + 32 + 64) {
|
||||
Serial.printf("[IMP] CMD_IMPORT_CONTACT received, len=%d\n", len);
|
||||
if (importContact(&cmd_frame[1], len - 1)) {
|
||||
Serial.println("[IMP] importContact OK, scheduling dirty flush");
|
||||
dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY);
|
||||
writeOKFrame();
|
||||
} else {
|
||||
Serial.println("[IMP] importContact REJECTED by BaseChatMesh");
|
||||
writeErrFrame(ERR_CODE_ILLEGAL_ARG);
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_IMPORT_CONTACT) {
|
||||
Serial.printf("[IMP] CMD_IMPORT_CONTACT dropped — len=%d too short (need >%d)\n",
|
||||
len, 2 + 32 + 64);
|
||||
writeErrFrame(ERR_CODE_ILLEGAL_ARG);
|
||||
} else if (cmd_frame[0] == CMD_SYNC_NEXT_MESSAGE) {
|
||||
int out_len;
|
||||
if ((out_len = getFromOfflineQueue(out_frame)) > 0) {
|
||||
@@ -1790,12 +1750,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 {
|
||||
@@ -1908,23 +1879,29 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
writeDisabledFrame();
|
||||
#endif
|
||||
} else if (cmd_frame[0] == CMD_IMPORT_PRIVATE_KEY && len >= 65) {
|
||||
Serial.printf("[PK] CMD_IMPORT_PRIVATE_KEY received, len=%d\n", (int)len);
|
||||
#if ENABLE_PRIVATE_KEY_IMPORT
|
||||
if (!mesh::LocalIdentity::validatePrivateKey(&cmd_frame[1])) {
|
||||
Serial.println("[PK] validatePrivateKey FAILED — key bytes rejected");
|
||||
writeErrFrame(ERR_CODE_ILLEGAL_ARG); // invalid key
|
||||
} else {
|
||||
Serial.println("[PK] validatePrivateKey OK — attempting save");
|
||||
mesh::LocalIdentity identity;
|
||||
identity.readFrom(&cmd_frame[1], 64);
|
||||
if (_store->saveMainIdentity(identity)) {
|
||||
Serial.println("[PK] saveMainIdentity OK");
|
||||
self_id = identity;
|
||||
writeOKFrame();
|
||||
// re-load contacts, to invalidate ecdh shared_secrets
|
||||
resetContacts();
|
||||
_store->loadContacts(this);
|
||||
} else {
|
||||
Serial.println("[PK] saveMainIdentity FAILED");
|
||||
writeErrFrame(ERR_CODE_FILE_IO_ERROR);
|
||||
}
|
||||
}
|
||||
#else
|
||||
Serial.println("[PK] ENABLE_PRIVATE_KEY_IMPORT not defined — responding DISABLED");
|
||||
writeDisabledFrame();
|
||||
#endif
|
||||
} else if (cmd_frame[0] == CMD_SEND_RAW_DATA && len >= 6) {
|
||||
@@ -2119,22 +2096,21 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
writeErrFrame(ERR_CODE_NOT_FOUND);
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_SET_CHANNEL && len >= 2 + 32 + 32) {
|
||||
Serial.printf("[CH] CMD_SET_CHANNEL 256-bit secret not supported (len=%d)\n", len);
|
||||
writeErrFrame(ERR_CODE_UNSUPPORTED_CMD); // not supported (yet)
|
||||
} else if (cmd_frame[0] == CMD_SET_CHANNEL && len >= 2 + 32 + 16) {
|
||||
uint8_t channel_idx = cmd_frame[1];
|
||||
Serial.printf("[CH] CMD_SET_CHANNEL idx=%d len=%d\n", channel_idx, len);
|
||||
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
|
||||
if (setChannel(channel_idx, channel)) {
|
||||
Serial.println("[CH] setChannel OK, calling saveChannels");
|
||||
saveChannels();
|
||||
writeOKFrame();
|
||||
} else {
|
||||
Serial.printf("[CH] setChannel REJECTED (bad idx=%d)\n", channel_idx);
|
||||
writeErrFrame(ERR_CODE_NOT_FOUND); // bad channel_idx
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_SIGN_START) {
|
||||
@@ -2181,9 +2157,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 +2314,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) {
|
||||
@@ -2398,6 +2340,8 @@ void MyMesh::handleCmdFrame(size_t len) {
|
||||
_serial->writeFrame(out_frame, i);
|
||||
} else {
|
||||
writeErrFrame(ERR_CODE_UNSUPPORTED_CMD);
|
||||
Serial.printf("[CMD] UNKNOWN opcode=0x%02X len=%d — responded UNSUPPORTED\n",
|
||||
cmd_frame[0], (int)len);
|
||||
MESH_DEBUG_PRINTLN("ERROR: unknown command: %02X", cmd_frame[0]);
|
||||
}
|
||||
}
|
||||
@@ -2479,26 +2423,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 +2437,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 +2484,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 +2518,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 +2912,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 +2936,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 +2946,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 +3016,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:");
|
||||
@@ -3479,33 +3230,33 @@ 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) {
|
||||
if (_deferSaves) {
|
||||
// Voice session receiving — push save forward to avoid SPI contention
|
||||
dirty_contacts_expiry = futureMillis(2000);
|
||||
} else {
|
||||
#ifdef HELTEC_MESH_POCKET
|
||||
// Meshpocket: use upstream-style synchronous save. Max 500 contacts =
|
||||
// ~74KB, finishes in well under a second on InternalFS. Avoids the
|
||||
// chunked trio's File* lifetime pitfalls entirely.
|
||||
Serial.println("[DS] saveContacts (synchronous) triggered by dirty flag");
|
||||
_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
|
||||
dirty_contacts_expiry = futureMillis(2000);
|
||||
} else if (!_store->isSaveInProgress()) {
|
||||
_store->beginSaveContacts(this);
|
||||
dirty_contacts_expiry = 0;
|
||||
}
|
||||
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) {
|
||||
#ifndef HELTEC_MESH_POCKET
|
||||
// Drive chunked contact save — write a batch each loop iteration.
|
||||
// Only used for non-Meshpocket builds (ESP32 PSRAM heavyweight).
|
||||
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
|
||||
@@ -3593,4 +3344,20 @@ bool MyMesh::addDiscoveredToContacts(int idx) {
|
||||
}
|
||||
MESH_DEBUG_PRINTLN("Discovery: no cached advert blob for contact '%s'", _discovered[idx].contact.name);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#ifdef HELTEC_MESH_POCKET
|
||||
// =============================================================================
|
||||
// Power saving — adapted from MeshCore PR #2286 (IoTThinks)
|
||||
// Returns true if the radio has outbound packets queued (any priority, any
|
||||
// scheduling window). main.cpp loop() uses this to decide whether it's safe
|
||||
// to drop into board.sleep(0) until the next interrupt.
|
||||
//
|
||||
// Upstream uses _mgr->getOutboundTotal() which doesn't exist in this tree —
|
||||
// the equivalent call in Meck is getOutboundCount(0xFFFFFFFF) which passes
|
||||
// max uint32 as `now` so scheduled_for < now is always true. Already used
|
||||
// elsewhere in this file (see line ~2221 in the queue-stats block).
|
||||
// =============================================================================
|
||||
bool MyMesh::hasPendingWork() const {
|
||||
return _mgr->getOutboundCount(0xFFFFFFFF) > 0;
|
||||
}
|
||||
#endif
|
||||
@@ -8,11 +8,11 @@
|
||||
#define FIRMWARE_VER_CODE 11
|
||||
|
||||
#ifndef FIRMWARE_BUILD_DATE
|
||||
#define FIRMWARE_BUILD_DATE "15 May 2026"
|
||||
#define FIRMWARE_BUILD_DATE "16 April 2026"
|
||||
#endif
|
||||
|
||||
#ifndef FIRMWARE_VERSION
|
||||
#define FIRMWARE_VERSION "Meck v1.10"
|
||||
#define FIRMWARE_VERSION "Meck v1.7"
|
||||
#endif
|
||||
|
||||
#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
|
||||
@@ -160,10 +160,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,12 +171,13 @@ 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);
|
||||
#ifdef HELTEC_MESH_POCKET
|
||||
// Power saving: check if there is pending work (outbound packets queued, etc.)
|
||||
// Used by main.cpp loop to decide whether board.sleep() is safe.
|
||||
// Adapted from MeshCore PR #2286 (IoTThinks) — substitutes getOutboundCount(0xFFFFFFFF)
|
||||
// for upstream's getOutboundTotal() which doesn't exist in this tree.
|
||||
bool hasPendingWork() const;
|
||||
#endif
|
||||
|
||||
|
||||
protected:
|
||||
@@ -199,7 +196,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;
|
||||
@@ -278,7 +274,6 @@ private:
|
||||
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 +317,17 @@ 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
|
||||
// Advert path table: stores paths we've heard back to us for sorting/recency.
|
||||
// ESP32 variants (T-Deck Pro, T5S3, Heltec V4) have PSRAM, so can afford the
|
||||
// large 1000-entry table (~50KB). nRF52 companion builds (Heltec Meshpocket,
|
||||
// T-Echo Card) have no PSRAM and only 256KB total SRAM shared with BLE, so
|
||||
// use a much smaller table sized for realistic handheld usage.
|
||||
#if defined(ESP32)
|
||||
#define ADVERT_PATH_TABLE_SIZE 1000
|
||||
#else
|
||||
#define ADVERT_PATH_TABLE_SIZE 50
|
||||
#endif
|
||||
AdvertPath* advert_paths; // PSRAM-allocated (ESP32) or heap-allocated (nRF52) in begin()
|
||||
|
||||
// Sent message repeat tracking
|
||||
#define SENT_TRACK_SIZE 4
|
||||
|
||||
@@ -8,11 +8,6 @@
|
||||
#define ADVERT_LOC_NONE 0
|
||||
#define ADVERT_LOC_SHARE 1
|
||||
|
||||
// Per-channel notification preferences (stored in channel_notif[])
|
||||
#define NOTIF_ALL 0 // Notify on all messages (default)
|
||||
#define NOTIF_MENTIONS 1 // Notify only when @nodename appears in message
|
||||
#define NOTIF_NONE 2 // No notifications (muted)
|
||||
|
||||
struct NodePrefs { // persisted to file
|
||||
float airtime_factor;
|
||||
char node_name[32];
|
||||
@@ -45,28 +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
|
||||
|
||||
// --- Per-channel notification preferences ---
|
||||
// Index 0..MAX_GROUP_CHANNELS-1 for group channels, index MAX_GROUP_CHANNELS for DMs.
|
||||
// Values: NOTIF_ALL (0), NOTIF_MENTIONS (1), NOTIF_NONE (2).
|
||||
// Defaults to NOTIF_ALL for all channels.
|
||||
uint8_t channel_notif[21]; // 20 group channels + 1 DM slot
|
||||
|
||||
// --- 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 {
|
||||
@@ -75,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)
|
||||
@@ -89,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
|
||||
}
|
||||
|
||||
+150
-1138
File diff suppressed because it is too large
Load Diff
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
|
||||
@@ -148,10 +143,8 @@ public:
|
||||
|
||||
// Add a new message to the history
|
||||
// peer_name: for DMs, the contact this message belongs to (sender for received, recipient for sent)
|
||||
// suppressUnread: if true, do not increment the unread counter for this message
|
||||
void addMessage(uint8_t channel_idx, uint8_t path_len, const char* sender, const char* text,
|
||||
const uint8_t* path_bytes = nullptr, int8_t snr = 0, const char* peer_name = nullptr,
|
||||
bool suppressUnread = false) {
|
||||
const uint8_t* path_bytes = nullptr, int8_t snr = 0, const char* peer_name = nullptr) {
|
||||
// Move to next slot in circular buffer
|
||||
_newestIdx = (_newestIdx + 1) % CHANNEL_MSG_HISTORY_SIZE;
|
||||
|
||||
@@ -193,9 +186,8 @@ public:
|
||||
_replySelectPos = -1;
|
||||
|
||||
// Track unread count for this channel (only for received messages, not sent)
|
||||
// path_len == 0 means locally sent.
|
||||
// suppressUnread: per-channel notification preference says not to count this message.
|
||||
if (path_len != 0 && !suppressUnread) {
|
||||
// path_len == 0 means locally sent
|
||||
if (path_len != 0) {
|
||||
int unreadSlot = (channel_idx == 0xFF) ? MAX_GROUP_CHANNELS : channel_idx;
|
||||
if (unreadSlot >= 0 && unreadSlot <= MAX_GROUP_CHANNELS) {
|
||||
_unread[unreadSlot]++;
|
||||
@@ -340,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;
|
||||
@@ -400,42 +387,6 @@ public:
|
||||
return pos;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// Per-channel history deletion
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
// Clear all stored messages for a specific channel (or all DMs if 0xFF).
|
||||
// Invalidates matching slots in the circular buffer and persists to SD.
|
||||
// Does NOT alter _newestIdx -- gaps are naturally overwritten as new
|
||||
// messages arrive.
|
||||
int clearHistoryForChannel(uint8_t channel_idx) {
|
||||
int cleared = 0;
|
||||
for (int i = 0; i < CHANNEL_MSG_HISTORY_SIZE; i++) {
|
||||
if (_messages[i].valid && _messages[i].channel_idx == channel_idx) {
|
||||
_messages[i].valid = false;
|
||||
cleared++;
|
||||
}
|
||||
}
|
||||
if (cleared > 0) {
|
||||
// Reset unread counter for the cleared channel
|
||||
markChannelRead(channel_idx);
|
||||
// Reset scroll if we're viewing the cleared channel
|
||||
if (_viewChannelIdx == channel_idx) {
|
||||
_scrollPos = 0;
|
||||
}
|
||||
// Reset DM inbox state if clearing DMs
|
||||
if (channel_idx == 0xFF) {
|
||||
_dmInboxScroll = 0;
|
||||
_dmFilterName[0] = '\0';
|
||||
_dmInboxMode = true;
|
||||
}
|
||||
saveToSD();
|
||||
Serial.printf("ChannelScreen: Cleared %d messages for channel %d\n",
|
||||
cleared, (int)channel_idx);
|
||||
}
|
||||
return cleared;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// SD card persistence
|
||||
// -----------------------------------------------------------------------
|
||||
@@ -474,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));
|
||||
@@ -542,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++;
|
||||
@@ -779,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");
|
||||
@@ -1021,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);
|
||||
@@ -1277,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--) {
|
||||
@@ -1298,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;
|
||||
@@ -1333,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++;
|
||||
@@ -1498,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,548 +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.
|
||||
//
|
||||
// Delete history:
|
||||
// Press X on a highlighted channel to enter delete confirmation mode.
|
||||
// Confirmation overlay asks the user to press Enter to confirm or Q to
|
||||
// cancel. On confirm, all messages for that channel are invalidated in
|
||||
// the circular buffer and persisted to SD.
|
||||
//
|
||||
// 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;
|
||||
|
||||
// Delete confirmation sub-menu
|
||||
bool _confirmDelete; // True when showing "Delete history?" overlay
|
||||
|
||||
// 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),
|
||||
_confirmDelete(false),
|
||||
_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;
|
||||
_confirmDelete = false;
|
||||
_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
|
||||
|
||||
// =================================================================
|
||||
// Delete confirmation overlay
|
||||
// Drawn on top of the list when _confirmDelete is active.
|
||||
// =================================================================
|
||||
if (_confirmDelete) {
|
||||
// Clear a centred box and draw a border
|
||||
int boxW = display.width() - 16;
|
||||
int boxH = 42;
|
||||
int boxX = 8;
|
||||
int boxY = (display.height() - boxH) / 2;
|
||||
|
||||
// Clear the box area
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
display.fillRect(boxX, boxY, boxW, boxH);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(boxX, boxY, boxW, boxH);
|
||||
display.drawRect(boxX + 1, boxY + 1, boxW - 2, boxH - 2);
|
||||
|
||||
// Channel name
|
||||
display.setTextSize(1);
|
||||
char name[32];
|
||||
getItemName(_cursor, name, sizeof(name));
|
||||
char filtered[32];
|
||||
display.translateUTF8ToBlocks(filtered, name, sizeof(filtered));
|
||||
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.drawTextEllipsized(boxX + 4, boxY + 5, boxW - 8, filtered);
|
||||
|
||||
// "Delete history?" prompt
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
const char* prompt = "Delete message history?";
|
||||
display.setCursor(boxX + 4, boxY + 17);
|
||||
display.print(prompt);
|
||||
|
||||
// Key hints
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
const char* hints = "Enter:Yes Q:Cancel";
|
||||
display.setCursor(boxX + 4, boxY + 29);
|
||||
display.print(hints);
|
||||
}
|
||||
|
||||
// === 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)
|
||||
if (_confirmDelete) {
|
||||
display.print("Tap:Yes");
|
||||
const char* rt = "Boot:Cancel";
|
||||
display.setCursor(display.width() - display.getTextWidth(rt) - 2, footerY);
|
||||
display.print(rt);
|
||||
} else {
|
||||
display.print("Tap:Open");
|
||||
const char* rt = "Hold:Del 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
|
||||
if (_confirmDelete) {
|
||||
display.print("Enter:Yes Q:Cancel");
|
||||
} 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 {
|
||||
// --- Delete confirmation mode ---
|
||||
if (_confirmDelete) {
|
||||
// Enter -- confirm deletion
|
||||
if (c == '\r' || c == 13 || c == KEY_ENTER || c == KEY_SELECT) {
|
||||
if (_channelScreen && _cursor >= 0 && _cursor < _itemCount) {
|
||||
int cleared = _channelScreen->clearHistoryForChannel(_items[_cursor]);
|
||||
char name[32];
|
||||
getItemName(_cursor, name, sizeof(name));
|
||||
Serial.printf("ChannelPicker: Deleted %d messages for '%s'\n", cleared, name);
|
||||
}
|
||||
_confirmDelete = false;
|
||||
return true;
|
||||
}
|
||||
// Q / backspace -- cancel
|
||||
if (c == 'q' || c == 'Q' || c == '\b' || c == KEY_CANCEL) {
|
||||
_confirmDelete = false;
|
||||
return true;
|
||||
}
|
||||
// Consume all other keys while confirmation is showing
|
||||
return true;
|
||||
}
|
||||
|
||||
// --- Normal picker mode ---
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
// X -- delete message history for highlighted channel
|
||||
if (c == 'x' || c == 'X') {
|
||||
if (_cursor >= 0 && _cursor < _itemCount) {
|
||||
_confirmDelete = true;
|
||||
}
|
||||
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 delete confirmation is showing:
|
||||
// T5S3: tap = confirm (return 2 → KEY_ENTER → handleInput confirms)
|
||||
// T-Deck Pro: tap = cancel (dismiss overlay, stay on picker)
|
||||
if (_confirmDelete) {
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
return 2; // Confirm — maps to KEY_ENTER in mapTouchTap
|
||||
#else
|
||||
_confirmDelete = false;
|
||||
return 1; // Cancel — redraw without activating
|
||||
#endif
|
||||
}
|
||||
|
||||
#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
|
||||
}
|
||||
};
|
||||
@@ -466,16 +466,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 +485,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
|
||||
// 76 total emoji: joy/thumbsup/frown first, then 43 original, then 19 new, then 11 newest
|
||||
|
||||
#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 76
|
||||
|
||||
// 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 0xCB // 0x80 + 75
|
||||
#define EMOJI_PAD_BYTE 0x7F // DEL, not typeable (key < 127 guard)
|
||||
|
||||
// ======== LARGE 12x12 SPRITES ========
|
||||
@@ -328,10 +328,6 @@ static const uint8_t emoji_lg_eight_spoked_asterisk[] PROGMEM = {
|
||||
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 = {
|
||||
@@ -358,7 +354,6 @@ static const uint8_t* const EMOJI_SPRITES_LG[] PROGMEM = {
|
||||
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 ========
|
||||
@@ -621,10 +616,6 @@ static const uint8_t emoji_sm_eight_spoked_asterisk[] PROGMEM = {
|
||||
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
|
||||
@@ -650,7 +641,6 @@ static const uint8_t* const EMOJI_SPRITES_SM[] PROGMEM = {
|
||||
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 ----
|
||||
@@ -736,7 +726,6 @@ static const EmojiCodepoint EMOJI_CODEPOINTS[EMOJI_COUNT] = {
|
||||
{ 0x1F6C2, 0x0000, 0xC9 }, // passport_control
|
||||
{ 0x2733, 0x0000, 0xCA }, // eight_spoked_asterisk
|
||||
{ 0x1F4F6, 0x0000, 0xCB }, // signal_strength
|
||||
{ 0x1F37A, 0x0000, 0xCC }, // beer
|
||||
};
|
||||
|
||||
// ---- Helper functions ----
|
||||
@@ -780,7 +769,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 +803,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
|
||||
}
|
||||
};
|
||||
@@ -1,171 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// =============================================================================
|
||||
// GamesMenuScreen -- Game launcher menu for Meck
|
||||
//
|
||||
// Lists available games. W/S to navigate, Enter to launch, Q to exit.
|
||||
// Uses wantsExit() and wantsLaunch() flags for navigation -- same pattern
|
||||
// as ChannelPickerScreen.
|
||||
// =============================================================================
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
|
||||
// Game identifiers -- add new entries here as games are added
|
||||
enum GameID {
|
||||
GAME_NONE = 0,
|
||||
GAME_SNAKE,
|
||||
GAME_MINESWEEPER,
|
||||
// GAME_2048,
|
||||
GAME_COUNT // Must be last -- used for array sizing
|
||||
};
|
||||
|
||||
class GamesMenuScreen : public UIScreen {
|
||||
private:
|
||||
UITask* _task;
|
||||
bool _wantsExit;
|
||||
bool _wantsLaunch;
|
||||
int _cursor;
|
||||
GameID _selectedGame;
|
||||
|
||||
// Game registry -- add new games here
|
||||
struct GameEntry {
|
||||
GameID id;
|
||||
const char* name;
|
||||
const char* description;
|
||||
};
|
||||
|
||||
static constexpr int NUM_GAMES = 2; // Increment as games are added
|
||||
|
||||
static const GameEntry* getGames() {
|
||||
static const GameEntry games[NUM_GAMES] = {
|
||||
{ GAME_SNAKE, "Snake", "Classic Nokia-style" },
|
||||
{ GAME_MINESWEEPER, "Minesweeper", "Find the mines" },
|
||||
// { GAME_2048, "2048", "Slide and merge" },
|
||||
};
|
||||
return games;
|
||||
}
|
||||
|
||||
public:
|
||||
GamesMenuScreen(UITask* task)
|
||||
: _task(task), _wantsExit(false), _wantsLaunch(false),
|
||||
_cursor(0), _selectedGame(GAME_NONE) {}
|
||||
|
||||
bool wantsExit() const { return _wantsExit; }
|
||||
bool wantsLaunch() const { return _wantsLaunch; }
|
||||
GameID selectedGame() const { return _selectedGame; }
|
||||
|
||||
void enter() {
|
||||
_wantsExit = false;
|
||||
_wantsLaunch = false;
|
||||
_selectedGame = GAME_NONE;
|
||||
// Preserve cursor position so returning from a game stays on the same entry
|
||||
}
|
||||
|
||||
void clearFlags() {
|
||||
_wantsExit = false;
|
||||
_wantsLaunch = false;
|
||||
_selectedGame = GAME_NONE;
|
||||
}
|
||||
|
||||
// ------- Input -------
|
||||
bool handleInput(char c) override {
|
||||
switch (c) {
|
||||
case 'w': case 'W':
|
||||
if (_cursor > 0) _cursor--;
|
||||
return true;
|
||||
case 's': case 'S':
|
||||
if (_cursor < NUM_GAMES - 1) _cursor++;
|
||||
return true;
|
||||
case '\r':
|
||||
_selectedGame = getGames()[_cursor].id;
|
||||
_wantsLaunch = true;
|
||||
return true;
|
||||
case 'q': case 'Q':
|
||||
_wantsExit = true;
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// ------- Render -------
|
||||
int render(DisplayDriver& display) override {
|
||||
display.startFrame();
|
||||
display.setTextSize(1);
|
||||
|
||||
// --- Header ---
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(display.width() / 2, 2, "Games");
|
||||
#else
|
||||
display.setCursor(2, 2);
|
||||
display.print("Games");
|
||||
#endif
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(0, 12, display.width(), 1);
|
||||
|
||||
// --- Game list ---
|
||||
int y = 18;
|
||||
int lineH = 16;
|
||||
|
||||
for (int i = 0; i < NUM_GAMES; i++) {
|
||||
bool selected = (i == _cursor);
|
||||
|
||||
if (selected) {
|
||||
// Highlight bar
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(0, y - 1, display.width(), lineH);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
} else {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
}
|
||||
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(display.width() / 2, y + 2, getGames()[i].name);
|
||||
#else
|
||||
display.setCursor(6, y + 2);
|
||||
display.print(getGames()[i].name);
|
||||
#endif
|
||||
|
||||
y += lineH;
|
||||
}
|
||||
|
||||
// --- Footer ---
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.setTextSize(0);
|
||||
display.drawTextCentered(display.width() / 2, display.height() - 8, "Tap to select");
|
||||
display.setTextSize(1);
|
||||
#else
|
||||
display.setTextSize(1);
|
||||
int fy = display.height() - 12;
|
||||
display.drawRect(0, fy - 2, display.width(), 1);
|
||||
display.setCursor(2, fy);
|
||||
display.print("Enter:Play Q:Back");
|
||||
#endif
|
||||
|
||||
return 5000; // Static menu -- slow refresh
|
||||
}
|
||||
|
||||
// --- T5S3 touch: tap to select game entry ---
|
||||
int selectRowAtVY(int vy) {
|
||||
int y = 18;
|
||||
int lineH = 16;
|
||||
if (vy < y) return 0; // Above list
|
||||
int row = (vy - y) / lineH;
|
||||
if (row >= NUM_GAMES) return 0; // Below list
|
||||
|
||||
if (row == _cursor) {
|
||||
// Tapped current selection -- launch
|
||||
_selectedGame = getGames()[_cursor].id;
|
||||
_wantsLaunch = true;
|
||||
return 2;
|
||||
}
|
||||
_cursor = row;
|
||||
return 1; // Moved cursor
|
||||
}
|
||||
};
|
||||
@@ -50,7 +50,14 @@ class LastHeardScreen : public UIScreen {
|
||||
public:
|
||||
LastHeardScreen(mesh::RTCClock* rtc)
|
||||
: _rtc(rtc), _scrollPos(0), _count(0) {
|
||||
#if defined(ESP32)
|
||||
// ESP32 variants have PSRAM — allocate the entries buffer there
|
||||
_entries = (AdvertPath*)ps_calloc(LAST_HEARD_DISPLAY_SIZE, sizeof(AdvertPath));
|
||||
#else
|
||||
// nRF52 has no PSRAM — fall back to regular heap. At 100 entries × ~84
|
||||
// bytes each this is ~8.4KB, manageable within Meshpocket's SRAM budget.
|
||||
_entries = (AdvertPath*)calloc(LAST_HEARD_DISPLAY_SIZE, sizeof(AdvertPath));
|
||||
#endif
|
||||
}
|
||||
|
||||
void resetScroll() { _scrollPos = 0; }
|
||||
@@ -223,28 +230,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
|
||||
}
|
||||
@@ -1,466 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// =============================================================================
|
||||
// MinesweeperScreen -- Classic Minesweeper for Meck e-ink devices
|
||||
//
|
||||
// 9x9 grid, 10 mines (classic Beginner difficulty).
|
||||
// First reveal is always safe -- mines are placed after the first click.
|
||||
// Fully turn-based: no tick timer, renders only on input. Perfect for e-ink.
|
||||
//
|
||||
// T-Deck Pro: 14x14 pixel cells (126x126 grid area on 240x320 display)
|
||||
// T5S3: 8x8 pixel cells (72x72 grid area on 128x128 virtual display)
|
||||
// =============================================================================
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
|
||||
// -- Grid parameters --
|
||||
#define MINE_GRID_W 9
|
||||
#define MINE_GRID_H 9
|
||||
#define MINE_COUNT 10
|
||||
#define MINE_TOTAL (MINE_GRID_W * MINE_GRID_H)
|
||||
|
||||
// -- Cell sizes per platform --
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
#define MINE_CELL 8
|
||||
#define MINE_HDR 14
|
||||
#define MINE_FTR 10
|
||||
#else
|
||||
#define MINE_CELL 14
|
||||
#define MINE_HDR 14
|
||||
#define MINE_FTR 14
|
||||
#endif
|
||||
|
||||
#define MINE_VALUE 9 // Content value indicating a mine
|
||||
|
||||
class MinesweeperScreen : public UIScreen {
|
||||
public:
|
||||
enum GameState { READY, PLAYING, WON, LOST };
|
||||
enum CellState : uint8_t { CELL_HIDDEN, CELL_REVEALED, CELL_FLAGGED };
|
||||
|
||||
private:
|
||||
UITask* _task;
|
||||
bool _wantsExit;
|
||||
|
||||
// Grid
|
||||
uint8_t _content[MINE_TOTAL]; // 0-8 = adjacent mine count, MINE_VALUE = mine
|
||||
CellState _cellState[MINE_TOTAL]; // Hidden, revealed, or flagged
|
||||
|
||||
// Game state
|
||||
GameState _state;
|
||||
bool _minesPlaced; // False until first reveal (first-click safety)
|
||||
int _cursorX, _cursorY;
|
||||
int _flagCount;
|
||||
int _revealedCount;
|
||||
|
||||
// Display layout (recomputed each render based on game state)
|
||||
int _offsetX, _offsetY;
|
||||
bool _cursorBlink; // Toggles each render for slow blink cursor
|
||||
|
||||
// Simple xorshift PRNG
|
||||
uint16_t _rngState;
|
||||
|
||||
uint16_t rng() {
|
||||
_rngState ^= _rngState << 7;
|
||||
_rngState ^= _rngState >> 9;
|
||||
_rngState ^= _rngState << 8;
|
||||
return _rngState;
|
||||
}
|
||||
|
||||
// -- Grid helpers --
|
||||
|
||||
int idx(int x, int y) const { return y * MINE_GRID_W + x; }
|
||||
bool inBounds(int x, int y) const { return x >= 0 && x < MINE_GRID_W && y >= 0 && y < MINE_GRID_H; }
|
||||
|
||||
void resetGrid() {
|
||||
memset(_content, 0, sizeof(_content));
|
||||
for (int i = 0; i < MINE_TOTAL; i++) _cellState[i] = CELL_HIDDEN;
|
||||
_minesPlaced = false;
|
||||
_flagCount = 0;
|
||||
_revealedCount = 0;
|
||||
_cursorX = MINE_GRID_W / 2;
|
||||
_cursorY = MINE_GRID_H / 2;
|
||||
}
|
||||
|
||||
// Place mines randomly, excluding the first-clicked cell and its neighbours
|
||||
void placeMines(int safeX, int safeY) {
|
||||
_rngState = (uint16_t)(millis() ^ 0xC0DE);
|
||||
int placed = 0;
|
||||
while (placed < MINE_COUNT) {
|
||||
int x = rng() % MINE_GRID_W;
|
||||
int y = rng() % MINE_GRID_H;
|
||||
// Skip safe zone (first click + 8 neighbours)
|
||||
if (abs(x - safeX) <= 1 && abs(y - safeY) <= 1) continue;
|
||||
// Skip if already a mine
|
||||
if (_content[idx(x, y)] == MINE_VALUE) continue;
|
||||
_content[idx(x, y)] = MINE_VALUE;
|
||||
placed++;
|
||||
}
|
||||
// Compute adjacency counts
|
||||
for (int cy = 0; cy < MINE_GRID_H; cy++) {
|
||||
for (int cx = 0; cx < MINE_GRID_W; cx++) {
|
||||
if (_content[idx(cx, cy)] == MINE_VALUE) continue;
|
||||
int count = 0;
|
||||
for (int dy = -1; dy <= 1; dy++) {
|
||||
for (int dx = -1; dx <= 1; dx++) {
|
||||
if (dx == 0 && dy == 0) continue;
|
||||
int nx = cx + dx, ny = cy + dy;
|
||||
if (inBounds(nx, ny) && _content[idx(nx, ny)] == MINE_VALUE) count++;
|
||||
}
|
||||
}
|
||||
_content[idx(cx, cy)] = count;
|
||||
}
|
||||
}
|
||||
_minesPlaced = true;
|
||||
}
|
||||
|
||||
// Flood-fill reveal from (x,y). Reveals empty cells and their numbered borders.
|
||||
void floodReveal(int x, int y) {
|
||||
if (!inBounds(x, y)) return;
|
||||
int i = idx(x, y);
|
||||
if (_cellState[i] != CELL_HIDDEN) return;
|
||||
if (_content[i] == MINE_VALUE) return;
|
||||
|
||||
_cellState[i] = CELL_REVEALED;
|
||||
_revealedCount++;
|
||||
|
||||
// If this cell is 0 (no adjacent mines), reveal all neighbours
|
||||
if (_content[i] == 0) {
|
||||
for (int dy = -1; dy <= 1; dy++) {
|
||||
for (int dx = -1; dx <= 1; dx++) {
|
||||
if (dx == 0 && dy == 0) continue;
|
||||
floodReveal(x + dx, y + dy);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Reveal a cell. Returns false if mine was hit.
|
||||
bool revealCell(int x, int y) {
|
||||
int i = idx(x, y);
|
||||
if (_cellState[i] != CELL_HIDDEN) return true; // Already revealed or flagged
|
||||
|
||||
// First click: place mines safely
|
||||
if (!_minesPlaced) {
|
||||
placeMines(x, y);
|
||||
}
|
||||
|
||||
if (_content[i] == MINE_VALUE) {
|
||||
// Hit a mine -- game over
|
||||
_cellState[i] = CELL_REVEALED;
|
||||
_state = LOST;
|
||||
revealAllMines();
|
||||
return false;
|
||||
}
|
||||
|
||||
floodReveal(x, y);
|
||||
checkWin();
|
||||
return true;
|
||||
}
|
||||
|
||||
void toggleFlag(int x, int y) {
|
||||
int i = idx(x, y);
|
||||
if (_cellState[i] == CELL_HIDDEN) {
|
||||
_cellState[i] = CELL_FLAGGED;
|
||||
_flagCount++;
|
||||
} else if (_cellState[i] == CELL_FLAGGED) {
|
||||
_cellState[i] = CELL_HIDDEN;
|
||||
_flagCount--;
|
||||
}
|
||||
// Can't flag revealed cells
|
||||
}
|
||||
|
||||
void checkWin() {
|
||||
// Win when all non-mine cells are revealed
|
||||
if (_revealedCount == MINE_TOTAL - MINE_COUNT) {
|
||||
_state = WON;
|
||||
// Auto-flag remaining mines
|
||||
for (int i = 0; i < MINE_TOTAL; i++) {
|
||||
if (_content[i] == MINE_VALUE && _cellState[i] == CELL_HIDDEN) {
|
||||
_cellState[i] = CELL_FLAGGED;
|
||||
_flagCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void revealAllMines() {
|
||||
for (int i = 0; i < MINE_TOTAL; i++) {
|
||||
if (_content[i] == MINE_VALUE) {
|
||||
_cellState[i] = CELL_REVEALED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -- Drawing helpers --
|
||||
|
||||
void drawCell(DisplayDriver& display, int gx, int gy) const {
|
||||
int px = _offsetX + gx * MINE_CELL;
|
||||
int py = _offsetY + gy * MINE_CELL;
|
||||
int i = idx(gx, gy);
|
||||
bool isCursor = (gx == _cursorX && gy == _cursorY && _state == PLAYING);
|
||||
|
||||
if (_cellState[i] == CELL_HIDDEN) {
|
||||
if (isCursor && !_cursorBlink) {
|
||||
// Cursor blink OFF phase: outline only (visible gap in the solid grid)
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(px, py, MINE_CELL, MINE_CELL);
|
||||
display.drawRect(px + 1, py + 1, MINE_CELL - 2, MINE_CELL - 2);
|
||||
} else {
|
||||
// Solid filled with 1px inset (preserves grid lines between cells)
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(px + 1, py + 1, MINE_CELL - 2, MINE_CELL - 2);
|
||||
}
|
||||
} else if (_cellState[i] == CELL_FLAGGED) {
|
||||
if (isCursor && !_cursorBlink) {
|
||||
// Cursor blink OFF phase: outline with F
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(px, py, MINE_CELL, MINE_CELL);
|
||||
display.drawRect(px + 1, py + 1, MINE_CELL - 2, MINE_CELL - 2);
|
||||
} else {
|
||||
// Solid fill with 1px inset
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(px + 1, py + 1, MINE_CELL - 2, MINE_CELL - 2);
|
||||
}
|
||||
// F overlay
|
||||
display.setColor((isCursor && !_cursorBlink) ? DisplayDriver::LIGHT : DisplayDriver::DARK);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.setTextSize(0);
|
||||
display.drawTextCentered(px + MINE_CELL / 2, py + 1, "F");
|
||||
#else
|
||||
display.setTextSize(1);
|
||||
display.drawTextCentered(px + MINE_CELL / 2, py + 3, "F");
|
||||
#endif
|
||||
} else {
|
||||
// Revealed cell: thin border
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(px, py, MINE_CELL, MINE_CELL);
|
||||
|
||||
if (_content[i] == MINE_VALUE) {
|
||||
// Mine: solid dot in centre
|
||||
int dotR = MINE_CELL / 4;
|
||||
if (dotR < 2) dotR = 2;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(px + MINE_CELL/2 - dotR, py + MINE_CELL/2 - dotR, dotR*2, dotR*2);
|
||||
} else if (_content[i] > 0) {
|
||||
// Number 1-8
|
||||
char num[2] = { (char)('0' + _content[i]), '\0' };
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.setTextSize(0);
|
||||
display.drawTextCentered(px + MINE_CELL / 2, py + 1, num);
|
||||
#else
|
||||
display.setTextSize(1);
|
||||
display.drawTextCentered(px + MINE_CELL / 2, py + 3, num);
|
||||
#endif
|
||||
}
|
||||
// Revealed 0: just the border (already drawn)
|
||||
|
||||
// Cursor on revealed cell: green double border
|
||||
if (isCursor) {
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.drawRect(px, py, MINE_CELL, MINE_CELL);
|
||||
display.drawRect(px + 1, py + 1, MINE_CELL - 2, MINE_CELL - 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
MinesweeperScreen(UITask* task)
|
||||
: _task(task), _wantsExit(false), _state(READY), _minesPlaced(false),
|
||||
_cursorX(MINE_GRID_W / 2), _cursorY(MINE_GRID_H / 2),
|
||||
_flagCount(0), _revealedCount(0),
|
||||
_offsetX(0), _offsetY(0), _cursorBlink(false), _rngState(0xBEEF) {
|
||||
memset(_content, 0, sizeof(_content));
|
||||
for (int i = 0; i < MINE_TOTAL; i++) _cellState[i] = CELL_HIDDEN;
|
||||
}
|
||||
|
||||
bool wantsExit() const { return _wantsExit; }
|
||||
void clearExit() { _wantsExit = false; }
|
||||
GameState getState() const { return _state; }
|
||||
|
||||
void enter() {
|
||||
_wantsExit = false;
|
||||
// If game was PLAYING, resume where we left off
|
||||
// If READY, WON, or LOST, show that state as-is
|
||||
}
|
||||
|
||||
// ------- Input -------
|
||||
bool handleInput(char c) override {
|
||||
switch (_state) {
|
||||
case READY:
|
||||
if (c == '\r') {
|
||||
resetGrid();
|
||||
_state = PLAYING;
|
||||
return true;
|
||||
}
|
||||
if (c == 'q' || c == 'Q') { _wantsExit = true; return true; }
|
||||
return false;
|
||||
|
||||
case PLAYING:
|
||||
switch (c) {
|
||||
case 'w': case 'W': if (_cursorY > 0) _cursorY--; return true;
|
||||
case 's': case 'S': if (_cursorY < MINE_GRID_H - 1) _cursorY++; return true;
|
||||
case 'a': case 'A': if (_cursorX > 0) _cursorX--; return true;
|
||||
case 'd': case 'D': if (_cursorX < MINE_GRID_W - 1) _cursorX++; return true;
|
||||
case '\r':
|
||||
revealCell(_cursorX, _cursorY);
|
||||
return true;
|
||||
case 'f': case 'F':
|
||||
toggleFlag(_cursorX, _cursorY);
|
||||
return true;
|
||||
case 'q': case 'Q':
|
||||
_wantsExit = true;
|
||||
return true;
|
||||
default: return false;
|
||||
}
|
||||
|
||||
case WON:
|
||||
case LOST:
|
||||
if (c == '\r') {
|
||||
resetGrid();
|
||||
_state = PLAYING;
|
||||
return true;
|
||||
}
|
||||
if (c == 'q' || c == 'Q') { _wantsExit = true; return true; }
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// ------- Render -------
|
||||
int render(DisplayDriver& display) override {
|
||||
// Compute grid offset based on state
|
||||
// PLAYING: full screen (no header/footer) for clean grid
|
||||
// Other states: header + footer visible
|
||||
int gridPixW = MINE_GRID_W * MINE_CELL;
|
||||
int gridPixH = MINE_GRID_H * MINE_CELL;
|
||||
if (_state == PLAYING) {
|
||||
_offsetX = (display.width() - gridPixW) / 2;
|
||||
_offsetY = (display.height() - gridPixH) / 2;
|
||||
} else {
|
||||
int usableH = display.height() - MINE_HDR - MINE_FTR;
|
||||
_offsetX = (display.width() - gridPixW) / 2;
|
||||
_offsetY = MINE_HDR + (usableH - gridPixH) / 2;
|
||||
}
|
||||
|
||||
// Toggle cursor blink each render cycle
|
||||
if (_state == PLAYING) _cursorBlink = !_cursorBlink;
|
||||
|
||||
display.startFrame();
|
||||
display.setTextSize(1);
|
||||
|
||||
if (_state == READY) {
|
||||
// --- READY: header + instructions + footer ---
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(display.width() / 2, 2, "Minesweeper");
|
||||
#else
|
||||
display.setCursor(2, 2);
|
||||
display.print("Minesweeper");
|
||||
#endif
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(0, MINE_HDR - 2, display.width(), 1);
|
||||
|
||||
int cx = display.width() / 2;
|
||||
int y = MINE_HDR + 10;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawTextCentered(cx, y, "Minesweeper");
|
||||
y += 16;
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(cx, y, "Swipe to move cursor");
|
||||
y += 11;
|
||||
display.drawTextCentered(cx, y, "Tap to reveal");
|
||||
y += 11;
|
||||
display.drawTextCentered(cx, y, "Long press to flag");
|
||||
#else
|
||||
display.drawTextCentered(cx, y, "W/S/A/D to move cursor");
|
||||
y += 11;
|
||||
display.drawTextCentered(cx, y, "Enter to reveal a cell");
|
||||
y += 11;
|
||||
display.drawTextCentered(cx, y, "F to flag a mine");
|
||||
#endif
|
||||
y += 16;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
char info[32];
|
||||
snprintf(info, sizeof(info), "%dx%d grid, %d mines", MINE_GRID_W, MINE_GRID_H, MINE_COUNT);
|
||||
display.drawTextCentered(cx, y, info);
|
||||
y += 16;
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(cx, y, "Tap to start");
|
||||
#else
|
||||
display.drawTextCentered(cx, y, "Press Enter to start");
|
||||
#endif
|
||||
|
||||
// Footer
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
#if !defined(LilyGo_T5S3_EPaper_Pro)
|
||||
int fy = display.height() - 12;
|
||||
display.drawRect(0, fy - 2, display.width(), 1);
|
||||
display.setCursor(2, fy);
|
||||
display.print("Enter:Start Q:Back");
|
||||
#endif
|
||||
return 5000;
|
||||
|
||||
} else if (_state == PLAYING) {
|
||||
// --- PLAYING: full screen grid, no header/footer ---
|
||||
|
||||
// Draw grid border
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(_offsetX - 1, _offsetY - 1, gridPixW + 2, gridPixH + 2);
|
||||
|
||||
// Draw all cells
|
||||
for (int gy = 0; gy < MINE_GRID_H; gy++) {
|
||||
for (int gx = 0; gx < MINE_GRID_W; gx++) {
|
||||
drawCell(display, gx, gy);
|
||||
}
|
||||
}
|
||||
|
||||
return 100; // Blink cycle -- clamped to 800ms by render floor
|
||||
|
||||
} else {
|
||||
// --- WON / LOST: grid + overlay ---
|
||||
|
||||
// Draw grid border
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(_offsetX - 1, _offsetY - 1, gridPixW + 2, gridPixH + 2);
|
||||
|
||||
// Draw all cells (no cursor blink in end state)
|
||||
for (int gy = 0; gy < MINE_GRID_H; gy++) {
|
||||
for (int gx = 0; gx < MINE_GRID_W; gx++) {
|
||||
drawCell(display, gx, gy);
|
||||
}
|
||||
}
|
||||
|
||||
// Overlay
|
||||
int cx = display.width() / 2;
|
||||
int cy = display.height() / 2;
|
||||
int boxW = display.width() * 3 / 4;
|
||||
int boxH = 50;
|
||||
int boxX = cx - boxW / 2;
|
||||
int boxY = cy - boxH / 2;
|
||||
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
display.fillRect(boxX, boxY, boxW, boxH);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(boxX, boxY, boxW, boxH);
|
||||
|
||||
int ty = boxY + 10;
|
||||
if (_state == WON) {
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
display.drawTextCentered(cx, ty, "Cleared!");
|
||||
} else {
|
||||
display.drawTextCentered(cx, ty, "Boom!");
|
||||
}
|
||||
ty += 16;
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.drawTextCentered(cx, ty, "Enter:Retry Q:Back");
|
||||
|
||||
return 5000;
|
||||
}
|
||||
}
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -37,10 +37,6 @@ void ModemManager::begin() {
|
||||
_ringing = false;
|
||||
_nextRingTone = 0;
|
||||
_toneActive = false;
|
||||
_pendingToneIdx = -1;
|
||||
_tonesTransferred = false;
|
||||
_notifTonePlaying = false;
|
||||
_notifToneStartTime = 0;
|
||||
_urcPos = 0;
|
||||
_imei[0] = '\0';
|
||||
_imsi[0] = '\0';
|
||||
@@ -71,12 +67,6 @@ void ModemManager::shutdown() {
|
||||
|
||||
MESH_DEBUG_PRINTLN("[Modem] shutdown()");
|
||||
|
||||
// Stop any playing notification tone
|
||||
if (_notifTonePlaying) {
|
||||
// Best-effort stop -- task is about to be deleted
|
||||
_pendingToneIdx = -1;
|
||||
}
|
||||
|
||||
// Hang up any active call first
|
||||
if (isCallActive()) {
|
||||
CallCommand cmd;
|
||||
@@ -181,38 +171,6 @@ bool ModemManager::pollCallEvent(CallEvent& out) {
|
||||
return xQueueReceive(_callEvtQueue, &out, 0) == pdTRUE;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Public API - Notification Tones
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void ModemManager::requestNotifTone(int8_t toneIdx) {
|
||||
if (toneIdx < 0 || toneIdx >= MODEM_BUNDLED_TONE_COUNT) return;
|
||||
if (!_tonesTransferred) return; // Not ready yet
|
||||
if (isCallActive()) return; // Don't interrupt voice calls
|
||||
_pendingToneIdx = toneIdx;
|
||||
}
|
||||
|
||||
int8_t ModemManager::findToneByName(const char* name) {
|
||||
if (!name || !name[0]) return -1;
|
||||
|
||||
for (int i = 0; i < MODEM_BUNDLED_TONE_COUNT; i++) {
|
||||
// Match against filename (with or without .wav extension)
|
||||
const char* fn = modemBundledTones[i].filename;
|
||||
if (strcasecmp(name, fn) == 0) return i;
|
||||
|
||||
// Try matching without extension
|
||||
const char* dot = strrchr(fn, '.');
|
||||
if (dot) {
|
||||
int baseLen = dot - fn;
|
||||
if ((int)strlen(name) == baseLen && strncasecmp(name, fn, baseLen) == 0) return i;
|
||||
}
|
||||
|
||||
// Also match against label
|
||||
if (strcasecmp(name, modemBundledTones[i].label) == 0) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// State helpers
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -304,11 +262,11 @@ void ModemManager::saveAPNConfig(const char* apn) {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// APN Resolution -- called during init after network registration
|
||||
// APN Resolution — called during init after network registration
|
||||
//
|
||||
// Priority:
|
||||
// 1. User-configured APN (from /sms/apn.cfg)
|
||||
// 2. Network-provisioned APN (AT+CGDCONT? -- modem already has one)
|
||||
// 2. Network-provisioned APN (AT+CGDCONT? — modem already has one)
|
||||
// 3. Auto-detected from IMSI via embedded ApnDatabase
|
||||
// 4. Blank (some carriers work with empty APN)
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -369,7 +327,7 @@ void ModemManager::resolveAPN() {
|
||||
}
|
||||
}
|
||||
|
||||
// 4. No APN found -- leave blank
|
||||
// 4. No APN found — leave blank
|
||||
_apn[0] = '\0';
|
||||
strcpy(_apnSource, "none");
|
||||
MESH_DEBUG_PRINTLN("[Modem] APN: none detected (IMSI=%s)", _imsi[0] ? _imsi : "unknown");
|
||||
@@ -379,13 +337,12 @@ void ModemManager::resolveAPN() {
|
||||
// URC (Unsolicited Result Code) Handling
|
||||
// ---------------------------------------------------------------------------
|
||||
// The modem can send unsolicited messages at any time:
|
||||
// RING -- incoming call ringing
|
||||
// +CLIP: "+1234...",145,... -- caller ID (after AT+CLIP=1)
|
||||
// NO CARRIER -- call ended by remote
|
||||
// BUSY -- outgoing call busy
|
||||
// NO ANSWER -- outgoing call no answer
|
||||
// +CMTI: "SM",<idx> -- new SMS arrived
|
||||
// +AUDIOSTATE: audio play stop -- notification tone finished
|
||||
// RING — incoming call ringing
|
||||
// +CLIP: "+1234...",145,... — caller ID (after AT+CLIP=1)
|
||||
// NO CARRIER — call ended by remote
|
||||
// BUSY — outgoing call busy
|
||||
// NO ANSWER — outgoing call no answer
|
||||
// +CMTI: "SM",<idx> — new SMS arrived
|
||||
//
|
||||
// drainURCs() accumulates bytes into a line buffer and calls
|
||||
// processURCLine() for each complete line.
|
||||
@@ -397,7 +354,7 @@ void ModemManager::drainURCs() {
|
||||
|
||||
// Accumulate into line buffer
|
||||
if (c == '\n') {
|
||||
// End of line -- process if non-empty
|
||||
// End of line — process if non-empty
|
||||
if (_urcPos > 0) {
|
||||
// Trim trailing \r
|
||||
while (_urcPos > 0 && _urcBuf[_urcPos - 1] == '\r') _urcPos--;
|
||||
@@ -461,7 +418,7 @@ void ModemManager::processURCLine(const char* line) {
|
||||
if (strcmp(line, "NO CARRIER") == 0) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] URC: NO CARRIER");
|
||||
if (_state == ModemState::RINGING_IN) {
|
||||
// Incoming call ended before we answered -- missed call
|
||||
// Incoming call ended before we answered — missed call
|
||||
queueCallEvent(CallEventType::MISSED, _callPhone);
|
||||
} else if (_state == ModemState::DIALING || _state == ModemState::IN_CALL) {
|
||||
uint32_t duration = 0;
|
||||
@@ -508,7 +465,7 @@ void ModemManager::processURCLine(const char* line) {
|
||||
return;
|
||||
}
|
||||
|
||||
// --- VOICE CALL: BEGIN -- A76xx-specific: audio path established ---
|
||||
// --- VOICE CALL: BEGIN — A76xx-specific: audio path established ---
|
||||
if (strncmp(line, "VOICE CALL: BEGIN", 17) == 0) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] URC: VOICE CALL: BEGIN");
|
||||
if (_state == ModemState::DIALING) {
|
||||
@@ -520,7 +477,7 @@ void ModemManager::processURCLine(const char* line) {
|
||||
return;
|
||||
}
|
||||
|
||||
// --- VOICE CALL: END -- A76xx-specific: audio path closed ---
|
||||
// --- VOICE CALL: END — A76xx-specific: audio path closed ---
|
||||
// Format: "VOICE CALL: END: <duration>"
|
||||
if (strncmp(line, "VOICE CALL: END", 15) == 0) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] URC: %s", line);
|
||||
@@ -545,20 +502,6 @@ void ModemManager::processURCLine(const char* line) {
|
||||
_callStartTime = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// --- +AUDIOSTATE: notification tone playback status ---
|
||||
// +AUDIOSTATE: audio play -- playback started
|
||||
// +AUDIOSTATE: audio play stop -- playback finished
|
||||
if (strncmp(line, "+AUDIOSTATE:", 12) == 0) {
|
||||
if (strstr(line, "play stop") || strstr(line, "PLAY STOP")) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] URC: AUDIOSTATE play stop");
|
||||
_notifTonePlaying = false;
|
||||
} else if (strstr(line, "play") || strstr(line, "PLAY")) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] URC: AUDIOSTATE play");
|
||||
// Playback confirmed started -- _notifTonePlaying already set
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void ModemManager::queueCallEvent(CallEventType type, const char* phone, uint32_t duration) {
|
||||
@@ -583,7 +526,7 @@ bool ModemManager::doDialCall(const char* phone) {
|
||||
_callPhone[SMS_PHONE_LEN - 1] = '\0';
|
||||
_state = ModemState::DIALING;
|
||||
|
||||
// ATD<number>; -- the semicolon makes it a voice call (not data)
|
||||
// ATD<number>; — the semicolon makes it a voice call (not data)
|
||||
char cmd[32];
|
||||
snprintf(cmd, sizeof(cmd), "ATD%s;", phone);
|
||||
|
||||
@@ -595,11 +538,11 @@ bool ModemManager::doDialCall(const char* phone) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// ATD returned OK -- call is being set up.
|
||||
// ATD returned OK — call is being set up.
|
||||
// Connection/failure will come as URCs (NO CARRIER, BUSY, etc.)
|
||||
// or we detect active call via AT+CLCC polling.
|
||||
// For now, assume we're dialing and wait for URCs.
|
||||
MESH_DEBUG_PRINTLN("[Modem] ATD OK -- dialing...");
|
||||
MESH_DEBUG_PRINTLN("[Modem] ATD OK — dialing...");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -667,8 +610,8 @@ bool ModemManager::doSetVolume(uint8_t level) {
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Incoming call ringtone -- tone bursts via AT+SIMTONE on modem speaker
|
||||
// Pattern: 400ms tone -> 1200ms silence -> repeat
|
||||
// Incoming call ringtone — tone bursts via AT+SIMTONE on modem speaker
|
||||
// Pattern: 400ms tone → 1200ms silence → repeat
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void ModemManager::handleRingtone() {
|
||||
@@ -700,192 +643,12 @@ void ModemManager::handleRingtone() {
|
||||
_toneActive = true;
|
||||
_nextRingTone = now + 400; // Tone plays for 400ms
|
||||
} else {
|
||||
// Tone just finished -- gap before next burst
|
||||
// Tone just finished — gap before next burst
|
||||
_toneActive = false;
|
||||
_nextRingTone = now + 1200; // 1.2s silence (classic ring cadence)
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Notification Tone Transfer and Playback
|
||||
// ---------------------------------------------------------------------------
|
||||
// Transfers embedded WAV files from PROGMEM to the modem's internal
|
||||
// filesystem using AT+CFTRANRX (confirmed via probe), then plays them
|
||||
// on demand via AT+CCMXPLAY through the modem's speaker amplifier.
|
||||
//
|
||||
// Confirmed working commands on A7682E:
|
||||
// AT+FSMEM -- filesystem space query
|
||||
// AT+FSDEL="C:/file" -- delete file
|
||||
// AT+CFTRANRX="C:/file",size -- write file (modem responds CONNECT)
|
||||
// AT+CCMXPLAY="C:/file",0,0 -- play audio
|
||||
// AT+CCMXSTOP -- stop audio
|
||||
// AT+CRSL=n -- ringer volume (0-20)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool ModemManager::transferTonesToModem() {
|
||||
MESH_DEBUG_PRINTLN("[Modem] Transferring %d notification tones to modem...", MODEM_BUNDLED_TONE_COUNT);
|
||||
|
||||
// Verify filesystem is accessible
|
||||
if (sendAT("AT+FSMEM", "OK", 3000)) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] Filesystem: %s", _atBuf);
|
||||
} else {
|
||||
MESH_DEBUG_PRINTLN("[Modem] FSMEM failed -- modem filesystem not accessible");
|
||||
_tonesTransferred = true; // Don't retry every boot
|
||||
return false;
|
||||
}
|
||||
|
||||
int successCount = 0;
|
||||
|
||||
for (int i = 0; i < MODEM_BUNDLED_TONE_COUNT; i++) {
|
||||
const ModemToneEntry& tone = modemBundledTones[i];
|
||||
|
||||
// Build modem filesystem path
|
||||
char modemPath[48];
|
||||
snprintf(modemPath, sizeof(modemPath), "C:/%s", tone.filename);
|
||||
|
||||
// Delete any existing file first (AT+FSDEL, ignore errors if not found)
|
||||
char delCmd[64];
|
||||
snprintf(delCmd, sizeof(delCmd), "AT+FSDEL=\"%s\"", modemPath);
|
||||
sendAT(delCmd, "OK", 2000);
|
||||
|
||||
// Small gap to let modem settle between delete and write
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
|
||||
// Drain any stale UART data before transfer
|
||||
while (MODEM_SERIAL.available()) MODEM_SERIAL.read();
|
||||
|
||||
// Transfer file via AT+CFTRANRX="path",<size>
|
||||
// Modem responds with CONNECT, then expects <size> bytes of binary data,
|
||||
// then responds with OK.
|
||||
char txCmd[80];
|
||||
snprintf(txCmd, sizeof(txCmd), "AT+CFTRANRX=\"%s\",%d", modemPath, (int)tone.size);
|
||||
MESH_DEBUG_PRINTLN("[Modem] Tone %d/%d: %s (%d bytes) -- sending...",
|
||||
i + 1, MODEM_BUNDLED_TONE_COUNT, tone.filename, (int)tone.size);
|
||||
|
||||
Serial.printf("[Modem] TX: %s\n", txCmd);
|
||||
MODEM_SERIAL.println(txCmd);
|
||||
|
||||
// Wait for CONNECT prompt (case-insensitive, also check for ">")
|
||||
unsigned long start = millis();
|
||||
bool gotPrompt = false;
|
||||
bool gotError = false;
|
||||
char promptBuf[128];
|
||||
int ppos = 0;
|
||||
while (millis() - start < 8000) {
|
||||
while (MODEM_SERIAL.available()) {
|
||||
char c = MODEM_SERIAL.read();
|
||||
if (ppos < 127) { promptBuf[ppos++] = c; promptBuf[ppos] = '\0'; }
|
||||
// Check for any known data-ready prompts
|
||||
if (strstr(promptBuf, "CONNECT") || strstr(promptBuf, "connect") ||
|
||||
c == '>') {
|
||||
gotPrompt = true;
|
||||
break;
|
||||
}
|
||||
if (strstr(promptBuf, "ERROR")) { gotError = true; break; }
|
||||
}
|
||||
if (gotPrompt || gotError) break;
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
|
||||
if (!gotPrompt) {
|
||||
// Log whatever we DID receive for debugging
|
||||
MESH_DEBUG_PRINTLN("[Modem] Tone %d: no CONNECT/> prompt (got: [%s])",
|
||||
i + 1, ppos > 0 ? promptBuf : "TIMEOUT");
|
||||
// Drain UART and recover
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
while (MODEM_SERIAL.available()) MODEM_SERIAL.read();
|
||||
continue;
|
||||
}
|
||||
|
||||
MESH_DEBUG_PRINTLN("[Modem] Tone %d: got prompt, sending %d bytes...", i + 1, (int)tone.size);
|
||||
|
||||
// Send the binary WAV data from PROGMEM in chunks
|
||||
const uint8_t* src = tone.data;
|
||||
size_t remaining = tone.size;
|
||||
const size_t CHUNK_SIZE = 256;
|
||||
|
||||
while (remaining > 0) {
|
||||
size_t chunk = (remaining > CHUNK_SIZE) ? CHUNK_SIZE : remaining;
|
||||
uint8_t buf[CHUNK_SIZE];
|
||||
memcpy_P(buf, src, chunk);
|
||||
MODEM_SERIAL.write(buf, chunk);
|
||||
src += chunk;
|
||||
remaining -= chunk;
|
||||
// Brief yield to avoid starving other tasks during large transfers
|
||||
if (remaining > 0) vTaskDelay(pdMS_TO_TICKS(5));
|
||||
}
|
||||
|
||||
// Wait for OK response after transfer completes
|
||||
if (waitResponse("OK", 15000, _atBuf, AT_BUF_SIZE)) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] Tone %d: %s transferred OK", i + 1, tone.filename);
|
||||
successCount++;
|
||||
} else {
|
||||
MESH_DEBUG_PRINTLN("[Modem] Tone %d: %s transfer FAILED: %s", i + 1, tone.filename, _atBuf);
|
||||
// Drain UART to recover modem state
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
while (MODEM_SERIAL.available()) MODEM_SERIAL.read();
|
||||
}
|
||||
|
||||
// Delay between transfers to let modem flush to storage
|
||||
vTaskDelay(pdMS_TO_TICKS(200));
|
||||
}
|
||||
|
||||
_tonesTransferred = (successCount > 0);
|
||||
MESH_DEBUG_PRINTLN("[Modem] Notification tones: %d/%d transferred", successCount, MODEM_BUNDLED_TONE_COUNT);
|
||||
return (successCount == MODEM_BUNDLED_TONE_COUNT);
|
||||
}
|
||||
|
||||
bool ModemManager::playModemTone(const char* filename) {
|
||||
// AT+CCMXPLAY="C:/filename.wav",0,0
|
||||
// param 1: 0 = local speaker output
|
||||
// param 2: 0 = no repeat
|
||||
char cmd[64];
|
||||
snprintf(cmd, sizeof(cmd), "AT+CCMXPLAY=\"C:/%s\",0,0", filename);
|
||||
bool ok = sendAT(cmd, "OK", 2000);
|
||||
if (ok) {
|
||||
_notifTonePlaying = true;
|
||||
_notifToneStartTime = millis();
|
||||
MESH_DEBUG_PRINTLN("[Modem] Playing tone: %s", filename);
|
||||
} else {
|
||||
MESH_DEBUG_PRINTLN("[Modem] CCMXPLAY failed: %s", filename);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool ModemManager::stopModemTone() {
|
||||
if (!_notifTonePlaying) return true;
|
||||
bool ok = sendAT("AT+CCMXSTOP", "OK", 1000);
|
||||
_notifTonePlaying = false;
|
||||
MESH_DEBUG_PRINTLN("[Modem] Tone stop %s", ok ? "OK" : "FAIL");
|
||||
return ok;
|
||||
}
|
||||
|
||||
void ModemManager::handleNotifTone() {
|
||||
// Auto-stop if playback has been running too long (safety net)
|
||||
if (_notifTonePlaying &&
|
||||
(millis() - _notifToneStartTime) > NOTIF_TONE_TIMEOUT_MS) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] Tone playback timeout -- stopping");
|
||||
stopModemTone();
|
||||
}
|
||||
|
||||
// Check for pending tone request from main loop
|
||||
int8_t idx = _pendingToneIdx;
|
||||
if (idx < 0) return;
|
||||
_pendingToneIdx = -1; // Consume the request
|
||||
|
||||
if (idx >= MODEM_BUNDLED_TONE_COUNT) return;
|
||||
|
||||
// Stop any currently playing tone before starting new one
|
||||
if (_notifTonePlaying) {
|
||||
stopModemTone();
|
||||
}
|
||||
|
||||
// Don't play during active calls
|
||||
if (isCallActive()) return;
|
||||
|
||||
playModemTone(modemBundledTones[idx].filename);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// FreeRTOS Task
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -920,7 +683,7 @@ restart:
|
||||
vTaskDelay(pdMS_TO_TICKS(500));
|
||||
}
|
||||
if (!atOk) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] AT check failed -- retry from power-on in 30s");
|
||||
MESH_DEBUG_PRINTLN("[Modem] AT check failed — retry from power-on in 30s");
|
||||
_state = ModemState::ERROR;
|
||||
vTaskDelay(pdMS_TO_TICKS(30000));
|
||||
goto restart;
|
||||
@@ -942,7 +705,7 @@ restart:
|
||||
MESH_DEBUG_PRINTLN("[Modem] IMEI: %s", _imei);
|
||||
}
|
||||
|
||||
// IMSI (International Mobile Subscriber Identity) -- for APN auto-detection
|
||||
// IMSI (International Mobile Subscriber Identity) — for APN auto-detection
|
||||
if (sendAT("AT+CIMI", "OK", 3000)) {
|
||||
char* p = _atBuf;
|
||||
while (*p && !isdigit(*p)) p++;
|
||||
@@ -969,7 +732,7 @@ restart:
|
||||
sendAT("AT+CLIP=1", "OK");
|
||||
|
||||
// Set audio output to loudspeaker mode (device speaker)
|
||||
// 1=earpiece, 3=loudspeaker -- use loudspeaker for T-Deck Pro
|
||||
// 1=earpiece, 3=loudspeaker — use loudspeaker for T-Deck Pro
|
||||
sendAT("AT+CSDVC=3", "OK", 1000);
|
||||
|
||||
// Set initial call volume (mid-level)
|
||||
@@ -1042,7 +805,7 @@ restart:
|
||||
// Initial signal query
|
||||
pollCSQ();
|
||||
|
||||
// Resolve APN (user config -> network provisioned -> IMSI auto-detect)
|
||||
// Resolve APN (user config → network provisioned → IMSI auto-detect)
|
||||
resolveAPN();
|
||||
|
||||
// Sync ESP32 system clock from modem network time
|
||||
@@ -1094,11 +857,6 @@ restart:
|
||||
MESH_DEBUG_PRINTLN("[Modem] READY (CSQ=%d, operator=%s, APN=%s [%s], IMEI=%s)",
|
||||
_csq, _operator, _apn[0] ? _apn : "(none)", _apnSource, _imei);
|
||||
|
||||
// ---- Phase 3b: Transfer notification tones to modem filesystem ----
|
||||
// Done after READY so modem is fully initialised. Non-blocking for the
|
||||
// mesh -- runs on Core 0 modem task. Uses AT+FSDEL + AT+CFTRANRX.
|
||||
transferTonesToModem();
|
||||
|
||||
// ---- Phase 4: Main loop ----
|
||||
unsigned long lastCSQPoll = 0;
|
||||
unsigned long lastSMSPoll = 0;
|
||||
@@ -1109,22 +867,17 @@ restart:
|
||||
|
||||
while (true) {
|
||||
// ================================================================
|
||||
// Step 1: Drain URCs -- catch RING, NO CARRIER, +CLIP, +AUDIOSTATE
|
||||
// Step 1: Drain URCs — catch RING, NO CARRIER, +CLIP, etc.
|
||||
// This must run every iteration to avoid missing time-sensitive
|
||||
// events like incoming calls or call-ended notifications.
|
||||
// ================================================================
|
||||
drainURCs();
|
||||
|
||||
// ================================================================
|
||||
// Step 1b: Ringtone -- play tone bursts while incoming call rings
|
||||
// Step 1b: Ringtone — play tone bursts while incoming call rings
|
||||
// ================================================================
|
||||
handleRingtone();
|
||||
|
||||
// ================================================================
|
||||
// Step 1c: Notification tone -- play/stop requested tones
|
||||
// ================================================================
|
||||
handleNotifTone();
|
||||
|
||||
// ================================================================
|
||||
// Step 2: Process call commands from main loop
|
||||
// ================================================================
|
||||
@@ -1135,7 +888,7 @@ restart:
|
||||
if (_state == ModemState::READY) {
|
||||
doDialCall(callCmd.phone);
|
||||
} else {
|
||||
MESH_DEBUG_PRINTLN("[Modem] Can't dial -- state=%d", (int)_state);
|
||||
MESH_DEBUG_PRINTLN("[Modem] Can't dial — state=%d", (int)_state);
|
||||
queueCallEvent(CallEventType::DIAL_FAILED, callCmd.phone);
|
||||
}
|
||||
break;
|
||||
@@ -1175,7 +928,7 @@ restart:
|
||||
_state == ModemState::DIALING &&
|
||||
millis() - lastCLCCPoll > CLCC_POLL_INTERVAL) {
|
||||
if (sendAT("AT+CLCC", "OK", 2000)) {
|
||||
// +CLCC: 1,0,0,0,0,"number",129 -- stat field:
|
||||
// +CLCC: 1,0,0,0,0,"number",129 — stat field:
|
||||
// 0=active, 1=held, 2=dialing, 3=alerting, 4=incoming, 5=waiting
|
||||
char* p = strstr(_atBuf, "+CLCC:");
|
||||
if (p) {
|
||||
@@ -1183,16 +936,16 @@ restart:
|
||||
if (sscanf(p, "+CLCC: %d,%d,%d,%d,%d", &idx, &dir, &stat, &mode, &mpty) >= 3) {
|
||||
MESH_DEBUG_PRINTLN("[Modem] CLCC: stat=%d", stat);
|
||||
if (stat == 0) {
|
||||
// Call is active -- remote answered
|
||||
// Call is active — remote answered
|
||||
_state = ModemState::IN_CALL;
|
||||
_callStartTime = millis();
|
||||
queueCallEvent(CallEventType::CONNECTED, _callPhone);
|
||||
MESH_DEBUG_PRINTLN("[Modem] Call connected (detected via CLCC)");
|
||||
}
|
||||
// stat 2=dialing, 3=alerting -- still setting up, keep polling
|
||||
// stat 2=dialing, 3=alerting — still setting up, keep polling
|
||||
}
|
||||
} else {
|
||||
// No +CLCC line in response -- no active calls
|
||||
// No +CLCC line in response — no active calls
|
||||
// This shouldn't happen during DIALING unless the call ended
|
||||
// and we missed the URC. Check state and clean up.
|
||||
// (NO CARRIER URC should have been caught by drainURCs)
|
||||
@@ -1235,9 +988,9 @@ restart:
|
||||
|
||||
// Shorter delay during active call states for responsive URC handling
|
||||
if (isCallActive()) {
|
||||
vTaskDelay(pdMS_TO_TICKS(100)); // 100ms -- responsive to URCs
|
||||
vTaskDelay(pdMS_TO_TICKS(100)); // 100ms — responsive to URCs
|
||||
} else {
|
||||
vTaskDelay(pdMS_TO_TICKS(500)); // 500ms -- normal idle
|
||||
vTaskDelay(pdMS_TO_TICKS(500)); // 500ms — normal idle
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1355,7 +1108,7 @@ bool ModemManager::waitResponse(const char* expect, uint32_t timeout_ms,
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
|
||||
// Timeout -- check one more time
|
||||
// Timeout — check one more time
|
||||
if (buf && expect && strstr(buf, expect)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
// Runs AT commands on a dedicated FreeRTOS task (Core 0, priority 1) to never
|
||||
// block the mesh radio loop. Communicates with main loop via lock-free queues.
|
||||
//
|
||||
// Supports: SMS send/receive, voice call dial/answer/hangup/DTMF,
|
||||
// notification tone playback via AT+CCMXPLAY
|
||||
// Supports: SMS send/receive, voice call dial/answer/hangup/DTMF
|
||||
//
|
||||
// Guard: HAS_4G_MODEM (defined only for the 4G build environment)
|
||||
// =============================================================================
|
||||
@@ -24,7 +23,6 @@
|
||||
#include <freertos/semphr.h>
|
||||
#include "variant.h"
|
||||
#include "ApnDatabase.h"
|
||||
#include "ModemBundledSounds.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Modem pins (from variant.h, always defined for reference)
|
||||
@@ -52,10 +50,6 @@
|
||||
#define MODEM_CALL_CMD_QUEUE_SIZE 4
|
||||
#define MODEM_CALL_EVT_QUEUE_SIZE 4
|
||||
|
||||
// Notification tone auto-stop timeout (ms) -- stop playback after this
|
||||
// even if no +AUDIOSTATE URC received, to avoid stuck audio
|
||||
#define NOTIF_TONE_TIMEOUT_MS 4000
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Modem state machine
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -94,7 +88,7 @@ struct SMSIncoming {
|
||||
// Voice call structures
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Commands from main loop -> modem task
|
||||
// Commands from main loop → modem task
|
||||
enum class CallCmd : uint8_t {
|
||||
DIAL, // Initiate outgoing call
|
||||
ANSWER, // Answer incoming call
|
||||
@@ -110,7 +104,7 @@ struct CallCommand {
|
||||
uint8_t volume; // Used by SET_VOLUME (0-5)
|
||||
};
|
||||
|
||||
// Events from modem task -> main loop
|
||||
// Events from modem task → main loop
|
||||
enum class CallEventType : uint8_t {
|
||||
INCOMING, // Incoming call ringing (+CLIP parsed)
|
||||
CONNECTED, // Call answered / outgoing connected
|
||||
@@ -148,24 +142,10 @@ public:
|
||||
bool setCallVolume(uint8_t level); // Set volume 0-5
|
||||
bool pollCallEvent(CallEvent& out); // Poll from main loop
|
||||
|
||||
// Ringtone control -- called from main loop
|
||||
// Ringtone control — called from main loop
|
||||
void setRingtoneEnabled(bool en) { _ringtoneEnabled = en; }
|
||||
bool isRingtoneEnabled() const { return _ringtoneEnabled; }
|
||||
|
||||
// --- Notification tone API ---
|
||||
// Request playback of a bundled notification tone by index (0-based).
|
||||
// Called from main loop (Core 1); playback happens on modem task (Core 0).
|
||||
// Pass -1 or out-of-range to be ignored.
|
||||
void requestNotifTone(int8_t toneIdx);
|
||||
|
||||
// Check if bundled tones have been transferred to modem filesystem
|
||||
bool areTonesReady() const { return _tonesTransferred; }
|
||||
|
||||
// Look up a modem tone index by base filename (e.g. "Bell-01").
|
||||
// Returns index into modemBundledTones[] or -1 if not found.
|
||||
// Matches with or without .wav extension.
|
||||
static int8_t findToneByName(const char* name);
|
||||
|
||||
// --- State queries (lock-free reads) ---
|
||||
ModemState getState() const { return _state; }
|
||||
int getSignalBars() const; // 0-5
|
||||
@@ -197,7 +177,7 @@ public:
|
||||
// Save user-configured APN to SD card.
|
||||
static void saveAPNConfig(const char* apn);
|
||||
|
||||
// Pause/resume polling -- used by web reader to avoid Core 0 contention
|
||||
// Pause/resume polling — used by web reader to avoid Core 0 contention
|
||||
// during WiFi TLS handshakes. While paused, the task skips AT commands
|
||||
// (SMS poll, CSQ poll) but still drains URCs and handles call commands
|
||||
// so incoming calls aren't missed.
|
||||
@@ -233,12 +213,6 @@ private:
|
||||
unsigned long _nextRingTone = 0; // Next tone burst timestamp (modem task)
|
||||
bool _toneActive = false; // Is a tone currently sounding
|
||||
|
||||
// Notification tone state
|
||||
volatile int8_t _pendingToneIdx = -1; // Set by main loop, consumed by modem task
|
||||
volatile bool _tonesTransferred = false; // True after all tones written to modem C:/
|
||||
bool _notifTonePlaying = false; // Modem is currently playing a notif tone
|
||||
unsigned long _notifToneStartTime = 0; // millis() when playback started (for timeout)
|
||||
|
||||
TaskHandle_t _taskHandle = nullptr;
|
||||
|
||||
// SMS queues
|
||||
@@ -246,8 +220,8 @@ private:
|
||||
QueueHandle_t _recvQueue = nullptr;
|
||||
|
||||
// Call queues
|
||||
QueueHandle_t _callCmdQueue = nullptr; // main loop -> modem task
|
||||
QueueHandle_t _callEvtQueue = nullptr; // modem task -> main loop
|
||||
QueueHandle_t _callCmdQueue = nullptr; // main loop → modem task
|
||||
QueueHandle_t _callEvtQueue = nullptr; // modem task → main loop
|
||||
|
||||
SemaphoreHandle_t _uartMutex = nullptr;
|
||||
|
||||
@@ -280,12 +254,6 @@ private:
|
||||
void queueCallEvent(CallEventType type, const char* phone = nullptr, uint32_t duration = 0);
|
||||
void handleRingtone(); // Play tone bursts while incoming call rings
|
||||
|
||||
// Notification tone transfer and playback (called from modem task)
|
||||
bool transferTonesToModem(); // Transfer embedded WAVs to modem C:/ filesystem
|
||||
bool playModemTone(const char* filename); // AT+CCMXPLAY
|
||||
bool stopModemTone(); // AT+CCMXSTOP
|
||||
void handleNotifTone(); // Poll _pendingToneIdx, play/stop as needed
|
||||
|
||||
// FreeRTOS task
|
||||
static void taskEntry(void* param);
|
||||
void taskLoop();
|
||||
|
||||
@@ -2,14 +2,18 @@
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <SD.h>
|
||||
#include <vector>
|
||||
#include "Utf8CP437.h"
|
||||
#ifdef ESP32
|
||||
#include <SD.h>
|
||||
#include <vector>
|
||||
#include "Utf8CP437.h"
|
||||
#endif
|
||||
#include "../NodePrefs.h"
|
||||
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
|
||||
#ifdef ESP32
|
||||
|
||||
// ============================================================================
|
||||
// Configuration
|
||||
// ============================================================================
|
||||
@@ -909,26 +913,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 +1224,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() {
|
||||
@@ -1411,4 +1372,42 @@ public:
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
#else // !ESP32
|
||||
|
||||
// Non-ESP32 stub: Meshpocket / T-Echo Card have no SD card hardware, so the
|
||||
// full notes editor (which depends on SD.h) can't work here. This stub keeps
|
||||
// UITask.cpp compilable by providing the same public interface as no-ops.
|
||||
// Navigating to notes from the home screen on a Meshpocket will just render
|
||||
// a placeholder message and do nothing.
|
||||
class NotesScreen : public UIScreen {
|
||||
public:
|
||||
typedef uint32_t (*TimeGetterFn)();
|
||||
|
||||
NotesScreen(UITask* task, NodePrefs* prefs = nullptr) {
|
||||
(void)task; (void)prefs;
|
||||
}
|
||||
|
||||
int render(DisplayDriver& display) override {
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.setCursor(0, 20);
|
||||
display.print("Notes: SD card required");
|
||||
display.setCursor(0, 30);
|
||||
display.print("(not available)");
|
||||
return 5000;
|
||||
}
|
||||
|
||||
bool handleInput(char c) override { (void)c; return false; }
|
||||
bool isEditing() const { return false; }
|
||||
void triggerSaveAndExit() {}
|
||||
void exitNotes() {}
|
||||
void enter(DisplayDriver& display) { (void)display; }
|
||||
void setTimestamp(uint32_t rtcTime, int8_t utcOffset) {
|
||||
(void)rtcTime; (void)utcOffset;
|
||||
}
|
||||
void setTimeGetter(TimeGetterFn fn) { (void)fn; }
|
||||
};
|
||||
|
||||
#endif // ESP32
|
||||
@@ -1,260 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// =============================================================================
|
||||
// NotifSounds.h -- Per-channel notification sound configuration
|
||||
//
|
||||
// Stores a custom sound filename per channel for notification tones.
|
||||
// Config persisted to /meshcore/notif_sounds.cfg on SD card.
|
||||
//
|
||||
// Audio variant: Sound files are MP3s in /alarms/ (shared with alarm clock).
|
||||
// Playback is request-based: UITask calls requestPlay() when a message
|
||||
// arrives on a channel with a custom tone. main.cpp loop() polls
|
||||
// hasPendingPlay() and drives the Audio* object.
|
||||
//
|
||||
// 4G variant: Sound files are 8kHz mono WAVs embedded in firmware
|
||||
// (ModemBundledSounds.h) and transferred to modem C:/ filesystem on boot.
|
||||
// UITask calls modemManager.requestNotifTone() directly.
|
||||
//
|
||||
// Guard: MECK_AUDIO_VARIANT || HAS_4G_MODEM
|
||||
// =============================================================================
|
||||
|
||||
#if defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
|
||||
#ifndef NOTIF_SOUNDS_H
|
||||
#define NOTIF_SOUNDS_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <SD.h>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include "variant.h"
|
||||
|
||||
#ifdef HAS_4G_MODEM
|
||||
#include "ModemBundledSounds.h"
|
||||
#endif
|
||||
|
||||
#ifndef MAX_GROUP_CHANNELS
|
||||
#define MAX_GROUP_CHANNELS 20
|
||||
#endif
|
||||
|
||||
#define NOTIF_SOUND_NAME_MAX 32
|
||||
#define NOTIF_SOUND_SLOTS (MAX_GROUP_CHANNELS + 1) // +1 for DMs
|
||||
#define NOTIF_SOUND_CONFIG_PATH "/meshcore/notif_sounds.cfg"
|
||||
#define NOTIF_SOUND_MAGIC 0x4E534E44 // "NSND"
|
||||
#define NOTIF_SOUND_VERSION 1
|
||||
#ifndef ALARMS_FOLDER
|
||||
#define ALARMS_FOLDER "/alarms"
|
||||
#endif
|
||||
|
||||
struct __attribute__((packed)) NotifSoundCfgHeader {
|
||||
uint32_t magic;
|
||||
uint8_t version;
|
||||
uint8_t count; // Number of slots stored
|
||||
uint8_t reserved[2];
|
||||
// Followed by count * NOTIF_SOUND_NAME_MAX bytes
|
||||
};
|
||||
|
||||
class NotifSounds {
|
||||
public:
|
||||
NotifSounds() {
|
||||
memset(_sounds, 0, sizeof(_sounds));
|
||||
#ifdef MECK_AUDIO_VARIANT
|
||||
_pendingPlay = false;
|
||||
_pendingFile[0] = '\0';
|
||||
#endif
|
||||
}
|
||||
|
||||
void begin() {
|
||||
loadConfig();
|
||||
Serial.println("NotifSounds: Config loaded");
|
||||
}
|
||||
|
||||
// --- Config accessors ---
|
||||
|
||||
const char* getSoundForChannel(uint8_t channel_idx) const {
|
||||
int slot = (channel_idx == 0xFF) ? MAX_GROUP_CHANNELS : (int)channel_idx;
|
||||
if (slot < 0 || slot >= NOTIF_SOUND_SLOTS) return "";
|
||||
return _sounds[slot];
|
||||
}
|
||||
|
||||
bool hasSoundForChannel(uint8_t channel_idx) const {
|
||||
const char* s = getSoundForChannel(channel_idx);
|
||||
return s && s[0] != '\0';
|
||||
}
|
||||
|
||||
void setSoundForChannel(uint8_t channel_idx, const char* filename) {
|
||||
int slot = (channel_idx == 0xFF) ? MAX_GROUP_CHANNELS : (int)channel_idx;
|
||||
if (slot < 0 || slot >= NOTIF_SOUND_SLOTS) return;
|
||||
if (filename) {
|
||||
strncpy(_sounds[slot], filename, NOTIF_SOUND_NAME_MAX - 1);
|
||||
_sounds[slot][NOTIF_SOUND_NAME_MAX - 1] = '\0';
|
||||
} else {
|
||||
_sounds[slot][0] = '\0';
|
||||
}
|
||||
saveConfig();
|
||||
Serial.printf("NotifSounds: Channel %d -> '%s'\n", (int)channel_idx,
|
||||
_sounds[slot][0] ? _sounds[slot] : "(default)");
|
||||
}
|
||||
|
||||
void clearSoundForChannel(uint8_t channel_idx) {
|
||||
setSoundForChannel(channel_idx, nullptr);
|
||||
}
|
||||
|
||||
// --- Sound file scanning ---
|
||||
|
||||
void scanSoundFiles() {
|
||||
_soundFiles.clear();
|
||||
|
||||
#ifdef HAS_4G_MODEM
|
||||
// 4G variant: available tones are embedded in firmware
|
||||
for (int i = 0; i < MODEM_BUNDLED_TONE_COUNT; i++) {
|
||||
_soundFiles.push_back(String(modemBundledTones[i].filename));
|
||||
}
|
||||
Serial.printf("NotifSounds: %d modem tones available\n", (int)_soundFiles.size());
|
||||
|
||||
#else // MECK_AUDIO_VARIANT
|
||||
// Audio variant: scan SD card /alarms/ folder for MP3 files
|
||||
if (!SD.exists(ALARMS_FOLDER)) {
|
||||
SD.mkdir(ALARMS_FOLDER);
|
||||
}
|
||||
File root = SD.open(ALARMS_FOLDER);
|
||||
if (!root || !root.isDirectory()) {
|
||||
digitalWrite(SDCARD_CS, HIGH);
|
||||
return;
|
||||
}
|
||||
File entry = root.openNextFile();
|
||||
while (entry) {
|
||||
if (!entry.isDirectory()) {
|
||||
String name = entry.name();
|
||||
if (name.length() > 0 && name.charAt(0) != '.') {
|
||||
String lower = name;
|
||||
lower.toLowerCase();
|
||||
if (lower.endsWith(".mp3")) {
|
||||
_soundFiles.push_back(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
entry = root.openNextFile();
|
||||
}
|
||||
root.close();
|
||||
digitalWrite(SDCARD_CS, HIGH);
|
||||
std::sort(_soundFiles.begin(), _soundFiles.end());
|
||||
Serial.printf("NotifSounds: Found %d sound files\n", (int)_soundFiles.size());
|
||||
#endif
|
||||
}
|
||||
|
||||
int getSoundFileCount() const { return (int)_soundFiles.size(); }
|
||||
const String& getSoundFile(int idx) const { return _soundFiles[idx]; }
|
||||
const std::vector<String>& getSoundFiles() const { return _soundFiles; }
|
||||
|
||||
#ifdef HAS_4G_MODEM
|
||||
// Get the display label for a tone file (4G variant only).
|
||||
// Returns the human-readable label from ModemBundledSounds.
|
||||
const char* getToneLabel(int idx) const {
|
||||
if (idx < 0 || idx >= MODEM_BUNDLED_TONE_COUNT) return "";
|
||||
return modemBundledTones[idx].label;
|
||||
}
|
||||
#endif
|
||||
|
||||
// --- Pending playback request (audio variant only) ---
|
||||
// The 4G variant calls modemManager.requestNotifTone() directly
|
||||
// from UITask; no pending mechanism needed.
|
||||
|
||||
#ifdef MECK_AUDIO_VARIANT
|
||||
void requestPlay(const char* fullPath) {
|
||||
strncpy(_pendingFile, fullPath, sizeof(_pendingFile) - 1);
|
||||
_pendingFile[sizeof(_pendingFile) - 1] = '\0';
|
||||
_pendingPlay = true;
|
||||
}
|
||||
|
||||
bool hasPendingPlay() const { return _pendingPlay; }
|
||||
|
||||
const char* getPendingFile() const { return _pendingFile; }
|
||||
|
||||
void clearPending() {
|
||||
_pendingPlay = false;
|
||||
_pendingFile[0] = '\0';
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
char _sounds[NOTIF_SOUND_SLOTS][NOTIF_SOUND_NAME_MAX];
|
||||
std::vector<String> _soundFiles;
|
||||
|
||||
#ifdef MECK_AUDIO_VARIANT
|
||||
bool _pendingPlay;
|
||||
char _pendingFile[48];
|
||||
#endif
|
||||
|
||||
void loadConfig() {
|
||||
memset(_sounds, 0, sizeof(_sounds));
|
||||
|
||||
if (!SD.exists(NOTIF_SOUND_CONFIG_PATH)) {
|
||||
Serial.println("NotifSounds: No config file, using defaults");
|
||||
digitalWrite(SDCARD_CS, HIGH);
|
||||
return;
|
||||
}
|
||||
|
||||
File f = SD.open(NOTIF_SOUND_CONFIG_PATH, "r");
|
||||
if (!f) {
|
||||
Serial.println("NotifSounds: Failed to open config");
|
||||
return;
|
||||
}
|
||||
|
||||
NotifSoundCfgHeader hdr;
|
||||
if (f.read((uint8_t*)&hdr, sizeof(hdr)) != sizeof(hdr) ||
|
||||
hdr.magic != NOTIF_SOUND_MAGIC || hdr.version != NOTIF_SOUND_VERSION) {
|
||||
Serial.println("NotifSounds: Config invalid or wrong version");
|
||||
f.close();
|
||||
digitalWrite(SDCARD_CS, HIGH);
|
||||
return;
|
||||
}
|
||||
|
||||
int slotsToRead = hdr.count;
|
||||
if (slotsToRead > NOTIF_SOUND_SLOTS) slotsToRead = NOTIF_SOUND_SLOTS;
|
||||
|
||||
for (int i = 0; i < slotsToRead; i++) {
|
||||
if (f.read((uint8_t*)_sounds[i], NOTIF_SOUND_NAME_MAX) != NOTIF_SOUND_NAME_MAX) {
|
||||
break;
|
||||
}
|
||||
_sounds[i][NOTIF_SOUND_NAME_MAX - 1] = '\0'; // Safety null-terminate
|
||||
}
|
||||
|
||||
f.close();
|
||||
digitalWrite(SDCARD_CS, HIGH);
|
||||
Serial.printf("NotifSounds: Loaded %d slots from config\n", slotsToRead);
|
||||
}
|
||||
|
||||
void saveConfig() {
|
||||
if (!SD.exists("/meshcore")) {
|
||||
SD.mkdir("/meshcore");
|
||||
}
|
||||
|
||||
File f = SD.open(NOTIF_SOUND_CONFIG_PATH, FILE_WRITE);
|
||||
if (!f) {
|
||||
Serial.println("NotifSounds: Failed to save config");
|
||||
return;
|
||||
}
|
||||
|
||||
NotifSoundCfgHeader hdr;
|
||||
hdr.magic = NOTIF_SOUND_MAGIC;
|
||||
hdr.version = NOTIF_SOUND_VERSION;
|
||||
hdr.count = NOTIF_SOUND_SLOTS;
|
||||
hdr.reserved[0] = 0;
|
||||
hdr.reserved[1] = 0;
|
||||
f.write((uint8_t*)&hdr, sizeof(hdr));
|
||||
|
||||
for (int i = 0; i < NOTIF_SOUND_SLOTS; i++) {
|
||||
f.write((uint8_t*)_sounds[i], NOTIF_SOUND_NAME_MAX);
|
||||
}
|
||||
|
||||
f.close();
|
||||
digitalWrite(SDCARD_CS, HIGH);
|
||||
}
|
||||
};
|
||||
|
||||
// Global singleton
|
||||
extern NotifSounds notifSounds;
|
||||
|
||||
#endif // NOTIF_SOUNDS_H
|
||||
#endif // MECK_AUDIO_VARIANT || HAS_4G_MODEM
|
||||
@@ -3,13 +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"
|
||||
#if defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
#include "NotifSounds.h"
|
||||
#endif
|
||||
|
||||
// Inline edit hint shown next to values being adjusted
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
@@ -119,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
|
||||
@@ -128,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
|
||||
@@ -173,7 +166,6 @@ enum EditMode : uint8_t {
|
||||
EDIT_PICKER, // A/D cycles options (radio preset, contact mode)
|
||||
EDIT_NUMBER, // W/S adjusts value (freq, BW, SF, CR, TX, UTC)
|
||||
EDIT_CONFIRM, // Confirmation dialog (delete channel, apply radio)
|
||||
EDIT_NOTIF_SOUND, // Sound picker for per-channel notification tone
|
||||
#ifdef MECK_WIFI_COMPANION
|
||||
EDIT_WIFI, // WiFi scan/select/password flow
|
||||
#endif
|
||||
@@ -218,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
|
||||
|
||||
@@ -253,16 +245,8 @@ 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
|
||||
|
||||
// Notification sound picker state
|
||||
#if defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
int _notifSoundSelected; // Cursor in sound picker (0=default/silent, 1+=files)
|
||||
int _notifSoundScroll; // Scroll offset in picker list
|
||||
uint8_t _notifSoundChannel; // Channel index being edited
|
||||
#endif
|
||||
|
||||
// Onboarding mode
|
||||
bool _onboarding;
|
||||
|
||||
@@ -413,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
|
||||
@@ -592,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));
|
||||
@@ -606,11 +584,6 @@ public:
|
||||
_fmError = nullptr;
|
||||
_dnsServer = nullptr;
|
||||
#endif
|
||||
#if defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
_notifSoundSelected = 0;
|
||||
_notifSoundScroll = 0;
|
||||
_notifSoundChannel = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void enter() {
|
||||
@@ -1769,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) {
|
||||
@@ -1805,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",
|
||||
@@ -1935,44 +1886,21 @@ 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) {
|
||||
// Build hint with notification state + actions
|
||||
uint8_t nPref = _prefs->channel_notif[chIdx];
|
||||
const char* nTag = (nPref == NOTIF_NONE) ? "Off" :
|
||||
(nPref == NOTIF_MENTIONS) ? "@" : "All";
|
||||
char hintBuf[40];
|
||||
// Show delete hint on right
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
if (chIdx > 0) {
|
||||
snprintf(hintBuf, sizeof(hintBuf), "Notif:%s Ent:Region Hold:Del", nTag);
|
||||
} else {
|
||||
snprintf(hintBuf, sizeof(hintBuf), "Notif:%s Ent:Region", nTag);
|
||||
}
|
||||
#elif defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
if (chIdx > 0) {
|
||||
snprintf(hintBuf, sizeof(hintBuf), "N:%s T:Tone X:Del", nTag);
|
||||
} else {
|
||||
snprintf(hintBuf, sizeof(hintBuf), "N:%s T:Tone Ent:Region", nTag);
|
||||
}
|
||||
const char* hint = "Hold:Del";
|
||||
#else
|
||||
if (chIdx > 0) {
|
||||
snprintf(hintBuf, sizeof(hintBuf), "N:%s Ent:Region X:Del", nTag);
|
||||
} else {
|
||||
snprintf(hintBuf, sizeof(hintBuf), "N:%s Ent:Region", nTag);
|
||||
}
|
||||
const char* hint = "X:Del";
|
||||
#endif
|
||||
int hintW = display.getTextWidth(hintBuf);
|
||||
int hintW = display.getTextWidth(hint);
|
||||
display.setCursor(display.width() - hintW - 2, y);
|
||||
display.print(hintBuf);
|
||||
display.print(hint);
|
||||
display.setCursor(0, y);
|
||||
}
|
||||
}
|
||||
@@ -2097,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");
|
||||
@@ -2109,92 +2034,6 @@ public:
|
||||
display.setTextSize(1);
|
||||
}
|
||||
|
||||
// === Notification sound picker overlay ===
|
||||
#if defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
if (_editMode == EDIT_NOTIF_SOUND) {
|
||||
int bx = 2, by = 14, bw = display.width() - 4;
|
||||
int bh = display.height() - 28;
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
display.fillRect(bx, by, bw, bh);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(bx, by, bw, bh);
|
||||
|
||||
display.setTextSize(_prefs->smallTextSize());
|
||||
int lineH = _prefs->smallLineH();
|
||||
|
||||
// Header
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.setCursor(bx + 4, by + 3);
|
||||
display.print("Notification Tone");
|
||||
|
||||
int listTop = by + 14;
|
||||
int listBot = by + bh - 14;
|
||||
int maxVisible = (listBot - listTop) / lineH;
|
||||
if (maxVisible < 3) maxVisible = 3;
|
||||
|
||||
// Total items: 1 ("Default") + sound file count
|
||||
const auto& files = notifSounds.getSoundFiles();
|
||||
int totalItems = 1 + (int)files.size();
|
||||
|
||||
// Centre scroll on selection
|
||||
_notifSoundScroll = max(0, min(_notifSoundSelected - maxVisible / 2,
|
||||
totalItems - maxVisible));
|
||||
if (_notifSoundScroll < 0) _notifSoundScroll = 0;
|
||||
int endIdx = min(totalItems, _notifSoundScroll + maxVisible);
|
||||
|
||||
int sy = listTop;
|
||||
for (int i = _notifSoundScroll; i < endIdx && sy + lineH <= listBot; i++) {
|
||||
bool isSel = (i == _notifSoundSelected);
|
||||
|
||||
if (isSel) {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.fillRect(bx + 2, sy + _prefs->smallHighlightOff(), bw - 4, lineH);
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
} else {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
}
|
||||
|
||||
display.setCursor(bx + 6, sy);
|
||||
if (i == 0) {
|
||||
display.print("Default (silent)");
|
||||
} else {
|
||||
// Show filename without extension
|
||||
String displayName = files[i - 1];
|
||||
int dot = displayName.lastIndexOf('.');
|
||||
if (dot > 0) displayName = displayName.substring(0, dot);
|
||||
if (displayName.length() > 28) displayName = displayName.substring(0, 28);
|
||||
display.print(displayName.c_str());
|
||||
}
|
||||
sy += lineH;
|
||||
}
|
||||
|
||||
// Footer
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
int fy = by + bh - 11;
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.setCursor(bx + 4, fy);
|
||||
display.print("Tap:Pick Boot:Back");
|
||||
#else
|
||||
display.setCursor(bx + 4, fy);
|
||||
display.print("Enter:Pick Q:Back");
|
||||
#endif
|
||||
|
||||
// Scroll indicator
|
||||
if (totalItems > maxVisible) {
|
||||
int sbX = bx + bw - 4;
|
||||
int sbH = listBot - listTop;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(sbX, listTop, 3, sbH);
|
||||
int thumbH = max(4, (maxVisible * sbH) / totalItems);
|
||||
int maxScroll = totalItems - maxVisible;
|
||||
if (maxScroll < 1) maxScroll = 1;
|
||||
int thumbY = listTop + (_notifSoundScroll * (sbH - thumbH)) / maxScroll;
|
||||
display.fillRect(sbX + 1, thumbY + 1, 1, thumbH - 2);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MECK_WIFI_COMPANION
|
||||
// === WiFi setup overlay ===
|
||||
if (_editMode == EDIT_WIFI) {
|
||||
@@ -2528,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");
|
||||
@@ -2627,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;
|
||||
@@ -2656,41 +2464,6 @@ public:
|
||||
return true; // consume all keys in confirm mode
|
||||
}
|
||||
|
||||
// --- Notification sound picker ---
|
||||
#if defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
if (_editMode == EDIT_NOTIF_SOUND) {
|
||||
const auto& files = notifSounds.getSoundFiles();
|
||||
int totalItems = 1 + (int)files.size(); // 0=Default, rest=files
|
||||
|
||||
if (c == 'w' || c == 'W' || c == 0xF2 || c == KEY_UP) {
|
||||
if (_notifSoundSelected > 0) _notifSoundSelected--;
|
||||
return true;
|
||||
}
|
||||
if (c == 's' || c == 'S' || c == 0xF1 || c == KEY_DOWN) {
|
||||
if (_notifSoundSelected < totalItems - 1) _notifSoundSelected++;
|
||||
return true;
|
||||
}
|
||||
if (c == '\r' || c == 13) {
|
||||
// Select: 0 = clear (default silent), 1+ = file
|
||||
if (_notifSoundSelected == 0) {
|
||||
notifSounds.clearSoundForChannel(_notifSoundChannel);
|
||||
} else {
|
||||
int fileIdx = _notifSoundSelected - 1;
|
||||
if (fileIdx >= 0 && fileIdx < (int)files.size()) {
|
||||
notifSounds.setSoundForChannel(_notifSoundChannel, files[fileIdx].c_str());
|
||||
}
|
||||
}
|
||||
_editMode = EDIT_NONE;
|
||||
return true;
|
||||
}
|
||||
if (c == 'q' || c == 'Q' || c == '\b') {
|
||||
_editMode = EDIT_NONE;
|
||||
return true;
|
||||
}
|
||||
return true; // consume all keys in picker mode
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MECK_OTA_UPDATE
|
||||
// --- OTA update flow ---
|
||||
if (_editMode == EDIT_OTA) {
|
||||
@@ -2893,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) {
|
||||
@@ -2974,10 +2719,6 @@ public:
|
||||
_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--;
|
||||
@@ -2997,10 +2738,6 @@ public:
|
||||
_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++;
|
||||
@@ -3026,13 +2763,6 @@ public:
|
||||
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) {
|
||||
@@ -3066,10 +2796,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;
|
||||
}
|
||||
@@ -3157,17 +2883,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);
|
||||
@@ -3175,16 +2892,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);
|
||||
@@ -3249,10 +2957,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;
|
||||
@@ -3410,18 +3114,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
|
||||
@@ -3441,45 +3134,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// N: cycle notification preference (All -> Mentions -> None -> All)
|
||||
if (c == 'n' || c == 'N') {
|
||||
if (_rows[_cursor].type == ROW_CHANNEL) {
|
||||
uint8_t chIdx = _rows[_cursor].param;
|
||||
uint8_t cur = _prefs->channel_notif[chIdx];
|
||||
_prefs->channel_notif[chIdx] = (cur + 1) % 3;
|
||||
the_mesh.savePrefs();
|
||||
const char* labels[] = {"All", "Mentions", "Off"};
|
||||
Serial.printf("Settings: Channel %d notif -> %s\n",
|
||||
chIdx, labels[_prefs->channel_notif[chIdx]]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// T: open notification tone picker
|
||||
#if defined(MECK_AUDIO_VARIANT) || defined(HAS_4G_MODEM)
|
||||
if (c == 't' || c == 'T') {
|
||||
if (_rows[_cursor].type == ROW_CHANNEL) {
|
||||
_notifSoundChannel = _rows[_cursor].param;
|
||||
notifSounds.scanSoundFiles();
|
||||
_notifSoundSelected = 0; // 0 = "Default (silent)"
|
||||
_notifSoundScroll = 0;
|
||||
// Pre-select current assignment
|
||||
const char* current = notifSounds.getSoundForChannel(_notifSoundChannel);
|
||||
if (current && current[0] != '\0') {
|
||||
const auto& files = notifSounds.getSoundFiles();
|
||||
for (int i = 0; i < (int)files.size(); i++) {
|
||||
if (files[i] == String(current)) {
|
||||
_notifSoundSelected = i + 1; // +1 because 0 is "Default"
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
_editMode = EDIT_NOTIF_SOUND;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Q: back -- if in sub-screen, return to top level; else exit settings
|
||||
if (c == 'q' || c == 'Q') {
|
||||
if (_subScreen != SUB_NONE) {
|
||||
@@ -3497,21 +3151,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
|
||||
}
|
||||
|
||||
@@ -1,489 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
// =============================================================================
|
||||
// SnakeScreen -- Classic Nokia-style Snake for Meck e-ink devices
|
||||
//
|
||||
// T-Deck Pro: 8x8 pixel cells on 240x320 display
|
||||
// T5S3: 4x4 pixel cells on 128x128 virtual display
|
||||
//
|
||||
// The 800ms partial refresh floor naturally produces Nokia-era tick speed.
|
||||
// Snake body stored as circular buffer -- ~1KB, no PSRAM needed.
|
||||
// Game state persists when switching screens (auto-pause on exit).
|
||||
//
|
||||
// High scores: top 10 scores with dates stored to /games/snake_hi.dat on SD.
|
||||
// =============================================================================
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <SD.h>
|
||||
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
|
||||
// -- Grid sizing per platform --
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
#define SNAKE_CELL 4
|
||||
#define SNAKE_HDR 14
|
||||
#define SNAKE_FTR 10
|
||||
#else
|
||||
#define SNAKE_CELL 8
|
||||
#define SNAKE_HDR 14
|
||||
#define SNAKE_FTR 14
|
||||
#endif
|
||||
|
||||
#define SNAKE_MAX_LEN 512
|
||||
#define SNAKE_HI_COUNT 10
|
||||
#define SNAKE_HI_PATH "/games/snake_hi.dat"
|
||||
#define SNAKE_HI_VERSION 1
|
||||
|
||||
class SnakeScreen : public UIScreen {
|
||||
public:
|
||||
enum GameState { READY, PLAYING, GAME_OVER };
|
||||
enum Direction { UP, DOWN, LEFT, RIGHT };
|
||||
|
||||
struct HiScoreEntry {
|
||||
uint16_t score;
|
||||
uint32_t timestamp; // Unix epoch from RTC
|
||||
};
|
||||
|
||||
private:
|
||||
UITask* _task;
|
||||
mesh::RTCClock* _rtc;
|
||||
bool _wantsExit;
|
||||
|
||||
// Grid dimensions (computed once from display size on first render)
|
||||
int _gridW, _gridH;
|
||||
int _offsetX, _offsetY;
|
||||
|
||||
// Snake body circular buffer
|
||||
struct Cell { uint8_t x, y; };
|
||||
Cell _body[SNAKE_MAX_LEN];
|
||||
int _headIdx;
|
||||
int _length;
|
||||
|
||||
// Game state
|
||||
GameState _state;
|
||||
Direction _dir;
|
||||
Direction _pendingDir;
|
||||
Cell _food;
|
||||
int _score;
|
||||
unsigned long _lastTick;
|
||||
unsigned long _tickInterval;
|
||||
|
||||
// High scores
|
||||
HiScoreEntry _hiScores[SNAKE_HI_COUNT];
|
||||
int _hiCount;
|
||||
bool _newHiScore;
|
||||
int _newHiRank; // 0-based rank of newly inserted score (-1 if none)
|
||||
|
||||
// Simple xorshift PRNG
|
||||
uint16_t _rngState;
|
||||
|
||||
uint16_t rng() {
|
||||
_rngState ^= _rngState << 7;
|
||||
_rngState ^= _rngState >> 9;
|
||||
_rngState ^= _rngState << 8;
|
||||
return _rngState;
|
||||
}
|
||||
|
||||
void spawnFood() {
|
||||
for (int attempt = 0; attempt < 50; attempt++) {
|
||||
int fx = rng() % _gridW;
|
||||
int fy = rng() % _gridH;
|
||||
if (!isSnakeAt(fx, fy)) {
|
||||
_food.x = fx;
|
||||
_food.y = fy;
|
||||
return;
|
||||
}
|
||||
}
|
||||
for (int gy = 0; gy < _gridH; gy++) {
|
||||
for (int gx = 0; gx < _gridW; gx++) {
|
||||
if (!isSnakeAt(gx, gy)) {
|
||||
_food.x = gx;
|
||||
_food.y = gy;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool isSnakeAt(int x, int y) const {
|
||||
for (int i = 0; i < _length; i++) {
|
||||
int idx = (_headIdx - i + SNAKE_MAX_LEN) % SNAKE_MAX_LEN;
|
||||
if (_body[idx].x == x && _body[idx].y == y) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Cell getHead() const { return _body[_headIdx]; }
|
||||
|
||||
void resetGame() {
|
||||
int cx = _gridW / 2;
|
||||
int cy = _gridH / 2;
|
||||
_length = 3;
|
||||
_headIdx = 2;
|
||||
_body[0] = { (uint8_t)(cx - 2), (uint8_t)cy };
|
||||
_body[1] = { (uint8_t)(cx - 1), (uint8_t)cy };
|
||||
_body[2] = { (uint8_t)cx, (uint8_t)cy };
|
||||
_dir = RIGHT;
|
||||
_pendingDir = RIGHT;
|
||||
_score = 0;
|
||||
_tickInterval = 500;
|
||||
_newHiScore = false;
|
||||
_newHiRank = -1;
|
||||
_rngState = (uint16_t)(millis() ^ 0xA5A5);
|
||||
spawnFood();
|
||||
}
|
||||
|
||||
bool tick() {
|
||||
_dir = _pendingDir;
|
||||
Cell head = getHead();
|
||||
int nx = head.x;
|
||||
int ny = head.y;
|
||||
switch (_dir) {
|
||||
case UP: ny--; break;
|
||||
case DOWN: ny++; break;
|
||||
case LEFT: nx--; break;
|
||||
case RIGHT: nx++; break;
|
||||
}
|
||||
|
||||
if (nx < 0 || nx >= _gridW || ny < 0 || ny >= _gridH) {
|
||||
onDeath();
|
||||
return false;
|
||||
}
|
||||
|
||||
bool eating = (nx == _food.x && ny == _food.y);
|
||||
int checkLen = eating ? _length : (_length - 1);
|
||||
for (int i = 0; i < checkLen; i++) {
|
||||
int idx = (_headIdx - i + SNAKE_MAX_LEN) % SNAKE_MAX_LEN;
|
||||
if (_body[idx].x == nx && _body[idx].y == ny) {
|
||||
onDeath();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
_headIdx = (_headIdx + 1) % SNAKE_MAX_LEN;
|
||||
_body[_headIdx] = { (uint8_t)nx, (uint8_t)ny };
|
||||
|
||||
if (eating) {
|
||||
_length++;
|
||||
if (_length >= SNAKE_MAX_LEN) _length = SNAKE_MAX_LEN;
|
||||
_score += 10;
|
||||
spawnFood();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void onDeath() {
|
||||
_state = GAME_OVER;
|
||||
if (_score > 0) {
|
||||
_newHiRank = insertHiScore(_score);
|
||||
_newHiScore = (_newHiRank >= 0);
|
||||
if (_newHiScore) saveHiScores();
|
||||
}
|
||||
}
|
||||
|
||||
void drawCellFilled(DisplayDriver& display, int gx, int gy) const {
|
||||
int px = _offsetX + gx * SNAKE_CELL;
|
||||
int py = _offsetY + gy * SNAKE_CELL;
|
||||
display.fillRect(px, py, SNAKE_CELL, SNAKE_CELL);
|
||||
}
|
||||
|
||||
void drawCellOutline(DisplayDriver& display, int gx, int gy) const {
|
||||
int px = _offsetX + gx * SNAKE_CELL;
|
||||
int py = _offsetY + gy * SNAKE_CELL;
|
||||
display.drawRect(px, py, SNAKE_CELL, SNAKE_CELL);
|
||||
}
|
||||
|
||||
// --- High score persistence ---
|
||||
|
||||
void loadHiScores() {
|
||||
_hiCount = 0;
|
||||
memset(_hiScores, 0, sizeof(_hiScores));
|
||||
if (!SD.exists(SNAKE_HI_PATH)) return;
|
||||
|
||||
File f = SD.open(SNAKE_HI_PATH, FILE_READ);
|
||||
if (!f) return;
|
||||
|
||||
uint8_t ver = 0;
|
||||
if (f.read(&ver, 1) != 1 || ver != SNAKE_HI_VERSION) { f.close(); return; }
|
||||
|
||||
uint8_t count = 0;
|
||||
if (f.read(&count, 1) != 1) { f.close(); return; }
|
||||
if (count > SNAKE_HI_COUNT) count = SNAKE_HI_COUNT;
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
uint8_t buf[6];
|
||||
if (f.read(buf, 6) != 6) break;
|
||||
_hiScores[i].score = (uint16_t)buf[0] | ((uint16_t)buf[1] << 8);
|
||||
_hiScores[i].timestamp = (uint32_t)buf[2] | ((uint32_t)buf[3] << 8)
|
||||
| ((uint32_t)buf[4] << 16) | ((uint32_t)buf[5] << 24);
|
||||
_hiCount++;
|
||||
}
|
||||
f.close();
|
||||
}
|
||||
|
||||
void saveHiScores() {
|
||||
if (!SD.exists("/games")) SD.mkdir("/games");
|
||||
if (SD.exists(SNAKE_HI_PATH)) SD.remove(SNAKE_HI_PATH);
|
||||
|
||||
File f = SD.open(SNAKE_HI_PATH, FILE_WRITE);
|
||||
if (!f) return;
|
||||
|
||||
uint8_t ver = SNAKE_HI_VERSION;
|
||||
f.write(&ver, 1);
|
||||
uint8_t count = (uint8_t)_hiCount;
|
||||
f.write(&count, 1);
|
||||
|
||||
for (int i = 0; i < _hiCount; i++) {
|
||||
uint8_t buf[6];
|
||||
buf[0] = _hiScores[i].score & 0xFF;
|
||||
buf[1] = (_hiScores[i].score >> 8) & 0xFF;
|
||||
buf[2] = _hiScores[i].timestamp & 0xFF;
|
||||
buf[3] = (_hiScores[i].timestamp >> 8) & 0xFF;
|
||||
buf[4] = (_hiScores[i].timestamp >> 16) & 0xFF;
|
||||
buf[5] = (_hiScores[i].timestamp >> 24) & 0xFF;
|
||||
f.write(buf, 6);
|
||||
}
|
||||
f.close();
|
||||
}
|
||||
|
||||
int insertHiScore(int score) {
|
||||
uint32_t now = (_rtc != nullptr) ? _rtc->getCurrentTime() : 0;
|
||||
int pos = _hiCount;
|
||||
for (int i = 0; i < _hiCount; i++) {
|
||||
if ((uint16_t)score > _hiScores[i].score) { pos = i; break; }
|
||||
}
|
||||
if (pos >= SNAKE_HI_COUNT) return -1;
|
||||
|
||||
int newCount = _hiCount + 1;
|
||||
if (newCount > SNAKE_HI_COUNT) newCount = SNAKE_HI_COUNT;
|
||||
for (int i = newCount - 1; i > pos; i--) _hiScores[i] = _hiScores[i - 1];
|
||||
|
||||
_hiScores[pos].score = (uint16_t)score;
|
||||
_hiScores[pos].timestamp = now;
|
||||
_hiCount = newCount;
|
||||
return pos;
|
||||
}
|
||||
|
||||
static void formatDate(uint32_t ts, char* buf, int bufLen) {
|
||||
if (ts == 0) { snprintf(buf, bufLen, "--"); return; }
|
||||
uint32_t days = ts / 86400;
|
||||
int year = 1970;
|
||||
while (true) {
|
||||
int diy = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 366 : 365;
|
||||
if (days < (uint32_t)diy) break;
|
||||
days -= diy;
|
||||
year++;
|
||||
}
|
||||
static const int dim[] = {31,28,31,30,31,30,31,31,30,31,30,31};
|
||||
static const char* mn[] = {"Jan","Feb","Mar","Apr","May","Jun",
|
||||
"Jul","Aug","Sep","Oct","Nov","Dec"};
|
||||
bool leap = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
|
||||
int month = 0;
|
||||
for (month = 0; month < 12; month++) {
|
||||
int d = dim[month];
|
||||
if (month == 1 && leap) d = 29;
|
||||
if (days < (uint32_t)d) break;
|
||||
days -= d;
|
||||
}
|
||||
if (month > 11) month = 11;
|
||||
snprintf(buf, bufLen, "%d %s %d", (int)(days + 1), mn[month], year);
|
||||
}
|
||||
|
||||
public:
|
||||
SnakeScreen(UITask* task, mesh::RTCClock* rtc)
|
||||
: _task(task), _rtc(rtc), _wantsExit(false), _gridW(0), _gridH(0),
|
||||
_offsetX(0), _offsetY(0), _headIdx(0), _length(0),
|
||||
_state(READY), _dir(RIGHT), _pendingDir(RIGHT),
|
||||
_score(0), _lastTick(0), _tickInterval(500), _rngState(0xBEEF),
|
||||
_hiCount(0), _newHiScore(false), _newHiRank(-1) {
|
||||
_food = {0, 0};
|
||||
memset(_body, 0, sizeof(_body));
|
||||
memset(_hiScores, 0, sizeof(_hiScores));
|
||||
}
|
||||
|
||||
bool wantsExit() const { return _wantsExit; }
|
||||
void clearExit() { _wantsExit = false; }
|
||||
GameState getState() const { return _state; }
|
||||
|
||||
void enter() {
|
||||
_wantsExit = false;
|
||||
loadHiScores();
|
||||
_lastTick = millis();
|
||||
}
|
||||
|
||||
bool handleInput(char c) override {
|
||||
switch (_state) {
|
||||
case READY:
|
||||
if (c == '\r') { _state = PLAYING; _lastTick = millis(); return true; }
|
||||
if (c == 'q' || c == 'Q') { _wantsExit = true; return true; }
|
||||
return false;
|
||||
case PLAYING:
|
||||
switch (c) {
|
||||
case 'w': case 'W': if (_dir != DOWN) _pendingDir = UP; return true;
|
||||
case 's': case 'S': if (_dir != UP) _pendingDir = DOWN; return true;
|
||||
case 'a': case 'A': if (_dir != RIGHT) _pendingDir = LEFT; return true;
|
||||
case 'd': case 'D': if (_dir != LEFT) _pendingDir = RIGHT; return true;
|
||||
case 'q': case 'Q': _wantsExit = true; return true;
|
||||
default: return false;
|
||||
}
|
||||
case GAME_OVER:
|
||||
if (c == '\r') { resetGame(); _state = PLAYING; _lastTick = millis(); return true; }
|
||||
if (c == 'q' || c == 'Q') { _wantsExit = true; return true; }
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int render(DisplayDriver& display) override {
|
||||
if (_gridW == 0) {
|
||||
int usableW = display.width();
|
||||
int usableH = display.height() - SNAKE_HDR - SNAKE_FTR;
|
||||
_gridW = usableW / SNAKE_CELL;
|
||||
_gridH = usableH / SNAKE_CELL;
|
||||
_offsetX = (usableW - _gridW * SNAKE_CELL) / 2;
|
||||
_offsetY = SNAKE_HDR + (usableH - _gridH * SNAKE_CELL) / 2;
|
||||
resetGame();
|
||||
}
|
||||
|
||||
display.startFrame();
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(display.width() / 2, 2, "Snake");
|
||||
#else
|
||||
display.setCursor(2, 2);
|
||||
display.print("Snake");
|
||||
char scoreBuf[16];
|
||||
snprintf(scoreBuf, sizeof(scoreBuf), "Score: %d", _score);
|
||||
int sw = display.getTextWidth(scoreBuf);
|
||||
display.setCursor(display.width() - sw - 2, 2);
|
||||
display.print(scoreBuf);
|
||||
#endif
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(0, SNAKE_HDR - 2, display.width(), 1);
|
||||
|
||||
if (_state == READY) {
|
||||
int cx = display.width() / 2;
|
||||
int y = SNAKE_HDR + 6;
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawTextCentered(cx, y, "Classic Snake");
|
||||
y += 14;
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(cx, y, "Swipe to steer");
|
||||
#else
|
||||
display.drawTextCentered(cx, y, "W/S/A/D to steer");
|
||||
#endif
|
||||
y += 11;
|
||||
display.drawTextCentered(cx, y, "Eat food to grow");
|
||||
y += 11;
|
||||
display.drawTextCentered(cx, y, "Steer clear of walls");
|
||||
y += 16;
|
||||
|
||||
if (_hiCount > 0) {
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawTextCentered(cx, y, "-- High Scores --");
|
||||
y += 12;
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
int showCount = (_hiCount < 5) ? _hiCount : 5;
|
||||
#else
|
||||
int showCount = (_hiCount < 10) ? _hiCount : 10;
|
||||
#endif
|
||||
for (int i = 0; i < showCount; i++) {
|
||||
char dateBuf[16];
|
||||
formatDate(_hiScores[i].timestamp, dateBuf, sizeof(dateBuf));
|
||||
char line[48];
|
||||
snprintf(line, sizeof(line), "%d. %d %s", i + 1, _hiScores[i].score, dateBuf);
|
||||
display.drawTextCentered(cx, y, line);
|
||||
y += 10;
|
||||
}
|
||||
y += 4;
|
||||
} else {
|
||||
y += 8;
|
||||
}
|
||||
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
display.drawTextCentered(cx, y, "Tap to start");
|
||||
#else
|
||||
display.drawTextCentered(cx, y, "Press Enter to start");
|
||||
#endif
|
||||
} else {
|
||||
if (_state == PLAYING) {
|
||||
unsigned long now = millis();
|
||||
if (now - _lastTick >= _tickInterval) { tick(); _lastTick = now; }
|
||||
}
|
||||
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(_offsetX - 1, _offsetY - 1,
|
||||
_gridW * SNAKE_CELL + 2, _gridH * SNAKE_CELL + 2);
|
||||
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
drawCellFilled(display, _food.x, _food.y);
|
||||
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
for (int i = 0; i < _length; i++) {
|
||||
int idx = (_headIdx - i + SNAKE_MAX_LEN) % SNAKE_MAX_LEN;
|
||||
if (i == 0) drawCellFilled(display, _body[idx].x, _body[idx].y);
|
||||
else drawCellOutline(display, _body[idx].x, _body[idx].y);
|
||||
}
|
||||
|
||||
if (_state == GAME_OVER) {
|
||||
int cx = display.width() / 2;
|
||||
int cy = display.height() / 2;
|
||||
int boxW = display.width() * 3 / 4;
|
||||
int boxH = _newHiScore ? 60 : 50;
|
||||
int boxX = cx - boxW / 2;
|
||||
int boxY = cy - boxH / 2;
|
||||
|
||||
display.setColor(DisplayDriver::DARK);
|
||||
display.fillRect(boxX, boxY, boxW, boxH);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.drawRect(boxX, boxY, boxW, boxH);
|
||||
|
||||
int ty = boxY + 8;
|
||||
display.drawTextCentered(cx, ty, "Game Over");
|
||||
ty += 14;
|
||||
char finalScore[24];
|
||||
snprintf(finalScore, sizeof(finalScore), "Score: %d", _score);
|
||||
display.drawTextCentered(cx, ty, finalScore);
|
||||
ty += 12;
|
||||
if (_newHiScore) {
|
||||
display.setColor(DisplayDriver::YELLOW);
|
||||
char rankBuf[32];
|
||||
snprintf(rankBuf, sizeof(rankBuf), "New #%d High Score!", _newHiRank + 1);
|
||||
display.drawTextCentered(cx, ty, rankBuf);
|
||||
ty += 12;
|
||||
}
|
||||
display.setColor(DisplayDriver::GREEN);
|
||||
display.drawTextCentered(cx, ty, "Enter:Retry Q:Back");
|
||||
}
|
||||
}
|
||||
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro)
|
||||
char footBuf[32];
|
||||
snprintf(footBuf, sizeof(footBuf), "Score: %d", _score);
|
||||
display.setTextSize(0);
|
||||
display.drawTextCentered(display.width() / 2, display.height() - 8, footBuf);
|
||||
display.setTextSize(1);
|
||||
#else
|
||||
display.setTextSize(1);
|
||||
int fy = display.height() - 12;
|
||||
display.drawRect(0, fy - 2, display.width(), 1);
|
||||
if (_state == PLAYING) {
|
||||
display.setCursor(2, fy);
|
||||
display.print("Q:Back");
|
||||
} else if (_state == READY) {
|
||||
display.setCursor(2, fy);
|
||||
display.print("Enter:Start Q:Back");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (_state == PLAYING) return 100;
|
||||
return 5000;
|
||||
}
|
||||
};
|
||||
@@ -2,21 +2,25 @@
|
||||
|
||||
#include <helpers/ui/UIScreen.h>
|
||||
#include <helpers/ui/DisplayDriver.h>
|
||||
#include <SD.h>
|
||||
#include <vector>
|
||||
#include "Utf8CP437.h"
|
||||
#include "EpubProcessor.h"
|
||||
#ifdef ESP32
|
||||
#include <SD.h>
|
||||
#include <vector>
|
||||
#include "Utf8CP437.h"
|
||||
#include "EpubProcessor.h"
|
||||
#endif
|
||||
#include "../NodePrefs.h"
|
||||
|
||||
// Forward declarations
|
||||
class UITask;
|
||||
|
||||
#ifdef ESP32
|
||||
|
||||
// ============================================================================
|
||||
// Configuration
|
||||
// ============================================================================
|
||||
#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 +110,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 +239,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 +251,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 +273,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 +326,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 +381,7 @@ inline int indexPagesWordWrapPixel(File& file, long startPos,
|
||||
display->setTextSize(1); // Restore
|
||||
return pagesAdded;
|
||||
}
|
||||
#endif // LilyGo_T5S3_EPaper_Pro
|
||||
|
||||
// ============================================================================
|
||||
// TextReaderScreen
|
||||
@@ -401,8 +406,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 +631,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 +685,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 +718,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 +939,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 +967,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 +1113,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 +1180,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 +1285,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 +1310,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 +1348,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 +1382,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 +1486,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 +1616,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 +1682,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 +1775,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 +1784,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 +1853,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,
|
||||
@@ -2004,4 +1952,42 @@ public:
|
||||
if (_fileOpen) closeBook();
|
||||
_mode = FILE_LIST;
|
||||
}
|
||||
};
|
||||
};
|
||||
#else // !ESP32
|
||||
|
||||
// Non-ESP32 stub: Meshpocket / T-Echo Card have no SD card hardware, so the
|
||||
// full EPUB/text reader can't work here. This stub keeps UITask.cpp and
|
||||
// main.cpp compilable by providing the same public interface as no-ops.
|
||||
// Navigating to the reader on a non-SD board just shows a placeholder.
|
||||
class TextReaderScreen : public UIScreen {
|
||||
public:
|
||||
TextReaderScreen(UITask* task, NodePrefs* prefs = nullptr) {
|
||||
(void)task; (void)prefs;
|
||||
}
|
||||
|
||||
int render(DisplayDriver& display) override {
|
||||
display.setTextSize(1);
|
||||
display.setColor(DisplayDriver::LIGHT);
|
||||
display.setCursor(0, 20);
|
||||
display.print("Reader: SD card required");
|
||||
display.setCursor(0, 30);
|
||||
display.print("(not available)");
|
||||
return 5000;
|
||||
}
|
||||
|
||||
bool handleInput(char c) override { (void)c; return false; }
|
||||
|
||||
// No-op public API matching the ESP32 class for call-site compatibility
|
||||
void invalidateLayout() {}
|
||||
void bootIndex(DisplayDriver& display) { (void)display; }
|
||||
void setSDReady(bool ready) { (void)ready; }
|
||||
void enter(DisplayDriver& display) { (void)display; }
|
||||
bool isReading() const { return false; }
|
||||
bool isInFileList() const { return false; }
|
||||
void gotoPage(int pageNum) { (void)pageNum; }
|
||||
int getTotalPages() const { return 0; }
|
||||
int selectRowAtVY(int vy) { (void)vy; return -1; }
|
||||
void exitReader() {}
|
||||
};
|
||||
|
||||
#endif // ESP32
|
||||
@@ -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
@@ -62,11 +62,10 @@ class UITask : public AbstractUITask {
|
||||
unsigned long _alert_expiry;
|
||||
bool _hintActive = false; // Boot navigation hint overlay
|
||||
unsigned long _hintExpiry = 0; // Auto-dismiss time for hint
|
||||
bool _pendingBootHint = false; // Deferred hint -- show after splash screen
|
||||
bool _pendingBootHint = false; // Deferred hint — show after splash screen
|
||||
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;
|
||||
@@ -80,9 +79,10 @@ class UITask : public AbstractUITask {
|
||||
|
||||
UIScreen* splash;
|
||||
UIScreen* home;
|
||||
#ifndef HELTEC_MESH_POCKET
|
||||
UIScreen* msg_preview;
|
||||
#endif
|
||||
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,10 +99,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)
|
||||
UIScreen* games_menu_screen; // Games launcher menu
|
||||
UIScreen* snake_screen; // Snake game screen
|
||||
UIScreen* minesweeper_screen; // Minesweeper game screen
|
||||
#ifdef MECK_WEB_READER
|
||||
UIScreen* web_reader; // Web reader screen (lazy-init, WiFi required)
|
||||
#endif
|
||||
@@ -122,7 +118,7 @@ class UITask : public AbstractUITask {
|
||||
UIScreen* _screenBeforeVKB = nullptr;
|
||||
unsigned long _vkbOpenedAt = 0;
|
||||
|
||||
// Powersaving: light sleep when locked + idle (standalone only -- no BLE/WiFi)
|
||||
// Powersaving: light sleep when locked + idle (standalone only — no BLE/WiFi)
|
||||
// Wakes on LoRa packet (DIO1), boot button (GPIO0), or 30-min timer
|
||||
#if !defined(BLE_PIN_CODE) && !defined(MECK_WIFI_COMPANION)
|
||||
unsigned long _psLastActive = 0; // millis() at last wake or lock entry
|
||||
@@ -185,8 +181,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
|
||||
@@ -204,10 +199,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
|
||||
void gotoGamesMenu(); // Navigate to games launcher menu
|
||||
void gotoSnakeScreen(); // Navigate to snake game
|
||||
void gotoMinesweeperScreen(); // Navigate to minesweeper game
|
||||
#if HAS_GPS
|
||||
void gotoMapScreen(); // Navigate to map tile screen
|
||||
#endif
|
||||
@@ -224,8 +215,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() {
|
||||
@@ -240,12 +229,11 @@ public:
|
||||
int getDMUnreadCount(int contactIdx) const;
|
||||
void clearDMUnread(int contactIdx);
|
||||
|
||||
// Flag: suppress room->conversation redirect on next login (L key admin access)
|
||||
// Flag: suppress room→conversation redirect on next login (L key admin access)
|
||||
bool _skipRoomRedirect = false;
|
||||
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; }
|
||||
@@ -264,10 +252,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 isOnGamesMenu() const { return curr == games_menu_screen; }
|
||||
bool isOnSnakeScreen() const { return curr == snake_screen; }
|
||||
bool isOnMinesweeperScreen() const { return curr == minesweeper_screen; }
|
||||
bool isOnMapScreen() const { return curr == map_screen; }
|
||||
#if defined(LilyGo_T5S3_EPaper_Pro) || defined(LilyGo_TDeck_Pro)
|
||||
bool isLocked() const { return _locked; }
|
||||
@@ -306,7 +290,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);
|
||||
@@ -317,31 +300,25 @@ 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; }
|
||||
#ifndef HELTEC_MESH_POCKET
|
||||
UIScreen* getMsgPreviewScreen() const { return msg_preview; }
|
||||
#endif
|
||||
UIScreen* getTextReaderScreen() const { return text_reader; } // *** NEW ***
|
||||
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; }
|
||||
@@ -352,10 +329,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* getGamesMenuScreen() const { return games_menu_screen; }
|
||||
UIScreen* getSnakeScreen() const { return snake_screen; }
|
||||
UIScreen* getMinesweeperScreen() const { return minesweeper_screen; }
|
||||
UIScreen* getMapScreen() const { return map_screen; }
|
||||
#ifdef MECK_WEB_READER
|
||||
UIScreen* getWebReaderScreen() const { return web_reader; }
|
||||
|
||||
@@ -91,7 +91,6 @@ static const char* EMOJI_LABELS[EMOJI_COUNT] = {
|
||||
"HFC", // 73 passport_control
|
||||
"Star", // 74 eight_spoked_asterisk
|
||||
"Sig", // 75 signal_strength
|
||||
"Beer", // 76 beer
|
||||
};
|
||||
|
||||
struct EmojiPicker {
|
||||
|
||||
@@ -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
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
// =============================================================================
|
||||
// HomeIcons -- 12x12 icon sprites for T5S3 home screen tiles
|
||||
// HomeIcons — 12x12 icon sprites for T5S3 home screen tiles
|
||||
// MSB-first, 2 bytes per row (same format as emoji sprites)
|
||||
// =============================================================================
|
||||
|
||||
@@ -48,34 +48,13 @@ static const uint8_t icon_search[] PROGMEM = {
|
||||
0x3C,0x00, 0x03,0x00, 0x01,0x80, 0x00,0xC0, 0x00,0x40, 0x00,0x00,
|
||||
};
|
||||
|
||||
// ⏰ Alarm Clock (AlarmScreen) -- 12x12 home tile icon
|
||||
// ⏰ Alarm Clock (AlarmScreen) — 12x12 home tile icon
|
||||
static const uint8_t icon_alarm[] PROGMEM = {
|
||||
0x40,0x40, 0x9E,0x20, 0x20,0x80, 0x44,0x40, 0x44,0x40, 0x46,0x40,
|
||||
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,
|
||||
};
|
||||
|
||||
// 🎮 Gamepad (Games)
|
||||
// ..########..
|
||||
// .#........#.
|
||||
// .#..#..##.#.
|
||||
// .#.###....#.
|
||||
// .#..#..##.#.
|
||||
// .#........#.
|
||||
// ..##....##..
|
||||
// ...#....#...
|
||||
// ...######...
|
||||
static const uint8_t icon_gamepad[] PROGMEM = {
|
||||
0x00,0x00, 0x3F,0xC0, 0x40,0x20, 0x49,0xA0, 0x5C,0x20, 0x49,0xA0,
|
||||
0x40,0x20, 0x30,0xC0, 0x10,0x80, 0x1F,0x80, 0x00,0x00, 0x00,0x00,
|
||||
};
|
||||
|
||||
// 🔔 Bell -- 7x8 status bar indicator (alarm enabled)
|
||||
// 🔔 Bell — 7x8 status bar indicator (alarm enabled)
|
||||
// MSB-first, 1 byte per row
|
||||
#define BELL_ICON_W 7
|
||||
#define BELL_ICON_H 8
|
||||
|
||||
@@ -39,7 +39,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 {
|
||||
|
||||
@@ -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)
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -847,7 +802,6 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
|
||||
|
||||
_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) {
|
||||
@@ -1166,26 +1120,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) {
|
||||
@@ -1223,26 +1157,6 @@ void MyMesh::handleCommand(uint32_t sender_timestamp, char *command, char *reply
|
||||
}
|
||||
} 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
|
||||
}
|
||||
|
||||
@@ -1124,24 +1124,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();
|
||||
|
||||
@@ -246,9 +246,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();
|
||||
@@ -302,9 +299,6 @@ void loop() {
|
||||
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();
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#ifdef MECK_WIFI_REMOTE
|
||||
|
||||
#include "target.h"
|
||||
#include "WiFiMQTT.h"
|
||||
#include <esp_mac.h>
|
||||
#include <Update.h>
|
||||
#include <HTTPClient.h>
|
||||
#include "target.h"
|
||||
|
||||
WiFiMQTT wifiMQTT;
|
||||
|
||||
@@ -373,24 +373,19 @@ void WiFiMQTT::publishQueuedResponses() {
|
||||
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];
|
||||
char json[400];
|
||||
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}",
|
||||
"\"heap\":%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);
|
||||
ESP.getFreeHeap());
|
||||
|
||||
_mqttClient.publish(_topicTelem, json);
|
||||
}
|
||||
@@ -408,39 +403,34 @@ void WiFiMQTT::performOTA() {
|
||||
_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)) {
|
||||
if (!http.begin(_wifiClient, _otaUrl)) {
|
||||
Serial.println("[OTA] HTTP begin failed");
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING; // trigger MQTT reconnect
|
||||
_mqttClient.publish(_topicRsp, "OTA: HTTP begin failed");
|
||||
_state = WiFiMQTTState::CONNECTED;
|
||||
return;
|
||||
}
|
||||
|
||||
int httpCode = http.GET();
|
||||
if (httpCode != HTTP_CODE_OK) {
|
||||
Serial.printf("[OTA] HTTP error: %d\n", httpCode);
|
||||
char msg[60];
|
||||
snprintf(msg, sizeof(msg), "OTA: HTTP error %d", httpCode);
|
||||
_mqttClient.publish(_topicRsp, msg);
|
||||
http.end();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
_state = WiFiMQTTState::CONNECTED;
|
||||
return;
|
||||
}
|
||||
|
||||
int fileSize = http.getSize();
|
||||
if (fileSize <= 0) {
|
||||
Serial.println("[OTA] Unknown content length");
|
||||
_mqttClient.publish(_topicRsp, "OTA: Unknown file size");
|
||||
http.end();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
_state = WiFiMQTTState::CONNECTED;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -448,8 +438,9 @@ void WiFiMQTT::performOTA() {
|
||||
|
||||
if (!Update.begin(fileSize)) {
|
||||
Serial.printf("[OTA] Update.begin failed: %s\n", Update.errorString());
|
||||
_mqttClient.publish(_topicRsp, "OTA: Flash init failed");
|
||||
http.end();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
_state = WiFiMQTTState::CONNECTED;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -481,6 +472,10 @@ void WiFiMQTT::performOTA() {
|
||||
int pct = (offset * 100) / fileSize;
|
||||
if (pct / 10 != lastPct / 10) {
|
||||
Serial.printf("[OTA] Progress: %d%% (%d/%d)\n", pct, offset, fileSize);
|
||||
char msg[60];
|
||||
snprintf(msg, sizeof(msg), "OTA: Flashing %d%%", pct);
|
||||
_mqttClient.publish(_topicRsp, msg);
|
||||
_mqttClient.loop();
|
||||
lastPct = pct;
|
||||
}
|
||||
|
||||
@@ -492,17 +487,21 @@ void WiFiMQTT::performOTA() {
|
||||
if (offset < fileSize) {
|
||||
Serial.printf("[OTA] Incomplete: %d of %d\n", offset, fileSize);
|
||||
Update.abort();
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
_mqttClient.publish(_topicRsp, "OTA: Download incomplete");
|
||||
_state = WiFiMQTTState::CONNECTED;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Update.end(true)) {
|
||||
Serial.printf("[OTA] Update.end failed: %s\n", Update.errorString());
|
||||
_state = WiFiMQTTState::MQTT_CONNECTING;
|
||||
_mqttClient.publish(_topicRsp, "OTA: Verification failed");
|
||||
_state = WiFiMQTTState::CONNECTED;
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println("[OTA] SUCCESS — rebooting in 3 seconds");
|
||||
_mqttClient.publish(_topicRsp, "OTA: Success! Rebooting...");
|
||||
_mqttClient.loop();
|
||||
delay(3000);
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
@@ -103,10 +103,6 @@ struct TelemetryData {
|
||||
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)
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user