diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/actions.c | 1 | ||||
| -rw-r--r-- | include/actions.h | 18 | ||||
| -rw-r--r-- | include/negamax.c | 90 | ||||
| -rw-r--r-- | include/negamax.h | 3 | ||||
| -rw-r--r-- | include/nn.c | 122 | ||||
| -rw-r--r-- | include/nn.h | 81 | ||||
| -rw-r--r-- | include/nn_input.c | 54 | ||||
| -rw-r--r-- | include/pv.c | 59 | ||||
| -rw-r--r-- | include/pv.h | 47 | ||||
| -rw-r--r-- | include/tt.c | 22 | ||||
| -rw-r--r-- | include/tt.h | 30 | ||||
| -rw-r--r-- | include/weights_5.c | 553 | ||||
| -rw-r--r-- | include/weights_5.h | 8 | ||||
| -rw-r--r-- | include/weights_6.c | 681 | ||||
| -rw-r--r-- | include/weights_6.h | 2 |
15 files changed, 995 insertions, 776 deletions
diff --git a/include/actions.c b/include/actions.c index 9b2ae0d..541b388 100644 --- a/include/actions.c +++ b/include/actions.c @@ -337,6 +337,7 @@ void action_undo(tak_state_p state, const action_t action) { if (A_GET_TYPE(action) == A_PLACE) { const uint8_t black = (state->current_colour == C_BLACK); state->celldat[loc] = 0; + state->colours[loc] = 0; if (A_GET_DATA0(action) == STONE_CAPSTONE) { if (black) state->black_count |= 0x80; diff --git a/include/actions.h b/include/actions.h index 913a8cb..d96033c 100644 --- a/include/actions.h +++ b/include/actions.h @@ -54,24 +54,22 @@ extern int8_t move_deltas[4]; // Methods // =================================================================== +#define AL_MAX_LEVELS 8 void actions_init(const uint8_t board_size); -/* - * Generate the legal actions. The move list is drawn from a static - * per-search-level scratch buffer: one buffer per recursion level, - * so nested generate calls at different levels do not clobber each - * other. `level' is the recursion depth within the current search - * (0 at the root). The returned pointer is valid until the next - * generate call at the same level. - */ +// Generate the legal actions. The move list is drawn from a static +// per-search-level scratch buffer: one buffer per recursion level, so nested +// generate calls at different levels do not clobber each other. `level' is the +// recursion depth within the current search (0 at the root). The returned +// pointer is valid until the next generate call at the same level. action_t *actions_generate_at(tak_state_p state, uint32_t *num_actions, const uint32_t level); action_t *actions_generate(tak_state_p state, uint32_t *num_actions); char action_in_list(action_t action, action_t *actions, const uint32_t num_actions); -// Move `action' to the front of the list. Returns EXIT_FAILURE (and -// leaves the list untouched) if the action is not in the list. +// Move `action' to the front of the list. Returns EXIT_FAILURE (and leaves the +// list untouched) if the action is not in the list. int action_move_to_front(action_t action, action_t *actions, const uint32_t num_actions); diff --git a/include/negamax.c b/include/negamax.c index 7b4acc1..6c29481 100644 --- a/include/negamax.c +++ b/include/negamax.c @@ -17,6 +17,9 @@ #include "negamax.h" #include "actions.h" +#ifdef RECORD_PV +#include "pv.h" +#endif // =================================================================== // Variables @@ -54,7 +57,11 @@ static inline enum WIN_TYPE check_win_cached(tak_state_p state, static float negamax(tak_state_p state, const uint8_t cur_depth, const uint8_t init_depth, float alpha, float beta, - const float colour, const uint64_t hash); + const float colour, const uint64_t hash +#ifdef RECORD_PV + , pv_leaf_t *out_leaf +#endif +); // =================================================================== // Exported functions @@ -84,7 +91,7 @@ float negamax_generate(tak_state_p state) { negamax_best_action = -1; - // The transposition table is deliberately NOT cleared here: entries persist + // The transposition table is deliberately not cleared here: entries persist // across plies. This is sound because the table is keyed on (board, side to // move) and an entry is only reusable at a depth no greater than the one it // was stored at. In particular the new root (the previous root's child, @@ -93,11 +100,22 @@ float negamax_generate(tak_state_p state) { // this is constant across iterative deepening const uint64_t root_hash = zobrist_compute(state); +#ifdef RECORD_PV + pv_leaf_t iteration_leaf; +#endif for (int d = 1; d <= negamax_search_depth; d++) { result = negamax(state, d, d, -safe_infty, safe_infty, - (state->ply & 1) ? +1.0 : -1.0, root_hash); + (state->ply & 1) ? +1.0 : -1.0, root_hash +#ifdef RECORD_PV + , &iteration_leaf +#endif + ); } +#ifdef RECORD_PV + pv_publish_leaf(&iteration_leaf); +#endif + action_to_ptn(negamax_best_action, negamax_ptn); return result; @@ -112,26 +130,43 @@ static enum WIN_TYPE w; static float negamax(tak_state_p state, const uint8_t cur_depth, const uint8_t init_depth, float alpha, float beta, - const float colour, const uint64_t hash) { + const float colour, const uint64_t hash +#ifdef RECORD_PV + , pv_leaf_t *out_leaf +#endif +) { + + // the scratch buffer is per-level so that recursion does not clobber + const uint32_t level = init_depth - cur_depth; tt_entry_t *entry = tt_seek(hash); - if (entry != NULL && entry->depth >= cur_depth) { + // The root never early-returns from the table. Within one game the new + // root was only ever stored at depth D-1, so an early return could not + // fire anyway; across games the table persists across reset_state and + // a stale full-depth entry would early-return and leave + // negamax_best_action unset. + if (level > 0 && entry != NULL && entry->depth >= cur_depth) { if (entry->flag == TT_EXACT) { +#ifdef RECORD_PV + *out_leaf = entry->leaf; +#endif return entry->value; } else if (entry->flag == TT_LOWERBOUND && entry->value > alpha) { alpha = entry->value; } else if (entry->flag == TT_UPPERBOUND && entry->value < beta) { beta = entry->value; } - if (alpha >= beta) + if (alpha >= beta) { +#ifdef RECORD_PV + *out_leaf = entry->leaf; +#endif return entry->value; + } } action_t *actions; uint32_t num_actions; - // the scratch buffer is per-level so that recursion does not clobber - const uint32_t level = init_depth - cur_depth; if ((actions = actions_generate_at(state, &num_actions, level)) == NULL) return alpha; // should never happen! @@ -153,6 +188,9 @@ static float negamax(tak_state_p state, const uint8_t cur_depth, action_t best_action = actions[0]; float best_value = -infty; +#ifdef RECORD_PV + pv_leaf_t candidate_leaf, best_leaf; +#endif for (uint32_t idx = 0; idx<num_actions; idx++) { negamax_display_progress(cur_depth, init_depth, num_actions); @@ -161,7 +199,7 @@ static float negamax(tak_state_p state, const uint8_t cur_depth, const uint64_t child_hash = zobrist_compute(state); - // Compute the value of the node + // Compute the value of the node and retain the leaf that produced it. float node_value; if (state->ply >= 2 * state->board_size - 2 && (w = check_win_cached(state, child_hash)) < 0xFF) { @@ -172,18 +210,31 @@ static float negamax(tak_state_p state, const uint8_t cur_depth, } else if (w == WIN_DRAW) { node_value = 0; } +#ifdef RECORD_PV + pv_capture_leaf(&candidate_leaf, state, w); +#endif } else if (cur_depth > 1) { // If nobody won, or too early and not leaf, recurse node_value = -negamax(state, cur_depth - 1, init_depth, -beta, -alpha, - -colour, child_hash); + -colour, child_hash +#ifdef RECORD_PV + , &candidate_leaf +#endif + ); } else { node_value = colour * evaluate(state); +#ifdef RECORD_PV + pv_capture_leaf(&candidate_leaf, state, (enum WIN_TYPE)0xFF); +#endif } action_undo(state, actions[idx]); - if (node_value > best_value) { + if (idx == 0 || node_value > best_value) { best_value = node_value; best_action = actions[idx]; +#ifdef RECORD_PV + best_leaf = candidate_leaf; +#endif } if (best_value > alpha) @@ -195,20 +246,21 @@ static float negamax(tak_state_p state, const uint8_t cur_depth, if (cur_depth == init_depth) negamax_best_action = best_action; +#ifdef RECORD_PV + *out_leaf = best_leaf; +#endif + flag = TT_EXACT; if (best_value >= beta) flag = TT_LOWERBOUND; else if (best_value <= orig_alpha) flag = TT_UPPERBOUND; - if (entry == NULL) { - tt_insert(hash, flag, cur_depth, best_value, best_action); - } else { - entry->flag = flag; - entry->value = best_value; - entry->depth = cur_depth; - entry->action = best_action; - } + entry = tt_store(hash, flag, cur_depth, best_value, best_action); +#ifdef RECORD_PV + if (entry != NULL) + entry->leaf = best_leaf; +#endif return best_value; } diff --git a/include/negamax.h b/include/negamax.h index 78ed448..7b32233 100644 --- a/include/negamax.h +++ b/include/negamax.h @@ -32,6 +32,9 @@ extern const float infty; extern char negamax_ptn[9]; extern uint8_t negamax_search_depth; +// Limited by the per-level action scratch buffers in actions.c. +#define NEGAMAX_MAX_DEPTH 8 + extern void negamax_display_progress(const uint8_t cur_depth, const uint8_t init_depth, const uint32_t length); diff --git a/include/nn.c b/include/nn.c new file mode 100644 index 0000000..705f258 --- /dev/null +++ b/include/nn.c @@ -0,0 +1,122 @@ +/* + This file is part of ctak. + + 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 3 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 ctak. If not, see <https://www.gnu.org/licenses/>. +*/ + +#include "nn.h" + +#include "weights_5.h" +#include "weights_6.h" + +// =================================================================== +// Helpers +// =================================================================== + +#define RELU(x) ((x) = ((x) < 0) ? 0 : (x)) + +static float fast_tanh(const float x) { + // tanh via a degree-11 odd polynomial, least-squares fit of tanh on [-3, 3] + // (max absolute error ~4e-3), saturating to +-1 outside that interval. + if (x > 3.0f) + return 1.0f; + if (x < -3.0f) + return -1.0f; + const float x2 = x * x; + return x * (0.997136032f + x2 * (-0.305215124f + x2 * + (0.0832466371f + x2 * + (-0.0139947924f + x2 * + (0.00123106314f + x2 * -4.29748644e-05f))))); +} +// =================================================================== +// Input encoding +// =================================================================== + +inline uint8_t cell_idx_at(const tak_state_p state, const uint8_t loc) { + const uint8_t d = state->celldat[loc]; + if ((d & NUM_MASK) == 0) + return 0; // empty + return (uint8_t)(1u + 3u * (state->colours[loc] & 1u) + (d & STONE_MASK)); +} + +inline void nn_cell_idxs(uint8_t *out, tak_state_p state) { + const unsigned int n_cells = state->board_size * state->board_size; + for (unsigned int loc = 0; loc < n_cells; loc++) + out[loc] = cell_idx_at(state, loc); +} + +inline void nn_prepare_head(float out_head[3], tak_state_p state) { + const float inv_max_flats = + (state->board_size == 6) ? (1.0f / 30.0f) : (1.0f / 21.0f); + out_head[0] = (state->ply & 1) ? 1 : -1; + out_head[1] = (float)(state->white_count & 127) * inv_max_flats; + out_head[2] = (float)(state->black_count & 127) * inv_max_flats; +} + +void nn_prepare_input(float *cur_board, tak_state_p state, + const float embedding[NN_N_EMB]) { + const unsigned int n_cells = state->board_size * state->board_size; + nn_prepare_head(cur_board, state); + uint8_t idxs[36]; + nn_cell_idxs(idxs, state); + for (unsigned int loc = 0; loc < n_cells; loc++) + cur_board[3 + loc] = embedding[idxs[loc]]; +} + +// =================================================================== +// Implementation of small neural networks +// =================================================================== + +float eval_net(const float *board, const unsigned int n_inp, + const float *w, const float *biases, + const float *logit_w, const float logit_b, + const unsigned int n_dense) { + float dense1[FIVE_DENSE_NUM]; // FIVE_DENSE_NUM == SIX_DENSE_NUM + float z = logit_b; + + for (unsigned int d1 = 0; d1 < n_dense; d1++) { + float h = biases[d1]; + const float *wd = w + d1 * n_inp; + for (unsigned int fl = 0; fl < n_inp; fl++) + h += board[fl] * wd[fl]; + RELU(h); + dense1[d1] = h; + } + for (unsigned int d1 = 0; d1 < n_dense; d1++) + z += dense1[d1] * logit_w[d1]; + + return fast_tanh(z); +} + +// =================================================================== +// Interfaces to the two built-in evaluators +// =================================================================== + +float five_nn_fn(tak_state_p state) { + static float cur_board[FIVE_INP_NUM] NN_ALIGNED; + + nn_prepare_input(cur_board, state, five_embedding); + return eval_net(cur_board, FIVE_INP_NUM, &five_dense_weights[0][0], + five_dense_biases, five_logit_weights, five_logit_bias, + FIVE_DENSE_NUM); +} + +float six_nn_fn(tak_state_p state) { + static float cur_board[SIX_INP_NUM] NN_ALIGNED; + + nn_prepare_input(cur_board, state, six_embedding); + return eval_net(cur_board, SIX_INP_NUM, &six_dense_weights[0][0], + six_dense_biases, six_logit_weights, six_logit_bias, + SIX_DENSE_NUM); +} diff --git a/include/nn.h b/include/nn.h index 18e222a..9e576c1 100644 --- a/include/nn.h +++ b/include/nn.h @@ -18,79 +18,34 @@ #ifndef NN_H #define NN_H -#include <tak.h> -#include "weights_5.h" -#include "weights_6.h" - -// =================================================================== -// Helpers -// =================================================================== +#include <stdint.h> -void nn_prepare_input(float *cur_board, tak_state_p state); +#include <tak.h> -#define RELU(x) ((x) = ((x) < 0) ? 0 : (x)) - -/* - * tanh via a degree-11 odd polynomial, least-squares fit of tanh on [-3, 3] - * (max absolute error ~4e-3), saturating to +-1 outside that interval. - */ -static inline float fast_tanh(const float x) { - if (x > 3.0f) - return 1.0f; - if (x < -3.0f) - return -1.0f; - const float x2 = x * x; - return x * (0.997136032f + x2 * (-0.305215124f + x2 * - (0.0832466371f + x2 * - (-0.0139947924f + x2 * - (0.00123106314f + x2 * -4.29748644e-05f))))); -} +// Number of cell states: empty, then {black, white} x {flat, standing, road} +#define NN_N_EMB 7 // =================================================================== -// Implementation of small neural networks +// Input encoding // =================================================================== -static inline float eval_net(const float *board, const unsigned int n_inp, - const float *w, const float *biases, - const float *logit_w, const float logit_b, - const unsigned int n_dense) { - float dense1[FIVE_DENSE_NUM]; // FIVE_DENSE_NUM == SIX_DENSE_NUM - float z = logit_b; - - for (unsigned int d1 = 0; d1 < n_dense; d1++) { - float h = biases[d1]; - const float *wd = w + d1 * n_inp; - for (unsigned int fl = 0; fl < n_inp; fl++) - h += board[fl] * wd[fl]; - RELU(h); - dense1[d1] = h; - } - for (unsigned int d1 = 0; d1 < n_dense; d1++) - z += dense1[d1] * logit_w[d1]; - - return fast_tanh(z); -} +// somewhat internal, important for generating training data +void nn_cell_idxs(uint8_t *out, tak_state_p state); +void nn_prepare_head(float out_head[3], tak_state_p state); +void nn_prepare_input(float *cur_board, tak_state_p state, + const float embedding[NN_N_EMB]); // =================================================================== -// Interfaces to the two built-in evaluators +// Network // =================================================================== -static inline float five_nn_fn(tak_state_p state) { - static float cur_board[FIVE_INP_NUM] NN_ALIGNED; - - nn_prepare_input(cur_board, state); - return eval_net(cur_board, FIVE_INP_NUM, &five_dense_weights[0][0], - five_dense_biases, five_logit_weights, five_logit_bias, - FIVE_DENSE_NUM); -} - -static inline float six_nn_fn(tak_state_p state) { - static float cur_board[SIX_INP_NUM] NN_ALIGNED; +float eval_net(const float *board, const unsigned int n_inp, + const float *w, const float *biases, + const float *logit_w, const float logit_b, + const unsigned int n_dense); - nn_prepare_input(cur_board, state); - return eval_net(cur_board, SIX_INP_NUM, &six_dense_weights[0][0], - six_dense_biases, six_logit_weights, six_logit_bias, - SIX_DENSE_NUM); -} +// Evaluators for the two built-in networks. +float five_nn_fn(tak_state_p state); +float six_nn_fn(tak_state_p state); #endif diff --git a/include/nn_input.c b/include/nn_input.c deleted file mode 100644 index 2fbd8da..0000000 --- a/include/nn_input.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - This file is part of ctak. - - 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 3 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 ctak. If not, see <https://www.gnu.org/licenses/>. -*/ - -#include "nn.h" -#include "tak.h" - -/* - * Encode a board position into the network's input vector: - * [0] ply parity (-1 / +1) - * [1] white flats remaining, as a fraction of the total - * [2] black flats remaining, as a fraction of the total - * [3 ..] one scalar per cell for the top stone: - * 0 empty, +-0.25 standing, +-0.5 flat, +-1 capstone, - * + white, - black - * - * `cur_board' must have room for 3 + board_size*board_size floats. - */ - -// The per-cell scalar depends only on the top stone's colour, variant -// and occupancy, so it's a table lookup keyed on those three bits. -static const float cell_scalar[16] = { - 0.0f, -0.5f, 0.0f, -0.25f, 0.0f, -1.0f, 0.0f, 0.0f, // black - 0.0f, +0.5f, 0.0f, +0.25f, 0.0f, +1.0f, 0.0f, 0.0f, // white -}; - -void nn_prepare_input(float *cur_board, tak_state_p state) { - const float inv_max_flats = - (state->board_size == 6) ? (1.0f / 30.0f) : (1.0f / 21.0f); - const unsigned int n_cells = state->board_size * state->board_size; - for (unsigned int loc = 0; loc < n_cells; loc++) { - const uint8_t d = state->celldat[loc]; - cur_board[3 + loc] = cell_scalar[((state->colours[loc] & 1) << 3) | - ((d & STONE_MASK) << 1) | - ((d & NUM_MASK) != 0)]; - } - // Add input of flat counts and ply parity - cur_board[0] = (state->ply & 1) ? 1 : -1; - cur_board[1] = (float)(state->white_count & 127) * inv_max_flats; - cur_board[2] = (float)(state->black_count & 127) * inv_max_flats; -} diff --git a/include/pv.c b/include/pv.c new file mode 100644 index 0000000..9c120f5 --- /dev/null +++ b/include/pv.c @@ -0,0 +1,59 @@ +/* + This file is part of ctak. + + 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 3 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 ctak. If not, see <https://www.gnu.org/licenses/>. +*/ + +#include "pv.h" + +#ifdef RECORD_PV + +#include "nn.h" + +static pv_leaf_t published_leaf; + +static float terminal_value(const enum WIN_TYPE winner) { + switch (winner) { + case WIN_FLAT_BLACK: + case WIN_ROAD_BLACK: + return 1.0f; + case WIN_FLAT_WHITE: + case WIN_ROAD_WHITE: + return -1.0f; + default: + return 0.0f; + } +} + +void pv_capture_leaf(pv_leaf_t *leaf, tak_state_p state, + const enum WIN_TYPE winner) { + nn_prepare_head(leaf->head, state); + nn_cell_idxs(leaf->cells, state); + const uint8_t n_cells = state->board_size * state->board_size; + for (uint8_t loc = n_cells; loc < PV_MAX_CELLS; loc++) + leaf->cells[loc] = 0; + leaf->current_colour = (uint8_t)state->current_colour; + leaf->terminal = (uint8_t)(winner < 0xFF); + leaf->terminal_value = leaf->terminal ? terminal_value(winner) : 0.0f; +} + +void pv_publish_leaf(const pv_leaf_t *leaf) { published_leaf = *leaf; } + +const pv_leaf_t *pv_get_leaf(void) { return &published_leaf; } + +#else + +typedef int pv_disabled_translation_unit; + +#endif diff --git a/include/pv.h b/include/pv.h new file mode 100644 index 0000000..4be7b24 --- /dev/null +++ b/include/pv.h @@ -0,0 +1,47 @@ +/* + This file is part of ctak. + + 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 3 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 ctak. If not, see <https://www.gnu.org/licenses/>. +*/ + +#ifndef PV_H +#define PV_H + +#ifdef RECORD_PV + +#include <stdint.h> + +#include <tak.h> + +#define PV_MAX_CELLS (6 * 6) + +typedef struct pv_leaf_s { + float head[3]; + uint8_t cells[PV_MAX_CELLS]; + uint8_t current_colour; + uint8_t terminal; + float terminal_value; +} pv_leaf_t; + +// Capture a horizon leaf (winner == 0xFF) or an exact terminal leaf +void pv_capture_leaf(pv_leaf_t *leaf, tak_state_p state, + enum WIN_TYPE winner); + +// Publish and retrieve the leaf selected by the full-depth root search +void pv_publish_leaf(const pv_leaf_t *leaf); +const pv_leaf_t *pv_get_leaf(void); + +#endif + +#endif diff --git a/include/tt.c b/include/tt.c index b1f583e..8ad6c56 100644 --- a/include/tt.c +++ b/include/tt.c @@ -43,18 +43,28 @@ tt_entry_t *tt_seek(const uint64_t key) { return NULL; } -int tt_insert(const uint64_t key, const enum TT_FLAG flag, - const uint8_t depth, const float value, - const action_t action) { +tt_entry_t *tt_store(const uint64_t key, const enum TT_FLAG flag, + const uint8_t depth, const float value, + const action_t action) { tt_entry_t *e = &table[key & TT_SIZE]; - // Replacement scheme: keep a stale-but-deeper entry over a shallower new one. + if (e->gen == tt_gen && e->key == key) { + // The slot holds this very position: update it (gen and key are already + // correct). + e->flag = flag; + e->value = value; + e->depth = depth; + e->action = action; + return e; + } + // Empty slot, stale generation, or a different position: keep a deeper search + // of a foreign position over this shallower one. if (e->gen == tt_gen && e->depth > depth) - return EXIT_SUCCESS; + return NULL; e->key = key; e->value = value; e->action = action; e->gen = tt_gen; e->flag = flag; e->depth = depth; - return EXIT_SUCCESS; + return e; } diff --git a/include/tt.h b/include/tt.h index b8e1a2e..60b9b66 100644 --- a/include/tt.h +++ b/include/tt.h @@ -28,6 +28,10 @@ enum TT_FLAG { TT_EXACT, TT_LOWERBOUND, TT_UPPERBOUND }; +#ifdef RECORD_PV +#include <pv.h> +#endif + typedef struct tt_node_s { uint16_t gen; uint64_t key; @@ -35,6 +39,10 @@ typedef struct tt_node_s { uint8_t depth; float value; action_t action; +#ifdef RECORD_PV + // use for generating training data only + pv_leaf_t leaf; +#endif } tt_entry_t; // =================================================================== @@ -48,15 +56,25 @@ typedef struct tt_node_s { // Methods // =================================================================== -// Bump the generation counter, invalidating all entries (memsets the -// table on wraparound). Called from negamax_init when the board size -// (and hence the zobrist table) changes; entries are otherwise kept -// across plies on purpose (see negamax.c). +// Bump the generation counter, invalidating all entries. Called from +// negamax_init when the board size (and hence the zobrist table) changes; +// entries are otherwise kept across plies on purpose (see negamax.c). int tt_init(void); tt_entry_t *tt_seek(const uint64_t key); -int tt_insert(const uint64_t key, const enum TT_FLAG flag, const uint8_t depth, - const float value, const action_t action); +// Store a search result for `key', returning the entry it was written to, or +// NULL when the replacement policy keeps the current occupant instead. +// +// Replacement policy per slot: +// +// - generation and key match: always update +// +// - otherwise (empty slot, stale generation, or a different key): replace the +// occupant unless it is a deeper search of a different position, which is +// kept. +tt_entry_t *tt_store(const uint64_t key, const enum TT_FLAG flag, + const uint8_t depth, const float value, + const action_t action); #endif diff --git a/include/weights_5.c b/include/weights_5.c index 7e254f8..5648011 100644 --- a/include/weights_5.c +++ b/include/weights_5.c @@ -1,289 +1,294 @@ /* generated by nn_train.py, do not edit by hand */ -/* v098, val_corr=0.9123 */ +/* v010, val_corr=0.9136, rate=0.7714 */ #include "weights_5.h" +const float five_embedding[7] = +{ + -0.352801919, -0.851079345, -0.213445649, -1.34711647, 0.884809256, 0.307861924, 0.994306982 +}; + const float five_dense_weights[FIVE_DENSE_NUM][FIVE_INP_NUM] NN_ALIGNED = { - {-0.017687507, -2.7726233, -3.18424511, -0.694748878, -1.08251417, 0.252432942, -1.59602427, 0.613304615, - -0.0209749062, 0.501225889, 0.428674579, 0.709405005, 0.876026511, -0.0243752133, 0.13531214, -0.0246725027, - -0.201236486, -0.210551634, 0.718519807, -0.160790935, 0.316674501, -0.765163124, -0.618982673, 0.612452507, - -0.169427812, -0.0110228499, -0.751906395, 0.12217132}, - {0.305975586, -1.02205753, -0.405607224, 0.760527909, -0.128717557, 1.30133402, -0.276660174, 0.451471746, - 0.238462925, -0.126678392, 1.1251303, -0.140467376, -0.202640042, 0.32708323, 0.473448724, 0.89310801, - 0.40762493, 0.160802051, -0.0101828268, 0.379917711, 0.201904431, 0.664304197, 0.185341775, 0.560308635, - 0.395599753, 0.780205846, -0.653292239, 0.154138252}, - {-0.0196500644, -2.70877528, -3.66019845, -0.232481405, 0.00873931497, 0.247044995, 0.418322444, -0.051310055, - -0.342084587, -0.203185201, 0.0428542271, -0.434620678, -0.298130661, -0.460759789, -0.123185799, -0.176625043, - 0.0745659843, -0.888225198, -0.699625373, 0.0152557986, -0.402519584, -0.883676648, -0.559899509, -0.0690891743, - -0.24945198, -0.499730766, 0.203070641, -0.438601047}, - {-0.0378410481, 0.831621885, -5.39371777, -0.464221478, 0.331321567, -0.00553717278, 1.75570929, -0.523817182, - 0.584070861, 0.221932322, -0.800884664, -0.179113105, -0.1847056, -0.841097295, 0.201882526, -1.02349102, - -0.177126676, -0.0751212165, 0.672071815, 0.079591684, -0.297446489, -0.393640786, -0.622128308, 0.083089076, - 0.660041988, 0.11959824, -0.302385867, -1.13328278}, - {0.184374928, -2.11827135, 0.207292944, 0.17241393, -0.291959703, 0.163224146, 0.584029436, 0.86053741, - -0.253029168, -0.380560517, -0.487380594, 0.595696032, 0.623381972, 0.649845064, 0.179142594, -0.428994745, - 0.778253853, 0.990351677, 0.215283349, -0.0454968773, 0.656820476, 1.17538595, 0.735170186, -0.131170705, - -0.295662344, 1.20901132, 0.301301599, 0.922978342}, - {-0.0477715209, 0.299437135, 0.096707128, 0.0406936333, -0.175266534, -0.113555215, -0.235045731, -0.163982585, - -0.103490964, 0.118130855, -0.123898365, -0.200351447, -0.062734738, 0.102499172, -0.045119781, -0.267439753, - -0.128720567, -0.166820407, -0.167664438, -0.0568483882, -0.055328548, -0.0406381711, -0.156312823, -0.213186815, - -0.625713587, -0.381198198, -0.178947985, -0.162815019}, - {-0.0408952162, -3.45756292, -1.34200835, 0.0731342584, 0.0544441901, 0.110050783, 0.344100058, -0.725269496, - 0.437899977, -0.537460029, -0.296831816, -1.6424371, 0.172409892, 0.131585047, -0.445751727, 0.217447102, - -0.115501568, -0.855109751, -0.481499732, 0.511147738, 0.264388591, 0.727477372, 0.0770836025, 1.02176356, - 1.38628113, 1.76832759, -0.0538811684, 0.755088449}, - {-0.0282496195, -1.09568977, -3.95432925, 0.470584571, 0.272390813, -0.0829138905, -0.253350347, -0.641710341, - 0.260734975, -1.08649123, -0.397490114, -0.676264048, -0.49863717, 0.109579749, 0.0378338993, 0.486935675, - 1.04397559, -0.0339488238, 0.493080288, -0.246185184, -1.268906, -0.629128814, -0.523642719, -0.320555538, - 0.0850056484, -0.432449639, -0.227868319, -0.684521019}, - {0.126250565, -2.1314621, -9.1196804, -0.0801002756, -0.424118429, -0.138885885, -0.427886397, 0.42626527, - 0.533555806, -0.171532229, 0.00831813738, -0.16042164, -0.346267283, -0.441860348, -0.282887459, 0.063266173, - 0.64383918, 0.699429333, 0.281832844, -0.0484559052, 0.0195856858, 0.29366672, 0.43402198, -0.270008564, - 0.196564257, 1.18874121, 0.194568455, 0.817874253}, - {0.0998077914, 2.48213387, -5.02890444, 0.589919031, 0.274164915, -0.0167664476, 0.313575327, 0.380198032, - 0.580552399, -0.279666334, 0.0576464459, -0.340578943, -0.303388894, 0.0579651445, -0.192700222, 0.259907186, - 0.127785906, -0.0286185667, 0.139277443, -0.222778827, 0.191977218, 0.128683344, -0.013065299, 0.525240898, - -0.892806232, -0.124871373, -0.37049827, 0.667414367}, - {0.048153121, -1.46441472, -1.83816898, -0.23596105, -0.0525623932, 0.361069888, -0.404454976, -0.184483185, - 0.0100732222, 0.694974899, 0.410766572, 0.378488213, -0.586687922, 0.854564071, 0.794285059, -1.23339212, - 0.296620727, 0.896819651, -0.216232404, -1.00979805, -0.610438168, -0.904467702, -0.218700871, -0.0166311953, - -0.401803017, 0.120803088, -1.14684284, 0.0952027217}, - {-0.0324007645, 0.0488809049, 0.157106653, -0.00516019529, 0.0421396233, 0.00136998552, -0.0102051962, 0.0717003495, - -0.0423207618, 0.0142850317, 0.0516465977, 0.0280033927, -0.00678033894, -0.00974127091, 0.0116989752, -0.0127554797, - -0.00596701447, 0.0552557409, 0.0221525282, 0.0615149625, -0.0233675968, 0.0794110745, 0.12168695, -0.34219563, - -0.395809859, -0.362125039, -0.346448332, -0.399106383}, - {-0.0267151631, -2.56482983, -4.88011217, 0.09028209, 0.179611534, -0.318436384, 0.45468685, 0.520879626, - 0.0488886647, 0.09951251, 0.041528035, 0.0312570594, 0.539736152, -0.40504545, 0.340407491, 0.0347913429, - 0.485069156, -0.301279783, -0.0366242714, -0.382876962, 0.444674641, 0.628474474, 0.459671855, -0.327964932, - -0.628498316, 0.402651817, -0.0973869339, 0.813784003}, - {-0.183114827, -1.98381853, 0.415526628, -0.0883045942, 0.0517880172, 0.319699973, 0.136292756, -2.29299068, - -0.0727772936, -0.110973671, 0.108571291, -0.322578281, -1.352795, -0.332373887, -0.49182418, 0.207086965, - -0.253715366, -2.09938145, -0.177402422, -0.0757525638, -0.430394381, -0.404820919, -1.00606346, 0.207171142, - 0.350688815, -0.0484649427, 0.183782265, -1.15140569}, - {-0.0362447836, 1.06354749, -1.23299289, 0.465078086, 1.0613625, -0.75183028, -0.883582592, 1.64945459, - 0.30923453, -0.150417224, -0.567531049, -0.0845861062, 0.763042986, -1.40916693, -0.217184648, -0.339353561, - 0.705073178, 1.47145176, -0.0275013223, 0.215996116, -0.62504226, 0.786813736, 1.11716723, 0.430455655, - 0.426445484, 1.09807837, 0.682189643, 0.793541014}, - {0.0605719425, -1.5270201, -2.02333045, 0.334690273, 0.097131744, 0.0878544375, 0.664643764, -1.27231848, - 0.0590001158, 0.95432061, 1.482342, 0.751511157, 0.282043576, -0.325293154, 0.0423535518, 0.445080817, - 0.516905546, 0.0423260964, -0.00436464325, 0.209859475, 0.405998886, -0.2421491, 0.38215062, -0.624033511, - 0.980600119, 0.395838708, 0.737524211, -0.0301853959}, - {-0.264390856, 0.00447343616, 0.572782934, 0.0531108305, 0.143604264, 0.0561246835, -0.474388719, -0.212672651, - 0.0809418857, 0.0370290391, -0.390509278, -0.989919364, -0.482206255, 0.164907277, -0.360560507, -0.355930209, - -0.627535582, -0.124950886, 0.120545797, -0.0971757472, -1.15071845, -0.749056876, -0.35757491, 0.113903187, - -0.0105860615, -1.038571, 0.469155639, 0.342842788}, - {0.168753788, -2.73271942, -0.158344552, 0.394571871, 0.153508767, -0.486535609, 0.0107338214, 0.183814526, - -0.0703299269, 0.328833371, -0.14791061, 0.0572811551, 0.496548027, 1.83897889, 0.661762834, 0.845462322, - 1.00526989, 0.24658905, 0.126682073, 0.509696007, 0.686646461, 0.792747617, 0.400123119, -0.0646533072, - 0.0701639652, -0.13613975, -0.0214697868, -0.410822034}, - {-0.126906678, -0.0759056807, -0.475337893, -1.24434912, 0.120860711, -0.0816293582, 0.370602846, 0.126830906, - -1.12032413, -0.452190071, 0.378851265, 0.0787992105, 0.452513158, -1.59483504, -0.925934017, 0.0985669047, - -0.0592967831, -0.063750416, -0.806170225, -0.904370308, -0.0288544223, 0.140288487, 0.204684362, -0.737900376, - -1.18681502, 0.311962366, -0.23348704, 0.325737089}, - {0.042846255, -1.01401317, -0.787675023, 0.320858449, 0.600958943, 1.01925588, 1.41290712, -0.625177979, - -0.527758777, -0.245332941, 0.231125176, 1.03572583, 0.0886845738, -1.55435121, -0.119136661, -0.516718507, - 1.08180618, 0.321707219, -0.964534223, -0.77063024, -0.568375289, 0.638082147, 0.399400443, -0.504099786, - -0.93797797, -0.461517245, 0.552734435, 1.21082044}, - {-0.0027246878, -0.822401404, -5.78269768, -0.367361158, 0.0395893529, -0.632945657, -0.79833281, -0.960032165, - 0.661225736, 0.500198066, 0.058203496, 0.127557114, 0.105093434, 0.660576642, 0.888604403, 0.400705993, - -0.280454457, 0.440834939, -0.725442648, -0.461237013, -0.481059194, -0.216810524, -0.146271884, -1.33439291, - -0.323164523, 0.0793281496, -0.707304299, 0.26752919}, - {0.0547249876, 1.82959437, -3.78089833, 0.828881621, 0.294022411, 0.608274877, 0.0549198091, 0.63434273, - -0.005911869, 0.297854215, 0.802860022, 0.964098036, 0.629039109, -0.419598252, 0.104968935, 0.726039469, - 0.228668824, -0.102511063, -0.448736191, -0.677962899, 0.47755897, 0.102762185, 0.0820724443, -0.462765187, - 0.160549238, 0.679351926, 0.450417966, -0.00261037424}, - {0.0740314499, 0.125401676, -6.3721447, 0.130388469, -0.0373040326, -0.25745067, 0.415108651, 2.04560685, - 0.0510546863, 1.47437394, -0.454688609, -1.12459505, 0.154450417, 0.380756974, 0.356446415, -0.0130162379, - -0.143411413, -0.250218809, -0.0217493474, 0.19030562, 0.974928677, 0.225417852, -0.636997759, 0.965796292, - 0.54893893, -0.320783466, 0.22444652, -0.0994358808}, - {0.088921845, 0.501326561, 0.0984886885, -0.0642404482, -0.0899887159, 0.00427165208, 0.0686437488, 0.0139860315, - -0.0470670536, -0.0333355293, 0.06151684, 0.0388135798, 0.0823084116, 0.0565618165, 0.0938319117, 0.113721102, - 0.0392451994, 0.0705398023, 0.00511221588, 0.0808409825, 0.042969346, 0.307290494, 0.399382472, 0.641138136, - 0.585508347, 0.644836426, 0.561508, 0.290235937}, - {-0.0653936565, -7.93236113, 0.182766557, -1.34688294, -0.906135321, -0.678245366, -0.878894389, -0.463245302, - 0.508853018, -0.663949072, 0.52267462, 0.601760328, -1.02037764, 0.266515017, 0.697541535, -0.0412226915, - 0.145522296, -0.621190965, -0.470039606, 0.289924204, 0.502045512, 0.254058033, -1.25108385, -0.0010011862, - 0.235496506, -0.0438185334, 0.0435181446, 0.0483496264}, - {-0.0155108329, -5.65538692, -3.72422981, -0.229338065, -0.142547324, -0.0605753995, 0.774035037, 0.605769455, - 0.649825454, -0.32895577, -0.516424835, -0.467582762, -0.492001206, 0.315332323, 0.305014402, -0.826091528, - 0.470321804, 0.592903495, 0.539531887, 0.114279613, 0.753841937, -0.0721266344, 0.203808784, -0.191284075, - -0.400418758, 0.962654769, 0.540521801, -0.192482814}, - {-0.0841482431, -3.11816883, 2.52213597, 0.221693054, 0.39964658, -0.126087815, 0.396655947, -1.00298798, - -0.0180124193, 0.0227001999, 0.101735108, -0.504606009, -0.795736074, 0.26131025, 0.0629129708, -0.182299256, - -0.58673501, -0.379303366, -0.729669929, -0.605720103, -1.0318737, -1.10907018, -1.38460314, -1.86592114, - -1.74185932, -1.66521406, -2.83507466, -1.5353936}, - {-0.0271777753, -1.65670753, -0.138010547, -1.38469684, 0.871935904, 0.606624186, 0.542895257, 0.734829485, - 1.23499441, 0.341616333, -0.0553627461, -1.2573204, 0.975557566, -0.716557145, -1.01092935, -0.102436081, - -0.756014705, -0.881072462, 0.145312831, 1.41733027, 0.541355014, 0.752016008, -0.619402647, 0.801285207, - 0.771121264, 0.549716473, -0.60874182, -0.553624809}, - {0.243606463, -3.29466152, -8.61932087, 0.288695276, 0.121720523, 0.830552101, -0.176525846, -0.209575742, - -0.368370116, 0.531418085, 0.00779051706, 0.153792143, 0.449948102, 0.128135011, 1.1711061, 0.0699489042, - 0.0200876687, -0.361263305, 0.574860215, 0.273856223, -0.179232404, 0.330728799, -0.162115857, 0.0653959066, - 0.245886594, 1.64160967, -0.575041175, -0.489283413}, - {0.0341560878, -0.321620941, -0.0295257904, 1.00346386, 1.44676077, 0.791196287, 1.43390977, 0.750319719, - 0.439511091, 0.828590572, 0.759809554, 1.12685275, 0.702608287, 0.368128806, 0.165622681, -0.404972076, - -0.400121003, -0.533207476, -0.406070203, 0.291544706, -0.191007957, -0.705734134, -0.793099105, 0.45004946, - -0.364261448, -0.528324485, -0.760637164, -0.856404066}, - {-0.154523775, -7.1212039, -2.95486689, -0.102876522, -0.578914523, -0.776420832, 0.0445834026, -0.941871524, - -0.243689641, 0.0435830429, -0.0094085047, -0.357761919, 0.327104092, 0.278522372, -0.414925843, 0.00678584166, - -0.189761534, -0.30789718, 0.246894091, -0.0841052905, 0.547891974, 0.0347051807, 0.193204001, -0.786870241, - -0.19485724, -0.850490034, -0.185127094, -0.0103808334}, - {0.154930294, -2.91853547, -2.62348175, -0.295651615, 0.619947314, 0.568406582, -0.621971428, -1.31148922, - -0.450834066, 1.25342667, 0.638317049, 0.321380526, -0.0133571848, 0.0633455813, -0.230508134, 0.775423288, - -0.129944548, -0.623022139, 0.157232463, 0.693214595, 0.962514102, 0.968111694, 0.442186743, 0.606270015, - -0.0221443865, 1.13181746, 0.17731142, 1.04531753}, - {-0.246409684, -6.74617147, -1.41480792, -0.708906829, -0.492658496, -0.835357666, -0.793199182, 0.467104375, - -0.669779599, -1.29326534, -1.48258626, -0.305342972, 0.621524036, -0.870909035, -0.791852295, -0.92264545, - -0.115044825, 1.05326974, 0.191751197, -1.09994972, 0.0167585313, -0.168009833, 0.528036594, -0.0911829546, - -0.305217266, -0.371205837, -0.628309309, -0.511189222}, - {-0.0183637235, -5.97602224, -1.54999542, 0.27182433, 0.700630844, 0.587660611, -0.899789035, 1.0387249, - 0.454046667, 1.03051603, 0.699271917, -0.0274554752, 0.131003663, -0.302187681, 0.0699125826, -1.54073298, - -0.831891894, 0.151683837, -0.519377828, -0.708282888, -1.0392046, -1.00961077, -0.302910656, 0.172927633, - 0.320221275, -0.775013685, 0.952375174, 0.952872753}, - {0.0252061635, 0.463108838, -1.40316641, 0.34715414, -1.18511271, -1.52132845, -0.0562454909, 0.533362091, - -0.115779579, -1.35110748, -0.104003109, 0.343484044, 0.512594402, 0.22683759, 0.285169482, -0.0378336683, - 0.800351322, 0.825654924, -0.0724470392, 0.333263576, 0.426456064, 0.316955447, 0.165265813, 0.210159793, - -0.0645591319, 0.241320148, 0.183158502, -0.323120356}, - {0.0471641235, -2.09173703, -5.94888783, 0.0363560803, 0.764787674, 0.434283227, 0.118441857, 0.369244814, - 0.16298613, 0.406094819, 0.15197961, 0.386405736, -1.06589234, 0.909065962, 0.2885952, -0.681465864, - -0.53678304, 0.466727346, -0.853846252, -0.349436104, -0.697404444, -0.223913014, -0.414722085, -1.25803828, - 0.211821601, 0.147400647, 0.665444076, 1.65016246}, - {-0.132126927, -2.40161395, 1.52905095, 0.302902311, 0.0542309545, -0.789496779, -0.349242747, 0.379570693, - 1.09054339, -0.873692811, -0.557734251, 0.136953861, 0.392721862, -0.594784379, -0.300673991, -0.769517303, - 0.534889638, 1.03687501, -0.000797802815, 0.0740987659, -0.972185016, 0.100398093, 0.623595774, -0.0817591697, - 0.459222734, -0.156905219, -0.556149125, -0.195875064}, - {0.168103874, -3.38225269, -7.45486927, 0.0790208653, -0.0613481291, -0.353706211, -0.173535258, -0.133646145, - 0.383227289, -0.187396392, 0.787273526, 0.758880019, 0.0788550526, 0.422653973, -0.95701468, -0.121355377, - -0.180833474, 0.213991895, 0.483774126, -0.603395939, 0.393965006, 0.342686743, -0.334660411, 1.14106202, - 0.873602152, -0.116890632, -0.607477129, 0.686908424}, - {0.0467888638, -2.20089507, -6.09024811, 0.53390193, -0.0421328396, -0.868572891, -0.188594535, 0.317230076, - 0.399568319, -0.428844392, -0.156383097, -0.198275939, 0.0449278951, 0.10434451, -0.0901117474, 0.165104106, - -0.51992178, 0.64246875, -0.121786334, -0.349139869, -0.468592167, -0.249722928, 1.30048633, 0.606188893, - 0.635607362, -0.710971713, 0.583102643, 0.605073988}, - {0.0656126142, -3.28207159, -4.81875515, -1.07968974, -0.145864934, 0.154669747, -0.280969352, 0.320753038, - -0.212449029, -0.167698443, 0.0577522963, 0.0185784008, 0.337892562, -0.397121102, 0.431193471, 0.0942988172, - 0.12814635, 0.339847893, -0.115297936, -0.532593846, 0.440031469, 0.317035586, 0.112250544, -0.488547266, - -0.292454779, -0.132742479, 0.273396432, 0.333468407}, - {-0.186328053, 0.441147774, 0.448496431, -0.146070749, -0.0183207784, -0.522439063, -0.24307026, -0.214465037, - -0.200205803, -0.2869699, -0.589705765, -0.304230481, -0.72798723, 0.158653632, -0.486724168, -0.909697711, - -1.16272378, -1.2644918, -1.39410186, -1.05124629, -1.00886631, -1.58502269, -1.22878945, -0.314202309, - -0.460029751, -0.891982436, -0.128585771, -0.0126661994}, - {0.00504760165, 0.144426256, -0.246634945, 0.35747838, -0.820366442, 0.433128923, -0.046665296, 0.254659474, - -0.371240526, -0.832461119, 0.402360827, -0.797696292, -0.00146429334, 0.438332766, -0.751465261, -0.465652227, - -0.0487003475, -0.0501887538, 0.337998003, 0.453143507, -0.205787376, -0.415506274, -0.392902464, -0.175161168, - -0.69014442, -0.761076927, 0.373483717, -0.439977497}, - {0.135555208, -0.6259197, -0.51970458, -0.194122896, 0.164750054, 0.143113479, -0.045417577, -0.738947809, - 0.227071077, 0.371185422, -0.29501313, 0.0408539958, -0.70412004, 0.486674011, 0.94399339, 0.75646466, - 0.485905141, 0.0377950147, 0.0715787932, 0.327870905, 0.665078521, 0.371901304, 0.542856693, -0.142165869, - 0.908733845, 0.582243383, 0.33418268, 0.139892861}, - {-0.0648913607, -0.230966255, -0.259601831, -0.0745151713, 0.0472630002, -0.321782976, -0.306530833, -0.157662004, - 0.0254050847, 0.324624449, -0.0709752813, -0.141884401, 0.0507391579, -0.0757056847, -0.157681957, -0.119420625, - -0.262200207, -0.0173902176, -0.0164132658, 0.193601683, 0.0987579525, -0.175446317, -0.131138459, -0.0735060126, - -0.277159184, -0.252765417, -0.369196773, -0.257921219}, - {0.0844778866, 0.892540693, -1.32926595, 0.456822187, -0.693393826, -0.585095227, -0.125464708, -0.528994083, - 0.319878489, 1.00453937, 0.309393376, 0.126583681, 0.435089469, 0.289659441, 0.0382879786, -0.516187608, - -0.472498536, -0.391363978, 0.923955619, -0.0638227761, -0.174506798, 0.584563315, 0.0489761271, 0.303213388, - 0.216605738, 0.0317115039, -0.321899742, -0.564079046}, - {0.0189528465, -3.0205822, -1.68587577, -0.251698524, -0.475433588, -0.971832633, -1.07393265, -1.38159871, - -0.768532395, -1.3485446, 0.672052383, 0.750761509, 0.0974989012, -1.22051561, -0.304549128, 0.0599426366, - 0.848886073, 0.148535281, -1.01976526, 0.19406943, 1.04196799, 0.341549993, 0.302664399, -2.00212812, - -0.044665616, 1.33579087, 2.18833113, 0.196794346}, - {0.0786969289, 0.207598895, 0.486236781, 0.0531402193, -0.0630944371, 0.136102006, 0.185946807, 0.0467807129, - 0.157476917, 0.132640272, 0.0891285166, 0.127292573, 0.0694935322, 0.149040863, 0.145731449, 0.0687535703, - 0.101524286, -0.00716298493, 0.592883408, 0.49983862, 0.493310422, 0.510374248, 0.475238651, 0.0772901922, - 0.0741703436, 0.0470497161, 0.110227838, 0.102081731}, - {-0.103361376, -2.65235138, 2.07695842, -0.81054908, -0.313742459, -0.763440788, -0.25050804, -0.59270668, - -0.408340752, -0.354886025, -0.75516212, -0.6777547, -0.946402073, -0.154148415, -0.291553974, -0.731240928, - -0.48112008, -0.576338828, 0.555637181, 0.585384488, 0.096024178, 0.0230386611, -0.179106727, -0.642500818, - -1.17103994, -0.360282987, -0.405690193, -0.128080323}, - {0.120190412, 2.18909144, -8.46683598, 0.690627515, 0.534538269, 0.510531306, 0.210100189, 0.479442775, - 0.41575247, 0.149613187, 0.134456545, 0.483546972, 0.396226913, 0.683880866, -0.0265977494, 0.13370809, - 0.370286822, 0.372812271, 0.44955197, 0.32776165, 0.252264082, 0.323883742, 0.545395017, 0.556549609, - 0.713437796, 0.263677776, 0.729170442, 0.803847492}, - {-0.00990546681, -1.16817534, -3.404778, 0.00472787581, 1.45350289, 0.407304466, 0.117262423, 0.6980654, - -0.755611539, 0.373543829, 0.576888978, -0.259640276, 0.80543679, 0.58156544, 0.613461792, -0.319180429, - 0.0519511364, 0.0127357244, 0.138550594, -0.503188372, -0.34847036, -0.193370789, -0.272770047, -0.144270316, - 0.307402313, 0.333475471, -0.0797477737, -0.451472282}, - {-0.0810644105, -5.36067104, 3.63138127, -0.767825305, -0.730496109, 0.0861925483, -0.584841967, -0.235753119, - -0.637050331, -0.281115383, -0.364885002, -0.565459013, -0.305406958, 0.171418488, -0.0766901374, 0.0344355367, - -0.217474326, -0.263764828, -0.272660613, -0.128348693, 0.198026255, -0.154312968, -0.705682576, -0.0981741697, - 0.0157494843, 0.0139397345, -0.225139171, -0.429867446}, - {0.0494806357, -2.62793899, -3.30275679, -0.676860929, -0.242857337, -0.999933064, 0.453973234, 0.0451071896, - 0.915692508, 0.184754789, 0.301989079, 0.374045968, -0.240403205, 0.609903097, 0.50146383, 1.25471568, - 0.352856666, -0.193567917, 0.592190742, 0.410122901, -0.271732777, -0.207192421, -0.91588062, 0.171692029, - 0.970233381, 0.633579373, 1.08946228, 0.914925992}, - {-0.128533393, -4.59956074, -2.25347877, -0.857251048, -1.41797447, -2.11075878, -1.90714383, -1.73755312, - -0.64231056, -0.21889554, 0.0228042938, -0.325732946, -0.130355373, 0.54209137, -0.396911502, 0.307778239, - -0.332568079, 0.079002291, 0.73528564, 0.116297394, -0.634565234, -1.46313703, 0.204324812, -0.150854513, - 0.996054411, -0.518678546, -0.318085939, 0.120147653}, - {-0.185454667, -9.22687817, -0.771052778, -0.477409929, -0.372024924, -0.277389944, -0.343998075, -0.862956285, - -0.630431712, -0.155055434, -0.634139299, -0.43316412, -0.50519067, -0.437925428, -0.199404866, -0.337778926, - -0.259445459, -0.511975288, -0.529878914, -0.478819311, -0.437376946, -0.463468611, -0.42474857, -0.668455541, - -0.534354448, -0.540537477, -0.499020278, -0.60747695}, - {0.217490569, 2.23294711, -1.73882985, 0.354090869, 0.511141896, 0.599470794, 0.54344368, 0.325394273, - 0.77486825, 0.729058921, 0.719261944, 0.751142442, 0.613670409, 0.818025529, 0.808399796, 0.691641152, - 0.767163217, 0.672254205, 0.791349888, 0.961657524, 0.684984148, 0.744035125, 0.633737922, 0.445100725, - 0.764385223, 0.599274218, 0.569571316, 0.36910665}, - {0.0680011883, -0.141525134, 0.608115494, 0.106840186, -0.061644841, 0.311127216, -0.0361108258, 0.255941838, - -0.254869759, 0.0517963171, 0.112334773, 0.279684216, 0.466534257, 0.45050621, 0.206787363, 0.24129279, - 0.2476044, -0.000249022385, -0.0412789732, -0.120305732, 0.403608739, 0.420840859, -0.0191493798, -0.176183328, - -0.0729398727, 0.517172635, 0.125035092, 0.00305919233}, - {0.136051759, -0.0154735642, -1.08757341, -0.746539235, -0.589996576, 0.321027815, 0.757336795, 0.248112336, - -1.42974126, -0.225172669, 0.400551528, 0.481706113, 0.802500308, -0.993251145, -0.414106816, 0.114978746, - 0.0362451002, 0.223054335, 0.259547591, 0.0493675098, 0.021725541, -0.141420424, 0.141650572, -0.383692712, - -1.13459575, -0.370508611, 0.531831622, -0.394069403}, - {-0.0247515328, -3.75203705, -3.28242469, -1.09618807, -0.0671465099, 0.317322344, -0.53469032, -0.403174758, - 0.290458262, -0.059117496, -0.284698397, 0.418337703, 0.331433296, 0.201873526, 0.0269236341, -0.131931692, - -0.401278794, -0.542468548, 0.0979440659, -0.375371873, 0.106137544, -0.0227250904, -0.0387178957, -0.770952106, - 0.473305196, -0.14553991, 0.0323893614, -0.0983058661}, - {0.121550478, -1.20097578, -2.96541047, -0.981075048, 0.95280093, 0.75922364, 0.0870448053, 0.896997392, - 0.7241624, 0.315399319, 0.311144173, 0.356648207, 0.169853419, 0.461099893, -0.353262663, 0.620792806, - -0.141449422, -0.524455607, -0.170073077, 1.27285218, 0.210375085, 0.0834764838, -0.102093987, 0.0176223777, - -0.141467556, 0.746384025, 0.170173422, -0.69785428}, - {-0.0791102052, -0.347374827, 0.107073911, 0.233195081, -0.206529081, -0.30429247, -0.497484356, 0.151661664, - -0.5368101, -0.0362392329, -0.123587944, -1.00701988, 0.0480095968, -1.06661069, -0.659112275, -0.321277708, - -0.622343838, -0.627477169, -0.541736662, -0.709596395, -0.571051478, -0.710240304, -0.452208102, -0.527482331, - -1.0322777, 0.00206571748, -0.231442511, -0.497865587}, - {0.0845473409, -1.38251448, -3.05260706, -0.0213376638, 0.744133651, -0.601952314, -0.581485391, -0.629590273, - 0.308812827, -0.246839851, 0.53752625, -0.445156962, 0.722199798, 0.375423521, 0.0240628216, 0.416546077, - -0.438310236, -0.272160798, 0.879133999, 0.289178818, 0.154044807, 0.517107129, 1.06396961, 0.161833867, - 0.856201231, 0.824694753, -0.569748759, 1.1690824}, - {0.0797297731, 1.23410141, -0.649697781, -0.785597503, 0.0405770466, 0.189385891, 0.0761621445, -0.21260345, - -1.92817712, 0.354788899, -0.0287855789, -0.436804414, -0.484741211, -0.368482411, 0.0218798611, 0.178884551, - -0.500666261, -0.526111066, -0.113748975, -0.143456414, 1.12657678, 0.0987133533, -0.176197022, -0.0326661766, - -1.00384998, 0.378343344, 0.369729102, 0.0732632577}, - {0.0749957487, 0.647937, -0.139397129, 0.149107605, 0.117675401, 0.0703874156, 0.155242607, 0.391989201, - -0.0147751728, 0.248808801, -0.0176097173, 0.354990423, 0.105021313, 0.310541123, 0.479488283, 0.399166375, - 0.623566747, 0.550043166, 0.490510315, 0.267156988, 0.420536071, 0.411517382, 0.211521819, 0.0443741903, - 0.315481931, -0.122099027, 0.219476625, -0.0325079039}, - {-0.314885944, -9.91029453, -1.01080608, -0.535474598, -0.661661565, -0.0400171913, -0.684226394, 0.0739472285, - -0.637683392, -0.234634548, 0.262685686, 0.352341652, -0.384370744, -0.684700787, -0.639763236, -1.006724, - -1.14319217, -0.602748215, -0.278669477, 0.439627349, -0.624651015, -0.688860774, -0.479809672, -0.274525553, - -0.237743154, -1.14651179, -0.605139911, 0.308806986}, + {-0.0327966809, -0.849028409, 0.320328206, 0.0664111227, 0.155971751, 0.136044472, -0.00183201977, 0.0259891637, + -0.103044406, -0.0878473818, -0.111988924, -0.0281787626, 0.0233191121, 0.0340672508, -0.116517693, 0.0786981806, + -0.033087898, -0.0191416461, -0.0418186784, 0.0299366601, 0.129078865, 0.210277751, -0.0878753513, -0.16809991, + 0.183557138, 0.0773182437, 0.00833065622, -0.129053324}, + {-0.232422128, -0.370269567, 0.0436205007, 0.118296452, 0.276195407, 0.0144479489, 0.0654506907, 0.158887953, + 0.191858098, -0.0517155342, -0.244451404, -0.125561059, -0.0896938592, 0.0359078906, -0.210722655, 0.0546264574, + -0.000386662432, -0.203128114, -0.110388502, 0.0506071635, -0.0311401319, -0.220078811, -0.267996103, -0.0645042881, + -0.0720345527, -0.0144871268, 0.0379357971, 0.19760336}, + {0.143517047, 0.461968422, -0.0368016027, -0.0532734208, 0.0322881229, 0.0898226947, 0.0915338397, 0.0190777127, + 0.133846223, 0.142191216, -0.0915253386, -0.306803763, -0.0380108915, -0.129703835, -0.199441567, 0.000432319532, + -0.274927408, 0.151206657, 0.149368867, -0.0311864335, 0.10706003, -0.250302374, 0.0135332439, -0.0247054715, + -0.144645497, 0.012202654, 0.127603009, -0.261716813}, + {0.37940985, -0.762116253, 0.262937844, 0.196448311, 0.128611773, 0.143141568, 0.0354653858, 0.0714338198, + 0.0526182391, -0.0284320787, -0.0909866616, 0.00160601118, -0.0131304376, -0.0087870378, -0.0790232494, 0.170186028, + 0.0124546411, 0.24668017, -0.123244673, 0.114249617, 0.0507926047, 0.0301113036, 0.0254878979, 0.0012888104, + 0.0481759012, 0.132455707, -0.0525954738, -0.0175022539}, + {0.074402608, 0.260246873, -0.276144296, -0.0815522224, 0.197062433, -0.06345281, -0.100271419, -0.106380343, + -0.0884729922, 0.166795343, 0.0396520607, -0.0688257292, -0.22026509, 0.198000178, 0.190615907, 0.21529144, + -0.111042753, -0.104039237, 0.141359493, -0.0413182974, 0.0707519352, 0.176101342, 0.0630806237, 0.0369620025, + -0.00754281459, 0.26548624, 0.329247683, 0.0936621875}, + {0.196199581, -0.777962685, 0.222963452, 0.144866258, 0.299427301, -0.170608833, -0.0107537732, 0.0334474221, + -0.0545026101, -0.170532703, -0.0955553353, 0.0886289254, -0.144142464, -0.108097322, 0.36247465, 0.0131274331, + 0.00348300766, 0.0561952814, -0.147253215, -0.100337073, -0.0917735919, -0.139391139, 0.109980658, 0.0572417304, + 0.0207896996, -0.23384586, 0.0384591594, -0.230361491}, + {0.125237495, 0.255875736, -0.731187284, -0.00486617349, 0.064308472, 0.0240294375, 0.0664017275, 0.024102632, + -0.0158604141, 0.255495459, 0.219094172, 0.252941221, -0.180225447, 0.306452423, 0.087368533, -0.000120467637, + 0.107433036, 0.0402439535, 0.00487702852, 0.0846315399, -0.0223551802, 0.0620370544, 0.206932738, 0.0978457034, + 0.0170694906, 0.239671543, 0.183153465, 0.222705886}, + {-0.015978042, 0.495313853, -0.0727920309, -0.0695979372, -0.0934259444, -0.188311845, -0.0930854827, -0.0258944891, + -0.10962186, 0.00085817551, 0.113096714, 0.151041895, -0.0145681174, -0.0232806094, 0.116716482, -0.0321872234, + 0.0127832396, -0.127705872, 0.0211655833, -0.0124515155, 0.145493716, -0.00473560253, -0.199193865, 0.0644743815, + 0.266671836, 0.227437541, 0.104297556, -0.0958255976}, + {0.177132919, -0.477607757, 0.144386053, 0.160813257, 0.0411900207, -0.0375679731, -0.0877529383, -0.318532139, + 0.147213399, 0.0386164039, -0.14660874, 0.0772071481, 0.154627398, 0.0516344272, 0.25825727, -0.34341836, + -0.154420316, 0.0126185371, 0.114462152, -0.0210530255, 0.0650884658, -0.158406928, 0.20796679, 0.311294734, + -0.0307657998, 0.220018804, 0.0843197182, 0.0318490267}, + {-0.143348619, 0.57723707, -0.167421147, 0.0432183556, 0.0963400528, -0.0632183403, 0.0160206761, 0.153261781, + 0.17568545, 0.21255073, 0.139270023, -0.0744754225, 0.162524521, -0.356016427, -0.0135601126, 0.00355843524, + -0.0459654592, 0.182051256, 0.0428424925, 0.249047101, -0.0521542728, 0.0470912047, -0.00493410742, -0.0362312645, + 0.0551555827, -0.15180932, 0.0567677952, -0.127837405}, + {-0.177759811, -0.399459153, 0.362479776, -0.231218308, -0.0571496971, -0.215457886, -0.041013632, -0.155303478, + -0.00365723623, -0.0360452794, 0.086675778, 0.0946387649, -0.0596231334, -0.0528809465, -0.0608507916, 0.0974357054, + 0.15666078, 0.144844159, -0.233142078, -0.0683881193, -0.197862208, 0.0079383431, -0.0491543636, -0.237530455, + 0.0869428143, -0.0155181047, 0.14296563, -0.203361988}, + {-0.135610953, -0.515577078, 0.187429383, -0.386475623, -0.263546288, -0.189983353, -0.183594242, 0.0614784621, + 0.101142682, -0.0507217459, 0.0219676979, -0.0499989986, 0.0447606258, 0.00985840801, -0.118195668, -0.125932857, + -0.126534969, 0.162314728, -0.0228499919, 0.10694021, 0.0450071394, 0.0233288463, 0.0638386384, 0.181355521, + 0.161386982, 0.253616393, -0.0185366403, -0.0103700431}, + {0.116066948, 0.230095431, -0.577219665, -0.00176732871, -0.0354329534, -0.184090063, 0.0063507217, 0.0104860207, + 0.187727243, 0.164154455, -0.0068182447, 0.450454444, 0.0753799006, 0.161530346, 0.100438818, -0.242872655, + 0.235181689, 0.0256177448, -0.0181338936, -0.0927853286, -0.26312992, 0.136945054, -0.175206229, -0.0988252237, + -0.0631639063, -0.255761683, -0.163861006, 0.106347635}, + {-0.0344641991, 0.274572223, -0.345863968, -0.122686431, 0.0927828476, -0.192586705, 0.109781772, 0.0370874107, + -0.0434339605, 0.0172786023, 0.146092772, -0.284762889, -0.0538897403, 0.137360573, -0.125977561, -0.0443444066, + 0.336072117, 0.0786332563, -0.0310949516, -0.0446783081, -0.171269313, -0.0507826805, 0.25020206, 0.0226673484, + -0.21485059, 0.253266126, -0.237181798, 0.0952570587}, + {0.229862884, 0.0956004262, -0.272337317, 0.152852312, 0.155451983, 0.179551527, 0.231330171, -0.0967956483, + 0.212853789, 0.121237807, 0.0236221664, -0.0206717327, 0.334097952, -0.172256872, 0.160187855, 0.00531522091, + -0.0434170552, 0.272546887, 0.159098446, -0.0934782103, 0.168242097, 0.118903928, 0.0312071871, 0.336537451, + 0.31537354, -0.300766915, -0.00848419033, -0.115319557}, + {-0.355654269, 0.0498101525, -1.15184617, -0.20529826, 0.124733545, 0.0494314358, -0.155878648, -0.0435665511, + 0.0997435674, 0.165121913, 0.211950243, 0.244017676, -0.00921800453, 0.0786220804, 0.106060654, 0.0370148942, + 0.16638127, -0.0690576211, 0.101131886, 0.197833538, 0.184425309, 0.182694569, 0.273633808, 0.304017037, + 0.264311314, 0.180245876, 0.220357925, 0.169165999}, + {0.0476071648, 0.575009942, 0.0240747761, -0.00991211552, -0.118370712, 0.120641254, -0.182885289, 0.0205270611, + -0.162992015, 0.114992462, -0.0377214141, -0.111040004, 0.164136425, 0.198002562, -0.0279242396, -0.0862916112, + -0.0147629771, 0.176555663, 0.190007567, -0.0220985059, 0.10779497, 0.0305426661, -0.00504364446, -0.061483372, + 0.00220328593, -0.151691139, -0.18975012, -0.0886880532}, + {0.0942182094, -1.02115965, 0.0954312235, -0.0614463389, 0.0582791232, -0.211247653, 0.120826431, -0.0263190717, + -0.0429489613, 0.0438488349, 0.108414263, 0.286097229, 0.0486925356, -0.00557497423, -0.386668414, 0.116027936, + 0.159973353, -0.0378721952, -0.147194281, 0.0364145115, -0.138756022, 0.0840869546, 0.0988396257, 0.199231848, + -0.16837652, -0.218392238, 0.0364278741, 0.184144482}, + {0.0313743576, 0.464891553, -0.343129277, 0.0745515227, 0.133510157, -0.130122691, 0.204167008, 0.183675036, + 0.163727522, -0.0306751318, -0.0975880995, 0.300920784, 0.0403036363, 0.0165737085, -0.0506653748, 0.306970119, + 0.0347042456, 0.122590847, 0.137978703, -0.337507486, 0.072252959, -0.0753405616, -0.13210395, 0.0820999891, + -0.151417568, -0.228030756, 0.278595537, -0.166134581}, + {0.0749740228, 0.383804917, -0.244671553, -0.0318614729, -0.122872017, 0.111543134, -0.059995994, -0.207018256, + -0.15501295, -0.0396881066, 0.0188584458, -0.158006668, -0.136983156, -0.146490023, -0.119557768, 0.0274210349, + 0.189562142, 0.0979207903, 0.187646285, 0.305040985, -0.103709385, -0.1757451, 0.0526049584, 0.135050699, + 0.0981734395, -0.0416866057, 0.0656170994, -0.113399491}, + {0.111926369, 0.631603658, -0.213556454, -0.208104923, -0.00973121449, -0.0353202149, -0.0976402387, 0.0449560247, + -0.0954720303, -0.209680378, 0.18582876, -0.0749629959, 0.136392593, 0.118229896, -0.124932677, 0.0410939157, + 0.140551493, -0.0477282181, -0.0566262752, -0.0277045444, 0.0501787104, 0.103633828, -0.0787583515, -0.170118868, + -0.0399634317, 0.0881562829, 0.13748309, -0.0653122738}, + {0.0422349945, 0.268487811, -0.371606022, -0.240228266, 0.152170882, 0.181562856, -0.0260443613, 0.0313097723, + 0.0791669488, 0.00669098739, 0.0367588401, 0.100363895, -0.103536002, -0.160531029, -0.129726171, 0.115801521, + 0.183067113, -0.0064961426, 0.20049791, 0.0229622722, 0.224132463, 0.132634297, 0.0431498997, 0.292030126, + -0.20329383, -0.321311265, 0.380737811, 0.0533876978}, + {0.0423549935, 0.545092583, -0.0056740921, -0.0579509884, 0.186991572, -0.0511583164, 0.0363087691, -0.013058072, + -0.0792236552, -0.0565847829, 0.228842065, 0.102448463, -0.310782939, 0.0870372429, 0.00986074284, 0.0135655776, + 0.0871979743, -0.0234711487, 0.126438633, -0.049873516, -0.0199311897, -0.112338968, -0.102786727, -0.0444611907, + -0.080532141, 0.0333675183, -0.374372333, -0.0631537363}, + {0.320916384, -0.850471079, 0.36133939, -0.0264140144, 0.0270986855, -0.0817172825, -0.0899385288, 0.105402164, + 0.0404002219, 0.0527301542, -0.0897375271, 0.0683722198, -0.30544129, 0.16623114, 0.102807485, 0.138525441, + 0.0128897438, 0.048605945, 0.127630606, -0.0460698865, -0.0285244118, -0.0167056993, 0.136670813, 0.363035947, + -0.0855078623, 0.200538412, -0.0854634196, 0.0674120039}, + {0.17211771, 0.418086618, -0.987294972, 0.0548037775, 0.030457316, 0.130074278, 0.114169322, 0.291047484, + 0.0958323926, 0.121433266, -0.0400433503, 0.0543242656, 0.0787405372, 0.277183324, 0.00192958582, -0.00355765177, + 0.279254735, 0.0227443743, 0.104033187, 0.193143278, -0.0147462944, 0.0827552304, 0.0353738442, 0.20449385, + 0.271232247, 0.00591993658, 0.0661802739, 0.0266063362}, + {-0.0284264255, 0.307593435, -0.388084114, -0.128581509, 0.0620412342, 0.216876224, -0.102445893, -0.0747132823, + -0.0188075863, -0.0261255819, 0.231668234, -0.294057548, 0.14395383, 0.360745192, 0.00237776805, -0.0177536439, + -0.0658051148, 0.112701818, 0.302921802, -0.00463867886, -0.202124089, 0.0665696114, 0.0152385999, 0.160947472, + 0.0765458494, -0.0139753614, 0.021561861, -0.134680942}, + {-0.0620607771, 0.2569969, -0.602090001, 0.170079336, -0.00421804516, -0.0612058714, 0.134604931, 0.158751324, + -0.0202514976, 0.317886651, 0.294003904, -0.0854902416, -0.189069107, -0.163591623, 0.0499041155, -0.00480309827, + -0.0270436388, 0.0513930246, 0.0968223736, -0.0291808061, 0.225834519, 0.204818681, 0.18821992, 0.0158534329, + 0.192891344, 0.347846657, 0.189079523, 0.240709171}, + {0.237171113, -1.07444179, 0.0595385209, 0.0428114906, -0.401686192, 0.135821328, -0.0996614397, -0.0802449062, + -0.176611021, 0.0751923025, 0.0679159686, 0.0336508043, 0.00897729769, 0.070944421, -0.0390727073, 0.0624247789, + 0.0806902051, 0.0497563519, 0.0425027497, -0.156341523, 0.0358913802, 0.121682912, 0.182410672, 0.087373063, + -0.0486592948, -0.25909099, -0.0857482255, 0.130385041}, + {-0.266789138, -0.714672029, 0.0457348563, -0.247173101, 0.054149121, 0.102863722, 0.261150658, 0.220601916, + -0.155780375, -0.0495292619, -0.243629262, -0.163746133, -0.0705772713, -0.0909804702, -0.0981470868, 0.0144898901, + 0.0119194267, -0.101180434, -0.0384970829, 0.193168938, 0.154063746, -0.0160782486, -0.149629474, 0.275630146, + 0.0725567192, -0.00868660677, -0.0179361291, 0.0192434676}, + {0.25597316, -0.628643692, 0.325987846, -0.0454979911, -0.193986222, 0.0625185519, 0.0740609989, 0.224848032, + 0.0214435272, 0.111464649, 0.0383397378, -0.0101018669, 0.12763834, -0.0285931267, -0.154859692, -0.0583917983, + 0.0629568174, 0.234438449, -0.0632330477, -0.184572533, 0.186874047, 0.21661669, 0.0223642346, -0.0295572262, + 0.0833248794, 0.0430041738, -0.0272386931, 0.0538445935}, + {-0.255340785, -0.431446224, 0.255294144, -0.207291782, -0.275969774, 0.146399915, 0.0671700314, 0.0685254335, + -0.0442528576, 0.0366354473, -0.0322947614, -0.138840735, 0.0564336963, -0.191869691, 0.0379548222, -0.0347893685, + -0.0374535695, 0.0111376438, 0.141148508, -0.0474141277, -0.06148348, -0.10512948, 0.0347383581, -0.155976951, + -0.115071684, 0.0716684088, 0.0650277957, -0.193132892}, + {-0.0198248103, -0.665595949, 0.308424711, -0.117144257, -0.143422335, 0.0635467619, 0.114446886, -0.199472398, + -0.153535321, -0.185896367, 0.0283037946, -0.0296921283, -0.189039126, 0.0107260458, -0.287400633, 0.111975417, + 0.000890996889, 0.00379971997, 0.0389732495, 0.124051832, -0.0673095882, -0.138007298, 0.00296997116, -0.125482947, + -0.0722345486, 0.017665023, -0.0432299785, 0.23013787}, + {-0.0938796028, 0.26599741, 0.179452583, 0.156520754, 0.0592871495, -0.182271212, -0.164303228, 0.0217962675, + -0.0251196697, 0.0123819718, -0.141588062, -0.0507559627, 0.113781102, -0.398992389, 0.0599240512, 0.0568731055, + -0.0264107157, -0.00281195692, -0.0121255908, 0.000793193583, -0.13898012, -0.0929844975, -0.0130555136, -0.190079406, + -0.125057548, -0.237495512, -0.279263943, 0.0154267624}, + {0.184870228, -0.424799025, 0.265541464, -0.0800969601, -0.0424672961, 0.013786165, 0.0454911254, 0.136813939, + 0.0233796611, -0.0624747984, 0.115257308, -0.333082497, 0.0254497938, -0.0702610388, 0.152677387, 0.00233586971, + -0.0344050899, 0.19816874, -0.0392915718, -0.00751153147, -0.276451588, 0.101876259, 0.0540470704, 0.00921946298, + 0.0738890022, -0.168509007, 0.200245559, 0.446258456}, + {0.166242033, -0.709089518, 0.0819624364, 0.207864583, 0.0943783298, 0.0627666339, -0.157678872, 0.0808582976, + 0.142877281, -0.0483946204, -0.188652158, -0.109966911, -0.140290514, -0.0123706162, -0.102081135, -0.0416024178, + 0.0444053672, -0.123667113, -0.000412677939, 0.0146662043, -0.0249320995, 0.0394151248, -0.00345696905, -0.0721295625, + 0.0104259737, -0.0282374844, -0.0612751208, -0.372232586}, + {-0.0908561349, -0.50424099, 0.36460939, 0.116886742, -0.0897323042, -0.0790256634, -0.0735211819, -0.094010517, + 0.134770617, -0.0872213319, -0.0250960123, -0.0342480876, -0.13522248, 0.0875531062, -0.139287576, -0.0788107067, + -0.0309917443, -0.013971773, 0.12630707, 0.138174534, 0.178088367, -0.177061409, 0.111784287, -0.159964547, + 0.196901917, -0.0148708327, 0.00100939558, -0.139011398}, + {0.222428203, 0.548003495, -0.183460534, -0.195474446, 0.132177651, -0.0167880878, 0.0346941911, -0.113624848, + -0.00750357099, -0.157805517, 0.123861238, 0.154056415, 0.0701404139, -0.123184867, -0.0854129344, 0.0486456044, + 0.149620861, -0.182917535, -0.113313332, 0.190823197, 0.0607460961, -0.256058186, -0.167113751, 0.00292423181, + 0.0715441108, -0.265839994, 0.100172222, 0.150921017}, + {-0.209795564, -0.445490181, 0.339325398, -0.0430583954, 0.126943722, -0.0847089216, 0.12482693, 0.188870236, + -0.290583313, -0.0140287215, 0.0248804186, 0.0772296339, 0.024528468, 0.1576951, -0.165122658, -0.197295308, + 0.117836066, 0.095140256, 0.035068851, 0.0308226459, -0.119586363, -0.141628832, 0.0227867719, 0.0615674034, + 0.102317519, 0.109672755, 0.0449697115, 0.0423111357}, + {0.0997125879, -0.643835008, 0.402138919, -0.060909003, 0.087278381, -0.199353904, -0.0677571744, -0.0682044104, + -0.0620288141, -0.099327758, 0.144922167, -0.00760109629, -0.0688901544, 0.0277856309, 0.0140461214, -0.123064242, + -0.0107705519, -0.0948464423, -0.0697977915, -0.0044042035, 0.00973115023, 0.239615172, -0.0963142291, -0.0154614104, + -0.0602534786, -0.277707934, -0.0343637057, 0.0200579017}, + {-0.0846133083, -0.225544512, 0.105834976, -0.148679182, -0.0984990597, 0.105468437, 0.000370013353, 0.0412738584, + -0.0512874909, 0.277934343, 0.132575735, -0.0474175476, -0.17643559, 0.0313785374, -0.112589166, 0.132917166, + 0.0260340273, -0.178984776, 0.0464426205, -0.240953937, 0.051820159, 0.0146862688, -0.0779495239, -0.176791102, + -0.142173737, 0.12076132, 0.109853931, -0.230161861}, + {0.0373572074, -0.482500464, 0.25357458, -0.1697651, 0.101301692, -0.0867829919, -0.0200036783, -0.07722193, + 0.0997101516, 0.031438496, 0.00668233447, 0.143404096, 0.00125936035, -0.182821274, -0.299057662, -0.028371457, + -0.00912011229, 0.0882987902, 0.0312455893, -0.034413591, -0.0744786188, 0.0778338984, 0.214330986, -0.0203507654, + -0.011373749, -0.061854478, -0.108812414, -0.338704824}, + {-0.221378356, -0.175015196, 0.108645648, -0.108072266, -0.325949728, -0.0398803987, -0.138031974, 0.0146193095, + 0.157143041, 0.0129260253, 0.236398906, 0.145656005, -0.0599400029, -0.0319008827, 0.0951944068, -0.363582313, + -0.0115377447, 0.0642020106, -0.157798067, -0.03866864, -0.132424772, -0.00142617896, 0.0778982639, -0.14119862, + 0.0132989939, -0.149921671, 0.0117457649, 0.16571863}, + {-0.0832153857, -0.383045048, 0.407540858, -0.12223646, -0.10257186, -0.0742110759, -0.00281105866, -0.0624314658, + -0.148057193, -0.0964461565, 0.17995964, -0.00212064409, -0.250820965, -0.0235731322, -0.248905912, -0.219279006, + 0.108331457, 0.0106705278, -0.160089657, -0.146454141, 9.04194894e-05, 0.0357510671, -0.132127479, -0.0804476738, + 0.044467289, -0.184648752, -0.0365048535, 0.0620448589}, + {0.168747291, 0.665642202, -0.203400046, -0.121521726, -0.101990141, 0.192371696, -0.0944612026, -0.0188306868, + -0.0123963701, -0.0832444057, -0.0309699643, -0.0261150151, -0.164056629, -0.0265408196, 0.0220349915, 0.0234606192, + 0.0383501388, 0.0455145687, -0.0698725209, -0.0353911333, -0.0287298411, 0.0285827611, 0.130257368, -0.0247240923, + -0.0381080359, 0.215325236, 0.280836046, -0.0143748997}, + {-0.250889868, 0.0943555459, -1.01099718, 0.0900751129, 0.0460359938, -0.107945047, 0.117342383, 0.00324740401, + 0.100444667, 0.121288314, 0.0066984361, 0.0436849184, 0.170291975, -0.240300998, 0.111862086, -0.00218504947, + 0.208654881, 0.370517164, 0.263780475, 0.178560123, 0.0537978671, 0.114361882, 0.491104722, 0.0475808419, + 0.116240658, 0.185079768, 0.222492456, 0.133718982}, + {0.136925384, 0.699429274, -0.20217289, 0.0528842732, -0.161435455, 0.0856114477, 0.0829547122, 0.0895441696, + -0.0720050186, -0.112925366, 0.0129745575, 0.103945486, -0.168313384, 0.148806095, -0.0881702006, 0.0938619673, + -0.0804485604, -0.190723091, -0.234409004, -0.167123437, -0.0816949829, 0.104089186, -0.183527038, -0.162552923, + -0.00859433971, 0.126945108, -0.0824209303, 0.0919883698}, + {0.0312780142, 0.378493398, -0.414773703, -0.0210916866, -0.10688886, 0.146697074, 0.222175926, -0.0394484289, + 0.113353834, -0.236497417, 0.236778721, -0.168184698, -0.0276480131, -0.0544794463, 0.0682628676, -0.107694648, + 0.0673495755, 0.170571491, 0.118018888, -0.201184586, 0.204378858, -0.0107787149, -0.0245366748, -0.0507135801, + 0.145614028, -0.0628045797, -0.148383945, 0.0247292407}, + {0.279424071, -0.621752799, 0.10982015, -0.192083746, -0.0201535542, -0.0474759117, -0.153094143, -0.0903367177, + -0.180372924, -0.0101192947, -0.074468486, -0.244131699, 0.0217691604, -0.0175854266, -0.00111794844, 0.0662658438, + -0.107558064, -0.177438885, 0.0530214645, 0.0979351774, -0.123685583, 0.0640997291, 0.0387244411, -0.0329359248, + -0.0430655703, -0.141068548, -0.0208792631, -0.201202422}, + {0.0953765959, 0.43103236, -0.65257138, 0.00203125738, 0.0929645672, 0.021978559, -0.0176894739, 0.118026279, + 0.113031849, 0.151246324, -0.0658009574, -0.0156626739, 0.0390655808, -0.210548267, 0.113327347, 0.112028003, + 0.285384238, 0.268649876, 0.00342139229, 0.104759984, 0.282413483, 0.047300145, 0.18244499, 0.195087403, + 0.117541209, 0.269700319, -0.0381023288, 0.00331049389}, + {0.0236073714, 0.352717727, -0.905731082, 0.0147891454, 0.156316295, -0.0348283425, 0.129759625, 0.174639463, + -0.0192886647, 0.0676184148, -0.261927456, -0.00101890007, 0.201116145, 0.368986011, 0.232292548, 0.0756529048, + 0.276705176, 0.0214575939, -0.101051025, 0.178804219, 0.0911055952, 0.110617347, -0.154760644, 0.139480129, + -0.0913352147, -0.0941458568, -0.219338164, 0.265909076}, + {-0.299325705, -0.32108897, 0.365365654, -0.0597798079, -0.192143306, -0.056004785, -0.184241816, -0.101236075, + -0.00425410224, -0.0617081895, -0.0325463973, -0.182327792, 0.0626748428, 0.0522314683, 0.199278608, -0.153223723, + -0.164057419, 0.028794691, 0.0870149657, -0.180546567, -0.141555086, -0.0875313133, -0.206852362, -0.247230828, + 0.0741038918, 0.0238275137, -0.149651453, -0.0830186531}, + {-0.089897193, 0.0543399937, -0.97253561, -0.0570828989, 0.243328556, -0.219835833, 0.0773996413, 0.0641483217, + 0.0957359374, 0.0284418184, 0.0844955295, 0.0770431533, -0.109808497, 0.218176842, 0.340076387, 0.173030689, + 0.122401461, 0.206058487, 0.277729839, 0.1645284, 0.0858763531, 0.174288616, 0.3514615, -0.116351783, + -0.167252302, -0.0922610387, -0.241091907, 0.320072532}, + {-0.126178548, -0.3556979, 0.160933569, 0.045801498, -0.126005456, 0.0410111398, -0.040566016, -0.0592377335, + -0.353209168, 0.124203742, -0.00371726719, 0.0437119231, -0.0221093912, -0.0364640728, -0.199836656, 0.0136854202, + -0.0961830989, 0.0247585587, 0.0657496303, -0.15837355, 0.0117658759, -0.0454306006, -0.103992194, -0.0966688618, + -0.0808225051, -0.205592737, -0.0783866048, 0.0400378443}, + {0.0753203779, 0.212423071, -0.335561395, 0.0371152051, -0.00624634512, -0.0767390877, 0.353510112, 0.124409571, + 0.0959814936, 0.149520561, 0.064444989, -0.141503125, 0.20419994, 0.341552198, -0.115343653, -0.0230761208, + -0.0732197538, 0.249887526, 0.0423662812, 0.0697008669, 0.00267239264, 0.161208361, 0.0339463241, -0.096737057, + 0.108872235, -0.0509665832, 0.393317372, -0.0662628636}, + {-0.1081025, 0.337014049, -0.348035723, -0.0557262972, 0.17494446, -0.0267558489, 0.0654556602, 0.173409015, + 0.0542335473, -0.0491583012, -0.0873503089, 0.355716586, 0.0532348566, 0.198868886, 0.099186264, 0.213731855, + -0.0484948158, 0.0461185686, -0.22602956, 0.140198648, 0.154098794, -0.086288847, -0.142145693, 0.380585313, + 0.119579278, 0.119902782, -0.126080945, 0.103236981}, + {-0.00659934711, 0.336247653, -0.143599629, 0.0111724464, 0.0652167872, 0.212150618, -0.203202173, -0.00370292133, + 0.105015032, -0.198592275, -0.245802343, 0.0346724615, 0.020992646, 0.290631115, 0.204020113, 0.0605916381, + 0.130011097, -0.0367579758, 0.0869355053, 0.0425234139, 0.15200606, 0.0576826259, 0.0643639043, 0.172535539, + -0.00845283736, -0.525847316, 0.0868713334, 0.0233393312}, + {0.121186115, 0.566212177, -0.200393736, -0.0783463493, -0.238486201, 0.0341170356, 0.12607339, -0.0198645089, + -0.131215259, -0.0107770506, -0.288712323, -0.043558117, 0.0644698739, -0.0797946602, 0.0177132133, 0.192269072, + 0.0417283215, 0.0526744239, 0.152099684, -0.0560456626, 0.0913355649, 0.0443706959, -0.00987066235, 0.00622226438, + 0.284863949, 0.0113154771, -0.0145026091, -0.0994698703}, + {-0.301966906, -0.289107293, 0.403628707, 0.0257093087, -0.0594269037, 0.224131748, -0.0750426799, 0.0897050574, + -0.0104500335, 0.0471670181, 0.148263156, -0.0591900311, -0.170127288, -0.0669645667, 0.231150597, 0.134171575, + -0.183889866, 0.0655304492, 0.0845314786, -0.108105801, -0.261481732, -0.25766179, -0.0586438663, 0.0497755408, + -0.227853164, 0.220039099, -0.0332313031, -0.149900198}, + {0.141860977, 0.196703374, -0.270576715, 0.25587526, 0.145338163, 0.238889351, -0.223091304, 0.273723692, + 0.325054318, 0.376394391, 0.0483152419, 0.0196432751, 0.14002876, -0.337235451, 0.174385816, 0.0380203947, + -0.194533706, -0.0329747163, 0.0711442977, 0.0682259947, -0.153204292, 0.111863129, -0.076969251, 0.0289159603, + 0.26924172, -0.0123258559, -0.17868872, 0.0955694541}, + {-0.0360611491, 0.567937195, 0.0658047274, -0.192125201, 0.0489754528, -0.0355846174, -0.125010684, -0.0691983476, + 0.164968669, -0.0764214993, -0.121901527, -0.0492722765, 0.0792014748, 0.182673201, -0.0952295214, 0.00364974141, + -0.0818598866, 0.198710933, 0.0925279409, -0.0156603139, -0.163219973, 0.026096046, -0.010049344, 0.100556009, + 0.0802703351, 0.0288523845, -0.154722258, -0.0426359288}, + {0.142226487, -0.569559038, 0.194072172, 0.267225862, 0.0145430062, -0.062622495, -0.267375737, -0.0350063965, + 0.00774446828, 0.000546254392, -0.1847381, 0.239819542, 0.164717555, -0.0906020775, 0.0303991865, -0.103173487, + -0.179536983, -0.217887983, 0.0268395506, -0.105704241, 0.021085538, -0.201607659, 0.195839211, -0.0313468575, + 0.00704617985, -0.214902297, 0.183178484, -0.0427076146}, + {0.130361095, 0.379833281, -0.691268146, 0.00530770095, -0.0302139893, 0.160543218, 0.21775116, -0.0159080569, + 0.0163280293, 0.275390446, 0.0773448646, -0.0684096962, 0.13551569, 0.227919444, 0.156825364, 0.00751302438, + 0.00561760459, 0.157874718, 0.0932718292, 0.250404924, 0.170823276, 0.0483327955, -0.00681147631, -0.0474242605, + -0.0724443793, -0.077291742, -0.122606024, 0.117129609}, + {0.0915502012, -0.659247637, 0.509728789, 0.0441474691, -0.0557199381, -0.0243097264, 0.141431034, -0.112389863, + 0.0734125152, -0.0746883079, -0.0385151245, -0.0927017331, 0.0744563192, 0.0546380691, 0.0646021664, -0.0136864586, + -0.233582005, -0.124937147, 0.0403360426, -0.0426002555, -0.0373593383, -0.111388773, 0.00400528964, -0.0763317123, + -0.0328928083, -0.0258809216, -0.00360900094, 0.103397682}, + {0.10512612, -1.0186826, 0.359897554, -0.0689984784, -0.191965997, -0.0447201654, 0.00754109723, -0.0682348832, + -0.0351571441, 0.0199430697, 0.0299874991, -0.145099133, -0.132816002, -0.0749566406, 0.232166484, -0.243656889, + -0.0961362347, -0.124484323, 0.0901719034, -0.0602608286, -0.0195772983, -0.23120141, -0.0100672627, 0.247495979, + 0.116775587, -0.12676765, 0.181228325, -0.161680922}, }; const float five_dense_biases[FIVE_DENSE_NUM] = { - -2.24697518, -2.79671645, -2.29277706, -1.64123476, -2.97337246, -1.55279529, -1.48783553, -2.33274174, - -1.22874868, 2.39438224, -3.13994718, -1.4903506, -2.2855773, -1.14909065, -0.74406594, -2.89792275, - -3.12807941, -2.84854364, -2.97222972, -1.20280099, -2.2895298, 0.345206112, -0.404011369, -2.12997103, - 0.026584696, -1.72927654, -1.31738377, -2.38992381, -1.09590578, -2.08547592, -2.00498819, -2.67043161, - -1.79812217, -1.43836403, -1.71620834, -1.53693056, -0.234484181, -1.45272624, -1.72868788, -1.82437479, - -2.66851068, -2.93813992, -2.29339194, -1.71646988, -2.62597537, -1.40944898, -2.04996037, 1.15793979, - 1.40398467, -2.33760524, 1.23705673, -2.31002736, -0.673910081, 1.02907646, 1.49880397, -2.22889376, - -2.86746573, -2.31694722, -2.66456366, -2.4524951, -2.56475425, 0.264515311, -2.28604388, -1.6073668 + 0.203197077, 0.171431124, 0.0542362593, 0.010253503, -0.088971585, -0.00711717922, 0.172927991, 0.00227641594, + 0.0942989886, 0.127396777, 0.065542087, -0.0226275269, 0.18209295, -0.0656128004, -0.162779644, 0.121284887, + 0.0472629927, 0.0403044261, 0.0781396776, -0.0697875172, 0.0938313156, -0.0170057435, -0.178557932, -0.101860248, + 0.257950097, 0.0419708751, -0.0579385757, 0.0134018641, -0.0107925115, 0.000416926487, 0.159764543, 0.195415705, + -0.173778772, -0.0549617335, 0.20672287, 0.281121969, 0.166390136, 0.140294284, 0.258097768, -0.163214743, + 0.178887889, 0.0231933035, 0.119052537, 0.0872517899, 0.0790024698, 0.142852455, 0.180583403, 0.0731969625, + 0.212757468, 0.00119585171, 0.16106452, -0.0451591834, 0.246450648, 0.0276041254, -0.276603937, 0.041676037, + -0.0785793141, 0.11476367, -0.116417132, 0.0230412055, -0.00355176162, 0.078909345, 0.321341574, 0.0147520248 }; const float five_logit_weights[FIVE_DENSE_NUM] NN_ALIGNED = { - 0.731341183, 2.23163199, 0.949222744, 0.296105713, 1.15792906, -3.42066145, 0.183252349, 1.14736974, - 1.31554925, 0.112483598, 1.14517629, -6.70101404, 1.21333194, -0.108623341, 0.0844625309, 1.39609873, - -2.15012026, 2.09257817, -1.00639415, 0.0941660404, 0.995582104, 0.0935992077, 0.140742123, 4.60981607, - -0.149704531, 1.17570782, -0.0730246454, -0.163265958, 1.5062983, 0.123115465, -1.43543541, 1.99429679, - -0.96264106, -0.183488742, 0.176509976, 0.478997976, -0.100140609, 1.20759714, 1.40249825, 1.35177362, - -0.17572777, -1.53293693, 1.50571012, -3.87809801, 0.552025557, -0.084801957, 6.23696709, -0.112289943, - 0.204722211, 0.951846004, -0.109762318, 0.919938505, -0.1393639, -0.47155264, 0.669605315, 3.53084946, - -1.02313769, 1.25685394, 0.606329083, -2.37867737, 0.991012573, 0.101894319, 4.19737768, -2.38213611 + -0.458478689, -0.209255874, 0.140492022, -0.564781547, 0.405265599, -0.440311015, 0.541238844, 0.259323061, + -0.471086144, 0.238409057, -0.162853003, -0.347012401, 0.258589387, 0.262367815, 0.589724004, 0.842550933, + 0.217535928, -0.756183088, 0.270296484, 0.198258087, 0.246317148, 0.42984435, 0.235945836, -0.768604398, + 0.629981279, 0.25837177, 0.555774868, -0.631168544, -0.352685004, -0.337388158, -0.182304159, -0.339989305, + 0.130236804, -0.301342487, -0.44408083, -0.239533186, 0.200740948, -0.315785319, -0.468884081, -0.197976172, + -0.215769649, -0.240125388, -0.160375997, 0.255743235, 0.757258832, 0.227804184, 0.191979542, -0.31971094, + 0.489403129, 0.441005349, -0.226921469, 0.637519658, -0.213778213, 0.331646353, 0.287307948, 0.287199259, + 0.214163169, -0.217752844, 0.219678804, 0.208426163, -0.488294423, 0.347436696, -0.393783629, -0.691565752 }; -const float five_logit_bias = -1.19490004; +const float five_logit_bias = -0.0842220336; diff --git a/include/weights_5.h b/include/weights_5.h index db2a69f..16a9465 100644 --- a/include/weights_5.h +++ b/include/weights_5.h @@ -21,16 +21,14 @@ #define FIVE_INP_NUM 3 + 5 * 5 #define FIVE_DENSE_NUM 64 -/* - * 16-byte alignment so the evaluation dot products can be - * auto-vectorised (SSE2 / NEON); the generated weights file defines - * the arrays with the same attribute. - */ +// this does some kind of magic vectorisation #define NN_ALIGNED __attribute__((aligned(16))) +extern const float five_embedding[7]; extern const float five_dense_weights[FIVE_DENSE_NUM][FIVE_INP_NUM] NN_ALIGNED; extern const float five_dense_biases[FIVE_DENSE_NUM]; extern const float five_logit_weights[FIVE_DENSE_NUM] NN_ALIGNED; extern const float five_logit_bias; + #endif diff --git a/include/weights_6.c b/include/weights_6.c index 46a4b2a..b3e2667 100644 --- a/include/weights_6.c +++ b/include/weights_6.c @@ -1,353 +1,358 @@ /* generated by nn_train.py, do not edit by hand */ -/* v000, random init */ +/* v100, val_corr=0.8278, rate=0.4500 */ #include "weights_6.h" +const float six_embedding[7] = +{ + 0.0065742908, 0.341578543, 0.000129325053, 0.46736002, 0.105096504, 0.587581694, -0.964083135 +}; + const float six_dense_weights[SIX_DENSE_NUM][SIX_INP_NUM] NN_ALIGNED = { - {0.0967933908, 0.152235463, -0.0614192784, -0.116048738, 0.0623112582, -0.00744370092, 0.0908687115, 0.0285693686, - 0.0498064198, -0.0174460411, 0.0166222081, -0.0213047192, -0.0292671397, 0.0549081974, -0.00460443879, 0.0673502311, - -0.0824786276, -0.00684418017, -0.00976472255, -0.0489899553, 0.135125622, -0.120328955, 0.112143882, 0.0176841151, - -0.111638449, -0.134414509, -0.0510589853, 0.103339747, 0.156812415, -0.071089603, 0.135174602, 0.147628561, - -0.0137038231, -0.102608897, -0.000696052623, -0.0819362625, 0.124802314, -0.0929139182, -0.0736945719}, - {0.046170868, -0.076052092, 0.016583629, -0.0504761301, 0.063017711, 0.0174844097, 0.0296908896, 0.030179983, - -0.0520321876, -0.0269424133, -0.00141432462, -0.114240572, -0.0771579817, 0.156956181, 0.00811995845, 0.145098194, - -0.122910231, -0.139889076, -0.0355544239, -0.146347016, 0.153959304, 0.0735633224, 0.0796753317, 0.0105854822, - 0.0996450186, -0.0806343853, -0.107449882, -0.136537611, -0.0845743269, 0.00968987588, 0.0723072961, 0.0369593203, - 0.0318404585, 0.0389426798, 0.0982192233, -0.0629131421, -0.00390470191, 0.0744172931, 0.0232409686}, - {0.0801415518, -0.00883672293, 0.118844368, -0.0118416753, 0.0218522996, 0.0874578357, -0.123666972, -0.082655333, - -0.110445045, 0.0933774188, -0.156682685, 0.010895675, -0.109671794, -0.041437503, -0.0170114096, -0.0339959972, - 0.150323465, 0.119653367, -0.123107895, -0.0554985739, -0.107801765, 0.0449913368, -0.00278799003, -0.103379816, - -0.0768386051, -0.038300667, -0.122454815, -0.0511640124, 0.115499534, -0.153769761, -0.102020904, -0.0397571214, - -0.0600364506, 0.13800694, 0.128838971, 0.0166580752, -0.144898668, -0.0822391063, 0.156828806}, - {-0.0476070866, -0.0204417929, 0.149377942, -0.0621875823, -0.0513824448, -0.0137019902, -0.13778761, -0.153707504, - 0.00218154024, 0.0717437565, 0.0483847447, 0.139130369, 0.151201025, -0.0224185493, 0.112728588, 0.0125691863, - -0.0310359802, 0.0955003574, 0.096587576, 0.0768995211, -0.0786039382, -0.000798063003, 0.100020267, 0.111495212, - -0.0618414842, -0.159008846, -0.0485017002, -0.0529828258, 0.0742093772, 0.00731966225, -0.122205131, 0.0529247411, - 0.147448078, 0.0797393546, -0.0860648155, -0.11042574, -0.0785905942, -0.121876672, -0.0942381248}, - {-0.0527796447, 0.00648998842, -0.0355587192, 0.114049271, -0.0959301591, -0.0671327561, 0.132262588, -0.15846093, - -0.0457400717, -0.0681544244, -0.0370102078, 0.0019788174, 0.0212311707, 0.014974772, 0.0379352309, 0.14555496, - 0.0550216585, 0.14012073, -0.0892664418, -0.0451825857, -0.075443998, 0.0741268918, 0.0732855797, -0.0296938308, - 0.00675041648, 0.116876431, 0.0201408975, -0.158639297, -0.0391630009, 0.133559987, 0.0959538668, 0.119371764, - 0.151193321, 0.0595139712, 0.104144454, 0.132892936, 0.160114557, -0.146663278, 0.120496474}, - {0.0703699961, 0.159987211, 0.0631977394, -0.124109901, -0.0944583938, 0.131980598, -0.0682721436, 0.0559668019, - -0.0391267911, -0.0357652791, -0.151306376, 0.0337817259, -0.0224425253, -0.0896386355, -0.148383513, 0.0641178191, - -0.152178064, 0.154784471, -0.116843842, 0.0242486838, 0.104319096, -0.035479404, 0.0915909931, 0.11926651, - 0.00725445524, 0.100697003, 0.077542983, 0.0510057658, -0.0917049125, 0.152768135, 0.141186461, 0.14879939, - -0.0462863371, -0.0660784021, -0.00638771057, 0.135011762, -0.136495173, -0.136348113, 0.0477688648}, - {0.053429503, -0.106138729, 0.0272624362, 0.0275067724, -0.0490070395, -0.0698115006, -0.0236082952, -0.0126310149, - -0.0584793799, -0.123657331, -0.113173492, -0.0405742154, -0.138263494, -0.129029304, -0.0453586206, 0.123852149, - 0.123835333, -0.0313220061, 0.114261344, -0.0148670347, -0.112193018, -0.047807578, 0.0621467121, -0.0639947355, - 0.0912046209, 0.0445803925, -0.0789205804, -0.0298509505, 0.115075596, 0.0537110046, -0.147444278, -0.12499249, - -0.0973721221, 0.0442970023, 0.0344421007, 0.0308895502, -0.0142861633, 0.0246657357, -0.134087816}, - {0.123326905, 0.13744168, 0.126239643, -0.159075558, -0.0618761666, 0.049006179, -0.120241582, -0.0783981383, - 0.101512834, 0.0884451121, -0.0489125662, -0.142992646, 0.0885478482, -0.0297874231, -0.119863763, 0.00794804562, - -0.00335276942, -0.0187417474, -0.0171451829, 0.0590591431, -0.0341166407, 0.0155688329, -0.061427217, -0.113787942, - -0.0447442681, -0.0700059757, -0.0398613065, -0.0515906438, -0.128607899, -0.0621919334, -0.0713751167, 0.0230841935, - -0.0647920519, 0.018136844, 0.0510784946, 0.00129148841, -0.0577827357, -0.157081142, -0.00504328916}, - {-0.0583814345, 0.120087214, -0.10824915, 0.11609906, 0.127872363, -0.139609113, 0.0682630911, 0.0958273634, - 0.0328623354, -0.0478304625, -0.0954759941, -0.0141915027, 0.113085419, 0.054017093, -0.0764210969, -0.113123484, - -0.0304318201, -0.00393572124, -0.045907177, -0.132319063, 0.0447084382, 0.0530905053, 0.0953790247, -0.0982745811, - -0.104757354, 0.0891002715, -0.029784482, -0.107757747, 0.130143195, 0.044267796, 0.0258688051, -0.129454255, - 0.0125964647, 0.0514495596, 0.110222317, 0.0897155628, 0.0732337907, 0.0326809175, -0.0694177523}, - {0.0240647066, -0.0112813441, -0.046625182, -0.130389035, 0.134980127, -0.150486082, 0.0777696967, -0.134057596, - 0.113264337, -0.048125919, 0.0467041321, 0.121052325, -0.146202132, -0.103716232, -0.0780645832, -0.0860331506, - -0.0305587221, 0.141220033, 0.0933937728, 0.125993431, -0.126113161, -0.136907101, -0.022629384, 0.096488215, - -0.021081496, -0.0838287026, -0.00051539659, 0.0105423415, 0.0491101742, 0.067456387, -0.0401428863, 0.00525565166, - -0.0261782147, 0.0414991044, 0.117399134, 0.0796328411, -0.106574737, -0.143081009, 0.0175865721}, - {-0.072219409, -0.134234712, 0.115521714, -0.150310278, -0.0979422852, 0.1554638, -0.0265772659, -0.118267804, - -0.0944011435, 0.0506925397, 0.0359416008, 0.0353389494, 0.0549614355, 0.0112364097, -0.128119066, -0.0835956633, - 0.11887002, -0.0207790527, -0.0759026483, -0.00246252678, 0.0894852728, 0.0137205822, 0.0251560304, -0.14493303, - -0.118128762, 0.0863376334, 0.0446020588, 0.0204058494, 0.0212632213, 0.00191067054, -0.037657585, -0.1222426, - 0.145917684, 0.108349442, -0.154652223, -0.0570449159, 0.0725915134, -0.112194434, 0.0574003495}, - {0.140248865, 0.13888894, -0.137066036, 0.113718383, 0.0645344108, 0.0273436978, 0.0500276573, 0.109785661, - 0.0110132424, -0.0219518282, -0.0919945464, -0.154464275, -0.0414574146, -0.126906887, -0.0701522157, 0.103996478, - 0.0771457031, 0.155940548, -0.149420783, 0.00623635622, -0.135555729, 0.0368992835, -0.159812361, 0.0870888308, - 0.113482289, -0.149329811, -0.0833114311, -0.0244721379, 0.0270808842, -0.138184682, -0.0332157835, 0.145613179, - -0.0994047299, 0.0760200396, -0.0670893043, -0.0228498597, -0.139963135, -0.0879534408, 0.112181716}, - {0.131298602, 0.0309461672, 0.0789499208, -0.135864705, -0.134313956, -0.088938117, -0.0994451195, 0.00862477999, - -0.0604936071, -0.0604707748, 0.00321868993, -0.00727625471, -0.157756001, 0.151689276, -0.148217633, -0.0985553935, - -0.0505282208, 0.0820728242, -0.0390767977, 0.0566593222, 0.0822531506, 0.114947394, 0.0544019416, -0.00532624219, - 0.0507424176, 0.0498395748, 0.0142305577, -0.0559950322, 0.0954572707, 0.0467774533, -0.0416267291, 0.130554497, - -0.0786506832, 0.0809224397, 0.147390351, -0.0233504809, -0.114875101, 0.0548527986, -0.067406565}, - {0.0865421519, 0.0269196033, -0.0468342416, -0.111433722, 0.106872484, -0.149985909, 0.140618578, -0.0336444005, - 0.0138111971, -0.0719263777, 0.153680682, -0.132958964, 0.0191276651, -0.114101186, -0.0229877178, -0.0876695886, - -0.0368377231, 0.130996466, -0.00588663062, -0.0210809615, 0.128125593, -0.149226606, -0.159513697, 0.135717586, - 0.0851459056, -0.109249912, -0.00638009422, 0.144485772, 0.0967227221, -0.15101926, 0.0195341408, 0.0124143576, - -0.0929475725, -0.155912817, 0.109607443, 0.0473677702, 0.158728525, -0.116760351, -0.108016856}, - {-0.00517110759, 0.0607900359, -0.00885016099, 0.000687138177, 0.138185054, 0.0911336839, 0.0318346545, 0.0697369203, - -0.0666795671, -0.138167456, -0.0584312193, -0.0015712342, -0.063814804, -0.032207381, -0.0722483695, 0.138519183, - 0.032056924, -0.0982425883, -0.157630533, 0.00482901791, 0.0526425131, -0.0324147046, 0.000445321755, -0.0164297558, - -0.0195691697, -0.109061792, -0.0311735142, -0.100015149, -0.0348813534, 0.015831437, -0.0675290525, 0.0122821676, - -0.0188400745, -0.0456030928, 0.140895411, -0.124181718, -0.114892609, -0.0411693454, 0.124735042}, - {0.0958035439, -0.130936652, 0.0244326051, 0.052109018, -0.0386694632, -0.127200305, 0.118730977, -0.1442094, - -0.086243771, -0.0461907573, 0.0272799991, -0.0503089316, -0.00721625844, -0.130526751, 0.0260130204, 0.120258249, - -0.151281267, 0.0655669942, -0.0782718882, 0.0822672993, -0.119812563, -0.14523755, -0.0417704321, -0.0935360789, - 0.0208304971, -0.15949972, -0.0152375475, -0.0718022659, 0.116851538, -0.0557902493, -0.0761295184, -0.0614844859, - -0.0252460726, -0.121119633, 0.0271485336, -0.0414168313, 0.098560892, -0.133097664, 0.144050747}, - {-0.0196632966, 0.00584345218, 0.0353918076, 0.0333389826, 0.154786333, -0.0865547284, -0.105787285, -0.0477316417, - 0.0160061568, 0.105426833, 0.0252377111, -0.0761258304, -0.0905868262, 0.0674140677, -0.148253232, 0.0941456035, - -0.0911621675, 0.153581962, 0.0853659734, 0.0138783893, 0.00365305459, -0.121299602, -0.0570472069, -0.100143351, - 0.0314520784, -0.0436465144, 0.119275771, -0.0375414677, 0.0826248676, -0.0722180009, 0.0600088835, 0.0231514052, - -0.11752934, -0.105500557, -0.15452911, 0.104733229, -0.116481096, 0.159584761, 0.075550288}, - {0.0367535241, 0.0257054623, 0.0208994653, -0.0831006393, -0.0919770449, -0.138469696, -0.0775554255, 0.0558321886, - 0.0510588326, 0.123714693, -0.0384763218, 0.0346024483, 0.135389581, 0.0492637046, -0.0516408496, -0.0498436019, - -0.0404971354, -0.063532941, 0.0725634322, 0.0998432934, 0.0688143, -0.0308295731, 0.0218779165, 0.128970206, - -0.0664815381, -0.0228101928, 0.153792426, -0.0332464762, -0.0308457408, 0.128340617, 0.0817957073, -0.0138598736, - 0.141729936, -0.00696653919, -0.112140566, 0.150803879, 0.130852968, -0.0618984066, 0.0263254847}, - {-0.044713039, 0.114585124, 0.0807259157, 0.117588744, 0.0184157118, -0.0867422, 0.0355176777, 0.0166774131, - -0.086305432, -0.00928124227, -0.0886212438, 0.0732235983, -0.0445092283, 0.0321064219, 0.145371869, -0.0868204609, - 0.022688387, 0.00190971617, 0.0781174749, -0.12914525, 0.124460429, 0.0981210098, 0.014635507, 0.123716138, - -0.0699735805, 0.118692987, -0.108618878, 0.118670449, 0.099654831, 0.00232008635, 0.142826989, 0.126973525, - -0.0683627799, 0.025770288, 0.112599783, -0.0207583234, -0.135948747, 0.101644814, -0.0142410183}, - {-0.0177808963, 0.0689923242, -0.154154524, 0.120499209, 0.0436221734, 0.0872521549, -0.159272566, -0.12766473, - 0.0541796722, 0.0391868614, -0.0166257583, -0.0375310667, 0.147344396, -0.0943372399, 0.0632264093, 0.0898067653, - 0.0570167787, -0.117170736, 0.116889067, 0.0809641108, 0.0200283695, 0.00816197321, -0.056620229, -0.0542775393, - 0.0537301898, -0.0735042021, -0.15051502, -0.0861371085, 0.0627825186, 0.131233051, -0.137868837, 0.00940936618, - 0.157844782, -0.0419834033, 0.124431357, 0.121208586, 0.120109968, 0.0394434929, 0.0682575181}, - {0.0697128326, 0.0246844422, -0.0890695602, -0.110172495, -0.0135539183, -0.0974184498, -0.0271810051, -0.0470966734, - -0.13898249, 0.00577538135, 0.139658764, 0.00356419641, -0.114558361, 0.155411765, -0.130553603, -0.0729248747, - -0.0230880678, -0.127035215, 0.0773263425, -0.0853866711, 0.0982360989, -0.0728335157, -0.080861561, -0.116359524, - -0.0405911468, 0.119176544, 0.102637716, -0.0921949595, 0.0878237858, -0.0824311525, 0.034250509, -0.0598196201, - 0.112347558, 0.0643319339, 0.0213099122, -0.143483803, -0.053344503, -0.126612708, -0.104358703}, - {0.0775787532, 0.00409545563, -0.00205397001, -0.0327896066, 0.069652468, -0.0776266083, -0.143947035, -0.0694899485, - 0.067157127, 0.0785414353, -0.0397653282, -0.00486038066, -0.0293421764, -0.0558637604, -0.119117029, 0.127460957, - -0.0365896262, 0.0525164306, 0.133117497, -0.149907425, 0.016108701, 0.0654333755, 0.156136364, -0.00106984877, - 0.0984908938, 0.130341828, -0.0524930842, 0.0162676908, 0.141878411, 0.0572110824, 0.0402491316, -0.113442972, - 0.0697343424, -0.0409216508, -0.113025516, 0.0563906096, -0.0382295437, -0.0112676006, -0.0700219721}, - {-0.0665083602, -0.0733961388, -0.159810573, -0.00481008179, -0.137323275, 0.137926593, -0.140937909, 0.101715863, - 0.092325069, -0.02889424, -0.134072348, 0.0916955471, -0.150101826, -0.0410030074, 0.0204478819, -0.0676795691, - 0.111317381, -0.0716019496, -0.127016574, -0.152310878, -0.105228461, -0.0583668686, -0.0156852361, -0.0399905369, - 0.0313888341, 0.0650816113, -0.114706874, -0.0446863547, -0.157811671, -0.00118949718, -0.0644660518, 0.140826166, - -0.00746693229, 0.0747331381, -0.0409461781, -0.0938129276, 0.141774356, -0.000487164303, 0.120836757}, - {-0.10559123, 0.139235094, 0.0652362481, 0.121637888, -0.086268343, 0.14170903, -0.132305682, 0.0591010787, - -0.104287729, -0.0831991136, 0.102559432, -0.0998227745, 0.139877468, -0.0851509199, 0.0561623648, -0.121988095, - 0.0393951982, 0.0188960619, -0.0931730717, 0.0918561369, 0.0607347526, 0.140978277, -0.0378379747, -0.121191405, - -0.104092203, -0.0514265783, 0.110334247, -0.128934264, 0.0580388866, -0.145407975, -0.152084664, 0.137473315, - -0.0547786392, -0.040652249, 0.0199463442, 0.128169805, -0.0582309589, -0.0933132619, -0.0890814885}, - {0.155949935, -0.0145105897, 0.0767697543, -0.0736777335, -0.0508489907, 0.047244899, -0.158603296, -0.145529196, - 0.115991436, -0.0592503361, -0.151724383, -0.101571456, -0.151892513, -0.0761191323, 0.0211785231, 0.0390771963, - 0.0343535878, 0.079780817, -0.0877778605, 0.0272075944, -0.0757257491, -0.156895295, -0.10469944, 0.00432704063, - -0.0463580526, 0.0329479873, 0.150125742, 0.016698163, 0.138537541, -0.0452093109, 0.0142391482, -0.0303994846, - -0.0384094529, -0.0341982245, -0.14867571, -0.119342029, -0.0492161736, 0.159149885, -0.150064468}, - {-0.0716821626, -0.140553415, -0.0776115507, 0.0201236606, 0.130988896, -0.0315624103, 0.124680318, -0.111440919, - -0.0705786794, -0.12160036, 0.123668611, -0.105706409, 0.112165891, 0.13390319, -0.160071433, -0.0402594022, - -0.102682136, -0.13862589, -0.0329928473, -0.109241918, -0.0820019618, 0.0299827382, 0.102012925, 0.0136117768, - 0.00268340274, -0.0840161145, -0.0451973975, -0.0672649443, -0.0514372662, 0.0184525345, -0.106650561, 0.0105573265, - -0.130497858, 0.115283012, 0.0752222687, -0.109715201, -0.058659099, -0.10426145, 0.118080527}, - {-0.126417309, -0.0153902005, 0.15301396, -0.030366499, 0.0947245657, 0.137490496, 0.00172988093, 0.115366809, - -0.131110266, 0.0515160449, 0.0233153589, -0.112320185, -0.137276381, -0.0623179562, -0.0384411998, 0.0245225318, - 0.0507537946, 0.118932843, -0.147198424, -0.00998578966, 0.0890832245, -0.110097222, -0.0680875331, 0.11397583, - 0.000251589896, 0.00558500923, -0.0815155804, -0.0576123297, -0.136845946, 0.019373605, 0.126342028, 0.0292948931, - 0.158888638, 0.12092647, -0.046014417, 0.0996500775, 0.0689606741, 0.0479243994, 0.0702013299}, - {0.112908065, 0.14351508, -0.0743136629, 0.106024295, 0.107417449, -0.0624105185, 0.0208035056, -0.0978892371, - -0.134663835, -0.063803196, 0.0223776791, 0.0679410473, 0.100790977, 0.128934801, -0.102132939, -0.0627371445, - -0.0730021074, 0.0400428399, 0.114274457, -0.0995174348, -0.094780609, -0.154585987, 0.0999695137, -0.0147638218, - -0.0889723599, 0.0981012583, -0.0572005287, -0.0803901479, 0.00253544585, 0.0651584566, -0.0760441497, -0.0456601083, - -0.125089437, 0.130464196, -0.014163537, -0.0273322444, -0.0459496863, 0.0718412995, -0.0755520239}, - {-0.0418175608, -0.0335841775, -0.0486129299, -0.121587954, 0.0537443347, 0.0236709435, -0.119852521, 0.0731066614, - -0.0735133439, -0.105469115, -0.0828514323, 0.0724856257, 0.0880934373, -0.104022667, 0.0633763522, 0.0249589961, - -0.0812268108, 0.103855871, -0.00646240497, 0.0225208066, 0.0481884927, 0.139660165, 0.158730507, -0.135022819, - -0.00114677649, -0.153464124, -0.13534081, 0.0912234038, -0.147941664, 0.125885442, -0.149579182, -0.139625415, - -0.115968794, 0.148885146, -0.150153682, 0.156008005, 0.0580583364, -0.0438445024, -0.152393132}, - {-0.016789902, -0.0874078423, -0.02441491, 0.0631579012, -0.0669527873, -0.0611300617, 0.0479953513, 0.0629815608, - -0.087249577, 0.0973441973, -0.129677281, 0.131319553, -0.153193727, 0.0273478217, 0.146984845, 0.13275969, - -0.00383981923, 0.0347971357, -0.0258791894, 0.0930513069, 0.133233219, 0.0184774064, 0.0401158184, 0.0957292244, - -0.0637905598, -0.0367962606, -0.15395461, 0.120178096, -0.110208549, -0.0503730699, -0.136504143, 0.139025673, - 0.15711537, -0.092101045, 0.133052662, 0.032815624, -0.138278157, 0.0632831976, -0.113778152}, - {0.0201854315, 0.0248999353, 0.0594310872, -0.0539992638, 0.0846187472, 0.0596814938, -0.140735298, 0.0940341428, - 0.0991497263, -0.157746524, 0.0846076012, -0.0274372902, 0.0670328215, -0.0451572947, -0.0466198176, -0.135705933, - -0.155096889, -0.102244146, -0.00308398041, -0.0823937207, -0.12995261, 0.0556907766, 0.157323703, 0.0269429479, - 0.0536769703, -0.137455285, -0.137057468, -0.124605983, 0.14745082, -0.0360464379, -0.034646295, -0.108051084, - 0.0914900899, -0.12886633, 0.0607017875, 0.14536877, -0.118281528, -0.00148665195, -0.0162434299}, - {-0.0550378449, 0.130923778, 0.0830431059, -0.0414940827, 0.0255563222, -0.0210875086, 0.054693792, -0.0559153184, - 0.02971958, -0.0605289377, -0.0722915903, 0.123071417, 0.0160048008, -0.0295894723, -0.151174843, 0.154010564, - -0.0378083885, 0.147745118, 0.106625415, 0.0391720496, -0.051623974, 0.125934869, 0.0177393015, -0.00886142347, - 0.00509024737, 0.0665114895, 0.0141628124, -0.0273017604, -0.090426296, 0.0027499462, 0.0359637253, -0.0588276908, - -0.0689337179, 0.114809364, -0.0436053947, 0.0653580874, 0.0728206113, -0.145185977, 0.0811531842}, - {-0.104867265, -0.14450793, -0.159647495, -0.0412309431, 0.0442711338, 0.0752263293, 0.0905347392, -0.0156441182, - 0.0018121344, 0.126848966, -0.0767096654, -0.0112375161, -0.000385020336, -0.125034779, -0.0084355725, -0.159916371, - -0.116257474, -0.0958575979, -0.119323418, -0.00417024549, 0.0242020879, -0.12504676, 0.0650173724, 0.0312657878, - -0.0692009851, 0.0996695459, -0.0721073225, 0.075257659, 0.0698385313, 0.0198956262, 0.101688758, -0.124332324, - 0.131463587, 0.115280814, 0.144630998, -0.160125107, -0.114957854, -0.000886997557, 0.0713727847}, - {-0.0549703687, -0.0433620512, -0.0877646878, -0.119162977, 0.112524837, 0.139126703, -0.0341377519, -0.0449487306, - 0.130686015, 0.00345115294, -0.131488353, -0.0792525709, 0.00782312825, -0.0400498472, -0.131493807, 0.141692102, - 0.152393356, 0.00107015425, -0.0898117274, -0.0946044996, 0.0594668984, 0.0579793118, -0.104150601, -0.0151418559, - 0.148081571, 0.0513356961, -0.141101196, -0.053766612, -0.156557009, 0.0823729336, 0.0188856963, -0.150155678, - -0.110151075, 0.0617338419, 0.0797846168, -0.0548617542, 0.0675237328, 0.159863576, -0.00650237687}, - {-0.128873587, -0.0933671072, 0.154030934, 0.0755939633, -0.143089637, 0.0267121848, 0.0357495695, 0.0248231031, - -0.0516575314, -0.0348784924, -0.00861384254, 0.0863924772, 0.160069719, 0.108299315, 0.0888917074, 0.0249136034, - 0.099904567, -0.00174032245, -0.03794365, -0.0371070653, 0.010128173, -0.0942519456, -0.0355476104, 0.12743704, - -0.0635977611, 0.0870915055, 0.0336484313, 0.122676261, -0.0634583756, -0.145944953, 0.0907539725, -0.126188725, - -0.11494787, -0.0277100112, 0.0579763129, 0.0813958794, -0.047633104, 0.0260170475, -0.0550397933}, - {-0.0915976018, 0.13003993, -0.0838397369, 0.11951831, 0.0194157343, -0.123238638, -0.0247885343, -0.119810581, - -0.0695614144, -0.04229182, -0.00646712026, -0.0980333015, 0.0265171919, -0.118918329, -0.052301053, 0.0193821564, - -0.0900358707, 0.0932942629, -0.0502896868, 0.0138303237, 0.00222758227, 0.00599726941, 0.0613628328, 0.109779738, - 0.0380681865, -0.0473496951, -0.0299199931, -0.0255137533, 0.00397951063, 0.115538992, 0.0350842848, 0.0831481144, - 0.0261586104, 0.00893550739, -0.159215644, -0.0429788828, -0.03181215, 0.126899838, -0.136866063}, - {-0.133876532, 0.14184092, -0.0219634548, 0.157925233, 0.0774208158, -0.0360120386, 0.119860075, -0.105293386, - -0.100400917, 0.108133584, 0.0906630531, -0.0224026293, 0.0301082656, -0.11204388, -0.0823697671, -0.151968345, - 0.0647877753, -0.0367129967, -0.100568786, 0.157459989, 0.12105681, 0.103139371, 0.126091033, -0.067621462, - 0.129008725, 0.153700948, -0.15702723, 7.54197026e-05, 0.0334858112, 0.0343314074, 0.0417566672, -0.112968154, - 0.131384522, 0.143023625, -0.148550883, 0.0462077856, 0.0849757642, 0.0364897177, -0.079915598}, - {-0.0827135146, -0.14391619, -0.0164256133, -0.108707756, -0.101542957, 0.1003258, 0.00531956088, -0.110374779, - -0.151255041, 0.130988881, -0.0955013633, -0.136518702, -0.0623609647, 0.0192074366, 0.0708061382, 0.0290712696, - -0.0951986164, 0.0752324611, 0.0699329004, -0.112330705, -0.0960590988, 0.148548335, 0.0457706153, 0.142993227, - 0.107931145, -0.0769833177, 0.0972733349, -0.0638932958, -0.159782812, -0.0759236813, -0.0911080316, 0.11277324, - 0.0844429806, 0.109982252, -0.0494783595, -0.149861366, -0.067463316, -0.109967329, -0.0922606289}, - {0.0903617889, -0.117960401, -0.0793403611, 0.0361569226, -0.132560268, 0.0643765852, 0.121897727, 0.0148753189, - -0.094579801, -0.123791978, -0.129966274, -0.102571502, 0.113401033, 0.150691405, -0.0593341179, -0.00452753017, - 0.0296386443, 0.150840878, 0.00880585611, -0.0939081982, 0.014405678, -0.0951303765, 0.0882003903, 0.00161494745, - 0.0918676853, -0.032511998, -0.0651376173, -0.0115957931, -0.110192209, -0.0856438875, -0.0233577732, 0.0477317572, - 0.0959454849, -0.00823315512, -0.0863729119, -0.102114305, 0.139617518, -0.136686638, 0.0232809987}, - {0.0515834093, 0.0067583574, -0.0222151205, -0.0895339102, 0.0763585046, -0.00735381199, -0.106396161, 0.0296850298, - -0.134560212, 0.0139236301, 0.0781865418, 0.102652721, -0.00223393878, 0.0202996768, -0.013427685, 0.145846009, - -0.0328468159, -0.0257565435, 0.0543970354, 0.0435122438, 0.153779268, -0.0857072249, -0.0999265611, -0.0810974985, - -0.149193168, -0.0552409701, -0.0507812798, -0.0218712166, 0.106643669, -0.105555318, -0.02635324, 0.154921398, - 0.143554866, -0.0304100402, 0.142191589, 0.0198115967, -0.121456929, 0.0412659161, 0.0737678185}, - {0.0754892975, 0.137719885, 0.113413155, 0.0410682335, 0.152943254, 0.0311809201, -0.121315427, -0.0378877781, - -0.025406342, -0.0848549902, 0.0327905826, -0.114954606, 0.0140589122, -0.0771826431, 0.10226766, 0.117255814, - -0.0513133816, 0.0861474723, 0.0347502716, 0.0956842005, -0.0802905634, -0.0724775121, 0.108584173, 0.0386736803, - -0.144252256, 0.135425031, 0.12554045, -0.131078511, 0.145036325, 0.142823547, -0.00596964778, 0.0732668862, - -0.0744379833, 0.0422417149, 0.0488103852, 0.0208154358, -0.125972494, -0.0499065965, 0.0151216593}, - {0.0678752512, 0.141479909, -0.0579361878, -0.10212034, -0.146536276, -0.00384688191, -0.0647281781, 0.0734420493, - 0.109909736, 0.116302431, 0.0850667953, 0.12005461, -0.12765038, 0.0826389939, -0.0631282553, 0.0458230712, - -0.0923582092, -0.108656518, 0.0245845132, 0.0573111288, 0.00713555142, 0.0701984689, 0.0452481359, 0.0295052528, - -0.155328035, -0.117457815, -0.0978364944, 0.0149758402, -0.104488008, 0.140530676, 0.124306902, 0.028429715, - 0.0454303585, 0.0874194503, 0.136134163, -0.14067778, -0.0525717698, -0.101382881, 0.074112542}, - {-0.157280296, 0.124309897, 0.0148374466, -0.00693191215, 0.107233264, 0.0571080595, 0.150594458, 0.150929227, - 0.142951444, -0.142405644, 0.138320133, -0.115849219, 0.0955718383, 0.0476052351, 0.101476625, -0.0881222412, - 0.112478189, 0.147543103, 0.0593991503, -0.0159316342, -0.0348451994, -0.0293387026, -0.0574080981, 0.125476748, - 0.101387084, 0.0443435945, 0.0881850794, -0.124311559, 0.0886368528, -0.124436647, 0.00974313356, 0.0638830066, - 0.123684973, 0.0578040369, -0.0538033769, 0.119889624, 0.0825477913, -0.158593297, 0.0773752853}, - {0.0340256616, 0.115323059, -0.00619861763, -0.0115783848, -0.0833316892, 0.11521899, 0.0220446568, 0.158191502, - 0.111394577, -0.0670775101, -0.0302642789, 0.081452474, 0.0618066266, -0.0850684568, 0.0860743821, 0.107404031, - 0.143676728, -0.103181064, -0.00943402946, 0.00770462537, -0.0582186244, -0.0160429589, -0.115015365, 0.0600330718, - -0.139785513, -0.0110464189, -0.00731863175, -0.148870051, 0.0372841135, 0.0491300263, -0.146719262, 0.0570872724, - 0.0559942685, 0.0762820914, 0.148259863, 0.155335262, -0.0630727485, 0.0147177791, 0.124616943}, - {0.117235161, -0.130238339, 0.00227429252, -0.141247049, 0.0465945229, 0.144285262, 0.00209529721, -0.0165882483, - 0.101704262, 0.0249015391, -0.045640219, 0.124497734, 0.0927760974, -0.0886490569, 0.0686340109, -0.084755078, - -0.0126271211, 0.150040656, 0.159568831, -0.0562661886, -0.149355993, -0.0190586969, 0.0195181444, 0.0291265883, - -0.040851593, 0.0177249461, -0.0968457684, -0.082255289, -0.0367871374, -0.0673075691, -0.0975337252, 0.00672808243, - 0.0360103399, -0.0260913987, 0.0370827653, -0.132725313, 0.0987735242, 0.114781991, -0.0128890574}, - {-0.0973276645, -0.0739934444, 0.053933695, -0.113706112, -0.0913961157, 0.00288793887, -0.00853576884, 0.115016207, - 0.0451276675, 0.0362566225, -0.0488199666, -0.108090103, 0.0763517842, 0.0432774127, -0.126216918, -0.0323137827, - 0.0725389048, -0.112815328, 0.130934075, 0.144305229, 0.133580983, -0.155202955, -0.104472205, 0.134186804, - 0.118462458, -0.0230473336, -0.0411200561, 0.0320737399, 0.153461888, 0.136641204, -0.103034154, 0.131208822, - -0.0811961517, 0.141016573, 0.0441101603, -0.157163605, -0.00134302804, -0.000277416984, 0.00519697275}, - {-0.157234773, 0.0216934998, 0.0229968429, -0.0456779599, 0.0617230572, -0.159433469, 0.115041979, -0.0409196652, - -0.12699388, -0.103104919, -0.0608809553, -0.138878256, 0.0337750278, -0.0957158431, -0.141873315, 0.108097315, - 0.107926987, 0.0990178958, 0.0116720526, -0.158665687, -0.129165709, -0.0232352037, -0.114883408, -0.134382501, - 0.0158243161, -0.0731174052, -0.135450542, 0.0167346224, -0.121782698, -0.0701439083, -0.0866819546, -0.120067455, - 0.092619285, -0.0461705066, 0.0892303661, 0.0779077485, 0.0149603784, -0.146992788, -0.00272293552}, - {-0.0361600332, -0.0228186883, 0.00934007391, -0.0170567073, 0.0384269021, 0.142638072, -0.0744384602, -0.0217330139, - -0.0218091402, 0.0360304601, 0.0797148421, -0.0997342616, -0.0314630903, -0.0379285328, 0.139887363, 0.123339653, - -0.0287113115, 0.115470789, 0.0371872373, -0.0412517339, -0.135022566, 0.103279389, 0.105988599, -0.0172151439, - 0.0150876818, 0.0274245963, -0.0132739441, -0.036677435, 0.112553529, -0.155846283, -0.0206262488, 0.13022539, - 0.0678242669, 0.126872942, -0.0510943756, 0.0201200712, 0.043223124, 0.0387389623, 0.158661246}, - {-0.0076213032, -0.0165892038, -0.0685659796, 0.0714797452, -0.016281493, -0.0765684247, 0.137657881, -0.154361069, - -0.0206807088, -0.0900971815, 0.019978432, 0.0333570577, 0.141404584, 0.0914899185, 0.0473329164, -0.131317779, - -0.0968455225, 0.0220416989, -0.1212359, 0.105686575, -0.142264634, -0.0132441651, -0.131832302, 0.024911236, - -0.140045494, 0.0894184634, -0.0229819156, 0.00864381157, -0.0193220656, -0.109721102, 0.0386561938, -0.0338467434, - -0.0236302074, 0.0742785186, -0.104582898, 0.121219292, 0.111321308, -0.120511308, -0.105403334}, - {-0.0385326706, -0.149855226, 0.0867880508, 0.0908868834, 0.121826887, -0.0176020525, 0.00701380335, 0.157649904, - 0.129334271, -0.022528844, -0.122996956, 0.0200926214, -0.151215792, 0.025034111, -0.0635366961, -0.0559968092, - -0.126804113, -0.145577371, -0.0725016594, -0.111986093, -0.12005423, -0.129444838, 0.0989802182, -0.145718962, - 0.158439308, -0.136623144, 0.0214766711, 0.140014693, -0.078493163, -0.1480892, 0.0923972055, -0.0590759218, - -0.113076009, 0.0365628451, -0.000295245904, 0.0462453514, 0.0592812598, -0.0913652703, 0.0834260806}, - {0.143805295, 0.0155787403, 0.0261022598, -0.0257711839, -0.0182284322, 0.0275831092, -0.0485377423, 0.0492555723, - 0.15253517, 0.0234382525, -0.0826058388, 0.0789847374, 0.146116897, 0.090543896, -0.145559639, -0.0838401392, - 0.020527197, 0.134442538, -0.060153272, -0.0281252302, 0.0846550316, -0.0223555565, 0.079243198, -0.106259376, - -0.0495959446, -0.0445554443, 0.111729063, 0.133360282, 0.0883187056, 0.0215883795, 0.106322229, 0.121772349, - 0.119024768, 0.123255357, -0.0772241428, -0.010108321, -0.144010186, -0.0626373142, 0.00331682526}, - {0.00821007695, -0.0551363453, -0.0676344633, -0.0111245876, 0.1491611, -0.1228237, -0.0549128726, -0.0588845573, - -0.0994822159, 0.159540027, -0.147012025, 0.0386894271, -0.00295335613, 0.15084444, 0.0976848304, -0.00153089967, - -0.0128493337, -0.142887488, -0.111583702, 0.0320946053, -0.122405484, -0.0896965712, 0.11114724, -0.0944887251, - 0.149016038, -0.090780735, -0.0281430203, 0.0362697542, 0.123263702, 0.00452216621, -0.0758949369, -0.0870857015, - 0.0268697999, 0.129318699, 0.149626926, 0.0784597546, 0.00966807641, 0.15372999, 0.0346111134}, - {0.135335431, -0.0524530187, 0.0564956926, 0.134169638, 0.0994171202, -0.0721554831, 0.150539726, 0.103655607, - 0.0302717239, 0.00642100163, -0.133985415, -0.126268983, -0.0759931058, -0.042624902, 0.0353744552, -0.146013692, - -0.0397743396, -0.0821449757, -0.0522839502, 0.134827748, 0.0357014835, -0.125457406, 0.00284048426, 0.0960820243, - -0.0400908887, -0.0969539434, 0.117565207, 0.128489807, -0.0317166485, 0.109517328, 0.0833919123, -0.0554327182, - -0.138008565, -0.11444059, 0.149088979, 0.0512602963, -0.0856498107, -0.111970522, -0.12587148}, - {0.0224373136, 0.0382923447, -0.0747886077, -0.0121580716, -0.0767029598, 0.141055718, -0.123395182, 0.0675715879, - 0.0379213355, -0.0472308286, -0.0575145371, -0.106351458, -0.0309086386, 0.135627106, -0.147148684, 0.090754509, - 0.0279704574, 0.147471264, -0.145420462, 0.0589833222, -0.0136448387, -0.039699167, 0.120141715, -0.143935755, - -0.115310997, 0.115785278, 0.000652988383, -0.133672759, -0.00613919413, -0.0626730248, -0.0189093091, -0.147770464, - 0.147255659, -0.102808639, -0.0871997178, 0.0724047273, 0.1256354, -0.0224007387, 0.142272457}, - {0.137836054, -0.0632258207, -0.0164566897, -0.0403495207, 0.0517789163, 0.00608601281, -0.149766177, 0.142742306, - -0.0314270705, 0.103650607, -0.126158774, 0.111624077, 0.055120863, 0.0388984494, -0.134918407, -0.152487814, - 0.0295004807, -0.113996848, -0.111506641, -0.0440089144, -0.086366035, -0.0807152689, 0.00865797512, -0.0573150218, - 0.0741267204, 0.154979885, 0.0202493407, -0.0254147016, -0.0147838835, -0.107501328, -0.0772380009, -0.105413929, - -0.0683901906, 0.131929144, 0.154526249, 0.11189802, -0.130999997, -0.0124845281, 0.0581236407}, - {0.0459919125, -0.0860065967, 0.0110306898, -0.118987873, -0.0659963042, 0.0930785611, 0.085940741, -0.12604323, - -0.107581571, 0.121533573, -0.0391657315, 0.107208066, 0.137636319, -0.0569114834, -0.0467083305, -0.120382749, - -0.047168009, 0.0838120356, 0.113633588, 0.114312351, 0.0656505898, -0.102815628, -0.0920698196, -0.148176312, - 0.0844320953, 0.0736770704, -0.0619042069, -0.151609793, 0.0634551719, 0.111207634, 0.137860373, 0.0858280212, - -0.0832563415, 0.155327365, -0.00127360225, 0.0822034255, -0.0723850429, 0.131452531, 0.0642569587}, - {0.128805608, 0.0990629867, -0.119305432, -0.0292620808, -0.0708809495, 0.0392772667, 0.015687393, -0.0852657035, - 0.0104729729, 0.122274593, -0.098343797, -0.136710733, -0.0628816858, -0.105143823, 0.0515109301, 0.137111172, - -0.130796328, -0.0743087158, -0.0400102176, -0.00140646007, -0.0264896676, -0.0728007406, 0.0188319609, -0.108995229, - 0.0468106084, 0.0621610284, 0.0719994307, -0.0657696649, -0.0772869289, 0.119326912, 0.159178615, -0.152700007, - -0.11091581, -0.0193140283, 0.123198986, 0.147255823, -0.0607609637, 0.0305595621, 0.0803839639}, - {0.144919828, -0.0497360565, 0.153210148, -0.113501117, -0.117309205, 0.0958018601, 0.127570242, 0.0632243678, - 0.0918181688, -0.141088709, 0.146485403, -0.0462406576, 0.159514248, 0.0430768281, 0.0786268264, -0.00808254443, - -0.0773618519, 0.0306342579, -0.12890771, 0.0187857281, 0.0366844386, -0.0248747766, -0.122418679, 0.0175913069, - 0.0797886029, -0.0122940792, 0.0957477242, -0.0396141075, -0.129192919, 0.0185948983, 0.107355565, 0.142729267, - 0.0553980879, -0.141973346, 0.022911841, -0.116240792, 0.0882501006, -0.131930307, -0.0928079635}, - {0.106438749, 0.101826347, -0.11401926, 0.150217101, 0.098923333, -0.0181241892, 0.0712259561, 0.0242997278, - 0.0275936276, -0.131927788, -0.0849952176, 0.017318815, 0.0068610739, 0.115758359, -0.0853685364, 0.00950135477, - -0.133058578, 0.0410957597, 0.0209150035, -0.124753959, -0.0244098306, 0.00401516864, -0.0374188237, -0.10042619, - -0.101509094, -0.111051895, 0.0484750532, 0.0317879803, -0.0559743047, -0.0285410788, -0.0229661483, -0.0721477345, - -0.00402316684, 0.117756531, -0.0819754303, 0.089403078, 0.0334226303, 0.0275267027, 0.027861882}, - {0.108989581, 0.0460046604, -0.0563987233, 0.0293907002, 0.104052693, -0.0383384638, -0.030068161, 0.150279298, - 0.0409633964, -0.00166833878, -0.0346902199, 0.0669264048, -0.0511397123, 0.0199506395, 0.149070546, -0.0374698266, - 0.00843488518, -0.0328176878, -0.145957738, 0.152954951, -0.144924343, 0.14804782, 0.0786780939, 0.0285716206, - 0.0510875434, 0.0378996506, -0.0798344165, 0.0156888627, -0.11134693, 0.0566322543, 0.0671340302, 0.0756672993, - -0.131263569, 0.121300727, 0.128415108, -0.0732385069, -0.0441863798, 0.145850092, -0.140892282}, - {-0.0433208197, 0.0865452439, 0.0491333306, -0.0707463101, 0.0425013006, -0.152840808, -0.0107151717, -0.0138318893, - -0.0186936446, 0.12703611, 0.0707801804, -0.0564198159, -0.105342612, -0.0870764479, -0.0342938006, -0.0887430236, - -0.0956649557, 0.112175398, 0.0909370333, 0.0317445174, 0.0798360035, -0.0917860791, -0.0962542295, -0.056887053, - 0.148518249, -0.072213918, 0.0639881641, 0.0572802611, -0.132279277, 0.0703128278, -0.0325882584, 0.0573971979, - 0.0131939426, 0.0694291666, 0.014503222, -0.155698791, 0.0548479706, -0.131516039, 0.0377209596}, - {0.0347373113, -0.1174886, -0.00463837851, 0.0322827622, 0.116443321, -0.0683661774, -0.00230853772, 0.0666368082, - 0.153403535, -0.132826671, -0.13612321, -0.0795206949, -0.0288710464, -0.109852068, -0.00206555682, 0.0141264861, - -0.138332427, 0.0350137167, 0.0766007006, 0.0733971521, 0.120388016, -0.122281618, -0.155271351, -0.103171304, - -0.0537912734, 0.0376074575, 0.0374378748, -0.0292252395, 0.121223301, 0.107397161, -0.031116344, 0.0732557401, - 0.0359054469, 0.0417368747, 0.133481681, 0.120928459, 0.0945898965, -0.0629648343, 0.11936377}, - {-0.138524175, 0.153413162, 0.00945223961, 0.135453954, -0.133650959, -0.0830611214, 0.148169518, 0.0940570533, - -0.00380408484, -0.086952731, -0.0809288099, -0.156174347, 0.131625593, 0.0475885347, 0.00847210828, -0.136250719, - 0.106322765, 0.150923416, 0.150585994, -0.064253293, -0.096121788, 0.0809252262, -0.0415405631, -0.136549413, - -0.0137932152, -0.0286584944, 0.0176992528, 0.0582241043, 0.0482284836, -0.0121927755, 0.0387834013, -0.063821733, - 0.0187701322, 0.056976445, 0.118335001, -0.00805816799, 0.144364879, 0.136538237, 0.0551046953}, - {-0.0352555513, -0.146217152, -0.14467366, -0.0438222997, 0.125421345, -0.0440197177, 0.120475978, 0.125130519, - 0.0638999417, 0.104002431, 0.0400096662, -0.0938901231, -0.148611918, 0.0584221296, 0.152547419, -0.0257979091, - 0.113014638, 0.1321401, 0.021303039, -0.133068457, 0.0705090389, 0.152023375, -0.143248737, 0.148735747, - 0.0126785459, 0.0664216429, 0.0673842281, 0.0494141243, 0.0561462939, -0.153661698, 0.0493393354, -0.100295395, - -0.088040024, 0.0135752028, -0.1531367, -0.0556834675, -0.0371512547, 0.0104368571, -0.0160086378}, + {-0.282762736, -0.0563275144, 0.730590343, 0.0789912865, -0.204339027, 0.0396980755, 0.248766661, -0.314963728, + -0.0167422313, 0.213028535, 0.304261833, 0.174660057, 0.0295855738, 0.199028805, -0.0455312952, 0.0800643563, + -0.185925096, 0.0437664576, -0.326360196, 0.312411815, -0.150759593, 0.149624705, -0.0376731977, -0.0203849562, + -0.0958549976, -0.0905557871, 0.255156666, 0.0673121661, 0.02243682, 0.177837253, 0.143540755, 0.0758885369, + -0.089895539, 0.0751883686, -0.0300261341, -0.0979525074, -0.147087187, -0.0700252503, -0.212184563}, + {0.146949902, 0.327808619, -0.686812699, 0.00392748509, -0.148308665, 0.0934642255, 0.0951193348, 0.0334287398, + 0.140522987, -0.0673815832, -0.0970075652, 0.159615487, 0.0586074777, 0.0556014366, -0.0439041592, -0.0225810297, + -0.135422096, 0.104349554, -0.0230375919, 0.0159511641, -0.00493444549, -0.221501619, -0.0998100042, -0.0179851484, + 0.0634097531, 0.209679693, -0.0694529787, -0.0374620892, 0.125516385, 0.0156742875, 0.181466237, -0.133448049, + 0.152771533, 0.0174281131, 0.155447036, 0.124258474, 0.221732691, 0.0947066694, -0.0252091959}, + {0.160156772, -1.52072203, -0.284173459, 0.114289828, 0.153297722, 0.0741123706, -0.106174372, 0.0314644314, + 0.0474751256, 0.0309511777, 0.063651219, 0.0851621851, 0.0305719338, -0.0333008952, -0.0167611074, 0.0564312078, + 0.0226126797, 0.11055322, 0.115543567, 0.108756684, 0.0357308351, 0.123114444, 0.176002428, 0.114915229, + 0.148942143, -0.0625898167, 0.0959035978, 0.0410965942, 0.107714675, 0.133954048, 0.166690871, 0.111254558, + 0.109636866, 0.0770944208, 0.142240435, 0.148641139, 0.010087789, -0.163533822, 0.234832183}, + {-0.0458820201, 0.400703847, -0.704590678, -0.0333656184, 0.0174748078, 0.0390049927, -0.0849423483, 0.0676333159, + -0.14397499, -0.00252764369, -0.154970095, -0.124375932, -0.0140130054, -0.127016455, 0.0390064716, -0.0637766644, + -0.0054131127, -0.0788694769, 0.175252542, -0.136596054, -0.113811642, -0.0195430499, -0.091031082, 0.0931695327, + -0.0331401043, -0.0109625803, 0.10683044, -0.132312804, -0.0338141955, 0.101019196, 0.0801355615, -0.103233024, + 0.0249951538, 0.180828199, -0.127832189, 0.133617416, 0.0346138366, -0.0421042517, 0.0420933515}, + {0.115016676, 0.196765959, -0.548836112, -0.345303953, 0.330692023, -0.23311086, -0.0311110504, 0.180270106, + -0.430506408, -0.280931622, -0.00129361171, -0.352870494, 0.0452543013, -0.389674455, -0.248559058, -0.186098203, + -0.298372537, 0.26643151, 0.18067801, -0.0667777583, 0.0327139124, 0.32352069, 0.101149708, -0.0274008922, + -0.172038749, 0.111406803, -0.278581142, 0.00354246702, -0.0480959006, 0.172040194, -0.0484443121, 0.231135815, + -0.0182251502, -0.00514097093, -0.204974413, 0.20433718, -0.309048712, 0.179382354, -0.0110426862}, + {-0.0371507294, 0.211275414, 0.936891198, -0.101958327, 0.0520465448, 0.0555242151, 0.137456983, 0.0443586744, + 0.0735168755, 0.0433312207, 0.104532577, -0.0697492585, 0.0227281116, 0.0303425528, 0.171300337, 0.00801817235, + 0.25168997, -0.0833262801, -0.0431719907, 0.115270659, 0.214539915, 0.0840846971, 0.158829451, 0.193312049, + 0.0763021559, -0.0139020486, 0.0457286686, 0.137087569, -0.164960429, 0.150889337, 0.233479351, 0.321477473, + -0.200686336, 0.0584372245, -0.148339212, -0.158747911, -0.255335629, -0.176004797, 0.0891200975}, + {-0.0979641154, -0.307282448, 0.707775354, -0.125841483, 0.0953899324, 0.0491354913, 0.123622358, 0.0514821596, + -0.0965669081, 0.198713005, 0.0560167655, -0.0166125335, 0.00335819623, -0.154990688, 0.230104402, -0.221451774, + 0.13053824, -0.0962358266, 0.190315127, 0.0404143855, 0.184649706, 0.289241344, 0.200344756, -0.113058217, + -0.0893387422, 0.30364421, -0.120819233, 0.106566519, -0.0837414265, 0.110699654, 0.000404892286, 0.164168924, + 0.0303014051, -0.118732259, 0.0925685316, 0.354016364, -0.128824607, -0.162554324, 0.0139187388}, + {-0.0303925518, -0.0552541465, -0.737573206, -0.0922581702, -0.193467945, -0.15425168, 0.0805479437, 0.234098002, + -0.0569174923, -0.163258582, -0.185168028, -0.265544713, 0.0328750722, -0.042033162, -0.304853052, -0.188584626, + 0.0739987269, 0.182701021, -0.0187060237, 0.120208979, -0.00517415395, 0.171296567, -0.280372679, 0.0437119268, + -0.274580777, 0.0110638086, -0.120666035, -0.232929245, 0.0151670855, -0.159876525, 0.200507268, 0.116282642, + -0.0537130944, -0.248556495, -0.173139513, 0.105073616, 0.131360143, -0.0365000442, -0.0591957495}, + {-0.0236740112, -0.0839193836, 0.752823055, 0.00624437863, 0.131357536, -0.141286999, -0.0635036975, -0.0262890272, + 0.104967013, 0.0812194124, 0.0384624191, 0.0741042569, -0.186851859, 0.11452008, 0.0308767091, -0.0549096912, + 0.108119145, -0.10244035, 0.201173127, 0.0284086764, -0.163147211, 0.290089607, 0.132981092, -0.143376678, + -0.130450338, -0.162072629, -0.19035922, 0.171957195, 0.0154484706, -0.0115961824, -0.0325915925, 0.149289325, + -0.0611155666, 0.0233119018, 0.00803279411, 0.149692819, -0.171058416, -0.07994809, 0.136210546}, + {0.011481666, -0.591486096, 0.788739443, 0.0580150075, -0.0581582859, -0.0699527711, 0.147268951, 0.133274317, + -0.00336254528, 0.211932883, 0.0974171907, 0.0837606415, -0.107871726, -0.332916588, 0.251717567, 0.0485465564, + -0.289719194, 0.16074729, 0.0981427506, 0.195161104, -0.0477866568, 0.240369797, 0.00142805546, -0.107460454, + 0.144852966, 0.0331885554, 0.0289027728, 0.217022583, 0.189481989, 0.210117131, -0.14386192, 0.257314444, + -0.231293365, -0.0821456164, -0.148711234, -0.281892806, 0.0893862098, -0.0612130687, -0.218651205}, + {0.0344110243, 0.0613648072, -0.663142502, 0.012655111, 0.0786295831, -0.299120605, -0.0893806666, -0.0929536, + 0.142574042, 0.11067266, -0.0954290703, 0.0235238429, 0.0697887838, 0.136721954, -0.0746648237, 0.237816334, + -0.0826871321, 0.0818047523, -0.0957256332, -0.156082168, 0.0961245224, -0.143830895, 0.0368054919, -0.0337967686, + -0.113377571, 0.215221107, -0.0321270004, 0.0626650974, 0.140905693, 0.108913004, -0.0300663132, 0.0329823755, + 0.277467608, 0.196472928, 0.0464956053, -0.263099641, 0.223040819, 0.21136485, 0.0677242205}, + {-0.0187031198, 0.0602727458, 0.54279995, -0.113571294, 0.45412454, -0.0418791883, 0.103712782, -0.206617385, + 0.101731785, -0.00846095197, 0.133265957, -0.178702116, -0.0120510357, 0.126713514, 0.0796562359, 0.0948571637, + 0.259251863, 0.132012546, 0.318895102, 0.126535192, -0.0700928941, -0.121011332, -0.0376667529, 0.301382601, + 0.118638463, -0.0354453102, -0.143568411, -0.286102831, -0.0933998525, 0.0334935039, 0.0664797053, -0.185921609, + 0.148486778, 0.0514167584, -0.142128006, 0.222249284, -0.14645046, 0.104180224, -0.26407963}, + {-0.10360004, -0.425364524, 0.696820438, -0.274310589, 0.150060833, 0.236604154, 0.0198318716, 0.122819766, + 0.142224312, -0.035691753, 0.0669889599, -0.0655179396, -0.0376028381, 0.254243881, -0.0825403109, 0.0458673239, + 0.201879457, -0.0265229829, 0.181569949, 0.189394221, -0.0791682824, 0.156540424, 0.0824942663, -0.056294594, + 0.0160713419, -0.323709697, 0.200327188, -0.037541654, 0.0210741051, 0.189588085, -0.0388948023, -0.232569084, + 0.211987317, -0.168857828, 0.0205459278, 0.0274787135, 0.0358891264, -0.194867864, -0.104155317}, + {0.114551082, -0.481927246, -0.897679567, 0.214685336, 0.16273196, 0.191777065, 0.104237027, -0.0970954001, + 0.0759302452, -0.0822182149, 0.191352963, 0.230475605, -0.004907127, 0.124285072, -0.0938522816, 0.137145326, + -0.00644512149, -0.283143342, -0.124725789, -0.0384006761, 0.311640382, -0.0014223922, -0.0285270903, -0.128429726, + -0.00184295245, 0.147062898, -0.0315981209, -0.128478721, 0.297009617, 0.0816734359, 0.0364777781, 0.0882342681, + 0.0252061654, 0.0568528138, 0.270593673, -0.116349436, -0.0631481856, 0.365322053, 0.233131886}, + {-0.120379701, -0.452914655, 0.69471395, 0.0752304271, 0.103867307, 0.220009118, 0.224773645, 0.0503174551, + 0.040729057, 0.039190758, 0.288746029, 0.0419843756, -0.230729803, 0.136699721, 0.0433468111, -0.0255120527, + 0.226623625, 0.262356937, 0.173353091, 0.0855579823, -0.0572973676, 0.0466848761, 0.195328116, 0.0807970986, + -0.00918623433, -0.0871357769, 0.136771291, -0.0360433161, -0.0148335593, 0.187921673, 0.260697037, -0.0756186694, + -0.070964694, -0.0339851566, 0.0333974697, 0.167534724, 0.0547196642, 0.0168158542, 0.274299502}, + {-0.0968320817, -0.141119346, 0.655391693, -0.0448081978, 0.223973885, -0.125584424, 0.055755388, 0.00407028571, + -0.0581914298, 0.163703486, -0.00779761653, -0.035665147, 0.0180214886, 0.0735300332, -0.0157239195, -0.0393613689, + 0.0463709906, -0.024085423, -0.0093949493, 0.026393339, -0.0963632539, 0.248643115, 0.0398947857, -0.00201059435, + 0.00302046258, -0.214977533, 0.212505713, -0.0443717316, -0.0465886779, -0.112749815, 0.0921108052, -0.115716733, + -0.0816225708, 0.139711544, 0.0410667695, 0.111394785, 0.010201606, -0.155280486, 0.064333342}, + {-0.183065996, -0.289024234, 0.812718332, -0.0278695952, 0.015744146, -0.0264776424, 0.136563137, 0.113182947, + -0.168809697, -0.0394463055, 0.0727432594, -0.0355447121, -0.193742141, -0.0675567165, 0.0481650159, 0.11402031, + -0.0070441477, -0.0201255642, 0.0720044598, 0.0585997142, -0.108411685, 0.169874415, 0.0433898531, 0.131262153, + 0.0393158607, 0.105964288, -0.124830276, 0.042306494, 0.133830532, -0.0541704334, 0.10933052, 0.263894379, + -0.147685423, -0.0113780247, 0.0344123095, -0.0834650397, 0.0047910274, -0.0783810541, -0.0464604013}, + {0.219149083, 0.064866595, 0.0316145159, -0.489191204, -0.233643517, -0.719799638, 0.134775296, 0.0189584307, + 0.035125576, -0.112267718, 0.0723865032, -0.306088179, -0.210345849, -0.00747956103, -0.247774392, 0.0990739614, + -0.200649485, -0.390255332, -0.227142364, 0.0272737816, 0.403140664, 0.0508859903, -0.390879244, 0.243047148, + -0.328482777, 0.152220726, -0.375209123, -0.334010184, 0.49402675, -0.0771550536, -0.344686031, 0.383161992, + -0.17255339, 0.0597194508, 0.142317593, 0.164361387, -0.0286849178, 0.128655389, 0.196754411}, + {-0.0410293899, 0.338615686, -0.409754127, -0.293272555, -0.155978873, -0.0975263864, -0.0089201564, -0.0555540957, + -0.178584918, -0.157408923, 0.204459161, 0.0368474387, 0.0472006723, -0.170741305, -0.0557030365, -0.206178799, + 0.0252101533, -0.247200996, -0.226606339, -0.234228089, -0.0608233511, -0.0991780832, 0.116313636, -0.122075625, + -0.158770829, -0.121133275, 0.208478391, 0.134024605, -0.0704239234, -0.0468835644, 0.402148962, 0.000805645832, + -0.0813769028, 0.0470139347, -0.27857399, 0.118220322, 0.0319808349, -0.250343382, 0.089221172}, + {-0.0190368183, -0.412190378, 0.61768043, -0.0082726609, 0.224451929, -0.015774833, 0.0590072908, 0.172722191, + 0.104496226, 0.21707879, 0.253936976, -0.148807898, 0.0470075831, 0.125255823, -0.0034176351, 0.0478289127, + 0.120968468, -0.0612144135, -0.0384195782, 0.0206164829, 0.0331755131, 0.110551879, 0.0948009938, -0.117754698, + 0.0542902201, -0.0775596574, -0.105057672, 0.179738179, -0.176439241, 0.179091081, -0.159725279, 0.169083863, + 0.0630803481, -0.17488265, 0.204559565, -0.0447657593, 0.0222060662, 0.066461727, 0.122096717}, + {0.110641345, 0.348080218, -0.498669386, -0.0536600724, -0.0103229238, 0.169303417, -0.164146036, -0.222952724, + 0.0707893521, -0.076030843, -0.666038632, -0.0390581638, -0.15762955, -0.181184962, -0.128391668, -0.312163651, + -0.079955861, 0.294274092, 0.0781494156, -0.272982597, 0.0375174023, -0.39822492, 0.528131306, -0.403849959, + -0.11215736, -0.108671583, 0.0411977358, 0.111514509, -0.0854244903, 0.103082761, -0.0495410524, -0.136168674, + -0.0266983379, -0.133975267, -0.154707789, -0.269968748, 0.0078736078, 0.198415637, 0.132146537}, + {0.00630642753, -0.0425905213, -0.976697266, 0.0802949518, -0.0373759009, -0.0717672706, -0.0564704016, 0.126173154, + 0.129176781, 0.228048593, -0.0809217021, -0.136310533, 0.0532604419, -0.0899301842, -0.0565456264, -0.168571025, + -0.228170604, 0.00744312909, -0.0903381109, 0.187564135, 0.296350658, -0.0427739061, -0.238423809, 0.00933343451, + 0.323177516, 0.150757939, -0.0851115212, -0.229631871, 0.167228982, 0.0204633679, -0.196963266, 0.049432639, + 0.139343977, -0.00221942645, -0.0564469695, -0.0565519929, -0.0338747688, 0.217861623, -0.0411081947}, + {0.0818683207, 0.189130619, -0.63857621, 0.0950989798, 0.129748613, -0.217639044, -0.00310036005, -0.0821470991, + 0.0855663344, 0.17278412, -0.145308942, 0.018358713, 0.0422431305, -0.0641563237, -0.0953660086, 0.121081367, + -0.0580013618, -0.264920264, -0.361876458, -0.0272926651, 0.180031329, -0.012022757, -0.0304664895, -0.0854124203, + 0.0202063546, 0.100550748, 0.116194256, -0.0689740926, 0.069390215, -0.118840814, 0.210623041, 0.173766866, + 0.0340186544, -0.0285004694, -0.0622767657, -0.278734744, 0.0249768775, 0.304717511, 0.143741205}, + {-0.209072486, -0.167887136, 0.844739616, 0.145964667, 0.0615237728, 0.10212139, 0.0936139673, 0.11189843, + 0.401274532, 0.0131698465, 0.0470178016, 0.171614781, -0.0858264565, -0.0535048656, 0.264678717, 0.26957202, + -0.0421461314, 0.192509115, 0.199243248, 0.0512528047, -0.073932752, 0.0473555923, -0.0403746292, 0.058922708, + 0.0185133535, -0.10587015, 0.164380312, 0.262878597, -0.0841443986, 0.0268444307, -0.0583029352, 0.0714559481, + -0.0149930399, 0.0424940251, -0.0869167075, 0.0848793313, 0.208484784, 0.135465875, 0.113037877}, + {-0.167437911, -0.449168861, 0.626928627, -0.054026179, -0.053709656, -0.0612324737, -0.0533738993, -0.0371355265, + -0.0669392645, 0.0385244153, 0.0153366327, -0.0856137797, 0.0560351126, 0.193200365, -0.00926990341, -0.127741203, + -0.0292537957, 0.0220830142, 0.278140455, 0.103414632, -0.0759675577, 0.276600808, 0.195803478, 0.15782474, + -0.0873748437, 0.0391741581, 0.0707361251, 0.011684278, -0.173374668, 0.165234312, 0.117244273, 0.117439158, + -0.0776897743, 0.0587770641, 0.0896521658, 0.0743770152, 0.00299247727, -0.148207247, 0.216806695}, + {0.247945741, 0.373665065, -0.784210563, 0.0810172036, -0.254469395, 0.123803861, 0.0185929611, -0.161129281, + 0.133866206, -0.0122072827, 0.0435744189, 0.159817547, -0.119420849, 0.156391621, -0.120359056, -0.0172648709, + 0.12132702, -0.139718816, -0.25699982, -0.0181998741, 0.187360913, -0.114331208, -0.0965898857, -0.247373328, + 0.0674213991, -0.112847745, 0.00243260246, -0.125651479, 0.213533133, -0.148476318, 0.0971871316, -0.0593989678, + -0.124491386, 0.0962298959, 0.0730938986, -0.0696421713, 0.0306892823, 0.114902817, 0.158341929}, + {-0.130461201, -0.341370583, 0.745835483, 0.065755859, 0.0842281431, 0.0771425739, 0.0493860058, 0.134699181, + 0.00582875917, -0.0532861762, 0.152803019, -0.0354437567, 0.175058797, 0.158144817, 0.405953377, 0.0637339652, + 0.179610297, -0.0726688728, -0.0250953715, -0.0062681525, -0.0863090977, 0.0256290268, 0.271087855, 0.173018828, + 0.0440122932, -0.182761341, 0.00611204002, 0.170174256, -0.00752268359, 0.313930094, 0.135707662, 0.251813382, + -0.166863292, 0.0761356056, -0.0727235302, -0.432026505, 0.0397393703, 0.167176783, -0.0823570192}, + {0.0108405417, 0.329619586, -0.444701076, -0.0478907414, -0.0614593662, 0.0435050838, -0.0521009751, 0.0885258391, + 0.0179478861, -0.0881690532, 0.160766065, 0.10792616, -0.228383169, 0.175166219, 0.145234391, 0.0750966445, + -0.1066048, -0.056228783, -0.209721774, -0.0794245824, -0.0347438417, -0.0491339825, -0.0734279603, -0.143552557, + 0.134705752, -0.190350011, 0.14871417, -0.0288430229, 0.00432106759, -0.045178432, -0.0245399568, -0.256775826, + -0.164180204, -0.0401285291, -0.0610012747, -0.11673931, 0.028937079, -0.223496318, -0.10253869}, + {-0.00532094715, 0.414942384, -0.43767339, -0.0267242752, 0.0665540174, 0.0474961139, -0.0640570447, -0.302960247, + -0.0706632435, -0.0838026926, 0.0321815312, -0.0419509523, 0.186175212, 0.141904354, -0.206237495, -0.0672782362, + -0.292603523, -0.170199886, 0.0125456685, -0.284919709, 0.00962671358, -0.0894899666, 0.232623041, 0.042644728, + 0.0726713166, -0.0333710648, -0.0177215803, 0.391929924, 0.0380904414, 0.313689917, 0.0520455018, 0.0112551143, + 0.0219149571, -0.132060036, 0.0332516953, -0.142744556, -0.0138720619, -0.145460993, -0.183476716}, + {-0.193555906, -0.0467746705, 0.803341031, -0.104172468, 0.242219612, 0.17386061, -0.0379906818, 0.100478172, + 0.113529988, 0.0894582793, -0.0374606326, -0.139370829, -0.112638742, 0.0381268226, -0.0315437578, 0.104297206, + 0.227493808, -0.0201654173, 0.216230184, 0.0183001012, -0.0474208333, 0.053701859, -0.0322367102, -0.12053629, + 0.0467930324, 0.0924857631, -0.0245457049, -0.0631018803, -0.142730415, 0.167687416, 0.101428375, 0.046973478, + -0.0245281793, -0.00355248782, 0.0429402143, 0.0982223749, 0.0635970086, 0.0332510583, -0.0584590584}, + {-0.260056585, -0.25032261, 0.79693532, -0.0215409845, 0.153850213, 0.0145822885, 0.2005371, 0.107128233, + 0.0453472957, 0.0613995455, 0.0320030488, -0.133719012, 0.0337307379, -0.105219826, -0.00296660815, -0.0234197248, + 0.111989632, 0.128623813, 0.196543694, 0.194187075, 0.0623491406, 0.151907101, 0.02351542, -0.0161357429, + -0.00796873122, 0.0537771247, -0.17130053, 0.0717502832, 0.0140497452, 0.064686805, -0.0277781002, 0.148276493, + 0.0417260379, 0.0658941418, 0.0553245284, -0.0137356883, 0.0203089174, -0.15243578, 0.119086578}, + {0.0190943331, 0.260754734, -0.832034528, 0.173146978, -0.0786512718, -0.128384277, -0.0275706649, 0.21833159, + 0.0927760527, 0.0785156041, -0.105088301, -0.0521118343, 0.172578648, -0.12481986, -0.226779148, 0.1964854, + 0.121612214, -0.141516119, -0.0514119714, 0.147980899, -0.124127038, -0.115604773, -0.148749739, -0.0942790732, + -0.00738707744, 0.0645625442, 0.0464992523, 0.0932923257, 0.022279406, 0.132157266, 0.104242869, -0.216193408, + 0.212050915, 0.14149709, 0.0725842565, -0.0147363953, 0.121583998, 0.00442878623, 0.0457842052}, + {0.23848787, 0.128318608, -0.0320354328, -0.553411961, -0.249291837, -0.181355283, -0.0949874148, 0.0483659171, + -0.251930743, -0.349954516, -0.177128568, -0.0122124627, 0.369008869, 0.0962708071, -0.0157705769, 0.0879146531, + -0.280469924, -0.436639786, -0.149096102, 0.0479401723, 0.00738456938, -0.15594539, -0.587058723, -0.278792471, + -0.0630885065, 0.014328992, -0.0404720269, -0.0203435682, 0.0441317558, -0.470407903, 0.134132683, 0.0591885038, + 0.0331271105, -0.128428847, 0.0497677289, -0.411763608, -0.110440314, 0.144934818, 0.118522406}, + {-0.107184567, 0.137971461, -0.552492738, -0.393089861, -0.0692710355, -0.140699163, -0.166987583, 0.066882588, + -0.0298946444, -0.136368275, 0.183906093, -0.160736591, -0.0571746901, 0.0595548078, -0.201114237, 0.0869465768, + -0.245469585, 0.0870876983, 0.0900784284, 0.129198015, -0.112433426, 0.137195826, -0.00724515319, -0.233147532, + 0.0217625014, -0.0705954358, -0.132288501, -0.138916746, -0.286449522, 0.0171295702, -0.0935383365, -0.415635675, + 0.150903568, 0.110844441, 0.24903731, -0.111095503, -0.302143037, 0.212805167, -0.105084702}, + {-0.05033971, -0.870794713, 0.684354782, -0.0638439879, -0.13829115, 0.202119902, -0.0102287112, 0.0522965342, + 0.0851309001, 0.166831464, 0.145465985, -0.0324880332, 0.0647958964, 0.0916113332, 0.366854578, 0.00453874003, + 0.102219582, 0.11529924, 0.268190265, 0.273680955, -0.0294867996, 0.0461280569, 0.0347741544, 0.222198293, + 0.0767173469, 0.0884369612, -0.0707502067, 0.00749963149, 0.046364177, 0.0519050099, -0.00420740619, 0.198593989, + 0.0440058857, 0.00494893314, -0.0246491842, -0.0410683118, 0.0765382424, 0.0352954715, 0.0754649788}, + {-0.107376792, 0.245440051, -0.51931113, -0.0277185794, -0.215802744, 0.0993195027, -0.0649938732, -0.206397519, + 0.139884755, 0.0628253445, -0.0290410127, -0.226904541, 0.0201662742, -0.19509995, -0.282410115, 0.0115329186, + 0.139148131, -0.0928259119, -0.173514321, -0.00693756342, 0.0546970554, -0.0463097282, 0.0281404816, -0.00954110548, + 0.202606022, -0.0533665009, -0.1452934, -0.0230736397, -0.0993508846, 0.0338425413, -0.152060911, -0.0437800661, + 0.048617173, 0.0967594758, -0.28926298, 0.0650932714, -0.191411003, 0.0299630035, 0.181884274}, + {-0.0522714332, -0.541984975, 0.417993784, 0.0310709421, 0.253448159, 0.168342412, 0.266234457, 0.241972029, + 0.0422224067, -0.0721908808, 0.131623223, 0.0166996308, -0.0518211089, 0.256014645, 0.197816923, 0.300937951, + 0.030572392, -0.0132445609, 0.0971786603, 0.222085074, -0.0438340493, -0.156478733, 0.177082881, 0.187181115, + 0.0157581791, 0.043070443, 0.175861612, -0.160448015, -0.0251710843, 0.151227951, 0.0329645835, 0.0581324734, + 0.213010997, 0.0573022142, -0.115403593, 0.0668641031, -0.238754466, -0.200613633, -0.00578668807}, + {0.182706043, 0.143427446, -0.765004098, -0.0340749472, -0.19112201, -0.192697212, 0.153809428, 0.136086583, + 0.0750975981, -0.0299037043, 0.036472369, 0.197095618, 0.181681737, -0.10177514, -0.0881030187, -0.0410719253, + -0.0388450585, -0.0787736923, 0.00862494204, -0.208843008, 0.0850218982, 0.110067464, -0.0655542687, -0.105995789, + 0.244761303, -0.0248718858, -0.00512749935, -0.0932898894, 0.113698535, 0.0270682201, -0.098704651, -0.0822669789, + 0.0939181, -0.029729832, 0.216310576, 0.17139028, -0.0201715957, 0.132537037, -0.0084651839}, + {-0.128360808, -0.352734834, 0.88293761, -0.112930961, 0.0667247698, 0.145476907, 0.0909606442, -0.00173785153, + -0.0760768279, 0.0397452936, 0.057000231, 0.0913812742, 0.00447742967, 0.0553501435, 0.137134552, -0.077290006, + 0.0617681816, 0.064985618, 0.122450382, 0.109504871, 0.136662304, 0.17156966, 0.096282877, 0.134258002, + 0.0867081732, 0.254897445, 0.0906943828, -0.0984610468, -0.0330038592, 0.18545334, -0.0980699509, 0.0050691627, + 0.189829797, -0.113470003, 0.0408929884, -0.110245854, -0.0873558447, -0.0139029911, 0.0148753757}, + {0.178910881, 0.482120663, -0.534130871, 0.264997512, -0.121468082, 0.0808797553, -0.263360828, -0.361308336, + 0.0175101329, 0.00866684504, 0.131393597, -0.0409379154, -0.0374576114, 0.241147041, -0.0499686822, -0.0821040943, + 0.134441853, 0.0470172167, 0.0580324382, 0.0497627407, 0.105935283, -0.310817003, 0.0252181478, -0.0945300311, + -0.485286742, -0.139159098, -0.167485103, -0.0263403319, -0.0100384327, -0.133022606, -0.0438377373, 0.243452698, + 0.0868987441, -0.400515348, -0.000186482444, -0.347522676, -0.0893771574, 0.0157621428, -0.622608244}, + {0.142747015, -0.472912014, -0.743358076, -0.0223967265, -0.0210361574, 0.00409339461, 0.0729280114, 0.0714563653, + 0.285424888, -0.297028929, -0.0791186467, 0.140863612, -0.0339579768, 0.113671683, 0.0402099155, -0.0787626281, + 0.00435523642, -0.0173931401, -0.0887548625, -0.000676208292, 0.19189395, 0.0208721124, 0.015914375, 0.0540504903, + 0.323654085, 0.0671219826, -0.0853690431, 0.0137658287, 0.173407242, -0.2807284, -0.0856320038, -0.13311635, + 0.0260826498, 0.0634475499, 0.255391657, 0.0420189798, 0.17504862, -0.173230857, 0.0157751124}, + {-0.03313886, 0.0998393968, 0.524940789, -0.0419604741, 0.0726594701, -0.020122556, 0.403700709, 0.10275811, + -0.0619508252, -0.0590844452, -0.160514742, -0.0717239082, -0.0178255998, -0.0160790011, -0.0654051304, -0.0379301049, + 0.29940936, -0.033161696, 0.270088315, 0.0450663902, 0.0596920438, 0.0756230205, -0.0113936905, -0.186718687, + 0.203255951, -0.112048775, -0.069718644, -0.134339243, 0.228223369, 0.177040875, -0.061372254, -0.0219076108, + -0.412217855, -0.0567054674, -0.168310866, 0.0577280223, -0.0249207392, 0.0586696118, -0.195022315}, + {0.119244799, 0.148358628, -0.645516813, -0.00243832381, -0.0473647453, -0.191837505, -0.0175140295, 0.149058953, + 0.00154689292, -0.114287481, -0.0367974825, -0.0844052881, 0.104061238, 0.0819725767, -0.221388817, 0.119554982, + 0.0660286397, 0.0134530813, -0.082344465, -0.132675797, 0.0333349332, -0.103744842, -0.122655869, 0.0732181966, + -0.106617182, -0.0608400516, -0.0795846879, -0.163159132, 0.228118688, 0.0842776746, 0.101582393, -0.242847189, + 0.210232809, 0.010308085, -0.00813801587, -0.123414055, 0.137146667, 0.177039951, 0.0305287857}, + {0.0413870253, -0.729069769, 0.531264186, 0.146147341, 0.116796665, 0.249779388, -0.0768813565, 0.226039141, + 0.258600861, 0.156947672, 0.158080786, 0.163098082, 0.0453513525, -0.088218838, 0.265675604, 0.118592672, + 0.320947379, 0.131670594, 0.174647927, 0.132898957, -0.17898263, 0.00559512572, 0.00500768842, -0.00429704739, + 0.0945884064, 0.187700346, 0.168263838, 0.150641143, -0.0652876496, 0.17885001, 0.106801204, 0.199558869, + 0.00562841957, 0.00747091649, -0.0597727783, 0.0255931728, 0.0778811499, -0.141193286, -0.122162029}, + {-0.1088567, -0.65803355, 0.5759691, 0.116666496, 0.103644341, 0.235419661, 0.261262804, -0.123253763, + -0.154286876, -0.074984245, -0.0370596573, -0.0602773353, 0.055402033, -0.0197789911, 0.200908169, 0.152206704, + 0.0202643722, 0.127753779, 0.211650237, 0.174159139, 0.21327208, 0.118832551, 0.078022182, 0.0699877888, + 0.178530842, 0.0849295035, -0.0765691027, 0.19159852, 0.0295127053, 0.258718818, 0.0692967027, -0.0410395302, + 0.187678695, -0.06347657, 0.143943265, 0.196454257, -0.0813914239, -0.13299717, -0.141023397}, + {0.162016541, 0.0925507843, -0.898661137, 0.0169786084, 0.111891791, 0.031697493, 0.0294247512, 0.0152893476, + 0.100542068, -0.110991627, -0.0547096655, 0.16978009, -0.208242267, 0.0175220035, -0.129194841, 0.0680126473, + -0.0978340656, -0.00555237383, 0.0238031596, 0.0730953291, 0.0921959877, 0.0165492296, -0.0800394565, -0.0270012785, + 0.177855879, -0.0835512057, -0.0886224583, -0.130613044, -0.140512809, 0.249915838, -0.137912139, -0.110400446, + 0.0309107825, -0.0369470268, -0.0293687489, -0.248170614, -0.0660486445, 0.103796318, 0.0179855581}, + {-0.232596382, 0.502320111, -0.415980816, -0.199266151, 0.326597095, -0.191527784, 0.166239277, 0.119097032, + 0.114210673, 0.103936881, 0.140402362, -0.101625003, 0.164756835, -0.00685595255, 0.125411734, 0.0265929885, + 0.239692807, 0.104033843, -0.119363382, -0.0316394903, 0.0285378862, -0.0727699623, -0.0176791828, -0.189887092, + 0.070288457, -0.16027528, -0.569774866, -0.118840836, -0.102585405, 0.0793700442, 0.106146261, 0.00645793742, + -0.0140585434, 0.111903556, 0.261220425, -0.0973523632, 0.0265318491, -0.00862870831, 0.0501338728}, + {-0.108910911, 0.062820591, -0.535542667, -0.23555094, -0.116679162, -0.0281174518, 0.227678508, -0.0477837659, + 0.0331880003, -0.088188678, -0.176043883, -0.249852985, 0.0806479454, 0.235472545, -0.157474831, 0.00382606639, + -0.146700025, 0.176247716, -0.0163424239, -0.141903669, 0.0898482502, 0.0921318159, -0.0621192046, -0.108997665, + -0.176920593, -0.117981121, 0.0871897414, -0.434226424, -0.0833046883, 0.268362224, -0.237923384, 0.136272967, + -0.103442721, -0.0813897103, -0.0112086842, -0.0882019624, -0.148755714, -0.0613335632, 0.296742648}, + {0.0451140627, -0.0779659078, -0.799054146, -0.057370007, 0.0675848722, -0.082774967, 0.0576372668, -0.0134418076, + -0.153597265, 0.0981145054, 0.104367055, 0.0630268604, -0.134197488, 0.0116075585, 0.0176457316, 0.0745266601, + 0.0912928879, -0.162541702, -0.0848572031, -0.159351319, 0.124793515, 0.224779993, -0.271517187, -0.166514099, + -0.129781827, 0.0215247013, 0.122260116, 0.0696836263, -0.113186635, -0.0262366962, 0.0256366562, 0.0561429597, + 0.0433459021, -0.0825277045, 0.113499574, 0.134015948, 0.0239969213, 0.0674849972, -0.0586059317}, + {0.0520149283, 0.319650501, -0.636340439, -0.241347641, 0.00538081536, -0.167543337, -0.121100433, -0.00732351094, + 0.0119186854, -0.126563624, 0.0778363049, -0.0429749414, -0.143562689, -0.0979017541, -0.107230291, -0.128355011, + 0.0970261842, -0.047295969, 0.146697506, -0.129307479, 0.0518672392, 0.0722521693, 0.141932175, 0.162346795, + -0.0903767273, 0.0875851959, -0.198173657, -0.210410297, 0.11021854, 0.0495040156, -0.0115429685, 0.118883967, + 0.0280674435, -0.0693705603, 0.145272657, 0.0403182767, 0.188722655, 0.154090852, -0.0755847692}, + {-0.2487472, 0.00228096335, -0.960409462, -0.156923458, 0.0463603772, 0.0248868801, 0.000787175493, 0.0550196506, + 0.443627298, 0.0763333887, -0.032459341, -0.117737621, 0.178923011, -0.0377082378, 0.14902091, 0.115580149, + -0.250380993, 0.106101453, 0.0493260026, -0.10024181, -0.118844151, -0.0837713778, -0.0176931061, -0.0386492796, + 0.0362544656, 0.103157662, -0.153193623, 0.00230953819, -0.0056374683, -0.0973639414, -0.0828164145, -0.0360356122, + 0.0208579358, 0.102091983, 0.024079768, 0.0101805553, 0.0270693712, -0.225048125, -0.192850769}, + {-0.03289726, 0.177870214, -0.427677751, 0.108024254, 0.0522361286, -0.204571471, 0.0257105362, -0.117211014, + -0.278591543, 0.00988011528, -0.0408014841, -0.2023191, -0.0124425227, -0.167907625, -0.0429406352, -0.0264416616, + -0.0169176385, 0.147660777, -0.0340998024, -0.256484836, -0.139011711, 0.118554644, -0.1203117, -0.129394874, + -0.0911816657, -0.20112282, -0.254098982, 0.166062847, 0.160309136, 0.128211275, -0.181137174, 0.133415803, + -0.00768132741, 0.331019819, -0.513802588, 0.100675195, 0.0274997205, 0.0318247564, -0.102002211}, + {-0.0624212846, -0.989633977, 0.582228184, 0.0392177738, 0.220540404, 0.220092133, 0.216494828, 0.206345916, + 0.0923131779, 0.024049338, -0.00791351032, -0.0695016161, -0.0775457546, -0.0517051443, 0.042020686, -0.0315407775, + 0.148762271, -0.0212753583, -0.0314742476, 0.307531953, -0.0718781278, 0.0585421883, 0.1436055, -0.0601983033, + 0.13672173, 0.0180950202, 0.14101465, 0.215613797, 0.0272845402, 0.214413926, -0.0208570268, 0.0644971058, + -0.153567508, -0.143465996, 0.0753719136, 0.0966045633, -0.0851323828, -0.0720881447, 0.0400008857}, + {-0.0363125019, 0.145418867, -0.4747051, -0.0952232331, -0.0739930496, 0.0123077184, -0.0163431037, 0.0354281291, + -0.38108772, -0.381356776, -0.0577115342, -0.013802994, -0.0893754438, 0.144158855, -0.0861852393, 0.151126236, + 0.291919738, -0.106129132, 0.266006261, -0.106813483, -0.198061496, 0.410635799, -0.0690176785, -0.0358896479, + 0.201788962, 0.0264057945, -0.00694671459, 0.346231192, 0.00660472549, -0.034632083, 0.00134218822, -0.321757674, + 0.237247795, 0.231073141, -0.471630573, 0.0301942099, 0.0709557757, -0.166421622, -0.00881882384}, + {0.0696669072, -0.719992757, 0.528034091, 0.145231172, 0.268405735, 0.00639493624, 0.0645371154, -0.0086593125, + 0.174200147, -0.221671045, 0.309235305, -0.0128617464, -0.140373856, 0.353904724, 0.231442928, -0.00703292713, + 0.130451486, -0.0714284033, 0.215705469, 0.0537098944, 0.0929901525, 0.00164988986, -0.0585841872, 0.112196051, + 0.0694685951, -0.0192532521, 0.230448529, 0.266123563, -0.0420201495, 0.0242676567, 0.246525571, -0.0548382998, + -0.383607805, 0.024575701, 0.234152272, 0.0461015776, -0.238480404, -0.219269127, 0.0793404505}, + {-0.300114334, -0.100237787, -0.688452661, -0.115204073, 0.0106008118, 0.0129670044, -0.222953305, -0.277550906, + -0.103165731, -0.0344680548, -0.336341351, 0.180666059, 0.0351991691, -0.0478996485, -0.241981253, 0.13093397, + 0.173590019, 0.140087083, -0.260966957, 0.00925489888, 0.286191612, -0.0670887157, -0.0722000599, -0.274044603, + 0.0876877233, -0.172131017, -0.324012339, -0.157435119, 0.248860866, 0.0211637355, -0.198854133, -0.0542903729, + 0.105234995, -0.0327985883, -0.163545638, -0.139644653, 0.0803952292, -0.16866231, 0.184724972}, + {0.0756873637, 0.200195521, -0.519687653, -0.0615778491, 0.0167808123, 0.0518448539, -0.0396123379, -0.191904023, + 0.0296451766, 0.0544404909, -0.00630230317, -0.00909363385, 0.167532533, -0.243618011, -0.105149314, -0.107102737, + 0.278960764, 0.00415468821, -0.0312563516, 0.0589833856, 0.0656392202, 0.0701212883, -0.0489007011, -0.0671977997, + -0.325132549, -0.188493103, -0.254190892, -0.147453234, 0.041183237, -0.0872151256, 0.130776376, 0.0909287035, + -0.15317975, -0.200129867, -0.00445873244, 0.264149666, 0.0917019621, -0.00374048809, -0.205288649}, + {0.193788081, 0.303583026, -0.201680839, -0.483353347, -0.117335364, -0.0705456063, -0.150525495, 0.155855566, + -0.104301251, -0.0899897367, 0.00310595543, 0.102737345, -0.103476346, -0.346430421, -0.240720123, 0.0943622515, + -0.123448357, -0.3539702, -0.250118017, -0.0928550884, -0.102663741, -0.0929587558, 0.0906545222, 0.196432576, + 0.214587584, 0.0833179206, -0.149880037, 0.119759679, 0.0411626808, -0.492740631, -0.105393209, 0.241155654, + -0.0618355013, -0.220170096, 0.206247658, -0.0117166247, -0.432131588, 0.405917466, -0.140086144}, + {0.0584630631, -0.267934769, 0.540570021, -0.032216087, -0.114824928, 0.133836895, 0.265204906, 0.0240877587, + 0.0321829468, 0.259291738, -0.0998718813, -0.265773058, 0.0940765813, 0.0799822882, -0.040411476, -0.000588462688, + 0.0536118634, -0.152716696, 0.248526454, -0.0942738801, -0.0119718723, 0.174689412, 0.037665315, 0.0624456033, + -0.10652525, 0.0484109484, 0.0773220286, 0.0461122654, -0.0714647025, 0.0515299514, -0.156356111, -0.0460160971, + -0.0620007999, -0.0620751828, 0.0203596987, 0.256730735, 0.0132819414, -0.219160318, 0.228445679}, + {0.127357915, 0.192045361, -0.579410315, -0.127873614, -0.191322997, -0.0933184251, -0.174084544, 0.159596816, + 0.0545510761, -0.00952024572, 0.0235787462, 0.105215624, 0.0201963726, 0.286611825, -0.156879604, -0.0435729325, + 0.0587269627, 0.149321064, 0.128488064, 0.201110587, -0.0175572373, -0.0338986441, 0.0437766649, 0.0822651237, + -0.0563717037, 0.0302920118, -0.0321599133, -0.241854101, 0.0823644176, -0.114064656, -0.0913481563, -0.0561605096, + 0.00404791255, -0.106938832, -0.0542913824, -0.269585371, -0.0205787886, -0.436945945, 0.072630465}, + {-0.0248607639, -0.0126015926, 0.685500503, -0.13970457, 0.0755622536, 0.142778993, 0.0540239699, 0.019267492, + -0.0814138055, -0.0187993664, 0.0714498386, -0.154841051, 0.111843787, 0.1565236, -0.0845943466, 0.0763534158, + 0.243300676, -0.0383384451, -0.0508198813, -0.0969228595, -0.0576302931, 0.278416663, -0.066178903, -0.0602819026, + -0.0164174475, -0.13569726, -0.14349021, 0.191934347, -0.126222998, 0.148024723, -0.101755328, 0.271617293, + 0.0205672923, -0.184753031, 0.21793671, 0.173438862, 0.0226502102, -0.0186628159, -0.0375668667}, + {-0.0219210107, -0.128856897, -0.207741931, -0.0860694423, 0.0216722693, -0.293519825, -0.134653702, -0.0803605542, + -0.279992312, -0.117281601, -0.225327328, 0.137726501, -0.0128108887, 0.121971115, 0.0120624145, 0.157565743, + -0.052343078, 0.104054987, -0.222191781, -0.176582545, 0.068053782, -0.243456498, 0.206803069, 0.160156205, + 0.0420886278, -0.176420465, -0.0740244314, -0.0594712086, -0.181899533, -0.110147595, -0.25870347, 0.113253579, + 0.0987374783, -0.424778759, -0.00960531365, -0.117930494, 0.0817373544, -0.072258465, -0.0938088521}, + {-0.0142267291, -0.264209867, 0.805707991, 0.0231617317, 0.160881266, 0.0342829563, 0.0290782917, 0.102651201, + 0.0261039902, 0.0836430416, 0.111244068, -0.0541428849, 0.278689116, 0.0938472301, 0.169007659, 0.0139186196, + 0.162517756, 0.248461038, 0.11955478, 0.0383770093, -0.0445002504, 0.012569828, 0.212754682, 0.23371309, + 0.0112959789, -0.272043765, -0.15336515, 0.0604166947, 0.0928523093, -0.0803618282, 0.0274842009, 0.25391677, + 0.0233797375, -0.0724340305, 0.00707607763, 0.0678603947, 0.12597774, -0.021455396, 0.282708526}, + {0.0530294366, 0.175433755, -0.812801361, 0.0399266891, -0.0937239602, 0.158731684, 0.0739682913, 0.0620659217, + 0.248339817, -0.0376703814, 0.0145291565, -0.0160099361, -0.0126854349, -0.0672243983, -0.221448869, 0.142669588, + 0.134081095, 0.0575765334, -0.0597605295, 0.110128671, -0.210933506, -0.0110336756, -0.0464208499, 0.0818552375, + -0.196937948, 0.0396884084, -0.00343017397, -0.031074049, 0.0641027018, -0.0153171401, 0.0618477352, 0.0331603996, + 0.33835873, 0.00597961759, 0.152293965, -0.0369251817, -0.0372885689, 0.124470301, 0.186949179}, }; const float six_dense_biases[SIX_DENSE_NUM] = { - -0.106425747, 0.142752945, 0.145629004, 0.00546986563, -0.0097992355, 0.0908411667, 0.00711907772, -0.114593297, - -0.092972368, -0.0360035077, -0.00956747867, -0.0729396343, -0.117534339, -0.0428674631, -0.126915231, 0.080137834, - 0.0734208748, -0.133160949, 0.0272146966, 0.0934232846, -0.159518629, -0.101017371, -0.141830996, 0.0214058515, - 0.101856165, -0.0170916207, -0.00711661531, -0.0615158267, -0.0289785173, 0.0253515765, 0.043456465, 0.146055236, - -0.000608377974, 0.146163985, 0.0434216857, 0.074026987, -0.0930295065, -0.0972476453, 0.0507774651, 0.0938288271, - -0.00998653471, -0.0581613779, -0.0754808784, -0.1074294, 0.104443379, 0.0734389573, 0.159931183, 0.0165527258, - -0.0859139413, 0.0425923169, -0.0468143895, 0.096265316, 0.113443732, 0.0967639759, 0.145086646, -0.0425086133, - 0.110646464, -0.0239180867, 0.0744835287, -0.107726648, -0.152292877, 0.105378613, -0.0339635648, -0.126999453 + 0.0518913344, 0.0167221036, -0.0378771275, -0.199898466, -0.0538039804, 0.108015999, -0.119998835, 0.0804165825, + 0.0554692224, -0.0645367131, -0.0237321015, 0.178871185, 0.0172098372, 0.176579624, -0.167090327, -0.00345131545, + 0.109402806, 0.0315130427, -0.0746222436, 0.0546944141, -0.12706992, 0.173666835, 0.116913021, -0.127412245, + -0.0672582611, 0.184880778, 0.0890215933, -0.0441896208, -0.309641331, 0.08389128, 0.131596148, 0.144563377, + 0.196799755, -0.112892613, -0.112884499, -0.0451603755, -0.168520987, 0.175658196, 0.0640755445, 0.140594989, + 0.203608438, 0.0531219617, 0.168874472, -0.124918915, -0.154922098, -0.139817134, 0.0800537914, 0.0399043597, + 0.0573609397, 0.129984304, -0.10384991, -0.169068992, -0.104140788, -0.0470843799, -0.00375794806, -0.167530179, + -0.244247869, -0.0644299388, -0.030715555, -0.249677241, 0.0417533629, -0.275687188, -0.101081789, 0.218871728 }; const float six_logit_weights[SIX_DENSE_NUM] NN_ALIGNED = { - -0.0705124587, 0.0868723392, 0.0520056635, 0.0647664964, -0.0928007513, -0.0886785686, -0.113316193, -0.0289525986, - -0.08650738, 0.0771128982, 0.0233608782, 0.107995376, 0.0838339776, -0.120495304, 0.0639513433, 0.0945038646, - -0.074260354, -0.0589973927, 0.0363359153, 0.10274297, -0.0414749533, -0.0211133063, 0.0633404851, -0.0377910733, - -0.0363686532, 0.0756987631, 0.0449215174, -0.0807459652, 0.105491117, 0.0272067338, -0.0523718894, -0.0948979259, - -0.0711999387, 0.0229022354, 0.0608644933, 0.0173428953, 0.0460195094, -0.100155696, -0.0285425484, 0.0336628258, - -0.0983794481, -0.1200317, 0.0569871217, 0.0507859439, 0.123536095, -0.122615263, -0.0976838917, -0.0485803038, - -0.0482099652, -0.0274398476, 0.0169587582, 0.0929383337, -0.122677058, -0.110818297, 0.0514815152, -0.061397016, - -0.0709132254, 0.11439988, 0.0762117952, -0.096738115, 0.0813071877, 0.108724922, -0.0449660271, 0.0470137894 + -0.548384547, 0.206728697, -1.49714518, 0.226278767, 0.56896174, -0.575925887, -0.430921525, 0.529933453, + -0.0730793551, -0.460997105, 0.363704413, -0.36077413, -0.608377337, 0.415781796, -0.301446617, -0.134732857, + -0.127074242, 0.272080243, 0.176494434, -0.107967772, 0.390860647, 0.523743033, 0.271249533, -0.421942949, + -0.308931798, 0.32740137, -0.445393056, 0.0912020281, 0.374524713, -0.136318102, -0.195394054, 0.17766346, + 0.339828551, 0.261625558, -0.981469214, 0.279721618, -0.450761527, 0.249684572, -0.420574635, 0.414145678, + 0.463071615, -0.114338741, 0.144301102, -0.367231369, -0.302023709, 0.211034298, -0.455296099, 0.505889177, + 0.361589432, 0.323655665, 0.526145756, 0.159891024, -0.705625653, 0.368265748, -0.551005423, 0.494499385, + 0.312590718, 0.389481485, -0.152014822, 0.383812606, -0.131353125, 0.109772533, -0.288320571, 0.225765198 }; -const float six_logit_bias = 0.0557706803; +const float six_logit_bias = 0.107445575; diff --git a/include/weights_6.h b/include/weights_6.h index b572ffa..d1a7c99 100644 --- a/include/weights_6.h +++ b/include/weights_6.h @@ -21,9 +21,9 @@ #define SIX_INP_NUM (3 + 6 * 6) #define SIX_DENSE_NUM 64 -/* See weights_5.h for the alignment rationale. */ #define NN_ALIGNED __attribute__((aligned(16))) +extern const float six_embedding[7]; extern const float six_dense_weights[SIX_DENSE_NUM][SIX_INP_NUM] NN_ALIGNED; extern const float six_dense_biases[SIX_DENSE_NUM]; extern const float six_logit_weights[SIX_DENSE_NUM] NN_ALIGNED; |
