summaryrefslogtreecommitdiffstats
path: root/keyboards/ergodox/keymaps/zweihander-osx
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/ergodox/keymaps/zweihander-osx')
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/Makefile2
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/keymap.c233
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/readme.markdown47
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex1151
4 files changed, 1433 insertions, 0 deletions
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/Makefile b/keyboards/ergodox/keymaps/zweihander-osx/Makefile
new file mode 100644
index 0000000000..6e3d088a43
--- /dev/null
+++ b/keyboards/ergodox/keymaps/zweihander-osx/Makefile
@@ -0,0 +1,2 @@
+# Don’t do a tricolor wave when the computer is shut down in Windows
+SLEEP_LED_ENABLE = no
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
new file mode 100644
index 0000000000..725a73e346
--- /dev/null
+++ b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
@@ -0,0 +1,233 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+#define SGWK 0 // "sagewick", ⌘S ⌘⇥
+#define SGWF 1 // "sagewick freshly", ⌘S ⌘⇥ ⌘R
+#define BBED 2 // BBEdit
+#define TMNL 3 // Terminal
+#define SAFA 4 // Safari
+#define ALFRED_LEAD_TIME 250 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | L1 | | L1 | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | ⌦ | Q | W | E | R | T | ~L1 | | ~L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ⌫ | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' / L⌘ |
+ * |--------+------+------+------+------+------| L⌘ | | L⌘ |------+------+------+------+------+--------|
+ * | L⇧ | Z | X | C | V | B | | | | N | M | , | . | / / ⌃| R⇧ |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | L⌃ | L⌥ | L⌘ | ← | → | | ↑ | ↓ | [ | ] | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | `~ | '" | | ⎋ | ⌫ |
+ * ,------|------|------| |------+--------+------.
+ * | | | PgUp | | PgDn | | |
+ * | | ⇥ |------| |------| ⇥ |Enter |
+ * | | | R⌥ | | R⌃ | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP( // layer 0 : default
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, TG(SYMB),
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LGUI,
+ KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT,
+ KC_GRV, KC_QUOT,
+ KC_PGUP,
+ KC_SPC,KC_TAB ,KC_RALT,
+ // right hand
+ TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ KC_LGUI, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC ,
+ KC_ESC, KC_BSPC,
+ KC_PGDN,
+ KC_RCTL, KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | [ | ] | { | } | " | | | | / | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | < | > | ( | ) | ' |------| |------| - | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | = | | | | : | 1 | 2 | 3 | = | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | 0 | . | ← | → | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS,
+ KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_EQL ,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_COLN, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS,
+ KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F14 | F15 |PrtScr|SclLck| Pause| | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |Safari| PgDn | | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | |BBEdit| | | | | ⏯ | ⏮ | ⏭ | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | Home | | End | | |
+ * | | |------| |------| ⌘C | ⌘V |
+ * | | | | | ⌘X | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS,
+ KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_HOME,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR ,
+ KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS,
+ LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_END ,
+ LGUI(KC_X), LGUI(KC_C), LGUI(KC_V)
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case SGWK:
+ if (record->event.pressed) {
+ return MACRO(
+ I(10),
+ D(LGUI), T(S), U(LGUI),
+ D(LGUI), T(TAB), U(LGUI),
+ END);
+ }
+ break;
+ case SGWF:
+ if (record->event.pressed) {
+ return MACRO(
+ I(10),
+ D(LGUI), T(S), U(LGUI),
+ D(LGUI), T(TAB), U(LGUI),
+ D(LGUI), T(R), U(LGUI),
+ END);
+ }
+ break;
+ case BBED:
+ if (record->event.pressed) {
+ return MACRO(
+ I(10),
+ D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME),
+ T(B), T(B), T(E), T(D), T(I), T(T),
+ T(ENT),
+ END);
+ }
+ break;
+ case TMNL:
+ if (record->event.pressed) {
+ return MACRO(
+ I(10),
+ D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME),
+ T(T), T(E), T(R), T(M), T(I), T(N), T(A), T(L),
+ T(ENT),
+ END);
+ }
+ break;
+ case SAFA:
+ if (record->event.pressed) {
+ return MACRO(
+ I(10),
+ D(LALT), T(SPC), U(LALT), W(ALFRED_LEAD_TIME),
+ T(S), T(A), T(F), T(A), T(R), T(I),
+ T(ENT),
+ END);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
new file mode 100644
index 0000000000..5125a12ee1
--- /dev/null
+++ b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
@@ -0,0 +1,47 @@
+# The Zweihander Layout
+
+NB: the backtick (\`) is special in Markdown. If I write ⌘\` in this readme, I mean “command-backtick”, not “command-backslash-backtick”.
+
+This layout is tuned for people who…
+
+
+## use OS X
+
+While this layout should work fine in Windows, it’s not tuned for it. No sane person who primarily uses Windows would put this many Windows keys on a keyboard layout.
+
+
+## mouse left-handed while doing other things with the right hand
+
+I tend to have my mouse in my left hand, but I like to use my other hand to make things go faster. I’ve added a bunch of buttons to the media layer to speed up browsing in Safari and Finder:
+
+- Close Window (⌘W)
+- Back (⌘[)
+- Forward (⌘])
+- Open and Close Parent Folder (⌥⌘↓)
+- Go Up and Close Just-Left Folder (⌥⌘↑)
+- Cycle through open windows in current application (⌘\` and ⌘⇧\`)
+- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥)
+
+Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word.
+
+
+## use lots of modifier keys in OS X menu-item shortcuts
+
+I wanted to preserve the feel of a number of shortcuts that involve pressing lots of modifier keys at once; this is why the bottom left of the keyboard has shift, control, option, and command in the usual spaces. Further, some common shortcuts I press have a key on the right side of the keyboard. These shortcuts include:
+
+- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫)
+- Shut Down Without Asking for Confirmation (⇧⌥⌘ power)
+
+⇧⌥⌘⌫, when you press the backspace on the right half of the keyboard, is much more satisfying than if you curl your left hand into a claw to press all the keys on the left. Try both; you’ll agree.
+
+
+## use Emacs-style shortcuts
+
+I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key.
+
+Having trouble remembering which thumb key is alt and which is ctrl? It’s like on the lower right of a normal keyboard — leftmost is alt, rightmost is ctrl.
+
+
+## use spreadsheets
+
+All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. There’s also a colon there for entering times and maybe IPv6 addresses. Not that I expect people to type IPv6 addresses into a spreadsheet, but, y’know.
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex b/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex
new file mode 100644
index 0000000000..832504b02a
--- /dev/null
+++ b/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex
@@ -0,0 +1,1151 @@
+:100000000C94D3020C941A030C941A030C941A0344
+:100010000C941A030C941A030C941A030C941A03EC
+:100020000C941A030C941A030C94B71F0C94892097
+:100030000C941A030C941A030C941A030C941A03CC
+:100040000C941A030C94FC1A0C941A030C941A03C3
+:100050000C941A030C9414160C941A030C941A039F
+:100060000C941A030C941A030C941A030C941A039C
+:100070000C941A030C941A030C941A030C941A038C
+:100080000C941A030C941A030C941A030C941A037C
+:100090000C941A030C941A030C941A030C941A036C
+:1000A0000C941A030C941A030C941A03730C730C1B
+:1000B000A20CA20CD80CF80C290E290E030D290E47
+:1000C000B30DB30D1A0E290E290E230EC00DC00D4F
+:1000D000C00DC00DC00DC00DC00DC00DC00DC00DB8
+:1000E000C00DC00DC00DC00DC00DC00DD20DDF0D77
+:1000F000E60DED0DF70DF620182106221821062237
+:100100005D2180210622D521E821750A01E2012C1A
+:10011000022C02E274FA011602160104020401091B
+:1001200002090104020401150215010C020C012848
+:10013000022800750A01E2012C022C02E274FA0185
+:10014000170217010802080115021501100210011B
+:100150000C020C0111021101040204010F020F0133
+:1001600028022800750A01E2012C022C02E274FA2E
+:100170000105020501050205010802080107020741
+:10018000010C020C011702170128022800750A0150
+:10019000E30116021602E301E3012B022B02E30145
+:1001A000E30115021502E300750A01E301160216C8
+:1001B00002E301E3012B022B02E3000000F0A12E79
+:1001C000004C002A00E100E00000001E00140004C2
+:1001D000001D00E200E2001F001A0016001B00E3F1
+:1001E000002B00200008000700060050002C002112
+:1001F000001500090019004F004B00220017000AEB
+:1002000000050000003500015301510000E300002B
+:10021000003400015301510000E3000000290023D5
+:10022000001C000B00110000002A00240018000D23
+:1002300000100052004E0025000C000E0036005148
+:10024000002800260012000F0037002F002B002787
+:10025000001300334238613000E0002D00310034DB
+:1002600068E5002C00000001000100010001000110
+:100270000000003A002F0036020100010001003B9F
+:1002800000300037020100010001003C002F02266F
+:10029000020100010001003D0030022702010001BF
+:1002A0000001003E00340234002E00000001000175
+:1002B0000001000000010000000100010001000039
+:1002C000000100000001003F0038002D0033020053
+:1002D0000001004000240021001E00270001004111
+:1002E00000250022001F00370001004200260023E5
+:1002F00000200050000100430025022E022E004F76
+:10030000000100440045000100010001000000015F
+:10031000000100010001000100000069000100016E
+:10032000000100010001006A000100043001000129
+:1003300000010001004B004E00010001000100011E
+:100340000001300100010001004A000100033001FA
+:100350000002300000010001000100000001000067
+:100360000001001408010000000100000001001A53
+:100370000830082F082C0200000100350A520C50EA
+:10038000002C00A9004D00350852005100AC00AA15
+:100390000019080100510C4F00AB00A8000608012D
+:1003A0000001000100010001001B08A5000100AED2
+:1003B000000100010000000000000000000000003B
+:1003C0000000010204060A0F17202C3A4A5D7187CB
+:1003D0009DB3C7DAE9F5FCFFFCF5E9DAC7B39D8701
+:1003E000715D4A3A2C20170F0A0604020100000032
+:1003F0000000000000000016034500720067006F57
+:100400000044006F007800200045005A00000016EC
+:10041000034500720067006F0044006F0078002001
+:100420000045005A0000000403090409026D00049D
+:100430000100A0FA090400000103010100092111D3
+:100440000100012240000705810308000A09040198
+:10045000000103010200092111010001224D0007E2
+:1004600005820308000A09040200010300000009D4
+:1004700021110100012236000705830308000A0943
+:1004800004030001030000000921110100012239C9
+:10049000000705840310000112011001000000088C
+:1004A000EDFE071301000102000105010906A1018B
+:1004B000050719E029E71500250195087501810256
+:1004C0000508190129059505750191029501750326
+:1004D0009101050719002977150025019578750107
+:1004E0008102C005010980A101850216810026B79D
+:1004F000001A81002AB700751095018100C0050C13
+:100500000901A1018503160100269C021A01002A97
+:100510009C02751095018100C005010902A1010925
+:1005200001A1000509190129051500250195057589
+:100530000181029501750381010501093009311519
+:1005400081257F95027508810609381581257F95DB
+:100550000175088106050C0A38021581257F950171
+:1005600075088106C0C005010906A101050719E04B
+:1005700029E7150025019508750181029501750887
+:10058000810105081901290595057501910295015B
+:10059000750391010507190029FF150026FF009535
+:1005A0000675088100C011241FBECFEFDAE0DEBF60
+:1005B000CDBF04B603FE27C08091010290910202D4
+:1005C000A0910302B09104028730904BA740B04B3A
+:1005D000D1F41092010210920202109203021092C2
+:1005E000040214BE84B7877F84BF0FB6F894A89521
+:1005F00080916000886180936000109260000FBE5F
+:10060000E0E0FFE3099511E0A0E0B1E0E0EAF7E403
+:1006100002C005900D92A433B107D9F712E0A4E30C
+:10062000B1E001C01D92A130B107E1F70E94FC1CAE
+:100630000C94CE230C9400001092B9008AE08093B1
+:10064000B800089594EA9093BC009091BC0097FF85
+:10065000FCCF9091B900987F983021F0903111F043
+:1006600081E008958093BB0084E88093BC00809172
+:10067000BC0087FFFCCF8091B900887F883111F0E2
+:10068000803471F780E0089584E98093BC00809104
+:10069000BC0084FDFCCF08958093BB0084E8809368
+:1006A000BC008091BC0087FFFCCF9091B900987F7F
+:1006B00081E0983209F480E0089584E88093BC00DA
+:1006C0008091BC0087FFFCCF8091BB00089580B370
+:1006D0008C7080BB81B3836F81BB089580910101D1
+:1006E000811115C080E40E942203809301018111D1
+:1006F0000CC082E10E944C0380930101811105C06E
+:100700008FEF0E944C03809301010E94440384B147
+:10071000807F84B985B1807F85B98AB1837F8AB9AA
+:100720008BB1837F8BB93E98469808950C94E4046E
+:100730000E942509809301010E946E030E946703B5
+:10074000A5E3B1E0E3E4F1E08EE08E0F11921D929B
+:100750008E13FCCF0C940F090E9425098093010190
+:100760000E946E030E946703A5E3B1E0E3E4F1E0B9
+:100770008EE08E0F11921D928E13FCCF0895BF92C2
+:10078000CF92DF92EF92FF920F931F93CF93DF935D
+:1007900080910101882379F0809134018F5F8093EB
+:1007A0003401811108C00E94250980930101811143
+:1007B00002C00E94B70805E311E0C0E0D0E0EE24DB
+:1007C000E394F12CDD24D39495E0C92EC730D105F4
+:1007D00000F58091010181113CC080E40E94220358
+:1007E00080930101811112C082E10E944C03809329
+:1007F000010181110BC0C7010C2E01C0880F0A94A2
+:10080000EAF780950E944C03809301010E94440303
+:1008100020C0CA30A1F028F4C83059F0C93061F0C6
+:1008200005C0CC3089F070F0CD3089F0209A28983E
+:1008300010C0219A29980DC0229A2A980AC0239A9A
+:100840002B9807C0529A01C0539A5B9802C03E9AF7
+:10085000469880EA8A95F1F7C730D10518F580915E
+:100860000101811144C080E40E94220380930101B0
+:10087000882311F0B12C12C083E10E944C038093B5
+:1008800001018111F7CF81E40E94220380930101CD
+:100890008111F0CF0E945D03B82EB0940E944403F2
+:1008A0008B2D26C08FB181708D25799902C092E081
+:1008B00001C090E0892B7C9902C024E001C020E0B7
+:1008C000822B7D9902C028E001C020E0822B7E9916
+:1008D00002C090E101C090E0892B9FB19095991FD3
+:1008E0009927991F9295990F907E892B01C080E0DE
+:1008F000F8019081981719F08083C09200010E943E
+:100900006E0321960F5F1F4FCE30D10509F05ECFE9
+:10091000809100018823A1F08150809300018823F9
+:1009200029F0F5E0FA95F1F700000AC0A3E4B1E080
+:10093000E5E3F1E0CF01825F91919D938E13FCCFAF
+:100940000E94410681E0DF91CF911F910F91FF90AE
+:10095000EF90DF90CF90BF900895E82FF0E0ED5B2F
+:10096000FE4F808108950895FC016230B9F028F4AB
+:10097000662341F0613061F023C06330A9F0643038
+:10098000C9F01EC082818823D9F088EA91E00895D9
+:1009900082818823A9F08DE891E0089582818823DF
+:1009A00079F084E691E008958281882349F083E319
+:1009B00091E008958281882319F08AE091E00895FA
+:1009C00080E090E0089508956091B0017091B101C8
+:1009D0008091B2019091B3010E94081556985E98DB
+:1009E00025982D9826982E9827982F98813019F0C1
+:1009F000823021F00895259A2D9A0895269A2E9AEC
+:100A0000089581E0089581E008950C9403050E9403
+:100A1000940E2FEF84E39CE0215080409040E1F75A
+:100A200000C000000C9439160F931F93CF93DF93EF
+:100A30008C01FC01C081D181CE010E948D13BE01C9
+:100A40000E94D807EC01B8010E940505882309F42B
+:100A500012C1B801CE010E946808882309F40BC1B5
+:100A6000B801CE010E948109882309F404C1C43170
+:100A7000F0E7DF0708F0CDC0C23080E7D80708F400
+:100A8000A3C0F8018281882309F4AAC00E947215CC
+:100A9000811102C00E9458150E94851590E0909324
+:100AA000F3018093F201C230F0E7DF0721F4809177
+:100AB000F201816082C0C33080E7D80721F48091C1
+:100AC000F20182607AC0C430E0E7DE0721F4809151
+:100AD000F201846072C0C530F0E7DF0719F480913D
+:100AE000F20127C0C63080E7D80721F48091F201D7
+:100AF000806163C0C730E0E7DE0721F48091F20136
+:100B000080625BC0C830F0E7DF0721F48091F2011A
+:100B1000806453C0C93080E7D80721F48091F20186
+:100B200080684BC0CA30E0E7DE0729F48091F2010B
+:100B30008460886042C0CB30F0E7DF0721F4809109
+:100B4000F2018E7F3AC0CC3080E7D80721F4809143
+:100B5000F2018D7F32C0CD30E0E7DE0721F48091D5
+:100B6000F2018B7F2AC0CE30F0E7DF0719F48091C5
+:100B7000F20122C0CF3080E7D80721F48091F20142
+:100B80008F7E1BC0C031E0E7DE0721F48091F201C7
+:100B90008F7D13C0C131F0E7DF0721F48091F201AE
+:100BA0008F7B0BC0C231D04721F48091F2018F7747
+:100BB00004C08091F2018B7F877F8093F201809146
+:100BC000F2010E94891557C0C115E0E7DE0779F0F0
+:100BD000C130D047A1F081E0809351018093520150
+:100BE000C801DF91CF911F910F910C940105F8017D
+:100BF0008281882309F43FC00E9407053CC0F801A8
+:100C000082818823C1F18091CD0181608093CD01E3
+:100C100032C0CB3380E7D807A1F4F8018281882362
+:100C200021F01092510182E016C080915101811192
+:100C300006C086E20E940C0B86E20E94DF0B82E077
+:100C400018C0CC33D04739F6F8018281882331F0BF
+:100C50001092520180E20E942E0C0DC08091520130
+:100C6000811106C087E20E940C0B87E20E94DF0B15
+:100C700080E20E94350C80E0DF91CF911F910F91AF
+:100C800008950C94960308950C9443060C9444061E
+:100C900026E0729FF001112444E5849FE00DF11DD0
+:100CA0001124E60FF11DEE0FFF1FE154FE4F859159
+:100CB00094910E94EA07811560E49607B0F58115CA
+:100CC00070E3970708F0E6C0803E9105D8F4803CB9
+:100CD000910508F06CC0883A910578F4853A910541
+:100CE00008F06BC08130910509F460C108F417C1A8
+:100CF0008430910508F05AC112C18D3B910508F46A
+:100D000067C00DC18F3F910509F048F4803F910500
+:100D100008F0B5C0883E910508F448C100C18115AE
+:100D200020E2920708F0ADC00895811543E59407CD
+:100D300090F4811562E5960708F0D0C0811571E541
+:100D4000970708F0C6C0811520E5920708F0A5C0F6
+:100D50009F70906A0895811545E59407D8F4811530
+:100D600064E5960708F0D0C0482F4695469570E296
+:100D7000479FA00111248370992721E030E0B90139
+:100D800002C0660F771F8A95E2F7CB01842B952B63
+:100D90009A680895811576E5970708F4BAC09C0112
+:100DA00030562115304108F0BAC09F70B6C0FC0122
+:100DB000EE0FFF1FE55CFF4F6AC0853A910509F40D
+:100DC000B1C0863A910509F0B0C082E890E4089578
+:100DD000883A910509F4ACC0893A910509F4ABC091
+:100DE0008A3A910509F4AAC08B3A910509F4A9C081
+:100DF0008C3A910509F4A8C08B3B910509F4A7C072
+:100E00008C3B910509F4A6C08D3A910509F4A5C063
+:100E1000803B910509F4A4C08E3A910509F4A3C062
+:100E20008F3A910509F4A2C0813B910509F4A1C054
+:100E3000823B910509F4A0C0833B910509F49FC052
+:100E4000843B910509F49EC0853B910509F49DC042
+:100E5000863B910509F49CC0873B910509F49BC032
+:100E6000883B910509F49AC0893B910509F499C022
+:100E70008A3B910509F498C080E094E40895906558
+:100E80000895FC01FF70EE0FFF1FE554FE4F8591A2
+:100E9000949108959927906C0895482F437021E00C
+:100EA00030E002C0220F331F4A95E2F73C68AC01E4
+:100EB00064E0569547956A95E1F74370342B8F703F
+:100EC0008695869560E2869FC0011124822B932B24
+:100ED0000895982F8827816F906A0895482F469526
+:100EE000469570E2479FA00111248370992721E065
+:100EF00030E0B90102C0660F771F8A95E2F7CB0197
+:100F0000842B952B9C680895982F8827846F906A6E
+:100F100008958F719927982F88279062089580E00F
+:100F200090E0089581E890E4089583E890E40895BE
+:100F300082EE94E4089589EE94E408958AEE94E4B0
+:100F4000089585EB94E4089586EB94E4089583EB8B
+:100F500094E4089584EB94E4089587EB94E4089571
+:100F60008CEC94E408958DEC94E4089583E895E482
+:100F700008958AE895E4089582E995E4089584E95E
+:100F800095E4089581E296E4089583E296E4089555
+:100F900084E296E4089585E296E4089586E296E474
+:100FA000089587E296E408958AE296E40895089504
+:100FB00096E0799FF001112494E5899FE00DF11DE1
+:100FC0001124E60FF11DEE0FFF1FE154FE4F859136
+:100FD000949108958238910549F1B0F481339105D7
+:100FE00009F458C048F48932910509F44EC08A3298
+:100FF000910509F454C008958533910509F440C062
+:101000008933910599F00895833E910529F138F4CB
+:10101000803E910591F0823E9105A1F00895863EB3
+:101020009105F9F0873E910531F108952091F20183
+:1010300020FD3AC021FD38C008958091F20180FD65
+:1010400035C032C08091F20182FF32C08091F2013E
+:1010500084FD30C083EE39C08091F20182FD28C04A
+:10106000F5CF8091F20183FF27C08091F20184FDCA
+:1010700021C087EE2AC08091F20183FD1DC0F5CF0B
+:101080008091F20185FD1AC01BC08091F20185FD9F
+:1010900017C014C08091F20186FD14C015C0809164
+:1010A000F20186FD11C00EC080EE0FC089E30DC0B5
+:1010B00082EE0BC080E009C086EE07C089E205C061
+:1010C00085E303C08AE201C081E390E008950895BA
+:1010D0000F931F93CF93FB012281211102C0C1E026
+:1010E00041C08C01C0916001C11125C0843190477D
+:1010F000B1F70E94670881E0809360010E94DE15CD
+:1011000090935F0180935E011092530110925501FC
+:1011100010925401109257011092560110925901E9
+:101120001092580110925B0110925A0110925D01C9
+:1011300010925C0117C080915E0190915F010E9446
+:10114000EA15883C910558F690915301E92FF0E09B
+:10115000EE0FFF1FEC5AFE4F118300839F5F9093A9
+:101160005301C0E08C2FCF911F910F910895569895
+:101170005E9825982D9826982E9827982F988FEF6F
+:1011800090E0909389008093880090938B008093E7
+:101190008A0090938D0080938C00259A2D9A2FEFD2
+:1011A00080E792E0215080409040E1F700C00000CD
+:1011B000269A2E9A2FEF80E792E0215080409040AF
+:1011C000E1F700C00000279A2F9A2FEF80E792E006
+:1011D000215080409040E1F700C0000025982D98F4
+:1011E0002FEF80E792E0215080409040E1F700C06F
+:1011F000000026982E982FEF80E792E02150804043
+:101200009040E1F700C0000027982F9856985E980C
+:1012100025982D9826982E9827982F98089589EA32
+:101220008093800089E08093810024982C983F98D7
+:101230008AB18F748AB96E98479A8BB1806B8BB9DB
+:10124000769A0E94B7080C94E30480E2809301012F
+:101250008091610181110EC00E941C0381E0809386
+:1012600061012FEF83ED90E3215080409040E1F742
+:1012700000C0000080E40E942203809301018111DC
+:101280002EC00E944C0380930101811128C00E944E
+:101290004C0380930101811122C08FE30E944C0313
+:1012A0008093010181111BC00E94440380E40E94CD
+:1012B000220380930101811112C08CE00E944C0333
+:1012C0008093010181110BC00E944C0380930101A6
+:1012D000811105C08FE30E944C03809301010E949D
+:1012E0004403809101010895282F882339F090E06C
+:1012F0002A3010F44D9608950697089587E290E0FD
+:101300000895FF920F931F93CF93DF93813020E8CE
+:10131000920708F44DC0FB012281222309F448C042
+:10132000EC01DF7780916201813079F050F08230FA
+:10133000C1F482EE0E940C0B87E50E940C0B87E53E
+:101340000EC082EE0E940C0B0CC080EE0E940C0BB3
+:1013500081EE0E940C0B88E10E940C0B88E10E9438
+:10136000DF0B0CE010E0CE01002E02C096958795B1
+:101370000A94E2F78F700E947409F82E0E940C0BF9
+:101380008F2D0E94DF0B045011090C3FFFEF1F0748
+:1013900051F780916201813029F010F0823041F4E0
+:1013A00082EE04C080EE0E94DF0B81EE0E94DF0B14
+:1013B00081E0DF91CF911F910F91FF90089590935D
+:1013C0006801809367010895E0916701F0916801D9
+:1013D000309721F00190F081E02D099480E008958C
+:1013E000E0916701F0916801309721F00280F3816C
+:1013F000E02D09940895E0916701F091680130971C
+:1014000021F00480F581E02D099408952091650173
+:10141000309166018217930771F090936601809373
+:101420006501E0916701F0916801309721F0068035
+:10143000F781E02D099408952091630130916401B2
+:101440008217930771F09093640180936301E09198
+:101450006701F0916801309721F00084F185E02D5B
+:101460000994089508950C94320A0E94D5150E949B
+:1014700098030C945B16CF92DF92EF92FF920F933A
+:101480001F93CF93DF93CDB7DEB72B970FB6F894AA
+:10149000DEBF0FBECDBF0E94BF038AE6C82E81E02B
+:1014A000D82E00E010E0E02E802F0E94AD04F6015F
+:1014B00041916F01F42EF826B1F40F5F1F4F0E30EB
+:1014C000110589F78FEF89838A831B820E94DE15BD
+:1014D0008160782F9D838C8349815A816B818D81B6
+:1014E0000E94DE0A40C09091CD0191FF04C08B871D
+:1014F0000E94B3048B8520E030E04F2D50E0922F06
+:10150000BA01022E02C0759567950A94E2F760FF52
+:1015100024C02E83EF8221E030E0690102C0CC0CB0
+:10152000DD1C9A95E2F790E08C219D21892B09F42E
+:1015300020E028870E94DE158160782F9A878987AE
+:101540004E815F8168858A850E94DE0AF801E6592E
+:10155000FE4F8081C826C08206C02F5F3F4F2630D5
+:10156000310569F6AACF0E94F317109169010E9414
+:10157000E4091817A1F00E94E409809369012B96F1
+:101580000FB6F894DEBF0FBECDBFDF91CF911F9194
+:101590000F91FF90EF90DF90CF900C9446062B9622
+:1015A0000FB6F894DEBF0FBECDBFDF91CF911F9174
+:1015B0000F91FF90EF90DF90CF900895CF93DF933E
+:1015C000CDB7DEB72B970FB6F894DEBF0FBECDBFF9
+:1015D0004F83588769877A878B87DE01119686E06B
+:1015E000FD0111928A95E9F785E0FE013796019099
+:1015F0000D928A95E1F749815A816B817C818D81B9
+:101600009E810E9432112B960FB6F894DEBF0FBE5A
+:10161000CDBFDF91CF910895CF93882309F4CDC03A
+:10162000C82F823859F40E94E40981FDC6C089E3BD
+:101630000E940C140E94D91489E30CC0833879F4F9
+:101640000E94E40980FDB9C083E50E940C140E9449
+:10165000D91483E50E944E14CF910C94D914843888
+:1016600059F40E94E40982FDA8C087E40E940C148A
+:101670000E94D91487E4EECF8CEF8C0F813A48F4A6
+:101680008C2F0E943D1A811198C08C2F0E940C143F
+:10169000E3CF80E28C0F883048F4C77081E001C04E
+:1016A000880FCA95EAF70E949214D6CF8BE58C0F6B
+:1016B000833078F4C53A29F0C63A31F083E890E0F7
+:1016C00005C081E890E002C082E890E0CF910C94E0
+:1016D000060A88E58C0F853108F06FC0C83A61F1C1
+:1016E000C93A69F1CA3A71F1CB3A79F1CC3A81F150
+:1016F000CB3B89F1CC3B91F1CD3A99F1C03BA1F1C3
+:10170000CE3AA9F1CF3AB1F1C13BB9F1C23BC1F137
+:10171000C33BC9F1C43BD1F1C53BD9F1C63BE1F1B3
+:10172000C73BE9F1C83BF1F1C93BF9F1CA3B09F408
+:101730003FC080E090E03EC082EE90E03BC089EE8A
+:1017400090E038C08AEE90E035C085EB90E032C082
+:1017500086EB90E02FC083EB90E02CC084EB90E010
+:1017600029C087EB90E026C08CEC90E023C08DEC84
+:1017700090E020C083E891E01DC08AE891E01AC0A3
+:1017800082E991E017C084E991E014C081E292E01F
+:1017900011C083E292E00EC084E292E00BC085E2C9
+:1017A00092E008C086E292E005C087E292E002C0C3
+:1017B0008AE292E0CF910C941C0ACF91089588237D
+:1017C00009F44BC0823859F40E94E40981FF45C0F6
+:1017D00089E30E940C140E94D91489E30CC0833859
+:1017E00071F40E94E40980FF38C083E50E940C1464
+:1017F0000E94D91483E50E944E140C94D9148438A5
+:1018000059F40E94E40982FF28C087E40E940C1466
+:101810000E94D91487E4EFCF9CEF980F913A58F3C8
+:1018200090E2980F983050F4877091E001C0990FC2
+:101830008A95EAF7892F0E949814DFCF9BE5980FCD
+:10184000933020F480E090E00C94060A885A8531A9
+:1018500020F480E090E00C941C0A0895882321F085
+:101860000E9492140C94D9140895882321F00E94A8
+:1018700098140C94D91408957F928F929F92AF92EE
+:10188000BF92CF92DF92EF92FF920F931F93CF936D
+:10189000DF931F92CDB7DEB77C01C62E772EFC01F9
+:1018A000058102950F70128111110E94AF140E94E0
+:1018B0000514882379F0112369F080E28C0D8830BB
+:1018C00048F082E00E94EE130E94051491E0D82EA9
+:1018D000D92601C0D12CE72DE295EF70F0E0EA5A4D
+:1018E000FF4F0C947F23872D807F072D0F70882357
+:1018F00011F00295007F112389F0002309F490C1B3
+:1019000080E28C0D883020F4802F0E94921403C056
+:10191000802F0E94A2140E94D91482C18C2D0E9493
+:10192000DF0B002309F495C180E28C0D883020F490
+:10193000802F0E94981403C0802F0E94A8140E9438
+:10194000D91487C1972D907F872D8F70903211F019
+:101950008295807FCC2021F0F1E0CF16B1F01EC03F
+:10196000112349F0002309F414C1013009F011C119
+:101970000E94C2146EC1002319F0013009F469C13C
+:1019800089830E94C51489810AC1112321F0023084
+:1019900008F05FC1FEC001115CC101C1112321F03B
+:1019A000002309F4F6C03CC1002309F4F8C03EC18D
+:1019B000872D86958695837090E0009719F00197A2
+:1019C00061F047C1112321F08C2D972D937002C037
+:1019D00080E090E00E94060A3CC1112321F08C2D8A
+:1019E000972D937002C080E090E00E941C0A31C1E4
+:1019F0008C2D112319F00E94FB1602C00E94631760
+:101A00000E94E81726C1872D837009F052C011117A
+:101A100020C18C2D829586958770880F880F9C2D0C
+:101A20009F70892E912CA12CB12C082E04C0880CFB
+:101A3000991CAA1CBB1C0A94D2F7C4FE14C00FE068
+:101A400010E020E030E0B901A80104C0440F551FA8
+:101A5000661F771F8A95D2F7CB01BA016095709502
+:101A60008095909503C060E070E0CB01272D26950E
+:101A70002695237030E02230310569F0233031059E
+:101A800089F0682979298A299B292130310571F04B
+:101A90000E947A12DEC0682979298A299B290E942E
+:101AA0009612D7C00E947A12C501B4010E945E123C
+:101AB000D0C0112319F0872D817001C0869588232D
+:101AC00009F4C7C08C2D829586958770880F880F82
+:101AD0009C2D9F70892E912CA12CB12C082E04C016
+:101AE000880C991CAA1CBB1C0A94D2F7C4FE14C013
+:101AF0000FE010E020E030E0B901A80104C0440F7D
+:101B0000551F661F771F8A95D2F7CB01BA016095E2
+:101B100070958095909503C060E070E0CB01272D13
+:101B2000269526952370422F50E04230510569F0EA
+:101B30004330510589F0682979298A299B29413048
+:101B4000510571F00E94541384C0682979298A29AB
+:101B50009B290E9470137DC00E945413C501B401DB
+:101B60000E94381376C08C2D90E0FC01E05EF109F4
+:101B7000E531F10508F050C0EA59FF4F0C947F237E
+:101B80000C2D0F70872D8F71112331F00E94D1120F
+:101B9000802F0E942E0C5DC00E94F212802F0E94A6
+:101BA000350C57C0112339F0011153C0872D8F71A7
+:101BB0000E9417134EC0023008F04BC0F7CF11231C
+:101BC00039F0872D8F710E94D11243C01123C9F3C0
+:101BD000872D8F710E94F2123CC0112329F0872DAE
+:101BE0008F710E94BC1235C00E94B21232C0112304
+:101BF00051F0172D1F71812F0E94D11263E0812FA8
+:101C00000E94E51326C081E00E94EE13023008F125
+:101C100082E00E94EE131DC0112331F0002389F2EF
+:101C20008C2D0E940C0B15C0002391F28C2D0E946C
+:101C3000DF0B0FC0472D4F706C2DC7010E94B404FD
+:101C40000E94D61106C0472D4F706C2DC7010E940F
+:101C5000D707DD20F9F00E94E11380FD1BC0F701DA
+:101C600012820E94DB130E94D112C7010E94590EFA
+:101C70000E94DB130F90DF91CF911F910F91FF9086
+:101C8000EF90DF90CF90BF90AF909F908F907F901C
+:101C90000C94F2120F90DF91CF911F910F91FF9052
+:101CA000EF90DF90CF90BF90AF909F908F907F90FC
+:101CB00008950F931F93CF93DF93EC01888199814F
+:101CC0002B813C81232BB9F09F3F11F48F3F99F07A
+:101CD000CE010E941405882371F0688179818A8180
+:101CE0000E94D7138C010E948C130E945312B801DA
+:101CF000CE010E943C0CDF91CF911F910F9108956E
+:101D00000E94AF140E94BF140E9484140E94D91430
+:101D10000E9499180E94E81780E090E00E94060A4D
+:101D200080E090E00C941C0A0E949F140C94800E9A
+:101D30000E94CC13292F22952F7030E02C303105D2
+:101D40004CF42A3031056CF422503109223031052F
+:101D5000A8F407C02C30310569F02F30310551F05F
+:101D60000DC0803F69F018F4803E40F409C0843F04
+:101D700029F406C093FB882780F9089580E0089530
+:101D800081E00895CF93DF9300D000D01F92CDB7AC
+:101D9000DEB70F900F900F900F900F90DF91CF91C3
+:101DA0000895CF93DF9300D000D000D0CDB7DEB739
+:101DB00026960FB6F894DEBF0FBECDBFDF91CF9150
+:101DC00008951F93CF93DF93C091780116E080911F
+:101DD0007901C81799F0D0E01C9FF0011D9FF00D0C
+:101DE0001124E658FE4F40815181628173818481C4
+:101DF00095810E94D10E2196C770E9CFDF91CF91D6
+:101E00001F9108954091AA015091AB016091AC01DE
+:101E10007091AD018091AE019091AF010C94D10E03
+:101E20008091AF0182958F7009F054C08091AC0110
+:101E3000882309F44FC080917801A09179016091C5
+:101E4000AA017091AB014091AD015091AE01B6E095
+:101E50008A1709F43FC090E041155105C1F17F3F59
+:101E600011F46F3FA1F1B89FF001B99FF00D11245B
+:101E7000E658FE4F218172132AC02081621327C0C9
+:101E80002281211124C0238134812417350710F4C5
+:101E900021503109241B350B283C3105C0F4209119
+:101EA000AF012F7020612093AF0126E0289FF00141
+:101EB000299FF00D1124E158FE4F80818F708061C1
+:101EC00080838AEA91E00E94590E0C94E10E0196FB
+:101ED0008770BECF0895CF92DF92EF92FF920F935B
+:101EE0001F93CF93DF93CDB7DEB762970FB6F89409
+:101EF000DEBF0FBECDBF8C0185E0F801DE011D966F
+:101F000001900D928A95E