summaryrefslogtreecommitdiffstats
path: root/keyboard/preonic
diff options
context:
space:
mode:
Diffstat (limited to 'keyboard/preonic')
-rw-r--r--keyboard/preonic/Makefile55
-rw-r--r--keyboard/preonic/config.h4
-rw-r--r--keyboard/preonic/keymaps/default/README.md35
-rw-r--r--keyboard/preonic/keymaps/default/keymap.c330
-rw-r--r--keyboard/preonic/keymaps/default/makefile.mk1
-rw-r--r--keyboard/preonic/preonic_music.hex1713
-rw-r--r--keyboard/preonic/preonic_pcb_r1.hex (renamed from keyboard/preonic/preonic_pcb.hex)0
-rw-r--r--keyboard/preonic/preonic_pcb_r1_w_bootloader.hex1863
-rw-r--r--keyboard/preonic/preonic_pcb_silent.hex1189
9 files changed, 2193 insertions, 2997 deletions
diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile
index 664aff7321..3504e27201 100644
--- a/keyboard/preonic/Makefile
+++ b/keyboard/preonic/Makefile
@@ -126,27 +126,44 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+# change to "no" to disable the options, or define them in the makefile.mk in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = YES # MIDI controls
-AUDIO_ENABLE = YES # Audio output on port C6
-# UNICODE_ENABLE = YES # Unicode
-# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
-# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time.
-
-ifdef BACKLIGHT_ENABLE
- SRC += backlight.c
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifdef KEYMAP
+
+ifeq ("$(wildcard keymaps/$(KEYMAP).c)","")
+ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","")
+ include keymaps/$(KEYMAP)/makefile.mk
+endif
+endif
+
+else
+
+ifneq ("$(wildcard keymaps/default/makefile.mk)","")
+ include keymaps/default/makefile.mk
+endif
+
+endif
+
+ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
+ SRC := backlight.c $(SRC)
endif
diff --git a/keyboard/preonic/config.h b/keyboard/preonic/config.h
index 5528667fa7..bb9d29dab7 100644
--- a/keyboard/preonic/config.h
+++ b/keyboard/preonic/config.h
@@ -73,10 +73,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* disable debug print */
-#define NO_DEBUG
+// #define NO_DEBUG
/* disable print */
-#define NO_PRINT
+// #define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
diff --git a/keyboard/preonic/keymaps/default/README.md b/keyboard/preonic/keymaps/default/README.md
index d2f43bbdb8..e911968dd9 100644
--- a/keyboard/preonic/keymaps/default/README.md
+++ b/keyboard/preonic/keymaps/default/README.md
@@ -1,34 +1 @@
-# The Default Planck Layout
-
- const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = { /* Qwerty */
- {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
- {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
- },
- [_CM] = { /* Colemak */
- {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
- {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
- },
- [_DV] = { /* Dvorak */
- {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
- {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
- {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
- },
- [_RS] = { /* RAISE */
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
- },
- [_LW] = { /* LOWER */
- {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
- }
- }; \ No newline at end of file
+# The default Preonic layout - largely based on the Planck's \ No newline at end of file
diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c
index 7846707848..95b9718762 100644
--- a/keyboard/preonic/keymaps/default/keymap.c
+++ b/keyboard/preonic/keymaps/default/keymap.c
@@ -1,76 +1,253 @@
-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-// this is the style you want to emulate.
-
#include "preonic.h"
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
-#define _QW 0
-#define _CM 1
-#define _DV 2
-#define _LW 3
-#define _RS 4
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _MUSIC 5
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+#define AUD_OFF M(6)
+#define AUD_ON M(7)
+#define MUS_OFF M(8)
+#define MUS_ON M(9)
+#define VC_IN M(10)
+#define VC_DE M(11)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QW] = { /* Qwerty */
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
-[_CM] = { /* Colemak */
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
-[_DV] = { /* Dvorak */
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
- {M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
-[_RS] = { /* RAISE */
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
-[_LW] = { /* LOWER */
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Music (reserved for process_action_user)
+ *
+ */
+[_MUSIC] = {
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
+ {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
}
+
+
};
const uint16_t PROGMEM fn_actions[] = {
};
+#ifdef AUDIO_ENABLE
float start_up[][2] = {
- {440.0*pow(2.0,(67)/12.0), 600},
- {440.0*pow(2.0,(64)/12.0), 400},
- {440.0*pow(2.0,(55)/12.0), 400},
- {440.0*pow(2.0,(60)/12.0), 400},
- {440.0*pow(2.0,(64)/12.0), 1000},
+ {440.0*pow(2.0,(14)/12.0), 20},
+ {440.0*pow(2.0,(26)/12.0), 8},
+ {440.0*pow(2.0,(18)/12.0), 20},
+ {440.0*pow(2.0,(26)/12.0), 8}
};
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
- // MACRODOWN only works in this function
switch(id) {
- case 0:
+ case _QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ break;
+ case _COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case _DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ break;
+ case _LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case _RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case M_BL:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
@@ -80,13 +257,86 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
unregister_code(KC_RSFT);
}
break;
+ case 6:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ audio_off();
+ #endif
+ }
+ break;
+ case 7:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ audio_on();
+ PLAY_NOTE_ARRAY(start_up, false, 0);
+ #endif
+ }
+ break;
+ case 8:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ layer_off(_MUSIC);
+ stop_all_notes();
+ #endif
+ }
+ break;
+ case 9:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ layer_on(_MUSIC);
+ #endif
+ }
+ break;
+ case 10:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ voice_iterate();
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ #endif
+ }
+ break;
+ case 11:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ voice_deiterate();
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ #endif
+ }
+ break;
}
return MACRO_NONE;
};
+
void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(start_up, false, 0);
+ #endif
+}
+
#ifdef AUDIO_ENABLE
- init_notes();
- play_notes(&start_up, 5, false);
-#endif
+
+uint8_t starting_note = 0x0C;
+int offset = 7;
+
+void process_action_user(keyrecord_t *record) {
+
+ if (IS_LAYER_ON(_MUSIC)) {
+ if (record->event.pressed) {
+ play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
+ } else {
+ stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
+ }
+ }
+
}
+
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+}
+
+#endif \ No newline at end of file
diff --git a/keyboard/preonic/keymaps/default/makefile.mk b/keyboard/preonic/keymaps/default/makefile.mk
new file mode 100644
index 0000000000..628167ff66
--- /dev/null
+++ b/keyboard/preonic/keymaps/default/makefile.mk
@@ -0,0 +1 @@
+AUDIO_ENABLE = yes \ No newline at end of file
diff --git a/keyboard/preonic/preonic_music.hex b/keyboard/preonic/preonic_music.hex
deleted file mode 100644
index 603693bffb..0000000000
--- a/keyboard/preonic/preonic_music.hex
+++ /dev/null
@@ -1,1713 +0,0 @@
-:100000000C9410030C9454030C9454030C94540358
-:100010000C9454030C9454030C9454030C94540304
-:100020000C9454030C9454030C9410170C94E21782
-:100030000C94BD290C9454030C9454030C94540355
-:100040000C9454030C9454030C9454030C945403D4
-:100050000C9454030C942A2A0C9454030C945403C7
-:100060000C9454030C9454030C9454030C945403B4
-:100070000C9454030C9454030C9454030C945403A4
-:100080000C94440E0C9454030C9454030C94540399
-:100090000C9454030C9454030C9454030C94540384
-:1000A0000C9454030C9454030C9454030763423689
-:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
-:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
-:1000D0000000803F08000000BE922449123EABAAF7
-:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
-:1000F000AA3E00000000BF000000803F000000009A
-:1001000000084178D3BB4387D1133D190E3CC3BDD2
-:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
-:1001200080EFFFBE01C4FF7F3F00000000003500EC
-:100130001E001F00200021002200230024002500B3
-:10014000260027002A002B0014001A0008001500C2
-:1001500017001C0018000C00120013002A002900D0
-:1001600004001600070009000A000B000D000E0035
-:100170000F0033003400E1001D001B0006001900D1
-:10018000050011001000360037003800280000304C
-:10019000E000E200E30003522C002C000452500067
-:1001A000510052004F0035001E001F0020002100AA
-:1001B0002200230024002500260027002A002B000F
-:1001C00014001A00090013000A000D000F001800A7
-:1001D0001C0033002A002900040015001600170037
-:1001E00007000B00110008000C0012003400E100B1
-:1001F0001D001B000600190005000E00100036004F
-:100200003700380028000030E000E200E30003522D
-:100210002C002C0004525000510052004F003500B9
-:100220001E001F00200021002200230024002500C2
-:10023000260027002A002B00340036003700130068
-:100240001C0009000A00060015000F002A00290002
-:1002500004001200080018000C0007000B00170033
-:10026000110016003800E100330014000D000E00EC
-:100270001B00050010001A0019001D0028000030A6
-:10028000E000E200E30003522C002C000452500076
-:10029000510052004F0035001E001F0020002100B9
-:1002A0002200230024002500260027002A00350212
-:1002B0001E021F0220022102220223022402250222
-:1002C000260227022A0001003A003B003C003D00C4
-:1002D0003E003F002D022E022F02300231020100AB
-:1002E00040004100420043004400450000530153D8
-:1002F0000253005001000100010001000100010053
-:10030000010001000100AB00AA00A900AE00350009
-:100310001E001F00200021002200230024002500D1
-:10032000260027002A0035001E001F0020002100A3
-:100330002200230024002500260027002A000100B7
-:100340003A003B003C003D003E003F002D002E00E7
-:100350002F00300031000100400041004200430006
-:1003600044004500005301530253005001000100B6
-:100370000100010001000100010001000100AB00CB
-:10038000AA00A900AE00006000600060006000608C
-:10039000006000600060006000600060006000605D
-:1003A000006000600060006000600060006000604D
-:1003B000006000600060006000600060006000603D
-:1003C000006000600060006000600060006000602D
-:1003D000006000600060006000600060006000601D
-:1003E00000600060006000300100010001000100B9
-:1003F00001000100010000600060006000602A034D
-:1004000054006800650020005000720065006F0015
-:100410006E006900630020004B00650079006200F7
-:100420006F0061007200640000002C034F00720036
-:10043000740068006F006C0069006E006500610068
-:10044000720020004B006500790062006F006100BF
-:100450007200640073000000040309040902D00064
-:10046000060100A0FA0904000001030101000921AE
-:1004700011010001223F000705810308000A090459
-:1004800001000103010200092111010001224D00B8
-:100490000705820308000A090402000103000000A6
-:1004A0000921110100012236000705830308000A13
-:1004B00009040300020300000009211101000122C8
-:1004C0002000070584032000010705040320000124
-:1004D00009040400000101000009240100010900D1
-:1004E00001050904050002010300000724010001C1
-:1004F0004100062402010100062402020200092430
-:1005000003010301020100092403020401010100A7
-:100510000905060240000500000525010101090545
-:1005200085024000050000052501010312011001AC
-:1005300000000008EDFE61600100010200010631CB
-:10054000FF0974A1010975150025FF952075088123
-:10055000020976150025FF952075089102C0050156
-:100560000980A101850216010026B7001A01002AA0
-:10057000B700751095018100C0050C0901A1018526
-:1005800003160100269C021A01002A9C0275109590
-:10059000018100C005010902A1010901A1000509AD
-:1005A000190129051500250195057501810295019F
-:1005B000750381010501093009311581257F9502F7
-:1005C0007508810609381581257F95017508810612
-:1005D000050C0A38021581257F950175088106C032
-:1005E000C005010906A101050719E029E715002545
-:1005F00001950875018102950175088101050819A9
-:100600000129059505750191029501750391010573
-:1006100007190029FF150025FF950675088100C000
-:1006200011241FBECFEFDAE0DEBFCDBF04B603FE5C
-:1006300024C08091050490910604A0910704B09114
-:1006400008048730904BA740B04BB9F410920504D2
-:1006500010920604109207041092080414BE84B786
-:10066000877F84BF88E10FB6F89480936000109272
-:1006700060000FBEE0E0F8E3099512E0A0E0B1E011
-:10068000E6ECF9E602C005900D92A832B107D9F761
-:1006900014E0A8E2B2E001C01D92A530B107E1F775
-:1006A0000E94C8130C94E1340C94000061111DC029
-:1006B000FC018281882351F085EE0E94901E0E94E9
-:1006C000BC3080E290E0A0E0B0E007C085EE0E9480
-:1006D000581F81E090E0A0E0B0E08093E1029093A9
-:1006E000E202A093E302B093E40280E090E0089578
-:1006F0000E94370E40E050E069E070E080E091E059
-:100700000C94880F08950E948B036E9A769A0C942D
-:1007100078030C948203279A2F988FEF9FEF909382
-:100720008700809386008AE08093800089E180932F
-:1007300081000C94653081110BC080918000877F0F
-:100740008093800010928D0010928C002F98089555
-:100750002F98833041F480918000886080938000DE
-:100760008FEF9FEF12C0909180009860909380006F
-:1007700023E030E0281B3109220F331F8FEF9FEF5A
-:1007800002C0969587952A95E2F790938D00809305
-:100790008C0008958B3B910568F4883A910530F5FB
-:1007A000853A9105C0F48430910598F4019709F0D9
-:1007B0006FC071C0803E910508F46AC0883E910503
-:1007C00040F09C01205F31092031310508F060C004
-:1007D0005CC09C01A1C0853A910509F45FC0863ACE
-:1007E000910509F45EC023E830E496C0883A91058B
-:1007F00009F45AC0893A910509F459C08A3A910519
-:1008000009F458C08B3A910509F457C08C3A910508
-:1008100009F456C08D3A910509F455C0803B910505
-:1008200009F454C08E3A910509F453C08F3A9105EA
-:1008300009F452C0813B910509F451C0823B9105F6
-:1008400009F450C0833B910509F44FC0843B9105E6
-:1008500009F44EC0853B910509F44DC0863B9105D6
-:1008600009F44CC0873B910509F44BC0883B9105C6
-:1008700009F44AC0893B910509F449C08A3B9105B6
-:1008800009F048C02AE236E447C09C01306544C004
-:1008900020E030E041C021E030E03EC021E830E41B
-:1008A0003BC022E830E438C022EE34E435C029EE03
-:1008B00034E432C02AEE34E42FC025EB34E42CC0FB
-:1008C00026EB34E429C027EB34E426C02CEC34E4D6
-:1008D00023C02DEC34E420C023E835E41DC02AE811
-:1008E00035E41AC022E935E417C024E935E414C020
-:1008F00021E236E411C023E236E40EC024E236E4FD
-:100900000BC025E236E408C026E236E405C027E243
-:1009100036E402C020E034E4C90108959CE0799FE8
-:10092000F00111249CE3899FE00DF11D1124E60FD5
-:10093000F11DEE0FFF1FE25DFE4F25913491C901BD
-:100940000895880F991F82559040FC01259134919C
-:10095000C9010895880F991F825D9E4FFC01259162
-:100960003491C90108950E948E049C019A958115C5
-:100970009F4110F4C9010895C90190528115904119
-:1009800028F4C9019F700E94AA040895C9019053D8
-:100990008115904120F4C9019927906C0895C901EF
-:1009A0009054409728F4C9018F709927946D089549
-:1009B000203180E4380719F480E091ED0895213169
-:1009C00090E4390719F480E090ED0895223140E475
-:1009D000340719F480E092ED0895233180E438075C
-:1009E00019F480E093ED0895211590E53907A1F4FD
-:1009F0000E948B2340E065E088E491E00E94880F2C
-:100A00002FEF44E38CE0215040408040E1F700C0EC
-:100A100000000E944F2A1EC1213090E5390731F4B1
-:100A20008091F10281608093F10214C1C901905557
-:100A30008115904108F062C0432F55274F7055270C
-:100A400041305105F9F4C90174E0880F991F7A9576
-:100A5000E1F788279370B901E3E0660F771FEA9505
-:100A6000E1F760767727862B972B9C6823703327D6
-:100A700002C0440F551F2A95E2F74F715527842B6A
-:100A8000952B08954230510529F4922F8827816FC4
-:100A9000906A089543305105B9F4C90153E0880FB5
-:100AA000991F5A95E1F7807E97702370332741E0B4
-:100AB00050E002C0440F551F2A95E2F74F715527A9
-:100AC000842B952B9C6808954430510589F5C90104
-:100AD00043E0880F991F4A95E1F7807E9770237055
-:100AE000332741E050E002C0440F551F2A95E2F73A
-:100AF0004F715527842B952B9A680895C9019056FC
-:100B00008115904118F4C901906F0895C90190575B
-:100B10008115904120F4C9019F7090620895C90128
-:100B200090588115904120F4C9019F70906A0895F2
-:100B3000203E3105E0F4203C310568F521333105D4
-:100B400009F475C048F42932310509F46BC02A3222
-:100B5000310509F07BC075C02933310501F1223818
-:100B60003105E9F02533310509F070C051C0233E4D
-:100B70003105B1F140F4203E3105D1F0223E31057E
-:100B800009F064C01CC0263E310579F1273E3105CD
-:100B900009F05CC038C0C9010E94A1040895809189
-:100BA000020380FD02C081FF51C080EE90E04FC083
-:100BB0008091020380FFF9CF89E390E048C08091E3
-:100BC000020382FF0AC08091020384FF03C080E019
-:100BD00090E03DC083EE90E03AC082EE90E037C0F6
-:100BE0008091020382FFEFCFF8CF8091020383FF51
-:100BF00007C08091020384FDEACF87EE90E027C012
-:100C000086EE90E024C08091020383FFF2CFF8CFFC
-:100C10008091020385FF03C089E290E018C085E35C
-:100C200090E015C08091020385FDF9CFF5CF80914A
-:100C3000020386FF03C08AE290E009C081E390E0EE
-:100C400006C08091020386FDF9CFF5CFC9010E944D
-:100C5000CA030895089508950C942B065F926F922D
-:100C60007F928F929F92AF92BF92CF92DF92EF923C
-:100C7000FF920F931F93CF93DF93CDB7DEB72A97E1
-:100C80000FB6F894DEBF0FBECDBF9E012F5F3F4F62
-:100C90004E018BE0880E911C60E070E000E010E0F7
-:100CA000E12CF12CC12CD12CA12CB12C8AE0782E76
-:100CB000622E532E41E050E0E3E9F1E0A62DB52D80
-:100CC000872D01900D928A95E1F7F901819191911B
-:100CD0009F01FC01E07FFF27E032F10559F48F709E
-:100CE0009927FA0102C0EE0FFF1F8A95E2F7AE2A9C
-:100CF000BF2A37C0E033F10559F48F709927FA0104
-:100D000002C0EE0FFF1F8A95E2F7CE2ADF2A29C024
-:100D1000E034F10559F48F709927FA0102C0EE0F03
-:100D2000FF1F8A95E2F7EE2AFF2A1BC0E035F10586
-:100D300059F48F709927FA0102C0EE0FFF1F8A95B0
-:100D4000E2F70E2B1F2B0DC0E036F10551F48F702A
-:100D50009927FA0102C0EE0FFF1F8A95E2F76E2B6A
-:100D60007F2B2815390509F0A7CF94B18A2D8095DE
-:100D7000892384B985B18A2985B997B18C2D80954D
-:100D8000892387B988B18C2988B99AB18E2D80952D
-:100D900089238AB98BB18E298BB99DB1802F80951B
-:100DA00089238DB98EB1802B8EB990B3862F809513
-:100DB000892380BB81B3862B81BB2A960FB6F8941A
-:100DC000DEBF0FBECDBFDF91CF911F910F91FF907E
-:100DD000EF90DF90CF90BF90AF909F908F907F90DB
-:100DE0006F905F9008955F926F927F928F929F9223
-:100DF000AF92BF92CF92DF92EF92FF920F931F9329
-:100E0000CF93DF93CDB7DEB768970FB6F894DEBF08
-:100E10000FBECDBF85B7806885BF85B7806885BFA9
-:100E20000E942E069E012F5F3F4F4E0189E1880EE2
-:100E3000911C60E070E000E010E0E12CF12CC12C8E
-:100E4000D12CA12CB12C98E1792E622E532E41E0A9
-:100E500050E0EDE9F1E0A62DB52D872D01900D9222
-:100E60008A95E1F7F901819191919F01FC01E07F61
-:100E7000FF27E032F10559F48F709927FA0102C07B
-:100E8000EE0FFF1F8A95E2F7AE2ABF2A37C0E03384
-:100E9000F10559F48F709927FA0102C0EE0FFF1F78
-:100EA0008A95E2F7CE2ADF2A29C0E034F10559F409
-:100EB0008F709927FA0102C0EE0FFF1F8A95E2F7A3
-:100EC000EE2AFF2A1BC0E035F10559F48F709927EF
-:100ED000FA0102C0EE0FFF1F8A95E2F70E2B1F2BBF
-:100EE0000DC0E036F10551F48F709927FA0102C068
-:100EF000EE0FFF1F8A95E2F76E2B7F2B2815390521
-:100F000009F0A7CF94B18A2D8095892384B985B142
-:100F10008A2985B997B18C2D8095892387B988B1A5
-:100F20008C2988B99AB18E2D809589238AB98BB185
-:100F30008E298BB99DB1802F809589238DB98EB173
-:100F4000802B8EB990B3862F8095892380BB81B387
-:100F5000862B81BB10922902109228021092330234
-:100F60001092320210922B0210922A021092350235
-:100F70001092340210922D0210922C02109237021D
-:100F80001092360210922F0210922E021092390205
-:100F900010923802109231021092300210923B02ED
-:100FA00010923A0268960FB6F894DEBF0FBECDBF1E
-:100FB000DF91CF911F910F91FF90EF90DF90CF9035
-:100FC000BF90AF909F908F907F906F905F900C94A8
-:100FD00083035F926F927F928F929F92AF92BF92A4
-:100FE000CF92DF92EF92FF920F931F93CF93DF93F5
-:100FF000CDB7DEB7A2970FB6F894DEBF0FBECDBF58
-:101000007E0149E1E40EF11C22E3C22E22E0D22E41
-:101010005E0153E2A50EB11C3AE0532E470101E0F8
-:1010200010E048E1642E55E0752EE3E9F1E0D401CB
-:10103000852D01900D928A95E1F7F70181919191AB
-:101040007F019C01207F33272032310589F424B1B0
-:101050008F709927A80102C0440F551F8A95E2F7A7
-:10106000CA01242B24B995B18095892385B94FC035
-:101070002033310589F427B18F709927F80102C018
-:10108000EE0FFF1F8A95E2F7CF012E2B27B998B1FB
-:101090008095892388B93BC02034310589F42AB171
-:1010A0008F709927A80102C0440F551F8A95E2F757
-:1010B000CA01242B2AB99BB1809589238BB927C0FB
-:1010C0002035310589F42DB18F709927F80102C0C0
-:1010D000EE0FFF1F8A95E2F7CF012E2B2DB99EB19F
-:1010E000809589238EB913C02036310581F420B351
-:1010F0008F709927A80102C0440F551F8A95E2F707
-:10110000CA01242B20BB91B38095892381BB50EA6F
-:101110005A95F1F7BE016F5F7F4F80E090E020E0CD
-:1011200030E0EDE9F1E0DE011196462D01900D92DF
-:101130004A95E1F7FB0141915191BF01FA01E07F2E
-:10114000FF27E032F10511F4E3B113C0E033F105FC
-:1011500011F4E6B10EC0E034F10511F4E9B109C0B3
-:10116000E035F10511F4ECB104C0E036F105B9F455
-:10117000EFB1F0E04F70552702C0F595E7954A951D
-:10118000E2F7E0FD08C0A801022E02C0440F551F7F
-:101190000A94E2F702C040E050E0842B952B2F5FC9
-:1011A0003F4F2C30310509F0BC