Files
crosspoint-reader-mod/lib/EpdFont/builtinFonts/notosans_12_regular.h

3200 lines
232 KiB
C
Raw Normal View History

Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
/**
* generated by fontconvert.py
* name: notosans_12_regular
* size: 12
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
* mode: 2-bit compressed: true
* Command used: fontconvert.py notosans_12_regular 12 ../builtinFonts/source/NotoSans/NotoSans-Regular.ttf --2bit --compress
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
*/
#pragma once
#include "EpdFontData.h"
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
static const uint8_t notosans_12_regularBitmaps[22619] = {
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
0xAD, 0x58, 0x41, 0x6C, 0xDC, 0xC6, 0x15, 0xFD, 0x24, 0xE5, 0xB0, 0x0D, 0x81, 0x4C, 0x0E, 0x29,
0x9A, 0xDA, 0x96, 0x78, 0xC9, 0xA1, 0x08, 0xB4, 0xCB, 0xAB, 0x0A, 0x90, 0xBB, 0x74, 0x0C, 0xD4,
0x40, 0x7D, 0xB0, 0x0A, 0x58, 0x3E, 0xB4, 0x07, 0x5F, 0x7A, 0x68, 0xDD, 0xD6, 0xB9, 0x08, 0x85,
0x92, 0x52, 0xDE, 0x69, 0x7C, 0xF4, 0xC1, 0xCE, 0xA1, 0xBD, 0x26, 0x68, 0x2F, 0x8D, 0x8C, 0x5A,
0x2A, 0x20, 0xB4, 0x84, 0xBB, 0x12, 0xE9, 0x18, 0x85, 0x0F, 0x06, 0x6A, 0x26, 0x86, 0x91, 0x83,
0x81, 0x9A, 0xB0, 0x1D, 0x04, 0xB1, 0x80, 0x68, 0x2C, 0x31, 0x12, 0x2D, 0xED, 0xEE, 0xF4, 0x7D,
0x72, 0xA5, 0xD8, 0xB2, 0xDD, 0x26, 0x40, 0x57, 0xC3, 0xE5, 0xCC, 0x2C, 0x39, 0xFF, 0xCF, 0xFF,
0xEF, 0xFF, 0xF7, 0x47, 0xAD, 0x56, 0xAB, 0x15, 0x34, 0xF0, 0x19, 0x3F, 0x78, 0xF0, 0x20, 0x51,
0xAB, 0xDD, 0x1A, 0x89, 0x1A, 0x51, 0xC3, 0x6F, 0x4C, 0x34, 0x26, 0x0E, 0x4E, 0x1C, 0x7C, 0xED,
0x5B, 0xE4, 0x18, 0x29, 0xBD, 0x64, 0xE2, 0xB2, 0x52, 0x1A, 0xB5, 0x24, 0x8D, 0x5B, 0xF2, 0xC5,
0xE5, 0x8B, 0x1F, 0xB8, 0x5A, 0x0F, 0x68, 0x46, 0x10, 0x4D, 0xBF, 0x44, 0xB4, 0x80, 0x4B, 0x8D,
0x52, 0x47, 0xEB, 0x92, 0x2F, 0x23, 0xF3, 0xC9, 0x4C, 0x27, 0x70, 0x4D, 0x93, 0x95, 0x2E, 0x90,
0x25, 0x15, 0xD1, 0x38, 0x37, 0x23, 0xB9, 0xE0, 0xEA, 0x5E, 0xEB, 0x57, 0x3F, 0x8F, 0xC6, 0xA9,
0x6E, 0xED, 0x2E, 0x39, 0x83, 0x90, 0x92, 0x82, 0x1A, 0x7D, 0x1A, 0xF7, 0x68, 0xDC, 0xC5, 0xF7,
0x5B, 0x8D, 0xA5, 0x8E, 0x2E, 0xF6, 0x2F, 0x87, 0xF5, 0x5B, 0xF4, 0x0A, 0x55, 0x9F, 0xB6, 0xA4,
0x05, 0x6B, 0x45, 0xDA, 0x72, 0xD4, 0x21, 0x9F, 0x16, 0x46, 0x8D, 0x0C, 0x52, 0x04, 0x09, 0xCA,
0x17, 0xA1, 0xD6, 0xD9, 0x14, 0x53, 0xE3, 0xDE, 0xEF, 0xF2, 0xBF, 0xDE, 0x5B, 0x3D, 0xBB, 0x72,
0x63, 0x4C, 0x58, 0xE5, 0xCC, 0xC2, 0x28, 0x59, 0x57, 0xA1, 0xC5, 0xA8, 0x30, 0x72, 0x52, 0xBE,
0x2D, 0x9D, 0x10, 0x53, 0xBE, 0x91, 0x2D, 0x98, 0xA9, 0x75, 0x3B, 0x1D, 0x23, 0xBB, 0x47, 0xBB,
0x1F, 0xB7, 0x4F, 0x64, 0x6F, 0x17, 0x44, 0xA5, 0x23, 0xB1, 0x68, 0x44, 0x54, 0xD8, 0x29, 0x39,
0xB2, 0x24, 0x0A, 0xDA, 0x44, 0x86, 0x96, 0x78, 0x26, 0x27, 0x12, 0xAB, 0xA1, 0xB0, 0xD4, 0x19,
0x23, 0x8F, 0x8C, 0x32, 0x70, 0xA4, 0xFD, 0x59, 0x1A, 0x93, 0x5B, 0x38, 0x29, 0x25, 0xD4, 0x22,
0xAF, 0x34, 0x75, 0xF2, 0x49, 0x6E, 0xEB, 0xDC, 0x95, 0xBC, 0xE8, 0xEC, 0xFA, 0xBF, 0x26, 0xEE,
0x86, 0x66, 0x16, 0x89, 0x43, 0x2A, 0xB0, 0xD2, 0xC8, 0x91, 0x85, 0x08, 0x95, 0x20, 0x7C, 0xC7,
0x4E, 0xEA, 0x5B, 0x99, 0x47, 0xCA, 0x4E, 0x1B, 0x3E, 0xC4, 0x15, 0x86, 0xB2, 0x32, 0x47, 0xBA,
0xD8, 0x5B, 0x81, 0x4E, 0xD8, 0xE0, 0x1B, 0xF4, 0x30, 0x73, 0x11, 0xE2, 0xCB, 0x25, 0x58, 0x11,
0x4A, 0xF9, 0xDC, 0xC2, 0x89, 0x91, 0xC1, 0x5B, 0x83, 0x04, 0x3E, 0xE8, 0x93, 0xB1, 0x4A, 0xD6,
0xB5, 0x54, 0x9C, 0xCD, 0x1D, 0x23, 0x63, 0x91, 0xE3, 0xC3, 0x67, 0xEA, 0x36, 0xB7, 0x3C, 0xA7,
0xB5, 0x7E, 0x7C, 0x86, 0x1B, 0x51, 0x33, 0xF0, 0xA3, 0x45, 0x45, 0x73, 0x7F, 0xD2, 0xFF, 0x9C,
0xAA, 0x1D, 0x0F, 0x5F, 0x51, 0x8C, 0x8D, 0x1B, 0x8A, 0x1A, 0xDC, 0x9F, 0x21, 0x11, 0x42, 0x66,
0x93, 0xFB, 0x11, 0x39, 0xDC, 0x1F, 0x23, 0x2B, 0xC3, 0xEB, 0x4E, 0xB5, 0x35, 0x4A, 0x72, 0xC2,
0xCA, 0x5D, 0x2B, 0x0F, 0xC8, 0x77, 0xC9, 0x39, 0x27, 0x8D, 0xB5, 0x9C, 0xA2, 0x45, 0x12, 0x01,
0x59, 0x37, 0x42, 0x5A, 0xC3, 0xA3, 0xB0, 0x0C, 0x8C, 0x7C, 0x2D, 0x35, 0xF3, 0x82, 0x0A, 0x17,
0xCF, 0x6E, 0xF5, 0xC8, 0xAB, 0x6D, 0x3E, 0xE3, 0x28, 0x7D, 0xE7, 0xBD, 0xE9, 0xC8, 0xC0, 0xFE,
0x5D, 0x7A, 0xEA, 0x86, 0x27, 0x5E, 0xD0, 0xB2, 0xAD, 0x55, 0x40, 0xBD, 0x4A, 0xE5, 0xA0, 0xFA,
0x86, 0x01, 0x62, 0xD6, 0xD0, 0xCE, 0x58, 0x3B, 0xCC, 0x15, 0xAC, 0x52, 0xDD, 0xD5, 0xD5, 0x07,
0x2F, 0x3A, 0x5A, 0x02, 0x3F, 0x13, 0xD4, 0x7D, 0xEC, 0xC5, 0x2E, 0xD9, 0xCA, 0xD2, 0xA1, 0x99,
0x28, 0xEE, 0x63, 0x57, 0xE4, 0x56, 0xAD, 0x25, 0xA9, 0x3B, 0xB8, 0x58, 0x74, 0xF4, 0x85, 0x4A,
0x2B, 0xAC, 0x2F, 0x52, 0xB2, 0x20, 0xF2, 0xB7, 0x29, 0x09, 0x9F, 0xE1, 0x43, 0xB1, 0x4F, 0xAE,
0x95, 0x5A, 0xA9, 0x4F, 0x8B, 0x16, 0x30, 0xE3, 0x73, 0x1F, 0x38, 0xDF, 0xAC, 0x84, 0x61, 0x69,
0xD8, 0xA7, 0xBE, 0xB9, 0xBA, 0x44, 0xC3, 0xD2, 0x8D, 0xAA, 0xD5, 0x82, 0xDB, 0xBC, 0x8B, 0x82,
0x0C, 0x2C, 0xD9, 0x22, 0xF2, 0x76, 0xE5, 0x4E, 0x52, 0xB7, 0x33, 0x5F, 0x78, 0x5A, 0x0E, 0xE1,
0xE7, 0x0C, 0xC8, 0xDB, 0x96, 0x5E, 0x08, 0x0F, 0xB0, 0x81, 0xB1, 0x28, 0x1B, 0x61, 0x26, 0xC9,
0x9B, 0x5B, 0x89, 0x93, 0x5B, 0x77, 0x15, 0x45, 0xF0, 0xCE, 0x18, 0xFB, 0x9A, 0x54, 0x41, 0x91,
0x4B, 0x81, 0xB9, 0x35, 0xA8, 0x50, 0x5B, 0x6D, 0xBD, 0xAD, 0x75, 0x4A, 0xA6, 0x62, 0x8B, 0xF0,
0x2E, 0x82, 0x4A, 0x8A, 0xA8, 0x16, 0x32, 0x81, 0x5A, 0xC5, 0x86, 0xE3, 0x59, 0x68, 0x00, 0x73,
0x01, 0xD9, 0x56, 0x5E, 0x49, 0xA8, 0x3C, 0x79, 0x9F, 0x06, 0x49, 0x58, 0x1A, 0xCA, 0xA7, 0x40,
0x90, 0x73, 0x38, 0xB3, 0xD2, 0xAE, 0x99, 0x3B, 0x9F, 0xE5, 0xEC, 0xE3, 0x33, 0x03, 0xEA, 0xDA,
0x2A, 0xA2, 0x56, 0x93, 0x6C, 0x76, 0x2B, 0x7C, 0x8C, 0x81, 0xF3, 0x20, 0xA1, 0xCE, 0x60, 0xA8,
0xBB, 0xA9, 0xA5, 0xD0, 0xAA, 0x45, 0x65, 0xC4, 0x2E, 0x6F, 0x2E, 0x92, 0x0B, 0x14, 0xC4, 0xE4,
0x45, 0xD4, 0xF1, 0xFE, 0xB0, 0xEA, 0xE8, 0x93, 0x34, 0x39, 0x56, 0x99, 0xC4, 0x67, 0x2D, 0x4C,
0xB5, 0x7F, 0x3E, 0x75, 0xAB, 0x77, 0xBF, 0xD7, 0x6E, 0xBF, 0x3A, 0x5C, 0x83, 0x21, 0xF8, 0xE2,
0x61, 0xD5, 0x7B, 0x75, 0x37, 0x20, 0x03, 0x61, 0x7F, 0x98, 0xAB, 0x89, 0xE1, 0x08, 0x79, 0xC8,
0x56, 0xE4, 0x66, 0xD4, 0x09, 0x8D, 0x3E, 0xD9, 0x05, 0x99, 0x45, 0x1D, 0x8F, 0x1D, 0x78, 0x2E,
0x09, 0xC9, 0x84, 0x81, 0xED, 0xE1, 0xB3, 0x89, 0xD6, 0xA7, 0xE6, 0xE6, 0x76, 0x17, 0xAA, 0x86,
0x1F, 0xA0, 0xF3, 0x7D, 0x98, 0x96, 0xDF, 0x90, 0x64, 0x40, 0xBC, 0x59, 0x56, 0x43, 0x78, 0xC6,
0x2E, 0xC9, 0xCB, 0x0C, 0xA0, 0x03, 0x33, 0xEF, 0xEF, 0xBE, 0xF6, 0x66, 0xE9, 0xE8, 0xFE, 0xB7,
0x19, 0x2D, 0x8A, 0xAD, 0x28, 0x58, 0x77, 0x84, 0x79, 0x8F, 0xAD, 0x1A, 0x11, 0x82, 0xCD, 0x0E,
0x87, 0xDB, 0xCF, 0x19, 0x34, 0xC8, 0x11, 0x2F, 0x43, 0x4D, 0xD8, 0x92, 0x6C, 0xAD, 0x01, 0xCA,
0x8C, 0x96, 0xD8, 0xD4, 0x1C, 0xCB, 0xD8, 0xB9, 0x2D, 0xBD, 0x47, 0xF6, 0x1B, 0x69, 0x7B, 0x5E,
0xE6, 0x2A, 0x40, 0x8A, 0x9C, 0x16, 0x34, 0xED, 0x8C, 0xDA, 0xB2, 0x61, 0x5E, 0x7F, 0x03, 0x4F,
0xAC, 0x65, 0xD3, 0x56, 0x36, 0x31, 0xED, 0x52, 0x31, 0x3A, 0x66, 0x7D, 0xBA, 0x7A, 0xD2, 0x4A,
0xDB, 0xB9, 0xA6, 0x45, 0x0A, 0x47, 0x58, 0x30, 0xD6, 0x05, 0x84, 0xB0, 0xDF, 0xCF, 0x7F, 0x09,
0xB0, 0x75, 0x74, 0xB6, 0xA3, 0x23, 0x63, 0x8F, 0xB7, 0x24, 0xE0, 0xC9, 0xB1, 0x45, 0xD8, 0x6C,
0x06, 0xA2, 0xD8, 0xCA, 0x30, 0x36, 0x02, 0xCE, 0x50, 0x22, 0x84, 0x23, 0xA5, 0xF5, 0xE0, 0x62,
0xCA, 0x4A, 0x89, 0xDF, 0x9F, 0x50, 0x80, 0x85, 0x02, 0x46, 0x63, 0x8E, 0x26, 0x06, 0x0A, 0xCC,
0xE8, 0x75, 0x06, 0x17, 0x3C, 0xAD, 0x1D, 0xE9, 0xB0, 0x77, 0x01, 0xB3, 0xD3, 0x64, 0x5D, 0x47,
0x38, 0x7F, 0x79, 0x42, 0x25, 0x3A, 0xF7, 0xE6, 0x92, 0xA3, 0xD2, 0xD8, 0xC8, 0xA9, 0x89, 0xFD,
0x7F, 0x41, 0xE6, 0xB6, 0xA4, 0xAD, 0x9C, 0xFA, 0x89, 0xEE, 0x7B, 0xBA, 0xAC, 0xD5, 0xE8, 0x0C,
0x42, 0x30, 0x02, 0xFC, 0xF2, 0x1A, 0x0C, 0xC1, 0x16, 0xB3, 0x58, 0xA7, 0x3A, 0x9E, 0x18, 0x64,
0x80, 0x1B, 0xC3, 0x91, 0x87, 0x8C, 0x4F, 0x86, 0xA9, 0x9D, 0xD7, 0x9A, 0x3B, 0x40, 0xDE, 0x0B,
0xBA, 0x57, 0xAF, 0x72, 0xC1, 0xD4, 0xBA, 0x70, 0xE4, 0x81, 0xA2, 0x09, 0xF7, 0xC6, 0x64, 0x41,
0x1D, 0xFB, 0xBA, 0x64, 0x7D, 0xA8, 0x05, 0xF8, 0x5E, 0xCE, 0xC9, 0x5C, 0xC1, 0xF0, 0x12, 0xD4,
0x46, 0x1A, 0xC0, 0xAF, 0x02, 0xBF, 0x76, 0x9B, 0x80, 0x05, 0xB4, 0x31, 0x35, 0x98, 0xA4, 0xA3,
0x37, 0xB4, 0xBE, 0x2D, 0x39, 0xC0, 0x63, 0x76, 0x0C, 0x42, 0xC9, 0x9B, 0x3A, 0x9E, 0xE8, 0xB5,
0xAD, 0xB9, 0x73, 0x4F, 0xCC, 0x36, 0x19, 0x17, 0x78, 0x36, 0x7B, 0xC6, 0x1B, 0xE8, 0x2E, 0xCF,
0xFD, 0x51, 0xEB, 0xEB, 0xB7, 0xA6, 0x9E, 0x9C, 0xAD, 0xBA, 0xF5, 0xE7, 0x80, 0xBE, 0x8F, 0xB0,
0xEB, 0x59, 0x25, 0xFD, 0x8C, 0xF7, 0xEC, 0x51, 0x15, 0xDF, 0x55, 0x72, 0x8D, 0xAA, 0xEB, 0x3B,
0xC7, 0x23, 0x6A, 0xF7, 0x23, 0xDA, 0xBF, 0xC4, 0x56, 0x46, 0xE4, 0x05, 0x1E, 0x63, 0x5A, 0x52,
0x00, 0xF0, 0x06, 0x86, 0x5E, 0xE9, 0xD3, 0xD0, 0x7E, 0xF0, 0x19, 0xB6, 0x62, 0xF1, 0x46, 0x21,
0x03, 0x11, 0xB4, 0x3B, 0xF4, 0xA6, 0xA6, 0x22, 0xA0, 0x17, 0xCA, 0x5F, 0x7C, 0xC6, 0xAF, 0x8F,
0x0D, 0x53, 0x6C, 0x42, 0x32, 0x5F, 0x84, 0x01, 0x3D, 0x75, 0x7B, 0xF3, 0x1E, 0x00, 0xB3, 0xC8,
0x38, 0x68, 0x52, 0xFC, 0xDC, 0x5B, 0x70, 0x64, 0x5D, 0xFF, 0xE8, 0x7D, 0x28, 0x83, 0x4C, 0x6E,
0xAA, 0x98, 0xBA, 0xCC, 0x45, 0xB1, 0x0D, 0x4A, 0x2A, 0x28, 0x0E, 0xC8, 0x39, 0x2F, 0xE9, 0x1F,
0x25, 0x39, 0xDB, 0x80, 0xB5, 0x57, 0xD1, 0x62, 0xF5, 0x9B, 0x07, 0x9B, 0xF4, 0x00, 0xB0, 0x1C,
0xA9, 0xFE, 0x28, 0x7C, 0x31, 0xB3, 0xC7, 0x58, 0xFF, 0xAD, 0x3B, 0xB4, 0x3F, 0xD0, 0xB2, 0x86,
0x2C, 0xE6, 0xDD, 0x86, 0x31, 0xF4, 0x69, 0xE4, 0xF6, 0xA5, 0xBF, 0x67, 0xD4, 0xD8, 0xF8, 0x24,
0xA5, 0xF5, 0xDB, 0xC7, 0xC8, 0x3E, 0x7F, 0xBA, 0x49, 0x7E, 0x10, 0x83, 0x13, 0x36, 0xF2, 0xC2,
0x39, 0x7C, 0xFB, 0x9D, 0xDC, 0x17, 0xA7, 0xAD, 0x2B, 0x79, 0x10, 0x8B, 0x63, 0xE1, 0x46, 0xEE,
0xFA, 0xD6, 0x6D, 0xD9, 0xCA, 0x00, 0x91, 0x04, 0xA0, 0x30, 0x4A, 0xDA, 0xC8, 0xAD, 0xCC, 0xCA,
0x66, 0x89, 0x7E, 0xD3, 0x03, 0x5A, 0xA0, 0xF1, 0x25, 0x90, 0xD8, 0xDF, 0x14, 0x5D, 0xBE, 0x99,
0x99, 0x2B, 0x47, 0x52, 0xE7, 0x2F, 0x22, 0x6D, 0xC6, 0x22, 0xBC, 0x9C, 0x7B, 0xC0, 0x52, 0xCB,
0xB9, 0x44, 0x01, 0x70, 0xDD, 0x7D, 0x3B, 0xA7, 0x47, 0x2B, 0xD2, 0xD8, 0xBE, 0x44, 0xE6, 0x00,
0xC0, 0x03, 0xC0, 0xED, 0xDA, 0xD3, 0x0E, 0x6C, 0x07, 0x6C, 0x93, 0x2B, 0x6D, 0x05, 0xE7, 0xB5,
0x90, 0x01, 0xEC, 0xAB, 0x88, 0xBF, 0x12, 0x18, 0x46, 0x82, 0x23, 0xFB, 0x0E, 0x20, 0xBE, 0x09,
0x04, 0xCC, 0x62, 0xC2, 0xC5, 0x84, 0x83, 0x24, 0xC9, 0xE9, 0xDA, 0x50, 0xB3, 0x5C, 0x4B, 0xE4,
0xC8, 0x2F, 0xC9, 0x4A, 0x0F, 0x6C, 0x56, 0xEE, 0x84, 0x4A, 0xA2, 0x8B, 0xD8, 0xE8, 0xC5, 0x0C,
0x69, 0x0F, 0x66, 0x8B, 0x39, 0xB0, 0xA0, 0x7A, 0x2F, 0xD1, 0x2A, 0x19, 0x84, 0x71, 0x95, 0xA9,
0xF7, 0xB4, 0xFF, 0x83, 0x2A, 0xBD, 0x3D, 0xAA, 0xCC, 0xF2, 0x8A, 0x9C, 0x48, 0x96, 0x70, 0x09,
0xEE, 0x4C, 0x42, 0x37, 0x47, 0xEB, 0x10, 0xAA, 0xD4, 0x1E, 0xF5, 0x1C, 0x69, 0x00, 0x09, 0x4D,
0x8C, 0xB2, 0xA5, 0x13, 0x9C, 0x0E, 0x69, 0x79, 0x5E, 0x3A, 0x32, 0x02, 0x62, 0x94, 0x23, 0x51,
0xC3, 0x30, 0x4A, 0x76, 0x7D, 0x5F, 0x31, 0xC1, 0x7D, 0xAE, 0xF0, 0xE8, 0x95, 0xA8, 0x0A, 0x83,
0xA8, 0x26, 0x3D, 0xA4, 0xCA, 0x41, 0x55, 0x2F, 0x20, 0xD1, 0xB2, 0xDC, 0xA0, 0x22, 0xE0, 0x00,
0x14, 0x98, 0xCC, 0x83, 0x7A, 0x65, 0x9D, 0xA3, 0x57, 0xB9, 0xA6, 0xE4, 0x2C, 0xA1, 0xEA, 0xDC,
0xF1, 0x4D, 0x6E, 0x48, 0x7D, 0x58, 0x46, 0x94, 0xFF, 0xFB, 0x86, 0xBC, 0xB1, 0x9D, 0x92, 0x0B,
0x6A, 0xFF, 0xB8, 0xA0, 0x9E, 0xD8, 0xD2, 0x34, 0xE4, 0x60, 0x2C, 0xF1, 0x36, 0x12, 0xFD, 0x3D,
0x64, 0x7A, 0x18, 0xB7, 0xEB, 0x22, 0x71, 0x83, 0xF8, 0x61, 0xFC, 0x98, 0x0B, 0x33, 0x2B, 0x43,
0x89, 0x23, 0xB1, 0x51, 0x94, 0x1B, 0x01, 0x94, 0x8C, 0xE1, 0x94, 0x75, 0x90, 0xE8, 0x2A, 0x8C,
0x58, 0x56, 0x45, 0x03, 0x13, 0x40, 0xCC, 0xC8, 0x7E, 0x4B, 0xA1, 0x6B, 0xDD, 0xCB, 0x90, 0x0E,
0xC5, 0x31, 0xE9, 0xC4, 0x14, 0x79, 0x14, 0x28, 0x13, 0x14, 0xBA, 0x9E, 0x09, 0x59, 0xD8, 0xE7,
0xA4, 0x8F, 0x9A, 0x49, 0x70, 0xA9, 0xA3, 0x7C, 0x58, 0xD1, 0x4E, 0x11, 0x5E, 0x41, 0xC3, 0x50,
0x8A, 0x62, 0x05, 0x7A, 0x37, 0xD6, 0x53, 0x07, 0x09, 0xF8, 0xDF, 0x9C, 0xD0, 0xC5, 0x22, 0xB5,
0x53, 0xF2, 0x52, 0x42, 0xA9, 0x71, 0xA6, 0x62, 0xAC, 0xA2, 0xAE, 0xC1, 0x8C, 0xBC, 0x0B, 0x72,
0x29, 0x58, 0x39, 0x1B, 0xE5, 0x15, 0x4A, 0xAE, 0x8F, 0xF3, 0x0A, 0x00, 0xA2, 0xA8, 0xB5, 0xE1,
0xB0, 0x82, 0x72, 0xAD, 0x00, 0xDE, 0x8F, 0x88, 0x5D, 0x15, 0x73, 0x41, 0x6B, 0xA2, 0xA0, 0x62,
0x48, 0x40, 0x28, 0x19, 0x0F, 0x15, 0x89, 0x37, 0x72, 0x94, 0x65, 0xA9, 0x55, 0x85, 0x32, 0x4A,
0x53, 0xF6, 0x39, 0x05, 0xC8, 0x62, 0x67, 0x00, 0x7F, 0x08, 0x45, 0x40, 0x55, 0x24, 0x23, 0x86,
0xB9, 0x4D, 0x3D, 0x31, 0x04, 0x69, 0x5C, 0xD5, 0x9C, 0xBC, 0x61, 0x31, 0x4E, 0xEA, 0xC1, 0xD7,
0xEC, 0xA1, 0x58, 0xB9, 0xA9, 0x75, 0x5F, 0xAF, 0x0E, 0x50, 0x0B, 0x3F, 0xAF, 0xE1, 0xD7, 0x45,
0x66, 0x8E, 0xA0, 0x22, 0x58, 0xDE, 0x39, 0x06, 0x3E, 0x0F, 0x5C, 0x1E, 0x40, 0x4F, 0x9F, 0x6D,
0xC1, 0x7C, 0xC6, 0x83, 0xA8, 0xF3, 0x50, 0xA7, 0x02, 0x73, 0xCA, 0x7A, 0xEE, 0x8D, 0x1F, 0xA1,
0x97, 0x2A, 0x36, 0x65, 0xBB, 0xDA, 0xBF, 0xC6, 0xBB, 0x28, 0x6B, 0x9D, 0x90, 0xAB, 0xBB, 0x19,
0x33, 0x73, 0xF8, 0x34, 0x41, 0x8B, 0xA8, 0x7F, 0xAF, 0x84, 0x34, 0x02, 0x2D, 0x05, 0x57, 0x55,
0x4E, 0xDA, 0xA2, 0xC2, 0x94, 0x74, 0x2A, 0x6C, 0xEB, 0xF4, 0x3E, 0x0A, 0x7B, 0xB7, 0xDA, 0xBC,
0xF2, 0xF4, 0xF5, 0xAD, 0xF9, 0x59, 0x6A, 0xA3, 0x0E, 0x0E, 0x9D, 0x55, 0xEA, 0x74, 0xE6, 0xBB,
0x9D, 0x62, 0xA1, 0xA6, 0xB8, 0x27, 0xDA, 0xA9, 0x70, 0x53, 0xE7, 0xFA, 0x50, 0xAF, 0x47, 0x41,
0x49, 0xCD, 0x02, 0xC7, 0x85, 0x9D, 0x56, 0x72, 0x39, 0xDC, 0xEA, 0x53, 0x77, 0x7B, 0xA5, 0x78,
0x58, 0xD3, 0xFA, 0x29, 0x50, 0x69, 0xDA, 0xFF, 0x89, 0xE0, 0xED, 0x19, 0x6A, 0x37, 0x6B, 0xA2,
0x8B, 0xCD, 0x22, 0xE4, 0xC5, 0x96, 0x72, 0x86, 0x55, 0x63, 0x55, 0x5D, 0x54, 0x22, 0xD8, 0xB4,
0xE1, 0xFE, 0xC3, 0x59, 0xA7, 0x5F, 0x9C, 0x39, 0xD2, 0x6F, 0x51, 0xFB, 0x24, 0xD9, 0x48, 0xA0,
0x20, 0xED, 0xA0, 0xA6, 0x73, 0x0C, 0x0A, 0x45, 0xB3, 0x6D, 0x6A, 0x1F, 0xDE, 0x4A, 0x32, 0xAF,
0x5C, 0xAC, 0x45, 0xE1, 0xA0, 0x22, 0xDE, 0x2D, 0x5B, 0xEC, 0xF1, 0x66, 0x44, 0x1E, 0xA2, 0x70,
0x79, 0x6E, 0x2E, 0xDE, 0xA9, 0x20, 0xBD, 0x70, 0x44, 0x6C, 0x75, 0x8D, 0x1D, 0x96, 0xB7, 0xFB,
0xC6, 0x20, 0x0B, 0x86, 0xE7, 0x81, 0x5B, 0x8E, 0x2E, 0xBE, 0x7B, 0x0B, 0x3D, 0x3B, 0x7D, 0xCE,
0x17, 0xFD, 0xC2, 0x30, 0xF4, 0xC6, 0x47, 0x8F, 0xDC, 0xA2, 0x24, 0xF0, 0xA0, 0x7B, 0x92, 0x90,
0xA9, 0x77, 0x54, 0xC2, 0xE0, 0x66, 0x6A, 0x14, 0x3D, 0xEA, 0x8B, 0x07, 0x3A, 0x4C, 0xEE, 0x65,
0x15, 0xB4, 0x60, 0x55, 0x77, 0x1F, 0xB9, 0xEF, 0x68, 0x2D, 0xBD, 0x41, 0xB8, 0xD7, 0x8C, 0xAF,
0x87, 0x1B, 0x5A, 0xE9, 0x1F, 0xC3, 0x8C, 0x7E, 0xC9, 0x75, 0xCB, 0x73, 0xDB, 0x48, 0x10, 0x8C,
0xD0, 0x2B, 0xC1, 0xE3, 0x1F, 0x7A, 0x99, 0xE9, 0x70, 0x04, 0xAE, 0x0F, 0x9F, 0xC9, 0x91, 0xC3,
0x9B, 0xEB, 0x96, 0x1D, 0xB9, 0x57, 0x2E, 0x4D, 0x16, 0xA6, 0xC2, 0x09, 0xAF, 0xF0, 0xA8, 0xE8,
0xD2, 0x97, 0x8A, 0x36, 0xE1, 0x71, 0x45, 0xBD, 0x2E, 0x15, 0x2D, 0x3E, 0xC9, 0x21, 0xAC, 0xF8,
0x01, 0x2A, 0x37, 0xEF, 0xCC, 0x3E, 0xD6, 0xC2, 0xC9, 0x53, 0xE1, 0xFE, 0x70, 0x5D, 0xDF, 0x85,
0xD2, 0x3F, 0xDC, 0x7E, 0x17, 0x6A, 0x2F, 0xB3, 0xE2, 0x11, 0xAB, 0xF8, 0x0D, 0xBE, 0xB0, 0xCA,
0xDA, 0xD7, 0xDB, 0x36, 0xFC, 0x69, 0x20, 0x45, 0x3F, 0x3A, 0x90, 0x95, 0xD4, 0xF5, 0xD9, 0xC6,
0x5C, 0x2D, 0xA1, 0x68, 0x02, 0xCB, 0x38, 0xEF, 0x71, 0x4A, 0x22, 0xD5, 0x45, 0xCE, 0x7B, 0xD0,
0xA3, 0x4E, 0xE5, 0x52, 0x2C, 0xBD, 0x3E, 0x5C, 0x7A, 0xF6, 0x99, 0xC0, 0x1C, 0x54, 0xC0, 0xFC,
0x52, 0x67, 0x4F, 0x99, 0xE4, 0x1B, 0x7B, 0x77, 0x07, 0xA4, 0xBB, 0x88, 0x9D, 0x7C, 0xFD, 0xA1,
0xDE, 0xBC, 0x35, 0x40, 0x3D, 0x5D, 0x3C, 0xF5, 0x67, 0x7C, 0x60, 0xEA, 0xFE, 0xEC, 0x0B, 0xD7,
0x43, 0x00, 0x1F, 0x3C, 0x0C, 0x85, 0xBC, 0x82, 0x6B, 0xFF, 0x26, 0x47, 0x6E, 0x73, 0x79, 0xFE,
0x9A, 0x66, 0x72, 0x46, 0x41, 0x9C, 0xA3, 0x5E, 0x39, 0x83, 0xF2, 0xEE, 0xC8, 0xA7, 0x48, 0x70,
0x4D, 0x04, 0x0B, 0xB2, 0xC3, 0x6E, 0x07, 0x19, 0xF2, 0x73, 0x54, 0xF5, 0xFC, 0x0F, 0x84, 0x7D,
0x82, 0x35, 0xE2, 0x10, 0x00, 0xD2, 0xC5, 0xB1, 0xBD, 0x83, 0xCC, 0x80, 0x63, 0xFB, 0xEE, 0x03,
0x7D, 0x48, 0xDF, 0xAD, 0x98, 0x90, 0xF6, 0x55, 0x31, 0x63, 0xC0, 0xAB, 0xB1, 0xC7, 0x47, 0x3E,
0x97, 0x1D, 0xCD, 0xC7, 0xC0, 0x2B, 0x10, 0x50, 0x54, 0xFC, 0xF1, 0x45, 0x95, 0x64, 0x91, 0x6B,
0x8F, 0x43, 0x00, 0x08, 0x6F, 0x89, 0x2B, 0xEF, 0x01, 0x45, 0x01, 0x4E, 0xE4, 0x71, 0xD3, 0xBC,
0x83, 0x02, 0xDC, 0xBA, 0x26, 0x95, 0xB0, 0xAE, 0x5E, 0xC9, 0xC5, 0xD1, 0xB3, 0x1F, 0x66, 0xCE,
0x79, 0xF3, 0x66, 0x6A, 0xDF, 0x40, 0x7E, 0x47, 0x72, 0xDF, 0x94, 0x38, 0xB1, 0x24, 0x21, 0x28,
0x19, 0x8B, 0x94, 0x60, 0x0C, 0x28, 0xE9, 0xA4, 0x00, 0x19, 0x64, 0x59, 0x99, 0xB9, 0xA6, 0xA8,
0x85, 0x88, 0x87, 0xA1, 0x90, 0x5D, 0x13, 0x84, 0x13, 0x5C, 0x2F, 0xC2, 0x96, 0x81, 0xF2, 0xBD,
0x29, 0x42, 0x2B, 0xAB, 0x35, 0xBC, 0x59, 0x6B, 0x88, 0xB3, 0x20, 0xF3, 0x53, 0x0C, 0x32, 0x81,
0x86, 0x1F, 0x29, 0x9A, 0x29, 0xF8, 0xF0, 0x6A, 0x7E, 0x51, 0x91, 0x12, 0x1F, 0x68, 0xB3, 0x9D,
0x13, 0x20, 0x22, 0xB7, 0x4F, 0x26, 0xCA, 0xAD, 0x7D, 0x53, 0x93, 0xA8, 0xED, 0xA7, 0x4E, 0x56,
0x26, 0xE6, 0x24, 0x6B, 0xE5, 0x75, 0x2A, 0x85, 0x8B, 0xBA, 0x3C, 0xD3, 0x9E, 0xFB, 0xB3, 0x06,
0xCA, 0x5F, 0x94, 0x6E, 0x2E, 0xA4, 0x05, 0x41, 0x78, 0xD7, 0xC5, 0x0F, 0xE8, 0x94, 0x76, 0xC1,
0x67, 0xB0, 0xFC, 0xAB, 0x19, 0x30, 0x0C, 0x2F, 0xD0, 0x81, 0xD9, 0xFD, 0xF5, 0x1B, 0x7B, 0x1B,
0xFD, 0x80, 0x0F, 0x28, 0xB3, 0xC4, 0xE5, 0xC4, 0x57, 0xEF, 0x04, 0xCC, 0x67, 0x09, 0x95, 0x8F,
0xAF, 0x82, 0x52, 0x3E, 0x6C, 0xA7, 0x50, 0x61, 0x5F, 0x48, 0xEE, 0xE0, 0xD0, 0x8D, 0x9F, 0xEA,
0x87, 0x74, 0x20, 0xFF, 0x0F, 0xB5, 0x58, 0x4D, 0x6C, 0xDC, 0xC6, 0x15, 0x7E, 0xE4, 0xC8, 0xCB,
0xD4, 0x44, 0x76, 0x74, 0xF0, 0x21, 0x49, 0x25, 0xB1, 0x87, 0x1C, 0x1C, 0x57, 0xBB, 0xBC, 0x18,
0xC8, 0x16, 0x20, 0x77, 0xC7, 0x36, 0x90, 0x1C, 0x7C, 0xB0, 0x5B, 0xC4, 0x09, 0xD0, 0x02, 0xBD,
0xD7, 0x68, 0x62, 0x1F, 0x72, 0x50, 0xDB, 0xB5, 0xC5, 0xAA, 0x87, 0x1C, 0x82, 0xC2, 0x4E, 0xDB,
0xA0, 0xC7, 0x1A, 0x6D, 0x0E, 0xC9, 0x3A, 0x8D, 0x74, 0x10, 0x0A, 0x26, 0x91, 0x45, 0xDA, 0x46,
0x91, 0x83, 0x0F, 0x66, 0x6C, 0x20, 0x39, 0x18, 0xA8, 0x99, 0x38, 0x85, 0x11, 0x0B, 0x55, 0xC6,
0x31, 0x1D, 0x13, 0xD2, 0x2E, 0xA7, 0xDF, 0x90, 0x2B, 0x59, 0x4E, 0x6C, 0x24, 0x16, 0x14, 0x8A,
0xDA, 0xE5, 0x70, 0x87, 0xEF, 0xBD, 0x79, 0x3F, 0xDF, 0xFB, 0x86, 0x8F, 0x75, 0x3A, 0x8F, 0xD3,
0xC8, 0xD8, 0xD8, 0xE4, 0x64, 0xA3, 0xD1, 0xF0, 0xFD, 0x76, 0xBB, 0xFD, 0x14, 0xE1, 0x90, 0xC4,
0x62, 0x8A, 0x72, 0xAE, 0xE4, 0x19, 0x7D, 0xE5, 0x10, 0x85, 0x64, 0xA6, 0x64, 0x07, 0xD4, 0x24,
0xEA, 0x12, 0x65, 0x64, 0xE6, 0x35, 0x53, 0xF5, 0x8D, 0x28, 0xA8, 0xE6, 0x56, 0x87, 0xA1, 0x52,
0x8A, 0x54, 0xE0, 0x88, 0x51, 0x4C, 0xA6, 0x06, 0x91, 0x99, 0xAC, 0x7D, 0x99, 0x51, 0x4F, 0x74,
0x54, 0xBE, 0xE1, 0x26, 0xC3, 0x97, 0x47, 0xC4, 0x05, 0x31, 0xA5, 0x06, 0x1D, 0xA5, 0x30, 0xA6,
0xD6, 0xE1, 0x71, 0x57, 0xF5, 0xB9, 0xC8, 0xC6, 0xA9, 0x35, 0x49, 0x93, 0xE5, 0xE9, 0x71, 0x9A,
0x77, 0x96, 0x72, 0x3F, 0x7A, 0x71, 0x94, 0x1E, 0x99, 0x22, 0xF3, 0x5A, 0x42, 0x9E, 0x03, 0x5B,
0x32, 0x92, 0x56, 0xDC, 0x24, 0x9F, 0xC5, 0x86, 0x0C, 0x89, 0x1F, 0x20, 0x6A, 0x27, 0xF4, 0xC2,
0xE0, 0xA0, 0xAD, 0x94, 0xB6, 0x90, 0x38, 0xC1, 0x18, 0x59, 0x8E, 0x64, 0x39, 0xC2, 0x97, 0x77,
0xEB, 0xA2, 0x3E, 0x4F, 0x62, 0xF0, 0x83, 0xE1, 0xB5, 0x36, 0xDC, 0x55, 0x7B, 0x57, 0x16, 0x79,
0x69, 0x4F, 0x9F, 0x48, 0x09, 0xA6, 0x12, 0xCF, 0xFE, 0x24, 0x65, 0x1F, 0x04, 0x9C, 0x0B, 0xCF,
0xB9, 0x94, 0xDA, 0x05, 0x19, 0x03, 0xA2, 0x05, 0xA2, 0x9B, 0x64, 0x5D, 0xB8, 0x71, 0xC6, 0x56,
0x27, 0xCB, 0x15, 0x7B, 0x13, 0xDE, 0xC4, 0x70, 0xF1, 0x74, 0xA4, 0x80, 0x96, 0xBF, 0x1C, 0xD1,
0x1E, 0xB1, 0xE2, 0x3A, 0x1D, 0x62, 0xF1, 0x9C, 0x53, 0x58, 0xFB, 0x44, 0xB6, 0xC3, 0x1E, 0xB3,
0x05, 0x8D, 0xCD, 0x41, 0xFA, 0xD3, 0x01, 0x4C, 0x59, 0x86, 0xC3, 0xD8, 0xDB, 0x50, 0xF7, 0xE8,
0x51, 0x9F, 0x68, 0x77, 0xD2, 0x25, 0xF3, 0x5C, 0x1C, 0xE5, 0x75, 0x16, 0xEC, 0x12, 0xD2, 0x0A,
0x60, 0xAA, 0xF5, 0x59, 0x4D, 0xC2, 0x9B, 0x83, 0x35, 0xD1, 0x4E, 0xFE, 0xF8, 0x8B, 0x54, 0xAF,
0xBD, 0xD3, 0xFC, 0x65, 0xAB, 0xDE, 0x9A, 0x70, 0x8B, 0x6D, 0x82, 0x82, 0x1F, 0xF1, 0x7D, 0x49,
0xD8, 0xB4, 0xCF, 0xC9, 0xAE, 0xC3, 0x92, 0x8C, 0x9D, 0x95, 0xD6, 0x59, 0x89, 0x91, 0x3D, 0x93,
0x8C, 0x18, 0xD4, 0xEB, 0xF5, 0x94, 0x5E, 0x38, 0xDF, 0x70, 0xDA, 0xBD, 0x7F, 0xA8, 0x7F, 0x1F,
0xBA, 0xAF, 0xB1, 0xDB, 0x9E, 0x83, 0xB1, 0x9D, 0x01, 0x8C, 0xBD, 0xB9, 0x60, 0x8F, 0xB1, 0x58,
0x8E, 0xCD, 0x71, 0x16, 0x3F, 0x1D, 0xF8, 0x2F, 0xD1, 0x32, 0xA9, 0x94, 0xBD, 0x0D, 0x4F, 0x3C,
0x7A, 0x14, 0xBE, 0xD8, 0x9D, 0x78, 0x0E, 0x8C, 0x95, 0x8D, 0x3A, 0x9B, 0x11, 0x4F, 0xDE, 0xCF,
0xD8, 0x5D, 0xBD, 0xDE, 0x9F, 0x95, 0x82, 0x74, 0xB3, 0x60, 0x1F, 0x7D, 0x92, 0x4C, 0xCE, 0x59,
0xBF, 0x36, 0x2E, 0x07, 0x72, 0x3A, 0x33, 0xE0, 0xB1, 0xC9, 0xD2, 0x10, 0x9D, 0x2F, 0x52, 0x3B,
0xDB, 0x55, 0xEA, 0xA2, 0x52, 0xB2, 0x1A, 0x6C, 0xF8, 0x85, 0xD6, 0x7E, 0x31, 0x84, 0x9B, 0xB7,
0x1A, 0x54, 0xC7, 0xDF, 0x24, 0xCD, 0x9B, 0x89, 0x2D, 0x1A, 0x34, 0x5D, 0xEC, 0x7A, 0xCB, 0x10,
0x76, 0xC1, 0xF6, 0xA6, 0xD4, 0xA2, 0x71, 0x73, 0x91, 0xA2, 0x18, 0x8F, 0x73, 0x62, 0x17, 0x96,
0x92, 0xD9, 0x80, 0x28, 0x77, 0xAD, 0xF8, 0x14, 0x1D, 0xA4, 0x1D, 0x19, 0xF9, 0x0F, 0x3A, 0x73,
0xF2, 0xFB, 0x34, 0x50, 0xA7, 0xFF, 0xB7, 0x5A, 0x8C, 0x67, 0x65, 0xB6, 0x6C, 0x3C, 0x4D, 0xA5,
0x5E, 0x51, 0xB7, 0xAF, 0xA9, 0xFC, 0x29, 0x55, 0x6C, 0x8F, 0xD4, 0xCC, 0xAC, 0x4A, 0x4F, 0xAB,
0x7C, 0x17, 0x06, 0xD3, 0x6A, 0xE6, 0x84, 0x4A, 0xFF, 0xAE, 0xF2, 0x9D, 0x6E, 0xB1, 0x9D, 0x5E,
0x98, 0x09, 0xE8, 0xD4, 0x29, 0xDA, 0xB9, 0x93, 0xB6, 0x6F, 0x27, 0xF3, 0x3E, 0x03, 0x1C, 0xED,
0x4E, 0x7B, 0xA4, 0x6E, 0xA4, 0x56, 0xDC, 0x78, 0xE1, 0x02, 0x8A, 0xC2, 0xE5, 0xB7, 0x2E, 0x90,
0xE4, 0x6B, 0x67, 0x0D, 0x45, 0x53, 0x18, 0xFF, 0x95, 0xE9, 0xF8, 0x6E, 0xF6, 0x47, 0xBA, 0x16,
0xEC, 0x9E, 0x9B, 0xE4, 0x03, 0x7A, 0x8E, 0x1E, 0x31, 0xA9, 0xC9, 0x03, 0x44, 0x18, 0xA1, 0x35,
0x64, 0x97, 0xC2, 0x36, 0x3E, 0x11, 0x60, 0xDC, 0xF1, 0xB9, 0x40, 0x80, 0x0D, 0x09, 0x9F, 0xB8,
0x31, 0x49, 0x76, 0x95, 0x2C, 0x31, 0xE2, 0x69, 0x07, 0x4A, 0x54, 0x16, 0x43, 0xE6, 0xC1, 0x17,
0xDA, 0xA3, 0x96, 0x48, 0x49, 0x7A, 0x3C, 0x66, 0x48, 0x2E, 0xB2, 0x27, 0x18, 0xEA, 0x56, 0xB6,
0x10, 0xEE, 0xBD, 0xE7, 0xE1, 0xAF, 0x71, 0x4E, 0x66, 0xAC, 0x94, 0x98, 0x30, 0x7B, 0x79, 0x59,
0xC2, 0xC8, 0x50, 0xAE, 0x6B, 0xDC, 0xA3, 0x4E, 0x60, 0x26, 0xEC, 0x3F, 0x10, 0x3F, 0xD2, 0xA2,
0x39, 0xA2, 0x14, 0x41, 0x66, 0x01, 0xC4, 0xD7, 0x75, 0xE1, 0xB6, 0xEA, 0x4E, 0x4A, 0xE9, 0x97,
0x2B, 0x92, 0xBD, 0xB2, 0xC7, 0x8C, 0xEB, 0x1E, 0xD9, 0xBA, 0x9E, 0x3D, 0xCC, 0xC6, 0x97, 0x44,
0x5D, 0x5B, 0xA2, 0x1C, 0x37, 0x20, 0xDE, 0x5C, 0x39, 0x35, 0x41, 0x5C, 0x55, 0xE8, 0xE0, 0x64,
0x90, 0xF2, 0x9B, 0x63, 0x98, 0x8F, 0xB9, 0xA8, 0x99, 0x09, 0x4C, 0xDA, 0xB6, 0x40, 0xF3, 0xC4,
0xB5, 0x7E, 0x6A, 0x9A, 0x98, 0xC6, 0xAD, 0x20, 0x25, 0xCE, 0x99, 0x7C, 0xF7, 0x58, 0xC3, 0x46,
0xCA, 0xB4, 0xC6, 0x65, 0x65, 0xB3, 0x91, 0xCC, 0xC1, 0xC6, 0xB3, 0xB1, 0x24, 0x7B, 0x1F, 0x12,
0xAD, 0xAE, 0x8D, 0xD6, 0x0B, 0xA6, 0x97, 0xF5, 0xC7, 0x63, 0xBA, 0x6A, 0x99, 0xA4, 0x9A, 0xD0,
0x8A, 0x46, 0x31, 0x5B, 0x6B, 0xE9, 0x92, 0x95, 0xD0, 0x31, 0xFD, 0xE1, 0x6B, 0x6F, 0x61, 0x15,
0x80, 0xB1, 0xCE, 0x9E, 0xB9, 0x69, 0x95, 0xFC, 0xF8, 0xB3, 0x2A, 0x57, 0xDB, 0x54, 0xE2, 0x0F,
0x2A, 0x00, 0x17, 0x69, 0x75, 0x4F, 0xA7, 0xA0, 0x8D, 0x6B, 0x0E, 0xD5, 0x13, 0xF3, 0x44, 0xFE,
0x14, 0x5C, 0x09, 0x5D, 0x21, 0x20, 0x2B, 0x73, 0x20, 0x89, 0x0B, 0x33, 0xB5, 0x03, 0x76, 0xE3,
0x74, 0x6C, 0x01, 0xB3, 0xF8, 0xEB, 0xCF, 0x4B, 0xC8, 0x95, 0xC0, 0xC5, 0x10, 0xB3, 0xBA, 0x70,
0x32, 0xF2, 0x8B, 0xDC, 0x4A, 0xD8, 0x31, 0xFC, 0xE7, 0xA4, 0xDD, 0x4A, 0x4C, 0x6C, 0xBD, 0x7C,
0x3B, 0x29, 0xFD, 0x4A, 0x5D, 0xFC, 0x92, 0xDA, 0x5B, 0x2B, 0x1F, 0x39, 0x46, 0xD1, 0x3E, 0x61,
0x2C, 0x29, 0x32, 0x82, 0xA9, 0xAD, 0xB7, 0x7D, 0x0A, 0xD0, 0x37, 0xD5, 0xA0, 0xF5, 0x63, 0xAB,
0x64, 0x1B, 0xA2, 0x92, 0xB1, 0xB3, 0x85, 0x64, 0xDD, 0x49, 0x34, 0x3E, 0x5F, 0xC9, 0xDD, 0x12,
0xBB, 0x5D, 0xDD, 0xA5, 0x58, 0x09, 0x6F, 0x61, 0xAE, 0x93, 0x47, 0x67, 0x8F, 0x99, 0x66, 0xBA,
0x13, 0xE8, 0x4B, 0xDD, 0x94, 0x20, 0x92, 0xBF, 0xFE, 0x1C, 0x66, 0x2B, 0x15, 0xB3, 0x84, 0xDF,
0x78, 0x93, 0x8E, 0xF7, 0x74, 0x37, 0x42, 0xB1, 0x91, 0x71, 0xFB, 0x10, 0x2E, 0x7D, 0x9D, 0x74,
0xC8, 0xB9, 0x4C, 0x27, 0x07, 0x2E, 0xA1, 0x4B, 0xA9, 0x6B, 0xC8, 0x7C, 0x2D, 0x17, 0xC7, 0x74,
0x21, 0x1C, 0xA5, 0xD0, 0x6F, 0x9E, 0xE4, 0x71, 0xD9, 0x73, 0x58, 0x5A, 0xF5, 0x2F, 0x18, 0x82,
0x4C, 0x2E, 0xD3, 0xD5, 0xA9, 0x86, 0x25, 0x5A, 0xE9, 0x5B, 0xC3, 0x15, 0xDA, 0x45, 0x24, 0x6A,
0x0A, 0x3D, 0x6C, 0xBE, 0x6A, 0xB0, 0xB5, 0xB4, 0xF4, 0xAC, 0xF1, 0x12, 0x04, 0x94, 0x09, 0xEE,
0x08, 0xBD, 0x0E, 0xAC, 0x6C, 0x0C, 0x03, 0x2C, 0xF6, 0x88, 0x1A, 0x6C, 0x68, 0xED, 0xB8, 0xBC,
0x7D, 0x68, 0xBF, 0x52, 0x6E, 0xEF, 0xCD, 0x7B, 0xEF, 0xE2, 0xB2, 0x9C, 0x5B, 0x62, 0xB3, 0x36,
0x02, 0x66, 0x1F, 0xDD, 0xAC, 0x04, 0x94, 0xAA, 0x2B, 0xCD, 0x4F, 0xE4, 0xB8, 0x91, 0x6E, 0x52,
0x82, 0x0F, 0x4A, 0xE0, 0x0D, 0x29, 0x87, 0xBA, 0xA2, 0xD4, 0x4B, 0xF7, 0x10, 0x94, 0x33, 0x87,
0x7E, 0xA6, 0xD4, 0x85, 0x1B, 0xBD, 0xE6, 0x3D, 0x77, 0x43, 0x0D, 0xEB, 0x57, 0x74, 0x14, 0x4C,
0xC9, 0x52, 0x96, 0x98, 0xE8, 0x5D, 0xEA, 0x48, 0xCE, 0x85, 0x4F, 0x19, 0xE2, 0xF4, 0xF5, 0xAF,
0x5A, 0xD1, 0x19, 0x68, 0xCF, 0xBB, 0x86, 0xD4, 0x88, 0xFA, 0xAD, 0x33, 0x8D, 0x3E, 0xA9, 0x20,
0xCB, 0xE6, 0x50, 0x86, 0x60, 0x0F, 0x11, 0x14, 0x20, 0x36, 0x3A, 0xD2, 0xF7, 0xBF, 0x00, 0x73,
0x52, 0xD9, 0x5D, 0xFE, 0xD0, 0x19, 0xB8, 0x39, 0x4B, 0x1E, 0xFC, 0xF7, 0xC3, 0x1C, 0xDD, 0x59,
0x7D, 0xAE, 0x97, 0x9B, 0x51, 0xD7, 0x88, 0x84, 0x83, 0x55, 0x20, 0x0F, 0x3A, 0x1A, 0xD9, 0xE2,
0x6E, 0x99, 0xC6, 0x68, 0x35, 0x2A, 0xB6, 0xFF, 0xA6, 0x32, 0x33, 0x45, 0xCE, 0xE4, 0xB8, 0xE1,
0x63, 0x86, 0xA3, 0x83, 0x85, 0x19, 0x76, 0xEC, 0x90, 0x93, 0xE8, 0xF4, 0x36, 0x54, 0x81, 0x54,
0x1D, 0x35, 0x88, 0xF5, 0x27, 0xC9, 0x8F, 0x52, 0x4A, 0x9A, 0xA5, 0x27, 0x33, 0x32, 0xAE, 0x00,
0x60, 0x67, 0x53, 0x6A, 0xBE, 0x1F, 0xD3, 0x7B, 0x57, 0x62, 0x73, 0xE9, 0x80, 0xB0, 0xFF, 0xE9,
0x50, 0x73, 0xBE, 0x43, 0xEF, 0xA5, 0xBE, 0xB9, 0x14, 0x2C, 0xD8, 0xEF, 0x50, 0xDE, 0x0C, 0x29,
0x7B, 0x2F, 0x35, 0x6F, 0x2E, 0x05, 0xEC, 0xFA, 0x3B, 0x64, 0x2D, 0x87, 0x64, 0xAF, 0x20, 0x79,
0x97, 0x00, 0xB0, 0x41, 0x55, 0xCA, 0xE9, 0x30, 0x39, 0x4B, 0x5C, 0x7D, 0xB9, 0xAA, 0x6F, 0x13,
0x86, 0x43, 0x7B, 0x6C, 0xA5, 0x46, 0x1F, 0x13, 0xF8, 0x0C, 0x50, 0x5D, 0xC2, 0x03, 0x6D, 0xC4,
0xD1, 0xBE, 0x0A, 0xF5, 0x77, 0x30, 0xF9, 0x18, 0x52, 0xD9, 0xC1, 0x93, 0x16, 0x6E, 0x98, 0xB7,
0x90, 0xBF, 0x39, 0x56, 0xD2, 0x45, 0xCE, 0xB6, 0xCD, 0x9C, 0xA6, 0xC9, 0x5D, 0x01, 0x18, 0x45,
0x05, 0x6D, 0x38, 0xEC, 0xB8, 0x4A, 0x74, 0xFD, 0x6F, 0x24, 0xDF, 0xAB, 0x2A, 0x9D, 0x78, 0xA0,
0x1A, 0x34, 0x85, 0xA7, 0x5A, 0x2C, 0xF8, 0x9E, 0x54, 0x6D, 0x23, 0x34, 0xE2, 0xEC, 0x28, 0x59,
0x47, 0xFA, 0x64, 0x06, 0xE1, 0x70, 0x95, 0x80, 0x1D, 0x40, 0x02, 0x1C, 0x6C, 0x49, 0x1E, 0x50,
0x1B, 0xAB, 0xB6, 0xCE, 0x6B, 0x41, 0x90, 0xEC, 0x0E, 0x25, 0xDF, 0xA3, 0xCA, 0xBE, 0x08, 0x5A,
0xFD, 0xA9, 0x36, 0x06, 0x2D, 0x28, 0xB7, 0x61, 0x1D, 0x45, 0x4B, 0x7D, 0xAA, 0xA9, 0x7C, 0x83,
0xEB, 0xFE, 0x10, 0xA3, 0x69, 0xCB, 0x0D, 0x37, 0xB6, 0x5E, 0x0B, 0x08, 0x5A, 0x9B, 0xBA, 0xFC,
0xF7, 0x92, 0x5D, 0x8F, 0x09, 0x7C, 0x74, 0x11, 0x19, 0x1C, 0x58, 0xE7, 0x53, 0x87, 0x72, 0x8F,
0xFC, 0x51, 0x1A, 0xC1, 0x9C, 0x11, 0x28, 0xFE, 0x6B, 0x00, 0xC5, 0x71, 0xA5, 0xD8, 0x2C, 0xA0,
0xF8, 0x0E, 0x14, 0x67, 0x50, 0x1C, 0x42, 0x71, 0x17, 0x8A, 0x3D, 0x28, 0x6E, 0x40, 0xF1, 0x04,
0x14, 0x73, 0x28, 0x3E, 0x20, 0xD8, 0xA7, 0xAB, 0x81, 0x21, 0xA7, 0xE3, 0x4A, 0xB1, 0xA9, 0x96,
0xFA, 0xC6, 0x57, 0x50, 0x3C, 0x3A, 0xD4, 0xAC, 0xA1, 0xD3, 0x2F, 0x39, 0x3F, 0x55, 0xB1, 0x02,
0x22, 0xAA, 0x40, 0xB3, 0x8D, 0x6F, 0xFD, 0x0A, 0xC9, 0x58, 0x45, 0xE1, 0x78, 0xC4, 0x2E, 0x65,
0xD4, 0xE7, 0x08, 0x8F, 0xAB, 0x82, 0x75, 0x2F, 0xC1, 0x33, 0x3A, 0xC1, 0xA7, 0x34, 0x8F, 0xD9,
0x42, 0xB9, 0x06, 0x26, 0x75, 0x12, 0xDD, 0x51, 0xCC, 0x60, 0x72, 0x0B, 0xE5, 0x3A, 0x40, 0x3F,
0x19, 0xAE, 0x45, 0x58, 0x7C, 0x27, 0x81, 0xF8, 0x5A, 0x45, 0x35, 0x2F, 0x90, 0x71, 0x2B, 0x26,
0xDF, 0x15, 0x3C, 0x56, 0xB3, 0xD2, 0xDC, 0x90, 0x3B, 0xBA, 0xDA, 0x40, 0x9E, 0x34, 0x7E, 0x57,
0x4E, 0x80, 0x12, 0x07, 0x80, 0x93, 0x35, 0x51, 0x90, 0x08, 0x2C, 0x85, 0x68, 0x4A, 0x19, 0xF8,
0x24, 0x34, 0xB3, 0xCB, 0x48, 0xA3, 0xE5, 0xAA, 0xF9, 0x6A, 0x80, 0xF0, 0x86, 0x41, 0x89, 0xAB,
0x9E, 0x76, 0x77, 0x38, 0xA5, 0x31, 0x5A, 0x9F, 0xD1, 0x0D, 0x81, 0x8D, 0x5B, 0x58, 0xEB, 0x87,
0xD4, 0x0E, 0xC9, 0x0D, 0xC9, 0x29, 0x3F, 0x71, 0xDD, 0x8F, 0x54, 0x86, 0x0D, 0x66, 0xB8, 0x36,
0x33, 0x1C, 0x16, 0x61, 0xCA, 0x0A, 0xB5, 0x57, 0x9A, 0xA8, 0x3C, 0xCF, 0x27, 0x87, 0x0B, 0xD0,
0x64, 0x47, 0x64, 0xC0, 0x66, 0x3B, 0xE0, 0x7B, 0x24, 0x4B, 0x3A, 0x22, 0x63, 0xB9, 0x4F, 0xEE,
0x09, 0x61, 0xDC, 0x49, 0xA8, 0x99, 0x91, 0x7D, 0x66, 0x94, 0x5D, 0xDD, 0x7F, 0xFA, 0xD6, 0x87,
0x4A, 0xDE, 0xCD, 0x17, 0xAE, 0x29, 0x70, 0xB5, 0xA0, 0xDA, 0x1B, 0x4C, 0xF5, 0xEB, 0x7B, 0x72,
0xDD, 0xEA, 0x60, 0x1A, 0xC7, 0x5E, 0x37, 0xEA, 0xDD, 0x49, 0x58, 0x81, 0xDA, 0xA4, 0x45, 0x69,
0xDD, 0x59, 0x59, 0xFD, 0x40, 0xED, 0x5F, 0x73, 0xB1, 0x40, 0x1F, 0x87, 0x07, 0x5A, 0x0F, 0xFB,
0x24, 0xCA, 0x1F, 0xF4, 0x4D, 0x66, 0x75, 0xCD, 0xB3, 0x1F, 0xE2, 0x49, 0x31, 0xEA, 0x26, 0xC9,
0x75, 0x55, 0xD3, 0xFE, 0x27, 0xE3, 0x2D, 0xB0, 0x07, 0x76, 0xF2, 0x78, 0x09, 0xB9, 0xFA, 0xC9,
0x48, 0xB9, 0x37, 0xCE, 0x64, 0x08, 0x24, 0x1B, 0x90, 0xBB, 0x60, 0x0C, 0x8A, 0xC5, 0x9B, 0xEA,
0xD2, 0x90, 0x84, 0xDB, 0x62, 0x8D, 0x73, 0x7D, 0xF7, 0xC7, 0x76, 0xA0, 0x51, 0xD0, 0x64, 0x8B,
0x4E, 0xCD, 0x19, 0x4B, 0xC2, 0xD0, 0x04, 0x87, 0x9E, 0x38, 0xC9, 0x95, 0xFC, 0x09, 0x48, 0x07,
0x10, 0x5E, 0x6F, 0x9B, 0x6D, 0xF5, 0x65, 0x71, 0xFA, 0xAA, 0x40, 0xE2, 0x74, 0x12, 0x73, 0x35,
0x76, 0xAE, 0x2E, 0x7D, 0xE1, 0x0C, 0x26, 0x2B, 0x2D, 0xBF, 0x02, 0xA6, 0x5C, 0x56, 0xC9, 0xC4,
0x33, 0x6A, 0x06, 0xCF, 0x16, 0x9A, 0xCF, 0x2C, 0xE8, 0xA8, 0x2F, 0x90, 0x5F, 0xC3, 0x1E, 0x75,
0xE0, 0x7E, 0x5E, 0xF4, 0xDE, 0xEC, 0xEA, 0xDB, 0xB9, 0xFE, 0xC8, 0x34, 0xCE, 0x86, 0xA6, 0xA2,
0x91, 0xE9, 0xD9, 0x57, 0x57, 0x72, 0x67, 0xA0, 0x21, 0xB6, 0x3C, 0x0E, 0x83, 0x15, 0xC5, 0x83,
0x9F, 0xA3, 0xFE, 0x3C, 0xED, 0xA2, 0xB5, 0xAE, 0xAE, 0xBD, 0x95, 0xE8, 0x3E, 0xC0, 0x57, 0xB0,
0xD9, 0x0F, 0x58, 0x69, 0x11, 0x42, 0x32, 0x41, 0xDB, 0x32, 0x9A, 0x16, 0x15, 0xDF, 0xD0, 0x3C,
0xC9, 0x5B, 0x4B, 0xD6, 0xC3, 0xC2, 0x52, 0x29, 0x7F, 0x2D, 0x6F, 0x93, 0xEF, 0x51, 0xB3, 0x4B,
0x6E, 0xA4, 0xD4, 0x62, 0xAF, 0x17, 0x96, 0xAE, 0x00, 0x66, 0xB8, 0x62, 0x84, 0xAF, 0x2C, 0x18,
0xEB, 0xF9, 0xAE, 0x81, 0x3D, 0xD0, 0x7B, 0x96, 0xD6, 0xA6, 0x1E, 0x3F, 0x0E, 0xCC, 0x13, 0xEC,
0x7C, 0xB2, 0xBD, 0x8C, 0xF2, 0xC3, 0x3E, 0x6E, 0x9D, 0x4B, 0xD9, 0xB9, 0xE1, 0xDE, 0xE4, 0xE1,
0x9E, 0x35, 0x81, 0xA5, 0x1E, 0x9D, 0x02, 0x23, 0xF6, 0x59, 0xF2, 0xF5, 0x13, 0xF5, 0x6B, 0x9F,
0x95, 0x58, 0xD0, 0x8E, 0x6F, 0xFE, 0x56, 0xF6, 0xD2, 0x7C, 0x9D, 0xCE, 0x20, 0x01, 0x1E, 0xC4,
0x62, 0x2A, 0x2A, 0xBB, 0xCE, 0x62, 0x0C, 0xF1, 0x60, 0x06, 0x53, 0x76, 0x83, 0x1A, 0xF1, 0xAB,
0x31, 0x45, 0x82, 0xC0, 0x3A, 0xFA, 0x3E, 0x8D, 0x68, 0x82, 0x10, 0x1A, 0x8B, 0x07, 0xC0, 0xCC,
0x2E, 0x65, 0x16, 0xE0, 0xBE, 0x0D, 0xA2, 0xB2, 0x0C, 0x38, 0x0B, 0xE8, 0xB7, 0xA0, 0x21, 0xD8,
0xD5, 0x1F, 0x08, 0xEC, 0xB8, 0x98, 0x8D, 0xED, 0x0A, 0xD0, 0x0C, 0x31, 0x8A, 0xDE, 0xD8, 0x88,
0xE4, 0x93, 0xB6, 0x1E, 0x1F, 0x3C, 0x2C, 0xBE, 0x54, 0x52, 0xFD, 0xB4, 0xDF, 0x27, 0x2F, 0x7F,
0xF0, 0x66, 0x3F, 0x2B, 0x1B, 0x81, 0xDE, 0x8C, 0x69, 0xB6, 0x00, 0x67, 0x55, 0x5B, 0xA5, 0xDA,
0x1B, 0xC8, 0xCC, 0x84, 0xBF, 0x76, 0x86, 0x07, 0x36, 0xB6, 0xC4, 0xB7, 0x25, 0x81, 0xD9, 0x80,
0xE0, 0x98, 0xD0, 0xFE, 0x2E, 0x4C, 0xC1, 0xDA, 0xEC, 0x98, 0x6B, 0xED, 0xD6, 0x06, 0xF8, 0x5F,
0x28, 0x7D, 0xED, 0x95, 0xEF, 0x32, 0x36, 0x2B, 0x44, 0x63, 0x4D, 0x9F, 0xEC, 0x57, 0x03, 0x4B,
0x4C, 0x6D, 0x4E, 0x88, 0x18, 0x21, 0xF5, 0x2C, 0xFD, 0x4B, 0x05, 0xBB, 0x4B, 0x47, 0xA0, 0x20,
0x69, 0x5A, 0x89, 0xF6, 0x33, 0x59, 0x9B, 0x5C, 0x4E, 0xEC, 0x63, 0xF0, 0xB7, 0xB4, 0x14, 0xB2,
0x4C, 0x26, 0x3A, 0x6F, 0x0E, 0x60, 0x74, 0xA9, 0xC3, 0x56, 0x22, 0x72, 0xD6, 0x39, 0x4D, 0xE6,
0x69, 0x1E, 0x3D, 0x3C, 0x1E, 0x5A, 0xC0, 0x63, 0xD5, 0xAB, 0x3B, 0xC4, 0xF5, 0xE0, 0xF0, 0xB5,
0xCF, 0x09, 0x75, 0x17, 0x4C, 0x49, 0xEF, 0xBB, 0xAB, 0x57, 0x39, 0xF4, 0xC4, 0x9F, 0x82, 0x69,
0x25, 0x8F, 0x6B, 0xD1, 0x11, 0xA7, 0xDF, 0x7D, 0x1C, 0x7B, 0x20, 0x93, 0xCD, 0xB0, 0x69, 0x2F,
0x3B, 0xE6, 0xF5, 0x8B, 0x94, 0x2B, 0xE1, 0xB9, 0x81, 0x16, 0xCD, 0xBE, 0x28, 0x2A, 0x61, 0x65,
0xAC, 0x74, 0x6E, 0xC0, 0x3B, 0x96, 0x28, 0xE3, 0x4E, 0x07, 0xA5, 0xCE, 0x79, 0x7E, 0xA0, 0xEC,
0x27, 0xD9, 0xD7, 0x07, 0x40, 0xFD, 0xFD, 0x31, 0xFF, 0xB0, 0x98, 0xCD, 0x9C, 0xA2, 0xB1, 0x31,
0x56, 0x7E, 0x79, 0x8E, 0xD3, 0xA6, 0x85, 0x70, 0x60, 0x0B, 0x62, 0xF5, 0x4A, 0x6C, 0x89, 0xD6,
0xA6, 0x85, 0x60, 0xB3, 0xD2, 0xE0, 0xEB, 0x04, 0xCF, 0xD8, 0x77, 0x9F, 0xE7, 0xEE, 0x0E, 0x32,
0x3A, 0x06, 0x57, 0x3F, 0xBB, 0x12, 0x25, 0xD3, 0xF9, 0xFC, 0x9A, 0x84, 0x7E, 0xB9, 0x1A, 0xA4,
0xDD, 0xCE, 0x4A, 0x06, 0x3D, 0x9F, 0xEA, 0x67, 0xD0, 0xEB, 0x6C, 0x90, 0xAB, 0xC4, 0x37, 0xA4,
0x8D, 0xB6, 0x28, 0x11, 0x52, 0x87, 0xAC, 0x13, 0x82, 0xD0, 0xB8, 0x9B, 0x69, 0x89, 0x7C, 0xFD,
0xD2, 0x03, 0xBC, 0xEC, 0xD1, 0xF0, 0x69, 0x94, 0x90, 0x9B, 0x7C, 0xE3, 0x8D, 0x57, 0x76, 0x58,
0x7C, 0x85, 0x4A, 0xDA, 0x83, 0x4A, 0xF2, 0x73, 0xDD, 0x20, 0x9D, 0xF5, 0x33, 0x27, 0xB7, 0x4F,
0x6D, 0xE0, 0xF6, 0xEA, 0x52, 0x76, 0x5B, 0x25, 0xDF, 0x7C, 0x5B, 0x56, 0xBE, 0x30, 0xEE, 0xEA,
0x77, 0xB2, 0xD5, 0xB1, 0x83, 0x8C, 0x5F, 0x04, 0x7A, 0x4D, 0x5D, 0x9F, 0x9A, 0x56, 0xCC, 0x45,
0x66, 0xC5, 0x4D, 0x33, 0x65, 0x31, 0x28, 0x41, 0x97, 0x26, 0x7C, 0x62, 0x17, 0x89, 0xDE, 0x0F,
0x74, 0x15, 0xDC, 0x45, 0xE6, 0xA6, 0xDE, 0xD2, 0x9A, 0xD8, 0x9C, 0x01, 0x1C, 0xE8, 0xFF, 0xAD,
0x59, 0x4F, 0x6C, 0x14, 0xD7, 0x19, 0xFF, 0xDE, 0x8C, 0xCD, 0x54, 0x8C, 0xEA, 0xE7, 0xAA, 0x8E,
0x2A, 0x41, 0xF0, 0xE4, 0x90, 0x43, 0x55, 0xE1, 0x9D, 0x4B, 0x0E, 0x44, 0xDA, 0xD9, 0x1D, 0x70,
0x1B, 0x0E, 0xA8, 0xC2, 0x6D, 0x71, 0x72, 0xE8, 0x81, 0x4B, 0x0F, 0x55, 0xA4, 0xC6, 0x39, 0x44,
0x15, 0xAD, 0xD6, 0xEC, 0xA4, 0x39, 0xE6, 0x60, 0x38, 0xE4, 0xDA, 0xA4, 0x6D, 0x0E, 0xC5, 0x28,
0x98, 0x83, 0x85, 0xB6, 0x64, 0xED, 0x9D, 0x40, 0x25, 0x0E, 0x1C, 0x32, 0x85, 0x46, 0x39, 0x44,
0x0A, 0xD3, 0x34, 0x51, 0x15, 0x2C, 0x85, 0x09, 0x0C, 0x30, 0xB1, 0x77, 0xF6, 0xF5, 0xF7, 0xBD,
0xD9, 0x85, 0x5D, 0x6C, 0x07, 0x3B, 0x78, 0xFF, 0xBF, 0xB7, 0x6F, 0xDE, 0xFB, 0xBD, 0xEF, 0x7D,
0x7F, 0x7E, 0xDF, 0x37, 0xD4, 0xEA, 0x10, 0xF1, 0x9B, 0x1F, 0x66, 0x48, 0x64, 0xC7, 0x44, 0x32,
0x21, 0x1A, 0x5F, 0x24, 0xF2, 0x4E, 0x10, 0x95, 0xCB, 0x44, 0x8D, 0x09, 0xA2, 0xD4, 0x21, 0x91,
0x48, 0xDF, 0x88, 0xED, 0xC0, 0xBC, 0x79, 0x36, 0xB4, 0x94, 0x8A, 0xE4, 0x5B, 0x2F, 0x26, 0x0E,
0x51, 0x52, 0xC2, 0x08, 0x8C, 0xAA, 0xD5, 0x70, 0x45, 0x4A, 0xE4, 0xDA, 0x2A, 0x76, 0x55, 0x80,
0xF9, 0xF6, 0x9C, 0x92, 0x2A, 0x79, 0xDE, 0x8A, 0xC9, 0x0A, 0x49, 0x62, 0x2A, 0x5B, 0xDD, 0xEE,
0x9C, 0xBD, 0xE1, 0xCB, 0x8C, 0xAA, 0x91, 0xB1, 0x16, 0x3A, 0x37, 0x56, 0x6E, 0x39, 0xF9, 0x7E,
0x5E, 0xD9, 0x1F, 0xC6, 0x3C, 0x23, 0x44, 0xF5, 0x76, 0x81, 0x60, 0x07, 0xD1, 0x0C, 0xD3, 0xD4,
0x7E, 0x33, 0xA8, 0xB6, 0xC9, 0x65, 0x48, 0xE2, 0x0C, 0x29, 0x65, 0x9E, 0x3A, 0x89, 0x01, 0x18,
0x8B, 0x35, 0x5A, 0xCA, 0xBD, 0xB9, 0x94, 0x92, 0x0A, 0xCC, 0x9C, 0xDC, 0xA6, 0xC8, 0x3B, 0xCB,
0x5F, 0xAB, 0x6B, 0xE1, 0xCE, 0x2D, 0x8F, 0x99, 0xD0, 0xA4, 0xF3, 0x78, 0xF3, 0xBE, 0x30, 0x19,
0x29, 0xBC, 0x9F, 0xA2, 0x97, 0x7D, 0x08, 0x67, 0xE4, 0x60, 0xA6, 0x91, 0x60, 0x48, 0xD9, 0x50,
0x6D, 0xF7, 0x66, 0x73, 0x96, 0xCA, 0x19, 0x95, 0x53, 0x6A, 0x36, 0x45, 0xBB, 0xBE, 0xD0, 0xD4,
0xF2, 0x39, 0xC0, 0xD7, 0x8A, 0x88, 0x04, 0x66, 0xC0, 0x51, 0x8D, 0x15, 0xF2, 0x81, 0xA8, 0x20,
0x57, 0xBE, 0xD4, 0x08, 0x75, 0x87, 0x50, 0xDF, 0x50, 0x5D, 0xB5, 0xAD, 0x94, 0x4E, 0x55, 0xD1,
0x89, 0xA5, 0x64, 0xA0, 0xFF, 0x17, 0x49, 0x31, 0x14, 0xF8, 0x78, 0x31, 0x6E, 0x9A, 0x11, 0x76,
0xC7, 0x5D, 0x18, 0xC1, 0x82, 0x71, 0x57, 0x73, 0xDA, 0xAB, 0x12, 0xEA, 0x3E, 0x70, 0x61, 0x46,
0x56, 0xC0, 0x2B, 0x13, 0xED, 0x7A, 0x57, 0xA8, 0xB6, 0xFC, 0xE8, 0x9D, 0x8C, 0x65, 0x82, 0x39,
0x1A, 0x64, 0xC4, 0x64, 0x07, 0xFC, 0xD3, 0x23, 0x6A, 0x62, 0x43, 0x0B, 0xD4, 0xCA, 0x1E, 0x5C,
0x8A, 0x59, 0x55, 0x48, 0xF6, 0x9B, 0x01, 0xBD, 0x66, 0xF9, 0x3B, 0x8B, 0x4B, 0x64, 0xE4, 0xA4,
0x94, 0xA4, 0x23, 0x5A, 0x9E, 0xDB, 0xC0, 0x05, 0x1C, 0xF8, 0x83, 0x70, 0x38, 0x34, 0x5A, 0x4C,
0x55, 0xEF, 0xF8, 0x8E, 0x52, 0x22, 0xA7, 0x67, 0x19, 0x30, 0x06, 0x9B, 0x7C, 0xD6, 0x0F, 0x81,
0xF4, 0xE1, 0xA2, 0xB4, 0x40, 0x0D, 0x45, 0xD6, 0x1A, 0x61, 0x77, 0x5A, 0xFE, 0x2E, 0xD5, 0xD6,
0xD3, 0x0C, 0xF1, 0xBF, 0x00, 0x2D, 0xA8, 0x50, 0xAE, 0xBA, 0x32, 0xEF, 0xFE, 0xB6, 0xC2, 0xE7,
0x8C, 0x09, 0x4A, 0x5D, 0x4C, 0xAC, 0xFE, 0x3E, 0xAB, 0x42, 0x75, 0x25, 0x74, 0x3B, 0xBD, 0xBD,
0xC4, 0x13, 0x64, 0xDC, 0x89, 0xC8, 0x40, 0x87, 0x11, 0xEF, 0xF0, 0x01, 0x7A, 0x66, 0xE8, 0xD5,
0xA8, 0x1A, 0xD2, 0xEC, 0xB6, 0x0F, 0x50, 0x1E, 0x4C, 0x48, 0x1E, 0x2F, 0xF4, 0xDE, 0xD1, 0xE7,
0x67, 0xA9, 0x2F, 0xC9, 0x55, 0xCA, 0x6F, 0x88, 0xD6, 0xA1, 0x98, 0xDC, 0x23, 0x01, 0x55, 0xB1,
0xB3, 0x5A, 0x83, 0xE8, 0x5E, 0x4C, 0xE6, 0x4A, 0x40, 0xF6, 0x39, 0x88, 0x16, 0xCD, 0x55, 0x34,
0x3F, 0xC1, 0xB4, 0xF8, 0xB7, 0xDD, 0x20, 0xFB, 0x52, 0x2C, 0x72, 0x1B, 0xA6, 0xE1, 0xAA, 0xCF,
0x79, 0xDE, 0xA3, 0x00, 0x7D, 0x1D, 0x48, 0xEF, 0x02, 0xB9, 0xF7, 0x0E, 0xB1, 0x48, 0xF6, 0x4C,
0x46, 0x54, 0xCF, 0x53, 0x3A, 0x79, 0x38, 0xA7, 0x0A, 0x55, 0x7D, 0x87, 0xAC, 0x08, 0xFB, 0x4C,
0x01, 0xCF, 0x03, 0x4A, 0xE9, 0x97, 0xB0, 0x4F, 0xEE, 0x80, 0x3C, 0x67, 0xA9, 0x8A, 0x11, 0xE6,
0x6A, 0x2B, 0x22, 0x37, 0x5B, 0xA4, 0x1E, 0x30, 0xA1, 0x54, 0x4A, 0x35, 0xD1, 0xC2, 0xB5, 0x46,
0x82, 0xA1, 0x55, 0xC1, 0xA2, 0xAF, 0x69, 0x1B, 0xA5, 0x4A, 0x55, 0x85, 0xF6, 0xDB, 0x0A, 0xF3,
0x61, 0x93, 0x19, 0x6F, 0x17, 0x23, 0x1C, 0x8C, 0x90, 0x18, 0x61, 0x87, 0x0E, 0x39, 0x11, 0xDB,
0xAE, 0x50, 0x1D, 0xDE, 0x28, 0x00, 0x61, 0x59, 0x53, 0x29, 0x92, 0x7C, 0xBA, 0xD2, 0x17, 0xEF,
0x7A, 0x0C, 0xCF, 0xFA, 0xA2, 0x1E, 0x01, 0x1D, 0xE4, 0x32, 0xCB, 0x58, 0x18, 0x13, 0xB0, 0x41,
0x14, 0x3C, 0x5B, 0x2A, 0x81, 0x99, 0x91, 0x55, 0xCF, 0xE6, 0x3D, 0x60, 0x52, 0x45, 0x55, 0x85,
0xC9, 0x1C, 0x95, 0xB7, 0xD4, 0x3D, 0x2D, 0xEA, 0x9E, 0x2A, 0xD8, 0x1F, 0x4D, 0xBB, 0xAA, 0xBD,
0x3C, 0xFF, 0xD7, 0xC1, 0xDE, 0x00, 0x02, 0xC6, 0xD8, 0xD4, 0x56, 0x09, 0xBC, 0x27, 0xCF, 0xF1,
0xB2, 0x6F, 0xA9, 0x58, 0x9E, 0xCE, 0x2A, 0xE4, 0x95, 0xA9, 0x54, 0x23, 0xB7, 0xA5, 0xD4, 0xF2,
0xFC, 0x7C, 0x43, 0x2B, 0x00, 0x4E, 0xCD, 0xF5, 0x87, 0xE4, 0x6A, 0x53, 0x28, 0x3E, 0xB6, 0xEF,
0x91, 0x7F, 0xC0, 0xF2, 0x71, 0x82, 0x33, 0x3E, 0x2B, 0x91, 0xFA, 0x44, 0xA9, 0x57, 0x1E, 0xCE,
0x8C, 0x45, 0x96, 0xA6, 0x7F, 0xA9, 0xD4, 0xD5, 0x9B, 0xF3, 0xA5, 0x81, 0x5E, 0xFC, 0xD4, 0x63,
0xE1, 0x7C, 0x47, 0x6D, 0x4A, 0x4C, 0x58, 0xED, 0x32, 0x6D, 0x77, 0x6D, 0xD8, 0x13, 0x14, 0x15,
0x9A, 0x38, 0x44, 0xDF, 0x69, 0x6D, 0xBE, 0xCE, 0xD3, 0xAF, 0xA1, 0x6D, 0xAF, 0x5D, 0x57, 0xF7,
0x30, 0xC9, 0xA0, 0x18, 0xA7, 0x8F, 0xB5, 0xD4, 0xED, 0xD5, 0xF9, 0x37, 0x07, 0x7A, 0xF1, 0xB3,
0xC5, 0x63, 0x23, 0xDA, 0xCF, 0x7E, 0x54, 0x6A, 0xA3, 0xAA, 0xFB, 0x74, 0x6C, 0xCB, 0xCB, 0xB5,
0xD9, 0xE8, 0xE0, 0x67, 0x4D, 0xFD, 0x32, 0xA0, 0x1E, 0xC7, 0x00, 0xE0, 0x84, 0x1D, 0xC0, 0x0C,
0x5A, 0x01, 0xDB, 0x10, 0xB4, 0x51, 0xCD, 0xA8, 0x7C, 0x70, 0x8F, 0x77, 0xA7, 0x8F, 0x28, 0xE5,
0xCE, 0xFF, 0x7D, 0xB0, 0x17, 0x3F, 0xF5, 0x58, 0xAD, 0x73, 0x89, 0xF9, 0x71, 0xC8, 0x21, 0x61,
0x76, 0xFB, 0xA2, 0xEF, 0xBA, 0x44, 0xB2, 0x30, 0x93, 0x84, 0xF6, 0xFE, 0xB8, 0x1B, 0x08, 0xF6,
0xC2, 0xE0, 0x94, 0x6A, 0x9B, 0x19, 0xFD, 0x86, 0x9D, 0x1B, 0xC7, 0xA0, 0x4A, 0x37, 0x0E, 0xD5,
0xF4, 0xFB, 0xA9, 0x63, 0x70, 0x0E, 0x79, 0x8D, 0xF6, 0x2C, 0xF1, 0xAC, 0x2C, 0x7E, 0x8C, 0xF1,
0xE0, 0x6C, 0x3C, 0xF8, 0x1E, 0x4F, 0xA8, 0x15, 0xA8, 0xB2, 0xEA, 0xF7, 0xE8, 0x08, 0xD9, 0xF2,
0x48, 0x60, 0xFB, 0xAF, 0x69, 0x77, 0x72, 0x6A, 0xD4, 0x51, 0xBF, 0x73, 0x4E, 0xAB, 0xA3, 0x81,
0xFC, 0x38, 0x14, 0x77, 0x13, 0xF2, 0x60, 0x0F, 0xAF, 0x68, 0xDB, 0xE7, 0x46, 0x99, 0x9C, 0xA3,
0xA1, 0x8C, 0x3A, 0x0B, 0xA9, 0xDD, 0xF1, 0xB4, 0x53, 0x85, 0xC8, 0x44, 0x32, 0x25, 0x32, 0x4C,
0x6A, 0xB0, 0x33, 0x18, 0x83, 0x43, 0xDE, 0x8F, 0x4E, 0x89, 0x7D, 0x1B, 0xDD, 0x75, 0x76, 0x10,
0xB4, 0xA0, 0x67, 0x44, 0xB4, 0x9F, 0xAA, 0x1D, 0x32, 0xBE, 0xD1, 0x73, 0xEF, 0xF1, 0xFD, 0x7A,
0xBE, 0x08, 0x2F, 0x03, 0x33, 0x3E, 0x4E, 0x16, 0x04, 0x0E, 0xAB, 0xEC, 0x82, 0x46, 0x23, 0x85,
0x65, 0xC3, 0x84, 0x27, 0xE1, 0x5B, 0xDC, 0x2C, 0xD5, 0x6B, 0x02, 0xB4, 0xF5, 0x81, 0x6F, 0xC5,
0x2D, 0x15, 0xDB, 0xEA, 0x54, 0x37, 0x6C, 0xA4, 0xDD, 0xF7, 0xE8, 0x8E, 0x23, 0x66, 0xE5, 0x47,
0x3F, 0xC7, 0x81, 0xD1, 0x9D, 0x42, 0xBC, 0xD3, 0x8A, 0xC0, 0x0A, 0xBF, 0x58, 0x50, 0x18, 0xD8,
0x10, 0x09, 0x1D, 0x1B, 0x34, 0xF7, 0x88, 0xF5, 0x1F, 0x65, 0xDA, 0x19, 0xE5, 0xD0, 0xD1, 0x19,
0xDD, 0x1D, 0x8D, 0xC8, 0x08, 0x27, 0xB4, 0xAB, 0x0F, 0x48, 0xC2, 0x78, 0xCA, 0x30, 0x84, 0xDB,
0x88, 0x32, 0x57, 0xFB, 0x9A, 0x77, 0xA7, 0x5F, 0xBA, 0xAA, 0xD8, 0xCA, 0xE6, 0x9B, 0x1B, 0xFC,
0xDB, 0xD7, 0xE4, 0x79, 0x1C, 0x66, 0x27, 0x68, 0x1F, 0xF5, 0xE9, 0xBC, 0x4D, 0x0F, 0x1E, 0x69,
0x11, 0x50, 0x8B, 0x08, 0xD0, 0x6D, 0x9E, 0x21, 0x39, 0xA3, 0xA8, 0xFA, 0xEF, 0x3A, 0x98, 0x56,
0x19, 0xEC, 0x20, 0x95, 0xBE, 0x19, 0x79, 0x18, 0x03, 0xC9, 0x60, 0xF0, 0x46, 0x4D, 0x46, 0x49,
0x7A, 0x29, 0x2C, 0x9D, 0x54, 0x81, 0x2A, 0xC7, 0x5B, 0xA5, 0x0F, 0xBA, 0xE0, 0x10, 0x5E, 0x0A,
0x61, 0xFC, 0x8A, 0x18, 0x6E, 0xD1, 0x05, 0x84, 0xA1, 0x3D, 0x70, 0xE1, 0x23, 0x5D, 0x8C, 0x2A,
0x65, 0x0F, 0x16, 0xD9, 0xAA, 0xD3, 0x6B, 0xC9, 0xE3, 0x39, 0xAD, 0xAD, 0x65, 0x32, 0xB6, 0xC3,
0x36, 0x9F, 0x98, 0x19, 0x01, 0x07, 0x63, 0xD8, 0xF0, 0x4B, 0xD0, 0x0F, 0x3A, 0x23, 0xCF, 0xAB,
0xEB, 0x82, 0x0F, 0x10, 0x61, 0x46, 0x4F, 0x93, 0x3E, 0xE6, 0x63, 0x26, 0x96, 0xCA, 0x1F, 0xB8,
0x72, 0x98, 0x1E, 0x7B, 0x51, 0x5D, 0xD5, 0x61, 0xD4, 0xD5, 0xDC, 0xCD, 0xCC, 0x68, 0xF3, 0xE7,
0xDE, 0xAC, 0x9A, 0x17, 0x23, 0x85, 0xBF, 0xF9, 0xA8, 0x29, 0xE3, 0x69, 0xE3, 0x32, 0xF8, 0x43,
0xC0, 0x21, 0xF5, 0x90, 0x0A, 0x78, 0x27, 0x58, 0x82, 0x85, 0xBE, 0xD1, 0x8F, 0x5D, 0x1D, 0x53,
0xF5, 0x5F, 0x43, 0x53, 0x9B, 0x0E, 0xD5, 0x3F, 0x10, 0x11, 0x82, 0xD4, 0x8C, 0xA4, 0xEF, 0xD1,
0xBA, 0xAF, 0x99, 0xFF, 0xAA, 0x68, 0x1F, 0xC5, 0x36, 0x4D, 0x20, 0x4E, 0x8C, 0x09, 0x08, 0x72,
0x08, 0x50, 0x53, 0x4F, 0x4E, 0x46, 0x7D, 0x1F, 0x07, 0xCA, 0x23, 0x56, 0xA0, 0x86, 0x21, 0x24,
0x5C, 0x04, 0x9F, 0x66, 0xAA, 0x4F, 0x3A, 0x9B, 0x4C, 0x28, 0x0F, 0xB6, 0xE6, 0x94, 0xFF, 0xAB,
0x1B, 0xB3, 0xF7, 0x8B, 0x57, 0xA4, 0x52, 0x09, 0x19, 0x85, 0xA0, 0x36, 0x1E, 0x95, 0xA5, 0x2F,
0xB1, 0xE1, 0xC7, 0x36, 0x70, 0x22, 0xD5, 0x5C, 0xDB, 0x0B, 0xD3, 0xB6, 0xA1, 0x25, 0xB2, 0x60,
0x24, 0x67, 0xE0, 0x3C, 0x26, 0x23, 0xD7, 0x13, 0x89, 0x3F, 0xC4, 0xF2, 0x1C, 0xF6, 0xC4, 0x9D,
0xC8, 0xF9, 0x96, 0x8F, 0x84, 0x38, 0x7D, 0xC1, 0x87, 0x19, 0xCB, 0x36, 0x29, 0x4D, 0x7D, 0x42,
0x98, 0x5B, 0xDA, 0x98, 0x60, 0xC3, 0x86, 0x2D, 0x43, 0xF7, 0x1A, 0x5B, 0xFE, 0x90, 0xFE, 0xE1,
0x44, 0xE6, 0x34, 0xAF, 0x0D, 0xC9, 0x09, 0x78, 0xA2, 0x74, 0xBF, 0x8E, 0x44, 0x53, 0x5B, 0xD1,
0x32, 0xFD, 0xE1, 0x50, 0x3D, 0xB6, 0x32, 0x3A, 0xC1, 0x69, 0x83, 0x91, 0x34, 0xA8, 0x69, 0x07,
0x0E, 0x35, 0xAC, 0xC8, 0x0E, 0x52, 0x6A, 0x78, 0x64, 0xCF, 0x05, 0xF4, 0x7E, 0x46, 0xF6, 0x5A,
0x44, 0x4B, 0x2E, 0x56, 0xCD, 0x8A, 0xFF, 0x5C, 0xAC, 0xDE, 0x46, 0x0A, 0x16, 0x37, 0xC8, 0x39,
0x52, 0x04, 0x61, 0x5E, 0x94, 0xC6, 0x8B, 0xEC, 0x0D, 0xC9, 0x8B, 0xA1, 0x6D, 0x65, 0xF0, 0x35,
0x95, 0x1A, 0x49, 0x6A, 0x87, 0xA9, 0x4B, 0x69, 0x93, 0x5D, 0xD2, 0xFD, 0x98, 0xC0, 0x9B, 0xDB,
0x4D, 0x4A, 0x2B, 0x6C, 0xC5, 0xA9, 0x15, 0xF2, 0x00, 0xCA, 0xBA, 0x93, 0x25, 0x9C, 0x76, 0x61,
0x3B, 0x82, 0x5B, 0xBD, 0x6B, 0x1D, 0x3F, 0x9D, 0xA5, 0x34, 0xA3, 0xFB, 0x09, 0xAC, 0x89, 0xF2,
0x26, 0x65, 0x55, 0x5C, 0x1B, 0xA4, 0x56, 0xF4, 0xE0, 0xDA, 0x2A, 0xCB, 0x58, 0x16, 0x99, 0x1F,
0xBB, 0xAF, 0x75, 0xFC, 0x67, 0xD3, 0x9F, 0x5D, 0x6E, 0x50, 0xB1, 0x3F, 0x48, 0x38, 0xFF, 0x82,
0x97, 0xD9, 0xFC, 0x75, 0x62, 0x6B, 0x53, 0xF6, 0x53, 0x20, 0x6D, 0xC6, 0x65, 0x32, 0x34, 0x0F,
0x7A, 0x06, 0x3E, 0x76, 0xDD, 0x83, 0x86, 0x4B, 0xE5, 0x03, 0xCF, 0x9C, 0xA0, 0x0B, 0x31, 0x7C,
0xE7, 0x48, 0x89, 0x5E, 0xDD, 0xE2, 0xD4, 0xE9, 0xFD, 0xEB, 0x1F, 0xFE, 0xDC, 0x3B, 0xBF, 0x99,
0x4D, 0xE1, 0xA4, 0x37, 0x84, 0xEB, 0x37, 0x90, 0x2A, 0xB8, 0x76, 0x30, 0xBA, 0xE1, 0x9C, 0x38,
0x91, 0x07, 0xAF, 0xA3, 0x33, 0xF7, 0xD4, 0x4F, 0x1F, 0x36, 0x59, 0xAC, 0x1C, 0x32, 0x1B, 0x3A,
0xB3, 0xB3, 0x1F, 0x36, 0x4A, 0x10, 0xA2, 0x6F, 0xE4, 0xCC, 0xD3, 0x04, 0x2C, 0x64, 0xEF, 0xC0,
0x30, 0x05, 0x57, 0xA2, 0x60, 0x52, 0x03, 0xCF, 0x7F, 0x9A, 0xB9, 0x99, 0x39, 0x51, 0x35, 0xFC,
0xE1, 0x40, 0x7F, 0x51, 0x88, 0x48, 0x8A, 0xCC, 0x0B, 0x5F, 0x45, 0xC8, 0xB0, 0x22, 0xB2, 0x66,
0x90, 0xDE, 0x81, 0xF8, 0x5D, 0xBC, 0x45, 0xC6, 0xCA, 0x0C, 0xD9, 0xEF, 0x79, 0x54, 0x5A, 0xAC,
0xD1, 0xC5, 0xA8, 0x6D, 0xAC, 0x04, 0xA9, 0x7D, 0xCE, 0x48, 0x4A, 0x0D, 0x33, 0xBE, 0x18, 0x9B,
0xD7, 0x56, 0x02, 0xFB, 0xCA, 0x39, 0x92, 0x7F, 0x86, 0x8E, 0x5E, 0x44, 0xF6, 0x84, 0x74, 0xA9,
0x8A, 0x74, 0xE9, 0x24, 0xCF, 0x63, 0xEB, 0xBC, 0x10, 0x01, 0x47, 0xD3, 0xAA, 0xA9, 0x97, 0xFD,
0xDB, 0x2A, 0x51, 0xBF, 0x68, 0xB7, 0xB9, 0x04, 0xE0, 0xA5, 0x9B, 0xBF, 0x40, 0x15, 0x7F, 0xDF,
0xC6, 0xBA, 0xB0, 0x88, 0x73, 0x09, 0x95, 0x2E, 0x24, 0x74, 0xF1, 0x7A, 0x64, 0xAC, 0x1C, 0x0E,
0xED, 0xF7, 0x64, 0x58, 0x6A, 0x48, 0xFF, 0x62, 0xEC, 0x02, 0x46, 0x05, 0x79, 0x99, 0x87, 0xBC,
0xAC, 0xF9, 0xC7, 0x98, 0xBE, 0x59, 0x09, 0xC4, 0xDA, 0x39, 0x24, 0x9B, 0x0D, 0x32, 0x91, 0xA6,
0x59, 0x71, 0xCF, 0x56, 0x78, 0x8F, 0x13, 0xC5, 0xE6, 0x8C, 0xED, 0x60, 0xE0, 0xCB, 0xC7, 0x74,
0x50, 0x3D, 0xA1, 0x75, 0x7C, 0xAA, 0x90, 0x4C, 0x00, 0xE7, 0xF1, 0xA1, 0x4F, 0x76, 0x56, 0x24,
0xDC, 0x3B, 0x26, 0x2B, 0x29, 0x62, 0xEB, 0x6A, 0x20, 0x14, 0x15, 0x56, 0xBE, 0x75, 0x9C, 0x9C,
0xF2, 0x7B, 0x7D, 0x9C, 0x67, 0x11, 0x97, 0x26, 0x77, 0x54, 0xE2, 0xAB, 0x9F, 0x65, 0x08, 0xEC,
0x35, 0x38, 0x84, 0x32, 0x36, 0xFF, 0xD8, 0x77, 0xBF, 0xCC, 0xD3, 0xAE, 0xCC, 0x63, 0xC8, 0x3C,
0xB2, 0xDF, 0xB3, 0x59, 0xE6, 0xC1, 0xC5, 0xD8, 0x39, 0xB4, 0x12, 0xB8, 0x90, 0x79, 0x65, 0xBC,
0x41, 0xB3, 0x90, 0xF9, 0x12, 0xF0, 0x2B, 0xE0, 0x87, 0xCC, 0x0D, 0x4E, 0x8D, 0xE3, 0x42, 0x26,
0x40, 0xF3, 0x42, 0x82, 0x50, 0xE1, 0xD3, 0xEE, 0x77, 0xFA, 0x37, 0xE2, 0x3D, 0x4E, 0xE0, 0x7D,
0x2F, 0xF8, 0x6D, 0x19, 0x13, 0x27, 0x99, 0x52, 0x5B, 0x34, 0x1E, 0xAD, 0x9C, 0xD3, 0xAF, 0x04,
0xF9, 0x40, 0x1D, 0xFE, 0xC7, 0xE4, 0x8C, 0xB7, 0xC6, 0x04, 0x6B, 0x0E, 0x07, 0x7B, 0x1F, 0x87,
0x3C, 0xCB, 0x5A, 0x0C, 0x09, 0x58, 0x37, 0x10, 0x24, 0xB8, 0xA3, 0x09, 0x6F, 0x58, 0x01, 0xDD,
0x73, 0x70, 0x44, 0x32, 0x58, 0x06, 0x35, 0xB2, 0x3B, 0xAD, 0x90, 0x66, 0x74, 0xE9, 0x0E, 0x8A,
0x01, 0xA7, 0x58, 0x14, 0x39, 0xC4, 0x19, 0xE4, 0x36, 0xA9, 0xF9, 0xF9, 0xCC, 0x64, 0x6C, 0x24,
0xA0, 0x70, 0x35, 0x4E, 0xF8, 0x71, 0x74, 0xB4, 0x1C, 0x73, 0x8A, 0x22, 0xE7, 0x7C, 0xF3, 0x52,
0x62, 0x26, 0xD5, 0xB3, 0x89, 0x28, 0x72, 0x57, 0xD0, 0x6F, 0x9F, 0x46, 0xB8, 0x60, 0xC5, 0x05,
0x89, 0xBD, 0xDD, 0x7A, 0x9E, 0x0D, 0xA4, 0x0E, 0x98, 0x8F, 0x13, 0x58, 0x09, 0x18, 0x66, 0x05,
0xDA, 0x6F, 0x5D, 0x06, 0xF8, 0x0C, 0x63, 0xDC, 0x7E, 0x60, 0x3D, 0xA4, 0xAC, 0x48, 0xE6, 0x67,
0xF0, 0xBF, 0x09, 0x84, 0x9F, 0xD9, 0xB1, 0x68, 0x53, 0x6B, 0xA5, 0x4D, 0xBB, 0xBA, 0x84, 0xD4,
0x00, 0x55, 0x8E, 0x9E, 0x26, 0xB7, 0x43, 0x62, 0xA9, 0xE0, 0xCC, 0xA7, 0xC0, 0x3E, 0xFC, 0xCA,
0x0B, 0xF0, 0xE3, 0xAE, 0xD4, 0x34, 0x19, 0x4A, 0x04, 0xFD, 0xB7, 0xBF, 0x22, 0xE3, 0x7F, 0x21,
0x81, 0x27, 0x97, 0x5D, 0xAA, 0x9A, 0xAB, 0x2D, 0x72, 0x3A, 0x0F, 0x98, 0x9F, 0xF9, 0x1F, 0x5E,
0x00, 0x2B, 0x26, 0x20, 0x38, 0xE7, 0x9F, 0x2B, 0x3A, 0x0D, 0x38, 0x75, 0xA4, 0x73, 0xA1, 0x85,
0x35, 0x71, 0x6C, 0xF2, 0x4F, 0x3C, 0x86, 0xC5, 0x05, 0x2D, 0xB2, 0x1F, 0x85, 0xC9, 0xB8, 0xB9,
0x90, 0x43, 0x19, 0x8B, 0xDC, 0xF1, 0xA9, 0x62, 0xF0, 0x19, 0xB8, 0xAB, 0x8A, 0x44, 0xEB, 0xE1,
0x42, 0x4C, 0xAD, 0x4B, 0x92, 0x46, 0x24, 0xED, 0xB6, 0x0A, 0xA6, 0xFC, 0x2E, 0xC4, 0x11, 0xC9,
0xD3, 0x4B, 0x32, 0xB0, 0x2F, 0x87, 0x1C, 0x89, 0x18, 0x2B, 0x24, 0xBB, 0x16, 0xD0, 0x3F, 0x12,
0xAA, 0xE0, 0x94, 0xED, 0x50, 0x86, 0x9D, 0x85, 0xD0, 0xEA, 0x1E, 0x49, 0x57, 0x8C, 0x8A, 0xEB,
0xAB, 0x4A, 0x65, 0x6E, 0x00, 0x31, 0xCA, 0x80, 0x1D, 0x66, 0x08, 0xE7, 0x06, 0x56, 0x53, 0xE2,
0x98, 0x03, 0x1D, 0xAB, 0x91, 0xF1, 0xC5, 0xB4, 0xC3, 0x2E, 0xF4, 0x4A, 0x08, 0xA6, 0xF9, 0x97,
0x5E, 0x67, 0xCC, 0xFE, 0xA6, 0xC1, 0x09, 0x7B, 0x89, 0xB5, 0x08, 0x9D, 0x76, 0xCC, 0x9E, 0xB1,
0xB5, 0x82, 0x39, 0x77, 0xF1, 0x9C, 0xD4, 0xCD, 0x42, 0x77, 0xB1, 0x2C, 0x2D, 0x15, 0x39, 0xA7,
0xF3, 0xD4, 0xC5, 0xB9, 0xE7, 0xD4, 0xAC, 0x31, 0x4B, 0xB8, 0x0A, 0x39, 0x6A, 0x46, 0xAF, 0x13,
0xEF, 0x0E, 0x67, 0xB6, 0x00, 0x61, 0x71, 0x2F, 0xEC, 0x04, 0xEC, 0xDA, 0x48, 0x4C, 0x45, 0x43,
0xF2, 0x66, 0x06, 0xDC, 0x6E, 0xCE, 0x82, 0x7C, 0xF8, 0x68, 0x6A, 0x86, 0xCD, 0x44, 0xFB, 0xB5,
0x5E, 0x0D, 0xCE, 0xD6, 0x75, 0xA5, 0x6E, 0x10, 0x47, 0x0C, 0x10, 0x08, 0xFE, 0x25, 0xB4, 0xA2,
0xA5, 0x17, 0x33, 0x1B, 0x51, 0x70, 0x79, 0x21, 0x40, 0x8E, 0x4D, 0x0D, 0x23, 0xB1, 0x41, 0xFF,
0x34, 0x31, 0xE8, 0x0F, 0xF7, 0xB3, 0x94, 0x19, 0xB1, 0x09, 0xE9, 0x4C, 0xFD, 0xE4, 0x6B, 0x75,
0xFF, 0xA3, 0x0E, 0x2C, 0x3A, 0x5D, 0xF7, 0x7C, 0xF2, 0x65, 0xB4, 0x7B, 0x2B, 0xF5, 0xB3, 0x8A,
0xB1, 0xDD, 0x73, 0xCE, 0x9D, 0x1B, 0xC7, 0x3A, 0x08, 0xF3, 0x1B, 0x31, 0x4C, 0xED, 0x1C, 0x27,
0x10, 0x60, 0x4D, 0x9F, 0x8A, 0x3C, 0x29, 0x19, 0x27, 0x38, 0x30, 0x72, 0x92, 0xAE, 0x07, 0x7B,
0x72, 0x54, 0x66, 0x58, 0x93, 0xC7, 0xA9, 0x1A, 0x0A, 0x16, 0xF1, 0xD8, 0xEE, 0x37, 0xAE, 0xB4,
0xBD, 0xBB, 0x93, 0x19, 0x00, 0x01, 0x85, 0xB7, 0xC1, 0x87, 0xD6, 0xF6, 0x98, 0x8F, 0x6B, 0x9C,
0x8A, 0xC2, 0x2E, 0xD2, 0x2D, 0x47, 0xB5, 0x2B, 0x34, 0x56, 0xD3, 0xBE, 0xB1, 0xA6, 0xB3, 0x43,
0x37, 0xD2, 0xAC, 0xB2, 0x85, 0x20, 0x91, 0xE9, 0xAA, 0x84, 0xA7, 0xB7, 0xEE, 0x4D, 0x51, 0xB3,
0xB5, 0x90, 0xD6, 0x7B, 0xAA, 0x88, 0x55, 0x2B, 0xAC, 0x40, 0xB1, 0x76, 0x10, 0x86, 0xCA, 0x67,
0x77, 0x5D, 0x65, 0xDD, 0x42, 0x64, 0x71, 0x52, 0x72, 0x41, 0xE9, 0xB4, 0x3A, 0xC2, 0x55, 0x2E,
0x2F, 0x5C, 0xE9, 0xBA, 0x05, 0x76, 0xE5, 0x42, 0xF9, 0xE6, 0xE5, 0x68, 0xB7, 0xA6, 0x45, 0x4F,
0xB2, 0xBE, 0x1B, 0x58, 0x39, 0xEC, 0xF6, 0x00, 0x13, 0xCD, 0x2D, 0xAF, 0xFF, 0x1D, 0x17, 0x5C,
0xD4, 0xCC, 0xF1, 0x15, 0xCE, 0x56, 0x05, 0x32, 0xD9, 0x6C, 0x4B, 0x0B, 0xC6, 0x2C, 0xE6, 0x1A,
0x52, 0x65, 0x51, 0xE3, 0x52, 0xD3, 0xBA, 0x52, 0xCF, 0x13, 0x6C, 0x7E, 0xE0, 0xE4, 0xB7, 0xB6,
0xF9, 0x96, 0x52, 0xB7, 0x14, 0xB2, 0xC7, 0x2E, 0x8F, 0x91, 0xDB, 0xFD, 0x1A, 0x21, 0x7D, 0xF7,
0x81, 0x8B, 0xD0, 0xFB, 0x88, 0x7E, 0x04, 0xD7, 0x9D, 0x32, 0x23, 0x8E, 0x11, 0xFD, 0x4F, 0x1E,
0x6B, 0xA9, 0xC3, 0x5F, 0x40, 0x3D, 0xC1, 0xBA, 0xD8, 0x19, 0x3D, 0xF8, 0xD1, 0x24, 0xF9, 0x25,
0x8E, 0x7B, 0x1F, 0x57, 0x52, 0xE1, 0x26, 0xE8, 0xD7, 0x41, 0x55, 0xE3, 0x2F, 0x5B, 0xDA, 0xDB,
0x99, 0xED, 0x5E, 0x81, 0xF9, 0x49, 0xC1, 0xB1, 0xA4, 0x27, 0x04, 0x92, 0xF4, 0xE0, 0x39, 0x30,
0x42, 0xE7, 0x2D, 0x4C, 0xE8, 0xE3, 0x93, 0xDD, 0xDB, 0x86, 0xAF, 0x10, 0x1C, 0xC8, 0x17, 0x3A,
0xF1, 0xF9, 0xB6, 0xA5, 0x25, 0xFA, 0xE1, 0x17, 0xBF, 0x6D, 0xE9, 0xF5, 0x22, 0x98, 0xB9, 0xE9,
0xA8, 0xF0, 0x51, 0x11, 0x70, 0xCD, 0x48, 0x90, 0x1B, 0xC7, 0xE6, 0xDB, 0x6D, 0x7A, 0x75, 0x2F,
0xB7, 0x6D, 0x9F, 0x8B, 0x6A, 0xBA, 0x16, 0xF1, 0x98, 0x2F, 0x84, 0x03, 0xA7, 0x49, 0xE2, 0x4E,
0x88, 0x08, 0xE2, 0xCB, 0x50, 0x2D, 0x24, 0x46, 0xD7, 0x4F, 0x4F, 0x0D, 0x91, 0x3A, 0x4C, 0x17,
0x54, 0xF8, 0xAC, 0xE6, 0x5A, 0xC3, 0x24, 0x26, 0x75, 0x69, 0xC8, 0x2B, 0x73, 0xB5, 0xDD, 0xBC,
0xFE, 0x68, 0x23, 0xA5, 0x59, 0x04, 0xC0, 0xC3, 0xAB, 0xAD, 0xA8, 0xAE, 0x0B, 0xD5, 0x06, 0xE2,
0xBB, 0xA3, 0x75, 0x6A, 0x07, 0xD0, 0x98, 0x70, 0xF5, 0xBA, 0xA4, 0x09, 0x5F, 0x39, 0xB6, 0x09,
0x80, 0x6E, 0xC3, 0xB7, 0xAE, 0x25, 0x66, 0x5A, 0x3F, 0x9B, 0x5B, 0xEA, 0x4D, 0x96, 0x85, 0x40,
0xE2, 0xCA, 0xE5, 0x40, 0xCC, 0x50, 0x54, 0x03, 0x77, 0x00, 0x8E, 0x01, 0x07, 0x1C, 0xEF, 0xC3,
0xF6, 0xBA, 0xEC, 0x60, 0xDB, 0xC2, 0xE1, 0x2C, 0xC9, 0xC4, 0x7E, 0xCE, 0x9F, 0x27, 0x1B, 0xB4,
0xFF, 0x0F, 0xB1, 0x2E, 0xB5, 0xEE, 0xCC, 0xC1, 0x61, 0x6A, 0x04, 0x82, 0x91, 0xEF, 0x93, 0x39,
0xE9, 0xD3, 0x85, 0x90, 0xEC, 0x53, 0xDF, 0x49, 0x6E, 0x1A, 0x0E, 0x28, 0x14, 0xC2, 0xC6, 0xC4,
0x38, 0x99, 0x87, 0xB4, 0x75, 0x2D, 0x6E, 0x09, 0x1B, 0x7F, 0x35, 0x48, 0xAC, 0x85, 0xE4, 0x94,
0xC9, 0xBC, 0x96, 0x52, 0x5B, 0x82, 0xAF, 0xB8, 0x0F, 0x89, 0x06, 0x98, 0xE1, 0xB8, 0x04, 0x03,
0xF1, 0x77, 0x9B, 0xC5, 0x11, 0xD1, 0xD4, 0xE6, 0xB2, 0x4B, 0xB8, 0x52, 0xE7, 0x1C, 0x09, 0xE5,
0xBF, 0x3A, 0x0B, 0xA9, 0xD3, 0x99, 0x78, 0x72, 0x1C, 0xA1, 0xE6, 0x08, 0xB2, 0xB8, 0x6B, 0x2A,
0x8B, 0x9B, 0xA6, 0x62, 0x6A, 0x8C, 0x86, 0xE5, 0xE6, 0xE2, 0x41, 0x23, 0x12, 0xC8, 0xE9, 0x73,
0xE7, 0xA6, 0x3A, 0xA8, 0x3E, 0x8B, 0x74, 0x99, 0xB2, 0xA8, 0x4D, 0x02, 0x11, 0xDC, 0x76, 0xEF,
0xCE, 0x29, 0x27, 0xE7, 0x5A, 0xFD, 0xF9, 0xB3, 0xC4, 0xA6, 0x2F, 0xA2, 0xF1, 0x9E, 0x3C, 0xB9,
0xA4, 0x61, 0xBD, 0xCD, 0x49, 0x1F, 0x18, 0x18, 0xFC, 0x28, 0xB2, 0xFC, 0xF7, 0x03, 0x0B, 0x04,
0xF7, 0x06, 0xB9, 0x56, 0x28, 0x3D, 0xCA, 0xA4, 0x7F, 0xA2, 0x61, 0x86, 0x15, 0x33, 0x4A, 0x1C,
0xAA, 0x49, 0x13, 0xD6, 0x9E, 0xD4, 0xEC, 0x37, 0x22, 0xF3, 0x5A, 0xE4, 0x48, 0xB2, 0xE7, 0xA8,
0x5C, 0xE3, 0xCD, 0x5C, 0x88, 0xC9, 0x8B, 0xC5, 0x8A, 0x4F, 0x6B, 0x3E, 0x3C, 0x1D, 0x32, 0x51,
0x99, 0xB0, 0x7F, 0x76, 0x83, 0x6E, 0xCE, 0x57, 0x3C, 0xF2, 0x1E, 0x0E, 0x0B, 0x4C, 0x0D, 0x5E,
0x36, 0xEE, 0xD5, 0x5A, 0xC7, 0x38, 0x30, 0x2C, 0xF1, 0x1D, 0xE7, 0x0E, 0x78, 0xBC, 0xB8, 0x45,
0x8D, 0x92, 0x71, 0x83, 0x52, 0xC7, 0xBC, 0x12, 0x24, 0xD2, 0xBC, 0xFC, 0x41, 0x2C, 0x8F, 0xBC,
0x71, 0x29, 0xB2, 0xE7, 0x8C, 0xEB, 0xA1, 0xF5, 0x21, 0x74, 0xCC, 0xFC, 0x94, 0xEE, 0x07, 0x58,
0xA5, 0xE5, 0x83, 0x26, 0xD7, 0x41, 0x46, 0x8B, 0x3D, 0x12, 0xDF, 0xD2, 0xE1, 0xFB, 0x03, 0x65,
0x70, 0x80, 0x60, 0x7F, 0x77, 0x87, 0x0E, 0xF6, 0x9C, 0xC2, 0x45, 0x85, 0x65, 0xBE, 0xCF, 0x06,
0x3A, 0x98, 0x4A, 0xE2, 0xB2, 0x0B, 0x4B, 0xD3, 0xFA, 0xAA, 0x7B, 0xEF, 0xAF, 0xB8, 0xF5, 0xC8,
0xBE, 0x8E, 0x69, 0x8F, 0xA4, 0x81, 0xE6, 0xFA, 0xDB, 0x02, 0xD0, 0xE9, 0x17, 0x63, 0x5D, 0xDF,
0x95, 0xBE, 0xFD, 0x7A, 0x62, 0x46, 0x9E, 0x00, 0x6D, 0x81, 0x6C, 0xB0, 0x86, 0x43, 0xD6, 0x9C,
0x4F, 0x30, 0x84, 0x52, 0xAC, 0xB3, 0xE9, 0xB6, 0x0E, 0x6C, 0x52, 0x63, 0x41, 0x30, 0xE0, 0x5B,
0x7A, 0xDD, 0x2C, 0xC6, 0xBA, 0x84, 0x24, 0xC1, 0xEE, 0x29, 0x37, 0xDF, 0x3B, 0x85, 0x5C, 0x3C,
0xF8, 0xD2, 0x44, 0xEA, 0xDB, 0x81, 0x4D, 0xBE, 0xB5, 0x49, 0x4D, 0xC4, 0x44, 0x9C, 0xBA, 0x80,
0x85, 0x71, 0x14, 0xB1, 0xE2, 0x75, 0xF8, 0xFA, 0x9A, 0xBD, 0x1B, 0xDA, 0x7C, 0x3F, 0xB5, 0xA6,
0x23, 0x19, 0xD3, 0x07, 0xA5, 0x2E, 0x2B, 0x7D, 0x97, 0xAF, 0xF8, 0xC3, 0xDB, 0xE2, 0xAF, 0xAA,
0x52, 0xD7, 0x55, 0xE1, 0xE6, 0x1C, 0x2E, 0x5C, 0x01, 0xAA, 0xE6, 0xB2, 0xD3, 0xD3, 0xB6, 0xEA,
0x0C, 0x4F, 0xA7, 0x05, 0xD1, 0x06, 0xDB, 0xAA, 0x74, 0xCB, 0x3F, 0x29, 0x87, 0x1B, 0xF4, 0xAC,
0xCE, 0xCF, 0x21, 0xF7, 0x11, 0x45, 0x71, 0x99, 0x09, 0xE2, 0x68, 0xA1, 0x82, 0xAA, 0x8D, 0x29,
0x43, 0x3E, 0x2F, 0x2E, 0xCF, 0x33, 0x4D, 0xDB, 0xD2, 0x2F, 0x60, 0xA8, 0x72, 0x31, 0x67, 0x94,
0xF4, 0xFD, 0xCE, 0xE2, 0xE6, 0xD9, 0x53, 0xD3, 0x87, 0x94, 0x7A, 0x7D, 0x7A, 0x96, 0xE5, 0xE6,
0xE8, 0x52, 0xAD, 0x06, 0x03, 0x01, 0x32, 0x76, 0xF4, 0x74, 0xE6, 0xFF, 0xA6, 0x17, 0x83, 0x41,
0xA0, 0xB7, 0x91, 0x6A, 0x07, 0x27, 0x83, 0x9D, 0x11, 0x48, 0xD9, 0x0A, 0xA0, 0xF9, 0xF5, 0x50,
0xA7, 0xD9, 0x5B, 0x15, 0x08, 0x32, 0xD9, 0x6A, 0xA3, 0xB9, 0x01, 0x69, 0x1F, 0x7C, 0xFE, 0x1F,
0x75, 0x54, 0x5D, 0x88, 0x1B, 0x55, 0x14, 0xFE, 0x6E, 0x6E, 0x26, 0xB3, 0xC9, 0x34, 0x99, 0x75,
0x4D, 0x50, 0x56, 0xB3, 0xC9, 0x43, 0xD1, 0xED, 0xD6, 0x6C, 0x82, 0x04, 0x59, 0x61, 0x92, 0x4C,
0xB7, 0x0F, 0x7D, 0xA8, 0xE2, 0x20, 0xBB, 0x3E, 0xF8, 0xD7, 0xA8, 0x0F, 0x16, 0xAC, 0x18, 0x71,
0xD1, 0x74, 0xC9, 0x36, 0xD9, 0xB6, 0xD2, 0x37, 0x59, 0x9F, 0x7D, 0x89, 0x2F, 0x22, 0x23, 0xB2,
0x11, 0x2A, 0xB4, 0xD2, 0x6D, 0x26, 0x6C, 0x71, 0x41, 0x11, 0xA6, 0x0A, 0x2E, 0x28, 0x48, 0x6C,
0xAD, 0xE0, 0x16, 0xDA, 0x01, 0xA7, 0x98, 0xC5, 0x49, 0xAE, 0x67, 0xB2, 0xEE, 0x8A, 0x16, 0xEF,
0x0C, 0x67, 0xCE, 0x3D, 0xF7, 0xDC, 0x73, 0xCF, 0xF7, 0x9D, 0x73, 0x07, 0xBC, 0xAB, 0xEA, 0x35,
0x66, 0x03, 0x45, 0x65, 0xD9, 0x99, 0x01, 0x8D, 0x6C, 0x43, 0xEE, 0xC3, 0x71, 0x67, 0x02, 0x16,
0xC3, 0x3D, 0x83, 0x48, 0x41, 0x7C, 0xC7, 0xCE, 0xB7, 0x07, 0xED, 0x01, 0x2D, 0x95, 0x84, 0x37,
0x65, 0x7E, 0x6C, 0x48, 0xAD, 0x58, 0xC9, 0x53, 0xBA, 0x71, 0x4D, 0x23, 0x5B, 0x35, 0x53, 0xCD,
0x00, 0x07, 0x64, 0x2F, 0x60, 0x69, 0xA9, 0x43, 0x56, 0x10, 0x12, 0xF7, 0x5A, 0x5B, 0xCA, 0xE2,
0x55, 0x97, 0x16, 0x6B, 0x45, 0xF5, 0x48, 0xA7, 0xEB, 0xE4, 0x27, 0x49, 0xE7, 0x56, 0x4D, 0x3D,
0x86, 0x92, 0xC5, 0x5C, 0x08, 0x01, 0x47, 0xA8, 0xF4, 0xFA, 0xE7, 0x29, 0x1B, 0x56, 0x61, 0x1A,
0xCE, 0x79, 0x3E, 0x6B, 0xF9, 0x4E, 0xDC, 0x7E, 0xFA, 0xDD, 0x9D, 0xF8, 0x92, 0x91, 0xF5, 0x2E,
0xBE, 0xD8, 0x0C, 0xC5, 0x92, 0x05, 0xED, 0x52, 0xCF, 0x98, 0x2E, 0x6A, 0xB5, 0x85, 0x16, 0x7A,
0x97, 0x6A, 0x5A, 0x26, 0x86, 0xE9, 0x62, 0x41, 0xAB, 0xB6, 0x68, 0x83, 0x9D, 0x42, 0xD5, 0xCF,
0xBF, 0xA6, 0xCE, 0xDA, 0x0B, 0x80, 0xFE, 0xE0, 0xC1, 0x75, 0x8F, 0x59, 0xC1, 0x51, 0xAE, 0x17,
0xCF, 0x78, 0x79, 0x86, 0x76, 0xDF, 0x74, 0xB8, 0xA5, 0x42, 0x83, 0xC3, 0xBB, 0x05, 0x65, 0xC3,
0xB9, 0x00, 0x84, 0x0B, 0x95, 0x4A, 0x41, 0x8A, 0xC0, 0x49, 0x1D, 0x25, 0x58, 0xED, 0x5F, 0xB7,
0x55, 0x38, 0x7E, 0x2A, 0xCE, 0x1B, 0x1F, 0x0C, 0x54, 0x34, 0x13, 0x4F, 0x89, 0xE1, 0x4C, 0x53,
0xB9, 0xF5, 0xC7, 0x76, 0x0F, 0xFE, 0xD7, 0xD1, 0x14, 0x77, 0x6D, 0xEC, 0xE6, 0xD9, 0x5D, 0xC0,
0x7B, 0x28, 0x13, 0x19, 0x6D, 0xC1, 0x88, 0xA0, 0x2B, 0x5B, 0xC9, 0xFB, 0x36, 0x5C, 0x86, 0xD6,
0x23, 0xDC, 0xD2, 0x02, 0x9E, 0xA4, 0x13, 0xC8, 0xBA, 0xD8, 0xDC, 0x5A, 0xAB, 0x60, 0x13, 0xD1,
0x51, 0xE8, 0x86, 0xF1, 0x9C, 0x1A, 0x2B, 0x09, 0xCB, 0x30, 0xFC, 0xAC, 0xF7, 0xB8, 0xF8, 0x9B,
0x71, 0xE6, 0x38, 0xC4, 0xB8, 0x2E, 0xFD, 0x1B, 0x3A, 0xC3, 0x6C, 0x3F, 0x7A, 0x52, 0x7C, 0xC9,
0xBA, 0x7E, 0x05, 0xEA, 0xA2, 0xDF, 0x16, 0x83, 0xC4, 0xFC, 0x1C, 0xD5, 0x81, 0xE4, 0x5E, 0x41,
0x18, 0xC6, 0x06, 0xB1, 0xC7, 0xC5, 0xC6, 0x30, 0xDA, 0x8E, 0x49, 0xEC, 0x0E, 0x8C, 0x60, 0x4D,
0x76, 0x4B, 0x8D, 0xAA, 0x7F, 0x10, 0xBA, 0xC8, 0x10, 0xC5, 0xA8, 0x42, 0x21, 0x78, 0x48, 0xFE,
0x57, 0x9F, 0x81, 0xA2, 0x93, 0x3E, 0xB1, 0xA7, 0x53, 0xAA, 0x69, 0x2D, 0x1A, 0xD5, 0xD2, 0x43,
0x10, 0x24, 0x44, 0x3F, 0x31, 0xAF, 0x27, 0xE6, 0x8F, 0x8A, 0x41, 0x13, 0x26, 0x22, 0x5F, 0x98,
0x5B, 0xA6, 0x29, 0x49, 0x5C, 0x78, 0x2D, 0xE7, 0x86, 0x24, 0x41, 0x7E, 0x21, 0xBB, 0xEC, 0x2E,
0x5E, 0x0D, 0x86, 0x97, 0x5A, 0x33, 0x99, 0x58, 0xCD, 0xB8, 0x3B, 0x57, 0x28, 0x56, 0x11, 0x6E,
0xA0, 0x01, 0xF4, 0xB2, 0xB2, 0xD5, 0xC4, 0x3F, 0x08, 0xE7, 0xFA, 0x13, 0xC9, 0xFD, 0x98, 0x43,
0x41, 0x39, 0x76, 0xEA, 0xC7, 0x14, 0x6F, 0xC0, 0x71, 0xB6, 0x4F, 0xD1, 0x3E, 0x42, 0x7D, 0x72,
0xFE, 0xF5, 0x8A, 0x7F, 0x7C, 0x94, 0xA6, 0x77, 0x87, 0xDC, 0x6D, 0xA5, 0xA9, 0x73, 0x7D, 0x66,
0x27, 0xFD, 0x5E, 0xC0, 0xBD, 0x67, 0xB3, 0xCE, 0xE6, 0xAA, 0xF7, 0xF2, 0x4F, 0x88, 0xFB, 0xB0,
0x55, 0x1F, 0x61, 0x3C, 0x98, 0xB5, 0xC9, 0x56, 0x9E, 0xD8, 0x99, 0x4A, 0xF4, 0x9C, 0x1E, 0x9C,
0x98, 0x69, 0x1F, 0x82, 0xAE, 0x2E, 0xAF, 0xDF, 0xF6, 0x72, 0xD3, 0xBE, 0x6B, 0xBA, 0x91, 0x5A,
0x3D, 0x2C, 0xBC, 0x48, 0x64, 0xC8, 0x97, 0x53, 0xB2, 0x1C, 0xEA, 0x0D, 0xC1, 0x3D, 0x75, 0xB0,
0x32, 0xAE, 0xBF, 0xE6, 0xC7, 0x5E, 0xC2, 0xB3, 0x86, 0x8C, 0x84, 0xA4, 0x23, 0x84, 0x30, 0x98,
0x8E, 0x78, 0x34, 0x0E, 0x76, 0xE4, 0x5B, 0x60, 0x64, 0x29, 0x0D, 0x9C, 0x23, 0x9F, 0x60, 0x65,
0x12, 0xAC, 0x41, 0xEC, 0x19, 0x90, 0xF4, 0x04, 0xEC, 0xF0, 0x47, 0xB4, 0x0B, 0x90, 0x6F, 0xB0,
0x39, 0xA9, 0x4D, 0x31, 0x45, 0x5A, 0x6D, 0xD4, 0xEA, 0x74, 0xDB, 0xA4, 0x4C, 0x3E, 0x9F, 0x91,
0x52, 0x6E, 0xBD, 0xDF, 0x8A, 0x1D, 0xEE, 0xC8, 0x36, 0xF1, 0xC2, 0x9F, 0xCF, 0x76, 0xDC, 0xA2,
0x15, 0x64, 0x5F, 0x5F, 0xB7, 0x2F, 0x33, 0x2B, 0xAF, 0xD8, 0xB5, 0xCB, 0x79, 0x34, 0x43, 0x72,
0xB7, 0xA7, 0xBE, 0xB7, 0x71, 0xED, 0x9B, 0x66, 0xBE, 0x99, 0xD6, 0x62, 0x31, 0x2D, 0x3D, 0xF6,
0xE7, 0x15, 0x4A, 0xB0, 0xFE, 0xFD, 0x76, 0x76, 0x99, 0xB8, 0x18, 0x96, 0xE0, 0x56, 0x44, 0xF9,
0xFC, 0xCE, 0xB5, 0x3B, 0xBD, 0x38, 0xD7, 0x4B, 0x9D, 0x13, 0x14, 0x8C, 0x2E, 0x04, 0x92, 0x3E,
0xAE, 0x0B, 0xCA, 0x2F, 0x78, 0xA0, 0xCB, 0xA8, 0x21, 0x28, 0x6D, 0x73, 0xE5, 0xFF, 0x17, 0xEA,
0xC2, 0x2F, 0xF1, 0xFC, 0xDC, 0xEE, 0x97, 0x51, 0x6C, 0x29, 0x25, 0x7E, 0x43, 0xB2, 0xF0, 0x4C,
0x5B, 0xF4, 0xCA, 0x60, 0xAB, 0x2B, 0x43, 0x6A, 0x90, 0x15, 0x3D, 0x04, 0x84, 0x29, 0x2C, 0xB5,
0x81, 0x80, 0xEB, 0xFF, 0x0A, 0xB4, 0x32, 0x89, 0x30, 0x76, 0xC7, 0x48, 0xC0, 0x34, 0xCD, 0x4F,
0x6C, 0xBF, 0x0B, 0x7B, 0xFE, 0x3C, 0xBF, 0x63, 0x1E, 0x6F, 0x84, 0xC7, 0xAF, 0x87, 0x2A, 0x3F,
0xBF, 0x3F, 0x7E, 0x26, 0xB4, 0xF8, 0x3B, 0x59, 0x8F, 0xA7, 0x1F, 0x7E, 0xE7, 0xCD, 0x89, 0xE5,
0xCE, 0x57, 0xFC, 0xFE, 0x7D, 0xF9, 0xE6, 0x01, 0x94, 0x1F, 0xE2, 0xE5, 0xC7, 0xE4, 0xDC, 0x67,
0x1F, 0x66, 0x8F, 0xEF, 0xE3, 0x7A, 0x25, 0x44, 0xBD, 0xC2, 0xF1, 0xE8, 0xCD, 0xCA, 0x45, 0xDE,
0x7C, 0x4B, 0x89, 0x8C, 0x12, 0xED, 0x65, 0xF9, 0xD3, 0xCA, 0xDB, 0xE4, 0xC4, 0x47, 0x47, 0xA7,
0x7E, 0x58, 0x97, 0x43, 0xB9, 0xDC, 0x2B, 0x9C, 0xC4, 0x4B, 0x8C, 0x1D, 0x7C, 0x92, 0xC3, 0xCA,
0x05, 0x29, 0x0D, 0xB9, 0x6B, 0xE7, 0xA3, 0x81, 0xC6, 0x64, 0x39, 0xD7, 0x39, 0xFD, 0x04, 0x2F,
0xAB, 0x7A, 0x10, 0x39, 0xE3, 0x55, 0xB4, 0xF8, 0xCA, 0x7E, 0x4B, 0xD7, 0xFF, 0x02, 0xBD, 0x7C,
0x4F, 0x70, 0xDC, 0x56, 0x7A, 0xE7, 0x07, 0x40, 0x22, 0xC6, 0xC2, 0x6E, 0x9E, 0x0F, 0x52, 0x32,
0xFE, 0x13, 0xC2, 0x87, 0x39, 0x68, 0x9C, 0x61, 0x63, 0x0F, 0x73, 0xC8, 0x56, 0x35, 0xBA, 0x61,
0xA9, 0x6A, 0x5C, 0x15, 0x1F, 0xCC, 0xAC, 0xD5, 0x9E, 0x54, 0x5C, 0x5B, 0x9A, 0xC3, 0x5C, 0xC6,
0xD9, 0x48, 0x3E, 0x4C, 0xD5, 0xB2, 0x32, 0x4D, 0x35, 0x2C, 0x1D, 0x7C, 0x70, 0x55, 0xCC, 0x54,
0xD6, 0x9B, 0xC3, 0x56, 0x65, 0x7C, 0xF0, 0x61, 0x4C, 0x57, 0x8D, 0xF6, 0xC0, 0xF5, 0x62, 0xC6,
0x2D, 0x36, 0x64, 0x1F, 0x7C, 0xD0, 0x41, 0xB0, 0xB5, 0x1E, 0x1F, 0x58, 0x15, 0x61, 0x6C, 0x79,
0x9D, 0x48, 0x15, 0x13, 0x96, 0x20, 0xAA, 0x49, 0x76, 0xF7, 0xDB, 0xDF, 0xEF, 0xA1, 0x9B, 0x22,
0x25, 0xCA, 0x36, 0x6D, 0x65, 0x29, 0x00, 0x0D, 0xBC, 0x46, 0x03, 0xDF, 0xFB, 0xDE, 0xF7, 0xE7,
0xF7, 0x7D, 0xEF, 0x7B, 0x12, 0x11, 0x3F, 0x12, 0x5F, 0x64, 0x5A, 0xE4, 0x51, 0x11, 0x71, 0xB5,
0x3E, 0xA9, 0x87, 0x89, 0xD8, 0xB9, 0x78, 0xB1, 0xD4, 0x44, 0x70, 0x7A, 0xB3, 0xF5, 0x94, 0xD6,
0xC1, 0xE2, 0xAF, 0x76, 0xB6, 0xE2, 0xD4, 0xDC, 0x6B, 0x59, 0x52, 0xF3, 0x25, 0x69, 0x4B, 0x14,
0x89, 0x58, 0x5A, 0xAF, 0x68, 0x7D, 0x62, 0x72, 0x83, 0xB9, 0xF7, 0x5C, 0xEB, 0x3F, 0x69, 0x7D,
0xE1, 0xEA, 0x62, 0x6D, 0x47, 0x2B, 0x4E, 0xCD, 0xBD, 0x51, 0x4F, 0xEB, 0xB4, 0xA9, 0x75, 0x21,
0x5E, 0x8A, 0xDF, 0x17, 0xA0, 0xA1, 0x8D, 0xDD, 0x27, 0x2D, 0x6C, 0x58, 0x1B, 0x45, 0xD2, 0xD1,
0x03, 0x50, 0xE9, 0xA7, 0x6E, 0x6A, 0x95, 0xB8, 0xA3, 0x81, 0x3B, 0xBC, 0xD8, 0xC7, 0xB3, 0x70,
0x07, 0x1B, 0xBA, 0xD2, 0x7E, 0x7C, 0x28, 0xBE, 0x1A, 0xE2, 0x47, 0x0F, 0x0A, 0xFF, 0x1A, 0x62,
0x17, 0xA2, 0x44, 0xFE, 0x67, 0xD5, 0xA5, 0x40, 0x0F, 0xEE, 0x22, 0xFE, 0x4B, 0x4E, 0xF9, 0x67,
0xE9, 0x3E, 0x3A, 0x93, 0x77, 0xA2, 0xEF, 0xA8, 0x98, 0x0F, 0x93, 0x50, 0xC4, 0x49, 0x0D, 0x71,
0x2E, 0xDB, 0xF5, 0xC8, 0xAD, 0xAE, 0x9C, 0x4C, 0xA4, 0x89, 0xFB, 0xFB, 0x22, 0x5E, 0x2E, 0xB3,
0xC1, 0x68, 0x24, 0x27, 0x75, 0x56, 0x3D, 0xC4, 0xD6, 0x57, 0x7C, 0x3D, 0x68, 0xC8, 0xC1, 0xB6,
0xB9, 0xB5, 0x4D, 0xC2, 0x24, 0xC8, 0xC4, 0x1D, 0x89, 0xF4, 0x72, 0x71, 0xF1, 0x9B, 0x79, 0xF3,
0x64, 0xBC, 0x34, 0x9C, 0x95, 0x6E, 0xEF, 0x6C, 0xD9, 0xD1, 0x31, 0x7E, 0xF8, 0x37, 0xD7, 0x7E,
0xFD, 0xDB, 0xAD, 0x2D, 0x3F, 0x38, 0x7B, 0xE3, 0xD2, 0x45, 0x3E, 0x6F, 0x5A, 0x12, 0x3B, 0xF7,
0xE2, 0xDA, 0x3D, 0x3E, 0x44, 0x96, 0xBE, 0xEC, 0x6B, 0x7E, 0x84, 0x4F, 0xDE, 0xD0, 0x7F, 0xF6,
0x1A, 0xDE, 0xAE, 0xF1, 0x6E, 0x1C, 0x07, 0x38, 0x96, 0x60, 0x20, 0x8F, 0xED, 0xAD, 0x63, 0xB1,
0xE3, 0xD8, 0xC1, 0x10, 0xE0, 0xA8, 0x4B, 0xB6, 0x58, 0x03, 0xD3, 0xDE, 0xB0, 0x78, 0xF4, 0xAD,
0xFC, 0xF6, 0xD1, 0xCE, 0xD8, 0x0E, 0x1E, 0xB5, 0x65, 0xA0, 0x53, 0xDE, 0xAF, 0x05, 0xC7, 0xB8,
0x1A, 0x91, 0x39, 0x72, 0x0F, 0x1C, 0xC6, 0xA0, 0x80, 0xC9, 0x75, 0xD3, 0xE5, 0x82, 0x5C, 0xBF,
0xA3, 0x39, 0x58, 0x5C, 0xDC, 0x78, 0x03, 0x84, 0xE1, 0xEF, 0xC8, 0xCD, 0xD6, 0xF1, 0x56, 0xE7,
0x29, 0x36, 0x07, 0xE6, 0xEE, 0xD0, 0xDC, 0xBD, 0xC6, 0xBB, 0x9D, 0x15, 0x36, 0xFB, 0x6C, 0xB6,
0xFA, 0x68, 0xD6, 0xFA, 0x34, 0x9A, 0xF5, 0x15, 0xD9, 0x93, 0x38, 0xE1, 0xC7, 0x78, 0x2A, 0xC5,
0x29, 0x1A, 0x8B, 0x53, 0x82, 0x86, 0xDA, 0x96, 0x7C, 0x8D, 0x65, 0x49, 0x20, 0x02, 0xE8, 0xA3,
0xFC, 0xE9, 0xB8, 0x27, 0xDE, 0x53, 0xB1, 0x55, 0x24, 0x12, 0x7A, 0xB1, 0x8A, 0x13, 0xBB, 0xF0,
0xE2, 0xBA, 0x24, 0x2A, 0xF6, 0x7E, 0x57, 0x48, 0x6F, 0x28, 0xDE, 0xB5, 0x02, 0x57, 0x91, 0x17,
0x77, 0x25, 0x71, 0xC0, 0x71, 0x15, 0x25, 0xD2, 0xF5, 0x62, 0x27, 0x4F, 0x44, 0xA1, 0x2F, 0x5D,
0x23, 0x5C, 0x65, 0x45, 0x1B, 0x1F, 0x6A, 0xA5, 0x6C, 0x71, 0x63, 0x51, 0x50, 0x1B, 0x68, 0x9E,
0x8B, 0xFE, 0x35, 0x57, 0x62, 0x7B, 0xE5, 0x84, 0xF8, 0x33, 0x89, 0x14, 0x6F, 0xE5, 0xDE, 0x99,
0x95, 0xB8, 0xAD, 0x4E, 0x38, 0x59, 0x98, 0xD4, 0xD0, 0xFB, 0xC2, 0x59, 0x79, 0x25, 0x52, 0x27,
0xE6, 0x24, 0x7C, 0x1B, 0xCC, 0x18, 0x82, 0x15, 0x10, 0xF5, 0x93, 0x14, 0xA3, 0x9F, 0x1C, 0x00,
0x43, 0xD1, 0xD5, 0x26, 0x46, 0x75, 0x6A, 0xC1, 0x10, 0x0B, 0x99, 0xA8, 0x43, 0xBE, 0xBA, 0x01,
0x86, 0x56, 0x45, 0x56, 0xE1, 0xA5, 0x4E, 0xE6, 0x64, 0x6E, 0x6A, 0x17, 0xE8, 0x53, 0x09, 0xAE,
0x77, 0x29, 0x7A, 0xE4, 0x3B, 0xD8, 0xA4, 0x40, 0x96, 0x57, 0x54, 0x22, 0x4D, 0xF6, 0xC1, 0x32,
0x28, 0x48, 0xAA, 0x82, 0xA8, 0x58, 0xA6, 0xE3, 0xD6, 0xB5, 0x58, 0xFC, 0x44, 0xAC, 0xCD, 0x3D,
0x7D, 0x60, 0x48, 0x36, 0x31, 0x9C, 0x1C, 0x63, 0x0E, 0xF9, 0xF8, 0x83, 0xCA, 0x04, 0x85, 0x11,
0x85, 0xF3, 0xE9, 0x25, 0x10, 0x31, 0x07, 0x52, 0x41, 0x48, 0x32, 0x03, 0x52, 0x7D, 0xB0, 0x47,
0x45, 0x14, 0x58, 0xE7, 0xEA, 0x9B, 0x29, 0x14, 0x2E, 0x53, 0xAF, 0x3E, 0x5B, 0xA0, 0x6B, 0x05,
0x35, 0x15, 0x77, 0xB5, 0x41, 0x6E, 0x08, 0x72, 0x03, 0x0C, 0x66, 0xA0, 0x35, 0x64, 0x87, 0xA3,
0x95, 0x18, 0xB1, 0xE2, 0x85, 0x5E, 0x87, 0x24, 0x94, 0x35, 0x81, 0xF8, 0x38, 0xD7, 0x21, 0x9E,
0x60, 0x7E, 0x4D, 0xDC, 0x0B, 0xB1, 0x7D, 0x3D, 0xB7, 0x4B, 0x7C, 0x13, 0xE8, 0x1C, 0x72, 0xBD,
0x60, 0x7E, 0xEA, 0x8D, 0x6F, 0x38, 0x21, 0xCE, 0x85, 0xD8, 0xBA, 0x7E, 0xF3, 0xD9, 0xA2, 0xA7,
0xF3, 0x60, 0xB1, 0x87, 0x51, 0xC6, 0x58, 0xD4, 0x30, 0x24, 0x9F, 0x8B, 0x8D, 0x8E, 0x6C, 0xE4,
0x72, 0xAE, 0xA7, 0x87, 0x01, 0x54, 0xA7, 0xA3, 0xAF, 0xC3, 0xA6, 0x7D, 0x3D, 0x6B, 0x92, 0x54,
0x82, 0xD4, 0xD4, 0x23, 0x8A, 0x69, 0x0E, 0xB1, 0xAD, 0xA1, 0xF3, 0x36, 0x75, 0x06, 0x24, 0xF1,
0x64, 0x8E, 0x27, 0xF1, 0xF8, 0xC4, 0xE3, 0xC9, 0x12, 0x4E, 0x14, 0x7F, 0x47, 0x69, 0xAC, 0xE1,
0x04, 0x43, 0x52, 0x83, 0xEC, 0xD8, 0xB9, 0xD1, 0x0C, 0xFE, 0xA1, 0xF3, 0xA2, 0xA3, 0x6A, 0xD0,
0x64, 0x93, 0x27, 0x1D, 0xBD, 0x06, 0x93, 0xBA, 0xE3, 0xF5, 0x41, 0xEB, 0x58, 0x4F, 0x5F, 0xDF,
0x58, 0x7C, 0xF9, 0x4E, 0xA2, 0x7A, 0xBC, 0x37, 0xAB, 0x43, 0xF0, 0xED, 0xBC, 0x0B, 0xD1, 0x51,
0xD0, 0xFC, 0x92, 0xC6, 0xD4, 0xC9, 0x3C, 0x0A, 0x47, 0x54, 0x87, 0x14, 0x84, 0x0E, 0x6C, 0x54,
0x5A, 0x42, 0x76, 0xBC, 0x8F, 0x3E, 0xE5, 0xC8, 0x69, 0x1A, 0xA7, 0xE5, 0x5E, 0x8F, 0x22, 0x52,
0x42, 0x2F, 0x1A, 0xB8, 0xC7, 0x8C, 0x54, 0x57, 0x54, 0x14, 0x4A, 0x1F, 0x14, 0x96, 0x56, 0xE9,
0x42, 0xC6, 0xEC, 0xA2, 0x81, 0x26, 0xE7, 0x63, 0xAA, 0x17, 0x15, 0x4F, 0xA6, 0x74, 0x1F, 0x06,
0x3F, 0x7B, 0x0C, 0xF6, 0x03, 0x5F, 0x18, 0x11, 0xC3, 0x13, 0xBB, 0xB2, 0x7F, 0x20, 0xE0, 0xE7,
0xC3, 0xBD, 0x8C, 0x17, 0x24, 0x8E, 0x7A, 0x81, 0xC1, 0x6D, 0x3E, 0x28, 0xC1, 0xD3, 0x1B, 0xFA,
0xB4, 0x86, 0xC2, 0x52, 0xF4, 0x8C, 0xDA, 0xA3, 0x73, 0x1D, 0x8C, 0x12, 0xB4, 0x64, 0xE6, 0xAD,
0xDC, 0xBA, 0xBE, 0x12, 0x2B, 0xEF, 0x84, 0x24, 0x61, 0xE2, 0xA6, 0x6B, 0x79, 0xE8, 0xAC, 0x9C,
0xCE, 0xD5, 0x09, 0x05, 0x2B, 0x51, 0xCA, 0xDA, 0x67, 0xB1, 0xB3, 0x02, 0xA2, 0x4E, 0x66, 0x12,
0x82, 0xDA, 0xB5, 0x82, 0x2F, 0x5C, 0xF8, 0x2E, 0xF8, 0x0E, 0xC3, 0x80, 0x4E, 0x4C, 0xBD, 0x6E,
0xD4, 0x30, 0x37, 0x76, 0xA4, 0x79, 0x42, 0x2C, 0x3C, 0x52, 0xE1, 0x0D, 0x6F, 0xAD, 0xC4, 0xEE,
0x85, 0x13, 0x52, 0x9F, 0x81, 0xB1, 0x5C, 0xCB, 0x7D, 0x7C, 0x5B, 0xAA, 0x13, 0xB0, 0x9A, 0x10,
0xB9, 0xB5, 0x4F, 0x32, 0x67, 0xE5, 0x1F, 0x21, 0x25, 0xE8, 0x52, 0x2F, 0x92, 0xB5, 0x01, 0x7E,
0x9B, 0xA2, 0x2B, 0xDF, 0xD6, 0x1C, 0xD0, 0x06, 0x73, 0xA7, 0xE5, 0x2D, 0x21, 0x1C, 0xDC, 0x8B,
0xDD, 0x77, 0x8B, 0x7B, 0x5E, 0xED, 0xB0, 0xB6, 0x75, 0xA8, 0x50, 0x5D, 0x73, 0x87, 0xE6, 0xD0,
0xCA, 0x76, 0x30, 0x2E, 0xD7, 0xE1, 0x04, 0x83, 0x15, 0x68, 0xAC, 0x06, 0xA1, 0xEE, 0xB9, 0xFF,
0x9D, 0xC9, 0xCC, 0xDA, 0x47, 0xA9, 0xDC, 0x58, 0x79, 0x5A, 0xDC, 0x57, 0x4E, 0xD4, 0x60, 0x0D,
0x92, 0xB6, 0x55, 0xAC, 0xE5, 0xA5, 0x77, 0x14, 0xFC, 0xAA, 0xC3, 0xAC, 0x9C, 0xCF, 0xC3, 0x44,
0x3D, 0x1D, 0xA1, 0xBB, 0x75, 0xF4, 0xB7, 0x91, 0x41, 0x0F, 0x7A, 0x60, 0x22, 0x1C, 0xDA, 0x5A,
0x4E, 0x63, 0x01, 0xDE, 0x43, 0x41, 0xA0, 0x1A, 0x54, 0x21, 0xA9, 0x27, 0xB7, 0x2F, 0x83, 0x56,
0xAB, 0x0D, 0x79, 0x84, 0x7C, 0xBD, 0xB9, 0xCB, 0xB7, 0xDB, 0x2E, 0x8D, 0x89, 0x33, 0x8C, 0xF7,
0xA1, 0x05, 0x7E, 0xEC, 0xE5, 0xB0, 0x3E, 0xF3, 0x30, 0x31, 0xEA, 0x4C, 0x26, 0xD6, 0x17, 0xF4,
0xAE, 0x34, 0x3F, 0xC7, 0x41, 0xFF, 0x67, 0xB8, 0x77, 0x7D, 0xD2, 0xF0, 0x74, 0x24, 0xEE, 0x3B,
0x05, 0xDC, 0xEF, 0x3C, 0x4C, 0xA6, 0x97, 0x83, 0xA4, 0xDE, 0x6A, 0x1F, 0xA2, 0x54, 0x9A, 0xE7,
0x75, 0x2A, 0xBB, 0xB2, 0x67, 0x7B, 0x34, 0xFE, 0x80, 0x5B, 0x83, 0x21, 0x48, 0x2C, 0x40, 0x83,
0x46, 0x22, 0x41, 0xC2, 0x2F, 0xA0, 0xEC, 0xE8, 0xF9, 0xA0, 0xA7, 0x61, 0x02, 0x30, 0x50, 0x72,
0xF7, 0x56, 0x61, 0x83, 0xF5, 0x7B, 0x62, 0x83, 0x1D, 0x1F, 0xF7, 0xC4, 0x06, 0xE0, 0xDA, 0xAA,
0x26, 0x2B, 0x76, 0x98, 0xC4, 0xAF, 0xFD, 0x71, 0x3F, 0xAD, 0x7A, 0xF5, 0xC7, 0x2F, 0xA9, 0x97,
0xF2, 0x30, 0x7C, 0x28, 0xCC, 0xD4, 0x50, 0x9A, 0x47, 0xDF, 0x5F, 0x76, 0x72, 0x15, 0xCD, 0xFB,
0xE8, 0x5E, 0x37, 0x81, 0x62, 0x5F, 0xA7, 0x38, 0x5C, 0x80, 0x04, 0xAB, 0x80, 0x4E, 0x13, 0xE2,
0x6A, 0xE7, 0x03, 0x27, 0xF3, 0xA3, 0xA1, 0xFA, 0x51, 0x5F, 0x30, 0x12, 0x91, 0xFC, 0x95, 0x5E,
0xD8, 0xF6, 0x2C, 0x39, 0x08, 0x3A, 0xA1, 0x65, 0xB4, 0x0E, 0x25, 0x5D, 0x2B, 0xAD, 0x5D, 0x28,
0xCE, 0x07, 0x30, 0x2B, 0x97, 0x41, 0x0C, 0x08, 0x53, 0x69, 0x25, 0xB6, 0xAB, 0xB0, 0xDC, 0x34,
0x25, 0x6D, 0xA1, 0x82, 0xE0, 0x6D, 0xC0, 0x7A, 0x05, 0x6E, 0x85, 0x01, 0x71, 0x21, 0x81, 0x56,
0x8E, 0x0E, 0xB5, 0x61, 0x1D, 0x7C, 0x9B, 0x26, 0x09, 0x23, 0x58, 0xEC, 0xB1, 0x81, 0x76, 0x13,
0xD6, 0xDE, 0x70, 0x9F, 0xE2, 0x13, 0x8E, 0x69, 0x74, 0xD2, 0xBA, 0xD8, 0x97, 0x52, 0x72, 0xCB,
0xB9, 0xE3, 0x03, 0xB6, 0x23, 0xC0, 0xDB, 0xF5, 0xD9, 0xA1, 0xAD, 0x37, 0x33, 0x89, 0xC2, 0xAA,
0x6B, 0x77, 0x7C, 0xCC, 0xD1, 0x50, 0xC3, 0x8A, 0x18, 0x78, 0x52, 0x01, 0x93, 0xFB, 0x72, 0x6A,
0x0C, 0xFD, 0x0A, 0x0F, 0xC3, 0x39, 0x00, 0x3F, 0x07, 0x5D, 0xF2, 0x4D, 0xC7, 0xEE, 0xFF, 0xD1,
0xBC, 0x6A, 0x58, 0x1D, 0x8D, 0x34, 0x84, 0x77, 0x1D, 0x67, 0x7A, 0x34, 0x29, 0xFD, 0x0A, 0x51,
0xDC, 0xB5, 0xF7, 0x60, 0xA4, 0xA1, 0x4B, 0x18, 0xE2, 0x01, 0xAE, 0x1B, 0xD8, 0x03, 0xE1, 0xA3,
0xAB, 0xCF, 0x86, 0x69, 0xE7, 0xF7, 0x50, 0x2A, 0x58, 0x13, 0xF7, 0xD7, 0x62, 0x34, 0x50, 0x4E,
0xC1, 0x2F, 0x42, 0xE9, 0xE8, 0x5F, 0xC7, 0x0D, 0x70, 0xDB, 0x80, 0x0B, 0x25, 0x1A, 0x3A, 0x68,
0x70, 0x72, 0xDC, 0xD1, 0xC5, 0x1D, 0x3E, 0x1A, 0xBC, 0xF3, 0x55, 0x83, 0x5B, 0x98, 0x3B, 0x56,
0x75, 0x66, 0x15, 0x73, 0xBB, 0x69, 0x68, 0x6F, 0x17, 0xBD, 0x0E, 0x78, 0x4E, 0xBD, 0x86, 0xEF,
0x8F, 0x0C, 0x30, 0xEF, 0x13, 0x02, 0xDB, 0xF2, 0x08, 0x48, 0x08, 0xD0, 0x32, 0xA8, 0x74, 0x96,
0x83, 0x6A, 0xB0, 0x3D, 0x1D, 0x35, 0x91, 0x1F, 0x87, 0xB8, 0x6E, 0xF4, 0xC6, 0x2A, 0x23, 0x59,
0xF6, 0x36, 0x75, 0xDC, 0xD1, 0x0B, 0x5B, 0x6A, 0x03, 0xD8, 0xD6, 0x5B, 0xC7, 0x4B, 0x3B, 0xBA,
0x0F, 0xC4, 0x08, 0xBB, 0x06, 0x1B, 0x2F, 0xBE, 0x17, 0x43, 0xED, 0xFA, 0x09, 0x64, 0x0F, 0x88,
0x03, 0xC2, 0x16, 0x9E, 0xA3, 0x65, 0x5B, 0xD1, 0xB4, 0x14, 0xCB, 0x67, 0x79, 0x1A, 0xF3, 0x34,
0xA1, 0x1F, 0x5C, 0x89, 0xC1, 0xD4, 0x36, 0x3C, 0x98, 0xA8, 0x97, 0xE3, 0x06, 0xDE, 0x42, 0xC3,
0x7B, 0xCA, 0x8B, 0xDD, 0x91, 0x8E, 0x13, 0x98, 0xCC, 0x71, 0x24, 0x21, 0x8F, 0xE8, 0x2C, 0x00,
0x5D, 0x57, 0xEC, 0xBC, 0x2F, 0x35, 0x42, 0x03, 0x20, 0x03, 0x22, 0xA4, 0x81, 0xD4, 0x9C, 0x9B,
0xD0, 0x53, 0x18, 0x93, 0xE0, 0x4D, 0x28, 0x28, 0x50, 0x82, 0x9D, 0xFB, 0x68, 0xCC, 0xE9, 0xD8,
0x6B, 0x7E, 0x64, 0x7F, 0x02, 0x0C, 0x63, 0x11, 0x52, 0xBF, 0x78, 0x05, 0x3D, 0xA5, 0x52, 0x40,
0x37, 0x4E, 0xEA, 0x0B, 0x1B, 0x67, 0xE7, 0xA5, 0x93, 0x5B, 0x3A, 0xF2, 0x56, 0xA5, 0xD3, 0x39,
0xDB, 0xEE, 0x94, 0xC5, 0xF8, 0x5D, 0x76, 0x2F, 0x56, 0x3A, 0xF7, 0xAF, 0x50, 0x41, 0xD0, 0x09,
0x9A, 0xB6, 0xEB, 0x3A, 0xFE, 0xC5, 0xE6, 0x20, 0x48, 0xD5, 0x85, 0x8C, 0xDE, 0x14, 0x8C, 0xF5,
0x7E, 0x2D, 0x36, 0x8C, 0x75, 0x02, 0x51, 0x0D, 0x31, 0x40, 0xA9, 0x8A, 0x97, 0xCF, 0xA6, 0x9E,
0x89, 0x5E, 0xA4, 0x75, 0x0C, 0x26, 0xE4, 0xE9, 0x57, 0x7B, 0xA1, 0x34, 0x4A, 0xB9, 0x95, 0xB9,
0x17, 0x75, 0xBF, 0xA9, 0xCB, 0xD2, 0xDA, 0xCC, 0xF0, 0x3A, 0x77, 0x28, 0x0D, 0xAD, 0x6F, 0x80,
0xE0, 0x56, 0xAB, 0xA9, 0x2F, 0xBF, 0xFA, 0x4C, 0x06, 0x85, 0x0C, 0x89, 0x16, 0xEE, 0x38, 0xC1,
0x73, 0x5A, 0x91, 0x43, 0xE0, 0xD8, 0xEA, 0xCA, 0x9C, 0x55, 0x58, 0x00, 0xE8, 0x2E, 0x70, 0xF9,
0x34, 0x7A, 0xB0, 0x64, 0x15, 0x36, 0x0C, 0x9E, 0x82, 0x90, 0xB5, 0xA5, 0xED, 0x40, 0x16, 0x26,
0xC0, 0x08, 0x3C, 0x1D, 0x56, 0x46, 0x2F, 0x04, 0x2D, 0x0B, 0xF2, 0x3C, 0xE2, 0xB5, 0xDC, 0x7F,
0xB1, 0x6F, 0x2C, 0x16, 0x14, 0xAC, 0x06, 0xBB, 0x8B, 0x2D, 0x31, 0x78, 0x83, 0x40, 0x43, 0xF6,
0xA9, 0x8D, 0x81, 0x6D, 0x64, 0xFB, 0x20, 0xC2, 0xC7, 0xD9, 0x92, 0x81, 0x00, 0xBD, 0xB8, 0x5D,
0xD4, 0x68, 0x56, 0x81, 0xA8, 0x9D, 0x77, 0xC0, 0x6E, 0x97, 0xCF, 0xF6, 0xA9, 0x21, 0x25, 0xA2,
0x5D, 0x75, 0x1A, 0xEC, 0x85, 0x79, 0x29, 0xC1, 0x72, 0x0B, 0x60, 0x27, 0xB1, 0xBF, 0x28, 0x08,
0xD3, 0xF6, 0xBF, 0x01, 0xA4, 0x97, 0x7D, 0x7F, 0x0A, 0xEF, 0xEF, 0x53, 0x1C, 0x81, 0xA8, 0x74,
0xEC, 0x60, 0x18, 0x89, 0xF9, 0xAB, 0x18, 0x70, 0xD0, 0x78, 0x13, 0xF8, 0x93, 0x8C, 0x9A, 0x95,
0x83, 0xA5, 0x0C, 0x4B, 0x6B, 0x58, 0x3A, 0xC3, 0xD2, 0x9B, 0x2F, 0x55, 0x58, 0xD6, 0xC3, 0x72,
0x2E, 0x2C, 0x8B, 0x70, 0x2D, 0x0B, 0x6F, 0xA5, 0xA1, 0x8E, 0xC2, 0x91, 0x84, 0x03, 0x09, 0x1F,
0x90, 0x05, 0x85, 0x0E, 0xAF, 0xA6, 0xB2, 0x2C, 0x7B, 0xFA, 0xE1, 0xAC, 0x1C, 0x43, 0xDC, 0x06,
0x2A, 0x4B, 0xD0, 0xEA, 0x4B, 0x19, 0x52, 0x8B, 0xB1, 0x95, 0xF3, 0x44, 0xD9, 0xA5, 0x62, 0x07,
0x00, 0xFB, 0x4A, 0x50, 0xDB, 0x6A, 0x41, 0x48, 0xF2, 0x5A, 0xAB, 0xEF, 0x45, 0x35, 0x3B, 0xF3,
0x62, 0xF4, 0x87, 0x48, 0x06, 0xB2, 0x94, 0x9A, 0x8B, 0xB6, 0x20, 0xFE, 0xA8, 0x69, 0xF1, 0x7A,
0x91, 0x41, 0xB4, 0xC7, 0xB0, 0x8D, 0xC4, 0x1A, 0x68, 0xB1, 0x07, 0x3A, 0x72, 0x06, 0xB7, 0x62,
0xAF, 0x7B, 0x23, 0x55, 0xF5, 0x2F, 0xF2, 0xE9, 0x7A, 0x51, 0xD4, 0xEB, 0xC5, 0x12, 0xF6, 0xFA,
0x52, 0xBD, 0x08, 0x8B, 0x7A, 0xE1, 0xE7, 0xF5, 0x42, 0xA5, 0x75, 0xF2, 0xD5, 0x10, 0x5F, 0xDF,
0xBE, 0x69, 0x3D, 0xC0, 0x76, 0x47, 0x23, 0x81, 0xD0, 0xF3, 0x91, 0xA5, 0x07, 0xD6, 0xFA, 0x23,
0x29, 0xA0, 0x65, 0x9B, 0x90, 0xC2, 0xB9, 0x1C, 0xCB, 0xDB, 0x06, 0x94, 0xAB, 0xB3, 0xB4, 0xD4,
0x56, 0xD1, 0x95, 0xBE, 0xBA, 0x0A, 0xF3, 0xD2, 0x37, 0x82, 0xD7, 0x3A, 0x86, 0x07, 0xAD, 0xB7,
0xBA, 0x77, 0x3F, 0xEB, 0x8E, 0x6D, 0xF6, 0xF9, 0xE8, 0x86, 0x2E, 0xF4, 0x9F, 0x0F, 0x06, 0x32,
0x0F, 0x8D, 0x2A, 0xC5, 0xDF, 0xDA, 0xFA, 0x12, 0x0C, 0xA4, 0x31, 0x92, 0xEE, 0xE6, 0xB5, 0xF2,
0xA6, 0xCE, 0x4A, 0xE3, 0x30, 0xB6, 0x6F, 0x20, 0xCB, 0xD7, 0xE7, 0xD7, 0xFF, 0x10, 0xCE, 0xB6,
0x6D, 0x82, 0xD7, 0x98, 0xD2, 0x6A, 0xD0, 0x35, 0xF5, 0x18, 0xDB, 0xD5, 0xC2, 0xD3, 0x69, 0x45,
0x0F, 0x22, 0x86, 0xD6, 0xB9, 0x63, 0xB2, 0x95, 0x01, 0xB8, 0xC7, 0x36, 0x2B, 0xFB, 0x4F, 0x54,
0x1D, 0x2A, 0x19, 0xC3, 0x01, 0xDB, 0xF9, 0xC4, 0x8D, 0xCA, 0x49, 0x9D, 0xF7, 0x11, 0x18, 0x94,
0xA2, 0xE0, 0xA7, 0x3E, 0x37, 0x70, 0x02, 0x2F, 0x18, 0xC3, 0x67, 0x23, 0xC4, 0xDE, 0x50, 0xEC,
0xE1, 0xC4, 0x85, 0xEF, 0x70, 0x6D, 0x68, 0x98, 0x5A, 0x8F, 0x24, 0xA0, 0x37, 0xFF, 0xE5, 0xF1,
0xAC, 0xE9, 0x64, 0x5D, 0x0C, 0xB9, 0xF7, 0x72, 0x1A, 0xC2, 0x97, 0x03, 0xE2, 0xF7, 0x9D, 0x0C,
0x2C, 0x2D, 0x9D, 0x0B, 0x68, 0x28, 0x00, 0x24, 0xFA, 0xC1, 0xD1, 0xAC, 0x6B, 0x8F, 0x36, 0x10,
0x1E, 0x53, 0x1D, 0xFC, 0xF8, 0x1E, 0x0F, 0x3D, 0x28, 0xFB, 0x15, 0xB0, 0x2E, 0x7C, 0xB4, 0x0F,
0x05, 0x81, 0x7D, 0x69, 0x40, 0x3B, 0x0A, 0x63, 0x44, 0x21, 0xD6, 0xE0, 0x7D, 0x1B, 0x98, 0x01,
0xDA, 0x23, 0x21, 0xBD, 0x0B, 0x86, 0x1B, 0x2A, 0x9D, 0x82, 0xE7, 0x5F, 0xF5, 0x01, 0xED, 0xBD,
0xA8, 0x99, 0x92, 0xA0, 0xC5, 0xA9, 0x57, 0x1F, 0x87, 0x0F, 0xCA, 0x3E, 0x83, 0xCB, 0xC6, 0x5B,
0xDB, 0x6C, 0xCD, 0xFF, 0x3E, 0xA2, 0xC5, 0x3B, 0x56, 0x33, 0x01, 0xDF, 0x78, 0x9B, 0x05, 0x13,
0x9F, 0x81, 0xC2, 0x3A, 0x97, 0x23, 0x30, 0x6E, 0x1E, 0x24, 0x87, 0x0C, 0x6A, 0x6E, 0x7D, 0x65,
0x13, 0xCD, 0xC6, 0x2D, 0x1E, 0x32, 0x3E, 0x62, 0x36, 0xC4, 0xBB, 0x41, 0x8F, 0x12, 0x85, 0xBB,
0x52, 0x52, 0x57, 0x48, 0xF1, 0xB5, 0x1A, 0x8D, 0x01, 0x6A, 0xF2, 0x60, 0x10, 0xAF, 0xB1, 0xA7,
0x75, 0x1E, 0x94, 0x81, 0x8D, 0x71, 0x6B, 0x16, 0x9E, 0x27, 0x93, 0xFD, 0xC7, 0xA3, 0x8A, 0xA1,
0x60, 0xAC, 0xF3, 0xE9, 0x2C, 0xE2, 0xAA, 0xBE, 0x34, 0x9E, 0x65, 0x08, 0x50, 0xD2, 0xE0, 0xE0,
0x81, 0xC0, 0x1A, 0x5D, 0x20, 0xAA, 0xCC, 0xC1, 0x37, 0xB3, 0x22, 0x7F, 0x04, 0xF3, 0x01, 0xE3,
0x03, 0xCB, 0x49, 0x01, 0x95, 0xCE, 0xD5, 0x05, 0xE0, 0xCF, 0x81, 0x3B, 0x6A, 0x0D, 0x70, 0x59,
0x76, 0x32, 0xE7, 0x7D, 0x1D, 0xA9, 0x27, 0x87, 0xF0, 0x95, 0xF8, 0x0D, 0x7C, 0x91, 0x55, 0xCC,
0x72, 0xA0, 0x30, 0x5E, 0x21, 0x5F, 0x82, 0x77, 0x28, 0x3D, 0xC0, 0x1B, 0x4C, 0xCF, 0x2F, 0xB3,
0xD7, 0x5D, 0xAD, 0x2F, 0x31, 0xEE, 0x5A, 0xC0, 0x1B, 0xA6, 0x80, 0xDE, 0x70, 0x17, 0x80, 0xAC,
0xFB, 0x0E, 0xE2, 0x61, 0x0E, 0x40, 0x41, 0x41, 0x46, 0xDC, 0x59, 0x6C, 0xF4, 0x8E, 0xE8, 0xA2,
0xB2, 0x38, 0x8F, 0x83, 0xA8, 0xDE, 0x50, 0x45, 0x43, 0xEF, 0x52, 0x06, 0x9B, 0x8B, 0xF8, 0x4F,
0xCD, 0xC3, 0x03, 0xAD, 0xA2, 0xAF, 0x6F, 0xE3, 0x9E, 0xA0, 0x44, 0x34, 0x79, 0x0E, 0xC3, 0xB8,
0x7A, 0x24, 0xC7, 0x6B, 0xD0, 0x81, 0xD2, 0xDD, 0x18, 0x84, 0xD2, 0xE9, 0x57, 0x4E, 0xE5, 0x50,
0x8B, 0x1D, 0x1A, 0xB5, 0xCA, 0x36, 0xC5, 0x42, 0x3D, 0x09, 0xC8, 0x0A, 0x2B, 0x44, 0x7B, 0x0A,
0x97, 0x1C, 0x3A, 0x59, 0x40, 0x7B, 0x14, 0xA2, 0xEF, 0x4F, 0xC7, 0x46, 0xE8, 0xEC, 0x4A, 0xBE,
0xD1, 0x81, 0x03, 0xE6, 0xF7, 0x7B, 0xB1, 0xE3, 0xD4, 0x86, 0x77, 0x72, 0x6C, 0x16, 0x93, 0x92,
0x7B, 0xFB, 0x2D, 0x85, 0x1C, 0x3C, 0xC6, 0x10, 0x82, 0x67, 0x93, 0x2B, 0x75, 0x7C, 0x28, 0x9B,
0x9B, 0x7D, 0x95, 0x7B, 0x29, 0x6C, 0xAA, 0x02, 0x85, 0x25, 0x69, 0xBD, 0xC7, 0xC7, 0x76, 0x8C,
0x08, 0x3E, 0x36, 0xFB, 0x62, 0x8F, 0x8C, 0x14, 0xC4, 0x00, 0xEA, 0xA9, 0x0D, 0xB5, 0xDA, 0xDF,
0x7A, 0x46, 0x0F, 0xD7, 0x5B, 0xBB, 0x79, 0xBD, 0xEA, 0x01, 0x95, 0x85, 0x99, 0xDA, 0xB2, 0x30,
0x7A, 0xD0, 0xD4, 0xC5, 0x6E, 0x16, 0xC6, 0x7E, 0xC3, 0xD1, 0x83, 0x73, 0x53, 0x17, 0x49, 0x26,
0x62, 0x8C, 0xE0, 0x8A, 0x04, 0x85, 0xF8, 0x40, 0xB0, 0x62, 0x5F, 0x91, 0x70, 0x74, 0xF6, 0x02,
0x81, 0x8C, 0xEC, 0x0B, 0xC3, 0x7D, 0x72, 0x30, 0xDC, 0xFE, 0xF7, 0xE0, 0x93, 0x97, 0xE7, 0xBF,
0xD8, 0x87, 0x81, 0x05, 0x36, 0xBF, 0x6B, 0x93, 0x07, 0x29, 0x86, 0xF8, 0xD6, 0x32, 0xB2, 0x58,
0xF2, 0x6A, 0x97, 0x0F, 0xDF, 0xEF, 0x77, 0x62, 0xFA, 0x0D, 0x46, 0x34, 0xA0, 0xBA, 0xD6, 0x62,
0xAC, 0x41, 0xA0, 0x6C, 0x67, 0xE4, 0x5C, 0xE1, 0x5C, 0x9D, 0x85, 0x02, 0x68, 0x1D, 0x23, 0x2C,
0x7F, 0x76, 0xE0, 0xA4, 0xD4, 0x95, 0x82, 0x32, 0xCE, 0x58, 0xB7, 0xAC, 0x31, 0xB2, 0x80, 0x7B,
0xD7, 0xC3, 0x66, 0xE4, 0x4C, 0x06, 0x6E, 0x96, 0x51, 0x03, 0x6D, 0xFF, 0xDD, 0x87, 0x36, 0x87,
0x85, 0x42, 0xB4, 0x38, 0x7A, 0xB3, 0x64, 0x1B, 0xCD, 0x7C, 0xE5, 0x28, 0xDA, 0x3C, 0x40, 0xBE,
0xC1, 0x25, 0x1E, 0xE2, 0xAD, 0x51, 0xCC, 0xF0, 0xF4, 0xAD, 0x51, 0x7C, 0x6A, 0x54, 0x8D, 0xA2,
0x5B, 0x8D, 0xA2, 0x8D, 0x01, 0x33, 0x20, 0x6A, 0xD7, 0x0F, 0x33, 0x62, 0x29, 0x43, 0xB4, 0x7A,
0x95, 0x48, 0x96, 0x3D, 0xF8, 0x52, 0xE2, 0x48, 0x63, 0x00, 0x40, 0xF3, 0x1F, 0xEF, 0xCD, 0x63,
0xDB, 0xD1, 0x4F, 0xA4, 0xA8, 0x4B, 0xB0, 0x2C, 0xD6, 0x6F, 0xC4, 0x80, 0x12, 0xEB, 0x39, 0x44,
0x75, 0x85, 0xB4, 0x43, 0xA9, 0x11, 0xF2, 0x20, 0x8C, 0x22, 0x30, 0x49, 0x0B, 0x29, 0x11, 0x19,
0x20, 0x48, 0xC2, 0xE0, 0xBF, 0x1D, 0x1B, 0xB7, 0x50, 0x98, 0x7E, 0x56, 0xD9, 0xD5, 0x00, 0xB6,
0x06, 0xB0, 0x3C, 0x1A, 0xBF, 0xFB, 0x2B, 0xFC, 0x61, 0xE5, 0x82, 0x99, 0x68, 0xA9, 0xB6, 0xEF,
0x09, 0x43, 0x31, 0xB9, 0xC9, 0x04, 0x0E, 0x23, 0xA2, 0xBE, 0x28, 0xC3, 0x14, 0xC4, 0x9D, 0x5E,
0xCA, 0x74, 0x47, 0x60, 0x42, 0xF3, 0xA1, 0x04, 0x6E, 0xEA, 0xF4, 0xE9, 0xAA, 0x82, 0x82, 0xE8,
0xF3, 0x16, 0x08, 0x6C, 0xBB, 0x17, 0x23, 0x0C, 0xF0, 0x4C, 0x60, 0x03, 0x84, 0x16, 0x75, 0x25,
0xEE, 0x7B, 0x71, 0x1F, 0x8F, 0xFB, 0x6B, 0xEB, 0x46, 0x26, 0x7E, 0xC1, 0x60, 0xAF, 0x19, 0xBB,
0x25, 0x93, 0xDF, 0x2A, 0x1D, 0x63, 0xCE, 0x83, 0xA4, 0x72, 0x0E, 0x1A, 0x5F, 0x6F, 0x57, 0x07,
0xFC, 0xC3, 0xD8, 0x4A, 0x42, 0x1B, 0x0B, 0x49, 0x99, 0x97, 0x42, 0x89, 0xB6, 0x0A, 0xF5, 0xC4,
0x2A, 0x70, 0xD0, 0x99, 0x0B, 0x47, 0x53, 0xE7, 0xBD, 0x97, 0x2E, 0xC4, 0xF6, 0xAA, 0x83, 0x48,
0x72, 0x64, 0x8D, 0xC8, 0xE9, 0x41, 0xE5, 0xAA, 0xB0, 0x1F, 0x5A, 0x3F, 0x26, 0x0C, 0x66, 0x9E,
0xDF, 0xF8, 0xD5, 0x56, 0x9B, 0xAC, 0xCF, 0x52, 0x20, 0x16, 0x64, 0x74, 0xB6, 0x34, 0x39, 0x6F,
0x6A, 0x5B, 0x09, 0x90, 0x5F, 0xED, 0x38, 0x47, 0x94, 0xC2, 0xCC, 0xB1, 0x36, 0x21, 0x82, 0x11,
0x9A, 0x90, 0x8F, 0x9A, 0x45, 0x4B, 0x6E, 0x1D, 0x7F, 0xF5, 0xB6, 0xCD, 0xCE, 0x98, 0x0B, 0x5B,
0x37, 0x29, 0xBD, 0x52, 0xE6, 0x71, 0x89, 0xEE, 0xDB, 0x30, 0x79, 0x3E, 0xEE, 0xEC, 0x3B, 0x55,
0xCA, 0xCA, 0x4C, 0xA9, 0x9C, 0x1C, 0x3D, 0x15, 0xA3, 0xED, 0x7A, 0x0E, 0x46, 0x1D, 0x4E, 0x48,
0x20, 0x93, 0xCB, 0xC2, 0x74, 0x3C, 0x74, 0x99, 0x6F, 0x38, 0xF7, 0xE3, 0x0F, 0x5B, 0x11, 0x03,
0xD3, 0xBE, 0x77, 0x75, 0x79, 0xF1, 0x0D, 0x34, 0x32, 0xA6, 0xE2, 0x1B, 0x6A, 0x14, 0x23, 0xE6,
0xA1, 0x99, 0xFE, 0x33, 0xC6, 0xB0, 0x43, 0xF8, 0xEE, 0xEA, 0xDE, 0xCB, 0x31, 0x7C, 0x7A, 0x36,
0xD6, 0x96, 0xA9, 0xD7, 0x11, 0x57, 0x8D, 0x4A, 0xE7, 0xE6, 0x5F, 0x94, 0x88, 0x52, 0xA8, 0xBB,
0x4C, 0x00, 0x30, 0x41, 0xC8, 0x9D, 0xE7, 0xD5, 0x0E, 0x11, 0x72, 0x61, 0x61, 0xEC, 0xD1, 0x72,
0x29, 0x9D, 0x2A, 0xCC, 0xAB, 0xF2, 0x92, 0xCC, 0xCC, 0x50, 0x60, 0x6F, 0x31, 0x37, 0x40, 0xC3,
0xF5, 0x3E, 0x5E, 0x56, 0x37, 0xD0, 0x3F, 0x31, 0x76, 0xD0, 0x24, 0x6D, 0x9C, 0x0F, 0x7E, 0x0F,
0x09, 0x84, 0x62, 0x78, 0x04, 0xBE, 0x40, 0xC6, 0x29, 0x46, 0xB7, 0x66, 0xC0, 0x6F, 0x1B, 0x44,
0x3F, 0x1D, 0x33, 0x3D, 0xB9, 0x9F, 0x86, 0x00, 0x4F, 0xF8, 0x57, 0x74, 0x1E, 0x32, 0x54, 0xD0,
0xA3, 0xC0, 0x26, 0x9D, 0x4D, 0xC9, 0x53, 0xEF, 0x15, 0xC0, 0x9A, 0x3A, 0x90, 0x46, 0x91, 0xA8,
0xA3, 0x69, 0xD1, 0x56, 0xF6, 0xC7, 0x79, 0xDD, 0x4D, 0xE7, 0x98, 0xF1, 0x43, 0x94, 0xD1, 0x8C,
0xD0, 0x43, 0x77, 0xC0, 0x53, 0x50, 0x62, 0xF2, 0xB5, 0x4C, 0x85, 0x32, 0xD9, 0x01, 0x62, 0xBC,
0x0F, 0x9F, 0xFB, 0xB0, 0x6B, 0xA6, 0x05, 0x32, 0xEF, 0x6A, 0xAF, 0xB7, 0x0C, 0xBC, 0xFD, 0xFB,
0xDF, 0x13, 0x4C, 0x4E, 0xAB, 0x38, 0xF1, 0xCE, 0xE7, 0x44, 0xE2, 0xD3, 0xC4, 0xEA, 0x56, 0x1E,
0x78, 0x67, 0xF2, 0x69, 0x29, 0x92, 0xBA, 0x95, 0xAB, 0x97, 0x5F, 0x4E, 0x11, 0x2D, 0xCC, 0xCA,
0x21, 0x8C, 0x26, 0x10, 0x4A, 0x29, 0x9B, 0xB0, 0x67, 0x3E, 0x04, 0xCA, 0xBE, 0x04, 0x03, 0x55,
0x9F, 0x26, 0x9F, 0x0A, 0x85, 0x03, 0xF4, 0x79, 0xA6, 0xAE, 0x8E, 0x7E, 0x70, 0x29, 0x2B, 0xEB,
0x33, 0xBE, 0x7A, 0xEA, 0x74, 0x56, 0x96, 0xC5, 0x8C, 0xF7, 0xCA, 0x09, 0x3B, 0xAB, 0xF3, 0xFB,
0x88, 0xCC, 0x84, 0xE9, 0x6D, 0x30, 0x43, 0x0B, 0x6D, 0xB0, 0x98, 0x51, 0x84, 0x9E, 0x29, 0x8E,
0x61, 0x27, 0xA7, 0xFD, 0x63, 0x47, 0xCF, 0xA6, 0x08, 0x1D, 0x1A, 0x40, 0xA4, 0x4C, 0x8A, 0x42,
0x56, 0x21, 0xB3, 0xC0, 0xCC, 0x85, 0xFB, 0x6E, 0xA6, 0x28, 0xD3, 0x85, 0xB3, 0x02, 0xF5, 0x08,
0xF6, 0xB7, 0x5A, 0x70, 0xC8, 0xBA, 0xF0, 0x3E, 0xFC, 0x71, 0xCE, 0x1C, 0x37, 0xE5, 0xDB, 0x24,
0xBC, 0x7A, 0x4C, 0x11, 0xAF, 0xA6, 0xDE, 0x99, 0x77, 0x73, 0x00, 0x3F, 0x32, 0xB9, 0x0C, 0x9D,
0xB4, 0xDD, 0x76, 0xD2, 0x7A, 0xE2, 0xA4, 0xB5, 0x39, 0x84, 0x20, 0xFA, 0x74, 0x4E, 0x69, 0xF1,
0x4C, 0xAC, 0x58, 0x33, 0xFE, 0x22, 0x81, 0x48, 0xF5, 0x99, 0x4F, 0xF6, 0x62, 0x3C, 0x0B, 0xB1,
0x49, 0xD0, 0x6A, 0x6D, 0xA6, 0x86, 0x59, 0xA5, 0xBD, 0xF1, 0xE6, 0xE6, 0x06, 0xCC, 0x55, 0xCD,
0x3B, 0x0F, 0x3C, 0x56, 0x04, 0x60, 0x91, 0x9B, 0x76, 0x31, 0x2A, 0xC0, 0x67, 0x0A, 0xA8, 0xDE,
0x4B, 0x43, 0xD8, 0x14, 0x44, 0xE9, 0x09, 0xC7, 0xEF, 0x7A, 0x5E, 0xDA, 0xD0, 0xE2, 0xD9, 0x43,
0x08, 0xBC, 0x4A, 0xE0, 0x98, 0xAC, 0xF4, 0x5B, 0xCF, 0xA5, 0xC4, 0x79, 0xCC, 0xF5, 0xD0, 0x66,
0xFF, 0x86, 0xEA, 0xA1, 0x4D, 0xB6, 0x47, 0x47, 0x25, 0x18, 0x05, 0x0A, 0xD5, 0x51, 0x30, 0x4D,
0x3D, 0x91, 0x97, 0xD0, 0x82, 0xA2, 0x44, 0xC7, 0x93, 0x9B, 0x38, 0xA0, 0x3B, 0xFB, 0x24, 0x04,
0xD3, 0x61, 0x42, 0x9C, 0x01, 0x6C, 0x51, 0x69, 0x43, 0x8D, 0xA6, 0x99, 0x7E, 0xA2, 0xD7, 0x65,
0xB4, 0xDD, 0x35, 0xC9, 0xA8, 0x47, 0x32, 0x86, 0x47, 0x8F, 0x53, 0xA0, 0xF9, 0x5D, 0x7B, 0xBB,
0xEB, 0xB4, 0xFA, 0xD6, 0x9B, 0xDA, 0x82, 0x42, 0x41, 0x3A, 0x88, 0x06, 0x1B, 0x0C, 0xDD, 0x81,
0x58, 0xF4, 0x35, 0xDA, 0x8D, 0x07, 0xE4, 0xA7, 0xDE, 0xD1, 0xBE, 0xBD, 0x1A, 0x4F, 0x69, 0xE8,
0x62, 0xFE, 0x10, 0x83, 0xAE, 0xC4, 0xCC, 0x53, 0x14, 0xB6, 0x8E, 0x89, 0xB4, 0x98, 0x79, 0xAB,
0x9B, 0xAD, 0x6B, 0x99, 0xA0, 0x6B, 0x5E, 0x64, 0x89, 0x53, 0x92, 0xB3, 0x4D, 0x3D, 0xD8, 0xDF,
0xFA, 0x8B, 0x25, 0xF8, 0x29, 0x28, 0x3F, 0xA2, 0x8A, 0x50, 0x6E, 0x41, 0x1F, 0x43, 0x42, 0xE2,
0x53, 0x68, 0x58, 0x41, 0x83, 0xC1, 0xC8, 0x88, 0x2D, 0x7D, 0xBA, 0xC4, 0xD3, 0x65, 0xE8, 0xA5,
0xCD, 0xD5, 0xB3, 0x88, 0x60, 0x81, 0x71, 0xF9, 0xDC, 0x1D, 0x90, 0xD8, 0x18, 0x18, 0x9E, 0xDC,
0xB1, 0x1F, 0x74, 0xB2, 0x83, 0x75, 0x27, 0x0B, 0xB1, 0xD7, 0xB0, 0xFB, 0xE3, 0x5D, 0x6D, 0xDB,
0x7D, 0x80, 0x9F, 0x1A, 0x34, 0x29, 0x54, 0x67, 0xB2, 0x81, 0xBB, 0xA9, 0x0B, 0x8B, 0x39, 0x0A,
0xBA, 0x8F, 0x5D, 0x9E, 0x37, 0x4E, 0xA4, 0xC2, 0x8C, 0x22, 0x2E, 0xF6, 0x63, 0x97, 0x09, 0xBF,
0x06, 0x04, 0x12, 0x12, 0x86, 0x80, 0xB3, 0xA8, 0x32, 0x7E, 0xDE, 0xE5, 0x31, 0xA0, 0x1D, 0xA2,
0xC1, 0x67, 0xC3, 0xC5, 0xC8, 0xA4, 0xD2, 0xAC, 0x02, 0xFD, 0xEF, 0x7B, 0x39, 0xD3, 0x31, 0xD7,
0x06, 0xCC, 0xC9, 0x57, 0x0F, 0x64, 0x98, 0x35, 0x44, 0x98, 0x05, 0x44, 0x06, 0xA3, 0xAB, 0x8E,
0x8B, 0x7D, 0x4D, 0xEB, 0x0D, 0x93, 0x5B, 0xF5, 0x7E, 0x29, 0xF6, 0x27, 0xA9, 0x20, 0xCC, 0xEA,
0x32, 0xCC, 0xAA, 0xD0, 0x1C, 0x58, 0x18, 0x9C, 0xC5, 0x8E, 0x2F, 0x14, 0xAC, 0x14, 0x8D, 0x14,
0x9D, 0xBA, 0x45, 0x65, 0x65, 0xDE, 0x07, 0x2E, 0x03, 0x02, 0x2F, 0xCC, 0x80, 0x20, 0x42, 0xC0,
0x05, 0x53, 0xFD, 0x30, 0x08, 0x8A, 0xE6, 0xE5, 0x32, 0x53, 0xB7, 0x18, 0x3E, 0xC5, 0x1E, 0x15,
0x34, 0x61, 0x16, 0x0C, 0xDA, 0xB0, 0xCD, 0x5B, 0xE9, 0x41, 0xEA, 0x52, 0x30, 0x4D, 0x0E, 0x77,
0xAF, 0xC4, 0x39, 0x9F, 0xCB, 0x4C, 0x28, 0xD6, 0x0D, 0xBC, 0x08, 0xBF, 0x87, 0x33, 0x73, 0xAA,
0x24, 0x85, 0x0D, 0x2F, 0x2B, 0x33, 0xB0, 0x8D, 0xCE, 0x79, 0x3C, 0xE6, 0xF0, 0xA3, 0x15, 0x5F,
0x22, 0xB1, 0x37, 0x0A, 0x80, 0x2D, 0x8C, 0x37, 0x19, 0x93, 0x98, 0xD9, 0x3D, 0x9A, 0x65, 0x6A,
0x06, 0xE7, 0x36, 0x70, 0x51, 0x18, 0xBB, 0xC6, 0xE4, 0x22, 0x20, 0x00, 0x7E, 0xF3, 0x1E, 0xE0,
0xD8, 0x0D, 0x0A, 0x1C, 0x1E, 0xEC, 0x72, 0x3A, 0x74, 0x38, 0x36, 0x8A, 0x78, 0x36, 0x4C, 0x9E,
0xE2, 0xB4, 0x64, 0x5D, 0xAC, 0xEC, 0xB5, 0xCA, 0xDC, 0x7E, 0x03, 0x5A, 0x4D, 0xA2, 0xA8, 0xB2,
0xD7, 0xF6, 0x38, 0x32, 0x58, 0x66, 0xD2, 0xD3, 0xC8, 0x7B, 0x59, 0xD9, 0x61, 0xF7, 0x7C, 0x04,
0x7C, 0x26, 0xCC, 0xA5, 0xB8, 0xEF, 0xA5, 0x66, 0xB0, 0xA0, 0xC8, 0xCC, 0xF4, 0x00, 0x29, 0xE3,
0x86, 0x84, 0xA9, 0x51, 0xBA, 0x7F, 0x6C, 0xB8, 0xA4, 0x55, 0x80, 0x36, 0x40, 0x27, 0x0D, 0x7B,
0x95, 0x17, 0x35, 0xA8, 0x39, 0x4B, 0x85, 0x85, 0x40, 0x31, 0x76, 0xFF, 0x49, 0xBC, 0x0C, 0x2F,
0x6F, 0x64, 0xD2, 0xC4, 0x30, 0xDB, 0xE8, 0x55, 0x67, 0x64, 0x66, 0x31, 0x65, 0x2B, 0x2C, 0xA9,
0xE6, 0x44, 0xE5, 0xB6, 0x50, 0x75, 0xAB, 0x2B, 0x5D, 0x5D, 0x35, 0x63, 0x23, 0x16, 0x30, 0xE8,
0xB3, 0xBE, 0xCE, 0x38, 0x87, 0x03, 0xE9, 0x00, 0x70, 0x26, 0x84, 0x85, 0x1D, 0x85, 0x90, 0x1C,
0xCD, 0xDC, 0xF3, 0x05, 0x29, 0x6A, 0xD0, 0xE8, 0x40, 0xF3, 0x19, 0x2E, 0xD4, 0x98, 0x52, 0x84,
0x55, 0x0E, 0xCD, 0x34, 0x7D, 0x49, 0x8E, 0x17, 0xD6, 0x67, 0xF8, 0x8D, 0x4A, 0x61, 0x03, 0x28,
0x40, 0x1E, 0x13, 0x29, 0x71, 0x95, 0x1E, 0x1E, 0x07, 0x47, 0x93, 0x89, 0xD6, 0x71, 0x5B, 0x45,
0x48, 0xC5, 0x27, 0xC7, 0x88, 0x1B, 0xE7, 0x36, 0x00, 0x69, 0xE5, 0x11, 0x33, 0x81, 0xA0, 0x63,
0xF7, 0x66, 0x7F, 0x19, 0x62, 0x67, 0xF5, 0x03, 0xA9, 0x04, 0x9F, 0xA9, 0x6E, 0x26, 0xA3, 0x8C,
0xB0, 0x5B, 0xB7, 0x26, 0x27, 0x18, 0x09, 0x09, 0x28, 0x72, 0x1F, 0x13, 0x88, 0xA1, 0xFB, 0x2A,
0x3E, 0xA5, 0x5E, 0x2A, 0x2C, 0x1A, 0x30, 0x9B, 0x89, 0x1C, 0x4E, 0x46, 0x19, 0xA7, 0x75, 0x20,
0x32, 0x03, 0xD6, 0x44, 0xC4, 0xB5, 0xB9, 0x99, 0x35, 0x2C, 0x97, 0xF3, 0x44, 0x2F, 0xA5, 0x66,
0x82, 0x79, 0x3C, 0x89, 0xC1, 0x61, 0x81, 0x25, 0x90, 0xBE, 0xFF, 0x67, 0x5E, 0x1A, 0x70, 0x0A,
0x19, 0xD4, 0x50, 0x4B, 0x4D, 0x12, 0xFD, 0x44, 0x54, 0xCD, 0x0B, 0xB0, 0x37, 0xE9, 0x49, 0x32,
0xCF, 0x33, 0xDC, 0x36, 0x73, 0x5F, 0x62, 0x9B, 0xF3, 0x3F, 0xD8, 0x92, 0x06, 0xE9, 0xE5, 0x88,
0xDA, 0x1D, 0x4E, 0x43, 0xC6, 0x2A, 0x7D, 0x70, 0x9F, 0x9B, 0x71, 0x30, 0x98, 0x46, 0xA2, 0x25,
0x31, 0x4C, 0xE9, 0x72, 0xDA, 0xDA, 0x4C, 0x73, 0x0A, 0x3D, 0xC7, 0xF6, 0x23, 0x9E, 0x59, 0x1D,
0xDB, 0x66, 0x6E, 0x2D, 0x69, 0xF0, 0x58, 0xFA, 0x91, 0xC9, 0xFF, 0x67, 0x1E, 0xFE, 0x39, 0x34,
0xCF, 0xB1, 0xF4, 0xFA, 0xC1, 0x50, 0x76, 0xFC, 0x19, 0x64, 0xB2, 0x31, 0x02, 0x39, 0x7F, 0xFA,
0x87, 0xC5, 0x24, 0xB9, 0xEB, 0x1A, 0xDA, 0x53, 0x13, 0xA1, 0x4E, 0x6E, 0x7C, 0x3C, 0x3A, 0xB0,
0x20, 0x9D, 0x52, 0x69, 0x39, 0xF5, 0x5D, 0xEB, 0x49, 0x43, 0x18, 0xB5, 0xC5, 0x70, 0x41, 0xAC,
0xEB, 0x1C, 0x30, 0xF0, 0x65, 0x46, 0x94, 0xCF, 0x80, 0xE5, 0xBD, 0x94, 0xCA, 0x4F, 0x54, 0x85,
0x21, 0xE9, 0x48, 0xDB, 0xD9, 0x18, 0x6D, 0x8C, 0x24, 0x18, 0xF8, 0x3B, 0x5F, 0x4F, 0x1C, 0x21,
0xF2, 0xC3, 0x1F, 0xBE, 0xC0, 0x8B, 0x2A, 0x32, 0x33, 0xF3, 0xE0, 0x30, 0x17, 0x1F, 0xA1, 0x07,
0xA2, 0x9E, 0x26, 0x43, 0x89, 0x30, 0x63, 0xC0, 0x6C, 0x83, 0x30, 0x73, 0x88, 0x83, 0x8F, 0xA8,
0x09, 0x78, 0x0D, 0x6F, 0xCA, 0x39, 0x7D, 0xD0, 0x43, 0x14, 0x91, 0xC0, 0x8A, 0xD4, 0xAD, 0xC2,
0x0F, 0xA9, 0xD4, 0x4B, 0x5D, 0xA8, 0xF7, 0x99, 0x14, 0x98, 0xD9, 0x9F, 0xA6, 0xCA, 0x86, 0x4B,
0xC0, 0x9F, 0x30, 0x31, 0x0A, 0x92, 0x34, 0x12, 0xDF, 0xA4, 0xDE, 0x9A, 0x5B, 0x1D, 0x5B, 0x7C,
0x1D, 0x8A, 0xF3, 0x5B, 0x58, 0xB0, 0xC7, 0x1E, 0x7B, 0xEC, 0xBE, 0x42, 0x4F, 0xFE, 0x9D, 0x1C,
0x45, 0x70, 0xEC, 0x04, 0x7B, 0xAA, 0xF2, 0x6F, 0x14, 0x10, 0x55, 0x15, 0x21, 0x70, 0x62, 0x93,
0xE2, 0xE0, 0x8F, 0x6B, 0x12, 0xCA, 0x2A, 0xC6, 0x75, 0xF3, 0x6A, 0x1E, 0xDC, 0xD3, 0xA5, 0x49,
0x0E, 0x4C, 0x70, 0xE7, 0x16, 0xD0, 0xAC, 0x2E, 0x9F, 0xA7, 0x1E, 0x0E, 0xFF, 0xD2, 0x04, 0x84,
0x15, 0x60, 0xAA, 0x55, 0xE9, 0x45, 0xDE, 0xC4, 0x99, 0xB4, 0x8D, 0xD4, 0xD3, 0xE6, 0xC1, 0x05,
0x3D, 0xA5, 0x32, 0xBA, 0x55, 0xD0, 0x07, 0xC3, 0x2C, 0x7E, 0xC7, 0x49, 0x9D, 0x8F, 0x33, 0x09,
0x72, 0xB1, 0x30, 0x22, 0xBF, 0x28, 0xA4, 0x5E, 0xFB, 0xF9, 0x8C, 0xF8, 0xBF, 0x34, 0x42, 0x0F,
0x20, 0xEE, 0x5C, 0x4E, 0xAD, 0xFC, 0x05, 0xDE, 0xFE, 0xBD, 0x31, 0x9B, 0xAC, 0x0F, 0x16, 0x97,
0x4F, 0x2D, 0x9E, 0x8E, 0xA8, 0x1E, 0xFE, 0xA0, 0xF3, 0xE9, 0xFF, 0x8D, 0x1E, 0x38, 0xD8, 0x5E,
0xFA, 0xE1, 0x03, 0x07, 0xE7, 0xFF, 0xF8, 0x07, 0x3F, 0x11, 0xC6, 0xB3, 0xA7, 0xF4, 0xFF, 0x90,
0x73, 0xB8, 0xF3, 0xA1, 0xB1, 0x4F, 0x1A, 0x73, 0x20, 0x33, 0x91, 0x92, 0xEC, 0x33, 0x5A, 0xB1,
0xAF, 0x52, 0x2F, 0x4E, 0x35, 0x39, 0x23, 0xB1, 0xDE, 0x47, 0x77, 0x96, 0x5E, 0x90, 0x83, 0xFB,
0x27, 0xDF, 0x7F, 0xC9, 0x9F, 0x6F, 0xAC, 0x94, 0x3E, 0xFA, 0x0F, 0x14, 0xC9, 0x99, 0xFF, 0xF2,
0xD8, 0x77, 0xA8, 0x46, 0x12, 0x7F, 0xF9, 0x8F, 0xC8, 0x4B, 0xBA, 0x66, 0xA2, 0x83, 0xBF, 0x29,
0xE4, 0xF0, 0x03, 0xC0, 0x08, 0x4E, 0x74, 0xFB, 0x7B, 0xBB, 0x9A, 0x38, 0x94, 0x31, 0x78, 0xFE,
0x77, 0xEE, 0xCE, 0x9F, 0xEF, 0xAF, 0x3E, 0xFE, 0x7D, 0xF5, 0xF1, 0x03, 0xB9, 0x6D, 0xA2, 0x5E,
0x30, 0x23, 0x06, 0x64, 0xF1, 0x53, 0x6A, 0x4B, 0xBD, 0x82, 0xB9, 0x7E, 0xF5, 0x40, 0x0E, 0xEF,
0x97, 0xD3, 0x65, 0xB4, 0xCE, 0xCD, 0x02, 0xBE, 0xD5, 0x1D, 0x59, 0x66, 0xFA, 0xE0, 0xE1, 0x2F,
0xFD, 0x85, 0x2D, 0x26, 0xE4, 0x64, 0x06, 0xAE, 0x14, 0x93, 0xF2, 0x6D, 0x73, 0xB6, 0x7A, 0xA6,
0x22, 0xAA, 0x5E, 0x91, 0x58, 0x19, 0x4F, 0xF9, 0x79, 0xF5, 0xF1, 0xC2, 0xE4, 0xB7, 0x9C, 0x2A,
0xE6, 0x14, 0x00, 0x42, 0x14, 0xBC, 0xF0, 0xE1, 0xD7, 0xB6, 0xEE, 0xEA, 0xB3, 0x20, 0x20, 0x25,
0xC8, 0xC6, 0xC9, 0x26, 0x4E, 0x82, 0xBA, 0x17, 0xBB, 0x97, 0x70, 0xD2, 0x07, 0x74, 0x44, 0x1C,
0x97, 0xB8, 0x19, 0x4E, 0xFA, 0x38, 0x09, 0x00, 0x26, 0x5F, 0xCA, 0xDC, 0x74, 0x09, 0x80, 0xC0,
0x3B, 0x09, 0xB1, 0x7D, 0x3B, 0xC3, 0x49, 0x9F, 0x73, 0x45, 0xF0, 0x25, 0x17, 0xB2, 0xCA, 0x53,
0xBA, 0xF1, 0x18, 0xF8, 0xF8, 0x13, 0x23, 0xFE, 0x7D, 0x04, 0x3D, 0x50, 0x1D, 0x9C, 0x2F, 0xE3,
0xC6, 0x93, 0xC6, 0xAE, 0x5B, 0x91, 0x1C, 0x43, 0x08, 0x08, 0xF5, 0x6C, 0xA6, 0x05, 0x94, 0x26,
0xF5, 0x11, 0x11, 0x16, 0x45, 0xDD, 0xA8, 0xAC, 0x72, 0xDE, 0x05, 0xC0, 0x06, 0x5C, 0x0F, 0x0B,
0x27, 0xD5, 0x91, 0x82, 0x97, 0x68, 0x5E, 0x44, 0xB8, 0x20, 0xA6, 0xDA, 0xC6, 0xCE, 0x2A, 0xF6,
0xA2, 0xA7, 0xD6, 0x02, 0xDF, 0x06, 0x99, 0x9F, 0x1A, 0xBD, 0x0E, 0x43, 0x52, 0xC8, 0x23, 0x1F,
0x9A, 0xC9, 0x0C, 0x02, 0x3E, 0xFB, 0x26, 0x82, 0x15, 0xD8, 0xF3, 0xE0, 0x4D, 0x8D, 0xCB, 0x53,
0x78, 0x7B, 0x97, 0xEE, 0xBE, 0x66, 0x26, 0xB8, 0x18, 0x84, 0x96, 0x1E, 0xCC, 0x21, 0x4B, 0x3E,
0x26, 0x89, 0x80, 0x08, 0xCC, 0x29, 0xE4, 0xEC, 0xD5, 0xC9, 0xD5, 0x1D, 0x1F, 0x88, 0x12, 0x59,
0xEB, 0x80, 0xD8, 0x0E, 0xC6, 0x2D, 0x2F, 0x65, 0x06, 0xD1, 0x43, 0x0A, 0xAF, 0xC1, 0xA0, 0xAF,
0x33, 0x42, 0xB8, 0x36, 0x04, 0xE4, 0xF9, 0x20, 0x97, 0x7E, 0x42, 0x0F, 0xE1, 0x5E, 0x88, 0x9F,
0xB8, 0x9E, 0x27, 0xFD, 0x44, 0x0D, 0xF8, 0x8D, 0x1E, 0xE1, 0x8D, 0xF0, 0x95, 0xFF, 0x61, 0x5C,
0x8A, 0xB2, 0x55, 0x97, 0x22, 0xB3, 0xCF, 0x47, 0xD7, 0xC7, 0x39, 0xE7, 0x70, 0x97, 0x9C, 0xB3,
0x6A, 0x8C, 0xDC, 0x81, 0xC9, 0x39, 0xC3, 0xF8, 0xB5, 0x4B, 0x39, 0xBC, 0x23, 0xE7, 0x0C, 0xD5,
0x84, 0x04, 0x80, 0x09, 0xD3, 0x1D, 0x42, 0xB3, 0x6B, 0x7B, 0x2A, 0x3E, 0xB1, 0xA4, 0xCA, 0x2E,
0xB5, 0x8E, 0x77, 0xBE, 0x74, 0xC6, 0x05, 0x01, 0xC6, 0x69, 0xA0, 0xF4, 0xDB, 0x75, 0x34, 0x5B,
0xC4, 0x77, 0x74, 0xEE, 0xEB, 0x81, 0xEC, 0xF2, 0xCD, 0xF8, 0x62, 0x3F, 0x31, 0x75, 0xB6, 0xDE,
0x9A, 0xE4, 0x1D, 0xA7, 0x36, 0x5E, 0x07, 0x26, 0xDF, 0x4A, 0x41, 0x4E, 0xB2, 0x91, 0x9C, 0x29,
0x03, 0x08, 0x4A, 0x2A, 0x07, 0xB9, 0xF3, 0x63, 0x79, 0x14, 0xE1, 0xBB, 0xA8, 0x3B, 0x05, 0xF6,
0xDA, 0x45, 0xC2, 0x19, 0x31, 0x16, 0xE6, 0xB0, 0x9A, 0x80, 0xA5, 0x5F, 0x2B, 0xF1, 0xB6, 0x89,
0x76, 0x18, 0x42, 0xA7, 0xA0, 0x13, 0x0F, 0x4C, 0x6A, 0x4D, 0x5A, 0x2D, 0x47, 0x0F, 0xD5, 0xAB,
0xB3, 0x5B, 0x6F, 0xFB, 0x3C, 0x02, 0x39, 0x7D, 0xFF, 0x52, 0x06, 0xF0, 0xCB, 0x34, 0x6F, 0x29,
0x6F, 0x67, 0x15, 0x5B, 0x70, 0x4B, 0xF1, 0xA0, 0x8A, 0xF5, 0xC0, 0x32, 0x93, 0x30, 0x6D, 0xC8,
0x2C, 0xCB, 0x33, 0x68, 0xF7, 0xFB, 0x9C, 0xA3, 0xE6, 0xE4, 0x33, 0xE7, 0xA2, 0x7D, 0x18, 0x6F,
0xC0, 0x2E, 0x80, 0x0C, 0xFB, 0x0B, 0xD6, 0x28, 0x38, 0x9F, 0x5D, 0x34, 0x08, 0xC9, 0x48, 0x7C,
0x8F, 0x6C, 0xBD, 0x49, 0xE0, 0xA8, 0x5E, 0x7A, 0x8F, 0xC5, 0x2B, 0x3E, 0x51, 0x78, 0xDA, 0xC6,
0x11, 0x4E, 0x49, 0xC5, 0x4E, 0xEE, 0xC2, 0x4F, 0x35, 0xA0, 0x1A, 0xFE, 0x75, 0x96, 0xCA, 0x05,
0xE9, 0x56, 0x1E, 0x78, 0xAC, 0xB8, 0xC6, 0xC0, 0x55, 0xA5, 0x11, 0x07, 0x8C, 0x0F, 0x9A, 0xAD,
0xC9, 0x12, 0x53, 0x6B, 0x4B, 0xCC, 0x2F, 0x2E, 0xB1, 0xB4, 0x6D, 0x89, 0x53, 0x03, 0xFF, 0x8B,
0x20, 0xFE, 0x6D, 0x3A, 0x8E, 0x4D, 0xA6, 0xC5, 0xDF, 0x62, 0x8E, 0x67, 0x09, 0xEC, 0xC8, 0x97,
0x1A, 0xE0, 0xC2, 0x92, 0x8A, 0x02, 0xFC, 0x6C, 0xD8, 0x95, 0x25, 0xCB, 0x70, 0xA2, 0xB6, 0xCB,
0xE1, 0xA1, 0x6F, 0x59, 0x80, 0x33, 0x57, 0x81, 0x84, 0xAA, 0x04, 0x6E, 0x68, 0xE6, 0xF5, 0xF7,
0x30, 0xCF, 0x35, 0x67, 0x52, 0x60, 0x7F, 0x60, 0xB6, 0x21, 0x31, 0xF4, 0x9C, 0x78, 0xA7, 0x8D,
0x8E, 0x7A, 0x29, 0xA3, 0xCE, 0x84, 0x65, 0x01, 0xF3, 0xC0, 0x5B, 0x99, 0xD4, 0x1A, 0xA6, 0x30,
0xD2, 0x5E, 0x4D, 0xC5, 0x7B, 0x25, 0x25, 0xDC, 0x64, 0x29, 0x0D, 0xAC, 0x59, 0x04, 0x85, 0x8B,
0x6A, 0x00, 0xCC, 0x50, 0xE8, 0xB5, 0x9C, 0x35, 0x94, 0x77, 0xFA, 0xC9, 0x03, 0xD1, 0xAC, 0x99,
0xBB, 0x63, 0x6E, 0x2E, 0x90, 0xB2, 0xCD, 0xB8, 0x13, 0x0C, 0xC3, 0xB6, 0x06, 0xC0, 0xDA, 0x15,
0x36, 0x32, 0x43, 0x37, 0x2C, 0x01, 0x0A, 0x64, 0xFB, 0xC4, 0xC1, 0x43, 0xA0, 0xE7, 0x65, 0x23,
0x70, 0x5D, 0xEF, 0x6F, 0x11, 0x0A, 0x7F, 0x96, 0x7A, 0xAF, 0x94, 0x92, 0x0C, 0x41, 0x02, 0x30,
0x14, 0x7C, 0x2D, 0x4C, 0x59, 0x02, 0xE4, 0xFA, 0x4A, 0x2E, 0x89, 0x8E, 0xBD, 0xBF, 0x9D, 0x97,
0xE4, 0xCF, 0xF1, 0x16, 0x17, 0x3A, 0x1E, 0x80, 0x5F, 0xDD, 0x59, 0x79, 0xE6, 0x7D, 0xEF, 0x95,
0xFF, 0x9C, 0x84, 0x9D, 0xF4, 0xE6, 0x00, 0x48, 0x46, 0x9D, 0xE3, 0xB4, 0xE7, 0x5A, 0xE1, 0x7C,
0x54, 0xA8, 0xE3, 0x45, 0xF8, 0x5F, 0xF3, 0xF2, 0xD2, 0x27, 0x2C, 0xCF, 0x88, 0x65, 0x89, 0x66,
0xE9, 0xE4, 0x3F, 0x3B, 0x59, 0x6F, 0xA0, 0xE2, 0x47, 0xFE, 0x4F, 0x40, 0xA8, 0x8C, 0x1D, 0x11,
0xD4, 0xEF, 0x0A, 0x13, 0xD5, 0xB1, 0x5A, 0x08, 0xF4, 0x1B, 0x79, 0x64, 0x88, 0xCF, 0xE0, 0x82,
0x6C, 0x62, 0xC1, 0x10, 0xF3, 0x04, 0x7C, 0x5D, 0x35, 0x78, 0x9E, 0x19, 0xCE, 0x6A, 0x24, 0xAD,
0x08, 0xFD, 0x0E, 0xED, 0x5C, 0x1D, 0x29, 0x98, 0xBC, 0x41, 0xC7, 0x1B, 0x08, 0x5C, 0xBA, 0xA6,
0x40, 0x09, 0x3D, 0x47, 0xE0, 0xAA, 0x22, 0x06, 0xB6, 0x78, 0x70, 0xD9, 0x23, 0xCC, 0xC2, 0x48,
0xE5, 0xA6, 0x5A, 0x0B, 0x66, 0x9F, 0x61, 0x1A, 0xB8, 0xFD, 0x22, 0x33, 0x4C, 0x88, 0x0E, 0xBD,
0x5F, 0x46, 0x66, 0x08, 0x4C, 0xAF, 0x25, 0x61, 0x0A, 0xEA, 0x0C, 0x55, 0xDD, 0x67, 0x3E, 0x08,
0xDF, 0x27, 0x36, 0x29, 0xF4, 0x52, 0x33, 0xB7, 0x0F, 0x72, 0x06, 0x87, 0x8E, 0xC9, 0xC1, 0xDE,
0x40, 0x8A, 0x43, 0x5D, 0x50, 0xD5, 0x06, 0x3D, 0x6D, 0x86, 0x22, 0xD0, 0xE8, 0x53, 0x45, 0x95,
0x19, 0x69, 0x73, 0x82, 0x3B, 0x94, 0xEA, 0x3B, 0x17, 0xF7, 0x98, 0xD2, 0xD1, 0xF6, 0x5C, 0x55,
0xCC, 0x07, 0x17, 0x24, 0xCA, 0xCE, 0x4D, 0x7D, 0xC3, 0xB6, 0x86, 0x9B, 0xAD, 0x1F, 0xB3, 0x2C,
0xA1, 0x08, 0x16, 0x17, 0xBB, 0xBB, 0xDF, 0x31, 0x6E, 0xD0, 0x68, 0x68, 0xA6, 0x63, 0x75, 0xAA,
0x8F, 0x55, 0xCC, 0x68, 0xD5, 0x6B, 0xB3, 0xB2, 0x9F, 0xC5, 0x31, 0x25, 0x61, 0xFB, 0xD6, 0x07,
0x80, 0x31, 0x53, 0x2F, 0x3B, 0x1B, 0xF1, 0xB1, 0x8A, 0x10, 0xB8, 0xC2, 0x68, 0xFE, 0xED, 0x8F,
0x05, 0x10, 0xC9, 0xE4, 0x9D, 0xC3, 0x5A, 0x3F, 0x45, 0x59, 0xA9, 0xD3, 0x56, 0x15, 0xE6, 0xE5,
0xA4, 0x82, 0xA9, 0x96, 0x36, 0x33, 0x2D, 0x85, 0xBD, 0xB1, 0xF8, 0x66, 0xD5, 0xB4, 0xCB, 0x5D,
0x3B, 0x9B, 0x38, 0xD7, 0xD7, 0x02, 0x74, 0xD7, 0x17, 0x23, 0xEB, 0xE6, 0x33, 0x99, 0xA9, 0xFB,
0xF2, 0x4D, 0x9D, 0x1C, 0x29, 0x73, 0xB4, 0x29, 0x06, 0x1B, 0x37, 0x44, 0x26, 0x6A, 0xBD, 0x7D,
0x07, 0x8B, 0x9E, 0x52, 0x53, 0x3F, 0x94, 0x8E, 0x8B, 0x67, 0xBF, 0xFA, 0xA8, 0xAF, 0x98, 0x23,
0x0B, 0x9A, 0x9C, 0xCC, 0xCF, 0xD9, 0x6E, 0x97, 0xE6, 0xDB, 0xAE, 0x39, 0xB6, 0xCD, 0x31, 0xBC,
0xFB, 0xB8, 0xAD, 0xFE, 0xC3, 0xC0, 0x1F, 0x93, 0xD7, 0xAE, 0xA2, 0xDA, 0x2A, 0xFF, 0xE8, 0x8F,
0xA3, 0x45, 0xCE, 0x73, 0xF2, 0x0D, 0x90, 0xBA, 0x57, 0x9F, 0x4B, 0x4D, 0x39, 0xA1, 0xC9, 0xD9,
0x33, 0xFC, 0xA3, 0x77, 0xF9, 0x3C, 0x46, 0x93, 0x86, 0x23, 0x0D, 0xBD, 0x4F, 0xD0, 0x04, 0x78,
0xEE, 0x50, 0x4B, 0x14, 0x7D, 0x60, 0x5D, 0x3A, 0x99, 0xA9, 0xC3, 0x1D, 0x07, 0x4B, 0xC6, 0x60,
0x41, 0xA7, 0xF7, 0xB1, 0x56, 0xA9, 0xC9, 0x00, 0xA2, 0x97, 0xDD, 0x06, 0x46, 0x53, 0xE8, 0xB7,
0x99, 0xA7, 0x59, 0x36, 0xE1, 0xB3, 0xB5, 0x60, 0xC3, 0x09, 0xC0, 0x5A, 0x9F, 0xEA, 0xE0, 0x89,
0x31, 0xB4, 0xBE, 0x44, 0xD8, 0xA6, 0x10, 0x37, 0xC1, 0x90, 0xBF, 0x67, 0x4E, 0x10, 0xA1, 0xBF,
0x9B, 0x71, 0x6E, 0x13, 0x9A, 0x63, 0x95, 0xCE, 0xA5, 0xDC, 0xCB, 0x83, 0x81, 0x04, 0x9B, 0x3A,
0x92, 0x93, 0xA6, 0x1C, 0x68, 0x6A, 0x1C, 0xA4, 0x3C, 0x8F, 0x07, 0x0E, 0xC4, 0x5A, 0x7F, 0x10,
0x14, 0x3F, 0x1C, 0xD5, 0x1D, 0xFD, 0x62, 0x11, 0xF8, 0x4F, 0xC5, 0x25, 0x73, 0x33, 0x73, 0x89,
0x7A, 0xE2, 0xF7, 0x45, 0x08, 0xC8, 0xD2, 0xAE, 0x7B, 0xE9, 0x66, 0xA6, 0xAE, 0x8D, 0x58, 0xFE,
0x9E, 0x9A, 0x5F, 0x99, 0x5A, 0xB4, 0x51, 0x84, 0xC8, 0x14, 0xE8, 0xFA, 0x7B, 0x7B, 0x07, 0xFE,
0xA3, 0x5E, 0x34, 0xA5, 0xC7, 0xB9, 0xEB, 0x9C, 0xF1, 0xA3, 0xF9, 0x25, 0xA3, 0xF6, 0xFD, 0x51,
0x35, 0x13, 0x94, 0x1A, 0xE0, 0x5F, 0xBF, 0x07, 0xF0, 0x2F, 0x3C, 0x1D, 0x03, 0x29, 0x61, 0xC4,
0x3C, 0xA2, 0x56, 0x44, 0xD8, 0x87, 0xBE, 0x45, 0x81, 0x19, 0x76, 0x7D, 0xD7, 0x17, 0xAF, 0xC9,
0x21, 0x33, 0x93, 0x7D, 0xE8, 0xDC, 0xB1, 0x71, 0x3E, 0x6D, 0xD7, 0x0D, 0x8A, 0x88, 0xCD, 0xD9,
0xB6, 0xD9, 0xCC, 0xB5, 0xC0, 0x79, 0xAA, 0x23, 0x30, 0xF8, 0x88, 0x42, 0x32, 0x5A, 0x1C, 0x15,
0x15, 0xC6, 0x72, 0x32, 0x6C, 0x67, 0x0D, 0x90, 0xAE, 0x50, 0xBB, 0x93, 0x6E, 0xA1, 0xBD, 0x49,
0x81, 0xF0, 0xF8, 0xB2, 0x9A, 0x1C, 0xFF, 0xE8, 0xCE, 0xC9, 0x71, 0x1F, 0x0F, 0x04, 0x0A, 0x4B,
0x0A, 0x33, 0x39, 0xFE, 0xAF, 0xA6, 0x92, 0x8C, 0xB8, 0x20, 0x33, 0xBC, 0x0C, 0xB7, 0xFC, 0x5C,
0x29, 0x5F, 0x9F, 0x08, 0x18, 0x28, 0x46, 0x70, 0x2C, 0xF2, 0xFD, 0x06, 0x44, 0xB0, 0xF4, 0xA4,
0x22, 0x02, 0xC2, 0xF1, 0xF8, 0xE8, 0xB5, 0x1D, 0x44, 0xB0, 0x14, 0x2E, 0x60, 0xB6, 0x06, 0x26,
0x9D, 0x29, 0x55, 0x06, 0xB3, 0x02, 0x45, 0x94, 0x79, 0xBC, 0xA8, 0x99, 0x55, 0xC5, 0x70, 0xCC,
0x73, 0xC0, 0x7A, 0x4B, 0xBF, 0x34, 0xD5, 0x70, 0x4C, 0x32, 0xD1, 0x09, 0xF8, 0x18, 0x6A, 0x84,
0xC9, 0x70, 0xF3, 0x8C, 0xE0, 0x8C, 0x52, 0x6E, 0xDF, 0xBF, 0x7F, 0x50, 0xF6, 0x43, 0x13, 0x4C,
0xDD, 0x2E, 0xEC, 0xAC, 0x7D, 0xDD, 0xD8, 0x7F, 0xE6, 0xD4, 0xA9, 0xAD, 0xBD, 0x54, 0xFC, 0x06,
0x4B, 0x76, 0xA5, 0xCF, 0xF7, 0x06, 0x97, 0x32, 0xFA, 0x61, 0x82, 0xEB, 0x99, 0xAD, 0x0F, 0x6B,
0x01, 0x22, 0x93, 0xCD, 0x35, 0xB5, 0x86, 0xA3, 0x24, 0x4E, 0xA2, 0x85, 0xB7, 0x59, 0x7E, 0x6C,
0xDC, 0x84, 0x7C, 0xC3, 0x46, 0xE6, 0xAA, 0x11, 0x98, 0x6A, 0x7D, 0xC7, 0x5C, 0xB8, 0x73, 0x7B,
0x82, 0xFC, 0x30, 0x44, 0x6B, 0x3F, 0x6E, 0x79, 0x27, 0x3F, 0xB4, 0x7E, 0x6C, 0x5C, 0xFF, 0x9C,
0xC8, 0x57, 0x9F, 0x80, 0xDE, 0xDC, 0xD3, 0x26, 0xA5, 0x60, 0x30, 0x6E, 0x6D, 0xFB, 0x89, 0xB5,
0xC0, 0x30, 0xB8, 0xFC, 0x92, 0x9D, 0xC1, 0xCC, 0xF2, 0x13, 0xBD, 0x14, 0x14, 0xA6, 0x53, 0x1B,
0x47, 0xD3, 0x8A, 0xA6, 0x1D, 0xFB, 0xA0, 0xDA, 0x0D, 0xD9, 0xDB, 0xF7, 0xC3, 0xE0, 0x36, 0xEB,
0x71, 0x71, 0x53, 0xA1, 0x4C, 0x05, 0xA1, 0x32, 0x97, 0x99, 0x55, 0x78, 0xEF, 0x77, 0x60, 0xC5,
0x2F, 0xCB, 0xD4, 0x7F, 0xDB, 0x2E, 0xC5, 0x45, 0xE5, 0xA3, 0xEE, 0x10, 0xEE, 0x03, 0x0C, 0xD5,
0x2F, 0x46, 0x84, 0xFA, 0xEE, 0xD6, 0x47, 0xD4, 0x2E, 0x1F, 0x75, 0x2F, 0x3E, 0x91, 0xB6, 0xFB,
0x8F, 0xBA, 0x17, 0x3E, 0xFD, 0x1D, 0x8B, 0xDB, 0xD3, 0x3F, 0xB9, 0xD2, 0x96, 0x47, 0xDD, 0xD4,
0x4A, 0xCD, 0x87, 0x44, 0x93, 0x02, 0x53, 0x90, 0x51, 0xA7, 0xD4, 0x99, 0xED, 0x51, 0x55, 0xFF,
0x01, 0xB6, 0xA0, 0x79, 0x02, 0x0E, 0xEE, 0xB2, 0xD5, 0x55, 0xF2, 0x03, 0xB3, 0xED, 0xC3, 0x5B,
0x99, 0x8F, 0xBC, 0x1B, 0x6E, 0x27, 0x0F, 0xBF, 0x0E, 0xFE, 0x15, 0xBD, 0x4F, 0x4F, 0x5E, 0x48,
0xB7, 0x00, 0xF6, 0xAE, 0x1F, 0x77, 0x96, 0xC0, 0x3C, 0x1E, 0xAD, 0x8D, 0xE3, 0x98, 0x7A, 0x9F,
0xDF, 0xDE, 0x73, 0x1B, 0x5B, 0x6D, 0x62, 0x74, 0x82, 0x4F, 0xD8, 0x3B, 0x87, 0x0E, 0x01, 0x8E,
0x84, 0x75, 0x68, 0x87, 0xEB, 0xAC, 0x9F, 0x64, 0x22, 0xB3, 0x0D, 0x61, 0xAD, 0xB1, 0x70, 0x62,
0x44, 0x59, 0x19, 0x55, 0x39, 0xC0, 0xF6, 0x96, 0xFB, 0x69, 0x8C, 0x93, 0xA5, 0xC6, 0x60, 0x1E,
0xC4, 0xA3, 0xCE, 0x42, 0x3B, 0x4F, 0xC2, 0xAF, 0x55, 0x7F, 0x3F, 0xAB, 0x52, 0xE2, 0xCD, 0x23,
0xE5, 0xF7, 0xDA, 0xD2, 0xFD, 0x79, 0x22, 0xF5, 0x39, 0xBC, 0x1B, 0x8F, 0x1B, 0x1E, 0x18, 0x2D,
0xFE, 0xCA, 0x48, 0x59, 0x39, 0x4E, 0x2C, 0x36, 0x64, 0x9F, 0xF8, 0x57, 0xCD, 0x74, 0xC4, 0xB6,
0x70, 0x7B, 0x27, 0x7D, 0x3E, 0xE9, 0xC3, 0x2B, 0xEB, 0xDF, 0x96, 0xBE, 0x7C, 0x2C, 0x90, 0x77,
0x1C, 0x4C, 0x02, 0x60, 0x4C, 0x73, 0xB0, 0x57, 0x9A, 0xEF, 0x92, 0x45, 0xD1, 0x6B, 0x3A, 0xBE,
0xD7, 0x04, 0xFD, 0xC9, 0x4F, 0x88, 0xC8, 0x17, 0xBE, 0x4B, 0xE7, 0x7A, 0xBE, 0x30, 0x53, 0x07,
0xA4, 0x72, 0xEA, 0xB5, 0x49, 0xCF, 0x0B, 0xE8, 0xBE, 0x77, 0x9A, 0x33, 0x63, 0x75, 0x66, 0xB4,
0x59, 0x44, 0xCC, 0x80, 0x82, 0xC6, 0x86, 0x03, 0xC5, 0x69, 0x43, 0xDF, 0xC9, 0x40, 0x45, 0x70,
0xFC, 0x1F, 0xD2, 0x6A, 0x11, 0x83, 0xD8, 0x1B, 0x23, 0xC6, 0x10, 0x47, 0x33, 0x74, 0xB2, 0xCF,
0xE4, 0x37, 0xC2, 0x25, 0x9B, 0x59, 0xBC, 0xD2, 0xC9, 0x39, 0x7D, 0xC4, 0x6C, 0x26, 0x6C, 0x1C,
0x34, 0x0C, 0x5E, 0xFF, 0xE5, 0xD4, 0x60, 0x17, 0x79, 0x80, 0xB9, 0xC5, 0x3A, 0x35, 0x60, 0xB9,
0x3F, 0xC9, 0x97, 0x9A, 0x84, 0x7A, 0x64, 0x1D, 0x85, 0x3D, 0x86, 0x15, 0xAD, 0xC1, 0x53, 0xA7,
0x2C, 0x79, 0x3A, 0x92, 0xB7, 0x45, 0xC1, 0xD5, 0x56, 0xC5, 0x76, 0x5C, 0x77, 0x64, 0x26, 0x1F,
0x1B, 0xA0, 0xD3, 0x62, 0x49, 0x9E, 0x8A, 0x10, 0x31, 0xF4, 0xED, 0xDC, 0x7B, 0x2F, 0xA5, 0x69,
0xDC, 0x2D, 0x9A, 0x68, 0x57, 0xD1, 0x04, 0x06, 0xE7, 0xED, 0x9B, 0x1C, 0xD9, 0xDC, 0xFB, 0xF4,
0x24, 0xF3, 0x01, 0xC0, 0xF8, 0x2E, 0x8C, 0x35, 0xE0, 0xFE, 0x8E, 0xD4, 0xEE, 0xD8, 0x39, 0x57,
0xE6, 0x5F, 0x4E, 0x99, 0xE4, 0x40, 0x73, 0x34, 0x26, 0xF0, 0xAE, 0xA0, 0xE2, 0x0A, 0x0B, 0x1A,
0xD6, 0x9F, 0x2B, 0x4A, 0xAB, 0x2C, 0xE5, 0x76, 0xA5, 0x99, 0x19, 0x8F, 0xF6, 0x24, 0x16, 0xCA,
0xEC, 0x6A, 0x16, 0x99, 0x41, 0xB3, 0x11, 0x2D, 0x4E, 0x44, 0xD0, 0xF7, 0xE0, 0xAE, 0xF1, 0x49,
0x9B, 0x88, 0x8E, 0xC5, 0x2E, 0xC9, 0x24, 0x06, 0x2F, 0x0C, 0x74, 0x32, 0x13, 0x29, 0x21, 0x57,
0x89, 0x64, 0x66, 0xC6, 0x82, 0x38, 0xEA, 0x6C, 0x2C, 0xCD, 0x55, 0x98, 0x8B, 0xE1, 0x83, 0x63,
0xDB, 0xD9, 0x9E, 0x24, 0xCC, 0x8B, 0x2A, 0x99, 0xD4, 0x6A, 0x01, 0x80, 0x0D, 0x45, 0xB5, 0xCC,
0x48, 0xC2, 0x2E, 0x45, 0x0C, 0x62, 0xA7, 0xE9, 0xFB, 0x9C, 0x8C, 0xD5, 0x18, 0xCA, 0x2C, 0x74,
0xC2, 0x10, 0x21, 0xFA, 0x10, 0x75, 0xAB, 0xA8, 0x3C, 0x4E, 0x25, 0x45, 0x14, 0x4B, 0x3E, 0xEC,
0xB0, 0xDC, 0x9F, 0x62, 0x7F, 0xBF, 0xCA, 0xCB, 0xD0, 0xED, 0x75, 0x44, 0xAD, 0x6E, 0x63, 0xE6,
0xFE, 0xED, 0x49, 0x8F, 0x92, 0xD9, 0xFC, 0x6A, 0x2D, 0x8B, 0x7F, 0xC7, 0x66, 0x9E, 0xC1, 0x59,
0x51, 0x89, 0xBA, 0xC2, 0xCA, 0xE1, 0xAC, 0x5A, 0x05, 0x72, 0x5F, 0x42, 0x86, 0x13, 0xDB, 0x42,
0x86, 0x64, 0xAC, 0xC3, 0x24, 0xF9, 0x40, 0x0C, 0x02, 0xAB, 0x28, 0x86, 0xF3, 0x43, 0x2E, 0xFC,
0x84, 0x6F, 0x2E, 0xF1, 0x54, 0x68, 0xE6, 0xD6, 0xE5, 0xED, 0x6F, 0x11, 0xFF, 0x73, 0x2A, 0x6B,
0xBA, 0x9A, 0x13, 0x9B, 0x74, 0xFD, 0xA7, 0x63, 0xC3, 0x0E, 0xA9, 0xD8, 0xE5, 0x03, 0x8E, 0xE7,
0xC2, 0x95, 0x47, 0x8C, 0x61, 0x3F, 0xF9, 0x7A, 0x7D, 0x47, 0xB1, 0x5B, 0xDD, 0xCC, 0x8C, 0x31,
0xB7, 0xB6, 0x73, 0x29, 0xC1, 0x61, 0x53, 0x72, 0x27, 0xCE, 0xBB, 0x29, 0xE7, 0xD4, 0xEB, 0x30,
0xF7, 0xBC, 0x80, 0x98, 0x9C, 0xFB, 0xA3, 0x01, 0xBD, 0xCD, 0xCF, 0xE8, 0xBE, 0x0A, 0xF3, 0x7B,
0x6D, 0xFA, 0xA6, 0xAA, 0xE7, 0x55, 0x4D, 0x07, 0x4C, 0x85, 0x7D, 0x81, 0x98, 0xD9, 0x1E, 0x72,
0xA6, 0x5F, 0x1F, 0x59, 0x15, 0xF9, 0x45, 0xC6, 0xA5, 0x21, 0xE5, 0x0C, 0x54, 0x2D, 0xF4, 0xB8,
0x36, 0xE4, 0xC8, 0xC7, 0x39, 0x1E, 0x99, 0x00, 0x2F, 0x97, 0x35, 0x15, 0x2D, 0x85, 0x1E, 0x57,
0x87, 0x1C, 0xC9, 0xEB, 0x9C, 0x55, 0x57, 0x4F, 0x47, 0x65, 0xCD, 0xBA, 0x91, 0x86, 0x1E, 0xD7,
0x87, 0x1C, 0xC9, 0x3D, 0x68, 0x39, 0xEB, 0x94, 0xF5, 0xAF, 0xC1, 0xBB, 0x66, 0xB6, 0xE5, 0xCA,
0xE7, 0xB6, 0x2C, 0xA2, 0x71, 0xF2, 0x53, 0xF1, 0x31, 0x8C, 0x39, 0x40, 0xC8, 0x08, 0x1E, 0xB0,
0x79, 0x06, 0xA8, 0x3B, 0xBF, 0x15, 0xAB, 0xA4, 0x5E, 0xB8, 0xFF, 0xA8, 0x66, 0x9C, 0x8F, 0xCE,
0xBC, 0x9B, 0x7E, 0x91, 0x17, 0xC5, 0xD2, 0x5C, 0x7D, 0xBA, 0x3E, 0xAD, 0x9C, 0x7F, 0x72, 0xCF,
0xA4, 0x3D, 0x2B, 0x2F, 0x54, 0xDA, 0x41, 0x28, 0xE9, 0x67, 0x55, 0x0A, 0xD4, 0x18, 0xB9, 0xE9,
0x6A, 0x72, 0x0F, 0x68, 0xF2, 0x2B, 0x8D, 0xDD, 0x6B, 0x0F, 0x60, 0x28, 0x6A, 0x3B, 0xD6, 0xC0,
0xDD, 0xAF, 0xA5, 0x66, 0x53, 0x32, 0x3B, 0xED, 0xA6, 0x8D, 0x73, 0x12, 0x30, 0x6D, 0x64, 0xBD,
0x01, 0x33, 0xE0, 0x2C, 0x9C, 0xDA, 0xCA, 0xB9, 0xF7, 0x74, 0x70, 0xF5, 0x5C, 0x29, 0x88, 0xAD,
0x87, 0x12, 0x74, 0xAD, 0xE1, 0x68, 0xF9, 0x0B, 0xFD, 0xC1, 0xA4, 0xBC, 0x65, 0x0E, 0x5C, 0x99,
0x9B, 0xB9, 0xED, 0x71, 0xEE, 0x13, 0x49, 0x14, 0x5C, 0x2F, 0x9A, 0x3C, 0x78, 0x0F, 0x24, 0x05,
0x34, 0x49, 0x8E, 0x41, 0x4F, 0x89, 0xA9, 0x7A, 0xA3, 0xFA, 0xB3, 0xF4, 0xA9, 0x2A, 0xFD, 0x30,
0x49, 0x08, 0x56, 0x8D, 0xBC, 0x7A, 0x0C, 0x2F, 0x81, 0xA4, 0x82, 0xC9, 0x57, 0x7F, 0x25, 0xA7,
0x16, 0x4B, 0xB3, 0x0A, 0x2C, 0x12, 0xEB, 0x66, 0xCB, 0x40, 0x6C, 0xDC, 0xCB, 0x84, 0x19, 0x6D,
0xA7, 0x32, 0xEB, 0x88, 0xB5, 0xFE, 0x84, 0xE5, 0x6A, 0x23, 0xD0, 0xF2, 0x33, 0xA8, 0xF7, 0x25,
0x9D, 0x4D, 0xFF, 0x48, 0x9F, 0x2E, 0x39, 0x13, 0xD3, 0xA5, 0x3B, 0xE3, 0x54, 0xBC, 0x84, 0x53,
0x9C, 0x9C, 0x0E, 0xFE, 0x05, 0x9E, 0xAE, 0xCD, 0x66, 0xA6, 0x22, 0xF0, 0x90, 0x21, 0xD3, 0x0B,
0x5A, 0xF6, 0x75, 0xCE, 0xBE, 0xBC, 0xD1, 0xF7, 0x87, 0x13, 0x1F, 0xFD, 0x80, 0xB5, 0x00, 0x9A,
0x3A, 0x7D, 0x79, 0xFC, 0x9B, 0xAD, 0x30, 0xB6, 0xE5, 0x27, 0x6E, 0x5C, 0xD8, 0x9B, 0x99, 0x9C,
0xAA, 0xAA, 0x01, 0x23, 0x57, 0xE7, 0xEA, 0xEF, 0xFA, 0x0D, 0x62, 0xFF, 0x5A, 0x5B, 0x02, 0x58,
0x8D, 0xE5, 0xC5, 0xC5, 0xC4, 0xB0, 0x2D, 0xE4, 0x7A, 0x80, 0x7D, 0x6A, 0xA3, 0x6B, 0x4D, 0x26,
0xC7, 0x11, 0x73, 0xAE, 0x9B, 0x69, 0xC7, 0x87, 0xCC, 0x32, 0x1A, 0x13, 0x04, 0xB7, 0xC7, 0x72,
0x4E, 0xA8, 0x19, 0x20, 0x24, 0xD7, 0x2C, 0xB6, 0x68, 0x57, 0xB3, 0xEF, 0xB5, 0xBA, 0x99, 0xC6,
0x15, 0x26, 0x0E, 0xFB, 0x2A, 0x75, 0x0B, 0x67, 0x84, 0x40, 0xB1, 0x57, 0x59, 0xC0, 0x29, 0x93,
0x36, 0xFB, 0x8F, 0x2C, 0x7E, 0xEA, 0x4E, 0x56, 0xFE, 0xD6, 0x7A, 0x7A, 0xB4, 0xBC, 0xB8, 0x9C,
0xB0, 0x04, 0xA4, 0xDE, 0x40, 0x6C, 0x71, 0xAD, 0x70, 0xF5, 0xD6, 0x8C, 0xC2, 0x52, 0xBD, 0xDA,
0xFF, 0x0D, 0x88, 0xA1, 0x56, 0x9D, 0x49, 0xE9, 0x69, 0xBF, 0x21, 0x6D, 0x62, 0x26, 0xBD, 0x21,
0x12, 0xEE, 0xCE, 0x09, 0x90, 0xFF, 0x6F, 0xA8, 0xA2, 0x4A, 0xA7, 0x9A, 0x40, 0xB5, 0xBE, 0xED,
0xFD, 0xF7, 0x01, 0x55, 0x98, 0x6E, 0xA0, 0xCF, 0xFE, 0x16, 0xDF, 0xBF, 0xCD, 0xFA, 0xC5, 0x3B,
0x38, 0xBD, 0xA7, 0x45, 0x02, 0x50, 0xD5, 0x23, 0x66, 0xB9, 0x67, 0xD3, 0xAC, 0x43, 0x61, 0x62,
0xA1, 0x5F, 0xAD, 0x4A, 0x4E, 0xA1, 0x0D, 0x57, 0xE4, 0x00, 0xB3, 0x75, 0x9C, 0x29, 0x6A, 0x6F,
0x39, 0x11, 0xEF, 0x1D, 0xC4, 0xB2, 0xCD, 0xC5, 0x91, 0x3D, 0x2E, 0x65, 0x43, 0x84, 0xD5, 0xD1,
0x83, 0x43, 0xAD, 0xFE, 0x38, 0x34, 0xF3, 0x27, 0x16, 0x62, 0x5D, 0xF8, 0xD6, 0xA9, 0x72, 0x22,
0xFA, 0xB5, 0xB1, 0xD3, 0x95, 0xF6, 0xAC, 0xD5, 0xE7, 0x2A, 0x58, 0x0C, 0x0C, 0x00, 0x8C, 0x53,
0x85, 0x6F, 0xD3, 0x62, 0x22, 0x82, 0xB5, 0x5C, 0x7C, 0x44, 0x05, 0x50, 0x42, 0xEF, 0xAF, 0x13,
0x69, 0xBF, 0x95, 0x3B, 0xEF, 0xAC, 0xC4, 0x35, 0x75, 0x02, 0x5E, 0x11, 0x8C, 0x5E, 0xCB, 0x13,
0x67, 0xE5, 0x4C, 0xAA, 0x4E, 0x00, 0xF0, 0xFC, 0x26, 0x97, 0xB5, 0x55, 0x84, 0x10, 0xA5, 0xA8,
0x93, 0x08, 0x31, 0xA8, 0xE4, 0x8A, 0x15, 0x99, 0xD9, 0x9E, 0x0A, 0x22, 0x2B, 0x39, 0x83, 0xE0,
0x38, 0x13, 0x6B, 0x7A, 0x5F, 0x16, 0x6E, 0x8E, 0xC7, 0xE4, 0x68, 0xBA, 0x55, 0x77, 0xBA, 0x07,
0x7A, 0xF8, 0x53, 0x84, 0xCE, 0xB7, 0x0B, 0x3C, 0xBE, 0xB2, 0x28, 0x87, 0x2B, 0xDE, 0x4C, 0x69,
0xC2, 0xFC, 0xD7, 0x2C, 0xCA, 0xA9, 0x4A, 0x01, 0x42, 0x35, 0xB9, 0x78, 0x78, 0x01, 0x52, 0x1B,
0x35, 0x7E, 0x54, 0x36, 0x24, 0x50, 0x66, 0xC6, 0xFC, 0xB7, 0x66, 0x21, 0x84, 0xF7, 0xB9, 0xA9,
0x7D, 0xE8, 0x43, 0xD9, 0x02, 0x69, 0x3A, 0x1B, 0x3D, 0xF1, 0x47, 0x5F, 0x9B, 0xAA, 0x7F, 0xF3,
0x52, 0xA1, 0x6F, 0xC6, 0xAC, 0x3D, 0x93, 0x55, 0x31, 0xAB, 0x7E, 0x07, 0xB3, 0x4E, 0x91, 0x59,
0xFE, 0x98, 0x59, 0x70, 0x76, 0x30, 0x8C, 0x9F, 0x4F, 0x56, 0x2D, 0x81, 0x59, 0xC1, 0x4E, 0x66,
0x71, 0xF1, 0xA1, 0x3B, 0x11, 0xB1, 0xFB, 0xB3, 0x42, 0xAC, 0x98, 0xAB, 0x0C, 0xA4, 0x61, 0x9C,
0xD2, 0xF9, 0x43, 0x78, 0x5A, 0x95, 0xB6, 0xF3, 0x3D, 0x2E, 0x5C, 0x37, 0x73, 0xF5, 0x3E, 0x4D,
0x80, 0xF7, 0xEE, 0xD5, 0x61, 0x55, 0xD1, 0x2D, 0xB4, 0x4F, 0xE3, 0x85, 0x78, 0xF7, 0x73, 0xA1,
0xA7, 0xAB, 0x0B, 0xCB, 0xFC, 0x7F, 0x0F, 0x56, 0x24, 0x87, 0x12, 0x16, 0x5B, 0x80, 0xE5, 0x0C,
0x95, 0x0A, 0x25, 0x6D, 0xE6, 0xA2, 0xEA, 0x2C, 0x36, 0x8A, 0xAD, 0x4F, 0x10, 0xA2, 0x14, 0xE2,
0x25, 0xA6, 0xCB, 0xCD, 0xCA, 0xDA, 0x99, 0xFF, 0xA3, 0x81, 0xE9, 0x9C, 0xD2, 0xAC, 0xDA, 0xAC,
0x68, 0xDB, 0xE9, 0x98, 0xEE, 0xF7, 0x9A, 0x54, 0x1A, 0xDF, 0xE9, 0xAD, 0xE2, 0xE0, 0x6F, 0x5B,
0x02, 0x5D, 0x39, 0x2B, 0x86, 0x7E, 0x2F, 0xA5, 0x32, 0xAD, 0xB6, 0x4A, 0xC6, 0xEE, 0x37, 0xD5,
0xEA, 0xA5, 0xD4, 0x7D, 0x37, 0x75, 0xDE, 0xC9, 0xEC, 0x34, 0xAB, 0x2A, 0x0A, 0x9E, 0xCD, 0xF9,
0x7B, 0x1F, 0xAE, 0xEB, 0x45, 0x78, 0xB1, 0x10, 0xAF, 0x88, 0x13, 0x7A, 0x2B, 0xAE, 0x8D, 0x79,
0x25, 0x92, 0x1B, 0xA9, 0xD4, 0x72, 0x43, 0xF5, 0xA0, 0x4A, 0x59, 0x1A, 0x27, 0x02, 0x49, 0x83,
0x47, 0x09, 0xC6, 0x89, 0x6F, 0x9F, 0xF5, 0x30, 0xC9, 0x6D, 0xE4, 0x38, 0x73, 0xF7, 0x5A, 0xD5,
0x94, 0x5E, 0xDE, 0xF9, 0xA0, 0x90, 0x79, 0xB5, 0xC1, 0x95, 0x82, 0xE7, 0x64, 0xDF, 0x2E, 0x6B,
0x55, 0xC7, 0xD5, 0x5E, 0xEE, 0x3B, 0x19, 0xB6, 0x09, 0x6B, 0xBF, 0xEE, 0xF2, 0x9A, 0xBD, 0x4C,
0x3B, 0xF7, 0x52, 0x5B, 0x57, 0x0B, 0x0D, 0xD9, 0x15, 0x9F, 0x11, 0xCC, 0x97, 0xAD, 0xF6, 0xD3,
0x0C, 0x22, 0xB6, 0xAE, 0xC6, 0xC9, 0x09, 0x75, 0x34, 0xAD, 0x2A, 0x07, 0xC7, 0x7F, 0x10, 0x06,
0xFE, 0xFF, 0x13, 0xBB, 0xAC, 0x1A, 0x65, 0x43, 0x6F, 0x14, 0xB9, 0xAB, 0xB0, 0x4C, 0x9B, 0xB1,
0x9F, 0xA2, 0xA1, 0xCF, 0x45, 0x9F, 0xB8, 0xC3, 0x3D, 0xBF, 0x19, 0xDB, 0x45, 0xD5, 0x60, 0x0D,
0xAA, 0x3B, 0x74, 0xF5, 0x9F, 0x9C, 0x98, 0xFF, 0x0C, 0x60, 0x9B, 0x4F, 0x81, 0x94, 0x1C, 0xDF,
0xB6, 0xC6, 0x86, 0x4B, 0x6E, 0x16, 0x81, 0x14, 0x75, 0xE1, 0xAF, 0xFF, 0xB8, 0xB8, 0xBD, 0xC6,
0x26, 0xF4, 0x4B, 0xBB, 0x00, 0xCA, 0x7A, 0x02, 0x06, 0xC0, 0x4D, 0xBF, 0xD1, 0x84, 0x79, 0xB5,
0x1E, 0xC4, 0xAD, 0xFE, 0x53, 0x91, 0xC4, 0x24, 0x8D, 0xCF, 0x7D, 0x9D, 0x09, 0xF4, 0x7C, 0x1C,
0xDA, 0x99, 0xCA, 0x9E, 0x26, 0x6B, 0xF2, 0xEF, 0x47, 0x4E, 0x79, 0xD0, 0xAD, 0xEA, 0xE0, 0xB6,
0x65, 0x95, 0x4C, 0xE6, 0x33, 0xDF, 0x53, 0x4E, 0xF9, 0xEF, 0xB7, 0xE7, 0x94, 0x59, 0x94, 0x48,
0xE3, 0x11, 0xDD, 0x7B, 0xF5, 0xB7, 0x75, 0x7C, 0x7D, 0x16, 0x1E, 0x20, 0x7D, 0x5E, 0x2F, 0x9A,
0xD5, 0xDF, 0x8D, 0x3B, 0x56, 0x7F, 0xDB, 0x93, 0xD5, 0xDF, 0x29, 0xC8, 0xF0, 0x52, 0x2F, 0x2D,
0x1D, 0xAE, 0x36, 0xB3, 0xAF, 0x73, 0xB5, 0x19, 0x57, 0xDF, 0x9B, 0xFF, 0x37, 0x21, 0xE5, 0xEC,
0x62, 0xA8, 0xA2, 0x86, 0x85, 0xF0, 0xA8, 0x46, 0xE9, 0xF9, 0x7F, 0x9D, 0x16, 0x4B, 0x68, 0x1C,
0xC9, 0xF5, 0x75, 0xD7, 0x58, 0xED, 0x75, 0x45, 0xAA, 0x21, 0xEC, 0x82, 0x21, 0x23, 0x4D, 0x0E,
0x3E, 0x38, 0xCE, 0xF4, 0xCE, 0x1E, 0x14, 0x10, 0xA1, 0x67, 0xBA, 0xD7, 0x3A, 0x2C, 0xC4, 0x07,
0x8B, 0x90, 0xB9, 0xE4, 0xB2, 0x3A, 0x6E, 0x20, 0x20, 0x1D, 0xE6, 0xD0, 0x0B, 0xE3, 0x4C, 0xAF,
0xE7, 0xB0, 0x04, 0x02, 0xBB, 0x24, 0xC7, 0x5C, 0x4C, 0x12, 0x88, 0x91, 0x03, 0x3B, 0x84, 0x59,
0x32, 0x87, 0xB1, 0xA7, 0x24, 0xB1, 0x18, 0xA2, 0x43, 0x7A, 0x65, 0x48, 0x20, 0x81, 0x6C, 0x67,
0x95, 0xBD, 0xC4, 0xB0, 0x5B, 0xB6, 0xDB, 0x41, 0x89, 0x66, 0xE6, 0xE5, 0xBD, 0xEE, 0x91, 0x25,
0x2B, 0x92, 0xD9, 0xA4, 0x66, 0xAA, 0x5E, 0xD7, 0xAB, 0x57, 0xAF, 0x5E, 0xBD, 0x6F, 0x01, 0xCC,
0xC2, 0x6C, 0x75, 0x74, 0x6B, 0xF7, 0x27, 0x17, 0xE0, 0x32, 0xDC, 0xB2, 0xA3, 0x53, 0x00, 0x70,
0x2B, 0x59, 0x5A, 0x4D, 0x4A, 0x97, 0x4B, 0xA7, 0x93, 0xE4, 0x00, 0x36, 0x7E, 0x89, 0x1F, 0x35,
0xA6, 0x23, 0x22, 0xB6, 0x11, 0xE3, 0x8D, 0x8D, 0x5F, 0x23, 0x7E, 0xD6, 0x20, 0x2C, 0xB7, 0x3B,
0xC8, 0xED, 0x69, 0x83, 0x5B, 0xF0, 0xDF, 0x18, 0xB3, 0xF0, 0xBF, 0xFE, 0x00, 0x5E, 0x69, 0x7C,
0xCF, 0xC7, 0x31, 0x8D, 0x24, 0x24, 0x7D, 0x5C, 0xD9, 0xB8, 0x2D, 0xC5, 0x56, 0x92, 0xB6, 0xAA,
0x16, 0x94, 0xE5, 0x76, 0x6C, 0x42, 0xD7, 0x02, 0xB5, 0xBC, 0x69, 0xFA, 0xDE, 0x9C, 0x05, 0x83,
0xB2, 0x88, 0x7B, 0x0B, 0x42, 0x17, 0xA5, 0x58, 0xBE, 0xB9, 0x9B, 0x98, 0xB4, 0xD5, 0x7A, 0xB5,
0xAA, 0xDE, 0xB1, 0x82, 0xB2, 0xBA, 0xD6, 0x79, 0xF0, 0xB1, 0x31, 0x61, 0xE8, 0x56, 0x94, 0x45,
0x3B, 0xDE, 0xD0, 0x66, 0x50, 0x56, 0x37, 0x13, 0xE3, 0xCD, 0x89, 0x77, 0xE2, 0x62, 0x01, 0xFA,
0xB5, 0xB2, 0xEA, 0x6C, 0x9A, 0x9E, 0xB7, 0x20, 0x97, 0x37, 0xE3, 0x62, 0x11, 0x52, 0x10, 0x31,
0x48, 0x80, 0x0A, 0xC0, 0xBA, 0x85, 0x78, 0xFF, 0xCE, 0x07, 0x50, 0xA2, 0x4F, 0xB0, 0xF4, 0x14,
0xDB, 0x05, 0x9B, 0x08, 0x02, 0xA8, 0x41, 0x4E, 0xAB, 0x22, 0x80, 0xFD, 0x29, 0xAE, 0x04, 0x3F,
0xF8, 0xF0, 0x17, 0x88, 0x1F, 0x3B, 0xE7, 0xC0, 0x05, 0xE8, 0x81, 0x48, 0x18, 0x5B, 0x81, 0xE2,
0xFA, 0x77, 0x11, 0xFF, 0xF8, 0xF3, 0xEF, 0x33, 0xAB, 0x1E, 0xD3, 0xF2, 0x26, 0x68, 0x77, 0xF0,
0xFA, 0xD8, 0x4F, 0x51, 0xDF, 0x85, 0x55, 0xB8, 0x01, 0xED, 0xB8, 0xBD, 0xDF, 0x4E, 0xDA, 0xD0,
0x64, 0xC3, 0xD4, 0xDA, 0xF5, 0x02, 0x81, 0x7D, 0xF1, 0xC0, 0x94, 0xDF, 0x8B, 0x6E, 0x14, 0xA0,
0xC8, 0x58, 0x15, 0xB5, 0xEC, 0x3D, 0x53, 0x0D, 0x46, 0xFB, 0x4E, 0xEC, 0x17, 0x20, 0xB0, 0x00,
0xEA, 0x3E, 0x11, 0xDA, 0xF8, 0xE7, 0x33, 0xED, 0xCC, 0x80, 0x9A, 0x85, 0xC9, 0x0B, 0x6C, 0x4C,
0x80, 0xB8, 0x63, 0xDE, 0x2E, 0xC0, 0xAD, 0xD3, 0xFE, 0x44, 0x30, 0xD1, 0x5F, 0x01, 0xAD, 0xCE,
0x26, 0x90, 0x08, 0xAF, 0x09, 0xB2, 0xD7, 0x99, 0x04, 0x79, 0x53, 0x09, 0x2B, 0x12, 0xEA, 0x7D,
0x08, 0x09, 0x34, 0x2B, 0x60, 0x08, 0x74, 0xE7, 0xAD, 0x98, 0xC1, 0x9C, 0xD0, 0x04, 0xCC, 0x1C,
0x29, 0x8E, 0x67, 0x0A, 0xB2, 0xB5, 0x4A, 0x35, 0x2A, 0xC7, 0x61, 0x25, 0x3C, 0x48, 0x7E, 0x64,
0xEA, 0x83, 0x47, 0x89, 0x31, 0x4B, 0xEA, 0x6F, 0x9F, 0xEA, 0xA6, 0xF1, 0x40, 0x6C, 0xEB, 0x66,
0x52, 0x01, 0x67, 0x59, 0x87, 0x04, 0x94, 0xC8, 0x80, 0x6B, 0x67, 0x6B, 0x9E, 0x15, 0x77, 0x09,
0x74, 0xE1, 0x9F, 0xE6, 0xED, 0xD4, 0x4A, 0xA0, 0xAD, 0xAB, 0x09, 0x9C, 0x68, 0x62, 0x9F, 0x2D,
0xCB, 0x1F, 0x0F, 0xB5, 0x88, 0x32, 0x5D, 0x25, 0xBD, 0x4C, 0x08, 0x3A, 0x78, 0xC1, 0xCA, 0xE9,
0x3D, 0x11, 0x99, 0x5C, 0x76, 0x48, 0x9A, 0x39, 0xB5, 0x0E, 0x3D, 0x98, 0x12, 0xB9, 0xD5, 0x48,
0x26, 0x4E, 0xBA, 0x20, 0xAF, 0x57, 0x47, 0x6A, 0x22, 0x70, 0xF9, 0xE1, 0x8E, 0x92, 0x6F, 0x74,
0xB6, 0x62, 0xE3, 0x77, 0xDE, 0x0D, 0x1E, 0xEB, 0xD0, 0x54, 0xC0, 0xDE, 0x8A, 0x3D, 0xB3, 0xE0,
0xC9, 0x80, 0xB8, 0x2B, 0x4F, 0xBC, 0x47, 0xB7, 0x35, 0xAE, 0xF8, 0x83, 0xB5, 0xA7, 0x7B, 0xD0,
0x74, 0x32, 0x22, 0x17, 0x3C, 0x48, 0xC2, 0xA6, 0xEB, 0x29, 0x72, 0x9F, 0x7A, 0x4B, 0xAD, 0x39,
0x7F, 0x89, 0x14, 0x88, 0xB1, 0x85, 0x30, 0xD4, 0x47, 0x02, 0x1B, 0x27, 0xA2, 0x7B, 0xCD, 0xC1,
0xBA, 0x4D, 0x2A, 0x32, 0x7D, 0xA7, 0xA3, 0x3D, 0xD7, 0x8A, 0x49, 0x63, 0xB0, 0xBE, 0x64, 0xBF,
0x4E, 0x37, 0x20, 0x77, 0xB6, 0x12, 0xD3, 0x13, 0x74, 0xBE, 0xB3, 0xBC, 0xA5, 0xE7, 0xA4, 0x88,
0x4A, 0xB4, 0x7A, 0xE9, 0xE2, 0x79, 0x08, 0x45, 0xAC, 0x80, 0x6E, 0x37, 0x0F, 0x2B, 0x61, 0x28,
0x76, 0x63, 0x45, 0xB3, 0x26, 0x69, 0x70, 0x7E, 0x16, 0x56, 0x08, 0xE3, 0x89, 0x5D, 0xC6, 0x31,
0x92, 0xB0, 0x8C, 0x66, 0xFC, 0x4A, 0x76, 0x6F, 0x2B, 0x85, 0x6F, 0x6B, 0x67, 0x16, 0x92, 0x5B,
0xF3, 0x42, 0xE8, 0xA5, 0x26, 0x45, 0x44, 0x54, 0x93, 0x37, 0x4D, 0x4B, 0x05, 0x9E, 0x65, 0xA4,
0x7E, 0x15, 0x82, 0xF3, 0xD0, 0xA7, 0xA0, 0x48, 0x2D, 0x63, 0x27, 0x65, 0xCB, 0xA8, 0x20, 0x85,
0x20, 0x17, 0x39, 0x20, 0x9F, 0x5F, 0xD6, 0x2A, 0x52, 0x8E, 0x76, 0x49, 0x7E, 0x0D, 0x2A, 0xA0,
0x21, 0x05, 0x47, 0xAB, 0x80, 0x86, 0x14, 0x8A, 0xCE, 0x27, 0xC1, 0x57, 0x8D, 0x93, 0x92, 0x0D,
0x94, 0x56, 0x3F, 0x86, 0x03, 0x7D, 0x91, 0xA3, 0x95, 0x62, 0xEC, 0x79, 0xE2, 0x55, 0x22, 0x16,
0x89, 0xB3, 0x15, 0xA8, 0x68, 0x06, 0x80, 0x42, 0xA4, 0x2E, 0x1E, 0x24, 0xB5, 0x6C, 0xA8, 0xD1,
0x7D, 0x3D, 0x77, 0x3A, 0x68, 0xAF, 0x64, 0x6F, 0xEA, 0x4A, 0xC9, 0xCE, 0xF4, 0x26, 0x92, 0x9A,
0xEF, 0xEC, 0x25, 0x14, 0x46, 0x2C, 0xCF, 0xDA, 0xD8, 0x99, 0xDC, 0x2D, 0xA4, 0x9E, 0x1D, 0xF7,
0xE4, 0xD5, 0xD8, 0xA5, 0xCB, 0xB6, 0xEC, 0xFB, 0x5A, 0x0E, 0xA0, 0xAC, 0xA1, 0x45, 0xC6, 0x07,
0x67, 0x2A, 0x35, 0x99, 0x48, 0x69, 0xA8, 0x02, 0x05, 0xDF, 0x95, 0x8D, 0x8D, 0x9F, 0x21, 0x4E,
0x18, 0x4B, 0x1C, 0x77, 0x23, 0x90, 0xE4, 0x21, 0x5D, 0xF1, 0xD9, 0x1A, 0x58, 0x43, 0x72, 0xDB,
0x6F, 0xFE, 0x0A, 0xE4, 0x3F, 0x46, 0x14, 0xDB, 0x1E, 0x27, 0x89, 0xD7, 0x00, 0x16, 0x0F, 0x8D,
0x95, 0x50, 0x3C, 0x57, 0x28, 0x1D, 0x4B, 0x10, 0x11, 0x69, 0x8C, 0xA7, 0x75, 0x98, 0xD3, 0x72,
0x51, 0x5C, 0xB3, 0x75, 0x9C, 0x5C, 0x5E, 0x77, 0x32, 0xF7, 0xCA, 0x89, 0x9F, 0x03, 0x2B, 0x1E,
0x67, 0x00, 0xB8, 0x77, 0xE3, 0x1E, 0x83, 0x61, 0x7E, 0x38, 0xDC, 0xCB, 0x25, 0xFB, 0x22, 0x13,
0x51, 0xDC, 0xCF, 0xAE, 0xA7, 0xB6, 0x33, 0xDF, 0x74, 0x5E, 0xE7, 0x00, 0xFA, 0x06, 0xF5, 0xB7,
0x80, 0xD3, 0x13, 0x47, 0x97, 0x97, 0x03, 0x0E, 0xB7, 0x25, 0xB8, 0x51, 0x59, 0x83, 0x7F, 0x2D,
0xDE, 0x1D, 0x22, 0x52, 0x1E, 0x1F, 0x5B, 0xC3, 0x00, 0xCE, 0x8D, 0x03, 0x38, 0x08, 0xC0, 0xFA,
0x1C, 0xEC, 0x3D, 0x0D, 0x62, 0x27, 0x72, 0xB6, 0x0C, 0xA8, 0x4E, 0x2C, 0xC9, 0xDB, 0x15, 0x25,
0x37, 0xD2, 0x97, 0x75, 0x58, 0x00, 0xE8, 0xB8, 0x08, 0x48, 0x9F, 0x1C, 0x11, 0x86, 0xF3, 0x18,
0x71, 0x64, 0xC6, 0x0B, 0xEC, 0x1C, 0x9C, 0xE7, 0x68, 0x99, 0x94, 0xC2, 0x51, 0x6C, 0x38, 0x4D,
0x4E, 0x8F, 0x9F, 0xE7, 0x0C, 0x9E, 0xE2, 0x03, 0xAD, 0x68, 0x66, 0xC4, 0x14, 0x50, 0xE6, 0x3B,
0x36, 0x23, 0x40, 0x24, 0x71, 0xFB, 0x11, 0xC6, 0x2A, 0xA8, 0x41, 0x2A, 0xA6, 0xE0, 0x4F, 0xF8,
0xE6, 0xF8, 0x68, 0xC6, 0xA0, 0xFD, 0x14, 0xF3, 0x48, 0x98, 0xC1, 0xA8, 0x3A, 0x91, 0x38, 0xF6,
0xD1, 0xBC, 0x2F, 0x3F, 0xA2, 0xF4, 0x49, 0x87, 0xCA, 0x88, 0xB8, 0x91, 0x78, 0x24, 0x4E, 0x3F,
0x9F, 0x48, 0x4D, 0x2B, 0x2A, 0x1B, 0x22, 0x52, 0x09, 0xB9, 0x91, 0x9B, 0x59, 0x95, 0xB2, 0x0E,
0x88, 0x63, 0x21, 0x05, 0x76, 0xB6, 0x6B, 0x04, 0x32, 0x01, 0x9F, 0x3D, 0xDD, 0x3A, 0x5C, 0xF8,
0xDA, 0x04, 0x06, 0x43, 0x8C, 0x07, 0x97, 0x6C, 0x33, 0xA0, 0x33, 0xB8, 0xF7, 0xA9, 0x87, 0xB4,
0x23, 0x24, 0xF6, 0x21, 0x91, 0x87, 0x94, 0xFF, 0x9B, 0x96, 0x81, 0x45, 0xE2, 0x9C, 0xF5, 0x63,
0x4C, 0xFB, 0xC2, 0xC0, 0x88, 0x3B, 0x69, 0x32, 0x4B, 0xE1, 0xF5, 0x19, 0x8C, 0xEB, 0x65, 0x4C,
0xEB, 0x2F, 0xC1, 0xA0, 0x4E, 0x66, 0x22, 0x3B, 0xB9, 0x54, 0x2B, 0x6A, 0xD4, 0x07, 0x2E, 0xD8,
0x94, 0x03, 0xA4, 0xAE, 0x90, 0xCF, 0x95, 0x48, 0xFA, 0x12, 0xB1, 0x2E, 0xE5, 0xF5, 0x20, 0x6B,
0x75, 0x72, 0x4F, 0x9F, 0x58, 0xD5, 0x61, 0x00, 0x5C, 0x11, 0x5E, 0x69, 0x34, 0xAE, 0x23, 0x3E,
0x6A, 0x34, 0xFA, 0x99, 0xA6, 0x6B, 0xCF, 0x6C, 0x11, 0xF1, 0x4D, 0xC9, 0x7C, 0x76, 0x6E, 0xAA,
0x7D, 0xA0, 0x8D, 0xE4, 0x41, 0x89, 0xDB, 0xC6, 0x6B, 0x12, 0x1F, 0x6F, 0xE1, 0xB8, 0x3B, 0xC4,
0xDF, 0x54, 0xF1, 0xA1, 0xC4, 0x7F, 0x6F, 0xE1, 0x84, 0x26, 0x3F, 0xAC, 0xE2, 0x8E, 0xC4, 0x4F,
0xB7, 0x30, 0xE9, 0x7E, 0x18, 0x54, 0x2A, 0x20, 0x25, 0x25, 0x2C, 0xF2, 0xF0, 0x2E, 0x9C, 0x9C,
0x64, 0xAD, 0xD1, 0xB8, 0x8A, 0xF8, 0x18, 0xC7, 0x2D, 0x44, 0xD5, 0xC6, 0xED, 0x2F, 0xD0, 0x1C,
0xE0, 0xA8, 0x4E, 0x93, 0x21, 0x6E, 0x7F, 0x82, 0xE6, 0x09, 0x8E, 0xBC, 0x36, 0x7E, 0x30, 0x83,
0x99, 0xB1, 0xE8, 0x09, 0xE0, 0xE3, 0x44, 0xBD, 0x89, 0x7B, 0x1D, 0x1C, 0x25, 0x88, 0xA1, 0x8F,
0x9F, 0x2B, 0x3C, 0xE8, 0xE0, 0x84, 0x26, 0x7D, 0x1F, 0xFF, 0xAA, 0xF0, 0xC9, 0x43, 0x4C, 0x11,
0xF3, 0x54, 0xDB, 0xCA, 0x2E, 0xE3, 0x41, 0xB0, 0x54, 0x98, 0xBC, 0x3D, 0x61, 0xBF, 0x1F, 0x93,
0xBF, 0xB3, 0xAF, 0xAB, 0x4E, 0x22, 0xB3, 0x22, 0xF1, 0x96, 0xAF, 0xF4, 0xFB, 0x87, 0x5A, 0xB1,
0x28, 0x03, 0x5D, 0x4D, 0x3C, 0x2E, 0x14, 0x67, 0x87, 0xE1, 0xFF, 0xD3, 0x4E, 0x0B, 0xF4, 0x2F,
0x21, 0xDC, 0x97, 0xBC, 0x03, 0x99, 0x49, 0x7B, 0x23, 0xE7, 0xDD, 0xA8, 0x4B, 0x26, 0xA3, 0xF4,
0xE8, 0x81, 0x13, 0x01, 0x7F, 0x5B, 0xD3, 0xEF, 0xDE, 0xF4, 0xDB, 0xE9, 0x44, 0x83, 0x9E, 0x64,
0x45, 0xBE, 0xCC, 0xBB, 0xCA, 0xF8, 0x77, 0x8A, 0xC2, 0xA7, 0x6B, 0x93, 0xC0, 0x95, 0x24, 0x13,
0x26, 0x5F, 0xA7, 0x60, 0xB8, 0x0D, 0x70, 0x6E, 0x05, 0x1C, 0x4C, 0xC9, 0x63, 0x42, 0x4A, 0x5F,
0x4B, 0x74, 0xF1, 0xC5, 0x88, 0xC3, 0x77, 0x86, 0x0B, 0x14, 0x59, 0x50, 0x42, 0xEB, 0xB7, 0xB1,
0x85, 0x3D, 0x70, 0x26, 0x40, 0x2F, 0xB8, 0xDD, 0x3B, 0x93, 0xDB, 0x30, 0x34, 0xE0, 0xFE, 0x4E,
0xCB, 0x6B, 0x65, 0x28, 0x76, 0x57, 0xA6, 0x45, 0x30, 0x4B, 0x2B, 0x31, 0x94, 0x23, 0x7E, 0xF9,
0x3D, 0x6B, 0x45, 0xF2, 0x4C, 0x0E, 0xA6, 0x97, 0x4E, 0xA8, 0x68, 0x95, 0x9F, 0x38, 0x94, 0xC2,
0x5F, 0xA6, 0x9A, 0x13, 0x72, 0xD1, 0xE1, 0xAA, 0xB3, 0x19, 0x27, 0xCE, 0x72, 0x87, 0xEB, 0x8E,
0x23, 0x82, 0xD2, 0x6C, 0x5E, 0x79, 0xCE, 0x1F, 0xF1, 0x06, 0xE6, 0x0E, 0xCF, 0xF1, 0x3F, 0x7E,
0x12, 0xC0, 0x55, 0xF2, 0x59, 0xB9, 0x43, 0x37, 0xAE, 0xF2, 0x79, 0x97, 0x4E, 0xA5, 0x5B, 0xCD,
0xD2, 0x3A, 0x27, 0xBF, 0xE0, 0x50, 0x33, 0xEC, 0x0A, 0x94, 0x05, 0x79, 0x63, 0xF9, 0x3B, 0x67,
0x1E, 0x70, 0xB4, 0x31, 0x3A, 0xDA, 0x78, 0xA2, 0xF1, 0x91, 0x3F, 0x7D, 0x26, 0x44, 0x21, 0x13,
0xAB, 0x35, 0x68, 0x1D, 0x27, 0x59, 0xE2, 0x29, 0x3F, 0x69, 0x28, 0xF3, 0x50, 0x6D, 0x82, 0xC3,
0x4A, 0x77, 0xD4, 0x2E, 0x83, 0x45, 0x3C, 0x14, 0xB1, 0x60, 0x0E, 0xC5, 0x93, 0xCB, 0xC7, 0xF7,
0xC2, 0xA1, 0x24, 0x26, 0x7B, 0x58, 0x50, 0xC4, 0x2A, 0xDB, 0x08, 0xE3, 0x29, 0x2D, 0x03, 0x33,
0x9F, 0xA3, 0x40, 0x4D, 0x4B, 0x03, 0x3F, 0xD1, 0x9E, 0xF0, 0xA0, 0x9F, 0xA1, 0xB2, 0x8D, 0x17,
0x85, 0x5E, 0xA5, 0x8D, 0x22, 0x11, 0x14, 0x0C, 0x91, 0x05, 0xA6, 0x30, 0xDD, 0x48, 0x4A, 0x2C,
0xF8, 0xBE, 0x9B, 0x65, 0x10, 0xBF, 0x3E, 0x05, 0x85, 0x53, 0x07, 0x39, 0xE1, 0x87, 0xDA, 0x0B,
0x5E, 0x78, 0x0A, 0xB5, 0x27, 0xF4, 0x0B, 0x5E, 0x78, 0x72, 0xE2, 0x6F, 0xA6, 0xEA, 0xF4, 0xD5,
0xFC, 0x09, 0xB8, 0xA2, 0xEC, 0x7D, 0x7F, 0x67, 0x72, 0x36, 0x81, 0xF9, 0xD6, 0xEF, 0x2F, 0x5C,
0x89, 0xCE, 0xE6, 0x20, 0x93, 0x17, 0x0B, 0xF9, 0x1F, 0xDD, 0x92, 0x4F, 0x6B, 0x13, 0x41, 0x18,
0xC6, 0x9F, 0xD9, 0x89, 0x59, 0xCC, 0xD0, 0x6C, 0x0F, 0x56, 0x0A, 0xD9, 0x46, 0x8F, 0x12, 0x92,
0xE6, 0xB2, 0x87, 0x55, 0x62, 0x32, 0xED, 0xC5, 0x83, 0x88, 0x21, 0xD4, 0x53, 0x91, 0x7A, 0xF0,
0x68, 0x21, 0x87, 0x1C, 0x44, 0x24, 0xAE, 0xFA, 0x01, 0xCC, 0xC9, 0x5E, 0x7B, 0xF0, 0x52, 0x11,
0x32, 0x0D, 0x11, 0x8A, 0x4B, 0xEC, 0x84, 0x1C, 0x03, 0xB2, 0x15, 0xBD, 0x8F, 0x9A, 0x0A, 0x92,
0x1E, 0x56, 0xED, 0x21, 0xFE, 0xE9, 0xAE, 0x13, 0xA4, 0x20, 0x88, 0x5F, 0xC0, 0x79, 0x5E, 0x18,
0xDE, 0x97, 0x99, 0x77, 0xE6, 0xF9, 0xCD, 0x80, 0xD3, 0x88, 0x7E, 0x0C, 0x54, 0xA9, 0xC1, 0x0A,
0xC6, 0x90, 0x6F, 0x07, 0xF9, 0xDB, 0x96, 0x65, 0xDE, 0x8F, 0x65, 0xC6, 0x63, 0xB3, 0xBE, 0xEF,
0xBF, 0x00, 0x70, 0x06, 0x96, 0x64, 0xA1, 0x59, 0xA2, 0x8F, 0xE8, 0xA0, 0xFF, 0xF6, 0x30, 0x8E,
0x3D, 0x0B, 0x54, 0x62, 0x13, 0x28, 0x1E, 0x15, 0x56, 0x5C, 0xB8, 0xA8, 0x4C, 0xE6, 0x9A, 0xB0,
0xA6, 0x6A, 0xF6, 0x32, 0x0A, 0xA7, 0x48, 0xBC, 0x74, 0x88, 0x10, 0x0E, 0xCF, 0xC6, 0x97, 0xF6,
0x3E, 0x07, 0x76, 0xC3, 0xBC, 0x4A, 0xFB, 0x3F, 0x54, 0xA6, 0xA5, 0x9B, 0xC5, 0xFD, 0x6B, 0x21,
0x1A, 0x28, 0x21, 0x0D, 0x06, 0xEA, 0x19, 0x52, 0x2F, 0xEC, 0xE2, 0x1C, 0xC0, 0x69, 0x4C, 0xF7,
0x94, 0x2A, 0x5D, 0xCC, 0xD2, 0x08, 0xB1, 0x0C, 0xEF, 0x36, 0x58, 0x96, 0x0E, 0xC6, 0x7A, 0x17,
0xE1, 0x66, 0x44, 0xFB, 0xEF, 0x64, 0x5E, 0xB0, 0x05, 0x5D, 0x09, 0x73, 0xB7, 0xF4, 0x51, 0x6C,
0xB9, 0xED, 0x35, 0x39, 0x38, 0x91, 0x44, 0xE6, 0x3E, 0x55, 0x8E, 0xA6, 0x33, 0x78, 0x6E, 0xAB,
0x72, 0x54, 0x89, 0xE6, 0x56, 0x80, 0x4A, 0x04, 0x24, 0xE9, 0x03, 0xA9, 0x1C, 0xDB, 0x24, 0xB2,
0x3E, 0x43, 0x3D, 0x91, 0x26, 0xDE, 0x8D, 0x34, 0x91, 0xAE, 0x65, 0xC8, 0xBA, 0xCD, 0x0C, 0xA9,
0xEA, 0xEE, 0x3C, 0x50, 0x6D, 0xFF, 0xEC, 0xA6, 0x45, 0xEA, 0x58, 0x9B, 0x29, 0xFC, 0x9B, 0x89,
0xB6, 0x6C, 0x7D, 0x1D, 0x22, 0xB4, 0x8E, 0x23, 0x49, 0x78, 0x71, 0xE2, 0x16, 0xB4, 0x99, 0x34,
0xF2, 0xE8, 0x1A, 0x01, 0xE3, 0x05, 0xDC, 0x8B, 0x72, 0x5B, 0x84, 0xB3, 0x88, 0x2E, 0x2B, 0x0D,
0x67, 0xC1, 0x78, 0x89, 0x5D, 0xA9, 0x0D, 0x6B, 0x6A, 0xC3, 0x71, 0xD0, 0xF6, 0xFE, 0x7B, 0xA4,
0xC9, 0xD1, 0xC9, 0xEB, 0x60, 0x64, 0x2D, 0xDB, 0x76, 0x98, 0x63, 0x95, 0xFD, 0xE4, 0x92, 0x31,
0xA2, 0x1B, 0x0F, 0xBD, 0xFA, 0xFE, 0x7A, 0xF9, 0x69, 0x1A, 0xFA, 0x7E, 0xE5, 0x67, 0xE4, 0x09,
0x8C, 0x09, 0xDD, 0x18, 0x48, 0x37, 0x60, 0x8E, 0xF1, 0x0A, 0x1D, 0xE9, 0x96, 0x77, 0x74, 0xF1,
0x6C, 0x92, 0x99, 0xFC, 0x83, 0x67, 0x79, 0x34, 0x20, 0x07, 0xE4, 0xB5, 0x54, 0xEE, 0x2C, 0x41,
0x46, 0xA5, 0x56, 0x39, 0x04, 0xEC, 0x4A, 0x7C, 0x85, 0x0C, 0x3C, 0x71, 0x27, 0x24, 0x2D, 0x9D,
0x4E, 0xD5, 0x19, 0xF5, 0xD6, 0xC5, 0x1F, 0xCF, 0x57, 0x3D, 0xF1, 0xBB, 0x2E, 0xE6, 0x85, 0xE8,
0x48, 0x1F, 0xBB, 0xBC, 0x23, 0x85, 0x10, 0xA5, 0x6A, 0xC2, 0x9F, 0x8E, 0xE7, 0x35, 0xD5, 0x2B,
0xAE, 0xED, 0x8F, 0xA1, 0x16, 0xA5, 0xC3, 0xC4, 0x8C, 0x71, 0x40, 0xB9, 0x8F, 0x60, 0x9A, 0x54,
0x13, 0xE0, 0xB5, 0xBF, 0xBA, 0xD5, 0x54, 0x71, 0xF5, 0x32, 0xBE, 0x48, 0x5B, 0x98, 0x79, 0xFD,
0x19, 0xDE, 0x7F, 0x0F, 0xB7, 0x5B, 0x79, 0x8D, 0x59, 0x9B, 0x60, 0xA3, 0xF3, 0x37, 0x1D, 0x2C,
0x22, 0x19, 0x6A, 0xF4, 0xF6, 0x85, 0x9D, 0xD3, 0x3C, 0x41, 0x64, 0xF3, 0xF1, 0x9B, 0xBC, 0x21,
0x75, 0xD8, 0xF8, 0x46, 0xBC, 0x5F, 0x85, 0x56, 0x31, 0x8C, 0xDC, 0xD6, 0x11, 0x7D, 0xE4, 0xB7,
0x44, 0x23, 0x0C, 0xF6, 0xAB, 0x10, 0x82, 0x00, 0x96, 0x97, 0x29, 0x5C, 0x25, 0xD2, 0x6E, 0x8A,
0x14, 0x6B, 0x84, 0x3C, 0x52, 0x3A, 0x24, 0x2E, 0x04, 0x24, 0x02, 0x72, 0x07, 0x15, 0x29, 0xEC,
0x22, 0x95, 0x5C, 0x5C, 0x8A, 0x2B, 0xAE, 0xD8, 0xBD, 0xA5, 0xAC, 0x42, 0x40, 0x1A, 0x9D, 0x61,
0xBB, 0xB6, 0x0B, 0x17, 0xCA, 0x5D, 0xA1, 0x2D, 0x2E, 0x00, 0x9D, 0xDC, 0xDD, 0xD2, 0x50, 0xE1,
0x42, 0x40, 0x4C, 0xDB, 0xA9, 0x12, 0x04, 0x47, 0x21, 0x16, 0x14, 0xDC, 0x05, 0xB9, 0x8F, 0x88,
0xB6, 0xF7, 0x24, 0xEE, 0xFE, 0xBC, 0xE1, 0x9E, 0x94, 0xC0, 0x06, 0x12, 0x82, 0x7F, 0xC8, 0x21,
0xF9, 0xE7, 0xCF, 0xBC, 0x79, 0x33, 0x9F, 0x00, 0x10, 0x4C, 0xE1, 0x1F, 0xE6, 0x8E, 0x01, 0x3A,
0x80, 0x2A, 0x80, 0xD0, 0x59, 0x5E, 0xCC, 0xE3, 0x69, 0xA8, 0x72, 0x55, 0x84, 0xE8, 0xAA, 0x1C,
0xD3, 0xC1, 0x92, 0x6B, 0x6D, 0xEE, 0x0C, 0x96, 0x40, 0x0D, 0x21, 0x9A, 0xCB, 0xC2, 0x6D, 0x28,
0x5B, 0xC0, 0x6F, 0x41, 0xDD, 0x48, 0x5C, 0x5B, 0xFA, 0x76, 0xA6, 0xEB, 0x05, 0xFF, 0x5E, 0x4B,
0x7D, 0x76, 0xE3, 0xA2, 0xB9, 0x9F, 0x67, 0xAB, 0xA3, 0xCE, 0xB9, 0x9E, 0x7F, 0xB9, 0xE5, 0xFE,
0xED, 0x46, 0xD2, 0xBF, 0x9F, 0xEB, 0xD5, 0x91, 0xAA, 0x7B, 0x18, 0xB6, 0xE0, 0xD9, 0x23, 0xD0,
0xDE, 0xEA, 0x08, 0xE7, 0x7A, 0x38, 0x75, 0x0A, 0xCD, 0x11, 0xD8, 0x24, 0xB6, 0xA6, 0x9B, 0x9C,
0x0D, 0x00, 0x9D, 0xCA, 0x0A, 0xE2, 0x53, 0xD6, 0x1A, 0x76, 0x94, 0xBD, 0x97, 0xD6, 0x6E, 0x19,
0xA2, 0xAF, 0xA1, 0xC5, 0x2B, 0x83, 0x9D, 0x10, 0x7A, 0x1F, 0xB0, 0x47, 0xA9, 0x4F, 0x17, 0x00,
0xDF, 0x5A, 0xCD, 0x33, 0xC1, 0xD7, 0xCF, 0x83, 0xDF, 0x6A, 0x3B, 0xD5, 0xEF, 0x2C, 0xCD, 0x55,
0x6B, 0x31, 0xB6, 0xFF, 0x79, 0x2B, 0x87, 0x63, 0x4B, 0x3E, 0x4B, 0x75, 0x72, 0xC6, 0x29, 0x1B,
0x08, 0xDC, 0xF9, 0x25, 0xB6, 0x13, 0x77, 0xBC, 0x99, 0x50, 0x73, 0xD6, 0x97, 0x45, 0x93, 0x4B,
0x03, 0x0F, 0x64, 0xAA, 0xB2, 0x76, 0x1A, 0xDB, 0x66, 0xED, 0xD7, 0xC4, 0x4C, 0x29, 0xA6, 0x0A,
0x5C, 0xB9, 0xB6, 0xF8, 0xE7, 0xE4, 0x91, 0x7D, 0x68, 0x8D, 0xFD, 0xA9, 0x7D, 0xB3, 0xAE, 0xB1,
0x87, 0x70, 0x82, 0x3E, 0xA2, 0x6A, 0x2E, 0x76, 0x44, 0xD4, 0x14, 0xAE, 0x08, 0x25, 0xC2, 0x97,
0x67, 0x2D, 0x79, 0x7B, 0x5E, 0x44, 0x48, 0x81, 0x55, 0x31, 0x69, 0x44, 0x34, 0xC1, 0xE5, 0x3E,
0xE2, 0x24, 0xC4, 0x0C, 0x46, 0xD5, 0x2A, 0xD7, 0xDB, 0x1A, 0xA1, 0x09, 0xBF, 0xF5, 0xE4, 0xE0,
0x71, 0xD7, 0xDA, 0x5A, 0x6B, 0xAA, 0x17, 0x42, 0x86, 0x6F, 0x5F, 0x38, 0x78, 0xF2, 0x77, 0xED,
0xEE, 0x23, 0xA4, 0x61, 0xA3, 0x8D, 0xCA, 0x83, 0x5C, 0x23, 0xA6, 0xC7, 0x3B, 0x88, 0x8F, 0x99,
0x34, 0x5B, 0xD3, 0x7D, 0xCF, 0x10, 0xDB, 0x20, 0xE1, 0xD3, 0x8A, 0x37, 0xFE, 0x0D, 0x1A, 0xAE,
0x56, 0x69, 0xD5, 0x7F, 0x3B, 0xF4, 0x1E, 0xDA, 0xBB, 0xB6, 0x0E, 0xDE, 0x8E, 0xA7, 0xD8, 0x26,
0xFE, 0x3E, 0x5F, 0x7D, 0xED, 0x26, 0xE5, 0xCD, 0xFA, 0x5B, 0x39, 0xDC, 0x59, 0x03, 0x9E, 0xFD,
0x9C, 0x60, 0x58, 0x3A, 0x6A, 0x82, 0x14, 0x9A, 0x21, 0xD2, 0xC3, 0xFC, 0xDA, 0xCF, 0x11, 0x76,
0x67, 0x46, 0x7D, 0xF4, 0xC9, 0x2D, 0x64, 0x19, 0xBE, 0x58, 0xF1, 0x53, 0x6D, 0x8B, 0x05, 0x3C,
0x9E, 0xB8, 0x53, 0xA6, 0xCF, 0x9B, 0x98, 0x0E, 0xFC, 0x7D, 0x26, 0xB7, 0x6B, 0x74, 0xE2, 0x58,
0xF4, 0x93, 0x8E, 0x51, 0x7F, 0xD9, 0xDA, 0x47, 0x67, 0x58, 0x35, 0x56, 0x57, 0xDD, 0xD2, 0x6F,
0xA3, 0x56, 0x77, 0xF3, 0x18, 0xC6, 0xB4, 0xF3, 0x5E, 0xE8, 0xAF, 0xB6, 0xFD, 0x4B, 0x7F, 0xF4,
0x2F, 0x16, 0x8F, 0xDE, 0xC8, 0xD7, 0x7A, 0xC6, 0x8C, 0x19, 0xEC, 0xEB, 0x47, 0x47, 0x76, 0xE3,
0x5F, 0x1F, 0x7E, 0x96, 0x9E, 0x37, 0x2F, 0x17, 0x5E, 0xBF, 0xF5, 0x6B, 0xFC, 0xD3, 0xFD, 0x07,
0x71, 0x1A, 0x43, 0x33, 0x6E, 0xD7, 0xA8, 0x92, 0x61, 0x57, 0x18, 0xCF, 0x12, 0x42, 0x53, 0x6A,
0xE3, 0x54, 0xDA, 0x90, 0x41, 0xE6, 0x4C, 0xA8, 0xCD, 0x9A, 0x8C, 0xE8, 0x7F, 0x8C, 0xB3, 0x1C,
0xE8, 0x70, 0xF4, 0xCD, 0xFA, 0x56, 0x65, 0x86, 0x76, 0xA3, 0xC9, 0x3A, 0x53, 0xC3, 0xC4, 0x33,
0xE4, 0x5A, 0x54, 0xE7, 0xFD, 0x08, 0xC3, 0x69, 0xE5, 0x3D, 0x18, 0x32, 0xBA, 0xF8, 0xA2, 0xC1,
0xC0, 0xCB, 0x51, 0x75, 0xC8, 0x92, 0x0C, 0xFA, 0x52, 0x89, 0x48, 0x54, 0x0D, 0xAF, 0x88, 0xE9,
0x56, 0xBC, 0x35, 0x45, 0x77, 0xB2, 0x8D, 0x93, 0x83, 0xDC, 0x21, 0x1B, 0xEB, 0xB9, 0x32, 0x9C,
0x50, 0x2F, 0x75, 0xF1, 0xBC, 0x30, 0x3E, 0x6A, 0xAA, 0xCB, 0xD9, 0x5D, 0x4E, 0x86, 0xB6, 0x76,
0x3E, 0x58, 0x26, 0xE8, 0x2C, 0x18, 0x8B, 0x21, 0x71, 0xEE, 0xCF, 0x2B, 0xB4, 0xCB, 0x39, 0x9C,
0xAA, 0x66, 0x2C, 0x5D, 0xCB, 0x4A, 0x84, 0x97, 0xBA, 0x65, 0x1B, 0x01, 0xD6, 0x1C, 0xE3, 0x94,
0x3A, 0xF1, 0xD2, 0x09, 0xDA, 0x9C, 0xB6, 0xD6, 0x87, 0xF3, 0x30, 0x27, 0xBD, 0xED, 0x87, 0x63,
0xBB, 0x89, 0x01, 0xD5, 0x32, 0xE3, 0xC7, 0x15, 0xDA, 0x5C, 0x69, 0xCD, 0xE5, 0xC7, 0xAA, 0xF4,
0x52, 0x2F, 0x6F, 0x93, 0x63, 0x43, 0x6B, 0x0F, 0xAD, 0x6D, 0xAA, 0x83, 0xB0, 0x41, 0xFF, 0x04,
0xF8, 0xD2, 0x40, 0x4F, 0x80, 0x29, 0x3D, 0x4C, 0x10, 0x57, 0xC6, 0xBF, 0xB5, 0xCB, 0x9C, 0x73,
0xFD, 0x14, 0x41, 0x05, 0x6F, 0x3F, 0xC1, 0xF7, 0x2A, 0x3C, 0x9D, 0xD0, 0x1C, 0x2F, 0x08, 0x50,
0x0C, 0x46, 0x02, 0x3B, 0x8B, 0xA1, 0x3C, 0xBA, 0xA2, 0xC5, 0x43, 0x23, 0x7E, 0xC3, 0x48, 0x71,
0x39, 0xA5, 0x84, 0xE9, 0x36, 0x52, 0x15, 0x8D, 0x64, 0xFB, 0x71, 0xE0, 0xE5, 0x6E, 0x39, 0x34,
0x5E, 0xAA, 0x8A, 0xE3, 0xDA, 0x4F, 0xFC, 0xBB, 0x65, 0xA4, 0x13, 0xBD, 0x98, 0x47, 0x1A, 0xEB,
0x5E, 0x1E, 0x06, 0xA7, 0x6B, 0x3F, 0xDD, 0xE9, 0x12, 0xA6, 0xC3, 0xAA, 0x7B, 0x0C, 0x3D, 0x16,
0x7B, 0xBA, 0x59, 0xB4, 0xDD, 0xC8, 0x0B, 0x8D, 0x8C, 0x1A, 0x19, 0x36, 0xB2, 0x7F, 0xE2, 0xD4,
0x38, 0xC5, 0x7A, 0x85, 0xA8, 0xDD, 0x34, 0x8F, 0xDC, 0x80, 0x69, 0xBD, 0x70, 0x01, 0xDE, 0x2D,
0xE0, 0xAB, 0x14, 0x71, 0x0E, 0xAF, 0x94, 0x62, 0x7B, 0x6F, 0x0F, 0xFD, 0x38, 0x8F, 0x77, 0xB6,
0xDB, 0x7B, 0x81, 0xD6, 0xEA, 0xA3, 0x37, 0x92, 0xED, 0xC6, 0xB4, 0xB4, 0x3A, 0xFA, 0xB8, 0x06,
0x7F, 0x0A, 0x77, 0xCA, 0x54, 0x6C, 0x80, 0x5E, 0x20, 0xF3, 0xCA, 0xD3, 0x0F, 0x7E, 0xF9, 0x27,
0x22, 0x46, 0x3A, 0x47, 0xC8, 0xB0, 0xFD, 0x83, 0xC7, 0x5B, 0x93, 0x95, 0x83, 0xF1, 0x7B, 0x1D,
0x4C, 0xB0, 0x37, 0xCE, 0x5D, 0x5B, 0x49, 0xEA, 0xA4, 0x97, 0xF0, 0x6D, 0xD3, 0x56, 0x9E, 0xAA,
0xC0, 0x48, 0xA0, 0xFA, 0x5C, 0x18, 0xA0, 0x26, 0xA3, 0x5F, 0xE9, 0x7C, 0xC4, 0x9C, 0x8E, 0xB0,
0xC0, 0x11, 0x72, 0xF4, 0x9B, 0xF1, 0xBB, 0xA5, 0x3E, 0xC6, 0xD3, 0x3E, 0x7E, 0xBF, 0x4B, 0x3D,
0x8A, 0x38, 0xF8, 0x4D, 0xA4, 0xD3, 0x51, 0xE4, 0x55, 0xA3, 0xC8, 0xB1, 0x4F, 0x48, 0x28, 0x3B,
0x69, 0x6C, 0xC9, 0xF0, 0xE9, 0xA7, 0x40, 0x1D, 0x70, 0xA1, 0x05, 0x3A, 0x1C, 0x32, 0x27, 0x2C,
0x3F, 0x4C, 0xFA, 0x5C, 0xC6, 0xD6, 0x57, 0xBF, 0x58, 0x59, 0x52, 0x85, 0xC6, 0xEB, 0x07, 0x77,
0x6E, 0x8B, 0xAE, 0x13, 0x55, 0x04, 0x50, 0x65, 0x87, 0x6D, 0x96, 0x70, 0x55, 0x04, 0x2B, 0x9B,
0x9C, 0x60, 0xD6, 0xB5, 0xAC, 0x99, 0x19, 0x5E, 0x73, 0xCD, 0xB3, 0xEC, 0xEA, 0xCB, 0x6C, 0x78,
0xD7, 0xB6, 0x66, 0x1B, 0xCE, 0x4C, 0x8A, 0x9F, 0xFD, 0x76, 0x4A, 0x5A, 0x7D, 0x5A, 0x36, 0x88,
0x4B, 0x6C, 0x41, 0xE2, 0x24, 0xF6, 0xA8, 0x72, 0xED, 0xBC, 0x33, 0x48, 0x43, 0x1C, 0xCE, 0x92,
0xC0, 0x5A, 0x67, 0xDA, 0x7B, 0x49, 0xE7, 0x2C, 0x46, 0x95, 0xAA, 0xB2, 0xC5, 0x94, 0xF5, 0xB8,
0x08, 0x93, 0xAF, 0xC8, 0xBB, 0x16, 0x39, 0xDB, 0xA8, 0xA8, 0x54, 0xEA, 0x1A, 0xEE, 0x0C, 0x65,
0x0F, 0x7E, 0x59, 0x8A, 0xFD, 0xE4, 0xB4, 0xB0, 0xA8, 0xD7, 0x98, 0x72, 0x92, 0xB3, 0x68, 0xF1,
0xDA, 0x23, 0xD1, 0x19, 0x07, 0xA9, 0x5A, 0xAD, 0x5C, 0x7D, 0x90, 0x64, 0x3E, 0x79, 0xCF, 0x66,
0x92, 0x66, 0xE8, 0xD0, 0x87, 0x6F, 0xA8, 0x24, 0x94, 0x3E, 0xF0, 0xD3, 0x60, 0x82, 0x67, 0x47,
0x30, 0x4B, 0x18, 0x5E, 0x85, 0x6E, 0xF2, 0xDD, 0x26, 0x34, 0xC9, 0x6E, 0xC3, 0x5E, 0xA9, 0x29,
0x25, 0x1F, 0xC6, 0xD4, 0x9C, 0x31, 0x1F, 0xBB, 0x42, 0x62, 0xFD, 0x9B, 0xCB, 0xAF, 0x5C, 0xFF,
0x6A, 0x77, 0x6F, 0x2D, 0xFA, 0xAB, 0xF6, 0x82, 0x58, 0x5D, 0xFF, 0x78, 0xF1, 0xB8, 0x1C, 0xA7,
0x3F, 0xB6, 0xB3, 0xE4, 0xDB, 0x2D, 0x1F, 0x4A, 0x5D, 0xCF, 0x59, 0x99, 0xF6, 0xDE, 0xB3, 0x5A,
0x96, 0x6A, 0x6B, 0x34, 0x6E, 0x63, 0xC2, 0xED, 0xFF, 0x7F, 0x89, 0x65, 0x27, 0xA9, 0x31, 0x10,
0x1F, 0xBE, 0x7F, 0xE7, 0x36, 0x55, 0x79, 0xB1, 0x80, 0xEF, 0xD4, 0x88, 0x4B, 0xE1, 0x0B, 0xFD,
0x64, 0x27, 0x61, 0x3F, 0x6B, 0x36, 0xC4, 0x06, 0xF1, 0x2E, 0xDC, 0x62, 0xDE, 0x2A, 0x8A, 0x97,
0x10, 0x8D, 0x13, 0x65, 0x13, 0x8F, 0xC0, 0xFF, 0xE1, 0x93, 0x6D, 0x2C, 0x30, 0x3B, 0xC7, 0xF0,
0xA6, 0x78, 0xF1, 0x17, 0x85, 0x5B, 0x44, 0x88, 0x54, 0xA1, 0xF2, 0x88, 0xF0, 0x17, 0x41, 0x12,
0x79, 0xA5, 0x22, 0x65, 0xE2, 0xFF, 0x06, 0x44, 0xEA, 0xE8, 0x65, 0x41, 0x60, 0x14, 0x3E, 0x15,
0x83, 0xC1, 0xF2, 0x15, 0xA2, 0x64, 0x6D, 0x7A, 0x6A, 0x6F, 0x73, 0xCB, 0x48, 0x39, 0xAD, 0x89,
0x38, 0x8F, 0xF0, 0x47, 0x3F, 0x3C, 0x87, 0x68, 0x5A, 0x9F, 0x47, 0xF7, 0xE3, 0xFD, 0x8C, 0x3F,
0x07, 0xC4, 0x79, 0x8F, 0x33, 0xDC, 0x23, 0xB1, 0xF5, 0x8A, 0x80, 0xE9, 0xCE, 0x76, 0xA5, 0xA5,
0x3D, 0x85, 0xA3, 0xD9, 0xC6, 0xF4, 0x37, 0x6E, 0x56, 0x36, 0xB8, 0xF3, 0x32, 0x0F, 0xE3, 0x77,
0xEF, 0x94, 0x41, 0x6A, 0xBA, 0x8B, 0xA5, 0x96, 0x4D, 0x9D, 0xBB, 0x06, 0xB7, 0xAC, 0xA8, 0xCF,
0x4E, 0x71, 0x98, 0x6A, 0x74, 0xA4, 0x70, 0x0E, 0xA5, 0x6A, 0x9E, 0xDD, 0x78, 0x2C, 0x9B, 0xB1,
0x35, 0xCC, 0x6A, 0x9E, 0x61, 0xE0, 0x93, 0x53, 0x19, 0x16, 0x78, 0x61, 0xCF, 0xED, 0xFB, 0xC5,
0xCA, 0x2D, 0xF6, 0xFA, 0xF1, 0x6C, 0x43, 0x60, 0x62, 0xB5, 0x49, 0xA3, 0x5E, 0x39, 0x48, 0x4E,
0x34, 0xB9, 0x00, 0xCF, 0x11, 0xB4, 0x9B, 0xCC, 0xFC, 0xE3, 0x02, 0xFC, 0xA9, 0x61, 0x3F, 0x0F,
0x2A, 0xF5, 0xE8, 0xE6, 0xAB, 0x8E, 0xB9, 0xFF, 0xA9, 0x99, 0xF4, 0x56, 0xC3, 0xB0, 0xF5, 0xA2,
0x7E, 0x55, 0xDD, 0xBC, 0xF4, 0x30, 0xBF, 0x5F, 0x7C, 0x60, 0xCE, 0x9C, 0x79, 0x4E, 0x10, 0x11,
0xAA, 0x08, 0xCB, 0x9B, 0xCE, 0xE2, 0x49, 0x98, 0x83, 0x79, 0xAA, 0x4B, 0x36, 0xF2, 0x89, 0x73,
0x0A, 0xDE, 0xCF, 0xE4, 0x1C, 0xCA, 0xFF, 0x45, 0x99, 0x9D, 0xAE, 0x32, 0xD4, 0xF4, 0x27, 0xC3,
0x4E, 0x86, 0x6A, 0xF7, 0x2A, 0xF7, 0xAB, 0x74, 0xEF, 0x8E, 0x69, 0x1E, 0x86, 0x19, 0xA2, 0xE6,
0xEC, 0x67, 0x4E, 0xCD, 0x40, 0xF8, 0x6A, 0x3E, 0x97, 0x46, 0x70, 0x8D, 0x3D, 0x3F, 0x78, 0xE7,
0xAD, 0x92, 0x25, 0x41, 0x7F, 0x27, 0xB2, 0x6C, 0x26, 0x77, 0x7D, 0x28, 0xB6, 0xE2, 0x03, 0xD3,
0x9D, 0x9D, 0x50, 0xEC, 0xCB, 0xCD, 0xCD, 0x7F, 0x03, 0x5B, 0xB5, 0x6A, 0xD5, 0xFF, 0xFF, 0xFF,
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
0x19, 0x18, 0x18, 0x00, 0xAD, 0x52, 0xBD, 0x4E, 0xC3, 0x30, 0x10, 0xFE, 0x6C, 0x23, 0x3C, 0x74,
0x08, 0x5B, 0x46, 0x3F, 0x41, 0x93, 0x27, 0x30, 0x32, 0x5D, 0xBB, 0x54, 0x82, 0xC7, 0x31, 0x29,
0x2F, 0xC1, 0x53, 0x30, 0xB0, 0x30, 0xB0, 0x14, 0xCC, 0x1B, 0x44, 0x48, 0x11, 0x23, 0x5E, 0x3A,
0x20, 0x54, 0x11, 0x41, 0x10, 0x02, 0x35, 0x31, 0xE7, 0x50, 0x11, 0x16, 0x40, 0x48, 0xDC, 0xF0,
0xF9, 0xFE, 0x74, 0xDF, 0xDD, 0xF9, 0x00, 0x12, 0x16, 0xCC, 0xA5, 0x53, 0xAB, 0xE4, 0x01, 0x0D,
0x2C, 0x84, 0xE3, 0x1E, 0x0A, 0xA3, 0x23, 0x2C, 0x66, 0xBB, 0x07, 0x79, 0xB8, 0x0D, 0x75, 0x5A,
0xA5, 0x4B, 0xD3, 0xBB, 0x2C, 0x32, 0xB0, 0x1A, 0xE7, 0x90, 0x9F, 0x59, 0x3F, 0xB9, 0xA2, 0xC8,
0x76, 0x87, 0x75, 0x37, 0x4E, 0xC3, 0x0A, 0xC7, 0x28, 0x84, 0x51, 0xC5, 0xA6, 0xA1, 0xB1, 0x69,
0x25, 0x9D, 0x85, 0x95, 0xEE, 0xD7, 0x27, 0x56, 0x51, 0xCF, 0xB5, 0x5A, 0xD9, 0xC4, 0x28, 0xE1,
0xE4, 0x55, 0xCD, 0xEA, 0xC5, 0xAC, 0x08, 0xAD, 0xA2, 0x1A, 0xD1, 0xA0, 0x1C, 0x05, 0x25, 0xDD,
0x77, 0x06, 0x36, 0x8D, 0xF0, 0xB0, 0xC5, 0xBA, 0xB2, 0x7B, 0xF2, 0x9A, 0x7C, 0x59, 0x3F, 0xA8,
0x89, 0xBD, 0x52, 0x4B, 0x62, 0xB9, 0x37, 0x0D, 0x2F, 0x61, 0x9D, 0xC5, 0x59, 0x27, 0x3E, 0x7A,
0xB3, 0x38, 0x10, 0xFF, 0xBB, 0x3A, 0xB0, 0x65, 0x91, 0xED, 0x71, 0x60, 0xDB, 0x24, 0x44, 0xB6,
0xC9, 0xFD, 0x3F, 0xB2, 0xE5, 0x2D, 0x44, 0xD7, 0x21, 0xA7, 0x55, 0x35, 0x68, 0x44, 0x29, 0x4A,
0x5A, 0xD4, 0xB1, 0xE6, 0x61, 0xDD, 0xB0, 0xD7, 0xFD, 0xDE, 0x4C, 0x8C, 0x86, 0x1E, 0xA2, 0x5F,
0x4D, 0x9F, 0x18, 0xF9, 0xA6, 0x31, 0x6A, 0x31, 0xC8, 0xDC, 0xC7, 0xB3, 0x58, 0x03, 0xA2, 0xD4,
0x04, 0x6E, 0xFC, 0x01, 0xEC, 0xC4, 0x15, 0x74, 0x12, 0xD7, 0xA1, 0x3D, 0xDC, 0x26, 0xED, 0x0C,
0x18, 0xC7, 0x5F, 0x1E, 0xA3, 0x88, 0xA0, 0x1A, 0x02, 0x1E, 0x0C, 0x25, 0xAB, 0x92, 0x80, 0x7B,
0x02, 0x56, 0x67, 0x30, 0xDC, 0xE7, 0xB8, 0x38, 0x75, 0xC9, 0xDD, 0xBC, 0xA3, 0xC5, 0xF4, 0x0C,
0xEF, 0x63, 0x60, 0x60, 0x66, 0x00, 0x01, 0x7B, 0x10, 0xC1, 0xFC, 0x1F, 0xCC, 0xFC, 0x0F, 0x66,
0x82, 0x48, 0x5B, 0x06, 0x7D, 0x20, 0xF3, 0x01, 0x88, 0xB4, 0x3F, 0x76, 0xA1, 0x1E, 0x24, 0x7A,
0xF0, 0x3F, 0x50, 0xC1, 0x3F, 0xF6, 0xFF, 0x40, 0xE6, 0x03, 0xFB, 0xFF, 0xFA, 0xFF, 0xFF, 0x31,
0xFF, 0xFF, 0x67, 0xFF, 0xFF, 0x03, 0x18, 0x35, 0xFD, 0x07, 0x49, 0xC6, 0xFF, 0xFF, 0x00, 0x24,
0x41, 0xFA, 0xED, 0xBF, 0x02, 0x99, 0x0C, 0xF6, 0x8E, 0x60, 0xA3, 0xD8, 0x81, 0x4C, 0x06, 0xBB,
0xFD, 0x60, 0x1B, 0x3E, 0xC0, 0xAD, 0x64, 0x50, 0x00, 0x62, 0x00,
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
};
static const EpdGlyph notosans_12_regularGlyphs[] = {
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
{ 0, 0, 0, 0, 0, 0, 0 }, // U+0000
{ 0, 0, 7, 0, 0, 0, 0 }, // U+000D
{ 0, 0, 7, 0, 0, 0, 0 }, // U+0020
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
{ 4, 19, 7, 1, 18, 19, 0 }, // !
{ 8, 7, 10, 1, 18, 14, 19 }, // "
{ 16, 18, 16, 0, 18, 72, 33 }, // #
{ 12, 21, 14, 1, 19, 63, 105 }, // $
{ 19, 20, 21, 1, 19, 95, 168 }, // %
{ 18, 20, 18, 1, 19, 90, 263 }, // &
{ 3, 7, 6, 1, 18, 6, 353 }, // '
{ 6, 22, 8, 1, 18, 33, 359 }, // (
{ 7, 22, 8, 0, 18, 39, 392 }, // )
{ 12, 12, 14, 1, 19, 36, 431 }, // *
{ 12, 13, 14, 1, 15, 39, 467 }, // +
{ 4, 7, 7, 1, 3, 7, 506 }, // ,
{ 7, 3, 8, 1, 8, 6, 513 }, // -
{ 4, 5, 7, 1, 4, 5, 519 }, // .
{ 10, 18, 9, 0, 18, 45, 524 }, // /
{ 13, 20, 14, 1, 19, 65, 569 }, // 0
{ 7, 18, 14, 2, 18, 32, 634 }, // 1
{ 12, 19, 14, 1, 19, 57, 666 }, // 2
{ 12, 20, 14, 1, 19, 60, 723 }, // 3
{ 14, 18, 14, 0, 18, 63, 783 }, // 4
{ 12, 19, 14, 1, 18, 57, 846 }, // 5
{ 13, 20, 14, 1, 19, 65, 903 }, // 6
{ 13, 18, 14, 1, 18, 59, 968 }, // 7
{ 13, 20, 14, 1, 19, 65, 1027 }, // 8
{ 12, 20, 14, 1, 19, 60, 1092 }, // 9
{ 4, 15, 7, 1, 14, 15, 1152 }, // :
{ 5, 18, 7, 0, 14, 23, 1167 }, // ;
{ 13, 14, 14, 1, 16, 46, 1190 }, // <
{ 12, 8, 14, 1, 13, 24, 1236 }, // =
{ 13, 14, 14, 1, 16, 46, 1260 }, // >
{ 11, 20, 11, 0, 19, 55, 1306 }, // ?
{ 21, 21, 22, 1, 18, 111, 1361 }, // @
{ 16, 18, 16, 0, 18, 72, 1472 }, // A
{ 13, 18, 16, 2, 18, 59, 1544 }, // B
{ 15, 20, 16, 1, 19, 75, 1603 }, // C
{ 15, 18, 18, 2, 18, 68, 1678 }, // D
{ 11, 18, 14, 2, 18, 50, 1746 }, // E
{ 11, 18, 13, 2, 18, 50, 1796 }, // F
{ 16, 20, 18, 1, 19, 80, 1846 }, // G
{ 15, 18, 19, 2, 18, 68, 1926 }, // H
{ 7, 18, 8, 1, 18, 32, 1994 }, // I
{ 7, 23, 7, -2, 18, 41, 2026 }, // J
{ 14, 18, 15, 2, 18, 63, 2067 }, // K
{ 11, 18, 13, 2, 18, 50, 2130 }, // L
{ 19, 18, 23, 2, 18, 86, 2180 }, // M
{ 15, 18, 19, 2, 18, 68, 2266 }, // N
{ 17, 20, 20, 1, 19, 85, 2334 }, // O
{ 12, 18, 15, 2, 18, 54, 2419 }, // P
{ 17, 24, 20, 1, 19, 102, 2473 }, // Q
{ 14, 18, 16, 2, 18, 63, 2575 }, // R
{ 12, 20, 14, 1, 19, 60, 2638 }, // S
{ 14, 18, 14, 0, 18, 63, 2698 }, // T
{ 14, 19, 18, 2, 18, 67, 2761 }, // U
{ 15, 18, 15, 0, 18, 68, 2828 }, // V
{ 23, 18, 23, 0, 18, 104, 2896 }, // W
{ 15, 18, 15, 0, 18, 68, 3000 }, // X
{ 15, 18, 14, 0, 18, 68, 3068 }, // Y
{ 14, 18, 14, 0, 18, 63, 3136 }, // Z
{ 6, 22, 8, 2, 18, 33, 3199 }, // [
{ 10, 18, 9, 0, 18, 45, 3232 }, // <backslash>
{ 7, 22, 8, 0, 18, 39, 3277 }, // ]
{ 14, 12, 14, 0, 18, 42, 3316 }, // ^
{ 13, 2, 11, -1, -2, 7, 3358 }, // _
{ 6, 5, 7, 1, 20, 8, 3365 }, // `
{ 11, 15, 14, 1, 14, 42, 3373 }, // a
{ 12, 20, 15, 2, 19, 60, 3415 }, // b
{ 11, 15, 12, 1, 14, 42, 3475 }, // c
{ 13, 20, 15, 1, 19, 65, 3517 }, // d
{ 12, 15, 14, 1, 14, 45, 3582 }, // e
{ 10, 20, 9, 0, 20, 50, 3627 }, // f
{ 13, 20, 15, 1, 14, 65, 3677 }, // g
{ 12, 19, 15, 2, 19, 57, 3742 }, // h
{ 4, 19, 6, 1, 19, 19, 3799 }, // i
{ 7, 25, 6, -2, 19, 44, 3818 }, // j
{ 12, 19, 13, 2, 19, 57, 3862 }, // k
{ 3, 19, 6, 2, 19, 15, 3919 }, // l
{ 20, 14, 23, 2, 14, 70, 3934 }, // m
{ 12, 14, 15, 2, 14, 42, 4004 }, // n
{ 13, 15, 15, 1, 14, 49, 4046 }, // o
{ 12, 20, 15, 2, 14, 60, 4095 }, // p
{ 13, 20, 15, 1, 14, 65, 4155 }, // q
{ 8, 14, 10, 2, 14, 28, 4220 }, // r
{ 10, 15, 12, 1, 14, 38, 4248 }, // s
{ 9, 18, 9, 0, 17, 41, 4286 }, // t
{ 13, 15, 15, 1, 14, 49, 4327 }, // u
{ 13, 14, 13, 0, 14, 46, 4376 }, // v
{ 20, 14, 20, 0, 14, 70, 4422 }, // w
{ 13, 14, 13, 0, 14, 46, 4492 }, // x
{ 13, 20, 13, 0, 14, 65, 4538 }, // y
{ 11, 14, 12, 0, 14, 39, 4603 }, // z
{ 9, 22, 10, 0, 18, 50, 4642 }, // {
{ 3, 26, 14, 5, 19, 20, 4692 }, // |
{ 9, 22, 10, 0, 18, 50, 4712 }, // }
{ 13, 4, 14, 1, 11, 13, 4762 }, // ~
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
{ 0, 0, 7, 0, 0, 0, 0 }, // U+00A0
{ 4, 19, 7, 1, 14, 19, 0 }, // U+00A1
{ 11, 20, 14, 2, 19, 55, 19 }, // U+00A2
{ 14, 19, 14, 0, 19, 67, 74 }, // U+00A3
{ 12, 12, 14, 1, 15, 36, 141 }, // U+00A4
{ 14, 18, 14, 0, 18, 63, 177 }, // U+00A5
{ 3, 26, 14, 5, 19, 20, 240 }, // U+00A6
{ 11, 21, 13, 1, 20, 58, 260 }, // U+00A7
{ 8, 4, 15, 3, 19, 8, 318 }, // U+00A8
{ 19, 20, 21, 1, 19, 95, 326 }, // U+00A9
{ 8, 10, 9, 0, 19, 20, 421 }, // U+00AA
{ 11, 11, 13, 1, 12, 31, 441 }, // U+00AB
{ 12, 7, 14, 1, 10, 21, 472 }, // U+00AC
{ 7, 3, 8, 1, 8, 6, 493 }, // U+00AD
{ 19, 20, 21, 1, 19, 95, 499 }, // U+00AE
{ 14, 2, 13, -1, 21, 7, 594 }, // U+00AF
{ 9, 9, 11, 1, 19, 21, 601 }, // U+00B0
{ 13, 15, 14, 1, 15, 49, 622 }, // U+00B1
{ 8, 12, 9, 0, 22, 24, 671 }, // U+00B2
{ 9, 12, 9, 0, 22, 27, 695 }, // U+00B3
{ 6, 5, 7, 1, 20, 8, 722 }, // U+00B4
{ 12, 20, 16, 2, 14, 60, 730 }, // U+00B5
{ 13, 23, 16, 1, 19, 75, 790 }, // U+00B6
{ 4, 5, 7, 1, 11, 5, 865 }, // U+00B7
{ 6, 6, 6, 0, 0, 9, 870 }, // U+00B8
{ 6, 12, 9, 0, 22, 18, 879 }, // U+00B9
{ 9, 10, 9, 0, 19, 23, 897 }, // U+00BA
{ 12, 11, 13, 0, 12, 33, 920 }, // U+00BB
{ 19, 18, 19, 0, 18, 86, 953 }, // U+00BC
{ 19, 18, 19, 0, 18, 86, 1039 }, // U+00BD
{ 20, 19, 20, 0, 19, 95, 1125 }, // U+00BE
{ 11, 19, 11, 0, 14, 53, 1220 }, // U+00BF
{ 16, 24, 16, 0, 24, 96, 1273 }, // U+00C0
{ 16, 24, 16, 0, 24, 96, 1369 }, // U+00C1
{ 16, 24, 16, 0, 24, 96, 1465 }, // U+00C2
{ 16, 23, 16, 0, 23, 92, 1561 }, // U+00C3
{ 16, 23, 16, 0, 23, 92, 1653 }, // U+00C4
{ 16, 23, 16, 0, 23, 92, 1745 }, // U+00C5
{ 22, 18, 22, -1, 18, 99, 1837 }, // U+00C6
{ 15, 25, 16, 1, 19, 94, 1936 }, // U+00C7
{ 11, 24, 14, 2, 24, 66, 2030 }, // U+00C8
{ 11, 24, 14, 2, 24, 66, 2096 }, // U+00C9
{ 11, 24, 14, 2, 24, 66, 2162 }, // U+00CA
{ 11, 23, 14, 2, 23, 64, 2228 }, // U+00CB
{ 7, 24, 8, 1, 24, 42, 2292 }, // U+00CC
{ 7, 24, 8, 1, 24, 42, 2334 }, // U+00CD
{ 9, 24, 8, 0, 24, 54, 2376 }, // U+00CE
{ 8, 23, 8, 0, 23, 46, 2430 }, // U+00CF
{ 17, 18, 18, 0, 18, 77, 2476 }, // U+00D0
{ 15, 23, 19, 2, 23, 87, 2553 }, // U+00D1
{ 17, 25, 20, 1, 24, 107, 2640 }, // U+00D2
{ 17, 25, 20, 1, 24, 107, 2747 }, // U+00D3
{ 17, 25, 20, 1, 24, 107, 2854 }, // U+00D4
{ 17, 24, 20, 1, 23, 102, 2961 }, // U+00D5
{ 17, 24, 20, 1, 23, 102, 3063 }, // U+00D6
{ 12, 12, 14, 1, 15, 36, 3165 }, // U+00D7
{ 17, 20, 20, 1, 19, 85, 3201 }, // U+00D8
{ 14, 25, 18, 2, 24, 88, 3286 }, // U+00D9
{ 14, 25, 18, 2, 24, 88, 3374 }, // U+00DA
{ 14, 25, 18, 2, 24, 88, 3462 }, // U+00DB
{ 14, 24, 18, 2, 23, 84, 3550 }, // U+00DC
{ 15, 24, 14, 0, 24, 90, 3634 }, // U+00DD
{ 12, 18, 15, 2, 18, 54, 3724 }, // U+00DE
{ 13, 21, 16, 2, 20, 69, 3778 }, // U+00DF
{ 11, 21, 14, 1, 20, 58, 3847 }, // U+00E0
{ 11, 21, 14, 1, 20, 58, 3905 }, // U+00E1
{ 11, 21, 14, 1, 20, 58, 3963 }, // U+00E2
{ 11, 20, 14, 1, 19, 55, 4021 }, // U+00E3
{ 11, 20, 14, 1, 19, 55, 4076 }, // U+00E4
{ 11, 22, 14, 1, 21, 61, 4131 }, // U+00E5
{ 20, 15, 22, 1, 14, 75, 4192 }, // U+00E6
{ 11, 20, 12, 1, 14, 55, 4267 }, // U+00E7
{ 12, 21, 14, 1, 20, 63, 4322 }, // U+00E8
{ 12, 21, 14, 1, 20, 63, 4385 }, // U+00E9
{ 12, 21, 14, 1, 20, 63, 4448 }, // U+00EA
{ 12, 20, 14, 1, 19, 60, 4511 }, // U+00EB
{ 6, 20, 6, -1, 20, 30, 4571 }, // U+00EC
{ 6, 20, 6, 1, 20, 30, 4601 }, // U+00ED
{ 9, 20, 6, -1, 20, 45, 4631 }, // U+00EE
{ 8, 19, 6, -1, 19, 38, 4676 }, // U+00EF
{ 13, 21, 15, 1, 20, 69, 4714 }, // U+00F0
{ 12, 19, 15, 2, 19, 57, 4783 }, // U+00F1
{ 13, 21, 15, 1, 20, 69, 4840 }, // U+00F2
{ 13, 21, 15, 1, 20, 69, 4909 }, // U+00F3
{ 13, 21, 15, 1, 20, 69, 4978 }, // U+00F4
{ 13, 20, 15, 1, 19, 65, 5047 }, // U+00F5
{ 13, 20, 15, 1, 19, 65, 5112 }, // U+00F6
{ 13, 12, 14, 1, 15, 39, 5177 }, // U+00F7
{ 13, 16, 15, 1, 15, 52, 5216 }, // U+00F8
{ 13, 21, 15, 1, 20, 69, 5268 }, // U+00F9
{ 13, 21, 15, 1, 20, 69, 5337 }, // U+00FA
{ 13, 21, 15, 1, 20, 69, 5406 }, // U+00FB
{ 13, 20, 15, 1, 19, 65, 5475 }, // U+00FC
{ 13, 26, 13, 0, 20, 85, 5540 }, // U+00FD
{ 12, 25, 15, 2, 19, 75, 5625 }, // U+00FE
{ 13, 25, 13, 0, 19, 82, 5700 }, // U+00FF
{ 16, 21, 16, 0, 21, 84, 0 }, // U+0100
{ 11, 18, 14, 1, 17, 50, 84 }, // U+0101
{ 16, 23, 16, 0, 23, 92, 134 }, // U+0102
{ 11, 20, 14, 1, 19, 55, 226 }, // U+0103
{ 16, 24, 16, 0, 18, 96, 281 }, // U+0104
{ 12, 20, 14, 1, 14, 60, 377 }, // U+0105
{ 15, 25, 16, 1, 24, 94, 437 }, // U+0106
{ 11, 21, 12, 1, 20, 58, 531 }, // U+0107
{ 15, 25, 16, 1, 24, 94, 589 }, // U+0108
{ 11, 21, 12, 1, 20, 58, 683 }, // U+0109
{ 15, 24, 16, 1, 23, 90, 741 }, // U+010A
{ 11, 20, 12, 1, 19, 55, 831 }, // U+010B
{ 15, 25, 16, 1, 24, 94, 886 }, // U+010C
{ 11, 21, 12, 1, 20, 58, 980 }, // U+010D
{ 15, 24, 18, 2, 24, 90, 1038 }, // U+010E
{ 17, 20, 15, 1, 19, 85, 1128 }, // U+010F
{ 17, 18, 18, 0, 18, 77, 1213 }, // U+0110
{ 15, 20, 15, 1, 19, 75, 1290 }, // U+0111
{ 11, 21, 14, 2, 21, 58, 1365 }, // U+0112
{ 12, 18, 14, 1, 17, 54, 1423 }, // U+0113
{ 11, 23, 14, 2, 23, 64, 1477 }, // U+0114
{ 12, 20, 14, 1, 19, 60, 1541 }, // U+0115
{ 11, 23, 14, 2, 23, 64, 1601 }, // U+0116
{ 12, 20, 14, 1, 19, 60, 1665 }, // U+0117
{ 11, 24, 14, 2, 18, 66, 1725 }, // U+0118
{ 12, 20, 14, 1, 14, 60, 1791 }, // U+0119
{ 11, 24, 14, 2, 24, 66, 1851 }, // U+011A
{ 12, 21, 14, 1, 20, 63, 1917 }, // U+011B
{ 16, 25, 18, 1, 24, 100, 1980 }, // U+011C
{ 13, 26, 15, 1, 20, 85, 2080 }, // U+011D
{ 16, 24, 18, 1, 23, 96, 2165 }, // U+011E
{ 13, 25, 15, 1, 19, 82, 2261 }, // U+011F
{ 16, 24, 18, 1, 23, 96, 2343 }, // U+0120
{ 13, 25, 15, 1, 19, 82, 2439 }, // U+0121
{ 16, 25, 18, 1, 19, 100, 2521 }, // U+0122
{ 13, 26, 15, 1, 20, 85, 2621 }, // U+0123
{ 15, 24, 19, 2, 24, 90, 2706 }, // U+0124
{ 15, 26, 15, -1, 26, 98, 2796 }, // U+0125
{ 19, 18, 19, 0, 18, 86, 2894 }, // U+0126
{ 14, 19, 15, 0, 19, 67, 2980 }, // U+0127
{ 10, 23, 8, -1, 23, 58, 3047 }, // U+0128
{ 10, 19, 6, -2, 19, 48, 3105 }, // U+0129
{ 8, 21, 8, 0, 21, 42, 3153 }, // U+012A
{ 8, 17, 6, -1, 17, 34, 3195 }, // U+012B
{ 9, 23, 8, 0, 23, 52, 3229 }, // U+012C
{ 9, 19, 6, -1, 19, 43, 3281 }, // U+012D
{ 7, 24, 8, 1, 18, 42, 3324 }, // U+012E
{ 5, 25, 6, 0, 19, 32, 3366 }, // U+012F
{ 7, 23, 8, 1, 23, 41, 3398 }, // U+0130
{ 3, 14, 6, 2, 14, 11, 3439 }, // U+0131
{ 13, 23, 15, 1, 18, 75, 3450 }, // U+0132
{ 10, 25, 13, 1, 19, 63, 3525 }, // U+0133
{ 10, 29, 7, -2, 24, 73, 3588 }, // U+0134
{ 10, 26, 6, -2, 20, 65, 3661 }, // U+0135
{ 14, 24, 15, 2, 18, 84, 3726 }, // U+0136
{ 12, 25, 13, 2, 19, 75, 3810 }, // U+0137
{ 12, 14, 13, 2, 14, 42, 3885 }, // U+0138
{ 11, 24, 13, 2, 24, 66, 3927 }, // U+0139
{ 6, 26, 6, 1, 26, 39, 3993 }, // U+013A
{ 11, 24, 13, 2, 18, 66, 4032 }, // U+013B
{ 4, 25, 6, 1, 19, 25, 4098 }, // U+013C
{ 11, 18, 13, 2, 18, 50, 4123 }, // U+013D
{ 7, 19, 6, 2, 19, 34, 4173 }, // U+013E
{ 11, 18, 13, 2, 18, 50, 4207 }, // U+013F
{ 6, 19, 7, 2, 19, 29, 4257 }, // U+0140
{ 13, 18, 13, 0, 18, 59, 4286 }, // U+0141
{ 8, 19, 6, -1, 19, 38, 4345 }, // U+0142
{ 15, 24, 19, 2, 24, 90, 4383 }, // U+0143
{ 12, 20, 15, 2, 20, 60, 4473 }, // U+0144
{ 15, 24, 19, 2, 18, 90, 4533 }, // U+0145
{ 12, 20, 15, 2, 14, 60, 4623 }, // U+0146
{ 15, 24, 19, 2, 24, 90, 4683 }, // U+0147
{ 12, 20, 15, 2, 20, 60, 4773 }, // U+0148
{ 16, 18, 17, 0, 18, 72, 4833 }, // U+0149
{ 15, 23, 19, 2, 18, 87, 4905 }, // U+014A
{ 12, 20, 15, 2, 14, 60, 4992 }, // U+014B
{ 17, 22, 20, 1, 21, 94, 5052 }, // U+014C
{ 13, 18, 15, 1, 17, 59, 5146 }, // U+014D
{ 17, 24, 20, 1, 23, 102, 5205 }, // U+014E
{ 13, 20, 15, 1, 19, 65, 5307 }, // U+014F
{ 17, 25, 20, 1, 24, 107, 5372 }, // U+0150
{ 13, 21, 15, 1, 20, 69, 5479 }, // U+0151
{ 21, 20, 23, 1, 19, 105, 5548 }, // U+0152
{ 22, 15, 24, 1, 14, 83, 5653 }, // U+0153
{ 14, 24, 16, 2, 24, 84, 5736 }, // U+0154
{ 8, 20, 10, 2, 20, 40, 5820 }, // U+0155
{ 14, 24, 16, 2, 18, 84, 5860 }, // U+0156
{ 9, 20, 10, 1, 14, 45, 5944 }, // U+0157
{ 14, 24, 16, 2, 24, 84, 5989 }, // U+0158
{ 10, 20, 10, 1, 20, 50, 6073 }, // U+0159
{ 12, 25, 14, 1, 24, 75, 6123 }, // U+015A
{ 10, 21, 12, 1, 20, 53, 6198 }, // U+015B
{ 12, 25, 14, 1, 24, 75, 6251 }, // U+015C
{ 10, 21, 12, 1, 20, 53, 6326 }, // U+015D
{ 12, 25, 14, 1, 19, 75, 6379 }, // U+015E
{ 10, 20, 12, 1, 14, 50, 6454 }, // U+015F
{ 12, 25, 14, 1, 24, 75, 6504 }, // U+0160
{ 10, 21, 12, 1, 20, 53, 6579 }, // U+0161
{ 14, 24, 14, 0, 18, 84, 6632 }, // U+0162
{ 9, 23, 9, 0, 17, 52, 6716 }, // U+0163
{ 14, 24, 14, 0, 24, 84, 6768 }, // U+0164
{ 12, 20, 9, 0, 19, 60, 6852 }, // U+0165
{ 14, 18, 14, 0, 18, 63, 6912 }, // U+0166
{ 9, 18, 9, 0, 17, 41, 6975 }, // U+0167
{ 14, 24, 18, 2, 23, 84, 7016 }, // U+0168
{ 13, 20, 15, 1, 19, 65, 7100 }, // U+0169
{ 14, 22, 18, 2, 21, 77, 7165 }, // U+016A
{ 13, 18, 15, 1, 17, 59, 7242 }, // U+016B
{ 14, 24, 18, 2, 23, 84, 7301 }, // U+016C
{ 13, 20, 15, 1, 19, 65, 7385 }, // U+016D
{ 14, 26, 18, 2, 25, 91, 7450 }, // U+016E
{ 13, 22, 15, 1, 21, 72, 7541 }, // U+016F
{ 14, 25, 18, 2, 24, 88, 7613 }, // U+0170
{ 13, 21, 15, 1, 20, 69, 7701 }, // U+0171
{ 14, 24, 18, 2, 18, 84, 7770 }, // U+0172
{ 13, 20, 15, 1, 14, 65, 7854 }, // U+0173
{ 23, 24, 23, 0, 24, 138, 7919 }, // U+0174
{ 20, 20, 20, 0, 20, 100, 8057 }, // U+0175
{ 15, 24, 14, 0, 24, 90, 8157 }, // U+0176
{ 13, 26, 13, 0, 20, 85, 8247 }, // U+0177
{ 15, 23, 14, 0, 23, 87, 8332 }, // U+0178
{ 14, 24, 14, 0, 24, 84, 8419 }, // U+0179
{ 11, 20, 12, 0, 20, 55, 8503 }, // U+017A
{ 14, 23, 14, 0, 23, 81, 8558 }, // U+017B
{ 11, 19, 12, 0, 19, 53, 8639 }, // U+017C
{ 14, 24, 14, 0, 24, 84, 8692 }, // U+017D
{ 11, 20, 12, 0, 20, 55, 8776 }, // U+017E
{ 8, 20, 8, 2, 20, 40, 8831 }, // U+017F
{ 6, 5, 0, -13, 20, 8, 0 }, // U+0300
{ 6, 5, 0, -9, 20, 8, 8 }, // U+0301
{ 10, 5, 0, -5, 20, 13, 16 }, // U+0302
{ 10, 4, 0, -13, 19, 10, 29 }, // U+0303
{ 8, 2, 0, -4, 17, 4, 39 }, // U+0304
{ 12, 3, 0, -6, 22, 9, 43 }, // U+0305
{ 8, 4, 0, -4, 19, 8, 52 }, // U+0306
{ 4, 4, 0, -2, 19, 4, 60 }, // U+0307
{ 8, 4, 0, -4, 19, 8, 64 }, // U+0308
{ 6, 7, 0, -10, 21, 11, 72 }, // U+0309
{ 6, 6, 0, -3, 21, 9, 83 }, // U+030A
{ 10, 5, 0, -4, 20, 13, 92 }, // U+030B
{ 10, 5, 0, -5, 20, 13, 105 }, // U+030C
{ 2, 5, 0, -1, 19, 3, 118 }, // U+030D
{ 6, 5, 0, -3, 19, 8, 121 }, // U+030E
{ 10, 5, 0, -13, 20, 13, 129 }, // U+030F
{ 8, 7, 0, -4, 22, 14, 142 }, // U+0310
{ 8, 4, 0, -4, 19, 8, 156 }, // U+0311
{ 4, 7, 0, -2, 18, 7, 164 }, // U+0312
{ 4, 7, 0, -2, 18, 7, 171 }, // U+0313
{ 4, 7, 0, -2, 18, 7, 178 }, // U+0314
{ 4, 7, 0, -2, 18, 7, 185 }, // U+0315
{ 6, 5, 0, -3, 0, 8, 192 }, // U+0316
{ 6, 5, 0, -3, 0, 8, 200 }, // U+0317
{ 6, 6, 0, -3, 0, 9, 208 }, // U+0318
{ 6, 6, 0, -3, 0, 9, 217 }, // U+0319
{ 7, 6, 8, 0, 19, 11, 226 }, // U+031A
{ 6, 6, 0, -3, 19, 9, 237 }, // U+031B
{ 4, 6, 0, -2, 0, 6, 246 }, // U+031C
{ 6, 5, 0, -3, -1, 8, 252 }, // U+031D
{ 6, 5, 0, -3, -1, 8, 260 }, // U+031E
{ 6, 6, 0, -3, 0, 9, 268 }, // U+031F
{ 6, 3, 0, -3, -2, 5, 277 }, // U+0320
{ 5, 8, 0, -5, 2, 10, 282 }, // U+0321
{ 5, 8, 0, 0, 2, 10, 292 }, // U+0322
{ 3, 4, 0, -9, -1, 3, 302 }, // U+0323
{ 8, 4, 0, -4, -1, 8, 305 }, // U+0324
{ 6, 6, 0, -3, 0, 9, 313 }, // U+0325
{ 4, 5, 0, -2, -1, 5, 322 }, // U+0326
{ 6, 6, 0, -3, 0, 9, 327 }, // U+0327
{ 6, 7, 0, -3, 1, 11, 336 }, // U+0328
{ 2, 5, 0, -1, -1, 3, 347 }, // U+0329
{ 10, 5, 0, -5, -1, 13, 350 }, // U+032A
{ 10, 4, 0, -5, -1, 10, 363 }, // U+032B
{ 10, 5, 0, -5, 0, 13, 373 }, // U+032C
{ 10, 5, 0, -5, 0, 13, 386 }, // U+032D
{ 8, 4, 0, -4, -1, 8, 399 }, // U+032E
{ 8, 4, 0, -4, -1, 8, 407 }, // U+032F
{ 10, 4, 0, -5, -1, 10, 415 }, // U+0330
{ 8, 2, 0, -4, -2, 4, 425 }, // U+0331
{ 12, 2, 0, -6, -2, 6, 429 }, // U+0332
{ 12, 6, 0, -6, 0, 18, 435 }, // U+0333
{ 10, 4, 0, -5, 9, 10, 453 }, // U+0334
{ 12, 3, 0, -6, 9, 9, 463 }, // U+0335
{ 18, 2, 0, -9, 8, 9, 472 }, // U+0336
{ 8, 6, 0, -4, 10, 12, 481 }, // U+0337
{ 10, 21, 0, -5, 19, 53, 493 }, // U+0338
{ 4, 6, 0, -2, 0, 6, 546 }, // U+0339
{ 10, 5, 0, -5, -1, 13, 552 }, // U+033A
{ 10, 6, 0, -5, 0, 15, 565 }, // U+033B
{ 10, 4, 0, -5, -1, 10, 580 }, // U+033C
{ 6, 6, 0, -3, 20, 9, 590 }, // U+033D
{ 4, 8, 0, -2, 22, 8, 599 }, // U+033E
{ 12, 6, 0, -6, 25, 18, 607 }, // U+033F
{ 6, 5, 0, -4, 20, 8, 625 }, // U+0340
{ 6, 5, 0, -1, 20, 8, 633 }, // U+0341
{ 10, 4, 0, -5, 19, 10, 641 }, // U+0342
{ 4, 5, 0, -2, 20, 5, 651 }, // U+0343
{ 9, 5, 0, -4, 20, 12, 656 }, // U+0344
{ 4, 4, 0, -1, -2, 4, 668 }, // U+0345
{ 12, 6, 0, -6, 20, 18, 672 }, // U+0346
{ 12, 6, 0, -6, 0, 18, 690 }, // U+0347
{ 6, 5, 0, -3, -1, 8, 708 }, // U+0348
{ 6, 5, 0, -3, -1, 8, 716 }, // U+0349
{ 10, 6, 0, -5, 20, 15, 724 }, // U+034A
{ 10, 10, 0, -5, 24, 25, 739 }, // U+034B
{ 10, 7, 0, -5, 22, 18, 764 }, // U+034C
{ 10, 6, 0, -5, 0, 15, 782 }, // U+034D
{ 6, 6, 0, -3, 0, 9, 797 }, // U+034E
{ 18, 18, 0, -9, 18, 81, 806 }, // U+034F
{ 5, 6, 0, -3, 20, 8, 887 }, // U+0350
{ 4, 6, 0, -2, 21, 6, 895 }, // U+0351
{ 8, 6, 0, -4, 21, 12, 901 }, // U+0352
{ 6, 6, 0, -3, 0, 9, 913 }, // U+0353
{ 5, 5, 0, -3, -1, 7, 922 }, // U+0354
{ 5, 5, 0, -3, -1, 7, 929 }, // U+0355
{ 10, 5, 0, -5, -1, 13, 936 }, // U+0356
{ 4, 6, 0, -2, 21, 6, 949 }, // U+0357
{ 3, 4, 0, 3, 19, 3, 955 }, // U+0358
{ 6, 6, 0, -3, 0, 9, 958 }, // U+0359
{ 10, 6, 0, -5, 0, 15, 967 }, // U+035A
{ 6, 6, 0, -3, 20, 9, 982 }, // U+035B
{ 20, 5, 0, -10, -1, 25, 991 }, // U+035C
{ 20, 5, 0, -10, 19, 25, 1016 }, // U+035D
{ 16, 2, 0, -8, 17, 8, 1041 }, // U+035E
{ 16, 2, 0, -8, -2, 8, 1049 }, // U+035F
{ 20, 4, 0, -10, 19, 20, 1057 }, // U+0360
{ 20, 6, 0, -10, 22, 30, 1077 }, // U+0361
{ 21, 6, 0, -10, 0, 32, 1107 }, // U+0362
{ 6, 6, 0, -3, 21, 9, 1139 }, // U+0363
{ 6, 6, 0, -3, 21, 9, 1148 }, // U+0364
{ 2, 8, 0, -1, 23, 4, 1157 }, // U+0365
{ 7, 6, 0, -3, 21, 11, 1161 }, // U+0366
{ 6, 6, 0, -3, 21, 9, 1172 }, // U+0367
{ 5, 6, 0, -2, 21, 8, 1181 }, // U+0368
{ 6, 9, 0, -3, 24, 14, 1189 }, // U+0369
{ 6, 9, 0, -3, 24, 14, 1203 }, // U+036A
{ 10, 6, 0, -5, 21, 15, 1217 }, // U+036B
{ 5, 6, 0, -2, 21, 8, 1232 }, // U+036C
{ 5, 8, 0, -2, 23, 10, 1240 }, // U+036D
{ 7, 6, 0, -3, 21, 11, 1250 }, // U+036E
{ 7, 6, 0, -3, 21, 11, 1261 }, // U+036F
{ 11, 24, 14, 2, 24, 66, 0 }, // U+0400
{ 11, 23, 14, 2, 23, 64, 66 }, // U+0401
{ 17, 19, 18, 0, 18, 81, 130 }, // U+0402
{ 11, 24, 13, 2, 24, 66, 211 }, // U+0403
{ 14, 20, 16, 1, 19, 70, 277 }, // U+0404
{ 12, 20, 14, 1, 19, 60, 347 }, // U+0405
{ 3, 18, 7, 2, 18, 14, 407 }, // U+0406
{ 7, 23, 7, 0, 23, 41, 421 }, // U+0407
{ 7, 23, 7, -2, 18, 41, 462 }, // U+0408
{ 24, 19, 25, 0, 18, 114, 503 }, // U+0409
{ 23, 18, 26, 2, 18, 104, 617 }, // U+040A
{ 17, 18, 18, 0, 18, 77, 721 }, // U+040B
{ 14, 24, 16, 2, 24, 84, 798 }, // U+040C
{ 15, 24, 19, 2, 24, 90, 882 }, // U+040D
{ 16, 24, 15, 0, 23, 96, 972 }, // U+040E
{ 14, 22, 18, 2, 18, 77, 1068 }, // U+040F
{ 16, 18, 16, 0, 18, 72, 1145 }, // U+0410
{ 13, 18, 15, 2, 18, 59, 1217 }, // U+0411
{ 13, 18, 16, 2, 18, 59, 1276 }, // U+0412
{ 11, 18, 13, 2, 18, 50, 1335 }, // U+0413
{ 18, 22, 18, 0, 18, 99, 1385 }, // U+0414
{ 11, 18, 14, 2, 18, 50, 1484 }, // U+0415
{ 23, 18, 23, 0, 18, 104, 1534 }, // U+0416
{ 13, 20, 14, 0, 19, 65, 1638 }, // U+0417
{ 15, 18, 19, 2, 18, 68, 1703 }, // U+0418
{ 15, 23, 19, 2, 23, 87, 1771 }, // U+0419
{ 14, 18, 16, 2, 18, 63, 1858 }, // U+041A
{ 16, 19, 17, 0, 18, 76, 1921 }, // U+041B
{ 19, 18, 23, 2, 18, 86, 1997 }, // U+041C
{ 15, 18, 19, 2, 18, 68, 2083 }, // U+041D
{ 17, 20, 19, 1, 19, 85, 2151 }, // U+041E
{ 14, 18, 18, 2, 18, 63, 2236 }, // U+041F
{ 12, 18, 15, 2, 18, 54, 2299 }, // U+0420
{ 14, 20, 16, 1, 19, 70, 2353 }, // U+0421
{ 14, 18, 14, 0, 18, 63, 2423 }, // U+0422
{ 16, 19, 15, 0, 18, 76, 2486 }, // U+0423
{ 19, 20, 20, 1, 19, 95, 2562 }, // U+0424
{ 15, 18, 15, 0, 18, 68, 2657 }, // U+0425
{ 17, 22, 19, 2, 18, 94, 2725 }, // U+0426
{ 14, 18, 17, 1, 18, 63, 2819 }, // U+0427
{ 22, 18, 26, 2, 18, 99, 2882 }, // U+0428
{ 24, 22, 26, 2, 18, 132, 2981 }, // U+0429
{ 16, 18, 17, 0, 18, 72, 3113 }, // U+042A
{ 17, 18, 21, 2, 18, 77, 3185 }, // U+042B
{ 12, 18, 15, 2, 18, 54, 3262 }, // U+042C
{ 14, 20, 16, 1, 19, 70, 3316 }, // U+042D
{ 22, 20, 25, 2, 19, 110, 3386 }, // U+042E
{ 14, 18, 16, 0, 18, 63, 3496 }, // U+042F
{ 11, 15, 14, 1, 14, 42, 3559 }, // U+0430
{ 13, 21, 15, 1, 20, 69, 3601 }, // U+0431
{ 11, 14, 14, 2, 14, 39, 3670 }, // U+0432
{ 9, 14, 11, 2, 14, 32, 3709 }, // U+0433
{ 15, 18, 15, 0, 14, 68, 3741 }, // U+0434
{ 12, 15, 14, 1, 14, 45, 3809 }, // U+0435
{ 19, 14, 19, 0, 14, 67, 3854 }, // U+0436
{ 12, 15, 12, 0, 14, 45, 3921 }, // U+0437
{ 12, 14, 16, 2, 14, 42, 3966 }, // U+0438
{ 12, 19, 16, 2, 19, 57, 4008 }, // U+0439
{ 12, 14, 13, 2, 14, 42, 4065 }, // U+043A
{ 13, 15, 15, 0, 14, 49, 4107 }, // U+043B
{ 16, 14, 19, 2, 14, 56, 4156 }, // U+043C
{ 12, 14, 15, 2, 14, 42, 4212 }, // U+043D
{ 13, 15, 15, 1, 14, 49, 4254 }, // U+043E
{ 12, 14, 15, 2, 14, 42, 4303 }, // U+043F
{ 12, 20, 15, 2, 14, 60, 4345 }, // U+0440
{ 11, 15, 12, 1, 14, 42, 4405 }, // U+0441
{ 12, 14, 12, 0, 14, 42, 4447 }, // U+0442
{ 13, 20, 13, 0, 14, 65, 4489 }, // U+0443
{ 17, 25, 18, 1, 19, 107, 4554 }, // U+0444
{ 13, 14, 13, 0, 14, 46, 4661 }, // U+0445
{ 14, 18, 15, 2, 14, 63, 4707 }, // U+0446
{ 12, 14, 15, 1, 14, 42, 4770 }, // U+0447
{ 19, 14, 22, 2, 14, 67, 4812 }, // U+0448
{ 21, 18, 22, 2, 14, 95, 4879 }, // U+0449
{ 15, 14, 16, 0, 14, 53, 4974 }, // U+044A
{ 15, 14, 19, 2, 14, 53, 5027 }, // U+044B
{ 11, 14, 14, 2, 14, 39, 5080 }, // U+044C
{ 11, 15, 12, 1, 14, 42, 5119 }, // U+044D
{ 17, 15, 20, 2, 14, 64, 5161 }, // U+044E
{ 13, 14, 14, 0, 14, 46, 5225 }, // U+044F
{ 12, 21, 14, 1, 20, 63, 5271 }, // U+0450
{ 12, 20, 14, 1, 19, 60, 5334 }, // U+0451
{ 14, 25, 15, 0, 19, 88, 5394 }, // U+0452
{ 9, 20, 11, 2, 20, 45, 5482 }, // U+0453
{ 11, 15, 12, 1, 14, 42, 5527 }, // U+0454
{ 10, 15, 12, 1, 14, 38, 5569 }, // U+0455
{ 4, 19, 6, 1, 19, 19, 5607 }, // U+0456
{ 6, 19, 6, 0, 19, 29, 5626 }, // U+0457
{ 7, 25, 6, -2, 19, 44, 5655 }, // U+0458
{ 21, 15, 21, 0, 14, 79, 5699 }, // U+0459
{ 20, 14, 22, 2, 14, 70, 5778 }, // U+045A
{ 14, 19, 16, 0, 19, 67, 5848 }, // U+045B
{ 12, 20, 13, 2, 20, 60, 5915 }, // U+045C
{ 12, 20, 16, 2, 20, 60, 5975 }, // U+045D
{ 13, 25, 13, 0, 19, 82, 6035 }, // U+045E
{ 12, 18, 15, 2, 14, 54, 6117 }, // U+045F
{ 23, 19, 23, 0, 18, 110, 6171 }, // U+0460
{ 20, 14, 20, 0, 14, 70, 6281 }, // U+0461
{ 16, 18, 17, 0, 18, 72, 6351 }, // U+0462
{ 15, 17, 16, 0, 17, 64, 6423 }, // U+0463
{ 21, 20, 23, 2, 19, 105, 6487 }, // U+0464
{ 16, 15, 19, 2, 14, 60, 6592 }, // U+0465
{ 18, 18, 17, 0, 18, 81, 6652 }, // U+0466
{ 15, 14, 14, 0, 14, 53, 6733 }, // U+0467
{ 22, 18, 23, 2, 18, 99, 6786 }, // U+0468
{ 18, 14, 20, 2, 14, 63, 6885 }, // U+0469
{ 18, 18, 18, 0, 18, 81, 6948 }, // U+046A
{ 16, 14, 16, 0, 14, 56, 7029 }, // U+046B
{ 23, 18, 25, 2, 18, 104, 7085 }, // U+046C
{ 20, 14, 21, 2, 14, 70, 7189 }, // U+046D
{ 14, 28, 15, 0, 22, 98, 7259 }, // U+046E
{ 12, 22, 12, 0, 17, 66, 7357 }, // U+046F
{ 17, 18, 20, 2, 18, 77, 7423 }, // U+0470
{ 16, 25, 19, 1, 19, 100, 7500 }, // U+0471
{ 17, 20, 20, 1, 19, 85, 7600 }, // U+0472
{ 13, 15, 15, 1, 14, 49, 7685 }, // U+0473
{ 17, 18, 16, 0, 18, 77, 7734 }, // U+0474
{ 14, 14, 13, 0, 14, 49, 7811 }, // U+0475
{ 17, 24, 16, 0, 24, 102, 7860 }, // U+0476
{ 14, 20, 13, 0, 20, 70, 7962 }, // U+0477
{ 30, 25, 31, 1, 19, 188, 8032 }, // U+0478
{ 27, 20, 27, 1, 14, 135, 8220 }, // U+0479
{ 18, 22, 21, 1, 20, 99, 8355 }, // U+047A
{ 15, 17, 16, 1, 15, 64, 8454 }, // U+047B
{ 24, 27, 26, 1, 26, 162, 8518 }, // U+047C
{ 21, 24, 23, 1, 23, 126, 8680 }, // U+047D
{ 23, 24, 23, 0, 23, 138, 8806 }, // U+047E
{ 20, 18, 20, 0, 18, 90, 8944 }, // U+047F
{ 15, 25, 16, 1, 19, 94, 9034 }, // U+0480
{ 11, 20, 12, 1, 14, 55, 9128 }, // U+0481
{ 13, 17, 15, 1, 16, 56, 9183 }, // U+0482
{ 10, 4, 0, -12, 18, 10, 9239 }, // U+0483
{ 10, 4, 0, -12, 19, 10, 9249 }, // U+0484
{ 4, 5, 0, -9, 20, 5, 9259 }, // U+0485
{ 4, 5, 0, -9, 20, 5, 9264 }, // U+0486
{ 10, 4, 0, -5, 23, 10, 9269 }, // U+0487
{ 30, 27, 0, -15, 20, 203, 9279 }, // U+0488
{ 28, 28, 0, -14, 21, 196, 9482 }, // U+0489
{ 18, 29, 20, 2, 24, 131, 9678 }, // U+048A
{ 15, 24, 16, 2, 19, 90, 9809 }, // U+048B
{ 15, 18, 15, 0, 18, 68, 9899 }, // U+048C
{ 14, 19, 15, 0, 19, 67, 9967 }, // U+048D
{ 13, 18, 15, 2, 18, 59, 10034 }, // U+048E
{ 12, 20, 15, 2, 14, 60, 10093 }, // U+048F
{ 11, 22, 13, 2, 22, 61, 10153 }, // U+0490
{ 9, 18, 11, 2, 18, 41, 10214 }, // U+0491
{ 13, 18, 13, 0, 18, 59, 10255 }, // U+0492
{ 11, 14, 11, 0, 14, 39, 10314 }, // U+0493
{ 14, 25, 16, 2, 18, 88, 10353 }, // U+0494
{ 11, 21, 13, 2, 14, 58, 10441 }, // U+0495
{ 23, 23, 23, 0, 18, 133, 10499 }, // U+0496
{ 20, 19, 20, 0, 14, 95, 10632 }, // U+0497
{ 13, 25, 14, 0, 19, 82, 10727 }, // U+0498
{ 12, 20, 12, 0, 14, 60, 10809 }, // U+0499
{ 15, 23, 17, 2, 18, 87, 10869 }, // U+049A
{ 12, 19, 14, 2, 14, 57, 10956 }, // U+049B
{ 14, 18, 16, 2, 18, 63, 11013 }, // U+049C
{ 11, 14, 13, 2, 14, 39, 11076 }, // U+049D
{ 16, 18, 16, 0, 18, 72, 11115 }, // U+049E
{ 13, 19, 13, 0, 19, 62, 11187 }, // U+049F
{ 18, 18, 17, 0, 18, 81, 11249 }, // U+04A0
{ 16, 14, 16, 0, 14, 56, 11330 }, // U+04A1
{ 17, 23, 19, 2, 18, 98, 11386 }, // U+04A2
{ 14, 19, 16, 2, 14, 67, 11484 }, // U+04A3
{ 19, 18, 20, 2, 18, 86, 11551 }, // U+04A4
{ 17, 14, 18, 2, 14, 60, 11637 }, // U+04A5
{ 24, 25, 26, 2, 18, 150, 11697 }, // U+04A6
{ 19, 21, 22, 2, 14, 100, 11847 }, // U+04A7
{ 18, 21, 19, 1, 19, 95, 11947 }, // U+04A8
{ 15, 15, 16, 1, 14, 57, 12042 }, // U+04A9
{ 15, 25, 16, 1, 19, 94, 12099 }, // U+04AA
{ 11, 20, 12, 1, 14, 55, 12193 }, // U+04AB
{ 14, 23, 14, 0, 18, 81, 12248 }, // U+04AC
{ 12, 19, 12, 0, 14, 57, 12329 }, // U+04AD
{ 15, 18, 14, 0, 18, 68, 12386 }, // U+04AE
{ 13, 20, 13, 0, 14, 65, 12454 }, // U+04AF
{ 15, 18, 14, 0, 18, 68, 12519 }, // U+04B0
{ 13, 20, 13, 0, 14, 65, 12587 }, // U+04B1
{ 16, 23, 16, 0, 18, 92, 12652 }, // U+04B2
{ 14, 19, 14, 0, 14, 67, 12744 }, // U+04B3
{ 21, 23, 22, 0, 18, 121, 12811 }, // U+04B4
{ 18, 19, 18, 0, 14, 86, 12932 }, // U+04B5
{ 16, 23, 18, 2, 18, 92, 13018 }, // U+04B6
{ 15, 19, 16, 1, 14, 72, 13110 }, // U+04B7
{ 14, 18, 17, 2, 18, 63, 13182 }, // U+04B8
{ 12, 14, 15, 1, 14, 42, 13245 }, // U+04B9
{ 14, 18, 17, 2, 18, 63, 13287 }, // U+04BA
{ 12, 19, 15, 2, 19, 57, 13350 }, // U+04BB
{ 20, 20, 21, 0, 19, 100, 13407 }, // U+04BC
{ 16, 15, 17, 0, 14, 60, 13507 }, // U+04BD
{ 20, 24, 21, 0, 19, 120, 13567 }, // U+04BE
{ 16, 19, 17, 0, 14, 76, 13687 }, // U+04BF
{ 7, 18, 8, 1, 18, 32, 13763 }, // U+04C0
{ 23, 23, 23, 0, 23, 133, 13795 }, // U+04C1
{ 19, 19, 19, 0, 19, 91, 13928 }, // U+04C2
{ 15, 25, 17, 2, 18, 94, 14019 }, // U+04C3
{ 12, 21, 14, 2, 14, 63, 14113 }, // U+04C4
{ 18, 23, 18, 0, 18, 104, 14176 }, // U+04C5
{ 15, 19, 15, 0, 14, 72, 14280 }, // U+04C6
{ 15, 25, 18, 2, 18, 94, 14352 }, // U+04C7
{ 12, 21, 16, 2, 14, 63, 14446 }, // U+04C8
{ 17, 23, 19, 2, 18, 98, 14509 }, // U+04C9
{ 15, 19, 17, 2, 14, 72, 14607 }, // U+04CA
{ 14, 23, 17, 2, 18, 81, 14679 }, // U+04CB
{ 13, 19, 15, 1, 14, 62, 14760 }, // U+04CC
{ 21, 23, 23, 2, 18, 121, 14822 }, // U+04CD
{ 17, 19, 19, 2, 14, 81, 14943 }, // U+04CE
{ 7, 18, 8, 1, 18, 32, 15024 }, // U+04CF
{ 16, 23, 16, 0, 23, 92, 15056 }, // U+04D0
{ 11, 20, 14, 1, 19, 55, 15148 }, // U+04D1
{ 16, 23, 16, 0, 23, 92, 15203 }, // U+04D2
{ 11, 20, 14, 1, 19, 55, 15295 }, // U+04D3
{ 22, 18, 22, -1, 18, 99, 15350 }, // U+04D4
{ 20, 15, 22, 1, 14, 75, 15449 }, // U+04D5
{ 11, 23, 14, 2, 23, 64, 15524 }, // U+04D6
{ 12, 20, 14, 1, 19, 60, 15588 }, // U+04D7
{ 16, 20, 18, 1, 19, 80, 15648 }, // U+04D8
{ 12, 15, 14, 1, 14, 45, 15728 }, // U+04D9
{ 16, 24, 18, 1, 23, 96, 15773 }, // U+04DA
{ 12, 20, 14, 1, 19, 60, 15869 }, // U+04DB
{ 23, 23, 23, 0, 23, 133, 15929 }, // U+04DC
{ 19, 19, 19, 0, 19, 91, 16062 }, // U+04DD
{ 13, 24, 14, 0, 23, 78, 16153 }, // U+04DE
{ 12, 20, 12, 0, 19, 60, 16231 }, // U+04DF
{ 14, 19, 15, 0, 18, 67, 16291 }, // U+04E0
{ 12, 20, 12, 0, 14, 60, 16358 }, // U+04E1
{ 15, 21, 19, 2, 21, 79, 16418 }, // U+04E2
{ 12, 17, 16, 2, 17, 51, 16497 }, // U+04E3
{ 15, 23, 19, 2, 23, 87, 16548 }, // U+04E4
{ 12, 19, 16, 2, 19, 57, 16635 }, // U+04E5
{ 17, 24, 20, 1, 23, 102, 16692 }, // U+04E6
{ 13, 20, 15, 1, 19, 65, 16794 }, // U+04E7
{ 17, 20, 20, 1, 19, 85, 16859 }, // U+04E8
{ 13, 15, 15, 1, 14, 49, 16944 }, // U+04E9
{ 17, 24, 20, 1, 23, 102, 16993 }, // U+04EA
{ 13, 20, 15, 1, 19, 65, 17095 }, // U+04EB
{ 14, 24, 16, 1, 23, 84, 17160 }, // U+04EC
{ 11, 20, 12, 1, 19, 55, 17244 }, // U+04ED
{ 16, 22, 15, 0, 21, 88, 17299 }, // U+04EE
{ 13, 23, 13, 0, 17, 75, 17387 }, // U+04EF
{ 16, 24, 15, 0, 23, 96, 17462 }, // U+04F0
{ 13, 25, 13, 0, 19, 82, 17558 }, // U+04F1
{ 16, 25, 15, 0, 24, 100, 17640 }, // U+04F2
{ 13, 26, 13, 0, 20, 85, 17740 }, // U+04F3
{ 14, 23, 17, 1, 23, 81, 17825 }, // U+04F4
{ 12, 19, 15, 1, 19, 57, 17906 }, // U+04F5
{ 11, 23, 13, 2, 18, 64, 17963 }, // U+04F6
{ 9, 19, 11, 2, 14, 43, 18027 }, // U+04F7
{ 17, 23, 21, 2, 23, 98, 18070 }, // U+04F8
{ 15, 19, 19, 2, 19, 72, 18168 }, // U+04F9
{ 13, 23, 13, 0, 18, 75, 18240 }, // U+04FA
{ 11, 19, 11, 0, 14, 53, 18315 }, // U+04FB
{ 16, 23, 16, 0, 18, 92, 18368 }, // U+04FC
{ 14, 19, 14, 0, 14, 67, 18460 }, // U+04FD
{ 15, 18, 15, 0, 18, 68, 18527 }, // U+04FE
{ 13, 14, 13, 0, 14, 46, 18595 }, // U+04FF
{ 0, 0, 13, 0, 0, 0, 0 }, // U+2000
{ 0, 0, 25, 0, 0, 0, 0 }, // U+2001
{ 0, 0, 13, 0, 0, 0, 0 }, // U+2002
{ 0, 0, 25, 0, 0, 0, 0 }, // U+2003
{ 0, 0, 8, 0, 0, 0, 0 }, // U+2004
{ 0, 0, 6, 0, 0, 0, 0 }, // U+2005
{ 0, 0, 4, 0, 0, 0, 0 }, // U+2006
{ 0, 0, 14, 0, 0, 0, 0 }, // U+2007
{ 0, 0, 7, 0, 0, 0, 0 }, // U+2008
{ 0, 0, 4, 0, 0, 0, 0 }, // U+2009
{ 0, 0, 3, 0, 0, 0, 0 }, // U+200A
{ 0, 0, 0, 0, 0, 0, 0 }, // U+200B
{ 0, 0, 0, 0, 0, 0, 0 }, // U+200C
{ 0, 0, 0, 0, 0, 0, 0 }, // U+200D
{ 7, 22, 0, -1, 18, 39, 0 }, // U+200E
{ 7, 22, 0, -6, 18, 39, 39 }, // U+200F
{ 7, 3, 8, 1, 8, 6, 78 }, // U+2010
{ 7, 3, 8, 1, 8, 6, 84 }, // U+2011
{ 13, 2, 14, 1, 10, 7, 90 }, // U+2012
{ 11, 3, 13, 1, 8, 9, 97 }, // U+2013
{ 23, 3, 25, 1, 8, 18, 106 }, // U+2014
{ 23, 3, 25, 1, 8, 18, 124 }, // U+2015
{ 8, 26, 14, 3, 19, 52, 142 }, // U+2016
{ 12, 6, 10, -1, 0, 18, 194 }, // U+2017
{ 5, 7, 4, 0, 18, 9, 212 }, // U+2018
{ 5, 7, 4, 0, 18, 9, 221 }, // U+2019
{ 5, 7, 6, 0, 3, 9, 230 }, // U+201A
{ 5, 7, 4, 0, 18, 9, 239 }, // U+201B
{ 9, 7, 9, 0, 18, 16, 248 }, // U+201C
{ 9, 7, 9, 0, 18, 16, 264 }, // U+201D
{ 10, 7, 10, 0, 3, 18, 280 }, // U+201E
{ 9, 7, 9, 0, 18, 16, 298 }, // U+201F
{ 11, 19, 13, 1, 19, 53, 314 }, // U+2020
{ 11, 19, 13, 1, 19, 53, 367 }, // U+2021
{ 7, 7, 9, 1, 13, 13, 420 }, // U+2022
{ 8, 8, 9, 1, 13, 16, 433 }, // U+2023
{ 4, 5, 13, 4, 4, 5, 449 }, // U+2024
{ 11, 5, 13, 1, 4, 14, 454 }, // U+2025
{ 17, 5, 20, 1, 4, 22, 468 }, // U+2026
{ 4, 5, 7, 1, 9, 5, 490 }, // U+2027
{ 0, 0, 15, 0, 0, 0, 495 }, // U+2028
{ 0, 0, 15, 0, 0, 0, 495 }, // U+2029
{ 7, 20, 0, -1, 16, 35, 495 }, // U+202A
{ 7, 20, 0, -6, 16, 35, 530 }, // U+202B
{ 6, 22, 0, -3, 18, 33, 565 }, // U+202C
{ 6, 22, 0, -3, 18, 33, 598 }, // U+202D
{ 6, 22, 0, -3, 18, 33, 631 }, // U+202E
{ 0, 0, 4, 0, 0, 0, 664 }, // U+202F
{ 28, 20, 29, 1, 19, 140, 664 }, // U+2030
{ 37, 20, 39, 1, 19, 185, 804 }, // U+2031
{ 7, 7, 6, 0, 18, 13, 989 }, // U+2032
{ 11, 7, 10, 0, 18, 20, 1002 }, // U+2033
{ 16, 7, 15, 0, 18, 28, 1022 }, // U+2034
{ 6, 7, 6, -1, 18, 11, 1050 }, // U+2035
{ 10, 7, 11, -1, 18, 18, 1061 }, // U+2036
{ 14, 7, 15, -1, 18, 25, 1079 }, // U+2037
{ 10, 9, 10, 0, 3, 23, 1104 }, // U+2038
{ 6, 11, 8, 1, 12, 17, 1127 }, // U+2039
{ 7, 11, 8, 0, 12, 20, 1144 }, // U+203A
{ 19, 20, 21, 1, 19, 95, 1164 }, // U+203B
{ 10, 19, 12, 1, 18, 48, 1259 }, // U+203C
{ 11, 20, 11, 0, 19, 55, 1307 }, // U+203D
{ 14, 2, 13, -1, 21, 7, 1362 }, // U+203E
{ 15, 6, 15, 0, 0, 23, 1369 }, // U+203F
{ 15, 6, 15, 0, 20, 23, 1392 }, // U+2040
{ 9, 17, 9, 0, 11, 39, 1415 }, // U+2041
{ 28, 23, 28, 0, 19, 161, 1454 }, // U+2042
{ 7, 3, 8, 1, 8, 6, 1615 }, // U+2043
{ 13, 18, 3, -5, 18, 59, 1621 }, // U+2044
{ 7, 22, 8, 1, 18, 39, 1680 }, // U+2045
{ 7, 22, 8, 0, 18, 39, 1719 }, // U+2046
{ 21, 20, 21, 0, 19, 105, 1758 }, // U+2047
{ 16, 20, 17, 0, 19, 80, 1863 }, // U+2048
{ 16, 20, 17, 1, 19, 80, 1943 }, // U+2049
{ 13, 14, 14, 0, 14, 46, 2023 }, // U+204A
{ 13, 23, 16, 2, 19, 75, 2069 }, // U+204B
{ 13, 14, 16, 1, 14, 46, 2144 }, // U+204C
{ 13, 14, 16, 2, 14, 46, 2190 }, // U+204D
{ 12, 12, 14, 1, 6, 36, 2236 }, // U+204E
{ 5, 18, 6, 1, 14, 23, 2272 }, // U+204F
{ 15, 26, 15, 0, 20, 98, 2295 }, // U+2050
{ 12, 25, 14, 1, 19, 75, 2393 }, // U+2051
{ 10, 20, 9, 0, 19, 50, 2468 }, // U+2052
{ 23, 5, 25, 1, 10, 29, 2518 }, // U+2053
{ 15, 6, 15, 0, 0, 23, 2547 }, // U+2054
{ 14, 14, 14, 0, 13, 49, 2570 }, // U+2055
{ 11, 20, 13, 1, 19, 55, 2619 }, // U+2056
{ 20, 7, 19, 0, 18, 35, 2674 }, // U+2057
{ 19, 20, 21, 1, 19, 95, 2709 }, // U+2058
{ 19, 20, 21, 1, 19, 95, 2804 }, // U+2059
{ 4, 20, 6, 1, 19, 20, 2899 }, // U+205A
{ 15, 20, 16, 1, 19, 75, 2919 }, // U+205B
{ 19, 20, 20, 0, 19, 95, 2994 }, // U+205C
{ 4, 19, 7, 1, 18, 19, 3089 }, // U+205D
{ 4, 20, 7, 1, 19, 20, 3108 }, // U+205E
{ 0, 0, 6, 0, 0, 0, 3128 }, // U+205F
{ 0, 0, 15, 0, 0, 0, 3128 }, // U+2060
{ 0, 0, 15, 0, 0, 0, 3128 }, // U+2061
{ 0, 0, 15, 0, 0, 0, 3128 }, // U+2062
{ 0, 0, 15, 0, 0, 0, 3128 }, // U+2063
{ 0, 0, 15, 0, 0, 0, 3128 }, // U+2064
{ 0, 0, 0, 0, 0, 0, 3128 }, // U+2066
{ 0, 0, 0, 0, 0, 0, 3128 }, // U+2067
{ 0, 0, 0, 0, 0, 0, 3128 }, // U+2068
{ 0, 0, 0, 0, 0, 0, 3128 }, // U+2069
{ 6, 22, 0, -3, 18, 33, 3128 }, // U+206A
{ 6, 22, 0, -3, 18, 33, 3161 }, // U+206B
{ 6, 22, 0, -3, 18, 33, 3194 }, // U+206C
{ 6, 22, 0, -3, 18, 33, 3227 }, // U+206D
{ 6, 22, 0, -3, 18, 33, 3260 }, // U+206E
{ 6, 22, 0, -3, 18, 33, 3293 }, // U+206F
{ 9, 12, 9, 0, 22, 27, 0 }, // U+2070
{ 2, 12, 4, 1, 19, 6, 27 }, // U+2071
{ 9, 12, 9, 0, 22, 27, 33 }, // U+2074
{ 8, 12, 9, 0, 22, 24, 60 }, // U+2075
{ 9, 12, 9, 0, 22, 27, 84 }, // U+2076
{ 9, 12, 9, 0, 22, 27, 111 }, // U+2077
{ 9, 12, 9, 0, 22, 27, 138 }, // U+2078
{ 9, 12, 9, 0, 22, 27, 165 }, // U+2079
{ 8, 8, 8, 0, 19, 16, 192 }, // U+207A
{ 8, 2, 8, 0, 16, 4, 208 }, // U+207B
{ 8, 5, 8, 0, 17, 10, 212 }, // U+207C
{ 5, 14, 6, 1, 23, 18, 222 }, // U+207D
{ 5, 14, 6, 0, 23, 18, 240 }, // U+207E
{ 8, 9, 10, 1, 16, 18, 258 }, // U+207F
{ 9, 12, 9, 0, 8, 27, 276 }, // U+2080
{ 6, 12, 9, 0, 8, 18, 303 }, // U+2081
{ 8, 12, 9, 0, 8, 24, 321 }, // U+2082
{ 9, 12, 9, 0, 8, 27, 345 }, // U+2083
{ 9, 12, 9, 0, 8, 27, 372 }, // U+2084
{ 8, 12, 9, 0, 8, 24, 399 }, // U+2085
{ 9, 12, 9, 0, 8, 27, 423 }, // U+2086
{ 9, 12, 9, 0, 8, 27, 450 }, // U+2087
{ 9, 12, 9, 0, 8, 27, 477 }, // U+2088
{ 9, 12, 9, 0, 8, 27, 504 }, // U+2089
{ 8, 8, 8, 0, 6, 16, 531 }, // U+208A
{ 8, 2, 8, 0, 3, 4, 547 }, // U+208B
{ 8, 5, 8, 0, 4, 10, 551 }, // U+208C
{ 5, 14, 6, 1, 9, 18, 561 }, // U+208D
{ 5, 14, 6, 0, 9, 18, 579 }, // U+208E
{ 8, 9, 9, 0, 6, 18, 597 }, // U+2090
{ 9, 9, 9, 0, 6, 21, 615 }, // U+2091
{ 9, 9, 10, 0, 6, 21, 636 }, // U+2092
{ 9, 9, 9, 0, 6, 21, 657 }, // U+2093
{ 9, 9, 9, 0, 6, 21, 678 }, // U+2094
{ 8, 12, 10, 1, 9, 24, 699 }, // U+2095
{ 8, 12, 9, 1, 9, 24, 723 }, // U+2096
{ 2, 12, 4, 1, 9, 6, 747 }, // U+2097
{ 13, 9, 15, 1, 6, 30, 753 }, // U+2098
{ 8, 9, 10, 1, 6, 18, 783 }, // U+2099
{ 9, 12, 10, 1, 6, 27, 801 }, // U+209A
{ 8, 9, 8, 0, 6, 18, 828 }, // U+209B
{ 6, 11, 6, 0, 8, 17, 846 }, // U+209C
{ 14, 19, 14, 0, 19, 67, 0 }, // U+20A0
{ 13, 21, 14, 1, 19, 69, 67 }, // U+20A1
{ 13, 20, 14, 1, 19, 65, 136 }, // U+20A2
{ 12, 18, 14, 1, 18, 54, 201 }, // U+20A3
{ 14, 19, 14, 0, 19, 67, 255 }, // U+20A4
{ 20, 20, 23, 2, 17, 100, 322 }, // U+20A5
{ 15, 18, 14, 0, 18, 68, 422 }, // U+20A6
{ 18, 19, 19, 1, 18, 86, 490 }, // U+20A7
{ 18, 19, 21, 2, 18, 86, 576 }, // U+20A8
{ 17, 18, 17, 0, 18, 77, 662 }, // U+20A9
{ 16, 18, 20, 2, 18, 72, 739 }, // U+20AA
{ 15, 23, 15, 1, 19, 87, 811 }, // U+20AB
{ 14, 20, 14, 0, 19, 70, 898 }, // U+20AC
{ 15, 18, 14, 0, 18, 68, 968 }, // U+20AD
{ 14, 18, 14, 0, 18, 63, 1036 }, // U+20AE
{ 24, 25, 24, 0, 19, 150, 1099 }, // U+20AF
{ 13, 25, 14, 0, 19, 82, 1249 }, // U+20B0
{ 15, 18, 14, 0, 18, 68, 1331 }, // U+20B1
{ 16, 21, 18, 1, 19, 84, 1399 }, // U+20B2
{ 16, 18, 15, 0, 18, 72, 1483 }, // U+20B3
{ 14, 20, 14, 0, 19, 70, 1555 }, // U+20B4
{ 15, 21, 16, 1, 19, 79, 1625 }, // U+20B5
{ 15, 18, 16, 0, 17, 68, 1704 }, // U+20B6
{ 17, 21, 18, 0, 19, 90, 1772 }, // U+20B7
{ 14, 18, 14, 0, 18, 63, 1862 }, // U+20B8
{ 12, 18, 14, 1, 18, 54, 1925 }, // U+20B9
{ 14, 19, 14, 0, 18, 67, 1979 }, // U+20BA
{ 20, 20, 20, 0, 19, 100, 2046 }, // U+20BB
{ 18, 18, 20, 1, 18, 81, 2146 }, // U+20BC
{ 14, 18, 15, 0, 18, 63, 2227 }, // U+20BD
{ 17, 20, 19, 1, 20, 85, 2290 }, // U+20BE
{ 12, 24, 14, 2, 21, 72, 2375 }, // U+20BF
{ 10, 18, 12, 1, 14, 45, 2447 }, // U+20C0
{ 12, 3, 14, 1, 10, 9, 0 }, // U+2212
{ 19, 20, 17, 0, 20, 95, 0 }, // U+FB00
{ 14, 20, 15, 0, 20, 70, 95 }, // U+FB01
{ 13, 20, 15, 0, 20, 65, 165 }, // U+FB02
{ 22, 20, 24, 0, 20, 110, 230 }, // U+FB03
{ 22, 20, 24, 0, 20, 110, 340 }, // U+FB04
{ 15, 21, 17, 2, 20, 79, 450 }, // U+FB05
{ 20, 21, 21, 1, 20, 105, 529 }, // U+FB06
{ 23, 23, 25, 1, 19, 133, 0 }, // U+FFFD
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
};
static const EpdUnicodeInterval notosans_12_regularIntervals[] = {
{ 0x0, 0x0, 0x0 },
{ 0xD, 0xD, 0x1 },
{ 0x20, 0x7E, 0x2 },
{ 0xA0, 0xFF, 0x61 },
{ 0x100, 0x17F, 0xC1 },
{ 0x300, 0x36F, 0x141 },
{ 0x400, 0x4FF, 0x1B1 },
{ 0x2000, 0x2064, 0x2B1 },
{ 0x2066, 0x206F, 0x316 },
{ 0x2070, 0x2071, 0x320 },
{ 0x2074, 0x208E, 0x322 },
{ 0x2090, 0x209C, 0x33D },
{ 0x20A0, 0x20C0, 0x34A },
{ 0x2212, 0x2212, 0x36B },
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
{ 0xFB00, 0xFB06, 0x36C },
{ 0xFFFD, 0xFFFD, 0x373 },
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
};
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
static const EpdFontGroup notosans_12_regularGroups[] = {
{ 0, 2677, 4775, 97, 0 },
{ 2677, 2634, 5782, 96, 97 },
{ 5311, 3537, 8871, 128, 193 },
{ 8848, 958, 1272, 112, 321 },
{ 9806, 8509, 18641, 256, 433 },
{ 18315, 1758, 3326, 111, 689 },
{ 20073, 525, 863, 42, 800 },
{ 20598, 1619, 2492, 33, 842 },
{ 22217, 11, 9, 1, 875 },
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
{ 22228, 301, 634, 7, 876 },
{ 22529, 90, 133, 1, 883 },
};
static const EpdKernClassEntry notosans_12_regularKernLeftClasses[] = {
{ 0x0022, 1 }, // "
{ 0x0026, 2 }, // &
{ 0x0027, 1 }, // '
{ 0x0028, 3 }, // (
{ 0x002C, 4 }, // ,
{ 0x002D, 5 }, // -
{ 0x002E, 4 }, // .
{ 0x003A, 6 }, // :
{ 0x0041, 7 }, // A
{ 0x0042, 8 }, // B
{ 0x0043, 9 }, // C
{ 0x0044, 10 }, // D
{ 0x0045, 11 }, // E
{ 0x0046, 12 }, // F
{ 0x004B, 9 }, // K
{ 0x004C, 13 }, // L
{ 0x004F, 10 }, // O
{ 0x0050, 14 }, // P
{ 0x0051, 10 }, // Q
{ 0x0052, 15 }, // R
{ 0x0054, 16 }, // T
{ 0x0055, 17 }, // U
{ 0x0056, 18 }, // V
{ 0x0057, 18 }, // W
{ 0x0058, 9 }, // X
{ 0x0059, 19 }, // Y
{ 0x005A, 9 }, // Z
{ 0x005B, 3 }, // [
{ 0x005F, 20 }, // _
{ 0x0061, 21 }, // a
{ 0x0062, 22 }, // b
{ 0x0065, 22 }, // e
{ 0x0066, 23 }, // f
{ 0x0068, 21 }, // h
{ 0x006D, 21 }, // m
{ 0x006E, 21 }, // n
{ 0x006F, 22 }, // o
{ 0x0070, 22 }, // p
{ 0x0072, 24 }, // r
{ 0x0076, 25 }, // v
{ 0x0077, 25 }, // w
{ 0x0078, 26 }, // x
{ 0x0079, 25 }, // y
{ 0x007B, 3 }, // {
{ 0x00A1, 27 }, // U+00A1
{ 0x00AB, 28 }, // U+00AB
{ 0x00BB, 29 }, // U+00BB
{ 0x00BF, 30 }, // U+00BF
{ 0x00C0, 7 }, // U+00C0
{ 0x00C1, 7 }, // U+00C1
{ 0x00C2, 7 }, // U+00C2
{ 0x00C3, 7 }, // U+00C3
{ 0x00C4, 7 }, // U+00C4
{ 0x00C5, 7 }, // U+00C5
{ 0x00C6, 11 }, // U+00C6
{ 0x00C7, 9 }, // U+00C7
{ 0x00C8, 11 }, // U+00C8
{ 0x00C9, 11 }, // U+00C9
{ 0x00CA, 11 }, // U+00CA
{ 0x00CB, 11 }, // U+00CB
{ 0x00D0, 10 }, // U+00D0
{ 0x00D2, 10 }, // U+00D2
{ 0x00D3, 10 }, // U+00D3
{ 0x00D4, 10 }, // U+00D4
{ 0x00D5, 10 }, // U+00D5
{ 0x00D6, 10 }, // U+00D6
{ 0x00D8, 10 }, // U+00D8
{ 0x00D9, 17 }, // U+00D9
{ 0x00DA, 17 }, // U+00DA
{ 0x00DB, 17 }, // U+00DB
{ 0x00DC, 17 }, // U+00DC
{ 0x00DD, 19 }, // U+00DD
{ 0x00DE, 14 }, // U+00DE
{ 0x00E0, 21 }, // U+00E0
{ 0x00E1, 21 }, // U+00E1
{ 0x00E2, 21 }, // U+00E2
{ 0x00E3, 21 }, // U+00E3
{ 0x00E4, 21 }, // U+00E4
{ 0x00E5, 21 }, // U+00E5
{ 0x00E6, 22 }, // U+00E6
{ 0x00E8, 22 }, // U+00E8
{ 0x00E9, 22 }, // U+00E9
{ 0x00EA, 22 }, // U+00EA
{ 0x00EB, 22 }, // U+00EB
{ 0x00EE, 31 }, // U+00EE
{ 0x00EF, 31 }, // U+00EF
{ 0x00F0, 22 }, // U+00F0
{ 0x00F2, 22 }, // U+00F2
{ 0x00F3, 22 }, // U+00F3
{ 0x00F4, 22 }, // U+00F4
{ 0x00F5, 22 }, // U+00F5
{ 0x00F6, 22 }, // U+00F6
{ 0x00F8, 22 }, // U+00F8
{ 0x00FD, 25 }, // U+00FD
{ 0x00FE, 22 }, // U+00FE
{ 0x00FF, 25 }, // U+00FF
{ 0x0100, 7 }, // U+0100
{ 0x0101, 21 }, // U+0101
{ 0x0102, 7 }, // U+0102
{ 0x0103, 21 }, // U+0103
{ 0x0104, 32 }, // U+0104
{ 0x0105, 21 }, // U+0105
{ 0x0106, 9 }, // U+0106
{ 0x0108, 9 }, // U+0108
{ 0x010A, 9 }, // U+010A
{ 0x010C, 9 }, // U+010C
{ 0x010E, 10 }, // U+010E
{ 0x010F, 33 }, // U+010F
{ 0x0110, 10 }, // U+0110
{ 0x0112, 11 }, // U+0112
{ 0x0113, 22 }, // U+0113
{ 0x0114, 11 }, // U+0114
{ 0x0115, 22 }, // U+0115
{ 0x0116, 11 }, // U+0116
{ 0x0117, 22 }, // U+0117
{ 0x0118, 11 }, // U+0118
{ 0x0119, 22 }, // U+0119
{ 0x011A, 11 }, // U+011A
{ 0x011B, 22 }, // U+011B
{ 0x0125, 21 }, // U+0125
{ 0x0129, 34 }, // U+0129
{ 0x012B, 31 }, // U+012B
{ 0x012E, 11 }, // U+012E
{ 0x0136, 9 }, // U+0136
{ 0x0138, 26 }, // U+0138
{ 0x0139, 13 }, // U+0139
{ 0x013B, 13 }, // U+013B
{ 0x013D, 13 }, // U+013D
{ 0x013E, 33 }, // U+013E
{ 0x013F, 13 }, // U+013F
{ 0x0141, 13 }, // U+0141
{ 0x0144, 21 }, // U+0144
{ 0x0146, 21 }, // U+0146
{ 0x0149, 21 }, // U+0149
{ 0x014B, 21 }, // U+014B
{ 0x014C, 10 }, // U+014C
{ 0x014D, 22 }, // U+014D
{ 0x014E, 10 }, // U+014E
{ 0x014F, 22 }, // U+014F
{ 0x0150, 10 }, // U+0150
{ 0x0151, 22 }, // U+0151
{ 0x0152, 11 }, // U+0152
{ 0x0153, 22 }, // U+0153
{ 0x0155, 24 }, // U+0155
{ 0x0157, 24 }, // U+0157
{ 0x0159, 24 }, // U+0159
{ 0x0162, 16 }, // U+0162
{ 0x0164, 16 }, // U+0164
{ 0x0165, 35 }, // U+0165
{ 0x0166, 16 }, // U+0166
{ 0x0168, 17 }, // U+0168
{ 0x016A, 17 }, // U+016A
{ 0x016C, 17 }, // U+016C
{ 0x016E, 17 }, // U+016E
{ 0x0170, 17 }, // U+0170
{ 0x0172, 17 }, // U+0172
{ 0x0174, 18 }, // U+0174
{ 0x0175, 25 }, // U+0175
{ 0x0176, 19 }, // U+0176
{ 0x0177, 25 }, // U+0177
{ 0x0178, 19 }, // U+0178
{ 0x0179, 9 }, // U+0179
{ 0x017B, 9 }, // U+017B
{ 0x017D, 9 }, // U+017D
{ 0x0400, 36 }, // U+0400
{ 0x0401, 36 }, // U+0401
{ 0x0402, 37 }, // U+0402
{ 0x0403, 38 }, // U+0403
{ 0x0404, 39 }, // U+0404
{ 0x0405, 40 }, // U+0405
{ 0x0409, 41 }, // U+0409
{ 0x040A, 41 }, // U+040A
{ 0x040B, 37 }, // U+040B
{ 0x040C, 42 }, // U+040C
{ 0x040E, 43 }, // U+040E
{ 0x0410, 44 }, // U+0410
{ 0x0411, 45 }, // U+0411
{ 0x0412, 46 }, // U+0412
{ 0x0413, 38 }, // U+0413
{ 0x0414, 47 }, // U+0414
{ 0x0415, 36 }, // U+0415
{ 0x0416, 42 }, // U+0416
{ 0x0417, 46 }, // U+0417
{ 0x041A, 42 }, // U+041A
{ 0x041E, 48 }, // U+041E
{ 0x0420, 49 }, // U+0420
{ 0x0421, 39 }, // U+0421
{ 0x0422, 38 }, // U+0422
{ 0x0423, 43 }, // U+0423
{ 0x0424, 50 }, // U+0424
{ 0x0425, 42 }, // U+0425
{ 0x0426, 47 }, // U+0426
{ 0x0429, 47 }, // U+0429
{ 0x042A, 41 }, // U+042A
{ 0x042C, 41 }, // U+042C
{ 0x042D, 48 }, // U+042D
{ 0x042E, 48 }, // U+042E
{ 0x0430, 51 }, // U+0430
{ 0x0431, 52 }, // U+0431
{ 0x0432, 53 }, // U+0432
{ 0x0433, 54 }, // U+0433
{ 0x0434, 55 }, // U+0434
{ 0x0435, 56 }, // U+0435
{ 0x0436, 57 }, // U+0436
{ 0x0437, 53 }, // U+0437
{ 0x0438, 58 }, // U+0438
{ 0x0439, 58 }, // U+0439
{ 0x043A, 57 }, // U+043A
{ 0x043B, 58 }, // U+043B
{ 0x043C, 58 }, // U+043C
{ 0x043D, 58 }, // U+043D
{ 0x043E, 56 }, // U+043E
{ 0x043F, 58 }, // U+043F
{ 0x0440, 56 }, // U+0440
{ 0x0441, 59 }, // U+0441
{ 0x0442, 54 }, // U+0442
{ 0x0443, 60 }, // U+0443
{ 0x0444, 56 }, // U+0444
{ 0x0445, 57 }, // U+0445
{ 0x0446, 55 }, // U+0446
{ 0x0447, 58 }, // U+0447
{ 0x0448, 58 }, // U+0448
{ 0x0449, 55 }, // U+0449
{ 0x044A, 61 }, // U+044A
{ 0x044B, 58 }, // U+044B
{ 0x044C, 61 }, // U+044C
{ 0x044D, 56 }, // U+044D
{ 0x044E, 56 }, // U+044E
{ 0x044F, 58 }, // U+044F
{ 0x0450, 56 }, // U+0450
{ 0x0451, 56 }, // U+0451
{ 0x0452, 62 }, // U+0452
{ 0x0453, 54 }, // U+0453
{ 0x0454, 59 }, // U+0454
{ 0x0455, 63 }, // U+0455
{ 0x0459, 61 }, // U+0459
{ 0x045A, 61 }, // U+045A
{ 0x045B, 64 }, // U+045B
{ 0x045C, 57 }, // U+045C
{ 0x045D, 58 }, // U+045D
{ 0x045E, 60 }, // U+045E
{ 0x045F, 58 }, // U+045F
{ 0x0460, 48 }, // U+0460
{ 0x0461, 65 }, // U+0461
{ 0x0462, 66 }, // U+0462
{ 0x0463, 61 }, // U+0463
{ 0x0464, 39 }, // U+0464
{ 0x0465, 59 }, // U+0465
{ 0x0466, 44 }, // U+0466
{ 0x0467, 67 }, // U+0467
{ 0x0468, 44 }, // U+0468
{ 0x0469, 67 }, // U+0469
{ 0x046E, 68 }, // U+046E
{ 0x0471, 56 }, // U+0471
{ 0x0472, 48 }, // U+0472
{ 0x0473, 56 }, // U+0473
{ 0x0474, 43 }, // U+0474
{ 0x0475, 65 }, // U+0475
{ 0x0476, 43 }, // U+0476
{ 0x0477, 65 }, // U+0477
{ 0x0478, 60 }, // U+0478
{ 0x0479, 60 }, // U+0479
{ 0x047A, 48 }, // U+047A
{ 0x047B, 56 }, // U+047B
{ 0x047C, 48 }, // U+047C
{ 0x047D, 56 }, // U+047D
{ 0x047E, 48 }, // U+047E
{ 0x047F, 65 }, // U+047F
{ 0x0480, 39 }, // U+0480
{ 0x048A, 47 }, // U+048A
{ 0x048B, 55 }, // U+048B
{ 0x048C, 66 }, // U+048C
{ 0x048D, 61 }, // U+048D
{ 0x048E, 49 }, // U+048E
{ 0x048F, 56 }, // U+048F
{ 0x0490, 69 }, // U+0490
{ 0x0491, 70 }, // U+0491
{ 0x0492, 71 }, // U+0492
{ 0x0493, 72 }, // U+0493
{ 0x0496, 73 }, // U+0496
{ 0x0497, 74 }, // U+0497
{ 0x0498, 68 }, // U+0498
{ 0x0499, 53 }, // U+0499
{ 0x049A, 73 }, // U+049A
{ 0x049B, 74 }, // U+049B
{ 0x049C, 42 }, // U+049C
{ 0x049D, 57 }, // U+049D
{ 0x049E, 42 }, // U+049E
{ 0x049F, 57 }, // U+049F
{ 0x04A0, 42 }, // U+04A0
{ 0x04A1, 57 }, // U+04A1
{ 0x04A2, 47 }, // U+04A2
{ 0x04A3, 55 }, // U+04A3
{ 0x04A4, 71 }, // U+04A4
{ 0x04A5, 70 }, // U+04A5
{ 0x04A9, 56 }, // U+04A9
{ 0x04AA, 39 }, // U+04AA
{ 0x04AB, 59 }, // U+04AB
{ 0x04AC, 69 }, // U+04AC
{ 0x04AD, 70 }, // U+04AD
{ 0x04AE, 75 }, // U+04AE
{ 0x04AF, 65 }, // U+04AF
{ 0x04B0, 75 }, // U+04B0
{ 0x04B1, 65 }, // U+04B1
{ 0x04B2, 73 }, // U+04B2
{ 0x04B3, 74 }, // U+04B3
{ 0x04B4, 47 }, // U+04B4
{ 0x04B5, 55 }, // U+04B5
{ 0x04B6, 47 }, // U+04B6
{ 0x04B7, 55 }, // U+04B7
{ 0x04BC, 76 }, // U+04BC
{ 0x04BD, 77 }, // U+04BD
{ 0x04BE, 76 }, // U+04BE
{ 0x04BF, 77 }, // U+04BF
{ 0x04C1, 42 }, // U+04C1
{ 0x04C2, 57 }, // U+04C2
{ 0x04C5, 47 }, // U+04C5
{ 0x04C6, 55 }, // U+04C6
{ 0x04C9, 47 }, // U+04C9
{ 0x04CA, 55 }, // U+04CA
{ 0x04CD, 47 }, // U+04CD
{ 0x04CE, 55 }, // U+04CE
{ 0x04D0, 44 }, // U+04D0
{ 0x04D1, 51 }, // U+04D1
{ 0x04D2, 44 }, // U+04D2
{ 0x04D3, 51 }, // U+04D3
{ 0x04D4, 36 }, // U+04D4
{ 0x04D5, 77 }, // U+04D5
{ 0x04D6, 36 }, // U+04D6
{ 0x04D7, 77 }, // U+04D7
{ 0x04D8, 48 }, // U+04D8
{ 0x04D9, 56 }, // U+04D9
{ 0x04DA, 48 }, // U+04DA
{ 0x04DB, 56 }, // U+04DB
{ 0x04DC, 42 }, // U+04DC
{ 0x04DD, 57 }, // U+04DD
{ 0x04DE, 68 }, // U+04DE
{ 0x04DF, 53 }, // U+04DF
{ 0x04E3, 58 }, // U+04E3
{ 0x04E5, 58 }, // U+04E5
{ 0x04E6, 48 }, // U+04E6
{ 0x04E7, 56 }, // U+04E7
{ 0x04E8, 48 }, // U+04E8
{ 0x04E9, 56 }, // U+04E9
{ 0x04EA, 48 }, // U+04EA
{ 0x04EB, 56 }, // U+04EB
{ 0x04EC, 48 }, // U+04EC
{ 0x04ED, 56 }, // U+04ED
{ 0x04EE, 43 }, // U+04EE
{ 0x04EF, 60 }, // U+04EF
{ 0x04F0, 43 }, // U+04F0
{ 0x04F1, 60 }, // U+04F1
{ 0x04F2, 43 }, // U+04F2
{ 0x04F3, 60 }, // U+04F3
{ 0x04F5, 58 }, // U+04F5
{ 0x04F6, 69 }, // U+04F6
{ 0x04F7, 70 }, // U+04F7
{ 0x04F9, 58 }, // U+04F9
{ 0x04FA, 71 }, // U+04FA
{ 0x04FB, 72 }, // U+04FB
{ 0x04FC, 73 }, // U+04FC
{ 0x04FD, 74 }, // U+04FD
{ 0x04FE, 42 }, // U+04FE
{ 0x04FF, 74 }, // U+04FF
{ 0x2013, 5 }, // U+2013
{ 0x2014, 5 }, // U+2014
{ 0x2015, 5 }, // U+2015
{ 0x2018, 1 }, // U+2018
{ 0x2019, 1 }, // U+2019
{ 0x201A, 4 }, // U+201A
{ 0x201C, 1 }, // U+201C
{ 0x201D, 1 }, // U+201D
{ 0x201E, 4 }, // U+201E
{ 0x2039, 28 }, // U+2039
{ 0x203A, 29 }, // U+203A
{ 0xFB00, 23 }, // U+FB00
};
static const EpdKernClassEntry notosans_12_regularKernRightClasses[] = {
{ 0x0021, 1 }, // !
{ 0x0022, 2 }, // "
{ 0x0026, 3 }, // &
{ 0x0027, 2 }, // '
{ 0x0029, 4 }, // )
{ 0x002C, 5 }, // ,
{ 0x002D, 6 }, // -
{ 0x002E, 5 }, // .
{ 0x003A, 7 }, // :
{ 0x003B, 7 }, // ;
{ 0x003F, 8 }, // ?
{ 0x0041, 9 }, // A
{ 0x0043, 10 }, // C
{ 0x0047, 10 }, // G
{ 0x004A, 11 }, // J
{ 0x004F, 10 }, // O
{ 0x0051, 10 }, // Q
{ 0x0054, 12 }, // T
{ 0x0055, 13 }, // U
{ 0x0056, 14 }, // V
{ 0x0057, 14 }, // W
{ 0x0058, 15 }, // X
{ 0x0059, 16 }, // Y
{ 0x005A, 17 }, // Z
{ 0x005D, 4 }, // ]
{ 0x0061, 18 }, // a
{ 0x0063, 19 }, // c
{ 0x0064, 19 }, // d
{ 0x0065, 19 }, // e
{ 0x0067, 18 }, // g
{ 0x006A, 20 }, // j
{ 0x006D, 21 }, // m
{ 0x006E, 21 }, // n
{ 0x006F, 19 }, // o
{ 0x0070, 21 }, // p
{ 0x0071, 19 }, // q
{ 0x0072, 21 }, // r
{ 0x0073, 21 }, // s
{ 0x0075, 21 }, // u
{ 0x0076, 22 }, // v
{ 0x0077, 22 }, // w
{ 0x0078, 22 }, // x
{ 0x0079, 22 }, // y
{ 0x007A, 23 }, // z
{ 0x007D, 4 }, // }
{ 0x00AB, 24 }, // U+00AB
{ 0x00BB, 25 }, // U+00BB
{ 0x00C0, 9 }, // U+00C0
{ 0x00C1, 9 }, // U+00C1
{ 0x00C2, 9 }, // U+00C2
{ 0x00C3, 9 }, // U+00C3
{ 0x00C4, 9 }, // U+00C4
{ 0x00C5, 9 }, // U+00C5
{ 0x00C6, 26 }, // U+00C6
{ 0x00C7, 10 }, // U+00C7
{ 0x00D2, 10 }, // U+00D2
{ 0x00D3, 10 }, // U+00D3
{ 0x00D4, 10 }, // U+00D4
{ 0x00D5, 10 }, // U+00D5
{ 0x00D6, 10 }, // U+00D6
{ 0x00D8, 10 }, // U+00D8
{ 0x00D9, 13 }, // U+00D9
{ 0x00DA, 13 }, // U+00DA
{ 0x00DB, 13 }, // U+00DB
{ 0x00DC, 13 }, // U+00DC
{ 0x00DD, 16 }, // U+00DD
{ 0x00E0, 19 }, // U+00E0
{ 0x00E1, 18 }, // U+00E1
{ 0x00E2, 18 }, // U+00E2
{ 0x00E3, 18 }, // U+00E3
{ 0x00E4, 18 }, // U+00E4
{ 0x00E5, 18 }, // U+00E5
{ 0x00E6, 18 }, // U+00E6
{ 0x00E7, 19 }, // U+00E7
{ 0x00E8, 19 }, // U+00E8
{ 0x00E9, 19 }, // U+00E9
{ 0x00EA, 19 }, // U+00EA
{ 0x00EB, 19 }, // U+00EB
{ 0x00F2, 19 }, // U+00F2
{ 0x00F3, 19 }, // U+00F3
{ 0x00F4, 19 }, // U+00F4
{ 0x00F5, 19 }, // U+00F5
{ 0x00F6, 19 }, // U+00F6
{ 0x00F8, 19 }, // U+00F8
{ 0x00F9, 21 }, // U+00F9
{ 0x00FA, 21 }, // U+00FA
{ 0x00FB, 21 }, // U+00FB
{ 0x00FC, 21 }, // U+00FC
{ 0x00FD, 22 }, // U+00FD
{ 0x00FF, 22 }, // U+00FF
{ 0x0100, 9 }, // U+0100
{ 0x0101, 18 }, // U+0101
{ 0x0102, 9 }, // U+0102
{ 0x0103, 18 }, // U+0103
{ 0x0104, 9 }, // U+0104
{ 0x0105, 18 }, // U+0105
{ 0x0106, 10 }, // U+0106
{ 0x0107, 19 }, // U+0107
{ 0x0108, 10 }, // U+0108
{ 0x0109, 19 }, // U+0109
{ 0x010A, 10 }, // U+010A
{ 0x010B, 19 }, // U+010B
{ 0x010C, 10 }, // U+010C
{ 0x010D, 19 }, // U+010D
{ 0x010F, 19 }, // U+010F
{ 0x0111, 19 }, // U+0111
{ 0x0113, 19 }, // U+0113
{ 0x0115, 19 }, // U+0115
{ 0x0117, 19 }, // U+0117
{ 0x0119, 19 }, // U+0119
{ 0x011B, 19 }, // U+011B
{ 0x011C, 10 }, // U+011C
{ 0x011D, 18 }, // U+011D
{ 0x011E, 10 }, // U+011E
{ 0x011F, 18 }, // U+011F
{ 0x0120, 10 }, // U+0120
{ 0x0121, 18 }, // U+0121
{ 0x0122, 10 }, // U+0122
{ 0x0123, 18 }, // U+0123
{ 0x0127, 27 }, // U+0127
{ 0x0129, 28 }, // U+0129
{ 0x0138, 21 }, // U+0138
{ 0x0144, 21 }, // U+0144
{ 0x0146, 21 }, // U+0146
{ 0x014B, 21 }, // U+014B
{ 0x014C, 10 }, // U+014C
{ 0x014D, 19 }, // U+014D
{ 0x014E, 10 }, // U+014E
{ 0x014F, 19 }, // U+014F
{ 0x0150, 10 }, // U+0150
{ 0x0151, 19 }, // U+0151
{ 0x0152, 10 }, // U+0152
{ 0x0153, 19 }, // U+0153
{ 0x0155, 21 }, // U+0155
{ 0x0157, 21 }, // U+0157
{ 0x015B, 21 }, // U+015B
{ 0x015F, 21 }, // U+015F
{ 0x0162, 12 }, // U+0162
{ 0x0164, 12 }, // U+0164
{ 0x0166, 12 }, // U+0166
{ 0x0168, 13 }, // U+0168
{ 0x0169, 21 }, // U+0169
{ 0x016A, 13 }, // U+016A
{ 0x016B, 21 }, // U+016B
{ 0x016C, 13 }, // U+016C
{ 0x016D, 21 }, // U+016D
{ 0x016E, 13 }, // U+016E
{ 0x016F, 21 }, // U+016F
{ 0x0170, 13 }, // U+0170
{ 0x0171, 21 }, // U+0171
{ 0x0172, 13 }, // U+0172
{ 0x0173, 21 }, // U+0173
{ 0x0174, 14 }, // U+0174
{ 0x0175, 22 }, // U+0175
{ 0x0176, 16 }, // U+0176
{ 0x0177, 22 }, // U+0177
{ 0x0178, 16 }, // U+0178
{ 0x0179, 17 }, // U+0179
{ 0x017A, 23 }, // U+017A
{ 0x017B, 17 }, // U+017B
{ 0x017C, 23 }, // U+017C
{ 0x017D, 17 }, // U+017D
{ 0x017E, 23 }, // U+017E
{ 0x0402, 29 }, // U+0402
{ 0x0404, 30 }, // U+0404
{ 0x0405, 31 }, // U+0405
{ 0x0408, 32 }, // U+0408
{ 0x0409, 33 }, // U+0409
{ 0x040B, 29 }, // U+040B
{ 0x040E, 34 }, // U+040E
{ 0x0410, 35 }, // U+0410
{ 0x0414, 36 }, // U+0414
{ 0x0416, 37 }, // U+0416
{ 0x0417, 38 }, // U+0417
{ 0x041B, 33 }, // U+041B
{ 0x041E, 30 }, // U+041E
{ 0x0421, 30 }, // U+0421
{ 0x0422, 29 }, // U+0422
{ 0x0423, 34 }, // U+0423
{ 0x0424, 39 }, // U+0424
{ 0x0425, 37 }, // U+0425
{ 0x0427, 40 }, // U+0427
{ 0x042A, 29 }, // U+042A
{ 0x042D, 38 }, // U+042D
{ 0x042F, 41 }, // U+042F
{ 0x0430, 42 }, // U+0430
{ 0x0431, 43 }, // U+0431
{ 0x0432, 44 }, // U+0432
{ 0x0433, 44 }, // U+0433
{ 0x0434, 45 }, // U+0434
{ 0x0435, 46 }, // U+0435
{ 0x0436, 47 }, // U+0436
{ 0x0437, 48 }, // U+0437
{ 0x0438, 44 }, // U+0438
{ 0x0439, 44 }, // U+0439
{ 0x043A, 44 }, // U+043A
{ 0x043B, 49 }, // U+043B
{ 0x043C, 44 }, // U+043C
{ 0x043D, 44 }, // U+043D
{ 0x043E, 46 }, // U+043E
{ 0x043F, 44 }, // U+043F
{ 0x0440, 44 }, // U+0440
{ 0x0441, 46 }, // U+0441
{ 0x0442, 50 }, // U+0442
{ 0x0443, 51 }, // U+0443
{ 0x0444, 46 }, // U+0444
{ 0x0445, 47 }, // U+0445
{ 0x0446, 44 }, // U+0446
{ 0x0447, 52 }, // U+0447
{ 0x0448, 44 }, // U+0448
{ 0x0449, 44 }, // U+0449
{ 0x044A, 50 }, // U+044A
{ 0x044B, 44 }, // U+044B
{ 0x044C, 44 }, // U+044C
{ 0x044D, 48 }, // U+044D
{ 0x044E, 44 }, // U+044E
{ 0x044F, 53 }, // U+044F
{ 0x0450, 46 }, // U+0450
{ 0x0451, 46 }, // U+0451
{ 0x0452, 54 }, // U+0452
{ 0x0453, 44 }, // U+0453
{ 0x0454, 46 }, // U+0454
{ 0x0455, 44 }, // U+0455
{ 0x0458, 55 }, // U+0458
{ 0x0459, 49 }, // U+0459
{ 0x045A, 44 }, // U+045A
{ 0x045B, 54 }, // U+045B
{ 0x045C, 44 }, // U+045C
{ 0x045D, 44 }, // U+045D
{ 0x045E, 51 }, // U+045E
{ 0x045F, 44 }, // U+045F
{ 0x0460, 56 }, // U+0460
{ 0x0461, 57 }, // U+0461
{ 0x0462, 58 }, // U+0462
{ 0x0465, 59 }, // U+0465
{ 0x0466, 35 }, // U+0466
{ 0x0467, 45 }, // U+0467
{ 0x0469, 59 }, // U+0469
{ 0x046D, 59 }, // U+046D
{ 0x046E, 38 }, // U+046E
{ 0x0470, 40 }, // U+0470
{ 0x0472, 56 }, // U+0472
{ 0x0473, 42 }, // U+0473
{ 0x0474, 60 }, // U+0474
{ 0x0475, 57 }, // U+0475
{ 0x0476, 60 }, // U+0476
{ 0x0477, 57 }, // U+0477
{ 0x0478, 56 }, // U+0478
{ 0x0479, 42 }, // U+0479
{ 0x047A, 56 }, // U+047A
{ 0x047B, 42 }, // U+047B
{ 0x047C, 56 }, // U+047C
{ 0x047D, 42 }, // U+047D
{ 0x047E, 56 }, // U+047E
{ 0x047F, 57 }, // U+047F
{ 0x0480, 56 }, // U+0480
{ 0x0481, 42 }, // U+0481
{ 0x048B, 59 }, // U+048B
{ 0x048C, 58 }, // U+048C
{ 0x048D, 54 }, // U+048D
{ 0x048F, 59 }, // U+048F
{ 0x0491, 59 }, // U+0491
{ 0x0492, 58 }, // U+0492
{ 0x0495, 59 }, // U+0495
{ 0x0496, 37 }, // U+0496
{ 0x0497, 47 }, // U+0497
{ 0x0498, 38 }, // U+0498
{ 0x0499, 48 }, // U+0499
{ 0x049B, 59 }, // U+049B
{ 0x049D, 59 }, // U+049D
{ 0x049F, 54 }, // U+049F
{ 0x04A0, 61 }, // U+04A0
{ 0x04A1, 50 }, // U+04A1
{ 0x04A3, 59 }, // U+04A3
{ 0x04A5, 59 }, // U+04A5
{ 0x04A7, 59 }, // U+04A7
{ 0x04A8, 56 }, // U+04A8
{ 0x04A9, 42 }, // U+04A9
{ 0x04AA, 56 }, // U+04AA
{ 0x04AB, 42 }, // U+04AB
{ 0x04AC, 29 }, // U+04AC
{ 0x04AD, 50 }, // U+04AD
{ 0x04AE, 62 }, // U+04AE
{ 0x04AF, 63 }, // U+04AF
{ 0x04B0, 62 }, // U+04B0
{ 0x04B1, 63 }, // U+04B1
{ 0x04B2, 37 }, // U+04B2
{ 0x04B3, 47 }, // U+04B3
{ 0x04B4, 61 }, // U+04B4
{ 0x04B5, 50 }, // U+04B5
{ 0x04B6, 40 }, // U+04B6
{ 0x04B7, 52 }, // U+04B7
{ 0x04B8, 40 }, // U+04B8
{ 0x04B9, 52 }, // U+04B9
{ 0x04BB, 59 }, // U+04BB
{ 0x04BC, 64 }, // U+04BC
{ 0x04BD, 65 }, // U+04BD
{ 0x04BE, 64 }, // U+04BE
{ 0x04BF, 65 }, // U+04BF
{ 0x04C1, 37 }, // U+04C1
{ 0x04C2, 47 }, // U+04C2
{ 0x04C4, 59 }, // U+04C4
{ 0x04C5, 66 }, // U+04C5
{ 0x04C6, 45 }, // U+04C6
{ 0x04C8, 59 }, // U+04C8
{ 0x04CA, 59 }, // U+04CA
{ 0x04CB, 40 }, // U+04CB
{ 0x04CC, 52 }, // U+04CC
{ 0x04CE, 59 }, // U+04CE
{ 0x04D0, 35 }, // U+04D0
{ 0x04D1, 67 }, // U+04D1
{ 0x04D2, 35 }, // U+04D2
{ 0x04D3, 67 }, // U+04D3
{ 0x04D4, 35 }, // U+04D4
{ 0x04D5, 67 }, // U+04D5
{ 0x04D7, 42 }, // U+04D7
{ 0x04D8, 68 }, // U+04D8
{ 0x04D9, 67 }, // U+04D9
{ 0x04DA, 68 }, // U+04DA
{ 0x04DB, 67 }, // U+04DB
{ 0x04DC, 37 }, // U+04DC
{ 0x04DD, 47 }, // U+04DD
{ 0x04DE, 38 }, // U+04DE
{ 0x04DF, 48 }, // U+04DF
{ 0x04E3, 44 }, // U+04E3
{ 0x04E5, 44 }, // U+04E5
{ 0x04E6, 56 }, // U+04E6
{ 0x04E7, 42 }, // U+04E7
{ 0x04E8, 56 }, // U+04E8
{ 0x04E9, 42 }, // U+04E9
{ 0x04EA, 56 }, // U+04EA
{ 0x04EB, 42 }, // U+04EB
{ 0x04EC, 38 }, // U+04EC
{ 0x04ED, 48 }, // U+04ED
{ 0x04EE, 34 }, // U+04EE
{ 0x04EF, 51 }, // U+04EF
{ 0x04F0, 34 }, // U+04F0
{ 0x04F1, 51 }, // U+04F1
{ 0x04F2, 34 }, // U+04F2
{ 0x04F3, 51 }, // U+04F3
{ 0x04F4, 40 }, // U+04F4
{ 0x04F5, 52 }, // U+04F5
{ 0x04F7, 59 }, // U+04F7
{ 0x04F9, 44 }, // U+04F9
{ 0x04FA, 58 }, // U+04FA
{ 0x04FC, 37 }, // U+04FC
{ 0x04FD, 47 }, // U+04FD
{ 0x04FE, 37 }, // U+04FE
{ 0x04FF, 47 }, // U+04FF
{ 0x2013, 6 }, // U+2013
{ 0x2014, 6 }, // U+2014
{ 0x2015, 6 }, // U+2015
{ 0x2018, 69 }, // U+2018
{ 0x2019, 2 }, // U+2019
{ 0x201A, 5 }, // U+201A
{ 0x201C, 69 }, // U+201C
{ 0x201D, 2 }, // U+201D
{ 0x201E, 5 }, // U+201E
{ 0x2026, 5 }, // U+2026
{ 0x2039, 24 }, // U+2039
{ 0x203A, 25 }, // U+203A
};
static const int8_t notosans_12_regularKernMatrix[] = {
0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, 0, -1, 0, 0, 0, 0, -2, 0, 1, 0, 0, 0, 0, -1, 0, -2, -2, 0, 0, -1, 0, 0, -1, 0, 0, -2, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, -2, -1, -2, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 1, 0, -1, 0, 0, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -2, 0, 0, 0, -2, 0, 0, 0, -2, -2, -2, 0, -2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0, 0, -1, 1, -2, 0, -1, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, -1, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, -1, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -1, 0, -4, 0, 0, 0, -2, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -1, 0, -2, -1, 0, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, -2, -2, 0, -2, -1, -1, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -1, 0, -2, 0, 0, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, -2, -2, 0, -1, 0, -1, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, -1, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0, 0, -1, 2, -2, 0, -1, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 0, -1, 0, -1, -2, -2, -1, 0, 0, 0, 0, 0, -1,
0, 0, 0, 0, -2, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, -1, 0, -2, -1, 0, 0, -1, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -2,
0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, -1, -1, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -1, 0, 0, 0, 0, -1, -1, 0, -3, 0, -3, -3, 0, 0, -1, 0, -1, -2, -1, -1, -3, -2, -1, -1, -2, 0, 0, -1, -2, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, -1, -2, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -2, -1, 0, 1, 0, -1, 0, 0, 0, 0, -1, -2, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 0, -1, 0, -1, -2, -2, 0, -2, 0, 0, 0, -1, -1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, -1, 0, 0, 0,
0, 0, 0, 0, -4, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, -2, -1, -2, -2, -1, 0, -1, 0, 0, -1, 0, 0, -2, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0,
0, -1, 0, -1, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -1, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, -1, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, -1, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, -1, 0, 0, 0, 0, -1, -1, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, -1, -1, 0, 0, 0, 0, -1, 0, 0, -2, -1, 0, 0, -2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, -2, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, -1, -1, 0, -1, 0, -1, -2, -1, 0, 0, 0, 0, 0, -1, 0, 0, -2, -2, -1, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, -1,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0,
0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -2, -1, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -1, 0, 0, 0, 0, -1, 0, 0, -1, 0, -2, -2, 0, 0, -1, 0, 0, -2, 0, 0, -2, 0, -1, -1, 0, -1, -1, -2, 0, 0, 0, -1, -1, 0, -2, 0, 0, 0, -1, -2, -2, -2, -2, 0, 0,
0, 0, 0, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, -1, 0, 0, -2, 0, -1, -1, 0, 0, 0, -2, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0,
0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, -2, -1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, -2, 0, 0, -2, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
static const EpdLigaturePair notosans_12_regularLigaturePairs[] = {
{ 0x00660066, 0xFB00 }, // f f -> U+FB00
{ 0x00660069, 0xFB01 }, // f i -> U+FB01
{ 0x0066006C, 0xFB02 }, // f l -> U+FB02
{ 0xFB000069, 0xFB03 }, // U+FB00 i -> U+FB03
{ 0xFB00006C, 0xFB04 }, // U+FB00 l -> U+FB04
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
};
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
static const EpdFontData notosans_12_regular = {
notosans_12_regularBitmaps,
notosans_12_regularGlyphs,
notosans_12_regularIntervals,
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
16,
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
34,
27,
-8,
true,
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
notosans_12_regularGroups,
feat: Support for kerning and ligatures (#873) ## Summary **What is the goal of this PR?** Improved typesetting, including [kerning](https://en.wikipedia.org/wiki/Kerning) and [ligatures](https://en.wikipedia.org/wiki/Ligature_(writing)#Latin_alphabet). **What changes are included?** - The script to convert built-in fonts now adds kerning and ligature information to the generated font headers. - Epub page layout calculates proper kerning spaces and makes ligature substitutions according to the selected font. ![3U1B1808](https://github.com/user-attachments/assets/1accb16f-2f1a-41e5-adca-89f1f1348494) ![3U1B1810](https://github.com/user-attachments/assets/2f6bd007-490e-420f-b774-3380b4add7ea) ![3U1B1815](https://github.com/user-attachments/assets/1986bb77-2db0-46e2-a5d6-8315dae9eb19) ## Additional Context - I am not a typography expert. - The implementation has been reworked from the earlier version, so it is no longer necessary to omit Open Dyslexic, and kerning data now covers all fonts, styles, and codepoints for which we include bitmap data. - Claude Opus 4.6 helped with a lot of this. - There's an included test epub document with lots of kerning and ligature examples, shown in the photos. **_After some time to mature, I think this change is in decent shape to merge and get people testing._** After opening this PR I came across #660, which overlaps in adding ligature support. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES, Claude Opus 4.6**_ --------- Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-24 02:31:43 -06:00
11,
notosans_12_regularKernLeftClasses,
notosans_12_regularKernRightClasses,
notosans_12_regularKernMatrix,
376,
361,
77,
69,
notosans_12_regularLigaturePairs,
5,
Aleo, Noto Sans, Open Dyslexic fonts (#163) ## Summary * Swap out Bookerly font due to licensing issues, replace default font with Aleo * I did a bunch of searching around for a nice replacement font, and this trumped several other like Literata, Merriwether, Vollkorn, etc * Add Noto Sans, and Open Dyslexic as font options * They can be selected in the settings screen * Add font size options (Small, Medium, Large, Extra Large) * Adjustable in settings * Swap out uses of reader font in headings and replaced with slightly larger Ubuntu font * Replaced PixelArial14 font as it was difficult to track down, replace with Space Grotesk * Remove auto formatting on generated font files * Massively speeds up formatting step now that there is a lot more CPP font source * Include fonts with their licenses in the repo ## Additional Context Line compression setting will follow | Font | Small | Medium | Large | X Large | | --- | --- | --- | --- | --- | | Aleo | ![IMG_5704](https://github.com/user-attachments/assets/7acb054f-ddef-4080-b3c8-590cfaf13115) | ![IMG_5705](https://github.com/user-attachments/assets/d4819036-5c89-486e-92c3-86094fa4d89a) | ![IMG_5706](https://github.com/user-attachments/assets/35caf622-d126-4396-9c3e-f927eba1e1f4) | ![IMG_5707](https://github.com/user-attachments/assets/af32370a-6244-400f-bea9-5c27db040b5b) | | Noto Sans | ![IMG_5708](https://github.com/user-attachments/assets/1f9264a5-c069-4e22-9099-a082bfcaabc5) | ![IMG_5709](https://github.com/user-attachments/assets/ef6b07fe-8d87-403a-b152-05f50b69b78e) | ![IMG_5710](https://github.com/user-attachments/assets/112a5d20-262c-4dc0-b67d-980b237e4607) | ![IMG_5711](https://github.com/user-attachments/assets/d25e0e1d-2ace-450d-96dd-618e4efd4805) | | Open Dyslexic | ![IMG_5712](https://github.com/user-attachments/assets/ead64690-f261-4fae-a4a2-0becd1162e2d) | ![IMG_5713](https://github.com/user-attachments/assets/59d60f7d-5142-4591-96b0-c04e0a4c6436) | ![IMG_5714](https://github.com/user-attachments/assets/bb6652cd-1790-46a3-93ea-2b8f70d0d36d) | ![IMG_5715](https://github.com/user-attachments/assets/496e7eb4-c81a-4232-83e9-9ba9148fdea4) |
2025-12-30 18:21:47 +10:00
};