From 1d1ced53c7cec5da2ce21bdd405d1e20bd474321 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Tue, 14 Jun 2016 17:28:54 +0200 Subject: Update the ergodox-ez/algernon keymap (#409) Compared to the previous version, the following noteworthy changes have been made to the keymap: * The keyboard starts in NKRO mode, bootmagic and other things are disabled. * A STENO layer was added, to be used with Plover. * An experimental layout was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress. * `LEAD y` types \o/. * Some keys on the BASE layer have been moved around: - `?` moved to the left pinky, left of `Q`. - `=` shifted one row down, but `F11` stayed where it was. - `-` on the left half was replaced by `Tab`. - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key. - `:` now inputs `;` when shifted. * `ESC` cancels the **HUN** layer too, not just modifiers. Signed-off-by: Gergely Nagy --- keyboard/ergodox_ez/keymaps/algernon/.gitignore | 1 + keyboard/ergodox_ez/keymaps/algernon/Makefile | 4 + keyboard/ergodox_ez/keymaps/algernon/README.md | 133 --- keyboard/ergodox_ez/keymaps/algernon/compiled.hex | 1257 -------------------- keyboard/ergodox_ez/keymaps/algernon/config.h | 6 +- .../keymaps/algernon/images/base-layer.png | Bin 95356 -> 96845 bytes .../keymaps/algernon/images/experimental-layer.png | Bin 0 -> 96956 bytes .../keymaps/algernon/images/hun-layer.png | Bin 78171 -> 78720 bytes .../keymaps/algernon/images/steno-layer.png | Bin 0 -> 65146 bytes keyboard/ergodox_ez/keymaps/algernon/keymap.c | 426 +++++-- keyboard/ergodox_ez/keymaps/algernon/readme.md | 158 +++ .../ergodox_ez/keymaps/algernon/tools/max-focused | 5 + 12 files changed, 505 insertions(+), 1485 deletions(-) create mode 100644 keyboard/ergodox_ez/keymaps/algernon/.gitignore delete mode 100644 keyboard/ergodox_ez/keymaps/algernon/README.md delete mode 100644 keyboard/ergodox_ez/keymaps/algernon/compiled.hex create mode 100644 keyboard/ergodox_ez/keymaps/algernon/images/experimental-layer.png create mode 100644 keyboard/ergodox_ez/keymaps/algernon/images/steno-layer.png create mode 100644 keyboard/ergodox_ez/keymaps/algernon/readme.md create mode 100755 keyboard/ergodox_ez/keymaps/algernon/tools/max-focused diff --git a/keyboard/ergodox_ez/keymaps/algernon/.gitignore b/keyboard/ergodox_ez/keymaps/algernon/.gitignore new file mode 100644 index 000000000..a075e32bf --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/algernon/.gitignore @@ -0,0 +1 @@ +/compiled.hex diff --git a/keyboard/ergodox_ez/keymaps/algernon/Makefile b/keyboard/ergodox_ez/keymaps/algernon/Makefile index 34e574220..3db507c8f 100644 --- a/keyboard/ergodox_ez/keymaps/algernon/Makefile +++ b/keyboard/ergodox_ez/keymaps/algernon/Makefile @@ -2,3 +2,7 @@ BOOTMAGIC_ENABLE=no COMMAND_ENABLE=no SLEEP_LED_ENABLE=no UNICODE_ENABLE=no + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboard/ergodox_ez/keymaps/algernon/README.md b/keyboard/ergodox_ez/keymaps/algernon/README.md deleted file mode 100644 index b8578e438..000000000 --- a/keyboard/ergodox_ez/keymaps/algernon/README.md +++ /dev/null @@ -1,133 +0,0 @@ -algernon's layout -======================= - -This is an unconventional layout for the ErgoDox EZ. For more details about the -history of the layout, see my -[blog posts about my ErgoDox journey][blog-ergodox]. - - [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/ - -Some of the things in the layout only work when one uses Spacemacs and GNOME -under Linux. Your mileage may vary. - -## Base layer - -[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b) - -At its core, this is a Dvorak layout, with some minor changes (for example, `-` -being on the left half, and on the innermost key of the bottom row on the -right). The more interesting parts are how certain keys behave: - -* The keys on the number row double as function keys, when held for a bit longer - than an usual tap. This allows me to use the function keys without having to - switch layers. -* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they - are considered active for the next key press only. When double tapped, they - toggle on, until a third, single tap sometime later. When held, they act as - expected. My usual pattern is that I use these for the next keypress only, so - this behaviour is perfect. If I need them held, I'll just double-tap. -* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, - which pops up an application selector. It also switches to a one-shot layer, - where the number row on the left half turns into app selector macros, for the - most common things I usually want to switch to. Otherwise it behaves as on a - normal layout. -* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of - the one-shot modifiers are in-flight (as in, single-tapped, and not expired - yet), it cancels all one-shot modifiers. Otherwise it sends the usual keycode. -* The **Emacs** and **Hun** layer keys are one-shot, the **1Hand** is a toggle. -* The **Lead** key allows me to type in a sequence of keys, and trigger some - actions: - - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that - does this. - - `LEAD l` uses the unicode input method to enter a `λ`. - - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯` - - `LEAD w m` maximises the currently focused window. - -## Hungarian layer - -[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9) - -On this layer, the accented characters are at the same position as their base -variant. For some, which can have other diatribes, the long one is on top, -short's on bottom. Tapping any of the accented characters takes us back to the -base layer. - -## Emacs layer - -[![Emacs layer](images/emacs-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) - -This layer is primarily for navigating text - and for some mousing and other -things, because there was space. Most of the keys should be pretty -self-explanatory, except for a few: - -* There are three keys on the bottom row of the left side, that change how some - of the other keys - explained just below - work. The keys are for *Emacs - mode* (the default), *Terminal mode*, and *Traditional mode*, respectively. -* The *Visual mode* key (the top big key on the left side) sends the `v` key in - *Emacs mode*, to enter Visual mode in Spacemacs. In all other modes, it is a - no-op. -* The *Copy/Cut* key (the bottom big key on the left side) sends the copy - command on tap, the cut one when held for longer than a normal tap. The **copy - command** is `y` in *Emacs mode*, `Ctrl-Shift-c` in *Terminal mode*, and - `Ctrl-c` in *Traditional mode*. The **cut command** is `x` in *Emacs mode*, - `Ctrl-Shift-x` in *Terminal Mode* and `Ctrl-x` in *Traditional mode*. -* The *Paste/Delete* key (the leftmost key on the left thumb cluster) sends the - paste command on tap, the delete one when held longer than a normal tap. The - **paste command** is `p` in *Emacs mode*, `Ctrl-Shift-v` in *Terminal mode*, - and `Ctrl-v` in *Traditional mode*. The **delete command** is `d` in *Emacs - mode*, and `DEL` in the other two. -* The `A`, `I` and `R` keys will - after sending themselves - clear the layer - back to the base layer. This allows a quick escape from the layer. - -## One-handed layer - -[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece) - -The one-handed layer is used in situations where the right hand is occupied, by -mousing around, for example. Tapping the `OTHER` key switches which side is -active. For the most part, keys remain in their usual position. When the right -half is active, keys are mirrored to the left half. - -The differences are as follows: - -* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier - to tap. -* Most keys on the thumb cluster now have dual uses, and these do not change - when switching sides: - - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held - for longer than a normal tap. - - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap. -* The `Apps`/`BASE` key can be used to go back to the base layer, by - long-tapping it. A short-tap will send the `App` key, as usual. - -# Building - -To make my workflow easier, this layout is maintained in -[its own repository][algernon:ez-layout]. To build it, you will need the -[QMK][qmk] firmware checked out, and this repo either checked out, or symlinked -to `keyboard/ergodox_ez/algernon`. One way to achieve that is this: - - [algernon:ez-layout]: https://github.com/algernon/ergodox-layout - [qmk]: https://github.com/jackhumbert/qmk_firmware - -``` -$ git clone https://github.com/jackhumbert/qmk_firmware.git -$ cd qmk_firmware/keyboard/ergodox_ez -$ git clone https://github.com/algernon/ergodox-layout.git keymaps/algernon -$ make KEYMAP=algernon -``` - -From time to time, updates may be submitted back to the QMK repository. If you -are reading it there, you can build the firmware like any other firmware -included with it (assuming you are in the root directory of the firmware): - -``` -$ cd keyboard/ergodox_ez -$ make KEYMAP=algernon -``` - -# License - -The layout, being a derivative of the original TMK firmware which is under the -GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older -version. diff --git a/keyboard/ergodox_ez/keymaps/algernon/compiled.hex b/keyboard/ergodox_ez/keymaps/algernon/compiled.hex deleted file mode 100644 index 6146c48fd..000000000 --- a/keyboard/ergodox_ez/keymaps/algernon/compiled.hex +++ /dev/null @@ -1,1257 +0,0 @@ -:100000000C941C040C9460040C9460040C94600424 -:100010000C9460040C9460040C9460040C946004D0 -:100020000C9460040C9460040C94DC130C94AE14D7 -:100030000C9461220C9460040C9460040C94600491 -:100040000C9460040C9460040C9460040C946004A0 -:100050000C9460040C94C9220C9460040C94600409 -:100060000C9460040C9460040C9460040C94600480 -:100070000C9460040C9460040C9460040C94600470 -:100080000C9460040C9460040C9460040C94600460 -:100090000C9460040C9460040C9460040C94600450 -:1000A0000C9460040C9460040C9460046E08AA071D -:1000B000B807BF07C907ED072708F807D807DF0704 -:1000C000E5075C0862086808850788078D079007C0 -:1000D0009307960799079E07A107A508AC08B308E0 -:1000E000BA08C108C808C808C808C808C808C808A5 -:1000F000C808C808C808C808C808E308FA08CC082F -:100100001D092F0973071B153D152B163D152B16C1 -:100110008215A5152B16FA150D1683188318AF181E -:10012000AF18F21812196D1A6D1A1D196D1ACA1925 -:10013000CA195E1A6D1A6D1A671AD719D719D71905 -:10014000D719D719D719D719D719D719D719D7192F -:10015000D719D719D719D719D719E819F519FC19CB -:10016000031A0D1A0128022800012C022C00012A72 -:10017000022A00016502650001150215010B020B40 -:10018000011C021C01170217010B020B01100210C7 -:100190000105020501120212011B021B012802289F -:1001A0000001060206010B020B01150215011202E5 -:1001B000120110021001280228000117021701087D -:1001C0000208011502150110021001280228000181 -:1001D00008020801100210010402040106020601CF -:1001E0001602160128022800011602160106020650 -:1001F000011802180107020701060206010F020F8B -:100200000112021201180218010702070128022830 -:100210000001040204000115021500010C020C008B -:1002200001E40119021902E40001E401E5011902E7 -:100230001902E502E400011302130002E501300295 -:10024000300113021301E500014C024C00010702CA -:10025000070001E40106020602E40001E401E501F1 -:1002600006020602E502E400011C021C0001E40192 -:100270001B021B02E40001E401E5011B021B02E575 -:1002800002E400011B021B00011902190000810495 -:100290008900C800220024002135002B002D00AE6B -:1002A000004A0000001C303400040033004D002CD4 -:1002B000301D30360012001400510003201E30376C -:1002C0000008000D0052002A001F30130018000E15 -:1002D000003302052020301C000C001B000000042D -:1002E0002065002F0000002602000002206500307B -:1002F0000000002702000003552130090007000517 -:100300000000002A3022300A000B0010002D0014DB -:10031000502330060017001A0050002C002430151E -:1003200000110019004F00280025300F0016001D95 -:10033000004B000120263038003100AD004E000097 -:10034000000100010001000100010000001B30015C -:10035000000100010001000100173001000100014F -:10036000000100010018300100010001000100013E -:10037000001930010001000100010001001A3001E4 -:100380000001000100000001000100010000000167 -:100390000000000100010001000000010000000158 -:1003A0000000000100010001000000010000000148 -:1003B0000001000100010001000000010001000136 -:1003C0000001000100000001000100010001000126 -:1003D0000000000100010001000100010001000116 -:1003E0000001000100010000000000000000000109 -:1003F0000001000000000000000E300000010001BC -:1004000000000015300F3013300100010000000023 -:1004100000103000000100010000001630113014FF -:100420003000000100000000001230000000000158 -:1004300000010000000000000000000100010000B9 -:1004400000000000000000000000000000000000AC -:10045000000000000000000000000000000000009C -:10046000000000000000000000010001000000008A -:10047000000000000001000100000000000000007A -:10048000000100002000000000000000000100004A -:1004900000FD00FE00FF00AE00083000001C300030 -:1004A000000D300000093001001D304A0050004DA1 -:1004B000000A3001001E30520051005100000006B9 -:1004C000301F304B004F004E000000010020300074 -:1004D000000B301B00000001000F08053000000772 -:1004E00030000001000F08F9000000FA00000001D0 -:1004F0000021302102070000000000F60022300138 -:1005000030F2000330A900AC002330F000F1001AF3 -:1005100000AA00F50024300230F3000430A800F4F3 -:100520000025300C30000000000000AB00263046F3 -:10053000000000AD000000000035002B002D00AED3 -:10054000004A0000001C303400040033004D002B32 -:10055000301D30360012001400510028301E303794 -:100560000008000D00520027301F30130018000E45 -:10057000002C30010020301C000C001B000000018A -:100580000029302F000000260200000100000000BA -:10059000000000000000000000000000000000005B -:1005A000000000000000000000000000000000004B -:1005B000000000000000000000000000000000003B -:1005C000000000000000000000000000000000002B -:1005D000000000000000000000000000000000001B -:1005E00000263038003100AD004E00000025300FED -:1005F0000016001D004B002A302430150011001990 -:10060000004F0028302330060017001A0050002742 -:100610003022300A000B0010002C3001002130097C -:10062000000700050000000100293030000000270D -:1006300002000001000000000000000000000000B7 -:1006400000000000000000000000000000000000AA -:10065000000000000000000000000000000000009A -:10066000000000000000000000000000000000008A -:10067000000000000000000000000000000000007A -:100680000000000000000000001603450072006733 -:10069000006F0044006F007800200045005A000001 -:1006A0000016034500720067006F0044006F007879 -:1006B00000200045005A0000000403090409026DEF -:1006C00000040100A0FA090400000103010100096F -:1006D0002111010001223F000705810308000A09DA -:1006E0000401000103010200092111010001224D52 -:1006F000000705820308000A090402000103000044 -:1007000000092111010001223600070583030800BA -:100710000A0904030001030000000921110100017E -:1007200022390007058403100001120110010000A6 -:100730000008EDFE07130100010200010501090692 -:10074000A101050719E029E71500250195087501A4 -:100750008102050819012905950575019102950188 -:100760007503910105071900297715002501957872 -:1007700075018102C005010980A1018502160100F1 -:1007800026B7001A01002AB700751095018100C034 -:10079000050C0901A1018503160100269C021A011E -:1007A000002A9C02751095018100C005010902A173 -:1007B000010901A100050919012905150025019567 -:1007C0000575018102950175038101050109300953 -:1007D000311581257F950275088106093815812517 -:1007E0007F950175088106050C0A38021581257F61 -:1007F000950175088106C0C005010906A10105071C -:1008000019E029E715002501950875018102950178 -:1008100075088101050819012905950575019102E1 -:100820009501750391010507190029FF150025FFA2 -:10083000950675088100C00011241FBECFEFDAE0D5 -:10084000DEBFCDBF04B603FE24C080914402909168 -:100850004502A0914602B09147028730904BA740D5 -:10086000B04BB9F410924402109245021092460225 -:100870001092470214BE84B7877F84BF88E10FB609 -:10088000F89480936000109260000FBEE0E0FFE3F8 -:10089000099511E0A0E0B1E0EAE2FEE402C00590B3 -:1008A0000D92A035B107D9F712E0A0E5B1E001C083 -:1008B0001D92A434B107E1F70E9422110C94132772 -:1008C0000C9400001092B9008AE08093B80008955B -:1008D00094EA9093BC009091BC0097FFFCCF90915C -:1008E000B900987F983021F0903111F081E008959F -:1008F0008093BB0084E88093BC008091BC0087FF9C -:10090000FCCF8091B900887F883111F0803471F775 -:1009100080E0089584E98093BC008091BC0084FD50 -:10092000FCCF08958093BB0084E88093BC00809145 -:10093000BC0087FFFCCF9091B900987F81E098328E -:1009400009F480E0089584E88093BC008091BC00A5 -:1009500087FFFCCF8091BB00089580910101811138 -:1009600015C080E40E9468048093010181110CC0CD -:1009700082E10E94920480930101811105C08FEFF2 -:100980000E949204809301010E948A0484B1807FB6 -:1009900084B985B1807F85B98AB1837F8AB98BB1EB -:1009A000837F8BB93E98469808950E94680680938D -:1009B00001010E94AD0480B38C7080BB81B3836F52 -:1009C00081BBA1E5B1E0EFE5F1E08EE08E0F119281 -:1009D0001D928E13FCCF0C945206BF92CF92DF92E1 -:1009E000EF92FF920F931F93CF93DF9380910101BA -:1009F000882379F0809150018F5F8093500181119D -:100A000008C00E94680680930101811102C00E9403 -:100A1000FA0501E511E0C0E0D0E0DD24D39482E0E6 -:100A2000C82EEE24E394F12CC730D10500F5809157 -:100A30000101811164C080E40E9468048093010177 -:100A4000811112C082E10E94920480930101811100 -:100A50000BC0C7010C2E01C0880F0A94EAF78095DD -:100A60000E949204809301010E948A0448C0CA3007 -:100A7000A1F028F4C83059F0C93061F005C0CC307D -:100A800089F070F0CD3089F0209A289810C0219A12 -:100A900029980DC0229A2A980AC0239A2B9807C039 -:100AA000529A01C0539A5B9802C03E9A469890EAC7 -:100AB0009A95F1F79FB1799902C082E001C080E078 -:100AC00091709D25982B7C9902C084E001C080E044 -:100AD000892B7D9902C038E001C030E0832B7E99DC -:100AE00002C020E101C020E0822B9FB19095991FA8 -:100AF0009927991F9295990F907E892B0FC080910D -:100B00000101811149C080E40E94680480930101C1 -:100B1000882379F1B12C0E948A048B2DF8019081F1 -:100B2000981719F08083C09200010E94AD042196AD -:100B30000F5F1F4FCE30D10509F076CF80910001B5 -:100B4000882361F1815080930001882339F08FE977 -:100B50009FE00197F1F700C0000020C0AFE5B1E0D1 -:100B6000E1E5F1E0CF01825F91919D938E13FCCF7F -:100B700015C083E10E949204809301018111CACFC4 -:100B800081E40E946804809301018111C3CF0E9417 -:100B9000A304B82EB094BFCF80E0C0CF0E94F80568 -:100BA00081E0DF91CF911F910F91FF90EF90DF9047 -:100BB000CF90BF900895E82FF0E0E15AFE4F80817A -:100BC000089508950F931F93CF93DF93CFE5D1E05E -:100BD00010E00C2F025F899190E00E94C621180F4F -:100BE0000C13F9CF812FDF91CF911F910F910895B1 -:100BF0000C94AF0956985E9825982D9826982E98B3 -:100C000027982F988FEF90E0909389008093880029 -:100C100090938B0080938A0090938D0080938C003A -:100C2000259A2D9A2FEF80E792E021508040904046 -:100C3000E1F700C00000269A2E9A2FEF80E792E09D -:100C4000215080409040E1F700C00000279A2F9A81 -:100C50002FEF80E792E0215080409040E1F700C004 -:100C6000000025982D982FEF80E792E021508040DA -:100C70009040E1F700C0000026982E982FEF80E703 -:100C800092E0215080409040E1F700C0000027989A -:100C90002F9856985E9825982D9826982E982798E4 -:100CA0002F98089589EA8093800089E080938100DD -:100CB00024982C983F988AB18F748AB96E98479A75 -:100CC0008BB1806B8BB9769A0E94FA050C945E0901 -:100CD00080E28093010180916D0181110EC00E941C -:100CE000620481E080936D012FEF83ED90E321504A -:100CF00080409040E1F700C0000080E40E9468045A -:100D00008093010181112EC00E9492048093010101 -:100D1000811128C00E94920480930101811122C098 -:100D20008FE30E9492048093010181111BC00E94F5 -:100D30008A0480E40E94680480930101811112C03A -:100D40008CE00E9492048093010181110BC00E94EB -:100D5000920480930101811105C08FE30E949204E7 -:100D6000809301010E948A04809101010895FF92FD -:100D70000F931F93CF93DF93EB01F42EFC0182813D -:100D8000882309F458C082E00E94301FE0910E01D0 -:100D9000F0910F01808181FF05C081EE0E9414183F -:100DA00011E001C010E00E947C2181FF0AC00E9476 -:100DB0002220811106C081EE0E94141810E001E08B -:100DC00001C0012F0E94752186EE0E94801786EED9 -:100DD0000E941418C433F2E0DF0719F485EE0E9474 -:100DE00080178C2F0E9480178C2F0E9414180023CC -:100DF00041F0C43382E0D80759F085EE0E94801795 -:100E000007C0C433E2E0DE0719F485EE0E9414182F -:100E10008F2D0E9480178F2D0E941418011103C07E -:100E2000C433D24019F485EE0E941418112319F02E -:100E300081EE0E94801780E090E0DF91CF911F91BA -:100E40000F91FF9008950F931F93CF93DF931F92FD -:100E5000CDB7DEB724EE260FFC018281022F10E011 -:100E6000882381F00E9493229801220F331F225E73 -:100E70003D4FF901918380830F90DF91CF911F91B6 -:100E80000F910895C801880F991F825E9D4FFC0144 -:100E90008081918169830E949F226981893C9105AB -:100EA00010F0625E05C0663211F06E5F01C06EE246 -:100EB000862F69830E9480176981862F0F90DF91AA -:100EC000CF911F910F910C941418CF93DF93EC01E5 -:100ED000462F50E04D32510508F0EBC1FA01EA5AB5 -:100EE000FF4F0C94C3268A81882369F00E947C21DD -:100EF000882339F00E942220811103C00E947521AD -:100F0000D8C189E297C189E291C144E050E002C0B2 -:100F100042E150E064E370E018C048E050E0FACFEE -:100F200048E150E0F7CF4CE050E0F4CF42E150E030 -:100F300002C048E150E064E372E007C042E150E0E3 -:100F400002C048E150E06EE270E0CE01DF91CF9147 -:100F50000C94B7068A81882311F080EF14C080EFCB -:100F60000E944B2482EF0E944B240E94D024A1C1F6 -:100F70008A81882311F080EF10C080EF15C08A812C -:100F8000882329F081EF0E94E32382EF09C081EFDB -:100F9000E7CF8A81882339F081EF0E94E32383EF32 -:100FA0000E94E323E2CF81EF0E944B2483EFDBCF4B -:100FB0008A81882309F47DC110926E017AC18A81E9 -:100FC000882309F476C181E005C08A81882309F469 -:100FD00070C182E080936E016CC180916E018111BD -:100FE00068C18A81882309F464C188E892E063C1FA -:100FF0008A81882339F00E94932290937E01809306 -:101000007D0157C180917D0190917E010E949F22B8 -:1010100020916E01893C910568F0213041F008F47F -:1010200030C1223009F045C18DE692E044C186E727 -:1010300092E041C1213041F008F426C1223009F08C -:1010400038C182E592E037C18BE592E034C18A81F4 -:10105000882339F00E9493229093800180937F012E -:1010600028C180917F01909180010E949F22209150 -:101070006E01893C910548F0222309F408C1233010 -:1010800008F017C188E492E016C1213009F402C1CA -:1010900030F0223009F00DC180E292E00CC1E09105 -:1010A0000E01F0910F01808185FFF7C085EE0E944F -:1010B00014188BE392E0FFC08A818111F1C00E9475 -:1010C000F01EF7C08A818823D1F386E192E0F3C055 -:1010D0008A818823A1F381E192E0EDC08A8188238F -:1010E00009F183EE0E9480178D81982F907F91F0F7 -:1010F00080FD10C082958F7090E0029774F08AE1B5 -:101100000E94801781E00E940F1F63E081E00E942F -:101110007A2003C08D818F708D8310927C01109294 -:101120007B01C7C08D8182958F7090E0029734F06B -:101130008AE10E94141881E00E9491200E9493226B -:1011400090937C0180937B01B4C08A81882309F449 -:10115000B0C088EE91E0AFC08A81882309F4A9C0AD -:101160008FEC91E0A8C08A81882309F4A2C08AEBA1 -:1011700091E0A1C08A81882309F49BC081EA91E0B3 -:101180009AC08A81882309F494C088E791E093C0CB -:10119000CE010E9423078DC08A81882339F00E94E6 -:1011A000932290937A018093790183C08091790191 -:1011B00090917A010E949F22893C910508F07FCF8F -:1011C00083E791E078C08A81882339F00E949322D6 -:1011D00090937801809377016CC080917701909112 -:1011E00078010E949F22893C910508F05CC089E645 -:1011F00091E061C08A81882339F00E949322909304 -:1012000076018093750155C08091750190917601AA -:101210000E949F22893C910508F448C0E0910E018C -:10122000F0910F01808181FF04C081EE0E941418AB -:1012300040C081EE0E9480173CC08A818823C9F19A -:1012400084E00E94FA1E81E0809374010E94932240 -:101250009093730180937201259A2D9A2AC08A81F6 -:10126000882339F185E00E94FA1E81E080937101A4 -:101270000E9493229093700180936F01279A2F9A76 -:1012800018C083E892E017C088E692E014C08DE4AD -:1012900092E011C089E292E00EC086E392E00BC0BA -:1012A0008BE192E008C08EE691E005C084E691E013 -:1012B00002C080E090E0DF91CF9108958FE090E050 -:1012C000909389008093880090938B0080938A008C -:1012D00090938D0080938C00569A5E9A259A2D9A51 -:1012E000269A2E9A279A2F9A2FEF83ED90E321507A -:1012F00080409040E1F700C0000056985E98259825 -:101300002D9826982E9827982F98089584EE0E945D -:10131000801785EE0E94801788E10E94801788E17F -:101320000E94141885EE0E94141884EE0C94141870 -:101330000F931F93CF93DF93EC018E0188819981E6 -:10134000009741F00E9480172296F80180810E9448 -:101350001418F3CFDF91CF911F910F9108951F9330 -:10136000CF93DF93CDB7DEB76A970FB6F894DEBFA1 -:101370000FBECDBF6091EC017091ED018091EE0147 -:101380009091EF010E94D221182F80917B019091C2 -:101390007C01009741F00E949F22893C910518F042 -:1013A00083EE0E941418143049F410927101123027 -:1013B00051F4269A2E9A279A2F9A0BC010927401F4 -:1013C000153099F706C0133021F4259A2D9A269AE4 -:1013D0002E9A8CEF810F823008F050C0269A2E9AF8 -:1013E00080917401882319F18091720190917301A9 -:1013F0000E949F22853F914048F0E0910E01F091BC -:101400000F01808181FD02C025982D988091720185 -:10141000909173010E949F22893E934040F0259A4B -:101420002D9A0E9493229093730180937201809170 -:101430007101882319F180916F01909170010E94D0 -:101440009F22853F914048F0E0910E01F0910F01FD -:10145000808180FD02C027982F9880916F01909124 -:1014600070010E949F22893E934040F0279A2F9A54 -:101470000E9493229093700180936F01E0910E017E -:10148000F0910F01808181FF09C08FEF90E0909370 -:10149000890080938800259A2D9A14C00E947C218F -:1014A00081FF04C00E942220882379F38FE090E01E -:1014B00090938900809388008DEF810F823010F027 -:1014C00025982D98E0910E01F0910F01808182FF07 -:1014D00009C08FEF90E090938B0080938A00269A4A -:1014E0002E9A14C00E947C2182FF04C00E942220F8 -:1014F000882379F38FE090E090938B0080938A00AB -:101500008EEF810F843010F026982E98E0910E0116 -:10151000F0910F01808180FF09C08FEF90E09093E0 -:101520008D0080938C00279A2F9A14C00E947C21F2 -:1015300080FF04C00E942220882379F38FE090E08E -:1015400090938D0080938C00153021F0123011F0B3 -:1015500027982F9880918C01882309F410C18091DD -:101560008A0190918B010E949F22893E934008F44A -:1015700006C110928C010E94D00B80918401909141 -:101580008501489771F48091860190918701892B9C -:1015900041F48091880190918901892B11F40E9476 -:1015A000860980918401909185010F97D9F48091EB -:1015B000860190918701892BA9F4809188019091EF -:1015C0008901892B79F40E9486098CE0E5E1F1E03C -:1015D000DE01119601900D928A95E1F7CE010196F8 -:1015E0000E9498098091840190918501469709F0A5 -:1015F00086C08091860190918701892B09F07FC078 -:101600008091880190918901892B09F078C00E940E -:10161000860984E00E94801784E00E94141889E003 -:101620000E94801789E00E9414188CE20E948017A3 -:101630008CE20E94141881E30E94801781E30E94CB -:10164000141885EE0E9480178DE20E9480178DE2AB -:101650000E94141886E20E94801786E20E941418E5 -:1016600085EE0E9414180E94860980E20E9480176D -:1016700080E20E94141887E20E94801787E20E948D -:10168000141886E00E94801786E00E94141881E2F8 -:101690000E94801781E20E9414188CE20E94801739 -:1016A0008CE20E94141885EE0E94801787E20E9447 -:1016B000801787E20E9414188DE20E9480178DE245 -:1016C0000E94141885EE0E94141888E30E94801767 -:1016D00088E30E9414180E94860984E00E94801703 -:1016E00084E00E94141889E00E94801789E00E941B -:1016F00014188CE20E9480178CE20E9414188091CA -:101700008401909185014A97D1F58091860190914D -:1017100087014097A1F58091880190918901892BDB -:1017200071F582EE0E9480178BE30E9480178BE395 -:101730000E94141882EE0E9414188FEF93ED20E39C -:10174000815090402040E1F700C000008AE1E1E2D2 -:10175000F1E0DE01119601900D928A95E1F7CE013C -:1017600001960E94980983EE0E94801782E50E94EC -:10177000801782E50E94141883EE0E9414186A965E -:101780000FB6F894DEBF0FBECDBFDF91CF911F9192 -:10179000089581E0089581E008950C94CB0B08959D -:1017A00008950F931F93CF93DF938C01FC01C081A9 -:1017B000D181CE010E94CB1FBE010E94760CEC01AC -:1017C000B8010E94CD0B882309F489C0F8018281F9 -:1017D000882309F446C080918C0181111FC0C43157 -:1017E000F0E5DF0709F04DC00E94CF0B81E0809348 -:1017F0008C010E94932290938B0180938A01109216 -:101800008301109285011092840110928701109239 -:101810008601109289011092880161C080918A012D -:1018200090918B010E949F22883E934070F480919A -:101830008301E82FF0E0EE0FFF1FEC57FE4FD1833E -:10184000C0838F5F809383014AC0C43880E5D80786 -:10185000B9F5F8018281882341F01092810182E07C -:101860001EC0C43880E5D80759F5809181018111E7 -:1018700006C086E20E94801786E20E94141882E069 -:101880001CC0C438F0E5DF0741F3C538D045D9F4B2 -:10189000F8018281882331F01092820180E20E9457 -:1018A0003C181DC080918201811106C087E20E9410 -:1018B000801787E20E94141880E20E9443180FC02C -:1018C000C538D04529F381E080938101809382015E -:1018D000C801DF91CF911F910F910C94C90B80E04B -:1018E000DF91CF911F910F910895089596E0799F10 -:1018F000F001112494E5899FE00DF11D1124E60FFC -:10190000F11DEE0FFF1FE756FD4F8591949108954D -:10191000880F991FFC01E35FFE4F85919491089514 -:10192000880F991FFC01E357FD4F8591949108950D -:101930000F931F93CF93DF93EC01811520E3920760 -:1019400050F5C11580E2D80708F0C3C0CB3BD105E4 -:1019500090F4C83AD10508F06AC0C53AD10508F03C -:101960005BC0C430D10508F0D0C1219709F0CAC1CD -:1019700001E010E00AC2CF3FD10511F008F0C5C167 -:10198000C03FD10508F0A2C0CE01805E9109089742 -:1019900008F4BBC1B7C1C13090E5D90709F4A2C0B2 -:1019A00020F5C0318FE4D80770F4C11590E4D90751 -:1019B00008F094C0C11521E3D20708F0A3C1DD27C8 -:1019C0008E01106CE2C1C115D04509F09BC10E9487 -:1019D000D21A8FEF94E32CE0815090402040E1F741 -:1019E00000C000000E94EE22D0C1C11597E5D907C2 -:1019F00058F4C03121E5D20708F01CC1C43180E59C -:101A0000D80708F475C07EC1CE019057811590416A -:101A100008F078C1DF7073C1C53AD10509F477C108 -:101A2000C63AD10509F076C102E810E4AEC1C83A61 -:101A3000D10509F472C1C93AD10509F471C1CA3A94 -:101A4000D10509F470C1CB3AD10509F46FC1CC3A84 -:101A5000D10509F46EC1CD3AD10509F46DC1C03B81 -:101A6000D10509F46CC1CE3AD10509F46BC1CF3A66 -:101A7000D10509F46AC1C13BD10509F469C1C23B72 -:101A8000D10509F468C1C33BD10509F467C1C43B62 -:101A9000D10509F466C1C53BD10509F465C1C63B52 -:101AA000D10509F464C1C73BD10509F463C1C83B42 -:101AB000D10509F462C1C93BD10509F461C1CA3B32 -:101AC000D10509F460C100E014E45FC18E01106526 -:101AD0005CC1CE019F700E94900C58C1DF708E01D6 -:101AE000106A53C180910E02816080930E024DC135 -:101AF0000E944523811102C00E942B230E9458237B -:101B000090E09093440280934302C23080E5D8076E -:101B100021F480914302816086C0C43090E5D907EA -:101B200021F48091430282607EC0C63020E5D20756 -:101B300021F480914302846076C0C83080E5D807E4 -:101B400019F48091430227C0CA3090E5D90721F4E7 -:101B500080914302806167C0CC3020E5D20721F438 -:101B60008091430280625FC0CE3080E5D80721F4C7 -:101B700080914302806457C0C03190E5D90721F4B9 -:101B80008091430280684FC0C23120E5D20729F41A -:101B9000809143028460886046C0C33080E5D807E6 -:101BA00021F4809143028E7F3EC0C53090E5D90775 -:101BB00021F4809143028D7F36C0C73020E5D207E3 -:101BC00021F4809143028B7F2EC0C93080E5D80775 -:101BD00019F48091430226C0CB3090E5D90721F457 -:101BE000809143028F7E1FC0CD3020E5D20721F4C3 -:101BF000809143028F7D17C0CF3080E5D80721F454 -:101C0000809143028F7B0FC0C13190E5D90721F449 -:101C1000809143028F7707C0C331D04531F4809162 -:101C200043028B7F877F80934302809143020E940F -:101C30005C23ABC08D2F99278F7099278130910538 -:101C4000D9F49E012370332702C0880F991F2A956B -:101C5000E2F79C688E0144E0000F111F4A95E1F7FE -:101C600000271370802B912B53E0CC0FDD1F5A956A -:101C7000E1F7C076DD272FC08230910531F4DC2FEB -:101C8000CC278E01016F106A80C08330910569F402 -:101C9000CE018370992701E010E002C0000F111FF0 -:101CA0008A95E2F7C8019C680FC084309105B9F4A9 -:101CB000CE018370992701E010E002C0000F111FD0 -:101CC0008A95E2F7C8019A6823E0CC0FDD1F2A95B8 -:101CD000E1F7C07ED7708C010C2B1D2B56C08530D0 -:101CE000910531F4DC2FCC278E01046F106A4DC0B2 -:101CF000069709F04AC0CF71DD27DC2FCC278E0173 -:101D0000106243C000E010E040C08E013EC001E818 -:101D100010E43BC003E810E438C002EE14E435C020 -:101D200009EE14E432C00AEE14E42FC005EB14E40B -:101D30002CC006EB14E429C007EB14E426C00CEC1D -:101D400014E423C00DEC14E420C003E815E41DC026 -:101D50000AE815E41AC002E915E417C004E915E41D -:101D600014C001E216E411C003E216E40EC004E25E -:101D700016E40BC005E216E408C006E216E405C04E -:101D800007E216E402C00AE216E4C801DF91CF912F -:101D90001F910F91089596E0799FF001112494E529 -:101DA000899FE00DF11D1124E60FF11DEE0FFF1FBD -:101DB000E756FD4F85919491803E9105E0F4803C7B -:101DC000910558F58133910509F46FC048F48932C3 -:101DD000910509F463C08A32910509F46DC072C09F -:101DE00089339105E9F082389105D1F08533910569 -:101DF00009F44DC067C0833E910581F138F4803EFF -:101E00009105B9F0823E9105D9F05CC0863E9105FE -:101E100061F1873E9105A1F155C00E94880C08959B -:101E20002091430220FD02C021FF4CC080EE90E0D3 -:101E300049C08091430280FFF9CF89E390E042C01E -:101E40008091430282FF0EC08091430284FF03C051 -:101E500080E090E037C083EE90E034C08091430290 -:101E600082FFF2CF82EE90E02DC08091430283FF8B -:101E70000BC08091430284FDEBCF87EE90E022C03F -:101E80008091430283FFF5CF86EE90E01BC08091E6 -:101E9000430285FF07C089E290E014C080914302AD -:101EA00085FFF9CF85E390E00DC08091430286FF66 -:101EB00007C08AE290E006C08091430286FFF9CF16 -:101EC00081E390E00E94980C089508950C94650FAA -:101ED00080919D010895CF93DF9300D01F92CDB7DD -:101EE000DEB79C0180913A02843019F593E0998322 -:101EF0003B832A839093E9008FEF9091E800815013 -:101F000095FD06C095ED9A95F1F700008111F5CF8A -:101F10008091E80085FF0DC040E050E063E070E094 -:101F2000CE0101960E94CC118091E8008E778093BB -:101F3000E8000F900F900F90DF91CF910895CF930D -:101F4000DF9300D01F92CDB7DEB720913A02243044 -:101F500021F522E029839B838A8383E08093E90033 -:101F60008FEF9091E800815095FD06C095ED9A9510 -:101F7000F1F700008111F5CF8091E80085FF0DC0D9 -:101F800040E050E063E070E0CE0101960E94CC1189 -:101F90008091E8008E778093E8000F900F900F906B -:101FA000DF91CF91089520913A022430F1F422E09C -:101FB0002093E9002FEF3091E800215035FD06C055 -:101FC00035ED3A95F1F700002111F5CF2091E800A9 -:101FD00025FF0BC040E050E065E070E00E94CC11AE -:101FE0008091E8008E778093E8000895CF93DF9387 -:101FF000EC0190913A02943009F046C080910C01B6 -:102000008823D9F080910D018823B9F09093E900DD -:102010008FEF9091E800815095FD06C095E19A956B -:10202000F1F700008111F5CF8091E80085FF2CC009 -:1020300040E050E060E170E017C081E08093E9008B -:102040008FEF9091E800815095FD06C095ED9A952F -:10205000F1F700008111F5CF8091E80085FF14C0F1 -:1020600040E050E068E070E0CE010E94CC11809129 -:10207000E8008E778093E80080E1FE01ADE8B1E0F2 -:1020800001900D928A95E1F7DF91CF9108958091AB -:102090003902811109C00E9461130E94BE13809110 -:1020A000E20084608093E20008951092390208955E -:1020B000089508950C945B2242E061EC81E00E9457 -:1020C000DB1242E061EC82E00E94DB1242E061EC54 -:1020D00083E00E94DB1242E161EC84E00C94DB12AD -:1020E00080913C02833009F455C030F4813071F0A6 -:1020F000823009F48EC008958A3009F47AC08B309A -:1021000009F460C0893009F09CC020C080913B0276 -:10211000813A09F096C08091E800877F8093E800BB -:1021200080913F0290914002892B21F460E18DE87B -:1021300091E003C060E080E090E070E00E94171240 -:102140008091E8008B778093E800089580913B02AE -:10215000813209F076C080913F0290914002009751 -:1021600019F0039709F06DC08091E800877F809394 -:10217000E8008091E80082FD05C080913A0281115B -:10218000F8CF5FC08091F10080939D018091E800BD -:102190008B7753C080913B02813A09F052C0809105 -:1021A0003F0290914002892B09F04BC08091E800DA -:1021B000877F8093E8008091E80080FFFCCF8091CA -:1021C0000C0136C080913B028132D9F580913F02EB -:1021D00090914002892BA9F58091E800877F809338 -:1021E000E8000E94101380913D0280930C010C9432 -:1021F000D21A80913B02813221F58091E800877FDD -:102200008093E8000E94101380913E0280939E010B -:10221000089580913B02813AA1F48091E800877F84 -:102220008093E8008091E80080FFFCCF80919E01C0 -:102230008093F1008091E8008E778093E8000C9401 -:102240001013089584B7877F84BF88E10FB6F89490 -:1022500080936000109260000FBE90E080E80FB69F -:10226000F89480936100909361000FBE0E94B316B2 -:102270000E9461130E94BE138091E20084608093EB -:10228000E20078940E9444160E94B51682E091E024 -:102290000E945F1680913A02853069F40E942222E2 -:1022A000809138028823B1F30E944D22882391F354 -:1022B0000E94B611EFCF0E94BB16ECCF292F332717 -:1022C00023303105C9F064F42130310581F022302A -:1022D000310509F043C08DE690E02DEB36E042C0B9 -:1022E00021323105F1F02232310541F137C082E16E -:1022F00090E02AE237E036C099278130910541F01D -:102300008230910541F0892B49F5E9EBF6E005C0F3 -:10231000E1EAF6E002C0E9E8F6E0849190E09F018E -:1023200021C06430D8F4E62FF0E0EE0FFF1FE95B28 -:10233000FE4F2081318189E090E014C0643070F458 -:1023400070E0FB01EE0FFF1FE15CFE4F2081318149 -:10235000FB01E55CFE4F808190E004C080E090E0EE -:1023600020E030E0FA0131832083089580E189BDC7 -:1023700082E189BD09B400FEFDCF8091D8008F7D38 -:102380008093D8008091E00082608093E00080918B -:10239000E00081FDFCCF0895CF92DF92EF92FF9293 -:1023A0000F931F93CF93DF93EC018B016A010E947F -:1023B0002F13811133C0C114D10439F0F60180818B -:1023C0009181081B190BC80FD91FE12CF12C0115A5 -:1023D000110519F18091E80085FD16C08091E80093 -:1023E0008E778093E800C114D10449F0F601808112 -:1023F0009181E80EF91EF182E08285E00FC00E9413 -:102400002F13882321F30AC089918093F100015092 -:102410001109FFEFEF1AFF0ADACF80E0DF91CF91C9 -:102420001F910F91FF90EF90DF90CF900895209132 -:102430004102309142022617370748F061157105B5 -:1024400039F42091E8002E772093E80001C0B9010B -:1024500040E061157105A9F120913A02222309F4A7 -:1024600043C0253009F442C02091E80023FD40C05C -:102470002091E80022FD32C02091E80020FFE9CF42 -:102480004091F3002091F20030E0342BFC01CF01A9 -:102490006115710559F02830310540F48191809320 -:1024A000F100615071092F5F3F4FF1CF41E02830BB -:1024B000310509F040E02091E8002E772093E800F4 -:1024C000C8CF4111C9CF0AC080913A02882361F078 -:1024D000853061F08091E80083FD0AC08091E800BA -:1024E00082FFF2CF80E0089582E0089583E00895AE -:1024F00081E008952091410230914202261737076A -:1025000048F06115710539F42091E8002E77209389 -:10251000E80001C0B901FC0120E06115710591F1ED -:1025200080913A02882309F440C0853009F43FC005 -:102530008091E80083FD3DC08091E80082FD2FC0BE -:102540008091E80080FFE9CF2091F3008091F200B4 -:1025500090E0922B6115710559F08830910540F497 -:1025600024912093F1003196615071090196F2CFC8 -:1025700021E0089709F020E08091E8008E778093B1 -:10258000E800CBCF2111CCCF0AC080913A0288233A -:1025900061F0853061F08091E80083FD0AC0809190 -:1025A000E80082FFF2CF80E0089582E0089583E0A2 -:1025B000089581E00895982F973058F59093E90099 -:1025C000981739F07091EC002091ED005091F000D7 -:1025D00003C0242F762F50E021FF19C03091EB006B -:1025E0003E7F3093EB003091ED003D7F3093ED0066 -:1025F0003091EB0031603093EB007093EC0020934E -:10260000ED005093F0002091EE0027FF07C09F5F80 -:10261000D3CF8F708093E90081E0089580E0089522 -:1026200080913B0287FF11C08091E80082FD05C0C8 -:1026300080913A028111F8CF11C08091E8008B7728 -:102640000BC080913A02882349F08091E80080FF16 -:10265000F8CF8091E8008E778093E800089520916C -:10266000E4003091E50095E64091EC00842F817004 -:1026700040FF22C08091E80080FD1CC080913A029A -:10268000882391F0853091F08091EB0085FD10C09A -:102690004091E4005091E5004217530729F39A0155 -:1026A000915011F784E0089582E0089583E0089541 -:1026B00081E0089580E008954091E80042FFDECF78 -:1026C00008950E94CF130E94D713E0EEF0E08081BE -:1026D00081608083E8EDF0E080818F77808319BC92 -:1026E000A7EDB0E08C918E7F8C9380818F7E80836C -:1026F0001092390208950F931F93CF93DF930E9496 -:10270000CF130E94D713C8EDD0E088818F778883DC -:1027100088818068888388818F7D888319BC109226 -:102720003A0210923602109238021092370200EEEE -:1027300010E0F80180818B7F8083888181608883AD -:1027400042E060E080E00E94DB12E1EEF0E0808198 -:102750008E7F8083E2EEF0E08081816080838081E3 -:1027600088608083F80180818E7F8083888180618A -:102770008883DF91CF911F910F910895E8EDF0E0EC -:1027800080818F7E8083E7EDF0E0808181608083AF -:1027900084E082BF81E0809339020C947B13E8EDE2 -:1027A000F0E080818E7F80831092E2000895109285 -:1027B000DA001092E10008951F920F920FB60F9267 -:1027C00011242F933F934F935F936F937F938F9336 -:1027D0009F93AF93BF93EF93FF938091E10082FFAC -:1027E0000BC08091E20082FF07C08091E1008B7FE7 -:1027F0008093E1000E9443168091DA0080FF1FC0A1 -:102800008091D80080FF1BC08091DA008E7F80937A -:10281000DA008091D90080FF0DC080E189BD82E19E -:1028200089BD09B400FEFDCF81E080933A020E9489 -:10283000471005C019BC10923A020E9455108091B1 -:10284000E10080FF19C08091E20080FF15C08091F7 -:10285000E2008E7F8093E2008091E20080618093AD -:10286000E2008091D80080628093D80019BC85E096 -:1028700080933A020E9459108091E10084FF30C099 -:102880008091E20084FF2CC080E189BD82E189BD96 -:1028900009B400FEFDCF8091D8008F7D8093D800D1 -:1028A0008091E1008F7E8093E1008091E2008F7E35 -:1028B0008093E2008091E20081608093E200809149 -:1028C0003602882311F084E007C08091E30087FD81 -:1028D00002C081E001C083E080933A020E945A1056 -:1028E0008091E10083FF29C08091E20083FF25C031 -:1028F0008091E100877F8093E10082E080933A023B -:10290000109236028091E1008E7F8093E1008091E9 -:10291000E2008E7F8093E2008091E20080618093EC -:10292000E20042E060E080E00E94DB128091F00073 -:1029300088608093F0000E945810FF91EF91BF9142 -:10294000AF919F918F917F916F915F914F913F9147 -:102950002F910F900FBE0F901F9018951F920F92FE -:102960000FB60F9211242F933F934F935F936F9362 -:102970007F938F939F93AF93BF93CF93DF93EF9307 -:10298000FF93C091E900CF708091EC00D82FD170F7 -:1029900080FDD0E81092E9008091F000877F80935D -:1029A000F00078940E94F2141092E9008091F000F7 -:1029B00088608093F000CD2BCF70C093E900FF9129 -:1029C000EF91DF91CF91BF91AF919F918F917F91C7 -:1029D0006F915F914F913F912F910F900FBE0F908C -:1029E0001F9018951F93CF93DF93CDB7DEB7AA97AB -:1029F0000FB6F894DEBF0FBECDBFEBE3F2E088E088 -:102A00008E0F9091F10091938E13FBCF0E94701066 -:102A10008091E80083FF1FC180913B0290913C02AE -:102A2000492F50E04A30510508F015C1FA01ED5721 -:102A3000FF4F0C94C326803881F0823809F00BC117 -:102A400080913F028F708093E9008091EB0085FBBD -:102A5000882780F91092E90006C080913702909192 -:102A60003802911182609091E800977F9093E8007E -:102A70008093F1001092F100C8C0282F2D7F09F03B -:102A8000EAC0882319F0823061F0E5C080913D02F0 -:102A9000813009F0E0C0933009F080E08093380283 -:102AA0002BC080913D02811127C080913F028F7021 -:102AB00009F4D1C08093E9002091EB0020FF1CC0F5 -:102AC000933021F48091EB00806214C09091EB0070 -:102AD00090619093EB0021E030E0A90102C0440F27 -:102AE000551F8A95E2F74093EA001092EA00809120 -:102AF000EB0088608093EB001092E9008091E80081 -:102B0000877F86C08111A7C010913D021F778091F9 -:102B1000E3008078812B8093E3008091E800877F39 -:102B20008093E8000E9410138091E80080FFFCCFA2 -:102B30008091E30080688093E300111102C082E07D -:102B400001C083E080933A0286C08058823008F04A -:102B500082C080913D0290913E028C3D53E09507EA -:102B600079F583E08A838AE289834FB7F894DE019E -:102B7000139620E03EE051E2E32FF0E0509357003F -:102B8000E49120FF03C0E295EF703F5FEF708E2F5E -:102B900090E0EA3010F0C79601C0C0968D939D93E7 -:102BA0002F5F243149F74FBF8091E800877F8093E2 -:102BB000E8006AE270E0CE0101960E94171214C08C -:102BC000AE014F5F5F4F60913F020E945E11BC01FA -:102BD000009709F440C09091E800977F9093E80037 -:102BE00089819A810E947A128091E8008B77809384 -:102BF000E80031C0803879F58091E800877F8093C4 -:102C0000E800809136028093F1008091E8008E7791 -:102C10008093E8000E9410131EC081111CC0909187 -:102C20003D029230C0F48091E800877F8093E800F5 -:102C3000909336020E94101380913602811106C0D3 -:102C40008091E30087FD02C081E001C084E08093B1 -:102C50003A020E945C108091E80083FF0AC08091D4 -:102C6000E800877F8093E8008091EB00806280938A -:102C7000EB00AA960FB6F894DEBF0FBECDBFDF9172 -:102C8000CF911F9108950895CF9380913A028823A0 -:102C9000A1F0C091E900CF709091EC00892F817074 -:102CA00090FD80E8C82B1092E9008091E80083FD38 -:102CB0000E94F214CF70C093E900CF9108959093D1 -:102CC000A4018093A3010895E091A301F091A401D0 -:102CD000309721F00190F081E02D099480E0089573 -:102CE000E091A301F091A401309721F00280F381DB -:102CF000E02D09940895E091A301F091A40130978B -:102D000021F00480F581E02D099408952091A1011E -:102D10003091A2018217930771F09093A2018093E2 -:102D2000A101E091A301F091A401309721F0068068 -:102D3000F781E02D0994089520919F013091A00121 -:102D40008217930771F09093A00180939F01E09107 -:102D5000A301F091A401309721F00084F185E02DCA -:102D60000994089508950C94B2160E948A220E9434 -:102D7000D5040C9410239F92AF92BF92CF92DF9212 -:102D8000EF92FF920F931F93CF93DF9300D000D069 -:102D900000D0CDB7DEB70E94ED040DE010E0AA240C -:102DA000A394B12C902E802F0E94DB0598012A5508 -:102DB0003E4F6901F901F080F826A1F40150110994 -:102DC00088F78FEF89838A831B820E949322816018 -:102DD000782F9D838C8349815A816B818D810E94DC -:102DE00052172FC090910E0291FF04C08E830E9453 -:102DF000E1058E8125E030E0A501022E01C0440FDF -:102E00000A94EAF7E42E4F21C1F029839A828E2199 -:102E100091E009F490E09B830E9493228160782FD7 -:102E20009D838C8349815A816B818D810E945217C9 -:102E3000F6018081E826E08204C021503109E0F6E5 -:102E4000BDCF0E94DB241091A5010E9464161817C3 -:102E5000B9F00E9464168093A50126960FB6F894E7 -:102E6000DEBF0FBECDBFDF91CF911F910F91FF90BD -:102E7000EF90DF90CF90BF90AF909F900C94660F33 -:102E800026960FB6F894DEBF0FBECDBFDF91CF916F -:102E90001F910F91FF90EF90DF90CF90BF90AF9078 -:102EA0009F900895CF93DF93CDB7DEB72B970FB6E2 -:102EB000F894DEBF0FBECDBF4F83588769877A87EE -:102EC0008B87DE01119686E0FD0111928A95E9F764 -:102ED00085E0FE01379601900D928A95E1F74981D0 -:102EE0005A816B817C818D819E810E94701D2B9601 -:102EF0000FB6F894DEBF0FBECDBFDF91CF9108951E -:102F0000882309F490C09CEF980F913A18F40E941E -:102F1000B3200DC090E2980F983058F4877091E07C -:102F200001C0990F8A95EAF7892F0E943C210C94E1 -:102F300090219BE5980F933070F4853A29F0863AFA -:102F400031F083E890E005C081E890E002C082E8BB -:102F500090E00C94861698E5980F933108F063C0C2 -:102F6000883A39F1893A41F18A3A49F18B3A51F17B -:102F70008C3A59F18D3A61F1803B69F18E3A71F1E9 -:102F80008F3A79F1813B81F1823B89F1833B91F169 -:102F9000843B99F1853BA1F1863BA9F1873BB1F1D7 -:102FA000883BB9F1893BC1F18A3BC9F180E090E0EF -:102FB00038C082EE90E035C089EE90E032C08AEEF3 -:102FC00090E02FC085EB90E02CC086EB90E029C00C -:102FD00087EB90E026C08CEC90E023C08DEC90E075 -:102FE00020C083E891E01DC08AE891E01AC082E920 -:102FF00091E017C084E991E014C081E292E011C031 -:1030000083E292E00EC084E292E00BC085E292E09F -:1030100008C086E292E005C087E292E002C08AE240 -:1030200092E00C949C160895882329F19CEF980F48 -:10303000913A18F40E94F5200DC090E2980F983054 -:1030400058F4877091E001C0990F8A95EAF7892FAB -:103050000E9442210C9490219BE5980F933020F41C -:1030600080E090E00C948616885A833120F480E04A -:1030700090E00C949C160895882321F00E943C2136 -:103080000C9490210895882321F00E9442210C94F1 -:10309000902108958F929F92AF92BF92DF92EF920C -:1030A000FF920F931F93CF93DF937C01D62FC72FEF -:1030B000FC010281158112951F700E944F20882308 -:1030C00019F082E00E94912001110E9459210E9472 -:1030D000AC20882379F0002369F080E28D0F8830DE -:1030E00048F082E00E9491200E94AC2091E0D82E0E -:1030F000D92601C0D12CEC2FE295EF70F0E0E35718 -:10310000FF4F0C94C3268C2F807FCF70882311F043 -:10311000C295C07F002389F0CC2309F4C4C180E2AA -:103120008D0F883020F48C2F0E943C2103C08C2FFF -:103130000E944C210E949021B6C18D2F0E9414182C -:10314000CC2309F4CAC1D05E8C2FD83018F40E9469 -:10315000422102C00E9452210E949021BEC18C2FA8 -:10316000807FCF70803211F0C295C07FDD2319F0CF -:10317000D13029F12DC0002381F0112369F11130E4 -:1031800021F48C2F0E946C21A8C1123029F50E94D5 -:1031900075218C2F0E941C201FC0112369F0113053 -:1031A00041F40E9439218C2309F497C10E941F2009 -:1031B00003C0123009F491C10E94752111C000238F -:1031C00021F0123008F089C107C0111186C108C072 -:1031D000002321F0111167C18C2FF1C011116AC1B8 -:1031E0008C2FF3C08C2F86958695837090E0009786 -:1031F00019F0019761F071C1002321F08D2F9C2FF0 -:10320000937002C080E090E00E94861666C10023A1 -:1032100021F08D2F9C2F937002C080E090E00E94DF -:103220009C165BC18D2F002319F00E94E32302C07E -:103230000E944B240E94D02450C18C2F837009F02F -:1032400050C001114AC18D2F829586958770880FD5 -:10325000880F9D2F9F70892E912CA12CB12C082EA8 -:1032600004C0880C991CAA1CBB1C0A94D2F7D4FF7A -:1032700014C00FE010E020E030E0B901A80104C064 -:10328000440F551F661F771F8A95D2F7CB01BA01ED -:10329000609570958095909503C060E070E0CB01DB -:1032A000C695C695C370D0E0C230D10561F0C33079 -:1032B000D10581F0682979298A299B29219771F004 -:1032C0000E94B81E0AC1682979298A299B290E946F -:1032D000D41E03C10E94B81EC501B4010E949C1EE9 -:1032E000FCC0002319F08C2F817001C086958823C3 -:1032F00009F4F3C08D2F829586958770880F880F0B -:103300009D2F9F70892E912CA12CB12C082E04C0CA -:10331000880C991CAA1CBB1C0A94D2F7D4FF14C0B9 -:103320000FE010E020E030E0B901A80104C0440F34 -:10333000551F661F771F8A95D2F7CB01BA0160959A -:1033400070958095909503C060E070E0CB01C695C4 -:10335000C695C3704C2F50E04230510569F04330A0 -:10336000510589F0682979298A299B29413051051D -:1033700071F00E94921FB1C0682979298A299B297E -:103380000E94AE1FAAC00E94921FC501B4010E94F4 -:10339000761FA3C08D2F90E0FC01E05EF109E531BE -:1033A000F10508F07BC0E356FF4F0C94C326DF7095 -:1033B0008C2F8F71002331F00E940F1F8D2F0E94E0 -:1033C0003C188BC00E94301F8D2F0E94431885C06F -:1033D000002339F0111181C08C2F8F710E94551F6D -:1033E0007CC0123008F079C0F7CF002339F08C2F61 -:1033F0008F710E940F1F71C00023C9F38C2F8F7132 -:103400000E94301F6AC0002329F08C2F8F710E9408 -:10341000FA1E63C00E94F01E60C00023B9F00E9433 -:1034200019200E9442210E944B20843029F40E94DE -:103430008A208C2F8F7162C0123008F06CC0CF715F -:103440008C2F0E940F1F63E08C2F0DC00E9419204B -:103450000E943C211230A0F00E948A200E941F206E -:1034600064E08C2F8F71DF91CF911F910F91FF90AE -:10347000EF90DF90BF90AF909F908F900C947A2048 -:1034800081E0DF91CF911F910F91FF90EF90DF903E -:10349000BF90AF909F908F900C949120002339F0B3 -:1034A000112309F4A4CF8D2F0E94801716C0112379 -:1034B00009F4A4CF8D2F0E9414180FC04C2F4F7009 -:1034C0006D2FC7010E9465070E94141E06C04C2F75 -:1034D0004F706D2FC7010E94750CDD20E1F00E9436 -:1034E0004B2080FD18C0F70112820E9445200E94E7 -:1034F0000F1FC7010E94971A0E944520DF91CF91AC -:103500001F910F91FF90EF90DF90BF90AF909F9031 -:103510008F900C94301FDF91CF911F910F91FF90EE -:10352000EF90DF90BF90AF909F908F9008950F9392 -:103530001F93CF93DF93EC01888199812B813C818C -:10354000232BB9F09F3F11F48F3F99F0CE010E94D9 -:10355000D10B882371F0688179818A810E941520BE -:103560008C010E94CA1F0E94911EB801CE010E94C8 -:103570004A18DF91CF911F910F9108950E94592110 -:103580000E9469210E942B210E9490210E94812586 -:103590000E94D02480E090E00E94861680E090E0B7 -:1035A0000C949C160E9449210C94BE1A0E940A2079 -:1035B000292F22952F7030E02C3031054CF42A3021 -:1035C00031056CF42250310922303105A8F407C0CE -:1035D0002C30310569F02F30310551F00DC0803F9E -:1035E00069F018F4803E40F409C0843F29F406C015 -:1035F00093FB882780F9089580E0089581E008957D -:10360000CF93DF9300D000D01F92CDB7DEB70F90DD -:103610000F900F900F900F90DF91CF910895CF935F -:10362000DF9300D000D000D0CDB7DEB726960FB61E -:10363000F894DEBF0FBECDBFDF91CF9108951F93E9 -:10364000CF93DF93C091B40116E08091B501C81704 -:1036500099F0D0E01C9FF0011D9FF00D1124EA5459 -:10366000FE4F4081518162817381848195810E94E6 -:103670000F1B2196C770E9CFDF91CF911F9108955D -:103680004091E6015091E7016091E8017091E901F4 -:103690008091EA019091EB010C940F1B8091EB015A -:1036A00082958F7009F054C08091E801882309F455 -:1036B0004FC08091B401A091B5016091E601709175 -:1036C000E7014091E9015091EA01B6E08A1709F457 -:1036D0003FC090E041155105C1F17F3F11F46F3FAC -:1036E000A1F1B89FF001B99FF00D1124EA54FE4FEB -:1036F000218172132AC02081621327C022812111E7 -:1037000024C0238134812417350710F42150310956 -:10371000241B350B283C3105C0F42091EB012F70A0 -:1037200020612093EB0126E0289FF001299FF00DF6 -:103730001124E554FE4F80818F708061808386EE76 -:1037400091E00E94971A0C941F1B01968770BECFC0 -:103750000895CF92DF92EF92FF920F931F93CF9332 -:10376000DF93CDB7DEB762970FB6F894DEBF0FBE1A -:10377000CDBF8C0185E0F801DE011D9601900D9210 -:103780008A95E1F7D8014C9111965C9111971296A8 -:103790006C9112971396CD90DC9014973091E601BE -:1037A0007091E7018091E9019091EA01009709F495 -:1037B0006BC17F3F19F43F3F09F466C1E090E80117 -:1037C000EE2009F4C0C02091EB01C816D90628F0FC -:1037D000F601E81BF90BCF0104C0809590958C0D84 -:1037E0009D1DFF24F394883C910578F0F12C207FF7 -:1037F00009F0C6C07C2DD98AC88A89890E94001B1D -:1038000086EE91E00E94971AB1C0822F807F09F066 -:1038100046C0751314C0341312C0611110C02F704C -:1038200020612093EB010E94401B86EE91E00E94F4 -:10383000971A8091EB01D80115968C932EC0CD2854 -:1038400019F15F3F11F44F3FF9F0F62E61111CC0E2 -:103850008091B4012091B50136E0821709F45AC075 -:1038600090E0389FF001399FF00D1124EA54FE4F8B -:103870007181571306C07081471303C072817111A3 -:1038800003C001968770E9CFF62E662309F418C1AC -:103890008091EB0181608093EB01F12C11C17513D4 -:1038A00008C0341306C0611104C08091EB01D80137 -:1038B000C3C04D875E878D859E856A8B0E94D61A10 -:1038C0006A898823E1F16623D1F12091EB01822FEF -:1038D00082958F7090E0029774F08091E60190914C -:1038E000E70198878F831986DB86CA862C87CE01ED -:1038F00007960E94971A86E0F801A6EEB1E00190C3 -:103900000D928A95E1F70E944E1B0E94401BFF24F6 -:10391000F394D6C04D875E878D859E850E940A20D0 -:10392000292F22952F7030E0223031050CF0BCC0D9 -:103930009F7009F0B6C0805E883008F4C1C0C8012D -:103940000E94971AE4CFC816D90608F453C0F601AE -:10395000E81BF90BCF01883C910508F450C0F12C0D -:103960007C2DD98AC88A89890E94001BE6EEF1E085 -:1039700086E0DF011D928A95E9F70E94401BA0C0F6 -:10398000751314C0341312C0611110C08091EB0183 -:10399000F8018583C8010E94971A86E0E6EEF1E0FF -:1039A000DF011D928A95E9F7FE2C8AC04D875E875C -:1039B0008D859E856A8B0E94D61A6A89882309F4B0 -:1039C000BECF662309F4BBCF2091EB01822F8295F5 -:1039D0008F7090E002970CF48ECF8091E601909169 -:1039E000E7019A8389831B82DD82CC822E83CE01FC -:1039F00001967FCF809590958C0D9D1DACCFF62EB6 -:103A0000662309F49CCF75132EC034132CC020916B -:103A1000EB0120FD1FC0822F82958F70D9F0D80155 -:103A200015962C9315978F3049F08F5F982F9295AC -:103A3000907F822F8F70892B15968C93C8010E94DE -:103A4000971A86E0F801A6EEB1E001900D928A95F2 -:103A5000E1F793CF86E0F801A6EEB1E001900D9278 -:103A60008A95E1F72DC04D875E878D859E850E94E2 -:103A7000D61A811140CF8091EB0181608093EB01D8 -:103A8000C8010E94971A1CC0662309F458CF4D87BD -:103A90005E878D859E850E94D61A882309F44FCFB4 -:103AA0002ACF811148CF0CC0243031050CF047CF0C -:103AB0009F7009F440CFF8019581907F09F03BCFCA -:103AC0008F2D62960FB6F894DEBF0FBECDBFDF918B -:103AD000CF911F910F91FF90EF90DF90CF900895BD -:103AE0001F93CF93DF93CDB7DEB72C970FB6F89423 -:103AF000DEBF0FBECDBF4F83588769877A878B871C -:103B00009C87CE0107960E94A91B882369F08F81AC -:103B100098852A853B85232BF1F19F3F09F063C0EF -:103B20008F3F09F060C037C086E0FE013796DE01A6 -:103B3000119601900D928A95E1F76F817885EA855B -:103B4000FB85309741F17F3F11F46F3F21F12091C8 -:103B5000B50130E0C9010196877099274091B40101 -:103B600050E08417950709F447C069837A83FD8381 -:103B7000EC8396E0929FD001939FB00D1124AA543C -:103B8000BE4FFE01319601900D929A95E1F7809318 -:103B9000B5010E941F1B16E08091B4019091B50100 -:103BA0008917C1F1189FC00111248A549E4F0E94A9 -:103BB000A91B882379F1E091B4011E9FF001112423 -:103BC000EA54FE4F408151816281738184819581E5 -:103BD0000E940F1B8091B40190E001968770992795 -:103BE0008093B401D9CF4F81588569857A858B85BB -:103BF0009C850E940F1BCFCF0E94D21A1092B50154 -:103C00001092B401E6EEF1E086E0DF011D928A95A4 -:103C1000E9F7C1CF2C960FB6F894DEBF0FBECDBF2B -:103C2000DF91CF911F910895EF92FF920F931F9311 -:103C3000CF93DF938C01009709F46CC0F12CEE2434 -:103C4000E394E8012196F8018491843740F48430AC -:103C500008F051C0813081F0823019F15BC08537A6 -:103C600009F444C0A8F19CE7980F903708F052C0BF -:103C70008F770E94141841C00E5F1F4FFE01C49140 -:103C800080E28C0F883048F4C7708E2D01C0880FF9 -:103C9000CA95EAF70E945C2114C08C2F0E948017FD -:103CA0002DC00E5F1F4FFE01C49180E28C0F883043 -:103CB00058F4C7708E2D01C0880FCA95EAF70E948C -:103CC00062210E9490211AC08C2F0E94141816C0E5 -:103CD0000E5F1F4FFE01C491CC2381F08FE99FE05E -:103CE0000197F1F700C00000C150F6CF0E5F1F4FE3 -:103CF000FE01F49003C00E9480178E018F2D88234F -:103D000009F49FCFEFE9FFE03197F1F700C0000021 -:103D10008150F5CFDF91CF911F910F91FF90EF90E0 -:103D2000089508956093F0017093F1018093F2017A -:103D30009093F3010C94BE1A0F931F930091F0011E -:103D40001091F1012091F2013091F301DC01CB01DE -:103D5000802B912BA22BB32B8093F0019093F10138 -:103D6000A093F201B093F3011F910F910C94BE1A2E -:103D70000F931F930091F0011091F1012091F20136 -:103D80003091F301DC01CB0180239123A223B323E3 -:103D90008093F0019093F101A093F201B093F301AD -:103DA0001F910F910C94BE1A0F931F930091F00175 -:103DB0001091F1012091F2013091F301DC01CB016E -:103DC00080279127A227B3278093F0019093F101D8 -:103DD000A093F201B093F3011F910F910C94BE1ABE -:103DE0001092EC011092ED011092EE011092EF0191 -:103DF0000C94BE1A41E050E060E070E004C0440F53 -:103E0000551F661F771F8A95D2F74093EC01509398 -:103E1000ED016093EE017093EF010C94BE1A41E046 -:103E200050E060E070E004C0440F551F661F771F2C -:103E30008A95D2F78091EC019091ED01A091EE016D -:103E4000B091EF01482B592B6A2B7B2B4093EC014F -:103E50005093ED016093EE017093EF010C94BE1A44 -:103E600041E050E060E070E004C0440F551F661F61 -:103E7000771F8A95D2F740955095609570958091FF -:103E8000EC019091ED01A091EE01B091EF0148237A -:103E900059236A237B234093EC015093ED016093F7 -:103EA000EE017093EF010C94BE1A41E050E060E027 -:103EB00070E004C0440F551F661F771F8A95D2F724 -:103EC0008091EC019091ED01A091EE01B091EF0194 -:103ED000482759276A277B274093EC015093ED012F -:103EE0006093EE017093EF010C94BE1A0F931F9331 -:103EF0000091EC011091ED012091EE013091EF0164 -:103F0000DC01CB01802B912BA22BB32B8093EC01F6 -:103F10009093ED01A093EE01B093EF011F910F91EB -:103F20000C94BE1A0F931F930091EC011091ED01B8 -:103F30002091EE013091EF01DC01CB018023912330 -:103F4000A223B3238093EC019093ED01A093EE01A3 -:103F5000B093EF011F910F910C94BE1A0F931F9312 -:103F60000091EC011091ED012091EE013091EF01F3 -:103F7000DC01CB0180279127A227B3278093EC0196 -:103F80009093ED01A093EE01B093EF011F910F917B -:103F90000C94BE1A0895CF92DF92EF92FF920F9386 -:103FA0001F93CF93DF938C01C090F001D090F1016B -:103FB000E090F201F090F3018091EC019091ED011D -:103FC000A091EE01B091EF01C82AD92AEA2AFB2A72 -:103FD000CFE1D0E0D701C6010C2E04C0B695A7955D -:103FE000979587950A94D2F780FF06C0B8018C2F69 -:103FF0000E94CB0E019721F4219760F780E001C069 -:104000008C2FDF91CF911F910F91FF90EF90DF9058 -:10401000CF900895CF93DF93EC010E94CB1FBE0198 -:104020000E94CB0EDF91CF910895CB010E940A2010 -:1040300008958091F90108958093F90108951092EF -:10404000F90108950E9493222091F7013091F8011F -:104050008217930750F00E9493222091F70130912C -:10406000F801821B930B9C010AC00E9493222091AD -:10407000F7013091F80120953095280F391F81E024 -:10408000283B3B4008F480E008958091F601859537 -:104090008595859508958091F601877008950E9411 -:1040A00093222091F4013091F50182179307A8F033 -:1040B0000E9493222091F4013091F501821B930B11 -:1040C000883B9B4010F480E013C08091F60182FB96 -:1040D000882780F991E089270BC00E9493222091C4 -:1040E000F4013091F50120953095820F931FE8CFB0 -:1040F0008170089598E0899F90011124262B2093C8 -:10410000F6010E940F1F0E9493229093F501809365 -:10411000F40108951092F6011092F5011092F40145 -:1041200008952091F601809582238093F601982FBF -:10413000977089F430E0482F552747FD5095241794 -:10414000350749F08595859585950E94301F109219 -:10415000F5011092F40108959091F601977081E0B5 -:1041600009F480E0089590910C01992321F0909139 -:104170000D01911109C020910E0130910F01F9013B -:1041800032969FEF40E01FC0982F96959695969592 -:104190009F3050F5E0910E01F0910F01E90FF11DF4 -:1041A000877021E030E0A90102C0440F551F8A95B5 -:1041B000E2F7CA019181892B818308959F3F39F0ED -:1041C0004F5F4E3041F051915813F8CF0DC051114F -:1041D000F7CF942FF5CF9F3F39F0F901E90FF11D8B -:1041E00097FDFA9582830895089590910C01992383 -:1041F00021F090910D01911109C020910E01309193 -:104200000F01F9013296205F3F4F1FC0982F9695FE -:10421000969596959F30F0F4E0910E01F0910F0184 -:10422000E90FF11D877021E030E0A90102C0440FC1 -:10423000551F8A95E2F7CA01809591818923818370 -:1042400008953196E217F30729F090819813F9CF7A -:104250001082F7CF089581E090E0E0910E01F09197 -:104260000F01E80FF91F1082019680319105A9F71F -:10427000089580910D02089590910D02892B8093ED -:104280000D020895809590910D02892380930D026F -:10429000089510920D02089590910C02892B80933D -:1042A0000C020895809590910C02892380930C0252 -:1042B000089510920C02089590910B02892B80931F -:1042C0000B020895809590910B02892380930B0235 -:1042D000089510920B0208958093FA010E94932290 -:1042E0009093F8018093F70108951092FA011092CB -:1042F000F8011092F70108958091FA0108958091D4 -:104300000E0190910F01FC0131969C01205F3F4FFF -:1043100080E0919191118F5FE217F307D1F7089533 -:10432000E0910E01F0910F0180910D028083E091E8 -:104330000E01F0910F01908180910C02892B8083F6 -:10434000E0910E01F0910F01908180910B02892B79 -:1043500080838091FA01882399F00E9422208111A4 -:104360000E947521E0910E01F0910F0190818091E2 -:10437000FA01892B80830E947F2181110E9475217F -:1043800080910E0190910F010C94701620E000971F -:1043900039F0AC0141505109842395232F5FF7CFA9 -:1043A000822F0895CF92DF92EF92FF926C01EE245C -:1043B000FF24C114D104E104F10421F0C701B601C6 -:1043C00020E101C020E0C72ED82EE92EFF24C11421 -:1043D000D104E104F10419F0285FC701B6016B01B3 -:1043E0007C0154E0F694E794D794C7945A95D1F79A -:1043F000C114D104E104F10419F02C5FC701B60126 -:104400006B017C0142E0F694E794D794C7944A95F7 -:10441000D1F7C114D104E104F10419F02E5FC701F2 -:10442000B601DC01CB01B695A79597958795892BA9 -:104430008A2B8B2B09F02F5F822FFF90EF90DF905C -:10444000CF90089580913A02843021F110920F02AA -:1044500020E488E190E00FB6F894A895809360007E -:104460000FBE2093600080E00E94660F83B7817FBB -:10447000846083BF83B7816083BF7894889583B756 -:104480008E7F83BF88E10FB6F8948093600010920E -:1044900060000FBE0895089508950E944B220E9467 -:1044A000ED040E944C220E94E20591E0811101C0BE -:1044B00090E0892F08950E94D21A0E9464160C94ED -:1044C000660F1F920F920FB60F9211248F939F9336 -:1044D000AF93BF9380910F02811113C0809110029E -:1044E00090911102A0911202B09113024196A11D68 -:1044F000B11D8093100290931102A0931202B09309 -:104500001302BF91AF919F918F910F900FBE0F90AB -:104510001F90189582E084BD93E095BD9AEF97BDFA -:1045200080936E0008952FB7F894809110029091B7 -:104530001102A0911202B09113022FBF0895CF92E1 -:10454000DF92EF92FF920F931F932FB7F894409151 -:1045500010025091110260911202709113022FBF4C -:104560006A017B01EE24FF248C0120E030E0C016BC -:10457000D106E206F30610F4415051099A01281BB6 -:10458000390BC9011F910F91FF90EF90DF90CF90F1 -:1045900008951F920F920FB60F9211248F939F933D -:1045A000AF93BF938091100290911102A0911202DB -:1045B000B09113020196A11DB11D8093100290933A -:1045C0001102A0931202B0931302BF91AF919F9179 -:1045D0008F910F900FBE0F901F9018950E9461133E -:1045E000F8942FEF87EA91E6215080409040E1F760 -:1045F00000C0000087E090EBDC01809344029093C0 -:104600004502A0934602B09347029CE088E10FB6B2 -:10461000F894A895809360000FBE90936000FFCF40 -:104620000E944523811102C00E942B230E94502327 -:1046300080930E020E9458238093430287FB8827B1 -:1046400080F980930D010E945423682F70E080E070 -:1046500090E00C94921E6DEE7EEF80E090E00E9460 -:10466000FD2660E082E090E00E94EB2660E083E0BF -:1046700090E00E94EB2660E084E090E00E94EB2650 -:1046800060E085E090E00C94EB2680E090E00E94F2 -:10469000E52621E08D3E9E4F09F020E0822F08950F -:1046A00082E090E00C94DD2683E090E00C94DD261F -:1046B00084E090E00C94DD26682F84E090E00C9478 -:1046C000EB268091170280FF0BC06091130185E0FB -:1046D000689FB001112475956795759567952BC0F6 -:1046E00081FF09C06091130185E0689FB00111242A -:1046F0007595679520C082FF07C06091130185E022 -:10470000689FB001112417C0909118029923D1F02D -:1047100060911201961788F72091130185E0289F78 -:1047200090011124929FA001939F500D112470E0DD -:10473000CA010E94AF266038710540F46115710509 -:1047400039F002C065E070E0862F08958FE7089584 -:1047500081E008958091170280FF08C060911101E7 -:1047600070E0759567957595679521C081FF06C0C6 -:104770006091110170E07595679519C082FF04C0C2 -:104780006091110170E010C0909118029923C1F05E -:10479000609110019617A0F780911101899FC001C7 -:1047A000112470E00E94AF266038710528F461156D -:1047B000710521F0862F08958FE7089581E008950F -:1047C00061E070E0F4CF803F21F40E946123819585 -:1047D00004C0813F29F40E94612380931B02089545 -:1047E000823F21F40E946123819504C0833F29F414 -:1047F0000E94612380931A020895893F19F40E9450 -:10480000AA2305C08A3F31F40E94AA238195809390 -:104810001C0208958B3F21F40E94AA23819504C0B5 -:104820008C3F29F40E94AA2380931D020895843F9F -:1048300021F480911902816017C0853F21F4809195 -:104840001902826011C0863F21F4809119028460B0 -:104850000BC0873F21F480911902886005C0883F12 -:1048600031F48091190280618093190208958D3F7F -:1048700021F48091170281600BC08E3F21F480915A -:104880001702826005C08F3F29F48091170284606F -:10489000809317020895803F39F480911B0287FFAF -:1048A0006CC010921B0269C0813F29F480911B02E9 -:1048B0001816BCF362C090911A02823F29F497FF48 -:1048C0005CC010921A0259C0833F19F41916CCF338 -:1048D00054C0893F41F480911C0218160CF04DC061 -:1048E00010921C024AC08A3F29F480911C0287FF63 -:1048F00044C0F6CF8B3F39F480911D0287FF3DC045 -:1049000010921D023AC08C3F29F480911D021816A6 -:10491000BCF333C0843F21F4809119028E7F17C00D -:10492000853F21F4809119028D7F11C0863F21F4CB -:10493000809119028B7F0BC0873F21F4809119026F -:10494000877F05C0883F31F4809119028F7E809364 -:10495000190213C08D3F21F4809117028E7F0BC086 -:104960008E3F21F4809117028D7F05C08F3F29F47F -:10497000809117028B7F8093170280911A02811118 -:104980000EC080911B0281110AC080911C0281110E -:1049900006C080911D02811102C010921802089574 -:1049A00089E192E00E947B160E9493229093150267 -:1049B0008093140208951F93CF93DF938091140284 -:1049C000909115020E949F22AC01909118029923A8 -:1049D00021F02091140130E006C0209116028AE0F7 -:1049E000289F900111244217530708F486C0809134 -:1049F0001A02C0911B02D0911C0210911D0281115C -:104A000007C0C11176C0D11174C0111172C075C038 -:104A10009F3F19F09F5F90931802181624F40E948C -:104A2000612380931A0280911A0287FF05C00E94B9 -:104A30006123819580931A021C1624F40E9461233D -:104A400080931B0280911B0287FF05C00E94612397 -:104A5000819580931B0260911A02662339F1C091FF -:104A60001B02CC2319F1772767FD7095872F972FAD -:104A70000E94C02523E333E343E35FE30E9424263F -:104A80000E948D2560931A026C2F772767FD709521 -:104A9000872F972F0E94C02523E333E343E35FE38F -:104AA0000E9424260E948D2560931B021D1624F46B -:104AB0000E94AA2380931C0280911C0287FF05C0DC -:104AC0000E94AA23819580931C02111624F40E944F -:104AD000AA2380931D0280911D0287FF05C00E94BA -:104AE000AA23819580931D02DF91CF911F910C9491 -:104AF000D0249F3F09F08ECF96CFDF91CF911F91A9 -:104B00000895E9E1F2E085E0DF011D928A95E9F779 -:104B10001092180210921702089504D06894B111EF -:104B20008DC0089570D088F09F5790F0B92F9927C5 -:104B3000B751A0F0D1F0660F771F881F991F1AF0A8 -:104B4000BA95C9F712C0B13081F077D0B1E00895BD -:104B500074C0672F782F8827B85F39F0B93FCCF33E -:104B6000869577956795B395D9F73EF4909580959E -:104B7000709561957F4F8F4F9F4F0895E89409C0BE -:104B800097FB3EF490958095709561957F4F8F4F80 -:104B90009F4F9923A9F0F92F96E9BB279395F69596 -:104BA000879577956795B795F111F8CFFAF4BB0F14 -:104BB00011F460FF1BC06F5F7F4F8F4F9F4F16C078 -:104BC000882311F096E911C0772321F09EE8872F02 -:104BD000762F05C0662371F096E8862F70E060E0BE -:104BE0002AF09A95660F771F881FDAF7880F969537 -:104BF000879597F9089557FD9058440F551F59F020 -:104C00005F3F71F04795880F97FB991F61F09F3FB9 -:104C100079F087950895121613061406551FF2CFE2 -:104C20004695F1DF08C0161617061806991FF1CF32 -:104C300086957105610508940895E894BB27662759 -:104C40007727CB0197F908950BD078C069D028F069 -:104C50006ED018F0952309F05AC05FC01124EECF32 -:104C6000CADFA0F3959FD1F3950F50E0551F629FC7 -:104C7000F001729FBB27F00DB11D639FAA27F00DB5 -:104C8000B11DAA1F649F6627B00DA11D661F829FDC -:104C90002227B00DA11D621F739FB00DA11D621FC1 -:104CA000839FA00D611D221F749F3327A00D611DDE -:104CB000231F849F600D211D822F762F6A2F1124C0 -:104CC0009F5750408AF0E1F088234AF0EE0FFF1F13 -:104CD000BB1F661F771F881F91505040A9F79E3F4A -:104CE000510570F014C0AACF5F3FECF3983EDCF39F -:104CF000869577956795B795F795E7959F5FC1F787 -:104D0000FE2B880F911D9695879597F9089597F931 -:104D10009F6780E870E060E008959FEF80EC089561 -:104D200000240A941616170618060906089500248A -:104D30000A9412161306140605060895092E039404 -:104D4000000C11F4882352F0BB0F40F4BF2B11F478 -:104D500060FF04C06F5F7F4F8F4F9F4F089597FB99 -:104D6000072E16F4009407D077FD09D00E94C926BB -:104D700007FC05D03EF4909581959F4F089570955E -:104D800061957F4F0895EE0FFF1F0590F491E02D80 -:104D90000994AA1BBB1B51E107C0AA1FBB1FA61782 -:104DA000B70710F0A61BB70B881F991F5A95A9F7D4 -:104DB00080959095BC01CD010895F999FECF92BDE3 -:104DC00081BDF89A992780B50895A8E1B0E042E046 -:104DD00050E00C940527262FF999FECF92BD81BD96 -:104DE000F89A019700B4021639F01FBA20BD0FB629 -:104DF000F894FA9AF99A0FBE08950196272F0E9407 -:104E0000EC260C94EB26DC01CB01FC01F999FECFDA -:104E100006C0F2BDE1BDF89A319600B40D92415042 -:0A4E20005040B8F70895F894FFCF52 -:104E2A000220680FF60FD30F9F0F6B0F0101FB01D2 -:104E3A0028080102142700200005000500280000A8 -:104E4A0000100004001B002D0009001200060018C3 -:104E5A0000160008000700280000003F4D3639F808 -:104E6A0007AB0775073C07CF06E80601071A0700D4 -:00000001FF diff --git a/keyboard/ergodox_ez/keymaps/algernon/config.h b/keyboard/ergodox_ez/keymaps/algernon/config.h index 724618cc4..4cb878ebc 100644 --- a/keyboard/ergodox_ez/keymaps/algernon/config.h +++ b/keyboard/ergodox_ez/keymaps/algernon/config.h @@ -1,5 +1,5 @@ -#ifndef CONFIG_USER_H -#define CONFIG_USER_H 1 +#ifndef CONFIG_ALGERNON_H +#define CONFIG_ALGERNON_H #include "../../config.h" @@ -24,4 +24,6 @@ #undef LEADER_TIMEOUT #define LEADER_TIMEOUT 1000 +#define FORCE_NKRO + #endif diff --git a/keyboard/ergodox_ez/keymaps/algernon/images/base-layer.png b/keyboard/ergodox_ez/keymaps/algernon/images/base-layer.png index e33585920..1a7c0f480 100644 Binary files a/keyboard/ergodox_ez/keymaps/algernon/images/base-layer.png and b/keyboard/ergodox_ez/keymaps/algernon/images/base-layer.png differ diff --git a/keyboard/ergodox_ez/keymaps/algernon/images/experimental-layer.png b/keyboard/ergodox_ez/keymaps/algernon/images/experimental-layer.png new file mode 100644 index 000000000..c5e695b8c Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/algernon/images/experimental-layer.png differ diff --git a/keyboard/ergodox_ez/keymaps/algernon/images/hun-layer.png b/keyboard/ergodox_ez/keymaps/algernon/images/hun-layer.png index 3c7665392..f1e5f9ec0 100644 Binary files a/keyboard/ergodox_ez/keymaps/algernon/images/hun-layer.png and b/keyboard/ergodox_ez/keymaps/algernon/images/hun-layer.png differ diff --git a/keyboard/ergodox_ez/keymaps/algernon/images/steno-layer.png b/keyboard/ergodox_ez/keymaps/algernon/images/steno-layer.png new file mode 100644 index 000000000..e747bfb41 Binary files /dev/null and b/keyboard/ergodox_ez/keymaps/algernon/images/steno-layer.png differ diff --git a/keyboard/ergodox_ez/keymaps/algernon/keymap.c b/keyboard/ergodox_ez/keymaps/algernon/keymap.c index 7ded1e1ae..4eea6874c 100644 --- a/keyboard/ergodox_ez/keymaps/algernon/keymap.c +++ b/keyboard/ergodox_ez/keymaps/algernon/keymap.c @@ -9,77 +9,98 @@ #include "action_util.h" #include "mousekey.h" #include "timer.h" +#include "keymap_plover.h" /* Layers */ -#define BASE 0 // default layer -#define APPSEL 1 // application select layer -#define HUN 2 // Hungarian layer -#define EMACS 3 // (Spac)Emacs layer -#define OHLFT 4 // One-handed, left side -#define OHRGT 5 // One-handed, right side +enum { + BASE = 0, + APPSEL, + HUN, + EMACS, + OHLFT, + OHRGT, + PLVR, + EXPRM +}; /* Macros */ -#define A_GUI 0 // GUI magic -#define A_ESC 44 // OSM-clearing ESC - -#define A_MUL 1 // mouse up-left -#define A_MUR 2 // mouse up-right -#define A_MDL 3 // mouse down-left -#define A_MDR 4 // mouse down-right - -#define AE_VIS 5 // Visual mode -#define AE_PSTDEL 6 // Paste/Delete -#define AE_CPYC 7 // Copy/Cut -#define AE_EMACS 8 // Emacs copy & paste mode -#define AE_TERM 9 // Terminal copy & paste mode -#define AE_OTHER 10 // Other copy & paste mode -#define AE_INS 11 // Insert mode -#define AE_OVR 12 // Overwrite mode -#define AE_APPND 13 // Append - -#define HU_AA 14 // Á -#define HU_OO 15 // Ó -#define HU_EE 16 // É -#define HU_UU 17 // Ú -#define HU_II 18 // Í -#define HU_OE 19 // Ö -#define HU_UE 20 // Ü -#define HU_OEE 21 // Ő -#define HU_UEE 22 // Ű - -#define APP_SLK 23 // Slack -#define APP_EMCS 24 // Emacs -#define APP_TERM 25 // Terminal -#define APP_CHRM 26 // Chrome -#define APP_MSIC 27 // Music - -#define KF_1 28 // 1, F1 -#define KF_2 29 // 2, F2 -#define KF_3 30 // ... -#define KF_4 31 -#define KF_5 32 -#define KF_6 33 -#define KF_7 34 -#define KF_8 35 -#define KF_9 36 -#define KF_10 37 -#define KF_11 38 // =, F11 - -#define OH_BSSPC 39 -#define OH_ENTSFT 40 -#define OH_BASE 41 -#define OH_LEFT 42 -#define OH_RIGHT 43 +enum { + NONE = 0, + // Buttons that do extra stuff + A_GUI, + A_PLVR, + A_ESC, + A_MPN, + A_COLN, + + // Function / number keys + KF_1, // 1, F1 + KF_2, // 2, F2 + KF_3, // ... + KF_4, + KF_5, + KF_6, + KF_7, + KF_8, + KF_9, + KF_10, + KF_11, // =, F11 + + // Application select keys + APP_SLK, // Slack + APP_EMCS, // Emacs + APP_TERM, // Terminal + APP_CHRM, // Chrome + APP_MSIC, // Music + + // Diagonal mouse movement + A_MUL, + A_MUR, + A_MDL, + A_MDR, + + // Emacs layer keys + AE_VIS, // Visual mode + AE_PSTDEL, // Paste/Delete + AE_CPYC, // Copy/Cut + AE_EMACS, // Emacs copy & paste mode + AE_TERM, // Terminal copy & paste mode + AE_OTHER, // Other copy & paste mode + AE_INS, // Insert mode + AE_OVR, // Overwrite mode + AE_APPND, // Append + + // Hungarian layer keys + HU_AA, // Á + HU_OO, // Ó + HU_EE, // É + HU_UU, // Ú + HU_II, // Í + HU_OE, // Ö + HU_UE, // Ü + HU_OEE, // Ő + HU_UEE, // Ű + + // One-handed layout specials + OH_BSSPC, + OH_ENTSFT, + OH_BASE, + OH_LEFT, + OH_RIGHT, +}; /* Fn keys */ -#define F_BSE 0 -#define F_HUN 1 -#define F_GUI 2 -#define F_SFT 3 -#define F_ALT 4 -#define F_CTRL 5 + +enum { + F_BSE = 0, + F_HUN, + F_GUI, + F_SFT, + F_ALT, + F_CTRL +}; /* States & timers */ @@ -117,13 +138,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Base Layer * * ,-----------------------------------------------------. ,-----------------------------------------------------. - * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Apps | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| = F11 | + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| - * | Tab | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | / | + * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | = | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| - * | - | A | O | E | U | I |------| |------| D | H | T | N | S | \ | + * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ | * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| - * | Play/Pause| ; | Q | J | K | X | | | | B | M | W | V | Z | Stop | + * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * | Home | End | Down | Up | : | | - | Left | Right| PgUp | PgDn | * `-----------------------------------' `-----------------------------------' @@ -137,19 +158,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [BASE] = KEYMAP( // left hand - KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),KC_APP -,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC -,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I -,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN -,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,KC_COLN + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN +,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_COLN) ,F(F_ALT),F(F_GUI) ,F(F_CTRL) ,KC_BSPC,F(F_SFT),M(A_ESC) // right hand - ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,M(KF_11) - ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_SLSH + ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_EQL ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_BSLS ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP ,KC_MINS,KC_LEFT,KC_RGHT ,KC_PGUP ,KC_PGDN @@ -386,6 +407,96 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ,KC_NO ,KC_NO ,KC_NO ), +/* Keymap 7: Steno for Plover + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | BASE | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | # | # | # | # | # | | | | # | # | # | # | # | # | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | T | P | H | |------| |------| | F | P | L | T | D | + * |--------+ S +------+------+------+ * | | | | * +------+------+------+------+--------| + * | | | K | W | R | | | | | | R | B | G | S | Z | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | A | O |------| |------| E | U | + * | | | | | | | | + * `--------------------' `--------------------' + */ + +[PLVR] = KEYMAP( +// left hand +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), +KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, KC_NO, +KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, +KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, KC_NO, +KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + PV_A, PV_O, KC_NO, + + // right hand + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, + PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, + KC_NO, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO,PV_E, PV_U + ), + +/* Keymap 8: Experimental layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Next/Prev | ' | , | . | P | Y | [ | | ] | Q | F | C | R | J | = | + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ | + * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| + * | Play/Pause| Z | K | V | G | X | | | | L | M | W | B | / | Stop | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | Home | End | Down | Up | : | | - | Left | Right| PgUp | PgDn | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | LAlt | GUI | |EMACS | 1HND | + * ,------|------|------| |------+------+------. + * | | | Ctrl | | LEAD | | | + * |Backsp|LShift|------| |------| Enter| Space| + * | | | ESC | | HUN | | | + * `--------------------' `--------------------' + */ +[EXPRM] = KEYMAP( +// left hand + KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) +,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC +,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I +,KC_MPLY ,KC_Z ,KC_K ,KC_V ,KC_G ,KC_X ,KC_LPRN +,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_COLN) + + ,F(F_ALT),F(F_GUI) + ,F(F_CTRL) + ,KC_BSPC,F(F_SFT),M(A_ESC) + + // right hand + ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 + ,KC_RBRC ,KC_Q ,KC_F ,KC_C ,KC_R ,KC_J ,KC_EQL + ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_BSLS + ,KC_RPRN ,KC_L ,KC_M ,KC_W ,KC_B ,KC_SLSH ,KC_MSTP + ,KC_MINS,KC_LEFT,KC_RGHT ,KC_PGUP ,KC_PGDN + + ,OSL(EMACS),M(OH_LEFT) + ,KC_LEAD + ,F(F_HUN),KC_ENT ,KC_SPC + ), + + }; const uint16_t PROGMEM fn_actions[] = { @@ -397,6 +508,29 @@ const uint16_t PROGMEM fn_actions[] = { ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) }; +void toggle_steno(int pressed) +{ + uint8_t layer = biton32(layer_state); + + if (pressed) { + if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); + + register_code(PV_LP); + register_code(PV_LH); + register_code(PV_LR); + register_code(PV_O); + register_code(PV_RL); + register_code(PV_RG); + } else { + unregister_code(PV_LP); + unregister_code(PV_LH); + unregister_code(PV_LR); + unregister_code(PV_O); + unregister_code(PV_RL); + unregister_code(PV_RG); + } +} + macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) { uint8_t need_shift = 0; @@ -476,11 +610,53 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } else { register_code (KC_ESC); } + layer_off (HUN); } else { unregister_code (KC_ESC); } break; + case A_COLN: + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); + + if (record->event.pressed) { + if (oneshot) + clear_oneshot_mods (); + unregister_code (KC_LSFT); + + register_code (KC_SCLN); + unregister_code (KC_SCLN); + if (!oneshot) + register_code (KC_LSFT); + } + } else { + return MACRODOWN (D(RSFT), T(SCLN), U(RSFT), END); + } + break; + + case A_MPN: + if (record->event.pressed) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT) || + ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { + int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); + + if (oneshot) + clear_oneshot_mods (); + unregister_code (KC_LSFT); + + register_code (KC_MPRV); + unregister_code (KC_MPRV); + + if (!oneshot) + register_code (KC_LSFT); + } else { + return MACRO (T(MNXT), END); + } + } + break; + /* Hungarian layer */ case HU_AA: return ang_do_hun (record, KC_QUOT, KC_A); @@ -666,6 +842,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; + /* Plover base */ + case A_PLVR: + toggle_steno(record->event.pressed); + break; + /* GUI & AppSel */ case A_GUI: if (record->event.pressed) { @@ -691,29 +872,19 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case APP_SLK: - if (record->event.pressed) - return MACRO(T(S), T(C), T(U), T(D), T(C), T(L), T(O), T(U), T(D), T(ENT), END); - break; + return MACRODOWN(T(S), T(C), T(U), T(D), T(C), T(L), T(O), T(U), T(D), T(ENT), END); case APP_EMCS: - if (record->event.pressed) - return MACRO(T(E), T(M), T(A), T(C), T(S), T(ENT), END); - break; + return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); case APP_TERM: - if (record->event.pressed) - return MACRO(T(T), T(E), T(R), T(M), T(ENT), END); - break; + return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); case APP_CHRM: - if (record->event.pressed) - return MACRO(T(C), T(H), T(R), T(O), T(M), T(ENT), END); - break; + return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); case APP_MSIC: - if (record->event.pressed) - return MACRO(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); - break; + return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); /* Function keys */ case KF_1 ... KF_11: @@ -783,9 +954,16 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // Runs just one time when the keyboard initializes. void matrix_init_user(void) { - ergodox_led_all_set (LED_BRIGHTNESS_LO); ergodox_led_all_on(); + for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { + ergodox_led_all_set (i); + _delay_ms (5); + } _delay_ms(1000); + for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { + ergodox_led_all_set (i); + _delay_ms (10); + } ergodox_led_all_off(); }; @@ -798,12 +976,14 @@ void ang_do_unicode (void) { unregister_code (KC_U); unregister_code (KC_RSFT); unregister_code (KC_RCTL); + _delay_ms (100); } void ang_tap (uint16_t codes[]) { for (int i = 0; codes[i] != 0; i++) { register_code (codes[i]); unregister_code (codes[i]); + _delay_ms (50); } } @@ -811,6 +991,8 @@ void ang_tap (uint16_t codes[]) { register_code (code); \ unregister_code (code) +uint8_t is_exp = 0; + // Runs constantly in the background, in a loop. void matrix_scan_user(void) { uint8_t layer = biton32(layer_state); @@ -829,6 +1011,16 @@ void matrix_scan_user(void) { } else if (layer == EMACS) { ergodox_right_led_1_on(); ergodox_right_led_2_on(); + } else if (layer == PLVR) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + } else if (layer == EXPRM) { + ergodox_right_led_1_on (); + ergodox_right_led_2_on (); + ergodox_right_led_3_on (); + + ergodox_right_led_2_set (LED_BRIGHTNESS_HI); } if (layer == OHLFT || layer == OHRGT) { @@ -863,7 +1055,7 @@ void matrix_scan_user(void) { ergodox_right_led_1_on (); } else { ergodox_right_led_1_set (LED_BRIGHTNESS_LO); - if (layer != OHLFT && layer != EMACS) + if (layer != OHLFT && layer != EMACS && layer != PLVR && layer != EXPRM) ergodox_right_led_1_off (); } @@ -873,7 +1065,7 @@ void matrix_scan_user(void) { ergodox_right_led_2_on (); } else { ergodox_right_led_2_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != EMACS) + if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != EMACS && layer != PLVR && layer != EXPRM) ergodox_right_led_2_off (); } @@ -883,7 +1075,7 @@ void matrix_scan_user(void) { ergodox_right_led_3_on (); } else { ergodox_right_led_3_set (LED_BRIGHTNESS_LO); - if (layer != OHRGT && layer != HUN) + if (layer != OHRGT && layer != HUN && layer != PLVR && layer != EXPRM) ergodox_right_led_3_off (); } @@ -895,6 +1087,12 @@ void matrix_scan_user(void) { ang_do_unicode (); } +#ifdef QMK_VERSION + SEQ_ONE_KEY (KC_V) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } +#endif + SEQ_ONE_KEY (KC_L) { /* λ */ ang_do_unicode (); @@ -903,6 +1101,11 @@ void matrix_scan_user(void) { ang_tap (codes); } + SEQ_ONE_KEY (KC_Y) { + uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; + ang_tap (codes); + } + SEQ_ONE_KEY (KC_S) { ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); TAP_ONCE (KC_BSLS); @@ -928,5 +1131,42 @@ void matrix_scan_user(void) { unregister_code (KC_UP); unregister_code (KC_LGUI); } + + SEQ_ONE_KEY (KC_E) { + if (is_exp == 0) { + default_layer_and (0); + default_layer_or ((1 << EXPRM)); + is_exp = 1; + + ergodox_led_all_off (); + ergodox_right_led_3_on (); + _delay_ms (100); + ergodox_right_led_2_on (); + _delay_ms (100); + ergodox_right_led_3_off (); + ergodox_right_led_1_on (); + _delay_ms (100); + ergodox_right_led_2_off (); + _delay_ms (100); + ergodox_right_led_1_off (); + } else { + is_exp = 0; + default_layer_and (0); + default_layer_or (1 << BASE); + + ergodox_led_all_off (); + ergodox_right_led_1_on (); + _delay_ms (100); + ergodox_right_led_2_on (); + _delay_ms (100); + ergodox_right_led_1_off (); + ergodox_right_led_3_on (); + _delay_ms (100); + ergodox_right_led_2_off (); + _delay_ms (100); + ergodox_right_led_3_off (); + + } + } } } diff --git a/keyboard/ergodox_ez/keymaps/algernon/readme.md b/keyboard/ergodox_ez/keymaps/algernon/readme.md new file mode 100644 index 000000000..c9c481add --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/algernon/readme.md @@ -0,0 +1,158 @@ +algernon's layout +======================= + +This is an unconventional layout for the ErgoDox EZ. For more details about the +history of the layout, see my +[blog posts about my ErgoDox journey][blog-ergodox]. + + [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/ + +Some of the things in the layout only work when one uses Spacemacs and GNOME +under Linux. Your mileage may vary. + +## Base layer + +[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b) + +At its core, this is a Dvorak layout, with some minor changes (for example, `-` +being on the left half, and on the innermost key of the bottom row on the +right). The more interesting parts are how certain keys behave: + +* The keys on the number row double as function keys, when held for a bit longer + than an usual tap. This allows me to use the function keys without having to + switch layers. +* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they + are considered active for the next key press only. When double tapped, they + toggle on, until a third, single tap sometime later. When held, they act as + expected. My usual pattern is that I use these for the next keypress only, so + this behaviour is perfect. If I need them held, I'll just double-tap. +* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, + which pops up an application selector. It also switches to a one-shot layer, + where the number row on the left half turns into app selector macros, for the + most common things I usually want to switch to. Otherwise it behaves as on a + normal layout. +* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of + the one-shot modifiers are in-flight (as in, single-tapped, and not expired + yet), it cancels all one-shot modifiers. Otherwise it sends the usual keycode. +* The **Emacs** and **Hun** layer keys are one-shot, the **1Hand** and **STENO** + keys are toggles. +* The **Lead** key allows me to type in a sequence of keys, and trigger some + actions: + - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that + does this. + - `LEAD l` uses the unicode input method to enter a `λ`. + - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯` + - `LEAD y` types `\o/`. + - `LEAD w m` maximises the currently focused window. + - `LEAD e` makes the [experimental layer](#experimental-layer) the default. + - `LEAD v` prints the firmware version, the keyboard and the keymap, if + compiled with a QMK version that has these available. + +## Hungarian layer + +[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9) + +On this layer, the accented characters are at the same position as their base +variant. For some, which can have other diatribes, the long one is on top, +short's on bottom. Tapping any of the accented characters takes us back to the +base layer. + +## Emacs layer + +[![Emacs layer](images/emacs-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892) + +This layer is primarily for navigating text - and for some mousing and other +things, because there was space. Most of the keys should be pretty +self-explanatory, except for a few: + +* There are three keys on the bottom row of the left side, that change how some + of the other keys - explained just below - work. The keys are for *Emacs + mode* (the default), *Terminal mode*, and *Traditional mode*, respectively. +* The *Visual mode* key (the top big key on the left side) sends the `v` key in + *Emacs mode*, to enter Visual mode in Spacemacs. In all other modes, it is a + no-op. +* The *Copy/Cut* key (the bottom big key on the left side) sends the copy + command on tap, the cut one when held for longer than a normal tap. The **copy + command** is `y` in *Emacs mode*, `Ctrl-Shift-c` in *Terminal mode*, and + `Ctrl-c` in *Traditional mode*. The **cut command** is `x` in *Emacs mode*, + `Ctrl-Shift-x` in *Terminal Mode* and `Ctrl-x` in *Traditional mode*. +* The *Paste/Delete* key (the leftmost key on the left thumb cluster) sends the + paste command on tap, the delete one when held longer than a normal tap. The + **paste command** is `p` in *Emacs mode*, `Ctrl-Shift-v` in *Terminal mode*, + and `Ctrl-v` in *Traditional mode*. The **delete command** is `d` in *Emacs + mode*, and `DEL` in the other two. +* The `A`, `I` and `R` keys will - after sending themselves - clear the layer + back to the base layer. This allows a quick escape from the layer. + +## One-handed layer + +[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece) + +The one-handed layer is used in situations where the right hand is occupied, by +mousing around, for example. Tapping the `OTHER` key switches which side is +active. For the most part, keys remain in their usual position. When the right +half is active, keys are mirrored to the left half. + +The differences are as follows: + +* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier + to tap. +* Most keys on the thumb cluster now have dual uses, and these do not change + when switching sides: + - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held + for longer than a normal tap. + - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap. +* The `Apps`/`BASE` key can be used to go back to the base layer, by + long-tapping it. A short-tap will send the `App` key, as usual. + +## Steno layer + +[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667) + +This is to be used with [Plover](http://www.openstenoproject.org/plover/), +nothing really fancy here. The **STENO** key toggles the layer on and off, and +sends the toggle command to Plover too. + +## Experimental layer + +[![Experimental layer](images/experimental-layer.png)](http://www.keyboard-layout-editor.com/#/gists/6ff50bf71248e05aab5b3fec4fae3d08) + +While using the standard Dvorak layout, I encountered a number of +inconveniences, and on this layer, I am playing with ideas to make the layout +feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too, +had shortcomings I was not happy with. So now this is something inbetween, with +own observations thrown in. How it works out in the long run remains to be seen. + + [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm + +# Building + +To make my workflow easier, this layout is maintained in +[its own repository][algernon:ez-layout]. To build it, you will need the +[QMK][qmk] firmware checked out, and this repo either checked out, or symlinked +to `keyboard/ergodox_ez/algernon`. One way to achieve that is this: + + [algernon:ez-layout]: https://github.com/algernon/ergodox-layout + [qmk]: https://github.com/jackhumbert/qmk_firmware + +``` +$ git clone https://github.com/jackhumbert/qmk_firmware.git +$ cd qmk_firmware/keyboard/ergodox_ez +$ git clone https://github.com/algernon/ergodox-layout.git keymaps/algernon +$ make KEYMAP=algernon +``` + +From time to time, updates may be submitted back to the QMK repository. If you +are reading it there, you can build the firmware like any other firmware +included with it (assuming you are in the root directory of the firmware): + +``` +$ cd keyboard/ergodox_ez +$ make KEYMAP=algernon +``` + +# License + +The layout, being a derivative of the original TMK firmware which is under the +GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older +version. diff --git a/keyboard/ergodox_ez/keymaps/algernon/tools/max-focused b/keyboard/ergodox_ez/keymaps/algernon/tools/max-focused new file mode 100755 index 000000000..4d5220aa8 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/algernon/tools/max-focused @@ -0,0 +1,5 @@ +#! /bin/sh +WIN="$(xdotool getactivewindow)" +wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz +xdotool windowsize ${WIN} 100% 100% +wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz -- cgit v1.2.3-24-g4f1b