From d94bd09527d4f04488847956f0dcb9109291ef82 Mon Sep 17 00:00:00 2001 From: ertunc-ozbay Date: Sat, 17 Oct 2026 19:20:11 +0300 Subject: [PATCH] fix(firmware): replace legacy ESP32 test code with verified ESP32-S3 master firmware & sdkconfig --- README.md | 95 +- firmware/main/idf_component.yml | 2 - firmware/main/mmcontroller.c | 2971 +++++-------------------------- firmware/sdkconfig | 682 ++++--- 4 files changed, 895 insertions(+), 2855 deletions(-) delete mode 100644 firmware/main/idf_component.yml diff --git a/README.md b/README.md index 3dbb441..4f71e1c 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ [![RTOS](https://img.shields.io/badge/OS-FreeRTOS-008080?style=for-the-badge)](https://www.freertos.org/) [![Status](https://img.shields.io/badge/Status-Active%20Prototype-success?style=for-the-badge)](#roadmap--milestones) -A custom, high-performance handheld remote controller engineered from scratch for dual-role applications: **long-range, low-latency RC vehicle control** and **USB/Bluetooth HID gaming**. +A custom, high-performance handheld remote controller engineered from scratch for dual-role applications: **long-range, low-latency RC vehicle control** and **USB/Bluetooth HID gaming**. -Built around the **ESP32-S3 (Xtensa® 32-bit LX7 dual-core @ 240 MHz)**, this project bridges hardware and software engineering—combining magnetic Hall-effect sensing, RF telemetry, hardware pulse-counted rotary inputs, hardware PWM audio synthesis, and an SPI graphics pipeline into a unified, battery-powered embedded platform. +Built around the **ESP32-S3-N16R8 (Xtensa® 32-bit LX7 dual-core @ 240 MHz)**, this project bridges hardware and software engineering—combining analog/Hall-effect sensing on `ADC1`, 2.4 GHz nRF24L01+ RF telemetry, hardware pulse-counted (`pulse_cnt`) rotary inputs, and a shared high-speed `SPI2_HOST` (FSPI) bus driving both the 1.3" SH1106 OLED display and radio transceiver without bus collisions. --- @@ -18,64 +18,69 @@ Built around the **ESP32-S3 (Xtensa® 32-bit LX7 dual-core @ 240 MHz)**, this pr

Multi-Functional Controller Top View
- Figure 1: Top assembly layout — Dual Hall-effect joysticks, rotary encoder, tactile buttons, 1.3" SPI OLED display, NeoPixel telemetry bar, and audio transducers. + Figure 1: Top assembly layout — ESP32-S3-N16R8 module, analog joystick, quadrature rotary encoder, 1.3" SH1106 SPI OLED display, and nRF24L01+ RF transceiver.

Multi-Functional Controller Profile & RF Antenna
- Figure 2: Ergonomic profile — 2.4 GHz high-gain dipole antenna connected to the NRF24L01+ RF transceiver, rotary dial, and dual USB-C ports. + Figure 2: Ergonomic profile — 2.4 GHz external dipole antenna connected to the nRF24L01+ transceiver, rotary dial, and dual USB-C ports.

Multi-Functional Controller Perfboard Soldering
- Figure 3: Underbody point-to-point bus routing — 6×9 cm perfboard with dedicated decoupled power rails (100 µF smoothing capacitor) and direct GPIO signal lines. + Figure 3: Underbody point-to-point bus routing — 6×9 cm perfboard with dedicated decoupled power rails (100 µF smoothing capacitor across nRF24L01+ VCC/GND) and direct FSPI signal lines.

--- -## Key Hardware & Architectural Features +## Key Hardware & Firmware Architecture -- **Microcontroller Core:** Espressif ESP32-S3-N16R8 (16 MB Quad SPI Flash, 8 MB Octal PSRAM) running FreeRTOS preemptive multitasking. -- **Dual Wireless Pipelines:** - - **2.4 GHz RF (NRF24L01+):** Dedicated SPI radio module with external SMA antenna for low-latency, deterministic RC telemetry. - - **Bluetooth 5.0 LE & Wi-Fi:** Native wireless stacks for PC/gamepad HID modes and wireless telemetry streaming. -- **Precision Analog & Digital Controls:** - - **Dual Hall-Effect Joysticks:** Contactless magnetic sensing for zero stick drift and extended durability. - - **Hardware Pulse-Counted Rotary Encoder:** Quadrature decoding handled in hardware via the ESP32-S3 `pulse_cnt` peripheral to guarantee zero missed ticks during high-load processing loops. - - **Dedicated Navigation Buttons:** Tactile push-buttons configured with internal pull-ups for UI interaction and control toggling. -- **Multi-Sensor Audio & Visual Telemetry:** - - **1.3" SPI OLED Display (SH1106 / SSD1306):** Driven via hardware DMA SPI (`SPI2_HOST`) with custom frame buffering for menus, telemetry, and live status readouts. - - **Polyphonic Melodic Synthesis:** Passive buzzer modulated via hardware LEDC PWM timer (`LEDC_TIMER_0`, 13-bit duty resolution). - - **Percussive Acoustic Alerts:** Dual active buzzers for instant tactile/auditory feedback and warning signals. - - **Visual Beat & Metric Indicators:** Dedicated Kick (GPIO 21) and Hi-Hat (GPIO 22) LEDs alongside an 8-LED WS2812B NeoPixel RGB strip driven via RMT. +- **Microcontroller Core:** Espressif **ESP32-S3-N16R8** (16 MB Quad SPI Flash, 8 MB Octal PSRAM) running FreeRTOS. +- **Collision-Free Shared FSPI (`SPI2_HOST`) Bus:** + - Shares `MOSI` (`GPIO 11`), `MISO` (`GPIO 13`), and `SCK` (`GPIO 12`) between the **1.3" SH1106 OLED** (10 MHz clock) and the **nRF24L01+ 2.4 GHz Transceiver** (1 MHz clock) via independent hardware Chip Select lines (`GPIO 10` and `GPIO 14`). +- **Bare-Metal 5×8 OLED Graphics Engine & Multi-Screen UI State Machine:** + - Direct register-level driver for the 1.3" SH1106 controller (handling the 132×64 internal RAM 2-pixel column offset) with a complete 5×8 bitmap font table (`A–Z`, `0–9`, `<`, `>`, `[`, `]`, `(`, `)`, `/`, `-`, `:`, `.`). + - **4 Interactive Screens:** + 1. `DRIVE VEHICLE`: Real-time One-Shot `ADC1` joystick acquisition (`VRx` / `VRy`) and live 2.4 GHz packet broadcasting (`rc_packet_t`). + 2. `RADIO CONFIG`: Verifies physical nRF24L01+ SPI link (`SETUP_AW` register `0x03`) and tunes `RF_CH` (register `0x05`) live across channels `0–125` (`2.400–2.525 GHz`) using the rotary dial. + 3. `CALIBRATE`: Live raw `ADC1` readout (`0–4095`) with one-click neutral center-point capture. + 4. `SYSTEM INFO`: Displays target silicon (`ESP32-S3`) and real-time free RTOS heap memory (`esp_get_free_heap_size()`). +- **Hardware Quadrature Rotary Decoder (`pulse_cnt`):** + - Uses the ESP32-S3 hardware Pulse Counter peripheral on `GPIO 15` (`CLK`) and `GPIO 16` (`DT`) with a `1000 ns` hardware glitch filter and full 4× quadrature edge/level state decoding, paired with a `300 ms` debounced push-switch (`GPIO 17`). +- **Wi-Fi-Safe Analog Joystick Acquisition (`ADC1`):** + - Routes `VRx` (`GPIO 4`, `ADC1_CH3`) and `VRy` (`GPIO 5`, `ADC1_CH4`) with `12 dB` attenuation (`0–3.3V` full-scale) on `ADC_UNIT_1` to avoid `ADC2` Wi-Fi/RF arbitration conflicts. - **Power Subsystem:** - Dual parallel 18650 Li-ion cells delivering **4800 mAh** combined capacity. - - Dual USB-C ports: one dedicated for high-efficiency battery charging and one for USB-UART flashing, debugging, and wired HID gamepad control. - - 100 µF low-ESR electrolytic capacitor buffering transient current spikes from RF transmission bursts and buzzer pulses. + - 100 µF low-ESR electrolytic bulk decoupling capacitor suppressing nRF24L01+ TX current spikes. --- ## GPIO Pinout & Peripheral Mapping (ESP32-S3 Hardware Specification) -The physical controller uses a shared high-speed **SPI2_HOST** bus for both the 1.3" OLED and the NRF24L01+ RF transceiver, alongside dedicated ADC1 channels and hardware pulse-counter inputs: +The physical controller uses a shared high-speed **SPI2_HOST** (FSPI) bus for both the 1.3" SH1106 OLED and the nRF24L01+ RF transceiver, alongside dedicated `ADC1` channels and hardware pulse-counter inputs: | Peripheral / Signal | GPIO | Hardware Interface | Description | | :--- | :---: | :--- | :--- | -| **SPI Bus: MOSI** | `GPIO 11` | SPI Master Output (`SPI2_HOST`) | Shared data line for NRF24L01+ and OLED (`SDA` / `D1`) | -| **SPI Bus: MISO** | `GPIO 13` | SPI Master Input (`SPI2_HOST`) | Data line from NRF24L01+ radio module | -| **SPI Bus: SCK (Clock)** | `GPIO 12` | SPI Master Clock (`SPI2_HOST`) | Shared clock line for NRF24L01+ and OLED (`CLK` / `D0`) | -| **NRF24L01+ Chip Select (CSN)** | `GPIO 14` | Dedicated SPI Device Select | Radio bus enable / frame delimiter | -| **NRF24L01+ Chip Enable (CE)** | `GPIO 21` | Digital Output | Radio RX/TX state activation and power line | -| **OLED Chip Select (CS)** | `GPIO 10` | Dedicated SPI Device Select | Display bus enable | -| **OLED Data/Command (DC)** | `GPIO 9` | Digital Output | 1.3" OLED command vs. graphic data selection | +| **SPI Bus: MOSI** | `GPIO 11` | SPI Master Output (`SPI2_HOST`) | Shared data line for nRF24L01+ and OLED (`SDA` / `D1`) | +| **SPI Bus: MISO** | `GPIO 13` | SPI Master Input (`SPI2_HOST`) | Data line from nRF24L01+ radio module | +| **SPI Bus: SCK (Clock)** | `GPIO 12` | SPI Master Clock (`SPI2_HOST`) | Shared clock line for nRF24L01+ and OLED (`CLK` / `D0`) | +| **nRF24L01+ Chip Select (CS)** | `GPIO 14` | SPI Device Select | Dedicated radio bus enable | +| **nRF24L01+ Chip Enable (CE)** | `GPIO 21` | Digital Output | Radio TX/RX power state activation line | +| **OLED Chip Select (CS)** | `GPIO 10` | SPI Device Select | Display SPI bus enable | +| **OLED Data/Command (DC)** | `GPIO 9` | Digital Output | 1.3" OLED command vs. data selection | | **OLED Reset (RES)** | `GPIO 8` | Digital Output | Hardware display reset line | -| **Joystick VRx (X-Axis)** | `GPIO 4` | ADC1 Channel 3 (12 dB Attenuation) | Analog X-axis potentiometer (0–3.3V range, Wi-Fi safe) | -| **Joystick VRy (Y-Axis)** | `GPIO 5` | ADC1 Channel 4 (12 dB Attenuation) | Analog Y-axis potentiometer (0–3.3V range, Wi-Fi safe) | +| **Joystick VRx (X-Axis)** | `GPIO 4` | `ADC1` Channel 3 (`12 dB` Atten) | Analog X-axis potentiometer input (`0–3.3V` safe) | +| **Joystick VRy (Y-Axis)** | `GPIO 5` | `ADC1` Channel 4 (`12 dB` Atten) | Analog Y-axis potentiometer input (`0–3.3V` safe) | | **Rotary Encoder CLK** | `GPIO 15` | ESP-IDF `pulse_cnt` Unit | Quadrature channel A (hardware edge counter) | -| **Rotary Encoder DT** | `GPIO 16` | ESP-IDF `pulse_cnt` Unit | Quadrature channel B (hardware direction sensing) | -| **Rotary Encoder Switch (SW)**| `GPIO 17` | Digital Input (`PULLUP`) | Rotary push-button (menu select / enter) | +| **Rotary Encoder DT** | `GPIO 16` | ESP-IDF `pulse_cnt` Unit | Quadrature channel B (direction sensing) | +| **Rotary Encoder Switch (SW)**| `GPIO 17` | Digital Input (`PULLUP`) | Push-button (menu enter/select mode) | + +### Silicon Multiplexing Notes (ESP32-S3-N16R8 vs. Classic ESP32) +1. **Octal PSRAM & Flash Reservation (`GPIO 26 – GPIO 37`):** On the **ESP32-S3-N16R8** (8 MB Octal PSRAM), `GPIO 26` through `GPIO 37` are wired internally to the Octal SPI Flash/PSRAM bus. Accessing `GPIO 26, 27, 32, 33` triggers an immediate *Guru Meditation Error / Cache Disabled Panic* on boot. +2. **Unbonded Silicon Pins (`GPIO 22 – GPIO 25`):** `GPIO 22, 23, 24, 25` do not exist on the ESP32-S3 pin multiplexing matrix. +3. **FSPI (`SPI2_HOST`) Default Matrix:** Uses native ESP32-S3 FSPI pins (`GPIO 10, 11, 12, 13`) for zero-penalty IOMUX/GPIO matrix routing rather than legacy 2016 ESP32 VSPI defaults (`GPIO 5, 18, 23`). --- @@ -83,13 +88,12 @@ The physical controller uses a shared high-speed **SPI2_HOST** bus for both the ```text multi-functional-controller/ -├── firmware/ # ESP-IDF C99/C++ Firmware Project +├── firmware/ # ESP-IDF C99 Firmware Project (ESP32-S3) │ ├── CMakeLists.txt # Top-level CMake project configuration -│ ├── sdkconfig # ESP32-S3 configuration (PSRAM, Flash, FreeRTOS) +│ ├── sdkconfig # ESP32-S3 target configuration │ └── main/ │ ├── CMakeLists.txt # Component registration -│ ├── idf_component.yml # Espressif component dependencies (led_strip) -│ └── mmcontroller.c # Core firmware: FreeRTOS tasks, pulse counter, SPI OLED, LEDC PWM +│ └── mmcontroller.c # Master firmware: Shared SPI2, SH1106 5x8 UI, nRF24L01+, PCNT, ADC1 ├── hardware/ # KiCad 10 Electronic Design Automation (EDA) │ ├── mfc-1.kicad_pro # KiCad project file │ ├── mfc-1.kicad_sch # Complete schematic design & component symbols @@ -99,6 +103,7 @@ multi-functional-controller/ │ ├── SIDE_VIEW_WITH_ANTENNA.png # RF antenna and profile perspective │ └── BOTTOM_VIEW.png # Perfboard underside bus wiring ├── .gitignore # Clean repository filter (builds, caches, local configs) +├── LICENSE # MIT License └── README.md # Master engineering documentation ``` @@ -131,9 +136,8 @@ multi-functional-controller/ 4. Flash to the controller and open serial monitoring: ```bash - idf.py -p /dev/ttyUSB0 flash monitor + idf.py -p /dev/ttyACM0 flash monitor ``` - *(Replace `/dev/ttyUSB0` with your serial device node, e.g. `/dev/ttyACM0`)*. --- @@ -154,15 +158,14 @@ The electronic schematic is developed in **KiCad 10**: ## Roadmap & Milestones - [x] Initial hardware breadboard and perfboard prototype (6×9 cm assembly). -- [x] Dual-core ESP-IDF firmware setup with FreeRTOS task scheduling. -- [x] Hardware pulse-counter integration for quadrature rotary encoder (`driver/pulse_cnt.h`). -- [x] Hardware LEDC PWM audio synthesis & percussive buzzer drivers. -- [x] High-speed SPI OLED graphics driver with DMA channel support. -- [x] Addressable WS2812B NeoPixel telemetry integration. +- [x] Shared `SPI2_HOST` bus driving both 1.3" SH1106 OLED and nRF24L01+ without bus collisions. +- [x] Full 5×8 bare-metal font renderer (`A–Z`, `0–9`, and UI punctuation/symbols). +- [x] Hardware pulse-counter (`pulse_cnt`) quadrature decoder with 1000 ns glitch filter & 300 ms debounced state machine. +- [x] Live nRF24L01+ SPI register verification (`0x03`) and channel tuning (`0–125`) with `ADC1` joystick packet transmission. - [ ] Custom multi-layer printed circuit board (PCB) design in KiCad. - [ ] 3D-printable ergonomic handheld enclosure (PETG / Resin). -- [ ] Low-latency NRF24L01+ bidirectional packet protocol with ACK-payload telemetry. -- [ ] Standard USB Gamepad HID descriptor integration for plug-and-play PC gaming. +- [ ] Bidirectional ACK-payload telemetry from target RC vehicle. +- [ ] Native USB Gamepad HID descriptor integration on ESP32-S3 USB-OTG port. --- diff --git a/firmware/main/idf_component.yml b/firmware/main/idf_component.yml deleted file mode 100644 index 0069167..0000000 --- a/firmware/main/idf_component.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - espressif/led_strip: "==2.4.1" diff --git a/firmware/main/mmcontroller.c b/firmware/main/mmcontroller.c index 9de3603..42a2065 100644 --- a/firmware/main/mmcontroller.c +++ b/firmware/main/mmcontroller.c @@ -1,2614 +1,485 @@ -#include "led_strip.h" #include #include -#include #include #include -#include #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "driver/gpio.h" -#include "driver/ledc.h" -#include "driver/pulse_cnt.h" #include "driver/spi_master.h" +#include "driver/gpio.h" +#include "driver/pulse_cnt.h" +#include "esp_adc/adc_oneshot.h" +#include "esp_system.h" +#include "esp_log.h" // ========================================== -// 1. HARDWARE DEFINITIONS +// VERIFIED HARDWARE PIN MAPPINGS (ESP32-S3) // ========================================== -#define ROTARY_SW_PIN 16 -#define PASSIVE_BUZZER_PIN 25 -#define ACTIVE_BUZZER_1_PIN 26 -#define ACTIVE_BUZZER_2_PIN 27 -#define LED_KICK_PIN 21 -#define LED_HAT_PIN 22 -#define ROTARY_CLK_PIN 32 -#define ROTARY_DT_PIN 33 +#define PIN_NUM_MOSI 11 +#define PIN_NUM_MISO 13 +#define PIN_NUM_CLK 12 -#define BTN_PAUSE_PIN 13 -#define BTN_NEXT_PIN 14 +#define NRF_PIN_CS 14 +#define NRF_PIN_CE 21 -#define OLED_CS_PIN 5 -#define OLED_DC_PIN 2 -#define OLED_RES_PIN 4 -#define OLED_MOSI_PIN 23 -#define OLED_CLK_PIN 18 +#define OLED_PIN_CS 10 +#define OLED_PIN_DC 9 +#define OLED_PIN_RES 8 -#define BUZZER_LEDC_TIMER LEDC_TIMER_0 -#define BUZZER_LEDC_MODE LEDC_LOW_SPEED_MODE -#define BUZZER_LEDC_CHANNEL LEDC_CHANNEL_0 -#define BUZZER_LEDC_DUTY (4095) +#define PIN_JOY_VRX 4 // ADC1 Channel 3 (GPIO 4) +#define PIN_JOY_VRY 5 // ADC1 Channel 4 (GPIO 5) +#define JOY_ADC_CH_X ADC_CHANNEL_3 +#define JOY_ADC_CH_Y ADC_CHANNEL_4 -pcnt_unit_handle_t pcnt_unit = NULL; -spi_device_handle_t spi = NULL; +#define PIN_ENCODER_CLK 15 +#define PIN_ENCODER_DT 16 +#define PIN_ENCODER_SW 17 + +#define NUM_MENU_ITEMS 4 + +static const char *TAG = "MFC_CORE"; +spi_device_handle_t oled_spi; +spi_device_handle_t nrf_spi; +adc_oneshot_unit_handle_t adc1_handle; + +// Global Radio & Calibration State +int current_radio_channel = 76; +int joy_center_x = 2048; +int joy_center_y = 2048; + +typedef struct __attribute__((packed)) { + uint16_t joy_x; + uint16_t joy_y; + uint8_t flags; + uint8_t channel; +} rc_packet_t; + +typedef enum { + SCREEN_MAIN_MENU = 0, + SCREEN_DRIVE, + SCREEN_RADIO_CONFIG, + SCREEN_CALIBRATE, + SCREEN_SYSTEM_INFO +} screen_state_t; // ========================================== -// 2. INTER-PROCESS COMMUNICATION (IPC) +// 5x8 BARE-METAL FONT LIBRARY // ========================================== -volatile bool encoder_mode_volume = false; -volatile float current_volume = 1.0; -volatile uint32_t current_freq = 0; -volatile bool current_kick = false; -volatile bool current_hat = false; -volatile float current_speed = 1.0; - -volatile bool is_paused = false; -volatile int current_song_idx = 0; -volatile bool trigger_song_change = false; - -// ========================================== -// 3. GRAPHICS ENGINE & 1.3" OLED DRIVER -// ========================================== -uint8_t oled_buffer[1024]; - -const uint8_t font5x7[59][5] = { - {0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x5f,0x00,0x00}, {0x00,0x07,0x00,0x07,0x00}, {0x14,0x7f,0x14,0x7f,0x14}, - {0x24,0x2a,0x7f,0x2a,0x12}, {0x23,0x13,0x08,0x64,0x62}, {0x36,0x49,0x55,0x22,0x50}, {0x00,0x05,0x03,0x00,0x00}, - {0x00,0x1c,0x22,0x41,0x00}, {0x00,0x41,0x22,0x1c,0x00}, {0x14,0x08,0x3e,0x08,0x14}, {0x08,0x08,0x3e,0x08,0x08}, - {0x00,0x50,0x30,0x00,0x00}, {0x08,0x08,0x08,0x08,0x08}, {0x00,0x60,0x60,0x00,0x00}, {0x20,0x10,0x08,0x04,0x02}, - {0x3e,0x51,0x49,0x45,0x3e}, {0x00,0x42,0x7f,0x40,0x00}, {0x42,0x61,0x51,0x49,0x46}, {0x21,0x41,0x45,0x4b,0x31}, - {0x18,0x14,0x12,0x7f,0x10}, {0x27,0x45,0x45,0x45,0x39}, {0x3c,0x4a,0x49,0x49,0x30}, {0x01,0x71,0x09,0x05,0x03}, - {0x36,0x49,0x49,0x49,0x36}, {0x06,0x49,0x49,0x29,0x1e}, {0x00,0x36,0x36,0x00,0x00}, {0x00,0x56,0x36,0x00,0x00}, - {0x08,0x14,0x22,0x41,0x00}, {0x14,0x14,0x14,0x14,0x14}, {0x00,0x41,0x22,0x14,0x08}, {0x02,0x01,0x51,0x09,0x06}, - {0x32,0x49,0x79,0x41,0x3e}, {0x7e,0x11,0x11,0x11,0x7e}, {0x7f,0x49,0x49,0x49,0x36}, {0x3e,0x41,0x41,0x41,0x22}, - {0x7f,0x41,0x41,0x22,0x1c}, {0x7f,0x49,0x49,0x49,0x41}, {0x7f,0x09,0x09,0x09,0x01}, {0x3e,0x41,0x49,0x49,0x7a}, - {0x7f,0x08,0x08,0x08,0x7f}, {0x00,0x41,0x7f,0x41,0x00}, {0x20,0x40,0x41,0x3f,0x01}, {0x7f,0x08,0x14,0x22,0x41}, - {0x7f,0x40,0x40,0x40,0x40}, {0x7f,0x02,0x0c,0x02,0x7f}, {0x7f,0x04,0x08,0x10,0x7f}, {0x3e,0x41,0x41,0x41,0x3e}, - {0x7f,0x09,0x09,0x09,0x06}, {0x3e,0x41,0x51,0x21,0x5e}, {0x7f,0x09,0x19,0x29,0x46}, {0x46,0x49,0x49,0x49,0x31}, - {0x01,0x01,0x7f,0x01,0x01}, {0x3f,0x40,0x40,0x40,0x3f}, {0x1f,0x20,0x40,0x20,0x1f}, {0x3f,0x40,0x38,0x40,0x3f}, - {0x63,0x14,0x08,0x14,0x63}, {0x07,0x08,0x70,0x08,0x07}, {0x61,0x51,0x49,0x45,0x43} +const uint8_t font_AZ[26][5] = { + {0x7E, 0x11, 0x11, 0x11, 0x7E}, {0x7F, 0x49, 0x49, 0x49, 0x36}, {0x3E, 0x41, 0x41, 0x41, 0x22}, + {0x7F, 0x41, 0x41, 0x22, 0x1C}, {0x7F, 0x49, 0x49, 0x49, 0x41}, {0x7F, 0x09, 0x09, 0x09, 0x01}, + {0x3E, 0x41, 0x49, 0x49, 0x7A}, {0x7F, 0x08, 0x08, 0x08, 0x7F}, {0x00, 0x41, 0x7F, 0x41, 0x00}, + {0x20, 0x40, 0x41, 0x3F, 0x01}, {0x7F, 0x08, 0x14, 0x22, 0x41}, {0x7F, 0x40, 0x40, 0x40, 0x40}, + {0x7F, 0x02, 0x0C, 0x02, 0x7F}, {0x7F, 0x04, 0x08, 0x10, 0x7F}, {0x3E, 0x41, 0x41, 0x41, 0x3E}, + {0x7F, 0x09, 0x09, 0x09, 0x06}, {0x3E, 0x41, 0x51, 0x21, 0x5E}, {0x7F, 0x09, 0x19, 0x29, 0x46}, + {0x46, 0x49, 0x49, 0x49, 0x31}, {0x01, 0x01, 0x7F, 0x01, 0x01}, {0x3F, 0x40, 0x40, 0x40, 0x3F}, + {0x1F, 0x20, 0x40, 0x20, 0x1F}, {0x3F, 0x40, 0x38, 0x40, 0x3F}, {0x63, 0x14, 0x08, 0x14, 0x63}, + {0x03, 0x04, 0x78, 0x04, 0x03}, {0x61, 0x51, 0x49, 0x45, 0x43} }; -void oled_send_cmd(uint8_t cmd) { - gpio_set_level(OLED_DC_PIN, 0); spi_transaction_t t; memset(&t, 0, sizeof(t)); - uint8_t cmd_ram = cmd; t.length = 8; t.tx_buffer = &cmd_ram; spi_device_polling_transmit(spi, &t); +const uint8_t font_nums[10][5] = { + {0x3E, 0x51, 0x49, 0x45, 0x3E}, {0x00, 0x42, 0x7F, 0x40, 0x00}, {0x42, 0x61, 0x51, 0x49, 0x46}, + {0x21, 0x41, 0x45, 0x4B, 0x31}, {0x18, 0x14, 0x12, 0x7F, 0x10}, {0x27, 0x45, 0x45, 0x45, 0x39}, + {0x3C, 0x4A, 0x49, 0x49, 0x30}, {0x01, 0x71, 0x09, 0x05, 0x03}, {0x36, 0x49, 0x49, 0x49, 0x36}, + {0x06, 0x49, 0x49, 0x29, 0x1E} +}; + +const uint8_t* get_font_data(char c) { + static const uint8_t f_spc[5] = {0x00, 0x00, 0x00, 0x00, 0x00}; + static const uint8_t f_gt[5] = {0x08, 0x04, 0x7E, 0x04, 0x08}; // '>' + static const uint8_t f_lt[5] = {0x08, 0x14, 0x22, 0x41, 0x00}; // '<' + static const uint8_t f_lbr[5] = {0x00, 0x7F, 0x41, 0x41, 0x00}; // '[' + static const uint8_t f_rbr[5] = {0x00, 0x41, 0x41, 0x7F, 0x00}; // ']' + static const uint8_t f_lpar[5] = {0x00, 0x1C, 0x22, 0x41, 0x00}; // '(' + static const uint8_t f_rpar[5] = {0x00, 0x41, 0x22, 0x1C, 0x00}; // ')' + static const uint8_t f_slash[5] = {0x20, 0x10, 0x08, 0x04, 0x02}; // '/' + static const uint8_t f_dash[5] = {0x08, 0x08, 0x08, 0x08, 0x08}; // '-' + static const uint8_t f_col[5] = {0x00, 0x36, 0x36, 0x00, 0x00}; // ':' + static const uint8_t f_dot[5] = {0x00, 0x60, 0x60, 0x00, 0x00}; // '.' + + if (c >= 'A' && c <= 'Z') { return font_AZ[c - 'A']; } + if (c >= 'a' && c <= 'z') { return font_AZ[c - 'a']; } + if (c >= '0' && c <= '9') { return font_nums[c - '0']; } + if (c == '>') { return f_gt; } + if (c == '<') { return f_lt; } + if (c == '[') { return f_lbr; } + if (c == ']') { return f_rbr; } + if (c == '(') { return f_lpar; } + if (c == ')') { return f_rpar; } + if (c == '/') { return f_slash; } + if (c == '-') { return f_dash; } + if (c == ':') { return f_col; } + if (c == '.') { return f_dot; } + return f_spc; } -void oled_send_data(const uint8_t *data, int len) { - gpio_set_level(OLED_DC_PIN, 1); spi_transaction_t t; memset(&t, 0, sizeof(t)); - t.length = len * 8; t.tx_buffer = data; spi_device_polling_transmit(spi, &t); +// ========================================== +// OLED & NRF SPI DRIVERS +// ========================================== +void oled_cmd(uint8_t cmd) { + gpio_set_level(OLED_PIN_DC, 0); + spi_transaction_t t = { .length = 8, .tx_buffer = &cmd }; + spi_device_polling_transmit(oled_spi, &t); } -void draw_pixel(int x, int y, int color) { - if (x < 0 || x >= 128 || y < 0 || y >= 64) return; - if (color) oled_buffer[x + (y / 8) * 128] |= (1 << (y % 8)); - else oled_buffer[x + (y / 8) * 128] &= ~(1 << (y % 8)); +void oled_data(uint8_t data) { + gpio_set_level(OLED_PIN_DC, 1); + spi_transaction_t t = { .length = 8, .tx_buffer = &data }; + spi_device_polling_transmit(oled_spi, &t); } -void draw_filled_rect(int x, int y, int w, int h, int color) { - for (int i = x; i < x + w; i++) for (int j = y; j < y + h; j++) draw_pixel(i, j, color); -} - -void draw_rect(int x, int y, int w, int h, int color) { - for (int i = x; i < x + w; i++) { draw_pixel(i, y, color); draw_pixel(i, y + h - 1, color); } - for (int j = y; j < y + h; j++) { draw_pixel(x, j, color); draw_pixel(x + w - 1, j, color); } -} - -void draw_string(int x, int y, const char* str) { - while(*str) { - char c = *str; - if (c >= 32 && c <= 90) { - for(int i=0; i<5; i++) for(int j=0; j<8; j++) if((font5x7[c-32][i] >> j) & 1) draw_pixel(x+i, y+j, 1); - } else if (c >= 97 && c <= 122) { - for(int i=0; i<5; i++) for(int j=0; j<8; j++) if((font5x7[c-64][i] >> j) & 1) draw_pixel(x+i, y+j, 1); - } - x += 6; str++; +void oled_draw_string(uint8_t page, uint8_t col, const char* str) { + oled_cmd(0xB0 + page); + uint8_t phys_col = col + 2; // SH1106 132x64 internal RAM 2-px offset + oled_cmd(0x00 | (phys_col & 0x0F)); + oled_cmd(0x10 | ((phys_col >> 4) & 0x0F)); + while (*str) { + const uint8_t* pixels = get_font_data(*str++); + for (int i = 0; i < 5; i++) { oled_data(pixels[i]); } + oled_data(0x00); } } -void oled_push_framebuffer(void) { - for(int page = 0; page < 8; page++) { - oled_send_cmd(0xB0 + page); oled_send_cmd(0x02); oled_send_cmd(0x10); - oled_send_data(&oled_buffer[page * 128], 128); +void oled_clear(void) { + for (uint8_t p = 0; p < 8; p++) { + oled_cmd(0xB0 + p); oled_cmd(0x02); oled_cmd(0x10); + for (uint8_t c = 0; c < 128; c++) { oled_data(0x00); } } } -// ========================================== -// 4. THE ULTIMATE 8-TRACK PLAYLIST (FLASH MEMORY STORAGE) -// ========================================== -typedef struct { uint32_t frequency; uint32_t duration; bool kick_drum; bool hi_hat; } SequenceStep; - -#define REST 0 -#define NOTE_G3 196 -#define NOTE_GS3 208 -#define NOTE_A3 220 -#define NOTE_AS3 233 -#define NOTE_B3 247 -#define NOTE_C4 262 -#define NOTE_CS4 277 -#define NOTE_D4 294 -#define NOTE_DS4 311 -#define NOTE_E4 330 -#define NOTE_F4 349 -#define NOTE_FS4 370 -#define NOTE_G4 392 -#define NOTE_GS4 415 -#define NOTE_A4 440 -#define NOTE_AS4 466 -#define NOTE_B4 494 -#define NOTE_C5 523 -#define NOTE_CS5 554 -#define NOTE_D5 587 -#define NOTE_DS5 622 -#define NOTE_E5 659 -#define NOTE_F5 698 -#define NOTE_FS5 740 -#define NOTE_G5 784 -#define NOTE_GS5 831 -#define NOTE_A5 880 -#define NOTE_AS5 932 -#define NOTE_B5 988 -#define NOTE_C6 1047 -#define NOTE_CS6 1109 -#define NOTE_D6 1175 -#define NOTE_DS6 1245 -#define NOTE_E6 1319 - - -// Converted from: mario.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_mario[] = { - {659, 209, true, false}, {659, 214, true, false}, {0, 218, false, false}, {659, 209, true, false}, - {0, 218, false, false}, {523, 209, true, false}, {659, 361, true, false}, {0, 71, false, false}, - {783, 357, true, false}, {0, 500, false, false}, {391, 357, true, false}, {0, 500, false, false}, - {391, 146, true, false}, {587, 150, false, false}, {587, 150, false, false}, {440, 150, false, false}, - {0, 153, false, false}, {587, 146, false, false}, {493, 553, false, false}, {0, 200, false, false}, - {587, 75, false, false}, {587, 71, false, false}, {493, 150, false, false}, {523, 150, false, false}, - {587, 253, false, false}, {0, 50, false, false}, {391, 146, true, false}, {587, 150, false, false}, - {587, 150, false, false}, {440, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, - {493, 553, false, false}, {0, 275, false, false}, {0, 675, false, false}, {391, 146, true, false}, - {587, 150, false, false}, {587, 150, false, false}, {440, 150, false, false}, {0, 153, false, false}, - {587, 146, false, false}, {493, 553, false, false}, {0, 200, false, false}, {587, 75, false, false}, - {587, 71, false, false}, {493, 150, false, false}, {523, 150, false, false}, {587, 253, false, false}, - {0, 50, false, false}, {391, 146, true, false}, {587, 150, false, false}, {587, 150, false, false}, - {440, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, {493, 553, false, false}, - {0, 275, false, false}, {0, 675, false, false}, {587, 146, true, false}, {523, 150, false, false}, - {587, 150, false, false}, {493, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, - {783, 828, false, false}, {0, 675, false, false}, {587, 146, true, false}, {523, 150, false, false}, - {587, 150, false, false}, {493, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, - {523, 828, false, false}, {0, 675, false, false}, {587, 146, true, false}, {523, 150, false, false}, - {587, 150, false, false}, {493, 150, false, false}, {0, 153, false, false}, {587, 146, false, false}, - {783, 828, false, false}, {0, 675, false, false}, {880, 146, false, true}, {783, 150, false, false}, - {880, 150, false, false}, {783, 150, false, false}, {0, 153, false, false}, {987, 146, false, false}, - {783, 828, false, false}, {0, 675, false, false}, {0, 2000, true, false}, {329, 244, false, false}, - {329, 250, false, false}, {0, 755, false, false}, {329, 244, false, false}, {329, 250, false, false}, - {329, 125, false, false}, {329, 125, false, false}, {349, 250, true, false}, {349, 250, false, false}, - {0, 755, false, false}, {349, 244, false, false}, {349, 250, false, false}, {349, 125, false, false}, - {349, 125, false, false}, {391, 250, true, false}, {391, 250, false, false}, {0, 755, false, false}, - {391, 244, false, false}, {391, 250, false, false}, {391, 125, false, false}, {391, 125, false, false}, - {349, 250, true, false}, {349, 250, false, false}, {0, 755, false, false}, {349, 244, false, false}, - {349, 250, false, false}, {349, 125, false, false}, {349, 125, false, false}, {329, 672, true, false}, - {0, 83, false, false}, {329, 494, false, false}, {391, 250, false, false}, {440, 250, false, false}, - {391, 130, false, false}, {391, 119, false, false}, {261, 1881, true, false}, {0, 125, false, false}, - {349, 666, true, true}, {0, 83, false, false}, {349, 494, false, false}, {440, 250, false, false}, - {493, 250, false, false}, {440, 130, false, false}, {440, 119, false, false}, {311, 1881, true, true}, - {0, 125, false, false}, {391, 666, true, true}, {0, 83, false, false}, {391, 494, false, false}, - {523, 250, false, false}, {587, 250, false, false}, {523, 130, false, false}, {523, 119, false, false}, - {783, 672, true, true}, {0, 83, false, false}, {698, 494, false, false}, {523, 250, false, false}, - {391, 250, false, false}, {349, 130, false, false}, {349, 119, false, false}, {659, 672, true, true}, - {0, 83, false, false}, {523, 494, false, false}, {440, 250, false, false}, {349, 250, false, false}, - {329, 130, false, false}, {329, 119, false, false}, {311, 1380, true, false}, {0, 125, false, false}, - {277, 2376, false, false}, {0, 125, false, false}, {261, 244, true, false}, {0, 250, true, true}, - {261, 250, true, false}, {293, 62, false, false}, {0, 62, false, true}, {261, 125, true, false}, - {0, 130, false, false}, {0, 369, true, true}, {0, 250, true, true}, {0, 250, true, true}, - {0, 422, true, true}, {0, 83, false, false}, {0, 119, true, true}, {0, 250, true, true}, - {0, 125, true, true}, {0, 755, false, false}, {293, 182, false, false}, {0, 67, false, false}, - {329, 119, false, true}, {311, 125, false, false}, {329, 125, false, false}, {391, 46, false, false}, - {391, 83, false, false}, {391, 119, false, true}, {440, 125, false, false}, {391, 250, false, true}, - {261, 255, false, false}, {261, 166, false, true}, {0, 78, false, false}, {0, 255, false, true}, - {0, 119, false, true}, {0, 46, false, true}, {0, 78, false, false}, {0, 125, false, true}, - {0, 125, false, true}, {0, 125, false, true}, {261, 46, false, false}, {261, 83, false, false}, - {261, 119, false, true}, {293, 125, false, false}, {261, 125, false, false}, {261, 125, false, true}, - {0, 255, false, true}, {0, 166, false, true}, {0, 333, false, false}, {0, 166, false, true}, - {0, 78, false, false}, {0, 125, false, true}, {0, 125, false, true}, {0, 125, false, true}, - {391, 46, false, false}, {391, 83, false, false}, {391, 244, false, true}, {0, 125, false, true}, - {0, 125, false, true}, {0, 125, false, true}, {391, 130, false, false}, {391, 244, false, true}, - {0, 313, false, true}, {391, 108, false, false}, {391, 78, false, false}, {349, 250, false, true}, - {391, 171, false, false}, {391, 78, false, false}, {440, 125, false, true}, {391, 250, false, false}, - {293, 125, false, true}, {293, 255, false, false}, {293, 166, false, true}, {0, 328, false, false}, - {293, 187, false, true}, {0, 62, false, false}, {329, 125, false, true}, {311, 125, false, false}, - {329, 125, false, false}, {391, 46, false, false}, {391, 83, false, false}, {391, 119, false, true}, - {440, 125, false, false}, {391, 250, false, true}, {466, 255, false, false}, {466, 166, false, true}, - {0, 78, false, false}, {0, 255, false, true}, {415, 166, false, false}, {415, 78, false, false}, - {440, 125, false, true}, {415, 125, false, false}, {440, 125, false, false}, {523, 46, false, false}, - {523, 83, false, false}, {523, 119, false, true}, {587, 125, false, false}, {523, 125, false, false}, - {523, 125, false, true}, {440, 255, false, false}, {440, 166, false, true}, {0, 78, false, false}, - {0, 255, false, true}, {440, 166, false, false}, {440, 78, false, false}, {391, 125, false, true}, - {369, 125, false, false}, {391, 125, false, false}, {0, 46, false, true}, {0, 83, false, false}, - {0, 244, false, true}, {391, 125, false, true}, {369, 125, false, false}, {391, 125, false, false}, - {0, 130, false, true}, {0, 119, false, true}, {0, 125, false, true}, {349, 250, false, true}, - {329, 171, false, false}, {329, 78, false, false}, {261, 422, true, true}, {261, 83, false, false}, - {261, 119, false, true}, {261, 250, false, true}, {261, 125, false, false}, {0, 380, false, false}, - {0, 375, false, false}, {293, 119, false, false}, {311, 125, false, false}, {329, 125, false, true}, - {311, 125, false, false}, {329, 125, false, true}, {391, 125, false, false}, {391, 125, false, false}, - {440, 125, false, false}, {391, 130, false, false}, {391, 119, false, true}, {261, 255, false, false}, - {261, 166, false, true}, {0, 78, false, false}, {391, 250, false, false}, {349, 62, false, true}, - {329, 62, false, false}, {293, 62, false, true}, {0, 62, false, false}, {0, 62, false, true}, - {0, 62, false, true}, {0, 62, false, true}, {0, 62, false, true}, {0, 125, false, true}, - {261, 125, false, false}, {261, 125, false, false}, {293, 125, false, false}, {261, 130, false, false}, - {261, 119, false, true}, {0, 255, false, true}, {0, 166, false, true}, {0, 78, false, false}, - {349, 250, false, false}, {329, 62, false, true}, {293, 62, false, false}, {261, 62, false, false}, - {0, 62, false, false}, {0, 62, false, true}, {0, 62, false, true}, {0, 62, false, true}, - {0, 62, false, true}, {0, 125, false, true}, {391, 125, false, true}, {391, 255, false, false}, - {391, 57, false, true}, {0, 62, false, true}, {0, 125, false, true}, {0, 125, false, true}, - {0, 375, false, true}, {0, 313, false, true}, {391, 67, false, false}, {391, 119, false, false}, - {349, 250, false, true}, {391, 125, false, false}, {391, 62, false, false}, {391, 62, false, true}, - {440, 125, false, false}, {391, 130, false, false}, {391, 119, false, true}, {293, 437, false, false}, - {261, 62, false, false}, {0, 46, false, true}, {0, 15, false, false}, {0, 62, false, true}, - {0, 62, false, true}, {0, 62, false, true}, {0, 125, false, true}, {293, 187, true, true}, - {0, 62, false, false}, {329, 125, false, true}, {311, 125, false, false}, {329, 125, false, false}, - {391, 125, false, true}, {391, 125, false, false}, {440, 125, false, false}, {391, 250, false, true}, - {466, 255, false, false}, {466, 166, false, true}, {261, 78, false, false}, {293, 125, false, false}, - {329, 130, false, false}, {415, 119, false, false}, {415, 125, false, false}, {440, 125, false, true}, - {415, 125, false, false}, {440, 125, false, false}, {523, 46, false, false}, {523, 78, false, false}, - {0, 130, false, true}, {587, 119, false, false}, {523, 125, false, false}, {523, 125, false, true}, - {440, 255, false, false}, {440, 166, false, true}, {261, 78, false, false}, {311, 125, false, false}, - {293, 130, false, false}, {440, 119, false, false}, {440, 125, false, true}, {391, 125, false, false}, - {369, 125, false, false}, {391, 125, false, true}, {0, 125, false, true}, {0, 250, false, false}, - {391, 125, false, false}, {369, 125, false, true}, {391, 125, false, false}, {0, 130, false, true}, - {0, 119, false, true}, {0, 125, false, true}, {349, 250, false, false}, {329, 250, false, true}, - {261, 422, false, true}, {261, 83, false, false}, {261, 119, false, true}, {261, 250, false, true}, - {261, 547, false, false}, {0, 83, false, false}, {329, 182, false, false}, {349, 62, false, false}, - {391, 125, false, false}, {415, 125, false, false}, {880, 672, false, false}, {0, 83, false, false}, - {698, 244, false, false}, {783, 672, false, false}, {0, 83, false, false}, {659, 244, false, false}, - {698, 375, false, false}, {783, 125, false, false}, {0, 318, false, false}, {659, 103, false, false}, - {0, 83, false, false}, {659, 182, false, false}, {698, 62, false, false}, {783, 125, false, false}, - {830, 125, false, false}, {0, 505, false, false}, {880, 666, false, false}, {0, 83, false, false}, - {830, 244, false, false}, {783, 672, false, false}, {0, 83, false, false}, {739, 244, false, false}, - {698, 375, false, false}, {659, 375, false, false}, {523, 672, false, false}, {0, 583, false, false}, - {880, 244, false, false}, {880, 250, false, false}, {830, 250, false, false}, {830, 250, false, false}, - {783, 250, false, false}, {783, 250, false, false}, {739, 250, false, false}, {739, 250, false, false}, - {698, 375, false, false}, {783, 125, false, false}, {0, 255, false, false}, {659, 1125, false, false}, - {0, 125, false, false}, {880, 244, false, false}, {880, 250, false, false}, {830, 250, false, false}, - {830, 250, false, false}, {783, 250, false, false}, {783, 250, false, false}, {739, 250, false, false}, - {739, 250, false, false}, {698, 375, false, false}, {659, 125, false, false}, {0, 255, false, false}, - {523, 1125, false, true}, {0, 125, false, false}, {523, 119, false, false}, {329, 250, false, true}, - {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, {329, 250, false, true}, - {466, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, {261, 250, true, false}, - {311, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, {261, 250, true, false}, - {311, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, {329, 250, false, true}, - {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, {329, 250, false, true}, - {466, 125, false, true}, {0, 505, false, false}, {440, 244, false, true}, {440, 250, false, true}, - {440, 250, false, true}, {440, 250, false, true}, {415, 422, false, true}, {0, 83, false, false}, - {391, 57, false, true}, {349, 62, false, true}, {329, 62, false, true}, {293, 62, false, true}, - {261, 62, true, false}, {0, 62, true, true}, {0, 125, true, true}, {523, 125, false, false}, - {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, - {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, - {261, 250, true, false}, {311, 125, false, true}, {0, 505, false, false}, {440, 119, false, true}, - {261, 250, true, false}, {311, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, - {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {523, 119, false, false}, - {329, 250, false, true}, {466, 125, false, true}, {0, 505, false, false}, {783, 357, false, true}, - {0, 285, false, false}, {880, 209, false, true}, {0, 218, false, false}, {783, 209, false, true}, - {0, 218, false, false}, {739, 209, false, true}, {783, 214, false, true}, {1046, 214, false, true}, - {1318, 361, false, false}, {0, 500, false, false}, {391, 209, false, false}, {523, 214, false, false}, - {698, 361, false, true}, {0, 285, false, false}, {783, 209, false, true}, {0, 218, false, false}, - {698, 209, false, true}, {0, 218, false, false}, {659, 209, true, true}, {698, 214, false, true}, - {987, 214, false, true}, {1174, 361, false, true}, {0, 500, false, false}, {391, 209, false, false}, - {493, 214, false, false}, {659, 361, true, true}, {0, 285, false, false}, {698, 209, false, true}, - {0, 218, false, false}, {659, 209, true, true}, {0, 218, false, false}, {622, 209, true, true}, - {659, 214, true, true}, {880, 214, false, true}, {1046, 361, false, true}, {0, 285, false, false}, - {880, 209, true, true}, {987, 214, false, true}, {1046, 214, false, true}, {1174, 214, false, true}, - {1046, 214, false, true}, {1174, 214, false, true}, {1046, 428, false, true}, {880, 214, false, true}, - {739, 214, true, true}, {587, 214, true, true}, {523, 214, true, true}, {440, 214, true, true}, - {0, 214, true, true}, {0, 969, false, true}, {0, 107, false, false}, {0, 209, true, false}, - {0, 214, false, true}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, - {0, 218, false, false}, {0, 209, false, true}, {0, 218, false, false}, {293, 209, false, false}, - {391, 214, true, false}, {391, 147, false, true}, {0, 66, false, false}, {0, 218, false, true}, - {783, 142, false, false}, {783, 66, false, false}, {0, 862, false, false}, {0, 209, true, false}, - {0, 214, true, false}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, - {0, 218, false, false}, {0, 209, false, true}, {0, 218, false, false}, {293, 209, false, false}, - {391, 214, true, false}, {391, 147, true, false}, {0, 66, false, false}, {0, 218, false, true}, - {783, 142, false, false}, {783, 66, false, false}, {0, 433, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 209, true, false}, {0, 214, false, true}, {0, 218, false, true}, - {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, - {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, false, true}, - {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, - {0, 862, false, false}, {0, 209, true, false}, {0, 214, true, false}, {0, 218, false, true}, - {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, - {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, true, false}, - {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, - {0, 862, false, false}, {0, 209, true, false}, {0, 214, true, false}, {0, 218, false, true}, - {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, - {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, true, false}, - {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, - {0, 862, false, false}, {0, 209, true, false}, {0, 214, true, false}, {0, 218, false, true}, - {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, - {0, 218, false, false}, {293, 209, false, false}, {391, 214, true, false}, {391, 147, true, false}, - {0, 66, false, false}, {0, 218, false, true}, {783, 142, false, false}, {783, 66, false, false}, - {0, 433, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, false}, - {293, 214, false, true}, {391, 214, false, false}, {440, 214, false, false}, {493, 214, false, false}, - {523, 214, false, false}, {493, 214, false, true}, {440, 214, false, true}, {391, 214, true, false}, - {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, {0, 71, false, false}, - {261, 357, false, false}, {0, 71, false, false}, {391, 357, false, false}, {0, 71, false, false}, - {293, 209, true, false}, {293, 147, true, false}, {0, 66, false, false}, {0, 218, false, true}, - {0, 142, false, true}, {0, 66, false, false}, {0, 433, false, false}, {0, 214, false, true}, - {0, 142, false, true}, {0, 66, false, false}, {0, 214, true, false}, {0, 214, true, false}, - {0, 361, false, true}, {0, 285, false, false}, {261, 209, false, false}, {0, 214, true, false}, - {261, 214, false, true}, {0, 214, true, true}, {293, 214, false, true}, {391, 361, false, true}, - {0, 285, false, false}, {0, 209, false, true}, {0, 218, false, false}, {0, 209, false, true}, - {0, 214, true, false}, {0, 214, false, true}, {0, 218, false, true}, {293, 142, false, false}, - {293, 66, false, false}, {0, 218, false, false}, {391, 209, false, false}, {0, 433, false, false}, - {0, 209, true, false}, {293, 214, false, true}, {391, 214, false, false}, {440, 214, false, false}, - {493, 214, false, false}, {523, 214, false, false}, {493, 214, false, true}, {440, 214, false, true}, - {391, 214, true, false}, {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, - {0, 71, false, false}, {261, 357, false, false}, {0, 71, false, false}, {391, 357, false, false}, - {0, 71, false, false}, {293, 209, true, false}, {293, 147, true, false}, {0, 66, false, false}, - {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, - {0, 209, false, true}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, - {0, 214, true, false}, {0, 214, true, false}, {0, 218, false, false}, {261, 209, false, true}, - {0, 218, false, false}, {261, 209, false, false}, {0, 218, true, false}, {261, 142, false, false}, - {261, 66, false, false}, {0, 214, true, true}, {293, 214, false, true}, {391, 218, false, false}, - {391, 142, false, true}, {0, 66, false, false}, {0, 218, false, false}, {0, 209, false, true}, - {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, {0, 214, true, false}, - {0, 214, false, true}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, - {0, 862, false, false}, {0, 209, true, false}, {0, 214, false, true}, {261, 218, false, false}, - {391, 142, false, false}, {391, 66, false, false}, {659, 214, false, false}, {587, 214, false, false}, - {523, 214, false, false}, {659, 214, false, false}, {587, 214, true, false}, {587, 147, false, true}, - {0, 66, false, false}, {0, 218, false, true}, {391, 142, false, false}, {391, 66, false, false}, - {0, 218, false, false}, {0, 209, false, true}, {0, 361, false, true}, {0, 71, false, false}, - {0, 209, true, false}, {0, 214, false, true}, {0, 218, false, true}, {329, 142, false, false}, - {329, 66, false, false}, {587, 214, false, false}, {523, 214, false, false}, {493, 214, false, true}, - {523, 147, false, false}, {523, 66, false, false}, {493, 214, true, false}, {493, 147, false, true}, - {0, 66, false, false}, {0, 218, false, true}, {391, 142, false, false}, {391, 66, false, false}, - {0, 433, false, false}, {0, 357, false, true}, {0, 71, false, false}, {0, 209, true, false}, - {0, 214, false, true}, {261, 218, false, false}, {391, 142, false, false}, {391, 66, false, false}, - {659, 214, false, false}, {587, 214, false, false}, {523, 214, false, false}, {659, 214, false, false}, - {587, 214, true, false}, {587, 147, false, true}, {0, 66, false, false}, {0, 218, false, true}, - {391, 142, false, false}, {391, 66, false, false}, {0, 433, false, false}, {0, 357, false, true}, - {0, 71, false, false}, {0, 209, true, false}, {0, 214, false, true}, {0, 361, false, true}, - {0, 71, false, false}, {523, 209, false, false}, {587, 214, false, false}, {523, 214, false, true}, - {493, 147, false, false}, {493, 66, false, false}, {0, 214, true, false}, {0, 214, false, true}, - {391, 361, false, false}, {0, 71, false, false}, {329, 209, false, true}, {329, 147, false, true}, - {0, 66, false, false}, {0, 433, false, false}, {0, 209, true, false}, {293, 214, false, true}, - {391, 214, false, false}, {440, 214, false, false}, {493, 214, false, false}, {523, 214, false, false}, - {493, 214, false, true}, {440, 147, false, false}, {440, 66, false, false}, {391, 214, true, false}, - {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, {0, 71, false, false}, - {261, 214, false, false}, {261, 142, true, false}, {0, 66, false, false}, {391, 361, false, true}, - {0, 71, false, false}, {293, 209, true, false}, {293, 147, true, false}, {0, 66, false, false}, - {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, {0, 433, false, false}, - {0, 214, true, false}, {0, 142, false, true}, {0, 66, false, false}, {0, 214, true, false}, - {0, 214, true, false}, {0, 361, false, true}, {0, 500, false, false}, {0, 214, true, false}, - {261, 142, false, false}, {261, 66, false, false}, {0, 214, true, true}, {293, 214, false, true}, - {391, 361, false, true}, {0, 285, false, false}, {0, 209, false, true}, {0, 218, false, true}, - {0, 142, false, true}, {0, 66, false, false}, {0, 361, true, false}, {0, 71, false, false}, - {0, 214, false, true}, {293, 142, false, false}, {293, 66, false, false}, {0, 862, false, false}, - {0, 209, true, false}, {293, 214, false, true}, {391, 214, false, false}, {440, 214, false, false}, - {493, 214, false, false}, {523, 214, false, false}, {493, 214, false, true}, {440, 214, false, true}, - {391, 214, true, false}, {391, 147, true, false}, {0, 66, false, false}, {293, 361, false, true}, - {0, 71, false, false}, {261, 214, false, false}, {261, 142, true, false}, {0, 66, false, false}, - {391, 361, false, false}, {0, 71, false, false}, {293, 209, true, false}, {293, 147, true, false}, - {0, 66, false, false}, {0, 218, false, true}, {0, 142, false, true}, {0, 66, false, false}, - {0, 218, false, false}, {261, 209, false, false}, {0, 218, false, true}, {0, 142, false, true}, - {0, 66, false, false}, {0, 214, true, false}, {0, 214, true, false}, {0, 361, false, true}, - {0, 285, false, false}, {261, 209, false, false}, {0, 218, true, false}, {261, 142, false, false}, - {261, 66, false, false}, {0, 214, true, true}, {293, 214, false, true}, {391, 361, false, true}, - {0, 285, false, false}, {0, 209, false, true}, {0, 218, false, true}, {0, 142, false, true}, - {0, 66, false, false}, {0, 214, true, false}, {0, 214, false, true}, {0, 361, false, true}, - {0, 285, false, false}, {391, 209, false, true}, {0, 433, false, false}, {0, 209, true, false}, - {0, 214, true, false}, {0, 218, false, true}, {349, 142, false, true}, {349, 66, false, false}, - {0, 218, false, false}, {349, 209, false, true}, {349, 214, false, true}, {349, 214, false, true}, - {0, 218, true, false}, {349, 142, false, true}, {349, 66, false, false}, {349, 214, false, true}, - {349, 214, false, true}, {0, 218, true, false}, {349, 142, false, true}, {349, 66, false, false}, - {349, 214, false, true}, {349, 147, false, true}, {349, 66, false, false}, {0, 214, true, false}, - {0, 214, true, false}, {0, 218, false, true}, {391, 142, false, true}, {391, 66, false, false}, - {0, 218, false, false}, {391, 209, false, true}, {0, 218, false, true}, {391, 142, false, true}, - {391, 66, false, false}, {0, 218, true, false}, {391, 142, false, true}, {391, 66, false, false}, - {0, 214, false, true}, {391, 111, false, true}, {391, 102, false, true}, {391, 214, false, true}, - {391, 214, false, true}, {391, 214, false, true}, {391, 214, false, true}, {0, 214, true, false}, - {0, 214, true, false}, {0, 218, false, true}, {391, 142, false, false}, {391, 66, false, false}, - {0, 218, false, false}, {391, 209, false, false}, {0, 218, false, true}, {391, 142, false, false}, - {391, 66, false, false}, {0, 218, true, false}, {440, 142, false, false}, {440, 66, false, false}, - {0, 218, false, true}, {440, 142, false, false}, {440, 66, false, false}, {0, 218, false, false}, - {440, 209, false, true}, {0, 218, false, false}, {0, 209, false, true}, {0, 371, true, true}, - {0, 375, true, true}, {0, 375, true, true}, {0, 1133, true, true}, {293, 625, false, true}, - {0, 125, false, false}, {587, 156, false, false}, {523, 160, false, false}, {391, 107, false, true}, - {293, 160, false, true}, {261, 160, true, false}, {0, 107, true, true}, {0, 361, true, true}, - {0, 2108, false, false}, {0, 107, false, false}, {293, 1607, true, true}, {0, 107, false, false}, - {329, 1607, false, true}, {0, 107, false, false}, {349, 1607, false, false}, {0, 107, false, false}, - {391, 1607, false, false}, {0, 107, false, false}, {293, 1607, true, true}, {0, 107, false, false}, - {329, 1607, false, true}, {0, 107, false, false}, {349, 1607, false, false}, {0, 107, false, false}, - {391, 750, false, false}, {0, 964, false, false}, {293, 357, false, true}, {0, 71, false, false}, - {293, 357, false, true}, {0, 281, false, false}, {293, 214, false, true}, {293, 107, false, true}, - {293, 107, false, true}, {523, 107, false, true}, {523, 107, false, true}, {493, 214, false, true}, - {391, 147, false, false}, {391, 66, false, false}, {329, 361, false, true}, {293, 285, false, false}, - {329, 209, false, true}, {329, 107, false, true}, {329, 107, false, true}, {329, 107, false, true}, - {329, 107, false, true}, {349, 361, false, true}, {293, 71, false, false}, {349, 142, false, true}, - {349, 71, false, false}, {349, 142, false, false}, {0, 281, false, false}, {349, 214, false, true}, - {391, 107, false, true}, {391, 107, false, true}, {349, 107, false, true}, {349, 107, false, true}, - {391, 361, false, true}, {0, 71, false, false}, {391, 357, false, true}, {0, 285, false, false}, - {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, {391, 107, false, true}, - {391, 107, false, true}, {293, 361, false, true}, {0, 71, false, false}, {293, 357, false, true}, - {0, 281, false, false}, {293, 214, false, true}, {293, 107, false, true}, {293, 107, false, true}, - {523, 107, false, true}, {523, 107, false, true}, {493, 214, false, true}, {391, 147, false, false}, - {391, 66, false, false}, {329, 361, false, true}, {293, 214, false, false}, {0, 71, false, false}, - {329, 209, false, true}, {329, 107, false, true}, {329, 107, false, true}, {587, 107, false, true}, - {587, 107, false, true}, {523, 361, false, true}, {0, 71, false, false}, {493, 357, false, true}, - {493, 285, false, false}, {493, 209, false, true}, {493, 107, false, true}, {493, 107, false, true}, - {440, 107, false, true}, {440, 107, false, true}, {493, 361, false, true}, {493, 71, false, false}, - {493, 357, false, true}, {493, 285, false, false}, {493, 209, false, true}, {493, 107, false, true}, - {493, 107, false, true}, {493, 107, false, true}, {391, 107, false, true}, {349, 361, false, true}, - {311, 71, false, false}, {349, 357, false, true}, {311, 281, false, false}, {349, 214, false, true}, - {349, 107, false, true}, {349, 107, false, true}, {622, 107, false, true}, {622, 107, false, true}, - {587, 214, false, true}, {466, 147, false, false}, {466, 66, false, false}, {391, 361, false, true}, - {349, 285, false, false}, {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, - {391, 107, false, true}, {391, 107, false, true}, {415, 214, false, true}, {415, 147, false, false}, - {349, 71, false, false}, {415, 357, false, true}, {349, 285, false, false}, {415, 209, false, true}, - {415, 107, false, true}, {415, 107, false, true}, {415, 107, false, true}, {415, 107, false, true}, - {466, 361, false, true}, {0, 71, false, false}, {466, 357, false, true}, {0, 285, false, false}, - {466, 209, false, true}, {466, 107, false, true}, {466, 107, false, true}, {466, 107, false, true}, - {466, 107, false, true}, {293, 361, false, true}, {0, 71, false, false}, {293, 357, false, true}, - {0, 281, false, false}, {293, 214, false, true}, {293, 107, false, true}, {293, 107, false, true}, - {523, 107, false, true}, {523, 107, false, true}, {493, 214, false, true}, {391, 147, false, false}, - {391, 66, false, false}, {329, 361, false, true}, {293, 285, false, false}, {329, 209, false, true}, - {329, 107, false, true}, {329, 107, false, true}, {329, 107, false, true}, {329, 107, false, true}, - {391, 361, false, true}, {391, 71, false, false}, {391, 357, false, true}, {391, 285, false, false}, - {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, {391, 107, false, true}, - {349, 107, false, true}, {391, 361, false, true}, {349, 71, false, false}, {391, 357, false, true}, - {349, 285, false, false}, {391, 209, false, true}, {391, 107, false, true}, {391, 107, false, true}, - {391, 107, false, true}, {391, 107, false, true}, {523, 754, false, false}, {0, 107, false, false}, - {783, 750, false, false}, {0, 107, false, false}, {698, 357, false, false}, {0, 71, false, false}, - {587, 1179, false, false}, {0, 107, false, false}, {523, 750, false, false}, {0, 107, false, false}, - {783, 750, false, false}, {0, 107, false, false}, {698, 357, false, false}, {0, 71, false, false}, - {587, 750, false, false}, {0, 107, false, false}, {987, 357, false, false}, {0, 71, false, false}, - {523, 750, false, false}, {0, 107, false, false}, {783, 750, false, false}, {0, 107, false, false}, - {698, 750, false, false}, {0, 107, false, false}, {587, 750, false, false}, {0, 107, false, false}, - {622, 2465, false, false}, {0, 107, false, false}, {523, 750, false, false}, {0, 107, false, false}, - {587, 3322, false, false}, {0, 107, false, false}, {622, 1607, false, false}, {0, 107, false, false}, - {830, 750, false, false}, {0, 107, false, false}, {622, 750, false, false}, {0, 107, false, false}, - {587, 1607, false, false}, {0, 107, false, false}, {783, 1067, false, false}, {391, 53, false, false}, - {349, 53, false, false}, {329, 53, false, false}, {293, 53, false, false}, {391, 53, false, false}, - {349, 53, false, false}, {329, 53, false, false}, {293, 53, false, false}, {391, 53, false, false}, - {349, 53, false, false}, {329, 53, false, false}, {0, 58, false, false}, {0, 244, true, false}, - {0, 250, true, false}, {0, 250, true, false}, {0, 1130, true, false}, {0, 125, false, false}, - {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 1130, true, false}, - {0, 125, false, false}, {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, - {0, 500, true, false}, {0, 500, true, false}, {0, 500, true, false}, {0, 1631, true, false}, - {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, {880, 171, true, false}, - {0, 78, false, false}, {830, 1130, true, false}, {0, 125, false, false}, {783, 244, true, false}, - {783, 250, true, false}, {783, 171, true, false}, {0, 78, false, false}, {698, 1130, true, false}, - {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, {880, 171, true, false}, - {0, 78, false, false}, {830, 500, true, false}, {783, 500, true, false}, {698, 500, true, false}, - {587, 1631, true, false}, {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, - {880, 171, true, false}, {0, 78, false, false}, {830, 1130, true, false}, {0, 125, false, false}, - {783, 244, true, false}, {783, 250, true, false}, {783, 171, true, false}, {0, 78, false, false}, - {698, 1130, true, false}, {0, 125, false, false}, {880, 244, true, false}, {880, 250, true, false}, - {880, 171, true, false}, {0, 78, false, false}, {830, 500, true, false}, {783, 500, true, false}, - {698, 500, true, false}, {587, 1631, true, false}, {0, 125, false, false}, {587, 244, true, false}, - {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 1130, true, false}, - {0, 125, false, false}, {523, 244, true, false}, {523, 250, true, false}, {523, 171, true, false}, - {0, 78, false, false}, {493, 1130, true, false}, {0, 125, false, false}, {587, 244, true, false}, - {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 1130, true, false}, - {0, 125, false, false}, {523, 244, true, false}, {523, 250, true, false}, {523, 171, true, false}, - {0, 78, false, false}, {493, 1130, true, false}, {0, 125, false, false}, {587, 244, true, false}, - {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 500, true, false}, - {554, 630, true, false}, {0, 41, false, false}, {0, 83, false, false}, {587, 244, true, false}, - {587, 250, true, false}, {587, 171, true, false}, {0, 78, false, false}, {554, 1130, true, false}, - {0, 125, false, false}, {587, 244, true, false}, {587, 250, true, false}, {587, 171, true, false}, - {0, 78, false, false}, {554, 1130, true, false}, {0, 125, false, false}, {523, 244, true, false}, - {523, 250, true, false}, {523, 171, true, false}, {0, 78, false, false}, {493, 1130, true, false}, - {0, 125, false, false}, {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, - {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, - {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, - {0, 250, true, false}, {0, 250, true, false}, {0, 672, true, false}, {0, 83, false, false}, - {0, 244, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, - {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, - {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, {0, 250, true, false}, - {0, 250, true, false}, {0, 672, true, false}, {0, 83, false, false}, {0, 357, true, false}, - {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, - {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 214, true, false}, {523, 142, false, false}, {523, 71, false, false}, - {523, 209, true, false}, {523, 147, false, false}, {523, 66, false, false}, {440, 214, false, false}, - {440, 214, false, false}, {466, 214, true, false}, {466, 147, false, false}, {466, 66, false, false}, - {0, 361, true, false}, {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, - {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, - {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, - {0, 214, true, false}, {523, 142, false, false}, {523, 71, false, false}, {523, 209, true, false}, - {523, 147, false, false}, {523, 66, false, false}, {440, 214, false, false}, {440, 214, false, false}, - {466, 214, true, false}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 214, true, false}, {349, 142, false, false}, {349, 71, false, false}, - {349, 209, true, false}, {349, 147, false, false}, {349, 66, false, false}, {293, 214, false, false}, - {293, 214, false, false}, {311, 214, true, false}, {311, 147, false, false}, {311, 66, false, false}, - {0, 361, true, false}, {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, - {0, 357, true, false}, {0, 71, false, false}, {0, 214, true, false}, {349, 142, false, false}, - {349, 71, false, false}, {349, 209, true, false}, {349, 147, false, false}, {349, 66, false, false}, - {293, 214, false, false}, {293, 214, false, false}, {311, 214, true, false}, {311, 147, false, false}, - {311, 66, false, false}, {0, 361, true, false}, {0, 71, false, false}, {0, 357, true, false}, - {0, 500, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, - {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, - {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, - {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, - {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, - {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, - {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, - {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, - {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 107, true, false}, {311, 102, false, false}, {293, 107, false, false}, - {277, 40, false, false}, {277, 66, false, false}, {261, 361, true, false}, {0, 71, false, false}, - {311, 357, false, false}, {0, 71, false, false}, {293, 357, true, false}, {0, 71, false, false}, - {0, 357, true, true}, {0, 71, false, false}, {0, 357, true, true}, {0, 71, false, false}, - {277, 357, false, false}, {0, 71, false, false}, {261, 156, true, false}, {369, 160, false, false}, - {349, 40, false, false}, {349, 66, false, false}, {329, 160, true, false}, {493, 160, false, false}, - {466, 40, false, false}, {466, 66, false, false}, {440, 321, true, false}, {311, 40, false, false}, - {311, 66, false, false}, {0, 111, false, false}, {0, 316, false, true}, {0, 321, true, true}, - {0, 40, false, true}, {0, 66, false, false}, {0, 218, true, false}, {0, 142, false, true}, - {0, 66, false, false}, {0, 361, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, - {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, - {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {261, 209, true, false}, - {523, 147, false, false}, {523, 66, false, false}, {0, 214, false, true}, {440, 214, false, false}, - {0, 214, true, true}, {466, 147, false, false}, {466, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, - {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, - {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {0, 209, true, true}, - {349, 147, false, false}, {349, 66, false, false}, {0, 214, false, true}, {293, 214, false, false}, - {0, 214, true, true}, {311, 147, false, false}, {311, 66, false, false}, {0, 361, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 107, true, false}, {311, 102, false, false}, {293, 107, false, false}, - {277, 40, false, false}, {277, 66, false, false}, {261, 361, true, false}, {0, 71, false, false}, - {311, 357, false, false}, {0, 71, false, false}, {293, 357, true, false}, {0, 71, false, false}, - {0, 357, true, true}, {0, 71, false, false}, {0, 357, true, true}, {0, 71, false, false}, - {277, 357, false, false}, {0, 71, false, false}, {261, 156, true, false}, {369, 160, false, false}, - {349, 40, false, false}, {349, 66, false, false}, {329, 160, true, false}, {493, 160, false, false}, - {466, 40, false, false}, {466, 66, false, false}, {440, 321, true, false}, {311, 40, false, false}, - {311, 66, false, false}, {0, 111, false, false}, {0, 316, false, true}, {0, 321, true, true}, - {0, 40, false, true}, {0, 66, false, false}, {0, 218, true, false}, {0, 142, false, true}, - {0, 66, false, false}, {0, 361, true, false}, {0, 500, false, false}, {0, 357, true, false}, - {0, 71, false, false}, {0, 357, true, false}, {0, 71, false, false}, {783, 357, false, true}, - {0, 285, false, false}, {880, 209, false, true}, {0, 218, false, false}, {783, 209, false, true}, - {0, 218, false, false}, {739, 209, false, true}, {783, 214, false, true}, {1046, 214, false, true}, - {1318, 361, false, false}, {0, 500, false, false}, {391, 209, false, false}, {523, 214, false, false}, - {698, 361, false, true}, {0, 285, false, false}, {783, 209, false, true}, {0, 218, false, false}, - {698, 209, false, true}, {0, 218, false, false}, {659, 209, true, true}, {698, 214, false, true}, - {987, 214, false, true}, {1174, 361, false, true}, {0, 500, false, false}, {391, 209, false, false}, - {493, 214, false, false}, {659, 361, true, true}, {0, 285, false, false}, {698, 209, false, true}, - {0, 218, false, false}, {659, 209, true, true}, {0, 218, false, false}, {622, 209, true, true}, - {659, 214, true, true}, {880, 214, false, true}, {1046, 361, false, true}, {0, 285, false, false}, - {880, 209, true, true}, {987, 214, false, true}, {1046, 214, false, true}, {1174, 214, false, true}, - {1046, 214, false, true}, {1174, 214, false, true}, {1046, 428, false, true}, {880, 214, false, true}, - {739, 214, true, true}, {587, 214, true, true}, {523, 214, true, true}, {440, 214, true, true}, - {0, 214, true, true}, {0, 969, false, true}, {0, 107, false, false}, {659, 308, false, false}, - {0, 61, false, false}, {0, 308, false, true}, {0, 61, false, false}, {659, 308, false, false}, - {0, 61, false, false}, {0, 308, false, true}, {0, 61, false, false}, {659, 308, false, false}, - {0, 61, false, false}, {554, 181, false, true}, {0, 127, false, true}, {0, 57, false, false}, - {493, 185, false, true}, {493, 127, false, true}, {0, 57, false, false}, {466, 185, false, false}, - {466, 127, false, false}, {261, 57, false, false}, {440, 185, false, true}, {440, 185, false, true}, - {440, 185, false, true}, {440, 96, false, true}, {0, 88, false, false}, {493, 312, false, true}, - {0, 61, false, false}, {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, - {293, 185, false, true}, {293, 185, false, true}, {293, 185, false, true}, {293, 185, false, true}, - {293, 281, false, true}, {0, 30, false, false}, {0, 61, false, false}, {0, 181, false, true}, - {0, 185, true, false}, {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, - {0, 92, true, true}, {0, 220, false, true}, {0, 57, false, false}, {329, 277, true, true}, - {329, 34, false, true}, {0, 57, false, false}, {293, 185, true, false}, {293, 127, false, true}, - {0, 57, false, false}, {0, 185, true, true}, {0, 185, false, true}, {0, 185, true, false}, - {0, 185, false, true}, {0, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, - {0, 308, true, true}, {0, 61, false, false}, {0, 181, true, true}, {0, 185, false, true}, - {0, 127, true, false}, {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, false}, - {0, 127, false, true}, {0, 57, false, false}, {440, 185, true, false}, {440, 185, false, true}, - {440, 185, true, false}, {0, 185, false, true}, {0, 185, true, false}, {0, 127, false, true}, - {0, 57, false, false}, {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, - {440, 185, true, false}, {440, 127, false, true}, {0, 57, false, false}, {0, 185, true, true}, - {0, 185, false, true}, {0, 185, true, false}, {0, 96, false, true}, {0, 88, false, false}, - {0, 185, true, false}, {0, 185, false, true}, {440, 185, true, false}, {440, 127, false, true}, - {0, 57, false, false}, {329, 185, false, true}, {329, 185, true, true}, {329, 185, true, false}, - {329, 185, true, true}, {329, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, - {0, 181, true, true}, {0, 185, true, true}, {369, 92, false, true}, {369, 92, false, true}, - {369, 92, false, true}, {369, 92, false, true}, {369, 185, false, true}, {369, 96, false, true}, - {0, 88, false, false}, {493, 185, false, true}, {493, 127, false, true}, {0, 57, false, false}, - {440, 185, false, true}, {440, 127, false, true}, {0, 57, false, false}, {523, 92, false, true}, - {523, 92, false, true}, {523, 92, false, true}, {523, 92, false, true}, {523, 185, false, true}, - {523, 185, false, true}, {523, 185, false, true}, {523, 96, false, true}, {0, 88, false, false}, - {0, 185, false, true}, {0, 185, false, true}, {493, 92, false, true}, {493, 92, false, true}, - {493, 92, false, true}, {493, 34, false, true}, {0, 57, false, false}, {493, 185, false, true}, - {493, 127, false, true}, {0, 57, false, false}, {659, 185, false, true}, {659, 127, false, true}, - {0, 57, false, false}, {587, 185, false, true}, {587, 127, false, true}, {0, 57, false, false}, - {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, - {493, 185, false, true}, {493, 185, false, true}, {493, 185, false, false}, {493, 96, false, true}, - {293, 88, false, false}, {0, 185, false, true}, {293, 185, false, true}, {440, 312, false, true}, - {440, 61, false, false}, {440, 123, false, true}, {0, 61, false, false}, {440, 123, false, false}, - {440, 61, false, false}, {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, - {0, 185, false, true}, {0, 185, false, true}, {0, 185, false, true}, {440, 185, false, true}, - {440, 185, false, true}, {440, 127, false, true}, {0, 57, false, false}, {0, 185, false, true}, - {0, 127, false, true}, {0, 57, false, false}, {329, 312, false, true}, {0, 61, false, false}, - {293, 308, false, true}, {293, 61, false, false}, {293, 308, false, true}, {293, 61, false, false}, - {293, 181, true, false}, {293, 185, false, true}, {293, 185, true, false}, {293, 185, false, true}, - {293, 185, true, false}, {293, 185, false, true}, {293, 185, true, false}, {293, 96, false, true}, - {0, 88, false, false}, {0, 185, false, true}, {0, 185, false, true}, {0, 312, false, true}, - {0, 61, false, false}, {440, 181, false, true}, {440, 185, false, true}, {440, 185, false, true}, - {440, 96, false, true}, {0, 88, false, false}, {493, 312, false, true}, {0, 61, false, false}, - {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, {293, 185, false, true}, - {293, 185, false, true}, {293, 185, false, true}, {293, 185, false, true}, {293, 281, false, true}, - {0, 30, false, false}, {0, 61, false, false}, {0, 181, false, true}, {0, 185, true, false}, - {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, {0, 92, true, true}, - {0, 220, false, true}, {0, 57, false, false}, {329, 277, true, true}, {329, 34, false, true}, - {0, 57, false, false}, {293, 185, true, false}, {293, 127, false, true}, {0, 57, false, false}, - {0, 185, true, true}, {0, 185, false, true}, {0, 185, true, false}, {0, 185, false, true}, - {0, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, {0, 308, true, true}, - {0, 61, false, false}, {0, 181, true, true}, {0, 185, false, true}, {0, 127, true, false}, - {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, false}, {0, 127, false, true}, - {0, 57, false, false}, {440, 185, true, false}, {440, 185, false, true}, {440, 185, true, false}, - {0, 185, false, true}, {0, 185, true, false}, {0, 127, false, true}, {0, 57, false, false}, - {0, 185, true, true}, {0, 127, false, true}, {0, 57, false, false}, {440, 185, true, false}, - {440, 127, false, true}, {0, 57, false, false}, {0, 185, true, true}, {0, 185, false, true}, - {0, 185, true, false}, {0, 96, false, true}, {0, 88, false, false}, {0, 185, true, false}, - {0, 185, false, true}, {440, 185, true, false}, {440, 127, false, true}, {0, 57, false, false}, - {329, 185, false, true}, {329, 185, true, true}, {329, 185, true, false}, {329, 185, true, true}, - {329, 281, true, true}, {0, 30, false, false}, {0, 61, false, false}, {0, 181, true, true}, - {0, 185, true, true}, {369, 92, false, true}, {369, 92, false, true}, {369, 92, false, true}, - {369, 92, false, true}, {369, 185, false, true}, {369, 96, false, true}, {0, 88, false, false}, - {493, 185, false, true}, {493, 127, false, true}, {0, 57, false, false}, {440, 185, false, true}, - {440, 127, false, true}, {0, 57, false, false}, {523, 92, false, true}, {523, 92, false, true}, - {523, 92, false, true}, {523, 92, false, true}, {523, 185, false, true}, {523, 185, false, true}, - {523, 185, false, true}, {523, 96, false, true}, {0, 88, false, false}, {0, 185, false, true}, - {0, 185, false, true}, {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, - {493, 34, false, true}, {0, 57, false, false}, {493, 185, false, true}, {493, 127, false, true}, - {0, 57, false, false}, {659, 185, false, true}, {659, 127, false, true}, {0, 57, false, false}, - {587, 185, false, true}, {587, 127, false, true}, {0, 57, false, false}, {493, 92, false, true}, - {493, 92, false, true}, {493, 92, false, true}, {493, 92, false, true}, {493, 185, false, true}, - {493, 185, false, true}, {493, 185, false, false}, {493, 96, false, true}, {293, 88, false, false}, - {0, 185, false, true}, {293, 185, false, true}, {440, 312, false, true}, {440, 61, false, false}, - {440, 123, false, true}, {0, 61, false, false}, {440, 123, false, false}, {440, 61, false, false}, - {440, 181, false, true}, {440, 127, false, true}, {0, 57, false, false}, {0, 185, false, true}, - {0, 185, false, true}, {0, 185, false, true}, {440, 185, false, true}, {440, 185, false, true}, - {440, 127, false, true}, {0, 57, false, false}, {0, 185, false, true}, {0, 127, false, true}, - {0, 57, false, false}, {329, 312, false, true}, {0, 61, false, false}, {293, 308, false, true}, - {293, 61, false, false}, {293, 181, true, true}, {293, 185, true, false}, {293, 185, false, true}, - {293, 185, false, true}, {293, 185, true, false}, {293, 96, false, true}, {0, 88, false, false}, - {0, 185, false, true}, {587, 185, false, true}, {554, 185, true, false}, {587, 185, true, true}, - {659, 185, false, true}, {739, 185, false, true}, {783, 185, false, true}, {880, 185, false, true}, - {987, 277, false, true}, {987, 92, false, true}, {987, 185, false, true}, {987, 96, false, true}, - {0, 88, false, false}, {932, 312, false, true}, {932, 61, false, false}, {932, 277, false, true}, - {0, 30, false, false}, {0, 61, false, false}, {880, 273, false, true}, {880, 92, false, true}, - {880, 185, false, true}, {880, 96, false, true}, {0, 88, false, false}, {987, 185, false, true}, - {987, 127, false, true}, {0, 57, false, false}, {739, 92, false, true}, {739, 220, false, true}, - {0, 57, false, false}, {783, 277, false, true}, {783, 92, true, true}, {783, 185, false, true}, - {783, 96, true, true}, {0, 88, false, false}, {880, 312, true, true}, {880, 61, false, false}, - {880, 277, false, true}, {0, 30, false, false}, {0, 61, false, false}, {739, 181, false, true}, - {739, 185, true, true}, {739, 185, true, false}, {739, 96, true, true}, {0, 88, false, false}, - {0, 185, false, true}, {880, 185, true, true}, {987, 185, false, true}, {1108, 185, true, true}, - {1174, 312, true, true}, {1174, 61, false, false}, {1174, 277, false, true}, {0, 30, false, false}, - {0, 61, false, false}, {0, 185, true, true}, {1108, 123, false, false}, {1108, 57, false, false}, - {1174, 185, true, true}, {1318, 127, false, false}, {1318, 57, false, false}, {1479, 185, false, true}, - {1479, 185, true, true}, {1479, 185, true, false}, {1479, 96, false, true}, {0, 88, false, false}, - {880, 312, true, true}, {0, 61, false, false}, {1479, 308, true, true}, {0, 61, false, false}, - {1318, 181, false, true}, {1318, 185, true, true}, {1318, 185, false, true}, {1318, 96, true, true}, - {0, 88, false, false}, {1174, 185, false, true}, {1174, 127, true, true}, {0, 57, false, false}, - {1108, 185, false, true}, {1108, 127, true, true}, {0, 57, false, false}, {1174, 312, true, true}, - {1174, 61, false, false}, {1174, 308, true, false}, {1174, 61, false, false}, {1174, 181, false, true}, - {1174, 185, true, true}, {1174, 92, true, false}, {1174, 189, true, true}, {0, 88, false, false}, - {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {329, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {277, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {329, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {391, 92, true, false}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {440, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {391, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, {293, 92, false, false}, - {277, 92, true, true}, {293, 92, false, false}, {277, 92, false, false}, {293, 34, false, false}, - {293, 57, false, false}, {329, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, - {293, 92, false, false}, {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, - {293, 92, false, false}, {329, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, - {293, 92, false, false}, {277, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, - {293, 92, false, false}, {391, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, - {293, 92, false, false}, {440, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, - {293, 92, false, true}, {391, 92, false, true}, {293, 92, false, false}, {277, 92, true, true}, - {293, 92, false, false}, {880, 277, true, true}, {880, 34, true, true}, {0, 57, false, false}, - {0, 185, true, false}, {0, 185, true, true}, {880, 185, true, false}, {880, 127, true, true}, - {0, 57, false, false}, {0, 185, true, false}, {0, 185, true, true}, {880, 312, true, true}, - {0, 61, false, false}, {739, 181, true, false}, {739, 127, true, true}, {0, 57, false, false}, - {659, 185, false, true}, {659, 127, true, true}, {0, 57, false, false}, {622, 185, false, true}, - {622, 127, true, true}, {0, 57, false, false}, {587, 277, true, true}, {587, 34, true, true}, - {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, true}, {587, 185, false, true}, - {587, 127, true, true}, {0, 57, false, false}, {0, 185, false, true}, {0, 185, true, true}, - {587, 185, false, true}, {587, 127, true, true}, {0, 57, false, false}, {0, 185, false, true}, - {493, 92, true, true}, {523, 92, false, false}, {587, 185, false, true}, {587, 127, true, true}, - {0, 57, false, false}, {659, 185, false, true}, {659, 127, true, true}, {0, 57, false, false}, - {587, 312, true, true}, {0, 61, false, false}, {0, 185, true, false}, {587, 123, false, false}, - {587, 57, false, false}, {739, 185, false, true}, {739, 127, true, true}, {0, 57, false, false}, - {880, 92, true, false}, {880, 220, true, true}, {0, 57, false, false}, {830, 312, true, true}, - {0, 61, false, false}, {880, 181, true, false}, {880, 127, true, true}, {0, 57, false, false}, - {830, 92, false, true}, {880, 92, false, false}, {830, 92, true, true}, {739, 92, false, false}, - {587, 185, false, true}, {440, 185, true, true}, {493, 277, true, true}, {554, 34, false, false}, - {554, 57, false, false}, {587, 185, false, true}, {587, 92, true, true}, {659, 92, false, false}, - {739, 92, true, true}, {698, 92, false, false}, {739, 92, false, false}, {783, 34, false, false}, - {783, 57, false, false}, {880, 92, true, true}, {783, 92, false, false}, {739, 92, false, false}, - {659, 34, false, false}, {659, 57, false, false}, {587, 92, false, true}, {554, 92, false, false}, - {587, 92, true, true}, {880, 92, false, false}, {554, 92, false, true}, {523, 92, false, false}, - {554, 92, true, true}, {880, 92, false, false}, {554, 92, false, true}, {523, 92, false, false}, - {493, 92, true, true}, {466, 92, false, false}, {440, 92, false, true}, {415, 92, false, false}, - {391, 92, true, true}, {329, 92, false, false}, {0, 2405, true, true}, {440, 293, false, false}, - {1174, 300, false, false}, {880, 300, false, false}, {830, 2557, false, false}, {0, 4251, false, false}, - {0, 100, false, false}, {0, 1800, true, true}, {440, 293, false, false}, {1174, 300, false, false}, - {880, 300, false, false}, {830, 2007, false, false}, {0, 100, false, false}, {1975, 500, false, false}, - {0, 3551, false, false}, {0, 150, false, false}, {0, 2401, true, true}, {440, 293, false, false}, - {1174, 300, false, false}, {880, 300, false, false}, {830, 1357, false, false}, {0, 150, false, false}, - {0, 150, true, true}, {440, 143, false, false}, {587, 150, false, false}, {880, 150, false, false}, - {830, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {783, 150, false, false}, - {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, - {659, 150, false, false}, {391, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, - {587, 300, false, false}, {440, 150, false, false}, {587, 56, false, false}, {587, 93, false, false}, - {554, 300, true, true}, {391, 150, false, false}, {466, 56, false, false}, {466, 93, false, false}, - {440, 300, true, true}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, - {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, {466, 150, true, false}, - {391, 150, false, false}, {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, - {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {698, 150, true, false}, - {880, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, - {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {659, 150, true, false}, - {783, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, - {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, {587, 150, true, true}, - {698, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, - {880, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, {554, 300, true, true}, - {783, 300, true, false}, {932, 300, true, false}, {880, 300, true, false}, {783, 1056, true, false}, - {0, 150, false, false}, {0, 150, true, true}, {1174, 143, false, false}, {1108, 150, false, false}, - {1174, 150, false, false}, {1244, 150, false, false}, {1174, 150, false, false}, {1108, 150, false, false}, - {830, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, - {698, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, - {554, 150, false, false}, {587, 506, false, false}, {0, 543, false, false}, {0, 150, false, true}, - {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, {0, 150, false, true}, - {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, {0, 150, true, false}, - {0, 300, true, true}, {0, 300, false, true}, {0, 300, true, true}, {391, 300, false, true}, - {0, 300, true, true}, {466, 300, false, true}, {440, 300, true, false}, {554, 300, false, true}, - {587, 150, true, false}, {440, 150, false, false}, {587, 150, false, false}, {880, 56, false, false}, - {880, 93, false, false}, {830, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, - {783, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, - {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, {554, 150, false, false}, - {659, 150, false, false}, {587, 300, false, false}, {440, 150, false, false}, {587, 150, false, false}, - {554, 300, false, false}, {391, 150, false, false}, {466, 150, false, false}, {440, 300, false, false}, - {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, - {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, - {659, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {880, 150, false, false}, - {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {1174, 150, false, false}, - {880, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {783, 150, false, false}, - {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, {1108, 150, false, false}, - {783, 150, false, false}, {659, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, - {587, 150, false, false}, {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {440, 150, false, false}, {622, 150, true, true}, {391, 150, false, false}, - {587, 150, true, true}, {440, 150, false, false}, {622, 150, true, false}, {440, 150, false, false}, - {587, 150, true, false}, {440, 150, false, false}, {0, 156, true, false}, {391, 143, false, false}, - {554, 150, false, false}, {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, - {554, 150, false, false}, {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, - {554, 150, false, false}, {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, - {554, 150, false, false}, {391, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, - {493, 150, false, false}, {415, 150, false, false}, {587, 150, false, false}, {415, 150, false, false}, - {493, 150, false, false}, {415, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, - {493, 150, true, false}, {415, 150, false, false}, {554, 150, true, false}, {391, 150, false, false}, - {466, 150, true, false}, {391, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, - {587, 150, false, false}, {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {440, 150, false, false}, {0, 156, false, false}, {440, 143, false, false}, - {587, 150, false, false}, {440, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, - {698, 150, false, false}, {880, 150, false, false}, {1174, 150, true, true}, {587, 150, false, false}, - {698, 150, false, false}, {587, 150, false, false}, {880, 150, false, false}, {587, 150, false, false}, - {698, 150, false, false}, {587, 150, false, false}, {880, 150, false, true}, {587, 150, false, false}, - {698, 300, false, true}, {880, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, - {587, 150, false, false}, {440, 150, true, true}, {554, 150, false, false}, {659, 150, false, false}, - {554, 150, false, false}, {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, - {554, 150, false, false}, {440, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, - {554, 150, false, false}, {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, - {554, 150, false, false}, {493, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, - {587, 150, false, false}, {830, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, - {587, 150, false, false}, {493, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, - {587, 150, false, false}, {783, 150, true, true}, {466, 150, false, false}, {554, 150, true, false}, - {466, 150, false, false}, {440, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, - {587, 150, false, false}, {880, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, - {698, 150, false, false}, {880, 300, false, false}, {880, 300, false, false}, {880, 300, false, false}, - {880, 156, false, false}, {880, 143, false, false}, {0, 156, false, false}, {349, 143, false, true}, - {349, 150, false, true}, {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, - {277, 150, false, true}, {277, 150, false, true}, {293, 150, false, true}, {293, 150, false, true}, - {349, 150, false, true}, {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, - {261, 150, false, true}, {261, 150, false, true}, {0, 156, false, false}, {466, 143, false, false}, - {466, 150, false, false}, {466, 150, false, false}, {587, 150, false, false}, {587, 150, false, false}, - {466, 150, false, false}, {466, 150, false, false}, {932, 150, false, false}, {932, 150, false, false}, - {783, 150, false, false}, {783, 150, false, false}, {1108, 150, false, false}, {1108, 150, false, false}, - {932, 150, false, false}, {932, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, - {587, 150, false, false}, {880, 150, false, false}, {830, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, - {554, 150, false, false}, {659, 150, false, false}, {587, 300, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {554, 300, true, true}, {391, 150, false, false}, {466, 56, false, false}, - {466, 93, false, false}, {440, 300, true, true}, {440, 150, false, false}, {587, 150, false, false}, - {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, - {466, 150, true, false}, {391, 150, false, false}, {466, 150, false, false}, {554, 150, false, false}, - {659, 150, false, false}, {466, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, - {698, 150, true, false}, {880, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, - {698, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, - {659, 150, true, false}, {783, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, - {659, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, {659, 150, false, false}, - {587, 150, true, true}, {698, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, - {587, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, - {554, 300, true, true}, {783, 300, true, false}, {932, 300, true, false}, {880, 300, true, false}, - {783, 1056, true, false}, {0, 150, false, false}, {0, 150, true, true}, {1174, 143, false, false}, - {1046, 150, false, false}, {1174, 150, false, false}, {1244, 150, false, false}, {1174, 150, false, false}, - {1046, 150, false, false}, {830, 150, false, false}, {880, 150, false, false}, {698, 150, false, false}, - {659, 150, false, false}, {698, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, - {659, 150, false, false}, {554, 150, false, false}, {587, 506, false, false}, {0, 543, false, false}, - {0, 150, false, true}, {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, - {0, 150, false, true}, {0, 150, false, true}, {0, 150, false, true}, {0, 150, true, false}, - {0, 150, true, false}, {0, 300, true, true}, {0, 300, false, true}, {0, 300, true, true}, - {391, 300, false, true}, {0, 300, true, true}, {466, 300, false, true}, {440, 300, true, false}, - {554, 300, false, true}, {587, 150, true, false}, {440, 150, false, false}, {587, 150, false, false}, - {880, 56, false, false}, {880, 93, false, false}, {830, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {783, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, - {554, 150, false, false}, {659, 150, false, false}, {587, 150, false, false}, {349, 150, false, false}, - {440, 150, false, false}, {587, 150, false, false}, {554, 300, false, false}, {391, 150, false, false}, - {466, 150, false, false}, {440, 150, false, false}, {349, 150, false, false}, {440, 150, false, false}, - {587, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, - {698, 150, false, false}, {659, 150, false, false}, {391, 150, false, false}, {466, 150, false, false}, - {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, - {783, 150, false, false}, {698, 150, false, false}, {880, 150, false, false}, {1174, 150, false, false}, - {880, 150, false, false}, {698, 150, false, false}, {1174, 150, false, false}, {880, 150, false, false}, - {698, 150, false, false}, {659, 150, false, false}, {783, 150, false, false}, {1108, 150, false, false}, - {783, 150, false, false}, {659, 150, false, false}, {1108, 150, false, false}, {783, 150, false, false}, - {659, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, {587, 150, false, false}, - {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, - {440, 150, false, false}, {622, 150, true, true}, {391, 150, false, false}, {587, 150, true, true}, - {440, 150, false, false}, {622, 150, true, false}, {440, 150, false, false}, {587, 150, true, false}, - {440, 150, false, false}, {0, 156, true, false}, {391, 143, false, false}, {554, 150, false, false}, - {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, {554, 150, false, false}, - {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, {554, 150, false, false}, - {391, 150, false, false}, {0, 156, false, false}, {391, 143, false, false}, {554, 150, false, false}, - {391, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, {493, 150, false, false}, - {415, 150, false, false}, {587, 150, false, false}, {415, 150, false, false}, {493, 150, false, false}, - {415, 150, false, false}, {0, 156, true, false}, {415, 143, false, false}, {493, 150, true, false}, - {415, 150, false, false}, {554, 150, true, false}, {391, 150, false, false}, {466, 150, true, false}, - {391, 150, false, false}, {0, 156, true, true}, {440, 143, false, false}, {587, 150, false, false}, - {440, 150, false, false}, {698, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, - {440, 150, false, false}, {0, 156, false, false}, {440, 143, false, false}, {587, 150, false, false}, - {440, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, - {880, 150, false, false}, {1174, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, - {587, 150, false, false}, {880, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, - {587, 150, false, false}, {880, 150, false, true}, {587, 150, false, false}, {698, 300, false, true}, - {880, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, {587, 150, false, false}, - {440, 150, true, true}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, - {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, - {440, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, - {783, 150, false, false}, {554, 150, false, false}, {659, 150, false, false}, {554, 150, false, false}, - {493, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, - {830, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, - {493, 150, true, false}, {587, 150, false, false}, {698, 150, true, false}, {587, 150, false, false}, - {783, 150, true, true}, {466, 150, false, false}, {554, 150, true, false}, {466, 150, false, false}, - {440, 150, true, true}, {587, 150, false, false}, {698, 150, false, false}, {587, 150, false, false}, - {880, 150, false, false}, {440, 150, false, false}, {587, 150, false, false}, {698, 150, false, false}, - {880, 300, false, false}, {880, 300, false, false}, {880, 300, false, false}, {880, 156, false, false}, - {880, 143, false, false}, {0, 156, false, false}, {349, 143, false, true}, {349, 150, false, true}, - {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, {277, 150, false, true}, - {277, 150, false, true}, {293, 150, false, true}, {293, 150, false, true}, {349, 150, false, true}, - {349, 150, false, true}, {329, 150, false, true}, {329, 150, false, true}, {277, 150, false, true}, - {277, 150, false, true}, {0, 156, false, false}, {440, 143, false, false}, {440, 150, false, false}, - {440, 150, false, false}, {587, 150, false, false}, {587, 150, false, false}, {440, 150, false, false}, - {440, 150, false, false}, {932, 150, false, false}, {932, 150, false, false}, {783, 150, false, false}, - {783, 150, false, false}, {1108, 150, false, false}, {1108, 150, false, false}, {932, 150, false, false}, - {932, 150, false, false}, {0, 906, false, false}, {293, 195, false, false}, {349, 200, false, false}, - {369, 100, false, false}, {391, 200, false, false}, {261, 200, false, true}, {261, 200, false, true}, - {261, 200, false, true}, {0, 100, false, true}, {261, 100, false, true}, {0, 104, false, false}, - {261, 195, false, true}, {0, 100, false, true}, {261, 100, false, true}, {0, 100, false, true}, - {261, 200, false, true}, {0, 200, false, true}, {0, 200, false, true}, {0, 200, false, true}, - {0, 100, false, true}, {0, 100, false, true}, {0, 104, false, false}, {0, 195, false, true}, - {0, 100, false, true}, {0, 100, false, true}, {0, 100, false, true}, {0, 200, false, true}, - {261, 200, false, true}, {261, 200, false, true}, {261, 200, false, true}, {0, 100, false, true}, - {261, 100, false, true}, {0, 104, false, false}, {261, 195, false, true}, {0, 100, false, true}, - {261, 100, false, true}, {0, 100, false, true}, {261, 200, false, true}, {0, 200, false, true}, - {0, 200, false, true}, {0, 200, false, true}, {0, 100, false, true}, {0, 100, false, true}, - {0, 104, false, false}, {0, 195, false, true}, {0, 100, false, true}, {0, 100, false, true}, - {0, 100, false, true}, {0, 200, false, true}, {261, 1504, false, true}, {0, 100, false, false}, - {329, 954, true, true}, {0, 409, false, false}, {329, 266, false, false}, {349, 204, false, false}, - {391, 210, false, false}, {391, 130, false, false}, {440, 960, true, false}, {0, 409, false, false}, - {440, 266, false, false}, {391, 204, false, false}, {349, 210, false, false}, {349, 130, false, false}, - {329, 960, true, true}, {0, 409, false, false}, {329, 266, false, false}, {349, 204, false, false}, - {391, 210, false, false}, {391, 130, false, false}, {440, 960, true, false}, {0, 136, false, false}, - {0, 272, true, false}, {493, 266, false, false}, {523, 204, false, false}, {587, 210, false, false}, - {587, 130, false, false}, {329, 960, true, true}, {0, 409, false, false}, {329, 266, false, false}, - {349, 204, false, false}, {391, 210, false, false}, {391, 130, false, false}, {440, 960, true, false}, - {0, 136, false, false}, {493, 266, true, false}, {493, 272, true, false}, {0, 210, false, false}, - {493, 335, true, false}, {329, 272, true, false}, {329, 272, true, false}, {329, 187, true, false}, - {0, 85, false, false}, {329, 272, true, false}, {349, 272, true, false}, {329, 272, true, false}, - {349, 272, true, false}, {391, 272, true, false}, {329, 272, true, false}, {329, 272, true, false}, - {329, 272, true, false}, {329, 142, true, false}, {0, 130, false, false}, {261, 272, true, false}, - {261, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, {391, 272, true, false}, - {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, {440, 272, true, false}, - {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, {0, 85, false, false}, - {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, - {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 142, true, false}, - {0, 130, false, false}, {0, 136, true, false}, {0, 409, true, false}, {440, 272, true, false}, - {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, {440, 272, true, false}, - {493, 272, true, false}, {493, 187, true, false}, {0, 85, false, false}, {587, 272, true, false}, - {523, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, - {391, 142, true, false}, {0, 130, false, false}, {523, 272, true, false}, {523, 187, true, false}, - {0, 85, false, false}, {261, 272, true, false}, {293, 272, true, false}, {349, 272, true, false}, - {349, 272, true, false}, {349, 187, true, false}, {0, 85, false, false}, {391, 272, true, false}, - {391, 68, true, false}, {349, 204, false, false}, {349, 68, true, false}, {329, 204, false, false}, - {293, 272, true, false}, {261, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, - {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, - {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, {329, 272, true, false}, - {329, 272, true, false}, {329, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, - {349, 272, true, false}, {329, 272, true, false}, {349, 272, true, false}, {391, 272, true, false}, - {329, 272, true, false}, {329, 272, true, false}, {329, 272, true, false}, {329, 142, true, false}, - {0, 130, false, false}, {261, 272, true, false}, {261, 187, true, false}, {0, 85, false, false}, - {329, 272, true, false}, {391, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, - {0, 85, false, false}, {440, 272, true, false}, {440, 272, true, false}, {493, 272, true, false}, - {493, 187, true, false}, {0, 85, false, false}, {587, 272, true, false}, {523, 272, true, false}, - {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, - {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, {0, 136, true, false}, - {0, 409, true, false}, {440, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, - {0, 85, false, false}, {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, - {0, 85, false, false}, {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, - {391, 272, true, false}, {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, - {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, - {587, 272, true, false}, {698, 272, true, false}, {698, 187, true, false}, {0, 85, false, false}, - {659, 272, true, false}, {659, 187, true, false}, {0, 85, false, false}, {493, 272, true, false}, - {493, 187, true, false}, {0, 85, false, false}, {0, 272, true, false}, {523, 272, true, false}, - {523, 272, true, false}, {523, 272, true, false}, {523, 272, true, false}, {523, 142, true, false}, - {0, 130, false, false}, {0, 272, true, false}, {0, 272, true, false}, {0, 272, true, false}, - {0, 272, true, false}, {523, 460, true, false}, {0, 272, false, false}, {0, 91, false, false}, - {587, 266, true, false}, {0, 551, false, false}, {659, 409, false, false}, {659, 45, false, false}, - {0, 91, false, false}, {493, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, - {391, 266, true, false}, {0, 551, false, false}, {329, 409, false, false}, {329, 45, false, false}, - {0, 91, false, false}, {440, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, - {493, 266, true, false}, {0, 551, false, false}, {523, 409, false, false}, {523, 45, false, false}, - {0, 91, false, false}, {391, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, - {0, 1227, true, false}, {0, 136, false, false}, {349, 454, true, false}, {0, 363, false, false}, - {391, 266, false, false}, {0, 415, false, false}, {0, 136, false, false}, {440, 454, true, false}, - {0, 91, false, false}, {391, 454, true, false}, {0, 363, false, false}, {493, 266, false, false}, - {0, 415, false, false}, {0, 136, false, false}, {523, 454, true, false}, {0, 91, false, false}, - {440, 454, true, false}, {0, 1046, false, false}, {0, 136, false, false}, {523, 454, true, false}, - {0, 91, false, false}, {587, 454, true, false}, {0, 1591, false, false}, {0, 136, false, false}, - {659, 266, true, false}, {587, 272, true, false}, {659, 272, true, false}, {698, 272, true, false}, - {783, 272, true, false}, {783, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, - {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 187, true, false}, - {0, 85, false, false}, {523, 272, true, false}, {523, 272, true, false}, {523, 187, true, false}, - {0, 85, false, false}, {659, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, - {783, 272, true, false}, {880, 272, true, false}, {987, 272, true, false}, {1046, 272, true, false}, - {1046, 187, true, false}, {0, 85, false, false}, {783, 272, true, false}, {698, 272, true, false}, - {659, 272, true, false}, {659, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, - {698, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, - {587, 142, true, false}, {0, 130, false, false}, {659, 272, true, false}, {587, 272, true, false}, - {659, 272, true, false}, {698, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, - {0, 85, false, false}, {659, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, - {587, 272, true, false}, {587, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, - {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, - {783, 272, true, false}, {880, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, - {987, 272, true, false}, {1046, 272, true, false}, {1046, 187, true, false}, {0, 85, false, false}, - {783, 272, true, false}, {698, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, - {587, 272, true, false}, {523, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, - {0, 85, false, false}, {391, 272, true, false}, {391, 187, true, false}, {0, 85, false, false}, - {659, 272, true, false}, {659, 272, true, false}, {659, 187, true, false}, {0, 85, false, false}, - {659, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, {698, 272, true, false}, - {783, 272, true, false}, {659, 272, true, false}, {659, 272, true, false}, {659, 272, true, false}, - {659, 142, true, false}, {0, 130, false, false}, {523, 272, true, false}, {523, 187, true, false}, - {0, 85, false, false}, {659, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, - {880, 187, true, false}, {0, 85, false, false}, {880, 272, true, false}, {880, 272, true, false}, - {987, 272, true, false}, {987, 187, true, false}, {0, 85, false, false}, {1174, 272, true, false}, - {1046, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, - {783, 272, true, false}, {783, 272, true, false}, {783, 142, true, false}, {0, 130, false, false}, - {0, 136, true, false}, {0, 409, true, false}, {880, 272, true, false}, {880, 272, true, false}, - {880, 187, true, false}, {0, 85, false, false}, {880, 272, true, false}, {987, 272, true, false}, - {987, 187, true, false}, {0, 85, false, false}, {1174, 272, true, false}, {1046, 272, true, false}, - {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 142, true, false}, - {0, 130, false, false}, {1046, 272, true, false}, {1046, 187, true, false}, {0, 85, false, false}, - {523, 272, true, false}, {587, 272, true, false}, {698, 272, true, false}, {698, 272, true, false}, - {698, 187, true, false}, {0, 85, false, false}, {783, 272, true, false}, {783, 68, true, false}, - {698, 204, false, false}, {698, 68, true, false}, {659, 204, false, false}, {587, 272, true, false}, - {523, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, - {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, {783, 272, true, false}, - {783, 142, true, false}, {0, 130, false, false}, {329, 272, true, false}, {329, 272, true, false}, - {329, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, {349, 272, true, false}, - {329, 272, true, false}, {349, 272, true, false}, {391, 272, true, false}, {329, 272, true, false}, - {329, 272, true, false}, {329, 272, true, false}, {329, 142, true, false}, {0, 130, false, false}, - {261, 272, true, false}, {261, 187, true, false}, {0, 85, false, false}, {329, 272, true, false}, - {391, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, - {440, 272, true, false}, {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, - {0, 85, false, false}, {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, - {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, - {391, 142, true, false}, {0, 130, false, false}, {0, 136, true, false}, {0, 409, true, false}, - {440, 272, true, false}, {440, 272, true, false}, {440, 187, true, false}, {0, 85, false, false}, - {440, 272, true, false}, {493, 272, true, false}, {493, 187, true, false}, {0, 85, false, false}, - {587, 272, true, false}, {523, 272, true, false}, {391, 272, true, false}, {391, 272, true, false}, - {391, 272, true, false}, {391, 142, true, false}, {0, 130, false, false}, {523, 272, true, false}, - {523, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, {587, 272, true, false}, - {698, 272, true, false}, {698, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, - {659, 187, true, false}, {0, 85, false, false}, {493, 272, true, false}, {493, 187, true, false}, - {0, 85, false, false}, {0, 272, true, false}, {523, 272, true, false}, {523, 272, true, false}, - {523, 272, true, false}, {523, 272, true, false}, {523, 142, true, false}, {0, 130, false, false}, - {0, 272, true, false}, {0, 272, true, false}, {0, 272, true, false}, {0, 272, true, false}, - {523, 460, true, false}, {0, 272, false, false}, {0, 91, false, false}, {587, 266, true, false}, - {0, 551, false, false}, {659, 409, false, false}, {659, 45, false, false}, {0, 91, false, false}, - {493, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, {391, 266, true, false}, - {0, 551, false, false}, {329, 409, false, false}, {329, 45, false, false}, {0, 91, false, false}, - {440, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, {493, 266, true, false}, - {0, 551, false, false}, {523, 409, false, false}, {523, 45, false, false}, {0, 91, false, false}, - {391, 454, true, false}, {0, 272, false, false}, {0, 91, false, false}, {0, 1227, true, false}, - {0, 136, false, false}, {349, 454, true, false}, {0, 363, false, false}, {391, 266, false, false}, - {0, 415, false, false}, {0, 136, false, false}, {440, 454, true, false}, {0, 91, false, false}, - {391, 454, true, false}, {0, 363, false, false}, {493, 266, false, false}, {0, 415, false, false}, - {0, 136, false, false}, {523, 454, true, false}, {0, 91, false, false}, {440, 454, true, false}, - {0, 1046, false, false}, {0, 136, false, false}, {523, 454, true, false}, {0, 91, false, false}, - {587, 454, true, false}, {0, 1591, false, false}, {0, 136, false, false}, {659, 266, true, false}, - {587, 272, true, false}, {659, 272, true, false}, {698, 272, true, false}, {783, 272, true, false}, - {783, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, {587, 272, true, false}, - {587, 272, true, false}, {587, 272, true, false}, {587, 187, true, false}, {0, 85, false, false}, - {523, 272, true, false}, {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, - {659, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, {783, 272, true, false}, - {880, 272, true, false}, {987, 272, true, false}, {1046, 272, true, false}, {1046, 187, true, false}, - {0, 85, false, false}, {783, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, - {659, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, {698, 272, true, false}, - {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 142, true, false}, - {0, 130, false, false}, {659, 272, true, false}, {587, 272, true, false}, {659, 272, true, false}, - {698, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, {0, 85, false, false}, - {659, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, {587, 272, true, false}, - {587, 187, true, false}, {0, 85, false, false}, {523, 272, true, false}, {523, 272, true, false}, - {523, 187, true, false}, {0, 85, false, false}, {659, 272, true, false}, {783, 272, true, false}, - {880, 272, true, false}, {783, 272, true, false}, {880, 272, true, false}, {987, 272, true, false}, - {1046, 272, true, false}, {1046, 187, true, false}, {0, 85, false, false}, {783, 272, true, false}, - {698, 272, true, false}, {698, 272, true, false}, {659, 272, true, false}, {587, 272, true, false}, - {523, 272, true, false}, {783, 272, true, false}, {783, 187, true, false}, {0, 85, false, false}, - {391, 272, true, false}, {391, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, - {622, 272, true, false}, {698, 272, true, false}, {739, 272, true, false}, {830, 272, true, false}, - {830, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, {622, 272, true, false}, - {622, 272, true, false}, {622, 272, true, false}, {622, 187, true, false}, {0, 85, false, false}, - {554, 272, true, false}, {554, 272, true, false}, {554, 187, true, false}, {0, 85, false, false}, - {698, 272, true, false}, {830, 272, true, false}, {932, 272, true, false}, {830, 272, true, false}, - {932, 272, true, false}, {1046, 272, true, false}, {1108, 272, true, false}, {1108, 187, true, false}, - {0, 85, false, false}, {830, 272, true, false}, {739, 272, true, false}, {698, 272, true, false}, - {698, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, {739, 272, true, false}, - {622, 272, true, false}, {622, 272, true, false}, {622, 272, true, false}, {622, 142, true, false}, - {0, 130, false, false}, {698, 272, true, false}, {622, 272, true, false}, {698, 272, true, false}, - {739, 272, true, false}, {830, 272, true, false}, {830, 187, true, false}, {0, 85, false, false}, - {698, 272, true, false}, {622, 272, true, false}, {622, 272, true, false}, {622, 272, true, false}, - {622, 187, true, false}, {0, 85, false, false}, {554, 272, true, false}, {554, 272, true, false}, - {554, 187, true, false}, {0, 85, false, false}, {698, 272, true, false}, {830, 272, true, false}, - {932, 272, true, false}, {830, 272, true, false}, {932, 272, true, false}, {1046, 272, true, false}, - {1108, 272, true, false}, {1108, 187, true, false}, {0, 85, false, false}, {830, 272, true, false}, - {739, 272, true, false}, {739, 272, true, false}, {698, 272, true, false}, {622, 272, true, false}, - {554, 272, true, false}, {830, 272, true, false}, {830, 187, true, false}, {0, 85, false, false}, - {523, 272, true, false}, {523, 187, true, false}, {0, 85, false, false}, {349, 960, true, true}, - {0, 409, false, false}, {349, 266, false, false}, {369, 204, false, false}, {415, 210, false, false}, - {415, 130, false, false}, {466, 960, true, false}, {0, 409, false, false}, {466, 266, false, false}, - {415, 204, false, false}, {369, 210, false, false}, {369, 130, false, false}, {349, 960, true, true}, - {0, 409, false, false}, {349, 266, false, false}, {369, 204, false, false}, {415, 210, false, false}, - {415, 130, false, false}, {466, 960, true, false}, {0, 409, false, false}, {466, 266, false, false}, - {415, 204, false, false}, {369, 210, false, false}, {369, 130, false, false}, {349, 960, true, true}, - {0, 409, false, false}, {349, 266, false, false}, {369, 204, false, false}, {415, 210, false, false}, - {415, 130, false, false}, {466, 960, true, false}, {0, 136, false, false}, {554, 954, false, false}, - {554, 341, false, false}, {554, 62, true, false}, {415, 68, false, false}, {554, 210, false, false}, - {554, 954, false, false}, {0, 682, false, false}, {0, 454, true, false}, - {0, 2000, false, false} -}; - -// Converted from: potc_3.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_potc_3[] = { - {293, 249, false, false}, {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, - {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, {0, 49, false, false}, - {293, 146, false, false}, {293, 149, false, false}, {293, 149, false, false}, {293, 149, false, false}, - {293, 253, false, false}, {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, - {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, {0, 49, false, false}, - {293, 146, false, false}, {293, 149, false, false}, {293, 149, false, false}, {293, 149, false, false}, - {293, 253, true, false}, {0, 49, false, false}, {293, 146, false, false}, {293, 253, false, false}, - {0, 49, false, false}, {293, 75, false, false}, {293, 71, false, false}, {293, 253, true, false}, - {0, 49, false, false}, {293, 99, false, false}, {293, 46, false, false}, {293, 149, true, false}, - {0, 149, false, true}, {261, 103, false, false}, {261, 46, false, false}, {293, 253, true, true}, - {0, 49, false, false}, {293, 146, true, true}, {293, 103, true, true}, {0, 49, false, false}, - {293, 99, false, true}, {293, 46, false, false}, {329, 149, true, true}, {349, 253, true, true}, - {0, 49, false, false}, {349, 146, true, true}, {349, 103, true, false}, {0, 49, false, false}, - {349, 99, false, true}, {349, 46, false, false}, {391, 149, true, false}, {329, 253, true, true}, - {0, 49, false, false}, {329, 146, true, true}, {329, 103, true, false}, {0, 49, false, false}, - {293, 99, false, true}, {293, 46, false, false}, {261, 149, true, true}, {261, 149, true, true}, - {293, 103, false, true}, {293, 49, false, false}, {293, 99, true, true}, {0, 46, false, false}, - {0, 153, true, true}, {0, 99, false, true}, {0, 46, false, false}, {261, 149, true, true}, - {293, 253, true, true}, {0, 49, false, false}, {293, 146, true, true}, {293, 103, true, false}, - {0, 49, false, false}, {293, 99, false, true}, {293, 46, false, false}, {329, 149, true, true}, - {349, 253, true, true}, {0, 49, false, false}, {349, 146, true, true}, {349, 103, true, false}, - {0, 49, false, false}, {349, 99, false, false}, {349, 46, false, false}, {391, 149, true, false}, - {329, 253, true, false}, {0, 49, false, false}, {329, 146, true, false}, {329, 103, true, false}, - {0, 49, false, false}, {293, 99, false, true}, {293, 46, false, false}, {261, 149, true, false}, - {293, 253, true, true}, {0, 49, false, false}, {0, 146, true, true}, {0, 153, true, true}, - {0, 99, false, true}, {0, 46, false, false}, {261, 149, true, true}, {293, 253, true, true}, - {0, 49, false, false}, {293, 146, true, true}, {293, 103, true, true}, {0, 49, false, false}, - {293, 99, false, true}, {293, 46, false, false}, {349, 149, true, true}, {391, 253, true, true}, - {0, 49, false, false}, {391, 146, true, true}, {391, 103, true, false}, {0, 49, false, false}, - {391, 99, false, false}, {391, 46, false, false}, {440, 149, true, false}, {466, 253, true, false}, - {0, 49, false, false}, {466, 146, true, false}, {466, 103, true, false}, {0, 49, false, false}, - {440, 99, false, false}, {440, 46, false, false}, {391, 149, true, false}, {440, 149, true, true}, - {293, 103, false, false}, {293, 49, false, false}, {293, 99, true, true}, {0, 46, false, false}, - {0, 153, true, true}, {293, 99, false, false}, {293, 46, false, false}, {329, 149, true, true}, - {349, 253, true, true}, {0, 49, false, false}, {349, 146, true, true}, {349, 103, true, false}, - {0, 49, false, false}, {391, 99, false, true}, {391, 49, false, false}, {391, 99, true, false}, - {0, 46, false, false}, {440, 149, true, true}, {293, 103, false, false}, {293, 49, false, false}, - {293, 99, true, true}, {0, 46, false, false}, {0, 153, true, true}, {293, 99, false, false}, - {293, 46, false, false}, {349, 149, true, true}, {329, 253, true, true}, {0, 49, false, false}, - {329, 146, true, true}, {329, 103, true, false}, {0, 49, false, false}, {349, 99, false, false}, - {349, 46, false, false}, {293, 149, true, true}, {329, 149, true, true}, {0, 103, false, false}, - {0, 49, false, false}, {0, 146, true, false}, {0, 153, true, false}, {440, 99, false, false}, - {440, 46, false, false}, {523, 149, true, false}, {587, 253, true, true}, {0, 49, false, false}, - {587, 146, true, true}, {587, 103, true, true}, {0, 49, false, false}, {587, 99, false, false}, - {587, 46, false, false}, {659, 149, true, false}, {698, 253, true, false}, {0, 49, false, false}, - {698, 146, true, false}, {698, 103, true, false}, {0, 49, false, false}, {698, 99, false, false}, - {698, 46, false, false}, {783, 149, true, false}, {659, 253, true, false}, {0, 49, false, false}, - {659, 146, true, false}, {659, 103, true, false}, {0, 49, false, false}, {587, 99, false, false}, - {587, 46, false, false}, {523, 149, true, false}, {523, 149, true, true}, {587, 103, false, false}, - {587, 49, false, false}, {587, 99, true, true}, {0, 46, false, false}, {0, 153, true, true}, - {440, 99, false, false}, {440, 46, false, false}, {523, 149, true, true}, {587, 253, true, false}, - {0, 49, false, false}, {587, 146, true, false}, {587, 103, true, false}, {0, 49, false, false}, - {587, 99, false, false}, {587, 46, false, false}, {659, 149, true, false}, {698, 253, true, false}, - {0, 49, false, false}, {698, 146, true, false}, {698, 103, true, false}, {0, 49, false, false}, - {698, 99, false, false}, {698, 46, false, false}, {783, 149, true, false}, {659, 253, true, false}, - {0, 49, false, false}, {659, 146, true, false}, {659, 103, true, false}, {0, 49, false, false}, - {587, 99, false, false}, {587, 46, false, false}, {523, 149, true, false}, {587, 253, true, true}, - {0, 49, false, false}, {0, 146, true, true}, {0, 153, true, true}, {440, 99, false, false}, - {440, 46, false, false}, {523, 149, true, true}, {587, 253, true, true}, {0, 49, false, false}, - {587, 146, true, true}, {587, 103, true, true}, {0, 49, false, false}, {587, 99, false, false}, - {587, 46, false, false}, {698, 149, true, true}, {783, 253, true, false}, {0, 49, false, false}, - {783, 146, true, false}, {783, 103, true, false}, {0, 49, false, false}, {783, 99, false, false}, - {783, 46, false, false}, {880, 149, true, false}, {932, 253, true, false}, {0, 49, false, false}, - {932, 146, true, false}, {932, 103, true, false}, {0, 49, false, false}, {880, 99, false, false}, - {880, 46, false, false}, {783, 149, true, false}, {880, 149, true, true}, {587, 103, false, false}, - {587, 49, false, false}, {587, 99, true, true}, {0, 46, false, false}, {0, 153, true, true}, - {587, 99, false, false}, {587, 46, false, false}, {659, 149, true, true}, {698, 253, true, false}, - {0, 49, false, false}, {698, 146, true, false}, {698, 103, true, false}, {0, 49, false, false}, - {783, 99, false, false}, {783, 49, false, false}, {783, 99, true, false}, {0, 46, false, false}, - {880, 149, true, true}, {587, 103, false, false}, {587, 49, false, false}, {587, 99, true, true}, - {0, 46, false, false}, {0, 153, true, true}, {587, 99, false, false}, {587, 46, false, false}, - {698, 149, true, true}, {659, 253, true, false}, {0, 49, false, false}, {659, 146, true, false}, - {659, 103, true, false}, {0, 49, false, false}, {587, 99, false, false}, {587, 46, false, false}, - {554, 149, true, false}, {587, 253, true, true}, {0, 49, false, false}, {587, 249, true, true}, - {0, 49, false, false}, {659, 249, true, false}, {0, 49, false, false}, {698, 249, true, false}, - {0, 49, false, false}, {698, 146, true, false}, {698, 103, false, false}, {698, 46, false, false}, - {783, 253, true, false}, {0, 49, false, false}, {880, 146, true, false}, {698, 103, false, false}, - {698, 46, false, false}, {0, 149, true, false}, {0, 153, true, false}, {698, 99, false, false}, - {698, 46, false, false}, {587, 149, true, false}, {440, 149, true, false}, {0, 103, false, false}, - {0, 49, false, false}, {0, 146, true, false}, {0, 253, true, false}, {0, 49, false, false}, - {0, 146, true, false}, {932, 149, true, false}, {0, 103, false, false}, {0, 49, false, false}, - {0, 146, true, false}, {0, 153, true, false}, {783, 99, false, false}, {783, 46, false, false}, - {587, 149, true, false}, {466, 149, true, false}, {0, 103, false, false}, {0, 49, false, false}, - {0, 146, true, false}, {0, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, - {329, 149, true, false}, {329, 103, false, false}, {329, 49, false, false}, {329, 99, true, false}, - {0, 46, false, false}, {293, 253, true, true}, {293, 49, false, false}, {293, 99, true, false}, - {0, 46, false, false}, {349, 253, true, true}, {349, 49, false, false}, {349, 99, true, false}, - {0, 46, false, false}, {0, 153, true, false}, {349, 99, false, false}, {349, 46, false, false}, - {391, 149, true, false}, {440, 253, true, true}, {0, 49, false, false}, {440, 146, true, true}, - {440, 103, true, true}, {0, 49, false, false}, {440, 99, false, false}, {440, 49, false, false}, - {440, 99, true, true}, {0, 46, false, false}, {466, 149, true, true}, {440, 103, false, false}, - {440, 46, false, false}, {0, 149, true, true}, {0, 149, true, true}, {0, 149, true, true}, - {0, 149, true, true}, {391, 253, true, false}, {0, 49, false, false}, {391, 146, true, false}, - {391, 103, true, false}, {0, 49, false, false}, {391, 99, false, false}, {391, 49, false, false}, - {391, 99, true, false}, {0, 46, false, false}, {391, 149, true, true}, {440, 103, false, false}, - {440, 46, false, false}, {0, 149, true, true}, {0, 149, true, true}, {0, 149, true, true}, - {0, 149, true, true}, {440, 253, true, true}, {0, 49, false, false}, {440, 146, true, true}, - {440, 103, true, true}, {0, 49, false, false}, {440, 99, false, false}, {440, 49, false, false}, - {440, 99, true, true}, {0, 46, false, false}, {466, 149, true, true}, {440, 103, false, false}, - {440, 46, false, false}, {0, 149, true, true}, {0, 149, true, true}, {0, 149, true, true}, - {0, 149, true, true}, {391, 253, true, false}, {0, 49, false, false}, {349, 146, true, false}, - {349, 103, true, false}, {0, 49, false, false}, {329, 99, false, true}, {329, 49, false, false}, - {329, 99, true, false}, {0, 46, false, false}, {293, 253, true, true}, {0, 49, false, false}, - {0, 146, true, true}, {0, 153, true, true}, {293, 99, false, false}, {293, 46, false, false}, - {329, 149, true, true}, {349, 253, true, true}, {349, 49, false, false}, {349, 146, true, true}, - {349, 78, true, true}, {0, 75, false, false}, {391, 99, false, false}, {391, 46, false, false}, - {440, 149, true, true}, {391, 253, true, false}, {0, 49, false, false}, {349, 146, true, false}, - {349, 103, true, false}, {0, 46, false, false}, {329, 149, true, false}, {329, 103, true, false}, - {0, 46, false, false}, {349, 253, true, true}, {0, 49, false, false}, {391, 146, true, true}, - {391, 103, true, true}, {0, 46, false, false}, {440, 149, true, true}, {440, 103, true, true}, - {0, 46, false, false}, {391, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, - {0, 149, true, false}, {349, 149, true, false}, {391, 149, true, false}, {440, 253, true, true}, - {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {391, 149, true, true}, - {349, 149, true, true}, {329, 253, true, false}, {0, 49, false, false}, {349, 146, true, false}, - {349, 103, true, false}, {0, 46, false, false}, {329, 149, true, false}, {329, 103, true, false}, - {0, 46, false, false}, {293, 253, true, true}, {0, 49, false, false}, {0, 146, true, true}, - {0, 153, true, true}, {329, 99, false, false}, {329, 46, false, false}, {261, 149, true, true}, - {293, 149, true, true}, {0, 103, false, false}, {0, 49, false, false}, {0, 146, true, true}, - {0, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, {698, 253, true, true}, - {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {659, 149, true, true}, - {698, 149, true, true}, {783, 253, true, false}, {0, 49, false, false}, {698, 146, true, false}, - {698, 103, true, false}, {0, 46, false, false}, {783, 149, true, false}, {783, 103, true, false}, - {0, 46, false, false}, {880, 253, true, true}, {0, 49, false, false}, {783, 146, true, true}, - {783, 103, true, true}, {0, 46, false, false}, {698, 149, true, true}, {698, 103, true, true}, - {0, 46, false, false}, {587, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, - {0, 149, true, false}, {587, 149, true, false}, {659, 149, true, false}, {698, 253, true, true}, - {0, 49, false, false}, {783, 146, true, true}, {783, 103, true, true}, {0, 46, false, false}, - {880, 149, true, true}, {880, 103, true, true}, {0, 46, false, false}, {932, 253, true, false}, - {0, 49, false, false}, {587, 146, true, false}, {587, 103, true, false}, {0, 46, false, false}, - {783, 149, true, false}, {783, 103, true, false}, {0, 46, false, false}, {698, 253, true, false}, - {0, 49, false, false}, {0, 146, true, false}, {0, 149, true, false}, {783, 149, true, false}, - {659, 149, true, false}, {587, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, - {0, 149, true, false}, {659, 149, true, false}, {554, 149, true, false}, {880, 253, true, true}, - {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {0, 149, true, true}, - {0, 149, true, true}, {932, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, - {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {880, 253, true, true}, - {0, 49, false, false}, {880, 146, true, true}, {880, 103, true, true}, {0, 49, false, false}, - {880, 99, false, false}, {880, 49, false, false}, {880, 99, true, true}, {0, 46, false, false}, - {880, 149, true, false}, {783, 103, false, false}, {783, 46, false, false}, {0, 149, true, false}, - {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {783, 253, true, false}, - {0, 49, false, false}, {0, 146, true, false}, {0, 149, true, false}, {0, 149, true, false}, - {0, 149, true, false}, {698, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, - {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {698, 253, true, false}, - {0, 49, false, false}, {783, 146, true, false}, {783, 103, true, false}, {0, 46, false, false}, - {659, 149, true, false}, {659, 103, true, false}, {0, 46, false, false}, {587, 253, true, true}, - {587, 49, false, false}, {587, 99, true, true}, {0, 46, false, false}, {587, 149, true, true}, - {659, 149, true, true}, {698, 149, true, true}, {880, 253, true, true}, {880, 49, false, false}, - {880, 99, true, true}, {0, 46, false, false}, {587, 149, true, true}, {659, 149, true, true}, - {698, 149, true, true}, {932, 253, true, false}, {932, 49, false, false}, {932, 99, true, false}, - {0, 46, false, false}, {587, 149, true, false}, {659, 149, true, false}, {698, 149, true, false}, - {880, 253, true, true}, {0, 49, false, false}, {880, 146, true, true}, {880, 103, true, true}, - {0, 46, false, false}, {1046, 149, true, true}, {1046, 103, true, true}, {0, 46, false, false}, - {880, 149, true, false}, {783, 103, false, false}, {783, 46, false, false}, {0, 149, true, false}, - {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {783, 253, true, false}, - {0, 49, false, false}, {0, 146, true, false}, {0, 149, true, false}, {0, 149, true, false}, - {0, 149, true, false}, {698, 253, true, false}, {0, 49, false, false}, {0, 146, true, false}, - {0, 149, true, false}, {0, 149, true, false}, {0, 149, true, false}, {698, 253, true, false}, - {0, 49, false, false}, {783, 146, true, false}, {783, 103, true, false}, {0, 46, false, false}, - {659, 149, true, false}, {659, 103, true, false}, {0, 46, false, false}, {587, 403, true, true}, - {0, 49, false, false}, {0, 146, true, true}, {0, 149, true, true}, {0, 149, true, true}, - {293, 1128, true, false}, - {0, 2000, false, false} -}; - - -// Converted from: potc_2.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_potc_2[] = { - {0, 296, false, true}, {0, 149, false, true}, {0, 300, false, true}, {0, 149, false, true}, - {0, 300, false, true}, {0, 149, false, true}, {0, 149, false, true}, {0, 149, false, true}, - {0, 149, false, true}, {0, 300, false, true}, {0, 149, false, true}, {0, 300, false, true}, - {0, 149, false, true}, {0, 300, false, true}, {0, 149, false, true}, {0, 149, false, true}, - {0, 149, false, true}, {0, 149, false, true}, {293, 300, false, true}, {293, 149, false, true}, - {293, 300, false, true}, {293, 149, false, true}, {293, 300, false, true}, {293, 149, false, true}, - {293, 149, false, true}, {293, 149, false, true}, {293, 149, false, true}, {293, 300, false, true}, - {293, 149, false, true}, {293, 300, false, true}, {293, 149, false, true}, {293, 300, false, true}, - {293, 149, true, true}, {293, 149, true, true}, {293, 149, false, true}, {293, 149, false, true}, - {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, - {293, 149, true, false}, {329, 149, true, false}, {349, 149, true, true}, {349, 149, true, false}, - {349, 149, true, true}, {349, 149, true, true}, {391, 149, true, false}, {391, 149, true, true}, - {329, 149, true, true}, {329, 149, true, false}, {329, 149, true, true}, {329, 149, true, true}, - {293, 149, true, false}, {261, 149, true, true}, {293, 149, true, true}, {587, 149, true, true}, - {523, 149, true, true}, {587, 149, true, true}, {0, 149, true, true}, {293, 149, true, true}, - {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, - {293, 149, true, false}, {329, 149, true, true}, {349, 149, true, true}, {349, 149, true, false}, - {349, 149, true, true}, {349, 149, true, true}, {391, 149, true, false}, {391, 149, true, true}, - {329, 149, true, true}, {329, 149, true, false}, {329, 149, true, false}, {329, 149, true, true}, - {293, 149, true, false}, {261, 149, true, true}, {293, 149, true, true}, {587, 149, true, true}, - {523, 149, true, true}, {587, 149, true, true}, {0, 149, true, true}, {293, 149, true, true}, - {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, - {293, 149, true, false}, {349, 149, true, true}, {391, 149, true, true}, {391, 149, true, false}, - {391, 149, true, true}, {391, 149, true, true}, {440, 149, true, false}, {466, 149, true, true}, - {466, 149, true, true}, {466, 149, true, false}, {466, 149, true, true}, {440, 149, true, true}, - {440, 149, true, false}, {391, 149, true, true}, {440, 149, true, true}, {293, 149, true, true}, - {293, 149, true, true}, {293, 149, true, true}, {293, 149, true, false}, {329, 149, true, true}, - {349, 149, true, true}, {349, 149, true, false}, {391, 149, true, true}, {391, 149, true, true}, - {440, 149, true, false}, {440, 149, true, true}, {293, 149, true, true}, {293, 149, true, false}, - {293, 149, true, true}, {293, 149, true, true}, {349, 149, true, false}, {329, 149, true, true}, - {329, 149, true, true}, {329, 149, true, false}, {329, 149, true, true}, {349, 149, true, true}, - {293, 149, true, true}, {329, 149, true, true}, {329, 149, true, true}, {329, 149, true, true}, - {329, 149, true, true}, {329, 149, true, true}, {440, 149, true, true}, {523, 149, true, true}, - {587, 149, true, true}, {587, 149, true, false}, {587, 149, true, true}, {587, 149, true, true}, - {587, 149, true, false}, {659, 149, true, false}, {698, 149, true, true}, {698, 149, true, false}, - {698, 149, true, true}, {698, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, - {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, true}, {659, 149, true, true}, - {587, 149, true, false}, {523, 149, true, true}, {587, 149, true, true}, {1174, 149, true, true}, - {1046, 149, true, true}, {1174, 149, true, true}, {440, 149, true, false}, {523, 149, true, true}, - {587, 149, true, true}, {587, 149, true, false}, {587, 149, true, true}, {587, 149, true, true}, - {587, 149, true, false}, {659, 149, true, true}, {698, 149, true, true}, {698, 149, true, false}, - {698, 149, true, true}, {698, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, - {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, false}, {659, 149, true, true}, - {587, 149, true, false}, {523, 149, true, true}, {587, 149, true, true}, {1174, 149, true, true}, - {1046, 149, true, true}, {1174, 149, true, true}, {440, 149, true, false}, {523, 149, true, true}, - {587, 149, true, true}, {587, 149, true, false}, {587, 149, true, true}, {587, 149, true, true}, - {587, 149, true, false}, {698, 149, true, true}, {783, 149, true, true}, {783, 149, true, false}, - {783, 149, true, true}, {783, 149, true, true}, {880, 149, true, false}, {932, 149, true, true}, - {932, 149, true, true}, {932, 149, true, false}, {932, 149, true, true}, {880, 149, true, true}, - {880, 149, true, false}, {783, 149, true, true}, {880, 149, true, true}, {587, 149, true, true}, - {587, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, {659, 149, true, true}, - {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {880, 149, true, false}, {880, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, - {587, 149, true, true}, {587, 149, true, true}, {698, 149, true, false}, {659, 149, true, true}, - {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, true}, {659, 149, true, true}, - {587, 149, true, false}, {554, 149, true, true}, {587, 300, true, true}, {587, 300, true, true}, - {659, 300, true, false}, {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, - {698, 149, true, true}, {783, 149, true, true}, {783, 149, true, true}, {880, 149, true, true}, - {698, 149, false, false}, {698, 149, true, false}, {698, 149, true, false}, {698, 149, false, false}, - {587, 149, true, false}, {440, 300, true, false}, {440, 149, true, false}, {440, 300, true, false}, - {440, 149, true, false}, {932, 149, true, true}, {932, 150, false, false}, {932, 149, true, false}, - {932, 149, true, false}, {783, 149, false, false}, {587, 149, true, false}, {466, 300, true, false}, - {466, 149, true, false}, {466, 300, true, false}, {466, 149, true, false}, {329, 149, true, true}, - {329, 149, true, true}, {329, 149, true, true}, {293, 149, true, true}, {293, 149, true, true}, - {293, 149, true, true}, {349, 149, true, true}, {349, 149, true, false}, {349, 149, true, true}, - {349, 149, true, true}, {349, 149, true, false}, {391, 149, true, true}, {440, 149, true, true}, - {440, 149, true, false}, {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, false}, - {440, 149, true, true}, {466, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, - {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, {391, 149, true, true}, - {391, 149, true, false}, {391, 149, true, false}, {391, 149, true, true}, {391, 149, true, false}, - {391, 149, true, false}, {440, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, - {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, - {440, 149, true, false}, {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, false}, - {440, 149, true, true}, {466, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, - {440, 149, true, true}, {440, 149, true, true}, {440, 149, true, true}, {391, 149, true, true}, - {391, 149, true, false}, {349, 149, true, true}, {349, 149, true, true}, {329, 149, true, false}, - {329, 149, true, true}, {293, 149, true, true}, {293, 149, true, true}, {293, 149, true, true}, - {293, 149, true, true}, {293, 149, true, true}, {329, 149, true, true}, {349, 149, true, true}, - {349, 150, false, false}, {349, 149, false, true}, {349, 149, false, true}, {391, 149, false, false}, - {440, 149, false, true}, {391, 300, true, false}, {349, 149, true, false}, {349, 149, true, false}, - {329, 149, true, false}, {329, 149, true, false}, {349, 300, false, true}, {391, 149, false, true}, - {391, 149, false, true}, {440, 149, false, true}, {440, 149, false, true}, {391, 300, true, false}, - {391, 149, true, false}, {391, 149, true, false}, {349, 149, true, false}, {391, 149, true, false}, - {440, 149, true, true}, {440, 149, true, false}, {440, 149, true, true}, {440, 149, true, true}, - {391, 149, true, true}, {349, 149, true, true}, {329, 149, true, true}, {329, 149, true, false}, - {349, 149, true, true}, {349, 149, true, true}, {329, 149, true, true}, {329, 149, true, true}, - {293, 149, true, true}, {293, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, - {329, 149, true, false}, {293, 149, true, true}, {293, 149, true, true}, {293, 149, true, false}, - {293, 149, true, true}, {293, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, - {698, 149, true, true}, {698, 149, true, false}, {698, 149, true, true}, {698, 149, true, true}, - {659, 149, true, true}, {698, 149, true, true}, {783, 149, true, true}, {783, 149, true, false}, - {698, 149, true, false}, {698, 149, true, true}, {783, 149, true, false}, {783, 149, true, false}, - {880, 149, true, true}, {880, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {698, 149, true, true}, {698, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, - {587, 149, true, true}, {587, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, - {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {880, 149, true, true}, {880, 149, true, true}, {932, 149, true, true}, {932, 149, true, false}, - {587, 149, true, true}, {587, 149, true, true}, {783, 149, true, true}, {783, 149, true, true}, - {698, 149, true, true}, {698, 149, true, false}, {698, 149, true, true}, {698, 149, true, true}, - {783, 149, true, true}, {659, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, - {587, 149, true, true}, {554, 149, true, true}, {554, 149, true, true}, {554, 149, true, true}, - {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {880, 149, true, true}, - {880, 149, true, true}, {880, 149, true, true}, {932, 149, true, true}, {932, 149, true, false}, - {932, 149, true, true}, {932, 149, true, true}, {932, 149, true, true}, {932, 149, true, true}, - {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {880, 149, true, false}, - {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {783, 149, true, false}, - {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, false}, - {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {783, 149, true, true}, {783, 149, true, true}, {698, 149, true, true}, {698, 149, true, false}, - {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, - {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {659, 149, true, true}, {659, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, - {587, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, {698, 149, true, true}, - {880, 149, true, true}, {698, 149, true, false}, {659, 149, true, true}, {587, 149, true, true}, - {659, 149, true, true}, {698, 149, true, true}, {932, 149, true, true}, {698, 149, true, false}, - {659, 149, true, true}, {587, 149, true, true}, {659, 149, true, true}, {698, 149, true, true}, - {880, 149, true, true}, {880, 149, true, false}, {880, 149, true, true}, {880, 149, true, true}, - {1046, 149, true, true}, {1046, 149, true, true}, {880, 149, true, true}, {783, 149, true, false}, - {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, false}, - {783, 149, true, true}, {783, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {783, 149, true, true}, {783, 149, true, true}, {698, 149, true, true}, {698, 149, true, false}, - {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, {698, 149, true, true}, - {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {659, 149, true, true}, {659, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, - {293, 149, true, false}, {293, 149, true, true}, {587, 149, true, false}, {659, 149, true, true}, - {698, 149, true, true}, {698, 149, true, false}, {783, 149, true, true}, {783, 149, true, true}, - {880, 149, true, false}, {880, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, - {587, 149, true, true}, {587, 149, true, true}, {698, 149, true, false}, {659, 149, true, true}, - {659, 149, true, true}, {659, 149, true, false}, {659, 149, true, true}, {659, 149, true, true}, - {587, 149, true, false}, {554, 149, true, true}, {587, 149, true, true}, {587, 149, true, false}, - {587, 149, true, true}, {587, 149, true, true}, {0, 300, false, false}, - {0, 2000, false, false} -}; - - - -// Converted from: alla_turca_8.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_alla_turca[] = { - {493, 136, false, false}, {440, 136, false, false}, {415, 136, false, false}, {440, 136, false, false}, - {523, 272, false, true}, {329, 272, false, false}, {587, 136, false, false}, {523, 136, false, false}, - {493, 136, false, false}, {523, 136, false, false}, {659, 272, false, true}, {329, 272, false, false}, - {698, 136, false, false}, {659, 136, false, false}, {622, 136, false, false}, {659, 136, false, false}, - {987, 136, false, true}, {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, - {987, 136, false, true}, {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, - {1046, 272, false, true}, {1046, 272, false, false}, {880, 272, false, false}, {1046, 272, false, false}, - {987, 272, false, true}, {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, - {987, 272, false, true}, {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, - {987, 272, false, true}, {880, 272, false, true}, {783, 272, true, false}, {739, 272, false, true}, - {659, 545, false, true}, {659, 272, false, false}, {698, 272, false, false}, {783, 272, true, false}, - {783, 272, false, false}, {880, 136, false, true}, {783, 136, false, false}, {698, 136, false, false}, - {659, 136, false, false}, {587, 272, false, true}, {391, 272, false, false}, {659, 272, false, false}, - {698, 272, false, false}, {783, 272, true, false}, {783, 272, false, false}, {880, 136, false, true}, - {783, 136, false, false}, {698, 136, false, false}, {659, 136, false, false}, {587, 545, false, true}, - {523, 272, false, false}, {587, 272, false, false}, {659, 272, true, false}, {659, 272, false, true}, - {698, 136, true, false}, {659, 136, false, false}, {587, 136, false, false}, {523, 136, false, false}, - {493, 272, false, true}, {329, 272, false, false}, {523, 272, false, false}, {587, 272, false, false}, - {659, 272, true, false}, {659, 272, false, true}, {698, 136, true, false}, {659, 136, false, false}, - {587, 136, false, false}, {523, 136, false, false}, {493, 545, false, true}, {493, 136, false, false}, - {440, 136, false, false}, {415, 136, false, false}, {440, 136, false, false}, {523, 272, false, true}, - {329, 272, false, false}, {587, 136, false, false}, {523, 136, false, false}, {493, 136, false, false}, - {523, 136, false, false}, {659, 272, false, true}, {329, 272, false, false}, {698, 136, false, false}, - {659, 136, false, false}, {622, 136, false, false}, {659, 136, false, false}, {987, 136, false, true}, - {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {987, 136, false, true}, - {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {1046, 272, false, true}, - {311, 272, false, true}, {880, 272, false, true}, {987, 272, false, true}, {1046, 272, false, true}, - {987, 272, false, true}, {880, 272, false, true}, {830, 272, false, true}, {880, 272, true, false}, - {659, 272, false, true}, {698, 272, false, true}, {587, 272, false, true}, {523, 272, false, true}, - {523, 272, false, true}, {493, 272, false, true}, {493, 136, false, true}, {440, 68, false, false}, - {493, 68, false, false}, {493, 68, true, true}, {440, 477, false, false}, {880, 272, false, false}, - {987, 272, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, - {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {880, 272, false, true}, - {830, 272, false, true}, {739, 272, false, true}, {830, 272, false, true}, {880, 272, false, true}, - {987, 272, false, true}, {830, 272, false, true}, {659, 272, false, true}, {880, 272, false, true}, - {987, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, - {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {880, 272, false, true}, - {830, 272, false, true}, {739, 272, false, true}, {987, 272, false, true}, {830, 272, false, true}, - {659, 272, false, true}, {880, 545, true, false}, {1108, 136, false, false}, {1174, 136, false, false}, - {1108, 136, false, false}, {987, 136, false, false}, {880, 136, false, true}, {987, 136, false, false}, - {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, true}, {880, 136, false, false}, - {830, 136, false, true}, {739, 136, false, false}, {698, 136, false, true}, {739, 136, false, false}, - {830, 136, false, true}, {698, 136, false, false}, {554, 136, false, true}, {622, 136, false, false}, - {698, 136, false, true}, {554, 136, false, false}, {739, 136, false, true}, {698, 136, false, false}, - {739, 136, false, true}, {830, 136, false, false}, {880, 136, false, true}, {830, 136, false, false}, - {880, 136, false, true}, {987, 136, false, false}, {1108, 136, false, true}, {1046, 136, false, false}, - {1108, 136, false, true}, {1046, 136, false, false}, {1108, 136, false, true}, {1174, 136, false, false}, - {1108, 136, false, true}, {987, 136, false, false}, {880, 136, false, true}, {987, 136, false, false}, - {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, true}, {880, 136, false, false}, - {830, 136, false, true}, {739, 136, false, false}, {659, 136, false, true}, {739, 136, false, false}, - {830, 136, false, false}, {659, 136, false, false}, {554, 136, false, false}, {622, 136, false, false}, - {659, 136, false, false}, {554, 136, false, false}, {622, 136, false, true}, {659, 136, false, false}, - {739, 136, false, false}, {622, 136, false, false}, {523, 136, false, false}, {554, 136, false, false}, - {622, 136, false, false}, {523, 136, false, false}, {554, 545, false, false}, {659, 136, false, false}, - {587, 136, false, false}, {554, 136, false, false}, {493, 136, false, false}, {440, 136, false, true}, - {493, 136, false, false}, {554, 136, false, false}, {587, 136, false, false}, {659, 136, false, false}, - {739, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {880, 136, false, true}, - {830, 136, false, false}, {739, 136, false, false}, {659, 136, false, false}, {659, 136, false, true}, - {587, 136, false, false}, {554, 136, false, false}, {493, 136, false, false}, {440, 136, false, true}, - {493, 136, false, false}, {554, 136, false, false}, {587, 136, false, false}, {659, 136, false, false}, - {739, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {932, 272, false, true}, - {987, 272, false, true}, {659, 136, false, true}, {587, 136, false, false}, {554, 136, false, true}, - {493, 136, false, false}, {440, 136, false, true}, {493, 136, false, false}, {554, 136, false, false}, - {587, 136, false, false}, {659, 136, false, false}, {739, 136, false, false}, {830, 136, false, false}, - {880, 136, false, false}, {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, false}, - {659, 136, false, false}, {659, 136, false, true}, {587, 136, false, false}, {554, 136, false, false}, - {493, 136, false, false}, {554, 136, false, true}, {659, 136, false, false}, {440, 136, false, true}, - {554, 136, false, false}, {493, 136, false, true}, {587, 136, false, false}, {415, 136, false, true}, - {493, 136, false, false}, {440, 272, true, false}, {440, 272, false, true}, {1108, 136, false, false}, - {1174, 136, false, false}, {1108, 136, false, false}, {987, 136, false, false}, {880, 136, false, true}, - {987, 136, false, false}, {880, 136, false, true}, {830, 136, false, false}, {739, 136, false, true}, - {880, 136, false, false}, {830, 136, false, true}, {739, 136, false, false}, {698, 136, false, true}, - {739, 136, false, false}, {830, 136, false, true}, {698, 136, false, false}, {554, 136, false, true}, - {622, 136, false, false}, {698, 136, false, true}, {554, 136, false, false}, {739, 136, false, true}, - {698, 136, false, false}, {739, 136, false, true}, {830, 136, false, false}, {880, 136, false, true}, - {830, 136, false, false}, {880, 136, false, true}, {987, 136, false, false}, {1108, 136, true, false}, - {1046, 136, false, false}, {1108, 136, false, true}, {1046, 136, false, false}, {1108, 136, false, true}, - {1046, 136, false, false}, {1108, 136, false, true}, {932, 136, false, false}, {1174, 136, true, false}, - {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, - {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, {1174, 136, true, false}, - {1108, 136, false, false}, {987, 136, false, true}, {880, 136, false, false}, {830, 136, false, true}, - {880, 136, false, false}, {987, 136, false, true}, {830, 136, false, false}, {880, 136, true, false}, - {987, 136, false, false}, {1108, 136, false, true}, {739, 136, false, false}, {698, 136, true, false}, - {739, 136, false, false}, {830, 136, false, true}, {698, 136, false, false}, {739, 545, false, true}, - {880, 272, false, false}, {987, 272, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, - {880, 272, false, true}, {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, - {880, 272, false, true}, {830, 272, false, true}, {739, 272, false, true}, {830, 272, false, true}, - {880, 272, false, true}, {987, 272, false, true}, {830, 272, false, true}, {659, 272, false, true}, - {880, 272, false, true}, {987, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {880, 272, false, true}, {987, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, - {880, 272, false, true}, {830, 272, false, true}, {739, 272, false, true}, {987, 272, false, true}, - {830, 272, false, true}, {659, 272, false, true}, {880, 545, true, false}, {493, 136, false, false}, - {440, 136, false, false}, {415, 136, false, false}, {440, 136, false, false}, {523, 272, false, true}, - {329, 272, false, false}, {587, 136, false, false}, {523, 136, false, false}, {493, 136, false, false}, - {523, 136, false, false}, {659, 272, false, true}, {329, 272, false, false}, {698, 136, false, false}, - {659, 136, false, false}, {622, 136, false, false}, {659, 136, false, false}, {987, 136, false, true}, - {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {987, 136, false, true}, - {880, 136, false, false}, {830, 136, false, false}, {880, 136, false, false}, {1046, 272, false, true}, - {1046, 272, false, false}, {880, 272, false, false}, {1046, 272, false, false}, {987, 272, false, true}, - {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, {987, 272, false, true}, - {880, 272, false, true}, {783, 272, false, true}, {880, 272, false, true}, {987, 272, false, true}, - {880, 272, false, true}, {783, 272, true, false}, {739, 272, false, true}, {659, 545, false, true}, - {659, 272, false, false}, {698, 272, false, false}, {783, 272, true, false}, {783, 272, false, false}, - {880, 136, false, true}, {783, 136, false, false}, {698, 136, false, false}, {659, 136, false, false}, - {587, 272, false, true}, {391, 272, false, false}, {659, 272, false, false}, {698, 272, false, false}, - {783, 272, true, false}, {783, 272, false, false}, {880, 136, false, true}, {783, 136, false, false}, - {698, 136, false, false}, {659, 136, false, false}, {587, 545, false, true}, {523, 272, false, false}, - {587, 272, false, false}, {659, 272, true, false}, {659, 272, false, true}, {698, 136, true, false}, - {659, 136, false, false}, {587, 136, false, false}, {523, 136, false, false}, {493, 272, false, true}, - {493, 272, false, false}, {523, 272, false, false}, {587, 272, false, false}, {659, 272, true, false}, - {659, 272, false, true}, {698, 136, true, false}, {659, 136, false, false}, {587, 136, false, false}, - {523, 136, false, false}, {493, 545, false, true}, {493, 136, false, false}, {440, 136, false, false}, - {415, 136, false, false}, {440, 136, false, false}, {523, 272, false, true}, {329, 272, false, false}, - {587, 136, false, false}, {523, 136, false, false}, {493, 136, false, false}, {523, 136, false, false}, - {659, 272, false, true}, {329, 272, false, false}, {698, 136, false, false}, {659, 136, false, false}, - {622, 136, false, false}, {659, 136, false, false}, {987, 136, false, true}, {880, 136, false, false}, - {830, 136, false, false}, {880, 136, false, false}, {987, 136, false, true}, {880, 136, false, false}, - {830, 136, false, false}, {880, 136, false, false}, {1046, 272, false, true}, {311, 272, false, true}, - {880, 272, false, true}, {987, 272, false, true}, {1046, 272, false, true}, {987, 272, false, true}, - {880, 272, false, true}, {830, 272, false, true}, {880, 272, true, false}, {659, 272, false, true}, - {698, 272, false, true}, {587, 272, false, true}, {523, 272, false, true}, {523, 272, false, true}, - {493, 272, false, true}, {493, 136, false, true}, {440, 68, false, false}, {493, 68, false, false}, - {493, 68, true, true}, {440, 477, false, false}, {440, 136, false, false}, {880, 136, false, false}, - {493, 136, false, false}, {987, 136, false, false}, {554, 136, false, true}, {1108, 136, false, false}, - {0, 272, false, true}, {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, - {987, 136, false, false}, {554, 136, false, true}, {1108, 136, false, false}, {493, 136, false, true}, - {987, 136, false, false}, {440, 136, false, true}, {880, 136, false, false}, {415, 136, false, true}, - {830, 136, false, false}, {369, 136, false, true}, {739, 136, false, false}, {415, 136, false, true}, - {830, 136, false, false}, {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, - {987, 136, false, false}, {415, 136, false, true}, {830, 136, false, false}, {329, 136, false, true}, - {659, 136, false, false}, {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, - {987, 136, false, false}, {554, 136, false, true}, {1108, 136, false, false}, {0, 272, false, true}, - {440, 136, false, true}, {880, 136, false, false}, {493, 136, false, true}, {987, 136, false, false}, - {554, 136, false, true}, {1108, 136, false, false}, {493, 136, false, true}, {987, 136, false, false}, - {440, 136, false, true}, {880, 136, false, false}, {415, 136, false, true}, {830, 136, false, false}, - {369, 136, false, true}, {739, 136, false, false}, {493, 136, false, true}, {987, 136, false, false}, - {415, 136, false, true}, {830, 136, false, false}, {329, 136, false, true}, {659, 136, false, false}, - {880, 545, true, false}, {880, 272, false, true}, {880, 272, false, true}, {1108, 272, false, true}, - {1108, 136, false, true}, {1108, 136, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, true}, {1108, 136, false, false}, {1174, 272, false, true}, {1174, 272, false, true}, - {0, 272, false, true}, {0, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {987, 272, false, true}, - {987, 272, false, true}, {1318, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, true}, {1108, 136, false, false}, {1174, 272, false, true}, {1174, 272, false, true}, - {1174, 272, false, true}, {1174, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {987, 272, false, true}, - {987, 272, false, true}, {987, 272, false, true}, {880, 136, false, true}, {880, 136, false, false}, - {880, 136, false, false}, {880, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, - {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, - {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, - {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, - {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, - {1108, 136, false, false}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, false}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, false}, {1108, 136, false, false}, {1174, 136, false, true}, {1174, 136, false, false}, - {1174, 136, false, false}, {1174, 136, false, false}, {1174, 136, false, true}, {1174, 136, false, false}, - {1174, 136, false, false}, {1174, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, - {1108, 136, false, false}, {1108, 136, false, false}, {1108, 136, false, true}, {1108, 136, false, false}, - {1108, 136, false, false}, {1108, 136, false, false}, {987, 136, false, true}, {987, 136, false, false}, - {987, 136, false, true}, {987, 136, false, false}, {987, 136, false, true}, {987, 136, false, false}, - {1318, 136, false, true}, {1318, 136, false, false}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, true}, {1108, 136, false, false}, {1174, 136, false, true}, {1108, 136, false, false}, - {987, 136, false, true}, {1108, 136, false, false}, {1174, 272, false, true}, {1174, 272, false, true}, - {1174, 272, false, true}, {1174, 272, false, true}, {1108, 272, false, true}, {1108, 272, false, true}, - {1108, 272, false, true}, {1108, 272, false, true}, {987, 272, false, true}, {987, 272, false, true}, - {987, 272, false, true}, {987, 272, false, true}, {880, 272, false, true}, {880, 272, false, true}, - {880, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, {880, 272, false, true}, - {880, 272, false, true}, {1318, 272, false, true}, {880, 272, false, true}, {880, 272, false, true}, - {880, 272, false, true}, {1108, 272, false, true}, {880, 272, false, true}, {1108, 272, false, true}, - {880, 272, false, true}, {1318, 272, false, true}, {880, 545, true, false}, {880, 545, true, true}, - {880, 545, true, true}, - {0, 2000, false, false} -}; - - -// Converted from: tetris_1.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_tetris_1[] = { - {659, 266, false, true}, {659, 14, false, false}, {659, 232, false, false}, {493, 15, false, true}, - {493, 216, false, false}, {0, 15, false, false}, {523, 14, false, false}, {523, 219, false, false}, - {329, 15, false, false}, {587, 14, false, true}, {587, 236, false, false}, {587, 14, false, false}, - {587, 236, false, false}, {523, 15, false, true}, {523, 223, false, false}, {0, 15, false, false}, - {493, 15, false, false}, {493, 226, false, false}, {329, 17, false, false}, {440, 13, true, false}, - {440, 256, false, false}, {440, 14, false, true}, {440, 232, false, false}, {440, 15, true, false}, - {440, 216, false, false}, {0, 15, false, false}, {523, 14, false, true}, {523, 219, false, false}, - {0, 15, false, false}, {659, 14, true, false}, {659, 234, false, false}, {659, 14, false, true}, - {659, 231, false, false}, {587, 15, true, false}, {587, 216, false, false}, {0, 15, false, false}, - {523, 14, false, true}, {523, 217, false, false}, {0, 17, false, false}, {493, 12, true, false}, - {493, 251, false, false}, {493, 14, false, true}, {493, 232, false, false}, {493, 15, true, false}, - {493, 216, false, false}, {0, 15, false, false}, {523, 14, false, true}, {523, 219, false, false}, - {0, 15, false, false}, {587, 14, true, false}, {587, 234, false, false}, {587, 14, false, true}, - {587, 231, false, false}, {659, 15, true, false}, {659, 231, false, false}, {659, 14, false, true}, - {659, 232, false, false}, {523, 15, true, false}, {523, 251, false, false}, {523, 14, false, true}, - {523, 232, false, false}, {440, 15, true, false}, {440, 231, false, false}, {440, 14, false, true}, - {440, 233, false, false}, {440, 15, true, false}, {440, 234, false, false}, {440, 14, false, true}, - {440, 231, false, false}, {0, 15, true, true}, {0, 201, false, false}, {0, 30, false, false}, - {261, 14, true, false}, {261, 202, false, false}, {0, 32, false, false}, {0, 12, false, true}, - {0, 251, false, false}, {293, 14, false, false}, {293, 233, false, false}, {587, 14, false, true}, - {587, 231, false, false}, {587, 14, false, false}, {587, 233, false, false}, {698, 15, false, true}, - {698, 219, false, false}, {0, 15, false, false}, {880, 14, false, false}, {880, 231, false, false}, - {880, 14, false, true}, {880, 216, false, false}, {0, 15, false, false}, {293, 14, false, false}, - {293, 234, false, false}, {783, 12, false, true}, {783, 236, false, false}, {0, 15, false, false}, - {698, 14, false, false}, {698, 218, false, false}, {293, 15, false, false}, {659, 14, true, false}, - {659, 231, false, false}, {659, 14, false, false}, {659, 234, false, false}, {659, 14, true, false}, - {659, 234, false, false}, {659, 14, false, false}, {659, 231, false, false}, {523, 15, true, false}, - {523, 216, false, false}, {0, 15, false, false}, {659, 14, false, false}, {659, 234, false, false}, - {659, 12, true, false}, {659, 251, false, false}, {659, 14, false, false}, {659, 232, false, false}, - {587, 15, true, false}, {587, 220, false, false}, {0, 11, false, false}, {523, 14, false, false}, - {523, 219, false, false}, {261, 15, false, false}, {493, 14, true, false}, {493, 234, false, false}, - {493, 14, false, true}, {493, 231, false, false}, {493, 14, true, false}, {493, 229, false, false}, - {523, 17, false, true}, {523, 217, false, false}, {0, 17, false, false}, {587, 12, true, false}, - {587, 251, false, false}, {587, 14, false, true}, {587, 218, false, false}, {0, 15, false, false}, - {659, 14, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, - {523, 15, true, false}, {523, 234, false, false}, {523, 14, false, true}, {523, 231, false, false}, - {440, 15, true, false}, {440, 231, false, false}, {440, 14, false, true}, {440, 232, false, false}, - {440, 15, true, false}, {440, 251, false, false}, {440, 14, false, true}, {440, 232, false, false}, - {0, 15, true, false}, {0, 231, false, false}, {0, 14, false, true}, {0, 249, false, false}, - {0, 977, false, false}, {659, 264, true, false}, {659, 14, false, true}, {659, 233, false, false}, - {659, 14, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, - {523, 15, true, false}, {523, 234, false, false}, {523, 14, false, true}, {523, 231, false, false}, - {523, 14, true, false}, {523, 231, false, false}, {523, 14, false, true}, {523, 232, false, false}, - {587, 15, true, false}, {587, 251, false, false}, {587, 14, false, true}, {587, 233, false, false}, - {587, 14, true, false}, {587, 231, false, false}, {587, 14, false, true}, {587, 233, false, false}, - {493, 15, true, false}, {493, 234, false, false}, {493, 14, false, true}, {493, 231, false, false}, - {493, 14, true, false}, {493, 231, false, false}, {493, 14, false, true}, {493, 232, false, false}, - {523, 15, true, false}, {523, 251, false, false}, {523, 14, false, true}, {523, 233, false, false}, - {523, 14, true, false}, {523, 231, false, false}, {523, 14, false, true}, {523, 233, false, false}, - {440, 15, true, false}, {440, 234, false, false}, {440, 14, false, true}, {440, 231, false, false}, - {440, 14, true, false}, {440, 231, false, false}, {440, 14, false, true}, {440, 232, false, false}, - {415, 15, true, false}, {415, 251, false, false}, {415, 14, false, true}, {415, 233, false, false}, - {415, 14, true, false}, {415, 231, false, false}, {415, 14, false, true}, {415, 233, false, false}, - {493, 15, true, false}, {493, 234, false, false}, {493, 14, false, true}, {493, 231, false, false}, - {493, 14, true, false}, {493, 231, false, false}, {493, 14, false, true}, {493, 232, false, false}, - {659, 15, true, false}, {659, 251, false, false}, {659, 14, false, true}, {659, 233, false, false}, - {659, 14, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, - {523, 15, true, false}, {523, 234, false, false}, {523, 14, false, true}, {523, 231, false, false}, - {523, 14, true, false}, {523, 231, false, false}, {523, 14, false, true}, {523, 232, false, false}, - {587, 15, true, false}, {587, 251, false, false}, {587, 14, false, true}, {587, 233, false, false}, - {587, 14, true, false}, {587, 231, false, false}, {587, 14, false, true}, {587, 233, false, false}, - {493, 15, true, false}, {493, 234, false, false}, {493, 14, false, true}, {493, 231, false, false}, - {493, 14, true, false}, {493, 231, false, false}, {493, 14, false, true}, {493, 232, false, false}, - {523, 15, true, false}, {523, 251, false, false}, {523, 14, false, true}, {523, 232, false, false}, - {659, 15, true, false}, {659, 231, false, false}, {659, 14, false, true}, {659, 233, false, false}, - {880, 15, true, false}, {880, 234, false, false}, {880, 14, false, true}, {880, 231, false, false}, - {880, 14, true, false}, {880, 231, false, false}, {880, 14, false, true}, {880, 232, false, false}, - {830, 15, true, false}, {830, 251, false, false}, {830, 14, false, true}, {830, 233, false, false}, - {830, 14, true, false}, {830, 231, false, false}, {830, 14, false, true}, {830, 234, false, false}, - {830, 14, true, false}, {830, 234, false, false}, {830, 14, false, true}, {830, 231, false, false}, - {830, 14, true, false}, {830, 231, false, false}, {830, 14, false, true}, {830, 232, false, false}, - {0, 15, false, false}, - {0, 2000, false, false} -}; - -// Converted from: sonic.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_sonic[] = { - {880, 114, false, false}, {698, 95, false, false}, {880, 95, true, false}, {698, 87, false, false}, - {698, 11, false, false}, {987, 99, true, false}, {783, 83, false, false}, {783, 11, false, false}, - {987, 95, true, false}, {783, 89, false, false}, {783, 11, false, false}, {1046, 101, true, false}, - {880, 83, false, false}, {880, 11, false, false}, {1046, 95, true, false}, {880, 87, false, false}, - {880, 11, false, false}, {1174, 99, true, false}, {987, 83, false, false}, {987, 11, false, false}, - {1174, 95, true, false}, {987, 87, false, false}, {987, 13, false, false}, {493, 90, true, false}, - {493, 118, false, false}, {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, - {493, 118, false, false}, {440, 78, true, false}, {440, 118, false, false}, {440, 77, true, false}, - {440, 118, false, false}, {440, 75, true, false}, {440, 118, false, false}, {493, 76, true, false}, - {493, 118, false, false}, {493, 76, true, false}, {493, 120, false, false}, {493, 90, true, false}, - {493, 106, false, false}, {493, 11, false, false}, {440, 77, true, false}, {440, 118, false, false}, - {440, 75, true, false}, {440, 118, false, false}, {440, 77, true, false}, {440, 118, false, false}, - {493, 78, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, - {440, 76, true, false}, {440, 118, false, false}, {440, 76, true, false}, {440, 118, false, false}, - {523, 92, true, false}, {523, 118, false, false}, {523, 77, true, false}, {523, 118, false, false}, - {523, 75, true, false}, {523, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, - {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, - {440, 76, true, false}, {440, 118, false, false}, {440, 76, true, false}, {440, 120, false, false}, - {440, 90, true, false}, {440, 118, false, false}, {440, 195, true, false}, {440, 23, true, false}, - {440, 52, false, false}, {440, 118, false, false}, {440, 196, true, false}, {440, 23, true, false}, - {440, 54, false, false}, {440, 118, false, false}, {440, 194, true, false}, {440, 23, true, false}, - {440, 52, false, false}, {440, 118, false, false}, {440, 76, true, false}, {440, 118, false, false}, - {440, 92, true, false}, {440, 118, false, false}, {440, 77, true, false}, {440, 118, false, false}, - {440, 75, true, false}, {440, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, - {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, - {523, 76, true, false}, {523, 118, false, false}, {523, 76, true, false}, {523, 118, false, false}, - {440, 92, true, false}, {440, 118, false, false}, {440, 77, true, false}, {440, 118, false, false}, - {440, 75, true, false}, {440, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, - {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, - {523, 76, true, false}, {523, 118, false, false}, {523, 76, true, false}, {523, 118, false, false}, - {523, 92, true, false}, {523, 118, false, false}, {523, 77, true, false}, {523, 118, false, false}, - {523, 75, true, false}, {523, 118, false, false}, {493, 78, true, false}, {493, 118, false, false}, - {493, 77, true, false}, {493, 118, false, false}, {493, 75, true, false}, {493, 118, false, false}, - {493, 75, true, false}, {493, 118, false, false}, {493, 76, true, false}, {493, 120, false, false}, - {493, 90, true, false}, {493, 118, false, false}, {493, 77, true, false}, {493, 118, false, false}, - {493, 75, true, false}, {493, 118, false, false}, {493, 77, true, false}, {493, 118, false, false}, - {0, 78, true, false}, {0, 118, false, false}, {0, 194, true, false}, {0, 23, true, false}, - {0, 171, false, false}, {0, 23, true, false}, {0, 173, false, false}, {0, 21, true, false}, - {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, - {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, - {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, - {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, - {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, - {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, - {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {0, 75, true, false}, {0, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, - {1318, 11, true, false}, {1318, 66, false, false}, {1318, 118, false, false}, {1318, 11, true, false}, - {1174, 64, false, false}, {1174, 118, false, false}, {1174, 75, true, false}, {1174, 118, false, false}, - {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, - {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, - {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, - {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, - {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, - {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, - {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, - {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, - {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 75, true, false}, - {783, 118, false, false}, {783, 75, true, false}, {783, 118, false, false}, {783, 195, true, false}, - {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {880, 77, true, false}, - {880, 118, false, false}, {880, 78, true, false}, {880, 118, false, false}, {880, 11, true, false}, - {698, 64, false, false}, {698, 118, false, false}, {698, 75, true, false}, {698, 118, false, false}, - {880, 183, true, false}, {0, 13, false, false}, {783, 21, true, false}, {783, 68, false, false}, - {783, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, {880, 76, true, false}, - {880, 106, false, false}, {0, 11, false, false}, {783, 77, true, false}, {783, 118, false, false}, - {783, 77, true, false}, {783, 106, false, false}, {0, 11, false, false}, {523, 194, true, false}, - {523, 23, true, false}, {523, 171, false, false}, {523, 23, true, false}, {523, 171, false, false}, - {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, - {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, - {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, - {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, - {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, - {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, - {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {783, 77, true, false}, - {783, 118, false, false}, {1318, 11, true, false}, {1318, 66, false, false}, {1318, 118, false, false}, - {1318, 11, true, false}, {1174, 64, false, false}, {1174, 118, false, false}, {1174, 75, true, false}, - {1174, 118, false, false}, {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, - {987, 68, false, false}, {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, - {1046, 76, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, - {987, 118, false, false}, {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, - {783, 194, true, false}, {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, - {783, 171, false, false}, {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, - {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, - {0, 77, true, false}, {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, - {0, 11, false, false}, {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, - {880, 118, false, false}, {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, - {987, 68, false, false}, {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, - {1046, 76, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, - {987, 118, false, false}, {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, - {783, 75, true, false}, {783, 118, false, false}, {783, 75, true, false}, {783, 118, false, false}, - {783, 195, true, false}, {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, - {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, - {880, 77, true, false}, {880, 118, false, false}, {880, 78, true, false}, {880, 118, false, false}, - {880, 11, true, false}, {698, 64, false, false}, {698, 118, false, false}, {698, 75, true, false}, - {698, 118, false, false}, {880, 183, true, false}, {0, 13, false, false}, {783, 21, true, false}, - {783, 68, false, false}, {783, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, - {880, 76, true, false}, {880, 106, false, false}, {0, 11, false, false}, {783, 77, true, false}, - {783, 118, false, false}, {783, 77, true, false}, {783, 107, false, false}, {0, 12, false, false}, - {523, 76, true, false}, {523, 120, false, false}, {523, 78, true, false}, {523, 109, false, false}, - {0, 12, false, false}, {659, 79, true, false}, {659, 110, false, false}, {0, 13, false, false}, - {587, 602, true, true}, {587, 587, true, true}, {587, 589, true, true}, {587, 11, false, false}, - {587, 587, true, true}, {587, 391, true, true}, {440, 183, true, true}, {349, 11, false, false}, - {523, 183, false, false}, {349, 11, false, false}, {659, 601, true, true}, {659, 591, true, true}, - {659, 604, true, true}, {659, 11, false, false}, {659, 587, false, true}, {659, 196, false, true}, - {659, 194, false, false}, {880, 183, false, true}, {880, 11, false, false}, {880, 183, false, false}, - {880, 11, false, false}, {830, 601, true, true}, {783, 587, true, true}, {698, 390, true, true}, - {698, 198, false, false}, {0, 11, false, false}, {622, 587, true, true}, {587, 391, true, true}, - {523, 183, true, false}, {0, 11, false, false}, {622, 183, false, false}, {0, 11, false, false}, - {587, 601, true, false}, {587, 587, true, true}, {587, 390, true, false}, {587, 198, true, false}, - {587, 11, false, false}, {587, 184, true, false}, {587, 11, false, false}, {587, 182, true, false}, - {587, 11, false, false}, {587, 184, true, false}, {587, 11, false, false}, {587, 185, true, false}, - {587, 11, false, false}, {587, 182, true, false}, {587, 11, false, false}, {587, 183, true, false}, - {587, 11, false, false}, {587, 183, true, false}, {587, 11, false, false}, {0, 92, true, false}, - {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, - {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, {1046, 77, true, false}, - {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, {880, 118, false, false}, - {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, {0, 13, false, false}, - {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, {987, 77, true, false}, - {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, {0, 11, false, false}, - {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, {987, 106, false, false}, - {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, {783, 171, false, false}, - {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, {0, 68, false, false}, - {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, {0, 75, true, false}, - {0, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, {1318, 11, true, false}, - {1318, 66, false, false}, {1318, 118, false, false}, {1318, 11, true, false}, {1174, 64, false, false}, - {1174, 118, false, false}, {1174, 75, true, false}, {1174, 118, false, false}, {1046, 183, true, false}, - {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, - {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, - {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, - {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, - {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, - {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, - {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, - {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, - {987, 106, false, false}, {0, 11, false, false}, {783, 75, true, false}, {783, 118, false, false}, - {783, 75, true, false}, {783, 118, false, false}, {783, 195, true, false}, {0, 23, true, false}, - {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {0, 75, true, false}, {0, 118, false, false}, {880, 77, true, false}, {880, 118, false, false}, - {880, 78, true, false}, {880, 118, false, false}, {880, 11, true, false}, {698, 64, false, false}, - {698, 118, false, false}, {698, 75, true, false}, {698, 118, false, false}, {880, 183, true, false}, - {0, 13, false, false}, {783, 21, true, false}, {783, 68, false, false}, {783, 118, false, false}, - {783, 77, true, false}, {783, 118, false, false}, {880, 76, true, false}, {880, 106, false, false}, - {0, 11, false, false}, {783, 77, true, false}, {783, 118, false, false}, {783, 77, true, false}, - {783, 106, false, false}, {0, 11, false, false}, {523, 194, true, false}, {523, 23, true, false}, - {523, 171, false, false}, {523, 23, true, false}, {523, 171, false, false}, {0, 23, true, false}, - {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, {880, 75, true, false}, - {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, {1046, 183, true, false}, - {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, {1046, 106, false, false}, - {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, {987, 77, true, false}, - {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, {783, 23, true, false}, - {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, {0, 23, true, false}, - {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, {0, 118, false, false}, - {0, 75, true, false}, {0, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, - {1318, 11, true, false}, {1318, 66, false, false}, {1318, 118, false, false}, {1318, 11, true, false}, - {1174, 64, false, false}, {1174, 118, false, false}, {1174, 75, true, false}, {1174, 118, false, false}, - {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, - {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, - {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 194, true, false}, - {783, 23, true, false}, {783, 171, false, false}, {783, 23, true, false}, {783, 171, false, false}, - {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {1046, 77, true, false}, {1046, 106, false, false}, {0, 11, false, false}, - {880, 75, true, false}, {880, 118, false, false}, {880, 75, true, false}, {880, 118, false, false}, - {1046, 183, true, false}, {0, 13, false, false}, {987, 21, true, false}, {987, 68, false, false}, - {987, 118, false, false}, {987, 77, true, false}, {987, 118, false, false}, {1046, 76, true, false}, - {1046, 106, false, false}, {0, 11, false, false}, {987, 77, true, false}, {987, 118, false, false}, - {987, 77, true, false}, {987, 106, false, false}, {0, 11, false, false}, {783, 75, true, false}, - {783, 118, false, false}, {783, 75, true, false}, {783, 118, false, false}, {783, 195, true, false}, - {0, 23, true, false}, {0, 68, false, false}, {0, 118, false, false}, {0, 77, true, false}, - {0, 118, false, false}, {0, 75, true, false}, {0, 118, false, false}, {880, 77, true, false}, - {880, 118, false, false}, {880, 78, true, false}, {880, 118, false, false}, {880, 11, true, false}, - {698, 64, false, false}, {698, 118, false, false}, {698, 75, true, false}, {698, 118, false, false}, - {880, 183, true, false}, {0, 13, false, false}, {783, 21, true, false}, {783, 68, false, false}, - {783, 118, false, false}, {783, 77, true, false}, {783, 118, false, false}, {880, 76, true, false}, - {880, 106, false, false}, {0, 11, false, false}, {783, 77, true, false}, {783, 118, false, false}, - {783, 77, true, false}, {783, 107, false, false}, {0, 12, false, false}, {523, 76, true, false}, - {523, 120, false, false}, {523, 78, true, false}, {523, 109, false, false}, {0, 12, false, false}, - {659, 79, true, false}, {659, 110, false, false}, {0, 13, false, false}, {587, 602, true, true}, - {587, 587, true, true}, {587, 589, true, true}, {587, 11, false, false}, {587, 587, true, true}, - {587, 391, true, true}, {440, 183, true, true}, {349, 11, false, false}, {523, 183, false, false}, - {349, 11, false, false}, {659, 601, true, true}, {659, 591, true, true}, {659, 604, true, true}, - {659, 11, false, false}, {659, 587, false, true}, {659, 196, false, true}, {659, 194, false, false}, - {880, 183, false, true}, {880, 11, false, false}, {880, 183, false, false}, {880, 11, false, false}, - {830, 601, true, true}, {783, 587, true, true}, {698, 390, true, true}, {698, 198, false, false}, - {0, 11, false, false}, {622, 587, true, true}, {587, 391, true, true}, {523, 183, true, false}, - {0, 11, false, false}, {622, 183, false, false}, {0, 11, false, false}, {587, 601, true, false}, - {587, 587, true, true}, {587, 390, true, false}, {587, 198, true, false}, {587, 11, false, false}, - {587, 184, true, false}, {587, 11, false, false}, {587, 182, true, false}, {587, 11, false, false}, - {587, 184, true, false}, {587, 11, false, false}, {587, 185, true, false}, {587, 11, false, false}, - {587, 182, true, false}, {587, 11, false, false}, {587, 183, true, false}, {587, 11, false, false}, - {587, 183, true, false}, {587, 11, false, false}, - {0, 2000, false, false} -}; - -// Converted from: cast.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_cast[] = { - {587, 144, true, false}, {587, 228, true, false}, {587, 14, false, false}, {523, 119, true, false}, - {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, {493, 121, true, false}, - {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, {329, 113, true, false}, - {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, {440, 259, false, false}, - {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, {293, 14, false, false}, - {440, 234, false, false}, {440, 14, false, false}, {391, 121, true, false}, {523, 128, true, false}, - {523, 231, true, false}, {523, 15, false, false}, {523, 246, true, false}, {523, 232, true, false}, - {523, 14, false, false}, {587, 145, true, false}, {587, 228, true, false}, {587, 14, false, false}, - {523, 119, true, false}, {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, - {493, 121, true, false}, {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, - {329, 113, true, false}, {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, - {440, 259, false, false}, {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, - {293, 14, false, false}, {440, 234, false, false}, {440, 14, false, false}, {391, 128, true, false}, - {391, 121, true, false}, {391, 231, true, false}, {391, 15, false, false}, {391, 246, true, false}, - {391, 232, true, false}, {391, 14, false, false}, {0, 266, true, false}, {587, 121, true, false}, - {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, - {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, - {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, - {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, - {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, - {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, - {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, - {698, 119, false, false}, {0, 17, false, false}, {0, 264, true, false}, {587, 121, true, false}, - {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, - {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, - {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, - {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, - {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, - {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, - {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, - {698, 126, false, false}, {554, 22, true, false}, {554, 373, false, false}, {659, 358, false, false}, - {659, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, - {698, 357, false, false}, {698, 14, false, false}, {587, 232, false, false}, {587, 14, false, false}, - {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, - {932, 14, false, false}, {880, 370, true, false}, {587, 118, false, false}, {0, 501, false, false}, - {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, - {932, 14, false, false}, {880, 370, true, false}, {698, 357, false, false}, {698, 14, false, false}, - {587, 232, false, false}, {587, 14, false, false}, {659, 388, true, false}, {783, 358, false, false}, - {783, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, - {987, 357, false, false}, {987, 14, false, false}, {1108, 232, false, false}, {1108, 14, false, false}, - {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, - {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, - {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, - {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, - {261, 246, true, true}, {329, 15, false, false}, {329, 103, false, false}, {391, 375, false, false}, - {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, - {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, - {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, - {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, - {261, 246, true, false}, {0, 15, true, false}, {0, 103, false, false}, {0, 375, true, false}, - {587, 145, true, false}, {587, 228, true, false}, {587, 14, false, false}, {523, 119, true, false}, - {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, {493, 121, true, false}, - {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, {329, 113, true, false}, - {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, {440, 259, false, false}, - {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, {293, 14, false, false}, - {440, 234, false, false}, {440, 14, false, false}, {391, 121, true, false}, {523, 128, true, false}, - {523, 231, true, false}, {523, 15, false, false}, {523, 246, true, false}, {523, 232, true, false}, - {523, 14, false, false}, {587, 145, true, false}, {587, 228, true, false}, {587, 14, false, false}, - {523, 119, true, false}, {0, 133, true, false}, {493, 369, false, false}, {493, 249, true, false}, - {493, 121, true, false}, {391, 14, true, false}, {293, 110, false, false}, {293, 125, true, false}, - {329, 113, true, false}, {349, 128, true, false}, {391, 119, true, false}, {440, 14, true, false}, - {440, 259, false, false}, {440, 121, true, false}, {293, 126, true, true}, {293, 231, true, false}, - {293, 14, false, false}, {440, 234, false, false}, {440, 14, false, false}, {391, 128, true, false}, - {391, 121, true, false}, {391, 231, true, false}, {391, 15, false, false}, {391, 246, true, false}, - {391, 232, true, false}, {391, 14, false, false}, {0, 266, true, false}, {587, 121, true, false}, - {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, - {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, - {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, - {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, - {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, - {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, - {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, - {698, 119, false, false}, {0, 17, false, false}, {0, 264, true, false}, {587, 121, true, false}, - {587, 111, true, false}, {587, 14, false, false}, {0, 126, true, false}, {880, 241, false, false}, - {880, 127, true, false}, {830, 121, true, false}, {880, 120, false, false}, {830, 121, true, false}, - {698, 125, true, false}, {0, 132, true, false}, {0, 121, true, false}, {0, 121, true, false}, - {0, 128, true, false}, {880, 264, true, false}, {880, 114, true, false}, {830, 126, true, false}, - {0, 125, true, false}, {830, 120, true, false}, {783, 121, false, false}, {0, 135, true, false}, - {880, 120, false, false}, {698, 120, true, false}, {880, 14, true, false}, {880, 106, false, false}, - {830, 125, false, false}, {587, 125, true, false}, {830, 121, false, false}, {783, 121, true, false}, - {698, 126, false, false}, {554, 22, true, false}, {554, 373, false, false}, {659, 358, false, false}, - {659, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, - {698, 357, false, false}, {698, 14, false, false}, {587, 232, false, false}, {587, 14, false, false}, - {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, - {932, 14, false, false}, {880, 370, true, false}, {587, 118, false, false}, {0, 501, false, false}, - {554, 388, true, false}, {659, 358, false, false}, {659, 14, false, false}, {932, 234, false, false}, - {932, 14, false, false}, {880, 370, true, false}, {698, 357, false, false}, {698, 14, false, false}, - {587, 232, false, false}, {587, 14, false, false}, {659, 388, true, false}, {783, 358, false, false}, - {783, 14, false, false}, {932, 234, false, false}, {932, 14, false, false}, {880, 370, true, false}, - {987, 357, false, false}, {987, 14, false, false}, {1108, 232, false, false}, {1108, 14, false, false}, - {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, - {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, - {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, - {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, - {261, 246, true, true}, {329, 15, false, false}, {329, 103, false, false}, {391, 375, false, false}, - {1174, 145, true, false}, {1174, 114, false, false}, {587, 128, true, false}, {587, 141, false, false}, - {587, 111, false, false}, {587, 112, true, false}, {587, 241, true, false}, {587, 15, false, false}, - {587, 495, true, false}, {587, 494, false, false}, {0, 266, true, true}, {0, 248, true, true}, - {293, 15, false, true}, {293, 103, false, false}, {349, 376, false, false}, {261, 249, true, true}, - {261, 246, true, false}, {0, 15, true, false}, {0, 103, false, false}, {0, 375, true, false}, - {0, 2000, false, false} -}; - -// Converted from: seven.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_seven[] = { - {NOTE_E4, 750, true, false}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, false}, - {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, false, false}, {NOTE_B3, 250, true, false}, - {NOTE_E4, 1000, true, false}, {NOTE_E4, 1000, true, false}, {NOTE_E4, 750, true, false}, {NOTE_E4, 125, true, false}, - {REST, 125, false, false}, {NOTE_G4, 125, true, false}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, - {NOTE_C4, 250, false, false}, {NOTE_D4, 250, true, false}, {NOTE_C4, 1000, true, false}, {NOTE_B3, 1000, true, false}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, - {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, - {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, - {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, - {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, - {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, - {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, - {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, - {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, - {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, - {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, - {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, - {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, - {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, - {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, {REST, 125, false, false}, - {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, {NOTE_C4, 250, true, true}, - {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, false}, - {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_E4, 250, false, false}, {NOTE_D4, 125, true, false}, - {NOTE_C4, 250, true, true}, {NOTE_B3, 250, true, false}, {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, - {NOTE_E4, 500, true, true}, {NOTE_E4, 500, true, true}, {NOTE_E4, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, - {NOTE_E4, 250, true, true}, {NOTE_E4, 218, true, true}, {NOTE_E4, 30, true, true}, {NOTE_E4, 501, true, true}, - {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, - {NOTE_G4, 125, false, false}, {REST, 125, false, false}, {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, - {REST, 125, false, false}, {NOTE_D4, 250, true, true}, {NOTE_C4, 500, true, true}, {NOTE_C4, 500, true, true}, - {REST, 500, true, true}, {REST, 468, true, true}, {REST, 30, true, true}, {NOTE_E4, 501, true, true}, - {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_G4, 125, true, true}, - {NOTE_G4, 125, false, false}, {REST, 125, false, false}, {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, - {REST, 125, false, false}, {NOTE_D4, 250, true, true}, {NOTE_C4, 375, true, true}, {NOTE_D4, 125, true, true}, - {NOTE_D4, 250, true, true}, {NOTE_C4, 250, true, true}, {REST, 500, true, true}, {REST, 468, true, true}, - {REST, 30, true, true}, {NOTE_E4, 501, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, - {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_G4, 125, false, false}, {REST, 125, false, false}, - {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_D4, 250, true, true}, - {NOTE_C4, 500, true, true}, {NOTE_C4, 500, true, true}, {REST, 500, true, true}, {REST, 468, true, true}, - {REST, 30, true, true}, {NOTE_E4, 501, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 125, true, true}, - {REST, 125, false, false}, {NOTE_G4, 125, true, true}, {NOTE_G4, 125, false, false}, {REST, 125, false, false}, - {NOTE_E4, 125, true, true}, {NOTE_E4, 125, true, true}, {REST, 125, false, false}, {NOTE_D4, 250, true, true}, - {NOTE_C4, 375, true, true}, {NOTE_D4, 125, true, true}, {NOTE_D4, 250, true, true}, {NOTE_C4, 250, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, - {NOTE_E4, 250, true, true}, {NOTE_E4, 250, true, true}, {REST, 750, true, true}, {REST, 125, true, false}, - {REST, 125, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 125, true, false}, - {REST, 250, false, false}, {REST, 250, true, false}, {REST, 1000, true, false}, {REST, 1000, true, false}, - {REST, 750, true, false}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, false}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 250, true, false}, - {REST, 1000, true, false}, {REST, 1000, true, false}, {REST, 500, true, true}, {REST, 250, true, true}, - {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, - {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, - {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, - {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, - {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, - {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, - {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, - {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, - {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, - {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, - {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, - {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, - {NOTE_E4, 250, true, true}, {NOTE_E4, 250, true, true}, {REST, 750, true, true}, {REST, 125, true, false}, - {REST, 125, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 125, true, false}, - {REST, 250, false, false}, {REST, 250, true, false}, {REST, 1000, true, false}, {REST, 1000, true, false}, - {REST, 750, true, false}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, false}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 250, true, false}, - {REST, 1000, true, false}, {REST, 1000, true, false}, {REST, 500, true, true}, {REST, 250, true, true}, - {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, - {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, - {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, - {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, - {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, - {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, - {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, - {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, false}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {NOTE_CS4, 250, true, true}, {NOTE_E4, 250, true, true}, {NOTE_E4, 250, true, true}, - {REST, 750, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, false}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, false, false}, {REST, 250, true, false}, - {REST, 1000, true, false}, {REST, 1000, true, false}, {REST, 500, true, true}, {REST, 250, true, true}, - {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, - {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, - {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, - {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, {REST, 125, true, false}, - {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, {REST, 125, true, false}, - {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 250, true, true}, - {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, {REST, 250, false, false}, - {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, {REST, 500, true, true}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 125, true, false}, {REST, 125, false, false}, {REST, 125, true, true}, - {REST, 250, false, false}, {REST, 125, true, false}, {REST, 250, true, true}, {REST, 250, true, false}, - {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, {REST, 500, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {REST, 250, true, false}, {REST, 250, true, true}, {REST, 250, true, true}, - {REST, 250, true, true}, {NOTE_E4, 2000, true, true}, - {REST, 2000, false, false} -}; - -// Converted from: mega.mid (Clean Melody & Bass-Routed Edition) -const SequenceStep midi_mega[] = { - {659, 125, true, true}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {659, 125, true, true}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {659, 125, true, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {440, 125, false, false}, {587, 125, false, false}, {659, 125, false, false}, {698, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {880, 125, true, true}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {587, 125, false, false}, {783, 125, false, false}, {880, 125, false, false}, {932, 125, false, false}, - {0, 2000, false, false} -}; - - - -// TRACK 1: Careless Whisper (Extended Club Edit) -const SequenceStep careless_song[] = { - // Phrase 1: Smooth Intro - {NOTE_D5, 600, false, false}, {NOTE_C5, 300, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 1200, false, true}, {REST, 200, false, false}, - {NOTE_F4, 300, false, false}, {NOTE_A4, 300, false, false}, {NOTE_D5, 600, false, false}, {NOTE_C5, 300, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 1200, false, true}, {REST, 200, false, false}, - {NOTE_F4, 300, false, false}, {NOTE_A4, 300, false, false}, {NOTE_D5, 600, false, false}, {NOTE_C5, 300, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 1200, false, false}, {REST, 200, false, false}, - {NOTE_E4, 300, false, false}, {NOTE_G4, 300, false, false}, {NOTE_C5, 600, false, false}, {NOTE_AS4, 300, false, false}, {NOTE_A4, 300, false, false}, {NOTE_G4, 1200, false, true}, {REST, 600, false, false}, - {NOTE_D4, 200, false, false}, {NOTE_F4, 200, false, false}, {NOTE_A4, 200, false, false}, {NOTE_D5, 400, false, false}, {NOTE_C5, 200, false, false}, {NOTE_A4, 200, false, false}, {NOTE_F4, 200, false, false}, {NOTE_D4, 400, false, false}, - {REST, 500, false, false}, - // Phrase 2: The Beat Drop (Heavy Kick + Hat) - {NOTE_D5, 600, true, false}, {NOTE_C5, 300, false, true}, {NOTE_AS4, 300, true, false}, {NOTE_A4, 1200, true, true}, {REST, 200, false, false}, - {NOTE_F4, 300, true, false}, {NOTE_A4, 300, false, true}, {NOTE_D5, 600, true, false}, {NOTE_C5, 300, false, true}, {NOTE_AS4, 300, true, false}, {NOTE_A4, 1200, true, true}, {REST, 200, false, false}, - {NOTE_F4, 300, false, true}, {NOTE_A4, 300, true, false}, {NOTE_D5, 600, false, true}, {NOTE_C5, 300, true, false}, {NOTE_AS4, 300, false, true}, {NOTE_A4, 1200, true, false}, {REST, 200, false, false}, - {NOTE_E4, 300, false, true}, {NOTE_G4, 300, true, false}, {NOTE_C5, 600, false, true}, {NOTE_AS4, 300, true, false}, {NOTE_A4, 300, false, true}, {NOTE_G4, 1200, true, true}, {REST, 600, false, false}, - {NOTE_D4, 200, true, true}, {NOTE_F4, 200, false, false}, {NOTE_A4, 200, false, true}, {NOTE_D5, 400, true, false}, {NOTE_C5, 200, false, true}, {NOTE_A4, 200, true, false}, {NOTE_F4, 200, false, true}, {NOTE_D4, 400, true, true}, - {REST, 1000, false, false} -}; - -// TRACK 2: Take On Me (Extended Build-Up) -const SequenceStep takeonme_song[] = { - // Loop 1: Bass and Hat only - {NOTE_FS5, 200, false, true}, {NOTE_FS5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_D5, 200, false, false}, - {NOTE_CS5, 200, false, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, false, false}, {NOTE_A4, 200, false, true}, - {NOTE_B4, 200, false, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, false, false}, {NOTE_D5, 200, false, true}, - {NOTE_E5, 200, false, true}, {NOTE_E5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_GS5, 200, false, false}, - {NOTE_GS5, 200, false, true}, {NOTE_A5, 200, false, false}, {NOTE_B5, 200, false, true}, {REST, 400, false, false}, - // Loop 2: Add the Kick Drum - {NOTE_FS5, 200, true, true}, {NOTE_FS5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_D5, 200, true, false}, - {NOTE_CS5, 200, true, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, false, false}, {NOTE_A4, 200, true, true}, - {NOTE_B4, 200, true, false}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, true, false}, {NOTE_D5, 200, false, true}, - {NOTE_E5, 200, true, true}, {NOTE_E5, 200, false, false}, {NOTE_E5, 200, false, true}, {NOTE_GS5, 200, true, false}, - {NOTE_GS5, 200, false, true}, {NOTE_A5, 200, false, false}, {NOTE_B5, 200, true, true}, {REST, 400, false, false}, - // Loop 3: Full Rave - {NOTE_FS5, 200, true, true}, {NOTE_FS5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_D5, 200, false, true}, - {NOTE_CS5, 200, true, true}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, true, true}, {NOTE_A4, 200, false, true}, - {NOTE_B4, 200, true, true}, {NOTE_CS5, 200, false, true}, {NOTE_CS5, 200, true, true}, {NOTE_D5, 200, false, true}, - {NOTE_E5, 200, true, true}, {NOTE_E5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_GS5, 200, false, true}, - {NOTE_GS5, 200, true, true}, {NOTE_A5, 200, false, true}, {NOTE_B5, 200, true, true}, {REST, 1000, false, false} -}; - -// TRACK 3: Rickroll (Extended Double Chorus) -const SequenceStep rickroll_song[] = { - // Chorus 1 - {NOTE_CS5, 300, true, false}, {NOTE_D5, 300, false, true}, {NOTE_CS5, 300, true, false}, {NOTE_B4, 300, false, true}, {NOTE_FS4, 600, true, true}, {REST, 600, false, false}, - {NOTE_A4, 150, true, false}, {NOTE_B4, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_B4, 150, false, true}, {NOTE_FS5, 300, true, false}, {NOTE_FS5, 300, false, true}, {NOTE_E5, 600, true, false}, - {NOTE_A4, 150, false, true}, {NOTE_B4, 150, true, false}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, false}, {NOTE_E5, 300, true, true}, {NOTE_E5, 300, false, false}, {NOTE_D5, 300, true, false}, {NOTE_CS5, 150, false, true}, {NOTE_B4, 150, false, false}, - {NOTE_A4, 150, true, true}, {NOTE_B4, 150, false, false}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, false}, {NOTE_D5, 300, true, false}, {NOTE_E5, 300, false, true}, {NOTE_CS5, 300, true, false}, {NOTE_A4, 300, false, true}, {NOTE_A4, 300, true, false}, {NOTE_E5, 300, false, true}, {NOTE_D5, 900, true, true}, - {REST, 600, false, false}, - // Chorus 2 (Faster Hat) - {NOTE_CS5, 300, true, true}, {NOTE_D5, 300, false, true}, {NOTE_CS5, 300, true, true}, {NOTE_B4, 300, false, true}, {NOTE_FS4, 600, true, true}, {REST, 600, false, false}, - {NOTE_A4, 150, true, true}, {NOTE_B4, 150, false, true}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, true}, {NOTE_FS5, 300, true, true}, {NOTE_FS5, 300, false, true}, {NOTE_E5, 600, true, true}, - {NOTE_A4, 150, false, true}, {NOTE_B4, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, true}, {NOTE_E5, 300, true, true}, {NOTE_E5, 300, false, true}, {NOTE_D5, 300, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_B4, 150, false, true}, - {NOTE_A4, 150, true, true}, {NOTE_B4, 150, false, true}, {NOTE_D5, 150, false, true}, {NOTE_B4, 150, false, true}, {NOTE_D5, 300, true, true}, {NOTE_E5, 300, false, true}, {NOTE_CS5, 300, true, true}, {NOTE_A4, 300, false, true}, {NOTE_A4, 300, true, true}, {NOTE_E5, 300, false, true}, {NOTE_D5, 900, true, true}, - {REST, 1000, false, false} -}; - -// TRACK 4: Can't Help Falling In Love (Extended Wedding Mix) -const SequenceStep elvis_song[] = { - // Verse 1 - {NOTE_C4, 400, true, false}, {NOTE_G4, 400, false, true}, {NOTE_C5, 800, true, false}, {NOTE_G4, 400, false, true}, {NOTE_E4, 400, true, false}, - {NOTE_A4, 400, true, true}, {NOTE_B4, 400, false, false}, {NOTE_C5, 400, true, false}, {NOTE_D5, 400, false, true}, {NOTE_E5, 400, true, false}, {NOTE_F5, 400, false, true}, {NOTE_E5, 800, true, true}, {NOTE_D5, 800, false, true}, - {NOTE_G4, 400, true, false}, {NOTE_A4, 400, false, true}, {NOTE_B4, 400, true, false}, {NOTE_C5, 800, true, true}, {NOTE_D5, 400, false, true}, - {NOTE_E5, 400, true, false}, {NOTE_F5, 400, false, true}, {NOTE_G5, 400, true, false}, {NOTE_F5, 400, true, true}, {NOTE_E5, 400, false, true}, {NOTE_D5, 400, true, false}, {NOTE_C5, 1200, true, true}, - {REST, 800, false, false}, - // Verse 2 (Double Drums) - {NOTE_C4, 400, true, true}, {NOTE_G4, 400, false, true}, {NOTE_C5, 800, true, true}, {NOTE_G4, 400, false, true}, {NOTE_E4, 400, true, true}, - {NOTE_A4, 400, true, true}, {NOTE_B4, 400, false, true}, {NOTE_C5, 400, true, true}, {NOTE_D5, 400, false, true}, {NOTE_E5, 400, true, true}, {NOTE_F5, 400, false, true}, {NOTE_E5, 800, true, true}, {NOTE_D5, 800, false, true}, - {NOTE_G4, 400, true, true}, {NOTE_A4, 400, false, true}, {NOTE_B4, 400, true, true}, {NOTE_C5, 800, true, true}, {NOTE_D5, 400, false, true}, - {NOTE_E5, 400, true, true}, {NOTE_F5, 400, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 400, true, true}, {NOTE_E5, 400, false, true}, {NOTE_D5, 400, true, true}, {NOTE_C5, 1200, true, true}, - {REST, 1500, false, false} -}; - -// TRACK 5: Gimme! Gimme! Gimme! (Extended Midnight Rave) -const SequenceStep abba_song[] = { - // Loop 1 - {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, false}, {NOTE_F5, 400, true, false}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, false}, {NOTE_E5, 200, true, false}, {NOTE_F5, 200, false, true}, {NOTE_D5, 600, true, true}, {REST, 200, false, false}, - {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, false}, {NOTE_F5, 400, true, false}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, false}, {NOTE_E5, 200, true, false}, {NOTE_D5, 200, false, true}, {NOTE_CS5, 600, true, true}, {REST, 400, false, false}, - {NOTE_D4, 200, true, true}, {REST, 100, false, false}, {NOTE_D4, 200, false, true}, {NOTE_F4, 200, true, false}, {NOTE_A4, 200, false, true}, {NOTE_G4, 200, true, true}, {REST, 100, false, false}, {NOTE_E4, 200, false, true}, {NOTE_C4, 200, true, false}, {NOTE_D4, 400, true, true}, - {REST, 400, false, false}, - // Loop 2 (More High Hats) - {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, true}, {NOTE_F5, 400, true, true}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_F5, 200, false, true}, {NOTE_D5, 600, true, true}, {REST, 200, false, false}, - {NOTE_D5, 200, true, true}, {NOTE_E5, 200, false, true}, {NOTE_F5, 400, true, true}, {NOTE_A5, 200, false, true}, {NOTE_G5, 400, true, true}, {NOTE_F5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_D5, 200, false, true}, {NOTE_CS5, 600, true, true}, {REST, 400, false, false}, - {NOTE_D4, 200, true, true}, {REST, 100, false, true}, {NOTE_D4, 200, false, true}, {NOTE_F4, 200, true, true}, {NOTE_A4, 200, false, true}, {NOTE_G4, 200, true, true}, {REST, 100, false, true}, {NOTE_E4, 200, false, true}, {NOTE_C4, 200, true, true}, {NOTE_D4, 400, true, true}, - {REST, 1000, false, false} -}; - - -// TRACK 7: Für Elise (Beethoven Extended Trance) -const SequenceStep elise_song[] = { - // Loop 1 - {NOTE_E5, 200, true, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, false, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, false}, - {NOTE_B4, 200, false, true}, {NOTE_D5, 200, false, false}, {NOTE_C5, 200, false, true}, {NOTE_A4, 600, true, true}, {REST, 200, false, false}, - {NOTE_C4, 200, false, true}, {NOTE_E4, 200, false, false}, {NOTE_A4, 200, false, true}, {NOTE_B4, 600, true, true}, {REST, 200, false, false}, - {NOTE_E4, 200, false, true}, {NOTE_GS4, 200, false, false}, {NOTE_B4, 200, false, true}, {NOTE_C5, 600, true, true}, {REST, 200, false, false}, - // Loop 2 - {NOTE_E5, 200, true, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, false, false}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, false}, - {NOTE_B4, 200, false, true}, {NOTE_D5, 200, false, false}, {NOTE_C5, 200, false, true}, {NOTE_A4, 600, true, true}, {REST, 200, false, false}, - {NOTE_C4, 200, false, true}, {NOTE_E4, 200, false, false}, {NOTE_A4, 200, false, true}, {NOTE_B4, 600, true, true}, {REST, 200, false, false}, - {NOTE_E4, 200, false, true}, {NOTE_C5, 200, false, false}, {NOTE_B4, 200, false, true}, {NOTE_A4, 800, true, true}, {REST, 200, false, false}, - // Loop 3 (Heavy Beat Drop) - {NOTE_E5, 200, true, true}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, true}, {NOTE_DS5, 200, false, true}, {NOTE_E5, 200, true, true}, - {NOTE_B4, 200, false, true}, {NOTE_D5, 200, true, true}, {NOTE_C5, 200, false, true}, {NOTE_A4, 600, true, true}, {REST, 200, false, false}, - {NOTE_C4, 200, true, true}, {NOTE_E4, 200, false, true}, {NOTE_A4, 200, true, true}, {NOTE_B4, 600, true, true}, {REST, 200, false, false}, - {NOTE_E4, 200, true, true}, {NOTE_C5, 200, false, true}, {NOTE_B4, 200, true, true}, {NOTE_A4, 800, true, true}, - {REST, 1000, false, false} -}; - -// TRACK 8: Symphony No. 40 (Mozart Extended) -const SequenceStep mozart_song[] = { - // Loop 1 - {NOTE_DS5, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_D5, 300, true, false}, - {NOTE_DS5, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_D5, 300, true, false}, - {NOTE_DS5, 150, false, true}, {NOTE_D5, 150, false, false}, {NOTE_D5, 300, true, false}, - {NOTE_AS5, 600, true, true}, {REST, 300, false, false}, - {NOTE_D5, 150, false, true}, {NOTE_CS5, 150, false, false}, {NOTE_CS5, 300, true, false}, - {NOTE_D5, 150, false, true}, {NOTE_CS5, 150, false, false}, {NOTE_CS5, 300, true, false}, - {NOTE_D5, 150, false, true}, {NOTE_CS5, 150, false, false}, {NOTE_CS5, 300, true, false}, - {NOTE_A5, 600, true, true}, {REST, 300, false, false}, - {NOTE_CS5, 150, false, true}, {NOTE_C5, 150, false, false}, {NOTE_C5, 300, true, false}, - {NOTE_CS5, 150, false, true}, {NOTE_C5, 150, false, false}, {NOTE_C5, 300, true, false}, - {NOTE_CS5, 150, false, true}, {NOTE_C5, 150, false, false}, {NOTE_C5, 300, true, false}, - {NOTE_GS5, 600, true, true}, {REST, 300, false, false}, - // Loop 2 (Intense Drums) - {NOTE_DS5, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_D5, 300, true, true}, - {NOTE_DS5, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_D5, 300, true, true}, - {NOTE_DS5, 150, true, true}, {NOTE_D5, 150, false, true}, {NOTE_D5, 300, true, true}, - {NOTE_AS5, 600, true, true}, {REST, 300, false, false}, - {NOTE_D5, 150, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_CS5, 300, true, true}, - {NOTE_D5, 150, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_CS5, 300, true, true}, - {NOTE_D5, 150, true, true}, {NOTE_CS5, 150, false, true}, {NOTE_CS5, 300, true, true}, - {NOTE_A5, 600, true, true}, {REST, 300, false, false}, - {NOTE_CS5, 150, true, true}, {NOTE_C5, 150, false, true}, {NOTE_C5, 300, true, true}, - {NOTE_CS5, 150, true, true}, {NOTE_C5, 150, false, true}, {NOTE_C5, 300, true, true}, - {NOTE_CS5, 150, true, true}, {NOTE_C5, 150, false, true}, {NOTE_C5, 300, true, true}, - {NOTE_GS5, 600, true, true}, - {REST, 1000, false, false} -}; - -// ========================================== -// 5. HARDWARE INITIALIZATION -// ========================================== -led_strip_handle_t led_strip = NULL; // Global NeoPixel handle - -void init_hardware(void) { - gpio_set_direction(ACTIVE_BUZZER_1_PIN, GPIO_MODE_OUTPUT); gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); - gpio_set_direction(ACTIVE_BUZZER_2_PIN, GPIO_MODE_OUTPUT); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); - gpio_set_direction(LED_KICK_PIN, GPIO_MODE_OUTPUT); gpio_set_level(LED_KICK_PIN, 0); - gpio_set_direction(LED_HAT_PIN, GPIO_MODE_OUTPUT); gpio_set_level(LED_HAT_PIN, 0); - - gpio_reset_pin(BTN_PAUSE_PIN); gpio_reset_pin(BTN_NEXT_PIN); gpio_reset_pin(ROTARY_SW_PIN); - gpio_set_direction(BTN_PAUSE_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(BTN_PAUSE_PIN, GPIO_PULLUP_ONLY); - gpio_set_direction(BTN_NEXT_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(BTN_NEXT_PIN, GPIO_PULLUP_ONLY); - gpio_set_direction(ROTARY_SW_PIN, GPIO_MODE_INPUT); gpio_set_pull_mode(ROTARY_SW_PIN, GPIO_PULLUP_ONLY); - - ledc_timer_config_t timer_cfg = { .speed_mode = BUZZER_LEDC_MODE, .timer_num = BUZZER_LEDC_TIMER, .duty_resolution = LEDC_TIMER_13_BIT, .freq_hz = 440, .clk_cfg = LEDC_AUTO_CLK }; - ledc_timer_config(&timer_cfg); - ledc_channel_config_t ch_cfg = { .speed_mode = BUZZER_LEDC_MODE, .channel = BUZZER_LEDC_CHANNEL, .timer_sel = BUZZER_LEDC_TIMER, .intr_type = LEDC_INTR_DISABLE, .gpio_num = PASSIVE_BUZZER_PIN, .duty = 0, .hpoint = 0 }; - ledc_channel_config(&ch_cfg); - - pcnt_unit_config_t unit_config = { .high_limit = 1000, .low_limit = -1000 }; - pcnt_new_unit(&unit_config, &pcnt_unit); - pcnt_glitch_filter_config_t filter_config = { .max_glitch_ns = 1000 }; - pcnt_unit_set_glitch_filter(pcnt_unit, &filter_config); - pcnt_chan_config_t chan_a_config = { .edge_gpio_num = ROTARY_CLK_PIN, .level_gpio_num = ROTARY_DT_PIN }; - pcnt_channel_handle_t pcnt_chan_a = NULL; pcnt_new_channel(pcnt_unit, &chan_a_config, &pcnt_chan_a); - pcnt_chan_config_t chan_b_config = { .edge_gpio_num = ROTARY_DT_PIN, .level_gpio_num = ROTARY_CLK_PIN }; - pcnt_channel_handle_t pcnt_chan_b = NULL; pcnt_new_channel(pcnt_unit, &chan_b_config, &pcnt_chan_b); - pcnt_channel_set_edge_action(pcnt_chan_a, PCNT_CHANNEL_EDGE_ACTION_DECREASE, PCNT_CHANNEL_EDGE_ACTION_INCREASE); - pcnt_channel_set_level_action(pcnt_chan_a, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE); - pcnt_channel_set_edge_action(pcnt_chan_b, PCNT_CHANNEL_EDGE_ACTION_INCREASE, PCNT_CHANNEL_EDGE_ACTION_DECREASE); - pcnt_channel_set_level_action(pcnt_chan_b, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE); - pcnt_unit_enable(pcnt_unit); pcnt_unit_clear_count(pcnt_unit); pcnt_unit_start(pcnt_unit); - - gpio_set_direction(OLED_DC_PIN, GPIO_MODE_OUTPUT); gpio_set_direction(OLED_RES_PIN, GPIO_MODE_OUTPUT); - spi_bus_config_t buscfg = { .miso_io_num = -1, .mosi_io_num = OLED_MOSI_PIN, .sclk_io_num = OLED_CLK_PIN, .quadwp_io_num = -1, .quadhd_io_num = -1, .max_transfer_sz = 1024 }; - spi_device_interface_config_t devcfg = { .clock_speed_hz = 10 * 1000 * 1000, .mode = 0, .spics_io_num = OLED_CS_PIN, .queue_size = 7 }; - spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO); spi_bus_add_device(SPI2_HOST, &devcfg, &spi); - gpio_set_level(OLED_RES_PIN, 0); vTaskDelay(pdMS_TO_TICKS(10)); gpio_set_level(OLED_RES_PIN, 1); vTaskDelay(pdMS_TO_TICKS(50)); - const uint8_t init_cmds[] = { 0xAE, 0xD5, 0x80, 0xA8, 0x3F, 0xD3, 0x00, 0x40, 0x8D, 0x14, 0x20, 0x02, 0xA1, 0xC8, 0xDA, 0x12, 0x81, 0xCF, 0xD9, 0xF1, 0xDB, 0x40, 0xA4, 0xA6, 0xAF }; - for(int i=0; i= 0x01 && rx[1] <= 0x03); +} + +void set_nrf_channel(uint8_t channel) { + nrf_write_reg(0x05, channel); // Write RF_CH register (0x05) +} + +void nrf_init_tx(uint8_t channel) { + gpio_set_level(NRF_PIN_CE, 0); + nrf_write_reg(0x00, 0x0E); // CONFIG: PWR_UP, EN_CRC (2-byte), PTX mode + nrf_write_reg(0x01, 0x00); // EN_AA: Disable auto-ack for low-latency broadcast + nrf_write_reg(0x02, 0x01); // EN_RXADDR: Pipe 0 + nrf_write_reg(0x03, 0x03); // SETUP_AW: 5-byte address width + nrf_write_reg(0x04, 0x00); // SETUP_RETR: Retransmit disabled + nrf_write_reg(0x05, channel); // RF_CH: Set active 2.4 GHz channel + nrf_write_reg(0x06, 0x06); // RF_SETUP: 1 Mbps, 0 dBm + nrf_write_reg(0x07, 0x70); // STATUS: Clear IRQ flags +} + +void nrf_send_packet(const rc_packet_t *pkt) { + uint8_t flush_cmd = 0xE1; // FLUSH_TX + spi_transaction_t tf = { .length = 8, .tx_buffer = &flush_cmd }; + spi_device_polling_transmit(nrf_spi, &tf); + + uint8_t tx_buf[1 + sizeof(rc_packet_t)]; + tx_buf[0] = 0xA0; // W_TX_PAYLOAD + memcpy(&tx_buf[1], pkt, sizeof(rc_packet_t)); + spi_transaction_t tp = { .length = (1 + sizeof(rc_packet_t)) * 8, .tx_buffer = tx_buf }; + spi_device_polling_transmit(nrf_spi, &tp); + + gpio_set_level(NRF_PIN_CE, 1); + esp_rom_delay_us(15); + gpio_set_level(NRF_PIN_CE, 0); +} + +static void read_joystick(int *raw_x, int *raw_y) { + if (adc_oneshot_read(adc1_handle, JOY_ADC_CH_X, raw_x) != ESP_OK) { *raw_x = 0; } + if (adc_oneshot_read(adc1_handle, JOY_ADC_CH_Y, raw_y) != ESP_OK) { *raw_y = 0; } } // ========================================== -// 6. CORE 0: BUTTON TASK +// UI SCREEN RENDERING // ========================================== -void button_task(void *pvParameters) { - bool pause_last = true; - bool next_last = true; - bool sw_last = true; +void draw_menu(int selected_index) { + const char* items[] = {"DRIVE VEHICLE", "RADIO CONFIG", "CALIBRATE", "SYSTEM INFO"}; + char buffer[32]; - while(1) { - bool pause_btn = gpio_get_level(BTN_PAUSE_PIN); - bool next_btn = gpio_get_level(BTN_NEXT_PIN); - bool sw_btn = gpio_get_level(ROTARY_SW_PIN); + oled_draw_string(0, 20, "- MAIN MENU -"); - if(pause_btn == 0 && pause_last == 1) { - is_paused = !is_paused; - } - - if(next_btn == 0 && next_last == 1) { - current_song_idx++; - if (current_song_idx > 15) current_song_idx = 0; // 16 Total Songs - trigger_song_change = true; - is_paused = false; - } - - // Toggle Knob Mode (Volume vs Speed) - if(sw_btn == 0 && sw_last == 1) { - encoder_mode_volume = !encoder_mode_volume; - } - - pause_last = pause_btn; - next_last = next_btn; - sw_last = sw_btn; - vTaskDelay(pdMS_TO_TICKS(50)); - } -} - -// ========================================== -// 7. CORE 0: OLED GRAPHICS ENGINE -// ========================================== -void oled_visualizer_task(void *pvParameters) { - char ui_buf[16]; - - while(1) { - memset(oled_buffer, 0, 1024); - - if (current_song_idx == 0) draw_string(2, 2, "WHISP"); - else if (current_song_idx == 1) draw_string(2, 2, "TAKE "); - else if (current_song_idx == 2) draw_string(2, 2, "RICK "); - else if (current_song_idx == 3) draw_string(2, 2, "ELVIS"); - else if (current_song_idx == 4) draw_string(2, 2, "GIMME"); - else if (current_song_idx == 5) draw_string(2, 2, "ELISE"); - else if (current_song_idx == 6) draw_string(2, 2, "MOZRT"); - else if (current_song_idx == 7) draw_string(2, 2, "MARIO"); - else if (current_song_idx == 8) draw_string(2, 2, "PIRT1"); - else if (current_song_idx == 9) draw_string(2, 2, "PIRT2"); - else if (current_song_idx == 10) draw_string(2, 2, "ALLA "); - else if (current_song_idx == 11) draw_string(2, 2, "TETRS"); - else if (current_song_idx == 12) draw_string(2, 2, "SONIC"); - else if (current_song_idx == 13) draw_string(2, 2, "CAST "); - else if (current_song_idx == 14) draw_string(2, 2, "SEVEN"); - else if (current_song_idx == 15) draw_string(2, 2, "MEGA "); - - if (is_paused) draw_string(40, 2, "PAUSE"); - - // Dynamic UI for Rotary Mode - if (encoder_mode_volume) { - sprintf(ui_buf, "VOL %d%%", (int)(current_volume * 100)); + for (int i = 0; i < NUM_MENU_ITEMS; i++) { + if (i == selected_index) { + snprintf(buffer, sizeof(buffer), "> %-14s", items[i]); } else { - sprintf(ui_buf, "SPD %.1fx", current_speed); + snprintf(buffer, sizeof(buffer), " %-14s", items[i]); } - draw_string(80, 2, ui_buf); - - draw_filled_rect(0, 11, 128, 1, 1); - - if(current_kick) draw_filled_rect(10, 25, 20, 30, 1); - else { draw_filled_rect(10, 45, 20, 10, 1); draw_rect(10, 25, 20, 30, 1); } - - if(current_hat) draw_filled_rect(98, 30, 16, 25, 1); - else { draw_filled_rect(98, 45, 16, 10, 1); draw_rect(98, 30, 16, 25, 1); } - - if(current_freq > 0 && !is_paused) { - int h = (current_freq - 200) / 12; - if (h < 5) h = 5; - if (h > 40) h = 40; - - draw_filled_rect(50, 60 - (h/2), 6, (h/2), 1); - draw_filled_rect(60, 60 - h, 8, h, 1); - draw_filled_rect(72, 60 - (h/1.5), 6, (h/1.5), 1); - } else { - draw_filled_rect(50, 58, 28, 2, 1); - } - - oled_push_framebuffer(); - vTaskDelay(pdMS_TO_TICKS(33)); // ~30 FPS + oled_draw_string(2 + (i * 2), 5, buffer); } } -// ========================================== -// 8. CORE 1: THE MUSIC ENGINE -// ========================================== -void buzzer_sequence_task(void *pvParameters) { - const SequenceStep* active_song = careless_song; - int num_steps = sizeof(careless_song) / sizeof(SequenceStep); +void draw_drive_screen(int raw_x, int raw_y, int channel) { + char buffer[32]; + oled_draw_string(0, 10, "- DRIVE VEHICLE -"); - int last_encoder_count = 0; - int encoder_count = 0; + snprintf(buffer, sizeof(buffer), "VRX: %-4d VRY: %-4d", raw_x, raw_y); + oled_draw_string(2, 2, buffer); - while(1) { - for (int i = 0; i < num_steps; i++) { + snprintf(buffer, sizeof(buffer), "TX CH: %03d [ACTIVE]", channel); + oled_draw_string(4, 2, buffer); - while (is_paused) { - ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, 0); ledc_update_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL); - gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); - gpio_set_level(LED_KICK_PIN, 0); gpio_set_level(LED_HAT_PIN, 0); - led_strip_clear(led_strip); led_strip_refresh(led_strip); - current_freq = 0; current_kick = false; current_hat = false; + oled_draw_string(6, 10, "[CLICK TO BACK]"); +} - vTaskDelay(pdMS_TO_TICKS(50)); - if (trigger_song_change) break; - } +void draw_calibrate_screen(int raw_x, int raw_y) { + char buffer[32]; + oled_draw_string(0, 10, "- CALIBRATION -"); - if (trigger_song_change) { - if (current_song_idx == 0) { active_song = careless_song; num_steps = sizeof(careless_song) / sizeof(SequenceStep); } - else if (current_song_idx == 1) { active_song = takeonme_song; num_steps = sizeof(takeonme_song) / sizeof(SequenceStep); } - else if (current_song_idx == 2) { active_song = rickroll_song; num_steps = sizeof(rickroll_song) / sizeof(SequenceStep); } - else if (current_song_idx == 3) { active_song = elvis_song; num_steps = sizeof(elvis_song) / sizeof(SequenceStep); } - else if (current_song_idx == 4) { active_song = abba_song; num_steps = sizeof(abba_song) / sizeof(SequenceStep); } - else if (current_song_idx == 5) { active_song = elise_song; num_steps = sizeof(elise_song) / sizeof(SequenceStep); } - else if (current_song_idx == 6) { active_song = mozart_song; num_steps = sizeof(mozart_song) / sizeof(SequenceStep); } - else if (current_song_idx == 7) { active_song = midi_mario; num_steps = sizeof(midi_mario) / sizeof(SequenceStep); } - else if (current_song_idx == 8) { active_song = midi_potc_2; num_steps = sizeof(midi_potc_2) / sizeof(SequenceStep); } - else if (current_song_idx == 9) { active_song = midi_potc_3; num_steps = sizeof(midi_potc_3) / sizeof(SequenceStep); } - else if (current_song_idx == 10){ active_song = midi_alla_turca; num_steps = sizeof(midi_alla_turca) / sizeof(SequenceStep); } - else if (current_song_idx == 11){ active_song = midi_tetris_1; num_steps = sizeof(midi_tetris_1) / sizeof(SequenceStep); } - else if (current_song_idx == 12){ active_song = midi_sonic; num_steps = sizeof(midi_sonic) / sizeof(SequenceStep); } - else if (current_song_idx == 13){ active_song = midi_cast; num_steps = sizeof(midi_cast) / sizeof(SequenceStep); } - else if (current_song_idx == 14){ active_song = midi_seven; num_steps = sizeof(midi_seven) / sizeof(SequenceStep); } - else if (current_song_idx == 15){ active_song = midi_mega; num_steps = sizeof(midi_mega) / sizeof(SequenceStep); } - trigger_song_change = false; - break; - } + snprintf(buffer, sizeof(buffer), "CUR: %04d / %04d", raw_x, raw_y); + oled_draw_string(2, 2, buffer); - SequenceStep step = active_song[i]; + snprintf(buffer, sizeof(buffer), "CTR: %04d / %04d", joy_center_x, joy_center_y); + oled_draw_string(4, 2, buffer); - pcnt_unit_get_count(pcnt_unit, &encoder_count); - int diff = encoder_count - last_encoder_count; - last_encoder_count = encoder_count; + oled_draw_string(6, 5, "[CLICK SET CTR]"); +} - if (encoder_mode_volume) { - current_volume += diff * 0.05; - if (current_volume < 0.0) current_volume = 0.0; - if (current_volume > 1.0) current_volume = 1.0; - } else { - current_speed += diff * 0.05; - if (current_speed < 0.2) current_speed = 0.2; - if (current_speed > 3.0) current_speed = 3.0; - } +void draw_system_info(void) { + char buffer[32]; + oled_draw_string(0, 15, "- SYSTEM INFO -"); - int adj_duration = (int)(step.duration / current_speed); - int adj_drum_hit = (int)(45 / current_speed); + snprintf(buffer, sizeof(buffer), "CHIP: ESP32-S3"); + oled_draw_string(2, 5, buffer); - current_freq = step.frequency; - uint32_t target_duty = (uint32_t)(BUZZER_LEDC_DUTY * current_volume); + snprintf(buffer, sizeof(buffer), "HEAP: %lu KB", (unsigned long)(esp_get_free_heap_size() / 1024)); + oled_draw_string(4, 5, buffer); - if (step.frequency > 0 && target_duty > 0) { - ledc_set_freq(BUZZER_LEDC_MODE, BUZZER_LEDC_TIMER, step.frequency); - ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, target_duty); - } else { - ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, 0); - } - ledc_update_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL); + oled_draw_string(6, 10, "[CLICK TO BACK]"); +} - current_kick = step.kick_drum; - current_hat = step.hi_hat; - if (step.kick_drum) { gpio_set_level(ACTIVE_BUZZER_1_PIN, 1); gpio_set_level(LED_KICK_PIN, 1); } - if (step.hi_hat) { gpio_set_level(ACTIVE_BUZZER_2_PIN, 1); gpio_set_level(LED_HAT_PIN, 1); } +void draw_radio_config_screen(int channel) { + char buffer[32]; + oled_draw_string(0, 5, "- RADIO CONFIG -"); - // --- NEOPIXEL RAVE FX --- - if (step.kick_drum || step.hi_hat) { - for (int j = 0; j < 8; j++) { - if (step.kick_drum && step.hi_hat) { - led_strip_set_pixel(led_strip, j, 80, 0, 80); // Purple for simultaneous hits - } else if (step.kick_drum) { - led_strip_set_pixel(led_strip, j, 100, 0, 0); // Red for Kick - } else if (step.hi_hat) { - led_strip_set_pixel(led_strip, j, 0, 80, 80); // Cyan for Hat - } - } - led_strip_refresh(led_strip); - } - - if (adj_duration > adj_drum_hit) { - vTaskDelay(pdMS_TO_TICKS(adj_drum_hit)); - gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); - gpio_set_level(LED_KICK_PIN, 0); gpio_set_level(LED_HAT_PIN, 0); - led_strip_clear(led_strip); led_strip_refresh(led_strip); - current_kick = false; current_hat = false; - vTaskDelay(pdMS_TO_TICKS(adj_duration - adj_drum_hit)); - } else { - vTaskDelay(pdMS_TO_TICKS(adj_duration)); - gpio_set_level(ACTIVE_BUZZER_1_PIN, 0); gpio_set_level(ACTIVE_BUZZER_2_PIN, 0); - gpio_set_level(LED_KICK_PIN, 0); gpio_set_level(LED_HAT_PIN, 0); - led_strip_clear(led_strip); led_strip_refresh(led_strip); - current_kick = false; current_hat = false; - } - - ledc_set_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL, 0); - ledc_update_duty(BUZZER_LEDC_MODE, BUZZER_LEDC_CHANNEL); - current_freq = 0; - vTaskDelay(pdMS_TO_TICKS(15)); - } + if (nrf_check_connection()) { + snprintf(buffer, sizeof(buffer), "CH: <%03d> (2.4G)", channel); + oled_draw_string(2, 2, buffer); + oled_draw_string(4, 2, "TURN DIAL TO TUNE"); + } else { + oled_draw_string(2, 2, "STATUS: FAILED "); + oled_draw_string(4, 2, "CHECK WIRING "); } + + oled_draw_string(6, 5, "[CLICK TO SAVE]"); } // ========================================== -// 9. MAIN APPLICATION ENTRY +// MAIN APPLICATION ENTRY // ========================================== void app_main(void) { - printf("Desk Rave: 16-Track Symphony Edition Initializing...\n"); - init_hardware(); + // 1. Initialize Shared SPI2_HOST Bus (FSPI) + spi_bus_config_t buscfg = { + .miso_io_num = PIN_NUM_MISO, + .mosi_io_num = PIN_NUM_MOSI, + .sclk_io_num = PIN_NUM_CLK, + .quadwp_io_num = -1, + .quadhd_io_num = -1, + .max_transfer_sz = 4096 + }; + ESP_ERROR_CHECK(spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO)); - xTaskCreatePinnedToCore(oled_visualizer_task, "oled_task", 4096, NULL, 4, NULL, 0); - xTaskCreatePinnedToCore(button_task, "btn_task", 4096, NULL, 5, NULL, 0); - xTaskCreatePinnedToCore(buzzer_sequence_task, "music_task", 4096, NULL, 5, NULL, 1); + // 2. Attach 1.3" SH1106 OLED Display (10 MHz SPI) + spi_device_interface_config_t oled_cfg = { + .clock_speed_hz = 10 * 1000 * 1000, + .mode = 0, + .spics_io_num = OLED_PIN_CS, + .queue_size = 1 + }; + ESP_ERROR_CHECK(spi_bus_add_device(SPI2_HOST, &oled_cfg, &oled_spi)); + gpio_reset_pin(OLED_PIN_DC); gpio_set_direction(OLED_PIN_DC, GPIO_MODE_OUTPUT); + gpio_reset_pin(OLED_PIN_RES); gpio_set_direction(OLED_PIN_RES, GPIO_MODE_OUTPUT); + + oled_init(); + oled_clear(); + + // 3. Attach nRF24L01+ Radio Module (1 MHz SPI) + gpio_reset_pin(NRF_PIN_CE); + gpio_set_direction(NRF_PIN_CE, GPIO_MODE_OUTPUT); + gpio_set_level(NRF_PIN_CE, 0); + + spi_device_interface_config_t nrf_cfg = { + .clock_speed_hz = 1 * 1000 * 1000, + .mode = 0, + .spics_io_num = NRF_PIN_CS, + .queue_size = 1 + }; + ESP_ERROR_CHECK(spi_bus_add_device(SPI2_HOST, &nrf_cfg, &nrf_spi)); + nrf_init_tx((uint8_t)current_radio_channel); + + // 4. Initialize One-Shot ADC1 for Hall-Effect / Analog Joystick (GPIO 4 & GPIO 5) + adc_oneshot_unit_init_cfg_t init_config1 = { + .unit_id = ADC_UNIT_1, + }; + ESP_ERROR_CHECK(adc_oneshot_new_unit(&init_config1, &adc1_handle)); + + adc_oneshot_chan_cfg_t adc_cfg = { + .bitwidth = ADC_BITWIDTH_DEFAULT, + .atten = ADC_ATTEN_DB_12, + }; + ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle, JOY_ADC_CH_X, &adc_cfg)); + ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle, JOY_ADC_CH_Y, &adc_cfg)); + + // 5. Initialize Rotary Encoder Push Switch (GPIO 17) + gpio_config_t sw_cfg = { + .pin_bit_mask = (1ULL << PIN_ENCODER_SW), + .mode = GPIO_MODE_INPUT, + .pull_up_en = GPIO_PULLUP_ENABLE, + .pull_down_en = GPIO_PULLDOWN_DISABLE, + .intr_type = GPIO_INTR_DISABLE + }; + gpio_config(&sw_cfg); + + // 6. Initialize PCNT Hardware Quadrature Decoder (GPIO 15 & GPIO 16) + pcnt_unit_handle_t pcnt_unit = NULL; + pcnt_unit_config_t unit_config = { .high_limit = 10000, .low_limit = -10000 }; + ESP_ERROR_CHECK(pcnt_new_unit(&unit_config, &pcnt_unit)); + + pcnt_glitch_filter_config_t filter_config = { .max_glitch_ns = 1000 }; + ESP_ERROR_CHECK(pcnt_unit_set_glitch_filter(pcnt_unit, &filter_config)); + + pcnt_channel_handle_t pcnt_chan_a = NULL, pcnt_chan_b = NULL; + pcnt_chan_config_t chan_a_config = { .edge_gpio_num = PIN_ENCODER_CLK, .level_gpio_num = PIN_ENCODER_DT }; + ESP_ERROR_CHECK(pcnt_new_channel(pcnt_unit, &chan_a_config, &pcnt_chan_a)); + pcnt_chan_config_t chan_b_config = { .edge_gpio_num = PIN_ENCODER_DT, .level_gpio_num = PIN_ENCODER_CLK }; + ESP_ERROR_CHECK(pcnt_new_channel(pcnt_unit, &chan_b_config, &pcnt_chan_b)); + + ESP_ERROR_CHECK(pcnt_channel_set_edge_action(pcnt_chan_a, PCNT_CHANNEL_EDGE_ACTION_DECREASE, PCNT_CHANNEL_EDGE_ACTION_INCREASE)); + ESP_ERROR_CHECK(pcnt_channel_set_level_action(pcnt_chan_a, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE)); + ESP_ERROR_CHECK(pcnt_channel_set_edge_action(pcnt_chan_b, PCNT_CHANNEL_EDGE_ACTION_INCREASE, PCNT_CHANNEL_EDGE_ACTION_DECREASE)); + ESP_ERROR_CHECK(pcnt_channel_set_level_action(pcnt_chan_b, PCNT_CHANNEL_LEVEL_ACTION_KEEP, PCNT_CHANNEL_LEVEL_ACTION_INVERSE)); + + ESP_ERROR_CHECK(pcnt_unit_enable(pcnt_unit)); + ESP_ERROR_CHECK(pcnt_unit_clear_count(pcnt_unit)); + ESP_ERROR_CHECK(pcnt_unit_start(pcnt_unit)); + + ESP_LOGI(TAG, "MFC Multi-Tasking OS State Machine Online (ESP32-S3)."); + + // 7. Master UI & Telemetry Loop + int count = 0; + int last_menu_index = -1; + int last_sw_state = 1; + TickType_t last_button_press = 0; + + screen_state_t current_screen = SCREEN_MAIN_MENU; + bool screen_needs_redraw = true; + + int radio_start_count = 0; + int last_tuned_channel = current_radio_channel; + + while (1) { + pcnt_unit_get_count(pcnt_unit, &count); + int sw_state = gpio_get_level(PIN_ENCODER_SW); + + if (current_screen == SCREEN_MAIN_MENU) { + int raw_steps = count / 4; + int current_menu_index = ((raw_steps % NUM_MENU_ITEMS) + NUM_MENU_ITEMS) % NUM_MENU_ITEMS; + + if (current_menu_index != last_menu_index || screen_needs_redraw) { + oled_clear(); + draw_menu(current_menu_index); + last_menu_index = current_menu_index; + screen_needs_redraw = false; + } + + // Click to Select with 300ms Debounce + if (sw_state == 0 && last_sw_state == 1) { + if ((xTaskGetTickCount() - last_button_press) > pdMS_TO_TICKS(300)) { + current_screen = (screen_state_t)(current_menu_index + 1); + screen_needs_redraw = true; + + if (current_screen == SCREEN_RADIO_CONFIG) { + radio_start_count = count; + last_tuned_channel = current_radio_channel; + } + + last_button_press = xTaskGetTickCount(); + } + } + } else { + // Sub-screen handling + if (current_screen == SCREEN_RADIO_CONFIG) { + int encoder_delta = (count - radio_start_count) / 4; + int target_channel = current_radio_channel + encoder_delta; + + if (target_channel < 0) target_channel = 0; + if (target_channel > 125) target_channel = 125; + + if (target_channel != last_tuned_channel || screen_needs_redraw) { + current_radio_channel = target_channel; + set_nrf_channel((uint8_t)current_radio_channel); + + oled_clear(); + draw_radio_config_screen(current_radio_channel); + last_tuned_channel = target_channel; + screen_needs_redraw = false; + } + } else if (current_screen == SCREEN_DRIVE) { + int raw_x = 0, raw_y = 0; + read_joystick(&raw_x, &raw_y); + + rc_packet_t pkt = { + .joy_x = (uint16_t)raw_x, + .joy_y = (uint16_t)raw_y, + .flags = 0x01, + .channel = (uint8_t)current_radio_channel + }; + nrf_send_packet(&pkt); + + if (screen_needs_redraw) { + oled_clear(); + screen_needs_redraw = false; + } + draw_drive_screen(raw_x, raw_y, current_radio_channel); + } else if (current_screen == SCREEN_CALIBRATE) { + int raw_x = 0, raw_y = 0; + read_joystick(&raw_x, &raw_y); + + if (screen_needs_redraw) { + oled_clear(); + screen_needs_redraw = false; + } + draw_calibrate_screen(raw_x, raw_y); + } else if (current_screen == SCREEN_SYSTEM_INFO) { + if (screen_needs_redraw) { + oled_clear(); + draw_system_info(); + screen_needs_redraw = false; + } + } + + // Click to return to Main Menu (and save calibration if in CALIBRATE) with 300ms Debounce + if (sw_state == 0 && last_sw_state == 1) { + if ((xTaskGetTickCount() - last_button_press) > pdMS_TO_TICKS(300)) { + if (current_screen == SCREEN_CALIBRATE) { + read_joystick(&joy_center_x, &joy_center_y); + } + current_screen = SCREEN_MAIN_MENU; + screen_needs_redraw = true; + last_button_press = xTaskGetTickCount(); + } + } + } + + last_sw_state = sw_state; + vTaskDelay(pdMS_TO_TICKS(30)); + } } diff --git a/firmware/sdkconfig b/firmware/sdkconfig index fc2f675..16d5187 100644 --- a/firmware/sdkconfig +++ b/firmware/sdkconfig @@ -2,71 +2,90 @@ # Automatically generated file. DO NOT EDIT. # Espressif IoT Development Framework (ESP-IDF) 5.2.2 Project Configuration # -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" -CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" -CONFIG_SOC_DPORT_WORKAROUND="Not determined" -CONFIG_SOC_CAPS_ECO_VER_MAX=301 +CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 +CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_DAC_SUPPORTED=y CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_MCPWM_SUPPORTED=y -CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_SDMMC_HOST_SUPPORTED=y -CONFIG_SOC_BT_SUPPORTED=y CONFIG_SOC_PCNT_SUPPORTED=y CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y CONFIG_SOC_TWAI_SUPPORTED=y -CONFIG_SOC_EFUSE_SUPPORTED=y -CONFIG_SOC_EMAC_SUPPORTED=y +CONFIG_SOC_GDMA_SUPPORTED=y +CONFIG_SOC_AHB_GDMA_SUPPORTED=y +CONFIG_SOC_GPTIMER_SUPPORTED=y +CONFIG_SOC_LCDCAM_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y +CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y +CONFIG_SOC_CACHE_SUPPORT_WRAP=y CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y +CONFIG_SOC_RISCV_COPROC_SUPPORTED=y +CONFIG_SOC_BT_SUPPORTED=y +CONFIG_SOC_USB_OTG_SUPPORTED=y +CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y +CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y +CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y +CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y +CONFIG_SOC_EFUSE_SUPPORTED=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y CONFIG_SOC_RTC_MEM_SUPPORTED=y +CONFIG_SOC_PSRAM_DMA_CAPABLE=y +CONFIG_SOC_XT_WDT_SUPPORTED=y CONFIG_SOC_I2S_SUPPORTED=y CONFIG_SOC_RMT_SUPPORTED=y CONFIG_SOC_SDM_SUPPORTED=y CONFIG_SOC_GPSPI_SUPPORTED=y CONFIG_SOC_LEDC_SUPPORTED=y CONFIG_SOC_I2C_SUPPORTED=y +CONFIG_SOC_SYSTIMER_SUPPORTED=y CONFIG_SOC_SUPPORT_COEXISTENCE=y +CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y CONFIG_SOC_AES_SUPPORTED=y CONFIG_SOC_MPI_SUPPORTED=y CONFIG_SOC_SHA_SUPPORTED=y +CONFIG_SOC_HMAC_SUPPORTED=y +CONFIG_SOC_DIG_SIGN_SUPPORTED=y CONFIG_SOC_FLASH_ENC_SUPPORTED=y CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_MEMPROT_SUPPORTED=y CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y CONFIG_SOC_BOD_SUPPORTED=y -CONFIG_SOC_ULP_FSM_SUPPORTED=y CONFIG_SOC_CLK_TREE_SUPPORTED=y CONFIG_SOC_MPU_SUPPORTED=y CONFIG_SOC_WDT_SUPPORTED=y CONFIG_SOC_SPI_FLASH_SUPPORTED=y -CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 -CONFIG_SOC_XTAL_SUPPORT_26M=y CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y +CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_ARBITER_SUPPORTED=y +CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y +CONFIG_SOC_ADC_MONITOR_SUPPORTED=y CONFIG_SOC_ADC_DMA_SUPPORTED=y CONFIG_SOC_ADC_PERIPH_NUM=2 CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 CONFIG_SOC_ADC_ATTEN_NUM=4 CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 -CONFIG_SOC_ADC_PATT_LEN_MAX=16 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_PATT_LEN_MAX=24 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_DIGI_MONITOR_NUM=0 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 +CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 +CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y +CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y CONFIG_SOC_ADC_SHARED_POWER=y -CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y -CONFIG_SOC_IDCACHE_PER_CORE=y +CONFIG_SOC_APB_BACKUP_DMA=y +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y +CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED=y +CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y CONFIG_SOC_CPU_CORES_NUM=2 CONFIG_SOC_CPU_INTR_NUM=32 CONFIG_SOC_CPU_HAS_FPU=y @@ -74,46 +93,54 @@ CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 -CONFIG_SOC_DAC_CHAN_NUM=2 -CONFIG_SOC_DAC_RESOLUTION=8 -CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y +CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 +CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 +CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 +CONFIG_SOC_AHB_GDMA_VERSION=1 +CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 +CONFIG_SOC_GDMA_PAIRS_PER_GROUP=5 +CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=5 +CONFIG_SOC_AHB_GDMA_SUPPORT_PSRAM=y CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=40 -CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF -CONFIG_SOC_GPIO_IN_RANGE_MAX=39 -CONFIG_SOC_GPIO_OUT_RANGE_MAX=33 -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA +CONFIG_SOC_GPIO_PIN_COUNT=49 +CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y +CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y +CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y +CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0x1FFFFFFFFFFFF +CONFIG_SOC_GPIO_IN_RANGE_MAX=48 +CONFIG_SOC_GPIO_OUT_RANGE_MAX=48 +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x0001FFFFFC000000 CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y +CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 +CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 +CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE=y CONFIG_SOC_I2C_NUM=2 CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=16 +CONFIG_SOC_I2C_CMD_REG_NUM=8 CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_APB=y -CONFIG_SOC_I2C_STOP_INDEPENDENT=y +CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y +CONFIG_SOC_I2C_SUPPORT_XTAL=y +CONFIG_SOC_I2C_SUPPORT_RTC=y +CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y +CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y +CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y CONFIG_SOC_I2S_NUM=2 -CONFIG_SOC_I2S_HW_VERSION_1=y -CONFIG_SOC_I2S_SUPPORTS_APLL=y +CONFIG_SOC_I2S_HW_VERSION_2=y +CONFIG_SOC_I2S_SUPPORTS_XTAL=y CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y +CONFIG_SOC_I2S_SUPPORTS_PCM=y CONFIG_SOC_I2S_SUPPORTS_PDM=y CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y -CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 -CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y -CONFIG_SOC_I2S_SUPPORTS_ADC=y -CONFIG_SOC_I2S_SUPPORTS_DAC=y -CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y -CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y -CONFIG_SOC_I2S_LCD_I80_VARIANT=y -CONFIG_SOC_LCD_I80_SUPPORTED=y -CONFIG_SOC_LCD_I80_BUSES=2 -CONFIG_SOC_LCD_I80_BUS_WIDTH=24 -CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=4 +CONFIG_SOC_I2S_SUPPORTS_TDM=y CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y -CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y +CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y CONFIG_SOC_LEDC_CHANNEL_NUM=8 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 +CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y CONFIG_SOC_MCPWM_GROUPS=2 CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 @@ -124,103 +151,191 @@ CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 -CONFIG_SOC_MMU_PERIPH_NUM=2 -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 -CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 -CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 +CONFIG_SOC_MMU_PERIPH_NUM=1 CONFIG_SOC_PCNT_GROUPS=1 -CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=4 CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=4 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=4 CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 -CONFIG_SOC_RMT_SUPPORT_REF_TICK=y +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 +CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y +CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y +CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y +CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y +CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y +CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y +CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y +CONFIG_SOC_RMT_SUPPORT_XTAL=y +CONFIG_SOC_RMT_SUPPORT_RC_FAST=y CONFIG_SOC_RMT_SUPPORT_APB=y -CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y -CONFIG_SOC_RTCIO_PIN_COUNT=18 +CONFIG_SOC_RMT_SUPPORT_DMA=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_RGB_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=1 +CONFIG_SOC_LCD_RGB_PANELS=1 +CONFIG_SOC_LCD_I80_BUS_WIDTH=16 +CONFIG_SOC_LCD_RGB_DATA_WIDTH=16 +CONFIG_SOC_LCD_SUPPORT_RGB_YUV_CONV=y +CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 +CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=549 +CONFIG_SOC_RTC_CNTL_TAGMEM_PD_DMA_BUS_WIDTH=128 +CONFIG_SOC_RTCIO_PIN_COUNT=22 CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y -CONFIG_SOC_SDM_GROUPS=1 +CONFIG_SOC_SDM_GROUPS=y CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 CONFIG_SOC_SDM_CLK_SUPPORT_APB=y -CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y -CONFIG_SOC_SPI_AS_CS_SUPPORTED=y CONFIG_SOC_SPI_PERIPH_NUM=3 -CONFIG_SOC_SPI_DMA_CHAN_NUM=2 -CONFIG_SOC_SPI_MAX_CS_NUM=3 -CONFIG_SOC_SPI_SUPPORT_CLK_APB=y +CONFIG_SOC_SPI_MAX_CS_NUM=6 CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 +CONFIG_SOC_SPI_SUPPORT_DDRCLK=y +CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y +CONFIG_SOC_SPI_SUPPORT_CD_SIG=y +CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y +CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y +CONFIG_SOC_SPI_SUPPORT_CLK_APB=y +CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y +CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y +CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 +CONFIG_SOC_SPI_SUPPORT_OCT=y +CONFIG_SOC_MEMSPI_SRC_FREQ_120M=y CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPIRAM_XIP_SUPPORTED=y +CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 +CONFIG_SOC_SYSTIMER_ALARM_NUM=3 +CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 +CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 +CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y +CONFIG_SOC_SYSTIMER_INT_LEVEL=y +CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y CONFIG_SOC_TIMER_GROUPS=2 CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 +CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y -CONFIG_SOC_TOUCH_VERSION_1=y -CONFIG_SOC_TOUCH_SENSOR_NUM=10 +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TOUCH_VERSION_2=y +CONFIG_SOC_TOUCH_SENSOR_NUM=15 +CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 +CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED=y +CONFIG_SOC_TOUCH_PAD_THRESHOLD_MAX=0x1FFFFF CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF CONFIG_SOC_TWAI_CONTROLLER_NUM=1 -CONFIG_SOC_TWAI_BRP_MIN=2 CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y -CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y +CONFIG_SOC_TWAI_BRP_MIN=2 +CONFIG_SOC_TWAI_BRP_MAX=16384 +CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y CONFIG_SOC_UART_NUM=3 CONFIG_SOC_UART_HP_NUM=3 -CONFIG_SOC_UART_SUPPORT_APB_CLK=y -CONFIG_SOC_UART_SUPPORT_REF_TICK=y CONFIG_SOC_UART_FIFO_LEN=128 CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_SPIRAM_SUPPORTED=y -CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y -CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y -CONFIG_SOC_SHA_ENDIANNESS_BE=y +CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y +CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_RTC_CLK=y +CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y +CONFIG_SOC_USB_OTG_PERIPH_NUM=1 +CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 +CONFIG_SOC_SHA_SUPPORT_DMA=y +CONFIG_SOC_SHA_SUPPORT_RESUME=y +CONFIG_SOC_SHA_GDMA=y CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA224=y CONFIG_SOC_SHA_SUPPORT_SHA256=y CONFIG_SOC_SHA_SUPPORT_SHA384=y CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_SHA_SUPPORT_SHA512_224=y +CONFIG_SOC_SHA_SUPPORT_SHA512_256=y +CONFIG_SOC_SHA_SUPPORT_SHA512_T=y CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 -CONFIG_SOC_MPI_OPERATIONS_NUM=y +CONFIG_SOC_MPI_OPERATIONS_NUM=3 CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_DMA=y +CONFIG_SOC_AES_GDMA=y CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_192=y CONFIG_SOC_AES_SUPPORT_AES_256=y -CONFIG_SOC_SECURE_BOOT_V1=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 -CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_CPU_PD=y +CONFIG_SOC_PM_SUPPORT_TAGMEM_PD=y CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y -CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y -CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y +CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y CONFIG_SOC_PM_SUPPORT_MODEM_PD=y CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y -CONFIG_SOC_CLK_APLL_SUPPORTED=y +CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y +CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y +CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_SDMMC_USE_IOMUX=y +CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y +CONFIG_SOC_EFUSE_DIS_DOWNLOAD_DCACHE=y +CONFIG_SOC_EFUSE_HARD_DIS_JTAG=y +CONFIG_SOC_EFUSE_DIS_USB_JTAG=y +CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y +CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y +CONFIG_SOC_EFUSE_DIS_ICACHE=y +CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y +CONFIG_SOC_SECURE_BOOT_V2_RSA=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 +CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64 +CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y +CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS=y +CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y +CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_256=y +CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 +CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=256 +CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 +CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 +CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 +CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y +CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y +CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y +CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y +CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE=y +CONFIG_SOC_SPI_MEM_SUPPORT_TIMING_TUNING=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y +CONFIG_SOC_MEMSPI_TIMING_TUNING_BY_MSPI_DELAY=y +CONFIG_SOC_MEMSPI_CORE_CLK_SHARED_WITH_PSRAM=y +CONFIG_SOC_COEX_HW_PTI=y +CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE=y +CONFIG_SOC_SDMMC_USE_GPIO_MATRIX=y CONFIG_SOC_SDMMC_NUM_SLOTS=2 +CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_SDMMC_DELAY_PHASE_NUM=4 +CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y +CONFIG_SOC_WIFI_HW_TSF=y +CONFIG_SOC_WIFI_FTM_SUPPORT=y +CONFIG_SOC_WIFI_GCMP_SUPPORT=y CONFIG_SOC_WIFI_WAPI_SUPPORT=y CONFIG_SOC_WIFI_CSI_SUPPORT=y CONFIG_SOC_WIFI_MESH_SUPPORT=y CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y -CONFIG_SOC_WIFI_NAN_SUPPORT=y +CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y CONFIG_SOC_BLE_SUPPORTED=y CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_BT_CLASSIC_SUPPORTED=y +CONFIG_SOC_BLE_50_SUPPORTED=y +CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y CONFIG_SOC_BLUFI_SUPPORTED=y CONFIG_SOC_ULP_HAS_ADC=y CONFIG_SOC_PHY_COMBO_MODULE=y @@ -228,10 +343,10 @@ CONFIG_IDF_CMAKE=y CONFIG_IDF_TOOLCHAIN="gcc" CONFIG_IDF_TARGET_ARCH_XTENSA=y CONFIG_IDF_TARGET_ARCH="xtensa" -CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_TARGET="esp32s3" CONFIG_IDF_INIT_VERSION="5.2.2" -CONFIG_IDF_TARGET_ESP32=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 +CONFIG_IDF_TARGET_ESP32S3=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 # # Build type @@ -243,8 +358,6 @@ CONFIG_APP_BUILD_BOOTLOADER=y CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # CONFIG_APP_REPRODUCIBLE_BUILD is not set # CONFIG_APP_NO_BLOBS is not set -# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # end of Build type # @@ -258,7 +371,7 @@ CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y CONFIG_BOOTLOADER_PROJECT_VER=1 # end of Bootloader manager -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 +CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set @@ -278,7 +391,6 @@ CONFIG_BOOTLOADER_LOG_LEVEL=3 CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y # end of Serial Flash Configurations -# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y # CONFIG_BOOTLOADER_FACTORY_RESET is not set # CONFIG_BOOTLOADER_APP_TEST is not set @@ -297,10 +409,12 @@ CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 # # Security features # -CONFIG_SECURE_BOOT_V1_SUPPORTED=y +CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y +CONFIG_SECURE_BOOT_V2_PREFERRED=y # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set # CONFIG_SECURE_BOOT is not set # CONFIG_SECURE_FLASH_ENC_ENABLED is not set +CONFIG_SECURE_ROM_DL_MODE_ENABLED=y # end of Security features # @@ -317,27 +431,53 @@ CONFIG_ESP_ROM_HAS_CRC_LE=y CONFIG_ESP_ROM_HAS_CRC_BE=y CONFIG_ESP_ROM_HAS_MZ_CRC32=y CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y +CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y +CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y +CONFIG_ESP_ROM_USB_OTG_NUM=3 +CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4 +CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y +CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV=y +CONFIG_ESP_ROM_GET_CLK_FREQ=y +CONFIG_ESP_ROM_HAS_HAL_WDT=y CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y +CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y +CONFIG_ESP_ROM_HAS_SPI_FLASH=y +CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y +CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y +CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y +CONFIG_ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG=y +CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG=y +CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG=y CONFIG_ESP_ROM_HAS_SW_FLOAT=y -CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1 + +# +# Boot ROM Behavior +# +CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y +# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set +# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set +# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set +# end of Boot ROM Behavior # # Serial flasher config # # CONFIG_ESPTOOLPY_NO_STUB is not set +# CONFIG_ESPTOOLPY_OCT_FLASH is not set +CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=y # CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set # CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set CONFIG_ESPTOOLPY_FLASHMODE_DIO=y # CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y CONFIG_ESPTOOLPY_FLASHMODE="dio" -# CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set -CONFIG_ESPTOOLPY_FLASHFREQ_40M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_120M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_80M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="40m" +CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y +CONFIG_ESPTOOLPY_FLASHFREQ="80m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set @@ -409,6 +549,7 @@ CONFIG_COMPILER_RT_LIB_NAME="gcc" CONFIG_APPTRACE_DEST_NONE=y # CONFIG_APPTRACE_DEST_UART1 is not set # CONFIG_APPTRACE_DEST_UART2 is not set +# CONFIG_APPTRACE_DEST_USB_CDC is not set CONFIG_APPTRACE_DEST_UART_NONE=y CONFIG_APPTRACE_UART_TASK_PRIO=1 CONFIG_APPTRACE_LOCK_ENABLE=y @@ -428,15 +569,11 @@ CONFIG_BT_ALARM_MAX_NUM=50 # # Legacy ADC Configuration # -CONFIG_ADC_DISABLE_DAC=y # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set # # Legacy ADC Calibration Configuration # -CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y -CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y -CONFIG_ADC_CAL_LUT_ENABLE=y # CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set # end of Legacy ADC Calibration Configuration # end of Legacy ADC Configuration @@ -454,13 +591,16 @@ CONFIG_SPI_SLAVE_ISR_IN_IRAM=y # TWAI Configuration # # CONFIG_TWAI_ISR_IN_IRAM is not set -CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC=y -CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST=y -CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID=y -CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT=y CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # end of TWAI Configuration +# +# Temperature sensor Configuration +# +# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set +# end of Temperature sensor Configuration + # # UART Configuration # @@ -470,7 +610,6 @@ CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y # # GPIO Configuration # -# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set # CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set # end of GPIO Configuration @@ -528,14 +667,9 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y # end of I2S Configuration # -# DAC Configuration +# USB Serial/JTAG Configuration # -# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set -# CONFIG_DAC_ISR_IRAM_SAFE is not set -# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_DAC_ENABLE_DEBUG_LOG is not set -CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y -# end of DAC Configuration +# end of USB Serial/JTAG Configuration # # LEDC Configuration @@ -556,17 +690,14 @@ CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y # # CONFIG_EFUSE_CUSTOM_TABLE is not set # CONFIG_EFUSE_VIRTUAL is not set -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set -CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y -# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set -CONFIG_EFUSE_MAX_BLK_LEN=192 +CONFIG_EFUSE_MAX_BLK_LEN=256 # end of eFuse Bit Manager # # ESP-TLS # CONFIG_ESP_TLS_USING_MBEDTLS=y -# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set +CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y # CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set # CONFIG_ESP_TLS_SERVER is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set @@ -578,21 +709,13 @@ CONFIG_ESP_TLS_USING_MBEDTLS=y # # CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set # CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set - -# -# ADC Calibration Configurations -# -CONFIG_ADC_CALI_EFUSE_TP_ENABLE=y -CONFIG_ADC_CALI_EFUSE_VREF_ENABLE=y -CONFIG_ADC_CALI_LUT_ENABLE=y -# end of ADC Calibration Configurations - -CONFIG_ADC_DISABLE_DAC_OUTPUT=y +# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set # end of ADC and ADC Calibration # # Wireless Coexistence # +# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set # end of Wireless Coexistence # @@ -605,15 +728,6 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y # Ethernet # CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_ESP32_EMAC=y -CONFIG_ETH_PHY_INTERFACE_RMII=y -CONFIG_ETH_RMII_CLK_INPUT=y -# CONFIG_ETH_RMII_CLK_OUTPUT is not set -CONFIG_ETH_RMII_CLK_IN_GPIO=0 -CONFIG_ETH_DMA_BUFFER_SIZE=512 -CONFIG_ETH_DMA_RX_BUFFER_NUM=10 -CONFIG_ETH_DMA_TX_BUFFER_NUM=10 -# CONFIG_ETH_IRAM_OPTIMIZATION is not set CONFIG_ETH_USE_SPI_ETHERNET=y # CONFIG_ETH_SPI_ETHERNET_DM9051 is not set # CONFIG_ETH_SPI_ETHERNET_W5500 is not set @@ -679,21 +793,17 @@ CONFIG_HTTPD_PURGE_BUF_LEN=32 # # Chip revision # -CONFIG_ESP32_REV_MIN_0=y -# CONFIG_ESP32_REV_MIN_1 is not set -# CONFIG_ESP32_REV_MIN_1_1 is not set -# CONFIG_ESP32_REV_MIN_2 is not set -# CONFIG_ESP32_REV_MIN_3 is not set -# CONFIG_ESP32_REV_MIN_3_1 is not set -CONFIG_ESP32_REV_MIN=0 -CONFIG_ESP32_REV_MIN_FULL=0 +CONFIG_ESP32S3_REV_MIN_0=y +# CONFIG_ESP32S3_REV_MIN_1 is not set +# CONFIG_ESP32S3_REV_MIN_2 is not set +CONFIG_ESP32S3_REV_MIN_FULL=0 CONFIG_ESP_REV_MIN_FULL=0 # -# Maximum Supported ESP32 Revision (Rev v3.99) +# Maximum Supported ESP32-S3 Revision (Rev v0.99) # -CONFIG_ESP32_REV_MAX_FULL=399 -CONFIG_ESP_REV_MAX_FULL=399 +CONFIG_ESP32S3_REV_MAX_FULL=99 +CONFIG_ESP_REV_MAX_FULL=99 # end of Chip revision # @@ -704,10 +814,9 @@ CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y -# CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set +# CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set # end of MAC Config @@ -716,9 +825,9 @@ CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 # # CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y -# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set +CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y -# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set +CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 # CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set # CONFIG_ESP_SLEEP_DEBUG is not set @@ -741,12 +850,18 @@ CONFIG_RTC_CLK_CAL_CYCLES=1024 CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y # end of Peripheral Control +# +# GDMA Configuration +# +# CONFIG_GDMA_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GDMA_ISR_IRAM_SAFE is not set +# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set +# end of GDMA Configuration + # # Main XTAL Config # -# CONFIG_XTAL_FREQ_26 is not set CONFIG_XTAL_FREQ_40=y -# CONFIG_XTAL_FREQ_AUTO is not set CONFIG_XTAL_FREQ=40 # end of Main XTAL Config # end of Hardware Settings @@ -764,6 +879,8 @@ CONFIG_XTAL_FREQ=40 # CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 # CONFIG_LCD_ENABLE_DEBUG_LOG is not set +# CONFIG_LCD_RGB_ISR_IRAM_SAFE is not set +# CONFIG_LCD_RGB_RESTART_IN_VSYNC is not set # end of LCD Peripheral Configuration # end of LCD and Touch Panel @@ -792,6 +909,8 @@ CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP_PHY_MAX_TX_POWER=20 # CONFIG_ESP_PHY_REDUCE_TX_POWER is not set +CONFIG_ESP_PHY_ENABLE_USB=y +# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set CONFIG_ESP_PHY_RF_CAL_PARTIAL=y # CONFIG_ESP_PHY_RF_CAL_NONE is not set # CONFIG_ESP_PHY_RF_CAL_FULL is not set @@ -803,6 +922,8 @@ CONFIG_ESP_PHY_CALIBRATION_MODE=0 # Power Management # # CONFIG_PM_ENABLE is not set +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +CONFIG_PM_RESTORE_CACHE_TAGMEM_AFTER_LIGHT_SLEEP=y # end of Power Management # @@ -826,22 +947,42 @@ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160=y CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160 # -# Memory +# Cache config # -# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB=y +# CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE=0x4000 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_4WAYS is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_8WAYS=y +CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_16B is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE=32 +# CONFIG_ESP32S3_DATA_CACHE_16KB is not set +CONFIG_ESP32S3_DATA_CACHE_32KB=y +# CONFIG_ESP32S3_DATA_CACHE_64KB is not set +CONFIG_ESP32S3_DATA_CACHE_SIZE=0x8000 +# CONFIG_ESP32S3_DATA_CACHE_4WAYS is not set +CONFIG_ESP32S3_DATA_CACHE_8WAYS=y +CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_DATA_CACHE_LINE_16B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_32B=y +# CONFIG_ESP32S3_DATA_CACHE_LINE_64B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=32 +# end of Cache config # -# Non-backward compatible options +# Memory # -# CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set -# end of Non-backward compatible options +# CONFIG_ESP32S3_RTCDATA_IN_FAST_MEM is not set +# CONFIG_ESP32S3_USE_FIXED_STATIC_RAM_SIZE is not set # end of Memory # # Trace memory # -# CONFIG_ESP32_TRAX is not set -CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32S3_TRAX is not set +CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 # end of Trace memory # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set @@ -849,10 +990,14 @@ CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 +CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y +CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y # # Memory protection # +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y # end of Memory protection CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 @@ -864,8 +1009,13 @@ CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 CONFIG_ESP_CONSOLE_UART_DEFAULT=y +# CONFIG_ESP_CONSOLE_USB_CDC is not set +# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set # CONFIG_ESP_CONSOLE_NONE is not set +# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set +CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y +CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y CONFIG_ESP_CONSOLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 @@ -881,32 +1031,30 @@ CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP_PANIC_HANDLER_IRAM is not set # CONFIG_ESP_DEBUG_STUBS_ENABLE is not set CONFIG_ESP_DEBUG_OCDAWARE=y -# CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y # # Brownout Detector # CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=0 +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=7 # end of Brownout Detector -# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y +CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y # end of ESP System Settings # # IPC (Inter-Processor Call) # -CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_TASK_STACK_SIZE=1280 CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y CONFIG_ESP_IPC_ISR_ENABLE=y # end of IPC (Inter-Processor Call) @@ -925,7 +1073,7 @@ CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_TG0_LAC=y +CONFIG_ESP_TIMER_IMPL_SYSTIMER=y # end of High resolution timer (esp_timer) # @@ -960,15 +1108,17 @@ CONFIG_ESP_WIFI_ENABLE_SAE_PK=y CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +# CONFIG_ESP_WIFI_FTM_ENABLE is not set CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y +# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set # CONFIG_ESP_WIFI_GMAC_SUPPORT is not set CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y # CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -# CONFIG_ESP_WIFI_NAN_ENABLE is not set CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y # CONFIG_ESP_WIFI_WAPI_PSK is not set +# CONFIG_ESP_WIFI_SUITE_B_192 is not set # CONFIG_ESP_WIFI_11KV_SUPPORT is not set # CONFIG_ESP_WIFI_MBO_SUPPORT is not set # CONFIG_ESP_WIFI_DPP_SUPPORT is not set @@ -1077,11 +1227,10 @@ CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y CONFIG_FREERTOS_ISR_STACKSIZE=1536 CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -# CONFIG_FREERTOS_FPU_IN_ISR is not set -CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y -CONFIG_FREERTOS_CORETIMER_0=y -# CONFIG_FREERTOS_CORETIMER_1 is not set -CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y +CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y +CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y +# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set +CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y # CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set # end of Port @@ -1102,6 +1251,7 @@ CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y # CONFIG_HAL_ASSERTION_SILENT is not set # CONFIG_HAL_ASSERTION_ENABLE is not set CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 +CONFIG_HAL_WDT_USE_ROM_IMPL=y CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y # end of Hardware Abstraction Layer (HAL) and Low Level (LL) @@ -1349,9 +1499,13 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set CONFIG_MBEDTLS_CMAC_C=y CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_AES_USE_INTERRUPT=y +CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 # CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER is not set CONFIG_MBEDTLS_HARDWARE_MPI=y # CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set +CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y +CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_ROM_MD5=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set @@ -1474,6 +1628,7 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y # # NVS # +# CONFIG_NVS_ENCRYPTION is not set # CONFIG_NVS_ASSERT_ERROR_CHECK is not set # CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set # end of NVS @@ -1552,6 +1707,14 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y # # Features here require specific hardware (READ DOCS FIRST!) # +# CONFIG_SPI_FLASH_HPM_ENA is not set +CONFIG_SPI_FLASH_HPM_AUTO=y +# CONFIG_SPI_FLASH_HPM_DIS is not set +CONFIG_SPI_FLASH_HPM_ON=y +CONFIG_SPI_FLASH_HPM_DC_AUTO=y +# CONFIG_SPI_FLASH_HPM_DC_DISABLE is not set +CONFIG_SPI_FLASH_SUSPEND_QVL_SUPPORTED=y +# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set # end of Optional and Experimental Features (READ DOCS FIRST) # end of Main Flash configuration @@ -1561,10 +1724,10 @@ CONFIG_SPI_FLASH_BROWNOUT_RESET=y # CONFIG_SPI_FLASH_VERIFY_WRITE is not set # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y +# CONFIG_SPI_FLASH_ROM_IMPL is not set CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 @@ -1582,12 +1745,15 @@ CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y +CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y -# CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set -# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set +CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y +CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP=y # end of Auto-detect flash chips CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y @@ -1660,6 +1826,27 @@ CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y # CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set # end of Unity unit testing library +# +# USB-OTG +# +CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=256 +CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y +# CONFIG_USB_HOST_HW_BUFFER_BIAS_IN is not set +# CONFIG_USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT is not set + +# +# Root Hub configuration +# +CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=250 +CONFIG_USB_HOST_RESET_HOLD_MS=30 +CONFIG_USB_HOST_RESET_RECOVERY_MS=30 +CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=10 +# end of Root Hub configuration + +CONFIG_USB_OTG_SUPPORTED=y +# CONFIG_USB_HOST_ENABLE_ENUM_FILTER_CALLBACK is not set +# end of USB-OTG + # # Virtual file system # @@ -1702,9 +1889,6 @@ CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y # Deprecated options for backward compatibility # CONFIG_APP_BUILD_TYPE_ELF_RAM is not set # CONFIG_NO_BLOBS is not set -# CONFIG_ESP32_NO_BLOBS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set -# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set @@ -1737,50 +1921,36 @@ CONFIG_STACK_CHECK_NONE=y # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set CONFIG_ESP32_APPTRACE_DEST_NONE=y CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -CONFIG_ADC2_DISABLE_DAC=y # CONFIG_MCPWM_ISR_IN_IRAM is not set +# CONFIG_EXTERNAL_COEX_ENABLE is not set +# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y CONFIG_GDBSTUB_SUPPORT_TASKS=y CONFIG_GDBSTUB_MAX_TASKS=32 # CONFIG_OTA_ALLOW_HTTP is not set -# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set -CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y -CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 # CONFIG_ESP_SYSTEM_PD_FLASH is not set -CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000 CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 -CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y -CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y -# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set -# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set -# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set -# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set -CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 -# CONFIG_ESP32_XTAL_FREQ_26 is not set -CONFIG_ESP32_XTAL_FREQ_40=y -# CONFIG_ESP32_XTAL_FREQ_AUTO is not set -CONFIG_ESP32_XTAL_FREQ=40 +CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC=y +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_ESP32S3_RTC_CLK_CAL_CYCLES=1024 CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 # CONFIG_REDUCE_PHY_TX_POWER is not set # CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set -# CONFIG_SPIRAM_SUPPORT is not set -# CONFIG_ESP32_SPIRAM_SUPPORT is not set -# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set -CONFIG_ESP32_DEFAULT_CPU_FREQ_160=y -# CONFIG_ESP32_DEFAULT_CPU_FREQ_240 is not set -CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=160 -CONFIG_TRACEMEM_RESERVE_DRAM=0x0 -# CONFIG_ESP32_PANIC_PRINT_HALT is not set -CONFIG_ESP32_PANIC_PRINT_REBOOT=y -# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP32_PANIC_GDBSTUB is not set +CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y +CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y +# CONFIG_ESP32S3_SPIRAM_SUPPORT is not set +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80 is not set +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160=y +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=160 CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_MAIN_TASK_STACK_SIZE=3584 @@ -1801,29 +1971,27 @@ CONFIG_TASK_WDT_TIMEOUT_S=5 CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_ESP32S3_DEBUG_OCDAWARE=y CONFIG_BROWNOUT_DET=y -CONFIG_ESP32_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_0=y -CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y -# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +CONFIG_ESP32S3_BROWNOUT_DET=y +CONFIG_ESP32S3_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_7=y +CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y # CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set -# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set -CONFIG_BROWNOUT_DET_LVL=0 -CONFIG_ESP32_BROWNOUT_DET_LVL=0 -# CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set -CONFIG_IPC_TASK_STACK_SIZE=1024 +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_1 is not set +CONFIG_BROWNOUT_DET_LVL=7 +CONFIG_ESP32S3_BROWNOUT_DET_LVL=7 +CONFIG_IPC_TASK_STACK_SIZE=1280 CONFIG_TIMER_TASK_STACK_SIZE=3584 CONFIG_ESP32_WIFI_ENABLED=y CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 @@ -1851,6 +2019,7 @@ CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y CONFIG_WPA_MBEDTLS_CRYPTO=y CONFIG_WPA_MBEDTLS_TLS_CLIENT=y # CONFIG_WPA_WAPI_PSK is not set +# CONFIG_WPA_SUITE_B_192 is not set # CONFIG_WPA_11KV_SUPPORT is not set # CONFIG_WPA_MBO_SUPPORT is not set # CONFIG_WPA_DPP_SUPPORT is not set @@ -1889,12 +2058,12 @@ CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y -CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y -# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set -# CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set +CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_SYSTIMER=y +CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_SYSTIMER is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_NONE is not set CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 @@ -1906,7 +2075,6 @@ CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -# CONFIG_ESP32_ULP_COPROC_ENABLED is not set CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y CONFIG_SUPPORT_TERMIOS=y CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1