From 00c3ecc23849efe525fb52fc82c938ce1b521c21 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Tue, 29 Dec 2015 21:36:17 +0100 Subject: [PATCH 01/19] Initial TypeMatrix keymap: Layer 0 --- .../ergodox_ez/keymaps/keymap_typematrix.c | 188 ++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/keymap_typematrix.c diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c new file mode 100644 index 00000000..5b848fb1 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -0,0 +1,188 @@ +/* TypeMatrix-2030-like keymap */ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | + * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + * | LShift | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '/Shift| + * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + * | LShift | Z | X | C | V | B |/Hyper| |/ Meh | N | M | , | . | / | \/Shift| + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | ~L1 | LGui | Play | App | | Left |Right | - | = |RCtrl | + * `----------------------------------' `----------------------------------' + * ,--------------. ,---------------. + * |Esc/Alt| L1 | | Home |Ctrl/End| + * ,------+-------+------| |------+--------+------. + * |Space | Space | PgUp | | Up | | | + * | / | / |------| |------| RAlt |Space | + * | Alt | Alt | PgDn | | Down | | | + * `---------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_ENT), + KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,KC_APP, + + ALT_T(KC_ESC), TG(1), + KC_PGUP, + ALT_T(KC_SPC), ALT_T(KC_SPC), KC_PGDN, + + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, + KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), + MEH_T(KC_ENT),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), + KC_LEFT,KC_RGHT,KC_MINS,KC_EQL, KC_RCTL, + + KC_HOME, CTL_T(KC_END), + KC_UP, + KC_DOWN, KC_RALT, KC_SPC + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void * matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void * matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; From 900c1f991df6b30a45a25094c61bcf5ed54119cf Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Tue, 29 Dec 2015 21:36:17 +0100 Subject: [PATCH 02/19] Initial TypeMatrix keymap: Layer 0 --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 5b848fb1..38b8da63 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| * | LShift | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '/Shift| * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - * | LShift | Z | X | C | V | B |/Hyper| |/ Meh | N | M | , | . | / | \/Shift| + * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * |LCtrl | ~L1 | LGui | Play | App | | Left |Right | - | = |RCtrl | * `----------------------------------' `----------------------------------' @@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,KC_APP, ALT_T(KC_ESC), TG(1), @@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), - MEH_T(KC_ENT),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), + KC_ENT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), KC_LEFT,KC_RGHT,KC_MINS,KC_EQL, KC_RCTL, KC_HOME, CTL_T(KC_END), From ac94577cbe03b771820a17e94ced640d78c06dfc Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 30 Dec 2015 00:51:12 +0100 Subject: [PATCH 03/19] TypeMatrix keymap: Layer 1 (Fn Layer) --- .../ergodox_ez/keymaps/keymap_typematrix.c | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 38b8da63..01ae6bbc 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -57,42 +57,44 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 1: Symbol Layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * | | F1 | F2 | F3 | F4 | F5 |Insert| |Insert| F6 | F7 | Tab | / | * | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * | | F8 | F9 | F10 | F11 | F12 |VolUp | | Home | Up | End | 7 | 8 | 9 | + | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * | | | | | | |------| |------| Down | Right| 4 | 5 | 6 | + | + * |--------+------+------+------+------+------|VolDn | | Left |------+------+------+------+------+--------| + * | | | cut | copy |paste | Mute | | | | | Prev | 1 | 2 | 3 |KpEnter | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | . | 0 | = | | - * `----------------------------------' `----------------------------------' + * | | | | | | | Next | 0 | 00 | . |KpEnter| + * `----------------------------------' `-----------------------------------' * ,-------------. ,-------------. - * | | | | | | + * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. * | | | | | | | | - * | | |------| |------| | | + * | Mute | |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS [SYMB] = KEYMAP( // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, - KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, - KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, - KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_INS, + KC_TRNS,KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU, + KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS,LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS),KC_MUTE,KC_VOLD, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS, + KC_MUTE,KC_TRNS,KC_TRNS, // right hand - KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, - KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, - KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, - KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, - KC_TRNS, KC_TRNS, + KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, + KC_HOME, KC_UP, KC_END, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_DOWN, KC_RGHT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LEFT, KC_TRNS, KC_MPRV, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_MNXT, KC_P0, M(1), KC_PDOT, KC_PENT, + + KC_NLCK, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), @@ -154,6 +156,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) unregister_code(KC_RSFT); } break; + case 1: + if (record->event.pressed) { + return MACRO( I(25), T(P0), T(P0), END ); + } + break; } return MACRO_NONE; }; From 8677ec0c9fbf0d0bb639ad082e27d6650b3c1dd0 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 30 Dec 2015 00:56:02 +0100 Subject: [PATCH 04/19] Use 3rd led as caps-lock indicator --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 01ae6bbc..1b201c22 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -2,6 +2,7 @@ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" +#include "led.h" #define BASE 0 // default layer #define SYMB 1 // symbols @@ -191,5 +192,7 @@ void * matrix_scan_user(void) { // none break; } - + if (host_keyboard_leds() & (1< Date: Wed, 30 Dec 2015 12:59:33 +0100 Subject: [PATCH 05/19] Make bottom row more similar to the TM - keep home/end at the same location - RAlt as first key on the bottom right row - left/right arrows moved on the thumb, near the other arrows - added Alt on App - added Alt on Mute in Layer 1 - removed ALT from left spaces to avoid issues when pressing too slowly --- .../ergodox_ez/keymaps/keymap_typematrix.c | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 1b201c22..fd7c020b 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -20,15 +20,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | ~L1 | LGui | Play | App | | Left |Right | - | = |RCtrl | - * `----------------------------------' `----------------------------------' - * ,--------------. ,---------------. - * |Esc/Alt| L1 | | Home |Ctrl/End| - * ,------+-------+------| |------+--------+------. - * |Space | Space | PgUp | | Up | | | - * | / | / |------| |------| RAlt |Space | - * | Alt | Alt | PgDn | | Down | | | - * `---------------------' `----------------------' + * |LCtrl | ~L1 | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + * `-----------------------------------' `-----------------------------------' + * ,--------------. ,-------------. + * |Esc/Alt| L1 | | Left |Right | + * ,------+-------+------| |------+------+------. + * | | | PgUp | | Up | | | + * |Space | Space |------| |------|Space |Space | + * | | | PgDn | | Down | | | + * `---------------------' `--------------------' */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* @@ -38,22 +38,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, - KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,KC_APP, + KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,ALT_T(KC_APP), ALT_T(KC_ESC), TG(1), KC_PGUP, - ALT_T(KC_SPC), ALT_T(KC_SPC), KC_PGDN, + KC_SPC, KC_SPC, KC_PGDN, // right hand KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), KC_ENT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), - KC_LEFT,KC_RGHT,KC_MINS,KC_EQL, KC_RCTL, + KC_RALT,KC_MINS,KC_HOME,KC_EQL, CTL_T(KC_END), - KC_HOME, CTL_T(KC_END), + KC_LEFT, KC_RGHT, KC_UP, - KC_DOWN, KC_RALT, KC_SPC + KC_DOWN, KC_SPC, KC_SPC ), /* Keymap 1: Symbol Layer * @@ -71,9 +71,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------. ,-------------. * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. - * | | | | | | | | - * | Mute | |------| |------| | | - * | | | | | | | | + * | Mute | | | | | | | + * | / | |------| |------| | | + * | Alt | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_TRNS, KC_TRNS, - KC_MUTE,KC_TRNS,KC_TRNS, + ALT_T(KC_MUTE),KC_TRNS,KC_TRNS, // right hand KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, KC_HOME, KC_UP, KC_END, KC_P7, KC_P8, KC_P9, KC_PPLS, From 56070d424b9dd90f8153b2fa1cb03c896bf5ee68 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Wed, 30 Dec 2015 13:26:31 +0100 Subject: [PATCH 06/19] Added description of the layout and main differences with real TM --- .../ergodox_ez/keymaps/keymap_typematrix.c | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index fd7c020b..de864ddf 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -1,4 +1,24 @@ -/* TypeMatrix-2030-like keymap */ +/* TypeMatrix-2030-like keymap + * --------------------------- + * Currently supported features: + * Layer 0: default layer close to the TM with the following differences: + * - top row and rightmost column are removed, corresponding keys are displaced, except app-keys which are removed + * - bottom-left keys are reorganized on a single roz as: Ctrl, "Fn", Gui, Play, App/Alt + * - "shuffle" and "desktop" are not supported + * - right-shift is moved on ' and \ + * - right-ctrl is moved on End + * - ] is moved in place of the dash (-) + * - dash (-) and = are moved on bottom right row + * - arrows and PgUp/PgDn are moved on the thumbs + * Layer 1: "Fn"-layer close to the TM with the following differences: + * - provides access to F1-F12 + * - VolUp & VolDn are only on left hand + * - arrows & numpad are displaced by 1 to the top left + * Layer 2: TODO -- currently kept as in the default ErgoDox EZ layout + * Leds: + * - left (1st) & middle (2nd) leds are used to indicate layers 1 & 2 respectively + * - right (3rd) led is used to indicate caps-lock + */ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" From 38a0e62a10fcbb4b96f8f69d4fc69872d2d3a7ed Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 9 Jan 2016 00:55:54 +0100 Subject: [PATCH 07/19] Layer 1: restore backspace, ralt and ctl on right hand - home replaced by KC_TRNS to make backspace available - prev/next moved left to space to restore ralt - arrows moved down to have reversed T-shape - added ctl on bottom right KpEnter, to match layer 0 - removed alt from mute, as it was already no more in layer 0 --- .../ergodox_ez/keymaps/keymap_typematrix.c | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index de864ddf..8e442e3c 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -80,20 +80,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 |Insert| |Insert| F6 | F7 | Tab | / | * | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | F8 | F9 | F10 | F11 | F12 |VolUp | | Home | Up | End | 7 | 8 | 9 | + | + * | | F8 | F9 | F10 | F11 | F12 |VolUp | | | | Home | 7 | 8 | 9 | + | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| Down | Right| 4 | 5 | 6 | + | - * |--------+------+------+------+------+------|VolDn | | Left |------+------+------+------+------+--------| - * | | | cut | copy |paste | Mute | | | | | Prev | 1 | 2 | 3 |KpEnter | + * | | | | | | |------| |------| Up | End | 4 | 5 | 6 | + | + * |--------+------+------+------+------+------|VolDn | | |------+------+------+------+------+--------| + * | | | cut | copy |paste | Mute | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | Next | 0 | 00 | . |KpEnter| + * | | | | | | | | 0 | 00 | . |Etr/Ctl| * `----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. - * | Mute | | | | | | | - * | / | |------| |------| | | - * | Alt | | | | | | | + * | | | | | Next | | | + * | Mute | |------| |------| | | + * | | | | | Prev | | | * `--------------------' `--------------------' */ // SYMBOLS @@ -107,17 +107,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS,KC_TRNS, KC_TRNS, - ALT_T(KC_MUTE),KC_TRNS,KC_TRNS, + KC_MUTE, KC_TRNS,KC_TRNS, // right hand KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, - KC_HOME, KC_UP, KC_END, KC_P7, KC_P8, KC_P9, KC_PPLS, - KC_DOWN, KC_RGHT, KC_P4, KC_P5, KC_P6, KC_PPLS, - KC_LEFT, KC_TRNS, KC_MPRV, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_MNXT, KC_P0, M(1), KC_PDOT, KC_PENT, + KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_TRNS, KC_P0, M(1), KC_PDOT, CTL_T(KC_PENT), KC_NLCK, KC_CAPS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS + KC_MPRV, + KC_MNXT, KC_TRNS, KC_TRNS ), /* Keymap 2: Media and mouse keys * From bfda6ee41773355c413904b128b317ee7eb45569 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 9 Jan 2016 17:47:26 +0100 Subject: [PATCH 08/19] Split fn layer from numbers layer to better match the TM behaviour - removed access to layer 2 from ";" key - "fn" key toggles both layers 1 & 2 - replaced media and mouse layer by fn layer - renamed symbol layer to numbers layer - moved all F-keys together on left hand --- .../ergodox_ez/keymaps/keymap_typematrix.c | 156 +++++++++--------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 8e442e3c..5bd2f9d7 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -10,11 +10,12 @@ * - ] is moved in place of the dash (-) * - dash (-) and = are moved on bottom right row * - arrows and PgUp/PgDn are moved on the thumbs - * Layer 1: "Fn"-layer close to the TM with the following differences: - * - provides access to F1-F12 - * - VolUp & VolDn are only on left hand - * - arrows & numpad are displaced by 1 to the top left - * Layer 2: TODO -- currently kept as in the default ErgoDox EZ layout + * Layer 1: numbers layer close to the TM when toggling "num" with the following differences: + * - numpad is displaced by 1 to the top left + * - arrows are displaced by 1 to the left + * - provides access to F1-F12, caps lock and num lock + * Layer 2: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: + * - VolUp & VolDn are only on left hand to keep access to arrows on right hand * Leds: * - left (1st) & middle (2nd) leds are used to indicate layers 1 & 2 respectively * - right (3rd) led is used to indicate caps-lock @@ -25,8 +26,8 @@ #include "led.h" #define BASE 0 // default layer -#define SYMB 1 // symbols -#define MDIA 2 // media keys +#define NMBR 1 // numbers layer +#define FNLR 2 // fn layer const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -36,11 +37,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - * | LShift | A | S | D | F | G |------| |------| H | J | K | L |; / L2| '/Shift| + * | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * |LCtrl | ~L1 | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| * `-----------------------------------' `-----------------------------------' * ,--------------. ,-------------. * |Esc/Alt| L1 | | Left |Right | @@ -58,56 +59,56 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, - KC_LCTL, KC_FN1, KC_LGUI,KC_MPLY,ALT_T(KC_APP), + KC_LCTL, M(2), KC_LGUI,KC_MPLY,ALT_T(KC_APP), ALT_T(KC_ESC), TG(1), KC_PGUP, KC_SPC, KC_SPC, KC_PGDN, // right hand - KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, - KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, - KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),SFT_T(KC_QUOT), - KC_ENT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, SFT_T(KC_BSLS), - KC_RALT,KC_MINS,KC_HOME,KC_EQL, CTL_T(KC_END), + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, + KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, SFT_T(KC_QUOT), + KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_BSLS), + KC_RALT, KC_MINS, KC_HOME, KC_EQL, CTL_T(KC_END), KC_LEFT, KC_RGHT, KC_UP, KC_DOWN, KC_SPC, KC_SPC ), -/* Keymap 1: Symbol Layer +/* Keymap 1: Numbers Layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 |Insert| |Insert| F6 | F7 | Tab | / | * | - | + * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | F8 | F9 | F10 | F11 | F12 |VolUp | | | | Home | 7 | 8 | 9 | + | + * | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| Up | End | 4 | 5 | 6 | + | - * |--------+------+------+------+------+------|VolDn | | |------+------+------+------+------+--------| - * | | | cut | copy |paste | Mute | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | + * | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | 0 | 00 | . |Etr/Ctl| * `----------------------------------' `-----------------------------------' * ,-------------. ,-------------. * | | | |n.lock|c.lock| * ,------|------|------| |------+------+------. - * | | | | | Next | | | - * | Mute | |------| |------| | | - * | | | | | Prev | | | + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | * `--------------------' `--------------------' */ // SYMBOLS -[SYMB] = KEYMAP( +[NMBR] = KEYMAP( // left hand - KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_INS, - KC_TRNS,KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU, - KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS,KC_TRNS,LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS),KC_MUTE,KC_VOLD, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, - KC_MUTE, KC_TRNS,KC_TRNS, + KC_TRNS, KC_TRNS,KC_TRNS, // right hand KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS, @@ -116,73 +117,77 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_P0, M(1), KC_PDOT, CTL_T(KC_PENT), KC_NLCK, KC_CAPS, - KC_MPRV, - KC_MNXT, KC_TRNS, KC_TRNS + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: Media and mouse keys +/* Keymap 2: fn layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | | | | | | | | | | | + * | | | | | | |Insert| |Insert| | | | | | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | MsUp | | | | | | | | | | | | + * | | | | | | |VolUp | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | + * | | | | | | |------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | | | | | | | Prev | Next | | | + * | | | cut | copy |paste | Mute |VolDn | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | + * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. * | | | | | | * ,------|------|------| |------+------+------. - * | | | | | | |Brwser| - * | | |------| |------| |Back | - * | | | | | | | | + * | | | | | Next | | | + * | Mute | |------| |------| | | + * | | | | | Prev | | | * `--------------------' `--------------------' */ // MEDIA AND MOUSE -KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, +[FNLR] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, + KC_MUTE, KC_TRNS, KC_TRNS, // right hand + KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, - KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, - KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_WBAK + KC_MPRV, + KC_MNXT, KC_TRNS, KC_TRNS ), }; const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { + switch(id) { case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } break; case 1: - if (record->event.pressed) { - return MACRO( I(25), T(P0), T(P0), END ); - } + if (record->event.pressed) { + return MACRO( I(25), T(P0), T(P0), END ); + } break; - } + case 2: + layer_state ^= (1 << NMBR) | (1 << FNLR); + break; + } return MACRO_NONE; }; @@ -194,24 +199,19 @@ void * matrix_init_user(void) { // Runs constantly in the background, in a loop. void * matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); - ergodox_board_led_off(); ergodox_right_led_1_off(); ergodox_right_led_2_off(); ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - default: - // none - break; + // led 1: numbers layer + if (layer_state & (1 << NMBR)) { + ergodox_right_led_1_on(); + } + // led 2: fn layer + if (layer_state & (1 << FNLR)) { + ergodox_right_led_2_on(); } + // led 3: caps lock if (host_keyboard_leds() & (1< Date: Sun, 10 Jan 2016 19:15:33 +0100 Subject: [PATCH 09/19] Added fn-eject, fn-power .. fn-pause keys Eject does not work though, see jackhumbert/qmk_firmware#82 and tmk/tmk_keyboard#250 --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 5bd2f9d7..6151b362 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -123,9 +123,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 2: fn layer * * ,--------------------------------------------------. ,--------------------------------------------------. - * | | | | | | |Insert| |Insert| | | | | | | + * | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | |VolUp | | | | | | | | | + * | | | | | | |VolUp | | | | | | | | Pause | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | |------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -153,8 +153,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, // right hand - KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_INS, KC_EJCT, KC_PWR, KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, From d3e4cc9af66630906f023cf83f1df46b065435a5 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 10 Jan 2016 19:49:08 +0100 Subject: [PATCH 10/19] Implement cut/copy/paste as macros Workaround for jackhumbert/qmk_firmware#81 + added macro names + removed unused macro 0 --- .../ergodox_ez/keymaps/keymap_typematrix.c | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 6151b362..7161a638 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -29,6 +29,12 @@ #define NMBR 1 // numbers layer #define FNLR 2 // fn layer +#define MDBL0 1 +#define MFNLR 2 +#define MCUT 3 +#define MCOPY 4 +#define MPSTE 5 + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer * @@ -59,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC, KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, - KC_LCTL, M(2), KC_LGUI,KC_MPLY,ALT_T(KC_APP), + KC_LCTL, M(MFNLR), KC_LGUI,KC_MPLY,ALT_T(KC_APP), ALT_T(KC_ESC), TG(1), KC_PGUP, @@ -114,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT, - KC_TRNS, KC_P0, M(1), KC_PDOT, CTL_T(KC_PENT), + KC_TRNS, KC_P0, M(MDBL0),KC_PDOT, CTL_T(KC_PENT), KC_NLCK, KC_CAPS, KC_TRNS, @@ -146,7 +152,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD, + KC_TRNS, KC_TRNS, M(MCUT), M(MCOPY), M(MPSTE), KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -172,21 +178,29 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; - case 1: + case MDBL0: if (record->event.pressed) { return MACRO( I(25), T(P0), T(P0), END ); } break; - case 2: + case MFNLR: layer_state ^= (1 << NMBR) | (1 << FNLR); break; + case MCUT: + if (record->event.pressed) { + return MACRO(D(LSFT), T(DELT), U(LSFT), END); + } + break; + case MCOPY: + if (record->event.pressed) { + return MACRO(D(LCTL), T(INS), U(LCTL), END); + } + break; + case MPSTE: + if (record->event.pressed) { + return MACRO(D(LSFT), T(INS), U(LSFT), END); + } + break; } return MACRO_NONE; }; From 93e350caa1f5ce704741a18e6e3106787b574406 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 16 Jan 2016 00:38:13 +0100 Subject: [PATCH 11/19] Added shifts on the thumbs --- keyboard/ergodox_ez/keymaps/keymap_typematrix.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 7161a638..04d91b45 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Esc/Alt| L1 | | Left |Right | * ,------+-------+------| |------+------+------. * | | | PgUp | | Up | | | - * |Space | Space |------| |------|Space |Space | + * |Space |LShift |------| |------|RShift|Space | * | | | PgDn | | Down | | | * `---------------------' `--------------------' */ @@ -69,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ALT_T(KC_ESC), TG(1), KC_PGUP, - KC_SPC, KC_SPC, KC_PGDN, + KC_SPC, KC_LSFT, KC_PGDN, // right hand KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, @@ -80,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_RGHT, KC_UP, - KC_DOWN, KC_SPC, KC_SPC + KC_DOWN, KC_RSFT, KC_SPC ), /* Keymap 1: Numbers Layer * From fb181304083b884c60a30f64a634b592479aed6d Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 16 Jan 2016 01:35:28 +0100 Subject: [PATCH 12/19] Implemented Dvorak layer --- .../ergodox_ez/keymaps/keymap_typematrix.c | 76 +++++++++++++++---- 1 file changed, 63 insertions(+), 13 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c index 04d91b45..931170c3 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c +++ b/keyboard/ergodox_ez/keymaps/keymap_typematrix.c @@ -10,14 +10,17 @@ * - ] is moved in place of the dash (-) * - dash (-) and = are moved on bottom right row * - arrows and PgUp/PgDn are moved on the thumbs - * Layer 1: numbers layer close to the TM when toggling "num" with the following differences: + * Layer 1: same as Layer 0 but with Dvorak layout, to use with QWERTY OS layout. + * Enable Dvorak layout with Magic-1 (LShift-RShift-1), disable with Magic-0. + * Layer 8: numbers layer close to the TM when toggling "num" with the following differences: * - numpad is displaced by 1 to the top left * - arrows are displaced by 1 to the left * - provides access to F1-F12, caps lock and num lock - * Layer 2: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: + * Layer 9: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: * - VolUp & VolDn are only on left hand to keep access to arrows on right hand - * Leds: - * - left (1st) & middle (2nd) leds are used to indicate layers 1 & 2 respectively + * LEDs: + * - left (1st) led is used to indicate the numbers layer + * - middle (2nd) led is used to indicate Dvorak layout * - right (3rd) led is used to indicate caps-lock */ #include "ergodox_ez.h" @@ -26,8 +29,9 @@ #include "led.h" #define BASE 0 // default layer -#define NMBR 1 // numbers layer -#define FNLR 2 // fn layer +#define DVRK 1 // Dvorak layer +#define NMBR 8 // numbers layer +#define FNLR 9 // fn layer #define MDBL0 1 #define MFNLR 2 @@ -36,7 +40,7 @@ #define MPSTE 5 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Keymap 0: Basic layer +/* Basic layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | @@ -50,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| * `-----------------------------------' `-----------------------------------' * ,--------------. ,-------------. - * |Esc/Alt| L1 | | Left |Right | + * |Esc/Alt| num | | Left |Right | * ,------+-------+------| |------+------+------. * | | | PgUp | | Up | | | * |Space |LShift |------| |------|RShift|Space | @@ -67,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_LCTL, M(MFNLR), KC_LGUI,KC_MPLY,ALT_T(KC_APP), - ALT_T(KC_ESC), TG(1), + ALT_T(KC_ESC), TG(NMBR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, @@ -82,7 +86,53 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN, KC_RSFT, KC_SPC ), -/* Keymap 1: Numbers Layer +/* Dvorak layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | = | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Tab | ' | , | . | P | Y |Backsp| |Backsp| F | G | C | R | L | / | + * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + * | LShift | A | O | E | U | I |------| |------| D | H | T | N | S | -/Shift| + * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | \/Shift| + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |LCtrl | fn | LGui | Play |App/Alt| | RAlt | [ | Home | ] |End/Ctl| + * `-----------------------------------' `-----------------------------------' + * ,--------------. ,-------------. + * |Esc/Alt| num | | Left |Right | + * ,------+-------+------| |------+------+------. + * | | | PgUp | | Up | | | + * |Space |LShift |------| |------|RShift|Space | + * | | | PgDn | | Down | | | + * `---------------------' `--------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[DVRK] = KEYMAP( // layer 0 : default + // left hand + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BSPC, + KC_LSFT, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ENT, + KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), + + ALT_T(KC_ESC), TG(NMBR), + KC_PGUP, + KC_SPC, KC_LSFT, KC_PGDN, + + // right hand + KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + KC_BSPC, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, + KC_D, KC_H, KC_T, KC_N, KC_S, SFT_T(KC_MINS), + KC_ENT, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_BSLS), + KC_RALT, KC_LBRC, KC_HOME, KC_RBRC, CTL_T(KC_END), + + KC_LEFT, KC_RGHT, + KC_UP, + KC_DOWN, KC_RSFT, KC_SPC + ), +/* Numbers Layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | @@ -126,7 +176,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -/* Keymap 2: fn layer +/* fn layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| @@ -221,8 +271,8 @@ void * matrix_scan_user(void) { if (layer_state & (1 << NMBR)) { ergodox_right_led_1_on(); } - // led 2: fn layer - if (layer_state & (1 << FNLR)) { + // led 2: Dvorak layer + if (default_layer_state == 1 << DVRK) { ergodox_right_led_2_on(); } // led 3: caps lock From e5f84058bb6884e0c2d024a1f2e64436395cbd60 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 16:59:33 +0100 Subject: [PATCH 13/19] Implemented new folders structure. moved keymap_typematrix.c to tm2030/keymap.c --- .../ergodox_ez/keymaps/{keymap_typematrix.c => tm2030/keymap.c} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename keyboard/ergodox_ez/keymaps/{keymap_typematrix.c => tm2030/keymap.c} (100%) diff --git a/keyboard/ergodox_ez/keymaps/keymap_typematrix.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c similarity index 100% rename from keyboard/ergodox_ez/keymaps/keymap_typematrix.c rename to keyboard/ergodox_ez/keymaps/tm2030/keymap.c From 67583b2f4aeceb5cdbfd32055a6c4fc4436effe7 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 18:04:45 +0100 Subject: [PATCH 14/19] Renamed "Numbers Layer" to "Numeric Layer" --- keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 931170c3..31005b64 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -12,14 +12,14 @@ * - arrows and PgUp/PgDn are moved on the thumbs * Layer 1: same as Layer 0 but with Dvorak layout, to use with QWERTY OS layout. * Enable Dvorak layout with Magic-1 (LShift-RShift-1), disable with Magic-0. - * Layer 8: numbers layer close to the TM when toggling "num" with the following differences: + * Layer 8: numeric layer close to the TM when toggling "num" with the following differences: * - numpad is displaced by 1 to the top left * - arrows are displaced by 1 to the left * - provides access to F1-F12, caps lock and num lock * Layer 9: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: * - VolUp & VolDn are only on left hand to keep access to arrows on right hand * LEDs: - * - left (1st) led is used to indicate the numbers layer + * - left (1st) led is used to indicate the numeric layer * - middle (2nd) led is used to indicate Dvorak layout * - right (3rd) led is used to indicate caps-lock */ @@ -30,7 +30,7 @@ #define BASE 0 // default layer #define DVRK 1 // Dvorak layer -#define NMBR 8 // numbers layer +#define NUMR 8 // numeric layer #define FNLR 9 // fn layer #define MDBL0 1 @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_LCTL, M(MFNLR), KC_LGUI,KC_MPLY,ALT_T(KC_APP), - ALT_T(KC_ESC), TG(NMBR), + ALT_T(KC_ESC), TG(NUMR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, @@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ENT, KC_LCTL, M(MFNLR), KC_LGUI, KC_MPLY, ALT_T(KC_APP), - ALT_T(KC_ESC), TG(NMBR), + ALT_T(KC_ESC), TG(NUMR), KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN, @@ -132,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_UP, KC_DOWN, KC_RSFT, KC_SPC ), -/* Numbers Layer +/* Numeric Layer * * ,--------------------------------------------------. ,--------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | @@ -154,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `--------------------' `--------------------' */ // SYMBOLS -[NMBR] = KEYMAP( +[NUMR] = KEYMAP( // left hand KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, @@ -234,7 +234,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; case MFNLR: - layer_state ^= (1 << NMBR) | (1 << FNLR); + layer_state ^= (1 << NUMR) | (1 << FNLR); break; case MCUT: if (record->event.pressed) { @@ -267,8 +267,8 @@ void * matrix_scan_user(void) { ergodox_right_led_1_off(); ergodox_right_led_2_off(); ergodox_right_led_3_off(); - // led 1: numbers layer - if (layer_state & (1 << NMBR)) { + // led 1: numeric layer + if (layer_state & (1 << NUMR)) { ergodox_right_led_1_on(); } // led 2: Dvorak layer From 96b9089d9f4237c2d4e4760181628fc96c4f93b6 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 18:15:21 +0100 Subject: [PATCH 15/19] Added Calculator, Mail and Browser Home application keys. --- keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 31005b64..00d6a4bf 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -2,7 +2,7 @@ * --------------------------- * Currently supported features: * Layer 0: default layer close to the TM with the following differences: - * - top row and rightmost column are removed, corresponding keys are displaced, except app-keys which are removed + * - top row and rightmost column are removed, corresponding keys are displaced * - bottom-left keys are reorganized on a single roz as: Ctrl, "Fn", Gui, Play, App/Alt * - "shuffle" and "desktop" are not supported * - right-shift is moved on ' and \ @@ -183,7 +183,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | | | |VolUp | | | | | | | | Pause | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | | | | | |------| |------| | | | | | | + * | | | | Calc | Mail |Browsr|------| |------| | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | cut | copy |paste | Mute |VolDn | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -201,7 +201,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [FNLR] = KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, KC_TRNS, KC_TRNS, M(MCUT), M(MCOPY), M(MPSTE), KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, From 294bd256150e381d3eac619a6eab1877eb95728f Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 18:52:16 +0100 Subject: [PATCH 16/19] Moved layout description to README.md and added more details --- keyboard/ergodox_ez/keymaps/tm2030/README.md | 133 +++++++++++++++++++ keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 26 +--- 2 files changed, 134 insertions(+), 25 deletions(-) create mode 100644 keyboard/ergodox_ez/keymaps/tm2030/README.md diff --git a/keyboard/ergodox_ez/keymaps/tm2030/README.md b/keyboard/ergodox_ez/keymaps/tm2030/README.md new file mode 100644 index 00000000..55942709 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/tm2030/README.md @@ -0,0 +1,133 @@ +# TypeMatrix™ 2030 inspired layout + +This is a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ. The _TypeMatrix_ is a nice small ergonomic keyboard with a matrix layout, and it provides several nice features like `enter`, `backspace` and `delete` at the center, bigger `shift` keys and international `cut`, `copy` and `paste` keys. + +The idea in this ErgoDox layout is to make it is as close as possible to the TM2030, such that it would be easy to switch between the TM and the ErgoDox. No _fancy_ features have been implemented, as this is intended to be a base for further customization if desired. Some keys have been duplicated in order to accomodate for most people. + +Most of the TM2030 features are supported except +* automatic window switching (alt-tab key, at the left of the space key) +* show desktop key (at the right of the space key) +* 102/106 modes + +Dvorak mode is even supported by pressing [`Magic`](/TMK_README.md#magic-commands)+`1` (`Magic` is by default `LShift`+`RShift`) + +Some keys had to be moved around to fit into the ErgoDox, especially the `F1`-`F12` keys and the arrow keys. + +## Base Layer +This is the default layer, close to the TM with the following differences: +- Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere. +- Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`. +- `shuffle` and `desktop` are not supported. +- `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination). +- `right-ctrl` is moved on `End`. +- `]` is moved in place of the dash (`-`). +- Dash (`-`) and `=` are moved on bottom right row. +- Arrows and `PgUp`/`PgDn` are moved on the thumbs. + + ,--------------------------------------------------. ,--------------------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | + |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| + |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + `-----------------------------------' `-----------------------------------' + ,--------------. ,-------------. + |Esc/Alt| num | | Left |Right | + ,------+-------+------| |------+------+------. + | | | PgUp | | Up | | | + |Space |LShift |------| |------|RShift|Space | + | | | PgDn | | Down | | | + `---------------------' `--------------------' + + +### Layer Switching +- Use `num` to toggle the Numeric Layer. +- Hold `fn` to temporarily activate the Numeric & Fn Layers +As on the original TM 2030, when `num` layer is activated, holding `fn` disables it but enables the other `fn` keys. + +## Dvorak Layer +Same as Layer 0 but with _Dvorak_ layout, to use with QWERTY OS layout. + +Enable Dvorak layout with [`Magic`](/TMK_README.md#magic-commands+`1` (`LShift`+`RShift`+`1`), disable with `Magic`-`0`. + +The middle (green) led indicates when the Dvorak layer is activated. + + ,--------------------------------------------------. ,--------------------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | = | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | Tab | ' | , | . | P | Y |Backsp| |Backsp| F | G | C | R | L | / | + |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| + | LShift | A | O | E | U | I |------| |------| D | H | T | N | S | -/Shift| + |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| + | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | \/Shift| + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | fn | LGui | Play |App/Alt| | RAlt | [ | Home | ] |End/Ctl| + `-----------------------------------' `-----------------------------------' + ,--------------. ,-------------. + |Esc/Alt| num | | Left |Right | + ,------+-------+------| |------+------+------. + | | | PgUp | | Up | | | + |Space |LShift |------| |------|RShift|Space | + | | | PgDn | | Down | | | + `---------------------' `--------------------' + +## Numeric Layer +Numeric layer close to the TM when toggling `num`, with the following differences: + +- Numpad is displaced by 1 to the top left. +- Arrows are displaced by 1 to the left. +- Provides access to `F1`-`F12`, `caps-lock` and `num-lock`. + +The numeric layer is indicated with the left (red) led. Caps-lock is indicated with the right (blue) led. + + ,--------------------------------------------------. ,--------------------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - | + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | 0 | 00 | . |Etr/Ctl| + `----------------------------------' `-----------------------------------' + ,-------------. ,-------------. + | | | |n.lock|c.lock| + ,------|------|------| |------+------+------. + | | | | | | | | + | | |------| |------| | | + | | | | | | | | + `--------------------' `--------------------' + +## Fn Layer +Activated simultaneously with the Numeric layer when holding the `fn` key. As on the TM, it provides access to the following features: +- `cut`, `copy` and `paste` +- `volume up`, `volume down` and `mute` — as opposed to the TM, these are only on left hand +- `previous track` and `next track` +- `calculator`, `mail` and `browser home` +- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` and `pause` + +Note: the `eject` key does not work due to jackhumbert/qmk_firmware#82 + + ,--------------------------------------------------. ,--------------------------------------------------. + | | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk| + |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + | | | | | | |VolUp | | | | | | | | Pause | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | | | | |------| |------| | | | | | | + |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + | | | cut | copy |paste | Mute |VolDn | | | | | | | | | + `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + | | | | | | | | | | | | + `----------------------------------' `----------------------------------' + ,-------------. ,-------------. + | | | | | | + ,------|------|------| |------+------+------. + | | | | | Next | | | + | Mute | |------| |------| | | + | | | | | Prev | | | + `--------------------' `--------------------' diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 00d6a4bf..cbdf0ae0 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -1,28 +1,4 @@ -/* TypeMatrix-2030-like keymap - * --------------------------- - * Currently supported features: - * Layer 0: default layer close to the TM with the following differences: - * - top row and rightmost column are removed, corresponding keys are displaced - * - bottom-left keys are reorganized on a single roz as: Ctrl, "Fn", Gui, Play, App/Alt - * - "shuffle" and "desktop" are not supported - * - right-shift is moved on ' and \ - * - right-ctrl is moved on End - * - ] is moved in place of the dash (-) - * - dash (-) and = are moved on bottom right row - * - arrows and PgUp/PgDn are moved on the thumbs - * Layer 1: same as Layer 0 but with Dvorak layout, to use with QWERTY OS layout. - * Enable Dvorak layout with Magic-1 (LShift-RShift-1), disable with Magic-0. - * Layer 8: numeric layer close to the TM when toggling "num" with the following differences: - * - numpad is displaced by 1 to the top left - * - arrows are displaced by 1 to the left - * - provides access to F1-F12, caps lock and num lock - * Layer 9: "fn" layer ("fn" key toggles both layers 1 & 2) with the following differences: - * - VolUp & VolDn are only on left hand to keep access to arrows on right hand - * LEDs: - * - left (1st) led is used to indicate the numeric layer - * - middle (2nd) led is used to indicate Dvorak layout - * - right (3rd) led is used to indicate caps-lock - */ +/* TypeMatrix-2030-like keymap */ #include "ergodox_ez.h" #include "debug.h" #include "action_layer.h" From b0d7d9d922ea5b432fcbb499df0881a2e80d5092 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sat, 23 Jan 2016 18:59:06 +0100 Subject: [PATCH 17/19] Added keymap.hex --- keyboard/ergodox_ez/keymaps/tm2030/keymap.hex | 1544 +++++++++++++++++ 1 file changed, 1544 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/tm2030/keymap.hex diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex b/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex new file mode 100644 index 00000000..7e1118e3 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex @@ -0,0 +1,1544 @@ +:100000000C9462090C94A6090C94A6090C94A609F8 +:100010000C94A6090C94A6090C94A6090C94A609A4 +:100020000C94A6090C94A6090C94F4140C94C6150F +:100030000C94A6090C94A6090C94A6090C94A60984 +:100040000C94A6090C94472E0C94A6090C94A609AE +:100050000C94A6090C944E240C94A6090C94A609A1 +:100060000C94A6090C94A6090C94A6090C94A60954 +:100070000C94A6090C94A6090C94A6090C94A60944 +:100080000C94A6090C94A6090C94A6090C94A60934 +:100090000C94A6090C94A6090C94A6090C94A60924 +:1000A0000C94A6090C94A6090C94A6092B164D16BF +:1000B00038174D1638178F16B216381707171A1734 +:1000C000681A681A961A961AD81A141B141D141D49 +:1000D0002C1B141D231C231CEE1C141D141D021D9F +:1000E00001E10149024902E10001E001490249023E +:1000F000E00001E1014C024C02E1007519016202CD +:1001000062016202620035002B00E100E100E000C4 +:1001100000001E00140004001D0002304E001F00ED +:100120001A0016001B00E300E10020000800070091 +:100130000600AE002C0021001500090019006574AE +:100140004B00220017000A000500000029744C0033 +:100150002A0000002800000008544C002A0000007B +:1001600028000000500023001C000B0011000000BC +:100170004F00240018000D001000E600520025007A +:100180000C000E0036002D002C00260012000F007F +:1001900037004A00E50027001300330038002E0026 +:1001A000510030002F00347231724D710000350063 +:1001B0002B00E100E100E00000001E00340004001C +:1001C000330002304E001F00360012001400E3001E +:1001D000E1002000370008000D00AE002C002100D7 +:1001E000130018000E0065744B0022001C000C0068 +:1001F0001B00000029744C002A00000028000000A9 +:1002000008544C002A000000280000005000230081 +:1002100009000700050000004F0024000A000B0041 +:100220001000E60052002500060017001A002F00FB +:100230002C0026001500110019004A00E5002700D7 +:100240000F0016001D00300051002E0038002D72E6 +:1002500031724D710000000000000000000000003D +:10026000000000000000000000000000000000008E +:10027000000000000000000000000000000000007E +:10028000000000000000000000000000000000006E +:10029000000000000000000000000000000000005E +:1002A000000000000000000000000000000000004E +:1002B000000000000000000000000000000000003E +:1002C000000000000000000000000000000000002E +:1002D000000000000000000000000000000000001E +:1002E000000000000000000000000000000000000E +:1002F00000000000000000000000000000000000FE +:1003000000000000000000000000000000000000ED +:1003100000000000000000000000000000000000DD +:1003200000000000000000000000000000000000CD +:1003300000000000000000000000000000000000BD +:1003400000000000000000000000000000000000AD +:10035000000000000000000000000000000000009D +:10036000000000000000000000000000000000008D +:10037000000000000000000000000000000000007D +:10038000000000000000000000000000000000006D +:10039000000000000000000000000000000000005D +:1003A000000000000000000000000000000000004D +:1003B000000000000000000000000000000000003D +:1003C000000000000000000000000000000000002D +:1003D000000000000000000000000000000000001D +:1003E000000000000000000000000000000000000D +:1003F00000000000000000000000000000000000FD +:1004000000000000000000000000000000000000EC +:1004100000000000000000000000000000000000DC +:1004200000000000000000000000000000000000CC +:1004300000000000000000000000000000000000BC +:1004400000000000000000000000000000000000AC +:10045000000000000000000000000000000000009C +:10046000000000000000000000000000000000008C +:10047000000000000000000000000000000000007C +:10048000000000000000000000000000000000006C +:10049000000000000000000000000000000000005C +:1004A000000000000000000000000000000000004C +:1004B000000000000000000000000000000000003C +:1004C000000000000000000000000000000000002C +:1004D000000000000000000000000000000000001C +:1004E000000000000000000000000000000000000C +:1004F00000000000000000000000000000000000FC +:1005000000000000000000000000000000000000EB +:1005100000000000000000000000000000000000DB +:1005200000000000000000000000000000000000CB +:1005300000000000000000000000000000000000BB +:1005400000000000000000000000000000000000AB +:10055000000000000000000000000000000000009B +:10056000000000000000000000000000000000008B +:10057000000000000000000000000000000000007B +:10058000000000000000000000000000000000006B +:10059000000000000000000000000000000000005B +:1005A000000000000000000000000000000000004B +:1005B000000000000000000000000000000000003B +:1005C000000000000000000000000000000000002B +:1005D000000000000000000000000000000000001B +:1005E000000000000000000000000000000000000B +:1005F00000000000000000000000000000000000FB +:1006000000000000000000000000000000000000EA +:1006100000000000000000000000000000000000DA +:1006200000000000000000000000000000000000CA +:1006300000000000000000000000000000000000BA +:1006400000000000000001000100010001000100A5 +:1006500000003A003F0044000100010001003B009F +:10066000400045000100010001003C004100010084 +:100670000100010001003D004200010001000100F5 +:1006800001003E00430001000100000001000100E4 +:10069000010000000100000001004900010000000D +:1006A0005000000053003F000100520051000000C4 +:1006B000390040004A004D004F00010001002B00AE +:1006C0005F005C00590062000100540060005D00A2 +:1006D0005A0001300100550061005E005B006300BC +:1006E00001005600570057005800587100000100E3 +:1006F00001000100010001000000010001000100F3 +:1007000001000100010001000100010003300100AF +:10071000010001000100B20004300100A800010046 +:100720000100B10005300100010001000100B50029 +:10073000A800000001004900A9000000AA00000074 +:100740000100490001000000010000000100B000AC +:1007500001000100010000000100A50001000100EE +:1007600001000100AC00A600010001000100010031 +:100770000100A70001000100010001000100460086 +:100780000100010001000100AB004700480001002A +:100790000100010000000A002530313662003A20D5 +:1007A0000025303258000A722F6320303132333442 +:1007B00035363738394142434445460A000A002558 +:1007C00030325800626F756E6365213A20006C65A7 +:1007D000667420736964652061747461636865641C +:1007E0000A006C6566742073696465206E6F7420FE +:1007F000726573706F6E64696E670A0074727969EE +:100800006E6720746F207265736574206D6370323B +:10081000333031380A000A44454255473A20656E64 +:1008200061626C65642E0A005B735D004B657962E2 +:100830006F6172642073746172742E0A005B575D7D +:10084000005B535D005B525D005B445D005B435D9C +:100850000016034500720067006F0044006F0078C7 +:1008600000200045005A0000001603450072006792 +:10087000006F0044006F007800200045005A00001F +:10088000000403090409028D00050100A0FA09040F +:1008900000000103010100092111010001223F00B4 +:1008A0000705810308000A09040100010301020091 +:1008B000092111010001224D000705820308000AE9 +:1008C00009040200010300000009211101000122B6 +:1008D00036000705830308000A0904030002030029 +:1008E00000000921110100012220000705840320D6 +:1008F00000010705040320000109040400010300AE +:1009000000000921110100012239000705850310AB +:1009100000011201100100000008EDFE07130100A4 +:100920000102000105010906A101050719E029E7F7 +:100930001500250195087501810205081901290591 +:10094000950575019102950175039101050719003F +:10095000297715002501957875018102C00631FFC0 +:100960000974A1010975150025FF952075088102FC +:100970000976150025FF952075089102C00501092B +:1009800080A101850216010026B7001A01002AB7CE +:1009900000751095018100C0050C0901A1018503B6 +:1009A000160100269C021A01002A9C02751095016E +:1009B0008100C005010902A1010901A10005091971 +:1009C000012905150025019505750181029501751F +:1009D0000381010501093009311581257F950275D3 +:1009E00008810609381581257F950175088106055E +:1009F0000C0A38021581257F950175088106C0C053 +:100A000005010906A101050719E029E715002501DF +:100A10009508750181029501750881010508190184 +:100A20002905950575019102950175039101050749 +:100A3000190029FF150025FF950675088100C00AD9 +:100A4000002530325820006B6579626F6172645FF7 +:100A50007265706F72743A20000A002530325800B7 +:100A60006B6579626F6172645F7365745F6C6564F6 +:100A70003A200064656C5F6B65795F6269743A2047 +:100A800063616E27742064656C3A20253032580A01 +:100A9000006164645F6B65795F6269743A206361C9 +:100AA0006E2774206164643A20253032580A00644D +:100AB0006F6E652E0A00626F6F676D6167696320F4 +:100AC0007363616E3A202E2E2E2000290A002575B0 +:100AD000002F002575005D28002564002000256496 +:100AE00000200025640020002564007C00253032B1 +:100AF00058006D6F7573656B6579205B62746E7CF1 +:100B0000782079207620685D287265702F61636C8B +:100B1000293A205B006D6B5F776865656C5F74696F +:100B20006D655F746F5F6D6178203D2025640A00FC +:100B30006D6B5F776865656C5F6D61785F7370651D +:100B40006564203D2025640A006D6B5F74696D65E6 +:100B50005F746F5F6D6178203D2025640A006D6BC6 +:100B60005F6D61785F7370656564203D2025640A60 +:100B7000006D6B5F696E74657276616C203D202537 +:100B8000640A006D6B5F64656C6179203D202564AB +:100B90000A006D6B5F776865656C5F74696D655F92 +:100BA000746F5F6D6178203D2025640A006D6B5F76 +:100BB000776865656C5F6D61785F737065656420EB +:100BC0003D2025640A006D6B5F74696D655F746F0D +:100BD0005F6D6178203D2025640A006D6B5F6D615B +:100BE000785F7370656564203D2025640A006D6B35 +:100BF0005F696E74657276616C203D2025640A0021 +:100C00006D6B5F64656C6179203D2025640A000A84 +:100C100000257500363A20776865656C5F74696DEC +:100C2000655F746F5F6D61783A20000A002575007A +:100C3000353A20776865656C5F6D61785F737065C4 +:100C400065643A20000A00257500343A2074696D05 +:100C5000655F746F5F6D61783A20000A002575004A +:100C6000333A206D61785F73706565643A20000ADD +:100C700000257500323A20696E74657276616C28C1 +:100C80006D73293A20000A00257500313A20646509 +:100C90006C6179282A31306D73293A20000A092DB8 +:100CA0002056616C756573202D0A004D3E004D2560 +:100CB000643E20003F007365742064656661756C56 +:100CC000740A00433E200077686572652064656C95 +:100CD00074613A20637572736F723D25642C2077BE +:100CE0006865656C3D25640A536565206874747099 +:100CF0003A2F2F656E2E77696B6970656469612E76 +:100D00006F72672F77696B692F4D6F7573655F6BB6 +:100D10006579730A000A092D204D6F7573656B653F +:100D200079202D0A4553432F713A09717569740A68 +:100D3000313A0964656C6179282A31306D73290A6A +:100D4000323A09696E74657276616C286D73290A8E +:100D5000333A096D61785F73706565640A343A09E6 +:100D600074696D655F746F5F6D61780A353A0977F4 +:100D70006865656C5F6D61785F73706565640A3680 +:100D80003A09776865656C5F74696D655F746F5F5C +:100D90006D61780A0A703A097072696E7420766122 +:100DA0006C7565730A643A097365742064656661DD +:100DB000756C74730A75703A092B310A646F776E1B +:100DC0003A092D310A706775703A092B31300A7073 +:100DD00067646F776E3A092D31300A0A7370656562 +:100DE00064203D2064656C7461202A206D61785F09 +:100DF0007370656564202A202872657065617420AF +:100E00002F2074696D655F746F5F6D6178290A00CA +:100E10003F004D3E2000433E20004C25640A000A5E +:100E2000092D20436F6E736F6C65202D0A45534367 +:100E30002F713A09717569740A6D3A096D6F75738E +:100E4000656B65790A000A092D204D616769632089 +:100E50002D0A643A0964656275670A783A0964651F +:100E6000627567206D61747269780A6B3A0964650E +:100E7000627567206B6579626F6172640A6D3A0909 +:100E80006465627567206D6F7573650A763A0976D9 +:100E9000657273696F6E0A733A097374617475735E +:100EA0000A633A09636F6E736F6C65206D6F6465DA +:100EB0000A302D343A096C61796572302D34284638 +:100EC00031302D4634290A506175733A09626F6FCB +:100ED000746C6F616465720A653A09656570726F5A +:100EE0006D0A6E3A094E4B524F0A7A3A09736C6595 +:100EF0006570204C454420746573740A000A00250F +:100F000075002E6E6B726F3A20000A002575002E58 +:100F1000737761705F6261636B736C6173685F624A +:100F200061636B73706163653A20000A0025750088 +:100F30002E737761705F67726176655F6573633A80 +:100F400020000A002575002E6E6F5F6775693A20D4 +:100F5000000A002575002E737761705F72616C74F2 +:100F60005F726775693A20000A002575002E737755 +:100F700061705F6C616C745F6C6775693A20000A20 +:100F8000002575002E636170736C6F636B5F746F07 +:100F90005F636F6E74726F6C3A20000A00257500F3 +:100FA0002E737761705F636F6E74726F6C5F6361D5 +:100FB00070736C6F636B3A20000A00253032580062 +:100FC0006B65796D61705F636F6E6669672E7261C4 +:100FD000773A20000A002575002E6D6F7573653A0B +:100FE00020000A002575002E6B6579626F617264BE +:100FF0003A20000A002575002E6D61747269783AF6 +:1010000020000A002575002E656E61626C653A202D +:10101000000A00253032580064656275675F636FAF +:101020006E6669672E7261773A20000A00257500A6 +:1010300064656661756C745F6C617965723A2000F5 +:101040003F004E4B524F3A206F66660A004E4B529D +:101050004F3A206F6E0A0074696D65725F636F7539 +:101060006E743A202530346C580A006B6579626FD3 +:101070006172645F6E6B726F3A2025580A006B656F +:1010800079626F6172645F69646C653A2025580A01 +:10109000006B6579626F6172645F70726F746F6309 +:1010A0006F6C3A2025580A00686F73745F6B65791E +:1010B000626F6172645F6C65647328293A202558F9 +:1010C0000A000A092D20537461747573202D0A00DB +:1010D0004743433A20342E382E31204156522D4C6E +:1010E0004942433A20312E382E3073766E204156D5 +:1010F000525F415243483A20617672350A004F50A0 +:1011000054494F4E533A204C55464120424F4F547C +:101110004D41474943204D4F5553454B4559204577 +:10112000585452414B455920434F4E534F4C452044 +:10113000434F4D4D414E44204E4B524F203531329E +:101140000A004255494C443A2065356638343035FA +:101150002D6469727479202831373A34363A33393C +:10116000204A616E2032332032303136290A00564F +:1011700049443A20307846454544284572676F44D3 +:101180006F7820455A29205049443A20307831332D +:101190003037284572676F446F7820455A292056AA +:1011A00045523A203078303030310A0044455343BC +:1011B0003A20742E6D2E6B2E206B6579626F6172F2 +:1011C00064206669726D7761726520666F72204572 +:1011D00072676F646F780A000A092D205665727372 +:1011E000696F6E202D0A000A6D6F7573653A206F66 +:1011F00066660A000A6D6F7573653A206F6E0A00A5 +:101200000A6B6579626F6172643A206F66660A00E4 +:101210000A6B6579626F6172643A206F6E0A000A28 +:101220006D61747269783A206F66660A000A6D61B2 +:10123000747269783A206F6E0A000A646562756795 +:101240003A206F6E0A000A64656275673A206F661D +:10125000660A000A0A626F6F746C6F616465722EB1 +:101260002E2E2000433E20006565636F6E66696721 +:101270003A0A00536C656570204C454420746573D0 +:10128000740A0000000000000000000000000102DD +:1012900004060A0F17202C3A4A5D71879DB3C7DAFE +:1012A000E9F5FCFFFCF5E9DAC7B39D87715D4A3AC1 +:1012B0002C20170F0A0604020100000000000000A5 +:1012C0000000000011241FBECFEFDAE0DEBFCDBF6B +:1012D00004B603FE24C08091F9019091FA01A09117 +:1012E000FB01B091FC018730904BA740B04BB9F4A3 +:1012F0001092F9011092FA011092FB011092FC0178 +:1013000014BE84B7877F84BF88E10FB6F8948093BA +:101310006000109260000FBEE0E0FFE3099511E06D +:10132000A0E0B1E0EAE2F0E602C005900D92AA3337 +:10133000B107D9F721E0AAE3B1E001C01D92A93FAE +:10134000B207E1F70E942E120C9413300C940000A7 +:10135000FF93EF93E0913A01F0913B01309709F050 +:101360000995EF91FF910895FC018591803011F06E +:10137000EFDFFBCF0895FF27E0E230E247FF0CC02C +:10138000419597FF09C0EDE2609570958095909525 +:10139000611D711D811D911D27FF02C0219530E344 +:1013A00050E2AA27660F771F881F991FAA1FA4174C +:1013B00010F0A41B63955A95A9F7AA3008F0A95F0D +:1013C000A05DAF93F395611571058105910541F716 +:1013D000ED3211F4EF93F395F21718F43F93F39570 +:1013E000FBCF8F91B5DFFA95E1F70895E991F99177 +:1013F0008591803021F0853219F0AADFF9CF089568 +:1014000020E0E89455915532C1F3503311F46894BB +:1014100055915A3348F4505390F3220F022E220F65 +:10142000220F200D250FF4CF0EF42195899199916B +:10143000533619F3533729F1533559F1BC01882735 +:101440009927E8945C3621F4899199916894559193 +:10145000543639F446EF7EF077FF0DC08FEF9FEFE3 +:101460000AC055374AE039F0583540E121F052368C +:1014700042E009F00895FF93EF937DDFEF91FF9134 +:10148000B7CFFF93EF93FC0181918030B9F360DF18 +:10149000FBCFFF93EF9368DFF1CFDF93CF93CDB70F +:1014A000DEB72596A3DFCF91DF910895FC0163306D +:1014B00019F1B8F46130D1F0623081F58091BC014E +:1014C0009091BD01A091BE01B091BF0123E0922790 +:1014D0008093BC019093BD01A093BE01B093BF0166 +:1014E0001DC0643079F0653099F018C0828188237E +:1014F000A9F08BEF90E008958281882379F082EF44 +:1015000090E008958281882349F089EE90E0089563 +:101510008281882319F080EE90E0089580E090E0C9 +:101520000895089556985E9825982D9826982E9897 +:1015300027982F988091BC019091BD01A091BE0188 +:10154000B091BF0190FF02C0259A2D9A8091C001F1 +:101550009091C101A091C201B091C3010297A10570 +:10156000B10511F4269A2E9A0E94721781FF02C0CB +:10157000279A2F9A089582E99AE0892B11F00E9408 +:10158000920A80E090E0089556985E9825982D98EC +:1015900026982E9827982F988FEF90E090938900A7 +:1015A0008093880090938B0080938A0090938D00A5 +:1015B00080938C00259A2D9A2FEF80E792E021509E +:1015C00080409040E1F700C00000269A2E9A2FEF4D +:1015D00080E792E0215080409040E1F700C0000099 +:1015E000279A2F9A2FEF80E792E021508040904079 +:1015F000E1F700C0000025982D982FEF80E792E0DA +:10160000215080409040E1F700C0000026982E98BD +:101610002FEF80E792E0215080409040E1F700C03A +:10162000000027982F9856985E9825982D98269810 +:101630002E9827982F98089589EA8093800089E052 +:101640008093810024982C983F988AB18F748AB92E +:101650006E98479A8BB1806B8BB9769A0E94C40AB8 +:1016600081E99AE0892B11F00E94910A80E090E0D4 +:10167000089580E28093000180913C0181110EC0A9 +:101680000E94880B81E080933C012FEF83ED90E373 +:10169000215080409040E1F700C0000080E40E94AB +:1016A0008E0B8093000181112EC00E94B80B809395 +:1016B0000001811128C00E94B80B809300018111A4 +:1016C00022C08FE30E94B80B8093000181111BC0E0 +:1016D0000E94B00B80E40E948E0B80930001811168 +:1016E00012C08CE00E94B80B8093000181110BC0E6 +:1016F0000E94B80B80930001811105C08FE30E9406 +:10170000B80B809300010E94B00B809100010895F6 +:101710001092B9008AE08093B800089594EA9093FB +:10172000BC009091BC0097FFFCCF9091B900987FCE +:10173000983021F0903111F081E008958093BB0042 +:1017400084E88093BC008091BC0087FFFCCF80912F +:10175000B900887F883111F0803471F780E00895F6 +:1017600084E98093BC008091BC0084FDFCCF089587 +:101770008093BB0084E88093BC008091BC0087FF0D +:10178000FCCF9091B900987F81E0983209F480E015 +:10179000089584E88093BC008091BC0087FFFCCF53 +:1017A0008091BB00089580910001811115C080E4F3 +:1017B0000E948E0B8093000181110CC082E10E9477 +:1017C000B80B80930001811105C08FEF0E94B80B08 +:1017D000809300010E94B00B84B1807F84B985B1F1 +:1017E000807F85B98AB1837F8AB98BB1837F8BB9BA +:1017F0003E98469808950E94390B809300010E94FC +:10180000D30B80B38C7080BB81B3836F81BBECE45E +:10181000F1E0AEE3B1E011921D9281E0EA35F80704 +:10182000D1F78CE19BE0892B11F00C941C0B0895EF +:101830009F92AF92BF92CF92DF92EF92FF920F935F +:101840001F93CF93DF93809100018823E1F0809173 +:101850003D018F5F80933D01811115C08CEF97E0B2 +:101860000E94B4090E94390B80930001882329F05B +:1018700082EE97E00E94B40906C08EEC97E00E94C9 +:10188000B4090E94C40A0EE311E0C0E0D0E0BB241A +:10189000B39482E0A82ECC24C394D12C2FEBE22E5B +:1018A00027E0F22EC73000F580910001811162C05F +:1018B00080E40E948E0B80930001811112C082E1AE +:1018C0000E94B80B8093000181110BC0C6010C2E41 +:1018D00001C0880F0A94EAF780950E94B80B8093A4 +:1018E00000010E94B00B46C0CA30A1F028F4C830F5 +:1018F00059F0C93061F005C0CC3089F070F0CD30BE +:1019000089F0209A289810C0219A29980DC0229A0F +:101910002A980AC0239A2B9807C0529A01C0539A5A +:101920005B9802C03E9A4698E0EAEA95F1F78FB1DB +:10193000799985C092E081708B25892B7C9B02C0B0 +:1019400090E001C094E0892B7D9B02C090E001C033 +:1019500098E0892B7E9B02C090E001C090E1892B2A +:101960009FB19095991F9927991F9295990F907EF5 +:10197000892B10C080910001811176C080E40E9403 +:101980008E0B80930001882309F45BC0912C0E9488 +:10199000B00B892DF8019081981739F180838091DF +:1019A0000101882301F18091D70180FF04C084ECFC +:1019B00097E00E94B4098091D70180FF0CC080910C +:1019C00001011F928F93FF92EF920E944D0A0F9098 +:1019D0000F900F900F908091D70180FF04C08DEB86 +:1019E00097E00E94B409A09201010E94D30B2196B6 +:1019F0000F5F1F4FCE30D10509F054CF8091010108 +:101A00008823B1F0815080930101882339F08FE958 +:101A10009FE00197F1F700C000000AC0ACE4B1E01C +:101A2000EEE3F1E081918D9391E0EC34F907D1F789 +:101A30008BEB9AE0892BD1F00E94BB0A17C090E093 +:101A40007ACF83E10E94B80B8093000181119ECF71 +:101A500081E40E948E0B80930001811197CF0E9438 +:101A6000C90B982E909493CF80E094CF81E0DF91C2 +:101A7000CF911F910F91FF90EF90DF90CF90BF908B +:101A8000AF909F900895E82FF0E0E45BFE4F8081D7 +:101A90000895CF92DF92EF92FF920F931F93CF930F +:101AA000DF9386EA97E00E94B4093CE4E32E31E03C +:101AB000F32EC0E0D0E041EAC42E47E0D42E08E97E +:101AC00017E0DF93CF93DF92CF920E944D0A8EE909 +:101AD00097E00E94B409F70181917F0190E00E9494 +:101AE000B7239F938F931F930F930E944D0A86E90C +:101AF00097E00E94B40921968DB79EB708960FB65D +:101B0000F8949EBF0FBE8DBFCE30D105D1F6DF91C8 +:101B1000CF911F910F91FF90EF90DF90CF9008959C +:101B20008B3B910578F4883A910540F5853A91050B +:101B3000D0F48430910508F0B1C08130910509F4EA +:101B4000ADC06BC0803E910508F467C0883E91052A +:101B500008F4A4C09C01205F31092031310508F050 +:101B60005CC090650895853A910509F459C0863A9C +:101B7000910509F458C083E890E40895883A9105E6 +:101B800009F454C0893A910509F453C08A3A910581 +:101B900009F452C08B3A910509F451C08C3A910571 +:101BA00009F450C08D3A910509F44FC0803B91056E +:101BB00009F44EC08E3A910509F44DC08F3A910553 +:101BC00009F44CC0813B910509F44BC0823B91055F +:101BD00009F44AC0833B910509F449C0843B91054F +:101BE00009F448C0853B910509F447C0863B91053F +:101BF00009F446C0873B910509F445C0883B91052F +:101C000009F444C0893B910509F443C08A3B91051E +:101C100009F042C08AE296E4089580E090E00895D9 +:101C200081E890E4089582E890E4089582EE94E4D7 +:101C3000089589EE94E408958AEE94E4089585EB7E +:101C400094E4089586EB94E4089587EB94E4089572 +:101C50008CEC94E408958DEC94E4089583E895E485 +:101C600008958AE895E4089582E995E4089584E961 +:101C700095E4089581E296E4089583E296E4089558 +:101C800084E296E4089585E296E4089586E296E477 +:101C9000089587E296E4089580E094E40895089515 +:101CA00096E0799FF001112494E5899FE00DF11DE4 +:101CB0001124E60FF11DEE0FFF1FEA5FFE4F859125 +:101CC00094910895880F991F8A579040FC0185913F +:101CD00094910895880F991F8A5F9E4FFC0185910A +:101CE0009491089526E0729FF001112444E5849FA9 +:101CF000E00DF11D1124E60FF11DEE0FFF1FEA5F4D +:101D0000FE4F25913491C9019A9581159F4110F498 +:101D1000C9010895C90190528115904128F4C90163 +:101D20009F700E946A0E0895C901905381159041D9 +:101D300020F4C9019927906C0895211580E5380792 +:101D400069F40E94351D9FEF24E34CE09150204040 +:101D50004040E1F700C000000C947324213080E57E +:101D6000380751F486E198E00E94B4098091D701C8 +:101D700081608093D7010895C901905581159041E4 +:101D800008F050C0832F99278F70992781309105D3 +:101D9000D9F4A9014370552702C0880F991F4A95AD +:101DA000E2F79C68A90164E0440F551F6A95E1F7CA +:101DB00044275370842B952B73E0220F331F7A95A1 +:101DC000E1F7207633271DC08230910529F4922F48 +:101DD0008827816F906A089583309105A9F4A9013D +:101DE0004370552781E090E002C0880F991F4A9503 +:101DF000E2F79C6843E0220F331F4A95E1F7207E0B +:101E00003770822B932B08950497F1F4A901437046 +:101E1000552781E090E002C0880F991F4A95E2F7AC +:101E20009A68E8CFC90190578115904120F4C90103 +:101E30009F7090620895C90190588115904120F4D7 +:101E4000C9019F70906A0895203E3105E0F4203C5E +:101E5000310558F52133310509F470C048F42932B1 +:101E6000310509F464C02A32310509F46EC074C02A +:101E700029333105F1F022383105D9F02533310508 +:101E800009F44EC069C0233E310589F138F4203E83 +:101E90003105C1F0223E3105E1F05EC0263E31053C +:101EA00069F1273E3105A9F157C0C9010E94620EB0 +:101EB00008958091EA0180FD02C081FF4DC080EE4F +:101EC00090E04BC08091EA0180FFF9CF89E390E078 +:101ED00044C08091EA0182FF0EC08091EA0184FF34 +:101EE00003C080E090E039C083EE90E036C080917E +:101EF000EA0182FFF2CF82EE90E02FC08091EA01EA +:101F000083FF0BC08091EA0184FDEBCF87EE90E068 +:101F100024C08091EA0183FFF5CF86EE90E01DC0DA +:101F20008091EA0185FF07C089E290E016C08091A8 +:101F3000EA0185FFF9CF85E390E00FC08091EA01C7 +:101F400086FF07C08AE290E008C08091EA0186FF20 +:101F5000F9CF81E390E001C0C9010E94900D08957E +:101F6000089580916D0108959FB7F89410925C01D7 +:101F70009FBF9091F001943009F058C09091E90012 +:101F80009F702091EC0020FF02C020E801C020E0FB +:101F9000292B94E09093E9009091EB0090FF43C0CF +:101FA0009091EE0097FF3FC090915A01992321F044 +:101FB0009091E80095FF37C010925A0196E0309159 +:101FC000E80035FD15C03091F001343061F53091F5 +:101FD000EB0035FD28C0915021F481E080935A0137 +:101FE00022C0EFE9FFE03197F1F700C00000E7CF32 +:101FF0008093F1008091E80085FD0AC08091E8009F +:1020000080FFFCCF8091E8008E778093E80006C0C7 +:102010008FB7F89491E090935C018FBF2F7020935D +:10202000E90080E008952F702093E9008FEF089574 +:10203000CF93DF9300D01F92CDB7DEB72091F00190 +:10204000243019F523E029839B838A832093E900B8 +:102050008FEF9091E800815095FD06C095ED9A951F +:10206000F1F700008111F5CF8091E80085FF0DC0E8 +:1020700040E050E063E070E0CE0101960E94E7127C +:102080008091E8008E778093E8000F900F900F907A +:10209000DF91CF910895CF93DF9300D01F92CDB7FA +:1020A000DEB72091F001243021F522E029839B83C3 +:1020B0008A8383E08093E9008FEF9091E80081505C +:1020C00095FD06C095ED9A95F1F700008111F5CFC9 +:1020D0008091E80085FF0DC040E050E063E070E0D3 +:1020E000CE0101960E94E7128091E8008E778093DE +:1020F000E8000F900F900F90DF91CF9108952091FD +:10210000F0012430F1F422E02093E9002FEF309128 +:10211000E800215035FD06C035ED3A95F1F7000095 +:102120002111F5CF2091E80025FF0BC040E050E0E1 +:1021300065E070E00E94E7128091E8008E7780935E +:10214000E8000895CF93DF93EC018091F001843093 +:1021500009F047C080910C018823E1F080910D01C6 +:102160008823C1F085E08093E9008FEF9091E8002B +:10217000815095FD06C095E19A95F1F70000811117 +:10218000F5CF8091E80085FF2CC040E050E060E191 +:1021900070E017C081E08093E9008FEF9091E80034 +:1021A000815095FD06C095ED9A95F1F700008111DB +:1021B000F5CF8091E80085FF14C040E050E068E072 +:1021C00070E0CE010E94E7128091E8008E77809344 +:1021D000E80080E1FE01ADE5B1E001900D928A9545 +:1021E000E1F7DF91CF9108958DE498E00E94B40962 +:1021F0008091EF01811109C00E9479140E94D614C8 +:102200008091E20084608093E200089589E498E080 +:102210000E94B4091092EF01089585E498E00C94AF +:10222000B40981E498E00E94B4090C94342E8DE343 +:1022300098E00E94B4090E940E240E943A2E0E9447 +:1022400072170C94B00F80915B018F5F80935B01DC +:1022500062E30E94A82F911135C010925B0180911A +:102260005C01882379F18091F001843049F58091F7 +:10227000E9008F709091EC0090FF02C090E801C0DF +:1022800090E0982B84E08093E9008091EB0080FF40 +:1022900014C08091EE0087FF10C08091E80085FF98 +:1022A00003C01092F100F9CF8091E80080FF05C0D3 +:1022B0008091E8008E778093E8009F709093E9000A +:1022C00010925C01089542E061EC81E00E94F313FA +:1022D00042E061EC82E00E94F31342E061EC83E0B3 +:1022E0000E94F31342E261EC84E00E94F31342E1A6 +:1022F00061EC85E00C94F3138091F201833009F4D2 +:1023000055C030F4813071F0823009F48EC00895E8 +:102310008A3009F47AC08B3009F460C0893009F042 +:102320009CC020C08091F101813A09F096C0809153 +:10233000E800877F8093E8008091F5019091F60195 +:10234000892B21F060E080E090E003C060E18DE542 +:1023500091E070E00E9430138091E8008B778093C9 +:10236000E80008958091F101813209F076C08091F2 +:10237000F5019091F601009719F0049709F06DC0EE +:102380008091E800877F8093E8008091E80082FDDB +:1023900005C08091F0018111F8CF5FC08091F100FC +:1023A00080936D018091E8008B7753C08091F1019B +:1023B000813A09F052C08091F5019091F601892B84 +:1023C00009F04BC08091E800877F8093E8008091FE +:1023D000E80080FFFCCF80910C0136C08091F101B4 +:1023E0008132D9F58091F5019091F601892BA9F5FB +:1023F0008091E800877F8093E8000E9428148091F4 +:10240000F30180930C010C94351D8091F101813210 +:1024100021F58091E800877F8093E8000E942814CE +:102420008091F40180936E0108958091F101813AC9 +:10243000A1F48091E800877F8093E8008091E80014 +:1024400080FFFCCF80916E018093F1008091E800C5 +:102450008E778093E8000C942814089584B7877FC2 +:1024600084BF88E10FB6F8948093600010926000FA +:102470000FBE90E080E80FB6F894809361009093CF +:1024800061000FBE0E94FB170E9479140E94D614AF +:102490008091E20084608093E20084EB9FE00E94E0 +:1024A000A02378940E9450170E94FD1782E091E0CB +:1024B0000E946D170E94222E8CE298E00E94B409BF +:1024C0008091F001853089F488E298E00E94B40997 +:1024D0000E94D1238091EE01882391F30E94F92379 +:1024E000882371F30E94D112EBCF0E942B18E8CF02 +:1024F000292F332723303105A9F06CF42130310521 +:1025000009F442C02230310509F043C08DE890E063 +:1025100025E838E042C021323105C9F022323105C8 +:1025200019F137C099278130910541F0823091052A +:1025300041F0892B71F5E1E8F8E005C0E9E6F8E043 +:1025400002C0E1E5F8E0849190E09F0126C065308B +:1025500000F5E62FF0E0EE0FFF1FEB5DFE4F208150 +:10256000318189E090E019C0653098F4E62FF0E001 +:10257000DF01AA0FBB1FA55EBE4F2D913C91EA5E05 +:10258000FE4F808190E009C082E190E022E139E0D5 +:1025900004C080E090E020E030E0FA013183208345 +:1025A000089580E189BD82E189BD09B400FEFDCFB7 +:1025B0008091D8008F7D8093D8008091E000826068 +:1025C0008093E0008091E00081FDFCCF0895CF92E0 +:1025D000DF92EF92FF920F931F93CF93DF937C01D3 +:1025E0008B01EA010E944914811131C0209731F01A +:1025F00088819981081B190BE80EF91EC12CD12C7A +:102600000115110519F18091E80085FD14C0809134 +:10261000E8008E778093E800209741F088819981C7 +:102620008C0D9D1D9983888385E011C00E944914FB +:10263000882331F30CC0F70181917F018093F10071 +:1026400001501109FFEFCF1ADF0ADACF80E0DF91E6 +:10265000CF911F910F91FF90EF90DF90CF90089551 +:102660002091F7013091F8012617370748F06115DE +:10267000710539F42091E8002E772093E80001C01D +:10268000B901FC0120E061157105B9F18091F001FB +:10269000882309F440C0853009F43FC08091E800E8 +:1026A00083FD3DC08091E80082FF06C08091E80074 +:1026B00082FF26C080E008958091E80080FFE3CF8C +:1026C0002091F3008091F20090E0922B611571054A +:1026D00051F08830910538F421912093F100615038 +:1026E00071090196F3CF21E0089709F020E080916D +:1026F000E8008E778093E800C6CF2111C7CFD6CFF0 +:102700008091F001882339F0853039F08091E8001C +:1027100083FFCCCF04C082E0089583E0089581E078 +:1027200008952091F7013091F8012617370748F0F6 +:102730006115710539F42091E8002E772093E800A7 +:1027400001C0B901FC0120E061157105C1F1809162 +:10275000F001882309F441C0853009F440C080911C +:10276000E80083FD3EC08091E80082FF06C08091B2 +:10277000E80082FF27C080E008958091E80080FF94 +:10278000E3CF2091F3008091F20090E0922B61154D +:10279000710559F08830910540F424912093F1009F +:1027A0003196615071090196F2CF21E0089709F046 +:1027B00020E08091E8008E778093E800C5CF21115A +:1027C000C6CFD5CF8091F001882339F0853039F01C +:1027D0008091E80083FFCBCF04C082E0089583E0BE +:1027E000089581E00895982F973058F59093E90067 +:1027F000981739F07091EC002091ED005091F000A5 +:1028000003C0242F762F50E021FF19C03091EB0038 +:102810003E7F3093EB003091ED003D7F3093ED0033 +:102820003091EB0031603093EB007093EC0020931B +:10283000ED005093F0002091EE0027FF07C09F5F4E +:10284000D3CF8F708093E90081E0089580E00895F0 +:102850008091F10187FD05C08091E80080FF0EC0E6 +:1028600012C08091E80082FD05C08091F0018111C5 +:10287000F8CF08958091E8008B7708C08091F0012F +:102880008111EACF08958091E8008E778093E80067 +:1028900008958091E4009091E50045E62091EC00D8 +:1028A00020FF21C02091E80020FD21C02091F001EF +:1028B000222389F0253089F02091EB0025FD0FC0FF +:1028C0002091E4003091E5002817390739F3415091 +:1028D00041F0C901E3CF82E0089583E0089581E0EB +:1028E000089584E008952091E80022FFDFCF80E082 +:1028F00008950E94E7140E94EF14E0EEF0E080815A +:1029000081608083E8EDF0E080818F77808319BC5F +:10291000A7EDB0E08C918E7F8C9380818F7E808339 +:102920001092EF0108950F931F93CF93DF930E94AE +:10293000E7140E94EF14C8EDD0E088818F77888378 +:1029400088818068888388818F7D888319BC1092F4 +:10295000F0011092EC011092EE011092ED0100EEE8 +:1029600010E0F80180818B7F80838881816088837B +:1029700042E060E080E00E94F313E1EEF0E080814D +:102980008E7F8083E2EEF0E08081816080838081B1 +:1029900088608083F80180818E7F80838881806158 +:1029A0008883DF91CF911F910F910895E8EDF0E0BA +:1029B00080818F7E8083E7EDF0E08081816080837D +:1029C00084E082BF81E08093EF010C949314E8EDE2 +:1029D000F0E080818E7F80831092E2000895109253 +:1029E000DA001092E10008951F920F920FB60F9235 +:1029F00011242F933F934F935F936F937F938F9304 +:102A00009F93AF93BF93EF93FF938091E10082FF79 +:102A10000BC08091E20082FF07C08091E1008B7FB4 +:102A20008093E1000E9423118091DA0080FF1FC093 +:102A30008091D80080FF1BC08091DA008E7F809348 +:102A4000DA008091D90080FF0DC080E189BD82E16C +:102A500089BD09B400FEFDCF81E08093F0010E94A2 +:102A6000F41005C019BC1092F0010E94061180916B +:102A7000E10080FF19C08091E20080FF15C08091C5 +:102A8000E2008E7F8093E2008091E200806180937B +:102A9000E2008091D80080628093D80019BC85E064 +:102AA0008093F0010E9411118091E10084FF30C0F9 +:102AB0008091E20084FF2CC080E189BD82E189BD64 +:102AC00009B400FEFDCF8091D8008F7D8093D8009F +:102AD0008091E1008F7E8093E1008091E2008F7E03 +:102AE0008093E2008091E20081608093E200809117 +:102AF000EC01882311F084E007C08091E30087FF98 +:102B000002C083E001C081E08093F0010E941711B0 +:102B10008091E10083FF29C08091E20083FF25C0FE +:102B20008091E100877F8093E10082E08093F00153 +:102B30001092EC018091E1008E7F8093E100809102 +:102B4000E2008E7F8093E2008091E20080618093BA +:102B5000E20042E060E080E00E94F3138091F00028 +:102B600088608093F0000E940D11FF91EF91BF915A +:102B7000AF919F918F917F916F915F914F913F9115 +:102B80002F910F900FBE0F901F9018951F920F92CC +:102B90000FB60F9211242F933F934F935F936F9330 +:102BA0007F938F939F93AF93BF93CF93EF93FF93B5 +:102BB000C091E900CF708091EC001092E900809103 +:102BC000F000877F8093F00078940E9402161092A4 +:102BD000E9008091F00088608093F000C093E900E4 +:102BE000FF91EF91CF91BF91AF919F918F917F9185 +:102BF0006F915F914F913F912F910F900FBE0F906A +:102C00001F9018951F93CF93DF93CDB7DEB7AA9788 +:102C10000FB6F894DEBF0FBECDBFE1EFF1E08091BB +:102C2000F100819321E0E93FF207C9F70E947C118E +:102C30008091E80083FF1CC12091F1013091F201E5 +:102C4000832F90E08A30910508F012C1FC01EA5A06 +:102C5000FF4F0C94C82F203881F0223809F008C1AA +:102C60008091F5018F708093E9008091EB0085FBE6 +:102C7000882780F91092E90006C08091ED019091BB +:102C8000EE01911182609091E800977F9093E800A7 +:102C90008093F1001092F100C5C0822F8D7F09F062 +:102CA000E7C0222319F0223061F0E2C08091F301E5 +:102CB000813009F0DDC0333009F080E08093EE010F +:102CC00028C08091F301811124C02091F5012F705B +:102CD00009F4CEC02093E9008091EB0080FF19C079 +:102CE0008091EB00333011F4806211C080618093D9 +:102CF000EB0081E090E0022E01C0880F0A94EAF711 +:102D00008093EA001092EA008091EB008860809343 +:102D1000EB001092E9008091E800877F86C02111C6 +:102D2000A7C01091F3011F778091E3008078812B79 +:102D30008093E3008091E800877F8093E8000E9401 +:102D400028148091E80080FFFCCF8091E300806828 +:102D50008093E300112311F083E001C082E08093AF +:102D6000F00186C02058223008F082C08091F30123 +:102D70009091F4018C3D23E0920779F583E08A83FA +:102D80008AE289834FB7F894DE01139620E03EE093 +:102D900051E2E32FF0E050935700E49120FF03C08D +:102DA000E295EF703F5FEF708E2F90E0EA3010F009 +:102DB000C79601C0C0968D939D932F5F243149F72C +:102DC0004FBF8091E800877F8093E8006AE270E05F +:102DD000CE0101960E94301314C0AE014F5F5F4FC9 +:102DE0006091F5010E947812009709F441C020918A +:102DF000E800277F2093E800BC0189819A810E9426 +:102E000091138091E8008B778093E80031C02038DF +:102E100079F58091E800877F8093E8008091EC014C +:102E20008093F1008091E8008E778093E8000E9403 +:102E300028141EC021111CC09091F3019230C0F4DF +:102E40008091E800877F8093E8009093EC010E94D6 +:102E500028148091EC01811104C08091E30087FF68 +:102E600002C084E001C081E08093F0010E94631100 +:102E70008091E80083FF0AC08091E800877F8093FB +:102E8000E8008091EB0080628093EB00AA960FB679 +:102E9000F894DEBF0FBECDBFDF91CF911F91089593 +:102EA000CF938091F0018823B1F08091E9008F7079 +:102EB0009091EC0090FF02C090E801C090E0C92F13 +:102EC000C82B1092E9008091E80083FD0E94021651 +:102ED000CF70C093E900CF910895909374018093CF +:102EE00073010895E0917301F0917401309721F01E +:102EF0000190F081E02D099480E00895FF920F93F6 +:102F00001F93CF93DF938C01E0917301F0917401D3 +:102F1000309799F10280F381E02D09958091D701D6 +:102F200082FF2BC080FF04C087E49AE00E94B409AE +:102F3000E80180E1F82E01E41AE08091D70180FFDA +:102F40000BC088811F928F931F930F930E944D0A8D +:102F50000F900F900F900F90FA942196F110EDCFF3 +:102F60008091D70180FF09C08FE39AE0DF91CF9174 +:102F70001F910F91FF900C94B409DF91CF911F9195 +:102F80000F91FF900895E0917301F09174013097D3 +:102F900021F00480F581E02D0994089520917101BC +:102FA000309172018217930771F0909372018093B0 +:102FB0007101E0917301F0917401309721F0068066 +:102FC000F781E02D0994089520916F0130917001EF +:102FD0008217930771F09093700180936F01E091D5 +:102FE0007301F0917401309721F00084F185E02D98 +:102FF0000994089508950C94FA170E9410240E94D1 +:10300000FB0B0C94D624CF93C82F8091D70182FF5D +:103010001EC080FF04C080E69AE00E94B40980913F +:10302000D70180FF0CC01F92CF932BE53AE03F936E +:103030002F930E944D0A0F900F900F900F90809148 +:10304000D70180FF04C089E59AE00E94B4098C2F63 +:10305000CF910C94B00FCF92DF92EF92FF920F932B +:103060001F93CF93DF93CDB7DEB72B970FB6F894AE +:10307000DEBF0FBECDBF0E94180C36E7E32E31E055 +:10308000F32E00E010E0C02E802F0E94430DF701C8 +:10309000D1907F01D826B1F40F5F1F4F0E3011057C +:1030A00091F78FEF89838A831B820E9419248160A4 +:1030B000782F9D838C8349815A816B818D810E94F9 +:1030C000CE1841C09091D70191FF04C08B870E9418 +:1030D000490D8B8520E030E04D2D50E0922FBA0154 +:1030E000022E02C0759567950A94E2F760FF25C02D +:1030F0002E83CF82EE24E394F12C02C0EE0CFF1C51 +:103100009A95E2F790E08E219F2121E0892B09F426 +:1031100020E028870E9419248160782F9A87898768 +:103120004E815F8168858A850E94CE18F801EA5831 +:10313000FE4F80818E25808306C02F5F3F4F263053 +:10314000310561F6A9CF0E944428109175010E94B3 +:1031500072171817A1F00E947217809375012B96B1 +:103160000FB6F894DEBF0FBECDBFDF91CF911F9198 +:103170000F91FF90EF90DF90CF900C9403182B9657 +:103180000FB6F894DEBF0FBECDBFDF91CF911F9178 +:103190000F91FF90EF90DF90CF900895CF93DF9342 +:1031A000CDB7DEB72B970FB6F894DEBF0FBECDBFFD +:1031B0004F83588769877A878B87DE01119686E06F +:1031C000FD0111928A95E9F785E0FE01379601909D +:1031D0000D928A95E1F749815A816B817C818D81BD +:1031E0009E810E9401202B960FB6F894DEBF0FBE81 +:1031F000CDBFDF91CF910895CF93C82F882309F4D5 +:10320000C1C0823859F40E94721781FDBBC089E3A6 +:103210000E949E220E947A2389E30CC0833879F4AD +:103220000E94721780FDAEC083E50E949E220E941C +:103230007A2383E50E94EF22CF910C947A2384387D +:1032400059F40E94721782FD9DC087E40E949E225D +:103250000E947A2387E4EECF8CEF8C0F813A48F4FA +:103260008C2F0E94CD2C81118DC08C2F0E949E220C +:10327000E3CF80E28C0F883048F4C77081E001C052 +:10328000880FCA95EAF70E944123D6CF8BE58C0FB1 +:10329000833078F4C53A29F0C63A31F482E890E0F8 +:1032A00005C081E890E002C083E890E0CF910C94E3 +:1032B000CE1788E58C0F833108F064C0C83A39F125 +:1032C000C93A41F1CA3A49F1CB3A51F1CC3A59F1F4 +:1032D000CD3A61F1C03B69F1CE3A71F1CF3A79F163 +:1032E000C13B81F1C23B89F1C33B91F1C43B99F1F0 +:1032F000C53BA1F1C63BA9F1C73BB1F1C83BB9F150 +:10330000C93BC1F1CA3BC9F58AE292E038C082EEFE +:1033100090E035C089EE90E032C08AEE90E02FC098 +:1033200085EB90E02CC086EB90E029C087EB90E025 +:1033300026C08CEC90E023C08DEC90E020C083E8A8 +:1033400091E01DC08AE891E01AC082E991E017C0BF +:1033500084E991E014C081E292E011C083E292E03E +:103360000EC084E292E00BC085E292E008C086E2E3 +:1033700092E005C087E292E002C080E090E0CF9149 +:103380000C94E417CF910895882309F44BC0823838 +:1033900059F40E94721781FF45C089E30E949E2262 +:1033A0000E947A2389E30CC0833871F40E9472175B +:1033B00080FF38C083E50E949E220E947A2383E525 +:1033C0000E94EF220C947A23843859F40E947217D9 +:1033D00082FF28C087E40E949E220E947A2387E40D +:1033E000EFCF9CEF980F913A58F390E2980F9830F6 +:1033F00050F4877091E001C0990F8A95EAF7892F00 +:103400000E944723DFCF9BE5980F933020F480E0A4 +:1034100090E00C94CE17885A833120F480E090E03D +:103420000C94E4170895882321F00E9441230C9402 +:103430007A230895882321F00E9447230C947A234D +:103440000895CF92DF92EF92FF920F931F93CF9345 +:10345000DF93CDB7DEB728970FB6F894DEBF0FBE67 +:10346000CDBF8C0185E0F801DE01119601900D922F +:103470008A95E1F7F80140813181F280258122951A +:103480002F7083819481892B31F03F3F31F481E0AB +:103490004F3F19F403C081E001C080E080FDC4C249 +:1034A00049833A8389819A812F830E945C229E837B +:1034B00088870E945B220E942E214E81E42FE29594 +:1034C000EF70F0E0E05AFF4F2F8168850C94C82F11 +:1034D000842F807F142F1F70882311F01295107F86 +:1034E000FF2059F0112309F454C2812F68870E94EC +:1034F00051230E947A2368854CC2862F0E94C419EA +:10350000112309F491C2812F0E94572328960FB6E8 +:10351000F894DEBF0FBECDBFDF91CF911F910F9109 +:10352000FF90EF90DF90CF900C947A23342F307F70 +:10353000842F8F70303211F08295807F662319F0CE +:10354000613019F12BC0FF20B1F0222309F493C19F +:10355000213009F090C128960FB6F894DEBF0FBE57 +:10356000CDBFDF91CF911F910F91FF90EF90DF9032 +:10357000CF900C946123222319F0213009F454C216 +:103580008E830E9464238E8189C1FF2021F0223026 +:1035900008F04AC270C1211147C280C1FF2021F04A +:1035A000222309F468C1F5C1222309F477C105C2B9 +:1035B000242F26952695237030E02115310521F022 +:1035C00021303105C9F030C2FF2021F0862F942F21 +:1035D000937002C080E090E028960FB6F894DEBFAA +:1035E0000FBECDBFDF91CF911F910F91FF90EF9054 +:1035F000DF90CF900C94CE17FF2021F0862F942FD0 +:10360000937002C080E090E028960FB6F894DEBF79 +:103610000FBECDBFDF91CF911F910F91FF90EF9023 +:10362000DF90CF900C94E417862FFF2019F00E94B2 +:10363000CA2602C00E94322728960FB6F894DEBF31 +:103640000FBECDBFDF91CF911F910F91FF90EF90F3 +:10365000DF90CF900C94B727842F837009F076C049 +:10366000F110E2C1262F229526952770220F220FF6 +:10367000862F8F70C82ED12CE12CF12C022E04C085 +:10368000CC0CDD1CEE1CFF1C0A94D2F764FF10C0AA +:103690006FE070E080E090E004C0660F771F881F45 +:1036A000991F2A95D2F7609570958095909503C0E3 +:1036B00060E070E0CB01242F269526952370422FE1 +:1036C00050E042305105D1F04330510559F16C2999 +:1036D0007D298E299F294130510541F128960FB649 +:1036E000F894DEBF0FBECDBFDF91CF911F910F9138 +:1036F000FF90EF90DF90CF900C9453216C297D299F +:103700008E299F2928960FB6F894DEBF0FBECDBF35 +:10371000DF91CF911F910F91FF90EF90DF90CF90AD +:103720000C946D210E945321C701B60128960FB653 +:10373000F894DEBF0FBECDBFDF91CF911F910F91E7 +:10374000FF90EF90DF90CF900C943921FF2019F07B +:10375000842F817001C08695882309F465C1262FC6 +:10376000229526952770220F220F862F8F70C82E44 +:10377000D12CE12CF12C022E04C0CC0CDD1CEE1C53 +:10378000FF1C0A94D2F764FF10C06FE070E080E085 +:1037900090E004C0660F771F881F991F2A95D2F703 +:1037A000609570958095909503C060E070E0CB01C6 +:1037B000242F269526952370422F50E04230510544 +:1037C000D1F04330510559F16C297D298E299F296B +:1037D0004130510541F128960FB6F894DEBF0FBE77 +:1037E000CDBFDF91CF911F910F91FF90EF90DF90B0 +:1037F000CF900C9427226C297D298E299F29289609 +:103800000FB6F894DEBF0FBECDBFDF91CF911F91F1 +:103810000F91FF90EF90DF90CF900C9441220E9487 +:103820002722C701B60128960FB6F894DEBF0FBE57 +:10383000CDBFDF91CF911F910F91FF90EF90DF905F +:10384000CF900C940D22603FC9F118F4603E50F403 +:103850009BC0623F09F460C008F44AC0633F09F4AA +:103860006FC092C0162F1F70842F8F71FF2099F0A8 +:103870000E94A621812F28960FB6F894DEBF0FBEB6 +:10388000CDBFDF91CF911F910F91FF90EF90DF900F +:10389000CF900C94131A0E94C721812F28960FB63F +:1038A000F894DEBF0FBECDBFDF91CF911F910F9176 +:1038B000FF90EF90DF90CF900C941A1AFF20A1F0A8 +:1038C0002111B2C0842F8F7128960FB6F894DEBFF5 +:1038D0000FBECDBFDF91CF911F910F91FF90EF9061 +:1038E000DF90CF900C94EC21223008F09DC0EACFFD +:1038F000FF20A1F0842F8F7128960FB6F894DEBFB9 +:103900000FBECDBFDF91CF911F910F91FF90EF9030 +:10391000DF90CF900C94A621FF2061F3842F8F714C +:1039200028960FB6F894DEBF0FBECDBFDF91CF91C2 +:103930001F910F91FF90EF90DF90CF900C94C721D3 +:10394000FF2091F0842F8F7128960FB6F894DEBF78 +:103950000FBECDBFDF91CF911F910F91FF90EF90E0 +:10396000DF90CF900C94912128960FB6F894DEBF8B +:103970000FBECDBFDF91CF911F910F91FF90EF90C0 +:10398000DF90CF900C948721FF20A1F0222309F42F +:10399000B1CF862F28960FB6F894DEBF0FBECDBFED +:1039A000DF91CF911F910F91FF90EF90DF90CF901B +:1039B0000C94FC18222309F4B1CF862F28960FB659 +:1039C000F894DEBF0FBECDBFDF91CF911F910F9155 +:1039D000FF90EF90DF90CF900C94C4194F70C80106 +:1039E0000E94560A28960FB6F894DEBF0FBECDBFD0 +:1039F000DF91CF911F910F91FF90EF90DF90CF90CB +:103A00000C94AE204F70C80128960FB6F894DEBF14 +:103A10000FBECDBFDF91CF911F910F91FF90EF901F +:103A2000DF90CF900C944F0E28960FB6F894DEBF1F +:103A30000FBECDBFDF91CF911F910F91FF90EF90FF +:103A4000DF90CF9008950E945E230E9433230E944E +:103A50007A230E94E5280E94B72780E090E00E9428 +:103A6000CE1780E090E00C94E4170E944E230C9453 +:103A7000231D0E945C22292F22952F7030E02C30CC +:103A800031054CF42A3031056CF4225031092230D2 +:103A9000310590F407C02C30310551F02F3031053D +:103AA00039F00AC0803E10F0803F31F481E0089583 +:103AB00093FB882780F9089580E00895CF93DF93E2 +:103AC00000D000D01F92CDB7DEB70F900F900F90AF +:103AD0000F900F90DF91CF910895CF93DF9300D097 +:103AE00000D000D0CDB7DEB726960FB6F894DEBF73 +:103AF0000FBECDBFDF91CF9108951F93CF93DF937A +:103B0000C091840116E080918501C81799F0D0E03A +:103B10001C9FF0011D9FF00D1124EA57FE4F4081BC +:103B2000518162817381848195810E946D1D2196EE +:103B3000C770E9CFDF91CF911F9108954091B601F1 +:103B40005091B7016091B8017091B9018091BA01AB +:103B50009091BB010C946D1DCF938091BB01829518 +:103B60008F7009F05FC08091B801882309F45AC0B2 +:103B700020918401A09185016091B6017091B701F7 +:103B80008091B9019091BA0131E06F3F09F030E0C6 +:103B9000B32FC6E02A1709F445C0009721F07F3FF4 +:103BA00021F44B2F03C041E001C040E030E040FD74 +:103BB00035C0C29FF001C39FF00D1124EA57FE4F9C +:103BC000418174132BC04081641328C0428141118C +:103BD00025C0438154814817590710F441505109B9 +:103BE000481B590B483C5105C8F48091BB018F70AC +:103BF00080618093BB0186E0829FF001839FF00D7E +:103C00001124E557FE4F80818F708061808386EBA1 +:103C100091E00E94211ACF910C947D1D2F5F3F4FA0 +:103C20002770B8CFCF910895CF92DF92EF92FF9295 +:103C30000F931F93CF93DF93CDB7DEB762970FB685 +:103C4000F894DEBF0FBECDBF8C0185E0F801DE0128 +:103C50001D9601900D928A95E1F7D8014C9111962D +:103C60005C91119712966C9112971396ED90FC90BF +:103C700014977091B601E091B7012091B90130918C +:103C8000BA012115310531F0EF3F31F481E07F3F7A +:103C900019F403C081E001C080E0B82FB170CB2ED1 +:103CA00080FD6CC1D090B801DD2009F4F5C0F09121 +:103CB000BB01E216F30638F0C701821B930B883C68 +:103CC000910548F09BC0209530952E0D3F1D283C56 +:103CD000310508F093C08F2F807F09F052C0E513A3 +:103CE00014C0741312C0D62E61110FC0FF70F061A2 +:103CF000F093BB010E949E1D86EB91E00E94211A69 +:103D00008091BB01F80185836CC1EF2831F05F3FE2 +:103D100031F481E04F3F19F403C081E001C080E03D +:103D200080FD03C081E0862701C080E0F82FF1709C +:103D3000FF2E80FF1CC0809184012091850136E018 +:103D4000821709F428C190E0389FF001399FF00DE7 +:103D50001124EA57FE4F7181571306C07081471333 +:103D600003C07281671303C001968770E9CFD62E16 +:103D7000662309F436C18091BB0181608093BB0149 +:103D800053C0E51308C0741306C0611104C0D80104 +:103D90001596FC93AEC04D875E878D859E856A8B98 +:103DA0000E94391D6A89882329F1D62E662311F1D4 +:103DB0002091BB01822F82958F7090E002970CF4C6 +:103DC00060C08091B6019091B70198878F83198662 +:103DD000FB86EA862C87CE01079651C0E51731F1A4 +:103DE0004D875E878D859E856A8B0E94391D6A8905 +:103DF00081112EC0C8010E94211AA4C08F2F807F7C +:103E000069F77E2DF98AE88A89890E945E1D86EB12 +:103E100091E00E94211AE6EBF1E086E0DF011D92BD +:103E20008A95E9F70E949E1DD12CDBC07413D8CF70 +:103E30006111D6CFD8011596FC93C8010E94211AB2 +:103E4000E6EBF1E086E0DF011D928A95E9F7C9C053 +:103E5000D62E662379F22091BB01822F82958F7036 +:103E600090E0029774F08091B6019091B7019A8327 +:103E700089831B82FD82EC822E83CE0101960E94F3 +:103E8000211A86E0F801A6EBB1E001900D928A9527 +:103E9000E1F70E94AC1D6FC0E216F30628F0C701DF +:103EA000821B930B9C0104C0209530952E0D3F1D65 +:103EB000283C310508F052C0D62E662309F49ACF6B +:103EC000E5132CC074132AC08091BB0180FD1DC076 +:103ED000982F92959F70C9F0D80115968C931597DD +:103EE0009F3039F09F5F9295907F8F70892B159648 +:103EF0008C93C8010E94211A86E0F801A6EBB1E07C +:103F000001900D928A95E1F736C086E0F801A6EBA4 +:103F1000B1E001900D928A95E1F763C04D875E870D +:103F20008D859E850E94391D882379F086E0F801F1 +:103F3000A6EBB1E001900D928A95E1F70E94AC1DCD +:103F40000E949E1DDD24D3944CC08091BB018160F2 +:103F50008093BB01C8010E94211A43C07E2DF98ABB +:103F6000E88A89890E945E1DE6EBF1E086E0DF01C8 +:103F70001D928A95E9F70E949E1D33C0662309F4BD +:103F800039CF4D875E878D859E850E94391D882398 +:103F900009F430CFCBCF4D875E878D859E850E94FB +:103FA0005C22292F22952F7030E0223031052CF42D +:103FB0009F7041F0811106C00CC0243031052CF4F3 +:103FC0009F7049F4805E883020F0C8010E94211A59 +:103FD000CF2CDC2C06C0D80115969C91907F91F7D0 +:103FE000F8CF8D2D62960FB6F894DEBF0FBECDBF11 +:103FF000DF91CF911F910F91FF90EF90DF90CF90C5 +:1040000008951F93CF93DF93CDB7DEB72C970FB6EC +:10401000F894DEBF0FBECDBF4F83588769877A877C +:104020008B879C87CE0107960E94141E8823C1F0BF +:104030002F8138858A859B85892B31F03F3F11F090 +:1040400080E003C02F3FE1F781E0811147C04F813D +:10405000588569857A858B859C850E946D1D3EC03B +:1040600086E0FE013796DE01119601900D928A9549 +:10407000E1F7FF81E8854A855B854115510531F0FF +:10408000EF3F31F481E0FF3F19F403C081E001C04C +:1040900080E080FD23C02091850130E0C9010196B8 +:1040A000877099276091840170E086179707F1F176 +:1040B000F983EA835D834C8396E0929FD001939FBE +:1040C000B00D1124AA57BE4FFE01319601900D92FA +:1040D0009A95E1F7809385010E947D1D16E08091FD +:1040E000840190918501891779F1189FC0011124ED +:1040F0008A579E4F0E94141E882331F1E09184015B +:104100001E9FF0011124EA57FE4F408151816281C8 +:104110007381848195810E946D1D8091840190E05E +:1041200001968770992780938401D9CF0E94351D0D +:104130001092850110928401E6EBF1E086E0DF0148 +:104140001D928A95E9F7CACF2C960FB6F894DEBF78 +:104150000FBECDBFDF91CF911F910895EF92FF92D7 +:104160000F931F93CF93DF93FC01009709F46FC067 +:10417000F12CEE24E394EF0121968491843740F4EE +:10418000843008F055C0813081F0823021F15FC069 +:10419000853709F447C0C0F19CE7980F903708F0C5 +:1041A00056C08F770E94C41945C08F010E5F1F4F04 +:1041B000FE01849190E2980F983050F48770FE2DA4 +:1041C00001C0FF0F8A95EAF78F2F0E94512315C077 +:1041D0000E94FC1814C08F010E5F1F4FFE018491D6 +:1041E00090E2980F983068F48770FE2D01C0FF0FA1 +:1041F0008A95EAF78F2F0E9457230E947A23E801BD +:1042000019C00E94C419FBCFCF010296FE01C491D0 +:10421000CC2361F0EFE9FFE03197F1F700C0000037 +:10422000C150F6CFCF010296FE01F490EC0102C01E +:104230000E94FC188F2D882341F0EFE9FFE03197B1 +:10424000F1F700C000008150F6CFFE0194CFDF915E +:10425000CF911F910F91FF90EF9008950895609373 +:10426000C0017093C1018093C2019093C3010C946B +:10427000231D0F931F930091C0011091C101209144 +:10428000C2013091C301062B172B282B392B009329 +:10429000C0011093C1012093C2013093C3011F914B +:1042A0000F910C94231D0F931F930091C001109147 +:1042B000C1012091C2013091C30106231723282395 +:1042C00039230093C0011093C1012093C2013093A0 +:1042D000C3011F910F910C94231D0F931F93009105 +:1042E000C0011091C1012091C2013091C301062784 +:1042F0001727282739270093C0011093C101209365 +:10430000C2013093C3011F910F910C94231D109291 +:10431000BC011092BD011092BE011092BF010C941D +:10432000231D41E050E060E070E004C0440F551FE1 +:10433000661F771F8A95D2F74093BC015093BD0149 +:104340006093BE017093BF010C94231D41E050E0C7 +:1043500060E070E004C0440F551F661F771F8A9508 +:10436000D2F78091BC019091BD01A091BE01B091A6 +:10437000BF01842B952BA62BB72B8093BC01909368 +:10438000BD01A093BE01B093BF010C94231D41E079 +:1043900050E060E070E004C0440F551F661F771FB7 +:1043A0008A95D2F740955095609570958091BC01A3 +:1043B0009091BD01A091BE01B091BF0184239523CE +:1043C000A623B7238093BC019093BD01A093BE01A7 +:1043D000B093BF010C94231D41E050E060E070E019 +:1043E00004C0440F551F661F771F8A95D2F780912E +:1043F000BC019091BD01A091BE01B091BF01842785 +:104400009527A627B7278093BC019093BD01A09361 +:10441000BE01B093BF010C94231D0F931F93009115 +:10442000BC011091BD012091BE013091BF01062B4E +:10443000172B282B392B0093BC011093BD0120931F +:10444000BE013093BF011F910F910C94231D0F9358 +:104450001F930091BC011091BD012091BE013091CC +:10446000BF0106231723282339230093BC0110938F +:10447000BD012093BE013093BF011F910F910C9499 +:10448000231D0F931F930091BC011091BD0120913A +:10449000BE013091BF01062717272827392700932F +:1044A000BC011093BD012093BE013093BF011F9149 +:1044B0000F910C94231D0895CF92DF92EF92FF92FB +:1044C0000F931F93CF93DF93EC01C090C001D09066 +:1044D000C101E090C201F090C3018091BC019091B4 +:1044E000BD01A091BE01B091BF01C82AD92AEA2A14 +:1044F000FB2A0FE110E0B701A601002E04C076955B +:104500006795579547950A94D2F740FF07C0BE01BB +:10451000802F0E94720E8130910539F401501109EB +:1045200050F7BE0180E00E94720EDF91CF911F9183 +:104530000F91FF90EF90DF90CF90089590910C0134 +:10454000992361F190910D01992341F1982F96954E +:10455000969596959F3088F4E0910E01F0910F01A9 +:10456000E90FF11D877021E030E001C0220F8A952C +:10457000EAF78181822B818308959091D70190FF82 +:104580002DC01F928F9381E99AE09F938F930E9491 +:104590004D0A0F900F900F900F90089540910E01CB +:1045A00050910F0120E030E09FEFFA01E20FF31F7E +:1045B0006281681799F09F3F19F4611101C0922F31 +:1045C0002F5F3F4F2E30310581F79F3F39F0FA01C1 +:1045D000E90FF11D97FDFA95828308950895909152 +:1045E0000C01992369F190910D01992349F1982FBC +:1045F0009695969596959F3090F4E0910E01F091E6 +:104600000F01E90FF11D877021E030E001C0220F9A +:104610008A95EAF720958181282321830895909136 +:10462000D70190FF1FC01F928F9383E79AE09F935B +:104630008F930E944D0A0F900F900F900F90089546 +:1046400040910E0150910F0120E030E0FA01E20F9D +:10465000F31F9281981301C012822F5F3F4F2E30BB +:104660003105A1F7089581E090E0E0910E01F0910D +:104670000F01E80FF91F1082019680319105A9F70B +:1046800008959091D601982B9093D6010895809526 +:104690009091D60198239093D60108951092D60157 +:1046A00008959091D501982B9093D5010895809508 +:1046B0009091D50198239093D50108951092D5013A +:1046C00008958093C40108951092C4010895409103 +:1046D0000E0150910F0120E030E080E0FA01E20F7E +:1046E000F31F918191118F5F2F5F3F4F2F30310565 +:1046F000A9F70895E0910E01F0910F018091D60184 +:104700008083E0910E01F0910F0180819091D5019D +:10471000892B80839091C401992361F0E0910E016F +:10472000F0910F018081892B80830E946723811182 +:104730001092C40180910E0190910F010C947E178C +:1047400090933B0180933A0108958295982F9C7C29 +:1047500096959695837344E0849F90011124922B43 +:10476000892F8A7A86959575990F892B08951F93BD +:10477000CF93DF931F92CDB7DEB799830E94A52315 +:10478000182F9981892F0E94A523212F30E0322FE5 +:104790002227A901482BCA010F90DF91CF911F91C9 +:1047A00008958091F001843009F11092D80120E43D +:1047B00088E190E00FB6F894A895809360000FBE52 +:1047C0002093600083B7817F846083BF83B781605B +:1047D00083BF7894889583B78E7F83BF88E10FB6B7 +:1047E000F89480936000109260000FBE08950895C1 +:1047F0000895CF930E94F7230E94180C0E94F8237B +:10480000C0E08C2F0E94430D811105C0CF5FCE30D8 +:10481000C1F780E001C081E0CF9108950C94351D6F +:1048200082E084BD93E095BD9AEF97BD80936E00C2 +:1048300008952FB7F8948091D9019091DA01A09151 +:10484000DB01B091DC012FBF0895CF92DF92EF9290 +:10485000FF920F931F932FB7F8944091D901509175 +:10486000DA016091DB017091DC012FBF6A017B01ED +:10487000EE24FF248C0120E030E0C016D106E206D1 +:10488000F30610F441505109481B590BCA011F91FE +:104890000F91FF90EF90DF90CF9008951F920F92AD +:1048A0000FB60F9211248F939F93AF93BF93809174 +:1048B000D9019091DA01A091DB01B091DC01019660 +:1048C000A11DB11D8093D9019093DA01A093DB0162 +:1048D000B093DC01BF91AF919F918F910F900FBE6C +:1048E0000F901F9018950E947914F8942FEF87EA83 +:1048F00091E6215080409040E1F700C0000087E041 +:1049000090EBDC018093F9019093FA01A093FB01F5 +:10491000B093FC012CE088E190E00FB6F894A895E4 +:10492000809360000FBE20936000FFCFEF92FF9254 +:104930000F931F93CF93DF93E82EF12C8F2D0E94BE +:10494000430DC0E0D0E0082F10E098010C2E02C00B +:10495000359527950A94E2F720FD05C02196C630CB +:10496000D10599F709C06C2F7F2D80E00E94500E71 +:10497000E812F4CF81E005C0F3948EE0F812DECFA8 +:1049800080E0DF91CF911F910F91FF90EF900895FC +:10499000CF93C82F8CE20E949624882321F08C2F7D +:1049A000CF910C94962480E0CF910895CF930E94EC +:1049B0002326811102C00E94092686EB9AE00E94FC +:1049C000B409C5E6C15049F00E94180C8FE39CE978 +:1049D0000197F1F700C00000F5CF8FEA9AE00E943E +:1049E000B40989E20E94C824811111C18AE20E949F +:1049F000C82481110E94092685E00E94C8248111E3 +:104A00000E9473240E942E268093D70187E00E9483 +:104A1000C824882399F18BE10E94C824882351F08F +:104A20009091D70191FB882780F921E0822780FBB4 +:104A300091F922C08EE00E94C824882351F0909101 +:104A4000D70192FB882780F921E0822780FB92F929 +:104A500013C080E10E94C8249091D701882341F0BF +:104A600093FB882780F921E0822780FB93F904C01B +:104A7000892F809580FB90F99093D7018091D70181 +:104A80000E9432260E9440268093EA0180EE0E9416 +:104A9000C824882341F08091EA01982F909590FBDB +:104AA00080F98093EA0189E30E94C824882359F0A1 +:104AB0009091EA0191FB882780F921E0822780FB11 +:104AC00091F99093EA0182EE0E94C824882359F05C +:104AD0009091EA0192FB882780F921E0822780FBF0 +:104AE00092F99093EA0186EE0E94C824882359F037 +:104AF0009091EA0193FB882780F921E0822780FBCF +:104B000093F99093EA0183EE0E94C824882359F018 +:104B10009091EA0194FB882780F921E0822780FBAD +:104B200094F99093EA0185E30E94C824882359F000 +:104B30009091EA0195FB882780F921E0822780FB8C +:104B400095F99093EA0181E30E94C824882359F0E3 +:104B50009091EA0196FB882780F921E0822780FB6B +:104B600096F99093EA0181E10E94C824882359F0C4 +:104B70009091EA0197FB882780F921E0822780FB4A +:104B800097F99093EA018091EA010E94442680916E +:104B9000EA0187FB882780F980930D0187E20E9454 +:104BA000C824C82F8EE10E94C8248111C2608FE101 +:104BB0000E94C8248111C46080E20E94C82481112F +:104BC000C86081E20E94C8248111C06182E20E9413 +:104BD000C8248111C06283E20E94C8248111C0648C +:104BE00084E20E94C824882311F0C06802C0CC234C +:104BF00029F08C2F0E943B266C2F03C00E94372681 +:104C0000682F70E080E090E0CF910C942F21CF913D +:104C100008956DEE7EEF80E090E00E94FE2F60E050 +:104C200082E090E00E94F02F60E083E090E00E943C +:104C3000F02F60E084E090E00E94F02F60E085E0DB +:104C400090E00C94F02F80E090E00E94EA2F21E0A9 +:104C50008D3E9E4F09F020E0822F089582E090E083 +:104C60000C94E22F682F82E090E00C94F02F83E008 +:104C700090E00C94E22F682F83E090E00C94F02FEA +:104C800084E090E00C94E22F682F84E090E00C9494 +:104C9000F02F8091DF0180FF0BC06091130185E050 +:104CA000689FB001112475956795759567952AC021 +:104CB00081FF09C06091130185E0689FB001112454 +:104CC000759567951FC082FF07C06091130185E04D +:104CD000689FB001112416C04091E0014423C9F03F +:104CE00060911201461788F72091130185E0289FF3 +:104CF00090011124429FC001439F900D112470E048 +:104D00000E94B42F6038710540F46115710539F0C7 +:104D100002C065E070E0862F08958FE7089581E076 +:104D200008958091DF0180FF08C06091110170E05B +:104D3000759567957595679521C081FF06C060914F +:104D4000110170E07595679519C082FF04C06091EC +:104D5000110170E010C08091E0018823C1F06091E2 +:104D600010018617A0F790911101989FC00111249E +:104D700070E00E94B42F6038710528F46115710548 +:104D800021F0862F08958FE7089581E0089561E06E +:104D900070E0F4CF803F21F40E944926819504C041 +:104DA000813F29F40E9449268093E3010895823FC0 +:104DB00021F40E944926819504C0833F29F40E9472 +:104DC00049268093E2010895893F19F40E949126B3 +:104DD00005C08A3F31F40E94912681958093E401B9 +:104DE00008958B3F21F40E949126819504C08C3F49 +:104DF00029F40E9491268093E5010895843F21F4CF +:104E00008091E101816017C0853F21F48091E1012B +:104E1000826011C0863F21F48091E10184600BC063 +:104E2000873F21F48091E101886005C0883F31F41B +:104E30008091E10180618093E10108958D3F21F42B +:104E40008091DF0181600BC08E3F21F48091DF01F2 +:104E5000826005C08F3F29F48091DF0184608093D8 +:104E6000DF010895803F39F48091E30187FF6CC032 +:104E70001092E30169C0813F29F48091E301181683 +:104E8000BCF362C09091E201823F29F497FF5CC0BD +:104E90001092E20159C0833F19F41916CCF354C0A3 +:104EA000893F41F48091E40118160CF04DC0109236 +:104EB000E4014AC08A3F29F48091E40187FF44C09D +:104EC000F6CF8B3F39F48091E50187FF3DC010920A +:104ED000E5013AC08C3F29F48091E5011816BCF336 +:104EE00033C0843F21F48091E1018E7F17C0853F5C +:104EF00021F48091E1018D7F11C0863F21F48091E2 +:104F0000E1018B7F0BC0873F21F48091E101877F16 +:104F100005C0883F31F48091E1018F7E8093E101EB +:104F200013C08D3F21F48091DF018E7F0BC08E3F37 +:104F300021F48091DF018D7F05C08F3F29F480919E +:104F4000DF018B7F8093DF018091E20181110EC030 +:104F50008091E30181110AC08091E401811106C0B2 +:104F60008091E501811102C01092E00108958091C5 +:104F7000D70183FF7EC082EF9AE00E94B40980913E +:104F8000E1011F928F938DEE9AE09F938F930E9481 +:104F90004D0A8BEE9AE00E94B4092091E201822F23 +:104FA000992787FD90959F932F9388EE9AE09F9382 +:104FB0008F930E944D0A86EE9AE00E94B4092091D8 +:104FC000E301822F992787FD90959F932F9383EE7E +:104FD0009AE09F938F930E944D0A81EE9AE00E947F +:104FE000B4092091E401822F992787FD90959F9322 +:104FF0002F938EED9AE09F938F930E944D0A8CED34 +:105000009AE00E94B4092091E501822F992787FD3B +:1050100090959F932F9389ED9AE09F938F930E9491 +:105020004D0A86ED9AE00E94B4098091E0011F923A +:105030008F9383ED9AE09F938F930E944D0A81EDA9 +:105040009AE00E94B4098091DF011F928F938EEC49 +:105050009AE09F938F930E944D0A8BEC9AE00E94F6 +:10506000B4098DB79EB74C960FB6F8949EBF0FBE8D +:105070008DBF81EE91E00E94C3170E941924909386 +:10508000DE018093DD0108951F93CF93DF9380911C +:10509000DD019091DE010E9425244091E00144232E +:1050A00021F02091140130E006C0209115015AE052 +:1050B000259F900111248217930708F482C08091E4 +:1050C000E2011091E301D091E401C091E501811169 +:1050D00007C0111105C0D11103C0CC2309F471C060 +:1050E0004F3F19F04F5F4093E001181624F40E94DF +:1050F00049268093E2018091E20187FF05C00E946A +:10510000492681958093E201111624F40E944926D4 +:105110008093E3018091E30187FF05C00E94492647 +:1051200081958093E3016091E201662339F110914A +:10513000E301112319F1772767FD7095872F972FCA +:105140000E94B92E23E333E343E35FE30E941D2F64 +:105150000E94862E6093E201612F772767FD70958C +:10516000872F972F0E94B92E23E333E343E35FE3B6 +:105170000E941D2F0E94862E6093E3011D1624F4C9 +:105180000E9491268093E4018091E40187FF05C08D +:105190000E94912681958093E4011C1624F40E94BC +:1051A00091268093E5018091E50187FF05C00E946B +:1051B000912681958093E501DF91CF911F910C9409 +:1051C000B727DF91CF911F910895E1EEF1E085E0DF +:1051D000DF011D928A95E9F71092E0011092DF013C +:1051E000089585E19DE00E94B4091F9281E08F93AC +:1051F0001F9285E08F9387EC9CE09F938F930E9492 +:105200004D0A0F900F900F900F900F900F900895F0 +:105210008330E9F128F4813061F0823009F108959A +:10522000853009F462C008F449C0863009F474C0BE +:10523000089520911501862F90E0820F911D8F3FD8 +:10524000910520F4620F6093150103C08FEF8093E6 +:105250001501809115011F928F9380E09CE072C030 +:1052600020911401862F90E0820F911D8F3F9105B0 +:1052700020F4620F6093140103C08FEF8093140138 +:10528000809114011F928F938EEE9BE05BC0209162 +:105290001301862F90E0820F911D8F3F910520F41E +:1052A000620F6093130103C08FEF8093130180910D +:1052B00013011F928F938BED9BE044C0209112014C +:1052C000862F90E0820F911D8F3F910520F4620F91 +:1052D0006093120103C08FEF80931201809112013D +:1052E0001F928F9386EC9BE02DC020911101862F99 +:1052F00090E0820F911D8F3F910520F4620F609323 +:10530000110103C08FEF80931101809111011F9251 +:105310008F938DEA9BE016C020911001862F90E0BC +:10532000820F911D8F3F910520F4620F6093100151 +:1053300003C08FEF80931001809110011F928F9313 +:1053400082E99BE09F938F930E944D0A0F900F90EC +:105350000F900F900895833081F128F4813059F037 +:105360008230D1F00895853009F449C0B8F1863013 +:1053700009F456C0089580911501681720F4861B22 +:105380008093150102C010921501809115011F92A2 +:105390008F9383E89BE054C080911401681720F438 +:1053A000861B8093140102C0109214018091140195 +:1053B0001F928F9381E79BE043C080911301681790 +:1053C00020F4861B8093130102C010921301809178 +:1053D00013011F928F938EE59BE032C080911201E2 +:1053E000681720F4861B8093120102C010921201EC +:1053F000809112011F928F9389E49BE021C08091DC +:105400001101681720F4861B8093110102C01092CD +:105410001101809111011F928F9380E39BE010C0D6 +:1054200080911001681720F4861B8093100102C040 +:1054300010921001809110011F928F9385E19BE0E3 +:105440009F938F930E944D0A0F900F900F900F9093 +:105450000895CF93C82F1F928F932AE13EE03F9388 +:105460002F930E944D0A61E070E080E090E004C05C +:10547000660F771F881F991FCA95D2F70E942F21A8 +:105480000F900F900F900F90CF910C94351DCF93EC +:105490008D3109F465C0B0F58E3009F4CBC100F54B +:1054A000873009F49BC1A8F4863009F06AC2809164 +:1054B000D701817F8E7F8093D7018FE19EE00E948C +:1054C000B40984E692E10E94B40981E08093E70187 +:1054D00080C1883009F44FC08B3009F47CC151C2BF +:1054E000863109F4EDC138F4803109F4B6C1813157 +:1054F00009F42DC246C2893109F4CBC18B3109F4BC +:1055000086C13FC2853309F434C248F4873209F4B6 +:1055100030C208F430C2893209F42BC232C283345B +:1055200038F48A3308F029C2883309F454C129C2F7 +:10553000833409F41EC2883409F023C20E94351D49 +:1055400083E592E10E94B4099FEF23ED80E391503F +:1055500020408040E1F700C000000E94732439C160 +:1055600083E792E10E94B4090E94402E0E947217C4 +:105570000E94B00F2EC188E692E10E94B40980E338 +:1055800090E10E94B4090E9437261F928F938DE20A +:1055900090E19F938F930E944D0A8BE290E10E94CD +:1055A000B4090E942E26C82F88E190E10E94B40918 +:1055B0001F92CF9323E130E13F932F930E944D0A36 +:1055C00081E190E10E94B40987E090E10E94B40972 +:1055D0008C2F81701F928F9324E030E13F932F93A3 +:1055E0000E944D0A82E090E10E94B40988EF9FE09A +:1055F0000E94B409C1FB882780F91F928F9325EF81 +:105600003FE03F932F930E944D0A83EF9FE00E945B +:10561000B40987EE9FE00E94B409C2FB882780F995 +:105620001F928F9324EE3FE03F932F930E944D0AE9 +:1056300082EE9FE00E94B40989ED9FE00E94B409C8 +:10564000C3FBCC27C0F91F92CF9386ED9FE09F93B9 +:105650008F930E944D0A84ED9FE00E94B4090E943E +:105660004026C82F80EC9FE00E94B4091F92CF9380 +:105670002BEB3FE03F932F930E944D0A89EB9FE075 +:105680000E94B40980EA9FE00E94B4098C2F8170C7 +:105690001F928F932DE93FE03F932F930E944D0A75 +:1056A0008DB79EB780960FB6F8949EBF0FBE8DBF84 +:1056B0008BE99FE00E94B40984E89FE00E94B4094E +:1056C000C1FB882780F91F928F9321E83FE03F9329 +:1056D0002F930E944D0A8FE79FE00E94B4098DE648 +:1056E0009FE00E94B409C2FB882780F91F928F9324 +:1056F0002AE63FE03F932F930E944D0A88E69FE001 +:105700000E94B40986E59FE00E94B409C3FB882784 +:1057100080F91F928F9323E53FE03F932F930E94E0 +:105720004D0A81E59FE00E94B40987E49FE00E9452 +:10573000B409C4FB882780F91F928F9324E43FE0CB +:105740003F932F930E944D0A82E49FE00E94B40988 +:1057500080E39FE00E94B409C5FB882780F91F926F +:105760008F932DE23FE03F932F930E944D0A8BE2EF +:105770009FE00E94B4098FE09FE00E94B409C6FB3D +:10578000882780F91F928F932CE03FE03F932F935F +:105790000E944D0A8AE09FE00E94B40982E09FE0E7 +:1057A0000E94B409C7FBCC27C0F91F92CF938FEF9B +:1057B0009EE09F938F930E944D0A8DEF9EE00E9482 +:1057C000B4098DB79EB74C960FB6F8949EBF0FBE26 +:1057D0008DBFC1E0DBC086E49EE058C08091D70158 +:1057E000C82FC17080FF09C086E492E10E94B4090D +:1057F0008091D701817F8E7F44C08AE392E10E942D +:10580000B4098091D70181608093D701E2CF809164 +:10581000D70181FBCC27C0F991E0C927C0FB81F9F2 +:105820008093D701CC2319F08DE292E125C08FE15E +:1058300092E12CC08091D70182FBCC27C0F991E086 +:10584000C927C0FB82F98093D701CC2319F080E1EE +:1058500092E112C080E092E119C08091D70183FBF0 +:10586000CC27C0F991E0C927C0FB83F98093D70109 +:10587000CC2351F084EF91E10E94B4098091D701CB +:1058800081608093D70182C087EE91E10E94B409C4 +:10589000A0CF88ED91E10E94B4098CEA91E10E94C9 +:1058A000B4098FE691E10E94B40982E491E10E947B +:1058B000B4098EEF90E10E94B40980ED90E1E6CF4B +:1058C00082EC90E10E94B4090E9472171F928F939C +:1058D00088EA90E19F938F930E944D0A80910C017A +:1058E0001F928F9381E990E19F938F930E944D0ABD +:1058F00080916E011F928F938EE790E19F938F931B +:105900000E944D0A80910D011F928F938BE690E1CA +:105910009F938F930E944D0A8091D9019091DA0153 +:10592000A091DB01B091DC01BF93AF939F938F9364 +:1059300087E590E19F938F930E944D0A8DB79EB7A4 +:1059400046960FB6F8949EBF0FBE8DBF42CF0E9401 +:10595000351DC0910D0181E0C827C0930D01CC23F6 +:1059600029F08DE490E10E94B40910C082E490E136 +:105970008DCF80E003C08D5101C089530E94292A38 +:1059800028CF80E490E10E94B409C0E08C2FCF9131 +:10599000089580E0089580E00895CF93C82F809106 +:1059A000E701813081F020F0823009F44CC042C11F +:1059B000A0910E01B0910F018C91813169F082327A +:1059C00009F03AC109C0A0910E01B0910F018C916C +:1059D000813111F0823249F48C2F0E94C92C81113F +:1059E0002FC08C2F0E94472A2CC08C2F0E94CB2CBA +:1059F000811126C0C431E1F070F4CB3081F0C031A8 +:105A0000D1F40E94F12882E19EE00E94B40982E074 +:105A10008093E70115C0C93259F0C83361F48FE1B2 +:105A20009EE00E94B40986E19EE00E94B40908C08D +:105A30001092E70103C180E19EE00E94B409FEC01C +:105A400081E08170FDC0C43220F5CE3108F0C0C0C5 +:105A5000CB3099F1C8F4C73009F0D2C08AE0809306 +:105A6000150194E19093140193E0909313018093B6 +:105A7000120188E08093110188E28093100186EB87 +:105A80009CE00E94B409BFC0C33149F1C431C1F0E8 +:105A9000B7C0CB3409F4A9C028F4C93289F0C8339F +:105AA00061F0AEC0C13509F49EC0C23509F499C099 +:105AB000CE3409F0A5C06AE09EC00E94F128A3C0C0 +:105AC0008091E601882319F01092E6019CC083ECD6 +:105AD0009CE00E94B40981E08093E701B1C08DE9A8 +:105AE0009CE00E94B4098BE89CE00E94B40980917C +:105AF00015011F928F9388E89CE09F938F930E94DB +:105B00004D0A86E89CE00E94B40984E79CE00E946C +:105B1000B409809114011F928F9381E79CE09F93B9 +:105B20008F930E944D0A8FE69CE00E94B40980E6A4 +:105B30009CE00E94B409809113011F928F938DE520 +:105B40009CE09F938F930E944D0A8BE59CE00E94FE +:105B5000B4098AE49CE00E94B409809112011F926A +:105B60008F9387E49CE09F938F930E944D0A85E476 +:105B70009CE00E94B40980E39CE00E94B4098091FB +:105B800011011F928F938DE29CE09F938F930E944F +:105B90004D0A8BE29CE00E94B40984E19CE00E94E3 +:105BA000B409809110011F928F9381E19CE09F9333 +:105BB0008F930E944D0A8FE09CE00E94B4098DB73C +:105BC0009EB748960FB6F8949EBF0FBE8DBF1BC000 +:105BD000CE51EC2FF0E0E15DFE4F80818093E60135 +:105BE00012C061E003C061E006C06AE08091E60196 +:105BF0000E94082908C08091E6010E94AB2903C0D9 +:105C000084EB9CE013C08091E601882369F01F9229 +:105C10008F938EEA9CE09F938F930E944D0A0F9082 +:105C20000F900F900F9004C08BEA9CE00E94B40983 +:105C300081E006C01092E70180E002C080E001CF61 +:105C4000CF910895E1E8F0E08081886080838081D1 +:105C5000816080838FB7F89493E09093890090EDF2 +:105C6000909388008FBF0895EFE6F0E08081826016 +:105C700080830895EFE6F0E080818D7F8083089532 +:105C8000EFE6F0E0808192E08927808308951F92FB +:105C90000F920FB60F9211242F933F934F935F9360 +:105CA0006F937F938F939F93AF93BF93EF93FF93E4 +:105CB0008091E8019091E90101969093E901809328 +:105CC000E801811103C082E00E94B00FE091E90178 +:105CD000E695E695F0E0ED57FD4EE4918091E80100 +:105CE0008E1303C080E00E94B00FFF91EF91BF912F +:105CF000AF919F918F917F916F915F914F913F9164 +:105D00002F910F900FBE0F901F90189504D068949C +:105D1000B1118DC0089570D088F09F5790F0B92FC1 +:105D20009927B751A0F0D1F0660F771F881F991FF0 +:105D30001AF0BA95C9F712C0B13081F077D0B1E04E +:105D4000089574C0672F782F8827B85F39F0B93F5E +:105D5000CCF3869577956795B395D9F73EF49095F2 +:105D60008095709561957F4F8F4F9F4F0895E89470 +:105D700009C097FB3EF490958095709561957F4F93 +:105D80008F4F9F4F9923A9F0F92F96E9BB27939541 +:105D9000F695879577956795B795F111F8CFFAF451 +:105DA000BB0F11F460FF1BC06F5F7F4F8F4F9F4F82 +:105DB00016C0882311F096E911C0772321F09EE8E0 +:105DC000872F762F05C0662371F096E8862F70E046 +:105DD00060E02AF09A95660F771F881FDAF7880F20 +:105DE0009695879597F9089557FD9058440F551F3C +:105DF00059F05F3F71F04795880F97FB991F61F04D +:105E00009F3F79F087950895121613061406551FC3 +:105E1000F2CF4695F1DF08C0161617061806991F2F +:105E2000F1CF86957105610508940895E894BB2724 +:105E300066277727CB0197F908950BD078C069D0F2 +:105E400028F06ED018F0952309F05AC05FC01124D5 +:105E5000EECFCADFA0F3959FD1F3950F50E0551F09 +:105E6000629FF001729FBB27F00DB11D639FAA27AF +:105E7000F00DB11DAA1F649F6627B00DA11D661FFE +:105E8000829F2227B00DA11D621F739FB00DA11D1F +:105E9000621F839FA00D611D221F749F3327A00DD9 +:105EA000611D231F849F600D211D822F762F6A2F75 +:105EB00011249F5750408AF0E1F088234AF0EE0FFA +:105EC000FF1FBB1F661F771F881F91505040A9F707 +:105ED0009E3F510570F014C0AACF5F3FECF3983E8F +:105EE000DCF3869577956795B795F795E7959F5F6E +:105EF000C1F7FE2B880F911D9695879597F9089508 +:105F000097F99F6780E870E060E008959FEF80EC6C +:105F1000089500240A94161617061806090608950F +:105F200000240A9412161306140605060895092E75 +:105F30000394000C11F4882352F0BB0F40F4BF2BE4 +:105F400011F460FF04C06F5F7F4F8F4F9F4F089524 +:105F5000991B79E004C0991F961708F0961B881FBB +:105F60007A95C9F78095089597FB072E16F400944B +:105F700007D077FD09D00E94CE2F07FC05D03EF454 +:105F8000909581959F4F0895709561957F4F0895E5 +:105F9000EE0FFF1F0590F491E02D0994AA1BBB1B87 +:105FA00051E107C0AA1FBB1FA617B70710F0A61B19 +:105FB000B70B881F991F5A95A9F780959095BC013A +:105FC000CD010895F999FECF92BD81BDF89A992728 +:105FD00080B50895A8E1B0E042E050E00C940530AF +:105FE000262FF999FECF1FBA92BD81BD20BD0FB6F5 +:105FF000F894FA9AF99A0FBE019608950E94F02F2C +:10600000272F0C94F12FDC01CB01FC01F999FECF75 +:1060100006C0F2BDE1BDF89A319600B40D92415030 +:0A6020005040B8F70895F894FFCF40 +:10602A002002B10FA2107F104B1018100101C501F8 +:10603A0028080A03140A3F4D362039000AB3097D9D +:10604A00095D0924099708B008C908E2080209018C +:0A605A000203040506070809000010 +:00000001FF From 606d63e602bf5a01912a4c5b9c8536c705bcc777 Mon Sep 17 00:00:00 2001 From: DidierLoiseau Date: Sat, 23 Jan 2016 19:18:37 +0100 Subject: [PATCH 18/19] Fixed small issues in README.md - fixed rendering of the basic layer on GitHub - fixed missing Calculator, Mail & Browser Home keys in Fn Layer --- keyboard/ergodox_ez/keymaps/tm2030/README.md | 58 ++++++++++---------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/README.md b/keyboard/ergodox_ez/keymaps/tm2030/README.md index 55942709..7ea175b4 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/README.md +++ b/keyboard/ergodox_ez/keymaps/tm2030/README.md @@ -15,34 +15,36 @@ Some keys had to be moved around to fit into the ErgoDox, especially the `F1`-`F ## Base Layer This is the default layer, close to the TM with the following differences: -- Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere. -- Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`. -- `shuffle` and `desktop` are not supported. -- `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination). -- `right-ctrl` is moved on `End`. -- `]` is moved in place of the dash (`-`). -- Dash (`-`) and `=` are moved on bottom right row. -- Arrows and `PgUp`/`PgDn` are moved on the thumbs. - - ,--------------------------------------------------. ,--------------------------------------------------. - | ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | - |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - | Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | - |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| - | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| - |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| - | LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| - `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| - `-----------------------------------' `-----------------------------------' - ,--------------. ,-------------. - |Esc/Alt| num | | Left |Right | - ,------+-------+------| |------+------+------. - | | | PgUp | | Up | | | - |Space |LShift |------| |------|RShift|Space | - | | | PgDn | | Down | | | - `---------------------' `--------------------' + - Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere. + - Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`. + - `shuffle` and `desktop` are not supported. + - `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination). + - `right-ctrl` is moved on `End`. + - `]` is moved in place of the dash (`-`). + - Dash (`-`) and `=` are moved on bottom right row. + - Arrows and `PgUp`/`PgDn` are moved on the thumbs. + +``` +,--------------------------------------------------. ,--------------------------------------------------. +| ` | 1 | 2 | 3 | 4 | 5 | Del | | Del | 6 | 7 | 8 | 9 | 0 | ] | +|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| +| Tab | Q | W | E | R | T |Backsp| |Backsp| Y | U | I | O | P | [ | +|--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------| +| LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | '/Shift| +|--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------| +| LShift | Z | X | C | V | B | | | | N | M | , | . | / | \/Shift| +`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + |LCtrl | fn | LGui | Play |App/Alt| | RAlt | - | Home | = |End/Ctl| + `-----------------------------------' `-----------------------------------' + ,--------------. ,-------------. + |Esc/Alt| num | | Left |Right | + ,------+-------+------| |------+------+------. + | | | PgUp | | Up | | | + |Space |LShift |------| |------|RShift|Space | + | | | PgDn | | Down | | | + `---------------------' `--------------------' +``` ### Layer Switching - Use `num` to toggle the Numeric Layer. @@ -118,7 +120,7 @@ Note: the `eject` key does not work due to jackhumbert/qmk_firmware#82 |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| | | | | | | |VolUp | | | | | | | | Pause | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - | | | | | | |------| |------| | | | | | | + | | | | Calc | Mail |Browsr|------| |------| | | | | | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | | | cut | copy |paste | Mute |VolDn | | | | | | | | | `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' From 3e31fa4c50562b0d441262963ac6489351e7035d Mon Sep 17 00:00:00 2001 From: DidierLoiseau Date: Sat, 23 Jan 2016 19:29:14 +0100 Subject: [PATCH 19/19] Fixed rendering of the Layer Switching section --- keyboard/ergodox_ez/keymaps/tm2030/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/README.md b/keyboard/ergodox_ez/keymaps/tm2030/README.md index 7ea175b4..096939dc 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/README.md +++ b/keyboard/ergodox_ez/keymaps/tm2030/README.md @@ -48,7 +48,8 @@ This is the default layer, close to the TM with the following differences: ### Layer Switching - Use `num` to toggle the Numeric Layer. -- Hold `fn` to temporarily activate the Numeric & Fn Layers +- Hold `fn` to temporarily activate the Numeric & Fn Layers. + As on the original TM 2030, when `num` layer is activated, holding `fn` disables it but enables the other `fn` keys. ## Dvorak Layer