Marcio Teixeira
5 years ago
committed by
Scott Lahteine
130 changed files with 2853 additions and 69 deletions
@ -0,0 +1,40 @@ |
|||||
|
|
||||
|
FTDI EVE Unicode Rendering |
||||
|
-------------------------- |
||||
|
|
||||
|
The FTDI EVE chips have several fonts in ROM, but these fonts only contain a |
||||
|
subset of ASCII characters. Notably, this excludes diacritics and accents |
||||
|
used in most Western languages. |
||||
|
|
||||
|
While the FTDI EVE has the capability for user-defined fonts, such fonts only |
||||
|
support 127 character positions, making them as limiting as the built-in fonts. |
||||
|
|
||||
|
As a further complication, high resolution TFT displays require high resolution |
||||
|
fonts. It is not feasible to put a complete international font into the limited |
||||
|
flash memory of most microprocessors. |
||||
|
|
||||
|
To work around these limitations, this library uses a custom font renderer with |
||||
|
the following characteristics: |
||||
|
|
||||
|
1) Rather than providing bitmaps for different font sizes, it uses a single |
||||
|
bitmap for the largest font size (romfont 31) and emulates other sizes by |
||||
|
scaling the bitmaps using BITMAP_TRANSFORM. |
||||
|
|
||||
|
2) Rather than loading an entire font, it combines symbols from romfont 31 |
||||
|
with a limited number of symbols from a custom font. For accented letters, |
||||
|
the rendering code combine basic letter shapes from romfont 31 with |
||||
|
bitmaps containing only the accent themselves. |
||||
|
|
||||
|
3) The custom bitmap is RLE compressed into PROGMEM. For accents, which have |
||||
|
a fairly small number of non-white pixels, the savings are significant. |
||||
|
|
||||
|
These characteristics enable an alphabet for Western languages to be |
||||
|
synthesized from only a few dozen custom symbols and modest PROGMEM use (~10k) |
||||
|
|
||||
|
The text layout is done by the code in "unicode.cpp" with the help of one of |
||||
|
more character renderers (e.g. "western_char_set.cpp"). Each character render |
||||
|
is responsible for loading the necessary bitmap data into RAMG and drawing |
||||
|
characters as requested. |
||||
|
|
||||
|
To add symbols for other languages, it will only be necessary to make a bitmap |
||||
|
and implement a corresponding character renderer. |
@ -0,0 +1,55 @@ |
|||||
|
/*******************
|
||||
|
* font_bitmap.cpp * |
||||
|
*******************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#include "../ftdi_extended.h" |
||||
|
|
||||
|
#ifdef FTDI_EXTENDED |
||||
|
|
||||
|
namespace FTDI { |
||||
|
|
||||
|
void write_rle_data(uint16_t addr, const uint8_t *data, size_t n) { |
||||
|
for (; n > 2; n -= 2) { |
||||
|
uint8_t count = pgm_read_byte(data++); |
||||
|
uint8_t value = pgm_read_byte(data++); |
||||
|
while (count--) CLCD::mem_write_8(addr++, value); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle) { |
||||
|
cmd.cmd(BITMAP_HANDLE(handle)); |
||||
|
cmd.cmd(BITMAP_SOURCE(fm.ptr)); |
||||
|
cmd.bitmap_layout(fm.format, fm.stride, fm.height); |
||||
|
cmd.bitmap_size(BILINEAR, BORDER, BORDER, fm.width, fm.height); |
||||
|
} |
||||
|
|
||||
|
void ext_vertex2ii(CommandProcessor &cmd, int x, int y, uint8_t handle, uint8_t cell) { |
||||
|
if (x < 0 || y < 0 || x > 511 || y > 511) { |
||||
|
cmd.cmd(BITMAP_HANDLE(handle)); |
||||
|
cmd.cmd(CELL(cell)); |
||||
|
cmd.cmd(VERTEX2F(x * 16, y * 16)); |
||||
|
} else { |
||||
|
cmd.cmd(VERTEX2II(x, y, handle, cell)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} // namespace FTDI
|
||||
|
|
||||
|
#endif // FTDI_EXTENDED
|
@ -0,0 +1,30 @@ |
|||||
|
/******************
|
||||
|
* font_bitmaps.h * |
||||
|
******************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
class CommandProcessor; |
||||
|
|
||||
|
namespace FTDI { |
||||
|
void write_rle_data(uint16_t addr, const uint8_t *data, size_t n); |
||||
|
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle); |
||||
|
void ext_vertex2ii(CommandProcessor &cmd, int x, int y, uint8_t handle, uint8_t cell); |
||||
|
} |
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,46 @@ |
|||||
|
/*******************
|
||||
|
* font_size_t.cpp * |
||||
|
*******************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#include "../ftdi_extended.h" |
||||
|
|
||||
|
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8) |
||||
|
|
||||
|
namespace FTDI { |
||||
|
// Returns the height of a standard FTDI romfont
|
||||
|
uint8_t font_size_t::get_romfont_height(uint8_t font) { |
||||
|
static const uint8_t tbl[] PROGMEM = { |
||||
|
8, 8, 16, 16, 13, 17, 20, 22, 29, 38, 16, 20, 25, 28, 36, 49, 63, 83, 108 |
||||
|
}; |
||||
|
return pgm_read_byte(&tbl[font - 16]); |
||||
|
} |
||||
|
|
||||
|
// Sets the scaling coefficient to match a romfont size
|
||||
|
font_size_t font_size_t::from_romfont(uint8_t font) { |
||||
|
return font_size_t(uint32_t(std_height) * 256 / get_romfont_height(font)); |
||||
|
} |
||||
|
|
||||
|
// Returns the height of the font
|
||||
|
uint8_t font_size_t::get_height() const { |
||||
|
return scale(std_height); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8
|
@ -0,0 +1,55 @@ |
|||||
|
/*****************
|
||||
|
* font_size_t.h * |
||||
|
*****************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
class CommandProcessor; |
||||
|
|
||||
|
namespace FTDI { |
||||
|
|
||||
|
/* The unicode rendering of different font sizes happens by scaling a
|
||||
|
* large-sized font bitmap using the FTDI bitmap transformation matrix. |
||||
|
* This keeps us from having to have load bitmaps for all font sizes. |
||||
|
* |
||||
|
* The font_size_t class helps manage this scaling factor. |
||||
|
*/ |
||||
|
class font_size_t { |
||||
|
private: |
||||
|
// Standard height for font bitmaps
|
||||
|
static constexpr uint8_t std_height = 49; |
||||
|
|
||||
|
// 8.8 fixed point scaling coefficient
|
||||
|
uint16_t coefficient; |
||||
|
|
||||
|
font_size_t(uint16_t v) : coefficient(v) {} |
||||
|
public: |
||||
|
font_size_t() : coefficient(256) {} |
||||
|
|
||||
|
static uint8_t get_romfont_height(uint8_t font); |
||||
|
|
||||
|
static font_size_t from_romfont(uint8_t size); |
||||
|
|
||||
|
template<typename T> T scale(T val) const {return (int32_t(val) * 256 / coefficient);} |
||||
|
|
||||
|
uint8_t get_height() const; |
||||
|
uint16_t get_coefficient() const {return coefficient;} |
||||
|
}; |
||||
|
} |
@ -0,0 +1,100 @@ |
|||||
|
/*************************
|
||||
|
* standard_char_set.cpp * |
||||
|
*************************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#include "../ftdi_extended.h" |
||||
|
|
||||
|
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8) |
||||
|
|
||||
|
constexpr static uint8_t std_font = 31; |
||||
|
|
||||
|
/* Lookup table of the char widths for standard ROMFONT 31 */ |
||||
|
|
||||
|
uint8_t FTDI::StandardCharSet::std_char_width(char c) { |
||||
|
static const uint8_t tbl[] PROGMEM = { |
||||
|
10, 11, 15, 26, 25, 31, 26, 10, 15, 14, 18, 24, 9, 18, 11, 17, 24, 24, |
||||
|
24, 24, 24, 24, 24, 24, 24, 24, 10, 10, 21, 23, 22, 20, 37, 27, 27, 26, |
||||
|
28, 23, 22, 28, 29, 12, 23, 26, 22, 35, 29, 28, 26, 29, 27, 26, 26, 28, |
||||
|
27, 36, 27, 26, 25, 12, 18, 12, 18, 21, 13, 23, 24, 22, 24, 22, 15, 24, |
||||
|
24, 10, 11, 22, 10, 36, 24, 24, 24, 24, 15, 22, 14, 24, 21, 32, 21, 21, |
||||
|
22, 15, 10, 15, 29, 10 |
||||
|
}; |
||||
|
return pgm_read_byte(&tbl[c - ' ']); |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Load bitmap data into RAMG. This function is called once at the start |
||||
|
* of the program. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* addr - Address in RAMG where the font data is written |
||||
|
*/ |
||||
|
|
||||
|
void FTDI::StandardCharSet::load_data(uint32_t) { |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Populates the bitmap handles for the custom into the display list. |
||||
|
* This function is called once at the start of each display list. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* cmd - Object used for writing to the FTDI chip command queue. |
||||
|
*/ |
||||
|
|
||||
|
void FTDI::StandardCharSet::load_bitmaps(CommandProcessor& cmd) { |
||||
|
CLCD::FontMetrics std_fm(std_font); |
||||
|
set_font_bitmap(cmd, std_fm, std_font); |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Renders a character at location x and y. The x position is incremented |
||||
|
* by the width of the character. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* cmd - If non-NULL the symbol is drawn to the screen. |
||||
|
* If NULL, only increment position for text measurement. |
||||
|
* |
||||
|
* x, y - The location at which to draw the character. On output, |
||||
|
* incremented to the location of the next character. |
||||
|
* |
||||
|
* fs - A scaling object used to scale the font. The display will |
||||
|
* already be configured to scale bitmaps, but positions |
||||
|
* must be scaled using fs.scale() |
||||
|
* |
||||
|
* c - The unicode code point to draw. If the renderer does not |
||||
|
* support the character, it should draw nothing. |
||||
|
*/ |
||||
|
|
||||
|
bool FTDI::StandardCharSet::render_glyph(CommandProcessor* cmd, int &x, int &y, font_size_t fs, utf8_char_t c) { |
||||
|
uint8_t which = (c >= ' ' && c < 128) ? c : '?'; |
||||
|
uint8_t width = std_char_width(which); |
||||
|
|
||||
|
// Draw the character
|
||||
|
if (cmd) ext_vertex2ii(*cmd, x, y, std_font, which); |
||||
|
|
||||
|
// Increment X to the next character position
|
||||
|
x += fs.scale(width); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
#endif // FTDI_EXTENDED
|
@ -0,0 +1,30 @@ |
|||||
|
/***********************
|
||||
|
* standard_char_set.h * |
||||
|
***********************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
namespace FTDI { |
||||
|
class StandardCharSet { |
||||
|
public: |
||||
|
static uint8_t std_char_width(char); |
||||
|
static void load_data(uint32_t addr); |
||||
|
static void load_bitmaps(CommandProcessor&); |
||||
|
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t); |
||||
|
}; |
||||
|
} |
@ -0,0 +1,190 @@ |
|||||
|
/***************
|
||||
|
* unicode.cpp * |
||||
|
***************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#include "../ftdi_extended.h" |
||||
|
|
||||
|
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8) |
||||
|
|
||||
|
using namespace FTDI; |
||||
|
|
||||
|
/**
|
||||
|
* Return a character in a UTF8 string and increment the |
||||
|
* pointer to the next character |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* c - Pointer to a UTF8 encoded string. |
||||
|
* |
||||
|
* Returns: The packed bytes of a UTF8 encoding of a single |
||||
|
* character (this is not the unicode codepoint) |
||||
|
*/ |
||||
|
|
||||
|
utf8_char_t FTDI::get_utf8_char_and_inc(const char *&c) { |
||||
|
utf8_char_t val = *(uint8_t*)c++; |
||||
|
while ((*c & 0xC0) == 0x80) |
||||
|
val = (val << 8) | *(uint8_t*)c++; |
||||
|
return val; |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Helper function to draw and/or measure a UTF8 string |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* cmd - If non-NULL the symbol is drawn to the screen. |
||||
|
* If NULL, only increment position for text measurement. |
||||
|
* |
||||
|
* x, y - The location at which to draw the string. |
||||
|
* |
||||
|
* str - The UTF8 string to draw or measure. |
||||
|
* |
||||
|
* fs - A scaling object used to specify the font size. |
||||
|
*/ |
||||
|
|
||||
|
static uint16_t render_utf8_text(CommandProcessor* cmd, int x, int y, const char *str, font_size_t fs) { |
||||
|
const int start_x = x; |
||||
|
while (*str) { |
||||
|
const utf8_char_t c = get_utf8_char_and_inc(str); |
||||
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET |
||||
|
WesternCharSet::render_glyph(cmd, x, y, fs, c) || |
||||
|
#endif |
||||
|
StandardCharSet::render_glyph(cmd, x, y, fs, c); |
||||
|
} |
||||
|
return x - start_x; |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Load the font bitmap data into RAMG. Called once at program start. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* addr - Address in RAMG where the font data is written |
||||
|
*/ |
||||
|
|
||||
|
void FTDI::load_utf8_data(uint16_t addr) { |
||||
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET |
||||
|
WesternCharSet::load_data(addr); |
||||
|
#endif |
||||
|
StandardCharSet::load_data(addr); |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Populate the bitmap handles for the custom fonts into the display list. |
||||
|
* Called once at the start of each display list. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* cmd - Object used for writing to the FTDI chip command queue. |
||||
|
*/ |
||||
|
|
||||
|
void FTDI::load_utf8_bitmaps(CommandProcessor &cmd) { |
||||
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET |
||||
|
WesternCharSet::load_bitmaps(cmd); |
||||
|
#endif |
||||
|
StandardCharSet::load_bitmaps(cmd); |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Measure a UTF8 text character |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* c - The unicode code point to measure. |
||||
|
* |
||||
|
* fs - A scaling object used to specify the font size. |
||||
|
* |
||||
|
* Returns: A width in pixels |
||||
|
*/ |
||||
|
|
||||
|
uint16_t FTDI::get_utf8_char_width(utf8_char_t c, font_size_t fs) { |
||||
|
int x = 0, y = 0; |
||||
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET |
||||
|
WesternCharSet::render_glyph(NULL, x, y, fs, c) || |
||||
|
#endif |
||||
|
StandardCharSet::render_glyph(NULL, x, y, fs, c); |
||||
|
return x; |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Measure a UTF8 text string |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* str - The UTF8 string to measure. |
||||
|
* |
||||
|
* fs - A scaling object used to specify the font size. |
||||
|
* |
||||
|
* Returns: A width in pixels |
||||
|
*/ |
||||
|
|
||||
|
uint16_t FTDI::get_utf8_text_width(const char *str, font_size_t fs) { |
||||
|
return render_utf8_text(NULL, 0, 0, str, fs); |
||||
|
} |
||||
|
|
||||
|
uint16_t FTDI::get_utf8_text_width(progmem_str pstr, font_size_t fs) { |
||||
|
char str[strlen_P((const char*)pstr) + 1]; |
||||
|
strcpy_P(str, (const char*)pstr); |
||||
|
return get_utf8_text_width((const char*) pstr, fs); |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Draw a UTF8 text string |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* cmd - Object used for writing to the FTDI chip command queue. |
||||
|
* |
||||
|
* x, y - The location at which to draw the string. |
||||
|
* |
||||
|
* str - The UTF8 string to draw. |
||||
|
* |
||||
|
* fs - A scaling object used to specify the font size. |
||||
|
* |
||||
|
* options - Text alignment options (i.e. OPT_CENTERX, OPT_CENTERY, OPT_CENTER or OPT_RIGHTX) |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
void FTDI::draw_utf8_text(CommandProcessor& cmd, int x, int y, const char *str, font_size_t fs, uint16_t options) { |
||||
|
cmd.cmd(SAVE_CONTEXT()); |
||||
|
cmd.cmd(BITMAP_TRANSFORM_A(fs.get_coefficient())); |
||||
|
cmd.cmd(BITMAP_TRANSFORM_E(fs.get_coefficient())); |
||||
|
cmd.cmd(BEGIN(BITMAPS)); |
||||
|
|
||||
|
// Apply alignment options
|
||||
|
if (options & OPT_CENTERX) |
||||
|
x -= get_utf8_text_width(str, fs) / 2; |
||||
|
else if (options & OPT_RIGHTX) |
||||
|
x -= get_utf8_text_width(str, fs); |
||||
|
if (options & OPT_CENTERY) |
||||
|
y -= fs.get_height()/2; |
||||
|
|
||||
|
// Render the text
|
||||
|
render_utf8_text(&cmd, x, y, str, fs); |
||||
|
cmd.cmd(RESTORE_CONTEXT()); |
||||
|
} |
||||
|
|
||||
|
void FTDI::draw_utf8_text(CommandProcessor& cmd, int x, int y, progmem_str pstr, font_size_t fs, uint16_t options) { |
||||
|
char str[strlen_P((const char*)pstr) + 1]; |
||||
|
strcpy_P(str, (const char*)pstr); |
||||
|
draw_utf8_text(cmd, x, y, (const char*) str, fs, options); |
||||
|
} |
||||
|
|
||||
|
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8
|
@ -0,0 +1,106 @@ |
|||||
|
/*************
|
||||
|
* unicode.h * |
||||
|
*************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
class CommandProcessor; |
||||
|
|
||||
|
namespace FTDI { |
||||
|
#ifdef TOUCH_UI_USE_UTF8 |
||||
|
typedef uint16_t utf8_char_t; |
||||
|
|
||||
|
/**
|
||||
|
* Converts a 32-bit codepoint into UTF-8. This compile-time function |
||||
|
* will be useful until the u8'a' character literal becomes more common. |
||||
|
*/ |
||||
|
constexpr uint32_t utf8(const uint32_t c) { |
||||
|
return (c < 0x7F ) ? c : |
||||
|
(c < 0x7FF) ? (0x0000C080 | ((c & 0b011111000000) << 2) | (c & 0b111111)) : |
||||
|
(c < 0xFFFF) ? (0x00E08080 | ((c & 0b001111000000000000) << 4) | ((c & 0b111111000000) << 2) | (c & 0b111111)) : |
||||
|
(0xF0808080 | ((c & 0b000111000000000000000000) << 6) | ((c & 0b111111000000000000) << 4) | ((c & 0b111111000000) << 2) | (c & 0b111111)); |
||||
|
} |
||||
|
|
||||
|
/* Returns the next character in a UTF8 string and increments the
|
||||
|
* pointer to the next character */ |
||||
|
|
||||
|
utf8_char_t get_utf8_char_and_inc(const char *&c); |
||||
|
|
||||
|
/* Returns the next character in a UTF8 string, without incrementing */ |
||||
|
|
||||
|
inline utf8_char_t get_utf8_char(const char *c) {return get_utf8_char_and_inc(c);} |
||||
|
|
||||
|
void load_utf8_data(uint16_t addr); |
||||
|
#else |
||||
|
typedef char utf8_char_t; |
||||
|
|
||||
|
inline utf8_char_t get_utf8_char_and_inc(const char *&c) {return *c++;} |
||||
|
inline utf8_char_t get_utf8_char(const char *c) {return *c;} |
||||
|
|
||||
|
inline void load_utf8_data(uint16_t) {} |
||||
|
#endif |
||||
|
|
||||
|
void load_utf8_bitmaps(CommandProcessor& cmd); |
||||
|
|
||||
|
uint16_t get_utf8_char_width(utf8_char_t, font_size_t); |
||||
|
uint16_t get_utf8_text_width(progmem_str, font_size_t); |
||||
|
uint16_t get_utf8_text_width(const char *, font_size_t); |
||||
|
|
||||
|
void draw_utf8_text(CommandProcessor&, int x, int y, progmem_str, font_size_t, uint16_t options = 0); |
||||
|
void draw_utf8_text(CommandProcessor&, int x, int y, const char *, font_size_t, uint16_t options = 0); |
||||
|
|
||||
|
// Similar to CLCD::FontMetrics, but can be used with UTF8 encoded strings.
|
||||
|
|
||||
|
struct FontMetrics { |
||||
|
#ifdef TOUCH_UI_USE_UTF8 |
||||
|
font_size_t fs; |
||||
|
#else |
||||
|
CLCD::FontMetrics fm; |
||||
|
#endif |
||||
|
|
||||
|
inline void load(uint8_t rom_font_size) { |
||||
|
#ifdef TOUCH_UI_USE_UTF8 |
||||
|
fs = font_size_t::from_romfont(rom_font_size); |
||||
|
#else |
||||
|
fm.load(rom_font_size); |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
inline uint16_t get_char_width(utf8_char_t c) const { |
||||
|
#ifdef TOUCH_UI_USE_UTF8 |
||||
|
return get_utf8_char_width(c, fs); |
||||
|
#else |
||||
|
return fm.char_widths[(uint8_t)c]; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
inline uint8_t get_height() const { |
||||
|
#ifdef TOUCH_UI_USE_UTF8 |
||||
|
return fs.get_height(); |
||||
|
#else |
||||
|
return fm.height; |
||||
|
#endif |
||||
|
} |
||||
|
|
||||
|
inline FontMetrics(uint8_t rom_font_size) { |
||||
|
load(rom_font_size); |
||||
|
} |
||||
|
}; |
||||
|
} |
@ -0,0 +1,338 @@ |
|||||
|
/************************
|
||||
|
* western_char_set.cpp * |
||||
|
************************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#include "../ftdi_extended.h" |
||||
|
|
||||
|
#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET) |
||||
|
#include "western_char_set_bitmap_31.h" |
||||
|
|
||||
|
#define NUM_ELEMENTS(a) (sizeof(a)/sizeof(a[0])) |
||||
|
|
||||
|
using namespace FTDI; |
||||
|
|
||||
|
constexpr static uint8_t std_font = 31; |
||||
|
constexpr static uint8_t alt_font = 1; |
||||
|
|
||||
|
static uint32_t bitmap_addr; |
||||
|
|
||||
|
/* Glyphs in the WesternCharSet bitmap */ |
||||
|
|
||||
|
enum { |
||||
|
GRAVE, |
||||
|
ACUTE, |
||||
|
CIRCUMFLEX, |
||||
|
TILDE, |
||||
|
DIAERESIS, |
||||
|
DOT_ABOVE, |
||||
|
CEDILLA, |
||||
|
NO_DOT_I, |
||||
|
SHARP_S, |
||||
|
LRG_O_STROKE, |
||||
|
SML_O_STROKE, |
||||
|
LRG_AE, |
||||
|
SML_AE, |
||||
|
LRG_ETH, |
||||
|
SML_ETH, |
||||
|
LRG_THORN, |
||||
|
SML_THORN, |
||||
|
LEFT_DBL_QUOTE, |
||||
|
RIGHT_DBL_QUOTE, |
||||
|
INV_EXCLAMATION, |
||||
|
INV_QUESTION, |
||||
|
CENT_SIGN, |
||||
|
POUND_SIGN, |
||||
|
CURRENCY_SIGN, |
||||
|
YEN_SIGN |
||||
|
}; |
||||
|
|
||||
|
/* Centerline of characters that can take accents */ |
||||
|
|
||||
|
constexpr int8_t mid_a = 12; |
||||
|
constexpr int8_t mid_e = 12; |
||||
|
constexpr int8_t mid_i = 5; |
||||
|
constexpr int8_t mid_o = 12; |
||||
|
constexpr int8_t mid_u = 12; |
||||
|
constexpr int8_t mid_y = 11; |
||||
|
constexpr int8_t mid_n = 12; |
||||
|
constexpr int8_t mid_c = 12; |
||||
|
constexpr int8_t mid_A = 13; |
||||
|
constexpr int8_t mid_E = 13; |
||||
|
constexpr int8_t mid_I = 6; |
||||
|
constexpr int8_t mid_O = 14; |
||||
|
constexpr int8_t mid_U = 14; |
||||
|
constexpr int8_t mid_Y = 13; |
||||
|
constexpr int8_t mid_N = 15; |
||||
|
constexpr int8_t mid_C = 13; |
||||
|
|
||||
|
/* Centerline of accent glyphs */ |
||||
|
|
||||
|
constexpr int8_t mid_accent = 16; |
||||
|
|
||||
|
/* When reusing the DOT_ABOVE accent glyph for the degree sign, we need to trim the leading space */ |
||||
|
constexpr uint8_t deg_sign_leading = 9; |
||||
|
|
||||
|
/* Look-up table for constructing characters (must be ordered by unicode)
|
||||
|
* |
||||
|
* Characters are either complete symbols from the Western Char Set bitmap, |
||||
|
* or they are constructed using a standard letter from the romfont and |
||||
|
* drawing an accent from the Western Char Set bitmap over it. |
||||
|
*/ |
||||
|
|
||||
|
#define UTF8(A) uint16_t(utf8(U##A)) |
||||
|
|
||||
|
PROGMEM constexpr struct { |
||||
|
uint16_t unicode; |
||||
|
uint8_t std_char; // Glyph from standard ROMFONT (zero if none)
|
||||
|
uint8_t alt_char; // Glyph from Western Char Set bitmap
|
||||
|
uint8_t alt_data; // For accented characters, the centerline; else char width
|
||||
|
} char_recipe[] = { |
||||
|
{0, 0, NO_DOT_I, 10 }, |
||||
|
{UTF8('¡'), 0 , INV_EXCLAMATION, 13 }, |
||||
|
{UTF8('¢'), 0 , CENT_SIGN, 23 }, |
||||
|
{UTF8('£'), 0 , POUND_SIGN, 24 }, |
||||
|
{UTF8('¤'), 0 , CURRENCY_SIGN, 26 }, |
||||
|
{UTF8('¥'), 0 , YEN_SIGN, 26 }, |
||||
|
{UTF8('«'), 0 , LEFT_DBL_QUOTE, 23 }, |
||||
|
{UTF8('°'), 0 , DOT_ABOVE, 24 }, |
||||
|
{UTF8('»'), 0 , RIGHT_DBL_QUOTE, 24 }, |
||||
|
{UTF8('¿'), 0 , INV_QUESTION, 21 }, |
||||
|
{UTF8('À'), 'A', GRAVE, mid_A}, |
||||
|
{UTF8('Á'), 'A', ACUTE, mid_A}, |
||||
|
{UTF8('Â'), 'A', CIRCUMFLEX, mid_A}, |
||||
|
{UTF8('Ã'), 'A', TILDE, mid_A}, |
||||
|
{UTF8('Ä'), 'A', DIAERESIS, mid_A}, |
||||
|
{UTF8('Å'), 'A', DOT_ABOVE, mid_A}, |
||||
|
{UTF8('Æ'), 0 , LRG_AE, mid_E}, |
||||
|
{UTF8('Ç'), 'C', CEDILLA, mid_C}, |
||||
|
{UTF8('È'), 'E', GRAVE, mid_E}, |
||||
|
{UTF8('É'), 'E', ACUTE, mid_E}, |
||||
|
{UTF8('Ê'), 'E', CIRCUMFLEX, mid_E}, |
||||
|
{UTF8('Ë'), 'E', DIAERESIS, mid_E}, |
||||
|
{UTF8('Ì'), 'I', GRAVE, mid_I}, |
||||
|
{UTF8('Í'), 'I', ACUTE, mid_I}, |
||||
|
{UTF8('Î'), 'I', CIRCUMFLEX, mid_I}, |
||||
|
{UTF8('Ï'), 'I', DIAERESIS, mid_I}, |
||||
|
{UTF8('Ð'), 0, LRG_ETH, 31 }, |
||||
|
{UTF8('Ñ'), 'N', TILDE, mid_N}, |
||||
|
{UTF8('Ò'), 'O', GRAVE, mid_O}, |
||||
|
{UTF8('Ó'), 'O', ACUTE, mid_O}, |
||||
|
{UTF8('Ô'), 'O', CIRCUMFLEX, mid_O}, |
||||
|
{UTF8('Õ'), 'O', TILDE, mid_O}, |
||||
|
{UTF8('Ö'), 'O', DIAERESIS, mid_O}, |
||||
|
{UTF8('Ø'), 0 , LRG_O_STROKE, 32 }, |
||||
|
{UTF8('Ù'), 'U', GRAVE, mid_U}, |
||||
|
{UTF8('Ú'), 'U', ACUTE, mid_U}, |
||||
|
{UTF8('Û'), 'U', CIRCUMFLEX, mid_U}, |
||||
|
{UTF8('Ü'), 'U', DIAERESIS, mid_U}, |
||||
|
{UTF8('Ý'), 'Y', ACUTE, mid_Y}, |
||||
|
{UTF8('Þ'), 0 , LRG_THORN, 25 }, |
||||
|
{UTF8('ß'), 0 , SHARP_S, 26 }, |
||||
|
{UTF8('à'), 'a', GRAVE, mid_a}, |
||||
|
{UTF8('á'), 'a', ACUTE, mid_a}, |
||||
|
{UTF8('â'), 'a', CIRCUMFLEX, mid_a}, |
||||
|
{UTF8('ã'), 'a', TILDE, mid_a}, |
||||
|
{UTF8('ä'), 'a', DIAERESIS, mid_a}, |
||||
|
{UTF8('å'), 'a', DOT_ABOVE, mid_a}, |
||||
|
{UTF8('æ'), 0 , SML_AE, 40 }, |
||||
|
{UTF8('ç'), 'c', CEDILLA, mid_c}, |
||||
|
{UTF8('è'), 'e', GRAVE, mid_e}, |
||||
|
{UTF8('é'), 'e', ACUTE, mid_e}, |
||||
|
{UTF8('ê'), 'e', CIRCUMFLEX, mid_e}, |
||||
|
{UTF8('ë'), 'e', DIAERESIS, mid_e}, |
||||
|
{UTF8('ì'), 'i', GRAVE, mid_i}, |
||||
|
{UTF8('í'), 'i', ACUTE, mid_i}, |
||||
|
{UTF8('î'), 'i', CIRCUMFLEX, mid_i}, |
||||
|
{UTF8('ï'), 'i', DIAERESIS, mid_i}, |
||||
|
{UTF8('ð'), 0, SML_ETH, 24 }, |
||||
|
{UTF8('ñ'), 'n', TILDE, mid_n}, |
||||
|
{UTF8('ò'), 'o', GRAVE, mid_o}, |
||||
|
{UTF8('ó'), 'o', ACUTE, mid_o}, |
||||
|
{UTF8('ô'), 'o', CIRCUMFLEX, mid_o}, |
||||
|
{UTF8('õ'), 'o', TILDE, mid_o}, |
||||
|
{UTF8('ö'), 'o', DIAERESIS, mid_o}, |
||||
|
{UTF8('ø'), 0 , SML_O_STROKE, 25 }, |
||||
|
{UTF8('ù'), 'u', GRAVE, mid_u}, |
||||
|
{UTF8('ú'), 'u', ACUTE, mid_u}, |
||||
|
{UTF8('û'), 'u', CIRCUMFLEX, mid_u}, |
||||
|
{UTF8('ü'), 'u', DIAERESIS, mid_u}, |
||||
|
{UTF8('ý'), 'y', ACUTE, mid_y}, |
||||
|
{UTF8('þ'), 0 , SML_THORN, 25 }, |
||||
|
{UTF8('ÿ'), 'y', DIAERESIS, mid_y} |
||||
|
}; |
||||
|
|
||||
|
static_assert(UTF8('¡') == 0xC2A1, "Incorrect encoding for character"); |
||||
|
|
||||
|
/* Compile-time check that the table is in sorted order */ |
||||
|
|
||||
|
constexpr bool is_sorted(size_t n) { |
||||
|
return n < 2 ? true : char_recipe[n-2].unicode < char_recipe[n-1].unicode && is_sorted(n-1); |
||||
|
} |
||||
|
|
||||
|
static_assert(is_sorted(NUM_ELEMENTS(char_recipe)), "The table must be sorted by unicode value"); |
||||
|
|
||||
|
/* Performs a binary search to find a unicode character in the table */ |
||||
|
|
||||
|
static int8_t find_char_data(FTDI::utf8_char_t c) { |
||||
|
int8_t min = 0, max = NUM_ELEMENTS(char_recipe), index; |
||||
|
for (;;) { |
||||
|
index = (min + max)/2; |
||||
|
const uint16_t char_at = pgm_read_word(&char_recipe[index].unicode); |
||||
|
if (char_at == c) break; |
||||
|
if (min == max) return -1; |
||||
|
if (c > char_at) |
||||
|
min = index + 1; |
||||
|
else |
||||
|
max = index; |
||||
|
} |
||||
|
return index; |
||||
|
} |
||||
|
|
||||
|
static void get_char_data(uint8_t index, uint8_t &std_char, uint8_t &alt_char, uint8_t &alt_data) { |
||||
|
std_char = pgm_read_byte(&char_recipe[index].std_char); |
||||
|
alt_char = pgm_read_byte(&char_recipe[index].alt_char); |
||||
|
alt_data = pgm_read_byte(&char_recipe[index].alt_data); |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Load bitmap data into RAMG. This function is called once at the start |
||||
|
* of the program. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* addr - Address in RAMG where the font data is written |
||||
|
*/ |
||||
|
|
||||
|
void FTDI::WesternCharSet::load_data(uint32_t addr) { |
||||
|
// Load the alternative font metrics
|
||||
|
CLCD::FontMetrics alt_fm; |
||||
|
alt_fm.ptr = addr + 148; |
||||
|
alt_fm.format = L4; |
||||
|
alt_fm.stride = 19; |
||||
|
alt_fm.width = 38; |
||||
|
alt_fm.height = 49; |
||||
|
for (uint8_t i = 0; i < 127; i++) { |
||||
|
alt_fm.char_widths[i] = 0; |
||||
|
} |
||||
|
// For special characters, copy the character widths from the char tables
|
||||
|
for (uint8_t i = 0; i < NUM_ELEMENTS(char_recipe); i++) { |
||||
|
uint8_t std_char, alt_char, alt_data; |
||||
|
get_char_data(i, std_char, alt_char, alt_data); |
||||
|
if (std_char == 0) |
||||
|
alt_fm.char_widths[alt_char] = alt_data; |
||||
|
} |
||||
|
CLCD::mem_write_bulk(addr, &alt_fm, 148); |
||||
|
|
||||
|
// Decode the RLE data and load it into RAMG as a bitmap
|
||||
|
write_rle_data(addr + 148, font, sizeof(font)); |
||||
|
|
||||
|
bitmap_addr = addr; |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Populates the bitmap handles for the custom into the display list. |
||||
|
* This function is called once at the start of each display list. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* cmd - Object used for writing to the FTDI chip command queue. |
||||
|
*/ |
||||
|
|
||||
|
void FTDI::WesternCharSet::load_bitmaps(CommandProcessor& cmd) { |
||||
|
CLCD::FontMetrics alt_fm; |
||||
|
alt_fm.ptr = bitmap_addr + 148; |
||||
|
alt_fm.format = L4; |
||||
|
alt_fm.stride = 19; |
||||
|
alt_fm.width = 38; |
||||
|
alt_fm.height = 49; |
||||
|
set_font_bitmap(cmd, alt_fm, alt_font); |
||||
|
} |
||||
|
|
||||
|
/**
|
||||
|
* Renders a character at location x and y. The x position is incremented |
||||
|
* by the width of the character. |
||||
|
* |
||||
|
* Parameters: |
||||
|
* |
||||
|
* cmd - If non-NULL the symbol is drawn to the screen. |
||||
|
* If NULL, only increment position for text measurement. |
||||
|
* |
||||
|
* x, y - The location at which to draw the character. On output, |
||||
|
* incremented to the location of the next character. |
||||
|
* |
||||
|
* fs - A scaling object used to scale the font. The display will |
||||
|
* already be configured to scale bitmaps, but positions |
||||
|
* must be scaled using fs.scale() |
||||
|
* |
||||
|
* c - The unicode code point to draw. If the renderer does not |
||||
|
* support the character, it should return false. |
||||
|
|
||||
|
* Returns: Whether the character was supported. |
||||
|
*/ |
||||
|
|
||||
|
bool FTDI::WesternCharSet::render_glyph(CommandProcessor* cmd, int &x, int &y, font_size_t fs, utf8_char_t c) { |
||||
|
|
||||
|
// A supported character?
|
||||
|
if (c < UTF8('¡') || c > UTF8('ÿ')) return false; |
||||
|
|
||||
|
int8_t index = find_char_data(c); |
||||
|
if (index == -1) return false; |
||||
|
|
||||
|
// Determine character characteristics
|
||||
|
uint8_t std_char, alt_char, alt_data; |
||||
|
get_char_data(index, std_char, alt_char, alt_data); |
||||
|
|
||||
|
bool base_special; |
||||
|
uint8_t base_width; |
||||
|
uint8_t base_char; |
||||
|
uint8_t accent_char; |
||||
|
int8_t accent_dx, accent_dy; |
||||
|
|
||||
|
if (std_char == 0) { |
||||
|
// Special character, non-accented
|
||||
|
base_width = alt_data; |
||||
|
base_special = true; |
||||
|
base_char = alt_char; |
||||
|
accent_char = 0; |
||||
|
if (c == UTF8('°')) |
||||
|
x -= fs.scale(deg_sign_leading); |
||||
|
} else { |
||||
|
// Regular character with accent:
|
||||
|
accent_dx = alt_data - mid_accent; |
||||
|
accent_dy = isupper(std_char) ? -7 : 0; |
||||
|
accent_char = alt_char; |
||||
|
base_width = StandardCharSet::std_char_width(std_char); |
||||
|
base_special = std_char == 'i'; |
||||
|
base_char = base_special ? NO_DOT_I : std_char; |
||||
|
} |
||||
|
|
||||
|
// If cmd != NULL, draw the glyph to the screen
|
||||
|
if (cmd) { |
||||
|
ext_vertex2ii(*cmd, x, y, base_special ? alt_font : std_font, base_char); |
||||
|
if (accent_char) |
||||
|
ext_vertex2ii(*cmd, x + fs.scale(accent_dx), y + fs.scale(accent_dy), alt_font, accent_char); |
||||
|
} |
||||
|
|
||||
|
// Increment X to the next character position
|
||||
|
x += fs.scale(base_width); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8 && TOUCH_UI_UTF8_WESTERN_CHARSET
|
@ -0,0 +1,29 @@ |
|||||
|
/**********************
|
||||
|
* western_char_set.h * |
||||
|
**********************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
namespace FTDI { |
||||
|
class WesternCharSet { |
||||
|
public: |
||||
|
static void load_data(uint32_t addr); |
||||
|
static void load_bitmaps(CommandProcessor&); |
||||
|
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t); |
||||
|
}; |
||||
|
} |
@ -0,0 +1,665 @@ |
|||||
|
/********************************
|
||||
|
* western_european_bitmap_31.h * |
||||
|
********************************/ |
||||
|
|
||||
|
/****************************************************************************
|
||||
|
* Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * |
||||
|
* * |
||||
|
* This program is free software: you can redistribute it and/or modify * |
||||
|
* it under the terms of the GNU General Public License as published by * |
||||
|
* the Free Software Foundation, either version 3 of the License, or * |
||||
|
* (at your option) any later version. * |
||||
|
* * |
||||
|
* This program is distributed in the hope that it will be useful, * |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||||
|
* GNU General Public License for more details. * |
||||
|
* * |
||||
|
* To view a copy of the GNU General Public License, go to the following * |
||||
|
* location: <http://www.gnu.org/licenses/>. *
|
||||
|
****************************************************************************/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
/* This is a dump of "font_bitmaps/western_european_bitmap_31.png"
|
||||
|
* using the tool "bitmap2cpp.py". The tool converts the image into |
||||
|
* 16-level grayscale and packs two pixels per byte. The resulting |
||||
|
* bytes are then RLE compressed to yield (count, byte) pairs. |
||||
|
*/ |
||||
|
|
||||
|
const unsigned char font[] PROGMEM = { |
||||
|
0x76, 0x00, 0x01, 0x08, 0x01, 0xee, 0x01, 0xe5, 0x11, 0x00, 0x01, 0xaf, |
||||
|
0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xd0, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xf9, 0x11, 0x00, 0x01, 0x2e, |
||||
|
0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf2, |
||||
|
0x11, 0x00, 0x01, 0x5f, 0x01, 0xfd, 0x11, 0x00, 0x01, 0x06, 0x01, 0x99, |
||||
|
0x01, 0x40, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x20, 0x00, 0x01, 0x9e, |
||||
|
0x01, 0xee, 0x01, 0x50, 0x0f, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0xcf, |
||||
|
0x01, 0xfc, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xd1, 0x10, 0x00, |
||||
|
0x01, 0x4f, 0x01, 0xfe, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x01, 0x01, 0xef, |
||||
|
0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xaa, 0x01, 0x40, 0xff, 0x00, |
||||
|
0xff, 0x00, 0xff, 0x00, 0x1f, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x10, 0x00, |
||||
|
0x01, 0x07, 0x02, 0xff, 0x01, 0x60, 0x0f, 0x00, 0x01, 0x2f, 0x02, 0xff, |
||||
|
0x01, 0xf2, 0x0f, 0x00, 0x01, 0xcf, 0x01, 0xf6, 0x01, 0x6f, 0x01, 0xfb, |
||||
|
0x0e, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x0a, 0x01, 0xff, |
||||
|
0x01, 0x60, 0x0d, 0x00, 0x01, 0x1f, 0x01, 0xfd, 0x01, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xdf, 0x01, 0xf1, 0x0d, 0x00, 0x01, 0xbf, 0x01, 0xf3, 0x02, 0x00, |
||||
|
0x01, 0x3f, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x02, 0x01, 0x99, 0x01, 0x50, |
||||
|
0x02, 0x00, 0x01, 0x05, 0x01, 0x99, 0x01, 0x20, 0xff, 0x00, 0xff, 0x00, |
||||
|
0xff, 0x00, 0x1f, 0x00, 0x01, 0x11, 0x0d, 0x00, 0x01, 0x09, 0x01, 0xff, |
||||
|
0x01, 0xc3, 0x02, 0x00, 0x01, 0xff, 0x01, 0x80, 0x0c, 0x00, 0x01, 0xaf, |
||||
|
0x02, 0xff, 0x01, 0x50, 0x01, 0x01, 0x01, 0xff, 0x01, 0x60, 0x0b, 0x00, |
||||
|
0x01, 0x02, 0x01, 0xff, 0x01, 0xd9, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x07, |
||||
|
0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x20, |
||||
|
0x01, 0x3e, 0x02, 0xff, 0x01, 0xfd, 0x0c, 0x00, 0x01, 0x09, 0x01, 0xfe, |
||||
|
0x01, 0x00, 0x01, 0x02, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, |
||||
|
0x01, 0x07, 0x01, 0xa8, 0x02, 0x00, 0x01, 0x06, 0x01, 0x98, 0x01, 0x20, |
||||
|
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x41, 0x00, 0x02, 0x44, 0x02, 0x00, |
||||
|
0x02, 0x44, 0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, |
||||
|
0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00, |
||||
|
0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00, 0x02, 0xcc, |
||||
|
0x01, 0x10, 0x01, 0x01, 0x02, 0xcc, 0xff, 0x00, 0xff, 0x00, 0xf6, 0x00, |
||||
|
0x01, 0x13, 0x01, 0x30, 0x10, 0x00, 0x01, 0x2b, 0x02, 0xff, 0x01, 0xa1, |
||||
|
0x0e, 0x00, 0x01, 0x02, 0x01, 0xef, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x10, |
||||
|
0x0d, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x94, 0x01, 0x5a, 0x01, 0xff, |
||||
|
0x01, 0xb0, 0x0d, 0x00, 0x01, 0x4f, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x9f, |
||||
|
0x01, 0xf2, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xf0, 0x02, 0x00, 0x01, 0x2f, |
||||
|
0x01, 0xf6, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xe0, 0x02, 0x00, 0x01, 0x0f, |
||||
|
0x01, 0xf7, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xf2, 0x02, 0x00, 0x01, 0x4f, |
||||
|
0x01, 0xf5, 0x0d, 0x00, 0x01, 0x2f, 0x01, 0xfc, 0x01, 0x10, 0x01, 0x02, |
||||
|
0x01, 0xdf, 0x01, 0xf0, 0x0d, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x9f, 0x02, 0xff, |
||||
|
0x01, 0xf8, 0x0f, 0x00, 0x01, 0x03, 0x01, 0x9c, 0x01, 0xc9, 0x01, 0x30, |
||||
|
0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x93, 0x00, |
||||
|
0x01, 0x06, 0x01, 0xff, 0x01, 0x20, 0x11, 0x00, 0x01, 0xcf, 0x01, 0xc0, |
||||
|
0x11, 0x00, 0x01, 0x3f, 0x01, 0xf6, 0x11, 0x00, 0x01, 0x0f, 0x01, 0xfb, |
||||
|
0x11, 0x00, 0x01, 0x3f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0x07, 0x01, 0xd9, |
||||
|
0x01, 0x89, 0x01, 0xff, 0x01, 0xfb, 0x0e, 0x00, 0x01, 0x07, 0x03, 0xff, |
||||
|
0x01, 0xf3, 0x0e, 0x00, 0x01, 0x04, 0x01, 0xbd, 0x01, 0xee, 0x01, 0xd9, |
||||
|
0x01, 0x20, 0xff, 0x00, 0x61, 0x00, 0x01, 0x01, 0x01, 0x99, 0x01, 0x96, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0xff, 0x00, 0x58, 0x00, |
||||
|
0x01, 0x35, 0x01, 0x66, 0x01, 0x52, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xaf, |
||||
|
0x03, 0xff, 0x01, 0xe7, 0x0d, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xc1, |
||||
|
0x0b, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfc, 0x01, 0xaa, 0x01, 0xdf, |
||||
|
0x01, 0xff, 0x01, 0xfc, 0x0b, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x01, 0x10, 0x01, 0x00, 0x01, 0x02, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x70, |
||||
|
0x0a, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x0d, |
||||
|
0x01, 0xff, 0x01, 0xe0, 0x0a, 0x00, 0x01, 0xef, 0x01, 0xff, 0x04, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x01, 0x02, 0x01, 0xff, |
||||
|
0x01, 0xfb, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf7, 0x09, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x03, 0x00, 0x01, 0x03, 0x01, 0x9e, |
||||
|
0x01, 0xff, 0x01, 0xf8, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x02, 0x00, 0x01, 0x01, 0x01, 0xaf, 0x02, 0xff, 0x01, 0xd7, 0x09, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, 0x01, 0xff, |
||||
|
0x01, 0xfc, 0x01, 0x50, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x02, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x70, 0x0b, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfa, |
||||
|
0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, |
||||
|
0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x02, |
||||
|
0x02, 0xff, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x02, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0xf8, 0x0b, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, 0x02, 0xff, 0x01, 0xd3, |
||||
|
0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xcf, 0x02, 0xff, 0x01, 0x70, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x03, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfb, 0x09, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x2b, 0x02, 0xff, |
||||
|
0x01, 0xb0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, |
||||
|
0x01, 0x6f, 0x01, 0xff, 0x01, 0xf6, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xff, |
||||
|
0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xbf, |
||||
|
0x01, 0xff, 0x01, 0x10, 0x07, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x02, 0x01, 0x84, 0x03, 0x00, |
||||
|
0x01, 0x2d, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x01, 0x02, 0x01, 0xff, 0x01, 0xec, 0x01, 0xa9, 0x01, 0xac, |
||||
|
0x02, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x01, 0x02, 0x05, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x08, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xee, 0x01, 0xe7, 0x01, 0x01, 0x01, 0xbf, 0x03, 0xff, 0x01, 0xfe, |
||||
|
0x01, 0x80, 0x0e, 0x00, 0x01, 0x35, 0x01, 0x78, 0x01, 0x76, 0x01, 0x30, |
||||
|
0xff, 0x00, 0x48, 0x00, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x47, 0x01, 0x9a, |
||||
|
0x01, 0xba, 0x01, 0x95, 0x01, 0x10, 0x02, 0x00, 0x01, 0x07, 0x01, 0xf8, |
||||
|
0x08, 0x00, 0x01, 0x02, 0x01, 0xae, 0x04, 0xff, 0x01, 0xfc, 0x01, 0x50, |
||||
|
0x01, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0x8f, |
||||
|
0x06, 0xff, 0x01, 0xfc, 0x01, 0x23, 0x01, 0xff, 0x01, 0xf6, 0x07, 0x00, |
||||
|
0x01, 0x1c, 0x03, 0xff, 0x01, 0xca, 0x01, 0x9b, 0x01, 0xdf, 0x02, 0xff, |
||||
|
0x01, 0xfe, 0x01, 0xff, 0x01, 0x80, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0xfd, 0x01, 0x50, 0x02, 0x00, 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff, |
||||
|
0x01, 0xfa, 0x07, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0x90, 0x04, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0xf3, 0x07, 0x00, 0x01, 0x5f, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xfc, |
||||
|
0x07, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x06, |
||||
|
0x03, 0xff, 0x01, 0x60, 0x05, 0x00, 0x01, 0x04, 0x02, 0xff, 0x01, 0x30, |
||||
|
0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0, |
||||
|
0x05, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x02, |
||||
|
0x01, 0xef, 0x01, 0xf7, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, |
||||
|
0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x05, 0x00, 0x01, 0x1d, 0x01, 0xff, |
||||
|
0x01, 0xa0, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f, |
||||
|
0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x01, 0x00, |
||||
|
0x01, 0x09, 0x01, 0xff, 0x01, 0xfb, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, |
||||
|
0x01, 0xe0, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, |
||||
|
0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff, |
||||
|
0x01, 0xc0, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xfe, 0x01, 0x20, 0x01, 0x00, |
||||
|
0x01, 0x03, 0x02, 0xff, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0, |
||||
|
0x03, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf4, 0x02, 0x00, 0x01, 0x02, |
||||
|
0x02, 0xff, 0x01, 0x10, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, |
||||
|
0x03, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0x01, |
||||
|
0x02, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, |
||||
|
0x02, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x02, |
||||
|
0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0, |
||||
|
0x02, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xb0, 0x03, 0x00, 0x01, 0x03, |
||||
|
0x02, 0xff, 0x01, 0x10, 0x04, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xc0, |
||||
|
0x02, 0x00, 0x01, 0xbf, 0x01, 0xfd, 0x04, 0x00, 0x01, 0x04, 0x02, 0xff, |
||||
|
0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x08, |
||||
|
0x01, 0xff, 0x01, 0xe1, 0x04, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, |
||||
|
0x05, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x6f, |
||||
|
0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, |
||||
|
0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x01, 0x04, 0x01, 0xff, |
||||
|
0x01, 0xf5, 0x05, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf7, 0x05, 0x00, |
||||
|
0x01, 0x09, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x2e, 0x01, 0xff, 0x01, 0x70, |
||||
|
0x05, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0x03, |
||||
|
0x02, 0xff, 0x01, 0xef, 0x01, 0xf9, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0xb0, 0x06, 0x00, 0x01, 0xcf, 0x02, 0xff, 0x01, 0xc0, 0x05, 0x00, |
||||
|
0x01, 0x06, 0x02, 0xff, 0x01, 0x40, 0x06, 0x00, 0x01, 0x2f, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xfb, 0x07, 0x00, |
||||
|
0x01, 0x0b, 0x02, 0xff, 0x01, 0xd2, 0x04, 0x00, 0x01, 0x06, 0x02, 0xff, |
||||
|
0x01, 0xe1, 0x07, 0x00, 0x01, 0x5f, 0x03, 0xff, 0x01, 0x93, 0x02, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xcf, 0x02, 0xff, 0x01, 0x30, 0x06, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xff, 0x01, 0xfb, 0x03, 0xff, 0x01, 0xfd, 0x01, 0xde, 0x03, 0xff, |
||||
|
0x01, 0xe3, 0x07, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0x80, 0x01, 0x4d, |
||||
|
0x06, 0xff, 0x01, 0xfa, 0x01, 0x10, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xfb, |
||||
|
0x02, 0x00, 0x01, 0x5c, 0x04, 0xff, 0x01, 0xe9, 0x01, 0x30, 0x08, 0x00, |
||||
|
0x01, 0x1c, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x04, 0x01, 0x67, 0x01, 0x86, |
||||
|
0x01, 0x53, 0x0b, 0x00, 0x01, 0x10, 0xff, 0x00, 0xbd, 0x00, 0x01, 0x02, |
||||
|
0x01, 0x20, 0x0c, 0x00, 0x01, 0x02, 0x01, 0x32, 0x01, 0x10, 0x02, 0x00, |
||||
|
0x01, 0x1e, 0x01, 0xe3, 0x0a, 0x00, 0x01, 0x01, 0x01, 0x7c, 0x02, 0xff, |
||||
|
0x01, 0xfd, 0x01, 0x82, 0x01, 0x00, 0x01, 0xcf, 0x01, 0xf7, 0x0a, 0x00, |
||||
|
0x01, 0x6e, 0x05, 0xff, 0x01, 0x8a, 0x01, 0xff, 0x01, 0xa0, 0x09, 0x00, |
||||
|
0x01, 0x08, 0x07, 0xff, 0x01, 0xfc, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff, |
||||
|
0x01, 0xfc, 0x01, 0x50, 0x01, 0x00, 0x01, 0x3a, 0x02, 0xff, 0x01, 0xf1, |
||||
|
0x09, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x90, 0x03, 0x00, 0x01, 0x7f, |
||||
|
0x01, 0xff, 0x01, 0xf5, 0x09, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfc, |
||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfd, 0x09, 0x00, |
||||
|
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf3, 0x03, 0x00, 0x01, 0x0b, 0x03, 0xff, |
||||
|
0x01, 0x30, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xd0, 0x03, 0x00, |
||||
|
0x01, 0x9f, 0x01, 0xfa, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x80, 0x08, 0x00, |
||||
|
0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, 0x02, 0x00, 0x01, 0x06, 0x01, 0xff, |
||||
|
0x01, 0xc0, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x9f, |
||||
|
0x01, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x3f, 0x01, 0xfe, 0x01, 0x10, |
||||
|
0x01, 0x1f, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xf3, 0x01, 0x00, |
||||
|
0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x30, 0x01, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, |
||||
|
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, |
||||
|
0x01, 0x30, 0x01, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x0f, |
||||
|
0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40, |
||||
|
0x01, 0x08, 0x01, 0xff, 0x01, 0xb0, 0x02, 0x00, 0x01, 0x0f, 0x01, 0xff, |
||||
|
0x01, 0xe0, 0x08, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x60, 0x01, 0x5f, |
||||
|
0x01, 0xfd, 0x03, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x08, 0x00, |
||||
|
0x01, 0x4f, 0x01, 0xff, 0x01, 0xa3, 0x01, 0xff, 0x01, 0xe2, 0x03, 0x00, |
||||
|
0x01, 0x7f, 0x01, 0xff, 0x01, 0x90, 0x08, 0x00, 0x01, 0x0f, 0x01, 0xff, |
||||
|
0x01, 0xfe, 0x01, 0xff, 0x01, 0x40, 0x03, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x08, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0xf6, 0x03, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, |
||||
|
0x01, 0xb0, 0x03, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xf8, 0x0a, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x05, 0x01, 0xef, |
||||
|
0x01, 0xff, 0x01, 0xd0, 0x09, 0x00, 0x01, 0x04, 0x03, 0xff, 0x01, 0xfc, |
||||
|
0x01, 0xab, 0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x09, 0x00, |
||||
|
0x01, 0x2f, 0x01, 0xff, 0x01, 0xaf, 0x05, 0xff, 0x01, 0xd2, 0x09, 0x00, |
||||
|
0x01, 0x01, 0x01, 0xdf, 0x01, 0xf5, 0x01, 0x04, 0x01, 0xbf, 0x03, 0xff, |
||||
|
0x01, 0xd6, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0x70, 0x01, 0x00, |
||||
|
0x01, 0x01, 0x01, 0x46, 0x01, 0x76, 0x01, 0x52, 0x0c, 0x00, 0x01, 0x28, |
||||
|
0xff, 0x00, 0x48, 0x00, 0x01, 0x14, 0x0b, 0x44, 0x01, 0x41, 0x06, 0x00, |
||||
|
0x01, 0x8f, 0x0b, 0xff, 0x01, 0xf3, 0x06, 0x00, 0x01, 0xef, 0x0b, 0xff, |
||||
|
0x01, 0xf3, 0x05, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0xee, 0x09, 0xff, |
||||
|
0x01, 0xf3, 0x05, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf5, 0x01, 0x00, |
||||
|
0x01, 0xdf, 0x01, 0xff, 0x01, 0x63, 0x06, 0x33, 0x01, 0x30, 0x05, 0x00, |
||||
|
0x01, 0x3f, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x0c, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, |
||||
|
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x01, 0x02, 0xff, |
||||
|
0x01, 0x10, 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, |
||||
|
0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x0b, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf3, 0x02, 0x00, |
||||
|
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff, |
||||
|
0x01, 0xd0, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x0a, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfe, 0x03, 0x00, |
||||
|
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff, |
||||
|
0x01, 0xf9, 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xed, 0x06, 0xdd, |
||||
|
0x01, 0x80, 0x03, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x03, 0x00, |
||||
|
0x01, 0xdf, 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x6f, 0x01, 0xff, |
||||
|
0x01, 0xb0, 0x03, 0x00, 0x01, 0xdf, 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0x40, 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff, |
||||
|
0x01, 0xa8, 0x06, 0x88, 0x01, 0x50, 0x02, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xfe, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x09, 0x00, |
||||
|
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x09, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf4, 0x04, 0x33, |
||||
|
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x09, 0x00, 0x01, 0x7f, 0x08, 0xff, |
||||
|
0x01, 0x40, 0x09, 0x00, 0x01, 0xef, 0x08, 0xff, 0x01, 0x40, 0x08, 0x00, |
||||
|
0x01, 0x05, 0x09, 0xff, 0x01, 0x40, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x05, 0x33, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x08, 0x00, |
||||
|
0x01, 0x2f, 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0xdf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, |
||||
|
0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x08, 0x00, 0x02, 0xff, 0x01, 0x20, |
||||
|
0x05, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x07, 0x00, 0x01, 0x06, |
||||
|
0x01, 0xff, 0x01, 0xfb, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xa8, |
||||
|
0x06, 0x88, 0x01, 0x85, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf4, 0x06, 0x00, |
||||
|
0x01, 0xdf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe0, |
||||
|
0x06, 0x00, 0x01, 0xdf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x8d, 0x01, 0xdd, |
||||
|
0x01, 0x60, 0x06, 0x00, 0x01, 0xbd, 0x08, 0xdd, 0x01, 0xd8, 0xff, 0x00, |
||||
|
0xe0, 0x00, 0x01, 0x01, 0x01, 0x34, 0x01, 0x31, 0x06, 0x00, 0x01, 0x12, |
||||
|
0x01, 0x42, 0x01, 0x10, 0x05, 0x00, 0x01, 0x02, 0x01, 0x7b, 0x01, 0xef, |
||||
|
0x02, 0xff, 0x01, 0xfb, 0x01, 0x60, 0x02, 0x00, 0x01, 0x03, 0x01, 0x9e, |
||||
|
0x02, 0xff, 0x01, 0xfd, 0x01, 0x81, 0x04, 0x00, 0x01, 0xbf, 0x05, 0xff, |
||||
|
0x01, 0xfe, 0x01, 0x40, 0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, 0x01, 0x60, |
||||
|
0x03, 0x00, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xee, 0x03, 0xff, 0x01, 0xf5, |
||||
|
0x01, 0x1d, 0x03, 0xff, 0x01, 0xef, 0x02, 0xff, 0x01, 0xf8, 0x03, 0x00, |
||||
|
0x01, 0xdf, 0x01, 0xb6, 0x01, 0x20, 0x01, 0x00, 0x01, 0x01, 0x01, 0x5d, |
||||
|
0x02, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xe7, 0x01, 0x20, 0x01, 0x00, |
||||
|
0x01, 0x29, 0x02, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x71, 0x05, 0x00, |
||||
|
0x01, 0xaf, 0x02, 0xff, 0x01, 0xfb, 0x01, 0x10, 0x03, 0x00, 0x01, 0x4f, |
||||
|
0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x0d, 0x02, 0xff, 0x01, 0xd0, |
||||
|
0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x08, 0x00, 0x01, 0x06, |
||||
|
0x02, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0xef, 0x01, 0xfd, 0x08, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x06, 0x00, 0x01, 0x9f, 0x01, 0xff, |
||||
|
0x04, 0x00, 0x01, 0x02, 0x01, 0x45, 0x02, 0x66, 0x01, 0x67, 0x01, 0xff, |
||||
|
0x01, 0xf9, 0x06, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x03, 0x00, 0x01, 0x4a, |
||||
|
0x06, 0xff, 0x01, 0xfb, 0x03, 0x66, 0x01, 0x67, 0x02, 0x77, 0x01, 0xaf, |
||||
|
0x01, 0xff, 0x02, 0x00, 0x01, 0x1b, 0x10, 0xff, 0x01, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xdf, 0x02, 0xff, 0x01, 0xcb, 0x01, 0xa8, 0x01, 0x88, 0x01, 0x89, |
||||
|
0x0a, 0xff, 0x01, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x40, |
||||
|
0x03, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfa, 0x08, 0x77, 0x01, 0x00, |
||||
|
0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x09, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x60, 0x04, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xff, 0x01, 0xfa, 0x09, 0x00, 0x01, 0x7f, 0x01, 0xff, |
||||
|
0x01, 0x30, 0x04, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, |
||||
|
0x01, 0x7f, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, |
||||
|
0x01, 0x50, 0x08, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, 0x04, 0x00, |
||||
|
0x01, 0x8f, 0x02, 0xff, 0x01, 0xe1, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xff, |
||||
|
0x01, 0xd0, 0x03, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, 0x01, 0xff, |
||||
|
0x01, 0xfc, 0x01, 0x10, 0x05, 0x00, 0x01, 0x45, 0x01, 0x00, 0x01, 0x0d, |
||||
|
0x01, 0xff, 0x01, 0xfc, 0x01, 0x20, 0x01, 0x00, 0x01, 0x01, 0x01, 0x9f, |
||||
|
0x01, 0xff, 0x01, 0xa2, 0x02, 0xff, 0x01, 0xe6, 0x01, 0x10, 0x02, 0x00, |
||||
|
0x01, 0x02, 0x01, 0x8d, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, 0x02, 0xff, |
||||
|
0x01, 0xfd, 0x01, 0xab, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, |
||||
|
0x01, 0x3f, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xba, 0x01, 0xbc, 0x02, 0xff, |
||||
|
0x01, 0xf8, 0x02, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xa0, 0x01, 0x00, |
||||
|
0x01, 0x02, 0x01, 0xcf, 0x06, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xbf, 0x03, 0xff, 0x01, 0xb4, 0x03, 0x00, 0x01, 0x05, 0x01, 0xbf, |
||||
|
0x04, 0xff, 0x01, 0xb7, 0x01, 0x10, 0x03, 0x00, 0x01, 0x01, 0x01, 0x46, |
||||
|
0x01, 0x76, 0x01, 0x41, 0x06, 0x00, 0x01, 0x35, 0x01, 0x67, 0x01, 0x64, |
||||
|
0x01, 0x20, 0xff, 0x00, 0x48, 0x00, 0x01, 0x34, 0x03, 0x44, 0x01, 0x43, |
||||
|
0x01, 0x21, 0x0d, 0x00, 0x01, 0xbf, 0x05, 0xff, 0x01, 0xfe, 0x01, 0xb8, |
||||
|
0x01, 0x40, 0x0a, 0x00, 0x01, 0xbf, 0x07, 0xff, 0x01, 0xfe, 0x01, 0x81, |
||||
|
0x09, 0x00, 0x01, 0xbf, 0x08, 0xff, 0x01, 0xfe, 0x01, 0x60, 0x08, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0x61, 0x02, 0x11, 0x01, 0x23, 0x01, 0x58, |
||||
|
0x01, 0xcf, 0x02, 0xff, 0x01, 0xf9, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x04, 0x00, 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff, 0x01, 0x80, |
||||
|
0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x05, 0x00, 0x01, 0x04, |
||||
|
0x01, 0xef, 0x01, 0xff, 0x01, 0xf4, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x06, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfd, 0x07, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, 0x01, 0x06, 0x02, 0xff, |
||||
|
0x01, 0x50, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, |
||||
|
0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x07, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x3f, 0x01, 0xff, |
||||
|
0x01, 0xf3, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, |
||||
|
0x01, 0x0f, 0x01, 0xff, 0x01, 0xf5, 0x04, 0x00, 0x01, 0x23, 0x01, 0x33, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0x73, 0x02, 0x33, 0x01, 0x30, 0x04, 0x00, |
||||
|
0x01, 0x0d, 0x01, 0xff, 0x01, 0xf6, 0x04, 0x00, 0x01, 0xcf, 0x06, 0xff, |
||||
|
0x01, 0xf2, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, |
||||
|
0x01, 0xcf, 0x06, 0xff, 0x01, 0xf2, 0x04, 0x00, 0x01, 0x0b, 0x01, 0xff, |
||||
|
0x01, 0xf9, 0x04, 0x00, 0x01, 0x9b, 0x01, 0xbb, 0x01, 0xef, 0x01, 0xff, |
||||
|
0x01, 0xdb, 0x02, 0xbb, 0x01, 0xb1, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, |
||||
|
0x01, 0x0d, 0x01, 0xff, 0x01, 0xf7, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x07, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf6, 0x06, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x1f, 0x01, 0xff, |
||||
|
0x01, 0xf4, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, |
||||
|
0x01, 0x5f, 0x01, 0xff, 0x01, 0xf1, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x07, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xd0, 0x06, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, 0x01, 0x01, 0x02, 0xff, |
||||
|
0x01, 0x80, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, |
||||
|
0x01, 0x0b, 0x02, 0xff, 0x01, 0x20, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x06, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xf9, 0x07, 0x00, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x05, 0x00, 0x01, 0x1a, 0x02, 0xff, |
||||
|
0x01, 0xe1, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x04, 0x00, |
||||
|
0x01, 0x29, 0x03, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0xa7, 0x01, 0x77, 0x01, 0x78, 0x01, 0x9a, 0x01, 0xbf, 0x03, 0xff, |
||||
|
0x01, 0xe3, 0x08, 0x00, 0x01, 0xbf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x10, |
||||
|
0x08, 0x00, 0x01, 0xbf, 0x07, 0xff, 0x01, 0xd8, 0x01, 0x10, 0x09, 0x00, |
||||
|
0x01, 0xad, 0x03, 0xdd, 0x01, 0xdc, 0x01, 0xbb, 0x01, 0xa7, 0x01, 0x41, |
||||
|
0xff, 0x00, 0x50, 0x00, 0x01, 0x38, 0x01, 0x88, 0x01, 0x81, 0x10, 0x00, |
||||
|
0x01, 0x0b, 0x01, 0xff, 0x01, 0xfc, 0x03, 0x00, 0x01, 0x5a, 0x01, 0x40, |
||||
|
0x0c, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x04, 0x01, 0xaf, |
||||
|
0x01, 0xff, 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0xfc, |
||||
|
0x02, 0xff, 0x01, 0xd8, 0x01, 0x20, 0x0c, 0x00, 0x01, 0x07, 0x02, 0xff, |
||||
|
0x01, 0xfd, 0x01, 0x82, 0x0d, 0x00, 0x01, 0x5a, 0x03, 0xff, 0x01, 0xf4, |
||||
|
0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x87, 0x02, 0xff, |
||||
|
0x01, 0x30, 0x0c, 0x00, 0x01, 0x6f, 0x01, 0xe9, 0x01, 0x30, 0x01, 0x00, |
||||
|
0x01, 0x8f, 0x01, 0xff, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x03, 0x03, 0x00, |
||||
|
0x01, 0x0a, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x23, |
||||
|
0x01, 0x44, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x02, |
||||
|
0x01, 0x9e, 0x04, 0xff, 0x01, 0xf7, 0x0c, 0x00, 0x01, 0x7f, 0x06, 0xff, |
||||
|
0x01, 0x30, 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfe, 0x01, 0xcb, |
||||
|
0x01, 0xdf, 0x02, 0xff, 0x01, 0xd0, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff, |
||||
|
0x01, 0xfb, 0x01, 0x30, 0x02, 0x00, 0x01, 0x4e, 0x01, 0xff, 0x01, 0xf5, |
||||
|
0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0x70, 0x03, 0x00, 0x01, 0x05, |
||||
|
0x01, 0xff, 0x01, 0xfd, 0x09, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfa, |
||||
|
0x05, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0x20, 0x08, 0x00, 0x01, 0x0f, |
||||
|
0x01, 0xff, 0x01, 0xf1, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, |
||||
|
0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x05, 0x00, 0x01, 0x4f, |
||||
|
0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, |
||||
|
0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x9f, |
||||
|
0x01, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, |
||||
|
0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x05, 0x00, 0x01, 0x0e, |
||||
|
0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, |
||||
|
0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x9f, |
||||
|
0x01, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xe0, |
||||
|
0x08, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, 0x05, 0x00, 0x01, 0x2f, |
||||
|
0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, |
||||
|
0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x90, 0x08, 0x00, 0x01, 0x0f, |
||||
|
0x01, 0xff, 0x01, 0xf1, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, |
||||
|
0x08, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xf9, 0x04, 0x00, 0x01, 0x05, |
||||
|
0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0x60, |
||||
|
0x03, 0x00, 0x01, 0x3e, 0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x7f, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x01, 0x20, 0x01, 0x00, 0x01, 0x07, 0x02, 0xff, |
||||
|
0x01, 0xb0, 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xbd, |
||||
|
0x02, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x7f, 0x05, 0xff, |
||||
|
0x01, 0xb0, 0x0c, 0x00, 0x01, 0x02, 0x01, 0xae, 0x03, 0xff, 0x01, 0xb4, |
||||
|
0x0f, 0x00, 0x01, 0x35, 0x01, 0x65, 0x01, 0x40, 0xff, 0x00, 0x51, 0x00, |
||||
|
0x02, 0x55, 0x11, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x05, 0xff, |
||||
|
0x01, 0xed, 0x01, 0xa7, 0x01, 0x10, 0x0b, 0x00, 0x07, 0xff, 0x01, 0xfa, |
||||
|
0x01, 0x10, 0x0a, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x65, 0x01, 0x55, 0x01, 0x56, 0x01, 0x7a, 0x02, 0xff, 0x01, 0xfe, |
||||
|
0x01, 0x10, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x1b, |
||||
|
0x02, 0xff, 0x01, 0x80, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0xf0, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, |
||||
|
0x04, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x09, 0x00, |
||||
|
0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf7, |
||||
|
0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0f, |
||||
|
0x01, 0xff, 0x01, 0xf6, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, |
||||
|
0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, |
||||
|
0x04, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xf0, 0x09, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x03, 0x00, 0x01, 0x1b, 0x02, 0xff, 0x01, 0x80, 0x09, 0x00, |
||||
|
0x02, 0xff, 0x01, 0x65, 0x02, 0x55, 0x01, 0x7a, 0x02, 0xff, 0x01, 0xfe, |
||||
|
0x01, 0x10, 0x09, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, 0x07, 0xff, |
||||
|
0x01, 0xfa, 0x01, 0x10, 0x0a, 0x00, 0x05, 0xff, 0x01, 0xed, 0x01, 0xa7, |
||||
|
0x01, 0x10, 0x0b, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x20, 0x10, 0x00, 0x02, 0xcc, 0x01, 0x10, 0xff, 0x00, 0x53, 0x00, |
||||
|
0x01, 0x02, 0x01, 0x99, 0x01, 0x94, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, |
||||
|
0x01, 0x13, 0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x01, 0x00, 0x01, 0x5c, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x70, |
||||
|
0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x0a, 0x04, 0xff, |
||||
|
0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, |
||||
|
0x01, 0xaf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xe1, |
||||
|
0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xc3, |
||||
|
0x02, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x03, |
||||
|
0x02, 0xff, 0x01, 0xfa, 0x03, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, |
||||
|
0x01, 0x60, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xe0, 0x04, 0x00, |
||||
|
0x01, 0x5f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, |
||||
|
0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf3, 0x08, 0x00, |
||||
|
0x01, 0x03, 0x02, 0xff, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf7, |
||||
|
0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x02, |
||||
|
0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x06, 0x00, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x08, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xff, 0x08, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xfe, |
||||
|
0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, 0x01, 0xff, |
||||
|
0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, |
||||
|
0x01, 0x02, 0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, |
||||
|
0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03, |
||||
|
0x02, 0xff, 0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf3, |
||||
|
0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x5f, |
||||
|
0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xfa, |
||||
|
0x03, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0x60, 0x08, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xc3, 0x02, 0x00, |
||||
|
0x01, 0x6e, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xcf, 0x02, 0xff, |
||||
|
0x01, 0xe2, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x0b, |
||||
|
0x04, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x01, 0x00, 0x01, 0x6c, 0x02, 0xff, 0x01, 0xfe, 0x01, 0x70, |
||||
|
0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x23, |
||||
|
0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, |
||||
|
0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, |
||||
|
0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, |
||||
|
0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, |
||||
|
0x10, 0x00, 0x01, 0x01, 0x01, 0x66, 0x01, 0x63, 0xff, 0x00, 0x6c, 0x00, |
||||
|
0x01, 0x30, 0x03, 0x00, 0x01, 0x02, 0x0d, 0x00, 0x01, 0x08, 0x01, 0xa0, |
||||
|
0x02, 0x00, 0x01, 0x01, 0x01, 0xc6, 0x0d, 0x00, 0x01, 0xaf, 0x01, 0xa0, |
||||
|
0x02, 0x00, 0x01, 0x1d, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x1c, 0x01, 0xff, |
||||
|
0x01, 0xa0, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xf6, 0x0b, 0x00, |
||||
|
0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x3e, |
||||
|
0x01, 0xff, 0x01, 0xe2, 0x0b, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xf4, |
||||
|
0x01, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x0a, 0x00, |
||||
|
0x01, 0x04, 0x01, 0xef, 0x01, 0xfe, 0x01, 0x30, 0x01, 0x00, 0x01, 0x6f, |
||||
|
0x01, 0xff, 0x01, 0xd1, 0x0b, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd2, |
||||
|
0x01, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, 0x0b, 0x00, 0x01, 0x06, |
||||
|
0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x01, 0x00, 0x01, 0xaf, 0x01, 0xff, |
||||
|
0x01, 0xa0, 0x0b, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xd0, 0x02, 0x00, |
||||
|
0x01, 0xff, 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf8, |
||||
|
0x02, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0x50, 0x0c, 0x00, 0x01, 0xaf, |
||||
|
0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x1c, 0x01, 0xff, 0x01, 0xf6, |
||||
|
0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, 0x02, 0x00, 0x01, 0xbf, |
||||
|
0x01, 0xff, 0x01, 0x90, 0x0c, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xd1, |
||||
|
0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x05, |
||||
|
0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x01, 0x00, 0x01, 0x8f, 0x01, 0xff, |
||||
|
0x01, 0xb0, 0x0c, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, |
||||
|
0x01, 0x07, 0x01, 0xff, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x02, 0x01, 0xef, |
||||
|
0x01, 0xa0, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xf6, 0x0d, 0x00, 0x01, 0x1d, |
||||
|
0x01, 0xa0, 0x02, 0x00, 0x01, 0x04, 0x01, 0xe6, 0x0d, 0x00, 0x01, 0x01, |
||||
|
0x01, 0x60, 0x03, 0x00, 0x01, 0x24, 0xff, 0x00, 0xff, 0x00, 0x46, 0x00, |
||||
|
0x01, 0x20, 0x03, 0x00, 0x01, 0x20, 0x0d, 0x00, 0x01, 0x01, 0x01, 0xe3, |
||||
|
0x03, 0x00, 0x01, 0x5d, 0x01, 0x10, 0x0c, 0x00, 0x01, 0x01, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xf6, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xfe, 0x01, 0x30, |
||||
|
0x0c, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x2e, |
||||
|
0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, |
||||
|
0x01, 0x00, 0x01, 0x01, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x0c, 0x00, |
||||
|
0x01, 0x8f, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x00, 0x01, 0x0b, 0x01, 0xff, |
||||
|
0x01, 0xf9, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, |
||||
|
0x01, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x5f, |
||||
|
0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, |
||||
|
0x0c, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf5, 0x02, 0x00, 0x01, 0x9f, |
||||
|
0x01, 0xff, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x2d, 0x01, 0xff, 0x01, 0xf3, |
||||
|
0x01, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x10, 0x0a, 0x00, |
||||
|
0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0x40, 0x01, 0x00, 0x01, 0x5f, |
||||
|
0x01, 0xff, 0x01, 0xd2, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe3, |
||||
|
0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x0a, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x01, 0x00, 0x01, 0x9f, |
||||
|
0x01, 0xff, 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xc1, |
||||
|
0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf9, 0x0b, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x70, |
||||
|
0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0x90, 0x02, 0x00, 0x01, 0x5f, |
||||
|
0x01, 0xf6, 0x0c, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x5f, |
||||
|
0x01, 0x40, 0x0c, 0x00, 0x01, 0x01, 0x01, 0x50, 0x03, 0x00, 0x01, 0x43, |
||||
|
0xff, 0x00, 0xff, 0x00, 0x38, 0x00, 0x01, 0xad, 0x01, 0xdd, 0x01, 0x40, |
||||
|
0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, |
||||
|
0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, |
||||
|
0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x34, |
||||
|
0x01, 0x44, 0x01, 0x10, 0x49, 0x00, 0x01, 0x02, 0x01, 0x22, 0x11, 0x00, |
||||
|
0x01, 0x6f, 0x01, 0xff, 0x11, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x11, 0x00, |
||||
|
0x01, 0x7f, 0x01, 0xff, 0x01, 0x10, 0x10, 0x00, 0x01, 0x8f, 0x01, 0xff, |
||||
|
0x01, 0x20, 0x10, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x30, 0x10, 0x00, |
||||
|
0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x10, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, |
||||
|
0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, |
||||
|
0x01, 0x34, 0x01, 0x44, 0x01, 0x10, 0xff, 0x00, 0x69, 0x00, 0x02, 0xdd, |
||||
|
0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0xff, |
||||
|
0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0x44, 0x37, 0x00, 0x01, 0xbc, |
||||
|
0x01, 0xcb, 0x11, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x11, 0x00, 0x01, 0xef, |
||||
|
0x01, 0xfe, 0x11, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x11, 0x00, 0x01, 0xff, |
||||
|
0x01, 0xfd, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfb, 0x10, 0x00, |
||||
|
0x01, 0x0c, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0xaf, 0x01, 0xff, |
||||
|
0x01, 0xd0, 0x0f, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00, |
||||
|
0x01, 0xaf, 0x01, 0xff, 0x01, 0xf4, 0x0f, 0x00, 0x01, 0x09, 0x02, 0xff, |
||||
|
0x01, 0x40, 0x0f, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf4, 0x0f, 0x00, |
||||
|
0x01, 0x03, 0x02, 0xff, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x0a, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x10, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, |
||||
|
0x01, 0x1f, 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x0f, 0x01, 0xff, |
||||
|
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xd0, 0x0a, 0x00, 0x01, 0x08, 0x02, 0xff, 0x01, 0x70, |
||||
|
0x02, 0x00, 0x01, 0x05, 0x01, 0xcf, 0x01, 0xf0, 0x0a, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x98, 0x01, 0x8b, 0x02, 0xff, |
||||
|
0x01, 0xf0, 0x0b, 0x00, 0x01, 0x3f, 0x06, 0xff, 0x01, 0xc0, 0x0b, 0x00, |
||||
|
0x01, 0x02, 0x01, 0xcf, 0x04, 0xff, 0x01, 0xc5, 0x0d, 0x00, 0x01, 0x03, |
||||
|
0x01, 0x8b, 0x01, 0xcc, 0x01, 0xb9, 0x01, 0x62, 0xe2, 0x00, 0x01, 0x01, |
||||
|
0x01, 0x32, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, |
||||
|
0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, |
||||
|
0x01, 0xfc, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x11, 0x00, 0x01, 0x39, |
||||
|
0x01, 0xfd, 0x01, 0x42, 0x0e, 0x00, 0x01, 0x05, 0x01, 0xbf, 0x03, 0xff, |
||||
|
0x01, 0xfb, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xcf, 0x05, 0xff, |
||||
|
0x01, 0xf6, 0x0b, 0x00, 0x01, 0x4f, 0x02, 0xff, 0x02, 0xfe, 0x01, 0xce, |
||||
|
0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0xe6, |
||||
|
0x01, 0x05, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x38, 0x01, 0xe6, 0x0a, 0x00, |
||||
|
0x01, 0x0c, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x01, 0x05, 0x01, 0xfc, |
||||
|
0x02, 0x00, 0x01, 0x02, 0x0a, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xe1, |
||||
|
0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0x60, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0d, 0x00, 0x02, 0xff, |
||||
|
0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x04, 0x01, 0xff, |
||||
|
0x01, 0xfb, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x06, |
||||
|
0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, |
||||
|
0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, |
||||
|
0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf6, 0x02, 0x00, 0x01, 0x05, |
||||
|
0x01, 0xfc, 0x0c, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf9, |
||||
|
0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xfc, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, 0x02, 0xff, |
||||
|
0x01, 0x10, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, 0x01, 0xaf, |
||||
|
0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, |
||||
|
0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, |
||||
|
0x0d, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x30, 0x01, 0x05, |
||||
|
0x01, 0xfb, 0x02, 0x00, 0x01, 0x33, 0x0a, 0x00, 0x01, 0x01, 0x01, 0xef, |
||||
|
0x01, 0xff, 0x01, 0xf9, 0x01, 0x35, 0x01, 0xfb, 0x01, 0x02, 0x01, 0x6c, |
||||
|
0x01, 0xf6, 0x0b, 0x00, 0x01, 0x2d, 0x06, 0xff, 0x01, 0xf6, 0x0b, 0x00, |
||||
|
0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x02, |
||||
|
0x01, 0x8d, 0x03, 0xff, 0x01, 0xc7, 0x01, 0x20, 0x0e, 0x00, 0x01, 0x06, |
||||
|
0x01, 0xfc, 0x01, 0x20, 0x10, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, |
||||
|
0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0xf5, 0x00, |
||||
|
0x01, 0x6b, 0x01, 0xdf, 0x01, 0xfd, 0x01, 0xc9, 0x01, 0x40, 0x0d, 0x00, |
||||
|
0x01, 0x6e, 0x05, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0x07, 0x06, 0xff, |
||||
|
0x01, 0x30, 0x0b, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x85, |
||||
|
0x01, 0x34, 0x01, 0x7b, 0x01, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0xaf, |
||||
|
0x01, 0xff, 0x01, 0xc1, 0x03, 0x00, 0x01, 0x18, 0x01, 0x30, 0x0a, 0x00, |
||||
|
0x01, 0x01, 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00, 0x01, 0x04, 0x01, 0xff, |
||||
|
0x01, 0xfd, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, 0x10, 0x00, |
||||
|
0x01, 0x08, 0x01, 0xff, 0x01, 0xf8, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff, |
||||
|
0x01, 0xf7, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, |
||||
|
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, |
||||
|
0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, |
||||
|
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x0e, 0x00, 0x01, 0x0a, 0x07, 0xff, |
||||
|
0x01, 0xf4, 0x0a, 0x00, 0x01, 0x0a, 0x07, 0xff, 0x01, 0xf4, 0x0a, 0x00, |
||||
|
0x01, 0x08, 0x01, 0xdd, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfe, 0x03, 0xdd, |
||||
|
0x01, 0xd4, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, |
||||
|
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, |
||||
|
0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, |
||||
|
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, |
||||
|
0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, |
||||
|
0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, |
||||
|
0x01, 0xf6, 0x0e, 0x00, 0x01, 0x4b, 0x01, 0xbb, 0x01, 0xbe, 0x01, 0xff, |
||||
|
0x01, 0xfd, 0x05, 0xbb, 0x01, 0x70, 0x08, 0x00, 0x01, 0x6f, 0x09, 0xff, |
||||
|
0x01, 0xa0, 0x08, 0x00, 0x01, 0x6f, 0x09, 0xff, 0x01, 0xa0, 0x08, 0x00, |
||||
|
0x01, 0x4a, 0x09, 0xaa, 0x01, 0x60, 0xff, 0x00, 0xd2, 0x00, 0x01, 0x30, |
||||
|
0x07, 0x00, 0x01, 0x01, 0x01, 0x40, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xf5, |
||||
|
0x07, 0x00, 0x01, 0x1d, 0x01, 0xf4, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, |
||||
|
0x01, 0x40, 0x05, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x30, |
||||
|
0x07, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf4, 0x01, 0x00, 0x01, 0x6b, |
||||
|
0x01, 0xdd, 0x01, 0xc8, 0x01, 0x20, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xfa, |
||||
|
0x08, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0x8e, 0x03, 0xff, 0x01, 0xfa, |
||||
|
0x01, 0xdf, 0x01, 0xff, 0x01, 0xa0, 0x09, 0x00, 0x01, 0x5f, 0x07, 0xff, |
||||
|
0x01, 0xfa, 0x0a, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0xe9, 0x01, 0x55, |
||||
|
0x01, 0x7c, 0x02, 0xff, 0x01, 0xa0, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, |
||||
|
0x01, 0xfb, 0x01, 0x10, 0x02, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xa0, |
||||
|
0x0a, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07, |
||||
|
0x01, 0xff, 0x01, 0xf2, 0x0a, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x30, |
||||
|
0x04, 0x00, 0x01, 0xdf, 0x01, 0xf7, 0x0a, 0x00, 0x01, 0x4f, 0x01, 0xfd, |
||||
|
0x05, 0x00, 0x01, 0x8f, 0x01, 0xfa, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xfc, |
||||
|
0x05, 0x00, 0x01, 0x6f, 0x01, 0xfc, 0x0a, 0x00, 0x01, 0x5f, 0x01, 0xfc, |
||||
|
0x05, 0x00, 0x01, 0x7f, 0x01, 0xfb, 0x0a, 0x00, 0x01, 0x3f, 0x01, 0xff, |
||||
|
0x01, 0x10, 0x04, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x0a, 0x00, 0x01, 0x0e, |
||||
|
0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf3, |
||||
|
0x0a, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf5, 0x03, 0x00, 0x01, 0x1d, |
||||
|
0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x92, |
||||
|
0x01, 0x00, 0x01, 0x16, 0x01, 0xef, 0x01, 0xff, 0x01, 0x60, 0x0a, 0x00, |
||||
|
0x01, 0x1d, 0x03, 0xff, 0x01, 0xfe, 0x03, 0xff, 0x01, 0xf4, 0x09, 0x00, |
||||
|
0x01, 0x01, 0x01, 0xdf, 0x05, 0xff, 0x01, 0xfe, 0x02, 0xff, 0x01, 0x40, |
||||
|
0x08, 0x00, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xfa, 0x01, 0x06, 0x01, 0xdf, |
||||
|
0x01, 0xff, 0x01, 0xfe, 0x01, 0x81, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf4, |
||||
|
0x08, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x01, |
||||
|
0x01, 0x44, 0x01, 0x20, 0x01, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0x20, |
||||
|
0x07, 0x00, 0x01, 0x4f, 0x01, 0xfa, 0x07, 0x00, 0x01, 0x4f, 0x01, 0xf8, |
||||
|
0x08, 0x00, 0x01, 0x05, 0x01, 0xa0, 0x07, 0x00, 0x01, 0x05, 0x01, 0x80, |
||||
|
0xff, 0x00, 0x84, 0x00, 0x01, 0x01, 0x01, 0x88, 0x01, 0x85, 0x07, 0x00, |
||||
|
0x01, 0x38, 0x01, 0x88, 0x01, 0x40, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff, |
||||
|
0x01, 0x10, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x10, 0x07, 0x00, |
||||
|
0x01, 0x3f, 0x01, 0xff, 0x01, 0x90, 0x05, 0x00, 0x01, 0x05, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, |
||||
|
0x01, 0x0d, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x02, 0x01, 0xff, |
||||
|
0x01, 0xfa, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, 0x09, 0x00, |
||||
|
0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xef, 0x01, 0xfd, |
||||
|
0x0a, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07, |
||||
|
0x01, 0xff, 0x01, 0xf5, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf4, |
||||
|
0x03, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, 0x01, 0x01, |
||||
|
0x01, 0xef, 0x01, 0xfd, 0x03, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40, |
||||
|
0x0b, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x02, |
||||
|
0x01, 0xff, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xe0, |
||||
|
0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf3, 0x0c, 0x00, 0x01, 0x06, |
||||
|
0x01, 0xff, 0x01, 0xf7, 0x01, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0, |
||||
|
0x0a, 0x00, 0x01, 0x2a, 0x02, 0xaa, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x10, |
||||
|
0x01, 0xbf, 0x01, 0xff, 0x01, 0xca, 0x01, 0xaa, 0x01, 0xa5, 0x08, 0x00, |
||||
|
0x01, 0x4f, 0x04, 0xff, 0x01, 0x83, 0x04, 0xff, 0x01, 0xf8, 0x08, 0x00, |
||||
|
0x01, 0x3c, 0x02, 0xcc, 0x01, 0xce, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, |
||||
|
0x01, 0xfc, 0x02, 0xcc, 0x01, 0xc6, 0x0b, 0x00, 0x01, 0x03, 0x03, 0xff, |
||||
|
0x01, 0x70, 0x0f, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xfe, 0x10, 0x00, |
||||
|
0x01, 0x2f, 0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x01, 0x03, 0x11, |
||||
|
0x01, 0x1e, 0x01, 0xff, 0x01, 0xf3, 0x03, 0x11, 0x01, 0x10, 0x08, 0x00, |
||||
|
0x01, 0x4f, 0x09, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x4f, 0x09, 0xff, |
||||
|
0x01, 0xf8, 0x08, 0x00, 0x01, 0x27, 0x03, 0x77, 0x01, 0x7e, 0x01, 0xff, |
||||
|
0x01, 0xf8, 0x03, 0x77, 0x01, 0x73, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, |
||||
|
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, |
||||
|
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, |
||||
|
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, |
||||
|
0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, |
||||
|
0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, |
||||
|
0x01, 0x08, 0x01, 0x99, 0x01, 0x91, 0xc9, 0x00 |
||||
|
}; |
@ -0,0 +1,89 @@ |
|||||
|
#!/usr/bin/python |
||||
|
|
||||
|
# Written By Marcio Teixeira 2018 - Aleph Objects, Inc. |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation, either version 3 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# To view a copy of the GNU General Public License, go to the following |
||||
|
# location: <http://www.gnu.org/licenses/>. |
||||
|
|
||||
|
from __future__ import print_function |
||||
|
from PIL import Image |
||||
|
import argparse |
||||
|
import textwrap |
||||
|
|
||||
|
def pack_rle(data): |
||||
|
"""Use run-length encoding to pack the bytes""" |
||||
|
rle = [] |
||||
|
value = data[0] |
||||
|
count = 0 |
||||
|
for i in data: |
||||
|
if i != value or count == 255: |
||||
|
rle.append(count) |
||||
|
rle.append(value) |
||||
|
value = i |
||||
|
count = 1 |
||||
|
else: |
||||
|
count += 1 |
||||
|
rle.append(count) |
||||
|
rle.append(value) |
||||
|
return rle |
||||
|
|
||||
|
class WriteSource: |
||||
|
def __init__(self): |
||||
|
self.values = [] |
||||
|
|
||||
|
def add_pixel(self, value): |
||||
|
self.values.append(value) |
||||
|
|
||||
|
def convert_to_4bpp(self, data): |
||||
|
# Invert the image |
||||
|
data = map(lambda i: 255 - i, data) |
||||
|
# Quanitize 8-bit values into 4-bits |
||||
|
data = map(lambda i: i >> 4, data) |
||||
|
# Make sure there is an even number of elements |
||||
|
if (len(data) & 1) == 1: |
||||
|
result.append(0) |
||||
|
# Combine each two adjacent values into one |
||||
|
i = iter(data) |
||||
|
data = map(lambda a, b: a << 4 | b, i ,i) |
||||
|
# Pack the data |
||||
|
data = pack_rle(data) |
||||
|
# Convert values into hex strings |
||||
|
return map(lambda a: "0x" + format(a, '02x'), data) |
||||
|
|
||||
|
def end_row(self): |
||||
|
# Pad each row into even number of values |
||||
|
if len(self.values) & 1: |
||||
|
self.values.append(0) |
||||
|
|
||||
|
def write(self): |
||||
|
data = self.convert_to_4bpp(self.values) |
||||
|
data = ', '.join(data) |
||||
|
data = textwrap.fill(data, 75, initial_indent = ' ', subsequent_indent = ' ') |
||||
|
|
||||
|
print("const unsigned char font[] PROGMEM = {") |
||||
|
print(data); |
||||
|
print("};") |
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
parser = argparse.ArgumentParser(description='Converts a grayscale bitmap into a 16-level RLE packed C array for use as font data') |
||||
|
parser.add_argument("input") |
||||
|
args = parser.parse_args() |
||||
|
|
||||
|
img = Image.open(args.input).convert('L') |
||||
|
|
||||
|
writer = WriteSource() |
||||
|
for y in range(img.height): |
||||
|
for x in range(img.width): |
||||
|
writer.add_pixel(img.getpixel((x,y))) |
||||
|
writer.end_row() |
||||
|
writer.write() |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue