From a2df40417efcce6b5942fd6396bb740fe75a42d8 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Dec 2020 15:58:46 +1100 Subject: [PATCH 01/29] Add extra handle temp values for TS80P --- workspace/TS100/Core/BSP/Miniware/BSP.cpp | 32 +++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/workspace/TS100/Core/BSP/Miniware/BSP.cpp b/workspace/TS100/Core/BSP/Miniware/BSP.cpp index d5e5bdcd..9842380f 100644 --- a/workspace/TS100/Core/BSP/Miniware/BSP.cpp +++ b/workspace/TS100/Core/BSP/Miniware/BSP.cpp @@ -60,22 +60,22 @@ static const uint16_t NTCHandleLookup[] = { 22264, 27, // 21933, 28, // 21599, 29, // - // 21261, 30, // - // 20921, 31, // - // 20579, 32, // - // 20234, 33, // - // 19888, 34, // - // 19541, 35, // - // 19192, 36, // - // 18843, 37, // - // 18493, 38, // - // 18143, 39, // - // 17793, 40, // - // 17444, 41, // - // 17096, 42, // - // 16750, 43, // - // 16404, 44, // - // 16061, 45, // + 21261, 30, // + 20921, 31, // + 20579, 32, // + 20234, 33, // + 19888, 34, // + 19541, 35, // + 19192, 36, // + 18843, 37, // + 18493, 38, // + 18143, 39, // + 17793, 40, // + 17444, 41, // + 17096, 42, // + 16750, 43, // + 16404, 44, // + 16061, 45, // // 15719, 46, // // 15380, 47, // // 15044, 48, // From f20ce0a4469248725863e0ce691f17a5b28a9891 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Dec 2020 15:59:03 +1100 Subject: [PATCH 02/29] Fix PWM sometimes stepping on end of ADC --- workspace/TS100/Core/BSP/Miniware/BSP.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/workspace/TS100/Core/BSP/Miniware/BSP.cpp b/workspace/TS100/Core/BSP/Miniware/BSP.cpp index 9842380f..c6066df7 100644 --- a/workspace/TS100/Core/BSP/Miniware/BSP.cpp +++ b/workspace/TS100/Core/BSP/Miniware/BSP.cpp @@ -13,8 +13,8 @@ volatile uint16_t PWMSafetyTimer = 0; volatile uint8_t pendingPWM = 0; const uint16_t powerPWM = 255; -static const uint8_t holdoffTicks = 13; // delay of 7 ms -static const uint8_t tempMeasureTicks = 17; +static const uint8_t holdoffTicks = 14; // delay of 8 ms +static const uint8_t tempMeasureTicks = 25; uint16_t totalPWM; //htim2.Init.Period, the full PWM cycle @@ -119,9 +119,9 @@ uint16_t getHandleTemperature() { int32_t result = getADC(0); result -= 4965; // remove 0.5V offset // 10mV per C - // 99.29 counts per Deg C above 0C + // 99.29 counts per Deg C above 0C. Tends to read a tad over across all of my sample units result *= 100; - result /= 993; + result /= 994; return result; #endif } @@ -201,7 +201,7 @@ void setTipPWM(uint8_t pulse) { static void switchToFastPWM(void) { fastPWM = true; - totalPWM = powerPWM + tempMeasureTicks * 2; + totalPWM = powerPWM + tempMeasureTicks * 2 + holdoffTicks; htim2.Instance->ARR = totalPWM; // ~3.5 Hz rate htim2.Instance->CCR1 = powerPWM + holdoffTicks * 2; @@ -211,7 +211,7 @@ static void switchToFastPWM(void) { static void switchToSlowPWM(void) { fastPWM = false; - totalPWM = powerPWM + tempMeasureTicks; + totalPWM = powerPWM + tempMeasureTicks + holdoffTicks; htim2.Instance->ARR = totalPWM; // ~1.84 Hz rate htim2.Instance->CCR1 = powerPWM + holdoffTicks; @@ -335,12 +335,10 @@ void unstick_I2C() { } uint8_t getButtonA() { - return HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET ? - 1 : 0; + return HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET ? 1 : 0; } uint8_t getButtonB() { - return HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ? - 1 : 0; + return HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ? 1 : 0; } void BSPInit(void) { From 627c4919989ad447f96f451d7d7d3e0c9e0ac4c0 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Dec 2020 15:59:43 +1100 Subject: [PATCH 03/29] Fix broken ADC sampling was ignoring ADC2 readings --- workspace/TS100/Core/BSP/Miniware/Pins.h | 1 + workspace/TS100/Core/BSP/Miniware/Setup.c | 33 +++++++++++-------- .../Core/BSP/Miniware/stm32f1xx_hal_msp.c | 14 +++++--- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/workspace/TS100/Core/BSP/Miniware/Pins.h b/workspace/TS100/Core/BSP/Miniware/Pins.h index 59d26a07..b7d06711 100644 --- a/workspace/TS100/Core/BSP/Miniware/Pins.h +++ b/workspace/TS100/Core/BSP/Miniware/Pins.h @@ -16,6 +16,7 @@ #define TMP36_INPUT_Pin GPIO_PIN_7 #define TMP36_INPUT_GPIO_Port GPIOA #define TMP36_ADC1_CHANNEL ADC_CHANNEL_7 +#define TMP36_ADC2_CHANNEL ADC_CHANNEL_7 #define TIP_TEMP_Pin GPIO_PIN_0 #define TIP_TEMP_GPIO_Port GPIOB #define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_8 diff --git a/workspace/TS100/Core/BSP/Miniware/Setup.c b/workspace/TS100/Core/BSP/Miniware/Setup.c index 1ecc25a5..d3d4bff8 100644 --- a/workspace/TS100/Core/BSP/Miniware/Setup.c +++ b/workspace/TS100/Core/BSP/Miniware/Setup.c @@ -17,8 +17,9 @@ DMA_HandleTypeDef hdma_i2c1_tx; IWDG_HandleTypeDef hiwdg; TIM_HandleTypeDef htim2; TIM_HandleTypeDef htim3; - -uint16_t ADCReadings[64]; // room for 32 lots of the pair of readings +#define ADC_CHANNELS 2 +#define ADC_SAMPLES 16 +uint32_t ADCReadings[ADC_SAMPLES * ADC_CHANNELS]; // room for 32 lots of the pair of readings // Functions static void SystemClock_Config(void); @@ -30,7 +31,6 @@ static void MX_TIM2_Init(void); static void MX_DMA_Init(void); static void MX_GPIO_Init(void); static void MX_ADC2_Init(void); -#define SWD_ENABLE void Setup_HAL() { SystemClock_Config(); @@ -49,7 +49,7 @@ void Setup_HAL() { MX_TIM2_Init(); MX_IWDG_Init(); HAL_ADC_Start(&hadc2); - HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t*) ADCReadings, 64); // start DMA of normal readings + HAL_ADCEx_MultiModeStart_DMA(&hadc1, ADCReadings, (ADC_SAMPLES * ADC_CHANNELS)); // start DMA of normal readings HAL_ADCEx_InjectedStart(&hadc1); // enable injected readings HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings } @@ -57,8 +57,12 @@ void Setup_HAL() { // channel 0 -> temperature sensor, 1-> VIN uint16_t getADC(uint8_t channel) { uint32_t sum = 0; - for (uint8_t i = 0; i < 32; i++) - sum += ADCReadings[channel + (i * 2)]; + for (uint8_t i = 0; i < ADC_SAMPLES; i++) { + uint16_t adc1Sample = ADCReadings[channel + (i * ADC_CHANNELS)]; + uint16_t adc2Sample = ADCReadings[channel + (i * ADC_CHANNELS)] >> 16; + + sum += (adc1Sample + adc2Sample); + } return sum >> 2; } @@ -125,7 +129,7 @@ static void MX_ADC1_Init(void) { hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 2; + hadc1.Init.NbrOfConversion = ADC_CHANNELS; HAL_ADC_Init(&hadc1); /**Configure the ADC multi-mode @@ -136,14 +140,14 @@ static void MX_ADC1_Init(void) { /**Configure Regular Channel */ sConfig.Channel = TMP36_ADC1_CHANNEL; - sConfig.Rank = 1; + sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; HAL_ADC_ConfigChannel(&hadc1, &sConfig); /**Configure Regular Channel */ sConfig.Channel = VIN_ADC1_CHANNEL; - sConfig.Rank = 2; + sConfig.Rank = ADC_REGULAR_RANK_2; HAL_ADC_ConfigChannel(&hadc1, &sConfig); /**Configure Injected Channel @@ -164,8 +168,8 @@ static void MX_ADC1_Init(void) { sConfigInjected.InjectedOffset = 0; HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected); - sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfigInjected.InjectedRank = 2; HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected); sConfigInjected.InjectedRank = 3; @@ -191,15 +195,16 @@ static void MX_ADC2_Init(void) { hadc2.Init.DiscontinuousConvMode = DISABLE; hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc2.Init.NbrOfConversion = 2; + hadc2.Init.NbrOfConversion = ADC_CHANNELS; HAL_ADC_Init(&hadc2); /**Configure Regular Channel */ - sConfig.Channel = TIP_TEMP_ADC2_CHANNEL; + sConfig.Channel = TMP36_ADC2_CHANNEL; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; HAL_ADC_ConfigChannel(&hadc2, &sConfig); + sConfig.Channel = VIN_ADC2_CHANNEL; sConfig.Rank = ADC_REGULAR_RANK_2; HAL_ADC_ConfigChannel(&hadc2, &sConfig); @@ -279,7 +284,7 @@ static void MX_TIM3_Init(void) { HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig); sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 80; //80% duty cycle, that is AC coupled through the cap + sConfigOC.Pulse = 50; //50% duty cycle, that is AC coupled through the cap sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_ENABLE; HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, PWM_Out_CHANNEL); @@ -339,7 +344,7 @@ static void MX_TIM2_Init(void) { HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig); sConfigOC.OCMode = TIM_OCMODE_PWM1; - // dummy value, will be reconfigured by BSPInit() + // dummy value, will be reconfigured by BSPInit() in the BSP.cpp sConfigOC.Pulse = 255 + 13 * 2; // 13 -> Delay of 7 ms //255 is the largest time period of the drive signal, and then offset ADC sample to be a bit delayed after this /* diff --git a/workspace/TS100/Core/BSP/Miniware/stm32f1xx_hal_msp.c b/workspace/TS100/Core/BSP/Miniware/stm32f1xx_hal_msp.c index a9daf6ac..058fb241 100644 --- a/workspace/TS100/Core/BSP/Miniware/stm32f1xx_hal_msp.c +++ b/workspace/TS100/Core/BSP/Miniware/stm32f1xx_hal_msp.c @@ -41,10 +41,10 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; - hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; + hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_adc1.Init.Mode = DMA_CIRCULAR; - hdma_adc1.Init.Priority = DMA_PRIORITY_VERY_HIGH; + hdma_adc1.Init.Priority = DMA_PRIORITY_MEDIUM; HAL_DMA_Init(&hdma_adc1); __HAL_LINKDMA(hadc, DMA_Handle, hdma_adc1); @@ -62,7 +62,13 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { */ GPIO_InitStruct.Pin = TIP_TEMP_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct); + GPIO_InitStruct.Pin = TMP36_INPUT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct); + GPIO_InitStruct.Pin = VIN_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct); /* ADC2 interrupt Init */ HAL_NVIC_SetPriority(ADC1_2_IRQn, 15, 0); From b23fae6f51a36b3ddc96773fbbfe1270778316a1 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Dec 2020 16:11:56 +1100 Subject: [PATCH 04/29] Drop dupe config --- workspace/TS100/Core/Inc/configuration.h | 124 ----------------------- 1 file changed, 124 deletions(-) delete mode 100755 workspace/TS100/Core/Inc/configuration.h diff --git a/workspace/TS100/Core/Inc/configuration.h b/workspace/TS100/Core/Inc/configuration.h deleted file mode 100755 index a6ad04b1..00000000 --- a/workspace/TS100/Core/Inc/configuration.h +++ /dev/null @@ -1,124 +0,0 @@ -#pragma once -/** - * Configuration.h - * Define here your default pre settings for TS80 or TS100 - * - */ - -//=========================================================================== -//============================= Default Settings ============================ -//=========================================================================== -/** - * Default soldering temp is 320.0 C - * Temperature the iron sleeps at - default 150.0 C - */ -#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C -#define SLEEP_TEMP 150 // Default sleep temperature -#define BOOST_TEMP 420 // Default boost temp. -#define BOOST_MODE_ENABLED 1 // 0: Disable 1: Enable - -/** - * Blink the temperature on the cooling screen when its > 50C - */ -#define COOLING_TEMP_BLINK 0 // 0: Disable 1: Enable - -/** - * How many seconds/minutes we wait until going to sleep/shutdown. - * Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds! - */ -#define SLEEP_TIME 5 // x10 Seconds -#define SHUTDOWN_TIME 10 // Minutes - -/** - * Auto start off for safety. - * Pissible values are: - * 0 - none - * 1 - Soldering Temperature - * 2 - Sleep Temperature - * 3 - Sleep Off Temperature - */ -#define AUTO_START_MODE 0 // Default to none - -/** - * OLED Orientation - * - */ -#define ORIENTATION_MODE 0 // 0: Right 1:Left 2:Automatic - Default right -#define REVERSE_BUTTON_TEMP_CHANGE 0 // 0:Default 1:Reverse - Reverse the plus and minus button assigment for temperatur change - -/** - * Temp change settings - */ -#define TEMP_CHANGE_SHORT_STEP 1 // Default temp change short step +1 -#define TEMP_CHANGE_LONG_STEP 10 // Default temp change long step +10 -#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value -#define TEMP_CHANGE_LONG_STEP_MAX 100 // Temp change long step MAX value - -/* Power pulse for keeping power banks awake*/ -#define POWER_PULSE_INCREMENT 1 -#define POWER_PULSE_MAX 50 // x10 max watts -#ifdef MODEL_TS100 -#define POWER_PULSE_DEFAULT 0 -#else -#define POWER_PULSE_DEFAULT 5 -#endif - -/** - * OLED Orientation Sensitivity on Automatic mode! - * Motion Sensitivity <0=Off 1=Least Sensitive 9=Most Sensitive> - */ -#define SENSITIVITY 7 // Default 7 - -/** - * Detailed soldering screen - * Detailed idle screen (off for first time users) - */ -#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0 -#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 - -#define CUT_OUT_SETTING 0 // default to no cut-off voltage (or 18W for TS80) -#define TEMPERATURE_INF 0 // default to 0 -#define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow -#define POWER_LIMIT_ENABLE 0 // 0: Disable 1: Enable - Default disabled power limit - -#define TIP_GAIN 210 // 21 uV/C * 10, uV per deg C constant of the tip, Tip uV * 10 / coeff = tip temp - -#define OP_AMP_Rf_TS100 750 * 1000 // 750 Kilo-ohms -> From schematic, R1 -#define OP_AMP_Rin_TS100 2370 // 2.37 Kilo-ohms -> From schematic, R2 - -#define OP_AMP_GAIN_STAGE_TS100 (1 + (OP_AMP_Rf_TS100 / OP_AMP_Rin_TS100)) - -#define OP_AMP_Rf_TS80 180 * 1000 // 180 Kilo-ohms -> From schematic, R6 -#define OP_AMP_Rin_TS80 2000 // 2.0 Kilo-ohms -> From schematic, R3 - -#define OP_AMP_GAIN_STAGE_TS80 (1 + (OP_AMP_Rf_TS80 / OP_AMP_Rin_TS80)) - -#ifdef MODEL_TS100 -#define VOLTAGE_DIV 467 // 467 - Default divider from schematic -#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV -#define PID_POWER_LIMIT 70 // Sets the max pwm power limit -#define POWER_LIMIT 30 // 30 watts default limit -#define MAX_POWER_LIMIT 65 // -#define POWER_LIMIT_STEPS 5 // -#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100 -#endif - -#ifdef MODEL_TS80 -#define VOLTAGE_DIV 780 // Default divider from schematic -#define PID_POWER_LIMIT 24 // Sets the max pwm power limit -#define CALIBRATION_OFFSET 900 // the adc offset in uV -#define POWER_LIMIT 24 // 24 watts default power limit -#define MAX_POWER_LIMIT 30 // -#define POWER_LIMIT_STEPS 2 -#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80 -#endif - -#ifdef MODEL_Pinecil -#define VOLTAGE_DIV 467 // 467 - Default divider from schematic -#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV -#define PID_POWER_LIMIT 70 // Sets the max pwm power limit -#define POWER_LIMIT 30 // 30 watts default limit -#define MAX_POWER_LIMIT 65 // -#define POWER_LIMIT_STEPS 5 // -#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100 -#endif \ No newline at end of file From 53deac02e78d96eed082def9839b576a07b898fd Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Dec 2020 16:12:18 +1100 Subject: [PATCH 05/29] Bring in ADC timing a tad --- workspace/TS100/Core/BSP/Miniware/BSP.cpp | 2 +- workspace/TS100/Core/BSP/Miniware/Setup.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/workspace/TS100/Core/BSP/Miniware/BSP.cpp b/workspace/TS100/Core/BSP/Miniware/BSP.cpp index c6066df7..62b5e6e2 100644 --- a/workspace/TS100/Core/BSP/Miniware/BSP.cpp +++ b/workspace/TS100/Core/BSP/Miniware/BSP.cpp @@ -14,7 +14,7 @@ volatile uint8_t pendingPWM = 0; const uint16_t powerPWM = 255; static const uint8_t holdoffTicks = 14; // delay of 8 ms -static const uint8_t tempMeasureTicks = 25; +static const uint8_t tempMeasureTicks = 14; uint16_t totalPWM; //htim2.Init.Period, the full PWM cycle diff --git a/workspace/TS100/Core/BSP/Miniware/Setup.c b/workspace/TS100/Core/BSP/Miniware/Setup.c index d3d4bff8..0c368c30 100644 --- a/workspace/TS100/Core/BSP/Miniware/Setup.c +++ b/workspace/TS100/Core/BSP/Miniware/Setup.c @@ -161,7 +161,7 @@ static void MX_ADC1_Init(void) { sConfigInjected.InjectedChannel = TIP_TEMP_ADC1_CHANNEL; sConfigInjected.InjectedRank = 1; sConfigInjected.InjectedNbrOfConversion = 4; - sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_7CYCLES_5; + sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5; sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T2_CC1; sConfigInjected.AutoInjectedConv = DISABLE; sConfigInjected.InjectedDiscontinuousConvMode = DISABLE; @@ -214,7 +214,7 @@ static void MX_ADC2_Init(void) { sConfigInjected.InjectedChannel = TIP_TEMP_ADC2_CHANNEL; sConfigInjected.InjectedRank = ADC_INJECTED_RANK_1; sConfigInjected.InjectedNbrOfConversion = 4; - sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_7CYCLES_5; + sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_1CYCLE_5; sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T2_CC1; sConfigInjected.AutoInjectedConv = DISABLE; sConfigInjected.InjectedDiscontinuousConvMode = DISABLE; From 27bf2a17110373cb1a30bed259ac2fbc1b374c5c Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Mon, 28 Dec 2020 16:13:30 +1100 Subject: [PATCH 06/29] Move to lookuptable for tip calibration --- .gitignore | 3 +- .../TS100/Core/Drivers/TipThermoModel.cpp | 75 +++++++++++-- workspace/TS100/Core/Inc/Settings.h | 1 - workspace/TS100/Core/Src/Settings.cpp | 1 - workspace/TS100/Core/Src/gui.cpp | 100 +++++++++--------- 5 files changed, 117 insertions(+), 63 deletions(-) diff --git a/.gitignore b/.gitignore index 11f60f9f..fe079eb1 100644 --- a/.gitignore +++ b/.gitignore @@ -190,4 +190,5 @@ fabric.properties .idea/httpRequests CoreCompileInputs.cache -.vscode/settings.json +.vscode/settings.json +workspace/TS100/TS100/ diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 18ab0a10..c472932a 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -39,6 +39,7 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC) { uint32_t valueuV = rawInputmVX10 * 100; // shift into uV //Now to divide this down by the gain valueuV = (valueuV) / OP_AMP_GAIN_STAGE; + //Remove uV tipOffset if (valueuV >= systemSettings.CalibrationOffset) valueuV -= systemSettings.CalibrationOffset; @@ -68,17 +69,71 @@ int32_t LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_ return y1 + (((((x - x1) * 1000) / (x2 - x1)) * (y2 - y1))) / 1000; } +const uint16_t uVtoDegC[] = { 0, 0, // + 175, 10, // + 381, 20, // + 587, 30, // + 804, 40, // + 1005, 50, // + 1007, 60, // + 1107, 70, // + 1310, 80, // + 1522, 90, // + 1731, 100, // + 1939, 110, // + 2079, 120, // + 2265, 130, // + 2470, 140, // + 2676, 150, // + 2899, 160, // + 3081, 170, // + 3186, 180, // + 3422, 190, // + 3622, 200, // + 3830, 210, // + 4044, 220, // + 4400, 230, // + 4691, 240, // + 4989, 250, // + 5289, 260, // + 5583, 270, // + 5879, 280, // + 6075, 290, // + 6332, 300, // + 6521, 310, // + 6724, 320, // + 6929, 330, // + 7132, 340, // + 7356, 350, // + 7561, 360, // + 7774, 370, // + 7992, 380, // + 8200, 390, // + 8410, 400, // + 8626, 410, // + 8849, 420, // + 9060, 430, // + 9271, 440, // + 9531, 450, // + 9748, 460, // + 10210, 470, // + 10219, 480, // + 10429, 490, // + 10649, 500, // + + }; uint32_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { - //based on new measurements, tip is quite linear - // - tipuVDelta *= 10; - tipuVDelta /= systemSettings.TipGain; - -#if defined( MODEL_TS80)+defined( MODEL_TS80P)>0 - tipuVDelta /= OP_AMP_GAIN_STAGE_TS100 / OP_AMP_GAIN_STAGE_TS80; -#endif - - return tipuVDelta; + if (tipuVDelta) { + int noItems = sizeof(uVtoDegC) / (2 * sizeof(uint16_t)); + for (int i = 1; i < (noItems - 1); i++) { + //If current tip temp is less than current lookup, then this current loopup is the higher point to interpolate + if (tipuVDelta < uVtoDegC[i * 2]) { + return LinearInterpolate(uVtoDegC[(i - 1) * 2], uVtoDegC[((i - 1) * 2) + 1], uVtoDegC[i * 2], uVtoDegC[(i * 2) + 1], tipuVDelta); + } + } + return LinearInterpolate(uVtoDegC[(noItems - 2) * 2], uVtoDegC[((noItems - 2) * 2) + 1], uVtoDegC[(noItems - 1) * 2], uVtoDegC[((noItems - 1) * 2) + 1], tipuVDelta); + } + return 0; } #ifdef ENABLED_FAHRENHEIT_SUPPORT diff --git a/workspace/TS100/Core/Inc/Settings.h b/workspace/TS100/Core/Inc/Settings.h index e9ca84e9..b1524399 100755 --- a/workspace/TS100/Core/Inc/Settings.h +++ b/workspace/TS100/Core/Inc/Settings.h @@ -51,7 +51,6 @@ typedef struct { uint8_t powerLimit; // Maximum power iron allowed to output - uint16_t TipGain; // uV/C * 10, it can be used to convert tip thermocouple voltage to temperateture TipV/TipGain = TipTemp uint8_t ReverseButtonTempChangeEnabled; // Change the plus and minus button assigment uint16_t TempChangeLongStep; // Change the plus and minus button assigment diff --git a/workspace/TS100/Core/Src/Settings.cpp b/workspace/TS100/Core/Src/Settings.cpp index 581a3f40..3faa0ea3 100755 --- a/workspace/TS100/Core/Src/Settings.cpp +++ b/workspace/TS100/Core/Src/Settings.cpp @@ -77,7 +77,6 @@ void resetSettings() { systemSettings.TempChangeShortStep = TEMP_CHANGE_SHORT_STEP; // systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP; // systemSettings.KeepAwakePulse = POWER_PULSE_DEFAULT; - systemSettings.TipGain = TIP_GAIN; systemSettings.hallEffectSensitivity = 1; saveSettings(); // Save defaults } diff --git a/workspace/TS100/Core/Src/gui.cpp b/workspace/TS100/Core/Src/gui.cpp index 0518d8e4..002f9ef1 100755 --- a/workspace/TS100/Core/Src/gui.cpp +++ b/workspace/TS100/Core/Src/gui.cpp @@ -59,8 +59,8 @@ static bool settings_setResetSettings(void); static void settings_displayResetSettings(void); static bool settings_setCalibrate(void); static void settings_displayCalibrate(void); -static bool settings_setTipGain(void); -static void settings_displayTipGain(void); +//static bool settings_setTipGain(void); +//static void settings_displayTipGain(void); static bool settings_setCalibrateVIN(void); static void settings_displayCalibrateVIN(void); static void settings_displayReverseButtonTempChangeEnabled(void); @@ -212,7 +212,7 @@ const menuitem advancedMenu[] = { { (const char *) SettingsDescriptions[11], settings_setCalibrate, settings_displayCalibrate }, /*Calibrate tip*/ { (const char *) SettingsDescriptions[13], settings_setCalibrateVIN, settings_displayCalibrateVIN }, /*Voltage input cal*/ { (const char *) SettingsDescriptions[24], settings_setPowerPulse, settings_displayPowerPulse }, /*Power Pulse adjustment */ -{ (const char *) SettingsDescriptions[25], settings_setTipGain, settings_displayTipGain }, /*TipGain*/ +//{ (const char *) SettingsDescriptions[25], settings_setTipGain, settings_displayTipGain }, /*TipGain*/ { NULL, NULL, NULL } // end of menu marker. DO NOT REMOVE }; @@ -778,53 +778,53 @@ static bool settings_setCalibrateVIN(void) { } return false; } - -static bool settings_setTipGain(void) { - OLED::setFont(0); - OLED::clearScreen(); - - for (;;) { - OLED::setCursor(0, 0); - OLED::printNumber(systemSettings.TipGain / 10, 2); - OLED::print(SymbolDot); - OLED::printNumber(systemSettings.TipGain % 10, 1); - - ButtonState buttons = getButtonState(); - switch (buttons) { - case BUTTON_F_SHORT: - systemSettings.TipGain -= 1; - break; - - case BUTTON_B_SHORT: - systemSettings.TipGain += 1; - break; - - case BUTTON_BOTH: - case BUTTON_F_LONG: - case BUTTON_B_LONG: - saveSettings(); - return false; - case BUTTON_NONE: - default: - break; - } - - OLED::refresh(); - osDelay(40); - - // Cap to sensible values - if (systemSettings.TipGain < 150) { - systemSettings.TipGain = 150; - } else if (systemSettings.TipGain > 300) { - systemSettings.TipGain = 300; - } - } - return false; -} - -static void settings_displayTipGain(void) { - printShortDescription(25, 5); -} +// +//static bool settings_setTipGain(void) { +// OLED::setFont(0); +// OLED::clearScreen(); +// +// for (;;) { +// OLED::setCursor(0, 0); +// OLED::printNumber(systemSettings.TipGain / 10, 2); +// OLED::print(SymbolDot); +// OLED::printNumber(systemSettings.TipGain % 10, 1); +// +// ButtonState buttons = getButtonState(); +// switch (buttons) { +// case BUTTON_F_SHORT: +// systemSettings.TipGain -= 1; +// break; +// +// case BUTTON_B_SHORT: +// systemSettings.TipGain += 1; +// break; +// +// case BUTTON_BOTH: +// case BUTTON_F_LONG: +// case BUTTON_B_LONG: +// saveSettings(); +// return false; +// case BUTTON_NONE: +// default: +// break; +// } +// +// OLED::refresh(); +// osDelay(40); +// +// // Cap to sensible values +// if (systemSettings.TipGain < 150) { +// systemSettings.TipGain = 150; +// } else if (systemSettings.TipGain > 300) { +// systemSettings.TipGain = 300; +// } +// } +// return false; +//} +// +//static void settings_displayTipGain(void) { +// printShortDescription(25, 5); +//} static bool settings_setReverseButtonTempChangeEnabled(void) { systemSettings.ReverseButtonTempChangeEnabled = !systemSettings.ReverseButtonTempChangeEnabled; From a3f037fd1d1de4a77200a55cb59df53105234db1 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 10:44:39 +1100 Subject: [PATCH 07/29] Include some bias removal based on the target temp to linearise the response a bit more --- workspace/TS100/Core/Drivers/BMA223.cpp | 10 +- .../TS100/Core/Drivers/TipThermoModel.cpp | 124 ++++++++++-------- workspace/TS100/configuration.h | 7 +- 3 files changed, 77 insertions(+), 64 deletions(-) diff --git a/workspace/TS100/Core/Drivers/BMA223.cpp b/workspace/TS100/Core/Drivers/BMA223.cpp index 7cd08530..ac049b07 100755 --- a/workspace/TS100/Core/Drivers/BMA223.cpp +++ b/workspace/TS100/Core/Drivers/BMA223.cpp @@ -39,7 +39,7 @@ bool BMA223::initalize() { } -void BMA223::getAxisReadings(int16_t& x, int16_t& y, int16_t& z) { +void BMA223::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) { //The BMA is odd in that its output data width is only 8 bits //And yet there are MSB and LSB registers _sigh_. uint8_t sensorData[6] = { 0, 0, 0, 0, 0, 0 }; @@ -48,9 +48,9 @@ void BMA223::getAxisReadings(int16_t& x, int16_t& y, int16_t& z) { x = y = z = 0; return; } - - x = sensorData[1] << 5; - y = sensorData[3] << 5; - z = sensorData[5] << 5; + //Shift 6 to make its range ~= the other accelerometers + x = sensorData[1] << 6; + y = sensorData[3] << 6; + z = sensorData[5] << 6; } diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index c472932a..9f840132 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -9,7 +9,7 @@ #include "Settings.h" #include "BSP.h" #include "../../configuration.h" - +#include "main.hpp" /* * The hardware is laid out as a non-inverting op-amp * There is a pullup of 39k(TS100) from the +ve input to 3.9V (1M pulup on TS100) @@ -38,14 +38,26 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC) { uint32_t valueuV = rawInputmVX10 * 100; // shift into uV //Now to divide this down by the gain - valueuV = (valueuV) / OP_AMP_GAIN_STAGE; + valueuV /= OP_AMP_GAIN_STAGE; //Remove uV tipOffset if (valueuV >= systemSettings.CalibrationOffset) valueuV -= systemSettings.CalibrationOffset; else valueuV = 0; - + // Bias removal (Compensating for a temperature related non-linearity + // This uses the target temperature for the tip to calculate a compensation value for temperature related bias + // This is not entirely ideal as this means we will be wrong on heat up, but will settle to the correct value + // This will cause us to underread on the heatup until we reach the target temp + // Compensation (uV)== ((((80+150*(target_temp_c_x10-1000)/3000)*33000)/4096)*100)/GAIN + // Reordered with Wolframalpha + if (currentTempTargetDegC > 0) { + uint32_t compensation = (20625 * ((currentTempTargetDegC*10) + 600)) / 512; + compensation /= OP_AMP_GAIN_STAGE; + if (valueuV > compensation) { + valueuV -= compensation; + } + } return valueuV; } @@ -69,57 +81,59 @@ int32_t LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_ return y1 + (((((x - x1) * 1000) / (x2 - x1)) * (y2 - y1))) / 1000; } -const uint16_t uVtoDegC[] = { 0, 0, // - 175, 10, // - 381, 20, // - 587, 30, // - 804, 40, // - 1005, 50, // - 1007, 60, // - 1107, 70, // - 1310, 80, // - 1522, 90, // - 1731, 100, // - 1939, 110, // - 2079, 120, // - 2265, 130, // - 2470, 140, // - 2676, 150, // - 2899, 160, // - 3081, 170, // - 3186, 180, // - 3422, 190, // - 3622, 200, // - 3830, 210, // - 4044, 220, // - 4400, 230, // - 4691, 240, // - 4989, 250, // - 5289, 260, // - 5583, 270, // - 5879, 280, // - 6075, 290, // - 6332, 300, // - 6521, 310, // - 6724, 320, // - 6929, 330, // - 7132, 340, // - 7356, 350, // - 7561, 360, // - 7774, 370, // - 7992, 380, // - 8200, 390, // - 8410, 400, // - 8626, 410, // - 8849, 420, // - 9060, 430, // - 9271, 440, // - 9531, 450, // - 9748, 460, // - 10210, 470, // - 10219, 480, // - 10429, 490, // - 10649, 500, // +const uint16_t uVtoDegC[] = { // + // + 0, 0, // + 175, 10, // + 381, 20, // + 587, 30, // + 804, 40, // + 1005, 50, // + 1007, 60, // + 1107, 70, // + 1310, 80, // + 1522, 90, // + 1731, 100, // + 1939, 110, // + 2079, 120, // + 2265, 130, // + 2470, 140, // + 2676, 150, // + 2899, 160, // + 3081, 170, // + 3186, 180, // + 3422, 190, // + 3622, 200, // + 3830, 210, // + 4044, 220, // + 4400, 230, // + 4691, 240, // + 4989, 250, // + 5289, 260, // + 5583, 270, // + 5879, 280, // + 6075, 290, // + 6332, 300, // + 6521, 310, // + 6724, 320, // + 6929, 330, // + 7132, 340, // + 7356, 350, // + 7561, 360, // + 7774, 370, // + 7992, 380, // + 8200, 390, // + 8410, 400, // + 8626, 410, // + 8849, 420, // + 9060, 430, // + 9271, 440, // + 9531, 450, // + 9748, 460, // + 10210, 470, // + 10219, 480, // + 10429, 490, // + 10649, 500, // }; uint32_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { @@ -162,7 +176,7 @@ uint32_t TipThermoModel::getTipInC(bool sampleNow) { return currentTipTempInC; } #ifdef ENABLED_FAHRENHEIT_SUPPORT -uint32_t TipThermoModel::getTipInF(bool sampleNow) { +uint32_t TipThermoModel::getTipInF(bool sampleNow, uint16_t currentTargetTempCx10) { uint32_t currentTipTempInF = TipThermoModel::convertTipRawADCToDegF( getTipRawTemp(sampleNow)); currentTipTempInF += convertCtoF(getHandleTemperature() / 10); //Add handle offset diff --git a/workspace/TS100/configuration.h b/workspace/TS100/configuration.h index eac4a58c..f6dfd544 100644 --- a/workspace/TS100/configuration.h +++ b/workspace/TS100/configuration.h @@ -91,7 +91,6 @@ #define TEMPERATURE_INF 0 // default to 0 #define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow -#define TIP_GAIN 210 // 21 uV/C * 10, uV per deg C constant of the tip, Tip uV * 10 / coeff = tip temp #define OP_AMP_Rf_TS100 750 * 1000 // 750 Kilo-ohms -> From schematic, R1 #define OP_AMP_Rin_TS100 2370 // 2.37 Kilo-ohms -> From schematic, R2 @@ -101,15 +100,15 @@ #define OP_AMP_Rf_TS80 180 * 1000 // 180 Kilo-ohms -> From schematic, R6 #define OP_AMP_Rin_TS80 2000 // 2.0 Kilo-ohms -> From schematic, R3 -#define OP_AMP_GAIN_STAGE_TS80 (1 + (OP_AMP_Rf_TS80 / OP_AMP_Rin_TS80)) - +#define OP_AMP_GAIN_STAGE_TS80 (1 + (OP_AMP_Rf_TS80 / OP_AMP_Rin_TS80))*3 +//The *3 here is a fudge factor that I dont like, but havent tracked down root cause _yet_ //Deriving the Voltage div: // Vin_max = (3.3*(r1+r2))/(r2) //vdiv = (32768*4)/(vin_max*10) #ifdef MODEL_TS100 #define VOLTAGE_DIV 467 // 467 - Default divider from schematic -#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV +#define CALIBRATION_OFFSET 1200 // 900 - Default adc offset in uV #define PID_POWER_LIMIT 70 // Sets the max pwm power limit #define POWER_LIMIT 0 // 0 watts default limit #define MAX_POWER_LIMIT 65 // From 1c0e51b1d07ba93b2812ccd72cb8dcc8a5a3adf1 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 10:48:52 +1100 Subject: [PATCH 08/29] Update TipThermoModel.cpp --- workspace/TS100/Core/Drivers/TipThermoModel.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 40a3db06..91e1afe3 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -41,19 +41,21 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC) { //Now to divide this down by the gain valueuV /= OP_AMP_GAIN_STAGE; - //Remove uV tipOffset - if (valueuV >= systemSettings.CalibrationOffset) - valueuV -= systemSettings.CalibrationOffset; - else - valueuV = 0; + if (systemSettings.CalibrationOffset) { + //Remove uV tipOffset + if (valueuV >= systemSettings.CalibrationOffset) + valueuV -= systemSettings.CalibrationOffset; + else + valueuV = 0; + } // Bias removal (Compensating for a temperature related non-linearity // This uses the target temperature for the tip to calculate a compensation value for temperature related bias // This is not entirely ideal as this means we will be wrong on heat up, but will settle to the correct value // This will cause us to underread on the heatup until we reach the target temp - // Compensation (uV)== ((((80+150*(target_temp_c_x10-1000)/3000)*33000)/4096)*100)/GAIN + // Compensation (uV)== ((((80+150*(target_temp_c_x10-1000)/3000)*vddRailmVX10)/4096)*100)/GAIN // Reordered with Wolframalpha if (currentTempTargetDegC > 0) { - uint32_t compensation = (20625 * ((currentTempTargetDegC*10) + 600)) / 512; + uint32_t compensation = (20625 * ((currentTempTargetDegC * 10) + 600)) / 512; compensation /= OP_AMP_GAIN_STAGE; if (valueuV > compensation) { valueuV -= compensation; From c6fd646ee501ad938994849ce7130605eadeb0e3 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 10:58:39 +1100 Subject: [PATCH 09/29] Update Pins.h --- workspace/TS100/Core/BSP/Miniware/Pins.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/workspace/TS100/Core/BSP/Miniware/Pins.h b/workspace/TS100/Core/BSP/Miniware/Pins.h index b7d06711..fe5ea3cb 100644 --- a/workspace/TS100/Core/BSP/Miniware/Pins.h +++ b/workspace/TS100/Core/BSP/Miniware/Pins.h @@ -49,6 +49,7 @@ #define TMP36_INPUT_Pin GPIO_PIN_4 #define TMP36_INPUT_GPIO_Port GPIOA #define TMP36_ADC1_CHANNEL ADC_CHANNEL_4 +#define TMP36_ADC2_CHANNEL ADC_CHANNEL_4 #define TIP_TEMP_Pin GPIO_PIN_3 #define TIP_TEMP_GPIO_Port GPIOA #define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_3 @@ -88,6 +89,7 @@ #define TMP36_INPUT_Pin GPIO_PIN_4 #define TMP36_INPUT_GPIO_Port GPIOA #define TMP36_ADC1_CHANNEL ADC_CHANNEL_4 +#define TMP36_ADC2_CHANNEL ADC_CHANNEL_4 #define TIP_TEMP_Pin GPIO_PIN_3 #define TIP_TEMP_GPIO_Port GPIOA #define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_3 From 39e6943dfdb2ec013371032c75a56b1cd9950af4 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:00:54 +1100 Subject: [PATCH 10/29] Update TipThermoModel.cpp --- workspace/TS100/Core/Drivers/TipThermoModel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 91e1afe3..c83cc159 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -183,7 +183,7 @@ uint32_t TipThermoModel::getTipInC(bool sampleNow) { return currentTipTempInC; } #ifdef ENABLED_FAHRENHEIT_SUPPORT -uint32_t TipThermoModel::getTipInF(bool sampleNow, uint16_t currentTargetTempCx10) { +uint32_t TipThermoModel::getTipInF(bool sampleNow) { uint32_t currentTipTempInF = TipThermoModel::convertTipRawADCToDegF( getTipRawTemp(sampleNow)); currentTipTempInF += convertCtoF(getHandleTemperature() / 10); //Add handle offset From 12670461aac21c3d6dfbccdf4e1c8dd12c83b254 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:38:17 +1100 Subject: [PATCH 11/29] Update setup to use cache folder --- ...-9-2020-q2-update-x86_64-linux.tar.bz2.md5 | 1 + ...wlibc_prebuilt_linux64_2020.08.tar.bz2.md5 | 1 + ci/secrets/decrypt.sh | 16 ------------ ci/secrets/encrypted/deployment.encrypted | 2 -- setup.sh | 26 ++++++++++++++++--- 5 files changed, 24 insertions(+), 22 deletions(-) create mode 100644 ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5 create mode 100644 ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5 delete mode 100755 ci/secrets/decrypt.sh delete mode 100644 ci/secrets/encrypted/deployment.encrypted diff --git a/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5 b/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5 new file mode 100644 index 00000000..a165cc93 --- /dev/null +++ b/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5 @@ -0,0 +1 @@ +2b9eeccc33470f9d3cda26983b9d2dc6 gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 diff --git a/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5 b/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5 new file mode 100644 index 00000000..2f4f5e33 --- /dev/null +++ b/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5 @@ -0,0 +1 @@ +add5b6a9b12987d0e72f55a4d2cd0f3b nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 diff --git a/ci/secrets/decrypt.sh b/ci/secrets/decrypt.sh deleted file mode 100755 index 804a4e99..00000000 --- a/ci/secrets/decrypt.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -SECRETS="$DIR/encrypted/*.encrypted" -KEY="$DIR/../../codeship.aes" - -mkdir -p $DIR/unencrypted - -for f in $SECRETS -do - out="${f/.encrypted/.secret}" - out="${out/encrypted/unencrypted}" - echo $out - jet decrypt $f $out --key-path $KEY -done - -echo "Done" diff --git a/ci/secrets/encrypted/deployment.encrypted b/ci/secrets/encrypted/deployment.encrypted deleted file mode 100644 index 5fe104f7..00000000 --- a/ci/secrets/encrypted/deployment.encrypted +++ /dev/null @@ -1,2 +0,0 @@ -codeship:v2 -DUgOERb8iPVn95/DKIw9M7sgNjJlIlsaeE4PFV58tmmBu2sD1ooR7Y0L23bimC9a \ No newline at end of file diff --git a/setup.sh b/setup.sh index 3a18536f..4138a024 100644 --- a/setup.sh +++ b/setup.sh @@ -3,13 +3,31 @@ set -e # Setup shell file to setup the environment on an ubuntu machine sudo apt-get update sudo apt-get install -y make bzip2 git python3 wget -sudo mkdir /build +sudo mkdir -p /build cd /build -sudo wget -qO- https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 | sudo tar -xj -sudo wget -qO- https://github.com/Ralim/nuclei-compiler/releases/download/2020.08/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 | sudo tar -xj +#Download source files to cache folder +mkdir -p /build/cache +cd /build/cache/ +if md5sum -c /build/source/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5; then + echo "Good MD5 ARM" +else + echo "ARM MD5 Mismatch, downloading fresh" + sudo wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -O gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 +fi -# Add compiler to the path +if md5sum -c /build/source/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5; then + echo "Good MD5 RISCV" +else + echo "RISCV MD5 Mismatch, downloading fresh" + sudo wget https://github.com/Ralim/nuclei-compiler/releases/download/2020.08/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 -O nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 +fi + +echo "Extracting compilers" +sudo tar -xj -f gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -C /build/ +sudo tar -xj -f nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 -C /build/ + +echo "Link into PATH" sudo ln -s /build/gcc-arm-none-eabi-9-2020-q2-update/bin/* /usr/local/bin sudo ln -s /build/gcc/bin/* /usr/local/bin From 6a4d8d989db164de0cb035d00adef06df8c0926d Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:41:29 +1100 Subject: [PATCH 12/29] Add cache step --- .github/workflows/pr.yml | 103 ------------------------------------- .github/workflows/push.yml | 48 ++++++++++++++++- 2 files changed, 46 insertions(+), 105 deletions(-) delete mode 100644 .github/workflows/pr.yml diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml deleted file mode 100644 index 6d1a9f32..00000000 --- a/.github/workflows/pr.yml +++ /dev/null @@ -1,103 +0,0 @@ -name: CI PR - -on: [pull_request] - -jobs: - build_TS80: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh - - - name: setup - run: ./setup.sh - - - name: build TS80 - run: cd workspace/TS100 && ./build.sh -m TS80 - - - name: Archive TS80 artifacts - uses: actions/upload-artifact@v2 - with: - name: TS80 - path: | - workspace/TS100/Hexfile/TS80_*.hex - workspace/TS100/Hexfile/TS80_*.bin - if-no-files-found: error - build_TS80P: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh - - - name: setup - run: ./setup.sh - - - name: build TS80P - run: cd workspace/TS100 && ./build.sh -m TS80P - - - name: Archive TS80P artifacts - uses: actions/upload-artifact@v2 - with: - name: TS80P - path: | - workspace/TS100/Hexfile/TS80P_*.hex - workspace/TS100/Hexfile/TS80P_*.bin - if-no-files-found: error - build_TS100: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh - - - name: setup - run: ./setup.sh - - - name: build TS100 - run: cd workspace/TS100 && ./build.sh -m TS100 - - - name: Archive TS100 artifacts - uses: actions/upload-artifact@v2 - with: - name: TS100 - path: | - workspace/TS100/Hexfile/TS100_*.hex - workspace/TS100/Hexfile/TS100_*.bin - if-no-files-found: error - - build_Pinecil: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh - - - name: setup - run: ./setup.sh - - - name: build Pinecil - run: cd workspace/TS100 && ./build.sh -m Pinecil - - - name: Archive Pinecil artifacts - uses: actions/upload-artifact@v2 - with: - name: Pinecil - path: | - workspace/TS100/Hexfile/Pinecil_*.hex - workspace/TS100/Hexfile/Pinecil_*.bin - if-no-files-found: error - \ No newline at end of file diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 2c2dfdf9..997d7d62 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,6 +1,6 @@ -name: CI PR +name: CI Build all -on: [push] +on: [push,pull_request] jobs: build_TS80: @@ -11,6 +11,17 @@ jobs: - name: chmod run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + + - name: Cached compiler source files + uses: actions/cache@v2 + env: + cache-name: cache-compilers + with: + # we deliberately persist a cache folder forwards + path: /build/cache + key: ${{ runner.os }}-build-${{ env.cache-name }} + restore-keys: | + ${{ runner.os }}- - name: setup run: ./setup.sh @@ -35,6 +46,17 @@ jobs: - name: chmod run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + - name: Cached compiler source files + uses: actions/cache@v2 + env: + cache-name: cache-compilers + with: + # we deliberately persist a cache folder forwards + path: /build/cache + key: ${{ runner.os }}-build-${{ env.cache-name }} + restore-keys: | + ${{ runner.os }}- + - name: setup run: ./setup.sh @@ -57,6 +79,17 @@ jobs: - name: chmod run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + + - name: Cached compiler source files + uses: actions/cache@v2 + env: + cache-name: cache-compilers + with: + # we deliberately persist a cache folder forwards + path: /build/cache + key: ${{ runner.os }}-build-${{ env.cache-name }} + restore-keys: | + ${{ runner.os }}- - name: setup run: ./setup.sh @@ -81,6 +114,17 @@ jobs: - name: chmod run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + + - name: Cached compiler source files + uses: actions/cache@v2 + env: + cache-name: cache-compilers + with: + # we deliberately persist a cache folder forwards + path: /build/cache + key: ${{ runner.os }}-build-${{ env.cache-name }} + restore-keys: | + ${{ runner.os }}- - name: setup run: ./setup.sh From a4f048f620d61dfbd233094629d40052e4b3b9f0 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:42:22 +1100 Subject: [PATCH 13/29] Update setup.sh --- setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.sh b/setup.sh index 4138a024..634923d6 100644 --- a/setup.sh +++ b/setup.sh @@ -7,7 +7,7 @@ sudo mkdir -p /build cd /build #Download source files to cache folder -mkdir -p /build/cache +sudo mkdir -p /build/cache cd /build/cache/ if md5sum -c /build/source/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5; then echo "Good MD5 ARM" From f9ed0deb7445b72f0c6dfbabf0646a36b20f8f64 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:50:59 +1100 Subject: [PATCH 14/29] Test Cache --- setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.sh b/setup.sh index 634923d6..9bf99f96 100644 --- a/setup.sh +++ b/setup.sh @@ -7,6 +7,7 @@ sudo mkdir -p /build cd /build #Download source files to cache folder +# Remember if these are updated, you need to update the md5 file respectively sudo mkdir -p /build/cache cd /build/cache/ if md5sum -c /build/source/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5; then From 1235938976fdf635223dcd2b15b31471cf66250f Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:53:23 +1100 Subject: [PATCH 15/29] . --- .github/workflows/push.yml | 8 ++++---- setup.sh | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 997d7d62..3b609d02 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache - name: Cached compiler source files uses: actions/cache@v2 @@ -44,7 +44,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache - name: Cached compiler source files uses: actions/cache@v2 @@ -78,7 +78,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache - name: Cached compiler source files uses: actions/cache@v2 @@ -113,7 +113,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache - name: Cached compiler source files uses: actions/cache@v2 diff --git a/setup.sh b/setup.sh index 9bf99f96..da532f06 100644 --- a/setup.sh +++ b/setup.sh @@ -14,14 +14,14 @@ if md5sum -c /build/source/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.ta echo "Good MD5 ARM" else echo "ARM MD5 Mismatch, downloading fresh" - sudo wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -O gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 + sudo wget -q https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -O gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 fi if md5sum -c /build/source/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5; then echo "Good MD5 RISCV" else echo "RISCV MD5 Mismatch, downloading fresh" - sudo wget https://github.com/Ralim/nuclei-compiler/releases/download/2020.08/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 -O nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 + sudo wget -q https://github.com/Ralim/nuclei-compiler/releases/download/2020.08/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 -O nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2 fi echo "Extracting compilers" From 87a17ab442cd384cf82fe3e4c5b46356d3179b4e Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:55:27 +1100 Subject: [PATCH 16/29] Perms --- .github/workflows/push.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 3b609d02..db6cb94c 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build - name: Cached compiler source files uses: actions/cache@v2 @@ -44,7 +44,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build - name: Cached compiler source files uses: actions/cache@v2 @@ -78,7 +78,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build - name: Cached compiler source files uses: actions/cache@v2 @@ -113,7 +113,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build - name: Cached compiler source files uses: actions/cache@v2 From 33c34ea503e4cfb38037752470a6938b210e915a Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 11:56:46 +1100 Subject: [PATCH 17/29] Update push.yml --- .github/workflows/push.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index db6cb94c..2cc00616 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build - name: Cached compiler source files uses: actions/cache@v2 @@ -44,7 +44,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build - name: Cached compiler source files uses: actions/cache@v2 @@ -78,7 +78,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build - name: Cached compiler source files uses: actions/cache@v2 @@ -113,7 +113,7 @@ jobs: - uses: actions/checkout@v2 - name: chmod - run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R a+rwx /build + run: chmod +x setup.sh && chmod +x workspace/TS100/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build - name: Cached compiler source files uses: actions/cache@v2 From 656e80fcf6394f2b6f27b256458affe041f68fa6 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 12:00:50 +1100 Subject: [PATCH 18/29] Update setup.sh --- setup.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/setup.sh b/setup.sh index da532f06..6a235855 100644 --- a/setup.sh +++ b/setup.sh @@ -1,23 +1,24 @@ #!/bin/bash set -e # Setup shell file to setup the environment on an ubuntu machine -sudo apt-get update -sudo apt-get install -y make bzip2 git python3 wget +sudo apt-get update && sudo apt-get install -y make bzip2 git python3 wget sudo mkdir -p /build cd /build #Download source files to cache folder # Remember if these are updated, you need to update the md5 file respectively +# Github checks out under $GITHUB_WORKSPACE +MDPATH=${GITHUB_WORKSPACE:-/build/source/} sudo mkdir -p /build/cache cd /build/cache/ -if md5sum -c /build/source/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5; then +if md5sum -c $MDPATH/ci/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2.md5; then echo "Good MD5 ARM" else echo "ARM MD5 Mismatch, downloading fresh" sudo wget -q https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020q2/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -O gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 fi -if md5sum -c /build/source/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5; then +if md5sum -c $MDPATH/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5; then echo "Good MD5 RISCV" else echo "RISCV MD5 Mismatch, downloading fresh" From 2c6142d421dde0a57604a9e9942ed32b797d9186 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 12:10:02 +1100 Subject: [PATCH 19/29] C -> F use x10 internally --- workspace/TS100/Core/Drivers/TipThermoModel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index c83cc159..4f36cf5f 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -160,7 +160,8 @@ uint32_t TipThermoModel::convertuVToDegF(uint32_t tipuVDelta) { uint32_t TipThermoModel::convertCtoF(uint32_t degC) { //(Y °C × 9/5) + 32 =Y°F - return 32 + ((degC * 9) / 5); + + return (320 + ((degC * 90) / 5))/10 } uint32_t TipThermoModel::convertFtoC(uint32_t degF) { From 3696e08dde05d84be3769bb24382cf2a068e9262 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 12:16:29 +1100 Subject: [PATCH 20/29] Return max rather than 0 for handle temp if outside of temp range [TS80P] --- workspace/TS100/Core/BSP/Miniware/BSP.cpp | 67 +++++++++++------------ 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/workspace/TS100/Core/BSP/Miniware/BSP.cpp b/workspace/TS100/Core/BSP/Miniware/BSP.cpp index 62b5e6e2..9d309abe 100644 --- a/workspace/TS100/Core/BSP/Miniware/BSP.cpp +++ b/workspace/TS100/Core/BSP/Miniware/BSP.cpp @@ -60,37 +60,37 @@ static const uint16_t NTCHandleLookup[] = { 22264, 27, // 21933, 28, // 21599, 29, // - 21261, 30, // - 20921, 31, // - 20579, 32, // - 20234, 33, // - 19888, 34, // - 19541, 35, // - 19192, 36, // - 18843, 37, // - 18493, 38, // - 18143, 39, // - 17793, 40, // - 17444, 41, // - 17096, 42, // - 16750, 43, // - 16404, 44, // - 16061, 45, // - // 15719, 46, // - // 15380, 47, // - // 15044, 48, // - // 14710, 49, // - // 14380, 50, // - // 14053, 51, // - // 13729, 52, // - // 13410, 53, // - // 13094, 54, // - // 12782, 55, // - // 12475, 56, // - // 12172, 57, // - // 11874, 58, // - // 11580, 59, // - // 11292, 60, // + 21261, 30, // + 20921, 31, // + 20579, 32, // + 20234, 33, // + 19888, 34, // + 19541, 35, // + 19192, 36, // + 18843, 37, // + 18493, 38, // + 18143, 39, // + 17793, 40, // + 17444, 41, // + 17096, 42, // + 16750, 43, // + 16404, 44, // + 16061, 45, // + // 15719, 46, // + // 15380, 47, // + // 15044, 48, // + // 14710, 49, // + // 14380, 50, // + // 14053, 51, // + // 13729, 52, // + // 13410, 53, // + // 13094, 54, // + // 12782, 55, // + // 12475, 56, // + // 12172, 57, // + // 11874, 58, // + // 11580, 59, // + // 11292, 60, // }; #endif @@ -100,13 +100,12 @@ uint16_t getHandleTemperature() { //NTCG104EF104FT1X from TDK //For now not doing interpolation int32_t result = getADC(0); - for (uint32_t i = 0; i < (sizeof(NTCHandleLookup) / (2 * sizeof(uint16_t))); - i++) { + for (uint32_t i = 0; i < (sizeof(NTCHandleLookup) / (2 * sizeof(uint16_t))); i++) { if (result > NTCHandleLookup[(i * 2) + 0]) { return NTCHandleLookup[(i * 2) + 1] * 10; } } - return 0; + return 45 * 10; #endif #ifdef TEMP_TMP36 // We return the current handle temperature in X10 C From 34226ebcdbe92ec05e8e55f04de1b334953e50e2 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 12:21:23 +1100 Subject: [PATCH 21/29] Update TipThermoModel.cpp --- workspace/TS100/Core/Drivers/TipThermoModel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 4f36cf5f..5d8633f2 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -161,7 +161,7 @@ uint32_t TipThermoModel::convertuVToDegF(uint32_t tipuVDelta) { uint32_t TipThermoModel::convertCtoF(uint32_t degC) { //(Y °C × 9/5) + 32 =Y°F - return (320 + ((degC * 90) / 5))/10 + return (320 + ((degC * 90) / 5))/10; } uint32_t TipThermoModel::convertFtoC(uint32_t degF) { From 7ea6d4afbd90f23e52e941dc1818c2b49f409c39 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 12:40:30 +1100 Subject: [PATCH 22/29] Fix bug in tip -> F logic --- workspace/TS100/Core/Drivers/TipThermoModel.cpp | 14 ++++++-------- workspace/TS100/Core/Inc/Translation.h | 5 +---- workspace/TS100/Core/Threads/GUIThread.cpp | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 5d8633f2..473cd60a 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -160,14 +160,14 @@ uint32_t TipThermoModel::convertuVToDegF(uint32_t tipuVDelta) { uint32_t TipThermoModel::convertCtoF(uint32_t degC) { //(Y °C × 9/5) + 32 =Y°F - - return (320 + ((degC * 90) / 5))/10; + return (32 + ((degC * 9) / 5)); } uint32_t TipThermoModel::convertFtoC(uint32_t degF) { //(Y°F − 32) × 5/9 = Y°C - if (degF < 32) - return 0; + if (degF < 32) { + return 0; + } return ((degF - 32) * 5) / 9; } #endif @@ -185,10 +185,8 @@ uint32_t TipThermoModel::getTipInC(bool sampleNow) { } #ifdef ENABLED_FAHRENHEIT_SUPPORT uint32_t TipThermoModel::getTipInF(bool sampleNow) { - uint32_t currentTipTempInF = TipThermoModel::convertTipRawADCToDegF( - getTipRawTemp(sampleNow)); - currentTipTempInF += convertCtoF(getHandleTemperature() / 10); //Add handle offset - currentTipTempInF += x10WattHistory.average() / 45; // 25 * 9 / 5, see getTipInC + uint32_t currentTipTempInF = getTipInC(sampleNow); + currentTipTempInF = convertCtoF(currentTipTempInF); return currentTipTempInF; } #endif diff --git a/workspace/TS100/Core/Inc/Translation.h b/workspace/TS100/Core/Inc/Translation.h index e090f06d..1ee90e2a 100755 --- a/workspace/TS100/Core/Inc/Translation.h +++ b/workspace/TS100/Core/Inc/Translation.h @@ -11,10 +11,7 @@ #include "stdint.h" extern const uint8_t USER_FONT_12[]; extern const uint8_t USER_FONT_6x8[]; -/* - * When SettingsShortNameType is SHORT_NAME_SINGLE_LINE - * use SettingsShortNames as SettingsShortNames[16][1].. second column undefined - */ + extern const char *SettingsShortNames[29][2]; extern const char *SettingsDescriptions[29]; extern const char *SettingsMenuEntries[4]; diff --git a/workspace/TS100/Core/Threads/GUIThread.cpp b/workspace/TS100/Core/Threads/GUIThread.cpp index 5af727c8..6a468c79 100755 --- a/workspace/TS100/Core/Threads/GUIThread.cpp +++ b/workspace/TS100/Core/Threads/GUIThread.cpp @@ -66,7 +66,7 @@ void gui_drawTipTemp(bool symbol) { Temp = TipThermoModel::getTipInC(); } - OLED::printNumber(Temp, 3); // Draw the tip temp out finally + OLED::printNumber(Temp, 3); // Draw the tip temp out if (symbol) { if (OLED::getFont() == 0) { // Big font, can draw nice symbols From 357f073e1da00977b01eac3079e274c5de69005c Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 13:16:49 +1100 Subject: [PATCH 23/29] Expand debug menu --- Documentation/Debug Menu.md | 76 ++++ Documentation/{Upgrading.md => Flashing.md} | 2 +- Translation Editor/make_translation.py | 412 ++++++++++++-------- workspace/TS100/Core/Threads/GUIThread.cpp | 92 +++-- 4 files changed, 387 insertions(+), 195 deletions(-) create mode 100644 Documentation/Debug Menu.md rename Documentation/{Upgrading.md => Flashing.md} (97%) diff --git a/Documentation/Debug Menu.md b/Documentation/Debug Menu.md new file mode 100644 index 00000000..f06ed6b2 --- /dev/null +++ b/Documentation/Debug Menu.md @@ -0,0 +1,76 @@ +# Debugging Menu + +In this firmware there is extra debugging information hidden under and extra menu. +This is accessed by holding the rear (B) button on the iron while its on the home screen. + +This menu is meant to be simple, so it has no fancy GUI animations. + +To move through the menu use the front (A) button. +To exit, use the rear (B) button again. + +## Menu items + +Items are shown in the menu on a single line, so they use short codes + +### HW G + +This indicates the High Water mark for the stack for the GUI thread. The smaller this number is, the less headroom we have in the stack. +As this is a Highwater mater, you should only trust this once you have walked through all GUI options to "hit" the worst one. + +### HW M + +This indicates the High Water mark for the stack for the movement detection thread. The smaller this number is, the less headroom we have in the stack. + +### HW P + +This indicates the High Water mark for the stack for the PID thread. The smaller this number is, the less headroom we have in the stack. + +### Time + +This just shows how many seconds the unit has been powered for. + +### Move + +This is the last timestamp of movement. When the iron is moved this should update to match the Time field (one before in the menu). +This can be used for checking performance of the movement dection code. + +### RTip + +This is the raw tip reading in uV. This can be used when assessing the calibration routines for example. + +### CTip + +This is the tip temperature in deg C. This can be used with RTip for assessing temperature processing performance. + +### CHan + +This is the handle temperature in C. This is used for cold junction compensation of the tip temp. + +### Vin + +The input voltage reading. + +### PCB + +This is slightly miss-named, but preserving the name for now. +This indicates the PCB "version" number, which comes from the TS100 changing the model of accelerometer without warning. +This indicates the accelerometer that is fitted inside the unit. + +- 0 = MMA8652 +- 1 = LIS2DH12 +- 2 = BMA223 +- 99 = None detected (running in fallback without movement detection) + +### PWR + +This indicates the current power source for the iron. +This may change during power up as the sources are negotiated in turn. + +- 0 = DC input (dumb) +- 1 = QC input (We used QC2/3 negotiation for current supply) +- 2 = PD input (We used the PD subsystem to negotiate for the current supply) + +### Max + +This indicates the max temp in C that the system estimates it can measure the tip reliably to. +This is dependant on a few factors including the handle temperature so it can move around during use. \ No newline at end of file diff --git a/Documentation/Upgrading.md b/Documentation/Flashing.md similarity index 97% rename from Documentation/Upgrading.md rename to Documentation/Flashing.md index 770ff0ea..0ee9f5f0 100644 --- a/Documentation/Upgrading.md +++ b/Documentation/Flashing.md @@ -1,4 +1,4 @@ -# Upgrading your iron +# Flashing / Upgrading your iron ## Miniware irons (TS100, TS80, TS80P) diff --git a/Translation Editor/make_translation.py b/Translation Editor/make_translation.py index 1bebe57c..a253cc76 100755 --- a/Translation Editor/make_translation.py +++ b/Translation Editor/make_translation.py @@ -54,19 +54,20 @@ def readTranslations(jsonDir): langCode = fileName[12:-5].upper() # ...and the one specified in the JSON file... try: - langCodeFromJson = lang['languageCode'] + langCodeFromJson = lang["languageCode"] except KeyError: langCodeFromJson = "(missing)" try: - TempUnitF_FromJson = lang['tempUnitFahrenheit'] + TempUnitF_FromJson = lang["tempUnitFahrenheit"] except KeyError: - TempUnitF_FromJson = True # Default to true. - + TempUnitF_FromJson = True # Default to true. + # ...cause they should be the same! if langCode != langCodeFromJson: - raise ValueError("Invalid languageCode " + langCodeFromJson + - " in file " + fileName) + raise ValueError( + "Invalid languageCode " + langCodeFromJson + " in file " + fileName + ) langDict[langCode] = lang UnitDict[langCode] = TempUnitF_FromJson @@ -82,7 +83,9 @@ def writeStart(f): #ifndef LANG #define LANG_EN #endif -""")) +""" + ) + ) def writeStartUnit(f): @@ -100,86 +103,91 @@ def writeStartUnit(f): #ifndef _UNIT_H #define _UNIT_H\n -""")) +""" + ) + ) + def escapeC(s): - return s.replace("\"", "\\\"") + return s.replace('"', '\\"') def getConstants(): # Extra constants that are used in the firmware that are shared across all languages consants = [] - consants.append(('SymbolPlus', '+')) - consants.append(('SymbolMinus', '-')) - consants.append(('SymbolSpace', ' ')) - consants.append(('SymbolDot', '.')) - consants.append(('SymbolDegC', 'C')) - consants.append(('SymbolDegF', 'F')) - consants.append(('SymbolMinutes', 'M')) - consants.append(('SymbolSeconds', 'S')) - consants.append(('SymbolWatts', 'W')) - consants.append(('SymbolVolts', 'V')) - consants.append(('SymbolDC', 'DC')) - consants.append(('SymbolCellCount', 'S')) - consants.append(('SymbolVersionNumber', buildVersion)) + consants.append(("SymbolPlus", "+")) + consants.append(("SymbolMinus", "-")) + consants.append(("SymbolSpace", " ")) + consants.append(("SymbolDot", ".")) + consants.append(("SymbolDegC", "C")) + consants.append(("SymbolDegF", "F")) + consants.append(("SymbolMinutes", "M")) + consants.append(("SymbolSeconds", "S")) + consants.append(("SymbolWatts", "W")) + consants.append(("SymbolVolts", "V")) + consants.append(("SymbolDC", "DC")) + consants.append(("SymbolCellCount", "S")) + consants.append(("SymbolVersionNumber", buildVersion)) return consants - def getDebugMenu(): constants = [] - constants.append(datetime.today().strftime('%d-%m-%y')) - constants.append("HW G ") - constants.append("HW M ") - constants.append("HW P ") - constants.append("Time ") - constants.append("Move ") - constants.append("RTip ") - constants.append("CTip ") - constants.append("CHan ") - constants.append("Vin ") + constants.append(datetime.today().strftime("%d-%m-%y")) + constants.append("HW G ") # High Water marker for GUI task + constants.append("HW M ") # High Water marker for MOV task + constants.append("HW P ") # High Water marker for PID task + constants.append("Time ") # Uptime (aka timestamp) + constants.append("Move ") # Time of last significant movement + constants.append("RTip ") # Tip reading in uV + constants.append("CTip ") # Tip temp in C + constants.append("CHan ") # Handle temp in C + constants.append("Vin ") # Input voltage constants.append("PCB ") # PCB Version AKA IMU version + constants.append("PWR ") # Power Negotiation State + constants.append("Max ") # Max deg C limit + return constants def getLetterCounts(defs, lang): textList = [] # iterate over all strings - obj = lang['menuOptions'] - for mod in defs['menuOptions']: - eid = mod['id'] - textList.append(obj[eid]['desc']) + obj = lang["menuOptions"] + for mod in defs["menuOptions"]: + eid = mod["id"] + textList.append(obj[eid]["desc"]) - obj = lang['messages'] - for mod in defs['messages']: - eid = mod['id'] + obj = lang["messages"] + for mod in defs["messages"]: + eid = mod["id"] if eid not in obj: - textList.append(mod['default']) + textList.append(mod["default"]) else: textList.append(obj[eid]) - obj = lang['characters'] + obj = lang["characters"] - for mod in defs['characters']: - eid = mod['id'] + for mod in defs["characters"]: + eid = mod["id"] textList.append(obj[eid]) - obj = lang['menuOptions'] - for mod in defs['menuOptions']: - eid = mod['id'] - textList.append(obj[eid]['text2'][0]) - textList.append(obj[eid]['text2'][1]) + obj = lang["menuOptions"] + for mod in defs["menuOptions"]: + eid = mod["id"] + textList.append(obj[eid]["text2"][0]) + textList.append(obj[eid]["text2"][1]) - obj = lang['menuGroups'] - for mod in defs['menuGroups']: - eid = mod['id'] - textList.append(obj[eid]['text2'][0]) - textList.append(obj[eid]['text2'][1]) + obj = lang["menuGroups"] + for mod in defs["menuGroups"]: + eid = mod["id"] + textList.append(obj[eid]["text2"][0]) + textList.append(obj[eid]["text2"][1]) - obj = lang['menuGroups'] - for mod in defs['menuGroups']: - eid = mod['id'] - textList.append(obj[eid]['desc']) + obj = lang["menuGroups"] + for mod in defs["menuGroups"]: + eid = mod["id"] + textList.append(obj[eid]["desc"]) constants = getConstants() for x in constants: textList.append(x[1]) @@ -189,15 +197,15 @@ def getLetterCounts(defs, lang): symbolCounts = {} for line in textList: - line = line.replace('\n', '').replace('\r', '') - line = line.replace('\\n', '').replace('\\r', '') + line = line.replace("\n", "").replace("\r", "") + line = line.replace("\\n", "").replace("\\r", "") if len(line): # print(line) for letter in line: symbolCounts[letter] = symbolCounts.get(letter, 0) + 1 symbolCounts = sorted( - symbolCounts.items(), - key=lambda kv: (kv[1], kv[0])) # swap to Big -> little sort order + symbolCounts.items(), key=lambda kv: (kv[1], kv[0]) + ) # swap to Big -> little sort order symbolCounts = list(map(lambda x: x[0], symbolCounts)) symbolCounts.reverse() return symbolCounts @@ -207,17 +215,17 @@ def getFontMapAndTable(textList): # the text list is sorted # allocate out these in their order as number codes symbolMap = {} - symbolMap['\n'] = '\\x01' # Force insert the newline char + symbolMap["\n"] = "\\x01" # Force insert the newline char index = 2 # start at 2, as 0= null terminator,1 = new line - forcedFirstSymbols = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] + forcedFirstSymbols = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] # enforce numbers are first for sym in forcedFirstSymbols: symbolMap[sym] = "\\x%0.2X" % index index = index + 1 if len(textList) > (253 - len(forcedFirstSymbols)): - print('Error, too many used symbols for this version') + print("Error, too many used symbols for this version") exit(1) - print('Generating fonts for {} symbols'.format(len(textList))) + print("Generating fonts for {} symbols".format(len(textList))) for sym in textList: if sym not in symbolMap: @@ -230,39 +238,38 @@ def getFontMapAndTable(textList): fontSmallTable = fontTables.getSmallFontMap() for sym in forcedFirstSymbols: if sym not in fontTable: - print('Missing Large font element for {}'.format(sym)) + print("Missing Large font element for {}".format(sym)) exit(1) fontLine = fontTable[sym] - fontTableStrings.append( - fontLine + "//{} -> {}".format(symbolMap[sym], sym)) + fontTableStrings.append(fontLine + "//{} -> {}".format(symbolMap[sym], sym)) if sym not in fontSmallTable: - print('Missing Small font element for {}'.format(sym)) + print("Missing Small font element for {}".format(sym)) exit(1) fontLine = fontSmallTable[sym] fontSmallTableStrings.append( - fontLine + "//{} -> {}".format(symbolMap[sym], sym)) + fontLine + "//{} -> {}".format(symbolMap[sym], sym) + ) for sym in textList: if sym not in fontTable: - print('Missing Large font element for {}'.format(sym)) + print("Missing Large font element for {}".format(sym)) exit(1) if sym not in forcedFirstSymbols: fontLine = fontTable[sym] - fontTableStrings.append( - fontLine + "//{} -> {}".format(symbolMap[sym], sym)) + fontTableStrings.append(fontLine + "//{} -> {}".format(symbolMap[sym], sym)) if sym not in fontSmallTable: - print('Missing Small font element for {}'.format(sym)) + print("Missing Small font element for {}".format(sym)) exit(1) fontLine = fontSmallTable[sym] fontSmallTableStrings.append( - fontLine + "//{} -> {}".format(symbolMap[sym], sym)) + fontLine + "//{} -> {}".format(symbolMap[sym], sym) + ) outputTable = "const uint8_t USER_FONT_12[] = {" + to_unicode("\n") for line in fontTableStrings: # join font table int one large string outputTable = outputTable + line + to_unicode("\n") outputTable = outputTable + "};" + to_unicode("\n") - outputTable = outputTable + "const uint8_t USER_FONT_6x8[] = {" + to_unicode( - "\n") + outputTable = outputTable + "const uint8_t USER_FONT_6x8[] = {" + to_unicode("\n") for line in fontSmallTableStrings: # join font table int one large string outputTable = outputTable + line + to_unicode("\n") @@ -273,9 +280,9 @@ def getFontMapAndTable(textList): def convStr(symbolConversionTable, text): # convert all of the symbols from the string into escapes for their content outputString = "" - for c in text.replace('\\r', '').replace('\\n', '\n'): + for c in text.replace("\\r", "").replace("\\n", "\n"): if c not in symbolConversionTable: - print('Missing font definition for {}'.format(c)) + print("Missing font definition for {}".format(c)) else: outputString = outputString + symbolConversionTable[c] return outputString @@ -292,60 +299,86 @@ def writeLanguage(languageCode, defs, f): f.write(to_unicode("\n#ifdef LANG_" + languageCode + "\n")) f.write(fontTableText) try: - langName = lang['languageLocalName'] + langName = lang["languageLocalName"] except KeyError: langName = languageCode f.write(to_unicode("// ---- " + langName + " ----\n\n")) # ----- Writing SettingsDescriptions - obj = lang['menuOptions'] + obj = lang["menuOptions"] f.write(to_unicode("const char* SettingsDescriptions[] = {\n")) maxLen = 25 - index =0 - for mod in defs['menuOptions']: - eid = mod['id'] - if 'feature' in mod: - f.write(to_unicode("#ifdef " + mod['feature'] + "\n")) - f.write(to_unicode(" /* ["+"{:02d}".format(index)+"] " + eid.ljust(maxLen)[:maxLen] + " */ ")) + index = 0 + for mod in defs["menuOptions"]: + eid = mod["id"] + if "feature" in mod: + f.write(to_unicode("#ifdef " + mod["feature"] + "\n")) f.write( - to_unicode("\"" + - convStr(symbolConversionTable, (obj[eid]['desc'])) + - "\"," + "//{} \n".format(obj[eid]['desc']))) - if 'feature' in mod: + to_unicode( + " /* [" + + "{:02d}".format(index) + + "] " + + eid.ljust(maxLen)[:maxLen] + + " */ " + ) + ) + f.write( + to_unicode( + '"' + + convStr(symbolConversionTable, (obj[eid]["desc"])) + + '",' + + "//{} \n".format(obj[eid]["desc"]) + ) + ) + if "feature" in mod: f.write(to_unicode("#endif\n")) - index=index+1 + index = index + 1 f.write(to_unicode("};\n\n")) # ----- Writing Message strings - obj = lang['messages'] + obj = lang["messages"] - for mod in defs['messages']: - eid = mod['id'] + for mod in defs["messages"]: + eid = mod["id"] sourceText = "" - if 'default' in mod: - sourceText = (mod['default']) + if "default" in mod: + sourceText = mod["default"] if eid in obj: - sourceText = (obj[eid]) + sourceText = obj[eid] translatedText = convStr(symbolConversionTable, sourceText) f.write( - to_unicode("const char* " + eid + " = \"" + - translatedText + "\";" + "//{} \n".format(sourceText.replace('\n', '_')))) + to_unicode( + "const char* " + + eid + + ' = "' + + translatedText + + '";' + + "//{} \n".format(sourceText.replace("\n", "_")) + ) + ) f.write(to_unicode("\n")) # ----- Writing Characters - obj = lang['characters'] + obj = lang["characters"] - for mod in defs['characters']: - eid = mod['id'] + for mod in defs["characters"]: + eid = mod["id"] f.write( - to_unicode("const char* " + eid + " = \"" + - convStr(symbolConversionTable, obj[eid]) + "\";" + "//{} \n".format(obj[eid]))) + to_unicode( + "const char* " + + eid + + ' = "' + + convStr(symbolConversionTable, obj[eid]) + + '";' + + "//{} \n".format(obj[eid]) + ) + ) f.write(to_unicode("\n")) @@ -353,8 +386,15 @@ def writeLanguage(languageCode, defs, f): constants = getConstants() for x in constants: f.write( - to_unicode("const char* " + x[0] + " = \"" + - convStr(symbolConversionTable, x[1]) + "\";" + "//{} \n".format(x[1]))) + to_unicode( + "const char* " + + x[0] + + ' = "' + + convStr(symbolConversionTable, x[1]) + + '";' + + "//{} \n".format(x[1]) + ) + ) f.write(to_unicode("\n")) @@ -362,66 +402,91 @@ def writeLanguage(languageCode, defs, f): f.write(to_unicode("const char* DebugMenu[] = {\n")) for c in getDebugMenu(): - f.write(to_unicode("\t \"" + convStr(symbolConversionTable, - c) + "\"," + "//{} \n".format(c))) + f.write( + to_unicode( + '\t "' + convStr(symbolConversionTable, c) + '",' + "//{} \n".format(c) + ) + ) f.write(to_unicode("};\n\n")) # ----- Writing SettingsDescriptions - obj = lang['menuOptions'] + obj = lang["menuOptions"] f.write(to_unicode("const char* SettingsShortNames[][2] = {\n")) maxLen = 25 index = 0 - for mod in defs['menuOptions']: - eid = mod['id'] - if 'feature' in mod: - f.write(to_unicode("#ifdef " + mod['feature'] + "\n")) - f.write(to_unicode(" /* ["+"{:02d}".format(index)+"] " + eid.ljust(maxLen)[:maxLen] + " */ ")) + for mod in defs["menuOptions"]: + eid = mod["id"] + if "feature" in mod: + f.write(to_unicode("#ifdef " + mod["feature"] + "\n")) f.write( to_unicode( - "{ \"" + - convStr(symbolConversionTable, (obj[eid]['text2'][0])) + - "\", \"" + - convStr(symbolConversionTable, (obj[eid]['text2'][1])) + - "\" }," + "//{} \n".format(obj[eid]['text2']))) - - if 'feature' in mod: + " /* [" + + "{:02d}".format(index) + + "] " + + eid.ljust(maxLen)[:maxLen] + + " */ " + ) + ) + f.write( + to_unicode( + '{ "' + + convStr(symbolConversionTable, (obj[eid]["text2"][0])) + + '", "' + + convStr(symbolConversionTable, (obj[eid]["text2"][1])) + + '" },' + + "//{} \n".format(obj[eid]["text2"]) + ) + ) + + if "feature" in mod: f.write(to_unicode("#endif\n")) - index = index + 1 + index = index + 1 f.write(to_unicode("};\n\n")) # ----- Writing Menu Groups - obj = lang['menuGroups'] - f.write( - to_unicode("const char* SettingsMenuEntries[" + str(len(obj)) + - "] = {\n")) + obj = lang["menuGroups"] + f.write(to_unicode("const char* SettingsMenuEntries[" + str(len(obj)) + "] = {\n")) maxLen = 25 - for mod in defs['menuGroups']: - eid = mod['id'] + for mod in defs["menuGroups"]: + eid = mod["id"] f.write(to_unicode(" /* " + eid.ljust(maxLen)[:maxLen] + " */ ")) f.write( - to_unicode("\"" + - convStr(symbolConversionTable, (obj[eid]['text2'][0]) + - "\\n" + obj[eid]['text2'][1]) + "\"," + "//{} \n".format(obj[eid]['text2']))) + to_unicode( + '"' + + convStr( + symbolConversionTable, + (obj[eid]["text2"][0]) + "\\n" + obj[eid]["text2"][1], + ) + + '",' + + "//{} \n".format(obj[eid]["text2"]) + ) + ) f.write(to_unicode("};\n\n")) # ----- Writing Menu Groups Descriptions - obj = lang['menuGroups'] + obj = lang["menuGroups"] f.write( - to_unicode("const char* SettingsMenuEntriesDescriptions[" + - str(len(obj)) + "] = {\n")) + to_unicode( + "const char* SettingsMenuEntriesDescriptions[" + str(len(obj)) + "] = {\n" + ) + ) maxLen = 25 - for mod in defs['menuGroups']: - eid = mod['id'] + for mod in defs["menuGroups"]: + eid = mod["id"] f.write(to_unicode(" /* " + eid.ljust(maxLen)[:maxLen] + " */ ")) f.write( - to_unicode("\"" + - convStr(symbolConversionTable, (obj[eid]['desc'])) + - "\"," + "//{} \n".format(obj[eid]['desc']))) + to_unicode( + '"' + + convStr(symbolConversionTable, (obj[eid]["desc"])) + + '",' + + "//{} \n".format(obj[eid]["desc"]) + ) + ) f.write(to_unicode("};\n\n")) @@ -434,36 +499,49 @@ def writeUnit(languageCode, defs, f, UnitCodes): lang = langDict[languageCode] unit = UnitDict[UnitCodes] try: - langName = lang['languageLocalName'] + langName = lang["languageLocalName"] except KeyError: langName = languageCode f.write(to_unicode(" #ifdef LANG_" + languageCode + "\n")) - if unit: + if unit: f.write(to_unicode(" #define ENABLED_FAHRENHEIT_SUPPORT" + "\n")) - else: f.write(to_unicode(" //#define ENABLED_FAHRENHEIT_SUPPORT" + "\n")) + else: + f.write(to_unicode(" //#define ENABLED_FAHRENHEIT_SUPPORT" + "\n")) # ----- Block end f.write(to_unicode(" #endif /* ---- " + langName + " ---- */\n")) + def readVersion(): - with open(os.path.relpath(jsonDir + - "/../workspace/TS100/version.h"),"r") as version_file: - try: + with open( + os.path.relpath(jsonDir + "/../workspace/TS100/version.h"), "r" + ) as version_file: + try: for line in version_file: - if re.findall(r'^.*(?<=(#define)).*(?<=(BUILD_VERSION))', line): - line = re.findall(r'\"(.+?)\"',line) - if line: + if re.findall(r"^.*(?<=(#define)).*(?<=(BUILD_VERSION))", line): + line = re.findall(r"\"(.+?)\"", line) + if line: version = line[0] - try: version += "."+ subprocess.check_output( - ["git","rev-parse", "--short=7", "HEAD"]).strip().decode('ascii').upper() - # --short=7: the shorted hash with 7 digits. Increase/decrease if needed! - except OSError: version += " git" - finally: - if version_file: - version_file.close(); + try: + version += ( + "." + + subprocess.check_output( + ["git", "rev-parse", "--short=7", "HEAD"] + ) + .strip() + .decode("ascii") + .upper() + ) + # --short=7: the shorted hash with 7 digits. Increase/decrease if needed! + except OSError: + version += " git" + finally: + if version_file: + version_file.close() return version + def read_opts(): - """ Reading input parameters + """Reading input parameters First parameter = json directory Second parameter = translation directory Third paramter = unit directory @@ -478,12 +556,12 @@ def read_opts(): else: outDir = os.path.relpath(jsonDir + "/../workspace/TS100/Core/Src") outFileTranslationCPP = os.path.join(outDir, TRANSLATION_CPP) - + if len(sys.argv) > 3: outFileUnitH = sys.argv[3] else: outDir = os.path.relpath(jsonDir + "/../workspace/TS100/Core/Inc") - outFileUnitH = os.path.join(outDir,UNIT_H) + outFileUnitH = os.path.join(outDir, UNIT_H) if len(sys.argv) > 4: raise Exception("Too many parameters!") @@ -493,7 +571,7 @@ def read_opts(): def orderOutput(langDict): # These languages go first - mandatoryOrder = ['EN'] + mandatoryOrder = ["EN"] # Then add all others in alphabetical order sortedKeys = sorted(langDict.keys()) @@ -508,17 +586,18 @@ def orderOutput(langDict): def writeTarget(outFileTranslationCPP, outFileUnitH, defs, langCodes, UnitCodes): # Start writing the file - with io.open(outFileTranslationCPP, 'w', encoding='utf-8', newline="\n") as f: + with io.open(outFileTranslationCPP, "w", encoding="utf-8", newline="\n") as f: writeStart(f) for langCode in langCodes: writeLanguage(langCode, defs, f) - with io.open(outFileUnitH, 'w', encoding='utf-8', newline="\n") as f: + with io.open(outFileUnitH, "w", encoding="utf-8", newline="\n") as f: writeStartUnit(f) for langCode, UnitCode in zip(langCodes, UnitCodes): writeUnit(langCode, defs, f, UnitCode) f.write(to_unicode("\n#endif /* _UNIT_H */\n")) + if __name__ == "__main__": try: jsonDir, outFileTranslationCPP, outFileUnitH = read_opts() @@ -526,8 +605,11 @@ if __name__ == "__main__": print("usage: make_translation.py {json dir} {cpp dir}") sys.exit(1) - try: buildVersion = readVersion() - except: print("error: could not get/extract build version"); sys.exit(1) + try: + buildVersion = readVersion() + except: + print("error: could not get/extract build version") + sys.exit(1) print("Build version: " + buildVersion) print("Making " + outFileTranslationCPP + " from " + jsonDir) diff --git a/workspace/TS100/Core/Threads/GUIThread.cpp b/workspace/TS100/Core/Threads/GUIThread.cpp index 6a468c79..910130e6 100755 --- a/workspace/TS100/Core/Threads/GUIThread.cpp +++ b/workspace/TS100/Core/Threads/GUIThread.cpp @@ -72,18 +72,18 @@ void gui_drawTipTemp(bool symbol) { // Big font, can draw nice symbols #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - OLED::drawSymbol(0); + OLED::drawSymbol(0); else #endif - OLED::drawSymbol(1); + OLED::drawSymbol(1); } else { // Otherwise fall back to chars #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - OLED::print(SymbolDegF); + OLED::print(SymbolDegF); else #endif - OLED::print(SymbolDegC); + OLED::print(SymbolDegC); } } } @@ -234,9 +234,9 @@ static void gui_solderingTempAdjust() { #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) { if (systemSettings.SolderingTemp > 850) - systemSettings.SolderingTemp = 850; + systemSettings.SolderingTemp = 850; if (systemSettings.SolderingTemp < 60) - systemSettings.SolderingTemp = 60; + systemSettings.SolderingTemp = 60; } else #endif { @@ -263,7 +263,7 @@ static void gui_solderingTempAdjust() { OLED::printNumber(systemSettings.SolderingTemp, 3); #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - OLED::drawSymbol(0); + OLED::drawSymbol(0); else #endif { @@ -313,11 +313,7 @@ static int gui_SolderingSleepingMode(bool stayOff) { #endif #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) { - currentTempTargetDegC = - stayOff - ? 0 - : TipThermoModel::convertFtoC(min(systemSettings.SleepTemp, - systemSettings.SolderingTemp)); + currentTempTargetDegC = stayOff ? 0 : TipThermoModel::convertFtoC(min(systemSettings.SleepTemp, systemSettings.SolderingTemp)); } else #endif { @@ -327,7 +323,7 @@ static int gui_SolderingSleepingMode(bool stayOff) { uint16_t tipTemp; #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - tipTemp = TipThermoModel::getTipInF(); + tipTemp = TipThermoModel::getTipInF(); else #endif { @@ -344,7 +340,7 @@ static int gui_SolderingSleepingMode(bool stayOff) { OLED::printNumber(tipTemp, 3); #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - OLED::print(SymbolDegF); + OLED::print(SymbolDegF); else #endif { @@ -360,7 +356,7 @@ static int gui_SolderingSleepingMode(bool stayOff) { OLED::printNumber(tipTemp, 3); #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - OLED::drawSymbol(0); + OLED::drawSymbol(0); else #endif { @@ -474,7 +470,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) { OLED::setCursor(0, 0); OLED::clearScreen(); OLED::setFont(0); - OLED::print (UnlockingKeysString); + OLED::print(UnlockingKeysString); OLED::refresh(); waitForButtonPressOrTimeout(1000); break; @@ -494,7 +490,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) { OLED::setCursor(0, 0); OLED::clearScreen(); OLED::setFont(0); - OLED::print (WarningKeysLockedString); + OLED::print(WarningKeysLockedString); OLED::refresh(); waitForButtonPressOrTimeout(500); break; @@ -535,7 +531,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) { OLED::setCursor(0, 0); OLED::clearScreen(); OLED::setFont(0); - OLED::print (LockingKeysString); + OLED::print(LockingKeysString); OLED::refresh(); waitForButtonPressOrTimeout(1000); } @@ -608,8 +604,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) { if (boostModeOn) { #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - currentTempTargetDegC = - TipThermoModel::convertFtoC(systemSettings.BoostTemp); + currentTempTargetDegC = TipThermoModel::convertFtoC(systemSettings.BoostTemp); else #endif { @@ -618,8 +613,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) { } else { #ifdef ENABLED_FAHRENHEIT_SUPPORT if (systemSettings.temperatureInF) - currentTempTargetDegC = - TipThermoModel::convertFtoC(systemSettings.SolderingTemp); + currentTempTargetDegC = TipThermoModel::convertFtoC(systemSettings.SolderingTemp); else #endif { @@ -703,6 +697,35 @@ void showDebugMenu(void) { // Print PCB ID number OLED::printNumber(PCBVersion, 2); break; + case 11: + // Power negotiation status + if (getIsPoweredByDCIN()) { + OLED::printNumber(0, 1); + } else { + //We are not powered via DC, so want to display the appropriate state for PD or QC + bool poweredbyPD = false; +#ifdef POW_PD + if (usb_pd_detect()){ + //We are PD capable + if (PolicyEngine::pdHasNegotiated()) { + //We are powered via PD + poweredbyPD=true; + } + } +#endif + if (poweredbyPD) { + + OLED::printNumber(2, 1); + } else { + + OLED::printNumber(1, 1); + } + } + break; + case 12: + //Max deg C limit + OLED::printNumber(TipThermoModel::getTipMaxInC(), 3); + break; default: break; } @@ -713,7 +736,7 @@ void showDebugMenu(void) { return; else if (b == BUTTON_F_SHORT) { screen++; - screen = screen % 11; + screen = screen % 13; } GUIDelay(); } @@ -726,6 +749,7 @@ void startGUITask(void const *argument __unused) { uint8_t tempWarningState = 0; bool buttonLockout = false; bool tempOnDisplay = false; + bool tipDisconnectedDisplay = false; { // Generate the flipped screen into ram for later use // flipped is generated by flipping each row @@ -822,19 +846,20 @@ void startGUITask(void const *argument __unused) { // the tip temperature is below 50 degrees C *and* motion sleep // detection is enabled *and* there has been no activity (movement or // button presses) in a while. + // This is zero cost really as state is only changed on display updates OLED::setDisplayState(OLED::DisplayState::ON); if ((tipTemp < 50) && systemSettings.sensitivity && (((xTaskGetTickCount() - lastMovementTime) > MOVEMENT_INACTIVITY_TIME) && ((xTaskGetTickCount() - lastButtonTime) > BUTTON_INACTIVITY_TIME))) { OLED::setDisplayState(OLED::DisplayState::OFF); } - + uint16_t tipDisconnectedThres = TipThermoModel::getTipMaxInC() - 5; // Clear the lcd buffer OLED::clearScreen(); OLED::setCursor(0, 0); if (systemSettings.detailedIDLE) { OLED::setFont(1); - if (tipTemp > 470) { + if (tipTemp > tipDisconnectedThres) { OLED::print(TipDisconnectedString); } else { OLED::print(IdleTipString); @@ -863,11 +888,16 @@ void startGUITask(void const *argument __unused) { OLED::setCursor(84, 0); gui_drawBatteryIcon(); } + tipDisconnectedDisplay = false; if (tipTemp > 55) tempOnDisplay = true; else if (tipTemp < 45) tempOnDisplay = false; - if (tempOnDisplay) { + if (tipTemp > tipDisconnectedThres) { + tempOnDisplay = false; + tipDisconnectedDisplay = true; + } + if (tempOnDisplay || tipDisconnectedDisplay) { // draw temp over the start soldering button // Location changes on screen rotation #ifdef OLED_FLIP @@ -883,11 +913,15 @@ void startGUITask(void const *argument __unused) { OLED::fillArea(0, 0, 41, 16, 0); // clear the area OLED::setCursor(0, 0); } - // draw in the temp - if (!(systemSettings.coolingTempBlink && (xTaskGetTickCount() % 25 < 16))) - gui_drawTipTemp(false); // draw in the temp + //If we have a tip connected draw the temp, if not we leave it blank + if (!tipDisconnectedDisplay) { + // draw in the temp + if (!(systemSettings.coolingTempBlink && (xTaskGetTickCount() % 250 < 160))) + gui_drawTipTemp(false); // draw in the temp + } } } + OLED::refresh(); GUIDelay(); } From a350a8d4efc3c60bd454ffd5d3627d0e6516afef Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Tue, 29 Dec 2020 13:25:44 +1100 Subject: [PATCH 24/29] Update GUIThread.cpp --- workspace/TS100/Core/Threads/GUIThread.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workspace/TS100/Core/Threads/GUIThread.cpp b/workspace/TS100/Core/Threads/GUIThread.cpp index 910130e6..8b98d5cf 100755 --- a/workspace/TS100/Core/Threads/GUIThread.cpp +++ b/workspace/TS100/Core/Threads/GUIThread.cpp @@ -23,6 +23,9 @@ extern "C" { #include #include #include +#ifdef POW_PD +#include "policy_engine.h" +#endif // File local variables extern uint32_t currentTempTargetDegC; extern TickType_t lastMovementTime; From f9f15214b297137446e1e1c8aeddd23d6843dbb3 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Wed, 30 Dec 2020 10:05:14 +1100 Subject: [PATCH 25/29] Remove missing font chars from small font --- Translation Editor/fontTables.py | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/Translation Editor/fontTables.py b/Translation Editor/fontTables.py index 18c9d7f5..f5b5af89 100755 --- a/Translation Editor/fontTables.py +++ b/Translation Editor/fontTables.py @@ -520,7 +520,6 @@ def getSmallFontMap(): "}":"0x00, 0x00, 0x41, 0x36, 0x08, 0x00,", "~":"0x02, 0x01, 0x02, 0x04, 0x02, 0x00,", "^":"0x04, 0x02, 0x01, 0x02, 0x04, 0x00,", - " ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "¡":"0x00, 0x00, 0x79, 0x00, 0x00, 0x00,", "¢":"0x1c, 0x22, 0x7f, 0x22, 0x10, 0x00,", "£":"0x50, 0x7e, 0x51, 0x41, 0x42, 0x00,", @@ -530,11 +529,9 @@ def getSmallFontMap(): "§":"0x4a, 0x55, 0x55, 0x55, 0x29, 0x00,", "¨":"0x00, 0x01, 0x00, 0x01, 0x00, 0x00,", "©":"0x00, 0x18, 0x24, 0x24, 0x00, 0x00,", - "ª":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "«":"0x08, 0x14, 0x00, 0x08, 0x14, 0x00,", "¬":"0x08, 0x08, 0x08, 0x08, 0x38, 0x00,", "­":"0x08, 0x08, 0x08, 0x08, 0x08, 0x00,", - "®":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "¯":"0x00, 0x01, 0x01, 0x01, 0x00, 0x00,", "°":"0x00, 0x00, 0x07, 0x05, 0x07, 0x00,", "±":"0x44, 0x44, 0x5f, 0x44, 0x44, 0x00,", @@ -550,7 +547,6 @@ def getSmallFontMap(): "»":"0x14, 0x08, 0x00, 0x14, 0x08, 0x00,", "¼":"0x21, 0x17, 0x38, 0x24, 0x72, 0x00,", "½":"0x21, 0x17, 0x78, 0x54, 0x5e, 0x00,", - "¾":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "¿":"0x30, 0x48, 0x45, 0x40, 0x20, 0x00,", "À":"0x78, 0x15, 0x16, 0x14, 0x78, 0x00,", "Á":"0x78, 0x14, 0x16, 0x15, 0x78, 0x00,", @@ -600,7 +596,6 @@ def getSmallFontMap(): "í":"0x00, 0x44, 0x7e, 0x41, 0x00, 0x00,", "î":"0x00, 0x46, 0x7d, 0x42, 0x00, 0x00,", "ï":"0x00, 0x45, 0x7c, 0x41, 0x00, 0x00,", - "ð":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "ñ":"0x78, 0x12, 0x09, 0x0a, 0x71, 0x00,", "ò":"0x38, 0x45, 0x46, 0x44, 0x38, 0x00,", "ó":"0x38, 0x44, 0x46, 0x45, 0x38, 0x00,", @@ -727,7 +722,6 @@ def getSmallFontMap(): "Č":"0x38, 0x45, 0x46, 0x45, 0x28, 0x00,", "č":"0x38, 0x45, 0x46, 0x45, 0x20, 0x00,", "Ď":"0x7c, 0x45, 0x46, 0x29, 0x10, 0x00,", - "ď":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "Đ":"0x08, 0x7f, 0x49, 0x22, 0x1c, 0x00,", "đ":"0x38, 0x44, 0x44, 0x4A, 0x7F, 0x00,", "Ē":"0x7c, 0x55, 0x55, 0x55, 0x44, 0x00,", @@ -747,7 +741,6 @@ def getSmallFontMap(): "Ġ":"0x38, 0x44, 0x55, 0x54, 0x30, 0x00,", "ġ":"0x08, 0x54, 0x55, 0x54, 0x3c, 0x00,", "Ģ":"0x0e, 0x51, 0x35, 0x15, 0x1c, 0x00,", - "ģ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "Ĥ":"0x7c, 0x12, 0x11, 0x12, 0x7c, 0x00,", "ĥ":"0x02, 0x79, 0x22, 0x10, 0x60, 0x00,", "Ħ":"0x02, 0x7f, 0x0a, 0x7f, 0x02, 0x00,", @@ -762,7 +755,6 @@ def getSmallFontMap(): "į":"0x00, 0x44, 0x7d, 0xc0, 0x00, 0x00,", "İ":"0x44, 0x44, 0x7d, 0x44, 0x44, 0x00,", "ı":"0x00, 0x44, 0x7c, 0x40, 0x00, 0x00,", - "IJ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "ij":"0x44, 0x7d, 0x40, 0x44, 0x3d, 0x00,", "Ĵ":"0x20, 0x40, 0x46, 0x3d, 0x06, 0x00,", "ĵ":"0x00, 0x20, 0x46, 0x3d, 0x02, 0x00,", @@ -773,7 +765,6 @@ def getSmallFontMap(): "ĺ":"0x00, 0x44, 0x7e, 0x41, 0x00, 0x00,", "Ļ":"0x1f, 0x50, 0x30, 0x10, 0x10, 0x00,", "ļ":"0x00, 0x51, 0x3f, 0x10, 0x00, 0x00,", - "Ľ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "ľ":"0x00, 0x41, 0x7f, 0x40, 0x03, 0x00,", "Ŀ":"0x7f, 0x40, 0x40, 0x48, 0x40, 0x00,", "ŀ":"0x00, 0x41, 0x7f, 0x40, 0x08, 0x00,", @@ -785,15 +776,10 @@ def getSmallFontMap(): "ņ":"0x1f, 0x42, 0x21, 0x01, 0x1e, 0x00,", "Ň":"0x7c, 0x09, 0x12, 0x21, 0x7c, 0x00,", "ň":"0x7c, 0x09, 0x06, 0x05, 0x78, 0x00,", - "ʼn":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "Ŋ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "ŋ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "Ō":"0x38, 0x45, 0x45, 0x45, 0x38, 0x00,", "ō":"0x38, 0x45, 0x45, 0x45, 0x38, 0x00,", "Ŏ":"0x38, 0x45, 0x46, 0x45, 0x38, 0x00,", "ŏ":"0x38, 0x45, 0x46, 0x45, 0x38, 0x00,", - "Ő":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "ő":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "Œ":"0x3e, 0x41, 0x7f, 0x49, 0x49, 0x00,", "œ":"0x38, 0x44, 0x7c, 0x54, 0x58, 0x00,", "Ŕ":"0x7c, 0x14, 0x16, 0x15, 0x68, 0x00,", @@ -816,18 +802,12 @@ def getSmallFontMap(): "ť":"0x04, 0x3e, 0x44, 0x40, 0x23, 0x00,", "Ŧ":"0x01, 0x09, 0x7f, 0x09, 0x01, 0x00,", "ŧ":"0x14, 0x3e, 0x54, 0x40, 0x20, 0x00,", - "Ũ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "ũ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "Ū":"0x3c, 0x41, 0x41, 0x41, 0x3c, 0x00,", "ū":"0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", "Ŭ":"0x3c, 0x41, 0x42, 0x41, 0x3c, 0x00,", "ŭ":"0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", "Ů":"0x3c, 0x40, 0x41, 0x40, 0x3c, 0x00,", "ů":"0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", - "Ű":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "ű":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "Ų":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "ų":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", "Ŵ":"0x3c, 0x42, 0x39, 0x42, 0x3c, 0x00,", "ŵ":"0x3c, 0x42, 0x31, 0x42, 0x3c, 0x00,", "Ŷ":"0x04, 0x0a, 0x71, 0x0a, 0x04, 0x00,", From a916b57cc804e5a33eb90dd2041e8073c3b441f7 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Wed, 30 Dec 2020 10:14:22 +1100 Subject: [PATCH 26/29] Create some missing symbols --- Translation Editor/fontTables.py | 1642 +++++++++++++++--------------- 1 file changed, 824 insertions(+), 818 deletions(-) diff --git a/Translation Editor/fontTables.py b/Translation Editor/fontTables.py index f5b5af89..cd6b83f4 100755 --- a/Translation Editor/fontTables.py +++ b/Translation Editor/fontTables.py @@ -1,824 +1,830 @@ -#coding=utf-8 +# coding=utf-8 def getFontMap(): font = { - " ":"0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", - "!":"0x00,0x00,0x00,0x00,0x7C,0xFF,0xFF,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x00,0x00," , - "\"":"0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", - "#":"0x00,0x00,0x10,0x90,0xF0,0x7E,0x1E,0x90,0xF0,0x7E,0x1E,0x10,0x00,0x02,0x1E,0x1F,0x03,0x02,0x1E,0x1F,0x03,0x02,0x00,0x00," , - "$":"0x00,0x00,0x78,0xFC,0xCC,0xFF,0xFF,0xCC,0xCC,0x88,0x00,0x00,0x00,0x00,0x04,0x0C,0x0C,0x3F,0x3F,0x0C,0x0F,0x07,0x00,0x00," , - "%":"0x00,0x00,0x38,0x38,0x38,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x00,0x30,0x38,0x1C,0x0E,0x07,0x03,0x01,0x38,0x38,0x38,0x00," , - "&":"0x00,0x00,0x00,0xB8,0xFC,0xC6,0xE2,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x31,0x21,0x37,0x1E,0x1C,0x36,0x22,0x00," , - "'":"0x00,0x00,0x00,0x00,0x27,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "(":"0x00,0x00,0x00,0xF0,0xFC,0xFE,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x38,0x20,0x20,0x00,0x00,0x00," , - "(":"0x00,0x00,0x00,0xF0,0xFC,0xFE,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x38,0x20,0x20,0x00,0x00,0x00," , - ")":"0x00,0x00,0x00,0x01,0x01,0x07,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1F,0x0F,0x03,0x00,0x00,0x00," , - ")":"0x00,0x00,0x00,0x01,0x01,0x07,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1F,0x0F,0x03,0x00,0x00,0x00," , - "*":"0x00,0x00,0x98,0xB8,0xE0,0xF8,0xF8,0xE0,0xB8,0x98,0x00,0x00,0x00,0x00,0x0C,0x0E,0x03,0x0F,0x0F,0x03,0x0E,0x0C,0x00,0x00," , - "+":"0x00,0x00,0x80,0x80,0x80,0xF0,0xF0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x0F,0x01,0x01,0x01,0x00,0x00," , - ",":"0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xF8,0x78,0x00,0x00,0x00,0x00,0x00," , - "-":"0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00," , - ".":"0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00," , - "/":"0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x00,0x18,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00," , - "0":"0x00,0xF8,0xFE,0x06,0x03,0x83,0xC3,0x63,0x33,0x1E,0xFE,0xF8,0x00,0x07,0x1F,0x1E,0x33,0x31,0x30,0x30,0x30,0x18,0x1F,0x07," , - "1":"0x00,0x00,0x00,0x0C,0x0C,0x0E,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x3F,0x3F,0x30,0x30,0x30,0x00," , - "2":"0x00,0x1C,0x1E,0x07,0x03,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x30," , - "3":"0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E," , - "З":"0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E," , - "4":"0x00,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x03,0x03," , - "5":"0x00,0x3F,0x7F,0x63,0x63,0x63,0x63,0x63,0x63,0xE3,0xC3,0x83,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F," , - "6":"0x00,0xC0,0xF0,0xF8,0xDC,0xCE,0xC7,0xC3,0xC3,0xC3,0x80,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F," , - "7":"0x00,0x03,0x03,0x03,0x03,0x03,0x03,0xC3,0xF3,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x30,0x3C,0x0F,0x03,0x00,0x00,0x00,0x00," , - "8":"0x00,0x00,0xBC,0xFE,0xE7,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F," , - "9":"0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xFC,0x00,0x00,0x00,0x30,0x30,0x30,0x38,0x1C,0x0E,0x07,0x03,0x00," , - ":":"0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00," , - ":":"0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00," , - ";":"0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00," , - "<":"0x00,0x00,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,0x00," , - "=":"0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00," , - ">":"0x00,0x00,0x03,0x07,0x0E,0x1C,0x38,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x30,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00," , - "?":"0x00,0x1C,0x1E,0x07,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x00,0x00,0x00,0x00,0x00," , - "@":"0x00,0xF8,0xFE,0x07,0xF3,0xFB,0x1B,0xFB,0xFB,0x07,0xFE,0xF8,0x00,0x0F,0x1F,0x18,0x33,0x37,0x36,0x37,0x37,0x36,0x03,0x01," , - "A":"0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00," , - "А":"0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00," , - "B":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00," , - "C":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x0E,0x0C,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00," , - "D":"0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "E":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "E":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "F":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "G":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0xC3,0xC3,0xC3,0xC7,0xC6,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00," , - "H":"0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "I":"0x00,0x00,0x00,0x03,0x03,0xFF,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "J":"0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x0E,0x1E,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "K":"0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00," , - "L":"0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "M":"0x00,0xFF,0xFF,0x1E,0x78,0xE0,0xE0,0x78,0x1E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x01,0x01,0x00,0x00,0x3F,0x3F,0x00," , - "N":"0x00,0xFF,0xFF,0x0E,0x38,0xF0,0xC0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x03,0x07,0x1C,0x3F,0x3F,0x00," , - "O":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "P":"0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00," , - "Р":"0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00," , - "Q":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x36,0x3E,0x1C,0x3F,0x33,0x00," , - "R":"0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x03,0x07,0x0F,0x1D,0x38,0x30,0x00," , - "S":"0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC7,0x8E,0x0C,0x00,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00," , - "T":"0x00,0x00,0x03,0x03,0x03,0xFF,0xFF,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "U":"0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "V":"0x00,0x07,0x3F,0xF8,0xC0,0x00,0x00,0xC0,0xF8,0x3F,0x07,0x00,0x00,0x00,0x00,0x01,0x0F,0x3E,0x3E,0x0F,0x01,0x00,0x00,0x00," , - "W":"0x00,0xFF,0xFF,0x00,0x00,0x80,0x80,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x06,0x03,0x03,0x06,0x1C,0x3F,0x3F,0x00," , - "X":"0x00,0x03,0x0F,0x1C,0x30,0xE0,0xE0,0x30,0x1C,0x0F,0x03,0x00,0x00,0x30,0x3C,0x0E,0x03,0x01,0x01,0x03,0x0E,0x3C,0x30,0x00," , - "Y":"0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "Z":"0x00,0x03,0x03,0x03,0x03,0xC3,0xE3,0x33,0x1F,0x0F,0x03,0x00,0x00,0x30,0x3C,0x3E,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00," , - "Z":"0x00,0x03,0x03,0x03,0x03,0xC3,0xE3,0x33,0x1F,0x0F,0x03,0x00,0x00,0x30,0x3C,0x3E,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00," , - "[":"0x00,0x00,0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00," , - "\\":"0x00,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,", - "\\":"0x00,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,", - "]":"0x00,0x00,0x00,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00," , - "^":"0x00,0x60,0x70,0x38,0x1C,0x0E,0x07,0x0E,0x1C,0x38,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "_":"0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0," , - "`":"0x00,0x00,0x00,0x00,0x00,0x3E,0x7E,0x4E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "a":"0x00,0x00,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "b":"0x00,0xFF,0xFF,0xC0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "c":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00," , - "d":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xC0,0xFF,0xFF,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00," , - "e":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00," , - "f":"0x00,0xC0,0xC0,0xFC,0xFE,0xC7,0xC3,0xC3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "g":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00," , - "h":"0x00,0xFF,0xFF,0xC0,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00," , - "i":"0x00,0x00,0x00,0x00,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "j":"0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xE0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00," , - "k":"0x00,0x00,0xFF,0xFF,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x07,0x0F,0x1C,0x38,0x30,0x00,0x00," , - "l":"0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "m":"0x00,0xE0,0xC0,0xE0,0xE0,0xC0,0xC0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x00," , - "n":"0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "o":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "p":"0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x0C,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00," , - "q":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x0C,0xFF,0xFF,0x00," , - "r":"0x00,0x00,0xE0,0xE0,0xC0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "s":"0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00," , - "t":"0x00,0x60,0x60,0xFE,0xFE,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00," , - "u":"0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "v":"0x00,0x60,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x01,0x07,0x1E,0x38,0x38,0x1E,0x07,0x01,0x00,0x00," , - "w":"0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x07,0x1F,0x38,0x1C,0x0F,0x0F,0x1C,0x38,0x1F,0x07,0x00," , - "x":"0x00,0x60,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x30,0x38,0x1D,0x0F,0x07,0x0F,0x1D,0x38,0x30,0x00,0x00," , - "y":"0x00,0x00,0x60,0xE0,0x80,0x00,0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00," , - "z":"0x00,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00," , - "z":"0x00,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00," , - "{":"0x00,0x00,0x80,0xC0,0xFC,0x7E,0x07,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0x3F,0x70,0x60,0x60,0x60,0x00,0x00," , - "|":"0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "}":"0x00,0x00,0x03,0x03,0x03,0x07,0x7E,0xFC,0xC0,0x80,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x70,0x3F,0x1F,0x01,0x00,0x00,0x00," , - "~":"0x00,0x10,0x18,0x0C,0x04,0x0C,0x18,0x10,0x18,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "¡":"0x00,0x00,0x00,0x00,0x80,0xF3,0xF3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00," , - "¢":"0x00,0x00,0xE0,0xF0,0x38,0xFE,0xFE,0x18,0x38,0x30,0x00,0x00,0x00,0x00,0x03,0x07,0x0E,0x3F,0x3F,0x0C,0x0E,0x06,0x00,0x00," , - "£":"0x00,0x00,0x00,0x80,0xF8,0xFC,0x8C,0x8C,0x1C,0x18,0x00,0x00,0x00,0x00,0x18,0x1C,0x1F,0x0B,0x18,0x18,0x18,0x18,0x08,0x00," , - "¤":"0x00,0xF6,0xFE,0x18,0x0C,0x0C,0x0C,0x0C,0x18,0xFE,0xF6,0x00,0x00,0x1B,0x1F,0x06,0x0C,0x0C,0x0C,0x0C,0x06,0x1F,0x1B,0x00," , - "¥":"0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x3F,0x3F,0x0A,0x0A,0x0A,0x00,0x00," , - "¦":"0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "§":"0x00,0x00,0xDC,0xFE,0x22,0x22,0x22,0x22,0xE6,0xC4,0x00,0x00,0x00,0x00,0x08,0x19,0x11,0x11,0x11,0x11,0x1F,0x0E,0x00,0x00," , - "¨":"0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "©":"0x00,0xF0,0xF8,0x1C,0xCC,0xEC,0x2C,0x6C,0x4C,0x1C,0xF8,0xF0,0x00,0x07,0x0F,0x1C,0x19,0x1B,0x1A,0x1B,0x19,0x1C,0x0F,0x07," , - "«":"0x00,0x80,0xC0,0x60,0x20,0x00,0x80,0xC0,0x60,0x20,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x00,0x00,0x01,0x03,0x02,0x00,0x00," , - "¬":"0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00," , - "®":"0x00,0xF0,0xF8,0x1C,0xEC,0xEC,0xAC,0xEC,0x4C,0x1C,0xF8,0xF0,0x00,0x07,0x0F,0x1C,0x1B,0x1B,0x18,0x1B,0x1B,0x1C,0x0F,0x07," , - "¯":"0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "°":"0x00,0x00,0x00,0x1E,0x3F,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "±":"0x00,0x00,0x00,0xC0,0xC0,0xF0,0xF0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1B,0x1B,0x18,0x18,0x00,0x00,0x00," , - "²":"0x00,0x00,0x19,0x1D,0x15,0x17,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "³":"0x00,0x00,0x11,0x15,0x15,0x1F,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "´":"0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "µ":"0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0x0E,0x0C,0x0C,0x0C,0x06,0x0F,0x0F,0x00,0x00," , - "¶":"0x00,0x38,0x7C,0xC6,0x82,0xFE,0xFE,0x02,0xFE,0xFE,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x3F,0x3F,0x00,0x00," , - "¹":"0x00,0x00,0x12,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "»":"0x00,0x20,0x60,0xC0,0x80,0x00,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x00," , - "¼":"0x00,0x48,0x7C,0x7C,0x40,0x80,0xC0,0x60,0x30,0x10,0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x06,0x07,0x04,0x1F,0x1F,0x00," , - "½":"0x00,0x48,0x7C,0x7C,0x40,0x80,0xC0,0x60,0x30,0x10,0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x00,0x19,0x1D,0x17,0x12,0x00," , - "¾":"0x00,0x44,0x54,0x7C,0x28,0x80,0xC0,0x60,0x30,0x10,0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x06,0x07,0x04,0x1F,0x1F,0x00," , - "¿":"0x00,0x00,0x00,0x80,0xC0,0xFB,0x7B,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x1F,0x3B,0x31,0x30,0x30,0x30,0x38,0x1E,0x0E,0x00," , - "À":"0x00,0x00,0x00,0x80,0xE1,0x7B,0x7E,0xE4,0x80,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00," , - "Á":"0x00,0x00,0x00,0x80,0xE4,0x7E,0x7B,0xE1,0x80,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00," , - "Â":"0x00,0x00,0x00,0x84,0xE6,0x7B,0x7B,0xE6,0x84,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00," , - "Ã":"0x00,0x00,0x00,0x82,0xE3,0x79,0x7B,0xE2,0x83,0x01,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00," , - "Ä":"0x00,0x00,0x00,0x83,0xE3,0x78,0x78,0xE3,0x83,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00," , - "Å":"0x00,0x00,0x00,0x80,0xE2,0x75,0x75,0xE2,0x80,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00," , - "Æ":"0x00,0x00,0x80,0xF0,0x7C,0x1F,0xFF,0xFF,0xC3,0xC3,0x03,0x00,0x00,0x3C,0x3F,0x07,0x06,0x06,0x3F,0x3F,0x30,0x30,0x30,0x00," , - "Ç":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x1E,0x1C,0x00,0x00,0x01,0x07,0xCE,0xDC,0xF8,0xF8,0x18,0x1C,0x0E,0x06,0x00," , - "È":"0x00,0xF8,0xF8,0x99,0x9B,0x9E,0x9C,0x98,0x98,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "É":"0x00,0xF8,0xF8,0x98,0x98,0x9C,0x9E,0x9B,0x99,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "Ê":"0x00,0xF8,0xF8,0x9C,0x9E,0x9B,0x9B,0x9E,0x9C,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "Ë":"0x00,0xF8,0xF8,0x9B,0x9B,0x98,0x98,0x9B,0x9B,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "Ì":"0x00,0x00,0x00,0x19,0x1B,0xFE,0xFC,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Í":"0x00,0x00,0x00,0x18,0x18,0xFC,0xFE,0x1B,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Î":"0x00,0x00,0x00,0x1C,0x1E,0xFB,0xFB,0x1E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ï":"0x00,0x00,0x00,0x1B,0x1B,0xF8,0xF8,0x1B,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ð":"0x00,0xC0,0xFF,0xFF,0xC3,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "Ñ":"0x00,0xF8,0xF8,0x72,0xE3,0xC1,0x83,0x02,0x03,0xF9,0xF8,0x00,0x00,0x3F,0x3F,0x00,0x00,0x01,0x03,0x07,0x0E,0x3F,0x3F,0x00," , - "Ò":"0x00,0xE0,0xF0,0x39,0x1B,0x1E,0x1C,0x18,0x38,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Ó":"0x00,0xE0,0xF0,0x38,0x18,0x1C,0x1E,0x1B,0x39,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Ô":"0x00,0xE0,0xF0,0x3C,0x1E,0x1B,0x1B,0x1E,0x3C,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Õ":"0x00,0xE0,0xF0,0x3A,0x1B,0x19,0x1B,0x1A,0x3B,0xF1,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Ö":"0x00,0xE0,0xF0,0x3B,0x1B,0x18,0x18,0x1B,0x3B,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "×":"0x00,0xF0,0xF8,0x1C,0x0C,0x8C,0xEC,0x7C,0x18,0xFC,0xF4,0x00,0x00,0x2F,0x3F,0x18,0x3E,0x37,0x31,0x30,0x38,0x1F,0x0F,0x00," , - "Ù":"0x00,0xF8,0xF8,0x01,0x03,0x06,0x04,0x00,0x00,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "Ú":"0x00,0xF8,0xF8,0x00,0x00,0x04,0x06,0x03,0x01,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "Û":"0x00,0xF8,0xF8,0x04,0x06,0x03,0x03,0x06,0x04,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "Ü":"0x00,0xF8,0xF8,0x03,0x03,0x00,0x00,0x03,0x03,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "Ý":"0x00,0x08,0x18,0x30,0x60,0xC4,0xC6,0x63,0x31,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "ß":"0x00,0x00,0xC0,0xE0,0x30,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0x21,0x21,0x21,0x33,0x3F,0x1E,0x00,0x00," , - "à":"0x00,0x00,0x40,0x60,0x62,0x66,0x6C,0x68,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "á":"0x00,0x00,0x40,0x60,0x68,0x6C,0x66,0x62,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "â":"0x00,0x00,0x40,0x68,0x6C,0x66,0x66,0x6C,0x68,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "ã":"0x00,0x00,0x40,0x68,0x6C,0x64,0x6C,0x68,0x6C,0xE4,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "ä":"0x00,0x00,0x40,0x6C,0x6C,0x60,0x60,0x6C,0x6C,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "å":"0x00,0x00,0x40,0x60,0x64,0x6A,0x6A,0x64,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "æ":"0x00,0x80,0xC0,0x40,0x40,0xC0,0x80,0x40,0x40,0xC0,0x80,0x00,0x00,0x1C,0x3E,0x22,0x22,0x1F,0x3F,0x22,0x22,0x33,0x11,0x00," , - "ç":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0xB8,0xB0,0xF0,0xF0,0x30,0x38,0x18,0x08,0x00," , - "è":"0x00,0x80,0xC0,0xE0,0x62,0x66,0x6C,0x68,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x33,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00," , - "é":"0x00,0x80,0xC0,0xE0,0x60,0x68,0x6C,0x66,0x62,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00," , - "ê":"0x00,0x80,0xC0,0xE8,0x6C,0x66,0x66,0x6C,0x68,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x33,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00," , - "ë":"0x00,0x80,0xC0,0xEC,0x6C,0x60,0x60,0x6C,0x6C,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x33,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00," , - "ì":"0x00,0x00,0x00,0x00,0x62,0xE6,0xEC,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "í":"0x00,0x00,0x00,0x00,0x68,0xEC,0xE6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "î":"0x00,0x00,0x00,0x08,0x6C,0xE6,0xE6,0x0C,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ï":"0x00,0x00,0x00,0x0C,0x6C,0xE0,0xEC,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ñ":"0x00,0x00,0xE0,0xE8,0x6C,0x64,0x6C,0x68,0xEC,0xC4,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "ò":"0x00,0x80,0xC0,0xE0,0x62,0x66,0x6C,0x68,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "ó":"0x00,0x80,0xC0,0xE0,0x68,0x6C,0x66,0x62,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "ô":"0x00,0x80,0xC0,0xE8,0x6C,0x66,0x66,0x6C,0xE8,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "õ":"0x00,0x80,0xC8,0xEC,0x64,0x6C,0x68,0x6C,0xE4,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "ö":"0x00,0x80,0xC0,0xEC,0x6C,0x60,0x60,0x6C,0xEC,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "÷":"0x00,0x00,0x80,0x80,0x80,0xB0,0xB0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0D,0x0D,0x01,0x01,0x01,0x00,0x00," , - "ø":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xC0,0xE0,0xA0,0x00,0x00,0x2F,0x3F,0x18,0x3C,0x36,0x33,0x31,0x38,0x1F,0x0F,0x00," , - "ù":"0x00,0xE0,0xE0,0x00,0x02,0x06,0x0C,0x08,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "ú":"0x00,0xE0,0xE0,0x00,0x08,0x0C,0x06,0x02,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "û":"0x00,0xE0,0xE0,0x08,0x0C,0x06,0x06,0x0C,0x08,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "ü":"0x00,0xE0,0xE0,0x0C,0x0C,0x00,0x00,0x0C,0x0C,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "ý":"0x00,0x00,0x60,0xE0,0x80,0x10,0x18,0x8C,0xE4,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00," , - "þ":"0x00,0x00,0x03,0xFF,0xFF,0x1B,0x18,0x18,0xF8,0xF0,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x36,0x06,0x06,0x07,0x03,0x00,0x00," , - "ÿ":"0x00,0x00,0x60,0xEC,0x8C,0x00,0x00,0x8C,0xEC,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00," , - "Ѐ":"0x00,0xFC,0xFC,0x8D,0x8F,0x8E,0x8C,0x8C,0x8C,0x0C,0x0C,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "Ё":"0x00,0xFE,0xFE,0xC7,0xC7,0xC6,0xC6,0xC7,0xC7,0x06,0x06,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "Ђ":"0x00,0x03,0xFF,0xFF,0x83,0xC3,0xC3,0xC3,0xC0,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x01,0x00,0x30,0x30,0x39,0x1F,0x0F,0x00," , - "Ѓ":"0x00,0xFC,0xFC,0x0C,0x0C,0x0C,0x0E,0x0F,0x0D,0x0C,0x0C,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "Є":"0x00,0xF8,0xFC,0xCE,0xC7,0xC3,0xC3,0xC3,0x07,0x0E,0x0C,0x00,0x00,0x07,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00," , - "Ѕ":"0x00,0x3C,0x7E,0x67,0xE3,0xC3,0xC3,0xC3,0x87,0x8E,0x0C,0x00,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x31,0x39,0x1F,0x0F,0x00," , - "І":"0x00,0x00,0x00,0x03,0x03,0xFF,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ї":"0x00,0x00,0x00,0x0D,0x0D,0xFC,0xFC,0x0D,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ј":"0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x0E,0x1E,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Љ":"0x00,0x00,0xFE,0xFF,0x03,0x03,0xFF,0xFF,0xC0,0xC0,0x80,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x3F,0x3F,0x30,0x39,0x1F,0x0F," , - "Њ":"0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0x80,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x3F,0x3F,0x30,0x39,0x1F,0x0F," , - "Ћ":"0x00,0x03,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC0,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x01,0x00,0x00,0x00,0x01,0x3F,0x3F,0x00," , - "Ќ":"0x00,0xFF,0xFF,0xC0,0xE2,0xF3,0x39,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00," , - "Ѝ":"0x00,0xFF,0xFF,0x00,0x01,0xC3,0xF2,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "Ў":"0x00,0x07,0x1F,0x7C,0xF1,0xC1,0xC1,0xF1,0x7C,0x1F,0x07,0x00,0x00,0x00,0x30,0x30,0x3C,0x0F,0x07,0x01,0x00,0x00,0x00,0x00," , - "Џ":"0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x1F,0x1F,0x18,0x18,0x78,0x78,0x18,0x18,0x1F,0x1F,0x00," , - #"A":"0x00,0x80,0xE0,0x78,0x1E,0x07,0x07,0x1E,0x78,0xE0,0x80,0x00,0x00,0x3F,0x3F,0x06,0x06,0x06,0x06,0x06,0x06,0x3F,0x3F,0x00," , - "Б":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x83,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00," , - "В":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00," , - "Г":"0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "Г":"0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "Д":"0x00,0x00,0xF8,0xFE,0x0F,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x70,0x7F,0x1F,0x18,0x18,0x18,0x18,0x1F,0x7F,0x70,0x00," , - "Е":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "Ж":"0x00,0x03,0x0F,0xFC,0xE0,0xFF,0xFF,0xE0,0xFC,0x0F,0x03,0x00,0x00,0x38,0x3F,0x07,0x00,0x3F,0x3F,0x00,0x07,0x3F,0x38,0x00," , - "Ж":"0x00,0x03,0x0F,0xFC,0xE0,0xFF,0xFF,0xE0,0xFC,0x0F,0x03,0x00,0x00,0x38,0x3F,0x07,0x00,0x3F,0x3F,0x00,0x07,0x3F,0x38,0x00," , - "И":"0x00,0xFF,0xFF,0x00,0x00,0xC0,0xF0,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "Й":"0x00,0xFF,0xFF,0x00,0x02,0xC3,0xF1,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "К":"0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00," , - "Л":"0x00,0x00,0xF0,0xFC,0x1E,0x07,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "М":"0x00,0xFF,0xFF,0x1E,0x78,0xE0,0xE0,0x78,0x1E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x01,0x01,0x00,0x00,0x3F,0x3F,0x00," , - "Н":"0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "О":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "П":"0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "Р":"0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00," , - "С":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x0E,0x0C,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00," , - "Т":"0x00,0x03,0x03,0x03,0x03,0xFF,0xFF,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "У":"0x00,0x07,0x1F,0x7C,0xF0,0xC0,0xC0,0xF0,0x7C,0x1F,0x07,0x00,0x00,0x00,0x30,0x30,0x3C,0x0F,0x07,0x01,0x00,0x00,0x00,0x00," , - "Ф":"0x00,0xF8,0xFC,0x0E,0x06,0xFF,0xFF,0x06,0x0E,0xFC,0xF8,0x00,0x00,0x03,0x07,0x0E,0x0C,0x3F,0x3F,0x0C,0x0E,0x07,0x03,0x00," , - "Х":"0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x30,0x3C,0x0F,0x03,0x00,0x00,0x03,0x0F,0x3C,0x30,0x00," , - "Ц":"0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x1F,0x1F,0x18,0x18,0x18,0x18,0x18,0x1F,0x7F,0x78,0x00," , - "Ч":"0x00,0x7F,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "Ш":"0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x00," , - "Щ":"0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x1F,0x1F,0x18,0x18,0x1F,0x1F,0x18,0x18,0x1F,0x7F,0x70," , - "Ъ":"0x03,0x03,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00," , - "Ы":"0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x00,0x3F,0x3F,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,0x3F,0x3F," , - "Ь":"0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00," , - "Э":"0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC7,0xCE,0xFC,0xF8,0x00,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0F,0x07,0x00," , - "Ю":"0x00,0xFF,0xFF,0xC0,0xFC,0xFE,0x07,0x03,0x07,0xFE,0xFC,0x00,0x00,0x3F,0x3F,0x00,0x0F,0x1F,0x38,0x30,0x38,0x1F,0x0F,0x00," , - "Я":"0x00,0x7C,0xFE,0xC7,0x83,0x83,0x83,0x83,0x83,0xFF,0xFF,0x00,0x00,0x30,0x38,0x1D,0x0F,0x07,0x03,0x01,0x01,0x3F,0x3F,0x00," , - "а":"0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1E,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "б":"0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00," , - "в":"0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x00,0x3F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00," , - "г":"0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "д":"0x00,0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x60,0x7F,0x3F,0x30,0x30,0x30,0x30,0x3F,0x7F,0x60,0x00," , - "е":"0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00," , - "ж":"0x00,0x30,0xF0,0xC0,0x00,0xF0,0xF0,0x00,0xC0,0xF0,0x30,0x00,0x00,0x30,0x3C,0x0F,0x03,0x3F,0x3F,0x03,0x0F,0x3C,0x30,0x00," , - "з":"0x00,0x60,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x18,0x38,0x30,0x33,0x33,0x33,0x33,0x33,0x3F,0x1D,0x00," , - "З":"0x00,0x60,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x18,0x38,0x30,0x33,0x33,0x33,0x33,0x33,0x3F,0x1D,0x00," , - "и":"0x00,0xF0,0xF0,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00," , - "й":"0x00,0xF0,0xF0,0x00,0x04,0x08,0x88,0xC4,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00," , - "к":"0x00,0xF0,0xF0,0x80,0x80,0xC0,0xE0,0x70,0x30,0x10,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x07,0x0E,0x1C,0x38,0x30,0x20,0x00," , - "л":"0x00,0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "м":"0x00,0xF0,0xF0,0xE0,0xC0,0x80,0x80,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x03,0x01,0x00,0x3F,0x3F,0x00," , - "н":"0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x00," , - "о":"0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x70,0xE0,0xC0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "п":"0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "р":"0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x70,0xE0,0xC0,0x00,0x00,0xFF,0xFF,0x0C,0x0C,0x0C,0x0C,0x0C,0x0E,0x07,0x03,0x00," , - "с":"0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x70,0x60,0x40,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x18,0x08,0x00," , - "т":"0x00,0x30,0x30,0x30,0x30,0xF0,0xF0,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "у":"0x00,0x30,0xF0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xF0,0x30,0x00,0x00,0x60,0xE0,0xC3,0xE7,0x7C,0x3C,0x0F,0x03,0x00,0x00,0x00," , - "ф":"0x00,0x80,0xC0,0x60,0x60,0xF0,0xF0,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x30,0x30,0xFF,0xFF,0x30,0x30,0x1F,0x0F,0x00," , - "х":"0x00,0x30,0x70,0xC0,0x80,0x00,0x00,0x80,0xC0,0x70,0x30,0x00,0x00,0x30,0x38,0x0C,0x07,0x03,0x03,0x07,0x0C,0x38,0x30,0x00," , - "ц":"0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x3F,0xFF,0xF0,0x00," , - "ч":"0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x00," , - "ш":"0x00,0xF0,0xF0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x00," , - "щ":"0x00,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x30,0x30,0x3F,0xFF,0xE0," , - "ъ":"0x30,0x30,0xF0,0xF0,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00," , - "ы":"0x00,0xF0,0xF0,0x80,0x80,0x80,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x31,0x31,0x3B,0x1F,0x0E,0x00,0x3F,0x3F,0x00," , - "ь":"0x00,0xF0,0xF0,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00," , - "э":"0x00,0x40,0x60,0x70,0x30,0x30,0x30,0x30,0x70,0xE0,0xC0,0x00,0x00,0x08,0x18,0x38,0x30,0x33,0x33,0x33,0x3B,0x1F,0x0F,0x00," , - "ю":"0x00,0xF0,0xF0,0x00,0xE0,0xF0,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x3F,0x3F,0x03,0x1F,0x3F,0x30,0x30,0x30,0x3F,0x1F,0x00," , - "я":"0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x21,0x33,0x3B,0x1E,0x0E,0x06,0x06,0x06,0x3F,0x3F,0x00," , - "ѐ":"0x00,0xE0,0xF0,0x32,0x36,0x36,0x34,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00," , - "ё":"0x00,0xE0,0xF0,0x34,0x34,0x30,0x30,0x34,0x34,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00," , - "ђ":"0x00,0x30,0xFC,0xFC,0x30,0xB0,0xB0,0xB0,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x07,0x03,0x01,0x01,0xC1,0xFF,0x3F,0x00," , - "ѓ":"0x00,0xF0,0xF0,0x30,0x30,0x34,0x36,0x32,0x30,0x30,0x30,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "є":"0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x70,0x60,0x40,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x30,0x38,0x18,0x08,0x00," , - "ѕ":"0x00,0xE0,0xF0,0xB0,0xB0,0x30,0x30,0x30,0x30,0x70,0x60,0x00,0x00,0x18,0x39,0x31,0x33,0x33,0x33,0x37,0x36,0x3E,0x1C,0x00," , - "і":"0x00,0x00,0x00,0x00,0x30,0xF6,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ї":"0x00,0x00,0x00,0x04,0x34,0xF0,0xF4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ј":"0x00,0x00,0x00,0x00,0x00,0x30,0x30,0xF6,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xE0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00," , - "љ":"0x00,0x00,0xE0,0xF0,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x3F,0x3F,0x33,0x33,0x1E,0x0C," , - "њ":"0x00,0xF0,0xF0,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x03,0x3F,0x3F,0x33,0x33,0x1E,0x0C," , - "ћ":"0x00,0x30,0xFC,0xFC,0xB0,0xB0,0xB0,0xB0,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x3F,0x3F,0x00," , - "ќ":"0x00,0xF0,0xF0,0x80,0x88,0xCC,0xE4,0x70,0x30,0x10,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x07,0x0E,0x1C,0x38,0x30,0x20,0x00," , - "ѝ":"0x00,0xF0,0xF0,0x00,0x06,0x0C,0x88,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00," , - "ў":"0x00,0x30,0xF0,0xC0,0x04,0x08,0x08,0x04,0xC0,0xF0,0x30,0x00,0x00,0x60,0xE0,0xC3,0xE7,0x7C,0x3C,0x0F,0x03,0x00,0x00,0x00," , - "џ":"0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0xF0,0xF0,0x30,0x30,0x3F,0x3F,0x00," , - "Ā":"0x00,0x00,0x00,0xE0,0xF9,0x1D,0x1D,0xF9,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00," , - "ā":"0x00,0x00,0x40,0x60,0x68,0x68,0x68,0x68,0x68,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "Ă":"0x00,0x00,0x00,0xE0,0xF9,0x1A,0x1A,0xF9,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00," , - "ă":"0x00,0x00,0x40,0x60,0x64,0x68,0x68,0x68,0x64,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "Ą":"0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x67,0xBF,0xB8,0x00," , - "ą":"0x00,0x00,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x73,0xBF,0xBF,0x00," , - "Ć":"0x00,0x80,0xE0,0x70,0x38,0x18,0x1A,0x1B,0x39,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00," , - "ć":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x6C,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00," , - "Ĉ":"0x00,0x80,0xE0,0x70,0x3A,0x1B,0x19,0x1B,0x3A,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00," , - "ĉ":"0x00,0x80,0xC0,0xE0,0x68,0x6C,0x64,0x6C,0x68,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00," , - "Ċ":"0x00,0x80,0xE0,0x70,0x38,0x18,0x1A,0x18,0x38,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00," , - "ċ":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00," , - "Č":"0x00,0x80,0xE0,0x70,0x39,0x1B,0x1A,0x1B,0x39,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00," , - "č":"0x00,0x80,0xC0,0xE0,0x64,0x6C,0x68,0x6C,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00," , - "Ď":"0x00,0xF8,0xF8,0x19,0x1B,0x1A,0x1B,0x39,0x70,0xE0,0x80,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "ď":"0x00,0x80,0xC0,0xE0,0x60,0x60,0xE0,0xFF,0xFF,0x00,0x05,0x03,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00," , - "Đ":"0xC0,0xFF,0xFF,0xC3,0xC3,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "đ":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE4,0xC4,0xFF,0xFF,0x04,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00," , - "Ē":"0x00,0xFC,0xFC,0x8C,0x8D,0x8D,0x8D,0x8D,0x8C,0x0C,0x0C,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "ē":"0x00,0x80,0xC0,0xE0,0x68,0x68,0x68,0x68,0x68,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00," , - "Ĕ":"0x00,0xF8,0xF8,0x98,0x99,0x9A,0x9A,0x99,0x98,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "ĕ":"0x00,0x80,0xC0,0xE0,0x64,0x68,0x68,0x68,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00," , - "Ė":"0x00,0xF8,0xF8,0x98,0x98,0x98,0x9A,0x98,0x98,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "ė":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00," , - "Ę":"0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x70,0xB0,0xB0,0x00," , - "ę":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x73,0xB3,0xB3,0x13,0x01,0x00," , - "Ě":"0x00,0xF8,0xF8,0x98,0x99,0x9B,0x9A,0x9B,0x99,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00," , - "ě":"0x00,0x80,0xC0,0xE0,0x64,0x6C,0x68,0x6C,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00," , - "Ĝ":"0x00,0x80,0xE0,0x70,0x1A,0x1B,0x19,0x1B,0x1A,0x38,0x30,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "ĝ":"0x00,0x80,0xC0,0xE0,0x68,0x6C,0x64,0x6C,0x68,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00," , - "Ğ":"0x00,0x80,0xE0,0x70,0x1A,0x19,0x19,0x19,0x1A,0x38,0x30,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "ğ":"0x00,0x80,0xC0,0xE0,0x68,0x64,0x64,0x64,0x68,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00," , - "Ġ":"0x00,0x80,0xE0,0x70,0x18,0x18,0x1A,0x18,0x18,0x38,0x30,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x33,0x33,0x33,0x3F,0x3F,0x00," , - "ġ":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x60,0x60,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00," , - "Ģ":"0x00,0xF0,0xFC,0x0E,0x07,0x03,0xC3,0xC3,0xC3,0xC7,0xC6,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0xB0,0x70,0x30,0x3F,0x3F,0x00," , - "ģ":"0x00,0x80,0xC0,0xE0,0x60,0x60,0x6C,0x6A,0x60,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00," , - "Ĥ":"0x00,0xFC,0xFC,0x80,0x82,0x81,0x81,0x82,0x80,0xFC,0xFC,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x3F,0x3F,0x00," , - "ĥ":"0x00,0xFE,0xFE,0xC0,0x62,0x63,0x61,0xE3,0xC2,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00," , - "Ħ":"0x02,0xFF,0xFF,0xC2,0xC2,0xC2,0xC2,0xC2,0xC2,0xFF,0xFF,0x02,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "ħ":"0x04,0xFF,0xFF,0xC4,0x64,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00," , - "Ĩ":"0x00,0x00,0x00,0x1A,0x19,0xFB,0xFB,0x1A,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ĩ":"0x00,0x00,0x00,0x08,0x64,0xEC,0xE8,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ī":"0x00,0x00,0x00,0x0C,0x0D,0xFD,0xFD,0x0D,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ī":"0x00,0x00,0x00,0x08,0x68,0xE8,0xE8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ĭ":"0x00,0x00,0x00,0x18,0x19,0xFA,0xFA,0x19,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ĭ":"0x00,0x00,0x00,0x00,0x64,0xE8,0xE8,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Į":"0x00,0x00,0x00,0x03,0x03,0xFF,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x7F,0xBF,0xB0,0x30,0x00,0x00,0x00," , - "į":"0x00,0x00,0x00,0x00,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x7F,0xBF,0xB0,0x30,0x00,0x00,0x00," , - "İ":"0x00,0x00,0x00,0x18,0x18,0xF8,0xFA,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "ı":"0x00,0x00,0x00,0x00,0x60,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "IJ":"0x00,0x03,0xFF,0xFF,0x03,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x30,0x3F,0x3F,0x30,0x0C,0x1C,0x30,0x30,0x3F,0x1F,0x00," , - "ij":"0x00,0x00,0x20,0xEC,0xEC,0x00,0x00,0x20,0xEC,0xEC,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x70,0xC0,0xC0,0xFF,0x7F,0x00,0x00," , - "Ĵ":"0x00,0x00,0x00,0x00,0x02,0x03,0x01,0x03,0x02,0xF8,0xF8,0x00,0x00,0x0E,0x1E,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "ĵ":"0x00,0x00,0x00,0x00,0x00,0x08,0x6C,0xE4,0xEC,0x08,0x00,0x00,0x00,0x00,0x00,0x60,0xE0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00," , - "Ķ":"0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0xA3,0x67,0x0E,0x1C,0x38,0x30,0x00," , - "ķ":"0x00,0x00,0xFF,0xFF,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0xA7,0x6F,0x1C,0x38,0x30,0x00,0x00," , - "ĸ":"0x00,0x00,0xE0,0xE0,0x00,0x80,0xC0,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x07,0x0F,0x1C,0x38,0x30,0x00,0x00," , - "Ĺ":"0x00,0xF8,0xFA,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "ĺ":"0x00,0x00,0x00,0x00,0x18,0xFA,0xFB,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ļ":"0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0xB0,0x70,0x30,0x30,0x30,0x30,0x00," , - "ļ":"0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0xBF,0x7F,0x30,0x30,0x00,0x00,0x00," , - "Ľ":"0x00,0xFF,0xFF,0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "ľ":"0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ŀ":"0x00,0xFF,0xFF,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "ŀ":"0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ł":"0x80,0xFF,0xFF,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00," , - "ł":"0x00,0x00,0x00,0x00,0x83,0xFF,0xFF,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00," , - "Ń":"0x00,0xFF,0xFF,0x0E,0x38,0xF2,0xC3,0x01,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x03,0x07,0x1C,0x3F,0x3F,0x00," , - "ń":"0x00,0x00,0xE0,0xE0,0x60,0x68,0x6C,0x64,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "Ņ":"0x00,0xFF,0xFF,0x0E,0x38,0xF0,0xC0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0xA0,0x63,0x07,0x1C,0x3F,0x3F,0x00," , - "ņ":"0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0xA0,0x60,0x00,0x3F,0x3F,0x00," , - "Ň":"0x00,0xFF,0xFF,0x0E,0x38,0xF1,0xC2,0x01,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x03,0x07,0x1C,0x3F,0x3F,0x00," , - "ň":"0x00,0x00,0xE0,0xE0,0x64,0x6C,0x68,0x6C,0xE4,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "ʼn":"0x00,0x0A,0xE6,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00," , - "Ŋ":"0x00,0x00,0xFF,0xFF,0x06,0x03,0x03,0x03,0x07,0xFE,0xFC,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x20,0x20,0x30,0x1F,0x0F,0x00," , - "ŋ":"0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0xC0,0xC0,0xFF,0x7F,0x00," , - "Ō":"0x00,0xC0,0xF0,0x38,0x1D,0x0D,0x0D,0x1D,0x38,0xF0,0xC0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "ō":"0x00,0x80,0xC0,0xE0,0x68,0x68,0x68,0x68,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Ŏ":"0x00,0x80,0xE0,0x70,0x39,0x1A,0x1A,0x39,0x70,0xE0,0x80,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "ŏ":"0x00,0x80,0xC0,0xE0,0x64,0x68,0x68,0x64,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Ő":"0x00,0x80,0xE0,0x70,0x3A,0x19,0x1A,0x39,0x70,0xE0,0x80,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00," , - "ő":"0x00,0x80,0xC0,0xE0,0x68,0x64,0x68,0x64,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00," , - "Œ":"0xF0,0xFC,0x0E,0x03,0x03,0x07,0xFE,0xFF,0xC3,0xC3,0xC3,0x00,0x03,0x0F,0x1C,0x30,0x30,0x38,0x1F,0x3F,0x30,0x30,0x30,0x00," , - "œ":"0x80,0xC0,0xE0,0x60,0x60,0xE0,0xC0,0x60,0x60,0x60,0x40,0x80,0x0F,0x1F,0x38,0x30,0x30,0x1F,0x1F,0x3B,0x33,0x33,0x1B,0x09," , - "Ŕ":"0x00,0xF8,0xF8,0x98,0x98,0x9A,0x9B,0x99,0xF8,0xF0,0x60,0x00,0x00,0x3F,0x3F,0x01,0x01,0x03,0x07,0x0F,0x1D,0x38,0x30,0x00," , - "ŕ":"0x00,0x00,0xE0,0xE0,0xC0,0x60,0x68,0x6C,0x64,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "Ŗ":"0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0xA3,0x67,0x0F,0x1D,0x38,0x30,0x00," , - "ŗ":"0x00,0x00,0xE0,0xE0,0xC0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00," , - "Ř":"0x00,0xF8,0xF8,0x99,0x9B,0x9A,0x9B,0x99,0xF8,0xF0,0x60,0x00,0x00,0x3F,0x3F,0x01,0x01,0x03,0x07,0x0F,0x1D,0x38,0x30,0x00," , - "ř":"0x00,0x00,0xE0,0xE0,0xC4,0x6C,0x68,0x6C,0x64,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00," , - "Ś":"0x00,0x60,0xF0,0xF8,0x98,0x9A,0x9B,0x99,0x98,0x30,0x20,0x00,0x00,0x0C,0x1C,0x39,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00," , - "ś":"0x00,0xC0,0xE0,0x60,0x68,0x6C,0x64,0x60,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00," , - "Ŝ":"0x00,0x60,0xF0,0xF8,0x9A,0x9B,0x99,0x9B,0x9A,0x30,0x20,0x00,0x00,0x0C,0x1C,0x39,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00," , - "ŝ":"0x00,0xC0,0xE0,0x68,0x6C,0x64,0x6C,0x68,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00," , - "Ş":"0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC7,0x8E,0x0C,0x00,0x00,0x0C,0x1C,0x38,0x30,0xB0,0xF0,0x30,0x39,0x1F,0x0F,0x00," , - "ş":"0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0xB3,0xF3,0x33,0x3F,0x1E,0x00,0x00,0x00," , - "Š":"0x00,0x60,0xF0,0xF8,0x99,0x9B,0x9A,0x9B,0x99,0x30,0x20,0x00,0x00,0x0C,0x1C,0x39,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00," , - "š":"0x00,0xC0,0xE0,0x64,0x6C,0x68,0x6C,0x64,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00," , - "Ţ":"0x00,0x00,0x03,0x03,0x03,0xFF,0xFF,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xBF,0x60,0x00,0x00,0x00,0x00," , - "ţ":"0x00,0x60,0x60,0xFE,0xFE,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0xB0,0xB0,0xF0,0x30,0x00,0x00,0x00," , - "Ť":"0x00,0x00,0x18,0x19,0x1B,0xFA,0xFA,0x1B,0x19,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "ť":"0x00,0x60,0x60,0xFE,0xFE,0x60,0x65,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00," , - "Ŧ":"0x00,0x00,0x03,0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "ŧ":"0x00,0x30,0x30,0xFE,0xFE,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x1F,0x3F,0x33,0x33,0x30,0x30,0x00,0x00,0x00," , - "Ũ":"0x00,0xF8,0xF8,0x02,0x01,0x03,0x03,0x02,0x01,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "ũ":"0x00,0xE0,0xE0,0x08,0x04,0x0C,0x0C,0x08,0x04,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "Ū":"0x00,0xFC,0xFC,0x00,0x01,0x01,0x01,0x01,0x00,0xFC,0xFC,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "ū":"0x00,0xE0,0xE0,0x00,0x08,0x08,0x08,0x08,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "Ŭ":"0x00,0xFC,0xFC,0x00,0x01,0x02,0x02,0x01,0x00,0xFC,0xFC,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "ŭ":"0x00,0xE0,0xE0,0x00,0x04,0x08,0x08,0x04,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "Ů":"0x00,0xF8,0xF8,0x00,0x06,0x09,0x09,0x06,0x00,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "ů":"0x00,0xE0,0xE0,0x00,0x0C,0x12,0x12,0x0C,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "Ű":"0x00,0xF8,0xF8,0x00,0x02,0x01,0x02,0x01,0x00,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00," , - "ű":"0x00,0xE0,0xE0,0x00,0x08,0x04,0x08,0x04,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00," , - "Ų":"0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x07,0x1F,0x38,0x30,0xF0,0xB0,0xB0,0x38,0x1F,0x07,0x00," , - "ų":"0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0xF0,0xB0,0xB0,0x18,0x3F,0x3F,0x00," , - "Ŵ":"0x00,0xFC,0xFC,0x00,0x02,0x81,0x81,0x02,0x00,0xFC,0xFC,0x00,0x00,0x3F,0x3F,0x1C,0x06,0x03,0x03,0x06,0x1C,0x3F,0x3F,0x00," , - "ŵ":"0x00,0xE0,0xE0,0x00,0x04,0xE8,0xE8,0x04,0x00,0xE0,0xE0,0x00,0x00,0x07,0x1F,0x38,0x1C,0x0F,0x0F,0x1C,0x38,0x1F,0x07,0x00," , - "Ŷ":"0x00,0x02,0x0E,0x3C,0xF2,0xC1,0xC1,0xF2,0x3C,0x0E,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "ŷ":"0x00,0x00,0x60,0xE0,0x88,0x04,0x04,0x88,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00," , - "Ÿ":"0x00,0x02,0x0E,0x3C,0xF1,0xC0,0xC0,0xF1,0x3C,0x0E,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00," , - "Ź":"0x00,0x18,0x18,0x18,0x18,0x1A,0x9B,0xD9,0xF8,0x78,0x38,0x00,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x00," , - "ź":"0x00,0x60,0x60,0x60,0x68,0x6C,0xE4,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00," , - "Ż":"0x00,0x18,0x18,0x18,0x18,0x18,0x9A,0xD8,0xF8,0x78,0x38,0x00,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x00," , - "ż":"0x00,0x60,0x60,0x60,0x60,0x68,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00," , - "Ž":"0x00,0x18,0x18,0x18,0x19,0x1B,0x9A,0xDB,0xF9,0x78,0x38,0x00,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x00," , - "ž":"0x00,0x60,0x60,0x64,0x6C,0x68,0xEC,0xE4,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00," , - "ſ":"0x00,0x00,0x00,0x00,0xFC,0xFE,0x06,0x06,0x0E,0x0C,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x00,0x00,0x00,0x00,0x00," , + " ": "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "!": "0x00,0x00,0x00,0x00,0x7C,0xFF,0xFF,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x00,0x00,", + '"': "0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "#": "0x00,0x00,0x10,0x90,0xF0,0x7E,0x1E,0x90,0xF0,0x7E,0x1E,0x10,0x00,0x02,0x1E,0x1F,0x03,0x02,0x1E,0x1F,0x03,0x02,0x00,0x00,", + "$": "0x00,0x00,0x78,0xFC,0xCC,0xFF,0xFF,0xCC,0xCC,0x88,0x00,0x00,0x00,0x00,0x04,0x0C,0x0C,0x3F,0x3F,0x0C,0x0F,0x07,0x00,0x00,", + "%": "0x00,0x00,0x38,0x38,0x38,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x00,0x30,0x38,0x1C,0x0E,0x07,0x03,0x01,0x38,0x38,0x38,0x00,", + "&": "0x00,0x00,0x00,0xB8,0xFC,0xC6,0xE2,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x31,0x21,0x37,0x1E,0x1C,0x36,0x22,0x00,", + "'": "0x00,0x00,0x00,0x00,0x27,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "(": "0x00,0x00,0x00,0xF0,0xFC,0xFE,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x38,0x20,0x20,0x00,0x00,0x00,", + "(": "0x00,0x00,0x00,0xF0,0xFC,0xFE,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x38,0x20,0x20,0x00,0x00,0x00,", + ")": "0x00,0x00,0x00,0x01,0x01,0x07,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1F,0x0F,0x03,0x00,0x00,0x00,", + ")": "0x00,0x00,0x00,0x01,0x01,0x07,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1F,0x0F,0x03,0x00,0x00,0x00,", + "*": "0x00,0x00,0x98,0xB8,0xE0,0xF8,0xF8,0xE0,0xB8,0x98,0x00,0x00,0x00,0x00,0x0C,0x0E,0x03,0x0F,0x0F,0x03,0x0E,0x0C,0x00,0x00,", + "+": "0x00,0x00,0x80,0x80,0x80,0xF0,0xF0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x0F,0x01,0x01,0x01,0x00,0x00,", + ",": "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB8,0xF8,0x78,0x00,0x00,0x00,0x00,0x00,", + "-": "0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,", + ".": "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,", + "/": "0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x00,0x18,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,", + "0": "0x00,0xF8,0xFE,0x06,0x03,0x83,0xC3,0x63,0x33,0x1E,0xFE,0xF8,0x00,0x07,0x1F,0x1E,0x33,0x31,0x30,0x30,0x30,0x18,0x1F,0x07,", + "1": "0x00,0x00,0x00,0x0C,0x0C,0x0E,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x3F,0x3F,0x30,0x30,0x30,0x00,", + "2": "0x00,0x1C,0x1E,0x07,0x03,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x30,", + "3": "0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E,", + "З": "0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E,", + "4": "0x00,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x03,0x03,", + "5": "0x00,0x3F,0x7F,0x63,0x63,0x63,0x63,0x63,0x63,0xE3,0xC3,0x83,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,", + "6": "0x00,0xC0,0xF0,0xF8,0xDC,0xCE,0xC7,0xC3,0xC3,0xC3,0x80,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,", + "7": "0x00,0x03,0x03,0x03,0x03,0x03,0x03,0xC3,0xF3,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x30,0x3C,0x0F,0x03,0x00,0x00,0x00,0x00,", + "8": "0x00,0x00,0xBC,0xFE,0xE7,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,", + "9": "0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xFC,0x00,0x00,0x00,0x30,0x30,0x30,0x38,0x1C,0x0E,0x07,0x03,0x00,", + ":": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,", + ":": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,", + ";": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00,", + "<": "0x00,0x00,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,0x00,", + "=": "0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,", + ">": "0x00,0x00,0x03,0x07,0x0E,0x1C,0x38,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x30,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,", + "?": "0x00,0x1C,0x1E,0x07,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x00,0x00,0x00,0x00,0x00,", + "@": "0x00,0xF8,0xFE,0x07,0xF3,0xFB,0x1B,0xFB,0xFB,0x07,0xFE,0xF8,0x00,0x0F,0x1F,0x18,0x33,0x37,0x36,0x37,0x37,0x36,0x03,0x01,", + "A": "0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,", + "А": "0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,", + "B": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", + "C": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x0E,0x0C,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", + "D": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "E": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "E": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "F": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "G": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0xC3,0xC3,0xC3,0xC7,0xC6,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,", + "H": "0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "I": "0x00,0x00,0x00,0x03,0x03,0xFF,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "J": "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x0E,0x1E,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "K": "0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,", + "L": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "M": "0x00,0xFF,0xFF,0x1E,0x78,0xE0,0xE0,0x78,0x1E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x01,0x01,0x00,0x00,0x3F,0x3F,0x00,", + "N": "0x00,0xFF,0xFF,0x0E,0x38,0xF0,0xC0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x03,0x07,0x1C,0x3F,0x3F,0x00,", + "O": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "P": "0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,", + "Р": "0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,", + "Q": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x36,0x3E,0x1C,0x3F,0x33,0x00,", + "R": "0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x03,0x07,0x0F,0x1D,0x38,0x30,0x00,", + "S": "0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC7,0x8E,0x0C,0x00,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", + "T": "0x00,0x00,0x03,0x03,0x03,0xFF,0xFF,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "U": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "V": "0x00,0x07,0x3F,0xF8,0xC0,0x00,0x00,0xC0,0xF8,0x3F,0x07,0x00,0x00,0x00,0x00,0x01,0x0F,0x3E,0x3E,0x0F,0x01,0x00,0x00,0x00,", + "W": "0x00,0xFF,0xFF,0x00,0x00,0x80,0x80,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x06,0x03,0x03,0x06,0x1C,0x3F,0x3F,0x00,", + "X": "0x00,0x03,0x0F,0x1C,0x30,0xE0,0xE0,0x30,0x1C,0x0F,0x03,0x00,0x00,0x30,0x3C,0x0E,0x03,0x01,0x01,0x03,0x0E,0x3C,0x30,0x00,", + "Y": "0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "Z": "0x00,0x03,0x03,0x03,0x03,0xC3,0xE3,0x33,0x1F,0x0F,0x03,0x00,0x00,0x30,0x3C,0x3E,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00,", + "Z": "0x00,0x03,0x03,0x03,0x03,0xC3,0xE3,0x33,0x1F,0x0F,0x03,0x00,0x00,0x30,0x3C,0x3E,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00,", + "[": "0x00,0x00,0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00,", + "\\": "0x00,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,", + "\\": "0x00,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,", + "]": "0x00,0x00,0x00,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,", + "^": "0x00,0x60,0x70,0x38,0x1C,0x0E,0x07,0x0E,0x1C,0x38,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "_": "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,", + "`": "0x00,0x00,0x00,0x00,0x00,0x3E,0x7E,0x4E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "a": "0x00,0x00,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "b": "0x00,0xFF,0xFF,0xC0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "c": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00,", + "d": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xC0,0xFF,0xFF,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,", + "e": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00,", + "f": "0x00,0xC0,0xC0,0xFC,0xFE,0xC7,0xC3,0xC3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "g": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00,", + "h": "0x00,0xFF,0xFF,0xC0,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,", + "i": "0x00,0x00,0x00,0x00,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "j": "0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xE0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00,", + "k": "0x00,0x00,0xFF,0xFF,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x07,0x0F,0x1C,0x38,0x30,0x00,0x00,", + "l": "0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "m": "0x00,0xE0,0xC0,0xE0,0xE0,0xC0,0xC0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x00,", + "n": "0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "o": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "p": "0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x0C,0x18,0x18,0x18,0x18,0x1C,0x0F,0x07,0x00,", + "q": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x00,0x00,0x07,0x0F,0x1C,0x18,0x18,0x18,0x18,0x0C,0xFF,0xFF,0x00,", + "r": "0x00,0x00,0xE0,0xE0,0xC0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "s": "0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00,", + "t": "0x00,0x60,0x60,0xFE,0xFE,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00,", + "u": "0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "v": "0x00,0x60,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x01,0x07,0x1E,0x38,0x38,0x1E,0x07,0x01,0x00,0x00,", + "w": "0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x07,0x1F,0x38,0x1C,0x0F,0x0F,0x1C,0x38,0x1F,0x07,0x00,", + "x": "0x00,0x60,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x30,0x38,0x1D,0x0F,0x07,0x0F,0x1D,0x38,0x30,0x00,0x00,", + "y": "0x00,0x00,0x60,0xE0,0x80,0x00,0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00,", + "z": "0x00,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,", + "z": "0x00,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,", + "{": "0x00,0x00,0x80,0xC0,0xFC,0x7E,0x07,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0x3F,0x70,0x60,0x60,0x60,0x00,0x00,", + "|": "0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "}": "0x00,0x00,0x03,0x03,0x03,0x07,0x7E,0xFC,0xC0,0x80,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x70,0x3F,0x1F,0x01,0x00,0x00,0x00,", + "~": "0x00,0x10,0x18,0x0C,0x04,0x0C,0x18,0x10,0x18,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "¡": "0x00,0x00,0x00,0x00,0x80,0xF3,0xF3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,", + "¢": "0x00,0x00,0xE0,0xF0,0x38,0xFE,0xFE,0x18,0x38,0x30,0x00,0x00,0x00,0x00,0x03,0x07,0x0E,0x3F,0x3F,0x0C,0x0E,0x06,0x00,0x00,", + "£": "0x00,0x00,0x00,0x80,0xF8,0xFC,0x8C,0x8C,0x1C,0x18,0x00,0x00,0x00,0x00,0x18,0x1C,0x1F,0x0B,0x18,0x18,0x18,0x18,0x08,0x00,", + "¤": "0x00,0xF6,0xFE,0x18,0x0C,0x0C,0x0C,0x0C,0x18,0xFE,0xF6,0x00,0x00,0x1B,0x1F,0x06,0x0C,0x0C,0x0C,0x0C,0x06,0x1F,0x1B,0x00,", + "¥": "0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x00,0x0A,0x0A,0x0A,0x3F,0x3F,0x0A,0x0A,0x0A,0x00,0x00,", + "¦": "0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "§": "0x00,0x00,0xDC,0xFE,0x22,0x22,0x22,0x22,0xE6,0xC4,0x00,0x00,0x00,0x00,0x08,0x19,0x11,0x11,0x11,0x11,0x1F,0x0E,0x00,0x00,", + "¨": "0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "©": "0x00,0xF0,0xF8,0x1C,0xCC,0xEC,0x2C,0x6C,0x4C,0x1C,0xF8,0xF0,0x00,0x07,0x0F,0x1C,0x19,0x1B,0x1A,0x1B,0x19,0x1C,0x0F,0x07,", + "«": "0x00,0x80,0xC0,0x60,0x20,0x00,0x80,0xC0,0x60,0x20,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x00,0x00,0x01,0x03,0x02,0x00,0x00,", + "¬": "0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,", + "®": "0x00,0xF0,0xF8,0x1C,0xEC,0xEC,0xAC,0xEC,0x4C,0x1C,0xF8,0xF0,0x00,0x07,0x0F,0x1C,0x1B,0x1B,0x18,0x1B,0x1B,0x1C,0x0F,0x07,", + "¯": "0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "°": "0x00,0x00,0x00,0x1E,0x3F,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "±": "0x00,0x00,0x00,0xC0,0xC0,0xF0,0xF0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x1B,0x1B,0x18,0x18,0x00,0x00,0x00,", + "²": "0x00,0x00,0x19,0x1D,0x15,0x17,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "³": "0x00,0x00,0x11,0x15,0x15,0x1F,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "´": "0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "µ": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0x0E,0x0C,0x0C,0x0C,0x06,0x0F,0x0F,0x00,0x00,", + "¶": "0x00,0x38,0x7C,0xC6,0x82,0xFE,0xFE,0x02,0xFE,0xFE,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x3F,0x3F,0x00,0x00,", + "¹": "0x00,0x00,0x12,0x1F,0x1F,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "»": "0x00,0x20,0x60,0xC0,0x80,0x00,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x00,", + "¼": "0x00,0x48,0x7C,0x7C,0x40,0x80,0xC0,0x60,0x30,0x10,0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x06,0x07,0x04,0x1F,0x1F,0x00,", + "½": "0x00,0x48,0x7C,0x7C,0x40,0x80,0xC0,0x60,0x30,0x10,0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x00,0x19,0x1D,0x17,0x12,0x00,", + "¾": "0x00,0x44,0x54,0x7C,0x28,0x80,0xC0,0x60,0x30,0x10,0x00,0x00,0x00,0x00,0x04,0x06,0x03,0x01,0x06,0x07,0x04,0x1F,0x1F,0x00,", + "¿": "0x00,0x00,0x00,0x80,0xC0,0xFB,0x7B,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x1F,0x3B,0x31,0x30,0x30,0x30,0x38,0x1E,0x0E,0x00,", + "À": "0x00,0x00,0x00,0x80,0xE1,0x7B,0x7E,0xE4,0x80,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00,", + "Á": "0x00,0x00,0x00,0x80,0xE4,0x7E,0x7B,0xE1,0x80,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00,", + "Â": "0x00,0x00,0x00,0x84,0xE6,0x7B,0x7B,0xE6,0x84,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00,", + "Ã": "0x00,0x00,0x00,0x82,0xE3,0x79,0x7B,0xE2,0x83,0x01,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00,", + "Ä": "0x00,0x00,0x00,0x83,0xE3,0x78,0x78,0xE3,0x83,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00,", + "Å": "0x00,0x00,0x00,0x80,0xE2,0x75,0x75,0xE2,0x80,0x00,0x00,0x00,0x00,0x38,0x3E,0x0F,0x0D,0x0C,0x0C,0x0D,0x0F,0x3E,0x38,0x00,", + "Æ": "0x00,0x00,0x80,0xF0,0x7C,0x1F,0xFF,0xFF,0xC3,0xC3,0x03,0x00,0x00,0x3C,0x3F,0x07,0x06,0x06,0x3F,0x3F,0x30,0x30,0x30,0x00,", + "Ç": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x1E,0x1C,0x00,0x00,0x01,0x07,0xCE,0xDC,0xF8,0xF8,0x18,0x1C,0x0E,0x06,0x00,", + "È": "0x00,0xF8,0xF8,0x99,0x9B,0x9E,0x9C,0x98,0x98,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "É": "0x00,0xF8,0xF8,0x98,0x98,0x9C,0x9E,0x9B,0x99,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "Ê": "0x00,0xF8,0xF8,0x9C,0x9E,0x9B,0x9B,0x9E,0x9C,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "Ë": "0x00,0xF8,0xF8,0x9B,0x9B,0x98,0x98,0x9B,0x9B,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "Ì": "0x00,0x00,0x00,0x19,0x1B,0xFE,0xFC,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Í": "0x00,0x00,0x00,0x18,0x18,0xFC,0xFE,0x1B,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Î": "0x00,0x00,0x00,0x1C,0x1E,0xFB,0xFB,0x1E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ï": "0x00,0x00,0x00,0x1B,0x1B,0xF8,0xF8,0x1B,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ð": "0x00,0xC0,0xFF,0xFF,0xC3,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "Ñ": "0x00,0xF8,0xF8,0x72,0xE3,0xC1,0x83,0x02,0x03,0xF9,0xF8,0x00,0x00,0x3F,0x3F,0x00,0x00,0x01,0x03,0x07,0x0E,0x3F,0x3F,0x00,", + "Ò": "0x00,0xE0,0xF0,0x39,0x1B,0x1E,0x1C,0x18,0x38,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Ó": "0x00,0xE0,0xF0,0x38,0x18,0x1C,0x1E,0x1B,0x39,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Ô": "0x00,0xE0,0xF0,0x3C,0x1E,0x1B,0x1B,0x1E,0x3C,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Õ": "0x00,0xE0,0xF0,0x3A,0x1B,0x19,0x1B,0x1A,0x3B,0xF1,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Ö": "0x00,0xE0,0xF0,0x3B,0x1B,0x18,0x18,0x1B,0x3B,0xF0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "×": "0x00,0xF0,0xF8,0x1C,0x0C,0x8C,0xEC,0x7C,0x18,0xFC,0xF4,0x00,0x00,0x2F,0x3F,0x18,0x3E,0x37,0x31,0x30,0x38,0x1F,0x0F,0x00,", + "Ù": "0x00,0xF8,0xF8,0x01,0x03,0x06,0x04,0x00,0x00,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "Ú": "0x00,0xF8,0xF8,0x00,0x00,0x04,0x06,0x03,0x01,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "Û": "0x00,0xF8,0xF8,0x04,0x06,0x03,0x03,0x06,0x04,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "Ü": "0x00,0xF8,0xF8,0x03,0x03,0x00,0x00,0x03,0x03,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "Ý": "0x00,0x08,0x18,0x30,0x60,0xC4,0xC6,0x63,0x31,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "ß": "0x00,0x00,0xC0,0xE0,0x30,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0x21,0x21,0x21,0x33,0x3F,0x1E,0x00,0x00,", + "à": "0x00,0x00,0x40,0x60,0x62,0x66,0x6C,0x68,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "á": "0x00,0x00,0x40,0x60,0x68,0x6C,0x66,0x62,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "â": "0x00,0x00,0x40,0x68,0x6C,0x66,0x66,0x6C,0x68,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "ã": "0x00,0x00,0x40,0x68,0x6C,0x64,0x6C,0x68,0x6C,0xE4,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "ä": "0x00,0x00,0x40,0x6C,0x6C,0x60,0x60,0x6C,0x6C,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "å": "0x00,0x00,0x40,0x60,0x64,0x6A,0x6A,0x64,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "æ": "0x00,0x80,0xC0,0x40,0x40,0xC0,0x80,0x40,0x40,0xC0,0x80,0x00,0x00,0x1C,0x3E,0x22,0x22,0x1F,0x3F,0x22,0x22,0x33,0x11,0x00,", + "ç": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0xB8,0xB0,0xF0,0xF0,0x30,0x38,0x18,0x08,0x00,", + "è": "0x00,0x80,0xC0,0xE0,0x62,0x66,0x6C,0x68,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x33,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00,", + "é": "0x00,0x80,0xC0,0xE0,0x60,0x68,0x6C,0x66,0x62,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00,", + "ê": "0x00,0x80,0xC0,0xE8,0x6C,0x66,0x66,0x6C,0x68,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x33,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00,", + "ë": "0x00,0x80,0xC0,0xEC,0x6C,0x60,0x60,0x6C,0x6C,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x33,0x33,0x33,0x33,0x33,0x33,0x13,0x03,0x00,", + "ì": "0x00,0x00,0x00,0x00,0x62,0xE6,0xEC,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "í": "0x00,0x00,0x00,0x00,0x68,0xEC,0xE6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "î": "0x00,0x00,0x00,0x08,0x6C,0xE6,0xE6,0x0C,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ï": "0x00,0x00,0x00,0x0C,0x6C,0xE0,0xEC,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ñ": "0x00,0x00,0xE0,0xE8,0x6C,0x64,0x6C,0x68,0xEC,0xC4,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "ò": "0x00,0x80,0xC0,0xE0,0x62,0x66,0x6C,0x68,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "ó": "0x00,0x80,0xC0,0xE0,0x68,0x6C,0x66,0x62,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "ô": "0x00,0x80,0xC0,0xE8,0x6C,0x66,0x66,0x6C,0xE8,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "õ": "0x00,0x80,0xC8,0xEC,0x64,0x6C,0x68,0x6C,0xE4,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "ö": "0x00,0x80,0xC0,0xEC,0x6C,0x60,0x60,0x6C,0xEC,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "÷": "0x00,0x00,0x80,0x80,0x80,0xB0,0xB0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0D,0x0D,0x01,0x01,0x01,0x00,0x00,", + "ø": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE0,0xC0,0xE0,0xA0,0x00,0x00,0x2F,0x3F,0x18,0x3C,0x36,0x33,0x31,0x38,0x1F,0x0F,0x00,", + "ù": "0x00,0xE0,0xE0,0x00,0x02,0x06,0x0C,0x08,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "ú": "0x00,0xE0,0xE0,0x00,0x08,0x0C,0x06,0x02,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "û": "0x00,0xE0,0xE0,0x08,0x0C,0x06,0x06,0x0C,0x08,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "ü": "0x00,0xE0,0xE0,0x0C,0x0C,0x00,0x00,0x0C,0x0C,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "ý": "0x00,0x00,0x60,0xE0,0x80,0x10,0x18,0x8C,0xE4,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00,", + "þ": "0x00,0x00,0x03,0xFF,0xFF,0x1B,0x18,0x18,0xF8,0xF0,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x36,0x06,0x06,0x07,0x03,0x00,0x00,", + "ÿ": "0x00,0x00,0x60,0xEC,0x8C,0x00,0x00,0x8C,0xEC,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00,", + "Ѐ": "0x00,0xFC,0xFC,0x8D,0x8F,0x8E,0x8C,0x8C,0x8C,0x0C,0x0C,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "Ё": "0x00,0xFE,0xFE,0xC7,0xC7,0xC6,0xC6,0xC7,0xC7,0x06,0x06,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "Ђ": "0x00,0x03,0xFF,0xFF,0x83,0xC3,0xC3,0xC3,0xC0,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x01,0x00,0x30,0x30,0x39,0x1F,0x0F,0x00,", + "Ѓ": "0x00,0xFC,0xFC,0x0C,0x0C,0x0C,0x0E,0x0F,0x0D,0x0C,0x0C,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "Є": "0x00,0xF8,0xFC,0xCE,0xC7,0xC3,0xC3,0xC3,0x07,0x0E,0x0C,0x00,0x00,0x07,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", + "Ѕ": "0x00,0x3C,0x7E,0x67,0xE3,0xC3,0xC3,0xC3,0x87,0x8E,0x0C,0x00,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x31,0x39,0x1F,0x0F,0x00,", + "І": "0x00,0x00,0x00,0x03,0x03,0xFF,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ї": "0x00,0x00,0x00,0x0D,0x0D,0xFC,0xFC,0x0D,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ј": "0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x0E,0x1E,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Љ": "0x00,0x00,0xFE,0xFF,0x03,0x03,0xFF,0xFF,0xC0,0xC0,0x80,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x3F,0x3F,0x30,0x39,0x1F,0x0F,", + "Њ": "0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0x80,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x3F,0x3F,0x30,0x39,0x1F,0x0F,", + "Ћ": "0x00,0x03,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC0,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x01,0x00,0x00,0x00,0x01,0x3F,0x3F,0x00,", + "Ќ": "0x00,0xFF,0xFF,0xC0,0xE2,0xF3,0x39,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,", + "Ѝ": "0x00,0xFF,0xFF,0x00,0x01,0xC3,0xF2,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "Ў": "0x00,0x07,0x1F,0x7C,0xF1,0xC1,0xC1,0xF1,0x7C,0x1F,0x07,0x00,0x00,0x00,0x30,0x30,0x3C,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,", + "Џ": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x1F,0x1F,0x18,0x18,0x78,0x78,0x18,0x18,0x1F,0x1F,0x00,", + # "A":"0x00,0x80,0xE0,0x78,0x1E,0x07,0x07,0x1E,0x78,0xE0,0x80,0x00,0x00,0x3F,0x3F,0x06,0x06,0x06,0x06,0x06,0x06,0x3F,0x3F,0x00," , + "Б": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x83,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", + "В": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", + "Г": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "Г": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "Д": "0x00,0x00,0xF8,0xFE,0x0F,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x70,0x7F,0x1F,0x18,0x18,0x18,0x18,0x1F,0x7F,0x70,0x00,", + "Е": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "Ж": "0x00,0x03,0x0F,0xFC,0xE0,0xFF,0xFF,0xE0,0xFC,0x0F,0x03,0x00,0x00,0x38,0x3F,0x07,0x00,0x3F,0x3F,0x00,0x07,0x3F,0x38,0x00,", + "Ж": "0x00,0x03,0x0F,0xFC,0xE0,0xFF,0xFF,0xE0,0xFC,0x0F,0x03,0x00,0x00,0x38,0x3F,0x07,0x00,0x3F,0x3F,0x00,0x07,0x3F,0x38,0x00,", + "И": "0x00,0xFF,0xFF,0x00,0x00,0xC0,0xF0,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "Й": "0x00,0xFF,0xFF,0x00,0x02,0xC3,0xF1,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "К": "0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,", + "Л": "0x00,0x00,0xF0,0xFC,0x1E,0x07,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "М": "0x00,0xFF,0xFF,0x1E,0x78,0xE0,0xE0,0x78,0x1E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x01,0x01,0x00,0x00,0x3F,0x3F,0x00,", + "Н": "0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "О": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "П": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "Р": "0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,", + "С": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x0E,0x0C,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", + "Т": "0x00,0x03,0x03,0x03,0x03,0xFF,0xFF,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "У": "0x00,0x07,0x1F,0x7C,0xF0,0xC0,0xC0,0xF0,0x7C,0x1F,0x07,0x00,0x00,0x00,0x30,0x30,0x3C,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,", + "Ф": "0x00,0xF8,0xFC,0x0E,0x06,0xFF,0xFF,0x06,0x0E,0xFC,0xF8,0x00,0x00,0x03,0x07,0x0E,0x0C,0x3F,0x3F,0x0C,0x0E,0x07,0x03,0x00,", + "Х": "0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x30,0x3C,0x0F,0x03,0x00,0x00,0x03,0x0F,0x3C,0x30,0x00,", + "Ц": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x1F,0x1F,0x18,0x18,0x18,0x18,0x18,0x1F,0x7F,0x78,0x00,", + "Ч": "0x00,0x7F,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "Ш": "0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x00,", + "Щ": "0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x1F,0x1F,0x18,0x18,0x1F,0x1F,0x18,0x18,0x1F,0x7F,0x70,", + "Ъ": "0x03,0x03,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", + "Ы": "0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0xFF,0xFF,0x00,0x3F,0x3F,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,0x3F,0x3F,", + "Ь": "0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", + "Э": "0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC7,0xCE,0xFC,0xF8,0x00,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0F,0x07,0x00,", + "Ю": "0x00,0xFF,0xFF,0xC0,0xFC,0xFE,0x07,0x03,0x07,0xFE,0xFC,0x00,0x00,0x3F,0x3F,0x00,0x0F,0x1F,0x38,0x30,0x38,0x1F,0x0F,0x00,", + "Я": "0x00,0x7C,0xFE,0xC7,0x83,0x83,0x83,0x83,0x83,0xFF,0xFF,0x00,0x00,0x30,0x38,0x1D,0x0F,0x07,0x03,0x01,0x01,0x3F,0x3F,0x00,", + "а": "0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1E,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "б": "0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,", + "в": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x00,0x3F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,", + "г": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "д": "0x00,0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x60,0x7F,0x3F,0x30,0x30,0x30,0x30,0x3F,0x7F,0x60,0x00,", + "е": "0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,", + "ж": "0x00,0x30,0xF0,0xC0,0x00,0xF0,0xF0,0x00,0xC0,0xF0,0x30,0x00,0x00,0x30,0x3C,0x0F,0x03,0x3F,0x3F,0x03,0x0F,0x3C,0x30,0x00,", + "з": "0x00,0x60,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x18,0x38,0x30,0x33,0x33,0x33,0x33,0x33,0x3F,0x1D,0x00,", + "З": "0x00,0x60,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x18,0x38,0x30,0x33,0x33,0x33,0x33,0x33,0x3F,0x1D,0x00,", + "и": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00,", + "й": "0x00,0xF0,0xF0,0x00,0x04,0x08,0x88,0xC4,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00,", + "к": "0x00,0xF0,0xF0,0x80,0x80,0xC0,0xE0,0x70,0x30,0x10,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x07,0x0E,0x1C,0x38,0x30,0x20,0x00,", + "л": "0x00,0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "м": "0x00,0xF0,0xF0,0xE0,0xC0,0x80,0x80,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x03,0x01,0x00,0x3F,0x3F,0x00,", + "н": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x00,", + "о": "0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x70,0xE0,0xC0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "п": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "р": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x70,0xE0,0xC0,0x00,0x00,0xFF,0xFF,0x0C,0x0C,0x0C,0x0C,0x0C,0x0E,0x07,0x03,0x00,", + "с": "0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x70,0x60,0x40,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x18,0x08,0x00,", + "т": "0x00,0x30,0x30,0x30,0x30,0xF0,0xF0,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "у": "0x00,0x30,0xF0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xF0,0x30,0x00,0x00,0x60,0xE0,0xC3,0xE7,0x7C,0x3C,0x0F,0x03,0x00,0x00,0x00,", + "ф": "0x00,0x80,0xC0,0x60,0x60,0xF0,0xF0,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x30,0x30,0xFF,0xFF,0x30,0x30,0x1F,0x0F,0x00,", + "х": "0x00,0x30,0x70,0xC0,0x80,0x00,0x00,0x80,0xC0,0x70,0x30,0x00,0x00,0x30,0x38,0x0C,0x07,0x03,0x03,0x07,0x0C,0x38,0x30,0x00,", + "ц": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x3F,0xFF,0xF0,0x00,", + "ч": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x00,", + "ш": "0x00,0xF0,0xF0,0x00,0x00,0xE0,0xE0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x00,", + "щ": "0x00,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x30,0x30,0x3F,0xFF,0xE0,", + "ъ": "0x30,0x30,0xF0,0xF0,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00,", + "ы": "0x00,0xF0,0xF0,0x80,0x80,0x80,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x31,0x31,0x3B,0x1F,0x0E,0x00,0x3F,0x3F,0x00,", + "ь": "0x00,0xF0,0xF0,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00,", + "э": "0x00,0x40,0x60,0x70,0x30,0x30,0x30,0x30,0x70,0xE0,0xC0,0x00,0x00,0x08,0x18,0x38,0x30,0x33,0x33,0x33,0x3B,0x1F,0x0F,0x00,", + "ю": "0x00,0xF0,0xF0,0x00,0xE0,0xF0,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x3F,0x3F,0x03,0x1F,0x3F,0x30,0x30,0x30,0x3F,0x1F,0x00,", + "я": "0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x21,0x33,0x3B,0x1E,0x0E,0x06,0x06,0x06,0x3F,0x3F,0x00,", + "ѐ": "0x00,0xE0,0xF0,0x32,0x36,0x36,0x34,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,", + "ё": "0x00,0xE0,0xF0,0x34,0x34,0x30,0x30,0x34,0x34,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,", + "ђ": "0x00,0x30,0xFC,0xFC,0x30,0xB0,0xB0,0xB0,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x07,0x03,0x01,0x01,0xC1,0xFF,0x3F,0x00,", + "ѓ": "0x00,0xF0,0xF0,0x30,0x30,0x34,0x36,0x32,0x30,0x30,0x30,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "є": "0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0x30,0x70,0x60,0x40,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x30,0x38,0x18,0x08,0x00,", + "ѕ": "0x00,0xE0,0xF0,0xB0,0xB0,0x30,0x30,0x30,0x30,0x70,0x60,0x00,0x00,0x18,0x39,0x31,0x33,0x33,0x33,0x37,0x36,0x3E,0x1C,0x00,", + "і": "0x00,0x00,0x00,0x00,0x30,0xF6,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ї": "0x00,0x00,0x00,0x04,0x34,0xF0,0xF4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ј": "0x00,0x00,0x00,0x00,0x00,0x30,0x30,0xF6,0xF6,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xE0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00,", + "љ": "0x00,0x00,0xE0,0xF0,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x1F,0x00,0x00,0x3F,0x3F,0x33,0x33,0x1E,0x0C,", + "њ": "0x00,0xF0,0xF0,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x03,0x3F,0x3F,0x33,0x33,0x1E,0x0C,", + "ћ": "0x00,0x30,0xFC,0xFC,0xB0,0xB0,0xB0,0xB0,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x3F,0x3F,0x00,", + "ќ": "0x00,0xF0,0xF0,0x80,0x88,0xCC,0xE4,0x70,0x30,0x10,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x07,0x0E,0x1C,0x38,0x30,0x20,0x00,", + "ѝ": "0x00,0xF0,0xF0,0x00,0x06,0x0C,0x88,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00,", + "ў": "0x00,0x30,0xF0,0xC0,0x04,0x08,0x08,0x04,0xC0,0xF0,0x30,0x00,0x00,0x60,0xE0,0xC3,0xE7,0x7C,0x3C,0x0F,0x03,0x00,0x00,0x00,", + "џ": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0xF0,0xF0,0x30,0x30,0x3F,0x3F,0x00,", + "Ā": "0x00,0x00,0x00,0xE0,0xF9,0x1D,0x1D,0xF9,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,", + "ā": "0x00,0x00,0x40,0x60,0x68,0x68,0x68,0x68,0x68,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "Ă": "0x00,0x00,0x00,0xE0,0xF9,0x1A,0x1A,0xF9,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,", + "ă": "0x00,0x00,0x40,0x60,0x64,0x68,0x68,0x68,0x64,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "Ą": "0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x67,0xBF,0xB8,0x00,", + "ą": "0x00,0x00,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x1C,0x3E,0x33,0x33,0x33,0x33,0x33,0x73,0xBF,0xBF,0x00,", + "Ć": "0x00,0x80,0xE0,0x70,0x38,0x18,0x1A,0x1B,0x39,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", + "ć": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x6C,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00,", + "Ĉ": "0x00,0x80,0xE0,0x70,0x3A,0x1B,0x19,0x1B,0x3A,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", + "ĉ": "0x00,0x80,0xC0,0xE0,0x68,0x6C,0x64,0x6C,0x68,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00,", + "Ċ": "0x00,0x80,0xE0,0x70,0x38,0x18,0x1A,0x18,0x38,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", + "ċ": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00,", + "Č": "0x00,0x80,0xE0,0x70,0x39,0x1B,0x1A,0x1B,0x39,0x70,0x60,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", + "č": "0x00,0x80,0xC0,0xE0,0x64,0x6C,0x68,0x6C,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x18,0x08,0x00,", + "Ď": "0x00,0xF8,0xF8,0x19,0x1B,0x1A,0x1B,0x39,0x70,0xE0,0x80,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "ď": "0x00,0x80,0xC0,0xE0,0x60,0x60,0xE0,0xFF,0xFF,0x00,0x05,0x03,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,", + "Đ": "0xC0,0xFF,0xFF,0xC3,0xC3,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "đ": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0xE4,0xC4,0xFF,0xFF,0x04,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,", + "Ē": "0x00,0xFC,0xFC,0x8C,0x8D,0x8D,0x8D,0x8D,0x8C,0x0C,0x0C,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "ē": "0x00,0x80,0xC0,0xE0,0x68,0x68,0x68,0x68,0x68,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00,", + "Ĕ": "0x00,0xF8,0xF8,0x98,0x99,0x9A,0x9A,0x99,0x98,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "ĕ": "0x00,0x80,0xC0,0xE0,0x64,0x68,0x68,0x68,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00,", + "Ė": "0x00,0xF8,0xF8,0x98,0x98,0x98,0x9A,0x98,0x98,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "ė": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00,", + "Ę": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x70,0xB0,0xB0,0x00,", + "ę": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x73,0xB3,0xB3,0x13,0x01,0x00,", + "Ě": "0x00,0xF8,0xF8,0x98,0x99,0x9B,0x9A,0x9B,0x99,0x18,0x18,0x00,0x00,0x3F,0x3F,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x00,", + "ě": "0x00,0x80,0xC0,0xE0,0x64,0x6C,0x68,0x6C,0x64,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x3B,0x33,0x33,0x33,0x33,0x33,0x13,0x01,0x00,", + "Ĝ": "0x00,0x80,0xE0,0x70,0x1A,0x1B,0x19,0x1B,0x1A,0x38,0x30,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "ĝ": "0x00,0x80,0xC0,0xE0,0x68,0x6C,0x64,0x6C,0x68,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00,", + "Ğ": "0x00,0x80,0xE0,0x70,0x1A,0x19,0x19,0x19,0x1A,0x38,0x30,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "ğ": "0x00,0x80,0xC0,0xE0,0x68,0x64,0x64,0x64,0x68,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00,", + "Ġ": "0x00,0x80,0xE0,0x70,0x18,0x18,0x1A,0x18,0x18,0x38,0x30,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x33,0x33,0x33,0x3F,0x3F,0x00,", + "ġ": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x68,0x60,0x60,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00,", + "Ģ": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0xC3,0xC3,0xC3,0xC7,0xC6,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0xB0,0x70,0x30,0x3F,0x3F,0x00,", + "ģ": "0x00,0x80,0xC0,0xE0,0x60,0x60,0x6C,0x6A,0x60,0xE0,0xE0,0x00,0x00,0x03,0xC7,0xCE,0xCC,0xCC,0xCC,0xCC,0xE6,0x7F,0x3F,0x00,", + "Ĥ": "0x00,0xFC,0xFC,0x80,0x82,0x81,0x81,0x82,0x80,0xFC,0xFC,0x00,0x00,0x3F,0x3F,0x01,0x01,0x01,0x01,0x01,0x01,0x3F,0x3F,0x00,", + "ĥ": "0x00,0xFE,0xFE,0xC0,0x62,0x63,0x61,0xE3,0xC2,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,", + "Ħ": "0x02,0xFF,0xFF,0xC2,0xC2,0xC2,0xC2,0xC2,0xC2,0xFF,0xFF,0x02,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "ħ": "0x04,0xFF,0xFF,0xC4,0x64,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,", + "Ĩ": "0x00,0x00,0x00,0x1A,0x19,0xFB,0xFB,0x1A,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ĩ": "0x00,0x00,0x00,0x08,0x64,0xEC,0xE8,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ī": "0x00,0x00,0x00,0x0C,0x0D,0xFD,0xFD,0x0D,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ī": "0x00,0x00,0x00,0x08,0x68,0xE8,0xE8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ĭ": "0x00,0x00,0x00,0x18,0x19,0xFA,0xFA,0x19,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ĭ": "0x00,0x00,0x00,0x00,0x64,0xE8,0xE8,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Į": "0x00,0x00,0x00,0x03,0x03,0xFF,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x7F,0xBF,0xB0,0x30,0x00,0x00,0x00,", + "į": "0x00,0x00,0x00,0x00,0x60,0xEC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x7F,0xBF,0xB0,0x30,0x00,0x00,0x00,", + "İ": "0x00,0x00,0x00,0x18,0x18,0xF8,0xFA,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "ı": "0x00,0x00,0x00,0x00,0x60,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "IJ": "0x00,0x03,0xFF,0xFF,0x03,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x30,0x3F,0x3F,0x30,0x0C,0x1C,0x30,0x30,0x3F,0x1F,0x00,", + "ij": "0x00,0x00,0x20,0xEC,0xEC,0x00,0x00,0x20,0xEC,0xEC,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x70,0xC0,0xC0,0xFF,0x7F,0x00,0x00,", + "Ĵ": "0x00,0x00,0x00,0x00,0x02,0x03,0x01,0x03,0x02,0xF8,0xF8,0x00,0x00,0x0E,0x1E,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "ĵ": "0x00,0x00,0x00,0x00,0x00,0x08,0x6C,0xE4,0xEC,0x08,0x00,0x00,0x00,0x00,0x00,0x60,0xE0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00,", + "Ķ": "0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0xA3,0x67,0x0E,0x1C,0x38,0x30,0x00,", + "ķ": "0x00,0x00,0xFF,0xFF,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0xA7,0x6F,0x1C,0x38,0x30,0x00,0x00,", + "ĸ": "0x00,0x00,0xE0,0xE0,0x00,0x80,0xC0,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x07,0x0F,0x1C,0x38,0x30,0x00,0x00,", + "Ĺ": "0x00,0xF8,0xFA,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "ĺ": "0x00,0x00,0x00,0x00,0x18,0xFA,0xFB,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ļ": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0xB0,0x70,0x30,0x30,0x30,0x30,0x00,", + "ļ": "0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0xBF,0x7F,0x30,0x30,0x00,0x00,0x00,", + "Ľ": "0x00,0xFF,0xFF,0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "ľ": "0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ŀ": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "ŀ": "0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ł": "0x80,0xFF,0xFF,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", + "ł": "0x00,0x00,0x00,0x00,0x83,0xFF,0xFF,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x30,0x3F,0x3F,0x30,0x30,0x00,0x00,0x00,", + "Ń": "0x00,0xFF,0xFF,0x0E,0x38,0xF2,0xC3,0x01,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x03,0x07,0x1C,0x3F,0x3F,0x00,", + "ń": "0x00,0x00,0xE0,0xE0,0x60,0x68,0x6C,0x64,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "Ņ": "0x00,0xFF,0xFF,0x0E,0x38,0xF0,0xC0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0xA0,0x63,0x07,0x1C,0x3F,0x3F,0x00,", + "ņ": "0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0xA0,0x60,0x00,0x3F,0x3F,0x00,", + "Ň": "0x00,0xFF,0xFF,0x0E,0x38,0xF1,0xC2,0x01,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x03,0x07,0x1C,0x3F,0x3F,0x00,", + "ň": "0x00,0x00,0xE0,0xE0,0x64,0x6C,0x68,0x6C,0xE4,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "ʼn": "0x00,0x0A,0xE6,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", + "Ŋ": "0x00,0x00,0xFF,0xFF,0x06,0x03,0x03,0x03,0x07,0xFE,0xFC,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x20,0x20,0x30,0x1F,0x0F,0x00,", + "ŋ": "0x00,0x00,0xE0,0xE0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x80,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0xC0,0xC0,0xFF,0x7F,0x00,", + "Ō": "0x00,0xC0,0xF0,0x38,0x1D,0x0D,0x0D,0x1D,0x38,0xF0,0xC0,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "ō": "0x00,0x80,0xC0,0xE0,0x68,0x68,0x68,0x68,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Ŏ": "0x00,0x80,0xE0,0x70,0x39,0x1A,0x1A,0x39,0x70,0xE0,0x80,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "ŏ": "0x00,0x80,0xC0,0xE0,0x64,0x68,0x68,0x64,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Ő": "0x00,0x80,0xE0,0x70,0x3A,0x19,0x1A,0x39,0x70,0xE0,0x80,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", + "ő": "0x00,0x80,0xC0,0xE0,0x68,0x64,0x68,0x64,0xE0,0xC0,0x80,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,0x00,", + "Œ": "0xF0,0xFC,0x0E,0x03,0x03,0x07,0xFE,0xFF,0xC3,0xC3,0xC3,0x00,0x03,0x0F,0x1C,0x30,0x30,0x38,0x1F,0x3F,0x30,0x30,0x30,0x00,", + "œ": "0x80,0xC0,0xE0,0x60,0x60,0xE0,0xC0,0x60,0x60,0x60,0x40,0x80,0x0F,0x1F,0x38,0x30,0x30,0x1F,0x1F,0x3B,0x33,0x33,0x1B,0x09,", + "Ŕ": "0x00,0xF8,0xF8,0x98,0x98,0x9A,0x9B,0x99,0xF8,0xF0,0x60,0x00,0x00,0x3F,0x3F,0x01,0x01,0x03,0x07,0x0F,0x1D,0x38,0x30,0x00,", + "ŕ": "0x00,0x00,0xE0,0xE0,0xC0,0x60,0x68,0x6C,0x64,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "Ŗ": "0x00,0xFF,0xFF,0x83,0x83,0x83,0x83,0x83,0xC7,0xFE,0x7C,0x00,0x00,0x3F,0x3F,0x01,0x01,0xA3,0x67,0x0F,0x1D,0x38,0x30,0x00,", + "ŗ": "0x00,0x00,0xE0,0xE0,0xC0,0x60,0x60,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00,", + "Ř": "0x00,0xF8,0xF8,0x99,0x9B,0x9A,0x9B,0x99,0xF8,0xF0,0x60,0x00,0x00,0x3F,0x3F,0x01,0x01,0x03,0x07,0x0F,0x1D,0x38,0x30,0x00,", + "ř": "0x00,0x00,0xE0,0xE0,0xC4,0x6C,0x68,0x6C,0x64,0xE0,0xC0,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", + "Ś": "0x00,0x60,0xF0,0xF8,0x98,0x9A,0x9B,0x99,0x98,0x30,0x20,0x00,0x00,0x0C,0x1C,0x39,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00,", + "ś": "0x00,0xC0,0xE0,0x60,0x68,0x6C,0x64,0x60,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00,", + "Ŝ": "0x00,0x60,0xF0,0xF8,0x9A,0x9B,0x99,0x9B,0x9A,0x30,0x20,0x00,0x00,0x0C,0x1C,0x39,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00,", + "ŝ": "0x00,0xC0,0xE0,0x68,0x6C,0x64,0x6C,0x68,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00,", + "Ş": "0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC7,0x8E,0x0C,0x00,0x00,0x0C,0x1C,0x38,0x30,0xB0,0xF0,0x30,0x39,0x1F,0x0F,0x00,", + "ş": "0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0xB3,0xF3,0x33,0x3F,0x1E,0x00,0x00,0x00,", + "Š": "0x00,0x60,0xF0,0xF8,0x99,0x9B,0x9A,0x9B,0x99,0x30,0x20,0x00,0x00,0x0C,0x1C,0x39,0x31,0x31,0x31,0x31,0x3B,0x1F,0x0E,0x00,", + "š": "0x00,0xC0,0xE0,0x64,0x6C,0x68,0x6C,0x64,0x40,0x00,0x00,0x00,0x00,0x11,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00,", + "Ţ": "0x00,0x00,0x03,0x03,0x03,0xFF,0xFF,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0xBF,0x60,0x00,0x00,0x00,0x00,", + "ţ": "0x00,0x60,0x60,0xFE,0xFE,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0xB0,0xB0,0xF0,0x30,0x00,0x00,0x00,", + "Ť": "0x00,0x00,0x18,0x19,0x1B,0xFA,0xFA,0x1B,0x19,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "ť": "0x00,0x60,0x60,0xFE,0xFE,0x60,0x65,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00,", + "Ŧ": "0x00,0x00,0x03,0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "ŧ": "0x00,0x30,0x30,0xFE,0xFE,0x30,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x1F,0x3F,0x33,0x33,0x30,0x30,0x00,0x00,0x00,", + "Ũ": "0x00,0xF8,0xF8,0x02,0x01,0x03,0x03,0x02,0x01,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "ũ": "0x00,0xE0,0xE0,0x08,0x04,0x0C,0x0C,0x08,0x04,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "Ū": "0x00,0xFC,0xFC,0x00,0x01,0x01,0x01,0x01,0x00,0xFC,0xFC,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "ū": "0x00,0xE0,0xE0,0x00,0x08,0x08,0x08,0x08,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "Ŭ": "0x00,0xFC,0xFC,0x00,0x01,0x02,0x02,0x01,0x00,0xFC,0xFC,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "ŭ": "0x00,0xE0,0xE0,0x00,0x04,0x08,0x08,0x04,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "Ů": "0x00,0xF8,0xF8,0x00,0x06,0x09,0x09,0x06,0x00,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "ů": "0x00,0xE0,0xE0,0x00,0x0C,0x12,0x12,0x0C,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "Ű": "0x00,0xF8,0xF8,0x00,0x02,0x01,0x02,0x01,0x00,0xF8,0xF8,0x00,0x00,0x07,0x1F,0x38,0x30,0x30,0x30,0x30,0x38,0x1F,0x07,0x00,", + "ű": "0x00,0xE0,0xE0,0x00,0x08,0x04,0x08,0x04,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0x30,0x30,0x30,0x18,0x3F,0x3F,0x00,", + "Ų": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x07,0x1F,0x38,0x30,0xF0,0xB0,0xB0,0x38,0x1F,0x07,0x00,", + "ų": "0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00,0x0F,0x1F,0x38,0x30,0xF0,0xB0,0xB0,0x18,0x3F,0x3F,0x00,", + "Ŵ": "0x00,0xFC,0xFC,0x00,0x02,0x81,0x81,0x02,0x00,0xFC,0xFC,0x00,0x00,0x3F,0x3F,0x1C,0x06,0x03,0x03,0x06,0x1C,0x3F,0x3F,0x00,", + "ŵ": "0x00,0xE0,0xE0,0x00,0x04,0xE8,0xE8,0x04,0x00,0xE0,0xE0,0x00,0x00,0x07,0x1F,0x38,0x1C,0x0F,0x0F,0x1C,0x38,0x1F,0x07,0x00,", + "Ŷ": "0x00,0x02,0x0E,0x3C,0xF2,0xC1,0xC1,0xF2,0x3C,0x0E,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "ŷ": "0x00,0x00,0x60,0xE0,0x88,0x04,0x04,0x88,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00,", + "Ÿ": "0x00,0x02,0x0E,0x3C,0xF1,0xC0,0xC0,0xF1,0x3C,0x0E,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", + "Ź": "0x00,0x18,0x18,0x18,0x18,0x1A,0x9B,0xD9,0xF8,0x78,0x38,0x00,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x00,", + "ź": "0x00,0x60,0x60,0x60,0x68,0x6C,0xE4,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,", + "Ż": "0x00,0x18,0x18,0x18,0x18,0x18,0x9A,0xD8,0xF8,0x78,0x38,0x00,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x00,", + "ż": "0x00,0x60,0x60,0x60,0x60,0x68,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,", + "Ž": "0x00,0x18,0x18,0x18,0x19,0x1B,0x9A,0xDB,0xF9,0x78,0x38,0x00,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x00,", + "ž": "0x00,0x60,0x60,0x64,0x6C,0x68,0xEC,0xE4,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,", + "ſ": "0x00,0x00,0x00,0x00,0xFC,0xFE,0x06,0x06,0x0E,0x0C,0x00,0x00,0x00,0x00,0x30,0x30,0x3F,0x3F,0x30,0x00,0x00,0x00,0x00,0x00,", } return font + def getSmallFontMap(): - font = { - " ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", - "!":"0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,", - "\"":"0x00, 0x07, 0x00, 0x07, 0x00, 0x00,", - "#":"0x14, 0x7f, 0x14, 0x7f, 0x14, 0x00,", - "$":"0x24, 0x2a, 0x7f, 0x2a, 0x12, 0x00,", - "%":"0x23, 0x13, 0x08, 0x64, 0x62, 0x00,", - "&":"0x36, 0x49, 0x56, 0x20, 0x58, 0x00,", - "'":"0x00, 0x05, 0x03, 0x00, 0x00, 0x00,", - "(":"0x00, 0x1c, 0x22, 0x41, 0x00, 0x00,", - ")":"0x00, 0x41, 0x22, 0x1c, 0x00, 0x00,", - "*":"0x14, 0x08, 0x3e, 0x08, 0x14, 0x00,", - "+":"0x08, 0x08, 0x3e, 0x08, 0x08, 0x00,", - ",":"0x00, 0x50, 0x30, 0x00, 0x00, 0x00,", - "-":"0x08, 0x08, 0x08, 0x08, 0x08, 0x00,", - ".":"0x00, 0x60, 0x60, 0x00, 0x00, 0x00,", - "/":"0x20, 0x10, 0x08, 0x04, 0x02, 0x00,", - "0":"0x3e, 0x51, 0x49, 0x45, 0x3e, 0x00,", - "1":"0x00, 0x42, 0x7f, 0x40, 0x00, 0x00,", - "2":"0x42, 0x61, 0x51, 0x49, 0x46, 0x00,", - "3":"0x21, 0x41, 0x45, 0x4b, 0x31, 0x00,", - "4":"0x18, 0x14, 0x12, 0x7f, 0x10, 0x00,", - "5":"0x27, 0x45, 0x45, 0x45, 0x39, 0x00,", - "6":"0x3c, 0x4a, 0x49, 0x49, 0x30, 0x00,", - "7":"0x01, 0x71, 0x09, 0x05, 0x03, 0x00,", - "8":"0x36, 0x49, 0x49, 0x49, 0x36, 0x00,", - "9":"0x06, 0x49, 0x49, 0x29, 0x1e, 0x00,", - ":":"0x00, 0x36, 0x36, 0x00, 0x00, 0x00,", - ";":"0x00, 0x56, 0x36, 0x00, 0x00, 0x00,", - "<":"0x08, 0x14, 0x22, 0x41, 0x00, 0x00,", - "=":"0x14, 0x14, 0x14, 0x14, 0x14, 0x00,", - ">":"0x00, 0x41, 0x22, 0x14, 0x08, 0x00,", - "?":"0x02, 0x01, 0x51, 0x09, 0x06, 0x00,", - "@":"0x32, 0x49, 0x79, 0x41, 0x3e, 0x00,", - "A":"0x7e, 0x09, 0x09, 0x09, 0x7e, 0x00,", - "B":"0x7f, 0x49, 0x49, 0x49, 0x36, 0x00,", - "C":"0x3e, 0x41, 0x41, 0x41, 0x22, 0x00,", - "D":"0x7f, 0x41, 0x41, 0x22, 0x1c, 0x00,", - "E":"0x7f, 0x49, 0x49, 0x49, 0x41, 0x00,", - "F":"0x7f, 0x09, 0x09, 0x09, 0x01, 0x00,", - "G":"0x3e, 0x41, 0x41, 0x49, 0x7a, 0x00,", - "H":"0x7f, 0x08, 0x08, 0x08, 0x7f, 0x00,", - "I":"0x00, 0x41, 0x7f, 0x41, 0x00, 0x00,", - "J":"0x20, 0x40, 0x41, 0x3f, 0x01, 0x00,", - "K":"0x7f, 0x08, 0x14, 0x22, 0x41, 0x00,", - "L":"0x7f, 0x40, 0x40, 0x40, 0x40, 0x00,", - "M":"0x7f, 0x02, 0x0c, 0x02, 0x7f, 0x00,", - "N":"0x7f, 0x04, 0x08, 0x10, 0x7f, 0x00,", - "O":"0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00,", - "P":"0x7f, 0x09, 0x09, 0x09, 0x06, 0x00,", - "Q":"0x3e, 0x41, 0x51, 0x21, 0x5e, 0x00,", - "R":"0x7f, 0x09, 0x19, 0x29, 0x46, 0x00,", - "S":"0x26, 0x49, 0x49, 0x49, 0x32, 0x00,", - "T":"0x01, 0x01, 0x7f, 0x01, 0x01, 0x00,", - "U":"0x3f, 0x40, 0x40, 0x40, 0x3f, 0x00,", - "V":"0x1f, 0x20, 0x40, 0x20, 0x1f, 0x00,", - "W":"0x3f, 0x40, 0x38, 0x40, 0x3f, 0x00,", - "X":"0x63, 0x14, 0x08, 0x14, 0x63, 0x00,", - "Y":"0x07, 0x08, 0x70, 0x08, 0x07, 0x00,", - "Z":"0x61, 0x51, 0x49, 0x45, 0x43, 0x00,", - "[":"0x00, 0x7f, 0x41, 0x41, 0x00, 0x00,", - "\\":"0x02, 0x04, 0x08, 0x10, 0x20, 0x00,", - "]":"0x00, 0x41, 0x41, 0x7f, 0x00, 0x00,", - "^":"0x04, 0x02, 0x01, 0x02, 0x04, 0x00,", - "_":"0x40, 0x40, 0x40, 0x40, 0x40, 0x00,", - "`":"0x00, 0x03, 0x05, 0x00, 0x00, 0x00,", - "a":"0x20, 0x54, 0x54, 0x54, 0x78, 0x00,", - "b":"0x7f, 0x48, 0x44, 0x44, 0x38, 0x00,", - "c":"0x38, 0x44, 0x44, 0x44, 0x20, 0x00,", - "d":"0x38, 0x44, 0x44, 0x48, 0x7f, 0x00,", - "e":"0x38, 0x54, 0x54, 0x54, 0x18, 0x00,", - "f":"0x00, 0x04, 0x7e, 0x05, 0x01, 0x00,", - "g":"0x08, 0x54, 0x54, 0x54, 0x3c, 0x00,", - "h":"0x7f, 0x08, 0x04, 0x04, 0x78, 0x00,", - "i":"0x00, 0x44, 0x7d, 0x40, 0x00, 0x00,", - "j":"0x20, 0x40, 0x44, 0x3d, 0x00, 0x00,", - "k":"0x00, 0x7f, 0x10, 0x28, 0x44, 0x00,", - "l":"0x00, 0x41, 0x7f, 0x40, 0x00, 0x00,", - "m":"0x7c, 0x04, 0x78, 0x04, 0x78, 0x00,", - "n":"0x7c, 0x08, 0x04, 0x04, 0x78, 0x00,", - "o":"0x38, 0x44, 0x44, 0x44, 0x38, 0x00,", - "p":"0x7c, 0x14, 0x14, 0x14, 0x08, 0x00,", - "q":"0x08, 0x14, 0x14, 0x14, 0x7c, 0x00,", - "r":"0x7c, 0x08, 0x04, 0x04, 0x08, 0x00,", - "s":"0x48, 0x54, 0x54, 0x54, 0x24, 0x00,", - "t":"0x04, 0x3e, 0x44, 0x40, 0x20, 0x00,", - "u":"0x3c, 0x40, 0x40, 0x20, 0x7c, 0x00,", - "v":"0x0c, 0x30, 0x40, 0x30, 0x0c, 0x00,", - "w":"0x3c, 0x40, 0x30, 0x40, 0x3c, 0x00,", - "x":"0x44, 0x24, 0x38, 0x48, 0x44, 0x00,", - "y":"0x44, 0x48, 0x30, 0x10, 0x0c, 0x00,", - "z":"0x44, 0x64, 0x54, 0x4c, 0x44, 0x00,", - "{":"0x08, 0x36, 0x41, 0x00, 0x00, 0x00,", - "|":"0x00, 0x00, 0x77, 0x00, 0x00, 0x00,", - "}":"0x00, 0x00, 0x41, 0x36, 0x08, 0x00,", - "~":"0x02, 0x01, 0x02, 0x04, 0x02, 0x00,", - "^":"0x04, 0x02, 0x01, 0x02, 0x04, 0x00,", - "¡":"0x00, 0x00, 0x79, 0x00, 0x00, 0x00,", - "¢":"0x1c, 0x22, 0x7f, 0x22, 0x10, 0x00,", - "£":"0x50, 0x7e, 0x51, 0x41, 0x42, 0x00,", - "¤":"0x22, 0x1c, 0x14, 0x1c, 0x22, 0x00,", - "¥":"0x15, 0x16, 0x7c, 0x16, 0x15, 0x00,", - "¦":"0x00, 0x00, 0x77, 0x00, 0x00, 0x00,", - "§":"0x4a, 0x55, 0x55, 0x55, 0x29, 0x00,", - "¨":"0x00, 0x01, 0x00, 0x01, 0x00, 0x00,", - "©":"0x00, 0x18, 0x24, 0x24, 0x00, 0x00,", - "«":"0x08, 0x14, 0x00, 0x08, 0x14, 0x00,", - "¬":"0x08, 0x08, 0x08, 0x08, 0x38, 0x00,", - "­":"0x08, 0x08, 0x08, 0x08, 0x08, 0x00,", - "¯":"0x00, 0x01, 0x01, 0x01, 0x00, 0x00,", - "°":"0x00, 0x00, 0x07, 0x05, 0x07, 0x00,", - "±":"0x44, 0x44, 0x5f, 0x44, 0x44, 0x00,", - "²":"0x1d, 0x15, 0x17, 0x00, 0x00, 0x00,", - "³":"0x15, 0x15, 0x1f, 0x00, 0x00, 0x00,", - "´":"0x00, 0x04, 0x02, 0x01, 0x00, 0x00,", - "µ":"0x7c, 0x10, 0x10, 0x0c, 0x10, 0x00,", - "¶":"0x02, 0x07, 0x7f, 0x01, 0x7f, 0x00,", - "·":"0x00, 0x00, 0x08, 0x00, 0x00, 0x00,", - "¸":"0x00, 0x40, 0x60, 0x00, 0x00, 0x00,", - "¹":"0x12, 0x1f, 0x10, 0x00, 0x00, 0x00,", - "º":"0x07, 0x05, 0x07, 0x00, 0x00, 0x00,", - "»":"0x14, 0x08, 0x00, 0x14, 0x08, 0x00,", - "¼":"0x21, 0x17, 0x38, 0x24, 0x72, 0x00,", - "½":"0x21, 0x17, 0x78, 0x54, 0x5e, 0x00,", - "¿":"0x30, 0x48, 0x45, 0x40, 0x20, 0x00,", - "À":"0x78, 0x15, 0x16, 0x14, 0x78, 0x00,", - "Á":"0x78, 0x14, 0x16, 0x15, 0x78, 0x00,", - "Â":"0x78, 0x16, 0x15, 0x16, 0x78, 0x00,", - "Ã":"0x7a, 0x29, 0x2a, 0x79, 0x00, 0x00,", - "Ä":"0x78, 0x15, 0x14, 0x15, 0x78, 0x00,", - "Å":"0x78, 0x14, 0x15, 0x14, 0x78, 0x00,", - "Æ":"0x7e, 0x09, 0x7f, 0x49, 0x49, 0x00,", - "Ç":"0x0e, 0x51, 0x71, 0x11, 0x08, 0x00,", - "È":"0x7c, 0x55, 0x56, 0x44, 0x44, 0x00,", - "É":"0x7c, 0x54, 0x56, 0x45, 0x44, 0x00,", - "Ê":"0x7c, 0x56, 0x55, 0x46, 0x44, 0x00,", - "Ë":"0x7c, 0x55, 0x54, 0x45, 0x44, 0x00,", - "Ì":"0x00, 0x49, 0x7a, 0x48, 0x00, 0x00,", - "Í":"0x00, 0x48, 0x7a, 0x49, 0x00, 0x00,", - "Î":"0x00, 0x4a, 0x79, 0x4a, 0x00, 0x00,", - "Ï":"0x44, 0x45, 0x7c, 0x45, 0x44, 0x00,", - "Ð":"0x08, 0x7f, 0x49, 0x22, 0x1c, 0x00,", - "Ñ":"0x7a, 0x11, 0x22, 0x79, 0x00, 0x00,", - "Ò":"0x38, 0x45, 0x46, 0x44, 0x38, 0x00,", - "Ó":"0x38, 0x44, 0x46, 0x45, 0x38, 0x00,", - "Ô":"0x38, 0x46, 0x45, 0x46, 0x38, 0x00,", - "Õ":"0x32, 0x49, 0x4a, 0x31, 0x00, 0x00,", - "Ö":"0x38, 0x45, 0x44, 0x45, 0x38, 0x00,", - "×":"0x22, 0x14, 0x08, 0x14, 0x22, 0x00,", - "Ø":"0x58, 0x24, 0x54, 0x48, 0x34, 0x00,", - "Ù":"0x38, 0x41, 0x42, 0x40, 0x38, 0x00,", - "Ú":"0x38, 0x40, 0x42, 0x41, 0x38, 0x00,", - "Û":"0x38, 0x42, 0x41, 0x42, 0x38, 0x00,", - "Ü":"0x3c, 0x41, 0x40, 0x41, 0x3c, 0x00,", - "Ý":"0x04, 0x08, 0x72, 0x09, 0x04, 0x00,", - "Þ":"0x7f, 0x22, 0x22, 0x22, 0x1c, 0x00,", - "ß":"0x7e, 0x11, 0x25, 0x25, 0x1a, 0x00,", - "à":"0x20, 0x55, 0x56, 0x54, 0x78, 0x00,", - "á":"0x20, 0x54, 0x56, 0x55, 0x78, 0x00,", - "â":"0x20, 0x56, 0x55, 0x56, 0x78, 0x00,", - "ã":"0x22, 0x55, 0x56, 0x55, 0x78, 0x00,", - "ä":"0x20, 0x55, 0x54, 0x55, 0x78, 0x00,", - "å":"0x20, 0x54, 0x55, 0x54, 0x78, 0x00,", - "æ":"0x24, 0x54, 0x7c, 0x54, 0x48, 0x00,", - "ç":"0x1c, 0x22, 0x62, 0x22, 0x10, 0x00,", - "è":"0x38, 0x55, 0x56, 0x54, 0x08, 0x00,", - "é":"0x38, 0x54, 0x56, 0x55, 0x08, 0x00,", - "ê":"0x38, 0x56, 0x55, 0x56, 0x08, 0x00,", - "ë":"0x38, 0x55, 0x54, 0x55, 0x08, 0x00,", - "ì":"0x00, 0x45, 0x7e, 0x40, 0x00, 0x00,", - "í":"0x00, 0x44, 0x7e, 0x41, 0x00, 0x00,", - "î":"0x00, 0x46, 0x7d, 0x42, 0x00, 0x00,", - "ï":"0x00, 0x45, 0x7c, 0x41, 0x00, 0x00,", - "ñ":"0x78, 0x12, 0x09, 0x0a, 0x71, 0x00,", - "ò":"0x38, 0x45, 0x46, 0x44, 0x38, 0x00,", - "ó":"0x38, 0x44, 0x46, 0x45, 0x38, 0x00,", - "ô":"0x38, 0x46, 0x45, 0x46, 0x38, 0x00,", - "õ":"0x32, 0x49, 0x4a, 0x31, 0x00, 0x00,", - "ö":"0x38, 0x45, 0x44, 0x45, 0x38, 0x00,", - "÷":"0x08, 0x08, 0x2a, 0x08, 0x08, 0x00,", - "ø":"0x58, 0x24, 0x54, 0x48, 0x34, 0x00,", - "ù":"0x3c, 0x41, 0x42, 0x20, 0x7c, 0x00,", - "ú":"0x3c, 0x40, 0x42, 0x21, 0x7c, 0x00,", - "û":"0x3c, 0x42, 0x41, 0x22, 0x7c, 0x00,", - "ü":"0x3c, 0x41, 0x40, 0x21, 0x5c, 0x00,", - "ý":"0x44, 0x48, 0x32, 0x11, 0x0c, 0x00,", - "þ":"0x7c, 0x28, 0x28, 0x10, 0x00, 0x00,", - "ÿ":"0x44, 0x49, 0x30, 0x11, 0x0c, 0x00,", - "Ѐ":"0x7c, 0x55, 0x56, 0x44, 0x44, 0x00,", - "Ё":"0x7c, 0x55, 0x54, 0x45, 0x44, 0x00,", - "Ђ":"0x01, 0x7f, 0x09, 0x49, 0x31, 0x00,", - "Ѓ":"0x7c, 0x04, 0x06, 0x05, 0x04, 0x00,", - "Є":"0x3e, 0x49, 0x49, 0x41, 0x00, 0x00,", - "Ѕ":"0x06, 0x49, 0x49, 0x49, 0x30, 0x00,", - "І":"0x41, 0x41, 0x7f, 0x41, 0x41, 0x00,", - "Ї":"0x44, 0x45, 0x7c, 0x45, 0x44, 0x00,", - "Ј":"0x20, 0x40, 0x41, 0x3f, 0x01, 0x00,", - "Љ":"0x7f, 0x01, 0x7f, 0x48, 0x30, 0x00,", - "Њ":"0x7f, 0x08, 0x7f, 0x48, 0x30, 0x00,", - "Ћ":"0x01, 0x01, 0x7f, 0x09, 0x71, 0x00,", - "Ќ":"0x7c, 0x12, 0x29, 0x44, 0x00, 0x00,", - "Ѝ":"0x7c, 0x21, 0x12, 0x08, 0x7c, 0x00,", - "Ў":"0x44, 0x49, 0x32, 0x09, 0x04, 0x00,", - "Џ":"0x3f, 0x20, 0x60, 0x20, 0x3f, 0x00,", - "А":"0x7e, 0x09, 0x09, 0x09, 0x7e, 0x00,", - "Б":"0x7f, 0x49, 0x49, 0x49, 0x31, 0x00,", - "В":"0x7f, 0x49, 0x49, 0x49, 0x36, 0x00,", - "Г":"0x7f, 0x01, 0x01, 0x01, 0x01, 0x00,", - "Д":"0x60, 0x3f, 0x21, 0x3f, 0x60, 0x00,", - "Е":"0x7f, 0x49, 0x49, 0x49, 0x41, 0x00,", - "Ж":"0x77, 0x08, 0x7f, 0x08, 0x77, 0x00,", - "З":"0x00, 0x41, 0x49, 0x49, 0x36, 0x00,", - "И":"0x7f, 0x10, 0x08, 0x04, 0x7f, 0x00,", - "Й":"0x7c, 0x21, 0x12, 0x09, 0x7c, 0x00,", - "К":"0x7f, 0x08, 0x14, 0x22, 0x41, 0x00,", - "Л":"0x40, 0x3f, 0x01, 0x01, 0x7f, 0x00,", - "М":"0x7f, 0x02, 0x04, 0x02, 0x7f, 0x00,", - "Н":"0x7f, 0x08, 0x08, 0x08, 0x7f, 0x00,", - "О":"0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00,", - "П":"0x7f, 0x01, 0x01, 0x01, 0x7f, 0x00,", - "Р":"0x7f, 0x09, 0x09, 0x09, 0x06, 0x00,", - "С":"0x3e, 0x41, 0x41, 0x41, 0x22, 0x00,", - "Т":"0x01, 0x01, 0x7f, 0x01, 0x01, 0x00,", - "У":"0x47, 0x48, 0x30, 0x08, 0x07, 0x00,", - "Ф":"0x0c, 0x12, 0x7f, 0x12, 0x0c, 0x00,", - "Х":"0x63, 0x14, 0x08, 0x14, 0x63, 0x00,", - "Ц":"0x3f, 0x20, 0x20, 0x3f, 0x60, 0x00,", - "Ч":"0x07, 0x08, 0x08, 0x08, 0x7f, 0x00,", - "Ш":"0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x00,", - "Щ":"0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x60,", - "Ъ":"0x01, 0x7f, 0x48, 0x48, 0x30, 0x00,", - "Ы":"0x7f, 0x48, 0x30, 0x00, 0x7f, 0x00,", - "Ь":"0x00, 0x7f, 0x48, 0x48, 0x30, 0x00,", - "Э":"0x22, 0x49, 0x49, 0x2a, 0x1c, 0x00,", - "Ю":"0x7f, 0x08, 0x3e, 0x41, 0x3e, 0x00,", - "Я":"0x46, 0x29, 0x19, 0x09, 0x7f, 0x00,", - "а":"0x20, 0x54, 0x54, 0x54, 0x78, 0x00,", - "б":"0x3c, 0x4a, 0x4a, 0x4a, 0x30, 0x00,", - "в":"0x7c, 0x54, 0x54, 0x54, 0x28, 0x00,", - "г":"0x7c, 0x04, 0x04, 0x04, 0x04, 0x00,", - "д":"0x40, 0x3c, 0x24, 0x3c, 0x60, 0x00,", - "е":"0x38, 0x54, 0x54, 0x54, 0x18, 0x00,", - "ж":"0x6c, 0x10, 0x7c, 0x10, 0x6c, 0x00,", - "з":"0x28, 0x44, 0x54, 0x54, 0x28, 0x00,", - "и":"0x7c, 0x20, 0x10, 0x08, 0x7c, 0x00,", - "й":"0x7c, 0x21, 0x12, 0x09, 0x7c, 0x00,", - "к":"0x7c, 0x10, 0x28, 0x44, 0x00, 0x00,", - "л":"0x40, 0x3c, 0x04, 0x04, 0x7c, 0x00,", - "м":"0x7c, 0x08, 0x10, 0x08, 0x7c, 0x00,", - "н":"0x7c, 0x10, 0x10, 0x10, 0x7c, 0x00,", - "о":"0x38, 0x44, 0x44, 0x44, 0x38, 0x00,", - "п":"0x7c, 0x04, 0x04, 0x04, 0x7c, 0x00,", - "р":"0x7c, 0x14, 0x14, 0x14, 0x08, 0x00,", - "с":"0x38, 0x44, 0x44, 0x44, 0x20, 0x00,", - "т":"0x04, 0x04, 0x7c, 0x04, 0x04, 0x00,", - "у":"0x4c, 0x50, 0x20, 0x10, 0x0c, 0x00,", - "ф":"0x18, 0x24, 0x7e, 0x24, 0x18, 0x00,", - "х":"0x44, 0x28, 0x10, 0x28, 0x44, 0x00,", - "ц":"0x3c, 0x20, 0x20, 0x3c, 0x60, 0x00,", - "ч":"0x0c, 0x10, 0x10, 0x10, 0x7c, 0x00,", - "ш":"0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x00,", - "щ":"0x3c, 0x20, 0x3c, 0x20, 0x7c, 0x00,", - "ъ":"0x04, 0x7c, 0x50, 0x20, 0x00, 0x00,", - "ы":"0x7c, 0x50, 0x20, 0x00, 0x7c, 0x00,", - "ь":"0x00, 0x7c, 0x50, 0x20, 0x00, 0x00,", - "э":"0x28, 0x44, 0x54, 0x54, 0x28, 0x00,", - "ю":"0x7c, 0x10, 0x38, 0x44, 0x38, 0x00,", - "я":"0x48, 0x34, 0x14, 0x14, 0x7c, 0x00,", - "ѐ":"0x38, 0x55, 0x56, 0x54, 0x08, 0x00,", - "ё":"0x38, 0x55, 0x54, 0x55, 0x08, 0x00,", - "ђ":"0x02, 0x3f, 0x12, 0x48, 0x30, 0x00,", - "ѓ":"0x7c, 0x04, 0x06, 0x05, 0x04, 0x00,", - "є":"0x38, 0x54, 0x54, 0x44, 0x28, 0x00,", - "ѕ":"0x08, 0x54, 0x54, 0x54, 0x20, 0x00,", - "і":"0x00, 0x44, 0x7d, 0x40, 0x00, 0x00,", - "ї":"0x00, 0x45, 0x7c, 0x41, 0x00, 0x00,", - "ј":"0x20, 0x40, 0x44, 0x3d, 0x00, 0x00,", - "љ":"0x7c, 0x04, 0x7c, 0x50, 0x20, 0x00,", - "њ":"0x7c, 0x10, 0x7c, 0x50, 0x20, 0x00,", - "ћ":"0x04, 0x7e, 0x14, 0x10, 0x60, 0x00,", - "ќ":"0x7c, 0x12, 0x29, 0x44, 0x00, 0x00,", - "ѝ":"0x7c, 0x21, 0x12, 0x08, 0x7c, 0x00,", - "ў":"0x4c, 0x51, 0x22, 0x11, 0x0c, 0x00,", - "џ":"0x3c, 0x20, 0x60, 0x20, 0x3c, 0x00,", - "Ā":"0x78, 0x15, 0x15, 0x15, 0x78, 0x00,", - "ā":"0x20, 0x55, 0x55, 0x55, 0x78, 0x00,", - "Ă":"0x78, 0x15, 0x16, 0x15, 0x78, 0x00,", - "ă":"0x20, 0x55, 0x56, 0x55, 0x78, 0x00,", - "Ą":"0x7e, 0x09, 0x09, 0x49, 0xbe, 0x00,", - "ą":"0x20, 0x54, 0x54, 0xd4, 0x78, 0x00,", - "Ć":"0x38, 0x44, 0x46, 0x45, 0x28, 0x00,", - "ć":"0x38, 0x44, 0x46, 0x45, 0x20, 0x00,", - "Ĉ":"0x38, 0x46, 0x45, 0x46, 0x28, 0x00,", - "ĉ":"0x38, 0x46, 0x45, 0x46, 0x20, 0x00,", - "Ċ":"0x38, 0x44, 0x45, 0x44, 0x28, 0x00,", - "ċ":"0x38, 0x44, 0x45, 0x44, 0x20, 0x00,", - "Č":"0x38, 0x45, 0x46, 0x45, 0x28, 0x00,", - "č":"0x38, 0x45, 0x46, 0x45, 0x20, 0x00,", - "Ď":"0x7c, 0x45, 0x46, 0x29, 0x10, 0x00,", - "Đ":"0x08, 0x7f, 0x49, 0x22, 0x1c, 0x00,", - "đ":"0x38, 0x44, 0x44, 0x4A, 0x7F, 0x00,", - "Ē":"0x7c, 0x55, 0x55, 0x55, 0x44, 0x00,", - "ē":"0x38, 0x55, 0x55, 0x55, 0x08, 0x00,", - "Ĕ":"0x7c, 0x55, 0x56, 0x55, 0x44, 0x00,", - "ĕ":"0x38, 0x55, 0x56, 0x55, 0x08, 0x00,", - "Ė":"0x7c, 0x54, 0x55, 0x54, 0x44, 0x00,", - "ė":"0x38, 0x54, 0x55, 0x54, 0x08, 0x00,", - "Ę":"0x7f, 0x49, 0x49, 0xc9, 0x41, 0x00,", - "ę":"0x38, 0x54, 0x54, 0xd4, 0x18, 0x00,", - "Ě":"0x7c, 0x55, 0x56, 0x55, 0x44, 0x00,", - "ě":"0x38, 0x55, 0x56, 0x55, 0x08, 0x00,", - "Ĝ":"0x38, 0x46, 0x55, 0x56, 0x70, 0x00,", - "ĝ":"0x08, 0x56, 0x55, 0x56, 0x3c, 0x00,", - "Ğ":"0x38, 0x45, 0x56, 0x55, 0x30, 0x00,", - "ğ":"0x08, 0x55, 0x56, 0x55, 0x3c, 0x00,", - "Ġ":"0x38, 0x44, 0x55, 0x54, 0x30, 0x00,", - "ġ":"0x08, 0x54, 0x55, 0x54, 0x3c, 0x00,", - "Ģ":"0x0e, 0x51, 0x35, 0x15, 0x1c, 0x00,", - "Ĥ":"0x7c, 0x12, 0x11, 0x12, 0x7c, 0x00,", - "ĥ":"0x02, 0x79, 0x22, 0x10, 0x60, 0x00,", - "Ħ":"0x02, 0x7f, 0x0a, 0x7f, 0x02, 0x00,", - "ħ":"0x02, 0x7f, 0x12, 0x08, 0x70, 0x00,", - "Ĩ":"0x4a, 0x49, 0x7a, 0x49, 0x48, 0x00,", - "ĩ":"0x02, 0x49, 0x7a, 0x41, 0x00, 0x00,", - "Ī":"0x44, 0x45, 0x7d, 0x45, 0x44, 0x00,", - "ī":"0x00, 0x45, 0x7d, 0x41, 0x00, 0x00,", - "Ĭ":"0x44, 0x45, 0x7e, 0x45, 0x44, 0x00,", - "ĭ":"0x00, 0x45, 0x7e, 0x41, 0x00, 0x00,", - "Į":"0x00, 0x41, 0x7f, 0xc1, 0x00, 0x00,", - "į":"0x00, 0x44, 0x7d, 0xc0, 0x00, 0x00,", - "İ":"0x44, 0x44, 0x7d, 0x44, 0x44, 0x00,", - "ı":"0x00, 0x44, 0x7c, 0x40, 0x00, 0x00,", - "ij":"0x44, 0x7d, 0x40, 0x44, 0x3d, 0x00,", - "Ĵ":"0x20, 0x40, 0x46, 0x3d, 0x06, 0x00,", - "ĵ":"0x00, 0x20, 0x46, 0x3d, 0x02, 0x00,", - "Ķ":"0x1f, 0x44, 0x2a, 0x11, 0x00, 0x00,", - "ķ":"0x1f, 0x44, 0x2a, 0x11, 0x00, 0x00,", - "ĸ":"0x7c, 0x10, 0x28, 0x44, 0x00, 0x00,", - "Ĺ":"0x7c, 0x40, 0x42, 0x41, 0x40, 0x00,", - "ĺ":"0x00, 0x44, 0x7e, 0x41, 0x00, 0x00,", - "Ļ":"0x1f, 0x50, 0x30, 0x10, 0x10, 0x00,", - "ļ":"0x00, 0x51, 0x3f, 0x10, 0x00, 0x00,", - "ľ":"0x00, 0x41, 0x7f, 0x40, 0x03, 0x00,", - "Ŀ":"0x7f, 0x40, 0x40, 0x48, 0x40, 0x00,", - "ŀ":"0x00, 0x41, 0x7f, 0x40, 0x08, 0x00,", - "Ł":"0x10, 0x7F, 0x48, 0x44, 0x40, 0x00,", - "ł":"0x00, 0x49, 0x7F, 0x44, 0x00, 0x00,", - "Ń":"0x7c, 0x08, 0x12, 0x21, 0x7c, 0x00,", - "ń":"0x7c, 0x08, 0x06, 0x05, 0x78, 0x00,", - "Ņ":"0x1f, 0x42, 0x24, 0x08, 0x1f, 0x00,", - "ņ":"0x1f, 0x42, 0x21, 0x01, 0x1e, 0x00,", - "Ň":"0x7c, 0x09, 0x12, 0x21, 0x7c, 0x00,", - "ň":"0x7c, 0x09, 0x06, 0x05, 0x78, 0x00,", - "Ō":"0x38, 0x45, 0x45, 0x45, 0x38, 0x00,", - "ō":"0x38, 0x45, 0x45, 0x45, 0x38, 0x00,", - "Ŏ":"0x38, 0x45, 0x46, 0x45, 0x38, 0x00,", - "ŏ":"0x38, 0x45, 0x46, 0x45, 0x38, 0x00,", - "Œ":"0x3e, 0x41, 0x7f, 0x49, 0x49, 0x00,", - "œ":"0x38, 0x44, 0x7c, 0x54, 0x58, 0x00,", - "Ŕ":"0x7c, 0x14, 0x16, 0x15, 0x68, 0x00,", - "ŕ":"0x7c, 0x08, 0x06, 0x05, 0x08, 0x00,", - "Ŗ":"0x1f, 0x45, 0x25, 0x05, 0x1a, 0x00,", - "ŗ":"0x1f, 0x42, 0x21, 0x01, 0x02, 0x00,", - "Ř":"0x7c, 0x15, 0x16, 0x15, 0x68, 0x00,", - "ř":"0x7c, 0x09, 0x06, 0x05, 0x08, 0x00,", - "Ś":"0x08, 0x54, 0x56, 0x55, 0x20, 0x00,", - "ś":"0x48, 0x54, 0x56, 0x55, 0x24, 0x00,", - "Ŝ":"0x08, 0x56, 0x55, 0x56, 0x20, 0x00,", - "ŝ":"0x48, 0x56, 0x55, 0x56, 0x24, 0x00,", - "Ş":"0x02, 0x55, 0x35, 0x15, 0x08, 0x00,", - "ş":"0x12, 0x55, 0x35, 0x15, 0x09, 0x00,", - "Š":"0x08, 0x55, 0x56, 0x55, 0x20, 0x00,", - "š":"0x48, 0x55, 0x56, 0x55, 0x24, 0x00,", - "Ţ":"0x01, 0x41, 0x3f, 0x01, 0x01, 0x00,", - "ţ":"0x02, 0x4f, 0x32, 0x10, 0x08, 0x00,", - "Ť":"0x04, 0x05, 0x7e, 0x05, 0x04, 0x00,", - "ť":"0x04, 0x3e, 0x44, 0x40, 0x23, 0x00,", - "Ŧ":"0x01, 0x09, 0x7f, 0x09, 0x01, 0x00,", - "ŧ":"0x14, 0x3e, 0x54, 0x40, 0x20, 0x00,", - "Ū":"0x3c, 0x41, 0x41, 0x41, 0x3c, 0x00,", - "ū":"0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", - "Ŭ":"0x3c, 0x41, 0x42, 0x41, 0x3c, 0x00,", - "ŭ":"0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", - "Ů":"0x3c, 0x40, 0x41, 0x40, 0x3c, 0x00,", - "ů":"0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", - "Ŵ":"0x3c, 0x42, 0x39, 0x42, 0x3c, 0x00,", - "ŵ":"0x3c, 0x42, 0x31, 0x42, 0x3c, 0x00,", - "Ŷ":"0x04, 0x0a, 0x71, 0x0a, 0x04, 0x00,", - "ŷ":"0x04, 0x4a, 0x31, 0x12, 0x0c, 0x00,", - "Ÿ":"0x04, 0x09, 0x70, 0x09, 0x04, 0x00,", - "Ź":"0x44, 0x64, 0x56, 0x4d, 0x44, 0x00,", - "ź":"0x44, 0x64, 0x56, 0x4d, 0x44, 0x00,", - "Ż":"0x44, 0x64, 0x55, 0x4c, 0x44, 0x00,", - "ż":"0x44, 0x64, 0x55, 0x4c, 0x44, 0x00,", - "Ž":"0x44, 0x65, 0x56, 0x4d, 0x44, 0x00,", - "ž":"0x44, 0x65, 0x56, 0x4d, 0x44, 0x00,", - "ſ":"0x00, 0x04, 0x7e, 0x01, 0x01, 0x00,", - } - return font + font = { + " ": "0x00, 0x00, 0x00, 0x00, 0x00, 0x00,", + "!": "0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,", + '"': "0x00, 0x07, 0x00, 0x07, 0x00, 0x00,", + "#": "0x14, 0x7f, 0x14, 0x7f, 0x14, 0x00,", + "$": "0x24, 0x2a, 0x7f, 0x2a, 0x12, 0x00,", + "%": "0x23, 0x13, 0x08, 0x64, 0x62, 0x00,", + "&": "0x36, 0x49, 0x56, 0x20, 0x58, 0x00,", + "'": "0x00, 0x05, 0x03, 0x00, 0x00, 0x00,", + "(": "0x00, 0x1c, 0x22, 0x41, 0x00, 0x00,", + ")": "0x00, 0x41, 0x22, 0x1c, 0x00, 0x00,", + "*": "0x14, 0x08, 0x3e, 0x08, 0x14, 0x00,", + "+": "0x08, 0x08, 0x3e, 0x08, 0x08, 0x00,", + ",": "0x00, 0x50, 0x30, 0x00, 0x00, 0x00,", + "-": "0x08, 0x08, 0x08, 0x08, 0x08, 0x00,", + ".": "0x00, 0x60, 0x60, 0x00, 0x00, 0x00,", + "/": "0x20, 0x10, 0x08, 0x04, 0x02, 0x00,", + "0": "0x3e, 0x51, 0x49, 0x45, 0x3e, 0x00,", + "1": "0x00, 0x42, 0x7f, 0x40, 0x00, 0x00,", + "2": "0x42, 0x61, 0x51, 0x49, 0x46, 0x00,", + "3": "0x21, 0x41, 0x45, 0x4b, 0x31, 0x00,", + "4": "0x18, 0x14, 0x12, 0x7f, 0x10, 0x00,", + "5": "0x27, 0x45, 0x45, 0x45, 0x39, 0x00,", + "6": "0x3c, 0x4a, 0x49, 0x49, 0x30, 0x00,", + "7": "0x01, 0x71, 0x09, 0x05, 0x03, 0x00,", + "8": "0x36, 0x49, 0x49, 0x49, 0x36, 0x00,", + "9": "0x06, 0x49, 0x49, 0x29, 0x1e, 0x00,", + ":": "0x00, 0x36, 0x36, 0x00, 0x00, 0x00,", + ";": "0x00, 0x56, 0x36, 0x00, 0x00, 0x00,", + "<": "0x08, 0x14, 0x22, 0x41, 0x00, 0x00,", + "=": "0x14, 0x14, 0x14, 0x14, 0x14, 0x00,", + ">": "0x00, 0x41, 0x22, 0x14, 0x08, 0x00,", + "?": "0x02, 0x01, 0x51, 0x09, 0x06, 0x00,", + "@": "0x32, 0x49, 0x79, 0x41, 0x3e, 0x00,", + "A": "0x7e, 0x09, 0x09, 0x09, 0x7e, 0x00,", + "B": "0x7f, 0x49, 0x49, 0x49, 0x36, 0x00,", + "C": "0x3e, 0x41, 0x41, 0x41, 0x22, 0x00,", + "D": "0x7f, 0x41, 0x41, 0x22, 0x1c, 0x00,", + "E": "0x7f, 0x49, 0x49, 0x49, 0x41, 0x00,", + "F": "0x7f, 0x09, 0x09, 0x09, 0x01, 0x00,", + "G": "0x3e, 0x41, 0x41, 0x49, 0x7a, 0x00,", + "H": "0x7f, 0x08, 0x08, 0x08, 0x7f, 0x00,", + "I": "0x00, 0x41, 0x7f, 0x41, 0x00, 0x00,", + "J": "0x20, 0x40, 0x41, 0x3f, 0x01, 0x00,", + "K": "0x7f, 0x08, 0x14, 0x22, 0x41, 0x00,", + "L": "0x7f, 0x40, 0x40, 0x40, 0x40, 0x00,", + "M": "0x7f, 0x02, 0x0c, 0x02, 0x7f, 0x00,", + "N": "0x7f, 0x04, 0x08, 0x10, 0x7f, 0x00,", + "O": "0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00,", + "P": "0x7f, 0x09, 0x09, 0x09, 0x06, 0x00,", + "Q": "0x3e, 0x41, 0x51, 0x21, 0x5e, 0x00,", + "R": "0x7f, 0x09, 0x19, 0x29, 0x46, 0x00,", + "S": "0x26, 0x49, 0x49, 0x49, 0x32, 0x00,", + "T": "0x01, 0x01, 0x7f, 0x01, 0x01, 0x00,", + "U": "0x3f, 0x40, 0x40, 0x40, 0x3f, 0x00,", + "V": "0x1f, 0x20, 0x40, 0x20, 0x1f, 0x00,", + "W": "0x3f, 0x40, 0x38, 0x40, 0x3f, 0x00,", + "X": "0x63, 0x14, 0x08, 0x14, 0x63, 0x00,", + "Y": "0x07, 0x08, 0x70, 0x08, 0x07, 0x00,", + "Z": "0x61, 0x51, 0x49, 0x45, 0x43, 0x00,", + "[": "0x00, 0x7f, 0x41, 0x41, 0x00, 0x00,", + "\\": "0x02, 0x04, 0x08, 0x10, 0x20, 0x00,", + "]": "0x00, 0x41, 0x41, 0x7f, 0x00, 0x00,", + "^": "0x04, 0x02, 0x01, 0x02, 0x04, 0x00,", + "_": "0x40, 0x40, 0x40, 0x40, 0x40, 0x00,", + "`": "0x00, 0x03, 0x05, 0x00, 0x00, 0x00,", + "a": "0x20, 0x54, 0x54, 0x54, 0x78, 0x00,", + "b": "0x7f, 0x48, 0x44, 0x44, 0x38, 0x00,", + "c": "0x38, 0x44, 0x44, 0x44, 0x20, 0x00,", + "d": "0x38, 0x44, 0x44, 0x48, 0x7f, 0x00,", + "e": "0x38, 0x54, 0x54, 0x54, 0x18, 0x00,", + "f": "0x00, 0x04, 0x7e, 0x05, 0x01, 0x00,", + "g": "0x08, 0x54, 0x54, 0x54, 0x3c, 0x00,", + "h": "0x7f, 0x08, 0x04, 0x04, 0x78, 0x00,", + "i": "0x00, 0x44, 0x7d, 0x40, 0x00, 0x00,", + "j": "0x20, 0x40, 0x44, 0x3d, 0x00, 0x00,", + "k": "0x00, 0x7f, 0x10, 0x28, 0x44, 0x00,", + "l": "0x00, 0x41, 0x7f, 0x40, 0x00, 0x00,", + "m": "0x7c, 0x04, 0x78, 0x04, 0x78, 0x00,", + "n": "0x7c, 0x08, 0x04, 0x04, 0x78, 0x00,", + "o": "0x38, 0x44, 0x44, 0x44, 0x38, 0x00,", + "p": "0x7c, 0x14, 0x14, 0x14, 0x08, 0x00,", + "q": "0x08, 0x14, 0x14, 0x14, 0x7c, 0x00,", + "r": "0x7c, 0x08, 0x04, 0x04, 0x08, 0x00,", + "s": "0x48, 0x54, 0x54, 0x54, 0x24, 0x00,", + "t": "0x04, 0x3e, 0x44, 0x40, 0x20, 0x00,", + "u": "0x3c, 0x40, 0x40, 0x20, 0x7c, 0x00,", + "v": "0x0c, 0x30, 0x40, 0x30, 0x0c, 0x00,", + "w": "0x3c, 0x40, 0x30, 0x40, 0x3c, 0x00,", + "x": "0x44, 0x24, 0x38, 0x48, 0x44, 0x00,", + "y": "0x44, 0x48, 0x30, 0x10, 0x0c, 0x00,", + "z": "0x44, 0x64, 0x54, 0x4c, 0x44, 0x00,", + "{": "0x08, 0x36, 0x41, 0x00, 0x00, 0x00,", + "|": "0x00, 0x00, 0x77, 0x00, 0x00, 0x00,", + "}": "0x00, 0x00, 0x41, 0x36, 0x08, 0x00,", + "~": "0x02, 0x01, 0x02, 0x04, 0x02, 0x00,", + "^": "0x04, 0x02, 0x01, 0x02, 0x04, 0x00,", + "¡": "0x00, 0x00, 0x79, 0x00, 0x00, 0x00,", + "¢": "0x1c, 0x22, 0x7f, 0x22, 0x10, 0x00,", + "£": "0x50, 0x7e, 0x51, 0x41, 0x42, 0x00,", + "¤": "0x22, 0x1c, 0x14, 0x1c, 0x22, 0x00,", + "¥": "0x15, 0x16, 0x7c, 0x16, 0x15, 0x00,", + "¦": "0x00, 0x00, 0x77, 0x00, 0x00, 0x00,", + "§": "0x4a, 0x55, 0x55, 0x55, 0x29, 0x00,", + "¨": "0x00, 0x01, 0x00, 0x01, 0x00, 0x00,", + "©": "0x00, 0x18, 0x24, 0x24, 0x00, 0x00,", + "«": "0x08, 0x14, 0x00, 0x08, 0x14, 0x00,", + "¬": "0x08, 0x08, 0x08, 0x08, 0x38, 0x00,", + "­": "0x08, 0x08, 0x08, 0x08, 0x08, 0x00,", + "¯": "0x00, 0x01, 0x01, 0x01, 0x00, 0x00,", + "°": "0x00, 0x00, 0x07, 0x05, 0x07, 0x00,", + "±": "0x44, 0x44, 0x5f, 0x44, 0x44, 0x00,", + "²": "0x1d, 0x15, 0x17, 0x00, 0x00, 0x00,", + "³": "0x15, 0x15, 0x1f, 0x00, 0x00, 0x00,", + "´": "0x00, 0x04, 0x02, 0x01, 0x00, 0x00,", + "µ": "0x7c, 0x10, 0x10, 0x0c, 0x10, 0x00,", + "¶": "0x02, 0x07, 0x7f, 0x01, 0x7f, 0x00,", + "·": "0x00, 0x00, 0x08, 0x00, 0x00, 0x00,", + "¸": "0x00, 0x40, 0x60, 0x00, 0x00, 0x00,", + "¹": "0x12, 0x1f, 0x10, 0x00, 0x00, 0x00,", + "º": "0x07, 0x05, 0x07, 0x00, 0x00, 0x00,", + "»": "0x14, 0x08, 0x00, 0x14, 0x08, 0x00,", + "¼": "0x21, 0x17, 0x38, 0x24, 0x72, 0x00,", + "½": "0x21, 0x17, 0x78, 0x54, 0x5e, 0x00,", + "¿": "0x30, 0x48, 0x45, 0x40, 0x20, 0x00,", + "À": "0x78, 0x15, 0x16, 0x14, 0x78, 0x00,", + "Á": "0x78, 0x14, 0x16, 0x15, 0x78, 0x00,", + "Â": "0x78, 0x16, 0x15, 0x16, 0x78, 0x00,", + "Ã": "0x7a, 0x29, 0x2a, 0x79, 0x00, 0x00,", + "Ä": "0x78, 0x15, 0x14, 0x15, 0x78, 0x00,", + "Å": "0x78, 0x14, 0x15, 0x14, 0x78, 0x00,", + "Æ": "0x7e, 0x09, 0x7f, 0x49, 0x49, 0x00,", + "Ç": "0x0e, 0x51, 0x71, 0x11, 0x08, 0x00,", + "È": "0x7c, 0x55, 0x56, 0x44, 0x44, 0x00,", + "É": "0x7c, 0x54, 0x56, 0x45, 0x44, 0x00,", + "Ê": "0x7c, 0x56, 0x55, 0x46, 0x44, 0x00,", + "Ë": "0x7c, 0x55, 0x54, 0x45, 0x44, 0x00,", + "Ì": "0x00, 0x49, 0x7a, 0x48, 0x00, 0x00,", + "Í": "0x00, 0x48, 0x7a, 0x49, 0x00, 0x00,", + "Î": "0x00, 0x4a, 0x79, 0x4a, 0x00, 0x00,", + "Ï": "0x44, 0x45, 0x7c, 0x45, 0x44, 0x00,", + "Ð": "0x08, 0x7f, 0x49, 0x22, 0x1c, 0x00,", + "Ñ": "0x7a, 0x11, 0x22, 0x79, 0x00, 0x00,", + "Ò": "0x38, 0x45, 0x46, 0x44, 0x38, 0x00,", + "Ó": "0x38, 0x44, 0x46, 0x45, 0x38, 0x00,", + "Ô": "0x38, 0x46, 0x45, 0x46, 0x38, 0x00,", + "Õ": "0x32, 0x49, 0x4a, 0x31, 0x00, 0x00,", + "Ö": "0x38, 0x45, 0x44, 0x45, 0x38, 0x00,", + "ő": "0x38, 0x45, 0x44, 0x45, 0x38, 0x00,", + "×": "0x22, 0x14, 0x08, 0x14, 0x22, 0x00,", + "Ø": "0x58, 0x24, 0x54, 0x48, 0x34, 0x00,", + "Ù": "0x38, 0x41, 0x42, 0x40, 0x38, 0x00,", + "Ú": "0x38, 0x40, 0x42, 0x41, 0x38, 0x00,", + "Û": "0x38, 0x42, 0x41, 0x42, 0x38, 0x00,", + "Ü": "0x3c, 0x41, 0x40, 0x41, 0x3c, 0x00,", + "Ý": "0x04, 0x08, 0x72, 0x09, 0x04, 0x00,", + "Þ": "0x7f, 0x22, 0x22, 0x22, 0x1c, 0x00,", + "ß": "0x7e, 0x11, 0x25, 0x25, 0x1a, 0x00,", + "à": "0x20, 0x55, 0x56, 0x54, 0x78, 0x00,", + "á": "0x20, 0x54, 0x56, 0x55, 0x78, 0x00,", + "â": "0x20, 0x56, 0x55, 0x56, 0x78, 0x00,", + "ã": "0x22, 0x55, 0x56, 0x55, 0x78, 0x00,", + "ä": "0x20, 0x55, 0x54, 0x55, 0x78, 0x00,", + "å": "0x20, 0x54, 0x55, 0x54, 0x78, 0x00,", + "æ": "0x24, 0x54, 0x7c, 0x54, 0x48, 0x00,", + "ç": "0x1c, 0x22, 0x62, 0x22, 0x10, 0x00,", + "è": "0x38, 0x55, 0x56, 0x54, 0x08, 0x00,", + "é": "0x38, 0x54, 0x56, 0x55, 0x08, 0x00,", + "ê": "0x38, 0x56, 0x55, 0x56, 0x08, 0x00,", + "ë": "0x38, 0x55, 0x54, 0x55, 0x08, 0x00,", + "ì": "0x00, 0x45, 0x7e, 0x40, 0x00, 0x00,", + "í": "0x00, 0x44, 0x7e, 0x41, 0x00, 0x00,", + "î": "0x00, 0x46, 0x7d, 0x42, 0x00, 0x00,", + "ï": "0x00, 0x45, 0x7c, 0x41, 0x00, 0x00,", + "ñ": "0x78, 0x12, 0x09, 0x0a, 0x71, 0x00,", + "ò": "0x38, 0x45, 0x46, 0x44, 0x38, 0x00,", + "ó": "0x38, 0x44, 0x46, 0x45, 0x38, 0x00,", + "ô": "0x38, 0x46, 0x45, 0x46, 0x38, 0x00,", + "õ": "0x32, 0x49, 0x4a, 0x31, 0x00, 0x00,", + "ö": "0x38, 0x45, 0x44, 0x45, 0x38, 0x00,", + "÷": "0x08, 0x08, 0x2a, 0x08, 0x08, 0x00,", + "ø": "0x58, 0x24, 0x54, 0x48, 0x34, 0x00,", + "ù": "0x3c, 0x41, 0x42, 0x20, 0x7c, 0x00,", + "ú": "0x3c, 0x40, 0x42, 0x21, 0x7c, 0x00,", + "û": "0x3c, 0x42, 0x41, 0x22, 0x7c, 0x00,", + "ü": "0x3c, 0x41, 0x40, 0x21, 0x5c, 0x00,", + "ű": "0x3c, 0x41, 0x40, 0x21, 0x5c, 0x00,", + "ų": "0x3C, 0x40, 0x40, 0x20, 0xDC, 0x80,", + "ý": "0x44, 0x48, 0x32, 0x11, 0x0c, 0x00,", + "þ": "0x7c, 0x28, 0x28, 0x10, 0x00, 0x00,", + "ÿ": "0x44, 0x49, 0x30, 0x11, 0x0c, 0x00,", + "Ѐ": "0x7c, 0x55, 0x56, 0x44, 0x44, 0x00,", + "Ё": "0x7c, 0x55, 0x54, 0x45, 0x44, 0x00,", + "Ђ": "0x01, 0x7f, 0x09, 0x49, 0x31, 0x00,", + "Ѓ": "0x7c, 0x04, 0x06, 0x05, 0x04, 0x00,", + "Є": "0x3e, 0x49, 0x49, 0x41, 0x00, 0x00,", + "Ѕ": "0x06, 0x49, 0x49, 0x49, 0x30, 0x00,", + "І": "0x41, 0x41, 0x7f, 0x41, 0x41, 0x00,", + "Ї": "0x44, 0x45, 0x7c, 0x45, 0x44, 0x00,", + "Ј": "0x20, 0x40, 0x41, 0x3f, 0x01, 0x00,", + "Љ": "0x7f, 0x01, 0x7f, 0x48, 0x30, 0x00,", + "Њ": "0x7f, 0x08, 0x7f, 0x48, 0x30, 0x00,", + "Ћ": "0x01, 0x01, 0x7f, 0x09, 0x71, 0x00,", + "Ќ": "0x7c, 0x12, 0x29, 0x44, 0x00, 0x00,", + "Ѝ": "0x7c, 0x21, 0x12, 0x08, 0x7c, 0x00,", + "Ў": "0x44, 0x49, 0x32, 0x09, 0x04, 0x00,", + "Џ": "0x3f, 0x20, 0x60, 0x20, 0x3f, 0x00,", + "А": "0x7e, 0x09, 0x09, 0x09, 0x7e, 0x00,", + "Б": "0x7f, 0x49, 0x49, 0x49, 0x31, 0x00,", + "В": "0x7f, 0x49, 0x49, 0x49, 0x36, 0x00,", + "Г": "0x7f, 0x01, 0x01, 0x01, 0x01, 0x00,", + "Д": "0x60, 0x3f, 0x21, 0x3f, 0x60, 0x00,", + "Е": "0x7f, 0x49, 0x49, 0x49, 0x41, 0x00,", + "Ж": "0x77, 0x08, 0x7f, 0x08, 0x77, 0x00,", + "З": "0x00, 0x41, 0x49, 0x49, 0x36, 0x00,", + "И": "0x7f, 0x10, 0x08, 0x04, 0x7f, 0x00,", + "Й": "0x7c, 0x21, 0x12, 0x09, 0x7c, 0x00,", + "К": "0x7f, 0x08, 0x14, 0x22, 0x41, 0x00,", + "Л": "0x40, 0x3f, 0x01, 0x01, 0x7f, 0x00,", + "М": "0x7f, 0x02, 0x04, 0x02, 0x7f, 0x00,", + "Н": "0x7f, 0x08, 0x08, 0x08, 0x7f, 0x00,", + "О": "0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00,", + "П": "0x7f, 0x01, 0x01, 0x01, 0x7f, 0x00,", + "Р": "0x7f, 0x09, 0x09, 0x09, 0x06, 0x00,", + "С": "0x3e, 0x41, 0x41, 0x41, 0x22, 0x00,", + "Т": "0x01, 0x01, 0x7f, 0x01, 0x01, 0x00,", + "У": "0x47, 0x48, 0x30, 0x08, 0x07, 0x00,", + "Ф": "0x0c, 0x12, 0x7f, 0x12, 0x0c, 0x00,", + "Х": "0x63, 0x14, 0x08, 0x14, 0x63, 0x00,", + "Ц": "0x3f, 0x20, 0x20, 0x3f, 0x60, 0x00,", + "Ч": "0x07, 0x08, 0x08, 0x08, 0x7f, 0x00,", + "Ш": "0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x00,", + "Щ": "0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x60,", + "Ъ": "0x01, 0x7f, 0x48, 0x48, 0x30, 0x00,", + "Ы": "0x7f, 0x48, 0x30, 0x00, 0x7f, 0x00,", + "Ь": "0x00, 0x7f, 0x48, 0x48, 0x30, 0x00,", + "Э": "0x22, 0x49, 0x49, 0x2a, 0x1c, 0x00,", + "Ю": "0x7f, 0x08, 0x3e, 0x41, 0x3e, 0x00,", + "Я": "0x46, 0x29, 0x19, 0x09, 0x7f, 0x00,", + "а": "0x20, 0x54, 0x54, 0x54, 0x78, 0x00,", + "б": "0x3c, 0x4a, 0x4a, 0x4a, 0x30, 0x00,", + "в": "0x7c, 0x54, 0x54, 0x54, 0x28, 0x00,", + "г": "0x7c, 0x04, 0x04, 0x04, 0x04, 0x00,", + "д": "0x40, 0x3c, 0x24, 0x3c, 0x60, 0x00,", + "е": "0x38, 0x54, 0x54, 0x54, 0x18, 0x00,", + "ж": "0x6c, 0x10, 0x7c, 0x10, 0x6c, 0x00,", + "з": "0x28, 0x44, 0x54, 0x54, 0x28, 0x00,", + "и": "0x7c, 0x20, 0x10, 0x08, 0x7c, 0x00,", + "й": "0x7c, 0x21, 0x12, 0x09, 0x7c, 0x00,", + "к": "0x7c, 0x10, 0x28, 0x44, 0x00, 0x00,", + "л": "0x40, 0x3c, 0x04, 0x04, 0x7c, 0x00,", + "м": "0x7c, 0x08, 0x10, 0x08, 0x7c, 0x00,", + "н": "0x7c, 0x10, 0x10, 0x10, 0x7c, 0x00,", + "о": "0x38, 0x44, 0x44, 0x44, 0x38, 0x00,", + "п": "0x7c, 0x04, 0x04, 0x04, 0x7c, 0x00,", + "р": "0x7c, 0x14, 0x14, 0x14, 0x08, 0x00,", + "с": "0x38, 0x44, 0x44, 0x44, 0x20, 0x00,", + "т": "0x04, 0x04, 0x7c, 0x04, 0x04, 0x00,", + "у": "0x4c, 0x50, 0x20, 0x10, 0x0c, 0x00,", + "ф": "0x18, 0x24, 0x7e, 0x24, 0x18, 0x00,", + "х": "0x44, 0x28, 0x10, 0x28, 0x44, 0x00,", + "ц": "0x3c, 0x20, 0x20, 0x3c, 0x60, 0x00,", + "ч": "0x0c, 0x10, 0x10, 0x10, 0x7c, 0x00,", + "ш": "0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x00,", + "щ": "0x3c, 0x20, 0x3c, 0x20, 0x7c, 0x00,", + "ъ": "0x04, 0x7c, 0x50, 0x20, 0x00, 0x00,", + "ы": "0x7c, 0x50, 0x20, 0x00, 0x7c, 0x00,", + "ь": "0x00, 0x7c, 0x50, 0x20, 0x00, 0x00,", + "э": "0x28, 0x44, 0x54, 0x54, 0x28, 0x00,", + "ю": "0x7c, 0x10, 0x38, 0x44, 0x38, 0x00,", + "я": "0x48, 0x34, 0x14, 0x14, 0x7c, 0x00,", + "ѐ": "0x38, 0x55, 0x56, 0x54, 0x08, 0x00,", + "ё": "0x38, 0x55, 0x54, 0x55, 0x08, 0x00,", + "ђ": "0x02, 0x3f, 0x12, 0x48, 0x30, 0x00,", + "ѓ": "0x7c, 0x04, 0x06, 0x05, 0x04, 0x00,", + "є": "0x38, 0x54, 0x54, 0x44, 0x28, 0x00,", + "ѕ": "0x08, 0x54, 0x54, 0x54, 0x20, 0x00,", + "і": "0x00, 0x44, 0x7d, 0x40, 0x00, 0x00,", + "ї": "0x00, 0x45, 0x7c, 0x41, 0x00, 0x00,", + "ј": "0x20, 0x40, 0x44, 0x3d, 0x00, 0x00,", + "љ": "0x7c, 0x04, 0x7c, 0x50, 0x20, 0x00,", + "њ": "0x7c, 0x10, 0x7c, 0x50, 0x20, 0x00,", + "ћ": "0x04, 0x7e, 0x14, 0x10, 0x60, 0x00,", + "ќ": "0x7c, 0x12, 0x29, 0x44, 0x00, 0x00,", + "ѝ": "0x7c, 0x21, 0x12, 0x08, 0x7c, 0x00,", + "ў": "0x4c, 0x51, 0x22, 0x11, 0x0c, 0x00,", + "џ": "0x3c, 0x20, 0x60, 0x20, 0x3c, 0x00,", + "Ā": "0x78, 0x15, 0x15, 0x15, 0x78, 0x00,", + "ā": "0x20, 0x55, 0x55, 0x55, 0x78, 0x00,", + "Ă": "0x78, 0x15, 0x16, 0x15, 0x78, 0x00,", + "ă": "0x20, 0x55, 0x56, 0x55, 0x78, 0x00,", + "Ą": "0x7e, 0x09, 0x09, 0x49, 0xbe, 0x00,", + "ą": "0x20, 0x54, 0x54, 0xd4, 0x78, 0x00,", + "Ć": "0x38, 0x44, 0x46, 0x45, 0x28, 0x00,", + "ć": "0x38, 0x44, 0x46, 0x45, 0x20, 0x00,", + "Ĉ": "0x38, 0x46, 0x45, 0x46, 0x28, 0x00,", + "ĉ": "0x38, 0x46, 0x45, 0x46, 0x20, 0x00,", + "Ċ": "0x38, 0x44, 0x45, 0x44, 0x28, 0x00,", + "ċ": "0x38, 0x44, 0x45, 0x44, 0x20, 0x00,", + "Č": "0x38, 0x45, 0x46, 0x45, 0x28, 0x00,", + "č": "0x38, 0x45, 0x46, 0x45, 0x20, 0x00,", + "Ď": "0x7c, 0x45, 0x46, 0x29, 0x10, 0x00,", + "ď": "0x38, 0x44, 0x44, 0x4A, 0x7F, 0x00,", + "Đ": "0x08, 0x7f, 0x49, 0x22, 0x1c, 0x00,", + "đ": "0x38, 0x44, 0x44, 0x4A, 0x7F, 0x00,", + "Ē": "0x7c, 0x55, 0x55, 0x55, 0x44, 0x00,", + "ē": "0x38, 0x55, 0x55, 0x55, 0x08, 0x00,", + "Ĕ": "0x7c, 0x55, 0x56, 0x55, 0x44, 0x00,", + "ĕ": "0x38, 0x55, 0x56, 0x55, 0x08, 0x00,", + "Ė": "0x7c, 0x54, 0x55, 0x54, 0x44, 0x00,", + "ė": "0x38, 0x54, 0x55, 0x54, 0x08, 0x00,", + "Ę": "0x7f, 0x49, 0x49, 0xc9, 0x41, 0x00,", + "ę": "0x38, 0x54, 0x54, 0xd4, 0x18, 0x00,", + "Ě": "0x7c, 0x55, 0x56, 0x55, 0x44, 0x00,", + "ě": "0x38, 0x55, 0x56, 0x55, 0x08, 0x00,", + "Ĝ": "0x38, 0x46, 0x55, 0x56, 0x70, 0x00,", + "ĝ": "0x08, 0x56, 0x55, 0x56, 0x3c, 0x00,", + "Ğ": "0x38, 0x45, 0x56, 0x55, 0x30, 0x00,", + "ğ": "0x08, 0x55, 0x56, 0x55, 0x3c, 0x00,", + "Ġ": "0x38, 0x44, 0x55, 0x54, 0x30, 0x00,", + "ġ": "0x08, 0x54, 0x55, 0x54, 0x3c, 0x00,", + "Ģ": "0x0e, 0x51, 0x35, 0x15, 0x1c, 0x00,", + "Ĥ": "0x7c, 0x12, 0x11, 0x12, 0x7c, 0x00,", + "ĥ": "0x02, 0x79, 0x22, 0x10, 0x60, 0x00,", + "Ħ": "0x02, 0x7f, 0x0a, 0x7f, 0x02, 0x00,", + "ħ": "0x02, 0x7f, 0x12, 0x08, 0x70, 0x00,", + "Ĩ": "0x4a, 0x49, 0x7a, 0x49, 0x48, 0x00,", + "ĩ": "0x02, 0x49, 0x7a, 0x41, 0x00, 0x00,", + "Ī": "0x44, 0x45, 0x7d, 0x45, 0x44, 0x00,", + "ī": "0x00, 0x45, 0x7d, 0x41, 0x00, 0x00,", + "Ĭ": "0x44, 0x45, 0x7e, 0x45, 0x44, 0x00,", + "ĭ": "0x00, 0x45, 0x7e, 0x41, 0x00, 0x00,", + "Į": "0x00, 0x41, 0x7f, 0xc1, 0x00, 0x00,", + "į": "0x00, 0x44, 0x7d, 0xc0, 0x00, 0x00,", + "İ": "0x44, 0x44, 0x7d, 0x44, 0x44, 0x00,", + "ı": "0x00, 0x44, 0x7c, 0x40, 0x00, 0x00,", + "ij": "0x44, 0x7d, 0x40, 0x44, 0x3d, 0x00,", + "Ĵ": "0x20, 0x40, 0x46, 0x3d, 0x06, 0x00,", + "ĵ": "0x00, 0x20, 0x46, 0x3d, 0x02, 0x00,", + "Ķ": "0x1f, 0x44, 0x2a, 0x11, 0x00, 0x00,", + "ķ": "0x1f, 0x44, 0x2a, 0x11, 0x00, 0x00,", + "ĸ": "0x7c, 0x10, 0x28, 0x44, 0x00, 0x00,", + "Ĺ": "0x7c, 0x40, 0x42, 0x41, 0x40, 0x00,", + "Ľ": "0x7c, 0x40, 0x42, 0x41, 0x40, 0x00,", + "ĺ": "0x00, 0x44, 0x7e, 0x41, 0x00, 0x00,", + "Ļ": "0x1f, 0x50, 0x30, 0x10, 0x10, 0x00,", + "ļ": "0x00, 0x51, 0x3f, 0x10, 0x00, 0x00,", + "ľ": "0x00, 0x41, 0x7f, 0x40, 0x03, 0x00,", + "Ŀ": "0x7f, 0x40, 0x40, 0x48, 0x40, 0x00,", + "ŀ": "0x00, 0x41, 0x7f, 0x40, 0x08, 0x00,", + "Ł": "0x10, 0x7F, 0x48, 0x44, 0x40, 0x00,", + "ł": "0x00, 0x49, 0x7F, 0x44, 0x00, 0x00,", + "Ń": "0x7c, 0x08, 0x12, 0x21, 0x7c, 0x00,", + "ń": "0x7c, 0x08, 0x06, 0x05, 0x78, 0x00,", + "Ņ": "0x1f, 0x42, 0x24, 0x08, 0x1f, 0x00,", + "ņ": "0x1f, 0x42, 0x21, 0x01, 0x1e, 0x00,", + "Ň": "0x7c, 0x09, 0x12, 0x21, 0x7c, 0x00,", + "ň": "0x7c, 0x09, 0x06, 0x05, 0x78, 0x00,", + "Ō": "0x38, 0x45, 0x45, 0x45, 0x38, 0x00,", + "ō": "0x38, 0x45, 0x45, 0x45, 0x38, 0x00,", + "Ŏ": "0x38, 0x45, 0x46, 0x45, 0x38, 0x00,", + "ŏ": "0x38, 0x45, 0x46, 0x45, 0x38, 0x00,", + "Œ": "0x3e, 0x41, 0x7f, 0x49, 0x49, 0x00,", + "œ": "0x38, 0x44, 0x7c, 0x54, 0x58, 0x00,", + "Ŕ": "0x7c, 0x14, 0x16, 0x15, 0x68, 0x00,", + "ŕ": "0x7c, 0x08, 0x06, 0x05, 0x08, 0x00,", + "Ŗ": "0x1f, 0x45, 0x25, 0x05, 0x1a, 0x00,", + "ŗ": "0x1f, 0x42, 0x21, 0x01, 0x02, 0x00,", + "Ř": "0x7c, 0x15, 0x16, 0x15, 0x68, 0x00,", + "ř": "0x7c, 0x09, 0x06, 0x05, 0x08, 0x00,", + "Ś": "0x08, 0x54, 0x56, 0x55, 0x20, 0x00,", + "ś": "0x48, 0x54, 0x56, 0x55, 0x24, 0x00,", + "Ŝ": "0x08, 0x56, 0x55, 0x56, 0x20, 0x00,", + "ŝ": "0x48, 0x56, 0x55, 0x56, 0x24, 0x00,", + "Ş": "0x02, 0x55, 0x35, 0x15, 0x08, 0x00,", + "ş": "0x12, 0x55, 0x35, 0x15, 0x09, 0x00,", + "Š": "0x08, 0x55, 0x56, 0x55, 0x20, 0x00,", + "š": "0x48, 0x55, 0x56, 0x55, 0x24, 0x00,", + "Ţ": "0x01, 0x41, 0x3f, 0x01, 0x01, 0x00,", + "ţ": "0x02, 0x4f, 0x32, 0x10, 0x08, 0x00,", + "Ť": "0x04, 0x05, 0x7e, 0x05, 0x04, 0x00,", + "ť": "0x04, 0x3e, 0x44, 0x40, 0x23, 0x00,", + "Ŧ": "0x01, 0x09, 0x7f, 0x09, 0x01, 0x00,", + "ŧ": "0x14, 0x3e, 0x54, 0x40, 0x20, 0x00,", + "Ū": "0x3c, 0x41, 0x41, 0x41, 0x3c, 0x00,", + "ū": "0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", + "Ŭ": "0x3c, 0x41, 0x42, 0x41, 0x3c, 0x00,", + "ŭ": "0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", + "Ů": "0x3c, 0x40, 0x41, 0x40, 0x3c, 0x00,", + "ů": "0x3c, 0x41, 0x41, 0x21, 0x7c, 0x00,", + "Ŵ": "0x3c, 0x42, 0x39, 0x42, 0x3c, 0x00,", + "ŵ": "0x3c, 0x42, 0x31, 0x42, 0x3c, 0x00,", + "Ŷ": "0x04, 0x0a, 0x71, 0x0a, 0x04, 0x00,", + "ŷ": "0x04, 0x4a, 0x31, 0x12, 0x0c, 0x00,", + "Ÿ": "0x04, 0x09, 0x70, 0x09, 0x04, 0x00,", + "Ź": "0x44, 0x64, 0x56, 0x4d, 0x44, 0x00,", + "ź": "0x44, 0x64, 0x56, 0x4d, 0x44, 0x00,", + "Ż": "0x44, 0x64, 0x55, 0x4c, 0x44, 0x00,", + "ż": "0x44, 0x64, 0x55, 0x4c, 0x44, 0x00,", + "Ž": "0x44, 0x65, 0x56, 0x4d, 0x44, 0x00,", + "ž": "0x44, 0x65, 0x56, 0x4d, 0x44, 0x00,", + "ſ": "0x00, 0x04, 0x7e, 0x01, 0x01, 0x00,", + } + return font From b1f89d74b2ec02834978e7088999f9857bf7143e Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Wed, 30 Dec 2020 11:22:34 +1100 Subject: [PATCH 27/29] Add TS80 lookup --- .../TS100/Core/Drivers/TipThermoModel.cpp | 66 ++++++++++++++++++- workspace/TS100/configuration.h | 13 ++-- 2 files changed, 73 insertions(+), 6 deletions(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 473cd60a..567f67d1 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -48,6 +48,7 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC) { else valueuV = 0; } +#ifndef TEMP_uV_LOOKUP_TS80 // Bias removal (Compensating for a temperature related non-linearity // This uses the target temperature for the tip to calculate a compensation value for temperature related bias // This is not entirely ideal as this means we will be wrong on heat up, but will settle to the correct value @@ -61,6 +62,7 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC) { valueuV -= compensation; } } +#endif return valueuV; } @@ -83,7 +85,7 @@ uint32_t TipThermoModel::convertTipRawADCToDegF(uint16_t rawADC) { int32_t LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x) { return y1 + (((((x - x1) * 1000) / (x2 - x1)) * (y2 - y1))) / 1000; } - +#ifdef TEMP_uV_LOOKUP_HAKKO const uint16_t uVtoDegC[] = { // // 0, 0, // @@ -139,11 +141,71 @@ const uint16_t uVtoDegC[] = { // 10649, 500, // }; +#endif + +#ifdef TEMP_uV_LOOKUP_TS80 + +const uint16_t uVtoDegC[] = { // + // + + 2337 , 0, // + 3008 , 10, // + 3693 , 20, // + 4390 , 30, // + 5101 , 40, // + 5825 , 50, // + 6562 , 60, // + 7312 , 70, // + 8076 , 80, // + 8852 , 90, // + 9642 , 100, // + 10445 , 110, // + 11261 , 120, // + 12090 , 130, // + 12932 , 140, // + 13787 , 150, // + 14656 , 160, // + 15537 , 170, // + 16432 , 180, // + 17340 , 190, // + 18261 , 200, // + 19195 , 210, // + 20143 , 220, // + 21103 , 230, // + 22077 , 240, // + 23063 , 250, // + 24063 , 260, // + 25076 , 270, // + 26102 , 280, // + 27142 , 290, // + 28194 , 300, // + 29260 , 310, // + 30339 , 320, // + 31430 , 330, // + 32535 , 340, // + 33654 , 350, // + 34785 , 360, // + 35929 , 370, // + 37087 , 380, // + 38258 , 390, // + 39441 , 400, // + 40638 , 410, // + 41849 , 420, // + 43072 , 430, // + 44308 , 440, // + 45558 , 450, // + 46820 , 460, // + 48096 , 470, // + 49385 , 480, // + 50687 , 490, // + 52003 , 500, // + }; +#endif uint32_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { if (tipuVDelta) { int noItems = sizeof(uVtoDegC) / (2 * sizeof(uint16_t)); for (int i = 1; i < (noItems - 1); i++) { - //If current tip temp is less than current lookup, then this current loopup is the higher point to interpolate + //If current tip temp is less than current lookup, then this current lookup is the higher point to interpolate if (tipuVDelta < uVtoDegC[i * 2]) { return LinearInterpolate(uVtoDegC[(i - 1) * 2], uVtoDegC[((i - 1) * 2) + 1], uVtoDegC[i * 2], uVtoDegC[(i * 2) + 1], tipuVDelta); } diff --git a/workspace/TS100/configuration.h b/workspace/TS100/configuration.h index f6dfd544..16b00670 100644 --- a/workspace/TS100/configuration.h +++ b/workspace/TS100/configuration.h @@ -100,20 +100,22 @@ #define OP_AMP_Rf_TS80 180 * 1000 // 180 Kilo-ohms -> From schematic, R6 #define OP_AMP_Rin_TS80 2000 // 2.0 Kilo-ohms -> From schematic, R3 -#define OP_AMP_GAIN_STAGE_TS80 (1 + (OP_AMP_Rf_TS80 / OP_AMP_Rin_TS80))*3 -//The *3 here is a fudge factor that I dont like, but havent tracked down root cause _yet_ +#define OP_AMP_GAIN_STAGE_TS80 (1 + (OP_AMP_Rf_TS80 / OP_AMP_Rin_TS80)) + + //Deriving the Voltage div: // Vin_max = (3.3*(r1+r2))/(r2) //vdiv = (32768*4)/(vin_max*10) #ifdef MODEL_TS100 #define VOLTAGE_DIV 467 // 467 - Default divider from schematic -#define CALIBRATION_OFFSET 1200 // 900 - Default adc offset in uV +#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV #define PID_POWER_LIMIT 70 // Sets the max pwm power limit #define POWER_LIMIT 0 // 0 watts default limit #define MAX_POWER_LIMIT 65 // #define POWER_LIMIT_STEPS 5 // #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100 +#define TEMP_uV_LOOKUP_HAKKO #endif #ifdef MODEL_Pinecil @@ -124,6 +126,7 @@ #define MAX_POWER_LIMIT 65 // #define POWER_LIMIT_STEPS 5 // #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100 +#define TEMP_uV_LOOKUP_HAKKO #endif #ifdef MODEL_TS80 @@ -134,16 +137,18 @@ #define MAX_POWER_LIMIT 30 // #define POWER_LIMIT_STEPS 2 #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80 +#define TEMP_uV_LOOKUP_TS80 #endif #ifdef MODEL_TS80P #define VOLTAGE_DIV 650 // Default for TS80P with slightly different resistors #define PID_POWER_LIMIT 35 // Sets the max pwm power limit -#define CALIBRATION_OFFSET 900 // the adc offset in uV +#define CALIBRATION_OFFSET 0 // the adc offset in uV #define POWER_LIMIT 30 // 30 watts default power limit #define MAX_POWER_LIMIT 35 // #define POWER_LIMIT_STEPS 2 #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80 +#define TEMP_uV_LOOKUP_TS80 #endif #ifdef MODEL_TS100 From 21e3bab8d9e3b9ead3c3a990a2594d49049f2948 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Wed, 30 Dec 2020 13:55:43 +1100 Subject: [PATCH 28/29] Recompute uV values for TS100 tips --- .../TS100/Core/Drivers/TipThermoModel.cpp | 116 ++++++++---------- workspace/TS100/configuration.h | 2 +- 2 files changed, 52 insertions(+), 66 deletions(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 567f67d1..2d3dc794 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -48,21 +48,7 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC) { else valueuV = 0; } -#ifndef TEMP_uV_LOOKUP_TS80 - // Bias removal (Compensating for a temperature related non-linearity - // This uses the target temperature for the tip to calculate a compensation value for temperature related bias - // This is not entirely ideal as this means we will be wrong on heat up, but will settle to the correct value - // This will cause us to underread on the heatup until we reach the target temp - // Compensation (uV)== ((((80+150*(target_temp_c_x10-1000)/3000)*vddRailmVX10)/4096)*100)/GAIN - // Reordered with Wolframalpha - if (currentTempTargetDegC > 0) { - uint32_t compensation = (20625 * ((currentTempTargetDegC * 10) + 600)) / 512; - compensation /= OP_AMP_GAIN_STAGE; - if (valueuV > compensation) { - valueuV -= compensation; - } - } -#endif + return valueuV; } @@ -89,56 +75,56 @@ int32_t LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_ const uint16_t uVtoDegC[] = { // // 0, 0, // - 175, 10, // - 381, 20, // - 587, 30, // - 804, 40, // - 1005, 50, // - 1007, 60, // - 1107, 70, // - 1310, 80, // - 1522, 90, // - 1731, 100, // - 1939, 110, // - 2079, 120, // - 2265, 130, // - 2470, 140, // - 2676, 150, // - 2899, 160, // - 3081, 170, // - 3186, 180, // - 3422, 190, // - 3622, 200, // - 3830, 210, // - 4044, 220, // - 4400, 230, // - 4691, 240, // - 4989, 250, // - 5289, 260, // - 5583, 270, // - 5879, 280, // - 6075, 290, // - 6332, 300, // - 6521, 310, // - 6724, 320, // - 6929, 330, // - 7132, 340, // - 7356, 350, // - 7561, 360, // - 7774, 370, // - 7992, 380, // - 8200, 390, // - 8410, 400, // - 8626, 410, // - 8849, 420, // - 9060, 430, // - 9271, 440, // - 9531, 450, // - 9748, 460, // - 10210, 470, // - 10219, 480, // - 10429, 490, // - 10649, 500, // + 266, 10, // + 522, 20, // + 770, 30, // + 1010, 40, // + 1244, 50, // + 1473, 60, // + 1697, 70, // + 1917, 80, // + 2135, 90, // + 2351, 100, // + 2566, 110, // + 2780, 120, // + 2994, 130, // + 3209, 140, // + 3426, 150, // + 3644, 160, // + 3865, 170, // + 4088, 180, // + 4314, 190, // + 4544, 200, // + 4777, 210, // + 5014, 220, // + 5255, 230, // + 5500, 240, // + 5750, 250, // + 6003, 260, // + 6261, 270, // + 6523, 280, // + 6789, 290, // + 7059, 300, // + 7332, 310, // + 7609, 320, // + 7889, 330, // + 8171, 340, // + 8456, 350, // + 8742, 360, // + 9030, 370, // + 9319, 380, // + 9607, 390, // + 9896, 400, // + 10183, 410, // + 10468, 420, // + 10750, 430, // + 11029, 440, // + 11304, 450, // + 11573, 460, // + 11835, 470, // + 12091, 480, // + 12337, 490, // + 12575, 500, // }; #endif diff --git a/workspace/TS100/configuration.h b/workspace/TS100/configuration.h index 16b00670..35248f4c 100644 --- a/workspace/TS100/configuration.h +++ b/workspace/TS100/configuration.h @@ -152,7 +152,7 @@ #endif #ifdef MODEL_TS100 -const int32_t tipMass = 45; // X10 watts to raise 1 deg C in 1 second +const int32_t tipMass = 65; // X10 watts to raise 1 deg C in 1 second const uint8_t tipResistance = 75; //x10 ohms, 7.5 typical for ts100 tips #endif From f8d3aa1a097f0331148a64056949dab75c37ddb2 Mon Sep 17 00:00:00 2001 From: "Ben V. Brown" Date: Wed, 30 Dec 2020 19:31:01 +1100 Subject: [PATCH 29/29] New TS80 Curve --- .../TS100/Core/Drivers/TipThermoModel.cpp | 105 +++++++++--------- workspace/TS100/configuration.h | 2 +- 2 files changed, 53 insertions(+), 54 deletions(-) diff --git a/workspace/TS100/Core/Drivers/TipThermoModel.cpp b/workspace/TS100/Core/Drivers/TipThermoModel.cpp index 2d3dc794..5264130d 100755 --- a/workspace/TS100/Core/Drivers/TipThermoModel.cpp +++ b/workspace/TS100/Core/Drivers/TipThermoModel.cpp @@ -67,7 +67,7 @@ uint32_t TipThermoModel::convertTipRawADCToDegF(uint16_t rawADC) { // [x1, y1] = point 1 // [x2, y2] = point 2 // x = input value -// output is x's extrapolated y value +// output is x's interpolated y value int32_t LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x) { return y1 + (((((x - x1) * 1000) / (x2 - x1)) * (y2 - y1))) / 1000; } @@ -133,58 +133,57 @@ const uint16_t uVtoDegC[] = { // const uint16_t uVtoDegC[] = { // // - - 2337 , 0, // - 3008 , 10, // - 3693 , 20, // - 4390 , 30, // - 5101 , 40, // - 5825 , 50, // - 6562 , 60, // - 7312 , 70, // - 8076 , 80, // - 8852 , 90, // - 9642 , 100, // - 10445 , 110, // - 11261 , 120, // - 12090 , 130, // - 12932 , 140, // - 13787 , 150, // - 14656 , 160, // - 15537 , 170, // - 16432 , 180, // - 17340 , 190, // - 18261 , 200, // - 19195 , 210, // - 20143 , 220, // - 21103 , 230, // - 22077 , 240, // - 23063 , 250, // - 24063 , 260, // - 25076 , 270, // - 26102 , 280, // - 27142 , 290, // - 28194 , 300, // - 29260 , 310, // - 30339 , 320, // - 31430 , 330, // - 32535 , 340, // - 33654 , 350, // - 34785 , 360, // - 35929 , 370, // - 37087 , 380, // - 38258 , 390, // - 39441 , 400, // - 40638 , 410, // - 41849 , 420, // - 43072 , 430, // - 44308 , 440, // - 45558 , 450, // - 46820 , 460, // - 48096 , 470, // - 49385 , 480, // - 50687 , 490, // - 52003 , 500, // + 530 , 0, // + 1282 , 10, // + 2034 , 20, // + 2786 , 30, // + 3538 , 40, // + 4290 , 50, // + 5043 , 60, // + 5795 , 70, // + 6547 , 80, // + 7299 , 90, // + 8051 , 100, // + 8803 , 110, // + 9555 , 120, // + 10308 , 130, // + 11060 , 140, // + 11812 , 150, // + 12564 , 160, // + 13316 , 170, // + 14068 , 180, // + 14820 , 190, // + 15573 , 200, // + 16325 , 210, // + 17077 , 220, // + 17829 , 230, // + 18581 , 240, // + 19333 , 250, // + 20085 , 260, // + 20838 , 270, // + 21590 , 280, // + 22342 , 290, // + 23094 , 300, // + 23846 , 310, // + 24598 , 320, // + 25350 , 330, // + 26103 , 340, // + 26855 , 350, // + 27607 , 360, // + 28359 , 370, // + 29111 , 380, // + 29863 , 390, // + 30615 , 400, // + 31368 , 410, // + 32120 , 420, // + 32872 , 430, // + 33624 , 440, // + 34376 , 450, // + 35128 , 460, // + 35880 , 470, // + 36632 , 480, // + 37385 , 490, // + 38137 , 500, // }; #endif uint32_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { diff --git a/workspace/TS100/configuration.h b/workspace/TS100/configuration.h index 35248f4c..50d9c2cc 100644 --- a/workspace/TS100/configuration.h +++ b/workspace/TS100/configuration.h @@ -143,7 +143,7 @@ #ifdef MODEL_TS80P #define VOLTAGE_DIV 650 // Default for TS80P with slightly different resistors #define PID_POWER_LIMIT 35 // Sets the max pwm power limit -#define CALIBRATION_OFFSET 0 // the adc offset in uV +#define CALIBRATION_OFFSET 1500 // the adc offset in uV #define POWER_LIMIT 30 // 30 watts default power limit #define MAX_POWER_LIMIT 35 // #define POWER_LIMIT_STEPS 2