Elías Angulo 2024-07-22 04:21:00 +00:00 committed by GitHub
commit 35dc364f6c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
38 changed files with 3614 additions and 89 deletions

View File

@ -16,7 +16,7 @@ jobs:
with: with:
arduino-board-fqbn: esp32:esp32:watchy:Revision=v20,PartitionScheme=min_spiffs,UploadSpeed=921600,DebugLevel=none,EraseFlash=none arduino-board-fqbn: esp32:esp32:watchy:Revision=v20,PartitionScheme=min_spiffs,UploadSpeed=921600,DebugLevel=none,EraseFlash=none
platform-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json platform-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
arduino-platform: esp32:esp32@2.0.17 arduino-platform: esp32:esp32@3.0.3
required-libraries: Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager required-libraries: Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager
set-build-path: true set-build-path: true
- uses: actions/upload-artifact@v3 - uses: actions/upload-artifact@v3

View File

@ -14,9 +14,9 @@ jobs:
- uses: actions/checkout@master - uses: actions/checkout@master
- uses: ArminJo/arduino-test-compile@v3 - uses: ArminJo/arduino-test-compile@v3
with: with:
arduino-board-fqbn: esp32:esp32:watchy:Revision=${{ matrix.board-revisions }},PartitionScheme=min_spiffs,UploadSpeed=921600,DebugLevel=none,EraseFlash=none arduino-board-fqbn: esp32:esp32:watchy:Revision=${{ matrix.board-revisions }},PartitionScheme=huge_app,UploadSpeed=921600,DebugLevel=none,EraseFlash=none
platform-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json platform-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
arduino-platform: esp32:esp32@2.0.17 arduino-platform: esp32:esp32@3.0.3
required-libraries: Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager required-libraries: Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager
set-build-path: true set-build-path: true
- name: Rename binaries with board revision - name: Rename binaries with board revision

39
.github/workflows/v3.actions.yml vendored Normal file
View File

@ -0,0 +1,39 @@
name: ReleaseV3
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
jobs:
release:
name: Build and Release
runs-on: ubuntu-latest
strategy:
matrix:
board-revisions: [v30]
steps:
- uses: actions/checkout@master
- uses: ArminJo/arduino-test-compile@v3
with:
arduino-board-fqbn: esp32:esp32:esp32s3:FlashSize=8M,PartitionScheme=default_8MB,UploadSpeed=921600,DebugLevel=none,EraseFlash=none
platform-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
arduino-platform: esp32:esp32@3.0.3
required-libraries: Adafruit GFX Library,Arduino_JSON,DS3232RTC,NTPClient,Rtc_Pcf8563,GxEPD2,WiFiManager
set-build-path: true
- name: Rename binaries with board revision
run: |
parent_dir="${{ github.workspace }}/examples/WatchFaces"
for dir in "$parent_dir"/*; do
if [ -d "$dir" ]; then
cd "$dir/build"
for file in *; do
name="${file%%.*}"
ext="${file#$name.}"
mv "$file" "$name-${{ matrix.board-revisions }}.$ext"
done
cd -
fi
done
- uses: softprops/action-gh-release@v1
with:
name: "Watchy Arduino Library ${{ github.ref_name }}"
files: ${{ github.workspace }}/examples/WatchFaces/**/build/*.bin

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
.pio/
.vscode/
app/bin/ app/bin/
app/pde.jar app/pde.jar
build/macosx/work/ build/macosx/work/

View File

@ -2,29 +2,15 @@
![Watchy](https://watchy.sqfmi.com/img/watchy_render.png) ![Watchy](https://watchy.sqfmi.com/img/watchy_render.png)
**Buy Watchy from [The Pi Hut](https://thepihut.com/collections/sqfmi), [Crowd Supply](https://www.crowdsupply.com/sqfmi/watchy), and [Mouser](https://www.mouser.com/ProductDetail/SQFMI/SQFMI-WATCHY-10?qs=DRkmTr78QARN9VSJRzqRxw%3D%3D)!** **Buy Watchy from [Mouser](https://www.mouser.com/ProductDetail/SQFMI/SQFMI-WATCHY-10?qs=DRkmTr78QARN9VSJRzqRxw%3D%3D), [The Pi Hut](https://thepihut.com/collections/sqfmi), and [Crowd Supply](https://www.crowdsupply.com/sqfmi/watchy)**
[**Watchy Case & Accessories**](https://shop.sqfmi.com) [**Watchy Case & Accessories**](https://shop.sqfmi.com)
Visit [**https://watchy.sqfmi.com**](https://watchy.sqfmi.com) for documentation, hardware design files, and more! ## Getting Started Guide
Follow the instructions here https://watchy.sqfmi.com/docs/getting-started
## Setup
1. In the Arduino IDE Boards Manager, [install support for the ESP32](https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html).
* Arduino > Preferences > Additional Board Manager URLs
* ```https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json```
2. Install this library (search for **Watchy** in the library manager), and any other dependencies when prompted
3. Check out the examples under ```Examples``` -> ```Watchy```
4. Compile & Upload with these board settings:
* Board: "Watchy"
* Partition Scheme: "Huge App"
* Board Revision: Choose your Watchy version
* All Other Settings: leave to default
You may also have to install the [CP2104 USB to Serial drivers](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers) if the port is not automatically detected.
### Have Fun! :) ### Have Fun! :)
### Got Questions? ### Got Questions?
Join our [Discord](https://discord.gg/ZXDegGV8E7) Join our [Discord](https://discord.gg/ZXDegGV8E7)

View File

@ -16,10 +16,15 @@ void Watchy7SEG::drawWatchFace(){
drawSteps(); drawSteps();
drawWeather(); drawWeather();
drawBattery(); drawBattery();
display.drawBitmap(120, 77, WIFI_CONFIGURED ? wifi : wifioff, 26, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK); display.drawBitmap(116, 75, WIFI_CONFIGURED ? wifi : wifioff, 26, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
if(BLE_CONFIGURED){ if(BLE_CONFIGURED){
display.drawBitmap(100, 75, bluetooth, 13, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK); display.drawBitmap(100, 73, bluetooth, 13, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
} }
#ifdef ARDUINO_ESP32S3_DEV
if(USB_PLUGGED_IN){
display.drawBitmap(140, 75, charge, 16, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
}
#endif
} }
void Watchy7SEG::drawTime(){ void Watchy7SEG::drawTime(){
@ -81,25 +86,25 @@ void Watchy7SEG::drawSteps(){
display.println(stepCount); display.println(stepCount);
} }
void Watchy7SEG::drawBattery(){ void Watchy7SEG::drawBattery(){
display.drawBitmap(154, 73, battery, 37, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK); display.drawBitmap(158, 73, battery, 37, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.fillRect(159, 78, 27, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);//clear battery segments display.fillRect(163, 78, 27, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);//clear battery segments
int8_t batteryLevel = 0; int8_t batteryLevel = 0;
float VBAT = getBatteryVoltage(); float VBAT = getBatteryVoltage();
if(VBAT > 4.1){ if(VBAT > 4.0){
batteryLevel = 3; batteryLevel = 3;
} }
else if(VBAT > 3.95 && VBAT <= 4.1){ else if(VBAT > 3.6 && VBAT <= 4.0){
batteryLevel = 2; batteryLevel = 2;
} }
else if(VBAT > 3.80 && VBAT <= 3.95){ else if(VBAT > 3.20 && VBAT <= 3.6){
batteryLevel = 1; batteryLevel = 1;
} }
else if(VBAT <= 3.80){ else if(VBAT <= 3.20){
batteryLevel = 0; batteryLevel = 0;
} }
for(int8_t batterySegments = 0; batterySegments < batteryLevel; batterySegments++){ for(int8_t batterySegments = 0; batterySegments < batteryLevel; batterySegments++){
display.fillRect(159 + (batterySegments * BATTERY_SEGMENT_SPACING), 78, BATTERY_SEGMENT_WIDTH, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK); display.fillRect(163 + (batterySegments * BATTERY_SEGMENT_SPACING), 78, BATTERY_SEGMENT_WIDTH, BATTERY_SEGMENT_HEIGHT, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
} }
} }

View File

@ -189,6 +189,14 @@ const unsigned char wifioff [] PROGMEM = {
0x01, 0xff, 0xc0, 0x00, 0x07, 0xe1, 0xc0, 0x00, 0x0f, 0xc0, 0x80, 0x00, 0x1f, 0x0c, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x07, 0xe1, 0xc0, 0x00, 0x0f, 0xc0, 0x80, 0x00, 0x1f, 0x0c, 0x00, 0x00,
0x3c, 0x1e, 0x00, 0x00, 0xf8, 0x0c, 0x00, 0x00 0x3c, 0x1e, 0x00, 0x00, 0xf8, 0x0c, 0x00, 0x00
}; };
// 'charge', 16x18px
const unsigned char charge [] PROGMEM = {
0x00, 0x10, 0x00, 0x70, 0x00, 0xe0, 0x01, 0xe0, 0x03, 0xe0, 0x07, 0xc0, 0x0f, 0xc0, 0x1f, 0xff,
0x3f, 0xfe, 0x7f, 0xfc, 0x7f, 0xf8, 0x03, 0xf0, 0x03, 0xe0, 0x07, 0xc0, 0x07, 0x80, 0x07, 0x00,
0x0e, 0x00, 0x0c, 0x00
};
// 'chip', 48x32px // 'chip', 48x32px
const unsigned char chip [] PROGMEM = { const unsigned char chip [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View File

@ -0,0 +1,192 @@
#include "WatchyPipBoy.h"
#define DARKMODE true
#define STEPSGOAL 5000
const uint8_t WEATHER_ICON_WIDTH = 48;
const uint8_t WEATHER_ICON_HEIGHT = 32;
RTC_DATA_ATTR uint8_t vaultBoyNum;
void WatchyPipBoy::drawWatchFace(){
//top menu bar
display.fillScreen(DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);
display.setFont(&monofonto8pt7b);
display.setTextColor(DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.setCursor(22, 14);
display.print("STAT INV DATA MAP");
display.drawBitmap(0, 10, menubar, 200, 9, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
//bottom text
display.setFont(&monofonto8pt7b);
display.setCursor(10, 195);
display.println("PIP-BOY 3000 ROBCO IND.");
drawTime();
drawDate();
drawSteps();
drawWeather();
drawBattery();
// display.drawBitmap(120, 77, WIFI_CONFIGURED ? wifi : wifioff, 26, 18, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
// if(BLE_CONFIGURED){
// display.drawBitmap(100, 75, bluetooth, 13, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
// }
}
void WatchyPipBoy::drawTime(){
//draw random vault boy every 15mins
if(currentTime.Minute % 15 == 0){
vaultBoyNum = random(0, 3);
}
switch(vaultBoyNum){
case 0:
display.drawBitmap(70, 50, vaultboy, 57, 100, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
break;
case 1:
display.drawBitmap(70, 50, vaultboypoint, 57, 100, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
break;
case 2:
display.drawBitmap(60, 50, vaultboysmile, 67, 100, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
break;
}
//time border
display.drawLine(137, 28, 200, 28, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawLine(137, 28, 137, 132, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawLine(137, 132, 157, 132, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.drawLine(180, 132, 200, 132, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
//draw time
display.setFont(&monofonto28pt7b);
display.setCursor(141, 75);
int displayHour;
if(HOUR_12_24==12){
displayHour = ((currentTime.Hour+11)%12)+1;
} else {
displayHour = currentTime.Hour;
}
if(displayHour < 10){
display.print("0");
}
display.print(displayHour);
display.setCursor(141, 125);
if(currentTime.Minute < 10){
display.print("0");
}
display.print(currentTime.Minute);
//AMPM
display.setFont(&monofonto8pt7b);
display.setCursor(160, 140);
display.print(currentTime.Hour < 11 ? "AM" : "PM");
}
void WatchyPipBoy::drawDate(){
display.setFont(&monofonto10pt7b);
int16_t x1, y1;
uint16_t w, h;
String dayOfWeek = dayStr(currentTime.Wday);
dayOfWeek.toUpperCase();
display.setTextColor(DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);
display.getTextBounds(dayOfWeek, 7, 42, &x1, &y1, &w, &h);
display.setCursor(7, 42);
display.fillRect(x1-2, y1-2, w+4, h+4, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.print(dayOfWeek);
display.setFont(&monofonto10pt7b);
display.setTextColor(DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.setCursor(7, 62);
display.print(monthShortStr(currentTime.Month));
display.print(" ");
display.print(currentTime.Day);
display.setCursor(7, 78);
display.print(tmYearToCalendar(currentTime.Year));
}
void WatchyPipBoy::drawSteps(){
// reset step counter at midnight
if (currentTime.Hour == 0 && currentTime.Minute == 0){
sensor.resetStepCounter();
}
//draw progress bar
uint32_t stepCount = sensor.getCounter();
uint8_t progress = (uint8_t)(stepCount * 100.0 / STEPSGOAL);
progress = progress > 100 ? 100 : progress;
display.drawBitmap(60, 155, gauge, 73, 10, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.fillRect(60+13, 155+5, (progress/2)+5, 4, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
//show step count
display.setFont(&monofonto8pt7b);
display.setTextColor(DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.setCursor(150, 160);
display.print("STEPS");
display.setCursor(150, 175);
display.print(stepCount);
}
void WatchyPipBoy::drawBattery(){
display.drawBitmap(10, 150, battery, 37, 21, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.fillRect(15, 155, 27, 11, DARKMODE ? GxEPD_BLACK : GxEPD_WHITE);//clear battery segments
int8_t batteryLevel = 0;
float VBAT = getBatteryVoltage();
if(VBAT > 4.1){
batteryLevel = 3;
}
else if(VBAT > 3.95 && VBAT <= 4.1){
batteryLevel = 2;
}
else if(VBAT > 3.80 && VBAT <= 3.95){
batteryLevel = 1;
}
else if(VBAT <= 3.80){
batteryLevel = 0;
}
for(int8_t batterySegments = 0; batterySegments < batteryLevel; batterySegments++){
display.fillRect(15 + (batterySegments * 9), 155, 7, 11, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
}
}
void WatchyPipBoy::drawWeather(){
weatherData currentWeather = getWeatherData();
int8_t temperature = currentWeather.temperature;
int16_t weatherConditionCode = currentWeather.weatherConditionCode;
display.setFont(&monofonto10pt7b);
display.setTextColor(DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
display.setCursor(12, 133);
display.print(temperature);
display.print(currentWeather.isMetric ? "C" : "F");
const unsigned char* weatherIcon;
//https://openweathermap.org/weather-conditions
if(weatherConditionCode > 801){//Cloudy
weatherIcon = cloudy;
}else if(weatherConditionCode == 801){//Few Clouds
weatherIcon = cloudsun;
}else if(weatherConditionCode == 800){//Clear
weatherIcon = sunny;
}else if(weatherConditionCode >=700){//Atmosphere
weatherIcon = atmosphere;
}else if(weatherConditionCode >=600){//Snow
weatherIcon = snow;
}else if(weatherConditionCode >=500){//Rain
weatherIcon = rain;
}else if(weatherConditionCode >=300){//Drizzle
weatherIcon = drizzle;
}else if(weatherConditionCode >=200){//Thunderstorm
weatherIcon = thunderstorm;
}else
return;
display.drawBitmap(5, 85, weatherIcon, WEATHER_ICON_WIDTH, WEATHER_ICON_HEIGHT, DARKMODE ? GxEPD_WHITE : GxEPD_BLACK);
}

View File

@ -0,0 +1,23 @@
#ifndef WATCHY_PIP_BOY_H
#define WATCHY_PIP_BOY_H
#include <Watchy.h>
#include "monofonto28pt7b.h"
#include "monofonto10pt7b.h"
#include "monofonto8pt7b.h"
#include "monofonto6pt7b.h"
#include "img.h"
#include "icons.h"
class WatchyPipBoy : public Watchy{
using Watchy::Watchy;
public:
void drawWatchFace();
void drawTime();
void drawDate();
void drawSteps();
void drawWeather();
void drawBattery();
};
#endif

Binary file not shown.

View File

@ -0,0 +1,176 @@
// 'battery', 37x21px
const unsigned char battery [] PROGMEM = {
0x3f, 0xff, 0xff, 0xff, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0,
0x00, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0xf8, 0xe0, 0x00,
0x00, 0x00, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00,
0x00, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, 0x00,
0x38, 0xe0, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, 0x00, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0xf8,
0xe0, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x7f,
0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, 0x80
};
// 'bluetooth', 13x21px
const unsigned char bluetooth [] PROGMEM = {
0x1f, 0xc0, 0x3f, 0xe0, 0x7f, 0xf0, 0xfd, 0xf8, 0xfc, 0xf8, 0xfc, 0x78, 0xdd, 0x38, 0xcd, 0x98,
0xe5, 0x38, 0xf0, 0x78, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0x78, 0xe5, 0x38, 0xcd, 0x98, 0xfd, 0x38,
0xfc, 0x78, 0xfc, 0xf8, 0x7d, 0xf0, 0x3f, 0xe0, 0x1f, 0xc0
};
// 'celsius', 26x20px
const unsigned char celsius [] PROGMEM = {
0x3f, 0x80, 0x1f, 0xc0, 0x7f, 0xc0, 0x3f, 0xc0, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00,
0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00,
0xc0, 0x60, 0x60, 0x00, 0xff, 0xc0, 0x40, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x3f, 0xc0
};
// 'fahrenheit', 26x20px
const unsigned char fahrenheit [] PROGMEM = {
0x3f, 0x80, 0x1f, 0xc0, 0x7f, 0xc0, 0x3f, 0xc0, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00,
0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x60, 0x00,
0xc0, 0x60, 0x60, 0x00, 0xff, 0xc0, 0x7f, 0xc0, 0x7f, 0x80, 0x3f, 0xc0, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'cloudsun', 48x32px
const unsigned char cloudsun [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x84, 0x40, 0x00, 0x00, 0x00, 0x10, 0x44, 0x42, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00,
0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
0x00, 0x00, 0x00, 0x31, 0x80, 0x61, 0x00, 0x07, 0xe0, 0x19, 0x00, 0x32, 0x00, 0x38, 0x38, 0x02,
0x00, 0x10, 0x00, 0x60, 0x04, 0x02, 0x00, 0x10, 0x00, 0x80, 0x03, 0xf2, 0x00, 0x10, 0x01, 0x00,
0x01, 0x9e, 0x00, 0x10, 0x03, 0x00, 0x00, 0x03, 0x00, 0x10, 0x02, 0x00, 0x00, 0x01, 0x80, 0x10,
0x02, 0x00, 0x00, 0x00, 0x80, 0x32, 0x04, 0x00, 0x00, 0x00, 0x40, 0x61, 0x04, 0x00, 0x00, 0x00,
0x70, 0xc0, 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x08, 0x60, 0x00,
0x00, 0x00, 0x01, 0x04, 0x40, 0x00, 0x00, 0x00, 0x01, 0xc2, 0x40, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00,
0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00,
0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xfc, 0x00
};
// 'cloudy', 48x32px
const unsigned char cloudy [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00,
0x00, 0x60, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x00, 0x01, 0x80, 0x00, 0x3f,
0xc0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x02, 0x00,
0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x03, 0x80, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00,
0x00, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00,
0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02,
0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00,
0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x20, 0x00,
0x00, 0x00, 0x00, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0
};
// 'rain', 48x32px
const unsigned char rain [] PROGMEM = {
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x30,
0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x80, 0x00, 0xc0, 0x00, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00,
0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08,
0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00,
0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80,
0x00, 0x00, 0x00, 0x60, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x21, 0x08, 0x42, 0x10, 0x00, 0x00, 0x42, 0x10, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x84, 0x21, 0x00, 0x00, 0x04, 0x21,
0x08, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x84, 0x21, 0x08, 0x00, 0x00
};
// 'snow', 48x32px
const unsigned char snow [] PROGMEM = {
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x20,
0x00, 0x00, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x81, 0x02, 0x40, 0x00, 0x00, 0x02, 0x81, 0x02, 0x80, 0x00,
0x00, 0x01, 0x81, 0x03, 0x00, 0x00, 0x00, 0x07, 0x81, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x41, 0x04,
0x00, 0x00, 0x00, 0x00, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00, 0x11, 0x10, 0x00, 0x00, 0x00, 0x80,
0x09, 0x20, 0x04, 0x00, 0x00, 0x40, 0x05, 0x40, 0x08, 0x00, 0x00, 0x20, 0x03, 0x80, 0x10, 0x00,
0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x20, 0x03, 0x80, 0x10, 0x00, 0x00, 0x40, 0x05, 0x40,
0x08, 0x00, 0x00, 0x80, 0x09, 0x20, 0x04, 0x00, 0x00, 0x00, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
0x21, 0x08, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00, 0x00, 0x03, 0x81, 0x03, 0x80, 0x00,
0x00, 0x01, 0x81, 0x03, 0x00, 0x00, 0x00, 0x02, 0x81, 0x02, 0x80, 0x00, 0x00, 0x04, 0x01, 0x00,
0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,
0x05, 0x40, 0x00, 0x00, 0x00, 0x00, 0x09, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
};
// 'sunny', 48x32px
const unsigned char sunny [] PROGMEM = {
0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x21, 0x08, 0x00, 0x00, 0x00, 0x18,
0x20, 0x10, 0x60, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00,
0x00, 0x02, 0x0f, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0c,
0x00, 0x00, 0x00, 0x30, 0x80, 0x04, 0x30, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00,
0x03, 0xf2, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30,
0x80, 0x04, 0x30, 0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00,
0x00, 0x02, 0x0f, 0xc1, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x18, 0x20, 0x10, 0x60, 0x00, 0x00, 0x00, 0x21, 0x08, 0x00, 0x00, 0x00, 0x00,
0x41, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
};
// 'atmosphere', 48x32px
const unsigned char atmosphere[] PROGMEM = {
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x30,
0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x80, 0x00, 0xc0, 0x00, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00,
0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08,
0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00,
0x00, 0x08, 0x04, 0x07, 0xff, 0xf8, 0xf0, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80,
0x00, 0x00, 0x00, 0x60, 0x00, 0x9f, 0x1f, 0xff, 0xfc, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'drizzle', 48x32px
const unsigned char drizzle[] PROGMEM = {
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x30,
0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x80, 0x00, 0xc0, 0x00, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00,
0x00, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08,
0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00,
0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80,
0x00, 0x00, 0x00, 0x60, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0x08, 0x00, 0x00
};
// 'thunderstorm', 48x32px
const unsigned char thunderstorm[] PROGMEM = {
0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x81, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x60,
0x00, 0x00, 0x00, 0x08, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x30,
0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x00,
0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x80, 0x00, 0xc0, 0x0f, 0x80,
0x00, 0xc0, 0x03, 0x00, 0x0f, 0x80, 0x00, 0x20, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x10, 0x04, 0x00,
0x1e, 0x00, 0x00, 0x18, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x08, 0x08, 0x00, 0x3c, 0x00, 0x00, 0x08,
0x08, 0x00, 0x7c, 0x00, 0x00, 0x08, 0x04, 0x00, 0x78, 0x00, 0x00, 0x08, 0x04, 0x00, 0xf8, 0x00,
0x00, 0x08, 0x04, 0x00, 0xff, 0x00, 0x00, 0x10, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x30, 0x01, 0x80,
0x1e, 0x00, 0x00, 0x60, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01,
0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'steps', 19x23px
const unsigned char steps [] PROGMEM = {
0x00, 0x03, 0xc0, 0x00, 0x07, 0xe0, 0x00, 0x07, 0xe0, 0x00, 0x0f, 0xe0, 0x78, 0x0f, 0xe0, 0xfc,
0x0f, 0xe0, 0xfc, 0x0f, 0xe0, 0xfc, 0x0f, 0xe0, 0xfe, 0x0f, 0xe0, 0xfe, 0x07, 0xc0, 0xfe, 0x07,
0xc0, 0xfe, 0x07, 0x80, 0xfe, 0x00, 0x00, 0x7c, 0x0e, 0x00, 0x7c, 0x0f, 0x80, 0x7c, 0x1f, 0x80,
0x20, 0x1f, 0x00, 0x06, 0x0f, 0x00, 0x3e, 0x0e, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x1e,
0x00, 0x00, 0x1e, 0x00, 0x00
};
// 'wifi', 26x18px
const unsigned char wifi [] PROGMEM = {
0x00, 0x7f, 0x80, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x1f, 0xc0, 0xfe, 0x00,
0x7e, 0x00, 0x1f, 0x80, 0xf8, 0x3f, 0x07, 0xc0, 0x71, 0xff, 0xe3, 0x80, 0x23, 0xff, 0xf1, 0x00,
0x07, 0xc0, 0xf8, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x06, 0x3f, 0x18, 0x00, 0x02, 0x7f, 0x90, 0x00,
0x00, 0xff, 0xc0, 0x00, 0x00, 0xe1, 0xc0, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x00,
0x00, 0x1e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00
};
// 'wifioff', 26x18px
const unsigned char wifioff [] PROGMEM = {
0x00, 0x7f, 0x87, 0xc0, 0x03, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xff, 0x00, 0x1f, 0xc0, 0xfe, 0x00,
0x7e, 0x00, 0x7f, 0x80, 0xf8, 0x3f, 0xf7, 0xc0, 0x71, 0xff, 0xe3, 0x80, 0x23, 0xff, 0xf1, 0x00,
0x07, 0xcf, 0xf8, 0x00, 0x0f, 0x3e, 0x3c, 0x00, 0x06, 0x7f, 0x18, 0x00, 0x02, 0xff, 0x90, 0x00,
0x01, 0xff, 0xc0, 0x00, 0x07, 0xe1, 0xc0, 0x00, 0x0f, 0xc0, 0x80, 0x00, 0x1f, 0x0c, 0x00, 0x00,
0x3c, 0x1e, 0x00, 0x00, 0xf8, 0x0c, 0x00, 0x00
};

View File

@ -0,0 +1,198 @@
// 'vaultboy', 57x100px
const unsigned char vaultboy [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0xff, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x87, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6b, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfb, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xff, 0xe6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xf7, 0xe7, 0x00, 0x00, 0x00,
0x00, 0x00, 0x27, 0xf3, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xef, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xf7, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xe3, 0xe1, 0x00, 0x00, 0x00,
0x00, 0x00, 0x46, 0xe7, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xff, 0xd4, 0x00, 0x00, 0x00,
0x00, 0x00, 0x79, 0xff, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xff, 0xec, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7d, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xf7, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x4f, 0xe3, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x7b, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x4f, 0xe3, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1f, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x19, 0xf3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0f, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0xcf, 0xf8, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0x07, 0xff, 0x00, 0x00, 0x00,
0x00, 0x03, 0xde, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0x9c, 0xff, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x0f, 0xbc, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x1d, 0xbc, 0xff, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x19, 0xbd, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x39, 0x3d, 0xff, 0xff, 0xfe, 0x00, 0x00,
0x00, 0x3b, 0x7d, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7b, 0x7d, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x7b, 0x7d, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0xfb, 0x7d, 0xff, 0xff, 0xff, 0xc0, 0x00,
0x01, 0xfb, 0x7d, 0xff, 0xc7, 0xff, 0xc0, 0x00, 0x01, 0xfb, 0x7d, 0xff, 0xe1, 0xff, 0xe0, 0x00,
0x03, 0xfb, 0x7d, 0xff, 0xf8, 0xff, 0xf0, 0x00, 0x03, 0xfb, 0x7d, 0xff, 0xfc, 0x7f, 0xf8, 0x00,
0x07, 0xfb, 0x7d, 0xff, 0xfe, 0x3f, 0xf8, 0x00, 0x07, 0xf9, 0x7d, 0xff, 0xfe, 0x1f, 0xf8, 0x00,
0x07, 0xf9, 0x7d, 0xff, 0xfe, 0x1f, 0xfc, 0x00, 0x0f, 0xf9, 0x7d, 0xff, 0xf8, 0x0f, 0xfc, 0x00,
0x0f, 0xf8, 0x3c, 0xff, 0xc2, 0x0f, 0xfc, 0x00, 0x0f, 0xf8, 0xfc, 0xf8, 0x1e, 0x07, 0xfe, 0x00,
0x1f, 0xf0, 0xfe, 0x03, 0xfe, 0x03, 0xfe, 0x00, 0x1f, 0xe0, 0xff, 0xff, 0xfe, 0x03, 0xfe, 0x00,
0x3f, 0xc0, 0xff, 0xff, 0xfe, 0x03, 0xfe, 0x00, 0x20, 0x00, 0xff, 0xff, 0xf8, 0x01, 0xfe, 0x00,
0x0f, 0x00, 0x7f, 0xff, 0xc2, 0x01, 0xfc, 0x00, 0x1f, 0x80, 0x3f, 0xfe, 0x1e, 0x01, 0xf8, 0x00,
0x3f, 0x80, 0x07, 0xc0, 0xfe, 0x00, 0x03, 0x00, 0x3f, 0x80, 0x70, 0x1f, 0xfe, 0x02, 0x1f, 0x00,
0x7b, 0x80, 0x7f, 0xff, 0xfe, 0x07, 0xff, 0x00, 0x7b, 0x80, 0x27, 0xff, 0xfe, 0x07, 0xfe, 0x00,
0x7b, 0x80, 0x27, 0xff, 0xfc, 0x07, 0xfe, 0x00, 0x7b, 0x00, 0x07, 0xff, 0xfc, 0x03, 0xfc, 0x00,
0x3b, 0x00, 0x07, 0xff, 0xfc, 0x03, 0xd8, 0x00, 0x3c, 0x00, 0x0f, 0xff, 0xf8, 0x01, 0x90, 0x00,
0x14, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x17, 0x00, 0x0f, 0xff, 0xf8, 0x00, 0x00, 0x00,
0x0b, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x09, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xff, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xce, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xff, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x7f, 0x80, 0x00, 0x00,
0x00, 0x01, 0xff, 0xf8, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf1, 0xff, 0x80, 0x00, 0x00,
0x00, 0x03, 0xff, 0xf1, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0xff, 0xc0, 0x00, 0x00,
0x00, 0x07, 0xff, 0x80, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x7f, 0xc0, 0x00, 0x00,
0x0c, 0x0f, 0xfe, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x06, 0xc7, 0xfc, 0x00, 0x1f, 0xe0, 0x00, 0x00,
0x07, 0x43, 0xfc, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0xa9, 0xf0, 0x00, 0x0f, 0xc0, 0x00, 0x00,
0x03, 0x84, 0xe0, 0x00, 0x0e, 0x20, 0x00, 0x00, 0x03, 0xd6, 0x60, 0x00, 0x00, 0xe0, 0x00, 0x00,
0x01, 0xcf, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'vaultboypoint', 57x100px
const unsigned char vaultboypoint [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xe7, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x43, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xf1, 0xec, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xf1, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xef, 0xcc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2f, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xf7, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1d, 0xf3, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x13, 0x73, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x38, 0x1e, 0x77, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x1e, 0xff, 0xe8, 0x00, 0x00, 0x00,
0x00, 0xfe, 0x1e, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x1f, 0x71, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x3f, 0x9f, 0xe5, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x93, 0x1b, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x07, 0xc3, 0xe7, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xec, 0x0f, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x01, 0xe7, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xff, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x61, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x60, 0x7f, 0x2f, 0x80, 0x00, 0x00,
0x00, 0x3c, 0xc1, 0x1e, 0x6f, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0xc0, 0xef, 0xf8, 0x00, 0x00,
0x00, 0x1c, 0x24, 0x01, 0xdf, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0xe6, 0x00, 0x1f, 0xff, 0x00, 0x00,
0x00, 0x08, 0x30, 0x87, 0x8f, 0xff, 0xc0, 0x00, 0x00, 0x09, 0x8c, 0x8c, 0xc7, 0xbf, 0xe0, 0x00,
0x00, 0x02, 0x66, 0x8f, 0xa7, 0x07, 0x80, 0x00, 0x00, 0x1e, 0x76, 0x2f, 0xf2, 0x71, 0x00, 0x00,
0x00, 0x3e, 0xf4, 0x4f, 0x78, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xf4, 0x40, 0x79, 0xfc, 0x00, 0x00,
0x00, 0x3d, 0xe5, 0x19, 0xf8, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0x4d, 0xdf, 0xf8, 0x7c, 0x00, 0x00,
0x00, 0x3f, 0x05, 0xcf, 0xf8, 0x3c, 0x00, 0x00, 0x00, 0x3f, 0xcd, 0xc7, 0xf9, 0x3c, 0x00, 0x00,
0x00, 0x7f, 0x8d, 0xdf, 0xf9, 0x3c, 0x00, 0x00, 0x00, 0x78, 0x1d, 0xce, 0xfb, 0x3c, 0x00, 0x00,
0x01, 0x7c, 0xdd, 0xe0, 0xf3, 0xbc, 0x00, 0x00, 0x01, 0x6f, 0x1d, 0xee, 0x07, 0xbc, 0x00, 0x00,
0x03, 0x30, 0x1d, 0xee, 0x0f, 0xb8, 0x00, 0x00, 0x03, 0x91, 0x1d, 0xde, 0xff, 0xf8, 0x00, 0x00,
0x03, 0xc0, 0x1d, 0x9c, 0xff, 0xf8, 0x00, 0x00, 0x03, 0xe3, 0x9d, 0xb8, 0xff, 0xf0, 0x00, 0x00,
0x03, 0xff, 0x9d, 0x72, 0x7f, 0xf0, 0x00, 0x00, 0x03, 0xff, 0x1c, 0xf6, 0x7f, 0xe0, 0x00, 0x00,
0x01, 0xff, 0x1d, 0xe6, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0xfe, 0x1b, 0xc7, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x38, 0x03, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x31, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3e, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff, 0xe6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x20, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x0f, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xff, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0f, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xc0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x07, 0x80, 0x00, 0x00,
0x00, 0x00, 0x1f, 0xf0, 0x1f, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x7f, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x01, 0xff, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x10, 0x07, 0xff, 0xe0, 0x00, 0x00,
0x00, 0x00, 0x40, 0x3f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xfb, 0xff, 0xf0, 0x40, 0x00,
0x00, 0x00, 0x5f, 0xfd, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xfd, 0xff, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xf8, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x7f, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xf8, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xf0, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x1f, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x1f, 0xe0, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x07, 0xff, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xe0, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x03, 0xff, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xe0, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x01, 0xff, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xc0, 0x01, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0xff, 0x80, 0x00,
0x00, 0x00, 0x7f, 0xc0, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x7f, 0x80, 0x00,
0x00, 0x00, 0x1f, 0x80, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0xff, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x0f, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'vaultboysmile', 67x100px
const unsigned char vaultboysmile [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x7f, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x0f, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0xcc, 0x64, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x9f, 0xf0, 0x18, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x3f, 0x9f,
0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0xef, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0xff, 0xff, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7f, 0xff, 0x98, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0x3f, 0x1f, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x37, 0x8f, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0xe7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xcf, 0xff, 0x80,
0x00, 0x00, 0x03, 0x80, 0x00, 0x07, 0xcf, 0xff, 0x60, 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, 0xcf,
0xff, 0xc0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0xff, 0x3f, 0xe0, 0x00, 0x00, 0x0f, 0x00, 0x00,
0x06, 0xfe, 0x1f, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x31, 0x9f, 0xe0, 0x00, 0x00, 0x07,
0x00, 0x00, 0x02, 0x7e, 0x1f, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0x80, 0xff, 0x00, 0x00,
0x00, 0x03, 0x80, 0x00, 0x01, 0xe7, 0xfe, 0x00, 0x00, 0x00, 0x38, 0x60, 0x00, 0x01, 0xe7, 0xfc,
0x00, 0x00, 0x00, 0x7f, 0x30, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, 0x00, 0xff, 0xb0, 0x00, 0x00,
0x7f, 0xf3, 0x00, 0x00, 0x00, 0x6f, 0xb8, 0x00, 0x00, 0x3f, 0xeb, 0x80, 0x00, 0x00, 0x00, 0xb9,
0x80, 0x01, 0x0f, 0xf3, 0xb0, 0x00, 0x00, 0x7e, 0x39, 0xff, 0xff, 0x60, 0x67, 0x3c, 0x00, 0x00,
0x7f, 0xb0, 0xff, 0xff, 0x70, 0x0f, 0x3e, 0x00, 0x00, 0x7f, 0x84, 0xff, 0xff, 0x3e, 0x3e, 0x7f,
0x80, 0x00, 0x00, 0x15, 0xff, 0xff, 0x9f, 0xf8, 0xff, 0xc0, 0x00, 0x3f, 0x25, 0xff, 0xff, 0xdf,
0xf3, 0xff, 0xe0, 0x00, 0x3f, 0xa9, 0xff, 0xef, 0xdf, 0x87, 0xff, 0xf0, 0x00, 0x1f, 0xab, 0xff,
0xcf, 0xdf, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x03, 0xfe, 0x0f, 0xdf, 0x7f, 0xff, 0xfc, 0x00, 0x00,
0x27, 0xf0, 0x0f, 0x9f, 0x7f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x9e, 0x7f, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x9e, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xbe, 0x7f,
0x9f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xbe, 0x7f, 0xcf, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f,
0xbe, 0x7f, 0xe0, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xbe, 0x7f, 0xf2, 0x1f, 0xc0, 0x00, 0x00,
0x00, 0x0f, 0x3e, 0x7f, 0xf3, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x3e, 0xff, 0xf6, 0xff, 0x80,
0x00, 0x00, 0x00, 0x0f, 0x3e, 0xff, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3e, 0xff, 0xe5,
0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3e, 0xff, 0xe1, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x3e,
0xff, 0xeb, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x03, 0x3e, 0xff, 0xeb, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3e, 0xff, 0x0b, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7e, 0x70, 0x03, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x07, 0xff, 0x00, 0xe1, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe4, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
0xef, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xef, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0xef, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x90, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0xff, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0xfc, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff,
0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0xff, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x3f, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x1f,
0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07,
0xfe, 0x0f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x0f, 0xff, 0x80, 0x00, 0x00, 0x00,
0x00, 0x07, 0xfe, 0x07, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x03, 0xff, 0xc0, 0x00,
0x00, 0x00, 0x00, 0x0f, 0xfe, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x01, 0xff,
0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc,
0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x0f, 0xfc, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x7f, 0xf0, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xf8, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x3f, 0xf0,
0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00,
0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f,
0xf8, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x30, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x18, 0x00,
0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};
// 'menu bar', 200x9px
const unsigned char menubar [] PROGMEM = {
0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff
};
// 'gauge', 73x10px
const unsigned char gauge [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x80, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x1f, 0xc0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x0f, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf9, 0x80, 0x07, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0x03, 0xc8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0x01, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80,
0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x80, 0x00, 0x4f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf9, 0x80
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,201 @@
const uint8_t monofonto10pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFF, 0xC3, 0xF0, 0x99, 0x99, 0x90, 0x0D, 0x82, 0x60, 0x98,
0x64, 0x3F, 0xDF, 0xE1, 0x30, 0xC8, 0x7F, 0xBF, 0xC2, 0x60, 0x98, 0x64,
0x1B, 0x00, 0x18, 0x18, 0x3E, 0x7F, 0xE7, 0xC3, 0xE0, 0xF0, 0x7C, 0x3F,
0x0F, 0x03, 0x03, 0xE3, 0xFF, 0x7E, 0x18, 0x18, 0xF0, 0xE4, 0x29, 0x12,
0x4C, 0x92, 0x25, 0x8F, 0x7C, 0x29, 0x1A, 0x44, 0x93, 0x24, 0x89, 0x42,
0x70, 0xF0, 0x1C, 0x0F, 0x83, 0x60, 0xD8, 0x36, 0x0F, 0x03, 0x81, 0xF2,
0x6F, 0xF1, 0xEC, 0x73, 0x9C, 0x7F, 0x8F, 0x70, 0xFF, 0xC0, 0x19, 0x8C,
0xC6, 0x31, 0x98, 0xC6, 0x31, 0x84, 0x31, 0x8C, 0x61, 0x8E, 0x20, 0x8C,
0xC6, 0x66, 0x63, 0x33, 0x33, 0x26, 0x66, 0x6C, 0xC8, 0x0C, 0x03, 0x08,
0xC7, 0xB7, 0x7F, 0x83, 0x01, 0xA0, 0xCE, 0x71, 0x00, 0x18, 0x18, 0x18,
0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x6D, 0xB5, 0x80, 0xFF, 0xF0, 0xFC,
0x00, 0xC0, 0x60, 0x18, 0x04, 0x03, 0x00, 0xC0, 0x60, 0x18, 0x04, 0x03,
0x00, 0x80, 0x60, 0x18, 0x0C, 0x03, 0x00, 0x80, 0x60, 0x18, 0x0C, 0x00,
0x3C, 0x7E, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7,
0x7E, 0x3C, 0x1B, 0xFF, 0xFB, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0x3C,
0x7E, 0xE7, 0xE3, 0x07, 0x07, 0x0E, 0x0E, 0x1C, 0x1C, 0x38, 0x30, 0x7F,
0xFF, 0x3C, 0x7E, 0xE7, 0xC3, 0x03, 0x07, 0x0E, 0x0E, 0x03, 0x03, 0xC3,
0xE7, 0x7E, 0x3C, 0x1E, 0x1E, 0x16, 0x36, 0x26, 0x66, 0x46, 0xC6, 0x86,
0xFF, 0xFF, 0x06, 0x06, 0x06, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xFE, 0xFF,
0xE7, 0x03, 0x03, 0x43, 0xE7, 0xFE, 0x3C, 0x0E, 0x1C, 0x18, 0x38, 0x30,
0x7C, 0x7E, 0xE7, 0xC3, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0xFF, 0xFF, 0x07,
0x06, 0x0E, 0x0E, 0x1C, 0x1C, 0x18, 0x38, 0x38, 0x70, 0x70, 0xF0, 0x3C,
0x7E, 0xE7, 0xC3, 0xE7, 0x7E, 0x7E, 0xE7, 0xC3, 0xC3, 0xC3, 0xE7, 0x7E,
0x3C, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0x7E, 0x0E, 0x0C, 0x1C,
0x38, 0x38, 0x70, 0xFC, 0x03, 0xF0, 0x6D, 0x80, 0x03, 0x6F, 0x64, 0x01,
0x07, 0x1C, 0x70, 0xC0, 0xC0, 0x70, 0x1E, 0x07, 0x01, 0xFF, 0xFF, 0x00,
0x00, 0xFF, 0xFF, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x03, 0x0E, 0x78, 0xE0,
0x80, 0x3C, 0x7E, 0x66, 0xE7, 0x07, 0x0E, 0x1C, 0x18, 0x38, 0x00, 0x00,
0x18, 0x38, 0x18, 0x1F, 0x0C, 0x66, 0x09, 0x01, 0x40, 0x73, 0x9D, 0x27,
0x49, 0xDA, 0xF3, 0x64, 0x01, 0x80, 0x30, 0x06, 0x01, 0x00, 0x18, 0x3C,
0x3C, 0x3C, 0x3C, 0x7C, 0x7E, 0x7E, 0x6E, 0x66, 0xFF, 0xFF, 0xE7, 0xC7,
0xFC, 0xFE, 0xC7, 0xC7, 0xC7, 0xC6, 0xFC, 0xFE, 0xC7, 0xC7, 0xC7, 0xC7,
0xFE, 0xFC, 0x3C, 0x7E, 0xE7, 0xC7, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0xE7, 0xE7, 0x7E, 0x3C, 0xFC, 0xFE, 0xC7, 0xC7, 0xC3, 0xC3, 0xC3, 0xC3,
0xC3, 0xC3, 0xC3, 0xC7, 0xFE, 0xFC, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0xE0,
0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0,
0xE0, 0xE0, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x3C, 0x7E,
0xE7, 0xE7, 0xC0, 0xC0, 0xCF, 0xCF, 0xC3, 0xC3, 0xC3, 0xE7, 0x7F, 0x3B,
0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xFF, 0xFF, 0xE7, 0xE7, 0xE7, 0xE7,
0xE7, 0xE7, 0xFF, 0xF3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0xFF,
0xF0, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x0E, 0xFE, 0xFC, 0xE7, 0xE6, 0xE6, 0xEC, 0xEC, 0xF8, 0xF8, 0xF8, 0xFC,
0xEC, 0xEE, 0xE6, 0xE7, 0xE7, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xE3, 0xE7, 0xE7, 0xE7, 0xFF,
0xFF, 0xFF, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC3, 0xC3, 0xE3, 0xE3, 0xF3,
0xF3, 0xF3, 0xFB, 0xDB, 0xDF, 0xDF, 0xCF, 0xCF, 0xC7, 0xC7, 0xC7, 0x3C,
0x7E, 0xE7, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xE7, 0x7E,
0x3C, 0xFC, 0xFF, 0xE7, 0xE3, 0xE3, 0xE3, 0xE7, 0xFF, 0xFC, 0xE0, 0xE0,
0xE0, 0xE0, 0xE0, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0x0E, 0x06, 0x06, 0xFC, 0x7F, 0x39, 0xDC,
0xEE, 0x37, 0x3B, 0x9D, 0xFC, 0xFC, 0x7E, 0x3B, 0x9D, 0xCE, 0x77, 0x3C,
0x3C, 0x7E, 0xE7, 0xC3, 0xE0, 0xF0, 0x7C, 0x1F, 0x07, 0x03, 0xC3, 0xF7,
0x7F, 0x3C, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
0xC3, 0xC3, 0xC3, 0xE7, 0xFF, 0x3C, 0xE1, 0xD8, 0x67, 0x19, 0xCE, 0x73,
0x8C, 0xC3, 0x30, 0xFC, 0x3F, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x03, 0x00,
0xE1, 0xF8, 0x76, 0x19, 0x96, 0x6D, 0x9B, 0x66, 0xD9, 0xB6, 0x7F, 0x9F,
0xE3, 0xF0, 0xCC, 0x33, 0x0C, 0xC0, 0xE7, 0xE7, 0x66, 0x7E, 0x7E, 0x3C,
0x3C, 0x3C, 0x3C, 0x7E, 0x7E, 0x66, 0xE7, 0xE7, 0xE1, 0xDC, 0xE7, 0x38,
0xCC, 0x3F, 0x0F, 0xC1, 0xE0, 0x78, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C,
0x03, 0x00, 0x7F, 0xBF, 0xC0, 0xC0, 0xE0, 0x60, 0x70, 0x38, 0x38, 0x1C,
0x1C, 0x0E, 0x06, 0x07, 0xFF, 0xFC, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
0xCC, 0xCC, 0xCC, 0xFF, 0xC0, 0x18, 0x06, 0x00, 0x80, 0x30, 0x0C, 0x01,
0x80, 0x60, 0x08, 0x03, 0x00, 0x40, 0x18, 0x06, 0x00, 0xC0, 0x30, 0x04,
0x01, 0x80, 0x60, 0x0C, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
0x33, 0xFF, 0x18, 0x3C, 0x3C, 0x66, 0x66, 0xC3, 0xC3, 0xFF, 0xFF, 0xF0,
0xE6, 0x33, 0x3E, 0x7F, 0xE7, 0x03, 0x7F, 0xFF, 0xE3, 0xE7, 0xFF, 0x7B,
0xC0, 0xC0, 0xC0, 0xC0, 0xCE, 0xDF, 0xE7, 0xE3, 0xC3, 0xC3, 0xE3, 0xE7,
0xDF, 0xCE, 0x1E, 0x7F, 0xF2, 0xC0, 0xC0, 0xC0, 0xC0, 0xF2, 0x7F, 0x3E,
0x03, 0x03, 0x03, 0x03, 0x73, 0xFB, 0xE7, 0xC7, 0xC3, 0xC3, 0xC7, 0xE7,
0xFB, 0x73, 0x3C, 0x7E, 0xE7, 0xC3, 0xFF, 0xC0, 0xC0, 0xE7, 0x7E, 0x3C,
0x1F, 0x3F, 0x38, 0x30, 0xFE, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
0x30, 0x30, 0x3B, 0x7B, 0xE7, 0xC7, 0xC3, 0xC3, 0xC7, 0xE7, 0x7B, 0x3B,
0x03, 0xC7, 0xFE, 0x7C, 0xC0, 0xC0, 0xC0, 0xC0, 0xCE, 0xDF, 0xE7, 0xE3,
0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x30, 0xC3, 0x00, 0xF3, 0xC3, 0x0C,
0x30, 0xC3, 0x0C, 0xFF, 0xF0, 0x18, 0x71, 0x80, 0xFF, 0xF1, 0xC7, 0x1C,
0x71, 0xC7, 0x1C, 0x71, 0xC6, 0xFB, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC7,
0xCE, 0xCC, 0xD8, 0xF8, 0xD8, 0xDC, 0xCE, 0xCE, 0xC7, 0xFF, 0xCE, 0x73,
0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xF7, 0xFF, 0xDB, 0xDB, 0xDB, 0xDB,
0xDB, 0xDB, 0xDB, 0xDB, 0xCE, 0xDF, 0xE7, 0xE3, 0xC3, 0xC3, 0xC3, 0xC3,
0xC3, 0xC3, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C,
0xDE, 0xFE, 0xE7, 0xC7, 0xC3, 0xC3, 0xC7, 0xE7, 0xFE, 0xDE, 0xC0, 0xC0,
0xC0, 0xC0, 0x73, 0xFB, 0xE7, 0xC7, 0xC3, 0xC3, 0xC7, 0xE7, 0xFB, 0x73,
0x03, 0x03, 0x03, 0x03, 0xCE, 0xDF, 0xE6, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
0xE0, 0xE0, 0x3C, 0x7E, 0xE6, 0xE0, 0x78, 0x1E, 0x07, 0xE7, 0x7E, 0x3C,
0x30, 0x30, 0x30, 0xFE, 0xFE, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x3F,
0x1F, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0xE1,
0xDC, 0x67, 0x38, 0xCC, 0x33, 0x0F, 0xC1, 0xE0, 0x78, 0x1E, 0x07, 0x80,
0xE5, 0xD9, 0x66, 0x59, 0xB6, 0x7F, 0x9F, 0xE3, 0xF0, 0xFC, 0x33, 0x0C,
0xC0, 0xE7, 0x66, 0x7E, 0x3C, 0x3C, 0x3C, 0x3C, 0x7E, 0x66, 0xE7, 0xE1,
0xDC, 0x67, 0x38, 0xCC, 0x33, 0x0E, 0xC1, 0xF0, 0x78, 0x1E, 0x07, 0x80,
0xC0, 0x30, 0x1C, 0x06, 0x00, 0xFF, 0xFE, 0x0E, 0x0C, 0x1C, 0x38, 0x30,
0x70, 0x7F, 0xFF, 0x3B, 0xDC, 0xC2, 0x10, 0x8C, 0x66, 0x38, 0xC2, 0x10,
0x8C, 0x63, 0x8E, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE7, 0x9C, 0x62,
0x10, 0x86, 0x30, 0xCE, 0x62, 0x10, 0x86, 0x33, 0xB9, 0xC0, 0x78, 0x7F,
0xF8, 0x78 };
const GFXglyph monofonto10pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 10, 0, 0 }, // 0x20 ' '
{ 1, 2, 14, 10, 4, -13 }, // 0x21 '!'
{ 5, 4, 5, 10, 3, -13 }, // 0x22 '"'
{ 8, 10, 14, 10, 0, -13 }, // 0x23 '#'
{ 26, 8, 18, 10, 1, -15 }, // 0x24 '$'
{ 44, 10, 14, 10, 0, -13 }, // 0x25 '%'
{ 62, 10, 14, 10, 0, -13 }, // 0x26 '&'
{ 80, 2, 5, 10, 4, -13 }, // 0x27 '''
{ 82, 5, 20, 10, 4, -15 }, // 0x28 '('
{ 95, 4, 20, 10, 2, -15 }, // 0x29 ')'
{ 105, 10, 9, 10, 0, -13 }, // 0x2A '*'
{ 117, 8, 9, 10, 1, -11 }, // 0x2B '+'
{ 126, 3, 6, 10, 3, -2 }, // 0x2C ','
{ 129, 6, 2, 10, 2, -7 }, // 0x2D '-'
{ 131, 2, 3, 10, 4, -2 }, // 0x2E '.'
{ 132, 10, 19, 10, 0, -15 }, // 0x2F '/'
{ 156, 8, 14, 10, 1, -13 }, // 0x30 '0'
{ 170, 5, 14, 10, 2, -13 }, // 0x31 '1'
{ 179, 8, 14, 10, 1, -13 }, // 0x32 '2'
{ 193, 8, 14, 10, 1, -13 }, // 0x33 '3'
{ 207, 8, 14, 10, 1, -13 }, // 0x34 '4'
{ 221, 8, 14, 10, 1, -13 }, // 0x35 '5'
{ 235, 8, 14, 10, 1, -13 }, // 0x36 '6'
{ 249, 8, 14, 10, 1, -13 }, // 0x37 '7'
{ 263, 8, 14, 10, 1, -13 }, // 0x38 '8'
{ 277, 8, 14, 10, 1, -13 }, // 0x39 '9'
{ 291, 2, 10, 10, 4, -9 }, // 0x3A ':'
{ 294, 3, 13, 10, 3, -9 }, // 0x3B ';'
{ 299, 8, 10, 10, 1, -11 }, // 0x3C '<'
{ 309, 8, 6, 10, 1, -9 }, // 0x3D '='
{ 315, 8, 10, 10, 1, -11 }, // 0x3E '>'
{ 325, 8, 14, 10, 1, -13 }, // 0x3F '?'
{ 339, 10, 15, 10, 0, -11 }, // 0x40 '@'
{ 358, 8, 14, 10, 1, -13 }, // 0x41 'A'
{ 372, 8, 14, 10, 1, -13 }, // 0x42 'B'
{ 386, 8, 14, 10, 1, -13 }, // 0x43 'C'
{ 400, 8, 14, 10, 1, -13 }, // 0x44 'D'
{ 414, 8, 14, 10, 1, -13 }, // 0x45 'E'
{ 428, 8, 14, 10, 1, -13 }, // 0x46 'F'
{ 442, 8, 14, 10, 1, -13 }, // 0x47 'G'
{ 456, 8, 14, 10, 1, -13 }, // 0x48 'H'
{ 470, 6, 14, 10, 2, -13 }, // 0x49 'I'
{ 481, 8, 14, 10, 1, -13 }, // 0x4A 'J'
{ 495, 8, 14, 10, 1, -13 }, // 0x4B 'K'
{ 509, 8, 14, 10, 1, -13 }, // 0x4C 'L'
{ 523, 8, 14, 10, 1, -13 }, // 0x4D 'M'
{ 537, 8, 14, 10, 1, -13 }, // 0x4E 'N'
{ 551, 8, 14, 10, 1, -13 }, // 0x4F 'O'
{ 565, 8, 14, 10, 1, -13 }, // 0x50 'P'
{ 579, 8, 17, 10, 1, -13 }, // 0x51 'Q'
{ 596, 9, 14, 10, 1, -13 }, // 0x52 'R'
{ 612, 8, 14, 10, 1, -13 }, // 0x53 'S'
{ 626, 8, 14, 10, 1, -13 }, // 0x54 'T'
{ 640, 8, 14, 10, 1, -13 }, // 0x55 'U'
{ 654, 10, 14, 10, 0, -13 }, // 0x56 'V'
{ 672, 10, 14, 10, 0, -13 }, // 0x57 'W'
{ 690, 8, 14, 10, 1, -13 }, // 0x58 'X'
{ 704, 10, 14, 10, 0, -13 }, // 0x59 'Y'
{ 722, 9, 14, 10, 0, -13 }, // 0x5A 'Z'
{ 738, 4, 20, 10, 5, -15 }, // 0x5B '['
{ 748, 10, 19, 10, 0, -15 }, // 0x5C '\'
{ 772, 4, 20, 10, 1, -15 }, // 0x5D ']'
{ 782, 8, 7, 10, 1, -13 }, // 0x5E '^'
{ 789, 10, 2, 10, 0, 3 }, // 0x5F '_'
{ 792, 4, 4, 10, 3, -13 }, // 0x60 '`'
{ 794, 8, 10, 10, 1, -9 }, // 0x61 'a'
{ 804, 8, 14, 10, 1, -13 }, // 0x62 'b'
{ 818, 8, 10, 10, 1, -9 }, // 0x63 'c'
{ 828, 8, 14, 10, 1, -13 }, // 0x64 'd'
{ 842, 8, 10, 10, 1, -9 }, // 0x65 'e'
{ 852, 8, 14, 10, 1, -13 }, // 0x66 'f'
{ 866, 8, 14, 10, 1, -9 }, // 0x67 'g'
{ 880, 8, 14, 10, 1, -13 }, // 0x68 'h'
{ 894, 6, 14, 10, 2, -13 }, // 0x69 'i'
{ 905, 6, 18, 10, 2, -13 }, // 0x6A 'j'
{ 919, 8, 14, 10, 1, -13 }, // 0x6B 'k'
{ 933, 5, 14, 10, 2, -13 }, // 0x6C 'l'
{ 942, 8, 10, 10, 1, -9 }, // 0x6D 'm'
{ 952, 8, 10, 10, 1, -9 }, // 0x6E 'n'
{ 962, 8, 10, 10, 1, -9 }, // 0x6F 'o'
{ 972, 8, 14, 10, 1, -9 }, // 0x70 'p'
{ 986, 8, 14, 10, 1, -9 }, // 0x71 'q'
{ 1000, 8, 10, 10, 1, -9 }, // 0x72 'r'
{ 1010, 8, 10, 10, 1, -9 }, // 0x73 's'
{ 1020, 8, 13, 10, 1, -12 }, // 0x74 't'
{ 1033, 8, 10, 10, 1, -9 }, // 0x75 'u'
{ 1043, 10, 10, 10, 0, -9 }, // 0x76 'v'
{ 1056, 10, 10, 10, 0, -9 }, // 0x77 'w'
{ 1069, 8, 10, 10, 1, -9 }, // 0x78 'x'
{ 1079, 10, 14, 10, 0, -9 }, // 0x79 'y'
{ 1097, 8, 10, 10, 1, -9 }, // 0x7A 'z'
{ 1107, 5, 20, 10, 4, -15 }, // 0x7B '{'
{ 1120, 2, 19, 10, 4, -15 }, // 0x7C '|'
{ 1125, 5, 20, 10, 1, -15 }, // 0x7D '}'
{ 1138, 10, 3, 10, 0, -8 } }; // 0x7E '~'
const GFXfont monofonto10pt7b PROGMEM = {
(uint8_t *)monofonto10pt7bBitmaps,
(GFXglyph *)monofonto10pt7bGlyphs,
0x20, 0x7E, 24 };
// Approx. 1814 bytes

View File

@ -0,0 +1,853 @@
const uint8_t monofonto28pt7bBitmaps[] PROGMEM = {
0x00, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7,
0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7E, 0xFC,
0x00, 0x00, 0x00, 0x00, 0x08, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xBE,
0x10, 0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE1, 0xFC, 0x3F, 0x87,
0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0E, 0x00, 0x3C, 0x0F, 0x00, 0x0F,
0x07, 0xC0, 0x03, 0xC1, 0xE0, 0x01, 0xF0, 0x78, 0x00, 0x7C, 0x1E, 0x00,
0x1E, 0x0F, 0x80, 0x07, 0x83, 0xC0, 0x01, 0xE0, 0xF0, 0x00, 0xF8, 0x3C,
0x00, 0x3E, 0x0F, 0x00, 0x0F, 0x07, 0xC0, 0x3F, 0xFF, 0xFF, 0x1F, 0xFF,
0xFF, 0x87, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFE, 0x01,
0xE0, 0xF0, 0x00, 0x78, 0x3C, 0x00, 0x3E, 0x0F, 0x00, 0x0F, 0x03, 0xC0,
0x03, 0xC1, 0xF0, 0x00, 0xF0, 0x78, 0x00, 0x7C, 0x1E, 0x00, 0x1E, 0x07,
0x80, 0x7F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xC3, 0xFF,
0xFF, 0xF0, 0xFF, 0xFF, 0xFC, 0x03, 0xC1, 0xF0, 0x00, 0xF0, 0x78, 0x00,
0x3C, 0x1E, 0x00, 0x1F, 0x07, 0x80, 0x07, 0x81, 0xE0, 0x01, 0xE0, 0xF8,
0x00, 0x78, 0x3C, 0x00, 0x3E, 0x0F, 0x00, 0x0F, 0x83, 0xC0, 0x03, 0xC1,
0xF0, 0x00, 0xF0, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01,
0xE0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x00, 0x3F, 0xC0, 0x01, 0xFF,
0xF0, 0x0F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE1, 0xFF, 0xFF,
0xE3, 0xF8, 0x3F, 0xCF, 0xE0, 0x1F, 0xDF, 0xC0, 0x3F, 0xBF, 0x00, 0x7F,
0x7E, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x07,
0xFC, 0x00, 0x07, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x0F, 0xFF, 0x80, 0x1F,
0xFF, 0xC0, 0x1F, 0xFF, 0xC0, 0x0F, 0xFF, 0xC0, 0x0F, 0xFF, 0xC0, 0x07,
0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x00,
0xFE, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xFF, 0xE0, 0x07,
0xFF, 0xE0, 0x0F, 0xDF, 0xC0, 0x3F, 0xBF, 0xE0, 0xFF, 0x3F, 0xFF, 0xFE,
0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0x00,
0x7F, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x00, 0x00,
0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x04, 0x00, 0x00, 0x03,
0xFC, 0x00, 0x1F, 0x7F, 0xE0, 0x03, 0xEF, 0xFE, 0x00, 0x3C, 0xFF, 0xE0,
0x07, 0x8F, 0x1F, 0x00, 0x78, 0xF1, 0xF0, 0x0F, 0x0F, 0x1F, 0x01, 0xF0,
0xF1, 0xF0, 0x1E, 0x0F, 0x1F, 0x03, 0xE0, 0xF1, 0xF0, 0x3C, 0x0F, 0x1F,
0x07, 0x80, 0xF1, 0xF0, 0x78, 0x0F, 0x1F, 0x0F, 0x00, 0xF1, 0xF1, 0xF0,
0x0F, 0x1F, 0x1E, 0x00, 0xF1, 0xF3, 0xE0, 0x0F, 0x1F, 0x3C, 0x00, 0xF1,
0xF7, 0x80, 0x0F, 0xFE, 0xF9, 0xF8, 0xFF, 0xEF, 0x7F, 0xE7, 0xFD, 0xF7,
0xFE, 0x3F, 0x9E, 0xFF, 0xF0, 0x03, 0xCF, 0x9F, 0x00, 0x3C, 0xF0, 0xF0,
0x07, 0x8F, 0x0F, 0x00, 0xF8, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x01, 0xF0,
0xF0, 0xF0, 0x1E, 0x0F, 0x0F, 0x03, 0xC0, 0xF0, 0xF0, 0x3C, 0x0F, 0x0F,
0x07, 0x80, 0xF0, 0xF0, 0xF8, 0x0F, 0x0F, 0x0F, 0x00, 0xF0, 0xF1, 0xF0,
0x0F, 0x0F, 0x1E, 0x00, 0xF0, 0xF3, 0xC0, 0x0F, 0xFF, 0x7C, 0x00, 0xFF,
0xF7, 0x80, 0x07, 0xFE, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x40, 0x00,
0x10, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0xF8, 0x00, 0x1F, 0xFF, 0x00,
0x0F, 0xFF, 0xC0, 0x03, 0xE1, 0xF0, 0x00, 0xF8, 0x3E, 0x00, 0x3E, 0x0F,
0x80, 0x0F, 0x83, 0xE0, 0x03, 0xE0, 0xF8, 0x00, 0xF8, 0x3E, 0x00, 0x3E,
0x1F, 0x00, 0x0F, 0xCF, 0xC0, 0x03, 0xF3, 0xF0, 0x00, 0x7F, 0xF8, 0x00,
0x1F, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xC0,
0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x83, 0xFF,
0xF0, 0x30, 0xFE, 0xFC, 0x1C, 0x7F, 0x3F, 0x8F, 0x9F, 0x87, 0xE7, 0xFF,
0xC1, 0xFD, 0xFF, 0xF0, 0x3F, 0xFE, 0xFC, 0x0F, 0xFF, 0x3F, 0x01, 0xFF,
0x8F, 0xC0, 0x7F, 0xE3, 0xF0, 0x0F, 0xF0, 0xFC, 0x03, 0xF8, 0x3F, 0x01,
0xFF, 0x0F, 0xE0, 0xFF, 0xC1, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0x0F,
0xFF, 0xEF, 0xC3, 0xFF, 0xF3, 0xF8, 0x7F, 0xF8, 0x7E, 0x07, 0xF8, 0x1F,
0xC0, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01,
0x00, 0x70, 0x0F, 0x83, 0xF0, 0x7E, 0x0F, 0x83, 0xF0, 0x7C, 0x1F, 0x83,
0xF0, 0x7C, 0x1F, 0x83, 0xF0, 0x7C, 0x0F, 0x83, 0xF0, 0x7E, 0x0F, 0x81,
0xF0, 0x3E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x03, 0xE0,
0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E,
0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xF0, 0x7E, 0x07, 0xC0, 0xF8, 0x1F, 0x83,
0xF0, 0x3E, 0x07, 0xE0, 0xFC, 0x0F, 0x81, 0xF8, 0x1F, 0x03, 0xF0, 0x7E,
0x07, 0xC0, 0xE0, 0x08, 0x08, 0x03, 0x80, 0xFC, 0x07, 0xC0, 0x7E, 0x07,
0xE0, 0x3E, 0x03, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x80, 0xF8, 0x0F, 0x80,
0xFC, 0x0F, 0xC0, 0x7C, 0x07, 0xC0, 0x7E, 0x07, 0xE0, 0x7E, 0x03, 0xE0,
0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xF0, 0x3F, 0x03, 0xF0,
0x3F, 0x03, 0xF0, 0x3E, 0x03, 0xE0, 0x3E, 0x03, 0xE0, 0x3E, 0x07, 0xE0,
0x7E, 0x07, 0xE0, 0x7C, 0x07, 0xC0, 0xFC, 0x0F, 0xC0, 0xF8, 0x0F, 0x81,
0xF8, 0x1F, 0x01, 0xF0, 0x3F, 0x03, 0xE0, 0x7E, 0x07, 0xE0, 0x7C, 0x0F,
0xC0, 0x38, 0x00, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00,
0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0,
0x00, 0x00, 0x0F, 0x00, 0x43, 0x00, 0xF0, 0x1C, 0x7C, 0x0F, 0x07, 0xC7,
0xF0, 0xF1, 0xFE, 0x7F, 0xCE, 0x7F, 0xEF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF,
0xFF, 0x90, 0x3F, 0xFF, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xFC, 0x00,
0x00, 0x7F, 0xE0, 0x00, 0x0F, 0x9F, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x1F,
0x0F, 0xC0, 0x03, 0xF0, 0xFE, 0x00, 0x7E, 0x07, 0xF0, 0x0F, 0xE0, 0x3F,
0x00, 0x7C, 0x03, 0xE0, 0x03, 0xC0, 0x18, 0x00, 0x08, 0x01, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xC0, 0x00,
0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3C, 0x00,
0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x1F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3C,
0x00, 0x00, 0x1E, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03,
0xC0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x78, 0x00, 0x00,
0x3C, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x3F, 0x3F, 0x3F, 0x3E, 0x3E,
0x3E, 0x7E, 0x7E, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0xF8, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x10, 0xF9,
0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7C, 0x20, 0x00, 0x00, 0x03, 0xE0, 0x00,
0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8,
0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00,
0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00,
0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07,
0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00,
0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0,
0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00,
0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x00,
0x00, 0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F,
0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0x00, 0x00,
0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0,
0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00,
0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E,
0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x3F, 0xF8, 0x03,
0xFF, 0xF0, 0x7F, 0xFF, 0xC3, 0xFF, 0xFF, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF,
0xFF, 0xE0, 0xFF, 0xFE, 0x03, 0xFF, 0xF0, 0x1F, 0xFF, 0x80, 0x7F, 0xFC,
0x03, 0xFF, 0xE0, 0x1F, 0xFF, 0x00, 0xFF, 0xF8, 0x07, 0xFF, 0xC0, 0x3F,
0xFE, 0x01, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x7F, 0xFC, 0x03, 0xFF, 0xE0,
0x1F, 0xFF, 0x00, 0xFF, 0xF8, 0x07, 0xFF, 0xC0, 0x3F, 0xFE, 0x01, 0xFF,
0xF0, 0x0F, 0xFF, 0x80, 0x7F, 0xFC, 0x03, 0xFF, 0xE0, 0x1F, 0xFF, 0x00,
0xFF, 0xF8, 0x07, 0xFF, 0xC0, 0x3F, 0xFE, 0x03, 0xFF, 0xF0, 0x1F, 0xFF,
0xC1, 0xFE, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF,
0x83, 0xFF, 0xF8, 0x07, 0xFF, 0x00, 0x01, 0x80, 0x00, 0x00, 0x08, 0x01,
0xC0, 0x3E, 0x07, 0xF0, 0xFF, 0x8F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0xF3, 0xFE, 0x1F, 0xC0, 0xFC, 0x07, 0xE0, 0x3F, 0x01,
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, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07,
0xE0, 0x3F, 0x00, 0x20, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xF8, 0x07, 0xFF,
0xF0, 0x3F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x1F, 0xC1, 0xFE,
0x7F, 0x03, 0xFB, 0xF8, 0x07, 0xEF, 0xE0, 0x1F, 0xBF, 0x80, 0x7F, 0xFC,
0x01, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x07,
0xF8, 0x00, 0x1F, 0xE0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x1F, 0xE0,
0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x80, 0x01,
0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x0F, 0xF0,
0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x00,
0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0xE3, 0xFF,
0xFF, 0x9F, 0xFF, 0xFE, 0xFF, 0xFF, 0xF8, 0x00, 0x08, 0x00, 0x03, 0xFF,
0x00, 0x1F, 0xFF, 0x00, 0x7F, 0xFF, 0x01, 0xFF, 0xFF, 0x03, 0xFF, 0xFF,
0x0F, 0xFF, 0xFE, 0x1F, 0xC1, 0xFE, 0x3F, 0x01, 0xFC, 0xFC, 0x01, 0xF9,
0xF8, 0x03, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80,
0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00,
0x3F, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x03,
0xFE, 0x00, 0x03, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x03,
0xF8, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x1F,
0xFF, 0x00, 0x3F, 0xFE, 0x00, 0xFE, 0xFE, 0x03, 0xFD, 0xFE, 0x0F, 0xF3,
0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0x03,
0xFF, 0xF0, 0x01, 0xFF, 0x80, 0x00, 0x30, 0x00, 0x00, 0x1F, 0xF0, 0x00,
0x3F, 0xF0, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x00,
0xFF, 0xF0, 0x00, 0xFB, 0xF0, 0x00, 0xFB, 0xF0, 0x01, 0xF3, 0xF0, 0x01,
0xF3, 0xF0, 0x03, 0xE3, 0xF0, 0x03, 0xE3, 0xF0, 0x07, 0xC3, 0xF0, 0x07,
0xC3, 0xF0, 0x0F, 0x83, 0xF0, 0x0F, 0x83, 0xF0, 0x1F, 0x03, 0xF0, 0x1F,
0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3E, 0x03, 0xF0, 0x3E, 0x03, 0xF0, 0x7C,
0x03, 0xF0, 0x7C, 0x03, 0xF0, 0xF8, 0x03, 0xF0, 0xF8, 0x03, 0xF0, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00,
0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00,
0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x3F, 0xFF, 0xF8, 0x7F,
0xFF, 0xF0, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x87, 0xFF,
0xFF, 0x0F, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00,
0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00,
0x0F, 0x80, 0x00, 0x1F, 0x3F, 0xC0, 0x3F, 0xFF, 0xE0, 0x7F, 0xFF, 0xE0,
0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC7, 0xF0, 0x7F, 0x8F,
0xC0, 0x7F, 0x9F, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00,
0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xE0, 0x40, 0x1F, 0xC3, 0x80,
0x3F, 0x9F, 0x00, 0xFF, 0xFF, 0x03, 0xFC, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF,
0xE1, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x03, 0xFF, 0xFC, 0x03, 0xFF, 0xF0,
0x01, 0xFF, 0x80, 0x00, 0x20, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xC0,
0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xF0, 0x00,
0x1F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x07,
0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xFC,
0x00, 0x07, 0xF0, 0x00, 0x1F, 0xFF, 0xC0, 0x3F, 0xFF, 0xC0, 0xFF, 0xFF,
0xC1, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x9F, 0xF0, 0xFF,
0x3F, 0x80, 0xFF, 0x7F, 0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x01, 0xFF,
0xF0, 0x03, 0xFF, 0xE0, 0x07, 0xFF, 0xC0, 0x1F, 0xDF, 0x80, 0x3F, 0xBF,
0x80, 0x7F, 0x7F, 0x01, 0xFE, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xF1, 0xFF,
0xFF, 0xC1, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0x01, 0xFF, 0xF0, 0x00, 0xFF,
0xC0, 0x00, 0x10, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF,
0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x07,
0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x0F,
0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x3F,
0xC0, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x80, 0x00, 0x7F,
0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFE,
0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC,
0x00, 0x07, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF0,
0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xE0,
0x00, 0x3F, 0xE0, 0x00, 0x00, 0x10, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xFF,
0x00, 0x7F, 0xFF, 0x01, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x0F, 0xFF, 0xFE,
0x1F, 0xC1, 0xFC, 0x3F, 0x01, 0xFC, 0x7E, 0x01, 0xF8, 0xF8, 0x03, 0xF1,
0xF0, 0x07, 0xE3, 0xE0, 0x0F, 0xC7, 0xC0, 0x1F, 0x8F, 0x80, 0x3F, 0x1F,
0x80, 0x7E, 0x3F, 0x81, 0xF8, 0x3F, 0x87, 0xF0, 0x3F, 0xFF, 0xC0, 0x3F,
0xFF, 0x00, 0x7F, 0xFC, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFE, 0x1F, 0xC1,
0xFE, 0x7F, 0x00, 0xFC, 0xFC, 0x01, 0xFF, 0xF8, 0x01, 0xFF, 0xF0, 0x03,
0xFF, 0xC0, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x3F,
0xFE, 0x00, 0xFF, 0xFE, 0x01, 0xFD, 0xFE, 0x0F, 0xFB, 0xFF, 0xFF, 0xE3,
0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x07, 0xFF, 0xFC, 0x07, 0xFF, 0xF0, 0x03,
0xFF, 0x80, 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x03, 0xFE, 0x00, 0x1F,
0xFF, 0x00, 0x7F, 0xFF, 0x01, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x0F, 0xFF,
0xFF, 0x3F, 0xE1, 0xFE, 0x7F, 0x01, 0xFC, 0xFE, 0x01, 0xFD, 0xF8, 0x03,
0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x07, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x3F,
0xFF, 0x00, 0x7F, 0x7F, 0x00, 0xFE, 0xFE, 0x03, 0xFD, 0xFF, 0x0F, 0xFB,
0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x07,
0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0x80, 0x00,
0xFF, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x3F,
0x80, 0x00, 0xFF, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xE0,
0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00,
0x0F, 0xE0, 0x00, 0x10, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7C, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0xCF, 0xFF, 0xFF,
0xFF, 0xFD, 0xFB, 0xE1, 0x00, 0x04, 0x0F, 0x0F, 0xC7, 0xF7, 0xF9, 0xFC,
0xFE, 0x7E, 0x1F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x03, 0xF9, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x0F,
0x87, 0xC7, 0xE3, 0xF1, 0xF0, 0xF8, 0x7C, 0x3E, 0x06, 0x00, 0x00, 0x00,
0x00, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x01, 0xE0, 0x00, 0x03, 0xF0, 0x00,
0x07, 0xF8, 0x00, 0x0F, 0xFC, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xF0, 0x00,
0x7F, 0xE0, 0x00, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x07,
0xFC, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80,
0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F,
0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xE0, 0x00,
0x01, 0xF0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x04, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
0x00, 0x70, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xF8,
0x00, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x01,
0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0,
0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F,
0x00, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFF,
0x00, 0x03, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xF0,
0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0x00,
0x00, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x7F,
0xE0, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, 0x3F, 0xFF, 0xC7, 0xFF, 0xFE, 0x7F,
0xFF, 0xEF, 0xF0, 0xFE, 0xFE, 0x0F, 0xEF, 0xC0, 0x7F, 0xFC, 0x07, 0xF0,
0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x01, 0xFE,
0x00, 0x3F, 0xC0, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x01, 0xFE,
0x00, 0x3F, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F,
0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x3E, 0x00, 0x03, 0xF0, 0x00,
0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x00,
0x03, 0xE0, 0x00, 0x08, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0xFC, 0x00,
0x3F, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x0F, 0xE0, 0x7F, 0x07, 0xE0, 0x07,
0xC3, 0xF0, 0x00, 0xF8, 0xF8, 0x00, 0x1E, 0x3C, 0x00, 0x03, 0x9F, 0x00,
0x00, 0xF7, 0x80, 0x00, 0x3D, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x01, 0xFC,
0x00, 0x00, 0x7F, 0x01, 0xEC, 0x1F, 0xC1, 0xFF, 0x07, 0xF0, 0x7F, 0xC1,
0xFC, 0x3C, 0x70, 0x7F, 0x0E, 0x0C, 0x1F, 0xC3, 0x83, 0x07, 0xF0, 0xE0,
0xC1, 0xFC, 0x38, 0x30, 0x7F, 0x0E, 0x0C, 0x1B, 0xC3, 0xC7, 0x0E, 0xF0,
0x7F, 0xC3, 0xBC, 0x0F, 0xF9, 0xCF, 0x81, 0xF7, 0xF1, 0xE0, 0x00, 0xF0,
0x78, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3F,
0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00,
0x03, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF,
0x00, 0x00, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x01, 0xFF,
0x00, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0x80, 0x03, 0xFF,
0x80, 0x03, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x07, 0xFF,
0xC0, 0x07, 0xFF, 0xC0, 0x07, 0xEF, 0xE0, 0x07, 0xEF, 0xE0, 0x0F, 0xEF,
0xE0, 0x0F, 0xEF, 0xE0, 0x0F, 0xEF, 0xE0, 0x0F, 0xE7, 0xF0, 0x0F, 0xC7,
0xF0, 0x1F, 0xC7, 0xF0, 0x1F, 0xC7, 0xF0, 0x1F, 0xC7, 0xF0, 0x1F, 0xC7,
0xF8, 0x1F, 0x83, 0xF8, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF,
0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFC, 0x7F, 0x01,
0xFC, 0x7F, 0x01, 0xFE, 0x7F, 0x01, 0xFE, 0xFF, 0x01, 0xFE, 0xFE, 0x00,
0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFE,
0x0F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xCF,
0xC0, 0xFF, 0x3F, 0x01, 0xFE, 0xFC, 0x03, 0xFB, 0xF0, 0x0F, 0xEF, 0xC0,
0x3F, 0xBF, 0x00, 0xFE, 0xFC, 0x03, 0xFB, 0xF0, 0x0F, 0xEF, 0xC0, 0x3F,
0x3F, 0x01, 0xFC, 0xFC, 0x07, 0xF3, 0xF0, 0x7F, 0x8F, 0xFF, 0xFC, 0x3F,
0xFF, 0xE0, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x0F, 0xC0, 0xFE, 0x3F, 0x01,
0xFC, 0xFC, 0x03, 0xFB, 0xF0, 0x0F, 0xEF, 0xC0, 0x1F, 0xBF, 0x00, 0x7F,
0xFC, 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0xFE, 0xFC,
0x07, 0xFB, 0xF0, 0x7F, 0xEF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFC, 0xFF, 0xFF,
0xF3, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0x3F, 0xFF, 0x80, 0x00, 0x20, 0x00,
0x1F, 0xFC, 0x00, 0xFF, 0xFC, 0x0F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF1, 0xFF,
0xFF, 0xC7, 0xFF, 0xFF, 0xBF, 0xC1, 0xFE, 0xFE, 0x03, 0xFB, 0xF8, 0x07,
0xFF, 0xE0, 0x1F, 0xFF, 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, 0x03, 0xF0, 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, 0x80,
0x7F, 0xFE, 0x01, 0xFF, 0xF8, 0x0F, 0xEF, 0xF0, 0x7F, 0x9F, 0xFF, 0xFE,
0x7F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC3, 0xFF, 0xFE, 0x03, 0xFF, 0xF0, 0x07,
0xFF, 0x00, 0x00, 0x80, 0x00, 0xFF, 0xFE, 0x03, 0xFF, 0xFE, 0x0F, 0xFF,
0xFE, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xEF, 0xC0, 0xFF,
0xBF, 0x00, 0xFE, 0xFC, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0xFF,
0x00, 0x7F, 0xFC, 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0xFF, 0x00,
0x7F, 0xFC, 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0x7F,
0xFC, 0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0x7F, 0xFC,
0x01, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0x7F, 0xFC, 0x01,
0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0x7F, 0xFC, 0x03, 0xFB,
0xF0, 0x3F, 0xEF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF3, 0xFF,
0xFF, 0x8F, 0xFF, 0xF8, 0x3F, 0xFF, 0x80, 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, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFE,
0x00, 0x0F, 0xFF, 0xF8, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0xFF, 0xFF, 0x8F,
0xFF, 0xF8, 0xFF, 0xFF, 0x8F, 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, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 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, 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, 0xFF, 0xFC, 0xFF, 0xFF, 0xCF, 0xFF,
0xFC, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xCF, 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, 0x00, 0x20, 0x00, 0x1F, 0xFC, 0x00, 0xFF, 0xFC, 0x07,
0xFF, 0xF8, 0x3F, 0xFF, 0xF1, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xBF, 0xE1,
0xFE, 0xFF, 0x03, 0xFB, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0x00,
0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFE,
0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0xFF, 0xBF, 0x83, 0xFE, 0xFE, 0x0F,
0xFB, 0xF8, 0x3F, 0xEF, 0xE0, 0xFF, 0xBF, 0x83, 0xFE, 0xFE, 0x01, 0xFB,
0xF8, 0x07, 0xEF, 0xE0, 0x1F, 0xBF, 0x80, 0x7E, 0xFE, 0x01, 0xFB, 0xF8,
0x07, 0xEF, 0xE0, 0x1F, 0xBF, 0x80, 0x7E, 0xFE, 0x01, 0xFB, 0xF8, 0x0F,
0xEF, 0xF0, 0x7F, 0x9F, 0xFF, 0xFE, 0x7F, 0xFF, 0xF8, 0xFF, 0xFF, 0xE3,
0xFF, 0xFF, 0x87, 0xFF, 0xBE, 0x07, 0xFC, 0xF8, 0x02, 0x00, 0x00, 0xFE,
0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0x7F, 0xFE, 0x01,
0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFF,
0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xF8,
0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0,
0x1F, 0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F,
0xFF, 0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF,
0x80, 0x7F, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80,
0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xC0, 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, 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, 0x03, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x7F, 0xF0, 0x07, 0xFF, 0x00, 0x7F, 0xF0, 0x07, 0xFF, 0x00, 0x7F,
0xF0, 0x07, 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00,
0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00,
0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0,
0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F,
0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07,
0xF0, 0x00, 0x7F, 0x00, 0x0F, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xE0, 0x0F,
0xFE, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0xFF,
0xFE, 0x0F, 0xFF, 0x00, 0xFE, 0x01, 0xFD, 0xFC, 0x03, 0xFB, 0xF8, 0x0F,
0xE7, 0xF0, 0x1F, 0xCF, 0xE0, 0x7F, 0x1F, 0xC0, 0xFE, 0x3F, 0x83, 0xF8,
0x7F, 0x07, 0xF0, 0xFE, 0x0F, 0xC1, 0xFC, 0x3F, 0x83, 0xF8, 0x7E, 0x07,
0xF1, 0xFC, 0x0F, 0xE3, 0xF0, 0x1F, 0xCF, 0xE0, 0x3F, 0x9F, 0x80, 0x7F,
0x3F, 0x00, 0xFE, 0xFC, 0x01, 0xFD, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF,
0xE0, 0x0F, 0xFF, 0xE0, 0x1F, 0xDF, 0xC0, 0x3F, 0xBF, 0x80, 0x7F, 0x7F,
0x80, 0xFE, 0x7F, 0x01, 0xFC, 0xFF, 0x03, 0xF8, 0xFE, 0x07, 0xF1, 0xFE,
0x0F, 0xE3, 0xFC, 0x1F, 0xC3, 0xF8, 0x3F, 0x87, 0xF8, 0x7F, 0x07, 0xF0,
0xFE, 0x0F, 0xF1, 0xFC, 0x0F, 0xE3, 0xF8, 0x1F, 0xE7, 0xF0, 0x3F, 0xCF,
0xE0, 0x3F, 0x9F, 0xC0, 0x7F, 0xBF, 0x80, 0x7F, 0x7F, 0x00, 0xFF, 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, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE,
0x00, 0x07, 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFE,
0x01, 0xFF, 0xFC, 0x03, 0xFF, 0xF8, 0x07, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0,
0x3F, 0xFF, 0xE0, 0x7F, 0xFF, 0xC1, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x87,
0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x3F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFD, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFB, 0xFF, 0x7F,
0xF7, 0xFE, 0xFF, 0xEF, 0xF9, 0xFF, 0xCF, 0xF3, 0xFF, 0x9F, 0xE7, 0xFF,
0x3F, 0x8F, 0xFE, 0x3F, 0x1F, 0xFC, 0x7E, 0x3F, 0xF8, 0xF8, 0x7F, 0xF0,
0xF0, 0xFF, 0xE1, 0xE1, 0xFF, 0xC3, 0x83, 0xFF, 0x83, 0x07, 0xFF, 0x06,
0x0F, 0xFE, 0x08, 0x1F, 0xFC, 0x10, 0x3F, 0xF8, 0x00, 0x7F, 0xF0, 0x00,
0xFF, 0xE0, 0x01, 0xFF, 0xC0, 0x03, 0xFF, 0x80, 0x07, 0xFF, 0x00, 0x0F,
0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x7F, 0xFF, 0x00, 0xFF, 0xFE, 0x01, 0xFF,
0xFE, 0x03, 0xFF, 0xFC, 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xF8, 0x1F, 0xFF,
0xF0, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF,
0xC3, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFE,
0x3F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFC, 0xFF, 0xFB, 0xF9, 0xFF, 0xF7, 0xF3,
0xFF, 0xEF, 0xF7, 0xFF, 0xCF, 0xEF, 0xFF, 0x9F, 0xDF, 0xFF, 0x1F, 0xFF,
0xFE, 0x3F, 0xFF, 0xFC, 0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0xF0, 0xFF, 0xFF,
0xE0, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x03, 0xFF, 0xFE,
0x07, 0xFF, 0xFC, 0x07, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0,
0x1F, 0xFF, 0xC0, 0x3F, 0xFF, 0x80, 0x7F, 0xFF, 0x00, 0x7F, 0x00, 0x10,
0x00, 0x07, 0xFF, 0x00, 0x1F, 0xFF, 0x80, 0x7F, 0xFF, 0x81, 0xFF, 0xFF,
0x87, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x3F, 0xC1, 0xFE, 0x7F, 0x01, 0xFE,
0xFE, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 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,
0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x3F, 0xFE, 0x00, 0x7F, 0xFC, 0x00,
0xFF, 0xF8, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x07, 0xFF, 0xC0, 0x0F,
0xFF, 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0x7E, 0x00, 0xFE, 0xFE, 0x03, 0xFD,
0xFE, 0x0F, 0xF1, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0x03,
0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0x80, 0x00, 0x30, 0x00, 0xFF,
0xFE, 0x01, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x8F, 0xFF,
0xFF, 0x1F, 0xFF, 0xFF, 0x3F, 0x87, 0xFF, 0x7F, 0x01, 0xFE, 0xFE, 0x01,
0xFD, 0xFC, 0x03, 0xFB, 0xF8, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0xE0, 0x0F,
0xFF, 0xC0, 0x1F, 0xFF, 0x80, 0x3F, 0xFF, 0x00, 0xFF, 0xFE, 0x01, 0xFF,
0xFC, 0x03, 0xFB, 0xF8, 0x0F, 0xF7, 0xF0, 0x3F, 0xEF, 0xFF, 0xFF, 0x9F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFC, 0x7F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC1, 0xFF,
0xFE, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0,
0x00, 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, 0x00, 0x10, 0x00, 0x07, 0xFF, 0x00,
0x1F, 0xFF, 0x80, 0x7F, 0xFF, 0x81, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x0F,
0xFF, 0xFF, 0x3F, 0xC1, 0xFE, 0x7F, 0x01, 0xFE, 0xFE, 0x01, 0xFF, 0xF8,
0x03, 0xFF, 0xF0, 0x07, 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, 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, 0x7F, 0x00, 0xFE, 0xFF, 0x03, 0xFD, 0xFF, 0x9F, 0xF1, 0xFF,
0xFF, 0xE3, 0xFF, 0xFF, 0x83, 0xFF, 0xFE, 0x03, 0xFF, 0xF8, 0x03, 0xFF,
0xE0, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x1F,
0x00, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC,
0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x8F,
0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x3F, 0x8F, 0xFE, 0x7F, 0x03, 0xFE, 0xFE,
0x03, 0xFD, 0xFC, 0x03, 0xFB, 0xF8, 0x07, 0xF7, 0xF0, 0x0F, 0xEF, 0xE0,
0x1F, 0xDF, 0xC0, 0x3F, 0xBF, 0x80, 0x7F, 0x7F, 0x00, 0xFE, 0xFE, 0x03,
0xFD, 0xFC, 0x07, 0xF3, 0xF8, 0x1F, 0xE7, 0xF0, 0xFF, 0x8F, 0xFF, 0xFE,
0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xC0, 0x7F, 0xFF, 0x00, 0xFF, 0xFE, 0x01,
0xFF, 0xFE, 0x03, 0xFB, 0xFC, 0x07, 0xF7, 0xFC, 0x0F, 0xE7, 0xF8, 0x1F,
0xCF, 0xF8, 0x3F, 0x8F, 0xF0, 0x7F, 0x1F, 0xF0, 0xFE, 0x1F, 0xE1, 0xFC,
0x3F, 0xE3, 0xF8, 0x3F, 0xC7, 0xF0, 0x7F, 0xCF, 0xE0, 0x7F, 0x9F, 0xC0,
0xFF, 0xBF, 0x80, 0xFF, 0x7F, 0x01, 0xFF, 0x00, 0x10, 0x00, 0x07, 0xFF,
0x00, 0x3F, 0xFF, 0x00, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x07, 0xFF, 0xFF,
0x1F, 0xFF, 0xFE, 0x3F, 0x81, 0xFC, 0xFE, 0x01, 0xFD, 0xFC, 0x03, 0xFB,
0xF0, 0x07, 0xF7, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F,
0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x00, 0xFF, 0xF8, 0x00, 0xFF,
0xFC, 0x01, 0xFF, 0xFC, 0x01, 0xFF, 0xFE, 0x00, 0xFF, 0xFE, 0x00, 0xFF,
0xFE, 0x00, 0x7F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x1F, 0xF8, 0x00, 0x1F,
0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F,
0xFE, 0x00, 0x7E, 0xFE, 0x00, 0xFD, 0xFC, 0x03, 0xFB, 0xFC, 0x0F, 0xF3,
0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x07, 0xFF, 0xF8, 0x07,
0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x00, 0x60, 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, 0x1F, 0xC0, 0x00, 0x0F, 0xE0,
0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE,
0x00, 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, 0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x3F, 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, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, 0x80, 0x7F, 0xFF, 0x01, 0xFE,
0xFF, 0x07, 0xFD, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x83,
0xFF, 0xFE, 0x03, 0xFF, 0xF8, 0x01, 0xFF, 0xC0, 0x00, 0x10, 0x00, 0xFE,
0x00, 0x1F, 0xFF, 0x80, 0x1F, 0xDF, 0xC0, 0x0F, 0xEF, 0xE0, 0x07, 0xF7,
0xF0, 0x03, 0xF3, 0xFC, 0x03, 0xF8, 0xFE, 0x01, 0xFC, 0x7F, 0x00, 0xFE,
0x3F, 0x80, 0x7F, 0x1F, 0xC0, 0x3F, 0x0F, 0xF0, 0x3F, 0x83, 0xF8, 0x1F,
0xC1, 0xFC, 0x0F, 0xE0, 0xFE, 0x07, 0xE0, 0x7F, 0x03, 0xF0, 0x1F, 0xC3,
0xF8, 0x0F, 0xE1, 0xFC, 0x07, 0xF0, 0xFC, 0x03, 0xF8, 0x7E, 0x00, 0xFE,
0x7F, 0x00, 0x7F, 0x3F, 0x80, 0x3F, 0x9F, 0xC0, 0x1F, 0xCF, 0xC0, 0x0F,
0xE7, 0xE0, 0x03, 0xFF, 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xF8, 0x00,
0x7F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x07, 0xFF, 0x80,
0x03, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, 0x3F, 0xF0,
0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE,
0x00, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0x1F, 0xFF, 0x80, 0x07, 0xFF, 0xE0,
0x01, 0xFF, 0xF8, 0x00, 0xFF, 0xFE, 0x00, 0x3F, 0xBF, 0x80, 0x0F, 0xEF,
0xE0, 0x03, 0xFB, 0xF8, 0x20, 0xFE, 0x7F, 0x08, 0x3F, 0x9F, 0xC3, 0x0F,
0xE7, 0xF0, 0xC3, 0xF9, 0xFC, 0x30, 0xFE, 0x7F, 0x1C, 0x3F, 0x1F, 0xC7,
0x8F, 0xC7, 0xF1, 0xE3, 0xF1, 0xFC, 0xF9, 0xFC, 0x3F, 0x3E, 0x7F, 0x0F,
0xCF, 0xDF, 0xC3, 0xF3, 0xF7, 0xF0, 0xFD, 0xFD, 0xFC, 0x3F, 0xFF, 0xFE,
0x0F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF,
0xFE, 0x07, 0xFD, 0xFF, 0x81, 0xFF, 0x7F, 0xE0, 0x7F, 0xCF, 0xF8, 0x1F,
0xF3, 0xFC, 0x07, 0xFC, 0xFF, 0x01, 0xFE, 0x3F, 0xC0, 0x7F, 0x8F, 0xF0,
0x0F, 0xE1, 0xFC, 0x03, 0xF8, 0x7F, 0x00, 0xFE, 0x1F, 0xC0, 0x3F, 0x07,
0xE0, 0x0F, 0xC1, 0xF8, 0x03, 0xF0, 0x3E, 0x00, 0xFC, 0x0F, 0x80, 0x3F,
0x03, 0xE0, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFE, 0x7F, 0x81, 0xFE, 0x7F,
0x81, 0xFE, 0x7F, 0x81, 0xFC, 0x3F, 0xC3, 0xFC, 0x3F, 0xC3, 0xF8, 0x1F,
0xC3, 0xF8, 0x1F, 0xE7, 0xF0, 0x1F, 0xE7, 0xF0, 0x0F, 0xE7, 0xF0, 0x0F,
0xFF, 0xE0, 0x07, 0xFF, 0xE0, 0x07, 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x03,
0xFF, 0xC0, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x01,
0xFF, 0x00, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x03,
0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x07, 0xFF, 0xC0, 0x07,
0xFF, 0xE0, 0x0F, 0xEF, 0xE0, 0x0F, 0xEF, 0xF0, 0x1F, 0xE7, 0xF0, 0x1F,
0xC7, 0xF0, 0x1F, 0xC7, 0xF8, 0x3F, 0xC7, 0xF8, 0x3F, 0x83, 0xFC, 0x7F,
0x83, 0xFC, 0x7F, 0x83, 0xFC, 0x7F, 0x01, 0xFE, 0xFF, 0x01, 0xFE, 0xFF,
0x01, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xE0, 0x1F, 0xE7, 0xF8, 0x07, 0xF9,
0xFE, 0x01, 0xFE, 0x7F, 0xC0, 0xFF, 0x0F, 0xF0, 0x3F, 0xC3, 0xFC, 0x0F,
0xE0, 0x7F, 0x87, 0xF8, 0x1F, 0xE1, 0xFE, 0x07, 0xF8, 0x7F, 0x00, 0xFF,
0x3F, 0xC0, 0x3F, 0xCF, 0xE0, 0x07, 0xF3, 0xF8, 0x01, 0xFF, 0xFE, 0x00,
0x7F, 0xFF, 0x00, 0x0F, 0xFF, 0xC0, 0x03, 0xFF, 0xE0, 0x00, 0x7F, 0xF8,
0x00, 0x1F, 0xFE, 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x3F,
0xE0, 0x00, 0x07, 0xF8, 0x00, 0x01, 0xFE, 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, 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, 0x00,
0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF,
0xC7, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07,
0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x01,
0xFE, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x80, 0x00,
0x3F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x00,
0x0F, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00,
0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x00,
0x00, 0x7F, 0x80, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xC0,
0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xFF,
0xFF, 0xC7, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xF9, 0xFF,
0xFF, 0xFD, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81,
0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0,
0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E,
0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07,
0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0,
0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8,
0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03,
0xE0, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03,
0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03,
0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x0F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03,
0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03,
0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03,
0xC0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x1F, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07,
0xC0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00,
0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x3E, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 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, 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, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0,
0x7C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7E, 0x00, 0x01, 0xFC,
0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x7D, 0xF0,
0x00, 0xF9, 0xF0, 0x03, 0xE3, 0xE0, 0x07, 0xC3, 0xE0, 0x1F, 0x07, 0xC0,
0x3E, 0x07, 0xC0, 0xF8, 0x0F, 0x81, 0xF0, 0x0F, 0x87, 0xC0, 0x1F, 0x0F,
0x80, 0x1F, 0x3E, 0x00, 0x3E, 0x7C, 0x00, 0x3F, 0xF0, 0x00, 0x7C, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x03, 0xFC, 0x0F, 0xE0, 0x3F, 0x80, 0xFC, 0x07, 0xF0, 0x1F,
0xC0, 0x7E, 0x01, 0xF8, 0x07, 0xC0, 0x00, 0x20, 0x00, 0x0F, 0xFE, 0x00,
0xFF, 0xFE, 0x07, 0xFF, 0xFC, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0xE7, 0xFF,
0xFF, 0x9F, 0xC0, 0xFF, 0x06, 0x01, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F,
0xC1, 0xFE, 0x3F, 0x1F, 0xFE, 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x00,
0x3F, 0xFC, 0x01, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF,
0x7F, 0xFF, 0xFD, 0xFF, 0xFB, 0xF3, 0xFF, 0xCF, 0xC3, 0xFE, 0x3F, 0x00,
0x80, 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, 0x40, 0x1F, 0x87, 0xF8, 0x3F, 0x1F, 0xF8, 0x7E, 0x7F, 0xF8,
0xFD, 0xFF, 0xF9, 0xFB, 0xFF, 0xF3, 0xFF, 0xFF, 0xF7, 0xFC, 0x1F, 0xEF,
0xF0, 0x1F, 0xDF, 0xC0, 0x3F, 0xBF, 0x80, 0x3F, 0x7E, 0x00, 0x7F, 0xFC,
0x00, 0xFF, 0xF8, 0x01, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x07, 0xFF, 0xC0,
0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x80, 0x7F, 0x7F, 0x00, 0xFE, 0xFF, 0x01,
0xFD, 0xFF, 0x07, 0xFB, 0xFF, 0xFF, 0xF7, 0xEF, 0xFF, 0xCF, 0xDF, 0xFF,
0x9F, 0x9F, 0xFE, 0x3F, 0x1F, 0xF8, 0x7E, 0x1F, 0xE0, 0x00, 0x04, 0x00,
0x00, 0x02, 0x00, 0x00, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x3F, 0xFF, 0xE0,
0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0x8F, 0xFF, 0xFE, 0x1F, 0xF0, 0x38, 0x7F,
0x80, 0x20, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0,
0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00,
0x01, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x87, 0xF8, 0x03,
0x07, 0xFC, 0x0F, 0x0F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFE,
0x0F, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x00, 0x40, 0x00,
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, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x08,
0x0F, 0xE0, 0xFE, 0x1F, 0xC7, 0xFF, 0x3F, 0x9F, 0xFF, 0x7F, 0x3F, 0xFE,
0xFE, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFB, 0xFC, 0x1F, 0xFF, 0xF0, 0x1F,
0xFF, 0xC0, 0x3F, 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, 0xFF, 0xFF, 0x01, 0xFE, 0xFF,
0x07, 0xFD, 0xFF, 0xFD, 0xFB, 0xFF, 0xFB, 0xF3, 0xFF, 0xE7, 0xE3, 0xFF,
0xCF, 0xC7, 0xFF, 0x1F, 0x83, 0xF8, 0x3F, 0x00, 0x80, 0x00, 0x00, 0x10,
0x00, 0x01, 0xFF, 0x80, 0x07, 0xFF, 0xE0, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF,
0xF8, 0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x7F, 0x81, 0xFC, 0x7F, 0x00,
0xFE, 0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7E, 0xFC, 0x00,
0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00,
0xF8, 0x7F, 0x81, 0xFE, 0x3F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF,
0xF8, 0x0F, 0xFF, 0xF0, 0x07, 0xFF, 0xE0, 0x01, 0xFF, 0x80, 0x00, 0x18,
0x00, 0x00, 0x1F, 0xFF, 0x00, 0x7F, 0xFF, 0x00, 0xFF, 0xFF, 0x01, 0xFF,
0xFF, 0x01, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0x01, 0xFE, 0x00, 0x03, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF,
0xE0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xE0, 0x03, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8,
0x00, 0x00, 0x40, 0x00, 0x07, 0xF0, 0xFC, 0x3F, 0xF1, 0xF8, 0xFF, 0xF3,
0xF3, 0xFF, 0xF7, 0xE7, 0xFF, 0xEF, 0xDF, 0xFF, 0xFF, 0xBF, 0xC1, 0xFF,
0x7F, 0x01, 0xFF, 0xFE, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF,
0xE0, 0x0F, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x3F, 0xFE,
0x00, 0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF8, 0x0F, 0xF7, 0xF0,
0x1F, 0xEF, 0xF0, 0x7F, 0xDF, 0xFF, 0xDF, 0x9F, 0xFF, 0xBF, 0x3F, 0xFE,
0x7E, 0x3F, 0xFC, 0xFC, 0x3F, 0xF1, 0xF8, 0x1F, 0xC3, 0xF0, 0x04, 0x07,
0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x90, 0x00, 0x7E, 0x30, 0x01, 0xFC,
0xF8, 0x07, 0xFB, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x07,
0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x00, 0x30, 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, 0x01, 0x03, 0xF8, 0x7F, 0x8F, 0xE3,
0xFF, 0x3F, 0x9F, 0xFE, 0xFE, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xE0, 0xFF, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF,
0x80, 0x3F, 0xFE, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80,
0x3F, 0xFE, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F,
0xFE, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F, 0xFE,
0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F, 0x00, 0x40,
0x00, 0x78, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xF8, 0x01, 0xFE, 0x00,
0x3F, 0x00, 0x0F, 0xC0, 0x01, 0xE0, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x03, 0xFF, 0xC0, 0xFF, 0xF0,
0x3F, 0xFC, 0x0F, 0xFF, 0x03, 0xFF, 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, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x04, 0x00, 0x0F, 0x80,
0x07, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x3F,
0x00, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7F, 0xFE, 0x3F, 0xFF, 0x1F, 0xFF, 0x8F, 0xFF, 0xC7, 0xFF, 0xE3,
0xFF, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F,
0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00,
0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0,
0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x1F,
0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x03, 0xFB, 0xFF, 0xFD, 0xFF,
0xFE, 0xFF, 0xFE, 0x7F, 0xFF, 0x3F, 0xFF, 0x1F, 0xFE, 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, 0x03, 0xF0,
0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x0F,
0xEF, 0xC0, 0x7F, 0x3F, 0x03, 0xF8, 0xFC, 0x0F, 0xE3, 0xF0, 0x7F, 0x0F,
0xC3, 0xF8, 0x3F, 0x0F, 0xC0, 0xFC, 0x7F, 0x03, 0xF3, 0xF8, 0x0F, 0xCF,
0xC0, 0x3F, 0x7F, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0,
0x3F, 0x7F, 0x00, 0xFD, 0xFE, 0x03, 0xF3, 0xFC, 0x0F, 0xCF, 0xF0, 0x3F,
0x1F, 0xE0, 0xFC, 0x3F, 0x83, 0xF0, 0xFF, 0x0F, 0xC1, 0xFE, 0x3F, 0x07,
0xF8, 0xFC, 0x0F, 0xF3, 0xF0, 0x1F, 0xEF, 0xC0, 0x7F, 0xBF, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xF0, 0x3F,
0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F,
0x00, 0x20, 0x08, 0x7F, 0x3C, 0x3F, 0x3F, 0xBF, 0x3F, 0xDF, 0xFF, 0x9F,
0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C,
0x7F, 0xFE, 0x1E, 0x1F, 0xFF, 0x0F, 0x0F, 0xFF, 0x87, 0x87, 0xFF, 0xC3,
0xC3, 0xFF, 0xE1, 0xE1, 0xFF, 0xF0, 0xF0, 0xFF, 0xF8, 0x78, 0x7F, 0xFC,
0x3C, 0x3F, 0xFE, 0x1E, 0x1F, 0xFF, 0x0F, 0x0F, 0xFF, 0x87, 0x87, 0xFF,
0xC3, 0xC3, 0xFF, 0xE1, 0xE1, 0xFF, 0xF0, 0xF0, 0xFF, 0xF8, 0x78, 0x7F,
0xFC, 0x3C, 0x3F, 0xFE, 0x1E, 0x1F, 0xFF, 0x0F, 0x0F, 0xFF, 0x87, 0x87,
0xFF, 0xC3, 0xC3, 0xF0, 0x00, 0x01, 0x03, 0xF8, 0x7F, 0x8F, 0xE3, 0xFF,
0x3F, 0x9F, 0xFE, 0xFE, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xE0, 0xFF, 0xFE, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xE0, 0x1F, 0xFF, 0x80,
0x3F, 0xFE, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F,
0xFE, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F, 0xFE,
0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F, 0xFE, 0x00,
0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x3F, 0x00, 0x10, 0x00,
0x01, 0xFF, 0x00, 0x07, 0xFF, 0xC0, 0x0F, 0xFF, 0xE0, 0x1F, 0xFF, 0xF0,
0x3F, 0xFF, 0xF8, 0x3F, 0xFF, 0xFC, 0x7F, 0xC3, 0xFC, 0x7F, 0x01, 0xFC,
0x7F, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7E,
0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7F, 0xFE, 0x00, 0x7E, 0xFE, 0x00, 0x7E,
0xFE, 0x00, 0x7E, 0xFE, 0x00, 0xFE, 0x7F, 0x00, 0xFE, 0x7F, 0x81, 0xFE,
0x7F, 0xC3, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0,
0x0F, 0xFF, 0xE0, 0x07, 0xFF, 0xC0, 0x01, 0xFF, 0x00, 0x00, 0x10, 0x00,
0x00, 0x04, 0x01, 0xF8, 0x3F, 0x83, 0xF1, 0xFF, 0x87, 0xE7, 0xFF, 0x8F,
0xCF, 0xFF, 0x9F, 0xBF, 0xFF, 0x3F, 0x7F, 0xFF, 0x7F, 0xC1, 0xFE, 0xFF,
0x01, 0xFD, 0xFC, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xE0,
0x0F, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x3F, 0xFE, 0x00, 0x7F, 0xFE, 0x00,
0xFF, 0xFC, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xF0, 0x1F,
0xFF, 0xF0, 0x7F, 0xBF, 0x7F, 0xFF, 0x7E, 0xFF, 0xFE, 0xFC, 0xFF, 0xF9,
0xF9, 0xFF, 0xE3, 0xF1, 0xFF, 0xC7, 0xE1, 0xFE, 0x0F, 0xC0, 0x60, 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, 0x00, 0x00, 0x80, 0x00, 0x0F, 0xE0, 0xFC, 0x7F,
0xF1, 0xF8, 0xFF, 0xF3, 0xF3, 0xFF, 0xE7, 0xEF, 0xFF, 0xEF, 0xDF, 0xFF,
0xDF, 0xBF, 0xC1, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0x03, 0xFF, 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, 0x0F, 0xFF, 0xF0, 0x1F, 0xEF, 0xF0, 0x7F, 0xDF, 0xFF, 0xFF, 0xBF,
0xFF, 0xFF, 0x3F, 0xFE, 0xFE, 0x7F, 0xFD, 0xFC, 0x7F, 0xF3, 0xF8, 0x3F,
0x87, 0xF0, 0x08, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 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, 0x02,
0x07, 0xE0, 0xFE, 0x3F, 0x1F, 0xF9, 0xF9, 0xFF, 0xEF, 0xCF, 0xFF, 0xFE,
0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xF0, 0xFE, 0xFF, 0x03, 0xC7, 0xF0, 0x08,
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, 0x00,
0x00, 0x40, 0x00, 0xFF, 0xE0, 0x3F, 0xFF, 0x87, 0xFF, 0xFC, 0x7F, 0xFF,
0xCF, 0xE0, 0xFE, 0xFC, 0x07, 0xEF, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xE0,
0x00, 0xFF, 0x80, 0x07, 0xFF, 0x00, 0x7F, 0xFC, 0x03, 0xFF, 0xF0, 0x0F,
0xFF, 0xC0, 0x7F, 0xFE, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0x00, 0x0F, 0xF0,
0x00, 0x7F, 0xFC, 0x07, 0xFF, 0xE0, 0x7F, 0xFE, 0x07, 0xFF, 0xFF, 0xFE,
0x7F, 0xFF, 0xE7, 0xFF, 0xFC, 0x3F, 0xFF, 0x80, 0xFF, 0xE0, 0x00, 0x40,
0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x00,
0x3F, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0xFF, 0xFF,
0xC7, 0xFF, 0xFE, 0x3F, 0xFF, 0xF1, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0x7F,
0xFF, 0xE0, 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, 0x80, 0x01, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0x7F,
0xFF, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xC0, 0x1F, 0xFE, 0xFC, 0x00, 0xFF,
0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0,
0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03,
0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF,
0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x07, 0xFF, 0xC0,
0x1F, 0xFF, 0x80, 0x7F, 0xFF, 0x07, 0xFB, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF,
0x8F, 0xFF, 0xFC, 0x3F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x7F, 0xF0, 0x00,
0x08, 0x00, 0xFF, 0x00, 0x3F, 0xBF, 0x80, 0x1F, 0xDF, 0xC0, 0x0F, 0xCF,
0xF0, 0x0F, 0xE3, 0xF8, 0x07, 0xF1, 0xFC, 0x03, 0xF0, 0xFF, 0x01, 0xF8,
0x3F, 0x81, 0xFC, 0x1F, 0xC0, 0xFC, 0x0F, 0xE0, 0x7E, 0x03, 0xF8, 0x7F,
0x01, 0xFC, 0x3F, 0x80, 0xFE, 0x1F, 0x80, 0x3F, 0x9F, 0xC0, 0x1F, 0xCF,
0xE0, 0x0F, 0xE7, 0xE0, 0x03, 0xFB, 0xF0, 0x01, 0xFF, 0xF8, 0x00, 0xFF,
0xF8, 0x00, 0x3F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x0F, 0xFE, 0x00, 0x03,
0xFF, 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xC0, 0x00,
0x1F, 0xE0, 0x00, 0xFE, 0x08, 0x1F, 0xFF, 0x82, 0x07, 0xFF, 0xE0, 0xC1,
0xFB, 0xF8, 0x30, 0xFE, 0x7F, 0x0C, 0x3F, 0x9F, 0xC3, 0x0F, 0xE7, 0xF1,
0xC3, 0xF1, 0xFC, 0x78, 0xFC, 0x7F, 0x1E, 0x3F, 0x0F, 0xE7, 0x9F, 0xC3,
0xFB, 0xE7, 0xF0, 0xFE, 0xFD, 0xF8, 0x3F, 0xBF, 0x7E, 0x0F, 0xEF, 0xDF,
0x81, 0xFB, 0xFF, 0xE0, 0x7F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFC, 0x07, 0xFF,
0xFF, 0x01, 0xFF, 0x7F, 0xC0, 0x3F, 0xDF, 0xF0, 0x0F, 0xF3, 0xFC, 0x03,
0xFC, 0xFE, 0x00, 0xFE, 0x3F, 0x80, 0x3F, 0x8F, 0xE0, 0x07, 0xE1, 0xF8,
0x01, 0xF8, 0x7E, 0x00, 0x7C, 0x1F, 0x00, 0x7F, 0x00, 0xFE, 0xFE, 0x03,
0xF8, 0xFE, 0x07, 0xF1, 0xFC, 0x1F, 0xC1, 0xFC, 0x3F, 0x81, 0xF8, 0xFE,
0x03, 0xF9, 0xF8, 0x03, 0xF7, 0xF0, 0x07, 0xFF, 0xC0, 0x07, 0xFF, 0x80,
0x0F, 0xFE, 0x00, 0x0F, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xE0, 0x00,
0x7F, 0xC0, 0x00, 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x80, 0x1F,
0xBF, 0x80, 0x7F, 0x3F, 0x00, 0xFC, 0x7F, 0x03, 0xF8, 0x7E, 0x07, 0xE0,
0xFE, 0x1F, 0xC0, 0xFC, 0x3F, 0x81, 0xFC, 0xFE, 0x01, 0xFB, 0xFC, 0x03,
0xF8, 0xFF, 0x00, 0x3F, 0xBF, 0x80, 0x1F, 0xDF, 0xC0, 0x0F, 0xCF, 0xF0,
0x07, 0xE3, 0xF8, 0x07, 0xF1, 0xFC, 0x03, 0xF0, 0xFE, 0x01, 0xF8, 0x3F,
0x81, 0xFC, 0x1F, 0xC0, 0xFE, 0x0F, 0xE0, 0x7E, 0x03, 0xF8, 0x3F, 0x01,
0xFC, 0x3F, 0x80, 0xFE, 0x1F, 0x80, 0x3F, 0x0F, 0xC0, 0x1F, 0xCF, 0xE0,
0x0F, 0xE7, 0xE0, 0x03, 0xF3, 0xF0, 0x01, 0xFD, 0xF8, 0x00, 0xFF, 0xFC,
0x00, 0x3F, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xFF,
0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x1F,
0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x01,
0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00,
0x3F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x00,
0x7F, 0xFF, 0xFE, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xC7,
0xFF, 0xFF, 0x0F, 0xFF, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0x00,
0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x07,
0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8,
0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00,
0x03, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x1F, 0xFF, 0xFE, 0x3F, 0xFF, 0xFC,
0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xF0, 0x00, 0x7E, 0x03, 0xFC, 0x0F, 0xF8,
0x1F, 0xF0, 0x7F, 0xE0, 0xFE, 0x01, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x0F,
0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0,
0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01,
0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x3F, 0x03, 0xFC, 0x07, 0xF0, 0x0F, 0x80,
0x1F, 0xC0, 0x3F, 0xC0, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x00,
0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F,
0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0,
0x07, 0xC0, 0x0F, 0xC0, 0x1F, 0xC0, 0x3F, 0xF0, 0x7F, 0xE0, 0x7F, 0xC0,
0x7F, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x01, 0xFC, 0x03, 0xFC, 0x07,
0xFC, 0x0F, 0xF8, 0x03, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xC0, 0x0F,
0x80, 0x1F, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF0, 0x03, 0xE0, 0x07, 0xC0,
0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03,
0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0xE0, 0x0F, 0xF8, 0x0F, 0xF0, 0x03,
0xE0, 0x3F, 0xC0, 0xFF, 0x83, 0xF8, 0x07, 0xC0, 0x1F, 0x80, 0x3E, 0x00,
0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F,
0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0,
0x0F, 0xC0, 0x1F, 0x80, 0x7F, 0x07, 0xFC, 0x0F, 0xF8, 0x1F, 0xE0, 0x3F,
0x80, 0x7E, 0x00, 0x0F, 0x80, 0x00, 0x9F, 0xF0, 0x00, 0x5F, 0xFF, 0x00,
0x7F, 0xFF, 0xF0, 0x7F, 0x07, 0xFF, 0xFE, 0x00, 0xFF, 0xFA, 0x00, 0x0F,
0xF9, 0x00, 0x00, 0xF8 };
const GFXglyph monofonto28pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 28, 0, 0 }, // 0x20 ' '
{ 1, 7, 41, 28, 10, -39 }, // 0x21 '!'
{ 37, 11, 13, 28, 8, -39 }, // 0x22 '"'
{ 55, 26, 40, 28, 1, -39 }, // 0x23 '#'
{ 185, 23, 51, 28, 3, -44 }, // 0x24 '$'
{ 332, 28, 42, 28, 0, -40 }, // 0x25 '%'
{ 479, 26, 42, 28, 1, -40 }, // 0x26 '&'
{ 616, 4, 13, 28, 12, -39 }, // 0x27 '''
{ 623, 11, 56, 28, 12, -44 }, // 0x28 '('
{ 700, 12, 56, 28, 4, -44 }, // 0x29 ')'
{ 784, 28, 26, 28, 0, -39 }, // 0x2A '*'
{ 875, 25, 25, 28, 1, -31 }, // 0x2B '+'
{ 954, 8, 15, 28, 9, -7 }, // 0x2C ','
{ 969, 17, 6, 28, 5, -22 }, // 0x2D '-'
{ 982, 7, 10, 28, 10, -8 }, // 0x2E '.'
{ 991, 27, 53, 28, 0, -43 }, // 0x2F '/'
{ 1170, 21, 42, 28, 3, -40 }, // 0x30 '0'
{ 1281, 13, 40, 28, 5, -39 }, // 0x31 '1'
{ 1346, 22, 41, 28, 3, -40 }, // 0x32 '2'
{ 1459, 23, 42, 28, 2, -40 }, // 0x33 '3'
{ 1580, 24, 40, 28, 2, -39 }, // 0x34 '4'
{ 1700, 23, 41, 28, 2, -39 }, // 0x35 '5'
{ 1818, 23, 41, 28, 2, -39 }, // 0x36 '6'
{ 1936, 24, 40, 28, 2, -39 }, // 0x37 '7'
{ 2056, 23, 42, 28, 2, -40 }, // 0x38 '8'
{ 2177, 23, 41, 28, 2, -40 }, // 0x39 '9'
{ 2295, 7, 29, 28, 10, -27 }, // 0x3A ':'
{ 2321, 9, 36, 28, 9, -27 }, // 0x3B ';'
{ 2362, 25, 30, 28, 1, -34 }, // 0x3C '<'
{ 2456, 25, 16, 28, 1, -27 }, // 0x3D '='
{ 2506, 25, 30, 28, 1, -34 }, // 0x3E '>'
{ 2600, 20, 42, 28, 4, -40 }, // 0x3F '?'
{ 2705, 26, 41, 28, 1, -32 }, // 0x40 '@'
{ 2839, 24, 40, 28, 2, -39 }, // 0x41 'A'
{ 2959, 22, 40, 28, 3, -39 }, // 0x42 'B'
{ 3069, 22, 42, 28, 3, -40 }, // 0x43 'C'
{ 3185, 22, 40, 28, 3, -39 }, // 0x44 'D'
{ 3295, 20, 40, 28, 4, -39 }, // 0x45 'E'
{ 3395, 20, 40, 28, 4, -39 }, // 0x46 'F'
{ 3495, 22, 42, 28, 3, -40 }, // 0x47 'G'
{ 3611, 22, 40, 28, 3, -39 }, // 0x48 'H'
{ 3721, 19, 40, 28, 4, -39 }, // 0x49 'I'
{ 3816, 20, 40, 28, 4, -39 }, // 0x4A 'J'
{ 3916, 23, 40, 28, 3, -39 }, // 0x4B 'K'
{ 4031, 21, 40, 28, 4, -39 }, // 0x4C 'L'
{ 4136, 23, 40, 28, 2, -39 }, // 0x4D 'M'
{ 4251, 23, 40, 28, 2, -39 }, // 0x4E 'N'
{ 4366, 23, 42, 28, 2, -40 }, // 0x4F 'O'
{ 4487, 23, 40, 28, 3, -39 }, // 0x50 'P'
{ 4602, 23, 48, 28, 2, -40 }, // 0x51 'Q'
{ 4740, 23, 40, 28, 3, -39 }, // 0x52 'R'
{ 4855, 23, 42, 28, 3, -40 }, // 0x53 'S'
{ 4976, 25, 40, 28, 1, -39 }, // 0x54 'T'
{ 5101, 23, 41, 28, 2, -39 }, // 0x55 'U'
{ 5219, 25, 40, 28, 1, -39 }, // 0x56 'V'
{ 5344, 26, 40, 28, 1, -39 }, // 0x57 'W'
{ 5474, 24, 40, 28, 2, -39 }, // 0x58 'X'
{ 5594, 26, 40, 28, 1, -39 }, // 0x59 'Y'
{ 5724, 25, 40, 28, 1, -39 }, // 0x5A 'Z'
{ 5849, 11, 56, 28, 14, -44 }, // 0x5B '['
{ 5926, 27, 53, 28, 0, -43 }, // 0x5C '\'
{ 6105, 10, 56, 28, 3, -44 }, // 0x5D ']'
{ 6175, 23, 18, 28, 2, -39 }, // 0x5E '^'
{ 6227, 28, 4, 28, 0, 8 }, // 0x5F '_'
{ 6241, 13, 10, 28, 7, -39 }, // 0x60 '`'
{ 6258, 22, 29, 28, 3, -27 }, // 0x61 'a'
{ 6338, 23, 41, 28, 3, -39 }, // 0x62 'b'
{ 6456, 23, 29, 28, 2, -27 }, // 0x63 'c'
{ 6540, 23, 41, 28, 2, -39 }, // 0x64 'd'
{ 6658, 24, 29, 28, 2, -27 }, // 0x65 'e'
{ 6745, 24, 40, 28, 2, -39 }, // 0x66 'f'
{ 6865, 23, 40, 28, 2, -27 }, // 0x67 'g'
{ 6980, 22, 40, 28, 3, -39 }, // 0x68 'h'
{ 7090, 18, 41, 28, 5, -40 }, // 0x69 'i'
{ 7183, 17, 52, 28, 4, -40 }, // 0x6A 'j'
{ 7294, 22, 40, 28, 3, -39 }, // 0x6B 'k'
{ 7404, 12, 40, 28, 6, -39 }, // 0x6C 'l'
{ 7464, 25, 28, 28, 1, -27 }, // 0x6D 'm'
{ 7552, 22, 28, 28, 3, -27 }, // 0x6E 'n'
{ 7629, 24, 29, 28, 2, -27 }, // 0x6F 'o'
{ 7716, 23, 39, 28, 2, -27 }, // 0x70 'p'
{ 7829, 23, 39, 28, 2, -27 }, // 0x71 'q'
{ 7942, 21, 28, 28, 3, -27 }, // 0x72 'r'
{ 8016, 20, 29, 28, 4, -27 }, // 0x73 's'
{ 8089, 21, 35, 28, 3, -34 }, // 0x74 't'
{ 8181, 22, 28, 28, 3, -26 }, // 0x75 'u'
{ 8258, 25, 27, 28, 1, -26 }, // 0x76 'v'
{ 8343, 26, 27, 28, 1, -26 }, // 0x77 'w'
{ 8431, 23, 27, 28, 2, -26 }, // 0x78 'x'
{ 8509, 25, 38, 28, 1, -26 }, // 0x79 'y'
{ 8628, 23, 27, 28, 2, -26 }, // 0x7A 'z'
{ 8706, 15, 56, 28, 10, -44 }, // 0x7B '{'
{ 8811, 4, 53, 28, 12, -43 }, // 0x7C '|'
{ 8838, 15, 56, 28, 3, -44 }, // 0x7D '}'
{ 8943, 25, 8, 28, 1, -23 } }; // 0x7E '~'
const GFXfont monofonto28pt7b PROGMEM = {
(uint8_t *)monofonto28pt7bBitmaps,
(GFXglyph *)monofonto28pt7bGlyphs,
0x20, 0x7E, 66 };
// Approx. 9640 bytes

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,144 @@
const uint8_t monofonto6pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xF0, 0xC0, 0xFC, 0x28, 0xA2, 0x9F, 0x29, 0x4F, 0x94, 0x50,
0x47, 0xA5, 0x0E, 0x38, 0x73, 0xF3, 0x10, 0xC6, 0xAA, 0xAC, 0xEC, 0xD5,
0x55, 0x8C, 0x71, 0x45, 0x1C, 0x63, 0xD9, 0xB6, 0x7C, 0xE0, 0x5A, 0xAA,
0xAD, 0xA5, 0x55, 0x5E, 0x32, 0x9F, 0xCC, 0x49, 0x20, 0x20, 0x8F, 0xC8,
0x20, 0xFA, 0xF0, 0xC0, 0x04, 0x20, 0x82, 0x10, 0x42, 0x08, 0x21, 0x04,
0x20, 0xF9, 0x99, 0x99, 0x99, 0xF0, 0x2F, 0x92, 0x49, 0x20, 0xE9, 0x91,
0x32, 0x64, 0xF0, 0x31, 0x20, 0x82, 0x18, 0x2C, 0xD2, 0x78, 0x18, 0xE3,
0x96, 0x59, 0x6F, 0xC6, 0x18, 0xF4, 0x21, 0x0F, 0x48, 0x76, 0xE0, 0x18,
0xC3, 0x18, 0x79, 0x2C, 0xD2, 0x38, 0xFC, 0x21, 0x86, 0x10, 0xC3, 0x18,
0x60, 0x31, 0xA4, 0x92, 0x31, 0x2C, 0xD2, 0x78, 0x71, 0xAC, 0xD2, 0x78,
0x61, 0x0C, 0x60, 0xC0, 0x30, 0xC0, 0xE8, 0x0C, 0xCC, 0x18, 0x18, 0x10,
0xFC, 0x00, 0x3F, 0xC0, 0xC0, 0xC6, 0x62, 0x00, 0x6F, 0x13, 0x66, 0x00,
0x60, 0x79, 0x38, 0x6D, 0xB6, 0xF8, 0x10, 0x20, 0x30, 0xC3, 0x0C, 0x79,
0xE7, 0x92, 0xCC, 0xFB, 0x99, 0xEB, 0x9B, 0xF0, 0xF9, 0x88, 0x88, 0x8F,
0xF0, 0xFB, 0x99, 0x99, 0x99, 0xF0, 0xF8, 0x88, 0xF8, 0x88, 0xF0, 0xF8,
0x88, 0xF8, 0x88, 0x80, 0xFD, 0x88, 0xB9, 0x99, 0xF0, 0x99, 0x99, 0xF9,
0x99, 0x90, 0xF6, 0x66, 0x66, 0x66, 0xF0, 0x31, 0x11, 0x11, 0x13, 0xE0,
0x9D, 0xA9, 0x4E, 0x52, 0xD6, 0x98, 0x88, 0x88, 0x88, 0x88, 0xF0, 0xCF,
0x3F, 0xFF, 0xFF, 0xFD, 0xF3, 0xCC, 0x9D, 0xDD, 0xFB, 0xBB, 0x90, 0x79,
0x2C, 0xF3, 0xCF, 0x3C, 0xD2, 0x78, 0xF5, 0xA7, 0x39, 0x7A, 0x10, 0x80,
0x79, 0x2C, 0xF3, 0xCF, 0x3C, 0xD2, 0x78, 0x60, 0x80, 0xF5, 0xA7, 0x2F,
0x72, 0x96, 0x98, 0xF4, 0xA1, 0x87, 0x18, 0x7E, 0xF0, 0xFC, 0xC3, 0x0C,
0x30, 0xC3, 0x0C, 0x30, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xD2, 0x78, 0xCD,
0x24, 0x9A, 0x79, 0xE3, 0x0C, 0x30, 0xCF, 0x3D, 0xDE, 0x79, 0xE7, 0x9E,
0x48, 0xCD, 0xE7, 0x8C, 0x30, 0xC7, 0x9E, 0xCC, 0xCD, 0x27, 0x9E, 0x30,
0xC3, 0x0C, 0x30, 0xFC, 0x61, 0x84, 0x30, 0x86, 0x18, 0xFC, 0xEA, 0xAA,
0xAB, 0x81, 0x04, 0x10, 0x20, 0x81, 0x04, 0x10, 0x20, 0x81, 0xD5, 0x55,
0x57, 0x30, 0xC4, 0xB3, 0xFC, 0xD0, 0xF9, 0xF9, 0xBF, 0x84, 0x21, 0x6D,
0x4E, 0x7A, 0xB0, 0x3B, 0x71, 0x86, 0x9C, 0x08, 0x42, 0xD5, 0xE7, 0x2B,
0x68, 0x79, 0x2F, 0xF0, 0x49, 0xE0, 0x7A, 0x11, 0xE4, 0x21, 0x08, 0x40,
0x7A, 0xF3, 0x95, 0xBF, 0x6F, 0x88, 0x8B, 0xD9, 0x99, 0x90, 0x60, 0x0E,
0x66, 0x66, 0xF0, 0x30, 0x0F, 0x33, 0x33, 0x32, 0xE0, 0x88, 0x8B, 0xAE,
0xEB, 0xB0, 0xE4, 0x92, 0x49, 0x20, 0xEB, 0xFE, 0xFB, 0xEF, 0xB0, 0xBD,
0x99, 0x99, 0x31, 0xEC, 0xF3, 0x68, 0xC0, 0xFE, 0xF3, 0x9D, 0xFF, 0x18,
0x6A, 0xF3, 0x95, 0xB4, 0x21, 0xBD, 0x88, 0x88, 0xEB, 0xC3, 0x9F, 0x44,
0xF4, 0x44, 0x47, 0x99, 0x99, 0x9F, 0xCD, 0x26, 0x9E, 0x30, 0xC0, 0xDF,
0x77, 0x9E, 0x79, 0xE0, 0x49, 0xE3, 0x0C, 0x7B, 0x30, 0xCD, 0x26, 0x9E,
0x30, 0xC3, 0x08, 0x78, 0xCC, 0x46, 0x7C, 0x6D, 0x25, 0x92, 0x49, 0x90,
0xFF, 0xE0, 0xD9, 0x24, 0xD2, 0x4B, 0x40, 0xE6, 0xF0 };
const GFXglyph monofonto6pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 6, 0, 0 }, // 0x20 ' '
{ 1, 2, 9, 6, 2, -8 }, // 0x21 '!'
{ 4, 2, 3, 6, 2, -8 }, // 0x22 '"'
{ 5, 6, 9, 6, 0, -8 }, // 0x23 '#'
{ 12, 5, 11, 6, 1, -9 }, // 0x24 '$'
{ 19, 6, 9, 6, 0, -8 }, // 0x25 '%'
{ 26, 6, 9, 6, 0, -8 }, // 0x26 '&'
{ 33, 1, 3, 6, 3, -8 }, // 0x27 '''
{ 34, 2, 12, 6, 3, -9 }, // 0x28 '('
{ 37, 2, 12, 6, 1, -9 }, // 0x29 ')'
{ 40, 6, 6, 6, 0, -8 }, // 0x2A '*'
{ 45, 6, 5, 6, 0, -6 }, // 0x2B '+'
{ 49, 2, 4, 6, 2, -1 }, // 0x2C ','
{ 50, 4, 1, 6, 1, -4 }, // 0x2D '-'
{ 51, 2, 1, 6, 2, 0 }, // 0x2E '.'
{ 52, 6, 12, 6, 0, -9 }, // 0x2F '/'
{ 61, 4, 9, 6, 1, -8 }, // 0x30 '0'
{ 66, 3, 9, 6, 1, -8 }, // 0x31 '1'
{ 70, 4, 9, 6, 1, -8 }, // 0x32 '2'
{ 75, 6, 9, 6, 0, -8 }, // 0x33 '3'
{ 82, 6, 9, 6, 0, -8 }, // 0x34 '4'
{ 89, 5, 9, 6, 1, -8 }, // 0x35 '5'
{ 95, 6, 9, 6, 0, -8 }, // 0x36 '6'
{ 102, 6, 9, 6, 0, -8 }, // 0x37 '7'
{ 109, 6, 9, 6, 0, -8 }, // 0x38 '8'
{ 116, 6, 9, 6, 0, -8 }, // 0x39 '9'
{ 123, 2, 6, 6, 2, -5 }, // 0x3A ':'
{ 125, 2, 7, 6, 2, -5 }, // 0x3B ';'
{ 127, 6, 6, 6, 0, -6 }, // 0x3C '<'
{ 132, 6, 4, 6, 0, -5 }, // 0x3D '='
{ 135, 6, 6, 6, 0, -6 }, // 0x3E '>'
{ 140, 4, 9, 6, 1, -8 }, // 0x3F '?'
{ 145, 6, 9, 6, 0, -6 }, // 0x40 '@'
{ 152, 6, 9, 6, 0, -8 }, // 0x41 'A'
{ 159, 4, 9, 6, 1, -8 }, // 0x42 'B'
{ 164, 4, 9, 6, 1, -8 }, // 0x43 'C'
{ 169, 4, 9, 6, 1, -8 }, // 0x44 'D'
{ 174, 4, 9, 6, 1, -8 }, // 0x45 'E'
{ 179, 4, 9, 6, 1, -8 }, // 0x46 'F'
{ 184, 4, 9, 6, 1, -8 }, // 0x47 'G'
{ 189, 4, 9, 6, 1, -8 }, // 0x48 'H'
{ 194, 4, 9, 6, 1, -8 }, // 0x49 'I'
{ 199, 4, 9, 6, 1, -8 }, // 0x4A 'J'
{ 204, 5, 9, 6, 1, -8 }, // 0x4B 'K'
{ 210, 4, 9, 6, 1, -8 }, // 0x4C 'L'
{ 215, 6, 9, 6, 0, -8 }, // 0x4D 'M'
{ 222, 4, 9, 6, 1, -8 }, // 0x4E 'N'
{ 227, 6, 9, 6, 0, -8 }, // 0x4F 'O'
{ 234, 5, 9, 6, 1, -8 }, // 0x50 'P'
{ 240, 6, 11, 6, 0, -8 }, // 0x51 'Q'
{ 249, 5, 9, 6, 1, -8 }, // 0x52 'R'
{ 255, 5, 9, 6, 1, -8 }, // 0x53 'S'
{ 261, 6, 9, 6, 0, -8 }, // 0x54 'T'
{ 268, 6, 9, 6, 0, -8 }, // 0x55 'U'
{ 275, 6, 9, 6, 0, -8 }, // 0x56 'V'
{ 282, 6, 9, 6, 0, -8 }, // 0x57 'W'
{ 289, 6, 9, 6, 0, -8 }, // 0x58 'X'
{ 296, 6, 9, 6, 0, -8 }, // 0x59 'Y'
{ 303, 6, 9, 6, 0, -8 }, // 0x5A 'Z'
{ 310, 2, 12, 6, 3, -9 }, // 0x5B '['
{ 313, 6, 12, 6, 0, -9 }, // 0x5C '\'
{ 322, 2, 12, 6, 1, -9 }, // 0x5D ']'
{ 325, 6, 4, 6, 0, -8 }, // 0x5E '^'
{ 328, 6, 1, 6, 0, 2 }, // 0x5F '_'
{ 329, 2, 2, 6, 2, -8 }, // 0x60 '`'
{ 330, 4, 6, 6, 1, -5 }, // 0x61 'a'
{ 333, 5, 9, 6, 1, -8 }, // 0x62 'b'
{ 339, 5, 6, 6, 0, -5 }, // 0x63 'c'
{ 343, 5, 9, 6, 0, -8 }, // 0x64 'd'
{ 349, 6, 6, 6, 0, -5 }, // 0x65 'e'
{ 354, 5, 9, 6, 1, -8 }, // 0x66 'f'
{ 360, 5, 8, 6, 0, -5 }, // 0x67 'g'
{ 365, 4, 9, 6, 1, -8 }, // 0x68 'h'
{ 370, 4, 9, 6, 1, -8 }, // 0x69 'i'
{ 375, 4, 11, 6, 1, -8 }, // 0x6A 'j'
{ 381, 4, 9, 6, 1, -8 }, // 0x6B 'k'
{ 386, 3, 9, 6, 1, -8 }, // 0x6C 'l'
{ 390, 6, 6, 6, 0, -5 }, // 0x6D 'm'
{ 395, 4, 6, 6, 1, -5 }, // 0x6E 'n'
{ 398, 6, 6, 6, 0, -5 }, // 0x6F 'o'
{ 403, 5, 8, 6, 0, -5 }, // 0x70 'p'
{ 408, 5, 8, 6, 0, -5 }, // 0x71 'q'
{ 413, 4, 6, 6, 1, -5 }, // 0x72 'r'
{ 416, 4, 6, 6, 1, -5 }, // 0x73 's'
{ 419, 4, 8, 6, 1, -7 }, // 0x74 't'
{ 423, 4, 6, 6, 1, -5 }, // 0x75 'u'
{ 426, 6, 6, 6, 0, -5 }, // 0x76 'v'
{ 431, 6, 6, 6, 0, -5 }, // 0x77 'w'
{ 436, 6, 6, 6, 0, -5 }, // 0x78 'x'
{ 441, 6, 8, 6, 0, -5 }, // 0x79 'y'
{ 447, 5, 6, 6, 0, -5 }, // 0x7A 'z'
{ 451, 3, 12, 6, 2, -9 }, // 0x7B '{'
{ 456, 1, 11, 6, 3, -8 }, // 0x7C '|'
{ 458, 3, 12, 6, 1, -9 }, // 0x7D '}'
{ 463, 6, 2, 6, 0, -5 } }; // 0x7E '~'
const GFXfont monofonto6pt7b PROGMEM = {
(uint8_t *)monofonto6pt7bBitmaps,
(GFXglyph *)monofonto6pt7bGlyphs,
0x20, 0x7E, 14 };
// Approx. 1137 bytes

View File

@ -0,0 +1,168 @@
const uint8_t monofonto8pt7bBitmaps[] PROGMEM = {
0x00, 0xFF, 0xFC, 0xFC, 0x99, 0x99, 0x1A, 0x12, 0x16, 0x7F, 0x24, 0x24,
0x7E, 0xFE, 0x68, 0x48, 0x48, 0x30, 0xC7, 0xF3, 0xC3, 0x0F, 0x1F, 0x3C,
0x30, 0xF3, 0xFC, 0xE3, 0x00, 0xE3, 0xA2, 0xA4, 0xA4, 0xEF, 0x1D, 0x15,
0x25, 0x25, 0x45, 0xC7, 0x38, 0x7C, 0x6C, 0x6C, 0x38, 0x30, 0x7B, 0xCE,
0xCC, 0x7E, 0x7B, 0xFF, 0x23, 0x26, 0x64, 0x4C, 0xC4, 0x44, 0x66, 0x23,
0x4C, 0x66, 0x62, 0x23, 0x32, 0x22, 0x66, 0x4C, 0x18, 0x18, 0xDB, 0xFF,
0x18, 0x34, 0x66, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0xFA, 0xFF,
0xFC, 0x03, 0x02, 0x06, 0x04, 0x04, 0x0C, 0x08, 0x18, 0x10, 0x30, 0x20,
0x20, 0x60, 0x40, 0xC0, 0x7B, 0xFC, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0xF7,
0x80, 0x2F, 0xFE, 0xDB, 0x6D, 0xB0, 0x7B, 0xFC, 0xC3, 0x0C, 0x61, 0x8C,
0x71, 0xFF, 0xC0, 0x7B, 0xFC, 0xC3, 0x0C, 0x60, 0xC3, 0xCF, 0xF7, 0x80,
0x18, 0x70, 0xA3, 0x44, 0x99, 0x22, 0x7F, 0xFE, 0x30, 0x60, 0xFF, 0xFC,
0x30, 0xFB, 0xFC, 0xC3, 0x4F, 0xF7, 0x80, 0x18, 0xC3, 0x18, 0x7B, 0xFC,
0xF3, 0xCF, 0xF7, 0x80, 0xFF, 0xF8, 0x30, 0xC1, 0x87, 0x0C, 0x18, 0x60,
0xC3, 0x80, 0x7B, 0xFC, 0xF3, 0x7B, 0xFC, 0xE1, 0xCF, 0xF7, 0x80, 0x7B,
0xFC, 0xF3, 0xCF, 0xF7, 0x86, 0x30, 0xC6, 0x00, 0xFC, 0x3F, 0xFC, 0x0F,
0xA0, 0x01, 0x07, 0x1C, 0x60, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xFF, 0xFF,
0x00, 0x00, 0xFF, 0xFF, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x0E, 0x38, 0xE0,
0x80, 0x7B, 0xFC, 0xC3, 0x18, 0xC3, 0x00, 0x20, 0xC3, 0x00, 0x3C, 0x62,
0x41, 0xC1, 0x9D, 0x95, 0x95, 0xDE, 0x40, 0x60, 0x30, 0x10, 0x30, 0xC7,
0x9E, 0x79, 0xE5, 0xBF, 0xFF, 0x3C, 0xC0, 0xFB, 0xFC, 0xF3, 0xCF, 0xCC,
0xF3, 0xCF, 0xFF, 0x80, 0x7B, 0xFC, 0xF0, 0xC3, 0x0C, 0x30, 0xCF, 0xF7,
0x80, 0xFB, 0xFC, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0xFF, 0x80, 0xFF, 0xFC,
0x30, 0xFB, 0xEC, 0x30, 0xC3, 0xFF, 0xC0, 0xFF, 0xFC, 0x30, 0xFB, 0xEC,
0x30, 0xC3, 0x0C, 0x00, 0x7B, 0xFC, 0xF0, 0xDF, 0x7C, 0xF3, 0xCF, 0xF7,
0x40, 0xCF, 0x3C, 0xF3, 0xFF, 0xFC, 0xF3, 0xCF, 0x3C, 0xC0, 0xFF, 0xF3,
0x0C, 0x30, 0xC3, 0x0C, 0x33, 0xFF, 0xC0, 0x1C, 0x70, 0xC3, 0x0C, 0x30,
0xC3, 0x0F, 0xEF, 0x80, 0xCD, 0x9B, 0x66, 0xCF, 0x1E, 0x3C, 0x6C, 0xD9,
0x9B, 0x38, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0xFF, 0xC0, 0xCF,
0x3C, 0xFF, 0xFE, 0xDB, 0x6D, 0x96, 0x18, 0x40, 0xCF, 0xBE, 0xFB, 0xFF,
0xFF, 0xF7, 0xDF, 0x3C, 0xC0, 0x7B, 0xFC, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF,
0xF7, 0x80, 0xF9, 0xFB, 0x36, 0x7C, 0xDF, 0xBE, 0x60, 0xC1, 0x83, 0x00,
0x7B, 0xFC, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0xF7, 0x86, 0x0C, 0xF9, 0xFB,
0x36, 0x6C, 0xDF, 0xBC, 0x7C, 0xD9, 0xBB, 0x38, 0x7B, 0xFC, 0xF0, 0xF1,
0xE1, 0xC3, 0xCF, 0xF7, 0x80, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0xF7,
0x80, 0xE3, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x3C, 0x3C, 0x3C, 0x18, 0x18,
0xC3, 0xC3, 0xCB, 0x6E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x66, 0x24, 0xE7,
0x66, 0x3C, 0x3C, 0x3C, 0x18, 0x3C, 0x3C, 0x3C, 0x66, 0xE7, 0xE7, 0x66,
0x66, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7F, 0x7E, 0x0C,
0x0C, 0x1C, 0x18, 0x38, 0x30, 0x70, 0x7E, 0xFE, 0xFF, 0x6D, 0xB6, 0xDB,
0x6D, 0xBF, 0xC0, 0x40, 0x60, 0x20, 0x20, 0x30, 0x10, 0x18, 0x08, 0x0C,
0x04, 0x04, 0x06, 0x02, 0x03, 0xFD, 0xB6, 0xDB, 0x6D, 0xB6, 0xFF, 0x31,
0xE4, 0xB3, 0x84, 0xFF, 0xFF, 0xE6, 0x30, 0x7B, 0xF0, 0xDF, 0xFF, 0x3F,
0x5D, 0xC3, 0x0C, 0x36, 0xFF, 0x3C, 0x71, 0xCF, 0xFD, 0x80, 0x3F, 0xFC,
0x30, 0xC3, 0x1F, 0xDF, 0x0C, 0x30, 0xDB, 0xFF, 0x3C, 0xF3, 0xCF, 0xF6,
0xC0, 0x3C, 0x7E, 0x66, 0x7F, 0xE0, 0x64, 0x7E, 0x3C, 0x3D, 0xF6, 0x3E,
0xF9, 0x86, 0x18, 0x61, 0x86, 0x00, 0x7F, 0xFC, 0xF3, 0xCF, 0x3F, 0xDF,
0x8F, 0xF7, 0x80, 0xC3, 0x0C, 0x37, 0xFF, 0x3C, 0xF3, 0xCF, 0x3C, 0xC0,
0x30, 0xC0, 0x3C, 0xF0, 0xC3, 0x0C, 0x33, 0xFF, 0xC0, 0x18, 0xC0, 0xF7,
0x8C, 0x63, 0x18, 0xC6, 0x3F, 0xF8, 0xC3, 0x0C, 0x33, 0xDB, 0xCF, 0x3C,
0xDB, 0x6C, 0xC0, 0xFD, 0xB6, 0xDB, 0x6D, 0x80, 0xD6, 0xFF, 0xDB, 0xDB,
0xDB, 0xDB, 0xDB, 0xDB, 0xDF, 0xFC, 0xF3, 0xCF, 0x3C, 0xF3, 0x7B, 0xFC,
0xF3, 0xCF, 0x3F, 0xDE, 0xBA, 0xFC, 0xE3, 0x8F, 0x3B, 0xEE, 0x82, 0x08,
0x00, 0x6F, 0xFC, 0xF3, 0xCF, 0x3F, 0xDB, 0x0C, 0x30, 0xC0, 0xDB, 0xFC,
0xB0, 0xC3, 0x0C, 0x30, 0x7B, 0x3C, 0x1E, 0x3C, 0x3C, 0xDE, 0x20, 0x8F,
0xBE, 0x20, 0x82, 0x08, 0x3C, 0xF0, 0xCF, 0x3C, 0xF3, 0xCF, 0x3F, 0xDE,
0xE3, 0x66, 0x66, 0x36, 0x3C, 0x3C, 0x3C, 0x18, 0xCB, 0x6A, 0x7E, 0x7E,
0x7E, 0x7E, 0x3E, 0x24, 0xCD, 0x27, 0x8C, 0x31, 0xEC, 0xF3, 0xE3, 0x66,
0x66, 0x36, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x30, 0xFF, 0xE1, 0x8C,
0x31, 0x8F, 0xFF, 0x37, 0x66, 0x66, 0x6C, 0xC6, 0x66, 0x66, 0x73, 0xFF,
0xFF, 0xFF, 0xFC, 0xCE, 0x66, 0x66, 0x63, 0x36, 0x66, 0x66, 0xEC, 0x61,
0xFF, 0x8E };
const GFXglyph monofonto8pt7bGlyphs[] PROGMEM = {
{ 0, 1, 1, 8, 0, 0 }, // 0x20 ' '
{ 1, 2, 11, 8, 3, -10 }, // 0x21 '!'
{ 4, 4, 4, 8, 2, -10 }, // 0x22 '"'
{ 6, 8, 11, 8, 0, -10 }, // 0x23 '#'
{ 17, 6, 15, 8, 1, -12 }, // 0x24 '$'
{ 29, 8, 11, 8, 0, -10 }, // 0x25 '%'
{ 40, 8, 11, 8, 0, -10 }, // 0x26 '&'
{ 51, 2, 4, 8, 3, -10 }, // 0x27 '''
{ 52, 4, 16, 8, 3, -12 }, // 0x28 '('
{ 60, 4, 16, 8, 1, -12 }, // 0x29 ')'
{ 68, 8, 7, 8, 0, -10 }, // 0x2A '*'
{ 75, 8, 7, 8, 0, -8 }, // 0x2B '+'
{ 82, 2, 4, 8, 3, -1 }, // 0x2C ','
{ 83, 4, 2, 8, 2, -6 }, // 0x2D '-'
{ 84, 2, 3, 8, 3, -2 }, // 0x2E '.'
{ 85, 8, 15, 8, 0, -11 }, // 0x2F '/'
{ 100, 6, 11, 8, 1, -10 }, // 0x30 '0'
{ 109, 3, 12, 8, 2, -11 }, // 0x31 '1'
{ 114, 6, 11, 8, 1, -10 }, // 0x32 '2'
{ 123, 6, 11, 8, 1, -10 }, // 0x33 '3'
{ 132, 7, 11, 8, 1, -10 }, // 0x34 '4'
{ 142, 6, 11, 8, 1, -10 }, // 0x35 '5'
{ 151, 6, 11, 8, 1, -10 }, // 0x36 '6'
{ 160, 7, 11, 8, 1, -10 }, // 0x37 '7'
{ 170, 6, 11, 8, 1, -10 }, // 0x38 '8'
{ 179, 6, 11, 8, 1, -10 }, // 0x39 '9'
{ 188, 2, 8, 8, 3, -7 }, // 0x3A ':'
{ 190, 2, 10, 8, 3, -7 }, // 0x3B ';'
{ 193, 8, 9, 8, 0, -9 }, // 0x3C '<'
{ 202, 8, 6, 8, 0, -7 }, // 0x3D '='
{ 208, 8, 9, 8, 0, -9 }, // 0x3E '>'
{ 217, 6, 11, 8, 1, -10 }, // 0x3F '?'
{ 226, 8, 12, 8, 0, -8 }, // 0x40 '@'
{ 238, 6, 11, 8, 1, -10 }, // 0x41 'A'
{ 247, 6, 11, 8, 1, -10 }, // 0x42 'B'
{ 256, 6, 11, 8, 1, -10 }, // 0x43 'C'
{ 265, 6, 11, 8, 1, -10 }, // 0x44 'D'
{ 274, 6, 11, 8, 1, -10 }, // 0x45 'E'
{ 283, 6, 11, 8, 1, -10 }, // 0x46 'F'
{ 292, 6, 11, 8, 1, -10 }, // 0x47 'G'
{ 301, 6, 11, 8, 1, -10 }, // 0x48 'H'
{ 310, 6, 11, 8, 1, -10 }, // 0x49 'I'
{ 319, 6, 11, 8, 1, -10 }, // 0x4A 'J'
{ 328, 7, 11, 8, 1, -10 }, // 0x4B 'K'
{ 338, 6, 11, 8, 1, -10 }, // 0x4C 'L'
{ 347, 6, 11, 8, 1, -10 }, // 0x4D 'M'
{ 356, 6, 11, 8, 1, -10 }, // 0x4E 'N'
{ 365, 6, 11, 8, 1, -10 }, // 0x4F 'O'
{ 374, 7, 11, 8, 1, -10 }, // 0x50 'P'
{ 384, 6, 13, 8, 1, -10 }, // 0x51 'Q'
{ 394, 7, 11, 8, 1, -10 }, // 0x52 'R'
{ 404, 6, 11, 8, 1, -10 }, // 0x53 'S'
{ 413, 8, 11, 8, 0, -10 }, // 0x54 'T'
{ 424, 6, 11, 8, 1, -10 }, // 0x55 'U'
{ 433, 8, 11, 8, 0, -10 }, // 0x56 'V'
{ 444, 8, 11, 8, 0, -10 }, // 0x57 'W'
{ 455, 8, 11, 8, 0, -10 }, // 0x58 'X'
{ 466, 8, 11, 8, 0, -10 }, // 0x59 'Y'
{ 477, 8, 11, 8, 0, -10 }, // 0x5A 'Z'
{ 488, 3, 16, 8, 4, -12 }, // 0x5B '['
{ 494, 8, 15, 8, 0, -11 }, // 0x5C '\'
{ 509, 3, 16, 8, 1, -12 }, // 0x5D ']'
{ 515, 6, 5, 8, 1, -10 }, // 0x5E '^'
{ 519, 8, 2, 8, 0, 2 }, // 0x5F '_'
{ 521, 4, 3, 8, 2, -10 }, // 0x60 '`'
{ 523, 6, 8, 8, 1, -7 }, // 0x61 'a'
{ 529, 6, 11, 8, 1, -10 }, // 0x62 'b'
{ 538, 6, 8, 8, 1, -7 }, // 0x63 'c'
{ 544, 6, 11, 8, 1, -10 }, // 0x64 'd'
{ 553, 8, 8, 8, 0, -7 }, // 0x65 'e'
{ 561, 6, 11, 8, 1, -10 }, // 0x66 'f'
{ 570, 6, 11, 8, 1, -7 }, // 0x67 'g'
{ 579, 6, 11, 8, 1, -10 }, // 0x68 'h'
{ 588, 6, 11, 8, 1, -10 }, // 0x69 'i'
{ 597, 5, 14, 8, 1, -10 }, // 0x6A 'j'
{ 606, 6, 11, 8, 1, -10 }, // 0x6B 'k'
{ 615, 3, 11, 8, 2, -10 }, // 0x6C 'l'
{ 620, 8, 8, 8, 0, -7 }, // 0x6D 'm'
{ 628, 6, 8, 8, 1, -7 }, // 0x6E 'n'
{ 634, 6, 8, 8, 1, -7 }, // 0x6F 'o'
{ 640, 6, 11, 8, 1, -7 }, // 0x70 'p'
{ 649, 6, 11, 8, 1, -7 }, // 0x71 'q'
{ 658, 6, 8, 8, 1, -7 }, // 0x72 'r'
{ 664, 6, 8, 8, 1, -7 }, // 0x73 's'
{ 670, 6, 10, 8, 1, -9 }, // 0x74 't'
{ 678, 6, 8, 8, 1, -7 }, // 0x75 'u'
{ 684, 8, 8, 8, 0, -7 }, // 0x76 'v'
{ 692, 8, 8, 8, 0, -7 }, // 0x77 'w'
{ 700, 6, 8, 8, 1, -7 }, // 0x78 'x'
{ 706, 8, 11, 8, 0, -7 }, // 0x79 'y'
{ 717, 6, 8, 8, 1, -7 }, // 0x7A 'z'
{ 723, 4, 16, 8, 3, -12 }, // 0x7B '{'
{ 731, 2, 15, 8, 3, -11 }, // 0x7C '|'
{ 735, 4, 16, 8, 1, -12 }, // 0x7D '}'
{ 743, 8, 3, 8, 0, -7 } }; // 0x7E '~'
const GFXfont monofonto8pt7b PROGMEM = {
(uint8_t *)monofonto8pt7bBitmaps,
(GFXglyph *)monofonto8pt7bGlyphs,
0x20, 0x7E, 19 };
// Approx. 1418 bytes

View File

@ -0,0 +1,10 @@
#include "WatchyPipBoy.h"
#include "settings.h"
WatchyPipBoy watchy(settings);
void setup(){
watchy.init();
}
void loop(){}

View File

@ -0,0 +1,27 @@
#ifndef SETTINGS_H
#define SETTINGS_H
//Weather Settings
#define CITY_ID "5128581" //New York City https://openweathermap.org/current#cityid
#define OPENWEATHERMAP_APIKEY "f058fe1cad2afe8e2ddc5d063a64cecb" //use your own API key :)
#define OPENWEATHERMAP_URL "http://api.openweathermap.org/data/2.5/weather?id=" //open weather api
#define TEMP_UNIT "metric" //metric = Celsius , imperial = Fahrenheit
#define TEMP_LANG "en"
#define WEATHER_UPDATE_INTERVAL 30 //must be greater than 5, measured in minutes
//NTP Settings
#define NTP_SERVER "pool.ntp.org"
#define GMT_OFFSET_SEC 3600 * -5 //New York is UTC -5 EST, -4 EDT, will be overwritten by weather data
watchySettings settings{
.cityID = CITY_ID,
.weatherAPIKey = OPENWEATHERMAP_APIKEY,
.weatherURL = OPENWEATHERMAP_URL,
.weatherUnit = TEMP_UNIT,
.weatherLang = TEMP_LANG,
.weatherUpdateInterval = WEATHER_UPDATE_INTERVAL,
.ntpServer = NTP_SERVER,
.gmtOffset = GMT_OFFSET_SEC,
.vibrateOClock = true,
};
#endif

View File

@ -1,6 +1,6 @@
{ {
"name": "Watchy", "name": "Watchy",
"version": "1.4.13", "version": "1.4.14",
"description": "Watchy - An Open Source E-Paper Watch by SQFMI", "description": "Watchy - An Open Source E-Paper Watch by SQFMI",
"authors": [ "authors": [
{ {
@ -30,7 +30,7 @@
}, },
{ {
"name": "WiFiManager", "name": "WiFiManager",
"version": "https://github.com/tzapu/WiFiManager.git#2.0.3-alpha" "version": "https://github.com/tzapu/WiFiManager.git#master"
} }
] ]
} }

View File

@ -1,5 +1,5 @@
name=Watchy name=Watchy
version=1.4.13 version=1.4.14
author=SQFMI author=SQFMI
maintainer=SQFMI maintainer=SQFMI
sentence=Watchy - An Open Source E-Paper Watch by SQFMI sentence=Watchy - An Open Source E-Paper Watch by SQFMI

47
platformio.ini Normal file
View File

@ -0,0 +1,47 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:base]
platform = espressif32@6.7.0
framework = arduino
;CDC enabled on boot:
build_flags = -DCDC_ENABLED
;erase flash before upload:
;upload_flags = --erase-all
;upload speed:
upload_speed = 115200
;upload port (put yours here):
upload_port = COM7
;upload_port = /dev/ttyACM0 for linux
board_build.partitions = default_8MB.csv
monitor_speed = 115200
lib_deps =
Adafruit GFX Library
Arduino_JSON
DS3232RTC
NTPClient
https://github.com/orbitalair/Rtc_Pcf8563.git#master
https://github.com/ZinggJM/GxEPD2.git#master
https://github.com/tzapu/WiFiManager.git#master
[env:esp32-s3-devkitc-1]
; This is for v3
extends = env:base
board = esp32-s3-devkitc-1
board_build.mcu = esp32s3
framework = arduino
[env:esp32-pico-devkitm-2]
; This is for v1, v1.5, v2
extends = env:base
board = esp32-pico-devkitm-2
framework = arduino

View File

@ -19,11 +19,9 @@
RTC_DATA_ATTR bool displayFullInit = true; RTC_DATA_ATTR bool displayFullInit = true;
void WatchyDisplay::busyCallback(const void *) { void WatchyDisplay::busyCallback(const void *) {
#ifndef ARDUINO_ESP32S3_DEV
gpio_wakeup_enable((gpio_num_t)DISPLAY_BUSY, GPIO_INTR_LOW_LEVEL); gpio_wakeup_enable((gpio_num_t)DISPLAY_BUSY, GPIO_INTR_LOW_LEVEL);
esp_sleep_enable_gpio_wakeup(); esp_sleep_enable_gpio_wakeup();
esp_light_sleep_start(); esp_light_sleep_start();
#endif
} }
WatchyDisplay::WatchyDisplay() : WatchyDisplay::WatchyDisplay() :
@ -50,15 +48,35 @@ void WatchyDisplay::asyncPowerOn() {
} }
} }
void WatchyDisplay::setDarkBorder(bool dark) { void WatchyDisplay::drawDarkBorder(bool dark) {
if (_hibernating) return; if (_hibernating) return;
darkBorder = dark; //This line overrides the intended behaviour that I want for the
//darkBorder variable. I want to set the darkBorder variable to dark
//and then paint the border always dark, not always putting the opposite
//colour of the background, like it is done here.
//darkBorder = dark;
_startTransfer(); _startTransfer();
_transferCommand(0x3C); // BorderWavefrom _transferCommand(0x3C); // BorderWavefrom
_transfer(dark ? 0x02 : 0x05); _transfer(dark ? 0x02 : 0x05);
_endTransfer(); _endTransfer();
} }
/*
This is a setter for the darkBorder variable. It sets the darkBorder.
*/
void WatchyDisplay::setDarkBorder(bool dark) {
if (_hibernating) return;
darkBorder = dark;
drawDarkBorder(dark);
}
/*
This is a getter for the darkBorder variable. It returns the darkBorder.
*/
bool WatchyDisplay::isDarkBorder() {
return darkBorder;
}
void WatchyDisplay::clearScreen(uint8_t value) void WatchyDisplay::clearScreen(uint8_t value)
{ {
writeScreenBuffer(value); writeScreenBuffer(value);

View File

@ -38,7 +38,9 @@ class WatchyDisplay : public GxEPD2_EPD
// constructor // constructor
WatchyDisplay(); WatchyDisplay();
void initWatchy(); void initWatchy();
void drawDarkBorder(bool darkBorder);
void setDarkBorder(bool darkBorder); void setDarkBorder(bool darkBorder);
bool isDarkBorder();
void asyncPowerOn(); void asyncPowerOn();
void _PowerOnAsync(); void _PowerOnAsync();
bool waitingPowerOn = false; bool waitingPowerOn = false;
@ -76,7 +78,7 @@ class WatchyDisplay : public GxEPD2_EPD
void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time void powerOff(); // turns off generation of panel driving voltages, avoids screen fading over time
void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0) void hibernate(); // turns powerOff() and sets controller to deep sleep for minimum power use, ONLY if wakeable by RST (rst >= 0)
bool darkBorder = false; // adds a dark border outside the normal screen area bool darkBorder = true; // adds a dark border outside the normal screen area
static constexpr bool reduceBoosterTime = true; // Saves ~200ms static constexpr bool reduceBoosterTime = true; // Saves ~200ms
private: private:

96
src/MoonPhase.cpp Normal file
View File

@ -0,0 +1,96 @@
// Calculate the phase and position of the moon for a given date.
// The algorithm is simple and adequate for many purposes.
//
// This software was originally adapted to javascript by Stephen R. Schmitt
// from a BASIC program from the 'Astronomical Computing' column of Sky & Telescope,
// April 1994, page 86, written by Bradley E. Schaefer.
//
// Subsequently adapted from Stephen R. Schmitt's javascript to c++ for the Arduino
// by Cyrus Rahman, this work is subject to Stephen Schmitt's copyright:
//
// Copyright 2004 Stephen R. Schmitt
// You may use or modify this source code in any way you find useful, provided
// that you agree that the author(s) have no warranty, obligations or liability. You
// must determine the suitability of this source code for your use.
#include <math.h>
#include "MoonPhase.h"
// Names of lunar phases
static const char *phaseNames[] = {"New", "Evening Crescent", "First Quarter",
"Waxing Gibbous", "Full", "Waning Gibbous",
"Last Quarter", "Morning Crescent"};
// Names of Zodiac constellations
static const char *zodiacNames[] = {"Pisces", "Aries", "Taurus", "Gemini", "Cancer",
"Leo", "Virgo", "Libra", "Scorpio", "Sagittarius",
"Capricorn", "Aquarius"};
// Ecliptic angles of Zodiac constellations
static const float zodiacAngles[] = {33.18, 51.16, 93.44, 119.48, 135.30, 173.34,
224.17, 242.57, 271.26, 302.49, 311.72, 348.58};
// Constructor initialization.
MoonPhase::MoonPhase() {
jDate = 0;
phase = 0;
age = 0;
fraction = 0;
distance = 0;
latitude = 0;
longitude = 0;
phaseName = zodiacName = "";
}
// Determine the Moon Phase and orbital positions for the specified time.
void
MoonPhase::calculate(time_t t) {
jDate = julianDate(t);
// Calculate illumination (synodic) phase.
// From number of days since new moon on Julian date MOON_SYNODIC_OFFSET
// (1815UTC January 6, 2000), determine remainder of incomplete cycle.
phase = (jDate - MOON_SYNODIC_OFFSET) / MOON_SYNODIC_PERIOD;
phase -= floor(phase);
// Calculate age and illumination fraction.
age = phase * MOON_SYNODIC_PERIOD;
fraction = (1.0 - cos(2 * M_PI * phase)) * 0.5;
phaseName = phaseNames[(int)(phase * 8 + 0.5) % 8];
// Calculate distance from anomalistic phase.
double distancePhase = (jDate - MOON_DISTANCE_OFFSET) / MOON_DISTANCE_PERIOD;
distancePhase -= floor(distancePhase);
distance = 60.4 - 3.3 * cos(2 * M_PI * distancePhase)
- 0.6 * cos(2 * 2 * M_PI * phase - 2 * M_PI * distancePhase)
- 0.5 * cos(2 * 2 * M_PI * phase);
// Calculate ecliptic latitude from nodal (draconic) phase.
double latPhase = (jDate - MOON_LATITUDE_OFFSET) / MOON_LATITUDE_PERIOD;
latPhase -= floor(latPhase);
latitude = 5.1 * sin(2 * M_PI * latPhase);
// Calculate ecliptic longitude from sidereal motion.
double longPhase = (jDate - MOON_LONGITUDE_OFFSET) / MOON_LONGITUDE_PERIOD;
longPhase -= floor(longPhase);
longitude = 360 * longPhase
+ 6.3 * sin(2 * M_PI * distancePhase)
+ 1.3 * sin(2 * 2 * M_PI * phase - 2 * M_PI * distancePhase)
+ 0.7 * sin(2 * 2 * M_PI * phase);
if (longitude > 360)
longitude -= 360;
// Select the Zodiac name.
zodiacName = zodiacNames[0];
for (int i = 0; i < sizeof(zodiacAngles) / sizeof(float); i++) {
if (longitude < zodiacAngles[i]) {
zodiacName = zodiacNames[i];
break;
}
}
}
// Determine Julian date from Unix time.
// Provides marginally accurate results with older Arduino 4-byte double.
double
MoonPhase::julianDate(time_t t) {
return (t / 86400.0L + 2440587.5);
}

33
src/MoonPhase.h Normal file
View File

@ -0,0 +1,33 @@
#ifndef MoonPhase_h
#define MoonPhase_h
#include <time.h>
#define MOON_SYNODIC_PERIOD 29.530588853 // Period of moon cycle in days.
#define MOON_SYNODIC_OFFSET 2451550.26 // Reference cycle offset in days.
#define MOON_DISTANCE_PERIOD 27.55454988 // Period of distance oscillation
#define MOON_DISTANCE_OFFSET 2451562.2
#define MOON_LATITUDE_PERIOD 27.212220817 // Latitude oscillation
#define MOON_LATITUDE_OFFSET 2451565.2
#define MOON_LONGITUDE_PERIOD 27.321582241 // Longitude oscillation
#define MOON_LONGITUDE_OFFSET 2451555.8
class MoonPhase {
public:
double jDate;
double phase; // 0 - 1, 0.5 = full
double age; // Age in days of current cycle
double fraction; // Fraction of illuminated disk
double distance; // Moon distance in earth radii
double latitude; // Moon ecliptic latitude
double longitude; // Moon ecliptic longitude
const char *phaseName; // New, Full, etc.
const char *zodiacName; // Constellation
MoonPhase();
void calculate(time_t);
private:
double julianDate(time_t);
};
#endif

72
src/TimezonesGMT.h Normal file
View File

@ -0,0 +1,72 @@
#ifndef TIMEZONES_GMT_H
#define TIMEZONES_GMT_H
// This file is used to set up GMT based timezones.
// You don't need to change anything here to be able to set up GMT based time.
// If you set TIMEZONES_NON_GMT_OVERRIDE to 1 (as for get summer time and leaps),
// you must provide one location based timezone.
// 0: GMT, 1: Location timezone.
// Visit the link below.
#ifndef TIMEZONES_NON_GMT_OVERRIDE
#define TIMEZONES_NON_GMT_OVERRIDE 0 // 0: GMT, 1: Location timezone.
#endif
#ifndef TIMEZONES_SELECTED
#define TIMEZONES_SELECTED 0 // If above is 0, value is index of array below.
#endif // Etc/GMT0
#define TIMEZONES_LENGTH 28
typedef struct TZ {
const char* location;
const char* timezone;
} TZ;
// https://raw.githubusercontent.com/nayarsystems/posix_tz_db/master/zones.csv
static TZ tz_override = {
"Europe/Madrid",
"CET-1CEST,M3.5.0,M10.5.0/3"
};
static TZ timeZones[] = {
{"Etc/GMT+0","GMT0"}, // 0
{"Etc/GMT+1","<-01>1"}, // 1
{"Etc/GMT+2","<-02>2"}, // 2
{"Etc/GMT+3","<-03>3"}, // 3
{"Etc/GMT+4","<-04>4"}, // 4
{"Etc/GMT+5","<-05>5"}, // 5
{"Etc/GMT+6","<-06>6"}, // 6
{"Etc/GMT+7","<-07>7"}, // 7
{"Etc/GMT+8","<-08>8"}, // 8
{"Etc/GMT+9","<-09>9"}, // 9
{"Etc/GMT+10","<-10>10"}, // 10
{"Etc/GMT+11","<-11>11"}, // 11
{"Etc/GMT+12","<-12>12"}, // 12
{"Etc/GMT-0","GMT0"}, // 13
{"Etc/GMT-1","<+01>-1"}, // 14
{"Etc/GMT-2","<+02>-2"}, // 15
{"Etc/GMT-3","<+03>-3"}, // 16
{"Etc/GMT-4","<+04>-4"}, // 17
{"Etc/GMT-5","<+05>-5"}, // 18
{"Etc/GMT-6","<+06>-6"}, // 19
{"Etc/GMT-7","<+07>-7"}, // 20
{"Etc/GMT-8","<+08>-8"}, // 21
{"Etc/GMT-9","<+09>-9"}, // 22
{"Etc/GMT-10","<+10>-10"}, // 23
{"Etc/GMT-11","<+11>-11"}, // 24
{"Etc/GMT-12","<+12>-12"}, // 25
{"Etc/GMT-13","<+13>-13"}, // 26
{"Etc/GMT-14","<+14>-14"}, // 27
};
static long OFFSETS_SEC[] = {
0, 3600, 7200, 10800, 14400, 18000, 21600, 25200, 28800, 32400, 36000, 39600, 43200, 0, -3600, -7200, -10800, -14400, -18000, -21600, -25200, -28800, -32400, -36000, -39600, -43200, -46800, -50400
};
static int8_t tzIndex = TIMEZONES_SELECTED;
#endif //TIMEZONES_GMT_H

View File

@ -17,11 +17,17 @@ RTC_DATA_ATTR bool WIFI_CONFIGURED;
RTC_DATA_ATTR bool BLE_CONFIGURED; RTC_DATA_ATTR bool BLE_CONFIGURED;
RTC_DATA_ATTR weatherData currentWeather; RTC_DATA_ATTR weatherData currentWeather;
RTC_DATA_ATTR int weatherIntervalCounter = -1; RTC_DATA_ATTR int weatherIntervalCounter = -1;
#ifdef GMT_OFFSET_SEC
RTC_DATA_ATTR long gmtOffset = GMT_OFFSET_SEC;
#else
RTC_DATA_ATTR long gmtOffset = 0; RTC_DATA_ATTR long gmtOffset = 0;
#endif
RTC_DATA_ATTR bool alreadyInMenu = true; RTC_DATA_ATTR bool alreadyInMenu = true;
RTC_DATA_ATTR bool USB_PLUGGED_IN = false;
RTC_DATA_ATTR tmElements_t bootTime; RTC_DATA_ATTR tmElements_t bootTime;
RTC_DATA_ATTR uint32_t lastIPAddress; RTC_DATA_ATTR uint32_t lastIPAddress;
RTC_DATA_ATTR char lastSSID[30]; RTC_DATA_ATTR char lastSSID[30];
RTC_DATA_ATTR MoonPhase mp;
void Watchy::init(String datetime) { void Watchy::init(String datetime) {
esp_sleep_wakeup_cause_t wakeup_reason; esp_sleep_wakeup_cause_t wakeup_reason;
@ -31,11 +37,11 @@ void Watchy::init(String datetime) {
#else #else
Wire.begin(SDA, SCL); // init i2c Wire.begin(SDA, SCL); // init i2c
#endif #endif
RTC.init();
RTC.init();
// Init the display since is almost sure we will use it // Init the display since is almost sure we will use it
display.epd2.initWatchy(); display.epd2.initWatchy();
mp = MoonPhase();
switch (wakeup_reason) { switch (wakeup_reason) {
#ifdef ARDUINO_ESP32S3_DEV #ifdef ARDUINO_ESP32S3_DEV
case ESP_SLEEP_WAKEUP_TIMER: // RTC Alarm case ESP_SLEEP_WAKEUP_TIMER: // RTC Alarm
@ -57,7 +63,7 @@ void Watchy::init(String datetime) {
// Return to watchface if in menu for more than one tick // Return to watchface if in menu for more than one tick
if (alreadyInMenu) { if (alreadyInMenu) {
guiState = WATCHFACE_STATE; guiState = WATCHFACE_STATE;
showWatchFace(false); showWatchFace(true);
} else { } else {
alreadyInMenu = true; alreadyInMenu = true;
} }
@ -67,9 +73,23 @@ void Watchy::init(String datetime) {
case ESP_SLEEP_WAKEUP_EXT1: // button Press case ESP_SLEEP_WAKEUP_EXT1: // button Press
handleButtonPress(); handleButtonPress();
break; break;
#ifdef ARDUINO_ESP32S3_DEV
case ESP_SLEEP_WAKEUP_EXT0: // USB plug in
pinMode(USB_DET_PIN, INPUT);
USB_PLUGGED_IN = (digitalRead(USB_DET_PIN) == 1);
if(guiState == WATCHFACE_STATE){
RTC.read(currentTime);
showWatchFace(true);
}
break;
#endif
default: // reset default: // reset
RTC.config(datetime); RTC.config(datetime);
_bmaConfig(); _bmaConfig();
#ifdef ARDUINO_ESP32S3_DEV
pinMode(USB_DET_PIN, INPUT);
USB_PLUGGED_IN = (digitalRead(USB_DET_PIN) == 1);
#endif
gmtOffset = settings.gmtOffset; gmtOffset = settings.gmtOffset;
RTC.read(currentTime); RTC.read(currentTime);
RTC.read(bootTime); RTC.read(bootTime);
@ -79,15 +99,25 @@ void Watchy::init(String datetime) {
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_ALL); esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_ALL);
break; break;
} }
time_t epoch = makeTime(currentTime);
mp.calculate(epoch);
deepSleep(); deepSleep();
} }
void Watchy::deepSleep() { void Watchy::deepSleep() {
display.hibernate(); display.hibernate();
RTC.clearAlarm(); // resets the alarm flag in the RTC RTC.clearAlarm(); // resets the alarm flag in the RTC
#ifdef ARDUINO_ESP32S3_DEV #ifdef ARDUINO_ESP32S3_DEV
esp_sleep_enable_ext0_wakeup((gpio_num_t)USB_DET_PIN, USB_PLUGGED_IN ? LOW : HIGH); //// enable deep sleep wake on USB plug in/out
rtc_gpio_set_direction((gpio_num_t)USB_DET_PIN, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_pullup_en((gpio_num_t)USB_DET_PIN);
esp_sleep_enable_ext1_wakeup( esp_sleep_enable_ext1_wakeup(
BTN_PIN_MASK, BTN_PIN_MASK,
ESP_EXT1_WAKEUP_ANY_LOW); // enable deep sleep wake on button press ESP_EXT1_WAKEUP_ANY_LOW); // enable deep sleep wake on button press
rtc_gpio_set_direction((gpio_num_t)UP_BTN_PIN, RTC_GPIO_MODE_INPUT_ONLY);
rtc_gpio_pullup_en((gpio_num_t)UP_BTN_PIN);
rtc_clk_32k_enable(true); rtc_clk_32k_enable(true);
//rtc_clk_slow_freq_set(RTC_SLOW_FREQ_32K_XTAL); //rtc_clk_slow_freq_set(RTC_SLOW_FREQ_32K_XTAL);
struct tm timeinfo; struct tm timeinfo;
@ -108,7 +138,6 @@ void Watchy::deepSleep() {
BTN_PIN_MASK, BTN_PIN_MASK,
ESP_EXT1_WAKEUP_ANY_HIGH); // enable deep sleep wake on button press ESP_EXT1_WAKEUP_ANY_HIGH); // enable deep sleep wake on button press
#endif #endif
gpio_deep_sleep_hold_dis();
esp_deep_sleep_start(); esp_deep_sleep_start();
} }
@ -118,7 +147,7 @@ void Watchy::handleButtonPress() {
if (wakeupBit & MENU_BTN_MASK) { if (wakeupBit & MENU_BTN_MASK) {
if (guiState == if (guiState ==
WATCHFACE_STATE) { // enter menu state if coming from watch face WATCHFACE_STATE) { // enter menu state if coming from watch face
showMenu(menuIndex, false); showMenu(menuIndex, true);
} else if (guiState == } else if (guiState ==
MAIN_MENU_STATE) { // if already in menu, then select menu item MAIN_MENU_STATE) { // if already in menu, then select menu item
switch (menuIndex) { switch (menuIndex) {
@ -143,6 +172,8 @@ void Watchy::handleButtonPress() {
case 6: case 6:
showSyncNTP(); showSyncNTP();
break; break;
case 7:
showMoonPhase();
default: default:
break; break;
} }
@ -154,11 +185,11 @@ void Watchy::handleButtonPress() {
else if (wakeupBit & BACK_BTN_MASK) { else if (wakeupBit & BACK_BTN_MASK) {
if (guiState == MAIN_MENU_STATE) { // exit to watch face if already in menu if (guiState == MAIN_MENU_STATE) { // exit to watch face if already in menu
RTC.read(currentTime); RTC.read(currentTime);
showWatchFace(false); showWatchFace(true);
} else if (guiState == APP_STATE) { } else if (guiState == APP_STATE) {
showMenu(menuIndex, false); // exit to menu if already in app showMenu(menuIndex, true); // exit to menu if already in app
} else if (guiState == FW_UPDATE_STATE) { } else if (guiState == FW_UPDATE_STATE) {
showMenu(menuIndex, false); // exit to menu if already in app showMenu(menuIndex, true); // exit to menu if already in app
} else if (guiState == WATCHFACE_STATE) { } else if (guiState == WATCHFACE_STATE) {
return; return;
} }
@ -225,6 +256,8 @@ void Watchy::handleButtonPress() {
case 6: case 6:
showSyncNTP(); showSyncNTP();
break; break;
case 7:
showMoonPhase();
default: default:
break; break;
} }
@ -236,12 +269,12 @@ void Watchy::handleButtonPress() {
if (guiState == if (guiState ==
MAIN_MENU_STATE) { // exit to watch face if already in menu MAIN_MENU_STATE) { // exit to watch face if already in menu
RTC.read(currentTime); RTC.read(currentTime);
showWatchFace(false); showWatchFace(true);
break; // leave loop break; // leave loop
} else if (guiState == APP_STATE) { } else if (guiState == APP_STATE) {
showMenu(menuIndex, false); // exit to menu if already in app showMenu(menuIndex, true); // exit to menu if already in app
} else if (guiState == FW_UPDATE_STATE) { } else if (guiState == FW_UPDATE_STATE) {
showMenu(menuIndex, false); // exit to menu if already in app showMenu(menuIndex, true); // exit to menu if already in app
} }
} else if (digitalRead(UP_BTN_PIN) == ACTIVE_LOW) { } else if (digitalRead(UP_BTN_PIN) == ACTIVE_LOW) {
lastTimeout = millis(); lastTimeout = millis();
@ -278,9 +311,9 @@ void Watchy::showMenu(byte menuIndex, bool partialRefresh) {
const char *menuItems[] = { const char *menuItems[] = {
"About Watchy", "Vibrate Motor", "Show Accelerometer", "About Watchy", "Vibrate Motor", "Show Accelerometer",
"Set Time", "Setup WiFi", "Update Firmware", "Set Time", "Setup WiFi", "Update Firmware",
"Sync NTP"}; "Sync NTP", "Moon Phase"};
for (int i = 0; i < MENU_LENGTH; i++) { for (int i = 0; i < MENU_LENGTH; i++) {
yPos = MENU_HEIGHT + (MENU_HEIGHT * i); yPos = MENU_HEIGHT/2 + (MENU_HEIGHT * i);
display.setCursor(0, yPos); display.setCursor(0, yPos);
if (i == menuIndex) { if (i == menuIndex) {
display.getTextBounds(menuItems[i], 0, yPos, &x1, &y1, &w, &h); display.getTextBounds(menuItems[i], 0, yPos, &x1, &y1, &w, &h);
@ -311,9 +344,9 @@ void Watchy::showFastMenu(byte menuIndex) {
const char *menuItems[] = { const char *menuItems[] = {
"About Watchy", "Vibrate Motor", "Show Accelerometer", "About Watchy", "Vibrate Motor", "Show Accelerometer",
"Set Time", "Setup WiFi", "Update Firmware", "Set Time", "Setup WiFi", "Update Firmware",
"Sync NTP"}; "Sync NTP", "Moon Phase"};
for (int i = 0; i < MENU_LENGTH; i++) { for (int i = 0; i < MENU_LENGTH; i++) {
yPos = MENU_HEIGHT + (MENU_HEIGHT * i); yPos = MENU_HEIGHT/2 + (MENU_HEIGHT * i);
display.setCursor(0, yPos); display.setCursor(0, yPos);
if (i == menuIndex) { if (i == menuIndex) {
display.getTextBounds(menuItems[i], 0, yPos, &x1, &y1, &w, &h); display.getTextBounds(menuItems[i], 0, yPos, &x1, &y1, &w, &h);
@ -375,7 +408,58 @@ void Watchy::showAbout() {
}else{ }else{
display.println("WiFi Not Connected"); display.println("WiFi Not Connected");
} }
display.display(false); // full refresh display.display(true); // full refresh
guiState = APP_STATE;
}
void Watchy::showMoonPhase() {
RTC.read(currentTime);
time_t epoch = makeTime(currentTime);
mp.calculate(epoch);
display.setFullWindow();
display.fillScreen(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setTextColor(GxEPD_WHITE);
display.setCursor(0, 10);
display.setCursor(0, MENU_HEIGHT);
display.print("Date: ");
display.println(mp.jDate);
display.print("Phase: ");
display.println(mp.phase);
display.print("Age: ");
display.print(mp.age);
display.println(" days");
display.print("Visibility: ");
display.print(mp.fraction);
display.println("%");
display.print("Distance: ");
display.print(mp.distance);
display.println(" er");
display.print("Latitude: ");
display.print(mp.latitude);
display.println("°");
display.print("Longitude: ");
display.print(mp.longitude);
display.println("°");
display.print("Ph.: ");
display.println(mp.phaseName);
display.print("Zodiac: ");
display.println(mp.zodiacName);
display.display(true); // full refresh
guiState = APP_STATE; guiState = APP_STATE;
} }
@ -387,9 +471,9 @@ void Watchy::showBuzz() {
display.setTextColor(GxEPD_WHITE); display.setTextColor(GxEPD_WHITE);
display.setCursor(70, 80); display.setCursor(70, 80);
display.println("Buzz!"); display.println("Buzz!");
display.display(false); // full refresh display.display(true); // full refresh
vibMotor(); vibMotor();
showMenu(menuIndex, false); showMenu(menuIndex, true);
} }
void Watchy::vibMotor(uint8_t intervalMs, uint8_t length) { void Watchy::vibMotor(uint8_t intervalMs, uint8_t length) {
@ -421,6 +505,10 @@ void Watchy::setTime() {
int8_t month = currentTime.Month; int8_t month = currentTime.Month;
int8_t year = tmYearToY2k(currentTime.Year); int8_t year = tmYearToY2k(currentTime.Year);
#endif #endif
// gmt variable defaults to TIMEZONES_SELECTED if defined
int8_t gmt = OFFSETS_SEC[tzIndex] / 3600;
int8_t setIndex = SET_HOUR; int8_t setIndex = SET_HOUR;
@ -467,6 +555,9 @@ void Watchy::setTime() {
case SET_DAY: case SET_DAY:
day == 31 ? (day = 1) : day++; day == 31 ? (day = 1) : day++;
break; break;
case SET_TZ:
tzIndex == TIMEZONES_LENGTH - 1 ? (tzIndex = 0) : tzIndex++;
break;
default: default:
break; break;
} }
@ -490,11 +581,18 @@ void Watchy::setTime() {
case SET_DAY: case SET_DAY:
day == 1 ? (day = 31) : day--; day == 1 ? (day = 31) : day--;
break; break;
case SET_TZ:
tzIndex == 0 ? (tzIndex = TIMEZONES_LENGTH - 1) : tzIndex--;
break;
default: default:
break; break;
} }
} }
gmt = OFFSETS_SEC[tzIndex] / 3600;
gmtOffset = gmt * 3600;
display.fillScreen(GxEPD_BLACK); display.fillScreen(GxEPD_BLACK);
display.setTextColor(GxEPD_WHITE); display.setTextColor(GxEPD_WHITE);
display.setFont(&DSEG7_Classic_Bold_53); display.setFont(&DSEG7_Classic_Bold_53);
@ -520,14 +618,25 @@ void Watchy::setTime() {
} }
display.print(minute); display.print(minute);
display.setFont(&FreeMonoBold9pt7b);
display.setTextColor(GxEPD_WHITE);
display.setCursor(82, 140);
if (setIndex == SET_TZ) { // blink minute digits
display.setTextColor(blink ? GxEPD_WHITE : GxEPD_BLACK);
}
display.print("GMT");
display.print(gmt);
display.setTextColor(GxEPD_WHITE); display.setTextColor(GxEPD_WHITE);
display.setFont(&FreeMonoBold9pt7b); display.setFont(&FreeMonoBold9pt7b);
display.setCursor(45, 150); display.setCursor(60, 165);
if (setIndex == SET_YEAR) { // blink minute digits if (setIndex == SET_YEAR) { // blink minute digits
display.setTextColor(blink ? GxEPD_WHITE : GxEPD_BLACK); display.setTextColor(blink ? GxEPD_WHITE : GxEPD_BLACK);
} }
display.print(2000 + year); display.print(1970 + year);
display.setTextColor(GxEPD_WHITE); display.setTextColor(GxEPD_WHITE);
display.print("/"); display.print("/");
@ -550,6 +659,7 @@ void Watchy::setTime() {
display.print("0"); display.print("0");
} }
display.print(day); display.print(day);
display.display(true); // partial refresh display.display(true); // partial refresh
} }
@ -565,9 +675,21 @@ void Watchy::setTime() {
tm.Minute = minute; tm.Minute = minute;
tm.Second = 0; tm.Second = 0;
if(TIMEZONES_NON_GMT_OVERRIDE == 0){
setenv("TZ", timeZones[tzIndex].timezone, 1);
} else{
#if TIMEZONES_NON_GMT_OVERRIDE == 1
setenv("TZ", tz_override.timezone, 1);
#else
setenv("TZ", timeZones[TIMEZONES_SELECTED].timezone, 1);
#endif
}
tzset();
RTC.set(tm); RTC.set(tm);
showMenu(menuIndex, false); showMenu(menuIndex, true);
} }
void Watchy::showAccelerometer() { void Watchy::showAccelerometer() {
@ -639,7 +761,7 @@ void Watchy::showAccelerometer() {
} }
} }
showMenu(menuIndex, false); showMenu(menuIndex, true);
} }
void Watchy::showWatchFace(bool partialRefresh) { void Watchy::showWatchFace(bool partialRefresh) {
@ -909,8 +1031,9 @@ void Watchy::setupWifi() {
weatherIntervalCounter = -1; // Reset to force weather to be read again weatherIntervalCounter = -1; // Reset to force weather to be read again
lastIPAddress = WiFi.localIP(); lastIPAddress = WiFi.localIP();
WiFi.SSID().toCharArray(lastSSID, 30); WiFi.SSID().toCharArray(lastSSID, 30);
getWeatherData(); // force weather update
} }
display.display(false); // full refresh display.display(true); // full refresh
// turn off radios // turn off radios
WiFi.mode(WIFI_OFF); WiFi.mode(WIFI_OFF);
btStop(); btStop();
@ -932,7 +1055,7 @@ void Watchy::_configModeCallback(WiFiManager *myWiFiManager) {
display.println(WiFi.softAPIP()); display.println(WiFi.softAPIP());
display.println("MAC address:"); display.println("MAC address:");
display.println(WiFi.softAPmacAddress().c_str()); display.println(WiFi.softAPmacAddress().c_str());
display.display(false); // full refresh display.display(true); // full refresh
} }
bool Watchy::connectWiFi() { bool Watchy::connectWiFi() {
@ -971,7 +1094,7 @@ void Watchy::showUpdateFW() {
display.println("again when ready"); display.println("again when ready");
display.println(" "); display.println(" ");
display.println("Keep USB powered"); display.println("Keep USB powered");
display.display(false); // full refresh display.display(true); // full refresh
guiState = FW_UPDATE_STATE; guiState = FW_UPDATE_STATE;
} }
@ -988,7 +1111,7 @@ void Watchy::updateFWBegin() {
display.println(" "); display.println(" ");
display.println("Waiting for"); display.println("Waiting for");
display.println("connection..."); display.println("connection...");
display.display(false); // full refresh display.display(true); // full refresh
BLE BT; BLE BT;
BT.begin("Watchy BLE OTA"); BT.begin("Watchy BLE OTA");
@ -1008,7 +1131,7 @@ void Watchy::updateFWBegin() {
display.println(" "); display.println(" ");
display.println("Waiting for"); display.println("Waiting for");
display.println("upload..."); display.println("upload...");
display.display(false); // full refresh display.display(true); // full refresh
} }
if (currentStatus == 1) { if (currentStatus == 1) {
display.setFullWindow(); display.setFullWindow();
@ -1033,7 +1156,7 @@ void Watchy::updateFWBegin() {
display.println("completed!"); display.println("completed!");
display.println(" "); display.println(" ");
display.println("Rebooting..."); display.println("Rebooting...");
display.display(false); // full refresh display.display(true); // full refresh
delay(2000); delay(2000);
esp_restart(); esp_restart();
@ -1047,19 +1170,23 @@ void Watchy::updateFWBegin() {
display.println("BLE Disconnected!"); display.println("BLE Disconnected!");
display.println(" "); display.println(" ");
display.println("exiting..."); display.println("exiting...");
display.display(false); // full refresh display.display(true); // full refresh
delay(1000); delay(1000);
break; break;
} }
prevStatus = currentStatus; prevStatus = currentStatus;
} }
if(digitalRead(BACK_BTN_PIN) == ACTIVE_LOW) break;
delay(100); delay(100);
} }
// turn off radios // turn off radios
WiFi.mode(WIFI_OFF); WiFi.mode(WIFI_OFF);
btStop(); btStop();
showMenu(menuIndex, false); showMenu(menuIndex, true);
} }
void Watchy::showSyncNTP() { void Watchy::showSyncNTP() {
@ -1071,9 +1198,9 @@ void Watchy::showSyncNTP() {
display.println("Syncing NTP... "); display.println("Syncing NTP... ");
display.print("GMT offset: "); display.print("GMT offset: ");
display.println(gmtOffset); display.println(gmtOffset);
display.display(false); // full refresh display.display(true); // full refresh
if (connectWiFi()) { if (connectWiFi()) {
if (syncNTP()) { if (syncNTP(gmtOffset)) {
display.println("NTP Sync Success\n"); display.println("NTP Sync Success\n");
display.println("Current Time Is:"); display.println("Current Time Is:");
@ -1103,7 +1230,7 @@ void Watchy::showSyncNTP() {
} }
display.display(true); // full refresh display.display(true); // full refresh
delay(3000); delay(3000);
showMenu(menuIndex, false); showMenu(menuIndex, true);
} }
bool Watchy::syncNTP() { // NTP sync - call after connecting to WiFi and bool Watchy::syncNTP() { // NTP sync - call after connecting to WiFi and
@ -1121,6 +1248,7 @@ bool Watchy::syncNTP(long gmt, String ntpServer) {
// WiFi and remember to turn it back off // WiFi and remember to turn it back off
WiFiUDP ntpUDP; WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, ntpServer.c_str(), gmt); NTPClient timeClient(ntpUDP, ntpServer.c_str(), gmt);
timeClient.setTimeOffset(gmt);
timeClient.begin(); timeClient.begin();
if (!timeClient.forceUpdate()) { if (!timeClient.forceUpdate()) {
return false; // NTP sync failed return false; // NTP sync failed
@ -1128,5 +1256,9 @@ bool Watchy::syncNTP(long gmt, String ntpServer) {
tmElements_t tm; tmElements_t tm;
breakTime((time_t)timeClient.getEpochTime(), tm); breakTime((time_t)timeClient.getEpochTime(), tm);
RTC.set(tm); RTC.set(tm);
//Update also moon calendar.
RTC.read(currentTime);
time_t epoch = makeTime(currentTime);
mp.calculate(epoch);
return true; return true;
} }

View File

@ -16,6 +16,8 @@
#include "bma.h" #include "bma.h"
#include "config.h" #include "config.h"
#include "esp_chip_info.h" #include "esp_chip_info.h"
#include "TimezonesGMT.h"
#include "MoonPhase.h"
#ifdef ARDUINO_ESP32S3_DEV #ifdef ARDUINO_ESP32S3_DEV
#include "Watchy32KRTC.h" #include "Watchy32KRTC.h"
#include "soc/rtc.h" #include "soc/rtc.h"
@ -27,6 +29,8 @@
#include "soc/rtc_cntl_reg.h" #include "soc/rtc_cntl_reg.h"
#include "time.h" #include "time.h"
#include "esp_sntp.h" #include "esp_sntp.h"
#include "hal/rtc_io_types.h"
#include "driver/rtc_io.h"
#define uS_TO_S_FACTOR 1000000ULL //Conversion factor for micro seconds to seconds #define uS_TO_S_FACTOR 1000000ULL //Conversion factor for micro seconds to seconds
#define ADC_VOLTAGE_DIVIDER ((360.0f+100.0f)/360.0f) //Voltage divider at battery ADC #define ADC_VOLTAGE_DIVIDER ((360.0f+100.0f)/360.0f) //Voltage divider at battery ADC
#else #else
@ -55,7 +59,7 @@ typedef struct watchySettings {
int8_t weatherUpdateInterval; int8_t weatherUpdateInterval;
// NTP Settings // NTP Settings
String ntpServer; String ntpServer;
int gmtOffset; long gmtOffset;
// //
bool vibrateOClock; bool vibrateOClock;
} watchySettings; } watchySettings;
@ -83,6 +87,7 @@ public:
void showMenu(byte menuIndex, bool partialRefresh); void showMenu(byte menuIndex, bool partialRefresh);
void showFastMenu(byte menuIndex); void showFastMenu(byte menuIndex);
void showAbout(); void showAbout();
void showMoonPhase();
void showBuzz(); void showBuzz();
void showAccelerometer(); void showAccelerometer();
void showUpdateFW(); void showUpdateFW();
@ -116,5 +121,6 @@ extern RTC_DATA_ATTR int menuIndex;
extern RTC_DATA_ATTR BMA423 sensor; extern RTC_DATA_ATTR BMA423 sensor;
extern RTC_DATA_ATTR bool WIFI_CONFIGURED; extern RTC_DATA_ATTR bool WIFI_CONFIGURED;
extern RTC_DATA_ATTR bool BLE_CONFIGURED; extern RTC_DATA_ATTR bool BLE_CONFIGURED;
extern RTC_DATA_ATTR bool USB_PLUGGED_IN;
#endif #endif

View File

@ -1,17 +1,19 @@
#include "Watchy32KRTC.h" #include "Watchy32KRTC.h"
#include "TimezonesGMT.h"
Watchy32KRTC::Watchy32KRTC(){} Watchy32KRTC::Watchy32KRTC(){}
void Watchy32KRTC::init() { void Watchy32KRTC::init() {
if(TIMEZONES_NON_GMT_OVERRIDE == 0){
setenv("TZ", timeZones[TIMEZONES_SELECTED].timezone, 1);
} else if (TIMEZONES_NON_GMT_OVERRIDE == 1) {
setenv("TZ", tz_override.timezone, 1);
} else {
setenv("TZ", "GMT0", 1);
} }
/*
setenv("TZ", "", 1);
tzset(); tzset();
}
*/
void Watchy32KRTC::config(String datetime) { // String datetime format is YYYY:MM:DD:HH:MM:SS void Watchy32KRTC::config(String datetime) { // String datetime format is YYYY:MM:DD:HH:MM:SS
struct tm timeInfo; struct tm timeInfo;
@ -62,7 +64,6 @@ void Watchy32KRTC::set(tmElements_t tm) {
timeInfo.tm_hour = tm.Hour; timeInfo.tm_hour = tm.Hour;
timeInfo.tm_min = tm.Minute; timeInfo.tm_min = tm.Minute;
timeInfo.tm_sec = tm.Second; timeInfo.tm_sec = tm.Second;
// Convert tm to timeval // Convert tm to timeval
struct timeval tv; struct timeval tv;
tv.tv_sec = mktime(&timeInfo); tv.tv_sec = mktime(&timeInfo);

View File

@ -2,7 +2,7 @@
#define CONFIG_H #define CONFIG_H
// Versioning // Versioning
#define WATCHY_LIB_VER "1.4.13" #define WATCHY_LIB_VER "1.4.14"
//pins //pins
@ -99,14 +99,16 @@
#define MAIN_MENU_STATE 0 #define MAIN_MENU_STATE 0
#define APP_STATE 1 #define APP_STATE 1
#define FW_UPDATE_STATE 2 #define FW_UPDATE_STATE 2
#define MENU_HEIGHT 25 #define MENU_HEIGHT 24
#define MENU_LENGTH 7 #define MENU_LENGTH 8
// set time // set time
#define SET_HOUR 0 #define SET_HOUR 0
#define SET_MINUTE 1 #define SET_MINUTE 1
#define SET_YEAR 2 #define SET_TZ 2
#define SET_MONTH 3 #define SET_YEAR 3
#define SET_DAY 4 #define SET_MONTH 4
#define SET_DAY 5
#define HOUR_12_24 24 #define HOUR_12_24 24
// BLE OTA // BLE OTA
#define BLE_DEVICE_NAME "Watchy BLE OTA" #define BLE_DEVICE_NAME "Watchy BLE OTA"