diff options
Diffstat (limited to 'keyboards/tzarc')
42 files changed, 0 insertions, 2179 deletions
diff --git a/keyboards/tzarc/djinn/config.h b/keyboards/tzarc/djinn/config.h deleted file mode 100644 index 005784b98d..0000000000 --- a/keyboards/tzarc/djinn/config.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2018-2022 Nick Brassel (@tzarc) -// SPDX-License-Identifier: GPL-2.0-or-later -#pragma once -#include "config_common.h" - -// Encoders -- right-side is reversed -#define ENCODERS_PAD_A \ - { C14 } -#define ENCODERS_PAD_B \ - { C15 } -#define ENCODERS_PAD_A_RIGHT \ - { C15 } -#define ENCODERS_PAD_B_RIGHT \ - { C14 } - -#ifndef ENCODER_RESOLUTION -# define ENCODER_RESOLUTION 2 -#endif // ENCODER_RESOLUTION - -// Bootloader -#define STM32_BOOTLOADER_DUAL_BANK TRUE -#define STM32_BOOTLOADER_DUAL_BANK_GPIO B7 - -// Peripheral power control pins -#define LCD_POWER_ENABLE_PIN A6 - -// Split configuration -#define SPLIT_TRANSACTION_IDS_KB RPC_ID_SYNC_STATE_KB -#define SPLIT_TRANSPORT_MIRROR -#define SPLIT_LAYER_STATE_ENABLE -#define SPLIT_LED_STATE_ENABLE -#define SPLIT_MODS_ENABLE -#define SPLIT_WPM_ENABLE - -// SPI Configuration -#define SPI_DRIVER SPID3 -#define SPI_SCK_PIN C10 -#define SPI_SCK_PAL_MODE 6 -#define SPI_MOSI_PIN C12 -#define SPI_MOSI_PAL_MODE 6 -#define SPI_MISO_PIN C11 -#define SPI_MISO_PAL_MODE 6 - -// LCD Configuration -#define LCD_RST_PIN B3 -#define LCD_CS_PIN D2 -#define LCD_DC_PIN A15 -#ifndef LCD_ACTIVITY_TIMEOUT -# define LCD_ACTIVITY_TIMEOUT 30000 -#endif // LCD_ACTIVITY_TIMEOUT - -// Backlight driver (to control LCD backlight) -#define BACKLIGHT_LEVELS 4 -#define BACKLIGHT_PWM_DRIVER PWMD17 -#define BACKLIGHT_PWM_CHANNEL 1 -#define BACKLIGHT_PAL_MODE 1 - -// RGB configuration -#define RGB_DI_PIN B2 -#define WS2812_EXTERNAL_PULLUP -#define WS2812_PWM_DRIVER PWMD20 -#define WS2812_PWM_CHANNEL 1 -#define WS2812_PWM_PAL_MODE 3 -#define WS2812_DMA_STREAM STM32_DMA1_STREAM1 -#define WS2812_DMA_CHANNEL 1 -#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM20_UP - -// Audio configuration -#define AUDIO_PIN A5 -#define AUDIO_PIN_ALT A4 -#define AUDIO_PIN_ALT_AS_NEGATIVE -#ifndef STARTUP_SONG -# define STARTUP_SONG SONG(STARTUP_SOUND) -#endif // STARTUP_SONG diff --git a/keyboards/tzarc/djinn/djinn.c b/keyboards/tzarc/djinn/djinn.c deleted file mode 100644 index 5e5fe44c67..0000000000 --- a/keyboards/tzarc/djinn/djinn.c +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright 2018-2022 Nick Brassel (@tzarc) -// SPDX-License-Identifier: GPL-2.0-or-later -#include <string.h> -#include "quantum.h" -#include <hal_pal.h> -#include "djinn.h" -#include "serial.h" -#include "split_util.h" -#include "qp.h" - -painter_device_t lcd; - -// clang-format off -#ifdef SWAP_HANDS_ENABLE -const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { - { { 6, 6 }, { 5, 6 }, { 4, 6 }, { 3, 6 }, { 2, 6 }, { 1, 6 }, { 0, 6 } }, - { { 6, 7 }, { 5, 7 }, { 4, 7 }, { 3, 7 }, { 2, 7 }, { 1, 7 }, { 0, 7 } }, - { { 6, 8 }, { 5, 8 }, { 4, 8 }, { 3, 8 }, { 2, 8 }, { 1, 8 }, { 0, 8 } }, - { { 6, 9 }, { 5, 9 }, { 4, 9 }, { 3, 9 }, { 2, 9 }, { 1, 9 }, { 0, 9 } }, - { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 6, 10 }, { 5, 10 }, { 4, 10 }, { 3, 10 } }, - { { 0, 0 }, { 6, 11 }, { 5, 11 }, { 4, 11 }, { 3, 11 }, { 2, 11 }, { 1, 11 } }, - - { { 6, 0 }, { 5, 0 }, { 4, 0 }, { 3, 0 }, { 2, 0 }, { 1, 0 }, { 0, 0 } }, - { { 6, 1 }, { 5, 1 }, { 4, 1 }, { 3, 1 }, { 2, 1 }, { 1, 1 }, { 0, 1 } }, - { { 6, 2 }, { 5, 2 }, { 4, 2 }, { 3, 2 }, { 2, 2 }, { 1, 2 }, { 0, 2 } }, - { { 6, 3 }, { 5, 3 }, { 4, 3 }, { 3, 3 }, { 2, 3 }, { 1, 3 }, { 0, 3 } }, - { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 6, 4 }, { 5, 4 }, { 4, 4 }, { 3, 4 } }, - { { 0, 0 }, { 6, 5 }, { 5, 5 }, { 4, 5 }, { 3, 5 }, { 2, 5 }, { 1, 5 } }, -}; -# ifdef ENCODER_MAP_ENABLE -const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = { 1, 0 }; -# endif // ENCODER_MAP_ENABLE -#endif // SWAP_HANDS_ENABLE -// clang-format on - -void board_init(void) { - usbpd_init(); -} - -//---------------------------------------------------------- -// Initialisation - -void keyboard_post_init_kb(void) { - // Register keyboard state sync split transaction - transaction_register_rpc(RPC_ID_SYNC_STATE_KB, kb_state_sync_slave); - - // Reset the initial shared data value between master and slave - memset(&kb_state, 0, sizeof(kb_state)); - - // Turn off increased current limits - setPinOutput(RGB_CURR_1500mA_OK_PIN); - writePinLow(RGB_CURR_1500mA_OK_PIN); - setPinOutput(RGB_CURR_3000mA_OK_PIN); - writePinLow(RGB_CURR_3000mA_OK_PIN); - - // Turn on the RGB - setPinOutput(RGB_POWER_ENABLE_PIN); - writePinHigh(RGB_POWER_ENABLE_PIN); - -#ifdef EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN - setPinOutput(EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN); - writePinHigh(EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN); -#endif // EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN - - // Turn on the LCD - setPinOutput(LCD_POWER_ENABLE_PIN); - writePinHigh(LCD_POWER_ENABLE_PIN); - - // Let the LCD get some power... - wait_ms(150); - - // Initialise the LCD - lcd = qp_ili9341_make_spi_device(320, 240, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, 4, 0); - qp_init(lcd, QP_ROTATION_0); - - // Turn on the LCD and clear the display - kb_state.lcd_power = 1; - qp_power(lcd, true); - qp_rect(lcd, 0, 0, 239, 319, HSV_BLACK, true); - - // Turn on the LCD backlight - backlight_enable(); - backlight_level(BACKLIGHT_LEVELS); - - // Allow for user post-init - keyboard_post_init_user(); -} - -//---------------------------------------------------------- -// RGB brightness scaling dependent on USBPD state - -#if defined(RGB_MATRIX_ENABLE) -RGB rgb_matrix_hsv_to_rgb(HSV hsv) { - float scale; - -# ifdef DJINN_SUPPORTS_3A_FUSE - // The updated BOM on the Djinn has properly-spec'ed fuses -- 1500mA/3000mA hold current - switch (kb_state.current_setting) { - default: - case USBPD_500MA: - scale = 0.35f; - break; - case USBPD_1500MA: - scale = 0.75f; - break; - case USBPD_3000MA: - scale = 1.0f; - break; - } -# else - // The original BOM on the Djinn had wrongly-spec'ed fuses -- 750mA/1500mA hold current - switch (kb_state.current_setting) { - default: - case USBPD_500MA: - case USBPD_1500MA: - scale = 0.35f; - break; - case USBPD_3000MA: - scale = 0.75f; - break; - } -# endif - - hsv.v = (uint8_t)(hsv.v * scale); - return hsv_to_rgb(hsv); -} -#endif - -//---------------------------------------------------------- -// UI Placeholder, implemented in themes - -__attribute__((weak)) void draw_ui_user(void) {} - -//---------------------------------------------------------- -// Housekeeping - -void housekeeping_task_kb(void) { - // Update kb_state so we can send to slave - kb_state_update(); - - // Data sync from master to slave - kb_state_sync(); - - // Work out if we've changed our current limit, update the limiter circuit switches - static uint8_t current_setting = USBPD_500MA; - if (current_setting != kb_state.current_setting) { - current_setting = kb_state.current_setting; - -#ifdef DJINN_SUPPORTS_3A_FUSE - // The updated BOM on the Djinn has properly-spec'ed fuses -- 1500mA/3000mA hold current - switch (current_setting) { - default: - case USBPD_500MA: - writePinLow(RGB_CURR_1500mA_OK_PIN); - writePinLow(RGB_CURR_3000mA_OK_PIN); - break; - case USBPD_1500MA: - writePinHigh(RGB_CURR_1500mA_OK_PIN); - writePinLow(RGB_CURR_3000mA_OK_PIN); - break; - case USBPD_3000MA: - writePinHigh(RGB_CURR_1500mA_OK_PIN); - writePinHigh(RGB_CURR_3000mA_OK_PIN); - break; - } -#else - // The original BOM on the Djinn had wrongly-spec'ed fuses -- 750mA/1500mA hold current - switch (current_setting) { - default: - case USBPD_500MA: - case USBPD_1500MA: - writePinLow(RGB_CURR_1500mA_OK_PIN); - writePinLow(RGB_CURR_3000mA_OK_PIN); - break; - case USBPD_3000MA: - writePinHigh(RGB_CURR_1500mA_OK_PIN); - writePinLow(RGB_CURR_3000mA_OK_PIN); - break; - } -#endif - - // If we've changed the current limit, toggle rgb off and on if it was on, to force a brightness update on all LEDs - if (is_keyboard_master() && rgb_matrix_is_enabled()) { - rgb_matrix_disable_noeeprom(); - rgb_matrix_enable_noeeprom(); - } - } - - // Turn on/off the LCD - static bool lcd_on = false; - if (lcd_on != (bool)kb_state.lcd_power) { - lcd_on = (bool)kb_state.lcd_power; - qp_power(lcd, lcd_on); - } - - // Enable/disable RGB - if (lcd_on) { - // Turn on RGB - writePinHigh(RGB_POWER_ENABLE_PIN); - // Modify the RGB state if different to the LCD state - if (rgb_matrix_is_enabled() != lcd_on) { - // Wait for a small amount of time to allow the RGB capacitors to charge, before enabling RGB output - wait_ms(10); - // Enable RGB - rgb_matrix_enable_noeeprom(); - } - } else { - // Turn off RGB - writePinLow(RGB_POWER_ENABLE_PIN); - // Disable the PWM output for the RGB - if (rgb_matrix_is_enabled() != lcd_on) { - rgb_matrix_disable_noeeprom(); - } - } - - // Match the backlight to the LCD state - if (is_keyboard_master() && is_backlight_enabled() != lcd_on) { - if (lcd_on) - backlight_enable(); - else - backlight_disable(); - } - - // Draw the UI - if (kb_state.lcd_power) { - draw_ui_user(); - } - - // Go into low-scan interrupt-based mode if we haven't had any matrix activity in the last 250 milliseconds - if (last_input_activity_elapsed() > 250) { - matrix_wait_for_interrupt(); - } -}
\ No newline at end of file diff --git a/keyboards/tzarc/djinn/djinn.h b/keyboards/tzarc/djinn/djinn.h deleted file mode 100644 index ff6b555e8e..0000000000 --- a/keyboards/tzarc/djinn/djinn.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2018-2022 Nick Brassel (@tzarc) -// SPDX-License-Identifier: GPL-2.0-or-later -#pragma once -#include "quantum.h" -#include "qp.h" - -//---------------------------------------------------------- -// General stuff - -extern painter_device_t lcd; - -void matrix_wait_for_interrupt(void); - -void usbpd_update(void); -const char* usbpd_str(usbpd_allowance_t allowance); - -//---------------------------------------------------------- -// Runtime data sync -- keyboard - -#pragma pack(push) -#pragma pack(1) -typedef struct kb_runtime_config { - unsigned lcd_power : 1; - usbpd_allowance_t current_setting : 2; -} kb_runtime_config; -#pragma pack(pop) - -extern kb_runtime_config kb_state; - -void kb_state_update(void); -void kb_state_sync(void); -void kb_state_sync_slave(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2m_size, void* s2m_buffer); diff --git a/keyboards/tzarc/djinn/djinn_portscan_matrix.c b/keyboards/tzarc/djinn/djinn_portscan_matrix.c deleted file mode 100644 index f0ae9721f9..0000000000 --- a/keyboards/tzarc/djinn/djinn_portscan_matrix.c +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2018-2022 Nick Brassel (@tzarc) -// SPDX-License-Identifier: GPL-2.0-or-later -#include "quantum.h" -#include <hal_pal.h> -#include "djinn.h" - -#define GPIOB_BITMASK (1 << 13 | 1 << 14 | 1 << 15) // B13, B14, B15 -#define GPIOB_OFFSET 13 -#define GPIOB_COUNT 3 -#define GPIOC_BITMASK (1 << 6 | 1 << 7 | 1 << 8) // C6, C7, C8 -#define GPIOC_OFFSET 6 - -// Pin definitions -static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; -static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; - -void matrix_wait_for_pin(pin_t pin, uint8_t target_state) { - rtcnt_t start = chSysGetRealtimeCounterX(); - rtcnt_t end = start + 5000; - while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) { - if (readPin(pin) == target_state) { - break; - } - } -} - -void matrix_wait_for_port(stm32_gpio_t *port, uint32_t target_bitmask) { - rtcnt_t start = chSysGetRealtimeCounterX(); - rtcnt_t end = start + 5000; - while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) { - if ((palReadPort(port) & target_bitmask) == target_bitmask) { - break; - } - } -} - -void matrix_init_custom(void) { - for (int i = 0; i < MATRIX_ROWS; ++i) { - setPinInputHigh(row_pins[i]); - } - for (int i = 0; i < MATRIX_COLS; ++i) { - setPinInputHigh(col_pins[i]); - } -} - -bool matrix_scan_custom(matrix_row_t current_matrix[]) { - static matrix_row_t temp_matrix[MATRIX_ROWS] = {0}; - - for (int current_col = 0; current_col < MATRIX_COLS; ++current_col) { - // Keep track of the pin we're working with - pin_t curr_col_pin = col_pins[current_col]; - - // Setup the output column pin - setPinOutput(curr_col_pin); - writePinLow(curr_col_pin); - matrix_wait_for_pin(curr_col_pin, 0); - - // Read the row ports - uint32_t gpio_b = palReadPort(GPIOB); - uint32_t gpio_c = palReadPort(GPIOC); - - // Unselect the row pin - setPinInputHigh(curr_col_pin); - - // Construct the packed bitmask for the pins - uint32_t readback = ~(((gpio_b & GPIOB_BITMASK) >> GPIOB_OFFSET) | (((gpio_c & GPIOC_BITMASK) >> GPIOC_OFFSET) << GPIOB_COUNT)); - - // Inject values into the matrix - for (int i = 0; i < MATRIX_ROWS; ++i) { - if (readback & (1 << i)) { - temp_matrix[i] |= (1ul << current_col); - } else { - temp_matrix[i] &= ~(1ul << current_col); - } - } - - // Wait for readback of the unselected column to go high - matrix_wait_for_pin(curr_col_pin, 1); - - // Wait for readback of each port to go high -- unselecting the row would have been completed - matrix_wait_for_port(GPIOB, GPIOB_BITMASK); - matrix_wait_for_port(GPIOC, GPIOC_BITMASK); - } - - // Check if we've changed, return the last-read data - bool changed = memcmp(current_matrix, temp_matrix, sizeof(temp_matrix)) != 0; - if (changed) { - memcpy(current_matrix, temp_matrix, sizeof(temp_matrix)); - } - return changed; -} - -void matrix_wait_for_interrupt(void) { - // Set up row/col pins and attach callback - for (int i = 0; i < sizeof(col_pins) / sizeof(pin_t); ++i) { - setPinOutput(col_pins[i]); - writePinLow(col_pins[i]); - } - for (int i = 0; i < sizeof(row_pins) / sizeof(pin_t); ++i) { - setPinInputHigh(row_pins[i]); - palEnableLineEvent(row_pins[i], PAL_EVENT_MODE_BOTH_EDGES); - } - - // Wait for an interrupt - __WFI(); - - // Now that the interrupt has woken us up, reset all the row/col pins back to defaults - for (int i = 0; i < sizeof(row_pins) / sizeof(pin_t); ++i) { - palDisableLineEvent(row_pins[i]); - writePinHigh(row_pins[i]); - setPinInputHigh(row_pins[i]); - } - for (int i = 0; i < sizeof(col_pins) / sizeof(pin_t); ++i) { - writePinHigh(col_pins[i]); - setPinInputHigh(col_pins[i]); - } -}
\ No newline at end of file diff --git a/keyboards/tzarc/djinn/djinn_split_sync.c b/keyboards/tzarc/djinn/djinn_split_sync.c deleted file mode 100644 index 3c7a58d155..0000000000 --- a/keyboards/tzarc/djinn/djinn_split_sync.c +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2018-2022 Nick Brassel (@tzarc) -// SPDX-License-Identifier: GPL-2.0-or-later -#include <string.h> -#include "quantum.h" -#include "transactions.h" -#include "split_util.h" -#include "djinn.h" - -kb_runtime_config kb_state; -uint32_t last_slave_sync_time = 0; - -void kb_state_update(void) { - if (is_keyboard_master()) { - // Modify allowed current limits - usbpd_update(); - - // Turn off the LCD if there's been no matrix activity - kb_state.lcd_power = (last_input_activity_elapsed() < LCD_ACTIVITY_TIMEOUT) ? 1 : 0; - } -} - -void kb_state_sync(void) { - if (!is_transport_connected()) return; - - if (is_keyboard_master()) { - // Keep track of the last state, so that we can tell if we need to propagate to slave - static kb_runtime_config last_kb_state; - static uint32_t last_sync; - bool needs_sync = false; - - // Check if the state values are different - if (memcmp(&kb_state, &last_kb_state, sizeof(kb_runtime_config))) { - needs_sync = true; - memcpy(&last_kb_state, &kb_state, sizeof(kb_runtime_config)); - } - - // Send to slave every 500ms regardless of state change - if (timer_elapsed32(last_sync) > 500) { - needs_sync = true; - } - - // Perform the sync if requested - if (needs_sync) { - if (transaction_rpc_send(RPC_ID_SYNC_STATE_KB, sizeof(kb_runtime_config), &kb_state)) { - last_sync = timer_read32(); - } else { - dprint("Failed to perform data transaction\n"); - } - } - } -} - -void kb_state_sync_slave(uint8_t m2s_size, const void* m2s_buffer, uint8_t s2m_size, void* s2m_buffer) { - if (m2s_size == sizeof(kb_runtime_config)) { - memcpy(&kb_state, m2s_buffer, sizeof(kb_runtime_config)); - last_slave_sync_time = timer_read32(); - } -} diff --git a/keyboards/tzarc/djinn/djinn_usbpd.c b/keyboards/tzarc/djinn/djinn_usbpd.c deleted file mode 100644 index b0bf166b7c..0000000000 --- a/keyboards/tzarc/djinn/djinn_usbpd.c +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2018-2022 Nick Brassel (@tzarc) -// SPDX-License-Identifier: GPL-2.0-or-later -#include <string.h> -#include "quantum.h" -#include "djinn.h" - -const char* usbpd_str(usbpd_allowance_t allowance) { - switch (allowance) { - default: - case USBPD_500MA: - return "500mA"; - case USBPD_1500MA: - return "1500mA"; - case USBPD_3000MA: - return "3000mA"; - } -} - -void usbpd_update(void) { - static uint32_t last_read = 0; - if (timer_elapsed32(last_read) > 250) { - usbpd_allowance_t allowance = usbpd_get_allowance(); - if (kb_state.current_setting != allowance) { - dprintf("Transitioning UCPD1 %s -> %s\n", usbpd_str(kb_state.current_setting), usbpd_str(allowance)); - kb_state.current_setting = allowance; - } - } -}
\ No newline at end of file diff --git a/keyboards/tzarc/djinn/graphics/djinn.qgf.c b/keyboards/tzarc/djinn/graphics/djinn.qgf.c deleted file mode 100644 index 0acdf6ebb5..0000000000 --- a/keyboards/tzarc/djinn/graphics/djinn.qgf.c +++ /dev/null @@ -1,246 +0,0 @@ -// Copyright 2022 QMK -- generated source code only, image retains original copyright -// SPDX-License-Identifier: GPL-2.0-or-later - -// This file was auto-generated by `qmk painter-convert-graphics -i djinn.png -f mono4` - -#include <qp.h> - -const uint32_t gfx_djinn_length = 3724; - -// clang-format off -const uint8_t gfx_djinn[3724] = { - 0x00, 0xFF, 0x12, 0x00, 0x00, 0x51, 0x47, 0x46, 0x01, 0x8C, 0x0E, 0x00, 0x00, 0x73, 0xF1, 0xFF, - 0xFF, 0x66, 0x00, 0x20, 0x01, 0x01, 0x00, 0x01, 0xFE, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x02, 0xFD, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xE8, 0x03, 0x05, 0xFA, 0x5C, 0x0E, 0x00, - 0x58, 0x00, 0x80, 0x90, 0x19, 0x00, 0x80, 0x2D, 0x18, 0x00, 0x81, 0xE0, 0x07, 0x18, 0x00, 0x81, - 0xFE, 0x01, 0x17, 0x00, 0x81, 0xF4, 0x2F, 0x17, 0x00, 0x82, 0x80, 0xFF, 0x07, 0x17, 0x00, 0x82, - 0xFD, 0xFF, 0x01, 0x16, 0x00, 0x82, 0xE0, 0xFF, 0x2F, 0x16, 0x00, 0x80, 0x80, 0x02, 0xFF, 0x80, - 0x03, 0x15, 0x00, 0x84, 0x40, 0xFE, 0xFF, 0x7F, 0x14, 0x15, 0x00, 0x80, 0xF9, 0x02, 0xFF, 0x81, - 0x4B, 0x1A, 0x14, 0x00, 0x80, 0xE4, 0x03, 0xFF, 0x81, 0xE0, 0x06, 0x13, 0x00, 0x80, 0xD0, 0x03, - 0xFF, 0x82, 0x0F, 0xBE, 0x01, 0x12, 0x00, 0x80, 0x80, 0x04, 0xFF, 0x81, 0xE0, 0x6F, 0x13, 0x00, - 0x80, 0xFE, 0x03, 0xFF, 0x82, 0x0F, 0xFE, 0x0B, 0x12, 0x00, 0x80, 0xF8, 0x04, 0xFF, 0x82, 0xE0, - 0xFF, 0x02, 0x11, 0x00, 0x80, 0xE0, 0x04, 0xFF, 0x82, 0x0F, 0xFE, 0xBF, 0x11, 0x00, 0x80, 0x80, - 0x04, 0xFF, 0x83, 0xBF, 0xF4, 0xFF, 0x1F, 0x11, 0x00, 0x80, 0xFE, 0x04, 0xFF, 0x80, 0x47, 0x02, - 0xFF, 0x80, 0x07, 0x10, 0x00, 0x80, 0xF4, 0x04, 0xFF, 0x83, 0x2F, 0xF8, 0xFF, 0xBF, 0x10, 0x00, - 0x80, 0xD0, 0x05, 0xFF, 0x80, 0xD1, 0x02, 0xFF, 0x80, 0x1F, 0x0F, 0x00, 0x81, 0x40, 0xFE, 0x04, - 0xFF, 0x81, 0x0B, 0xFE, 0x02, 0xFF, 0x80, 0x06, 0x0F, 0x00, 0x80, 0xF8, 0x04, 0xFF, 0x81, 0x2F, - 0xF4, 0x02, 0xFF, 0x80, 0xBF, 0x0F, 0x00, 0x80, 0xE0, 0x04, 0xFF, 0x81, 0xBF, 0xD0, 0x03, 0xFF, - 0x80, 0x1F, 0x0E, 0x00, 0x80, 0x40, 0x04, 0xFF, 0x81, 0xBF, 0x41, 0x04, 0xFF, 0x80, 0x06, 0x0E, - 0x00, 0x80, 0xF8, 0x04, 0xFF, 0x81, 0x06, 0xFD, 0x03, 0xFF, 0x80, 0x7F, 0x0E, 0x00, 0x80, 0xE0, - 0x04, 0xFF, 0x81, 0x06, 0x90, 0x04, 0xFF, 0x80, 0x0B, 0x0D, 0x00, 0x80, 0x40, 0x04, 0xFF, 0x82, - 0x1B, 0x00, 0xE4, 0x04, 0xFF, 0x80, 0x01, 0x0D, 0x00, 0x80, 0xF8, 0x03, 0xFF, 0x80, 0x1B, 0x02, - 0x00, 0x80, 0xE4, 0x03, 0xFF, 0x80, 0x2F, 0x0D, 0x00, 0x80, 0xD0, 0x03, 0xFF, 0x80, 0x5B, 0x03, - 0x00, 0x80, 0xE4, 0x03, 0xFF, 0x80, 0x07, 0x0D, 0x00, 0x80, 0xFE, 0x02, 0xFF, 0x80, 0x6F, 0x04, - 0x00, 0x80, 0xF9, 0x02, 0xFF, 0x80, 0x7F, 0x0D, 0x00, 0x80, 0xE0, 0x02, 0xFF, 0x80, 0x7F, 0x05, - 0x00, 0x80, 0xFD, 0x02, 0xFF, 0x80, 0x0B, 0x0C, 0x00, 0x80, 0x40, 0x02, 0xFF, 0x81, 0xBF, 0x01, - 0x04, 0x00, 0x81, 0x40, 0xFE, 0x02, 0xFF, 0x0D, 0x00, 0x80, 0xF8, 0x02, 0xFF, 0x80, 0x02, 0x05, - 0x00, 0x80, 0x90, 0x02, 0xFF, 0x80, 0x0F, 0x0C, 0x00, 0x80, 0x80, 0x02, 0xFF, 0x80, 0x07, 0x06, - 0x00, 0x80, 0xF4, 0x02, 0xFF, 0x0D, 0x00, 0x82, 0xFD, 0xFF, 0x1F, 0x07, 0x00, 0x82, 0xFD, 0xFF, - 0x1F, 0x0C, 0x00, 0x82, 0xD0, 0xFF, 0x7F, 0x07, 0x00, 0x80, 0x80, 0x02, 0xFF, 0x80, 0x01, 0x0C, - 0x00, 0x82, 0xFD, 0xFF, 0x02, 0x07, 0x00, 0x82, 0xF4, 0xFF, 0x1F, 0x0C, 0x00, 0x82, 0xE0, 0xFF, - 0x0B, 0x08, 0x00, 0x82, 0xFE, 0xFF, 0x01, 0x0C, 0x00, 0x81, 0xFE, 0x7F, 0x08, 0x00, 0x82, 0xD0, - 0xFF, 0x1F, 0x0C, 0x00, 0x82, 0xE0, 0xFF, 0x02, 0x08, 0x00, 0x81, 0xF8, 0xFF, 0x0D, 0x00, 0x81, - 0xFE, 0x1F, 0x08, 0x00, 0x82, 0x40, 0xFF, 0x0F, 0x0C, 0x00, 0x82, 0xE0, 0xFF, 0x01, 0x08, 0x00, - 0x81, 0xF4, 0xFF, 0x0D, 0x00, 0x81, 0xFD, 0x0B, 0x09, 0x00, 0x81, 0xFE, 0x0B, 0x0C, 0x00, 0x81, - 0xD0, 0xBF, 0x09, 0x00, 0x81, 0xE0, 0xBF, 0x0D, 0x00, 0x81, 0xF9, 0x07, 0x09, 0x00, 0x81, 0xFD, - 0x07, 0x0C, 0x00, 0x81, 0x80, 0x7F, 0x09, 0x00, 0x81, 0xD0, 0x7F, 0x0D, 0x00, 0x81, 0xF8, 0x07, - 0x09, 0x00, 0x81, 0xF9, 0x03, 0x0C, 0x00, 0x81, 0x40, 0x7F, 0x09, 0x00, 0x81, 0x90, 0x2F, 0x0D, - 0x00, 0x81, 0xE0, 0x07, 0x09, 0x00, 0x81, 0xF8, 0x02, 0x0D, 0x00, 0x80, 0x7D, 0x09, 0x00, 0x81, - 0x80, 0x1F, 0x0D, 0x00, 0x81, 0x80, 0x07, 0x09, 0x00, 0x80, 0xB8, 0x0E, 0x00, 0x80, 0x74, 0x09, - 0x00, 0x81, 0x80, 0x0B, 0x0E, 0x00, 0x80, 0x0A, 0x03, 0x00, 0x80, 0x04, 0x05, 0x00, 0x80, 0x78, - 0x0E, 0x00, 0x80, 0x90, 0x03, 0x00, 0x83, 0xA4, 0x00, 0x80, 0x06, 0x02, 0x00, 0x81, 0x80, 0x02, - 0x0E, 0x00, 0x87, 0x04, 0x00, 0x40, 0xE9, 0x0B, 0x00, 0xF8, 0x5A, 0x02, 0x00, 0x80, 0x14, 0x10, - 0x00, 0x86, 0x40, 0xFA, 0xBF, 0x00, 0x40, 0xFF, 0x6B, 0x12, 0x00, 0x87, 0x90, 0xFE, 0xFF, 0x07, - 0x00, 0xE0, 0xFF, 0xAF, 0x11, 0x00, 0x80, 0x80, 0x02, 0xFF, 0x80, 0x1F, 0x02, 0x00, 0x82, 0xF9, - 0xFF, 0x2F, 0x11, 0x00, 0x82, 0xFE, 0xFF, 0x6F, 0x03, 0x00, 0x82, 0xFD, 0xFF, 0x0B, 0x10, 0x00, - 0x82, 0xF8, 0xFF, 0x7F, 0x03, 0x00, 0x82, 0x40, 0xFE, 0xFF, 0x10, 0x00, 0x83, 0xD0, 0xFF, 0xBF, - 0x01, 0x03, 0x00, 0x82, 0x80, 0xFF, 0x1F, 0x10, 0x00, 0x82, 0xFD, 0xFF, 0x02, 0x04, 0x00, 0x82, - 0xD0, 0xFF, 0x02, 0x0F, 0x00, 0x82, 0xE0, 0xFF, 0x0B, 0x05, 0x00, 0x81, 0xF8, 0x2F, 0x0F, 0x00, - 0x82, 0x40, 0xFF, 0x2F, 0x06, 0x00, 0x81, 0xFE, 0x02, 0x0F, 0x00, 0x89, 0xF4, 0xFF, 0x01, 0x00, - 0x50, 0x55, 0x05, 0x00, 0xD0, 0x7F, 0x0F, 0x00, 0x84, 0x40, 0xFF, 0x07, 0x00, 0xA4, 0x02, 0xAA, - 0x02, 0x00, 0x81, 0xF8, 0x07, 0x0F, 0x00, 0x81, 0xF4, 0x6F, 0x02, 0x00, 0x85, 0xFE, 0xFF, 0x07, - 0x00, 0x40, 0x7F, 0x0F, 0x00, 0x8A, 0x40, 0xFF, 0x81, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x40, 0xE0, - 0x0B, 0x0F, 0x00, 0x85, 0xF4, 0x1B, 0x1E, 0x00, 0xF0, 0xBF, 0x02, 0x00, 0x81, 0x19, 0xBD, 0x0F, - 0x00, 0x8B, 0x80, 0xBF, 0xF0, 0x02, 0x00, 0xFD, 0x07, 0x00, 0xE0, 0xC2, 0x0B, 0x05, 0x0E, 0x00, - 0x8A, 0xF8, 0x47, 0xBF, 0x00, 0x80, 0x2F, 0x00, 0x40, 0x7F, 0xB8, 0x61, 0x0E, 0x00, 0x8B, 0x40, - 0x6F, 0xF8, 0x1F, 0x00, 0xF4, 0x01, 0x00, 0xF9, 0x47, 0x1F, 0x1E, 0x0E, 0x00, 0x8B, 0xF4, 0x82, - 0xFF, 0x06, 0x00, 0x19, 0x00, 0xE4, 0xBF, 0xF0, 0xD1, 0x06, 0x0D, 0x00, 0x8C, 0x40, 0x1F, 0xFD, - 0xBF, 0x01, 0x40, 0x00, 0x90, 0xFF, 0x0B, 0x2E, 0xBD, 0x01, 0x0D, 0x00, 0x86, 0xF4, 0xE1, 0xFF, - 0xBF, 0x01, 0x00, 0x80, 0x02, 0xFF, 0x82, 0xE0, 0x92, 0x6F, 0x0D, 0x00, 0x8C, 0x45, 0x1B, 0xFE, - 0xFF, 0xBF, 0x05, 0x94, 0xFE, 0xFF, 0x1F, 0x2D, 0xF8, 0x1B, 0x0C, 0x00, 0x82, 0x74, 0xB4, 0xE0, - 0x07, 0xFF, 0x83, 0xD1, 0x86, 0xFF, 0x07, 0x0B, 0x00, 0x83, 0xD0, 0x47, 0x4B, 0xFE, 0x06, 0xFF, - 0x84, 0x2F, 0x7D, 0xF8, 0xFF, 0x06, 0x0A, 0x00, 0x83, 0x90, 0x7F, 0xB4, 0xF4, 0x07, 0xFF, 0x84, - 0xD2, 0x47, 0xFF, 0xBF, 0x01, 0x09, 0x00, 0x83, 0x90, 0xFF, 0x87, 0x47, 0x07, 0xFF, 0x85, 0x3F, - 0xB8, 0xF4, 0xFF, 0xBF, 0x05, 0x08, 0x00, 0x84, 0x95, 0xFF, 0x3F, 0x78, 0xF8, 0x07, 0xFF, 0x81, - 0x83, 0x4B, 0x03, 0xFF, 0x81, 0x56, 0x15, 0x04, 0x00, 0x82, 0x50, 0x55, 0xEA, 0x02, 0xFF, 0x81, - 0x82, 0x86, 0x07, 0xFF, 0x82, 0x7F, 0xB4, 0xE0, 0x03, 0xFF, 0x81, 0xAF, 0x6A, 0x03, 0x00, 0x81, - 0x90, 0xFA, 0x03, 0xFF, 0x82, 0x1F, 0x2D, 0xF8, 0x07, 0xFF, 0x82, 0x0B, 0x19, 0xFE, 0x04, 0xFF, - 0x80, 0x6F, 0x02, 0x00, 0x80, 0x40, 0x05, 0xFF, 0x02, 0xD1, 0x08, 0xFF, 0x81, 0x01, 0xE0, 0x05, - 0xFF, 0x80, 0x1B, 0x02, 0x00, 0x80, 0xFD, 0x04, 0xFF, 0x82, 0x0B, 0x0A, 0xFE, 0x07, 0xFF, 0x81, - 0xBF, 0x41, 0x06, 0xFF, 0x82, 0x02, 0x00, 0xE4, 0x04, 0xFF, 0x82, 0xBF, 0x10, 0xF4, 0x08, 0xFF, - 0x80, 0xBF, 0x06, 0xFF, 0x8 |