Compare commits

...
10 Commits
Author SHA1 Message Date
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
18 changed files with 755 additions and 12 deletions

No files matched your search

+1
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
+2 -2
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)
@@ -60,4 +60,4 @@ Here you'll be able to see exactly what you've committed - if it all looks good,
![Create Pull Request](http://i.imgur.com/Ojydlaj.jpg) ![Create Pull Request](http://i.imgur.com/Ojydlaj.jpg)
After submitting, we may talk to you about your changes, ask that you make changes, and eventually accept it! Thanks for contributing to QMK :) After submitting, we may talk to you about your changes, ask that you make changes, and eventually accept it! Thanks for contributing to QMK :)
+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"
+2 -2
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
+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