From 28c66bcec672fe82d6de08aba189d808f1bb8760 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Tue, 18 Oct 2022 21:53:56 -0400 Subject: [PATCH 01/15] Current atom47 --- .../evyd13/atom47/keymaps/PHSC138/README.md | 69 ++++ .../evyd13/atom47/keymaps/PHSC138/config.h | 6 + .../evyd13/atom47/keymaps/PHSC138/keymap.c | 351 ++++++++++++++++++ .../evyd13/atom47/keymaps/PHSC138/rules.mk | 16 + 4 files changed, 442 insertions(+) create mode 100644 keyboards/evyd13/atom47/keymaps/PHSC138/README.md create mode 100644 keyboards/evyd13/atom47/keymaps/PHSC138/config.h create mode 100644 keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c create mode 100644 keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/README.md b/keyboards/evyd13/atom47/keymaps/PHSC138/README.md new file mode 100644 index 000000000000..f273e1f9a9c6 --- /dev/null +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/README.md @@ -0,0 +1,69 @@ +# PHSC138's Layout for the atom47 +## Make +```sh +qmk make -kb evyd13/atom47/rev3 -km PHSC138 +``` +## Flash +```sh +qmk flash -kb evyd13/atom47/rev3 -km PHSC138 +``` +## Layers +- TODO: pictures +```c +// Tap pn for toggle to _PROG, or hold for numpad +[_BASE] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), \ + KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP),KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), \ +``` + + +```c +// LEFT AND RIGHT SHIFT: '(' and ')' when tapped, shift when held +// LEFT AND RIGHT CTRL: '{' and '}' when tapped, ctrl when held +// LEFT AND RIGHT ALT: '[' and ']' when tapped, ctrl when held +[_PROG] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, \ + TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), \ +``` + +```c +// Macro for right space is bhop +// Maco for 'fn' is move forward +// Macro for 'fn1' is spin constantly +// Macro for right shift is D20 +[_GAME] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, \ + _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), \ +``` + +```c +[_FN] = LAYOUT( + _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, \ + KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, \ + _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ +``` + +```c +[_FN1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ + _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ +``` + + +```c +[_NUM] = LAYOUT( + _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROFILE_MACRO, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, \ + _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, \ + _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), \ +}; +``` diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/config.h b/keyboards/evyd13/atom47/keymaps/PHSC138/config.h new file mode 100644 index 000000000000..8af6e7ffa834 --- /dev/null +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/config.h @@ -0,0 +1,6 @@ +#ifndef PHSC138_CONFIG_H +#define PHSC138_CONFIG_H + +#define TAPPING_TERM 150 // Tap dance time limit + +#endif diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c new file mode 100644 index 000000000000..741822cdbfa9 --- /dev/null +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c @@ -0,0 +1,351 @@ +#include QMK_KEYBOARD_H +#include "config.h" +#include + +// These are all aliases for the function layers. +#define _BASE 0 +#define _PROG 1 +#define _GAME 2 +#define _FN 7 +#define _FN1 8 +#define _NUM 9 + + +/* Tap Dance */ +typedef struct { + bool is_press_action; + int state; +} tap; + +enum { + SINGLE_TAP = 1, + SINGLE_HOLD = 2, + DOUBLE_TAP = 3, + DOUBLE_HOLD = 4, + DOUBLE_SINGLE_TAP = 5, //send two single taps + TRIPLE_TAP = 6, + TRIPLE_HOLD = 7 +}; + +//Tap dance enums +enum { + PN_SWAP = 0, + LAPO = 1, + LCPO = 2, + RAPC = 3, + RCPC = 4, + D20 = 5 +}; + +enum custom_keycodes { + PROFILE_MACRO +}; + + +int cur_dance (qk_tap_dance_state_t *state); +void pn_finished (qk_tap_dance_state_t *state, void *user_data); +void pn_reset (qk_tap_dance_state_t *state, void *user_data); + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// TREE: 'pn' to enter custom layers: + // _BASE + // _FN + // _FN1 + // _NUM + // _PROG + // _PROG + // _FN + // _FN1 + // TODO: _NUM + // _GAME + // _GAME + // _BASE + +// Tap pn for toggle to _PROG, or hold for numpad +[_BASE] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), \ + KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP),KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), \ + + +// LEFT AND RIGHT SHIFT: '(' and ')' when tapped, shift when held +// LEFT AND RIGHT CTRL: '{' and '}' when tapped, ctrl when held +// LEFT AND RIGHT ALT: '[' and ']' when tapped, ctrl when held +[_PROG] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, \ + TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), \ + + +// Macro for right space is bhop +// Maco for 'fn' is move forward +// Macro for 'fn1' is spin constantly +// Macro for right shift is D20 +[_GAME] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, \ + _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), \ + + +[_FN] = LAYOUT( + _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, \ + KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, \ + _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ + + +[_FN1] = LAYOUT( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ + _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ + + +[_NUM] = LAYOUT( + _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROFILE_MACRO, _______, _______, \ + _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, \ + _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, \ + _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), \ +}; + + +/*--- Profile Macro ---*/ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case PROFILE_MACRO: + if (record->event.pressed) { + // when keycode PROFILE_MACRO is pressed + SEND_STRING("if [ $shell = 'zsh' ]; then echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.zshrc\nclear; else echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.profile\nclear; fi\n"); + //SEND_STRING("if [ $shell = 'zsh' ]; then echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.zshrc; else echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.profile; fi\n"); + } else { + // when keycode QMKBEST is released + } + break; + } + return true; +}; +/*--- End Profile Macro ---*/ + +/* Return an integer that corresponds to what kind of tap dance should be executed. + * + * How to figure out tap dance state: interrupted and pressed. + * + * Interrupted: If the state of a dance dance is "interrupted", that means that another key has been hit + * under the tapping term. This is typically indicitive that you are trying to "tap" the key. + * + * Pressed: Whether or not the key is still being pressed. If this value is true, that means the tapping term + * has ended, but the key is still being pressed down. This generally means the key is being "held". + * + * One thing that is currenlty not possible with qmk software in regards to tap dance is to mimic the "permissive hold" + * feature. In general, advanced tap dances do not work well if they are used with commonly typed letters. + * For example "A". Tap dances are best used on non-letter keys that are not hit while typing letters. + * + * Good places to put an advanced tap dance: + * z,q,x,j,k,v,b, any function key, home/end, comma, semi-colon + * + * Criteria for "good placement" of a tap dance key: + * Not a key that is hit frequently in a sentence + * Not a key that is used frequently to double tap, for example 'tab' is often double tapped in a terminal, or + * in a web form. So 'tab' would be a poor choice for a tap dance. + * Letters used in common words as a double. For example 'p' in 'pepper'. If a tap dance function existed on the + * letter 'p', the word 'pepper' would be quite frustating to type. + * + * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested + * + */ +int cur_dance(qk_tap_dance_state_t *state) { + if(state->count == 1) { + if(state->interrupted || !state->pressed) return SINGLE_TAP; + //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'. + else return SINGLE_HOLD; + } else if(state->count == 2) { + /* + * DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap + * action when hitting 'pp'. Suggested use case for this return value is when you want to send two + * keystrokes of the key, and not the 'double tap' action/macro. + */ + if(state->interrupted) return DOUBLE_SINGLE_TAP; + else if(state->pressed) return DOUBLE_HOLD; + else return DOUBLE_TAP; + } + //Assumes no one is trying to type the same letter three times (at least not quickly). + //If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add + //an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP' + if(state->count == 3) { + if(state->interrupted || !state->pressed) return TRIPLE_TAP; + else return TRIPLE_HOLD; + } + else return 8; //magic number. At some point this method will expand to work for more presses +} + +//instanalize an instance of 'tap' for the 'pn' tap dance. +static tap pn_tap_state = { + .is_press_action = true, + .state = 0 +}; + +void pn_finished(qk_tap_dance_state_t *state, void *user_data) { + pn_tap_state.state = cur_dance(state); + switch(pn_tap_state.state) { + case SINGLE_TAP: layer_on(_PROG); break; + case SINGLE_HOLD: layer_on(_NUM); break; + //case DOUBLE_TAP: register_code(KC_ESC); break; + //case DOUBLE_HOLD: register_code(KC_LALT); break; + //case DOUBLE_SINGLE_TAP: register_code(KC_X); unregister_code(KC_X); register_code(KC_X); + //Last case is for fast typing. Assuming your key is `f`: + //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`. + //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms. + } +} + +void pn_reset(qk_tap_dance_state_t *state, void *user_data) { + switch(pn_tap_state.state) { + //case SINGLE_TAP: unregister_code(KC_X); break; + case SINGLE_HOLD: layer_off(_NUM); break; + //case DOUBLE_TAP: unregister_code(KC_ESC); break; + //case DOUBLE_HOLD: unregister_code(KC_LALT); + //case DOUBLE_SINGLE_TAP: unregister_code(KC_X); + } + pn_tap_state.state = 0; +} + +static tap lalt_tap_state = { + .is_press_action = true, + .state = 0 +}; + +void lalt_finished(qk_tap_dance_state_t *state, void *user_data) { + lalt_tap_state.state = cur_dance(state); + switch(lalt_tap_state.state) { + case SINGLE_TAP: register_code(KC_LBRC); break; + case SINGLE_HOLD: register_code(KC_LALT); break; + } +} + +void lalt_reset(qk_tap_dance_state_t *state, void *user_data) { + switch(lalt_tap_state.state) { + case SINGLE_TAP: unregister_code(KC_LBRC); break; + case SINGLE_HOLD: unregister_code(KC_LALT); break; + } + lalt_tap_state.state = 0; +} + +static tap ralt_tap_state = { + .is_press_action = true, + .state = 0 +}; + +void ralt_finished(qk_tap_dance_state_t *state, void *user_data) { + ralt_tap_state.state = cur_dance(state); + switch(ralt_tap_state.state) { + case SINGLE_TAP: register_code(KC_RBRC); break; + case SINGLE_HOLD: register_code(KC_RALT); break; + } +} + +void ralt_reset(qk_tap_dance_state_t *state, void *user_data) { + switch(ralt_tap_state.state) { + case SINGLE_TAP: unregister_code(KC_RBRC); break; + case SINGLE_HOLD: unregister_code(KC_RALT); break; + } + ralt_tap_state.state = 0; +} + +static tap rctl_tap_state = { + .is_press_action = true, + .state = 0 +}; + +void rctl_finished(qk_tap_dance_state_t *state, void *user_data) { + rctl_tap_state.state = cur_dance(state); + switch(rctl_tap_state.state) { + case SINGLE_TAP: register_code(KC_RSFT); register_code(KC_RBRC); break; + case SINGLE_HOLD: register_code(KC_RCTL); break; + } +} + +void rctl_reset(qk_tap_dance_state_t *state, void *user_data) { + switch(rctl_tap_state.state) { + case SINGLE_TAP: unregister_code(KC_RSHIFT); unregister_code(KC_RBRC); break; + case SINGLE_HOLD: unregister_code(KC_RCTL); break; + } + rctl_tap_state.state = 0; +} + +static tap lctl_tap_state = { + .is_press_action = true, + .state = 0 +}; + +void lctl_finished(qk_tap_dance_state_t *state, void *user_data) { + lctl_tap_state.state = cur_dance(state); + switch(lctl_tap_state.state) { + case SINGLE_TAP: register_code(KC_LSFT); register_code(KC_LBRC); break; + case SINGLE_HOLD: register_code(KC_LCTL); break; + } +} + +void lctl_reset(qk_tap_dance_state_t *state, void *user_data) { + switch(lctl_tap_state.state) { + case SINGLE_TAP: unregister_code(KC_LSHIFT); unregister_code(KC_LBRC); break; + case SINGLE_HOLD: unregister_code(KC_LCTL); break; + } + lctl_tap_state.state = 0; +} + +static tap d20_tap_state = { + .is_press_action = true, + .state = 0, +}; + +int d20_srand = 0; +uint16_t timer_seed; + +void d20_finished(qk_tap_dance_state_t *state, void *user_data) { + d20_tap_state.state = cur_dance(state); + switch(d20_tap_state.state) { + case SINGLE_HOLD: { + if(d20_srand == 0){ + timer_seed = timer_read(); + srand((unsigned int)timer_seed); + d20_srand = 1; + } + + SEND_STRING("Seed: "); + char *string = (char*)malloc(sizeof(char*) * 16); + snprintf(string, 10, "%u", (unsigned int)timer_seed); + send_string(string); + break; + // Else allow fall through + } + case SINGLE_TAP: { + if(d20_srand == 0){ + timer_seed = timer_read(); + srand((unsigned int)timer_seed); + d20_srand = 1; + } + int r = rand() % 20 + 1; + char *string = (char*)malloc(sizeof(char*) * 4); + snprintf(string, 4, "%d", r); + send_string(string); + break; + } + } +} + +void d20_reset(qk_tap_dance_state_t *state, void *user_data) { + d20_tap_state.state = 0; +} + +qk_tap_dance_action_t tap_dance_actions[] = { + [PN_SWAP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, pn_finished, pn_reset), + [LAPO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lalt_finished, lalt_reset), + [RAPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ralt_finished, ralt_reset), + [LCPO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lctl_finished, lctl_reset), + [RCPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rctl_finished, rctl_reset), + [D20] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, d20_finished, d20_reset), +}; diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk new file mode 100644 index 000000000000..c69dc2d93f0b --- /dev/null +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk @@ -0,0 +1,16 @@ +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable N-Key Rollover +RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # Midi +AUDIO_ENABLE = no # Audio output +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +TAP_DANCE_ENABLE = yes # Enable single keys to have multiple From ea88601423f20e46625c3801ecd32b4ade32ada9 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Tue, 18 Oct 2022 23:51:04 -0400 Subject: [PATCH 02/15] no more std libs --- .../evyd13/atom47/keymaps/PHSC138/config.h | 6 +- .../evyd13/atom47/keymaps/PHSC138/keymap.c | 152 ++++++++++-------- .../evyd13/atom47/keymaps/PHSC138/rules.mk | 7 +- 3 files changed, 91 insertions(+), 74 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/config.h b/keyboards/evyd13/atom47/keymaps/PHSC138/config.h index 8af6e7ffa834..51de1bc7d1b7 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/config.h +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/config.h @@ -1,6 +1,2 @@ -#ifndef PHSC138_CONFIG_H -#define PHSC138_CONFIG_H - +#pragma once #define TAPPING_TERM 150 // Tap dance time limit - -#endif diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c index 741822cdbfa9..1cf6e8f50ba8 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c @@ -1,19 +1,18 @@ #include QMK_KEYBOARD_H #include "config.h" -#include -// These are all aliases for the function layers. -#define _BASE 0 -#define _PROG 1 -#define _GAME 2 -#define _FN 7 -#define _FN1 8 -#define _NUM 9 +// These are all aliases for the function layers. +#define _BASE 0 +#define _PROG 1 +#define _GAME 2 +#define _FN 7 +#define _FN1 8 +#define _NUM 9 -/* Tap Dance */ +// Tap Dance typedef struct { - bool is_press_action; + char is_press_action; int state; } tap; @@ -22,12 +21,12 @@ enum { SINGLE_HOLD = 2, DOUBLE_TAP = 3, DOUBLE_HOLD = 4, - DOUBLE_SINGLE_TAP = 5, //send two single taps + DOUBLE_SINGLE_TAP = 5, // Send two single taps TRIPLE_TAP = 6, TRIPLE_HOLD = 7 }; -//Tap dance enums +// Tap dance enums enum { PN_SWAP = 0, LAPO = 1, @@ -57,59 +56,59 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // _PROG // _FN // _FN1 - // TODO: _NUM + // _NUM // _GAME // _GAME // _BASE // Tap pn for toggle to _PROG, or hold for numpad -[_BASE] = LAYOUT( - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), \ - KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP),KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), \ +[_BASE] = LAYOUT_split_space( + KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), + KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), // LEFT AND RIGHT SHIFT: '(' and ')' when tapped, shift when held // LEFT AND RIGHT CTRL: '{' and '}' when tapped, ctrl when held // LEFT AND RIGHT ALT: '[' and ']' when tapped, ctrl when held -[_PROG] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, \ - TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), \ +[_PROG] = LAYOUT_split_space( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, + TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), // Macro for right space is bhop // Maco for 'fn' is move forward // Macro for 'fn1' is spin constantly // Macro for right shift is D20 -[_GAME] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, \ - _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), \ +[_GAME] = LAYOUT_split_space( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, + _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), -[_FN] = LAYOUT( - _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, \ - KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, \ - _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ +[_FN] = LAYOUT_split_space( + _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, + KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, + _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), -[_FN1] = LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ - _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ +[_FN1] = LAYOUT_split_space( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), -[_NUM] = LAYOUT( - _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROFILE_MACRO, _______, _______, \ - _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, \ - _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, \ - _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), \ +[_NUM] = LAYOUT_split_space( + _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROFILE_MACRO, _______, _______, + _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, + _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, + _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), }; @@ -118,11 +117,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case PROFILE_MACRO: if (record->event.pressed) { - // when keycode PROFILE_MACRO is pressed + // When keycode PROFILE_MACRO is pressed SEND_STRING("if [ $shell = 'zsh' ]; then echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.zshrc\nclear; else echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.profile\nclear; fi\n"); - //SEND_STRING("if [ $shell = 'zsh' ]; then echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.zshrc; else echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.profile; fi\n"); } else { - // when keycode QMKBEST is released + // When keycode QMKBEST is released } break; } @@ -184,7 +182,7 @@ int cur_dance(qk_tap_dance_state_t *state) { //instanalize an instance of 'tap' for the 'pn' tap dance. static tap pn_tap_state = { - .is_press_action = true, + .is_press_action = 1, .state = 0 }; @@ -214,7 +212,7 @@ void pn_reset(qk_tap_dance_state_t *state, void *user_data) { } static tap lalt_tap_state = { - .is_press_action = true, + .is_press_action = 1, .state = 0 }; @@ -235,7 +233,7 @@ void lalt_reset(qk_tap_dance_state_t *state, void *user_data) { } static tap ralt_tap_state = { - .is_press_action = true, + .is_press_action = 1, .state = 0 }; @@ -256,7 +254,7 @@ void ralt_reset(qk_tap_dance_state_t *state, void *user_data) { } static tap rctl_tap_state = { - .is_press_action = true, + .is_press_action = 1, .state = 0 }; @@ -277,7 +275,7 @@ void rctl_reset(qk_tap_dance_state_t *state, void *user_data) { } static tap lctl_tap_state = { - .is_press_action = true, + .is_press_action = 1, .state = 0 }; @@ -298,7 +296,7 @@ void lctl_reset(qk_tap_dance_state_t *state, void *user_data) { } static tap d20_tap_state = { - .is_press_action = true, + .is_press_action = 1, .state = 0, }; @@ -316,9 +314,29 @@ void d20_finished(qk_tap_dance_state_t *state, void *user_data) { } SEND_STRING("Seed: "); - char *string = (char*)malloc(sizeof(char*) * 16); - snprintf(string, 10, "%u", (unsigned int)timer_seed); - send_string(string); + // uint16_t has max size of 65536, so not a lot of randomness here, but it's a d20, so should be fine + char SEED_STR_SIZE = 8; + // Initialize seed_str + char seed_str[SEED_STR_SIZE]; + for (int iter=0;iter < SEED_STR_SIZE;iter++) seed_str[iter] = 0; + + int i = SEED_STR_SIZE - 2; // Leave null byte on end of string + while (timer_seed && i >= 0) { + seed_str[i] = timer_seed % 10 + '0'; + timer_seed /= 10; + i -= 1; + } + i++; + + // Move all characters over i spaces + char move = i; + while (i < SEED_STR_SIZE -1) { + seed_str[i-move] = seed_str[i]; + seed_str[i] = 0; + i += 1; + } + + send_string(seed_str); break; // Else allow fall through } @@ -328,10 +346,14 @@ void d20_finished(qk_tap_dance_state_t *state, void *user_data) { srand((unsigned int)timer_seed); d20_srand = 1; } - int r = rand() % 20 + 1; - char *string = (char*)malloc(sizeof(char*) * 4); - snprintf(string, 4, "%d", r); - send_string(string); + + unsigned char roll = rand() % 20 + 1; + char res[3]; + res[0] = (char)((char)(roll / 10) + '0'); + res[1] = (char)(roll % 10 + '0'); + + send_string(res); + break; } } @@ -342,10 +364,10 @@ void d20_reset(qk_tap_dance_state_t *state, void *user_data) { } qk_tap_dance_action_t tap_dance_actions[] = { - [PN_SWAP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, pn_finished, pn_reset), - [LAPO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lalt_finished, lalt_reset), - [RAPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ralt_finished, ralt_reset), - [LCPO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lctl_finished, lctl_reset), - [RCPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rctl_finished, rctl_reset), - [D20] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, d20_finished, d20_reset), + [PN_SWAP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, pn_finished, pn_reset), + [LAPO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lalt_finished, lalt_reset), + [RAPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ralt_finished, ralt_reset), + [LCPO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lctl_finished, lctl_reset), + [RCPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rctl_finished, rctl_reset), + [D20] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, d20_finished, d20_reset), }; diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk index c69dc2d93f0b..82f951595826 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk @@ -2,15 +2,14 @@ # change yes to no to disable # BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys +MOUSEKEY_ENABLE = no # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable N-Key Rollover +NKRO_ENABLE = no # Enable N-Key Rollover RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = no # Midi AUDIO_ENABLE = no # Audio output UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -TAP_DANCE_ENABLE = yes # Enable single keys to have multiple +TAP_DANCE_ENABLE = yes # Enable single keys to have multiple functions From 9cc30fc3f6fd71eadfa8bc9d264da5c8a5f4b2b8 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Wed, 19 Oct 2022 00:31:09 -0400 Subject: [PATCH 03/15] Comiples :) --- .../evyd13/atom47/keymaps/PHSC138/keymap.c | 38 +++++++++---------- .../evyd13/atom47/keymaps/PHSC138/rules.mk | 4 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c index 1cf6e8f50ba8..07d56a0dc525 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c @@ -37,7 +37,7 @@ enum { }; enum custom_keycodes { - PROFILE_MACRO + PROF_MAC }; @@ -84,40 +84,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Macro for 'fn1' is spin constantly // Macro for right shift is D20 [_GAME] = LAYOUT_split_space( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, - _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, + _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), [_FN] = LAYOUT_split_space( - _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, - KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, - _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, + KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, + _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), [_FN1] = LAYOUT_split_space( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), [_NUM] = LAYOUT_split_space( - _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROFILE_MACRO, _______, _______, - _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, - _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, - _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), + _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROF_MAC, _______, _______, + _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, + _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, + _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), }; /*--- Profile Macro ---*/ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case PROFILE_MACRO: + case PROF_MAC: if (record->event.pressed) { - // When keycode PROFILE_MACRO is pressed + // When keycode PROF_MAC is pressed SEND_STRING("if [ $shell = 'zsh' ]; then echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.zshrc\nclear; else echo \"echo \"Lock your computer -PHSC138\"\" >> ~/.profile\nclear; fi\n"); } else { // When keycode QMKBEST is released diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk index 82f951595826..4a75417ae3b8 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk @@ -2,11 +2,11 @@ # change yes to no to disable # BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # Mouse keys +MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = no # Enable N-Key Rollover +NKRO_ENABLE = yes # Enable N-Key Rollover RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870) MIDI_ENABLE = no # Midi AUDIO_ENABLE = no # Audio output From f261d8786919c1f99b313c84a1313c337f2eea6b Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Wed, 19 Oct 2022 00:49:44 -0400 Subject: [PATCH 04/15] Update keymap --- .../evyd13/atom47/keymaps/PHSC138/README.md | 66 ++++++++++--------- .../evyd13/atom47/keymaps/PHSC138/keymap.c | 26 ++++++-- .../evyd13/atom47/keymaps/PHSC138/rules.mk | 1 - 3 files changed, 55 insertions(+), 38 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/README.md b/keyboards/evyd13/atom47/keymaps/PHSC138/README.md index f273e1f9a9c6..12adefd31f38 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/README.md +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/README.md @@ -8,14 +8,14 @@ qmk make -kb evyd13/atom47/rev3 -km PHSC138 qmk flash -kb evyd13/atom47/rev3 -km PHSC138 ``` ## Layers -- TODO: pictures + ```c // Tap pn for toggle to _PROG, or hold for numpad -[_BASE] = LAYOUT( - KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), \ - KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP),KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), \ +[_BASE] = LAYOUT_split_space( + KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), + KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), ``` @@ -23,47 +23,49 @@ qmk flash -kb evyd13/atom47/rev3 -km PHSC138 // LEFT AND RIGHT SHIFT: '(' and ')' when tapped, shift when held // LEFT AND RIGHT CTRL: '{' and '}' when tapped, ctrl when held // LEFT AND RIGHT ALT: '[' and ']' when tapped, ctrl when held -[_PROG] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, \ - TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), \ +[_PROG] = LAYOUT_split_space( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, + TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), ``` + ```c // Macro for right space is bhop // Maco for 'fn' is move forward // Macro for 'fn1' is spin constantly // Macro for right shift is D20 -[_GAME] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, \ - _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), \ +[_GAME] = LAYOUT_split_space( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, + _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), ``` + ```c -[_FN] = LAYOUT( - _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, \ - KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, \ - _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ +[_FN] = LAYOUT_split_space( + _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, + KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, + _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), ``` + ```c -[_FN1] = LAYOUT( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ - _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ +[_FN1] = LAYOUT_split_space( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), ``` ```c -[_NUM] = LAYOUT( - _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROFILE_MACRO, _______, _______, \ - _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, \ - _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, \ - _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), \ -}; +[_NUM] = LAYOUT_split_space( + _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROF_MAC, _______, _______, + _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, + _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, + _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), ``` diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c index 07d56a0dc525..21b8f2350a79 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c @@ -1,3 +1,19 @@ +/* Copyright 2022 PHSC138 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include QMK_KEYBOARD_H #include "config.h" @@ -37,7 +53,7 @@ enum { }; enum custom_keycodes { - PROF_MAC + PROF_MAC = SAFE_RANGE }; @@ -301,21 +317,21 @@ static tap d20_tap_state = { }; int d20_srand = 0; -uint16_t timer_seed; +uint32_t timer_seed; void d20_finished(qk_tap_dance_state_t *state, void *user_data) { d20_tap_state.state = cur_dance(state); switch(d20_tap_state.state) { case SINGLE_HOLD: { if(d20_srand == 0){ - timer_seed = timer_read(); + timer_seed = timer_read32(); srand((unsigned int)timer_seed); d20_srand = 1; } SEND_STRING("Seed: "); - // uint16_t has max size of 65536, so not a lot of randomness here, but it's a d20, so should be fine - char SEED_STR_SIZE = 8; + // uint32_t has max size of 4294967296 + char SEED_STR_SIZE = 16; // Initialize seed_str char seed_str[SEED_STR_SIZE]; for (int iter=0;iter < SEED_STR_SIZE;iter++) seed_str[iter] = 0; diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk index 4a75417ae3b8..7bb23b85f350 100644 --- a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk +++ b/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk @@ -8,7 +8,6 @@ CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = yes # Enable N-Key Rollover RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870) -MIDI_ENABLE = no # Midi AUDIO_ENABLE = no # Audio output UNICODE_ENABLE = no # Unicode BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID From b1e065224b86b31be3432a7808fbfa6a0d9f985a Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Thu, 20 Oct 2022 19:36:15 -0400 Subject: [PATCH 05/15] Lowercase names --- keyboards/evyd13/atom47/keymaps/{PHSC138 => phsc138}/config.h | 0 keyboards/evyd13/atom47/keymaps/{PHSC138 => phsc138}/keymap.c | 0 .../atom47/keymaps/{PHSC138/README.md => phsc138/readme.md} | 0 keyboards/evyd13/atom47/keymaps/{PHSC138 => phsc138}/rules.mk | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename keyboards/evyd13/atom47/keymaps/{PHSC138 => phsc138}/config.h (100%) rename keyboards/evyd13/atom47/keymaps/{PHSC138 => phsc138}/keymap.c (100%) rename keyboards/evyd13/atom47/keymaps/{PHSC138/README.md => phsc138/readme.md} (100%) rename keyboards/evyd13/atom47/keymaps/{PHSC138 => phsc138}/rules.mk (100%) diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/config.h b/keyboards/evyd13/atom47/keymaps/phsc138/config.h similarity index 100% rename from keyboards/evyd13/atom47/keymaps/PHSC138/config.h rename to keyboards/evyd13/atom47/keymaps/phsc138/config.h diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c similarity index 100% rename from keyboards/evyd13/atom47/keymaps/PHSC138/keymap.c rename to keyboards/evyd13/atom47/keymaps/phsc138/keymap.c diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/README.md b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md similarity index 100% rename from keyboards/evyd13/atom47/keymaps/PHSC138/README.md rename to keyboards/evyd13/atom47/keymaps/phsc138/readme.md diff --git a/keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk b/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk similarity index 100% rename from keyboards/evyd13/atom47/keymaps/PHSC138/rules.mk rename to keyboards/evyd13/atom47/keymaps/phsc138/rules.mk From 5c041345e76837e83a89a2d732937392c0d1e8e2 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Thu, 20 Oct 2022 19:47:15 -0400 Subject: [PATCH 06/15] Added license to config.h, updated old defines to enum, took out mouse keys to save space in rules.mk --- keyboards/evyd13/atom47/keymaps/phsc138/config.h | 15 +++++++++++++++ keyboards/evyd13/atom47/keymaps/phsc138/keymap.c | 15 ++++++++------- keyboards/evyd13/atom47/keymaps/phsc138/rules.mk | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/config.h b/keyboards/evyd13/atom47/keymaps/phsc138/config.h index 51de1bc7d1b7..ccd556b90d9a 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/config.h +++ b/keyboards/evyd13/atom47/keymaps/phsc138/config.h @@ -1,2 +1,17 @@ +/* Copyright 2022 PHSC138 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ #pragma once #define TAPPING_TERM 150 // Tap dance time limit diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c index 21b8f2350a79..e250be92675b 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c @@ -15,15 +15,16 @@ */ #include QMK_KEYBOARD_H -#include "config.h" // These are all aliases for the function layers. -#define _BASE 0 -#define _PROG 1 -#define _GAME 2 -#define _FN 7 -#define _FN1 8 -#define _NUM 9 +enum custom_layers { + _BASE, + _PROG, + _GAME, + _FN, + _FN1, + _NUM +}; // Tap Dance diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk b/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk index 7bb23b85f350..b0e72b79c6fe 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk +++ b/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk @@ -2,7 +2,7 @@ # change yes to no to disable # BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = yes # Mouse keys +MOUSEKEY_ENABLE = no # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration From 3a2a58406ad241d3409ab720ff48de9628bbe850 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 20 Oct 2022 22:25:40 -0400 Subject: [PATCH 07/15] Apply suggestions from code review Co-authored-by: Ryan --- .../evyd13/atom47/keymaps/phsc138/readme.md | 8 -------- .../evyd13/atom47/keymaps/phsc138/rules.mk | 17 +++-------------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md index 12adefd31f38..69e6058ee403 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md +++ b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md @@ -1,12 +1,4 @@ # PHSC138's Layout for the atom47 -## Make -```sh -qmk make -kb evyd13/atom47/rev3 -km PHSC138 -``` -## Flash -```sh -qmk flash -kb evyd13/atom47/rev3 -km PHSC138 -``` ## Layers ```c diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk b/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk index b0e72b79c6fe..c6a2d559888e 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk +++ b/keyboards/evyd13/atom47/keymaps/phsc138/rules.mk @@ -1,14 +1,3 @@ -# Build Options -# change yes to no to disable -# -BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite -MOUSEKEY_ENABLE = no # Mouse keys -EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug -COMMAND_ENABLE = no # Commands for debug and configuration -NKRO_ENABLE = yes # Enable N-Key Rollover -RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870) -AUDIO_ENABLE = no # Audio output -UNICODE_ENABLE = no # Unicode -BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID -TAP_DANCE_ENABLE = yes # Enable single keys to have multiple functions +MOUSEKEY_ENABLE = no +NKRO_ENABLE = yes +TAP_DANCE_ENABLE = yes From c48d04600385a266e4958a0bdde1c1eef791049a Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 5 Mar 2023 23:28:01 -0500 Subject: [PATCH 08/15] Update keyboards/evyd13/atom47/keymaps/phsc138/keymap.c KC_GESC -> QK_GESC Co-authored-by: Drashna Jaelre --- keyboards/evyd13/atom47/keymaps/phsc138/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c index e250be92675b..79a295f2d386 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c @@ -80,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Tap pn for toggle to _PROG, or hold for numpad [_BASE] = LAYOUT_split_space( - KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), From 69560beb8dbf433a5bd7cf137a7abd8bb41d9c15 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 5 Mar 2023 23:28:50 -0500 Subject: [PATCH 09/15] Update keyboards/evyd13/atom47/keymaps/phsc138/readme.md KC_GESC -> QK_GESC Co-authored-by: Drashna Jaelre --- keyboards/evyd13/atom47/keymaps/phsc138/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md index 69e6058ee403..6a36f3bf9218 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md +++ b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md @@ -4,7 +4,7 @@ ```c // Tap pn for toggle to _PROG, or hold for numpad [_BASE] = LAYOUT_split_space( - KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, + QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), From d9e04e80af7200159a9307be8ed3559a94052311 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Tue, 28 Mar 2023 23:01:18 -0400 Subject: [PATCH 10/15] Update depreciated keys --- .../evyd13/atom47/keymaps/phsc138/keymap.c | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c index 79a295f2d386..1fa433e01569 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c @@ -58,9 +58,9 @@ enum custom_keycodes { }; -int cur_dance (qk_tap_dance_state_t *state); -void pn_finished (qk_tap_dance_state_t *state, void *user_data); -void pn_reset (qk_tap_dance_state_t *state, void *user_data); +int cur_dance (tap_dance_state_t *state); +void pn_finished (tap_dance_state_t *state, void *user_data); +void pn_reset (tap_dance_state_t *state, void *user_data); const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -83,7 +83,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), - KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), + KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTL), // LEFT AND RIGHT SHIFT: '(' and ')' when tapped, shift when held @@ -92,7 +92,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_PROG] = LAYOUT_split_space( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, + SC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, SC_RSPC, _______, TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), @@ -108,9 +108,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FN] = LAYOUT_split_space( - _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, + _______, KC_VOLD, KC_VOLU, KC_MUTE, QK_RBT, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SCRL, KC_PAUS, KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, - _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, + _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DOWN, BL_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), @@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROF_MAC, _______, _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, - _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), + _______, _______, _______, _______, _______, KC_0, _______, _______, DB_TOGG, QK_BOOT), }; @@ -172,7 +172,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested * */ -int cur_dance(qk_tap_dance_state_t *state) { +int cur_dance(tap_dance_state_t *state) { if(state->count == 1) { if(state->interrupted || !state->pressed) return SINGLE_TAP; //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'. @@ -203,7 +203,7 @@ static tap pn_tap_state = { .state = 0 }; -void pn_finished(qk_tap_dance_state_t *state, void *user_data) { +void pn_finished(tap_dance_state_t *state, void *user_data) { pn_tap_state.state = cur_dance(state); switch(pn_tap_state.state) { case SINGLE_TAP: layer_on(_PROG); break; @@ -217,7 +217,7 @@ void pn_finished(qk_tap_dance_state_t *state, void *user_data) { } } -void pn_reset(qk_tap_dance_state_t *state, void *user_data) { +void pn_reset(tap_dance_state_t *state, void *user_data) { switch(pn_tap_state.state) { //case SINGLE_TAP: unregister_code(KC_X); break; case SINGLE_HOLD: layer_off(_NUM); break; @@ -233,7 +233,7 @@ static tap lalt_tap_state = { .state = 0 }; -void lalt_finished(qk_tap_dance_state_t *state, void *user_data) { +void lalt_finished(tap_dance_state_t *state, void *user_data) { lalt_tap_state.state = cur_dance(state); switch(lalt_tap_state.state) { case SINGLE_TAP: register_code(KC_LBRC); break; @@ -241,7 +241,7 @@ void lalt_finished(qk_tap_dance_state_t *state, void *user_data) { } } -void lalt_reset(qk_tap_dance_state_t *state, void *user_data) { +void lalt_reset(tap_dance_state_t *state, void *user_data) { switch(lalt_tap_state.state) { case SINGLE_TAP: unregister_code(KC_LBRC); break; case SINGLE_HOLD: unregister_code(KC_LALT); break; @@ -254,7 +254,7 @@ static tap ralt_tap_state = { .state = 0 }; -void ralt_finished(qk_tap_dance_state_t *state, void *user_data) { +void ralt_finished(tap_dance_state_t *state, void *user_data) { ralt_tap_state.state = cur_dance(state); switch(ralt_tap_state.state) { case SINGLE_TAP: register_code(KC_RBRC); break; @@ -262,7 +262,7 @@ void ralt_finished(qk_tap_dance_state_t *state, void *user_data) { } } -void ralt_reset(qk_tap_dance_state_t *state, void *user_data) { +void ralt_reset(tap_dance_state_t *state, void *user_data) { switch(ralt_tap_state.state) { case SINGLE_TAP: unregister_code(KC_RBRC); break; case SINGLE_HOLD: unregister_code(KC_RALT); break; @@ -275,7 +275,7 @@ static tap rctl_tap_state = { .state = 0 }; -void rctl_finished(qk_tap_dance_state_t *state, void *user_data) { +void rctl_finished(tap_dance_state_t *state, void *user_data) { rctl_tap_state.state = cur_dance(state); switch(rctl_tap_state.state) { case SINGLE_TAP: register_code(KC_RSFT); register_code(KC_RBRC); break; @@ -283,9 +283,9 @@ void rctl_finished(qk_tap_dance_state_t *state, void *user_data) { } } -void rctl_reset(qk_tap_dance_state_t *state, void *user_data) { +void rctl_reset(tap_dance_state_t *state, void *user_data) { switch(rctl_tap_state.state) { - case SINGLE_TAP: unregister_code(KC_RSHIFT); unregister_code(KC_RBRC); break; + case SINGLE_TAP: unregister_code(KC_RSFT); unregister_code(KC_RBRC); break; case SINGLE_HOLD: unregister_code(KC_RCTL); break; } rctl_tap_state.state = 0; @@ -296,7 +296,7 @@ static tap lctl_tap_state = { .state = 0 }; -void lctl_finished(qk_tap_dance_state_t *state, void *user_data) { +void lctl_finished(tap_dance_state_t *state, void *user_data) { lctl_tap_state.state = cur_dance(state); switch(lctl_tap_state.state) { case SINGLE_TAP: register_code(KC_LSFT); register_code(KC_LBRC); break; @@ -304,9 +304,9 @@ void lctl_finished(qk_tap_dance_state_t *state, void *user_data) { } } -void lctl_reset(qk_tap_dance_state_t *state, void *user_data) { +void lctl_reset(tap_dance_state_t *state, void *user_data) { switch(lctl_tap_state.state) { - case SINGLE_TAP: unregister_code(KC_LSHIFT); unregister_code(KC_LBRC); break; + case SINGLE_TAP: unregister_code(KC_LSFT); unregister_code(KC_LBRC); break; case SINGLE_HOLD: unregister_code(KC_LCTL); break; } lctl_tap_state.state = 0; @@ -320,7 +320,7 @@ static tap d20_tap_state = { int d20_srand = 0; uint32_t timer_seed; -void d20_finished(qk_tap_dance_state_t *state, void *user_data) { +void d20_finished(tap_dance_state_t *state, void *user_data) { d20_tap_state.state = cur_dance(state); switch(d20_tap_state.state) { case SINGLE_HOLD: { @@ -376,11 +376,11 @@ void d20_finished(qk_tap_dance_state_t *state, void *user_data) { } } -void d20_reset(qk_tap_dance_state_t *state, void *user_data) { +void d20_reset(tap_dance_state_t *state, void *user_data) { d20_tap_state.state = 0; } -qk_tap_dance_action_t tap_dance_actions[] = { +tap_dance_action_t tap_dance_actions[] = { [PN_SWAP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, pn_finished, pn_reset), [LAPO] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lalt_finished, lalt_reset), [RAPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ralt_finished, ralt_reset), From ae4a557ded0122e20458f98ee8557a890b8a5b92 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Tue, 28 Mar 2023 23:03:55 -0400 Subject: [PATCH 11/15] Remove layout from readme --- .../evyd13/atom47/keymaps/phsc138/readme.md | 63 +------------------ 1 file changed, 1 insertion(+), 62 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md index 6a36f3bf9218..72f118b01397 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md +++ b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md @@ -1,63 +1,2 @@ # PHSC138's Layout for the atom47 -## Layers - -```c -// Tap pn for toggle to _PROG, or hold for numpad -[_BASE] = LAYOUT_split_space( - QK_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), - KC_LCTL, KC_LGUI, KC_LALT, TD(PN_SWAP), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), -``` - - -```c -// LEFT AND RIGHT SHIFT: '(' and ')' when tapped, shift when held -// LEFT AND RIGHT CTRL: '{' and '}' when tapped, ctrl when held -// LEFT AND RIGHT ALT: '[' and ']' when tapped, ctrl when held -[_PROG] = LAYOUT_split_space( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_LSPO, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSPC, _______, - TD(LCPO), _______, TD(LAPO), TO(_GAME), _______, _______, _______, TD(RAPC), _______, TD(RCPC)), -``` - - -```c -// Macro for right space is bhop -// Maco for 'fn' is move forward -// Macro for 'fn1' is spin constantly -// Macro for right shift is D20 -[_GAME] = LAYOUT_split_space( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TD(D20), XXXXXXX, - _______, _______, _______, TO(_BASE), _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______), -``` - - -```c -[_FN] = LAYOUT_split_space( - _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, _______, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, - KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_INS, _______, - _______, _______, _______, _______, _______, KC_HOME, KC_END, BL_TOGG, BL_DEC, BL_INC, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), -``` - - -```c -[_FN1] = LAYOUT_split_space( - KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, - _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), -``` - - -```c -[_NUM] = LAYOUT_split_space( - _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, PROF_MAC, _______, _______, - _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, - _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DOT, _______, _______, _______, - _______, _______, _______, _______, _______, KC_0, _______, _______, DEBUG, RESET), -``` + \ No newline at end of file From 8b927ca90b64468a1b7819fd5e97714da74846ea Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Tue, 28 Mar 2023 23:11:32 -0400 Subject: [PATCH 12/15] Added picture finally --- .../evyd13/atom47/keymaps/phsc138/readme.md | 2 +- .../atom47/keymaps/phsc138/vortex-core-base.png | Bin 0 -> 36461 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 keyboards/evyd13/atom47/keymaps/phsc138/vortex-core-base.png diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md index 72f118b01397..445b3cfc8f94 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md +++ b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md @@ -1,2 +1,2 @@ # PHSC138's Layout for the atom47 - \ No newline at end of file +![vortex-core-base.png](vortex-core-base.png) \ No newline at end of file diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/vortex-core-base.png b/keyboards/evyd13/atom47/keymaps/phsc138/vortex-core-base.png new file mode 100644 index 0000000000000000000000000000000000000000..34d6c7ed49e3a6592ed56f12d142c913740107ec GIT binary patch literal 36461 zcmc$`bx>T*xAz+eBuH@g-~ocW2N*24yL)hV2tK$4cXxNU3@%{^ZowJcHNYL7=bXCl z{hfR7UvJgRuA*j`y}Q?5)2sJd-~Ke=it>^uNQ6jl-n>DPmI5fhc>@cEzCJ>D2mP%T zBBKB1&Br&=01;IW{Ug2i9;zVR=R~z^b3K_aI(c!TH*dp+Cx%rxkaM*Da z#zTP*m4+~M^lAX5xEOR%SgJ3gQmdxi9V7hC1EF&D9W6&|T^$)|x99hUB~N>qY4>~M zZR~!n3D6(Wz@Q)vY&^VJt~A+r^M=I>tQY2#H~(>bNlN-IU-I^82*Ei(1MXXO;%xcR>N+6!YurFQE_Dhh*qL zm#<&HzQfr2mY0{OrYBD<{68-Iu7`+?iyKJ%D}{*527k}}WTg$~D#c1kNlDjK7xsT1 z6qv&k6K2yyWDi-q&NPB7EVW*Wis*QR|D)kIDc^x`!-yysvK9|nLcUAHq@*WPCi!g> z4v7DG0A;>2?Y;3VihRPv!jdsIF#*Y(5&zGwbzyUn`Qoy&P~;2SSpTyP2gKpHH?&~3 zU{Hh8|L8!IsyCdY1)d4!KM#0JMcG1yOr8MoNZgJ6>4JVTFL))9%Oz~9l~&fJChM?~ zMA`z$SkfK7K1ZtpEXgV--}CbwMD>y5xMlJdv1_W{Av`jJ1Fe*+bdtrqE^TZK2%}E3 z;ph)Ke4$q1bgt@1!r1~5<_@XTvO(U4`fI7KxNzp~XN;L*xq;thDj}p=4y%GUs4gc9 zsL_PKFUwO%W+n}O#&3mdwjKD&?zD0=vz_m@b>H1#wqRa6JMeG2m3AkEw+E*XWak+p>$bsOTogQ)a>&yA{MjtN{lAMR%8d9ZR2kw!yOQ`jA$CzS4y8F6* zLRwPL`K|nb`?~Ltqi5}tR{P-f4*b{p1B!XP`4n2I@5_0#mLgtcHjuG@Ixxogz(frm z$08xX{eH;b6lW(wnt9nfjZKv;F9ra>9n6*mEK8!?{8{^Yx)jQ|Tz8ujM4aLhZ%<<*n3@6c4x+|k8`zCAux*P==%UEsip>Zd0qFD6g=dqqnzF>X%{;2 zGN9RaHocoIR~x8IQ<*Mwe7hL5hJ{?HoH{hXZsDw(T}n*kyZLZ|DXs^h`F|Q*dHrw8 zBz!KzO@MauiF6O=X`7mea9sAw5j5f0@893ptlm{=fB=yj2Xo#CL)0`>Xb)M3V?jU2 z^B8muFoU;6v|76bqzEwEHxC~!)JS(CTiMvz^<)aSHaE{sF7U*|V7%GtN{8VZ+VFRc z8_o>esj?=?`20yQjQ!!>y~EtNbzZ3K&P8|D*P`qE+TeYtkgvyq#Z=JuX+_zX4T~vJ zt1*g!Z6DSJ;ny@7#oxX@k$j@G&Q6~dE;qIz(De?|B|}BfvQgQmyF2=%w>fBfe4V{R z8nXlj-J=CQ7#hmT36J58eU{i#F0M!^2*_ySnwI#1fh(6r`O}(kUHY*;zA#LBqX0$2 z?*q*{=#apEQG6g^zCs5tUMU_J5k;j;bhMQATi*6v5DYJG+wjPQ$hRfW0NF4eOPxv4 zDaSVb5M6@{Jb+!;3Tn~U@3G86-JhE`t1d(FH?GuQov|WcczJP!fPx}kAaM;JTbn$h zsT#b!jg5^7gNlqC#JJw5N|BY66*N4I&}g>^w%uOLK0*ptCFAw_@bK3sPr=VGDPEcy zOq}w7J9NqsZZ5b^Xf^@bX8X@g29PmaKZutmC88EK#rjz)r-+lN8d%% ztWCGl@$4VTn{LC$ie<;G^}1>;V&1_s%bq`&H=T&$%~_`(VBc!Dd}I1~?xk$(%kOiS zijIo$rEYLeI!dYm|BJ-en$sn5XEbl|wDeCxkFkQ@`*0r%mDhhld)e_r-gzjOHEbnu z;&(}cySv-m8dGcDmK9V!{)M}71^o zENA@_Aj!WBuQs~3yJNK8{R9lBTNh@fm~br1N1guK);$^tT+S;UDNP7?oz>Jn$e0(Y zEuz|D$Q%4o>IRP40{Bw;$(9=JAdW^P$&M2-vd@AJz|P(H9U(q!N^nX;{q)nrp#W3m zK;W3H#+mJU9hReG-M=3ar;HPF-J5crEc`03YaEhsA8McwM z&yE9#w%mphOG@Kg$=|k!t=Egm7p}5cnsRJ>G7j)AY?Dm)E;Rc<<8HcxoNvzv^x4{q zQKIZZ5rR(l33iMJJJ=1-3uY6$64H6&lRt5iQclonh8O35lJvz2*_reP3*YDD?NyqL_Sq`-pz3En zAs`_kolk}tY_10lDJm-m*4Cn59jy^ihF*zTS^^bm_-XOT{4N-u*W9H%Vmi&Ed7_Be zVUL$M@Nn{y0S|vR3Ovq}<{kEjS@Uw{-H(IuaEWtf1cOwDyviYq#}kSBhAdRO>09!3PIQBxuh-_ahCy&oPmjiC`o-DS-PTl3NVmmw z(3=1b=HRd}WPdXLU3G!;eKGy;!y?ZbO3q^ebw>ZL$`|O=JYYu>)-e<_*vfBz`&D<5 zmv^7j5boymzDoDSp3sYb&Bp{Lom1}YE7YLpiwxI=%lUOpju+~ZT1~vUZ)=9WXGPaz z+Qp2^?vf6Qii;J!HbOQlr2#Cv-*hGtzyA1C%xn>U5b7Pq7&7A`{T7gUBY5BJkgqVR{Pt! z*TE?9^7d3GmvWVa#{~{q-yoE;LW6Fw7@kSSf*{@;&iO7bAmY)!CRe=`KR%nw1efdS zPEBh*LY8L5Z@vpKe$vZG8Ojr)#sKwM_9fVd!dQ;wnQ2d|m=+zsxm3aD4@Tp+Y2pS_ zZ%qfLmD@iB{kz_i?6Les4CRuahBwa~`3^t+IfcswHw^vpR>MFiA`$}8 ztUog|i)dH=Dr+!_DKAlo*Ym)UpHC5tJHyUaXA1h3&TRSI;T){u>#nL9CCM8(rnGE> zYD)B;GhqrH(uS=@=xJ(1VZ1uT&bJlE(t{_&Ug%O$SOy)6+gb82MaHnsrUrPc3JeUe0) zDDhZ3J*&jpOfH0`ED8?oKjq&5=^J{DF4VRs5nXf6hZWGb^q)WftX&>7y7+m%%^~%3 zK4p6FLrs}?i8MMSKtX}*n z8pvVI#m!8nLYfxTvgUy?VllY^(pU#HEnHx{Q4n+!zPPxo^V@P8Pv_O*l3*n*!j0#O zpV>Qo3Uk!kvo^cc`U+D+0ZuHQlsHbGh1YGe*1!|x`%K4qOp#pu7h#Xt^dldA!ZRRO zZHxxC4iya<)H$!dF-WTCAa*OSysb1=&9l5jk(Z0 zakKJW5W93FVsmcp8^K4E0fP=MlO29CBxLXCgW0pwfB}#DkdkTpGsZig>*Z3dhEQWm z?LYN2U>(2JP#_SD9*|<-@$T)zjdB#I9XiBpJPQewhy?A}ir0i;-r67RVGC6`Xt^(? z2!L^Q@tBKE&W8Chu!y3`dbEPj`TAYO!CwtBr5I+i)gLZE*JJqs5u{eT=RTg##z<)_ z8=yUNI+fo^%Ek{)$qwpQQaXH(D>C+mzt3R$!@C6Qea_Atp`H;Jr}?b;7uAl$lRdwH z()NIwi?94MoM!lDXM_|#(sAu~Zok`fP?frLybbG}cv60&2y_L3 z-5aHyhuftD92bt{Xiw%zb=TfJ|B(uWVkA@)6*(eJLevcNbDm9wH#;f-vwRz=J=ecPORUK@7-!lSO8 zlI!HqbkN@x{QDF({vx$D3)wLI5mVEo{FgPZl_b_k=57_UscV)j*j9QRob`n{OJ* z&G4GGV^O|qH9w3IK8N6~Z>{1u8?oTCZjE?e_35K+(4a}QD^Ss>2%L1J-t=lV_7o>c zVp{EbnkP;lUK#*M9xzjVO?jN|3^x!)bcDG~1I;BTkK0#(VI}f|4Grc<_5OQLv8<0F zo(uB&5$cQ}du7K$mb!4MDil#Qa`1<}C9=7#v6}gfhS)WAzLy_KGs*_Z@^=Y)b1B>i zt6pgRfhl``28r4cSzZJk5ZuAUp8KaH`rh7AHJDb1*N4S^T_LA*-OnfQH;QSR{Xp|o zTfbNGb~-m?0DKJmcw_2*vMp?C18;9*9QR#sxMCYYy$K0Z`Ho_H_IwRywff?PT2U_1 z2RmZK_@(g9Id2|uFFVLu{?zoK1%iIwsjS!zgr2wFp6DpGxIvQi#x;fR?yUcciR>M5 zp{e6_JfEaDGXmZ>sFPZaiJt!*Lv~E9?im}M6q%nSsST|5`nFOVVA%s=v*g8C6|mvh z?cyNH;`>2bR`}~ZDy3xXkZ^}T&SCTZsrIIE9!ZAZV#FDe#%*0<$ex8T`I5WB%EyI> zc=M-DlfS+$43i}IY?j|OHZRQjAr(ZyPcNjHqWufkexKC}P9?KTGNkPG{kl}RhLNm! z?KSyMWuPWKTvO-`4cna=t`F2+M}pA3A0Kv(0qLu6c2B3Odl+!-_&VBNP(+DYXD}$o znxW(CeCFKMdg<@+@y_NvXT z$2V6W`N<5R>F4~WP0Qf%ua={KbLUJcXJ{^65u!$R*T12I{C@qT$K0E(t;kqrh1%ir zZ(*5I-htP8$8XV&<4VyK5Rc;)^hTh0B;aRwnkkl}jD%fSW@;Pg7l3dBnydaII*P-x zQuu{Q3$Aa1YCSoI|Ky{0qEp9;@C^xi)UTyMeY8XftlBIpZ@hY6YG!GIcOf-W>}zEp z#et*Npf(#4l=HFln|l3g_PZyxC{Z99@Q)o8hO+XiBjJsJ4M&OzJk-||yt%yH!GWUc ze^2&HDpKftc`@CthP)Avtsr~ENps_+uBuvib{0tuK}KTTOG@e|`QD7{brXDht=I99 zhi3uH2vMQH{@*&QpZX~IhvY-6?U8BB*g)gpwVFP;kB^l}?rWX(&BSv@r)t#AGE(Xh zHugeX*RDe{z3Y6f*2otiA>q+~SNZ$BuLz8MrWC*w;L!#xZeM3QTXb!5F0MgJ$DRMK z7sHw6|0x))3goM6E}UNLgI`IQe_p>Xjip3zd*MPJV?PA>RoiKcmLmEf0T7p*nMrI) zTFNfpVbYb7^pbejFDhn=0fD{H)Tq%%k;BAPJ-h{)$zc)b%KALdfUA3Jp=Y@R>tIIo=SsfYTO3df; zfxJ%y0pZsO1-SAvWszRHi-dz>+>EcI8T^sv(XH?eLPk&oIj1ooeaoqcrf?Q?eXT+* z;>iEQoWFV;^jaG+97|j2sjdF6#cw(aO+g((0DvolibI*NS(Prug%94Vi!_fsX)6;X z%C8xQgz_#T9<{IOc&QvLT$Du0=LFZr+lGLKR-qb#53N*xeAV;ht*#k`3ti50@>bSP zc#W;1=B-hu|Fx$oKstel5XKx3h`>>5fX1iid0NBpKJQ1nEDd`?;#6*J?VCItXkN5a zgl?709fn}-BKtwR$x>e5)>iODTwI*T>xjp5^pZZrMbkl=9I7E;GdKyM&8IxY>NA3O zw#Gd9u`2#4@VouOqcL}S#z+iq5K3D95nbFU^!f!_L*CU=E-y8G!@Q4@h|93QV8NUo z&tK-6%<1_U=c$uz*#>AY3>MY6f@i_Ym@X9&Q?1c@OKyjHZJ2$2b>%{pC6C*0VdI&< zgJ~5bbN`c0J>d{pRP#r{vdL$*ZMRS6a-;sQ11Bz)d1p(qvJiZ}19b3W|7TRvf^iFw z1w3(in>GzE7)0vY@co|WQYORGiZ9j|gEvl3nb9pJ{xA#zG%B^qC6|kl7P>M|VeXGo^$v_Kvv7DCylWC5v)LvZ>`0gl{EG|jOubbycIFHzkz z*vs++7}$T_7nH$qbGGn0U#pLh;D z_<6EsIr>_a)QrJX-*HX@e`gwhu*Hcgp8Y9?(AM2JgJ-?ym5oQFbL4LAD@~q>GjC@9 zkFc`?XjdtbPxV^2{0UHd?v;xm_tYj0%0p<_V=8$sw^_SCyQfs*hSH(OLBfYR@UZ^J zprJjEHrEz;|6n$hcZV3ZqgexGiHxo&@i2yp@=BcA!{`gu2LKNdXem}?Dv$Dd`s!n( zv926p@7csV7!_$hm_W%jIK2Un5>|5@+%0bH&y(gEj{BX6f`ssS{xct0>OEsvaM8QZ zNshgX^a2kV9u|OHy3}p=2&7AB?dH*$gJulW=LDGzy}v?Nm|RQ4D#9;9Fo!6 zL6tOf8$q-0FZ=4|JKKL&FZeobs>ML-{yR7jpAaxoqn)Lam|{qB~O)NX2P9R*<1 zu|`)}oO8?OLgHFD8}(^1H-H&*bMSFet7ElrtZS=@+ePU)Q~aR_G#K8`JFCI1P#xzQ zo9?S(VJ77<2<~GP%}sPzfP7}+(-)ua+d4C$%@n5zUg3oGQ%YJ7G(4Q>x4j3PxE30H z%-9VL&l0m;TH+&gKDzy=Tof>Cm-}idNxQmSKp9SJrQ=QD()xYI)I-;^VZpqV6 zdb_Kgy|22?`8w2CC?;r>tid+&LhmonRS??CN>+-g_Y4{Z$zIHKId44QQl9SwhzfXg zJxz?CbiEj_q7mV2(T~gr8EaT7M+fslK1AG*ei=R%qq<$xAAAAJX*N>!99c*d+S?EZ zCkCIcb6|OaUrx2x{T3o-TBZD{;ooV)nJ9{q^M&O2$Nma$;g23uhsU|z1xoQpMm8Dv z@Dhbs&mm>->kW7z?EjMBs)j~z@2UnDTT~&nK3ksr57d`T22qdPoG&g;A3!{EL}bln zCU6#}85iyiI@|}JnYM~aSV;I0h1+Sf;vs*OxCfXk*~05jT3jE={uW6hTxVo`ul+^n zwiGYE0mwOK{@G|}^ocF#h!suYIwltjlR^q0x=1J8Q``qcYF3cS0u>o_6Fxhd1_AUJ zFtinO?0#{^wI~%4NuHnNc*&j+N@TNsr0j8VH05cTDP9KnAInggD}2TH2Dqanm-i9d z{>)^(NYwpA(4H)Z{v`uWXC%3bvw~F7i%(q7>@L;zScb72Q24&(!{D;_6|9KK{Q}}D z`UAK3h?eeP^zz0!a8NZ8E;WWWpNCg1i8qHA8$X_OZuB|TY4MI?d8Xz8+Xzhoy__RQ zI>hL>xV|T4h8hFnD*3_1OLK|2+0j;y;f)oqdFC(+<##E6%{a19m7X49?N3oT2oL-- z6W*o;w+48jYX1AI0mJUNw&^kY9C>Jq#o7<``YFh3FJyuC1PCt+%98IgF5h~);p|FF zhGSUir1tP?0=+m+>t-x>vol@dvW5@-m2(g{~ehokiln;?o`62qy$&KAYyomu3cNX{-U9mT;K`bA1@Vo zvL{W8Je>qlG7W#)E|Y$li?~>j!PQ;&z0Df9S(JwHCRt`?Wv!#)Quhh#vR&qq&Emsp z$nkj7*Z9TL+1LmUTGpdo?oE}T-S)HEE~!Gr8fAcZvj5YsK&3OOmrj&+?OBZ9HShl( z&IR%VIgpVJv0|ww@_xmv%M-Fr#_Vy$N}YA7m~YN%7^p=>HkmECI20dm%#?|m*F!fB0QHbsD2Vx~a?LDE>jcgO_7V!Ye8HtJ@H9};u{lelpsOpa4K0UKvp_pj7m2Hzuin^KU}V6qn06&u`; zQ|No~gFh_uF{AQM3A>VPq_9G80 zeJXm~jc@Rf#2iNOgXi23EW}B7kaPneTEM%#*4*sQNk;f1n=t za#_9zs07~!QP?tFcwID-(wyE|MuA zHg!UF#gELXIEG4KgxF?VTT5Ue-4h7B3fi))4EK&^^sVH;5FuO^TK zB2mtVoTP&> zkTg=f8#U7vSaJKnt38HL&mkRHE3LHl7l9JOD6sZ~n=d_=WR zav>%Bg%mOs{@u+UpUR^_Cyt51t57du?4Ypq&*~J$_+UDS@(F~7a3r5+k3t^?)T(I6 zmt4A7Hs(_@BemjE;Has_A{LGTHd5-wc>EwFwUPi<=$#MZ#?O1|c%g96pfz&FPqM%v z|6JURmoMo-D^Cn%xj4|Kl@u5y(0z7MChj;_&?WT{j0hqzC^uZqfy%BoM3FCDA{7-M{$X`WG3ZQ*_D*J2~$YAdanjucJu@J=i9DTVWP5@-9O4jQC#BnbTYJPu!d0& zYCb?@Z*Z-@FO?t(_Gc%$mRgpk3Ut9ERv}7>J+4$OVz{177@Rvhv)q?9$TNM(*)^w_ zP*p9HJM2&n{FEIE3?{Gd-m<6WF^oT?7yn-j#WIR zRI;bpZVL+TJ>${6yX40ZEf(ex)diLQS4mNgo^-}RSb?l9`&UAXl!8b}=e3=KhI zsd`GO;*gQ2#kT3!?VUbWZjT32JW5T7v;m)Fk==_Xr*7qDUA*Ih%!Rqhm{R>*8Z}u% z#kb=JWVb9Qua=wHSKTY~vqA{Ui^1V1I(gi=Zix=JV>s9~ z=m+&DEJvqZx1@geJ9tJWj*x^_aMPf%RZd7Fi|mJ~C<69iMRb|XRsnGtjmN%gD6K)O z`H!Bqf;yY{y(WhFnrgQ_on&OK2;eoA%$Uk%h7^i+5?dU7m@jc{*|J)4#OF9tL&u;K ztBQ2tmgUyGE zwPVa0i(+7$5OJ6CS|Kqp*s&k7QNa5_iL(_N$VBilV_D#o zb=>(BpEN72z(W}s$e4Y`p-lI9<7XwcD>WPXFE2zgV#glJ8n8P4!oU@ug5Gf5uZ3x} zd~BcJ%p0`%iRpTV&(D8UsVZ28r?wz+@6SpjFJd6;)!{{(hw1Z8%0-`@Y{}MxU z)XlE^d_Xjx62?#}dfVC!#gs%~S5O5-kin0JRm{78()qp1&km>+4rFqH)xgY_ySJ5E zmucv**32U}Qnv@Q$nH@GVcMKOYerSbirpA>Cr1bVQlA#6454~J7Sonoe}WjN3_6iG zzs-qWK&WEIK=o<`e39MC2?|@F#n|%cU>a8@&3dF+YX|<{fIB3@oy$)_yNhn?1KL-U!D_joYoAU#vB*XCto6UMBUKzbjWq<|LAwY`N`oe%rbX zoiF{m|7kwO{eU5W6uv#rTITeiGv(IpcKsz!qRK0k(>nPO$l>jzJ*sm6axp`6j?92e z%CQSxjy)faNK2w=?(ZL9->mocep&j&<7XqGKn4-KUol=0zSm!IT~<`GJn{$~831U& zrO95oFm=GG?`%ur!|vxlz0v#roo=` zQ{NtsGZR!W&*9ePlDW7)EB|yaU_g&-uaiPFSCWFr&xuEZRiqnqUafor5=HYc)cVyj?BhRZz6EKZ}Ym}EKIwZ); z8ZuAZp^VwRBY$aLBhZou(W(doh0Q=!~}&-eD)902GTsm#*O-i zQYxC@c?y`Jh!AmVR7Nn|d*l}Ty6fz7e2I^q`4tc=F(VFKa&BgY*5U;zg}8>(Wnx}= zPI9oPrdz@%tTK~oMRpqw^^HP-z{j3?D zqT-?rQ)3ESoBks^%)-xC#3|m`bdmtRX(vm~G$DBq484&b&_B&*ZVcXUC6J+-Ay)V~n$z99}23q0~FS(Secw^aQiX(`L? zu7sw8`?A6r!&}wR&>#Nvsb)~j%4RPyF)`A5sR`aYd{jkQUtj2Xu>}pv%VCcidrlpE zJN=346*JbA{-c~3n%L=FQ%e+f;Xr{;A0d~a4-~FzwUUMRcTQo+)y?E;1~)*C84aPV zQuY%ZqwCUiZzT^4>!>XfVZT7)UL!7r!_}{ai}9k}-HJe~D|H1IadyKE(l9hKF$4@N zTm_RXsPax4qV&6XnHdw4&^yz$sIc%O@6HE|zoTeFKt`x%9%t#qp`A3g9LPjTc{BX` zl~oe}MmvpSp`O`cV$`#hjOczXncfwc7%MV&$2{_%yk#sd();2i5jrtsy8^YqngxpX z0&iKxvxWUJ2(V?a)Hkv%St)$)op8NeP9@-U1yWa6-G;dYJKUa_Jc^zeJc>ZCPFP(s zW_8_ssFy74QhOaZI*#Y(pgl47iI2*=DBghdSY~%C$TxoFE3;UsJ+QQM23OU-G0fC6 z?!=RF(i}zNQ=XV4-4E_Y<<3T(@W$-UX%wPaJfY&tqC)0Ry@*~kYzdp)MPAS^jL7eK z-{F{(lmY4HL&LOXt|sIHuY+HEpO@+QH(fEa4qz$c8pAynfV?1f>U+be1qYAC8H?UUk{O zz+5y-CO_`~ikD0WMMzFh5Ho564O9vWg{wa~2MY0Z0wf8JOuim&TjuSx>XLh!xdI_$ zxbZjUPyrac76o1WFuSR7qpLfIcI(Wqs>5(|SX2H`FJ8E)=5Bi2U5f~U*==t}V$JJoTH(0Yl}>u4iAcrZHCN`1Cox+Kx@ z`LAbim<%mc$}gvP)ND)bw!yHnpG%>nIG$)F#;}SRa~?`zq?ovd(xcxHffJX_Ko_Gt z7}mPFQk|0IiVl^c0~vmQn6$JM20bPye-%0Y9Sfo?auG5h{;nvO@D(Gof)`b*1EzNK zu&OBCA(ihww9|74O);>1#KXaO#n1GpEQw~JD_z+(Ay5i!7ocs1g;k|*6SxD=Rt>hB z_*l#gW!lP7rw3cRdE#+7F}Y3A|Do1YU}?bzBhdC47M&DAMniXVz5eO$*u|v6j1@}N zOkD4vB0{OPDwNkVqX}P0H%3};rc{NE9=IG&2OWx=(MY=QV9r1Zz7ue8qg!jY4|M(K z;FU;O@=#BR#ImARPE-mFbNhi52?go!qazz47_Ty=IyC>ttJ4-U8|XpD3@yqK2n2=N zT0|CFcerJJx20{CJ7Y*i9Vem*j2|`uOQ5$u%lZE4{8q|2wsCZhy6Rs`t(;smn4p&S zLzv{Gtiujv1pDda-d;F)26p@1Sy9p`_+odoyhIJ65DmXIq;0{6VuN}V<{3%dZ`v zwuS-$O$L5Z@+8$s)6S1tpm&w&$WP&kC1>N8HGfPu=~5>^mWslpTc?E4(=9QdZoLXI zbG0`QR=R|v#Kq5UZ^K4RG4-P}1snxVGI-<>e>j=_bSRT6tg6#;w;4(%Lnk1}!_N`a zJ@Hy}SdAsBHC?1Hw9w7Rs}glMEH(158B~RXe@8#~6Da~BGjY!ObiTMh+rV!}z*_iW zV9o!=q%VKx?%Twpe&m??&}rwRpRE5rjP80<;ye@+&u}$-(7GGFgngGd5*0?~O&E`{ zp?P*eT(S#bJdQImx*QxN>k(~g)hxMEsjHo9)kPXCXJgfcjzMbA-iq+6VgonhRfV2E zBLug3MnN9fgdgtyR^-HGI-xQPT-JI)M_jwUZCEQWZX6JEyQRM2F)=QLV=11kggn~DVoFWR}xDisQ>wY!}FEwVH7 z=$YKnt=yS_Cm+E%e$O~iF@&=7a@V-=+ahsWn`bJ!yU@a*>oxzF+H6YtD?I5lYXwCH zu&mxz`6m{SqaQimR7&o=EmIVg(NznO!o$Y?$iea3N>Ga){WXf1uw08GI+LZ??YCEN zg~LOfbH4bjUY!0cu`q>Z>aA?G$hbX`Tvh4D`?*49FI-OJs=v#Xx{gjk)S&&vF7{W} zkIRlc@OcXtJLShm7M3^ME{DNN1MfZp1=gGrlL75eK9i*5dO*QicnG*WxRo&_3}`4u zbRt(BW#%%R)!ol%JPAB~ZXuj+wBF)CRk%=Hxaek4cJr+XxO-~3miILKc?FFO0TpBY zp5`p?%@TWIvBY2rjlH-{Gh z4=X^(%t;DbzXT$q<2{r{D$%-C$Osp1o~|N^CTtfs(8hxF+>#7toL15e%^&=(4k$}J zbwc!GWH{HRnCP6m#On%bN$%cP^s|`C8mi>2p=9~^=Ctdc4R*ihb9B}f&s^t=SDW}* zx7C#KNMH%;ecs;Lv`Q>>Jo#drS!$r23I^NI!n(%MiEm>!mF-CHgPf9;| zLaoiTK*_P(7^2%{&GOk1@@4Q@*unxn6naF4qGhkNCssd2rnL5Ey?d1Bvfi!n!4uYW zi@O5o*H4GGAgP%@0rDE4c@%Rv94XrAV2;}(Oa0*;6JOLx4X(pZCj94hs>2kk^K+<@ej;OLqxh1~K zhe_YA#8?<;E5}3)&6kNA#TBro-Rb!Fl&LhOW)i}*zu}w6qWGc0@5vZ1l;wkpoYEPY zWZ(HmQKF{nob>qaU~70fasPK6W9Z7t7)?AEVdPmarE{(Ev~!@O*U+iA5sld$28`u= zJ1>83roySSLN8mnbO-nO=Vz#8NjJ7sjZgkAa&G5I=cW2891 z4FWdnJl|a|l`cU}<`F4cX#5FHN@7Xf$!OO3v$>Fq+$yNTH=N$b-xU3dp@cqnNoqU% zp2}oN2JDH#knv{Xvl1h1Gv@NtCkVf)Qvbl1Nm&9c;h7ZTG3m$9S|p?0UMAr~AhCi$ zNn`qA{udIr-JZdJcpxivUB-_M*uTN3zFAWIRm4O%&}3mo030hQfWgYD1e-uNlOyS( z3b!lpgpNwaOO6hK?wrB)^EO&@5@7XBI9o-RQ5e?;&g*;DC%~BtUDM-E`L`df8+e%U zlBRNm-o;$BX_jY0<2M8NX^s6}x|7Qu_h7DC3-y#)$GyOP>d@g?l#euv6OF9e3x`&r z$Z#ZL)=VD~kw;P)NdDH_ZZ1>@Q?V;LC67SwH}1N7#QUMk?DO-JbH)57G|SOivBg{Z zU`uPPt|D$c2#wqZy8M~A<}9zxJy!!&zU1RI3zqKZqqo1SRCM%<)Z3bfp=(r2)2(K- zR3wibnew43t;=Im!aFXhsmTwGfijhSyA{PB45gBB3d)&-pbJE2@%44MC01nt65D3xYVA8@MsFU*ia=3oW$ z6=vdupmFNz)NR-avrm61poRwDYgldAETjN-{24bPDu3?1*{{Q6nn@>6Iw9=&a} z$^LE>G?r*X$2K1!b=&4iwL7D+Ja?WBfe`HT8uEb5Y;$XqEa_HT(j;wq%c1Gvdk-=D zHe>}sAri_^RBT+Nn}7-Anob(xw_QyxdB(Dpube3(A%P1P93>|T;qQS8X2A-2Xoj&9 zd0U|H5{4$EP3iHX-E8>|_qq09byoB7$!nt+#=`F87j*O`Nv$vV<7fLB^SxVLF;H|< zc0vk`>csLtSqMgG-{?;(Eb69TTk3NVxL(oSpi(>b6sz)F%SVQ`u2qyu;su>K^>}3|M0=R#I2_2zlJ^W{8Q${3dX%>josTda0~EkLJm*Gn_h>; zF)SK*auCyiQF2Zj9a6RIZZr)}y4%R$Ols%bE4l~9#PplYl#B)_G1V-5S91;&bU0&K zqv-E9?s-~x`NWjII(L3lnPw&_{51eNOc)7|f;9Yv+n;0PbyBOMdk){FqvJxSCIFWyIyjZ#{*jrPtYs1L*pL(wfhQ}VKu#VjDA@D4F-RO! zfcq9@LxNl84wznl>qSvj?4YaEf(ux}d2&+?gWh?fR7H4I`KEG)R7DYcl@OOIa%|BW zluz?nQ(Ug!o}D^AEAPB|fJLgQ2#1ys+lbTAZJ?_n&Um+iPb+KKv|#$kOla~C^VkpA zu0R%qzE^-{tAOU&zEB{JDJ?YL$;~e80MiN=6__nlxdyL`m^QH0zK?&%&SiFsy?Q%CI$-ypUsk?C$*3Zy zpOl4Vl{5?bzgu|SPV?U_P#pi;0`$3G8m~IsyCw#G9t}ZAA*Xa}Eio&bT$hoHRl8vWj*#Gg8;$iMx0G1UV8hXV6PrSN9^9tpJAede!rSSlS3y?1? z8kyE>gE|qhq=SRJilmx(og(vu(BNpg>Oh?tO{RhCvF+z8vuHtW)6*%54$*D*>9EaE z{{?Y5AfGMW^?gM9NKc=Tjarv(1Kk9(?HuX&vhD3SZ!0!-9irY4LE<&~Zs)9OuodC!-UsNu8MknjpAL%@U=Rp&mCy7Gnvida@PH3J?QoX)jA@jyc@cqmAL&NXh`E;{A&h=TDKbA z7E~kHbt{d&5s)^3?l=HRo>n=GScfaW8YYYUnIc#2Fqw3OyRi<_v#Ne#xKB(HgB15` z<}lyQ8;1(X_S9y;{S}-=h57^rHvT8Hkg#2@c#He94HE=v4gW7+?&EM+DY9~EBqs=&$8$pi;$3jXd4|msCRpC)EA3>1rl);%;yKt;b2(&`)-m zVe(gL$weeDpkJZD!y^oicX>47s}TtS_5mS=zR>Ta9an~Ua}>g8afA;@fW+WIqzw=C zI+g7Mi+7_y7Z8<1;o=D!H!Ys+ajJmyt7iZB) zPC*}>H+n3iHa6Ao9!n-n7ksLIC1EXEs8w+9)m6)0j%P4$Ei7P~z5ipI{nJO7Fm(h- zEq)q)y!m}ZL_}$fXrs+^f04lrJ?9lN9`h!&aD}RxO2l!;DsNwnQ>OR5-;qR-EB|j6 zV0-^RP2HJ-yZAbs_OG$qBP(euPOoBD!wrEwD>mVDspDIUknZcMboL8Z)tieQn@l-5 zahCJE2&MPQPIk9a4WWyZrE#6DM`9mvm(X!Yq|ZTl-$we1uIsa;<=vQ=bY<~^zl~ur zhDjk0+Om<;a-+>wsEG;KGHLRJFu2t!2V~IQg!#&ix=m?aiPJygbA0Ue%gp}~qR*&n zj)Zn`c_|ixUc^=kFK*t~>+*yAyJ!b{L%k#Y{pb3IdUQMzB?u*qHGx(5SbX(@M_tUY zaye8()n@dSZW2k31?8HJ)QZsomWUiZ%SqIK7wP&s>Ml)Q>KYW`9v!;v1EtviM!DCa z>oiYl6hx9!EO?y;ahHu~dDHKj5yc2>njRg9;`T%TkHF?HNCjeiv&#~6ds!aot}%PW z1n8_`C?+!=h&)zb@L9rP@!I$E;PToDfGHlA3s05%QWh^Q0;riG1D(?(nr0xCn3CZ`40OnM8^L6u9E>7~NO;3k7Bf`$3T5MgWsg(0 zp9hm?`2KpOD=Ga6IPCw$y5?uoo!m+cxnDN%+n;ZRoBr$tJlbxc^lL4MM%^HXX^cn4 z;KGebfKS1XR~Iu#I8Je3WrPR6i&@OW)>RH~Y}vR_<^NnF1OKqu+L*Do*jaZPNY?%{ zW%5#a5V}>q`5}RyO#2F|2s2)icl-^&kYL}^hh2{o(0O!|z!XRnT-Mzm)*_V68#cDC zECwuT6GchY3ukBk1p>zEIO+08ZqC?F1D3!%o+DA*?s&QGqUd&3M1g`95w%`5qzbp; zUxM)Gp*h4|Cg|EAl)(PzH}Y(A70!1h+aM*{`YUye!}V0|hl%*mY<;y8<6OGV8M%g4>>V8%qA{fm{bQ=imT3tkQEht zUZ|kzFhb5koMNrjzE#!AS2rj#gmXKB5sUfQ3M{jyWcWQ5%RkfUpCL52DC}u^lxHc-qD}G;K zA!uF5aFWxf7)-nOc~I`{gV9{U4fBCH3bqPy%ti)^s1Eg&$d|L>j9hE{npWGoKw36g z&F2o%cPfZbB0b9E;tMO5<_{{0#ueiRKp3Ov}s_ZrJY`qRjSI3U!2xd zbAlZ`FDZ8Y`6TydJq=<}M1=50nuq9_Q>-aZ#lcczeQI+sxLeNr?U1L8p!>QVPP$QbJ`~_!$=XIE!J)EX^)9<7-{K+Gs-wA zW#poM6r1hn((<_x`)qDyZAknF5Iqi7);{%YV+1k5#RCvz7*YKonQZaYt6LO z(v84R{WaWYY*f);D2&RS&rg;4{U69kl8RtVkY5Gg-l z_g8%)ZPM!!+6h4?-K9ynaH z`MiG~^x^$Y80&S$=`^hh+!a4XDu(dWT)K*10mG($szs%}8Ova&@lpfHQ@EK-E#&K- z8z>}N3BxJcW0O3+?>BSTbg}&&>?9v=SI?PbpICm_9k-D9TsM~A{-~*Ej!a$ru~7!Pe6o+p+)$Q%ya3mBIg^KxOWFbXo*f1@iFEi z*8#E4yCJ7rMQy4j{p|83ccPI9siOW<{n>bf_LytsW-AFozJh6qyq#+Zx;;WQiH0IA zQ8JZKS~CrKrXWGx6U$+tULsq@-pg5CTfE}Kc$9kU#ehPke1j`2wDI_eD;gDfnn?+V zEc9JnA%$O*^yA!c&ZPll-eKOGvzz!0ePHN+Z&X_+PuqyS;LFn zi6}dSP;mox#OG^@H)fe=ZN?ev-(HeR<(%CeA_6K$bSU>frE|8{*`MQKx>=gh`JQk= zX~BQ9-}R7yn|!DA4yhFTK29=*H-5nOPMXu@q2Jh-apCDGdkFm>zHx-X?7^K#q%Tsj zgryd7Xj*lJ1Gp1C>fFp0{VE%x)7~XZr5tqB#ORjr#ru;cr^<~tLd~)lI#Js7#zvi7 z-Z-f;(y5Q<9lx?3k)Wp}Gqbe7_NF84LapjwJ1N;Pi0QsGI`|v2g}$O<{6*EZGGGYUf!E4;v&N@nDa8yC~$uoOhn|`;7-x6OziM+p46XEXzz8lrZ=w*4jcXNF)^CrD9QO13t zZ$U?C^aEXDWXS|=t8cWY#Nk`YT4QYJh74tMy1ze+x0|C!j6RuM8`e-4o z-Jk&So*n5(DC)a*^K)OGY%;OVBzZEV+NVUT5mP#zxp&jEpQ6o$^ShPSo3%l36SsTL zZ2q*cGiYQlKo7YrI>3653r3zxT9f&=$g>6>eQ-+;3pyVA+21QqGQ*xAj0ApHW<^Cs zR>y6bH7VXJ8MEbuX}`##5-ff>QzMQ9C~;k}Dlg8&P@@4i)O_K#YCPhp2Az2YO7n9s z1e_$06Ya5v>60_O<-6Jnr|Wh4j*#1i5#b+ZsCt4t%kub%oKs3k4740DaBh7h0%MzT zX{#7i!_jc2>AV4bMAnurY% z@^e$I-_<2U5JZS4qA%&u_VuB243k&4rtT%gSDJLMY}43;hJR+T>J$43)A?al59DSU z+*P`a6m@BAxPne^Oxh8fPJZ#NGWY#k%xI=aCn}Kas;uASy3fy#W39jCPi?w|ZOhMVCI$7s0T3;hT$Ob*{OoU7~!tzx^Va z2u~4Nc>5ha>^!XSUr2P@E)3*v zOS3*x^&dU_`8{FTD#?S*u(mIp^;Jbo=RG_3NHBruNC=h+6t8Bd=;ArfVWnhtr>e1v zdcU-l(mR~63CqVBg#g?w$92GZgJ_*aZD-qMlT+f#B2P>ZP^HPd0ghNu0_Ujv!=aJ( zyy1IVZTA&Y+#_uZ*_)V4QgdjGN$^k%IpIgRHI2-mJz)pHt@kA=SbkrMBNO7dGgv9a zf+{(2wl})Sbd~pAoSZlp>TM$dK`BFkhE+w0Eo(3&3QhO9Ljd%p{J*UaluTJ;utDIF z#eF0T?bA64D-_bRi_{+8?iRSrZO}F(_|<5qQ;;(fBGi8jhj8Qg|HiUv2r!>zW! zIosfe5|T)Z8YzBY6rDlP=qZU()S7X2qVd9}4;3)NvdE#X7leECSAtNqFxDnD5aT^R zk;bE1)h(tdYBBu~Vg2}#&|^}S)*4lCbQDauOu0cPNmuqiI3UyAd%pwn-fIRD-PihT z1An)-| z62%j{Zh#XW9@ee%LkC~eLGj2Y8+v*|op7Q47Y+IKz32W_B*tPBUY8}eD8h1{QJ%-x z$rI*j>q%#0X>le}aE8#DUp~c%e`64(7PWwOyy)KginHLgljLz4p0>;zd}`DX{X z6Z!#FYp>X7g67u}T@oi!_ReT15{u*>1~*dKtJ}tFS&bJ)pGUEYmEgi91pUw3eZQ4F zyA*%01?qA~iG(&yhwCKrPx;4F6}@?vX%KMKwu5h0u>9C?mureEaPhW`i}-9IyM$xw zpWa+q4e4O?g712QvD9kJpr456$y{{V<;$X9og>y;&dQM=33y!47AFkewqCDvv$Q{e ztPGg7L6L>=Kq;u*YpiY#!#?DSc1_Ig%Z16+GGtv_#ek3U(eh7lI7=Du z=lY`J5{l_Nf47MiA!9@DTccP<8I)1QZ5Vb%YV5&OoPhe2~jTMc+;Yv2mk7NWnRRkT02pd z6y>s4!?hLiRgghlB&!zN2yQ7yZ<~wn6yr!eugSXEJPa1A(%P>UEJbR%MjvfI8+ zrAk*VU7*yD{9BPhpbwSU?v&_!Y;sx#jp=8A!1Lj7;aPhF@i=YZeV+mT~_-4xT5+GP;>@Zb?JsYnQr8>hr8_(Wou3Xg8mbaE` zng_ZWdVJ8hlpJ;m-QAyX4;8{rqixTVRa*Lx)gHHOuf8Z`drQLqJjde4()^oZxmcBD zNid6rM7O~4GJKfwk0_3IPVo?K=?zROpG$}I*slu$qjS7+k?^G2pI&^y8)t6-i97di zQ6)_SFH{Kv=3i(2kM8UEeJdu<3kve%-}vwT9!2t3Zp{MHTXU40CA$42vPCPfNaujw zTrx!7^}#LOD$;2*iR*MbYhDNEJgcc@dAwsYFungbT{N4|2!y+4JB?cK{!XGvXB&N? z)_l;uQDRfBw(D{$=4MGJ;b8a(FLXGIJLYd6#+7YYn!YHSv8ziom@Gijp`}qo1vy%$Tte`)98kEx0He_a z+q1|9Iq9V7u*Te7ZoC_#l#ig&%b^J$OW|dpS*ivm>JIDUG03np<}2JqGH zDGP=xS!fW-QB(5~Q@$v=ZIOyOc=HMp{HyaP0QBOvnm2|qpv+lVYa*ZtAUh^ubvWJs zE2WZ(X~<-fA=Pv&P1FwZQ~RU_8#H>OPs^)9#8p(zD`d39z{@Mvu(N=1?Z6K;;Sc|l zp+`x{IVm!$v%C$Efn5T_neRJe?Se4O>pVvW2Yb1W7UDb;KU;p=+}hem_r6Cbz>&;k zj6EU1dl6{!1};s1R1#hF@o>2?StctzBoKRh#7tUsHo=enbjL~u{Er|JJFilPeA+QSD4dm z+3LG;r`}nXUceBlZa1x%*n{FTKz3nVtdA<2@WmeEgis6h+__8vP^vUdmGweR7TVuo z{=P2k8>&fcdEL(3 z0J&;{HKTZAF58)&>FsQH@8J9>y{yQ0Z}&t64mN@4rq3J@zKuk&x9|Bk0msEmM{RS? zbRX&BJK7%M2CB)_kF!N3NX>CwvBkI@Ys}vJJVu=9@T#7{csscTNBmIx)b8x?lCsz_ zI+ig9aw?Mmwj4&qs~Y#RJa!ldxN>_B$8n)1^@@H9T27B1&e~H5Xhr`1u3Bwg>hPkm zQaSHVynw8LyTvcoitw>^IMn&gmx)lHZ`_^hbZpHcH3~#+uCjd=28#v6Hxu>)1uL_= zl@bn^gxqIpLH{o-=(4{FaD1Ns76a33c_Q85e7TJWf27@sBfk6$i{OKf&Tepk)cDgv zot%D!vKle~5o)WMeUhB}KNwdj|1*D^%0p$^)HQSjVmz z3wA0T=lQ0f_mP<%RA)Em@hR|NSgcF+Gs-O9>J2R`k=1e=(hI&+q*@+8cP;xVJK!?* zi;{}CH2=szgP-z=uiwUVYL9hxfc`*7GQBrX9(KwLJts{y9PISp43aqU;Y;`(9$~4;3ajaVOijH|Bq*@g}9g=Key=wGPPTajvdc#{FM}nZ01$DhL&Q59U_c&lRxRpGqX!pN zE+=+aB|Pds%@@}SmGl?63UxIz;3+-WwEQ-RI&+UA(a9SBK_EXOo_{rK(ASLy*>7)^ zF=zl(^j;du4@fvbas-VA*Bq2e>4g8Y_-wP##ik4(CAa40CJdj~9;YokjwQ%^XOHCi z#WfeMVE8}U?ZOK_+;Ct|I=5i;g?Bn@^9^BykGA~ZW&;x~8UFmUR3qkL;h&{j!(T=* zUo2&)ESK@{{gW-<)^RL!ZLsk6I!krzSgMGQAv>1@5TigYXZ8|pusLoE-ayx#b&kvk zT3df}5(Jtj5Co zW=T+h&KL>`iZkMm(ysrtE*_14hko;=NnokpPW~J8ui?2^F1wdzqyWVWRpnZMCjEy+ z?v-RJ^1i%Q8LXjH)l|jSzl~$m^mpn8jVPsG>v3$?dSh3z zv7|~3m%oC)ldLSYN2=}@J6=Dr;^K6!uIlc#r<3glFQYTMxue>&WG4TEJnjsv$5Jkd z0ZfAopup(6E3VTY)hf(*+ceJGRM+qRMvtA2x(fXXw4I6Z)Q|htXgmV5^t+rpPbMt` zKRNDBamgIv9l(XCVw&6j`Ecwu&${`?9$c~-us(h^_7ktp7UeNqn^+^;SNMJFt@ihI zJNMHw<$dFBlJ=9{NFtwZ$LhTIAQ1Aq3+x@+#itCG$ZNx6$0;gg*Rfw&IM6cMST0?! zaN9kD`*NZCj7bBK>URyfig)kcHJI-nxg96=`@j3^bVl&4r1bF&i?iTlNuUUjLt=?) zeO!@n+X1l9>8i%Rn41T-EeI~P(>rAC6slrdXO_VSD{z2HTE|n@fl-{(&91#n+8wRS z<6X2;T>%xdcnzu)N8^d76e=pn@x=f(Z%5>cvG=ul z2g<#>534OBAGg}=a`Gd+68^TeNs0-yS*!^5SdP@R+f)Okxm^f$5?M3+FZGw+C*y{# zTcQJcNWOd~bGgU}G6(9V!g7xnCz1d6-MxMO$FAfH=;HpP1^m>1c21rH`D!gC_v*So8el;eGT+c(MR$BmvQqln(H*(5N0S$So&ac%EWlY^2ayT}-GdPC*OWU;# zRv3G_^~W8WCuLU}V@yi0fIg0zk?F&A1#cP>g(=F7AELz)$oD zw;CYGeTCjfd<{`04FUKTIay?of3IC*2*eYqej*7Hc(fE6^-~Yq$%e*^`R0ZWCRIlG z_~%O3DgY$25(1hxC0;um57p1CfF>OV0Y-#4$~v2q9og?}3a>aI{-^2Aw5-hdle`^ei} zY|mDHo&#t4=X!Of8AhU4s%B=kLbHET{Pz9(&2O>`Zv$7q3Ax%h&?8G6posL2qlya> z)a8?f7XpX(*BP^cE;)H=62Kj)^88xB&2rwd zD*!l4Ec{_#ZXHQsc-d%L_kWDpT`jpc{F?@QJZQv?JHNlFA3}hM*;L6$H*wtti{H^) z=#nN}*LW5i0Bx6$nmDpmRXct*<6OV-l~jA&t5>@@i^itWM!{(vDM>wC(o%?Y>V|bb z9l=t?s|8XMJ8ezyh2}f{z1_-^!~QGZ*8mwcgPCeaHisK>M)jL2=?ruK1E4NMy5Pr) zKo^)nE6&Dh=`8v086kx+OG^tn8{0&}=}*V82ah*U084`kR~~Us2wp>^D>fX|Wj5JR;Nc6tSOJKk z*8<@ulOaGlPX-!TYOYb!KWU=Fd#_>HrR%ii_IpObiGX3#T=4 zmZPZa10)tuIX%fZQhJi1S#f&L;y?NebO%ZF%(2!ih;yNJ9T^y82^dxe>RKAYftWZZ zqWW&{$p5eaty~|%Brf8GGBXT`V6=v|Gf5o6JbD+?vns}e_-#o1Uig^TvNBSgOScUE zktp-+r{k!+m`tO?2CqC(@V~`MHY0W~%7UM9XeJ#fHIm}pEqqsQq;t`x`J7u+ z$Sr?S0@t@JX!K)}Hot4f+v{Z|Sp6v$%~Jq@{yThUi}8a0C&d8>{(LFDEu*e~m~^63 ztOjcUGBJ6NFaNzv*-QiehqwM#&Ux8`PZj zy#{_d%TE>zFRfO6!m=oR)^6H`#1dIQlFZFvYvQndzV?=q!}a(!&2j8@g=1%BxJO35 z_~3>a^fn6fMFv#U6cAhxP*2L_{IE`Hdjp46t!EiTBUp2UzxaMJlNA2uEKnvV5t4isWG4VC zU$N2&P6~Fauo^qn(f#%VL8gMM2lz)#rPWW5DfLHKEc2I^P_`ozARJKCI!TwAuLD?q zdYYv2=x*Qj7>Qyyg!Mq9FW>0wV|w{;=LbpZ$$ZX^+Pltb@jB7E?mz0Qh1~z_e(9D- zKZoz~TQDcqo?dcJc}HjBB48ayeM%!&9Lmt(lE$DOwCv|gGi7SAc}MR525w*_Kk9Dx^{tMQ&oswW8!Mu4}E>QGUQOgxWUj~J|9 z53uZW{uz#178DsOaSZG_llfG7p6BNZ8j9cN=H^h#?XApCesxx9X;}1lE|!!l-BgfN zkrai$ie#}2XK@8L6%IzsHSpL^I-u2#((E3Q2L1qEeX zuWG|-XlPVe-^`G!1S=K(N>>&EGlPT`QN8iJQ~8(+Ji*b&6*&nmW%jwflw3h{y1dng-g>vhgeflez z#qg6{`&Ti}D6O4Hf#>0$nriARw49YyR=q`s#;SF>67-OmJ z$(}+#{crRQ6fxO7oK){DWYZZK8O7PWxm>$n>}4{zQ)Y-j_%%8zoFhDSon!&(=sN;c zw^+_b24SR2cXji}^}7v2rYtQjtsy51INtX~@!Ig8Q?B~aNcjA|Q%Jx-VlKD z6s3{Q7WKVT<#Ogxw-zHcT&qYdYy+>y(jxsMe_^EW@>AQy>{f6b3}Zpdifz$z-vr0e zpYTu*@kzm~g+(5ydp*$#LJigGuNH&e3K8x;Gh}R-VTH=*Aiq9gY0M&{-Cx&So@vKSHZ|;`cxE zCRJlg%2TFh$bZ7l0hjyqrw+(Qs8td!j_LItNrjns6oa0A3gJ(Ncp4BBJwG_ASWYj+ z-!0xjmg~MyRrAYJh3S}J;l*z*qN7kq`g$PrI~lBvqs5TdAHCOBACe`GbNQjvYZhXG zX1FsP*>Ef$V=}FWz<9)bVSM^IY|QC6#F6))Nhe(;rD(HkQd3m?uguz$MlI@#nuwtx z6)e8(oWtie9UXX3lg659sN+Ei%e90YKkNEwZX{C`aLpt!`M857ISpvrxPNnJxu)xU z|JrxJ5ya^x?e0z$LChaOt6=@-u6OB_&z8WvU!VtV;~i=%yC-Za*}~B%4`qX@cdP3$ z4mL=(y21mho-4-p#pY*14EesC0q5t^#^juNZDnIFz!a)(r}*HjK#25@85;>@XOyO# z-1nj~Mg=Kd+SFQ6;Lg3OwYl!8iWc z#@ByyCZ2=vdR^qpmDDLK6Bo`YHlA!nGlA?I3z&3TI=a{)2}8r|)+k+otLj8Ew{kj( zi=aGxr+uRMM;z)@QcwV7fBd69wl%1J4yx&XkFl7q7`Yv1Qo~tK-jmC!jnr=(_hGM^ z5JO85L;%evNNWct9p~54aV#6zV)isOS`)SYj0kv(%X=2&EuGU|s6M!Y5+cRIg^Mt;qcPdJ?B#i|U@Vc>Eaz3zyMy2S#%KrAm zbM3C?TH|Ha%zYMfXt?SnYqZ#Ydd*g^6eHuYsTR*6=WG2?-$LR((D25ie&>nJ%muSZ*7WDjVY#!!Rt5b~1i zD(A;qBZT2x+ycV7?mI-{C0{Z#u#^mKfRpXwx%a)jLb>W{$b>f^smjIX9pMFLPw2pv zx~X5N5XPLkS^u>}GCCdx=<(PzaRs4V_YN~XNoydQ2_5QVsYy~s=3x;o zMe!p<3TZo_tbRJ;AYu-RReK{ z@|&4}K?(z5obYw&wu@(ei9U}<%)Ll0CSx44g$Aku@ZGRC%784IL?rmcPpM3+^h?xD z`t$p(b4V3#fxx zKDFa+j7FF3>Zmrtq8&!AiF#Nr*p?EyO5~87ENCSKJS4ekO`XGMwW9A?H=`MDVTfOBUfJ}S>!t;+zde9pTlJ2XI)IQ`?~Y)gutj>atm3a(gEr>N1`$PZl?vAwGJi=<9`HPKo*P#z@>FAAW`EyW1oCJvLog zeW<wUtM9Y+mYBkst5M@rm8+&W zC&65XLP90q8CP_tz#u`&$c=NJ@4``BA6l3wWO>G)Pq3d|nb#1&%oJFApEf5AM0WOd zmNE9U*Dc37&rGyFkQaGJ9o(g`Gk*gpZ$BTNQ?5{00ZAs-YB!kf35AhNc z>>4_=(OLv`jc=)D!Uyu#&@}Tm6MkcN;VVJ z+FpM&)IX$bnN!W%_HZVhes|7Kab#xSA3>r95**yw+FDDP)BVZfi~+&yH%BGm!;Yqr z@0+VMTqMe8IyS>RpO7Hazdl|zGczkbU>}Z6P7Z}qNEkdl+>#TJ;0+tgpj5T}CeeNW zK66*l;*AK!LRIW2$_H$lr+nHqGvWAZ7O}y)F?3AaZ#EP@KmN{PpE_3FD;Q&hwBNr9 zp6`av-KW&;5L)xJosLe0i3hhCh@~@!$adV<#ugFkL(K5+blc%;C0y(4HEXuKb5h&| zcTY(1mcpu152zY755o;GT=4g$(XyTT@rnk-!drf(1>@0&oEjRo7FF?b+_p>NO64r39!g@X9B)Y-@7TRO z)+#q=$gYvRD0m&e=^X;2AIcTzD#hp68Z(5$JTQ-fK<8FkB*W3Tw8y|#OJmSv5`3!0 z&{|)1Lq6o?XR2W`SBE!51s7o~I)mV-TZ=Cv=ReJF)qx_o4xi zO_$#V3P1-1Xrmb%+1F4*#Qq_@McV$D2*SSsfi&6x0P@1A<;f&|XXw}Q1D;`%VHr<3g}ZQX z*n<=MK_TgLfbxkK?Y_xzoJB7~?`z60HVU8Z&<({SI|!DemeWK}#yl@t;;-r$ODpuH zS0Zl|h@U07hRxSM;l)YIGY$C0%X^dXeH~^d2(Q`1SDMfCg8A-BqpxdSy>akt)1B6O zdt{iqOcv3M&pV$8k(VKr_jH+jc zGIWqeBjD+|U<;B>j2~uhMm{%{7t;#kTcjMs8sl-Do?bj1$ik~I86|AFSr3Ibx9;-K z4#3apSVEFjwBZ1d%~v2HDKKul#!@rpm#b##vYf-9Q}g z>sNmBZP>aK=8g!mvr6y#4<7|h>9cy?e5%%!m33j%xI;|y*r!`^99w3L@5I?JVM)4S zOt3`Z=j1t5yk4mAC1`AX3!MQJgcT>ZofSU3JAKuU{q|sBf-54H`g0Vb zw$rZr)=;b>LP`GcN!Z0ZJgu+K%@)W_&aw)b$=lXhEm^Rk>5oLe2-(rG${XiezBgQW zT?P_Cp^5(9p1wwnG8xK&ZC6hZHDzVaq#u%j9&6hnT>eas~CJPG-)hZ9!(!DLr&7p$6A3`_2Cut_- zwugK92g{Oo_gqO|xPrlc@L|W?zg!3Ou<}_)Q|hs?%G+UgP{&T`2=(>x76B@o)$g4* z;`m*bwH9S#R~I@dDYfO;-dHbNdhXWrz|i3@hsw5^4+`BiQ_yNzTj+PeVgPC}TwshFVWw$Perk*X>z&d`0F# zqvB#wF|l|12ZTNM*{yPzn|!S%Q~N0I1N}hyPucER ze%^+LSVfi=IY$gcL_L}B+519>LDu5F1-yS!|GZ1;$G&PUQiqbZ#k>8)G0aUg2vHO& z=ZBURR!R!Trwd*{ zeEQ5XQu;u8&<9wt(zc=@ppqnzH*k60glRt10?f&K{^oirul1+5a0)a*b}~-C&ChNC zr|>+}u_mLxUcU!#_86oGB(R3fpH?BEL2A=8b}z>Awq(9xYr_WW9st5gP6c1Kn=rja2;9_^r*g>81E0zFTjZVy#!S4?updpawC*5FN*AmVW%>7$=&@plLu%V@ z>;;$EXXY-HHt|kfqL~99P!GTB@fDBCM-21gJJD9V`ZLcrA#{hH&Ri%Fbg2}1H)rQf z80N_X;-;6sz#?8PWdUWE!)BQ)ItuJR$@kj;`Fceu29b$&U9!^V{D#MeM>st^{$SuT zb2aNGg4#qgfCpkrZ(22k655|LeijFBVSb8k)9Be|<$b)jKxxihy#DatzNHy7Xx3t0 zmLgwaLANDOUds3GA-3M+^x1HT(za#AfER(cD=O7nd&?CUsI~lV#qPMKIh?g47DZJn z;PcbFr!tQb3wR*M#wsh$hnxdHXZ;`!!{*RmqV&Z_yrEb{v3zr)#o=vX=-v?T$h|amo->`sTui zyHl>*kw>5%h2kq*0tD_Asn9;|YhyP5U?i8G6jChn@agqBcNdS; z?!7&8O_`iaaI<5Jw7QHwhy?lI-#8F~&q&0x=l6p(3~O1TxbO+B*fjVb)=&5oA@`y9 zt0zeRnyz8ds=X0-3Abu3WOfZGZeJuoieI&^%2rGr5X+6(cEkU9O+ESgYk#DJdElIF zYfTH`vD_=pZa&n1E5%M+!_agT+=Qa%;z3B16u(`%Kk_56;DMV18W)MPN{9B+3CHBw zxbih~@tscbQ0|v|nVeV<%{i~JTqMUN`8u1R7brWEkfcP&f z!GFH;TRZ{6ASSo%_;2Kie~Ubll~aExZz(F@5_0u{H7NA>?W>0j5P?W=LYT65Iq;4J z#sBRkxJJfJxplPYS7(t!VUbrjAu!t*6{!vC|Cw5uzM{6-A_ux!4C+ZKX!LE$zd56B zDOxd6-qBNT{G!|@9?k}xfuECGDyd570`uWh8!E3_DmTU~1nmVo87p(?xO;Q8EjD4T zt*t>$l0t}R!uo#-^GdNPTmqw%Cxt%!*>El>tX;da?3eT|!^($SVKs++syej)CYp3n zU8`#YwwL6kepW_t*-b<^giEq`o(T(?)i)KUW-NTaI3X;geAi5TH#{3k&pe zJ~I7p+uLyp3kQn^i|VzCoR{99utDp-VxmxguS&=YgPbr&_BM4F2BF#>f9=Zntr2#p zlS|0%aZk(97ZWM8__h4$oGFgcEu&jmh?T{B07x!;^l8PG{ z!EBE<5qW!Df00F<4Y-I2U6BRf#p0y{51;{is;;PAk`6Hx*`35Be~DJIZTxc3@Qx5r z2z*UNC<9~6CdLaD)FJZMy=0ulekb4^qi%?Zv4{73g|_6l6W(Ana(i^A_I&cZK98r< zYt60O4c1U%xLj%|48BN0Yy0%{?adMkyW1~SNps#wu=vSf{_}T3V3$=g6g4!A9yp_t ztY3D%M{zS+BZI~{upiK1eg}7%%B6?t2#j?M)eC--asc(|cnEh`C~RMBVweLeS7?kK zhK|Rv>8sqAuDh$;!}(SoLtDX+=rD#=53*3w)Nh4Tq`grzq`+>T z^4oQC>%03D<>JN8q$acPoynzVB1BWW`))X&F|R;Ar=3m)?4*YD>sXQE+fQABA3u~Q z@T2#H_GYFe61nowq10{F-uA2%5(si+}KCQT6PG)I>*>=RlF*@vx-S|W5ZqD7mO z9$OtXJ~G?K1H+!)KD{MlJgN4@2kW#8uJm=<-n47Mhc}L-DU(l2rn*)!JinQ^b(TBF zFMr3MhcbYp_O@o9{U@ssYier9b$a?1ZJwB#Tn~z#KRJ117Xl}0Ly5>cf?q-YPh!ofjH3>=~bBtC&g`1Qf#| zVwg)|x}2;igQn1yTp7~vbTjUQDHWWZQ4F%O7lLc@!GDTe1>Za-3T&W;5wrdN0&Z$- z6brfK))pc)MIj}h*Xx9C+>|FEQ_@iBh5q4_h{OYF{P`p~8S2X=wf=#Cz#4%Iw6dnZ zmcZeN*rwG^ps%0Vu-kS1#U3e-dJ^d!wC$6T!k7@Z9Y|K(!f0Do9Oz2CFT8CK z^0u<7R@fL2EQFn1eR}%fVR{)8bm1;U7O=L1%oh%c1RfuEv!|+dcJub8f02xkoubuc zd3KUKQRv=gaL#=4v$8hB-T*y#p;o-9o&4AJvU7EUdH?$MAcy^Jxo_|z9ID~fqbo$0 zjEAB$WOb?(*pZurm(6u@xS>~H7KFh~xm++p$~}K3b&LzF5jniX7e?56g>!7%*0>WW zqV#J}tq$tQz@ryG6!QR=k>50jMy^3bif2-cGO2A&kzn`2lRC4cWs;L%@8R*C8U_1y z84mofx4xI2mi7T^rcPxEl;d26SJ7%sH^FYk7ELeM){ZM2-wYJybhp0$~ZjK z&Z^1G%Tu{%FAYd=vZ$V3v-Q=X^q#5G5MPKz0HUYXy-IFtEVh6q28!vJ`}$SF9u zW)R!t`!QiKq(5jfBJC8#?fDZPvShKam}rAO09%qOr37D8ZiqG5ZezJ^4+iEqd;twO za7+dxoMIyARv7X6c%Pan@Tt$~0JH5}rexlqpZ*L-gBZ#-_$rqqhSN*es)BW6Me}2X zqAEyssUZFjw-X7jm)YF>TehvM17RwL6sRBq1ruSy2S*I%Mzffjh6tCVIff1&i#^08 z?;S9*0K+T=)TQj*-Cg^t;bXwF!SP6Q&UA$d#pLjF6J~noWDK{i4=ez)OwxoU+xVjY zaJa9Ze6zrS^`R zy7xI?Zn>MK(xR|_Q?;=R!ZOFA8>ZCeB7_P`|Avs226r{zH-oryXDYx8hituxkmy2E z0hPHn)B#

_NNBQw3gRNUcFT@uOofM2YFb5J~r^MIqg-_-r~%{lEy%TUDK>V$^KW z6ZU~Rum+OJFHgj1Y8@)-H~CWhE9eis3bRK{6pxYhLLwSK@hk=vnM{s$iZ+m4*YPJoO>;kwbI&?#>#W`y=a3N5 zJ=`BW>+h7M=Qw|HQs5`*!S&3{@@Wu5SEa{zY*phHpSRhOM)PhYiue+87NTaQMvY5U z7eYj9@3weSCLDRZH+i%Y#EEh0j+E9tVqT9#To(#n=5vyiHuoKUyj}_M^Q-fJeA3A) zgI=l5=`EFy?A=P_T*fh|{eW2Vs+TFj&xV##MJvU;(=EL;%DV!11WC>9-QubQgTu;^ zwplIUaCfJ;|N8&eBP2YQdG5fVm)wgJz=WlvY+GIASW%=^M6a9OmjJPZv7)h2`OmpN zy0Yk`wn$6L+Ap|9anndJe`Jph8i!C`RIfhGtESAX99ynn2zUr@>ae(r8S_}7r~!j& z)7Kix%()-Bz#4Q8?CDA`$NOPF)#=5Oec}@O_@bfN0ygSN!q@ zJ47|qFar*42uI>W09|Z%#hCTzVg%Se#W_d`&3YZ&2f!2t>zA{CmezPl?pA&qNjS-b z@zgcv>l^cVT=38{Fkl>2N#5@e)nx&WhI-<%zyJ=@<`8FvR==N?GGqKW`nH8&=<*~Wj{p9sN{f@+i>GYKw?F9bEX0Y}q$F0Ixum&@=!Zf4#_Bo-#tgi^|$P40mo zPjg#N4R+-^zVyy85s*uvrQkC9`^hgLfDjcmNx*uw4awfVGRyauyGsWV)MdcoNCG$3nbUo$=B#5~JyJ%Imt zSCnWd)n9(35>D6l&|(8_63c0`uy!5*$Ot2_U)xOC#Ny%T=v?iA#9r9l-@g%53~fP9 zBqU=gDPh1NlWRZq%%l*vprHZg^gE)bj+HQv}t zpgo|aJN@|L>oeSm8pFT*Dr#K7EC{69Y4ECOF#R{u;D8$*z8>xI4|u5byIx`$A~Rz} zhq|-^xtLQilG!8_+G%|uz#NGA(&BNqjd8rO=)ukoH@<4kFQ)+^{ZTVV zl_&2XJCMpjsMAQ69r}7Xva7$~9~i?$%j1Oa4EovE5aYxn(~SrGA_b`dcj6aA`@xjo zBrD3#&Jc-tU5FLdL%&%DEKhI)aV_;SnaTuq-r%iCsd9^h;um-UTf-9Nhs&I5NTtKb zj@qesPU$*YZC3+FZLy1t{%UdQWxgq|+ic{BCsO$C`UkM73HN17g1 zd@SF=T7H8wMMv=FO2K5{cveV_@1~QRKtpwB{uv19{Jd$#vPL%e#`mgQ4^Pc~&uhni z!7V{sNLc;Kn|Vb@evslf zVA6{GyYSVIvO{c^%eH9FP39_QILuSuT4$Hxa!b;pNaM@#6X6{S7ylJRTP~HI_hf0S zN3KZt?QW0F`j6h+Vy>Sv@AYP#@PuDmR_$YQcAdX`YLfnRkJ)GCUp4RAdjF8&(R!t` zhOT!F7hYL^^5mA?uUE#&IB0r#eGHiE!7pzo6P&-F?_}q(NQdPjR~+VLXJi~Y^V7TV z;ETW=zdn6t&O8-xew`@$rj{1BMY~qbd1^Ez?N0f!*!ZcbJF4#J`&>wVUGnjAY4nGy z`^^)tZHb-$T)!ZDFk;dIg#hJKozLv{^(1=*T=@Qfsf_mD<7ayOC(Jt^_}gKc=VUcS zb!%qkUsCze=C)HyK4e(h{Z3lEV!6&S=gaDnMf)>UD{S`Ws4nxJ-v^wr-W=n_aOJ0D z`#v%KxE@R6HOcK(hgZBPt&jM|cIoo&hw0CGjvSc7)|j-;VtTj4`8@EtjjvTJX5M$1Rkf|=XOYeSKc8pRy!JiuVqVLM4-LPwyV##Dyn)mPdB858N>oCLOKmmBZ^hgl1T-po4_*IgdOxuz^Z@<0a>28}fQCqoce|<^Z z$&)p4-ai6H+|f zjvp`NIU+#!|v7~ zn7|^z2%{7tIDkz6u}^>EU?LFtVC4fYx30W;e9oAuhe7!OhXI6Q;RcTL9dw#^|1?Yl zERm4Ka;x*p!DjZ^j~_ois(CZ%H|IWt9Z(w&XfvsImSmrJc(}b=SxIS^i`%ET6*|R|H&-hb~>O!{#%a*Yv{eL<2l3;5)pX@4u z$d^lAyvT5CL-8NTZW{#!ql+bF9$Pi~{ib$&0Zu`;nVFmCi~R3VHj)(+Q}cWIcvj{% z1vKLuvKGBOU}aU~|L3-vz)lry?bq3z9@ct+&p!73cpBljD)~i347w*9&-F3LD(eZI rHJh06FXjHeT4B9CADpZcKmBLi=z8Z}rXouq0}yz+`njxgN@xNA+>224 literal 0 HcmV?d00001 From 158671850f97100d384107d0cfdac0d4a9ee48f5 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Tue, 28 Mar 2023 23:15:06 -0400 Subject: [PATCH 13/15] Updated return type --- keyboards/evyd13/atom47/keymaps/phsc138/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c index 1fa433e01569..e369f89dd781 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c @@ -58,7 +58,7 @@ enum custom_keycodes { }; -int cur_dance (tap_dance_state_t *state); +uint8_t cur_dance (tap_dance_state_t *state); void pn_finished (tap_dance_state_t *state, void *user_data); void pn_reset (tap_dance_state_t *state, void *user_data); @@ -172,7 +172,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested * */ -int cur_dance(tap_dance_state_t *state) { +uint8_t cur_dance(tap_dance_state_t *state) { if(state->count == 1) { if(state->interrupted || !state->pressed) return SINGLE_TAP; //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'. From daf24cdf3757f93cdb2592b5ca7ac138a1b8334b Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Sun, 2 Apr 2023 21:01:20 -0400 Subject: [PATCH 14/15] Pictures aren't cool anyway ;_; --- .../evyd13/atom47/keymaps/phsc138/readme.md | 18 +++++++++++++++++- .../keymaps/phsc138/vortex-core-base.png | Bin 36461 -> 0 bytes 2 files changed, 17 insertions(+), 1 deletion(-) delete mode 100644 keyboards/evyd13/atom47/keymaps/phsc138/vortex-core-base.png diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md index 445b3cfc8f94..6817befa8e7d 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/readme.md +++ b/keyboards/evyd13/atom47/keymaps/phsc138/readme.md @@ -1,2 +1,18 @@ # PHSC138's Layout for the atom47 -![vortex-core-base.png](vortex-core-base.png) \ No newline at end of file +## Base layer +The base layer is a standard vortex core layout + +## Layer 1 (PROG) +This layer contains space cadet bindings to make programming easier. Ex: tapping left shift will input an open parenthesis + +## Layer 2 (GAME) +This layer contains game specific macros, currently only a D20 has been implemented + +## Layer 3 (FN) +This can be activated by pressing the `fn` key. This layer contains mostly the same bindings as the base vortex core except vim keybinds have replaced the arrow keys. + +## Layer 4 (FN1) +This can be activated by pressing the `fn1` key. This is the default vortex core layer. + +## Layer 5 (NUM) +This is a numpad that can be activated by holding the PN key. This also has some useful keys, such as `QC_BOOT`. diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/vortex-core-base.png b/keyboards/evyd13/atom47/keymaps/phsc138/vortex-core-base.png deleted file mode 100644 index 34d6c7ed49e3a6592ed56f12d142c913740107ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36461 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 From 4452ce83ac2f9e2deed49792e2dc4ea5d03a9430 Mon Sep 17 00:00:00 2001 From: PHSC138 Date: Tue, 4 Apr 2023 23:52:53 -0400 Subject: [PATCH 15/15] Refactor --- keyboards/evyd13/atom47/keymaps/phsc138/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c index e369f89dd781..f9fec678cdab 100644 --- a/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c +++ b/keyboards/evyd13/atom47/keymaps/phsc138/keymap.c @@ -54,7 +54,7 @@ enum { }; enum custom_keycodes { - PROF_MAC = SAFE_RANGE + PROF_MAC = QK_USER };