19 Commits

Author SHA1 Message Date
8fbf06c08b Ignore .stm32env 2024-12-21 16:20:22 +01:00
738e15e963 APPS calibration screen 2024-12-21 16:19:44 +01:00
afd4688c97 Increase TX queue size 2024-06-12 21:05:46 +02:00
4c2c277fef Endurance LEDs 2024-06-12 21:05:13 +02:00
0076387f21 Driver wishlist 2024-06-12 21:04:22 +02:00
f0db650c30 Add progress bar to endurance view 2024-06-11 22:34:36 +02:00
cb2f55be1b Move R2D/precharge bar to custom container 2024-06-11 22:17:21 +02:00
5a66f9bc54 Endurance view 2024-06-10 22:09:21 +02:00
e23389a0b9 Fix stupid fucking bug frfr this time 2024-06-10 20:12:15 +02:00
b53bd2baf7 Fix stupid fucking bug with simulator compilation 2024-06-10 17:39:48 +02:00
1d56e5a865 Fix stupid fucking bug with generating code 2024-06-10 16:29:01 +02:00
3f7d87ec0a Update can halal link 2024-06-06 16:58:19 +02:00
1ab75a8605 Fix submodule 2024-02-15 00:35:31 +01:00
b8d8f1721b Update can halal link 2024-02-15 00:33:38 +01:00
8905d173b3 Use only left button for screen cycling 2023-11-18 14:52:53 +01:00
b8d8d70bfb Fix simulator compilation 2023-11-18 14:49:55 +01:00
fd4ee51fd6 Add AS OK field to AMI 2023-11-18 14:48:51 +01:00
698c6a24c4 [WIP] SDC screen
This hasn't really been tested yet and sometimes looks weird.
2023-11-18 14:48:13 +01:00
61656942f9 Return to driver view from mission select 2023-08-04 13:15:50 +02:00
90 changed files with 4664 additions and 488 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ TouchGFX/build
/TouchGFX/*_backup.touchgfx
/steering-wheel.ioc_bkp
/STM32Make.make
/.stm32env

5
.gitmodules vendored
View File

@ -1,3 +1,8 @@
[submodule "Core/Lib/FT_CAN_AL"]
path = Core/Lib/can-halal
url = ssh://git@git.fasttube.de:313/FaSTTUBe/FT_CAN_AL.git
[submodule "Core/Lib/can-halal/"]
url = ssh://git@git.fasttube.de:313/FaSTTUBe/can-halal.git
[submodule "Core/Lib/can-halal"]
path = Core/Lib/can-halal
url = ssh://git@git.fasttube.de:313/FaSTTUBe/can-halal.git

View File

@ -10,20 +10,39 @@ extern "C" {
#include "util.h"
CountedEnum(ParamType, size_t, PF_BBAL, PF_SLIPREF, PF_MUMAX, PF_ASRP, PF_ASRON,
PF_ASRI, PF_PLIM);
CountedEnum(ParamType, size_t, PF_BBAL, PF_PLIM, PF_TORQUE, PF_SLIM,
PF_APPS0_MIN, PF_APPS0_MAX, PF_APPS1_MIN, PF_APPS1_MAX, PF_TV,
PF_TC, PF_TC_SLIPREF, PF_TC_MUMAX, PF_TC_P, PF_TC_I, PF_DRS_CLOSED,
PF_DRS_OPEN, PF_MAP);
typedef struct {
float bbal;
float slipref;
float mumax;
unsigned asrp;
unsigned asri;
unsigned asron;
unsigned plim;
typedef union {
struct {
float bbal;
float plim;
float torque;
float slim;
float apps0_min;
float apps0_max;
float apps1_min;
float apps1_max;
int tv;
int tc;
float tc_slipref;
float tc_mumax;
float tc_p;
float tc_i;
float drs_closed;
float drs_open;
int map;
};
// TODO: Use ParamType_COUNT somehow?
float valuesFloat[17];
int valuesInt[17];
} Params;
extern Params params;
// TODO: Use ParamType_COUNT somehow?
extern float param_steps[17];
void params_init();
void params_inc(ParamType param);

View File

@ -21,6 +21,8 @@ void vehicle_thread_entry(ULONG hfdcan_addr);
void vehicle_broadcast_buttons(GPIO_PinState *button_states);
void vehicle_broadcast_wishlist();
#endif // SIMULATOR
#ifdef __cplusplus

View File

@ -7,6 +7,7 @@ extern "C" {
#include "params.h"
#include "stw_defines.h"
#include <stdbool.h>
#include <stdint.h>
#define NUM_CONES 12
@ -110,6 +111,10 @@ typedef struct {
Mission active_mission;
int sdc_closed;
int pdu_sdc_active;
int imd_ok;
bool drs_active;
int sdcl_state[3];
R2DProgress r2d_progress;
struct {
@ -145,6 +150,7 @@ typedef struct {
IniChkState ini_chk_state;
unsigned lap_count;
unsigned lap_count_endu;
float lap_last;
float lap_best;
@ -157,6 +163,12 @@ typedef struct {
float lv_bat_voltage;
int soc_lv;
float bat_delta_last;
float bat_delta_overall;
uint8_t power_limit;
uint8_t speed_limit;
float ts_current;
float ts_voltage_bat;
float ts_voltage_veh;
@ -172,16 +184,34 @@ typedef struct {
uint32_t last_jetson_msg;
uint32_t last_epsc_msg;
int as_ok;
float desired_angle;
float measured_angle;
float desired_speed;
float apps0_min;
float apps0_max;
float apps0_volt;
float apps0_out;
float apps1_min;
float apps1_max;
float apps1_volt;
float apps1_out;
ConePosition cone_pos[NUM_CONES];
ParamType last_param_confirmed;
} VehicleState;
typedef struct {
bool initialized;
uint8_t power_limit;
uint8_t speed_limit;
} DriverWishlist;
extern VehicleState vehicle_state;
extern DriverWishlist wishlist;
#ifdef __cplusplus
} // extern "C"

View File

@ -80,31 +80,17 @@ void led_thread_entry(ULONG child_thread_stack_addr) {
continue;
}
float speed =
(vehicle_state.speed - LED_SPEED_MIN) / (LED_SPEED_MAX - LED_SPEED_MIN);
float num_leds_exact = speed * N_LEDS;
num_leds_exact = fmin(N_LEDS, fmax(0, num_leds_exact));
int num_leds = num_leds_exact;
float num_leds_frac = num_leds_exact - num_leds;
float hue =
LED_SPEED_HUE_MIN - speed * (LED_SPEED_HUE_MIN - LED_SPEED_HUE_MAX);
hue = fmin(LED_SPEED_HUE_MIN, fmax(LED_SPEED_HUE_MAX, hue));
uint8_t r, g, b;
led_hsv_to_rgb(hue, 1.0f, 1.0f, &r, &g, &b);
// Fully illuminate first n LEDs
for (int i = 0; i < num_leds; i++) {
led_set(i, r, g, b);
for (int i = 0; i <= 3; i++) {
int led_limit = (4 - i) * 3; // 3% per LED
int red = (vehicle_state.bat_delta_last >= led_limit) ? 0xFF : 0;
led_set(i, red, 0, 0);
}
// Partially illuminate n+1th LED
if (num_leds < N_LEDS) {
led_hsv_to_rgb(hue, 1.0f, num_leds_frac, &r, &g, &b);
led_set(num_leds, r, g, b);
}
// Turn off all other LEDs
for (int i = num_leds + 1; i < N_LEDS; i++) {
led_set(i, 0, 0, 0);
int blue = (vehicle_state.drs_active) ? 0xFF : 0;
led_set(4, 0, 0, blue);
for (int i = 5; i <= 9; i++) {
int led_limit = -((i - 4) * 3); // 3% per LED
int green = (vehicle_state.bat_delta_last <= led_limit) ? 0xFF : 0;
led_set(i, 0, green, 0);
}
}
}

View File

@ -329,7 +329,7 @@ static void MX_FDCAN1_Init(void) {
hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
hfdcan1.Init.TxEventsNbr = 0;
hfdcan1.Init.TxBuffersNbr = 0;
hfdcan1.Init.TxFifoQueueElmtsNbr = 1;
hfdcan1.Init.TxFifoQueueElmtsNbr = 32;
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK) {

View File

@ -3,6 +3,75 @@
#include "vehicle.h"
Params params = {0};
static const float param_limits[] = {
[PF_BBAL] = 100.0f,
[PF_PLIM] = 120.0f,
[PF_TORQUE] = 1500.0f,
[PF_SLIM] = 150.0f,
[PF_APPS0_MIN] = 5.0f,
[PF_APPS0_MAX] = 5.0f,
[PF_APPS1_MIN] = 5.0f,
[PF_APPS1_MAX] = 5.0f,
[PF_TV] = 1,
[PF_TC] = 1,
[PF_TC_SLIPREF] = 1.0f,
[PF_TC_MUMAX] = 5.0f,
[PF_TC_P] = 20.0f,
[PF_TC_I] = 20.0f,
[PF_DRS_CLOSED] = 1.0f,
[PF_DRS_OPEN] = 1.0f,
// TODO: counted enum for map?
[PF_MAP] = 7,
};
float param_steps[] = {
[PF_BBAL] = 1,
[PF_PLIM] = 1,
[PF_TORQUE] = 10,
[PF_SLIM] = 1,
[PF_APPS0_MIN] = 0.001f,
[PF_APPS0_MAX] = 0.001f,
[PF_APPS1_MIN] = 0.001f,
[PF_APPS1_MAX] = 0.001f,
[PF_TV] = 1,
[PF_TC] = 1,
[PF_TC_SLIPREF] = 0.01f,
[PF_TC_MUMAX] = 0.1f,
[PF_TC_P] = 0.1f,
[PF_TC_I] = 0.1f,
[PF_DRS_CLOSED] = 0.001f,
[PF_DRS_OPEN] = 0.001f,
[PF_MAP] = 1,
};
static const float param_broadcast_factors[] = {
[PF_BBAL] = 1,
[PF_PLIM] = 1,
[PF_TORQUE] = 1,
[PF_SLIM] = 1,
[PF_APPS0_MIN] = 0.001f,
[PF_APPS0_MAX] = 0.001f,
[PF_APPS1_MIN] = 0.001f,
[PF_APPS1_MAX] = 0.001f,
[PF_TV] = 1,
[PF_TC] = 1,
[PF_TC_SLIPREF] = 0.001f,
[PF_TC_MUMAX] = 0.001f,
[PF_TC_P] = 0.001f,
[PF_TC_I] = 0.001f,
[PF_DRS_CLOSED] = 0.001f,
[PF_DRS_OPEN] = 0.001f,
[PF_MAP] = 1,
};
#ifdef __cplusplus
_Static_assert(sizeof(param_limits) / sizeof(param_limits[0]) ==
ParamType_COUNT,
"Incorrect number of param limits");
_Static_assert(sizeof(param_steps) / sizeof(param_steps[0]) == ParamType_COUNT,
"Incorrect number of param steps");
_Static_assert(sizeof(param_broadcast_factors) /
sizeof(param_broadcast_factors[0]) ==
ParamType_COUNT,
"Incorrect number of param broadcast factors");
#endif
void params_init() {
params.bbal = 50;
@ -11,96 +80,50 @@ void params_init() {
void params_inc(ParamType param) {
switch (param) {
case PF_BBAL:
params.bbal += 0.5f;
if (params.bbal > 100.0f) {
params.bbal = 100.0f;
case PF_TV:
case PF_TC:
case PF_MAP:
params.valuesInt[param] += param_steps[param];
if (params.valuesInt[param] > param_limits[param]) {
params.valuesInt[param] = param_limits[param];
}
break;
case PF_SLIPREF:
params.slipref += 0.01f;
break;
case PF_MUMAX:
params.mumax += 0.1f;
break;
case PF_ASRP:
params.asrp++;
break;
case PF_ASRI:
params.asri++;
break;
case PF_ASRON:
params.asron = 1;
break;
case PF_PLIM:
params.plim = (params.plim < 80) ? params.plim + 1 : 80;
break;
default:
params.valuesFloat[param] += param_steps[param];
if (params.valuesFloat[param] > param_limits[param]) {
params.valuesFloat[param] = param_limits[param];
}
}
}
void params_dec(ParamType param) {
switch (param) {
case PF_BBAL:
params.bbal -= 0.5f;
if (params.bbal < 0.0f) {
params.bbal = 0.0f;
case PF_TV:
case PF_TC:
case PF_MAP:
params.valuesInt[param] -= param_steps[param];
if (params.valuesInt[param] < 0) {
params.valuesInt[param] = 0;
}
break;
case PF_SLIPREF:
if (params.slipref > 0) {
params.slipref -= 0.01f;
default:
params.valuesFloat[param] -= param_steps[param];
if (params.valuesFloat[param] < 0) {
params.valuesFloat[param] = 0;
}
break;
case PF_MUMAX:
if (params.mumax > 0) {
params.mumax -= 0.1f;
}
break;
case PF_ASRP:
if (params.asrp > 0) {
params.asrp--;
}
break;
case PF_ASRI:
if (params.asri > 0) {
params.asri--;
}
break;
case PF_ASRON:
params.asron = 0;
break;
case PF_PLIM:
params.plim = (params.plim > 2) ? params.plim - 1 : 2;
break;
}
}
void params_broadcast(ParamType param) {
int32_t value;
switch (param) {
case PF_BBAL:
value = params.bbal * 10;
break;
case PF_SLIPREF:
value = params.slipref * 100;
break;
case PF_MUMAX:
value = params.mumax * 10;
break;
case PF_ASRP:
value = params.asrp;
break;
case PF_ASRI:
value = params.asri;
break;
case PF_ASRON:
value = params.asron;
break;
case PF_PLIM:
value = params.plim;
case PF_TV:
case PF_TC:
case PF_MAP:
value = params.valuesInt[param] / param_broadcast_factors[param];
break;
default:
return;
value = params.valuesFloat[param] / param_broadcast_factors[param];
}
vehicle_broadcast_param(param, value);
}

View File

@ -36,8 +36,11 @@ void ui_thread_entry(ULONG _) {
button_states[i] = state;
}
}
if ((press_event == 1 || press_event == 2) && button_states[1] &&
button_states[2]) {
// FIXME: The right button doesn't work :(
// if ((press_event == 1 || press_event == 2) && button_states[1] &&
// button_states[2]) {
if (press_event == 1 && button_states[1]) {
tx_event_flags_set(&gui_update_events, GUI_UPDATE_NEXT_SCREEN, TX_OR);
}
vehicle_broadcast_buttons(button_states);

View File

@ -15,6 +15,8 @@
#define CAN_ID_AMS_SLAVE_PANIC 0x9
#define CAN_ID_AMS_STATUS 0xA
#define CAN_ID_AMS_ERROR 0xC
#define CAN_ID_SDCL_TX 0x10
#define CAN_ID_PDU_RESPONSE 0xC9
#define CAN_ID_JETSON_TX 0xE1
#define CAN_ID_ABX_DRIVER 0x101
#define CAN_ID_ABX_TIMINGS 0x102
@ -22,10 +24,14 @@
#define CAN_ID_CS_INTERNAL 0x108
#define CAN_ID_ABX_MISC 0x109
#define CAN_ID_ABX_HYDRAULICS 0x110
#define CAN_ID_ABX_ENDURANCE 0x113
#define CAN_ID_ABX_APPS 0x114
#define CAN_ID_ABX_APPS_LIMITS 0x115
#define CAN_ID_EPSC_OUT 0x321
#define CAN_ID_MISSION_SELECTED 0x400
#define CAN_ID_STW_BUTTONS 0x401
#define CAN_ID_STW_PARAM_SET 0x402
#define CAN_ID_STW_DRIVERWISHLIST 0x403
#define CAN_ID_AS_MISSION_FB 0x410
#define CAN_ID_STW_STATUS 0x412
#define CAN_ID_ABX_PARAM_CONFIRMED 0x413
@ -36,6 +42,11 @@
#define CAN_ID_SHUNT_VOLTAGE2 0x523
#define CAN_AMS_STATUS_VOLTAGE_FACTOR 1e-4
#define CAN_AMS_STATUS_TEMP_FACTOR 0.0625
#define CAN_SDCL_STATE_1_MASK (1 << 1)
#define CAN_SDCL_STATE_2_MASK (1 << 2)
#define CAN_SDCL_STATE_3_MASK (1 << 3)
#define CAN_PDU_RESPONSE_SDC_TX_MASK (1 << 4)
#define CAN_JETSON_TX_AS_OK_MASK (1 << 1)
#define CAN_JETSON_TX_ANGLE_FACTOR 0.00784314f
#define CAN_JETSON_TX_SPEED_FACTOR (0.2 * 3.6)
#define CAN_ABX_DRIVER_SPEED_FACTOR (0.2 * 3.6)
@ -48,18 +59,24 @@
void vehicle_thread_entry(ULONG hfdcan_addr) {
memset(&vehicle_state, 0, sizeof(vehicle_state));
memset(&vehicle_state.cone_pos, 0xFF, sizeof(vehicle_state.cone_pos));
memset(&wishlist, 0, sizeof(wishlist));
ftcan_init((void *)hfdcan_addr);
ftcan_add_filter(CAN_ID_AMS_SLAVE_PANIC, 0x7FF);
ftcan_add_filter(CAN_ID_AMS_STATUS, 0x7FF);
ftcan_add_filter(CAN_ID_AMS_ERROR, 0x7FF);
ftcan_add_filter(CAN_ID_SDCL_TX, 0x7FF);
ftcan_add_filter(CAN_ID_PDU_RESPONSE, 0x7FF);
ftcan_add_filter(CAN_ID_JETSON_TX, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_DRIVER, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_TIMINGS, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_BRAKE_T, 0x7FF);
ftcan_add_filter(CAN_ID_CS_INTERNAL, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_ENDURANCE, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_HYDRAULICS, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_APPS, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_APPS_LIMITS, 0x7FF);
ftcan_add_filter(CAN_ID_EPSC_OUT, 0x7FF);
ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF);
ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF);
@ -71,6 +88,7 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
while (1) {
tx_thread_sleep(10);
vehicle_broadcast_wishlist();
}
}
@ -93,6 +111,17 @@ void vehicle_broadcast_buttons(GPIO_PinState *button_states) {
ftcan_transmit(CAN_ID_STW_BUTTONS, &data, 1);
}
void vehicle_broadcast_wishlist() {
if (!wishlist.initialized) {
return;
}
uint8_t data[2];
data[0] = wishlist.power_limit;
data[1] = wishlist.speed_limit;
ftcan_transmit(CAN_ID_STW_DRIVERWISHLIST, data, 2);
}
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
const uint8_t *ptr;
if ((id & CAN_ID_STW_CONES_MASK) == CAN_ID_STW_CONES_BASE) {
@ -119,16 +148,26 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
ftcan_unmarshal_unsigned(&ptr, 2) * CAN_AMS_STATUS_VOLTAGE_FACTOR;
vehicle_state.max_cell_temp =
ftcan_unmarshal_signed(&ptr, 2) * CAN_AMS_STATUS_TEMP_FACTOR;
vehicle_state.imd_ok = (data[6] >> 7);
// TODO: Separate temperatures for left and right side of battery
vehicle_state.temps.bat_l = vehicle_state.max_cell_temp;
vehicle_state.temps.bat_r = vehicle_state.max_cell_temp;
break;
case CAN_ID_SDCL_TX:
vehicle_state.sdcl_state[0] = data[0] & CAN_SDCL_STATE_1_MASK;
vehicle_state.sdcl_state[1] = data[0] & CAN_SDCL_STATE_2_MASK;
vehicle_state.sdcl_state[2] = data[0] & CAN_SDCL_STATE_3_MASK;
break;
case CAN_ID_PDU_RESPONSE:
vehicle_state.pdu_sdc_active = data[0] & CAN_PDU_RESPONSE_SDC_TX_MASK;
break;
case CAN_ID_AMS_ERROR:
vehicle_state.last_ams_error.kind = data[0];
vehicle_state.last_ams_error.arg = data[1];
break;
case CAN_ID_JETSON_TX:
vehicle_state.last_jetson_msg = HAL_GetTick();
vehicle_state.as_ok = data[0] & CAN_JETSON_TX_AS_OK_MASK;
vehicle_state.desired_speed =
((int8_t)data[1]) * CAN_JETSON_TX_SPEED_FACTOR;
vehicle_state.desired_angle =
@ -147,6 +186,18 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
vehicle_state.hyd_press_b =
((data[1] >> 4) | (data[2] << 4)) * CAN_ABX_DRIVER_PRESS_FACTOR;
break;
case CAN_ID_ABX_ENDURANCE:
vehicle_state.power_limit = data[0];
vehicle_state.speed_limit = data[1];
if (!wishlist.initialized) {
wishlist.initialized = true;
wishlist.power_limit = vehicle_state.power_limit;
wishlist.speed_limit = vehicle_state.speed_limit;
}
vehicle_state.lap_count_endu = data[2];
vehicle_state.bat_delta_overall = ((int8_t)data[3]) * 1.0f;
vehicle_state.bat_delta_last = ((int8_t)data[4]) * 1.0f;
break;
case CAN_ID_ABX_TIMINGS:
vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f;
vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f;
@ -157,6 +208,18 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
vehicle_state.temps.brake_rl = (data[4] | (data[5] << 8)) * 0.01f;
vehicle_state.temps.brake_rr = (data[6] | (data[7] << 8)) * 0.01f;
break;
case CAN_ID_ABX_APPS:
vehicle_state.apps0_volt = (data[0] | (data[1] << 8)) * 0.001f;
vehicle_state.apps1_volt = (data[2] | (data[3] << 8)) * 0.001f;
vehicle_state.apps0_out = (int16_t)((data[4] | (data[5] << 8))) * 0.001f;
vehicle_state.apps1_out = (int16_t)((data[6] | (data[7] << 8))) * 0.001f;
break;
case CAN_ID_ABX_APPS_LIMITS:
vehicle_state.apps0_min = (data[0] | (data[1] << 8)) * 0.001f;
vehicle_state.apps0_max = (data[2] | (data[3] << 8)) * 0.001f;
vehicle_state.apps1_min = (data[4] | (data[5] << 8)) * 0.001f;
vehicle_state.apps1_max = (data[6] | (data[7] << 8)) * 0.001f;
break;
case CAN_ID_CS_INTERNAL:
vehicle_state.temps.inv_l =
(data[0] | (data[1] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
@ -206,6 +269,7 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
vehicle_state.errors.err_res = (data[5] >> 2) & 1;
vehicle_state.errors.err_invl = (data[5] >> 3) & 1;
vehicle_state.errors.err_invr = (data[5] >> 4) & 1;
vehicle_state.drs_active = (data[5] >> 5) & 1;
break;
case CAN_ID_ABX_PARAM_CONFIRMED:
vehicle_state.last_param_confirmed = data[0];

View File

@ -1,6 +1,7 @@
#include "vehicle_state.h"
VehicleState vehicle_state = {0};
VehicleState vehicle_state;
DriverWishlist wishlist;
const char *inichkstate_str(IniChkState state) {
switch (vehicle_state.ini_chk_state) {

View File

@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [4.1.0] date: [Mon Jul 24 18:47:29 CEST 2023]
# File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Wed Jun 12 17:44:56 CEST 2024]
##########################################################################################################################
# ------------------------------------------------
@ -228,7 +228,16 @@ Middlewares/ST/threadx/common/src/txe_timer_delete.c \
Middlewares/ST/threadx/common/src/txe_timer_info_get.c \
TouchGFX/App/app_touchgfx.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c \
TouchGFX/target/TouchGFXHAL.cpp \
TouchGFX/target/STM32TouchController.cpp \
TouchGFX/target/TouchGFXGPIO.cpp \
TouchGFX/target/generated/TouchGFXConfiguration.cpp \
TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp \
TouchGFX/target/generated/STM32DMA.cpp \
TouchGFX/target/generated/OSWrappers.cpp \
Core/Src/sysmem.c \
Core/Src/syscalls.c
# ASM sources
ASM_SOURCES = \

View File

@ -83,6 +83,7 @@ excludes:
- "TouchGFX/Middlewares/ST/touchgfx/{lib,os}/**"
- "Middlewares/ST/touchgfx/framework/source/platform"
- "**/simulator/**"
- TouchGFX/vehicle_state.c
# Include directories (directories containing .h or .hpp files)
# If a CubeMX makefile is present it will automatically include the include directories from that makefile.

View File

@ -8,7 +8,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@ -8,7 +8,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@ -171,6 +171,111 @@
</Text>
</TextGroup>
<TextGroup Id="Unsorted">
<Text Id="__SingleUse_W4YT" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">APPS1</Translation>
</Text>
<Text Id="__SingleUse_SM6H" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_8KB4" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_P4TL" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_CBZ9" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">CUR</Translation>
</Text>
<Text Id="__SingleUse_WQXQ" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">MAX</Translation>
</Text>
<Text Id="__SingleUse_QXG5" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">MIN</Translation>
</Text>
<Text Id="__SingleUse_MBQT" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_978V" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_H8OI" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_6EKV" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">APPS0</Translation>
</Text>
<Text Id="__SingleUse_RK9Z" Alignment="Right" TypographyId="Numbers_Small">
<Translation Language="GB">&lt;&gt;</Translation>
</Text>
<Text Id="__SingleUse_UBFH" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">APPS CALIBRATION</Translation>
</Text>
<Text Id="__SingleUse_6EXA" Alignment="Right" TypographyId="Chinat_Large">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_570K" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">R2D</Translation>
</Text>
<Text Id="__SingleUse_G2S2" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">PRECHARGE</Translation>
</Text>
<Text Id="__SingleUse_B2Q6" Alignment="Right" TypographyId="Numbers">
<Translation Language="GB">&lt;value&gt;°</Translation>
</Text>
<Text Id="__SingleUse_OP6C" Alignment="Right" TypographyId="Numbers">
<Translation Language="GB">&lt;value&gt;%</Translation>
</Text>
<Text Id="__SingleUse_1F9T" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">SPEED</Translation>
</Text>
<Text Id="__SingleUse_QAZ3" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">POWER</Translation>
</Text>
<Text Id="__SingleUse_DONW" Alignment="Center" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_4X8X" Alignment="Center" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_FPXE" Alignment="Right" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;%</Translation>
</Text>
<Text Id="__SingleUse_51AZ" Alignment="Right" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;%</Translation>
</Text>
<Text Id="__SingleUse_DJ62" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">OVERALL BAT</Translation>
</Text>
<Text Id="__SingleUse_5W6Y" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">LAST LAP BAT</Translation>
</Text>
<Text Id="__SingleUse_C17G" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">AS &lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_XFW7" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">&#10;&#10;AMS</Translation>
</Text>
<Text Id="__SingleUse_N50J" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">&#10;&#10;IMD</Translation>
</Text>
<Text Id="__SingleUse_V38H" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">ACC</Translation>
</Text>
<Text Id="__SingleUse_XC1X" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">TSMS</Translation>
</Text>
<Text Id="__SingleUse_KI1B" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">BSPD&#10;HVD</Translation>
</Text>
<Text Id="__SingleUse_QNHI" Alignment="Right" TypographyId="Chinat_Small">
<Translation Language="GB">SDB&#10;RES&#10;SDCL</Translation>
</Text>
<Text Id="__SingleUse_43KA" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">DASH&#10;BOTS&#10;INERTIA</Translation>
</Text>
<Text Id="__SingleUse_YRU7" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">&#10;&#10;PDU</Translation>
</Text>
<Text Id="__SingleUse_E6D7" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">INIT</Translation>
</Text>
@ -234,12 +339,6 @@
<Text Id="__SingleUse_1NKF" Alignment="Center" TypographyId="Chinat_Huge">
<Translation Language="GB"></Translation>
</Text>
<Text Id="__SingleUse_J5UH" Alignment="Right" TypographyId="Chinat_Large">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_NGUK" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">R2D</Translation>
</Text>
<Text Id="__SingleUse_4E84" Alignment="Right" TypographyId="Numbers">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
@ -249,9 +348,6 @@
<Text Id="__SingleUse_RWCE" Alignment="Center" TypographyId="Chinat_Large">
<Translation Language="GB">PARAMETERS</Translation>
</Text>
<Text Id="__SingleUse_HMH2" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">PRECHARGE</Translation>
</Text>
<Text Id="__SingleUse_PHFD" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">&lt;value&gt;%</Translation>
</Text>
@ -277,6 +373,7 @@
<Typography Id="Numbers" Font="lucon.TTF" Size="50" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=". ,-" WildcardCharacterRanges="0-9" />
<Typography Id="Default_Bold" Font="verdanab.ttf" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters="! &quot;" WildcardCharacterRanges="#-~" />
<Typography Id="Numbers_Smaller" Font="lucon.TTF" Size="33" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WildcardCharacterRanges="0-9" />
<Typography Id="Numbers_Small" Font="lucon.TTF" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WildcardCharacterRanges="0-9" />
<Typography Id="Numbers_Small" Font="lucon.TTF" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WidgetWildcardCharacters="-., 0123456789" WildcardCharacterRanges="0-9" />
<Typography Id="Numbers_Huge" Font="lucon.TTF" Size="80" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-+" WildcardCharacterRanges="0-9" />
</Typographies>
</TextDatabase>

View File

@ -6,3 +6,14 @@ touchgfx_path := ../Middlewares/ST/touchgfx
touchgfx_env := C:/TouchGFX/4.22.0/env
# Optional additional compiler flags
user_cflags := -DUSE_BPP=16 -std=gnu++1z -Wno-cast-qual -Wno-missing-declarations -Wno-format-truncation -Wno-unused-variable
# MINGW is annoying and for some reason replaces /z/path with z:/path in
# ADDITIONAL_SOURCES. Since TouchGFXDesigner completely overwrites the generated
# Makefile, we can't fix it there -- but the generated makefile includes this
# file, so we can fix it here.
subst_drivename = $(shell echo $(1) | sed -e 's!^\([a-zA-Z]\):/!/\1/!')
ADDITIONAL_SOURCES := $(foreach src,$(ADDITIONAL_SOURCES),$(call subst_drivename,$(src)))
ifeq ($(UNAME), Linux)
linker_options += -no-pie
endif

View File

@ -1,3 +1,4 @@
10
32
37
46

View File

@ -1,4 +1,5 @@
32
37
44
45
46
@ -13,3 +14,4 @@
56
57
63
176

View File

@ -0,0 +1,17 @@
32
37
43
44
45
46
48
49
50
51
52
53
54
55
56
57
63

View File

@ -1 +1 @@
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4]],"generate_font_format":"0"}
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4],["Numbers_Huge","lucon.TTF",80,4]],"generate_font_format":"0"}

View File

@ -1 +1 @@
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4]],"generate_font_format":"0"}
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4],["Numbers_Huge","lucon.TTF",80,4]],"generate_font_format":"0"}

View File

@ -1,5 +1,6 @@
AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
32
37
44
45
46
@ -14,3 +15,4 @@ AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
56
57
63
176

View File

@ -0,0 +1,18 @@
AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
32
37
43
44
45
46
48
49
50
51
52
53
54
55
56
57
63

View File

@ -21,6 +21,7 @@ struct Typography
static const touchgfx::FontId DEFAULT_BOLD = 5;
static const touchgfx::FontId NUMBERS_SMALLER = 6;
static const touchgfx::FontId NUMBERS_SMALL = 7;
static const touchgfx::FontId NUMBERS_HUGE = 8;
};
struct TypographyFontIndex
@ -33,7 +34,8 @@ struct TypographyFontIndex
static const touchgfx::FontId DEFAULT_BOLD = 5; // verdanab_20_4bpp
static const touchgfx::FontId NUMBERS_SMALLER = 6; // lucon_TTF_33_4bpp
static const touchgfx::FontId NUMBERS_SMALL = 7; // lucon_TTF_20_4bpp
static const uint16_t NUMBER_OF_FONTS = 8;
static const touchgfx::FontId NUMBERS_HUGE = 8; // lucon_TTF_80_4bpp
static const uint16_t NUMBER_OF_FONTS = 9;
};
class ApplicationFontProvider : public touchgfx::FontProvider

View File

@ -33,6 +33,9 @@ touchgfx::Font* ApplicationFontProvider::getFont(touchgfx::FontId typography)
case Typography::NUMBERS_SMALL:
// lucon_TTF_20_4bpp
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[7]);
case Typography::NUMBERS_HUGE:
// lucon_TTF_80_4bpp
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[8]);
default:
return 0;
}

View File

@ -4,6 +4,45 @@ FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_lucon_TTF_50_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
// Unicode: [0x0020]
// (Has no glyph data)
// Unicode: [0x0025]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xBF, 0x00,
0x00, 0x00, 0xB6, 0xFE, 0xAD, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x2E, 0x00,
0x00, 0xD2, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x06, 0x00,
0x20, 0xFE, 0xEF, 0x68, 0xF9, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xAF, 0x00, 0x00,
0xB0, 0xFF, 0x2E, 0x00, 0x50, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0x1E, 0x00, 0x00,
0xF4, 0xFF, 0x06, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x04, 0x00, 0x00,
0xF9, 0xFF, 0x01, 0x00, 0x00, 0xF3, 0xFF, 0x06, 0x00, 0x00, 0x20, 0xFE, 0x9F, 0x00, 0x00, 0x00,
0xFC, 0xCF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0A, 0x00, 0x00, 0xC0, 0xFF, 0x1D, 0x00, 0x00, 0x00,
0xFE, 0xAF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x0B, 0x00, 0x00, 0xF7, 0xFF, 0x03, 0x00, 0x00, 0x00,
0xFE, 0xAF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0C, 0x00, 0x30, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
0xFD, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0A, 0x00, 0xD0, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xEF, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x08, 0x00, 0xF9, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00,
0xF6, 0xFF, 0x03, 0x00, 0x00, 0xF6, 0xFF, 0x04, 0x40, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE1, 0xFF, 0x0B, 0x00, 0x10, 0xFD, 0xCF, 0x00, 0xD1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xAF, 0x02, 0xC3, 0xFF, 0x3F, 0x00, 0xFA, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x50, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0xFC, 0xFF, 0xFF, 0x3B, 0x00, 0xE2, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x20, 0x65, 0x15, 0x00, 0x00, 0xFB, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xCF, 0x00, 0x00, 0x41, 0x56, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0xA2, 0xFF, 0xFF, 0xDF, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x07, 0x30, 0xFE, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xBF, 0x00, 0xE1, 0xFF, 0x4D, 0x21, 0xF9, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x2E, 0x00, 0xFA, 0xEF, 0x02, 0x00, 0xA0, 0xFF, 0x2F, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x05, 0x20, 0xFF, 0x8F, 0x00, 0x00, 0x20, 0xFF, 0x9F, 0x00,
0x00, 0x00, 0x00, 0x10, 0xFE, 0xAF, 0x00, 0x60, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFB, 0xDF, 0x00,
0x00, 0x00, 0x00, 0xA0, 0xFF, 0x1D, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0x04, 0x00, 0x90, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01,
0x00, 0x00, 0x20, 0xFE, 0x9F, 0x00, 0x00, 0x90, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01,
0x00, 0x00, 0xC0, 0xFF, 0x1D, 0x00, 0x00, 0x70, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0x00,
0x00, 0x00, 0xF7, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xFD, 0xBF, 0x00,
0x00, 0x30, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x6F, 0x00,
0x00, 0xD0, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x06, 0x00, 0xD1, 0xFF, 0x0D, 0x00,
0x00, 0xF9, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xAF, 0x87, 0xFE, 0xEF, 0x03, 0x00,
0x40, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00,
0xD1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xDA, 0xEF, 0x7C, 0x01, 0x00, 0x00,
0xFA, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x002C]
0x32, 0x33, 0x33, 0x23, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF,
0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0x9F, 0xF8, 0xFF, 0xFF, 0x8F,
@ -339,5 +378,11 @@ KEEP extern const uint8_t unicodes_lucon_TTF_50_4bpp_0[] FONT_GLYPH_LOCATION_FLA
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x00B0]
0x00, 0x60, 0xEC, 0xCE, 0x05, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xAF, 0x00, 0x80, 0xFF, 0x7D, 0xD7,
0xFF, 0x08, 0xF1, 0xBF, 0x01, 0x10, 0xFC, 0x1F, 0xF5, 0x3F, 0x00, 0x00, 0xF3, 0x4F, 0xF6, 0x0F,
0x00, 0x00, 0xF1, 0x6F, 0xF5, 0x3F, 0x00, 0x00, 0xF3, 0x4F, 0xF1, 0xCF, 0x01, 0x10, 0xFC, 0x1E,
0x80, 0xFF, 0x8D, 0xD8, 0xFF, 0x08, 0x00, 0xFA, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x60, 0xEC, 0xCE,
0x06, 0x00
};

View File

@ -0,0 +1,959 @@
#include <touchgfx/hal/Types.hpp>
FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_lucon_TTF_80_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
// Unicode: [0x0020]
// (Has no glyph data)
// Unicode: [0x0025]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB8, 0xED, 0xDE, 0x6B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x30, 0xFB, 0xFF,
0xFF, 0xFF, 0xFF, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF,
0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x70, 0xFF,
0xFF, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x6E, 0x01, 0x20, 0xF9, 0xFF, 0xFF,
0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x10,
0xFE, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xD1, 0xFF, 0xFF, 0x1D, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x04, 0x00, 0x00,
0x00, 0xE1, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x07, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF,
0x8F, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF,
0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFD, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0xF4,
0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00,
0x00, 0x50, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x4F, 0x00, 0x00,
0x90, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x08, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A,
0x00, 0x10, 0xFE, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0x7F, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x03, 0x00, 0xB0, 0xFF, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0xAF, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF4, 0xFF, 0xFF, 0x7F, 0x01, 0x20, 0xFA, 0xFF, 0xFF, 0x1D, 0x00, 0x20, 0xFE, 0xFF, 0xBF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xDF, 0xFE, 0xFF,
0xFF, 0xEF, 0x03, 0x00, 0xC0, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0x00, 0xF8, 0xFF, 0xFF,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFB, 0xFF, 0xFF,
0xFF, 0xFF, 0x8F, 0x01, 0x00, 0x30, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xC8, 0xFD, 0xDE, 0x6B, 0x02, 0x00, 0x00, 0xD1, 0xFF,
0xFF, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFB, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE2, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x10, 0xA5, 0xEC, 0xDF, 0x9C, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEF, 0x02, 0x00,
0x00, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0xB1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A,
0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xEF, 0xFD, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xDF, 0x01, 0x00, 0xB0, 0xFF, 0xFF, 0xCF, 0x03, 0x00,
0xE5, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0x4F, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x20, 0xFD, 0xFF, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x08, 0x00, 0x10, 0xFE, 0xFF, 0xEF, 0x01,
0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE,
0xFF, 0xCF, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0x3F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF6, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF3,
0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFA, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x05, 0x00, 0x00,
0x00, 0xF6, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x02, 0x00, 0x00,
0x00, 0x00, 0x30, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0x06, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0x1D, 0x00,
0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF,
0xCF, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF,
0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xA0,
0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFE, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE2,
0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x0A, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0xE5, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00,
0x80, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF,
0xEF, 0xED, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00,
0x00, 0x10, 0xFD, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x04, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0x4F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA5, 0xEC, 0xEF, 0x9C, 0x04, 0x00,
0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x88, 0x78, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x002B]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
0xCC, 0xCC, 0xCC, 0xFE, 0xFF, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x9C, 0xFA,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFA, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
// Unicode: [0x002C]
0x75, 0x77, 0x77, 0x77, 0x77, 0x67, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF,
0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x8F, 0x00, 0x00,
0xF0, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x0E,
0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x0A, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0x04, 0x00, 0x80, 0xFF, 0xFF,
0xCF, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0x4F, 0x00, 0xC6, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0xFA, 0xFF,
0xFF, 0x8F, 0x00, 0x00, 0xFA, 0xFF, 0xDF, 0x05, 0x00, 0x00, 0xEA, 0x9C, 0x05, 0x00, 0x00, 0x00,
// Unicode: [0x002D]
0xB9, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
// Unicode: [0x002E]
0x75, 0x77, 0x77, 0x77, 0x77, 0x67, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF,
0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
// Unicode: [0x0030]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xC9, 0xEE, 0xEF, 0xAC, 0x27, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xDB, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0xEF,
0x27, 0x00, 0x00, 0x61, 0xFD, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00,
0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF,
0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF,
0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x05, 0x00,
0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF,
0xFF, 0xFF, 0x0C, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0xFB, 0xFF, 0xFF,
0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0xFE, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA,
0xFF, 0xFF, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x07, 0x70, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x0B, 0xB0, 0xFF, 0xFF, 0xFF,
0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x0E,
0xE0, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
0xFF, 0xFF, 0xFF, 0x2F, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x4F, 0xF3, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x6F, 0xF5, 0xFF, 0xFF, 0xFF,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x8F,
0xF6, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0xFF, 0x9F, 0xF7, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xBF, 0xF8, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xCF, 0xF9, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xCF,
0xF9, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xDF, 0xF9, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xDF,
0xF9, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
0xFF, 0xFF, 0xFF, 0xCF, 0xF8, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xCF, 0xF7, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xAF, 0xF6, 0xFF, 0xFF, 0xFF,
0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x9F,
0xF5, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
0xFF, 0xFF, 0xFF, 0x8F, 0xF3, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x6F, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x4F, 0xD0, 0xFF, 0xFF, 0xFF,
0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x2F,
0xA0, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1,
0xFF, 0xFF, 0xFF, 0x0E, 0x70, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x0A, 0x40, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF,
0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD,
0xFF, 0xFF, 0xEF, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFD, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF,
0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0xEF, 0x27, 0x00, 0x00, 0x61,
0xFD, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCD, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x61, 0xC9, 0xFE, 0xEF, 0xAD, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0031]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x47, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xFD, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51,
0xEA, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xB6, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x72, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0x26, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEF, 0x8B, 0x14, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x69, 0x03, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xB8, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xCB, 0xFF, 0xFF, 0xFF, 0xCF,
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x09, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFC, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0C, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C,
// Unicode: [0x0032]
0x00, 0x00, 0x00, 0x00, 0x10, 0x53, 0x98, 0xBA, 0xAB, 0x89, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x84, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x02,
0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0x7B, 0x24, 0x01, 0x31, 0xB7,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xFF, 0xFF, 0xAE, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0xFF, 0x6D, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x9F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF,
0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF,
0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF4, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0xFF, 0xFF, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x6F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x6F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF,
0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF,
0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF,
0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4,
0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x90, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xEF, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
0xBB, 0xBB, 0xBB, 0xBB, 0x4B, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F,
// Unicode: [0x0033]
0x00, 0x00, 0x10, 0x74, 0xB9, 0xDD, 0xFE, 0xEE, 0xCD, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x84, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x27, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF,
0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x3E, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xCD, 0xED, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x8C, 0x25, 0x00, 0x00, 0x00, 0x73, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xF0, 0xCF, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x91, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xA0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xDF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x9F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF,
0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF,
0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF,
0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5,
0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92,
0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x53, 0xB7,
0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x88, 0x88, 0xA9, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF, 0xFF, 0x4F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFF, 0xFF, 0xFF,
0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF,
0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA,
0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF2, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xFF, 0xFF,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xFF,
0xFF, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF,
0xFF, 0xCF, 0x00, 0x00, 0xFD, 0x6A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xFF, 0xFF,
0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFD, 0xFF, 0xCF, 0x58, 0x02, 0x00, 0x00, 0x20, 0xC6, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xCD, 0xDB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x6B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x74, 0xB9, 0xEC,
0xFE, 0xEF, 0xCE, 0x8A, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0034]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x55, 0x55, 0x35,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xEF, 0xFA, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x6F, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0B,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1,
0xFF, 0xFF, 0xEF, 0x02, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x5F, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xEF, 0x01, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF,
0xFF, 0x5F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE1, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xDF, 0x01,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB,
0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF,
0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE2, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xCF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0xF9, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x5F, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xB7, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
0xBB, 0xBB, 0xBB, 0xBB, 0xFD, 0xFF, 0xFF, 0xEF, 0xBB, 0xBB, 0xBB, 0x4B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0035]
0x40, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x07, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xEF, 0xCE, 0x9B, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x04, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x40, 0xBB, 0xAA, 0xBA, 0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xB7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x0D, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x8F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xCF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x6F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00,
0xE7, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0x00,
0xF7, 0xFF, 0xAE, 0x36, 0x00, 0x00, 0x10, 0xA5, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xDF, 0xCC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00,
0x72, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x63, 0xB9, 0xED, 0xFF, 0xDE, 0x9C, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0036]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xB8, 0xED, 0xFF, 0xDE, 0x9B, 0x36, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xBE, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xBC, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF,
0x0B, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x5A, 0x01, 0x00, 0x00, 0x41,
0xC7, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2B, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x72, 0xFC, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0,
0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x72, 0xDA, 0xFE, 0xDE, 0x8B, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xB4, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xDF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0xA1, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x08,
0x30, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0xFF, 0xFF, 0x07, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x37, 0xFE, 0xFF, 0xFF, 0xBF, 0x89, 0xA9, 0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0x6F, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xD8, 0xFF, 0xFF, 0x6E, 0x01, 0x00, 0x00, 0x40,
0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xAF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0xFA, 0xFF, 0xFF,
0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xEF, 0x01,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0xFF, 0x07, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x0D, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x6F, 0xF7, 0xFF, 0xFF, 0xFF,
0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x9F, 0xF6,
0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xBF, 0xF4, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0xCF, 0xF2, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xDF, 0xC0, 0xFF, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xCF, 0x90, 0xFF,
0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF,
0xBF, 0x60, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xFF, 0xFF, 0x9F, 0x20, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x7F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF3, 0xFF,
0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x0B,
0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF9, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0xB0, 0xFF,
0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0x38, 0x00, 0x00, 0x40, 0xFA, 0xFF, 0xFF, 0xFF, 0x6F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xCB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x95, 0xDB, 0xFE, 0xEF, 0xAC, 0x26, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0037]
0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF,
0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE1, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0x0C, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF,
0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA,
0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF,
0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF6, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x1E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1,
0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF,
0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFA, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0038]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x96, 0xDC, 0xFE, 0xDE, 0xBD, 0x58, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFA, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x02, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C,
0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0x4A, 0x01, 0x00, 0x10, 0xA4, 0xFF, 0xFF,
0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00, 0x00, 0x00,
0x00, 0xD4, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xEF, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF,
0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x08,
0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0xB0, 0xFF,
0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x05, 0x00,
0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF,
0xFF, 0x01, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE1, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x3E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF,
0xFF, 0xFF, 0xEF, 0x04, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00,
0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0xFF, 0x5F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x2B, 0x00, 0x00, 0xC2, 0xFF, 0xFF,
0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x06, 0x40,
0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF, 0xF9, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFF, 0xFF,
0xFF, 0xAE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0xFE, 0xFF, 0xFF, 0xDF, 0x02, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0x00, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x03, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x10, 0xF8, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x10, 0xFD, 0xFF, 0xFF,
0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x60,
0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF,
0xCF, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6,
0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF2, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0xF5, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x0E, 0xFA, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF,
0x0F, 0xFB, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0,
0xFF, 0xFF, 0xFF, 0x0F, 0xFB, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFA, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x0E, 0xF9, 0xFF, 0xFF, 0xFF, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0C, 0xF7, 0xFF, 0xFF,
0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x09,
0xF3, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF,
0xFF, 0xFF, 0x04, 0xD0, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0xEF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x5E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0xF7, 0xFF, 0xFF,
0xFF, 0xFF, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00,
0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x38, 0x00, 0x00, 0x10, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xCC, 0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x28, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x85, 0xDB, 0xFE, 0xEF, 0xCD, 0x7A, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0039]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xA7, 0xEC, 0xFF, 0xDE, 0x7A, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xEF, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xDC, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xEF, 0x28,
0x00, 0x00, 0x51, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0xFF, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFD, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF,
0xEF, 0x01, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF,
0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00,
0x10, 0xFE, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0xB0, 0xFF, 0xFF, 0xFF,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0xE0, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF,
0xFF, 0xFF, 0x1F, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF2, 0xFF, 0xFF, 0xFF,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00,
0xF2, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF,
0xFF, 0xFF, 0xCF, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF,
0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x02,
0xB0, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF,
0xFF, 0xFF, 0xFF, 0x03, 0x70, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x30, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0xFC, 0xFF, 0xFF,
0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04,
0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x05, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xDF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00,
0x00, 0x00, 0x00, 0x00, 0xD3, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0xF8, 0xFF,
0xFF, 0xFF, 0xFF, 0x28, 0x00, 0x00, 0x00, 0x82, 0xFF, 0xFF, 0x9F, 0xFB, 0xFF, 0xFF, 0xFF, 0x04,
0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAC, 0x88, 0xCA, 0xFF, 0xFF, 0xFF, 0x1C, 0xFB,
0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00,
0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xE8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x02, 0x00, 0x10, 0xFF,
0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x95, 0xEC, 0xFF, 0xCE, 0x59, 0x01,
0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF,
0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF,
0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xB0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0xEF, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFD, 0xFF, 0xFF, 0xFF, 0x6F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xAE, 0x36, 0x00, 0x00, 0x00, 0x62, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xBC,
0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0xD9, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x97, 0xDB, 0xFE, 0xEF, 0xAD, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x003F]
0x00, 0x00, 0x00, 0x00, 0x42, 0x75, 0x98, 0xA9, 0xAA, 0x9A, 0x68, 0x25, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x97, 0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE,
0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB5, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4D, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0xF9,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xDF, 0x7A, 0x35, 0x12, 0x00, 0x11, 0x52, 0xA7, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xF9, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xF9, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0xF9, 0xFF, 0xFF, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0xF9, 0xFF,
0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0x03, 0xF9, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF,
0xFF, 0xFF, 0xFF, 0x05, 0xF9, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x06, 0xB7, 0xBB, 0xBB, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xFB, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xD2, 0xFF, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xAF, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF,
0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF,
0xFF, 0xFF, 0xDF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB,
0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xA0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xCC, 0xCC, 0xCC, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x99, 0x99, 0x99, 0x99,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00
};

View File

@ -0,0 +1,6 @@
#include <touchgfx/Font.hpp>
FONT_KERNING_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::KerningNode kerning_lucon_TTF_80_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = {
{ 0, 0 }
};

View File

@ -5,20 +5,22 @@
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_50_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
{ 0, 0x0020, 0, 0, 0, 0, 30, 0, 0, 0x00 },
{ 0, 0x002C, 8, 16, 8, 11, 30, 0, 0, 0x00 },
{ 64, 0x002D, 20, 4, 17, 5, 30, 0, 0, 0x00 },
{ 104, 0x002E, 8, 8, 8, 11, 30, 0, 0, 0x00 },
{ 136, 0x0030, 26, 38, 37, 2, 30, 0, 0, 0x00 },
{ 630, 0x0031, 25, 37, 37, 4, 30, 0, 0, 0x00 },
{ 1111, 0x0032, 21, 37, 37, 4, 30, 0, 0, 0x00 },
{ 1518, 0x0033, 21, 38, 37, 5, 30, 0, 0, 0x00 },
{ 1936, 0x0034, 26, 36, 36, 2, 30, 0, 0, 0x00 },
{ 2404, 0x0035, 20, 37, 36, 6, 30, 0, 0, 0x00 },
{ 2774, 0x0036, 24, 38, 37, 4, 30, 0, 0, 0x00 },
{ 3230, 0x0037, 23, 36, 36, 4, 30, 0, 0, 0x00 },
{ 3662, 0x0038, 24, 38, 37, 3, 30, 0, 0, 0x00 },
{ 4118, 0x0039, 25, 38, 37, 3, 30, 0, 0, 0x00 },
{ 4612, 0x003F, 23, 37, 37, 4, 30, 0, 0, 0x00 }
{ 0, 0x0025, 31, 38, 37, 0, 30, 0, 0, 0x00 },
{ 608, 0x002C, 8, 16, 8, 11, 30, 0, 0, 0x00 },
{ 672, 0x002D, 20, 4, 17, 5, 30, 0, 0, 0x00 },
{ 712, 0x002E, 8, 8, 8, 11, 30, 0, 0, 0x00 },
{ 744, 0x0030, 26, 38, 37, 2, 30, 0, 0, 0x00 },
{ 1238, 0x0031, 25, 37, 37, 4, 30, 0, 0, 0x00 },
{ 1719, 0x0032, 21, 37, 37, 4, 30, 0, 0, 0x00 },
{ 2126, 0x0033, 21, 38, 37, 5, 30, 0, 0, 0x00 },
{ 2544, 0x0034, 26, 36, 36, 2, 30, 0, 0, 0x00 },
{ 3012, 0x0035, 20, 37, 36, 6, 30, 0, 0, 0x00 },
{ 3382, 0x0036, 24, 38, 37, 4, 30, 0, 0, 0x00 },
{ 3838, 0x0037, 23, 36, 36, 4, 30, 0, 0, 0x00 },
{ 4270, 0x0038, 24, 38, 37, 3, 30, 0, 0, 0x00 },
{ 4726, 0x0039, 25, 38, 37, 3, 30, 0, 0, 0x00 },
{ 5220, 0x003F, 23, 37, 37, 4, 30, 0, 0, 0x00 },
{ 5664, 0x00B0, 12, 11, 37, 9, 30, 0, 0, 0x00 }
};
// lucon_TTF_50_4bpp
@ -36,6 +38,6 @@ touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp();
touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp()
{
static touchgfx::GeneratedFont lucon_TTF_50_4bpp(glyphs_lucon_TTF_50_4bpp, 15, 58, 50, 0, 0, 4, 1, 0, 0, unicodes_lucon_TTF_50_4bpp, kerning_lucon_TTF_50_4bpp, 63, 0, 0, 0);
static touchgfx::GeneratedFont lucon_TTF_50_4bpp(glyphs_lucon_TTF_50_4bpp, 17, 58, 50, 0, 0, 4, 1, 0, 1, unicodes_lucon_TTF_50_4bpp, kerning_lucon_TTF_50_4bpp, 63, 0, 0, 0);
return lucon_TTF_50_4bpp;
}

View File

@ -0,0 +1,43 @@
// Autogenerated, do not edit
#include <fonts/GeneratedFont.hpp>
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_80_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
{ 0, 0x0020, 0, 0, 0, 0, 48, 0, 0, 0x00 },
{ 0, 0x0025, 49, 61, 59, 0, 48, 0, 0, 0x00 },
{ 1525, 0x002B, 42, 42, 42, 3, 48, 0, 0, 0x00 },
{ 2407, 0x002C, 12, 24, 12, 18, 48, 0, 0, 0x00 },
{ 2551, 0x002D, 32, 6, 27, 8, 48, 0, 0, 0x00 },
{ 2647, 0x002E, 12, 12, 12, 18, 48, 0, 0, 0x00 },
{ 2719, 0x0030, 40, 60, 59, 4, 48, 0, 0, 0x00 },
{ 3919, 0x0031, 39, 59, 59, 7, 48, 0, 0, 0x00 },
{ 5099, 0x0032, 34, 59, 59, 6, 48, 0, 0, 0x00 },
{ 6102, 0x0033, 33, 60, 59, 9, 48, 0, 0, 0x00 },
{ 7122, 0x0034, 40, 58, 58, 4, 48, 0, 0, 0x00 },
{ 8282, 0x0035, 31, 59, 58, 10, 48, 0, 0, 0x00 },
{ 9226, 0x0036, 38, 60, 59, 6, 48, 0, 0, 0x00 },
{ 10366, 0x0037, 36, 58, 58, 7, 48, 0, 0, 0x00 },
{ 11410, 0x0038, 37, 60, 59, 6, 48, 0, 0, 0x00 },
{ 12550, 0x0039, 39, 60, 59, 5, 48, 0, 0, 0x00 },
{ 13750, 0x003F, 37, 59, 59, 6, 48, 0, 0, 0x00 }
};
// lucon_TTF_80_4bpp
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_80_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE;
FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_lucon_TTF_80_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE;
FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t* const unicodes_lucon_TTF_80_4bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = {
unicodes_lucon_TTF_80_4bpp_0
};
FONT_KERNING_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::KerningNode kerning_lucon_TTF_80_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE;
touchgfx::GeneratedFont& getFont_lucon_TTF_80_4bpp();
touchgfx::GeneratedFont& getFont_lucon_TTF_80_4bpp()
{
static touchgfx::GeneratedFont lucon_TTF_80_4bpp(glyphs_lucon_TTF_80_4bpp, 17, 92, 80, 0, 0, 4, 1, 0, 1, unicodes_lucon_TTF_80_4bpp, kerning_lucon_TTF_80_4bpp, 63, 0, 0, 0);
return lucon_TTF_80_4bpp;
}

View File

@ -67,6 +67,7 @@ protected:
touchgfx::Shape<3> ft;
touchgfx::PainterRGB565 ftPainter;
touchgfx::Container init;
touchgfx::TextAreaWithOneWildcard asOK;
touchgfx::TextArea textArea8;
touchgfx::TextArea textArea7;
touchgfx::TextAreaWithOneWildcard pressRear;

View File

@ -0,0 +1,99 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef APPSVIEWBASE_HPP
#define APPSVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/apps_screen/APPSPresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/graph/GraphWrapAndOverwrite.hpp>
#include <touchgfx/widgets/graph/GraphElements.hpp>
#include <touchgfx/widgets/graph/GraphLabels.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
class APPSViewBase : public touchgfx::View<APPSPresenter>
{
public:
APPSViewBase();
virtual ~APPSViewBase();
virtual void setupScreen();
virtual void handleKeyEvent(uint8_t key);
/*
* Virtual Action Handlers
*/
virtual void selectPrevField()
{
// Override and implement this function in APPS
}
virtual void selectNextField()
{
// Override and implement this function in APPS
}
virtual void decField()
{
// Override and implement this function in APPS
}
virtual void incField()
{
// Override and implement this function in APPS
}
virtual void confirmField()
{
// Override and implement this function in APPS
}
virtual void switchPrecision()
{
// Override and implement this function in APPS
}
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::GraphWrapAndOverwrite<50> apps0Graph;
touchgfx::GraphElementGridY apps0GraphMajorYAxisGrid;
touchgfx::GraphLabelsY apps0GraphMajorYAxisLabel;
touchgfx::GraphElementLine apps0GraphLine1;
touchgfx::PainterRGB565 apps0GraphLine1Painter;
touchgfx::GraphElementVerticalGapLine apps0GraphVerticalFrontline;
touchgfx::GraphWrapAndOverwrite<50> apps1Graph;
touchgfx::GraphElementLine apps1GraphLine1;
touchgfx::PainterRGB565 apps1GraphLine1Painter;
touchgfx::TextArea title;
touchgfx::TextArea apps0;
touchgfx::TextArea apps1;
touchgfx::TextArea min;
touchgfx::TextArea max;
touchgfx::TextArea cur;
touchgfx::Box apps1max_bg;
touchgfx::Box apps0max_bg;
touchgfx::Box apps1min_bg;
touchgfx::Box apps0min_bg;
touchgfx::TextAreaWithOneWildcard apps1cur;
touchgfx::TextAreaWithOneWildcard apps0cur;
touchgfx::TextAreaWithOneWildcard apps1max;
touchgfx::TextAreaWithOneWildcard apps0max;
touchgfx::TextAreaWithOneWildcard apps1min;
touchgfx::TextAreaWithOneWildcard apps0min;
private:
/*
* Canvas Buffer Size
*/
static const uint32_t CANVAS_BUFFER_SIZE = 7200;
uint8_t canvasBuffer[CANVAS_BUFFER_SIZE];
};
#endif // APPSVIEWBASE_HPP

View File

@ -35,6 +35,15 @@ public:
// VehicleConfig
void gotoVehicleConfigScreenNoTransition();
// SDC
void gotoSDCScreenNoTransition();
// Endurance
void gotoEnduranceScreenNoTransition();
// APPS
void gotoAPPSScreenNoTransition();
protected:
touchgfx::Callback<FrontendApplicationBase> transitionCallback;
FrontendHeap& frontendHeap;
@ -54,6 +63,15 @@ protected:
// VehicleConfig
void gotoVehicleConfigScreenNoTransitionImpl();
// SDC
void gotoSDCScreenNoTransitionImpl();
// Endurance
void gotoEnduranceScreenNoTransitionImpl();
// APPS
void gotoAPPSScreenNoTransitionImpl();
};
#endif // FRONTENDAPPLICATIONBASE_HPP

View File

@ -22,6 +22,12 @@
#include <gui/debugview_screen/DebugViewPresenter.hpp>
#include <gui/vehicleconfig_screen/VehicleConfigView.hpp>
#include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp>
#include <gui/sdc_screen/SDCView.hpp>
#include <gui/sdc_screen/SDCPresenter.hpp>
#include <gui/endurance_screen/EnduranceView.hpp>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui/apps_screen/APPSView.hpp>
#include <gui/apps_screen/APPSPresenter.hpp>
/**
@ -49,7 +55,10 @@ public:
touchgfx::meta::TypeList< DriverViewView,
touchgfx::meta::TypeList< DebugViewView,
touchgfx::meta::TypeList< VehicleConfigView,
touchgfx::meta::Nil > > > >
touchgfx::meta::TypeList< SDCView,
touchgfx::meta::TypeList< EnduranceView,
touchgfx::meta::TypeList< APPSView,
touchgfx::meta::Nil > > > > > > >
> GeneratedViewTypes;
/**
@ -66,7 +75,10 @@ public:
touchgfx::meta::TypeList< DriverViewPresenter,
touchgfx::meta::TypeList< DebugViewPresenter,
touchgfx::meta::TypeList< VehicleConfigPresenter,
touchgfx::meta::Nil > > > >
touchgfx::meta::TypeList< SDCPresenter,
touchgfx::meta::TypeList< EndurancePresenter,
touchgfx::meta::TypeList< APPSPresenter,
touchgfx::meta::Nil > > > > > > >
> GeneratedPresenterTypes;
/**

View File

@ -0,0 +1,37 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef PROGRESSBARBASE_HPP
#define PROGRESSBARBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/containers/progress_indicators/BoxProgress.hpp>
class ProgressBarBase : public touchgfx::Container
{
public:
ProgressBarBase();
virtual ~ProgressBarBase();
virtual void initialize();
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::TextAreaWithOneWildcard r2dProgressLabel;
touchgfx::TextArea r2dLabel;
touchgfx::TextArea prechargeLabel;
touchgfx::BoxProgress progressBar;
private:
};
#endif // PROGRESSBARBASE_HPP

View File

@ -20,7 +20,7 @@
#include <gui/containers/DriverViewField.hpp>
#include <touchgfx/containers/ListLayout.hpp>
#include <gui/containers/DriverViewStatusItem.hpp>
#include <touchgfx/containers/progress_indicators/BoxProgress.hpp>
#include <gui/containers/ProgressBar.hpp>
#include <gui/containers/ErrorPopup.hpp>
class DriverViewViewBase : public touchgfx::View<DriverViewPresenter>
@ -98,10 +98,7 @@ protected:
DriverViewStatusItem statusPDU;
DriverViewStatusItem statusINV;
DriverViewStatusItem statusLV;
touchgfx::BoxProgress progressBar;
touchgfx::TextArea prechargeLabel;
touchgfx::TextArea r2dLabel;
touchgfx::TextAreaWithOneWildcard r2dProgressLabel;
ProgressBar progressBar;
ErrorPopup errorPopup;
private:

View File

@ -0,0 +1,79 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef ENDURANCEVIEWBASE_HPP
#define ENDURANCEVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/BoxWithBorder.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
#include <gui/containers/ProgressBar.hpp>
class EnduranceViewBase : public touchgfx::View<EndurancePresenter>
{
public:
EnduranceViewBase();
virtual ~EnduranceViewBase();
virtual void setupScreen();
virtual void handleKeyEvent(uint8_t key);
/*
* Virtual Action Handlers
*/
virtual void decreasePowerLimit()
{
// Override and implement this function in Endurance
}
virtual void increasePowerLimit()
{
// Override and implement this function in Endurance
}
virtual void decreaseSpeedLimit()
{
// Override and implement this function in Endurance
}
virtual void increaseSpeedLimit()
{
// Override and implement this function in Endurance
}
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::Container detailContainer;
touchgfx::BoxWithBorder boxWithBorder2;
touchgfx::BoxWithBorder boxWithBorder2_1;
touchgfx::BoxWithBorder boxWithBorder3;
touchgfx::BoxWithBorder boxWithBorder3_1;
touchgfx::TextArea textArea3;
touchgfx::TextArea textArea3_1;
touchgfx::TextAreaWithOneWildcard powerLimit;
touchgfx::TextAreaWithOneWildcard speedLimit;
touchgfx::TextAreaWithOneWildcard soc;
touchgfx::TextAreaWithOneWildcard batTemp;
touchgfx::Container overallContainer;
touchgfx::BoxWithBorder overallBox;
touchgfx::TextArea textArea1_1;
touchgfx::TextAreaWithOneWildcard overallBat;
touchgfx::Container lastLapContainer;
touchgfx::BoxWithBorder lastLapBox;
touchgfx::TextArea textArea1;
touchgfx::TextAreaWithOneWildcard lastLapBat;
ProgressBar progressBar;
private:
};
#endif // ENDURANCEVIEWBASE_HPP

View File

@ -0,0 +1,56 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef SDCVIEWBASE_HPP
#define SDCVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/sdc_screen/SDCPresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/canvas/Line.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
class SDCViewBase : public touchgfx::View<SDCPresenter>
{
public:
SDCViewBase();
virtual ~SDCViewBase();
virtual void setupScreen();
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::TextArea pdu;
touchgfx::TextArea inertia;
touchgfx::TextArea sdcl;
touchgfx::TextArea hvb;
touchgfx::TextArea tsms;
touchgfx::TextArea acc;
touchgfx::TextArea imd;
touchgfx::TextArea ams;
touchgfx::Line line1;
touchgfx::PainterRGB565 line1Painter;
touchgfx::Line line2;
touchgfx::PainterRGB565 line2Painter;
touchgfx::Line line3;
touchgfx::PainterRGB565 line3Painter;
private:
/*
* Canvas Buffer Size
*/
static const uint32_t CANVAS_BUFFER_SIZE = 7200;
uint8_t canvasBuffer[CANVAS_BUFFER_SIZE];
};
#endif // SDCVIEWBASE_HPP

View File

@ -202,6 +202,12 @@ AMIViewBase::AMIViewBase()
add(driving);
init.setPosition(0, 0, 480, 320);
asOK.setPosition(68, 279, 169, 24);
asOK.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
asOK.setLinespacing(0);
asOK.setTypedText(touchgfx::TypedText(T___SINGLEUSE_C17G));
init.add(asOK);
textArea8.setXY(68, 247);
textArea8.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea8.setLinespacing(0);

View File

@ -0,0 +1,216 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/apps_screen/APPSViewBase.hpp>
#include <touchgfx/canvas_widget_renderer/CanvasWidgetRenderer.hpp>
#include <touchgfx/Color.hpp>
#include <texts/TextKeysAndLanguages.hpp>
APPSViewBase::APPSViewBase()
{
touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE);
__background.setPosition(0, 0, 480, 320);
__background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(__background);
apps0Graph.setPosition(11, 36, 458, 180);
apps0Graph.setScale(10);
apps0Graph.setGraphAreaMargin(0, 40, 0, 0);
apps0Graph.setGraphAreaPadding(0, 0, 0, 0);
apps0Graph.setGraphRangeY(-10, 110);
apps0GraphMajorYAxisGrid.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0GraphMajorYAxisGrid.setInterval(20);
apps0GraphMajorYAxisGrid.setLineWidth(1);
apps0GraphMajorYAxisGrid.setScale(10);
apps0Graph.addGraphElement(apps0GraphMajorYAxisGrid);
apps0GraphMajorYAxisLabel.setInterval(20);
apps0GraphMajorYAxisLabel.setLabelTypedText(touchgfx::TypedText(T___SINGLEUSE_RK9Z));
apps0GraphMajorYAxisLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0GraphMajorYAxisLabel.setScale(10);
apps0Graph.addLeftElement(apps0GraphMajorYAxisLabel);
apps0GraphLine1Painter.setColor(touchgfx::Color::getColorFromRGB(20, 151, 197));
apps0GraphLine1.setPainter(apps0GraphLine1Painter);
apps0GraphLine1.setLineWidth(2);
apps0Graph.addGraphElement(apps0GraphLine1);
apps0GraphVerticalFrontline.setColor(touchgfx::Color::getColorFromRGB(137, 224, 13));
apps0GraphVerticalFrontline.setGapLineWidth(1);
apps0Graph.addGraphElement(apps0GraphVerticalFrontline);
add(apps0Graph);
apps1Graph.setPosition(11, 36, 458, 180);
apps1Graph.setScale(10);
apps1Graph.setGraphAreaMargin(0, 0, 0, 0);
apps1Graph.setGraphAreaPadding(0, 40, 0, 0);
apps1Graph.setGraphRangeY(-10, 110);
apps1GraphLine1Painter.setColor(touchgfx::Color::getColorFromRGB(196, 109, 22));
apps1GraphLine1.setPainter(apps1GraphLine1Painter);
apps1GraphLine1.setLineWidth(2);
apps1Graph.addGraphElement(apps1GraphLine1);
add(apps1Graph);
title.setXY(38, 0);
title.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
title.setLinespacing(0);
title.setTypedText(touchgfx::TypedText(T___SINGLEUSE_UBFH));
add(title);
apps0.setXY(11, 247);
apps0.setColor(touchgfx::Color::getColorFromRGB(20, 151, 197));
apps0.setLinespacing(0);
apps0.setTypedText(touchgfx::TypedText(T___SINGLEUSE_6EKV));
add(apps0);
apps1.setXY(11, 285);
apps1.setColor(touchgfx::Color::getColorFromRGB(196, 109, 22));
apps1.setLinespacing(0);
apps1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_W4YT));
add(apps1);
min.setPosition(127, 216, 100, 24);
min.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
min.setLinespacing(0);
min.setTypedText(touchgfx::TypedText(T___SINGLEUSE_QXG5));
add(min);
max.setPosition(250, 216, 100, 24);
max.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
max.setLinespacing(0);
max.setTypedText(touchgfx::TypedText(T___SINGLEUSE_WQXQ));
add(max);
cur.setPosition(369, 216, 100, 24);
cur.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
cur.setLinespacing(0);
cur.setTypedText(touchgfx::TypedText(T___SINGLEUSE_CBZ9));
add(cur);
apps1max_bg.setPosition(250, 278, 100, 38);
apps1max_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps1max_bg.setVisible(false);
add(apps1max_bg);
apps0max_bg.setPosition(250, 240, 100, 38);
apps0max_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps0max_bg.setVisible(false);
add(apps0max_bg);
apps1min_bg.setPosition(127, 278, 100, 38);
apps1min_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps1min_bg.setVisible(false);
add(apps1min_bg);
apps0min_bg.setPosition(127, 240, 100, 38);
apps0min_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps0min_bg.setVisible(false);
add(apps0min_bg);
apps1cur.setPosition(369, 278, 100, 38);
apps1cur.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps1cur.setLinespacing(0);
apps1cur.setTypedText(touchgfx::TypedText(T___SINGLEUSE_SM6H));
add(apps1cur);
apps0cur.setPosition(369, 240, 100, 38);
apps0cur.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0cur.setLinespacing(0);
apps0cur.setTypedText(touchgfx::TypedText(T___SINGLEUSE_8KB4));
add(apps0cur);
apps1max.setPosition(250, 278, 100, 38);
apps1max.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps1max.setLinespacing(0);
apps1max.setTypedText(touchgfx::TypedText(T___SINGLEUSE_H8OI));
add(apps1max);
apps0max.setPosition(250, 240, 100, 38);
apps0max.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0max.setLinespacing(0);
apps0max.setTypedText(touchgfx::TypedText(T___SINGLEUSE_978V));
add(apps0max);
apps1min.setPosition(127, 278, 100, 38);
apps1min.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps1min.setLinespacing(0);
apps1min.setTypedText(touchgfx::TypedText(T___SINGLEUSE_P4TL));
add(apps1min);
apps0min.setPosition(127, 240, 100, 38);
apps0min.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0min.setLinespacing(0);
apps0min.setTypedText(touchgfx::TypedText(T___SINGLEUSE_MBQT));
add(apps0min);
}
APPSViewBase::~APPSViewBase()
{
touchgfx::CanvasWidgetRenderer::resetBuffer();
}
void APPSViewBase::setupScreen()
{
}
void APPSViewBase::handleKeyEvent(uint8_t key)
{
if(104 == key)
{
//SelectPrevField
//When hardware button 104 clicked call virtual function
//Call selectPrevField
selectPrevField();
}
if(108 == key)
{
//SelectNextField
//When hardware button 108 clicked call virtual function
//Call selectNextField
selectNextField();
}
if(107 == key)
{
//DecField
//When hardware button 107 clicked call virtual function
//Call decField
decField();
}
if(106 == key)
{
//IncField
//When hardware button 106 clicked call virtual function
//Call incField
incField();
}
if(54 == key)
{
//ConfirmField
//When hardware button 54 clicked call virtual function
//Call confirmField
confirmField();
}
if(53 == key)
{
//SwitchPrecision
//When hardware button 53 clicked call virtual function
//Call switchPrecision
switchPrecision();
}
}

View File

@ -19,6 +19,12 @@
#include <gui/debugview_screen/DebugViewPresenter.hpp>
#include <gui/vehicleconfig_screen/VehicleConfigView.hpp>
#include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp>
#include <gui/sdc_screen/SDCView.hpp>
#include <gui/sdc_screen/SDCPresenter.hpp>
#include <gui/endurance_screen/EnduranceView.hpp>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui/apps_screen/APPSView.hpp>
#include <gui/apps_screen/APPSPresenter.hpp>
using namespace touchgfx;
@ -102,3 +108,42 @@ void FrontendApplicationBase::gotoVehicleConfigScreenNoTransitionImpl()
{
touchgfx::makeTransition<VehicleConfigView, VehicleConfigPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}
// SDC
void FrontendApplicationBase::gotoSDCScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplicationBase::gotoSDCScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoSDCScreenNoTransitionImpl()
{
touchgfx::makeTransition<SDCView, SDCPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}
// Endurance
void FrontendApplicationBase::gotoEnduranceScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplicationBase::gotoEnduranceScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoEnduranceScreenNoTransitionImpl()
{
touchgfx::makeTransition<EnduranceView, EndurancePresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}
// APPS
void FrontendApplicationBase::gotoAPPSScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplicationBase::gotoAPPSScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoAPPSScreenNoTransitionImpl()
{
touchgfx::makeTransition<APPSView, APPSPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}

View File

@ -0,0 +1,53 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/containers/ProgressBarBase.hpp>
#include <texts/TextKeysAndLanguages.hpp>
#include <touchgfx/Color.hpp>
#include <images/BitmapDatabase.hpp>
ProgressBarBase::ProgressBarBase()
{
setWidth(456);
setHeight(33);
r2dProgressLabel.setPosition(168, -2, 219, 37);
r2dProgressLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dProgressLabel.setLinespacing(0);
r2dProgressLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_6EXA));
r2dProgressLabel.setVisible(false);
add(r2dProgressLabel);
r2dLabel.setPosition(70, -2, 317, 37);
r2dLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dLabel.setLinespacing(0);
r2dLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_570K));
r2dLabel.setVisible(false);
add(r2dLabel);
prechargeLabel.setXY(95, -2);
prechargeLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
prechargeLabel.setLinespacing(0);
prechargeLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_G2S2));
prechargeLabel.setVisible(false);
add(prechargeLabel);
progressBar.setXY(0, 0);
progressBar.setProgressIndicatorPosition(0, 0, 480, 55);
progressBar.setRange(0, 100);
progressBar.setDirection(touchgfx::AbstractDirectionProgress::RIGHT);
progressBar.setBackground(touchgfx::Bitmap(BITMAP_PROG_HORIZ_BG_ID));
progressBar.setColor(touchgfx::Color::getColorFromRGB(99, 186, 0));
progressBar.setValue(0);
progressBar.setVisible(false);
add(progressBar);
}
ProgressBarBase::~ProgressBarBase()
{
}
void ProgressBarBase::initialize()
{
}

View File

@ -124,36 +124,8 @@ DriverViewViewBase::DriverViewViewBase() :
statusBar.add(statusItems);
progressBar.setXY(0, 0);
progressBar.setProgressIndicatorPosition(0, 0, 480, 55);
progressBar.setRange(0, 100);
progressBar.setDirection(touchgfx::AbstractDirectionProgress::RIGHT);
progressBar.setBackground(touchgfx::Bitmap(BITMAP_PROG_HORIZ_BG_ID));
progressBar.setColor(touchgfx::Color::getColorFromRGB(99, 186, 0));
progressBar.setValue(0);
progressBar.setVisible(false);
statusBar.add(progressBar);
prechargeLabel.setXY(95, -2);
prechargeLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
prechargeLabel.setLinespacing(0);
prechargeLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_HMH2));
prechargeLabel.setVisible(false);
statusBar.add(prechargeLabel);
r2dLabel.setPosition(70, -2, 317, 37);
r2dLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dLabel.setLinespacing(0);
r2dLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_NGUK));
r2dLabel.setVisible(false);
statusBar.add(r2dLabel);
r2dProgressLabel.setPosition(168, -2, 219, 37);
r2dProgressLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dProgressLabel.setLinespacing(0);
r2dProgressLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_J5UH));
r2dProgressLabel.setVisible(false);
statusBar.add(r2dProgressLabel);
add(statusBar);
errorPopup.setXY(12, 125);
@ -187,6 +159,7 @@ void DriverViewViewBase::setupScreen()
statusPDU.initialize();
statusINV.initialize();
statusLV.initialize();
progressBar.initialize();
errorPopup.initialize();
}

View File

@ -0,0 +1,170 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/endurance_screen/EnduranceViewBase.hpp>
#include <touchgfx/Color.hpp>
#include <texts/TextKeysAndLanguages.hpp>
EnduranceViewBase::EnduranceViewBase()
{
__background.setPosition(0, 0, 480, 320);
__background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(__background);
detailContainer.setPosition(12, 187, 456, 118);
boxWithBorder2.setPosition(0, 0, 152, 118);
boxWithBorder2.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder2.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder2.setBorderSize(3);
detailContainer.add(boxWithBorder2);
boxWithBorder2_1.setPosition(304, 0, 152, 118);
boxWithBorder2_1.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder2_1.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder2_1.setBorderSize(3);
detailContainer.add(boxWithBorder2_1);
boxWithBorder3.setPosition(152, 0, 152, 59);
boxWithBorder3.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder3.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder3.setBorderSize(3);
detailContainer.add(boxWithBorder3);
boxWithBorder3_1.setPosition(152, 59, 152, 59);
boxWithBorder3_1.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder3_1.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder3_1.setBorderSize(3);
detailContainer.add(boxWithBorder3_1);
textArea3.setXY(27, 2);
textArea3.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea3.setLinespacing(0);
textArea3.setTypedText(touchgfx::TypedText(T___SINGLEUSE_QAZ3));
detailContainer.add(textArea3);
textArea3_1.setXY(329, 2);
textArea3_1.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea3_1.setLinespacing(0);
textArea3_1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_1F9T));
detailContainer.add(textArea3_1);
powerLimit.setPosition(28, 20, 96, 92);
powerLimit.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
powerLimit.setLinespacing(0);
powerLimit.setTypedText(touchgfx::TypedText(T___SINGLEUSE_4X8X));
detailContainer.add(powerLimit);
speedLimit.setPosition(308, 20, 144, 92);
speedLimit.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
speedLimit.setLinespacing(0);
speedLimit.setTypedText(touchgfx::TypedText(T___SINGLEUSE_DONW));
detailContainer.add(speedLimit);
soc.setPosition(168, -2, 120, 58);
soc.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
soc.setLinespacing(0);
soc.setTypedText(touchgfx::TypedText(T___SINGLEUSE_OP6C));
detailContainer.add(soc);
batTemp.setPosition(157, 57, 150, 58);
batTemp.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
batTemp.setLinespacing(0);
batTemp.setTypedText(touchgfx::TypedText(T___SINGLEUSE_B2Q6));
detailContainer.add(batTemp);
add(detailContainer);
overallContainer.setPosition(248, 15, 220, 160);
overallBox.setPosition(0, 0, 220, 160);
overallBox.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
overallBox.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
overallBox.setBorderSize(3);
overallContainer.add(overallBox);
textArea1_1.setPosition(9, 7, 203, 24);
textArea1_1.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea1_1.setLinespacing(0);
textArea1_1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_DJ62));
overallContainer.add(textArea1_1);
overallBat.setPosition(14, 40, 192, 92);
overallBat.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
overallBat.setLinespacing(0);
overallBat.setTypedText(touchgfx::TypedText(T___SINGLEUSE_FPXE));
overallContainer.add(overallBat);
add(overallContainer);
lastLapContainer.setPosition(12, 15, 220, 160);
lastLapBox.setPosition(0, 0, 220, 160);
lastLapBox.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
lastLapBox.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
lastLapBox.setBorderSize(3);
lastLapContainer.add(lastLapBox);
textArea1.setXY(8, 7);
textArea1.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea1.setLinespacing(0);
textArea1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_5W6Y));
lastLapContainer.add(textArea1);
lastLapBat.setPosition(14, 40, 192, 92);
lastLapBat.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
lastLapBat.setLinespacing(0);
lastLapBat.setTypedText(touchgfx::TypedText(T___SINGLEUSE_51AZ));
lastLapContainer.add(lastLapBat);
add(lastLapContainer);
progressBar.setXY(12, 15);
add(progressBar);
}
EnduranceViewBase::~EnduranceViewBase()
{
}
void EnduranceViewBase::setupScreen()
{
progressBar.initialize();
}
void EnduranceViewBase::handleKeyEvent(uint8_t key)
{
if(104 == key)
{
//DecreasePLim
//When hardware button 104 clicked call virtual function
//Call decreasePowerLimit
decreasePowerLimit();
}
if(108 == key)
{
//IncreasePLim
//When hardware button 108 clicked call virtual function
//Call increasePowerLimit
increasePowerLimit();
}
if(107 == key)
{
//DecreaseSLim
//When hardware button 107 clicked call virtual function
//Call decreaseSpeedLimit
decreaseSpeedLimit();
}
if(106 == key)
{
//IncreaseSLim
//When hardware button 106 clicked call virtual function
//Call increaseSpeedLimit
increaseSpeedLimit();
}
}

View File

@ -135,4 +135,31 @@ void MissionSelectViewBase::handleKeyEvent(uint8_t key)
application().gotoVehicleConfigScreenNoTransition();
}
if(250 == key)
{
//DummyChangeSDCView
//When hardware button 250 clicked change screen to SDC
//Go to SDC with no screen transition
application().gotoSDCScreenNoTransition();
}
if(249 == key)
{
//DummyChangeEnduranceView
//When hardware button 249 clicked change screen to Endurance
//Go to Endurance with no screen transition
application().gotoEnduranceScreenNoTransition();
}
if(248 == key)
{
//DummyChangeAPPSView
//When hardware button 248 clicked change screen to APPS
//Go to APPS with no screen transition
application().gotoAPPSScreenNoTransition();
}
}

View File

@ -0,0 +1,101 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/sdc_screen/SDCViewBase.hpp>
#include <touchgfx/canvas_widget_renderer/CanvasWidgetRenderer.hpp>
#include <touchgfx/Color.hpp>
#include <texts/TextKeysAndLanguages.hpp>
SDCViewBase::SDCViewBase()
{
touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE);
__background.setPosition(0, 0, 480, 320);
__background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(__background);
pdu.setXY(15, 40);
pdu.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
pdu.setLinespacing(0);
pdu.setTypedText(touchgfx::TypedText(T___SINGLEUSE_YRU7));
add(pdu);
inertia.setXY(128, 40);
inertia.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
inertia.setLinespacing(0);
inertia.setTypedText(touchgfx::TypedText(T___SINGLEUSE_43KA));
add(inertia);
sdcl.setPosition(363, 217, 102, 72);
sdcl.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
sdcl.setLinespacing(0);
sdcl.setTypedText(touchgfx::TypedText(T___SINGLEUSE_QNHI));
add(sdcl);
hvb.setXY(240, 241);
hvb.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
hvb.setLinespacing(0);
hvb.setTypedText(touchgfx::TypedText(T___SINGLEUSE_KI1B));
add(hvb);
tsms.setXY(120, 265);
tsms.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
tsms.setLinespacing(0);
tsms.setTypedText(touchgfx::TypedText(T___SINGLEUSE_XC1X));
add(tsms);
acc.setXY(15, 265);
acc.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
acc.setLinespacing(0);
acc.setTypedText(touchgfx::TypedText(T___SINGLEUSE_V38H));
add(acc);
imd.setXY(291, 40);
imd.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
imd.setLinespacing(0);
imd.setTypedText(touchgfx::TypedText(T___SINGLEUSE_N50J));
add(imd);
ams.setXY(404, 40);
ams.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
ams.setLinespacing(0);
ams.setTypedText(touchgfx::TypedText(T___SINGLEUSE_XFW7));
add(ams);
line1.setPosition(15, 122, 450, 10);
line1Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
line1.setPainter(line1Painter);
line1.setStart(5, 5);
line1.setEnd(450, 5);
line1.setLineWidth(10);
line1.setLineEndingStyle(touchgfx::Line::SQUARE_CAP_ENDING);
add(line1);
line2.setPosition(15, 193, 450, 10);
line2Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
line2.setPainter(line2Painter);
line2.setStart(10, 5);
line2.setEnd(450, 5);
line2.setLineWidth(10);
line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING);
add(line2);
line3.setPosition(455, 122, 10, 81);
line3Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
line3.setPainter(line3Painter);
line3.setStart(5, 5);
line3.setEnd(5, 100);
line3.setLineWidth(10);
line3.setLineEndingStyle(touchgfx::Line::SQUARE_CAP_ENDING);
add(line3);
}
SDCViewBase::~SDCViewBase()
{
touchgfx::CanvasWidgetRenderer::resetBuffer();
}
void SDCViewBase::setupScreen()
{
}

View File

@ -1 +1 @@
{"remap":"yes","language":"GB","language_index":0,"indices":[["428","T_LV"],["412","T_PDU"],["420","T_SCS"],["424","T_SDC"],["416","T_R2D"],["409","T_TS"],["404","T_INV"],["400","T_AMS"],["174","T_ERROR_AMS"],["216","T_DEBUGVIEWFIELD_TITLE"],["216","T_DRIVERVIEWFIELD_TITLE"],["216","T_NUMBERSMALLWILDCARD"],["355","T_FIELD_BBAL"],["312","T_FIELD_TSVOLTVEH"],["305","T_FIELD_TSVOLTBAT"],["331","T_FIELD_LVSOC"],["349","T_FIELD_TSSOC"],["370","T_FIELD_MAXCELLTEMP"],["375","T_FIELD_TIREFL"],["380","T_FIELD_TIREFR"],["385","T_FIELD_TIRERL"],["390","T_FIELD_TIRERR"],["365","T_FIELD_LAPCOUNT"],["234","T_FIELD_INICHKSTATE"],["325","T_FIELD_ERR"],["424","T_FIELD_SDC"],["250","T_FIELD_INVRREADY"],["242","T_FIELD_INVLREADY"],["274","T_FIELD_R2DPROGRESS"],["258","T_FIELD_ACTIVEMISSION"],["218","T_FIELD_ASSTATE"],["290","T_FIELD_TSSTATE"],["216","T_NUMBERWILDCARD"],["216","T_DEFAULTWILDCARD_CENTERED"],["216","T_DEFAULTWILDCARD_RIGHTALIGNED"],["408","T_FIELD_TSCURRENT"],["395","T_FIELD_MINCELLVOLT"],["343","T_FIELD_SPEED"],["141","T_INSPECTION_HUGE"],["207","T_EBS_HUGE"],["163","T_TRACKDRIVE_HUGE"],["184","T_AUTOX_HUGE"],["282","T_SKIDPAD_HUGE"],["128","T_ACCEL_HUGE"],["17","T_INVALID_HUGE"],["98","T_MANUAL"],["141","T_INSPECTION"],["207","T_EBS"],["163","T_TRACKDRIVE"],["184","T_AUTOX"],["282","T_SKIDPAD"],["128","T_ACCEL"],["360","T___SINGLEUSE_E6D7"],["216","T___SINGLEUSE_ZEKA"],["113","T___SINGLEUSE_0L75"],["82","T___SINGLEUSE_GA13"],["216","T___SINGLEUSE_THUG"],["216","T___SINGLEUSE_CO7A"],["216","T___SINGLEUSE_A0LF"],["216","T___SINGLEUSE_166C"],["66","T___SINGLEUSE_OOU3"],["50","T___SINGLEUSE_2FPP"],["216","T___SINGLEUSE_2S21"],["216","T___SINGLEUSE_OQ6P"],["266","T___SINGLEUSE_590R"],["226","T___SINGLEUSE_Z78U"],["216","T___SINGLEUSE_LLOZ"],["216","T___SINGLEUSE_232C"],["337","T___SINGLEUSE_JFR7"],["319","T___SINGLEUSE_3MDX"],["16","T___SINGLEUSE_F9I5"],["216","T___SINGLEUSE_9L8R"],["16","T___SINGLEUSE_1NKF"],["216","T___SINGLEUSE_J5UH"],["416","T___SINGLEUSE_NGUK"],["216","T___SINGLEUSE_4E84"],["216","T___SINGLEUSE_YTAB"],["152","T___SINGLEUSE_RWCE"],["194","T___SINGLEUSE_HMH2"],["204","T___SINGLEUSE_PHFD"],["298","T___SINGLEUSE_H6UX"],["216","T___SINGLEUSE_20H3"],["34","T___SINGLEUSE_M5X7"],["0","T___SINGLEUSE_6GPV"]]}
{"remap":"yes","language":"GB","language_index":0,"indices":[["557","T_LV"],["421","T_PDU"],["549","T_SCS"],["553","T_SDC"],["545","T_R2D"],["542","T_TS"],["537","T_INV"],["409","T_AMS"],["252","T_ERROR_AMS"],["217","T_DEBUGVIEWFIELD_TITLE"],["217","T_DRIVERVIEWFIELD_TITLE"],["217","T_NUMBERSMALLWILDCARD"],["479","T_FIELD_BBAL"],["400","T_FIELD_TSVOLTVEH"],["393","T_FIELD_TSVOLTBAT"],["449","T_FIELD_LVSOC"],["473","T_FIELD_TSSOC"],["494","T_FIELD_MAXCELLTEMP"],["504","T_FIELD_TIREFL"],["509","T_FIELD_TIREFR"],["514","T_FIELD_TIRERL"],["519","T_FIELD_TIRERR"],["489","T_FIELD_LAPCOUNT"],["322","T_FIELD_INICHKSTATE"],["443","T_FIELD_ERR"],["553","T_FIELD_SDC"],["338","T_FIELD_INVRREADY"],["330","T_FIELD_INVLREADY"],["362","T_FIELD_R2DPROGRESS"],["346","T_FIELD_ACTIVEMISSION"],["306","T_FIELD_ASSTATE"],["378","T_FIELD_TSSTATE"],["217","T_NUMBERWILDCARD"],["217","T_DEFAULTWILDCARD_CENTERED"],["217","T_DEFAULTWILDCARD_RIGHTALIGNED"],["541","T_FIELD_TSCURRENT"],["524","T_FIELD_MINCELLVOLT"],["467","T_FIELD_SPEED"],["219","T_INSPECTION_HUGE"],["297","T_EBS_HUGE"],["241","T_TRACKDRIVE_HUGE"],["262","T_AUTOX_HUGE"],["370","T_SKIDPAD_HUGE"],["163","T_ACCEL_HUGE"],["52","T_INVALID_HUGE"],["133","T_MANUAL"],["219","T_INSPECTION"],["297","T_EBS"],["241","T_TRACKDRIVE"],["262","T_AUTOX"],["370","T_SKIDPAD"],["163","T_ACCEL"],["431","T___SINGLEUSE_W4YT"],["217","T___SINGLEUSE_SM6H"],["217","T___SINGLEUSE_8KB4"],["217","T___SINGLEUSE_P4TL"],["533","T___SINGLEUSE_CBZ9"],["495","T___SINGLEUSE_WQXQ"],["525","T___SINGLEUSE_QXG5"],["217","T___SINGLEUSE_MBQT"],["217","T___SINGLEUSE_978V"],["217","T___SINGLEUSE_H8OI"],["425","T___SINGLEUSE_6EKV"],["217","T___SINGLEUSE_RK9Z"],["18","T___SINGLEUSE_UBFH"],["217","T___SINGLEUSE_6EXA"],["545","T___SINGLEUSE_570K"],["272","T___SINGLEUSE_G2S2"],["285","T___SINGLEUSE_B2Q6"],["282","T___SINGLEUSE_OP6C"],["467","T___SINGLEUSE_1F9T"],["461","T___SINGLEUSE_QAZ3"],["217","T___SINGLEUSE_DONW"],["217","T___SINGLEUSE_4X8X"],["282","T___SINGLEUSE_FPXE"],["282","T___SINGLEUSE_51AZ"],["202","T___SINGLEUSE_DJ62"],["176","T___SINGLEUSE_5W6Y"],["214","T___SINGLEUSE_C17G"],["407","T___SINGLEUSE_XFW7"],["413","T___SINGLEUSE_N50J"],["529","T___SINGLEUSE_V38H"],["499","T___SINGLEUSE_XC1X"],["288","T___SINGLEUSE_KI1B"],["189","T___SINGLEUSE_QNHI"],["0","T___SINGLEUSE_43KA"],["419","T___SINGLEUSE_YRU7"],["484","T___SINGLEUSE_E6D7"],["217","T___SINGLEUSE_ZEKA"],["148","T___SINGLEUSE_0L75"],["117","T___SINGLEUSE_GA13"],["217","T___SINGLEUSE_THUG"],["217","T___SINGLEUSE_CO7A"],["217","T___SINGLEUSE_A0LF"],["217","T___SINGLEUSE_166C"],["101","T___SINGLEUSE_OOU3"],["85","T___SINGLEUSE_2FPP"],["217","T___SINGLEUSE_2S21"],["217","T___SINGLEUSE_OQ6P"],["354","T___SINGLEUSE_590R"],["314","T___SINGLEUSE_Z78U"],["217","T___SINGLEUSE_LLOZ"],["217","T___SINGLEUSE_232C"],["455","T___SINGLEUSE_JFR7"],["437","T___SINGLEUSE_3MDX"],["17","T___SINGLEUSE_F9I5"],["217","T___SINGLEUSE_9L8R"],["17","T___SINGLEUSE_1NKF"],["217","T___SINGLEUSE_4E84"],["217","T___SINGLEUSE_YTAB"],["230","T___SINGLEUSE_RWCE"],["282","T___SINGLEUSE_PHFD"],["386","T___SINGLEUSE_H6UX"],["217","T___SINGLEUSE_20H3"],["69","T___SINGLEUSE_M5X7"],["35","T___SINGLEUSE_6GPV"]]}

View File

@ -1 +1 @@
{"languages":["GB"],"textids":["T_LV","T_PDU","T_SCS","T_SDC","T_R2D","T_TS","T_INV","T_AMS","T_ERROR_AMS","T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_NUMBERSMALLWILDCARD","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_E6D7","T___SINGLEUSE_ZEKA","T___SINGLEUSE_0L75","T___SINGLEUSE_GA13","T___SINGLEUSE_THUG","T___SINGLEUSE_CO7A","T___SINGLEUSE_A0LF","T___SINGLEUSE_166C","T___SINGLEUSE_OOU3","T___SINGLEUSE_2FPP","T___SINGLEUSE_2S21","T___SINGLEUSE_OQ6P","T___SINGLEUSE_590R","T___SINGLEUSE_Z78U","T___SINGLEUSE_LLOZ","T___SINGLEUSE_232C","T___SINGLEUSE_JFR7","T___SINGLEUSE_3MDX","T___SINGLEUSE_F9I5","T___SINGLEUSE_9L8R","T___SINGLEUSE_1NKF","T___SINGLEUSE_J5UH","T___SINGLEUSE_NGUK","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_HMH2","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]}
{"languages":["GB"],"textids":["T_LV","T_PDU","T_SCS","T_SDC","T_R2D","T_TS","T_INV","T_AMS","T_ERROR_AMS","T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_NUMBERSMALLWILDCARD","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_W4YT","T___SINGLEUSE_SM6H","T___SINGLEUSE_8KB4","T___SINGLEUSE_P4TL","T___SINGLEUSE_CBZ9","T___SINGLEUSE_WQXQ","T___SINGLEUSE_QXG5","T___SINGLEUSE_MBQT","T___SINGLEUSE_978V","T___SINGLEUSE_H8OI","T___SINGLEUSE_6EKV","T___SINGLEUSE_RK9Z","T___SINGLEUSE_UBFH","T___SINGLEUSE_6EXA","T___SINGLEUSE_570K","T___SINGLEUSE_G2S2","T___SINGLEUSE_B2Q6","T___SINGLEUSE_OP6C","T___SINGLEUSE_1F9T","T___SINGLEUSE_QAZ3","T___SINGLEUSE_DONW","T___SINGLEUSE_4X8X","T___SINGLEUSE_FPXE","T___SINGLEUSE_51AZ","T___SINGLEUSE_DJ62","T___SINGLEUSE_5W6Y","T___SINGLEUSE_C17G","T___SINGLEUSE_XFW7","T___SINGLEUSE_N50J","T___SINGLEUSE_V38H","T___SINGLEUSE_XC1X","T___SINGLEUSE_KI1B","T___SINGLEUSE_QNHI","T___SINGLEUSE_43KA","T___SINGLEUSE_YRU7","T___SINGLEUSE_E6D7","T___SINGLEUSE_ZEKA","T___SINGLEUSE_0L75","T___SINGLEUSE_GA13","T___SINGLEUSE_THUG","T___SINGLEUSE_CO7A","T___SINGLEUSE_A0LF","T___SINGLEUSE_166C","T___SINGLEUSE_OOU3","T___SINGLEUSE_2FPP","T___SINGLEUSE_2S21","T___SINGLEUSE_OQ6P","T___SINGLEUSE_590R","T___SINGLEUSE_Z78U","T___SINGLEUSE_LLOZ","T___SINGLEUSE_232C","T___SINGLEUSE_JFR7","T___SINGLEUSE_3MDX","T___SINGLEUSE_F9I5","T___SINGLEUSE_9L8R","T___SINGLEUSE_1NKF","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]}

View File

@ -1 +1 @@
{"remap":"yes","languages":["Gb"],"characters":[67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,80,114,101,115,115,117,114,101,32,65,99,99,32,65,58,0,80,114,101,115,115,117,114,101,32,65,99,99,32,66,58,0,80,114,101,115,115,117,114,101,32,70,114,111,110,116,58,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,80,114,101,115,115,117,114,101,32,82,101,97,114,58,0,65,99,99,101,108,101,114,97,116,105,111,110,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,77,83,32,69,114,114,79,114,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,2,37,0,69,66,83,32,84,101,115,116,0,2,0,65,83,83,84,65,84,69,0,68,83,80,69,69,68,58,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,77,83,80,69,69,68,58,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,66,82,65,75,69,83,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,68,65,78,71,58,0,69,82,82,79,82,0,76,86,83,79,67,0,77,65,78,71,58,0,83,80,69,69,68,0,84,83,83,79,67,0,66,66,65,76,0,73,78,73,84,0,76,65,80,83,0,84,77,65,88,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,65,77,83,0,73,78,86,0,73,84,83,0,80,68,85,0,82,50,68,0,83,67,83,0,83,68,67,0,76,86,0]}
{"remap":"yes","languages":["Gb"],"characters":[68,65,83,72,10,66,79,84,83,10,73,78,69,82,84,73,65,0,65,80,80,83,32,67,65,76,73,66,82,65,84,73,79,78,0,67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,80,114,101,115,115,117,114,101,32,65,99,99,32,65,58,0,80,114,101,115,115,117,114,101,32,65,99,99,32,66,58,0,80,114,101,115,115,117,114,101,32,70,114,111,110,116,58,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,80,114,101,115,115,117,114,101,32,82,101,97,114,58,0,65,99,99,101,108,101,114,97,116,105,111,110,0,76,65,83,84,32,76,65,80,32,66,65,84,0,83,68,66,10,82,69,83,10,83,68,67,76,0,79,86,69,82,65,76,76,32,66,65,84,0,65,83,32,2,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,77,83,32,69,114,114,79,114,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,2,37,0,2,176,0,66,83,80,68,10,72,86,68,0,69,66,83,32,84,101,115,116,0,65,83,83,84,65,84,69,0,68,83,80,69,69,68,58,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,77,83,80,69,69,68,58,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,66,82,65,75,69,83,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,10,10,65,77,83,0,10,10,73,77,68,0,10,10,80,68,85,0,65,80,80,83,48,0,65,80,80,83,49,0,68,65,78,71,58,0,69,82,82,79,82,0,76,86,83,79,67,0,77,65,78,71,58,0,80,79,87,69,82,0,83,80,69,69,68,0,84,83,83,79,67,0,66,66,65,76,0,73,78,73,84,0,76,65,80,83,0,84,77,65,88,0,84,83,77,83,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,65,67,67,0,67,85,82,0,73,78,86,0,73,84,83,0,82,50,68,0,83,67,83,0,83,68,67,0,76,86,0]}

View File

@ -1 +1 @@
{"databases":{"GB":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]],"DEFAULT":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["GB"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5,"getFont_lucon_TTF_33_4bpp":6,"getFont_lucon_TTF_20_4bpp":7},"generate_font_format":"0"}
{"databases":{"GB":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[4,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[8,"CENTER","LTR"],[8,"CENTER","LTR"],[8,"RIGHT","LTR"],[8,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]],"DEFAULT":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[4,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[8,"CENTER","LTR"],[8,"CENTER","LTR"],[8,"RIGHT","LTR"],[8,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["GB"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5,"getFont_lucon_TTF_33_4bpp":6,"getFont_lucon_TTF_20_4bpp":7,"getFont_lucon_TTF_80_4bpp":8},"generate_font_format":"0"}

View File

@ -64,6 +64,41 @@ enum TEXTS
T_AUTOX,
T_SKIDPAD,
T_ACCEL,
T___SINGLEUSE_W4YT,
T___SINGLEUSE_SM6H,
T___SINGLEUSE_8KB4,
T___SINGLEUSE_P4TL,
T___SINGLEUSE_CBZ9,
T___SINGLEUSE_WQXQ,
T___SINGLEUSE_QXG5,
T___SINGLEUSE_MBQT,
T___SINGLEUSE_978V,
T___SINGLEUSE_H8OI,
T___SINGLEUSE_6EKV,
T___SINGLEUSE_RK9Z,
T___SINGLEUSE_UBFH,
T___SINGLEUSE_6EXA,
T___SINGLEUSE_570K,
T___SINGLEUSE_G2S2,
T___SINGLEUSE_B2Q6,
T___SINGLEUSE_OP6C,
T___SINGLEUSE_1F9T,
T___SINGLEUSE_QAZ3,
T___SINGLEUSE_DONW,
T___SINGLEUSE_4X8X,
T___SINGLEUSE_FPXE,
T___SINGLEUSE_51AZ,
T___SINGLEUSE_DJ62,
T___SINGLEUSE_5W6Y,
T___SINGLEUSE_C17G,
T___SINGLEUSE_XFW7,
T___SINGLEUSE_N50J,
T___SINGLEUSE_V38H,
T___SINGLEUSE_XC1X,
T___SINGLEUSE_KI1B,
T___SINGLEUSE_QNHI,
T___SINGLEUSE_43KA,
T___SINGLEUSE_YRU7,
T___SINGLEUSE_E6D7,
T___SINGLEUSE_ZEKA,
T___SINGLEUSE_0L75,
@ -85,12 +120,9 @@ enum TEXTS
T___SINGLEUSE_F9I5,
T___SINGLEUSE_9L8R,
T___SINGLEUSE_1NKF,
T___SINGLEUSE_J5UH,
T___SINGLEUSE_NGUK,
T___SINGLEUSE_4E84,
T___SINGLEUSE_YTAB,
T___SINGLEUSE_RWCE,
T___SINGLEUSE_HMH2,
T___SINGLEUSE_PHFD,
T___SINGLEUSE_H6UX,
T___SINGLEUSE_20H3,

View File

@ -10,88 +10,120 @@ KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE;
// Remap all strings
TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
428, // T_LV: "LV"
412, // T_PDU: "PDU"
420, // T_SCS: "SCS"
424, // T_SDC: "SDC"
416, // T_R2D: "R2D"
409, // T_TS: "TS"
404, // T_INV: "INV"
400, // T_AMS: "AMS"
174, // T_ERROR_AMS: "AMS ErrOr"
216, // T_DEBUGVIEWFIELD_TITLE: "<>"
216, // T_DRIVERVIEWFIELD_TITLE: "<>"
216, // T_NUMBERSMALLWILDCARD: "<>"
355, // T_FIELD_BBAL: "BBAL"
312, // T_FIELD_TSVOLTVEH: "TSVVEH"
305, // T_FIELD_TSVOLTBAT: "TSVBAT"
331, // T_FIELD_LVSOC: "LVSOC"
349, // T_FIELD_TSSOC: "TSSOC"
370, // T_FIELD_MAXCELLTEMP: "TMAX"
375, // T_FIELD_TIREFL: "TTFL"
380, // T_FIELD_TIREFR: "TTFR"
385, // T_FIELD_TIRERL: "TTRL"
390, // T_FIELD_TIRERR: "TTRR"
365, // T_FIELD_LAPCOUNT: "LAPS"
234, // T_FIELD_INICHKSTATE: "ICSTATE"
325, // T_FIELD_ERR: "ERROR"
424, // T_FIELD_SDC: "SDC"
250, // T_FIELD_INVRREADY: "INVRRDY"
242, // T_FIELD_INVLREADY: "INVLRDY"
274, // T_FIELD_R2DPROGRESS: "R2DPROG"
258, // T_FIELD_ACTIVEMISSION: "MISSION"
218, // T_FIELD_ASSTATE: "ASSTATE"
290, // T_FIELD_TSSTATE: "TSSTATE"
216, // T_NUMBERWILDCARD: "<>"
216, // T_DEFAULTWILDCARD_CENTERED: "<>"
216, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>"
408, // T_FIELD_TSCURRENT: "ITS"
395, // T_FIELD_MINCELLVOLT: "VMIN"
343, // T_FIELD_SPEED: "SPEED"
141, // T_INSPECTION_HUGE: "Inspection"
207, // T_EBS_HUGE: "EBS Test"
163, // T_TRACKDRIVE_HUGE: "Trackdrive"
184, // T_AUTOX_HUGE: "Autocross"
282, // T_SKIDPAD_HUGE: "Skidpad"
128, // T_ACCEL_HUGE: "Acceleration"
17, // T_INVALID_HUGE: "Invalid Mission!"
98, // T_MANUAL: "Manual Driving"
141, // T_INSPECTION: "Inspection"
207, // T_EBS: "EBS Test"
163, // T_TRACKDRIVE: "Trackdrive"
184, // T_AUTOX: "Autocross"
282, // T_SKIDPAD: "Skidpad"
128, // T_ACCEL: "Acceleration"
360, // T___SINGLEUSE_E6D7: "INIT"
216, // T___SINGLEUSE_ZEKA: "<>"
113, // T___SINGLEUSE_0L75: "Pressure Rear:"
82, // T___SINGLEUSE_GA13: "Pressure Front:"
216, // T___SINGLEUSE_THUG: "<>"
216, // T___SINGLEUSE_CO7A: "<>"
216, // T___SINGLEUSE_A0LF: "<>"
216, // T___SINGLEUSE_166C: "<>"
66, // T___SINGLEUSE_OOU3: "Pressure Acc B:"
50, // T___SINGLEUSE_2FPP: "Pressure Acc A:"
216, // T___SINGLEUSE_2S21: "<>"
216, // T___SINGLEUSE_OQ6P: "<>"
266, // T___SINGLEUSE_590R: "MSPEED:"
226, // T___SINGLEUSE_Z78U: "DSPEED:"
216, // T___SINGLEUSE_LLOZ: "<>"
216, // T___SINGLEUSE_232C: "<>"
337, // T___SINGLEUSE_JFR7: "MANG:"
319, // T___SINGLEUSE_3MDX: "DANG:"
16, // T___SINGLEUSE_F9I5: ""
216, // T___SINGLEUSE_9L8R: "<>"
16, // T___SINGLEUSE_1NKF: ""
216, // T___SINGLEUSE_J5UH: "<>"
416, // T___SINGLEUSE_NGUK: "R2D"
216, // T___SINGLEUSE_4E84: "<>"
216, // T___SINGLEUSE_YTAB: "<>"
152, // T___SINGLEUSE_RWCE: "PARAMETERS"
194, // T___SINGLEUSE_HMH2: "PRECHARGE"
204, // T___SINGLEUSE_PHFD: "<>%"
298, // T___SINGLEUSE_H6UX: "BRAKES"
216, // T___SINGLEUSE_20H3: "<>"
34, // T___SINGLEUSE_M5X7: "Invalid Mission"
0 // T___SINGLEUSE_6GPV: "Choose a mission"
557, // T_LV: "LV"
421, // T_PDU: "PDU"
549, // T_SCS: "SCS"
553, // T_SDC: "SDC"
545, // T_R2D: "R2D"
542, // T_TS: "TS"
537, // T_INV: "INV"
409, // T_AMS: "AMS"
252, // T_ERROR_AMS: "AMS ErrOr"
217, // T_DEBUGVIEWFIELD_TITLE: "<>"
217, // T_DRIVERVIEWFIELD_TITLE: "<>"
217, // T_NUMBERSMALLWILDCARD: "<>"
479, // T_FIELD_BBAL: "BBAL"
400, // T_FIELD_TSVOLTVEH: "TSVVEH"
393, // T_FIELD_TSVOLTBAT: "TSVBAT"
449, // T_FIELD_LVSOC: "LVSOC"
473, // T_FIELD_TSSOC: "TSSOC"
494, // T_FIELD_MAXCELLTEMP: "TMAX"
504, // T_FIELD_TIREFL: "TTFL"
509, // T_FIELD_TIREFR: "TTFR"
514, // T_FIELD_TIRERL: "TTRL"
519, // T_FIELD_TIRERR: "TTRR"
489, // T_FIELD_LAPCOUNT: "LAPS"
322, // T_FIELD_INICHKSTATE: "ICSTATE"
443, // T_FIELD_ERR: "ERROR"
553, // T_FIELD_SDC: "SDC"
338, // T_FIELD_INVRREADY: "INVRRDY"
330, // T_FIELD_INVLREADY: "INVLRDY"
362, // T_FIELD_R2DPROGRESS: "R2DPROG"
346, // T_FIELD_ACTIVEMISSION: "MISSION"
306, // T_FIELD_ASSTATE: "ASSTATE"
378, // T_FIELD_TSSTATE: "TSSTATE"
217, // T_NUMBERWILDCARD: "<>"
217, // T_DEFAULTWILDCARD_CENTERED: "<>"
217, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>"
541, // T_FIELD_TSCURRENT: "ITS"
524, // T_FIELD_MINCELLVOLT: "VMIN"
467, // T_FIELD_SPEED: "SPEED"
219, // T_INSPECTION_HUGE: "Inspection"
297, // T_EBS_HUGE: "EBS Test"
241, // T_TRACKDRIVE_HUGE: "Trackdrive"
262, // T_AUTOX_HUGE: "Autocross"
370, // T_SKIDPAD_HUGE: "Skidpad"
163, // T_ACCEL_HUGE: "Acceleration"
52, // T_INVALID_HUGE: "Invalid Mission!"
133, // T_MANUAL: "Manual Driving"
219, // T_INSPECTION: "Inspection"
297, // T_EBS: "EBS Test"
241, // T_TRACKDRIVE: "Trackdrive"
262, // T_AUTOX: "Autocross"
370, // T_SKIDPAD: "Skidpad"
163, // T_ACCEL: "Acceleration"
431, // T___SINGLEUSE_W4YT: "APPS1"
217, // T___SINGLEUSE_SM6H: "<>"
217, // T___SINGLEUSE_8KB4: "<>"
217, // T___SINGLEUSE_P4TL: "<>"
533, // T___SINGLEUSE_CBZ9: "CUR"
495, // T___SINGLEUSE_WQXQ: "MAX"
525, // T___SINGLEUSE_QXG5: "MIN"
217, // T___SINGLEUSE_MBQT: "<>"
217, // T___SINGLEUSE_978V: "<>"
217, // T___SINGLEUSE_H8OI: "<>"
425, // T___SINGLEUSE_6EKV: "APPS0"
217, // T___SINGLEUSE_RK9Z: "<>"
18, // T___SINGLEUSE_UBFH: "APPS CALIBRATION"
217, // T___SINGLEUSE_6EXA: "<>"
545, // T___SINGLEUSE_570K: "R2D"
272, // T___SINGLEUSE_G2S2: "PRECHARGE"
285, // T___SINGLEUSE_B2Q6: "<>?"
282, // T___SINGLEUSE_OP6C: "<>%"
467, // T___SINGLEUSE_1F9T: "SPEED"
461, // T___SINGLEUSE_QAZ3: "POWER"
217, // T___SINGLEUSE_DONW: "<>"
217, // T___SINGLEUSE_4X8X: "<>"
282, // T___SINGLEUSE_FPXE: "<>%"
282, // T___SINGLEUSE_51AZ: "<>%"
202, // T___SINGLEUSE_DJ62: "OVERALL BAT"
176, // T___SINGLEUSE_5W6Y: "LAST LAP BAT"
214, // T___SINGLEUSE_C17G: "AS <>"
407, // T___SINGLEUSE_XFW7: "\n\nAMS"
413, // T___SINGLEUSE_N50J: "\n\nIMD"
529, // T___SINGLEUSE_V38H: "ACC"
499, // T___SINGLEUSE_XC1X: "TSMS"
288, // T___SINGLEUSE_KI1B: "BSPD\nHVD"
189, // T___SINGLEUSE_QNHI: "SDB\nRES\nSDCL"
0, // T___SINGLEUSE_43KA: "DASH\nBOTS\nINERTIA"
419, // T___SINGLEUSE_YRU7: "\n\nPDU"
484, // T___SINGLEUSE_E6D7: "INIT"
217, // T___SINGLEUSE_ZEKA: "<>"
148, // T___SINGLEUSE_0L75: "Pressure Rear:"
117, // T___SINGLEUSE_GA13: "Pressure Front:"
217, // T___SINGLEUSE_THUG: "<>"
217, // T___SINGLEUSE_CO7A: "<>"
217, // T___SINGLEUSE_A0LF: "<>"
217, // T___SINGLEUSE_166C: "<>"
101, // T___SINGLEUSE_OOU3: "Pressure Acc B:"
85, // T___SINGLEUSE_2FPP: "Pressure Acc A:"
217, // T___SINGLEUSE_2S21: "<>"
217, // T___SINGLEUSE_OQ6P: "<>"
354, // T___SINGLEUSE_590R: "MSPEED:"
314, // T___SINGLEUSE_Z78U: "DSPEED:"
217, // T___SINGLEUSE_LLOZ: "<>"
217, // T___SINGLEUSE_232C: "<>"
455, // T___SINGLEUSE_JFR7: "MANG:"
437, // T___SINGLEUSE_3MDX: "DANG:"
17, // T___SINGLEUSE_F9I5: ""
217, // T___SINGLEUSE_9L8R: "<>"
17, // T___SINGLEUSE_1NKF: ""
217, // T___SINGLEUSE_4E84: "<>"
217, // T___SINGLEUSE_YTAB: "<>"
230, // T___SINGLEUSE_RWCE: "PARAMETERS"
282, // T___SINGLEUSE_PHFD: "<>%"
386, // T___SINGLEUSE_H6UX: "BRAKES"
217, // T___SINGLEUSE_20H3: "<>"
69, // T___SINGLEUSE_M5X7: "Invalid Mission"
35 // T___SINGLEUSE_6GPV: "Choose a mission"
};

View File

@ -60,60 +60,74 @@ extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[];
TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
0x43, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @0 "Choose a mission"
0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x21, 0x0, // @17 "Invalid Mission!"
0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @34 "Invalid Mission"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x41, 0x3a, 0x0, // @50 "Pressure Acc A:"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x42, 0x3a, 0x0, // @66 "Pressure Acc B:"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x3a, 0x0, // @82 "Pressure Front:"
0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x44, 0x72, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x0, // @98 "Manual Driving"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x52, 0x65, 0x61, 0x72, 0x3a, 0x0, // @113 "Pressure Rear:"
0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @128 "Acceleration"
0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @141 "Inspection"
0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x0, // @152 "PARAMETERS"
0x54, 0x72, 0x61, 0x63, 0x6b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x0, // @163 "Trackdrive"
0x41, 0x4d, 0x53, 0x20, 0x45, 0x72, 0x72, 0x4f, 0x72, 0x0, // @174 "AMS ErrOr"
0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @184 "Autocross"
0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @194 "PRECHARGE"
0x2, 0x25, 0x0, // @204 "<>%"
0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @207 "EBS Test"
0x2, 0x0, // @216 "<>"
0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @218 "ASSTATE"
0x44, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @226 "DSPEED:"
0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @234 "ICSTATE"
0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @242 "INVLRDY"
0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @250 "INVRRDY"
0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @258 "MISSION"
0x4d, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @266 "MSPEED:"
0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @274 "R2DPROG"
0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @282 "Skidpad"
0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @290 "TSSTATE"
0x42, 0x52, 0x41, 0x4b, 0x45, 0x53, 0x0, // @298 "BRAKES"
0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @305 "TSVBAT"
0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @312 "TSVVEH"
0x44, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @319 "DANG:"
0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @325 "ERROR"
0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @331 "LVSOC"
0x4d, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @337 "MANG:"
0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @343 "SPEED"
0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @349 "TSSOC"
0x42, 0x42, 0x41, 0x4c, 0x0, // @355 "BBAL"
0x49, 0x4e, 0x49, 0x54, 0x0, // @360 "INIT"
0x4c, 0x41, 0x50, 0x53, 0x0, // @365 "LAPS"
0x54, 0x4d, 0x41, 0x58, 0x0, // @370 "TMAX"
0x54, 0x54, 0x46, 0x4c, 0x0, // @375 "TTFL"
0x54, 0x54, 0x46, 0x52, 0x0, // @380 "TTFR"
0x54, 0x54, 0x52, 0x4c, 0x0, // @385 "TTRL"
0x54, 0x54, 0x52, 0x52, 0x0, // @390 "TTRR"
0x56, 0x4d, 0x49, 0x4e, 0x0, // @395 "VMIN"
0x41, 0x4d, 0x53, 0x0, // @400 "AMS"
0x49, 0x4e, 0x56, 0x0, // @404 "INV"
0x49, 0x54, 0x53, 0x0, // @408 "ITS"
0x50, 0x44, 0x55, 0x0, // @412 "PDU"
0x52, 0x32, 0x44, 0x0, // @416 "R2D"
0x53, 0x43, 0x53, 0x0, // @420 "SCS"
0x53, 0x44, 0x43, 0x0, // @424 "SDC"
0x4c, 0x56, 0x0 // @428 "LV"
0x44, 0x41, 0x53, 0x48, 0xa, 0x42, 0x4f, 0x54, 0x53, 0xa, 0x49, 0x4e, 0x45, 0x52, 0x54, 0x49, 0x41, 0x0, // @0 "DASH\nBOTS\nINERTIA"
0x41, 0x50, 0x50, 0x53, 0x20, 0x43, 0x41, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x0, // @18 "APPS CALIBRATION"
0x43, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @35 "Choose a mission"
0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x21, 0x0, // @52 "Invalid Mission!"
0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @69 "Invalid Mission"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x41, 0x3a, 0x0, // @85 "Pressure Acc A:"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x42, 0x3a, 0x0, // @101 "Pressure Acc B:"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x3a, 0x0, // @117 "Pressure Front:"
0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x44, 0x72, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x0, // @133 "Manual Driving"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x52, 0x65, 0x61, 0x72, 0x3a, 0x0, // @148 "Pressure Rear:"
0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @163 "Acceleration"
0x4c, 0x41, 0x53, 0x54, 0x20, 0x4c, 0x41, 0x50, 0x20, 0x42, 0x41, 0x54, 0x0, // @176 "LAST LAP BAT"
0x53, 0x44, 0x42, 0xa, 0x52, 0x45, 0x53, 0xa, 0x53, 0x44, 0x43, 0x4c, 0x0, // @189 "SDB\nRES\nSDCL"
0x4f, 0x56, 0x45, 0x52, 0x41, 0x4c, 0x4c, 0x20, 0x42, 0x41, 0x54, 0x0, // @202 "OVERALL BAT"
0x41, 0x53, 0x20, 0x2, 0x0, // @214 "AS <>"
0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @219 "Inspection"
0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x0, // @230 "PARAMETERS"
0x54, 0x72, 0x61, 0x63, 0x6b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x0, // @241 "Trackdrive"
0x41, 0x4d, 0x53, 0x20, 0x45, 0x72, 0x72, 0x4f, 0x72, 0x0, // @252 "AMS ErrOr"
0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @262 "Autocross"
0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @272 "PRECHARGE"
0x2, 0x25, 0x0, // @282 "<>%"
0x2, 0xb0, 0x0, // @285 "<>?"
0x42, 0x53, 0x50, 0x44, 0xa, 0x48, 0x56, 0x44, 0x0, // @288 "BSPD\nHVD"
0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @297 "EBS Test"
0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @306 "ASSTATE"
0x44, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @314 "DSPEED:"
0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @322 "ICSTATE"
0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @330 "INVLRDY"
0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @338 "INVRRDY"
0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @346 "MISSION"
0x4d, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @354 "MSPEED:"
0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @362 "R2DPROG"
0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @370 "Skidpad"
0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @378 "TSSTATE"
0x42, 0x52, 0x41, 0x4b, 0x45, 0x53, 0x0, // @386 "BRAKES"
0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @393 "TSVBAT"
0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @400 "TSVVEH"
0xa, 0xa, 0x41, 0x4d, 0x53, 0x0, // @407 "\n\nAMS"
0xa, 0xa, 0x49, 0x4d, 0x44, 0x0, // @413 "\n\nIMD"
0xa, 0xa, 0x50, 0x44, 0x55, 0x0, // @419 "\n\nPDU"
0x41, 0x50, 0x50, 0x53, 0x30, 0x0, // @425 "APPS0"
0x41, 0x50, 0x50, 0x53, 0x31, 0x0, // @431 "APPS1"
0x44, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @437 "DANG:"
0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @443 "ERROR"
0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @449 "LVSOC"
0x4d, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @455 "MANG:"
0x50, 0x4f, 0x57, 0x45, 0x52, 0x0, // @461 "POWER"
0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @467 "SPEED"
0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @473 "TSSOC"
0x42, 0x42, 0x41, 0x4c, 0x0, // @479 "BBAL"
0x49, 0x4e, 0x49, 0x54, 0x0, // @484 "INIT"
0x4c, 0x41, 0x50, 0x53, 0x0, // @489 "LAPS"
0x54, 0x4d, 0x41, 0x58, 0x0, // @494 "TMAX"
0x54, 0x53, 0x4d, 0x53, 0x0, // @499 "TSMS"
0x54, 0x54, 0x46, 0x4c, 0x0, // @504 "TTFL"
0x54, 0x54, 0x46, 0x52, 0x0, // @509 "TTFR"
0x54, 0x54, 0x52, 0x4c, 0x0, // @514 "TTRL"
0x54, 0x54, 0x52, 0x52, 0x0, // @519 "TTRR"
0x56, 0x4d, 0x49, 0x4e, 0x0, // @524 "VMIN"
0x41, 0x43, 0x43, 0x0, // @529 "ACC"
0x43, 0x55, 0x52, 0x0, // @533 "CUR"
0x49, 0x4e, 0x56, 0x0, // @537 "INV"
0x49, 0x54, 0x53, 0x0, // @541 "ITS"
0x52, 0x32, 0x44, 0x0, // @545 "R2D"
0x53, 0x43, 0x53, 0x0, // @549 "SCS"
0x53, 0x44, 0x43, 0x0, // @553 "SDC"
0x4c, 0x56, 0x0 // @557 "LV"
};
TEXT_LOCATION_FLASH_PRAGMA

View File

@ -13,6 +13,7 @@ extern touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp();
extern touchgfx::GeneratedFont& getFont_verdanab_20_4bpp();
extern touchgfx::GeneratedFont& getFont_lucon_TTF_33_4bpp();
extern touchgfx::GeneratedFont& getFont_lucon_TTF_20_4bpp();
extern touchgfx::GeneratedFont& getFont_lucon_TTF_80_4bpp();
const touchgfx::Font* touchgfx_fonts[] = {
&(getFont_verdana_20_4bpp()),
@ -22,7 +23,8 @@ const touchgfx::Font* touchgfx_fonts[] = {
&(getFont_lucon_TTF_50_4bpp()),
&(getFont_verdanab_20_4bpp()),
&(getFont_lucon_TTF_33_4bpp()),
&(getFont_lucon_TTF_20_4bpp())
&(getFont_lucon_TTF_20_4bpp()),
&(getFont_lucon_TTF_80_4bpp())
};
extern const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[];
@ -82,6 +84,41 @@ const touchgfx::TypedText::TypedTextData typedText_database_GB[] TEXT_LOCATION_F
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
@ -103,12 +140,9 @@ const touchgfx::TypedText::TypedTextData typedText_database_GB[] TEXT_LOCATION_F
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
@ -169,6 +203,41 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
@ -190,12 +259,9 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
@ -260,6 +326,9 @@ void resetFont(touchgfx::FontId fontId)
case 7:
touchgfx_fonts[7] = &(getFont_lucon_TTF_20_4bpp());
break;
case 8:
touchgfx_fonts[8] = &(getFont_lucon_TTF_80_4bpp());
break;
}
}
} // namespace TypedTextDatabase

View File

@ -51,6 +51,7 @@ protected:
AMIDataField measuredSpeedField;
touchgfx::Unicode::UnicodeChar progressBuffer[16];
touchgfx::Unicode::UnicodeChar asOKBuffer[16];
touchgfx::Shape<3> cones[NUM_CONES] = {cone0, cone1, cone2, cone3, cone4,
cone5, cone6, cone7, cone8, cone9};
};

View File

@ -0,0 +1,40 @@
#ifndef APPSPRESENTER_HPP
#define APPSPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class APPSView;
class APPSPresenter : public touchgfx::Presenter, public ModelListener {
public:
APPSPresenter(APPSView &v);
/**
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate() override;
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate() override;
virtual ~APPSPresenter() {}
void nextScreen() override;
void vehicleStateUpdated() override;
void paramConfirmed() override;
private:
APPSPresenter();
APPSView &view;
};
#endif // APPSPRESENTER_HPP

View File

@ -0,0 +1,45 @@
#ifndef APPSVIEW_HPP
#define APPSVIEW_HPP
#include "params.h"
#include <gui/apps_screen/APPSPresenter.hpp>
#include <gui_generated/apps_screen/APPSViewBase.hpp>
class APPSView : public APPSViewBase {
public:
static constexpr int FIELD_COUNT = 4;
APPSView();
virtual ~APPSView() {}
virtual void setupScreen();
virtual void tearDownScreen();
void selectPrevField() override;
void selectNextField() override;
void decField() override;
void incField() override;
void confirmField() override;
void switchPrecision() override;
void abxParamConfirmed(ParamType param);
void updateFieldValues();
void addGraphPoints(float apps0, float apps1);
protected:
private:
int selectedField;
float precision = 0.001f;
bool fieldsDirty[FIELD_COUNT] = {false};
ParamType fieldParams[FIELD_COUNT] = {PF_APPS0_MIN, PF_APPS0_MAX,
PF_APPS1_MIN, PF_APPS1_MAX};
touchgfx::TextAreaWithOneWildcard *fieldWidgets[FIELD_COUNT] = {nullptr};
touchgfx::Box *fieldBackgrounds[FIELD_COUNT] = {nullptr};
touchgfx::Unicode::UnicodeChar fieldBuffers[FIELD_COUNT][16];
touchgfx::Unicode::UnicodeChar apps0Buffer[16];
touchgfx::Unicode::UnicodeChar apps1Buffer[16];
};
#endif // APPSVIEW_HPP

View File

@ -0,0 +1,25 @@
#ifndef PROGRESSBAR_HPP
#define PROGRESSBAR_HPP
#include <gui_generated/containers/ProgressBarBase.hpp>
enum class ProgressType { PRECHARGE, R2D };
class ProgressBar : public ProgressBarBase {
public:
ProgressBar();
virtual ~ProgressBar() {}
virtual void initialize();
void update();
protected:
private:
touchgfx::Unicode::UnicodeChar r2dProgBuffer[16];
touchgfx::Unicode::UnicodeChar socBuffer[4];
void setProgress(bool active, ProgressType type, float progress);
};
#endif // PROGRESSBAR_HPP

View File

@ -3,15 +3,11 @@
#include "gui/common/NamedField.hpp"
#include "gui/containers/DriverViewFieldSelection.hpp"
#include "touchgfx/Unicode.hpp"
#include "touchgfx/containers/scrollers/DrawableList.hpp"
#include <gui/driverview_screen/DriverViewPresenter.hpp>
#include <gui_generated/driverview_screen/DriverViewViewBase.hpp>
#include "vehicle_state.h"
enum class DriverViewProgressType { PRECHARGE, R2D };
class DriverViewView : public DriverViewViewBase {
public:
DriverViewView();
@ -28,7 +24,7 @@ public:
void setTemps(const Temperatures &temps);
void setTSSoC(uint8_t soc);
void setProgress(bool active, DriverViewProgressType type, float progress);
void updateProgress();
void showAMSError();
void clearErrorPopup();
@ -53,7 +49,6 @@ private:
size_t selectedFieldIndex;
DataFieldType fieldTypes[NUM_FIELDS];
touchgfx::Unicode::UnicodeChar r2dProgBuffer[16];
touchgfx::Unicode::UnicodeChar socBuffer[4];
};

View File

@ -0,0 +1,39 @@
#ifndef ENDURANCEPRESENTER_HPP
#define ENDURANCEPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class EnduranceView;
class EndurancePresenter : public touchgfx::Presenter, public ModelListener {
public:
EndurancePresenter(EnduranceView &v);
/**
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate() override;
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate() override;
virtual ~EndurancePresenter() {}
void vehicleStateUpdated() override;
void nextScreen() override;
private:
EndurancePresenter();
EnduranceView &view;
};
#endif // ENDURANCEPRESENTER_HPP

View File

@ -0,0 +1,79 @@
#ifndef ENDURANCEVIEW_HPP
#define ENDURANCEVIEW_HPP
#include "touchgfx/Unicode.hpp"
#include "touchgfx/widgets/BoxWithBorder.hpp"
#include "touchgfx/widgets/TextAreaWithWildcard.hpp"
#include <cstddef>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui_generated/endurance_screen/EnduranceViewBase.hpp>
class BatDelta {
public:
BatDelta(touchgfx::BoxWithBorder &box,
touchgfx::TextAreaWithOneWildcard &field);
void setBox(touchgfx::BoxWithBorder &box);
void setField(touchgfx::TextAreaWithOneWildcard &field);
void setDelta(float delta);
protected:
touchgfx::BoxWithBorder &box;
touchgfx::TextAreaWithOneWildcard &field;
touchgfx::Unicode::UnicodeChar buffer[16];
int value;
};
class ValueBuffer {
public:
ValueBuffer(touchgfx::TextAreaWithOneWildcard &field, size_t intDigits,
size_t decimalDigits);
void setField(touchgfx::TextAreaWithOneWildcard &field);
void setIntValue(int value);
void setFloatValue(float value);
protected:
touchgfx::TextAreaWithOneWildcard &field;
touchgfx::Unicode::UnicodeChar buffer[16];
size_t intDigits;
size_t decimalDigits;
union {
int i;
float f;
} value;
};
class EnduranceView : public EnduranceViewBase {
public:
EnduranceView();
virtual ~EnduranceView() {}
virtual void setupScreen() override;
virtual void tearDownScreen() override;
void updateBatDelta();
void updateDetails();
void updateProgress();
void decreasePowerLimit() override;
void increasePowerLimit() override;
void decreaseSpeedLimit() override;
void increaseSpeedLimit() override;
protected:
BatDelta lastLapDelta;
BatDelta overallDelta;
ValueBuffer plimBuffer;
ValueBuffer slimBuffer;
ValueBuffer socBuffer;
ValueBuffer tbatBuffer;
bool limitsChangable();
};
#endif // ENDURANCEVIEW_HPP

View File

@ -0,0 +1,39 @@
#ifndef SDCPRESENTER_HPP
#define SDCPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class SDCView;
class SDCPresenter : public touchgfx::Presenter, public ModelListener {
public:
SDCPresenter(SDCView &v);
/**
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate() override;
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate() override;
virtual ~SDCPresenter() {}
void vehicleStateUpdated() override;
void nextScreen() override;
private:
SDCPresenter();
SDCView &view;
};
#endif // SDCPRESENTER_HPP

View File

@ -0,0 +1,33 @@
#ifndef SDCVIEW_HPP
#define SDCVIEW_HPP
#include "gui/containers/DriverViewStatusItem.hpp"
#include "touchgfx/Color.hpp"
#include "touchgfx/hal/Types.hpp"
#include <gui/sdc_screen/SDCPresenter.hpp>
#include <gui_generated/sdc_screen/SDCViewBase.hpp>
class SDCView : public SDCViewBase {
public:
SDCView();
virtual ~SDCView() {}
virtual void setupScreen();
virtual void tearDownScreen();
void setPDUClosed(bool closed);
void setInertiaClosed(bool closed);
void setIMDClosed(bool closed);
void setAMSClosed(bool closed);
void setSDCLClosed(bool closed);
void setHVBClosed(bool closed);
void setTSMSClosed(bool closed);
void setAccClosed(bool closed);
protected:
inline touchgfx::colortype getColor(bool closed) {
return closed ? DriverViewStatusItem::COLOR_OK
: DriverViewStatusItem::COLOR_ERROR;
}
};
#endif // SDCVIEW_HPP

View File

@ -37,5 +37,5 @@ void AMIPresenter::vehicleStateUpdated() {
void AMIPresenter::nextScreen() {
FrontendApplication *app =
static_cast<FrontendApplication *>(FrontendApplication::getInstance());
app->gotoDebugViewScreenNoTransition();
app->gotoSDCScreenNoTransition();
}

View File

@ -111,6 +111,9 @@ void AMIView::updateDataFields() {
void AMIView::setJetsonTimeout(bool timeout) {
if (timeout) {
desiredAngle.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0, 0));
touchgfx::Unicode::fromUTF8((const uint8_t *)"TIMEOUT", asOKBuffer,
sizeof(asOKBuffer) / sizeof(*asOKBuffer));
asOK.setWildcard(asOKBuffer);
} else {
desiredAngle.setColor(touchgfx::Color::getColorFromRGB(0xFF, 0xFF, 0xFF));
}

View File

@ -0,0 +1,28 @@
#include "stm32h7xx_hal.h"
#include <gui/apps_screen/APPSPresenter.hpp>
#include <gui/apps_screen/APPSView.hpp>
APPSPresenter::APPSPresenter(APPSView &v) : view(v) {}
void APPSPresenter::activate() {}
void APPSPresenter::deactivate() {}
void APPSPresenter::nextScreen() {
static_cast<FrontendApplication *>(Application::getInstance())
->gotoSDCScreenNoTransition();
}
void APPSPresenter::vehicleStateUpdated() {
static uint32_t last_graph_update = 0;
view.updateFieldValues();
if (HAL_GetTick() - last_graph_update > 100) {
view.addGraphPoints(vehicle_state.apps0_out, vehicle_state.apps1_out);
last_graph_update = HAL_GetTick();
}
}
void APPSPresenter::paramConfirmed() {
view.abxParamConfirmed(vehicle_state.last_param_confirmed);
}

View File

@ -0,0 +1,137 @@
#include "params.h"
#include "touchgfx/Color.hpp"
#include "vehicle_state.h"
#include <gui/apps_screen/APPSView.hpp>
APPSView::APPSView() : selectedField{-1} {
for (size_t i = 0; i < FIELD_COUNT; i++) {
fieldsDirty[i] = false;
}
fieldWidgets[0] = &apps0min;
fieldWidgets[1] = &apps0max;
fieldWidgets[2] = &apps1min;
fieldWidgets[3] = &apps1max;
fieldBackgrounds[0] = &apps0min_bg;
fieldBackgrounds[1] = &apps0max_bg;
fieldBackgrounds[2] = &apps1min_bg;
fieldBackgrounds[3] = &apps1max_bg;
params.apps0_min = vehicle_state.apps0_min;
params.apps0_max = vehicle_state.apps0_max;
params.apps1_min = vehicle_state.apps1_min;
params.apps1_max = vehicle_state.apps1_max;
}
void APPSView::setupScreen() { APPSViewBase::setupScreen(); }
void APPSView::tearDownScreen() { APPSViewBase::tearDownScreen(); }
void APPSView::selectPrevField() {
if (selectedField != -1) {
fieldBackgrounds[selectedField]->setVisible(false);
fieldBackgrounds[selectedField]->invalidate();
}
if (selectedField == -1) {
selectedField = FIELD_COUNT - 1;
} else {
selectedField = (selectedField - 1) % FIELD_COUNT;
}
fieldBackgrounds[selectedField]->setVisible(true);
fieldBackgrounds[selectedField]->invalidate();
}
void APPSView::selectNextField() {
if (selectedField != -1) {
fieldBackgrounds[selectedField]->setVisible(false);
fieldBackgrounds[selectedField]->invalidate();
}
selectedField = (selectedField + 1) % FIELD_COUNT;
fieldBackgrounds[selectedField]->setVisible(true);
fieldBackgrounds[selectedField]->invalidate();
}
void APPSView::decField() {
if (selectedField == -1) {
return;
}
fieldsDirty[selectedField] = true;
params_dec(fieldParams[selectedField]);
}
void APPSView::incField() {
if (selectedField == -1) {
return;
}
fieldsDirty[selectedField] = true;
params_inc(fieldParams[selectedField]);
}
void APPSView::confirmField() {
if (selectedField == -1) {
return;
}
params_broadcast(fieldParams[selectedField]);
}
void APPSView::switchPrecision() {
if (precision == 0.001f) {
precision = 0.01f;
} else {
precision = 0.001f;
}
for (ParamType &param : fieldParams) {
param_steps[param] = precision;
}
}
void APPSView::abxParamConfirmed(ParamType param) {
for (size_t i = 0; i < FIELD_COUNT; i++) {
if (fieldParams[i] == param) {
fieldsDirty[i] = false;
}
}
}
void APPSView::updateFieldValues() {
float values[FIELD_COUNT];
values[0] = vehicle_state.apps0_min;
values[1] = vehicle_state.apps0_max;
values[2] = vehicle_state.apps1_min;
values[3] = vehicle_state.apps1_max;
for (size_t i = 0; i < FIELD_COUNT; i++) {
auto &buf = fieldBuffers[i];
if (fieldsDirty[i]) {
values[i] = params.valuesFloat[fieldParams[i]];
fieldWidgets[i]->setColor(
touchgfx::Color::getColorFromRGB(0xff, 0x00, 0x00));
} else {
fieldWidgets[i]->setColor(
touchgfx::Color::getColorFromRGB(0xff, 0xff, 0xff));
}
touchgfx::Unicode::snprintfFloat(buf, sizeof(buf) / sizeof(*buf), "%5.3f",
values[i]);
fieldWidgets[i]->setWildcard(buf);
fieldWidgets[i]->invalidate();
}
touchgfx::Unicode::snprintfFloat(apps0Buffer,
sizeof(apps0Buffer) / sizeof(*apps0Buffer),
"%5.3f", vehicle_state.apps0_volt);
apps0cur.setWildcard(apps0Buffer);
apps0cur.invalidate();
touchgfx::Unicode::snprintfFloat(apps1Buffer,
sizeof(apps1Buffer) / sizeof(*apps1Buffer),
"%5.3f", vehicle_state.apps1_volt);
apps1cur.setWildcard(apps1Buffer);
apps1cur.invalidate();
}
void APPSView::addGraphPoints(float apps0, float apps1) {
apps0Graph.addDataPoint(apps0 * 100);
apps1Graph.addDataPoint(apps1 * 100);
apps0Graph.invalidate();
apps1Graph.invalidate();
}

View File

@ -275,13 +275,30 @@ static_assert(sizeof(dataFieldDescs) / sizeof(dataFieldDescs[0]) ==
NamedFieldDescription paramFieldDescs[] = {
[PF_BBAL] = {NamedFieldKind::Float, "BBAL", 2, 1, PARAM_FIELD(bbal)},
[PF_SLIPREF] = {NamedFieldKind::Float, "SLIPREF", 2, 2,
PARAM_FIELD(slipref)},
[PF_MUMAX] = {NamedFieldKind::Float, "MUMAX", 2, 1, PARAM_FIELD(mumax)},
[PF_ASRP] = {NamedFieldKind::Int, "ASR-P", 2, 0, PARAM_FIELD(asrp)},
[PF_ASRON] = {NamedFieldKind::Int, "ASR-ON", 2, 0, PARAM_FIELD(asron)},
[PF_ASRI] = {NamedFieldKind::Int, "ASR-I", 2, 0, PARAM_FIELD(asri)},
[PF_PLIM] = {NamedFieldKind::Int, "PLIM", 2, 0, PARAM_FIELD(plim)},
[PF_TORQUE] = {NamedFieldKind::Float, "TSCALE", 3, 1, PARAM_FIELD(torque)},
[PF_SLIM] = {NamedFieldKind::Int, "SLIM", 2, 0, PARAM_FIELD(slim)},
[PF_APPS0_MIN] = {NamedFieldKind::Float, "APPS0MIN", 3, 1,
PARAM_FIELD(apps0_min)},
[PF_APPS0_MAX] = {NamedFieldKind::Float, "APPS0MAX", 3, 1,
PARAM_FIELD(apps0_max)},
[PF_APPS1_MIN] = {NamedFieldKind::Float, "APPS1MIN", 3, 1,
PARAM_FIELD(apps1_min)},
[PF_APPS1_MAX] = {NamedFieldKind::Float, "APPS1MAX", 3, 1,
PARAM_FIELD(apps1_max)},
[PF_TV] = {NamedFieldKind::Int, "TV", 3, 0, PARAM_FIELD(tv)},
[PF_TC] = {NamedFieldKind::Int, "TC", 3, 0, PARAM_FIELD(tc)},
[PF_TC_SLIPREF] = {NamedFieldKind::Float, "TCSLIPREF", 3, 1,
PARAM_FIELD(tc_slipref)},
[PF_TC_MUMAX] = {NamedFieldKind::Float, "TCMUMAX", 3, 1,
PARAM_FIELD(tc_mumax)},
[PF_TC_P] = {NamedFieldKind::Float, "TCP", 3, 1, PARAM_FIELD(tc_p)},
[PF_TC_I] = {NamedFieldKind::Float, "TCI", 3, 1, PARAM_FIELD(tc_i)},
[PF_DRS_CLOSED] = {NamedFieldKind::Float, "DRSCLOSED", 3, 1,
PARAM_FIELD(drs_closed)},
[PF_DRS_OPEN] = {NamedFieldKind::Float, "DRSOPEN", 3, 1,
PARAM_FIELD(drs_open)},
[PF_MAP] = {NamedFieldKind::Int, "MAP", 3, 0, PARAM_FIELD(map)},
};
static_assert(sizeof(paramFieldDescs) / sizeof(paramFieldDescs[0]) ==

View File

@ -0,0 +1,61 @@
#include "gui/common/NamedField.hpp"
#include <gui/containers/ProgressBar.hpp>
ProgressBar::ProgressBar() {}
void ProgressBar::initialize() { ProgressBarBase::initialize(); }
void ProgressBar::update() {
if (vehicle_state.ts_state == TS_PRECHARGE) {
float progress = 0;
if (vehicle_state.ts_voltage_bat != 0) {
progress =
vehicle_state.ts_voltage_veh / vehicle_state.ts_voltage_bat * 100;
}
setProgress(true, ProgressType::PRECHARGE, progress);
} else if (vehicle_state.r2d_progress > R2D_TSACTIVE &&
vehicle_state.r2d_progress < R2D_INIT_SUCCESS) {
setProgress(true, ProgressType::R2D, vehicle_state.r2d_progress);
} else {
setProgress(false, ProgressType::PRECHARGE, 0);
}
}
void ProgressBar::setProgress(bool active, ProgressType type, float progress) {
if (active) {
switch (type) {
case ProgressType::PRECHARGE:
prechargeLabel.setVisible(true);
r2dLabel.setVisible(false);
r2dProgressLabel.setVisible(false);
progressBar.setValue(progress);
break;
case ProgressType::R2D:
const char *progText = static_cast<const char *>(get_r2dprog_text());
touchgfx::Unicode::strncpy(r2dProgBuffer, progText,
sizeof(r2dProgBuffer) /
sizeof(*r2dProgBuffer));
r2dProgressLabel.setWildcard(r2dProgBuffer);
r2dProgressLabel.setVisible(true);
r2dLabel.setVisible(true);
prechargeLabel.setVisible(false);
progress = progress - R2D_TSACTIVE;
progressBar.setValue(progress * 100 / 5);
break;
}
prechargeLabel.invalidate();
r2dProgressLabel.invalidate();
r2dLabel.invalidate();
progressBar.setVisible(true);
progressBar.invalidate();
} else if (progressBar.isVisible()) {
prechargeLabel.setVisible(false);
prechargeLabel.invalidate();
r2dLabel.setVisible(false);
r2dLabel.invalidate();
r2dProgressLabel.setVisible(false);
r2dProgressLabel.invalidate();
progressBar.setVisible(false);
progressBar.invalidate();
}
}

View File

@ -2,6 +2,7 @@
#include <gui/driverview_screen/DriverViewView.hpp>
#include "gui/common/NamedField.hpp"
#include "gui/containers/ProgressBar.hpp"
constexpr int32_t SHOW_ERRORS_FOR = 10000; // ms
@ -24,7 +25,7 @@ void DriverViewPresenter::deactivate() {}
void DriverViewPresenter::vehicleStateUpdated() {
view.setTemps(vehicle_state.temps);
view.setTSSoC(vehicle_state.soc_ts);
updateProgress();
view.updateProgress();
updateErrorPopup();
view.updateFieldValues();
@ -41,23 +42,6 @@ void DriverViewPresenter::setFieldType(size_t i, DataFieldType type) {
view.setFieldType(i, type);
}
void DriverViewPresenter::updateProgress() {
if (vehicle_state.ts_state == TS_PRECHARGE) {
float progress = 0;
if (vehicle_state.ts_voltage_bat != 0) {
progress =
vehicle_state.ts_voltage_veh / vehicle_state.ts_voltage_bat * 100;
}
view.setProgress(true, DriverViewProgressType::PRECHARGE, progress);
} else if (vehicle_state.r2d_progress > R2D_TSACTIVE &&
vehicle_state.r2d_progress < R2D_INIT_SUCCESS) {
view.setProgress(true, DriverViewProgressType::R2D,
vehicle_state.r2d_progress);
} else {
view.setProgress(false, DriverViewProgressType::PRECHARGE, 0);
}
}
void DriverViewPresenter::updateErrorPopup() {
static uint32_t last_error = 0;
if (vehicle_state.ts_state == TS_ERROR) {

View File

@ -1,8 +1,8 @@
#include "gui/common/NamedField.hpp"
#include "gui/containers/DriverViewField.hpp"
#include "gui/containers/DriverViewStatusItem.hpp"
#include "gui/containers/ProgressBar.hpp"
#include "gui/driverview_screen/DriverViewPresenter.hpp"
#include "texts/TextKeysAndLanguages.hpp"
#include "touchgfx/Callback.hpp"
#include "touchgfx/Drawable.hpp"
#include "touchgfx/Unicode.hpp"
@ -96,45 +96,7 @@ void DriverViewView::setTSSoC(uint8_t value) {
socLabel.invalidate();
}
void DriverViewView::setProgress(bool active, DriverViewProgressType type,
float progress) {
if (active) {
switch (type) {
case DriverViewProgressType::PRECHARGE:
prechargeLabel.setVisible(true);
r2dLabel.setVisible(false);
r2dProgressLabel.setVisible(false);
progressBar.setValue(progress);
break;
case DriverViewProgressType::R2D:
const char *progText = static_cast<const char *>(get_r2dprog_text());
touchgfx::Unicode::strncpy(r2dProgBuffer, progText,
sizeof(r2dProgBuffer) /
sizeof(*r2dProgBuffer));
r2dProgressLabel.setWildcard(r2dProgBuffer);
r2dProgressLabel.setVisible(true);
r2dLabel.setVisible(true);
prechargeLabel.setVisible(false);
progress = progress - R2D_TSACTIVE;
progressBar.setValue(progress * 100 / 5);
break;
}
prechargeLabel.invalidate();
r2dProgressLabel.invalidate();
r2dLabel.invalidate();
progressBar.setVisible(true);
progressBar.invalidate();
} else if (progressBar.isVisible()) {
prechargeLabel.setVisible(false);
prechargeLabel.invalidate();
r2dLabel.setVisible(false);
r2dLabel.invalidate();
r2dProgressLabel.setVisible(false);
r2dProgressLabel.invalidate();
progressBar.setVisible(false);
progressBar.invalidate();
}
}
void DriverViewView::updateProgress() { progressBar.update(); }
void DriverViewView::showAMSError() {
errorPopup.setVisible(true);

View File

@ -0,0 +1,20 @@
#include "gui/common/FrontendApplication.hpp"
#include "touchgfx/Application.hpp"
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui/endurance_screen/EnduranceView.hpp>
EndurancePresenter::EndurancePresenter(EnduranceView &v) : view(v) {}
void EndurancePresenter::activate() {}
void EndurancePresenter::deactivate() {}
void EndurancePresenter::vehicleStateUpdated() {
view.updateBatDelta();
view.updateDetails();
}
void EndurancePresenter::nextScreen() {
static_cast<FrontendApplication *>(Application::getInstance())
->gotoDriverViewScreenNoTransition();
}

View File

@ -0,0 +1,174 @@
#include "main.h"
#include "touchgfx/Color.hpp"
#include "touchgfx/Unicode.hpp"
#include "vehicle_state.h"
#include <climits>
#include <cmath>
#include <gui/endurance_screen/EnduranceView.hpp>
#ifndef SIMULATOR
#include "stm32h7xx_hal_gpio.h"
#endif
EnduranceView::EnduranceView()
: lastLapDelta(lastLapBox, lastLapBat),
overallDelta(overallBox, overallBat), plimBuffer(powerLimit, 2, 0),
slimBuffer(speedLimit, 2, 0), socBuffer(soc, 3, 0),
tbatBuffer(batTemp, 2, 1) {}
void EnduranceView::setupScreen() {
EnduranceViewBase::setupScreen();
lastLapDelta.setField(lastLapBat);
lastLapDelta.setBox(lastLapBox);
overallDelta.setField(overallBat);
overallDelta.setBox(overallBox);
plimBuffer.setField(powerLimit);
slimBuffer.setField(speedLimit);
socBuffer.setField(soc);
tbatBuffer.setField(batTemp);
}
void EnduranceView::tearDownScreen() { EnduranceViewBase::tearDownScreen(); }
void EnduranceView::updateBatDelta() {
lastLapDelta.setDelta(vehicle_state.bat_delta_last);
overallDelta.setDelta(vehicle_state.bat_delta_overall);
}
void EnduranceView::updateDetails() {
plimBuffer.setIntValue(vehicle_state.power_limit);
slimBuffer.setIntValue(vehicle_state.speed_limit);
socBuffer.setIntValue(vehicle_state.soc_ts);
tbatBuffer.setFloatValue(vehicle_state.max_cell_temp);
}
void EnduranceView::updateProgress() { progressBar.update(); }
void EnduranceView::decreasePowerLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.power_limit > 15) {
wishlist.power_limit--;
}
}
void EnduranceView::increasePowerLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.power_limit < 40) {
wishlist.power_limit++;
}
}
void EnduranceView::decreaseSpeedLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.speed_limit > 40) {
wishlist.speed_limit--;
}
}
void EnduranceView::increaseSpeedLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.speed_limit < 100) {
wishlist.speed_limit++;
}
}
bool EnduranceView::limitsChangable() {
#ifdef SIMULATOR
return true;
#else
return HAL_GPIO_ReadPin(BTN3_GPIO_Port, BTN3_Pin) == GPIO_PIN_SET;
#endif
}
BatDelta::BatDelta(touchgfx::BoxWithBorder &box,
touchgfx::TextAreaWithOneWildcard &field)
: box(box), field(field), value(INT_MIN) {}
void BatDelta::setField(touchgfx::TextAreaWithOneWildcard &field) {
this->field = field;
}
void BatDelta::setBox(touchgfx::BoxWithBorder &box) { this->box = box; }
void BatDelta::setDelta(float delta) {
int deltaRounded = std::round(delta);
if (deltaRounded == value) {
return;
}
value = deltaRounded;
touchgfx::Unicode::snprintf(buffer, sizeof(buffer) / sizeof(*buffer), "%+3d",
value);
field.setWildcard(buffer);
field.invalidate();
if (value > 10) {
box.setColor(touchgfx::Color::getColorFromRGB(0xa8, 0x08, 0x08));
} else if (value > 5) {
box.setColor(touchgfx::Color::getColorFromRGB(0xc7, 0x71, 0x08));
} else if (value > 0) {
box.setColor(touchgfx::Color::getColorFromRGB(0xdb, 0xb2, 0x0b));
} else if (value > -5) {
box.setColor(touchgfx::Color::getColorFromRGB(0x80, 0xba, 0x14));
} else if (value > -10) {
box.setColor(touchgfx::Color::getColorFromRGB(0x09, 0x96, 0x3b));
} else {
box.setColor(touchgfx::Color::getColorFromRGB(0x05, 0x77, 0xa8));
}
box.invalidate();
}
ValueBuffer::ValueBuffer(touchgfx::TextAreaWithOneWildcard &field,
size_t intDigits, size_t decimalDigits)
: field(field), intDigits(intDigits), decimalDigits(decimalDigits) {
value.f = NAN;
}
void ValueBuffer::setField(touchgfx::TextAreaWithOneWildcard &field) {
this->field = field;
}
void ValueBuffer::setIntValue(int value) {
if (value == this->value.i) {
return;
}
this->value.i = value;
touchgfx::Unicode::snprintf(buffer, sizeof(buffer) / sizeof(*buffer), "%*d",
static_cast<int>(intDigits), value);
field.setWildcard(buffer);
field.invalidate();
}
void ValueBuffer::setFloatValue(float value) {
if (value == this->value.f) {
return;
}
this->value.f = value;
size_t width = intDigits;
if (decimalDigits > 0) {
width += 1 + decimalDigits; // 1 for the decimal point
}
float params[3] = {static_cast<float>(width),
static_cast<float>(decimalDigits), value};
touchgfx::Unicode::snprintfFloats(buffer, sizeof(buffer) / sizeof(*buffer),
"%*.*f", params);
field.setWildcard(buffer);
field.invalidate();
}

View File

@ -27,7 +27,7 @@ void MissionSelectPresenter::vehicleStateUpdated() {
// Do nothing
break;
case MISSION_MANUAL:
app->gotoDriverViewScreenNoTransition();
app->gotoEnduranceScreenNoTransition();
break;
default:
app->gotoAMIScreenNoTransition();
@ -38,7 +38,11 @@ void MissionSelectPresenter::nextScreen() {
FrontendApplication *app =
static_cast<FrontendApplication *>(FrontendApplication::getInstance());
if (app->getBackToMissionSelect()) {
app->gotoAMIScreenNoTransition();
if (vehicle_state.active_mission == MISSION_MANUAL) {
app->gotoEnduranceScreenNoTransition();
} else {
app->gotoAMIScreenNoTransition();
}
return;
}
}

View File

@ -4,7 +4,56 @@
Model::Model() : modelListener(0) {}
#ifdef SIMULATOR
void Model::tick() { modelListener->vehicleStateUpdated(); }
void bounce(float &value, bool &rising, float step, float lower, float upper) {
if (rising) {
value += step;
if (value > upper) {
value = upper;
rising = false;
}
} else {
value -= step;
if (value < lower) {
value = lower;
rising = true;
}
}
}
void Model::tick() {
static float last_lap_delta = 0;
static bool lap_delta_rising = true;
static float overall_delta = 0;
static bool overall_delta_rising = false;
static float power_limit = 20;
static bool power_limit_rising = false;
static float speed_limit = 70;
static bool speed_limit_rising = true;
static float soc = 100;
static bool soc_rising = false;
static float bat_temp = 13;
static bool bat_temp_rising = true;
static int iter = 0;
if (iter++ % 5 != 0) {
return;
}
bounce(last_lap_delta, lap_delta_rising, 0.2, -12, 12);
bounce(overall_delta, overall_delta_rising, 0.1, -12, 12);
bounce(power_limit, power_limit_rising, 0.1, 5, 30);
bounce(speed_limit, speed_limit_rising, 0.2, 50, 100);
bounce(soc, soc_rising, 0.5, 0, 100);
bounce(bat_temp, bat_temp_rising, 0.2, 10, 59);
vehicle_state.bat_delta_last = last_lap_delta;
vehicle_state.bat_delta_overall = overall_delta;
vehicle_state.power_limit = power_limit;
vehicle_state.speed_limit = speed_limit;
vehicle_state.soc_ts = soc;
vehicle_state.max_cell_temp = bat_temp;
vehicle_state.active_mission = MISSION_MANUAL;
modelListener->vehicleStateUpdated();
}
#else
#include "main.h"

View File

@ -0,0 +1,27 @@
#include "gui/common/FrontendApplication.hpp"
#include "vehicle_state.h"
#include <gui/sdc_screen/SDCPresenter.hpp>
#include <gui/sdc_screen/SDCView.hpp>
SDCPresenter::SDCPresenter(SDCView &v) : view(v) {}
void SDCPresenter::activate() { vehicleStateUpdated(); }
void SDCPresenter::deactivate() {}
void SDCPresenter::vehicleStateUpdated() {
view.setPDUClosed(vehicle_state.pdu_sdc_active);
view.setInertiaClosed(vehicle_state.sdcl_state[1]);
view.setIMDClosed(vehicle_state.imd_ok);
view.setAMSClosed(vehicle_state.ts_state != TS_ERROR);
view.setSDCLClosed(vehicle_state.sdcl_state[0]);
view.setHVBClosed(vehicle_state.sdcl_state[2]);
view.setTSMSClosed(true);
view.setAccClosed(vehicle_state.sdc_closed);
}
void SDCPresenter::nextScreen() {
FrontendApplication *app =
static_cast<FrontendApplication *>(FrontendApplication::getInstance());
app->gotoDebugViewScreenNoTransition();
}

View File

@ -0,0 +1,26 @@
#include "gui/driverview_screen/DriverViewView.hpp"
#include <gui/sdc_screen/SDCView.hpp>
SDCView::SDCView() {}
void SDCView::setupScreen() { SDCViewBase::setupScreen(); }
void SDCView::tearDownScreen() { SDCViewBase::tearDownScreen(); }
void SDCView::setPDUClosed(bool closed) { pdu.setColor(getColor(closed)); }
void SDCView::setInertiaClosed(bool closed) {
inertia.setColor(getColor(closed));
}
void SDCView::setIMDClosed(bool closed) { imd.setColor(getColor(closed)); }
void SDCView::setAMSClosed(bool closed) { ams.setColor(getColor(closed)); }
void SDCView::setSDCLClosed(bool closed) { sdcl.setColor(getColor(closed)); }
void SDCView::setHVBClosed(bool closed) { hvb.setColor(getColor(closed)); }
void SDCView::setTSMSClosed(bool closed) { tsms.setColor(getColor(closed)); }
void SDCView::setAccClosed(bool closed) { acc.setColor(getColor(closed)); }

View File

@ -11,7 +11,7 @@ void VehicleConfigPresenter::deactivate() {}
void VehicleConfigPresenter::nextScreen() {
static_cast<FrontendApplication *>(Application::getInstance())
->gotoDebugViewScreenNoTransition();
->gotoAPPSScreenNoTransition();
}
void VehicleConfigPresenter::paramConfirmed() {

View File

@ -12,6 +12,11 @@ makefile_path := $(call qs,$(dir $(call sq,$(abspath $(call sq,$(makefile_name))
# Get path where the Application is
application_path := $(call qs,$(abspath $(call sq,$(makefile_path)../..)))
# Under Windows (MINGW32), the path is returned as e.g. z:/path/to/application
# Since the path may show up as a target in the Makefile, we can't have a colon
# in it. So we replace z:/ with /z/ to avoid this.
subst_drivename = $(shell echo $(1) | sed -e 's!^\([a-zA-Z]\):/!/\1/!')
application_path := $(call subst_drivename,$(application_path))
.PHONY: clean assets all
@ -20,7 +25,7 @@ all clean assets:
$(error Spaces not allowed in path)
else
ADDITIONAL_SOURCES :=
ADDITIONAL_SOURCES := vehicle_state.c
ADDITIONAL_INCLUDE_PATHS := $(application_path)/../Core/Inc
ADDITIONAL_LIBRARY_PATHS :=
ADDITIONAL_LIBRARIES :=
@ -29,6 +34,7 @@ export ADDITIONAL_SOURCES ADDITIONAL_INCLUDE_PATHS ADDITIONAL_LIBRARY_PATHS ADDI
all: $(filter assets,$(MAKECMDGOALS))
all assets: $(filter clean,$(MAKECMDGOALS))
all clean assets:
@echo ADDITIONAL_SOURCES: $(ADDITIONAL_SOURCES)
@$(MAKE) -r -f generated/simulator/gcc/Makefile -s $(MFLAGS) $@ -C "$(application_path)"
endif

View File

@ -49,7 +49,6 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
// Stubs
extern "C" {
VehicleState vehicle_state;
void params_dec(ParamType param) {}
void params_inc(ParamType param) {}
void params_broadcast(ParamType param) {}

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file

1
TouchGFX/vehicle_state.c Symbolic link
View File

@ -0,0 +1 @@
../Core/Src/vehicle_state.c

View File

@ -36,7 +36,7 @@ FDCAN1.NominalTimeSeg1=63
FDCAN1.NominalTimeSeg2=16
FDCAN1.RxFifo0ElmtsNbr=16
FDCAN1.StdFiltersNbr=32
FDCAN1.TxFifoQueueElmtsNbr=1
FDCAN1.TxFifoQueueElmtsNbr=32
File.Version=6
GPIO.groupedBy=Show All
JPEG.IPParameters=JPEG_RGB_FORMAT
@ -152,8 +152,8 @@ Mcu.Pin7=PF2
Mcu.Pin70=VP_TIM1_VS_ClockSourceINT
Mcu.Pin71=VP_TIM2_VS_ClockSourceINT
Mcu.Pin72=VP_TIM17_VS_ClockSourceINT
Mcu.Pin73=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_RTOSJjThreadX_6.1.12_3.0.0
Mcu.Pin74=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0
Mcu.Pin73=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0
Mcu.Pin74=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_RTOSJjThreadX_6.1.12_3.0.0
Mcu.Pin8=PF3
Mcu.Pin9=PF4
Mcu.PinsNb=75
@ -448,7 +448,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_FDCAN1_Init-FDCAN1-false-HAL-true,5-MX_LTDC_Init-LTDC-false-HAL-true,6-MX_JPEG_Init-JPEG-false-HAL-true,7-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,8-MX_SPI3_Init-SPI3-false-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_CRC_Init-CRC-false-HAL-true,13-MX_TIM17_Init-TIM17-false-HAL-true,14-MX_DMA2D_Init-DMA2D-false-HAL-true,16-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.2-false-HAL-false,17-MX_TouchGFX_Process-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.2-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_FDCAN1_Init-FDCAN1-false-HAL-true,5-MX_LTDC_Init-LTDC-false-HAL-true,6-MX_JPEG_Init-JPEG-false-HAL-true,7-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,8-MX_SPI3_Init-SPI3-false-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_CRC_Init-CRC-false-HAL-true,13-MX_TIM17_Init-TIM17-false-HAL-true,14-MX_DMA2D_Init-DMA2D-false-HAL-true,15-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.22.0-false-HAL-false,16-MX_TouchGFX_Process-STMicroelectronics.X-CUBE-TOUCHGFX.4.22.0-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=2000000
RCC.AHB12Freq_Value=160000000
RCC.AHB4Freq_Value=160000000