From f20e17a19e80c31c30cd5bd4a566075babd2e564 Mon Sep 17 00:00:00 2001 From: jorge Date: Sat, 28 May 2016 09:57:25 +0200 Subject: [PATCH 1/2] ergodox_ez: added dvorak_spanish layout --- .../keymaps/dvorak_spanish/README.md | 99 ++++++ .../keymaps/dvorak_spanish/keymap.c | 284 ++++++++++++++++++ 2 files changed, 383 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md create mode 100755 keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md b/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md new file mode 100644 index 0000000000..e075e3cd7d --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md @@ -0,0 +1,99 @@ +# Ergodox Spanish Dvorak Layout + * See spanish dvorak layout [here](http://djelibeibi.unex.es/dvorak/) + * Software layout must be set to SPANISH QWERTY to work properly + +## Keymap Layers + - L0: spanish dvorak with some customizations (see layout below) + - L1: auxiliary keys (includes qwerty shortcuts, numpad...) + - L2: qwerty layout with customizations + + +### Keymap 0: Base layer +Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+| F1/~L1 |   .  |   ,  |   Ñ  |   P  |   Y  |MEH_T |           |  L1  |   F  |   G  |   C  |   H  |   L  |ALL_T/+ |
+|--------+------+------+------+------+------| DEL  |           | ~L1  |------+------+------+------+------+--------|
+|Esc/Ctrl|   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   R  |   T  |   N  |   S  |'/RCtrl |
+|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+| {/LSft |   -  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |F5/CAG|F6/~L1|       |F7/~L1|F8/CAG|
+                                ,------|------|------|       |------+--------+------.
+                                |      |      |F4/CA |       |F11/CA|        |      |
+                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+                                |      |      |F3/SA |       |F12/SA|        |      |
+                                '--------------------'       '----------------------'
+ CAG = CTRL-ALT-GUI
+  CA = CTRL-ALT
+  SA = SHIFT-ALT
+
+
+ +### Keymap 1: Aux layer + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP|           | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  '^    |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
+|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+|CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |      |      |       |      | Play |
+                                ,------|------|------|       |------+------+------.
+                                |      |      |      |       | VolUp|      |      |
+                                | Lclk | Rclk |------|       |------| Prev | Next |
+                                |      |      |  L2  |       | VolDn|      |      |
+                                '--------------------'       '--------------------'
+
+
+ +### Keymap 2: QWERTY layer + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
+|--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
+|Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
+|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+| {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |F5/CAG| TRANS|       | TRANS|F8/CAG|
+                                ,------|------|------|       |------+--------+------.
+                                |      |      |F4/CA |       |F11/CA|        |      |
+                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+                                |      |      | TRANS|       |F12/SA|        |      |
+                                '--------------------'       '----------------------'
+ CAG = CTRL-ALT-GUI
+  CA = CTRL-ALT
+  SA = SHIFT-ALT
+
+
+ + +## Generation of .hex file +> [Download scripts from here](https://github.com/johgh/keyboard/tree/master/ergodox) + +> Execute install.sh and generate.sh scripts. + +> Flash with `teensy_loader` binary (should be installed from previous step) diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c b/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c new file mode 100755 index 0000000000..33a0480c94 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c @@ -0,0 +1,284 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +/****************************************************************************************** + * SPANISH DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/) + * Layer 1: auxiliary keys + * Layer 2: full qwerty layout + ****************************************************************************************** + * IMPORTANT: Software layout must be set to SPANISH QWERTY to work properly + *****************************************************************************************/ + +// LAYERS +#define BASE 0 // dvorak layout (default) +#define AUX 1 // auxiliary keys +#define QWERTY 2 // qwerty layout + +// MACROS +#define OBRACE 0 // key { or shift +#define CBRACE 1 // key } or shift +#define OBRACK 2 // key [ or left alt +#define CBRACK 3 // key ] or left alt +#define CAPS 4 // caps lock + +// LEDS +#define USB_LED_NUM_LOCK 0 +#define USB_LED_CAPS_LOCK 1 +#define USB_LED_SCROLL_LOCK 2 +#define USB_LED_COMPOSE 3 +#define USB_LED_KANA 4 + +// TIMERS +#define KEY_TAP_FAST 85 +#define KEY_TAP_SLOW 95 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Base layer + * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ | + * |--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------| + * |Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl | + * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| + * | {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |F5/CAG|F6/~L1| |F7/~L1|F8/CAG| + * ,------|------|------| |------+--------+------. + * | | |F4/CA | |F11/CA| | | + * | ENTER| TAB |------| |------| BSPC | SPACE| + * | | |F3/SA | |F12/SA| | | + * `--------------------' `----------------------' + * CAG = CTRL-ALT-GUI + * CA = CTRL-ALT + * SA = SHIFT-ALT + * + */ +[BASE] = KEYMAP( + // left hand + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, + LT(AUX, KC_F1), KC_DOT, KC_COMM,KC_SCLN,KC_P, KC_Y, MEH_T(KC_DEL), + CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, + M(OBRACE), KC_SLSH,KC_Q, KC_J, KC_K, KC_X, KC_LGUI, + M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, + LCAG_T(KC_F5), LT(AUX, KC_F6), + MT(MOD_LALT | MOD_LCTL, KC_F4), + KC_ENT,KC_TAB,MT((MOD_LALT | MOD_LSFT), KC_F3), + // right hand + KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_FN1, KC_F, KC_G, KC_C, KC_H, KC_L, ALL_T(KC_RBRACKET), + KC_D, KC_R, KC_T, KC_N, KC_S, CTL_T(KC_QUOTE), + KC_RALT, KC_B, KC_M, KC_W, KC_V, KC_Z, M(CBRACE), + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), + LT(AUX, KC_F7), LCAG_T(KC_F8), + MT(MOD_LALT | MOD_LCTL, KC_F11), + MT(MOD_LALT | MOD_LSFT, KC_F12),KC_BSPC, KC_SPC + ), +/* Keymap 1: Aux layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | SLEEP | PWR | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | < | > | MsUp | | | | | ~L0 | | 7 | 8 | 9 | * | `^ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | 4 | 5 | 6 | + | Ç | + * |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------| + * |CAPSLOCK| | | | | | | | | | 1 | 2 | 3 | / | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V| | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | Play | + * ,------|------|------| |------+------+------. + * | | | | | VolUp| | | + * | Lclk | Rclk |------| |------| Prev | Next | + * | | | L2 | | VolDn| | | + * `--------------------' `--------------------' + */ +[AUX] = KEYMAP( + // left hand + KC_NO , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_SLEP, + KC_TRNS, KC_NONUS_BSLASH, LSFT(KC_NONUS_BSLASH), KC_MS_U, KC_NO, KC_NO, KC_NO, + KC_NO , KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO , + M(CAPS), KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO, + LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), + KC_NO , KC_TRNS, + KC_NO, + KC_BTN1, KC_BTN2, TG(QWERTY), + // right hand + KC_PWR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_LBRACKET, + KC_NO, KC_4, KC_5, KC_6, KC_PPLS, KC_BSLASH, + KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_NO, + KC_NO ,KC_DOT, KC_0, KC_PEQL, KC_NO, + KC_TRNS, KC_MPLY, + KC_VOLU, + KC_VOLD, KC_MPRV, KC_MNXT +), +/* Keymap 2: QWERTY layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TRANS | Q | W | E | R | T |MEH_T | | TRANS| Y | U | I | O | P |ALL_T/+ | + * |--------+------+------+------+------+------| DEL | | |------+------+------+------+------+--------| + * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | Ñ |'/RCtrl | + * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| + * | {/LSft | Z | X | C | V | B | | | | N | M | , | . | - | }/RSft | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |F5/CAG| TRANS| | TRANS|F8/CAG| + * ,------|------|------| |------+--------+------. + * | | |F4/CA | |F11/CA| | | + * | ENTER| TAB |------| |------| BSPC | SPACE| + * | | | TRANS| |F12/SA| | | + * `--------------------' `----------------------' + * CAG = CTRL-ALT-GUI + * CA = CTRL-ALT + * SA = SHIFT-ALT + * + */ +[QWERTY] = KEYMAP( + // left hand + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, + KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_DEL), + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + M(OBRACE), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, + M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, + LCAG_T(KC_F5), KC_TRNS, + MT(MOD_LALT | MOD_LCTL, KC_F4), + KC_ENT,KC_TAB,KC_TRNS, + // right hand + KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, ALL_T(KC_RBRACKET), + KC_H, KC_J, KC_K, KC_L, KC_SCLN,CTL_T(KC_QUOTE), + KC_RALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,M(CBRACE), + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), + KC_TRNS, LCAG_T(KC_F8), + MT(MOD_LALT | MOD_LCTL, KC_F11), + MT(MOD_LALT | MOD_LSFT, KC_F12),KC_BSPC, KC_SPC +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux) +}; + +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case OBRACE: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_QUOTE); + unregister_code(KC_QUOTE); + unregister_code(KC_RALT); + } + } + break; + } + case CBRACE: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_BSLS); + unregister_code(KC_BSLS); + unregister_code(KC_RALT); + } + } + break; + } + case OBRACK: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_LBRACKET); + unregister_code(KC_LBRACKET); + unregister_code(KC_RALT); + } + } + break; + } + case CBRACK: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_RBRACKET); + unregister_code(KC_RBRACKET); + unregister_code(KC_RALT); + } + } + break; + } + case CAPS: { + if (record->event.pressed) { + register_code(KC_CAPSLOCK); + } else { + unregister_code(KC_CAPSLOCK); + } + 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) { + case 1: + ergodox_right_led_3_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + + // Turn the caps lock led on + if (host_keyboard_leds() & (1< Date: Sat, 28 May 2016 09:57:25 +0200 Subject: [PATCH 2/2] ergodox_ez: added dvorak_spanish layout --- .../keymaps/dvorak_spanish/README.md | 99 + .../keymaps/dvorak_spanish/dvorak_spanish.hex | 5371 +++++++++++++++++ .../keymaps/dvorak_spanish/keymap.c | 284 + 3 files changed, 5754 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex create mode 100755 keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md b/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md new file mode 100644 index 0000000000..e075e3cd7d --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/README.md @@ -0,0 +1,99 @@ +# Ergodox Spanish Dvorak Layout + * See spanish dvorak layout [here](http://djelibeibi.unex.es/dvorak/) + * Software layout must be set to SPANISH QWERTY to work properly + +## Keymap Layers + - L0: spanish dvorak with some customizations (see layout below) + - L1: auxiliary keys (includes qwerty shortcuts, numpad...) + - L2: qwerty layout with customizations + + +### Keymap 0: Base layer +Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+| F1/~L1 |   .  |   ,  |   Ñ  |   P  |   Y  |MEH_T |           |  L1  |   F  |   G  |   C  |   H  |   L  |ALL_T/+ |
+|--------+------+------+------+------+------| DEL  |           | ~L1  |------+------+------+------+------+--------|
+|Esc/Ctrl|   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   R  |   T  |   N  |   S  |'/RCtrl |
+|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+| {/LSft |   -  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |F5/CAG|F6/~L1|       |F7/~L1|F8/CAG|
+                                ,------|------|------|       |------+--------+------.
+                                |      |      |F4/CA |       |F11/CA|        |      |
+                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+                                |      |      |F3/SA |       |F12/SA|        |      |
+                                '--------------------'       '----------------------'
+ CAG = CTRL-ALT-GUI
+  CA = CTRL-ALT
+  SA = SHIFT-ALT
+
+
+ +### Keymap 1: Aux layer + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP|           | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  '^    |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
+|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+|CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |      |      |       |      | Play |
+                                ,------|------|------|       |------+------+------.
+                                |      |      |      |       | VolUp|      |      |
+                                | Lclk | Rclk |------|       |------| Prev | Next |
+                                |      |      |  L2  |       | VolDn|      |      |
+                                '--------------------'       '--------------------'
+
+
+ +### Keymap 2: QWERTY layer + +

+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
+|--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
+|Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
+|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+| {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |F5/CAG| TRANS|       | TRANS|F8/CAG|
+                                ,------|------|------|       |------+--------+------.
+                                |      |      |F4/CA |       |F11/CA|        |      |
+                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+                                |      |      | TRANS|       |F12/SA|        |      |
+                                '--------------------'       '----------------------'
+ CAG = CTRL-ALT-GUI
+  CA = CTRL-ALT
+  SA = SHIFT-ALT
+
+
+ + +## Generation of .hex file +> [Download scripts from here](https://github.com/johgh/keyboard/tree/master/ergodox) + +> Execute install.sh and generate.sh scripts. + +> Flash with `teensy_loader` binary (should be installed from previous step) diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex b/keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex new file mode 100644 index 0000000000..9d41778092 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/dvorak_spanish.hex @@ -0,0 +1,5371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + keyboard/dvorak_spanish.hex at master · johgh/keyboard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+ +
+
+ + + +
    + +
  • +
    + +
    + + + + Unwatch + + + + +
    + +
    +
    +
    +
  • + +
  • + +
    + +
    + + +
    +
    + + +
    + +
  • + +
  • +
    + +
    + +
  • +
+ +

+ + /keyboard + +

+ +
+ +
+ +
+
+ + + + + + + +
+ +
+ + + +
+ +
+ + Find file + + +
+ +
+ + +
+ Fetching contributors… +
+ +
+ + Cannot retrieve contributors at this time +
+
+
+
+
+ +
+ Raw + Blame + History +
+ + +
+ +
+ +
+ +
+ 1172 lines (1171 sloc) + + 51.4 KB +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:100000000C9465020C94AC020C94AC020C94AC02FF
:100010000C94AC020C94AC020C94AC020C94AC02A8
:100020000C94AC020C94AC020C94FC0C0C94CE0D11
:100030000C94AC020C94AC020C94AC020C94AC0288
:100040000C94AC020C949A220C94AC020C94AC026A
:100050000C94AC020C942A1C0C94AC020C94AC02D0
:100060000C94AC020C94AC020C94AC020C94AC0258
:100070000C94AC020C94AC020C94AC020C94AC0248
:100080000C94AC020C94AC020C94AC020C94AC0238
:100090000C94AC020C94AC020C94AC020C94AC0228
:1000A0000C94AC020C94AC020C94AC023B0E5D0EB2
:1000B0004B0F5D0E4B0FA20EC50E4B0F1A0F2D0FDF
:1000C00019121912561256129912D712F014F0146E
:1000D000F012F014F113F113C414F014F014DB1443
:1000E0000000F0A135003A81297100300230000093
:1000F0001E003700040038004A003C761F0036001E
:10010000120014004E002B002000330008000D00E8
:100110004B0028002100130018000E004D003D7513
:1001200022001C000C001B0000003E7D64004C7788
:100130000000E30000003F812E00C1000000E60047
:100140000000408123000900070005000000417DF8
:1001500024000A0015001000500044752500060018
:1001600017001A0051002C0026000B001100190086
:1001700052002A0027000F0016001D004F00457690
:100180002D00307F34710130033000000000010089
:1001900000000430160100003A0064000000000076
:1001A0001D0102543B006402F20000001B01F50037
:1001B0003C00F000F10000000601F4003D000000EA
:1001C000F3000000190100003E00000000000000E4
:1001D00000000000A6000000000000000000010078
:1001E000A500010000004600000001003F000000E3
:1001F000000000000000AE004000240021001E00AE
:100200000000A9004100250022001F003700AB00BC
:1002100042002600230020002700AC0043005500C8
:10022000570054006700AA0044002F00310000006E
:10023000000000003500010029710030023000008C
:100240001E00140004001D004A0001001F001A00D7
:1002500016001B004E002B002000080007000600BF
:100260004B00280021001500090019004D003D75C4
:10027000220017000A00050000003E7D64004C7754
:100280000000E300000001002E0001000000E60075
:100290000000010023001C000B0011000000417D44
:1002A000240018000D0010005000447525000C00BB
:1002B0000E00360051002C00260012000F003700FF
:1002C00052002A0027001300330038004F00457603
:1002D0002D00307F347101300330000016034500DB
:1002E000720067006F0044006F0078002000450036
:1002F0005A00000016034500720067006F004400BA
:100300006F007800200045005A0000000403090433
:1003100009026D00040100A0FA09040000010301B4
:100320000100092111010001223F00070581030896
:10033000000A090401000103010200092111010062
:1003400001224D000705820308000A09040200018A
:100350000300000009211101000122360007058376
:100360000308000A09040300010300000009211129
:100370000100012239000705840310000112011059
:100380000100000008EDFE07130100010200010555
:10039000010906A101050719E029E71500250195C6
:1003A0000875018102050819012905950575019156
:1003B000029501750391010507190029771500259C
:1003C00001957875018102C005010980A1018502AE
:1003D00016010026B7001A01002AB7007510950112
:1003E0008100C0050C0901A1018503160100269CAE
:1003F000021A01002A9C02751095018100C00501B6
:100400000902A1010901A100050919012905150029
:10041000250195057501810295017503810105018D
:10042000093009311581257F950275088106093843
:100430001581257F950175088106050C0A3802157E
:1004400081257F950175088106C0C005010906A1B7
:1004500001050719E029E7150025019508750181B7
:100460000295017508810105081901290595057591
:100470000191029501750391010507190029FF15E6
:100480000025FF950675088100C0000000000000EF
:100490000000000000010204060A0F17202C3A4A4F
:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
:1004B000B39D87715D4A3A2C20170F0A060402018A
:1004C0000000000000000000000011241FBECFEF5C
:1004D000DAE0DEBFCDBF04B603FE27C08091F00195
:1004E0009091F101A091F201B091F3018730904B0E
:1004F000A740B04BD1F41092F0011092F10110928C
:10050000F2011092F30114BE84B7877F84BF0FB647
:10051000F894A895809160008861809360001092A3
:1005200060000FBEE0E0FFE3099511E0A0E0B1E05C
:10053000E0EEF8E402C005900D92A433B107D9F7BC
:1005400021E0A4E3B1E001C01D92A03FB207E1F7B2
:100550000E943D0A0C946E240C940000FC01623051
:1005600009F445C028F4662351F0613041F182C09E
:10057000633009F45BC0643009F472C07BC08281CF
:10058000882341F00E94F41B90933501809334013D
:1005900085EE6AC085EE0E947511809134019091BC
:1005A00035010E94001C8F3591050CF063C086EE6A
:1005B0000E94AD1084E30E94AD1084E34DC082819F
:1005C0008111E0CF85EE0E947511809134019091E8
:1005D00035010E94001C8F3591050CF04BC086EE52
:1005E0000E94AD1081E30E94AD1081E335C082818D
:1005F000882341F00E94F41B9093350180933401CD
:1006000082EE32C082EE0E94751180913401909189
:1006100035010E94001C8F35910564F586EE0E941D
:10062000AD108FE20E94AD108FE216C08281811161
:10063000E1CF82EE0E9475118091340190913501D5
:100640000E94001C8F359105ACF486EE0E94AD101F
:1006500080E30E94AD1080E30E94751186EE08C011
:100660008281882321F089E30E94AD1003C089E3D1
:100670000E94751180E090E0089508956091B301A3
:100680007091B4018091B5019091B6010E94531B05
:1006900056985E9825982D9826982E9827982F98EA
:1006A000813029F0823029F4269A2E9A02C0279AA6
:1006B0002F9A0E94840F81FF02C0259A2D9A0895D7
:1006C0000C943E0356985E9825982D9826982E985F
:1006D00027982F988FEF90E090938900809388005F
:1006E00090938B0080938A0090938D0080938C0070
:1006F000259A2D9A2FEF80E792E02150804090407C
:10070000E1F700C00000269A2E9A2FEF80E792E0D2
:10071000215080409040E1F700C00000279A2F9AB6
:100720002FEF80E792E0215080409040E1F700C039
:10073000000025982D982FEF80E792E0215080400F
:100740009040E1F700C0000026982E982FEF80E738
:1007500092E0215080409040E1F700C000002798CF
:100760002F9856985E9825982D9826982E98279819
:100770002F98089589EA8093800089E08093810012
:1007800024982C983F988AB18F748AB96E98479AAA
:100790008BB1806B8BB9769A0E9462030C943D03F7
:1007A00080E2809300018091360181110EC00E9489
:1007B0001F0481E0809336012FEF83ED90E32150F9
:1007C00080409040E1F700C0000080E40E942504D2
:1007D0008093000181112EC00E944F04809300017C
:1007E000811128C00E944F0480930001811122C012
:1007F0008FE30E944F048093000181111BC00E946F
:10080000470480E40E94250480930001811112C0F6
:100810008CE00E944F048093000181110BC00E9464
:100820004F0480930001811105C08FE30E944F04A3
:10083000809300010E944704809100010895109266
:10084000B9008AE08093B800089594EA9093BC00C0
:100850009091BC0097FFFCCF9091B900987F9830A1
:1008600021F0903111F081E008958093BB0084E87D
:100870008093BC008091BC0087FFFCCF8091B900C1
:10088000887F883111F0803471F780E0089584E921
:100890008093BC008091BC0084FDFCCF08958093C0
:1008A000BB0084E88093BC008091BC0087FFFCCF34
:1008B0009091B900987F81E0983209F480E0089522
:1008C00084E88093BC008091BC0087FFFCCF8091BE
:1008D000BB00089580910001811115C080E40E9441
:1008E00025048093000181110CC082E10E944F0415
:1008F00080930001811105C08FEF0E944F04809307
:1009000000010E94470484B1807F84B985B1807F53
:1009100085B98AB1837F8AB98BB1837F8BB93E98C1
:10092000469808950E94D003809300010E946A04B3
:1009300080B38C7080BB81B3836F81BBA8E3B1E0CF
:10094000E6E4F1E08EE08E0F11921D928E13FCCF43
:100950000C94BA03BF92CF92DF92EF92FF920F9363
:100960001F93CF93DF9380910001882379F08091CA
:1009700037018F5F80933701811108C00E94D00337
:1009800080930001811102C00E94620308E311E01C
:10099000C0E0D0E0DD24D39482E0C82EEE24E394BE
:1009A000F12CC730D10500F580910001811164C0A0
:1009B00080E40E94250480930001811112C082E12D
:1009C0000E944F048093000181110BC0C7010C2EBF
:1009D00001C0880F0A94EAF780950E944F04809323
:1009E00000010E94470448C0CA30A1F028F4C83072
:1009F00059F0C93061F005C0CC3089F070F0CD30CD
:100A000089F0209A289810C0219A29980DC0229A1E
:100A10002A980AC0239A2B9807C0529A01C0539A69
:100A20005B9802C03E9A469890EA9A95F1F79FB17A
:100A3000799902C082E001C080E091709D25982BD9
:100A40007C9902C084E001C080E0892B7D9902C0BE
:100A500038E001C030E0832B7E9902C020E101C064
:100A600020E0822B9FB19095991F9927991F92950D
:100A7000990F907E892B0FC080910001811149C090
:100A800080E40E94250480930001882379F1B12C31
:100A90000E9447048B2DF8019081981719F08083EC
:100AA000C09201010E946A0421960F5F1F4FCE3051
:100AB000D10509F076CF80910101882361F1815041
:100AC00080930101882339F08FE99FE00197F1F7C6
:100AD00000C0000020C0A6E4B1E0E8E3F1E0CF01EF
:100AE000825F91919D938E13FCCF15C083E10E948C
:100AF0004F04809300018111CACF81E40E94250434
:100B0000809300018111C3CF0E946004B82EB0947D
:100B1000BFCF80E0C0CF0E94600381E0DF91CF9122
:100B20001F910F91FF90EF90DF90CF90BF900895AD
:100B3000E82FF0E0EA5BFE4F808108950895089564
:100B400096E0799FF001112494E5899FE00DF11D55
:100B50001124E60FF11DEE0FFF1FEC51FF4F8591A1
:100B600094910895880F991FFC01E05AF0408591F7
:100B700094910895880F991FFC01E052FF4F8591D1
:100B8000949108950F931F93CF93DF93EC018115F8
:100B9000904350F5C11580E2D80708F0B3C0CB3BB5
:100BA000D10590F4C83AD10508F05AC0C53AD1052C
:100BB00008F04BC0C430D10508F0BBC1219709F043
:100BC000B5C101E010E0F5C1CF3FD10511F008F04B
:100BD000B0C1C03FD10508F092C0CE01805E91093E
:100BE000089708F4A6C1A2C1C11591E5D907A8F4D8
:100BF000C23020E5D20708F09EC0C11580E5D807B5
:100C000009F485C008F091C0C11520E4D20708F0AE
:100C10008DC1DD278E01106CCCC1C11580E8D807CD
:100C200058F4C11590E7D90708F07CC1C11520E63A
:100C3000D20708F422C17AC1C11580E9D80708F0AB
:100C400075C1DF708E01106AB4C1C53AD10509F4CF
:100C500072C1C63AD10509F071C102E810E4A9C118
:100C6000C83AD10509F46DC1C93AD10509F46CC17E
:100C7000CA3AD10509F46BC1CB3AD10509F46AC16E
:100C8000CC3AD10509F469C1CD3AD10509F468C15E
:100C9000C03BD10509F467C1CE3AD10509F466C15C
:100CA000CF3AD10509F465C1C13BD10509F464C14E
:100CB000C23BD10509F463C1C33BD10509F462C14C
:100CC000C43BD10509F461C1C53BD10509F460C13C
:100CD000C63BD10509F45FC1C73BD10509F45EC12C
:100CE000C83BD10509F45DC1C93BD10509F45CC11C
:100CF000CA3BD10509F45BC100E014E45AC18E017E
:100D0000106557C1CE019F700E94BA0553C10E9461
:100D100014159FEF24E38CE0915020408040E1F7D0
:100D200000C000000E944F1C44C18091CF0181602F
:100D30008093CF013EC10E94F81D811102C00E9424
:100D4000DE1D0E94151E90E09093F0018093EF014C
:100D5000C23090E5D90721F48091EF01816086C00F
:100D6000C43020E5D20721F48091EF0182607EC07B
:100D7000C63080E5D80721F48091EF01846076C009
:100D8000C83090E5D90719F48091EF0127C0CA3027
:100D900020E5D20721F48091EF01806167C0CC305B
:100DA00080E5D80721F48091EF0180625FC0CE30EA
:100DB00090E5D90721F48091EF01806457C0C031DC
:100DC00020E5D20721F48091EF0180684FC0C23145
:100DD00080E5D80729F48091EF018460886046C0DF
:100DE000C33090E5D90721F48091EF018E7F3EC09A
:100DF000C53020E5D20721F48091EF018D7F36C008
:100E0000C73080E5D80721F48091EF018B7F2EC099
:100E1000C93090E5D90719F48091EF0126C0CB3095
:100E200020E5D20721F48091EF018F7E1FC0CD30E5
:100E300080E5D80721F48091EF018F7D17C0CF3076
:100E400090E5D90721F48091EF018F7B0FC0C1316C
:100E500020E5D20721F48091EF018F7707C0C331DD
:100E6000D04531F48091EF018B7F877F8093EF0134
:100E70008091EF010E94191E9CC08D2F99278F70C1
:100E8000992781309105D9F49E012370332702C040
:100E9000880F991F2A95E2F79C688E0144E0000FA5
:100EA000111F4A95E1F700271370802B912B53E017
:100EB000CC0FDD1F5A95E1F7C076DD272FC08230B9
:100EC000910531F4DC2FCC278E01016F106A71C0BF
:100ED0008330910569F4CE018370992701E010E019
:100EE00002C0000F111F8A95E2F7C8019C680FC06D
:100EF000049709F05EC0CE018370992701E010E0ED
:100F000002C0000F111F8A95E2F7C8019A6823E01A
:100F1000CC0FDD1F2A95E1F7C07ED7708C010C2B1A
:100F20001D2B47C0DF708E01106243C000E010E04F
:100F300040C08E013EC001E810E43BC003E810E46D
:100F400038C002EE14E435C009EE14E432C00AEEF3
:100F500014E42FC005EB14E42CC006EB14E429C004
:100F600007EB14E426C00CEC14E423C00DEC14E4ED
:100F700020C003E815E41DC00AE815E41AC002E920
:100F800015E417C004E915E414C001E216E411C029
:100F900003E216E40EC004E216E40BC005E216E418
:100FA00008C006E216E405C007E216E402C00AE241
:100FB00016E4C801DF91CF911F910F91089596E03B
:100FC000799FF001112494E5899FE00DF11D112412
:100FD000E60FF11DEE0FFF1FEC51FF4F859194912D
:100FE000803E9105E0F4803C910558F581339105F0
:100FF00009F46FC048F48932910509F463C08A325C
:10100000910509F46DC072C089339105E9F0823809
:101010009105D1F08533910509F44DC067C0833E39
:10102000910581F138F4803E9105B9F0823E910539
:10103000D9F05CC0863E910561F1873E9105A1F132
:1010400055C00E94B20508952091EF0120FD02C015
:1010500021FF4CC080EE90E049C08091EF0180FFFD
:10106000F9CF89E390E042C08091EF0182FF0EC08A
:101070008091EF0184FF03C080E090E037C083EEF1
:1010800090E034C08091EF0182FFF2CF82EE90E0D9
:101090002DC08091EF0183FF0BC08091EF0184FD93
:1010A000EBCF87EE90E022C08091EF0183FFF5CF78
:1010B00086EE90E01BC08091EF0185FF07C089E2BA
:1010C00090E014C08091EF0185FFF9CF85E390E0B7
:1010D0000DC08091EF0186FF07C08AE290E006C054
:1010E0008091EF0186FFF9CF81E390E00E94C20575
:1010F000089508950C947908809164010895CF9320
:10110000DF9300D01F92CDB7DEB79C018091E6013E
:10111000843019F593E099833B832A839093E90007
:101120008FEF9091E800815095FD06C095ED9A955E
:10113000F1F700008111F5CF8091E80085FF0DC027
:1011400040E050E063E070E0CE0101960E94EC0ABE
:101150008091E8008E778093E8000F900F900F90B9
:10116000DF91CF910895CF93DF9300D01F92CDB739
:10117000DEB72091E601243021F522E029839B830C
:101180008A8383E08093E9008FEF9091E80081509B
:1011900095FD06C095ED9A95F1F700008111F5CF08
:1011A0008091E80085FF0DC040E050E063E070E012
:1011B000CE0101960E94EC0A8091E8008E77809320
:1011C000E8000F900F900F90DF91CF91089520913C
:1011D000E6012430F1F422E02093E9002FEF309172
:1011E000E800215035FD06C035ED3A95F1F70000D5
:1011F0002111F5CF2091E80025FF0BC040E050E021
:1012000065E070E00E94EC0A8091E8008E778093A0
:10121000E8000895CF93DF93EC019091E6019430BC
:1012200009F046C080910C018823D9F080910D010E
:101230008823B9F09093E9008FEF9091E8008150F6
:1012400095FD06C095E19A95F1F700008111F5CF63
:101250008091E80085FF2CC040E050E060E170E044
:1012600017C081E08093E9008FEF9091E8008150F2
:1012700095FD06C095ED9A95F1F700008111F5CF27
:101280008091E80085FF14C040E050E068E070E025
:10129000CE010E94EC0A8091E8008E778093E800EE
:1012A00080E1FE01A4E5B1E001900D928A95E1F79D
:1012B000DF91CF9108958091E501811109C00E94CD
:1012C000810C0E94DE0C8091E20084608093E20039
:1012D00008951092E501089508950C9487220E94C4
:1012E000E51B0E948D220E94840F0C947A0842E034
:1012F00061EC81E00E94FB0B42E061EC82E00E9425
:10130000FB0B42E061EC83E00E94FB0B42E161ECED
:1013100084E00C94FB0B8091E801833009F455C004
:1013200030F4813071F0823009F48EC008958A3033
:1013300009F47AC08B3009F460C0893009F09CC090
:1013400020C08091E701813A09F096C08091E800C1
:10135000877F8093E8008091EB019091EC01892BCD
:1013600021F460E184E591E003C060E080E090E07A
:1013700070E00E94370B8091E8008B778093E80043
:1013800008958091E701813209F076C08091EB01E8
:101390009091EC01009719F0039709F06DC08091CE
:1013A000E800877F8093E8008091E80082FD05C017
:1013B0008091E6018111F8CF5FC08091F1008093A8
:1013C00064018091E8008B7753C08091E701813AF6
:1013D00009F052C08091EB019091EC01892B09F04A
:1013E0004BC08091E800877F8093E8008091E800FF
:1013F00080FFFCCF80910C0136C08091E7018132E3
:10140000D9F58091EB019091EC01892BA9F58091A0
:10141000E800877F8093E8000E94300C8091E9010A
:1014200080930C010C9414158091E701813221F511
:101430008091E800877F8093E8000E94300C8091C3
:10144000EA018093650108958091E701813AA1F452
:101450008091E800877F8093E8008091E80080FF1A
:10146000FCCF809165018093F1008091E8008E7738
:101470008093E8000C94300C089584B7877F84BF74
:101480000FB6F894A8958091600088618093600001
:10149000109260000FBE90E080E80FB6F894809341
:1014A0006100909361000FBE0E94D30F0E94810CD7
:1014B0000E94DE0C8091E20084608093E2007894C8
:1014C0000E94640F0E94D50F82E091E00E947F0F7E
:1014D0000E9475228091E601853069F40E94A31B69
:1014E0008091E4018823B1F30E94D11B882391F3FA
:1014F0000E94D60AEFCF0E94DB0FECCF292F3327B3
:1015000023303105C9F064F42130310581F02230F7
:10151000310509F043C08DE690E020E133E042C0A0
:1015200021323105F1F02232310541F137C082E13B
:1015300090E02DE733E036C099278130910541F0E6
:101540008230910541F0892B49F5ECE0F3E005C0CC
:10155000E4EFF2E002C0ECEDF2E0849190E09F0154
:1015600021C06430D8F4E62FF0E0EE0FFF1FEE5DEF
:10157000FE4F2081318189E090E014C0643070F426
:1015800070E0FB01EE0FFF1FE65EFE4F2081318110
:10159000FB01EA5EFE4F808190E004C080E090E0B5
:1015A00020E030E0FA0131832083089580E189BD95
:1015B00082E189BD09B400FEFDCF8091D8008F7D06
:1015C0008093D8008091E00082608093E000809159
:1015D000E00081FDFCCF0895CF92DF92EF92FF9261
:1015E0000F931F93CF93DF93EC018B016A010E944D
:1015F0004F0C811133C0C114D10439F0F601808140
:101600009181081B190BC80FD91FE12CF12C011572
:10161000110519F18091E80085FD16C08091E80060
:101620008E778093E800C114D10449F0F6018081DF
:101630009181E80EF91EF182E08285E00FC00E94E0
:101640004F0C882321F30AC089918093F100015047
:101650001109FFEFEF1AFF0ADACF80E0DF91CF9197
:101660001F910F91FF90EF90DF90CF900895209100
:10167000ED013091EE012617370748F0611571052D
:1016800039F42091E8002E772093E80001C0B901D9
:1016900040E061157105A9F12091E601222309F4CA
:1016A00043C0253009F442C02091E80023FD40C02A
:1016B0002091E80022FD32C02091E80020FFE9CF10
:1016C0004091F3002091F20030E0342BFC01CF0177
:1016D0006115710559F02830310540F481918093EE
:1016E000F100615071092F5F3F4FF1CF41E0283089
:1016F000310509F040E02091E8002E772093E800C2
:10170000C8CF4111C9CF0AC08091E601882361F09A
:10171000853061F08091E80083FD0AC08091E80087
:1017200082FFF2CF80E0089582E0089583E008957B
:1017300081E008952091ED013091EE0126173707E1
:1017400048F06115710539F42091E8002E77209357
:10175000E80001C0B901FC0120E06115710591F1BB
:101760008091E601882309F440C0853009F43FC028
:101770008091E80083FD3DC08091E80082FD2FC08C
:101780008091E80080FFE9CF2091F3008091F20082
:1017900090E0922B6115710559F08830910540F465
:1017A00024912093F1003196615071090196F2CF96
:1017B00021E0089709F020E08091E8008E7780937F
:1017C000E800CBCF2111CCCF0AC08091E60188235D
:1017D00061F0853061F08091E80083FD0AC080915E
:1017E000E80082FFF2CF80E0089582E0089583E070
:1017F000089581E00895982F973058F59093E90067
:10180000981739F07091EC002091ED005091F000A4
:1018100003C0242F762F50E021FF19C03091EB0038
:101820003E7F3093EB003091ED003D7F3093ED0033
:101830003091EB0031603093EB007093EC0020931B
:10184000ED005093F0002091EE0027FF07C09F5F4E
:10185000D3CF8F708093E90081E0089580E00895F0
:101860008091E70187FF11C08091E80082FD05C0EB
:101870008091E6018111F8CF11C08091E8008B774B
:101880000BC08091E601882349F08091E80080FF39
:10189000F8CF8091E8008E778093E800089520913A
:1018A000E4003091E50095E64091EC00842F8170D2
:1018B00040FF22C08091E80080FD1CC08091E601BD
:1018C000882391F0853091F08091EB0085FD10C068
:1018D0004091E4005091E5004217530729F39A0123
:1018E000915011F784E0089582E0089583E008950F
:1018F00081E0089580E008954091E80042FFDECF46
:1019000008950E94EF0C0E94F70CE0EEF0E0808159
:1019100081608083E8EDF0E080818F77808319BC5F
:10192000A7EDB0E08C918E7F8C9380818F7E808339
:101930001092E50108950F931F93CF93DF930E94B8
:10194000EF0C0E94F70CC8EDD0E088818F77888378
:1019500088818068888388818F7D888319BC1092F4
:10196000E6011092E2011092E4011092E30100EE10
:1019700010E0F80180818B7F80838881816088837B
:1019800042E060E080E00E94FB0BE1EEF0E080814D
:101990008E7F8083E2EEF0E08081816080838081B1
:1019A00088608083F80180818E7F80838881806158
:1019B0008883DF91CF911F910F910895E8EDF0E0BA
:1019C00080818F7E8083E7EDF0E08081816080837D
:1019D00084E082BF81E08093E5010C949B0CE8EDEC
:1019E000F0E080818E7F80831092E2000895109253
:1019F000DA001092E10008951F920F920FB60F9235
:101A000011242F933F934F935F936F937F938F9303
:101A10009F93AF93BF93EF93FF938091E10082FF79
:101A20000BC08091E20082FF07C08091E1008B7FB4
:101A30008093E1000E94630F8091DA0080FF1FC055
:101A40008091D80080FF1BC08091DA008E7F809348
:101A5000DA008091D90080FF0DC080E189BD82E16C
:101A600089BD09B400FEFDCF81E08093E6010E94AC
:101A70005B0905C019BC1092E6010E9469098091BA
:101A8000E10080FF19C08091E20080FF15C08091C5
:101A9000E2008E7F8093E2008091E200806180937B
:101AA000E2008091D80080628093D80019BC85E064
:101AB0008093E6010E946D098091E10084FF30C0AF
:101AC0008091E20084FF2CC080E189BD82E189BD64
:101AD00009B400FEFDCF8091D8008F7D8093D8009F
:101AE0008091E1008F7E8093E1008091E2008F7E03
:101AF0008093E2008091E20081608093E200809117
:101B0000E201882311F084E007C08091E30087FDA3
:101B100002C081E001C083E08093E6010E946F096A
:101B20008091E10083FF29C08091E20083FF25C0FE
:101B30008091E100877F8093E10082E08093E6015D
:101B40001092E2018091E1008E7F8093E10080910C
:101B5000E2008E7F8093E2008091E20080618093BA
:101B6000E20042E060E080E00E94FB0B8091F00028
:101B700088608093F0000E946C09FF91EF91BF9103
:101B8000AF919F918F917F916F915F914F913F9115
:101B90002F910F900FBE0F901F9018951F920F92CC
:101BA0000FB60F9211242F933F934F935F936F9330
:101BB0007F938F939F93AF93BF93CF93DF93EF93D5
:101BC000FF93C091E900CF708091EC00D82FD170C5
:101BD00080FDD0E81092E9008091F000877F80932B
:101BE000F00078940E94120E1092E9008091F000AB
:101BF00088608093F000CD2BCF70C093E900FF91F7
:101C0000EF91DF91CF91BF91AF919F918F917F9194
:101C10006F915F914F913F912F910F900FBE0F9059
:101C20001F9018951F93CF93DF93CDB7DEB7AA9778
:101C30000FB6F894DEBF0FBECDBFE7EEF1E088E04F
:101C40008E0F9091F10091938E13FBCF0E948B0920
:101C50008091E80083FF1FC18091E7019091E80126
:101C6000492F50E04A30510508F015C1FA01EA5AEF
:101C7000FF4F0C941E24803881F0823809F00BC18C
:101C80008091EB018F708093E9008091EB0085FBE0
:101C9000882780F91092E90006C08091E3019091B5
:101CA000E401911182609091E800977F9093E800A1
:101CB0008093F1001092F100C8C0282F2D7F09F009
:101CC000EAC0882319F0823061F0E5C08091E90113
:101CD000813009F0E0C0933009F080E08093E401A6
:101CE0002BC08091E901811127C08091EB018F7099
:101CF00009F4D1C08093E9002091EB0020FF1CC0C3
:101D0000933021F48091EB00806214C09091EB003D
:101D100090619093EB0021E030E0A90102C0440FF4
:101D2000551F8A95E2F74093EA001092EA008091ED
:101D3000EB0088608093EB001092E9008091E8004E
:101D4000877F86C08111A7C01091E9011F7780911C
:101D5000E3008078812B8093E3008091E800877F07
:101D60008093E8000E94300C8091E80080FFFCCF57
:101D70008091E30080688093E300111102C082E04B
:101D800001C083E08093E60186C08058823008F06D
:101D900082C08091E9019091EA018C3D53E0950762
:101DA00079F583E08A838AE289834FB7F894DE016C
:101DB000139620E03EE051E2E32FF0E0509357000D
:101DC000E49120FF03C0E295EF703F5FEF708E2F2C
:101DD00090E0EA3010F0C79601C0C0968D939D93B5
:101DE0002F5F243149F74FBF8091E800877F8093B0
:101DF000E8006AE270E0CE0101960E94370B14C041
:101E0000AE014F5F5F4F6091EB010E947E0ABC0103
:101E1000892B09F440C09091E800977F9093E800E7
:101E200089819A810E949A0B8091E8008B77809338
:101E3000E80031C0803879F58091E800877F809391
:101E4000E8008091E2018093F1008091E8008E77B4
:101E50008093E8000E94300C1EC081111CC090913C
:101E6000E9019230C0F48091E800877F8093E80018
:101E70009093E2010E94300C8091E201811106C032
:101E80008091E30087FD02C081E001C084E080937F
:101E9000E6010E9477098091E80083FF0AC08091E3
:101EA000E800877F8093E8008091EB008062809358
:101EB000EB00AA960FB6F894DEBF0FBECDBFDF9140
:101EC000CF911F9108950895CF938091E6018823C3
:101ED000A1F0C091E900CF709091EC00892F817042
:101EE00090FD80E8C82B1092E9008091E80083FD06
:101EF0000E94120ECF70C093E900CF910895909385
:101F00006B0180936A010895E0916A01F0916B0181
:101F1000309721F00190F081E02D099480E0089540
:101F2000E0916A01F0916B01309721F00280F3811A
:101F3000E02D09940895E0916A01F0916B013097CA
:101F400021F00480F581E02D099408952091680125
:101F5000309169018217930771F090936901809322
:101F60006801E0916A01F0916B01309721F00680E1
:101F7000F781E02D09940895209166013091670161
:101F80008217930771F09093670180936601E09147
:101F90006A01F0916B01309721F00084F185E02D0A
:101FA0000994089508950C94D20F0E94EB1B0E948F
:101FB00092040C94B11CCF92DF92EF92FF920F9398
:101FC0001F93CF93DF93CDB7DEB72B970FB6F8945F
:101FD000DEBF0FBECDBF0E94AA048DE6C82E81E0F1
:101FE000D82E00E010E0E02E802F0E949805F60128
:101FF00041916F01F42EF826B1F40F5F1F4F0E30A0
:10200000110589F78FEF89838A831B820E94F41B55
:102010008160782F9D838C8349815A816B818D816A
:102020000E947E1040C09091CF0191FF04C08B8729
:102030000E949E058B8520E030E04F2D50E0922FCE
:10204000BA01022E02C0759567950A94E2F760FF07
:1020500024C02E83EF8221E030E0690102C0CC0C65
:10206000DD1C9A95E2F790E08C219D21892B09F4E3
:1020700020E028870E94F41B8160782F9A87898747
:102080004E815F8168858A850E947E10F801E35940
:10209000FE4F8081C826C08206C02F5F3F4F26308A
:1020A000310569F6AACF0E94981F10916C010E9419
:1020B000840F1817A1F00E94840F80936C012B9657
:1020C0000FB6F894DEBF0FBECDBFDF91CF911F9149
:1020D0000F91FF90EF90DF90CF900C947A082B96A1
:1020E0000FB6F894DEBF0FBECDBFDF91CF911F9129
:1020F0000F91FF90EF90DF90CF900895CF93DF93F3
:10210000CDB7DEB72B970FB6F894DEBF0FBECDBFAD
:102110004F83588769877A878B87DE01119686E01F
:10212000FD0111928A95E9F785E0FE01379601904D
:102130000D928A95E1F749815A816B817C818D816D
:102140009E810E94AE172B960FB6F894DEBF0FBE8D
:10215000CDBFDF91CF9108950895CF93882309F4DF
:10216000C2C0C82F823859F40E94840F81FDBBC0C1
:1021700089E30E94571A0E94241B89E30CC083380C
:1021800079F40E94840F80FDAEC083E50E94571A47
:102190000E94241B83E50E94991ACF910C94241B62
:1021A000843859F40E94840F82FD9DC087E40E9408
:1021B000571A0E94241B87E4EECF8CEF8C0F813AD4
:1021C00048F48C2F0E94DA2181118DC08C2F0E943F
:1021D000571AE3CF80E28C0F883048F4C77081E053
:1021E00001C0880FCA95EAF70E94DD1AD6CF8BE5A9
:1021F0008C0F833078F4C53A29F0C63A31F083E881
:1022000090E005C081E890E002C082E890E0CF91C4
:102210000C94A60F88E58C0F833108F064C0C83A8F
:1022200039F1C93A41F1CA3A49F1CB3A51F1CC3AC4
:1022300059F1CD3A61F1C03B69F1CE3A71F1CF3A33
:1022400079F1C13B81F1C23B89F1C33B91F1C43BC0
:1022500099F1C53BA1F1C63BA9F1C73BB1F1C83B20
:10226000B9F1C93BC1F1CA3BC9F180E090E038C087
:1022700082EE90E035C089EE90E032C08AEE90E0C8
:102280002FC085EB90E02CC086EB90E029C087EB57
:1022900090E026C08CEC90E023C08DEC90E020C054
:1022A00083E891E01DC08AE891E01AC082E991E0DC
:1022B00017C084E991E014C081E292E011C083E28A
:1022C00092E00EC084E292E00BC085E292E008C08A
:1022D00086E292E005C087E292E002C08AE292E0E4
:1022E000CF910C94BC0FCF910895882309F44BC073
:1022F000823859F40E94840F81FF45C089E30E940F
:10230000571A0E94241B89E30CC0833871F40E9481
:10231000840F80FF38C083E50E94571A0E94241B57
:1023200083E50E94991A0C94241B843859F40E9466
:10233000840F82FF28C087E40E94571A0E94241B42
:1023400087E4EFCF9CEF980F913A58F390E2980F03
:10235000983050F4877091E001C0990F8A95EAF7A0
:10236000892F0E94E31ADFCF9BE5980F933020F46A
:1023700080E090E00C94A60F885A833120F480E02E
:1023800090E00C94BC0F0895882321F00E94DD1A80
:102390000C94241B0895882321F00E94E31A0C94C6
:1023A000241B0895BF92CF92DF92EF92FF920F937A
:1023B0001F93CF93DF9300D000D000D0CDB7DEB70E
:1023C00025E0FC01DE01119601900D922A95E1F7BE
:1023D000FC01D08011810281258122952F704381DB
:1023E0005481452B09F4FCC21F3F21F4FFEFDF1697
:1023F00009F4F6C27C012E830E94AC10D9821A83A4
:1024000069817A81802F0E94531A182FB92E0E9459
:10241000081A0E94CF182E81002319F00E94FA1A80
:102420002E81EB2DE295EF70F0E0E05AFF4F0C9417
:102430001E248B2D807F9B2D9F70F92E882319F0F1
:10244000F29480EFF822002389F0FF2009F475C28E
:1024500080E2810F883020F48F2D0E94DD1A03C0A6
:102460008F2D0E94ED1A0E94241B67C2812F0E94AB
:102470007511FF2009F4B4C2105E8F2D183018F4C6
:102480000E94E31A02C00E94F31A26960FB6F8942F
:10249000DEBF0FBECDBFDF91CF911F910F91FF9097
:1024A000EF90DF90CF90BF900C94241B3B2D307F9A
:1024B0008B2D8F70303211F08295807F112319F0AF
:1024C000113021F12CC00023B9F0222309F4A0C15E
:1024D000213009F09DC126960FB6F894DEBF0FBEDD
:1024E000CDBFDF91CF911F910F91FF90EF90DF90C3
:1024F000CF90BF900C940D1B222319F0213009F4CA
:102500006FC28E830E94101B8E8196C1002321F022
:10251000223008F065C27CC1211162C28DC1002346
:1025200021F0222309F474C108C2222309F484C1D2
:1025300019C22B2D26952695237030E021153105E3
:1025400021F021303105D1F04BC2002321F0812F41
:102550009B2D937002C080E090E026960FB6F89411
:10256000DEBF0FBECDBFDF91CF911F910F91FF90C6
:10257000EF90DF90CF90BF900C94A60F002321F036
:10258000812F9B2D937002C080E090E026960FB6BD
:10259000F894DEBF0FBECDBFDF91CF911F910F9199
:1025A000FF90EF90DF90CF90BF900C94BC0F812FE5
:1025B000002319F00E94A01E02C00E94081F269648
:1025C0000FB6F894DEBF0FBECDBFDF91CF911F9144
:1025D0000F91FF90EF90DF90CF90BF900C948D1FE4
:1025E0008B2D837009F07BC00111FAC1812F829578
:1025F00086958770880F880F912F9F70C92ED12CD8
:10260000E12CF12C082E04C0CC0CDD1CEE1CFF1CB0
:102610000A94D2F714FF12C04FE050E060E070E07F
:1026200004C0440F551F661F771F8A95D2F7CB0150
:10263000BA01609570958095909503C060E070E058
:10264000CB012B2D269526952370422F50E042304A
:102650005105D9F04330510569F16C297D298E2946
:102660009F294130510551F126960FB6F894DEBFEF
:102670000FBECDBFDF91CF911F910F91FF90EF90D3
:10268000DF90CF90BF900C94F6186C297D298E298D
:102690009F2926960FB6F894DEBF0FBECDBFDF91FF
:1026A000CF911F910F91FF90EF90DF90CF90BF904F
:1026B0000C9412190E94F618C701B60126960FB69F
:1026C000F894DEBF0FBECDBFDF91CF911F910F9168
:1026D000FF90EF90DF90CF90BF900C94DA1800231A
:1026E00019F08B2D817001C08695882309F478C17B
:1026F000812F829586958770880F880F912F9F7004
:10270000C92ED12CE12CF12C082E04C0CC0CDD1CE0
:10271000EE1CFF1C0A94D2F714FF12C04FE050E0E9
:1027200060E070E004C0440F551F661F771F8A9554
:10273000D2F7CB01BA01609570958095909503C052
:1027400060E070E0CB012B2D269526952370422F5B
:1027500050E042305105D9F04330510569F16C2900
:102760007D298E299F294130510551F126960FB6BA
:10277000F894DEBF0FBECDBFDF91CF911F910F91B7
:10278000FF90EF90DF90CF90BF900C94D0196C2900
:102790007D298E299F2926960FB6F894DEBF0FBE9D
:1027A000CDBFDF91CF911F910F91FF90EF90DF9000
:1027B000CF90BF900C94EC190E94D019C701B601BC
:1027C00026960FB6F894DEBF0FBECDBFDF91CF9136
:1027D0001F910F91FF90EF90DF90CF90BF900C94DE
:1027E000B419103FD1F118F4103E50F4A1C0123FBB
:1027F00009F463C008F44CC0133F09F473C098C0D7
:102800001F708B2D8F710023A1F00E944D19812F15
:1028100026960FB6F894DEBF0FBECDBFDF91CF91E5
:102820001F910F91FF90EF90DF90CF90BF900C948D
:10283000C4110E946E19812F26960FB6F894DEBF40
:102840000FBECDBFDF91CF911F910F91FF90EF9001
:10285000DF90CF90BF900C94CB110023A9F02111F1
:10286000BFC08B2D8F7126960FB6F894DEBF0FBEBA
:10287000CDBFDF91CF911F910F91FF90EF90DF902F
:10288000CF90BF900C949319223008F0A9C0E9CFE3
:102890000023A9F08B2D8F7126960FB6F894DEBF1A
:1028A0000FBECDBFDF91CF911F910F91FF90EF90A1
:1028B000DF90CF90BF900C944D19002359F38B2DCE
:1028C0008F7126960FB6F894DEBF0FBECDBFDF9195
:1028D000CF911F910F91FF90EF90DF90CF90BF901D
:1028E0000C946E19002399F08B2D8F7126960FB6DC
:1028F000F894DEBF0FBECDBFDF91CF911F910F9136
:10290000FF90EF90DF90CF90BF900C9438192696EF
:102910000FB6F894DEBF0FBECDBFDF91CF911F91F0
:102920000F91FF90EF90DF90CF90BF900C942E19F5
:102930000023A9F0222309F4ADCF812F26960FB6EC
:10294000F894DEBF0FBECDBFDF91CF911F910F91E5
:10295000FF90EF90DF90CF90BF900C94AD102223AA
:1029600009F4ADCF812F26960FB6F894DEBF0FBEC7
:10297000CDBFDF91CF911F910F91FF90EF90DF902E
:10298000CF90BF900C9475114B2D4F70612FC701E4
:102990000E94AE0226960FB6F894DEBF0FBECDBFE2
:1029A000DF91CF911F910F91FF90EF90DF90CF902B
:1029B000BF900C9452184B2D4F70612FC701269673
:1029C0000FB6F894DEBF0FBECDBFDF91CF911F9140
:1029D0000F91FF90EF90DF90CF90BF900C949F05E8
:1029E00026960FB6F894DEBF0FBECDBFDF91CF9114
:1029F0001F910F91FF90EF90DF90CF90BF900895BF
:102A00000E94FA1A0E940A1B0E94CF1A0E94241BDD
:102A10000E943D200E948D1F80E090E00E94A60F42
:102A200080E090E00C94BC0F0E94EA1A0C94001510
:102A30000E94481A292F22952F7030E02C30310542
:102A40004CF42A3031056CF4225031092230310522
:102A500088F407C02C30310549F02F30310531F0B2
:102A600009C0803E48F0803F29F406C093FB8827C8
:102A700080F9089580E0089581E00895CF93DF9371
:102A800000D000D01F92CDB7DEB70F900F900F90FF
:102A90000F900F90DF91CF910895CF93DF9300D0E7
:102AA00000D000D0CDB7DEB726960FB6F894DEBFC3
:102AB0000FBECDBFDF91CF9108951F93CF93DF93CA
:102AC000C0917B0116E080917C01C81799F0D0E09D
:102AD0001C9FF0011D9FF00D1124E358FE4F408113
:102AE000518162817381848195810E944D15219667
:102AF000C770E9CFDF91CF911F9108954091AD014B
:102B00005091AE016091AF017091B0018091B1011F
:102B10009091B2010C944D158091B20182958F7005
:102B200009F054C08091AF01882309F44FC080910F
:102B30007B01A0917C016091AD017091AE0140914B
:102B4000B0015091B101B6E08A1709F43FC090E09E
:102B500041155105C1F17F3F11F46F3FA1F1B89FBD
:102B6000F001B99FF00D1124E358FE4F218172133B
:102B70002AC02081621327C02281211124C0238111
:102B800034812417350710F421503109241B350BEB
:102B9000283C3105C0F42091B2012F7020612093B0
:102BA000B20126E0289FF001299FF00D1124EE5775
:102BB000FE4F80818F70806180838DEA91E00E945A
:102BC000D2110C945D1501968770BECF0895CF92F7
:102BD000DF92EF92FF920F931F93CF93DF93CDB7C6
:102BE000DEB762970FB6F894DEBF0FBECDBF8C0183
:102BF00085E0F801DE011D9601900D928A95E1F7BE
:102C0000D8014C9111965C91119712966C91129784
:102C10001396CD90DC9014973091AD017091AE0178
:102C20008091B0019091B101009709F46BC17F3F91
:102C300019F43F3F09F466C1E090AF01EE2009F4BA
:102C4000C0C02091B201C816D90628F0F601E81BD1
:102C5000F90BCF0104C0809590958C0D9D1DFF242C
:102C6000F394883C910578F0F12C207F09F0C6C0E0
:102C70007C2DD98AC88A89890E943E158DEA91E007
:102C80000E94D211B1C0822F807F09F046C0751317
:102C900014C0341312C0611110C02F702061209332
:102CA000B2010E947E158DEA91E00E94D2118091BE
:102CB000B201D80115968C932EC0CD2819F15F3F33
:102CC00011F44F3FF9F0F62E61111CC080917B0189
:102CD00020917C0136E0821709F45AC090E0389FB9
:102CE000F001399FF00D1124E358FE4F7181571305
:102CF00006C07081471303C07281711103C0019631
:102D00008770E9CFF62E662309F418C18091B201CD
:102D100081608093B201F12C11C1751308C0341386
:102D200006C0611104C08091B201D801C3C04D87B3
:102D30005E878D859E856A8B0E9418156A89882317
:102D4000E1F16623D1F12091B201822F82958F703B
:102D500090E0029774F08091AD019091AE01988758
:102D60008F831986DB86CA862C87CE0107960E9440
:102D7000D21186E0F801ADEAB1E001900D928A959A
:102D8000E1F70E948C150E947E15FF24F394D6C0B3
:102D90004D875E878D859E850E94481A292F229532
:102DA0002F7030E0223031050CF0BCC09F7009F06C
:102DB000B6C0805E883008F4C1C0C8010E94D2113C
:102DC000E4CFC816D90608F453C0F601E81BF90B86
:102DD000CF01883C910508F450C0F12C7C2DD98A94
:102DE000C88A89890E943E15EDEAF1E086E0DF019C
:102DF0001D928A95E9F70E947E15A0C0751314C034
:102E0000341312C0611110C08091B201F8018583A2
:102E1000C8010E94D21186E0EDEAF1E0DF011D92C7
:102E20008A95E9F7FE2C8AC04D875E878D859E8541
:102E30006A8B0E9418156A89882309F4BECF66231D
:102E400009F4BBCF2091B201822F82958F7090E060
:102E500002970CF48ECF8091AD019091AE019A83D0
:102E600089831B82DD82CC822E83CE0101967FCFA7
:102E7000809590958C0D9D1DACCFF62E662309F4A0
:102E80009CCF75132EC034132CC02091B20120FDAD
:102E90001FC0822F82958F70D9F0D80115962C9380
:102EA00015978F3049F08F5F982F9295907F822FE2
:102EB0008F70892B15968C93C8010E94D21186E0E1
:102EC000F801ADEAB1E001900D928A95E1F793CF58
:102ED00086E0F801ADEAB1E001900D928A95E1F744
:102EE0002DC04D875E878D859E850E9418158111A6
:102EF00040CF8091B20181608093B201C8010E94ED
:102F0000D2111CC0662309F458CF4D875E878D858A
:102F10009E850E941815882309F44FCF2ACF81116E
:102F200048CF0CC0243031050CF047CF9F7009F416
:102F300040CFF8019581907F09F03BCF8F2D6296AD
:102F40000FB6F894DEBF0FBECDBFDF91CF911F91BA
:102F50000F91FF90EF90DF90CF9008951F93CF9344
:102F6000DF93CDB7DEB72C970FB6F894DEBF0FBE58
:102F7000CDBF4F83588769877A878B879C87CE011F
:102F800007960E94E715882369F08F8198852A8526
:102F90003B85232BF1F19F3F09F063C08F3F09F080
:102FA00060C037C086E0FE013796DE0111960190C1
:102FB0000D928A95E1F76F817885EA85FB853097D8
:102FC00041F17F3F11F46F3F21F120917C0130E00E
:102FD000C90101968770992740917B0150E08417C1
:102FE000950709F447C069837A83FD83EC8396E0F3
:102FF000929FD001939FB00D1124A358BE4FFE01A4
:10300000319601900D929A95E1F780937C010E9490
:103010005D1516E080917B0190917C018917C1F1CB
:10302000189FC001112483589E4F0E94E7158823E2
:1030300079F1E0917B011E9FF0011124E358FE4FCE
:103040004081518162817381848195810E944D15F7
:1030500080917B0190E001968770992780937B0196
:10306000D9CF4F81588569857A858B859C850E944B
:103070004D15CFCF0E94141510927C0110927B0148
:10308000EDEAF1E086E0DF011D928A95E9F7C1CF14
:103090002C960FB6F894DEBF0FBECDBFDF91CF9157
:1030A0001F910895EF92FF920F931F93CF93DF9399
:1030B0008C01892B09F46CC0F12CEE24E394E80117
:1030C0002196F8018491843740F4843008F051C08F
:1030D000813081F0823019F15BC0853709F444C03A
:1030E000A8F19CE7980F903708F052C08F770E94A4
:1030F000751141C00E5F1F4FFE01C49180E28C0F1D
:10310000883048F4C7708E2D01C0880FCA95EAF741
:103110000E94FD1A14C08C2F0E94AD102DC00E5FAE
:103120001F4FFE01C49180E28C0F883058F4C770A5
:103130008E2D01C0880FCA95EAF70E94031B0E94DA
:10314000241B1AC08C2F0E94751116C00E5F1F4FD2
:10315000FE01C491CC2381F08FE99FE00197F1F744
:1031600000C00000C150F6CF0E5F1F4FFE01F4906B
:1031700003C00E94AD108E018F2D882309F49FCFCC
:10318000EFE9FFE03197F1F700C000008150F5CF83
:10319000DF91CF911F910F91FF90EF9008950895C7
:1031A0006093B7017093B8018093B9019093BA010D
:1031B0000C9400150F931F930091B7011091B80163
:1031C0002091B9013091BA01DC01CB01802B912B08
:1031D000A22BB32B8093B7019093B801A093B901B0
:1031E000B093BA011F910F910C9400150F931F9388
:1031F0000091B7011091B8012091B9013091BA0145
:10320000DC01CB0180239123A223B3238093B70158
:103210009093B801A093B901B093BA011F910F9197
:103220000C9400150F931F930091B7011091B801F2
:103230002091B9013091BA01DC01CB01802791279F
:10324000A227B3278093B7019093B801A093B90147
:10325000B093BA011F910F910C9400151092B30115
:103260001092B4011092B5011092B6010C940015A1
:1032700041E050E060E070E004C0440F551F661F5D
:10328000771F8A95D2F74093B3015093B4016093AE
:10329000B5017093B6010C94001541E050E060E078
:1032A00070E004C0440F551F661F771F8A95D2F740
:1032B0008091B3019091B401A091B501B091B60194
:1032C000482B592B6A2B7B2B4093B3015093B401AD
:1032D0006093B5017093B6010C94001541E050E085
:1032E00060E070E004C0440F551F661F771F8A9589
:1032F000D2F740955095609570958091B30190916B
:10330000B401A091B501B091B601482359236A23B5
:103310007B234093B3015093B4016093B501709344
:10332000B6010C94001541E050E060E070E004C08C
:10333000440F551F661F771F8A95D2F78091B301FE
:103340009091B401A091B501B091B60148275927D9
:103350006A277B274093B3015093B4016093B50172
:103360007093B6010C9400150F931F930091B30155
:103370001091B4012091B5013091B601DC01CB016F
:10338000802B912BA22BB32B8093B3019093B4018C
:10339000A093B501B093B6011F910F910C94001545
:1033A0000F931F930091B3011091B4012091B501C7
:1033B0003091B601DC01CB0180239123A223B323FA
:1033C0008093B3019093B401A093B501B093B6017B
:1033D0001F910F910C9400150F931F930091B3014F
:1033E0001091B4012091B5013091B601DC01CB01FF
:1033F00080279127A227B3278093B3019093B4012C
:10340000A093B501B093B6011F910F910C940015D4
:103410000895CF92DF92EF92FF920F931F93CF9375
:10342000DF938C01C090B701D090B801E090B90152
:10343000F090BA018091B3019091B401A091B501CF
:10344000B091B601C82AD92AEA2AFB2ACFE1D0E0F6
:10345000D701C6010C2E04C0B695A7959795879500
:103460000A94D2F780FF06C0B8018C2F0E94DF07B4
:10347000019721F4219760F780E001C08C2FDF9144
:10348000CF911F910F91FF90EF90DF90CF90089513
:10349000CF93DF93EC010E94091ABE010E94DF075F
:1034A000DF91CF910895CB010E94481A0895909121
:1034B0000C01992321F090910D01911109C02091E7
:1034C0000E0130910F01F90132969FEF40E01FC0CD
:1034D000982F9695969596959F3050F5E0910E0110
:1034E000F0910F01E90FF11D877021E030E0A90193
:1034F00002C0440F551F8A95E2F7CA019181892BBA
:10350000818308959F3F39F04F5F4E3041F05191D4
:103510005813F8CF0DC05111F7CF942FF5CF9F3F1F
:1035200039F0F901E90FF11D97FDFA9582830895AD
:10353000089590910C01992321F090910D01911122
:1035400009C020910E0130910F01F9013296205FE0
:103550003F4F1FC0982F9695969596959F30F0F403
:10356000E0910E01F0910F01E90FF11D877021E04C
:1035700030E0A90102C0440F551F8A95E2F7CA0145
:10358000809591818923818308953196E217F3070D
:1035900029F090819813F9CF1082F7CF089581E038
:1035A00090E0E0910E01F0910F01E80FF91F1082F9
:1035B000019680319105A9F708959091CE01892B4C
:1035C0008093CE01089580959091CE0189238093B8
:1035D000CE0108951092CE0108959091CD01892BCE
:1035E0008093CD01089580959091CD01892380939A
:1035F000CD0108951092CD0108959091CC01892BB1
:103600008093CC01089580959091CC01892380937B
:10361000CC0108951092CC0108958093BB010895C8
:103620001092BB01089580910E0190910F01FC0151
:1036300031969C01205F3F4F80E0919191118F5F07
:10364000E217F307D1F70895E0910E01F0910F0111
:103650008091CE018083E0910E01F0910F01908165
:103660008091CD01892B8083E0910E01F0910F01B3
:1036700090818091CC01892B80838091BB0188232C
:1036800061F0E0910E01F0910F019081892B808310
:103690000E94131B81111092BB0180910E01909129
:1036A0000F010C94900FCF92DF92EF92FF926C017A
:1036B000EE24FF24C114D104E104F10421F0C70178
:1036C000B60120E101C020E0C72ED82EE92EFF244C
:1036D000C114D104E104F10419F0285FC701B60157
:1036E0006B017C0154E0F694E794D794C7945A9503
:1036F000D1F7C114D104E104F10419F02C5FC70122
:10370000B6016B017C0142E0F694E794D794C7942C
:103710004A95D1F7C114D104E104F10419F02E5FE8
:10372000C701B601DC01CB01B695A79597958795A2
:10373000892B8A2B8B2B09F02F5F822FFF90EF9024
:10374000DF90CF9008958091E601843039F1109296
:10375000D00120E488E190E00FB6F894A89580931A
:1037600060000FBE2093600080E00E947A0883B75B
:10377000817F846083BF83B7816083BF789488959D
:1037800083B78E7F83BF0FB6F894A89580916000B1
:10379000886180936000109260000FBE08950895C4
:1037A0000895CF930E94CF1B0E94AA040E94D01BB1
:1037B000C0E08C2F0E949805811104C0CF5FCE30ED
:1037C000C1F701C081E0CF9108950E9414150E94B5
:1037D000840F0C947A0882E084BD93E095BD9AEF43
:1037E00097BD80936E0008952FB7F8948091D10112
:1037F0009091D201A091D301B091D4012FBF08952F
:10380000CF92DF92EF92FF920F931F932FB7F8940E
:103810004091D1015091D2016091D3017091D401B6
:103820002FBF6A017B01EE24FF248C0120E030E0F1
:10383000C016D106E206F30610F4415051099A0170
:10384000281B390BC9011F910F91FF90EF90DF905A
:10385000CF9008951F920F920FB60F9211248F935D
:103860009F93AF93BF938091D1019091D201A0918A
:10387000D301B091D4010196A11DB11D8093D10156
:103880009093D201A093D301B093D401BF91AF9193
:103890009F918F910F900FBE0F901F9018950E94CF
:1038A000810CF8942FEF87EA91E6215080409040F8
:1038B000E1F700C0000087E090EBDC018093F001AD
:1038C0009093F101A093F201B093F3019CE088E1A1
:1038D0000FB6F894A895809360000FBE9093600097
:1038E000FFCFEF92FF920F931F93CF93DF93D82FC9
:1038F000C0E08C2F0E94980500E010E0E82EF12C2B
:10390000C701002E02C0959587950A94E2F780FDC5
:1039100006C00F5F1F4F0630110591F709C0602FD9
:103920007C2F80E00E94A005D813F3CF81E004C073
:10393000CF5FCE30F1F680E0DF91CF911F910F91F4
:10394000FF90EF900895CF93C82F8CE20E94711CD6
:10395000882321F08C2FCF910C94711C80E0CF91A3
:103960000895CF930E94F81D811102C00E94DE1DB0
:10397000C5E6C15049F00E94AA048FE39CE9019773
:10398000F1F700C00000F5CF89E20E94A31C81116D
:1039900013C18AE20E94A31C81110E94DE1D85E0F2
:1039A0000E94A31C81110E944F1C0E94031E809341
:1039B000CF0187E00E94A31C8823A9F18BE10E941C
:1039C000A31C882351F08091CF0181FB222720F98D
:1039D00091E0922790FB81F90EC08EE00E94A31C1B
:1039E000882361F08091CF0182FB222720F991E0AA
:1039F000922790FB82F98093CF0115C080E10E944D
:103A0000A31C9091CF01882341F093FB222720F93A
:103A100081E0822780FB93F904C0892F809580FB89
:103A200090F99093CF018091CF010E94071E0E94D0
:103A3000151E8093EF0180EE0E94A31C882341F0A5
:103A40008091EF01982F909590FB80F98093EF0182
:103A500089E30E94A31C882359F08091EF0181FB28
:103A6000222720F991E0922790FB81F98093EF01C2
:103A700082EE0E94A31C882359F08091EF0182FB03
:103A8000222720F991E0922790FB82F98093EF01A1
:103A900086EE0E94A31C882359F08091EF0183FBDE
:103AA000222720F991E0922790FB83F98093EF0180
:103AB00083EE0E94A31C882359F08091EF0184FBC0
:103AC000222720F991E0922790FB84F98093EF015F
:103AD00085E30E94A31C882359F08091EF0185FBA8
:103AE000222720F991E0922790FB85F98093EF013E
:103AF00081E30E94A31C882359F08091EF0186FB8B
:103B0000222720F991E0922790FB86F98093EF011C
:103B100081E10E94A31C882359F08091EF0187FB6B
:103B2000222720F991E0922790FB87F98093EF01FB
:103B30008091EF010E94191E8091EF0187FB882779
:103B400080F980930D0187E20E94A31CC82F8EE1AB
:103B50000E94A31C8111C2608FE10E94A31C8111ED
:103B6000C46080E20E94A31C8111C86081E20E94AF
:103B7000A31C8111C06182E20E94A31C8111C0625A
:103B800083E20E94A31C8111C06484E20E94A31CF2
:103B9000882311F0C06802C0CC2329F08C2F0E942A
:103BA000101E6C2F03C00E940C1E682F70E080E076
:103BB00090E0CF910C94D018CF9108956DEE7EEFE8
:103BC00080E090E00E94582460E082E090E00E9453
:103BD000462460E083E090E00E94462460E084E0B8
:103BE00090E00E94462460E085E090E00C9446243A
:103BF00080E090E00E94402421E08D3E9E4F09F03D
:103C000020E0822F089582E090E00C943824682F01
:103C100082E090E00C94462483E090E00C943824F9
:103C2000682F83E090E00C94462484E090E00C94AC
:103C30003824682F84E090E00C9446248091D701CA
:103C400080FF0BC06091130185E0689FB0011124D3
:103C500075956795759567952BC081FF09C0609133
:103C6000130185E0689FB00111247595679520C008
:103C700082FF07C06091130185E0689FB0011124A5
:103C800017C09091D8019923D1F060911201961735
:103C900088F72091130185E0289F90011124929FBD
:103CA000A001939F500D112470E0CA010E940A24C4
:103CB0006038710540F46115710539F002C065E0A6
:103CC00070E0862F08958FE7089581E00895809130
:103CD000D70180FF08C06091110170E0759567956C
:103CE0007595679521C081FF06C06091110170E054
:103CF0007595679519C082FF04C06091110170E04D
:103D000010C09091D8019923C1F0609110019617CD
:103D1000A0F780911101899FC001112470E00E94D9
:103D20000A246038710528F46115710521F0862F89
:103D300008958FE7089581E0089561E070E0F4CF81
:103D4000803F21F40E941E1E819504C0813F29F40A
:103D50000E941E1E8093DB010895823F21F40E9481
:103D60001E1E819504C0833F29F40E941E1E80936D
:103D7000DA010895893F19F40E94671E05C08A3F41
:103D800031F40E94671E81958093DC0108958B3F7A
:103D900021F40E94671E819504C08C3F29F40E9483
:103DA000671E8093DD010895843F21F48091D9013D
:103DB000816017C0853F21F48091D901826011C0D4
:103DC000863F21F48091D90184600BC0873F21F4A4
:103DD0008091D901886005C0883F31F48091D90174
:103DE00080618093D90108958D3F21F48091D7019E
:103DF00081600BC08E3F21F48091D701826005C0A5
:103E00008F3F29F48091D70184608093D701089572
:103E1000803F39F48091DB0187FF6CC01092DB0199
:103E200069C0813F29F48091DB011816BCF362C0A0
:103E30009091DA01823F29F497FF5CC01092DA0179
:103E400059C0833F19F41916CCF354C0893F41F48B
:103E50008091DC0118160CF04DC01092DC014AC0B4
:103E60008A3F29F48091DC0187FF44C0F6CF8B3F65
:103E700039F48091DD0187FF3DC01092DD013AC029
:103E80008C3F29F48091DD011816BCF333C0843FC8
:103E900021F48091D9018E7F17C0853F21F4809154
:103EA000D9018D7F11C0863F21F48091D9018B7F8C
:103EB0000BC0873F21F48091D901877F05C0883FDF
:103EC00031F48091D9018F7E8093D90113C08D3F49
:103ED00021F48091D7018E7F0BC08E3F21F4809119
:103EE000D7018D7F05C08F3F29F48091D7018B7F4B
:103EF0008093D7018091DA0181110EC08091DB019E
:103F000081110AC08091DC01811106C08091DD0120
:103F1000811102C01092D801089589ED91E00E94AC
:103F20009B0F0E94F41B9093D6018093D5010895B6
:103F30001F93CF93DF938091D5019091D6010E947A
:103F4000001CAC019091D801992321F0209114011B
:103F500030E006C0209115018AE0289F90011124CD
:103F60004217530708F485C08091DA01C091DB0144
:103F7000D091DC011091DD01811107C0C11175C024
:103F8000D11173C0111171C074C09F3F19F09F5FB0
:103F90009093D801181624F40E941E1E8093DA0113
:103FA0008091DA0187FF05C00E941E1E81958093D3
:103FB000DA011C1624F40E941E1E8093DB018091FE
:103FC000DB0187FF05C00E941E1E81958093DB01E7
:103FD0006091DA01662331F1C091DB01CC2311F14C
:103FE000062E000C770B880B990B0E94112323E3FC
:103FF00033E343E35FE30E9475230E94D922609379
:10400000DA016C2FCC0F770B880B990B0E941123D0
:1040100023E333E343E35FE30E9475230E94D92245
:104020006093DB011D1624F40E94671E8093DC015F
:104030008091DC0187FF05C00E94671E81958093F7
:10404000DC01111624F40E94671E8093DD0180912B
:10405000DD0187FF05C00E94671E81958093DD0109
:10406000DF91CF911F910C948D1F9F3F09F08FCF4F
:1040700097CFDF91CF911F910895E9EDF1E085E0B1
:10408000DF011D928A95E9F71092D8011092D701AD
:104090000895833081F128F4813059F08230D1F0D5
:1040A0000895853009F449C0B8F1863009F456C046
:1040B000089580911501262F30E0280F311D2F3FE4
:1040C000310524F4680F6093150108958FEF8093F4
:1040D0001501089580911401262F30E0280F311D1D
:1040E0002F3F310524F4680F6093140108958FEF7A
:1040F00080931401089580911301262F30E0280F3A
:10410000311D2F3F310524F4680F6093130108958A
:104110008FEF80931301089580911201262F30E0D4
:10412000280F311D2F3F310524F4680F60931201D1
:1041300008958FEF80931201089580911101262F29
:1041400030E0280F311D2F3F310524F4680F6093B4
:10415000110108958FEF809311010895809110014E
:10416000262F30E0280F311D2F3F310524F4680F32
:104170006093100108958FEF8093100108958330AC
:1041800011F128F4813049F0823091F008958530A2
:1041900081F120F18630C1F10895809115016817F1
:1041A00020F4861B8093150108951092150108953F
:1041B00080911401681720F4861B809314010895E0
:1041C00010921401089580911301681720F4861B42
:1041D00080931301089510921301089580911201A4
:1041E000681720F4861B8093120108951092120123
:1041F000089580911101681720F4861B80931101A6
:10420000089510921101089580911001681720F40B
:10421000861B8093100108951092100108950F934A
:104220001F938D3109F46BC008F03FC08E3009F444
:104230007FC0C0F4873009F469C068F4863009F0A3
:10424000B1C08091CF01817F8E7F8093CF0181E0CB
:104250008093DF01A8C0883009F4A2C08B3009F434
:104260009FC0A0C0863109F49BC078F4803109F466
:1042700072C0813109F096C00E94141590910D0111
:1042800081E0892780930D018BC0893109F488C0B2
:104290008B3109F087C08091CF0181FB222720F963
:1042A00091E0922790FB81F94CC0853309F470C0EE
:1042B00048F4873209F46CC008F459C0893209F413
:1042C00067C070C0833438F48A3308F04EC0883336
:1042D00009F466C067C0833409F45AC0883409F011
:1042E00061C00E9414150FEF13ED20E30150104040
:1042F0002040E1F700C000000E944F1C51C00E9406
:1043000093220E94840F0E947A084AC09091CF01A4
:10431000892F8095817080FB90F929F096609860D4
:104320009093CF0140C0997F977F9093CF0138C081
:104330008091CF0182FB222720F991E0922790FB08
:1043400082F98093CF01992359F18091CF01816047
:104350008093CF0125C08091CF0183FB222720F9D4
:1043600091E0922790FB83F9ECCF895301C08D51E6
:1043700041E050E060E070E08A019B0104C0000F62
:10438000111F221F331F8A95D2F7C901B80104C03B
:1043900061E070E080E090E00E94D0180E94141567
:1043A00081E001C080E01F910F91089580E00895A1
:1043B00080E00895CF93C82F8091DF01813079F09C
:1043C00018F08230E9F187C0E0910E01F0910F0101
:1043D0008081813169F0823209F07FC009C0E091AB
:1043E0000E01F0910F018081813111F0823261F470
:1043F0008C2F0E94D621811104C08C2F0E940F2186
:104400001DC081E090E01AC08C2F0E94D82181113C
:1044100014C0C43179F048F4CB3079F0C03109F0E0
:1044200060C082E08093DF0108C0C93219F0C83350
:1044300021F057C01092DF0154C081E0817053C059
:10444000C93289F118F5C43171F1A8F4C73009F007
:1044500046C08AE08093150194E19093140193E0A3
:10446000909313018093120188E08093110188E2F8
:104470008093100134C0CE51C63088F5EC2FF0E0A7
:10448000E65DFE4F80818093DE0129C0CE34E9F0E5
:1044900020F4CB3421F56AE013C0C13579F0C23580
:1044A000F1F461E00DC08091DE01882319F01092D3
:1044B000DE0115C081E08093DF0115C061E006C018
:1044C0008091DE010E9449200AC06AE08091DE01ED
:1044D0000E94BF2004C01092DF0180E004C081E090
:1044E00002C080E0ABCFCF910895E1E8F0E0808199
:1044F000886080838081816080838FB7F89493E0A7
:104500009093890090ED909388008FBF0895EFE617
:10451000F0E08081826080830895EFE6F0E08081A2
:104520008D7F80830895EFE6F0E0908182E0892717
:10453000808308951F920F920FB60F9211242F932C
:104540003F934F935F936F937F938F939F93AF931B
:10455000BF93EF93FF938091E0019091E101019669
:104560009093E1018093E001811103C082E00E94F9
:104570007A08E091E101E695E695F0E0E657FB4F19
:10458000E4918091E0018E1303C080E00E947A08DC
:10459000FF91EF91BF91AF919F918F917F916F911B
:1045A0005F914F913F912F910F900FBE0F901F90F1
:1045B00018950E94E0226894B1110C946F2308951D
:1045C0000E94542388F09F5798F0B92F9927B7512C
:1045D000B0F0E1F0660F771F881F991F1AF0BA95A7
:1045E000C9F714C0B13091F00E946E23B1E0089574
:1045F0000C946E23672F782F8827B85F39F0B93F66
:10460000CCF3869577956795B395D9F73EF4909559
:104610008095709561957F4F8F4F9F4F0895E894D7
:1046200009C097FB3EF490958095709561957F4FFA
:104630008F4F9F4F9923A9F0F92F96E9BB279395A8
:10464000F695879577956795B795F111F8CFFAF4B8
:10465000BB0F11F460FF1BC06F5F7F4F8F4F9F4FE9
:1046600016C0882311F096E911C0772321F09EE847
:10467000872F762F05C0662371F096E8862F70E0AD
:1046800060E02AF09A95660F771F881FDAF7880F87
:104690009695879597F9089557FD9058440F551FA3
:1046A00059F05F3F71F04795880F97FB991F61F0B4
:1046B0009F3F79F087950895121613061406551F2B
:1046C000F2CF4695F1DF08C0161617061806991F97
:1046D000F1CF86957105610508940895E894BB278C
:1046E00066277727CB0197F908950E9488230C94B9
:1046F000F9230E94EB2338F00E94F22320F0952347
:1047000011F00C94E2230C94E82311240C946F23F1
:104710000E944C2370F3959FC1F3950F50E0551FF5
:10472000629FF001729FBB27F00DB11D639FAA2706
:10473000F00DB11DAA1F649F6627B00DA11D661F55
:10474000829F2227B00DA11D621F739FB00DA11D76
:10475000621F839FA00D611D221F749F3327A00D30
:10476000611D231F849F600D211D822F762F6A2FCC
:1047700011249F5750409AF0F1F088234AF0EE0F31
:10478000FF1FBB1F661F771F881F91505040A9F75E
:104790009E3F510580F00C94E2230C946F235F3F01
:1047A000E4F3983ED4F3869577956795B795F7959A
:1047B000E7959F5FC1F7FE2B880F911D9695879512
:1047C00097F9089597F99F6780E870E060E0089591
:1047D0009FEF80EC089500240A9416161706180619
:1047E0000906089500240A941216130614060506F5
:1047F0000895092E0394000C11F4882352F0BB0F86
:1048000040F4BF2B11F460FF04C06F5F7F4F8F4FE8
:104810009F4F089597FB072E16F4009407D077FD5D
:1048200009D00E94242407FC05D03EF49095819580
:104830009F4F0895709561957F4F0895EE0FFF1F6C
:104840000590F491E02D0994AA1BBB1B51E107C010
:10485000AA1FBB1FA617B70710F0A61BB70B881F10
:10486000991F5A95A9F780959095BC01CD0108959F
:10487000F999FECF92BD81BDF89A992780B5089528
:10488000A8E1B0E042E050E00C946024262FF999B2
:10489000FECF92BD81BDF89A019700B4021639F09F
:1048A0001FBA20BD0FB6F894FA9AF99A0FBE089570
:1048B0000196272F0E9447240C944624DC01CB014B
:1048C000FC01F999FECF06C0F2BDE1BDF89A319620
:1048D00000B40D9241505040B8F70895F894FFCFBE
:1048E00020027C080A09E708B3087F080101BC011F
:1048F00028080A03140A3F4D36394B04FE03C80347
:104900008F0322033B0354036D03010203040506D6
:04491000070809008B
:00000001FF
+ +
+ +
+ + + + +
+ +
+ + +
+
+ +
+ + + + + + + +
+ + + Something went wrong with that request. Please try again. +
+ + + + + + + + + + + + + + + + + diff --git a/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c b/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c new file mode 100755 index 0000000000..33a0480c94 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/dvorak_spanish/keymap.c @@ -0,0 +1,284 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" + +/****************************************************************************************** + * SPANISH DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/) + * Layer 1: auxiliary keys + * Layer 2: full qwerty layout + ****************************************************************************************** + * IMPORTANT: Software layout must be set to SPANISH QWERTY to work properly + *****************************************************************************************/ + +// LAYERS +#define BASE 0 // dvorak layout (default) +#define AUX 1 // auxiliary keys +#define QWERTY 2 // qwerty layout + +// MACROS +#define OBRACE 0 // key { or shift +#define CBRACE 1 // key } or shift +#define OBRACK 2 // key [ or left alt +#define CBRACK 3 // key ] or left alt +#define CAPS 4 // caps lock + +// LEDS +#define USB_LED_NUM_LOCK 0 +#define USB_LED_CAPS_LOCK 1 +#define USB_LED_SCROLL_LOCK 2 +#define USB_LED_COMPOSE 3 +#define USB_LED_KANA 4 + +// TIMERS +#define KEY_TAP_FAST 85 +#define KEY_TAP_SLOW 95 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Base layer + * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | F1/~L1 | . | , | Ñ | P | Y |MEH_T | | L1 | F | G | C | H | L |ALL_T/+ | + * |--------+------+------+------+------+------| DEL | | ~L1 |------+------+------+------+------+--------| + * |Esc/Ctrl| A | O | E | U | I |------| |------| D | R | T | N | S |'/RCtrl | + * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| + * | {/LSft | - | Q | J | K | X | | | | B | M | W | V | Z | }/RSft | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |F5/CAG|F6/~L1| |F7/~L1|F8/CAG| + * ,------|------|------| |------+--------+------. + * | | |F4/CA | |F11/CA| | | + * | ENTER| TAB |------| |------| BSPC | SPACE| + * | | |F3/SA | |F12/SA| | | + * `--------------------' `----------------------' + * CAG = CTRL-ALT-GUI + * CA = CTRL-ALT + * SA = SHIFT-ALT + * + */ +[BASE] = KEYMAP( + // left hand + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, + LT(AUX, KC_F1), KC_DOT, KC_COMM,KC_SCLN,KC_P, KC_Y, MEH_T(KC_DEL), + CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, + M(OBRACE), KC_SLSH,KC_Q, KC_J, KC_K, KC_X, KC_LGUI, + M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, + LCAG_T(KC_F5), LT(AUX, KC_F6), + MT(MOD_LALT | MOD_LCTL, KC_F4), + KC_ENT,KC_TAB,MT((MOD_LALT | MOD_LSFT), KC_F3), + // right hand + KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_FN1, KC_F, KC_G, KC_C, KC_H, KC_L, ALL_T(KC_RBRACKET), + KC_D, KC_R, KC_T, KC_N, KC_S, CTL_T(KC_QUOTE), + KC_RALT, KC_B, KC_M, KC_W, KC_V, KC_Z, M(CBRACE), + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), + LT(AUX, KC_F7), LCAG_T(KC_F8), + MT(MOD_LALT | MOD_LCTL, KC_F11), + MT(MOD_LALT | MOD_LSFT, KC_F12),KC_BSPC, KC_SPC + ), +/* Keymap 1: Aux layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | SLEEP | PWR | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | < | > | MsUp | | | | | ~L0 | | 7 | 8 | 9 | * | `^ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | 4 | 5 | 6 | + | Ç | + * |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------| + * |CAPSLOCK| | | | | | | | | | 1 | 2 | 3 | / | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V| | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | Play | + * ,------|------|------| |------+------+------. + * | | | | | VolUp| | | + * | Lclk | Rclk |------| |------| Prev | Next | + * | | | L2 | | VolDn| | | + * `--------------------' `--------------------' + */ +[AUX] = KEYMAP( + // left hand + KC_NO , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_SLEP, + KC_TRNS, KC_NONUS_BSLASH, LSFT(KC_NONUS_BSLASH), KC_MS_U, KC_NO, KC_NO, KC_NO, + KC_NO , KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO , + M(CAPS), KC_NO, KC_NO , KC_NO , KC_NO , KC_NO , KC_NO, + LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), + KC_NO , KC_TRNS, + KC_NO, + KC_BTN1, KC_BTN2, TG(QWERTY), + // right hand + KC_PWR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_LBRACKET, + KC_NO, KC_4, KC_5, KC_6, KC_PPLS, KC_BSLASH, + KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_NO, + KC_NO ,KC_DOT, KC_0, KC_PEQL, KC_NO, + KC_TRNS, KC_MPLY, + KC_VOLU, + KC_VOLD, KC_MPRV, KC_MNXT +), +/* Keymap 2: QWERTY layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | \ | 1 | 2 | 3 | 4 | 5 | <> | | ¡ | 6 | 7 | 8 | 9 | 0 | ' | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | TRANS | Q | W | E | R | T |MEH_T | | TRANS| Y | U | I | O | P |ALL_T/+ | + * |--------+------+------+------+------+------| DEL | | |------+------+------+------+------+--------| + * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | Ñ |'/RCtrl | + * |--------+------+------+------+------+------| LGUI | | RALT |------+------+------+------+------+--------| + * | {/LSft | Z | X | C | V | B | | | | N | M | , | . | - | }/RSft | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |[/LALT| HOME |PGDOWN| PGUP | END | | LEFT | DOWN | UP |RIGHT |]/LALT| + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * |F5/CAG| TRANS| | TRANS|F8/CAG| + * ,------|------|------| |------+--------+------. + * | | |F4/CA | |F11/CA| | | + * | ENTER| TAB |------| |------| BSPC | SPACE| + * | | | TRANS| |F12/SA| | | + * `--------------------' `----------------------' + * CAG = CTRL-ALT-GUI + * CA = CTRL-ALT + * SA = SHIFT-ALT + * + */ +[QWERTY] = KEYMAP( + // left hand + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NONUS_BSLASH, + KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_DEL), + CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, + M(OBRACE), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI, + M(OBRACK), KC_HOME,KC_PGDN,KC_PGUP,KC_END, + LCAG_T(KC_F5), KC_TRNS, + MT(MOD_LALT | MOD_LCTL, KC_F4), + KC_ENT,KC_TAB,KC_TRNS, + // right hand + KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, ALL_T(KC_RBRACKET), + KC_H, KC_J, KC_K, KC_L, KC_SCLN,CTL_T(KC_QUOTE), + KC_RALT, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,M(CBRACE), + KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,M(CBRACK), + KC_TRNS, LCAG_T(KC_F8), + MT(MOD_LALT | MOD_LCTL, KC_F11), + MT(MOD_LALT | MOD_LSFT, KC_F12),KC_BSPC, KC_SPC +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux) +}; + +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case OBRACE: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_QUOTE); + unregister_code(KC_QUOTE); + unregister_code(KC_RALT); + } + } + break; + } + case CBRACE: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_BSLS); + unregister_code(KC_BSLS); + unregister_code(KC_RALT); + } + } + break; + } + case OBRACK: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_LBRACKET); + unregister_code(KC_LBRACKET); + unregister_code(KC_RALT); + } + } + break; + } + case CBRACK: { + if (record->event.pressed) { + key_timer = timer_read(); + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { + register_code(KC_RALT); + register_code(KC_RBRACKET); + unregister_code(KC_RBRACKET); + unregister_code(KC_RALT); + } + } + break; + } + case CAPS: { + if (record->event.pressed) { + register_code(KC_CAPSLOCK); + } else { + unregister_code(KC_CAPSLOCK); + } + 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) { + case 1: + ergodox_right_led_3_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + + // Turn the caps lock led on + if (host_keyboard_leds() & (1<