Compare commits

...
13 Commits
Author SHA1 Message Date
Jack Humbert d6ad9787a0 update template readme 2017-11-01 21:14:24 -04:00
Jack Humbert e2e387f8f8 update qmk template 2017-11-01 21:10:05 -04:00
Jack Humbert 039cc8c932 ignore more makefiles 2017-11-01 20:59:44 -04:00
QMK Bot 004826e1b8 convert to unix line-endings [skip ci] 2017-11-02 00:51:41 +00:00
Jack Humbert f445a7f971 adds .hex for teensy 2.0 using B0 as reset 2017-11-01 20:42:03 -04:00
Danny Nguyen 13e1388f2d Add nano switch pad 2017-11-01 20:02:52 -04:00
Jack Humbert fe56fffe7d Adds .qmk file type as a target for QMK Toolbox (#1084)
* adds .qmk file type as a target

* adds info.json with vendor and product

* add files for qmk info script

* add layout file for planck

* ignore .qmk files

* more settings

* update rules for avr and chibios

* update .qmk generation for info.json and inheritence
2017-11-01 20:01:45 -04:00
Jack Humbert d069a42c07 Update getting_started_github.md 2017-11-01 14:10:28 -04:00
Jack Humbert 029234f1f1 adds other layouts to rules.mk 2017-11-01 13:21:17 -04:00
Jack Humbert ddf49e8b21 Merge branch 'master' of https://github.com/qmk/qmk_firmware 2017-11-01 12:22:31 -04:00
Jack Humbert 371922ad61 update layout macros for planck 2017-11-01 12:20:46 -04:00
skullY f868a3bb86 Fix the json for clueboard 2017-11-01 09:19:40 -07:00
skullY 5329a80f6c fixup json 2017-11-01 09:04:45 -07:00
24 changed files with 785 additions and 111 deletions

No files matched your search

+8
View File
@@ -4,6 +4,7 @@
*.eep *.eep
*.elf *.elf
*.hex *.hex
*.qmk
!util/bootloader.hex !util/bootloader.hex
!quantum/tools/eeprom_reset.hex !quantum/tools/eeprom_reset.hex
*.log *.log
@@ -27,7 +28,14 @@ cmake-build-debug
/util/win_downloaded /util/win_downloaded
/keyboards/*/Makefile /keyboards/*/Makefile
/keyboards/*/*/Makefile /keyboards/*/*/Makefile
/keyboards/*/*/*/Makefile
/keyboards/*/*/*/*/Makefile
/keyboards/*/*/*/*/*/Makefile
/keyboards/*/keymaps/Makefile /keyboards/*/keymaps/Makefile
/keyboards/*/*/keymaps/Makefile
/keyboards/*/*/*/keymaps/Makefile
/keyboards/*/*/*/*/keymaps/Makefile
/keyboards/*/*/*/*/*/keymaps/Makefile
# Eclipse/PyCharm/Other IDE Settings # Eclipse/PyCharm/Other IDE Settings
.cproject .cproject
+1 -1
View File
@@ -52,7 +52,7 @@ To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master + 20043e64...7da94ac5 master -> master
``` ```
Your changes now exist on your fork on Github - if you go back there (https://github.com/<whoeveryouare>/qmk_firmware), you can create a "New Pull Request" by clicking this button: Your changes now exist on your fork on Github - if you go back there (`https://github.com/<whoeveryouare>/qmk_firmware`), you can create a "New Pull Request" by clicking this button:
![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg) ![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
+1 -1
View File
@@ -4,5 +4,5 @@
"bootloader": "atmel-dfu", "bootloader": "atmel-dfu",
"width": 16.5, "width": 16.5,
"height": 5, "height": 5,
"layouts": {"KEYMAP": [{"x": 0, "y": 0, "w": 1}, {"x": 1, "y": 0, "w": 1}, {"x": 2, "y": 0, "w": 1}, {"x": 3, "y": 0, "w": 1}, {"x": 4, "y": 0, "w": 1}, {"x": 5, "y": 0, "w": 1}, {"x": 6, "y": 0, "w": 1}, {"x": 7, "y": 0, "w": 1}, {"x": 8, "y": 0, "w": 1}, {"x": 9, "y": 0, "w": 1}, {"x": 10, "y": 0, "w": 1}, {"x": 11, "y": 0, "w": 1}, {"x": 12, "y": 0, "w": 1}, {"x": 13, "y": 0, "w": 1}, {"x": 15.5, "y": 0, "w": 1}, {"x": 15, "y": 0, "w": 1}, {"x": 0, "y": 1, "w": 1.5}, {"x": 1.5, "y": 1, "w": 1}, {"x": 2.5, "y": 1, "w": 1}, {"x": 3.5, "y": 1, "w": 1}, {"x": 4.5, "y": 1, "w": 1}, {"x": 5.5, "y": 1, "w": 1}, {"x": 6.5, "y": 1, "w": 1}, {"x": 7.5, "y": 1, "w": 1}, {"x": 8.5, "y": 1, "w": 1}, {"x": 9.5, "y": 1, "w": 1}, {"x": 10.5, "y": 1, "w": 1}, {"x": 11.5, "y": 1, "w": 1}, {"x": 12.5, "y": 1, "w": 1}, {"x": 13.5, "y": 1, "w": 1.5}, {"x": 15.5, "y": 1, "w": 1}, {"x": 0, "y": 2, "w": 1.75}, {"x": 1.75, "y": 2, "w": 1}, {"x": 2.75, "y": 2, "w": 1}, {"x": 3.75, "y": 2, "w": 1}, {"x": 4.75, "y": 2, "w": 1}, {"x": 5.75, "y": 2, "w": 1}, {"x": 6.75, "y": 2, "w": 1}, {"x": 7.75, "y": 2, "w": 1}, {"x": 8.75, "y": 2, "w": 1}, {"x": 9.75, "y": 2, "w": 1}, {"x": 10.75, "y": 2, "w": 1}, {"x": 11.75, "y": 2, "w": 1}, {"x": 12.75, "y": 2, "w": 1}, {"x": 13.75, "y": 2, "w": 1.25}, {"x": 0, "y": 3, "w": 1.25}, {"x": 1.25, "y": 3, "w": 1}, {"x": 2.25, "y": 3, "w": 1}, {"x": 3.25, "y": 3, "w": 1}, {"x": 4.25, "y": 3, "w": 1}, {"x": 5.25, "y": 3, "w": 1}, {"x": 6.25, "y": 3, "w": 1}, {"x": 7.25, "y": 3, "w": 1}, {"x": 8.25, "y": 3, "w": 1}, {"x": 9.25, "y": 3, "w": 1}, {"x": 10.25, "y": 3, "w": 1}, {"x": 11.25, "y": 3, "w": 1}, {"x": 12.25, "y": 3, "w": 1}, {"x": 13.25, "y": 3, "w": 1.25}, {"x": 14.5, "y": 3, "w": 1}, {"x": 0, "y": 4, "w": 1.25}, {"x": 1.25, "y": 4, "w": 1}, {"x": 2.25, "y": 4, "w": 1.25}, {"x": 3.5, "y": 4, "w": 1.25}, {"x": 4.75, "y": 4, "w": 2}, {"x": 6.75, "y": 4, "w": 2}, {"x": 8.75, "y": 4, "w": 1.25}, {"x": 10, "y": 4, "w": 1.25}, {"x": 11.25, "y": 4, "w": 1}, {"x": 12.25, "y": 4, "w": 1.25}, {"x": 13.5, "y": 4, "w": 1}, {"x": 14.5, "y": 4, "w": 1}, {"x": 15.5, "y": 4, "w": 1}]} "layouts": {"KEYMAP": [{"x": 0, "y": 0, "w": 1}, {"x": 1, "y": 0, "w": 1}, {"x": 2, "y": 0, "w": 1}, {"x": 3, "y": 0, "w": 1}, {"x": 4, "y": 0, "w": 1}, {"x": 5, "y": 0, "w": 1}, {"x": 6, "y": 0, "w": 1}, {"x": 7, "y": 0, "w": 1}, {"x": 8, "y": 0, "w": 1}, {"x": 9, "y": 0, "w": 1}, {"x": 10, "y": 0, "w": 1}, {"x": 11, "y": 0, "w": 1}, {"x": 12, "y": 0, "w": 1}, {"x": 13, "y": 0, "w": 1}, {"x": 14, "y": 0, "w": 1}, {"x": 15.5, "y": 0, "w": 1}, {"x": 0, "y": 1, "w": 1.5}, {"x": 1.5, "y": 1, "w": 1}, {"x": 2.5, "y": 1, "w": 1}, {"x": 3.5, "y": 1, "w": 1}, {"x": 4.5, "y": 1, "w": 1}, {"x": 5.5, "y": 1, "w": 1}, {"x": 6.5, "y": 1, "w": 1}, {"x": 7.5, "y": 1, "w": 1}, {"x": 8.5, "y": 1, "w": 1}, {"x": 9.5, "y": 1, "w": 1}, {"x": 10.5, "y": 1, "w": 1}, {"x": 11.5, "y": 1, "w": 1}, {"x": 12.5, "y": 1, "w": 1}, {"x": 13.5, "y": 1, "w": 1.5}, {"x": 15.5, "y": 1, "w": 1}, {"x": 0, "y": 2, "w": 1.75}, {"x": 1.75, "y": 2, "w": 1}, {"x": 2.75, "y": 2, "w": 1}, {"x": 3.75, "y": 2, "w": 1}, {"x": 4.75, "y": 2, "w": 1}, {"x": 5.75, "y": 2, "w": 1}, {"x": 6.75, "y": 2, "w": 1}, {"x": 7.75, "y": 2, "w": 1}, {"x": 8.75, "y": 2, "w": 1}, {"x": 9.75, "y": 2, "w": 1}, {"x": 10.75, "y": 2, "w": 1}, {"x": 11.75, "y": 2, "w": 1}, {"x": 12.75, "y": 2, "w": 1}, {"x": 13.75, "y": 2, "w": 1.25}, {"x": 0, "y": 3, "w": 1.25}, {"x": 1.25, "y": 3, "w": 1}, {"x": 2.25, "y": 3, "w": 1}, {"x": 3.25, "y": 3, "w": 1}, {"x": 4.25, "y": 3, "w": 1}, {"x": 5.25, "y": 3, "w": 1}, {"x": 6.25, "y": 3, "w": 1}, {"x": 7.25, "y": 3, "w": 1}, {"x": 8.25, "y": 3, "w": 1}, {"x": 9.25, "y": 3, "w": 1}, {"x": 10.25, "y": 3, "w": 1}, {"x": 11.25, "y": 3, "w": 1}, {"x": 12.25, "y": 3, "w": 1}, {"x": 13.25, "y": 3, "w": 1.25}, {"x": 14.5, "y": 3, "w": 1}, {"x": 0, "y": 4, "w": 1.25}, {"x": 1.25, "y": 4, "w": 1}, {"x": 2.25, "y": 4, "w": 1.25}, {"x": 3.5, "y": 4, "w": 1.25}, {"x": 4.75, "y": 4, "w": 2}, {"x": 6.75, "y": 4, "w": 2}, {"x": 8.75, "y": 4, "w": 1.25}, {"x": 10, "y": 4, "w": 1.25}, {"x": 11.25, "y": 4, "w": 1}, {"x": 12.25, "y": 4, "w": 1.25}, {"x": 13.5, "y": 4, "w": 1}, {"x": 14.5, "y": 4, "w": 1}, {"x": 15.5, "y": 4, "w": 1}]}
} }
+1 -1
View File
@@ -1,4 +1,4 @@
{ {
"manufacturer": "Clueboard", "manufacturer": "Clueboard",
"maintainer": "skullydazed", "maintainer": "skullydazed"
} }
+48
View File
@@ -0,0 +1,48 @@
/*
Copyright 2012 Jun Wako <[email protected]>
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 0xCEEB
#define PRODUCT_ID 0x0007
#define DEVICE_VER 0x0001
#define MANUFACTURER di0ib
#define PRODUCT Nano
#define DESCRIPTION 8 key microswitch board
/* key matrix size */
#define MATRIX_ROWS 2
#define MATRIX_COLS 4
/* ws2812 RGB LED */
#define RGB_DI_PIN B1
#define RGBLIGHT_TIMER
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 6 // Number of LEDs
#define ws2812_PORTREG PORTD
#define ws2812_DDRREG DDRD
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
#define TAPPING_TERM 200
#endif
+23
View File
@@ -0,0 +1,23 @@
#include "nano.h"
#define _MAIN 0
#define _FN 1
#define KC_ KC_TRNS
#define KC_X0 LT(_FN, KC_ESC)
#define KC_RTOG RGB_TOG
#define KC_RMOD RGB_MOD
#define KC_RHUI RGB_HUI
#define KC_RHUD RGB_HUD
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = KC_KEYMAP(
VOLU,MPLY,MPRV,PGUP,
VOLD,MUTE,MNXT,PGDN
),
[_FN] = KC_KEYMAP(
F , ,RHUI, ,
RTOG,RMOD,RHUD,
)
};
+3
View File
@@ -0,0 +1,3 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
+159
View File
@@ -0,0 +1,159 @@
/*
Note for ErgoDox EZ customizers: Here be dragons!
This is not a file you want to be messing with.
All of the interesting stuff for you is under keymaps/ :)
Love, Erez
Copyright 2013 Oleg Kostyuk <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* scan matrix
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include <util/delay.h>
#include "action_layer.h"
#include "print.h"
#include "debug.h"
#include "util.h"
#include "matrix.h"
#include "nano.h"
#include <string.h>
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
static matrix_row_t matrix_stage[MATRIX_ROWS];
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
static uint16_t debouncing_time;
static bool debouncing = false;
__attribute__ ((weak))
void matrix_init_kb(void) {
matrix_init_user();
}
__attribute__ ((weak))
void matrix_scan_kb(void) {
matrix_scan_user();
}
__attribute__ ((weak))
void matrix_init_user(void) {
}
__attribute__ ((weak))
void matrix_scan_user(void) {
}
inline
uint8_t matrix_rows(void)
{
return MATRIX_ROWS;
}
inline
uint8_t matrix_cols(void)
{
return MATRIX_COLS;
}
void matrix_init(void)
{
DDRF &= ~(1<<4 | 1<<5 | 1<<6 | 1<<7);
PORTF |= (1<<4 | 1<<5 | 1<<6 | 1<<7);
DDRC &= ~(1<<6);
PORTC |= (1<<6);
DDRD &= ~(1<<0 | 1<<1 | 1<<4);
PORTD |= (1<<0 | 1<<1 | 1<<4);
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
matrix_debouncing[i] = 0;
matrix_stage[i] = 0;
}
matrix_init_quantum();
}
uint8_t matrix_scan(void)
{
matrix_stage[0] =
(PINF&(1<<4) ? 0 : (1<<0)) |
(PINF&(1<<5) ? 0 : (1<<1)) |
(PINF&(1<<6) ? 0 : (1<<2)) |
(PINF&(1<<7) ? 0 : (1<<3));
matrix_stage[1] =
(PIND&(1<<1) ? 0 : (1<<0)) |
(PIND&(1<<0) ? 0 : (1<<1)) |
(PIND&(1<<4) ? 0 : (1<<2)) |
(PINC&(1<<6) ? 0 : (1<<3));
if (memcmp(matrix_debouncing, matrix_stage, sizeof(matrix)) != 0) {
debouncing = true;
debouncing_time = timer_read();
}
matrix_debouncing[0] = matrix_stage[0];
matrix_debouncing[1] = matrix_stage[1];
if (debouncing && (timer_elapsed(debouncing_time) > 20)) {
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = matrix_debouncing[i];
}
debouncing = false;
}
matrix_scan_quantum();
return 1;
}
bool matrix_is_modified(void)
{
return true;
}
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
return (matrix[row] & ((matrix_row_t)1<<col));
}
inline
matrix_row_t matrix_get_row(uint8_t row)
{
return matrix[row];
}
void matrix_print(void)
{
}
uint8_t matrix_key_count(void)
{
uint8_t count = 0;
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
count += bitpop16(matrix[i]);
}
return count;
}
+5
View File
@@ -0,0 +1,5 @@
#include "nano.h"
void matrix_init_kb(void) {
matrix_init_user();
}
+12
View File
@@ -0,0 +1,12 @@
#ifndef NANO_H
#define NANO_H
#include "quantum.h"
#define KC_KEYMAP(k01, k02, k03, k04, k05, k06, k07, k08) \
{ \
{KC_##k01, KC_##k02, KC_##k03, KC_##k04}, \
{KC_##k05, KC_##k06, KC_##k07, KC_##k08} \
}
#endif
+14
View File
@@ -0,0 +1,14 @@
Nano
====
A 2x4 mini switch pad built using 6mm x 6mm tactile switches and a Pro Micro. [More info here.](http://www.40percent.club/2016/12/nano-tmk.html)
Keyboard Maintainer: [di0ib](https://github.com/di0ib)
Hardware Supported: Pro Micro ATmega32U4
Hardware Availability: [PCB Files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/nano/pcb)
Make example for this keyboard (after setting up your build environment):
make nano:default
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+70
View File
@@ -0,0 +1,70 @@
SRC = matrix.c
# 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 = no # 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 = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes
+2 -2
View File
@@ -10,7 +10,7 @@
"width": 12, "width": 12,
"height": 4, "height": 4,
"layouts": { "layouts": {
"PLANCK_MIT": { "LAYOUT_planck_mit": {
"key_count": 47, "key_count": 47,
"layout": [ "layout": [
{ "w": 1, "x": 0, "y": 0 }, { "w": 1, "x": 0, "y": 0 },
@@ -61,7 +61,7 @@
{ "w": 1, "x": 10, "y": 3 }, { "w": 1, "x": 10, "y": 3 },
{ "w": 1, "x": 11, "y": 3 } ] { "w": 1, "x": 11, "y": 3 } ]
}, },
"PLANCK_GRID": { "LAYOUT_planck_grid": {
"key_count": 48, "key_count": 48,
"layout": [ "layout": [
{ "w": 1, "x": 0, "y": 0 }, { "w": 1, "x": 0, "y": 0 },
+4 -4
View File
@@ -3,7 +3,7 @@
#include "quantum.h" #include "quantum.h"
#define PLANCK_MIT( \ #define LAYOUT_planck_mit( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
@@ -16,7 +16,7 @@
{ k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b } \ { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b } \
} }
#define PLANCK_GRID( \ #define LAYOUT_planck_grid( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
@@ -29,8 +29,8 @@
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \
} }
#define KEYMAP PLANCK_GRID #define KEYMAP LAYOUT_planck_grid
#define LAYOUT_ortho_4x12 PLANCK_GRID #define LAYOUT_ortho_4x12 LAYOUT_planck_grid
#ifdef KEYBOARD_planck_rev3 #ifdef KEYBOARD_planck_rev3
#include "rev3.h" #include "rev3.h"
+1 -1
View File
@@ -67,6 +67,6 @@ API_SYSEX_ENABLE = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
LAYOUTS = ortho_4x12 LAYOUTS = ortho_4x12 planck_mit planck_grid
DEFAULT_FOLDER = planck/rev4 DEFAULT_FOLDER = planck/rev4
-18
View File
@@ -1,18 +0,0 @@
# Copyright 2013 Jun Wako <[email protected]>
#
# 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 MAKEFILE_INCLUDED
include ../../Makefile
endif
+1 -1
View File
@@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */ /* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED #define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060 #define PRODUCT_ID 0x0000
#define DEVICE_VER 0x0001 #define DEVICE_VER 0x0001
#define MANUFACTURER You #define MANUFACTURER You
#define PRODUCT %KEYBOARD% #define PRODUCT %KEYBOARD%
-37
View File
@@ -1,37 +0,0 @@
# Copyright 2013 Jun Wako <[email protected]>
#
# 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/>.
# QMK 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 = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
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.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
+1 -1
View File
@@ -17,7 +17,7 @@
#ifndef CONFIG_USER_H #ifndef CONFIG_USER_H
#define CONFIG_USER_H #define CONFIG_USER_H
#include "../../config.h" #include "config_common.h"
// place overrides here // place overrides here
+9 -30
View File
@@ -1,36 +1,15 @@
%KEYBOARD% keyboard firmware # %KEYBOARD%
======================
## Quantum MK Firmware ![%KEYBOARD%](imgur.com image replace me!)
For the full Quantum feature list, see [the parent readme](/). A short description of the keyboard/project
## Building Keyboard Maintainer: [You](https://github.com/yourusername)
Hardware Supported: The PCBs, controllers supported
Hardware Availability: links to where you can find this hardware
Download or clone the whole firmware and navigate to the root folder. Once your dev env is setup, you'll be able to type `make %KEYBOARD%-default` to generate your .hex - you can then use the Teensy Loader to program your .hex file. Make example for this keyboard (after setting up your build environment):
(Note: replace %KEYBOARD% with the name of your keyboard.) make %KEYBOARD%:default
Depending on which keymap you would like to use, you will have to compile slightly differently. See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
### Default
To build with the default keymap, simply run `make %KEYBOARD%-default`.
### 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 folder with the name of your keymap in the keymaps folder. Create a `readme.md` and a `keymap.c` file to complete your new keymap. When you are done your file tree should look like this:
* `qmk_firmware/`
* `keyboard/`
* `keymaps/`
* `config.h` (optional)
* `keymap.c`
* `readme.md`
* `rules.mk` (optional)
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
```
$ make %KEYBOARD%-[default|jack|<name>]
```
+14 -14
View File
@@ -45,24 +45,24 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Atmel DFU loader 4096 # Atmel DFU loader 4096
# LUFA bootloader 4096 # LUFA bootloader 4096
# USBaspLoader 2048 # USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=512 OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options # Build Options
# change yes to no to disable # change yes to no to disable
# #
BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE ?= yes # Console for debug(+400) CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE ?= yes # Commands for debug and configuration COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE ?= no # USB Nkey Rollover NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config) MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE ?= no # Unicode UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE ?= no # Audio output on port C6 AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+24
View File
@@ -96,6 +96,30 @@ ifndef TEENSY_LOADER_CLI
endif endif
endif endif
# Generate a .qmk for the QMK-FF
qmk: $(BUILD_DIR)/$(TARGET).hex
zip $(TARGET).qmk -FSrj $(KEYMAP_PATH)/*
zip $(TARGET).qmk -u $<
printf "@ $<\n@=firmware.hex\n" | zipnote -w $(TARGET).qmk
printf "{\n \"generated\": \"%s\"\n}" "$$(date)" > $(BUILD_DIR)/$(TARGET).json
if [ -f $(KEYBOARD_PATH_5)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_5)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_4)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_4)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_3)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_3)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_2)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_2)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_1)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_1)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
zip $(TARGET).qmk -urj $(BUILD_DIR)/$(TARGET).json
printf "@ $(TARGET).json\n@=info.json\n" | zipnote -w $(TARGET).qmk
# Program the device. # Program the device.
program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep
$(PROGRAM_CMD) $(PROGRAM_CMD)
+24
View File
@@ -180,6 +180,30 @@ EXTRALIBDIRS = $(RULESPATH)/ld
DFU_UTIL ?= dfu-util DFU_UTIL ?= dfu-util
# Generate a .qmk for the QMK-FF
qmk: $(BUILD_DIR)/$(TARGET).bin
zip $(TARGET).qmk -FSrj $(KEYMAP_PATH)/*
zip $(TARGET).qmk -u $<
printf "@ $<\n@=firmware.bin\n" | zipnote -w $(TARGET).qmk
printf "{\n \"generated\": \"%s\"\n}" "$$(date)" > $(BUILD_DIR)/$(TARGET).json
if [ -f $(KEYBOARD_PATH_5)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_5)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_4)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_4)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_3)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_3)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_2)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_2)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
if [ -f $(KEYBOARD_PATH_1)/info.json ]; then \
jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_1)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
fi
zip $(TARGET).qmk -urj $(BUILD_DIR)/$(TARGET).json
printf "@ $(TARGET).json\n@=info.json\n" | zipnote -w $(TARGET).qmk
dfu-util: $(BUILD_DIR)/$(TARGET).bin sizeafter dfu-util: $(BUILD_DIR)/$(TARGET).bin sizeafter
$(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
+360
View File
@@ -0,0 +1,360 @@
:10000000BDC00000E3C00000E1C00000DFC0000090
:10001000DDC00000DBC00000D9C00000D7C0000078
:10002000D5C00000D3C000002AC70000A1C700004F
:10003000CDC00000CBC00000C9C00000C7C0000098
:10004000C5C00000C3C00000C1C00000BFC00000A8
:10005000BDC00000BBC00000B9C000006FC60000FA
:10006000B5C00000B3C00000B1C00000AFC00000C8
:10007000ADC00000ABC00000A9C00000A7C00000D8
:10008000A5C00000A3C00000A1C000009FC00000E8
:100090009DC000009BC0000099C0000097C00000F8
:1000A00095C0000093C0000091C000000001000056
:1000B0005D0112000200001A014300030000160156
:1000C0000401030904FC001802030904E4001603F8
:1000D000030904D6000C0C03310032003300340055
:1000E0003500000016035500530042002000530065
:1000F00065007200690061006C0000001803540084
:10010000650065006E007300790064007500690089
:100110006E006F000000040309040902430002019D
:1001200000C0320904000001020201000524001091
:10013000010524010001042402060524060001072C
:1001400005820308004009040100020A00000007BC
:100150000503024000000705840240000012010070
:100160000202000020C01683040001010203010006
:1001700001C10201803601813600010B11241FBE2E
:10018000CFEFDAE0DEBFCDBF11E0A0E0B1E0EAE3FF
:10019000F6E102C005900D92A232B107D9F722E034
:1001A000A2E2B1E001C01D92A935B207E1F710E06B
:1001B000CEEBD0E004C02197FE010E94150BCD3B91
:1001C000D107C9F70E941D090C941B0B19CFDC0144
:1001D000ED91FC910190F081E02D09948EBD00001D
:1001E0000DB407FEFDCF8EB508950F931F930FB684
:1001F000F8948091440290914502A0914602B091FA
:1002000047020FBE409122015091230160912401C9
:10021000709125018C019D01041B150B260B370BDA
:100220000832110521053105F0F0809322019093E9
:100230002301A0932401B09325012091010180EEB8
:10024000820F813A28F090910001919590930001DE
:1002500080910001820F80930101569A803810F43A
:100260005E9801C05E9A1F910F91089590912601AA
:10027000882319F0911103C004C0911102C0289A7B
:100280000895289808950F931F93CF93DF938B01C0
:10029000EC01DD27FE0193D46EE170E080E090E098
:1002A0008DD5FE0192D46EE170E080E090E086D5BD
:1002B0000150110978F7DF91CF911F910F910895A7
:1002C00040E05BE460E070E08FE492E00E949A0A14
:1002D000529A62E070E087E090E0D5DF539A62E0E6
:1002E00070E088E090E0CFDF569A62E070E08BE04B
:1002F00090E0C9CF882311F05A9A08955A9808952A
:10030000CF93DF9300D01F92CDB7DEB72B834A8304
:10031000698364DF6981862F61DF4A81842F5EDF14
:100320002B81822F0F900F900F90DF91CF9156CF9E
:1003300020913A012093270180913B01809328016D
:1003400080913C018093290180913D0180932A0195
:1003500080913E0180932B0180913F0180932C017D
:100360008091400180932D018091410180932E0165
:100370008091420180932F018091440190E0982F59
:10038000882730914501830F911D9093310180930F
:1003900030018091460190E0982F882730914701E5
:1003A000830F911D90933301809332018091480116
:1003B00090E0982F882730914901830F911D9093E9
:1003C00035018093340180914A0190E0A0E0B0E0D3
:1003D000BA2FA92F982F882730914B01830F911D99
:1003E000A11DB11DDC019927882740914C0150E0E7
:1003F000542F4427052E000C660B770B840F951F96
:10040000A61FB71F30914D01830F911DA11DB11D76
:100410008093360190933701A0933801B09339014E
:1004200081E0203E08F480E080932601089581E079
:100430001DDF209A65D380914202882381F08130AC
:1004400051F48DB3809340029DB380914102809519
:1004500089238DBB04C08FB7F8948093400283E555
:100460008CBD1DBC299864E170E080E090E0A6D4CA
:1004700080E0FCDE80E991E00197F1F781E0F6DEB3
:1004800062E370E080E090E099D420E040E063E532
:100490008CEA36DF81E090E090933D0280933C024D
:1004A000089539D322982A982198299880E0DEDE91
:1004B0002098289810923D0210923C020895242F13
:1004C000880F880F880F462F672F805C19CFCF9336
:1004D000DF9300D0CDB7DEB7482F692F80E090E0E2
:1004E00049836A8307DF20E049816A818CE408DF61
:1004F0006EE170E080E090E061D481E090E00F90E8
:100500000F90DF91CF91F6CE2091320130913301DF
:1005100080913A0290913B022032310511F4807FA4
:1005200008952034310511F4807E08952038310576
:1005300011F4807C08952115314009F480780895E4
:10054000CF92DF92EF92FF920F931F93CF93DF939F
:100550006C01DADF8C01C0E0D0E0CC15DD0554F58C
:10056000D3DF7C010817190721F0C801B0DFCCDF09
:100570007C01FE01E65CFE4F60913A0270913B0205
:10058000408180E09CDF2296FE01E75CFE4F609197
:100590003A0270913B02408181E091DF20913A0262
:1005A00030913B022F5F3F4F30933B0220933A0242
:1005B0008701D3CFC8018BDF80E1DF91CF911F91FD
:1005C0000F91FF90EF90DF90CF900895462F880F06
:1005D000880F880F20E0672F805E92CE0F931F93C5
:1005E000CF93DF938C01C0E0D0E0C017D10704F5B2
:1005F00060913A0270913B0280E0E8DF682F8FE45F
:1006000092E0E5DD60913A0270913B0281E0DEDF2D
:10061000682F8FE492E0DBDD20913A0230913B02BB
:100620002F5F3F4F30933B0220933A022296DDCF5B
:1006300080E1DF91CF911F910F910895EF92FF928A
:100640000F931F93CF93DF937C0100913A02109197
:100650003B02000F111FE801CE01801B910B8E158C
:100660009F055CF42FEF4C2F6D2F80EA49DE682F39
:100670008FE492E0ACDD2196EFCF80E1DF91CF9166
:100680001F910F91FF90EF9008958FE492E0EFD5C6
:10069000892BD9F38FE492E023C608950F931F931B
:1006A000CF93DF938C01CAE3D1E0CE018A5391400E
:1006B000801791071CF4E9DF8993F7CFDF91CF9181
:1006C0001F910F910895EF92FF920F931F93CF9375
:1006D000DF93EC018B01CB01E1DF80E090E00ADEEB
:1006E0008AE3E82E81E0F82E0C0F1D1FC017D107FA
:1006F00071F0F70121917F014C2F6D2F80EC00DE0E
:100700006DE270E080E090E059D32196EFCF81E078
:1007100090E0F0DD80E1DF91CF911F910F91FF908C
:10072000EF9008950F931F93CF93DF938C01C091A7
:100730003A02D0913B0280913401909135018017AB
:10074000910718F0CC0FDD1F0BC080913E029091F5
:100750003F02019690933F0280933E0281E10FC0D9
:100760000132110540F060E270E0CE01ACDFA096EE
:1007700000521109F5CFB801CE01A5DF80E1DF916C
:10078000CF911F910F91089580DF803231F464E1A1
:100790008FE492E01CDD60E10AC080913E029091FE
:1007A0003F02019690933F0280933E0265E18FE401
:1007B00092E00DCDCF93C82F68DF803251F464E111
:1007C0008FE492E004DD6C2F8FE492E000DD60E1C5
:1007D0000AC080913E0290913F02019690933F02A1
:1007E00080933E0265E18FE492E0CF91F0CC8138B6
:1007F00059F020F4803861F482E00BC0823831F087
:10080000833931F483E505C081E003C082E101C092
:1008100080E0D0CF84E090E041DFEAE3F1E02381A3
:100820004281618180816CDDC5CFCF93DF93EC0184
:1008300035DF2BDF803241F464E18FE492E0C7DCE6
:10084000CE017EDE682F0AC080913E0290913F0269
:10085000019690933F0280933E0265E18FE492E01F
:10086000DF91CF91B4CCCF93DF930FDFC82FD0E0CF
:10087000DC2FCC270ADFC80FD11D07DF863421F417
:10088000CE01DF91CF91D1CF8534B9F4CE014ADFCB
:10089000C82FFBDE803231F464E18FE492E097DC14
:1008A0006C2F0CC080913E0290913F020196909374
:1008B0003F0280933E0265E101C061E18FE492E076
:1008C000DF91CF9184CC0F931F93CF93DF93DDDE25
:1008D000C82FDBDE082FD9DE182FD7DE803259F083
:1008E00080913E0290913F02019690933F02809347
:1008F0003E0265E115C0D0E0DC2FCC27C00FD11D32
:1009000064E18FE492E063DC163419F4CE0166DE14
:1009100006C0153419F4CE0191DE01C081E1682FC3
:100920008FE492E0DF91CF911F910F9150CCADDE1B
:10093000803259F080913E0290913F02019690934F
:100940003F0280933E0265E120C064E18FE492E0C3
:100950003EDC20E040E060E080E3D2DC682F8FE402
:1009600092E035DC20E041E060E080E3C9DC682F04
:100970008FE492E02CDC20E042E060E080E3C0DC29
:10098000682F8FE492E023DC60E18FE492E01FCCDB
:100990007CDE813509F477C0E0F4813409F460C06D
:1009A00050F4803309F440C0813309F442C08032EE
:1009B00009F07AC06FC0853409F454C0803509F459
:1009C00055C0823409F070C084E190E067DEB0DC8D
:1009D0004CC0813609F453C0F0F4863509F452C096
:1009E000803609F44BC0853509F05EC04EDE90E0DC
:1009F00090933B0280933A0248DE90E0982F88273C
:100A000020913A0230913B02820F931F90933B0258
:100A100080933A022AC08437A1F1853709F439C09E
:100A2000843609F041C01FCF10923F0210923E025F
:100A30001CC02BDE803271F564E18FE492E0C7DBED
:100A4000E0914F02F09150020280F381E02D47E0E7
:100A500050E069E071E08FE492E0099560E133C015
:100A600014DEC5CE85E090E019DE8ECE80913C028A
:100A700090913D02892BC9F7DADCF7CF06DE05DE5F
:100A8000F4CF21CFC7CE10923F0210923E0209DD73
:100A9000ECCF4DCF80913E0290913F020196909312
:100AA0003F0280933E020EC080913E0290913F0231
:100AB000019690933F0280933E02E7DD803211F46D
:100AC00062E101C065E18FE492E081CB80913C025C
:100AD00090913D02892B11F05A9A01C05A98809149
:100AE0003E0290913F02892B11F05B9A01C05B9806
:100AF0007CDB8FE492E0BBD3892B09F049CF0895CA
:100B0000289A209A8CB580618CBD8CB580648CBD90
:100B1000219A229A08958CB58F7B8CBD08951DBAB9
:100B2000109268001CBC10BE1FBA10927A0010927E
:100B30006E0010926F00109271001092720010926D
:100B4000C900ECEBF0E0108214B817B81AB81DB861
:100B500010BA108215B818B81BB81EB811BA08958B
:100B6000F894E1E6F0E020E82083108283E084BD81
:100B700085BDEEE6F0E080818160808381E0809336
:100B8000800092E090938100809390009093910078
:100B90009093C00094E09093C1008093C200809332
:100BA000C3001092C40086E880937A0020937B00F3
:100BB00010927E0010927D0040D178940895E93122
:100BC00050F4EE0FE451FA4F0994E93120F4EE0F9E
:100BD000E25EF94F09940895289A0895299A089594
:100BE0002A9A08952B9A08952F9A6AC0589A58C045
:100BF000599A08955A9A08955B9A0895469A66C03C
:100C0000479A6AC05E9A08955F9A6CC02C9A0895BC
:100C10002D9A4AC02E9A4EC08F9A08958E9A0895A2
:100C20008D9A08958C9A0895899A0895889A0895BE
:100C30005C9A08955D9A0895769A08952898089583
:100C4000299808952A9808952B9808952F9838C0C8
:100C5000589826C0599808955A9808955B98089511
:100C6000469834C0479838C05E9808955F983AC057
:100C70002C9808952D9818C02E981CC08F98089510
:100C80008E9808958D9808958C9808958998089560
:100C9000889808955C9808955D98089576980895C9
:100CA000E4B5EF7DE4BD0895E0918000EF77E09337
:100CB00080000895E0918000EF7DE093800008952A
:100CC000E0918000E77FE09380000895E09190003C
:100CD000EF77E09390000895E091C000EF77E09304
:100CE000C0000895E091C200E77FE093C20008953C
:100CF000F89484B7877F84BF80916000806180937F
:100D000060001092600080E29EE40197F1F781E0BC
:100D10008093E00080E28093D80080E69AEE01970D
:100D2000F1F7FDDE0C94003FFFCFF894F8DE80E68B
:100D30009AEE0197F1F70C940000FFCF8F938FB7D5
:100D40008F93809143028D5F8D37D0F4809343025F
:100D5000809144028F5F80934402D8F080914502D5
:100D60008F4F80934502A8F0809146028F4F809369
:100D7000460278F0809147028F4F8093470209C066
:100D80008D5780934302809144028E5F809344028A
:100D900028F7809148028C5F8093480258F0809138
:100DA00049028F4F8093490228F080914A028F4F69
:100DB00080934A028F918FBF8F911895CF92DF92C7
:100DC000EF92FF926B017C0119D09B01C114D104F9
:100DD000E104F10471F012D0621B730B683E7340A2
:100DE000A8F381E0C81AD108E108F10828513C4F66
:100DF000EDCFFF90EF90DF90CF9008950FB6F8946D
:100E000066B515B2709148028091490290914A02EC
:100E10000FBE10FE05C06F3F19F07C5F8F4F9F4FD4
:100E200011240024660F001C660F001C7029089511
:100E30008091E80080FFFCCF08958091D80087FF63
:100E400002C085FF1BC081E08093D70080EA8093B9
:100E5000D80082E189BD09B400FEFDCF80E980930E
:100E6000D8001092E00010925B0210925A02109289
:100E700059021092E1008DE08093E20008951F92E4
:100E80000F920FB60F9211242F933F934F935F93BE
:100E90006F937F938F939F93AF93BF93EF93FF9342
:100EA0009091E1001092E10093FF11C01092E900CF
:100EB00081E08093EB001092EC0082E28093ED00E1
:100EC00088E08093F00010925B021092590292FF2A
:100ED0001DC080915B028823C9F080914E02882357
:100EE00059F0815080934E02811106C084E08093B6
:100EF000E9008AE38093E80080914D02882331F075
:100F0000815080934D02811101C0F2DE90FF0CC030
:100F100080E18093E20010925B0281E080935A02AC
:100F200080EA8093D80019BC80915A02882379F016
:100F300094FF0DC082E189BD09B400FEFDCF80E9B8
:100F40008093D8008DE08093E20010925A02FF91C6
:100F5000EF91BF91AF919F918F917F916F915F9131
:100F60004F913F912F910F900FBE0F901F901895AA
:100F70001F920F920FB60F921124EF92FF920F93D0
:100F80001F932F933F934F935F936F937F938F9311
:100F90009F93AF93BF93CF93EF93FF931092E9008A
:100FA0008091E80083FF30C1C091F1008091F10091
:100FB000E090F100F090F1000091F1001091F1004B
:100FC0002091F1003091F10092EF9093E80086308B
:100FD00009F03FC086E0ECEAF0E0459155914E15EE
:100FE0005F0511F0359615C0459155914017510791
:100FF00011F033960EC04591559184912F3F3105E4
:1010000019F010F02FEF30E0281708F4822F3EEF90
:1010100008C0815011F7F8C0891B3093E80088237D
:10102000A9F09091E800292F2570D9F392FDEFC027
:10103000982F813208F090E2292F222369F3FA01D8
:1010400045914093F100AF012150F7CF903249F321
:10105000DEC0853049F48EEF8093E800E9DE8E2D06
:1010600080688093E300D3C0893001F5C111CCC002
:10107000E0925B021092590210924E028EEF809322
:10108000E80081E0EFE6F1E08093E900959190932C
:10109000EB00992331F095919093EC00959190930A
:1010A000ED008F5F853081F78EE1A9C0883049F46B
:1010B000C03809F0A9C0BCDE80915B028093F100CA
:1010C0007DC0813279F4C13A09F09EC0B1DEE2E020
:1010D000F1E087E08E0F90819093F10031968E13AE
:1010E000FACF6CC0803209F047C0C13209F08CC021
:1010F0008091E80082FFFCCFE2E0F1E087E08E0F14
:101100009091F100908331968E13FACF8BEF8093FC
:10111000E8008EEF8093E8003091020140910301D6
:10112000809104012091050190E0A0E0B0E0DC0195
:1011300099278827942B832BB22B86389105A105FC
:10114000B10521F48FE080934D0261C0863991058D
:10115000A105B10509F05BC084E08093E9009FEF31
:101160008091EE00837039F09093E8008091E80060
:1011700082FDFCCFF5CFD9DD823231F4C13209F0E6
:1011800043C0E092590204C0833221F4C132E1F538
:101190004FDE14C0811116C04BDEC23851F40093EB
:1011A000E9008091EB0085FB882780F91092E90027
:1011B00001C080E08093F1001092F1008EEF8093E7
:1011C000E80025C0982F9D7F9130F1F4C230E1F402
:1011D000EF28D1F40F779FEF900F9630A8F49EEF91
:1011E0009093E8000093E900833071F089E18093E7
:1011F000EB0081E090E001C0880F0A95EAF7809348
:10120000EA001092EA0003C081E28093EB00FF91B4
:10121000EF91CF91BF91AF919F918F917F916F91FE
:101220005F914F913F912F911F910F91FF90EF9000
:101230000F900FBE0F901F90189592DC41D846DC9E
:10124000FECFCF93DF931F92CDB7DEB76983DC016A
:10125000ED91FC910280F381E02D41E050E0BE0170
:101260006F5F7F4F09950F90DF91CF910895FC013B
:101270008FB7F89490915B02911102C090E010C07A
:1012800093E09093E9009091F200911109C02091B0
:10129000E80022FFF3CF25FDF1CF2BE62093E800F5
:1012A0008FBF2085318537FD03C09F3F09F09F5FC9
:1012B000892F90E00895CF93DF93EC01888599857D
:1012C00097FF09C0E881F9810680F781E02DCE0102
:1012D00009959987888788859985DF91CF910895A9
:1012E000FC012085318537FD07C04FEF5FEF518747
:1012F0004087C901992708959FB7F89480915B02B0
:10130000882369F083E08093E9002BE68091E80070
:1013100085FD09C082FF03C02093E800F7CF9FBF7F
:101320008FEF9FEF08958091F1002091E80025FD57
:1013300003C02BE62093E8009FBF90E00895DF9262
:10134000EF92FF920F931F93CF93DF938C01EB01EA
:1013500080915B02882371F07FB7F89484E08093DA
:10136000E90080914C02882369F08091E80085FDB6
:1013700007C07FBF81E0F801828320E030E0D1C068
:1013800010924C0220E030E064E080E4F82EA1EFFF
:10139000B0E09AE3E92EE3E0DE2E4115510509F4B1
:1013A000BFC08091E400815F9091E80095FD16C078
:1013B0007FBF9091E400981304C081E080934C02B9
:1013C00005C090915B02911104C081E0F801828315
:1013D000A8C07FB7F8946093E900E6CF8091F2004F
:1013E0009F2D981BE92FF0E04E175F0708F4942F0C
:1013F000E92FF0E04E1B5F0B2E0F3F1FE0E4E91BCF
:10140000E03428F4EE0FFF27E85FF54F099480C021
:1014100099919C9399919C9399919C9399919C9368
:1014200099919C9399919C9399919C9399919C9358
:1014300099919C9399919C9399919C9399919C9348
:1014400099919C9399919C9399919C9399919C9338
:1014500099919C9399919C9399919C9399919C9328
:1014600099919C9399919C9399919C9399919C9318
:1014700099919C9399919C9399919C9399919C9308
:1014800099919C9399919C9399919C9399919C93F8
:1014900099919C9399919C9399919C9399919C93E8
:1014A00099919C9399919C9399919C9399919C93D8
:1014B00099919C9399919C9399919C9399919C93C8
:1014C00099919C9399919C9399919C9399919C93B8
:1014D00099919C9399919C9399919C9399919C93A8
:1014E00099919C9399919C9399919C9399919C9398
:1014F00099919C9399919C9399919C9399919C9388
:1015000099919C9399919C9399919C9399919C9377
:101510008091E80085FFE092E800D0924E023DCF36
:101520007FBFC901DF91CF911F910F91FF90EF9085
:10153000DF9008952FEF3FEFFC01318720877DDC9E
:101540000FB6F8948091440290914502A091460212
:10155000B09147020FBE9C0180915B02882329F065
:1015600068EC70E080E090E029CC80915A028823FA
:1015700001F10FB6F8948091440290914502A09138
:101580004602B09147020FBE40915A02442389F0AF
:101590000FB6F89440914402509145026091460282
:1015A000709147020FBE481B590B4B3F510560F32A
:1015B00011C00FB6F8948091440290914502A09119
:1015C0004602B09147020FBE821B930B853C9940A7
:1015D00008F4C2CF08959FB7F89480915B028823E6
:1015E00021F080914E02811102C09FBF089584E0D6
:1015F0008093E9008AE38093E80010924E02F5CFD1
:10160000EACFEFE4F2E08AE0DF011D928A95E9F784
:1016100088EE93E0A0E0B0E083839483A583B68353
:1016200085E191E0918380830895EE0FFF1F05907F
:0A163000F491E02D0994F894FFCF27
:10163A00088000E10000000008415652204953503A
:10164A00000000000021099F09370970095B0900A1
:02165A000B0083
:00000001FF