Merge branch 'master' into j3rn-keymap

pull/88/head
Jonathan Arnett 9 years ago
commit 10ab4eff06

1
.gitignore vendored

@ -7,6 +7,7 @@
*.lst
*.map
*.sym
*.swp
tags
*~
build/

@ -94,13 +94,13 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# MIDI_ENABLE = yes # MIDI controls
# uNICODE_ENABLE = yes # Unicode
# UNICODE_ENABLE = yes # Unicode
# Optimize size but this may cause error "relocation truncated to fit"

@ -15,8 +15,9 @@ This requires a little bit of familiarity with coding.
1. Go to https://github.com/jackhumbert/qmk_firmware and read the Readme at the base of this repository, top to bottom. Then come back here :)
2. Clone the repository (download it)
3. Set up a build environment as per https://www.pjrc.com/teensy/gcc.html
4. Copy `keymaps/keymap_default.c` into `keymaps/keymaps_your_name.c` (for example, `keymaps/keymap_german.c`)
3. Set up a build environment as per [pjrc.com/teensy/gcc.html](https://www.pjrc.com/teensy/gcc.html)
- Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc`
4. Copy `keymaps/keymap_default.c` into `keymaps/keymap_your_name.c` (for example, `keymaps/keymap_german.c`)
5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly.
6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_name`. Note that you must omit the `keymap_` prefix for your filename in this command -- for example, `make KEYMAP=german`. This will result in a hex file, which will always be called `ergodox_ez.hex`, regardless of your keymap name.
6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above.

@ -6,12 +6,12 @@ uint8_t mcp23018_status = 0x20;
__attribute__ ((weak))
void * matrix_init_user(void) {
return NULL;
};
__attribute__ ((weak))
void * matrix_scan_user(void) {
return NULL;
};
void * matrix_init_kb(void) {
@ -37,6 +37,8 @@ void * matrix_init_kb(void) {
if (matrix_init_user) {
(*matrix_init_user)();
}
return NULL;
};
void * matrix_scan_kb(void) {
@ -44,6 +46,8 @@ void * matrix_scan_kb(void) {
if (matrix_scan_user) {
(*matrix_scan_user)();
}
return NULL;
};
@ -51,8 +55,19 @@ void ergodox_blink_all_leds(void)
{
ergodox_led_all_off();
ergodox_led_all_set(LED_BRIGHTNESS_HI);
ergodox_led_all_on();
_delay_ms(333);
ergodox_right_led_1_on();
_delay_ms(50);
ergodox_right_led_2_on();
_delay_ms(50);
ergodox_right_led_3_on();
_delay_ms(50);
ergodox_right_led_1_off();
_delay_ms(50);
ergodox_right_led_2_off();
_delay_ms(50);
ergodox_right_led_3_off();
//ergodox_led_all_on();
//_delay_ms(333);
ergodox_led_all_off();
}

@ -34,7 +34,7 @@ void ergodox_blink_all_leds(void);
uint8_t init_mcp23018(void);
uint8_t ergodox_left_leds_update(void);
#define LED_BRIGHTNESS_LO 31
#define LED_BRIGHTNESS_LO 15
#define LED_BRIGHTNESS_HI 255
@ -42,11 +42,13 @@ inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6);
inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); }
inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); }
inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); }
inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); }
inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); }
inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); }
inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); }
inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); }
inline void ergodox_led_all_on(void)
{
@ -67,6 +69,11 @@ inline void ergodox_led_all_off(void)
inline void ergodox_right_led_1_set(uint8_t n) { OCR1A = n; }
inline void ergodox_right_led_2_set(uint8_t n) { OCR1B = n; }
inline void ergodox_right_led_3_set(uint8_t n) { OCR1C = n; }
inline void ergodox_right_led_set(uint8_t led, uint8_t n) {
(led == 1) ? (OCR1A = n) :
(led == 2) ? (OCR1B = n) :
(OCR1C = n);
}
inline void ergodox_led_all_set(uint8_t n)
{

@ -0,0 +1,187 @@
// Netable differences vs. the default firmware for the ErgoDox EZ:
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
// 2. The media keys work on OSX (But not on Windows).
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | '" | | '" | 6 | 7 | 8 | 9 | 0 | BkSp |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | ~L1 | | ~L1 | Y | U | I | O | P | - |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L |; / L2| / |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| Alt |AltShf| Left | Right| | Up | Down | [ | ] | L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | App | LGui | | Esc |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | ( | | { | | |
* | Space| LGui |------| |------| RGui |Enter |
* | | | ) | | } | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_QUOT,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_FN1,
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
LT(SYMB,KC_GRV),KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
ALT_T(KC_APP), KC_LGUI,
KC_LPRN,
KC_SPC,KC_LGUI,KC_RPRN,
// right hand
KC_QUOT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_FN1, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_BSLS,
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, TG(1),
KC_ESC, CTL_T(KC_ESC),
KC_LCBR,
KC_RCBR,KC_RGUI, KC_ENT
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,1471 @@
:100000000C9400070C9444070C9444070C94440788
:100010000C9444070C9444070C9444070C94440734
:100020000C9444070C9444070C9458120C942A1313
:100030000C9444070C9444070C9444070C94440714
:100040000C9444070C94022C0C9444070C94440721
:100050000C9444070C94FA210C9444070C94440724
:100060000C9444070C9444070C9444070C944407E4
:100070000C9444070C9444070C9444070C944407D4
:100080000C9444070C9444070C9444070C944407C4
:100090000C9444070C9444070C9444070C944407B4
:1000A0000C9444070C9444070C9444079713B91319
:1000B000A714B913A714FE132114A71476148914D6
:1000C000D017D017FF17FF17431881189B1A9B1AD8
:1000D0009A189B1A9B199B196F1A9B1A9B1A861ABE
:1000E0000000F0A12E002B002971E10035810000F5
:1000F0001E00140004001D71E20027021F001A00F8
:1001000016001B00E104E3002000080007000600C1
:1001100050002C0021001500090019004F00260294
:10012000220017000A000500000065743400C100B9
:100130000000007F0000E3003400C10000000077F1
:100140000000290023001C000B0011000000297191
:10015000240018000D00100052002F0225000C0092
:100160000E00360051002800260012000F00370054
:100170002F00E7002700130033823871300030026F
:100180002A002D003100E5000154000001000100AB
:1001900001000100010000003A001E0220022202BC
:1001A000010001003B001F022102230201000100A7
:1001B0003C002F0226022F00010001003D0030020A
:1001C00027023000010001003E00310235003502F7
:1001D000000001000100010000000100000001001A
:1001E0000100010000000100000001003F0052007A
:1001F00051002402000001004000240021001E00E4
:10020000010001004100250022001F00370001000D
:1002100042002600230020002700010043002502A1
:100220002E0231002E0001004400450001000100B3
:1002300001000000010001000100010001000000B8
:1002400001000100010001000100010001000100A6
:10025000F2000100010001000100F000F1000100C6
:10026000F400010001000100F3000100F5000100AD
:100270000100010001000100000001000100010077
:100280000000010000000100010001000000010069
:100290000000010001000100010001000000010058
:1002A0000100010001000100A9000100010001009E
:1002B0000100AC00AA00B600010001000100AB0083
:1002C000A80001000100010001000100010001007F
:1002D00001000100AE000100010000000A0025300D
:1002E000313662003A200025303258000A722F63FE
:1002F0002030313233343536373839414243444582
:10030000460A000A002530325800626F756E636538
:10031000213A20006C6566742073696465206174FD
:100320007461636865640A006C656674207369644F
:1003300065206E6F7420726573706F6E64696E678E
:100340000A00747279696E6720746F207265736534
:1003500074206D637032333031380A000A444542EC
:1003600055473A20656E61626C65642E0A005B73C6
:100370005D004B6579626F617264207374617274A1
:100380002E0A005B575D005B535D005B525D005BB6
:10039000445D005B435D0016034500720067006F1B
:1003A0000044006F007800200045005A000000164D
:1003B000034500720067006F0044006F0078002062
:1003C0000045005A0000000403090409028D0005DD
:1003D0000100A0FA09040000010301010009211134
:1003E000010001223F000705810308000A090401FA
:1003F000000103010200092111010001224D000743
:1004000005820308000A0904020001030000000934
:1004100021110100012236000705830308000A09A3
:100420000403000203000000092111010001222041
:1004300000070584032000010705040320000109CB
:100440000404000103000000092111010001223908
:1004500000070585031000011201100100000008CB
:10046000EDFE071301000102000105010906A101CB
:10047000050719E029E71500250195087501810296
:100480000508190129059505750191029501750366
:100490009101050719002977150025019578750147
:1004A0008102C00631FF0974A1010975150025FFFD
:1004B0009520750881020976150025FF952075089D
:1004C0009102C005010980A101850216010026B72D
:1004D000001A01002AB700751095018100C0050CB3
:1004E0000901A1018503160100269C021A01002AB8
:1004F0009C02751095018100C005010902A1010946
:1005000001A10005091901290515002501950575A9
:100510000181029501750381010501093009311539
:1005200081257F95027508810609381581257F95FB
:100530000175088106050C0A38021581257F950191
:1005400075088106C0C005010906A101050719E06B
:1005500029E71500250195087501810295017508A7
:10056000810105081901290595057501910295017B
:10057000750391010507190029FF150025FF950650
:1005800075088100C00A002530325820006B65795B
:10059000626F6172645F7265706F72743A20000AF4
:1005A0000025303258006B6579626F6172645F7349
:1005B00065745F6C65643A200064656C5F6B657997
:1005C0005F6269743A2063616E27742064656C3AD7
:1005D00020253032580A006164645F6B65795F6280
:1005E00069743A2063616E2774206164643A20253F
:1005F0003032580A00646F6E652E0A00626F6F67B2
:100600006D61676963207363616E3A202E2E2E2020
:1006100000290A002575002F002575005D2800259A
:10062000640020002564002000256400200025646B
:10063000007C0025303258006D6F7573656B6579ED
:10064000205B62746E7C782079207620685D287249
:1006500065702F61636C293A205B006D6B5F776872
:1006600065656C5F74696D655F746F5F6D6178203F
:100670003D2025640A006D6B5F776865656C5F6D72
:1006800061785F7370656564203D2025640A006DA4
:100690006B5F74696D655F746F5F6D6178203D207D
:1006A00025640A006D6B5F6D61785F7370656564CA
:1006B000203D2025640A006D6B5F696E746572765B
:1006C000616C203D2025640A006D6B5F64656C6180
:1006D00079203D2025640A006D6B5F776865656C45
:1006E0005F74696D655F746F5F6D6178203D202573
:1006F000640A006D6B5F776865656C5F6D61785F3C
:100700007370656564203D2025640A006D6B5F741D
:10071000696D655F746F5F6D6178203D2025640AA7
:10072000006D6B5F6D61785F7370656564203D205F
:1007300025640A006D6B5F696E74657276616C206A
:100740003D2025640A006D6B5F64656C6179203D16
:100750002025640A000A00257500363A207768656E
:10076000656C5F74696D655F746F5F6D61783A2069
:10077000000A00257500353A20776865656C5F6D65
:1007800061785F73706565643A20000A0025750022
:10079000343A2074696D655F746F5F6D61783A20DB
:1007A000000A00257500333A206D61785F7370652B
:1007B00065643A20000A00257500323A20696E749B
:1007C000657276616C286D73293A20000A002575E0
:1007D00000313A2064656C6179282A31306D7329C3
:1007E0003A20000A092D2056616C756573202D0A88
:1007F000004D3E004D25643E20003F00736574208F
:1008000064656661756C740A00433E200077686514
:1008100072652064656C74613A20637572736F72DF
:100820003D25642C20776865656C3D25640A536519
:100830006520687474703A2F2F656E2E77696B6926
:1008400070656469612E6F72672F77696B692F4DD0
:100850006F7573655F6B6579730A000A092D204D0A
:100860006F7573656B6579202D0A4553432F713A77
:1008700009717569740A313A0964656C6179282ACD
:1008800031306D73290A323A09696E746572766186
:100890006C286D73290A333A096D61785F7370654E
:1008A00065640A343A0974696D655F746F5F6D61E0
:1008B000780A353A09776865656C5F6D61785F73B2
:1008C000706565640A363A09776865656C5F7469B6
:1008D0006D655F746F5F6D61780A0A703A097072B6
:1008E000696E742076616C7565730A643A09736584
:1008F000742064656661756C74730A75703A092BAF
:10090000310A646F776E3A092D310A706775703A53
:10091000092B31300A7067646F776E3A092D3130D8
:100920000A0A7370656564203D2064656C746120FB
:100930002A206D61785F7370656564202A202872B3
:100940006570656174202F2074696D655F746F5FD9
:100950006D6178290A003F004D3E2000433E200093
:100960004C25640A000A092D20436F6E736F6C6575
:10097000202D0A4553432F713A09717569740A6D28
:100980003A096D6F7573656B65790A000A092D2048
:100990004D61676963202D0A643A09646562756771
:1009A0000A783A096465627567206D6174726978C6
:1009B0000A6B3A096465627567206B6579626F61DD
:1009C00072640A6D3A096465627567206D6F7573AC
:1009D000650A763A0976657273696F6E0A733A0929
:1009E0007374617475730A633A09636F6E736F6C25
:1009F00065206D6F64650A302D343A096C61796544
:100A000072302D34284631302D4634290A50617514
:100A1000733A09626F6F746C6F616465720A653A4C
:100A200009656570726F6D0A6E3A094E4B524F0A36
:100A30007A3A09736C656570204C4544207465737F
:100A4000740A000A002575002E6E6B726F3A200042
:100A50000A002575002E737761705F6261636B73A6
:100A60006C6173685F6261636B73706163653A2088
:100A7000000A002575002E737761705F67726176DA
:100A8000655F6573633A20000A002575002E6E6F5E
:100A90005F6775693A20000A002575002E7377613B
:100AA000705F72616C745F726775693A20000A004A
:100AB0002575002E737761705F6C616C745F6C6775
:100AC00075693A20000A002575002E636170736C09
:100AD0006F636B5F746F5F636F6E74726F6C3A20DD
:100AE000000A002575002E737761705F636F6E7466
:100AF000726F6C5F636170736C6F636B3A20000A96
:100B00000025303258006B65796D61705F636F6EE0
:100B10006669672E7261773A20000A002575002EFB
:100B20006D6F7573653A20000A002575002E6B65A0
:100B300079626F6172643A20000A002575002E6D9B
:100B400061747269783A20000A002575002E656E7E
:100B500061626C653A20000A0025303258006465F5
:100B60006275675F636F6E6669672E7261773A20A0
:100B7000000A0025750064656661756C745F6C61C0
:100B80007965723A20003F004E4B524F3A206F6613
:100B9000660A004E4B524F3A206F6E0A0074696D20
:100BA00065725F636F756E743A202530346C580A35
:100BB000006B6579626F6172645F6E6B726F3A2071
:100BC00025580A006B6579626F6172645F69646CB5
:100BD000653A2025580A006B6579626F6172645F1F
:100BE00070726F746F636F6C3A2025580A00686FDB
:100BF00073745F6B6579626F6172645F6C65647357
:100C000028293A2025580A000A092D2053746174B6
:100C10007573202D0A004743433A20342E392E3372
:100C2000204156522D4C4942433A20312E382E3124
:100C3000204156525F415243483A20617672350A4C
:100C4000004F5054494F4E533A204C554641204294
:100C50004F4F544D41474943204D4F5553454B4508
:100C6000592045585452414B455920434F4E534FFC
:100C70004C4520434F4D4D414E44204E4B524F204A
:100C80003531320A004255494C443A2030663263CD
:100C9000373733202831313A30393A3531204A61FB
:100CA0006E2020352032303136290A005649443A28
:100CB00020307846454544284572676F446F782058
:100CC000455A29205049443A20307831333037286A
:100CD0004572676F446F7820455A29205645523A2D
:100CE000203078303030310A00444553433A207484
:100CF0002E6D2E6B2E206B6579626F61726420669B
:100D000069726D7761726520666F72204572676FD8
:100D1000646F780A000A092D2056657273696F6E38
:100D2000202D0A000A6D6F7573653A206F66660A9A
:100D3000000A6D6F7573653A206F6E0A000A6B6565
:100D400079626F6172643A206F66660A000A6B65A9
:100D500079626F6172643A206F6E0A000A6D617485
:100D60007269783A206F66660A000A6D617472696A
:100D7000783A206F6E0A000A64656275673A206FE0
:100D80006E0A000A64656275673A206F66660A003B
:100D90000A0A626F6F746C6F616465722E2E2E206A
:100DA00000433E20006565636F6E6669673A0A001E
:100DB000536C656570204C454420746573740A005B
:100DC0000000000000000000000000010204060A0C
:100DD0000F17202C3A4A5D71879DB3C7DAE9F5FCFD
:100DE000FFFCF5E9DAC7B39D87715D4A3A2C2017FD
:100DF0000F0A0604020100000000000000000000CD
:100E000011241FBECFEFDAE0DEBFCDBF04B603FE74
:100E100024C08091F9019091FA01A091FB01B09159
:100E2000FC018730904BA740B04BB9F41092F90108
:100E30001092FA011092FB011092FC0114BE84B7CB
:100E4000877F84BF88E10FB6F8948093600010928A
:100E500060000FBEE0E0FFE3099511E0A0E0B1E023
:100E6000E0EAFBE502C005900D92AA33B107D9F77D
:100E700011E0AAE3B1E001C01D92A93FB107E1F77B
:100E80000E94900F0C94CE2D0C940000FF93EF93D2
:100E9000E0913A01F0913B01309709F00995EF910B
:100EA000FF910895FC018591803011F0EFDFFBCFB9
:100EB0000895FF27E0E230E247FF0CC0419597FF1D
:100EC00009C0EDE26095709580959095611D711D4A
:100ED000811D911D27FF02C0219530E350E2AA2712
:100EE000660F771F881F991FAA1FA41710F0A41B55
:100EF00063955A95A9F7AA3008F0A95FA05DAF9352
:100F0000F395611571058105910541F7ED3211F4F5
:100F1000EF93F395F21718F43F93F395FBCF8F916E
:100F2000B5DFFA95E1F70895E991F991859180305F
:100F300021F0853219F0AADFF9CF089520E0E89476
:100F400055915532C1F3503311F4689455915A3389
:100F500048F4505390F3220F022E220F220F200D3F
:100F6000250FF4CF0EF4219589919991533619F3F9
:100F7000533729F1533559F1BC0188279927E89453
:100F80005C3621F48991999168945591543639F4DD
:100F900046EF7EF077FF0DC08FEF9FEF0AC0553709
:100FA0004AE039F0583540E121F0523642E009F08C
:100FB0000895FF93EF937DDFEF91FF91B7CFFF93FC
:100FC000EF93FC0181918030B9F360DFFBCFFF9399
:100FD000EF9368DFF1CFDF93CF93CDB7DEB72596E0
:100FE000A3DFCF91DF91089561110BC0FC018281D5
:100FF000882321F085EE0E946D1603C085EE0E94C5
:10100000351780E090E0089508956091BC017091DB
:10101000BD018091BE019091BF010E94FD205698B4
:101020005E9825982D9826982E9827982F9881308D
:1010300019F0823021F00895259A2D9A0895269A64
:101040002E9A089585E098E0892B11F00E940508FA
:1010500080E090E0089556985E9825982D982698FF
:101060002E9827982F988FEF90E090938900809387
:10107000880090938B0080938A0090938D008093DA
:101080008C00259A2D9A2FEF80E792E02150804026
:101090009040E1F700C00000269A2E9A2FEF80E7DB
:1010A00092E0215080409040E1F700C00000279A74
:1010B0002F9A2FEF80E792E0215080409040E1F797
:1010C00000C0000025982D982FEF80E792E0215076
:1010D00080409040E1F700C0000026982E982FEF46
:1010E00080E792E0215080409040E1F700C000008E
:1010F00027982F9856985E9825982D9826982E9880
:1011000027982F98089589EA8093800089E080933A
:10111000810024982C983F988AB18F748AB96E9870
:10112000479A8BB1806B8BB9769A0E942B0884E02A
:1011300098E0892B11F00E94040880E090E0089567
:1011400080E28093000180913C0181110EC00E94D9
:10115000EF0881E080933C012FEF83ED90E3215075
:1011600080409040E1F700C0000080E40E94F50854
:101170008093000181112EC00E941F0980930001FD
:10118000811128C00E941F0980930001811122C093
:101190008FE30E941F098093000181111BC00E94F0
:1011A000170980E40E94F50880930001811112C0A4
:1011B0008CE00E941F098093000181110BC00E94E6
:1011C0001F0980930001811105C08FE30E941F0950
:1011D000809300010E9417098091000108951092E8
:1011E000B9008AE08093B800089594EA9093BC0017
:1011F0009091BC0097FFFCCF9091B900987F9830F8
:1012000021F0903111F081E008958093BB0084E8D3
:101210008093BC008091BC0087FFFCCF8091B90017
:10122000887F883111F0803471F780E0089584E977
:101230008093BC008091BC0084FDFCCF0895809316
:10124000BB0084E88093BC008091BC0087FFFCCF8A
:101250009091B900987F81E0983209F480E0089578
:1012600084E88093BC008091BC0087FFFCCF809114
:10127000BB00089580910001811115C080E40E9497
:10128000F5088093000181110CC082E10E941F09C2
:1012900080930001811105C08FEF0E941F09809388
:1012A00000010E94170984B1807F84B985B1807FD5
:1012B00085B98AB1837F8AB98BB1837F8BB93E9818
:1012C000469808950E94A008809300010E943A0960
:1012D00080B38C7080BB81B3836F81BBAEE3B1E020
:1012E000ECE4F1E08EE08E0F11921D928E13FCCF94
:1012F00083E898E0892B11F00C94830808959F925D
:10130000AF92BF92CF92DF92EF92FF920F931F9313
:10131000CF93DF93809100018823E1F080913D011C
:101320008F5F80933D01811115C082E493E00E949C
:1013300052070E94A00880930001882329F088E2C8
:1013400093E00E94520706C084E193E00E94520796
:101350000E942B080EE311E0C0E0D0E0BB24B39460
:1013600082E0A82ECC24C394D12C25E0E22E23E0E9
:10137000F22EC730D10500F580910001811164C0C3
:1013800080E40E94F50880930001811112C082E17F
:101390000E941F098093000181110BC0C6010C2E11
:1013A00001C0880F0A94EAF780950E941F09809374
:1013B00000010E94170948C0CA30A1F028F4C830C3
:1013C00059F0C93061F005C0CC3089F070F0CD30F3
:1013D00089F0209A289810C0219A29980DC0229A45
:1013E0002A980AC0239A2B9807C0529A01C0539A90
:1013F0005B9802C03E9A469890EA9A95F1F79FB1A1
:10140000799902C082E001C080E091709B25982B01
:101410007C9902C084E001C080E0892B7D9902C0E4
:1014200038E001C030E0832B7E9902C020E101C08A
:1014300020E0822B9FB19095991F9927991F929533
:10144000990F907E892B10C080910001811174C08A
:1014500080E40E94F50880930001882309F459C0B4
:10146000912C0E941709892DF8019081981739F164
:10147000808380910101882301F18091D70180FF51
:1014800004C08AE093E00E9452078091D70180FF58
:101490000CC0809101011F928F93FF92EF920E94E6
:1014A000EB070F900F900F900F908091D70180FF66
:1014B00004C083E093E00E945207A09201010E94C1
:1014C0003A0921960F5F1F4FCE30D10509F051CF59
:1014D000809101018823B1F081508093010188231C
:1014E00039F08FE99FE00197F1F700C000000AC0D2
:1014F000ACE4B1E0EEE3F1E0CF01825F91919D9326
:101500008E13FCCF82E298E0892BC1F00E94220862
:1015100015C083E10E941F09809300018111A0CFB3
:1015200081E40E94F50880930001811199CF0E9407
:101530003009982E909495CF80E096CF81E0DF918E
:10154000CF911F910F91FF90EF90DF90CF90BF90C0
:10155000AF909F900895E82FF0E0E45BFE4F80810C
:101560000895CF92DF92EF92FF920F931F93CF9344
:10157000DF938CEE92E00E9452078CE4E82E81E02B
:10158000F82EC0E0D0E097EEC92E92E0D92E0EEDF5
:1015900012E0DF93CF93DF92CF920E94EB0784EEAD
:1015A00092E00E945207F70181917F0190E00E9432
:1015B00063219F938F931F930F930E94EB078CEDF2
:1015C00092E00E94520721968DB79EB708960FB6FB
:1015D000F8949EBF0FBE8DBFCE30D105D1F6DF91FE
:1015E000CF911F910F91FF90EF90DF90CF900895D2
:1015F0008B3B910578F4883A910540F5853A910541
:10160000D0F48430910508F0B1C08130910509F41F
:10161000ADC06BC0803E910508F467C0883E91055F
:1016200008F4A4C09C01205F31092031310508F085
:101630005CC090650895853A910509F459C0863AD1
:10164000910509F058C082E890E40895883A910520
:1016500009F454C0893A910509F453C08A3A9105B6
:1016600009F452C08B3A910509F451C08C3A9105A6
:1016700009F450C08D3A910509F44FC0803B9105A3
:1016800009F44EC08E3A910509F44DC08F3A910588
:1016900009F44CC0813B910509F44BC0823B910594
:1016A00009F44AC0833B910509F449C0843B910584
:1016B00009F448C0853B910509F447C0863B910574
:1016C00009F446C0873B910509F445C0883B910564
:1016D00009F444C0893B910509F443C08A3B910554
:1016E00009F442C080E094E4089580E090E0089519
:1016F00081E890E4089583E890E4089582EE94E40C
:10170000089589EE94E408958AEE94E4089585EBB3
:1017100094E4089586EB94E4089587EB94E40895A7
:101720008CEC94E408958DEC94E4089583E895E4BA
:1017300008958AE895E4089582E995E4089584E996
:1017400095E4089581E296E4089583E296E408958D
:1017500084E296E4089585E296E4089586E296E4AC
:10176000089587E296E408958AE296E4089508953C
:1017700096E0799FF001112494E5899FE00DF11D19
:101780001124E60FF11DEE0FFF1FEC51FF4F859165
:1017900094910895880F991FFC01E05AF0408591BB
:1017A00094910895880F991FFC01E052FF4F859195
:1017B0009491089526E0729FF001112444E5849FDE
:1017C000E00DF11D1124E60FF11DEE0FFF1FEC518E
:1017D000FF4F859194919C013A9521154FE1340773
:1017E00008F41EC13F512115304120F49F700E9422
:1017F000D20B08959C0130532115304118F49927DC
:10180000906C0895811520E5920769F40E94BD1A35
:101810004FEF84E39CE0415080409040E1F700C0EE
:1018200000000C941F22813020E5920751F48CE5D2
:1018300093E00E9452078091D70181608093D70185
:1018400008959C0130552115304108F051C0292FD1
:1018500033272F70332721303105D9F4AC01437081
:10186000552702C0220F331F4A95E2F73C68AC01AE
:1018700064E0440F551F6A95E1F744275370242B09
:10188000352B73E0880F991F7A95E1F780769927B9
:101890001DC02230310529F4982F8827816F906A66
:1018A000089523303105A9F4AC014370552721E098
:1018B00030E002C0220F331F4A95E2F73C6843E054
:1018C000880F991F4A95E1F7807E9770822B932BA2
:1018D000089524303105E1F4AC014370552721E02F
:1018E00030E002C0220F331F4A95E2F73A68E7CF93
:1018F0009C0130572115304118F49F709062089573
:101900009C0130582115304118F49F70906A089559
:10191000803E9105E0F4803C910558F581339105B6
:1019200009F46FC048F48932910509F463C08A3222
:10193000910509F46DC072C089339105E9F08238D0
:101940009105D1F08533910509F44DC067C0833E00
:10195000910581F138F4803E9105B9F0823E910500
:10196000D9F05CC0863E910561F1873E9105A1F1F9
:1019700055C00E94CA0B08952091EA0120FD02C0C3
:1019800021FF4CC080EE90E049C08091EA0180FFC9
:10199000F9CF89E390E042C08091EA0182FF0EC056
:1019A0008091EA0184FF03C080E090E037C083EEBD
:1019B00090E034C08091EA0182FFF2CF82EE90E0A5
:1019C0002DC08091EA0183FF0BC08091EA0184FD64
:1019D000EBCF87EE90E022C08091EA0183FFF5CF44
:1019E00086EE90E01BC08091EA0185FF07C089E286
:1019F00090E014C08091EA0185FFF9CF85E390E083
:101A00000DC08091EA0186FF07C08AE290E006C01F
:101A10008091EA0186FFF9CF81E390E00E94F80A05
:101A20000895089580916D0108959FB7F8941092DC
:101A30005C019FBF9091F001943009F057C09091E4
:101A4000E9009F703091EC00232F217030FD20E8D9
:101A5000922B24E02093E9002091EB0020FF43C06B
:101A60002091EE0027FF3FC020915A01222321F050
:101A70002091E80025FF37C010925A0126E03091EE
:101A8000E80035FD15C03091F001343061F530913A
:101A9000EB0035FD28C0215021F481E080935A01EC
:101AA00022C0EFE9FFE03197F1F700C00000E7CF77
:101AB0008093F1008091E80085FD0AC08091E800E4
:101AC00080FFFCCF8091E8008E778093E80006C00D
:101AD0008FB7F89421E020935C018FBF9F709093A3
:101AE000E90080E008959F709093E9008FEF0895DA
:101AF000CF93DF9300D01F92CDB7DEB79C018091CA
:101B0000F001843019F593E099833B832A83909305
:101B1000E9008FEF9091E800815095FD06C095EDAA
:101B20009A95F1F700008111F5CF8091E80085FFCB
:101B30000DC040E050E063E070E0CE0101960E94ED
:101B400048108091E8008E778093E8000F900F9006
:101B50000F90DF91CF910895CF93DF9300D01F9224
:101B6000CDB7DEB72091F001243021F522E02983A2
:101B70009B838A8383E08093E9008FEF9091E80054
:101B8000815095FD06C095ED9A95F1F70000811101
:101B9000F5CF8091E80085FF0DC040E050E063E0A4
:101BA00070E0CE0101960E9448108091E8008E7787
:101BB0008093E8000F900F900F90DF91CF910895E0
:101BC0002091F0012430F1F422E02093E9002FEF7E
:101BD0003091E800215035FD06C035ED3A95F1F71A
:101BE00000002111F5CF2091E80025FF0BC040E057
:101BF00050E065E070E00E9448108091E8008E7728
:101C00008093E8000895CF93DF932091F001243072
:101C100009F048C0EC0180910C018823E1F080912B
:101C20000D018823C1F085E08093E9008FEF90914A
:101C3000E800815095FD06C095E19A95F1F7000006
:101C40008111F5CF8091E80085FF2CC040E050E085
:101C500060E170E017C081E08093E9008FEF909120
:101C6000E800815095FD06C095ED9A95F1F70000CA
:101C70008111F5CF8091E80085FF14C040E050E06D
:101C800068E070E0CE010E9448108091E8008E77F5
:101C90008093E80080E1FE01ADE5B1E001900D9296
:101CA0008A95E1F7DF91CF91089583E993E00E944F
:101CB00052078091EF01811109C00E94DD110E943D
:101CC0003A128091E20084608093E20008958FE8E8
:101CD00093E00E9452071092EF0108958BE893E081
:101CE0000C94520787E893E00E9452070C94EF2B64
:101CF00083E893E00E9452070E94B9210E94F52BCD
:101D00000E94DF140C94110D20915B012F5F822F34
:101D100062E30E94632D992319F020935B010895DB
:101D200010925B0180915C01882371F18091F00138
:101D3000843041F58091E9008F702091EC00922F62
:101D4000917020FD90E8892B94E09093E9009091A8
:101D5000EB0090FF14C09091EE0097FF10C090919F
:101D6000E80095FF03C01092F100F9CF9091E800D0
:101D700090FF05C09091E8009E779093E8008F70E7
:101D80008093E90010925C01089542E061EC81E0EB
:101D90000E94571142E061EC82E00E94571142E03C
:101DA00061EC83E00E94571142E261EC84E00E9402
:101DB000571142E161EC85E00C9457118091F201DA
:101DC000833009F455C030F4813071F0823009F469
:101DD0008EC008958A3009F47AC08B3009F460C04F
:101DE000893009F09CC020C08091F101813A09F04E
:101DF00096C08091E800877F8093E8008091F5018C
:101E00009091F601892B21F460E18DE591E003C00A
:101E100060E080E090E070E00E9493108091E80024
:101E20008B778093E80008958091F101813209F069
:101E300076C08091F5019091F601009719F0049712
:101E400009F06DC08091E800877F8093E800809161
:101E5000E80082FD05C08091F0018111F8CF5FC0DC
:101E60008091F10080936D018091E8008B7753C0E1
:101E70008091F101813A09F052C08091F501909171
:101E8000F601892B09F04BC08091E800877F809391
:101E9000E8008091E80080FFFCCF80910C0136C003
:101EA0008091F1018132D9F58091F5019091F6018F
:101EB000892BA9F58091E800877F8093E8000E9434
:101EC0008C118091F30180930C010C94BD1A8091C8
:101ED000F101813221F58091E800877F8093E8004D
:101EE0000E948C118091F40180936E01089580917D
:101EF000F101813AA1F48091E800877F8093E800A6
:101F00008091E80080FFFCCF80916E018093F1000A
:101F10008091E8008E778093E8000C948C110895EE
:101F200084B7877F84BF88E10FB6F8948093600000
:101F3000109260000FBE90E080E80FB6F894809396
:101F40006100909361000FBE0E946C150E94DD112C
:101F50000E943A128091E20084608093E20085E161
:101F60009DE00E94F82078940E94BF140E946E1594
:101F700082E091E00E94DA140E94DD2B82E793E078
:101F80000E9452078091F001853089F48EE693E03B
:101F90000E9452070E947D218091EE01882391F3D7
:101FA0000E94A521882371F30E943210EBCF0E947A
:101FB0009C15E8CF292F332723303105C9F064F46D
:101FC0002130310581F02230310509F043C08DE820
:101FD00090E02BEC33E042C021323105F1F02232A7
:101FE000310541F137C082E190E028E534E036C0A8
:101FF00099278130910541F08230910541F0892B7C
:1020000049F5E7ECF3E005C0EFEAF3E002C0E7E9E9
:10201000F3E0849190E09F0121C06530D8F4E62F71
:10202000F0E0EE0FFF1FEB5DFE4F2081318189E074
:1020300090E014C0653070F470E0FB01EE0FFF1FFC
:10204000E55EFE4F20813181FB01EA5EFE4F80811B
:1020500090E004C080E090E020E030E0FA013183BD
:102060002083089580E189BD82E189BD09B400FE25
:10207000FDCF8091D8008F7D8093D8008091E000C3
:1020800082608093E0008091E00081FDFCCF0895A4
:10209000CF92DF92EF92FF920F931F93CF93DF9334
:1020A000EC018B016A010E94AB11811133C0C11494
:1020B000D10439F0F60180819181081B190BC80FFA
:1020C000D91FE12CF12C0115110519F18091E800BF
:1020D00085FD16C08091E8008E778093E800C114DA
:1020E000D10449F0F60180819181E80EF91EF18258
:1020F000E08285E00FC00E94AB11882321F30AC063
:1021000089918093F10001501109FFEFEF1AFF0A46
:10211000DACF80E0DF91CF911F910F91FF90EF9088
:10212000DF90CF9008952091F7013091F8012617A4
:10213000370748F06115710539F42091E8002E77D2
:102140002093E80001C0B90140E061157105A9F1D3
:102150002091F001222309F443C0253009F442C044
:102160002091E80023FD40C02091E80022FD32C00C
:102170002091E80020FFE9CF4091F3002091F20088
:1021800030E0342BFC01CF016115710559F0283086
:10219000310540F481918093F100615071092F5F06
:1021A0003F4FF1CF41E02830310509F040E0209168
:1021B000E8002E772093E800C8CF4111C9CF0AC0AC
:1021C0008091F001882361F0853061F08091E80012
:1021D00083FD0AC08091E80082FFF2CF80E008957D
:1021E00082E0089583E0089581E008952091F70149
:1021F0003091F8012617370748F06115710539F459
:102200002091E8002E772093E80001C0B901FC017D
:1022100020E06115710591F18091F001882309F4A6
:1022200040C0853009F43FC08091E80083FD3DC087
:102230008091E80082FD2FC08091E80080FFE9CF07
:102240002091F3008091F20090E0922B61157105CE
:1022500059F08830910540F424912093F100319693
:10226000615071090196F2CF21E0089709F020E052
:102270008091E8008E778093E800CBCF2111CCCFFE
:102280000AC08091F001882361F0853061F080916F
:10229000E80083FD0AC08091E80082FFF2CF80E071
:1022A000089582E0089583E0089581E00895982FCD
:1022B000973058F59093E900981739F07091EC0039
:1022C0002091ED005091F00003C0242F762F50E0B4
:1022D00021FF19C03091EB003E7F3093EB0030912D
:1022E000ED003D7F3093ED003091EB003160309395
:1022F000EB007093EC002093ED005093F0002091E0
:10230000EE0027FF07C09F5FD3CF8F708093E90057
:1023100081E0089580E008958091F10187FF11C068
:102320008091E80082FD05C08091F0018111F8CF15
:1023300011C08091E8008B770BC08091F001882359
:1023400049F08091E80080FFF8CF8091E8008E7717
:102350008093E80008952091E4003091E50095E62F
:102360004091EC00842F817040FF22C08091E800F2
:1023700080FD1CC08091F001882391F0853091F0A0
:102380008091EB0085FD10C04091E4005091E50084
:102390004217530729F39A01915011F784E00895E9
:1023A00082E0089583E0089581E0089580E0089533
:1023B0004091E80042FFDECF08950E944B120E9438
:1023C0005312E0EEF0E0808181608083E8EDF0E080
:1023D00080818F77808319BCA7EDB0E08C918E7FD0
:1023E0008C9380818F7E80831092EF0108950F93EC
:1023F0001F93CF93DF930E944B120E945312C8ED9C
:10240000D0E088818F7788838881806888838881FD
:102410008F7D888319BC1092F0011092EC0110920C
:10242000EE011092ED0100EE10E0F80180818B7F4B
:10243000808388818160888342E060E080E00E9440
:102440005711E1EEF0E080818E7F8083E2EEF0E0D4
:10245000808181608083808188608083F8018081B1
:102460008E7F8083888180618883DF91CF911F91E7
:102470000F910895E8EDF0E080818F7E8083E7ED95
:10248000F0E080818160808384E082BF81E080937E
:10249000EF010C94F711E8EDF0E080818E7F8083EE
:1024A0001092E20008951092DA001092E10008956F
:1024B0001F920F920FB60F9211242F933F934F93B9
:1024C0005F936F937F938F939F93AF93BF93EF939C
:1024D000FF938091E10082FF0BC08091E20082FFB8
:1024E00007C08091E1008B7F8093E1000E94840E01
:1024F0008091DA0080FF1FC08091D80080FF1BC050
:102500008091DA008E7F8093DA008091D90080FF7D
:102510000DC080E189BD82E189BD09B400FEFDCF17
:1025200081E08093F0010E94550E05C019BC109205
:10253000F0010E94670E8091E10080FF19C0809138
:10254000E20080FF15C08091E2008E7F8093E20060
:102550008091E20080618093E2008091D8008062E7
:102560008093D80019BC85E08093F0010E94720E20
:102570008091E10084FF30C08091E20084FF2CC094
:1025800080E189BD82E189BD09B400FEFDCF809163
:10259000D8008F7D8093D8008091E1008F7E80935A
:1025A000E1008091E2008F7E8093E2008091E20062
:1025B00081608093E2008091EC01882311F084E037
:1025C00007C08091E30087FD02C081E001C083E085
:1025D0008093F0010E94780E8091E10083FF29C072
:1025E0008091E20083FF25C08091E100877F809386
:1025F000E10082E08093F0011092EC018091E10013
:102600008E7F8093E1008091E2008E7F8093E200D4
:102610008091E20080618093E20042E060E080E02F
:102620000E9457118091F00088608093F0000E9412
:102630006E0EFF91EF91BF91AF919F918F917F911E
:102640006F915F914F913F912F910F900FBE0F901F
:102650001F9018951F920F920FB60F9211242F936F
:102660003F934F935F936F937F938F939F93AF931A
:10267000BF93CF93DF93EF93FF93C091E900CF70A7
:102680008091EC00D82FD17080FDD0E81092E90045
:102690008091F000877F8093F00078940E946E1301
:1026A0001092E9008091F00088608093F000CD2BBB
:1026B000CF70C093E900FF91EF91DF91CF91BF916F
:1026C000AF919F918F917F916F915F914F913F91CA
:1026D0002F910F900FBE0F901F9018951F93CF93BF
:1026E000DF93CDB7DEB7AA970FB6F894DEBF0FBE63
:1026F000CDBFE1EFF1E088E08E0F9091F100919372
:102700008E13FBCF0E94DE0E8091E80083FF1FC175
:102710008091F1019091F201492F50E04A3051052A
:1027200008F015C1FA01EA5AFF4F0C94832D803846
:1027300081F0823809F00BC18091F5018F70809390
:10274000E9008091EB0085FB882780F91092E90071
:1027500006C08091ED019091EE01911182609091FF
:10276000E800977F9093E8008093F1001092F100C9
:10277000C8C0282F2D7F09F0EAC0882319F08230C5
:1027800061F0E5C08091F301813009F0E0C0933041
:1027900009F080E08093EE012BC08091F30181115C
:1027A00027C08091F5018F7009F4D1C08093E900B2
:1027B0002091EB0020FF1CC0933021F48091EB00AE
:1027C000806214C09091EB0090619093EB0021E047
:1027D00030E0A90102C0440F551F8A95E2F74093EB
:1027E000EA001092EA008091EB0088608093EB0091
:1027F0001092E9008091E800877F86C08111A7C010
:102800001091F3011F778091E3008078812B8093F2
:10281000E3008091E800877F8093E8000E948C119C
:102820008091E80080FFFCCF8091E3008068809376
:10283000E300111102C082E001C083E08093F00147
:1028400086C08058823008F082C08091F301909158
:10285000F4018C3D53E0950779F583E08A838AE2A1
:1028600089834FB7F894DE01139620E03EE051E2F1
:10287000E32FF0E050935700E49120FF03C0E2956E
:10288000EF703F5FEF708E2F90E0EA3010F0C79648
:1028900001C0C0968D939D932F5F243149F74FBFA0
:1028A0008091E800877F8093E8006AE270E0CE01C3
:1028B00001960E94931014C0AE014F5F5F4F60916C
:1028C000F5010E94DA0FBC01892B09F440C09091F8
:1028D000E800977F9093E80089819A810E94F61022
:1028E0008091E8008B778093E80031C0803879F5DB
:1028F0008091E800877F8093E8008091EC018093CD
:10290000F1008091E8008E778093E8000E948C119E
:102910001EC081111CC09091F3019230C0F48091CF
:10292000E800877F8093E8009093EC010E948C116F
:102930008091EC01811106C08091E30087FD02C007
:1029400081E001C084E08093F0010E94C50E809177
:10295000E80083FF0AC08091E800877F8093E80049
:102960008091EB0080628093EB00AA960FB6F894FA
:10297000DEBF0FBECDBFDF91CF911F910895CF93E2
:102980008091F0018823A1F0C091E900CF7090916F
:10299000EC00892F817090FD80E8C82B1092E9002F
:1029A0008091E80083FD0E946E13CF70C093E90010
:1029B000CF91089590937401809373010895E091ED
:1029C0007301F0917401309721F00190F081E02DB6
:1029D000099480E00895EF92FF920F931F93CF9395
:1029E000DF93E0917301F09174013097B1F18C01A4
:1029F0000280F381E02D09958091D70182FF2DC0DF
:102A000080FF04C08DE895E00E945207E80110E1C4
:102A100087E8E82E85E0F82E8091D70180FF0BC073
:102A200088811F928F93FF92EF920E94EB070F9085
:102A30000F900F900F90115021961111EDCF8091B2
:102A4000D70180FF0AC085E895E0DF91CF911F9103
:102A50000F91FF90EF900C945207DF91CF911F914F
:102A60000F91FF90EF900895E0917301F091740140
:102A7000309721F00480F581E02D0994089520918C
:102A80007101309172018217930771F09093720176
:102A900080937101E0917301F0917401309721F0FE
:102AA0000680F781E02D0994089520916F013091FF
:102AB00070018217930771F09093700180936F01FA
:102AC000E0917301F0917401309721F00084F18559
:102AD000E02D0994089508950C946B150E94BB2174
:102AE0000E9462090C948122CF93C82F8091D70154
:102AF00082FF1EC080FF04C086EA95E00E94520754
:102B00008091D70180FF0CC01F92CF9381EA95E09E
:102B10009F938F930E94EB070F900F900F900F9051
:102B20008091D70180FF04C08FE995E00E94520791
:102B30008C2FCF910C94110DCF92DF92EF92FF92D8
:102B40000F931F93CF93DF93CDB7DEB72B970FB6BD
:102B5000F894DEBF0FBECDBF0E947F0986E7C82E66
:102B600081E0D82E00E010E0E02E802F0E94AB0A1A
:102B7000F60141916F01F42EF826B1F40F5F1F4F5B
:102B80000E30110589F78FEF89838A831B820E949B
:102B9000C4218160782F9D838C8349815A816B8108
:102BA0008D810E943F1640C09091D70191FF04C0D3
:102BB0008B870E94B10A8B8520E030E04F2D50E0DA
:102BC000922FBA01022E02C0759567950A94E2F71A
:102BD00060FF24C02E83EF8221E030E0690102C053
:102BE000CC0CDD1C9A95E2F790E08C219D21892B7D
:102BF00009F420E028870E94C4218160782F9A87F9
:102C000089874E815F8168858A850E943F16F80119
:102C1000EA58FE4F8081C826C08206C02F5F3F4F12
:102C20002630310569F6AACF0E94F2251091750170
:102C30000E94DF141817A1F00E94DF148093750121
:102C40002B960FB6F894DEBF0FBECDBFDF91CF91AC
:102C50001F910F91FF90EF90DF90CF900C9474151F
:102C60002B960FB6F894DEBF0FBECDBFDF91CF918C
:102C70001F910F91FF90EF90DF90CF900895CF9329
:102C8000DF93CDB7DEB72B970FB6F894DEBF0FBE3C
:102C9000CDBF4F83588769877A878B87DE0111966E
:102CA00086E0FD0111928A95E9F785E0FE013796ED
:102CB00001900D928A95E1F749815A816B817C815F
:102CC0008D819E810E94571D2B960FB6F894DEBF12
:102CD0000FBECDBFDF91CF910895CF93882309F424
:102CE000C2C0C82F823859F40E94DF1481FDBBC0D6
:102CF00089E30E94F31F0E94D22089E30CC083382D
:102D000079F40E94DF1480FDAEC083E50E94F31FBA
:102D10000E94D22083E50E944620CF910C94D220BD
:102D2000843859F40E94DF1482FD9DC087E40E941C
:102D3000F31F0E94D22087E4EECF8CEF8C0F813AF4
:102D400048F48C2F0E94852A81118DC08C2F0E94FF
:102D5000F31FE3CF80E28C0F883048F4C77081E026
:102D600001C0880FCA95EAF70E949B20D6CF8BE559
:102D70008C0F833078F4C53A29F0C63A31F083E8F5
:102D800090E005C081E890E002C082E890E0CF9139
:102D90000C943F1588E58C0F833108F064C0C83A65
:102DA00039F1C93A41F1CA3A49F1CB3A51F1CC3A39
:102DB00059F1CD3A61F1C03B69F1CE3A71F1CF3AA8
:102DC00079F1C13B81F1C23B89F1C33B91F1C43B35
:102DD00099F1C53BA1F1C63BA9F1C73BB1F1C83B95
:102DE000B9F1C93BC1F1CA3BC9F180E090E038C0FC
:102DF00082EE90E035C089EE90E032C08AEE90E03D
:102E00002FC085EB90E02CC086EB90E029C087EBCB
:102E100090E026C08CEC90E023C08DEC90E020C0C8
:102E200083E891E01DC08AE891E01AC082E991E050
:102E300017C084E991E014C081E292E011C083E2FE
:102E400092E00EC084E292E00BC085E292E008C0FE
:102E500086E292E005C087E292E002C08AE292E058
:102E6000CF910C945515CF910895882309F44BC048
:102E7000823859F40E94DF1481FF45C089E30E9423
:102E8000F31F0E94D22089E30CC0833871F40E94A2
:102E9000DF1480FF38C083E50E94F31F0E94D22018
:102EA00083E50E9446200C94D220843859F40E9475
:102EB000DF1482FF28C087E40E94F31F0E94D22003
:102EC00087E4EFCF9CEF980F913A58F390E2980F78
:102ED000983050F4877091E001C0990F8A95EAF715
:102EE000892F0E94A120DFCF9BE5980F933020F41B
:102EF00080E090E00C943F15885A833120F480E004
:102F000090E00C9455150895882321F00E949B2091
:102F10000C94D2200895882321F00E94A1200C94C3
:102F2000D2200895BF92CF92DF92EF92FF920F933B
:102F30001F93CF93DF9300D000D000D0CDB7DEB782
:102F400025E0FC01DE01119601900D922A95E1F732
:102F5000FC01408131810281258122952F7063819E
:102F60007481672B09F4E7C23F3F19F44F3F09F41E
:102F7000E2C27C0149833A8389819A812E830E942F
:102F8000B21F182FB92E0E94B11F0E94781EEB2D80
:102F9000E295EF70F0E0E05AFF4F2E810C94832D04
:102FA0008B2D807F9B2D9F70F92E882319F0F29432
:102FB00080EFF822002349F0FF2009F469C28F2D29
:102FC0000E94AB200E94D22063C2812F0E9435173D
:102FD000FF2009F4B0C28F2D0E94B12026960FB6B3
:102FE000F894DEBF0FBECDBFDF91CF911F910F913F
:102FF000FF90EF90DF90CF90BF900C94D2203B2DAC
:10300000307F8B2D8F70303211F08295807F1123AD
:1030100019F0113021F12DC00023B9F0222309F459
:10302000A1C1213009F09EC126960FB6F894DEBFEB
:103030000FBECDBFDF91CF911F910F91FF90EF9009
:10304000DF90CF90BF900C94BB20222319F0213049
:1030500009F471C28E830E94BE208E8197C1002325
:1030600021F0263008F067C27DC1253008F063C228
:103070008DC1002321F0222309F474C109C2222347
:1030800009F484C11AC22B2D26952695237030E0B1
:103090002115310521F021303105D1F04CC200233A
:1030A00021F0812F9B2D937002C080E090E0269646
:1030B0000FB6F894DEBF0FBECDBFDF91CF911F9149
:1030C0000F91FF90EF90DF90CF90BF900C943F1541
:1030D000002321F0812F9B2D937002C080E090E0AF
:1030E00026960FB6F894DEBF0FBECDBFDF91CF910D
:1030F0001F910F91FF90EF90DF90CF90BF900C94B5
:103100005515812F002319F00E94782402C00E94D7
:10311000E02426960FB6F894DEBF0FBECDBFDF9138
:10312000CF911F910F91FF90EF90DF90CF90BF90C4
:103130000C9465258B2D837009F07BC00111FBC1B8
:10314000812F829586958770880F880F912F9F70A9
:10315000C92ED12CE12CF12C082E04C0CC0CDD1C86
:10316000EE1CFF1C0A94D2F714FF12C04FE050E08F
:1031700060E070E004C0440F551F661F771F8A95FA
:10318000D2F7CB01BA01609570958095909503C0F8
:1031900060E070E0CB012B2D269526952370422F01
:1031A00050E042305105D9F04330510569F16C29A6
:1031B0007D298E299F294130510551F126960FB660
:1031C000F894DEBF0FBECDBFDF91CF911F910F915D
:1031D000FF90EF90DF90CF90BF900C949F1E6C29D2
:1031E0007D298E299F2926960FB6F894DEBF0FBE43
:1031F000CDBFDF91CF911F910F91FF90EF90DF90A6
:10320000CF90BF900C94BB1E0E949F1EC701B601B9
:1032100026960FB6F894DEBF0FBECDBFDF91CF91DB
:103220001F910F91FF90EF90DF90CF90BF900C9483
:10323000831E002319F08B2D817001C08695882391
:1032400009F479C1812F829586958770880F880F40
:10325000912F9F70C92ED12CE12CF12C082E04C087
:10326000CC0CDD1CEE1CFF1C0A94D2F714FF12C01C
:103270004FE050E060E070E004C0440F551F661F4F
:10328000771F8A95D2F7CB01BA016095709580952A
:10329000909503C060E070E0CB012B2D269526951C
:1032A0002370422F50E042305105D9F04330510590
:1032B00069F16C297D298E299F294130510551F1F1
:1032C00026960FB6F894DEBF0FBECDBFDF91CF912B
:1032D0001F910F91FF90EF90DF90CF90BF900C94D3
:1032E000791F6C297D298E299F2926960FB6F8947F
:1032F000DEBF0FBECDBFDF91CF911F910F91FF9029
:10330000EF90DF90CF90BF900C94951F0E94791F93
:10331000C701B60126960FB6F894DEBF0FBECDBF2B
:10332000DF91CF911F910F91FF90EF90DF90CF90A1
:10333000BF900C945D1F103FD1F118F4103E50F473
:10334000A2C0123F09F464C008F44DC0133F09F451
:1033500074C099C01F708B2D8F710023A1F00E9443
:10336000F61E812F26960FB6F894DEBF0FBECDBF96
:10337000DF91CF911F910F91FF90EF90DF90CF9051
:10338000BF900C9484170E94171F812F26960FB6AA
:10339000F894DEBF0FBECDBFDF91CF911F910F918B
:1033A000FF90EF90DF90CF90BF900C948B1700238D
:1033B000B1F0253008F0BFC08B2D8F7126960FB667
:1033C000F894DEBF0FBECDBFDF91CF911F910F915B
:1033D000FF90EF90DF90CF90BF900C943C1F263071
:1033E00008F0A9C0E9CF0023A9F08B2D8F71269694
:1033F0000FB6F894DEBF0FBECDBFDF91CF911F9106
:103400000F91FF90EF90DF90CF90BF900C94F61E3D
:10341000002359F38B2D8F7126960FB6F894DEBFDB
:103420000FBECDBFDF91CF911F910F91FF90EF9015
:10343000DF90CF90BF900C94171F002399F08B2D35
:103440008F7126960FB6F894DEBF0FBECDBFDF9109
:10345000CF911F910F91FF90EF90DF90CF90BF9091
:103460000C94E11E26960FB6F894DEBF0FBECDBFBA
:10347000DF91CF911F910F91FF90EF90DF90CF9050
:10348000BF900C94D71E0023A9F0222309F4ADCFDE
:10349000812F26960FB6F894DEBF0FBECDBFDF9109
:1034A000CF911F910F91FF90EF90DF90CF90BF9041
:1034B0000C946D16222309F4ADCF812F26960FB6FA
:1034C000F894DEBF0FBECDBFDF91CF911F910F915A
:1034D000FF90EF90DF90CF90BF900C9435174B2D5D
:1034E0004F70612FC7010E94F40726960FB6F8941B
:1034F000DEBF0FBECDBFDF91CF911F910F91FF9027
:10350000EF90DF90CF90BF900C94FB1D4B2D4F7030
:10351000612FC70126960FB6F894DEBF0FBECDBF50
:10352000DF91CF911F910F91FF90EF90DF90CF909F
:10353000BF900C94B70B26960FB6F894DEBF0FBE63
:10354000CDBFDF91CF911F910F91FF90EF90DF9052
:10355000CF90BF9008950E94B8200E948D200E94B5
:10356000D2200E9498260E94652580E090E00E946B
:103570003F1580E090E00C9455150E94A8200C9413
:10358000AB1A0E94B21F292F22952F7030E02C30E9
:1035900031054CF42A3031056CF4225031092230C7
:1035A000310588F407C02C30310549F02F30310542
:1035B00031F009C0803E48F0803F29F406C093FBFB
:1035C000882780F9089580E0089581E00895CF93D9
:1035D000DF9300D000D01F92CDB7DEB70F900F90D1
:1035E0000F900F900F90DF91CF910895CF93DF93BD
:1035F00000D000D000D0CDB7DEB726960FB6F89435
:10360000DEBF0FBECDBFDF91CF9108951F93CF9343
:10361000DF93C091840116E080918501C81799F06D
:10362000D0E01C9FF0011D9FF00D1124EA57FE4FC2
:103630004081518162817381848195810E94F61A53
:103640002196C770E9CFDF91CF911F9108954091E6
:10365000B6015091B7016091B8017091B9018091A4
:10366000BA019091BB010C94F61A8091BB0182952E
:103670008F7009F054C08091B801882309F44FC0BD
:1036800080918401A09185016091B6017091B7018C
:103690004091B9015091BA01B6E08A1709F43FC0D0
:1036A00090E041155105C1F17F3F11F46F3FA1F149
:1036B000B89FF001B99FF00D1124EA57FE4F218108
:1036C00072132AC02081621327C02281211124C0D5
:1036D000238134812417350710F421503109241B2C
:1036E000350B283C3105C0F42091BB012F702061BF
:1036F0002093BB0126E0289FF001299FF00D1124A3
:10370000E557FE4F80818F708061808386EB91E06A
:103710000E9492170C94061B01968770BECF0895E5
:10372000CF92DF92EF92FF920F931F93CF93DF938D
:10373000CDB7DEB762970FB6F894DEBF0FBECDBF30
:103740008C0185E0F801DE011D9601900D928A95AD
:10375000E1F7D8014C9111965C91119712966C91FA
:1037600012971396CD90DC9014973091B60170911A
:10377000B7018091B9019091BA01009709F46BC12A
:103780007F3F19F43F3F09F466C1E090B801EE2095
:1037900009F4C0C02091BB01C816D90628F0F60173
:1037A000E81BF90BCF0104C0809590958C0D9D1DF1
:1037B000FF24F394883C910578F0F12C207F09F0E8
:1037C000C6C07C2DD98AC88A89890E94E71A86EBEF
:1037D00091E00E949217B1C0822F807F09F046C00D
:1037E000751314C0341312C0611110C02F70206102
:1037F0002093BB010E94271B86EB91E00E94921749
:103800008091BB01D80115968C932EC0CD2819F15B
:103810005F3F11F44F3FF9F0F62E61111CC080910B
:1038200084012091850136E0821709F45AC090E0A6
:10383000389FF001399FF00D1124EA57FE4F718136
:10384000571306C07081471303C07281711103C002
:1038500001968770E9CFF62E662309F418C180918E
:10386000BB0181608093BB01F12C11C1751308C0AD
:10387000341306C0611104C08091BB01D801C3C0DC
:103880004D875E878D859E856A8B0E94C11A6A89E5
:103890008823E1F16623D1F12091BB01822F82952B
:1038A0008F7090E0029774F08091B6019091B7010B
:1038B00098878F831986DB86CA862C87CE01079668
:1038C0000E94921786E0F801A6EBB1E001900D92FC
:1038D0008A95E1F70E94351B0E94271BFF24F39471
:1038E000D6C04D875E878D859E850E94B21F292F89
:1038F00022952F7030E0223031050CF0BCC09F7053
:1039000009F0B6C0805E883008F4C1C0C8010E94CA
:103910009217E4CFC816D90608F453C0F601E81B85
:10392000F90BCF01883C910508F450C0F12C7C2D97
:10393000D98AC88A89890E94E71AE6EBF1E086E015
:10394000DF011D928A95E9F70E94271BA0C075131D
:1039500014C0341312C0611110C08091BB01F80172
:103960008583C8010E94921786E0E6EBF1E0DF0153
:103970001D928A95E9F7FE2C8AC04D875E878D855A
:103980009E856A8B0E94C11A6A89882309F4BECF7A
:10399000662309F4BBCF2091BB01822F82958F70E3
:1039A00090E002970CF48ECF8091B6019091B70110
:1039B0009A8389831B82DD82CC822E83CE0101967D
:1039C0007FCF809590958C0D9D1DACCFF62E6623F4
:1039D00009F49CCF75132EC034132CC02091BB0169
:1039E00020FD1FC0822F82958F70D9F0D8011596C7
:1039F0002C9315978F3049F08F5F982F9295907F79
:103A0000822F8F70892B15968C93C8010E94921774
:103A100086E0F801A6EBB1E001900D928A95E1F7FE
:103A200093CF86E0F801A6EBB1E001900D928A9564
:103A3000E1F72DC04D875E878D859E850E94C11A56
:103A4000811140CF8091BB0181608093BB01C8018F
:103A50000E9492171CC0662309F458CF4D875E87D9
:103A60008D859E850E94C11A882309F44FCF2ACFE5
:103A7000811148CF0CC0243031050CF047CF9F7026
:103A800009F440CFF8019581907F09F03BCF8F2D4D
:103A900062960FB6F894DEBF0FBECDBFDF91CF9117
:103AA0001F910F91FF90EF90DF90CF9008951F939B
:103AB000CF93DF93CDB7DEB72C970FB6F894DEBF68
:103AC0000FBECDBF4F83588769877A878B879C87C6
:103AD000CE0107960E94901B882369F08F819885FC
:103AE0002A853B85232BF1F19F3F09F063C08F3F6F
:103AF00009F060C037C086E0FE013796DE011196FE
:103B000001900D928A95E1F76F817885EA85FB85B2
:103B1000309741F17F3F11F46F3F21F120918501F2
:103B200030E0C9010196877099274091840150E0E7
:103B30008417950709F447C069837A83FD83EC8372
:103B400096E0929FD001939FB00D1124AA57BE4FCB
:103B5000FE01319601900D929A95E1F780938501CF
:103B60000E94061B16E080918401909185018917BF
:103B7000C1F1189FC00111248A579E4F0E94901BCB
:103B8000882379F1E09184011E9FF0011124EA5706
:103B9000FE4F4081518162817381848195810E94B1
:103BA000F61A8091840190E001968770992780939E
:103BB0008401D9CF4F81588569857A858B859C850D
:103BC0000E94F61ACFCF0E94BD1A10928501109262
:103BD0008401E6EBF1E086E0DF011D928A95E9F7CA
:103BE000C1CF2C960FB6F894DEBF0FBECDBFDF91CC
:103BF000CF911F910895EF92FF920F931F93CF9350
:103C0000DF938C01892B09F46CC0F12CEE24E39432
:103C1000E8012196F8018491843740F4843008F05B
:103C200051C0813081F0823019F15BC0853709F4D1
:103C300044C0A8F19CE7980F903708F052C08F77E6
:103C40000E94351741C00E5F1F4FFE01C49180E2F4
:103C50008C0F883048F4C7708E2D01C0880FCA952C
:103C6000EAF70E94AB2014C08C2F0E946D162DC065
:103C70000E5F1F4FFE01C49180E28C0F883058F414
:103C8000C7708E2D01C0880FCA95EAF70E94B12037
:103C90000E94D2201AC08C2F0E94351716C00E5FCA
:103CA0001F4FFE01C491CC2381F08FE99FE0019763
:103CB000F1F700C00000C150F6CF0E5F1F4FFE01AC
:103CC000F49003C00E946D168E018F2D882309F495
:103CD0009FCFEFE9FFE03197F1F700C0000081507E
:103CE000F5CFDF91CF911F910F91FF90EF90089545
:103CF00008956093C0017093C1018093C2019093B5
:103D0000C3010C94AB1A0F931F930091C001109143
:103D1000C1012091C2013091C301DC01CB01802B94
:103D2000912BA22BB32B8093C0019093C101A09340
:103D3000C201B093C3011F910F910C94AB1A0F9362
:103D40001F930091C0011091C1012091C2013091D7
:103D5000C301DC01CB0180239123A223B3238093F1
:103D6000C0019093C101A093C201B093C3011F9100
:103D70000F910C94AB1A0F931F930091C0011091F7
:103D8000C1012091C2013091C301DC01CB01802728
:103D90009127A227B3278093C0019093C101A093DC
:103DA000C201B093C3011F910F910C94AB1A1092F2
:103DB000BC011092BD011092BE011092BF010C9483
:103DC000AB1A41E050E060E070E004C0440F551FC2
:103DD000661F771F8A95D2F74093BC015093BD01AF
:103DE0006093BE017093BF010C94AB1A41E050E0A8
:103DF00060E070E004C0440F551F661F771F8A956E
:103E0000D2F78091BC019091BD01A091BE01B0910B
:103E1000BF01482B592B6A2B7B2B4093BC0150933D
:103E2000BD016093BE017093BF010C94AB1A41E0D9
:103E300050E060E070E004C0440F551F661F771F1C
:103E40008A95D2F740955095609570958091BC0108
:103E50009091BD01A091BE01B091BF0148235923AB
:103E60006A237B234093BC015093BD016093BE0144
:103E70007093BF010C94AB1A41E050E060E070E039
:103E800004C0440F551F661F771F8A95D2F7809193
:103E9000BC019091BD01A091BE01B091BF01482726
:103EA00059276A277B274093BC015093BD0160933B
:103EB000BE017093BF010C94AB1A0F931F93009136
:103EC000BC011091BD012091BE013091BF01DC0108
:103ED000CB01802B912BA22BB32B8093BC01909311
:103EE000BD01A093BE01B093BF011F910F910C942F
:103EF000AB1A0F931F930091BC011091BD0120914B
:103F0000BE013091BF01DC01CB0180239123A223AC
:103F1000B3238093BC019093BD01A093BE01B093E5
:103F2000BF011F910F910C94AB1A0F931F93009137
:103F3000BC011091BD012091BE013091BF01DC0197
:103F4000CB0180279127A227B3278093BC019093B0
:103F5000BD01A093BE01B093BF011F910F910C94BE
:103F6000AB1A0895CF92DF92EF92FF920F931F93B7
:103F7000CF93DF938C01C090C001D090C101E0903D
:103F8000C201F090C3014091BC015091BD0160910C
:103F9000BE017091BF01C42AD52AE62AF72ACFE1D3
:103FA000D0E0D701C6010C2E04C0B695A795979511
:103FB00087950A94D2F780FF07C0B8018C2F0E9422
:103FC000DA0B8130910531F4219758F7B80180E080
:103FD0000E94DA0BDF91CF911F910F91FF90EF902C
:103FE000DF90CF90089590910C01992321F090914A
:103FF0000D01911109C020910E0130910F01F901BD
:1040000032969FEF40E030C0982F96959695969502
:104010009F30A0F4E0910E01F0910F01E90FF11D26
:10402000877021E030E0A90102C0440F551F8A9536
:10403000E2F7CA019181892B818308959091D7017C
:1040400090FF23C01F928F9387ED95E09F938F93EE
:104050000E94EB070F900F900F900F9008959F3FD5
:1040600039F04F5F4E3041F051915813F8CF0DC0E9
:104070005111F7CF942FF5CF9F3F39F0F901E90F98
:10408000F11D97FDFA9582830895089590910C0192
:10409000992321F090910D01911109C020910E01F9
:1040A00030910F01F9013296205F3F4F30C0982FB9
:1040B0009695969596959F30A8F4E0910E01F09113
:1040C0000F01E90FF11D877021E030E0A90102C066
:1040D000440F551F8A95E2F7CA0180959181892383
:1040E000818308959091D70190FF16C01F928F93FE
:1040F00089EB95E09F938F930E94EB070F900F90B1
:104100000F900F9008953196E217F30729F09081F0
:104110009813F9CF1082F7CF089581E090E0E091F5
:104120000E01F0910F01E80FF91F10820196803106
:104130009105A9F708959091D601892B8093D60116
:10414000089580959091D60189238093D601089592
:104150001092D60108959091D501892B8093D501B5
:10416000089580959091D50189238093D501089574
:104170001092D50108958093C40108951092C4014E
:10418000089580910E0190910F01FC0131969C01E0
:10419000205F3F4F80E0919191118F5FE217F3070D
:1041A000D1F70895E0910E01F0910F018091D601B1
:1041B0008083E0910E01F0910F0190818091D501F3
:1041C000892B80838091C401882361F0E0910E01E6
:1041D000F0910F019081892B80830E94C120811171
:1041E0001092C40180910E0190910F010C94EB1478
:1041F00090933B0180933A010895CF92DF92EF9222
:10420000FF926C01EE24FF24C114D104E104F104F7
:1042100021F0C701B60120E101C020E0C72ED82E51
:10422000E92EFF24C114D104E104F10419F0285F40
:10423000C701B6016B017C0154E0F694E794D79472
:10424000C7945A95D1F7C114D104E104F10419F0CF
:104250002C5FC701B6016B017C0142E0F694E79444
:10426000D794C7944A95D1F7C114D104E104F1045D
:1042700019F02E5FC701B601DC01CB01B695A795F9
:1042800097958795892B8A2B8B2B09F02F5F822F8F
:10429000FF90EF90DF90CF9008958295982F9C7CAF
:1042A000392F36953695282F237344E0249FC0017B
:1042B0001124932F982B292F2A7A2695892F8575DB
:1042C000880F822B08951F93CF93DF931F92CDB752
:1042D000DEB799830E944D21182F9981892F0E9462
:1042E0004D21212F30E0322F2227A901482BCA016E
:1042F0000F90DF91CF911F9108958091F00184304C
:1043000009F11092D80120E488E190E00FB6F8940A
:10431000A895809360000FBE2093600083B7817FD3
:10432000846083BF83B7816083BF7894889583B7A7
:104330008E7F83BF88E10FB6F8948093600010925F
:1043400060000FBE089508950895CF930E94A321A1
:104350000E947F090E94A421C0E08C2F0E94AB0A1A
:10436000811104C0CF5FCE30C1F701C081E0CF9191
:1043700008950C94BD1A82E084BD93E095BD9AEF38
:1043800097BD80936E0008952FB7F8948091D9015E
:104390009091DA01A091DB01B091DC012FBF08956B
:1043A000CF92DF92EF92FF920F931F932FB7F89463
:1043B0004091D9015091DA016091DB017091DC01EB
:1043C0002FBF6A017B01EE24FF248C0120E030E046
:1043D000C016D106E206F30610F4415051099A01C5
:1043E000281B390BC9011F910F91FF90EF90DF90AF
:1043F000CF9008951F920F920FB60F9211248F93B2
:104400009F93AF93BF938091D9019091DA01A091CE
:10441000DB01B091DC010196A11DB11D8093D90192
:104420009093DA01A093DB01B093DC01BF91AF91CF
:104430009F918F910F900FBE0F901F9018950E9423
:10444000DD11F8942FEF87EA91E6215080409040EB
:10445000E1F700C0000087E090EBDC018093F901F8
:104460009093FA01A093FB01B093FC019CE088E1DA
:104470000FB6F894A895809360000FBE90936000EB
:10448000FFCFEF92FF920F931F93CF93DF93D82F1D
:10449000C0E08C2F0E94AB0A00E010E0E82EF12C67
:1044A000C701002E02C0959587950A94E2F780FD1A
:1044B00006C00F5F1F4F0630110591F709C0602F2E
:1044C0007C2F80E00E94B80BD813F3CF81E004C0AA
:1044D000CF5FCE30F1F680E0DF91CF911F910F9149
:1044E000FF90EF900895CF93C82F8CE20E94412255
:1044F000882321F08C2FCF910C94412280E0CF9122
:104500000895CF930E94D023811102C00E94B62348
:104510008CEF95E00E945207C5E6C15049F00E9419
:104520007F098FE39CE90197F1F700C00000F5CF08
:1045300085EF95E00E94520789E20E947322811163
:1045400013C18AE20E94732281110E94B62385E082
:104550000E94732281110E941F220E94DB238093FC
:10456000D70187E00E9473228823A9F18BE10E9482
:104570007322882351F08091D70181FB222720F9F3
:1045800091E0922790FB81F90EC08EE00E94732289
:10459000882361F08091D70182FB222720F991E0E6
:1045A000922790FB82F98093D70115C080E10E9489
:1045B00073229091D701882341F093FB222720F9A1
:1045C00081E0822780FB93F904C0892F809580FBCE
:1045D00090F99093D7018091D7010E94DF230E9428
:1045E000ED238093EA0180EE0E947322882341F03C
:1045F0008091EA01982F909590FB80F98093EA01D1
:1046000089E30E947322882359F08091EA0181FB9B
:10461000222720F991E0922790FB81F98093EA010B
:1046200082EE0E947322882359F08091EA0182FB76
:10463000222720F991E0922790FB82F98093EA01EA
:1046400086EE0E947322882359F08091EA0183FB51
:10465000222720F991E0922790FB83F98093EA01C9
:1046600083EE0E947322882359F08091EA0184FB33
:10467000222720F991E0922790FB84F98093EA01A8
:1046800085E30E947322882359F08091EA0185FB1B
:10469000222720F991E0922790FB85F98093EA0187
:1046A00081E30E947322882359F08091EA0186FBFE
:1046B000222720F991E0922790FB86F98093EA0166
:1046C00081E10E947322882359F08091EA0187FBDF
:1046D000222720F991E0922790FB87F98093EA0145
:1046E0008091EA010E94F1238091EA0187FB8827EB
:1046F00080F980930D0187E20E947322C82F8EE11A
:104700000E9473228111C2608FE10E947322811185
:10471000C46080E20E9473228111C86081E20E941D
:1047200073228111C06182E20E9473228111C062F2
:1047300083E20E9473228111C06484E20E9473228A
:10474000882311F0C06802C0CC2329F08C2F0E946E
:10475000E8236C2F03C00E94E423682F70E080E000
:1047600090E0CF910C94791ECF9108956DEE7EEF7D
:1047700080E090E00E94B92D60E082E090E00E942D
:10478000AB2D60E083E090E00E94AB2D60E084E020
:1047900090E00E94AB2D60E085E090E00C94AB2DA2
:1047A00080E090E00E94A52D21E08D3E9E4F09F013
:1047B00020E0822F089582E090E00C949D2D682FD8
:1047C00082E090E00C94AB2D83E090E00C949D2D62
:1047D000682F83E090E00C94AB2D84E090E00C9483
:1047E0009D2D682F84E090E00C94AB2D8091DF012B
:1047F00080FF0BC06091130185E0689FB001112418
:1048000075956795759567952BC081FF09C0609177
:10481000130185E0689FB00111247595679520C04C
:1048200082FF07C06091130185E0689FB0011124E9
:1048300017C09091E0019923D1F060911201961771
:1048400088F72091130185E0289F90011124929F01
:10485000A001939F500D112470E0CA010E946F2D9A
:104860006038710540F46115710539F002C065E0EA
:1048700070E0862F08958FE7089581E00895809174
:10488000DF0180FF08C06091110170E075956795A8
:104890007595679521C081FF06C06091110170E098
:1048A0007595679519C082FF04C06091110170E091
:1048B00010C09091E0019923C1F06091100196170A
:1048C000A0F780911101899FC001112470E00E941E
:1048D0006F2D6038710528F46115710521F0862F60
:1048E00008958FE7089581E0089561E070E0F4CFC6
:1048F000803F21F40E94F623819504C0813F29F472
:104900000E94F6238093E3010895823F21F40E94E0
:10491000F623819504C0833F29F40E94F6238093F7
:10492000E2010895893F19F40E943F2405C08A3F9F
:1049300031F40E943F2481958093E40108958B3FD8
:1049400021F40E943F24819504C08C3F29F40E94E9
:104950003F248093E5010895843F21F48091E10193
:10496000816017C0853F21F48091E101826011C010
:10497000863F21F48091E10184600BC0873F21F4E0
:104980008091E101886005C0883F31F48091E101A8
:1049900080618093E10108958D3F21F48091DF01D2
:1049A00081600BC08E3F21F48091DF01826005C0E1
:1049B0008F3F29F48091DF0184608093DF010895A7
:1049C000803F39F48091E30187FF6CC01092E301CE
:1049D00069C0813F29F48091E3011816BCF362C0DD
:1049E0009091E201823F29F497FF5CC01092E201AE
:1049F00059C0833F19F41916CCF354C0893F41F4D0
:104A00008091E40118160CF04DC01092E4014AC0E8
:104A10008A3F29F48091E40187FF44C0F6CF8B3FA1
:104A200039F48091E50187FF3DC01092E5013AC05D
:104A30008C3F29F48091E5011816BCF333C0843F04
:104A400021F48091E1018E7F17C0853F21F4809190
:104A5000E1018D7F11C0863F21F48091E1018B7FC0
:104A60000BC0873F21F48091E101877F05C0883F1B
:104A700031F48091E1018F7E8093E10113C08D3F7D
:104A800021F48091DF018E7F0BC08E3F21F4809155
:104A9000DF018D7F05C08F3F29F48091DF018B7F7F
:104AA0008093DF018091E20181110EC08091E301CA
:104AB00081110AC08091E401811106C08091E50155
:104AC000811102C01092E00108958091D70183FF07
:104AD0007EC088E396E00E9452078091E1011F9218
:104AE0008F9383E396E09F938F930E94EB0781E37C
:104AF00096E00E9452078091E201282F332727FD7C
:104B000030953F938F938EE296E09F938F930E9410
:104B1000EB078CE296E00E9452078091E301282F78
:104B2000332727FD30953F938F9389E296E09F933B
:104B30008F930E94EB0787E296E00E9452078091D4
:104B4000E401282F332727FD30953F938F9384E28C
:104B500096E09F938F930E94EB0782E296E00E947B
:104B600052078091E501282F332727FD30953F9389
:104B70008F938FE196E09F938F930E94EB078CE1D8
:104B800096E00E9452078091E0011F928F9389E185
:104B900096E09F938F930E94EB0787E196E00E9437
:104BA00052078091DF011F928F9384E196E09F93DB
:104BB0008F930E94EB0781E196E00E9452078DB728
:104BC0009EB74C960FB6F8949EBF0FBE8DBF81EE78
:104BD00091E00E9434150E94C4219093DE018093DD
:104BE000DD0108951F93CF93DF938091DD019091B4
:104BF000DE010E94D021AC019091E001992321F0C7
:104C00002091140130E006C0209115018AE0289F10
:104C1000900111244217530708F486C08091E201E5
:104C2000C091E301D091E4011091E501811107C029
:104C3000C11176C0D11174C0111172C075C09F3FEF
:104C400019F09F5F9093E001181624F40E94F62358
:104C50008093E2018091E20187FF05C00E94F62364
:104C600081958093E2011C1624F40E94F623809320
:104C7000E3018091E30187FF05C00E94F62381953F
:104C80008093E3016091E201662339F1C091E30171
:104C9000CC2319F1772767FD7095872F972F0E94F6
:104CA000742C23E333E343E35FE30E94D82C0E9498
:104CB000412C6093E2016C2F772767FD7095872F59
:104CC000972F0E94742C23E333E343E35FE30E94B6
:104CD000D82C0E94412C6093E3011D1624F40E94FD
:104CE0003F248093E4018091E40187FF05C00E9486
:104CF0003F2481958093E401111624F40E943F24FF
:104D00008093E5018091E50187FF05C00E943F2463
:104D100081958093E501DF91CF911F910C946525DA
:104D20009F3F09F08ECF96CFDF91CF911F910895CD
:104D3000E1EEF1E085E0DF011D928A95E9F710923E
:104D4000E0011092DF0108958BE598E00E94520780
:104D50001F9281E08F931F9285E08F938DE098E002
:104D60009F938F930E94EB070F900F900F900F90DF
:104D70000F900F9008958330E9F128F4813061F0AD
:104D8000823009F10895853009F462C008F449C001
:104D9000863009F474C0089580911501262F30E003
:104DA000280F311D2F3F310524F4680F6093150142
:104DB00003C08FEF80931501809115011F928F938F
:104DC00086E497E072C080911401262F30E0280F0E
:104DD000311D2F3F310524F4680F6093140103C087
:104DE0008FEF80931401809114011F928F9384E3BD
:104DF00097E05BC080911301262F30E0280F311D12
:104E00002F3F310524F4680F6093130103C08FEF27
:104E100080931301809113011F928F9381E297E099
:104E200044C080911201262F30E0280F311D2F3F02
:104E3000310524F4680F6093120103C08FEF809353
:104E40001201809112011F928F938CE097E02DC088
:104E500080911101262F30E0280F311D2F3F3105A1
:104E600024F4680F6093110103C08FEF8093110148
:104E7000809111011F928F9383EF96E016C080916D
:104E80001001262F30E0280F311D2F3F310524F46B
:104E9000680F6093100103C08FEF80931001809121
:104EA00010011F928F9388ED96E09F938F930E943D
:104EB000EB070F900F900F900F900895833081F1C2
:104EC00028F4813059F08230D1F00895853009F40A
:104ED00049C0B8F1863009F456C008958091150193
:104EE000681720F4861B8093150102C010921501EB
:104EF000809115011F928F9389EC96E054C08091A8
:104F00001401681720F4861B8093140102C01092CC
:104F10001401809114011F928F9387EB96E043C098
:104F200080911301681720F4861B8093130102C03F
:104F300010921301809113011F928F9384EA96E0DF
:104F400032C080911201681720F4861B80931201F1
:104F500002C010921201809112011F928F938FE86C
:104F600096E021C080911101681720F4861B809380
:104F7000110102C010921101809111011F928F93B3
:104F800086E796E010C080911001681720F4861B18
:104F90008093100102C010921001809110011F92A5
:104FA0008F938BE596E09F938F930E94EB070F9072
:104FB0000F900F900F900895CF93C82F1F928F934B
:104FC00080E699E09F938F930E94EB0781E090E049
:104FD000A0E0B0E0BC01CD0104C0660F771F881FC0
:104FE000991FCA95D2F70E94791E0F900F900F90CB
:104FF0000F90CF910C94BD1ACF938D3109F465C0F9
:10500000B0F58E3009F4CCC100F5873009F49BC1AE
:10501000A8F4863009F06DC28091D701817F8E7F20
:105020008093D70185E699E00E94520781EA9DE0CE
:105030000E94520781E08093E70180C1883009F423
:105040004FC08B3009F47CC154C2863109F4F0C1E1
:1050500038F4803109F4B8C1813109F430C249C251
:10506000893109F4CEC18B3109F486C142C285333E
:1050700009F437C248F4873209F433C208F433C262
:10508000893209F42EC235C2833438F48A3308F0E9
:105090002CC2883309F454C12CC2833409F421C2D0
:1050A000883409F026C20E94BD1A80E99DE00E9462
:1050B00052079FEF23ED80E3915020408040E1F7BD
:1050C00000C000000E941F2239C180EB9DE00E94B9
:1050D00052070E94FB2B0E94DF140E94110D2EC16B
:1050E00085EA9DE00E94520786E79BE00E945207F6
:1050F0000E94E4231F928F9383E79BE09F938F93FB
:105100000E94EB0781E79BE00E9452070E94DB238D
:10511000C82F8EE59BE00E9452071F92CF9389E52E
:105120009BE09F938F930E94EB0787E59BE00E9493
:1051300052078DE49BE00E9452078C2F81701F92D2
:105140008F938AE49BE09F938F930E94EB0788E400
:105150009BE00E9452078EE39BE00E945207C1FB36
:10516000882780F91F928F938BE39BE09F938F9307
:105170000E94EB0789E39BE00E9452078DE29BE0CF
:105180000E945207C2FB882780F91F928F938AE200
:105190009BE09F938F930E94EB0788E29BE00E9425
:1051A00052078FE19BE00E945207C3FBCC27C0F956
:1051B0001F92CF938CE19BE09F938F930E94EB070C
:1051C0008AE19BE00E9452070E94ED23C82F86E0EF
:1051D0009BE00E9452071F92CF9381E09BE09F9338
:1051E0008F930E94EB078FEF9AE00E94520786EEA2
:1051F0009AE00E9452078C2F81701F928F9383EE4A
:105200009AE09F938F930E94EB078DB79EB780968D
:105210000FB6F8949EBF0FBE8DBF81EE9AE00E943C
:1052200052078AEC9AE00E945207C1FB882780F956
:105230001F928F9387EC9AE09F938F930E94EB07C6
:1052400085EC9AE00E94520783EB9AE00E94520795
:10525000C2FB882780F91F928F9380EB9AE09F937F
:105260008F930E94EB078EEA9AE00E9452078CE926
:105270009AE00E945207C3FB882780F91F928F9300
:1052800089E99AE09F938F930E94EB0787E99AE060
:105290000E9452078DE89AE00E945207C4FB8827BB
:1052A00080F91F928F938AE89AE09F938F930E94D0
:1052B000EB0788E89AE00E94520786E79AE00E948E
:1052C0005207C5FB882780F91F928F9383E79AE0E6
:1052D0009F938F930E94EB0781E79AE00E94520709
:1052E00085E59AE00E945207C6FB882780F91F9245
:1052F0008F9382E59AE09F938F930E94EB0780E55E
:105300009AE00E94520788E49AE00E945207C7FB85
:10531000CC27C0F91F92CF9385E49AE09F938F9397
:105320000E94EB0783E49AE00E9452078DB79EB774
:105330004C960FB6F8949EBF0FBE8DBFC1E0DEC085
:105340008CE899E05BC08091D701C82FC17080FFC5
:1053500009C083E89DE00E9452078091D701817FB8
:105360008E7F47C087E79DE00E9452078091D7015A
:1053700081608093D701E2CF9091D70191FBCC2738
:10538000C0F981E0C827892FC0FB81F98093D7013C
:10539000CC2319F08AE69DE027C08CE59DE02EC065
:1053A0009091D70192FBCC27C0F981E0C827892FC3
:1053B000C0FB82F98093D701CC2319F08DE49DE0E6
:1053C00013C08DE39DE01AC09091D70193FBCC27C9
:1053D000C0F981E0C827892FC0FB83F98093D701EA
:1053E000CC2351F081E39DE00E9452078091D701C8
:1053F00081608093D70182C084E29DE00E945207C1
:105400009DCF85E19DE00E94520789EE9CE00E94BD
:1054100052078CEA9CE00E94520785E89CE00E94BB
:10542000520781E49CE00E94520786E19CE0E6CFAF
:1054300088E09CE00E9452070E94DF141F928F9325
:105440008EEE9BE09F938F930E94EB0780910C015F
:105450001F928F9387ED9BE09F938F930E94EB07A2
:1054600080916E011F928F9384EC9BE09F938F93AA
:105470000E94EB0780910D011F928F9381EB9BE0BF
:105480009F938F930E94EB078091D9019091DA014D
:10549000A091DB01B091DC01BF93AF939F938F93F9
:1054A0008DE99BE09F938F930E94EB078DB79EB78A
:1054B00046960FB6F8949EBF0FBE8DBF3FCF0E9499
:1054C000BD1AC0910D0181E0C827C0930D01CC2306
:1054D00029F083E99BE00E94520710C088E89BE016
:1054E0008DCF80E003C08D5101C089530E94DC271D
:1054F00025CF86E89BE00E945207C0E08C2FCF9119
:10550000089580E0089580E00895CF93C82F80919A
:10551000E701813081F020F0823009F44FC045C1AD
:10552000E0910E01F0910F018081813169F08232AA
:1055300009F03DC109C0E0910E01F0910F01808199
:10554000813111F0823261F48C2F0E94812A811105
:1055500004C08C2F0E94FC272FC081E090E02CC05B
:105560008C2F0E94832A811126C0C431E1F070F48F
:10557000CB3081F0C031D1F40E94A42688E599E0B7
:105580000E94520782E08093E70115C0C93259F0AA
:10559000C83361F485E699E00E9452078CE599E0F2
:1055A0000E94520708C01092E70103C186E599E006
:1055B0000E945207FEC081E08170FDC0C43220F518
:1055C000CE3108F0C0C0CB3099F1C8F4C73009F033
:1055D000D2C08AE08093150194E19093140193E086
:1055E000909313018093120188E08093110188E267
:1055F000809310018CEF97E00E945207BFC0C33127
:1056000049F1C431C1F0B7C0CB3409F4A9C028F4C2
:10561000C93289F0C83361F0AEC0C13509F49EC00B
:10562000C23509F499C0CE3409F0A5C06AE09EC025
:105630000E94A426A3C08091E601882319F010924D
:10564000E6019CC089E098E00E94520781E08093C7
:10565000E701B1C083EE97E00E94520781ED97E029
:105660000E945207809115011F928F938EEC97E054
:105670009F938F930E94EB078CEC97E00E94520758
:105680008AEB97E00E945207809114011F928F933A
:1056900087EB97E09F938F930E94EB0785EB97E052
:1056A0000E94520786EA97E00E94520780911301F8
:1056B0001F928F9383EA97E09F938F930E94EB074B
:1056C00081EA97E00E94520780E997E00E94520722
:1056D000809112011F928F938DE897E09F938F9393
:1056E0000E94EB078BE897E00E94520786E797E05D
:1056F0000E945207809111011F928F9383E797E0D8
:105700009F938F930E94EB0781E797E00E945207D7
:105710008AE597E00E945207809110011F928F93B3
:1057200087E597E09F938F930E94EB0785E597E0CD
:105730000E9452078DB79EB748960FB6F8949EBF49
:105740000FBE8DBF1BC0CE51EC2FF0E0E15DFE4FD0
:1057500080818093E60112C061E003C061E006C071
:105760006AE08091E6010E94BB2608C08091E601B4
:105770000E945E2703C08AEF97E013C08091E60184
:10578000882369F01F928F9384EF97E09F938F9304
:105790000E94EB070F900F900F900F9004C081EFC5
:1057A00097E00E94520781E006C01092E70180E076
:1057B00002C080E001CFCF910895E1E8F0E0808160
:1057C000886080838081816080838FB7F89493E0C4
:1057D0009093890090ED909388008FBF0895EFE635
:1057E000F0E08081826080830895EFE6F0E08081C0
:1057F0008D7F80830895EFE6F0E0908182E0892735
:10580000808308951F920F920FB60F9211242F9349
:105810003F934F935F936F937F938F939F93AF9338
:10582000BF93EF93FF938091E8019091E901019676
:105830009093E9018093E801811103C082E00E9406
:10584000110DE091E901E695E695F0E0E054F24FA4
:10585000E4918091E8018E1303C080E00E94110D55
:10586000FF91EF91BF91AF919F918F917F916F9138
:105870005F914F913F912F910F900FBE0F901F900E
:10588000189504D06894B1118DC0089570D088F037
:105890009F5790F0B92F9927B751A0F0D1F0660F1C
:1058A000771F881F991F1AF0BA95C9F712C0B13037
:1058B00081F077D0B1E0089574C0672F782F8827E2
:1058C000B85F39F0B93FCCF3869577956795B39576
:1058D000D9F73EF490958095709561957F4F8F4FE5
:1058E0009F4F0895E89409C097FB3EF490958095EA
:1058F000709561957F4F8F4F9F4F9923A9F0F92F96
:1059000096E9BB279395F695879577956795B79513
:10591000F111F8CFFAF4BB0F11F460FF1BC06F5FF9
:105920007F4F8F4F9F4F16C0882311F096E911C00B
:10593000772321F09EE8872F762F05C0662371F02C
:1059400096E8862F70E060E02AF09A95660F771F40
:10595000881FDAF7880F9695879597F9089557FD70
:105960009058440F551F59F05F3F71F04795880FCD
:1059700097FB991F61F09F3F79F087950895121664
:1059800013061406551FF2CF4695F1DF08C0161610
:1059900017061806991FF1CF8695710561050894C1
:1059A0000895E894BB2766277727CB0197F90895D8
:1059B0000BD078C069D028F06ED018F0952309F08C
:1059C0005AC05FC01124EECFCADFA0F3959FD1F378
:1059D000950F50E0551F629FF001729FBB27F00D9D
:1059E000B11D639FAA27F00DB11DAA1F649F6627F2
:1059F000B00DA11D661F829F2227B00DA11D621F41
:105A0000739FB00DA11D621F839FA00D611D221FFA
:105A1000749F3327A00D611D231F849F600D211DDE
:105A2000822F762F6A2F11249F5750408AF0E1F081
:105A300088234AF0EE0FFF1FBB1F661F771F881FCA
:105A400091505040A9F79E3F510570F014C0AACF65
:105A50005F3FECF3983EDCF3869577956795B795B5
:105A6000F795E7959F5FC1F7FE2B880F911D9695DF
:105A7000879597F9089597F99F6780E870E060E04F
:105A800008959FEF80EC089500240A9416161706D7
:105A900018060906089500240A941216130614061F
:105AA00005060895092E0394000C11F4882352F082
:105AB000BB0F40F4BF2B11F460FF04C06F5F7F4F3A
:105AC0008F4F9F4F0895991B79E004C0991F961737
:105AD00008F0961B881F7A95C9F78095089597FB63
:105AE000072E16F4009407D077FD09D00E94892D67
:105AF00007FC05D03EF4909581959F4F08957095D1
:105B000061957F4F0895EE0FFF1F0590F491E02DF2
:105B10000994AA1BBB1B51E107C0AA1FBB1FA617F4
:105B2000B70710F0A61BB70B881F991F5A95A9F746
:105B300080959095BC01CD010895F999FECF92BD55
:105B400081BDF89A992780B50895A8E1B0E042E0B8
:105B500050E00C94C02D262FF999FECF1FBA92BDAC
:105B600081BD20BD0FB6F894FA9AF99A0FBE01963E
:105B700008950E94AB2D272F0C94AC2DDC01CB0196
:105B8000FC01F999FECF06C0F2BDE1BDF89A31964D
:105B900000B40D9241505040B8F70895F894FFCFEB
:105BA0002002120D030EE00DAC0D780D0101C501B0
:105BB00028080A03140A3F4D3620394605F904C364
:105BC00004A3046A04DD03F6030F04280448040157
:0A5BD000020304050607080900009F
:00000001FF

@ -0,0 +1,137 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_extras/keymap_neo2.h"
// Layer names
#define BASE 0 // default layer
#define FMU 1 // FMU layer
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0 (default)
*
* TAB 1 2 3 4 5 ` ´ 6 7 8 9 0 BKSPC
*
* Y X V L C W HOM END K H G F Q ß
* E
* Mod3 U I A E O S N R T D Mod3
* TL2 TL3
* LSHFT Ü Ö Ä P Z B M , . J Shift
*
* CTL ALT MO1 Win Mod4 Mod4 Win MO1 Alt CTL
*
*
*
*
* SPC RTN RTN SPC
* HYP MEH
*
*/
[BASE] = KEYMAP(
// left hand
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME,
NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O,
KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, KC_TRNS,
KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L,
KC_LEFT, KC_UP,
KC_MINS,
KC_SPC, KC_ENT, ALL_T(KC_NO),
// right hand
DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS,
NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R,
KC_TRNS, NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT,
NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
KC_DOWN, KC_RGHT,
KC_MINS,
MEH_T(KC_NO),KC_ENT,KC_SPC
),
/* Layer 1 (F-keys, Mouse and Unicode)
*
*
*
* F9 F10 F11 F12
*
* F5 F6 F7 F8
*
* F1 F2 F3 F4
*
* (MO1) (MO1)
*
* Ms Ms Ms Ms
*
* MLC MRC
*
*
*
*/
[FMU] = KEYMAP(
// left hand
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_MS_L, KC_MS_U,
KC_BTN1,
KC_TRNS,KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS, KC_TRNS,KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
KC_TRNS,KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
KC_TRNS, KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_MS_D, KC_MS_R,
KC_BTN2,
KC_TRNS, KC_TRNS,KC_TRNS
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(FMU)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
}
else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void)
{
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
case FMU:
ergodox_right_led_1_on();
default:
ergodox_board_led_off();
break;
}
};

@ -0,0 +1,195 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define PROG 1 // symbols
#define NAVI 2 // navigation keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | BkSpce |
* |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | Y | | G | Y | U | I | O | P | Enter |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | LCtrl | A | S | D | F | G |------| |------| H | J | K | L | ; | Enter |
* |--------+------+------+------+------+------| H | | B |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |`/Ctrl| \ | | | LAlt | | RAlt | | [ | ] |'/Ctrl|
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | PrtS | Apps | | Paus | CtAl |
* ,------+------+------| |------+------+------.
* | | | L1 | | L1 | | |
* | Spce | ~L2 +------| |------+ ~L1 | Spce |
* | | | LGui | | RGui | | |
* `--------------------' `--------------------'
*/
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y,
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_H,
CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO, KC_LALT,
KC_PSCREEN, KC_APP,
TO(PROG, ON_PRESS),
KC_SPC, MO(NAVI), KC_LGUI,
// right hand
KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC,
KC_G, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENTER,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER,
KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
KC_RALT,KC_NO, KC_LBRC,KC_RBRC, CTL_T(KC_QUOT),
KC_PAUS, MT(0x5, KC_NO),
TO(PROG, ON_PRESS),
KC_RGUI, MO(PROG), KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | K/ | K* | K- | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | ( | ) | | | | | | | K7 | K8 | K9 | K+ | # |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | { | } | ` |------| |------| | K4 | K5 | K6 | K+ | ' |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | | K1 | K2 | K3 | K= | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | K0 | K0 | K. | K= | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | L2 | | L2 | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[PROG] = KEYMAP(
// left hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
TO(NAVI, ON_PRESS),
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL,
KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NUHS,
KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_QUOT,
KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS,
KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_TRNS,
KC_TRNS, KC_TRNS,
TO(NAVI, ON_PRESS),
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Navigation and system keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | Home | Up | End | Ins | PgUp | | | | | | Ins | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | Left | Down | Rght | Del | PgDn |------| |------| | Back | Del | Fwrd | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | Lclk | MsUp | Rclk | | | | | | | Prev | Play | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | MsLt | MsDn | MsRt | | |VolDn | Mute |VolUp | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Powr | Log | | | |
* ,------|------|------| |------+------+------.
* | | | L0 | | L0 | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[NAVI] = KEYMAP(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
KC_TRNS, KC_HOME, KC_UP, KC_END, KC_INS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN,
KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_PWR, LCTL(LALT(KC_DELT)),
TO(BASE, ON_PRESS),
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_WBAK, KC_DELT, KC_WFWD, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
TO(BASE, ON_PRESS),
KC_TRNS, KC_TRNS, KC_TRNS
),
};
const uint16_t PROGMEM fn_actions[] = {
//[1] = ACTION_LAYER_TAP_TOGGLE(PROG), // FN1 - Momentary Layer 1 (Symbols)
//[2] = ACTION_LAYER_TAP_TOGGLE(NAVI) // FN2 - Momentary Layer 2 (Navigation)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
return NULL;
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
/* leds is a static array holding the current brightness of each of the
* three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and
* -1s in the code below, and because wasting a byte really doesn't matter
* that much (no, it *doesn't*, stop whinging!). Note that because it's
* static it'll maintain state across invocations of this routine.
*/
static uint8_t leds[4];
uint8_t led;
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
/* Loop over each LED/layer */
for (led = 1; led <= 3; ++led) {
/* If the current layer matches the current LED, increment its
* brightness by 1 up to a maximum of 255. If the current layer doesn't
* match, decrement its brightness by 1 down to a minimum of zero.
*/
leds[led] += (layer == led) ?
(leds[led] < 255 ? 1 : 0):
(leds[led] > 0 ? -1 : 0);
/* Set LED state according to the new brightness */
if (leds[led]) {
ergodox_right_led_on(led);
ergodox_right_led_set(led, leds[led]);
}
else {
ergodox_right_led_off(led);
}
}
return NULL;
};

@ -0,0 +1,1483 @@
:100000000C94FE060C9442070C9442070C94420791
:100010000C9442070C9442070C9442070C9442073C
:100020000C9442070C9442070C94B2120C94841363
:100030000C9442070C9442070C9442070C9442071C
:100040000C9442070C945C2C0C9442070C944207CD
:100050000C9442070C9463220C9442070C944207C0
:100060000C9442070C9442070C9442070C944207EC
:100070000C9442070C9442070C9442070C944207DC
:100080000C9442070C9442070C9442070C944207CC
:100090000C9442070C9442070C9442070C944207BC
:1000A0000C9442070C9442070C944207E9130B147A
:1000B000F6140B14F6144D147014F614C514D81459
:1000C00026182618541854189718D318D41AD41A66
:1000D000EB18D41AE219E219AE1AD41AD41AC21AB9
:1000E00029002B00E000E100357100001E00140023
:1000F00004001D006400E3001F001A0016001B002E
:1001000000000252200008000700060000002C003A
:100110002100150009001900E2001151220017000A
:100120000A0005000000460023001C0000000B0030
:100130000000650023000A000000050000004800E0
:1001400024001C000B0011000000007525001800A1
:100150000D001000E600115126000C000E003600C4
:1001600000002C00270012000F0037002F00015262
:100170002D001300330038003000E7002A0028006B
:100180002800E500347100000100010001000100B9
:100190000100000001001E022002220201000100F5
:1001A00001001F02210223020100010001002F02B1
:1001B00026022F000100010001003002270230005A
:1001C000010012510100310235003502000001002A
:1001D0000100010000000100000001000100010019
:1001E0000000010000000100010001000100010009
:1001F0000000010000005F005C0059006200125125
:10020000540060005D005A0062000100550061006A
:100210005E005B0063000100560057005700580065
:10022000580001002E0032003400010001000000DF
:100230000100010001000100010000003A004A0035
:100240005000F400F20001003B0052005100F000A9
:10025000F10001003C004D004F00F500F3000100EB
:100260003D0049004C000100010010513E004B00D0
:100270004E0001000000A5003F0001000000010049
:1002800000004C05400001000000010000000100DA
:1002900041000100010001000000010042000100D6
:1002A000B600AC00AA001051430049004C00AE005B
:1002B000A800010044000100B700AB00A900010044
:1002C00045000100010001000100010001000100E2
:1002D00001000100010000000A00253031366200F3
:1002E0003A200025303258000A722F632030313214
:1002F000333435363738394142434445460A000ADB
:10030000002530325800626F756E6365213A200017
:100310006C656674207369646520617474616368D8
:1003200065640A006C6566742073696465206E6F8D
:100330007420726573706F6E64696E670A00747200
:1003400079696E6720746F207265736574206D63C0
:100350007032333031380A000A44454255473A205A
:10036000656E61626C65642E0A005B735D004B65AF
:1003700079626F6172642073746172742E0A005B1B
:10038000575D005B535D005B525D005B445D005B4D
:10039000435D0016034500720067006F0044006F64
:1003A000007800200045005A000000160345007246
:1003B0000067006F0044006F007800200045005A7D
:1003C0000000000403090409028D00050100A0FAE1
:1003D00009040000010301010009211101000122AB
:1003E0003F000705810308000A0904010001030119
:1003F0000200092111010001224D000705820308B6
:10040000000A090402000103000000092111010093
:10041000012236000705830308000A0904030002CD
:1004200003000000092111010001222000070584BA
:100430000320000107050403200001090404000152
:100440000300000009211101000122390007058580
:10045000031000011201100100000008EDFE071357
:1004600001000102000105010906A101050719E0CB
:1004700029E7150025019508750181020508190174
:1004800029059505750191029501750391010507EF
:100490001900297715002501957875018102C0069C
:1004A00031FF0974A1010975150025FF9520750814
:1004B00081020976150025FF952075089102C00577
:1004C000010980A101850216010026B7001A01006A
:1004D0002AB700751095018100C0050C0901A10122
:1004E0008503160100269C021A01002A9C02751041
:1004F00095018100C005010902A1010901A10005C2
:100500000919012905150025019505750181029537
:1005100001750381010501093009311581257F9598
:10052000027508810609381581257F9501750881B6
:1005300006050C0A38021581257F9501750881068C
:10054000C0C005010906A101050719E029E715004A
:10055000250195087501810295017508810105083D
:100560001901290595057501910295017503910100
:100570000507190029FF150025FF9506750881005C
:10058000C00A002530325820006B6579626F6172B5
:10059000645F7265706F72743A20000A0025303211
:1005A00058006B6579626F6172645F7365745F6C2C
:1005B00065643A200064656C5F6B65795F6269749D
:1005C0003A2063616E27742064656C3A20253032CE
:1005D000580A006164645F6B65795F6269743A20F0
:1005E00063616E2774206164643A20253032580AB2
:1005F00000646F6E652E0A00626F6F676D616769D8
:1006000063207363616E3A202E2E2E2000290A008B
:100610002575002F002575005D2800256400200049
:10062000256400200025640020002564007C00254E
:10063000303258006D6F7573656B6579205B62743D
:100640006E7C782079207620685D287265702F6135
:10065000636C293A205B006D6B5F776865656C5F42
:1006600074696D655F746F5F6D6178203D202564EE
:100670000A006D6B5F776865656C5F6D61785F73AD
:1006800070656564203D2025640A006D6B5F7469A8
:100690006D655F746F5F6D6178203D2025640A0091
:1006A0006D6B5F6D61785F7370656564203D2025BB
:1006B000640A006D6B5F696E74657276616C203DD3
:1006C0002025640A006D6B5F64656C6179203D20B4
:1006D00025640A006D6B5F776865656C5F74696D92
:1006E000655F746F5F6D6178203D2025640A006D41
:1006F0006B5F776865656C5F6D61785F737065656A
:1007000064203D2025640A006D6B5F74696D655F30
:10071000746F5F6D6178203D2025640A006D6B5F0A
:100720006D61785F7370656564203D2025640A0003
:100730006D6B5F696E74657276616C203D20256417
:100740000A006D6B5F64656C6179203D2025640A49
:10075000000A00257500363A20776865656C5F747D
:10076000696D655F746F5F6D61783A20000A0025DE
:100770007500353A20776865656C5F6D61785F73E9
:10078000706565643A20000A00257500343A2074CB
:10079000696D655F746F5F6D61783A20000A0025AE
:1007A0007500333A206D61785F73706565643A2037
:1007B000000A00257500323A20696E746572766110
:1007C0006C286D73293A20000A00257500313A2003
:1007D00064656C6179282A31306D73293A20000AEA
:1007E000092D2056616C756573202D0A004D3E0061
:1007F0004D25643E20003F0073657420646566618A
:10080000756C740A00433E20007768657265206449
:10081000656C74613A20637572736F723D25642C48
:1008200020776865656C3D25640A536565206874AA
:1008300074703A2F2F656E2E77696B6970656469E5
:10084000612E6F72672F77696B692F4D6F757365B6
:100850005F6B6579730A000A092D204D6F7573650A
:100860006B6579202D0A4553432F713A09717569DB
:10087000740A313A0964656C6179282A31306D73E4
:10088000290A323A09696E74657276616C286D7353
:10089000290A333A096D61785F73706565640A34BB
:1008A0003A0974696D655F746F5F6D61780A353AF6
:1008B00009776865656C5F6D61785F737065656405
:1008C0000A363A09776865656C5F74696D655F74AF
:1008D0006F5F6D61780A0A703A097072696E7420F0
:1008E00076616C7565730A643A0973657420646592
:1008F0006661756C74730A75703A092B310A646FFE
:10090000776E3A092D310A706775703A092B3130CC
:100910000A7067646F776E3A092D31300A0A737076
:10092000656564203D2064656C7461202A206D61DA
:10093000785F7370656564202A2028726570656130
:1009400074202F2074696D655F746F5F6D61782905
:100950000A003F004D3E2000433E20004C25640A23
:10096000000A092D20436F6E736F6C65202D0A45B8
:1009700053432F713A09717569740A6D3A096D6FA5
:100980007573656B65790A000A092D204D616769E9
:1009900063202D0A643A0964656275670A783A092A
:1009A0006465627567206D61747269780A6B3A09D3
:1009B0006465627567206B6579626F6172640A6D48
:1009C0003A096465627567206D6F7573650A763ADA
:1009D0000976657273696F6E0A733A09737461748C
:1009E00075730A633A09636F6E736F6C65206D6F80
:1009F00064650A302D343A096C61796572302D34A2
:100A0000284631302D4634290A506175733A0962FF
:100A10006F6F746C6F616465720A653A0965657021
:100A2000726F6D0A6E3A094E4B524F0A7A3A097349
:100A30006C656570204C454420746573740A000A27
:100A4000002575002E6E6B726F3A20000A00257526
:100A5000002E737761705F6261636B736C617368A2
:100A60005F6261636B73706163653A20000A002501
:100A700075002E737761705F67726176655F65736D
:100A8000633A20000A002575002E6E6F5F67756956
:100A90003A20000A002575002E737761705F72613D
:100AA0006C745F726775693A20000A002575002E24
:100AB000737761705F6C616C745F6C6775693A2005
:100AC000000A002575002E636170736C6F636B5FA5
:100AD000746F5F636F6E74726F6C3A20000A00254A
:100AE00075002E737761705F636F6E74726F6C5FE9
:100AF000636170736C6F636B3A20000A00253032BB
:100B000058006B65796D61705F636F6E6669672E03
:100B10007261773A20000A002575002E6D6F75739B
:100B2000653A20000A002575002E6B6579626F61B9
:100B300072643A20000A002575002E6D6174726996
:100B4000783A20000A002575002E656E61626C659A
:100B50003A20000A00253032580064656275675FEC
:100B6000636F6E6669672E7261773A20000A00250E
:100B7000750064656661756C745F6C617965723A65
:100B800020003F004E4B524F3A206F66660A004EDF
:100B90004B524F3A206F6E0A0074696D65725F6345
:100BA0006F756E743A202530346C580A006B657985
:100BB000626F6172645F6E6B726F3A2025580A0033
:100BC0006B6579626F6172645F69646C653A202558
:100BD000580A006B6579626F6172645F70726F743E
:100BE0006F636F6C3A2025580A00686F73745F6BEF
:100BF0006579626F6172645F6C65647328293A205D
:100C000025580A000A092D20537461747573202D2C
:100C10000A004743433A20342E382E3220415652A0
:100C20002D4C4942433A20312E382E302041565225
:100C30005F415243483A20617672350A004F505462
:100C4000494F4E533A204C55464120424F4F544D48
:100C500041474943204D4F5553454B455920455831
:100C60005452414B455920434F4E534F4C4520431E
:100C70004F4D4D414E44204E4B524F203531320A9C
:100C8000004255494C443A203135316565303420B5
:100C90002832303A35393A343720446563203230CF
:100CA0002032303135290A005649443A20307846FE
:100CB000454544284572676F446F7820455A29207E
:100CC0005049443A20307831333037284572676FC5
:100CD000446F7820455A29205645523A20307830C2
:100CE0003030310A00444553433A20742E6D2E6B48
:100CF0002E206B6579626F617264206669726D7710
:100D000061726520666F72204572676F646F780A42
:100D1000000A092D2056657273696F6E202D0A0036
:100D20000A6D6F7573653A206F66660A000A6D6F0B
:100D30007573653A206F6E0A000A6B6579626F61A0
:100D400072643A206F66660A000A6B6579626F61A9
:100D500072643A206F6E0A000A6D61747269783AA3
:100D6000206F66660A000A6D61747269783A206FB6
:100D70006E0A000A64656275673A206F6E0A000A9F
:100D800064656275673A206F66660A000A0A626FD8
:100D90006F746C6F616465722E2E2E2000433E20AE
:100DA000006565636F6E6669673A0A00536C656536
:100DB00070204C454420746573740A0000000000E4
:100DC00000000000000000010204060A0F17202C9A
:100DD0003A4A5D71879DB3C7DAE9F5FCFFFCF5E996
:100DE000DAC7B39D87715D4A3A2C20170F0A0604B3
:100DF00002010000000000000000000011241FBEDE
:100E0000CFEFDAE0DEBFCDBF04B603FE24C0809191
:100E1000FD019091FE01A091FF01B0910002873089
:100E2000904BA740B04BB9F41092FD011092FE0117
:100E30001092FF011092000214BE84B7877F84BF16
:100E400088E10FB6F89480936000109260000FBEA6
:100E5000E0E0FFE3099511E0A0E0B1E0E4E5FCE5A6
:100E600002C005900D92AA33B107D9F711E0AAE3A9
:100E7000B1E001C01D92AD3FB107E1F70E94EC0F58
:100E80000C94282E0C940000FF93EF93E0913A010C
:100E9000F0913B01309709F00995EF91FF9108958A
:100EA000FC018591803011F0EFDFFBCF0895FF2723
:100EB000E0E230E247FF0CC0419597FF09C0EDE248
:100EC0006095709580959095611D711D811D911D96
:100ED00027FF02C0219530E350E2AA27660F771F53
:100EE000881F991FAA1FA41710F0A41B63955A9579
:100EF000A9F7AA3008F0A95FA05DAF93F39561153B
:100F000071058105910541F7ED3211F4EF93F395E9
:100F1000F21718F43F93F395FBCF8F91B5DFFA9555
:100F2000E1F70895E991F9918591803021F08532BA
:100F300019F0AADFF9CF089520E0E89455915532D1
:100F4000C1F3503311F4689455915A3348F4505317
:100F500090F3220F022E220F220F200D250FF4CF27
:100F60000EF4219589919991533619F3533729F14C
:100F7000533559F1BC0188279927E8945C3621F450
:100F80008991999168945591543639F446EF7EF0E1
:100F900077FF0DC08FEF9FEF0AC055374AE039F059
:100FA000583540E121F0523642E009F00895FF93B0
:100FB000EF937DDFEF91FF91B7CFFF93EF93FC01AC
:100FC00081918030B9F360DFFBCFFF93EF9368DF4F
:100FD000F1CFDF93CF93CDB7DEB72596A3DFCF91C7
:100FE000DF91089561110BC0FC018281882321F0FB
:100FF00085EE0E94BA1603C085EE0E94821780E03B
:1010000090E0089580E090E00895EF92FF921F93A2
:10101000CF93DF936091C0017091C1018091C201B3
:101020009091C3010E94672156985E9821E030E0BC
:10103000682F70E0EB01C45CDE4FE1E0F0E0122FBE
:10104000821307C0AB019881A1E09F3F61F4A0E04B
:101050000AC0A901D901A45CBE4F9C91A1E09111E5
:1010600001C0A0E0A1959A0FDA01A45CBE4F9C9349
:101070004C5F5F4F992309F194B17F0102C0EE0CE0
:10108000FF1C4A95E2F79E2994B995B19E2995B91E
:101090004C9150E0113029F450938900409388001E
:1010A0001AC0123029F450938B0040938A0013C069
:1010B00050938D0040938C000EC094B1DF0102C0AC
:1010C000AA0FBB1F4A95E2F7AD014095942394B94E
:1010D00095B1942395B92F5F3F4F2430310509F026
:1010E000AECF80E090E0DF91CF911F91FF90EF9025
:1010F000089585E098E0892B11F00E94050880E0B2
:1011000090E0089556985E9825982D9826982E98E8
:1011100027982F988FEF90E0909389008093880014
:1011200090938B0080938A0090938D0080938C0025
:10113000259A2D9A2FEF80E792E021508040904031
:10114000E1F700C00000269A2E9A2FEF80E792E088
:10115000215080409040E1F700C00000279A2F9A6C
:101160002FEF80E792E0215080409040E1F700C0EF
:10117000000025982D982FEF80E792E021508040C5
:101180009040E1F700C0000026982E982FEF80E7EE
:1011900092E0215080409040E1F700C00000279885
:1011A0002F9856985E9825982D9826982E982798CF
:1011B0002F98089589EA8093800089E080938100C8
:1011C00024982C983F988AB18F748AB96E98479A60
:1011D0008BB1806B8BB9769A0E94820882E098E08E
:1011E000892B11F00E94020880E090E0089580E2CF
:1011F000809300018091400181110EC00E94460938
:1012000081E0809340012FEF83ED90E321508040F7
:101210009040E1F700C0000080E40E944C098093F8
:10122000000181112EC00E94760980930001811176
:1012300028C00E94760980930001811122C08FE3AB
:101240000E9476098093000181111BC00E946E09E3
:1012500080E40E944C0980930001811112C08CE04F
:101260000E9476098093000181110BC00E947609CB
:1012700080930001811105C08FE30E94760980935D
:1012800000010E946E098091000108951092B9003A
:101290008AE08093B800089594EA9093BC009091FE
:1012A000BC0097FFFCCF9091B900987F983021F057
:1012B000903111F081E008958093BB0084E8809321
:1012C000BC008091BC0087FFFCCF8091B900887F73
:1012D000883111F0803471F780E0089584E98093BB
:1012E000BC008091BC0084FDFCCF08958093BB00BE
:1012F00084E88093BC008091BC0087FFFCCF909174
:10130000B900987F81E0983209F480E0089584E87C
:101310008093BC008091BC0087FFFCCF8091BB0014
:10132000089580910001811115C080E40E944C094C
:101330008093000181110CC082E10E9476098093A4
:101340000001811105C08FEF0E9476098093000192
:101350000E946E0984B1807F84B985B1807F85B990
:101360008AB1837F8AB98BB1837F8BB93E984698C7
:1013700008950E94F708809300010E94910980B3AC
:101380008C7080BB81B3836F81BBE0E5F1E0A2E4A8
:10139000B1E011921D9281E0EE35F807D1F78AEDA8
:1013A00098E0892B11F00C94DA0808959F92AF927F
:1013B000BF92CF92DF92EF92FF920F931F93CF9342
:1013C000DF93809100018823E1F0809141018F5FDC
:1013D00080934101811115C08EE393E00E94500774
:1013E0000E94F70880930001882329F084E293E0AB
:1013F0000E94500706C080E193E00E9450070E94BF
:10140000820802E411E0C0E0D0E0BB24B39482E0A3
:10141000A82ECC24C394D12C21E0E22E23E0F22E7E
:10142000C73000F580910001811162C080E40E9404
:101430004C0980930001811112C082E10E9476095B
:101440008093000181110BC0C6010C2E01C0880FD2
:101450000A94EAF780950E947609809300010E9421
:101460006E0946C0CA30A1F028F4C83059F0C9301E
:1014700061F005C0CC3089F070F0CD3089F0209A51
:10148000289810C0219A29980DC0229A2A980AC03B
:10149000239A2B9807C0529A01C0539A5B9802C0B6
:1014A0003E9A4698E0EAEA95F1F78FB1799985C0BE
:1014B00092E081708B25892B7C9B02C090E001C05B
:1014C00094E0892B7D9B02C090E001C098E0892BBD
:1014D0007E9B02C090E001C090E1892B9FB1909566
:1014E000991F9927991F9295990F907E892B10C06B
:1014F00080910001811176C080E40E944C098093A4
:101500000001882309F45BC0912C0E946E09892D8B
:10151000F8019081981739F1808380910101882327
:1015200001F18091DB0180FF04C086E093E00E941E
:1015300050078091DB0180FF0CC0809101011F9258
:101540008F93FF92EF920E94E9070F900F900F90F8
:101550000F908091DB0180FF04C08FEF92E00E942A
:101560005007A09201010E94910921960F5F1F4F21
:10157000CE30D10509F054CF809101018823B1F01C
:10158000815080930101882339F08FE99FE0019712
:10159000F1F700C000000AC0A0E5B1E0E2E4F1E02C
:1015A00081918D9391E0E035F907D1F789E798E0D3
:1015B000892BD1F00E94790817C090E07ACF83E19F
:1015C0000E9476098093000181119ECF81E40E94E0
:1015D0004C0980930001811197CF0E948709982EB2
:1015E000909493CF80E094CF81E0DF91CF911F91D1
:1015F0000F91FF90EF90DF90CF90BF90AF909F90B2
:101600000895E82FF0E0E05BFE4F80810895CF92CF
:10161000DF92EF92FF920F931F93CF93DF9388EEA9
:1016200092E00E94500730E5E32E31E0F32EC0E057
:10163000D0E043EEC42E42E0D42E0AED12E0DF9358
:10164000CF93DF92CF920E94E90780EE92E00E9452
:101650005007F70181917F0190E00E94CC219F9378
:101660008F931F930F930E94E90788ED92E00E94E9
:10167000500721968DB79EB708960FB6F8949EBF77
:101680000FBE8DBFCE30D105D1F6DF91CF911F9126
:101690000F91FF90EF90DF90CF9008958B3B9105D5
:1016A00078F4883A910540F5853A9105D0F4843074
:1016B000910508F0B1C08130910509F4ADC06BC04F
:1016C000803E910508F467C0883E910508F4A4C0E7
:1016D0009C01205F31092031310508F05CC0906524
:1016E0000895853A910509F459C0863A910509F49F
:1016F00058C083E890E40895883A910509F454C0ED
:10170000893A910509F453C08A3A910509F452C007
:101710008B3A910509F451C08C3A910509F450C0F7
:101720008D3A910509F44FC0803B910509F44EC0F4
:101730008E3A910509F44DC08F3A910509F44CC0D9
:10174000813B910509F44BC0823B910509F44AC0E5
:10175000833B910509F449C0843B910509F448C0D5
:10176000853B910509F447C0863B910509F446C0C5
:10177000873B910509F445C0883B910509F444C0B5
:10178000893B910509F443C08A3B910509F042C0A9
:101790008AE296E4089580E090E0089581E890E47C
:1017A000089582E890E4089582EE94E4089589EE25
:1017B00094E408958AEE94E4089585EB94E4089502
:1017C00086EB94E4089587EB94E408958CEC94E41C
:1017D00008958DEC94E4089583E895E408958AE8EB
:1017E00095E4089582E995E4089584E995E40895DF
:1017F00081E296E4089583E296E4089584E296E413
:10180000089585E296E4089586E296E4089587E2D5
:1018100096E4089580E094E40895089596E0799F11
:10182000F001112494E5899FE00DF11D1124E60FCC
:10183000F11DEE0FFF1FE052FF4F85919491089527
:10184000880F991F805A9040FC01859194910895CA
:10185000880F991F80529F4FFC01859194910895A4
:1018600026E0729FF001112444E5849FE00DF11DF4
:101870001124E60FF11DEE0FFF1FE052FF4F2591DF
:101880003491C9019A9581159F4110F4C9010895B9
:10189000C90190528115904128F4C9019F700E949E
:1018A000280C0895C90190538115904120F4C90175
:1018B0009927906C0895211580E5380769F40E94F6
:1018C000F51A9FEF24E34CE0915020404040E1F7AF
:1018D00000C000000C948822213080E5380751F4C4
:1018E00088E593E00E9450078091DB01816080933E
:1018F000DB010895C90190558115904108F050C051
:10190000832F99278F70992781309105D9F4A901E8
:101910004370552702C0880F991F4A95E2F79C68CB
:10192000A90164E0440F551F6A95E1F744275370FD
:10193000842B952B73E0220F331F7A95E1F72076E5
:1019400033271DC08230910529F4922F8827816F9B
:10195000906A089583309105A9F4A9014370552731
:1019600081E090E002C0880F991F4A95E2F79C68D9
:1019700043E0220F331F4A95E1F7207E3770822B18
:10198000932B08950497F1F4A9014370552781E042
:1019900090E002C0880F991F4A95E2F79A68E8CF55
:1019A000C90190578115904120F4C9019F70906240
:1019B0000895C90190588115904120F4C9019F7084
:1019C000906A0895203E3105E0F4203C310558F539
:1019D0002133310509F470C048F42932310509F486
:1019E00064C02A32310509F46EC074C02933310550
:1019F000F1F022383105D9F02533310509F44EC014
:101A000069C0233E310589F138F4203E3105C1F02B
:101A1000223E3105E1F05EC0263E310569F1273EE8
:101A20003105A9F157C0C9010E94200C0895809189
:101A3000EE0180FD02C081FF4DC080EE90E04BC002
:101A40008091EE0180FFF9CF89E390E044C080915E
:101A5000EE0182FF0EC08091EE0184FF03C080E0A2
:101A600090E039C083EE90E036C08091EE0182FFB5
:101A7000F2CF82EE90E02FC08091EE0183FF0BC089
:101A80008091EE0184FDEBCF87EE90E024C0809141
:101A9000EE0183FFF5CF86EE90E01DC08091EE0150
:101AA00085FF07C089E290E016C08091EE0185FFB6
:101AB000F9CF85E390E00FC08091EE0186FF07C06B
:101AC0008AE290E008C08091EE0186FFF9CF81E3C1
:101AD00090E001C0C9010E944E0B089508958091C5
:101AE000710108959FB7F894109260019FBF909183
:101AF000F401943009F058C09091E9009F70209152
:101B0000EC0020FF02C020E801C020E0292B94E077
:101B10009093E9009091EB0090FF43C09091EE000C
:101B200097FF3FC090915E01992321F09091E800CA
:101B300095FF37C010925E0196E03091E80035FDC8
:101B400015C03091F401343061F53091EB0035FD72
:101B500028C0915021F481E080935E0122C0EFE91A
:101B6000FFE03197F1F700C00000E7CF8093F1006C
:101B70008091E80085FD0AC08091E80080FFFCCFDD
:101B80008091E8008E778093E80006C08FB7F894C4
:101B900091E0909360018FBF2F702093E90080E067
:101BA00008952F702093E9008FEF0895CF93DF936E
:101BB00000D01F92CDB7DEB72091F401243019F583
:101BC00023E029839B838A832093E9008FEF909100
:101BD000E800815095FD06C095ED9A95F1F700005B
:101BE0008111F5CF8091E80085FF0DC040E050E005
:101BF00063E070E0CE0101960E94A5108091E8009C
:101C00008E778093E8000F900F900F90DF91CF9127
:101C10000895CF93DF9300D01F92CDB7DEB7209108
:101C2000F401243021F522E029839B838A8383E019
:101C30008093E9008FEF9091E800815095FD06C0F8
:101C400095ED9A95F1F700008111F5CF8091E800AC
:101C500085FF0DC040E050E063E070E0CE010196EA
:101C60000E94A5108091E8008E778093E8000F9085
:101C70000F900F90DF91CF9108952091F4012430BF
:101C8000F1F422E02093E9002FEF3091E800215099
:101C900035FD06C035ED3A95F1F700002111F5CF7D
:101CA0002091E80025FF0BC040E050E065E070E0C7
:101CB0000E94A5108091E8008E778093E800089537
:101CC000CF93DF93EC018091F401843009F047C099
:101CD00080910C018823E1F080910D018823C1F0EF
:101CE00085E08093E9008FEF9091E800815095FDA9
:101CF00006C095E19A95F1F700008111F5CF80912A
:101D0000E80085FF2CC040E050E060E170E017C0C3
:101D100081E08093E9008FEF9091E800815095FD7C
:101D200006C095ED9A95F1F700008111F5CF8091ED
:101D3000E80085FF14C040E050E068E070E0CE01AC
:101D40000E94A5108091E8008E778093E80080E1E2
:101D5000FE01A1E6B1E001900D928A95E1F7DF91D5
:101D6000CF9108958FE893E00E9450078091F3018E
:101D7000811109C00E9437120E9494128091E200E2
:101D800084608093E20008958BE893E00E945007FE
:101D90001092F301089587E893E00C94500783E8CC
:101DA00093E00E9450070C94492C8FE793E00E9427
:101DB00050070E9423220E944F2C0E9430150C9441
:101DC0006E0D80915F018F5F80935F0162E30E94DF
:101DD000BD2D911135C010925F0180916001882363
:101DE00079F18091F401843049F58091E9008F7098
:101DF0009091EC0090FF02C090E801C090E0982B19
:101E000084E08093E9008091EB0080FF14C0809112
:101E1000EE0087FF10C08091E80085FF03C010929C
:101E2000F100F9CF8091E80080FF05C08091E800C3
:101E30008E778093E8009F709093E9001092600184
:101E4000089542E061EC81E00E94B11142E061EC52
:101E500082E00E94B11142E061EC83E00E94B11186
:101E600042E261EC84E00E94B11142E161EC85E064
:101E70000C94B1118091F601833009F455C030F40F
:101E8000813071F0823009F48EC008958A3009F4EF
:101E90007AC08B3009F460C0893009F09CC020C042
:101EA0008091F501813A09F096C08091E800877F22
:101EB0008093E8008091F9019091FA01892B21F03B
:101EC00060E080E090E003C060E181E691E070E0D6
:101ED0000E94EE108091E8008B778093E8000895CF
:101EE0008091F501813209F076C08091F9019091DD
:101EF000FA01009719F0049709F06DC08091E8008D
:101F0000877F8093E8008091E80082FD05C0809182
:101F1000F4018111F8CF5FC08091F10080937101CD
:101F20008091E8008B7753C08091F501813A09F0E8
:101F300052C08091F9019091FA01892B09F04BC0B0
:101F40008091E800877F8093E8008091E80080FF1F
:101F5000FCCF80910C0136C08091F5018132D9F51A
:101F60008091F9019091FA01892BA9F58091E800FF
:101F7000877F8093E8000E94E6118091F7018093AB
:101F80000C010C94F51A8091F501813221F58091B4
:101F9000E800877F8093E8000E94E6118091F801B5
:101FA0008093720108958091F501813AA1F48091A6
:101FB000E800877F8093E8008091E80080FFFCCFF5
:101FC000809172018093F1008091E8008E77809378
:101FD000E8000C94E611089584B7877F84BF88E1F8
:101FE0000FB6F89480936000109260000FBE90E0EE
:101FF00080E80FB6F89480936100909361000FBE63
:102000000E94B9150E9437120E9494128091E2003A
:1020100084608093E20082E79DE00E9462217894D0
:102020000E940E150E94BB1582E091E00E942B15C4
:102030000E94372C8EE693E00E9450078091F401B5
:10204000853089F48AE693E00E9450070E94E621D9
:102050008091F201882391F30E940E22882371F36C
:102060000E948F10EBCF0E94E915E8CF292F33276C
:1020700023303105A9F06CF42130310509F442C058
:102080002230310509F043C08DE890E027EC33E0C1
:1020900042C021323105C9F02232310519F137C071
:1020A00099278130910541F08230910541F0892BCB
:1020B00071F5E3ECF3E005C0EBEAF3E002C0E3E91D
:1020C000F3E0849190E09F0126C0653000F5E62F93
:1020D000F0E0EE0FFF1FEB5DFE4F2081318189E0C4
:1020E00090E019C0653098F4E62FF0E0DF01AA0F08
:1020F000BB1FA55EBE4F2D913C91EA5EFE4F8081D5
:1021000090E009C082E190E024E534E004C080E082
:1021100090E020E030E0FA0131832083089580E1EF
:1021200089BD82E189BD09B400FEFDCF8091D80050
:102130008F7D8093D8008091E00082608093E000E2
:102140008091E00081FDFCCF0895CF92DF92EF9265
:10215000FF920F931F93CF93DF937C018B01EA01D2
:102160000E940712811131C0209731F08881998136
:10217000081B190BE80EF91EC12CD12C01151105F5
:1021800019F18091E80085FD14C08091E8008E77F8
:102190008093E800209741F0888199818C0D9D1DE6
:1021A0009983888385E011C00E940712882331F348
:1021B0000CC0F70181917F018093F100015011095A
:1021C000FFEFCF1ADF0ADACF80E0DF91CF911F91C6
:1021D0000F91FF90EF90DF90CF9008952091FB0139
:1021E0003091FC012617370748F06115710539F465
:1021F0002091E8002E772093E80001C0B901FC018E
:1022000020E061157105B9F18091F401882309F48A
:1022100040C0853009F43FC08091E80083FD3DC097
:102220008091E80082FF06C08091E80082FF26C00E
:1022300080E008958091E80080FFE3CF2091F300D3
:102240008091F20090E0922B6115710551F0883079
:10225000910538F421912093F100615071090196A4
:10226000F3CF21E0089709F020E08091E8008E7715
:102270008093E800C6CF2111C7CFD6CF8091F4015B
:10228000882339F0853039F08091E80083FFCCCF86
:1022900004C082E0089583E0089581E008952091CC
:1022A000FB013091FC012617370748F061157105D5
:1022B00039F42091E8002E772093E80001C0B9019D
:1022C000FC0120E061157105C1F18091F4018823C2
:1022D00009F441C0853009F440C08091E80083FDD5
:1022E0003EC08091E80082FF06C08091E80082FF36
:1022F00027C080E008958091E80080FFE3CF20911F
:10230000F3008091F20090E0922B6115710559F075
:102310008830910540F424912093F100319661506A
:1023200071090196F2CF21E0089709F020E0809131
:10233000E8008E778093E800C5CF2111C6CFD5CFB6
:102340008091F401882339F0853039F08091E800DC
:1023500083FFCBCF04C082E0089583E0089581E03D
:102360000895982F973058F59093E900981739F011
:102370007091EC002091ED005091F00003C0242FEB
:10238000762F50E021FF19C03091EB003E7F309353
:10239000EB003091ED003D7F3093ED003091EB008C
:1023A00031603093EB007093EC002093ED0050937C
:1023B000F0002091EE0027FF07C09F5FD3CF8F7002
:1023C0008093E90081E0089580E008958091F5010F
:1023D00087FD05C08091E80080FF0EC012C080918B
:1023E000E80082FD05C08091F4018111F8CF0895C5
:1023F0008091E8008B7708C08091F4018111EACFC9
:1024000008958091E8008E778093E8000895809188
:10241000E4009091E50045E62091EC0020FF21C00A
:102420002091E80020FD21C02091F401222389F0B1
:10243000253089F02091EB0025FD0FC02091E400AC
:102440003091E5002817390739F3415041F0C901AF
:10245000E3CF82E0089583E0089581E0089584E069
:1024600008952091E80022FFDFCF80E008950E94C8
:10247000A5120E94AD12E0EEF0E0808181608083C1
:10248000E8EDF0E080818F77808319BCA7EDB0E0A4
:102490008C918E7F8C9380818F7E80831092F3014C
:1024A00008950F931F93CF93DF930E94A5120E946C
:1024B000AD12C8EDD0E088818F77888388818068ED
:1024C000888388818F7D888319BC1092F4011092D3
:1024D000F0011092F2011092F10100EE10E0F8010B
:1024E00080818B7F808388818160888342E060E087
:1024F00080E00E94B111E1EEF0E080818E7F808368
:10250000E2EEF0E08081816080838081886080835A
:10251000F80180818E7F8083888180618883DF914C
:10252000CF911F910F910895E8EDF0E080818F7EAB
:102530008083E7EDF0E080818160808384E082BF6A
:1025400081E08093F3010C945112E8EDF0E080817A
:102550008E7F80831092E20008951092DA0010922C
:10256000E10008951F920F920FB60F9211242F933E
:102570003F934F935F936F937F938F939F93AF930B
:10258000BF93EF93FF938091E10082FF0BC0809196
:10259000E20082FF07C08091E1008B7F8093E10021
:1025A0000E94E10E8091DA0080FF1FC08091D80068
:1025B00080FF1BC08091DA008E7F8093DA008091CB
:1025C000D90080FF0DC080E189BD82E189BD09B4D9
:1025D00000FEFDCF81E08093F4010E94B20E05C0A1
:1025E00019BC1092F4010E94C40E8091E10080FF9A
:1025F00019C08091E20080FF15C08091E2008E7FBB
:102600008093E2008091E20080618093E2008091FB
:10261000D80080628093D80019BC85E08093F401D3
:102620000E94CF0E8091E10084FF30C08091E200D3
:1026300084FF2CC080E189BD82E189BD09B400FE20
:10264000FDCF8091D8008F7D8093D8008091E100EC
:102650008F7E8093E1008091E2008F7E8093E20084
:102660008091E20081608093E2008091F0018823F4
:1026700011F084E007C08091E30087FF02C083E08F
:1026800001C081E08093F4010E94D50E8091E100A9
:1026900083FF29C08091E20083FF25C08091E10083
:1026A000877F8093E10082E08093F4011092F00133
:1026B0008091E1008E7F8093E1008091E2008E7F27
:1026C0008093E2008091E20080618093E20042E02A
:1026D00060E080E00E94B1118091F00088608093FA
:1026E000F0000E94CB0EFF91EF91BF91AF919F91AF
:1026F0008F917F916F915F914F913F912F910F90AB
:102700000FBE0F901F9018951F920F920FB60F9249
:1027100011242F933F934F935F936F937F938F93E6
:102720009F93AF93BF93CF93EF93FF93C091E90033
:10273000CF708091EC001092E9008091F000877FCB
:102740008093F00078940E94C0131092E900809169
:10275000F00088608093F000C093E900FF91EF9152
:10276000CF91BF91AF919F918F917F916F915F9129
:102770004F913F912F910F900FBE0F901F90189582
:102780001F93CF93DF93CDB7DEB7AA970FB6F89418
:10279000DEBF0FBECDBFE5EFF1E08091F100819388
:1027A00021E0ED3FF207C9F70E943A0F8091E8005F
:1027B00083FF1CC12091F5013091F601832F90E039
:1027C0008A30910508F012C1FC01EA5AFF4F0C94BF
:1027D000DD2D203881F0223809F008C18091F901FF
:1027E0008F708093E9008091EB0085FB882780F94A
:1027F0001092E90006C08091F1019091F2019111CF
:1028000082609091E800977F9093E8008093F100B8
:102810001092F100C5C0822F8D7F09F0E7C02223FE
:1028200019F0223061F0E2C08091F701813009F0A7
:10283000DDC0333009F080E08093F20128C0809140
:10284000F701811124C02091F9012F7009F4CEC045
:102850002093E9008091EB0080FF19C08091EB008C
:10286000333011F4806211C080618093EB0081E00D
:1028700090E0022E01C0880F0A94EAF78093EA00E4
:102880001092EA008091EB0088608093EB00109238
:10289000E9008091E800877F86C02111A7C01091D0
:1028A000F7011F778091E3008078812B8093E3000C
:1028B0008091E800877F8093E8000E94E611809174
:1028C000E80080FFFCCF8091E30080688093E30004
:1028D000112311F083E001C082E08093F40186C0EF
:1028E0002058223008F082C08091F7019091F801C1
:1028F0008C3D23E0920779F583E08A838AE289831D
:102900004FB7F894DE01139620E03EE051E2E32F4A
:10291000F0E050935700E49120FF03C0E295EF7080
:102920003F5FEF708E2F90E0EA3010F0C79601C045
:10293000C0968D939D932F5F243149F74FBF8091AF
:10294000E800877F8093E8006AE270E0CE0101969C
:102950000E94EE1014C0AE014F5F5F4F6091F9010D
:102960000E943610009709F441C02091E800277FAB
:102970002093E800BC0189819A810E944F118091C7
:10298000E8008B778093E80031C0203879F580919A
:10299000E800877F8093E8008091F0018093F10048
:1029A0008091E8008E778093E8000E94E6111EC0B7
:1029B00021111CC09091F7019230C0F48091E80081
:1029C000877F8093E8009093F0010E94E611809148
:1029D000F001811104C08091E30087FF02C084E010
:1029E00001C081E08093F4010E94210F8091E800F2
:1029F00083FF0AC08091E800877F8093E800809180
:102A0000EB0080628093EB00AA960FB6F894DEBFCD
:102A10000FBECDBFDF91CF911F910895CF938091CD
:102A2000F4018823B1F08091E9008F709091EC005F
:102A300090FF02C090E801C090E0C92FC82B10920F
:102A4000E9008091E80083FD0E94C013CF70C0931D
:102A5000E900CF91089590937801809377010895CC
:102A6000E0917701F0917801309721F00190F081A9
:102A7000E02D099480E00895FF920F931F93CF9368
:102A8000DF938C01E0917701F0917801309799F113
:102A90000280F381E02D09958091DB0182FF2BC03C
:102AA00080FF04C089E895E00E945007E80180E1BA
:102AB000F82E03E815E08091DB0180FF0BC08881D0
:102AC0001F928F931F930F930E94E9070F900F900F
:102AD0000F900F90FA942196F110EDCF8091DB01C9
:102AE00080FF09C081E895E0DF91CF911F910F91A0
:102AF000FF900C945007DF91CF911F910F91FF90A1
:102B00000895E0917701F0917801309721F00480E9
:102B1000F581E02D09940895209175013091760199
:102B20008217930771F09093760180937501E0917D
:102B30007701F0917801309721F00680F781E02D40
:102B400009940895209173013091740182179307BD
:102B500071F09093740180937301E0917701F0918B
:102B60007801309721F00084F185E02D09940895D3
:102B700008950C94B8150E9425220E94B9090C945E
:102B8000EB22CF93C82F8091DB0182FF1EC080FF14
:102B900004C082EA95E00E9450078091DB0180FF2B
:102BA0000CC01F92CF932DE935E03F932F930E94E5
:102BB000E9070F900F900F900F908091DB0180FF3D
:102BC00004C08BE995E00E9450078C2FCF910C94A4
:102BD0006E0DCF92DF92EF92FF920F931F93CF93E0
:102BE000DF93CDB7DEB72B970FB6F894DEBF0FBEDD
:102BF000CDBF0E94D6093AE7E32E31E0F32E00E084
:102C000010E0C02E802F0E94010BF701D1907F01B0
:102C1000D826B1F40F5F1F4F0E30110591F78FEFDB
:102C200089838A831B820E942E228160782F9D8354
:102C30008C8349815A816B818D810E948C1641C0A1
:102C40009091DB0191FF04C08B870E94070B8B855D
:102C500020E030E04D2D50E0922FBA01022E02C04C
:102C6000759567950A94E2F760FF25C02E83CF82A1
:102C7000EE24E394F12C02C0EE0CFF1C9A95E2F7CF
:102C800090E08E219F2121E0892B09F420E0288704
:102C90000E942E228160782F9A8789874E815F81DA
:102CA00068858A850E948C16F801E658FE4F80815F
:102CB0008E25808306C02F5F3F4F2630310561F699
:102CC000A9CF0E945926109179010E94301518173A
:102CD000A1F00E943015809379012B960FB6F894DD
:102CE000DEBF0FBECDBFDF91CF911F910F91FF903F
:102CF000EF90DF90CF900C94C1152B960FB6F894FF
:102D0000DEBF0FBECDBFDF91CF911F910F91FF901E
:102D1000EF90DF90CF900895CF93DF93CDB7DEB7DC
:102D20002B970FB6F894DEBF0FBECDBF4F835887E9
:102D300069877A878B87DE01119686E0FD01119203
:102D40008A95E9F785E0FE01379601900D928A9504
:102D5000E1F749815A816B817C818D819E810E943E
:102D6000C11D2B960FB6F894DEBF0FBECDBFDF910D
:102D7000CF910895CF93C82F882309F4C1C082381A
:102D800059F40E94301581FDBBC089E30E94602088
:102D90000E943C2189E30CC0833879F40E943015ED
:102DA00080FDAEC083E50E9460200E943C2183E547
:102DB0000E94B120CF910C943C21843859F40E9498
:102DC000301582FD9DC087E40E9460200E943C2156
:102DD00087E4EECF8CEF8C0F813A48F48C2F0E9461
:102DE000E22A81118DC08C2F0E946020E3CF80E207
:102DF0008C0F883048F4C77081E001C0880FCA95F5
:102E0000EAF70E940321D6CF8BE58C0F833078F44C
:102E1000C53A29F0C63A31F482E890E005C081E86D
:102E200090E002C083E890E0CF910C948C1588E587
:102E30008C0F833108F064C0C83A39F1C93A41F1C6
:102E4000CA3A49F1CB3A51F1CC3A59F1CD3A61F154
:102E5000C03B69F1CE3A71F1CF3A79F1C13B81F1D2
:102E6000C23B89F1C33B91F1C43B99F1C53BA1F150
:102E7000C63BA9F1C73BB1F1C83BB9F1C93BC1F1B0
:102E8000CA3BC9F58AE292E038C082EE90E035C0D4
:102E900089EE90E032C08AEE90E02FC085EB90E0A2
:102EA0002CC086EB90E029C087EB90E026C08CEC2C
:102EB00090E023C08DEC90E020C083E891E01DC03D
:102EC0008AE891E01AC082E991E017C084E991E0B4
:102ED00014C081E292E011C083E292E00EC084E26D
:102EE00092E00BC085E292E008C086E292E005C065
:102EF00087E292E002C080E090E0CF910C94A215AE
:102F0000CF910895882309F44BC0823859F40E9468
:102F1000301581FF45C089E30E9460200E943C215A
:102F200089E30CC0833871F40E94301580FF38C0EB
:102F300083E50E9460200E943C2183E50E94B1202D
:102F40000C943C21843859F40E94301582FF28C02B
:102F500087E40E9460200E943C2187E4EFCF9CEF31
:102F6000980F913A58F390E2980F983050F4877088
:102F700091E001C0990F8A95EAF7892F0E940921F3
:102F8000DFCF9BE5980F933020F480E090E00C9425
:102F90008C15885A833120F480E090E00C94A215BF
:102FA0000895882321F00E9403210C943C21089568
:102FB000882321F00E9409210C943C210895CF928E
:102FC000DF92EF92FF920F931F93CF93DF93CDB7D2
:102FD000DEB728970FB6F894DEBF0FBECDBF8C01C9
:102FE00085E0F801DE01119601900D928A95E1F7D6
:102FF000F80140813181F280258122952F708381F3
:103000009481892B31F03F3F31F481E04F3F19F437
:1030100003C081E001C080E080FDC6C249833A83DD
:1030200089819A812F830E941E209E8388870E9417
:103030001D200E94F01E4E81E42FE295EF70F0E01B
:10304000E05AFF4F2F8168850C94DD2D842F807FFF
:10305000142F1F70882311F01295107FFF2059F054
:10306000112309F456C2812F68870E9413210E9400
:103070003C2168854EC2862F0E948217112309F4D5
:1030800093C2812F0E94192128960FB6F894DEBFB3
:103090000FBECDBFDF91CF911F910F91FF90EF90A9
:1030A000DF90CF900C943C21342F307F842F8F7091
:1030B000303211F08295807F662319F0613019F16A
:1030C0002CC0FF20B1F0222309F494C1213009F073
:1030D00091C128960FB6F894DEBF0FBECDBFDF9129
:1030E000CF911F910F91FF90EF90DF90CF900C94B4
:1030F0002321222319F0213009F456C28E830E9425
:1031000026218E818AC1FF2021F0263008F04CC292
:1031100071C1253008F048C280C1FF2021F0222370
:1031200009F468C1F6C1222309F477C106C2242F2D
:1031300026952695237030E02115310521F02130A8
:103140003105C9F031C2FF2021F0862F942F9370F2
:1031500002C080E090E028960FB6F894DEBF0FBE64
:10316000CDBFDF91CF911F910F91FF90EF90DF9036
:10317000CF900C948C15FF2021F0862F942F937004
:1031800002C080E090E028960FB6F894DEBF0FBE34
:10319000CDBFDF91CF911F910F91FF90EF90DF9006
:1031A000CF900C94A215862FFF2019F00E94DF24E7
:1031B00002C00E94472528960FB6F894DEBF0FBEC6
:1031C000CDBFDF91CF911F910F91FF90EF90DF90D6
:1031D000CF900C94CC25842F837009F076C0F11029
:1031E000E3C1262F229526952770220F220F862FC6
:1031F0008F70C82ED12CE12CF12C022E04C0CC0CE7
:10320000DD1CEE1CFF1C0A94D2F764FF10C06FE0B7
:1032100070E080E090E004C0660F771F881F991F60
:103220002A95D2F7609570958095909503C060E0DF
:1032300070E0CB01242F269526952370422F50E075
:1032400042305105D1F04330510559F16C297D29A7
:103250008E299F294130510541F128960FB6F894E7
:10326000DEBF0FBECDBFDF91CF911F910F91FF90B9
:10327000EF90DF90CF900C94151F6C297D298E293B
:103280009F2928960FB6F894DEBF0FBECDBFDF9101
:10329000CF911F910F91FF90EF90DF90CF900C9402
:1032A0002F1F0E94151FC701B60128960FB6F8946C
:1032B000DEBF0FBECDBFDF91CF911F910F91FF9069
:1032C000EF90DF90CF900C94FB1EFF2019F0842F1D
:1032D000817001C08695882309F466C1262F229546
:1032E00026952770220F220F862F8F70C82ED12C83
:1032F000E12CF12C022E04C0CC0CDD1CEE1CFF1CBA
:103300000A94D2F764FF10C06FE070E080E090E0B4
:1033100004C0660F771F881F991F2A95D2F7609502
:1033200070958095909503C060E070E0CB01242FEC
:10333000269526952370422F50E042305105D1F05A
:103340004330510559F16C297D298E299F2941303F
:10335000510541F128960FB6F894DEBF0FBECDBFE0
:10336000DF91CF911F910F91FF90EF90DF90CF9061
:103370000C94E91F6C297D298E299F2928960FB668
:10338000F894DEBF0FBECDBFDF91CF911F910F919B
:10339000FF90EF90DF90CF900C9403200E94E91FE4
:1033A000C701B60128960FB6F894DEBF0FBECDBF99
:1033B000DF91CF911F910F91FF90EF90DF90CF9011
:1033C0000C94CF1F603FC9F118F4603E50F49CC0CC
:1033D000623F09F461C008F44BC0633F09F470C058
:1033E00093C0162F1F70842F8F71FF2099F00E94B9
:1033F000681F812F28960FB6F894DEBF0FBECDBF91
:10340000DF91CF911F910F91FF90EF90DF90CF90C0
:103410000C94D1170E94891F812F28960FB6F8941B
:10342000DEBF0FBECDBFDF91CF911F910F91FF90F7
:10343000EF90DF90CF900C94D817FF20A9F02530A3
:1034400008F0B2C0842F8F7128960FB6F894DEBFB3
:103450000FBECDBFDF91CF911F910F91FF90EF90E5
:10346000DF90CF900C94AE1F263008F09DC0EACFBD
:10347000FF20A1F0842F8F7128960FB6F894DEBF3D
:103480000FBECDBFDF91CF911F910F91FF90EF90B5
:10349000DF90CF900C94681FFF2061F3842F8F7111
:1034A00028960FB6F894DEBF0FBECDBFDF91CF9147
:1034B0001F910F91FF90EF90DF90CF900C94891F98
:1034C000FF2091F0842F8F7128960FB6F894DEBFFD
:1034D0000FBECDBFDF91CF911F910F91FF90EF9065
:1034E000DF90CF900C94531F28960FB6F894DEBF50
:1034F0000FBECDBFDF91CF911F910F91FF90EF9045
:10350000DF90CF900C94491FFF20A1F0222309F4F3
:10351000B1CF862F28960FB6F894DEBF0FBECDBF71
:10352000DF91CF911F910F91FF90EF90DF90CF909F
:103530000C94BA16222309F4B1CF862F28960FB621
:10354000F894DEBF0FBECDBFDF91CF911F910F91D9
:10355000FF90EF90DF90CF900C9482174F70C801CE
:103560000E94F20728960FB6F894DEBF0FBECDBFBB
:10357000DF91CF911F910F91FF90EF90DF90CF904F
:103580000C946E1E4F70C80128960FB6F894DEBFDB
:103590000FBECDBFDF91CF911F910F91FF90EF90A4
:1035A000DF90CF900C940D0C28960FB6F894DEBFE8
:1035B0000FBECDBFDF91CF911F910F91FF90EF9084
:1035C000DF90CF9008950E9420210E94F5200E9454
:1035D0003C210E94FA260E94CC2580E090E00E94C7
:1035E0008C1580E090E00C94A2150E9410210C94A0
:1035F000E31A0E941E20292F22952F7030E02C30D4
:1036000031054CF42A3031056CF422503109223056
:10361000310590F407C02C30310551F02F303105C1
:1036200039F00AC0803E10F0803F31F481E0089507
:1036300093FB882780F9089580E00895CF93DF9366
:1036400000D000D01F92CDB7DEB70F900F900F9033
:103650000F900F90DF91CF910895CF93DF9300D01B
:1036600000D000D0CDB7DEB726960FB6F894DEBFF7
:103670000FBECDBFDF91CF9108951F93CF93DF93FE
:10368000C091880116E080918901C81799F0D0E0B7
:103690001C9FF0011D9FF00D1124E657FE4F408145
:1036A000518162817381848195810E942D1B2196B5
:1036B000C770E9CFDF91CF911F9108954091BA0172
:1036C0005091BB016091BC017091BD018091BE0120
:1036D0009091BF010C942D1BCF938091BF018295D7
:1036E0008F7009F05FC08091BC01882309F45AC033
:1036F00020918801A09189016091BA017091BB016C
:103700008091BD019091BE0131E06F3F09F030E042
:10371000B32FC6E02A1709F445C0009721F07F3F78
:1037200021F44B2F03C041E001C040E030E040FDF8
:1037300035C0C29FF001C39FF00D1124E657FE4F24
:10374000418174132BC04081641328C04281411110
:1037500025C0438154814817590710F4415051093D
:10376000481B590B483C5105C8F48091BF018F702C
:1037700080618093BF0186E0829FF001839FF00DFE
:103780001124E157FE4F80818F70806180838AEB26
:1037900091E00E94DF17CF910C943D1B2F5F3F4FAC
:1037A0002770B8CFCF910895CF92DF92EF92FF921A
:1037B0000F931F93CF93DF93CDB7DEB762970FB60A
:1037C000F894DEBF0FBECDBF8C0185E0F801DE01AD
:1037D0001D9601900D928A95E1F7D8014C911196B2
:1037E0005C91119712966C9112971396ED90FC9044
:1037F00014977091BA01E091BB012091BD01309105
:10380000BE012115310531F0EF3F31F481E07F3FFA
:1038100019F403C081E001C080E0B82FB170CB2E55
:1038200080FD6CC1D090BC01DD2009F4F5C0F091A1
:10383000BF01E216F30638F0C701821B930B883CE8
:10384000910548F09BC0209530952E0D3F1D283CDA
:10385000310508F093C08F2F807F09F052C0E51327
:1038600014C0741312C0D62E61110FC0FF70F06126
:10387000F093BF010E945E1B8AEB91E00E94DF176C
:103880008091BF01F80185836CC1EF2831F05F3F63
:1038900031F481E04F3F19F403C081E001C080E0C2
:1038A00080FD03C081E0862701C080E0F82FF17021
:1038B000FF2E80FF1CC0809188012091890136E095
:1038C000821709F428C190E0389FF001399FF00D6C
:1038D0001124E657FE4F7181571306C070814713BC
:1038E00003C07281671303C001968770E9CFD62E9B
:1038F000662309F436C18091BF0181608093BF01C6
:1039000053C0E51308C0741306C0611104C0D80188
:103910001596FC93AEC04D875E878D859E856A8B1C
:103920000E94F91A6A89882329F1D62E662311F19B
:103930002091BF01822F82958F7090E002970CF446
:1039400060C08091BA019091BB0198878F831986DE
:10395000FB86EA862C87CE01079651C0E51731F128
:103960004D875E878D859E856A8B0E94F91A6A89CC
:1039700081112EC0C8010E94DF17A4C08F2F807F45
:1039800069F77E2DF98AE88A89890E941E1B8AEBD5
:1039900091E00E94DF17EAEBF1E086E0DF011D9283
:1039A0008A95E9F70E945E1BD12CDBC07413D8CF37
:1039B0006111D6CFD8011596FC93C8010E94DF177C
:1039C000EAEBF1E086E0DF011D928A95E9F7C9C0D4
:1039D000D62E662379F22091BF01822F82958F70B7
:1039E00090E0029774F08091BA019091BB019A83A4
:1039F00089831B82FD82EC822E83CE0101960E9478
:103A0000DF1786E0F801AAEBB1E001900D928A95EC
:103A1000E1F70E946C1B6FC0E216F30628F0C701A5
:103A2000821B930B9C0104C0209530952E0D3F1DE9
:103A3000283C310508F052C0D62E662309F49ACFEF
:103A4000E5132CC074132AC08091BF0180FD1DC0F6
:103A5000982F92959F70C9F0D80115968C93159761
:103A60009F3039F09F5F9295907F8F70892B1596CC
:103A70008C93C8010E94DF1786E0F801AAEBB1E041
:103A800001900D928A95E1F736C086E0F801AAEB25
:103A9000B1E001900D928A95E1F763C04D875E8792
:103AA0008D859E850E94F91A882379F086E0F801B9
:103AB000AAEBB1E001900D928A95E1F70E946C1B90
:103AC0000E945E1BDD24D3944CC08091BF018160B5
:103AD0008093BF01C8010E94DF1743C07E2DF98A81
:103AE000E88A89890E941E1BEAEBF1E086E0DF018B
:103AF0001D928A95E9F70E945E1B33C0662309F484
:103B000039CF4D875E878D859E850E94F91A88235F
:103B100009F430CFCBCF4D875E878D859E850E947F
:103B20001E20292F22952F7030E0223031052CF4F1
:103B30009F7041F0811106C00CC0243031052CF477
:103B40009F7049F4805E883020F0C8010E94DF1722
:103B5000CF2CDC2C06C0D80115969C91907F91F754
:103B6000F8CF8D2D62960FB6F894DEBF0FBECDBF95
:103B7000DF91CF911F910F91FF90EF90DF90CF9049
:103B800008951F93CF93DF93CDB7DEB72C970FB671
:103B9000F894DEBF0FBECDBF4F83588769877A8701
:103BA0008B879C87CE0107960E94D41B8823C1F087
:103BB0002F8138858A859B85892B31F03F3F11F015
:103BC00080E003C02F3FE1F781E0811147C04F81C2
:103BD000588569857A858B859C850E942D1B3EC002
:103BE00086E0FE013796DE01119601900D928A95CE
:103BF000E1F7FF81E8854A855B854115510531F084
:103C0000EF3F31F481E0FF3F19F403C081E001C0D0
:103C100080E080FD23C02091890130E0C901019638
:103C2000877099276091880170E086179707F1F1F6
:103C3000F983EA835D834C8396E0929FD001939F42
:103C4000B00D1124A657BE4FFE01319601900D9282
:103C50009A95E1F7809389010E943D1B16E08091BF
:103C6000880190918901891779F1189FC001112469
:103C700086579E4F0E94D41B882331F1E091880122
:103C80001E9FF0011124E657FE4F40815181628151
:103C90007381848195810E942D1B8091880190E021
:103CA00001968770992780938801D9CF0E94F51AD1
:103CB0001092890110928801EAEBF1E086E0DF01C1
:103CC0001D928A95E9F7CACF2C960FB6F894DEBFFD
:103CD0000FBECDBFDF91CF911F910895EF92FF925C
:103CE0000F931F93CF93DF939C01009709F471C04A
:103CF000F12CEE24E394E9012196F90184918437B3
:103D000040F4843008F056C0813081F0823021F1D7
:103D100060C0853709F449C0C0F19CE7980F90371F
:103D200008F057C08F770E94821746C089010E5F46
:103D30001F4FFE01849190E2980F983050F48770E5
:103D4000FE2D01C0FF0F8A95EAF78F2F0E941321E5
:103D500015C00E94BA1614C089010E5F1F4FFE01E4
:103D6000849190E2980F983068F48770FE2D01C01E
:103D7000FF0F8A95EAF78F2F0E9419210E943C219C
:103D8000E8011AC00E948217FBCF2E5F3F4FFE0151
:103D9000C491CC2341F08FE99FE00197F1F700C077
:103DA0000000C150F6CFE90107C0FE01F490E9011F
:103DB000229602C00E94BA168F2D882341F0EFE9A7
:103DC000FFE03197F1F700C000008150F6CF9E016F
:103DD00092CFDF91CF911F910F91FF90EF900895B7
:103DE00008956093C4017093C5018093C6019093B8
:103DF000C7010C94E31A0F931F930091C401109113
:103E0000C5012091C6013091C701062B172B282B25
:103E1000392B0093C4011093C5012093C601309340
:103E2000C7011F910F910C94E31A0F931F930091F8
:103E3000C4011091C5012091C6013091C70106232C
:103E40001723282339230093C4011093C50120931D
:103E5000C6013093C7011F910F910C94E31A0F9381
:103E60001F930091C4011091C5012091C6013091AA
:103E7000C70106271727282739270093C401109365
:103E8000C5012093C6013093C7011F910F910C9477
:103E9000E31A1092C0011092C1011092C201109257
:103EA000C3010C94E31A41E050E060E070E004C00C
:103EB000440F551F661F771F8A95D2F74093C001A4
:103EC0005093C1016093C2017093C3010C94E31A33
:103ED00041E050E060E070E004C0440F551F661FF1
:103EE000771F8A95D2F78091C0019091C101A0916E
:103EF000C201B091C301842B952BA62BB72B8093C5
:103F0000C0019093C101A093C201B093C3010C946E
:103F1000E31A41E050E060E070E004C0440F551F38
:103F2000661F771F8A95D2F74095509560957095DA
:103F30008091C0019091C101A091C201B091C301D3
:103F400084239523A623B7238093C0019093C101B6
:103F5000A093C201B093C3010C94E31A41E050E076
:103F600060E070E004C0440F551F661F771F8A95FC
:103F7000D2F78091C0019091C101A091C201B0918E
:103F8000C30184279527A627B7278093C001909364
:103F9000C101A093C201B093C3010C94E31A0F9323
:103FA0001F930091C0011091C1012091C201309175
:103FB000C301062B172B282B392B0093C00110931C
:103FC000C1012093C2013093C3011F910F910C9442
:103FD000E31A0F931F930091C0011091C10120912A
:103FE000C2013091C30106231723282339230093EC
:103FF000C0011093C1012093C2013093C3011F91EE
:104000000F910C94E31A0F931F930091C00110912C
:10401000C1012091C2013091C3010627172728272B
:1040200039270093C0011093C1012093C20130933E
:10403000C3011F910F910C94E31A0895CF92DF9260
:10404000EF92FF920F931F93CF93DF93EC01C090F9
:10405000C401D090C501E090C601F090C7018091E5
:10406000C0019091C101A091C201B091C301C82AC1
:10407000D92AEA2AFB2A0FE110E0B701A601002E97
:1040800004C076956795579547950A94D2F740FFF7
:1040900007C0BE01802F0E94300C8130910539F499
:1040A0000150110950F7BE0180E00E94300CDF91F1
:1040B000CF911F910F91FF90EF90DF90CF900895D7
:1040C00090910C01992361F190910D01992341F197
:1040D000982F9695969596959F3088F4E0910E01CD
:1040E000F0910F01E90FF11D877021E030E001C070
:1040F000220F8A95EAF78181822B8183089590911E
:10410000DB0190FF2DC01F928F9383ED95E09F936D
:104110008F930E94E9070F900F900F900F900895D2
:1041200040910E0150910F0120E030E09FEFFA0125
:10413000E20FF31F6281681799F09F3F19F4611134
:1041400001C0922F2F5F3F4F2E30310581F79F3FE7
:1041500039F0FA01E90FF11D97FDFA958283089570
:10416000089590910C01992369F190910D01992383
:1041700049F1982F9695969596959F3090F4E091F9
:104180000E01F0910F01E90FF11D877021E030E081
:1041900001C0220F8A95EAF7209581812823218387
:1041A00008959091DB0190FF1FC01F928F9385EBC4
:1041B00095E09F938F930E94E9070F900F900F90C7
:1041C0000F90089540910E0150910F0120E030E0D2
:1041D000FA01E20FF31F9281981301C012822F5F40
:1041E0003F4F2E303105A1F7089581E090E0E09136
:1041F0000E01F0910F01E80FF91F10820196803136
:104200009105A9F708959091DA01982B9093DA011E
:10421000089580959091DA0198239093DA0108959A
:104220001092DA0108959091D901982B9093D901B9
:10423000089580959091D90198239093D90108957C
:104240001092D90108958093C80108951092C80171
:10425000089540910E0150910F0120E030E080E080
:10426000FA01E20FF31F918191118F5F2F5F3F4F92
:104270002F303105A9F70895E0910E01F0910F015B
:104280008091DA018083E0910E01F0910F0180812D
:104290009091D901892B80839091C801992361F075
:1042A000E0910E01F0910F018081892B80830E94A3
:1042B000292181111092C80180910E0190910F0166
:1042C0000C943C1590933B0180933A010895CF9252
:1042D000DF92EF92FF920F931F936C01EE24FF2465
:1042E000C114D104E104F10421F46B017C0180E0EC
:1042F00001C080E133272F2D1E2D0D2D0115110535
:104300002105310519F0885F68017901970186015F
:10431000A4E03695279517950795AA95D1F701152D
:1043200011052105310519F08C5F680179019701AC
:104330008601F2E03695279517950795FA95D1F7FE
:10434000011511052105310519F08E5F680179010C
:10435000B701A6017695679557954795452B462B4E
:10436000472B09F08F5F1F910F91FF90EF90DF9027
:10437000CF9008958295982F9C7C969596958373FF
:1043800044E0849F90011124922B892F8A7A86958C
:104390009575990F892B08951F93CF93DF931F92E3
:1043A000CDB7DEB799830E94BA21182F9981892F42
:1043B0000E94BA21212F30E0322F2227A901482B59
:1043C000CA010F90DF91CF911F9108958091F40160
:1043D000843009F11092DC0120E488E190E00FB60E
:1043E000F894A895809360000FBE2093600083B777
:1043F000817F846083BF83B7816083BF7894889511
:1044000083B78E7F83BF88E10FB6F89480936000F6
:10441000109260000FBE089508950895CF930E94F2
:104420000C220E94D6090E940D22C0E08C2F0E940F
:10443000010B811105C0CF5FCE30C1F780E001C014
:1044400081E0CF9108950C94F51A82E084BD93E049
:1044500095BD9AEF97BD80936E0008952FB7F8949D
:104460008091DD019091DE01A091DF01B091E0012A
:104470002FBF0895CF92DF92EF92FF920F931F9379
:104480002FB7F8944091DD015091DE016091DF017A
:104490007091E0012FBF6A017B01EE24FF248C01A3
:1044A00020E030E0C016D106E206F30610F44150D9
:1044B0005109481B590BCA011F910F91FF90EF90B2
:1044C000DF90CF9008951F920F920FB60F92112494
:1044D0008F939F93AF93BF938091DD019091DE0105
:1044E000A091DF01B091E0010196A11DB11D809363
:1044F000DD019093DE01A093DF01B093E001BF9155
:10450000AF919F918F910F900FBE0F901F901895B4
:104510000E943712F8942FEF87EA91E621508040ED
:104520009040E1F700C0000087E090EBDC01809351
:10453000FD019093FE01A093FF01B09300022CE0D7
:1045400088E190E00FB6F894A895809360000FBEC4
:1045500020936000FFCFEF92FF920F931F93CF93B2
:10456000DF93E82EF12C8F2D0E94010BC0E0D0E0EC
:10457000082F10E098010C2E02C0359527950A945B
:10458000E2F720FD05C02196C630D10599F709C094
:104590006C2F7F2D80E00E940E0CE812F4CF81E09A
:1045A00005C0F3948EE0F812DECF80E0DF91CF916A
:1045B0001F910F91FF90EF900895CF93C82F8CE239
:1045C0000E94AB22882321F08C2FCF910C94AB2238
:1045D00080E0CF910895CF930E943824811102C0CA
:1045E0000E941E2488EF95E00E945007C5E6C15046
:1045F00049F00E94D6098FE39CE90197F1F700C0CA
:104600000000F5CF81EF95E00E94500789E20E94FB
:10461000DD22811111C18AE20E94DD2281110E94F6
:104620001E2485E00E94DD2281110E9488220E94C2
:1046300043248093DB0187E00E94DD22882399F1E7
:104640008BE10E94DD22882351F09091DB0191FBE8
:10465000882780F921E0822780FB91F922C08EE033
:104660000E94DD22882351F09091DB0192FB882784
:1046700080F921E0822780FB92F913C080E10E943B
:10468000DD229091DB01882341F093FB882780F99C
:1046900021E0822780FB93F904C0892F809580FB5D
:1046A00090F99093DB018091DB010E9447240E94E6
:1046B00055248093EE0180EE0E94DD22882341F094
:1046C0008091EE01982F909590FB80F98093EE01F8
:1046D00089E30E94DD22882359F09091EE0191FB3D
:1046E000882780F921E0822780FB91F99093EE01E1
:1046F00082EE0E94DD22882359F09091EE0192FB18
:10470000882780F921E0822780FB92F99093EE01BF
:1047100086EE0E94DD22882359F09091EE0193FBF2
:10472000882780F921E0822780FB93F99093EE019E
:1047300083EE0E94DD22882359F09091EE0194FBD4
:10474000882780F921E0822780FB94F99093EE017D
:1047500085E30E94DD22882359F09091EE0195FBBC
:10476000882780F921E0822780FB95F99093EE015C
:1047700081E30E94DD22882359F09091EE0196FB9F
:10478000882780F921E0822780FB96F99093EE013B
:1047900081E10E94DD22882359F09091EE0197FB80
:1047A000882780F921E0822780FB97F99093EE011A
:1047B0008091EE010E9459248091EE0187FB8827A9
:1047C00080F980930D0187E20E94DD22C82F8EE1DF
:1047D0000E94DD228111C2608FE10E94DD228111E1
:1047E000C46080E20E94DD228111C86081E20E94E3
:1047F000DD228111C06182E20E94DD228111C0624E
:1048000083E20E94DD228111C06484E20E94DD22E5
:10481000882311F0C06802C0CC2329F08C2F0E949D
:1048200050246C2F03C00E944C24682F70E080E05D
:1048300090E0CF910C94F11ECF9108956DEE7EEF34
:1048400080E090E00E94132E60E082E090E00E9401
:10485000052E60E083E090E00E94052E60E084E099
:1048600090E00E94052E60E085E090E00C94052E1B
:1048700080E090E00E94FF2D21E08D3E9E4F09F0E8
:1048800020E0822F089582E090E00C94F72D682FAD
:1048900082E090E00C94052E83E090E00C94F72DDC
:1048A000682F83E090E00C94052E84E090E00C9457
:1048B000F72D682F84E090E00C94052E8091E301A1
:1048C00080FF0BC06091130185E0689FB001112447
:1048D00075956795759567952AC081FF09C06091A8
:1048E000130185E0689FB0011124759567951FC07D
:1048F00082FF07C06091130185E0689FB001112419
:1049000016C04091E4014423C9F06091120146179A
:1049100088F72091130185E0289F90011124429F80
:10492000C001439F900D112470E00E94C92D603892
:10493000710540F46115710539F002C065E070E061
:10494000862F08958FE7089581E008958091E3010F
:1049500080FF08C06091110170E0759567957595AD
:10496000679521C081FF06C06091110170E07595C7
:10497000679519C082FF04C06091110170E010C0FA
:104980008091E4018823C1F0609110018617A0F79F
:1049900090911101989FC001112470E00E94C92DCF
:1049A0006038710528F46115710521F0862F08958E
:1049B0008FE7089581E0089561E070E0F4CF803FD3
:1049C00021F40E945E24819504C0813F29F40E9455
:1049D0005E248093E7010895823F21F40E945E24C3
:1049E000819504C0833F29F40E945E248093E601F0
:1049F0000895893F19F40E94A62405C08A3F31F426
:104A00000E94A62481958093E80108958B3F21F4AC
:104A10000E94A624819504C08C3F29F40E94A624FC
:104A20008093E9010895843F21F48091E50181603C
:104A300017C0853F21F48091E501826011C0863F57
:104A400021F48091E50184600BC0873F21F48091BF
:104A5000E501886005C0883F31F48091E5018061FF
:104A60008093E50108958D3F21F48091E3018160F9
:104A70000BC08E3F21F48091E301826005C08F3F1F
:104A800029F48091E30184608093E3010895803FDD
:104A900039F48091E70187FF6CC01092E70169C08B
:104AA000813F29F48091E7011816BCF362C0909110
:104AB000E601823F29F497FF5CC01092E60159C0DD
:104AC000833F19F41916CCF354C0893F41F4809107
:104AD000E80118160CF04DC01092E8014AC08A3F58
:104AE00029F48091E80187FF44C0F6CF8B3F39F469
:104AF0008091E90187FF3DC01092E9013AC08C3FE7
:104B000029F48091E9011816BCF333C0843F21F4E5
:104B10008091E5018E7F17C0853F21F48091E501EA
:104B20008D7F11C0863F21F48091E5018B7F0BC002
:104B3000873F21F48091E501877F05C0883F31F4EC
:104B40008091E5018F7E8093E50113C08D3F21F4B4
:104B50008091E3018E7F0BC08E3F21F48091E301B1
:104B60008D7F05C08F3F29F48091E3018B7F809377
:104B7000E3018091E60181110EC08091E70181116E
:104B80000AC08091E801811106C08091E90181117C
:104B900002C01092E40108958091DB0183FF7EC082
:104BA00084E396E00E9450078091E5011F928F9365
:104BB0008FE296E09F938F930E94E9078DE296E043
:104BC0000E9450072091E601822F992787FD90953A
:104BD0009F932F938AE296E09F938F930E94E90719
:104BE00088E296E00E9450072091E701822F9927E2
:104BF00087FD90959F932F9385E296E09F938F93E7
:104C00000E94E90783E296E00E9450072091E801A4
:104C1000822F992787FD90959F932F9380E296E0AE
:104C20009F938F930E94E9078EE196E00E945007C0
:104C30002091E901822F992787FD90959F932F93CB
:104C40008BE196E09F938F930E94E90788E196E0BD
:104C50000E9450078091E4011F928F9385E196E0B6
:104C60009F938F930E94E90783E196E00E9450078B
:104C70008091E3011F928F9380E196E09F938F9341
:104C80000E94E9078DE096E00E9450078DB79EB71D
:104C90004C960FB6F8949EBF0FBE8DBF85EE91E087
:104CA0000E9481150E942E229093E2018093E101DF
:104CB00008951F93CF93DF938091E1019091E201DA
:104CC0000E943A224091E401442321F020911401F2
:104CD00030E006C0209115015AE0259F9001112473
:104CE0008217930708F482C08091E6011091E701D2
:104CF000D091E801C091E901811107C0111105C0EF
:104D0000D11103C0CC2309F471C04F3F19F04F5F9C
:104D10004093E401181624F40E945E248093E60177
:104D20008091E60187FF05C00E945E2481958093F3
:104D3000E601111624F40E945E248093E70180911D
:104D4000E70187FF05C00E945E2481958093E701FB
:104D50006091E601662339F11091E701112319F101
:104D6000772767FD7095872F972F0E94CE2C23E31E
:104D700033E343E35FE30E94322D0E949B2C609358
:104D8000E601612F772767FD7095872F972F0E9487
:104D9000CE2C23E333E343E35FE30E94322D0E94F2
:104DA0009B2C6093E7011D1624F40E94A624809397
:104DB000E8018091E80187FF05C00E94A624819543
:104DC0008093E8011C1624F40E94A6248093E90134
:104DD0008091E90187FF05C00E94A62481958093F8
:104DE000E901DF91CF911F910C94CC25DF91CF91F8
:104DF0001F910895E5EEF1E085E0DF011D928A95AF
:104E0000E9F71092E4011092E301089587E598E034
:104E10000E9450071F9281E08F931F9285E08F932D
:104E200089E098E09F938F930E94E9070F900F907D
:104E30000F900F900F900F9008958330E9F128F4B0
:104E4000813061F0823009F10895853009F462C043
:104E500008F449C0863009F474C008952091150102
:104E6000862F90E0820F911D8F3F910520F4620FF5
:104E70006093150103C08FEF809315018091150198
:104E80001F928F9382E497E072C020911401862FC5
:104E900090E0820F911D8F3F910520F4620F609387
:104EA000140103C08FEF80931401809114011F92AD
:104EB0008F9380E397E05BC020911301862F90E0F1
:104EC000820F911D8F3F910520F4620F60931301B3
:104ED00003C08FEF80931301809113011F928F9372
:104EE0008DE197E044C020911201862F90E0820F5F
:104EF000911D8F3F910520F4620F6093120103C052
:104F00008FEF80931201809112011F928F9388E09E
:104F100097E02DC020911101862F90E0820F911D06
:104F20008F3F910520F4620F6093110103C08FEF52
:104F300080931101809111011F928F938FEE96E063
:104F400016C020911001862F90E0820F911D8F3F97
:104F5000910520F4620F6093100103C08FEF8093DE
:104F60001001809110011F928F9384ED96E09F9322
:104F70008F930E94E9070F900F900F900F90089564
:104F8000833081F128F4813059F08230D1F00895D6
:104F9000853009F449C0B8F1863009F456C0089547
:104FA00080911501681720F4861B8093150102C0BB
:104FB00010921501809115011F928F9385EC96E058
:104FC00054C080911401681720F4861B809314014B
:104FD00002C010921401809114011F928F9383EBF1
:104FE00096E043C080911301681720F4861B8093DC
:104FF000130102C010921301809113011F928F932D
:1050000080EA96E032C080911201681720F4861B76
:105010008093120102C010921201809112011F921E
:105020008F938BE896E021C080911101681720F4DE
:10503000861B8093110102C0109211018091110111
:105040001F928F9382E796E010C08091100168173D
:1050500020F4861B8093100102C0109210018091F1
:1050600010011F928F9387E596E09F938F930E9484
:10507000E9070F900F900F900F900895CF93C82FCE
:105080001F928F932CE539E03F932F930E94E907FD
:1050900061E070E080E090E004C0660F771F881F39
:1050A000991FCA95D2F70E94F11E0F900F900F9092
:1050B0000F90CF910C94F51ACF938D3109F465C000
:1050C000B0F58E3009F4CBC100F5873009F49BC1EF
:1050D000A8F4863009F06AC28091DB01817F8E7F5F
:1050E0008093DB0181E699E00E9450078DE99DE005
:1050F0000E94500781E08093EB0180C1883009F461
:105100004FC08B3009F47CC151C2863109F4EDC126
:1051100038F4803109F4B6C1813109F42DC246C298
:10512000893109F4CBC18B3109F486C13FC2853383
:1051300009F434C248F4873209F430C208F430C2AA
:10514000893209F42BC232C2833438F48A3308F02E
:1051500029C2883309F454C129C2833409F41EC218
:10516000883409F023C20E94F51A8CE89DE00E9461
:1051700050079FEF23ED80E3915020408040E1F7FE
:1051800000C000000E94882239C18CEA9DE00E9484
:1051900050070E94552C0E9430150E946E0D2EC1A2
:1051A00081EA9DE00E94500782E79BE00E94500741
:1051B0000E944C241F928F938FE69BE09F938F93C6
:1051C0000E94E9078DE69BE00E9450070E9443245D
:1051D000C82F8AE59BE00E9450071F92CF9325E5D8
:1051E0003BE03F932F930E94E90783E59BE00E94F9
:1051F000500789E49BE00E9450078C2F81701F921A
:105200008F9326E43BE03F932F930E94E90784E4C9
:105210009BE00E9450078AE39BE00E945007C1FB7D
:10522000882780F91F928F9327E33BE03F932F93CA
:105230000E94E90785E39BE00E94500789E29BE01A
:105240000E945007C2FB882780F91F928F9326E2A5
:105250003BE03F932F930E94E90784E29BE00E948A
:1052600050078BE19BE00E945007C3FBCC27C0F99D
:105270001F92CF9388E19BE09F938F930E94E90751
:1052800086E19BE00E9450070E945524C82F82E0CF
:105290009BE00E9450071F92CF932DEF3AE03F937F
:1052A0002F930E94E9078BEF9AE00E94500782EE4D
:1052B0009AE00E9450078C2F81701F928F932FEDE0
:1052C0003AE03F932F930E94E9078DB79EB78096EF
:1052D0000FB6F8949EBF0FBE8DBF8DED9AE00E9471
:1052E000500786EC9AE00E945007C1FB882780F99E
:1052F0001F928F9323EC3AE03F932F930E94E9078C
:1053000081EC9AE00E9450078FEA9AE00E945007D1
:10531000C2FB882780F91F928F932CEA3AE03F93D3
:105320002F930E94E9078AEA9AE00E94500788E9D1
:105330009AE00E945007C3FB882780F91F928F9341
:1053400025E93AE03F932F930E94E90783E99AE029
:105350000E94500789E89AE00E945007C4FB882702
:1053600080F91F928F9326E83AE03F932F930E9493
:10537000E90784E89AE00E94500782E79AE00E94D9
:105380005007C5FB882780F91F928F932FE63AE0DC
:105390003F932F930E94E9078DE69AE00E94500701
:1053A00081E59AE00E945007C6FB882780F91F928A
:1053B0008F932EE43AE03F932F930E94E9078CE409
:1053C0009AE00E94500784E49AE00E945007C7FBCD
:1053D000CC27C0F91F92CF9381E49AE09F938F93DB
:1053E0000E94E9078FE39AE00E9450078DB79EB7AD
:1053F0004C960FB6F8949EBF0FBE8DBFC1E0DBC0C8
:1054000088E899E058C08091DB01C82FC17080FF07
:1054100009C08FE79DE00E9450078091DB01817FEA
:105420008E7F44C083E79DE00E9450078091DB019E
:1054300081608093DB01E2CF8091DB0181FBCC278F
:10544000C0F991E0C927C0FB81F98093DB01CC232F
:1054500019F086E69DE025C088E59DE02CC080918E
:10546000DB0182FBCC27C0F991E0C927C0FB82F9A0
:105470008093DB01CC2319F089E49DE012C089E31D
:105480009DE019C08091DB0183FBCC27C0F991E03E
:10549000C927C0FB83F98093DB01CC2351F08DE257
:1054A0009DE00E9450078091DB0181608093DB01C9
:1054B00082C080E29DE00E945007A0CF81E19DE084
:1054C0000E94500785EE9CE00E94500788EA9CE00D
:1054D0000E94500781E89CE00E9450078DE39CE009
:1054E0000E94500782E19CE0E6CF84E09CE00E94AD
:1054F00050070E9430151F928F938AEE9BE09F9376
:105500008F930E94E90780910C011F928F9383ED86
:105510009BE09F938F930E94E907809172011F92F5
:105520008F9380EC9BE09F938F930E94E90780917B
:105530000D011F928F938DEA9BE09F938F930E94A2
:10554000E9078091DD019091DE01A091DF01B0912A
:10555000E001BF93AF939F938F9389E99BE09F9363
:105560008F930E94E9078DB79EB746960FB6F894C1
:105570009EBF0FBE8DBF42CF0E94F51AC0910D0194
:1055800081E0C827C0930D01CC2329F08FE89BE070
:105590000E94500710C084E89BE08DCF80E003C0DC
:1055A0008D5101C089530E943E2828CF82E89BE09C
:1055B0000E945007C0E08C2FCF91089580E008959D
:1055C00080E00895CF93C82F8091EB01813081F066
:1055D00020F0823009F44CC042C1A0910E01B0917C
:1055E0000F018C91813169F0823209F03AC109C012
:1055F000A0910E01B0910F018C91813111F0823296
:1056000049F48C2F0E94DE2A81112FC08C2F0E941A
:105610005C282CC08C2F0E94E02A811126C0C43146
:10562000E1F070F4CB3081F0C031D1F40E94062754
:1056300084E599E00E94500782E08093EB0115C059
:10564000C93259F0C83361F481E699E00E945007ED
:1056500088E599E00E94500708C01092EB0103C151
:1056600082E599E00E945007FEC081E08170FDC094
:10567000C43220F5CE3108F0C0C0CB3099F1C8F467
:10568000C73009F0D2C08AE08093150194E190936D
:10569000140193E0909313018093120188E08093AA
:1056A000110188E28093100188EF97E00E94500773
:1056B000BFC0C33149F1C431C1F0B7C0CB3409F424
:1056C000A9C028F4C93289F0C83361F0AEC0C13531
:1056D00009F49EC0C23509F499C0CE3409F0A5C0C2
:1056E0006AE09EC00E940627A3C08091EA01882339
:1056F00019F01092EA019CC085E098E00E945007E2
:1057000081E08093EB01B1C08FED97E00E945007DC
:105710008DEC97E00E945007809115011F928F93A6
:105720008AEC97E09F938F930E94E90788EC97E0BB
:105730000E94500786EB97E00E9450078091140169
:105740001F928F9383EB97E09F938F930E94E907BB
:1057500081EB97E00E94500782EA97E00E94500791
:10576000809113011F928F938FE997E09F938F93FE
:105770000E94E9078DE997E00E9450078CE897E0C6
:105780000E945007809112011F928F9389E897E041
:105790009F938F930E94E90787E897E00E94500744
:1057A00082E797E00E945007809111011F928F932A
:1057B0008FE697E09F938F930E94E9078DE697E02D
:1057C0000E94500786E597E00E94500780911001E3
:1057D0001F928F9383E597E09F938F930E94E90731
:1057E00081E597E00E9450078DB79EB748960FB6A7
:1057F000F8949EBF0FBE8DBF1BC0CE51EC2FF0E0C2
:10580000E15DFE4F80818093EA0112C061E003C038
:1058100061E006C06AE08091EA010E941D2708C08D
:105820008091EA010E94C02703C086EF97E013C071
:105830008091EA01882369F01F928F9380EF97E0AF
:105840009F938F930E94E9070F900F900F900F90F6
:1058500004C08DEE97E00E94500781E006C01092D0
:10586000EB0180E002C080E001CFCF910895E1E834
:10587000F0E08081886080838081816080838FB741
:10588000F89493E09093890090ED909388008FBFF7
:105890000895EFE6F0E08081826080830895EFE66E
:1058A000F0E080818D7F80830895EFE6F0E08081D5
:1058B00092E08927808308951F920F920FB60F926E
:1058C00011242F933F934F935F936F937F938F9305
:1058D0009F93AF93BF93EF93FF938091EC019091CF
:1058E000ED0101969093ED018093EC01811103C0CD
:1058F00082E00E946E0DE091ED01E695E695F0E004
:10590000E454F24FE4918091EC018E1303C080E0E7
:105910000E946E0DFF91EF91BF91AF919F918F917A
:105920007F916F915F914F913F912F910F900FBE9B
:105930000F901F90189504D06894B1118DC00895F0
:1059400070D088F09F5790F0B92F9927B751A0F0E9
:10595000D1F0660F771F881F991F1AF0BA95C9F703
:1059600012C0B13081F077D0B1E0089574C0672FD4
:10597000782F8827B85F39F0B93FCCF386957795B3
:105980006795B395D9F73EF490958095709561959C
:105990007F4F8F4F9F4F0895E89409C097FB3EF4C7
:1059A00090958095709561957F4F8F4F9F4F99236C
:1059B000A9F0F92F96E9BB279395F69587957795EA
:1059C0006795B795F111F8CFFAF4BB0F11F460FFAA
:1059D0001BC06F5F7F4F8F4F9F4F16C0882311F002
:1059E00096E911C0772321F09EE8872F762F05C016
:1059F000662371F096E8862F70E060E02AF09A95B1
:105A0000660F771F881FDAF7880F9695879597F9A5
:105A1000089557FD9058440F551F59F05F3F71F09E
:105A20004795880F97FB991F61F09F3F79F0879505
:105A30000895121613061406551FF2CF4695F1DF8E
:105A400008C0161617061806991FF1CF869571051E
:105A5000610508940895E894BB2766277727CB0152
:105A600097F908950BD078C069D028F06ED018F05F
:105A7000952309F05AC05FC01124EECFCADFA0F30E
:105A8000959FD1F3950F50E0551F629FF001729FD3
:105A9000BB27F00DB11D639FAA27F00DB11DAA1FF2
:105AA000649F6627B00DA11D661F829F2227B00D3F
:105AB000A11D621F739FB00DA11D621F839FA00DCA
:105AC000611D221F749F3327A00D611D231F849F1A
:105AD000600D211D822F762F6A2F11249F57504071
:105AE0008AF0E1F088234AF0EE0FFF1FBB1F661F0C
:105AF000771F881F91505040A9F79E3F510570F0C5
:105B000014C0AACF5F3FECF3983EDCF386957795FF
:105B10006795B795F795E7959F5FC1F7FE2B880FBF
:105B2000911D9695879597F9089597F99F6780E855
:105B300070E060E008959FEF80EC089500240A94DF
:105B40001616170618060906089500240A94121658
:105B50001306140605060895092E0394000C11F48B
:105B6000882352F0BB0F40F4BF2B11F460FF04C038
:105B70006F5F7F4F8F4F9F4F0895991B79E004C04F
:105B8000991F961708F0961B881F7A95C9F780957C
:105B9000089597FB072E16F4009407D077FD09D0DF
:105BA0000E94E32D07FC05D03EF4909581959F4F10
:105BB0000895709561957F4F0895EE0FFF1F059032
:105BC000F491E02D0994AA1BBB1B51E107C0AA1F49
:105BD000BB1FA617B70710F0A61BB70B881F991F8E
:105BE0005A95A9F780959095BC01CD010895F99932
:105BF000FECF92BD81BDF89A992780B50895A8E19E
:105C0000B0E042E050E00C941A2E262FF999FECF16
:105C10001FBA92BD81BD20BD0FB6F894FA9AF99AC9
:105C20000FBE019608950E94052E272F0C94062E74
:105C3000DC01CB01FC01F999FECF06C0F2BDE1BD4C
:105C4000F89A319600B40D9241505040B8F708953B
:045C5000F894FFCFF6
:105C540020026F0D600E3D0E090ED60D0101C90123
:105C640028080A03140A3F4D3620394205F504BFBB
:105C7400049F046604D903F2030B042404440401BE
:0A5C840002030405060708090000EA
:00000001FF

@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_SPC,KC_BSPC,KC_END,
// right hand
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT,
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
@ -114,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
[MDIA] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

@ -0,0 +1,184 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Del | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | BkSp | A | O | E | U | I |------| |------| D | H | T | N |S / L2| - |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | App | LGui | | Alt |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp|------| |------| Tab |Enter |
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
KC_DELT, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(1),
KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO),
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPC,KC_BSPC,KC_END,
// right hand
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS,
MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
KC_PGDN,KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

@ -0,0 +1,184 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,-----------------------------------------------------.
* | Grv | 1 | 2 | 3 | 4 | 5 | Del | |Backspace| 6 | 7 | 8 | 9 | 0 | \ |
* |--------+------+------+------+------+-------------| |---------+------+------+------+------+------+--------|
* | Tab | ' | , | . | P | Y | L1 | | L1 | F | G | C | R | L | / |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* |Ctrl/Esc| A | O | E | U | I |------| |---------| D | H | T | N |S / L2| - |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `----------------+------+------+------+------+--------'
* | Ctrl | LGui | Alt | Left | Right| | Up | Down | [ | ] | = |
* `----------------------------------' `----------------------------------'
* ,--------------. ,-------------.
* | AltShf| LGui | | Alt | ~L1 |
* ,------|-------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp |------| |------| Enter |Space |
* | |ace | End | | PgDn | | |
* `---------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT,
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, TG(1),
CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I,
KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO),
KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT,
LALT(KC_LSFT), KC_LGUI,
KC_HOME,
KC_SPC,KC_BSPC,KC_END,
// right hand
KC_BSPC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
KC_D, KC_H, KC_T, KC_N, LT(MDIA, KC_S), KC_MINS,
MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_EQL,
KC_LALT, KC_FN1,
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,184 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | LGUI | | App | 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | LCtrl | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
* `----------------------------------' `----------------------------------'
* ,---------------. ,---------------.
* |Ctrl/Esc| Alt | | Alt |Ctrl/Esc|
* ,------|--------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* |Backsp| Del |------| |------| Enter | Space|
* | | | End | | PgDn | | |
* `----------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
CTL_T(KC_ESC), ALT_T(KC_APP),
KC_HOME,
KC_BSPC,KC_DEL,KC_END,
// right hand
KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT,
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,184 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Caps | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | Esc | Grv |Insert| Left | Right| | Up | Down | [ | ] | L2 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Ctrl | Alt | | LGui | Ctrl |
* ,------|------|------| |------+------+------.
* | | | Home | | PgUp | | |
* |Backsp| Del |------| |------| Enter| Space|
* |ace | | End | | PgDn | | |
* `--------------------' `--------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
KC_ESC, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
KC_LCTL,KC_LALT,
KC_HOME,
KC_BSPC,KC_DEL,KC_END,
// right hand
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN2,
KC_LGUI, KC_RCTL,
KC_PGUP,
KC_PGDN, KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_PSCR,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_SLCK,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_PAUS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,19 @@
This keymap attempts to match the Kinesis Contoured (aka Advantage) default
layout as closely as possible. See
http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf
Apart from the obvious mappings, this keymap also:
* removes the dual-purpose momentary layer/normal keys: Z, /, and Grv;
because the author--coming from a Kinesis keyboard--finds the delays and
accidental modifiers to be more disconcerting than helpful.
* puts Esc in the bottom left since there's no place for it in the top
left to match the Kinesis.
* changes the bottom-right key into an L2 toggle since there's otherwise no
way to get to L2.
* adds PrScr, ScrLk and Pause to the L1 keymap, down the left side, since
they're present on the Kinesis but not available in the default
ergodox_ez keymap.

@ -1,10 +1,7 @@
// Netable differences vs. the default firmware for the ErgoDox EZ:
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
// 2. The media keys work on OSX (But not on Windows).
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_extras/keymap_german.h"
#include "keymap_extras/keymap_german_osx.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
@ -12,13 +9,15 @@
#define CRSR 3 // media keys
#define NUMB 4 // number keys
#define M_CTRL_CMDV 1
#define M_CTRL_CMDC 2
#define M_MEH_SH_ACUT 3
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |Lctrl | |Rctrl | 6 | 7 | 8 | 9 | 0 | ß |
* | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@ -28,32 +27,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | L1 | LGui | | Alt |Ctrl/Esc|
* ,-------------. ,---------------.
* | MDIA | Meh | | Hyper| NUM |
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp|------| |------| Enter | Space|
* | |ace | End | | PgDn | | |
* | Back-| Del |------| |------| Enter | Space|
* | Space| | End | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCTL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI,
TG(3), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, M(M_CTRL_CMDV),
KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_LGUI,
TG(3), DE_A, DE_S, DE_D, DE_F, DE_G,
KC_LSFT, CTL_T(DE_Y), DE_X, DE_C, DE_V, DE_B, KC_LALT,
LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
TG(2), MEH_T(KC_NO),
TG(2), M(M_MEH_SH_ACUT), //MEH_T(LSFT(DE_ACUT)), //need to create macro for that
KC_HOME,
KC_SPC,KC_BSPC,KC_END,
KC_BSPC,KC_DEL, KC_END,
// right hand
KC_RCTL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE,
KC_H, KC_J, KC_K, KC_L, KC_SCLN,LT(MDIA,DE_AE),
KC_RALT,KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,LGUI(KC_LSFT),KC_RBRC, LT(SYMB,KC_BSLS),
M(M_CTRL_CMDC), DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS,
KC_RGUI, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UE,
DE_H, DE_J, DE_K, DE_L, DE_OE,LT(MDIA,DE_AE),
KC_RALT, DE_N, DE_M, DE_COMM,DE_DOT, CTL_T(DE_MINS), KC_RSFT,
KC_UP, KC_DOWN,LGUI(KC_LSFT),DE_PLUS, LT(SYMB,DE_HASH),
ALL_T(DE_ACUT), TG(4),
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
@ -63,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | ! | ? | | | | | \ | [ | ] | | | # | F12 |
* | | < | > | ! | ? | | | | | \ | [ | ] | | | # | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@ -83,9 +82,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_GRV,LSFT(KC_GRV),DE_EXLM,DE_QST,KC_TRNS,KC_TRNS,
KC_TRNS,DE_HASH,DE_DLR, LALT(LSFT(KC_7)),DE_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,LALT(KC_7),LALT(KC_N),KC_TRNS,
KC_TRNS,DE_LESS,DE_MORE,DE_EXLM,DE_QST, KC_TRNS,KC_TRNS,
KC_TRNS,DE_HASH,DE_DLR, DE_BSLS,DE_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,DE_PIPE,DE_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
@ -126,7 +125,7 @@ KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
@ -190,6 +189,7 @@ const uint16_t PROGMEM fn_actions[] = {
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
static uint16_t start;
// MACRODOWN only works in this function
switch(id) {
case 0:
@ -199,6 +199,42 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
unregister_code(KC_RSFT);
}
break;
case 1:
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL), END);
} else {
if (timer_elapsed(start) > 150) {
return MACRO(U(LCTRL), END);
} else {
return MACRO(U(LCTRL), D(LGUI), T(V), U(LGUI), END);
}
}
break;
case 2:
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),END);
} else {
if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),END);
} else {
return MACRO(U(LCTRL),D(LGUI),T(C),U(LGUI),END);
}
}
break;
case 3:
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LSFT),D(LALT),END);
} else {
if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
} else {
return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_ACUT here, as macro needs KC_ prefix
}
}
break;
}
return MACRO_NONE;
};
@ -231,7 +267,7 @@ void * matrix_scan_user(void) {
case 4:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
ergodox_board_led_on();
//ergodox_board_led_on();
break;
default:
// none

File diff suppressed because it is too large Load Diff

@ -0,0 +1,262 @@
// Netable differences vs. the default firmware for the ErgoDox EZ:
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
// 2. The media keys work on OSX (But not on Windows).
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_extras/keymap_german.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
#define ADNW 3 // media keys
#define NUMB 4 // number keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | ADNW | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/L2 |
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
* | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,---------------.
* | MDIA | Meh | | Hyper| NUM |
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Back-| Del |------| |------| Enter | Space|
* | Space| | End | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_V),
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI,
TG(3), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
TG(2), MEH_T(LSFT(DE_ACUT)),
KC_HOME,
KC_BSPC,KC_DEL,KC_END,
// right hand
LGUI(KC_C), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE,
KC_H, KC_J, KC_K, KC_L, KC_SCLN,LT(MDIA,DE_AE),
KC_RALT,KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,LGUI(KC_LSFT),KC_RBRC, LT(SYMB,KC_BSLS),
ALL_T(DE_ACUT), TG(4),
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | ! | ? | | | | | \ | [ | ] | | | # | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | ^ | % | | | ~ | | | | & | < | > | " | ' | ? |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | . | ! | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_GRV,LSFT(KC_GRV),DE_EXLM,DE_QST,KC_TRNS,KC_TRNS,
KC_TRNS,DE_HASH,DE_DLR, LALT(LSFT(KC_7)),DE_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,LALT(KC_7),LALT(KC_N),KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_DEL,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12,
DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS,
KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST,
KC_TRNS,KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | Play |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MUTE, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS,
KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RIGHT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
/* Keymap 3: ADNW-Koy layer
* ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts.
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |Lctrl | |Rctrl | 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | TAB | K | . | O | , | Y | CMD | | CMD | V | G | C | L | ß | Z |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | ADNW | H | A | E | I | U |------| |------| D | T | R | N | S | F/L2 |
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
* | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M |J/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |</L1| ^ |AltShf| Left | Right| | Up | Down | CMD-SHIFT | ´ | //L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | L1 | LGui | | Alt |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp|------| |------| Enter | Space|
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_TRNS,
KC_TRNS, KC_H, KC_A, KC_E, KC_I, KC_U,
KC_TRNS, CTL_T(KC_X),KC_Q, DE_AE, DE_UE, DE_OE, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH,
KC_TRNS, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y,
KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F),
KC_TRNS, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, KC_TRNS,
KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
KC_0,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
[2] = ACTION_LAYER_TAP_TOGGLE(ADNW) // FN2 - Momentary Layer 2 (ADNW)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
case 3:
ergodox_right_led_3_on();
break;
case 4:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
//ergodox_board_led_on();
break;
default:
// none
break;
}
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 KiB

After

Width:  |  Height:  |  Size: 732 KiB

@ -0,0 +1,187 @@
// French AZERTY version of the default_osx file
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_extras/keymap_french_osx.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | - | & | é | " | ' | ( | LEFT | | RIGHT| § | è | ! | ç | à | ) |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Del | A | Z | E | R | T | L1 | | L1 | Y | U | I | O | P | ` |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | BkSp | Q | S | D | F | G |------| |------| H | J | K | L | M | LGui |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |W/Ctrl| X | C | V | B | | | | N | , |; / L2| : |=/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | ù /L1| < |AltShf| Left | Right| | Up | Down | ^ | $ | ~L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,---------------.
* | App | LGui | | Alt |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp|------| |------| Tab |Enter |
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
FR_MINS, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_LEFT,
KC_DELT, FR_A, FR_Z, KC_E, KC_R, KC_T, TG(1),
KC_BSPC, FR_Q, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(FR_W), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
LT(SYMB,FR_UGRV), FR_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPC, KC_BSPC, KC_END,
// right hand
KC_RGHT, FR_SECT, FR_EGRV, FR_EXLM, FR_CCED, FR_AGRV, FR_RPRN,
TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, FR_GRV,
KC_H, KC_J, KC_K, KC_L, FR_M, KC_LGUI,
MEH_T(KC_NO), KC_N, FR_COMM, LT(MDIA, FR_SCLN), FR_COLN, CTL_T(FR_EQL), KC_RSFT,
KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
KC_PGDN, KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | , | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,FR_EXLM,FR_AT, FR_LCBR,FR_RCBR,FR_PIPE,KC_TRNS,
KC_TRNS,FR_HASH,FR_DLR, FR_LPRN,FR_RPRN,FR_GRV,
KC_TRNS,FR_PERC,FR_CIRC,FR_LBRC,FR_RBRC,FR_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, FR_7, FR_8, FR_9, FR_ASTR, KC_F12,
KC_DOWN, FR_4, FR_5, FR_6, FR_PLUS, KC_TRNS,
KC_TRNS, FR_AMP, FR_1, FR_2, FR_3, FR_BSLS, KC_TRNS,
KC_TRNS,FR_COMM, FR_0, FR_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,1471 @@
:100000000C9400070C9444070C9444070C94440788
:100010000C9444070C9444070C9444070C94440734
:100020000C9444070C9444070C9458120C942A1313
:100030000C9444070C9444070C9444070C94440714
:100040000C9444070C94022C0C9444070C94440721
:100050000C9444070C94FA210C9444070C94440724
:100060000C9444070C9444070C9444070C944407E4
:100070000C9444070C9444070C9444070C944407D4
:100080000C9444070C9444070C9444070C944407C4
:100090000C9444070C9444070C9444070C944407B4
:1000A0000C9444070C9444070C9444079713B91319
:1000B000A714B913A714FE132114A71476148914D6
:1000C000D017D017FF17FF17431881189B1A9B1AD8
:1000D0009A189B1A9B199B196F1A9B1A9B1A861ABE
:1000E0000000F0A12E004C002A00E1003481000045
:1000F0001E00140004001D7164004D001F001A0052
:1001000016001B00E1042A0020000800070006007A
:1001100050002C0021001500090019004F004A0072
:10012000220017000A000500000065745000015409
:100130000000007F0000E3004F0001540000007742
:100140000000E20023001C000B00110000002971D8
:10015000240018000D00100052004B0025000C0078
:100160000E00368251002800260012000F003700D2
:100170002F002B00270013003300387130004E0091
:100180002D003200E300E500C10000000100010085
:1001900001000100010000003A0025003502340290
:1001A000010001003B00350030002F00010001007C
:1001B0003C00220422002206010001003D002D0423
:1001C0002D002D06010001003E000F063200110433
:1001D000000001000100010000000100000001001A
:1001E0000100010000000100000001003F0052007A
:1001F00051001E00000001004000240221021E02E6
:10020000010001004100250222021F02100001002E
:10021000420026022302200227020100430030028E
:100220003802370638000100440045000100010093
:1002300001000000010001000100010001000000B8
:1002400001000100010001000100010001000100A6
:10025000F2000100010001000100F000F1000100C6
:10026000F400010001000100F3000100F5000100AD
:100270000100010001000100000001000100010077
:100280000000010000000100010001000000010069
:100290000000010001000100010001000000010058
:1002A0000100010001000100A9000100010001009E
:1002B0000100AC00AA00B600010001000100AB0083
:1002C000A80001000100010001000100010001007F
:1002D00001000100AE000100010000000A0025300D
:1002E000313662003A200025303258000A722F63FE
:1002F0002030313233343536373839414243444582
:10030000460A000A002530325800626F756E636538
:10031000213A20006C6566742073696465206174FD
:100320007461636865640A006C656674207369644F
:1003300065206E6F7420726573706F6E64696E678E
:100340000A00747279696E6720746F207265736534
:1003500074206D637032333031380A000A444542EC
:1003600055473A20656E61626C65642E0A005B73C6
:100370005D004B6579626F617264207374617274A1
:100380002E0A005B575D005B535D005B525D005BB6
:10039000445D005B435D0016034500720067006F1B
:1003A0000044006F007800200045005A000000164D
:1003B000034500720067006F0044006F0078002062
:1003C0000045005A0000000403090409028D0005DD
:1003D0000100A0FA09040000010301010009211134
:1003E000010001223F000705810308000A090401FA
:1003F000000103010200092111010001224D000743
:1004000005820308000A0904020001030000000934
:1004100021110100012236000705830308000A09A3
:100420000403000203000000092111010001222041
:1004300000070584032000010705040320000109CB
:100440000404000103000000092111010001223908
:1004500000070585031000011201100100000008CB
:10046000EDFE071301000102000105010906A101CB
:10047000050719E029E71500250195087501810296
:100480000508190129059505750191029501750366
:100490009101050719002977150025019578750147
:1004A0008102C00631FF0974A1010975150025FFFD
:1004B0009520750881020976150025FF952075089D
:1004C0009102C005010980A101850216010026B72D
:1004D000001A01002AB700751095018100C0050CB3
:1004E0000901A1018503160100269C021A01002AB8
:1004F0009C02751095018100C005010902A1010946
:1005000001A10005091901290515002501950575A9
:100510000181029501750381010501093009311539
:1005200081257F95027508810609381581257F95FB
:100530000175088106050C0A38021581257F950191
:1005400075088106C0C005010906A101050719E06B
:1005500029E71500250195087501810295017508A7
:10056000810105081901290595057501910295017B
:10057000750391010507190029FF150025FF950650
:1005800075088100C00A002530325820006B65795B
:10059000626F6172645F7265706F72743A20000AF4
:1005A0000025303258006B6579626F6172645F7349
:1005B00065745F6C65643A200064656C5F6B657997
:1005C0005F6269743A2063616E27742064656C3AD7
:1005D00020253032580A006164645F6B65795F6280
:1005E00069743A2063616E2774206164643A20253F
:1005F0003032580A00646F6E652E0A00626F6F67B2
:100600006D61676963207363616E3A202E2E2E2020
:1006100000290A002575002F002575005D2800259A
:10062000640020002564002000256400200025646B
:10063000007C0025303258006D6F7573656B6579ED
:10064000205B62746E7C782079207620685D287249
:1006500065702F61636C293A205B006D6B5F776872
:1006600065656C5F74696D655F746F5F6D6178203F
:100670003D2025640A006D6B5F776865656C5F6D72
:1006800061785F7370656564203D2025640A006DA4
:100690006B5F74696D655F746F5F6D6178203D207D
:1006A00025640A006D6B5F6D61785F7370656564CA
:1006B000203D2025640A006D6B5F696E746572765B
:1006C000616C203D2025640A006D6B5F64656C6180
:1006D00079203D2025640A006D6B5F776865656C45
:1006E0005F74696D655F746F5F6D6178203D202573
:1006F000640A006D6B5F776865656C5F6D61785F3C
:100700007370656564203D2025640A006D6B5F741D
:10071000696D655F746F5F6D6178203D2025640AA7
:10072000006D6B5F6D61785F7370656564203D205F
:1007300025640A006D6B5F696E74657276616C206A
:100740003D2025640A006D6B5F64656C6179203D16
:100750002025640A000A00257500363A207768656E
:10076000656C5F74696D655F746F5F6D61783A2069
:10077000000A00257500353A20776865656C5F6D65
:1007800061785F73706565643A20000A0025750022
:10079000343A2074696D655F746F5F6D61783A20DB
:1007A000000A00257500333A206D61785F7370652B
:1007B00065643A20000A00257500323A20696E749B
:1007C000657276616C286D73293A20000A002575E0
:1007D00000313A2064656C6179282A31306D7329C3
:1007E0003A20000A092D2056616C756573202D0A88
:1007F000004D3E004D25643E20003F00736574208F
:1008000064656661756C740A00433E200077686514
:1008100072652064656C74613A20637572736F72DF
:100820003D25642C20776865656C3D25640A536519
:100830006520687474703A2F2F656E2E77696B6926
:1008400070656469612E6F72672F77696B692F4DD0
:100850006F7573655F6B6579730A000A092D204D0A
:100860006F7573656B6579202D0A4553432F713A77
:1008700009717569740A313A0964656C6179282ACD
:1008800031306D73290A323A09696E746572766186
:100890006C286D73290A333A096D61785F7370654E
:1008A00065640A343A0974696D655F746F5F6D61E0
:1008B000780A353A09776865656C5F6D61785F73B2
:1008C000706565640A363A09776865656C5F7469B6
:1008D0006D655F746F5F6D61780A0A703A097072B6
:1008E000696E742076616C7565730A643A09736584
:1008F000742064656661756C74730A75703A092BAF
:10090000310A646F776E3A092D310A706775703A53
:10091000092B31300A7067646F776E3A092D3130D8
:100920000A0A7370656564203D2064656C746120FB
:100930002A206D61785F7370656564202A202872B3
:100940006570656174202F2074696D655F746F5FD9
:100950006D6178290A003F004D3E2000433E200093
:100960004C25640A000A092D20436F6E736F6C6575
:10097000202D0A4553432F713A09717569740A6D28
:100980003A096D6F7573656B65790A000A092D2048
:100990004D61676963202D0A643A09646562756771
:1009A0000A783A096465627567206D6174726978C6
:1009B0000A6B3A096465627567206B6579626F61DD
:1009C00072640A6D3A096465627567206D6F7573AC
:1009D000650A763A0976657273696F6E0A733A0929
:1009E0007374617475730A633A09636F6E736F6C25
:1009F00065206D6F64650A302D343A096C61796544
:100A000072302D34284631302D4634290A50617514
:100A1000733A09626F6F746C6F616465720A653A4C
:100A200009656570726F6D0A6E3A094E4B524F0A36
:100A30007A3A09736C656570204C4544207465737F
:100A4000740A000A002575002E6E6B726F3A200042
:100A50000A002575002E737761705F6261636B73A6
:100A60006C6173685F6261636B73706163653A2088
:100A7000000A002575002E737761705F67726176DA
:100A8000655F6573633A20000A002575002E6E6F5E
:100A90005F6775693A20000A002575002E7377613B
:100AA000705F72616C745F726775693A20000A004A
:100AB0002575002E737761705F6C616C745F6C6775
:100AC00075693A20000A002575002E636170736C09
:100AD0006F636B5F746F5F636F6E74726F6C3A20DD
:100AE000000A002575002E737761705F636F6E7466
:100AF000726F6C5F636170736C6F636B3A20000A96
:100B00000025303258006B65796D61705F636F6EE0
:100B10006669672E7261773A20000A002575002EFB
:100B20006D6F7573653A20000A002575002E6B65A0
:100B300079626F6172643A20000A002575002E6D9B
:100B400061747269783A20000A002575002E656E7E
:100B500061626C653A20000A0025303258006465F5
:100B60006275675F636F6E6669672E7261773A20A0
:100B7000000A0025750064656661756C745F6C61C0
:100B80007965723A20003F004E4B524F3A206F6613
:100B9000660A004E4B524F3A206F6E0A0074696D20
:100BA00065725F636F756E743A202530346C580A35
:100BB000006B6579626F6172645F6E6B726F3A2071
:100BC00025580A006B6579626F6172645F69646CB5
:100BD000653A2025580A006B6579626F6172645F1F
:100BE00070726F746F636F6C3A2025580A00686FDB
:100BF00073745F6B6579626F6172645F6C65647357
:100C000028293A2025580A000A092D2053746174B6
:100C10007573202D0A004743433A20342E392E3372
:100C2000204156522D4C4942433A20312E382E3124
:100C3000204156525F415243483A20617672350A4C
:100C4000004F5054494F4E533A204C554641204294
:100C50004F4F544D41474943204D4F5553454B4508
:100C6000592045585452414B455920434F4E534FFC
:100C70004C4520434F4D4D414E44204E4B524F204A
:100C80003531320A004255494C443A2030663263CD
:100C9000373733202831303A34373A3334204A61F9
:100CA0006E2020352032303136290A005649443A28
:100CB00020307846454544284572676F446F782058
:100CC000455A29205049443A20307831333037286A
:100CD0004572676F446F7820455A29205645523A2D
:100CE000203078303030310A00444553433A207484
:100CF0002E6D2E6B2E206B6579626F61726420669B
:100D000069726D7761726520666F72204572676FD8
:100D1000646F780A000A092D2056657273696F6E38
:100D2000202D0A000A6D6F7573653A206F66660A9A
:100D3000000A6D6F7573653A206F6E0A000A6B6565
:100D400079626F6172643A206F66660A000A6B65A9
:100D500079626F6172643A206F6E0A000A6D617485
:100D60007269783A206F66660A000A6D617472696A
:100D7000783A206F6E0A000A64656275673A206FE0
:100D80006E0A000A64656275673A206F66660A003B
:100D90000A0A626F6F746C6F616465722E2E2E206A
:100DA00000433E20006565636F6E6669673A0A001E
:100DB000536C656570204C454420746573740A005B
:100DC0000000000000000000000000010204060A0C
:100DD0000F17202C3A4A5D71879DB3C7DAE9F5FCFD
:100DE000FFFCF5E9DAC7B39D87715D4A3A2C2017FD
:100DF0000F0A0604020100000000000000000000CD
:100E000011241FBECFEFDAE0DEBFCDBF04B603FE74
:100E100024C08091F9019091FA01A091FB01B09159
:100E2000FC018730904BA740B04BB9F41092F90108
:100E30001092FA011092FB011092FC0114BE84B7CB
:100E4000877F84BF88E10FB6F8948093600010928A
:100E500060000FBEE0E0FFE3099511E0A0E0B1E023
:100E6000E0EAFBE502C005900D92AA33B107D9F77D
:100E700011E0AAE3B1E001C01D92A93FB107E1F77B
:100E80000E94900F0C94CE2D0C940000FF93EF93D2
:100E9000E0913A01F0913B01309709F00995EF910B
:100EA000FF910895FC018591803011F0EFDFFBCFB9
:100EB0000895FF27E0E230E247FF0CC0419597FF1D
:100EC00009C0EDE26095709580959095611D711D4A
:100ED000811D911D27FF02C0219530E350E2AA2712
:100EE000660F771F881F991FAA1FA41710F0A41B55
:100EF00063955A95A9F7AA3008F0A95FA05DAF9352
:100F0000F395611571058105910541F7ED3211F4F5
:100F1000EF93F395F21718F43F93F395FBCF8F916E
:100F2000B5DFFA95E1F70895E991F991859180305F
:100F300021F0853219F0AADFF9CF089520E0E89476
:100F400055915532C1F3503311F4689455915A3389
:100F500048F4505390F3220F022E220F220F200D3F
:100F6000250FF4CF0EF4219589919991533619F3F9
:100F7000533729F1533559F1BC0188279927E89453
:100F80005C3621F48991999168945591543639F4DD
:100F900046EF7EF077FF0DC08FEF9FEF0AC0553709
:100FA0004AE039F0583540E121F0523642E009F08C
:100FB0000895FF93EF937DDFEF91FF91B7CFFF93FC
:100FC000EF93FC0181918030B9F360DFFBCFFF9399
:100FD000EF9368DFF1CFDF93CF93CDB7DEB72596E0
:100FE000A3DFCF91DF91089561110BC0FC018281D5
:100FF000882321F085EE0E946D1603C085EE0E94C5
:10100000351780E090E0089508956091BC017091DB
:10101000BD018091BE019091BF010E94FD205698B4
:101020005E9825982D9826982E9827982F9881308D
:1010300019F0823021F00895259A2D9A0895269A64
:101040002E9A089585E098E0892B11F00E940508FA
:1010500080E090E0089556985E9825982D982698FF
:101060002E9827982F988FEF90E090938900809387
:10107000880090938B0080938A0090938D008093DA
:101080008C00259A2D9A2FEF80E792E02150804026
:101090009040E1F700C00000269A2E9A2FEF80E7DB
:1010A00092E0215080409040E1F700C00000279A74
:1010B0002F9A2FEF80E792E0215080409040E1F797
:1010C00000C0000025982D982FEF80E792E0215076
:1010D00080409040E1F700C0000026982E982FEF46
:1010E00080E792E0215080409040E1F700C000008E
:1010F00027982F9856985E9825982D9826982E9880
:1011000027982F98089589EA8093800089E080933A
:10111000810024982C983F988AB18F748AB96E9870
:10112000479A8BB1806B8BB9769A0E942B0884E02A
:1011300098E0892B11F00E94040880E090E0089567
:1011400080E28093000180913C0181110EC00E94D9
:10115000EF0881E080933C012FEF83ED90E3215075
:1011600080409040E1F700C0000080E40E94F50854
:101170008093000181112EC00E941F0980930001FD
:10118000811128C00E941F0980930001811122C093
:101190008FE30E941F098093000181111BC00E94F0
:1011A000170980E40E94F50880930001811112C0A4
:1011B0008CE00E941F098093000181110BC00E94E6
:1011C0001F0980930001811105C08FE30E941F0950
:1011D000809300010E9417098091000108951092E8
:1011E000B9008AE08093B800089594EA9093BC0017
:1011F0009091BC0097FFFCCF9091B900987F9830F8
:1012000021F0903111F081E008958093BB0084E8D3
:101210008093BC008091BC0087FFFCCF8091B90017
:10122000887F883111F0803471F780E0089584E977
:101230008093BC008091BC0084FDFCCF0895809316
:10124000BB0084E88093BC008091BC0087FFFCCF8A
:101250009091B900987F81E0983209F480E0089578
:1012600084E88093BC008091BC0087FFFCCF809114
:10127000BB00089580910001811115C080E40E9497
:10128000F5088093000181110CC082E10E941F09C2
:1012900080930001811105C08FEF0E941F09809388
:1012A00000010E94170984B1807F84B985B1807FD5
:1012B00085B98AB1837F8AB98BB1837F8BB93E9818
:1012C000469808950E94A008809300010E943A0960
:1012D00080B38C7080BB81B3836F81BBAEE3B1E020
:1012E000ECE4F1E08EE08E0F11921D928E13FCCF94
:1012F00083E898E0892B11F00C94830808959F925D
:10130000AF92BF92CF92DF92EF92FF920F931F9313
:10131000CF93DF93809100018823E1F080913D011C
:101320008F5F80933D01811115C082E493E00E949C
:1013300052070E94A00880930001882329F088E2C8
:1013400093E00E94520706C084E193E00E94520796
:101350000E942B080EE311E0C0E0D0E0BB24B39460
:1013600082E0A82ECC24C394D12C25E0E22E23E0E9
:10137000F22EC730D10500F580910001811164C0C3
:1013800080E40E94F50880930001811112C082E17F
:101390000E941F098093000181110BC0C6010C2E11
:1013A00001C0880F0A94EAF780950E941F09809374
:1013B00000010E94170948C0CA30A1F028F4C830C3
:1013C00059F0C93061F005C0CC3089F070F0CD30F3
:1013D00089F0209A289810C0219A29980DC0229A45
:1013E0002A980AC0239A2B9807C0529A01C0539A90
:1013F0005B9802C03E9A469890EA9A95F1F79FB1A1
:10140000799902C082E001C080E091709B25982B01
:101410007C9902C084E001C080E0892B7D9902C0E4
:1014200038E001C030E0832B7E9902C020E101C08A
:1014300020E0822B9FB19095991F9927991F929533
:10144000990F907E892B10C080910001811174C08A
:1014500080E40E94F50880930001882309F459C0B4
:10146000912C0E941709892DF8019081981739F164
:10147000808380910101882301F18091D70180FF51
:1014800004C08AE093E00E9452078091D70180FF58
:101490000CC0809101011F928F93FF92EF920E94E6
:1014A000EB070F900F900F900F908091D70180FF66
:1014B00004C083E093E00E945207A09201010E94C1
:1014C0003A0921960F5F1F4FCE30D10509F051CF59
:1014D000809101018823B1F081508093010188231C
:1014E00039F08FE99FE00197F1F700C000000AC0D2
:1014F000ACE4B1E0EEE3F1E0CF01825F91919D9326
:101500008E13FCCF82E298E0892BC1F00E94220862
:1015100015C083E10E941F09809300018111A0CFB3
:1015200081E40E94F50880930001811199CF0E9407
:101530003009982E909495CF80E096CF81E0DF918E
:10154000CF911F910F91FF90EF90DF90CF90BF90C0
:10155000AF909F900895E82FF0E0E45BFE4F80810C
:101560000895CF92DF92EF92FF920F931F93CF9344
:10157000DF938CEE92E00E9452078CE4E82E81E02B
:10158000F82EC0E0D0E097EEC92E92E0D92E0EEDF5
:1015900012E0DF93CF93DF92CF920E94EB0784EEAD
:1015A00092E00E945207F70181917F0190E00E9432
:1015B00063219F938F931F930F930E94EB078CEDF2
:1015C00092E00E94520721968DB79EB708960FB6FB
:1015D000F8949EBF0FBE8DBFCE30D105D1F6DF91FE
:1015E000CF911F910F91FF90EF90DF90CF900895D2
:1015F0008B3B910578F4883A910540F5853A910541
:10160000D0F48430910508F0B1C08130910509F41F
:10161000ADC06BC0803E910508F467C0883E91055F
:1016200008F4A4C09C01205F31092031310508F085
:101630005CC090650895853A910509F459C0863AD1
:10164000910509F058C082E890E40895883A910520
:1016500009F454C0893A910509F453C08A3A9105B6
:1016600009F452C08B3A910509F451C08C3A9105A6
:1016700009F450C08D3A910509F44FC0803B9105A3
:1016800009F44EC08E3A910509F44DC08F3A910588
:1016900009F44CC0813B910509F44BC0823B910594
:1016A00009F44AC0833B910509F449C0843B910584
:1016B00009F448C0853B910509F447C0863B910574
:1016C00009F446C0873B910509F445C0883B910564
:1016D00009F444C0893B910509F443C08A3B910554
:1016E00009F442C080E094E4089580E090E0089519
:1016F00081E890E4089583E890E4089582EE94E40C
:10170000089589EE94E408958AEE94E4089585EBB3
:1017100094E4089586EB94E4089587EB94E40895A7
:101720008CEC94E408958DEC94E4089583E895E4BA
:1017300008958AE895E4089582E995E4089584E996
:1017400095E4089581E296E4089583E296E408958D
:1017500084E296E4089585E296E4089586E296E4AC
:10176000089587E296E408958AE296E4089508953C
:1017700096E0799FF001112494E5899FE00DF11D19
:101780001124E60FF11DEE0FFF1FEC51FF4F859165
:1017900094910895880F991FFC01E05AF0408591BB
:1017A00094910895880F991FFC01E052FF4F859195
:1017B0009491089526E0729FF001112444E5849FDE
:1017C000E00DF11D1124E60FF11DEE0FFF1FEC518E
:1017D000FF4F859194919C013A9521154FE1340773
:1017E00008F41EC13F512115304120F49F700E9422
:1017F000D20B08959C0130532115304118F49927DC
:10180000906C0895811520E5920769F40E94BD1A35
:101810004FEF84E39CE0415080409040E1F700C0EE
:1018200000000C941F22813020E5920751F48CE5D2
:1018300093E00E9452078091D70181608093D70185
:1018400008959C0130552115304108F051C0292FD1
:1018500033272F70332721303105D9F4AC01437081
:10186000552702C0220F331F4A95E2F73C68AC01AE
:1018700064E0440F551F6A95E1F744275370242B09
:10188000352B73E0880F991F7A95E1F780769927B9
:101890001DC02230310529F4982F8827816F906A66
:1018A000089523303105A9F4AC014370552721E098
:1018B00030E002C0220F331F4A95E2F73C6843E054
:1018C000880F991F4A95E1F7807E9770822B932BA2
:1018D000089524303105E1F4AC014370552721E02F
:1018E00030E002C0220F331F4A95E2F73A68E7CF93
:1018F0009C0130572115304118F49F709062089573
:101900009C0130582115304118F49F70906A089559
:10191000803E9105E0F4803C910558F581339105B6
:1019200009F46FC048F48932910509F463C08A3222
:10193000910509F46DC072C089339105E9F08238D0
:101940009105D1F08533910509F44DC067C0833E00
:10195000910581F138F4803E9105B9F0823E910500
:10196000D9F05CC0863E910561F1873E9105A1F1F9
:1019700055C00E94CA0B08952091EA0120FD02C0C3
:1019800021FF4CC080EE90E049C08091EA0180FFC9
:10199000F9CF89E390E042C08091EA0182FF0EC056
:1019A0008091EA0184FF03C080E090E037C083EEBD
:1019B00090E034C08091EA0182FFF2CF82EE90E0A5
:1019C0002DC08091EA0183FF0BC08091EA0184FD64
:1019D000EBCF87EE90E022C08091EA0183FFF5CF44
:1019E00086EE90E01BC08091EA0185FF07C089E286
:1019F00090E014C08091EA0185FFF9CF85E390E083
:101A00000DC08091EA0186FF07C08AE290E006C01F
:101A10008091EA0186FFF9CF81E390E00E94F80A05
:101A20000895089580916D0108959FB7F8941092DC
:101A30005C019FBF9091F001943009F057C09091E4
:101A4000E9009F703091EC00232F217030FD20E8D9
:101A5000922B24E02093E9002091EB0020FF43C06B
:101A60002091EE0027FF3FC020915A01222321F050
:101A70002091E80025FF37C010925A0126E03091EE
:101A8000E80035FD15C03091F001343061F530913A
:101A9000EB0035FD28C0215021F481E080935A01EC
:101AA00022C0EFE9FFE03197F1F700C00000E7CF77
:101AB0008093F1008091E80085FD0AC08091E800E4
:101AC00080FFFCCF8091E8008E778093E80006C00D
:101AD0008FB7F89421E020935C018FBF9F709093A3
:101AE000E90080E008959F709093E9008FEF0895DA
:101AF000CF93DF9300D01F92CDB7DEB79C018091CA
:101B0000F001843019F593E099833B832A83909305
:101B1000E9008FEF9091E800815095FD06C095EDAA
:101B20009A95F1F700008111F5CF8091E80085FFCB
:101B30000DC040E050E063E070E0CE0101960E94ED
:101B400048108091E8008E778093E8000F900F9006
:101B50000F90DF91CF910895CF93DF9300D01F9224
:101B6000CDB7DEB72091F001243021F522E02983A2
:101B70009B838A8383E08093E9008FEF9091E80054
:101B8000815095FD06C095ED9A95F1F70000811101
:101B9000F5CF8091E80085FF0DC040E050E063E0A4
:101BA00070E0CE0101960E9448108091E8008E7787
:101BB0008093E8000F900F900F90DF91CF910895E0
:101BC0002091F0012430F1F422E02093E9002FEF7E
:101BD0003091E800215035FD06C035ED3A95F1F71A
:101BE00000002111F5CF2091E80025FF0BC040E057
:101BF00050E065E070E00E9448108091E8008E7728
:101C00008093E8000895CF93DF932091F001243072
:101C100009F048C0EC0180910C018823E1F080912B
:101C20000D018823C1F085E08093E9008FEF90914A
:101C3000E800815095FD06C095E19A95F1F7000006
:101C40008111F5CF8091E80085FF2CC040E050E085
:101C500060E170E017C081E08093E9008FEF909120
:101C6000E800815095FD06C095ED9A95F1F70000CA
:101C70008111F5CF8091E80085FF14C040E050E06D
:101C800068E070E0CE010E9448108091E8008E77F5
:101C90008093E80080E1FE01ADE5B1E001900D9296
:101CA0008A95E1F7DF91CF91089583E993E00E944F
:101CB00052078091EF01811109C00E94DD110E943D
:101CC0003A128091E20084608093E20008958FE8E8
:101CD00093E00E9452071092EF0108958BE893E081
:101CE0000C94520787E893E00E9452070C94EF2B64
:101CF00083E893E00E9452070E94B9210E94F52BCD
:101D00000E94DF140C94110D20915B012F5F822F34
:101D100062E30E94632D992319F020935B010895DB
:101D200010925B0180915C01882371F18091F00138
:101D3000843041F58091E9008F702091EC00922F62
:101D4000917020FD90E8892B94E09093E9009091A8
:101D5000EB0090FF14C09091EE0097FF10C090919F
:101D6000E80095FF03C01092F100F9CF9091E800D0
:101D700090FF05C09091E8009E779093E8008F70E7
:101D80008093E90010925C01089542E061EC81E0EB
:101D90000E94571142E061EC82E00E94571142E03C
:101DA00061EC83E00E94571142E261EC84E00E9402
:101DB000571142E161EC85E00C9457118091F201DA
:101DC000833009F455C030F4813071F0823009F469
:101DD0008EC008958A3009F47AC08B3009F460C04F
:101DE000893009F09CC020C08091F101813A09F04E
:101DF00096C08091E800877F8093E8008091F5018C
:101E00009091F601892B21F460E18DE591E003C00A
:101E100060E080E090E070E00E9493108091E80024
:101E20008B778093E80008958091F101813209F069
:101E300076C08091F5019091F601009719F0049712
:101E400009F06DC08091E800877F8093E800809161
:101E5000E80082FD05C08091F0018111F8CF5FC0DC
:101E60008091F10080936D018091E8008B7753C0E1
:101E70008091F101813A09F052C08091F501909171
:101E8000F601892B09F04BC08091E800877F809391
:101E9000E8008091E80080FFFCCF80910C0136C003
:101EA0008091F1018132D9F58091F5019091F6018F
:101EB000892BA9F58091E800877F8093E8000E9434
:101EC0008C118091F30180930C010C94BD1A8091C8
:101ED000F101813221F58091E800877F8093E8004D
:101EE0000E948C118091F40180936E01089580917D
:101EF000F101813AA1F48091E800877F8093E800A6
:101F00008091E80080FFFCCF80916E018093F1000A
:101F10008091E8008E778093E8000C948C110895EE
:101F200084B7877F84BF88E10FB6F8948093600000
:101F3000109260000FBE90E080E80FB6F894809396
:101F40006100909361000FBE0E946C150E94DD112C
:101F50000E943A128091E20084608093E20085E161
:101F60009DE00E94F82078940E94BF140E946E1594
:101F700082E091E00E94DA140E94DD2B82E793E078
:101F80000E9452078091F001853089F48EE693E03B
:101F90000E9452070E947D218091EE01882391F3D7
:101FA0000E94A521882371F30E943210EBCF0E947A
:101FB0009C15E8CF292F332723303105C9F064F46D
:101FC0002130310581F02230310509F043C08DE820
:101FD00090E02BEC33E042C021323105F1F02232A7
:101FE000310541F137C082E190E028E534E036C0A8
:101FF00099278130910541F08230910541F0892B7C
:1020000049F5E7ECF3E005C0EFEAF3E002C0E7E9E9
:10201000F3E0849190E09F0121C06530D8F4E62F71
:10202000F0E0EE0FFF1FEB5DFE4F2081318189E074
:1020300090E014C0653070F470E0FB01EE0FFF1FFC
:10204000E55EFE4F20813181FB01EA5EFE4F80811B
:1020500090E004C080E090E020E030E0FA013183BD
:102060002083089580E189BD82E189BD09B400FE25
:10207000FDCF8091D8008F7D8093D8008091E000C3
:1020800082608093E0008091E00081FDFCCF0895A4
:10209000CF92DF92EF92FF920F931F93CF93DF9334
:1020A000EC018B016A010E94AB11811133C0C11494
:1020B000D10439F0F60180819181081B190BC80FFA
:1020C000D91FE12CF12C0115110519F18091E800BF
:1020D00085FD16C08091E8008E778093E800C114DA
:1020E000D10449F0F60180819181E80EF91EF18258
:1020F000E08285E00FC00E94AB11882321F30AC063
:1021000089918093F10001501109FFEFEF1AFF0A46
:10211000DACF80E0DF91CF911F910F91FF90EF9088
:10212000DF90CF9008952091F7013091F8012617A4
:10213000370748F06115710539F42091E8002E77D2
:102140002093E80001C0B90140E061157105A9F1D3
:102150002091F001222309F443C0253009F442C044
:102160002091E80023FD40C02091E80022FD32C00C
:102170002091E80020FFE9CF4091F3002091F20088
:1021800030E0342BFC01CF016115710559F0283086
:10219000310540F481918093F100615071092F5F06
:1021A0003F4FF1CF41E02830310509F040E0209168
:1021B000E8002E772093E800C8CF4111C9CF0AC0AC
:1021C0008091F001882361F0853061F08091E80012
:1021D00083FD0AC08091E80082FFF2CF80E008957D
:1021E00082E0089583E0089581E008952091F70149
:1021F0003091F8012617370748F06115710539F459
:102200002091E8002E772093E80001C0B901FC017D
:1022100020E06115710591F18091F001882309F4A6
:1022200040C0853009F43FC08091E80083FD3DC087
:102230008091E80082FD2FC08091E80080FFE9CF07
:102240002091F3008091F20090E0922B61157105CE
:1022500059F08830910540F424912093F100319693
:10226000615071090196F2CF21E0089709F020E052
:102270008091E8008E778093E800CBCF2111CCCFFE
:102280000AC08091F001882361F0853061F080916F
:10229000E80083FD0AC08091E80082FFF2CF80E071
:1022A000089582E0089583E0089581E00895982FCD
:1022B000973058F59093E900981739F07091EC0039
:1022C0002091ED005091F00003C0242F762F50E0B4
:1022D00021FF19C03091EB003E7F3093EB0030912D
:1022E000ED003D7F3093ED003091EB003160309395
:1022F000EB007093EC002093ED005093F0002091E0
:10230000EE0027FF07C09F5FD3CF8F708093E90057
:1023100081E0089580E008958091F10187FF11C068
:102320008091E80082FD05C08091F0018111F8CF15
:1023300011C08091E8008B770BC08091F001882359
:1023400049F08091E80080FFF8CF8091E8008E7717
:102350008093E80008952091E4003091E50095E62F
:102360004091EC00842F817040FF22C08091E800F2
:1023700080FD1CC08091F001882391F0853091F0A0
:102380008091EB0085FD10C04091E4005091E50084
:102390004217530729F39A01915011F784E00895E9
:1023A00082E0089583E0089581E0089580E0089533
:1023B0004091E80042FFDECF08950E944B120E9438
:1023C0005312E0EEF0E0808181608083E8EDF0E080
:1023D00080818F77808319BCA7EDB0E08C918E7FD0
:1023E0008C9380818F7E80831092EF0108950F93EC
:1023F0001F93CF93DF930E944B120E945312C8ED9C
:10240000D0E088818F7788838881806888838881FD
:102410008F7D888319BC1092F0011092EC0110920C
:10242000EE011092ED0100EE10E0F80180818B7F4B
:10243000808388818160888342E060E080E00E9440
:102440005711E1EEF0E080818E7F8083E2EEF0E0D4
:10245000808181608083808188608083F8018081B1
:102460008E7F8083888180618883DF91CF911F91E7
:102470000F910895E8EDF0E080818F7E8083E7ED95
:10248000F0E080818160808384E082BF81E080937E
:10249000EF010C94F711E8EDF0E080818E7F8083EE
:1024A0001092E20008951092DA001092E10008956F
:1024B0001F920F920FB60F9211242F933F934F93B9
:1024C0005F936F937F938F939F93AF93BF93EF939C
:1024D000FF938091E10082FF0BC08091E20082FFB8
:1024E00007C08091E1008B7F8093E1000E94840E01
:1024F0008091DA0080FF1FC08091D80080FF1BC050
:102500008091DA008E7F8093DA008091D90080FF7D
:102510000DC080E189BD82E189BD09B400FEFDCF17
:1025200081E08093F0010E94550E05C019BC109205
:10253000F0010E94670E8091E10080FF19C0809138
:10254000E20080FF15C08091E2008E7F8093E20060
:102550008091E20080618093E2008091D8008062E7
:102560008093D80019BC85E08093F0010E94720E20
:102570008091E10084FF30C08091E20084FF2CC094
:1025800080E189BD82E189BD09B400FEFDCF809163
:10259000D8008F7D8093D8008091E1008F7E80935A
:1025A000E1008091E2008F7E8093E2008091E20062
:1025B00081608093E2008091EC01882311F084E037
:1025C00007C08091E30087FD02C081E001C083E085
:1025D0008093F0010E94780E8091E10083FF29C072
:1025E0008091E20083FF25C08091E100877F809386
:1025F000E10082E08093F0011092EC018091E10013
:102600008E7F8093E1008091E2008E7F8093E200D4
:102610008091E20080618093E20042E060E080E02F
:102620000E9457118091F00088608093F0000E9412
:102630006E0EFF91EF91BF91AF919F918F917F911E
:102640006F915F914F913F912F910F900FBE0F901F
:102650001F9018951F920F920FB60F9211242F936F
:102660003F934F935F936F937F938F939F93AF931A
:10267000BF93CF93DF93EF93FF93C091E900CF70A7
:102680008091EC00D82FD17080FDD0E81092E90045
:102690008091F000877F8093F00078940E946E1301
:1026A0001092E9008091F00088608093F000CD2BBB
:1026B000CF70C093E900FF91EF91DF91CF91BF916F
:1026C000AF919F918F917F916F915F914F913F91CA
:1026D0002F910F900FBE0F901F9018951F93CF93BF
:1026E000DF93CDB7DEB7AA970FB6F894DEBF0FBE63
:1026F000CDBFE1EFF1E088E08E0F9091F100919372
:102700008E13FBCF0E94DE0E8091E80083FF1FC175
:102710008091F1019091F201492F50E04A3051052A
:1027200008F015C1FA01EA5AFF4F0C94832D803846
:1027300081F0823809F00BC18091F5018F70809390
:10274000E9008091EB0085FB882780F91092E90071
:1027500006C08091ED019091EE01911182609091FF
:10276000E800977F9093E8008093F1001092F100C9
:10277000C8C0282F2D7F09F0EAC0882319F08230C5
:1027800061F0E5C08091F301813009F0E0C0933041
:1027900009F080E08093EE012BC08091F30181115C
:1027A00027C08091F5018F7009F4D1C08093E900B2
:1027B0002091EB0020FF1CC0933021F48091EB00AE
:1027C000806214C09091EB0090619093EB0021E047
:1027D00030E0A90102C0440F551F8A95E2F74093EB
:1027E000EA001092EA008091EB0088608093EB0091
:1027F0001092E9008091E800877F86C08111A7C010
:102800001091F3011F778091E3008078812B8093F2
:10281000E3008091E800877F8093E8000E948C119C
:102820008091E80080FFFCCF8091E3008068809376
:10283000E300111102C082E001C083E08093F00147
:1028400086C08058823008F082C08091F301909158
:10285000F4018C3D53E0950779F583E08A838AE2A1
:1028600089834FB7F894DE01139620E03EE051E2F1
:10287000E32FF0E050935700E49120FF03C0E2956E
:10288000EF703F5FEF708E2F90E0EA3010F0C79648
:1028900001C0C0968D939D932F5F243149F74FBFA0
:1028A0008091E800877F8093E8006AE270E0CE01C3
:1028B00001960E94931014C0AE014F5F5F4F60916C
:1028C000F5010E94DA0FBC01892B09F440C09091F8
:1028D000E800977F9093E80089819A810E94F61022
:1028E0008091E8008B778093E80031C0803879F5DB
:1028F0008091E800877F8093E8008091EC018093CD
:10290000F1008091E8008E778093E8000E948C119E
:102910001EC081111CC09091F3019230C0F48091CF
:10292000E800877F8093E8009093EC010E948C116F
:102930008091EC01811106C08091E30087FD02C007
:1029400081E001C084E08093F0010E94C50E809177
:10295000E80083FF0AC08091E800877F8093E80049
:102960008091EB0080628093EB00AA960FB6F894FA
:10297000DEBF0FBECDBFDF91CF911F910895CF93E2
:102980008091F0018823A1F0C091E900CF7090916F
:10299000EC00892F817090FD80E8C82B1092E9002F
:1029A0008091E80083FD0E946E13CF70C093E90010
:1029B000CF91089590937401809373010895E091ED
:1029C0007301F0917401309721F00190F081E02DB6
:1029D000099480E00895EF92FF920F931F93CF9395
:1029E000DF93E0917301F09174013097B1F18C01A4
:1029F0000280F381E02D09958091D70182FF2DC0DF
:102A000080FF04C08DE895E00E945207E80110E1C4
:102A100087E8E82E85E0F82E8091D70180FF0BC073
:102A200088811F928F93FF92EF920E94EB070F9085
:102A30000F900F900F90115021961111EDCF8091B2
:102A4000D70180FF0AC085E895E0DF91CF911F9103
:102A50000F91FF90EF900C945207DF91CF911F914F
:102A60000F91FF90EF900895E0917301F091740140
:102A7000309721F00480F581E02D0994089520918C
:102A80007101309172018217930771F09093720176
:102A900080937101E0917301F0917401309721F0FE
:102AA0000680F781E02D0994089520916F013091FF
:102AB00070018217930771F09093700180936F01FA
:102AC000E0917301F0917401309721F00084F18559
:102AD000E02D0994089508950C946B150E94BB2174
:102AE0000E9462090C948122CF93C82F8091D70154
:102AF00082FF1EC080FF04C086EA95E00E94520754
:102B00008091D70180FF0CC01F92CF9381EA95E09E
:102B10009F938F930E94EB070F900F900F900F9051
:102B20008091D70180FF04C08FE995E00E94520791
:102B30008C2FCF910C94110DCF92DF92EF92FF92D8
:102B40000F931F93CF93DF93CDB7DEB72B970FB6BD
:102B5000F894DEBF0FBECDBF0E947F0986E7C82E66
:102B600081E0D82E00E010E0E02E802F0E94AB0A1A
:102B7000F60141916F01F42EF826B1F40F5F1F4F5B
:102B80000E30110589F78FEF89838A831B820E949B
:102B9000C4218160782F9D838C8349815A816B8108
:102BA0008D810E943F1640C09091D70191FF04C0D3
:102BB0008B870E94B10A8B8520E030E04F2D50E0DA
:102BC000922FBA01022E02C0759567950A94E2F71A
:102BD00060FF24C02E83EF8221E030E0690102C053
:102BE000CC0CDD1C9A95E2F790E08C219D21892B7D
:102BF00009F420E028870E94C4218160782F9A87F9
:102C000089874E815F8168858A850E943F16F80119
:102C1000EA58FE4F8081C826C08206C02F5F3F4F12
:102C20002630310569F6AACF0E94F2251091750170
:102C30000E94DF141817A1F00E94DF148093750121
:102C40002B960FB6F894DEBF0FBECDBFDF91CF91AC
:102C50001F910F91FF90EF90DF90CF900C9474151F
:102C60002B960FB6F894DEBF0FBECDBFDF91CF918C
:102C70001F910F91FF90EF90DF90CF900895CF9329
:102C8000DF93CDB7DEB72B970FB6F894DEBF0FBE3C
:102C9000CDBF4F83588769877A878B87DE0111966E
:102CA00086E0FD0111928A95E9F785E0FE013796ED
:102CB00001900D928A95E1F749815A816B817C815F
:102CC0008D819E810E94571D2B960FB6F894DEBF12
:102CD0000FBECDBFDF91CF910895CF93882309F424
:102CE000C2C0C82F823859F40E94DF1481FDBBC0D6
:102CF00089E30E94F31F0E94D22089E30CC083382D
:102D000079F40E94DF1480FDAEC083E50E94F31FBA
:102D10000E94D22083E50E944620CF910C94D220BD
:102D2000843859F40E94DF1482FD9DC087E40E941C
:102D3000F31F0E94D22087E4EECF8CEF8C0F813AF4
:102D400048F48C2F0E94852A81118DC08C2F0E94FF
:102D5000F31FE3CF80E28C0F883048F4C77081E026
:102D600001C0880FCA95EAF70E949B20D6CF8BE559
:102D70008C0F833078F4C53A29F0C63A31F083E8F5
:102D800090E005C081E890E002C082E890E0CF9139
:102D90000C943F1588E58C0F833108F064C0C83A65
:102DA00039F1C93A41F1CA3A49F1CB3A51F1CC3A39
:102DB00059F1CD3A61F1C03B69F1CE3A71F1CF3AA8
:102DC00079F1C13B81F1C23B89F1C33B91F1C43B35
:102DD00099F1C53BA1F1C63BA9F1C73BB1F1C83B95
:102DE000B9F1C93BC1F1CA3BC9F180E090E038C0FC
:102DF00082EE90E035C089EE90E032C08AEE90E03D
:102E00002FC085EB90E02CC086EB90E029C087EBCB
:102E100090E026C08CEC90E023C08DEC90E020C0C8
:102E200083E891E01DC08AE891E01AC082E991E050
:102E300017C084E991E014C081E292E011C083E2FE
:102E400092E00EC084E292E00BC085E292E008C0FE
:102E500086E292E005C087E292E002C08AE292E058
:102E6000CF910C945515CF910895882309F44BC048
:102E7000823859F40E94DF1481FF45C089E30E9423
:102E8000F31F0E94D22089E30CC0833871F40E94A2
:102E9000DF1480FF38C083E50E94F31F0E94D22018
:102EA00083E50E9446200C94D220843859F40E9475
:102EB000DF1482FF28C087E40E94F31F0E94D22003
:102EC00087E4EFCF9CEF980F913A58F390E2980F78
:102ED000983050F4877091E001C0990F8A95EAF715
:102EE000892F0E94A120DFCF9BE5980F933020F41B
:102EF00080E090E00C943F15885A833120F480E004
:102F000090E00C9455150895882321F00E949B2091
:102F10000C94D2200895882321F00E94A1200C94C3
:102F2000D2200895BF92CF92DF92EF92FF920F933B
:102F30001F93CF93DF9300D000D000D0CDB7DEB782
:102F400025E0FC01DE01119601900D922A95E1F732
:102F5000FC01408131810281258122952F7063819E
:102F60007481672B09F4E7C23F3F19F44F3F09F41E
:102F7000E2C27C0149833A8389819A812E830E942F
:102F8000B21F182FB92E0E94B11F0E94781EEB2D80
:102F9000E295EF70F0E0E05AFF4F2E810C94832D04
:102FA0008B2D807F9B2D9F70F92E882319F0F29432
:102FB00080EFF822002349F0FF2009F469C28F2D29
:102FC0000E94AB200E94D22063C2812F0E9435173D
:102FD000FF2009F4B0C28F2D0E94B12026960FB6B3
:102FE000F894DEBF0FBECDBFDF91CF911F910F913F
:102FF000FF90EF90DF90CF90BF900C94D2203B2DAC
:10300000307F8B2D8F70303211F08295807F1123AD
:1030100019F0113021F12DC00023B9F0222309F459
:10302000A1C1213009F09EC126960FB6F894DEBFEB
:103030000FBECDBFDF91CF911F910F91FF90EF9009
:10304000DF90CF90BF900C94BB20222319F0213049
:1030500009F471C28E830E94BE208E8197C1002325
:1030600021F0263008F067C27DC1253008F063C228
:103070008DC1002321F0222309F474C109C2222347
:1030800009F484C11AC22B2D26952695237030E0B1
:103090002115310521F021303105D1F04CC200233A
:1030A00021F0812F9B2D937002C080E090E0269646
:1030B0000FB6F894DEBF0FBECDBFDF91CF911F9149
:1030C0000F91FF90EF90DF90CF90BF900C943F1541
:1030D000002321F0812F9B2D937002C080E090E0AF
:1030E00026960FB6F894DEBF0FBECDBFDF91CF910D
:1030F0001F910F91FF90EF90DF90CF90BF900C94B5
:103100005515812F002319F00E94782402C00E94D7
:10311000E02426960FB6F894DEBF0FBECDBFDF9138
:10312000CF911F910F91FF90EF90DF90CF90BF90C4
:103130000C9465258B2D837009F07BC00111FBC1B8
:10314000812F829586958770880F880F912F9F70A9
:10315000C92ED12CE12CF12C082E04C0CC0CDD1C86
:10316000EE1CFF1C0A94D2F714FF12C04FE050E08F
:1031700060E070E004C0440F551F661F771F8A95FA
:10318000D2F7CB01BA01609570958095909503C0F8
:1031900060E070E0CB012B2D269526952370422F01
:1031A00050E042305105D9F04330510569F16C29A6
:1031B0007D298E299F294130510551F126960FB660
:1031C000F894DEBF0FBECDBFDF91CF911F910F915D
:1031D000FF90EF90DF90CF90BF900C949F1E6C29D2
:1031E0007D298E299F2926960FB6F894DEBF0FBE43
:1031F000CDBFDF91CF911F910F91FF90EF90DF90A6
:10320000CF90BF900C94BB1E0E949F1EC701B601B9
:1032100026960FB6F894DEBF0FBECDBFDF91CF91DB
:103220001F910F91FF90EF90DF90CF90BF900C9483
:10323000831E002319F08B2D817001C08695882391
:1032400009F479C1812F829586958770880F880F40
:10325000912F9F70C92ED12CE12CF12C082E04C087
:10326000CC0CDD1CEE1CFF1C0A94D2F714FF12C01C
:103270004FE050E060E070E004C0440F551F661F4F
:10328000771F8A95D2F7CB01BA016095709580952A
:10329000909503C060E070E0CB012B2D269526951C
:1032A0002370422F50E042305105D9F04330510590
:1032B00069F16C297D298E299F294130510551F1F1
:1032C00026960FB6F894DEBF0FBECDBFDF91CF912B
:1032D0001F910F91FF90EF90DF90CF90BF900C94D3
:1032E000791F6C297D298E299F2926960FB6F8947F
:1032F000DEBF0FBECDBFDF91CF911F910F91FF9029
:10330000EF90DF90CF90BF900C94951F0E94791F93
:10331000C701B60126960FB6F894DEBF0FBECDBF2B
:10332000DF91CF911F910F91FF90EF90DF90CF90A1
:10333000BF900C945D1F103FD1F118F4103E50F473
:10334000A2C0123F09F464C008F44DC0133F09F451
:1033500074C099C01F708B2D8F710023A1F00E9443
:10336000F61E812F26960FB6F894DEBF0FBECDBF96
:10337000DF91CF911F910F91FF90EF90DF90CF9051
:10338000BF900C9484170E94171F812F26960FB6AA
:10339000F894DEBF0FBECDBFDF91CF911F910F918B
:1033A000FF90EF90DF90CF90BF900C948B1700238D
:1033B000B1F0253008F0BFC08B2D8F7126960FB667
:1033C000F894DEBF0FBECDBFDF91CF911F910F915B
:1033D000FF90EF90DF90CF90BF900C943C1F263071
:1033E00008F0A9C0E9CF0023A9F08B2D8F71269694
:1033F0000FB6F894DEBF0FBECDBFDF91CF911F9106
:103400000F91FF90EF90DF90CF90BF900C94F61E3D
:10341000002359F38B2D8F7126960FB6F894DEBFDB
:103420000FBECDBFDF91CF911F910F91FF90EF9015
:10343000DF90CF90BF900C94171F002399F08B2D35
:103440008F7126960FB6F894DEBF0FBECDBFDF9109
:10345000CF911F910F91FF90EF90DF90CF90BF9091
:103460000C94E11E26960FB6F894DEBF0FBECDBFBA
:10347000DF91CF911F910F91FF90EF90DF90CF9050
:10348000BF900C94D71E0023A9F0222309F4ADCFDE
:10349000812F26960FB6F894DEBF0FBECDBFDF9109
:1034A000CF911F910F91FF90EF90DF90CF90BF9041
:1034B0000C946D16222309F4ADCF812F26960FB6FA
:1034C000F894DEBF0FBECDBFDF91CF911F910F915A
:1034D000FF90EF90DF90CF90BF900C9435174B2D5D
:1034E0004F70612FC7010E94F40726960FB6F8941B
:1034F000DEBF0FBECDBFDF91CF911F910F91FF9027
:10350000EF90DF90CF90BF900C94FB1D4B2D4F7030
:10351000612FC70126960FB6F894DEBF0FBECDBF50
:10352000DF91CF911F910F91FF90EF90DF90CF909F
:10353000BF900C94B70B26960FB6F894DEBF0FBE63
:10354000CDBFDF91CF911F910F91FF90EF90DF9052
:10355000CF90BF9008950E94B8200E948D200E94B5
:10356000D2200E9498260E94652580E090E00E946B
:103570003F1580E090E00C9455150E94A8200C9413
:10358000AB1A0E94B21F292F22952F7030E02C30E9
:1035900031054CF42A3031056CF4225031092230C7
:1035A000310588F407C02C30310549F02F30310542
:1035B00031F009C0803E48F0803F29F406C093FBFB
:1035C000882780F9089580E0089581E00895CF93D9
:1035D000DF9300D000D01F92CDB7DEB70F900F90D1
:1035E0000F900F900F90DF91CF910895CF93DF93BD
:1035F00000D000D000D0CDB7DEB726960FB6F89435
:10360000DEBF0FBECDBFDF91CF9108951F93CF9343
:10361000DF93C091840116E080918501C81799F06D
:10362000D0E01C9FF0011D9FF00D1124EA57FE4FC2
:103630004081518162817381848195810E94F61A53
:103640002196C770E9CFDF91CF911F9108954091E6
:10365000B6015091B7016091B8017091B9018091A4
:10366000BA019091BB010C94F61A8091BB0182952E
:103670008F7009F054C08091B801882309F44FC0BD
:1036800080918401A09185016091B6017091B7018C
:103690004091B9015091BA01B6E08A1709F43FC0D0
:1036A00090E041155105C1F17F3F11F46F3FA1F149
:1036B000B89FF001B99FF00D1124EA57FE4F218108
:1036C00072132AC02081621327C02281211124C0D5
:1036D000238134812417350710F421503109241B2C
:1036E000350B283C3105C0F42091BB012F702061BF
:1036F0002093BB0126E0289FF001299FF00D1124A3
:10370000E557FE4F80818F708061808386EB91E06A
:103710000E9492170C94061B01968770BECF0895E5
:10372000CF92DF92EF92FF920F931F93CF93DF938D
:10373000CDB7DEB762970FB6F894DEBF0FBECDBF30
:103740008C0185E0F801DE011D9601900D928A95AD
:10375000E1F7D8014C9111965C91119712966C91FA
:1037600012971396CD90DC9014973091B60170911A
:10377000B7018091B9019091BA01009709F46BC12A
:103780007F3F19F43F3F09F466C1E090B801EE2095
:1037900009F4C0C02091BB01C816D90628F0F60173
:1037A000E81BF90BCF0104C0809590958C0D9D1DF1
:1037B000FF24F394883C910578F0F12C207F09F0E8
:1037C000C6C07C2DD98AC88A89890E94E71A86EBEF
:1037D00091E00E949217B1C0822F807F09F046C00D
:1037E000751314C0341312C0611110C02F70206102
:1037F0002093BB010E94271B86EB91E00E94921749
:103800008091BB01D80115968C932EC0CD2819F15B
:103810005F3F11F44F3FF9F0F62E61111CC080910B
:1038200084012091850136E0821709F45AC090E0A6
:10383000389FF001399FF00D1124EA57FE4F718136
:10384000571306C07081471303C07281711103C002
:1038500001968770E9CFF62E662309F418C180918E
:10386000BB0181608093BB01F12C11C1751308C0AD
:10387000341306C0611104C08091BB01D801C3C0DC
:103880004D875E878D859E856A8B0E94C11A6A89E5
:103890008823E1F16623D1F12091BB01822F82952B
:1038A0008F7090E0029774F08091B6019091B7010B
:1038B00098878F831986DB86CA862C87CE01079668
:1038C0000E94921786E0F801A6EBB1E001900D92FC
:1038D0008A95E1F70E94351B0E94271BFF24F39471
:1038E000D6C04D875E878D859E850E94B21F292F89
:1038F00022952F7030E0223031050CF0BCC09F7053
:1039000009F0B6C0805E883008F4C1C0C8010E94CA
:103910009217E4CFC816D90608F453C0F601E81B85
:10392000F90BCF01883C910508F450C0F12C7C2D97
:10393000D98AC88A89890E94E71AE6EBF1E086E015
:10394000DF011D928A95E9F70E94271BA0C075131D
:1039500014C0341312C0611110C08091BB01F80172
:103960008583C8010E94921786E0E6EBF1E0DF0153
:103970001D928A95E9F7FE2C8AC04D875E878D855A
:103980009E856A8B0E94C11A6A89882309F4BECF7A
:10399000662309F4BBCF2091BB01822F82958F70E3
:1039A00090E002970CF48ECF8091B6019091B70110
:1039B0009A8389831B82DD82CC822E83CE0101967D
:1039C0007FCF809590958C0D9D1DACCFF62E6623F4
:1039D00009F49CCF75132EC034132CC02091BB0169
:1039E00020FD1FC0822F82958F70D9F0D8011596C7
:1039F0002C9315978F3049F08F5F982F9295907F79
:103A0000822F8F70892B15968C93C8010E94921774
:103A100086E0F801A6EBB1E001900D928A95E1F7FE
:103A200093CF86E0F801A6EBB1E001900D928A9564
:103A3000E1F72DC04D875E878D859E850E94C11A56
:103A4000811140CF8091BB0181608093BB01C8018F
:103A50000E9492171CC0662309F458CF4D875E87D9
:103A60008D859E850E94C11A882309F44FCF2ACFE5
:103A7000811148CF0CC0243031050CF047CF9F7026
:103A800009F440CFF8019581907F09F03BCF8F2D4D
:103A900062960FB6F894DEBF0FBECDBFDF91CF9117
:103AA0001F910F91FF90EF90DF90CF9008951F939B
:103AB000CF93DF93CDB7DEB72C970FB6F894DEBF68
:103AC0000FBECDBF4F83588769877A878B879C87C6
:103AD000CE0107960E94901B882369F08F819885FC
:103AE0002A853B85232BF1F19F3F09F063C08F3F6F
:103AF00009F060C037C086E0FE013796DE011196FE
:103B000001900D928A95E1F76F817885EA85FB85B2
:103B1000309741F17F3F11F46F3F21F120918501F2
:103B200030E0C9010196877099274091840150E0E7
:103B30008417950709F447C069837A83FD83EC8372
:103B400096E0929FD001939FB00D1124AA57BE4FCB
:103B5000FE01319601900D929A95E1F780938501CF
:103B60000E94061B16E080918401909185018917BF
:103B7000C1F1189FC00111248A579E4F0E94901BCB
:103B8000882379F1E09184011E9FF0011124EA5706
:103B9000FE4F4081518162817381848195810E94B1
:103BA000F61A8091840190E001968770992780939E
:103BB0008401D9CF4F81588569857A858B859C850D
:103BC0000E94F61ACFCF0E94BD1A10928501109262
:103BD0008401E6EBF1E086E0DF011D928A95E9F7CA
:103BE000C1CF2C960FB6F894DEBF0FBECDBFDF91CC
:103BF000CF911F910895EF92FF920F931F93CF9350
:103C0000DF938C01892B09F46CC0F12CEE24E39432
:103C1000E8012196F8018491843740F4843008F05B
:103C200051C0813081F0823019F15BC0853709F4D1
:103C300044C0A8F19CE7980F903708F052C08F77E6
:103C40000E94351741C00E5F1F4FFE01C49180E2F4
:103C50008C0F883048F4C7708E2D01C0880FCA952C
:103C6000EAF70E94AB2014C08C2F0E946D162DC065
:103C70000E5F1F4FFE01C49180E28C0F883058F414
:103C8000C7708E2D01C0880FCA95EAF70E94B12037
:103C90000E94D2201AC08C2F0E94351716C00E5FCA
:103CA0001F4FFE01C491CC2381F08FE99FE0019763
:103CB000F1F700C00000C150F6CF0E5F1F4FFE01AC
:103CC000F49003C00E946D168E018F2D882309F495
:103CD0009FCFEFE9FFE03197F1F700C0000081507E
:103CE000F5CFDF91CF911F910F91FF90EF90089545
:103CF00008956093C0017093C1018093C2019093B5
:103D0000C3010C94AB1A0F931F930091C001109143
:103D1000C1012091C2013091C301DC01CB01802B94
:103D2000912BA22BB32B8093C0019093C101A09340
:103D3000C201B093C3011F910F910C94AB1A0F9362
:103D40001F930091C0011091C1012091C2013091D7
:103D5000C301DC01CB0180239123A223B3238093F1
:103D6000C0019093C101A093C201B093C3011F9100
:103D70000F910C94AB1A0F931F930091C0011091F7
:103D8000C1012091C2013091C301DC01CB01802728
:103D90009127A227B3278093C0019093C101A093DC
:103DA000C201B093C3011F910F910C94AB1A1092F2
:103DB000BC011092BD011092BE011092BF010C9483
:103DC000AB1A41E050E060E070E004C0440F551FC2
:103DD000661F771F8A95D2F74093BC015093BD01AF
:103DE0006093BE017093BF010C94AB1A41E050E0A8
:103DF00060E070E004C0440F551F661F771F8A956E
:103E0000D2F78091BC019091BD01A091BE01B0910B
:103E1000BF01482B592B6A2B7B2B4093BC0150933D
:103E2000BD016093BE017093BF010C94AB1A41E0D9
:103E300050E060E070E004C0440F551F661F771F1C
:103E40008A95D2F740955095609570958091BC0108
:103E50009091BD01A091BE01B091BF0148235923AB
:103E60006A237B234093BC015093BD016093BE0144
:103E70007093BF010C94AB1A41E050E060E070E039
:103E800004C0440F551F661F771F8A95D2F7809193
:103E9000BC019091BD01A091BE01B091BF01482726
:103EA00059276A277B274093BC015093BD0160933B
:103EB000BE017093BF010C94AB1A0F931F93009136
:103EC000BC011091BD012091BE013091BF01DC0108
:103ED000CB01802B912BA22BB32B8093BC01909311
:103EE000BD01A093BE01B093BF011F910F910C942F
:103EF000AB1A0F931F930091BC011091BD0120914B
:103F0000BE013091BF01DC01CB0180239123A223AC
:103F1000B3238093BC019093BD01A093BE01B093E5
:103F2000BF011F910F910C94AB1A0F931F93009137
:103F3000BC011091BD012091BE013091BF01DC0197
:103F4000CB0180279127A227B3278093BC019093B0
:103F5000BD01A093BE01B093BF011F910F910C94BE
:103F6000AB1A0895CF92DF92EF92FF920F931F93B7
:103F7000CF93DF938C01C090C001D090C101E0903D
:103F8000C201F090C3014091BC015091BD0160910C
:103F9000BE017091BF01C42AD52AE62AF72ACFE1D3
:103FA000D0E0D701C6010C2E04C0B695A795979511
:103FB00087950A94D2F780FF07C0B8018C2F0E9422
:103FC000DA0B8130910531F4219758F7B80180E080
:103FD0000E94DA0BDF91CF911F910F91FF90EF902C
:103FE000DF90CF90089590910C01992321F090914A
:103FF0000D01911109C020910E0130910F01F901BD
:1040000032969FEF40E030C0982F96959695969502
:104010009F30A0F4E0910E01F0910F01E90FF11D26
:10402000877021E030E0A90102C0440F551F8A9536
:10403000E2F7CA019181892B818308959091D7017C
:1040400090FF23C01F928F9387ED95E09F938F93EE
:104050000E94EB070F900F900F900F9008959F3FD5
:1040600039F04F5F4E3041F051915813F8CF0DC0E9
:104070005111F7CF942FF5CF9F3F39F0F901E90F98
:10408000F11D97FDFA9582830895089590910C0192
:10409000992321F090910D01911109C020910E01F9
:1040A00030910F01F9013296205F3F4F30C0982FB9
:1040B0009695969596959F30A8F4E0910E01F09113
:1040C0000F01E90FF11D877021E030E0A90102C066
:1040D000440F551F8A95E2F7CA0180959181892383
:1040E000818308959091D70190FF16C01F928F93FE
:1040F00089EB95E09F938F930E94EB070F900F90B1
:104100000F900F9008953196E217F30729F09081F0
:104110009813F9CF1082F7CF089581E090E0E091F5
:104120000E01F0910F01E80FF91F10820196803106
:104130009105A9F708959091D601892B8093D60116
:10414000089580959091D60189238093D601089592
:104150001092D60108959091D501892B8093D501B5
:10416000089580959091D50189238093D501089574
:104170001092D50108958093C40108951092C4014E
:10418000089580910E0190910F01FC0131969C01E0
:10419000205F3F4F80E0919191118F5FE217F3070D
:1041A000D1F70895E0910E01F0910F018091D601B1
:1041B0008083E0910E01F0910F0190818091D501F3
:1041C000892B80838091C401882361F0E0910E01E6
:1041D000F0910F019081892B80830E94C120811171
:1041E0001092C40180910E0190910F010C94EB1478
:1041F00090933B0180933A010895CF92DF92EF9222
:10420000FF926C01EE24FF24C114D104E104F104F7
:1042100021F0C701B60120E101C020E0C72ED82E51
:10422000E92EFF24C114D104E104F10419F0285F40
:10423000C701B6016B017C0154E0F694E794D79472
:10424000C7945A95D1F7C114D104E104F10419F0CF
:104250002C5FC701B6016B017C0142E0F694E79444
:10426000D794C7944A95D1F7C114D104E104F1045D
:1042700019F02E5FC701B601DC01CB01B695A795F9
:1042800097958795892B8A2B8B2B09F02F5F822F8F
:10429000FF90EF90DF90CF9008958295982F9C7CAF
:1042A000392F36953695282F237344E0249FC0017B
:1042B0001124932F982B292F2A7A2695892F8575DB
:1042C000880F822B08951F93CF93DF931F92CDB752
:1042D000DEB799830E944D21182F9981892F0E9462
:1042E0004D21212F30E0322F2227A901482BCA016E
:1042F0000F90DF91CF911F9108958091F00184304C
:1043000009F11092D80120E488E190E00FB6F8940A
:10431000A895809360000FBE2093600083B7817FD3
:10432000846083BF83B7816083BF7894889583B7A7
:104330008E7F83BF88E10FB6F8948093600010925F
:1043400060000FBE089508950895CF930E94A321A1
:104350000E947F090E94A421C0E08C2F0E94AB0A1A
:10436000811104C0CF5FCE30C1F701C081E0CF9191
:1043700008950C94BD1A82E084BD93E095BD9AEF38
:1043800097BD80936E0008952FB7F8948091D9015E
:104390009091DA01A091DB01B091DC012FBF08956B
:1043A000CF92DF92EF92FF920F931F932FB7F89463
:1043B0004091D9015091DA016091DB017091DC01EB
:1043C0002FBF6A017B01EE24FF248C0120E030E046
:1043D000C016D106E206F30610F4415051099A01C5
:1043E000281B390BC9011F910F91FF90EF90DF90AF
:1043F000CF9008951F920F920FB60F9211248F93B2
:104400009F93AF93BF938091D9019091DA01A091CE
:10441000DB01B091DC010196A11DB11D8093D90192
:104420009093DA01A093DB01B093DC01BF91AF91CF
:104430009F918F910F900FBE0F901F9018950E9423
:10444000DD11F8942FEF87EA91E6215080409040EB
:10445000E1F700C0000087E090EBDC018093F901F8
:104460009093FA01A093FB01B093FC019CE088E1DA
:104470000FB6F894A895809360000FBE90936000EB
:10448000FFCFEF92FF920F931F93CF93DF93D82F1D
:10449000C0E08C2F0E94AB0A00E010E0E82EF12C67
:1044A000C701002E02C0959587950A94E2F780FD1A
:1044B00006C00F5F1F4F0630110591F709C0602F2E
:1044C0007C2F80E00E94B80BD813F3CF81E004C0AA
:1044D000CF5FCE30F1F680E0DF91CF911F910F9149
:1044E000FF90EF900895CF93C82F8CE20E94412255
:1044F000882321F08C2FCF910C94412280E0CF9122
:104500000895CF930E94D023811102C00E94B62348
:104510008CEF95E00E945207C5E6C15049F00E9419
:104520007F098FE39CE90197F1F700C00000F5CF08
:1045300085EF95E00E94520789E20E947322811163
:1045400013C18AE20E94732281110E94B62385E082
:104550000E94732281110E941F220E94DB238093FC
:10456000D70187E00E9473228823A9F18BE10E9482
:104570007322882351F08091D70181FB222720F9F3
:1045800091E0922790FB81F90EC08EE00E94732289
:10459000882361F08091D70182FB222720F991E0E6
:1045A000922790FB82F98093D70115C080E10E9489
:1045B00073229091D701882341F093FB222720F9A1
:1045C00081E0822780FB93F904C0892F809580FBCE
:1045D00090F99093D7018091D7010E94DF230E9428
:1045E000ED238093EA0180EE0E947322882341F03C
:1045F0008091EA01982F909590FB80F98093EA01D1
:1046000089E30E947322882359F08091EA0181FB9B
:10461000222720F991E0922790FB81F98093EA010B
:1046200082EE0E947322882359F08091EA0182FB76
:10463000222720F991E0922790FB82F98093EA01EA
:1046400086EE0E947322882359F08091EA0183FB51
:10465000222720F991E0922790FB83F98093EA01C9
:1046600083EE0E947322882359F08091EA0184FB33
:10467000222720F991E0922790FB84F98093EA01A8
:1046800085E30E947322882359F08091EA0185FB1B
:10469000222720F991E0922790FB85F98093EA0187
:1046A00081E30E947322882359F08091EA0186FBFE
:1046B000222720F991E0922790FB86F98093EA0166
:1046C00081E10E947322882359F08091EA0187FBDF
:1046D000222720F991E0922790FB87F98093EA0145
:1046E0008091EA010E94F1238091EA0187FB8827EB
:1046F00080F980930D0187E20E947322C82F8EE11A
:104700000E9473228111C2608FE10E947322811185
:10471000C46080E20E9473228111C86081E20E941D
:1047200073228111C06182E20E9473228111C062F2
:1047300083E20E9473228111C06484E20E9473228A
:10474000882311F0C06802C0CC2329F08C2F0E946E
:10475000E8236C2F03C00E94E423682F70E080E000
:1047600090E0CF910C94791ECF9108956DEE7EEF7D
:1047700080E090E00E94B92D60E082E090E00E942D
:10478000AB2D60E083E090E00E94AB2D60E084E020
:1047900090E00E94AB2D60E085E090E00C94AB2DA2
:1047A00080E090E00E94A52D21E08D3E9E4F09F013
:1047B00020E0822F089582E090E00C949D2D682FD8
:1047C00082E090E00C94AB2D83E090E00C949D2D62
:1047D000682F83E090E00C94AB2D84E090E00C9483
:1047E0009D2D682F84E090E00C94AB2D8091DF012B
:1047F00080FF0BC06091130185E0689FB001112418
:1048000075956795759567952BC081FF09C0609177
:10481000130185E0689FB00111247595679520C04C
:1048200082FF07C06091130185E0689FB0011124E9
:1048300017C09091E0019923D1F060911201961771
:1048400088F72091130185E0289F90011124929F01
:10485000A001939F500D112470E0CA010E946F2D9A
:104860006038710540F46115710539F002C065E0EA
:1048700070E0862F08958FE7089581E00895809174
:10488000DF0180FF08C06091110170E075956795A8
:104890007595679521C081FF06C06091110170E098
:1048A0007595679519C082FF04C06091110170E091
:1048B00010C09091E0019923C1F06091100196170A
:1048C000A0F780911101899FC001112470E00E941E
:1048D0006F2D6038710528F46115710521F0862F60
:1048E00008958FE7089581E0089561E070E0F4CFC6
:1048F000803F21F40E94F623819504C0813F29F472
:104900000E94F6238093E3010895823F21F40E94E0
:10491000F623819504C0833F29F40E94F6238093F7
:10492000E2010895893F19F40E943F2405C08A3F9F
:1049300031F40E943F2481958093E40108958B3FD8
:1049400021F40E943F24819504C08C3F29F40E94E9
:104950003F248093E5010895843F21F48091E10193
:10496000816017C0853F21F48091E101826011C010
:10497000863F21F48091E10184600BC0873F21F4E0
:104980008091E101886005C0883F31F48091E101A8
:1049900080618093E10108958D3F21F48091DF01D2
:1049A00081600BC08E3F21F48091DF01826005C0E1
:1049B0008F3F29F48091DF0184608093DF010895A7
:1049C000803F39F48091E30187FF6CC01092E301CE
:1049D00069C0813F29F48091E3011816BCF362C0DD
:1049E0009091E201823F29F497FF5CC01092E201AE
:1049F00059C0833F19F41916CCF354C0893F41F4D0
:104A00008091E40118160CF04DC01092E4014AC0E8
:104A10008A3F29F48091E40187FF44C0F6CF8B3FA1
:104A200039F48091E50187FF3DC01092E5013AC05D
:104A30008C3F29F48091E5011816BCF333C0843F04
:104A400021F48091E1018E7F17C0853F21F4809190
:104A5000E1018D7F11C0863F21F48091E1018B7FC0
:104A60000BC0873F21F48091E101877F05C0883F1B
:104A700031F48091E1018F7E8093E10113C08D3F7D
:104A800021F48091DF018E7F0BC08E3F21F4809155
:104A9000DF018D7F05C08F3F29F48091DF018B7F7F
:104AA0008093DF018091E20181110EC08091E301CA
:104AB00081110AC08091E401811106C08091E50155
:104AC000811102C01092E00108958091D70183FF07
:104AD0007EC088E396E00E9452078091E1011F9218
:104AE0008F9383E396E09F938F930E94EB0781E37C
:104AF00096E00E9452078091E201282F332727FD7C
:104B000030953F938F938EE296E09F938F930E9410
:104B1000EB078CE296E00E9452078091E301282F78
:104B2000332727FD30953F938F9389E296E09F933B
:104B30008F930E94EB0787E296E00E9452078091D4
:104B4000E401282F332727FD30953F938F9384E28C
:104B500096E09F938F930E94EB0782E296E00E947B
:104B600052078091E501282F332727FD30953F9389
:104B70008F938FE196E09F938F930E94EB078CE1D8
:104B800096E00E9452078091E0011F928F9389E185
:104B900096E09F938F930E94EB0787E196E00E9437
:104BA00052078091DF011F928F9384E196E09F93DB
:104BB0008F930E94EB0781E196E00E9452078DB728
:104BC0009EB74C960FB6F8949EBF0FBE8DBF81EE78
:104BD00091E00E9434150E94C4219093DE018093DD
:104BE000DD0108951F93CF93DF938091DD019091B4
:104BF000DE010E94D021AC019091E001992321F0C7
:104C00002091140130E006C0209115018AE0289F10
:104C1000900111244217530708F486C08091E201E5
:104C2000C091E301D091E4011091E501811107C029
:104C3000C11176C0D11174C0111172C075C09F3FEF
:104C400019F09F5F9093E001181624F40E94F62358
:104C50008093E2018091E20187FF05C00E94F62364
:104C600081958093E2011C1624F40E94F623809320
:104C7000E3018091E30187FF05C00E94F62381953F
:104C80008093E3016091E201662339F1C091E30171
:104C9000CC2319F1772767FD7095872F972F0E94F6
:104CA000742C23E333E343E35FE30E94D82C0E9498
:104CB000412C6093E2016C2F772767FD7095872F59
:104CC000972F0E94742C23E333E343E35FE30E94B6
:104CD000D82C0E94412C6093E3011D1624F40E94FD
:104CE0003F248093E4018091E40187FF05C00E9486
:104CF0003F2481958093E401111624F40E943F24FF
:104D00008093E5018091E50187FF05C00E943F2463
:104D100081958093E501DF91CF911F910C946525DA
:104D20009F3F09F08ECF96CFDF91CF911F910895CD
:104D3000E1EEF1E085E0DF011D928A95E9F710923E
:104D4000E0011092DF0108958BE598E00E94520780
:104D50001F9281E08F931F9285E08F938DE098E002
:104D60009F938F930E94EB070F900F900F900F90DF
:104D70000F900F9008958330E9F128F4813061F0AD
:104D8000823009F10895853009F462C008F449C001
:104D9000863009F474C0089580911501262F30E003
:104DA000280F311D2F3F310524F4680F6093150142
:104DB00003C08FEF80931501809115011F928F938F
:104DC00086E497E072C080911401262F30E0280F0E
:104DD000311D2F3F310524F4680F6093140103C087
:104DE0008FEF80931401809114011F928F9384E3BD
:104DF00097E05BC080911301262F30E0280F311D12
:104E00002F3F310524F4680F6093130103C08FEF27
:104E100080931301809113011F928F9381E297E099
:104E200044C080911201262F30E0280F311D2F3F02
:104E3000310524F4680F6093120103C08FEF809353
:104E40001201809112011F928F938CE097E02DC088
:104E500080911101262F30E0280F311D2F3F3105A1
:104E600024F4680F6093110103C08FEF8093110148
:104E7000809111011F928F9383EF96E016C080916D
:104E80001001262F30E0280F311D2F3F310524F46B
:104E9000680F6093100103C08FEF80931001809121
:104EA00010011F928F9388ED96E09F938F930E943D
:104EB000EB070F900F900F900F900895833081F1C2
:104EC00028F4813059F08230D1F00895853009F40A
:104ED00049C0B8F1863009F456C008958091150193
:104EE000681720F4861B8093150102C010921501EB
:104EF000809115011F928F9389EC96E054C08091A8
:104F00001401681720F4861B8093140102C01092CC
:104F10001401809114011F928F9387EB96E043C098
:104F200080911301681720F4861B8093130102C03F
:104F300010921301809113011F928F9384EA96E0DF
:104F400032C080911201681720F4861B80931201F1
:104F500002C010921201809112011F928F938FE86C
:104F600096E021C080911101681720F4861B809380
:104F7000110102C010921101809111011F928F93B3
:104F800086E796E010C080911001681720F4861B18
:104F90008093100102C010921001809110011F92A5
:104FA0008F938BE596E09F938F930E94EB070F9072
:104FB0000F900F900F900895CF93C82F1F928F934B
:104FC00080E699E09F938F930E94EB0781E090E049
:104FD000A0E0B0E0BC01CD0104C0660F771F881FC0
:104FE000991FCA95D2F70E94791E0F900F900F90CB
:104FF0000F90CF910C94BD1ACF938D3109F465C0F9
:10500000B0F58E3009F4CCC100F5873009F49BC1AE
:10501000A8F4863009F06DC28091D701817F8E7F20
:105020008093D70185E699E00E94520781EA9DE0CE
:105030000E94520781E08093E70180C1883009F423
:105040004FC08B3009F47CC154C2863109F4F0C1E1
:1050500038F4803109F4B8C1813109F430C249C251
:10506000893109F4CEC18B3109F486C142C285333E
:1050700009F437C248F4873209F433C208F433C262
:10508000893209F42EC235C2833438F48A3308F0E9
:105090002CC2883309F454C12CC2833409F421C2D0
:1050A000883409F026C20E94BD1A80E99DE00E9462
:1050B00052079FEF23ED80E3915020408040E1F7BD
:1050C00000C000000E941F2239C180EB9DE00E94B9
:1050D00052070E94FB2B0E94DF140E94110D2EC16B
:1050E00085EA9DE00E94520786E79BE00E945207F6
:1050F0000E94E4231F928F9383E79BE09F938F93FB
:105100000E94EB0781E79BE00E9452070E94DB238D
:10511000C82F8EE59BE00E9452071F92CF9389E52E
:105120009BE09F938F930E94EB0787E59BE00E9493
:1051300052078DE49BE00E9452078C2F81701F92D2
:105140008F938AE49BE09F938F930E94EB0788E400
:105150009BE00E9452078EE39BE00E945207C1FB36
:10516000882780F91F928F938BE39BE09F938F9307
:105170000E94EB0789E39BE00E9452078DE29BE0CF
:105180000E945207C2FB882780F91F928F938AE200
:105190009BE09F938F930E94EB0788E29BE00E9425
:1051A00052078FE19BE00E945207C3FBCC27C0F956
:1051B0001F92CF938CE19BE09F938F930E94EB070C
:1051C0008AE19BE00E9452070E94ED23C82F86E0EF
:1051D0009BE00E9452071F92CF9381E09BE09F9338
:1051E0008F930E94EB078FEF9AE00E94520786EEA2
:1051F0009AE00E9452078C2F81701F928F9383EE4A
:105200009AE09F938F930E94EB078DB79EB780968D
:105210000FB6F8949EBF0FBE8DBF81EE9AE00E943C
:1052200052078AEC9AE00E945207C1FB882780F956
:105230001F928F9387EC9AE09F938F930E94EB07C6
:1052400085EC9AE00E94520783EB9AE00E94520795
:10525000C2FB882780F91F928F9380EB9AE09F937F
:105260008F930E94EB078EEA9AE00E9452078CE926
:105270009AE00E945207C3FB882780F91F928F9300
:1052800089E99AE09F938F930E94EB0787E99AE060
:105290000E9452078DE89AE00E945207C4FB8827BB
:1052A00080F91F928F938AE89AE09F938F930E94D0
:1052B000EB0788E89AE00E94520786E79AE00E948E
:1052C0005207C5FB882780F91F928F9383E79AE0E6
:1052D0009F938F930E94EB0781E79AE00E94520709
:1052E00085E59AE00E945207C6FB882780F91F9245
:1052F0008F9382E59AE09F938F930E94EB0780E55E
:105300009AE00E94520788E49AE00E945207C7FB85
:10531000CC27C0F91F92CF9385E49AE09F938F9397
:105320000E94EB0783E49AE00E9452078DB79EB774
:105330004C960FB6F8949EBF0FBE8DBFC1E0DEC085
:105340008CE899E05BC08091D701C82FC17080FFC5
:1053500009C083E89DE00E9452078091D701817FB8
:105360008E7F47C087E79DE00E9452078091D7015A
:1053700081608093D701E2CF9091D70191FBCC2738
:10538000C0F981E0C827892FC0FB81F98093D7013C
:10539000CC2319F08AE69DE027C08CE59DE02EC065
:1053A0009091D70192FBCC27C0F981E0C827892FC3
:1053B000C0FB82F98093D701CC2319F08DE49DE0E6
:1053C00013C08DE39DE01AC09091D70193FBCC27C9
:1053D000C0F981E0C827892FC0FB83F98093D701EA
:1053E000CC2351F081E39DE00E9452078091D701C8
:1053F00081608093D70182C084E29DE00E945207C1
:105400009DCF85E19DE00E94520789EE9CE00E94BD
:1054100052078CEA9CE00E94520785E89CE00E94BB
:10542000520781E49CE00E94520786E19CE0E6CFAF
:1054300088E09CE00E9452070E94DF141F928F9325
:105440008EEE9BE09F938F930E94EB0780910C015F
:105450001F928F9387ED9BE09F938F930E94EB07A2
:1054600080916E011F928F9384EC9BE09F938F93AA
:105470000E94EB0780910D011F928F9381EB9BE0BF
:105480009F938F930E94EB078091D9019091DA014D
:10549000A091DB01B091DC01BF93AF939F938F93F9
:1054A0008DE99BE09F938F930E94EB078DB79EB78A
:1054B00046960FB6F8949EBF0FBE8DBF3FCF0E9499
:1054C000BD1AC0910D0181E0C827C0930D01CC2306
:1054D00029F083E99BE00E94520710C088E89BE016
:1054E0008DCF80E003C08D5101C089530E94DC271D
:1054F00025CF86E89BE00E945207C0E08C2FCF9119
:10550000089580E0089580E00895CF93C82F80919A
:10551000E701813081F020F0823009F44FC045C1AD
:10552000E0910E01F0910F018081813169F08232AA
:1055300009F03DC109C0E0910E01F0910F01808199
:10554000813111F0823261F48C2F0E94812A811105
:1055500004C08C2F0E94FC272FC081E090E02CC05B
:105560008C2F0E94832A811126C0C431E1F070F48F
:10557000CB3081F0C031D1F40E94A42688E599E0B7
:105580000E94520782E08093E70115C0C93259F0AA
:10559000C83361F485E699E00E9452078CE599E0F2
:1055A0000E94520708C01092E70103C186E599E006
:1055B0000E945207FEC081E08170FDC0C43220F518
:1055C000CE3108F0C0C0CB3099F1C8F4C73009F033
:1055D000D2C08AE08093150194E19093140193E086
:1055E000909313018093120188E08093110188E267
:1055F000809310018CEF97E00E945207BFC0C33127
:1056000049F1C431C1F0B7C0CB3409F4A9C028F4C2
:10561000C93289F0C83361F0AEC0C13509F49EC00B
:10562000C23509F499C0CE3409F0A5C06AE09EC025
:105630000E94A426A3C08091E601882319F010924D
:10564000E6019CC089E098E00E94520781E08093C7
:10565000E701B1C083EE97E00E94520781ED97E029
:105660000E945207809115011F928F938EEC97E054
:105670009F938F930E94EB078CEC97E00E94520758
:105680008AEB97E00E945207809114011F928F933A
:1056900087EB97E09F938F930E94EB0785EB97E052
:1056A0000E94520786EA97E00E94520780911301F8
:1056B0001F928F9383EA97E09F938F930E94EB074B
:1056C00081EA97E00E94520780E997E00E94520722
:1056D000809112011F928F938DE897E09F938F9393
:1056E0000E94EB078BE897E00E94520786E797E05D
:1056F0000E945207809111011F928F9383E797E0D8
:105700009F938F930E94EB0781E797E00E945207D7
:105710008AE597E00E945207809110011F928F93B3
:1057200087E597E09F938F930E94EB0785E597E0CD
:105730000E9452078DB79EB748960FB6F8949EBF49
:105740000FBE8DBF1BC0CE51EC2FF0E0E15DFE4FD0
:1057500080818093E60112C061E003C061E006C071
:105760006AE08091E6010E94BB2608C08091E601B4
:105770000E945E2703C08AEF97E013C08091E60184
:10578000882369F01F928F9384EF97E09F938F9304
:105790000E94EB070F900F900F900F9004C081EFC5
:1057A00097E00E94520781E006C01092E70180E076
:1057B00002C080E001CFCF910895E1E8F0E0808160
:1057C000886080838081816080838FB7F89493E0C4
:1057D0009093890090ED909388008FBF0895EFE635
:1057E000F0E08081826080830895EFE6F0E08081C0
:1057F0008D7F80830895EFE6F0E0908182E0892735
:10580000808308951F920F920FB60F9211242F9349
:105810003F934F935F936F937F938F939F93AF9338
:10582000BF93EF93FF938091E8019091E901019676
:105830009093E9018093E801811103C082E00E9406
:10584000110DE091E901E695E695F0E0E054F24FA4
:10585000E4918091E8018E1303C080E00E94110D55
:10586000FF91EF91BF91AF919F918F917F916F9138
:105870005F914F913F912F910F900FBE0F901F900E
:10588000189504D06894B1118DC0089570D088F037
:105890009F5790F0B92F9927B751A0F0D1F0660F1C
:1058A000771F881F991F1AF0BA95C9F712C0B13037
:1058B00081F077D0B1E0089574C0672F782F8827E2
:1058C000B85F39F0B93FCCF3869577956795B39576
:1058D000D9F73EF490958095709561957F4F8F4FE5
:1058E0009F4F0895E89409C097FB3EF490958095EA
:1058F000709561957F4F8F4F9F4F9923A9F0F92F96
:1059000096E9BB279395F695879577956795B79513
:10591000F111F8CFFAF4BB0F11F460FF1BC06F5FF9
:105920007F4F8F4F9F4F16C0882311F096E911C00B
:10593000772321F09EE8872F762F05C0662371F02C
:1059400096E8862F70E060E02AF09A95660F771F40
:10595000881FDAF7880F9695879597F9089557FD70
:105960009058440F551F59F05F3F71F04795880FCD
:1059700097FB991F61F09F3F79F087950895121664
:1059800013061406551FF2CF4695F1DF08C0161610
:1059900017061806991FF1CF8695710561050894C1
:1059A0000895E894BB2766277727CB0197F90895D8
:1059B0000BD078C069D028F06ED018F0952309F08C
:1059C0005AC05FC01124EECFCADFA0F3959FD1F378
:1059D000950F50E0551F629FF001729FBB27F00D9D
:1059E000B11D639FAA27F00DB11DAA1F649F6627F2
:1059F000B00DA11D661F829F2227B00DA11D621F41
:105A0000739FB00DA11D621F839FA00D611D221FFA
:105A1000749F3327A00D611D231F849F600D211DDE
:105A2000822F762F6A2F11249F5750408AF0E1F081
:105A300088234AF0EE0FFF1FBB1F661F771F881FCA
:105A400091505040A9F79E3F510570F014C0AACF65
:105A50005F3FECF3983EDCF3869577956795B795B5
:105A6000F795E7959F5FC1F7FE2B880F911D9695DF
:105A7000879597F9089597F99F6780E870E060E04F
:105A800008959FEF80EC089500240A9416161706D7
:105A900018060906089500240A941216130614061F
:105AA00005060895092E0394000C11F4882352F082
:105AB000BB0F40F4BF2B11F460FF04C06F5F7F4F3A
:105AC0008F4F9F4F0895991B79E004C0991F961737
:105AD00008F0961B881F7A95C9F78095089597FB63
:105AE000072E16F4009407D077FD09D00E94892D67
:105AF00007FC05D03EF4909581959F4F08957095D1
:105B000061957F4F0895EE0FFF1F0590F491E02DF2
:105B10000994AA1BBB1B51E107C0AA1FBB1FA617F4
:105B2000B70710F0A61BB70B881F991F5A95A9F746
:105B300080959095BC01CD010895F999FECF92BD55
:105B400081BDF89A992780B50895A8E1B0E042E0B8
:105B500050E00C94C02D262FF999FECF1FBA92BDAC
:105B600081BD20BD0FB6F894FA9AF99A0FBE01963E
:105B700008950E94AB2D272F0C94AC2DDC01CB0196
:105B8000FC01F999FECF06C0F2BDE1BDF89A31964D
:105B900000B40D9241505040B8F70895F894FFCFEB
:105BA0002002120D030EE00DAC0D780D0101C501B0
:105BB00028080A03140A3F4D3620394605F904C364
:105BC00004A3046A04DD03F6030F04280448040157
:0A5BD000020304050607080900009F
:00000001FF

@ -0,0 +1,149 @@
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device.
# Please customize your programmer settings(PROGRAM_CMD)
#
# make teensy = Download the hex file to the device, using teensy_loader_cli.
# (must have teensy_loader_cli installed).
#
# make dfu = Download the hex file to the device, using dfu-programmer (must
# have dfu-programmer installed).
#
# make flip = Download the hex file to the device, using Atmel FLIP (must
# have Atmel FLIP installed).
#
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
# (must have dfu-programmer installed).
#
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
# (must have Atmel FLIP installed).
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# Target file name (without extension).
TARGET = hhkb_qmk
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = hhkb_qmk.c \
matrix.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
endif
CONFIG_H = config.h
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
#OPT_DEFS += -DBOOTLOADER_SIZE=4096
# as per original hasu settings
OPT_DEFS += -DBOOTLOADER_SIZE=512
# Build Options
# comment out to disable the options.
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
CUSTOM_MATRIX = yes # Custom matrix file for the HHKB
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
VPATH += $(TMK_DIR)
debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
debug-on: all
debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
debug-off: all
include $(TOP_DIR)/quantum/quantum.mk

@ -0,0 +1,180 @@
hhkb_qmk keyboard firmware
======================
## Quantum MK Firmware
You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = yes # MIDI controls
# UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not //
BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
## Quick aliases to common actions
Your keymap can include shortcuts to common operations (called "function actions" in tmk).
### Switching and toggling layers
`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
### Fun with modifier keys
* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
* `RSFT(kc)` - applies right Shift to *kc*
* `LCTL(kc)` - applies left Control to *kc*
* `RCTL(kc)` - applies right Control to *kc*
* `LALT(kc)` - applies left Alt to *kc*
* `RALT(kc)` - applies right Alt to *kc*
* `LGUI(kc)` - applies left GUI (command/win) to *kc*
* `RGUI(kc)` - applies right GUI (command/win) to *kc*
You can also chain these, like this:
LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
KC_TILD ~
KC_EXLM !
KC_AT @
KC_HASH #
KC_DLR $
KC_PERC %
KC_CIRC ^
KC_AMPR &
KC_ASTR *
KC_LPRN (
KC_RPRN )
KC_UNDS _
KC_PLUS +
KC_LCBR {
KC_RCBR }
KC_PIPE |
KC_COLN :
`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available):
* MOD_LCTL
* MOD_LSFT
* MOD_LALT
* MOD_LGUI
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
* `CTL_T(kc)` - is LCTL when held and *kc* when tapped
* `SFT_T(kc)` - is LSFT when held and *kc* when tapped
* `ALT_T(kc)` - is LALT when held and *kc* when tapped
* `GUI_T(kc)` - is LGUI when held and *kc* when tapped
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
### Temporarily setting the default layer
`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
### Remember: These are just aliases
These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
## Macro shortcuts: Send a whole string when pressing just one key
Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
```c
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
{
switch(id) {
case 0: // this would trigger when you hit a key mapped as M(0)
if (record->event.pressed) {
return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
}
break;
}
return MACRO_NONE;
};
```
A macro can include the following commands:
* I() change interval of stroke in milliseconds.
* D() press key.
* U() release key.
* T() type key(press and release).
* W() wait (milliseconds).
* END end mark.
So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
Note: Using macros to have your keyboard send passwords for you is a bad idea.
### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
#include "keymap_<layout>.h"
Where <layout> is "colemak" or "dvorak". After including this line, you will get access to:
* `CM_*` for all of the Colemak-equivalent characters
* `DV_*` for all of the Dvorak-equivalent characters
These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
## Additional language support
In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
## Unicode support
You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
## Other firmware shortcut keycodes
* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
* `BL_ON` - turns the backlight on
* `BL_OFF` - turns the backlight off
* `BL_<n>` - sets the backlight to level *n*
* `BL_INC` - increments the backlight level by one
* `BL_DEC` - decrements the backlight level by one
* `BL_TOGG` - toggles the backlight
* `BL_STEP` - steps through the backlight levels
Enable the backlight from the Makefile.
## MIDI functionalty
This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
## Bluetooth functionality
This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
## Building
Download or clone the whole firmware and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.

@ -0,0 +1,71 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xCAFE
#define DEVICE_VER 0x0104
#define MANUFACTURER q.m.k
#define PRODUCT HHKB mod
#define DESCRIPTION q.m.k keyboard firmware for HHKB
/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 8
#define TAPPING_TERM 200
/* number of backlight levels */
#define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
//#define LOCKING_RESYNC_ENABLE
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
#endif

@ -0,0 +1,167 @@
#ifndef HHKB_AVR_H
#define HHKB_AVR_H
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Timer resolution check
#if (1000000/TIMER_RAW_FREQ > 20)
# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
#endif
/*
* HHKB Matrix I/O
*
* row: HC4051[A,B,C] selects scan row0-7
* row-ext: [En0,En1] row extention for JP
* col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
* key: on: 0/off: 1
* prev: hysteresis control: assert(1) when previous key state is on
*/
#if defined(__AVR_ATmega32U4__)
/*
* For TMK HHKB alt controller(ATMega32U4)
*
* row: PB0-2
* col: PB3-5,6
* key: PD7(pull-uped)
* prev: PB7
* power: PD4(L:off/H:on)
* row-ext: PC6,7 for HHKB JP(active low)
*/
static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); }
static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); }
static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
#ifdef HHKB_POWER_SAVING
static inline void KEY_POWER_ON(void) {
DDRB = 0xFF; PORTB = 0x40; // change pins output
DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on
/* Without this wait you will miss or get false key events. */
_delay_ms(5); // wait for powering up
}
static inline void KEY_POWER_OFF(void) {
/* input with pull-up consumes less than without it when pin is open. */
DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up
DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off
}
static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
#else
static inline void KEY_POWER_ON(void) {}
static inline void KEY_POWER_OFF(void) {}
static inline bool KEY_POWER_STATE(void) { return true; }
#endif
static inline void KEY_INIT(void)
{
/* row,col,prev: output */
DDRB = 0xFF;
PORTB = 0x40; // unable
/* key: input with pull-up */
DDRD &= ~0x80;
PORTD |= 0x80;
#ifdef HHKB_JP
/* row extention for HHKB JP */
DDRC |= (1<<6|1<<7);
PORTC |= (1<<6|1<<7);
#endif
KEY_UNABLE();
KEY_PREV_OFF();
KEY_POWER_OFF();
}
static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
{
PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
#ifdef HHKB_JP
if ((ROW) & 0x08) PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<6);
else PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<7);
#endif
}
#elif defined(__AVR_AT90USB1286__)
/*
* For Teensy++(AT90USB1286)
*
* HHKB pro HHKB pro2
* row: PB0-2 (6-8) (5-7)
* col: PB3-5,6 (9-12) (8-11)
* key: PE6(pull-uped) (4) (3)
* prev: PE7 (5) (4)
*
* TODO: convert into 'staitc inline' function
*/
#define KEY_INIT() do { \
DDRB |= 0x7F; \
DDRE |= (1<<7); \
DDRE &= ~(1<<6); \
PORTE |= (1<<6); \
} while (0)
#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \
(((COL) & 0x07)<<3) | \
((ROW) & 0x07))
#define KEY_ENABLE() (PORTB &= ~(1<<6))
#define KEY_UNABLE() (PORTB |= (1<<6))
#define KEY_STATE() (PINE & (1<<6))
#define KEY_PREV_ON() (PORTE |= (1<<7))
#define KEY_PREV_OFF() (PORTE &= ~(1<<7))
#define KEY_POWER_ON()
#define KEY_POWER_OFF()
#define KEY_POWER_STATE() true
#else
# error "define code for matrix scan"
#endif
#if 0
// For ATMega328P with V-USB
//
// #elif defined(__AVR_ATmega328P__)
// Ports for V-USB
// key: PB0(pull-uped)
// prev: PB1
// row: PB2-4
// col: PC0-2,3
// power: PB5(Low:on/Hi-z:off)
#define KEY_INIT() do { \
DDRB |= 0x3E; \
DDRB &= ~(1<<0); \
PORTB |= 1<<0; \
DDRC |= 0x0F; \
KEY_UNABLE(); \
KEY_PREV_OFF(); \
} while (0)
#define KEY_SELECT(ROW, COL) do { \
PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \
} while (0)
#define KEY_ENABLE() (PORTC &= ~(1<<3))
#define KEY_UNABLE() (PORTC |= (1<<3))
#define KEY_STATE() (PINB & (1<<0))
#define KEY_PREV_ON() (PORTB |= (1<<1))
#define KEY_PREV_OFF() (PORTB &= ~(1<<1))
// Power supply switching
#define KEY_POWER_ON() do { \
KEY_INIT(); \
PORTB &= ~(1<<5); \
_delay_ms(1); \
} while (0)
#define KEY_POWER_OFF() do { \
DDRB &= ~0x3F; \
PORTB &= ~0x3F; \
DDRC &= ~0x0F; \
PORTC &= ~0x0F; \
} while (0)
#endif
#endif

@ -0,0 +1,29 @@
#include "hhkb_qmk.h"
__attribute__ ((weak))
void * matrix_init_user(void) {
// leave these blank
};
__attribute__ ((weak))
void * matrix_scan_user(void) {
// leave these blank
};
void * matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
if (matrix_init_user) {
(*matrix_init_user)();
}
};
void * matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
if (matrix_scan_user) {
(*matrix_scan_user)();
}
};

@ -0,0 +1,30 @@
#ifndef HHKB_QMK_H
#define HHKB_QMK_H
#include "matrix.h"
#include "keymap_common.h"
//#include "backlight.h"
#include <stddef.h>
#define KEYMAP( \
K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \
K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \
K33, K04, K03, K14, K15, K24, K25, K45, K44, K65, K64, K74, K53, \
K34, K05, K06, K07, K16, K17, K26, K46, K66, K76, K75, K55, K54, \
K35, K36, K37, K57, K56) \
\
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
{ K20, K21, K22, K23, K24, K25, K26, KC_NO }, \
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
{ K40, K41, K42, K43, K44, K45, K46, KC_NO }, \
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
{ K60, K61, K62, K63, K64, K65, K66, KC_NO }, \
{ K70, K71, K72, K73, K74, K75, K76, KC_NO } \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
#endif

@ -0,0 +1,78 @@
/* -*- eval: (turn-on-orgtbl); -*-
* default HHKB Layout
*/
#include "hhkb_qmk.h"
#define BASE 0
#define HHKB 1
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* BASE Level: Default Layer
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
| Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
| Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
|------+------+-----------------------+------+------|
| LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
|------+------+-----------------------+------+------|
*/
[BASE] = KEYMAP( // default layer
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
/* Layer HHKB: HHKB mode (HHKB Fn)
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| | | | | | | + | - | End | PgD | Dow | | | | |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|------+------+----------------------+------+------+
| **** | **** | ******************** | **** | **** |
|------+------+----------------------+------+------+
*/
[HHKB] = KEYMAP(
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};

@ -0,0 +1,208 @@
/* -*- eval: (turn-on-orgtbl); -*-
* lxol HHKB Layout
*/
#include "hhkb_qmk.h"
#define BASE 0
#define WIN 1
#define HHKB 2
#define RGUILEV 3
#define LGUILEV 4
#define RALTLEV 5
#define LALTLEV 6
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|------+------+-------+------+------|
| LAlt | LGUI | Space | RGUI | RAlt |
|------+------+-------+------+------|
*/
[BASE] = KEYMAP( // layer 0 : default
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_LCTL, LT(LALTLEV,KC_A), LT(LGUILEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV,KC_L), LT(RALTLEV,KC_SCLN), KC_QUOT, KC_FN0, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
/* Layer 1: HHKB mode (HHKB Fn)
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
| | | | | | | + | - | End | PgD | Dow | | | | |
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|---+---+---+---+---|
| | | | | |
|---+---+---+---+---|
*/
[HHKB] = KEYMAP(
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
/* Layer LGUI: All keys with RGUI modifier
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|------+------+-------+------+------|
| LAlt | LGUI | Space | RGUI | RAlt |
|------+------+-------+------+------|
*/
[RGUILEV] = KEYMAP( // Right GUI layer by KC_L
RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV), \
RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC), \
RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), KC_FN0, \
RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS, \
KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT),
/* Layer LGUI: All keys with LGUI modifier
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|------+------+-------+------+------|
| LAlt | LGUI | Space | LGUI | RAlt |
|------+------+-------+------+------|
*/
[LGUILEV] = KEYMAP( // Right GUI layer by KC_L
LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV), \
LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC), \
LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), KC_FN0, \
KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS, \
KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT),
/* Layer LALT: All keys with RALT modifier
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|------+------+-------+------+------|
| LAlt | LGUI | Space | RGUI | RAlt |
|------+------+-------+------+------|
*/
[RALTLEV] = KEYMAP( // Right ALT layer by KC_L
RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV), \
RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC), \
RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), KC_FN0, \
RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS, \
KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT),
/* Layer LALT: All keys with LALT modifier
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|------+------+-------+------+------|
| LAlt | LGUI | Space | LGUI | RAlt |
|------+------+-------+------+------|
*/
[LALTLEV] = KEYMAP( // Right ALT layer by KC_L
LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV), \
LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC), \
LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), KC_FN0, \
KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS, \
KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT),
/* Layer WIN: Win layer
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
| Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
| Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
|------+------+-------+------+------|
| LGui | LAlt | Space | RGui | Ralt |
|------+------+-------+------+------|
*/
[WIN] = KEYMAP( // BASE level with swapped GUI/ALT
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_LCTL, LT(LGUILEV,KC_A), LT(LALTLEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV,KC_L), LT(RGUILEV,KC_SCLN), KC_QUOT, KC_FN0, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT) // RControl with tap Enter*
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};

@ -0,0 +1,196 @@
/*
Copyright 2011 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* scan matrix
*/
#include <stdint.h>
#include <stdbool.h>
#include <util/delay.h>
#include "print.h"
#include "debug.h"
#include "util.h"
#include "timer.h"
#include "matrix.h"
#include "hhkb_avr.h"
#include <avr/wdt.h>
#include "suspend.h"
#include "lufa.h"
// matrix power saving
#define MATRIX_POWER_SAVE 10000
static uint32_t matrix_last_modified = 0;
// matrix state buffer(1:on, 0:off)
static matrix_row_t *matrix;
static matrix_row_t *matrix_prev;
static matrix_row_t _matrix0[MATRIX_ROWS];
static matrix_row_t _matrix1[MATRIX_ROWS];
inline
uint8_t matrix_rows(void)
{
return MATRIX_ROWS;
}
inline
uint8_t matrix_cols(void)
{
return MATRIX_COLS;
}
void matrix_init(void)
{
#ifdef DEBUG
debug_enable = true;
debug_keyboard = true;
#endif
KEY_INIT();
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00;
matrix = _matrix0;
matrix_prev = _matrix1;
}
uint8_t matrix_scan(void)
{
uint8_t *tmp;
tmp = matrix_prev;
matrix_prev = matrix;
matrix = tmp;
// power on
if (!KEY_POWER_STATE()) KEY_POWER_ON();
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
KEY_SELECT(row, col);
_delay_us(5);
// Not sure this is needed. This just emulates HHKB controller's behaviour.
if (matrix_prev[row] & (1<<col)) {
KEY_PREV_ON();
}
_delay_us(10);
// NOTE: KEY_STATE is valid only in 20us after KEY_ENABLE.
// If V-USB interrupts in this section we could lose 40us or so
// and would read invalid value from KEY_STATE.
uint8_t last = TIMER_RAW;
KEY_ENABLE();
// Wait for KEY_STATE outputs its value.
// 1us was ok on one HHKB, but not worked on another.
// no wait doesn't work on Teensy++ with pro(1us works)
// no wait does work on tmk PCB(8MHz) with pro2
// 1us wait does work on both of above
// 1us wait doesn't work on tmk(16MHz)
// 5us wait does work on tmk(16MHz)
// 5us wait does work on tmk(16MHz/2)
// 5us wait does work on tmk(8MHz)
// 10us wait does work on Teensy++ with pro
// 10us wait does work on 328p+iwrap with pro
// 10us wait doesn't work on tmk PCB(8MHz) with pro2(very lagged scan)
_delay_us(5);
if (KEY_STATE()) {
matrix[row] &= ~(1<<col);
} else {
matrix[row] |= (1<<col);
}
// Ignore if this code region execution time elapses more than 20us.
// MEMO: 20[us] * (TIMER_RAW_FREQ / 1000000)[count per us]
// MEMO: then change above using this rule: a/(b/c) = a*1/(b/c) = a*(c/b)
if (TIMER_DIFF_RAW(TIMER_RAW, last) > 20/(1000000/TIMER_RAW_FREQ)) {
matrix[row] = matrix_prev[row];
}
_delay_us(5);
KEY_PREV_OFF();
KEY_UNABLE();
// NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
// This takes 25us or more to make sure KEY_STATE returns to idle state.
#ifdef HHKB_JP
// Looks like JP needs faster scan due to its twice larger matrix
// or it can drop keys in fast key typing
_delay_us(30);
#else
_delay_us(75);
#endif
}
if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
}
// power off
if (KEY_POWER_STATE() &&
(USB_DeviceState == DEVICE_STATE_Suspended ||
USB_DeviceState == DEVICE_STATE_Unattached ) &&
timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) {
KEY_POWER_OFF();
suspend_power_down();
}
return 1;
}
bool matrix_is_modified(void)
{
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
if (matrix[i] != matrix_prev[i])
return true;
}
return false;
}
inline
bool matrix_has_ghost(void)
{
return false;
}
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
return (matrix[row] & (1<<col));
}
inline
matrix_row_t matrix_get_row(uint8_t row)
{
return matrix[row];
}
void matrix_print(void)
{
print("\nr/c 01234567\n");
for (uint8_t row = 0; row < matrix_rows(); row++) {
xprintf("%02X: %08b\n", row, bitrev(matrix_get_row(row)));
}
}
void matrix_power_up(void) {
KEY_POWER_ON();
}
void matrix_power_down(void) {
KEY_POWER_OFF();
}

@ -9,9 +9,9 @@
#define _RS 2
#define _FN 3
// This a slightly adapted 'default' keymap. I like the position of 'esc' and 'tab' better this way.
// I also git rid of the backlighting control key and the dvorak and colemak layers. I added a 'fn'
// layer that makes the 'bspc' a forward delete (like on OSX).
// This a slightly modified 'default' keymap that's closer to the Mac keyboard layout. I like the position
// of 'esc' and 'tab' better this way. I also got rid of the backlighting control key and the dvorak and
// colemak layers. I added an 'fn' layer that makes the 'bspc' a forward delete (like on OSX).
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* MIT Layout (QWERTY layer)
*
@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
* |-----------------------------------------------------------------------|
* | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | | |
* |-----------------------------------------------------------------------|
* | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
* |-----------------------------------------------------------------------|
@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_RS] = { /* RAISE */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
},
@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
* |-----------------------------------------------------------------------|
* | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | \ |
* |-----------------------------------------------------------------------|
* | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
* |-----------------------------------------------------------------------|
@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_LW] = { /* LOWER */
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LCBR, KC_RCBR, KC_BSLS},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
},
@ -76,15 +76,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------------------|
* | | | | | | | | | | | | |
* |-----------------------------------------------------------------------|
* | | | | | | | | | | | |
* | | | | | | | |home |pgdn |pgup | end |
* `-----------------------------------------------------------------------'
*/
[_FN] = { /* FUNCTION */
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DELT},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
}
};

@ -0,0 +1,77 @@
#ifndef KEYMAP_FRENCH_OSX_H
#define KEYMAP_FRENCH_OSX_H
#include "keymap_common.h"
// Normal characters
#define FR_AT KC_GRV
#define FR_AMP KC_1
#define FR_EACU KC_2
#define FR_QUOT KC_3
#define FR_APOS KC_4
#define FR_LPRN KC_5
#define FR_SECT KC_6
#define FR_EGRV KC_7
#define FR_EXLM KC_8
#define FR_CCED KC_9
#define FR_AGRV KC_0
#define FR_RPRN KC_MINS
#define FR_MINS KC_EQL
#define FR_A KC_Q
#define FR_Z KC_W
#define FR_CIRC KC_LBRC
#define FR_DLR KC_RBRC
#define FR_Q KC_A
#define FR_M KC_SCLN
#define FR_UGRV KC_QUOT
#define FR_GRV KC_NUHS
#define FR_LESS KC_NUBS
#define FR_W KC_Z
#define FR_COMM KC_M
#define FR_SCLN KC_COMM
#define FR_COLN KC_DOT
#define FR_EQL KC_SLSH
// Shifted characters
#define FR_HASH LSFT(KC_GRV)
#define FR_1 LSFT(KC_1)
#define FR_2 LSFT(KC_2)
#define FR_3 LSFT(KC_3)
#define FR_4 LSFT(KC_4)
#define FR_5 LSFT(KC_5)
#define FR_6 LSFT(KC_6)
#define FR_7 LSFT(KC_7)
#define FR_8 LSFT(KC_8)
#define FR_9 LSFT(KC_9)
#define FR_0 LSFT(KC_0)
#define FR_UNDS LSFT(FR_MINS)
#define FR_UMLT LSFT(FR_CIRC)
#define FR_ASTR LSFT(FR_DLR)
#define FR_PERC LSFT(FR_UGRV)
#define FR_PND LSFT(FR_GRV)
#define FR_GRTR LSFT(FR_LESS)
#define FR_QUES LSFT(FR_COMM)
#define FR_DOT LSFT(FR_SCLN)
#define FR_SLSH LSFT(FR_COLN)
#define FR_PLUS LSFT(FR_EQL)
// Alted characters
#define FR_LCBR LALT(KC_5)
#define FR_RCBR LALT(FR_RPRN)
#define FR_EURO LALT(KC_E)
#define FR_BULT LALT(FR_DLR)
#define FR_TILD LALT(KC_N)
// Shift+Alt-ed characters
#define FR_LBRC LSFT(LALT(KC_5))
#define FR_RBRC LSFT(LALT(FR_RPRN))
#define FR_PIPE LSFT(LALT(KC_L))
#define FR_BSLS LSFT(LALT(FR_COLN))
#endif

@ -0,0 +1,100 @@
#ifndef KEYMAP_GERMAN_OSX
#define KEYMAP_GERMAN_OSX
#ifdef KEYMAP_GERMAN
#warning redefining german keys
#endif
#include "keymap_common.h"
// Alt gr
// normal characters
#define DE_Z KC_Y
#define DE_Y KC_Z
#define DE_A KC_A
#define DE_B KC_B
#define DE_C KC_C
#define DE_D KC_D
#define DE_E KC_E
#define DE_F KC_F
#define DE_G KC_G
#define DE_H KC_H
#define DE_I KC_I
#define DE_J KC_J
#define DE_K KC_K
#define DE_L KC_L
#define DE_M KC_M
#define DE_N KC_N
#define DE_O KC_O
#define DE_P KC_P
#define DE_Q KC_Q
#define DE_R KC_R
#define DE_S KC_S
#define DE_T KC_T
#define DE_U KC_U
#define DE_V KC_V
#define DE_W KC_W
#define DE_X KC_X
#define DE_0 KC_0
#define DE_1 KC_1
#define DE_2 KC_2
#define DE_3 KC_3
#define DE_4 KC_4
#define DE_5 KC_5
#define DE_6 KC_6
#define DE_7 KC_7
#define DE_8 KC_8
#define DE_9 KC_9
#define DE_DOT KC_DOT
#define DE_COMM KC_COMM
#define DE_SS KC_MINS
#define DE_AE KC_QUOT
#define DE_UE KC_LBRC
#define DE_OE KC_SCLN
#define DE_CIRC KC_NUBS // accent circumflex ^ and ring °
#define DE_ACUT KC_EQL // accent acute ´ and grave `
#define DE_PLUS KC_RBRC // + and * and ~
#define DE_HASH KC_BSLS // # and '
#define DE_LESS KC_GRV // < and > and |
#define DE_MINS KC_SLSH // - and _
// shifted characters
#define DE_RING LSFT(DE_CIRC) // °
#define DE_EXLM LSFT(KC_1) // !
#define DE_DQOT LSFT(KC_2) // "
#define DE_PARA LSFT(KC_3) // §
#define DE_DLR LSFT(KC_4) // $
#define DE_PERC LSFT(KC_5) // %
#define DE_AMPR LSFT(KC_6) // &
#define DE_SLSH LSFT(KC_7) // /
#define DE_LPRN LSFT(KC_8) // (
#define DE_RPRN LSFT(KC_9) // )
#define DE_EQL LSFT(KC_0) // =
#define DE_QST LSFT(DE_SS) // ?
#define DE_GRV LSFT(DE_ACUT) // `
#define DE_ASTR LSFT(DE_PLUS) // *
#define DE_QUOT LSFT(DE_HASH) // '
#define DE_MORE LSFT(DE_LESS) // >
#define DE_COLN LSFT(KC_DOT) // :
#define DE_SCLN LSFT(KC_COMM) // ;
#define DE_UNDS LSFT(DE_MINS) // _
// Alt-ed characters
#define DE_SQ2 LALT(KC_2) // ²
#define DE_SQ3 LALT(KC_3) // ³
#define DE_LCBR LALT(KC_7) // {
#define DE_LBRC LALT(KC_5) // [
#define DE_RBRC LALT(KC_6) // ]
#define DE_RCBR LALT(KC_9) // }
#define DE_BSLS LALT(LSFT(KC_7)) // backslash
#define DE_AT LALT(DE_L) // @
#define DE_EURO LALT(KC_E) // €
#define DE_TILD LALT(DE_N) // ~
#define DE_PIPE LALT(DE_7) // |
#endif
Loading…
Cancel
Save