aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clang-format3
-rw-r--r--jack/autocorrect_data.h860
-rw-r--r--jack/autocorrect_dict.txt12
-rw-r--r--jack/color.c152
-rw-r--r--jack/combos.def2
-rw-r--r--jack/combos.h20
-rw-r--r--jack/config.h70
-rw-r--r--jack/dict.h207
-rw-r--r--jack/introspection.c33
-rw-r--r--jack/jack.c100
-rw-r--r--jack/jack.h88
-rw-r--r--jack/oled.c22
-rw-r--r--jack/oled.h730
-rw-r--r--jack/oledfont.h2
-rw-r--r--jack/picosdk_math.mk153
-rw-r--r--jack/post_rules.mk14
-rw-r--r--jack/rgb_matrix_user.inc835
-rw-r--r--jack/rules.mk43
-rw-r--r--jack/tap_code.c159
-rw-r--r--jack/tapping.c92
-rw-r--r--jack/unicode.c31
-rw-r--r--keyboards/endgame/keyboard.json58
-rw-r--r--keyboards/endgame/keymaps/jack/keymap.c (renamed from keyboards/leftover30/keymaps/jack/keymap.c)18
-rw-r--r--keyboards/grumpy/keyboard.json51
-rw-r--r--keyboards/grumpy/keymaps/jack/keymap.c13
-rw-r--r--keyboards/grumpy/readme.md3
-rw-r--r--keyboards/leftover30/chconf.h9
-rw-r--r--keyboards/leftover30/config.h8
-rw-r--r--keyboards/leftover30/halconf.h7
-rw-r--r--keyboards/leftover30/keyboard.json75
-rw-r--r--keyboards/leftover30/mcuconf.h8
-rw-r--r--keyboards/leftover30/readme.md5
-rw-r--r--keyboards/locus/keymaps/jack/keymap.c2
-rw-r--r--keyboards/pseusplit/config.h19
-rw-r--r--keyboards/pseusplit/halconf.h9
-rw-r--r--keyboards/pseusplit/keyboard.json110
-rw-r--r--keyboards/pseusplit/keymaps/default/keymap.json13
-rw-r--r--keyboards/pseusplit/keymaps/jack/keymap.c26
-rw-r--r--keyboards/pseusplit/mcuconf.h11
-rw-r--r--keyboards/pseusplit/pseusplit.c73
-rw-r--r--keyboards/pseusplit/readme.md22
-rw-r--r--keyboards/pseusplit/rules.mk2
-rw-r--r--keyboards/sweep/config.h36
-rw-r--r--keyboards/sweep/halconf.h5
-rw-r--r--keyboards/sweep/keyboard.json273
-rw-r--r--keyboards/sweep/keymaps/jack/keymap.c50
-rw-r--r--keyboards/sweep/lib/jetbrainsmono11.qff.c104
-rw-r--r--keyboards/sweep/lib/jetbrainsmono11.qff.h8
-rw-r--r--keyboards/sweep/mcuconf.h9
-rw-r--r--keyboards/sweep/readme.md8
-rw-r--r--keyboards/sweep/rules.mk10
-rw-r--r--keyboards/sweep/sweep.c36
-rwxr-xr-xkeyboards/tornish/flash.sh8
-rw-r--r--keyboards/tornish/keyboard.json45
-rw-r--r--keyboards/tornish/keymaps/default/keymap.c42
-rw-r--r--keyboards/tornish/readme.md11
-rw-r--r--keyboards/tornish/usbasploader_atmega328p.hex140
-rw-r--r--keyboards/xyz60/keyboard.json2
-rw-r--r--keyboards/xyz60/keymaps/jack/keymap.c8
-rw-r--r--keymaps/beiwagon/keymap.c26
-rw-r--r--keymaps/bully/keymap.c6
-rw-r--r--keymaps/crkbd/config.h8
-rw-r--r--keymaps/crkbd/halconf.h2
-rw-r--r--keymaps/crkbd/keymap.c54
-rw-r--r--keymaps/crkbd/mcuconf.h2
-rw-r--r--keymaps/crkbd/rules.mk3
-rw-r--r--keymaps/f60/keymap.c8
-rw-r--r--keymaps/f60/readme.md4
-rw-r--r--keymaps/ferris/config.h24
-rw-r--r--keymaps/ferris/keymap.c56
-rw-r--r--keymaps/ferris/readme.md8
-rw-r--r--keymaps/ferris/rules.mk3
-rw-r--r--keymaps/kyria/config.h4
-rw-r--r--keymaps/kyria/keymap.c46
-rw-r--r--keymaps/kyria/readme.md2
-rw-r--r--keymaps/kyria/rules.mk2
-rw-r--r--keymaps/onekey/f411_qfplib/config.h12
-rw-r--r--keymaps/onekey/f411_qfplib/keymap.c (renamed from keymaps/onekey/stm32f411/keymap.c)2
-rw-r--r--keymaps/onekey/f411_qfplib/qfplib/qfplib.h (renamed from keymaps/onekey/stm32f411/qfplib/qfplib.h)0
-rw-r--r--keymaps/onekey/f411_qfplib/qfplib/qfplib.s (renamed from keymaps/onekey/stm32f411/qfplib/qfplib.s)0
-rw-r--r--keymaps/onekey/f411_qfplib/rules.mk (renamed from keymaps/onekey/stm32f411/rules.mk)0
-rw-r--r--keymaps/onekey/rp2040/rules.mk39
-rw-r--r--keymaps/onekey/rp_smp/chconf.h (renamed from keymaps/onekey/rp2040/chconf.h)2
-rw-r--r--keymaps/onekey/rp_smp/keymap.c (renamed from keymaps/onekey/rp2040/keymap.c)2
-rw-r--r--keymaps/onekey/rp_smp/mcuconf.h (renamed from keymaps/onekey/rp2040/mcuconf.h)2
-rw-r--r--keymaps/onekey/rp_smp/rules.mk3
-rw-r--r--keymaps/onekey/stm32f411/config.h12
-rw-r--r--keymaps/relic/keymap.c6
-rw-r--r--keymaps/relic/readme.md3
-rw-r--r--keymaps/vault35/config.h2
-rw-r--r--keymaps/vault35/keymap.c8
-rw-r--r--keymaps/vault35/readme.md3
-rw-r--r--ld/RP2040_FLASH_TIMECRIT_ROM_MATH.ld148
-rw-r--r--readme.md18
-rwxr-xr-xutil/link.sh2
-rw-r--r--util/raw.py (renamed from jack/raw.py)2
96 files changed, 3115 insertions, 2374 deletions
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..69645a1
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,3 @@
+---
+SortIncludes: 'false'
+...
diff --git a/jack/autocorrect_data.h b/jack/autocorrect_data.h
index f9d6352..e83dcf9 100644
--- a/jack/autocorrect_data.h
+++ b/jack/autocorrect_data.h
@@ -1,17 +1,17 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
-#define AUTOCORRECT_MIN_LENGTH 5
-#define AUTOCORRECT_MAX_LENGTH 10
-#define DICTIONARY_SIZE 5867
+#define AUTOCORRECT_MIN_LENGTH 5 // ":abot"
+#define AUTOCORRECT_MAX_LENGTH 10 // "competance"
+#define DICTIONARY_SIZE 5705
static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
0x6C, 0x40, 0x00, 0x04, 0x0A, 0x01, 0x06, 0x22, 0x01, 0x07, 0x7D, 0x01,
- 0x08, 0x47, 0x03, 0x09, 0x8E, 0x08, 0x0A, 0xBF, 0x08, 0x0B, 0x43, 0x09,
- 0x0C, 0xD2, 0x09, 0x0E, 0xDC, 0x09, 0x0F, 0xE8, 0x09, 0x10, 0x09, 0x0B,
- 0x11, 0x3B, 0x0B, 0x12, 0x58, 0x0D, 0x13, 0x8C, 0x0D, 0x15, 0xA6, 0x0D,
- 0x16, 0x6D, 0x0F, 0x17, 0x21, 0x11, 0x19, 0x59, 0x14, 0x1A, 0x90, 0x14,
- 0x1C, 0xB6, 0x14, 0x00, 0x46, 0x5F, 0x00, 0x07, 0x67, 0x00, 0x08, 0x71,
+ 0x08, 0x3A, 0x03, 0x09, 0x71, 0x08, 0x0A, 0xA2, 0x08, 0x0B, 0x26, 0x09,
+ 0x0C, 0xB5, 0x09, 0x0E, 0xBF, 0x09, 0x0F, 0xCB, 0x09, 0x10, 0xEC, 0x0A,
+ 0x11, 0x0A, 0x0B, 0x12, 0x18, 0x0D, 0x13, 0x4C, 0x0D, 0x15, 0x66, 0x0D,
+ 0x16, 0x0B, 0x0F, 0x17, 0xBF, 0x10, 0x19, 0xE6, 0x13, 0x1A, 0x1D, 0x14,
+ 0x1C, 0x43, 0x14, 0x00, 0x46, 0x5F, 0x00, 0x07, 0x67, 0x00, 0x08, 0x71,
0x00, 0x0A, 0x9C, 0x00, 0x0F, 0xA8, 0x00, 0x11, 0xB0, 0x00, 0x12, 0xB8,
0x00, 0x16, 0xC2, 0x00, 0x17, 0xCD, 0x00, 0x18, 0x00, 0x01, 0x00, 0x0C,
0x0B, 0x1A, 0x2C, 0x00, 0x80, 0x68, 0x00, 0x16, 0x08, 0x18, 0x2C, 0x00,
@@ -39,7 +39,7 @@ static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
0x16, 0x04, 0x00, 0x86, 0x65, 0x73, 0x74, 0x68, 0x65, 0x74, 0x69, 0x63,
0x00, 0x08, 0x0B, 0x06, 0x00, 0x81, 0x63, 0x6B, 0x00, 0x44, 0x93, 0x01,
0x08, 0x9F, 0x01, 0x0F, 0x7F, 0x02, 0x11, 0xA7, 0x02, 0x12, 0xDF, 0x02,
- 0x15, 0xFA, 0x02, 0x18, 0x32, 0x03, 0x00, 0x0C, 0x0F, 0x19, 0x11, 0x0C,
+ 0x15, 0xFA, 0x02, 0x18, 0x25, 0x03, 0x00, 0x0C, 0x0F, 0x19, 0x11, 0x0C,
0x00, 0x83, 0x61, 0x6C, 0x69, 0x64, 0x00, 0x46, 0xC1, 0x01, 0x07, 0xCB,
0x01, 0x08, 0xD5, 0x01, 0x09, 0xE0, 0x01, 0x0A, 0xED, 0x01, 0x0C, 0xF7,
0x01, 0x13, 0x11, 0x02, 0x15, 0x2E, 0x02, 0x16, 0x51, 0x02, 0x17, 0x5D,
@@ -69,429 +69,417 @@ static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
0x83, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x00, 0x04, 0x00, 0x82, 0x6F, 0x75,
0x6E, 0x64, 0x00, 0x4C, 0xE6, 0x02, 0x15, 0xF1, 0x02, 0x00, 0x08, 0x15,
0x13, 0x00, 0x84, 0x65, 0x72, 0x69, 0x6F, 0x64, 0x00, 0x06, 0x08, 0x15,
- 0x00, 0x82, 0x6F, 0x72, 0x64, 0x00, 0x44, 0x04, 0x03, 0x08, 0x0F, 0x03,
- 0x18, 0x28, 0x03, 0x00, 0x1A, 0x12, 0x09, 0x00, 0x83, 0x72, 0x77, 0x61,
- 0x72, 0x64, 0x00, 0x47, 0x16, 0x03, 0x0C, 0x20, 0x03, 0x00, 0x0C, 0x16,
- 0x11, 0x12, 0x06, 0x00, 0x80, 0x65, 0x64, 0x00, 0x1A, 0x00, 0x83, 0x65,
- 0x69, 0x72, 0x64, 0x00, 0x04, 0x0A, 0x2C, 0x00, 0x83, 0x75, 0x61, 0x72,
- 0x64, 0x00, 0x12, 0x00, 0x4B, 0x3B, 0x03, 0x15, 0x41, 0x03, 0x00, 0x16,
- 0x00, 0x80, 0x6C, 0x64, 0x00, 0x04, 0x00, 0x80, 0x6E, 0x64, 0x00, 0x44,
- 0x75, 0x03, 0x05, 0x82, 0x03, 0x06, 0xAD, 0x03, 0x07, 0x2D, 0x04, 0x08,
- 0x49, 0x04, 0x0A, 0x9D, 0x04, 0x0B, 0x15, 0x05, 0x0C, 0x66, 0x05, 0x0F,
- 0x6F, 0x05, 0x11, 0x31, 0x06, 0x15, 0x3D, 0x06, 0x16, 0xA7, 0x06, 0x17,
- 0x38, 0x07, 0x18, 0x13, 0x08, 0x19, 0x4C, 0x08, 0x00, 0x06, 0x13, 0x16,
- 0x08, 0x10, 0x04, 0x11, 0x00, 0x82, 0x61, 0x63, 0x65, 0x00, 0x44, 0x89,
- 0x03, 0x0F, 0x93, 0x03, 0x00, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x80,
- 0x6C, 0x65, 0x00, 0x44, 0x9A, 0x03, 0x18, 0xA5, 0x03, 0x00, 0x0F, 0x0C,
- 0x04, 0x19, 0x04, 0x00, 0x82, 0x62, 0x6C, 0x65, 0x00, 0x12, 0x07, 0x00,
- 0x82, 0x62, 0x6C, 0x65, 0x00, 0x48, 0xBA, 0x03, 0x0C, 0xC5, 0x03, 0x11,
- 0xCE, 0x03, 0x13, 0x20, 0x04, 0x00, 0x15, 0x08, 0x09, 0x08, 0x15, 0x00,
- 0x81, 0x6E, 0x63, 0x65, 0x00, 0x08, 0x13, 0x00, 0x83, 0x69, 0x65, 0x63,
- 0x65, 0x00, 0x44, 0xD8, 0x03, 0x08, 0xE5, 0x03, 0x18, 0x16, 0x04, 0x00,
- 0x17, 0x08, 0x13, 0x10, 0x12, 0x06, 0x00, 0x83, 0x65, 0x6E, 0x63, 0x65,
- 0x00, 0x55, 0xEC, 0x03, 0x17, 0x0B, 0x04, 0x00, 0x08, 0x00, 0x49, 0xF5,
- 0x03, 0x0F, 0x02, 0x04, 0x00, 0x15, 0x2C, 0x00, 0x86, 0x65, 0x66, 0x65,
- 0x72, 0x65, 0x6E, 0x63, 0x65, 0x00, 0x12, 0x17, 0x00, 0x83, 0x61, 0x6E,
- 0x63, 0x65, 0x00, 0x11, 0x0C, 0x04, 0x10, 0x00, 0x81, 0x61, 0x6E, 0x63,
- 0x65, 0x00, 0x14, 0x08, 0x16, 0x00, 0x82, 0x65, 0x6E, 0x63, 0x65, 0x00,
- 0x04, 0x16, 0x08, 0x10, 0x04, 0x11, 0x00, 0x83, 0x70, 0x61, 0x63, 0x65,
- 0x00, 0x0C, 0x15, 0x08, 0x19, 0x00, 0x52, 0x39, 0x04, 0x19, 0x3F, 0x04,
- 0x00, 0x82, 0x72, 0x69, 0x64, 0x65, 0x00, 0x12, 0x00, 0x85, 0x65, 0x72,
- 0x72, 0x69, 0x64, 0x65, 0x00, 0x17, 0x00, 0x44, 0x58, 0x04, 0x0C, 0x63,
- 0x04, 0x11, 0x6D, 0x04, 0x17, 0x90, 0x04, 0x00, 0x15, 0x04, 0x18, 0x0A,
- 0x00, 0x82, 0x6E, 0x74, 0x65, 0x65, 0x00, 0x10, 0x10, 0x12, 0x06, 0x00,
- 0x81, 0x74, 0x65, 0x65, 0x00, 0x04, 0x15, 0x00, 0x44, 0x77, 0x04, 0x18,
- 0x83, 0x04, 0x00, 0x0A, 0x00, 0x86, 0x75, 0x61, 0x72, 0x61, 0x6E, 0x74,
- 0x65, 0x65, 0x00, 0x04, 0x0A, 0x00, 0x87, 0x75, 0x61, 0x72, 0x61, 0x6E,
- 0x74, 0x65, 0x65, 0x00, 0x0C, 0x10, 0x12, 0x06, 0x00, 0x84, 0x6D, 0x69,
- 0x74, 0x74, 0x65, 0x65, 0x00, 0x44, 0xA7, 0x04, 0x07, 0xEA, 0x04, 0x10,
- 0x0C, 0x05, 0x00, 0x4A, 0xB4, 0x04, 0x11, 0xBF, 0x04, 0x16, 0xC8, 0x04,
- 0x18, 0xD1, 0x04, 0x00, 0x15, 0x12, 0x10, 0x00, 0x83, 0x74, 0x67, 0x61,
- 0x67, 0x65, 0x00, 0x0B, 0x06, 0x00, 0x83, 0x61, 0x6E, 0x67, 0x65, 0x00,
- 0x08, 0x10, 0x00, 0x82, 0x73, 0x61, 0x67, 0x65, 0x00, 0x0A, 0x00, 0x6C,
- 0xDA, 0x04, 0x04, 0xE0, 0x04, 0x00, 0x83, 0x61, 0x75, 0x67, 0x65, 0x00,
- 0x0F, 0x00, 0x84, 0x6E, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, 0x08, 0x0F,
- 0x00, 0x44, 0xF7, 0x04, 0x0C, 0xFD, 0x04, 0x0F, 0x06, 0x05, 0x00, 0x83,
- 0x6C, 0x65, 0x67, 0x65, 0x00, 0x19, 0x0C, 0x15, 0x13, 0x00, 0x82, 0x67,
- 0x65, 0x00, 0x04, 0x00, 0x82, 0x67, 0x65, 0x00, 0x04, 0x0C, 0x00, 0x83,
- 0x6D, 0x61, 0x67, 0x65, 0x00, 0x17, 0x00, 0x47, 0x27, 0x05, 0x10, 0x31,
- 0x05, 0x12, 0x3B, 0x05, 0x16, 0x44, 0x05, 0x17, 0x4D, 0x05, 0x00, 0x11,
- 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x12, 0x15, 0x09,
- 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x20,
- 0x74, 0x68, 0x65, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65,
- 0x00, 0x44, 0x54, 0x05, 0x18, 0x5C, 0x05, 0x00, 0x2C, 0x00, 0x82, 0x20,
- 0x74, 0x68, 0x65, 0x00, 0x12, 0x05, 0x04, 0x00, 0x82, 0x20, 0x74, 0x68,
- 0x65, 0x00, 0x1D, 0x16, 0x2C, 0x00, 0x82, 0x69, 0x7A, 0x65, 0x00, 0x45,
- 0x82, 0x05, 0x0C, 0xF3, 0x05, 0x13, 0xFE, 0x05, 0x16, 0x1A, 0x06, 0x17,
- 0x22, 0x06, 0x19, 0x2A, 0x06, 0x00, 0x44, 0x8C, 0x05, 0x0C, 0xDC, 0x05,
- 0x0F, 0xE8, 0x05, 0x00, 0x4A, 0x96, 0x05, 0x0C, 0xA0, 0x05, 0x0F, 0xBE,
- 0x05, 0x00, 0x0C, 0x0F, 0x08, 0x00, 0x83, 0x69, 0x62, 0x6C, 0x65, 0x00,
- 0x0F, 0x00, 0x44, 0xA9, 0x05, 0x0C, 0xB4, 0x05, 0x00, 0x19, 0x04, 0x00,
- 0x85, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x04, 0x19, 0x04, 0x00,
- 0x84, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x44, 0xC5, 0x05, 0x0C, 0xD0, 0x05,
- 0x00, 0x19, 0x04, 0x00, 0x84, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00,
- 0x19, 0x04, 0x00, 0x85, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00,
- 0x04, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x83, 0x62, 0x6C, 0x65, 0x00,
- 0x0C, 0x04, 0x19, 0x04, 0x00, 0x82, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x1A,
- 0x0B, 0x2C, 0x00, 0x84, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x00, 0x48, 0x05,
- 0x06, 0x12, 0x0F, 0x06, 0x00, 0x12, 0x13, 0x00, 0x84, 0x65, 0x6F, 0x70,
- 0x6C, 0x65, 0x00, 0x08, 0x12, 0x13, 0x00, 0x85, 0x65, 0x6F, 0x70, 0x6C,
- 0x65, 0x00, 0x04, 0x09, 0x00, 0x82, 0x6C, 0x73, 0x65, 0x00, 0x0C, 0x0F,
- 0x00, 0x81, 0x74, 0x6C, 0x65, 0x00, 0x08, 0x0F, 0x00, 0x81, 0x65, 0x6C,
- 0x00, 0x0C, 0x08, 0x0A, 0x1C, 0x0B, 0x00, 0x83, 0x69, 0x65, 0x6E, 0x65,
- 0x00, 0x46, 0x4D, 0x06, 0x0C, 0x57, 0x06, 0x12, 0x63, 0x06, 0x15, 0x8A,
- 0x06, 0x18, 0x91, 0x06, 0x00, 0x12, 0x16, 0x2C, 0x00, 0x83, 0x63, 0x6F,
- 0x72, 0x65, 0x00, 0x18, 0x14, 0x04, 0x00, 0x84, 0x63, 0x71, 0x75, 0x69,
- 0x72, 0x65, 0x00, 0x47, 0x6D, 0x06, 0x08, 0x76, 0x06, 0x09, 0x7E, 0x06,
- 0x00, 0x08, 0x05, 0x00, 0x83, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x05, 0x00,
- 0x82, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x15, 0x08, 0x0B, 0x17, 0x00, 0x83,
- 0x65, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x08, 0x0B, 0x1A, 0x00, 0x81, 0x65,
- 0x00, 0x17, 0x00, 0x6C, 0x9A, 0x06, 0x04, 0x9F, 0x06, 0x00, 0x82, 0x72,
- 0x75, 0x65, 0x00, 0x10, 0x04, 0x00, 0x82, 0x65, 0x75, 0x72, 0x00, 0x44,
- 0xBD, 0x06, 0x08, 0xE1, 0x06, 0x0C, 0xE9, 0x06, 0x0F, 0xF8, 0x06, 0x11,
- 0x01, 0x07, 0x12, 0x1F, 0x07, 0x18, 0x2C, 0x07, 0x00, 0x46, 0xC7, 0x06,
- 0x08, 0xCF, 0x06, 0x0F, 0xD9, 0x06, 0x00, 0x08, 0x05, 0x00, 0x81, 0x75,
- 0x73, 0x65, 0x00, 0x05, 0x2C, 0x00, 0x82, 0x63, 0x61, 0x75, 0x73, 0x65,
- 0x00, 0x09, 0x00, 0x83, 0x61, 0x6C, 0x73, 0x65, 0x00, 0x08, 0x0B, 0x17,
- 0x00, 0x82, 0x73, 0x65, 0x00, 0x06, 0x15, 0x08, 0x06, 0x1B, 0x08, 0x00,
- 0x86, 0x65, 0x72, 0x63, 0x69, 0x73, 0x65, 0x00, 0x0C, 0x04, 0x09, 0x00,
- 0x83, 0x6C, 0x73, 0x65, 0x00, 0x48, 0x08, 0x07, 0x12, 0x13, 0x07, 0x00,
- 0x16, 0x0C, 0x0F, 0x00, 0x84, 0x63, 0x65, 0x6E, 0x73, 0x65, 0x00, 0x13,
- 0x08, 0x15, 0x00, 0x84, 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x00, 0x13,
- 0x11, 0x04, 0x15, 0x17, 0x00, 0x83, 0x73, 0x70, 0x6F, 0x73, 0x65, 0x00,
- 0x06, 0x04, 0x08, 0x05, 0x00, 0x84, 0x63, 0x61, 0x75, 0x73, 0x65, 0x00,
- 0x44, 0x45, 0x07, 0x08, 0xF3, 0x07, 0x0F, 0xFE, 0x07, 0x19, 0x0A, 0x08,
- 0x00, 0x47, 0x55, 0x07, 0x0A, 0x7A, 0x07, 0x0F, 0x87, 0x07, 0x13, 0xCA,
- 0x07, 0x15, 0xD4, 0x07, 0x00, 0x12, 0x10, 0x00, 0x50, 0x5F, 0x07, 0x12,
- 0x6E, 0x07, 0x00, 0x12, 0x06, 0x04, 0x00, 0x87, 0x63, 0x6F, 0x6D, 0x6D,
- 0x6F, 0x64, 0x61, 0x74, 0x65, 0x00, 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D,
- 0x6F, 0x64, 0x61, 0x74, 0x65, 0x00, 0x12, 0x13, 0x12, 0x15, 0x13, 0x00,
- 0x84, 0x61, 0x67, 0x61, 0x74, 0x65, 0x00, 0x46, 0x91, 0x07, 0x13, 0x9E,
- 0x07, 0x18, 0xAB, 0x07, 0x00, 0x18, 0x0F, 0x04, 0x06, 0x00, 0x85, 0x63,
- 0x75, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x10, 0x04, 0x08, 0x17, 0x00, 0x86,
- 0x6D, 0x70, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x46, 0xB2, 0x07, 0x0F, 0xBF,
- 0x07, 0x00, 0x18, 0x0F, 0x04, 0x06, 0x00, 0x86, 0x63, 0x75, 0x6C, 0x61,
- 0x74, 0x65, 0x00, 0x04, 0x06, 0x00, 0x84, 0x63, 0x75, 0x6C, 0x61, 0x74,
- 0x65, 0x00, 0x07, 0x18, 0x00, 0x84, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00,
- 0x48, 0xDB, 0x07, 0x18, 0xE8, 0x07, 0x00, 0x11, 0x04, 0x0A, 0x00, 0x86,
- 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x65, 0x00, 0x06, 0x04, 0x00, 0x84,
- 0x63, 0x75, 0x72, 0x61, 0x74, 0x65, 0x00, 0x0F, 0x0F, 0x04, 0x13, 0x00,
- 0x83, 0x65, 0x74, 0x74, 0x65, 0x00, 0x04, 0x13, 0x10, 0x08, 0x17, 0x00,
- 0x83, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x0C, 0x15, 0x13, 0x00, 0x81, 0x61,
- 0x74, 0x65, 0x00, 0x4A, 0x1D, 0x08, 0x0C, 0x29, 0x08, 0x16, 0x33, 0x08,
- 0x00, 0x08, 0x0F, 0x0F, 0x12, 0x06, 0x00, 0x82, 0x61, 0x67, 0x75, 0x65,
- 0x00, 0x14, 0x11, 0x18, 0x00, 0x83, 0x69, 0x71, 0x75, 0x65, 0x00, 0x44,
- 0x3A, 0x08, 0x15, 0x42, 0x08, 0x00, 0x06, 0x2C, 0x00, 0x82, 0x75, 0x73,
- 0x65, 0x00, 0x08, 0x13, 0x00, 0x84, 0x75, 0x72, 0x73, 0x75, 0x65, 0x00,
- 0x4C, 0x53, 0x08, 0x12, 0x78, 0x08, 0x00, 0x48, 0x5D, 0x08, 0x0B, 0x67,
- 0x08, 0x0F, 0x70, 0x08, 0x00, 0x0F, 0x08, 0x05, 0x00, 0x83, 0x69, 0x65,
- 0x76, 0x65, 0x00, 0x06, 0x04, 0x2C, 0x00, 0x81, 0x65, 0x76, 0x65, 0x00,
- 0x08, 0x05, 0x00, 0x81, 0x65, 0x76, 0x65, 0x00, 0x52, 0x7F, 0x08, 0x19,
- 0x86, 0x08, 0x00, 0x15, 0x13, 0x00, 0x82, 0x76, 0x65, 0x00, 0x05, 0x04,
- 0x00, 0x83, 0x6F, 0x76, 0x65, 0x00, 0x4C, 0x95, 0x08, 0x11, 0xB7, 0x08,
- 0x00, 0x08, 0x00, 0x4B, 0xA1, 0x08, 0x0F, 0xA8, 0x08, 0x15, 0xB0, 0x08,
- 0x00, 0x06, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x08, 0x05, 0x00, 0x82,
- 0x69, 0x65, 0x66, 0x00, 0x05, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x18,
- 0x12, 0x09, 0x2C, 0x00, 0x80, 0x64, 0x00, 0x4C, 0xC6, 0x08, 0x11, 0xD0,
- 0x08, 0x00, 0x11, 0x12, 0x0A, 0x2C, 0x00, 0x82, 0x69, 0x6E, 0x67, 0x00,
- 0x48, 0xDA, 0x08, 0x0C, 0xE3, 0x08, 0x15, 0x39, 0x09, 0x00, 0x0C, 0x05,
- 0x00, 0x83, 0x65, 0x69, 0x6E, 0x67, 0x00, 0x48, 0xF6, 0x08, 0x0B, 0x00,
- 0x09, 0x0F, 0x0D, 0x09, 0x15, 0x19, 0x09, 0x17, 0x24, 0x09, 0x1C, 0x2E,
- 0x09, 0x00, 0x0B, 0x06, 0x04, 0x06, 0x00, 0x83, 0x69, 0x6E, 0x67, 0x00,
- 0x17, 0x06, 0x04, 0x10, 0x00, 0x85, 0x74, 0x63, 0x68, 0x69, 0x6E, 0x67,
- 0x00, 0x08, 0x0C, 0x06, 0x00, 0x85, 0x65, 0x69, 0x6C, 0x69, 0x6E, 0x67,
- 0x00, 0x18, 0x06, 0x08, 0x15, 0x00, 0x82, 0x72, 0x69, 0x6E, 0x67, 0x00,
- 0x0B, 0x2C, 0x00, 0x84, 0x74, 0x68, 0x69, 0x6E, 0x67, 0x00, 0x17, 0x1C,
- 0x11, 0x04, 0x00, 0x83, 0x68, 0x69, 0x6E, 0x67, 0x00, 0x0C, 0x17, 0x16,
- 0x00, 0x83, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x46, 0x53, 0x09, 0x08, 0x73,
- 0x09, 0x0A, 0x7F, 0x09, 0x16, 0x89, 0x09, 0x17, 0x9B, 0x09, 0x00, 0x4C,
- 0x5A, 0x09, 0x15, 0x64, 0x09, 0x00, 0x17, 0x1A, 0x16, 0x00, 0x83, 0x69,
- 0x74, 0x63, 0x68, 0x00, 0x04, 0x08, 0x16, 0x04, 0x08, 0x15, 0x00, 0x86,
- 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x00, 0x17, 0x07, 0x11, 0x04, 0x2C,
- 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x11, 0x08, 0x15, 0x17, 0x16,
- 0x00, 0x80, 0x74, 0x68, 0x00, 0x0C, 0x0F, 0x13, 0x10, 0x12, 0x06, 0x04,
- 0x00, 0x86, 0x63, 0x6F, 0x6D, 0x70, 0x6C, 0x69, 0x73, 0x68, 0x00, 0x4A,
- 0xA5, 0x09, 0x0C, 0xBD, 0x09, 0x15, 0xC8, 0x09, 0x00, 0x48, 0xAC, 0x09,
- 0x0C, 0xB6, 0x09, 0x00, 0x15, 0x17, 0x16, 0x00, 0x82, 0x6E, 0x67, 0x74,
- 0x68, 0x00, 0x08, 0x0B, 0x00, 0x81, 0x68, 0x74, 0x00, 0x1A, 0x07, 0x11,
- 0x04, 0x05, 0x00, 0x81, 0x64, 0x74, 0x68, 0x00, 0x18, 0x17, 0x2C, 0x00,
- 0x83, 0x72, 0x75, 0x74, 0x68, 0x00, 0x15, 0x08, 0x0B, 0x17, 0x2C, 0x00,
- 0x81, 0x69, 0x72, 0x00, 0x11, 0x0C, 0x17, 0x0B, 0x00, 0x84, 0x74, 0x68,
- 0x69, 0x6E, 0x6B, 0x00, 0x44, 0xFE, 0x09, 0x07, 0x52, 0x0A, 0x08, 0x76,
- 0x0A, 0x09, 0xCB, 0x0A, 0x0F, 0xD4, 0x0A, 0x17, 0xF1, 0x0A, 0x18, 0xFA,
- 0x0A, 0x00, 0x4C, 0x08, 0x0A, 0x17, 0x13, 0x0A, 0x18, 0x2C, 0x0A, 0x00,
- 0x06, 0x13, 0x1C, 0x17, 0x00, 0x83, 0x69, 0x63, 0x61, 0x6C, 0x00, 0x4C,
- 0x1A, 0x0A, 0x18, 0x22, 0x0A, 0x00, 0x11, 0x0C, 0x00, 0x81, 0x69, 0x61,
- 0x6C, 0x00, 0x15, 0x0C, 0x19, 0x00, 0x83, 0x74, 0x75, 0x61, 0x6C, 0x00,
- 0x51, 0x36, 0x0A, 0x15, 0x3F, 0x0A, 0x17, 0x48, 0x0A, 0x00, 0x04, 0x2C,
- 0x00, 0x82, 0x6E, 0x75, 0x61, 0x6C, 0x00, 0x18, 0x17, 0x04, 0x11, 0x00,
- 0x82, 0x61, 0x6C, 0x00, 0x0C, 0x19, 0x00, 0x83, 0x72, 0x74, 0x75, 0x61,
- 0x6C, 0x00, 0x48, 0x59, 0x0A, 0x18, 0x60, 0x0A, 0x00, 0x0C, 0x09, 0x00,
- 0x81, 0x6C, 0x64, 0x00, 0x52, 0x67, 0x0A, 0x1A, 0x6D, 0x0A, 0x00, 0x06,
- 0x00, 0x81, 0x6C, 0x64, 0x00, 0x12, 0x00, 0x84, 0x77, 0x6F, 0x75, 0x6C,
- 0x64, 0x00, 0x4A, 0x83, 0x0A, 0x0F, 0x8B, 0x0A, 0x17, 0xB9, 0x0A, 0x18,
- 0xC1, 0x0A, 0x00, 0x11, 0x0C, 0x16, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x44,
- 0x92, 0x0A, 0x0F, 0xAC, 0x0A, 0x00, 0x15, 0x00, 0x44, 0x9B, 0x0A, 0x15,
- 0xA2, 0x0A, 0x00, 0x13, 0x00, 0x81, 0x6C, 0x65, 0x6C, 0x00, 0x04, 0x13,
- 0x00, 0x84, 0x61, 0x6C, 0x6C, 0x65, 0x6C, 0x00, 0x04, 0x15, 0x15, 0x04,
- 0x13, 0x00, 0x85, 0x61, 0x6C, 0x6C, 0x65, 0x6C, 0x00, 0x17, 0x0C, 0x0F,
- 0x00, 0x81, 0x6C, 0x65, 0x00, 0x07, 0x08, 0x0B, 0x06, 0x16, 0x00, 0x81,
- 0x6C, 0x65, 0x00, 0x08, 0x16, 0x1C, 0x10, 0x00, 0x81, 0x6C, 0x66, 0x00,
- 0x0C, 0x09, 0x00, 0x4F, 0xDE, 0x0A, 0x18, 0xE8, 0x0A, 0x00, 0x0F, 0x18,
- 0x09, 0x00, 0x84, 0x66, 0x69, 0x6C, 0x6C, 0x00, 0x09, 0x00, 0x83, 0x6C,
- 0x66, 0x69, 0x6C, 0x6C, 0x00, 0x18, 0x16, 0x08, 0x15, 0x00, 0x81, 0x6C,
- 0x74, 0x00, 0x09, 0x17, 0x04, 0x08, 0x15, 0x0A, 0x00, 0x85, 0x61, 0x74,
- 0x65, 0x66, 0x75, 0x6C, 0x00, 0x44, 0x13, 0x0B, 0x0F, 0x24, 0x0B, 0x15,
- 0x2F, 0x0B, 0x00, 0x15, 0x0A, 0x12, 0x17, 0x06, 0x08, 0x13, 0x16, 0x00,
- 0x84, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x00, 0x08, 0x05, 0x12, 0x15,
- 0x13, 0x00, 0x82, 0x6C, 0x65, 0x6D, 0x00, 0x12, 0x09, 0x12, 0x06, 0x00,
- 0x83, 0x6E, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x44, 0x5D, 0x0B, 0x07, 0x85,
- 0x0B, 0x08, 0x8E, 0x0B, 0x0A, 0x0C, 0x0C, 0x0C, 0x5F, 0x0C, 0x12, 0x79,
- 0x0C, 0x13, 0x15, 0x0D, 0x15, 0x21, 0x0D, 0x16, 0x2C, 0x0D, 0x18, 0x36,
- 0x0D, 0x1A, 0x4D, 0x0D, 0x00, 0x0C, 0x00, 0x4A, 0x66, 0x0B, 0x17, 0x6E,
- 0x0B, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x51, 0x75,
- 0x0B, 0x15, 0x7D, 0x0B, 0x00, 0x12, 0x06, 0x00, 0x82, 0x61, 0x69, 0x6E,
- 0x00, 0x08, 0x06, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x18, 0x12, 0x09,
- 0x2C, 0x00, 0x81, 0x6E, 0x64, 0x00, 0x47, 0xA4, 0x0B, 0x08, 0xAE, 0x0B,
- 0x0A, 0xD8, 0x0B, 0x13, 0xE4, 0x0B, 0x15, 0xED, 0x0B, 0x16, 0xFA, 0x0B,
- 0x1A, 0x04, 0x0C, 0x00, 0x0F, 0x0C, 0x0B, 0x06, 0x00, 0x81, 0x72, 0x65,
- 0x6E, 0x00, 0x57, 0xB5, 0x0B, 0x1A, 0xCE, 0x0B, 0x00, 0x48, 0xBC, 0x0B,
- 0x1A, 0xC4, 0x0B, 0x00, 0x05, 0x00, 0x82, 0x77, 0x65, 0x65, 0x6E, 0x00,
- 0x08, 0x05, 0x00, 0x84, 0x74, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x08, 0x05,
- 0x00, 0x83, 0x74, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x12, 0x07, 0x1C, 0x0B,
- 0x00, 0x83, 0x72, 0x6F, 0x67, 0x65, 0x6E, 0x00, 0x04, 0x0B, 0x2C, 0x00,
- 0x81, 0x70, 0x65, 0x6E, 0x00, 0x07, 0x0F, 0x0B, 0x06, 0x00, 0x84, 0x69,
- 0x6C, 0x64, 0x72, 0x65, 0x6E, 0x00, 0x12, 0x12, 0x0B, 0x06, 0x00, 0x83,
- 0x73, 0x65, 0x6E, 0x00, 0x17, 0x08, 0x05, 0x00, 0x80, 0x65, 0x6E, 0x00,
- 0x48, 0x13, 0x0C, 0x0C, 0x1E, 0x0C, 0x00, 0x0C, 0x15, 0x12, 0x09, 0x00,
- 0x83, 0x65, 0x69, 0x67, 0x6E, 0x00, 0x4B, 0x31, 0x0C, 0x0F, 0x37, 0x0C,
- 0x11, 0x3F, 0x0C, 0x12, 0x48, 0x0C, 0x15, 0x4F, 0x0C, 0x16, 0x56, 0x0C,
- 0x00, 0x17, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0F, 0x04, 0x00, 0x83, 0x69,
- 0x67, 0x6E, 0x00, 0x15, 0x04, 0x08, 0x0F, 0x00, 0x81, 0x6E, 0x67, 0x00,
- 0x0A, 0x2C, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x17, 0x16, 0x00, 0x81, 0x6E,
- 0x67, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x73, 0x69, 0x67, 0x6E, 0x00, 0x4A,
- 0x66, 0x0C, 0x17, 0x6E, 0x0C, 0x00, 0x04, 0x2C, 0x00, 0x81, 0x61, 0x69,
- 0x6E, 0x00, 0x04, 0x15, 0x08, 0x06, 0x00, 0x83, 0x74, 0x61, 0x69, 0x6E,
- 0x00, 0x4C, 0x83, 0x0C, 0x16, 0xFF, 0x0C, 0x17, 0x09, 0x0D, 0x00, 0x46,
- 0x8D, 0x0C, 0x16, 0x9A, 0x0C, 0x17, 0xB4, 0x0C, 0x00, 0x0C, 0x16, 0x08,
- 0x07, 0x00, 0x85, 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x44, 0xA1,
- 0x0C, 0x16, 0xAA, 0x0C, 0x00, 0x0C, 0x0F, 0x00, 0x83, 0x69, 0x73, 0x6F,
- 0x6E, 0x00, 0x04, 0x06, 0x06, 0x12, 0x00, 0x83, 0x69, 0x6F, 0x6E, 0x00,
- 0x47, 0xC4, 0x0C, 0x0C, 0xCE, 0x0C, 0x0F, 0xDD, 0x0C, 0x11, 0xE9, 0x0C,
- 0x16, 0xF5, 0x0C, 0x00, 0x07, 0x04, 0x00, 0x83, 0x69, 0x74, 0x69, 0x6F,
- 0x6E, 0x00, 0x17, 0x0C, 0x13, 0x08, 0x15, 0x00, 0x86, 0x65, 0x74, 0x69,
- 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x04, 0x08, 0x15, 0x00, 0x85, 0x6C, 0x61,
- 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x06, 0x18, 0x09, 0x00, 0x85, 0x6E, 0x63,
- 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x12, 0x13, 0x00, 0x83, 0x69, 0x74, 0x69,
- 0x6F, 0x6E, 0x00, 0x0C, 0x19, 0x0C, 0x07, 0x00, 0x81, 0x69, 0x6F, 0x6E,
- 0x00, 0x0C, 0x06, 0x04, 0x15, 0x09, 0x00, 0x83, 0x74, 0x69, 0x6F, 0x6E,
- 0x00, 0x13, 0x0B, 0x04, 0x00, 0x84, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6E,
- 0x00, 0x17, 0x18, 0x08, 0x15, 0x00, 0x83, 0x74, 0x75, 0x72, 0x6E, 0x00,
- 0x0A, 0x0C, 0x0B, 0x17, 0x00, 0x82, 0x6E, 0x67, 0x73, 0x00, 0x55, 0x3D,
- 0x0D, 0x17, 0x46, 0x0D, 0x00, 0x17, 0x08, 0x15, 0x00, 0x82, 0x75, 0x72,
- 0x6E, 0x00, 0x08, 0x15, 0x00, 0x80, 0x72, 0x6E, 0x00, 0x12, 0x0E, 0x11,
- 0x18, 0x00, 0x82, 0x6E, 0x6F, 0x77, 0x6E, 0x00, 0x47, 0x62, 0x0D, 0x11,
- 0x6D, 0x0D, 0x1A, 0x76, 0x0D, 0x00, 0x08, 0x18, 0x16, 0x13, 0x00, 0x83,
- 0x65, 0x75, 0x64, 0x6F, 0x00, 0x1A, 0x0E, 0x2C, 0x00, 0x82, 0x6E, 0x6F,
- 0x77, 0x00, 0x4F, 0x7D, 0x0D, 0x11, 0x85, 0x0D, 0x00, 0x0F, 0x12, 0x09,
- 0x00, 0x81, 0x6F, 0x77, 0x00, 0x0E, 0x2C, 0x00, 0x81, 0x6F, 0x77, 0x00,
- 0x56, 0x93, 0x0D, 0x18, 0x9D, 0x0D, 0x00, 0x04, 0x0B, 0x15, 0x08, 0x13,
- 0x00, 0x81, 0x70, 0x73, 0x00, 0x12, 0x12, 0x0F, 0x00, 0x81, 0x6B, 0x75,
- 0x70, 0x00, 0x44, 0xC5, 0x0D, 0x08, 0x06, 0x0E, 0x0B, 0x13, 0x0F, 0x0F,
- 0x1C, 0x0F, 0x12, 0x2A, 0x0F, 0x13, 0x3B, 0x0F, 0x16, 0x46, 0x0F, 0x17,
- 0x4F, 0x0F, 0x18, 0x5B, 0x0F, 0x1C, 0x64, 0x0F, 0x00, 0x4C, 0xCF, 0x0D,
- 0x0F, 0xD9, 0x0D, 0x18, 0xFB, 0x0D, 0x00, 0x0F, 0x0C, 0x10, 0x0C, 0x16,
- 0x00, 0x82, 0x61, 0x72, 0x00, 0x4C, 0xE0, 0x0D, 0x18, 0xEB, 0x0D, 0x00,
- 0x10, 0x10, 0x0C, 0x16, 0x00, 0x84, 0x69, 0x6C, 0x61, 0x72, 0x00, 0x06,
- 0x0C, 0x17, 0x04, 0x13, 0x00, 0x86, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6C,
- 0x61, 0x72, 0x00, 0x0F, 0x0A, 0x08, 0x15, 0x00, 0x83, 0x75, 0x6C, 0x61,
- 0x72, 0x00, 0x44, 0x25, 0x0E, 0x07, 0x2D, 0x0E, 0x0B, 0x3A, 0x0E, 0x0C,
- 0x77, 0x0E, 0x0F, 0x91, 0x0E, 0x10, 0x9B, 0x0E, 0x11, 0xA5, 0x0E, 0x12,
- 0xD1, 0x0E, 0x17, 0xD9, 0x0E, 0x19, 0xF8, 0x0E, 0x00, 0x0F, 0x06, 0x00,
- 0x82, 0x65, 0x61, 0x72, 0x00, 0x11, 0x04, 0x0F, 0x04, 0x06, 0x00, 0x84,
- 0x65, 0x6E, 0x64, 0x61, 0x72, 0x00, 0x4A, 0x41, 0x0E, 0x17, 0x4C, 0x0E,
- 0x00, 0x0C, 0x08, 0x0B, 0x00, 0x85, 0x69, 0x67, 0x68, 0x65, 0x72, 0x00,
- 0x48, 0x56, 0x0E, 0x12, 0x62, 0x0E, 0x18, 0x6E, 0x0E, 0x00, 0x0B, 0x0A,
- 0x12, 0x17, 0x00, 0x85, 0x65, 0x74, 0x68, 0x65, 0x72, 0x00, 0x04, 0x11,
- 0x00, 0x86, 0x61, 0x6E, 0x6F, 0x74, 0x68, 0x65, 0x72, 0x00, 0x09, 0x00,
- 0x83, 0x72, 0x74, 0x68, 0x65, 0x72, 0x00, 0x4B, 0x7E, 0x0E, 0x0F, 0x86,
- 0x0E, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x65, 0x69, 0x72, 0x00, 0x13, 0x10,
- 0x12, 0x06, 0x00, 0x83, 0x69, 0x6C, 0x65, 0x72, 0x00, 0x17, 0x0C, 0x09,
- 0x00, 0x83, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x10, 0x04, 0x15, 0x0A, 0x2C,
- 0x00, 0x81, 0x61, 0x72, 0x00, 0x4C, 0xAC, 0x0E, 0x17, 0xB8, 0x0E, 0x00,
- 0x0A, 0x0A, 0x08, 0x05, 0x00, 0x84, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x00,
- 0x4C, 0xBF, 0x0E, 0x16, 0xC8, 0x0E, 0x00, 0x12, 0x13, 0x00, 0x83, 0x6E,
- 0x74, 0x65, 0x72, 0x00, 0x0C, 0x0F, 0x00, 0x82, 0x65, 0x6E, 0x65, 0x72,
- 0x00, 0x09, 0x08, 0x05, 0x00, 0x81, 0x72, 0x65, 0x00, 0x4B, 0xE0, 0x0E,
- 0x18, 0xEA, 0x0E, 0x00, 0x12, 0x11, 0x04, 0x00, 0x83, 0x74, 0x68, 0x65,
- 0x72, 0x00, 0x13, 0x12, 0x10, 0x06, 0x00, 0x86, 0x6F, 0x6D, 0x70, 0x75,
- 0x74, 0x65, 0x72, 0x00, 0x48, 0xFF, 0x0E, 0x1A, 0x0A, 0x0F, 0x00, 0x08,
- 0x15, 0x08, 0x0B, 0x1A, 0x00, 0x83, 0x76, 0x65, 0x72, 0x00, 0x12, 0x0B,
- 0x00, 0x82, 0x65, 0x76, 0x65, 0x72, 0x00, 0x08, 0x17, 0x12, 0x00, 0x82,
- 0x68, 0x65, 0x72, 0x00, 0x04, 0x18, 0x06, 0x0C, 0x17, 0x15, 0x04, 0x13,
- 0x00, 0x82, 0x6C, 0x61, 0x72, 0x00, 0x17, 0x04, 0x15, 0x08, 0x17, 0x11,
- 0x0C, 0x00, 0x87, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6F, 0x72, 0x00, 0x17,
- 0x0F, 0x0F, 0x18, 0x11, 0x00, 0x82, 0x70, 0x74, 0x72, 0x00, 0x04, 0x08,
- 0x1C, 0x2C, 0x00, 0x81, 0x72, 0x73, 0x00, 0x12, 0x04, 0x15, 0x08, 0x13,
- 0x12, 0x00, 0x82, 0x74, 0x6F, 0x72, 0x00, 0x06, 0x12, 0x2C, 0x00, 0x81,
- 0x63, 0x75, 0x72, 0x00, 0x08, 0x19, 0x08, 0x2C, 0x00, 0x81, 0x72, 0x79,
- 0x00, 0x44, 0x83, 0x0F, 0x08, 0xB7, 0x0F, 0x0A, 0x47, 0x10, 0x15, 0x52,
- 0x10, 0x16, 0x5D, 0x10, 0x17, 0xF5, 0x10, 0x18, 0xFD, 0x10, 0x00, 0x4B,
- 0x90, 0x0F, 0x13, 0x9B, 0x0F, 0x15, 0xA5, 0x0F, 0x1C, 0xAE, 0x0F, 0x00,
- 0x13, 0x15, 0x08, 0x13, 0x00, 0x83, 0x68, 0x61, 0x70, 0x73, 0x00, 0x0B,
- 0x15, 0x08, 0x13, 0x00, 0x82, 0x61, 0x70, 0x73, 0x00, 0x08, 0x1C, 0x2C,
- 0x00, 0x82, 0x61, 0x72, 0x73, 0x00, 0x1A, 0x0F, 0x04, 0x00, 0x82, 0x61,
- 0x79, 0x73, 0x00, 0x44, 0xC7, 0x0F, 0x06, 0xDE, 0x0F, 0x0C, 0xE9, 0x0F,
- 0x0F, 0x35, 0x10, 0x16, 0x3C, 0x10, 0x00, 0x47, 0xCE, 0x0F, 0x0E, 0xD6,
- 0x0F, 0x00, 0x0C, 0x2C, 0x00, 0x82, 0x65, 0x61, 0x73, 0x00, 0x17, 0x00,
- 0x83, 0x61, 0x6B, 0x65, 0x73, 0x00, 0x08, 0x07, 0x11, 0x0C, 0x00, 0x83,
- 0x69, 0x63, 0x65, 0x73, 0x00, 0x46, 0xF3, 0x0F, 0x15, 0x1A, 0x10, 0x17,
- 0x29, 0x10, 0x00, 0x48, 0xFA, 0x0F, 0x0C, 0x04, 0x10, 0x00, 0x07, 0x11,
- 0x0C, 0x00, 0x84, 0x69, 0x63, 0x65, 0x73, 0x00, 0x47, 0x0B, 0x10, 0x17,
- 0x12, 0x10, 0x00, 0x11, 0x0C, 0x00, 0x82, 0x65, 0x73, 0x00, 0x15, 0x08,
- 0x19, 0x00, 0x82, 0x65, 0x73, 0x00, 0x12, 0x16, 0x08, 0x06, 0x06, 0x04,
- 0x00, 0x84, 0x73, 0x6F, 0x72, 0x69, 0x65, 0x73, 0x00, 0x0F, 0x0C, 0x05,
- 0x04, 0x00, 0x83, 0x69, 0x74, 0x69, 0x65, 0x73, 0x00, 0x04, 0x09, 0x00,
- 0x81, 0x73, 0x65, 0x00, 0x12, 0x0B, 0x06, 0x2C, 0x00, 0x82, 0x6F, 0x73,
- 0x65, 0x73, 0x00, 0x0C, 0x11, 0x0B, 0x17, 0x00, 0x83, 0x69, 0x6E, 0x67,
- 0x73, 0x00, 0x08, 0x04, 0x1C, 0x2C, 0x00, 0x83, 0x65, 0x61, 0x72, 0x73,
- 0x00, 0x44, 0x67, 0x10, 0x08, 0x73, 0x10, 0x12, 0xEA, 0x10, 0x00, 0x15,
- 0x04, 0x05, 0x10, 0x08, 0x00, 0x82, 0x72, 0x61, 0x73, 0x73, 0x00, 0x46,
- 0x80, 0x10, 0x11, 0x98, 0x10, 0x15, 0xB5, 0x10, 0x16, 0xD2, 0x10, 0x00,
- 0x46, 0x87, 0x10, 0x18, 0x90, 0x10, 0x00, 0x12, 0x15, 0x13, 0x00, 0x83,
- 0x65, 0x73, 0x73, 0x00, 0x16, 0x00, 0x82, 0x63, 0x65, 0x73, 0x73, 0x00,
- 0x4C, 0x9F, 0x10, 0x16, 0xAB, 0x10, 0x00, 0x16, 0x16, 0x18, 0x05, 0x00,
- 0x85, 0x69, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x18, 0x05, 0x00, 0x83, 0x69,
- 0x6E, 0x65, 0x73, 0x73, 0x00, 0x13, 0x00, 0x55, 0xBE, 0x10, 0x18, 0xC9,
- 0x10, 0x00, 0x18, 0x16, 0x00, 0x85, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73,
- 0x00, 0x16, 0x00, 0x83, 0x70, 0x72, 0x65, 0x73, 0x73, 0x00, 0x46, 0xD9,
- 0x10, 0x12, 0xE2, 0x10, 0x00, 0x06, 0x18, 0x16, 0x00, 0x83, 0x65, 0x73,
- 0x73, 0x00, 0x13, 0x00, 0x82, 0x73, 0x65, 0x73, 0x73, 0x00, 0x15, 0x06,
- 0x06, 0x04, 0x00, 0x84, 0x72, 0x6F, 0x73, 0x73, 0x00, 0x15, 0x0C, 0x09,
- 0x00, 0x81, 0x73, 0x74, 0x00, 0x52, 0x04, 0x11, 0x16, 0x12, 0x11, 0x00,
- 0x0F, 0x12, 0x10, 0x12, 0x11, 0x04, 0x00, 0x84, 0x61, 0x6C, 0x6F, 0x75,
- 0x73, 0x00, 0x11, 0x08, 0x06, 0x11, 0x12, 0x06, 0x00, 0x85, 0x73, 0x65,
- 0x6E, 0x73, 0x75, 0x73, 0x00, 0x44, 0x46, 0x11, 0x08, 0x64, 0x11, 0x0A,
- 0x81, 0x11, 0x0B, 0x8B, 0x11, 0x0C, 0xAF, 0x11, 0x0F, 0xBA, 0x11, 0x10,
- 0xC5, 0x11, 0x11, 0xD1, 0x11, 0x12, 0x1F, 0x13, 0x13, 0x59, 0x13, 0x16,
- 0x75, 0x13, 0x18, 0x15, 0x14, 0x00, 0x55, 0x4D, 0x11, 0x1A, 0x58, 0x11,
- 0x00, 0x08, 0x13, 0x08, 0x16, 0x00, 0x83, 0x61, 0x72, 0x61, 0x74, 0x00,
- 0x0B, 0x08, 0x10, 0x12, 0x16, 0x00, 0x83, 0x77, 0x68, 0x61, 0x74, 0x00,
- 0x44, 0x6B, 0x11, 0x11, 0x74, 0x11, 0x00, 0x15, 0x0A, 0x2C, 0x00, 0x82,
- 0x65, 0x61, 0x74, 0x00, 0x10, 0x11, 0x15, 0x08, 0x19, 0x12, 0x0A, 0x00,
- 0x82, 0x65, 0x6E, 0x74, 0x00, 0x0B, 0x18, 0x04, 0x06, 0x00, 0x82, 0x67,
- 0x68, 0x74, 0x00, 0x47, 0x95, 0x11, 0x0A, 0x9C, 0x11, 0x0C, 0xA4, 0x11,
- 0x00, 0x0C, 0x1A, 0x00, 0x81, 0x74, 0x68, 0x00, 0x11, 0x08, 0x0F, 0x00,
- 0x81, 0x74, 0x68, 0x00, 0x0A, 0x11, 0x12, 0x17, 0x00, 0x83, 0x69, 0x67,
- 0x68, 0x74, 0x00, 0x17, 0x18, 0x12, 0x05, 0x04, 0x00, 0x81, 0x20, 0x69,
- 0x74, 0x00, 0x16, 0x18, 0x08, 0x15, 0x00, 0x83, 0x73, 0x75, 0x6C, 0x74,
- 0x00, 0x04, 0x17, 0x15, 0x12, 0x13, 0x10, 0x0C, 0x00, 0x81, 0x6E, 0x74,
- 0x00, 0x44, 0xDE, 0x11, 0x08, 0x16, 0x12, 0x15, 0x0C, 0x13, 0x16, 0x17,
- 0x13, 0x00, 0x4C, 0xEB, 0x11, 0x11, 0xF6, 0x11, 0x15, 0x01, 0x12, 0x17,
- 0x0B, 0x12, 0x00, 0x13, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x82, 0x65, 0x6E,
- 0x74, 0x00, 0x0C, 0x10, 0x12, 0x15, 0x13, 0x00, 0x82, 0x65, 0x6E, 0x74,
- 0x00, 0x04, 0x13, 0x13, 0x04, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x08,
- 0x13, 0x10, 0x12, 0x06, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x4C, 0x23,
- 0x12, 0x10, 0x44, 0x12, 0x15, 0xA8, 0x12, 0x19, 0x02, 0x13, 0x00, 0x46,
- 0x2A, 0x12, 0x13, 0x37, 0x12, 0x00, 0x08, 0x09, 0x09, 0x08, 0x00, 0x85,
- 0x69, 0x63, 0x69, 0x65, 0x6E, 0x74, 0x00, 0x08, 0x06, 0x08, 0x15, 0x00,
- 0x85, 0x69, 0x70, 0x69, 0x65, 0x6E, 0x74, 0x00, 0x48, 0x51, 0x12, 0x11,
- 0x5D, 0x12, 0x15, 0x7E, 0x12, 0x17, 0x9D, 0x12, 0x00, 0x19, 0x12, 0x0A,
- 0x00, 0x83, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x48, 0x64, 0x12,
- 0x15, 0x70, 0x12, 0x00, 0x19, 0x12, 0x0A, 0x00, 0x84, 0x72, 0x6E, 0x6D,
- 0x65, 0x6E, 0x74, 0x00, 0x12, 0x19, 0x12, 0x0A, 0x00, 0x86, 0x65, 0x72,
- 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x48, 0x85, 0x12, 0x12, 0x90, 0x12,
- 0x00, 0x19, 0x12, 0x0A, 0x00, 0x83, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00,
- 0x19, 0x12, 0x0A, 0x00, 0x85, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74,
- 0x00, 0x04, 0x17, 0x16, 0x00, 0x83, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x00,
- 0x44, 0xB5, 0x12, 0x08, 0xC0, 0x12, 0x09, 0xCC, 0x12, 0x15, 0xD7, 0x12,
- 0x00, 0x13, 0x04, 0x00, 0x84, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00,
- 0x09, 0x0C, 0x07, 0x00, 0x84, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00,
- 0x09, 0x0C, 0x07, 0x00, 0x83, 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x44,
- 0xDE, 0x12, 0x08, 0xF6, 0x12, 0x00, 0x13, 0x00, 0x44, 0xE7, 0x12, 0x13,
- 0xEF, 0x12, 0x00, 0x85, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x04,
- 0x00, 0x83, 0x65, 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07, 0x00, 0x85, 0x66,
- 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x08, 0x0F, 0x08, 0x15, 0x00, 0x82,
- 0x61, 0x6E, 0x74, 0x00, 0x08, 0x09, 0x09, 0x0C, 0x07, 0x00, 0x81, 0x65,
- 0x6E, 0x74, 0x00, 0x12, 0x06, 0x00, 0x82, 0x6E, 0x73, 0x74, 0x00, 0x45,
- 0x2F, 0x13, 0x10, 0x36, 0x13, 0x11, 0x3D, 0x13, 0x15, 0x47, 0x13, 0x16,
- 0x50, 0x13, 0x00, 0x04, 0x2C, 0x00, 0x80, 0x75, 0x74, 0x00, 0x0F, 0x04,
- 0x00, 0x80, 0x73, 0x74, 0x00, 0x07, 0x0C, 0x07, 0x00, 0x82, 0x20, 0x6E,
- 0x6F, 0x74, 0x00, 0x13, 0x08, 0x15, 0x00, 0x82, 0x6F, 0x72, 0x74, 0x00,
- 0x10, 0x0F, 0x04, 0x00, 0x82, 0x6F, 0x73, 0x74, 0x00, 0x48, 0x60, 0x13,
- 0x1C, 0x6B, 0x13, 0x00, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x83, 0x65, 0x69,
- 0x70, 0x74, 0x00, 0x06, 0x11, 0x08, 0x00, 0x82, 0x72, 0x79, 0x70, 0x74,
- 0x00, 0x48, 0x8B, 0x13, 0x0A, 0xB4, 0x13, 0x0C, 0xBD, 0x13, 0x10, 0xDA,
- 0x13, 0x11, 0xE4, 0x13, 0x12, 0xFF, 0x13, 0x18, 0x0A, 0x14, 0x00, 0x4A,
- 0x92, 0x13, 0x15, 0xA9, 0x13, 0x00, 0x4C, 0x99, 0x13, 0x18, 0xA1, 0x13,
- 0x00, 0x0B, 0x00, 0x82, 0x68, 0x65, 0x73, 0x74, 0x00, 0x16, 0x00, 0x82,
- 0x67, 0x65, 0x73, 0x74, 0x00, 0x17, 0x11, 0x0C, 0x00, 0x83, 0x65, 0x72,
- 0x65, 0x73, 0x74, 0x00, 0x15, 0x04, 0x0F, 0x00, 0x81, 0x65, 0x73, 0x74,
- 0x00, 0x49, 0xC4, 0x13, 0x11, 0xD0, 0x13, 0x00, 0x08, 0x11, 0x04, 0x10,
- 0x00, 0x84, 0x69, 0x66, 0x65, 0x73, 0x74, 0x00, 0x04, 0x0A, 0x04, 0x00,
- 0x83, 0x69, 0x6E, 0x73, 0x74, 0x00, 0x12, 0x0F, 0x04, 0x00, 0x83, 0x6D,
- 0x6F, 0x73, 0x74, 0x00, 0x44, 0xEB, 0x13, 0x11, 0xF6, 0x13, 0x00, 0x0C,
- 0x0A, 0x04, 0x00, 0x84, 0x61, 0x69, 0x6E, 0x73, 0x74, 0x00, 0x0C, 0x04,
- 0x0A, 0x04, 0x00, 0x82, 0x73, 0x74, 0x00, 0x0F, 0x10, 0x04, 0x00, 0x84,
- 0x6C, 0x6D, 0x6F, 0x73, 0x74, 0x00, 0x0D, 0x04, 0x2C, 0x00, 0x83, 0x64,
- 0x6A, 0x75, 0x73, 0x74, 0x00, 0x46, 0x1F, 0x14, 0x13, 0x38, 0x14, 0x17,
- 0x4F, 0x14, 0x00, 0x48, 0x26, 0x14, 0x15, 0x31, 0x14, 0x00, 0x06, 0x1B,
- 0x08, 0x00, 0x84, 0x65, 0x63, 0x75, 0x74, 0x65, 0x00, 0x0C, 0x06, 0x00,
- 0x80, 0x69, 0x74, 0x00, 0x57, 0x3F, 0x14, 0x18, 0x47, 0x14, 0x00, 0x11,
- 0x0C, 0x00, 0x83, 0x70, 0x75, 0x74, 0x00, 0x12, 0x00, 0x82, 0x74, 0x70,
- 0x75, 0x74, 0x00, 0x13, 0x18, 0x12, 0x00, 0x83, 0x74, 0x70, 0x75, 0x74,
- 0x00, 0x48, 0x60, 0x14, 0x0C, 0x84, 0x14, 0x00, 0x44, 0x67, 0x14, 0x0C,
- 0x6E, 0x14, 0x00, 0x0B, 0x2C, 0x00, 0x81, 0x76, 0x65, 0x00, 0x46, 0x75,
- 0x14, 0x08, 0x7D, 0x14, 0x00, 0x08, 0x15, 0x00, 0x82, 0x65, 0x69, 0x76,
- 0x00, 0x06, 0x08, 0x15, 0x00, 0x81, 0x76, 0x00, 0x08, 0x0B, 0x06, 0x04,
- 0x2C, 0x00, 0x82, 0x69, 0x65, 0x76, 0x65, 0x00, 0x4C, 0x9A, 0x14, 0x11,
- 0xA4, 0x14, 0x12, 0xAD, 0x14, 0x00, 0x08, 0x19, 0x08, 0x15, 0x00, 0x82,
- 0x69, 0x65, 0x77, 0x00, 0x12, 0x0E, 0x2C, 0x00, 0x82, 0x6E, 0x6F, 0x77,
- 0x00, 0x0F, 0x12, 0x09, 0x00, 0x81, 0x6C, 0x6F, 0x77, 0x00, 0x44, 0xD2,
- 0x14, 0x06, 0xDD, 0x14, 0x08, 0x18, 0x15, 0x0B, 0x22, 0x15, 0x0F, 0x34,
- 0x15, 0x11, 0xF9, 0x15, 0x15, 0x03, 0x16, 0x16, 0xA8, 0x16, 0x17, 0xC3,
- 0x16, 0x00, 0x11, 0x13, 0x10, 0x12, 0x06, 0x00, 0x82, 0x61, 0x6E, 0x79,
- 0x00, 0x44, 0xEA, 0x14, 0x08, 0xF6, 0x14, 0x0C, 0x01, 0x15, 0x13, 0x0C,
- 0x15, 0x00, 0x15, 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x82, 0x69, 0x73,
- 0x79, 0x00, 0x18, 0x14, 0x08, 0x15, 0x09, 0x00, 0x81, 0x6E, 0x63, 0x79,
- 0x00, 0x15, 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x81, 0x73, 0x79, 0x00,
- 0x18, 0x15, 0x0E, 0x11, 0x04, 0x05, 0x00, 0x81, 0x74, 0x63, 0x79, 0x00,
- 0x17, 0x09, 0x04, 0x16, 0x00, 0x82, 0x65, 0x74, 0x79, 0x00, 0x06, 0x15,
- 0x04, 0x15, 0x0C, 0x08, 0x0B, 0x00, 0x87, 0x69, 0x65, 0x72, 0x61, 0x72,
- 0x63, 0x68, 0x79, 0x00, 0x44, 0x47, 0x15, 0x0B, 0x8A, 0x15, 0x0E, 0x94,
- 0x15, 0x0F, 0x9C, 0x15, 0x12, 0xE4, 0x15, 0x15, 0xEE, 0x15, 0x00, 0x45,
- 0x5A, 0x15, 0x08, 0x63, 0x15, 0x0F, 0x69, 0x15, 0x11, 0x72, 0x15, 0x15,
- 0x79, 0x15, 0x18, 0x82, 0x15, 0x00, 0x12, 0x15, 0x13, 0x00, 0x81, 0x62,
- 0x6C, 0x79, 0x00, 0x15, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x08, 0x15, 0x00,
- 0x83, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x0C, 0x09, 0x00, 0x80, 0x6C, 0x79,
- 0x00, 0x08, 0x11, 0x08, 0x0A, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x17, 0x06,
- 0x04, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x0A, 0x0C, 0x0F, 0x16, 0x00, 0x81,
- 0x74, 0x6C, 0x79, 0x00, 0x0C, 0x0F, 0x00, 0x81, 0x65, 0x6C, 0x79, 0x00,
- 0x44, 0xA6, 0x15, 0x05, 0xD1, 0x15, 0x08, 0xDA, 0x15, 0x00, 0x56, 0xAD,
- 0x15, 0x17, 0xC5, 0x15, 0x00, 0x18, 0x00, 0x6C, 0xB6, 0x15, 0x16, 0xBD,
- 0x15, 0x00, 0x83, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x18, 0x00, 0x84,
- 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x18, 0x06, 0x04, 0x00, 0x85, 0x74, 0x75,
- 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x04, 0x05, 0x12, 0x15, 0x13, 0x00, 0x81,
- 0x79, 0x00, 0x04, 0x15, 0x00, 0x84, 0x65, 0x61, 0x6C, 0x6C, 0x79, 0x00,
- 0x10, 0x12, 0x11, 0x04, 0x00, 0x82, 0x61, 0x6C, 0x79, 0x00, 0x04, 0x10,
- 0x0C, 0x15, 0x13, 0x00, 0x81, 0x69, 0x6C, 0x79, 0x00, 0x08, 0x12, 0x10,
- 0x2C, 0x00, 0x82, 0x6E, 0x65, 0x79, 0x00, 0x44, 0x13, 0x16, 0x08, 0x7B,
- 0x16, 0x12, 0x84, 0x16, 0x17, 0x91, 0x16, 0x19, 0xA0, 0x16, 0x00, 0x45,
- 0x23, 0x16, 0x0C, 0x2C, 0x16, 0x0F, 0x39, 0x16, 0x10, 0x55, 0x16, 0x16,
- 0x5E, 0x16, 0x00, 0x0C, 0x0F, 0x00, 0x82, 0x72, 0x61, 0x72, 0x79, 0x00,
- 0x0F, 0x0F, 0x0C, 0x1B, 0x18, 0x04, 0x00, 0x84, 0x69, 0x61, 0x72, 0x79,
- 0x00, 0x4C, 0x40, 0x16, 0x0F, 0x4A, 0x16, 0x00, 0x1B, 0x18, 0x04, 0x00,
- 0x82, 0x69, 0x61, 0x72, 0x79, 0x00, 0x0C, 0x1B, 0x18, 0x04, 0x00, 0x83,
- 0x69, 0x61, 0x72, 0x79, 0x00, 0x18, 0x16, 0x00, 0x82, 0x6D, 0x61, 0x72,
- 0x79, 0x00, 0x08, 0x06, 0x00, 0x46, 0x68, 0x16, 0x08, 0x73, 0x16, 0x00,
- 0x08, 0x11, 0x00, 0x85, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x00, 0x11,
- 0x00, 0x82, 0x73, 0x61, 0x72, 0x79, 0x00, 0x13, 0x12, 0x15, 0x13, 0x00,
- 0x80, 0x74, 0x79, 0x00, 0x0A, 0x04, 0x17, 0x04, 0x06, 0x00, 0x84, 0x65,
- 0x67, 0x6F, 0x72, 0x79, 0x00, 0x11, 0x18, 0x06, 0x12, 0x2C, 0x00, 0x86,
- 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x72, 0x79, 0x00, 0x08, 0x2C, 0x00, 0x81,
- 0x65, 0x72, 0x79, 0x00, 0x04, 0x00, 0x55, 0xB1, 0x16, 0x1A, 0xBC, 0x16,
- 0x00, 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x82, 0x69, 0x73, 0x79, 0x00,
- 0x0F, 0x04, 0x00, 0x81, 0x79, 0x73, 0x00, 0x49, 0xCD, 0x16, 0x0F, 0xD5,
- 0x16, 0x15, 0xDE, 0x16, 0x00, 0x04, 0x16, 0x00, 0x81, 0x65, 0x74, 0x79,
- 0x00, 0x0C, 0x05, 0x04, 0x00, 0x81, 0x69, 0x74, 0x79, 0x00, 0x13, 0x08,
- 0x12, 0x15, 0x13, 0x00, 0x84, 0x70, 0x65, 0x72, 0x74, 0x79, 0x00};
+ 0x00, 0x82, 0x6F, 0x72, 0x64, 0x00, 0x44, 0x01, 0x03, 0x08, 0x0C, 0x03,
+ 0x00, 0x1A, 0x12, 0x09, 0x00, 0x83, 0x72, 0x77, 0x61, 0x72, 0x64, 0x00,
+ 0x47, 0x13, 0x03, 0x0C, 0x1D, 0x03, 0x00, 0x0C, 0x16, 0x11, 0x12, 0x06,
+ 0x00, 0x80, 0x65, 0x64, 0x00, 0x1A, 0x00, 0x83, 0x65, 0x69, 0x72, 0x64,
+ 0x00, 0x12, 0x00, 0x4B, 0x2E, 0x03, 0x15, 0x34, 0x03, 0x00, 0x16, 0x00,
+ 0x80, 0x6C, 0x64, 0x00, 0x04, 0x00, 0x80, 0x6E, 0x64, 0x00, 0x44, 0x68,
+ 0x03, 0x05, 0x75, 0x03, 0x06, 0xA0, 0x03, 0x07, 0x20, 0x04, 0x08, 0x3C,
+ 0x04, 0x0A, 0x90, 0x04, 0x0B, 0x08, 0x05, 0x0C, 0x59, 0x05, 0x0F, 0x62,
+ 0x05, 0x11, 0x24, 0x06, 0x15, 0x30, 0x06, 0x16, 0x9A, 0x06, 0x17, 0x1B,
+ 0x07, 0x18, 0xF6, 0x07, 0x19, 0x2F, 0x08, 0x00, 0x06, 0x13, 0x16, 0x08,
+ 0x10, 0x04, 0x11, 0x00, 0x82, 0x61, 0x63, 0x65, 0x00, 0x44, 0x7C, 0x03,
+ 0x0F, 0x86, 0x03, 0x00, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x80, 0x6C,
+ 0x65, 0x00, 0x44, 0x8D, 0x03, 0x18, 0x98, 0x03, 0x00, 0x0F, 0x0C, 0x04,
+ 0x19, 0x04, 0x00, 0x82, 0x62, 0x6C, 0x65, 0x00, 0x12, 0x07, 0x00, 0x82,
+ 0x62, 0x6C, 0x65, 0x00, 0x48, 0xAD, 0x03, 0x0C, 0xB8, 0x03, 0x11, 0xC1,
+ 0x03, 0x13, 0x13, 0x04, 0x00, 0x15, 0x08, 0x09, 0x08, 0x15, 0x00, 0x81,
+ 0x6E, 0x63, 0x65, 0x00, 0x08, 0x13, 0x00, 0x83, 0x69, 0x65, 0x63, 0x65,
+ 0x00, 0x44, 0xCB, 0x03, 0x08, 0xD8, 0x03, 0x18, 0x09, 0x04, 0x00, 0x17,
+ 0x08, 0x13, 0x10, 0x12, 0x06, 0x00, 0x83, 0x65, 0x6E, 0x63, 0x65, 0x00,
+ 0x55, 0xDF, 0x03, 0x17, 0xFE, 0x03, 0x00, 0x08, 0x00, 0x49, 0xE8, 0x03,
+ 0x0F, 0xF5, 0x03, 0x00, 0x15, 0x2C, 0x00, 0x86, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6E, 0x63, 0x65, 0x00, 0x12, 0x17, 0x00, 0x83, 0x61, 0x6E, 0x63,
+ 0x65, 0x00, 0x11, 0x0C, 0x04, 0x10, 0x00, 0x81, 0x61, 0x6E, 0x63, 0x65,
+ 0x00, 0x14, 0x08, 0x16, 0x00, 0x82, 0x65, 0x6E, 0x63, 0x65, 0x00, 0x04,
+ 0x16, 0x08, 0x10, 0x04, 0x11, 0x00, 0x83, 0x70, 0x61, 0x63, 0x65, 0x00,
+ 0x0C, 0x15, 0x08, 0x19, 0x00, 0x52, 0x2C, 0x04, 0x19, 0x32, 0x04, 0x00,
+ 0x82, 0x72, 0x69, 0x64, 0x65, 0x00, 0x12, 0x00, 0x85, 0x65, 0x72, 0x72,
+ 0x69, 0x64, 0x65, 0x00, 0x17, 0x00, 0x44, 0x4B, 0x04, 0x0C, 0x56, 0x04,
+ 0x11, 0x60, 0x04, 0x17, 0x83, 0x04, 0x00, 0x15, 0x04, 0x18, 0x0A, 0x00,
+ 0x82, 0x6E, 0x74, 0x65, 0x65, 0x00, 0x10, 0x10, 0x12, 0x06, 0x00, 0x81,
+ 0x74, 0x65, 0x65, 0x00, 0x04, 0x15, 0x00, 0x44, 0x6A, 0x04, 0x18, 0x76,
+ 0x04, 0x00, 0x0A, 0x00, 0x86, 0x75, 0x61, 0x72, 0x61, 0x6E, 0x74, 0x65,
+ 0x65, 0x00, 0x04, 0x0A, 0x00, 0x87, 0x75, 0x61, 0x72, 0x61, 0x6E, 0x74,
+ 0x65, 0x65, 0x00, 0x0C, 0x10, 0x12, 0x06, 0x00, 0x84, 0x6D, 0x69, 0x74,
+ 0x74, 0x65, 0x65, 0x00, 0x44, 0x9A, 0x04, 0x07, 0xDD, 0x04, 0x10, 0xFF,
+ 0x04, 0x00, 0x4A, 0xA7, 0x04, 0x11, 0xB2, 0x04, 0x16, 0xBB, 0x04, 0x18,
+ 0xC4, 0x04, 0x00, 0x15, 0x12, 0x10, 0x00, 0x83, 0x74, 0x67, 0x61, 0x67,
+ 0x65, 0x00, 0x0B, 0x06, 0x00, 0x83, 0x61, 0x6E, 0x67, 0x65, 0x00, 0x08,
+ 0x10, 0x00, 0x82, 0x73, 0x61, 0x67, 0x65, 0x00, 0x0A, 0x00, 0x6C, 0xCD,
+ 0x04, 0x04, 0xD3, 0x04, 0x00, 0x83, 0x61, 0x75, 0x67, 0x65, 0x00, 0x0F,
+ 0x00, 0x84, 0x6E, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, 0x08, 0x0F, 0x00,
+ 0x44, 0xEA, 0x04, 0x0C, 0xF0, 0x04, 0x0F, 0xF9, 0x04, 0x00, 0x83, 0x6C,
+ 0x65, 0x67, 0x65, 0x00, 0x19, 0x0C, 0x15, 0x13, 0x00, 0x82, 0x67, 0x65,
+ 0x00, 0x04, 0x00, 0x82, 0x67, 0x65, 0x00, 0x04, 0x0C, 0x00, 0x83, 0x6D,
+ 0x61, 0x67, 0x65, 0x00, 0x17, 0x00, 0x47, 0x1A, 0x05, 0x10, 0x24, 0x05,
+ 0x12, 0x2E, 0x05, 0x16, 0x37, 0x05, 0x17, 0x40, 0x05, 0x00, 0x11, 0x04,
+ 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x12, 0x15, 0x09, 0x00,
+ 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x20, 0x74,
+ 0x68, 0x65, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00,
+ 0x44, 0x47, 0x05, 0x18, 0x4F, 0x05, 0x00, 0x2C, 0x00, 0x82, 0x20, 0x74,
+ 0x68, 0x65, 0x00, 0x12, 0x05, 0x04, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65,
+ 0x00, 0x1D, 0x16, 0x2C, 0x00, 0x82, 0x69, 0x7A, 0x65, 0x00, 0x45, 0x75,
+ 0x05, 0x0C, 0xE6, 0x05, 0x13, 0xF1, 0x05, 0x16, 0x0D, 0x06, 0x17, 0x15,
+ 0x06, 0x19, 0x1D, 0x06, 0x00, 0x44, 0x7F, 0x05, 0x0C, 0xCF, 0x05, 0x0F,
+ 0xDB, 0x05, 0x00, 0x4A, 0x89, 0x05, 0x0C, 0x93, 0x05, 0x0F, 0xB1, 0x05,
+ 0x00, 0x0C, 0x0F, 0x08, 0x00, 0x83, 0x69, 0x62, 0x6C, 0x65, 0x00, 0x0F,
+ 0x00, 0x44, 0x9C, 0x05, 0x0C, 0xA7, 0x05, 0x00, 0x19, 0x04, 0x00, 0x85,
+ 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x04, 0x19, 0x04, 0x00, 0x84,
+ 0x61, 0x62, 0x6C, 0x65, 0x00, 0x44, 0xB8, 0x05, 0x0C, 0xC3, 0x05, 0x00,
+ 0x19, 0x04, 0x00, 0x84, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x19,
+ 0x04, 0x00, 0x85, 0x61, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x04,
+ 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x83, 0x62, 0x6C, 0x65, 0x00, 0x0C,
+ 0x04, 0x19, 0x04, 0x00, 0x82, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x1A, 0x0B,
+ 0x2C, 0x00, 0x84, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x00, 0x48, 0xF8, 0x05,
+ 0x12, 0x02, 0x06, 0x00, 0x12, 0x13, 0x00, 0x84, 0x65, 0x6F, 0x70, 0x6C,
+ 0x65, 0x00, 0x08, 0x12, 0x13, 0x00, 0x85, 0x65, 0x6F, 0x70, 0x6C, 0x65,
+ 0x00, 0x04, 0x09, 0x00, 0x82, 0x6C, 0x73, 0x65, 0x00, 0x0C, 0x0F, 0x00,
+ 0x81, 0x74, 0x6C, 0x65, 0x00, 0x08, 0x0F, 0x00, 0x81, 0x65, 0x6C, 0x00,
+ 0x0C, 0x08, 0x0A, 0x1C, 0x0B, 0x00, 0x83, 0x69, 0x65, 0x6E, 0x65, 0x00,
+ 0x46, 0x40, 0x06, 0x0C, 0x4A, 0x06, 0x12, 0x56, 0x06, 0x15, 0x7D, 0x06,
+ 0x18, 0x84, 0x06, 0x00, 0x12, 0x16, 0x2C, 0x00, 0x83, 0x63, 0x6F, 0x72,
+ 0x65, 0x00, 0x18, 0x14, 0x04, 0x00, 0x84, 0x63, 0x71, 0x75, 0x69, 0x72,
+ 0x65, 0x00, 0x47, 0x60, 0x06, 0x08, 0x69, 0x06, 0x09, 0x71, 0x06, 0x00,
+ 0x08, 0x05, 0x00, 0x83, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x05, 0x00, 0x82,
+ 0x66, 0x6F, 0x72, 0x65, 0x00, 0x15, 0x08, 0x0B, 0x17, 0x00, 0x83, 0x65,
+ 0x66, 0x6F, 0x72, 0x65, 0x00, 0x08, 0x0B, 0x1A, 0x00, 0x81, 0x65, 0x00,
+ 0x17, 0x00, 0x6C, 0x8D, 0x06, 0x04, 0x92, 0x06, 0x00, 0x82, 0x72, 0x75,
+ 0x65, 0x00, 0x10, 0x04, 0x00, 0x82, 0x65, 0x75, 0x72, 0x00, 0x44, 0xAD,
+ 0x06, 0x08, 0xD1, 0x06, 0x0C, 0xD9, 0x06, 0x0F, 0xE8, 0x06, 0x11, 0xF1,
+ 0x06, 0x18, 0x0F, 0x07, 0x00, 0x46, 0xB7, 0x06, 0x08, 0xBF, 0x06, 0x0F,
+ 0xC9, 0x06, 0x00, 0x08, 0x05, 0x00, 0x81, 0x75, 0x73, 0x65, 0x00, 0x05,
+ 0x2C, 0x00, 0x82, 0x63, 0x61, 0x75, 0x73, 0x65, 0x00, 0x09, 0x00, 0x83,
+ 0x61, 0x6C, 0x73, 0x65, 0x00, 0x08, 0x0B, 0x17, 0x00, 0x82, 0x73, 0x65,
+ 0x00, 0x06, 0x15, 0x08, 0x06, 0x1B, 0x08, 0x00, 0x86, 0x65, 0x72, 0x63,
+ 0x69, 0x73, 0x65, 0x00, 0x0C, 0x04, 0x09, 0x00, 0x83, 0x6C, 0x73, 0x65,
+ 0x00, 0x48, 0xF8, 0x06, 0x12, 0x03, 0x07, 0x00, 0x16, 0x0C, 0x0F, 0x00,
+ 0x84, 0x63, 0x65, 0x6E, 0x73, 0x65, 0x00, 0x13, 0x08, 0x15, 0x00, 0x84,
+ 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x00, 0x06, 0x04, 0x08, 0x05, 0x00,
+ 0x84, 0x63, 0x61, 0x75, 0x73, 0x65, 0x00, 0x44, 0x28, 0x07, 0x08, 0xD6,
+ 0x07, 0x0F, 0xE1, 0x07, 0x19, 0xED, 0x07, 0x00, 0x47, 0x38, 0x07, 0x0A,
+ 0x5D, 0x07, 0x0F, 0x6A, 0x07, 0x13, 0xAD, 0x07, 0x15, 0xB7, 0x07, 0x00,
+ 0x12, 0x10, 0x00, 0x50, 0x42, 0x07, 0x12, 0x51, 0x07, 0x00, 0x12, 0x06,
+ 0x04, 0x00, 0x87, 0x63, 0x6F, 0x6D, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65,
+ 0x00, 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65,
+ 0x00, 0x12, 0x13, 0x12, 0x15, 0x13, 0x00, 0x84, 0x61, 0x67, 0x61, 0x74,
+ 0x65, 0x00, 0x46, 0x74, 0x07, 0x13, 0x81, 0x07, 0x18, 0x8E, 0x07, 0x00,
+ 0x18, 0x0F, 0x04, 0x06, 0x00, 0x85, 0x63, 0x75, 0x6C, 0x61, 0x74, 0x65,
+ 0x00, 0x10, 0x04, 0x08, 0x17, 0x00, 0x86, 0x6D, 0x70, 0x6C, 0x61, 0x74,
+ 0x65, 0x00, 0x46, 0x95, 0x07, 0x0F, 0xA2, 0x07, 0x00, 0x18, 0x0F, 0x04,
+ 0x06, 0x00, 0x86, 0x63, 0x75, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x04, 0x06,
+ 0x00, 0x84, 0x63, 0x75, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x07, 0x18, 0x00,
+ 0x84, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00, 0x48, 0xBE, 0x07, 0x18, 0xCB,
+ 0x07, 0x00, 0x11, 0x04, 0x0A, 0x00, 0x86, 0x65, 0x6E, 0x65, 0x72, 0x61,
+ 0x74, 0x65, 0x00, 0x06, 0x04, 0x00, 0x84, 0x63, 0x75, 0x72, 0x61, 0x74,
+ 0x65, 0x00, 0x0F, 0x0F, 0x04, 0x13, 0x00, 0x83, 0x65, 0x74, 0x74, 0x65,
+ 0x00, 0x04, 0x13, 0x10, 0x08, 0x17, 0x00, 0x83, 0x6C, 0x61, 0x74, 0x65,
+ 0x00, 0x0C, 0x15, 0x13, 0x00, 0x81, 0x61, 0x74, 0x65, 0x00, 0x4A, 0x00,
+ 0x08, 0x0C, 0x0C, 0x08, 0x16, 0x16, 0x08, 0x00, 0x08, 0x0F, 0x0F, 0x12,
+ 0x06, 0x00, 0x82, 0x61, 0x67, 0x75, 0x65, 0x00, 0x14, 0x11, 0x18, 0x00,
+ 0x83, 0x69, 0x71, 0x75, 0x65, 0x00, 0x44, 0x1D, 0x08, 0x15, 0x25, 0x08,
+ 0x00, 0x06, 0x2C, 0x00, 0x82, 0x75, 0x73, 0x65, 0x00, 0x08, 0x13, 0x00,
+ 0x84, 0x75, 0x72, 0x73, 0x75, 0x65, 0x00, 0x4C, 0x36, 0x08, 0x12, 0x5B,
+ 0x08, 0x00, 0x48, 0x40, 0x08, 0x0B, 0x4A, 0x08, 0x0F, 0x53, 0x08, 0x00,
+ 0x0F, 0x08, 0x05, 0x00, 0x83, 0x69, 0x65, 0x76, 0x65, 0x00, 0x06, 0x04,
+ 0x2C, 0x00, 0x81, 0x65, 0x76, 0x65, 0x00, 0x08, 0x05, 0x00, 0x81, 0x65,
+ 0x76, 0x65, 0x00, 0x52, 0x62, 0x08, 0x19, 0x69, 0x08, 0x00, 0x15, 0x13,
+ 0x00, 0x82, 0x76, 0x65, 0x00, 0x05, 0x04, 0x00, 0x83, 0x6F, 0x76, 0x65,
+ 0x00, 0x4C, 0x78, 0x08, 0x11, 0x9A, 0x08, 0x00, 0x08, 0x00, 0x4B, 0x84,
+ 0x08, 0x0F, 0x8B, 0x08, 0x15, 0x93, 0x08, 0x00, 0x06, 0x00, 0x82, 0x69,
+ 0x65, 0x66, 0x00, 0x08, 0x05, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x05,
+ 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x18, 0x12, 0x09, 0x2C, 0x00, 0x80,
+ 0x64, 0x00, 0x4C, 0xA9, 0x08, 0x11, 0xB3, 0x08, 0x00, 0x11, 0x12, 0x0A,
+ 0x2C, 0x00, 0x82, 0x69, 0x6E, 0x67, 0x00, 0x48, 0xBD, 0x08, 0x0C, 0xC6,
+ 0x08, 0x15, 0x1C, 0x09, 0x00, 0x0C, 0x05, 0x00, 0x83, 0x65, 0x69, 0x6E,
+ 0x67, 0x00, 0x48, 0xD9, 0x08, 0x0B, 0xE3, 0x08, 0x0F, 0xF0, 0x08, 0x15,
+ 0xFC, 0x08, 0x17, 0x07, 0x09, 0x1C, 0x11, 0x09, 0x00, 0x0B, 0x06, 0x04,
+ 0x06, 0x00, 0x83, 0x69, 0x6E, 0x67, 0x00, 0x17, 0x06, 0x04, 0x10, 0x00,
+ 0x85, 0x74, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x00, 0x08, 0x0C, 0x06, 0x00,
+ 0x85, 0x65, 0x69, 0x6C, 0x69, 0x6E, 0x67, 0x00, 0x18, 0x06, 0x08, 0x15,
+ 0x00, 0x82, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x0B, 0x2C, 0x00, 0x84, 0x74,
+ 0x68, 0x69, 0x6E, 0x67, 0x00, 0x17, 0x1C, 0x11, 0x04, 0x00, 0x83, 0x68,
+ 0x69, 0x6E, 0x67, 0x00, 0x0C, 0x17, 0x16, 0x00, 0x83, 0x72, 0x69, 0x6E,
+ 0x67, 0x00, 0x46, 0x36, 0x09, 0x08, 0x56, 0x09, 0x0A, 0x62, 0x09, 0x16,
+ 0x6C, 0x09, 0x17, 0x7E, 0x09, 0x00, 0x4C, 0x3D, 0x09, 0x15, 0x47, 0x09,
+ 0x00, 0x17, 0x1A, 0x16, 0x00, 0x83, 0x69, 0x74, 0x63, 0x68, 0x00, 0x04,
+ 0x08, 0x16, 0x04, 0x08, 0x15, 0x00, 0x86, 0x73, 0x65, 0x61, 0x72, 0x63,
+ 0x68, 0x00, 0x17, 0x07, 0x11, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68,
+ 0x65, 0x00, 0x11, 0x08, 0x15, 0x17, 0x16, 0x00, 0x80, 0x74, 0x68, 0x00,
+ 0x0C, 0x0F, 0x13, 0x10, 0x12, 0x06, 0x04, 0x00, 0x86, 0x63, 0x6F, 0x6D,
+ 0x70, 0x6C, 0x69, 0x73, 0x68, 0x00, 0x4A, 0x88, 0x09, 0x0C, 0xA0, 0x09,
+ 0x15, 0xAB, 0x09, 0x00, 0x48, 0x8F, 0x09, 0x0C, 0x99, 0x09, 0x00, 0x15,
+ 0x17, 0x16, 0x00, 0x82, 0x6E, 0x67, 0x74, 0x68, 0x00, 0x08, 0x0B, 0x00,
+ 0x81, 0x68, 0x74, 0x00, 0x1A, 0x07, 0x11, 0x04, 0x05, 0x00, 0x81, 0x64,
+ 0x74, 0x68, 0x00, 0x18, 0x17, 0x2C, 0x00, 0x83, 0x72, 0x75, 0x74, 0x68,
+ 0x00, 0x15, 0x08, 0x0B, 0x17, 0x2C, 0x00, 0x81, 0x69, 0x72, 0x00, 0x11,
+ 0x0C, 0x17, 0x0B, 0x00, 0x84, 0x74, 0x68, 0x69, 0x6E, 0x6B, 0x00, 0x44,
+ 0xE1, 0x09, 0x07, 0x35, 0x0A, 0x08, 0x59, 0x0A, 0x09, 0xAE, 0x0A, 0x0F,
+ 0xB7, 0x0A, 0x17, 0xD4, 0x0A, 0x18, 0xDD, 0x0A, 0x00, 0x4C, 0xEB, 0x09,
+ 0x17, 0xF6, 0x09, 0x18, 0x0F, 0x0A, 0x00, 0x06, 0x13, 0x1C, 0x17, 0x00,
+ 0x83, 0x69, 0x63, 0x61, 0x6C, 0x00, 0x4C, 0xFD, 0x09, 0x18, 0x05, 0x0A,
+ 0x00, 0x11, 0x0C, 0x00, 0x81, 0x69, 0x61, 0x6C, 0x00, 0x15, 0x0C, 0x19,
+ 0x00, 0x83, 0x74, 0x75, 0x61, 0x6C, 0x00, 0x51, 0x19, 0x0A, 0x15, 0x22,
+ 0x0A, 0x17, 0x2B, 0x0A, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x6E, 0x75, 0x61,
+ 0x6C, 0x00, 0x18, 0x17, 0x04, 0x11, 0x00, 0x82, 0x61, 0x6C, 0x00, 0x0C,
+ 0x19, 0x00, 0x83, 0x72, 0x74, 0x75, 0x61, 0x6C, 0x00, 0x48, 0x3C, 0x0A,
+ 0x18, 0x43, 0x0A, 0x00, 0x0C, 0x09, 0x00, 0x81, 0x6C, 0x64, 0x00, 0x52,
+ 0x4A, 0x0A, 0x1A, 0x50, 0x0A, 0x00, 0x06, 0x00, 0x81, 0x6C, 0x64, 0x00,
+ 0x12, 0x00, 0x84, 0x77, 0x6F, 0x75, 0x6C, 0x64, 0x00, 0x4A, 0x66, 0x0A,
+ 0x0F, 0x6E, 0x0A, 0x17, 0x9C, 0x0A, 0x18, 0xA4, 0x0A, 0x00, 0x11, 0x0C,
+ 0x16, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x44, 0x75, 0x0A, 0x0F, 0x8F, 0x0A,
+ 0x00, 0x15, 0x00, 0x44, 0x7E, 0x0A, 0x15, 0x85, 0x0A, 0x00, 0x13, 0x00,
+ 0x81, 0x6C, 0x65, 0x6C, 0x00, 0x04, 0x13, 0x00, 0x84, 0x61, 0x6C, 0x6C,
+ 0x65, 0x6C, 0x00, 0x04, 0x15, 0x15, 0x04, 0x13, 0x00, 0x85, 0x61, 0x6C,
+ 0x6C, 0x65, 0x6C, 0x00, 0x17, 0x0C, 0x0F, 0x00, 0x81, 0x6C, 0x65, 0x00,
+ 0x07, 0x08, 0x0B, 0x06, 0x16, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x08, 0x16,
+ 0x1C, 0x10, 0x00, 0x81, 0x6C, 0x66, 0x00, 0x0C, 0x09, 0x00, 0x4F, 0xC1,
+ 0x0A, 0x18, 0xCB, 0x0A, 0x00, 0x0F, 0x18, 0x09, 0x00, 0x84, 0x66, 0x69,
+ 0x6C, 0x6C, 0x00, 0x09, 0x00, 0x83, 0x6C, 0x66, 0x69, 0x6C, 0x6C, 0x00,
+ 0x18, 0x16, 0x08, 0x15, 0x00, 0x81, 0x6C, 0x74, 0x00, 0x09, 0x17, 0x04,
+ 0x08, 0x15, 0x0A, 0x00, 0x85, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6C, 0x00,
+ 0x4F, 0xF3, 0x0A, 0x15, 0xFE, 0x0A, 0x00, 0x08, 0x05, 0x12, 0x15, 0x13,
+ 0x00, 0x82, 0x6C, 0x65, 0x6D, 0x00, 0x12, 0x09, 0x12, 0x06, 0x00, 0x83,
+ 0x6E, 0x66, 0x6F, 0x72, 0x6D, 0x00, 0x44, 0x2C, 0x0B, 0x07, 0x54, 0x0B,
+ 0x08, 0x5D, 0x0B, 0x0A, 0xCC, 0x0B, 0x0C, 0x1F, 0x0C, 0x12, 0x39, 0x0C,
+ 0x13, 0xD5, 0x0C, 0x15, 0xE1, 0x0C, 0x16, 0xEC, 0x0C, 0x18, 0xF6, 0x0C,
+ 0x1A, 0x0D, 0x0D, 0x00, 0x0C, 0x00, 0x4A, 0x35, 0x0B, 0x17, 0x3D, 0x0B,
+ 0x00, 0x04, 0x2C, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x51, 0x44, 0x0B,
+ 0x15, 0x4C, 0x0B, 0x00, 0x12, 0x06, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00,
+ 0x08, 0x06, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x18, 0x12, 0x09, 0x2C,
+ 0x00, 0x81, 0x6E, 0x64, 0x00, 0x47, 0x70, 0x0B, 0x08, 0x7A, 0x0B, 0x13,
+ 0xA4, 0x0B, 0x15, 0xAD, 0x0B, 0x16, 0xBA, 0x0B, 0x1A, 0xC4, 0x0B, 0x00,
+ 0x0F, 0x0C, 0x0B, 0x06, 0x00, 0x81, 0x72, 0x65, 0x6E, 0x00, 0x57, 0x81,
+ 0x0B, 0x1A, 0x9A, 0x0B, 0x00, 0x48, 0x88, 0x0B, 0x1A, 0x90, 0x0B, 0x00,
+ 0x05, 0x00, 0x82, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x08, 0x05, 0x00, 0x84,
+ 0x74, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x08, 0x05, 0x00, 0x83, 0x74, 0x77,
+ 0x65, 0x65, 0x6E, 0x00, 0x04, 0x0B, 0x2C, 0x00, 0x81, 0x70, 0x65, 0x6E,
+ 0x00, 0x07, 0x0F, 0x0B, 0x06, 0x00, 0x84, 0x69, 0x6C, 0x64, 0x72, 0x65,
+ 0x6E, 0x00, 0x12, 0x12, 0x0B, 0x06, 0x00, 0x83, 0x73, 0x65, 0x6E, 0x00,
+ 0x17, 0x08, 0x05, 0x00, 0x80, 0x65, 0x6E, 0x00, 0x48, 0xD3, 0x0B, 0x0C,
+ 0xDE, 0x0B, 0x00, 0x0C, 0x15, 0x12, 0x09, 0x00, 0x83, 0x65, 0x69, 0x67,
+ 0x6E, 0x00, 0x4B, 0xF1, 0x0B, 0x0F, 0xF7, 0x0B, 0x11, 0xFF, 0x0B, 0x12,
+ 0x08, 0x0C, 0x15, 0x0F, 0x0C, 0x16, 0x16, 0x0C, 0x00, 0x17, 0x00, 0x81,
+ 0x6E, 0x67, 0x00, 0x0F, 0x04, 0x00, 0x83, 0x69, 0x67, 0x6E, 0x00, 0x15,
+ 0x04, 0x08, 0x0F, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0A, 0x2C, 0x00, 0x81,
+ 0x6E, 0x67, 0x00, 0x17, 0x16, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x04, 0x2C,
+ 0x00, 0x82, 0x73, 0x69, 0x67, 0x6E, 0x00, 0x4A, 0x26, 0x0C, 0x17, 0x2E,
+ 0x0C, 0x00, 0x04, 0x2C, 0x00, 0x81, 0x61, 0x69, 0x6E, 0x00, 0x04, 0x15,
+ 0x08, 0x06, 0x00, 0x83, 0x74, 0x61, 0x69, 0x6E, 0x00, 0x4C, 0x43, 0x0C,
+ 0x16, 0xBF, 0x0C, 0x17, 0xC9, 0x0C, 0x00, 0x46, 0x4D, 0x0C, 0x16, 0x5A,
+ 0x0C, 0x17, 0x74, 0x0C, 0x00, 0x0C, 0x16, 0x08, 0x07, 0x00, 0x85, 0x63,
+ 0x69, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x44, 0x61, 0x0C, 0x16, 0x6A, 0x0C,
+ 0x00, 0x0C, 0x0F, 0x00, 0x83, 0x69, 0x73, 0x6F, 0x6E, 0x00, 0x04, 0x06,
+ 0x06, 0x12, 0x00, 0x83, 0x69, 0x6F, 0x6E, 0x00, 0x47, 0x84, 0x0C, 0x0C,
+ 0x8E, 0x0C, 0x0F, 0x9D, 0x0C, 0x11, 0xA9, 0x0C, 0x16, 0xB5, 0x0C, 0x00,
+ 0x07, 0x04, 0x00, 0x83, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x17, 0x0C,
+ 0x13, 0x08, 0x15, 0x00, 0x86, 0x65, 0x74, 0x69, 0x74, 0x69, 0x6F, 0x6E,
+ 0x00, 0x04, 0x08, 0x15, 0x00, 0x85, 0x6C, 0x61, 0x74, 0x69, 0x6F, 0x6E,
+ 0x00, 0x06, 0x18, 0x09, 0x00, 0x85, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E,
+ 0x00, 0x12, 0x13, 0x00, 0x83, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x0C,
+ 0x19, 0x0C, 0x07, 0x00, 0x81, 0x69, 0x6F, 0x6E, 0x00, 0x0C, 0x06, 0x04,
+ 0x15, 0x09, 0x00, 0x83, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x13, 0x0B, 0x04,
+ 0x00, 0x84, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6E, 0x00, 0x17, 0x18, 0x08,
+ 0x15, 0x00, 0x83, 0x74, 0x75, 0x72, 0x6E, 0x00, 0x0A, 0x0C, 0x0B, 0x17,
+ 0x00, 0x82, 0x6E, 0x67, 0x73, 0x00, 0x55, 0xFD, 0x0C, 0x17, 0x06, 0x0D,
+ 0x00, 0x17, 0x08, 0x15, 0x00, 0x82, 0x75, 0x72, 0x6E, 0x00, 0x08, 0x15,
+ 0x00, 0x80, 0x72, 0x6E, 0x00, 0x12, 0x0E, 0x11, 0x18, 0x00, 0x82, 0x6E,
+ 0x6F, 0x77, 0x6E, 0x00, 0x47, 0x22, 0x0D, 0x11, 0x2D, 0x0D, 0x1A, 0x36,
+ 0x0D, 0x00, 0x08, 0x18, 0x16, 0x13, 0x00, 0x83, 0x65, 0x75, 0x64, 0x6F,
+ 0x00, 0x1A, 0x0E, 0x2C, 0x00, 0x82, 0x6E, 0x6F, 0x77, 0x00, 0x4F, 0x3D,
+ 0x0D, 0x11, 0x45, 0x0D, 0x00, 0x0F, 0x12, 0x09, 0x00, 0x81, 0x6F, 0x77,
+ 0x00, 0x0E, 0x2C, 0x00, 0x81, 0x6F, 0x77, 0x00, 0x56, 0x53, 0x0D, 0x18,
+ 0x5D, 0x0D, 0x00, 0x04, 0x0B, 0x15, 0x08, 0x13, 0x00, 0x81, 0x70, 0x73,
+ 0x00, 0x12, 0x12, 0x0F, 0x00, 0x81, 0x6B, 0x75, 0x70, 0x00, 0x44, 0x82,
+ 0x0D, 0x08, 0xC3, 0x0D, 0x0B, 0xBC, 0x0E, 0x0F, 0xC5, 0x0E, 0x12, 0xD3,
+ 0x0E, 0x16, 0xE4, 0x0E, 0x17, 0xED, 0x0E, 0x18, 0xF9, 0x0E, 0x1C, 0x02,
+ 0x0F, 0x00, 0x4C, 0x8C, 0x0D, 0x0F, 0x96, 0x0D, 0x18, 0xB8, 0x0D, 0x00,
+ 0x0F, 0x0C, 0x10, 0x0C, 0x16, 0x00, 0x82, 0x61, 0x72, 0x00, 0x4C, 0x9D,
+ 0x0D, 0x18, 0xA8, 0x0D, 0x00, 0x10, 0x10, 0x0C, 0x16, 0x00, 0x84, 0x69,
+ 0x6C, 0x61, 0x72, 0x00, 0x06, 0x0C, 0x17, 0x04, 0x13, 0x00, 0x86, 0x72,
+ 0x74, 0x69, 0x63, 0x75, 0x6C, 0x61, 0x72, 0x00, 0x0F, 0x0A, 0x08, 0x15,
+ 0x00, 0x83, 0x75, 0x6C, 0x61, 0x72, 0x00, 0x44, 0xE2, 0x0D, 0x07, 0xEA,
+ 0x0D, 0x0B, 0xF7, 0x0D, 0x0C, 0x34, 0x0E, 0x0F, 0x4E, 0x0E, 0x10, 0x58,
+ 0x0E, 0x11, 0x62, 0x0E, 0x12, 0x8E, 0x0E, 0x17, 0x96, 0x0E, 0x19, 0xA1,
+ 0x0E, 0x00, 0x0F, 0x06, 0x00, 0x82, 0x65, 0x61, 0x72, 0x00, 0x11, 0x04,
+ 0x0F, 0x04, 0x06, 0x00, 0x84, 0x65, 0x6E, 0x64, 0x61, 0x72, 0x00, 0x4A,
+ 0xFE, 0x0D, 0x17, 0x09, 0x0E, 0x00, 0x0C, 0x08, 0x0B, 0x00, 0x85, 0x69,
+ 0x67, 0x68, 0x65, 0x72, 0x00, 0x48, 0x13, 0x0E, 0x12, 0x1F, 0x0E, 0x18,
+ 0x2B, 0x0E, 0x00, 0x0B, 0x0A, 0x12, 0x17, 0x00, 0x85, 0x65, 0x74, 0x68,
+ 0x65, 0x72, 0x00, 0x04, 0x11, 0x00, 0x86, 0x61, 0x6E, 0x6F, 0x74, 0x68,
+ 0x65, 0x72, 0x00, 0x09, 0x00, 0x83, 0x72, 0x74, 0x68, 0x65, 0x72, 0x00,
+ 0x4B, 0x3B, 0x0E, 0x0F, 0x43, 0x0E, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x65,
+ 0x69, 0x72, 0x00, 0x13, 0x10, 0x12, 0x06, 0x00, 0x83, 0x69, 0x6C, 0x65,
+ 0x72, 0x00, 0x17, 0x0C, 0x09, 0x00, 0x83, 0x6C, 0x74, 0x65, 0x72, 0x00,
+ 0x10, 0x04, 0x15, 0x0A, 0x2C, 0x00, 0x81, 0x61, 0x72, 0x00, 0x4C, 0x69,
+ 0x0E, 0x17, 0x75, 0x0E, 0x00, 0x0A, 0x0A, 0x08, 0x05, 0x00, 0x84, 0x69,
+ 0x6E, 0x6E, 0x65, 0x72, 0x00, 0x4C, 0x7C, 0x0E, 0x16, 0x85, 0x0E, 0x00,
+ 0x12, 0x13, 0x00, 0x83, 0x6E, 0x74, 0x65, 0x72, 0x00, 0x0C, 0x0F, 0x00,
+ 0x82, 0x65, 0x6E, 0x65, 0x72, 0x00, 0x09, 0x08, 0x05, 0x00, 0x81, 0x72,
+ 0x65, 0x00, 0x0B, 0x12, 0x11, 0x04, 0x00, 0x83, 0x74, 0x68, 0x65, 0x72,
+ 0x00, 0x48, 0xA8, 0x0E, 0x1A, 0xB3, 0x0E, 0x00, 0x08, 0x15, 0x08, 0x0B,
+ 0x1A, 0x00, 0x83, 0x76, 0x65, 0x72, 0x00, 0x12, 0x0B, 0x00, 0x82, 0x65,
+ 0x76, 0x65, 0x72, 0x00, 0x08, 0x17, 0x12, 0x00, 0x82, 0x68, 0x65, 0x72,
+ 0x00, 0x04, 0x18, 0x06, 0x0C, 0x17, 0x15, 0x04, 0x13, 0x00, 0x82, 0x6C,
+ 0x61, 0x72, 0x00, 0x17, 0x04, 0x15, 0x08, 0x17, 0x11, 0x0C, 0x00, 0x87,
+ 0x74, 0x65, 0x72, 0x61, 0x74, 0x6F, 0x72, 0x00, 0x04, 0x08, 0x1C, 0x2C,
+ 0x00, 0x81, 0x72, 0x73, 0x00, 0x12, 0x04, 0x15, 0x08, 0x13, 0x12, 0x00,
+ 0x82, 0x74, 0x6F, 0x72, 0x00, 0x06, 0x12, 0x2C, 0x00, 0x81, 0x63, 0x75,
+ 0x72, 0x00, 0x08, 0x19, 0x08, 0x2C, 0x00, 0x81, 0x72, 0x79, 0x00, 0x44,
+ 0x21, 0x0F, 0x08, 0x55, 0x0F, 0x0A, 0xE5, 0x0F, 0x15, 0xF0, 0x0F, 0x16,
+ 0xFB, 0x0F, 0x17, 0x93, 0x10, 0x18, 0x9B, 0x10, 0x00, 0x4B, 0x2E, 0x0F,
+ 0x13, 0x39, 0x0F, 0x15, 0x43, 0x0F, 0x1C, 0x4C, 0x0F, 0x00, 0x13, 0x15,
+ 0x08, 0x13, 0x00, 0x83, 0x68, 0x61, 0x70, 0x73, 0x00, 0x0B, 0x15, 0x08,
+ 0x13, 0x00, 0x82, 0x61, 0x70, 0x73, 0x00, 0x08, 0x1C, 0x2C, 0x00, 0x82,
+ 0x61, 0x72, 0x73, 0x00, 0x1A, 0x0F, 0x04, 0x00, 0x82, 0x61, 0x79, 0x73,
+ 0x00, 0x44, 0x65, 0x0F, 0x06, 0x7C, 0x0F, 0x0C, 0x87, 0x0F, 0x0F, 0xD3,
+ 0x0F, 0x16, 0xDA, 0x0F, 0x00, 0x47, 0x6C, 0x0F, 0x0E, 0x74, 0x0F, 0x00,
+ 0x0C, 0x2C, 0x00, 0x82, 0x65, 0x61, 0x73, 0x00, 0x17, 0x00, 0x83, 0x61,
+ 0x6B, 0x65, 0x73, 0x00, 0x08, 0x07, 0x11, 0x0C, 0x00, 0x83, 0x69, 0x63,
+ 0x65, 0x73, 0x00, 0x46, 0x91, 0x0F, 0x15, 0xB8, 0x0F, 0x17, 0xC7, 0x0F,
+ 0x00, 0x48, 0x98, 0x0F, 0x0C, 0xA2, 0x0F, 0x00, 0x07, 0x11, 0x0C, 0x00,
+ 0x84, 0x69, 0x63, 0x65, 0x73, 0x00, 0x47, 0xA9, 0x0F, 0x17, 0xB0, 0x0F,
+ 0x00, 0x11, 0x0C, 0x00, 0x82, 0x65, 0x73, 0x00, 0x15, 0x08, 0x19, 0x00,
+ 0x82, 0x65, 0x73, 0x00, 0x12, 0x16, 0x08, 0x06, 0x06, 0x04, 0x00, 0x84,
+ 0x73, 0x6F, 0x72, 0x69, 0x65, 0x73, 0x00, 0x0F, 0x0C, 0x05, 0x04, 0x00,
+ 0x83, 0x69, 0x74, 0x69, 0x65, 0x73, 0x00, 0x04, 0x09, 0x00, 0x81, 0x73,
+ 0x65, 0x00, 0x12, 0x0B, 0x06, 0x2C, 0x00, 0x82, 0x6F, 0x73, 0x65, 0x73,
+ 0x00, 0x0C, 0x11, 0x0B, 0x17, 0x00, 0x83, 0x69, 0x6E, 0x67, 0x73, 0x00,
+ 0x08, 0x04, 0x1C, 0x2C, 0x00, 0x83, 0x65, 0x61, 0x72, 0x73, 0x00, 0x44,
+ 0x05, 0x10, 0x08, 0x11, 0x10, 0x12, 0x88, 0x10, 0x00, 0x15, 0x04, 0x05,
+ 0x10, 0x08, 0x00, 0x82, 0x72, 0x61, 0x73, 0x73, 0x00, 0x46, 0x1E, 0x10,
+ 0x11, 0x36, 0x10, 0x15, 0x53, 0x10, 0x16, 0x70, 0x10, 0x00, 0x46, 0x25,
+ 0x10, 0x18, 0x2E, 0x10, 0x00, 0x12, 0x15, 0x13, 0x00, 0x83, 0x65, 0x73,
+ 0x73, 0x00, 0x16, 0x00, 0x82, 0x63, 0x65, 0x73, 0x73, 0x00, 0x4C, 0x3D,
+ 0x10, 0x16, 0x49, 0x10, 0x00, 0x16, 0x16, 0x18, 0x05, 0x00, 0x85, 0x69,
+ 0x6E, 0x65, 0x73, 0x73, 0x00, 0x18, 0x05, 0x00, 0x83, 0x69, 0x6E, 0x65,
+ 0x73, 0x73, 0x00, 0x13, 0x00, 0x55, 0x5C, 0x10, 0x18, 0x67, 0x10, 0x00,
+ 0x18, 0x16, 0x00, 0x85, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73, 0x00, 0x16,
+ 0x00, 0x83, 0x70, 0x72, 0x65, 0x73, 0x73, 0x00, 0x46, 0x77, 0x10, 0x12,
+ 0x80, 0x10, 0x00, 0x06, 0x18, 0x16, 0x00, 0x83, 0x65, 0x73, 0x73, 0x00,
+ 0x13, 0x00, 0x82, 0x73, 0x65, 0x73, 0x73, 0x00, 0x15, 0x06, 0x06, 0x04,
+ 0x00, 0x84, 0x72, 0x6F, 0x73, 0x73, 0x00, 0x15, 0x0C, 0x09, 0x00, 0x81,
+ 0x73, 0x74, 0x00, 0x52, 0xA2, 0x10, 0x16, 0xB0, 0x10, 0x00, 0x0F, 0x12,
+ 0x10, 0x12, 0x11, 0x04, 0x00, 0x84, 0x61, 0x6C, 0x6F, 0x75, 0x73, 0x00,
+ 0x11, 0x08, 0x06, 0x11, 0x12, 0x06, 0x00, 0x85, 0x73, 0x65, 0x6E, 0x73,
+ 0x75, 0x73, 0x00, 0x44, 0xE4, 0x10, 0x08, 0xF1, 0x10, 0x0A, 0x0E, 0x11,
+ 0x0B, 0x18, 0x11, 0x0C, 0x3C, 0x11, 0x0F, 0x47, 0x11, 0x10, 0x52, 0x11,
+ 0x11, 0x5E, 0x11, 0x12, 0xAC, 0x12, 0x13, 0xE6, 0x12, 0x16, 0x02, 0x13,
+ 0x18, 0xA2, 0x13, 0x00, 0x1A, 0x0B, 0x08, 0x10, 0x12, 0x16, 0x00, 0x83,
+ 0x77, 0x68, 0x61, 0x74, 0x00, 0x44, 0xF8, 0x10, 0x11, 0x01, 0x11, 0x00,
+ 0x15, 0x0A, 0x2C, 0x00, 0x82, 0x65, 0x61, 0x74, 0x00, 0x10, 0x11, 0x15,
+ 0x08, 0x19, 0x12, 0x0A, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x0B, 0x18,
+ 0x04, 0x06, 0x00, 0x82, 0x67, 0x68, 0x74, 0x00, 0x47, 0x22, 0x11, 0x0A,
+ 0x29, 0x11, 0x0C, 0x31, 0x11, 0x00, 0x0C, 0x1A, 0x00, 0x81, 0x74, 0x68,
+ 0x00, 0x11, 0x08, 0x0F, 0x00, 0x81, 0x74, 0x68, 0x00, 0x0A, 0x11, 0x12,
+ 0x17, 0x00, 0x83, 0x69, 0x67, 0x68, 0x74, 0x00, 0x17, 0x18, 0x12, 0x05,
+ 0x04, 0x00, 0x81, 0x20, 0x69, 0x74, 0x00, 0x16, 0x18, 0x08, 0x15, 0x00,
+ 0x83, 0x73, 0x75, 0x6C, 0x74, 0x00, 0x04, 0x17, 0x15, 0x12, 0x13, 0x10,
+ 0x0C, 0x00, 0x81, 0x6E, 0x74, 0x00, 0x44, 0x6B, 0x11, 0x08, 0xA3, 0x11,
+ 0x15, 0x99, 0x12, 0x16, 0xA4, 0x12, 0x00, 0x4C, 0x78, 0x11, 0x11, 0x83,
+ 0x11, 0x15, 0x8E, 0x11, 0x17, 0x98, 0x11, 0x00, 0x13, 0x0C, 0x06, 0x08,
+ 0x15, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x0C, 0x10, 0x12, 0x15, 0x13,
+ 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x13, 0x13, 0x04, 0x00, 0x82,
+ 0x65, 0x6E, 0x74, 0x00, 0x08, 0x13, 0x10, 0x12, 0x06, 0x00, 0x82, 0x65,
+ 0x6E, 0x74, 0x00, 0x4C, 0xB0, 0x11, 0x10, 0xD1, 0x11, 0x15, 0x35, 0x12,
+ 0x19, 0x8F, 0x12, 0x00, 0x46, 0xB7, 0x11, 0x13, 0xC4, 0x11, 0x00, 0x08,
+ 0x09, 0x09, 0x08, 0x00, 0x85, 0x69, 0x63, 0x69, 0x65, 0x6E, 0x74, 0x00,
+ 0x08, 0x06, 0x08, 0x15, 0x00, 0x85, 0x69, 0x70, 0x69, 0x65, 0x6E, 0x74,
+ 0x00, 0x48, 0xDE, 0x11, 0x11, 0xEA, 0x11, 0x15, 0x0B, 0x12, 0x17, 0x2A,
+ 0x12, 0x00, 0x19, 0x12, 0x0A, 0x00, 0x83, 0x72, 0x6E, 0x6D, 0x65, 0x6E,
+ 0x74, 0x00, 0x48, 0xF1, 0x11, 0x15, 0xFD, 0x11, 0x00, 0x19, 0x12, 0x0A,
+ 0x00, 0x84, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x12, 0x19, 0x12,
+ 0x0A, 0x00, 0x86, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x48,
+ 0x12, 0x12, 0x12, 0x1D, 0x12, 0x00, 0x19, 0x12, 0x0A, 0x00, 0x83, 0x6E,
+ 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x19, 0x12, 0x0A, 0x00, 0x85, 0x65, 0x72,
+ 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x17, 0x16, 0x00, 0x83, 0x65,
+ 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x44, 0x42, 0x12, 0x08, 0x4D, 0x12, 0x09,
+ 0x59, 0x12, 0x15, 0x64, 0x12, 0x00, 0x13, 0x04, 0x00, 0x84, 0x70, 0x61,
+ 0x72, 0x65, 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07, 0x00, 0x84, 0x66, 0x65,
+ 0x72, 0x65, 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07, 0x00, 0x83, 0x65, 0x72,
+ 0x65, 0x6E, 0x74, 0x00, 0x44, 0x6B, 0x12, 0x08, 0x83, 0x12, 0x00, 0x13,
+ 0x00, 0x44, 0x74, 0x12, 0x13, 0x7C, 0x12, 0x00, 0x85, 0x70, 0x61, 0x72,
+ 0x65, 0x6E, 0x74, 0x00, 0x04, 0x00, 0x83, 0x65, 0x6E, 0x74, 0x00, 0x09,
+ 0x0C, 0x07, 0x00, 0x85, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x08,
+ 0x0F, 0x08, 0x15, 0x00, 0x82, 0x61, 0x6E, 0x74, 0x00, 0x08, 0x09, 0x09,
+ 0x0C, 0x07, 0x00, 0x81, 0x65, 0x6E, 0x74, 0x00, 0x12, 0x06, 0x00, 0x82,
+ 0x6E, 0x73, 0x74, 0x00, 0x45, 0xBC, 0x12, 0x10, 0xC3, 0x12, 0x11, 0xCA,
+ 0x12, 0x15, 0xD4, 0x12, 0x16, 0xDD, 0x12, 0x00, 0x04, 0x2C, 0x00, 0x80,
+ 0x75, 0x74, 0x00, 0x0F, 0x04, 0x00, 0x80, 0x73, 0x74, 0x00, 0x07, 0x0C,
+ 0x07, 0x00, 0x82, 0x20, 0x6E, 0x6F, 0x74, 0x00, 0x13, 0x08, 0x15, 0x00,
+ 0x82, 0x6F, 0x72, 0x74, 0x00, 0x10, 0x0F, 0x04, 0x00, 0x82, 0x6F, 0x73,
+ 0x74, 0x00, 0x48, 0xED, 0x12, 0x1C, 0xF8, 0x12, 0x00, 0x0C, 0x06, 0x08,
+ 0x15, 0x00, 0x83, 0x65, 0x69, 0x70, 0x74, 0x00, 0x06, 0x11, 0x08, 0x00,
+ 0x82, 0x72, 0x79, 0x70, 0x74, 0x00, 0x48, 0x18, 0x13, 0x0A, 0x41, 0x13,
+ 0x0C, 0x4A, 0x13, 0x10, 0x67, 0x13, 0x11, 0x71, 0x13, 0x12, 0x8C, 0x13,
+ 0x18, 0x97, 0x13, 0x00, 0x4A, 0x1F, 0x13, 0x15, 0x36, 0x13, 0x00, 0x4C,
+ 0x26, 0x13, 0x18, 0x2E, 0x13, 0x00, 0x0B, 0x00, 0x82, 0x68, 0x65, 0x73,
+ 0x74, 0x00, 0x16, 0x00, 0x82, 0x67, 0x65, 0x73, 0x74, 0x00, 0x17, 0x11,
+ 0x0C, 0x00, 0x83, 0x65, 0x72, 0x65, 0x73, 0x74, 0x00, 0x15, 0x04, 0x0F,
+ 0x00, 0x81, 0x65, 0x73, 0x74, 0x00, 0x49, 0x51, 0x13, 0x11, 0x5D, 0x13,
+ 0x00, 0x08, 0x11, 0x04, 0x10, 0x00, 0x84, 0x69, 0x66, 0x65, 0x73, 0x74,
+ 0x00, 0x04, 0x0A, 0x04, 0x00, 0x83, 0x69, 0x6E, 0x73, 0x74, 0x00, 0x12,
+ 0x0F, 0x04, 0x00, 0x83, 0x6D, 0x6F, 0x73, 0x74, 0x00, 0x44, 0x78, 0x13,
+ 0x11, 0x83, 0x13, 0x00, 0x0C, 0x0A, 0x04, 0x00, 0x84, 0x61, 0x69, 0x6E,
+ 0x73, 0x74, 0x00, 0x0C, 0x04, 0x0A, 0x04, 0x00, 0x82, 0x73, 0x74, 0x00,
+ 0x0F, 0x10, 0x04, 0x00, 0x84, 0x6C, 0x6D, 0x6F, 0x73, 0x74, 0x00, 0x0D,
+ 0x04, 0x2C, 0x00, 0x83, 0x64, 0x6A, 0x75, 0x73, 0x74, 0x00, 0x46, 0xAC,
+ 0x13, 0x13, 0xC5, 0x13, 0x17, 0xDC, 0x13, 0x00, 0x48, 0xB3, 0x13, 0x15,
+ 0xBE, 0x13, 0x00, 0x06, 0x1B, 0x08, 0x00, 0x84, 0x65, 0x63, 0x75, 0x74,
+ 0x65, 0x00, 0x0C, 0x06, 0x00, 0x80, 0x69, 0x74, 0x00, 0x57, 0xCC, 0x13,
+ 0x18, 0xD4, 0x13, 0x00, 0x11, 0x0C, 0x00, 0x83, 0x70, 0x75, 0x74, 0x00,
+ 0x12, 0x00, 0x82, 0x74, 0x70, 0x75, 0x74, 0x00, 0x13, 0x18, 0x12, 0x00,
+ 0x83, 0x74, 0x70, 0x75, 0x74, 0x00, 0x48, 0xED, 0x13, 0x0C, 0x11, 0x14,
+ 0x00, 0x44, 0xF4, 0x13, 0x0C, 0xFB, 0x13, 0x00, 0x0B, 0x2C, 0x00, 0x81,
+ 0x76, 0x65, 0x00, 0x46, 0x02, 0x14, 0x08, 0x0A, 0x14, 0x00, 0x08, 0x15,
+ 0x00, 0x82, 0x65, 0x69, 0x76, 0x00, 0x06, 0x08, 0x15, 0x00, 0x81, 0x76,
+ 0x00, 0x08, 0x0B, 0x06, 0x04, 0x2C, 0x00, 0x82, 0x69, 0x65, 0x76, 0x65,
+ 0x00, 0x4C, 0x27, 0x14, 0x11, 0x31, 0x14, 0x12, 0x3A, 0x14, 0x00, 0x08,
+ 0x19, 0x08, 0x15, 0x00, 0x82, 0x69, 0x65, 0x77, 0x00, 0x12, 0x0E, 0x2C,
+ 0x00, 0x82, 0x6E, 0x6F, 0x77, 0x00, 0x0F, 0x12, 0x09, 0x00, 0x81, 0x6C,
+ 0x6F, 0x77, 0x00, 0x44, 0x5F, 0x14, 0x06, 0x6A, 0x14, 0x08, 0xA5, 0x14,
+ 0x0B, 0xAF, 0x14, 0x0F, 0xC1, 0x14, 0x11, 0x86, 0x15, 0x15, 0x90, 0x15,
+ 0x16, 0x06, 0x16, 0x17, 0x21, 0x16, 0x00, 0x11, 0x13, 0x10, 0x12, 0x06,
+ 0x00, 0x82, 0x61, 0x6E, 0x79, 0x00, 0x44, 0x77, 0x14, 0x08, 0x83, 0x14,
+ 0x0C, 0x8E, 0x14, 0x13, 0x99, 0x14, 0x00, 0x15, 0x06, 0x12, 0x13, 0x1C,
+ 0x0B, 0x00, 0x82, 0x69, 0x73, 0x79, 0x00, 0x18, 0x14, 0x08, 0x15, 0x09,
+ 0x00, 0x81, 0x6E, 0x63, 0x79, 0x00, 0x15, 0x06, 0x12, 0x13, 0x1C, 0x0B,
+ 0x00, 0x81, 0x73, 0x79, 0x00, 0x18, 0x15, 0x0E, 0x11, 0x04, 0x05, 0x00,
+ 0x81, 0x74, 0x63, 0x79, 0x00, 0x17, 0x09, 0x04, 0x16, 0x00, 0x82, 0x65,
+ 0x74, 0x79, 0x00, 0x06, 0x15, 0x04, 0x15, 0x0C, 0x08, 0x0B, 0x00, 0x87,
+ 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x00, 0x44, 0xD4, 0x14,
+ 0x0B, 0x17, 0x15, 0x0E, 0x21, 0x15, 0x0F, 0x29, 0x15, 0x12, 0x71, 0x15,
+ 0x15, 0x7B, 0x15, 0x00, 0x45, 0xE7, 0x14, 0x08, 0xF0, 0x14, 0x0F, 0xF6,
+ 0x14, 0x11, 0xFF, 0x14, 0x15, 0x06, 0x15, 0x18, 0x0F, 0x15, 0x00, 0x12,
+ 0x15, 0x13, 0x00, 0x81, 0x62, 0x6C, 0x79, 0x00, 0x15, 0x00, 0x80, 0x6C,
+ 0x79, 0x00, 0x08, 0x15, 0x00, 0x83, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x0C,
+ 0x09, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x08, 0x11, 0x08, 0x0A, 0x00, 0x80,
+ 0x6C, 0x79, 0x00, 0x17, 0x06, 0x04, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x0A,
+ 0x0C, 0x0F, 0x16, 0x00, 0x81, 0x74, 0x6C, 0x79, 0x00, 0x0C, 0x0F, 0x00,
+ 0x81, 0x65, 0x6C, 0x79, 0x00, 0x44, 0x33, 0x15, 0x05, 0x5E, 0x15, 0x08,
+ 0x67, 0x15, 0x00, 0x56, 0x3A, 0x15, 0x17, 0x52, 0x15, 0x00, 0x18, 0x00,
+ 0x6C, 0x43, 0x15, 0x16, 0x4A, 0x15, 0x00, 0x83, 0x75, 0x61, 0x6C, 0x6C,
+ 0x79, 0x00, 0x18, 0x00, 0x84, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x18, 0x06,
+ 0x04, 0x00, 0x85, 0x74, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x04, 0x05,
+ 0x12, 0x15, 0x13, 0x00, 0x81, 0x79, 0x00, 0x04, 0x15, 0x00, 0x84, 0x65,
+ 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x10, 0x12, 0x11, 0x04, 0x00, 0x82, 0x61,
+ 0x6C, 0x79, 0x00, 0x04, 0x10, 0x0C, 0x15, 0x13, 0x00, 0x81, 0x69, 0x6C,
+ 0x79, 0x00, 0x08, 0x12, 0x10, 0x2C, 0x00, 0x82, 0x6E, 0x65, 0x79, 0x00,
+ 0x44, 0xA0, 0x15, 0x08, 0xD9, 0x15, 0x12, 0xE2, 0x15, 0x17, 0xEF, 0x15,
+ 0x19, 0xFE, 0x15, 0x00, 0x45, 0xAA, 0x15, 0x10, 0xB3, 0x15, 0x16, 0xBC,
+ 0x15, 0x00, 0x0C, 0x0F, 0x00, 0x82, 0x72, 0x61, 0x72, 0x79, 0x00, 0x18,
+ 0x16, 0x00, 0x82, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x08, 0x06, 0x00, 0x46,
+ 0xC6, 0x15, 0x08, 0xD1, 0x15, 0x00, 0x08, 0x11, 0x00, 0x85, 0x65, 0x73,
+ 0x73, 0x61, 0x72, 0x79, 0x00, 0x11, 0x00, 0x82, 0x73, 0x61, 0x72, 0x79,
+ 0x00, 0x13, 0x12, 0x15, 0x13, 0x00, 0x80, 0x74, 0x79, 0x00, 0x0A, 0x04,
+ 0x17, 0x04, 0x06, 0x00, 0x84, 0x65, 0x67, 0x6F, 0x72, 0x79, 0x00, 0x11,
+ 0x18, 0x06, 0x12, 0x2C, 0x00, 0x86, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x72,
+ 0x79, 0x00, 0x08, 0x2C, 0x00, 0x81, 0x65, 0x72, 0x79, 0x00, 0x04, 0x00,
+ 0x55, 0x0F, 0x16, 0x1A, 0x1A, 0x16, 0x00, 0x06, 0x12, 0x13, 0x1C, 0x0B,
+ 0x00, 0x82, 0x69, 0x73, 0x79, 0x00, 0x0F, 0x04, 0x00, 0x81, 0x79, 0x73,
+ 0x00, 0x49, 0x2B, 0x16, 0x0F, 0x33, 0x16, 0x15, 0x3C, 0x16, 0x00, 0x04,
+ 0x16, 0x00, 0x81, 0x65, 0x74, 0x79, 0x00, 0x0C, 0x05, 0x04, 0x00, 0x81,
+ 0x69, 0x74, 0x79, 0x00, 0x13, 0x08, 0x12, 0x15, 0x13, 0x00, 0x84, 0x70,
+ 0x65, 0x72, 0x74, 0x79, 0x00,
+};
diff --git a/jack/autocorrect_dict.txt b/jack/autocorrect_dict.txt
index 135bb64..547ad56 100644
--- a/jack/autocorrect_dict.txt
+++ b/jack/autocorrect_dict.txt
@@ -1,4 +1,4 @@
-# Copyright 2024 [email protected]
+# Copyright 2025 [email protected]
# SPDX-License-Identifier: GPL-2.0-or-later
:theri -> their
@@ -120,9 +120,6 @@ aparrent -> apparent
apparant -> apparent
apparrent -> apparent
asthetic -> aesthetic
-auxilary -> auxiliary
-auxillary -> auxiliary
-auxilliary -> auxiliary
bankrupcy -> bankruptcy
busness -> business
bussiness -> business
@@ -177,8 +174,6 @@ relevent -> relevant
repitition -> repetition
safty -> safety
saftey -> safety
-seperat -> separat
-spectogram -> spectrogram
symetric -> symmetric
tolerence -> tolerance
cacheing -> caching
@@ -197,7 +192,6 @@ interator -> iterator
looup -> lookup
namesapce -> namespace
namespcae -> namespace
-nulltpr -> nullptr
operaotr -> operator
overide -> override
ovveride -> override
@@ -237,7 +231,6 @@ fromthe -> from the
:aslo: -> also
:casue -> cause
:choses -> chooses
-:gaurd -> guard
:haev -> have
:hapen -> happen
:idaes -> ideas
@@ -299,7 +292,6 @@ cheif -> chief
cieling -> ceiling
circut -> circuit
clasic -> classic
-cmoputer -> computer
coform -> conform
comming: -> coming
considerd -> considered
@@ -330,7 +322,6 @@ greatful -> grateful
heigher -> higher
higest -> highest
howver -> however
-hydogen -> hydrogen
importamt -> important
inclued -> include
insted -> instead
@@ -388,7 +379,6 @@ supress -> suppress
surpress -> suppress
thresold -> threshold
tongiht -> tonight
-tranpose -> transpose
typcial -> typical
udpate -> update
ususally -> usually
diff --git a/jack/color.c b/jack/color.c
index 4d833f3..9728d99 100644
--- a/jack/color.c
+++ b/jack/color.c
@@ -1,101 +1,110 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "color.h"
#include <lib/lib8tion/lib8tion.h>
-#define FORCE_REFERENCE(var) __asm__ volatile("" : : "r"(var))
-#define FASTLED_SCALE8_FIXED 1
+#define K255 255
+#define K171 171
+#define K170 170
+#define K85 85
+
+// Adapted from https://fastled.io/docs/hsv2rgb_8cpp_source.html
+// void hsv2rgb_rainbow() function
RGB rgb_matrix_hsv_to_rgb(const HSV hsv) {
- const uint8_t Y1 = 1, Y2 = 0, G_2 = 1, Gscale = 0, hue = hsv.h, sat = hsv.s;
- uint8_t val = hsv.v, offset = hue & 0x1F, offset8 = offset;
- {
-#ifdef __AVR__
- offset8 <<= 1;
- __asm__ volatile("");
- offset8 <<= 1;
- __asm__ volatile("");
- offset8 <<= 1;
-#else
- offset8 <<= 3;
-#endif
- }
- uint8_t third = scale8(offset8, (256 / 3)), r, g, b;
+ // Yellow has a higher inherent brightness than
+ // any other color; 'pure' yellow is perceived to
+ // be 93% as bright as white. In order to make
+ // yellow appear the correct relative brightness,
+ // it has to be rendered brighter than all other
+ // colors.
+ const uint8_t hue = hsv.h;
+ const uint8_t sat = hsv.s;
+ uint8_t val = hsv.v;
+
+ // offset8 = (hue [0..31]) * 8
+ uint8_t offset8 = hue & 0x1F;
+ offset8 <<= 3;
+
+ uint8_t third = scale8(offset8, (256 / 3)); // max = 85
+ uint8_t r, g, b;
if (!(hue & 0x80)) {
+ // 0XX
if (!(hue & 0x40)) {
+ // 00X
+ // section 0-1
if (!(hue & 0x20)) {
- r = 255 - third;
+ // 000
+ // case 0: // R -> O
+ r = K255 - third;
g = third;
b = 0;
- FORCE_REFERENCE(b);
} else {
- if (Y1) {
- r = 171;
- g = 85 + third;
- b = 0;
- FORCE_REFERENCE(b);
- }
- if (Y2) {
- r = 170 + third;
- uint8_t twothirds = scale8(offset8, ((256 * 2) / 3));
- g = 85 + twothirds;
- b = 0;
- FORCE_REFERENCE(b);
- }
+ // 001
+ // case 1: // O -> Y
+ r = K171;
+ g = K85 + third;
+ b = 0;
}
} else {
+ // 01X
+ // section 2-3
if (!(hue & 0x20)) {
- if (Y1) {
- uint8_t twothirds = scale8(offset8, ((256 * 2) / 3));
- r = 171 - twothirds;
- g = 170 + third;
- b = 0;
- FORCE_REFERENCE(b);
- }
- if (Y2) {
- r = 255 - offset8;
- g = 255;
- b = 0;
- FORCE_REFERENCE(b);
- }
+ // 010
+ // case 2: // Y -> G
+ // uint8_t twothirds = (third << 1);
+ uint8_t twothirds = scale8(offset8, ((256 * 2) / 3)); // max=170
+ r = K171 - twothirds;
+ g = K170 + third;
+ b = 0;
} else {
+ // 011
+ // case 3: // G -> A
r = 0;
- FORCE_REFERENCE(r);
- g = 255 - third;
+ g = K255 - third;
b = third;
}
}
} else {
+ // section 4-7
+ // 1XX
if (!(hue & 0x40)) {
+ // 10X
if (!(hue & 0x20)) {
+ // 100
+ // case 4: // A -> B
r = 0;
- FORCE_REFERENCE(r);
- uint8_t twothirds = scale8(offset8, ((256 * 2) / 3));
- g = 171 - twothirds;
- b = 85 + twothirds;
+ // uint8_t twothirds = (third << 1);
+ uint8_t twothirds = scale8(offset8, ((256 * 2) / 3)); // max=170
+ g = K171 - twothirds; // K170?
+ b = K85 + twothirds;
} else {
+ // 101
+ // case 5: // B -> P
r = third;
g = 0;
- FORCE_REFERENCE(g);
- b = 255 - third;
+ b = K255 - third;
}
} else {
if (!(hue & 0x20)) {
- r = 85 + third;
+ // 110
+ // case 6: // P -- K
+ r = K85 + third;
g = 0;
- FORCE_REFERENCE(g);
- b = 171 - third;
+ b = K171 - third;
} else {
- r = 170 + third;
+ // 111
+ // case 7: // K -> R
+ r = K170 + third;
g = 0;
- FORCE_REFERENCE(g);
- b = 85 - third;
+ b = K85 - third;
}
}
}
- if (G_2)
- g = g >> 1;
- if (Gscale)
- g = scale8_video_LEAVING_R1_DIRTY(g, Gscale);
+ // This is one of the good places to scale the green down,
+ // although the client can scale green down as well.
+ g >>= 1;
+ // Scale down colors if we're desaturated at all
+ // and add the brightness_floor to r, g, and b.
if (sat != 255) {
if (sat == 0) {
r = 255;
@@ -105,27 +114,26 @@ RGB rgb_matrix_hsv_to_rgb(const HSV hsv) {
uint8_t desat = 255 - sat;
desat = scale8_video(desat, desat);
uint8_t satscale = 255 - desat;
- r = scale8_LEAVING_R1_DIRTY(r, satscale);
- g = scale8_LEAVING_R1_DIRTY(g, satscale);
- b = scale8_LEAVING_R1_DIRTY(b, satscale);
- cleanup_R1();
+ r = scale8(r, satscale);
+ g = scale8(g, satscale);
+ b = scale8(b, satscale);
uint8_t brightness_floor = desat;
r += brightness_floor;
g += brightness_floor;
b += brightness_floor;
}
}
+ // Now scale everything down if we're at value < 255.
if (val != 255) {
- val = scale8_video_LEAVING_R1_DIRTY(val, val);
+ val = scale8_video(val, val);
if (val == 0) {
r = 0;
g = 0;
b = 0;
} else {
- r = scale8_LEAVING_R1_DIRTY(r, val);
- g = scale8_LEAVING_R1_DIRTY(g, val);
- b = scale8_LEAVING_R1_DIRTY(b, val);
- cleanup_R1();
+ r = scale8(r, val);
+ g = scale8(g, val);
+ b = scale8(b, val);
}
}
return (RGB){.r = r, .g = g, .b = b};
diff --git a/jack/combos.def b/jack/combos.def
index 53934f1..e3a44f4 100644
--- a/jack/combos.def
+++ b/jack/combos.def
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
// name output keys
diff --git a/jack/combos.h b/jack/combos.h
deleted file mode 100644
index 27e7a7c..0000000
--- a/jack/combos.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
-
-#define CMB(name, action, ...) name,
-enum combos {
-#include "combos.def"
-};
-#undef CMB
-
-#define CMB(name, action, ...) \
- uint16_t const name##_combo[] PROGMEM = {__VA_ARGS__, COMBO_END};
-#include "combos.def"
-#undef CMB
-
-#define CMB(name, action, ...) [name] = COMBO(name##_combo, action),
-combo_t key_combos[] = {
-#include "combos.def"
-};
-#undef CMB
diff --git a/jack/config.h b/jack/config.h
index 2b47028..72347f8 100644
--- a/jack/config.h
+++ b/jack/config.h
@@ -1,15 +1,17 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define TAPPING_TERM_PER_KEY
#define TAPPING_TERM 140
-#define FORCE_NKRO
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
#define COMBO_TERM 40
#define NO_ACTION_ONESHOT
#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
#define ENABLE_COMPILE_KEYCODE
+#define LAYER_STATE_8BIT
+#undef LOCKING_SUPPORT_ENABLE
+#undef LOCKING_RESYNC_ENABLE
#undef MANUFACTURER
#define MANUFACTURER "jacks"
@@ -33,19 +35,55 @@
#ifdef RGB_MATRIX_ENABLE
#define RGB_MATRIX_SLEEP
#define RGB_MATRIX_TIMEOUT 300000
-#undef RGB_MATRIX_DEFAULT_MODE
-#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_ALPHAS_MODS
-#define ENABLE_RGB_MATRIX_ALPHAS_MODS
-#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-#define ENABLE_RGB_MATRIX_RAINDROPS
-#define ENABLE_RGB_MATRIX_FRAMEBUFFER_EFFECTS
-#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-#define ENABLE_RGB_MATRIX_KEYPRESSES
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
#define RGB_MATRIX_KEYPRESSES
-#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define PALETTEFX_ENABLE_ALL_EFFECTS
+#define PALETTEFX_ENABLE_ALL_PALETTES
+#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_BREATHING
+#undef ENABLE_RGB_MATRIX_BAND_SAT
+#undef ENABLE_RGB_MATRIX_BAND_VAL
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#undef ENABLE_RGB_MATRIX_CYCLE_ALL
+#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#undef ENABLE_RGB_MATRIX_DUAL_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#undef ENABLE_RGB_MATRIX_FLOWER_BLOOMING
+#undef ENABLE_RGB_MATRIX_RAINDROPS
+#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#undef ENABLE_RGB_MATRIX_HUE_BREATHING
+#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
+#undef ENABLE_RGB_MATRIX_HUE_WAVE
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
+#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
+#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#undef ENABLE_RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_MULTISPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#undef ENABLE_RGB_MATRIX_STARLIGHT
+#undef ENABLE_RGB_MATRIX_STARLIGHT_DUAL_HUE
+#undef ENABLE_RGB_MATRIX_STARLIGHT_DUAL_SAT
+#undef ENABLE_RGB_MATRIX_RIVERFLOW
#endif
diff --git a/jack/dict.h b/jack/dict.h
deleted file mode 100644
index c7a27f4..0000000
--- a/jack/dict.h
+++ /dev/null
@@ -1,207 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
-
-#define NUM_WORDS 1000
-
-const char *dict[NUM_WORDS] = {
- "the", "of", "to", "and", "a",
- "in", "is", "it", "you", "that",
- "he", "was", "for", "on", "are",
- "with", "as", "I", "his", "they",
- "be", "at", "one", "have", "this",
- "from", "or", "had", "by", "not",
- "word", "but", "what", "some", "we",
- "can", "out", "other", "were", "all",
- "there", "when", "up", "use", "your",
- "how", "said", "an", "each", "she",
- "which", "do", "their", "time", "if",
- "will", "way", "about", "many", "then",
- "them", "write", "would", "like", "so",
- "these", "her", "long", "make", "thing",
- "see", "him", "two", "has", "look",
- "more", "day", "could", "go", "come",
- "did", "number", "sound", "no", "most",
- "people", "my", "over", "know", "water",
- "than", "call", "first", "who", "may",
- "down", "side", "been", "now", "find",
- "any", "new", "work", "part", "take",
- "get", "place", "made", "live", "where",
- "after", "back", "little", "only", "round",
- "man", "year", "came", "show", "every",
- "good", "me", "give", "our", "under",
- "name", "very", "through", "just", "form",
- "sentence", "great", "think", "say", "help",
- "low", "line", "differ", "turn", "cause",
- "much", "mean", "before", "move", "right",
- "boy", "old", "too", "same", "tell",
- "does", "set", "three", "want", "air",
- "well", "also", "play", "small", "end",
- "put", "home", "read", "hand", "port",
- "large", "spell", "add", "even", "land",
- "here", "must", "big", "high", "such",
- "follow", "act", "why", "ask", "men",
- "change", "went", "light", "kind", "off",
- "need", "house", "picture", "try", "us",
- "again", "animal", "point", "mother", "world",
- "near", "build", "self", "earth", "father",
- "head", "stand", "own", "page", "should",
- "country", "found", "answer", "school", "grow",
- "study", "still", "learn", "plant", "cover",
- "food", "sun", "four", "between", "state",
- "keep", "eye", "never", "last", "let",
- "thought", "city", "tree", "cross", "farm",
- "hard", "start", "might", "story", "saw",
- "far", "sea", "draw", "left", "late",
- "run", "don't", "while", "press", "close",
- "night", "real", "life", "few", "north",
- "open", "seem", "together", "next", "white",
- "children", "begin", "got", "walk", "example",
- "ease", "paper", "group", "always", "music",
- "those", "both", "mark", "often", "letter",
- "until", "mile", "river", "car", "feet",
- "care", "second", "book", "carry", "took",
- "science", "eat", "room", "friend", "began",
- "idea", "fish", "mountain", "stop", "once",
- "base", "hear", "horse", "cut", "sure",
- "watch", "color", "face", "wood", "main",
- "enough", "plain", "girl", "usual", "young",
- "ready", "above", "ever", "red", "list",
- "though", "feel", "talk", "bird", "soon",
- "body", "dog", "family", "direct", "pose",
- "leave", "song", "measure", "door", "product",
- "black", "short", "numeral", "class", "wind",
- "question", "happen", "complete", "ship", "area",
- "half", "rock", "order", "fire", "south",
- "problem", "piece", "told", "knew", "pass",
- "since", "top", "whole", "king", "space",
- "heard", "best", "hour", "better", "true",
- "during", "hundred", "five", "remember", "step",
- "early", "hold", "west", "ground", "interest",
- "reach", "fast", "verb", "sing", "listen",
- "six", "table", "travel", "less", "morning",
- "ten", "simple", "several", "vowel", "toward",
- "war", "lay", "against", "pattern", "slow",
- "center", "love", "person", "money", "serve",
- "appear", "road", "map", "rain", "rule",
- "govern", "pull", "cold", "notice", "voice",
- "unit", "power", "town", "fine", "certain",
- "fly", "fall", "lead", "cry", "dark",
- "machine", "note", "wait", "plan", "figure",
- "star", "box", "noun", "field", "rest",
- "correct", "able", "pound", "done", "beauty",
- "drive", "stood", "contain", "front", "teach",
- "week", "final", "gave", "green", "oh",
- "quick", "develop", "ocean", "warm", "free",
- "minute", "strong", "special", "mind", "behind",
- "clear", "tail", "produce", "fact", "street",
- "inch", "multiply", "nothing", "course", "stay",
- "wheel", "full", "force", "blue", "object",
- "decide", "surface", "deep", "moon", "island",
- "foot", "system", "busy", "test", "record",
- "boat", "common", "gold", "possible", "plane",
- "stead", "dry", "wonder", "laugh", "thousand",
- "ago", "ran", "check", "game", "shape",
- "equate", "hot", "miss", "brought", "heat",
- "snow", "tire", "bring", "yes", "distant",
- "fill", "east", "paint", "language", "among",
- "grand", "ball", "yet", "wave", "drop",
- "heart", "am", "present", "heavy", "dance",
- "engine", "position", "arm", "wide", "sail",
- "material", "size", "vary", "settle", "speak",
- "weight", "general", "ice", "matter", "circle",
- "pair", "include", "divide", "syllable", "felt",
- "perhaps", "pick", "sudden", "count", "square",
- "reason", "length", "represent", "art", "subject",
- "region", "energy", "hunt", "probable", "bed",
- "brother", "egg", "ride", "cell", "believe",
- "fraction", "forest", "sit", "race", "window",
- "store", "summer", "train", "sleep", "prove",
- "lone", "leg", "exercise", "wall", "catch",
- "mount", "wish", "sky", "board", "joy",
- "winter", "sat", "written", "wild", "instrument",
- "kept", "glass", "grass", "cow", "job",
- "edge", "sign", "visit", "past", "soft",
- "fun", "bright", "gas", "weather", "month",
- "million", "bear", "finish", "happy", "hope",
- "flower", "clothe", "strange", "gone", "jump",
- "baby", "eight", "village", "meet", "root",
- "buy", "raise", "solve", "metal", "whether",
- "push", "seven", "paragraph", "third", "shall",
- "held", "hair", "describe", "cook", "floor",
- "either", "result", "burn", "hill", "safe",
- "cat", "century", "consider", "type", "law",
- "bit", "coast", "copy", "phrase", "silent",
- "tall", "sand", "soil", "roll", "temperature",
- "finger", "industry", "value", "fight", "lie",
- "beat", "excite", "natural", "view", "sense",
- "ear", "else", "quite", "broke", "case",
- "middle", "kill", "son", "lake", "moment",
- "scale", "loud", "spring", "observe", "child",
- "straight", "consonant", "nation", "dictionary", "milk",
- "speed", "method", "organ", "pay", "age",
- "section", "dress", "cloud", "surprise", "quiet",
- "stone", "tiny", "climb", "cool", "design",
- "poor", "lot", "experiment", "bottom", "key",
- "iron", "single", "stick", "flat", "twenty",
- "skin", "smile", "crease", "hole", "trade",
- "melody", "trip", "office", "receive", "row",
- "mouth", "exact", "symbol", "die", "least",
- "trouble", "shout", "except", "wrote", "seed",
- "tone", "join", "suggest", "clean", "break",
- "lady", "yard", "rise", "bad", "blow",
- "oil", "blood", "touch", "grew", "cent",
- "mix", "team", "wire", "cost", "lost",
- "brown", "wear", "garden", "equal", "sent",
- "choose", "fell", "fit", "flow", "fair",
- "bank", "collect", "save", "control", "decimal",
- "gentle", "woman", "captain", "practice", "separate",
- "difficult", "doctor", "please", "protect", "noon",
- "whose", "locate", "ring", "character", "insect",
- "caught", "period", "indicate", "radio", "spoke",
- "atom", "human", "history", "effect", "electric",
- "expect", "crop", "modern", "element", "hit",
- "student", "corner", "party", "supply", "bone",
- "rail", "imagine", "provide", "agree", "thus",
- "capital", "won't", "chair", "danger", "fruit",
- "rich", "thick", "soldier", "process", "operate",
- "guess", "necessary", "sharp", "wing", "create",
- "neighbor", "wash", "bat", "rather", "crowd",
- "corn", "compare", "poem", "string", "bell",
- "depend", "meat", "rub", "tube", "famous",
- "dollar", "stream", "fear", "sight", "thin",
- "triangle", "planet", "hurry", "chief", "colony",
- "clock", "mine", "tie", "enter", "major",
- "fresh", "search", "send", "yellow", "gun",
- "allow", "print", "dead", "spot", "desert",
- "suit", "current", "lift", "rose", "continue",
- "block", "chart", "hat", "sell", "success",
- "company", "subtract", "event", "particular", "deal",
- "swim", "term", "opposite", "wife", "shoe",
- "shoulder", "spread", "arrange", "camp", "invent",
- "cotton", "born", "determine", "quart", "nine",
- "truck", "noise", "level", "chance", "gather",
- "shop", "stretch", "throw", "shine", "property",
- "column", "molecule", "select", "wrong", "gray",
- "repeat", "require", "broad", "prepare", "salt",
- "nose", "plural", "anger", "claim", "continent",
- "oxygen", "sugar", "death", "pretty", "skill",
- "women", "season", "solution", "magnet", "silver",
- "thank", "branch", "match", "suffix", "especially",
- "fig", "afraid", "huge", "sister", "steel",
- "discuss", "forward", "similar", "guide", "experience",
- "score", "apple", "bought", "led", "pitch",
- "coat", "mass", "card", "band", "rope",
- "slip", "win", "dream", "evening", "condition",
- "feed", "tool", "total", "basic", "smell",
- "valley", "nor", "double", "seat", "arrive",
- "master", "track", "parent", "shore", "division",
- "sheet", "substance", "favor", "connect", "post",
- "spend", "chord", "fat", "glad", "original",
- "share", "station", "dad", "bread", "charge",
- "proper", "bar", "offer", "segment", "slave",
- "duck", "instant", "market", "degree", "populate",
- "chick", "dear", "enemy", "reply", "drink",
- "occur", "support", "speech", "nature", "range",
- "steam", "motion", "path", "liquid", "log",
- "meant", "quotient", "teeth", "shell", "neck"};
diff --git a/jack/introspection.c b/jack/introspection.c
new file mode 100644
index 0000000..86f453b
--- /dev/null
+++ b/jack/introspection.c
@@ -0,0 +1,33 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "jack.h"
+
+#ifdef TAP_DANCE_ENABLE
+tap_dance_action_t tap_dance_actions[] = {
+ [EM_DASH_MINS] = ACTION_TAP_DANCE_FN(em_dash_mins),
+ [PLY_NXT_PRV] = ACTION_TAP_DANCE_FN(ply_nxt_prv),
+ [PASTE_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, raise_paste, td_reset),
+ [CBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR),
+ [SBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC),
+};
+#endif
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [_BASE] = {{KC_VOLU, KC_VOLD}, {KC_MNXT, KC_MPRV}},
+ [_LOWER] = {{XRGB_SAI, XRGB_SAD}, {XRGB_HUI, XRGB_HUD}},
+ [_RAISE] = {{C(KC_LEFT), C(KC_RGHT)}, {C(S(KC_TAB)), C(KC_TAB)}}};
+#endif
+
+#ifdef COMBO_ENABLE
+#define CMB(name, action, ...) \
+ uint16_t const name##_combo[] PROGMEM = {__VA_ARGS__, COMBO_END};
+#include "combos.def"
+#undef CMB
+
+#define CMB(name, action, ...) [name] = COMBO(name##_combo, action),
+combo_t key_combos[] = {
+#include "combos.def"
+};
+#undef CMB
+#endif
diff --git a/jack/jack.c b/jack/jack.c
index b876fb1..274a011 100644
--- a/jack/jack.c
+++ b/jack/jack.c
@@ -1,15 +1,6 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jack.h"
-#include "combos.h"
-
-tap_dance_action_t tap_dance_actions[] = {
- [EM_DASH_MINS] = ACTION_TAP_DANCE_FN(em_dash_mins),
- [PLY_NXT_PRV] = ACTION_TAP_DANCE_FN(ply_nxt_prv),
- [PASTE_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, raise_paste, td_reset),
- [CBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR),
- [SBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC),
-};
#if defined(SPLIT_KEYBOARD) && defined(OLED_ENABLE)
#include "transactions.h"
@@ -21,97 +12,78 @@ void keylogger_sync(uint8_t initiator2target_buffer_size,
if (initiator2target_buffer_size == 5)
memcpy(&keylog_str, initiator2target_buffer, initiator2target_buffer_size);
}
+#endif
+__attribute__((weak)) void housekeeping_task_keymap(void) {}
void housekeeping_task_user(void) {
+#if defined(SPLIT_KEYBOARD) && defined(OLED_ENABLE)
if (is_keyboard_master()) {
static uint32_t last_sync;
bool needs_sync = false;
static char tmp_keylog[5] = {0};
- if (memcmp(&keylog_str, &tmp_keylog, 5)) {
+ if (memcmp(&keylog_str, &tmp_keylog, sizeof(tmp_keylog))) {
needs_sync = true;
- memcpy(&tmp_keylog, &keylog_str, 5);
+ memcpy(&tmp_keylog, &keylog_str, sizeof(tmp_keylog));
}
if (timer_elapsed32(last_sync) > 250)
needs_sync = true;
- if (needs_sync) {
- if (transaction_rpc_send(RPC_ID_USER_KEYLOG_STR, 5, &keylog_str))
+ if (needs_sync)
+ if (transaction_rpc_send(RPC_ID_USER_KEYLOG_STR, sizeof(tmp_keylog),
+ &keylog_str))
last_sync = timer_read32();
- }
}
-}
#endif
+ housekeeping_task_keymap();
+}
+__attribute__((weak)) void keyboard_post_init_keymap(void) {}
void keyboard_post_init_user(void) {
#if defined(SPLIT_KEYBOARD) && defined(OLED_ENABLE)
transaction_register_rpc(RPC_ID_USER_KEYLOG_STR, keylogger_sync);
#endif
+#ifdef CUSTOM_TAP_CODE_ENABLE
+ tap_code_buffer_init();
+#endif
#ifdef RGBLIGHT_ENABLE
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom(HSV_CYAN);
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
-#elif RGB_MATRIX_ENABLE
+#endif
+#ifdef RGB_MATRIX_ENABLE
rgb_matrix_enable_noeeprom();
rgb_matrix_sethsv_noeeprom(HSV_CYAN);
rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
#endif
-#ifdef CONSOLE_ENABLE
- debug_keyboard = true;
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
-#endif
#ifdef AUTOCORRECT_ENABLE
if (!autocorrect_is_enabled())
autocorrect_enable();
#endif
+ keyboard_post_init_keymap();
}
-bool shutdown_user(bool jump_to_bootloader) {
-#ifdef OLED_ENABLE
- oled_render_boot(jump_to_bootloader);
+void matrix_scan_user(void) {
+#ifdef CUSTOM_TAP_CODE_ENABLE
+ process_tap_code_buffer();
#endif
- return true;
}
-#ifdef ENCODER_MAP_ENABLE
-const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
- [_BASE] = {{KC_VOLU, KC_VOLD}, {KC_MNXT, KC_MPRV}},
- [_LOWER] = {{RGB_SAI, RGB_SAD}, {RGB_HUI, RGB_HUD}},
- [_RAISE] = {{C(KC_LEFT), C(KC_RGHT)}, {C(S(KC_TAB)), C(KC_TAB)}}};
+#ifndef MAGIC_ENABLE
+uint16_t keycode_config(uint16_t keycode) { return keycode; }
+uint8_t mod_config(uint8_t mod) { return mod; }
#endif
-#ifdef POINTING_DEVICE_ENABLE
-static bool scrolling = false;
-layer_state_t layer_state_set_user(layer_state_t state) {
- switch (get_highest_layer(state)) {
- case _LOWER:
- scrolling = true;
-#ifdef POINTING_DEVICE_DRIVER_pimoroni_trackball
- pimoroni_trackball_set_cpi(0.1);
-#else
- pointing_device_set_cpi(64);
-#endif
- break;
- default:
- if (scrolling) {
- scrolling = false;
-#ifdef POINTING_DEVICE_DRIVER_pimoroni_trackball
- pimoroni_trackball_set_cpi(1);
-#else
- pointing_device_set_cpi(1024);
+#ifdef RP2040_MATH_IN_ROM
+typedef void (*init_fn)(void);
+extern init_fn __preinit_array_base__;
+extern init_fn __preinit_array_end__;
#endif
- }
- }
- return state;
-}
-report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
- if (scrolling) {
- mouse_report.h = mouse_report.x;
- mouse_report.v = -mouse_report.y;
- mouse_report.x = 0;
- mouse_report.y = 0;
- }
- return mouse_report;
-}
+__attribute__((weak)) void keyboard_pre_init_keymap(void) {}
+void keyboard_pre_init_user(void) {
+#ifdef RP2040_MATH_IN_ROM
+ for (init_fn *func = &__preinit_array_base__; func < &__preinit_array_end__;
+ func++)
+ (*func)();
#endif
+ keyboard_pre_init_keymap();
+}
diff --git a/jack/jack.h b/jack/jack.h
index 742b6d1..3d3b1c9 100644
--- a/jack/jack.h
+++ b/jack/jack.h
@@ -1,55 +1,66 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include QMK_KEYBOARD_H
-#ifdef OLED_ENABLE
-#include "oled.h"
-#endif
enum layers { _BASE, _LOWER, _RAISE };
enum tapdances { EM_DASH_MINS, PLY_NXT_PRV, PASTE_RAISE, CBRACKET, SBRACKET };
-enum sw_state { NONE, SELECTED, WORD, FIRST_LINE, LINE };
-
enum custom_keycodes {
UPDIR = QK_USER,
- NUKE,
- SELWORD,
+ REMOVE,
M_JIGGLE,
- TABLE1,
- TABLE2,
- KC_NOMODE,
- KC_WIDE,
- KC_SCRIPT,
- KC_BLOCKS,
- KC_REGIONAL,
- KC_AUSSIE,
- KC_ZALGO,
- KC_SUPER,
- RWORD
+ UC_NOMODE,
+ UC_WIDE,
+ UC_SCRIPT,
+ UC_BLOCKS,
+ UC_REGIONAL,
+ UC_AUSSIE,
+ UC_ZALGO,
+ UC_SUPER
};
-#ifdef UNICODE_COMMON_ENABLE
-bool process_record_unicode(uint16_t keycode, keyrecord_t *record);
-
-enum unicode_mode {
- NOMODE,
- WIDE,
- SCRIPT,
- BLOCKS,
- REGIONAL,
- AUSSIE,
- ZALGO,
- SUPER
+#define CMB(name, action, ...) name,
+enum combos {
+#include "combos.def"
};
-#endif
+#undef CMB
+bool process_record_unicode(uint16_t keycode, keyrecord_t *record);
+bool process_record_taps(uint16_t keycode, keyrecord_t *record);
+extern uint8_t extract_mod_bits(uint16_t code);
+void tap_code_buffer_init(void);
+void tap_code_register(uint8_t code, uint8_t mods, uint16_t delay,
+ bool register_tap);
+void process_tap_code_buffer(void);
+void tap_string(const char *str);
+
+#ifdef TAP_DANCE_ENABLE
void td_reset(tap_dance_state_t *state, void *user_data);
void em_dash_mins(tap_dance_state_t *state, void *user_data);
void ply_nxt_prv(tap_dance_state_t *state, void *user_data);
void raise_paste(tap_dance_state_t *state, void *user_data);
+#endif
+
+void oled_timer_reset(void);
+void anim_frame(uint16_t size, char const action[][size]);
+void wpm_graph(void);
+void felix_dog(void);
+void layer_anim(void);
+void layer_status(void);
+void render_mod_status(void);
+void add_keylog(uint16_t keycode, keyrecord_t *record);
+void render_keylog(void);
+void render_wpm(void);
+void render_scan_rate(void);
+
+void keyboard_pre_init_keymap(void);
+void keyboard_post_init_keymap(void);
+void housekeeping_task_keymap(void);
+bool oled_task_keymap(void);
+#define KEYLOG_LEN 5
#define PNP TD(PLY_NXT_PRV)
#define PSTRSE TD(PASTE_RAISE)
#define ESCLWR LT(_LOWER, KC_ESC)
@@ -98,16 +109,17 @@ void raise_paste(tap_dance_state_t *state, void *user_data);
#define ___LOWER1___ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0
#define ___LOWER2___ HRML(KC_EXLM, KC_AT, KC_HASH, KC_DLR), KC_PERC, KC_CIRC, HRMR(KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN)
-#define ___LOWER3___ KC_VOLD, KC_TAB, KC_CAPS, SELWORD, KC_GRV, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU
-#define ___LOWER4___ _______, _______, _______, _______, NUKE, _______
+#define ___LOWER3___ KC_VOLD, KC_TAB, KC_CAPS, REMOVE, KC_GRV, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU
+#define ___LOWER4___ _______, _______, _______, _______, _______, _______
-#define ___RAISE1___ XRGB_TOG, XRGB_NXT, XRGB_HUI, XRGB_SAI, XRGB_VAI, KC_NOMODE, KC_SCRIPT, KC_BLOCKS, KC_REGIONAL, QK_MAKE
-#define ___RAISE2___ M_JIGGLE, XRGB_PRV, XRGB_HUD, XRGB_SAD, XRGB_VAD, KC_WIDE, KC_AUSSIE, KC_ZALGO, KC_SUPER, QK_BOOT
-#define ___RAISE3___ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
-#define ___RAISE4___ _______, RWORD, _______, _______, _______, _______
+#define ___RAISE1___ XRGB_TOG, XRGB_NXT, XRGB_HUI, XRGB_SAI, XRGB_VAI, UC_NOMODE, UC_SCRIPT, UC_BLOCKS, UC_REGIONAL, QK_MAKE
+#define ___RAISE2___ M_JIGGLE, XRGB_PRV, XRGB_HUD, XRGB_SAD, XRGB_VAD, UC_WIDE, UC_AUSSIE, UC_ZALGO, UC_SUPER, QK_BOOT
+#define ___RAISE3___ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+#define ___RAISE4___ _______, _______, _______, _______, _______, _______
// clang-format on
#define LAYOUT_jack_60_ts(...) LAYOUT_60_ansi_tsangan(__VA_ARGS__)
#define LAYOUT_jack_3x6(...) LAYOUT_split_3x6_3(__VA_ARGS__)
+#define LAYOUT_jack_sp(...) LAYOUT_split_space(__VA_ARGS__)
#define LAYOUT_jack_all(...) LAYOUT_all(__VA_ARGS__)
#define LAYOUT_jack(...) LAYOUT(__VA_ARGS__)
diff --git a/jack/oled.c b/jack/oled.c
index 7b975e0..ec52705 100644
--- a/jack/oled.c
+++ b/jack/oled.c
@@ -1,15 +1,16 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
-#include "oled.h"
#include "jack.h"
+#include "oled.h"
uint32_t oled_timer = 0;
char keylog_str[KEYLOG_LEN + 1] = {0};
+extern uint8_t oled_buffer[OLED_MATRIX_SIZE];
+extern OLED_BLOCK_TYPE oled_dirty;
void oled_timer_reset(void) { oled_timer = timer_read32(); }
__attribute__((weak)) bool oled_task_keymap(void) { return true; }
-
bool oled_task_user(void) {
if (is_keyboard_master()) {
if (timer_elapsed32(oled_timer) > 300000) {
@@ -220,18 +221,3 @@ void render_scan_rate(void) {
oled_write_ln(get_u16_str(get_matrix_scan_rate(), ' '), false);
}
#endif
-
-void oled_render_boot(bool jump_to_bootloader) {
- oled_clear();
- static const char PROGMEM qmk_logo[16] = {0x80, 0x81, 0x82, 0x83, 0x84,
- 0xA0, 0xA1, 0xA2, 0xA3, 0xA4,
- 0xC0, 0xC1, 0xC2, 0xC3, 0xC4};
- oled_write(qmk_logo, false);
- oled_set_cursor(0, 4);
- oled_write(qmk_logo, false);
- oled_set_cursor(0, 8);
- oled_write(qmk_logo, false);
- oled_set_cursor(0, 12);
- oled_write(qmk_logo, false);
- oled_render_dirty(true);
-}
diff --git a/jack/oled.h b/jack/oled.h
index 6e33143..b959cc6 100644
--- a/jack/oled.h
+++ b/jack/oled.h
@@ -1,25 +1,6 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
-#include "quantum.h"
-
-#define KEYLOG_LEN 5
-extern uint8_t oled_buffer[OLED_MATRIX_SIZE];
-extern OLED_BLOCK_TYPE oled_dirty;
-
-void oled_timer_reset(void);
-bool oled_task_keymap(void);
-void anim_frame(uint16_t size, char const action[][size]);
-void wpm_graph(void);
-void felix_dog(void);
-void layer_anim(void);
-void layer_status(void);
-void render_mod_status(void);
-void add_keylog(uint16_t keycode, keyrecord_t *record);
-void render_keylog(void);
-void render_wpm(void);
-void render_scan_rate(void);
-void oled_render_boot(bool jump_to_bootloader);
static const char PROGMEM code_to_name[256] = {
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
@@ -43,7 +24,8 @@ static const char PROGMEM code_to_name[256] = {
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 'C', 'S', 'A', 'G',
'C', 'S', 'A', 'G', ' ', ' ', ' ', ' ', ' ', 24, 26, 24,
25, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 24, 25, 27,
- 26, ' ', ' ', ' '};
+ 26, ' ', ' ', ' ',
+};
static const char PROGMEM felix_sit[][96] = {
{
@@ -157,440 +139,444 @@ static const char PROGMEM felix_sneak[][96] = {
static const char PROGMEM tap_num[][520] = {
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0x60, 0x9c, 0x03, 0, 0, 0x01, 0x02, 0x04, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x9c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x20, 0x20, 0x11, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01,
- 0x0e, 0xf0, 0x20, 0xc0, 0x80, 0, 0, 0x80, 0x80, 0xc0, 0x30, 0x0c,
+ 0x0e, 0xf0, 0x20, 0xc0, 0x80, 0x00, 0x00, 0x80, 0x80, 0xc0, 0x30, 0x0c,
0x02, 0x11, 0x21, 0x40, 0x80, 0x04, 0x06, 0x09, 0x24, 0x24, 0x18, 0x80,
- 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0, 0, 0, 0x01, 0x01, 0x01,
- 0, 0, 0, 0x80, 0x40, 0x20, 0x20, 0x10, 0x10, 0x8f, 0x48, 0xc4,
- 0x84, 0x88, 0x08, 0x10, 0x20, 0x20, 0x40, 0x80, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0, 0, 0x80,
+ 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x10, 0x10, 0x8f, 0x48, 0xc4,
+ 0x84, 0x88, 0x08, 0x10, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
0x80, 0x40, 0xc0, 0x30, 0x08, 0x44, 0x84, 0x02, 0x02, 0x01, 0x01, 0x78,
- 0x28, 0x11, 0x21, 0x42, 0x06, 0x05, 0x08, 0x90, 0x60, 0x80, 0, 0,
- 0, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0, 0, 0x80, 0x40, 0x40,
+ 0x28, 0x11, 0x21, 0x42, 0x06, 0x05, 0x08, 0x90, 0x60, 0x80, 0x00, 0x00,
+ 0x00, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x80, 0x40, 0x40,
0x20, 0x20, 0x1f, 0x92, 0x8c, 0x08, 0x18, 0x14, 0x24, 0x7a, 0x46, 0x81,
- 0, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x41, 0x44, 0x24, 0x23, 0x10,
+ 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x41, 0x44, 0x24, 0x23, 0x10,
0x10, 0x08, 0x88, 0x84, 0x43, 0x5c, 0x20, 0x20, 0x10, 0x10, 0x20, 0x20,
- 0x40, 0x80, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0x01, 0x01, 0, 0x18, 0x27, 0x40, 0x80,
- 0, 0, 0, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02,
+ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x18, 0x27, 0x40, 0x80,
+ 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02,
0xc2, 0x21, 0x11, 0x10, 0x08, 0x0b, 0x05, 0x66, 0x42, 0x82, 0x04, 0x04,
0x08, 0x18, 0x14, 0x2c, 0x43, 0x80, 0x04, 0x08, 0x10, 0x20, 0x41, 0x80,
0x80, 0x8f, 0x44, 0x44, 0x20, 0x20, 0x10, 0x10, 0x09, 0x86, 0xb8, 0x40,
0x40, 0x20, 0x20, 0x40, 0x40, 0x80, 0xe0, 0x18, 0x06, 0x01, 0x08, 0x10,
- 0x20, 0x40, 0x80, 0, 0, 0, 0x88, 0x80, 0x40, 0x40, 0x20, 0x21,
- 0x12, 0x0c, 0x70, 0x80, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x02, 0x04, 0x08,
- 0x10, 0x20, 0x40, 0x40, 0x20, 0x60, 0x9c, 0x03, 0, 0, 0x01, 0x02,
+ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x88, 0x80, 0x40, 0x40, 0x20, 0x21,
+ 0x12, 0x0c, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08,
+ 0x10, 0x20, 0x40, 0x40, 0x20, 0x60, 0x9c, 0x03, 0x00, 0x00, 0x01, 0x02,
0x04, 0x08, 0x10, 0x20, 0x20, 0x20, 0x11, 0x10, 0x08, 0x08, 0x04, 0x04,
0x02, 0x81, 0x8e, 0x70, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0xc8, 0x24,
- 0x24, 0x42, 0x82, 0x01, 0x01, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x80, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0, 0, 0, 0x01,
- 0x01, 0x01, 0, 0, 0, 0, 0x80, 0x80, 0x40, 0x40, 0x20, 0x27,
- 0x18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x24, 0x42, 0x82, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x27,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0x80, 0x70, 0x0c, 0x03, 0, 0x04, 0x08, 0x10, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x70, 0x0c, 0x03, 0x00, 0x04, 0x08, 0x10, 0x20,
0x41, 0x80, 0x80, 0x81, 0x46, 0x40, 0x20, 0x20, 0x10, 0x10, 0x09, 0x86,
0xb8, 0x50, 0x60, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x40, 0xc0, 0x30,
0x08, 0x44, 0x84, 0x02, 0x02, 0x11, 0x19, 0x24, 0x90, 0x91, 0x61, 0x03,
- 0x04, 0x04, 0x08, 0x90, 0x60, 0x80, 0, 0, 0, 0x01, 0x01, 0x01,
- 0, 0, 0x80, 0x60, 0x10, 0x88, 0x08, 0x04, 0x04, 0x23, 0x12, 0x71,
- 0x21, 0x22, 0xc2, 0x04, 0x08, 0x08, 0x10, 0x20, 0xc0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01,
- 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0, 0, 0, 0, 0,
- 0, 0xc0, 0x30, 0x0c, 0x02, 0x11, 0x21, 0x40, 0x80, 0, 0, 0x1e,
- 0x0a, 0x04, 0x08, 0x90, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0, 0x01,
+ 0x04, 0x04, 0x08, 0x90, 0x60, 0x80, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x80, 0x60, 0x10, 0x88, 0x08, 0x04, 0x04, 0x23, 0x12, 0x71,
+ 0x21, 0x22, 0xc2, 0x04, 0x08, 0x08, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x30, 0x0c, 0x02, 0x11, 0x21, 0x40, 0x80, 0x00, 0x00, 0x1e,
+ 0x0a, 0x04, 0x08, 0x90, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0x00, 0x01,
0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0xc2, 0x21, 0x11, 0x10,
0x08, 0x0b, 0x45, 0x26, 0x22, 0xc2, 0x04, 0x04, 0x0c, 0x1e, 0x11, 0x20,
0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, 0x11, 0x09, 0x08, 0x04,
0x04, 0x02, 0x82, 0x81, 0x40, 0x47, 0x38, 0x20, 0x10, 0x10, 0x20, 0x20,
- 0x40, 0x80, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0x01, 0x02, 0x04, 0x04, 0x02, 0x06, 0x09, 0x10, 0x20,
- 0x40, 0x80, 0, 0, 0, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0,
+ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x02, 0x06, 0x09, 0x10, 0x20,
+ 0x40, 0x80, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00,
0xc0, 0x20, 0x10, 0x10, 0x08, 0x08, 0x07, 0x64, 0x42, 0x82, 0x04, 0x04,
0x08, 0x10, 0x1c, 0x23, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
0x20, 0x23, 0x11, 0x11, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x0e, 0xf0,
0x20, 0xc0, 0x80, 0x80, 0x40, 0x40, 0xe0, 0x18, 0x06, 0x01, 0x08, 0x10,
- 0x20, 0x40, 0x80, 0, 0, 0, 0x88, 0x80, 0x40, 0x40, 0x20, 0x21,
- 0x12, 0x0c, 0x70, 0x80, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x02,
- 0x04, 0x08, 0x10, 0x10, 0x08, 0x68, 0x9c, 0x03, 0, 0, 0x01, 0x02,
+ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x88, 0x80, 0x40, 0x40, 0x20, 0x21,
+ 0x12, 0x0c, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
+ 0x04, 0x08, 0x10, 0x10, 0x08, 0x68, 0x9c, 0x03, 0x00, 0x00, 0x01, 0x02,
0x04, 0x08, 0x10, 0x20, 0x20, 0x20, 0x11, 0x10, 0x08, 0x08, 0x04, 0x04,
0x02, 0x01, 0x0e, 0xf0, 0x20, 0xc0, 0x80, 0x40, 0x40, 0xa0, 0xa0, 0xd0,
- 0x90, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0, 0, 0x01,
- 0x01, 0x03, 0x04, 0x04, 0x08, 0x90, 0x60, 0x80, 0, 0, 0, 0x01,
- 0x01, 0x01, 0, 0, 0, 0, 0x80, 0x80, 0x40, 0x40, 0x20, 0x27,
- 0x18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x90, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x01,
+ 0x01, 0x03, 0x04, 0x04, 0x08, 0x90, 0x60, 0x80, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20, 0x27,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0x60, 0x9c, 0x03, 0, 0, 0x01, 0x02, 0x04, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x9c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x20, 0x20, 0x11, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x81,
- 0x8e, 0x70, 0x40, 0x20, 0x20, 0x40, 0x40, 0x80, 0, 0xc0, 0x30, 0x0c,
+ 0x8e, 0x70, 0x40, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0xc0, 0x30, 0x0c,
0x02, 0x11, 0x21, 0x40, 0x80, 0x04, 0x06, 0x09, 0x24, 0x24, 0x18, 0x80,
- 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0, 0x01, 0x02, 0x04, 0x04, 0x04,
+ 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0x00, 0x01, 0x02, 0x04, 0x04, 0x04,
0x02, 0x02, 0x81, 0x61, 0x10, 0x88, 0x08, 0x04, 0x05, 0x22, 0x12, 0x71,
- 0x21, 0x22, 0xc2, 0x04, 0x08, 0x08, 0x10, 0x20, 0xc0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0, 0, 0x80,
- 0x80, 0xc0, 0x30, 0x0c, 0x02, 0x11, 0x21, 0x40, 0x80, 0, 0, 0x1e,
- 0x0a, 0x04, 0x08, 0x90, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0, 0,
- 0, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0, 0xc0, 0x20, 0x10, 0x10,
+ 0x21, 0x22, 0xc2, 0x04, 0x08, 0x08, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
+ 0x80, 0xc0, 0x30, 0x0c, 0x02, 0x11, 0x21, 0x40, 0x80, 0x00, 0x00, 0x1e,
+ 0x0a, 0x04, 0x08, 0x90, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0x00, 0x00,
+ 0x00, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0xc0, 0x20, 0x10, 0x10,
0x08, 0x08, 0x47, 0x24, 0x22, 0xc2, 0x04, 0x04, 0x08, 0x1e, 0x11, 0x20,
0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x10, 0x11, 0x09, 0x08, 0x04,
- 0x04, 0x02, 0x02, 0x01, 0, 0x07, 0xf8, 0x80, 0x40, 0x40, 0x80, 0x80,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0x01, 0x01, 0, 0x06, 0x09, 0x10, 0x20,
- 0x40, 0x80, 0, 0, 0, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0,
- 0, 0x80, 0x40, 0x40, 0x20, 0x20, 0x1f, 0x92, 0x0c, 0x08, 0x10, 0x10,
- 0x28, 0x68, 0x5c, 0x83, 0, 0, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
+ 0x04, 0x02, 0x02, 0x01, 0x00, 0x07, 0xf8, 0x80, 0x40, 0x40, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x06, 0x09, 0x10, 0x20,
+ 0x40, 0x80, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00,
+ 0x00, 0x80, 0x40, 0x40, 0x20, 0x20, 0x1f, 0x92, 0x0c, 0x08, 0x10, 0x10,
+ 0x28, 0x68, 0x5c, 0x83, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
0x20, 0x23, 0x11, 0x11, 0x08, 0x08, 0x04, 0x04, 0x02, 0x81, 0x8e, 0x70,
0x60, 0x20, 0x20, 0x40, 0x40, 0xc0, 0xa0, 0x60, 0x18, 0x04, 0x22, 0x42,
- 0x81, 0x01, 0, 0, 0, 0, 0x20, 0, 0x01, 0x02, 0x82, 0x84,
- 0x48, 0x30, 0xc0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x02,
- 0x04, 0x08, 0x10, 0x10, 0x08, 0x88, 0x74, 0x0c, 0x03, 0, 0x04, 0x08,
+ 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x02, 0x82, 0x84,
+ 0x48, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
+ 0x04, 0x08, 0x10, 0x10, 0x08, 0x88, 0x74, 0x0c, 0x03, 0x00, 0x04, 0x08,
0x10, 0x20, 0x40, 0x81, 0x81, 0x82, 0x44, 0x40, 0x20, 0x20, 0x10, 0x10,
0x09, 0x86, 0xb8, 0x50, 0x60, 0x20, 0x20, 0x10, 0x10, 0x08, 0xc8, 0x24,
- 0x24, 0x42, 0x82, 0x01, 0x01, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x80, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0, 0x01, 0x02, 0x04,
- 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0, 0, 0, 0, 0x81, 0x9e,
- 0x60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x24, 0x42, 0x82, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x81, 0x41, 0x42, 0x24, 0x18, 0xe0, 0x00, 0x01, 0x02, 0x04,
+ 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x81, 0x9e,
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
static const char PROGMEM tap_sym[][650] = {
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x40,
- 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08,
- 0x08, 0x0c, 0x0a, 0x09, 0x09, 0x09, 0x08, 0x04, 0x04, 0x04, 0x04, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x50, 0x40, 0x80,
- 0, 0, 0, 0, 0x1c, 0x22, 0x21, 0x21, 0x22, 0x2c, 0x30, 0xd0,
- 0x10, 0x11, 0x21, 0x20, 0x40, 0x80, 0x80, 0, 0, 0, 0, 0,
- 0x20, 0x20, 0x21, 0x12, 0x1c, 0xf0, 0x10, 0x18, 0x08, 0x08, 0, 0,
- 0x01, 0x01, 0x02, 0x04, 0x08, 0x30, 0xc0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0x80, 0xc0, 0xc0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xc0, 0x20, 0x10,
- 0x08, 0x04, 0x02, 0x81, 0x01, 0, 0, 0x40, 0x80, 0, 0x80, 0,
- 0, 0, 0, 0x18, 0x24, 0x24, 0x24, 0x18, 0, 0xc0, 0x30, 0x0e,
- 0x80, 0x40, 0x40, 0x80, 0, 0, 0, 0, 0xc0, 0x20, 0x20, 0x20,
- 0x40, 0x40, 0x40, 0x20, 0x18, 0, 0, 0, 0x01, 0x82, 0x44, 0x78,
- 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x07, 0x04, 0x04, 0x02, 0x02,
- 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x81, 0x81, 0x81, 0x82, 0x02, 0x02, 0x02, 0x04,
- 0x04, 0x08, 0x0b, 0x10, 0x10, 0x20, 0x60, 0x20, 0x30, 0x18, 0x0c, 0x04,
- 0x03, 0x01, 0, 0xff, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0xfe, 0x01, 0, 0, 0, 0x08, 0x88, 0x85,
- 0x4e, 0x74, 0xe2, 0x21, 0x21, 0x17, 0x18, 0x68, 0xc4, 0, 0, 0,
- 0, 0, 0, 0x18, 0x07, 0, 0, 0, 0x03, 0x04, 0x04, 0x04,
- 0x03, 0, 0, 0, 0x01, 0, 0, 0, 0, 0, 0, 0xc0,
- 0x20, 0x10, 0x0c, 0x02, 0x01, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0xc0, 0x60, 0x30, 0x10, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x10, 0x30, 0x40, 0x80, 0, 0x0e, 0x03, 0x01,
- 0x01, 0, 0xe0, 0x30, 0x19, 0x07, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xc0, 0x3f,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x03, 0x04, 0x08, 0x10, 0x20, 0x20, 0xc0, 0, 0, 0, 0x01,
- 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x10,
- 0x10, 0x10, 0x10, 0x08, 0x08, 0x34, 0xcf, 0, 0, 0, 0, 0,
- 0x3e, 0x63, 0xc1, 0xc1, 0xbe, 0x80, 0, 0, 0, 0, 0, 0,
- 0x80, 0, 0, 0x1f, 0x20, 0x40, 0xc0, 0x8e, 0x11, 0x19, 0x0e, 0x03,
- 0x86, 0x84, 0xc6, 0x63, 0, 0, 0, 0, 0, 0, 0x01, 0x06,
- 0, 0, 0x20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0xc0, 0x20, 0x18, 0x07, 0x01, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0x03, 0, 0x02, 0x02, 0x01, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0x01, 0, 0, 0, 0, 0, 0, 0, 0x03, 0,
- 0, 0, 0x01, 0x03, 0, 0, 0, 0, 0x03, 0, 0, 0,
- 0, 0, 0, 0, 0x01, 0x01, 0x01, 0x01, 0x01, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x01, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0},
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40,
+ 0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08,
+ 0x08, 0x0c, 0x0a, 0x09, 0x09, 0x09, 0x08, 0x04, 0x04, 0x04, 0x04, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x50, 0x40, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x21, 0x21, 0x22, 0x2c, 0x30, 0xd0,
+ 0x10, 0x11, 0x21, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x20, 0x21, 0x12, 0x1c, 0xf0, 0x10, 0x18, 0x08, 0x08, 0x00, 0x00,
+ 0x01, 0x01, 0x02, 0x04, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x81, 0x01, 0x00, 0x00, 0x40, 0x80, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x18, 0x00, 0xc0, 0x30, 0x0e,
+ 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20,
+ 0x40, 0x40, 0x40, 0x20, 0x18, 0x00, 0x00, 0x00, 0x01, 0x82, 0x44, 0x78,
+ 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x07, 0x04, 0x04, 0x02, 0x02,
+ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x81, 0x81, 0x81, 0x82, 0x02, 0x02, 0x02, 0x04,
+ 0x04, 0x08, 0x0b, 0x10, 0x10, 0x20, 0x60, 0x20, 0x30, 0x18, 0x0c, 0x04,
+ 0x03, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x08, 0x88, 0x85,
+ 0x4e, 0x74, 0xe2, 0x21, 0x21, 0x17, 0x18, 0x68, 0xc4, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x07, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x04,
+ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
+ 0x20, 0x10, 0x0c, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x10, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x10, 0x30, 0x40, 0x80, 0x00, 0x0e, 0x03, 0x01,
+ 0x01, 0x00, 0xe0, 0x30, 0x19, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x04, 0x08, 0x10, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x01,
+ 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x10,
+ 0x10, 0x10, 0x10, 0x08, 0x08, 0x34, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3e, 0x63, 0xc1, 0xc1, 0xbe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x00, 0x00, 0x1f, 0x20, 0x40, 0xc0, 0x8e, 0x11, 0x19, 0x0e, 0x03,
+ 0x86, 0x84, 0xc6, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06,
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x20, 0x18, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ },
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x18,
0x14, 0x14, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x60, 0x80, 0x80, 0x80, 0, 0,
- 0, 0x1c, 0x22, 0x21, 0x21, 0x22, 0x2c, 0x30, 0x50, 0x90, 0x11, 0x11,
- 0x20, 0x20, 0x40, 0xc0, 0, 0, 0, 0, 0, 0x10, 0x10, 0x10,
- 0x09, 0x0e, 0x78, 0x88, 0x04, 0x04, 0x04, 0, 0, 0, 0, 0,
- 0x01, 0x02, 0x0c, 0xf0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xc0, 0x20, 0x10,
- 0x08, 0x08, 0x04, 0x82, 0x01, 0x01, 0, 0x40, 0x80, 0, 0x80, 0x80,
- 0, 0, 0, 0x30, 0x48, 0x48, 0x48, 0x30, 0, 0x80, 0x60, 0x18,
- 0x04, 0x80, 0x80, 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80,
- 0x80, 0, 0, 0x80, 0xe0, 0x01, 0x01, 0x02, 0x06, 0x08, 0x10, 0xe0,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x60, 0x80, 0x80, 0x80, 0x00, 0x00,
+ 0x00, 0x1c, 0x22, 0x21, 0x21, 0x22, 0x2c, 0x30, 0x50, 0x90, 0x11, 0x11,
+ 0x20, 0x20, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x09, 0x0e, 0x78, 0x88, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x02, 0x0c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10,
+ 0x08, 0x08, 0x04, 0x82, 0x01, 0x01, 0x00, 0x40, 0x80, 0x00, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x30, 0x48, 0x48, 0x48, 0x30, 0x00, 0x80, 0x60, 0x18,
+ 0x04, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
+ 0x80, 0x00, 0x00, 0x80, 0xe0, 0x01, 0x01, 0x02, 0x06, 0x08, 0x10, 0xe0,
0x10, 0x20, 0x20, 0x20, 0x20, 0x21, 0x16, 0x18, 0x30, 0x50, 0x08, 0x08,
- 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01,
- 0, 0, 0, 0, 0, 0, 0x80, 0x40, 0x30, 0x0c, 0x02, 0x01,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0x08, 0x8c, 0xc5,
- 0x4e, 0x74, 0xe2, 0x21, 0x21, 0x17, 0x18, 0x68, 0x84, 0x04, 0, 0,
- 0, 0, 0, 0x30, 0x0e, 0x01, 0, 0, 0x07, 0x09, 0x08, 0x09,
- 0x06, 0, 0, 0, 0x07, 0, 0, 0, 0x01, 0x01, 0x01, 0x01,
- 0, 0, 0, 0, 0, 0x80, 0x70, 0x0f, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xf8, 0x04, 0x02,
- 0x02, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0x03, 0x04, 0x08, 0x10, 0x20, 0xe0, 0, 0, 0, 0, 0x81,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x02, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x08, 0x8c, 0xc5,
+ 0x4e, 0x74, 0xe2, 0x21, 0x21, 0x17, 0x18, 0x68, 0x84, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x0e, 0x01, 0x00, 0x00, 0x07, 0x09, 0x08, 0x09,
+ 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x04, 0x02,
+ 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x04, 0x08, 0x10, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x81,
0xc0, 0x40, 0x40, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40,
0x40, 0x40, 0x20, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x0a, 0x06,
0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x18, 0x60, 0x80, 0, 0,
- 0, 0, 0x80, 0x78, 0x07, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0x03, 0, 0x02, 0x02, 0x01, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0x01, 0x02, 0, 0, 0x03, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x18, 0x60, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
},
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0x80, 0x40, 0x40, 0x20, 0x10,
- 0x10, 0x08, 0x04, 0, 0x02, 0x01, 0x01, 0x01, 0, 0, 0, 0,
- 0, 0x80, 0x80, 0xe0, 0x80, 0xe0, 0, 0, 0, 0, 0, 0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x20, 0x10,
+ 0x10, 0x08, 0x04, 0x00, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x80, 0xe0, 0x80, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x22, 0x21, 0x21, 0x23, 0x2c, 0x30, 0x70, 0x51, 0x91, 0x10, 0x10,
- 0x10, 0x20, 0x60, 0x80, 0, 0, 0, 0, 0x08, 0x08, 0x08, 0x04,
- 0x07, 0x3c, 0xc4, 0x04, 0x04, 0x02, 0x02, 0, 0, 0, 0, 0,
- 0x01, 0x07, 0xfc, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0xf0, 0x0c, 0x03, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0x06, 0x18, 0x20, 0xc0, 0, 0, 0, 0x05, 0x06, 0x03,
- 0x01, 0x07, 0x01, 0x01, 0x01, 0, 0, 0, 0, 0, 0, 0,
+ 0x10, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x04,
+ 0x07, 0x3c, 0xc4, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf0, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x18, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x05, 0x06, 0x03,
+ 0x01, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0x20, 0x20, 0x20, 0x20, 0x21, 0x16, 0x1c, 0x38, 0x68, 0x04, 0x07,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0x80, 0xc0, 0x20, 0x30, 0x0c, 0x07, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0f, 0x30, 0x40,
- 0x40, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0x01, 0, 0, 0x10, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0x80, 0x80, 0x80, 0x80, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0x7e, 0x02, 0x01,
- 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x20, 0x30, 0x0c, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x40,
+ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7e, 0x02, 0x01,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01,
- 0x01, 0x01, 0, 0, 0, 0x01, 0x03, 0x04, 0x18, 0x30, 0x40, 0x80,
- 0, 0, 0, 0xc0, 0x3f, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0x01, 0x03, 0, 0x02, 0x01,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x04, 0x18, 0x30, 0x40, 0x80,
+ 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x02, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
}};
static const char PROGMEM tap_sys[][520] = {
- {0x01, 0x80, 0x60, 0x10, 0x48, 0x08, 0x24, 0x04, 0x14, 0x84, 0x14, 0x04,
- 0x28, 0x88, 0x10, 0x60, 0x80, 0, 0, 0x04, 0, 0x80, 0x60, 0x10,
- 0x08, 0x08, 0x04, 0x44, 0x84, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x60,
- 0x82, 0, 0, 0, 0, 0, 0, 0, 0xfc, 0x02, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x41,
- 0x21, 0x21, 0x21, 0xa1, 0x61, 0x41, 0xc1, 0x41, 0xc1, 0x81, 0x81, 0x81,
- 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x81, 0x41, 0x21, 0x21, 0x21, 0xa2, 0xfc, 0, 0, 0,
- 0x10, 0, 0, 0, 0, 0, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08,
- 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10,
- 0x20, 0x40, 0x84, 0, 0, 0, 0, 0x04, 0, 0x1f, 0x60, 0x85,
- 0x10, 0x40, 0, 0x80, 0x06, 0x07, 0, 0, 0, 0, 0x82, 0x60,
- 0x1f, 0, 0, 0, 0, 0x1f, 0x60, 0x80, 0x40, 0x20, 0x20, 0x10,
- 0x93, 0x5c, 0x10, 0x20, 0x20, 0x40, 0x80, 0x60, 0x1f, 0, 0, 0,
- 0, 0, 0, 0, 0xff, 0xc1, 0x02, 0x0c, 0x70, 0x80, 0, 0,
- 0, 0, 0, 0xe0, 0x1c, 0x03, 0, 0xc0, 0x38, 0x06, 0x01, 0x80,
- 0x70, 0x0c, 0x02, 0x03, 0x1c, 0xe0, 0x01, 0x06, 0x38, 0xc1, 0x02, 0x0c,
- 0x70, 0x80, 0, 0, 0, 0, 0, 0xe0, 0x1c, 0x03, 0, 0xc0,
- 0x38, 0x06, 0x01, 0x80, 0xff, 0, 0, 0, 0, 0, 0, 0xf0,
- 0x0c, 0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0xc0, 0x30, 0x0c, 0x03, 0, 0, 0, 0, 0, 0, 0x03,
- 0x0c, 0xf0, 0x04, 0, 0x80, 0x80, 0x88, 0x80, 0x81, 0x81, 0x02, 0x02,
- 0x12, 0x02, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0, 0x08, 0, 0,
- 0x80, 0x80, 0x90, 0x80, 0x81, 0x81, 0x02, 0x02, 0x02, 0x02, 0x82, 0x82,
- 0x01, 0x01, 0, 0, 0x80, 0x80, 0, 0x01, 0, 0, 0, 0,
- 0xff, 0x41, 0x8e, 0xb0, 0xc0, 0x83, 0x9c, 0x60, 0xa0, 0x18, 0x07, 0x80,
- 0x40, 0x30, 0x0e, 0x01, 0x80, 0x60, 0x1c, 0x03, 0, 0, 0, 0,
- 0, 0, 0x07, 0x18, 0x20, 0x41, 0x8e, 0xb0, 0xc0, 0x83, 0x9c, 0x60,
- 0xa0, 0x18, 0x07, 0x80, 0x40, 0x30, 0x0e, 0x01, 0x80, 0x60, 0x1c, 0x03,
- 0xff, 0, 0, 0, 0, 0, 0, 0x07, 0x18, 0x60, 0x90, 0x08,
- 0x08, 0x04, 0x64, 0x04, 0x02, 0xf2, 0x52, 0x92, 0x13, 0x12, 0x12, 0xf2,
- 0x02, 0x04, 0x64, 0x04, 0x08, 0x08, 0x90, 0x70, 0x18, 0x07, 0, 0,
- 0x1f, 0x12, 0x99, 0x14, 0x12, 0x1f, 0, 0x04, 0, 0, 0x1f, 0x10,
- 0x10, 0x10, 0x10, 0x1f, 0, 0, 0x40, 0, 0x1f, 0x10, 0x10, 0x10,
- 0x10, 0x1f, 0, 0, 0, 0x40, 0x0d, 0x0d, 0, 0x0c, 0x0c, 0,
- 0x01, 0x01, 0, 0, 0, 0x40, 0, 0, 0x1f, 0x20, 0x40, 0x40,
- 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x43, 0x42, 0x42, 0x42, 0x42, 0x41,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x43, 0x42,
- 0x42, 0x42, 0x42, 0x41, 0x40, 0x40, 0x40, 0x20, 0x1f, 0, 0, 0x08,
- 0, 0, 0, 0, 0, 0, 0x40, 0x01, 0x02, 0x04, 0x04, 0x08,
- 0x08, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x08, 0x08, 0x04, 0x44,
- 0x02, 0x01, 0, 0, 0, 0, 0x20, 0},
+ {
+ 0x01, 0x80, 0x60, 0x10, 0x48, 0x08, 0x24, 0x04, 0x14, 0x84, 0x14, 0x04,
+ 0x28, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00, 0x04, 0x00, 0x80, 0x60, 0x10,
+ 0x08, 0x08, 0x04, 0x44, 0x84, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x60,
+ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x02, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x41,
+ 0x21, 0x21, 0x21, 0xa1, 0x61, 0x41, 0xc1, 0x41, 0xc1, 0x81, 0x81, 0x81,
+ 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x81, 0x41, 0x21, 0x21, 0x21, 0xa2, 0xfc, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08,
+ 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10,
+ 0x20, 0x40, 0x84, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x1f, 0x60, 0x85,
+ 0x10, 0x40, 0x00, 0x80, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x82, 0x60,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x60, 0x80, 0x40, 0x20, 0x20, 0x10,
+ 0x93, 0x5c, 0x10, 0x20, 0x20, 0x40, 0x80, 0x60, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xc1, 0x02, 0x0c, 0x70, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x03, 0x00, 0xc0, 0x38, 0x06, 0x01, 0x80,
+ 0x70, 0x0c, 0x02, 0x03, 0x1c, 0xe0, 0x01, 0x06, 0x38, 0xc1, 0x02, 0x0c,
+ 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x03, 0x00, 0xc0,
+ 0x38, 0x06, 0x01, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0c, 0xf0, 0x04, 0x00, 0x80, 0x80, 0x88, 0x80, 0x81, 0x81, 0x02, 0x02,
+ 0x12, 0x02, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0x00, 0x08, 0x00, 0x00,
+ 0x80, 0x80, 0x90, 0x80, 0x81, 0x81, 0x02, 0x02, 0x02, 0x02, 0x82, 0x82,
+ 0x01, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0x41, 0x8e, 0xb0, 0xc0, 0x83, 0x9c, 0x60, 0xa0, 0x18, 0x07, 0x80,
+ 0x40, 0x30, 0x0e, 0x01, 0x80, 0x60, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x18, 0x20, 0x41, 0x8e, 0xb0, 0xc0, 0x83, 0x9c, 0x60,
+ 0xa0, 0x18, 0x07, 0x80, 0x40, 0x30, 0x0e, 0x01, 0x80, 0x60, 0x1c, 0x03,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x60, 0x90, 0x08,
+ 0x08, 0x04, 0x64, 0x04, 0x02, 0xf2, 0x52, 0x92, 0x13, 0x12, 0x12, 0xf2,
+ 0x02, 0x04, 0x64, 0x04, 0x08, 0x08, 0x90, 0x70, 0x18, 0x07, 0x00, 0x00,
+ 0x1f, 0x12, 0x99, 0x14, 0x12, 0x1f, 0x00, 0x04, 0x00, 0x00, 0x1f, 0x10,
+ 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x40, 0x00, 0x1f, 0x10, 0x10, 0x10,
+ 0x10, 0x1f, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x0d, 0x00, 0x0c, 0x0c, 0x00,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x1f, 0x20, 0x40, 0x40,
+ 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x43, 0x42, 0x42, 0x42, 0x42, 0x41,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x40, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x02, 0x04, 0x04, 0x08,
+ 0x08, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x08, 0x08, 0x04, 0x44,
+ 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+ },
{
0x04, 0x80, 0x60, 0x10, 0x48, 0x08, 0xa4, 0x04, 0x14, 0x04, 0x14, 0x04,
- 0x28, 0x88, 0x10, 0x60, 0x80, 0, 0x04, 0, 0, 0x80, 0x60, 0x10,
+ 0x28, 0x88, 0x10, 0x60, 0x80, 0x00, 0x04, 0x00, 0x00, 0x80, 0x60, 0x10,
0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0xc4, 0x04, 0x08, 0x08, 0x10, 0x60,
- 0x80, 0x02, 0, 0, 0x04, 0, 0, 0, 0xfc, 0x02, 0x01, 0x01,
+ 0x80, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xfc, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x41,
0x21, 0x21, 0x21, 0xa1, 0x61, 0x41, 0xc1, 0x41, 0x41, 0x81, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x81, 0x41, 0x21, 0x21, 0x21, 0xa2, 0xfc, 0, 0, 0x40,
- 0, 0, 0x02, 0, 0, 0, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08,
+ 0x01, 0x01, 0x81, 0x41, 0x21, 0x21, 0x21, 0xa2, 0xfc, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08,
0x08, 0x04, 0x84, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10,
- 0x20, 0x42, 0x80, 0, 0, 0x10, 0, 0, 0, 0x1f, 0x60, 0x85,
- 0x10, 0x40, 0, 0x81, 0x06, 0x06, 0, 0, 0, 0, 0x82, 0x60,
- 0x1f, 0, 0, 0, 0, 0x1f, 0x60, 0x80, 0x40, 0x20, 0x20, 0x10,
- 0x50, 0x9e, 0x11, 0x20, 0x20, 0x40, 0x80, 0x60, 0x1f, 0, 0, 0,
- 0, 0, 0, 0, 0xff, 0xc0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0xe0, 0x1c, 0x03, 0, 0xc0, 0x38, 0x06, 0x01, 0,
- 0, 0, 0, 0x03, 0x1c, 0xe0, 0x01, 0x06, 0x38, 0xc0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0xe0, 0x1c, 0x03, 0, 0xc0,
- 0x38, 0x06, 0x01, 0, 0xff, 0, 0, 0, 0, 0, 0, 0xf0,
- 0x0c, 0x03, 0, 0, 0, 0, 0, 0, 0, 0, 0x01, 0x1e,
- 0xe0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03,
- 0x0c, 0xf0, 0, 0, 0x80, 0x80, 0x90, 0x80, 0x81, 0x81, 0x02, 0x02,
- 0x02, 0x02, 0x82, 0x82, 0x81, 0x81, 0x80, 0x88, 0, 0, 0, 0,
+ 0x20, 0x42, 0x80, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1f, 0x60, 0x85,
+ 0x10, 0x40, 0x00, 0x81, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x82, 0x60,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x60, 0x80, 0x40, 0x20, 0x20, 0x10,
+ 0x50, 0x9e, 0x11, 0x20, 0x20, 0x40, 0x80, 0x60, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x03, 0x00, 0xc0, 0x38, 0x06, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x1c, 0xe0, 0x01, 0x06, 0x38, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x03, 0x00, 0xc0,
+ 0x38, 0x06, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1e,
+ 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0c, 0xf0, 0x00, 0x00, 0x80, 0x80, 0x90, 0x80, 0x81, 0x81, 0x02, 0x02,
+ 0x02, 0x02, 0x82, 0x82, 0x81, 0x81, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00,
0x80, 0x80, 0x80, 0x88, 0x81, 0x81, 0x02, 0x02, 0x02, 0x02, 0x82, 0x82,
- 0x01, 0x81, 0x80, 0, 0, 0, 0, 0, 0, 0, 0x10, 0,
+ 0x01, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0xff, 0x41, 0x8e, 0xb0, 0xc0, 0x80, 0x80, 0x40, 0x20, 0x18, 0x07, 0x80,
- 0x40, 0x30, 0x0e, 0x01, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0x07, 0x18, 0x20, 0x41, 0x8e, 0xb0, 0xc0, 0x80, 0x80, 0x40,
- 0x20, 0x18, 0x07, 0x80, 0x40, 0x30, 0x0e, 0x01, 0, 0, 0, 0,
- 0xff, 0, 0x02, 0, 0, 0, 0, 0x07, 0x18, 0x60, 0x90, 0x08,
+ 0x40, 0x30, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x18, 0x20, 0x41, 0x8e, 0xb0, 0xc0, 0x80, 0x80, 0x40,
+ 0x20, 0x18, 0x07, 0x80, 0x40, 0x30, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x60, 0x90, 0x08,
0x08, 0x04, 0x64, 0x04, 0x02, 0xf2, 0x12, 0x92, 0x53, 0x92, 0x12, 0xf2,
- 0x02, 0x04, 0x64, 0x04, 0x08, 0x08, 0x90, 0x70, 0x18, 0x07, 0, 0,
- 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f, 0, 0x80, 0, 0, 0x1f, 0x10,
- 0x10, 0x10, 0x10, 0x1f, 0, 0, 0, 0, 0x1f, 0x1f, 0x1f, 0x1f,
- 0x1f, 0x1f, 0, 0, 0, 0x40, 0x01, 0x01, 0x80, 0x0d, 0x0d, 0,
- 0x0c, 0x0c, 0, 0, 0, 0, 0, 0, 0x1f, 0x20, 0x40, 0x40,
+ 0x02, 0x04, 0x64, 0x04, 0x08, 0x08, 0x90, 0x70, 0x18, 0x07, 0x00, 0x00,
+ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00, 0x80, 0x00, 0x00, 0x1f, 0x10,
+ 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f,
+ 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x40, 0x01, 0x01, 0x80, 0x0d, 0x0d, 0x00,
+ 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0x40, 0x40,
0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x40,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x1f, 0, 0, 0,
- 0, 0, 0x08, 0, 0, 0, 0, 0x01, 0x02, 0x04, 0x04, 0x08,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08,
0x08, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x08, 0x08, 0x04, 0x04,
- 0x02, 0x01, 0, 0, 0x04, 0, 0, 0,
+ 0x02, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
},
{
- 0, 0x80, 0x60, 0x14, 0x48, 0x08, 0x24, 0x04, 0x14, 0x04, 0x14, 0x04,
- 0x28, 0x88, 0x10, 0x60, 0x80, 0, 0, 0x08, 0, 0x80, 0x60, 0x10,
+ 0x00, 0x80, 0x60, 0x14, 0x48, 0x08, 0x24, 0x04, 0x14, 0x04, 0x14, 0x04,
+ 0x28, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00, 0x08, 0x00, 0x80, 0x60, 0x10,
0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x88, 0x10, 0x60,
- 0x80, 0, 0, 0x04, 0, 0, 0, 0, 0xfc, 0x02, 0x01, 0x01,
+ 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0x41,
0x21, 0x21, 0x21, 0x21, 0x21, 0x41, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x81, 0x41, 0x21, 0x21, 0x21, 0x22, 0xfc, 0, 0, 0x10,
- 0, 0, 0, 0, 0x02, 0, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08,
+ 0x01, 0x01, 0x81, 0x41, 0x21, 0x21, 0x21, 0x22, 0xfc, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x08,
0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10,
- 0x20, 0x40, 0x80, 0, 0x04, 0, 0, 0, 0, 0x1f, 0x60, 0x85,
- 0x10, 0x44, 0x04, 0x84, 0x06, 0x06, 0, 0, 0, 0, 0x82, 0x60,
- 0x1f, 0, 0, 0, 0, 0x1f, 0x60, 0x80, 0x40, 0x20, 0x20, 0x10,
- 0x10, 0x18, 0x14, 0x22, 0x21, 0x40, 0x80, 0x60, 0x1f, 0, 0, 0,
- 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0xe0, 0x1c, 0x03, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0x03, 0x1c, 0xe0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0xe0, 0x1c, 0x03, 0, 0,
- 0, 0, 0, 0, 0xff, 0, 0, 0, 0x08, 0, 0, 0xf0,
- 0x0c, 0x03, 0, 0, 0, 0, 0x01, 0x06, 0x08, 0x30, 0x40, 0x80,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03,
- 0x0c, 0xf0, 0, 0, 0x80, 0x80, 0x80, 0x90, 0x81, 0x81, 0x02, 0x12,
- 0x02, 0x02, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0, 0, 0x08, 0,
+ 0x20, 0x40, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x60, 0x85,
+ 0x10, 0x44, 0x04, 0x84, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x82, 0x60,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x60, 0x80, 0x40, 0x20, 0x20, 0x10,
+ 0x10, 0x18, 0x14, 0x22, 0x21, 0x40, 0x80, 0x60, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x1c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xf0,
+ 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0x30, 0x40, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x0c, 0xf0, 0x00, 0x00, 0x80, 0x80, 0x80, 0x90, 0x81, 0x81, 0x02, 0x12,
+ 0x02, 0x02, 0x82, 0x82, 0x81, 0x81, 0x80, 0x80, 0x00, 0x00, 0x08, 0x00,
0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0a,
- 0x01, 0x81, 0x80, 0, 0x80, 0x80, 0x08, 0, 0, 0, 0x01, 0,
- 0xff, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x20, 0x18, 0x07, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0x07, 0x18, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40,
- 0x20, 0x18, 0x07, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0xff, 0, 0, 0, 0, 0, 0, 0x07, 0x18, 0x60, 0x90, 0x08,
+ 0x01, 0x81, 0x80, 0x00, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0xff, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x20, 0x18, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40,
+ 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x60, 0x90, 0x08,
0x08, 0x04, 0x64, 0x04, 0x02, 0xf2, 0x12, 0x13, 0x12, 0x92, 0x52, 0xf2,
- 0x02, 0x04, 0x64, 0x04, 0x08, 0x08, 0x90, 0x70, 0x18, 0x07, 0, 0,
- 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f, 0, 0, 0x80, 0, 0x1f, 0x10,
- 0x16, 0x16, 0x10, 0x1f, 0, 0, 0, 0, 0x1f, 0x10, 0x10, 0x10,
- 0x50, 0x1f, 0, 0, 0, 0, 0x0c, 0x0c, 0, 0x01, 0x01, 0,
- 0x0d, 0x0d, 0, 0, 0x40, 0, 0, 0, 0x1f, 0x20, 0x40, 0x40,
+ 0x02, 0x04, 0x64, 0x04, 0x08, 0x08, 0x90, 0x70, 0x18, 0x07, 0x00, 0x00,
+ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x80, 0x00, 0x1f, 0x10,
+ 0x16, 0x16, 0x10, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10,
+ 0x50, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x01, 0x01, 0x00,
+ 0x0d, 0x0d, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x1f, 0x20, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
- 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x1f, 0, 0x80, 0,
- 0, 0, 0, 0, 0x08, 0, 0, 0x01, 0x02, 0x04, 0x04, 0x08,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x1f, 0x00, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08,
0x08, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x08, 0x08, 0x04, 0x04,
- 0x02, 0x01, 0x10, 0, 0, 0, 0, 0,
+ 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
diff --git a/jack/oledfont.h b/jack/oledfont.h
index 209f143..575829b 100644
--- a/jack/oledfont.h
+++ b/jack/oledfont.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "progmem.h"
diff --git a/jack/picosdk_math.mk b/jack/picosdk_math.mk
new file mode 100644
index 0000000..82f18a3
--- /dev/null
+++ b/jack/picosdk_math.mk
@@ -0,0 +1,153 @@
+OPT_DEFS += -DPICO_DOUBLE_IN_RAM=1 \
+ -DPICO_FLOAT_IN_RAM=1
+
+# bit
+SRC += $(PICOSDKROOT)/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S
+EXTRALDFLAGS += \
+ -Wl,--wrap=__clzsi2 \
+ -Wl,--wrap=__clzdi2 \
+ -Wl,--wrap=__ctzsi2 \
+ -Wl,--wrap=__ctzdi2 \
+ -Wl,--wrap=__popcountsi2 \
+ -Wl,--wrap=__popcountdi2
+
+# double
+VPATH += $(PICOSDKROOT)/src/rp2_common/pico_double/include
+SRC += \
+ $(PICOSDKROOT)/src/rp2_common/pico_double/double_aeabi.S \
+ $(PICOSDKROOT)/src/rp2_common/pico_double/double_init_rom.c \
+ $(PICOSDKROOT)/src/rp2_common/pico_double/double_math.c \
+ $(PICOSDKROOT)/src/rp2_common/pico_double/double_v1_rom_shim.S
+EXTRALDFLAGS += \
+ -Wl,--wrap=__aeabi_dadd \
+ -Wl,--wrap=__aeabi_ddiv \
+ -Wl,--wrap=__aeabi_dmul \
+ -Wl,--wrap=__aeabi_drsub \
+ -Wl,--wrap=__aeabi_dsub \
+ -Wl,--wrap=__aeabi_cdcmpeq \
+ -Wl,--wrap=__aeabi_cdrcmple \
+ -Wl,--wrap=__aeabi_cdcmple \
+ -Wl,--wrap=__aeabi_dcmpeq \
+ -Wl,--wrap=__aeabi_dcmplt \
+ -Wl,--wrap=__aeabi_dcmple \
+ -Wl,--wrap=__aeabi_dcmpge \
+ -Wl,--wrap=__aeabi_dcmpgt \
+ -Wl,--wrap=__aeabi_dcmpun \
+ -Wl,--wrap=__aeabi_i2d \
+ -Wl,--wrap=__aeabi_l2d \
+ -Wl,--wrap=__aeabi_ui2d \
+ -Wl,--wrap=__aeabi_ul2d \
+ -Wl,--wrap=__aeabi_d2iz \
+ -Wl,--wrap=__aeabi_d2lz \
+ -Wl,--wrap=__aeabi_d2uiz \
+ -Wl,--wrap=__aeabi_d2ulz \
+ -Wl,--wrap=__aeabi_d2f \
+ -Wl,--wrap=sqrt \
+ -Wl,--wrap=cos \
+ -Wl,--wrap=sin \
+ -Wl,--wrap=tan \
+ -Wl,--wrap=atan2 \
+ -Wl,--wrap=exp \
+ -Wl,--wrap=log \
+ -Wl,--wrap=ldexp \
+ -Wl,--wrap=copysign \
+ -Wl,--wrap=trunc \
+ -Wl,--wrap=floor \
+ -Wl,--wrap=ceil \
+ -Wl,--wrap=round \
+ -Wl,--wrap=sincos \
+ -Wl,--wrap=asin \
+ -Wl,--wrap=acos \
+ -Wl,--wrap=atan \
+ -Wl,--wrap=sinh \
+ -Wl,--wrap=cosh \
+ -Wl,--wrap=tanh \
+ -Wl,--wrap=asinh \
+ -Wl,--wrap=acosh \
+ -Wl,--wrap=atanh \
+ -Wl,--wrap=exp2 \
+ -Wl,--wrap=log2 \
+ -Wl,--wrap=exp10 \
+ -Wl,--wrap=log10 \
+ -Wl,--wrap=pow \
+ -Wl,--wrap=powint \
+ -Wl,--wrap=hypot \
+ -Wl,--wrap=cbrt \
+ -Wl,--wrap=fmod \
+ -Wl,--wrap=drem \
+ -Wl,--wrap=remainder \
+ -Wl,--wrap=remquo \
+ -Wl,--wrap=expm1 \
+ -Wl,--wrap=log1p \
+ -Wl,--wrap=fma
+
+# float
+VPATH += $(PICOSDKROOT)/src/rp2_common/pico_float/include
+SRC += \
+ $(PICOSDKROOT)/src/rp2_common/pico_float/float_aeabi.S \
+ $(PICOSDKROOT)/src/rp2_common/pico_float/float_init_rom.c \
+ $(PICOSDKROOT)/src/rp2_common/pico_float/float_math.c \
+ $(PICOSDKROOT)/src/rp2_common/pico_float/float_v1_rom_shim.S
+
+EXTRALDFLAGS += \
+ -Wl,--wrap=__aeabi_fadd \
+ -Wl,--wrap=__aeabi_fdiv \
+ -Wl,--wrap=__aeabi_fmul \
+ -Wl,--wrap=__aeabi_frsub \
+ -Wl,--wrap=__aeabi_fsub \
+ -Wl,--wrap=__aeabi_cfcmpeq \
+ -Wl,--wrap=__aeabi_cfrcmple \
+ -Wl,--wrap=__aeabi_cfcmple \
+ -Wl,--wrap=__aeabi_fcmpeq \
+ -Wl,--wrap=__aeabi_fcmplt \
+ -Wl,--wrap=__aeabi_fcmple \
+ -Wl,--wrap=__aeabi_fcmpge \
+ -Wl,--wrap=__aeabi_fcmpgt \
+ -Wl,--wrap=__aeabi_fcmpun \
+ -Wl,--wrap=__aeabi_i2f \
+ -Wl,--wrap=__aeabi_l2f \
+ -Wl,--wrap=__aeabi_ui2f \
+ -Wl,--wrap=__aeabi_ul2f \
+ -Wl,--wrap=__aeabi_f2iz \
+ -Wl,--wrap=__aeabi_f2lz \
+ -Wl,--wrap=__aeabi_f2uiz \
+ -Wl,--wrap=__aeabi_f2ulz \
+ -Wl,--wrap=__aeabi_f2d \
+ -Wl,--wrap=sqrtf \
+ -Wl,--wrap=cosf \
+ -Wl,--wrap=sinf \
+ -Wl,--wrap=tanf \
+ -Wl,--wrap=atan2f \
+ -Wl,--wrap=expf \
+ -Wl,--wrap=logf \
+ -Wl,--wrap=ldexpf \
+ -Wl,--wrap=copysignf \
+ -Wl,--wrap=truncf \
+ -Wl,--wrap=floorf \
+ -Wl,--wrap=ceilf \
+ -Wl,--wrap=roundf \
+ -Wl,--wrap=sincosf \
+ -Wl,--wrap=asinf \
+ -Wl,--wrap=acosf \
+ -Wl,--wrap=atanf \
+ -Wl,--wrap=sinhf \
+ -Wl,--wrap=coshf \
+ -Wl,--wrap=tanhf \
+ -Wl,--wrap=asinhf \
+ -Wl,--wrap=acoshf \
+ -Wl,--wrap=atanhf \
+ -Wl,--wrap=exp2f \
+ -Wl,--wrap=log2f \
+ -Wl,--wrap=exp10f \
+ -Wl,--wrap=log10f \
+ -Wl,--wrap=powf \
+ -Wl,--wrap=powintf \
+ -Wl,--wrap=hypotf \
+ -Wl,--wrap=cbrtf \
+ -Wl,--wrap=fmodf \
+ -Wl,--wrap=dremf \
+ -Wl,--wrap=remainderf \
+ -Wl,--wrap=remquof \
+ -Wl,--wrap=expm1f \
+ -Wl,--wrap=log1pf \
+ -Wl,--wrap=fmaf
diff --git a/jack/post_rules.mk b/jack/post_rules.mk
new file mode 100644
index 0000000..fb10049
--- /dev/null
+++ b/jack/post_rules.mk
@@ -0,0 +1,14 @@
+ifeq ($(MCU_SERIES), RP2040)
+ include picosdk_math.mk
+endif
+
+ifeq ($(strip $(RP2040_MATH_IN_ROM)), yes)
+ OPT_DEFS += -DRP2040_MATH_IN_ROM
+ MCU_LDSCRIPT = RP2040_FLASH_TIMECRIT_ROM_MATH
+endif
+
+ifeq ($(strip $(MOUSE_JIGGLE_ENABLE)), yes)
+ OPT_DEFS += -DMOUSE_JIGGLE_ENABLE
+ MOUSEKEY_ENABLE = yes
+ DEFERRED_EXEC_ENABLE = yes
+endif
diff --git a/jack/rgb_matrix_user.inc b/jack/rgb_matrix_user.inc
new file mode 100644
index 0000000..2ff9e95
--- /dev/null
+++ b/jack/rgb_matrix_user.inc
@@ -0,0 +1,835 @@
+// Copyright 2025 Google LLC
+// SPDX-License-Identifier: Apache-2.0
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_GRADIENT_ENABLE)
+RGB_MATRIX_EFFECT(PALETTEFX_GRADIENT)
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_FLOW_ENABLE)
+RGB_MATRIX_EFFECT(PALETTEFX_FLOW)
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_RIPPLE_ENABLE)
+RGB_MATRIX_EFFECT(PALETTEFX_RIPPLE)
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_SPARKLE_ENABLE)
+RGB_MATRIX_EFFECT(PALETTEFX_SPARKLE)
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_VORTEX_ENABLE)
+RGB_MATRIX_EFFECT(PALETTEFX_VORTEX)
+#endif
+#if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) && \
+ (defined(PALETTEFX_ENABLE_ALL_EFFECTS) || \
+ defined(PALETTEFX_REACTIVE_ENABLE))
+RGB_MATRIX_EFFECT(PALETTEFX_REACTIVE)
+#endif
+
+#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+///////////////////////////////////////////////////////////////////////////////
+// PaletteFx function definitions
+///////////////////////////////////////////////////////////////////////////////
+
+/** Gets the selected palette. */
+static const uint16_t *palettefx_get_palette_data(void);
+
+/**
+ * @brief Computes the interpolated HSV palette color at 0 <= x < 256.
+ *
+ * Looks up and linearly interpolates `palette` at 0 <= x < 256. The color
+ * saturation and value are scaled according to rgb_matrix_config.
+ *
+ * @note `palette` must point to a PROGMEM address.
+ *
+ * @param palette Pointer to PROGMEM of a size-16 table of HSV16 colors.
+ * @param x Palette lookup position, a value in 0-255.
+ * @return HSV color.
+ */
+static hsv_t palettefx_interp_color(const uint16_t *palette, uint8_t x);
+
+/** Gets the color data for the selected palette. */
+static const uint16_t *palettefx_get_palette_data(void);
+
+/**
+ * @brief Compute a scaled 16-bit time that wraps smoothly.
+ *
+ * Computes `timer` scaled by `scale`, returning the result as a uint16.
+ * Generally, the scaled time would have a discontinuity every ~65 seconds when
+ * `timer` wraps 16-bit range. This is corrected for to wrap smoothly mod 2^16.
+ *
+ * @param timer A 32-bit timer.
+ * @param scale Scale value in 0-255.
+ * @return Scaled time.
+ */
+inline static uint16_t palettefx_scaled_time(uint32_t timer, uint8_t scale);
+
+///////////////////////////////////////////////////////////////////////////////
+// PaletteFx effects
+///////////////////////////////////////////////////////////////////////////////
+
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_GRADIENT_ENABLE)
+// "Gradient" static effect. This is essentially a palette-colored version of
+// RGB_MATRIX_GRADIENT_UP_DOWN. A vertically-sloping gradient is made, with the
+// highest color on the top keys of keyboard and the lowest color at the bottom.
+static bool PALETTEFX_GRADIENT(effect_params_t *params) {
+ // On first call, compute and cache the slope of the gradient.
+ static uint8_t gradient_slope = 0;
+ if (!gradient_slope) {
+ uint8_t y_max = 64; // To avoid overflow below, x_max must be at least 64.
+ for (uint8_t i = 0; i < RGB_MATRIX_LED_COUNT; ++i) {
+ if (g_led_config.point[i].y > y_max) {
+ y_max = g_led_config.point[i].y;
+ }
+ }
+ // Compute the quotient `255 / y_max` with 6 fractional bits and rounding.
+ gradient_slope = (64 * 255 + y_max / 2) / y_max;
+ }
+
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ const uint16_t *palette = palettefx_get_palette_data();
+
+ for (uint8_t i = led_min; i < led_max; ++i) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ const uint8_t y = g_led_config.point[i].y;
+ const uint8_t value = 255 - (((uint16_t)y * (uint16_t)gradient_slope) >> 6);
+ rgb_t rgb = rgb_matrix_hsv_to_rgb(palettefx_interp_color(palette, value));
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+
+ return rgb_matrix_check_finished_leds(led_max);
+}
+#endif
+
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_FLOW_ENABLE)
+// "Flow" animated effect. Draws moving wave patterns mimicking the appearance
+// of flowing liquid. For interesting variety of patterns, space coordinates are
+// slowly rotated and a function of several sine waves is evaluated.
+static bool PALETTEFX_FLOW(effect_params_t *params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ const uint16_t *palette = palettefx_get_palette_data();
+ const uint16_t time =
+ palettefx_scaled_time(g_rgb_timer, 1 + rgb_matrix_config.speed / 8);
+ // Compute rotation coefficients with 7 fractional bits.
+ const int8_t rot_c = cos8(time / 4) - 128;
+ const int8_t rot_s = sin8(time / 4) - 128;
+ const uint8_t omega = 32 + sin8(time) / 4;
+
+ for (uint8_t i = led_min; i < led_max; ++i) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ const uint8_t x = g_led_config.point[i].x;
+ const uint8_t y = g_led_config.point[i].y;
+
+ // Rotate (x, y) by the 2x2 rotation matrix described by rot_c, rot_s.
+ const uint8_t x1 = (uint8_t)((((int16_t)rot_c) * ((int16_t)x)) / 128) -
+ (uint8_t)((((int16_t)rot_s) * ((int16_t)y)) / 128);
+ const uint8_t y1 = (uint8_t)((((int16_t)rot_s) * ((int16_t)x)) / 128) +
+ (uint8_t)((((int16_t)rot_c) * ((int16_t)y)) / 128);
+
+ uint8_t value = scale8(sin8(x1 - 2 * time), omega) + y1 + time / 4;
+ // Evaluate `sawtooth(value)`.
+ value = 2 * ((value <= 127) ? value : (255 - value));
+
+ rgb_t rgb = rgb_matrix_hsv_to_rgb(palettefx_interp_color(palette, value));
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+
+ return rgb_matrix_check_finished_leds(led_max);
+}
+#endif
+
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_RIPPLE_ENABLE)
+// "Ripple" animated effect. Draws circular rings emanating from random points,
+// simulating water drops falling in a quiet pool.
+static bool PALETTEFX_RIPPLE(effect_params_t *params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ const uint16_t *palette = palettefx_get_palette_data();
+
+ // Each instance of this struct represents one water drop. For efficiency, at
+ // most 3 drops are active at any time.
+ static struct {
+ uint16_t time;
+ uint8_t x;
+ uint8_t y;
+ uint8_t amplitude;
+ uint8_t scale;
+ uint8_t phase;
+ } drops[3];
+ static uint32_t drop_timer = 0;
+ static uint8_t drops_tail = 0;
+
+ if (params->iter == 0) {
+ if (params->init) {
+ for (uint8_t j = 0; j < 3; ++j) {
+ drops[j].amplitude = 0;
+ }
+ drop_timer = g_rgb_timer;
+ }
+
+ if (drops[drops_tail].amplitude == 0 &&
+ timer_expired32(g_rgb_timer, drop_timer)) {
+ // Spawn a new drop, located at a random LED.
+ const uint8_t i = random8_max(RGB_MATRIX_LED_COUNT);
+ drops[drops_tail].time = (uint16_t)g_rgb_timer;
+ drops[drops_tail].x = g_led_config.point[i].x;
+ drops[drops_tail].y = g_led_config.point[i].y;
+ drops[drops_tail].amplitude = 1;
+ ++drops_tail;
+ if (drops_tail == 3) {
+ drops_tail = 0;
+ }
+ drop_timer = g_rgb_timer + 1000;
+ }
+
+ uint8_t amplitude(uint8_t t) { // Drop amplitude as a function of time.
+ if (t <= 55) {
+ return (t < 32) ? (3 + 5 * t) : 192;
+ } else {
+ t = (((uint16_t)(255 - t)) * UINT16_C(123)) >> 7;
+ return scale8(t, t);
+ }
+ }
+
+ for (uint8_t j = 0; j < 3; ++j) {
+ if (drops[j].amplitude == 0) {
+ continue;
+ }
+ const uint16_t tick = scale16by8(g_rgb_timer - drops[j].time,
+ 1 + rgb_matrix_config.speed / 4);
+ if (tick < 4 * 255) {
+ const uint8_t t = (uint8_t)(tick / 4);
+ drops[j].amplitude = amplitude(t);
+ drops[j].scale = 255 / (1 + t / 2);
+ drops[j].phase = (uint8_t)tick;
+ } else {
+ drops[j].amplitude = 0; // Animation for this drop is complete.
+ }
+ }
+ }
+
+ for (uint8_t i = led_min; i < led_max; ++i) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ int16_t value = 128;
+
+ for (uint8_t j = 0; j < 3; ++j) {
+ if (drops[j].amplitude == 0) {
+ continue;
+ }
+
+ const uint8_t x = abs8((g_led_config.point[i].x - drops[j].x) / 2);
+ const uint8_t y = abs8((g_led_config.point[i].y - drops[j].y) / 2);
+ const uint8_t r = sqrt16(x * x + y * y);
+ const uint16_t r_scaled = (uint16_t)r * (uint16_t)drops[j].scale;
+
+ if (r_scaled < 255) {
+ // The drop is made from a radial sine wave modulated by a smooth bump
+ // to localize its spatial extent.
+ const uint8_t bump = scale8(ease8InOutApprox(255 - (uint8_t)r_scaled),
+ drops[j].amplitude);
+ const int8_t wave = (int16_t)cos8(8 * r - drops[j].phase) - 128;
+ value += ((int16_t)wave * (int16_t)bump) / 128;
+ }
+ }
+
+ // Clip `value` to 0-255 range.
+ if (value < 0) {
+ value = 0;
+ }
+ if (value > 255) {
+ value = 255;
+ }
+ rgb_t rgb =
+ rgb_matrix_hsv_to_rgb(palettefx_interp_color(palette, (uint8_t)value));
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+
+ return rgb_matrix_check_finished_leds(led_max);
+}
+#endif
+
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_SPARKLE_ENABLE)
+// "Sparkle" effect. Each LED is animated by a sine wave with pseudorandom
+// phase, so that the matrix "sparkles." All the LED sines are modulated by a
+// global amplitude factor, which varies by a slower sine wave, so that the
+// matrix as a whole periodically brightens and dims.
+static bool PALETTEFX_SPARKLE(effect_params_t *params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ const uint16_t *palette = palettefx_get_palette_data();
+ const uint8_t time =
+ palettefx_scaled_time(g_rgb_timer, 1 + rgb_matrix_config.speed / 8);
+ const uint8_t amplitude = 128 + sin8(time) / 2;
+ uint16_t rand_state = 1 + params->iter;
+
+ for (uint8_t i = led_min; i < led_max; ++i) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ // Multiplicative congruential generator for a random phase for each LED.
+ rand_state *= UINT16_C(36563);
+ const uint8_t phase = (uint8_t)(rand_state >> 8);
+
+ const uint8_t value = scale8(sin8(2 * time + phase), amplitude);
+
+ rgb_t rgb = rgb_matrix_hsv_to_rgb(palettefx_interp_color(palette, value));
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+
+ return rgb_matrix_check_finished_leds(led_max);
+}
+#endif
+
+#if defined(PALETTEFX_ENABLE_ALL_EFFECTS) || defined(PALETTEFX_SPARKLE_ENABLE)
+// "Vortex" animated effect. LEDs are animated according to a polar function
+// with the appearance of a spinning vortex centered on k_rgb_matrix_center.
+static bool PALETTEFX_VORTEX(effect_params_t *params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ const uint16_t *palette = palettefx_get_palette_data();
+ const uint16_t time =
+ palettefx_scaled_time(g_rgb_timer, 1 + rgb_matrix_config.speed / 4);
+
+ for (uint8_t i = led_min; i < led_max; ++i) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ const int16_t x = g_led_config.point[i].x - k_rgb_matrix_center.x;
+ const int16_t y = g_led_config.point[i].y - k_rgb_matrix_center.y;
+ uint8_t value = sin8(atan2_8(y, x) + time - sqrt16(x * x + y * y) / 2);
+
+ rgb_t rgb = rgb_matrix_hsv_to_rgb(palettefx_interp_color(palette, value));
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+
+ return rgb_matrix_check_finished_leds(led_max);
+}
+#endif
+
+#if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) && \
+ (defined(PALETTEFX_ENABLE_ALL_EFFECTS) || \
+ defined(PALETTEFX_REACTIVE_ENABLE))
+// Reactive animated effect. This effect is "reactive," it responds to key
+// presses. For each key press, LEDs near the key change momentarily.
+static bool PALETTEFX_REACTIVE(effect_params_t *params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ const uint16_t *palette = palettefx_get_palette_data();
+ const uint8_t count = g_last_hit_tracker.count;
+
+ uint8_t amplitude(uint8_t t) { // Bump amplitude as a function of time.
+ if (t <= 55) {
+ return (t < 32) ? (4 + 8 * t) : 255;
+ } else {
+ t = (((uint16_t)(255 - t)) * UINT16_C(164)) >> 7;
+ return scale8(t, t);
+ }
+ }
+
+ uint8_t hit_amplitude[LED_HITS_TO_REMEMBER] = {0};
+ for (uint8_t j = 0; j < count; ++j) {
+ const uint16_t tick =
+ scale16by8(g_last_hit_tracker.tick[j], 1 + rgb_matrix_config.speed / 4);
+ if (tick <= 255) {
+ hit_amplitude[j] = amplitude((uint8_t)tick);
+ }
+ }
+
+ for (uint8_t i = led_min; i < led_max; ++i) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ uint8_t value = 0;
+
+ for (uint8_t j = 0; j < count; ++j) {
+ if (hit_amplitude[j] == 0) {
+ continue;
+ }
+
+ uint8_t dx =
+ abs8((g_led_config.point[i].x - g_last_hit_tracker.x[j]) / 2);
+ uint8_t dy =
+ abs8((g_led_config.point[i].y - g_last_hit_tracker.y[j]) / 2);
+ if (dx < 21 && dy < 21) {
+ const uint16_t dist_sqr = dx * dx + dy * dy;
+ if (dist_sqr < 21 * 21) { // Accumulate a radial bump for each hit.
+ const uint8_t dist = sqrt16(dist_sqr);
+ value = qadd8(value, scale8(255 - 12 * dist, hit_amplitude[j]));
+ // Early loop exit where the value has saturated.
+ if (value == 255) {
+ break;
+ }
+ }
+ }
+ }
+
+ hsv_t hsv = palettefx_interp_color(palette, value);
+ if (value < 32) { // Make the background dark regardless of palette.
+ hsv.v = scale8(hsv.v, 64 + 6 * value);
+ }
+
+ const rgb_t rgb = rgb_matrix_hsv_to_rgb(hsv);
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ return rgb_matrix_check_finished_leds(led_max);
+}
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// PaletteFx implementation
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * @brief 16-bit HSV color.
+ *
+ * Represents a color with a 16-bit value in hue-saturation-value (HSV) space.
+ * Components are packed as:
+ *
+ * - Hue: lowest 8 bits.
+ * - Saturation: middle 4 bits.
+ * - Value: highest 4 bits.
+ */
+#define HSV16(h, s, v) ((((v) >> 4) << 12) | (((s) >> 4) << 8) | ((h) & 0xff))
+
+/** Unpacks 16-bit HSV color to hsv_t. */
+static hsv_t unpack_hsv16(uint16_t hsv16) {
+ return (hsv_t){
+ .h = (uint8_t)hsv16,
+ .s = ((uint8_t)(hsv16 >> 8) & 0x0f) * 17,
+ .v = ((uint8_t)(hsv16 >> 12) & 0x0f) * 17,
+ };
+}
+
+/** PaletteFx palette color data. */
+static const uint16_t palettefx_palettes[][16] PROGMEM = {
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || \
+ defined(PALETTEFX_AFTERBURN_ENABLE)
+ // "Afterburn" palette.
+ {
+ HSV16(139, 255, 85),
+ HSV16(134, 255, 85),
+ HSV16(131, 255, 102),
+ HSV16(128, 255, 102),
+ HSV16(127, 187, 102),
+ HSV16(125, 119, 102),
+ HSV16(124, 51, 102),
+ HSV16(125, 0, 119),
+ HSV16(15, 17, 119),
+ HSV16(17, 51, 153),
+ HSV16(18, 102, 170),
+ HSV16(19, 153, 204),
+ HSV16(21, 187, 238),
+ HSV16(23, 238, 255),
+ HSV16(26, 255, 255),
+ HSV16(30, 255, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_AMBER_ENABLE)
+ // "Amber" palette.
+ {
+ HSV16(5, 187, 170),
+ HSV16(15, 221, 170),
+ HSV16(22, 238, 187),
+ HSV16(23, 238, 187),
+ HSV16(25, 255, 204),
+ HSV16(27, 255, 221),
+ HSV16(29, 255, 238),
+ HSV16(29, 255, 255),
+ HSV16(28, 187, 255),
+ HSV16(30, 68, 255),
+ HSV16(32, 34, 255),
+ HSV16(32, 34, 255),
+ HSV16(26, 119, 255),
+ HSV16(24, 238, 255),
+ HSV16(21, 221, 255),
+ HSV16(16, 204, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_BADWOLF_ENABLE)
+ // "Bad Wolf" palette. Inspired by the Bad Wolf theme by Steve Losh, which
+ // is
+ // distributed under MIT/X11 license.
+ // https://github.com/sjl/badwolf/tree/61d75affa51d40213d671edc9c8ff83992d7fd6f
+ {
+ HSV16(14, 34, 0),
+ HSV16(245, 255, 255),
+ HSV16(245, 255, 255),
+ HSV16(245, 255, 255),
+ HSV16(14, 34, 0),
+ HSV16(14, 34, 0),
+ HSV16(14, 34, 0),
+ HSV16(14, 34, 0),
+ HSV16(14, 34, 0),
+ HSV16(14, 34, 0),
+ HSV16(24, 17, 136),
+ HSV16(28, 0, 255),
+ HSV16(24, 17, 136),
+ HSV16(14, 34, 0),
+ HSV16(14, 34, 0),
+ HSV16(14, 34, 0),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_CARNIVAL_ENABLE)
+ // "Carnival" palette.
+ {
+ HSV16(132, 255, 85),
+ HSV16(121, 187, 85),
+ HSV16(108, 170, 102),
+ HSV16(90, 153, 119),
+ HSV16(70, 187, 136),
+ HSV16(57, 255, 153),
+ HSV16(50, 255, 187),
+ HSV16(44, 255, 204),
+ HSV16(39, 255, 238),
+ HSV16(32, 255, 255),
+ HSV16(27, 255, 255),
+ HSV16(22, 255, 255),
+ HSV16(18, 255, 255),
+ HSV16(8, 221, 238),
+ HSV16(252, 204, 238),
+ HSV16(241, 255, 221),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_CLASSIC_ENABLE)
+ // "Classic" palette.
+ {
+ HSV16(150, 255, 85),
+ HSV16(151, 238, 119),
+ HSV16(160, 136, 119),
+ HSV16(176, 102, 136),
+ HSV16(193, 85, 136),
+ HSV16(216, 85, 136),
+ HSV16(234, 102, 153),
+ HSV16(247, 119, 187),
+ HSV16(3, 153, 204),
+ HSV16(10, 204, 221),
+ HSV16(15, 255, 255),
+ HSV16(18, 255, 255),
+ HSV16(23, 255, 255),
+ HSV16(24, 204, 255),
+ HSV16(25, 136, 255),
+ HSV16(26, 85, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_DRACULA_ENABLE)
+ // "Dracula" palette. Inspired by the Dracula theme by Zeno Rocha, which is
+ // distributed under MIT license.
+ // https://github.com/dracula/dracula-theme/tree/ac4dc82dab2a3c35e5cac0cd80c97fbf4c2ca986
+ {
+ HSV16(165, 153, 119),
+ HSV16(167, 153, 136),
+ HSV16(170, 170, 187),
+ HSV16(173, 170, 221),
+ HSV16(177, 170, 238),
+ HSV16(183, 170, 255),
+ HSV16(190, 170, 255),
+ HSV16(200, 153, 255),
+ HSV16(216, 153, 255),
+ HSV16(230, 170, 255),
+ HSV16(2, 153, 255),
+ HSV16(29, 153, 238),
+ HSV16(44, 255, 255),
+ HSV16(53, 238, 255),
+ HSV16(63, 238, 238),
+ HSV16(85, 238, 238),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_GROOVY_ENABLE)
+ // "Groovy" palette. Inspired by the Gruvbox theme by Pavel Pertsev, which
+ // is
+ // distributed under MIT/X11 license.
+ // https://github.com/morhetz/gruvbox/tree/f1ecde848f0cdba877acb0c740320568252cc482
+ {
+ HSV16(26, 136, 187),
+ HSV16(23, 85, 102),
+ HSV16(21, 85, 85),
+ HSV16(21, 85, 85),
+ HSV16(21, 85, 85),
+ HSV16(17, 102, 102),
+ HSV16(5, 204, 255),
+ HSV16(4, 255, 255),
+ HSV16(4, 255, 255),
+ HSV16(7, 204, 255),
+ HSV16(23, 136, 187),
+ HSV16(26, 136, 187),
+ HSV16(28, 136, 187),
+ HSV16(50, 238, 238),
+ HSV16(54, 255, 238),
+ HSV16(54, 255, 238),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_NOTPINK_ENABLE)
+ // "Not Pink" palette.
+ {
+ HSV16(9, 255, 153),
+ HSV16(3, 221, 187),
+ HSV16(252, 204, 187),
+ HSV16(248, 204, 187),
+ HSV16(247, 187, 204),
+ HSV16(245, 187, 238),
+ HSV16(244, 170, 255),
+ HSV16(245, 153, 255),
+ HSV16(252, 102, 255),
+ HSV16(16, 68, 255),
+ HSV16(40, 34, 255),
+ HSV16(32, 51, 255),
+ HSV16(6, 85, 255),
+ HSV16(248, 136, 255),
+ HSV16(247, 187, 255),
+ HSV16(249, 221, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_PHOSPHOR_ENABLE)
+ // "Phosphor" palette.
+ {
+ HSV16(116, 102, 34),
+ HSV16(113, 170, 51),
+ HSV16(113, 255, 68),
+ HSV16(110, 255, 68),
+ HSV16(109, 255, 85),
+ HSV16(105, 255, 102),
+ HSV16(95, 238, 102),
+ HSV16(85, 238, 119),
+ HSV16(84, 255, 136),
+ HSV16(84, 255, 153),
+ HSV16(83, 255, 187),
+ HSV16(80, 238, 204),
+ HSV16(69, 221, 238),
+ HSV16(46, 204, 255),
+ HSV16(42, 153, 255),
+ HSV16(40, 102, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || \
+ defined(PALETTEFX_POLARIZED_ENABLE)
+ // "Polarized" palette. Inspired by the Solarized theme by Ethan Schoonover,
+ // which is distributed under MIT license.
+ // https://github.com/altercation/solarized/tree/62f656a02f93c5190a8753159e34b385588d5ff3
+ {
+ HSV16(139, 255, 68),
+ HSV16(139, 221, 85),
+ HSV16(139, 204, 102),
+ HSV16(138, 204, 119),
+ HSV16(137, 204, 136),
+ HSV16(137, 187, 170),
+ HSV16(137, 153, 187),
+ HSV16(132, 170, 187),
+ HSV16(126, 187, 238),
+ HSV16(124, 102, 255),
+ HSV16(124, 102, 255),
+ HSV16(124, 187, 255),
+ HSV16(130, 170, 204),
+ HSV16(137, 153, 187),
+ HSV16(137, 153, 204),
+ HSV16(137, 136, 221),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_ROSEGOLD_ENABLE)
+ // "Rose Gold" palette.
+ {
+ HSV16(246, 255, 204),
+ HSV16(250, 238, 221),
+ HSV16(253, 221, 238),
+ HSV16(1, 221, 255),
+ HSV16(6, 221, 255),
+ HSV16(12, 221, 255),
+ HSV16(18, 204, 255),
+ HSV16(22, 170, 255),
+ HSV16(20, 204, 255),
+ HSV16(17, 221, 255),
+ HSV16(12, 221, 255),
+ HSV16(7, 221, 255),
+ HSV16(255, 204, 255),
+ HSV16(248, 204, 255),
+ HSV16(241, 238, 255),
+ HSV16(235, 255, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_SPORT_ENABLE)
+ // "Sport" palette.
+ {
+ HSV16(156, 102, 51),
+ HSV16(155, 102, 68),
+ HSV16(155, 102, 68),
+ HSV16(154, 102, 68),
+ HSV16(155, 102, 85),
+ HSV16(156, 85, 102),
+ HSV16(158, 68, 119),
+ HSV16(159, 51, 136),
+ HSV16(158, 17, 153),
+ HSV16(130, 0, 170),
+ HSV16(49, 17, 204),
+ HSV16(42, 51, 238),
+ HSV16(39, 85, 255),
+ HSV16(37, 119, 255),
+ HSV16(36, 170, 255),
+ HSV16(36, 255, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || \
+ defined(PALETTEFX_SYNTHWAVE_ENABLE)
+ // "Synthwave" palette.
+ {
+ HSV16(170, 221, 119),
+ HSV16(180, 221, 153),
+ HSV16(196, 238, 153),
+ HSV16(209, 255, 153),
+ HSV16(220, 255, 170),
+ HSV16(227, 255, 204),
+ HSV16(233, 255, 238),
+ HSV16(245, 204, 255),
+ HSV16(3, 170, 255),
+ HSV16(13, 187, 255),
+ HSV16(21, 204, 255),
+ HSV16(28, 221, 255),
+ HSV16(43, 255, 255),
+ HSV16(42, 255, 255),
+ HSV16(68, 68, 255),
+ HSV16(132, 255, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_THERMAL_ENABLE)
+ // "Thermal" palette.
+ {
+ HSV16(7, 0, 17),
+ HSV16(8, 0, 17),
+ HSV16(12, 0, 34),
+ HSV16(13, 0, 51),
+ HSV16(15, 17, 51),
+ HSV16(16, 17, 68),
+ HSV16(20, 34, 85),
+ HSV16(95, 0, 102),
+ HSV16(126, 85, 119),
+ HSV16(112, 85, 153),
+ HSV16(54, 136, 187),
+ HSV16(39, 238, 221),
+ HSV16(33, 255, 255),
+ HSV16(25, 238, 255),
+ HSV16(13, 238, 255),
+ HSV16(5, 238, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || defined(PALETTEFX_VIRIDIS_ENABLE)
+ // "Viridis" palette. Inspired by the Viridis colormap by Stefan van der
+ // Walt
+ // and Nathaniel Smith, which is distributed under CC0 license.
+ // https://github.com/BIDS/colormap/blob/bc549477db0c12b54a5928087552ad2cf274980f/colormaps.py
+ {
+ HSV16(204, 221, 102),
+ HSV16(194, 187, 119),
+ HSV16(183, 153, 136),
+ HSV16(169, 119, 153),
+ HSV16(155, 153, 153),
+ HSV16(145, 170, 153),
+ HSV16(137, 187, 153),
+ HSV16(130, 204, 153),
+ HSV16(123, 221, 153),
+ HSV16(117, 221, 170),
+ HSV16(108, 187, 187),
+ HSV16(93, 153, 204),
+ HSV16(71, 170, 221),
+ HSV16(56, 221, 221),
+ HSV16(46, 255, 238),
+ HSV16(39, 255, 255),
+ },
+#endif
+#if defined(PALETTEFX_ENABLE_ALL_PALETTES) || \
+ defined(PALETTEFX_WATERMELON_ENABLE)
+ // "Watermelon" palette.
+ {
+ HSV16(67, 255, 102),
+ HSV16(55, 255, 153),
+ HSV16(47, 255, 204),
+ HSV16(48, 136, 238),
+ HSV16(48, 68, 255),
+ HSV16(45, 34, 255),
+ HSV16(39, 34, 255),
+ HSV16(17, 85, 255),
+ HSV16(8, 187, 255),
+ HSV16(1, 255, 255),
+ HSV16(2, 238, 255),
+ HSV16(2, 238, 255),
+ HSV16(0, 238, 255),
+ HSV16(253, 255, 238),
+ HSV16(254, 255, 238),
+ HSV16(255, 255, 221),
+ },
+#endif
+#if __has_include("palettefx_user.inc") // Include user palettes if present.
+#include "palettefx_user.inc"
+#endif
+};
+/** Number of palettes. User palettes, if any, are included in the count. */
+#define NUM_PALETTEFX_PALETTES \
+ (sizeof(palettefx_palettes) / sizeof(*palettefx_palettes))
+
+// Validate at compile time that `1 <= NUM_PALETTEFX_PALETTES <= 32`. The upper
+// limit is due to using RGB Matrix's hue config to select palettes.
+_Static_assert(
+ NUM_PALETTEFX_PALETTES >= 1,
+ "palettefx: No palettes are enabled. To fix: enable all built-in palettes "
+ "by adding in config.h `#define PALETTE_ENABLE_ALL_PALETTES`, or enable at "
+ "least one with `#define PALETTE_<name>_ENABLE`, or define at least one "
+ "custom palette in palettefx_user.inc.");
+_Static_assert(
+ NUM_PALETTEFX_PALETTES <= 256 / RGB_MATRIX_HUE_STEP,
+ "palettefx: Too many palettes. Up to 32 (= 256 / RGB_MATRIX_HUE_STEP) "
+ "palettes are supported. Otherwise, some palettes would be unreachable.");
+
+/** Gets the index of the selected palette. */
+static uint8_t palettefx_get_palette(void) {
+ uint8_t i =
+ (rgb_matrix_get_hue() / RGB_MATRIX_HUE_STEP) % NUM_PALETTEFX_PALETTES;
+
+ if (256 % (RGB_MATRIX_HUE_STEP * NUM_PALETTEFX_PALETTES) != 0) {
+ // Hue wraps mod 256. If NUM_PALETTEFX_PALETTES is not a power of 2, modulo
+ // 256 wraps would jump, and adjustment is needed to cycle as desired:
+ //
+ // * If the hue is a step or less from 256, assume it has wrapped down
+ // from 0 and the last palette is selected.
+ // * Otherwise, i = ((hue / step) % NUM_PALETTEFX_PALETTES) is used. If
+ // 256 - 2 * step <= hue < 256 - step, hue is set to (step * i).
+ hsv_t hsv = rgb_matrix_get_hsv();
+ if (hsv.h >= 256 - 2 * RGB_MATRIX_HUE_STEP) {
+ if (hsv.h >= 256 - RGB_MATRIX_HUE_STEP) {
+ i = NUM_PALETTEFX_PALETTES - 1;
+ hsv.h = RGB_MATRIX_HUE_STEP *
+ ((256 / (RGB_MATRIX_HUE_STEP * NUM_PALETTEFX_PALETTES)) *
+ NUM_PALETTEFX_PALETTES -
+ 1);
+ } else {
+ i %= NUM_PALETTEFX_PALETTES;
+ hsv.h = RGB_MATRIX_HUE_STEP * i;
+ }
+ rgb_matrix_sethsv_noeeprom(hsv.h, hsv.s, hsv.v);
+ }
+ }
+
+ return i;
+}
+
+static const uint16_t *palettefx_get_palette_data(void) {
+ return palettefx_palettes[palettefx_get_palette()];
+}
+
+static hsv_t palettefx_interp_color(const uint16_t *palette, uint8_t x) {
+ // Clamp `x` to [8, 247] and subtract 8, mapping to the range [0, 239].
+ x = (x <= 8) ? 0 : ((x < 247) ? (x - 8) : 239);
+ // Get index into the palette, 0 <= i <= 14.
+ const uint8_t i = x >> 4;
+ // Fractional position between i and (i + 1).
+ const uint8_t frac = x << 4;
+
+ // Look up palette colors at i and (i + 1).
+ hsv_t a = unpack_hsv16(pgm_read_word(&palette[i]));
+ hsv_t b = unpack_hsv16(pgm_read_word(&palette[i + 1]));
+
+ // Linearly interpolate in HSV, accounting for wrapping in hue.
+ const uint8_t hue_wrap = 128 & (a.h >= b.h ? (a.h - b.h) : (b.h - a.h));
+ return (hsv_t){
+ .h = lerp8by8(a.h ^ hue_wrap, b.h ^ hue_wrap, frac) ^ hue_wrap,
+ .s = scale8(lerp8by8(a.s, b.s, frac), rgb_matrix_config.hsv.s),
+ .v = scale8(lerp8by8(a.v, b.v, frac), rgb_matrix_config.hsv.v),
+ };
+}
+
+static uint16_t palettefx_scaled_time(uint32_t timer, uint8_t scale) {
+ static uint16_t wrap_correction = 0;
+ static uint8_t last_high_byte = 0;
+ const uint8_t high_byte = (uint8_t)(timer >> 16);
+
+ if (last_high_byte != high_byte) {
+ last_high_byte = high_byte;
+ wrap_correction += ((uint16_t)scale) << 8;
+ }
+
+ return scale16by8(timer, scale) + wrap_correction;
+}
+
+#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/jack/rules.mk b/jack/rules.mk
index f75ba4d..71ddad7 100644
--- a/jack/rules.mk
+++ b/jack/rules.mk
@@ -1,50 +1,49 @@
LTO_ENABLE = yes
TOP_SYMBOLS = yes
-NRKO_ENABLE = yes
-COMBO_ENABLE = yes
MAGIC_ENABLE = no
+COMBO_ENABLE = yes
+COMMAND_ENABLE = no
+CONSOLE_ENABLE = no
UNICODE_COMMON = yes
+GRAVE_ESC_ENABLE = no
EXTRAKEY_ENABLE = yes
BOOTMAGIC_ENABLE = yes
CAPS_WORD_ENABLE = yes
TAP_DANCE_ENABLE = yes
+SPACE_CADET_ENABLE = no
AUTOCORRECT_ENABLE = yes
MOUSE_JIGGLE_ENABLE = yes
+CUSTOM_TAP_CODE_ENABLE = no
DEBOUNCE_TYPE = asym_eager_defer_pk
AVR_CFLAGS += -mrelax
-INTROSPECTION_KEYMAP_C = jack.c
+INTROSPECTION_KEYMAP_C = introspection.c
-SRC += tapping.c
+SRC += $(USER_PATH)/jack.c $(USER_PATH)/tapping.c
ifeq ($(strip $(OLED_ENABLE)), yes)
- SRC += oled.c
+ SRC += $(USER_PATH)/oled.c
WPM_ENABLE = yes
endif
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
- SRC += color.c
+ RGB_MATRIX_CUSTOM_USER = yes
+ SRC += $(USER_PATH)/color.c
endif
ifeq ($(strip $(UNICODE_COMMON)), yes)
UNICODE_ENABLE = no
- SRC += unicode.c
-endif
-
-ifeq ($(PLATFORM), CHIBIOS)
- RANDWORD = yes
- EXTRAFLAGS += -Os
-endif
-
-ifneq ($(findstring Gentoo, $(shell arm-none-eabi-gcc --version)),)
- EXTRAFLAGS += -U_FORTIFY_SOURCE
+ SRC += $(USER_PATH)/unicode.c
endif
-ifeq ($(strip $(RANDWORD)), yes)
- OPT_DEFS += -DRANDWORD
+ifeq ($(strip $(CUSTOM_TAP_CODE_ENABLE)), yes)
+ OPT_DEFS += -DCUSTOM_TAP_CODE_ENABLE
+ SRC += $(USER_PATH)tap_code.c
endif
-ifeq ($(strip $(MOUSE_JIGGLE_ENABLE)), yes)
- OPT_DEFS += -DMOUSE_JIGGLE_ENABLE
- MOUSEKEY_ENABLE = yes
- DEFERRED_EXEC_ENABLE = yes
+ifeq ($(PLATFORM), CHIBIOS)
+ ifeq ($(MCU_SERIES), RP2040)
+ RP2040_MATH_IN_ROM = no
+ PROGRAM_CMD = doas picotool load $(BUILD_DIR)/$(TARGET).uf2
+ endif
+ EXTRAFLAGS += -O3
endif
diff --git a/jack/tap_code.c b/jack/tap_code.c
new file mode 100644
index 0000000..a430200
--- /dev/null
+++ b/jack/tap_code.c
@@ -0,0 +1,159 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "jack.h"
+
+#define TAP_CODE_BUFFER_SIZE 32
+#define NEXT_TAP_CODE_POS(p) p = ((p + 1) & (TAP_CODE_BUFFER_SIZE - 1))
+
+#define CHECK_REGISTERED_MT(keycode) \
+ (keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX && \
+ (get_mods() & ((keycode & 0x0F00) >> 8)))
+
+#define PGM_LOADBIT(mem, pos) \
+ ((pgm_read_byte(&((mem)[(pos) / 8])) >> ((pos) % 8)) & 1)
+
+typedef struct {
+ uint8_t code;
+ uint8_t mods;
+ uint16_t delay;
+ bool register_tap;
+} tap_code_buffer;
+
+tap_code_buffer tap_codes[TAP_CODE_BUFFER_SIZE] = {0};
+static uint16_t process_pos = 0, queue_pos = 0;
+static fast_timer_t process_timer = 0;
+
+void tap_code_buffer_init(void) { memset(&tap_codes, 0, sizeof(tap_codes)); }
+
+void tap_code_register(uint8_t code, uint8_t mods, uint16_t delay,
+ bool register_tap) {
+ if (code && !delay) {
+ if (mods)
+ register_mods(mods);
+ register_code(code);
+ unregister_code(code);
+ if (mods)
+ unregister_mods(mods);
+ return;
+ }
+ if (tap_codes[queue_pos].code) {
+ if (!process_timer)
+ process_tap_code_buffer();
+ while (timer_elapsed_fast(process_timer) < tap_codes[process_pos].delay)
+ wait_ms(1);
+ process_tap_code_buffer();
+ }
+ tap_codes[queue_pos].code = code;
+ tap_codes[queue_pos].mods = mods;
+ tap_codes[queue_pos].delay = delay;
+ tap_codes[queue_pos].register_tap = register_tap;
+ NEXT_TAP_CODE_POS(queue_pos);
+}
+
+void process_tap_code_buffer(void) {
+ if (tap_codes[process_pos].code) {
+ if (!process_timer) {
+ if (tap_codes[process_pos].register_tap) {
+ if (tap_codes[process_pos].mods) {
+ add_weak_mods(tap_codes[process_pos].mods);
+ }
+ register_code(tap_codes[process_pos].code);
+ }
+ process_timer = timer_read_fast();
+ } else if (timer_elapsed_fast(process_timer) >=
+ tap_codes[process_pos].delay) {
+ del_weak_mods(tap_codes[process_pos].mods);
+ unregister_code(tap_codes[process_pos].code);
+ tap_codes[process_pos].code = 0;
+ tap_codes[process_pos].mods = 0;
+ tap_codes[process_pos].delay = 0;
+ tap_codes[process_pos].register_tap = false;
+ process_timer = 0;
+ NEXT_TAP_CODE_POS(process_pos);
+ }
+ }
+}
+
+void tap_code(uint8_t code) {
+ tap_code_register(code, 0, TAP_CODE_DELAY, true);
+}
+
+void tap_code_chord(uint8_t code) {
+ register_code(code);
+ tap_code_register(code, 0, TAP_CODE_DELAY, false);
+}
+
+void tap_code_delay(uint8_t code, uint16_t delay) {
+ tap_code_register(code, 0, delay, true);
+}
+
+void tap_code16(uint16_t code) {
+ tap_code_register((uint8_t)code, extract_mod_bits(code), TAP_CODE_DELAY,
+ true);
+}
+
+bool process_record_taps(uint16_t keycode, keyrecord_t *record) {
+ static fast_timer_t prev_interrupt = 0, prev_key_down = 0;
+ switch (keycode) {
+ case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
+ case QK_MOD_TAP ... QK_MOD_TAP_MAX:
+ if (record->event.pressed &&
+ ((timer_elapsed_fast(prev_interrupt) < TAPPING_TERM) ||
+ (timer_elapsed_fast(prev_key_down) < 200) ||
+ CHECK_REGISTERED_MT(keycode))) {
+ tap_code_chord(keycode & 0xFF);
+ record->tap.count = 0xF;
+ prev_interrupt = timer_read_fast();
+ return false;
+ }
+ if (record->tap.count == 0xF)
+ return false;
+ if (record->tap.count > 1 && (keycode == ESCLWR || keycode == RSEBSP)) {
+ if (record->event.pressed) {
+ register_code(keycode & 0xFF);
+ return false;
+ } else {
+ unregister_code(keycode & 0xFF);
+ return false;
+ }
+ }
+ if (record->tap.count && record->event.pressed) {
+ if (keycode >= QK_MOD_TAP || keycode == ESCLWR || keycode == RSEBSP)
+ tap_code_chord(keycode & 0xFF);
+ else
+ tap_code(keycode & 0xFF);
+ return false;
+ } else if (record->tap.interrupted &&
+ (keycode >= QK_MOD_TAP || keycode == ESCLWR ||
+ keycode == RSEBSP)) {
+ tap_code_chord(keycode & 0xFF);
+ prev_interrupt = timer_read_fast();
+ return false;
+ }
+ default:
+ if (record->event.pressed)
+ prev_key_down = timer_read_fast();
+ break;
+ }
+ return true;
+}
+
+extern const uint8_t ascii_to_shift_lut[16];
+extern const uint8_t ascii_to_keycode_lut[128];
+
+void tap_char(char ascii_code) {
+ uint8_t keycode = pgm_read_byte(&ascii_to_keycode_lut[(uint8_t)ascii_code]);
+ bool shifted = PGM_LOADBIT(ascii_to_shift_lut, (uint8_t)ascii_code);
+ tap_code_register(keycode, shifted ? MOD_BIT(KC_LSFT) : 0, TAP_CODE_DELAY,
+ true);
+}
+
+void tap_string(const char *str) {
+ while (1) {
+ char ascii_code = pgm_read_byte(str);
+ if (!ascii_code)
+ break;
+ tap_char(ascii_code);
+ ++str;
+ }
+}
diff --git a/jack/tapping.c b/jack/tapping.c
index 91690d5..d58b70b 100644
--- a/jack/tapping.c
+++ b/jack/tapping.c
@@ -1,9 +1,9 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jack.h"
-#ifdef RANDWORD
-#include "dict.h"
-uint16_t word = 0;
+
+#ifndef CUSTOM_TAP_CODE_ENABLE
+#define tap_string send_string_P
#endif
#define INTERCEPT_MOD_TAP(mod, keycode) \
@@ -14,64 +14,6 @@ uint16_t word = 0;
} \
break;
-static uint8_t select_word_state = NONE;
-
-bool process_select_word(uint16_t keycode, keyrecord_t *record) {
- if (keycode == KC_LSFT || keycode == KC_RSFT)
- return true;
- if (keycode == SELWORD && record->event.pressed) {
- const bool shifted = get_mods() & MOD_MASK_SHIFT;
- if (!shifted) {
- set_mods(MOD_BIT(KC_LCTL));
- if (select_word_state == NONE) {
- send_keyboard_report();
- tap_code(KC_RGHT);
- tap_code(KC_LEFT);
- }
- register_mods(MOD_BIT(KC_LSFT));
- register_code(KC_RGHT);
- select_word_state = WORD;
- } else {
- if (select_word_state == NONE) {
- clear_mods();
- send_keyboard_report();
- tap_code(KC_HOME);
- register_mods(MOD_BIT(KC_LSFT));
- tap_code(KC_END);
- set_mods(get_mods());
- select_word_state = FIRST_LINE;
- } else {
- register_code(KC_DOWN);
- select_word_state = LINE;
- }
- }
- return false;
- }
- switch (select_word_state) {
- case WORD:
- unregister_code(KC_RGHT);
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
- select_word_state = SELECTED;
- break;
- case FIRST_LINE:
- select_word_state = SELECTED;
- break;
- case LINE:
- unregister_code(KC_DOWN);
- select_word_state = SELECTED;
- break;
- case SELECTED:
- if (keycode == KC_ESC) {
- tap_code(KC_RGHT);
- select_word_state = NONE;
- return false;
- }
- default:
- select_word_state = NONE;
- }
- return true;
-}
-
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LWRSPC:
@@ -88,6 +30,7 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
}
}
+#ifdef TAP_DANCE_ENABLE
void td_reset(tap_dance_state_t *state, void *user_data) {
clear_keyboard();
layer_clear();
@@ -128,14 +71,17 @@ void raise_paste(tap_dance_state_t *state, void *user_data) {
else if (state->count == 1)
tap_code16(C(S(KC_V)));
}
+#endif
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef UNICODE_COMMON_ENABLE
if (!process_record_unicode(keycode, record))
return false;
#endif
- if (!process_select_word(keycode, record))
+#ifdef CUSTOM_TAP_CODE_ENABLE
+ if (!process_record_taps(keycode, record))
return false;
+#endif
#ifdef OLED_ENABLE
if (record->event.pressed) {
oled_timer_reset();
@@ -170,12 +116,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case UPDIR:
if (record->event.pressed)
- SEND_STRING("../");
+ tap_string(PSTR("../"));
break;
- case NUKE:
+ case REMOVE:
if (record->event.pressed) {
- tap_code16(C(KC_A));
- SEND_STRING("\b```suggestion\n```");
+ tap_string(PSTR("```suggestion\n```"));
+ tap_code(KC_UP);
+ tap_code(KC_UP);
+ tap_code(KC_ENT);
+ tap_code(KC_UP);
}
break;
INTERCEPT_MOD_TAP(LALT_T, KC_EXLM)
@@ -186,15 +135,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
INTERCEPT_MOD_TAP(RCTL_T, KC_ASTR)
INTERCEPT_MOD_TAP(RGUI_T, KC_LPRN)
INTERCEPT_MOD_TAP(RALT_T, KC_RPRN)
- case RWORD:
-#ifdef RANDWORD
- word = rand() % NUM_WORDS;
- if (record->event.pressed) {
- send_string(dict[word]);
- tap_code(KC_SPC);
- }
-#endif
- break;
}
return true;
}
diff --git a/jack/unicode.c b/jack/unicode.c
index 74c0ccc..a07a862 100644
--- a/jack/unicode.c
+++ b/jack/unicode.c
@@ -1,7 +1,18 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jack.h"
+enum unicode_mode {
+ NOMODE,
+ WIDE,
+ SCRIPT,
+ BLOCKS,
+ REGIONAL,
+ AUSSIE,
+ ZALGO,
+ SUPER
+};
+
uint8_t typing_mode = NOMODE;
typedef uint32_t (*translator_function_t)(bool is_shifted, uint32_t keycode);
@@ -157,7 +168,7 @@ DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_super,
);
bool process_record_aussie(uint16_t keycode, keyrecord_t *record) {
- bool is_shifted = (get_mods()) & MOD_MASK_SHIFT;
+ bool is_shifted = (get_mods())&MOD_MASK_SHIFT;
if ((KC_A <= keycode) && (keycode <= KC_0)) {
if (record->event.pressed)
if (!process_record_glyph_replacement(keycode, record,
@@ -222,20 +233,10 @@ bool process_record_zalgo(uint16_t keycode, keyrecord_t *record) {
bool process_record_unicode(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
- case TABLE1:
- if (record->event.pressed) {
- send_unicode_string("┬──┬ ノ( ゜-゜ノ)");
- }
- break;
- case TABLE2:
- if (record->event.pressed) {
- send_unicode_string("(╯°□°)╯︵┻━┻");
- }
- break;
- case KC_NOMODE ... KC_SUPER:
+ case UC_NOMODE ... UC_SUPER:
if (record->event.pressed) {
- if (typing_mode != keycode - KC_NOMODE)
- typing_mode = keycode - KC_NOMODE;
+ if (typing_mode != keycode - UC_NOMODE)
+ typing_mode = keycode - UC_NOMODE;
else
typing_mode = NOMODE;
}
diff --git a/keyboards/endgame/keyboard.json b/keyboards/endgame/keyboard.json
new file mode 100644
index 0000000..f76e8ad
--- /dev/null
+++ b/keyboards/endgame/keyboard.json
@@ -0,0 +1,58 @@
+{
+ "manufacturer": "jack",
+ "board_name": "endgame",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP27", "GP29", "GP28", "GP26", "GP15", "GP4", "GP3", "GP0", "GP1", "GP2"],
+ "rows": ["GP14", "GP13", "GP12", "GP11"]
+ },
+ "processor": "RP2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x6567",
+ "vid": "0x6A73"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 6, "y": 0},
+ {"matrix": [0, 6], "x": 7, "y": 0},
+ {"matrix": [0, 7], "x": 8, "y": 0},
+ {"matrix": [0, 8], "x": 9, "y": 0},
+ {"matrix": [0, 9], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 6, "y": 1},
+ {"matrix": [1, 6], "x": 7, "y": 1},
+ {"matrix": [1, 7], "x": 8, "y": 1},
+ {"matrix": [1, 8], "x": 9, "y": 1},
+ {"matrix": [1, 9], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 8, "y": 2},
+ {"matrix": [2, 8], "x": 9, "y": 2},
+ {"matrix": [2, 9], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3, "w": 1.5},
+ {"matrix": [3, 5], "x": 5.5, "y": 3, "w": 1.5},
+ {"matrix": [3, 6], "x": 7, "y": 3},
+ {"matrix": [3, 9], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/leftover30/keymaps/jack/keymap.c b/keyboards/endgame/keymaps/jack/keymap.c
index 066d6d3..1a9c5cb 100644
--- a/keyboards/leftover30/keymaps/jack/keymap.c
+++ b/keyboards/endgame/keymaps/jack/keymap.c
@@ -1,20 +1,26 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jack.h"
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_jack(
- ___BASE1___, KC_BSPC,
+ ___BASE1___,
___BASE2___,
- ___BASE3___,
- KC_MPLY, XXXXXXX, LWRSPC, C(S(KC_V)), RWORD
+ ___BASE3___,
+ ___BASE4___
),
[_LOWER] = LAYOUT_jack(
- ___LOWER1___, KC_DEL,
+ ___LOWER1___,
___LOWER2___,
___LOWER3___,
- KC_MUTE, _______, _______, RGB_MOD, RGB_TOG
+ ___LOWER4___
+ ),
+ [_RAISE] = LAYOUT_jack(
+ ___RAISE1___,
+ ___RAISE2___,
+ ___RAISE3___,
+ ___RAISE4___
)
};
// clang-format on
diff --git a/keyboards/grumpy/keyboard.json b/keyboards/grumpy/keyboard.json
deleted file mode 100644
index 2ad7bf2..0000000
--- a/keyboards/grumpy/keyboard.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "keyboard_name": "grumpy",
- "manufacturer": "jacks",
- "maintainer": "pngu.org",
- "processor": "RP2040",
- "bootloader": "rp2040",
- "diode_direction": "COL2ROW",
- "matrix_pins" : {
- "cols": ["GP26", "GP27", "GP28", "GP29", "GP6"],
- "rows": ["GP7", "GP0", "GP1", "GP2", "GP4", "GP3"]
- },
- "usb": {
- "vid": "0x6A73",
- "pid": "0x6279",
- "device_version": "1.0.0"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- { "label": "w", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "e", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "r", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "t", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "y", "matrix": [3, 4], "x": 5, "y": 0 },
- { "label": "u", "matrix": [3, 3], "x": 6, "y": 0 },
- { "label": "i", "matrix": [3, 2], "x": 7, "y": 0 },
- { "label": "o", "matrix": [3, 1], "x": 8, "y": 0 },
- { "label": "a", "matrix": [1, 0], "x": 0, "y": 1 },
- { "label": "s", "matrix": [1, 1], "x": 1, "y": 1 },
- { "label": "d", "matrix": [1, 2], "x": 2, "y": 1 },
- { "label": "f", "matrix": [1, 3], "x": 3, "y": 1 },
- { "label": "g", "matrix": [1, 4], "x": 4, "y": 1 },
- { "label": "h", "matrix": [4, 4], "x": 5, "y": 1 },
- { "label": "j", "matrix": [4, 3], "x": 6, "y": 1 },
- { "label": "k", "matrix": [4, 2], "x": 7, "y": 1 },
- { "label": "l", "matrix": [4, 1], "x": 8, "y": 1 },
- { "label": ";", "matrix": [4, 0], "x": 9, "y": 1 },
- { "label": "z", "matrix": [2, 0], "x": 0, "y": 2 },
- { "label": "x", "matrix": [2, 1], "x": 1, "y": 2 },
- { "label": "c", "matrix": [2, 2], "x": 2, "y": 2 },
- { "label": "v", "matrix": [2, 3], "x": 3, "y": 2 },
- { "label": "b", "matrix": [2, 4], "x": 4, "y": 2 },
- { "label": "n", "matrix": [5, 4], "x": 5, "y": 2 },
- { "label": "m", "matrix": [5, 3], "x": 6, "y": 2 },
- { "label": ",", "matrix": [5, 2], "x": 7, "y": 2 },
- { "label": ".", "matrix": [5, 1], "x": 8, "y": 2 },
- { "label": "/", "matrix": [5, 0], "x": 9, "y": 2 }
- ]
- }
- }
-}
diff --git a/keyboards/grumpy/keymaps/jack/keymap.c b/keyboards/grumpy/keymaps/jack/keymap.c
deleted file mode 100644
index 1f6d0ad..0000000
--- a/keyboards/grumpy/keymaps/jack/keymap.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-3.0-or-later
-#include "jack.h"
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT(
- KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
- )
-};
-// clang-format on
diff --git a/keyboards/grumpy/readme.md b/keyboards/grumpy/readme.md
deleted file mode 100644
index 08c8bb2..0000000
--- a/keyboards/grumpy/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### [grumpy](https://github.com/weteor/Grumpy)
-![image1](https://i.imgur.com/VFSn7cnh.jpeg)
-![image2](https://i.imgur.com/xUMFHg4h.jpeg)
diff --git a/keyboards/leftover30/chconf.h b/keyboards/leftover30/chconf.h
deleted file mode 100644
index 2add76c..0000000
--- a/keyboards/leftover30/chconf.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-#define CH_CFG_ST_FREQUENCY 10000
-#define CH_CFG_OPTIMIZE_SPEED FALSE
-#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
-
-#include_next <chconf.h>
diff --git a/keyboards/leftover30/config.h b/keyboards/leftover30/config.h
deleted file mode 100644
index d9c5627..0000000
--- a/keyboards/leftover30/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-#define WS2812_SPI_DRIVER SPID2
-#define WS2812_SPI_MOSI_PAL_MODE 0
-#define WS2812_SPI_SCK_PIN B13
-#define WS2812_EXTERNAL_PULLUP
diff --git a/keyboards/leftover30/halconf.h b/keyboards/leftover30/halconf.h
deleted file mode 100644
index 4ffc260..0000000
--- a/keyboards/leftover30/halconf.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-#define HAL_USE_SPI TRUE
-
-#include_next <halconf.h>
diff --git a/keyboards/leftover30/keyboard.json b/keyboards/leftover30/keyboard.json
deleted file mode 100644
index 0a32fff..0000000
--- a/keyboards/leftover30/keyboard.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- "keyboard_name": "leftover30",
- "manufacturer": "jacks",
- "maintainer": "pngu.org",
- "processor": "STM32F072",
- "bootloader": "stm32-dfu",
- "diode_direction": "COL2ROW",
- "encoder": {
- "rotary": [
- {"pin_a": "B12", "pin_b": "B14"}
- ]
- },
- "features": {
- "rgblight": true,
- "encoder": true
- },
- "matrix_pins": {
- "cols": ["A15", "B9", "B8", "B7", "B6", "B5", "C14", "C15", "F1", "F0", "A1"],
- "rows": ["B3", "B4", "C13", "A5"]
- },
- "rgblight": {
- "led_count": 7
- },
- "ws2812": {
- "pin": "B15",
- "driver": "spi"
- },
- "usb": {
- "pid": "0x6C6F",
- "vid": "0x6A73",
- "device_version": "1.0.0"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"matrix": [0, 0], "x": 0.5, "y": 0},
- {"matrix": [0, 1], "x": 1.5, "y": 0},
- {"matrix": [0, 2], "x": 2.5, "y": 0},
- {"matrix": [0, 3], "x": 3.5, "y": 0},
- {"matrix": [0, 4], "x": 4.5, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [0, 8], "x": 8.5, "y": 0},
- {"matrix": [0, 9], "x": 9.5, "y": 0},
- {"matrix": [0, 10], "x": 10.5, "y": 0},
- {"matrix": [1, 0], "x": 0.75, "y": 1},
- {"matrix": [1, 1], "x": 1.75, "y": 1},
- {"matrix": [1, 2], "x": 2.75, "y": 1},
- {"matrix": [1, 3], "x": 3.75, "y": 1},
- {"matrix": [1, 4], "x": 4.75, "y": 1},
- {"matrix": [1, 5], "x": 5.75, "y": 1},
- {"matrix": [1, 6], "x": 6.75, "y": 1},
- {"matrix": [1, 7], "x": 7.75, "y": 1},
- {"matrix": [1, 8], "x": 8.75, "y": 1},
- {"matrix": [1, 10], "x": 9.75, "y": 1, "w": 1.75},
- {"matrix": [2, 0], "x": 1, "y": 2},
- {"matrix": [2, 1], "x": 2, "y": 2},
- {"matrix": [2, 2], "x": 3, "y": 2},
- {"matrix": [2, 3], "x": 4, "y": 2},
- {"matrix": [2, 4], "x": 5, "y": 2},
- {"matrix": [2, 5], "x": 6, "y": 2},
- {"matrix": [2, 6], "x": 7, "y": 2},
- {"matrix": [2, 7], "x": 8, "y": 2},
- {"matrix": [2, 8], "x": 9, "y": 2},
- {"matrix": [2, 9], "x": 10, "y": 2, "w": 1.25},
- {"matrix": [3, 0], "x": 0, "y": 3},
- {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 1.25},
- {"matrix": [3, 5], "x": 2.5, "y": 3, "w": 6.25},
- {"matrix": [3, 8], "x": 8.75, "y": 3},
- {"matrix": [3, 9], "x": 9.75, "y": 3, "w": 1.5}
- ]
- }
- }
-}
diff --git a/keyboards/leftover30/mcuconf.h b/keyboards/leftover30/mcuconf.h
deleted file mode 100644
index 10914c8..0000000
--- a/keyboards/leftover30/mcuconf.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-3.0-or-later
-#pragma once
-
-#include_next <mcuconf.h>
-
-#undef STM32_SPI_USE_SPI2
-#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/leftover30/readme.md b/keyboards/leftover30/readme.md
deleted file mode 100644
index 7eb9850..0000000
--- a/keyboards/leftover30/readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
-### leftover30
-originally designed by [marksard](https://github.com/marksard/Keyboards/tree/master/leftover30), but the pcb seems to be mia...\
-(arm) pcb redesigned by [tominabox1](https://github.com/tominabox1/) with a somewhat jank case from p3d.
-![front](https://i.imgur.com/O6vY5omh.jpeg)
-![back](https://i.imgur.com/on9pBoAh.jpeg)
diff --git a/keyboards/locus/keymaps/jack/keymap.c b/keyboards/locus/keymaps/jack/keymap.c
index 0779bc5..7c2915b 100644
--- a/keyboards/locus/keymaps/jack/keymap.c
+++ b/keyboards/locus/keymaps/jack/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jack.h"
diff --git a/keyboards/pseusplit/config.h b/keyboards/pseusplit/config.h
new file mode 100644
index 0000000..16bd734
--- /dev/null
+++ b/keyboards/pseusplit/config.h
@@ -0,0 +1,19 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define AZOTEQ_IQS5XX_TPS43
+
+#define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND
+
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+
+#define LCD_DC_PIN D1
+#define LCD_CS_PIN D3
+#define LCD_RST_PIN D2
+#define LCD_SPI_DIVISOR 4
+#define ST7789_HEIGHT 240
+#define ST7789_WIDTH 240
diff --git a/keyboards/pseusplit/halconf.h b/keyboards/pseusplit/halconf.h
new file mode 100644
index 0000000..7470f67
--- /dev/null
+++ b/keyboards/pseusplit/halconf.h
@@ -0,0 +1,9 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#define HAL_USE_I2C TRUE
+
+#define HAL_USE_SPI TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/pseusplit/keyboard.json b/keyboards/pseusplit/keyboard.json
new file mode 100644
index 0000000..000c680
--- /dev/null
+++ b/keyboards/pseusplit/keyboard.json
@@ -0,0 +1,110 @@
+{
+ "manufacturer": "pngu.org",
+ "keyboard_name": "pseusplit",
+ "maintainer": "jack",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "pointing_device": true,
+ "quantum_painter": false,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C15", "C14", "C13", "B9", "B8", "A9", "A8", "B15", "B14", "B13"],
+ "rows": ["F1", "F0", "A10", "A15"]
+ },
+ "processor": "STM32G0B1",
+ "rgb_matrix": {
+ "driver": "is31fl3733",
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0, "flags": 4 },
+ { "matrix": [0, 1], "x": 25, "y": 0, "flags": 4 },
+ { "matrix": [0, 2], "x": 50, "y": 0, "flags": 4 },
+ { "matrix": [0, 3], "x": 75, "y": 0, "flags": 4 },
+ { "matrix": [0, 4], "x": 100, "y": 0, "flags": 4 },
+ { "matrix": [0, 5], "x": 125, "y": 0, "flags": 4 },
+ { "matrix": [0, 6], "x": 150, "y": 0, "flags": 4 },
+ { "matrix": [0, 7], "x": 175, "y": 0, "flags": 4 },
+ { "matrix": [0, 8], "x": 200, "y": 0, "flags": 4 },
+ { "matrix": [0, 9], "x": 224, "y": 0, "flags": 4 },
+ { "matrix": [1, 0], "x": 0, "y": 21, "flags": 4 },
+ { "matrix": [1, 1], "x": 25, "y": 21, "flags": 4 },
+ { "matrix": [1, 2], "x": 50, "y": 21, "flags": 4 },
+ { "matrix": [1, 3], "x": 75, "y": 21, "flags": 4 },
+ { "matrix": [1, 4], "x": 100, "y": 21, "flags": 4 },
+ { "matrix": [1, 5], "x": 125, "y": 21, "flags": 4 },
+ { "matrix": [1, 6], "x": 150, "y": 21, "flags": 4 },
+ { "matrix": [1, 7], "x": 175, "y": 21, "flags": 4 },
+ { "matrix": [1, 8], "x": 200, "y": 21, "flags": 4 },
+ { "matrix": [1, 9], "x": 224, "y": 21, "flags": 4 },
+ { "matrix": [2, 0], "x": 0, "y": 42, "flags": 4 },
+ { "matrix": [2, 1], "x": 25, "y": 42, "flags": 4 },
+ { "matrix": [2, 2], "x": 50, "y": 42, "flags": 4 },
+ { "matrix": [2, 3], "x": 75, "y": 42, "flags": 4 },
+ { "matrix": [2, 4], "x": 100, "y": 42, "flags": 4 },
+ { "matrix": [2, 5], "x": 125, "y": 42, "flags": 4 },
+ { "matrix": [2, 6], "x": 150, "y": 42, "flags": 4 },
+ { "matrix": [2, 7], "x": 175, "y": 42, "flags": 4 },
+ { "matrix": [2, 8], "x": 200, "y": 42, "flags": 4 },
+ { "matrix": [2, 9], "x": 224, "y": 42, "flags": 4 },
+ { "matrix": [3, 2], "x": 50, "y": 64, "flags": 4 },
+ { "matrix": [3, 3], "x": 75, "y": 64, "flags": 4 },
+ { "matrix": [3, 4], "x": 100, "y": 64, "flags": 4 },
+ { "matrix": [3, 5], "x": 125, "y": 64, "flags": 4 },
+ { "matrix": [3, 6], "x": 150, "y": 64, "flags": 4 },
+ { "matrix": [3, 7], "x": 175, "y": 64, "flags": 4 }
+ ]
+ },
+ "url": "https://git.pngu.org/pseusplit",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7073",
+ "vid": "0x6A73"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0 },
+ { "matrix": [0, 1], "x": 1, "y": 0 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0 },
+ { "matrix": [0, 4], "x": 4, "y": 0 },
+ { "matrix": [0, 5], "x": 5, "y": 0 },
+ { "matrix": [0, 6], "x": 6, "y": 0 },
+ { "matrix": [0, 7], "x": 7, "y": 0 },
+ { "matrix": [0, 8], "x": 8, "y": 0 },
+ { "matrix": [0, 9], "x": 9, "y": 0 },
+ { "matrix": [1, 0], "x": 0, "y": 1 },
+ { "matrix": [1, 1], "x": 1, "y": 1 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1 },
+ { "matrix": [1, 4], "x": 4, "y": 1 },
+ { "matrix": [1, 5], "x": 5, "y": 1 },
+ { "matrix": [1, 6], "x": 6, "y": 1 },
+ { "matrix": [1, 7], "x": 7, "y": 1 },
+ { "matrix": [1, 8], "x": 8, "y": 1 },
+ { "matrix": [1, 9], "x": 9, "y": 1 },
+ { "matrix": [2, 0], "x": 0, "y": 2 },
+ { "matrix": [2, 1], "x": 1, "y": 2 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2 },
+ { "matrix": [2, 4], "x": 4, "y": 2 },
+ { "matrix": [2, 5], "x": 5, "y": 2 },
+ { "matrix": [2, 6], "x": 6, "y": 2 },
+ { "matrix": [2, 7], "x": 7, "y": 2 },
+ { "matrix": [2, 8], "x": 8, "y": 2 },
+ { "matrix": [2, 9], "x": 9, "y": 2 },
+ { "matrix": [3, 2], "x": 2, "y": 3 },
+ { "matrix": [3, 3], "x": 3, "y": 3 },
+ { "matrix": [3, 4], "x": 4, "y": 3 },
+ { "matrix": [3, 5], "x": 5, "y": 3 },
+ { "matrix": [3, 6], "x": 6, "y": 3 },
+ { "matrix": [3, 7], "x": 7, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/pseusplit/keymaps/default/keymap.json b/keyboards/pseusplit/keymaps/default/keymap.json
new file mode 100644
index 0000000..d697741
--- /dev/null
+++ b/keyboards/pseusplit/keymaps/default/keymap.json
@@ -0,0 +1,13 @@
+{
+ "keyboard": "pseusplit",
+ "keymap": "default",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P",
+ "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN",
+ "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH",
+ "KC_ESC", "KC_BSPC", "KC_TAB", "KC_SPC", "KC_ENT", "KC_CAPS"
+ ]
+ ]
+}
diff --git a/keyboards/pseusplit/keymaps/jack/keymap.c b/keyboards/pseusplit/keymaps/jack/keymap.c
new file mode 100644
index 0000000..1a9c5cb
--- /dev/null
+++ b/keyboards/pseusplit/keymaps/jack/keymap.c
@@ -0,0 +1,26 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-3.0-or-later
+#include "jack.h"
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_jack(
+ ___BASE1___,
+ ___BASE2___,
+ ___BASE3___,
+ ___BASE4___
+ ),
+ [_LOWER] = LAYOUT_jack(
+ ___LOWER1___,
+ ___LOWER2___,
+ ___LOWER3___,
+ ___LOWER4___
+ ),
+ [_RAISE] = LAYOUT_jack(
+ ___RAISE1___,
+ ___RAISE2___,
+ ___RAISE3___,
+ ___RAISE4___
+ )
+};
+// clang-format on
diff --git a/keyboards/pseusplit/mcuconf.h b/keyboards/pseusplit/mcuconf.h
new file mode 100644
index 0000000..f600857
--- /dev/null
+++ b/keyboards/pseusplit/mcuconf.h
@@ -0,0 +1,11 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_SPI_USE_SPI1
+#define STM32_SPI_USE_SPI1 TRUE
diff --git a/keyboards/pseusplit/pseusplit.c b/keyboards/pseusplit/pseusplit.c
new file mode 100644
index 0000000..1281783
--- /dev/null
+++ b/keyboards/pseusplit/pseusplit.c
@@ -0,0 +1,73 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include "quantum.h"
+
+#if defined(QUANTUM_PAINTER_ENABLE) && defined(POINTING_DEVICE_ENABLE)
+#error "Cannot enable both Quantum Painter and Pointing Device"
+#endif
+
+#ifdef QUANTUM_PAINTER_ENABLE
+#include "qp.h"
+static painter_device_t display;
+
+void keyboard_post_init_kb(void) {
+ display =
+ qp_st7789_make_spi_device(ST7789_HEIGHT, ST7789_WIDTH, LCD_CS_PIN,
+ LCD_DC_PIN, LCD_RST_PIN, LCD_SPI_DIVISOR, 0);
+ qp_init(display, QP_ROTATION_0);
+ keyboard_post_init_user();
+}
+
+void suspend_power_down_kb(void) {
+ qp_power(display, false);
+ suspend_power_down_user();
+}
+
+void suspend_wakeup_init_kb(void) {
+ qp_power(display, true);
+ suspend_wakeup_init_user();
+}
+#endif // QUANTUM_PAINTER_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = {
+ // clang-format off
+ {0, SW2_CS1, SW3_CS1, SW1_CS1},
+ {0, SW2_CS2, SW3_CS2, SW1_CS2},
+ {0, SW2_CS3, SW3_CS3, SW1_CS3},
+ {0, SW2_CS4, SW3_CS4, SW1_CS4},
+ {0, SW2_CS5, SW3_CS5, SW1_CS5},
+ {0, SW2_CS6, SW3_CS6, SW1_CS6},
+ {0, SW2_CS7, SW3_CS7, SW1_CS7},
+ {0, SW2_CS8, SW3_CS8, SW1_CS8},
+ {0, SW2_CS9, SW3_CS9, SW1_CS9},
+ {0, SW2_CS10, SW3_CS10, SW1_CS10},
+ {0, SW5_CS1, SW6_CS1, SW4_CS1},
+ {0, SW5_CS2, SW6_CS2, SW4_CS2},
+ {0, SW5_CS3, SW6_CS3, SW4_CS3},
+ {0, SW5_CS4, SW6_CS4, SW4_CS4},
+ {0, SW5_CS5, SW6_CS5, SW4_CS5},
+ {0, SW5_CS6, SW6_CS6, SW4_CS6},
+ {0, SW5_CS7, SW6_CS7, SW4_CS7},
+ {0, SW5_CS8, SW6_CS8, SW4_CS8},
+ {0, SW5_CS9, SW6_CS9, SW4_CS9},
+ {0, SW5_CS10, SW6_CS10, SW4_CS10},
+ {0, SW8_CS1, SW9_CS1, SW7_CS1},
+ {0, SW8_CS2, SW9_CS2, SW7_CS2},
+ {0, SW8_CS3, SW9_CS3, SW7_CS3},
+ {0, SW8_CS4, SW9_CS4, SW7_CS4},
+ {0, SW8_CS5, SW9_CS5, SW7_CS5},
+ {0, SW8_CS6, SW9_CS6, SW7_CS6},
+ {0, SW8_CS7, SW9_CS7, SW7_CS7},
+ {0, SW8_CS8, SW9_CS8, SW7_CS8},
+ {0, SW8_CS9, SW9_CS9, SW7_CS9},
+ {0, SW8_CS10, SW9_CS10, SW7_CS10},
+ {0, SW10_CS3, SW12_CS3, SW10_CS3},
+ {0, SW10_CS4, SW12_CS4, SW10_CS4},
+ {0, SW10_CS5, SW12_CS5, SW10_CS5},
+ {0, SW10_CS6, SW12_CS6, SW10_CS6},
+ {0, SW10_CS7, SW12_CS7, SW10_CS7},
+ {0, SW10_CS8, SW12_CS8, SW10_CS8},
+ // clang-format on
+};
+#endif // RGB_MATRIX_ENABLE
diff --git a/keyboards/pseusplit/readme.md b/keyboards/pseusplit/readme.md
new file mode 100644
index 0000000..8d55876
--- /dev/null
+++ b/keyboards/pseusplit/readme.md
@@ -0,0 +1,22 @@
+# Pseusplit
+
+* Keyboard Maintainer: [Jack Sangdahl](https://github.com/waffle87)
+* Hardware Supported: PCBs with integrated STM32G0B1 microcontroller
+* Hardware Availability: [git/pseusplit](https://git.pngu.org/pseusplit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make pseusplit:default
+
+Flashing example for this keyboard:
+
+ make pseusplit:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix
+* **Physical reset button**: Briefly press the button on the back of the PCB
diff --git a/keyboards/pseusplit/rules.mk b/keyboards/pseusplit/rules.mk
new file mode 100644
index 0000000..fa4968a
--- /dev/null
+++ b/keyboards/pseusplit/rules.mk
@@ -0,0 +1,2 @@
+POINTING_DEVICE_DRIVER = azoteq_iqs5xx
+QUANTUM_PAINTER_DRIVERS += st7789_spi
diff --git a/keyboards/sweep/config.h b/keyboards/sweep/config.h
index e6ef7f3..a172b9d 100644
--- a/keyboards/sweep/config.h
+++ b/keyboards/sweep/config.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -8,32 +8,22 @@
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
-#ifdef HAL_USE_SPI
#define SPI_DRIVER SPID0
#define SPI_SCK_PIN GP6
#define SPI_MOSI_PIN GP3
-#define SPI_MISO_PIN GP5
-#endif
+#define SPI_MISO_PIN GP4
-#ifdef QUANTUM_PAINTER_ENABLE
-#define LS0XX_CS_PIN GP7
-#define LS0XX_DISPLAY_HEIGHT 160
-#define LS0XX_DISPLAY_WIDTH 68
+#define LCD_CS_PIN GP5
+#define LCD_DC_PIN GP6
+#define LCD_RST_PIN GP28
+#define LCD_DISPLAY_WIDTH 135
+#define LCD_DISPLAY_HEIGHT 240
#define LCD_SPI_DIVISOR 4
-#endif
-#ifdef POINTING_DEVICE_ENABLE
-#define POINTING_DEVICE_CS_PIN GP4
-#define CIRQUE_PINNACLE_CURVED_OVERLAY
-#define CIRQUE_PINNACLE_TAP_ENABLE
-#define CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE
-#define CIRQUE_PINNACLE_DIAMETER_MM 35
-#define SPLIT_POINTING_ENABLE
-#define POINTING_DEVICE_RIGHT
-#endif
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL 2
-#ifdef HAL_USE_I2C
-#define I2C_DRIVER I2CD1
-#define I2C1_SDA_PIN GP3
-#define I2C1_SCL_PIN GP6
-#endif
+#define ADC_RESOLUTION 12
+#define ADC_SATURATION ((1 << 12) - 1)
+#define ADC_CURRENT_PIN GP26
+#define ADC_VOLTAGE_PIN GP27
diff --git a/keyboards/sweep/halconf.h b/keyboards/sweep/halconf.h
index 63f81cd..f47c7d4 100644
--- a/keyboards/sweep/halconf.h
+++ b/keyboards/sweep/halconf.h
@@ -1,8 +1,9 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
+#define HAL_USE_ADC TRUE
#define HAL_USE_SPI TRUE
-#define HAL_USE_I2C FALSE
+#define HAL_USE_PWM TRUE
#include_next <halconf.h>
diff --git a/keyboards/sweep/keyboard.json b/keyboards/sweep/keyboard.json
index d625fc9..2e7ef33 100644
--- a/keyboards/sweep/keyboard.json
+++ b/keyboards/sweep/keyboard.json
@@ -1,143 +1,146 @@
{
- "manufacturer": "pngu.org",
- "keyboard_name": "sweep",
- "maintainer": "jack",
- "bootloader": "rp2040",
- "features": {
- "bootmagic": true,
- "oled": false,
- "pointing_device": true,
- "quantum_painter": true,
- "rgb_matrix": true
+ "manufacturer": "pngu.org",
+ "keyboard_name": "sweep",
+ "maintainer": "jack",
+ "bootloader": "rp2040",
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "quantum_painter": true,
+ "rgb_matrix": true
+ },
+ "backlight": {
+ "pin": "GP7"
+ },
+ "matrix_pins": {
+ "direct": [
+ ["GP18", "GP13", "GP12", "GP24", "GP22"],
+ ["GP16", "GP14", "GP10", "GP25", "GP21"],
+ ["GP17", "GP15", "GP11", "GP9", "GP23"],
+ [null, null, null, "GP19", "GP20"]
+ ]
+ },
+ "processor": "RP2040",
+ "rgb_matrix": {
+ "driver": "ws2812",
+ "layout": [
+ { "matrix": [3, 3], "x": 71, "y": 60, "flags": 4 },
+ { "matrix": [3, 4], "x": 92, "y": 64, "flags": 4 },
+ { "matrix": [2, 4], "x": 81, "y": 39, "flags": 4 },
+ { "matrix": [2, 3], "x": 61, "y": 36, "flags": 4 },
+ { "matrix": [2, 2], "x": 41, "y": 32, "flags": 4 },
+ { "matrix": [2, 1], "x": 20, "y": 37, "flags": 4 },
+ { "matrix": [2, 0], "x": 0, "y": 47, "flags": 4 },
+ { "matrix": [1, 0], "x": 0, "y": 31, "flags": 4 },
+ { "matrix": [1, 1], "x": 20, "y": 21, "flags": 4 },
+ { "matrix": [1, 2], "x": 41, "y": 16, "flags": 4 },
+ { "matrix": [1, 3], "x": 61, "y": 20, "flags": 4 },
+ { "matrix": [1, 4], "x": 81, "y": 23, "flags": 4 },
+ { "matrix": [0, 4], "x": 81, "y": 7, "flags": 4 },
+ { "matrix": [0, 3], "x": 61, "y": 4, "flags": 4 },
+ { "matrix": [0, 2], "x": 41, "y": 0, "flags": 4 },
+ { "matrix": [0, 1], "x": 20, "y": 5, "flags": 4 },
+ { "matrix": [0, 0], "x": 0, "y": 15, "flags": 4 },
+ { "x": 10, "y": 14, "flags": 2 },
+ { "x": 71, "y": 6, "flags": 2 },
+ { "x": 83, "y": 56, "flags": 2 },
+ { "x": 10, "y": 45, "flags": 2 },
+ { "matrix": [7, 1], "x": 132, "y": 64, "flags": 4 },
+ { "matrix": [7, 0], "x": 153, "y": 60, "flags": 4 },
+ { "matrix": [6, 0], "x": 143, "y": 39, "flags": 4 },
+ { "matrix": [6, 1], "x": 163, "y": 36, "flags": 4 },
+ { "matrix": [6, 2], "x": 183, "y": 32, "flags": 4 },
+ { "matrix": [6, 3], "x": 204, "y": 37, "flags": 4 },
+ { "matrix": [6, 4], "x": 224, "y": 47, "flags": 4 },
+ { "matrix": [5, 4], "x": 224, "y": 31, "flags": 4 },
+ { "matrix": [5, 3], "x": 204, "y": 21, "flags": 4 },
+ { "matrix": [5, 2], "x": 183, "y": 16, "flags": 4 },
+ { "matrix": [5, 1], "x": 163, "y": 20, "flags": 4 },
+ { "matrix": [5, 0], "x": 143, "y": 23, "flags": 4 },
+ { "matrix": [4, 0], "x": 143, "y": 7, "flags": 4 },
+ { "matrix": [4, 1], "x": 163, "y": 4, "flags": 4 },
+ { "matrix": [4, 2], "x": 183, "y": 0, "flags": 4 },
+ { "matrix": [4, 3], "x": 204, "y": 5, "flags": 4 },
+ { "matrix": [4, 4], "x": 224, "y": 15, "flags": 4 },
+ { "x": 214, "y": 14, "flags": 2 },
+ { "x": 153, "y": 6, "flags": 2 },
+ { "x": 144, "y": 56, "flags": 2 },
+ { "x": 214, "y": 45, "flags": 2 }
+ ],
+ "split_count": [21, 21],
+ "sleep": true
+ },
+ "split": {
+ "enabled": true,
+ "handedness": {
+ "pin": "GP8"
},
"matrix_pins": {
+ "right": {
"direct": [
- ["GP18", "GP13", "GP12", "GP24", "GP22"],
- ["GP16", "GP14", "GP10", "GP25", "GP21"],
- ["GP17", "GP15", "GP11", "GP9", "GP23"],
- [null, null, null, "GP19", "GP20"]
+ ["GP25", "GP21", "GP17", "GP16", "GP13"],
+ ["GP24", "GP20", "GP18", "GP15", "GP12"],
+ ["GP22", "GP23", "GP19", "GP14", "GP11"],
+ ["GP10", "GP9", null, null, null]
]
+ }
},
- "processor": "RP2040",
- "rgb_matrix": {
- "driver": "ws2812",
- "layout": [
- {"matrix": [3, 3], "x": 71, "y": 60, "flags": 4},
- {"matrix": [3, 4], "x": 92, "y": 64, "flags": 4},
- {"matrix": [2, 4], "x": 81, "y": 39, "flags": 4},
- {"matrix": [2, 3], "x": 61, "y": 36, "flags": 4},
- {"matrix": [2, 2], "x": 41, "y": 32, "flags": 4},
- {"matrix": [2, 1], "x": 20, "y": 37, "flags": 4},
- {"matrix": [2, 0], "x": 0, "y": 47, "flags": 4},
- {"matrix": [1, 0], "x": 0, "y": 31, "flags": 4},
- {"matrix": [1, 1], "x": 20, "y": 21, "flags": 4},
- {"matrix": [1, 2], "x": 41, "y": 16, "flags": 4},
- {"matrix": [1, 3], "x": 61, "y": 20, "flags": 4},
- {"matrix": [1, 4], "x": 81, "y": 23, "flags": 4},
- {"matrix": [0, 4], "x": 81, "y": 7, "flags": 4},
- {"matrix": [0, 3], "x": 61, "y": 4, "flags": 4},
- {"matrix": [0, 2], "x": 41, "y": 0, "flags": 4},
- {"matrix": [0, 1], "x": 20, "y": 5, "flags": 4},
- {"matrix": [0, 0], "x": 0, "y": 15, "flags": 4},
- {"x": 10, "y": 14, "flags": 2},
- {"x": 71, "y": 6, "flags": 2},
- {"x": 83, "y": 56, "flags": 2},
- {"x": 10, "y": 45, "flags": 2},
- {"matrix": [7, 1], "x": 132, "y": 64, "flags": 4},
- {"matrix": [7, 0], "x": 153, "y": 60, "flags": 4},
- {"matrix": [6, 0], "x": 143, "y": 39, "flags": 4},
- {"matrix": [6, 1], "x": 163, "y": 36, "flags": 4},
- {"matrix": [6, 2], "x": 183, "y": 32, "flags": 4},
- {"matrix": [6, 3], "x": 204, "y": 37, "flags": 4},
- {"matrix": [6, 4], "x": 224, "y": 47, "flags": 4},
- {"matrix": [5, 4], "x": 224, "y": 31, "flags": 4},
- {"matrix": [5, 3], "x": 204, "y": 21, "flags": 4},
- {"matrix": [5, 2], "x": 183, "y": 16, "flags": 4},
- {"matrix": [5, 1], "x": 163, "y": 20, "flags": 4},
- {"matrix": [5, 0], "x": 143, "y": 23, "flags": 4},
- {"matrix": [4, 0], "x": 143, "y": 7, "flags": 4},
- {"matrix": [4, 1], "x": 163, "y": 4, "flags": 4},
- {"matrix": [4, 2], "x": 183, "y": 0, "flags": 4},
- {"matrix": [4, 3], "x": 204, "y": 5, "flags": 4},
- {"matrix": [4, 4], "x": 224, "y": 15, "flags": 4},
- {"x": 214, "y": 14, "flags": 2},
- {"x": 153, "y": 6, "flags": 2},
- {"x": 144, "y": 56, "flags": 2},
- {"x": 214, "y": 45, "flags": 2}
- ],
- "split_count": [21, 21]
- },
- "split": {
- "enabled": true,
- "handedness": {
- "pin": "GP8"
- },
- "matrix_pins": {
- "right": {
- "direct": [
- ["GP25", "GP22", "GP17", "GP16", "GP13"],
- ["GP24", "GP20", "GP18", "GP15", "GP12"],
- ["GP23", "GP21", "GP19", "GP14", "GP11"],
- ["GP10", "GP9", null, null, null]
- ]
- }
- },
- "serial": {
- "driver": "vendor"
- }
- },
- "url": "https://git.pngu.org/sweep",
- "usb": {
- "device_version": "1.0.0",
- "pid": "0x7370",
- "vid": "0x6A73"
- },
- "ws2812": {
- "driver": "vendor",
- "pin": "GP2"
- },
- "community_layouts": ["split_3x5_2"],
- "layout_aliases": {
- "LAYOUT": "LAYOUT_split_3x5_2"
- },
- "layouts": {
- "LAYOUT_split_3x5_2": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0.25},
- {"matrix": [0, 1], "x": 1, "y": 0.125},
- {"matrix": [0, 2], "x": 2, "y": 0},
- {"matrix": [0, 3], "x": 3, "y": 0.125},
- {"matrix": [0, 4], "x": 4, "y": 0.25},
- {"matrix": [4, 0], "x": 7, "y": 0.25},
- {"matrix": [4, 1], "x": 8, "y": 0.125},
- {"matrix": [4, 2], "x": 9, "y": 0},
- {"matrix": [4, 3], "x": 10, "y": 0.125},
- {"matrix": [4, 4], "x": 11, "y": 0.25},
- {"matrix": [1, 0], "x": 0, "y": 1.25},
- {"matrix": [1, 1], "x": 1, "y": 1.125},
- {"matrix": [1, 2], "x": 2, "y": 1},
- {"matrix": [1, 3], "x": 3, "y": 1.125},
- {"matrix": [1, 4], "x": 4, "y": 1.25},
- {"matrix": [5, 0], "x": 7, "y": 1.25},
- {"matrix": [5, 1], "x": 8, "y": 1.125},
- {"matrix": [5, 2], "x": 9, "y": 1},
- {"matrix": [5, 3], "x": 10, "y": 1.125},
- {"matrix": [5, 4], "x": 11, "y": 1.25},
- {"matrix": [2, 0], "x": 0, "y": 2.25},
- {"matrix": [2, 1], "x": 1, "y": 2.125},
- {"matrix": [2, 2], "x": 2, "y": 2},
- {"matrix": [2, 3], "x": 3, "y": 2.125},
- {"matrix": [2, 4], "x": 4, "y": 2.25},
- {"matrix": [6, 0], "x": 7, "y": 2.25},
- {"matrix": [6, 1], "x": 8, "y": 2.125},
- {"matrix": [6, 2], "x": 9, "y": 2},
- {"matrix": [6, 3], "x": 10, "y": 2.125},
- {"matrix": [6, 4], "x": 11, "y": 2.25},
- {"matrix": [3, 3], "x": 3.5, "y": 3.25},
- {"matrix": [3, 4], "x": 4.5, "y": 3.5},
- {"matrix": [7, 0], "x": 6.5, "y": 3.5},
- {"matrix": [7, 1], "x": 7.5, "y": 3.25}
- ]
- }
+ "serial": {
+ "driver": "vendor"
+ }
+ },
+ "url": "https://git.pngu.org/sweep",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x7370",
+ "vid": "0x6A73"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP2"
+ },
+ "community_layouts": ["split_3x5_2"],
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_split_3x5_2"
+ },
+ "layouts": {
+ "LAYOUT_split_3x5_2": {
+ "layout": [
+ { "matrix": [0, 0], "x": 0, "y": 0.25 },
+ { "matrix": [0, 1], "x": 1, "y": 0.125 },
+ { "matrix": [0, 2], "x": 2, "y": 0 },
+ { "matrix": [0, 3], "x": 3, "y": 0.125 },
+ { "matrix": [0, 4], "x": 4, "y": 0.25 },
+ { "matrix": [4, 0], "x": 7, "y": 0.25 },
+ { "matrix": [4, 1], "x": 8, "y": 0.125 },
+ { "matrix": [4, 2], "x": 9, "y": 0 },
+ { "matrix": [4, 3], "x": 10, "y": 0.125 },
+ { "matrix": [4, 4], "x": 11, "y": 0.25 },
+ { "matrix": [1, 0], "x": 0, "y": 1.25 },
+ { "matrix": [1, 1], "x": 1, "y": 1.125 },
+ { "matrix": [1, 2], "x": 2, "y": 1 },
+ { "matrix": [1, 3], "x": 3, "y": 1.125 },
+ { "matrix": [1, 4], "x": 4, "y": 1.25 },
+ { "matrix": [5, 0], "x": 7, "y": 1.25 },
+ { "matrix": [5, 1], "x": 8, "y": 1.125 },
+ { "matrix": [5, 2], "x": 9, "y": 1 },
+ { "matrix": [5, 3], "x": 10, "y": 1.125 },
+ { "matrix": [5, 4], "x": 11, "y": 1.25 },
+ { "matrix": [2, 0], "x": 0, "y": 2.25 },
+ { "matrix": [2, 1], "x": 1, "y": 2.125 },
+ { "matrix": [2, 2], "x": 2, "y": 2 },
+ { "matrix": [2, 3], "x": 3, "y": 2.125 },
+ { "matrix": [2, 4], "x": 4, "y": 2.25 },
+ { "matrix": [6, 0], "x": 7, "y": 2.25 },
+ { "matrix": [6, 1], "x": 8, "y": 2.125 },
+ { "matrix": [6, 2], "x": 9, "y": 2 },
+ { "matrix": [6, 3], "x": 10, "y": 2.125 },
+ { "matrix": [6, 4], "x": 11, "y": 2.25 },
+ { "matrix": [3, 3], "x": 3.5, "y": 3.25 },
+ { "matrix": [3, 4], "x": 4.5, "y": 3.5 },
+ { "matrix": [7, 0], "x": 6.5, "y": 3.5 },
+ { "matrix": [7, 1], "x": 7.5, "y": 3.25 }
+ ]
}
+ }
}
diff --git a/keyboards/sweep/keymaps/jack/keymap.c b/keyboards/sweep/keymaps/jack/keymap.c
index d505967..5f836e8 100644
--- a/keyboards/sweep/keymaps/jack/keymap.c
+++ b/keyboards/sweep/keymaps/jack/keymap.c
@@ -1,6 +1,9 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jack.h"
+#include "analog.h"
+
+#define NUM_ADC_READS 32
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -14,13 +17,54 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
___LOWER1___,
___LOWER2___,
___LOWER3___,
- KC_TRNS, KC_TRNS, KC_TRNS, PNP
+ _______, _______, _______, UPDIR
),
[_RAISE] = LAYOUT_jack(
___RAISE1___,
___RAISE2___,
___RAISE3___,
- NUKE, KC_TRNS, KC_TRNS, KC_TRNS
+ PNP, _______, _______, _______
)
};
// clang-format on
+
+void housekeeping_task_keymap(void) {
+ static uint32_t last_read = 0;
+ static int16_t current_reads[NUM_ADC_READS] = {0};
+ static int16_t voltage_reads[NUM_ADC_READS] = {0};
+ static uint8_t offset = 0;
+ if (timer_elapsed32(last_read) >= 1) {
+ int16_t current = analogReadPin(ADC_CURRENT_PIN);
+ int16_t voltage = analogReadPin(ADC_VOLTAGE_PIN);
+ int16_t current_ma =
+ (int16_t)(((3300 * (int32_t)current) / ADC_SATURATION));
+ int16_t voltage_mv =
+ (int16_t)((2 * (3300 * (int32_t)voltage)) / ADC_SATURATION);
+ if (!last_read)
+ for (uint8_t i = 0; i < NUM_ADC_READS; ++i) {
+ current_reads[i] = current_ma;
+ voltage_reads[i] = voltage_mv;
+ }
+ current_reads[offset] = current_ma;
+ voltage_reads[offset] = voltage_mv;
+ offset = (offset + 1) % NUM_ADC_READS;
+ static uint16_t counter = 0;
+ counter = (counter + 1) % 2500;
+ if (!counter)
+ dprintf("Current: %dmA\tVoltage: %dmV\n", (int)current_ma,
+ (int)voltage_mv);
+ last_read = timer_read32();
+ }
+ static uint32_t last_draw = 0;
+ if (timer_elapsed32(last_draw) >= 250) {
+ int32_t total_current_ma = 0;
+ int32_t total_voltage_mv = 0;
+ for (uint8_t i = 0; i < NUM_ADC_READS; ++i) {
+ total_current_ma += current_reads[i];
+ total_voltage_mv += voltage_reads[i];
+ }
+ // int16_t avg_current_ma = (int16_t)(total_current_ma / NUM_ADC_READS);
+ // int16_t avg_voltage_mv = (int16_t)(total_voltage_mv / NUM_ADC_READS);
+ last_draw = timer_read32();
+ }
+}
diff --git a/keyboards/sweep/lib/jetbrainsmono11.qff.c b/keyboards/sweep/lib/jetbrainsmono11.qff.c
deleted file mode 100644
index 9a60c9f..0000000
--- a/keyboards/sweep/lib/jetbrainsmono11.qff.c
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2024 QMK
-// copyright SPDX-License-Identifier: GPL-2.0-or-later
-
-// Font's metadata
-// ---------------
-// Glyphs: , !, ", #, $, %, &, ', (, ), *, +, ,, -, ., /, 0, 1, 2, 3, 4, 5, 6,
-// 7, 8, 9, :, ;, <, =, >, ?, @, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P,
-// Q, R, S, T, U, V, W, X, Y, Z, [, \, ], ^, _, `, a, b, c, d, e, f, g, h, i, j,
-// k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, {, |, }, ~
-
-#include <qp.h>
-
-const uint32_t font_jetbrainsmono11_length = 1365;
-
-// clang-format off
-const uint8_t font_jetbrainsmono11[1365] = {
- 0x00, 0xFF, 0x14, 0x00, 0x00, 0x51, 0x46, 0x46, 0x01, 0x55, 0x05, 0x00, 0x00, 0xAA, 0xFA, 0xFF,
- 0xFF, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0xFE, 0x1D, 0x01, 0x00, 0x07, 0x00,
- 0x00, 0xC7, 0x02, 0x00, 0x87, 0x05, 0x00, 0x47, 0x08, 0x00, 0x07, 0x0B, 0x00, 0xC7, 0x0D, 0x00,
- 0x87, 0x10, 0x00, 0x47, 0x13, 0x00, 0x07, 0x16, 0x00, 0xC7, 0x18, 0x00, 0x87, 0x1B, 0x00, 0x47,
- 0x1E, 0x00, 0x07, 0x21, 0x00, 0xC7, 0x23, 0x00, 0x87, 0x26, 0x00, 0x47, 0x29, 0x00, 0x07, 0x2C,
- 0x00, 0xC7, 0x2E, 0x00, 0x87, 0x31, 0x00, 0x47, 0x34, 0x00, 0x07, 0x37, 0x00, 0xC7, 0x39, 0x00,
- 0x87, 0x3C, 0x00, 0x47, 0x3F, 0x00, 0x07, 0x42, 0x00, 0xC7, 0x44, 0x00, 0x87, 0x47, 0x00, 0x47,
- 0x4A, 0x00, 0x07, 0x4D, 0x00, 0xC7, 0x4F, 0x00, 0x87, 0x52, 0x00, 0x47, 0x55, 0x00, 0x07, 0x58,
- 0x00, 0xC7, 0x5A, 0x00, 0x87, 0x5D, 0x00, 0x47, 0x60, 0x00, 0x07, 0x63, 0x00, 0xC7, 0x65, 0x00,
- 0x87, 0x68, 0x00, 0x47, 0x6B, 0x00, 0x07, 0x6E, 0x00, 0xC7, 0x70, 0x00, 0x87, 0x73, 0x00, 0x47,
- 0x76, 0x00, 0x07, 0x79, 0x00, 0xC7, 0x7B, 0x00, 0x87, 0x7E, 0x00, 0x47, 0x81, 0x00, 0x07, 0x84,
- 0x00, 0xC7, 0x86, 0x00, 0x87, 0x89, 0x00, 0x47, 0x8C, 0x00, 0x07, 0x8F, 0x00, 0xC7, 0x91, 0x00,
- 0x87, 0x94, 0x00, 0x47, 0x97, 0x00, 0x07, 0x9A, 0x00, 0xC7, 0x9C, 0x00, 0x87, 0x9F, 0x00, 0x47,
- 0xA2, 0x00, 0x07, 0xA5, 0x00, 0xC7, 0xA7, 0x00, 0x87, 0xAA, 0x00, 0x47, 0xAD, 0x00, 0x07, 0xB0,
- 0x00, 0xC7, 0xB2, 0x00, 0x87, 0xB5, 0x00, 0x47, 0xB8, 0x00, 0x07, 0xBB, 0x00, 0xC7, 0xBD, 0x00,
- 0x87, 0xC0, 0x00, 0x47, 0xC3, 0x00, 0x07, 0xC6, 0x00, 0xC7, 0xC8, 0x00, 0x87, 0xCB, 0x00, 0x47,
- 0xCE, 0x00, 0x07, 0xD1, 0x00, 0xC7, 0xD3, 0x00, 0x87, 0xD6, 0x00, 0x47, 0xD9, 0x00, 0x07, 0xDC,
- 0x00, 0xC7, 0xDE, 0x00, 0x87, 0xE1, 0x00, 0x47, 0xE4, 0x00, 0x07, 0xE7, 0x00, 0xC7, 0xE9, 0x00,
- 0x87, 0xEC, 0x00, 0x47, 0xEF, 0x00, 0x07, 0xF2, 0x00, 0xC7, 0xF4, 0x00, 0x87, 0xF7, 0x00, 0x47,
- 0xFA, 0x00, 0x07, 0xFD, 0x00, 0xC7, 0xFF, 0x00, 0x87, 0x02, 0x01, 0x04, 0xFB, 0x15, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x81, 0x40,
- 0x20, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x85, 0x42, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x89, 0xE0, 0xA3, 0x40, 0x7E, 0x12, 0x01, 0x00, 0x00, 0x08, 0x84, 0x47, 0xE1,
- 0xE0, 0xE0, 0x50, 0x1A, 0x04, 0x02, 0x00, 0x00, 0x80, 0xA9, 0x50, 0x71, 0xE0, 0x18, 0x8A, 0x18,
- 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x30, 0xA4, 0x22, 0x31, 0x17, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x82, 0x40, 0x20, 0x10, 0x08, 0x04,
- 0x04, 0x04, 0x00, 0x00, 0x03, 0x02, 0x01, 0x80, 0x40, 0x00, 0x08, 0x84, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x81, 0xF0, 0x31, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0xF8, 0x10,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x82, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x10, 0x04, 0x82, 0x40, 0x20, 0x08, 0x04, 0x81, 0x00, 0x00,
- 0x00, 0x00, 0x47, 0x26, 0x52, 0x89, 0x44, 0x32, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x43, 0x81, 0x40,
- 0x20, 0x10, 0x08, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x47, 0x06, 0x82, 0x60, 0x18, 0x04, 0x1F, 0x00,
- 0x00, 0x00, 0x80, 0x07, 0x82, 0xE0, 0x40, 0x40, 0x12, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x02, 0x41,
- 0x90, 0x48, 0x3C, 0x10, 0x08, 0x00, 0x00, 0x00, 0x80, 0x47, 0x20, 0xF0, 0xC0, 0x40, 0x32, 0x0E,
- 0x00, 0x00, 0x00, 0x00, 0x82, 0x41, 0xF0, 0x88, 0x44, 0x22, 0x0E, 0x00, 0x00, 0x00, 0x80, 0x4F,
- 0x04, 0x81, 0x60, 0x10, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x47, 0x26, 0xE1, 0xC8, 0x44, 0x22,
- 0x0E, 0x00, 0x00, 0x00, 0x00, 0x47, 0x24, 0x92, 0x71, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x40, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00,
- 0x00, 0x04, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x08, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xE0, 0x03, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xC0, 0xC0,
- 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x81, 0x30, 0x08, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x47, 0x04, 0xC2, 0xA5, 0x52, 0x28, 0x8C, 0x80, 0x03, 0x00, 0x00, 0x82, 0x41, 0xA1,
- 0x48, 0x3C, 0x22, 0x11, 0x00, 0x00, 0x00, 0x80, 0x47, 0x26, 0xF1, 0xC8, 0x44, 0x22, 0x0F, 0x00,
- 0x00, 0x00, 0x00, 0x47, 0x24, 0x10, 0x08, 0x04, 0x22, 0x0E, 0x00, 0x00, 0x00, 0x80, 0x47, 0x22,
- 0x12, 0x89, 0x44, 0x12, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x4F, 0x20, 0xF0, 0x08, 0x04, 0x02, 0x1F,
- 0x00, 0x00, 0x00, 0x80, 0x4F, 0x20, 0x10, 0x78, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47,
- 0x26, 0x10, 0xE8, 0x44, 0x32, 0x0E, 0x00, 0x00, 0x00, 0x80, 0x48, 0x24, 0xF2, 0x89, 0x44, 0x22,
- 0x11, 0x00, 0x00, 0x00, 0x80, 0x07, 0x81, 0x40, 0x20, 0x10, 0x08, 0x0F, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x02, 0x81, 0x40, 0x20, 0x12, 0x0F, 0x00, 0x00, 0x00, 0x80, 0x48, 0x22, 0x71, 0x68, 0x24,
- 0x12, 0x11, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x1F, 0x00, 0x00, 0x00,
- 0x80, 0xCC, 0x66, 0x52, 0x89, 0x44, 0x22, 0x11, 0x00, 0x00, 0x00, 0x80, 0xC8, 0x64, 0x52, 0xA9,
- 0x74, 0x32, 0x19, 0x00, 0x00, 0x00, 0x00, 0x47, 0x22, 0x12, 0x89, 0x44, 0x12, 0x0E, 0x00, 0x00,
- 0x00, 0x80, 0x47, 0x24, 0x12, 0x79, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x26, 0x12,
- 0x89, 0x44, 0x32, 0x0E, 0x04, 0x02, 0x00, 0x80, 0x47, 0x24, 0x92, 0x79, 0x24, 0x12, 0x11, 0x00,
- 0x00, 0x00, 0x00, 0x47, 0x22, 0x60, 0x40, 0x40, 0x22, 0x0E, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x81,
- 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x80, 0x48, 0x24, 0x12, 0x89, 0x44, 0x12, 0x0E,
- 0x00, 0x00, 0x00, 0x80, 0x48, 0x24, 0x91, 0x50, 0x28, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x40, 0x2A,
- 0xC5, 0x32, 0x99, 0x6C, 0x36, 0x09, 0x00, 0x00, 0x00, 0x80, 0x48, 0x42, 0x61, 0x30, 0x28, 0x12,
- 0x11, 0x00, 0x00, 0x00, 0x80, 0x48, 0x42, 0xE1, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x80,
- 0x0F, 0x02, 0x41, 0x10, 0x08, 0x02, 0x1F, 0x00, 0x00, 0x00, 0x0E, 0x81, 0x40, 0x20, 0x10, 0x08,
- 0x04, 0x02, 0x07, 0x00, 0x00, 0x81, 0x80, 0x40, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x00, 0x00,
- 0x06, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x82, 0x00, 0x11, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00,
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x81,
- 0xF1, 0x44, 0x32, 0x1F, 0x00, 0x00, 0x00, 0x80, 0x40, 0xE0, 0x91, 0x89, 0x44, 0x32, 0x0F, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xC0, 0x11, 0x09, 0x04, 0x22, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x08, 0xC4,
- 0x93, 0x89, 0x44, 0x32, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x11, 0xF9, 0x04, 0x02, 0x0E,
- 0x00, 0x00, 0x00, 0x00, 0x8E, 0x40, 0xF0, 0x11, 0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xC0, 0x93, 0x89, 0x44, 0x32, 0x1E, 0x84, 0x03, 0x00, 0x80, 0x40, 0xE0, 0x91, 0x89, 0x44, 0x22,
- 0x11, 0x00, 0x00, 0x00, 0x00, 0x02, 0xE0, 0x40, 0x20, 0x10, 0x08, 0x1F, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0xE0, 0x81, 0x40, 0x20, 0x10, 0x08, 0xC4, 0x01, 0x00, 0x80, 0x40, 0x20, 0x93, 0x38, 0x24,
- 0x12, 0x11, 0x00, 0x00, 0x00, 0xC0, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x1C, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x60, 0x53, 0xA9, 0x54, 0x2A, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x91, 0x89,
- 0x44, 0x22, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x91, 0x89, 0x44, 0x32, 0x0E, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xE0, 0x91, 0x89, 0x44, 0x32, 0x8F, 0x40, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x93,
- 0x89, 0x44, 0x32, 0x1E, 0x08, 0x04, 0x00, 0x00, 0x00, 0xE0, 0x11, 0x89, 0x04, 0x02, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xC0, 0x11, 0x38, 0x20, 0x22, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0,
- 0x23, 0x10, 0x08, 0x04, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x12, 0x89, 0x44, 0x12, 0x0E,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x92, 0x48, 0x28, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x90, 0x42, 0x99, 0x4C, 0x16, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xA3, 0x30, 0x18, 0x14,
- 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x92, 0x50, 0x28, 0x0C, 0x04, 0x82, 0x00, 0x00, 0x00,
- 0x00, 0xE0, 0x81, 0x20, 0x08, 0x06, 0x1F, 0x00, 0x00, 0x00, 0x08, 0x02, 0x81, 0x30, 0x20, 0x10,
- 0x08, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00,
- 0x03, 0x83, 0x40, 0xC0, 0x11, 0x08, 0x0C, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x69,
- 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-// clang-format on
diff --git a/keyboards/sweep/lib/jetbrainsmono11.qff.h b/keyboards/sweep/lib/jetbrainsmono11.qff.h
deleted file mode 100644
index de556e3..0000000
--- a/keyboards/sweep/lib/jetbrainsmono11.qff.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2024 QMK
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
-
-#include <qp.h>
-
-extern const uint32_t font_jetbrainsmono11_length;
-extern const uint8_t font_jetbrainsmono11[1365];
diff --git a/keyboards/sweep/mcuconf.h b/keyboards/sweep/mcuconf.h
index be63774..c53d80d 100644
--- a/keyboards/sweep/mcuconf.h
+++ b/keyboards/sweep/mcuconf.h
@@ -1,11 +1,14 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
+#undef RP_ADC_USE_ADC1
+#define RP_ADC_USE_ADC1 TRUE
+
#undef RP_SPI_USE_SPI0
#define RP_SPI_USE_SPI0 TRUE
-#undef RP_I2C_USE_I2C1
-#define RP_I2C_USE_I2C1 TRUE
+#undef RP_PWM_USE_PWM3
+#define RP_PWM_USE_PWM3 TRUE
diff --git a/keyboards/sweep/readme.md b/keyboards/sweep/readme.md
index 1ccc4f3..be6c1a6 100644
--- a/keyboards/sweep/readme.md
+++ b/keyboards/sweep/readme.md
@@ -1,8 +1,8 @@
# Sweep RP2040
-![%KEYBOARD%](imgur.com image replace me!)
+![image](https://git.pngu.org/sweep/about/img/image1.jpg)
-* Keyboard Maintainer: [Jack Sangdahl](https://github.com/waffle87)
+* Keyboard Maintainer: [[email protected]](mailto:[email protected])
* Hardware Supported: PCBs with integrated RP2040 microcontroller
* Hardware Availability: [git/sweep](https://git.pngu.org/sweep)
@@ -20,6 +20,6 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to
Enter the bootloader in 3 ways:
-* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
-* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix and plug in the keyboard
+* **Physical reset button**: Hold button labeled BOOT and tap RESET button
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/sweep/rules.mk b/keyboards/sweep/rules.mk
index 172fd27..5533ed9 100644
--- a/keyboards/sweep/rules.mk
+++ b/keyboards/sweep/rules.mk
@@ -1,8 +1,2 @@
-POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
-
-# depends on 21844
-QUANTUM_PAINTER_DRIVERS += ls0xx_spi
-
-ifeq ($(strip $(QUANTUM_PAINTER_ENABLE)), yes)
- SRC += lib/jetbrainsmono11.qff.c
-endif
+QUANTUM_PAINTER_DRIVERS += st7789_spi
+ANALOG_DRIVER_REQUIRED = yes
diff --git a/keyboards/sweep/sweep.c b/keyboards/sweep/sweep.c
index f14a591..c7023bd 100644
--- a/keyboards/sweep/sweep.c
+++ b/keyboards/sweep/sweep.c
@@ -1,28 +1,17 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
-#include <quantum.h>
+#include "quantum.h"
#ifdef QUANTUM_PAINTER_ENABLE
-#include "lib/jetbrainsmono11.qff.h"
-#include <qp.h>
-#include <qp_surface.h>
+#include "qp.h"
+
static painter_device_t display;
-static painter_font_handle_t font;
-static uint8_t framebuffer[SURFACE_REQUIRED_BUFFER_BYTE_SIZE(
- LS0XX_DISPLAY_WIDTH, LS0XX_DISPLAY_HEIGHT, 1)] = {0};
void keyboard_post_init_kb(void) {
- display = qp_ls0xx_device_t_make_spi_device(
- LS0XX_DISPLAY_WIDTH, LS0XX_DISPLAY_HEIGHT, LS0XX_CS_PIN, LCD_SPI_DIVISOR,
- 0, framebuffer);
+ display = qp_st7789_make_spi_device(LCD_DISPLAY_WIDTH, LCD_DISPLAY_HEIGHT,
+ LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN,
+ LCD_SPI_DIVISOR, 0);
qp_init(display, QP_ROTATION_0);
- font = qp_load_font_mem(font);
- if (font) {
- static const char *data = "foo bar baz";
- int16_t width = qp_textwidth(font, data);
- qp_drawtext(display, LS0XX_DISPLAY_WIDTH - width - 1,
- LS0XX_DISPLAY_HEIGHT - font->line_height - 1, font, data);
- }
keyboard_post_init_user();
}
@@ -36,14 +25,3 @@ void suspend_wakeup_init_kb(void) {
suspend_wakeup_init_user();
}
#endif // QUANTUM_PAINTER_ENABLE
-
-#ifdef OLED_ENABLE
-oled_rotation_t oled_init_kb(oled_rotation_t rotation) { return rotation; }
-
-bool oled_task_kb(void) {
- if (!oled_task_user())
- return false;
- oled_write(PSTR("foo bar baz"), false);
- return true;
-}
-#endif // OLED_ENABLE
diff --git a/keyboards/tornish/flash.sh b/keyboards/tornish/flash.sh
deleted file mode 100755
index 6de066f..0000000
--- a/keyboards/tornish/flash.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-FIRMWARE=~/git/qmk_firmware/tornish_default.hex
-BOOTLOADER=~/git/qmk_me/keyboards/tornish/usbasploader_atmega328p.hex
-
-qmk compile -kb tornish -km default > /dev/null
-sed -i '$ d' $FIRMWARE
-cat $BOOTLOADER >> $FIRMWARE
-doas avrdude -c usbtiny -p atmega328p -U flash:w:$FIRMWARE:i
diff --git a/keyboards/tornish/keyboard.json b/keyboards/tornish/keyboard.json
deleted file mode 100644
index 5423d74..0000000
--- a/keyboards/tornish/keyboard.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "keyboard_name": "tornish",
- "manufacturer": "jacks",
- "maintainer": "pngu.org",
- "bootloader": "usbasploader",
- "diode_direction": "COL2ROW",
- "matrix_pins": {
- "cols": ["B3", "B4", "B5", "B0", "D7", "D6"],
- "rows": ["D4", "D1", "D0", "D5"]
- },
- "processor": "atmega328p",
- "usb": {
- "device_version": "1.0.0",
- "pid": "0x6A73",
- "vid": "0x6D64"
- },
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1, "y": 0},
- {"matrix": [0, 2], "x": 2, "y": 0},
- {"matrix": [0, 3], "x": 3, "y": 0},
- {"matrix": [0, 4], "x": 4, "y": 0},
- {"matrix": [0, 5], "x": 5, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1},
- {"matrix": [1, 1], "x": 1, "y": 1},
- {"matrix": [1, 2], "x": 2, "y": 1},
- {"matrix": [1, 3], "x": 3, "y": 1},
- {"matrix": [1, 4], "x": 4, "y": 1},
- {"matrix": [1, 5], "x": 5, "y": 1},
- {"matrix": [2, 0], "x": 0, "y": 2},
- {"matrix": [2, 1], "x": 1, "y": 2},
- {"matrix": [2, 2], "x": 2, "y": 2},
- {"matrix": [2, 3], "x": 3, "y": 2},
- {"matrix": [2, 4], "x": 4, "y": 2},
- {"matrix": [2, 5], "x": 5, "y": 2},
- {"matrix": [3, 2], "x": 2, "y": 3},
- {"matrix": [3, 3], "x": 3, "y": 3},
- {"matrix": [3, 4], "x": 4, "y": 3},
- {"matrix": [3, 5], "x": 5, "y": 3}
- ]
- }
- }
-}
diff --git a/keyboards/tornish/keymaps/default/keymap.c b/keyboards/tornish/keymaps/default/keymap.c
deleted file mode 100644
index aeb2df2..0000000
--- a/keyboards/tornish/keymaps/default/keymap.c
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include QMK_KEYBOARD_H
-
-enum macros { DAY = QK_USER, CLEAR };
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- DAY, KC_Q, KC_W, KC_E, KC_R, KC_T,
- CLEAR, KC_A, KC_S, KC_D, KC_F, KC_G,
- XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B,
- KC_ESC, MO(1), KC_SPC, XXXXXXX
- ),
- [1] = LAYOUT(
- XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_5,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, _______, XXXXXXX, XXXXXXX
- )
-};
-// clang-format on
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case DAY:
- if (record->event.pressed) {
- tap_code(KC_SLSH);
- wait_ms(500);
- SEND_STRING("time set day" SS_TAP(X_ENT));
- }
- break;
- case CLEAR:
- if (record->event.pressed) {
- tap_code(KC_SLSH);
- wait_ms(500);
- SEND_STRING("weather clear" SS_TAP(X_ENT));
- }
- break;
- }
- return true;
-}
diff --git a/keyboards/tornish/readme.md b/keyboards/tornish/readme.md
deleted file mode 100644
index 3224611..0000000
--- a/keyboards/tornish/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-### half a [torn](https://github.com/rtitmuss/torn) keyboard used solely for minecraft :)
-![img](https://i.imgur.com/e7zKTK7h.jpeg)
-
-for whatever reason, this board does not like to flash over usb.
-so [flash.sh](flash.sh) does the work for us:
-qmk compile -kb tornish -km default > /dev/null
-```shell
-sed -i '$ d' $FIRMWARE #remove last line from firmware hex file (eof indicator)
-cat $BOOTLOADER >> $FIRMWARE #append bootloader hex file to firmware
-avrdude -c usbtiny -p atmega328p -U flash:w:$FIRMWARE:i #flash firmware + bootloader over serial
-```
diff --git a/keyboards/tornish/usbasploader_atmega328p.hex b/keyboards/tornish/usbasploader_atmega328p.hex
deleted file mode 100644
index 3f3fb14..0000000
--- a/keyboards/tornish/usbasploader_atmega328p.hex
+++ /dev/null
@@ -1,140 +0,0 @@
-:107000006BC00000AAC000008EC000008CC0000051
-:107010008AC0000088C0000086C0000084C0000054
-:1070200082C0000080C000007EC000007CC0000064
-:107030007AC0000078C0000076C0000074C0000074
-:1070400072C0000070C000006EC000006CC0000084
-:107050006AC0000068C0000066C0000064C0000094
-:1070600062C0000060C00000EC2DFD2DB7B6B0FC82
-:10707000FDCF27BFE895B7B6B0FCFDCF21E1B7B68D
-:10708000B6FCF4CF08950902120001010080320914
-:10709000040000000000000012011001FF000008C1
-:1070A000C016DC050201010200010E035500530069
-:1070B00042006100730070001C03770077007700C6
-:1070C0002E00660069007300630068006C002E00EB
-:1070D000640065000403090411241FBECFEFD8E04B
-:1070E000DEBFCDBF24B7D8E0CEEF39913833399128
-:1070F00009F03FEF30933C0120933B0111E0A0E009
-:10710000B1E0E4E8F8E702C005900D92A630B107BF
-:10711000D9F721E0A6E0B1E001C01D92AB33B20780
-:10712000E1F785D1ADC36CCFA82FB92F80E090E0F7
-:1071300041E050EA609530E009C02D918227979593
-:10714000879510F084279527305EC8F36F5FA8F30A
-:107150000895EADF8D939D930895CF93CFB7CF9392
-:10716000DF93C3954B9BE9F74B9B0BC04B9B09C02F
-:107170004B9B07C04B9B05C04B9B03C04B9B01C067
-:1071800089C06F93C0911E01DD27CB5DDE4F2F9329
-:1071900065E54B9B03C02F916F91E6CF0F931F9333
-:1071A0004F9320E040E15F9309B10C7003FB27F996
-:1071B0003F9350E03BE039C01C7040642F77012FB3
-:1071C0005F5F1EC0406819B11C702F7752501FC0FE
-:1071D000406409B12F770C70D1F15F5F00C023C00C
-:1071E000406219B12F771C7091F15F5F00C025C01C
-:1071F0000C701027515012F45D5F0000115027955C
-:107200002C3F19B1C8F61C700127015027952C3F5F
-:10721000C8F64227499309B10C7010274F731150DB
-:1072200027952C3FA8F64695469519B11C7079F024
-:107230000127015027952C3F98F66B5A60F3315087
-:1072400009B1B0F600C011E01CBB002717C03B50CD
-:107250003195C31BD04011E01CBB0881033CF9F001
-:107260000B34E9F020911C011981110F1213EDCF9D
-:10727000093651F10D3211F0013E39F70093230127
-:107280003F915F914F911F910F912F916F91CCB3CF
-:10729000C0FD67CFDF91CF91CFBFCF9118952091DF
-:1072A0002301222369F310912101112339F5343090
-:1072B0003AF13093210120931D0110911E013BE012
-:1072C000311B30931E011CC0009121010130B4F428
-:1072D0000AE53091010134FD14C000930101C1E1C0
-:1072E000D1E013C0052710E000C000000BB91AC0A0
-:1072F000052710E0221F1DC010E021C04AE502C092
-:1073000032ED432FC4E1D0E032E01AB11C605B9A49
-:107310000BB11AB95CE020E865E320FF05270BB943
-:10732000279517951C3FF0F66695B8F7B1F720FF43
-:1073300005270BB9279517951C3FD0F6279517956C
-:1073400017FF052700001C3F0BB9B0F629913A95AD
-:1073500019F7037F10912201110FC651D0400BB9CC
-:1073600011F010931C0111E01CBB08601AB1137FCF
-:10737000402F437F54E05A95F1F70BB91AB94BB936
-:107380007FCFDC0113964C91139714963C91149780
-:1073900013968D919C911497982789279827129678
-:1073A0002C911297203339F43370E32FF0E0EE5F25
-:1073B000FE4F80810895283561F489E0E1E0F0E036
-:1073C000442371F089E0E3E0F0E0483049F080E0E8
-:1073D0000895203579F4411107C089E0F0E0E0E03C
-:1073E000809357008491089589E0E2E0F0E048300E
-:1073F00071F7F6CF203229F4880F991FFC01849190
-:107400000895283229F4FC01EE0FFF1F3196F7CFC3
-:10741000203A09F41FC2203C21F415966C9122D227
-:10742000D6CF2F3FA1F681EF80930F01D0CF1AB8AE
-:1074300080E28BB981E085BF82E085BFE0E0F1E7C3
-:10744000A89531978040E1F780913B01877F21F437
-:1074500080913C01882371F04D9B0CC0F894539AA5
-:107460001BB81DBA1092690081E085BF15BEF0E01F
-:10747000E0E009958EEF80930F0114BE0FB6F894EB
-:10748000A8958091600088618093600010926000F0
-:107490000FBE80916900826080936900E89A539AD8
-:1074A0008CE0E0E0F5E3A89531978040E1F7539850
-:1074B000789410912101135017FD5AC080911E013C
-:1074C000CCE0D0E0C81BD109CB5DDE4F80911D011F
-:1074D0008D3209F00BC1183009F048C083EC80935D
-:1074E00011018AE580930101109210013881832FE8
-:1074F00080769981882309F49BC046E051E050933F
-:10750000200140931F01933069F4CE013ADF80934C
-:10751000090184E09F81911127C09E81981720F571
-:10752000892F22C0953009F4DFC09A3009F4DCC0FD
-:107530008CEF890F863008F070C04A815B815093D0
-:107540000E0140930D01993009F46EC08E81809335
-:107550000C012D81227020930B0190930A0137FFBB
-:107560008FEF90E890931001809300011092210119
-:107570008091010184FF36C0C0910001CF3F91F19D
-:107580008C2FC93008F088E09C2F981B9093000145
-:107590009091110128E8922790931101CC23B1F02A
-:1075A0004091100147FF2FC190910C01C82F9817EF
-:1075B00008F4C92F9C1B90930C01D0900A01D0E0D5
-:1075C00082E1E82E81E0F82EDC1304C16C2F82E109
-:1075D00091E0BFDDCC5FCC3019F08FEF80930001DC
-:1075E000C093010184E199B19C7031F48150D9F7C5
-:1075F0001092220110921C0180910F01803108F439
-:107600001EC14D9B05C080910F01805180930F01D9
-:1076100080910F0181114DCF21CF80910F019230C8
-:1076200029F48E7F80930F0180E074CF8160FACFC0
-:107630002A8110921A0191110AC010921B012AE1AD
-:1076400031E082E03093200120931F0163CF953019
-:1076500029F4209322012AE131E0F4CF963099F504
-:107660009B81913059F488E990E7909320018093B1
-:107670001F0182E190E4909310014CCF923019F4F5
-:1076800086E890E7F2CF9330A9F7211108C084ED86
-:1076900090E79093200180931F0184E0EBCF21308D
-:1076A00041F488EB90E79093200180931F018CE1D7
-:1076B000E1CF2230F9F68AEA90E790932001809397
-:1076C0001F018EE0D7CF983059F0993019F42093EC
-:1076D0002401C1CF81E09A3009F4BDCF80E0BBCF57
-:1076E00024E231E081E0AECF81E014CF809110013F
-:1076F00087FF3CCF00910C01011708F4102F011BEC
-:1077000000930C01F12CF11628F001112FCF1092EB
-:1077100000012CCF80910D0190910E0120910A0162
-:10772000273058F069919C012F5F3F4F30930E0135
-:1077300020930D0197D0F394E6CF8115904738F749
-:10774000F394F394F894E0910D01F0910E012991D6
-:10775000399181E0090180935700E89511247894CC
-:1077600080910D0190910E01029690930E018093ED
-:107770000D018F779927892B51F00111C4CFF11694
-:1077800008F4C1CF80910B01882309F4BCCFF89491
-:10779000E0910D01F0910E01329783E08093570044
-:1077A000E895789407B600FCFDCFF894E0910D01C0
-:1077B000F0910E01329785E080935700E895789418
-:1077C00007B600FCFDCFF89481E180935700E8955F
-:1077D000789499CF00910D0110910E0126E02D159E
-:1077E00078F4C80137D0F7018083FFEFEF1AFF0A62
-:1077F0000F5F1F4F10930E0100930D01DF5FE4CE6A
-:10780000F8018491F0CF90911F0130912001282F31
-:10781000290FE92FF32FA2E1B1E046FF0BC09491AD
-:107820009D9331962E13FBCFF0932001E0931F011F
-:10783000C82FCCCE91919D932E13FCCFF5CF4D99AF
-:10784000E7CE80910F01823008F4E2CE80910F01E3
-:107850008250DCCEF999FECF92BD81BDF89A99276E
-:1078600080B50895262FF999FECF1FBA92BD81BD2C
-:1078700020BD0FB6F894FA9AF99A0FBE01960895B2
-:04788000F894FFCFAA
-:06788400FF5A1E950F00E3
-:040000030000700089
-:00000001FF
diff --git a/keyboards/xyz60/keyboard.json b/keyboards/xyz60/keyboard.json
index d605eb3..316e36a 100644
--- a/keyboards/xyz60/keyboard.json
+++ b/keyboards/xyz60/keyboard.json
@@ -74,7 +74,7 @@
{"matrix": [4, 1], "x": 0, "y": 0},
{"matrix": [4, 2], "x": 0, "y": 0},
{"matrix": [4, 6], "x": 0, "y": 0},
- {"matrix": [4, 10], "x": 0, "y": 0},
+ {"matrix": [4, 11], "x": 0, "y": 0},
{"matrix": [4, 12], "x": 0, "y": 0},
{"matrix": [4, 13], "x": 0, "y": 0}
]
diff --git a/keyboards/xyz60/keymaps/jack/keymap.c b/keyboards/xyz60/keymaps/jack/keymap.c
index 024d732..81941ed 100644
--- a/keyboards/xyz60/keymaps/jack/keymap.c
+++ b/keyboards/xyz60/keymaps/jack/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jack.h"
#define ___NONE___ \
@@ -12,21 +12,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, ___BASE1___, KC_BSPC, _______, PNP,
_______, ___BASE2___, _______, _______,
_______, ___BASE3___, _______,
- _______, _______, KC_ESC, LWRSPC, PSTRSE, _______, _______
+ _______, _______, KC_ESC, LWRSPC, PSTRSE, _______, _______
),
[_LOWER] = LAYOUT_jack_60_ts(
_______, ___NONE___,
_______, ___LOWER1___, _______, _______, _______,
_______, ___LOWER2___, _______, _______,
_______, ___LOWER3___, _______,
- _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_jack_60_ts(
_______, ___NONE___,
_______, ___RAISE1___, _______, _______, _______,
_______, ___RAISE2___, _______, _______,
_______, ___RAISE3___, _______,
- _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______
)
};
// clang-format on
diff --git a/keymaps/beiwagon/keymap.c b/keymaps/beiwagon/keymap.c
new file mode 100644
index 0000000..eaa9c44
--- /dev/null
+++ b/keymaps/beiwagon/keymap.c
@@ -0,0 +1,26 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-3.0-or-later
+#include "jack.h"
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_jack(
+ G(KC_F), G(KC_Q), G(KC_R),
+ KC_VOLD, PNP, KC_VOLU,
+ REMOVE, XRGB_HUI, XRGB_NXT,
+ XRGB_TOG, XRGB_HUD, TG(_LOWER)
+ ),
+ [_LOWER] = LAYOUT_jack(
+ QK_BOOT, EE_CLR, QK_MAKE,
+ _______, _______, _______,
+ _______, _______, _______,
+ _______, _______, _______
+ )
+};
+// clang-format on
+
+void keyboard_post_init_keymap(void) {
+ for (int i = 0; i < RGB_MATRIX_LED_COUNT; ++i)
+ if (g_led_config.flags[i] & LED_FLAG_UNDERGLOW)
+ g_led_config.flags[i] &= ~LED_FLAG_UNDERGLOW;
+}
diff --git a/keymaps/bully/keymap.c b/keymaps/bully/keymap.c
index 927d588..cc4275d 100644
--- a/keymaps/bully/keymap.c
+++ b/keymaps/bully/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jack.h"
@@ -6,9 +6,9 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_jack(
XXXXXXX, ___BASE1___, KC_BSPC, KC_BSPC,
- NUKE, ___BASE2___, PNP,
+ REMOVE, ___BASE2___, PNP,
XXXXXXX, ___BASE3___, XXXXXXX,
- KC_VOLD, UPDIR, KC_ESC, _______, LT(_LOWER, KC_SPC), _______, PSTRSE, XXXXXXX, KC_VOLU
+ KC_VOLD, UPDIR, KC_ESC, XXXXXXX, LWRSPC, XXXXXXX, PSTRSE, XXXXXXX, KC_VOLU
),
[_LOWER] = LAYOUT_jack(
_______, ___LOWER1___, _______, _______,
diff --git a/keymaps/crkbd/config.h b/keymaps/crkbd/config.h
index 1516e0b..f93a586 100644
--- a/keymaps/crkbd/config.h
+++ b/keymaps/crkbd/config.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -13,9 +13,9 @@
#define WS2812_DI_PIN B5
#define WS2812_PWM_DRIVER PWMD3
#define WS2812_PWM_CHANNEL 3
-#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
-#define WS2812_DMA_CHANNEL 3
-#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP
+#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM3
+#define WS2812_PWM_DMA_CHANNEL 3
+#define WS2812_PWM_DMAMUX_ID STM32_DMAMUX1_TIM3_UP
#endif
#ifdef ENCODER_ENABLE
diff --git a/keymaps/crkbd/halconf.h b/keymaps/crkbd/halconf.h
index 547b9db..81505ac 100644
--- a/keymaps/crkbd/halconf.h
+++ b/keymaps/crkbd/halconf.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
diff --git a/keymaps/crkbd/keymap.c b/keymaps/crkbd/keymap.c
index 54fd197..1e634ab 100644
--- a/keymaps/crkbd/keymap.c
+++ b/keymaps/crkbd/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jack.h"
@@ -6,21 +6,21 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_jack_3x6(
XXXXXXX, ___BASE1___, XXXXXXX,
- XXXXXXX, ___BASE2___, RWORD,
+ XXXXXXX, ___BASE2___, XXXXXXX,
XXXXXXX, ___BASE3___, XXXXXXX,
- ___BASE4___
+ ___BASE4___
),
[_LOWER] = LAYOUT_jack_3x6(
- XXXXXXX, ___LOWER1___, XXXXXXX,
- XXXXXXX, ___LOWER2___, XXXXXXX,
- XXXXXXX, ___LOWER3___, XXXXXXX,
- ___LOWER4___
+ _______, ___LOWER1___, _______,
+ _______, ___LOWER2___, _______,
+ _______, ___LOWER3___, _______,
+ ___LOWER4___
),
[_RAISE] = LAYOUT_jack_3x6(
- XXXXXXX, ___RAISE1___, XXXXXXX,
- XXXXXXX, ___RAISE2___, XXXXXXX,
- XXXXXXX, ___RAISE3___, XXXXXXX,
- ___RAISE4___
+ _______, ___RAISE1___, _______,
+ _______, ___RAISE2___, _______,
+ _______, ___RAISE3___, _______,
+ ___RAISE4___
)
};
// clang-format on
@@ -62,31 +62,9 @@ void keyboard_post_init_keymap(void) {
}
#endif // audio
-#ifdef POINTING_DEVICE_ENABLE
-uint8_t red = 255, green = 0, blue = 0;
-
-void trackball_hue(void) {
- if (red != 255 && green != 255 && blue != 255)
- red = 255;
- if (red == 255 && green < 255 && !blue)
- green += 15;
- else if (green == 255 && !blue && red)
- red -= 15;
- else if (!red && blue < 255 && green == 255)
- blue += 15;
- else if (blue == 255 && green && !red)
- green -= 15;
- else if (!green && blue == 255 && red < 255)
- red += 15;
- else if (!green && blue && red == 255)
- blue -= 15;
- pimoroni_trackball_set_rgbw(red, green, blue, 0);
-}
-#endif // pointing device
-
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return is_keyboard_master() ? 2 : 3;
+ return is_keyboard_master() ? OLED_ROTATION_180 : OLED_ROTATION_270;
}
bool oled_task_keymap(void) {
@@ -131,12 +109,4 @@ void matrix_init_user(void) {
4, 4, 4, 2, 2, 2, 2, 2, 2, 1, 1, 1, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 2, 2, 2, 2, 2, 2}};
}
-
-bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
- rgb_matrix_sethsv_noeeprom(43, 255, 120);
- for (uint8_t i = led_min; i <= led_max; i++)
- if (g_led_config.flags[i] & LED_FLAG_UNDERGLOW)
- rgb_matrix_set_color(i, RGB_RED);
- return false;
-}
#endif // rgb matrix
diff --git a/keymaps/crkbd/mcuconf.h b/keymaps/crkbd/mcuconf.h
index 871c3e7..db028e0 100644
--- a/keymaps/crkbd/mcuconf.h
+++ b/keymaps/crkbd/mcuconf.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
diff --git a/keymaps/crkbd/rules.mk b/keymaps/crkbd/rules.mk
index b1fff61..42387df 100644
--- a/keymaps/crkbd/rules.mk
+++ b/keymaps/crkbd/rules.mk
@@ -4,9 +4,6 @@ WS2812_DRIVER = pwm
OLED_ENABLE = yes
AUDIO_ENABLE = no
AUDIO_DRIVER = dac_basic
-RGBLIGHT_ENABLE = no
-RGB_MATRIX_ENABLE = yes
ENCODER_ENABLE = yes
-ENCODER_MAP_ENABLE = yes
POINTING_DEVICE_ENABLE = no
POINTING_DEVICE_DRIVER = pimoroni_trackball
diff --git a/keymaps/f60/keymap.c b/keymaps/f60/keymap.c
index c730bd5..5f14df5 100644
--- a/keymaps/f60/keymap.c
+++ b/keymaps/f60/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jack.h"
#define ___NONE___ \
@@ -12,21 +12,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, ___BASE1___, KC_BSPC, _______, PNP,
_______, ___BASE2___, _______, _______,
_______, ___BASE3___, _______,
- _______, _______, KC_ESC, LWRSPC, PSTRSE, _______, _______
+ _______, _______, KC_ESC, LWRSPC, PSTRSE, _______, _______
),
[_LOWER] = LAYOUT_jack_60_ts(
_______, ___NONE___,
_______, ___LOWER1___, _______, _______, _______,
_______, ___LOWER2___, _______, _______,
_______, ___LOWER3___, _______,
- _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_jack_60_ts(
_______, ___NONE___,
_______, ___RAISE1___, _______, _______, _______,
_______, ___RAISE2___, _______, _______,
_______, ___RAISE3___, _______,
- _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______
)
};
// clang-format on
diff --git a/keymaps/f60/readme.md b/keymaps/f60/readme.md
deleted file mode 100644
index 8244d1b..0000000
--- a/keymaps/f60/readme.md
+++ /dev/null
@@ -1,4 +0,0 @@
-### trio60
-![front](https://i.imgur.com/MsKEbeBh.jpeg)
-![back](https://i.imgur.com/1D9xUYTh.jpeg)
-![rear](https://i.imgur.com/x6MBDMdh.jpeg)
diff --git a/keymaps/ferris/config.h b/keymaps/ferris/config.h
deleted file mode 100644
index 1f624e5..0000000
--- a/keymaps/ferris/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
-
-#define WS2812_DI_PIN B0
-#define RGB_MATRIX_LED_COUNT 34
-#define RGB_MATRIX_SPLIT {17, 17}
-#define __ NO_PIN
-#undef DIRECT_PINS
-#undef DIRECT_PINS_RIGHT
-// clang-format off
-#define DIRECT_PINS { \
- {D7,F7,F6,F5,F4}, \
- {B1,B3,B2,B6,D3}, \
- {D1,D0,D4,C6,E6}, \
- {B4,B5,__,__,__} \
-}
-#define DIRECT_PINS_RIGHT { \
- {F4,F5,F6,F7,D7}, \
- {D3,B6,B2,B3,B1}, \
- {E6,C6,D4,D0,D1}, \
- {B5,B4,__,__,__} \
-}
-// clang-format on
diff --git a/keymaps/ferris/keymap.c b/keymaps/ferris/keymap.c
deleted file mode 100644
index 71f2e14..0000000
--- a/keymaps/ferris/keymap.c
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-2.0-or-later
-#include "jack.h"
-#define XX NO_LED
-
-// clang-format off
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_jack(
- ___BASE1___,
- ___BASE2___,
- ___BASE3___,
- ESCLWR, KC_SPC, KC_BSPC, PSTRSE
- ),
- [_LOWER] = LAYOUT_jack(
- ___LOWER1___,
- ___LOWER2___,
- ___LOWER3___,
- XXXXXXX, XXXXXXX, XXXXXXX, PNP
- ),
- [_RAISE] = LAYOUT_jack(
- ___RAISE1___,
- ___RAISE2___,
- ___RAISE3___,
- UPDIR, XXXXXXX, XXXXXXX, XXXXXXX
- )
-};
-
-led_config_t g_led_config = {{
- {4, 3, 2, 1, 0 },
- {5, 6, 7, 8, 9 },
- {14, 13, 12, 11, 10},
- {XX, XX, XX, 15, 16},
- {17, 18, 19, 20, 21},
- {26, 25, 24, 23, 22},
- {27, 28, 29, 30, 31},
- {33, 32, XX, XX, XX}
-}, {
- {72,7}, {54,4}, {36,0}, {18,4}, {0,13},
- {0,27}, {18,18},{36,14},{54,18},{72,21},
- {72,35},{54,32},{36,28},{18,32},{0,41},
- {67,45},{90,62},
- {126,13},{144,4}, {162,0}, {180,4}, {198,7},
- {198,21},{180,18},{162,14},{144,18},{126,27},
- {126,41},{144,32},{162,28},{180,32},{198,35},
- {117,62},{135,45}
-}, {
- 4,4,4,4,4,
- 4,4,4,4,4,
- 4,4,4,4,4,
- 4,4,
- 4,4,4,4,4,
- 4,4,4,4,4,
- 4,4,4,4,4,
- 4,4
-}};
-// clang-format on
diff --git a/keymaps/ferris/readme.md b/keymaps/ferris/readme.md
deleted file mode 100644
index c3ac9ca..0000000
--- a/keymaps/ferris/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-### rgb ferris sweep
-![parts](https://i.imgur.com/zKJoYMa.jpeg)
-![switches](https://i.imgur.com/ZSEpMGf.jpeg)
-![complete](https://i.imgur.com/Op0bU0N.jpeg)
-
-#### notes
-an elite-c was required for this pcb, as it exposes an io pin where most pro-micro's have a raw power pin.\
-this means no diodes are required :^)
diff --git a/keymaps/ferris/rules.mk b/keymaps/ferris/rules.mk
deleted file mode 100644
index 15e72a1..0000000
--- a/keymaps/ferris/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-BOOTLOADER = atmel-dfu
-RGB_MATRIX_ENABLE = yes
-RGB_MATRIX_DRIVER = ws2812
diff --git a/keymaps/kyria/config.h b/keymaps/kyria/config.h
index 25e13a2..d8acae0 100644
--- a/keymaps/kyria/config.h
+++ b/keymaps/kyria/config.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -10,8 +10,6 @@
#define CIRQUE_PINNACLE_SECONDARY_TAP_ENABLE
#define CIRQUE_PINNACLE_DIAMETER_MM 35
#define SPLIT_WATCHDOG_ENABLE
-#define CRC8_USE_TABLE
-#define CRC8_OPTIMIZE_SPEED
#undef RGB_MATRIX_MAXIMUM_BRIGHTNESS
#define I2C1_CLOCK_SPEED 1000000
#define BOOTMAGIC_LITE_ROW 0
diff --git a/keymaps/kyria/keymap.c b/keymaps/kyria/keymap.c
index 99b9da3..dd70d52 100644
--- a/keymaps/kyria/keymap.c
+++ b/keymaps/kyria/keymap.c
@@ -1,28 +1,28 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jack.h"
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_jack(
- XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, XXXXXXX,
- XXXXXXX, HRML(KC_A, KC_S, KC_D, KC_F), KC_G, KC_H, HRMR(KC_J, KC_K, KC_L, KC_SCLN), XXXXXXX,
- XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, RWORD, XXXXXXX, XXXXXXX, NUKE, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, XXXXXXX,
+ XXXXXXX, HRML(KC_A, KC_S, KC_D, KC_F), KC_G, KC_H, HRMR(KC_J, KC_K, KC_L, KC_SCLN), XXXXXXX,
+ XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, XXXXXXX, XXXXXXX, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX,
XXXXXXX, UPDIR, ESCLWR, KC_SPC, XXXXXXX, XXXXXXX, KC_BSPC, PSTRSE, PNP, XXXXXXX
),
[_LOWER] = LAYOUT_jack(
_______, KC_1, KC_2 , KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, HRML(KC_EXLM, KC_AT, KC_HASH, KC_DLR), KC_PERC, KC_CIRC, HRMR(KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN), _______,
- _______, KC_VOLD, KC_TAB, KC_CAPS, KC_TILD, KC_GRV, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU, _______,
+ _______, KC_VOLD, KC_TAB, KC_CAPS, REMOVE, KC_GRV, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLU, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_jack(
- _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXXMODE, KC_SCRIPT, KC_BLOCKS, KC_REGIONAL, QK_MAKE, _______,
- _______, _______, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_WIDE, KC_AUSSIE, KC_ZALGO, KC_SUPER, QK_BOOT, _______,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, UC_NOMODE, UC_SCRIPT, UC_BLOCKS, UC_REGIONAL, QK_MAKE, _______,
+ _______, M_JIGGLE, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, UC_WIDE, UC_AUSSIE, UC_ZALGO, UC_SUPER, QK_BOOT, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
// clang-format on
@@ -36,3 +36,31 @@ bool oled_task_keymap(void) {
return false;
}
#endif
+
+#ifdef POINTING_DEVICE_ENABLE
+static bool scrolling = false;
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case _LOWER:
+ scrolling = true;
+ pointing_device_set_cpi(64);
+ break;
+ default:
+ if (scrolling) {
+ scrolling = false;
+ pointing_device_set_cpi(1024);
+ }
+ }
+ return state;
+}
+
+report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
+ if (scrolling) {
+ mouse_report.h = mouse_report.x;
+ mouse_report.v = -mouse_report.y;
+ mouse_report.x = 0;
+ mouse_report.y = 0;
+ }
+ return mouse_report;
+}
+#endif
diff --git a/keymaps/kyria/readme.md b/keymaps/kyria/readme.md
index 517429a..06b8f31 100644
--- a/keymaps/kyria/readme.md
+++ b/keymaps/kyria/readme.md
@@ -1,5 +1,5 @@
### rp2040 kyria rev2
-![photo](https://i.imgur.com/P0urp7nh.jpeg)
+![photo](https://i.imgur.com/P0urp7n.jpeg)
#### parts & notes
* microcontrollers: [boardsource blok](https://boardsource.xyz/store/628b95b494dfa308a6581622)
diff --git a/keymaps/kyria/rules.mk b/keymaps/kyria/rules.mk
index 2694171..cd88dc8 100644
--- a/keymaps/kyria/rules.mk
+++ b/keymaps/kyria/rules.mk
@@ -1,7 +1,5 @@
CONVERT_TO = blok
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes
-ENCODER_MAP_ENABLE = yes
POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c
-PROGRAM_CMD = doas picotool load $(BUILD_DIR)/$(TARGET).uf2
diff --git a/keymaps/onekey/f411_qfplib/config.h b/keymaps/onekey/f411_qfplib/config.h
new file mode 100644
index 0000000..8fbef05
--- /dev/null
+++ b/keymaps/onekey/f411_qfplib/config.h
@@ -0,0 +1,12 @@
+// Copyright 2025 [email protected]
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#undef ADC_PIN
+#undef BACKLIGHT_PIN
+#undef MATRIX_ROW_PINS
+#undef MATRIX_COL_PINS
+
+// clang-format off
+#define DIRECT_PINS {{A0}}
+// clang-format on
diff --git a/keymaps/onekey/stm32f411/keymap.c b/keymaps/onekey/f411_qfplib/keymap.c
index 34b5279..36202c2 100644
--- a/keymaps/onekey/stm32f411/keymap.c
+++ b/keymaps/onekey/f411_qfplib/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
diff --git a/keymaps/onekey/stm32f411/qfplib/qfplib.h b/keymaps/onekey/f411_qfplib/qfplib/qfplib.h
index d172da8..d172da8 100644
--- a/keymaps/onekey/stm32f411/qfplib/qfplib.h
+++ b/keymaps/onekey/f411_qfplib/qfplib/qfplib.h
diff --git a/keymaps/onekey/stm32f411/qfplib/qfplib.s b/keymaps/onekey/f411_qfplib/qfplib/qfplib.s
index e035472..e035472 100644
--- a/keymaps/onekey/stm32f411/qfplib/qfplib.s
+++ b/keymaps/onekey/f411_qfplib/qfplib/qfplib.s
diff --git a/keymaps/onekey/stm32f411/rules.mk b/keymaps/onekey/f411_qfplib/rules.mk
index 8b12a3d..8b12a3d 100644
--- a/keymaps/onekey/stm32f411/rules.mk
+++ b/keymaps/onekey/f411_qfplib/rules.mk
diff --git a/keymaps/onekey/rp2040/rules.mk b/keymaps/onekey/rp2040/rules.mk
deleted file mode 100644
index a263ca2..0000000
--- a/keymaps/onekey/rp2040/rules.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-CONSOLE_ENABLE = yes
-OPT_DEFS += -UCRT0_EXTRA_CORES_NUMBER \
- -DCRT0_EXTRA_CORES_NUMBER=1
-
-define WRAP
- $(foreach FUNC,$1,$(eval EXTRALDFLAGS += -Wl,--wrap=$(FUNC)))
-endef
-
-SRC += $(PICOSDKROOT)/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S
-BIT_FUNCTIONS := __clzsi2 __clzdi2 __ctzsi2 __ctzdi2 __popcountsi2 __popcountdi2
-$(call WRAP, $(BIT_FUNCTIONS))
-
-VPATH += $(PICOSDKROOT)/src/rp2_common/pico_double/include
-SRC += $(PICOSDKROOT)/src/rp2_common/pico_double/double_aeabi.S \
- $(PICOSDKROOT)/src/rp2_common/pico_double/double_init_rom.c \
- $(PICOSDKROOT)/src/rp2_common/pico_double/double_math.c \
- $(PICOSDKROOT)/src/rp2_common/pico_double/double_v1_rom_shim.S
-DOUBLE_FUNCTIONS := __aeabi_dadd __aeabi_ddiv __aeabi_dmul __aeabi_drsub __aeabi_dsub __aeabi_cdcmpeq \
- __aeabi_cdrcmple __aeabi_cdcmple __aeabi_dcmpeq __aeabi_dcmplt __aeabi_dcmple \
- __aeabi_dcmpge __aeabi_dcmpgt __aeabi_dcmpun __aeabi_i2d __aeabi_l2d __aeabi_ui2d \
- __aeabi_ul2d __aeabi_d2iz __aeabi_d2lz __aeabi_d2uiz __aeabi_d2ulz __aeabi_d2f \
- sqrt cos sin tan atan2 exp log ldexp copysign trunc floor ceil round sincos asin \
- acos atan sinh cosh tanh asinh acosh atanh exp2 log2 exp10 log10 pow powint hypot \
- cbrt fmod drem remainder remquo expm1 log1p fma
-$(call WRAP, $(DOUBLE_FUNCTIONS))
-
-VPATH += $(PICOSDKROOT)/src/rp2_common/pico_float/include
-SRC += $(PICOSDKROOT)/src/rp2_common/pico_float/float_aeabi.S \
- $(PICOSDKROOT)/src/rp2_common/pico_float/float_init_rom.c \
- $(PICOSDKROOT)/src/rp2_common/pico_float/float_math.c \
- $(PICOSDKROOT)/src/rp2_common/pico_float/float_v1_rom_shim.S
-FLOAT_FUNCTIONS := __aeabi_fadd __aeabi_fdiv __aeabi_fmul __aeabi_frsub __aeabi_fsub __aeabi_cfcmpeq \
- __aeabi_cfrcmple __aeabi_cfcmple __aeabi_fcmpeq __aeabi_fcmplt __aeabi_fcmple \
- __aeabi_fcmpge __aeabi_fcmpgt __aeabi_fcmpun __aeabi_i2f __aeabi_l2f __aeabi_ui2f \
- __aeabi_ul2f __aeabi_f2iz __aeabi_f2lz __aeabi_f2uiz __aeabi_f2ulz __aeabi_f2d \
- sqrtf cosf sinf tanf atan2f expf logf ldexpf copysignf truncf floorf ceilf roundf \
- sincosf asinf acosf atanf sinhf coshf tanhf asinhf acoshf atanhf exp2f log2f exp10f \
- log10f powf powintf hypotf cbrtf fmodf dremf remainderf remquof expm1f log1pf fmaf
-$(call WRAP, $(FLOAT_FUNCTIONS))
diff --git a/keymaps/onekey/rp2040/chconf.h b/keymaps/onekey/rp_smp/chconf.h
index 5b38d53..8937db2 100644
--- a/keymaps/onekey/rp2040/chconf.h
+++ b/keymaps/onekey/rp_smp/chconf.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
diff --git a/keymaps/onekey/rp2040/keymap.c b/keymaps/onekey/rp_smp/keymap.c
index 07fb9fa..20372fd 100644
--- a/keymaps/onekey/rp2040/keymap.c
+++ b/keymaps/onekey/rp_smp/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
diff --git a/keymaps/onekey/rp2040/mcuconf.h b/keymaps/onekey/rp_smp/mcuconf.h
index abc250c..c35ba16 100644
--- a/keymaps/onekey/rp2040/mcuconf.h
+++ b/keymaps/onekey/rp_smp/mcuconf.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
diff --git a/keymaps/onekey/rp_smp/rules.mk b/keymaps/onekey/rp_smp/rules.mk
new file mode 100644
index 0000000..790127f
--- /dev/null
+++ b/keymaps/onekey/rp_smp/rules.mk
@@ -0,0 +1,3 @@
+CONSOLE_ENABLE = yes
+OPT_DEFS += -UCRT0_EXTRA_CORES_NUMBER \
+ -DCRT0_EXTRA_CORES_NUMBER=1
diff --git a/keymaps/onekey/stm32f411/config.h b/keymaps/onekey/stm32f411/config.h
deleted file mode 100644
index 1b03659..0000000
--- a/keymaps/onekey/stm32f411/config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2024 [email protected]
-// SPDX-License-Identifier: GPL-2.0-or-later
-#pragma once
-
-#undef ADC_PIN
-#undef BACKLIGHT_PIN
-#undef MATRIX_ROW_PINS
-#undef MATRIX_COL_PINS
-#define DIRECT_PINS \
- { \
- { A0 } \
- }
diff --git a/keymaps/relic/keymap.c b/keymaps/relic/keymap.c
index 7f22e6f..ca296d8 100644
--- a/keymaps/relic/keymap.c
+++ b/keymaps/relic/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jack.h"
@@ -8,13 +8,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
___BASE1___, PNP,
___BASE2___,
___BASE3___,
- KC_VOLD, KC_ESC, _______, LWRSPC, _______, RSEBSP, _______, C(S(KC_V)), KC_VOLU
+ KC_VOLD, KC_ESC, XXXXXXX, LWRSPC, XXXXXXX, RSEBSP, XXXXXXX, C(S(KC_V)), KC_VOLU
),
[_LOWER] = LAYOUT_jack_all(
___LOWER1___, _______,
___LOWER2___,
___LOWER3___,
- _______, TABLE1, _______, _______, _______, _______, _______, TABLE2, _______
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_jack_all(
___RAISE1___, _______,
diff --git a/keymaps/relic/readme.md b/keymaps/relic/readme.md
deleted file mode 100644
index a8e6d47..0000000
--- a/keymaps/relic/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### relic
-![front](https://i.imgur.com/FMkKVs0h.jpeg)
-![back](https://i.imgur.com/s1HrBumh.jpeg)
diff --git a/keymaps/vault35/config.h b/keymaps/vault35/config.h
index 392a9d4..7fefbd9 100644
--- a/keymaps/vault35/config.h
+++ b/keymaps/vault35/config.h
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
diff --git a/keymaps/vault35/keymap.c b/keymaps/vault35/keymap.c
index e78c59d..10ee07f 100644
--- a/keymaps/vault35/keymap.c
+++ b/keymaps/vault35/keymap.c
@@ -1,4 +1,4 @@
-// Copyright 2024 [email protected]
+// Copyright 2025 [email protected]
// SPDX-License-Identifier: GPL-3.0-or-later
#include "jack.h"
@@ -8,16 +8,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
___BASE1___, XXXXXXX,
___BASE2___,
___BASE3___,
- UPDIR, KC_ESC, LWRSPC, _______, RSEBSP, C(S(KC_V)), PNP
+ UPDIR, KC_ESC, LWRSPC, XXXXXXX, RSEBSP, C(S(KC_V)), PNP
),
[_LOWER] = LAYOUT_jack_all(
- ___LOWER1___, XXXXXXX,
+ ___LOWER1___, _______,
___LOWER2___,
___LOWER3___,
_______, _______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT_jack_all(
- ___RAISE1___, XXXXXXX,
+ ___RAISE1___, _______,
___RAISE2___,
___RAISE3___,
_______, _______, _______, _______, _______, _______, _______
diff --git a/keymaps/vault35/readme.md b/keymaps/vault35/readme.md
deleted file mode 100644
index 15d1db4..0000000
--- a/keymaps/vault35/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### vault35
-![w/o keycaps](https://i.imgur.com/AHwhQdDh.jpeg)
-![w/ keycaps](https://i.imgur.com/lXP50ITh.jpeg)
diff --git a/ld/RP2040_FLASH_TIMECRIT_ROM_MATH.ld b/ld/RP2040_FLASH_TIMECRIT_ROM_MATH.ld
new file mode 100644
index 0000000..4b1c595
--- /dev/null
+++ b/ld/RP2040_FLASH_TIMECRIT_ROM_MATH.ld
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2006..2021 ChibiOS
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/*
+ * RP2040 memory setup.
+ */
+MEMORY
+{
+ flash0 (rx) : org = 0x00000000, len = 16k /* ROM */
+ flash1 (rx) : org = 0x10000000, len = DEFINED(FLASH_LEN) ? FLASH_LEN : 2048k /* XIP */
+ flash2 (rx) : org = 0x00000000, len = 0
+ flash3 (rx) : org = 0x00000000, len = 0
+ flash4 (rx) : org = 0x00000000, len = 0
+ flash5 (rx) : org = 0x00000000, len = 0
+ flash6 (rx) : org = 0x00000000, len = 0
+ flash7 (rx) : org = 0x00000000, len = 0
+ ram0 (wx) : org = 0x20000000, len = 256k /* SRAM0 striped */
+ ram1 (wx) : org = 0x00000000, len = 256k /* SRAM0 non striped */
+ ram2 (wx) : org = 0x00000000, len = 0
+ ram3 (wx) : org = 0x00000000, len = 0
+ ram4 (wx) : org = 0x20040000, len = 4k /* SRAM4 */
+ ram5 (wx) : org = 0x20041000, len = 4k /* SRAM5 */
+ ram6 (wx) : org = 0x00000000, len = 0
+ ram7 (wx) : org = 0x20041f00, len = 256 /* SRAM5 boot */
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash1);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash1);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash1);
+REGION_ALIAS("XTORS_FLASH_LMA", flash1);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash1);
+REGION_ALIAS("TEXT_FLASH_LMA", flash1);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash1);
+REGION_ALIAS("RODATA_FLASH_LMA", flash1);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash1);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash1);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash1);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram4);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram4);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("C1_MAIN_STACK_RAM", ram5);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("C1_PROCESS_STACK_RAM", ram5);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash1);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+SECTIONS
+{
+ .flash_begin : {
+ __flash_binary_start = .;
+ } > flash1
+
+ .boot2 : {
+ __boot2_start__ = .;
+ KEEP (*(.boot2))
+ __boot2_end__ = .;
+ } > flash1
+}
+
+/* Generic rules inclusion.*/
+INCLUDE rules_stacks.ld
+INCLUDE rules_stacks_c1.ld
+INCLUDE RP2040_rules_code_with_boot2.ld
+
+SECTIONS
+{
+ .data : ALIGN(4)
+ {
+ PROVIDE(_textdata = LOADADDR(.data));
+ PROVIDE(_data = .);
+ __textdata_base__ = LOADADDR(.data);
+ __data_base__ = .;
+ *(vtable)
+ *(.time_critical*)
+ . = ALIGN(4);
+ *(.data)
+ *(.data.*)
+ *(.ramtext)
+ . = ALIGN(4);
+ PROVIDE(_edata = .);
+ __data_end__ = .;
+ } > DATA_RAM AT > DATA_RAM_LMA
+
+ .bss (NOLOAD) : ALIGN(4)
+ {
+ __bss_base__ = .;
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ PROVIDE(end = .);
+ } > BSS_RAM
+}
+
+INCLUDE rules_memory.ld
+
+SECTIONS
+{
+ .flash_end : {
+ __flash_binary_end = .;
+ } > flash1
+}
+
+SECTIONS
+{
+ .preinit : ALIGN(4){
+ . = ALIGN(4);
+ __preinit_array_base__ = .;
+ KEEP(*(SORT(.preinit_array.*)))
+ KEEP(*(.preinit_array))
+ __preinit_array_end__ = .;
+ } > XTORS_FLASH AT > XTORS_FLASH_LMA
+}
diff --git a/readme.md b/readme.md
index c081265..1f6be41 100644
--- a/readme.md
+++ b/readme.md
@@ -1,23 +1,21 @@
-### qmk.me
-this is a self-contained repository for my personal [qmk](https://github.com/qmk/qmk_firmware) userspace & keyboard code.
+## qmk.me
+This is a self-contained repository for my personal [QMK](https://github.com/qmk/qmk_firmware) userspace & keyboard code.
![keyboard](https://i.imgur.com/s0dN0JD.jpeg)
### building
-symlinks are used to compile this code in a proper `qmk_firmware` repository.
+Symlinks are used to compile this code in a proper `qmk_firmware` repository.
eg.
```shell
-ln -s ~/qmk.me/jack ~/qmk_firmware/users/jack
-ln -s ~/qmk.me/keyboards/relic ~/qmk_firmware/keyboards/relic
-echo "users/jack\nkeyboards/relic" >> ~/qmk_firmware/.git/info/exclude
+ln -s qmk.me/jack qmk_firmware/users/jack
+ln -s qmk.me/keyboards/relic qmk_firmware/keyboards/relic
+echo "users/jack\nkeyboards/relic" >> qmk_firmware/.git/info/exclude
qmk compile -kb relic -km jack
```
-the official [userspace feature](https://docs.qmk.fm/newbs_external_userspace)
-is not used as this repository contains personal keyboards, which are not supported.
+The official external [userspace feature](https://docs.qmk.fm/newbs_external_userspace) is not used as this repository contains personal keyboards, which are not supported.
### layout
-a simple 34-key layout that makes use of 2 (primary) layers, home-row mods, & combos for many symbols.
-mostly used in sway, vim (c, python), & other generic computing tasks.
+A simple 34-key layout that makes use of 2 (primary) layers, home-row mods, & combos for many symbols. Mostly used in Sway, Vim (C, Python), & other generic computing tasks.
![layout](img/layout.svg)
diff --git a/util/link.sh b/util/link.sh
index a451438..c0231bf 100755
--- a/util/link.sh
+++ b/util/link.sh
@@ -23,9 +23,9 @@ link() {
}
link crkbd crkbd
+link beiwagon boardsource/beiwagon
link bully mkh_studio/bully
link f60 bioi/f60
-link ferris ferris
link kyria splitkb/kyria
link relic projectcain/relic
link vault35 projectcain/vault35
diff --git a/jack/raw.py b/util/raw.py
index 994a92c..fe63d49 100644
--- a/jack/raw.py
+++ b/util/raw.py
@@ -1,4 +1,4 @@
-# Copyright 2024 [email protected]
+# Copyright 2025 [email protected]
# SPDX-License-Identifier: GPL-2.0-or-later
import hid
import sys