From 4e6396459afae3d03d9d668d57aa5e5ac4aa79da Mon Sep 17 00:00:00 2001 From: PoliEcho Date: Sat, 20 Sep 2025 18:09:58 +0200 Subject: [PATCH] BIG update --- .gitignore | 4 +- CMakeLists.txt | 7 +- GC9A01/VGA1_16x32.c | 111 +++ GC9A01/VGA1_16x32.h | 112 +-- GC9A01/VGA1b_16x32.h | 108 --- GC9A01/gc9a01.c | 6 +- GC9A01/gc9a01.h | 14 +- control.cpp | 10 +- display.cpp | 47 +- display.h | 12 + fonts/Font5x7FixedMono.c | 146 +++ fonts/Font5x7FixedMono.h | 139 +-- macros.h | 4 + multicore_events.h | 8 + pins.h | 9 +- smart_alarm.cpp | 158 ++-- sound.cpp | 74 ++ sound.h | 10 + spi.h | 2 +- timezones.cpp | 1844 +++++++++++++++++++------------------- timezones.h | 3 +- ui.cpp | 177 ++++ ui.h | 6 + 23 files changed, 1641 insertions(+), 1370 deletions(-) create mode 100644 GC9A01/VGA1_16x32.c delete mode 100644 GC9A01/VGA1b_16x32.h create mode 100644 fonts/Font5x7FixedMono.c create mode 100644 macros.h create mode 100644 multicore_events.h create mode 100644 sound.cpp create mode 100644 sound.h create mode 100644 ui.cpp create mode 100644 ui.h diff --git a/.gitignore b/.gitignore index 7473ed9..98743eb 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ compile_commands.json relay/target relay/.vscode sm.py -zones.csv \ No newline at end of file +zones.csv +alarm_sound.wav +alarm_sound.h \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index a45383d..9151e8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,11 @@ add_executable(smart_alarm smart_alarm.cpp net_utils.cpp timezones.cpp display.cpp ${GC9A01_SOURCES} - control.cpp) + control.cpp + sound.cpp + ui.cpp + fonts/Font5x7FixedMono.c +) pico_set_program_name(smart_alarm "smart_alarm") pico_set_program_version(smart_alarm "0.2") @@ -66,6 +70,7 @@ target_link_libraries(smart_alarm hardware_rtc hardware_adc hardware_pwm + pico_multicore ) target_compile_definitions(smart_alarm PRIVATE diff --git a/GC9A01/VGA1_16x32.c b/GC9A01/VGA1_16x32.c new file mode 100644 index 0000000..30d7b58 --- /dev/null +++ b/GC9A01/VGA1_16x32.c @@ -0,0 +1,111 @@ +#include + +#include "gfxfont.h" +const uint8_t VGA1_16x32Bitmaps[] = { + 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, 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, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x7f, 0xfe, 0x7f, 0xfe, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x7f, 0xfe, 0x7f, 0xfe, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x39, 0x9c, 0x39, 0x9c, 0x71, 0x8e, 0x71, 0x8e, 0x71, 0x80, 0x71, 0x80, 0x39, 0x80, 0x39, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x9c, 0x01, 0x9c, 0x01, 0x8e, 0x01, 0x8e, 0x71, 0x8e, 0x71, 0x8e, 0x39, 0x9c, 0x39, 0x9c, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1c, 0x1e, 0x1c, 0x1e, 0x38, 0x1e, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x3c, 0x0e, 0x3c, 0x1c, 0x3c, 0x1c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x1c, 0x70, 0x1c, 0x70, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x70, 0x1c, 0x70, 0x07, 0xc0, 0x07, 0xc0, 0x0f, 0xce, 0x0f, 0xce, 0x38, 0xfc, 0x38, 0xfc, 0x70, 0x78, 0x70, 0x78, 0x70, 0x78, 0x70, 0x78, 0x38, 0xfc, 0x38, 0xfc, 0x0f, 0xce, 0x0f, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 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, 0x0e, 0x38, 0x0e, 0x38, 0x03, 0xe0, 0x03, 0xe0, 0x3f, 0xfe, 0x3f, 0xfe, 0x03, 0xe0, 0x03, 0xe0, 0x0e, 0x38, 0x0e, 0x38, 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, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x3f, 0xfe, 0x3f, 0xfe, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 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, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 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, 0x3f, 0xfe, 0x3f, 0xfe, 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, 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, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 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, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 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, 0xe0, 0x07, 0xe0, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x3c, 0x38, 0x3c, 0x38, 0x7c, 0x38, 0x7c, 0x38, 0xdc, 0x38, 0xdc, 0x39, 0x9c, 0x39, 0x9c, 0x3b, 0x1c, 0x3b, 0x1c, 0x3e, 0x1c, 0x3e, 0x1c, 0x3c, 0x1c, 0x3c, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x07, 0xe0, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0xc0, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x70, 0x01, 0xc0, 0x01, 0xc0, 0x07, 0x00, 0x07, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x01, 0xf0, 0x01, 0xf0, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x01, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x07, 0x70, 0x07, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x38, 0x70, 0x38, 0x70, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x3f, 0xf8, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x0e, 0x1c, 0x0e, 0x07, 0xfe, 0x07, 0xfe, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x0f, 0xf0, 0x0f, 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, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 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, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 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, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 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, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x07, 0xe0, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x70, 0x0e, 0x70, 0x0e, 0x71, 0xfe, 0x71, 0xfe, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x71, 0xfc, 0x71, 0xfc, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xe0, 0x3f, 0xe0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xe0, 0x3f, 0xe0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x3e, 0x38, 0x3e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x3f, 0xfe, 0x3f, 0xfe, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x03, 0xe0, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0x1c, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0x1f, 0x80, 0x1f, 0x80, 0x1f, 0x80, 0x1f, 0x80, 0x1d, 0xc0, 0x1d, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x78, 0x1e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7e, 0x7e, 0x7e, 0x7e, 0x77, 0xee, 0x77, 0xee, 0x73, 0xce, 0x73, 0xce, 0x71, 0x8e, 0x71, 0x8e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x3c, 0x0e, 0x3c, 0x0e, 0x3e, 0x0e, 0x3e, 0x0e, 0x3f, 0x0e, 0x3f, 0x0e, 0x3b, 0x8e, 0x3b, 0x8e, 0x39, 0xce, 0x39, 0xce, 0x38, 0xee, 0x38, 0xee, 0x38, 0x7e, 0x38, 0x7e, 0x38, 0x3e, 0x38, 0x3e, 0x38, 0x1e, 0x38, 0x1e, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0xee, 0x38, 0xee, 0x1c, 0x7c, 0x1c, 0x7c, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x38, 0x70, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x71, 0x8e, 0x71, 0x8e, 0x73, 0xce, 0x73, 0xce, 0x77, 0xee, 0x77, 0xee, 0x3e, 0x7c, 0x3e, 0x7c, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x07, 0x70, 0x07, 0x70, 0x03, 0xe0, 0x03, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x07, 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, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x1c, 0x00, 0x1c, 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, 0xf0, 0x07, 0xf0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 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, 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, 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, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 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, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x0e, 0x00, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x3f, 0xf8, 0x3f, 0xf8, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x07, 0xfe, 0x07, 0xfe, 0x1c, 0x0e, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x3f, 0xfe, 0x3f, 0xfe, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x1f, 0xf8, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3b, 0xf8, 0x3b, 0xf8, 0x3c, 0x0e, 0x3c, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x0f, 0x80, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xc0, 0x0f, 0xc0, 0x0e, 0xe0, 0x0e, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 0x3e, 0x78, 0x3e, 0x78, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 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, 0x3f, 0xe0, 0x3f, 0xe0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 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, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 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, 0xfe, 0x07, 0xfe, 0x1c, 0x0e, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x0e, 0x1c, 0x0e, 0x07, 0xfe, 0x07, 0xfe, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 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, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 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, 0x0f, 0xfc, 0x0f, 0xfc, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x1f, 0xf8, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x1f, 0xfc, 0x1f, 0xfc, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xfc, 0x0f, 0xfc, 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, 0x70, 0x0e, 0x70, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0x80, 0x01, 0x80, 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, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x39, 0xce, 0x39, 0xce, 0x3b, 0xee, 0x3b, 0xee, 0x1f, 0x7c, 0x1f, 0x7c, 0x0e, 0x38, 0x0e, 0x38, 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, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 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, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x07, 0x70, 0x07, 0x70, 0x03, 0xe0, 0x03, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 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, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x70, 0x01, 0xc0, 0x01, 0xc0, 0x07, 0x00, 0x07, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x1e, 0x00, 0x1e, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x78, 0x00, 0x78, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x9e, 0x07, 0x9e, 0x3c, 0xf0, 0x3c, 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, 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, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x07, 0x70, 0x07, 0x70, 0x1c, 0x1c, 0x1c, 0x1c, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x7f, 0xff, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const GFXglyph VGA1_16x32Glyphs[] = { + { 0, 16, 32, 0, 0, 0 } // 0x41 'A' +}; + +const GFXfont VGA1_16x32 = { + (uint8_t *)VGA1_16x32Bitmaps, + (GFXglyph *)VGA1_16x32Glyphs, + 0x20, 0x7f, 42 + }; diff --git a/GC9A01/VGA1_16x32.h b/GC9A01/VGA1_16x32.h index 24deabf..5013e87 100644 --- a/GC9A01/VGA1_16x32.h +++ b/GC9A01/VGA1_16x32.h @@ -1,111 +1,3 @@ -#include - #include "gfxfont.h" -const uint8_t VGA1_16x32Bitmaps[] = { - 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, 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, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x7f, 0xfe, 0x7f, 0xfe, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x7f, 0xfe, 0x7f, 0xfe, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x39, 0x9c, 0x39, 0x9c, 0x71, 0x8e, 0x71, 0x8e, 0x71, 0x80, 0x71, 0x80, 0x39, 0x80, 0x39, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x9c, 0x01, 0x9c, 0x01, 0x8e, 0x01, 0x8e, 0x71, 0x8e, 0x71, 0x8e, 0x39, 0x9c, 0x39, 0x9c, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1c, 0x1e, 0x1c, 0x1e, 0x38, 0x1e, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x3c, 0x0e, 0x3c, 0x1c, 0x3c, 0x1c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x1c, 0x70, 0x1c, 0x70, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x70, 0x1c, 0x70, 0x07, 0xc0, 0x07, 0xc0, 0x0f, 0xce, 0x0f, 0xce, 0x38, 0xfc, 0x38, 0xfc, 0x70, 0x78, 0x70, 0x78, 0x70, 0x78, 0x70, 0x78, 0x38, 0xfc, 0x38, 0xfc, 0x0f, 0xce, 0x0f, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 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, 0x0e, 0x38, 0x0e, 0x38, 0x03, 0xe0, 0x03, 0xe0, 0x3f, 0xfe, 0x3f, 0xfe, 0x03, 0xe0, 0x03, 0xe0, 0x0e, 0x38, 0x0e, 0x38, 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, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x3f, 0xfe, 0x3f, 0xfe, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 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, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 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, 0x3f, 0xfe, 0x3f, 0xfe, 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, 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, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 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, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 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, 0xe0, 0x07, 0xe0, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x3c, 0x38, 0x3c, 0x38, 0x7c, 0x38, 0x7c, 0x38, 0xdc, 0x38, 0xdc, 0x39, 0x9c, 0x39, 0x9c, 0x3b, 0x1c, 0x3b, 0x1c, 0x3e, 0x1c, 0x3e, 0x1c, 0x3c, 0x1c, 0x3c, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x07, 0xe0, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0xc0, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x70, 0x01, 0xc0, 0x01, 0xc0, 0x07, 0x00, 0x07, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x01, 0xf0, 0x01, 0xf0, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x01, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x07, 0x70, 0x07, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x70, 0x1c, 0x70, 0x38, 0x70, 0x38, 0x70, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x3f, 0xf8, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x0e, 0x1c, 0x0e, 0x07, 0xfe, 0x07, 0xfe, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x0f, 0xf0, 0x0f, 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, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 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, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 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, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 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, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x07, 0xe0, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x70, 0x0e, 0x70, 0x0e, 0x71, 0xfe, 0x71, 0xfe, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x73, 0x8e, 0x71, 0xfc, 0x71, 0xfc, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xe0, 0x3f, 0xe0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xe0, 0x3f, 0xe0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x3e, 0x38, 0x3e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x3f, 0xfe, 0x3f, 0xfe, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x03, 0xe0, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0xe0, 0x1c, 0xe0, 0x1d, 0xc0, 0x1d, 0xc0, 0x1f, 0x80, 0x1f, 0x80, 0x1f, 0x80, 0x1f, 0x80, 0x1d, 0xc0, 0x1d, 0xc0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x70, 0x1c, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x78, 0x1e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7e, 0x7e, 0x7e, 0x7e, 0x77, 0xee, 0x77, 0xee, 0x73, 0xce, 0x73, 0xce, 0x71, 0x8e, 0x71, 0x8e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x3c, 0x0e, 0x3c, 0x0e, 0x3e, 0x0e, 0x3e, 0x0e, 0x3f, 0x0e, 0x3f, 0x0e, 0x3b, 0x8e, 0x3b, 0x8e, 0x39, 0xce, 0x39, 0xce, 0x38, 0xee, 0x38, 0xee, 0x38, 0x7e, 0x38, 0x7e, 0x38, 0x3e, 0x38, 0x3e, 0x38, 0x1e, 0x38, 0x1e, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0xee, 0x38, 0xee, 0x1c, 0x7c, 0x1c, 0x7c, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0xe0, 0x38, 0xe0, 0x38, 0x70, 0x38, 0x70, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x71, 0x8e, 0x71, 0x8e, 0x73, 0xce, 0x73, 0xce, 0x77, 0xee, 0x77, 0xee, 0x3e, 0x7c, 0x3e, 0x7c, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x07, 0x70, 0x07, 0x70, 0x03, 0xe0, 0x03, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x38, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0xf0, 0x07, 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, 0x1c, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, 0x00, 0x1c, 0x00, 0x1c, 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, 0xf0, 0x07, 0xf0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 0x38, 0x1c, 0x38, 0x1c, 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, 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, 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, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x00, 0xe0, 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, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x0e, 0x00, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x3f, 0xf8, 0x3f, 0xf8, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x07, 0xfe, 0x07, 0xfe, 0x1c, 0x0e, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x3f, 0xfe, 0x3f, 0xfe, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x0f, 0xfe, 0x0f, 0xfe, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x1f, 0xf8, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x3b, 0xf8, 0x3b, 0xf8, 0x3c, 0x0e, 0x3c, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0xe0, 0x00, 0xe0, 0x0f, 0x80, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xc0, 0x0f, 0xc0, 0x0e, 0xe0, 0x0e, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x0e, 0x38, 0x0e, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 0x3e, 0x78, 0x3e, 0x78, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xce, 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, 0x3f, 0xe0, 0x3f, 0xe0, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 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, 0xf0, 0x07, 0xf0, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x07, 0xf0, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 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, 0xfe, 0x07, 0xfe, 0x1c, 0x0e, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x0e, 0x1c, 0x0e, 0x07, 0xfe, 0x07, 0xfe, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 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, 0x3f, 0xf0, 0x3f, 0xf0, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 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, 0x0f, 0xfc, 0x0f, 0xfc, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x1f, 0xf8, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x1f, 0xfc, 0x1f, 0xfc, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 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, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x0f, 0xfc, 0x0f, 0xfc, 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, 0x70, 0x0e, 0x70, 0x0e, 0x38, 0x1c, 0x38, 0x1c, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0x80, 0x01, 0x80, 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, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x38, 0x0e, 0x39, 0xce, 0x39, 0xce, 0x3b, 0xee, 0x3b, 0xee, 0x1f, 0x7c, 0x1f, 0x7c, 0x0e, 0x38, 0x0e, 0x38, 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, 0x1c, 0x38, 0x1c, 0x38, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x1c, 0x38, 0x1c, 0x38, 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, 0x38, 0x0e, 0x38, 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x0e, 0x38, 0x0e, 0x38, 0x07, 0x70, 0x07, 0x70, 0x03, 0xe0, 0x03, 0xe0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x0e, 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, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x70, 0x01, 0xc0, 0x01, 0xc0, 0x07, 0x00, 0x07, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x1e, 0x00, 0x1e, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x78, 0x00, 0x78, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x9e, 0x07, 0x9e, 0x3c, 0xf0, 0x3c, 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, 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, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x07, 0x70, 0x07, 0x70, 0x1c, 0x1c, 0x1c, 0x1c, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x70, 0x07, 0x7f, 0xff, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -const GFXglyph VGA1_16x32Glyphs[] = { - { 0, 16, 32, 0, 0, 0 } // 0x41 'A' -}; - -const GFXfont VGA1_16x32 = { - (uint8_t *)VGA1_16x32Bitmaps, - (GFXglyph *)VGA1_16x32Glyphs, - 0x20, 0x7f, 42 - }; +#pragma once +extern const GFXfont VGA1_16x32; diff --git a/GC9A01/VGA1b_16x32.h b/GC9A01/VGA1b_16x32.h deleted file mode 100644 index 305c9bb..0000000 --- a/GC9A01/VGA1b_16x32.h +++ /dev/null @@ -1,108 +0,0 @@ -const uint8_t VGA1b_16x32Bitmaps[] = { - 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, 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, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1c, 0x38, 0x1c, 0x38, 0x0c, 0x30, 0x0c, 0x30, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x7f, 0xfe, 0x7f, 0xfe, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x7f, 0xfe, 0x7f, 0xfe, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x07, 0xe0, 0x07, 0xe0, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x78, 0x3c, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x0f, 0x00, 0x0f, 0x00, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x1e, 0xf0, 0x1e, 0xf0, 0x3c, 0x78, 0x3c, 0x78, 0x1e, 0xf0, 0x1e, 0xf0, 0x07, 0xc0, 0x07, 0xc0, 0x0f, 0x9e, 0x0f, 0x9e, 0x3f, 0xfc, 0x3f, 0xfc, 0x78, 0xf8, 0x78, 0xf8, 0x78, 0x78, 0x78, 0x78, 0x3c, 0xfc, 0x3c, 0xfc, 0x0f, 0x9e, 0x0f, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x1e, 0x00, 0x1e, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xe0, 0x01, 0xe0, 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, 0x3c, 0x3c, 0x3c, 0x3c, 0x0f, 0xf0, 0x0f, 0xf0, 0x7f, 0xfe, 0x7f, 0xfe, 0x0f, 0xf0, 0x0f, 0xf0, 0x3c, 0x3c, 0x3c, 0x3c, 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, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x7f, 0xfe, 0x7f, 0xfe, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, 0x07, 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, 0x7f, 0xfe, 0x7f, 0xfe, 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, 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, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 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, 0x3c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x0f, 0x00, 0x0f, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x3c, 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, 0xe0, 0x07, 0xe0, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x7c, 0x3c, 0x7c, 0x3c, 0xfc, 0x3c, 0xfc, 0x3d, 0xbc, 0x3d, 0xbc, 0x3f, 0x3c, 0x3f, 0x3c, 0x3e, 0x3c, 0x3e, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x07, 0xe0, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0xc0, 0x0f, 0xc0, 0x3f, 0xc0, 0x3f, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x0f, 0xe0, 0x3c, 0x78, 0x3c, 0x78, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0x00, 0x0f, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x3c, 0x03, 0xf0, 0x03, 0xf0, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x3c, 0x3c, 0x3c, 0x3c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x01, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x1e, 0xf0, 0x1e, 0xf0, 0x3c, 0xf0, 0x3c, 0xf0, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x03, 0xfc, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x3f, 0xfe, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x3c, 0x3c, 0x3c, 0x3c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x07, 0xfe, 0x07, 0xfe, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x3c, 0x0f, 0xf0, 0x0f, 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, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 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, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x0f, 0x00, 0x0f, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xe0, 0x01, 0xe0, 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, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 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, 0x80, 0x07, 0x80, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x07, 0xe0, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x78, 0x00, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x0f, 0xfc, 0x3c, 0x1e, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x79, 0xfe, 0x79, 0xfe, 0x7b, 0x8e, 0x7b, 0x8e, 0x7b, 0x8e, 0x7b, 0x8e, 0x7b, 0x8e, 0x7b, 0x8e, 0x79, 0xfc, 0x79, 0xfc, 0x78, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x0f, 0xfc, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3f, 0xfc, 0x3f, 0xfc, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x7f, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x1f, 0xf0, 0x1f, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x7f, 0xf0, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x7f, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x7f, 0xf0, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x1e, 0x0e, 0x1e, 0x0e, 0x1e, 0x06, 0x1e, 0x06, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x60, 0x1e, 0x60, 0x1f, 0xe0, 0x1f, 0xe0, 0x1e, 0x60, 0x1e, 0x60, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x06, 0x1e, 0x06, 0x1e, 0x0e, 0x1e, 0x0e, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x1e, 0x0e, 0x1e, 0x0e, 0x1e, 0x06, 0x1e, 0x06, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x60, 0x1e, 0x60, 0x1f, 0xe0, 0x1f, 0xe0, 0x1e, 0x60, 0x1e, 0x60, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x7f, 0x80, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x7e, 0x3c, 0x7e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3e, 0x1e, 0x3e, 0x07, 0xf6, 0x07, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3f, 0xfe, 0x3f, 0xfe, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x03, 0xfe, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x1f, 0xf0, 0x1f, 0xf0, 0x07, 0xc0, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x3c, 0x7e, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0xf0, 0x1e, 0xf0, 0x1f, 0xe0, 0x1f, 0xe0, 0x1f, 0xc0, 0x1f, 0xc0, 0x1f, 0xc0, 0x1f, 0xc0, 0x1f, 0xe0, 0x1f, 0xe0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x1e, 0x3c, 0x7e, 0x1e, 0x7e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x7f, 0x80, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x06, 0x1e, 0x06, 0x1e, 0x0e, 0x1e, 0x0e, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x78, 0x1e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0xfe, 0x7f, 0xfe, 0x7b, 0xde, 0x7b, 0xde, 0x79, 0x9e, 0x79, 0x9e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3e, 0x1e, 0x3e, 0x1e, 0x3f, 0x1e, 0x3f, 0x1e, 0x3f, 0x9e, 0x3f, 0x9e, 0x3d, 0xde, 0x3d, 0xde, 0x3c, 0xfe, 0x3c, 0xfe, 0x3c, 0x7e, 0x3c, 0x7e, 0x3c, 0x3e, 0x3c, 0x3e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x7f, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x1f, 0xf0, 0x1f, 0xf0, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x7f, 0x80, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3d, 0xde, 0x3d, 0xde, 0x3c, 0xfe, 0x3c, 0xfe, 0x1e, 0x7c, 0x1e, 0x7c, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x7f, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0xe0, 0x1f, 0xe0, 0x1e, 0xf0, 0x1e, 0xf0, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x1e, 0x3c, 0x7e, 0x1e, 0x7e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x3c, 0x3c, 0x3c, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x00, 0x3c, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x3c, 0x00, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0x3c, 0x3c, 0x3c, 0x3c, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x73, 0xce, 0x73, 0xce, 0x63, 0xc6, 0x63, 0xc6, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x07, 0xf0, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x0f, 0xf0, 0x0f, 0xf0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x79, 0x9e, 0x79, 0x9e, 0x7b, 0xde, 0x7b, 0xde, 0x7f, 0xfe, 0x7f, 0xfe, 0x3e, 0x7c, 0x3e, 0x7c, 0x1c, 0x38, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x0f, 0xf0, 0x0f, 0xf0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x0f, 0xf0, 0x0f, 0xf0, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x38, 0x3c, 0x38, 0x3c, 0x30, 0x78, 0x30, 0x78, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x0f, 0x00, 0x0f, 0x00, 0x1e, 0x0c, 0x1e, 0x0c, 0x3c, 0x1c, 0x3c, 0x1c, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0xf0, 0x0f, 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, 0x3c, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x78, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x3c, 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, 0xf0, 0x0f, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x3c, 0x3c, 0x3c, 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, 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, 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, 0x7f, 0xff, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xe0, 0x01, 0xe0, 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, 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, 0x00, 0x00, 0x0f, 0xe0, 0x0f, 0xe0, 0x00, 0x78, 0x00, 0x78, 0x0f, 0xf8, 0x0f, 0xf8, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x0f, 0x9e, 0x0f, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x3c, 0xf8, 0x3c, 0xf8, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x1e, 0x3c, 0x1e, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x07, 0xf8, 0x07, 0xf8, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x0f, 0x9e, 0x0f, 0x9e, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3f, 0xfe, 0x3f, 0xfe, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x1e, 0x3c, 0x1e, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x03, 0xf0, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0x0c, 0x0f, 0x0c, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x3f, 0xc0, 0x3f, 0xc0, 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, 0x0f, 0x9e, 0x0f, 0x9e, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x78, 0x00, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x0f, 0xe0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x78, 0x0f, 0x78, 0x0f, 0x9e, 0x0f, 0x9e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x3f, 0x1e, 0x3f, 0x1e, 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, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x03, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x03, 0xfc, 0x03, 0xfc, 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, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x1e, 0x78, 0x1e, 0x78, 0x07, 0xe0, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0x78, 0x0f, 0x78, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0x78, 0x0f, 0x78, 0x0f, 0x3c, 0x0f, 0x3c, 0x3f, 0x1e, 0x3f, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x03, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x03, 0xfc, 0x03, 0xfc, 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, 0x7e, 0x7c, 0x7e, 0x7c, 0x7f, 0xfe, 0x7f, 0xfe, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 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, 0x3c, 0xf8, 0x3c, 0xf8, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 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, 0xf0, 0x07, 0xf0, 0x1e, 0x3c, 0x1e, 0x3c, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x3c, 0x1e, 0x3c, 0x07, 0xf0, 0x07, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xf0, 0x3c, 0xf0, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x1e, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x3f, 0xc0, 0x3f, 0xc0, 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, 0x9e, 0x07, 0x9e, 0x1e, 0x78, 0x1e, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x07, 0xf8, 0x07, 0xf8, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0xfe, 0x00, 0xfe, 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, 0x3c, 0xf8, 0x3c, 0xf8, 0x0f, 0x9e, 0x0f, 0x9e, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x3f, 0xc0, 0x3f, 0xc0, 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, 0x0f, 0xf8, 0x0f, 0xf8, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x00, 0x3c, 0x00, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x1e, 0x00, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x0f, 0xf8, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x03, 0x80, 0x03, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x7f, 0xf8, 0x7f, 0xf8, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x9e, 0x07, 0x9e, 0x01, 0xf8, 0x01, 0xf8, 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, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x3c, 0x78, 0x0f, 0x9e, 0x0f, 0x9e, 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, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x1e, 0x78, 0x1e, 0x78, 0x07, 0xe0, 0x07, 0xe0, 0x01, 0x80, 0x01, 0x80, 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, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x78, 0x1e, 0x79, 0x9e, 0x79, 0x9e, 0x7b, 0xde, 0x7b, 0xde, 0x3f, 0xfc, 0x3f, 0xfc, 0x1e, 0x78, 0x1e, 0x78, 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, 0x3c, 0x3c, 0x3c, 0x3c, 0x0e, 0x70, 0x0e, 0x70, 0x07, 0xe0, 0x07, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xe0, 0x0e, 0x70, 0x0e, 0x70, 0x3c, 0x3c, 0x3c, 0x3c, 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, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x3c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x07, 0xfe, 0x07, 0xfe, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x3c, 0x0f, 0xf0, 0x0f, 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, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x3f, 0xfc, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0xf0, 0x00, 0xf0, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0x00, 0x0f, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3f, 0xfc, 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x01, 0xe0, 0x01, 0xe0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x3f, 0x80, 0x3f, 0x80, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x07, 0x80, 0x07, 0x80, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xfc, 0x01, 0xfc, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x07, 0x80, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x9e, 0x0f, 0x9e, 0x3c, 0xf8, 0x3c, 0xf8, 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, 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, 0xc0, 0x00, 0xc0, 0x03, 0xf0, 0x03, 0xf0, 0x0f, 0x3c, 0x0f, 0x3c, 0x3c, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0x3c, 0x0f, 0x3f, 0xff, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -const GFXglyph VGA1b_16x32Glyphs[] = { - { 0, 16, 32, 0, 0, 0 } // 0x41 'A' -}; - -const GFXfont VGA1b_16x32 = { - (uint8_t *)VGA1b_16x32Bitmaps, - (GFXglyph *)VGA1b_16x32Glyphs, - 0x20, 0x7f, 42 - }; diff --git a/GC9A01/gc9a01.c b/GC9A01/gc9a01.c index 5bc575f..dcbce28 100644 --- a/GC9A01/gc9a01.c +++ b/GC9A01/gc9a01.c @@ -700,7 +700,7 @@ STATIC mp_obj_t gc9a01_GC9A01_pbitmap(size_t n_args, const mp_obj_t *args) { } */ -void gc9a01_text(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color) { +void gc9a01_text(gc9a01_GC9A01_obj_t *self,const GFXfont *font, char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color) { // const uint8_t width = font->glyph->width; // const uint8_t height = font->glyph->height; const uint8_t width = 16; @@ -758,7 +758,7 @@ void gc9a01_text(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x } } -void gc9a01_text_gfx_transparent(gc9a01_GC9A01_obj_t *self, GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t color) { +void gc9a01_text_gfx_transparent(gc9a01_GC9A01_obj_t *self, const GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t color) { if (!str || !*str) return; // First pass: calculate string dimensions @@ -867,7 +867,7 @@ void gc9a01_text_gfx_transparent(gc9a01_GC9A01_obj_t *self, GFXfont *font, const } -void gc9a01_text_gfx_buffered(gc9a01_GC9A01_obj_t *self, GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color) { +void gc9a01_text_gfx_buffered(gc9a01_GC9A01_obj_t *self, const GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color) { if (!str || !*str) return; // First pass: calculate string dimensions diff --git a/GC9A01/gc9a01.h b/GC9A01/gc9a01.h index da14838..e0de5e3 100644 --- a/GC9A01/gc9a01.h +++ b/GC9A01/gc9a01.h @@ -1,7 +1,7 @@ // https://raw.githubusercontent.com/russhughes/gc9a01_mpy/main/src/gc9a01.h -#ifndef __GC9A01_H__ -#define __GC9A01_H__ +#ifndef GC9A01_H_ +#define GC9A01_H_ #include #ifdef __cplusplus @@ -67,7 +67,7 @@ extern "C" { #define WHITE 0xFFFF -#endif /* __GC9A01_H__ */ + #include "hardware/spi.h" #include "gfxfont.h" @@ -100,11 +100,13 @@ void gc9a01_fill_rect(gc9a01_GC9A01_obj_t *self, uint16_t x, uint16_t y, uint16_ void gc9a01_set_rotation(gc9a01_GC9A01_obj_t *self); void gc9a01_hline(gc9a01_GC9A01_obj_t *self, uint16_t x, uint16_t y, uint16_t w, uint16_t color); void gc9a01_vline(gc9a01_GC9A01_obj_t *self, uint16_t x, uint16_t y, uint16_t w, uint16_t color); -void gc9a01_text(gc9a01_GC9A01_obj_t *self, GFXfont *font, char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color); -void gc9a01_text_gfx_transparent(gc9a01_GC9A01_obj_t *self, GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t color); -void gc9a01_text_gfx_buffered(gc9a01_GC9A01_obj_t *self, GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color); +void gc9a01_text(gc9a01_GC9A01_obj_t *self, const GFXfont *font, char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color); +void gc9a01_text_gfx_transparent(gc9a01_GC9A01_obj_t *self, const GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t color); +void gc9a01_text_gfx_buffered(gc9a01_GC9A01_obj_t *self, const GFXfont *font, const char *str, uint16_t x0, uint16_t y0, uint16_t fg_color, uint16_t bg_color); uint8_t gc9a01_get_color(uint8_t bpp); uint16_t color565(uint8_t r, uint8_t g, uint8_t b); #ifdef __cplusplus } #endif /* __cplusplus */ + +#endif /* __GC9A01_H__ */ diff --git a/control.cpp b/control.cpp index 640de83..91b176b 100644 --- a/control.cpp +++ b/control.cpp @@ -3,12 +3,10 @@ #include "hardware/adc.h" uint8_t get_knob_percentage() { - adc_select_input(0); // Select ADC channel 0 + adc_select_input(0); // Select ADC channel 0 - uint16_t raw = adc_read(); + uint16_t raw = adc_read(); - // Convert to percentage (0 to 100%) - uint8_t percentage = (raw * 100) / 4095; - - return percentage; + // Convert to percentage (0 to 100%) + return (raw * 100) / 4095; } diff --git a/display.cpp b/display.cpp index 110fc20..2f4518a 100644 --- a/display.cpp +++ b/display.cpp @@ -1,4 +1,7 @@ #include "display.h" + +#include + #include "GC9A01/VGA1_16x32.h" #include "gc9a01.h" #include "hardware/gpio.h" @@ -8,6 +11,7 @@ #include "spi.h" #include #include + #include "Font5x7FixedMono.h" #include "hardware/rtc.h" @@ -79,6 +83,35 @@ void draw_ui_circle(uint16_t color) } } + +std::array get_ui_circle_vertical_pos(uint16_t x, uint16_t center_x, uint16_t center_y, uint16_t radius) +{ + // Ctalculate horizontal distance from point to center + uint16_t dx = x - center_x; + uint16_t dx_squared = dx * dx; + uint16_t radius_squared = radius * radius; + + // Check if point's x-coordinate is within circle bounds + if (dx_squared >= radius_squared) { + return {0,0}; // Outside circle - no vertical space + } + + // Calculate vertical distance from center to circle edge at this x + float vertical_offset = sqrt(radius_squared - dx_squared); + + // Find y-coordinates where vertical line intersects circle + uint16_t y_top = center_y - (uint16_t)vertical_offset; + uint16_t y_bottom = center_y + (uint16_t)vertical_offset; + + std::array positions ={y_top,y_bottom}; + + return positions; +} + +void clear_display() { + gc9a01_fill(&display, BLACK); +} + void display_start() { char buf[10]; @@ -86,7 +119,7 @@ void display_start() { gc9a01_init(&display); sleep_ms(100); - gc9a01_fill(&display, BLACK); + clear_display(); draw_ui_circle(MAGENTA); @@ -97,22 +130,22 @@ void display_start() { void print_time(const bool force_refresh) { datetime_t t; if (rtc_get_datetime(&t)) { - GFXfont font = VGA1_16x32; + const GFXfont* font = &VGA1_16x32; char buf[11]; sprintf(buf,"%02d:%02d:%02d", t.hour, t.min, t.sec); - gc9a01_text(&display,&font,buf,120-((16*8)/2),120-16,WHITE, BLACK); + gc9a01_text(&display,font,buf,120-((16*8)/2),120-16,WHITE, BLACK); static uint8_t last_day = UINT8_MAX; if (last_day != t.day || force_refresh) { - font = Font5x7FixedMono; + font = &Font5x7FixedMono; sprintf(buf,"%02d.%02d.%04d",t.day,t.month,t.year); - gc9a01_text_gfx_buffered(&display,&font,buf,120-((6*10)/2),((120-16)+32)+7,WHITE,BLACK); + gc9a01_text_gfx_buffered(&display,font,buf,120-((6*10)/2),((120-16)+32)+7,WHITE,BLACK); last_day = t.day; } } else { const char* rtc_fail= "NO SYNC!"; - GFXfont font = Font5x7FixedMono; - gc9a01_text_gfx_buffered(&display,&font,rtc_fail,120-((5*8)/2),120-((7*1)/2),RED,BLACK); + const GFXfont* font = &Font5x7FixedMono; + gc9a01_text_gfx_buffered(&display,font,rtc_fail,120-((5*8)/2),120-((7*1)/2),RED,BLACK); } } diff --git a/display.h b/display.h index 1eb4aca..a038736 100644 --- a/display.h +++ b/display.h @@ -1,5 +1,17 @@ #ifndef SMART_ALARM_DISPLAY_H #define SMART_ALARM_DISPLAY_H +#include +#include + +#include "gc9a01.h" void display_start(); void print_time(bool force_refresh = false); +void clear_display(); +void draw_ui_circle(uint16_t color); +std::array get_ui_circle_vertical_pos(uint16_t x, uint16_t center_x = 120, uint16_t center_y = 120, uint16_t radius = 119); + +extern gc9a01_GC9A01_obj_t display; + +#define MAX_X 240 +#define MAX_Y 240 #endif //SMART_ALARM_DISPLAY_H \ No newline at end of file diff --git a/fonts/Font5x7FixedMono.c b/fonts/Font5x7FixedMono.c new file mode 100644 index 0000000..05b612a --- /dev/null +++ b/fonts/Font5x7FixedMono.c @@ -0,0 +1,146 @@ +/** +** fixed monospaced font 5x7 +* +* +* Author Rob Jennings +*/ +#include + +#include "gfxfont.h" +const uint8_t FixedMono5x7Bitmaps[] = { + 0xFA, 0xB4, 0x52, 0xBE, 0xAF, 0xA9, 0x40, 0x23, 0xE8, 0xE2, 0xF8, 0x80, + 0xC6, 0x44, 0x44, 0x4C, 0x60, 0x64, 0xA8, 0x8A, 0xC9, 0xA0, 0xD8, 0x00, + 0x6A, 0xA4, 0x00, 0x95, 0x58, 0x00, 0x25, 0x5D, 0xF7, 0x54, 0x80, 0x21, + 0x3E, 0x42, 0x00, 0xD0, 0xF8, 0x00, 0xF0, 0x08, 0x88, 0x88, 0x00, 0x74, + 0x67, 0x5C, 0xC5, 0xC0, 0x59, 0x24, 0xB8, 0x00, 0x74, 0x42, 0x22, 0x23, + 0xE0, 0xF8, 0x88, 0x20, 0xC5, 0xC0, 0x11, 0x95, 0x2F, 0x88, 0x40, 0xFC, + 0x21, 0xE0, 0xC5, 0xC0, 0x32, 0x21, 0xE8, 0xC5, 0xC0, 0xF8, 0x44, 0x44, + 0x21, 0x00, 0x74, 0x62, 0xE8, 0xC5, 0xC0, 0x74, 0x62, 0xF0, 0x89, 0x80, + 0xF3, 0xC0, 0xF3, 0x60, 0x12, 0x48, 0x42, 0x10, 0xF8, 0x3E, 0x00, 0x84, + 0x21, 0x24, 0x80, 0x74, 0x42, 0x22, 0x00, 0x80, 0x74, 0x6B, 0x7B, 0xC1, + 0xC0, 0x22, 0xA3, 0xF8, 0xC6, 0x20, 0xF4, 0x63, 0xE8, 0xC7, 0xC0, 0x74, + 0x61, 0x08, 0x45, 0xC0, 0xE4, 0xA3, 0x18, 0xCB, 0x80, 0xFC, 0x21, 0xE8, + 0x43, 0xE0, 0xFC, 0x21, 0xE8, 0x42, 0x00, 0x74, 0x61, 0x38, 0xC5, 0xC0, + 0x8C, 0x63, 0xF8, 0xC6, 0x20, 0xE9, 0x24, 0xB8, 0x00, 0x38, 0x41, 0x04, + 0x12, 0x46, 0x00, 0x8C, 0xA9, 0x8A, 0x4A, 0x20, 0x84, 0x21, 0x08, 0x43, + 0xE0, 0x8E, 0xEB, 0x18, 0xC6, 0x20, 0x8C, 0x73, 0x59, 0xC6, 0x20, 0x74, + 0x63, 0x18, 0xC5, 0xC0, 0xF4, 0x63, 0xE8, 0x42, 0x00, 0x74, 0x63, 0x1A, + 0xC9, 0xA0, 0xF4, 0x63, 0xEA, 0x4A, 0x20, 0x7C, 0x20, 0xE0, 0x87, 0xC0, + 0xF9, 0x08, 0x42, 0x10, 0x80, 0x8C, 0x63, 0x18, 0xC5, 0xC0, 0x8C, 0x63, + 0x18, 0xA8, 0x80, 0x8C, 0x63, 0x1A, 0xEE, 0x20, 0x8C, 0x54, 0x45, 0x46, + 0x20, 0x8C, 0x54, 0x42, 0x10, 0x80, 0xF8, 0x44, 0x44, 0x43, 0xE0, 0xF2, + 0x49, 0x38, 0x00, 0x82, 0x08, 0x20, 0x80, 0xE4, 0x92, 0x78, 0x00, 0x22, + 0xA2, 0x00, 0xF8, 0x88, 0x80, 0x70, 0x5F, 0x17, 0x80, 0x84, 0x3D, 0x18, + 0xC7, 0xC0, 0x7C, 0x21, 0x07, 0x80, 0x08, 0x5F, 0x18, 0xC5, 0xE0, 0x74, + 0x7F, 0x07, 0x00, 0x25, 0x4E, 0x44, 0x40, 0x7C, 0x5E, 0x17, 0x00, 0x84, + 0x3D, 0x18, 0xC6, 0x20, 0xBE, 0x10, 0x11, 0x19, 0x60, 0x88, 0x9A, 0xCA, + 0x90, 0xFE, 0x00, 0xDD, 0x6B, 0x18, 0x80, 0xB6, 0x63, 0x18, 0x80, 0x74, + 0x63, 0x17, 0x00, 0xF4, 0x7D, 0x08, 0x00, 0x7C, 0x5E, 0x10, 0x80, 0xB6, + 0x61, 0x08, 0x00, 0x7C, 0x1C, 0x1F, 0x00, 0x21, 0x3E, 0x42, 0x14, 0x40, + 0x8C, 0x63, 0x17, 0x00, 0x8C, 0x62, 0xA2, 0x00, 0x8C, 0x6B, 0x55, 0x00, + 0x8A, 0x88, 0xA8, 0x80, 0x8C, 0x5E, 0x17, 0x00, 0xF8, 0x88, 0x8F, 0x80, + 0x29, 0x44, 0x88, 0x00, 0xFE, 0x00, 0xA2, 0x14, 0xA0, 0x00, 0xED, 0xC0 +}; + +const GFXglyph FixedMono5x7Glyphs[] = { + { 0, 0, 1, 6, 0, 0 } // ' ' + ,{ 0, 1, 7, 6, 2, -7 } // '!' + ,{ 1, 3, 2, 6, 1, -7 } // '"' + ,{ 2, 5, 7, 6, 0, -7 } // '#' + ,{ 7, 5, 7, 6, 0, -7 } // '$' + ,{ 12, 5, 7, 6, 0, -7 } // '%' + ,{ 17, 5, 7, 6, 0, -7 } // '&' + ,{ 22, 2, 3, 6, 1, -7 } // ''' + ,{ 24, 2, 7, 6, 2, -7 } // '(' + ,{ 27, 2, 7, 6, 1, -7 } // ')' + ,{ 30, 5, 7, 6, 0, -7 } // '*' + ,{ 35, 5, 5, 6, 0, -6 } // '+' + ,{ 39, 2, 2, 6, 1, -2 } // ',' + ,{ 40, 5, 1, 6, 0, -4 } // '-' + ,{ 42, 2, 2, 6, 1, -2 } // '.' + ,{ 43, 5, 5, 6, 0, -6 } // '/' + ,{ 47, 5, 7, 6, 0, -7 } // '0' + ,{ 52, 3, 7, 6, 1, -7 } // '1' + ,{ 56, 5, 7, 6, 0, -7 } // '2' + ,{ 61, 5, 7, 6, 0, -7 } // '3' + ,{ 66, 5, 7, 6, 0, -7 } // '4' + ,{ 71, 5, 7, 6, 0, -7 } // '5' + ,{ 76, 5, 7, 6, 0, -7 } // '6' + ,{ 81, 5, 7, 6, 0, -7 } // '7' + ,{ 86, 5, 7, 6, 0, -7 } // '8' + ,{ 91, 5, 7, 6, 0, -7 } // '9' + ,{ 96, 2, 5, 6, 1, -6 } // ':' + ,{ 98, 2, 6, 6, 1, -6 } // ';' + ,{ 100, 4, 7, 6, 0, -7 } // '<' + ,{ 104, 5, 3, 6, 0, -5 } // '=' + ,{ 107, 4, 7, 6, 1, -7 } // '>' + ,{ 111, 5, 7, 6, 0, -7 } // '?' + ,{ 116, 5, 7, 6, 0, -7 } // '@' + ,{ 121, 5, 7, 6, 0, -7 } // 'A' + ,{ 126, 5, 7, 6, 0, -7 } // 'B' + ,{ 131, 5, 7, 6, 0, -7 } // 'C' + ,{ 136, 5, 7, 6, 0, -7 } // 'D' + ,{ 141, 5, 7, 6, 0, -7 } // 'E' + ,{ 146, 5, 7, 6, 0, -7 } // 'F' + ,{ 151, 5, 7, 6, 0, -7 } // 'G' + ,{ 156, 5, 7, 6, 0, -7 } // 'H' + ,{ 161, 3, 7, 6, 1, -7 } // 'I' + ,{ 165, 6, 7, 6, 0, -7 } // 'J' + ,{ 171, 5, 7, 6, 0, -7 } // 'K' + ,{ 176, 5, 7, 6, 0, -7 } // 'L' + ,{ 181, 5, 7, 6, 0, -7 } // 'M' + ,{ 186, 5, 7, 6, 0, -7 } // 'N' + ,{ 191, 5, 7, 6, 0, -7 } // 'O' + ,{ 196, 5, 7, 6, 0, -7 } // 'P' + ,{ 201, 5, 7, 6, 0, -7 } // 'Q' + ,{ 206, 5, 7, 6, 0, -7 } // 'R' + ,{ 211, 5, 7, 6, 0, -7 } // 'S' + ,{ 216, 5, 7, 6, 0, -7 } // 'T' + ,{ 221, 5, 7, 6, 0, -7 } // 'U' + ,{ 226, 5, 7, 6, 0, -7 } // 'V' + ,{ 231, 5, 7, 6, 0, -7 } // 'W' + ,{ 236, 5, 7, 6, 0, -7 } // 'X' + ,{ 241, 5, 7, 6, 0, -7 } // 'Y' + ,{ 246, 5, 7, 6, 0, -7 } // 'Z' + ,{ 251, 3, 7, 6, 1, -7 } // '[' + ,{ 255, 5, 5, 6, 0, -6 } // '\' + ,{ 259, 3, 7, 6, 1, -7 } // ']' + ,{ 263, 5, 3, 6, 0, -7 } // '^' + ,{ 266, 5, 1, 6, 0, -1 } // '_' + ,{ 267, 3, 3, 6, 1, -7 } // '`' + ,{ 269, 5, 5, 6, 0, -5 } // 'a' + ,{ 273, 5, 7, 6, 0, -7 } // 'b' + ,{ 278, 5, 5, 6, 0, -5 } // 'c' + ,{ 282, 5, 7, 6, 0, -7 } // 'd' + ,{ 287, 5, 5, 6, 0, -5 } // 'e' + ,{ 291, 4, 7, 6, 0, -7 } // 'f' + ,{ 295, 5, 5, 6, 0, -5 } // 'g' + ,{ 299, 5, 7, 6, 0, -7 } // 'h' + ,{ 304, 1, 7, 6, 2, -7 } // 'i' + ,{ 305, 4, 7, 6, 0, -7 } // 'j' + ,{ 309, 4, 7, 6, 0, -7 } // 'k' + ,{ 313, 1, 7, 6, 2, -7 } // 'l' + ,{ 315, 5, 5, 6, 0, -5 } // 'm' + ,{ 319, 5, 5, 6, 0, -5 } // 'n' + ,{ 323, 5, 5, 6, 0, -5 } // 'o' + ,{ 327, 5, 5, 6, 0, -5 } // 'p' + ,{ 331, 5, 5, 6, 0, -5 } // 'q' + ,{ 335, 5, 5, 6, 0, -5 } // 'r' + ,{ 339, 5, 5, 6, 0, -5 } // 's' + ,{ 343, 5, 7, 6, 0, -7 } // 't' + ,{ 348, 5, 5, 6, 0, -5 } // 'u' + ,{ 352, 5, 5, 6, 0, -5 } // 'v' + ,{ 356, 5, 5, 6, 0, -5 } // 'w' + ,{ 360, 5, 5, 6, 0, -5 } // 'x' + ,{ 364, 5, 5, 6, 0, -5 } // 'y' + ,{ 368, 5, 5, 6, 0, -5 } // 'z' + ,{ 372, 3, 7, 6, 1, -7 } // '{' + ,{ 376, 1, 7, 6, 2, -7 } // '|' + ,{ 378, 3, 7, 6, 1, -7 } // '}' + ,{ 382, 5, 2, 6, 0, -4 } // '~' +}; + +const GFXfont Font5x7FixedMono = { +(uint8_t *)FixedMono5x7Bitmaps, +(GFXglyph *)FixedMono5x7Glyphs, +0x20, 0x7E, 7}; \ No newline at end of file diff --git a/fonts/Font5x7FixedMono.h b/fonts/Font5x7FixedMono.h index 78c9a1c..b1ed22c 100644 --- a/fonts/Font5x7FixedMono.h +++ b/fonts/Font5x7FixedMono.h @@ -4,141 +4,6 @@ * * Author Rob Jennings */ +#pragma once #include "gfxfont.h" -const uint8_t FixedMono5x7Bitmaps[] = { - 0xFA, 0xB4, 0x52, 0xBE, 0xAF, 0xA9, 0x40, 0x23, 0xE8, 0xE2, 0xF8, 0x80, - 0xC6, 0x44, 0x44, 0x4C, 0x60, 0x64, 0xA8, 0x8A, 0xC9, 0xA0, 0xD8, 0x00, - 0x6A, 0xA4, 0x00, 0x95, 0x58, 0x00, 0x25, 0x5D, 0xF7, 0x54, 0x80, 0x21, - 0x3E, 0x42, 0x00, 0xD0, 0xF8, 0x00, 0xF0, 0x08, 0x88, 0x88, 0x00, 0x74, - 0x67, 0x5C, 0xC5, 0xC0, 0x59, 0x24, 0xB8, 0x00, 0x74, 0x42, 0x22, 0x23, - 0xE0, 0xF8, 0x88, 0x20, 0xC5, 0xC0, 0x11, 0x95, 0x2F, 0x88, 0x40, 0xFC, - 0x21, 0xE0, 0xC5, 0xC0, 0x32, 0x21, 0xE8, 0xC5, 0xC0, 0xF8, 0x44, 0x44, - 0x21, 0x00, 0x74, 0x62, 0xE8, 0xC5, 0xC0, 0x74, 0x62, 0xF0, 0x89, 0x80, - 0xF3, 0xC0, 0xF3, 0x60, 0x12, 0x48, 0x42, 0x10, 0xF8, 0x3E, 0x00, 0x84, - 0x21, 0x24, 0x80, 0x74, 0x42, 0x22, 0x00, 0x80, 0x74, 0x6B, 0x7B, 0xC1, - 0xC0, 0x22, 0xA3, 0xF8, 0xC6, 0x20, 0xF4, 0x63, 0xE8, 0xC7, 0xC0, 0x74, - 0x61, 0x08, 0x45, 0xC0, 0xE4, 0xA3, 0x18, 0xCB, 0x80, 0xFC, 0x21, 0xE8, - 0x43, 0xE0, 0xFC, 0x21, 0xE8, 0x42, 0x00, 0x74, 0x61, 0x38, 0xC5, 0xC0, - 0x8C, 0x63, 0xF8, 0xC6, 0x20, 0xE9, 0x24, 0xB8, 0x00, 0x38, 0x41, 0x04, - 0x12, 0x46, 0x00, 0x8C, 0xA9, 0x8A, 0x4A, 0x20, 0x84, 0x21, 0x08, 0x43, - 0xE0, 0x8E, 0xEB, 0x18, 0xC6, 0x20, 0x8C, 0x73, 0x59, 0xC6, 0x20, 0x74, - 0x63, 0x18, 0xC5, 0xC0, 0xF4, 0x63, 0xE8, 0x42, 0x00, 0x74, 0x63, 0x1A, - 0xC9, 0xA0, 0xF4, 0x63, 0xEA, 0x4A, 0x20, 0x7C, 0x20, 0xE0, 0x87, 0xC0, - 0xF9, 0x08, 0x42, 0x10, 0x80, 0x8C, 0x63, 0x18, 0xC5, 0xC0, 0x8C, 0x63, - 0x18, 0xA8, 0x80, 0x8C, 0x63, 0x1A, 0xEE, 0x20, 0x8C, 0x54, 0x45, 0x46, - 0x20, 0x8C, 0x54, 0x42, 0x10, 0x80, 0xF8, 0x44, 0x44, 0x43, 0xE0, 0xF2, - 0x49, 0x38, 0x00, 0x82, 0x08, 0x20, 0x80, 0xE4, 0x92, 0x78, 0x00, 0x22, - 0xA2, 0x00, 0xF8, 0x88, 0x80, 0x70, 0x5F, 0x17, 0x80, 0x84, 0x3D, 0x18, - 0xC7, 0xC0, 0x7C, 0x21, 0x07, 0x80, 0x08, 0x5F, 0x18, 0xC5, 0xE0, 0x74, - 0x7F, 0x07, 0x00, 0x25, 0x4E, 0x44, 0x40, 0x7C, 0x5E, 0x17, 0x00, 0x84, - 0x3D, 0x18, 0xC6, 0x20, 0xBE, 0x10, 0x11, 0x19, 0x60, 0x88, 0x9A, 0xCA, - 0x90, 0xFE, 0x00, 0xDD, 0x6B, 0x18, 0x80, 0xB6, 0x63, 0x18, 0x80, 0x74, - 0x63, 0x17, 0x00, 0xF4, 0x7D, 0x08, 0x00, 0x7C, 0x5E, 0x10, 0x80, 0xB6, - 0x61, 0x08, 0x00, 0x7C, 0x1C, 0x1F, 0x00, 0x21, 0x3E, 0x42, 0x14, 0x40, - 0x8C, 0x63, 0x17, 0x00, 0x8C, 0x62, 0xA2, 0x00, 0x8C, 0x6B, 0x55, 0x00, - 0x8A, 0x88, 0xA8, 0x80, 0x8C, 0x5E, 0x17, 0x00, 0xF8, 0x88, 0x8F, 0x80, - 0x29, 0x44, 0x88, 0x00, 0xFE, 0x00, 0xA2, 0x14, 0xA0, 0x00, 0xED, 0xC0 -}; - -const GFXglyph FixedMono5x7Glyphs[] = { - { 0, 0, 1, 6, 0, 0 } // ' ' - ,{ 0, 1, 7, 6, 2, -7 } // '!' - ,{ 1, 3, 2, 6, 1, -7 } // '"' - ,{ 2, 5, 7, 6, 0, -7 } // '#' - ,{ 7, 5, 7, 6, 0, -7 } // '$' - ,{ 12, 5, 7, 6, 0, -7 } // '%' - ,{ 17, 5, 7, 6, 0, -7 } // '&' - ,{ 22, 2, 3, 6, 1, -7 } // ''' - ,{ 24, 2, 7, 6, 2, -7 } // '(' - ,{ 27, 2, 7, 6, 1, -7 } // ')' - ,{ 30, 5, 7, 6, 0, -7 } // '*' - ,{ 35, 5, 5, 6, 0, -6 } // '+' - ,{ 39, 2, 2, 6, 1, -2 } // ',' - ,{ 40, 5, 1, 6, 0, -4 } // '-' - ,{ 42, 2, 2, 6, 1, -2 } // '.' - ,{ 43, 5, 5, 6, 0, -6 } // '/' - ,{ 47, 5, 7, 6, 0, -7 } // '0' - ,{ 52, 3, 7, 6, 1, -7 } // '1' - ,{ 56, 5, 7, 6, 0, -7 } // '2' - ,{ 61, 5, 7, 6, 0, -7 } // '3' - ,{ 66, 5, 7, 6, 0, -7 } // '4' - ,{ 71, 5, 7, 6, 0, -7 } // '5' - ,{ 76, 5, 7, 6, 0, -7 } // '6' - ,{ 81, 5, 7, 6, 0, -7 } // '7' - ,{ 86, 5, 7, 6, 0, -7 } // '8' - ,{ 91, 5, 7, 6, 0, -7 } // '9' - ,{ 96, 2, 5, 6, 1, -6 } // ':' - ,{ 98, 2, 6, 6, 1, -6 } // ';' - ,{ 100, 4, 7, 6, 0, -7 } // '<' - ,{ 104, 5, 3, 6, 0, -5 } // '=' - ,{ 107, 4, 7, 6, 1, -7 } // '>' - ,{ 111, 5, 7, 6, 0, -7 } // '?' - ,{ 116, 5, 7, 6, 0, -7 } // '@' - ,{ 121, 5, 7, 6, 0, -7 } // 'A' - ,{ 126, 5, 7, 6, 0, -7 } // 'B' - ,{ 131, 5, 7, 6, 0, -7 } // 'C' - ,{ 136, 5, 7, 6, 0, -7 } // 'D' - ,{ 141, 5, 7, 6, 0, -7 } // 'E' - ,{ 146, 5, 7, 6, 0, -7 } // 'F' - ,{ 151, 5, 7, 6, 0, -7 } // 'G' - ,{ 156, 5, 7, 6, 0, -7 } // 'H' - ,{ 161, 3, 7, 6, 1, -7 } // 'I' - ,{ 165, 6, 7, 6, 0, -7 } // 'J' - ,{ 171, 5, 7, 6, 0, -7 } // 'K' - ,{ 176, 5, 7, 6, 0, -7 } // 'L' - ,{ 181, 5, 7, 6, 0, -7 } // 'M' - ,{ 186, 5, 7, 6, 0, -7 } // 'N' - ,{ 191, 5, 7, 6, 0, -7 } // 'O' - ,{ 196, 5, 7, 6, 0, -7 } // 'P' - ,{ 201, 5, 7, 6, 0, -7 } // 'Q' - ,{ 206, 5, 7, 6, 0, -7 } // 'R' - ,{ 211, 5, 7, 6, 0, -7 } // 'S' - ,{ 216, 5, 7, 6, 0, -7 } // 'T' - ,{ 221, 5, 7, 6, 0, -7 } // 'U' - ,{ 226, 5, 7, 6, 0, -7 } // 'V' - ,{ 231, 5, 7, 6, 0, -7 } // 'W' - ,{ 236, 5, 7, 6, 0, -7 } // 'X' - ,{ 241, 5, 7, 6, 0, -7 } // 'Y' - ,{ 246, 5, 7, 6, 0, -7 } // 'Z' - ,{ 251, 3, 7, 6, 1, -7 } // '[' - ,{ 255, 5, 5, 6, 0, -6 } // '\' - ,{ 259, 3, 7, 6, 1, -7 } // ']' - ,{ 263, 5, 3, 6, 0, -7 } // '^' - ,{ 266, 5, 1, 6, 0, -1 } // '_' - ,{ 267, 3, 3, 6, 1, -7 } // '`' - ,{ 269, 5, 5, 6, 0, -5 } // 'a' - ,{ 273, 5, 7, 6, 0, -7 } // 'b' - ,{ 278, 5, 5, 6, 0, -5 } // 'c' - ,{ 282, 5, 7, 6, 0, -7 } // 'd' - ,{ 287, 5, 5, 6, 0, -5 } // 'e' - ,{ 291, 4, 7, 6, 0, -7 } // 'f' - ,{ 295, 5, 5, 6, 0, -5 } // 'g' - ,{ 299, 5, 7, 6, 0, -7 } // 'h' - ,{ 304, 1, 7, 6, 2, -7 } // 'i' - ,{ 305, 4, 7, 6, 0, -7 } // 'j' - ,{ 309, 4, 7, 6, 0, -7 } // 'k' - ,{ 313, 1, 7, 6, 2, -7 } // 'l' - ,{ 315, 5, 5, 6, 0, -5 } // 'm' - ,{ 319, 5, 5, 6, 0, -5 } // 'n' - ,{ 323, 5, 5, 6, 0, -5 } // 'o' - ,{ 327, 5, 5, 6, 0, -5 } // 'p' - ,{ 331, 5, 5, 6, 0, -5 } // 'q' - ,{ 335, 5, 5, 6, 0, -5 } // 'r' - ,{ 339, 5, 5, 6, 0, -5 } // 's' - ,{ 343, 5, 7, 6, 0, -7 } // 't' - ,{ 348, 5, 5, 6, 0, -5 } // 'u' - ,{ 352, 5, 5, 6, 0, -5 } // 'v' - ,{ 356, 5, 5, 6, 0, -5 } // 'w' - ,{ 360, 5, 5, 6, 0, -5 } // 'x' - ,{ 364, 5, 5, 6, 0, -5 } // 'y' - ,{ 368, 5, 5, 6, 0, -5 } // 'z' - ,{ 372, 3, 7, 6, 1, -7 } // '{' - ,{ 376, 1, 7, 6, 2, -7 } // '|' - ,{ 378, 3, 7, 6, 1, -7 } // '}' - ,{ 382, 5, 2, 6, 0, -4 } // '~' -}; - -const GFXfont Font5x7FixedMono = { -(uint8_t *)FixedMono5x7Bitmaps, -(GFXglyph *)FixedMono5x7Glyphs, -0x20, 0x7E, 7}; \ No newline at end of file +extern const GFXfont Font5x7FixedMono; \ No newline at end of file diff --git a/macros.h b/macros.h new file mode 100644 index 0000000..723d499 --- /dev/null +++ b/macros.h @@ -0,0 +1,4 @@ +#ifndef SMART_ALARM_MACROS_H +#define SMART_ALARM_MACROS_H +#define ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0])) +#endif //SMART_ALARM_MACROS_H \ No newline at end of file diff --git a/multicore_events.h b/multicore_events.h new file mode 100644 index 0000000..a005da6 --- /dev/null +++ b/multicore_events.h @@ -0,0 +1,8 @@ +#ifndef SMART_ALARM_MULTICORE_EVENTS_H +#define SMART_ALARM_MULTICORE_EVENTS_H +enum multicore_event_t { +PRIMARY_BUTTON_PRESSED, +SECONDARY_BUTTON_PRESSED, + KNOB_CHANGE +}; +#endif //SMART_ALARM_MULTICORE_EVENTS_H \ No newline at end of file diff --git a/pins.h b/pins.h index 27b634a..ca159cc 100644 --- a/pins.h +++ b/pins.h @@ -1,4 +1,11 @@ #pragma once #define KNOB_PW_PIN 22 -#define KNOB_SIG_PIN 26 \ No newline at end of file +#define KNOB_SIG_PIN 26 +#define SPEAKER_PIN 11 + +#define BUTTON_PRIMARY_PW 9 +#define BUTTON_PRIMARY_IN 8 + +#define BUTTON_SECONDARY_PW 7 +#define BUTTON_SECONDARY_IN 6 \ No newline at end of file diff --git a/smart_alarm.cpp b/smart_alarm.cpp index 6cf0c4d..3468884 100644 --- a/smart_alarm.cpp +++ b/smart_alarm.cpp @@ -1,4 +1,6 @@ +#include "hardware/adc.h" #include "hardware/clocks.h" +#include "hardware/pwm.h" #include "hardware/rtc.h" #include "hardware/spi.h" #include "lwip/apps/sntp.h" @@ -11,79 +13,75 @@ #include #include #include -#include "hardware/pwm.h" -#include "hardware/adc.h" +#include "control.h" +#include "display.h" #include "lwip/dns.h" #include "lwip/tcp.h" +#include "macros.h" +#include "multicore_events.h" #include "net_utils.h" -#include "timezones.h" -#include "spi.h" -#include "display.h" +#include "pico/multicore.h" #include "pins.h" -#include "control.h" - +#include "sound.h" +#include "spi.h" +#include "timezones.h" +#include "ui.h" #define NTP_DELTA 2208988800UL -volatile u16_t timezone_index = 353; +volatile u16_t timezone_index; extern "C" void sync_system_time(unsigned int sec, unsigned int usec) { - if (sec == 0) { - printf("SNTP: Invalid timestamp received\n"); - return; - } + if (sec == 0) { + printf("SNTP: Invalid timestamp received\n"); + return; + } - printf("SNTP callback received: %lu\n", (unsigned long)sec); + printf("SNTP callback received: %lu\n", (unsigned long)sec); - // Convert NTP timestamp to Unix timestamp - time_t unix_time = (time_t)(sec - NTP_DELTA); + // Convert NTP timestamp to Unix timestamp + time_t unix_time = (time_t)(sec - NTP_DELTA); + struct tm *time_info = gmtime(&unix_time); + if (time_info == NULL) { + printf("SNTP: Invalid timestamp %lu\n", (unsigned long)sec); + return; + } - struct tm *time_info = gmtime(&unix_time); - if (time_info == NULL) { - printf("SNTP: Invalid timestamp %lu\n", (unsigned long)sec); - return; - } + printf("Got SNTP response: %02d/%02d/%04d %02d:%02d:%02d\n", + time_info->tm_mday, time_info->tm_mon + 1, time_info->tm_year + 1900, + time_info->tm_hour, time_info->tm_min, time_info->tm_sec); - printf("Got SNTP response: %02d/%02d/%04d %02d:%02d:%02d\n", - time_info->tm_mday, time_info->tm_mon + 1, time_info->tm_year + 1900, - time_info->tm_hour, time_info->tm_min, time_info->tm_sec); - - datetime_t dt = { - .year = static_cast(time_info->tm_year + 1900), - .month = static_cast(time_info->tm_mon + 1), - .day = static_cast(time_info->tm_mday), - .dotw = static_cast(time_info->tm_wday), - .hour = static_cast(time_info->tm_hour), - .min = static_cast(time_info->tm_min), - .sec = static_cast(time_info->tm_sec) - }; + datetime_t dt = {.year = static_cast(time_info->tm_year + 1900), + .month = static_cast(time_info->tm_mon + 1), + .day = static_cast(time_info->tm_mday), + .dotw = static_cast(time_info->tm_wday), + .hour = static_cast(time_info->tm_hour), + .min = static_cast(time_info->tm_min), + .sec = static_cast(time_info->tm_sec)}; timezone_offset(timezone_index, dt); - // Set RTC - if (rtc_set_datetime(&dt)) { - printf("SNTP: Time synchronized to %04d-%02d-%02d %02d:%02d:%02d %s\n", - dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec, - "Local"); - } else { - printf("SNTP: Failed to set RTC\n"); - } - + // Set RTC + if (rtc_set_datetime(&dt)) { + printf("SNTP: Time synchronized to %04d-%02d-%02d %02d:%02d:%02d %s\n", + dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec, "Local"); + } else { + printf("SNTP: Failed to set RTC\n"); + } // Sanity checks if (dt.year < 2020 || dt.year > 2100 || dt.month < 1 || dt.month > 12 || dt.day < 1 || dt.day > 31 || dt.hour > 23 || dt.min > 59 || dt.sec > 59) { printf("SNTP: Invalid date/time components\n"); return; - } + } // Set RTC with error handling if (rtc_set_datetime(&dt)) { printf("SNTP: Time synchronized to %04d-%02d-%02d %02d:%02d:%02d %s\n", - dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec, - "Local"); + dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec, "Local"); } else { printf("SNTP: Failed to set RTC\n"); } @@ -97,15 +95,28 @@ int main() { rtc_init(); gpio_init(KNOB_PW_PIN); gpio_set_dir(KNOB_PW_PIN, GPIO_OUT); - gpio_put(KNOB_PW_PIN,1); + gpio_put(KNOB_PW_PIN, 1); + + gpio_init(BUTTON_PRIMARY_PW); + gpio_init(BUTTON_SECONDARY_PW); + gpio_init(BUTTON_PRIMARY_IN); + gpio_init(BUTTON_SECONDARY_IN); + + gpio_set_dir(BUTTON_PRIMARY_PW, GPIO_OUT); + gpio_set_dir(BUTTON_SECONDARY_PW, GPIO_OUT); + gpio_put(BUTTON_PRIMARY_PW, 1); + gpio_put(BUTTON_SECONDARY_PW, 1); + + gpio_set_dir(BUTTON_PRIMARY_IN, GPIO_IN); + gpio_init(BUTTON_PRIMARY_IN); adc_init(); adc_gpio_init(KNOB_SIG_PIN); adc_select_input(0); - // PWM for PC speeker - gpio_set_function(11, GPIO_FUNC_PWM); + setup_pwm_audio(); + timezone_index = 353; // todo load from flash // sign of life cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, true); @@ -149,28 +160,43 @@ int main() { printf("SNTP initialized, waiting for time sync...\n"); - uint slice_num = pwm_gpio_to_slice_num(11); - - // Generate a 1kHz tone - // 125MHz / 125 = 1MHz PWM clock - pwm_set_clkdiv(slice_num, 125.0f); - - // 1MHz / 1000 = 1kHz audio frequency - pwm_set_wrap(slice_num, 1000); - - // 50% duty cycle for square wave - pwm_set_chan_level(slice_num, PWM_CHAN_B, 500); - - // Enable PWM - pwm_set_enabled(slice_num, true); + uint8_t page_selected = 1; + multicore_launch_core1(page_functions[page_selected]); + uint8_t knob_position = get_knob_percentage(); while (true) { - print_time(); - printf("knob: %d\n",get_knob_percentage()); - pwm_set_wrap(slice_num, 10*get_knob_percentage()); + if (gpio_get(BUTTON_SECONDARY_IN)) { + while (gpio_get(BUTTON_SECONDARY_IN)) { + tight_loop_contents(); + } // await until button is released - sleep_ms(500); + if (!secondary_button_override) { + page_selected = + page_selected + 1 >= page_functions.size() ? 0 : page_selected + 1; + multicore_reset_core1(); + clear_display(); + multicore_launch_core1(page_functions[page_selected]); + } else { + multicore_fifo_push_timeout_us(SECONDARY_BUTTON_PRESSED, 10); + } + } + if (gpio_get(BUTTON_PRIMARY_IN)) { + while (gpio_get(BUTTON_PRIMARY_IN)) { + tight_loop_contents(); + } + multicore_fifo_push_timeout_us(PRIMARY_BUTTON_PRESSED, 10); + } + + { + uint8_t knob_now = get_knob_percentage(); + if (knob_now != knob_position) { + knob_position = knob_now; + multicore_fifo_push_timeout_us(KNOB_CHANGE, 10); + } + } + + sleep_ms(10); } cyw43_arch_lwip_end(); return 0; diff --git a/sound.cpp b/sound.cpp new file mode 100644 index 0000000..efdb998 --- /dev/null +++ b/sound.cpp @@ -0,0 +1,74 @@ +#include "sound.h" + +#include "pico/stdlib.h" +#include "hardware/pwm.h" +#include "hardware/dma.h" +#include "hardware/irq.h" +#include "hardware/clocks.h" +#include "alarm_sound.h" +#include "pins.h" + +#define SAMPLE_RATE 22050 // 22.05kHz +#define PWM_WRAP 255 // 8-bit resolution +volatile float volume_multiplier = 4.0f; // todo load from flash + +static uint32_t audio_pos = 0; +static bool audio_playing = false; + +// Timer callback for audio playback +bool audio_timer_callback(repeating_timer_t *rt) { + if (!audio_playing || audio_pos >= alarm_sound_wav_len) { + audio_playing = false; + return false; // Stop timer + } + + // Get the original audio sample + uint8_t sample = alarm_sound_wav[audio_pos++]; + + // Apply volume amplification + // Convert to float, center around 0, apply multiplier, then center back around 128 + float amplified = ((float)sample - 128.0f) * volume_multiplier + 128.0f; + + // Clamp the result to valid 8-bit range (0-255) + if (amplified < 0.0f) amplified = 0.0f; + else if (amplified > 255.0f) amplified = 255.0f; + + // Set PWM duty cycle with amplified sample + pwm_set_gpio_level(SPEAKER_PIN, (uint8_t)amplified); + + return true; // Continue timer +} + +void setup_pwm_audio() { + // Set up PWM for audio output + gpio_set_function(SPEAKER_PIN, GPIO_FUNC_PWM); + uint slice_num = pwm_gpio_to_slice_num(SPEAKER_PIN); + + // Configure PWM for 8-bit resolution + pwm_config config = pwm_get_default_config(); + + // Calculate clock divider for desired PWM frequency + // PWM frequency should be much higher than audio sample rate + // Target: ~250kHz PWM frequency for good audio quality + float clock_div = (float)clock_get_hz(clk_sys) / (PWM_WRAP + 1) / 250000.0f; + pwm_config_set_clkdiv(&config, clock_div); + pwm_config_set_wrap(&config, PWM_WRAP); + + pwm_init(slice_num, &config, true); + pwm_set_gpio_level(SPEAKER_PIN, 128); // Set to middle level (silence) +} + +void play_audio() { + audio_pos = 0; + audio_playing = true; + + // Set up timer for sample rate (22.05kHz) + static repeating_timer_t timer; + int32_t delay_us = -1000000 / SAMPLE_RATE; // Negative for precise timing + add_repeating_timer_us(delay_us, audio_timer_callback, NULL, &timer); +} + +void stop_audio() { + audio_playing = false; + pwm_set_gpio_level(SPEAKER_PIN, 128); // Return to silence level +} \ No newline at end of file diff --git a/sound.h b/sound.h new file mode 100644 index 0000000..76314d1 --- /dev/null +++ b/sound.h @@ -0,0 +1,10 @@ +#ifndef SMART_ALARM_SOUND_H +#define SMART_ALARM_SOUND_H + +void setup_pwm_audio(); +void play_audio(); +void stop_audio(); + +extern volatile float volume_multiplier; + +#endif //SMART_ALARM_SOUND_H \ No newline at end of file diff --git a/spi.h b/spi.h index bb9b101..d2d4bb8 100644 --- a/spi.h +++ b/spi.h @@ -12,7 +12,7 @@ #define PIN_DC 16 #define PIN_RST 20 -#define SPI_CLOCK_HZ 12000000 +#define SPI_CLOCK_HZ 40000000 // #define SPI_CLOCK_HZ 1000 #define MEMORY_WRITE 0x2C diff --git a/timezones.cpp b/timezones.cpp index 6af6240..332e42f 100644 --- a/timezones.cpp +++ b/timezones.cpp @@ -3,928 +3,928 @@ #include "lwip/arch.h" #include constexpr timezone_t timezones[] = { - // Africa/Abidjan - GMT - {"Africa/Abidjan", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Accra - GMT - {"Africa/Accra", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Addis_Ababa - EAT - {"Africa/Addis_Ababa", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Algiers - CET - {"Africa/Algiers", "CET", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Asmara - EAT - {"Africa/Asmara", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Bamako - GMT - {"Africa/Bamako", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Bangui - WAT - {"Africa/Bangui", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Banjul - GMT - {"Africa/Banjul", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Bissau - GMT - {"Africa/Bissau", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Blantyre - CAT - {"Africa/Blantyre", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Brazzaville - WAT - {"Africa/Brazzaville", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Bujumbura - CAT - {"Africa/Bujumbura", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Cairo - EET/EEST - {"Africa/Cairo", "EET", "EEST", 2, 0, 3, 0, 4, 5, 5, 0, 0, 10, 5, 4, 24, 0, 1, 0}, - // Africa/Casablanca - +01 - {"Africa/Casablanca", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Ceuta - CET/CEST - {"Africa/Ceuta", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Africa/Conakry - GMT - {"Africa/Conakry", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Dakar - GMT - {"Africa/Dakar", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Dar_es_Salaam - EAT - {"Africa/Dar_es_Salaam", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Djibouti - EAT - {"Africa/Djibouti", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Douala - WAT - {"Africa/Douala", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/El_Aaiun - +01 - {"Africa/El_Aaiun", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Freetown - GMT - {"Africa/Freetown", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Gaborone - CAT - {"Africa/Gaborone", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Harare - CAT - {"Africa/Harare", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Johannesburg - SAST - {"Africa/Johannesburg", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Juba - CAT - {"Africa/Juba", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Kampala - EAT - {"Africa/Kampala", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Khartoum - CAT - {"Africa/Khartoum", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Kigali - CAT - {"Africa/Kigali", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Kinshasa - WAT - {"Africa/Kinshasa", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Lagos - WAT - {"Africa/Lagos", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Libreville - WAT - {"Africa/Libreville", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Lome - GMT - {"Africa/Lome", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Luanda - WAT - {"Africa/Luanda", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Lubumbashi - CAT - {"Africa/Lubumbashi", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Lusaka - CAT - {"Africa/Lusaka", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Malabo - WAT - {"Africa/Malabo", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Maputo - CAT - {"Africa/Maputo", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Maseru - SAST - {"Africa/Maseru", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Mbabane - SAST - {"Africa/Mbabane", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Mogadishu - EAT - {"Africa/Mogadishu", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Monrovia - GMT - {"Africa/Monrovia", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Nairobi - EAT - {"Africa/Nairobi", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Ndjamena - WAT - {"Africa/Ndjamena", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Niamey - WAT - {"Africa/Niamey", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Nouakchott - GMT - {"Africa/Nouakchott", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Ouagadougou - GMT - {"Africa/Ouagadougou", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Porto-Novo - WAT - {"Africa/Porto-Novo", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Sao_Tome - GMT - {"Africa/Sao_Tome", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Tripoli - EET - {"Africa/Tripoli", "EET", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Tunis - CET - {"Africa/Tunis", "CET", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Africa/Windhoek - CAT - {"Africa/Windhoek", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Adak - HST/HDT - {"America/Adak", "HST", "HDT", -10, 0, -9, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Anchorage - AKST/AKDT - {"America/Anchorage", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Anguilla - AST - {"America/Anguilla", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Antigua - AST - {"America/Antigua", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Araguaina - -03 - {"America/Araguaina", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Buenos_Aires - -03 - {"America/Argentina/Buenos_Aires", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Catamarca - -03 - {"America/Argentina/Catamarca", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Cordoba - -03 - {"America/Argentina/Cordoba", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Jujuy - -03 - {"America/Argentina/Jujuy", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/La_Rioja - -03 - {"America/Argentina/La_Rioja", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Mendoza - -03 - {"America/Argentina/Mendoza", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Rio_Gallegos - -03 - {"America/Argentina/Rio_Gallegos", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Salta - -03 - {"America/Argentina/Salta", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/San_Juan - -03 - {"America/Argentina/San_Juan", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/San_Luis - -03 - {"America/Argentina/San_Luis", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Tucuman - -03 - {"America/Argentina/Tucuman", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Argentina/Ushuaia - -03 - {"America/Argentina/Ushuaia", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Aruba - AST - {"America/Aruba", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Asuncion - -03 - {"America/Asuncion", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Atikokan - EST - {"America/Atikokan", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Bahia - -03 - {"America/Bahia", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Bahia_Banderas - CST - {"America/Bahia_Banderas", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Barbados - AST - {"America/Barbados", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Belem - -03 - {"America/Belem", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Belize - CST - {"America/Belize", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Blanc-Sablon - AST - {"America/Blanc-Sablon", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Boa_Vista - -04 - {"America/Boa_Vista", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Bogota - -05 - {"America/Bogota", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Boise - MST/MDT - {"America/Boise", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Cambridge_Bay - MST/MDT - {"America/Cambridge_Bay", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Campo_Grande - -04 - {"America/Campo_Grande", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Cancun - EST - {"America/Cancun", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Caracas - -04 - {"America/Caracas", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Cayenne - -03 - {"America/Cayenne", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Cayman - EST - {"America/Cayman", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Chicago - CST/CDT - {"America/Chicago", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Chihuahua - CST - {"America/Chihuahua", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Costa_Rica - CST - {"America/Costa_Rica", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Creston - MST - {"America/Creston", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Cuiaba - -04 - {"America/Cuiaba", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Curacao - AST - {"America/Curacao", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Danmarkshavn - GMT - {"America/Danmarkshavn", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Dawson - MST - {"America/Dawson", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Dawson_Creek - MST - {"America/Dawson_Creek", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Denver - MST/MDT - {"America/Denver", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Detroit - EST/EDT - {"America/Detroit", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Dominica - AST - {"America/Dominica", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Edmonton - MST/MDT - {"America/Edmonton", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Eirunepe - -05 - {"America/Eirunepe", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/El_Salvador - CST - {"America/El_Salvador", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Fortaleza - -03 - {"America/Fortaleza", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Fort_Nelson - MST - {"America/Fort_Nelson", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Glace_Bay - AST/ADT - {"America/Glace_Bay", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Godthab - -02/-01 - {"America/Godthab", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, - // America/Goose_Bay - AST/ADT - {"America/Goose_Bay", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Grand_Turk - EST/EDT - {"America/Grand_Turk", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Grenada - AST - {"America/Grenada", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Guadeloupe - AST - {"America/Guadeloupe", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Guatemala - CST - {"America/Guatemala", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Guayaquil - -05 - {"America/Guayaquil", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Guyana - -04 - {"America/Guyana", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Halifax - AST/ADT - {"America/Halifax", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Havana - CST/CDT - {"America/Havana", "CST", "CDT", -5, 0, -4, 0, 3, 2, 0, 0, 0, 11, 1, 0, 1, 0, 1, 0}, - // America/Hermosillo - MST - {"America/Hermosillo", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Indiana/Indianapolis - EST/EDT - {"America/Indiana/Indianapolis", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Indiana/Knox - CST/CDT - {"America/Indiana/Knox", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Indiana/Marengo - EST/EDT - {"America/Indiana/Marengo", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Indiana/Petersburg - EST/EDT - {"America/Indiana/Petersburg", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Indiana/Tell_City - CST/CDT - {"America/Indiana/Tell_City", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Indiana/Vevay - EST/EDT - {"America/Indiana/Vevay", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Indiana/Vincennes - EST/EDT - {"America/Indiana/Vincennes", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Indiana/Winamac - EST/EDT - {"America/Indiana/Winamac", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Inuvik - MST/MDT - {"America/Inuvik", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Iqaluit - EST/EDT - {"America/Iqaluit", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Jamaica - EST - {"America/Jamaica", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Juneau - AKST/AKDT - {"America/Juneau", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Kentucky/Louisville - EST/EDT - {"America/Kentucky/Louisville", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Kentucky/Monticello - EST/EDT - {"America/Kentucky/Monticello", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Kralendijk - AST - {"America/Kralendijk", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/La_Paz - -04 - {"America/La_Paz", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Lima - -05 - {"America/Lima", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Los_Angeles - PST/PDT - {"America/Los_Angeles", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Lower_Princes - AST - {"America/Lower_Princes", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Maceio - -03 - {"America/Maceio", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Managua - CST - {"America/Managua", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Manaus - -04 - {"America/Manaus", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Marigot - AST - {"America/Marigot", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Martinique - AST - {"America/Martinique", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Matamoros - CST/CDT - {"America/Matamoros", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Mazatlan - MST - {"America/Mazatlan", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Menominee - CST/CDT - {"America/Menominee", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Merida - CST - {"America/Merida", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Metlakatla - AKST/AKDT - {"America/Metlakatla", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Mexico_City - CST - {"America/Mexico_City", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Miquelon - -03/-02 - {"America/Miquelon", "-03", "-02", -3, 0, -2, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Moncton - AST/ADT - {"America/Moncton", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Monterrey - CST - {"America/Monterrey", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Montevideo - -03 - {"America/Montevideo", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Montreal - EST/EDT - {"America/Montreal", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Montserrat - AST - {"America/Montserrat", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Nassau - EST/EDT - {"America/Nassau", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/New_York - EST/EDT - {"America/New_York", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Nipigon - EST/EDT - {"America/Nipigon", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Nome - AKST/AKDT - {"America/Nome", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Noronha - -02 - {"America/Noronha", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/North_Dakota/Beulah - CST/CDT - {"America/North_Dakota/Beulah", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/North_Dakota/Center - CST/CDT - {"America/North_Dakota/Center", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/North_Dakota/New_Salem - CST/CDT - {"America/North_Dakota/New_Salem", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Nuuk - -02/-01 - {"America/Nuuk", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, - // America/Ojinaga - CST/CDT - {"America/Ojinaga", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Panama - EST - {"America/Panama", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Pangnirtung - EST/EDT - {"America/Pangnirtung", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Paramaribo - -03 - {"America/Paramaribo", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Phoenix - MST - {"America/Phoenix", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Port-au-Prince - EST/EDT - {"America/Port-au-Prince", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Port_of_Spain - AST - {"America/Port_of_Spain", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Porto_Velho - -04 - {"America/Porto_Velho", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Puerto_Rico - AST - {"America/Puerto_Rico", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Punta_Arenas - -03 - {"America/Punta_Arenas", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Rainy_River - CST/CDT - {"America/Rainy_River", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Rankin_Inlet - CST/CDT - {"America/Rankin_Inlet", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Recife - -03 - {"America/Recife", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Regina - CST - {"America/Regina", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Resolute - CST/CDT - {"America/Resolute", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Rio_Branco - -05 - {"America/Rio_Branco", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Santarem - -03 - {"America/Santarem", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Santiago - -04/-03 - {"America/Santiago", "-04", "-03", -4, 0, -3, 0, 9, 1, 6, 24, 0, 4, 1, 6, 24, 0, 1, 0}, - // America/Santo_Domingo - AST - {"America/Santo_Domingo", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Sao_Paulo - -03 - {"America/Sao_Paulo", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Scoresbysund - -02/-01 - {"America/Scoresbysund", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, - // America/Sitka - AKST/AKDT - {"America/Sitka", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/St_Barthelemy - AST - {"America/St_Barthelemy", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/St_Johns - NST/NDT - {"America/St_Johns", "NST", "NDT", -3, 30, -2, 30, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/St_Kitts - AST - {"America/St_Kitts", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/St_Lucia - AST - {"America/St_Lucia", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/St_Thomas - AST - {"America/St_Thomas", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/St_Vincent - AST - {"America/St_Vincent", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Swift_Current - CST - {"America/Swift_Current", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Tegucigalpa - CST - {"America/Tegucigalpa", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Thule - AST/ADT - {"America/Thule", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Thunder_Bay - EST/EDT - {"America/Thunder_Bay", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Tijuana - PST/PDT - {"America/Tijuana", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Toronto - EST/EDT - {"America/Toronto", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Tortola - AST - {"America/Tortola", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Vancouver - PST/PDT - {"America/Vancouver", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Whitehorse - MST - {"America/Whitehorse", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // America/Winnipeg - CST/CDT - {"America/Winnipeg", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Yakutat - AKST/AKDT - {"America/Yakutat", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // America/Yellowknife - MST/MDT - {"America/Yellowknife", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // Antarctica/Casey - +08 - {"Antarctica/Casey", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Antarctica/Davis - +07 - {"Antarctica/Davis", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Antarctica/DumontDUrville - +10 - {"Antarctica/DumontDUrville", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Antarctica/Macquarie - AEST/AEDT - {"Antarctica/Macquarie", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Antarctica/Mawson - +05 - {"Antarctica/Mawson", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Antarctica/McMurdo - NZST/NZDT - {"Antarctica/McMurdo", "NZST", "NZDT", 12, 0, 13, 0, 9, 5, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Antarctica/Palmer - -03 - {"Antarctica/Palmer", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Antarctica/Rothera - -03 - {"Antarctica/Rothera", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Antarctica/Syowa - +03 - {"Antarctica/Syowa", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Antarctica/Troll - +00/+02 - {"Antarctica/Troll", "+00", "+02", 0, 0, 2, 0, 3, 5, 0, 1, 0, 10, 5, 0, 3, 0, 1, 0}, - // Antarctica/Vostok - +05 - {"Antarctica/Vostok", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Arctic/Longyearbyen - CET/CEST - {"Arctic/Longyearbyen", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Asia/Aden - +03 - {"Asia/Aden", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Almaty - +05 - {"Asia/Almaty", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Amman - +03 - {"Asia/Amman", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Anadyr - +12 - {"Asia/Anadyr", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Aqtau - +05 - {"Asia/Aqtau", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Aqtobe - +05 - {"Asia/Aqtobe", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Ashgabat - +05 - {"Asia/Ashgabat", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Atyrau - +05 - {"Asia/Atyrau", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Baghdad - +03 - {"Asia/Baghdad", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Bahrain - +03 - {"Asia/Bahrain", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Baku - +04 - {"Asia/Baku", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Bangkok - +07 - {"Asia/Bangkok", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Barnaul - +07 - {"Asia/Barnaul", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Beirut - EET/EEST - {"Asia/Beirut", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 0, 0, 10, 5, 0, 0, 0, 1, 0}, - // Asia/Bishkek - +06 - {"Asia/Bishkek", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Brunei - +08 - {"Asia/Brunei", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Chita - +09 - {"Asia/Chita", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Choibalsan - +08 - {"Asia/Choibalsan", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Colombo - +0530 - {"Asia/Colombo", "+0530", "", 5, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Damascus - +03 - {"Asia/Damascus", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Dhaka - +06 - {"Asia/Dhaka", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Dili - +09 - {"Asia/Dili", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Dubai - +04 - {"Asia/Dubai", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Dushanbe - +05 - {"Asia/Dushanbe", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Famagusta - EET/EEST - {"Asia/Famagusta", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Asia/Gaza - EET/EEST - {"Asia/Gaza", "EET", "EEST", 2, 0, 3, 0, 3, 4, 4, 50, 0, 10, 4, 4, 50, 0, 1, 0}, - // Asia/Hebron - EET/EEST - {"Asia/Hebron", "EET", "EEST", 2, 0, 3, 0, 3, 4, 4, 50, 0, 10, 4, 4, 50, 0, 1, 0}, - // Asia/Ho_Chi_Minh - +07 - {"Asia/Ho_Chi_Minh", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Hong_Kong - HKT - {"Asia/Hong_Kong", "HKT", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Hovd - +07 - {"Asia/Hovd", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Irkutsk - +08 - {"Asia/Irkutsk", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Jakarta - WIB - {"Asia/Jakarta", "WIB", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Jayapura - WIT - {"Asia/Jayapura", "WIT", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Jerusalem - IST/IDT - {"Asia/Jerusalem", "IST", "IDT", 2, 0, 3, 0, 3, 4, 4, 26, 0, 10, 5, 0, 2, 0, 1, 0}, - // Asia/Kabul - +0430 - {"Asia/Kabul", "+0430", "", 4, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Kamchatka - +12 - {"Asia/Kamchatka", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Karachi - PKT - {"Asia/Karachi", "PKT", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Kathmandu - +0545 - {"Asia/Kathmandu", "+0545", "", 5, 45, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Khandyga - +09 - {"Asia/Khandyga", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Kolkata - IST - {"Asia/Kolkata", "IST", "", 5, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Krasnoyarsk - +07 - {"Asia/Krasnoyarsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Kuala_Lumpur - +08 - {"Asia/Kuala_Lumpur", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Kuching - +08 - {"Asia/Kuching", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Kuwait - +03 - {"Asia/Kuwait", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Macau - CST - {"Asia/Macau", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Magadan - +11 - {"Asia/Magadan", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Makassar - WITA - {"Asia/Makassar", "WITA", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Manila - PST - {"Asia/Manila", "PST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Muscat - +04 - {"Asia/Muscat", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Nicosia - EET/EEST - {"Asia/Nicosia", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Asia/Novokuznetsk - +07 - {"Asia/Novokuznetsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Novosibirsk - +07 - {"Asia/Novosibirsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Omsk - +06 - {"Asia/Omsk", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Oral - +05 - {"Asia/Oral", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Phnom_Penh - +07 - {"Asia/Phnom_Penh", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Pontianak - WIB - {"Asia/Pontianak", "WIB", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Pyongyang - KST - {"Asia/Pyongyang", "KST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Qatar - +03 - {"Asia/Qatar", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Qyzylorda - +05 - {"Asia/Qyzylorda", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Riyadh - +03 - {"Asia/Riyadh", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Sakhalin - +11 - {"Asia/Sakhalin", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Samarkand - +05 - {"Asia/Samarkand", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Seoul - KST - {"Asia/Seoul", "KST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Shanghai - CST - {"Asia/Shanghai", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Singapore - +08 - {"Asia/Singapore", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Srednekolymsk - +11 - {"Asia/Srednekolymsk", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Taipei - CST - {"Asia/Taipei", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Tashkent - +05 - {"Asia/Tashkent", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Tbilisi - +04 - {"Asia/Tbilisi", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Tehran - +0330 - {"Asia/Tehran", "+0330", "", 3, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Thimphu - +06 - {"Asia/Thimphu", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Tokyo - JST - {"Asia/Tokyo", "JST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Tomsk - +07 - {"Asia/Tomsk", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Ulaanbaatar - +08 - {"Asia/Ulaanbaatar", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Urumqi - +06 - {"Asia/Urumqi", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Ust-Nera - +10 - {"Asia/Ust-Nera", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Vientiane - +07 - {"Asia/Vientiane", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Vladivostok - +10 - {"Asia/Vladivostok", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Yakutsk - +09 - {"Asia/Yakutsk", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Yangon - +0630 - {"Asia/Yangon", "+0630", "", 6, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Yekaterinburg - +05 - {"Asia/Yekaterinburg", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Asia/Yerevan - +04 - {"Asia/Yerevan", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Atlantic/Azores - -01/+00 - {"Atlantic/Azores", "-01", "+00", -1, 0, 0, 0, 3, 5, 0, 0, 0, 10, 5, 0, 1, 0, 1, 0}, - // Atlantic/Bermuda - AST/ADT - {"Atlantic/Bermuda", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, - // Atlantic/Canary - WET/WEST - {"Atlantic/Canary", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Atlantic/Cape_Verde - -01 - {"Atlantic/Cape_Verde", "-01", "", -1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Atlantic/Faroe - WET/WEST - {"Atlantic/Faroe", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Atlantic/Madeira - WET/WEST - {"Atlantic/Madeira", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Atlantic/Reykjavik - GMT - {"Atlantic/Reykjavik", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Atlantic/South_Georgia - -02 - {"Atlantic/South_Georgia", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Atlantic/Stanley - -03 - {"Atlantic/Stanley", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Atlantic/St_Helena - GMT - {"Atlantic/St_Helena", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Australia/Adelaide - ACST/ACDT - {"Australia/Adelaide", "ACST", "ACDT", 9, 30, 10, 30, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Australia/Brisbane - AEST - {"Australia/Brisbane", "AEST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Australia/Broken_Hill - ACST/ACDT - {"Australia/Broken_Hill", "ACST", "ACDT", 9, 30, 10, 30, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Australia/Currie - AEST/AEDT - {"Australia/Currie", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Australia/Darwin - ACST - {"Australia/Darwin", "ACST", "", 9, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Australia/Eucla - +0845 - {"Australia/Eucla", "+0845", "", 8, 45, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Australia/Hobart - AEST/AEDT - {"Australia/Hobart", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Australia/Lindeman - AEST - {"Australia/Lindeman", "AEST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Australia/Lord_Howe - +1030/+11 - {"Australia/Lord_Howe", "+1030", "+11", 10, 30, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 2, 0, 1, 0}, - // Australia/Melbourne - AEST/AEDT - {"Australia/Melbourne", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Australia/Perth - AWST - {"Australia/Perth", "AWST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Australia/Sydney - AEST/AEDT - {"Australia/Sydney", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Europe/Amsterdam - CET/CEST - {"Europe/Amsterdam", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Andorra - CET/CEST - {"Europe/Andorra", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Astrakhan - +04 - {"Europe/Astrakhan", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Athens - EET/EEST - {"Europe/Athens", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Belgrade - CET/CEST - {"Europe/Belgrade", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Berlin - CET/CEST - {"Europe/Berlin", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Bratislava - CET/CEST - {"Europe/Bratislava", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Brussels - CET/CEST - {"Europe/Brussels", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Bucharest - EET/EEST - {"Europe/Bucharest", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Budapest - CET/CEST - {"Europe/Budapest", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Busingen - CET/CEST - {"Europe/Busingen", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Chisinau - EET/EEST - {"Europe/Chisinau", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Copenhagen - CET/CEST - {"Europe/Copenhagen", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Dublin - IST/GMT - {"Europe/Dublin", "IST", "GMT", 1, 0, 0, 0, 10, 5, 0, 2, 0, 3, 5, 0, 1, 0, 1, 0}, - // Europe/Gibraltar - CET/CEST - {"Europe/Gibraltar", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Guernsey - GMT/BST - {"Europe/Guernsey", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Europe/Helsinki - EET/EEST - {"Europe/Helsinki", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Isle_of_Man - GMT/BST - {"Europe/Isle_of_Man", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Europe/Istanbul - +03 - {"Europe/Istanbul", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Jersey - GMT/BST - {"Europe/Jersey", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Europe/Kaliningrad - EET - {"Europe/Kaliningrad", "EET", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Kiev - EET/EEST - {"Europe/Kiev", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Kirov - MSK - {"Europe/Kirov", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Lisbon - WET/WEST - {"Europe/Lisbon", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Europe/Ljubljana - CET/CEST - {"Europe/Ljubljana", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/London - GMT/BST - {"Europe/London", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, - // Europe/Luxembourg - CET/CEST - {"Europe/Luxembourg", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Madrid - CET/CEST - {"Europe/Madrid", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Malta - CET/CEST - {"Europe/Malta", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Mariehamn - EET/EEST - {"Europe/Mariehamn", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Minsk - +03 - {"Europe/Minsk", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Monaco - CET/CEST - {"Europe/Monaco", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Moscow - MSK - {"Europe/Moscow", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Oslo - CET/CEST - {"Europe/Oslo", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Paris - CET/CEST - {"Europe/Paris", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Podgorica - CET/CEST - {"Europe/Podgorica", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Prague - CET/CEST - {"Europe/Prague", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Riga - EET/EEST - {"Europe/Riga", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Rome - CET/CEST - {"Europe/Rome", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Samara - +04 - {"Europe/Samara", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/San_Marino - CET/CEST - {"Europe/San_Marino", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Sarajevo - CET/CEST - {"Europe/Sarajevo", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Saratov - +04 - {"Europe/Saratov", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Simferopol - MSK - {"Europe/Simferopol", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Skopje - CET/CEST - {"Europe/Skopje", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Sofia - EET/EEST - {"Europe/Sofia", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Stockholm - CET/CEST - {"Europe/Stockholm", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Tallinn - EET/EEST - {"Europe/Tallinn", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Tirane - CET/CEST - {"Europe/Tirane", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Ulyanovsk - +04 - {"Europe/Ulyanovsk", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Uzhgorod - EET/EEST - {"Europe/Uzhgorod", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Vaduz - CET/CEST - {"Europe/Vaduz", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Vatican - CET/CEST - {"Europe/Vatican", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Vienna - CET/CEST - {"Europe/Vienna", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Vilnius - EET/EEST - {"Europe/Vilnius", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Volgograd - MSK - {"Europe/Volgograd", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Europe/Warsaw - CET/CEST - {"Europe/Warsaw", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Zagreb - CET/CEST - {"Europe/Zagreb", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Europe/Zaporozhye - EET/EEST - {"Europe/Zaporozhye", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, - // Europe/Zurich - CET/CEST - {"Europe/Zurich", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, - // Indian/Antananarivo - EAT - {"Indian/Antananarivo", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Chagos - +06 - {"Indian/Chagos", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Christmas - +07 - {"Indian/Christmas", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Cocos - +0630 - {"Indian/Cocos", "+0630", "", 6, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Comoro - EAT - {"Indian/Comoro", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Kerguelen - +05 - {"Indian/Kerguelen", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Mahe - +04 - {"Indian/Mahe", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Maldives - +05 - {"Indian/Maldives", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Mauritius - +04 - {"Indian/Mauritius", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Mayotte - EAT - {"Indian/Mayotte", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Indian/Reunion - +04 - {"Indian/Reunion", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Apia - +13 - {"Pacific/Apia", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Auckland - NZST/NZDT - {"Pacific/Auckland", "NZST", "NZDT", 12, 0, 13, 0, 9, 5, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Pacific/Bougainville - +11 - {"Pacific/Bougainville", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Chatham - +1245/+1345 - {"Pacific/Chatham", "+1245", "+1345", 12, 45, 13, 45, 9, 5, 0, 2, 45, 4, 1, 0, 3, 45, 1, 0}, - // Pacific/Chuuk - +10 - {"Pacific/Chuuk", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Easter - -06/-05 - {"Pacific/Easter", "-06", "-05", -6, 0, -5, 0, 9, 1, 6, 22, 0, 4, 1, 6, 22, 0, 1, 0}, - // Pacific/Efate - +11 - {"Pacific/Efate", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Enderbury - +13 - {"Pacific/Enderbury", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Fakaofo - +13 - {"Pacific/Fakaofo", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Fiji - +12 - {"Pacific/Fiji", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Funafuti - +12 - {"Pacific/Funafuti", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Galapagos - -06 - {"Pacific/Galapagos", "-06", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Gambier - -09 - {"Pacific/Gambier", "-09", "", -9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Guadalcanal - +11 - {"Pacific/Guadalcanal", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Guam - ChST - {"Pacific/Guam", "ChST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Honolulu - HST - {"Pacific/Honolulu", "HST", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Kiritimati - +14 - {"Pacific/Kiritimati", "+14", "", 14, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Kosrae - +11 - {"Pacific/Kosrae", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Kwajalein - +12 - {"Pacific/Kwajalein", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Majuro - +12 - {"Pacific/Majuro", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Marquesas - -0930 - {"Pacific/Marquesas", "-0930", "", -9, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Midway - SST - {"Pacific/Midway", "SST", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Nauru - +12 - {"Pacific/Nauru", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Niue - -11 - {"Pacific/Niue", "-11", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Norfolk - +11/+12 - {"Pacific/Norfolk", "+11", "+12", 11, 0, 12, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, - // Pacific/Noumea - +11 - {"Pacific/Noumea", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Pago_Pago - SST - {"Pacific/Pago_Pago", "SST", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Palau - +09 - {"Pacific/Palau", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Pitcairn - -08 - {"Pacific/Pitcairn", "-08", "", -8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Pohnpei - +11 - {"Pacific/Pohnpei", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Port_Moresby - +10 - {"Pacific/Port_Moresby", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Rarotonga - -10 - {"Pacific/Rarotonga", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Saipan - ChST - {"Pacific/Saipan", "ChST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Tahiti - -10 - {"Pacific/Tahiti", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Tarawa - +12 - {"Pacific/Tarawa", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Tongatapu - +13 - {"Pacific/Tongatapu", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Wake - +12 - {"Pacific/Wake", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Pacific/Wallis - +12 - {"Pacific/Wallis", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT - GMT - {"Etc/GMT", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-0 - GMT - {"Etc/GMT-0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-1 - +01 - {"Etc/GMT-1", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-2 - +02 - {"Etc/GMT-2", "+02", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-3 - +03 - {"Etc/GMT-3", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-4 - +04 - {"Etc/GMT-4", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-5 - +05 - {"Etc/GMT-5", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-6 - +06 - {"Etc/GMT-6", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-7 - +07 - {"Etc/GMT-7", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-8 - +08 - {"Etc/GMT-8", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-9 - +09 - {"Etc/GMT-9", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-10 - +10 - {"Etc/GMT-10", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-11 - +11 - {"Etc/GMT-11", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-12 - +12 - {"Etc/GMT-12", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-13 - +13 - {"Etc/GMT-13", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT-14 - +14 - {"Etc/GMT-14", "+14", "", 14, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT0 - GMT - {"Etc/GMT0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+0 - GMT - {"Etc/GMT+0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+1 - -01 - {"Etc/GMT+1", "-01", "", -1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+2 - -02 - {"Etc/GMT+2", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+3 - -03 - {"Etc/GMT+3", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+4 - -04 - {"Etc/GMT+4", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+5 - -05 - {"Etc/GMT+5", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+6 - -06 - {"Etc/GMT+6", "-06", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+7 - -07 - {"Etc/GMT+7", "-07", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+8 - -08 - {"Etc/GMT+8", "-08", "", -8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+9 - -09 - {"Etc/GMT+9", "-09", "", -9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+10 - -10 - {"Etc/GMT+10", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+11 - -11 - {"Etc/GMT+11", "-11", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/GMT+12 - -12 - {"Etc/GMT+12", "-12", "", -12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/UCT - UTC - {"Etc/UCT", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/UTC - UTC - {"Etc/UTC", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/Greenwich - GMT - {"Etc/Greenwich", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/Universal - UTC - {"Etc/Universal", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, - // Etc/Zulu - UTC - {"Etc/Zulu", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}}; + // AFRICA/ABIDJAN - GMT + {"AFRICA/ABIDJAN", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/ACCRA - GMT + {"AFRICA/ACCRA", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/ADDIS_ABABA - EAT + {"AFRICA/ADDIS_ABABA", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/ALGIERS - CET + {"AFRICA/ALGIERS", "CET", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/ASMARA - EAT + {"AFRICA/ASMARA", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/BAMAKO - GMT + {"AFRICA/BAMAKO", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/BANGUI - WAT + {"AFRICA/BANGUI", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/BANJUL - GMT + {"AFRICA/BANJUL", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/BISSAU - GMT + {"AFRICA/BISSAU", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/BLANTYRE - CAT + {"AFRICA/BLANTYRE", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/BRAZZAVILLE - WAT + {"AFRICA/BRAZZAVILLE", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/BUJUMBURA - CAT + {"AFRICA/BUJUMBURA", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/CAIRO - EET/EEST + {"AFRICA/CAIRO", "EET", "EEST", 2, 0, 3, 0, 4, 5, 5, 0, 0, 10, 5, 4, 24, 0, 1, 0}, + // AFRICA/CASABLANCA - +01 + {"AFRICA/CASABLANCA", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/CEUTA - CET/CEST + {"AFRICA/CEUTA", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // AFRICA/CONAKRY - GMT + {"AFRICA/CONAKRY", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/DAKAR - GMT + {"AFRICA/DAKAR", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/DAR_ES_SALAAM - EAT + {"AFRICA/DAR_ES_SALAAM", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/DJIBOUTI - EAT + {"AFRICA/DJIBOUTI", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/DOUALA - WAT + {"AFRICA/DOUALA", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/EL_AAIUN - +01 + {"AFRICA/EL_AAIUN", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/FREETOWN - GMT + {"AFRICA/FREETOWN", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/GABORONE - CAT + {"AFRICA/GABORONE", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/HARARE - CAT + {"AFRICA/HARARE", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/JOHANNESBURG - SAST + {"AFRICA/JOHANNESBURG", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/JUBA - CAT + {"AFRICA/JUBA", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/KAMPALA - EAT + {"AFRICA/KAMPALA", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/KHARTOUM - CAT + {"AFRICA/KHARTOUM", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/KIGALI - CAT + {"AFRICA/KIGALI", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/KINSHASA - WAT + {"AFRICA/KINSHASA", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/LAGOS - WAT + {"AFRICA/LAGOS", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/LIBREVILLE - WAT + {"AFRICA/LIBREVILLE", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/LOME - GMT + {"AFRICA/LOME", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/LUANDA - WAT + {"AFRICA/LUANDA", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/LUBUMBASHI - CAT + {"AFRICA/LUBUMBASHI", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/LUSAKA - CAT + {"AFRICA/LUSAKA", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/MALABO - WAT + {"AFRICA/MALABO", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/MAPUTO - CAT + {"AFRICA/MAPUTO", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/MASERU - SAST + {"AFRICA/MASERU", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/MBABANE - SAST + {"AFRICA/MBABANE", "SAST", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/MOGADISHU - EAT + {"AFRICA/MOGADISHU", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/MONROVIA - GMT + {"AFRICA/MONROVIA", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/NAIROBI - EAT + {"AFRICA/NAIROBI", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/NDJAMENA - WAT + {"AFRICA/NDJAMENA", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/NIAMEY - WAT + {"AFRICA/NIAMEY", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/NOUAKCHOTT - GMT + {"AFRICA/NOUAKCHOTT", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/OUAGADOUGOU - GMT + {"AFRICA/OUAGADOUGOU", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/PORTO-NOVO - WAT + {"AFRICA/PORTO-NOVO", "WAT", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/SAO_TOME - GMT + {"AFRICA/SAO_TOME", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/TRIPOLI - EET + {"AFRICA/TRIPOLI", "EET", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/TUNIS - CET + {"AFRICA/TUNIS", "CET", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AFRICA/WINDHOEK - CAT + {"AFRICA/WINDHOEK", "CAT", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ADAK - HST/HDT + {"AMERICA/ADAK", "HST", "HDT", -10, 0, -9, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/ANCHORAGE - AKST/AKDT + {"AMERICA/ANCHORAGE", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/ANGUILLA - AST + {"AMERICA/ANGUILLA", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ANTIGUA - AST + {"AMERICA/ANTIGUA", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARAGUAINA - -03 + {"AMERICA/ARAGUAINA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/BUENOS_AIRES - -03 + {"AMERICA/ARGENTINA/BUENOS_AIRES", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/CATAMARCA - -03 + {"AMERICA/ARGENTINA/CATAMARCA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/CORDOBA - -03 + {"AMERICA/ARGENTINA/CORDOBA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/JUJUY - -03 + {"AMERICA/ARGENTINA/JUJUY", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/LA_RIOJA - -03 + {"AMERICA/ARGENTINA/LA_RIOJA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/MENDOZA - -03 + {"AMERICA/ARGENTINA/MENDOZA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/RIO_GALLEGOS - -03 + {"AMERICA/ARGENTINA/RIO_GALLEGOS", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/SALTA - -03 + {"AMERICA/ARGENTINA/SALTA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/SAN_JUAN - -03 + {"AMERICA/ARGENTINA/SAN_JUAN", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/SAN_LUIS - -03 + {"AMERICA/ARGENTINA/SAN_LUIS", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/TUCUMAN - -03 + {"AMERICA/ARGENTINA/TUCUMAN", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARGENTINA/USHUAIA - -03 + {"AMERICA/ARGENTINA/USHUAIA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ARUBA - AST + {"AMERICA/ARUBA", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ASUNCION - -03 + {"AMERICA/ASUNCION", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ATIKOKAN - EST + {"AMERICA/ATIKOKAN", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BAHIA - -03 + {"AMERICA/BAHIA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BAHIA_BANDERAS - CST + {"AMERICA/BAHIA_BANDERAS", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BARBADOS - AST + {"AMERICA/BARBADOS", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BELEM - -03 + {"AMERICA/BELEM", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BELIZE - CST + {"AMERICA/BELIZE", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BLANC-SABLON - AST + {"AMERICA/BLANC-SABLON", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BOA_VISTA - -04 + {"AMERICA/BOA_VISTA", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BOGOTA - -05 + {"AMERICA/BOGOTA", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/BOISE - MST/MDT + {"AMERICA/BOISE", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/CAMBRIDGE_BAY - MST/MDT + {"AMERICA/CAMBRIDGE_BAY", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/CAMPO_GRANDE - -04 + {"AMERICA/CAMPO_GRANDE", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CANCUN - EST + {"AMERICA/CANCUN", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CARACAS - -04 + {"AMERICA/CARACAS", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CAYENNE - -03 + {"AMERICA/CAYENNE", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CAYMAN - EST + {"AMERICA/CAYMAN", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CHICAGO - CST/CDT + {"AMERICA/CHICAGO", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/CHIHUAHUA - CST + {"AMERICA/CHIHUAHUA", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/COSTA_RICA - CST + {"AMERICA/COSTA_RICA", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CRESTON - MST + {"AMERICA/CRESTON", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CUIABA - -04 + {"AMERICA/CUIABA", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/CURACAO - AST + {"AMERICA/CURACAO", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/DANMARKSHAVN - GMT + {"AMERICA/DANMARKSHAVN", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/DAWSON - MST + {"AMERICA/DAWSON", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/DAWSON_CREEK - MST + {"AMERICA/DAWSON_CREEK", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/DENVER - MST/MDT + {"AMERICA/DENVER", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/DETROIT - EST/EDT + {"AMERICA/DETROIT", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/DOMINICA - AST + {"AMERICA/DOMINICA", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/EDMONTON - MST/MDT + {"AMERICA/EDMONTON", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/EIRUNEPE - -05 + {"AMERICA/EIRUNEPE", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/EL_SALVADOR - CST + {"AMERICA/EL_SALVADOR", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/FORTALEZA - -03 + {"AMERICA/FORTALEZA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/FORT_NELSON - MST + {"AMERICA/FORT_NELSON", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/GLACE_BAY - AST/ADT + {"AMERICA/GLACE_BAY", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/GODTHAB - -02/-01 + {"AMERICA/GODTHAB", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, + // AMERICA/GOOSE_BAY - AST/ADT + {"AMERICA/GOOSE_BAY", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/GRAND_TURK - EST/EDT + {"AMERICA/GRAND_TURK", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/GRENADA - AST + {"AMERICA/GRENADA", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/GUADELOUPE - AST + {"AMERICA/GUADELOUPE", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/GUATEMALA - CST + {"AMERICA/GUATEMALA", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/GUAYAQUIL - -05 + {"AMERICA/GUAYAQUIL", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/GUYANA - -04 + {"AMERICA/GUYANA", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/HALIFAX - AST/ADT + {"AMERICA/HALIFAX", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/HAVANA - CST/CDT + {"AMERICA/HAVANA", "CST", "CDT", -5, 0, -4, 0, 3, 2, 0, 0, 0, 11, 1, 0, 1, 0, 1, 0}, + // AMERICA/HERMOSILLO - MST + {"AMERICA/HERMOSILLO", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/INDIANA/INDIANAPOLIS - EST/EDT + {"AMERICA/INDIANA/INDIANAPOLIS", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INDIANA/KNOX - CST/CDT + {"AMERICA/INDIANA/KNOX", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INDIANA/MARENGO - EST/EDT + {"AMERICA/INDIANA/MARENGO", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INDIANA/PETERSBURG - EST/EDT + {"AMERICA/INDIANA/PETERSBURG", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INDIANA/TELL_CITY - CST/CDT + {"AMERICA/INDIANA/TELL_CITY", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INDIANA/VEVAY - EST/EDT + {"AMERICA/INDIANA/VEVAY", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INDIANA/VINCENNES - EST/EDT + {"AMERICA/INDIANA/VINCENNES", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INDIANA/WINAMAC - EST/EDT + {"AMERICA/INDIANA/WINAMAC", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/INUVIK - MST/MDT + {"AMERICA/INUVIK", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/IQALUIT - EST/EDT + {"AMERICA/IQALUIT", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/JAMAICA - EST + {"AMERICA/JAMAICA", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/JUNEAU - AKST/AKDT + {"AMERICA/JUNEAU", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/KENTUCKY/LOUISVILLE - EST/EDT + {"AMERICA/KENTUCKY/LOUISVILLE", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/KENTUCKY/MONTICELLO - EST/EDT + {"AMERICA/KENTUCKY/MONTICELLO", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/KRALENDIJK - AST + {"AMERICA/KRALENDIJK", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/LA_PAZ - -04 + {"AMERICA/LA_PAZ", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/LIMA - -05 + {"AMERICA/LIMA", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/LOS_ANGELES - PST/PDT + {"AMERICA/LOS_ANGELES", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/LOWER_PRINCES - AST + {"AMERICA/LOWER_PRINCES", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MACEIO - -03 + {"AMERICA/MACEIO", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MANAGUA - CST + {"AMERICA/MANAGUA", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MANAUS - -04 + {"AMERICA/MANAUS", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MARIGOT - AST + {"AMERICA/MARIGOT", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MARTINIQUE - AST + {"AMERICA/MARTINIQUE", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MATAMOROS - CST/CDT + {"AMERICA/MATAMOROS", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/MAZATLAN - MST + {"AMERICA/MAZATLAN", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MENOMINEE - CST/CDT + {"AMERICA/MENOMINEE", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/MERIDA - CST + {"AMERICA/MERIDA", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/METLAKATLA - AKST/AKDT + {"AMERICA/METLAKATLA", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/MEXICO_CITY - CST + {"AMERICA/MEXICO_CITY", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MIQUELON - -03/-02 + {"AMERICA/MIQUELON", "-03", "-02", -3, 0, -2, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/MONCTON - AST/ADT + {"AMERICA/MONCTON", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/MONTERREY - CST + {"AMERICA/MONTERREY", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MONTEVIDEO - -03 + {"AMERICA/MONTEVIDEO", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/MONTREAL - EST/EDT + {"AMERICA/MONTREAL", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/MONTSERRAT - AST + {"AMERICA/MONTSERRAT", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/NASSAU - EST/EDT + {"AMERICA/NASSAU", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/NEW_YORK - EST/EDT + {"AMERICA/NEW_YORK", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/NIPIGON - EST/EDT + {"AMERICA/NIPIGON", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/NOME - AKST/AKDT + {"AMERICA/NOME", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/NORONHA - -02 + {"AMERICA/NORONHA", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/NORTH_DAKOTA/BEULAH - CST/CDT + {"AMERICA/NORTH_DAKOTA/BEULAH", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/NORTH_DAKOTA/CENTER - CST/CDT + {"AMERICA/NORTH_DAKOTA/CENTER", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/NORTH_DAKOTA/NEW_SALEM - CST/CDT + {"AMERICA/NORTH_DAKOTA/NEW_SALEM", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/NUUK - -02/-01 + {"AMERICA/NUUK", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, + // AMERICA/OJINAGA - CST/CDT + {"AMERICA/OJINAGA", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/PANAMA - EST + {"AMERICA/PANAMA", "EST", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/PANGNIRTUNG - EST/EDT + {"AMERICA/PANGNIRTUNG", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/PARAMARIBO - -03 + {"AMERICA/PARAMARIBO", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/PHOENIX - MST + {"AMERICA/PHOENIX", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/PORT-AU-PRINCE - EST/EDT + {"AMERICA/PORT-AU-PRINCE", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/PORT_OF_SPAIN - AST + {"AMERICA/PORT_OF_SPAIN", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/PORTO_VELHO - -04 + {"AMERICA/PORTO_VELHO", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/PUERTO_RICO - AST + {"AMERICA/PUERTO_RICO", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/PUNTA_ARENAS - -03 + {"AMERICA/PUNTA_ARENAS", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/RAINY_RIVER - CST/CDT + {"AMERICA/RAINY_RIVER", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/RANKIN_INLET - CST/CDT + {"AMERICA/RANKIN_INLET", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/RECIFE - -03 + {"AMERICA/RECIFE", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/REGINA - CST + {"AMERICA/REGINA", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/RESOLUTE - CST/CDT + {"AMERICA/RESOLUTE", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/RIO_BRANCO - -05 + {"AMERICA/RIO_BRANCO", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/SANTAREM - -03 + {"AMERICA/SANTAREM", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/SANTIAGO - -04/-03 + {"AMERICA/SANTIAGO", "-04", "-03", -4, 0, -3, 0, 9, 1, 6, 24, 0, 4, 1, 6, 24, 0, 1, 0}, + // AMERICA/SANTO_DOMINGO - AST + {"AMERICA/SANTO_DOMINGO", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/SAO_PAULO - -03 + {"AMERICA/SAO_PAULO", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/SCORESBYSUND - -02/-01 + {"AMERICA/SCORESBYSUND", "-02", "-01", -2, 0, -1, 0, 3, 5, 0, -1, 0, 10, 5, 0, 0, 0, 1, 0}, + // AMERICA/SITKA - AKST/AKDT + {"AMERICA/SITKA", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/ST_BARTHELEMY - AST + {"AMERICA/ST_BARTHELEMY", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ST_JOHNS - NST/NDT + {"AMERICA/ST_JOHNS", "NST", "NDT", -3, 30, -2, 30, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/ST_KITTS - AST + {"AMERICA/ST_KITTS", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ST_LUCIA - AST + {"AMERICA/ST_LUCIA", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ST_THOMAS - AST + {"AMERICA/ST_THOMAS", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/ST_VINCENT - AST + {"AMERICA/ST_VINCENT", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/SWIFT_CURRENT - CST + {"AMERICA/SWIFT_CURRENT", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/TEGUCIGALPA - CST + {"AMERICA/TEGUCIGALPA", "CST", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/THULE - AST/ADT + {"AMERICA/THULE", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/THUNDER_BAY - EST/EDT + {"AMERICA/THUNDER_BAY", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/TIJUANA - PST/PDT + {"AMERICA/TIJUANA", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/TORONTO - EST/EDT + {"AMERICA/TORONTO", "EST", "EDT", -5, 0, -4, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/TORTOLA - AST + {"AMERICA/TORTOLA", "AST", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/VANCOUVER - PST/PDT + {"AMERICA/VANCOUVER", "PST", "PDT", -8, 0, -7, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/WHITEHORSE - MST + {"AMERICA/WHITEHORSE", "MST", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AMERICA/WINNIPEG - CST/CDT + {"AMERICA/WINNIPEG", "CST", "CDT", -6, 0, -5, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/YAKUTAT - AKST/AKDT + {"AMERICA/YAKUTAT", "AKST", "AKDT", -9, 0, -8, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // AMERICA/YELLOWKNIFE - MST/MDT + {"AMERICA/YELLOWKNIFE", "MST", "MDT", -7, 0, -6, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // ANTARCTICA/CASEY - +08 + {"ANTARCTICA/CASEY", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ANTARCTICA/DAVIS - +07 + {"ANTARCTICA/DAVIS", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ANTARCTICA/DUMONTDURVILLE - +10 + {"ANTARCTICA/DUMONTDURVILLE", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ANTARCTICA/MACQUARIE - AEST/AEDT + {"ANTARCTICA/MACQUARIE", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // ANTARCTICA/MAWSON - +05 + {"ANTARCTICA/MAWSON", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ANTARCTICA/MCMURDO - NZST/NZDT + {"ANTARCTICA/MCMURDO", "NZST", "NZDT", 12, 0, 13, 0, 9, 5, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // ANTARCTICA/PALMER - -03 + {"ANTARCTICA/PALMER", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ANTARCTICA/ROTHERA - -03 + {"ANTARCTICA/ROTHERA", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ANTARCTICA/SYOWA - +03 + {"ANTARCTICA/SYOWA", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ANTARCTICA/TROLL - +00/+02 + {"ANTARCTICA/TROLL", "+00", "+02", 0, 0, 2, 0, 3, 5, 0, 1, 0, 10, 5, 0, 3, 0, 1, 0}, + // ANTARCTICA/VOSTOK - +05 + {"ANTARCTICA/VOSTOK", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ARCTIC/LONGYEARBYEN - CET/CEST + {"ARCTIC/LONGYEARBYEN", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // ASIA/ADEN - +03 + {"ASIA/ADEN", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/ALMATY - +05 + {"ASIA/ALMATY", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/AMMAN - +03 + {"ASIA/AMMAN", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/ANADYR - +12 + {"ASIA/ANADYR", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/AQTAU - +05 + {"ASIA/AQTAU", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/AQTOBE - +05 + {"ASIA/AQTOBE", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/ASHGABAT - +05 + {"ASIA/ASHGABAT", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/ATYRAU - +05 + {"ASIA/ATYRAU", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/BAGHDAD - +03 + {"ASIA/BAGHDAD", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/BAHRAIN - +03 + {"ASIA/BAHRAIN", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/BAKU - +04 + {"ASIA/BAKU", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/BANGKOK - +07 + {"ASIA/BANGKOK", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/BARNAUL - +07 + {"ASIA/BARNAUL", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/BEIRUT - EET/EEST + {"ASIA/BEIRUT", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 0, 0, 10, 5, 0, 0, 0, 1, 0}, + // ASIA/BISHKEK - +06 + {"ASIA/BISHKEK", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/BRUNEI - +08 + {"ASIA/BRUNEI", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/CHITA - +09 + {"ASIA/CHITA", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/CHOIBALSAN - +08 + {"ASIA/CHOIBALSAN", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/COLOMBO - +0530 + {"ASIA/COLOMBO", "+0530", "", 5, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/DAMASCUS - +03 + {"ASIA/DAMASCUS", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/DHAKA - +06 + {"ASIA/DHAKA", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/DILI - +09 + {"ASIA/DILI", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/DUBAI - +04 + {"ASIA/DUBAI", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/DUSHANBE - +05 + {"ASIA/DUSHANBE", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/FAMAGUSTA - EET/EEST + {"ASIA/FAMAGUSTA", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // ASIA/GAZA - EET/EEST + {"ASIA/GAZA", "EET", "EEST", 2, 0, 3, 0, 3, 4, 4, 50, 0, 10, 4, 4, 50, 0, 1, 0}, + // ASIA/HEBRON - EET/EEST + {"ASIA/HEBRON", "EET", "EEST", 2, 0, 3, 0, 3, 4, 4, 50, 0, 10, 4, 4, 50, 0, 1, 0}, + // ASIA/HO_CHI_MINH - +07 + {"ASIA/HO_CHI_MINH", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/HONG_KONG - HKT + {"ASIA/HONG_KONG", "HKT", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/HOVD - +07 + {"ASIA/HOVD", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/IRKUTSK - +08 + {"ASIA/IRKUTSK", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/JAKARTA - WIB + {"ASIA/JAKARTA", "WIB", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/JAYAPURA - WIT + {"ASIA/JAYAPURA", "WIT", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/JERUSALEM - IST/IDT + {"ASIA/JERUSALEM", "IST", "IDT", 2, 0, 3, 0, 3, 4, 4, 26, 0, 10, 5, 0, 2, 0, 1, 0}, + // ASIA/KABUL - +0430 + {"ASIA/KABUL", "+0430", "", 4, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KAMCHATKA - +12 + {"ASIA/KAMCHATKA", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KARACHI - PKT + {"ASIA/KARACHI", "PKT", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KATHMANDU - +0545 + {"ASIA/KATHMANDU", "+0545", "", 5, 45, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KHANDYGA - +09 + {"ASIA/KHANDYGA", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KOLKATA - IST + {"ASIA/KOLKATA", "IST", "", 5, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KRASNOYARSK - +07 + {"ASIA/KRASNOYARSK", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KUALA_LUMPUR - +08 + {"ASIA/KUALA_LUMPUR", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KUCHING - +08 + {"ASIA/KUCHING", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/KUWAIT - +03 + {"ASIA/KUWAIT", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/MACAU - CST + {"ASIA/MACAU", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/MAGADAN - +11 + {"ASIA/MAGADAN", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/MAKASSAR - WITA + {"ASIA/MAKASSAR", "WITA", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/MANILA - PST + {"ASIA/MANILA", "PST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/MUSCAT - +04 + {"ASIA/MUSCAT", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/NICOSIA - EET/EEST + {"ASIA/NICOSIA", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // ASIA/NOVOKUZNETSK - +07 + {"ASIA/NOVOKUZNETSK", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/NOVOSIBIRSK - +07 + {"ASIA/NOVOSIBIRSK", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/OMSK - +06 + {"ASIA/OMSK", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/ORAL - +05 + {"ASIA/ORAL", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/PHNOM_PENH - +07 + {"ASIA/PHNOM_PENH", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/PONTIANAK - WIB + {"ASIA/PONTIANAK", "WIB", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/PYONGYANG - KST + {"ASIA/PYONGYANG", "KST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/QATAR - +03 + {"ASIA/QATAR", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/QYZYLORDA - +05 + {"ASIA/QYZYLORDA", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/RIYADH - +03 + {"ASIA/RIYADH", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/SAKHALIN - +11 + {"ASIA/SAKHALIN", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/SAMARKAND - +05 + {"ASIA/SAMARKAND", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/SEOUL - KST + {"ASIA/SEOUL", "KST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/SHANGHAI - CST + {"ASIA/SHANGHAI", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/SINGAPORE - +08 + {"ASIA/SINGAPORE", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/SREDNEKOLYMSK - +11 + {"ASIA/SREDNEKOLYMSK", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/TAIPEI - CST + {"ASIA/TAIPEI", "CST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/TASHKENT - +05 + {"ASIA/TASHKENT", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/TBILISI - +04 + {"ASIA/TBILISI", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/TEHRAN - +0330 + {"ASIA/TEHRAN", "+0330", "", 3, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/THIMPHU - +06 + {"ASIA/THIMPHU", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/TOKYO - JST + {"ASIA/TOKYO", "JST", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/TOMSK - +07 + {"ASIA/TOMSK", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/ULAANBAATAR - +08 + {"ASIA/ULAANBAATAR", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/URUMQI - +06 + {"ASIA/URUMQI", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/UST-NERA - +10 + {"ASIA/UST-NERA", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/VIENTIANE - +07 + {"ASIA/VIENTIANE", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/VLADIVOSTOK - +10 + {"ASIA/VLADIVOSTOK", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/YAKUTSK - +09 + {"ASIA/YAKUTSK", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/YANGON - +0630 + {"ASIA/YANGON", "+0630", "", 6, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/YEKATERINBURG - +05 + {"ASIA/YEKATERINBURG", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ASIA/YEREVAN - +04 + {"ASIA/YEREVAN", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ATLANTIC/AZORES - -01/+00 + {"ATLANTIC/AZORES", "-01", "+00", -1, 0, 0, 0, 3, 5, 0, 0, 0, 10, 5, 0, 1, 0, 1, 0}, + // ATLANTIC/BERMUDA - AST/ADT + {"ATLANTIC/BERMUDA", "AST", "ADT", -4, 0, -3, 0, 3, 2, 0, 2, 0, 11, 1, 0, 2, 0, 1, 0}, + // ATLANTIC/CANARY - WET/WEST + {"ATLANTIC/CANARY", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // ATLANTIC/CAPE_VERDE - -01 + {"ATLANTIC/CAPE_VERDE", "-01", "", -1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ATLANTIC/FAROE - WET/WEST + {"ATLANTIC/FAROE", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // ATLANTIC/MADEIRA - WET/WEST + {"ATLANTIC/MADEIRA", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // ATLANTIC/REYKJAVIK - GMT + {"ATLANTIC/REYKJAVIK", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ATLANTIC/SOUTH_GEORGIA - -02 + {"ATLANTIC/SOUTH_GEORGIA", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ATLANTIC/STANLEY - -03 + {"ATLANTIC/STANLEY", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ATLANTIC/ST_HELENA - GMT + {"ATLANTIC/ST_HELENA", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AUSTRALIA/ADELAIDE - ACST/ACDT + {"AUSTRALIA/ADELAIDE", "ACST", "ACDT", 9, 30, 10, 30, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // AUSTRALIA/BRISBANE - AEST + {"AUSTRALIA/BRISBANE", "AEST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AUSTRALIA/BROKEN_HILL - ACST/ACDT + {"AUSTRALIA/BROKEN_HILL", "ACST", "ACDT", 9, 30, 10, 30, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // AUSTRALIA/CURRIE - AEST/AEDT + {"AUSTRALIA/CURRIE", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // AUSTRALIA/DARWIN - ACST + {"AUSTRALIA/DARWIN", "ACST", "", 9, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AUSTRALIA/EUCLA - +0845 + {"AUSTRALIA/EUCLA", "+0845", "", 8, 45, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AUSTRALIA/HOBART - AEST/AEDT + {"AUSTRALIA/HOBART", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // AUSTRALIA/LINDEMAN - AEST + {"AUSTRALIA/LINDEMAN", "AEST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AUSTRALIA/LORD_HOWE - +1030/+11 + {"AUSTRALIA/LORD_HOWE", "+1030", "+11", 10, 30, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 2, 0, 1, 0}, + // AUSTRALIA/MELBOURNE - AEST/AEDT + {"AUSTRALIA/MELBOURNE", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // AUSTRALIA/PERTH - AWST + {"AUSTRALIA/PERTH", "AWST", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // AUSTRALIA/SYDNEY - AEST/AEDT + {"AUSTRALIA/SYDNEY", "AEST", "AEDT", 10, 0, 11, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // EUROPE/AMSTERDAM - CET/CEST + {"EUROPE/AMSTERDAM", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/ANDORRA - CET/CEST + {"EUROPE/ANDORRA", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/ASTRAKHAN - +04 + {"EUROPE/ASTRAKHAN", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/ATHENS - EET/EEST + {"EUROPE/ATHENS", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/BELGRADE - CET/CEST + {"EUROPE/BELGRADE", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/BERLIN - CET/CEST + {"EUROPE/BERLIN", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/BRATISLAVA - CET/CEST + {"EUROPE/BRATISLAVA", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/BRUSSELS - CET/CEST + {"EUROPE/BRUSSELS", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/BUCHAREST - EET/EEST + {"EUROPE/BUCHAREST", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/BUDAPEST - CET/CEST + {"EUROPE/BUDAPEST", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/BUSINGEN - CET/CEST + {"EUROPE/BUSINGEN", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/CHISINAU - EET/EEST + {"EUROPE/CHISINAU", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/COPENHAGEN - CET/CEST + {"EUROPE/COPENHAGEN", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/DUBLIN - IST/GMT + {"EUROPE/DUBLIN", "IST", "GMT", 1, 0, 0, 0, 10, 5, 0, 2, 0, 3, 5, 0, 1, 0, 1, 0}, + // EUROPE/GIBRALTAR - CET/CEST + {"EUROPE/GIBRALTAR", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/GUERNSEY - GMT/BST + {"EUROPE/GUERNSEY", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // EUROPE/HELSINKI - EET/EEST + {"EUROPE/HELSINKI", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/ISLE_OF_MAN - GMT/BST + {"EUROPE/ISLE_OF_MAN", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // EUROPE/ISTANBUL - +03 + {"EUROPE/ISTANBUL", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/JERSEY - GMT/BST + {"EUROPE/JERSEY", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // EUROPE/KALININGRAD - EET + {"EUROPE/KALININGRAD", "EET", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/KIEV - EET/EEST + {"EUROPE/KIEV", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/KIROV - MSK + {"EUROPE/KIROV", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/LISBON - WET/WEST + {"EUROPE/LISBON", "WET", "WEST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // EUROPE/LJUBLJANA - CET/CEST + {"EUROPE/LJUBLJANA", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/LONDON - GMT/BST + {"EUROPE/LONDON", "GMT", "BST", 0, 0, 1, 0, 3, 5, 0, 1, 0, 10, 5, 0, 2, 0, 1, 0}, + // EUROPE/LUXEMBOURG - CET/CEST + {"EUROPE/LUXEMBOURG", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/MADRID - CET/CEST + {"EUROPE/MADRID", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/MALTA - CET/CEST + {"EUROPE/MALTA", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/MARIEHAMN - EET/EEST + {"EUROPE/MARIEHAMN", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/MINSK - +03 + {"EUROPE/MINSK", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/MONACO - CET/CEST + {"EUROPE/MONACO", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/MOSCOW - MSK + {"EUROPE/MOSCOW", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/OSLO - CET/CEST + {"EUROPE/OSLO", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/PARIS - CET/CEST + {"EUROPE/PARIS", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/PODGORICA - CET/CEST + {"EUROPE/PODGORICA", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/PRAGUE - CET/CEST + {"EUROPE/PRAGUE", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/RIGA - EET/EEST + {"EUROPE/RIGA", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/ROME - CET/CEST + {"EUROPE/ROME", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/SAMARA - +04 + {"EUROPE/SAMARA", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/SAN_MARINO - CET/CEST + {"EUROPE/SAN_MARINO", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/SARAJEVO - CET/CEST + {"EUROPE/SARAJEVO", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/SARATOV - +04 + {"EUROPE/SARATOV", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/SIMFEROPOL - MSK + {"EUROPE/SIMFEROPOL", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/SKOPJE - CET/CEST + {"EUROPE/SKOPJE", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/SOFIA - EET/EEST + {"EUROPE/SOFIA", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/STOCKHOLM - CET/CEST + {"EUROPE/STOCKHOLM", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/TALLINN - EET/EEST + {"EUROPE/TALLINN", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/TIRANE - CET/CEST + {"EUROPE/TIRANE", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/ULYANOVSK - +04 + {"EUROPE/ULYANOVSK", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/UZHGOROD - EET/EEST + {"EUROPE/UZHGOROD", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/VADUZ - CET/CEST + {"EUROPE/VADUZ", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/VATICAN - CET/CEST + {"EUROPE/VATICAN", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/VIENNA - CET/CEST + {"EUROPE/VIENNA", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/VILNIUS - EET/EEST + {"EUROPE/VILNIUS", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/VOLGOGRAD - MSK + {"EUROPE/VOLGOGRAD", "MSK", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // EUROPE/WARSAW - CET/CEST + {"EUROPE/WARSAW", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/ZAGREB - CET/CEST + {"EUROPE/ZAGREB", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // EUROPE/ZAPOROZHYE - EET/EEST + {"EUROPE/ZAPOROZHYE", "EET", "EEST", 2, 0, 3, 0, 3, 5, 0, 3, 0, 10, 5, 0, 4, 0, 1, 0}, + // EUROPE/ZURICH - CET/CEST + {"EUROPE/ZURICH", "CET", "CEST", 1, 0, 2, 0, 3, 5, 0, 2, 0, 10, 5, 0, 3, 0, 1, 0}, + // INDIAN/ANTANANARIVO - EAT + {"INDIAN/ANTANANARIVO", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/CHAGOS - +06 + {"INDIAN/CHAGOS", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/CHRISTMAS - +07 + {"INDIAN/CHRISTMAS", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/COCOS - +0630 + {"INDIAN/COCOS", "+0630", "", 6, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/COMORO - EAT + {"INDIAN/COMORO", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/KERGUELEN - +05 + {"INDIAN/KERGUELEN", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/MAHE - +04 + {"INDIAN/MAHE", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/MALDIVES - +05 + {"INDIAN/MALDIVES", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/MAURITIUS - +04 + {"INDIAN/MAURITIUS", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/MAYOTTE - EAT + {"INDIAN/MAYOTTE", "EAT", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // INDIAN/REUNION - +04 + {"INDIAN/REUNION", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/APIA - +13 + {"PACIFIC/APIA", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/AUCKLAND - NZST/NZDT + {"PACIFIC/AUCKLAND", "NZST", "NZDT", 12, 0, 13, 0, 9, 5, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // PACIFIC/BOUGAINVILLE - +11 + {"PACIFIC/BOUGAINVILLE", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/CHATHAM - +1245/+1345 + {"PACIFIC/CHATHAM", "+1245", "+1345", 12, 45, 13, 45, 9, 5, 0, 2, 45, 4, 1, 0, 3, 45, 1, 0}, + // PACIFIC/CHUUK - +10 + {"PACIFIC/CHUUK", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/EASTER - -06/-05 + {"PACIFIC/EASTER", "-06", "-05", -6, 0, -5, 0, 9, 1, 6, 22, 0, 4, 1, 6, 22, 0, 1, 0}, + // PACIFIC/EFATE - +11 + {"PACIFIC/EFATE", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/ENDERBURY - +13 + {"PACIFIC/ENDERBURY", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/FAKAOFO - +13 + {"PACIFIC/FAKAOFO", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/FIJI - +12 + {"PACIFIC/FIJI", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/FUNAFUTI - +12 + {"PACIFIC/FUNAFUTI", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/GALAPAGOS - -06 + {"PACIFIC/GALAPAGOS", "-06", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/GAMBIER - -09 + {"PACIFIC/GAMBIER", "-09", "", -9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/GUADALCANAL - +11 + {"PACIFIC/GUADALCANAL", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/GUAM - CHST + {"PACIFIC/GUAM", "CHST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/HONOLULU - HST + {"PACIFIC/HONOLULU", "HST", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/KIRITIMATI - +14 + {"PACIFIC/KIRITIMATI", "+14", "", 14, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/KOSRAE - +11 + {"PACIFIC/KOSRAE", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/KWAJALEIN - +12 + {"PACIFIC/KWAJALEIN", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/MAJURO - +12 + {"PACIFIC/MAJURO", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/MARQUESAS - -0930 + {"PACIFIC/MARQUESAS", "-0930", "", -9, 30, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/MIDWAY - SST + {"PACIFIC/MIDWAY", "SST", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/NAURU - +12 + {"PACIFIC/NAURU", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/NIUE - -11 + {"PACIFIC/NIUE", "-11", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/NORFOLK - +11/+12 + {"PACIFIC/NORFOLK", "+11", "+12", 11, 0, 12, 0, 10, 1, 0, 2, 0, 4, 1, 0, 3, 0, 1, 0}, + // PACIFIC/NOUMEA - +11 + {"PACIFIC/NOUMEA", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/PAGO_PAGO - SST + {"PACIFIC/PAGO_PAGO", "SST", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/PALAU - +09 + {"PACIFIC/PALAU", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/PITCAIRN - -08 + {"PACIFIC/PITCAIRN", "-08", "", -8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/POHNPEI - +11 + {"PACIFIC/POHNPEI", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/PORT_MORESBY - +10 + {"PACIFIC/PORT_MORESBY", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/RAROTONGA - -10 + {"PACIFIC/RAROTONGA", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/SAIPAN - CHST + {"PACIFIC/SAIPAN", "CHST", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/TAHITI - -10 + {"PACIFIC/TAHITI", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/TARAWA - +12 + {"PACIFIC/TARAWA", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/TONGATAPU - +13 + {"PACIFIC/TONGATAPU", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/WAKE - +12 + {"PACIFIC/WAKE", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // PACIFIC/WALLIS - +12 + {"PACIFIC/WALLIS", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT - GMT + {"ETC/GMT", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-0 - GMT + {"ETC/GMT-0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-1 - +01 + {"ETC/GMT-1", "+01", "", 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-2 - +02 + {"ETC/GMT-2", "+02", "", 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-3 - +03 + {"ETC/GMT-3", "+03", "", 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-4 - +04 + {"ETC/GMT-4", "+04", "", 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-5 - +05 + {"ETC/GMT-5", "+05", "", 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-6 - +06 + {"ETC/GMT-6", "+06", "", 6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-7 - +07 + {"ETC/GMT-7", "+07", "", 7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-8 - +08 + {"ETC/GMT-8", "+08", "", 8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-9 - +09 + {"ETC/GMT-9", "+09", "", 9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-10 - +10 + {"ETC/GMT-10", "+10", "", 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-11 - +11 + {"ETC/GMT-11", "+11", "", 11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-12 - +12 + {"ETC/GMT-12", "+12", "", 12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-13 - +13 + {"ETC/GMT-13", "+13", "", 13, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT-14 - +14 + {"ETC/GMT-14", "+14", "", 14, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT0 - GMT + {"ETC/GMT0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+0 - GMT + {"ETC/GMT+0", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+1 - -01 + {"ETC/GMT+1", "-01", "", -1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+2 - -02 + {"ETC/GMT+2", "-02", "", -2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+3 - -03 + {"ETC/GMT+3", "-03", "", -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+4 - -04 + {"ETC/GMT+4", "-04", "", -4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+5 - -05 + {"ETC/GMT+5", "-05", "", -5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+6 - -06 + {"ETC/GMT+6", "-06", "", -6, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+7 - -07 + {"ETC/GMT+7", "-07", "", -7, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+8 - -08 + {"ETC/GMT+8", "-08", "", -8, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+9 - -09 + {"ETC/GMT+9", "-09", "", -9, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+10 - -10 + {"ETC/GMT+10", "-10", "", -10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+11 - -11 + {"ETC/GMT+11", "-11", "", -11, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GMT+12 - -12 + {"ETC/GMT+12", "-12", "", -12, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/UCT - UTC + {"ETC/UCT", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/UTC - UTC + {"ETC/UTC", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/GREENWICH - GMT + {"ETC/GREENWICH", "GMT", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/UNIVERSAL - UTC + {"ETC/UNIVERSAL", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}, + // ETC/ZULU - UTC + {"ETC/ZULU", "UTC", "", 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0}}; s8_t datetime_compare(const datetime_t *dt1, const datetime_t *dt2) { // Returns: -1 if dt1 < dt2, 0 if equal, 1 if dt1 > dt2 diff --git a/timezones.h b/timezones.h index 4fedb8f..be29291 100644 --- a/timezones.h +++ b/timezones.h @@ -23,7 +23,8 @@ typedef struct { bool has_dst; // 1 if timezone uses DST, 0 otherwise u8_t reserved; // Padding for alignment } timezone_t; -extern const timezone_t timezones[]; +extern const timezone_t timezones[461]; void timezone_offset(u16_t timezone_index, datetime_t &dt); +extern volatile u16_t timezone_index; #endif //SMART_ALARM_TIMEZONES_H \ No newline at end of file diff --git a/ui.cpp b/ui.cpp new file mode 100644 index 0000000..8a13782 --- /dev/null +++ b/ui.cpp @@ -0,0 +1,177 @@ +#include +#include +#include +#include +#include + +#include "Font5x7FixedMono.h" +#include "alarm_sound.h" +#include "control.h" +#include "display.h" +#include "gc9a01.h" +#include "macros.h" +#include "lwip/arch.h" +#include "multicore_events.h" +#include "pico/multicore.h" +#include "pico/time.h" +#include "sound.h" +#include "timezones.h" + + +bool secondary_button_override = false; + +struct configuration { + char* text; + void (*set_text)(const configuration* self); + void (*update)(configuration* self,bool hard); + uint32_t local_conf; // can be used as diferent data types + uint8_t additional_data; + bool override_secondary_button; +}; + +void timezone_set_text(const configuration* self) {sprintf(self->text, "TIMEZONE: %s", timezones[self->local_conf].zone_name);} +void timezone_update(configuration* self,bool hard) { + uint16_t selected_option = get_knob_percentage(); + self->additional_data %= std::size(timezones)/100; + selected_option+= self->additional_data*100; + self->local_conf = selected_option >= std::size(timezones) ? std::size(timezones)-1 : selected_option; + if (hard) { + timezone_index = self->local_conf; + // todo store to flash + } +} + +void volume_set_text(const configuration* self) {sprintf(self->text, "VOLUME: %0.1f", *(float*)&self->local_conf);} +void volume_update(configuration* self,bool hard) +{ + *(float*)&self->local_conf = static_cast(get_knob_percentage())/10.0f; + if (hard) { + volume_multiplier = *(float*)&self->local_conf; + // todo store to flash + } +} + +void config_page() { + char volume_str[17]; + char timezone_str[41]; + std::array options = {{{timezone_str,&timezone_set_text,&timezone_update,timezone_index, 0,true}, {volume_str,&volume_set_text,&volume_update,*(uint32_t*)&volume_multiplier, 0, false}}}; + const GFXfont *font = &Font5x7FixedMono; + + draw_ui_circle(RED); + multicore_fifo_drain(); + uint8_t selected_option; + bool configuring = false; + while (true) { + for (uint8_t i = 0; i < ARRAY_LENGTH(options); i++) { + options[i].set_text(&options[i]); + } + + if (!configuring) + { + selected_option = std::min( + static_cast((get_knob_percentage() / 100.0f) * options.size()), + static_cast(options.size() - 1)); + } + + + // Find the actual maximum text width that will be rendered + uint16_t max_text_width_pixels = 0; + for (uint8_t i = 0; i < options.size(); i++) { + uint16_t text_width = strlen(options[i].text) * 5; + if (text_width > max_text_width_pixels) { + max_text_width_pixels = text_width; + } + } + + // Add proper padding to ensure text doesn't touch cyan lines + const uint8_t horizontal_padding = 15; // Increased padding + const uint8_t half_boundary_width = (max_text_width_pixels + (2 * horizontal_padding)) / 2; + constexpr uint8_t center_pos = (MAX_X / 2); + + // Calculate cyan line positions with proper spacing + uint16_t left_cyan_x = center_pos - half_boundary_width; + uint16_t right_cyan_x = center_pos + half_boundary_width; + + // Get vertical boundaries + std::array circle_y_pos = get_ui_circle_vertical_pos(right_cyan_x); + uint16_t y_offset = circle_y_pos[0] + 2; + + // right + gc9a01_vline(&display, right_cyan_x, y_offset, + (circle_y_pos[1] - 1) - y_offset, CYAN); + // left + gc9a01_vline(&display, left_cyan_x, y_offset, + (circle_y_pos[1] - 1) - y_offset, CYAN); + + const uint8_t half_y_font = static_cast( + roundf(static_cast(7) / static_cast(2))); + y_offset += 20; + + // Render text with proper horizontal centering + for (uint8_t i = 0; i < options.size(); i++) { + uint16_t text_width_pixels = strlen(options[i].text) * 5; + + // Center each text line horizontally within the cyan boundaries + uint16_t x_pos = (center_pos - (text_width_pixels / 2)); + + // Ensure text stays within cyan line boundaries + if (x_pos < left_cyan_x + horizontal_padding) { + x_pos = left_cyan_x + horizontal_padding; + } else if (x_pos + text_width_pixels > right_cyan_x - horizontal_padding) { + x_pos = right_cyan_x - horizontal_padding - text_width_pixels; + } + + gc9a01_text_gfx_buffered(&display, font, options[i].text, x_pos-10 /*MAGIC IDK WHY*/, y_offset, i == selected_option ? configuring ? RED : GREEN : WHITE, BLACK); + y_offset += half_y_font; + + // Draw separator line within cyan boundaries + gc9a01_hline(&display, left_cyan_x + 2, y_offset, + (right_cyan_x - left_cyan_x) - 4, WHITE); + y_offset += half_y_font * 2; + } + + switch (static_cast(multicore_fifo_pop_blocking())) { + case PRIMARY_BUTTON_PRESSED: + if (configuring) { + options[selected_option].update(&options[selected_option], true); + secondary_button_override = false; + } else { + if (options[selected_option].override_secondary_button) { + secondary_button_override = true; + } + gc9a01_fill_rect(&display,left_cyan_x,circle_y_pos[0]+1,right_cyan_x-left_cyan_x,(circle_y_pos[1]-circle_y_pos[0])-2,BLACK); + options[selected_option].update(&options[selected_option], false); + } + configuring = !configuring; + break; + case SECONDARY_BUTTON_PRESSED: + options[selected_option].additional_data++; + gc9a01_fill_rect(&display,left_cyan_x,circle_y_pos[0]+1,right_cyan_x-left_cyan_x,(circle_y_pos[1]-circle_y_pos[0])-2,BLACK); + options[selected_option].update(&options[selected_option], false); + break; + case KNOB_CHANGE: + if (configuring) { + gc9a01_fill_rect(&display,left_cyan_x,circle_y_pos[0]+1,right_cyan_x-left_cyan_x,(circle_y_pos[1]-circle_y_pos[0])-2,BLACK); + options[selected_option].update(&options[selected_option], false); + } + break; + } + multicore_fifo_drain(); // prevent event stucking + } +} + + +void time_page() { + draw_ui_circle(MAGENTA); + print_time(true); + while (true) { + multicore_fifo_drain(); + sleep_ms(500); + print_time(); + } +} + +void alarm_set_page() { draw_ui_circle(BLUE); } + +std::array page_functions = {config_page, time_page, + alarm_set_page}; diff --git a/ui.h b/ui.h new file mode 100644 index 0000000..9a495c6 --- /dev/null +++ b/ui.h @@ -0,0 +1,6 @@ +#ifndef SMART_ALARM_UI_H +#define SMART_ALARM_UI_H +#include +extern std::array page_functions; +extern bool secondary_button_override; +#endif //SMART_ALARM_UI_H \ No newline at end of file