summaryrefslogtreecommitdiffstats
path: root/keyboards/planck/keymaps/synth_wavetable
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2021-02-28 07:22:21 +1100
committerNick Brassel <nick@tzarc.org>2021-02-28 07:22:21 +1100
commit1a5f6b54aff179732e3f4f4eb79e47454f0a1eb5 (patch)
treeebf645f55cb0442899c894765b1af4344fb734db /keyboards/planck/keymaps/synth_wavetable
parent804d5c1c5d59d9a12c1d793289ccbd59cb650ec2 (diff)
parent624359b725c9bfe8176cf72cdc2c8bbb7513949f (diff)
2021 February 27 Breaking Changes Update (#12040)
Diffstat (limited to 'keyboards/planck/keymaps/synth_wavetable')
-rw-r--r--keyboards/planck/keymaps/synth_wavetable/config.h56
-rw-r--r--keyboards/planck/keymaps/synth_wavetable/keymap.c320
-rw-r--r--keyboards/planck/keymaps/synth_wavetable/rules.mk2
-rw-r--r--keyboards/planck/keymaps/synth_wavetable/wavetable.h2197
4 files changed, 2575 insertions, 0 deletions
diff --git a/keyboards/planck/keymaps/synth_wavetable/config.h b/keyboards/planck/keymaps/synth_wavetable/config.h
new file mode 100644
index 0000000000..930b26b000
--- /dev/null
+++ b/keyboards/planck/keymaps/synth_wavetable/config.h
@@ -0,0 +1,56 @@
+/*
+Copyright 2020 Jack Humbert
+
+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/>.
+*/
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define AUDIO_PIN A5
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/keymaps/synth_wavetable/keymap.c b/keyboards/planck/keymaps/synth_wavetable/keymap.c
new file mode 100644
index 0000000000..a0d7106793
--- /dev/null
+++ b/keyboards/planck/keymaps/synth_wavetable/keymap.c
@@ -0,0 +1,320 @@
+/* Copyright 2019 Jack Humbert
+ *
+ * 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
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ BACKLIT,
+ EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ 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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PLOVER] = LAYOUT_planck_grid(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef KEYBOARD_planck_rev5
+ PORTE &= ~(1<<6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ PORTE |= (1<<6);
+ #endif
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
+
+#include "wavetable.h"
+
+float dac_if[8] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+uint8_t dac_morph = 0;
+
+
+uint16_t dac_value_generate(void) {
+ uint16_t value = AUDIO_DAC_OFF_VALUE;
+ uint8_t active_tones = audio_get_number_of_active_tones();
+ if (active_tones > AUDIO_MAX_SIMULTANEOUS_TONES)
+ active_tones = AUDIO_MAX_SIMULTANEOUS_TONES;
+
+ if (active_tones > 0) {
+ uint16_t value_avg = 0;
+ for (uint8_t i = 0; i < active_tones; i++) {
+ dac_if[i] = dac_if[i]
+ + ((audio_get_frequency(i) * AUDIO_DAC_BUFFER_SIZE) / AUDIO_DAC_SAMPLE_RATE)
+ * 2/3; // necessary to adjust for the gpt-timer frequency (three times the sample rate) and the dac-conversion beeing called twice per sample
+
+ // Needed because % doesn't work with floats
+ while (dac_if[i] >= (AUDIO_DAC_BUFFER_SIZE))
+ dac_if[i] = dac_if[i] - AUDIO_DAC_BUFFER_SIZE;
+
+ // #define AUDIO_DAC_MORPH_SPEED 372
+ // #define AUDIO_DAC_MORPH_SPEED_COMPUTED (AUDIO_DAC_SAMPLE_RATE / AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH * (1000 / AUDIO_DAC_MORPH_SPEED))
+
+ uint16_t dac_i = (uint16_t)dac_if[i];
+ // value_avg += dac_buffer_custom[dac_morph_flipped][dac_i] / active_tones / 2 * ((dac_morph >= 63) ? 6400 - dac_morph_counter : dac_morph_counter) / 6400;
+ // value_avg += dac_buffer_custom[dac_morph_flipped + 1][dac_i] / active_tones / 2 * ((dac_morph >= 63) ? dac_morph_counter : 6400 - dac_morph_counter) / 6400;
+
+ // value_avg += dac_wavetable_custom[dac_morph][dac_i] / active_tones / 2 * (AUDIO_DAC_MORPH_SPEED_COMPUTED - dac_morph_counter) / AUDIO_DAC_MORPH_SPEED_COMPUTED;
+ // value_avg += dac_wavetable_custom[dac_morph + 1][dac_i] / active_tones / 2 * dac_morph_counter / AUDIO_DAC_MORPH_SPEED_COMPUTED;
+ value_avg += dac_wavetable_custom[dac_morph][dac_i] / active_tones;
+ }
+ value = value_avg;
+
+ // dac_morph_counter++;
+ // if (dac_morph_counter >= AUDIO_DAC_MORPH_SPEED_COMPUTED) {
+ // dac_morph_counter = 0;
+ // dac_morph = (dac_morph + 1) % 125;
+ // dac_morph_flipped = ((dac_morph >= 63) ? (125 - dac_morph) : dac_morph);
+ // dac_morph = (dac_morph + 1) % (AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH - 1);
+ // }
+ }
+ return value;
+}
+
+void encoder_update(bool clockwise) {
+ if (clockwise) {
+ dac_morph = (dac_morph + 1) % AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH;
+ } else {
+ if (dac_morph == 0)
+ dac_morph = (AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH - 1);
+ else
+ dac_morph--;
+ }
+}
diff --git a/keyboards/planck/keymaps/synth_wavetable/rules.mk b/keyboards/planck/keymaps/synth_wavetable/rules.mk
new file mode 100644
index 0000000000..ebfcda2214
--- /dev/null
+++ b/keyboards/planck/keymaps/synth_wavetable/rules.mk
@@ -0,0 +1,2 @@
+AUDIO_ENABLE = yes
+AUDIO_DRIVER = dac_additive
diff --git a/keyboards/planck/keymaps/synth_wavetable/wavetable.h b/keyboards/planck/keymaps/synth_wavetable/wavetable.h
new file mode 100644
index 0000000000..89a0eefcbb
--- /dev/null
+++ b/keyboards/planck/keymaps/synth_wavetable/wavetable.h
@@ -0,0 +1,2197 @@
+/*
+Copyright 2020 Jack Humbert
+
+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/>.
+*/
+
+#define AUDIO_DAC_WAVETABLE_CUSTOM_LENGTH 64
+
+static const dacsample_t dac_wavetable_custom[64][256] = {
+ {
+ 3038, 4095, 3745, 3945, 3779, 3889, 3782, 3850,
+ 3775, 3817, 3766, 3788, 3755, 3762, 3743, 3738,
+ 3729, 3716, 3715, 3695, 3700, 3676, 3683, 3658,
+ 3667, 3642, 3649, 3626, 3632, 3611, 3614, 3596,
+ 3596, 3581, 3579, 3567, 3561, 3552, 3544, 3537,
+ 3528, 3522, 3511, 3507, 3495, 3491, 3479, 3476,
+ 3464, 3460, 3449, 3444, 3433, 3428, 3419, 3412,
+ 3404, 3397, 3389, 3382, 3374, 3366, 3359, 3351,
+ 3345, 3336, 3330, 3322, 3314, 3307, 3299, 3293,
+ 3285, 3279, 3270, 3265, 3255, 3251, 3241, 3237,
+ 3227, 3223, 3213, 3208, 3200, 3194, 3187, 3179,
+ 3173, 3165, 3161, 3150, 3149, 3136, 3137, 3121,
+ 3125, 3107, 3112, 3093, 3099, 3080, 3086, 3068,
+ 3072, 3056, 3058, 3045, 3043, 3036, 3027, 3027,
+ 3010, 3019, 2992, 3013, 2974, 3007, 2955, 3002,
+ 2935, 2999, 2913, 2998, 2886, 3006, 2842, 3067,
+ 2464, 221, 205, 228, 215, 260, 231, 285,
+ 249, 307, 270, 326, 291, 344, 313, 359,
+ 335, 374, 357, 388, 378, 403, 399, 416,
+ 419, 431, 438, 445, 457, 460, 475, 476,
+ 492, 492, 509, 508, 525, 524, 540, 541,
+ 555, 558, 571, 574, 586, 591, 601, 607,
+ 616, 624, 631, 639, 647, 656, 662, 671,
+ 677, 687, 692, 702, 708, 718, 723, 733,
+ 738, 748, 753, 763, 768, 777, 783, 792,
+ 798, 806, 812, 820, 827, 834, 842, 848,
+ 857, 862, 872, 875, 887, 888, 901, 902,
+ 915, 915, 929, 929, 943, 942, 956, 956,
+ 969, 971, 981, 986, 992, 1001, 1003, 1017,
+ 1013, 1032, 1023, 1048, 1033, 1064, 1043, 1079,
+ 1054, 1093, 1065, 1106, 1078, 1118, 1092, 1127,
+ 1109, 1132, 1130, 1132, 1160, 1118, 1217, 1036
+ },
+ {
+ 2048, 2049, 2056, 2071, 2096, 2130, 2174, 2225,
+ 2280, 2337, 2392, 2444, 2490, 2529, 2559, 2581,
+ 2593, 2597, 2594, 2589, 2585, 2588, 2603, 2635,
+ 2685, 2755, 2842, 2943, 3050, 3157, 3258, 3347,
+ 3423, 3485, 3535, 3577, 3612, 3641, 3665, 3682,
+ 3692, 3694, 3692, 3689, 3690, 3700, 3724, 3761,
+ 3811, 3867, 3924, 3972, 4005, 4019, 4013, 3993,
+ 3964, 3936, 3915, 3906, 3912, 3931, 3959, 3990,
+ 4020, 4043, 4059, 4067, 4068, 4063, 4051, 4030,
+ 3997, 3946, 3875, 3782, 3671, 3546, 3419, 3299,
+ 3197, 3120, 3072, 3053, 3062, 3091, 3133, 3180,
+ 3224, 3257, 3276, 3277, 3259, 3221, 3163, 3084,
+ 2986, 2870, 2741, 2607, 2474, 2351, 2245, 2161,
+ 2102, 2069, 2058, 2067, 2091, 2124, 2160, 2195,
+ 2222, 2239, 2245, 2238, 2219, 2191, 2155, 2116,
+ 2077, 2042, 2014, 1995, 1987, 1991, 2003, 2023,
+ 2048, 2074, 2101, 2124, 2144, 2158, 2166, 2170,
+ 2172, 2175, 2181, 2195, 2221, 2260, 2315, 2384,
+ 2465, 2555, 2648, 2740, 2826, 2903, 2971, 3029,
+ 3076, 3114, 3142, 3159, 3167, 3167, 3160, 3153,
+ 3150, 3157, 3180, 3222, 3283, 3362, 3452, 3546,
+ 3636, 3715, 3777, 3823, 3854, 3874, 3889, 3905,
+ 3923, 3944, 3968, 3989, 4007, 4019, 4026, 4030,
+ 4033, 4040, 4051, 4066, 4081, 4090, 4086, 4063,
+ 4019, 3956, 3878, 3794, 3716, 3651, 3606, 3586,
+ 3589, 3612, 3647, 3688, 3728, 3760, 3781, 3787,
+ 3780, 3757, 3718, 3661, 3584, 3485, 3366, 3230,
+ 3085, 2938, 2801, 2683, 2589, 2525, 2492, 2486,
+ 2503, 2537, 2580, 2624, 2663, 2691, 2703, 2698,
+ 2674, 2633, 2574, 2500, 2415, 2322, 2228, 2139,
+ 2059, 1994, 1945, 1914, 1900, 1901, 1913, 1933,
+ 1957, 1983, 2006, 2025, 2038, 2046, 2049, 2048
+ },
+ {
+ 2048, 2053, 2074, 2119, 2191, 2291, 2416, 2559,
+ 2710, 2860, 3000, 3124, 3225, 3301, 3350, 3371,
+ 3364, 3334, 3288, 3234, 3182, 3144, 3127, 3137,
+ 3173, 3231, 3304, 3378, 3441, 3483, 3495, 3475,
+ 3423, 3344, 3243, 3128, 3002, 2867, 2726, 2581,
+ 2433, 2286, 2142, 2001, 1865, 1731, 1597, 1460,
+ 1317, 1171, 1023, 881, 750, 637, 546, 476,
+ 423, 380, 341, 300, 254, 205, 154, 109,
+ 75, 56, 55, 72, 105, 153, 217, 296,
+ 395, 513, 651, 806, 972, 1139, 1299, 1444,
+ 1572, 1680, 1772, 1855, 1935, 2018, 2110, 2212,
+ 2323, 2442, 2563, 2680, 2786, 2877, 2944, 2982,
+ 2986, 2951, 2877, 2771, 2640, 2498, 2360, 2238,
+ 2145, 2087, 2069, 2088, 2140, 2215, 2303, 2392,
+ 2469, 2524, 2550, 2543, 2505, 2437, 2346, 2241,
+ 2132, 2031, 1949, 1893, 1870, 1878, 1915, 1974,
+ 2048, 2128, 2206, 2276, 2332, 2371, 2394, 2402,
+ 2403, 2404, 2417, 2449, 2510, 2603, 2728, 2882,
+ 3056, 3236, 3410, 3564, 3690, 3783, 3842, 3868,
+ 3864, 3833, 3777, 3700, 3604, 3495, 3378, 3261,
+ 3150, 3048, 2958, 2877, 2801, 2723, 2637, 2536,
+ 2420, 2289, 2146, 1997, 1847, 1698, 1552, 1410,
+ 1271, 1133, 999, 870, 748, 637, 536, 446,
+ 364, 288, 216, 150, 92, 49, 29, 37,
+ 76, 144, 235, 339, 444, 541, 623, 689,
+ 741, 784, 826, 874, 933, 1009, 1101, 1209,
+ 1330, 1461, 1598, 1739, 1877, 2007, 2123, 2219,
+ 2291, 2338, 2364, 2374, 2378, 2385, 2404, 2443,
+ 2503, 2585, 2684, 2794, 2904, 3004, 3084, 3136,
+ 3154, 3133, 3070, 2965, 2823, 2650, 2458, 2261,
+ 2075, 1914, 1787, 1701, 1656, 1649, 1675, 1726,
+ 1791, 1861, 1927, 1981, 2020, 2043, 2051, 2050
+ },
+ {
+ 2048, 2051, 2065, 2095, 2144, 2212, 2298, 2397,
+ 2504, 2612, 2716, 2811, 2894, 2961, 3011, 3042,
+ 3055, 3052, 3036, 3014, 2996, 2988, 3001, 3040,
+ 3108, 3204, 3324, 3459, 3598, 3728, 3841, 3930,
+ 3992, 4029, 4045, 4045, 4032, 4009, 3975, 3930,
+ 3874, 3809, 3738, 3665, 3596, 3534, 3481, 3436,
+ 3397, 3357, 3312, 3255, 3184, 3099, 3003, 2900,
+ 2795, 2693, 2595, 2503, 2413, 2325, 2235, 2143,
+ 2048, 1950, 1850, 1750, 1651, 1554, 1460, 1370,
+ 1287, 1215, 1159, 1122, 1105, 1107, 1124, 1147,
+ 1168, 1179, 1172, 1143, 1091, 1019, 931, 836,
+ 741, 655, 584, 535, 510, 514, 549, 618,
+ 721, 856, 1019, 1201, 1388, 1569, 1730, 1862,
+ 1956, 2012, 2029, 2013, 1971, 1911, 1844, 1779,
+ 1725, 1690, 1676, 1686, 1719, 1771, 1838, 1913,
+ 1989, 2059, 2115, 2152, 2167, 2161, 2136, 2097,
+ 2048, 1994, 1942, 1894, 1856, 1829, 1813, 1805,
+ 1803, 1800, 1788, 1762, 1715, 1643, 1544, 1420,
+ 1276, 1120, 962, 811, 675, 558, 463, 390,
+ 337, 304, 290, 294, 316, 353, 399, 447,
+ 489, 517, 526, 513, 479, 430, 375, 322,
+ 283, 264, 269, 297, 345, 405, 473, 542,
+ 612, 682, 754, 829, 910, 996, 1086, 1179,
+ 1273, 1366, 1459, 1553, 1649, 1747, 1848, 1949,
+ 2048, 2141, 2227, 2305, 2375, 2440, 2505, 2574,
+ 2649, 2733, 2825, 2923, 3023, 3122, 3215, 3300,
+ 3373, 3433, 3476, 3499, 3496, 3465, 3403, 3313,
+ 3200, 3073, 2945, 2829, 2735, 2672, 2644, 2652,
+ 2691, 2756, 2836, 2921, 3000, 3062, 3101, 3111,
+ 3090, 3036, 2950, 2835, 2695, 2539, 2375, 2214,
+ 2069, 1947, 1855, 1795, 1766, 1765, 1786, 1824,
+ 1871, 1920, 1965, 2003, 2029, 2044, 2050, 2049
+ },
+ {
+ 2048, 2061, 2117, 2228, 2396, 2610, 2844, 3065,
+ 3240, 3343, 3358, 3283, 3125, 2900, 2629, 2337,
+ 2048, 1783, 1558, 1379, 1241, 1136, 1049, 971,
+ 900, 843, 815, 838, 930, 1103, 1358, 1680,
+ 2048, 2435, 2816, 3170, 3479, 3729, 3908, 4008,
+ 4025, 3959, 3819, 3616, 3364, 3076, 2757, 2413,
+ 2048, 1667, 1285, 922, 601, 347, 175, 92,
+ 93, 168, 304, 490, 722, 998, 1315, 1668,
+ 2048, 2437, 2818, 3173, 3483, 3736, 3919, 4021,
+ 4035, 3956, 3788, 3544, 3247, 2924, 2605, 2309,
+ 2048, 1819, 1614, 1422, 1234, 1050, 878, 733,
+ 633, 597, 635, 751, 939, 1186, 1471, 1768,
+ 2048, 2280, 2443, 2523, 2523, 2457, 2354, 2241,
+ 2146, 2087, 2067, 2081, 2113, 2142, 2149, 2118,
+ 2048, 1944, 1824, 1711, 1629, 1601, 1637, 1740,
+ 1896, 2080, 2261, 2404, 2481, 2478, 2394, 2243,
+ 2048, 1835, 1634, 1468, 1354, 1299, 1300, 1342,
+ 1408, 1479, 1540, 1586, 1625, 1670, 1744, 1865,
+ 2048, 2292, 2585, 2903, 3215, 3491, 3707, 3846,
+ 3899, 3864, 3745, 3550, 3296, 2999, 2682, 2360,
+ 2048, 1749, 1462, 1186, 917, 661, 432, 250,
+ 137, 112, 184, 351, 600, 912, 1268, 1651,
+ 2048, 2444, 2828, 3184, 3496, 3749, 3932, 4040,
+ 4072, 4031, 3919, 3739, 3493, 3185, 2828, 2441,
+ 2048, 1675, 1346, 1074, 862, 705, 592, 516,
+ 476, 475, 524, 632, 806, 1046, 1343, 1684,
+ 2048, 2412, 2755, 3051, 3279, 3421, 3468, 3421,
+ 3295, 3116, 2914, 2717, 2543, 2398, 2277, 2166,
+ 2048, 1909, 1744, 1557, 1361, 1178, 1031, 940,
+ 919, 975, 1102, 1284, 1497, 1708, 1886, 2004,
+ 2048, 2018, 1931, 1812, 1689, 1590, 1536, 1534,
+ 1585, 1676, 1786, 1894, 1981, 2035, 2056, 2053
+ },
+ {
+ 2048, 2072, 2162, 2326, 2531, 2717, 2808, 2744,
+ 2504, 2112, 1636, 1162, 781, 560, 536, 708,
+ 1040, 1468, 1922, 2340, 2681, 2929, 3082, 3144,
+ 3108, 2958, 2676, 2261, 1739, 1174, 654, 273,
+ 103, 179, 496, 1009, 1653, 2344, 2997, 3529,
+ 3874, 3994, 3882, 3563, 3082, 2497, 1866, 1246,
+ 698, 284, 64, 82, 347, 829, 1459, 2145,
+ 2795, 3334, 3712, 3900, 3885, 3668, 3262, 2702,
+ 2048, 1375, 770, 310, 56, 39, 261, 696,
+ 1287, 1952, 2594, 3120, 3458, 3578, 3497, 3260,
+ 2927, 2549, 2159, 1774, 1409, 1084, 836, 709,
+ 741, 951, 1327, 1819, 2353, 2844, 3211, 3395,
+ 3374, 3170, 2846, 2488, 2179, 1975, 1891, 1901,
+ 1956, 2008, 2027, 2015, 1996, 2006, 2073, 2203,
+ 2370, 2529, 2630, 2636, 2539, 2368, 2176, 2032,
+ 1989, 2070, 2251, 2471, 2649, 2712, 2622, 2385,
+ 2048, 1681, 1362, 1153, 1086, 1157, 1334, 1565,
+ 1803, 2019, 2207, 2378, 2545, 2706, 2837, 2892,
+ 2819, 2583, 2185, 1674, 1130, 653, 328, 216,
+ 337, 675, 1182, 1782, 2392, 2928, 3328, 3557,
+ 3606, 3490, 3229, 2845, 2359, 1803, 1223, 690,
+ 283, 77, 118, 409, 910, 1551, 2247, 2916,
+ 3483, 3886, 4077, 4031, 3750, 3266, 2640, 1948,
+ 1273, 689, 261, 35, 43, 291, 753, 1368,
+ 2048, 2691, 3210, 3550, 3691, 3645, 3437, 3096,
+ 2649, 2126, 1569, 1033, 587, 298, 216, 362,
+ 722, 1248, 1866, 2486, 3015, 3375, 3519, 3446,
+ 3200, 2855, 2490, 2166, 1911, 1723, 1584, 1478,
+ 1404, 1379, 1435, 1593, 1858, 2201, 2566, 2885,
+ 3090, 3140, 3027, 2785, 2480, 2196, 2006, 1951,
+ 2026, 2183, 2350, 2459, 2469, 2375, 2208, 2022,
+ 1871, 1793, 1798, 1865, 1955, 2028, 2061, 2057
+ },
+ {
+ 2048, 1736, 1511, 1423, 1476, 1630, 1822, 1987,
+ 2083, 2101, 2063, 2006, 1968, 1967, 2000, 2045,
+ 2073, 2061, 2011, 1944, 1899, 1908, 1981, 2099,
+ 2218, 2291, 2292, 2226, 2129, 2054, 2044, 2111,
+ 2237, 2375, 2471, 2480, 2385, 2198, 1962, 1735,
+ 1574, 1515, 1563, 1694, 1861, 2022, 2148, 2232,
+ 2282, 2305, 2299, 2254, 2154, 1996, 1798, 1599,
+ 1449, 1393, 1464, 1664, 1967, 2319, 2651, 2890,
+ 2979, 2896, 2660, 2325, 1964, 1648, 1430, 1334,
+ 1360, 1494, 1707, 1967, 2238, 2480, 2658, 2740,
+ 2709, 2561, 2310, 1987, 1639, 1327, 1114, 1056,
+ 1181, 1476, 1889, 2335, 2720, 2967, 3034, 2923,
+ 2673, 2345, 2010, 1727, 1537, 1455, 1475, 1580,
+ 1747, 1955, 2184, 2411, 2607, 2733, 2751, 2632,
+ 2378, 2025, 1643, 1320, 1132, 1123, 1287, 1573,
+ 1902, 2192, 2386, 2461, 2433, 2339, 2225, 2123,
+ 2048, 1993, 1946, 1898, 1854, 1834, 1865, 1966,
+ 2133, 2334, 2512, 2611, 2593, 2463, 2263, 2058,
+ 1913, 1862, 1902, 1996, 2088, 2130, 2099, 2001,
+ 1871, 1755, 1694, 1710, 1795, 1918, 2036, 2111,
+ 2130, 2104, 2062, 2034, 2032, 2044, 2044, 2008,
+ 1930, 1832, 1756, 1745, 1830, 2008, 2250, 2502,
+ 2700, 2790, 2741, 2556, 2273, 1955, 1672, 1483,
+ 1414, 1463, 1600, 1789, 1998, 2202, 2383, 2519,
+ 2590, 2574, 2460, 2253, 1979, 1682, 1414, 1233,
+ 1183, 1291, 1551, 1925, 2344, 2723, 2981, 3065,
+ 2964, 2707, 2356, 1983, 1656, 1424, 1315, 1335,
+ 1468, 1686, 1950, 2223, 2467, 2652, 2748, 2736,
+ 2601, 2347, 2004, 1624, 1283, 1058, 1009, 1154,
+ 1466, 1873, 2285, 2614, 2801, 2826, 2710, 2501,
+ 2259, 2036, 1862, 1751, 1697, 1692, 1733, 1822,
+ 1963, 2154, 2374, 2582, 2721, 2742, 2619, 2369
+ },
+ {
+ 2048, 2099, 2228, 2259, 1999, 1514, 1195, 1450,
+ 2280, 3163, 3424, 2780, 1605, 678, 618, 1447,
+ 2593, 3312, 3203, 2425, 1510, 990, 1120, 1807,
+ 2685, 3258, 3119, 2226, 1045, 353, 712, 2001,
+ 3423, 4031, 3396, 1899, 483, 41, 848, 2389,
+ 3692, 3949, 3033, 1544, 405, 291, 1255, 2722,
+ 3811, 3831, 2719, 1136, 90, 268, 1555, 3114,
+ 3964, 3614, 2324, 895, 183, 617, 1954, 3388,
+ 4020, 3424, 1949, 514, 27, 798, 2345, 3693,
+ 3997, 3089, 1590, 481, 425, 1338, 2538, 3274,
+ 3197, 2470, 1563, 978, 1033, 1728, 2698, 3356,
+ 3224, 2300, 1137, 500, 836, 1934, 3058, 3478,
+ 2986, 2018, 1282, 1194, 1621, 2108, 2314, 2242,
+ 2102, 2039, 2030, 2009, 2004, 2101, 2286, 2386,
+ 2222, 1832, 1496, 1506, 1876, 2312, 2478, 2313,
+ 2077, 2067, 2276, 2385, 2108, 1542, 1143, 1321,
+ 2048, 2836, 3127, 2729, 1951, 1338, 1247, 1633,
+ 2172, 2537, 2581, 2321, 1874, 1441, 1300, 1669,
+ 2465, 3215, 3317, 2530, 1269, 374, 507, 1646,
+ 3076, 3872, 3523, 2269, 928, 339, 820, 2008,
+ 3150, 3579, 3074, 1933, 812, 393, 1006, 2361,
+ 3636, 3973, 3084, 1503, 242, 106, 1176, 2779,
+ 3923, 3906, 2735, 1128, 88, 267, 1552, 3134,
+ 4033, 3701, 2345, 796, 14, 497, 1947, 3438,
+ 4019, 3364, 1958, 721, 380, 1054, 2279, 3324,
+ 3589, 2905, 1647, 566, 367, 1237, 2668, 3752,
+ 3780, 2721, 1257, 332, 511, 1607, 2838, 3413,
+ 3085, 2234, 1489, 1248, 1506, 2001, 2450, 2652,
+ 2503, 2030, 1460, 1167, 1432, 2176, 2932, 3161,
+ 2674, 1808, 1170, 1163, 1680, 2239, 2430, 2258,
+ 2059, 2108, 2334, 2426, 2195, 1777, 1510, 1606,
+ 1957, 2266, 2327, 2193, 2057, 2033, 2068, 2069
+ },
+ {
+ 2048, 2119, 2229, 2372, 2541, 2724, 2909, 3085,
+ 3240, 3368, 3466, 3533, 3571, 3581, 3566, 3529,
+ 3473, 3403, 3326, 3251, 3188, 3144, 3128, 3145,
+ 3195, 3276, 3382, 3503, 3628, 3747, 3850, 3932,
+ 3992, 4032, 4055, 4067, 4071, 4069, 4061, 4047,
+ 4025, 3996, 3965, 3934, 3910, 3898, 3902, 3922,
+ 3956, 3998, 4040, 4074, 4093, 4093, 4074, 4041,
+ 4002, 3964, 3935, 3920, 3921, 3936, 3961, 3991,
+ 4020, 4044, 4062, 4073, 4078, 4078, 4073, 4060,
+ 4035, 3994, 3932, 3848, 3744, 3626, 3504, 3389,
+ 3291, 3220, 3180, 3174, 3198, 3247, 3313, 3388,
+ 3462, 3527, 3577, 3607, 3615, 3598, 3553, 3479,
+ 3374, 3240, 3081, 2904, 2720, 2541, 2379, 2245,
+ 2146, 2087, 2069, 2088, 2140, 2218, 2311, 2410,
+ 2503, 2580, 2633, 2654, 2639, 2585, 2492, 2361,
+ 2199, 2014, 1817, 1619, 1435, 1273, 1142, 1045,
+ 984, 959, 967, 1005, 1067, 1148, 1238, 1328,
+ 1408, 1468, 1498, 1493, 1450, 1369, 1254, 1113,
+ 956, 796, 643, 508, 397, 311, 251, 214,
+ 196, 195, 211, 240, 283, 334, 391, 445,
+ 489, 515, 519, 496, 449, 380, 299, 215,
+ 137, 74, 31, 7, 0, 3, 10, 16,
+ 18, 14, 8, 2, 0, 2, 8, 16,
+ 23, 25, 22, 13, 4, 0, 7, 31,
+ 76, 139, 215, 296, 371, 432, 472, 486,
+ 476, 445, 398, 345, 291, 244, 207, 183,
+ 172, 177, 199, 241, 305, 395, 510, 648,
+ 800, 958, 1109, 1242, 1347, 1416, 1448, 1443,
+ 1404, 1338, 1255, 1164, 1077, 1002, 947, 918,
+ 919, 954, 1024, 1129, 1268, 1436, 1624, 1822,
+ 2017, 2197, 2351, 2472, 2554, 2597, 2602, 2571,
+ 2510, 2427, 2331, 2232, 2141, 2070, 2027, 2018
+ },
+ {
+ 2048, 2055, 2083, 2142, 2236, 2366, 2526, 2705,
+ 2891, 3068, 3227, 3358, 3455, 3515, 3537, 3522,
+ 3473, 3396, 3302, 3199, 3101, 3015, 2946, 2896,
+ 2859, 2827, 2789, 2734, 2652, 2541, 2399, 2232,
+ 2048, 1853, 1656, 1461, 1273, 1094, 929, 779,
+ 649, 541, 454, 384, 327, 277, 229, 182,
+ 139, 106, 93, 108, 158, 244, 363, 506,
+ 666, 832, 999, 1165, 1330, 1499, 1674, 1857,
+ 2048, 2243, 2440, 2635, 2825, 3005, 3173, 3324,
+ 3453, 3552, 3614, 3635, 3614, 3558, 3476, 3382,
+ 3291, 3215, 3159, 3125, 3110, 3105, 3100, 3084,
+ 3048, 2986, 2897, 2783, 2647, 2497, 2341, 2188,
+ 2048, 1931, 1846, 1799, 1790, 1815, 1863, 1922,
+ 1978, 2017, 2030, 2012, 1962, 1885, 1789, 1687,
+ 1592, 1517, 1473, 1467, 1501, 1574, 1678, 1805,
+ 1940, 2069, 2176, 2249, 2282, 2272, 2224, 2146,
+ 2048, 1941, 1837, 1745, 1672, 1623, 1598, 1591,
+ 1596, 1599, 1590, 1558, 1495, 1398, 1269, 1117,
+ 956, 802, 670, 575, 523, 516, 554, 630,
+ 738, 873, 1027, 1196, 1372, 1550, 1724, 1890,
+ 2048, 2198, 2346, 2498, 2659, 2833, 3019, 3210,
+ 3398, 3573, 3724, 3847, 3939, 4004, 4046, 4069,
+ 4078, 4071, 4048, 4005, 3939, 3852, 3743, 3618,
+ 3479, 3331, 3173, 3006, 2830, 2642, 2446, 2245,
+ 2048, 1860, 1690, 1539, 1406, 1286, 1172, 1057,
+ 936, 808, 676, 546, 425, 322, 242, 192,
+ 172, 186, 235, 319, 438, 590, 769, 965,
+ 1166, 1356, 1526, 1668, 1779, 1864, 1931, 1988,
+ 2048, 2117, 2202, 2304, 2419, 2541, 2659, 2764,
+ 2845, 2893, 2899, 2857, 2767, 2633, 2463, 2272,
+ 2078, 1899, 1750, 1642, 1579, 1563, 1587, 1643,
+ 1721, 1807, 1890, 1961, 2012, 2041, 2052, 2050
+ },
+ {
+ 2048, 2060, 2109, 2207, 2360, 2560, 2787, 3015,
+ 3217, 3368, 3451, 3458, 3391, 3257, 3067, 2840,
+ 2593, 2344, 2110, 1900, 1717, 1554, 1404, 1253,
+ 1093, 924, 753, 596, 475, 410, 418, 507,
+ 673, 905, 1189, 1509, 1849, 2196, 2537, 2858,
+ 3146, 3391, 3587, 3732, 3830, 3884, 3899, 3876,
+ 3811, 3695, 3524, 3294, 3012, 2689, 2345, 1999,
+ 1666, 1358, 1077, 824, 599, 404, 246, 133,
+ 75, 80, 151, 285, 478, 721, 1006, 1323,
+ 1660, 2000, 2324, 2612, 2847, 3019, 3127, 3181,
+ 3197, 3192, 3179, 3165, 3148, 3119, 3064, 2972,
+ 2833, 2647, 2419, 2162, 1894, 1634, 1404, 1223,
+ 1109, 1072, 1113, 1222, 1379, 1556, 1726, 1867,
+ 1965, 2019, 2035, 2029, 2021, 2027, 2060, 2127,
+ 2222, 2333, 2441, 2526, 2569, 2558, 2487, 2361,
+ 2197, 2016, 1849, 1723, 1659, 1666, 1742, 1876,
+ 2048, 2234, 2412, 2562, 2670, 2729, 2742, 2718,
+ 2674, 2627, 2591, 2574, 2575, 2583, 2581, 2548,
+ 2465, 2322, 2116, 1859, 1568, 1267, 977, 719,
+ 508, 354, 266, 245, 291, 396, 550, 737,
+ 945, 1165, 1394, 1634, 1891, 2170, 2472, 2790,
+ 3109, 3408, 3667, 3870, 4007, 4077, 4082, 4030,
+ 3923, 3765, 3559, 3306, 3013, 2689, 2347, 1998,
+ 1653, 1320, 1006, 719, 468, 266, 126, 61,
+ 76, 167, 322, 524, 752, 993, 1237, 1486,
+ 1741, 2008, 2289, 2582, 2875, 3157, 3411, 3623,
+ 3780, 3872, 3893, 3841, 3715, 3523, 3282, 3013,
+ 2740, 2489, 2276, 2107, 1979, 1879, 1791, 1699,
+ 1592, 1467, 1331, 1196, 1082, 1005, 980, 1015,
+ 1109, 1256, 1438, 1635, 1821, 1973, 2068, 2097,
+ 2059, 1967, 1844, 1713, 1601, 1526, 1499, 1525,
+ 1594, 1694, 1805, 1908, 1988, 2036, 2055, 2053
+ },
+ {
+ 2048, 2072, 2095, 2075, 2062, 2149, 2347, 2534,
+ 2584, 2527, 2537, 2732, 3017, 3166, 3074, 2884,
+ 2844, 3021, 3223, 3212, 2982, 2782, 2838, 3104,
+ 3321, 3317, 3206, 3252, 3548, 3896, 4028, 3910,
+ 3782, 3875, 4095, 4095, 4095, 3855, 3719, 3863,
+ 4080, 4065, 3759, 3424, 3355, 3556, 3739, 3649,
+ 3342, 3105, 3136, 3332, 3412, 3231, 2919, 2715,
+ 2707, 2768, 2724, 2551, 2362, 2259, 2219, 2157,
+ 2048, 1944, 1881, 1811, 1665, 1473, 1350, 1361,
+ 1417, 1359, 1150, 949, 947, 1145, 1329, 1300,
+ 1095, 955, 1044, 1254, 1316, 1103, 782, 627,
+ 713, 835, 759, 498, 306, 386, 653, 834,
+ 792, 690, 804, 1192, 1608, 1771, 1678, 1603,
+ 1778, 2118, 2309, 2159, 1822, 1629, 1734, 1954,
+ 1990, 1762, 1493, 1456, 1681, 1943, 2022, 1925,
+ 1847, 1930, 2119, 2249, 2238, 2153, 2095, 2080,
+ 2048, 1973, 1912, 1915, 1938, 1892, 1763, 1668,
+ 1723, 1885, 1968, 1842, 1593, 1438, 1481, 1578,
+ 1487, 1150, 775, 614, 689, 765, 627, 325,
+ 123, 191, 407, 501, 366, 185, 212, 466,
+ 698, 671, 436, 273, 366, 584, 630, 389,
+ 77, 8, 248, 539, 586, 384, 215, 329,
+ 667, 935, 929, 753, 682, 863, 1169, 1364,
+ 1361, 1292, 1331, 1505, 1700, 1812, 1863, 1934,
+ 2048, 2147, 2196, 2244, 2360, 2521, 2615, 2582,
+ 2519, 2589, 2834, 3096, 3182, 3084, 3009, 3147,
+ 3446, 3657, 3604, 3387, 3271, 3380, 3552, 3521,
+ 3228, 2893, 2770, 2865, 2939, 2800, 2540, 2436,
+ 2621, 2923, 3052, 2930, 2780, 2860, 3153, 3370,
+ 3268, 2930, 2671, 2689, 2844, 2820, 2484, 2039,