summaryrefslogtreecommitdiffstats
path: root/keyboards/preonic
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/preonic')
-rw-r--r--keyboards/preonic/Makefile73
-rw-r--r--keyboards/preonic/README.md25
-rw-r--r--keyboards/preonic/config.h89
-rw-r--r--keyboards/preonic/keymaps/default/Makefile25
-rw-r--r--keyboards/preonic/keymaps/default/README.md1
-rw-r--r--keyboards/preonic/keymaps/default/compiled.hex1609
-rw-r--r--keyboards/preonic/keymaps/default/keymap.c278
-rw-r--r--keyboards/preonic/preonic.c97
-rw-r--r--keyboards/preonic/preonic.h41
9 files changed, 2238 insertions, 0 deletions
diff --git a/keyboards/preonic/Makefile b/keyboards/preonic/Makefile
new file mode 100644
index 0000000000..08e9205cbf
--- /dev/null
+++ b/keyboards/preonic/Makefile
@@ -0,0 +1,73 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no # Audio output on port C6
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/preonic/README.md b/keyboards/preonic/README.md
new file mode 100644
index 0000000000..f99856fdd8
--- /dev/null
+++ b/keyboards/preonic/README.md
@@ -0,0 +1,25 @@
+Preonic keyboard firmware
+======================
+DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent README.md](/README.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/preonic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/preonic/config.h b/keyboards/preonic/config.h
new file mode 100644
index 0000000000..e8d0e82fc9
--- /dev/null
+++ b/keyboards/preonic/config.h
@@ -0,0 +1,89 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6061
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Ortholinear Keyboards
+#define PRODUCT The Preonic Keyboard
+#define DESCRIPTION A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+#define ws2812_pin PD1
+#define RGBLED_NUM 28 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/preonic/keymaps/default/Makefile b/keyboards/preonic/keymaps/default/Makefile
new file mode 100644
index 0000000000..581e08cd02
--- /dev/null
+++ b/keyboards/preonic/keymaps/default/Makefile
@@ -0,0 +1,25 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/default/README.md b/keyboards/preonic/keymaps/default/README.md
new file mode 100644
index 0000000000..e911968dd9
--- /dev/null
+++ b/keyboards/preonic/keymaps/default/README.md
@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/default/compiled.hex b/keyboards/preonic/keymaps/default/compiled.hex
new file mode 100644
index 0000000000..a988ab756c
--- /dev/null
+++ b/keyboards/preonic/keymaps/default/compiled.hex
@@ -0,0 +1,1609 @@
+:100000000C94AF050C94F3050C94F3050C94F305D4
+:100010000C94F3050C94F3050C94F3050C94F30580
+:100020000C94F3050C94F3050C94EA180C94BC1989
+:100030000C941D270C94F3050C94F3050C94F30514
+:100040000C94F3050C94F3050C94F3050C94F30550
+:100050000C94F3050C9485270C94F3050C94F3058C
+:100060000C94F3050C94F3050C94F3050C94F30530
+:100070000C94F3050C94F3050C94F3050C94F30520
+:100080000C94D00E0C94F3050C94F3050C94F3052A
+:100090000C94F3050C94F3050C94F3050C94F30500
+:1000A0000C94F3050C94F3050C94F305291A4B1AE0
+:1000B000391B4B1A391B901AB31A391B081B1B1B0F
+:1000C000051E051E341E341E731E931EE91FE91FF4
+:1000D0009E1EE91F4E1F4E1FB51FBE1FE91FE31FC7
+:1000E0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F40
+:1000F0005B1F5B1F5B1F5B1F5B1F5B1F5B1F5B1F30
+:100100006B1F791F801F871F911F07634236B79BA4
+:10011000D8A71A39685618AEBAAB558C1D3CB7CC67
+:100120005763BD6DEDFD753EF6177231BF000000DF
+:10013000803F08000000BE922449123EABAAAA2AC2
+:10014000BECDCCCC4C3E00000080BEABAAAAAA3EDD
+:1001500000000000BF000000803F00000000000819
+:100160004178D3BB4387D1133D190E3CC3BD4282B6
+:10017000AD2B3E68EC8276BED98FE1A93E4C80EF74
+:10018000FFBE01C4FF7F3F000000000035001E00DD
+:100190001F0020002100220023002400250026004B
+:1001A00027002A002B0014001A0008001500170071
+:1001B0001C0018000C00120013004C002900040061
+:1001C0001600070009000A000B000D000E000F00CA
+:1001D00033003400E1001D001B000600190005007B
+:1001E0001100100036003700380028000530E0000C
+:1001F000E200E30003302C002C00043050005100DA
+:1002000052004F0035001E001F0020002100220078
+:10021000230024002500260027002A002B001400BC
+:100220001A00090013000A000D000F0018001C003E
+:1002300033004C00290004001500160017000700C9
+:100240000B00110008000C0012003400E1001D003A
+:100250001B000600190005000E00100036003700D4
+:10026000380028000530E000E200E30003302C00F5
+:100270002C0004305000510052004F0035001E0089
+:100280001F0020002100220023002400250026005A
+:1002900027002A002B0034003600370013001C0012
+:1002A00009000A00060015000F004C002900040098
+:1002B0001200080018000C0007000B0017001100C6
+:1002C00016003800E100330014000D000E001B0082
+:1002D000050010001A0019001D0028000530E0007C
+:1002E000E200E30003302C002C00043050005100E9
+:1002F00052004F0035021E021F022002210222027C
+:10030000230224022502260227022A0035021E02A9
+:100310001F022002210222022302240225022602B9
+:1003200027024C004C003A003B003C003D003E00E0
+:100330003F002D022E022F02300231020100400048
+:1003400041004200430044004500320264020100C3
+:100350000100010001000100010001000100010095
+:1003600001000100AB00AA00A900AE0035001E008C
+:100370001F00200021002200230024002500260069
+:1003800027002A0035001E001F0020002100220047
+:10039000230024002500260027004C004C003A00D2
+:1003A0003B003C003D003E003F002D002E002F0092
+:1003B0003000310001004000410042004300440091
+:1003C000450032006400010001000100010001004D
+:1003D000010001000100010001000100AB00AA00C2
+:1003E000A900AE00000000000000000000000000B6
+:1003F00000000000000000000000000000000000FD
+:1004000000000000000000000000000000000000EC
+:1004100000000000000000000000000000000000DC
+:1004200000000000000000000000000000000000CC
+:1004300000000000000000000000000000000000BC
+:1004400000000000000000000000000000000000AC
+:10045000000000000000000000000000000000009C
+:10046000000000000000000000000000000000008C
+:10047000000000000000000000000000000000007C
+:10048000000000000000000000000000000000006C
+:10049000000000000000000000000000000000005C
+:1004A000000000000000000000000000000000004C
+:1004B000000000000000000000000000000000003C
+:1004C000000000000000000000000000000000002C
+:1004D000000000000000000000000000000000001C
+:1004E000000000000000000000000000000000000C
+:1004F00000000000000000000000000000000000FC
+:1005000000000000000000000000000000000000EB
+:1005100000000000000000000000000000000000DB
+:1005200000000000000000000000000000000000CB
+:1005300000000000000000000000000000000000BB
+:1005400000000000000000000000000000000000AB
+:10055000000000000000000000000000000000009B
+:10056000000000000000000000000000000000008B
+:10057000000000000000000000000000000000007B
+:10058000000000000000000000000000000000006B
+:10059000000000000000000000000000000000005B
+:1005A000000000000000000000000000000000004B
+:1005B000000000000000000000000000000000003B
+:1005C000000000000000000000000000000000002B
+:1005D000000000000000000000000000000000001B
+:1005E000000000000000000000000000000000000B
+:1005F00000000000000000000000000000000000FB
+:1006000000000000000000000000000000000000EA
+:1006100000000000000000000000000000000000DA
+:1006200000000000000000000000000000000000CA
+:1006300000000000000000000000000000000000BA
+:1006400000000000000000000000000000000000AA
+:10065000000000000000000000000000000000009A
+:10066000000000000000000000000000000000008A
+:10067000000000000000000000000000000000007A
+:10068000000000000000000000000000000000006A
+:10069000000000000000000000000000000000005A
+:1006A000000000000000000000000000000000004A
+:1006B000000000000000000000000000000000003A
+:1006C000000000000000000000000000000000002A
+:1006D000000000000000000000000000000000001A
+:1006E000000000000000000000000000000000000A
+:1006F00000000000000000000000000000000000FA
+:1007000000000000000000000000000000000000E9
+:1007100000000000000000000000000000000000D9
+:1007200000000000000000000000000000000000C9
+:1007300000000000000000000000000000000000B9
+:1007400000000000000000000000000000000000A9
+:100750000000000000000000000000000000000099
+:100760000000000000000000000000000000000089
+:100770000000000000000000000000000000000079
+:100780000000000000000000000000000000000069
+:100790000000000000000000000000000000000059
+:1007A0000000000000000000000000000000000049
+:1007B0000000000000000000000000000000000039
+:1007C0000000000000000000000000000000000029
+:1007D0000000000000000000000000000000000019
+:1007E0000000000000000000000000000000000009
+:1007F00000000000000000000000000000000000F9
+:1008000000000000000000000000000000000000E8
+:1008100000000000000000000000000000000000D8
+:1008200000000000000000000000000000000000C8
+:1008300000000000000000000000000000000000B8
+:1008400000000000000000000000000000000000A8
+:100850000000000000000000000000000000000098
+:100860000000000000000000000000000000000088
+:100870000000000000000000000000000000000078
+:100880000000000000000000000000000000000068
+:100890000000000000000000000000000000000058
+:1008A0000000000000000000000000000000000048
+:1008B0000000000000000000000000000000000038
+:1008C0000000000000000000000000000000000028
+:1008D0000000000000000000000000000000000018
+:1008E0000000000000000000000000000000000008
+:1008F00000000000000000000000000000000000F8
+:100900000000000000000000000000003A003B0072
+:100910003C003D003E003F004000410042004300DB
+:1009200044004500010000700100010001000100C9
+:10093000010001000100010001004C000100010064
+:1009400001001570167013700A700030013002300B
+:100950000100010001001C701B70187019701D70DF
+:100960001E700100010001000100010001000100F2
+:10097000010001000100010001000100010001006F
+:10098000010001002A0354006800650020005000A7
+:10099000720065006F006E006900630020004B006C
+:1009A0006500790062006F00610072006400000061
+:1009B0002C034F007200740068006F006C00690027
+:1009C0006E0065006100720020004B006500790038
+:1009D00062006F0061007200640073000000040395
+:1009E000090409026D00040100A0FA0904000001D5
+:1009F00003010100092111010001224000070581C6
+:100A00000308000A09040100010301020009211181
+:100A1000010001224D000705820308000A090402B3
+:100A20000001030000000921110100012236000726
+:100A300005830308000A09040300010300000009FC
+:100A40002111010001223900070584031000011261
+:100A500001100100000008EDFE61600100010200CC
+:100A60000105010906A101050719E029E71500257F
+:100A7000019508750181020508190129059505757B
+:100A80000191029501750391010507190029771558
+:100A9000002501957875018102C005010980A10139
+:100AA000850216010026B7001A01002AB70075104A
+:100AB00095018100C0050C0901A101850316010003
+:100AC000269C021A01002A9C02751095018100C023
+:100AD00005010902A1010901A10005091901290562
+:100AE00015002501950575018102950175038101A8
+:100AF0000501093009311581257F950275088106A8
+:100B000009381581257F950175088106050C0A387D
+:100B1000021581257F950175088106C0C005010970
+:100B200006A101050719E029E715002501950875BB
+:100B300001810295017508810105081901290595B2
+:100B400005750191029501750391010507190029A9
+:100B5000FF150026FF00950675088100C0001124CE
+:100B60001FBECFEFDAE0DEBFCDBF04B603FE24C068
+:100B700080912A0490912B04A0912C04B0912D0413
+:100B80008730904BA740B04BB9F410922A041092D2
+:100B90002B0410922C0410922D0414BE84B7877F6E
+:100BA00084BF88E10FB6F8948093600010926000D3
+:100BB0000FBEE0E0F8E3099512E0A0E0B1E0E0EB61
+:100BC000F2E602C005900D92AA3CB107D9F714E0F5
+:100BD000AAECB2E001C01D92AA32B107E1F70E946F
+:100BE00034160C9456310C940000089581E0089559
+:100BF0000C94F5050C94F605279A2F988FEF9FEF2C
+:100C000090938700809386008AE08093800089E13A
+:100C1000809381000C948D2C0E94FC056E9A769A2C
+:100C20000C94D206282F81110BC080918000877F01
+:100C30008093800010928D0010928C002F98089560
+:100C40002F9880918000886080938000233019F471
+:100C50008FEF9FEF0FC083E090E0821B9109880F18
+:100C6000991F2FEF3FEFA90102C0569547958A952E
+:100C7000E2F7CA0190938D0080938C000895CF9382
+:100C8000DF93EC010E942128BE0180E090E0DF911B
+:100C9000CF910C9414240F931F93FC01623091F1B7
+:100CA00028F4662359F06130D1F05FC0643009F454
+:100CB00040C0C0F1653009F44CC057C08281882320
+:100CC00009F453C000E010E0980140E064E070E0F7
+:100CD00088EC91E00E944E1281E090E010C0828189
+:100CE000882309F442C000E010E0980140E066E08B
+:100CF00070E088E591E00E944E1282E090E00E9450
+:100D00003F0633C08281882381F100E010E0980122
+:100D100040E068E070E088E891E00E944E1284E0D4
+:100D200090E0EDCF8281882311F083E006C083E05C
+:100D30000DC08281882349F084E00E94912440E123
+:100D400064E083E00E94030710C084E00E94B224A4
+:100D5000F6CF8281882331F085EE0E94A91C0E9483
+:100D6000E42C03C085EE0E94711D80E090E01F918D
+:100D70000F9108950F931F932FEF89EF90E021506B
+:100D800080409040E1F700C0000000E010E09801D2
+:100D900040E064E070E088EE91E00E944E121F9106
+:100DA0000F9108950C94BA060F931F9300E010E082
+:100DB000980140E063E070E080E491E00E944E1210
+:100DC0002FEF82E597E0215080409040E1F700C08E
+:100DD00000001F910F910C94030E0F931F9300E0DE
+:100DE00010E0980140E068E070E080E091E00E944F
+:100DF0004E121F910F9108950C94ED0681E0089515
+:100E00000C94FE060895CF92DF92EF92FF920F931B
+:100E10001F9301E010E020E030E06801790104C098
+:100E2000CC0CDD1CEE1CFF1C8A95D2F704C0000F11
+:100E3000111F221F331F6A95D2F70C291D292E2955
+:100E40003F29C090E003D090E103E090E203F090EE
+:100E5000E303C022D122E222F322842FC016D1065E
+:100E6000E206F30641F41F910F91FF90EF90DF909F
+:100E7000CF900C9491241F910F91FF90EF90DF90F1
+:100E8000CF900C94B2240C940C0680911A03882302
+:100E900009F448C08091D6029091D702009779F466
+:100EA0000E944F279093D7028093D6028091D80258
+:100EB00090E0009771F48091D90290E00AC00E94FE
+:100EC0005B2720910802309109022817390740F367
+:100ED00029C00197880F991F880F991FFC01E652BE
+:100EE000FD4F60817181828193810E94360EE09175
+:100EF000D80284E0E89FF0011124E652FD4F6081A2
+:100F00007181828193814FE050E00E94EE118091C7
+:100F1000D80290E001966091D90270E00E940631FB
+:100F20008093D8020C94F80510921C030C94030EC5
+:100F300081E080931C030C94FC0608958F929F928D
+:100F4000AF92BF92EF92FF920F931F93CF93DF93D5
+:100F5000CDB7DEB7A3970FB6F894DEBF0FBECDBFF7
+:100F60007C01FC0100811181C8010E944D25B8015E
+:100F70000E94320C8C01B7010E940007882309F4FB
+:100F8000BDC20531F0E71F0741F4F70182818823D4
+:100F900009F458C00E94E512B1C20631F0E71F07FC
+:100FA00041F4F7018281882309F44CC00E94EE12BB
+:100FB000A5C20731F0E71F0751F4F70182818823AA
+:100FC00009F440C00E94E1128111F0CFE3CF083153
+:100FD000F0E71F0739F4F7018281882399F10E9415
+:100FE00098078CC20931F0E71F0739F4F7018281B5
+:100FF000882341F10E94940781C20A31F0E71F075C
+:1010000049F4F70182818823E9F080911C03811162
+:10101000F1CFE5CF0B31F0E71F0739F4F7018281FB
+:10102000882381F00E94F5120AC00C31F0E71F07F7
+:1010300049F4F7018281882329F00E9400130E945D
+:10104000ED065CC280911C03811105C0F70182810D
+:101050008111CFC03AC1003E110579F4F7018281B8
+:10106000882309F44DC00E94030E81E080931B0386
+:1010700010921A031092D90241C2023E110559F48E
+:10108000F70182818823E1F10E94030E10921B0375
+:1010900010921A0333C2033E110591F4F7018281C5
+:1010A000882371F10E94030E10921B0381E080934C
+:1010B0001A031092D8021092D7021092D6021EC2C2
+:1010C0000235110559F4F7018281882309F416C20B
+:1010D00080910802909109020A970DC0013511050F
+:1010E00079F4F7018281882309F408C2809108020B
+:1010F000909109020A969093090280930802FEC11A
+:1011000040910C0283E2E7E2F2E0DE0111960190E9
+:101110000D928A95E1F7F701808121E030E02C0FF4
+:101120003D1F280F311DC90120910A0230910B0289
+:10113000FC01E20FF31F6081772767FD7095640F54
+:10114000711D882777FD8095982F0E94282E20E01A
+:1011500030E040E451E40E948D2D4B015C01F70129
+:10116000218185E090E0821B9109BC01882777FDF1
+:101170008095982F0E94282E9B01AC01C501B401D7
+:101180000E94252D9B01AC0160E070E080E090E4BE
+:101190000E949B2F20E030E04CED50E40E94382F5D
+:1011A0004B015C01F70182818823D1F04FE050E0D0
+:1011B000C501B4010E94EE1180911B038823A1F0A8
+:1011C0008091D90224E0829FF0011124E652FD4F64
+:1011D00080829182A282B3828F5F8093D90204C001
+:1011E000C501B4010E94360E0F3F110508F02ECF45
+:1011F00085C18091D50281111FC0043130E71307EA
+:1012000009F080C00E94020781E08093D5020E940D
+:101210004F279093D4028093D3021092CC02109265
+:10122000CE021092CD021092D0021092CF021092F4
+:10123000D2021092D10262C18091D3029091D40265
+:101240000E945B27883C910570F48091CC02E82FC6
+:10125000F0E0EE0FFF1FE353FD4F118300838F5F1C
+:101260008093CC024BC1043180E7180768F4023048
+:1012700090E7190708F050C00115E0E71E0771F06C
+:1012800001301047A1F11CC1033320E7120709F414
+:10129000E8C00433104709F4FBC012C1F701828192
+:1012A000882309F412C10E9454200E94030E0E9458
+:1012B000D406FFEF24E33CE0F15020403040E1F75A
+:1012C00000C000000E94AA2719C10431F0E71F07DF
+:1012D00008F0C3C0023020E71207F0F4011530E730
+:1012E000130709F4F2C00130104709F0E9C0F70113
+:1012F0008281882309F4E9C08091FD038160809395
+:10130000FD03FCC00431F0E71F0708F0A6C002305F
+:1013100020E7120708F4ECC0F7018281882309F462
+:10132000D4C00E940E28811102C00E94EA270E94A8
+:10133000262890E090930F0480930E040230F0E78B
+:101340001F0721F480910E04816080C0033020E7E4
+:10135000120721F480910E04826078C0043030E7D7
+:10136000130721F480910E04846070C0053080E77B
+:10137000180719F480910E0427C0063090E719076A
+:1013800021F480910E04806161C00730E0E71E0700
+:1013900021F480910E04806259C00830F0E71F07E5
+:1013A00021F480910E04806451C0093020E71207B7
+:1013B00021F480910E04806849C00A3030E7130799
+:1013C00029F480910E048460886040C00B3080E76F
+:1013D000180721F480910E048E7F38C00C3090E7FE
+:1013E000190721F480910E048D7F30C00D30E0E7A5
+:1013F0001E0721F480910E048B7F28C00E30F0E789
+:101400001F0719F480910E0420C00F3020E7120747
+:1014100021F480910E048F7E19C0003130E713074C
+:1014200021F480910E048F7D11C0013180E71807EF
+:1014300021F480910E048F7B09C080910E0402314B
+:10144000104711F48F7702C08B7F877F80930E0443
+:1014500080910E040E942A2851C0033390E7190797
+:10146000A1F4F7018281882321F01092CA0282E060
+:1014700016C08091CA02811106C086E20E94A91C92
+:1014800086E20E94711D82E018C004331047C1F447
+:10149000F7018281882331F01092CB0280E20E9412
+:1014A000C01D2CC08091CB02811106C087E20E9432
+:1014B000A91C87E20E94711D80E20E94C71D1EC008
+:1014C00081E08093CA028093CB02C701A3960FB636
+:1014D000F894DEBF0FBECDBFDF91CF911F910F916A
+:1014E000FF90EF90BF90AF909F908F900C94FA0573
+:1014F000011530E7130709F0F6CED5CE80E0A396AC
+:101500000FB6F894DEBF0FBECDBFDF91CF911F9114
+:101510000F91FF90EF90BF90AF909F908F900895A4
+:101520002CE0729FF00111243CE3839FE00DF11D3C
+:101530001124E60FF11DEE0FFF1FE457FE4F8591BA
+:1015400094910E94440C811540E5940708F047C02F
+:10155000811520E4920708F013C1883E910520F51B
+:10156000803E910508F07CC1883A910578F4853A6F
+:10157000910508F0A5C08130910509F471C108F406
+:101580002EC18430910508F06BC129C18B3B9105B8
+:1015900008F4A1C0803C910508F421C1FC01EE0FC4
+:1015A000FF1FE45FFF4FE6C0811530E2930758F458
+:1015B000811541E0940708F053C1803F910508F47C
+:1015C0000EC190650895811520E3920708F0D5C0FB
+:1015D000FC01FF70EE0FFF1FE457FE4FCBC08115DB
+:1015E00035E5930708F043C0811544E5940708F0FA
+:1015F000DEC0811522E5920708F5811531E59307D4
+:1016000008F0C1C0482F437021E030E002C0220F33
+:10161000331F4A95E2F73C68AC0164E05695479564
+:101620006A95E1F74370342B8F708695869540E27A
+:10163000849FC0011124822B932B0895282F269577
+:101640002695AC01437055278115934508F0A0C03D
+:1016500080E2289F9001112481E090E002C0880F71
+:10166000991F4A95E2F7822B932B9C6808958F323D
+:1016700040E7940790F48F3120E7920708F0A2C06A
+:10168000811536E5930708F497C09C013056211563
+:10169000304108F0A4C09F7093C0803320E79207C8
+:1016A00009F497C008F492C0813340E7940709F425
+:1016B00093C08233904709F092C080E093ED089583
+:1016C000853A910509F48EC0863A910509F08DC0DE
+:1016D00082E890E40895883A910509F489C0893A2E
+:1016E000910509F488C08A3A910509F487C08B3ABC
+:1016F000910509F486C08C3A910509F485C08D3AAC
+:10170000910509F484C0803B910509F483C08E3AA9
+:10171000910509F482C08F3A910509F481C0813B9B
+:10172000910509F480C0823B910509F47FC0833B99
+:10173000910509F47EC0843B910509F47DC0853B89
+:10174000910509F47CC0863B910509F47BC0873B79
+:10175000910509F47AC0883B910509F479C0893B69
+:10176000910509F478C08A3B910509F477C080E0BF
+:1017700094E408958591949108959927906C089523
+:101780009F70906A0895982F8827816F906A0895B6
+:1017900090E2299F9001112481E090E002C0880F1F
+:1017A000991F4A95E2F7822B932B9A680895982FF8
+:1017B0008827846F906A08958F719927982F8827BA
+:1017C000906208958F519047946D089580E091ED57
+:1017D000089580E090ED089580E092ED089580E016
+:1017E00090E0089581E890E4089583E890E40895F6
+:1017F00082EE94E4089589EE94E408958AEE94E4E8
+:10180000089585EB94E4089586EB94E4089587EBBE
+:1018100094E408958CEC94E408958DEC94E4089598
+:1018200083E895E408958AE895E4089582E995E4CB
+:10183000089584E995E4089581E296E4089583E2A9
+:1018400096E4089584E296E4089585E296E4089586
+:1018500086E296E4089587E296E408958AE296E4A3
+:10186000089508959CE0799FF00111249CE3899FDD
+:10187000E00DF11D1124E60FF11DEE0FFF1FE457DF
+:10188000FE4F8591949108958238910549F1B0F405
+:101890008133910509F458C048F48932910509F45F
+:1018A0004EC08A32910509F454C0089585339105DC
+:1018B00009F440C08933910599F00895833E91055C
+:1018C00029F138F4803E910591F0823E9105A1F016
+:1018D0000895863E9105F9F0873E910531F108950E
+:1018E00020910E0420FD3AC021FD38C0089580915A
+:1018F0000E0480FD35C032C080910E0482FF32C0DC
+:1019000080910E0484FD30C083EE39C080910E04B6
+:1019100082FD28C0F5CF80910E0483FF27C08091FF
+:101920000E0484FD21C087EE2AC080910E0483FD41
+:101930001DC0F5CF80910E0485FD1AC01BC080919B
+:101940000E0485FD17C014C080910E0486FD14C0DE
+:1019500015C080910E0486FD11C00EC080EE0FC030
+:1019600089E30DC082EE0BC080E009C086EE07C09F
+:1019700089E205C085E303C08AE201C081E390E00B
+:10198000089508950C94C10CE82FF0E0EA5AFD4F39
+:101990008081E82FEF70F0E082958F7021E030E0D9
+:1019A000A90102C0440F551F8A95E2F740A308958C
+:1019B0000F931F93CF93DF93C4E0D0E001E010E0DA
+:1019C000FE01EA5AFD4F8081E82FEF70F0E021A17F
+:1019D00082958F70A80102C0440F551F8A95E2F7C7
+:1019E000CA01822B81A38C2F0E94C40C219740F73F
+:1019F0008BE090E061E070E0FC01E65BFD4F208150
+:101A0000E22FEF70F0E042A122952F70DB0102C0BF
+:101A1000AA0FBB1F2A95E2F79D01242B22A3019751
+:101A200058F7DF91CF911F910F9108950F931F9356
+:101A3000CF93DF9385B7806885BF85B7806885BF02
+:101A4000C4E0D0E001E010E0FE01EA5AFD4F8081E1
+:101A5000E82FEF70F0E021A182958F70A80102C0FD
+:101A6000440F551F8A95E2F7CA01822B81A38C2F60
+:101A70000E94C40C219740F78BE090E061E070E099
+:101A8000FC01E65BFD4F2081E22FEF70F0E042A108
+:101A900022952F70DB0102C0AA0FBB1F2A95E2F727
+:101AA0009D01242B22A3019758F7DF91CF911F911D
+:101AB0000F910C944307EF92FF920F931F93CF93D4
+:101AC000DF9307E213E0C4E0EE24E394F12CD5E0C9
+:101AD0008C2F0E94C40C8BE090E040E050E0FC01B1
+:101AE000E65BFD4F6081E62FEF70F0E020A130E073
+:101AF00062956F7002C0359527956A95E2F720FDD3
+:101B000009C09701082E02C0220F331F0A94E2F782
+:101B1000422B532B019718F7F801929182918F0174
+:101B20008417950721F051834083D0930D028C2FA9
+:101B30000E94C40CC15060F680910D0287FD1FC049
+:101B4000815080930D028F3F39F08FE99FE001971C
+:101B5000F1F700C0000013C080E090E0FC01E95DF7
+:101B6000FC4FDC01A35EBC4F18962D913C91199758
+:101B7000318720870297863FEFEF9E0779F70E9413
+:101B8000450781E0DF91CF911F910F91FF90EF907A
+:101B90000895E82FF0E0EE0FFF1FE95DFC4F808114
+:101BA0009181089508950F931F93CF9301E313E05C
+:101BB000C0E0F801929182918F010E94C826C80F5F
+:101BC000F3E007321F07A9F78C2FCF911F910F91D8
+:101BD00008950E940E28811102C00E94EA270E94E7
+:101BE0003828809314043E9A809171008D7F8093F1
+:101BF000710082E0809390008AE18093910081E0FF
+:101C000080933303089580913303811102C00E94B1
+:101C1000E90D1092830310928203809171008D7FF1
+:101C200080937100809190008F7380939000109248
+:101C300045031092440310927C0310927D0310928E
+:101C40007E0310927F0310927B0310927A03EAE5E1
+:101C5000F3E0AAE4B3E011921192119211921D9255
+:101C60001D9283E0EA37F807B1F70895CF92DF922B
+:101C7000EF92FF920F931F93CF93DF932091440332
+:101C8000222309F484C06B017C018091330381110C
+:101C900002C00E94E90D0AE713E0C7E0D0E0A70107
+:101CA0009601F80192918291729162918F010E9446
+:101CB000892D811131C0FE01EE0FFF1FEE0FFF1FB6
+:101CC000E65AFC4F1082118212821382DE01AA0FA3
+:101CD000BB1FA65BBC4F11961C921E92C730D1054C
+:101CE000E9F0219644815581668177814083518353
+:101CF00062837383148215821682178212968D91E5
+:101D00009C91139711969C938E9313961C921E92FE
+:101D1000129734961296E2CF219708F680918203AB
+:101D200090918303019797FD05C09093830380935F
+:101D3000820304C010928303109282038091820375
+:101D400090918303209180033091810328173907F4
+:101D500024F01092810310928003892BC1F48091AA
+:101D600071008D7F80937100809190008F738093BC
+:101D7000900010927C0310927D0310927E031092CB
+:101D80007F0310927B0310927A0310924403DF9139
+:101D9000CF911F910F91FF90EF90DF90CF9008951A
+:101DA0001F920F920FB60F9211244F925F926F9273
+:101DB0007F928F929F92AF92BF92CF92DF92EF92DB
+:101DC000FF922F933F934F935F936F937F938F93E4
+:101DD0009F93AF93BF93CF93DF93EF93FF93809144
+:101DE0004403882309F49BC1C0918203D0918303EB
+:101DF0001C161D060CF093C140903403509035031F
+:101E0000609036037090370320E030E0A901C301F1
+:101E1000B2010E94342F18160CF065C0C130D105F4
+:101E200009F452C08091800390918103BE010E9409
+:101E300006317C0190938103809380038090460358
+:101E400090904703A0904803B090490320E030E011
+:101E500040E85FE3C501B4010E94252D609346036D
+:101E6000709347038093480390934903F701EE0F63
+:101E7000FF1FEE0FFF1FE65AFC4FA3019201608186
+:101E80007181828193810E948D2D20E030E040E0BD
+:101E90005EE30E94382F9B01AC01C501B4010E9492
+:101EA000342F18168CF4C7010196BE010E9406312A
+:101EB000909381038093800310924603109247030E
+:101EC0001092480310924903E0918003F09181033E
+:101ED000EE0FFF1FEE0FFF1FE65AFC4F608171816E
+:101EE00082819381D0C0C0907C03D0907D03E0902C
+:101EF0007E03F0907F0320E030E0A901C701B60126
+:101F00000E94892D2197882309F4A2C0FE01EE0FBB
+:101F1000FF1FEE0FFF1FE65AFC4F80809180A280CA
+:101F2000B380A5019401C701B6010E94892D87FFE6
+:101F300031C0A501940160E070E08CED93EC0E944B
+:101F40008D2D20E030E040E451E40E948D2D20E012
+:101F500030E040E05FE30E94382F9B01AC0160E07D
+:101F600070E080E090E40E949B2F9B01AC01C501D2
+:101F7000B4010E94382F9B01AC01C701B6010E9439
+:101F8000892D87FF07C0A701960160E070E08CED06
+:101F900093E439C0A5019401C701B6010E94342F12
+:101FA00018160CF055C0A501940160E070E08CEDAE
+:101FB00093E40E948D2D20E030E040E451E40E9443
+:101FC0008D2D20E030E040E05FE30E94382F9B0140
+:101FD000AC0160E070E080E090E40E949B2F9B01E8
+:101FE000AC01C501B4010E94382F9B01AC01C701AF
+:101FF000B6010E94342F18165CF5A701960160E027
+:1020000070E08CED93EC0E948D2D20E030E040E4F8
+:1020100051E40E948D2D20E030E040E05FE30E941B
+:10202000382F9B01AC0160E070E080E090E40E94FA
+:102030009B2F9B01AC01C701B6010E94382F609312
+:102040007C0370937D0380937E0390937F0313C082
+:10205000FE01EE0FFF1FEE0FFF1FE65AFC4F8081BF
+:102060009181A281B38180937C0390937D03A0939F
+:102070007E03B0937F0360917C0370917D03809118
+:102080007E0390917F0320913103309132032F3FE3
+:102090004FEF340731F02F5F3F4F309332032093DF
+:1020A00031030E940B136B017C0120E034E244EF0A
+:1020B00051E40E94892D87FF08C086EFC82E88E270
+:1020C000D82E84EFE82E81E4F82E20E030E040E0C6
+:1020D00051E4C701B6010E94382F9B01AC0160E0BA
+:1020E00074E284E79BE40E948D2D6B017C010E94C9
+:1020F000FA2D709397006093960020910E02309114
+:102100000F024091100250911102C701B6010E94C6
+:10211000382F0E94FA2D7093990060939800809157
+:102120004503882309F433C1C0904003D090410394
+:10213000E0904203F090430320E030E0A901C701A2
+:10214000B6010E94342F1816D4F580913103909176
+:1021500032038F3F2FEF920729F0019690933203BD
+:1021600080933103C701B6010E940B1320E030E0D9
+:1021700040E051E40E94382F9B01AC0160E074E222
+:1021800084E79BE40E948D2D6B017C010E94FA2D57
+:10219000709397006093960020910E0230910F0289
+:1021A0004091100250911102C701B6010E94382FD0
+:1021B0000E94FA2D709399006093980008C01092C5
+:1021C00097001092960010929900109298006091DA
+:1021D0003A0370913B036F5F7F4F70933B036093B3
+:1021E0003A03209196003091970080E090E0232BF5
+:1021F000F1F0C0919600D09197000E94262E6B01BD
+:102200007C01BE0180E090E00E94262E9B01AC0183
+:1022100060913C0370913D0380913E0390913F0398
+:102220000E948D2D20E03FEF4FE757E410C00E9441
+:10223000262E6B017C0120E030EE4FEF54E46091DC
+:102240003C0370913D0380913E0390913F030E94B7
+:10225000382F9B01AC01C701B6010E94342F87FDC6
+:1022600096C0809138038F5F8093380390E020916F
+:1022700010043091110482179307A0F080911B0481
+:10228000882319F0109238030DC0809171008D7F62
+:1022900080937100809190008F73809390001092D2
+:1022A00045037DC080913903C0913803811128C056
+:1022B000C0901504D0901604E0901704F090180414
+:1022C00020E030E0A901C701B6010E94342F1816A2
+:1022D000BCF481E0809339031092400310924103D3
+:1022E0001092420310924303C0923C03D0923D03EC
+:1022F000E0923E03F0923F03C150C093380343C0C5
+:10230000109239031092320310923103E0911204BB
+:10231000F091130448E0C49FE00DF11D1124808169
+:102320009181A281B3818093400390934103A09354
+:102330004203B093430320E030E040E85EE3648171
+:102340007581868197810E94382F6B017C01809175
+:102350001202682F70E080E090E00E94262E20E0BC
+:1023600030E048EC52E40E948D2D9B01AC01C70186
+:10237000B6010E94382F60933C0370933D03809315
+:102380003E0390933F0310923B0310923A038091D7
+:10239000140480FD04C01092450310924403FF9181
+:1023A000EF91DF91CF91BF91AF919F918F917F91ED
+:1023B0006F915F914F913F912F91FF90EF90DF9040
+:1023C000CF90BF90AF909F908F907F906F905F90D5
+:1023D0004F900F900FBE0F901F901895CF92DF92E5
+:1023E000EF92FF92CF93DF936B017C01EA01809122
+:1023F0003303811102C00E94E90D8091140480FF13
+:1024000046C0809182039091830308970CF03FC0EF
+:10241000809171008D7F80937100809145038111BF
+:102420000E94030E81E080934403109232031092C5
+:10243000310320E030E0A901C701B6010E94342F2A
+:102440001816DCF48091820390918303FC01EE0F57
+:10245000FF1FEE0FFF1FE65AFC4FC082D182E282BF
+:10246000F382FC01EE0FFF1FE65BFC4FD183C083BC
+:102470000196909383038093820380917100826020
+:102480008093710080919000806880939000DF912C
+:10249000CF91FF90EF90DF90CF9008958F929F9211
+:1024A000AF92BF92CF92DF92EF92FF920F931F9362
+:1024B000CF93DF93EC017B01D42E48015901809129
+:1024C0003303811102C00E94E90D8091140480FF42
+:1024D0006BC0809171008D7F809371008091440367
+:1024E00081110E94030E81E080934503D093130471
+:1024F000C0931204F0921104E0921004D0921B04D5
+:102500008092150490921604A0921704B0921804B9
+:102510001092460310924703109248031092490309
+:102520001092380388819981AA81BB8180934003EE
+:1025300090934103A0934203B093430320E030E023
+:1025400040E85EE36C817D818E819F810E94382FFF
+:102550006B017C0180911202682F70E080E090E0B6
+:102560000E94262E20E030E048EC52E40E948D2D9F
+:102570009B01AC01C701B6010E94382F60933C0358
+:1025800070933D0380933E0390933F0310923B036F
+:1025900010923A0380917100826080937100809163
+:1025A0009000806880939000DF91CF911F910F91F0
+:1025B000FF90EF90DF90CF90BF90AF909F908F9063
+:1025C00008958091140481700895809114048160AD
+:1025D000809314040E943C280C949D07809114045D
+:1025E0008E7F809314040C943C288091840390E0A7
+:1025F000019666E070E00E9406318093840308959E
+:102600008091840390E0019766E070E00E940631BB
+:102610008093840308958F929F92AF92BF92CF923E
+:10262000DF92EF92FF920F931F93CF93DF936B0193
+:102630007C01C0913103D0913203BE01