2022-01-09 18:21:54 +00:00
/*
Copyright 2019 @ foostan
Copyright 2020 Drashna Jaelre < @ drashna >
Copyright 2021 Arda Kilicdagi < GH : @ ardakilic , TW : @ ardadev >
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/>.
*/
# include QMK_KEYBOARD_H
// Layers
enum {
_QWERTY ,
_LOWER ,
_RAISE ,
_SPACE ,
_NUMPAD ,
_SODA ,
_ADJUST
} ;
2022-10-10 19:06:26 +00:00
//KC_NUBS (\|) is equivalent to ["é] key in Turkish keyboards.
2022-01-09 18:21:54 +00:00
//KC_GRV (~ `) is equivalent to [<>|] key in Turkish keyboards.
// KC_SCLN is Turkish s [şŞ] key
// KC_QUOT is Turkish i [iİ] key
// KC_COMM is Turkish o [öÖ] key
// KC_DOT is Turkish c [çÇ] key
// Custom shortcuts specific to Turkish layout
# define CURLY_OPEN RALT(KC_7)
# define CURLY_CLOSE RALT(KC_0)
# define SQUARE_OPEN RALT(KC_8)
# define SQUARE_CLOSE RALT(KC_9)
# define DOLLAR_SIGN RALT(KC_4)
# define BACKSLASH RALT(KC_MINS)
# define VERTICAL_PIPE RALT(KC_EQL)
# define BACKTICK RALT(KC_BSLS)
# define TILDE RALT(KC_RBRC)
# define NUMBER_SIGN RALT(KC_3) //hashtag sign
2022-10-11 13:21:47 +00:00
# define LOCKSCREEN LCTL(LSFT(KC_PWR)) // Screen Lock shortcut for OSX
2022-01-09 18:21:54 +00:00
/*
// Unicode Turkish characters, in case it's needed
enum {
TR_C , // ç
TR_C_L , // Ç
TR_I , // ı
TR_I_L , // İ
TR_G , // ğ
TR_G_L , // Ğ
TR_S , // ş
TR_S_L , // Ş
TR_U , // ü
TR_U_L , // Ü
TR_O , // ö
TR_O_L , // Ö
} ;
// clang-format off
2023-01-01 00:54:12 +00:00
const uint32_t unicode_map [ ] PROGMEM = {
2022-01-09 18:21:54 +00:00
[ TR_C ] = 0x00c7 ,
[ TR_C_L ] = 0x00e7 ,
[ TR_I ] = 0x0130 ,
[ TR_I_L ] = 0x0131 ,
[ TR_G ] = 0x011e ,
[ TR_G_L ] = 0x011f ,
[ TR_S ] = 0x015e ,
[ TR_S_L ] = 0x015f ,
[ TR_U ] = 0x00dc ,
[ TR_U_L ] = 0x00fc ,
[ TR_O ] = 0x00d6 ,
[ TR_O_L ] = 0x00f6 ,
} ;
// clang-format on
*/
const uint16_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
/*
* BASE LAYER
2022-12-30 00:48:05 +00:00
[ _TPL ] = LAYOUT_wrapper (
2022-01-09 18:21:54 +00:00
//,-----------------------------------------------------. ,----------------------------------------------------.
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| NpdESC | A | S | D | F | G | | H | J | K | L | Ş | İ |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| SftCaps | Z | X | C | V | B | | N | M | Ö | Ç | . | CtlEnt |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
, - - - - - - - - - - - - - - - - - - - - - - - , , - - - - - - - - - - - - - - - - - - - - - - - .
| OS | . | Lwr | , | Space * | | Sda | Ent | Raise | " | LAlt|.|
/ | - - - - - - - + - - - - - - - + - - - - - - - ' + - - - - - - - + - - - - - - - + - - - - - - - | \
) ,
*/
[ _QWERTY ] = LAYOUT_split_3x6_3 (
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC ,
LT ( _NUMPAD , KC_ESC ) , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT ,
LSFT_T ( KC_CAPS ) , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , LCTL_T ( KC_ENT ) , /*KC_ENT*/
2022-10-10 19:06:26 +00:00
LGUI_T ( KC_SLSH ) , LT ( _LOWER , KC_BSLS ) , LT ( _SPACE , KC_SPC ) , LT ( _SODA , KC_ENT ) , LT ( _RAISE , KC_NUBS ) , LALT_T ( KC_SLSH )
2022-01-09 18:21:54 +00:00
) ,
/*
* LOWER LAYER
2022-12-30 00:48:05 +00:00
[ _TPL ] = LAYOUT_wrapper (
2022-01-09 18:21:54 +00:00
//,-----------------------------------------------------. ,----------------------------------------------------.
| > | ! | ' | ^ | + | % | | & | / | ( | ) | = | Bksp |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| F1 | F2 | F3 | F4 | F5 | F6 | | " $ " | ? | _ | Ğ | Ü | - |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| F7 | F8 | F9 | F10 | F11 | F12 | | " [ " | " ] " | " { " | " } " | < | " > " |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
, - - - - - - - - - - - - - - - - - - - - - - - , , - - - - - - - - - - - - - - - - - - - - - - - .
| | | | | | ADJUST | |
/ | - - - - - - - + - - - - - - - + - - - - - - - ' + - - - - - - - + - - - - - - - + - - - - - - - | \
) ,
*/
[ _LOWER ] = LAYOUT_split_3x6_3 (
KC_TILD , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , KC_BSPC ,
KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , DOLLAR_SIGN , KC_UNDS , KC_PLUS , KC_LBRC , KC_RBRC , KC_EQL ,
KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , SQUARE_OPEN , SQUARE_CLOSE , CURLY_OPEN , CURLY_CLOSE , KC_GRV , LSFT ( KC_GRV ) ,
_______ , _______ , _______ , _______ , MO ( _ADJUST ) , _______
) ,
/*
* RAISE LAYER
2022-12-30 00:48:05 +00:00
[ _TPL ] = LAYOUT_wrapper (
2022-01-09 18:21:54 +00:00
//,-----------------------------------------------------. ,----------------------------------------------------.
| Tab | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| F1 | F2 | F3 | F4 | F5 | F6 | | | * | - | " \" | " | " | , |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| F7 | F8 | F9 | F10 | F11 | F12 | | ' | # | " | " ~ " | " ` " | <>| |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
, - - - - - - - - - - - - - - - - - - - - - - - , , - - - - - - - - - - - - - - - - - - - - - - - .
| | | | | | | |
/ | - - - - - - - + - - - - - - - + - - - - - - - ' + - - - - - - - + - - - - - - - + - - - - - - - | \
) ,
*/
[ _RAISE ] = LAYOUT_split_3x6_3 (
KC_TAB , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , _______ , KC_MINS , KC_EQL , BACKSLASH , VERTICAL_PIPE , KC_BSLS ,
KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_AT , NUMBER_SIGN , KC_NUBS , TILDE , BACKTICK , KC_GRV ,
_______ , _______ , _______ , _______ , _______ , _______
) ,
/*
* SPACE LAYER
2022-12-30 00:48:05 +00:00
[ _TPL ] = LAYOUT_wrapper (
2022-01-09 18:21:54 +00:00
//,-----------------------------------------------------. ,----------------------------------------------------.
| | CMD + 1 | CMD + 2 | CMD + 3 | CMD + 4 | CMD + 5 | | CMD + 6 | CMD + 7 | CMD + 8 | CMD + 9 | CMD + 0 | LCKOSX |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | Brght ▼ | Brght ▲ | | | | | Left | Down | Up | Right | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | | | | | | | | Prev | Next | Vol - | Vol + | Play |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
, - - - - - - - - - - - - - - - - - - - - - - - , , - - - - - - - - - - - - - - - - - - - - - - - .
| | | | | | | |
/ | - - - - - - - + - - - - - - - + - - - - - - - ' + - - - - - - - + - - - - - - - + - - - - - - - | \
) ,
*/
[ _SPACE ] = LAYOUT_split_3x6_3 (
_______ , LGUI ( KC_1 ) , LGUI ( KC_2 ) , LGUI ( KC_3 ) , LGUI ( KC_4 ) , LGUI ( KC_5 ) , LGUI ( KC_6 ) , LGUI ( KC_7 ) , LGUI ( KC_8 ) , LGUI ( KC_9 ) , LGUI ( KC_0 ) , LOCKSCREEN ,
_______ , KC_BRMD , KC_BRMU , _______ , _______ , _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ , KC_MPRV , KC_MNXT , KC_VOLD , KC_VOLU , KC_MPLY ,
_______ , _______ , _______ , _______ , _______ , _______
) ,
/*
* NUMPAD LAYER
* KC_PDOT is comma on the Turkish layout ¯ \ _ ( ツ ) _ / ¯
2022-12-30 00:48:05 +00:00
[ _TPL ] = LAYOUT_wrapper (
2022-01-09 18:21:54 +00:00
//,-----------------------------------------------------. ,----------------------------------------------------.
| | | | | | | | = | Num7 | Num8 | Num9 | - | Bksp |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | | | | | | | . | Num4 | Num5 | Num6 | + | * |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | | | | | | | , | Num1 | Num2 | Num3 | . | / |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
, - - - - - - - - - - - - - - - - - - - - - - - , , - - - - - - - - - - - - - - - - - - - - - - - .
| | | | | Ent | Num0 | Num0 |
/ | - - - - - - - + - - - - - - - + - - - - - - - ' + - - - - - - - + - - - - - - - + - - - - - - - | \
) ,
*/
[ _NUMPAD ] = LAYOUT_split_3x6_3 (
_______ , _______ , _______ , _______ , _______ , _______ , KC_PEQL , KC_P7 , KC_P8 , KC_P9 , KC_PMNS , KC_BSPC ,
_______ , _______ , _______ , _______ , _______ , _______ , KC_SLSH , KC_P4 , KC_P5 , KC_P6 , KC_PPLS , KC_PAST ,
_______ , _______ , _______ , _______ , _______ , _______ , KC_PDOT , KC_P1 , KC_P2 , KC_P3 , KC_SLSH , KC_PSLS ,
_______ , _______ , _______ , KC_PENT , KC_P0 , KC_P0
) ,
/*
* SODA LAYER
* KC_PDOT is comma on the Turkish layout ¯ \ _ ( ツ ) _ / ¯
2022-12-30 00:48:05 +00:00
[ _TPL ] = LAYOUT_wrapper (
2022-01-09 18:21:54 +00:00
//,-----------------------------------------------------. ,----------------------------------------------------.
| | | Up | | | | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | Left | Down | Right | | | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| | | | | | | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
, - - - - - - - - - - - - - - - - - - - - - - - , , - - - - - - - - - - - - - - - - - - - - - - - .
| | | | | | | |
/ | - - - - - - - + - - - - - - - + - - - - - - - ' + - - - - - - - + - - - - - - - + - - - - - - - | \
) ,
*/
[ _SODA ] = LAYOUT_split_3x6_3 (
_______ , _______ , KC_UP , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , KC_LEFT , KC_DOWN , KC_RGHT , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______
) ,
/*
* ADJUST LAYER
2022-12-30 00:48:05 +00:00
[ _TPL ] = LAYOUT_wrapper (
2022-01-09 18:21:54 +00:00
//,-----------------------------------------------------. ,----------------------------------------------------.
2022-08-21 22:55:30 +00:00
| QK_BOOT | EEPRST | | | | | | | | | | | |
2022-01-09 18:21:54 +00:00
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| RGBTog | HUE ▲ | SAT ▲ | BRGHT ▲ | | | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
| RGBMOD | HUE ▼ | SAt ▼ | BRGHT ▼ | | | | | | | | | |
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+-------|
, - - - - - - - - - - - - - - - - - - - - - - - , , - - - - - - - - - - - - - - - - - - - - - - - .
| OS | | Space | | Ent | | ALT |
/ | - - - - - - - + - - - - - - - + - - - - - - - ' + - - - - - - - + - - - - - - - + - - - - - - - | \
) ,
*/
[ _ADJUST ] = LAYOUT_split_3x6_3 (
2022-10-20 11:20:07 +00:00
QK_BOOT , EE_CLR , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
2022-01-09 18:21:54 +00:00
RGB_TOG , RGB_HUI , RGB_SAI , RGB_VAI , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
RGB_MOD , RGB_HUD , RGB_SAD , RGB_VAD , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,
KC_LGUI , _______ , KC_SPC , KC_ENT , _______ , KC_RALT
)
} ;
2022-02-09 19:47:53 +00:00
# ifdef OLED_ENABLE
2022-01-09 18:21:54 +00:00
// #include <stdio.h>
// bongo cat
// Taken from
// https://github.com/nwii/oledbongocat
// char wpm_str[10]; // sprintf changed with more optimized code
// WPM-responsive animation stuff here
# define IDLE_FRAMES 5
# define IDLE_SPEED 20 // below this wpm value your animation will idle
// #define PREP_FRAMES 1 // uncomment if >1
# define TAP_FRAMES 2
# define TAP_SPEED 40 // above this wpm value typing animation to trigger
# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing
# define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024
uint32_t anim_timer = 0 ;
uint32_t anim_sleep = 0 ;
uint8_t current_idle_frame = 0 ;
// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1
uint8_t current_tap_frame = 0 ;
// Code containing pixel art, contains:
// 5 idle frames, 1 prep frame, and 2 tap frames
// To make your own pixel art:
// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw )
// follow this guide up to and including "CONVERT YOUR IMAGE" https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display-
// replace numbers in brackets with your own
// if you start getting errors when compiling make sure you didn't accedentally delete a bracket
static void render_anim ( void ) {
static const char PROGMEM idle [ IDLE_FRAMES ] [ ANIM_SIZE ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x18 , 0x04 , 0x02 , 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3f , 0xc1 , 0x01 , 0x01 , 0x02 , 0x02 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x40 , 0x80 , 0x80 , 0x40 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x04 , 0x04 , 0x08 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xe0 , 0x18 , 0x06 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x83 , 0x83 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x21 , 0x21 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x08 , 0x30 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x01 , 0x86 , 0x98 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x41 , 0x42 , 0x24 , 0x18 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3f , 0xc1 , 0x01 , 0x01 , 0x02 , 0x02 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x60 , 0x60 , 0x00 , 0x00 , 0x01 , 0x02 , 0x04 , 0x04 , 0x08 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xc0 , 0x30 , 0x0c , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x86 , 0x86 , 0x40 , 0x40 , 0x40 , 0x40 , 0x21 , 0x22 , 0x22 , 0x20 , 0x11 , 0x11 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x08 , 0x30 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x01 , 0x86 , 0x98 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x41 , 0x42 , 0x24 , 0x18 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7e , 0x82 , 0x02 , 0x02 , 0x04 , 0x04 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x02 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x60 , 0x60 , 0x00 , 0x01 , 0x01 , 0x02 , 0x04 , 0x04 , 0x08 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xc0 , 0x30 , 0x0c , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x86 , 0x86 , 0x40 , 0x40 , 0x40 , 0x40 , 0x21 , 0x22 , 0x22 , 0x20 , 0x11 , 0x11 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x08 , 0x30 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x01 , 0x86 , 0x98 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x41 , 0x42 , 0x24 , 0x18 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x1c , 0x34 , 0xc4 , 0x04 , 0x04 , 0x04 , 0x08 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x02 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x40 , 0x80 , 0x80 , 0x40 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x01 , 0x01 , 0x02 , 0x02 , 0x04 , 0x04 , 0x04 , 0x08 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xe0 , 0x18 , 0x06 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x83 , 0x83 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x21 , 0x21 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x08 , 0x30 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x01 , 0x86 , 0x98 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x41 , 0x42 , 0x24 , 0x18 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x18 , 0x04 , 0x02 , 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x0d , 0x31 , 0xc1 , 0x01 , 0x01 , 0x01 , 0x02 , 0x02 , 0x02 , 0x04 , 0x04 , 0x02 , 0x02 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x40 , 0x80 , 0x80 , 0x40 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x04 , 0x04 , 0x08 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xe0 , 0x18 , 0x06 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x83 , 0x83 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x21 , 0x21 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x08 , 0x30 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x01 , 0x86 , 0x98 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x41 , 0x42 , 0x24 , 0x18 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } } ;
static const char PROGMEM prep [ ] [ ANIM_SIZE ] = { { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x20 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3f , 0xc1 , 0x01 , 0x01 , 0x02 , 0x02 , 0x04 , 0x84 , 0x44 , 0x44 , 0x42 , 0x82 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x40 , 0x80 , 0x80 , 0x40 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x64 , 0x18 , 0x04 , 0x12 , 0xc2 , 0xca , 0x24 , 0x88 , 0xf0 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xe0 , 0x18 , 0x06 , 0x01 , 0x00 , 0x00 , 0x0c , 0x03 , 0x00 , 0x02 , 0x18 , 0x19 , 0x00 , 0x05 , 0xfe , 0x80 , 0x83 , 0x83 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x21 , 0x21 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } } ;
static const char PROGMEM tap [ TAP_FRAMES ] [ ANIM_SIZE ] = {
{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x20 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3f , 0xc1 , 0x01 , 0x01 , 0x02 , 0x02 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x40 , 0x80 , 0x80 , 0x40 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x64 , 0x18 , 0x04 , 0x12 , 0xc2 , 0xca , 0x24 , 0x88 , 0xf0 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xe0 , 0x18 , 0x06 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x83 , 0x83 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x21 , 0x21 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x41 , 0x42 , 0x24 , 0x98 , 0xc0 , 0x88 , 0x88 , 0x8c , 0x9c , 0x1c , 0x1e , 0x0e , 0x06 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
{ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x20 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x04 , 0x08 , 0x10 , 0x10 , 0x20 , 0x20 , 0x40 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x3f , 0xc1 , 0x01 , 0x01 , 0x02 , 0x02 , 0x04 , 0x84 , 0x44 , 0x44 , 0x42 , 0x82 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x00 , 0x00 , 0x40 , 0x80 , 0x80 , 0x40 , 0x00 , 0x00 , 0x30 , 0x30 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x02 , 0x04 , 0x04 , 0x08 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xe0 , 0x18 , 0x06 , 0x01 , 0x00 , 0x00 , 0x0c , 0x03 , 0x00 , 0x02 , 0x18 , 0x19 , 0x00 , 0x05 , 0xfe , 0x80 , 0x83 , 0x83 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x21 , 0x21 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x08 , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x04 , 0x08 , 0x30 , 0x40 , 0x80 , 0x80 , 0x00 , 0x00 , 0x01 , 0x86 , 0x98 , 0x60 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x80 , 0x80 , 0x80 , 0x80 , 0x40 , 0x40 , 0x40 , 0x40 , 0x20 , 0x20 , 0x20 , 0x20 , 0x10 , 0x10 , 0x10 , 0x10 , 0x08 , 0x0f , 0x08 , 0x08 , 0x04 , 0x04 , 0x04 , 0x04 , 0x02 , 0x02 , 0x02 , 0x02 , 0x01 , 0x01 , 0x01 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x0f , 0x0f , 0x07 , 0x03 , 0x03 , 0x61 , 0xf0 , 0xf8 , 0xfc , 0x60 , 0x01 , 0x01 , 0x01 , 0x3c , 0x78 , 0xf8 , 0xf0 , 0x70 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ,
} ;
// assumes 1 frame prep stage
void animation_phase ( void ) {
if ( get_current_wpm ( ) < = IDLE_SPEED ) {
current_idle_frame = ( current_idle_frame + 1 ) % IDLE_FRAMES ;
oled_write_raw_P ( idle [ abs ( ( IDLE_FRAMES - 1 ) - current_idle_frame ) ] , ANIM_SIZE ) ;
}
if ( get_current_wpm ( ) > IDLE_SPEED & & get_current_wpm ( ) < TAP_SPEED ) {
// oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1
oled_write_raw_P ( prep [ 0 ] , ANIM_SIZE ) ; // remove if IDLE_FRAMES >1
}
if ( get_current_wpm ( ) > = TAP_SPEED ) {
current_tap_frame = ( current_tap_frame + 1 ) % TAP_FRAMES ;
oled_write_raw_P ( tap [ abs ( ( TAP_FRAMES - 1 ) - current_tap_frame ) ] , ANIM_SIZE ) ;
}
}
if ( get_current_wpm ( ) ! = 000 ) {
oled_on ( ) ; // not essential but turns on animation OLED with any alpha keypress
if ( timer_elapsed32 ( anim_timer ) > ANIM_FRAME_DURATION ) {
anim_timer = timer_read32 ( ) ;
animation_phase ( ) ;
}
anim_sleep = timer_read32 ( ) ;
} else {
if ( timer_elapsed32 ( anim_sleep ) > OLED_TIMEOUT ) {
oled_off ( ) ;
} else {
if ( timer_elapsed32 ( anim_timer ) > ANIM_FRAME_DURATION ) {
anim_timer = timer_read32 ( ) ;
animation_phase ( ) ;
}
}
}
}
// bongop cat
oled_rotation_t oled_init_user ( oled_rotation_t rotation ) {
if ( ! is_keyboard_master ( ) ) {
return OLED_ROTATION_180 ; // flips the display 180 degrees if offhand
}
return rotation ;
}
void oled_render_layer_state ( void ) {
oled_write_P ( PSTR ( " Layer: " ) , false ) ;
switch ( get_highest_layer ( layer_state ) ) {
case _QWERTY :
oled_write_ln_P ( PSTR ( " Default " ) , false ) ;
break ;
case _LOWER :
oled_write_ln_P ( PSTR ( " Lower " ) , false ) ;
break ;
case _RAISE :
oled_write_ln_P ( PSTR ( " Raise " ) , false ) ;
break ;
case _SPACE :
oled_write_ln_P ( PSTR ( " Space " ) , false ) ;
break ;
case _NUMPAD :
oled_write_ln_P ( PSTR ( " Numpad " ) , false ) ;
break ;
case _SODA :
oled_write_ln_P ( PSTR ( " Soda " ) , false ) ;
break ;
case _ADJUST :
// case _ADJUST|_LOWER:
// case _ADJUST|_RAISE:
// case _ADJUST|_LOWER|_RAISE:
// case _ADJUST|_LOWER|_RAISE|_SPACE:
// case _ADJUST|_LOWER|_RAISE|_SPACE|_NUMPAD|_SODA:
oled_write_ln_P ( PSTR ( " Adjust " ) , false ) ;
break ;
default :
oled_write_ln_P ( PSTR ( " ????? " ) , false ) ;
}
}
char keylog_str [ 24 ] = { } ;
const char code_to_name [ 60 ] = {
' ' , ' ' , ' ' , ' ' , ' a ' , ' b ' , ' c ' , ' d ' , ' e ' , ' f ' ,
' g ' , ' h ' , ' i ' , ' j ' , ' k ' , ' l ' , ' m ' , ' n ' , ' o ' , ' p ' ,
' q ' , ' r ' , ' s ' , ' t ' , ' u ' , ' v ' , ' w ' , ' x ' , ' y ' , ' z ' ,
' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , ' 7 ' , ' 8 ' , ' 9 ' , ' 0 ' ,
' R ' , ' E ' , ' B ' , ' T ' , ' _ ' , ' - ' , ' = ' , ' [ ' , ' ] ' , ' \\ ' ,
' # ' , ' ; ' , ' \' ' , ' ` ' , ' , ' , ' . ' , ' / ' , ' ' , ' ' , ' ' } ;
void set_keylog ( uint16_t keycode , keyrecord_t * record ) {
char name = ' ' ;
if ( ( keycode > = QK_MOD_TAP & & keycode < = QK_MOD_TAP_MAX ) | |
( keycode > = QK_LAYER_TAP & & keycode < = QK_LAYER_TAP_MAX ) ) { keycode = keycode & 0xFF ; }
if ( keycode < 60 ) {
name = code_to_name [ keycode ] ;
}
// update keylog
snprintf ( keylog_str , sizeof ( keylog_str ) , " %dx%d, k%2d : %c " ,
record - > event . key . row , record - > event . key . col ,
keycode , name ) ;
}
void oled_render_keylog ( void ) {
oled_write ( keylog_str , false ) ;
}
void render_bootmagic_status ( bool status ) {
/* Show Ctrl-Gui Swap options */
static const char PROGMEM logo [ ] [ 2 ] [ 3 ] = {
{ { 0x97 , 0x98 , 0 } , { 0xb7 , 0xb8 , 0 } } ,
{ { 0x95 , 0x96 , 0 } , { 0xb5 , 0xb6 , 0 } } ,
} ;
if ( status ) {
oled_write_ln_P ( logo [ 0 ] [ 0 ] , false ) ;
oled_write_ln_P ( logo [ 0 ] [ 1 ] , false ) ;
} else {
oled_write_ln_P ( logo [ 1 ] [ 0 ] , false ) ;
oled_write_ln_P ( logo [ 1 ] [ 1 ] , false ) ;
}
}
// void oled_render_logo(void) {
// static const char PROGMEM crkbd_logo[] = {
// 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
// 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
// 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
// 0};
// oled_write_P(crkbd_logo, false);
// }
bool oled_task_user ( void ) {
if ( is_keyboard_master ( ) ) {
oled_render_layer_state ( ) ;
oled_render_keylog ( ) ;
} else {
// bongo cat
render_anim ( ) ; // renders pixelart
oled_set_cursor ( 0 , 0 ) ; // sets cursor to (row, column) using charactar spacing (5 rows on 128x32 screen, anything more will overflow back to the top)
// sprintf(wpm_str, "WPM:%03d", get_current_wpm()); // edit the string to change wwhat shows up, edit %03d to change how many digits show up
// oled_write(wpm_str, false); // writes wpm on top left corner of string
// This way it's more size efficient than calling sprintf
oled_write_P ( PSTR ( " WPM: " ) , false ) ;
oled_write ( get_u8_str ( get_current_wpm ( ) , ' ' ) , false ) ;
// This way it's more size efficient than calling sprintf
led_t led_state = host_keyboard_led_state ( ) ; // caps lock stuff, prints CAPS on new line if caps led is on
oled_set_cursor ( 0 , 1 ) ;
oled_write_P ( led_state . caps_lock ? PSTR ( " CAPS " ) : PSTR ( " " ) , false ) ;
// bongo cat
//oled_render_logo();
}
return false ;
}
bool process_record_user ( uint16_t keycode , keyrecord_t * record ) {
if ( record - > event . pressed ) {
set_keylog ( keycode , record ) ;
}
return true ;
}
# endif // OLED_DRIVER_ENABLE