summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/keymap.c423
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.pngbin119139 -> 121014 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt22
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.pngbin98257 -> 103401 bytes
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt36
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex2165
-rw-r--r--keyboard/ergodox_ez/keymaps/ordinary/readme.md17
-rw-r--r--keyboard/planck/keymaps/default/keymap.c25
-rw-r--r--keyboard/preonic/Makefile2
-rw-r--r--keyboard/preonic/keymaps/default/keymap.c78
-rw-r--r--quantum/audio.c230
-rw-r--r--quantum/audio.h22
-rw-r--r--quantum/vibrato_lut.h82
13 files changed, 1527 insertions, 1575 deletions
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/keymap.c b/keyboard/ergodox_ez/keymaps/ordinary/keymap.c
index 3a999f2665..efd67addd5 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/keymap.c
+++ b/keyboard/ergodox_ez/keymaps/ordinary/keymap.c
@@ -2,29 +2,31 @@
#include "led.h"
#include "debug.h"
#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define LOCK 1 // layer lock keys
-#define SYMB_MO 2 // symbols momentary layer
-#define SYMB_TG 3 // symbols lock layer
-#define SYMB_XX 4 // symbols exit layer
-#define MDIA_MO 5 // media momentary layer
-#define MDIA_TG 6 // media lock layer
-#define MDIA_XX 7 // media exit layer
-#define UNLOCK 8 // clear to base layer
+#include "action_util.h"
+
+#define BASE 0 // default layer
+#define LOCK 1 // shift-lock layer
+#define SYMB_SH 2 // symbols shift layer
+#define SYMB_LK 3 // symbols lock layer
+#define SYMB_UN 4 // symbols unlock layer
+#define MDIA_SH 5 // media shift layer
+#define MDIA_LK 6 // media lock layer
+#define MDIA_UN 7 // media unlock layer
+#define UNLOCK 8 // clear to base layer
/*
- * Ordinary Ergodox EZ keyboard layout, v3
+ * The Ordinary Layout for the Ergodox EZ keyboard, v3.1
* modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
- * Details: http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html
+ * Details: readme.md
+ * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
+/* Keymap 0: Base Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | LOCK Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK |
+ * | LOCK `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
@@ -32,8 +34,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+-----------|
* | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl |
- * `----------------------------------' `----------------------------------'
+ * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
+ * `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------.
* | Home | End | | Left | Right|
* ,------|------|------| |------+------+------.
@@ -44,20 +46,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[BASE] = KEYMAP(
// left hand
- LT(LOCK, KC_GRV),KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
-,LT(MDIA_MO, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
-,MO(SYMB_MO) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
-,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
-,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
+ LT(LOCK, KC_GRV) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
+,LT(MDIA_SH, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
+,MO(SYMB_SH) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
+,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
+,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
- ,KC_HOME,KC_END
- ,KC_PGUP
- ,KC_BSPC,KC_DEL ,KC_PGDN
+ ,KC_HOME,KC_END
+ ,KC_PGUP
+ ,KC_BSPC,KC_DEL ,KC_PGDN
// right hand
,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,LT(LOCK, KC_EQL)
- ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_MO, KC_BSLS)
- ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_MO, KC_QUOT)
+ ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_SH, KC_BSLS)
+ ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_SH, KC_QUOT)
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
,KC_RGUI,KC_RALT,ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
@@ -68,59 +70,59 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 1: Layer Lock Keys
*
- * ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | | Esc | | | | | | | | | | | | | |
- * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media LOCK| | | | | | | | | | | | | | Media LOCK|
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * |Symbol LOCK| | | | | |------| |------| | | | | |Symbol LOCK|
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Caps LOCK| | | | | | | | | | | | | | Caps LOCK|
- * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | | | | | | | | | | | |
- * `----------------------------------' `----------------------------------'
- * ,-------------. ,-------------.
- * | | | | | |
- * ,------|------|------| |------+------+------.
- * | | | | | | | |
- * | | |------| |------| | |
- * | | | | | | | |
- * `--------------------' `--------------------'
+ * ,-------------------------------------------------------. ,-------------------------------------------------------.
+ * | | Esc | | | | | | | | | | | | Bspc | |
+ * |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------|
+ * | Media LOCK | | | | | | | | | | | | | | Media LOCK |
+ * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
+ * | Symbol LOCK | | | | | |------| |------| | | | | | Symbol LOCK |
+ * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
+ * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
+ * `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------'
+ * | | | | | | | | | | | |
+ * `------------------------------------' `------------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
*/
[LOCK] = KEYMAP(
// left hand
- KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_CAPS ,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_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_FN2 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_CAPS ,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
// 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_FN3
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN3
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
+ ,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
),
-/* Keymap 2: Symbol Momentary Layer
+/* Keymap 2: Symbol Shift Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
+ * | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
+ * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
+ * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
- * | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
+ * | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift |
* `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
* | | | | | | | 0 | . | = | + | Entr |
* `----------------------------------' `----------------------------------'
@@ -132,22 +134,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
-[SYMB_MO] = KEYMAP(
+[SYMB_SH] = KEYMAP(
// left hand
KC_FN2 ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
-,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
-,MO(SYMB_MO) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
+,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
+,MO(SYMB_SH) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN
// right hand
- ,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2
- ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
- ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_MO)
+ ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2
+ ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH)
+ ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_SH)
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
- ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
+ ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
,KC_HOME ,KC_END
,KC_PGUP
,KC_PGDN ,KC_BSPC ,KC_DEL
@@ -156,13 +158,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 3: Symbol Lock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | Lock | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | Lock |
+ * | LOCK | F1 | F2 | F3 | F4 | F5 | | | - | F6 | F7 | F8 | F9 | F10 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
+ * | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
+ * | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
- * | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
+ * | LShift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | RShift |
* `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
* | | | | | | | 0 | . | = | + | Entr |
* `----------------------------------' `----------------------------------'
@@ -174,22 +176,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
-[SYMB_TG] = KEYMAP( // layer 3 : return key for symbol lock layer
+[SYMB_LK] = KEYMAP(
// left hand
- MO(SYMB_XX) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
-,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
-,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
-,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
-,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_LEFT ,KC_RGHT
- ,KC_UP
- ,KC_SPC ,KC_ENT ,KC_DOWN
+ MO(SYMB_UN) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
+,MO(MDIA_SH) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
+,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
+,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_LEFT ,KC_RGHT
+ ,KC_UP
+ ,KC_SPC ,KC_ENT ,KC_DOWN
// right hand
- ,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_XX)
- ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
+ ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_UN)
+ ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_SH)
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(UNLOCK)
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
- ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
+ ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
,KC_HOME ,KC_END
,KC_PGUP
,KC_PGDN ,KC_BSPC ,KC_DEL
@@ -197,58 +199,58 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 4: Symbol Unlock Layer
*
- * ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | | Esc | | | | | | | | | | | | | |
- * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Unlock | | | | | | | | | | | | | | Unlock |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | | | | | |------| |------| | | | | | |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
- * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | | | | | | | | | | | |
- * `----------------------------------' `----------------------------------'
- * ,-------------. ,-------------.
- * | | | | | |
- * ,------|------|------| |------+------+------.
- * | | | | | | | |
- * | | |------| |------| | |
- * | | | | | | | |
- * `--------------------' `--------------------'
+ * ,------------------------------------------------------. ,------------------------------------------------------.
+ * | | Esc | | | | | | | | | | | | Bspc | |
+ * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
+ * | Media LOCK | | | | | | | | | | | | | | Media LOCK |
+ * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
+ * | UNLOCK | | | | | |------| |------| | | | | | UNLOCK |
+ * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
+ * | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
+ * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
*/
-[SYMB_XX] = KEYMAP(
+[SYMB_UN] = KEYMAP(
// left hand
- KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,TG(MDIA_TG) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_CAPS ,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_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TG(MDIA_TG)
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_TRNS ,KC_TRNS
- ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ),
-
-/* Keymap 5: Media Momentary Layer
+ KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,TG(MDIA_LK) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_FN1 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_CAPS ,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_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TG(MDIA_LK)
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+),
+
+/* Keymap 5: Media Shift Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
+ * | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
+ * | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
+ * | Symbol | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| Symbol |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
+ * | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
+ * | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
@@ -258,22 +260,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
-[MDIA_MO] = KEYMAP(
+[MDIA_SH] = KEYMAP(
// left hand
- KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
-,MO(MDIA_MO) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
-,MO(SYMB_MO) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
-,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
-,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
- ,KC_WSTP ,KC_WREF
- ,KC_WSCH
- ,KC_WBAK ,KC_TRNS ,KC_WHOM
+ KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO
+,MO(MDIA_SH) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U
+,MO(SYMB_SH) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
+,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D
+,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
+ ,KC_WSTP ,KC_WREF
+ ,KC_WSCH
+ ,KC_WBAK ,KC_NO ,KC_WHOM
// right hand
- ,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3
- ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_MO)
- ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_MO)
- ,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
- ,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3
+ ,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_SH)
+ ,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_SH)
+ ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT
+ ,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
,KC_MPRV ,KC_MNXT
,KC_VOLU
,KC_VOLD ,KC_MSTP ,KC_MPLY
@@ -282,15 +284,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 6: Media Lock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
+ * | LOCK | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
+ * | Media |ShutDn|LClick| MsUp |RClick|Vol Up|ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
+ * | | Sleep|MsLeft|MsDown|MsRght|Vol Dn|------| |------|NumLok| Left | Down | Right|MyComp| |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
+ * | LShift | | |MsDown| | Mute |ScrlDn| |ScrlDn| | End | Down | PgDn | | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
+ * | LCtrl| Meh |Hyper | LAlt | LGui | |Insert|Delete| Hyper| LAlt | LGui |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
@@ -300,22 +302,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
-[MDIA_TG] = KEYMAP(
+[MDIA_LK] = KEYMAP(
// left hand
- MO(MDIA_XX) ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
-,MO(UNLOCK) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
-,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
-,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
-,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
+ MO(MDIA_UN),KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_NO
+,MO(UNLOCK) ,KC_POWER ,KC_BTN1 ,KC_MS_U ,KC_BTN2 ,KC_VOLU ,KC_WH_U
+,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
+,KC_LSFT ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D
+,KC_LCTL ,MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI
,KC_WSTP ,KC_WREF
,KC_WSCH
- ,KC_WBAK ,KC_TRNS ,KC_WHOM
+ ,KC_WBAK ,KC_NO ,KC_WHOM
// right hand
- ,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_XX)
+ ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_UN)
,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(UNLOCK)
,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_NO
- ,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
- ,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_RSFT
+ ,GUI_T(KC_INS),ALT_T(KC_DEL),ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
,KC_MPRV ,KC_MNXT
,KC_VOLU
,KC_VOLD ,KC_MSTP ,KC_MPLY
@@ -324,9 +326,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 7: Media Unlock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | | Esc | | | | | | | | | | | | | |
+ * | | Esc | | | | | | | | | | | | Bspc | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Unlock | | | | | | | | | | | | | | Unlock |
+ * | UNLOCK | | | | | | | | | | | | | | UNLOCK |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | |------| |------| | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
@@ -342,34 +344,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
-[MDIA_XX] = KEYMAP(
+[MDIA_UN] = KEYMAP(
// left hand
- KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_FN1 ,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_CAPS ,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_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_FN1 ,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_CAPS ,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
// 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_FN1
- ,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_CAPS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
+ ,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_CAPS
+ ,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
),
/* Keymap 8: Unlock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | Unlock | | | | | | | | | | | | | | Unlock |
+ * | UNLOCK | | | | | | | | | | | | | | UNLOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | | | | | | | | | | | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
@@ -389,22 +391,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[UNLOCK] = KEYMAP(
// left hand
- KC_FN1 ,KC_ESC ,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_FN1 ,KC_ESC ,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
// right hand
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
- ,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_FN1
+ ,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
@@ -413,9 +415,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer
- ,[2] = ACTION_LAYER_INVERT(SYMB_TG, ON_PRESS) // FN2 - toggle to Symbols on press
- ,[3] = ACTION_LAYER_INVERT(MDIA_TG, ON_PRESS) // FN3 - toggle to Media on press
+ [1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer
+ ,[2] = ACTION_LAYER_INVERT(SYMB_LK, ON_PRESS) // FN2 - toggle to Symbols on press
+ ,[3] = ACTION_LAYER_INVERT(MDIA_LK, ON_PRESS) // FN3 - toggle to Media on press
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@@ -440,31 +442,34 @@ void matrix_init_user(void) {
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
+ uint8_t layer = biton32(layer_state);
- // do not change lights for locking and unlocking
- if(layer == UNLOCK || layer == LOCK || layer == SYMB_XX || layer == MDIA_XX) {
- return;
+ // shift or caps lock turns on red light
+ if((keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT))) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
+ ergodox_right_led_1_on();
+ } else {
+ ergodox_right_led_1_off();
}
- ergodox_board_led_off();
- ergodox_right_led_1_off();
- ergodox_right_led_2_off();
- ergodox_right_led_3_off();
-
- // caps lock turns on red light
- if(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
- ergodox_right_led_1_on();
+ // do not change lights while locking and unlocking
+ if(layer == LOCK || layer == SYMB_UN || layer == MDIA_UN || layer == UNLOCK) {
+ return;
}
- // symbol lock turns on green light
- if(layer == SYMB_MO || layer == SYMB_TG) {
+ //ergodox_board_led_off();
+
+ // symbol turns on green light
+ if(layer == SYMB_SH || layer == SYMB_LK) {
ergodox_right_led_2_on();
+ } else {
+ ergodox_right_led_2_off();
}
- // media lock turns on blue light
- if(layer == MDIA_MO || layer == MDIA_TG) {
+ // media turns on blue light
+ if(layer == MDIA_SH || layer == MDIA_LK) {
ergodox_right_led_3_on();
+ } else {
+ ergodox_right_led_3_off();
}
};
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.png
index 9c0e8bba39..0ae162431d 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.png
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt
index c7bd272eca..cc4c877ebd 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-media.txt
@@ -3,25 +3,25 @@
[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F16"],
[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
-[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#ffb063",a:4},"Scroll\n\n\n\n\n\nUp",{x:8.5},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
-[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{c:"#ffb063",a:4,h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"],
+[{y:-0.875,x:2.5},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
+[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
-[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5,c:"#e6e067",a:4},"Num\n\n\n\n\n\nLock"],
+[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
[{y:-0.875,c:"#cccccc",a:7,w:1.5},"",{c:"#e6e067",a:4},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.625,x:6.5,c:"#ffb063",a:4,h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
-[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#ffb063",a:4},"Scroll\n\n\n\n\n\nDown",{x:8.5},"End",{x:1},"Page\n\n\n\n\n\nDown"],
-[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5},""],
-[{y:-0.875,c:"#2277ff",a:4,fa:[0,1,0,0,0,0,0],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063"},"Delete"],
-[{y:-0.875,x:2.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{x:1,c:"#ff8500"},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert",{x:1,c:"#cccccc",a:7},""],
-[{y:-0.75,x:0.5,c:"#e6e067",a:4},"Mute","Vol\n\n\n\n\n\nDown",{x:14.5,c:"#cccccc",a:7},"",""],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#cfc82b",a:4},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
+[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#ffb063",a:4},"End",{x:1},"Page\n\n\n\n\n\nDown"],
+[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#cccccc",a:7},""],
+[{y:-0.875,c:"#2277ff",a:4,f2:1,w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#ffb063"},"Delete\n\n\nOption"],
+[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"],
+[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
[{x:2},"Home\n\n\nBrowser"],
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
-[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#cfc82b",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
+[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"]
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
index 2538fbeb30..b3101e5c04 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
Binary files differ
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
index 098a08d2f1..35efdba7d6 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
@@ -1,27 +1,27 @@
[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
-[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F6"],
+[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
-[{y:-0.375,x:3.5,c:"#c4e0bf"},"{",{x:10.5,c:"#89b087"},"8"],
-[{y:-0.875,x:2.5,c:"#c4e0bf"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
-[{y:-0.875,x:5.5,c:"#c4e0bf"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#c4e0bf"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#c4e0bf"},"(",{x:10.5,c:"#89b087"},"5"],
-[{y:-0.875,x:2.5,c:"#c4e0bf"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
-[{y:-0.875,x:5.5,c:"#c4e0bf"},"`",{x:6.5},"/"],
-[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#c4e0bf",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
+[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
+[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
-[{y:-0.75,x:3.5,c:"#c4e0bf"},"[",{x:10.5,c:"#89b087"},"2"],
-[{y:-0.875,x:2.5,c:"#c4e0bf"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
-[{y:-0.875,x:5.5,c:"#c4e0bf"},"~",{x:6.5},"\\"],
-[{y:-0.875,c:"#2277ff",f2:1,w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#c4e0bf"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5,c:"#89b087",a:4},"."],
-[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#89b087",a:4},"0",{x:1},"="],
-[{y:-0.75,x:0.5,c:"#cccccc",a:7},"","",{x:14.5,c:"#89b087",a:4},"+","Enter"],
+[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
+[{y:-0.875,c:"#2277ff",fa:[0,1,0,1,0,0,1],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"],
+[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"],
+[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"],
[{h:2},"Space",{h:2},"Enter","Up"],
[{x:2},"Down"],
[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
-[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
-[{x:-3},"Page\n\n\n\n\n\nDown"]
+[{x:-3,f:3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
+[{x:-3,f:3},"Page\n\n\n\n\n\nDown"]
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex b/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex
index b726e5e92a..8e2d5ce26d 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex
+++ b/keyboard/ergodox_ez/keymaps/ordinary/ordinary.hex
@@ -1,17 +1,17 @@
:100000000C945F040C94A3040C94A3040C94A30418
:100010000C94A3040C94A3040C94A3040C94A304C4
-:100020000C94A3040C94A3040C94BC0D0C948E0E9D
+:100020000C94A3040C94A3040C94C40D0C94960E8D
:100030000C94A3040C94A3040C94A3040C94A304A4
-:100040000C94A3040C9439230C94A3040C94A304DF
-:100050000C94A3040C94DB1C0C94A3040C94A30434
+:100040000C94A3040C9441230C94A3040C94A304D7
+:100050000C94A3040C94E31C0C94A3040C94A3042C
:100060000C94A3040C94A3040C94A3040C94A30474
:100070000C94A3040C94A3040C94A3040C94A30464
:100080000C94A3040C94A3040C94A3040C94A30454
:100090000C94A3040C94A3040C94A3040C94A30444
-:1000A0000C94A3040C94A3040C94A304F30E150F56
-:1000B0000010150F0010570F7A0F0010CF0FE20F2E
-:1000C000D612D61204130413461382138215821516
-:1000D0009A138215911491145C158215821570156E
+:1000A0000C94A3040C94A3040C94A304FB0E1D0F46
+:1000B00008101D0F08105F0F820F0810D70FEA0FEE
+:1000C000DE12DE120C130C134E138A138A158A15D6
+:1000D000A2138A159914991464158A158A1578152E
:1000E000000000810889248935812B850252E100B6
:1000F000E00000001E00140004001D0000774E0008
:100100001F001A0016001B00007F4C002000080092
@@ -32,29 +32,29 @@
:1001F00001000100010001000000010001000100F8
:1002000001000100010001000100010001000100E6
:1002100001000100010001000100010001000100D6
-:100220000100010001000100010001000100C30004
+:100220002A00010001000100010001000100C300DB
:10023000C200390001000000C20005520252E10074
:10024000010000003A001E022002220201005100BB
:100250003B001F0221022302010028003C002F0264
:1002600026022F0001002C003D0030022702300042
:10027000010052003E00240235003502000050000B
-:100280000100360200002B0000004F000100370281
+:100280000100360200002B0000004F002D00370255
:1002900000002B0200004A003F003102380031000C
-:1002A00000004D004000240021001E0027004B00EC
-:1002B0004100250022001F0037004C0042002600AC
-:1002C000230020002E002A004300380025022D00C4
-:1002D0002E024E00C20005520252E5002800000026
+:1002A00000004D004000240021001E0027784B0074
+:1002B0004100250022001F0037744C004200260038
+:1002C000230020002E7F2A004300380025022D0045
+:1002D0002E774E00C20005520252E5002871000040
:1002E000045205520852E100010000003A001E02CB
:1002F00020022202010051003B001F0221022302C2
:10030000010028003C002F0226022F0001002C00D3
:100310003D00300227023000010052003E0024025E
:1003200035003502000050000100360200002B00AD
-:1003300000004F000100370200002B0200004A00BD
+:1003300000004F002D00370200002B0200004A0091
:100340003F0031023800310000004D004000240021
-:1003500021001E0027004B004100250022001F0045
-:1003600037004C0042002600230020002E002A0007
-:100370004300380025022D002E024E000452055283
-:100380000852E5002800000001000654C1003900B1
+:1003500021001E0027784B004100250022001F00CD
+:1003600037744C0042002600230020002E7F2A0014
+:100370004300380025022D002E774E00045205520E
+:100380000852E5002871000001000654C100390040
:10039000010000002900010001000100010001002E
:1003A0000100010001000100010001000100010045
:1003B0000100010001000100010001000100010035
@@ -63,29 +63,29 @@
:1003E0000000010000000100010001000100010007
:1003F00000000100010001000100010001000100F6
:1004000001000100010001000100010001000100E4
-:1004100001000100010001000100010001000100D4
+:1004100001000100010001002A00010001000100AB
:100420000100010001000654C10039000100000074
-:10043000C30005520252E100A8000000440066001B
-:10044000A6000100AA00B50045000100F20001006D
-:10045000A90001006800F000F100F100F400B6000E
-:1004600069000100F3000100F500B4006A0001001A
-:10047000010001000000B8000100F9000000FA00CE
-:100480000000B9000100F9000000FA000000AC0013
-:100490006B004600530001000000AB006C004A00F6
-:1004A00050004D004900A9006D005200510051005C
-:1004B0004C00AE006E004B004F004E000100AD003E
-:1004C0006F00B100B30001000100AA00C300055293
-:1004D0000252E50001000000075208520000E1004E
-:1004E000A800000044006600A6000100AA00B500B4
-:1004F00045000100F2000100A90001006800F000C1
-:10050000F100F100F400B60069000100F300010001
-:10051000F500B4006A000100010001000000B8000D
-:100520000100F9000000FA000000B9000100F90024
-:100530000000FA000000AC006B0046005300010010
-:100540000000AB006C004A0050004D004900A900BB
-:100550006D005200510051004C00AE006E004B0087
-:100560004F004E000100AD006F00B100B30001006C
-:100570000100AA00075208520000E5000100000037
+:10043000C30005520252E100E000000044006600E3
+:10044000A60000000077B5004500F400F2000000AF
+:10045000007F00006800F000F100F100E200B6004B
+:100460006900F500F3000000E300B4006A00A90091
+:10047000AA00A8000000B8000000F9000000FA007F
+:100480000000B9000000F9000000FA000000AC0014
+:100490006B004600530000000000AB006C004A00F7
+:1004A00050004D004978A9006D00520051005100E4
+:1004B0004C74AE006E004B004F004E00007FAD004C
+:1004C0006F00B100B30000000077AA00C30005521E
+:1004D0000252E500E4000000075208520000E1006B
+:1004E000E000000044006600A60000000077B500B0
+:1004F0004500F400F2000000007F00006800F000FA
+:10050000F100F100E200B6006900F500F300000020
+:10051000E300B4006A00A900AA00A8000000B80027
+:100520000000F9000000FA000000B9000000F90026
+:100530000000FA000000AC006B0046005300000011
+:100540000000AB006C004A0050004D004978A90043
+:100550006D005200510051004C74AE006E004B0013
+:100560004F004E00007FAD006F00B100B3000000EF
+:100570000077AA00075208520000E500E4000000DE
:100580000100C10001003900010000002900010044
:100590000100010001000100010001000100010053
:1005A0000100010001000100010001000100010043
@@ -95,7 +95,7 @@
:1005E0000100010001000100000001000100010004
:1005F00001000100010001000100010001000100F3
:1006000001000100010001000100010001000100E2
-:100610000100010001000100010001000100C10012
+:100610002A00010001000100010001000100C100E9
:100620000100390001000000C100010001000100CB
:10063000010000002900010001000100010001008B
:1006400001000100010001000100010001000100A2
@@ -143,1047 +143,1048 @@
:1008E0008730904BA740B04BB9F41092EF011092B3
:1008F000F0011092F1011092F20114BE84B7877FCB
:1009000084BF88E10FB6F894809360001092600075
-:100910000FBEE0E0FFE3099511E0A0E0B1E0E6EFF3
-:10092000F9E402C005900D92A433B107D9F721E094
+:100910000FBEE0E0FFE3099511E0A0E0B1E0E6E002
+:10092000FAE402C005900D92A433B107D9F721E093
:10093000A4E3B1E001C01D92AF3EB207E1F70E940F
-:10094000020B0C94F9240C94000061110BC0FC0103
-:100950008281882321F085EE0E94631103C085EE19
-:100960000E942B1280E090E008950895CF9360914B
+:100940000A0B0C9401250C94000061110BC0FC01F2
+:100950008281882321F085EE0E946B1103C085EE11
+:100960000E94331280E090E008950895CF93609143
:10097000B1017091B2018091B3019091B4010E94D4
-:10098000071CC82F8130F9F08430E9F089EF8C0F13
-:100990008230C8F056985E9825982D9826982E9803
-:1009A00027982F980E943B1081FF02C0259A2D9A0C
-:1009B0008EEF8C0F823010F4269A2E9AC550C230DA
-:1009C00010F4279A2F9ACF9108950C94B604569854
-:1009D0005E9825982D9826982E9827982F988FEF17
-:1009E00090E0909389008093880090938B0080938F
-:1009F0008A0090938D0080938C00259A2D9A2FEF7A
-:100A000080E792E0215080409040E1F700C0000074
-:100A1000269A2E9A2FEF80E792E021508040904056
-:100A2000E1F700C00000279A2F9A2FEF80E792E0AD
-:100A3000215080409040E1F700C0000025982D989B
-:100A40002FEF80E792E0215080409040E1F700C016
-:100A5000000026982E982FEF80E792E021508040EA
-:100A60009040E1F700C0000027982F9856985E98B4
-:100A700025982D9826982E9827982F98089589EADA
-:100A80008093800089E08093810024982C983F987F
-:100A90008AB18F748AB96E98479A8BB1806B8BB983
-:100AA000769A0E94E7040C94B50480E280930001DA
-:100AB0008091340181110EC00E94A40581E08093D1
-:100AC00034012FEF83ED90E3215080409040E1F717
-:100AD00000C0000080E40E94AA05809300018111FB
-:100AE0002EC00E94D40580930001811128C00E946D
-:100AF000D40580930001811122C08FE30E94D405A8
-:100B00008093000181111BC00E94CC0580E40E94EB
-:100B1000AA0580930001811112C08CE00E94D405C7
-:100B20008093000181110BC00E94D40580930001C5
-:100B3000811105C08FE30E94D405809300010E94BB
-:100B4000CC058091000108951092B9008AE080934D
-:100B5000B800089594EA9093BC009091BC0097FF70
-:100B6000FCCF9091B900987F983021F0903111F02E
-:100B700081E008958093BB0084E88093BC0080915D
-:100B8000BC0087FFFCCF8091B900887F883111F0CD
-:100B9000803471F780E0089584E98093BC008091EF
-:100BA000BC0084FDFCCF08958093BB0084E8809353
-:100BB000BC008091BC0087FFFCCF9091B900987F6A
-:100BC00081E0983209F480E0089584E88093BC00C5
-:100BD0008091BC0087FFFCCF8091BB00089580917D
-:100BE0000001811115C080E40E94AA0580930001D4
-:100BF00081110CC082E10E94D40580930001811113
-:100C000005C08FEF0E94D405809300010E94CC059F
-:100C100084B1807F84B985B1807F85B98AB1837FB3
-:100C20008AB98BB1837F8BB93E98469808950E940C
-:100C30005505809300010E94EF0580B38C7080BB46
-:100C400081B3836F81BBE4E4F1E0A6E3B1E01192EC
-:100C50001D9281E0E235F807D1F70C943F05BF9271
-:100C6000CF92DF92EF92FF920F931F93CF93DF9378
-:100C700080910001882379F0809135018F5F809306
-:100C80003501811108C00E94550580930001811132
-:100C900002C00E94E70406E311E0C0E0D0E0DD24DA
-:100CA000D39482E0C82EEE24E394F12CC73000F5F3
-:100CB00080910001811162C080E40E94AA058093A6
-:100CC0000001811112C082E10E94D40580930001CD
-:100CD00081110BC0C7010C2E01C0880F0A94EAF7DE
-:100CE00080950E94D405809300010E94CC0546C0E7
-:100CF000CA30A1F028F4C83059F0C93061F005C0FD
-:100D0000CC3089F070F0CD3089F0209A289810C04E
-:100D1000219A29980DC0229A2A980AC0239A2B98C2
-:100D200007C0529A01C0539A5B9802C03E9A4698F7
-:100D3000E0EAEA95F1F78FB179995AC092E08170B3
-:100D40008D25892B7C9B02C090E001C094E0892B0B
-:100D50007D9B02C090E001C098E0892B7E9B02C081
-:100D600090E001C090E1892B9FB19095991F992740
-:100D7000991F9295990F907E892B0FC08091000149
-:100D800081114BC080E40E94AA0580930001882352
-:100D900089F1B12C0E94CC058B2DF8019081981718
-:100DA00019F08083C09201010E94EF0521960F5F28
-:100DB0001F4FCE30D10509F079CF809101018823F2
-:100DC00071F1815080930101882339F08FE99FE010
-:100DD0000197F1F700C0000022C0A4E4B1E0E6E30F
-:100DE000F1E081918D9391E0E434F907D1F717C0D8
-:100DF00090E0A5CF83E10E94D4058093000181118A
-:100E0000C8CF81E40E94AA05809300018111C1CF5F
-:100E10000E94E505B82EB094BDCF80E0BECF0E9401
-:100E2000E50481E0DF91CF911F910F91FF90EF904A
-:100E3000DF90CF90BF900895E82FF0E0EC5BFE4F7D
-:100E40008081089508958B3B910578F4883A910547
-:100E500040F5853A9105D0F48430910508F0B1C091
-:100E60008130910509F4ADC06BC0803E910508F456
-:100E700067C0883E910508F4A4C09C01205F310939
-:100E80002031310508F05CC090650895853A9105E0
-:100E900009F459C0863A910509F458C083E890E4F2
-:100EA0000895883A910509F454C0893A910509F4E6
-:100EB00053C08A3A910509F452C08B3A910509F45E
-:100EC00051C08C3A910509F450C08D3A910509F44E
-:100ED0004FC0803B910509F44EC08E3A910509F44C
-:100EE0004DC08F3A910509F44CC0813B910509F43E
-:100EF0004BC0823B910509F44AC0833B910509F43C
-:100F000049C0843B910509F448C0853B910509F42B
-:100F100047C0863B910509F446C0873B910509F41B
-:100F200045C0883B910509F444C0893B910509F40B
-:100F300043C08A3B910509F042C08AE296E40895D5
-:100F400080E090E0089581E890E4089582E890E4DC
-:100F5000089582EE94E4089589EE94E408958AEE6B
-:100F600094E4089585EB94E4089586EB94E4089561
-:100F700087EB94E408958CEC94E408958DEC94E46C
-:100F8000089583E895E408958AE895E4089582E950
-:100F900095E4089584E995E4089581E296E408953E
-:100FA00083E296E4089584E296E4089585E296E467
-:100FB000089586E296E4089587E296E4089580E035
-:100FC00094E40895089596E0799FF001112494E542
-:100FD000899FE00DF11D1124E60FF11DEE0FFF1F9B
-:100FE000E851FF4F859194910895880F991F805A79
-:100FF0009040FC01859194910895880F991F80522B
-:101000009F4FFC0185919491089526E0729FF00115
-:10101000112444E5849FE00DF11D1124E60FF11D1C
-:10102000EE0FFF1FE851FF4F25913491C9019A95AA
-:1010300081159F4110F4C9010895C901905281158D
-:10104000904128F4C9019F700E94FD070895C901CD
-:1010500090538115904120F4C9019927906C08950F
-:10106000211580E5380769F40E94A5159FEF24E358
-:101070004CE0915020404040E1F700C000000C944B
-:10108000001D213080E5380731F48091CD01816069
-:101090008093CD010895C90190558115904108F0C4
-:1010A00050C0832F99278F70992781309105D9F4EB
-:1010B000A9014370552702C0880F991F4A95E2F78E
-:1010C0009C68A90164E0440F551F6A95E1F7442725
-:1010D0005370842B952B73E0220F331F7A95E1F721
-:1010E000207633271DC08230910529F4922F88275E
-:1010F000816F906A089583309105A9F4A901437026
-:10110000552781E090E002C0880F991F4A95E2F7C9
-:101110009C6843E0220F331F4A95E1F7207E377029
-:10112000822B932B08950497F1F4A901437055275E
-:1011300081E090E002C0880F991F4A95E2F79A6813
-:10114000E8CFC90190578115904120F4C9019F70E3
-:1011500090620895C90190588115904120F4C90109
-:101160009F70906A0895203E3105E0F4203C3105DF
-:1011700058F52133310509F470C048F4293231059E
-:1011800009F464C02A32310509F46EC074C02933F1
-:101190003105F1F022383105D9F02533310509F454
-:1011A0004EC069C0233E310589F138F4203E310537
-:1011B000C1F0223E3105E1F05EC0263E310569F105
-:1011C000273E3105A9F157C0C9010E94F5070895CE
-:1011D0008091E00180FD02C081FF4DC080EE90E073
-:1011E0004BC08091E00180FFF9CF89E390E044C0DB
-:1011F0008091E00182FF0EC08091E00184FF03C076
-:1012000080E090E039C083EE90E036C08091E0014C
-:1012100082FFF2CF82EE90E02FC08091E00183FF49
-:101220000BC08091E00184FDEBCF87EE90E024C0FD
-:101230008091E00183FFF5CF86EE90E01DC08091A4
-:10124000E00185FF07C089E290E016C08091E001CF
-:1012500085FFF9CF85E390E00FC08091E00186FF24
-:1012600007C08AE290E008C08091E00186FFF9CFD4
-:1012700081E390E001C0C9010E9423070895089509
-:101280000C943F09809162010895CF93DF9300D0C1
-:101290001F92CDB7DEB72091E601243019F523E087
-:1012A00029839B838A832093E9008FEF9091E80044
-:1012B000815095FD06C095ED9A95F1F700008111DA
-:1012C000F5CF8091E80085FF0DC040E050E063E07D
-:1012D00070E0CE0101960E94AF0B8091E8008E77FE
-:1012E0008093E8000F900F900F90DF91CF910895B9
-:1012F000CF93DF9300D01F92CDB7DEB72091E601E8
-:10130000243021F522E029839B838A8383E0809324
-:10131000E9008FEF9091E800815095FD06C095EDB2
-:101320009A95F1F700008111F5CF8091E80085FFD3
-:101330000DC040E050E063E070E0CE0101960E94F5
-:10134000AF0B8091E8008E778093E8000F900F90AC
-:101350000F90DF91CF9108952091E6012430F1F4B0
-:1013600022E02093E9002FEF3091E800215035FD75
-:1013700006C035ED3A95F1F700002111F5CF209127
-:10138000E80025FF0BC040E050E065E070E00E94FF
-:10139000AF0B8091E8008E778093E8000895CF939B
-:1013A000DF93EC018091E601843009F046C0909112
-:1013B0000C019923D9F090910D019923B9F08093F4
-:1013C000E9008FEF9091E800815095FD06C095E10E
-:1013D0009A95F1F700008111F5CF8091E80085FF23
-:1013E0002CC040E050E060E170E017C081E08093E5
-:1013F000E9008FEF9091E800815095FD06C095EDD2
-:101400009A95F1F700008111F5CF8091E80085FFF2
-:1014100014C040E050E068E070E0CE010E94AF0BE5
-:101420008091E8008E778093E80080E1FE01A2E5DC
-:10143000B1E001900D928A95E1F7DF91CF91089587
-:101440008091E501811109C00E94410D0E949E0D0D
-:101450008091E20084608093E20008951092E5019B
-:10146000089508950C9426230E94971C0E942C2313
-:101470000E943B100C94400942E061EC81E00E9424
-:10148000BB0C42E061EC82E00E94BB0C42E061ECEC
-:1014900083E00E94BB0C42E161EC84E00C94BB0C45
-:1014A0008091E801833009F455C030F4813071F047
-:1014B000823009F48EC008958A3009F47AC08B30E6
-:1014C00009F460C0893009F09CC020C08091E70118
-:1014D000813A09F096C08091E800877F8093E80008
-:1014E0008091EB019091EC01892B21F060E080E08C
-:1014F00090E003C060E182E591E070E00E94F80BAB
-:101500008091E8008B778093E80008958091E7014F
-:10151000813209F076C08091EB019091EC01009747
-:1015200019F0039709F06DC08091E800877F8093E0
-:10153000E8008091E80082FD05C08091E6018111FC
-:10154000F8CF5FC08091F100809362018091E80044
-:101550008B7753C08091E701813A09F052C08091A6
-:10156000EB019091EC01892B09F04BC08091E800D0
-:10157000877F8093E8008091E80080FFFCCF809116
-:101580000C0136C08091E7018132D9F58091EB01E1
-:101590009091EC01892BA9F58091E800877F8093D9
-:1015A000E8000E94F00C8091E90180930C010C94FA
-:1015B000A5158091E701813221F58091E800877FB0
-:1015C0008093E8000E94F00C8091EA01809363010F
-:1015D00008958091E701813AA1F48091E800877F26
-:1015E0008093E8008091E80080FFFCCF8091630148
-:1015F0008093F1008091E8008E778093E8000C944E
-:10160000F00C089584B7877F84BF88E10FB6F89403
-:1016100080936000109260000FBE90E080E80FB6EB
-:10162000F89480936100909361000FBE0E948A102D
-:101630000E94410D0E949E0D8091E2008460809383
-:10164000E20078940E9419100E948C1082E091E0D0
-:101650000E9436100E9414238091E601853069F4BF
-:101660000E945A1C8091E4018823B1F30E94821CDD
-:10167000882391F30E94990BEFCF0E949210ECCF38
-:10168000292F332723303105A9F06CF4213031059F
-:1016900009F442C02230310509F043C08DE690E0E4
-:1016A00024E037E042C021323105C9F02232310551
-:1016B00019F137C099278130910541F082309105A9
-:1016C00041F0892B71F5E0E0F7E005C0E8EEF6E0C7
-:1016D00002C0E0EDF6E0849190E09F0126C0643006
-:1016E00000F5E62FF0E0EE0FFF1FEE5DFE4F2081CC
-:1016F000318189E090E019C0643098F4E62FF0E081
-:10170000DF01AA0FBB1FA65EBE4F2D913C91EA5E82
-:10171000FE4F808190E009C082E190E021E737E050
-:1017200004C080E090E020E030E0FA0131832083C3
-:10173000089580E189BD82E189BD09B400FEFDCF35
-:101740008091D8008F7D8093D8008091E0008260E6
-:101750008093E0008091E00081FDFCCF0895CF925E
-:10176000DF92EF92FF920F931F93CF93DF937C0151
-:101770008B01EA010E94110D811131C0209731F0D7
-:1017800088819981081B190BE80EF91EC12CD12CF8
-:101790000115110519F18091E80085FD14C08091B3
-:1017A000E8008E778093E800209741F08881998146
-:1017B0008C0D9D1D9983888385E011C00E94110DB9
-:1017C000882331F30CC0F70181917F018093F100F0
-:1017D00001501109FFEFCF1ADF0ADACF80E0DF9165
-:1017E000CF911F910F91FF90EF90DF90CF900895D0
-:1017F0002091ED013091EE012617370748F0611571
-:10180000710539F42091E8002E772093E80001C09B
-:10181000B901FC0120E061157105B9F18091E60183
-:10182000882309F440C0853009F43FC08091E80066
-:1018300083FD3DC08091E80082FF06C08091E800F2
-:1018400082FF26C080E008958091E80080FFE3CF0A
-:101850002091F3008091F20090E0922B61157105C8
-:1018600051F08830910538F421912093F1006150B6
-:1018700071090196F3CF21E0089709F020E08091EB
-:10188000E8008E778093E800C6CF2111C7CFD6CF6E
-:101890008091E601882339F0853039F08091E800A5
-:1018A00083FFCCCF04C082E0089583E0089581E0F7
-:1018B00008952091ED013091EE012617370748F089
-:1018C0006115710539F42091E8002E772093E80026
-:1018D00001C0B901FC0120E061157105C1F18091E1
-:1018E000E601882309F441C0853009F440C08091A5
-:1018F000E80083FD3EC08091E80082FF06C0809131
-:10190000E80082FF27C080E008958091E80080FF12
-:10191000E3CF2091F3008091F20090E0922B6115CB
-:10192000710559F08830910540F424912093F1001D
-:101930003196615071090196F2CF21E0089709F0C4
-:1019400020E08091E8008E778093E800C5CF2111D8
-:10195000C6CFD5CF8091E601882339F0853039F0A4
-:101960008091E80083FFCBCF04C082E0089583E03C
-:10197000089581E00895982F973058F59093E900E5
-:10198000981739F07091EC002091ED005091F00023
-:1019900003C0242F762F50E021FF19C03091EB00B7
-:1019A0003E7F3093EB003091ED003D7F3093ED00B2
-:1019B0003091EB0031603093EB007093EC0020939A
-:1019C000ED005093F0002091EE0027FF07C09F5FCD
-:1019D000D3CF8F708093E90081E0089580E008956F
-:1019E0008091E70187FD05C08091E80080FF0EC06F
-:1019F00012C08091E80082FD05C08091E60181114E
-:101A0000F8CF08958091E8008B7708C08091E601B7
-:101A10008111EACF08958091E8008E778093E800E5
-:101A200008958091E4009091E50045E62091EC0056
-:101A300020FF21C02091E80020FD21C02091E60177
-:101A4000222389F0253089F02091EB0025FD0FC07D
-:101A50002091E4003091E5002817390739F341500F
-:101A600041F0C901E3CF82E0089583E0089581E069
-:101A7000089584E008952091E80022FFDFCF80E000
-:101A800008950E94AF0D0E94B70DE0EEF0E0808156
-:101A900081608083E8EDF0E080818F77808319BCDE
-:101AA000A7EDB0E08C918E7F8C9380818F7E8083B8
-:101AB0001092E50108950F931F93CF93DF930E9437
-:101AC000AF0D0E94B70DC8EDD0E088818F77888375
-:101AD00088818068888388818F7D888319BC109273
-:101AE000E6011092E2011092E4011092E30100EE8F
-:101AF00010E0F80180818B7F8083888181608883FA
-:101B000042E060E080E00E94BB0CE1EEF0E080810A
-:101B10008E7F8083E2EEF0E080818160808380812F
-:101B200088608083F80180818E7F808388818061D6
-:101B30008883DF91CF911F910F910895E8EDF0E038
-:101B400080818F7E8083E7EDF0E0808181608083FB
-:101B500084E082BF81E08093E5010C945B0DE8EDA9
-:101B6000F0E080818E7F80831092E20008951092D1
-:101B7000DA001092E10008951F920F920FB60F92B3
-:101B800011242F933F934F935F936F937F938F9382
-:101B90009F93AF93BF93EF93FF938091E10082FFF8
-:101BA0000BC08091E20082FF07C08091E1008B7F33
-:101BB0008093E1000E9418108091DA0080FF1FC01E
-:101BC0008091D80080FF1BC08091DA008E7F8093C7
-:101BD000DA008091D90080FF0DC080E189BD82E1EB
-:101BE00089BD09B400FEFDCF81E08093E6010E942B
-:101BF000200A05C019BC1092E6010E942E0A8091AD
-:101C0000E10080FF19C08091E20080FF15C0809143
-:101C1000E2008E7F8093E2008091E20080618093F9
-:101C2000E2008091D80080628093D80019BC85E0E2
-:101C30008093E6010E94320A8091E10084FF30C067
-:101C40008091E20084FF2CC080E189BD82E189BDE2
-:101C500009B400FEFDCF8091D8008F7D8093D8001D
-:101C60008091E1008F7E8093E1008091E2008F7E81
-:101C70008093E2008091E20081608093E200809195
-:101C8000E201882311F084E007C08091E30087FF20
-:101C900002C083E001C081E08093E6010E94340A23
-:101CA0008091E10083FF29C08091E20083FF25C07D
-:101CB0008091E100877F8093E10082E08093E601DC
-:101CC0001092E2018091E1008E7F8093E10080918B
-:101CD000E2008E7F8093E2008091E2008061809339
-:101CE000E20042E060E080E00E94BB0C8091F000E6
-:101CF00088608093F0000E94310AFF91EF91BF91BC
-:101D0000AF919F918F917F916F915F914F913F9193
-:101D10002F910F900FBE0F901F9018951F920F924A
-:101D20000FB60F9211242F933F934F935F936F93AE
-:101D30007F938F939F93AF93BF93CF93EF93FF9333
-:101D4000C091E900CF708091EC001092E900809181
-:101D5000F000877F8093F00078940E94CA0E109262
-:101D6000E9008091F00088608093F000C093E90062
-:101D7000FF91EF91CF91BF91AF919F918F917F9103
-:101D80006F915F914F913F912F910F900FBE0F90E8
-:101D90001F9018951F93CF93DF93CDB7DEB7AA9707
-:101DA0000FB6F894DEBF0FBECDBFE7EEF1E0809135
-:101DB000F100819321E0EF3EF207C9F70E94500A3B
-:101DC0008091E80083FF1CC12091E7013091E80178
-:101DD000832F90E08A30910508F012C1FC01EA5A85
-:101DE000FF4F0C94AE24203881F0223809F008C14E
-:101DF0008091EB018F708093E9008091EB0085FB6F
-:101E0000882780F91092E90006C08091E301909143
-:101E1000E401911182609091E800977F9093E8002F
-:101E20008093F1001092F100C5C0822F8D7F09F0E0
-:101E3000E7C0222319F0223061F0E2C08091E9016D
-:101E4000813009F0DDC0333009F080E08093E40197
-:101E500028C08091E901811124C02091EB012F70ED
-:101E600009F4CEC02093E9008091EB0080FF19C0F7
-:101E70008091EB00333011F4806211C08061809357
-:101E8000EB0081E090E0022E01C0880F0A94EAF78F
-:101E90008093EA001092EA008091EB0088608093C2
-:101EA000EB001092E9008091E800877F86C0211145
-:101EB000A7C01091E9011F778091E3008078812B02
-:101EC0008093E3008091E800877F8093E8000E9480
-:101ED000F00C8091E80080FFFCCF8091E3008068E7
-:101EE0008093E300112311F083E001C082E080932E
-:101EF000E60186C02058223008F082C08091E901B6
-:101F00009091EA018C3D23E0920779F583E08A8382
-:101F10008AE289834FB7F894DE01139620E03EE011
-:101F200051E2E32FF0E050935700E49120FF03C00B
-:101F3000E295EF703F5FEF708E2F90E0EA3010F087
-:101F4000C79601C0C0968D939D932F5F243149F7AA
-:101F50004FBF8091E800877F8093E8006AE270E0DD
-:101F6000CE0101960E94F80B14C0AE014F5F5F4F87
-:101F70006091EB010E94400B009709F441C0209151
-:101F8000E800277F2093E800BC0189819A810E94A4
-:101F9000590C8091E8008B778093E80031C020389D
-:101FA00079F58091E800877F8093E8008091E201D5
-:101FB0008093F1008091E8008E778093E8000E9482
-:101FC000F00C1EC021111CC09091E9019230C0F4A8
-:101FD0008091E800877F8093E8009093E2010E945F
-:101FE000F00C8091E201811104C08091E30087FF31
-:101FF00002C084E001C081E08093E6010E943C0AB7
-:102000008091E80083FF0AC08091E800877F809379
-:10201000E8008091EB0080628093EB00AA960FB6F7
-:10202000F894DEBF0FBECDBFDF91CF911F91089511
-:102030000895CF938091E6018823B1F08091E90063
-:102040008F709091EC0090FF02C090E801C090E08A
-:10205000C92FC82B1092E9008091E80083FD0E94EF
-:10206000CA0ECF70C093E900CF9108959093690193
-:10207000809368010895E0916801F09169013097BB
-:1020800021F00190F081E02D099480E00895E09125
-:102090006801F0916901309721F00280F381E02D11
-:1020A00009940895E0916801F0916901309721F059
-:1020B0000480F581E02D0994089520916601309106
-:1020C00067018217930771F090936701809366010F
-:1020D000E0916801F0916901309721F00680F78165
-:1020E000E02D0994089520916401309165018217D3
-:1020F000930771F09093650180936401E09168010A
-:10210000F0916901309721F00084F185E02D099468
-:10211000089508950C9489100E949D1C0E94170632
-:102120000C94631DCF92DF92EF92FF920F931F9357
-:10213000CF93DF93CDB7DEB72B970FB6F894DEBF02
-:102140000FBECDBF0E942F063BE6E32E31E0F32EFB
-:1021500000E010E0C02E802F0E941C07F701D190F4
-:102160007F01D826B1F40F5F1F4F0E30110591F794
-:102170008FEF89838A831B820E94A61C8160782F3F
-:102180009D838C8349815A816B818D810E94351199
-:1021900041C09091CD0191FF04C08B870E9422071E
-:1021A0008B8520E030E04D2D50E0922FBA01022EB9
-:1021B00002C0759567950A94E2F760FF25C02E83EB
-:1021C000CF82EE24E394F12C02C0EE0CFF1C9A9512
-:1021D000E2F790E08E219F2121E0892B09F420E095
-:1021E00028870E94A61C8160782F9A8789874E8154
-:1021F0005F8168858A850E943511F801E559FE4F97
-:1022000080818E25808306C02F5F3F4F26303105A9
-:1022100061F6A9CF0E94472010916A010E943B10ED
-:102220001817A1F00E943B1080936A012B960FB6FD
-:10223000F894DEBF0FBECDBFDF91CF911F910F91FC
-:10224000FF90EF90DF90CF900C9440092B960FB643
-:10225000F894DEBF0FBECDBFDF91CF911F910F91DC
-:10226000FF90EF90DF90CF900895CF93DF93CDB79D
-:10227000DEB72B970FB6F894DEBF0FBECDBF4F83EE
-:10228000588769877A878B87DE01119686E0FD0182
-:1022900011928A95E9F785E0FE01379601900D923B
-:1022A0008A95E1F749815A816B817C818D819E817C
-:1022B0000E9471182B960FB6F894DEBF0FBECDBFEB
-:1022C000DF91CF910895CF93C82F882309F4C1C01F
-:1022D000823859F40E943B1081FDBBC089E30E9403
-:1022E0000E1B0E94D81B89E30CC0833879F40E942E
-:1022F0003B1080FDAEC083E50E940E1B0E94D81BE0
-:1023000083E50E944E1BCF910C94D81B843859F45E
-:102310000E943B1082FD9DC087E40E940E1B0E941C
-:10232000D81B87E4EECF8CEF8C0F813A48F48C2FCA
-:102330000E947C2281118DC08C2F0E940E1BE3CF46
-:1023400080E28C0F883048F4C77081E001C0880FAC
-:10235000CA95EAF70E948F1BD6CF8BE58C0F83308E
-:1023600078F4C53A29F0C63A31F482E890E005C025
-:1023700081E890E002C083E890E0CF910C945D107A
-:1023800088E58C0F833108F064C0C83A39F1C93A46
-:1023900041F1CA3A49F1CB3A51F1CC3A59F1CD3A2F
-:1023A00061F1C03B69F1CE3A71F1CF3A79F1C13BAD
-:1023B00081F1C23B89F1C33B91F1C43B99F1C53B2B
-:1023C000A1F1C63BA9F1C73BB1F1C83BB9F1C93B8B
-:1023D000C1F1CA3BC9F58AE292E038C082EE90E0D2
-:1023E00035C089EE90E032C08AEE90E02FC085EBD8
-:1023F00090E02CC086EB90E029C087EB90E026C0EF
-:102400008CEC90E023C08DEC90E020C083E891E05C
-:102410001DC08AE891E01AC082E991E017C084E902
-:1024200091E014C081E292E011C083E292E00EC01C
-:1024300084E292E00BC085E292E008C086E292E07E
-:1024400005C087E292E002C080E090E0CF910C945A
-:102450007310CF910895882309F44BC0823859F442
-:102460000E943B1081FF45C089E30E940E1B0E9421
-:10247000D81B89E30CC0833871F40E943B1080FFA5
-:1024800038C083E50E940E1B0E94D81B83E50E9482
-:102490004E1B0C94D81B843859F40E943B1082FFC9
-:1024A00028C087E40E940E1B0E94D81B87E4EFCF50
-:1024B0009CEF980F913A58F390E2980F983050F4AF
-:1024C000877091E001C0990F8A95EAF7892F0E94E1
-:1024D000951BDFCF9BE5980F933020F480E090E0D0
-:1024E0000C945D10885A833120F480E090E00C94C5
-:1024F00073100895882321F00E948F1B0C94D81B21
-:102500000895882321F00E94951B0C94D81B0895F0
-:10251000CF92DF92EF92FF920F931F93CF93DF93AF
-:10252000CDB7DEB728970FB6F894DEBF0FBECDBF8C
-:102530008C0185E0F801DE01119601900D928A95DB
-:10254000E1F7F80140813181F280258122952F70D9
-:1025500083819481892B31F03F3F31F481E04F3FFB
-:1025600019F403C081E001C080E080FDCBC2498343
-:102570003A8389819A812F830E94CC1A9E8388870F
-:102580000E94CB1A0E949E192F814E816885FF20E0
-:1025900029F00E94AC1B68854E812F81E42FE295C3
-:1025A000EF70F0E0E05AFF4F0C94AE24842F807F50
-:1025B000142F1F70882311F01295107FFF2059F0FF
-:1025C000112309F454C2812F68870E949F1B0E9427
-:1025D000D81B68854CC2862F0E942B12112309F448
-:1025E00091C2812F0E94A51B28960FB6F894DEBFDA
-:1025F0000FBECDBFDF91CF911F910F91FF90EF9054
-:10260000DF90CF900C94D81B342F307F842F8F70A5
-:10261000303211F08295807F662319F0613019F114
-:102620002BC0FF20B1F0222309F493C1213009F01F
-:1026300090C128960FB6F894DEBF0FBECDBFDF91D4
-:10264000CF911F910F91FF90EF90DF90CF900C945E
-:10265000BF1B222319F0213009F454C28E830E943B
-:10266000C21B8E8189C1FF2021F0223008F04AC2AE
-:1026700070C1211147C280C1FF2021F0222309F43B
-:1026800068C1F5C1222309F477C105C2242F26951C
-:102690002695237030E02115310521F021303105D8
-:1026A000C9F030C2FF2021F0862F942F937002C012
-:1026B00080E090E028960FB6F894DEBF0FBECDBF45
-:1026C000DF91CF911F910F91FF90EF90DF90CF900E
-:1026D0000C945D10FF2021F0862F942F937002C080
-:1026E00080E090E028960FB6F894DEBF0FBECDBF15
-:1026F000DF91CF911F910F91FF90EF90DF90CF90DE
-:102700000C947310862FFF2019F00E944F1F02C0F7
-:102710000E94B71F28960FB6F894DEBF0FBECDBF3C
-:10272000DF91CF911F910F91FF90EF90DF90CF90AD
-:102730000C943C20842F837009F076C0F110E2C124
-:10274000262F229526952770220F220F862F8F7015
-:10275000C82ED12CE12CF12C022E04C0CC0CDD1C97
-:10276000EE1CFF1C0A94D2F764FF10C06FE070E00B
-:1027700080E090E004C0660F771F881F991F2A959C
-:10278000D2F7609570958095909503C060E070E0F9
-:10279000CB01242F269526952370422F50E04230FE
-:1027A0005105D1F04330510559F16C297D298E290D
-:1027B0009F294130510541F128960FB6F894DEBFAC
-:1027C0000FBECDBFDF91CF911F910F91FF90EF9082
-:1027D000DF90CF900C94C3196C297D298E299F29F5
-:1027E00028960FB6F894DEBF0FBECDBFDF91CF9114
-:1027F0001F910F91FF90EF90DF90CF900C94DD1917
-:102800000E94C319C701B60128960FB6F894DEBF1F
-:102810000FBECDBFDF91CF911F910F91FF90EF9031
-:10282000DF90CF900C94A919FF2019F0842F8170AC
-:1028300001C08695882309F465C1262F2295269527
-:102840002770220F220F862F8F70C82ED12CE12CDB
-:10285000F12C022E04C0CC0CDD1CEE1CFF1C0A94D3
-:10286000D2F764FF10C06FE070E080E090E004C039
-:10287000660F771F881F991F2A95D2F7609570956C
-:102880008095909503C060E070E0CB01242F2695E1
-:1028900026952370422F50E042305105D1F043304D
-:1028A000510559F16C297D298E299F294130510507
-:1028B00041F128960FB6F894DEBF0FBECDBFDF9171
-:1028C000CF911F910F91FF90EF90DF90CF900C94DC
-:1028D000971A6C297D298E299F2928960FB6F8947E
-:1028E000DEBF0FBECDBFDF91CF911F910F91FF9043
-:1028F000EF90DF90CF900C94B11A0E94971AC70105
-:10290000B60128960FB6F894DEBF0FBECDBFDF919B
-:10291000CF911F910F91FF90EF90DF90CF900C948B
-:102920007D1A603FC9F118F4603E50F49BC0623FCD
-:1029300009F460C008F44AC0633F09F46FC092C054
-:10294000162F1F70842F8F71FF2099F00E94161A86
-:10295000812F28960FB6F894DEBF0FBECDBFDF9152
-:10296000CF911F910F91FF90EF90DF90CF900C943B
-:102970007A120E94371A812F28960FB6F894DEBF7C
-:102980000FBECDBFDF91CF911F910F91FF90EF90C0
-:10299000DF90CF900C948112FF20A1F02111B2C0E2
-:1029A000842F8F7128960FB6F894DEBF0FBECDBF6F
-:1029B000DF91CF911F910F91FF90EF90DF90CF901B
-:1029C0000C945C1A223008F09DC0EACFFF20A1F0E1
-:1029D000842F8F7128960FB6F894DEBF0FBECDBF3F
-:1029E000DF91CF911F910F91FF90EF90DF90CF90EB
-:1029F0000C94161AFF2061F3842F8F7128960FB65E
-:102A0000F894DEBF0FBECDBFDF91CF911F910F9124
-:102A1000FF90EF90DF90CF900C94371AFF2091F049
-:102A2000842F8F7128960FB6F894DEBF0FBECDBFEE
-:102A3000DF91CF911F910F91FF90EF90DF90CF909A
-:102A40000C94011A28960FB6F894DEBF0FBECDBFC6
-:102A5000DF91CF911F910F91FF90EF90DF90CF907A
-:102A60000C94F719FF20A1F0222309F4B1CF862F8F
-:102A700028960FB6F894DEBF0FBECDBFDF91CF9181
-:102A80001F910F91FF90EF90DF90CF900C94631106
-:102A9000222309F4B1CF862F28960FB6F894DEBF13
-:102AA0000FBECDBFDF91CF911F910F91FF90EF909F
-:102AB000DF90CF900C942B124F70C8010E94A50498
-:102AC00028960FB6F894DEBF0FBECDBFDF91CF9131
-:102AD0001F910F91FF90EF90DF90CF900C941E19F3
-:102AE0004F70C80128960FB6F894DEBF0FBECDBF59
-:102AF000DF91CF911F910F91FF90EF90DF90CF90DA
-:102B00000C94E20728960FB6F894DEBF0FBECDBF37
-:102B1000DF91CF911F910F91FF90EF90DF90CF90B9
-:102B200008950E94AC1B0E94BC1B0E94811B0E9446
-:102B3000D81B0E94E8200E943C2080E090E00E9488
-:102B40005D1080E090E00C9473100E949C1B0C942C
-:102B500091150E94CC1A292F22952F7030E02C302D
-:102B600031054CF42A3031056CF422503109223001
-:102B7000310590F407C02C30310551F02F3031056C
-:102B800039F00AC0803E10F0803F31F481E00895B2
-:102B900093FB882780F9089580E00895CF93DF9311
-:102BA00000D000D01F92CDB7DEB70F900F900F90DE
-:102BB0000F900F90DF91CF910895CF93DF9300D0C6
-:102BC00000D000D0CDB7DEB726960FB6F894DEBFA2
-:102BD0000FBECDBFDF91CF9108951F93CF93DF93A9
-:102BE000C091790116E080917A01C81799F0D0E080
-:102BF0001C9FF0011D9FF00D1124E558FE4F4081F0
-:102C0000518162817381848195810E94DD152196B5
-:102C1000C770E9CFDF91CF911F9108954091AB012B
-:102C20005091AC016091AD017091AE018091AF0106
-:102C30009091B0010C94DD15CF938091B0018295F5
-:102C40008F7009F05FC08091AD01882309F45AC0EC
-:102C500020917901A0917A016091AB017091AC0152
-:102C60008091AE019091AF0131E06F3F09F030E00B
-:102C7000B32FC6E02A1709F445C0009721F07F3F23
-:102C800021F44B2F03C041E001C040E030E040FDA3
-:102C900035C0C29FF001C39FF00D1124E558FE4FCF
-:102CA000418174132BC04081641328C042814111BB
-:102CB00025C0438154814817590710F441505109E8
-:102CC000481B590B483C5105C8F48091B0018F70E6
-:102CD00080618093B00186E0829FF001839FF00DB8
-:102CE0001124E058FE4F80818F70806180838BEAD1
-:102CF00091E00E948812CF910C94ED152F5F3F4F09
-:102D00002770B8CFCF910895CF92DF92EF92FF92C4
-:102D10000F931F93CF93DF93CDB7DEB762970FB6B4
-:102D2000F894DEBF0FBECDBF8C0185E0F801DE0157
-:102D30001D9601900D928A95E1F7D8014C9111965C
-:102D40005C91119712966C9112971396ED90FC90EE
-:102D500014977091AB01E091AC012091AE013091DC
-:102D6000AF012115310531F0EF3F31F481E07F3FB4
-:102D700019F403C081E001C080E0B82FB170CB2E00
-:102D800080FD6CC1D090AD01DD2009F4F5C0F0915B
-:102D9000B001E216F30638F0C701821B930B883CA2
-:102DA000910548F09BC0209530952E0D3F1D283C85
-:102DB000310508F093C08F2F807F09F052C0E513D2
-:102DC00014C0741312C0D62E61110FC0FF70F061D1
-:102DD000F093B0010E940E168BEA91E00E948812D7
-:102DE0008091B001F80185836CC1EF2831F05F3F1D
-:102DF00031F481E04F3F19F403C081E001C080E06D
-:102E000080FD03C081E0862701C080E0F82FF170CB
-:102E1000FF2E80FF1CC08091790120917A0136E05D
-:102E2000821709F428C190E0389FF001399FF00D16
-:102E30001124E558FE4F7181571306C07081471366
-:102E400003C07281671303C001968770E9CFD62E45
-:102E5000662309F436C18091B00181608093B0018E
-:102E600053C0E51308C0741306C0611104C0D80133
-:102E70001596FC93AEC04D875E878D859E856A8BC7
-:102E80000E94A9156A89882329F1D62E662311F19B
-:102E90002091B001822F82958F7090E002970CF400
-:102EA00060C08091AB019091AC0198878F831986A7
-:102EB000FB86EA862C87CE01079651C0E51731F1D3
-:102EC0004D875E878D859E856A8B0E94A9156A89CC
-:102ED00081112EC0C8010E948812A4C08F2F807F4C
-:102EE00069F77E2DF98AE88A89890E94CE158BEAD6
-:102EF00091E00E948812EBEAF1E086E0DF011D928A
-:102F00008A95E9F70E940E16D12CDBC07413D8CF36
-:102F10006111D6CFD8011596FC93C8010E94881282
-:102F2000EBEAF1E086E0DF011D928A95E9F7C9C07E
-:102F3000D62E662379F22091B001822F82958F7070
-:102F400090E0029774F08091AB019091AC019A836C
-:102F500089831B82FD82EC822E83CE0101960E9422
-:102F6000881286E0F801ABEAB1E001900D928A95F3
-:102F7000E1F70E941C166FC0E216F30628F0C701A5
-:102F8000821B930B9C0104C0209530952E0D3F1D94
-:102F9000283C310508F052C0D62E662309F49ACF9A
-:102FA000E5132CC074132AC08091B00180FD1DC0B0
-:102FB000982F92959F70C9F0D80115968C9315970C
-:102FC0009F3039F09F5F9295907F8F70892B159677
-:102FD0008C93C8010E94881286E0F801ABEAB1E048
-:102FE00001900D928A95E1F736C086E0F801ABEAD0
-:102FF000B1E001900D928A95E1F763C04D875E873D
-:103000008D859E850E94A915882379F086E0F801B8
-:10301000ABEAB1E001900D928A95E1F70E941C168F
-:103020000E940E16DD24D3944CC08091B0018160C3
-:103030008093B001C8010E94881243C07E2DF98A96
-:10304000E88A89890E94CE15EBEAF1E086E0DF018B
-:103050001D928A95E9F70E940E1633C0662309F483
-:1030600039CF4D875E878D859E850E94A91588235F
-:1030700009F430CFCBCF4D875E878D859E850E942A
-:10308000CC1A292F22952F7030E0223031052CF4F4
-:103090009F7041F0811106C00CC0243031052CF422
-:1030A0009F7049F4805E883020F0C8010E94881229
-:1030B000CF2CDC2C06C0D80115969C91907F91F7FF
-:1030C000F8CF8D2D62960FB6F894DEBF0FBECDBF40
-:1030D000DF91CF911F910F91FF90EF90DF90CF90F4
-:1030E00008951F93CF93DF93CDB7DEB72C970FB61C
-:1030F000F894DEBF0FBECDBF4F83588769877A87AC
-:103100008B879C87CE0107960E9484168823C1F086
-:103110002F8138858A859B85892B31F03F3F11F0BF
-:1031200080E003C02F3FE1F781E0811147C04F816C
-:10313000588569857A858B859C850E94DD153EC002
-:1031400086E0FE013796DE01119601900D928A9578
-:10315000E1F7FF81E8854A855B854115510531F02E
-:10316000EF3F31F481E0FF3F19F403C081E001C07B
-:1031700080E080FD23C020917A0130E0C9010196F2
-:10318000877099276091790170E086179707F1F1B0
-:10319000F983EA835D834C8396E0929FD001939FED
-:1031A000B00D1124A558BE4FFE01319601900D922D
-:1031B0009A95E1F780937A010E94ED1516E08091CF
-:1031C000790190917A01891779F1189FC001112432
-:1031D00085589E4F0E948416882331F1E091790131
-:1031E0001E9FF0011124E558FE4F408151816281FC
-:1031F0007381848195810E94DD158091790190E031
-:1032000001968770992780937901D9CF0E94A515DF
-:1032100010927A0110927901EBEAF1E086E0DF0189
-:103220001D928A95E9F7CACF2C960FB6F894DEBFA7
-:103230000FBECDBFDF91CF911F910895EF92FF9206
-:103240000F931F93CF93DF93FC01009709F46FC096
-:10325000F12CEE24E394EF0121968491843740F41D
-:10326000843008F055C0813081F0823021F15FC098
-:10327000853709F447C0C0F19CE7980F903708F0F4
-:1032800056C08F770E942B1245C08F010E5F1F4FD3
-:10329000FE01849190E2980F983050F48770FE2DD3
-:1032A00001C0FF0F8A95EAF78F2F0E94AF1B15C050
-:1032B0000E94631114C08F010E5F1F4FFE018491A5
-:1032C00090E2980F983068F48770FE2D01C0FF0FD0
-:1032D0008A95EAF78F2F0E94B51B0E94D81BE80140
-:1032E00019C00E942B12FBCFCF010296FE01C491A0
-:1032F000CC2361F0EFE9FFE03197F1F700C0000067
-:10330000C150F6CFCF010296FE01F490EC0102C04D
-:103310000E9463118F2D882341F0EFE9FFE0319780
-:10332000F1F700C000008150F6CFFE0194CFDF918D
-:10333000CF911F910F91FF90EF90089508956093A2
-:10334000B5017093B6018093B7019093B8010C94C6
-:1033500091150F931F930091B5011091B601209123
-:10336000B7013091B801062B172B282B392B00936E
-:10337000B5011093B6012093B7013093B8011F91A6
-:103380000F910C9491150F931F930091B50110911B
-:10339000B6012091B7013091B801062317232823E5
-:1033A00039230093B5011093B6012093B7013093F0
-:1033B000B8011F910F910C9491150F931F930091D9
-:1033C000B5011091B6012091B7013091B8010627DF
-:1033D0001727282739270093B5011093B6012093AA
-:1033E000B7013093B8011F910F910C949115109271
-:1033F000B1011092B2011092B3011092B4010C9479
-:10340000911541E050E060E070E004C0440F551FAA
-:10341000661F771F8A95D2F74093B1015093B2018E
-:103420006093B3017093B4010C94911541E050E0A6
-:1034300060E070E004C0440F551F661F771F8A9537
-:10344000D2F78091B1019091B201A091B301B091F6
-:10345000B401842B952BA62BB72B8093B1019093AD
-:10346000B201A093B301B093B4010C94911541E063
-:1034700050E060E070E004C0440F551F661F771FE6
-:103480008A95D2F740955095609570958091B101DD
-:103490009091B201A091B301B091B401842395231E
-:1034A000A623B7238093B1019093B201A093B301F7
-:1034B000B093B4010C94911541E050E060E070E0ED
-:1034C00004C0440F551F661F771F8A95D2F780915D
-:1034D000B1019091B201A091B301B091B4018427E0
-:1034E0009527A627B7278093B1019093B201A093A7
-:1034F000B301B093B4010C9491150F931F930091F5
-:10350000B1011091B2012091B3013091B401062BA9
-:10351000172B282B392B0093B1011093B201209364
-:10352000B3013093B4011F910F910C9491150F9337
-:103530001F930091B1011091B2012091B30130911C
-:10354000B40106231723282339230093B1011093D4
-:10355000B2012093B3013093B4011F910F910C94E9
-:1035600091150F931F930091B1011091B201209119
-:10357000B3013091B4010627172728273927009374
-:10358000B1011093B2012093B3013093B4011F91A4
-:103590000F910C9491150895CF92DF92EF92FF92C4
-:1035A0000F931F93CF93DF93EC01C090B501D090A0
-:1035B000B601E090B701F090B8018091B10190910F
-:1035C000B201A091B301B091B401C82AD92AEA2A64
-:1035D000FB2A0FE110E0B701A601002E04C076958A
-:1035E0006795579547950A94D2F740FF07C0BE01EB
-:1035F000802F0E9405088130910539F4015011098E
-:1036000050F7BE0180E00E940508DF91CF911F9125
-:103610000F91FF90EF90DF90CF90089590910C0163
-:103620009923D9F090910D019923B9F0982F96958F
-:10363000969596959F3088F5E0910E01F0910F01D7
-:10364000E90FF11D877021E030E001C0220F8A955B
-:10365000EAF78181822B8183089540910E01509178
-:103660000F0120E030E09FEFFA01E20FF31F6281CB
-:10367000681799F09F3F19F4611101C0922F2F5FD5
-:103680003F4F2E30310581F79F3F39F0FA01E90FA6
-:10369000F11D97FDFA9582830895089590910C018C
-:1036A0009923E1F090910D019923C1F0982F9695FF
-:1036B000969596959F3020F5E0910E01F0910F01BF
-:1036C000E90FF11D877021E030E001C0220F8A95DB
-:1036D000EAF72095818128232183089540910E01E6
-:1036E00050910F0120E030E0FA01E20FF31F9281C8
-:1036F000981301C012822F5F3F4F2E303105A1F782
-:10370000089581E090E0E0910E01F0910F01E80F43
-:10371000F91F1082019680319105A9F708959091C3
-:10372000CC01982B9093CC01089580959091CC0179
-:1037300098239093CC0108951092CC010895909114
-:10374000CB01982B9093CB01089580959091CB015C
-:1037500098239093CB0108951092CB0108959091F6
-:10376000CA01982B9093CA01089580959091CA013F
-:1037700098239093CA0108951092CA0108958093E6
-:10378000B90108951092B901089540910E01509128
-:103790000F0120E030E080E0FA01E20FF31F918199
-:1037A00091118F5F2F5F3F4F2F303105A9F708959B
-:1037B000E0910E01F0910F018091CC018083E091A6
-:1037C0000E01F0910F0180819091CB01892B8083B4
-:1037D000E0910E01F0910F0180819091CA01892B37
-:1037E00080839091B901992361F0E0910E01F091ED
-:1037F0000F018081892B80830E94C51B811110924B
-:10380000B90180910E0190910F010C944710CF9255
-:10381000DF92EF92FF920F931F936C01EE24FF242F
-:10382000C114D104E104F10421F46B017C0180E0B6
-:1038300001C080E133272F2D1E2D0D2D01151105FF
-:103840002105310519F0885F68017901970186012A
-:10385000A4E03695279517950795AA95D1F70115F8
-:1038600011052105310519F08C5F68017901970177
-:103870008601F2E03695279517950795FA95D1F7C9
-:10388000011511052105310519F08E5F68017901D7
-:10389000B701A6017695679557954795452B462B19
-:1038A000472B09F08F5F1F910F91FF90EF90DF90F2
-:1038B000CF9008958091E601843009F11092CE01F5
-:1038C00020E488E190E00FB6F894A895809360001A
-:1038D0000FBE2093600083B7817F846083BF83B76E
-:1038E000816083BF7894889583B78E7F83BF88E19A
-:1038F0000FB6F89480936000109260000FBE089598
-:1039000008950895CF930E94801C0E942F060E9464
-:10391000811CC0E08C2F0E941C07811105C0CF5F65
-:10392000CE30C1F780E001C081E0CF9108950E94C0
-:10393000A5150E943B100C94400982E084BD93E0E1
-:1039400095BD9AEF97BD80936E0008952FB7F894B8
-:103950008091CF019091D001A091D101B091D2017D
-:103960002FBF0895CF92DF92EF92FF920F931F9394
-:103970002FB7F8944091CF015091D0016091D101BF
-:103980007091D2012FBF6A017B01EE24FF248C01CC
-:1039900020E030E0C016D106E206F30610F44150F4
-:1039A0005109481B590BCA011F910F91FF90EF90CD
-:1039B000DF90CF9008951F920F920FB60F921124AF
-:1039C0008F939F93AF93BF938091CF019091D0013C
-:1039D000A091D101B091D2010196A11DB11D80939A
-:1039E000CF019093D001A093D101B093D201BF91A8
-:1039F000AF919F918F910F900FBE0F901F901895D0
-:103A00000E94410DF8942FEF87EA91E62150804003
-:103A10009040E1F700C0000087E090EBDC0180936C
-:103A2000EF019093F001A093F101B093F2012CE02B
-:103A300088E190E00FB6F894A895809360000FBEDF
-:103A400020936000FFCFEF92FF920F931F93CF93CD
-:103A5000DF93E82EF12C8F2D0E941C07C0E0D0E0F0
-:103A6000082F10E098010C2E02C0359527950A9476
-:103A7000E2F720FD05C02196C630D10599F709C0AF
-:103A80006C2F7F2D80E00E94E307E812F4CF81E0E5
-:103A900005C0F3948EE0F812DECF80E0DF91CF9185
-:103AA0001F910F91FF90EF900895CF93C82F8CE254
-:103AB0000E94231D882321F08C2FCF910C94231D6D
-:103AC00080E0CF910895CF930E94A81E811102C07B
-:103AD0000E948E1EC5E6C15049F00E942F068FE35A
-:103AE0009CE90197F1F700C00000F5CF89E20E9440
-:103AF000551D811111C18AE20E94551D81110E943C
-:103B00008E1E85E00E94551D81110E94001D0E949D
-:103B1000B31E8093CD0187E00E94551D882399F143
-:103B20008BE10E94551D882351F09091CD0191FBAE
-:103B3000882780F921E0822780FB91F922C08EE05E
-:103B40000E94551D882351F09091CD0192FB88274A
-:103B500080F921E0822780FB92F913C080E10E9466
-:103B6000551D9091CD01882341F093FB882780F962
-:103B700021E0822780FB93F904C0892F809580FB88
-:103B800090F99093CD018091CD010E94B71E0E94C3
-:103B9000C51E8093E00180EE0E94551D882341F0F0
-:103BA0008091E001982F909590FB80F98093E0013F
-:103BB00089E30E94551D882359F09091E00191FB03
-:103BC000882780F921E0822780FB91F99093E0011A
-:103BD00082EE0E94551D882359F09091E00192FBDE
-:103BE000882780F921E0822780FB92F99093E001F9
-:103BF00086EE0E94551D882359F09091E00193FBB9
-:103C0000882780F921E0822780FB93F99093E001D7
-:103C100083EE0E94551D882359F09091E00194FB9A
-:103C2000882780F921E0822780FB94F99093E001B6
-:103C300085E30E94551D882359F09091E00195FB82
-:103C4000882780F921E0822780FB95F99093E00195
-:103C500081E30E94551D882359F09091E00196FB65
-:103C6000882780F921E0822780FB96F99093E00174
-:103C700081E10E94551D882359F09091E00197FB46
-:103C8000882780F921E0822780FB97F99093E00153
-:103C90008091E0010E94C91E8091E00187FB882786
-:103CA00080F980930D0187E20E94551DC82F8EE197
-:103CB0000E94551D8111C2608FE10E94551D811126
-:103CC000C46080E20E94551D8111C86081E20E949B
-:103CD000551D8111C06182E20E94551D8111C06293
-:103CE00083E20E94551D8111C06484E20E94551D2B
-:103CF000882311F0C06802C0CC2329F08C2F0E94C9
-:103D0000C01E6C2F03C00E94BC1E682F70E080E0B4
-:103D100090E0CF910C949F19CF9108956DEE7EEFB6
-:103D200080E090E00E94E42460E082E090E00E9465
-:103D3000D62460E083E090E00E94D62460E084E036
-:103D400090E00E94D62460E085E090E00C94D624B8
-:103D500080E090E00E94D02421E08D3E9E4F09F04B
-:103D600020E0822F089582E090E00C94C824682F10
-:103D700082E090E00C94D62483E090E00C94C82478
-:103D8000682F83E090E00C94D62484E090E00C94BB
-:103D9000C824682F84E090E00C94D6248091D5014B
-:103DA00080FF0BC06091130185E0689FB001112472
-:103DB00075956795759567952AC081FF09C06091D3
-:103DC000130185E0689FB0011124759567951FC0A8
-:103DD00082FF07C06091130185E0689FB001112444
-:103DE00016C04091D6014423C9F0609112014617D4
-:103DF00088F72091130185E0289F90011124429FAC
-:103E0000C001439F900D112470E00E949A246038F5
-:103E1000710540F46115710539F002C065E070E08C
-:103E2000862F08958FE7089581E008958091D50148
-:103E300080FF08C06091110170E0759567957595D8
-:103E4000679521C081FF06C06091110170E07595F2
-:103E5000679519C082FF04C06091110170E010C025
-:103E60008091D6018823C1F0609110018617A0F7D8
-:103E700090911101989FC001112470E00E949A2432
-:103E80006038710528F46115710521F0862F0895B9
-:103E90008FE7089581E0089561E070E0F4CF803FFE
-:103EA00021F40E94CE1E819504C0813F29F40E9416
-:103EB000CE1E8093D9010895823F21F40E94CE1E28
-:103EC000819504C0833F29F40E94CE1E8093D801BF
-:103ED0000895893F19F40E94161F05C08A3F31F4E6
-:103EE0000E94161F81958093DA0108958B3F21F47B
-:103EF0000E94161F819504C08C3F29F40E94161F52
-:103F00008093DB010895843F21F48091D701816083
-:103F100017C0853F21F48091D701826011C0863F90
-:103F200021F48091D70184600BC0873F21F48091F8
-:103F3000D701886005C0883F31F48091D701806146
-:103F40008093D70108958D3F21F48091D501816040
-:103F50000BC08E3F21F48091D501826005C08F3F58
-:103F600029F48091D50184608093D5010895803F24
-:103F700039F48091D90187FF6CC01092D90169C0D2
-:103F8000813F29F48091D9011816BCF362C0909149
-:103F9000D801823F29F497FF5CC01092D80159C024
-:103FA000833F19F41916CCF354C0893F41F4809132
-:103FB000DA0118160CF04DC01092DA014AC08A3F9F
-:103FC00029F48091DA0187FF44C0F6CF8B3F39F4A2
-:103FD0008091DB0187FF3DC01092DB013AC08C3F2E
-:103FE00029F48091DB011816BCF333C0843F21F41F
-:103FF0008091D7018E7F17C0853F21F48091D70132
-:104000008D7F11C0863F21F48091D7018B7F0BC03B
-:10401000873F21F48091D701877F05C0883F31F425
-:104020008091D7018F7E8093D70113C08D3F21F4FB
-:104030008091D5018E7F0BC08E3F21F48091D501F8
-:104040008D7F05C08F3F29F48091D5018B7F8093B0
-:10405000D5018091D80181110EC08091D9018111C3
-:104060000AC08091DA01811106C08091DB018111C3
-:1040700002C01092D601089587ED91E00E9452107F
-:104080000E94A61C9093D4018093D30108951F939E
-:10409000CF93DF938091D3019091D4010E94B21C01
-:1040A0004091D601442321F02091140130E006C054
-:1040B000209115015AE0259F900111248217930742
-:1040C00008F482C08091D8011091D901D091DA0111
-:1040D000C091DB01811107C0111105C0D11103C0CE
-:1040E000CC2309F471C04F3F19F04F5F4093D601C4
-:1040F000181624F40E94CE1E8093D8018091D80116
-:1041000087FF05C00E94CE1E81958093D8011116AD
-:1041100024F40E94CE1E8093D9018091D90187FF9B
-:1041200005C00E94CE1E81958093D9016091D8016F
-:10413000662339F11091D901112319F1772767FD11
-:104140007095872F972F0E94AB2323E333E343E33C
-:104150005FE30E940F240E9478236093D801612FAF
-:10416000772767FD7095872F972F0E94AB2323E356
-:1041700033E343E35FE30E940F240E9478236093BC
-:10418000D9011D1624F40E94161F8093DA01809134
-:10419000DA0187FF05C00E94161F81958093DA011E
-:1041A0001C1624F40E94161F8093DB018091DB0112
-:1041B00087FF05C00E94161F81958093DB01DF9168
-:1041C000CF911F910C943C20DF91CF911F910895C6
-:1041D000E7EDF1E085E0DF011D928A95E9F71092A5
-:1041E000D6011092D5010895833081F128F48130F1
-:1041F00059F08230D1F00895853009F449C0B8F102
-:10420000863009F456C0089520911501862F90E05C
-:10421000820F911D8F3F910520F4620F609315016D
-:1042200008958FEF80931501089520911401862F32
-:1042300090E0820F911D8F3F910520F4620F6093F3
-:10424000140108958FEF80931401089520911301B4
-:10425000862F90E0820F911D8F3F910520F4620F11
-:104260006093130108958FEF8093130108952091B7
-:104270001201862F90E0820F911D8F3F910520F44F
-:10428000620F6093120108958FEF809312010895D9
-:1042900020911101862F90E0820F911D8F3F910593
-:1042A00020F4620F6093110108958FEF8093110144
-:1042B000089520911001862F90E0820F911D8F3F6D
-:1042C000910520F4620F6093100108958FEF8093A1
-:1042D00010010895833011F128F4813049F08230C3
-:1042E00091F00895853081F120F18630C1F1089573
-:1042F00080911501681720F4861B8093150108959D
-:1043000010921501089580911401681720F4861BFE
-:10431000809314010895109214010895809113015F
-:10432000681720F4861B80931301089510921301DF
-:10433000089580911201681720F4861B8093120162
-:10434000089510921201089580911101681720F4C8
-:10435000861B809311010895109211010895809198
-:104360001001681720F4861B8093100108951092A5
-:10437000100108958D3109F442C020F58E3009F402
-:1043800079C070F4873009F45EC020F4863009F4F7
-:1043900042C033C08830D1F18B3009F4A7C02DC0A2
-:1043A000863109F4A3C038F4803109F46DC081313D
-:1043B00009F47BC022C0893109F498C08B3109F41B
-:1043C0004FC01BC0853309F479C048F4873209F423
-:1043D00075C008F478C0893209F470C00EC0833407
-:1043E00038F48A3308F071C0883309F47FC005C0FF
-:1043F000833409F463C08834C1F080E008950E94DA
-:1044000032230E943B100E94400970C00E94B31EDC
-:104410000E94C51E6BC08091CD01817F8E7F8093ED
-:10442000CD0181E08093DD0108950E94A5152FEF55
-:1044300083ED90E3215080409040E1F700C0000000
-:104440000E94001D53C09091CD01892F817090FF73
-:1044500003C0917F9E7F26C091609093CD0146C09E
-:104460009091CD0191FB882780F921E0822780FB84
-:1044700091F913C09091CD0192FB882780F921E03A
-:10448000822780FB92F909C09091CD0193FB882788
-:1044900080F921E0822780FB93F99093CD01882356
-:1044A00029F191609093CD0108950E94A515809106
-:1044B0000D0191E0892780930D0118C061E070E043
-:1044C00080E090E00FC023EE01C027EC280F61E0F0
-:1044D00070E080E090E004C0660F771F881F991F8E
-:1044E0002A95D2F70E949F190E94A51581E0089590
-:1044F00080E0089580E00895CF93C82F8091DD017A
-:10450000813079F018F08230D1F184C0A0910E0191
-:10451000B0910F018C91813169F0823209F07CC039
-:1045200009C0A0910E01B0910F018C91813111F061
-:10453000823249F48C2F0E94782281111DC08C2F69
-:104540000E94BA211AC08C2F0E947A22811114C0B5
-:10455000C43179F048F4CB3079F0C03109F060C053
-:1045600082E08093DD0108C0C93219F0C83321F020
-:1045700057C01092DD0154C081E0817053C0C93230
-:1045800089F118F5C43171F1A8F4C73009F046C0BB
-:104590008AE08093150194E19093140193E0909345
-:1045A00013018093120188E08093110188E28093C7
-:1045B000100134C0CE51C63088F5EC2FF0E0E65D36
-:1045C000FE4F80818093DC0129C0CE34E9F020F4D5
-:1045D000CB3421F56AE013C0C13579F0C235F1F46E
-:1045E00061E00DC08091DC01882319F01092DC019C
-:1045F00015C081E08093DD0115C061E006C08091A7
-:10460000DC010E94F4200AC06AE08091DC010E9473
-:104610006A2104C01092DD0180E004C081E002C084
-:1046200080E0ABCFCF910895E1E8F0E08081886031
-:1046300080838081816080838FB7F89493E090932A
-:10464000890090ED909388008FBF0895EFE6F0E029
-:104650008081826080830895EFE6F0E080818D7F25
-:1046600080830895EFE6F0E0808192E089278083DF
-:1046700008951F920F920FB60F9211242F933F931C
-:104680004F935F936F937F938F939F93AF93BF935A
-:10469000EF93FF938091DE019091DF01019690935B
-:1046A000DF018093DE01811103C082E00E94400996
-:1046B000E091DF01E695E695F0E0E258F74FE491EE
-:1046C0008091DE018E1303C080E00E944009FF91BB
-:1046D000EF91BF91AF919F918F917F916F915F917A
-:1046E0004F913F912F910F900FBE0F901F901895F3
-:1046F00004D06894B1118DC0089570D088F09F5790
-:1047000090F0B92F9927B751A0F0D1F0660F771F1D
-:10471000881F991F1AF0BA95C9F712C0B13081F0FD
-:1047200077D0B1E0089574C0672F782F8827B85FDD
-:1047300039F0B93FCCF3869577956795B395D9F75E
-:104740003EF490958095709561957F4F8F4F9F4F68
-:104750000895E89409C097FB3EF490958095709574
-:1047600061957F4F8F4F9F4F9923A9F0F92F96E9BD
-:10477000BB279395F695879577956795B795F11132
-:10478000F8CFFAF4BB0F11F460FF1BC06F5F7F4FCF
-:104790008F4F9F4F16C0882311F096E911C07723E1
-:1047A00021F09EE8872F762F05C0662371F096E8EA
-:1047B000862F70E060E02AF09A95660F771F881FB9
-:1047C000DAF7880F9695879597F9089557FD9058D1
-:1047D000440F551F59F05F3F71F04795880F97FBC5
-:1047E000991F61F09F3F79F087950895121613067F
-:1047F0001406551FF2CF4695F1DF08C016161706AE
-:104800001806991FF1CF86957105610508940895E2
-:10481000E894BB2766277727CB0197F908950BD03B
-:1048200078C069D028F06ED018F0952309F05AC0EE
-:104830005FC01124EECFCADFA0F3959FD1F3950F8F
-:1048400050E0551F629FF001729FBB27F00DB11D14
-:10485000639FAA27F00DB11DAA1F649F6627B00DA4
-:10486000A11D661F829F2227B00DA11D621F739F8D
-:10487000B00DA11D621F839FA00D611D221F749F9B
-:104880003327A00D611D231F849F600D211D822FE2
-:10489000762F6A2F11249F5750408AF0E1F0882329
-:1048A0004AF0EE0FFF1FBB1F661F771F881F915036
-:1048B0005040A9F79E3F510570F014C0AACF5F3F4A
-:1048C000ECF3983EDCF3869577956795B795F79569
-:1048D000E7959F5FC1F7FE2B880F911D96958795F1
-:1048E00097F9089597F99F6780E870E060E0089570
-:1048F0009FEF80EC089500240A94161617061806F8
-:104900000906089500240A941216130614060506D3
-:104910000895092E0394000C11F4882352F0BB0F64
-:1049200040F4BF2B11F460FF04C06F5F7F4F8F4FC7
-:104930009F4F089597FB072E16F4009407D077FD3C
-:1049400009D00E94B42407FC05D03EF490958195CF
-:104950009F4F0895709561957F4F0895EE0FFF1F4B
-:104960000590F491E02D0994AA1BBB1B51E107C0EF
-:10497000AA1FBB1FA617B70710F0A61BB70B881FEF
-:10498000991F5A95A9F780959095BC01CD0108957E
-:10499000F999FECF92BD81BDF89A992780B5089507
-:1049A000A8E1B0E042E050E00C94EB24262FF99906
-:1049B000FECF1FBA92BD81BD20BD0FB6F894FA9A02
-:1049C000F99A0FBE019608950E94D624272F0C94C1
-:1049D000D724DC01CB01FC01F999FECF06C0F2BD62
-:1049E000E1BDF89A319600B40D9241505040B8F7AD
-:0649F0000895F894FFCFCA
-:1049F60020024209CF09AC09780945090101BA012B
-:104A060028080A03140A3F4D36393F08F207BC0747
-:104A1600830716072F0748076107010203040506E7
-:044A26000708090074
+:100980000F1CC82FE0910E01F0910F01808182723F
+:1009900019F0259A2D9A06C00E94431081FDF9CFC7
+:1009A00025982D98C130B9F0C430A9F089EF8C0F8B
+:1009B000823088F08EEF8C0F823018F4269A2E9AAF
+:1009C00002C026982E98C550C23018F4279A2F9A44
+:1009D00002C027982F98CF9108950C94B60456988A
+:1009E0005E9825982D9826982E9827982F988FEF07
+:1009F00090E0909389008093880090938B0080937F
+:100A00008A0090938D0080938C00259A2D9A2FEF69
+:100A100080E792E0215080409040E1F700C0000064
+:100A2000269A2E9A2FEF80E792E021508040904046
+:100A3000E1F700C00000279A2F9A2FEF80E792E09D
+:100A4000215080409040E1F700C0000025982D988B
+:100A50002FEF80E792E0215080409040E1F700C006
+:100A6000000026982E982FEF80E792E021508040DA
+:100A70009040E1F700C0000027982F9856985E98A4
+:100A800025982D9826982E9827982F98089589EACA
+:100A90008093800089E08093810024982C983F986F
+:100AA0008AB18F748AB96E98479A8BB1806B8BB973
+:100AB000769A0E94EF040C94B50480E280930001C2
+:100AC0008091340181110EC00E94AC0581E08093B9
+:100AD00034012FEF83ED90E3215080409040E1F707
+:100AE00000C0000080E40E94B205809300018111E3
+:100AF0002EC00E94DC0580930001811128C00E9455
+:100B0000DC0580930001811122C08FE30E94DC0587
+:100B10008093000181111BC00E94D40580E40E94D3
+:100B2000B20580930001811112C08CE00E94DC05A7
+:100B30008093000181110BC00E94DC0580930001AD
+:100B4000811105C08FE30E94DC05809300010E94A3
+:100B5000D4058091000108951092B9008AE0809335
+:100B6000B800089594EA9093BC009091BC0097FF60
+:100B7000FCCF9091B900987F983021F0903111F01E
+:100B800081E008958093BB0084E88093BC0080914D
+:100B9000BC0087FFFCCF8091B900887F883111F0BD
+:100BA000803471F780E0089584E98093BC008091DF
+:100BB000BC0084FDFCCF08958093BB0084E8809343
+:100BC000BC008091BC0087FFFCCF9091B900987F5A
+:100BD00081E0983209F480E0089584E88093BC00B5
+:100BE0008091BC0087FFFCCF8091BB00089580916D
+:100BF0000001811115C080E40E94B20580930001BC
+:100C000081110CC082E10E94DC05809300018111FA
+:100C100005C08FEF0E94DC05809300010E94D4057F
+:100C200084B1807F84B985B1807F85B98AB1837FA3
+:100C30008AB98BB1837F8BB93E98469808950E94FC
+:100C40005D05809300010E94F70580B38C7080BB26
+:100C500081B3836F81BBE4E4F1E0A6E3B1E01192DC
+:100C60001D9281E0E235F807D1F70C944705BF9259
+:100C7000CF92DF92EF92FF920F931F93CF93DF9368
+:100C800080910001882379F0809135018F5F8093F6
+:100C90003501811108C00E945D058093000181111A
+:100CA00002C00E94EF0406E311E0C0E0D0E0DD24C2
+:100CB000D39482E0C82EEE24E394F12CC73000F5E3
+:100CC00080910001811162C080E40E94B20580938E
+:100CD0000001811112C082E10E94DC0580930001B5
+:100CE00081110BC0C7010C2E01C0880F0A94EAF7CE
+:100CF00080950E94DC05809300010E94D40546C0C7
+:100D0000CA30A1F028F4C83059F0C93061F005C0EC
+:100D1000CC3089F070F0CD3089F0209A289810C03E
+:100D2000219A29980DC0229A2A980AC0239A2B98B2
+:100D300007C0529A01C0539A5B9802C03E9A4698E7
+:100D4000E0EAEA95F1F78FB179995AC092E08170A3
+:100D50008D25892B7C9B02C090E001C094E0892BFB
+:100D60007D9B02C090E001C098E0892B7E9B02C071
+:100D700090E001C090E1892B9FB19095991F992730
+:100D8000991F9295990F907E892B0FC08091000139
+:100D900081114BC080E40E94B2058093000188233A
+:100DA00089F1B12C0E94D4058B2DF8019081981700
+:100DB00019F08083C09201010E94F70521960F5F10
+:100DC0001F4FCE30D10509F079CF809101018823E2
+:100DD00071F1815080930101882339F08FE99FE000
+:100DE0000197F1F700C0000022C0A4E4B1E0E6E3FF
+:100DF000F1E081918D9391E0E434F907D1F717C0C8
+:100E000090E0A5CF83E10E94DC0580930001811171
+:100E1000C8CF81E40E94B205809300018111C1CF47
+:100E20000E94ED05B82EB094BDCF80E0BECF0E94E9
+:100E3000ED0481E0DF91CF911F910F91FF90EF9032
+:100E4000DF90CF90BF900895E82FF0E0EC5BFE4F6D
+:100E50008081089508958B3B910578F4883A910537
+:100E600040F5853A9105D0F48430910508F0B1C081
+:100E70008130910509F4ADC06BC0803E910508F446
+:100E800067C0883E910508F4A4C09C01205F310929
+:100E90002031310508F05CC090650895853A9105D0
+:100EA00009F459C0863A910509F458C083E890E4E2
+:100EB0000895883A910509F454C0893A910509F4D6
+:100EC00053C08A3A910509F452C08B3A910509F44E
+:100ED00051C08C3A910509F450C08D3A910509F43E
+:100EE0004FC0803B910509F44EC08E3A910509F43C
+:100EF0004DC08F3A910509F44CC0813B910509F42E
+:100F00004BC0823B910509F44AC0833B910509F42B
+:100F100049C0843B910509F448C0853B910509F41B
+:100F200047C0863B910509F446C0873B910509F40B
+:100F300045C0883B910509F444C0893B910509F4FB
+:100F400043C08A3B910509F042C08AE296E40895C5
+:100F500080E090E0089581E890E4089582E890E4CC
+:100F6000089582EE94E4089589EE94E408958AEE5B
+:100F700094E4089585EB94E4089586EB94E4089551
+:100F800087EB94E408958CEC94E408958DEC94E45C
+:100F9000089583E895E408958AE895E4089582E940
+:100FA00095E4089584E995E4089581E296E408952E
+:100FB00083E296E4089584E296E4089585E296E457
+:100FC000089586E296E4089587E296E4089580E025
+:100FD00094E40895089596E0799FF001112494E532
+:100FE000899FE00DF11D1124E60FF11DEE0FFF1F8B
+:100FF000E851FF4F859194910895880F991F805A69
+:101000009040FC01859194910895880F991F80521A
+:101010009F4FFC0185919491089526E0729FF00105
+:10102000112444E5849FE00DF11D1124E60FF11D0C
+:10103000EE0FFF1FE851FF4F25913491C9019A959A
+:1010400081159F4110F4C9010895C901905281157D
+:10105000904128F4C9019F700E9405080895C901B4
+:1010600090538115904120F4C9019927906C0895FF
+:10107000211580E5380769F40E94AD159FEF24E340
+:101080004CE0915020404040E1F700C000000C943B
+:10109000081D213080E5380731F48091CD01816051
+:1010A0008093CD010895C90190558115904108F0B4
+:1010B00050C0832F99278F70992781309105D9F4DB
+:1010C000A9014370552702C0880F991F4A95E2F77E
+:1010D0009C68A90164E0440F551F6A95E1F7442715
+:1010E0005370842B952B73E0220F331F7A95E1F711
+:1010F000207633271DC08230910529F4922F88274E
+:10110000816F906A089583309105A9F4A901437015
+:10111000552781E090E002C0880F991F4A95E2F7B9
+:101120009C6843E0220F331F4A95E1F7207E377019
+:10113000822B932B08950497F1F4A901437055274E
+:1011400081E090E002C0880F991F4A95E2F79A6803
+:10115000E8CFC90190578115904120F4C9019F70D3
+:1011600090620895C90190588115904120F4C901F9
+:101170009F70906A0895203E3105E0F4203C3105CF
+:1011800058F52133310509F470C048F4293231058E
+:1011900009F464C02A32310509F46EC074C02933E1
+:1011A0003105F1F022383105D9F02533310509F444
+:1011B0004EC069C0233E310589F138F4203E310527
+:1011C000C1F0223E3105E1F05EC0263E310569F1F5
+:1011D000273E3105A9F157C0C9010E94FD070895B6
+:1011E0008091E00180FD02C081FF4DC080EE90E063
+:1011F0004BC08091E00180FFF9CF89E390E044C0CB
+:101200008091E00182FF0EC08091E00184FF03C065
+:1012100080E090E039C083EE90E036C08091E0013C
+:1012200082FFF2CF82EE90E02FC08091E00183FF39
+:101230000BC08091E00184FDEBCF87EE90E024C0ED
+:101240008091E00183FFF5CF86EE90E01DC0809194
+:10125000E00185FF07C089E290E016C08091E001BF
+:1012600085FFF9CF85E390E00FC08091E00186FF14
+:1012700007C08AE290E008C08091E00186FFF9CFC4
+:1012800081E390E001C0C9010E942B0708950895F1
+:101290000C944709809162010895CF93DF9300D0A9
+:1012A0001F92CDB7DEB72091E601243019F523E077
+:1012B00029839B838A832093E9008FEF9091E80034
+:1012C000815095FD06C095ED9A95F1F700008111CA
+:1012D000F5CF8091E80085FF0DC040E050E063E06D
+:1012E00070E0CE0101960E94B70B8091E8008E77E6
+:1012F0008093E8000F900F900F90DF91CF910895A9
+:10130000CF93DF9300D01F92CDB7DEB72091E601D7
+:10131000243021F522E029839B838A8383E0809314
+:10132000E9008FEF9091E800815095FD06C095EDA2
+:101330009A95F1F700008111F5CF8091E80085FFC3
+:101340000DC040E050E063E070E0CE0101960E94E5
+:10135000B70B8091E8008E778093E8000F900F9094
+:101360000F90DF91CF9108952091E6012430F1F4A0
+:1013700022E02093E9002FEF3091E800215035FD65
+:1013800006C035ED3A95F1F700002111F5CF209117
+:10139000E80025FF0BC040E050E065E070E00E94EF
+:1013A000B70B8091E8008E778093E8000895CF9383
+:1013B000DF93EC018091E601843009F046C0909102
+:1013C0000C019923D9F090910D019923B9F08093E4
+:1013D000E9008FEF9091E800815095FD06C095E1FE
+:1013E0009A95F1F700008111F5CF8091E80085FF13
+:1013F0002CC040E050E060E170E017C081E08093D5
+:10140000E9008FEF9091E800815095FD06C095EDC1
+:101410009A95F1F700008111F5CF8091E80085FFE2
+:1014200014C040E050E068E070E0CE010E94B70BCD
+:101430008091E8008E778093E80080E1FE01A2E5CC
+:10144000B1E001900D928A95E1F7DF91CF91089577
+:101450008091E501811109C00E94490D0E94A60DED
+:101460008091E20084608093E20008951092E5018B
+:10147000089508950C942E230E949F1C0E943423EB
+:101480000E9443100C94480942E061EC81E00E9404
+:10149000C30C42E061EC82E00E94C30C42E061ECCC
+:1014A00083E00E94C30C42E161EC84E00C94C30C25
+:1014B0008091E801833009F455C030F4813071F037
+:1014C000823009F48EC008958A3009F47AC08B30D6
+:1014D00009F460C0893009F09CC020C08091E70108
+:1014E000813A09F096C08091E800877F8093E800F8
+:1014F0008091EB019091EC01892B21F060E080E07C
+:1015000090E003C060E182E591E070E00E94000C91
+:101510008091E8008B778093E80008958091E7013F
+:10152000813209F076C08091EB019091EC01009737
+:1015300019F0039709F06DC08091E800877F8093D0
+:10154000E8008091E80082FD05C08091E6018111EC
+:10155000F8CF5FC08091F100809362018091E80034
+:101560008B7753C08091E701813A09F052C0809196
+:10157000EB019091EC01892B09F04BC08091E800C0
+:10158000877F8093E8008091E80080FFFCCF809106
+:101590000C0136C08091E7018132D9F58091EB01D1
+:1015A0009091EC01892BA9F58091E800877F8093C9
+:1015B000E8000E94F80C8091E90180930C010C94E2
+:1015C000AD158091E701813221F58091E800877F98
+:1015D0008093E8000E94F80C8091EA0180936301F7
+:1015E00008958091E701813AA1F48091E800877F16
+:1015F0008093E8008091E80080FFFCCF8091630138
+:101600008093F1008091E8008E778093E8000C943D
+:10161000F80C089584B7877F84BF88E10FB6F894EB
+:1016200080936000109260000FBE90E080E80FB6DB
+:10163000F89480936100909361000FBE0E94921015
+:101640000E94490D0E94A60D8091E2008460809363
+:10165000E20078940E9421100E94941082E091E0B0
+:101660000E943E100E941C238091E601853069F49F
+:101670000E94621C8091E4018823B1F30E948A1CBD
+:10168000882391F30E94A10BEFCF0E949A10ECCF18
+:10169000292F332723303105A9F06CF4213031058F
+:1016A00009F442C02230310509F043C08DE690E0D4
+:1016B00024E037E042C021323105C9F02232310541
+:1016C00019F137C099278130910541F08230910599
+:1016D00041F0892B71F5E0E0F7E005C0E8EEF6E0B7
+:1016E00002C0E0EDF6E0849190E09F0126C06430F6
+:1016F00000F5E62FF0E0EE0FFF1FEE5DFE4F2081BC
+:10170000318189E090E019C0643098F4E62FF0E070
+:10171000DF01AA0FBB1FA65EBE4F2D913C91EA5E72
+:10172000FE4F808190E009C082E190E021E737E040
+:1017300004C080E090E020E030E0FA0131832083B3
+:10174000089580E189BD82E189BD09B400FEFDCF25
+:101750008091D8008F7D8093D8008091E0008260D6
+:101760008093E0008091E00081FDFCCF0895CF924E
+:10177000DF92EF92FF920F931F93CF93DF937C0141
+:101780008B01EA010E94190D811131C0209731F0BF
+:1017900088819981081B190BE80EF91EC12CD12CE8
+:1017A0000115110519F18091E80085FD14C08091A3
+:1017B000E8008E778093E800209741F08881998136
+:1017C0008C0D9D1D9983888385E011C00E94190DA1
+:1017D000882331F30CC0F70181917F018093F100E0
+:1017E00001501109FFEFCF1ADF0ADACF80E0DF9155
+:1017F000CF911F910F91FF90EF90DF90CF900895C0
+:101800002091ED013091EE012617370748F0611560
+:10181000710539F42091E8002E772093E80001C08B
+:10182000B901FC0120E061157105B9F18091E60173
+:10183000882309F440C0853009F43FC08091E80056
+:1018400083FD3DC08091E80082FF06C08091E800E2
+:1018500082FF26C080E008958091E80080FFE3CFFA
+:101860002091F3008091F20090E0922B61157105B8
+:1018700051F08830910538F421912093F1006150A6
+:1018800071090196F3CF21E0089709F020E08091DB
+:10189000E8008E778093E800C6CF2111C7CFD6CF5E
+:1018A0008091E601882339F0853039F08091E80095
+:1018B00083FFCCCF04C082E0089583E0089581E0E7
+:1018C00008952091ED013091EE012617370748F079
+:1018D0006115710539F42091E8002E772093E80016
+:1018E00001C0B901FC0120E061157105C1F18091D1
+:1018F000E601882309F441C0853009F440C0809195
+:10190000E80083FD3EC08091E80082FF06C0809120
+:10191000E80082FF27C080E008958091E80080FF02
+:10192000E3CF2091F3008091F20090E0922B6115BB
+:10193000710559F08830910540F424912093F1000D
+:101940003196615071090196F2CF21E0089709F0B4
+:1019500020E08091E8008E778093E800C5CF2111C8
+:10196000C6CFD5CF8091E601882339F0853039F094
+:101970008091E80083FFCBCF04C082E0089583E02C
+:10198000089581E00895982F973058F59093E900D5
+:10199000981739F07091EC002091ED005091F00013
+:1019A00003C0242F762F50E021FF19C03091EB00A7
+:1019B0003E7F3093EB003091ED003D7F3093ED00A2
+:1019C0003091EB0031603093EB007093EC0020938A
+:1019D000ED005093F0002091EE0027FF07C09F5FBD
+:1019E000D3CF8F708093E90081E0089580E008955F
+:1019F0008091E70187FD05C08091E80080FF0EC05F
+:101A000012C08091E80082FD05C08091E60181113D
+:101A1000F8CF08958091E8008B7708C08091E601A7
+:101A20008111EACF08958091E8008E778093E800D5
+:101A300008958091E4009091E50045E62091EC0046
+:101A400020FF21C02091E80020FD21C02091E60167
+:101A5000222389F0253089F02091EB0025FD0FC06D
+:101A60002091E4003091E5002817390739F34150FF
+:101A700041F0C901E3CF82E0089583E0089581E059
+:101A8000089584E008952091E80022FFDFCF80E0F0
+:101A900008950E94B70D0E94BF0DE0EEF0E0808136
+:101AA00081608083E8EDF0E080818F77808319BCCE
+:101AB000A7EDB0E08C918E7F8C9380818F7E8083A8
+:101AC0001092E50108950F931F93CF93DF930E9427
+:101AD000B70D0E94BF0DC8EDD0E088818F77888355
+:101AE00088818068888388818F7D888319BC109263
+:101AF000E6011092E2011092E4011092E30100EE7F
+:101B000010E0F80180818B7F8083888181608883E9
+:101B100042E060E080E00E94C30CE1EEF0E08081F2
+:101B20008E7F8083E2EEF0E080818160808380811F
+:101B300088608083F80180818E7F808388818061C6
+:101B40008883DF91CF911F910F910895E8EDF0E028
+:101B500080818F7E8083E7EDF0E0808181608083EB
+:101B600084E082BF81E08093E5010C94630DE8ED91
+:101B7000F0E080818E7F80831092E20008951092C1
+:101B8000DA001092E10008951F920F920FB60F92A3
+:101B900011242F933F934F935F936F937F938F9372
+:101BA0009F93AF93BF93EF93FF938091E10082FFE8
+:101BB0000BC08091E20082FF07C08091E1008B7F23
+:101BC0008093E1000E9420108091DA0080FF1FC006
+:101BD0008091D80080FF1BC08091DA008E7F8093B7
+:101BE000DA008091D90080FF0DC080E189BD82E1DB
+:101BF00089BD09B400FEFDCF81E08093E6010E941B
+:101C0000280A05C019BC1092E6010E94360A80918C
+:101C1000E10080FF19C08091E20080FF15C0809133
+:101C2000E2008E7F8093E2008091E20080618093E9
+:101C3000E2008091D80080628093D80019BC85E0D2
+:101C40008093E6010E943A0A8091E10084FF30C04F
+:101C50008091E20084FF2CC080E189BD82E189BDD2
+:101C600009B400FEFDCF8091D8008F7D8093D8000D
+:101C70008091E1008F7E8093E1008091E2008F7E71
+:101C80008093E2008091E20081608093E200809185
+:101C9000E201882311F084E007C08091E30087FF10
+:101CA00002C083E001C081E08093E6010E943C0A0B
+:101CB0008091E10083FF29C08091E20083FF25C06D
+:101CC0008091E100877F8093E10082E08093E601CC
+:101CD0001092E2018091E1008E7F8093E10080917B
+:101CE000E2008E7F8093E2008091E2008061809329
+:101CF000E20042E060E080E00E94C30C8091F000CE
+:101D000088608093F0000E94390AFF91EF91BF91A3
+:101D1000AF919F918F917F916F915F914F913F9183
+:101D20002F910F900FBE0F901F9018951F920F923A
+:101D30000FB60F9211242F933F934F935F936F939E
+:101D40007F938F939F93AF93BF93CF93EF93FF9323
+:101D5000C091E900CF708091EC001092E900809171
+:101D6000F000877F8093F00078940E94D20E10924A
+:101D7000E9008091F00088608093F000C093E90052
+:101D8000FF91EF91CF91BF91AF919F918F917F91F3
+:101D90006F915F914F913F912F910F900FBE0F90D8
+:101DA0001F9018951F93CF93DF93CDB7DEB7AA97F7
+:101DB0000FB6F894DEBF0FBECDBFE7EEF1E0809125
+:101DC000F100819321E0EF3EF207C9F70E94580A23
+:101DD0008091E80083FF1CC12091E7013091E80168
+:101DE000832F90E08A30910508F012C1FC01EA5A75
+:101DF000FF4F0C94B624203881F0223809F008C136
+:101E00008091EB018F708093E9008091EB0085FB5E
+:101E1000882780F91092E90006C08091E301909133
+:101E2000E401911182609091E800977F9093E8001F
+:101E30008093F1001092F100C5C0822F8D7F09F0D0
+:101E4000E7C0222319F0223061F0E2C08091E9015D
+:101E5000813009F0DDC0333009F080E08093E40187
+:101E600028C08091E901811124C02091EB012F70DD
+:101E700009F4CEC02093E9008091EB0080FF19C0E7
+:101E80008091EB00333011F4806211C08061809347
+:101E9000EB0081E090E0022E01C0880F0A94EAF77F
+:101EA0008093EA001092EA008091EB0088608093B2
+:101EB000EB001092E9008091E800877F86C0211135
+:101EC000A7C01091E9011F778091E3008078812BF2
+:101ED0008093E3008091E800877F8093E8000E9470
+:101EE000F80C8091E80080FFFCCF8091E3008068CF
+:101EF0008093E300112311F083E001C082E080931E
+:101F0000E60186C02058223008F082C08091E901A5
+:101F10009091EA018C3D23E0920779F583E08A8372
+:101F20008AE289834FB7F894DE01139620E03EE001
+:101F300051E2E32FF0E050935700E49120FF03C0FB
+:101F4000E295EF703F5FEF708E2F90E0EA3010F077
+:101F5000C79601C0C0968D939D932F5F243149F79A
+:101F60004FBF8091E800877F8093E8006AE270E0CD
+:101F7000CE0101960E94000C14C0AE014F5F5F4F6E
+:101F80006091EB010E94480B009709F441C0209139
+:101F9000E800277F2093E800BC0189819A810E9494
+:101FA000610C8091E8008B778093E80031C0203885
+:101FB00079F58091E800877F8093E8008091E201C5
+:101FC0008093F1008091E8008E778093E8000E9472
+:101FD000F80C1EC021111CC09091E9019230C0F490
+:101FE0008091E800877F8093E8009093E2010E944F
+:101FF000F80C8091E201811104C08091E30087FF19
+:1020000002C084E001C081E08093E6010E94440A9E
+:102010008091E80083FF0AC08091E800877F809369
+:10202000E8008091EB0080628093EB00AA960FB6E7
+:10203000F894DEBF0FBECDBFDF91CF911F91089501
+:102040000895CF938091E6018823B1F08091E90053
+:102050008F709091EC0090FF02C090E801C090E07A
+:10206000C92FC82B1092E9008091E80083FD0E94DF
+:10207000D20ECF70C093E900CF910895909369017B
+:10208000809368010895E0916801F09169013097AB
+:1020900021F00190F081E02D099480E00895E09115
+:1020A0006801F0916901309721F00280F381E02D01
+:1020B00009940895E0916801F0916901309721F049
+:1020C0000480F581E02D09940895209166013091F6
+:1020D00067018217930771F09093670180936601FF
+:1020E000E0916801F0916901309721F00680F78155
+:1020F000E02D0994089520916401309165018217C3
+:10210000930771F09093650180936401E0916801F9
+:10211000F0916901309721F00084F185E02D099458
+:10212000089508950C9491100E94A51C0E941F060A
+:102130000C946B1DCF92DF92EF92FF920F931F933F
+:10214000CF93DF93CDB7DEB72B970FB6F894DEBFF2
+:102150000FBECDBF0E9437063BE6E32E31E0F32EE3
+:1021600000E010E0C02E802F0E942407F701D190DC
+:102170007F01D826B1F40F5F1F4F0E30110591F784
+:102180008FEF89838A831B820E94AE1C8160782F27
+:102190009D838C8349815A816B818D810E943D1181
+:1021A00041C09091CD0191FF04C08B870E942A0706
+:1021B0008B8520E030E04D2D50E0922FBA01022EA9
+:1021C00002C0759567950A94E2F760FF25C02E83DB
+:1021D000CF82EE24E394F12C02C0EE0CFF1C9A9502
+:1021E000E2F790E08E219F2121E0892B09F420E085
+:1021F00028870E94AE1C8160782F9A8789874E813C
+:102200005F8168858A850E943D11F801E559FE4F7E
+:1022100080818E25808306C02F5F3F4F2630310599
+:1022200061F6A9CF0E944F2010916A010E944310CD
+:102230001817A1F00E94431080936A012B960FB6E5
+:10224000F894DEBF0FBECDBFDF91CF911F910F91EC
+:10225000FF90EF90DF90CF900C9448092B960FB62B
+:10226000F894DEBF0FBECDBFDF91CF911F910F91CC
+:10227000FF90EF90DF90CF900895CF93DF93CDB78D
+:10228000DEB72B970FB6F894DEBF0FBECDBF4F83DE
+:10229000588769877A878B87DE01119686E0FD0172
+:1022A00011928A95E9F785E0FE01379601900D922B
+:1022B0008A95E1F749815A816B817C818D819E816C
+:1022C0000E9479182B960FB6F894DEBF0FBECDBFD3
+:1022D000DF91CF910895CF93C82F882309F4C1C00F
+:1022E000823859F40E94431081FDBBC089E30E94EB
+:1022F000161B0E94E01B89E30CC0833879F40E940E
+:10230000431080FDAEC083E50E94161B0E94E01BB7
+:1023100083E50E94561BCF910C94E01B843859F43E
+:102320000E94431082FD9DC087E40E94161B0E94FC
+:10233000E01B87E4EECF8CEF8C0F813A48F48C2FB2
+:102340000E94842281118DC08C2F0E94161BE3CF26
+:1023500080E28C0F883048F4C77081E001C0880F9C
+:10236000CA95EAF70E94971BD6CF8BE58C0F833076
+:1023700078F4C53A29F0C63A31F482E890E005C015
+:1023800081E890E002C083E890E0CF910C94651062
+:1023900088E58C0F833108F064C0C83A39F1C93A36
+:1023A00041F1CA3A49F1CB3A51F1CC3A59F1CD3A1F
+:1023B00061F1C03B69F1CE3A71F1CF3A79F1C13B9D
+:1023C00081F1C23B89F1C33B91F1C43B99F1C53B1B
+:1023D000A1F1C63BA9F1C73BB1F1C83BB9F1C93B7B
+:1023E000C1F1CA3BC9F58AE292E038C082EE90E0C2
+:1023F00035C089EE90E032C08AEE90E02FC085EBC8
+:1024000090E02CC086EB90E029C087EB90E026C0DE
+:102410008CEC90E023C08DEC90E020C083E891E04C
+:102420001DC08AE891E01AC082E991E017C084E9F2
+:1024300091E014C081E292E011C083E292E00EC00C
+:1024400084E292E00BC085E292E008C086E292E06E
+:1024500005C087E292E002C080E090E0CF910C944A
+:102460007B10CF910895882309F44BC0823859F42A
+:102470000E94431081FF45C089E30E94161B0E9401
+:10248000E01B89E30CC0833871F40E94431080FF85
+:1024900038C083E50E94161B0E94E01B83E50E9462
+:1024A000561B0C94E01B843859F40E94431082FFA1
+:1024B00028C087E40E94161B0E94E01B87E4EFCF30
+:1024C0009CEF980F913A58F390E2980F983050F49F
+:1024D000877091E001C0990F8A95EAF7892F0E94D1
+:1024E0009D1BDFCF9BE5980F933020F480E090E0B8
+:1024F0000C946510885A833120F480E090E00C94AD
+:102500007B100895882321F00E94971B0C94E01BF8
+:102510000895882321F00E949D1B0C94E01B0895D0
+:10252000CF92DF92EF92FF920F931F93CF93DF939F
+:10253000CDB7DEB728970FB6F894DEBF0FBECDBF7C
+:102540008C0185E0F801DE01119601900D928A95CB
+:10255000E1F7F80140813181F280258122952F70C9
+:1025600083819481892B31F03F3F31F481E04F3FEB
+:1025700019F403C081E001C080E080FDCBC2498333
+:102580003A8389819A812F830E94D41A9E838887F7
+:102590000E94D31A0E94A6192F814E816885FF20C0
+:1025A00029F00E94B41B68854E812F81E42FE295AB
+:1025B000EF70F0E0E05AFF4F0C94B624842F807F38
+:1025C000142F1F70882311F01295107FFF2059F0EF
+:1025D000112309F454C2812F68870E94A71B0E940F
+:1025E000E01B68854CC2862F0E943312112309F428
+:1025F00091C2812F0E94AD1B28960FB6F894DEBFC2
+:102600000FBECDBFDF91CF911F910F91FF90EF9043
+:10261000DF90CF900C94E01B342F307F842F8F708D
+:10262000303211F08295807F662319F0613019F104
+:102630002BC0FF20B1F0222309F493C1213009F00F
+:1026400090C128960FB6F894DEBF0FBECDBFDF91C4
+:10265000CF911F910F91FF90EF90DF90CF900C944E
+:10266000C71B222319F0213009F454C28E830E9423
+:10267000CA1B8E8189C1FF2021F0223008F04AC296
+:1026800070C1211147C280C1FF2021F0222309F42B
+:1026900068C1F5C1222309F477C105C2242F26950C
+:1026A0002695237030E02115310521F021303105C8
+:1026B000C9F030C2FF2021F0862F942F937002C002
+:1026C00080E090E028960FB6F894DEBF0FBECDBF35
+:1026D000DF91CF911F910F91FF90EF90DF90CF90FE
+:1026E0000C946510FF2021F0862F942F937002C068
+:1026F00080E090E028960FB6F894DEBF0FBECDBF05
+:10270000DF91CF911F910F91FF90EF90DF90CF90CD
+:102710000C947B10862FFF2019F00E94571F02C0D7
+:102720000E94BF1F28960FB6F894DEBF0FBECDBF24
+:10273000DF91CF911F910F91FF90EF90DF90CF909D
+:102740000C944420842F837009F076C0F110E2C10C
+:10275000262F229526952770220F220F862F8F7005
+:10276000C82ED12CE12CF12C022E04C0CC0CDD1C87
+:10277000EE1CFF1C0A94D2F764FF10C06FE070E0FB
+:1027800080E090E004C0660F771F881F991F2A958C
+:10279000D2F7609570958095909503C060E070E0E9
+:1027A000CB01242F269526952370422F50E04230EE
+:1027B0005105D1F04330510559F16C297D298E29FD
+:1027C0009F294130510541F128960FB6F894DEBF9C
+:1027D0000FBECDBFDF91CF911F910F91FF90EF9072
+:1027E000DF90CF900C94CB196C297D298E299F29DD
+:1027F00028960FB6F894DEBF0FBECDBFDF91CF9104
+:102800001F910F91FF90EF90DF90CF900C94E519FE
+:102810000E94CB19C701B60128960FB6F894DEBF07
+:102820000FBECDBFDF91CF911F910F91FF90EF9021
+:10283000DF90CF900C94B119FF2019F0842F817094
+:1028400001C08695882309F465C1262F2295269517
+:102850002770220F220F862F8F70C82ED12CE12CCB
+:10286000F12C022E04C0CC0CDD1CEE1CFF1C0A94C3
+:10287000D2F764FF10C06FE070E080E090E004C029
+:10288000660F771F881F991F2A95D2F7609570955C
+:102890008095909503C060E070E0CB01242F2695D1
+:1028A00026952370422F50E042305105D1F043303D
+:1028B000510559F16C297D298E299F2941305105F7
+:1028C00041F128960FB6F894DEBF0FBECDBFDF9161
+:1028D000CF911F910F91FF90EF90DF90CF900C94CC
+:1028E0009F1A6C297D298E299F2928960FB6F89466
+:1028F000DEBF0FBECDBFDF91CF911F910F91FF9033
+:10290000EF90DF90CF900C94B91A0E949F1AC701E4
+:10291000B60128960FB6F894DEBF0FBECDBFDF918B
+:10292000CF911F910F91FF90EF90DF90CF900C947B
+:10293000851A603FC9F118F4603E50F49BC0623FB5
+:1029400009F460C008F44AC0633F09F46FC092C044
+:10295000162F1F70842F8F71FF2099F00E941E1A6E
+:10296000812F28960FB6F894DEBF0FBECDBFDF9142
+:10297000CF911F910F91FF90EF90DF90CF900C942B
+:1029800082120E943F1A812F28960FB6F894DEBF5C
+:102990000FBECDBFDF91CF911F910F91FF90EF90B0
+:1029A000DF90CF900C948912FF20A1F02111B2C0CA
+:1029B000842F8F7128960FB6F894DEBF0FBECDBF5F
+:1029C000DF91CF911F910F91FF90EF90DF90CF900B
+:1029D0000C94641A223008F09DC0EACFFF20A1F0C9
+:1029E000842F8F7128960FB6F894DEBF0FBECDBF2F
+:1029F000DF91CF911F910F91FF90EF90DF90CF90DB
+:102A00000C941E1AFF2061F3842F8F7128960FB645
+:102A1000F894DEBF0FBECDBFDF91CF911F910F9114
+:102A2000FF90EF90DF90CF900C943F1AFF2091F031
+:102A3000842F8F7128960FB6F894DEBF0FBECDBFDE
+:102A4000DF91CF911F910F91FF90EF90DF90CF908A
+:102A50000C94091A28960FB6F894DEBF0FBECDBFAE
+:102A6000DF91CF911F910F91FF90EF90DF90CF906A
+:102A70000C94FF19FF20A1F0222309F4B1CF862F77
+:102A800028960FB6F894DEBF0FBECDBFDF91CF9171
+:102A90001F910F91FF90EF90DF90CF900C946B11EE
+:102AA000222309F4B1CF862F28960FB6F894DEBF03
+:102AB0000FBECDBFDF91CF911F910F91FF90EF908F
+:102AC000DF90CF900C9433124F70C8010E94A50480
+:102AD00028960FB6F894DEBF0FBECDBFDF91CF9121
+:102AE0001F910F91FF90EF90DF90CF900C942619DB
+:102AF0004F70C80128960FB6F894DEBF0FBECDBF49
+:102B0000DF91CF911F910F91FF90EF90DF90CF90C9
+:102B10000C94EA0728960FB6F894DEBF0FBECDBF1F
+:102B2000DF91CF911F910F91FF90EF90DF90CF90A9
+:102B300008950E94B41B0E94C41B0E94891B0E941E
+:102B4000E01B0E94F0200E94442080E090E00E9460
+:102B5000651080E090E00C947B100E94A41B0C9404
+:102B600099150E94D41A292F22952F7030E02C300D
+:102B700031054CF42A3031056CF4225031092230F1
+:102B8000310590F407C02C30310551F02F3031055C
+:102B900039F00AC0803E10F0803F31F481E00895A2
+:102BA00093FB882780F9089580E00895CF93DF9301
+:102BB00000D000D01F92CDB7DEB70F900F900F90CE
+:102BC0000F900F90DF91CF910895CF93DF9300D0B6
+:102BD00000D000D0CDB7DEB726960FB6F894DEBF92
+:102BE0000FBECDBFDF91CF9108951F93CF93DF9399
+:102BF000C091790116E080917A01C81799F0D0E070
+:102C00001C9FF0011D9FF00D1124E558FE4F4081DF
+:102C1000518162817381848195810E94E51521969D
+:102C2000C770E9CFDF91CF911F9108954091AB011B
+:102C30005091AC016091AD017091AE018091AF01F6
+:102C40009091B0010C94E515CF938091B0018295DD
+:102C50008F7009F05FC08091AD01882309F45AC0DC
+:102C600020917901A0917A016091AB017091AC0142
+:102C70008091AE019091AF0131E06F3F09F030E0FB
+:102C8000B32FC6E02A1709F445C0009721F07F3F13
+:102C900021F44B2F03C041E001C040E030E040FD93
+:102CA00035C0C29FF001C39FF00D1124E558FE4FBF
+:102CB000418174132BC04081641328C042814111AB
+:102CC00025C0438154814817590710F441505109D8
+:102CD000481B590B483C5105C8F48091B0018F70D6
+:102CE00080618093B00186E0829FF001839FF00DA8
+:102CF0001124E058FE4F80818F70806180838BEAC1
+:102D000091E00E949012CF910C94F5152F5F3F4FE8
+:102D10002770B8CFCF910895CF92DF92EF92FF92B4
+:102D20000F931F93CF93DF93CDB7DEB762970FB6A4
+:102D3000F894DEBF0FBECDBF8C0185E0F801DE0147
+:102D40001D9601900D928A95E1F7D8014C9111964C
+:102D50005C91119712966C9112971396ED90FC90DE
+:102D600014977091AB01E091AC012091AE013091CC
+:102D7000AF012115310531F0EF3F31F481E07F3FA4
+:102D800019F403C081E001C080E0B82FB170CB2EF0
+:102D900080FD6CC1D090AD01DD2009F4F5C0F0914B
+:102DA000B001E216F30638F0C701821B930B883C92
+:102DB000910548F09BC0209530952E0D3F1D283C75
+:102DC000310508F093C08F2F807F09F052C0E513C2
+:102DD00014C0741312C0D62E61110FC0FF70F061C1
+:102DE000F093B0010E9416168BEA91E00E949012B7
+:102DF0008091B001F80185836CC1EF2831F05F3F0D
+:102E000031F481E04F3F19F403C081E001C080E05C
+:102E100080FD03C081E0862701C080E0F82FF170BB
+:102E2000FF2E80FF1CC08091790120917A0136E04D
+:102E3000821709F428C190E0389FF001399FF00D06
+:102E40001124E558FE4F7181571306C07081471356
+:102E500003C07281671303C001968770E9CFD62E35
+:102E6000662309F436C18091B00181608093B0017E
+:102E700053C0E51308C0741306C0611104C0D80123
+:102E80001596FC93AEC04D875E878D859E856A8BB7
+:102E90000E94B1156A89882329F1D62E662311F183
+:102EA0002091B001822F82958F7090E002970CF4F0
+:102EB00060C08091AB019091AC0198878F83198697
+:102EC000FB86EA862C87CE01079651C0E51731F1C3
+:102ED0004D875E878D859E856A8B0E94B1156A89B4
+:102EE00081112EC0C8010E949012A4C08F2F807F34
+:102EF00069F77E2DF98AE88A89890E94D6158BEABE
+:102F000091E00E949012EBEAF1E086E0DF011D9271
+:102F10008A95E9F70E941616D12CDBC07413D8CF1E
+:102F20006111D6CFD8011596FC93C8010E9490126A
+:102F3000EBEAF1E086E0DF011D928A95E9F7C9C06E
+:102F4000D62E662379F22091B001822F82958F7060
+:102F500090E0029774F08091AB019091AC019A835C
+:102F600089831B82FD82EC822E83CE0101960E9412
+:102F7000901286E0F801ABEAB1E001900D928A95DB
+:102F8000E1F70E9424166FC0E216F30628F0C7018D
+:102F9000821B930B9C0104C0209530952E0D3F1D84
+:102FA000283C310508F052C0D62E662309F49ACF8A
+:102FB000E5132CC074132AC08091B00180FD1DC0A0
+:102FC000982F92959F70C9F0D80115968C931597FC
+:102FD0009F3039F09F5F9295907F8F70892B159667
+:102FE0008C93C8010E94901286E0F801ABEAB1E030
+:102FF00001900D928A95E1F736C086E0F801ABEAC0
+:10300000B1E001900D928A95E1F763C04D875E872C
+:103010008D859E850E94B115882379F086E0F801A0
+:10302000ABEAB1E001900D928A95E1F70E94241677
+:103030000E941616DD24D3944CC08091B0018160AB
+:103040008093B001C8010E94901243C07E2DF98A7E
+:10305000E88A89890E94D615EBEAF1E086E0DF0173
+:103060001D928A95E9F70E94161633C0662309F46B
+:1030700039CF4D875E878D859E850E94B115882347
+:1030800009F430CFCBCF4D875E878D859E850E941A
+:10309000D41A292F22952F7030E0223031052CF4DC
+:1030A0009F7041F0811106C00CC0243031052CF412
+:1030B0009F7049F4805E883020F0C8010E94901211
+:1030C000CF2CDC2C06C0D80115969C91907F91F7EF
+:1030D000F8CF8D2D62960FB6F894DEBF0FBECDBF30
+:1030E000DF91CF911F910F91FF90EF90DF90CF90E4
+:1030F00008951F93CF93DF93CDB7DEB72C970FB60C
+:10310000F894DEBF0FBECDBF4F83588769877A879B
+:103110008B879C87CE0107960E948C168823C1F06E
+:103120002F8138858A859B85892B31F03F3F11F0AF
+:1031300080E003C02F3FE1F781E0811147C04F815C
+:10314000588569857A858B859C850E94E5153EC0EA
+:1031500086E0FE013796DE01119601900D928A9568
+:10316000E1F7FF81E8854A855B854115510531F01E
+:10317000EF3F31F481E0FF3F19F403C081E001C06B
+:1031800080E080FD23C020917A0130E0C9010196E2
+:10319000877099276091790170E086179707F1F1A0
+:1031A000F983EA835D834C8396E0929FD001939FDD
+:1031B000B00D1124A558BE4FFE01319601900D921D
+:1031C0009A95E1F780937A010E94F51516E08091B7
+:1031D000790190917A01891779F1189FC001112422
+:1031E00085589E4F0E948C16882331F1E091790119
+:1031F0001E9FF0011124E558FE4F408151816281EC
+:103200007381848195810E94E5158091790190E018
+:1032100001968770992780937901D9CF0E94AD15C7
+:1032200010927A0110927901EBEAF1E086E0DF0179
+:103230001D928A95E9F7CACF2C960FB6F894DEBF97
+:103240000FBECDBFDF91CF911F910895EF92FF92F6
+:103250000F931F93CF93DF93FC01009709F46FC086
+:10326000F12CEE24E394EF0121968491843740F40D
+:10327000843008F055C0813081F0823021F15FC088
+:10328000853709F447C0C0F19CE7980F903708F0E4
+:1032900056C08F770E94331245C08F010E5F1F4FBB
+:1032A000FE01849190E2980F983050F48770FE2DC3
+:1032B00001C0FF0F8A95EAF78F2F0E94B71B15C038
+:1032C0000E946B1114C08F010E5F1F4FFE0184918D
+:1032D00090E2980F983068F48770FE2D01C0FF0FC0
+:1032E0008A95EAF78F2F0E94BD1B0E94E01BE80120
+:1032F00019C00E943312FBCFCF010296FE01C49188
+:10330000CC2361F0EFE9FFE03197F1F700C0000056
+:10331000C150F6CFCF010296FE01F490EC0102C03D
+:103320000E946B118F2D882341F0EFE9FFE0319768
+:10333000F1F700C000008150F6CFFE0194CFDF917D
+:10334000CF911F910F91FF90EF9008950895609392
+:10335000B5017093B6018093B7019093B8010C94B6
+:1033600099150F931F930091B5011091B60120910B
+:10337000B7013091B801062B172B282B392B00935E
+:10338000B5011093B6012093B7013093B8011F9196
+:103390000F910C9499150F931F930091B501109103
+:1033A000B6012091B7013091B801062317232823D5
+:1033B00039230093B5011093B6012093B7013093E0
+:1033C000B8011F910F910C9499150F931F930091C1
+:1033D000B5011091B6012091B7013091B8010627CF
+:1033E0001727282739270093B5011093B60120939A
+:1033F000B7013093B8011F910F910C949915109259
+:10340000B1011092B2011092B3011092B4010C9468
+:10341000991541E050E060E070E004C0440F551F92
+:10342000661F771F8A95D2F74093B1015093B2017E
+:103430006093B3017093B4010C94991541E050E08E
+:1034400060E070E004C0440F551F661F771F8A9527
+:10345000D2F78091B1019091B201A091B301B091E6
+:10346000B401842B952BA62BB72B8093B10190939D
+:10347000B201A093B301B093B4010C94991541E04B
+:1034800050E060E070E004C0440F551F661F771FD6
+:103490008A95D2F740955095609570958091B101CD
+:1034A0009091B201A091B301B091B401842395230E
+:1034B000A623B7238093B1019093B201A093B301E7
+:1034C000B093B4010C94991541E050E060E070E0D5
+:1034D00004C0440F551F661F771F8A95D2F780914D
+:1034E000B1019091B201A091B301B091B4018427D0
+:1034F0009527A627B7278093B1019093B201A09397
+:10350000B301B093B4010C9499150F931F930091DC
+:10351000B1011091B2012091B3013091B401062B99
+:10352000172B282B392B0093B1011093B201209354
+:10353000B3013093B4011F910F910C9499150F931F
+:103540001F930091B1011091B2012091B30130910C
+:10355000B40106231723282339230093B1011093C4
+:10356000B2012093B3013093B4011F910F910C94D9
+:1035700099150F931F930091B1011091B201209101
+:10358000B3013091B4010627172728273927009364
+:10359000B1011093B2012093B3013093B4011F9194
+:1035A0000F910C9499150895CF92DF92EF92FF92AC
+:1035B0000F931F93CF93DF93EC01C090B501D09090
+:1035C000B601E090B701F090B8018091B1019091FF
+:1035D000B201A091B301B091B401C82AD92AEA2A54
+:1035E000FB2A0FE110E0B701A601002E04C076957A
+:1035F0006795579547950A94D2F740FF07C0BE01DB
+:10360000802F0E940D088130910539F40150110975
+:1036100050F7BE0180E00E940D08DF91CF911F910D
+:103620000F91FF90EF90DF90CF90089590910C0153
+:103630009923D9F090910D019923B9F0982F96957F
+:10364000969596959F3088F5E0910E01F0910F01C7
+:10365000E90FF11D877021E030E001C0220F8A954B
+:10366000EAF78181822B8183089540910E01509168
+:103670000F0120E030E09FEFFA01E20FF31F6281BB
+:10368000681799F09F3F19F4611101C0922F2F5FC5
+:103690003F4F2E30310581F79F3F39F0FA01E90F96
+:1036A000F11D97FDFA9582830895089590910C017C
+:1036B0009923E1F090910D019923C1F0982F9695EF
+:1036C000969596959F3020F5E0910E01F0910F01AF
+:1036D000E90FF11D877021E030E001C0220F8A95CB
+:1036E000EAF72095818128232183089540910E01D6
+:1036F00050910F0120E030E0FA01E20FF31F9281B8
+:10370000981301C012822F5F3F4F2E303105A1F771
+:10371000089581E090E0E0910E01F0910F01E80F33
+:10372000F91F1082019680319105A9F708959091B3
+:10373000CC01982B9093CC01089580959091CC0169
+:1037400098239093CC0108951092CC010895909104
+:10375000CB01982B9093CB01089580959091CB014C
+:1037600098239093CB0108951092CB0108959091E6
+:10377000CA01982B9093CA01089580959091CA012F
+:1037800098239093CA0108951092CA0108958093D6
+:10379000B90108951092B901089540910E01509118
+:1037A0000F0120E030E080E0FA01E20FF31F918189
+:1037B00091118F5F2F5F3F4F2F303105A9F708958B
+:1037C000E0910E01F0910F018091CC018083E09196
+:1037D0000E01F0910F0180819091CB01892B8083A4
+:1037E000E0910E01F0910F0180819091CA01892B27
+:1037F00080839091B901992361F0E0910E01F091DD
+:103800000F018081892B80830E94CD1B8111109232
+:10381000B90180910E0190910F010C944F10CF923D
+:10382000DF92EF92FF920F931F936C01EE24FF241F
+:10383000C114D104E104F10421F46B017C0180E0A6
+:1038400001C080E133272F2D1E2D0D2D01151105EF
+:103850002105310519F0885F68017901970186011A
+:10386000A4E03695279517950795AA95D1F70115E8
+:1038700011052105310519F08C5F68017901970167
+:103880008601F2E03695279517950795FA95D1F7B9
+:10389000011511052105310519F08E5F68017901C7
+:1038A000B701A6017695679557954795452B462B09
+:1038B000472B09F08F5F1F910F91FF90EF90DF90E2
+:1038C000CF9008958091E601843009F11092CE01E5
+:1038D00020E488E190E00FB6F894A895809360000A
+:1038E0000FBE2093600083B7817F846083BF83B75E
+:1038F000816083BF7894889583B78E7F83BF88E18A
+:103900000FB6F89480936000109260000FBE089587
+:1039100008950895CF930E94881C0E9437060E9444
+:10392000891CC0E08C2F0E942407811105C0CF5F45
+:10393000CE30C1F780E001C081E0CF9108950E94B0
+:10394000AD150E9443100C94480982E084BD93E0B9
+:1039500095BD9AEF97BD80936E0008952FB7F894A8
+:103960008091CF019091D001A091D101B091D2016D
+:103970002FBF0895CF92DF92EF92FF920F931F9384
+:103980002FB7F8944091CF015091D0016091D101AF
+:103990007091D2012FBF6A017B01EE24FF248C01BC
+:1039A00020E030E0C016D106E206F30610F44150E4
+:1039B0005109481B590BCA011F910F91FF90EF90BD
+:1039C000DF90CF9008951F920F920FB60F9211249F
+:1039D0008F939F93AF93BF938091CF019091D0012C
+:1039E000A091D101B091D2010196A11DB11D80938A
+:1039F000CF019093D001A093D101B093D201BF9198
+:103A0000AF919F918F910F900FBE0F901F901895BF
+:103A10000E94490DF8942FEF87EA91E621508040EB
+:103A20009040E1F700C0000087E090EBDC0180935C
+:103A3000EF019093F001A093F101B093F2012CE01B
+:103A400088E190E00FB6F894A895809360000FBECF
+:103A500020936000FFCFEF92FF920F931F93CF93BD
+:103A6000DF93E82EF12C8F2D0E942407C0E0D0E0D8
+:103A7000082F10E098010C2E02C0359527950A9466
+:103A8000E2F720FD05C02196C630D10599F709C09F
+:103A90006C2F7F2D80E00E94EB07E812F4CF81E0CD
+:103AA00005C0F3948EE0F812DECF80E0DF91CF9175
+:103AB0001F910F91FF90EF900895CF93C82F8CE244
+:103AC0000E942B1D882321F08C2FCF910C942B1D4D
+:103AD00080E0CF910895CF930E94B01E811102C063
+:103AE0000E94961EC5E6C15049F00E9437068FE33A
+:103AF0009CE90197F1F700C00000F5CF89E20E9430
+:103B00005D1D811111C18AE20E945D1D81110E941B
+:103B1000961E85E00E945D1D81110E94081D0E9475
+:103B2000BB1E8093CD0187E00E945D1D882399F123
+:103B30008BE10E945D1D882351F09091CD0191FB96
+:103B4000882780F921E0822780FB91F922C08EE04E
+:103B50000E945D1D882351F09091CD0192FB882732
+:103B600080F921E0822780FB92F913C080E10E9456
+:103B70005D1D9091CD01882341F093FB882780F94A
+:103B800021E0822780FB93F904C0892F809580FB78
+:103B900090F99093CD018091CD010E94BF1E0E94AB
+:103BA000CD1E8093E00180EE0E945D1D882341F0D0
+:103BB0008091E001982F909590FB80F98093E0012F
+:103BC00089E30E945D1D882359F09091E00191FBEB
+:103BD000882780F921E0822780FB91F99093E0010A
+:103BE00082EE0E945D1D882359F09091E00192FBC6
+:103BF000882780F921E0822780FB92F99093E001E9
+:103C000086EE0E945D1D882359F09091E00193FBA0
+:103C1000882780F921E0822780FB93F99093E001C7
+:103C200083EE0E945D1D882359F09091E00194FB82
+:103C3000882780F921E0822780FB94F99093E001A6
+:103C400085E30E945D1D882359F09091E00195FB6A
+:103C5000882780F921E0822780FB95F99093E00185
+:103C600081E30E945D1D882359F09091E00196FB4D
+:103C7000882780F921E0822780FB96F99093E00164
+:103C800081E10E945D1D882359F09091E00197FB2E
+:103C9000882780F921E0822780FB97F99093E00143
+:103CA0008091E0010E94D11E8091E00187FB88276E
+:103CB00080F980930D0187E20E945D1DC82F8EE17F
+:103CC0000E945D1D8111C2608FE10E945D1D811106
+:103CD000C46080E20E945D1D8111C86081E20E9483
+:103CE0005D1D8111C06182E20E945D1D8111C06273
+:103CF00083E20E945D1D8111C06484E20E945D1D0B
+:103D0000882311F0C06802C0CC2329F08C2F0E94B8
+:103D1000C81E6C2F03C00E94C41E682F70E080E094
+:103D200090E0CF910C94A719CF9108956DEE7EEF9E
+:103D300080E090E00E94EC2460E082E090E00E944D
+:103D4000DE2460E083E090E00E94DE2460E084E016
+:103D500090E00E94DE2460E085E090E00C94DE2498
+:103D600080E090E00E94D82421E08D3E9E4F09F033
+:103D700020E0822F089582E090E00C94D024682FF8
+:103D800082E090E00C94DE2483E090E00C94D02458
+:103D9000682F83E090E00C94DE2484E090E00C94A3
+:103DA000D024682F84E090E00C94DE248091D5012B
+:103DB00080FF0BC06091130185E0689FB001112462
+:103DC00075956795759567952AC081FF09C06091C3
+:103DD000130185E0689FB0011124759567951FC098
+:103DE00082FF07C06091130185E0689FB001112434
+:103DF00016C04091D6014423C9F0609112014617C4
+:103E000088F72091130185E0289F90011124429F9B
+:103E1000C001439F900D112470E00E94A2246038DD
+:103E2000710540F46115710539F002C065E070E07C
+:103E3000862F08958FE7089581E008958091D50138
+:103E400080FF08C06091110170E0759567957595C8
+:103E5000679521C081FF06C06091110170E07595E2
+:103E6000679519C082FF04C06091110170E010C015
+:103E70008091D6018823C1F0609110018617A0F7C8
+:103E800090911101989FC001112470E00E94A2241A
+:103E90006038710528F46115710521F0862F0895A9
+:103EA0008FE7089581E0089561E070E0F4CF803FEE
+:103EB00021F40E94D61E819504C0813F29F40E94FE
+:103EC000D61E8093D9010895823F21F40E94D61E08
+:103ED000819504C0833F29F40E94D61E8093D801A7
+:103EE0000895893F19F40E941E1F05C08A3F31F4CE
+:103EF0000E941E1F81958093DA0108958B3F21F463
+:103F00000E941E1F819504C08C3F29F40E941E1F31
+:103F10008093DB010895843F21F48091D701816073
+:103F200017C0853F21F48091D701826011C0863F80
+:103F300021F48091D70184600BC0873F21F48091E8
+:103F4000D701886005C0883F31F48091D701806136
+:103F50008093D70108958D3F21F48091D501816030
+:103F60000BC08E3F21F48091D501826005C08F3F48
+:103F700029F48091D50184608093D5010895803F14
+:103F800039F48091D90187FF6CC01092D90169C0C2
+:103F9000813F29F48091D9011816BCF362C0909139
+:103FA000D801823F29F497FF5CC01092D80159C014
+:103FB000833F19F41916CCF354C0893F41F4809122
+:103FC000DA0118160CF04DC01092DA014AC08A3F8F
+:103FD00029F48091DA0187FF44C0F6CF8B3F39F492
+:103FE0008091DB0187FF3DC01092DB013AC08C3F1E
+:103FF00029F48091DB011816BCF333C0843F21F40F
+:104000008091D7018E7F17C0853F21F48091D70121
+:104010008D7F11C0863F21F48091D7018B7F0BC02B
+:10402000873F21F48091D701877F05C0883F31F415
+:104030008091D7018F7E8093D70113C08D3F21F4EB
+:104040008091D5018E7F0BC08E3F21F48091D501E8
+:104050008D7F05C08F3F29F48091D5018B7F8093A0
+:10406000D5018091D80181110EC08091D9018111B3
+:104070000AC08091DA01811106C08091DB018111B3
+:1040800002C01092D601089587ED91E00E945A1067
+:104090000E94AE1C9093D4018093D30108951F9386
+:1040A000CF93DF938091D3019091D4010E94BA1CE9
+:1040B0004091D601442321F02091140130E006C044
+:1040C000209115015AE0259F900111248217930732
+:1040D00008F482C08091D8011091D901D091DA0101
+:1040E000C091DB01811107C0111105C0D11103C0BE
+:1040F000CC2309F471C04F3F19F04F5F4093D601B4
+:10410000181624F40E94D61E8093D8018091D801FD
+:1041100087FF05C00E94D61E81958093D801111695
+:1041200024F40E94D61E8093D9018091D90187FF83
+:1041300005C00E94D61E81958093D9016091D80157
+:10414000662339F11091D901112319F1772767FD01
+:104150007095872F972F0E94B32323E333E343E324
+:104160005FE30E9417240E9480236093D801612F8F
+:10417000772767FD7095872F972F0E94B32323E33E
+:1041800033E343E35FE30E9417240E94802360939C
+:10419000D9011D1624F40E941E1F8093DA0180911C
+:1041A000DA0187FF05C00E941E1F81958093DA0106
+:1041B0001C1624F40E941E1F8093DB018091DB01FA
+:1041C00087FF05C00E941E1F81958093DB01DF9150
+:1041D000CF911F910C944420DF91CF911F910895AE
+:1041E000E7EDF1E085E0DF011D928A95E9F7109295
+:1041F000D6011092D5010895833081F128F48130E1
+:1042000059F08230D1F00895853009F449C0B8F1F1
+:10421000863009F456C0089520911501862F90E04C
+:10422000820F911D8F3F910520F4620F609315015D
+:1042300008958FEF80931501089520911401862F22
+:1042400090E0820F911D8F3F910520F4620F6093E3
+:10425000140108958FEF80931401089520911301A4
+:10426000862F90E0820F911D8F3F910520F4620F01
+:104270006093130108958FEF8093130108952091A7
+:104280001201862F90E0820F911D8F3F910520F43F
+:10429000620F6093120108958FEF809312010895C9
+:1042A00020911101862F90E0820F911D8F3F910583
+:1042B00020F4620F6093110108958FEF8093110134
+:1042C000089520911001862F90E0820F911D8F3F5D
+:1042D000910520F4620F6093100108958FEF809391
+:1042E00010010895833011F128F4813049F08230B3
+:1042F00091F00895853081F120F18630C1F1089563
+:1043000080911501681720F4861B8093150108958C
+:1043100010921501089580911401681720F4861BEE
+:10432000809314010895109214010895809113014F
+:10433000681720F4861B80931301089510921301CF
+:10434000089580911201681720F4861B8093120152
+:10435000089510921201089580911101681720F4B8
+:10436000861B809311010895109211010895809188
+:104370001001681720F4861B809310010895109295
+:10438000100108958D3109F442C020F58E3009F4F2
+:1043900079C070F4873009F45EC020F4863009F4E7
+:1043A00042C033C08830D1F18B3009F4A7C02DC092
+:1043B000863109F4A3C038F4803109F46DC081312D
+:1043C00009F47BC022C0893109F498C08B3109F40B
+:1043D0004FC01BC0853309F479C048F4873209F413
+:1043E00075C008F478C0893209F470C00EC08334F7
+:1043F00038F48A3308F071C0883309F47FC005C0EF
+:10440000833409F463C08834C1F080E008950E94C9
+:104410003A230E9443100E94480970C00E94BB1EAC
+:104420000E94CD1E6BC08091CD01817F8E7F8093D5
+:10443000CD0181E08093DD0108950E94AD152FEF3D
+:1044400083ED90E3215080409040E1F700C00000F0
+:104450000E94081D53C09091CD01892F817090FF5B
+:1044600003C0917F9E7F26C091609093CD0146C08E
+:104470009091CD0191FB882780F921E0822780FB74
+:1044800091F913C09091CD0192FB882780F921E02A
+:10449000822780FB92F909C09091CD0193FB882778
+:1044A00080F921E0822780FB93F99093CD01882346
+:1044B00029F191609093CD0108950E94AD158091EE
+:1044C0000D0191E0892780930D0118C061E070E033
+:1044D00080E090E00FC023EE01C027EC280F61E0E0
+:1044E00070E080E090E004C0660F771F881F991F7E
+:1044F0002A95D2F70E94A7190E94AD1581E0089570
+:1045000080E0089580E00895CF93C82F8091DD0169
+:10451000813079F018F08230D1F184C0A0910E0181
+:10452000B0910F018C91813169F0823209F07CC029
+:1045300009C0A0910E01B0910F018C91813111F051
+:10454000823249F48C2F0E94802281111DC08C2F51
+:104550000E94C2211AC08C2F0E948222811114C095
+:10456000C43179F048F4CB3079F0C03109F060C043
+:1045700082E08093DD0108C0C93219F0C83321F010
+:1045800057C01092DD0154C081E0817053C0C93220
+:1045900089F118F5C43171F1A8F4C73009F046C0AB
+:1045A0008AE08093150194E19093140193E0909335
+:1045B00013018093120188E08093110188E28093B7
+:1045C000100134C0CE51C63088F5EC2FF0E0E65D26
+:1045D000FE4F80818093DC0129C0CE34E9F020F4C5
+:1045E000CB3421F56AE013C0C13579F0C235F1F45E
+:1045F00061E00DC08091DC01882319F01092DC018C
+:1046000015C081E08093DD0115C061E006C0809196
+:10461000DC010E94FC200AC06AE08091DC010E945B
+:10462000722104C01092DD0180E004C081E002C06C
+:1046300080E0ABCFCF910895E1E8F0E08081886021
+:1046400080838081816080838FB7F89493E090931A
+:10465000890090ED909388008FBF0895EFE6F0E019
+:104660008081826080830895EFE6F0E080818D7F15
+:1046700080830895EFE6F0E0808192E089278083CF
+:1046800008951F920F920FB60F9211242F933F930C
+:104690004F935F936F937F938F939F93AF93BF934A
+:1046A000EF93FF938091DE019091DF01019690934B
+:1046B000DF018093DE01811103C082E00E9448097E
+:1046C000E091DF01E695E695F0E0E258F74FE491DE
+:1046D0008091DE018E1303C080E00E944809FF91A3
+:1046E000EF91BF91AF919F918F917F916F915F916A
+:1046F0004F913F912F910F900FBE0F901F901895E3
+:1047000004D06894B1118DC0089570D088F09F577F
+:1047100090F0B92F9927B751A0F0D1F0660F771F0D
+:10472000881F991F1AF0BA95C9F712C0B13081F0ED
+:1047300077D0B1E0089574C0672F782F8827B85FCD
+:1047400039F0B93FCCF3869577956795B395D9F74E
+:104750003EF490958095709561957F4F8F4F9F4F58
+:104760000895E89409C097FB3EF490958095709564
+:1047700061957F4F8F4F9F4F9923A9F0F92F96E9AD
+:10478000BB279395F695879577956795B795F11122
+:10479000F8CFFAF4BB0F11F460FF1BC06F5F7F4FBF
+:1047A0008F4F9F4F16C0882311F096E911C07723D1
+:1047B00021F09EE8872F762F05C0662371F096E8DA
+:1047C000862F70E060E02AF09A95660F771F881FA9
+:1047D000DAF7880F9695879597F9089557FD9058C1
+:1047E000440F551F59F05F3F71F04795880F97FBB5
+:1047F000991F61F09F3F79F087950895121613066F
+:104800001406551FF2CF4695F1DF08C0161617069D
+:104810001806991FF1CF86957105610508940895D2
+:10482000E894BB2766277727CB0197F908950BD02B
+:1048300078C069D028F06ED018F0952309F05AC0DE
+:104840005FC01124EECFCADFA0F3959FD1F3950F7F
+:1048500050E0551F629FF001729FBB27F00DB11D04
+:10486000639FAA27F00DB11DAA1F649F6627B00D94
+:10487000A11D661F829F2227B00DA11D621F739F7D
+:10488000B00DA11D621F839FA00D611D221F749F8B
+:104890003327A00D611D231F849F600D211D822FD2
+:1048A000762F6A2F11249F5750408AF0E1F0882319
+:1048B0004AF0EE0FFF1FBB1F661F771F881F915026
+:1048C0005040A9F79E3F510570F014C0AACF5F3F3A
+:1048D000ECF3983EDCF3869577956795B795F79559
+:1048E000E7959F5FC1F7FE2B880F911D96958795E1
+:1048F00097F9089597F99F6780E870E060E0089560
+:104900009FEF80EC089500240A94161617061806E7
+:104910000906089500240A941216130614060506C3
+:104920000895092E0394000C11F4882352F0BB0F54
+:1049300040F4BF2B11F460FF04C06F5F7F4F8F4FB7
+:104940009F4F089597FB072E16F4009407D077FD2C
+:1049500009D00E94BC2407FC05D03EF490958195B7
+:104960009F4F0895709561957F4F0895EE0FFF1F3B
+:104970000590F491E02D0994AA1BBB1B51E107C0DF
+:10498000AA1FBB1FA617B70710F0A61BB70B881FDF
+:10499000991F5A95A9F780959095BC01CD0108956E
+:1049A000F999FECF92BD81BDF89A992780B50895F7
+:1049B000A8E1B0E042E050E00C94F324262FF999EE
+:1049C000FECF1FBA92BD81BD20BD0FB6F894FA9AF2
+:1049D000F99A0FBE019608950E94DE24272F0C94A9
+:1049E000DF24DC01CB01FC01F999FECF06C0F2BD4A
+:1049F000E1BDF89A319600B40D9241505040B8F79D
+:064A00000895F894FFCFB9
+:104A060020024A09D709B40980094D090101BA01F2
+:104A160028080A03140A3F4D36393F08F207BC0737
+:104A2600830716072F0748076107010203040506D7
+:044A36000708090064
:00000001FF
diff --git a/keyboard/ergodox_ez/keymaps/ordinary/readme.md b/keyboard/ergodox_ez/keymaps/ordinary/readme.md
index f100dd1c5c..842dc7ee19 100644
--- a/keyboard/ergodox_ez/keymaps/ordinary/readme.md
+++ b/keyboard/ergodox_ez/keymaps/ordinary/readme.md
@@ -18,7 +18,7 @@ no rights reserved, use for any purposes, credit me if you are a nice person
![Ordinary base layout](ordinary-base.png)
-This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer.
+This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer.
Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence.
@@ -45,7 +45,7 @@ The symbol keys are mostly the same as on the default layout, which did a good j
The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons.
-Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with most keys mirrored, but the Delete keys shifted to maintain the directional significance of their arrangement. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the yellow keys, and Enter is right where it should be.
+Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
## The Media Layer ##
@@ -55,6 +55,7 @@ Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these
* The bright green keys are more F-keys
* The dark yellow keys signal Web and Audio applications
* The light yellow keys signal the operating system
+* The uncolored keys do nothing in case you bump them by accident
![Ordinary media layout](ordinary-media.png)
@@ -62,14 +63,18 @@ This layer was inspired by the Media layer on the Ergodox EZ but takes it farthe
Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand.
+Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much.
+
## Switching Between Layers ##
-The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; either way works. To revert to the base layer, use the Shift Lock key again in combination with the Shift key.
+The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; it works either way. To revert to the base layer, use the Shift Lock key again in combination with the Shift key.
-This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol associated with the Shift Lock button).
+This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol character associated with the Shift Lock button).
-## Special Escape Sequence ##
+## Special Escape & Backspace Sequences ##
-In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one, in the top left corner, was assigned to the tilde button which is traditionally found in that location. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner!
+In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one, in the top left corner, is home to the tilde (er, grave) which is commonly found there. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner!
That tilde key has a second function as the Shift Lock key and that makes possible a special feature. To make this layout as Ordinary as possible, the Escape key can *also* be accessed by pressing Shift Lock then the 1 button right next to it. This easy gesture is a way to partially maintain the ease of flicking your wrist to the left and tapping Escape. This gesture works in all layers.
+
+Finally, because the special Escape sequence is so natural and useful, on the top right corner of the Ergodox EZ you can do the same gesture with the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. These special sequences should feel unremarkably mundane but might prove to be remarkably useful.
diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c
index 25a0d78f3b..29a3ccf6ad 100644
--- a/keyboard/planck/keymaps/default/keymap.c
+++ b/keyboard/planck/keymaps/default/keymap.c
@@ -145,7 +145,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
},
-/* Plover layer (http://openstenoproject.org)
+/* Plover layer (http://opensteno.org)
* ,-----------------------------------------------------------------------------------.
* | # | # | # | # | # | # | # | # | # | # | # | # |
* |------+------+------+------+------+-------------+------+------+------+------+------|
@@ -225,16 +225,10 @@ float tone_dvorak[][2] = {
{440.0*pow(2.0,(31)/12.0), 8}
};
-float tone_music[][2] = {
- {440.0*pow(2.0,(12)/12.0), 8},
- {440.0*pow(2.0,(14)/12.0), 8},
- {440.0*pow(2.0,(16)/12.0), 8},
- {440.0*pow(2.0,(17)/12.0), 8},
- {440.0*pow(2.0,(19)/12.0), 8},
- {440.0*pow(2.0,(21)/12.0), 8},
- {440.0*pow(2.0,(23)/12.0), 8},
- {440.0*pow(2.0,(24)/12.0), 8}
-};
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+
#endif
@@ -324,7 +318,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case 9:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_music, false, 0);
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
layer_on(_MUSIC);
#endif
}
@@ -370,7 +364,12 @@ void process_action_user(keyrecord_t *record) {
void matrix_init_user(void) {
#ifdef AUDIO_ENABLE
- init_notes();
PLAY_NOTE_ARRAY(tone_startup, false, 0);
#endif
}
+
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+}
diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile
index 3504e27201..c2648d2294 100644
--- a/keyboard/preonic/Makefile
+++ b/keyboard/preonic/Makefile
@@ -133,7 +133,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
+CONSOLE_ENABLE = on # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
diff --git a/keyboard/preonic/keymaps/default/keymap.c b/keyboard/preonic/keymaps/default/keymap.c
index 144e9c3086..9ee803b063 100644
--- a/keyboard/preonic/keymaps/default/keymap.c
+++ b/keyboard/preonic/keymaps/default/keymap.c
@@ -3,6 +3,7 @@
#include "eeconfig.h"
#ifdef AUDIO_ENABLE
#include "audio.h"
+ #include "song_list.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -15,7 +16,7 @@
#define _LOWER 3
#define _RAISE 4
#define _MUSIC 5
-#define _ADJUST 6
+#define _ADJUST 16
// Macro name shortcuts
#define QWERTY M(_QWERTY)
@@ -142,6 +143,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
+/* Music (reserved for process_action_user)
+ *
+ */
+[_MUSIC] = {
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
@@ -161,19 +173,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
{_______, _______, _______, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-/* Music (reserved for process_action_user)
- *
- */
-[_MUSIC] = {
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
- {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
}
+
};
const uint16_t PROGMEM fn_actions[] = {
@@ -188,43 +190,10 @@ float start_up[][2] = {
{440.0*pow(2.0,(26)/12.0), 8}
};
-float tone_qwerty[][2] = {
- {440.0*pow(2.0,(23)/12.0), 8},
- {440.0*pow(2.0,(24)/12.0), 8},
- {0, 4},
- {440.0*pow(2.0,(31)/12.0), 16}
-};
-
-float tone_colemak[][2] = {
- {440.0*pow(2.0,(23)/12.0), 8},
- {440.0*pow(2.0,(24)/12.0), 8},
- {0, 4},
- {440.0*pow(2.0,(31)/12.0), 12},
- {0, 4},
- {440.0*pow(2.0,(35)/12.0), 12}
-};
-
-float tone_dvorak[][2] = {
- {440.0*pow(2.0,(23)/12.0), 8},
- {440.0*pow(2.0,(24)/12.0), 8},
- {0, 4},
- {440.0*pow(2.0,(31)/12.0), 8},
- {0, 4},
- {440.0*pow(2.0,(33)/12.0), 8},
- {0, 4},
- {440.0*pow(2.0,(31)/12.0), 8}
-};
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-float tone_music[][2] = {
- {440.0*pow(2.0,(12)/12.0), 8},
- {440.0*pow(2.0,(14)/12.0), 8},
- {440.0*pow(2.0,(16)/12.0), 8},
- {440.0*pow(2.0,(17)/12.0), 8},
- {440.0*pow(2.0,(19)/12.0), 8},
- {440.0*pow(2.0,(21)/12.0), 8},
- {440.0*pow(2.0,(23)/12.0), 8},
- {440.0*pow(2.0,(24)/12.0), 8}
-};
float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
float goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
@@ -315,7 +284,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case 9:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
- init_notes();
PLAY_NOTE_ARRAY(music_scale, false, 0);
layer_on(_MUSIC);
#endif
@@ -341,11 +309,13 @@ void process_action_user(keyrecord_t *record) {
}
void matrix_init_user(void) {
- #ifdef AUDIO_ENABLE
- init_notes();
- _delay_ms(10);
- PLAY_NOTE_ARRAY(start_up, false, 0);
- #endif
+ // audio_init();
+ play_startup_tone();
+}
+
+void play_startup_tone()
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
}
void play_goodbye_tone()
diff --git a/quantum/audio.c b/quantum/audio.c
index 8ea1bf6ff0..ab3444bc97 100644
--- a/quantum/audio.c
+++ b/quantum/audio.c
@@ -10,20 +10,23 @@
#include "eeconfig.h"
-#include "vibrato_lut.h"
+#ifdef VIBRATO_ENABLE
+ #include "vibrato_lut.h"
+#endif
#define PI 3.14159265
#define CPU_PRESCALER 8
-// Largely untested PWM audio mode (doesn't sound as good)
-// #define PWM_AUDIO
-
#ifdef PWM_AUDIO
#include "wave.h"
#define SAMPLE_DIVIDER 39
#define SAMPLE_RATE (2000000.0/SAMPLE_DIVIDER/2048)
// Resistor value of 1/ (2 * PI * 10nF * (2000000 hertz / SAMPLE_DIVIDER / 10)) for 10nF cap
+
+ float places[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+ uint16_t place_int = 0;
+ bool repeat = true;
#endif
void delay_us(int count) {
@@ -34,25 +37,21 @@ void delay_us(int count) {
int voices = 0;
int voice_place = 0;
-double frequency = 0;
+float frequency = 0;
int volume = 0;
long position = 0;
-double frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+float frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
bool sliding = false;
int max = 0xFF;
float sum = 0;
-int value = 128;
float place = 0;
-float places[8] = {0, 0, 0, 0, 0, 0, 0, 0};
-uint16_t place_int = 0;
-bool repeat = true;
uint8_t * sample;
uint16_t sample_length = 0;
-double freq = 0;
+// float freq = 0;
bool notes = false;
bool note = false;
@@ -62,7 +61,7 @@ float note_tempo = TEMPO_DEFAULT;
float note_timbre = TIMBRE_DEFAULT;
uint16_t note_position = 0;
float (* notes_pointer)[][2];
-uint8_t notes_count;
+uint16_t notes_count;
bool notes_repeat;
float notes_rest;
bool note_resting = false;
@@ -70,11 +69,15 @@ bool note_resting = false;
uint8_t current_note = 0;
uint8_t rest_counter = 0;
+#ifdef VIBRATO_ENABLE
float vibrato_counter = 0;
float vibrato_strength = .5;
float vibrato_rate = 0.125;
+#endif
+
+float polyphony_rate = 0;
-float polyphony_rate = .5;
+bool inited = false;
audio_config_t audio_config;
@@ -94,6 +97,7 @@ void audio_off(void) {
eeconfig_write_audio(audio_config.raw);
}
+#ifdef VIBRATO_ENABLE
// Vibrato rate functions
void set_vibrato_rate(float rate) {
@@ -124,6 +128,8 @@ void decrease_vibrato_strength(float change) {
#endif
+#endif
+
// Polyphony functions
void set_polyphony_rate(float rate) {
@@ -170,7 +176,50 @@ void increase_tempo(uint8_t tempo_change) {
}
}
+void audio_init() {
+
+ /* check signature */
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ audio_config.raw = eeconfig_read_audio();
+
+ #ifdef PWM_AUDIO
+ PLLFRQ = _BV(PDIV2);
+ PLLCSR = _BV(PLLE);
+ while(!(PLLCSR & _BV(PLOCK)));
+ PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */
+
+ /* Init a fast PWM on Timer4 */
+ TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */
+ TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */
+ OCR4A = 0;
+
+ /* Enable the OC4A output */
+ DDRC |= _BV(PORTC6);
+
+ TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
+
+ TCCR3A = 0x0; // Options not needed
+ TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC
+ OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback
+ #else
+ DDRC |= _BV(PORTC6);
+
+ TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
+
+ TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
+ TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
+ #endif
+
+ inited = true;
+ _delay_ms(500);
+}
+
void stop_all_notes() {
+ if (!inited) {
+ audio_init();
+ }
voices = 0;
#ifdef PWM_AUDIO
TIMSK3 &= ~_BV(OCIE3A);
@@ -189,9 +238,11 @@ void stop_all_notes() {
}
}
-void stop_note(double freq) {
+void stop_note(float freq) {
if (note) {
- cli();
+ if (!inited) {
+ audio_init();
+ }
#ifdef PWM_AUDIO
freq = freq / SAMPLE_RATE;
#endif
@@ -225,46 +276,10 @@ void stop_note(double freq) {
volume = 0;
note = false;
}
- sei();
}
}
-void init_notes() {
-
- /* check signature */
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
- audio_config.raw = eeconfig_read_audio();
-
- #ifdef PWM_AUDIO
- PLLFRQ = _BV(PDIV2);
- PLLCSR = _BV(PLLE);
- while(!(PLLCSR & _BV(PLOCK)));
- PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */
-
- /* Init a fast PWM on Timer4 */
- TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */
- TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */
- OCR4A = 0;
-
- /* Enable the OC4A output */
- DDRC |= _BV(PORTC6);
-
- TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
-
- TCCR3A = 0x0; // Options not needed
- TCCR3B = _BV(CS31) | _BV(CS30) | _BV(WGM32); // 64th prescaling and CTC
- OCR3A = SAMPLE_DIVIDER - 1; // Correct count/compare, related to sample playback
- #else
- DDRC |= _BV(PORTC6);
-
- TIMSK3 &= ~_BV(OCIE3A); // Turn off 3A interputs
-
- TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
- TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
- #endif
-}
+#ifdef VIBRATO_ENABLE
float mod(float a, int b)
{
@@ -282,6 +297,8 @@ float vibrato(float average_freq) {
return vibrated_freq;
}
+#endif
+
ISR(TIMER3_COMPA_vect) {
if (note) {
#ifdef PWM_AUDIO
@@ -333,6 +350,7 @@ ISR(TIMER3_COMPA_vect) {
}
#else
if (voices > 0) {
+ float freq;
if (polyphony_rate > 0) {
if (voices > 1) {
voice_place %= voices;
@@ -341,9 +359,13 @@ ISR(TIMER3_COMPA_vect) {
place = 0.0;
}
}
+ #ifdef VIBRATO_ENABLE
if (vibrato_strength > 0) {
freq = vibrato(frequencies[voice_place]);
} else {
+ #else
+ {
+ #endif
freq = frequencies[voice_place];
}
} else {
@@ -355,9 +377,14 @@ ISR(TIMER3_COMPA_vect) {
frequency = frequencies[voices - 1];
}
+
+ #ifdef VIBRATO_ENABLE
if (vibrato_strength > 0) {
freq = vibrato(frequency);
} else {
+ #else
+ {
+ #endif
freq = frequency;
}
}
@@ -390,9 +417,13 @@ ISR(TIMER3_COMPA_vect) {
if (note_frequency > 0) {
float freq;
+ #ifdef VIBRATO_ENABLE
if (vibrato_strength > 0) {
freq = vibrato(note_frequency);
} else {
+ #else
+ {
+ #endif
freq = note_frequency;
}
@@ -453,10 +484,45 @@ ISR(TIMER3_COMPA_vect) {
}
}
-void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest) {
+void play_note(float freq, int vol) {
+
+ if (!inited) {
+ audio_init();
+ }
+
+if (audio_config.enable && voices < 8) {
+ TIMSK3 &= ~_BV(OCIE3A);
+ // Cancel notes if notes are playing
+ if (notes)
+ stop_all_notes();
+ note = true;
+ #ifdef PWM_AUDIO
+ freq = freq / SAMPLE_RATE;
+ #endif
+ if (freq > 0) {
+ frequencies[voices] = freq;
+ volumes[voices] = vol;
+ voices++;
+ }
+
+ #ifdef PWM_AUDIO
+ TIMSK3 |= _BV(OCIE3A);
+ #else
+ TIMSK3 |= _BV(OCIE3A);
+ TCCR3A |= _BV(COM3A1);
+ #endif
+}
+
+}
+
+void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) {
+
+ if (!inited) {
+ audio_init();
+ }
if (audio_config.enable) {
- cli();
+ TIMSK3 &= ~_BV(OCIE3A);
// Cancel note if a note is playing
if (note)
stop_all_notes();
@@ -485,57 +551,28 @@ if (audio_config.enable) {
TIMSK3 |= _BV(OCIE3A);
TCCR3A |= _BV(COM3A1);
#endif
- sei();
}
}
+#ifdef PWM_AUDIO
void play_sample(uint8_t * s, uint16_t l, bool r) {
+ if (!inited) {
+ audio_init();
+ }
-if (audio_config.enable) {
-
- stop_all_notes();
- place_int = 0;
- sample = s;
- sample_length = l;
- repeat = r;
-
- #ifdef PWM_AUDIO
- TIMSK3 |= _BV(OCIE3A);
- #else
- #endif
-
-}
-
-}
-
-void play_note(double freq, int vol) {
-
-if (audio_config.enable && voices < 8) {
- cli();
- // Cancel notes if notes are playing
- if (notes)
+ if (audio_config.enable) {
+ TIMSK3 &= ~_BV(OCIE3A);
stop_all_notes();
- note = true;
- #ifdef PWM_AUDIO
- freq = freq / SAMPLE_RATE;
- #endif
- if (freq > 0) {
- frequencies[voices] = freq;
- volumes[voices] = vol;
- voices++;
- }
+ place_int = 0;
+ sample = s;
+ sample_length = l;
+ repeat = r;
- #ifdef PWM_AUDIO
- TIMSK3 |= _BV(OCIE3A);
- #else
TIMSK3 |= _BV(OCIE3A);
- TCCR3A |= _BV(COM3A1);
- #endif
- sei();
-}
-
+ }
}
+#endif
//------------------------------------------------------------------------------
// Override these functions in your keymap file to play different tunes on
@@ -545,8 +582,11 @@ void play_startup_tone()
{
}
+
+
__attribute__ ((weak))
void play_goodbye_tone()
{
+
}
//------------------------------------------------------------------------------
diff --git a/quantum/audio.h b/quantum/audio.h
index 85756af9d4..2d4d303ced 100644
--- a/quantum/audio.h
+++ b/quantum/audio.h
@@ -8,6 +8,11 @@
#ifndef AUDIO_H
#define AUDIO_H
+// Largely untested PWM audio mode (doesn't sound as good)
+// #define PWM_AUDIO
+
+// #define VIBRATO_ENABLE
+
// Enable vibrato strength/amplitude - slows down ISR too much
// #define VIBRATO_STRENGTH_ENABLE
@@ -25,6 +30,8 @@ void audio_off(void);
// Vibrato rate functions
+#ifdef VIBRATO_ENABLE
+
void set_vibrato_rate(float rate);
void increase_vibrato_rate(float change);
void decrease_vibrato_rate(float change);
@@ -37,6 +44,8 @@ void decrease_vibrato_strength(float change);
#endif
+#endif
+
// Polyphony functions
void set_polyphony_rate(float rate);
@@ -51,12 +60,15 @@ void set_tempo(float tempo);
void increase_tempo(uint8_t tempo_change);
void decrease_tempo(uint8_t tempo_change);
+void audio_init();
+
+#ifdef PWM_AUDIO
void play_sample(uint8_t * s, uint16_t l, bool r);
-void play_note(double freq, int vol);
-void stop_note(double freq);
+#endif
+void play_note(float freq, int vol);
+void stop_note(float freq);
void stop_all_notes(void);
-void init_notes(void);
-void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest);
+void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest);
#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
@@ -67,7 +79,7 @@ void play_notes(float (*np)[][2], uint8_t n_count, bool n_repeat, float n_rest);
// These macros are used to allow play_notes to play an array of indeterminate
// length. This works around the limitation of C's sizeof operation on pointers.
// The global float array for the song must be used here.
-#define NOTE_ARRAY_SIZE(x) ((int)(sizeof(x) / (sizeof(x[0]))))
+#define NOTE_ARRAY_SIZE(x) ((int16_t)(sizeof(x) / (sizeof(x[0]))))
#define PLAY_NOTE_ARRAY(note_array, note_repeat, note_rest_style) play_notes(&note_array, NOTE_ARRAY_SIZE((note_array)), (note_repeat), (note_rest_style));
void play_goodbye_tone(void);
diff --git a/quantum/vibrato_lut.h b/quantum/vibrato_lut.h
index 4c267a626a..a2b1f3e5ce 100644
--- a/quantum/vibrato_lut.h
+++ b/quantum/vibrato_lut.h
@@ -2,107 +2,27 @@
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
-#define VIBRATO_LUT_LENGTH 100
+#define VIBRATO_LUT_LENGTH 20
const float VIBRATO_LUT[VIBRATO_LUT_LENGTH] = { \
-1.00045346811453,
-1.00090535101508,
-1.00135386178926,
-1.00179722447259,
1.00223368114872,
-1.0026614990145,
-1.00307897737994,
-1.00348445457284,
-1.00387631471807,
1.00425299436105,
-1.00461298890553,
-1.00495485883603,
-1.00527723569589,
-1.00557882779254,
1.00585842560279,
-1.00611490685176,
-1.00634724124066,
-1.00655449479987,
-1.00673583384565,
1.00689052852052,
-1.00701795589922,
-1.00711760264454,
-1.0071890671992,
-1.00723206150266,
1.0072464122237,
-1.00723206150266,
-1.0071890671992,
-1.00711760264454,
-1.00701795589922,
1.00689052852052,
-1.00673583384565,
-1.00655449479987,
-1.00634724124066,
-1.00611490685176,
1.00585842560279,
-1.00557882779254,
-1.00527723569589,
-1.00495485883603,
-1.00461298890553,
1.00425299436105,
-1.00387631471807,
-1.00348445457284,
-1.00307897737994,
-1.0026614990145,
1.00223368114872,
-1.00179722447259,
-1.00135386178926,
-1.00090535101508,
-1.00045346811453,
1,
-0.999546737425598,
-0.999095467903976,
-0.998647968674285,
-0.998205999748565,
0.99777129706302,
-0.997345565759612,
-0.996930473622346,
-0.996527644691494,
-0.996138653077835,
0.99576501699778,
-0.995408193048995,
-0.995069570744927,
-0.994750467325326,
-0.994452122858643,
0.994175695650927,
-0.993922257974591,
-0.99369279212925,
-0.993488186845591,
-0.993309234042139,
0.993156625943589,
-0.993030952568311,
-0.99293269959154,
-0.992862246589715,
-0.992819865670409,
0.992805720491269,
-0.992819865670409,
-0.992862246589715,
-0.99293269959154,
-0.993030952568311,
0.993156625943589,
-0.993309234042139,
-0.993488186845591,
-0.99369279212925,
-0.993922257974591,
0.994175695650927,
-0.994452122858643,
-0.994750467325326,
-0.995069570744927,
-0.995408193048995,
0.99576501699778,
-0.996138653077835,
-0.996527644691494,
-0.996930473622346,
-0.997345565759612,
0.99777129706302,
-0.998205999748565,
-0.998647968674285,
-0.999095467903976,
-0.999546737425598,
1
}; \ No newline at end of file