diff --git a/tests/eval/_ntt/default.nix b/tests/eval/_ntt/default.nix new file mode 100644 index 000000000..77a1a7a0b --- /dev/null +++ b/tests/eval/_ntt/default.nix @@ -0,0 +1,44 @@ +{ linkerScript +, makeBuilder +, t1main +}: + +let + builder = makeBuilder { casePrefix = "eval"; }; + build_ntt = caseName /* must be consistent with attr name */ : main_src: kernel_src: + builder { + caseName = caseName; + + src = ./.; + + passthru.featuresRequired = { }; + + buildPhase = '' + runHook preBuild + + $CC -T${linkerScript} \ + ${main_src} ${kernel_src} \ + ${t1main} \ + -o $pname.elf + + runHook postBuild + ''; + + meta.description = "test case 'ntt'"; + }; + +in { + ntt_64 = build_ntt "ntt_64" ./ntt.c ./ntt_64_main.c; + ntt_128 = build_ntt "ntt_128" ./ntt.c ./ntt_128_main.c; + ntt_256 = build_ntt "ntt_256" ./ntt.c ./ntt_256_main.c; + ntt_512 = build_ntt "ntt_512" ./ntt.c ./ntt_512_main.c; + ntt_1024 = build_ntt "ntt_1024" ./ntt.c ./ntt_1024_main.c; + ntt_4096 = build_ntt "ntt_4096" ./ntt.c ./ntt_4096_main.c; + + ntt_mem_64 = build_ntt "ntt_mem_64" ./ntt_mem.c ./ntt_64_main.c; + ntt_mem_128 = build_ntt "ntt_mem_128" ./ntt_mem.c ./ntt_128_main.c; + ntt_mem_256 = build_ntt "ntt_mem_256" ./ntt_mem.c ./ntt_256_main.c; + ntt_mem_512 = build_ntt "ntt_mem_512" ./ntt_mem.c ./ntt_512_main.c; + ntt_mem_1024 = build_ntt "ntt_mem_1024" ./ntt_mem.c ./ntt_1024_main.c; + ntt_mem_4096 = build_ntt "ntt_mem_4096" ./ntt_mem.c ./ntt_4096_main.c; +} diff --git a/tests/eval/_ntt/gen_data.py b/tests/eval/_ntt/gen_data.py new file mode 100644 index 000000000..41aca2341 --- /dev/null +++ b/tests/eval/_ntt/gen_data.py @@ -0,0 +1,24 @@ +import random + +def main(): + vlen = 4096 + l = 12 + n = 1 << l + # assert n <= vlen // 4 + p = 12289 # p is prime and n | p - 1 + g = 11 # primitive root of p + assert (p - 1) % n == 0 + w = (g ** ((p - 1) // n)) % p # now w^n == 1 mod p by Fermat's little theorem + print(w) + + twindle_list = [] + for _ in range(l): + twindle_list.append(w) + w = (w * w) % p + print(twindle_list) + + a = [random.randrange(p) for _ in range(n)] + print(a) + +if __name__ == '__main__': + main() diff --git a/tests/eval/_ntt/gen_vector_ntt_tw.py b/tests/eval/_ntt/gen_vector_ntt_tw.py new file mode 100644 index 000000000..7a84e0f85 --- /dev/null +++ b/tests/eval/_ntt/gen_vector_ntt_tw.py @@ -0,0 +1,53 @@ +def gen_tw_for_vector_ntt(l, w_one, prime_p): + n = pow(2, l) + w_power_list = [] + m = 2 + while m <= n: + w_power = 0 + w = 1 + w_power_dict = {} + for j in range(m // 2): + k = 0 + while k < n: + i_u = k + j + i_t = k + j + m //2 + k += m + w_power_dict[i_u] = (i_t, w_power) + w_power += n//m + m = 2 * m + w_power_list.append(w_power_dict) + + # print(w_power_list) + perm_each = { } + for i in range(n//2): + perm_each[i] = i + perm_each[i+n//2] = i + n//2 + # print("(coe 0, 1), w_power, (permu 0, 1)\n") + print(f"\nfor ntt {n}") + layer_index = 0 + for w_power_dict in w_power_list: + print(f"// layer #{layer_index}") + layer_index += 1 + + # sort_keys = sorted(w_power_dict.keys()) + sort_keys = w_power_dict.keys() + index = 0 + for w_key in sort_keys: + # print(f"({w_key}, {w_power_dict[w_key][0]}), {w_power_dict[w_key][1]}, ", end = "") + # print(f"({perm_each[w_key]}, {perm_each[w_power_dict[w_key][0]]})") + current_w = pow(w_one, w_power_dict[w_key][1], prime_p) + print(current_w, end = ", ") + perm_each[w_key] = index + perm_each[w_power_dict[w_key][0]] = index + n//2 + index += 1 + + print("\n") + +if __name__ == '__main__': + gen_tw_for_vector_ntt(6, 7311, 12289) + gen_tw_for_vector_ntt(7, 12149, 12289) + gen_tw_for_vector_ntt(8, 8340, 12289) + gen_tw_for_vector_ntt(9, 3400, 12289) + gen_tw_for_vector_ntt(10, 10302, 12289) + gen_tw_for_vector_ntt(12, 1331, 12289) + diff --git a/tests/eval/_ntt/ntt.c b/tests/eval/_ntt/ntt.c new file mode 100644 index 000000000..445d905bb --- /dev/null +++ b/tests/eval/_ntt/ntt.c @@ -0,0 +1,135 @@ +#include +#include + +// #define USERN 32 +// #define DEBUG + +// array is of length n=2^l, p is a prime number +// roots is of length l, where g = roots[0] satisfies that +// g^(2^l) == 1 mod p and g^(2^(l-1)) == -1 mod p +// roots[i] = g^(2^i) (hence roots[l - 1] = -1) +// +// 32bit * n <= VLEN * 8 => n <= VLEN / 4 +void ntt(const int *array, int l, const int *twiddle, int p, int *dst) { + // prepare an array of permutation indices + assert(l <= 16); + + int n = 1 << l; + + // registers: + // v8-15: array + // v16-24: loaded elements (until vrgather) + // v4-7: permutation index (until vrgather) + // v16-24: coefficients + int vlenb; + asm("csrr %0, vlenb" : "=r"(vlenb)); + int elements_in_vreg = vlenb * 2; + assert(elements_in_vreg >= n); + + asm("vsetvli zero, %0, e16, m4, tu, mu\n" + "vid.v v4\n" + : + : "r"(n)); + + // prepare the bit-reversal permutation list + for (int k = 0; 2 * k < l; k++) { + asm("vand.vx v8, v4, %0\n" + "vsub.vv v4, v4, v8\n" + "vsll.vx v8, v8, %1\n" // get the k-th digit and shift left + + "vand.vx v12, v4, %2\n" + "vsub.vv v4, v4, v12\n" + "vsrl.vx v12, v12, %1\n" // get the (l-k-1)-th digit and shift right + + "vor.vv v4, v4, v8\n" + "vor.vv v4, v4, v12\n" + + : + : "r"(1 << k), "r"(l - 1 - 2 * k), "r"(1 << (l - k - 1))); + } + + // perform bit-reversal for input coefficients + asm("vsetvli zero, %0, e32, m8, tu, mu\n" + "vle32.v v16, 0(%1)\n" + "vrgatherei16.vv v8, v16, v4\n" + "vse32.v v8, 0(%2)\n" + + : + : "r"(n), "r"(array), "r"(dst)); + + // generate permutation list (0, 2, 4, ..., 1, 3, 5, ...) + asm("vsetvli zero, %0, e16, m4, tu, mu\n" + "vid.v v4\n" + "vsrl.vx v0, v4, %1\n" // (0, 0, 0, 0, ..., 1, 1, 1, 1, ...) + "vand.vx v4, v4, %2\n" // (0, 1, 2, 3, ..., 0, 1, 2, 3, ...) + "vsll.vi v4, v4, 1\n" + "vadd.vv v4, v4, v0\n" + + : + : "r"(n), "r"(l-1), "r"((n / 2 - 1)), "r"(n / 2)); + +#ifdef DEBUG + int tmp1[USERN];// c + int tmp2[USERN];// c + int tmp3[USERN];// c +#endif + + for (int k = 0; k < l; k++) { + asm( + // "n" mode + "vsetvli zero, %0, e32, m8, tu, mu\n" + // load coefficients + "vle32.v v16, 0(%4)\n" + // perform permutation for coefficient + "vrgatherei16.vv v8, v16, v4\n" + // save coefficients + "vse32.v v8, 0(%4)\n" + + // "n/2" mode + "vsetvli zero, %1, e32, m4, tu, mu\n" + // load twiddle factors + "vle32.v v16, 0(%2)\n" + // load half coefficients + "vle32.v v8, 0(%4)\n" + "vle32.v v12, 0(%5)\n" + + #ifdef DEBUG + "vse32.v v8, 0(%6)\n"// c + "vse32.v v12, 0(%7)\n"// c + "vse32.v v16, 0(%8)\n"// c + #endif + + // butterfly operation + "vmul.vv v12, v12, v16\n" + "vrem.vx v12, v12, %3\n" + "vadd.vv v16, v8, v12\n" // TODO: will it overflow? + "vsub.vv v20, v8, v12\n" + // save half coefficients + "vse32.v v16, 0(%4)\n" + "vse32.v v20, 0(%5)\n" + : + : /* %0 */ "r"(n), + /* %1 */ "r"(n / 2), + /* %2 */ "r"(twiddle + k * (n / 2)), + /* %3 */ "r"(p), + "r"(dst), + "r"(dst + (n / 2)) + #ifdef DEBUG + , "r"(tmp1), "r"(tmp2), "r"(tmp3) + #endif + ); + #ifdef DEBUG + for(int k = 0; k < USERN; k++) { + printf("(%x, %x, %x)\n", tmp1[k], tmp2[k], tmp3[k]); + } + #endif + } + // deal with modular + asm("vsetvli zero, %0, e32, m8, tu, mu\n" + "vle32.v v16, 0(%1)\n" + "vrem.vx v8, v16, %2\n" + "vse32.v v8, 0(%1)\n" + + : + : "r"(n), "r"(dst), "r"(p)); +} diff --git a/tests/eval/_ntt/ntt_1024_main.c b/tests/eval/_ntt/ntt_1024_main.c new file mode 100644 index 000000000..f899c400e --- /dev/null +++ b/tests/eval/_ntt/ntt_1024_main.c @@ -0,0 +1,159 @@ +// requires VLEN >= 4096 + +#include + +void ntt(const int *array, int l, const int *twiddle, int p, int *dst); + +void test() { + const int l = 10; + const int n = 1024; + static const int arr[1024] = { + 9997, 6362, 7134, 11711, 5849, 9491, 5972, 4164, 5894, 11069, + 7697, 8319, 2077, 12086, 10239, 5394, 4898, 1370, 1205, 2997, + 5274, 4625, 11983, 1789, 3645, 7666, 12128, 10883, 7376, 8883, + 2321, 1889, 2026, 8059, 2741, 865, 1785, 9955, 2395, 9330, + 11465, 7383, 9649, 11285, 3647, 578, 1158, 9936, 12019, 11114, + 7894, 4832, 10148, 10363, 11388, 9122, 10758, 2642, 4171, 10586, + 1194, 5280, 3055, 9220, 10577, 9046, 1284, 7915, 10213, 6902, + 3777, 9896, 429, 7730, 7429, 8666, 10887, 11255, 2437, 7782, + 1327, 7010, 4009, 1038, 9466, 5352, 1473, 10067, 11753, 2019, + 8472, 7665, 2679, 5070, 2248, 3044, 10301, 10671, 2092, 1069, + 9032, 9131, 11715, 6662, 3423, 10027, 5436, 4259, 999, 3316, + 11164, 5597, 6578, 800, 8242, 6952, 2288, 1481, 6770, 11948, + 8938, 10813, 11107, 1362, 4510, 9388, 8840, 10557, 6206, 7808, + 7131, 1394, 2604, 1509, 689, 5222, 8867, 9934, 7165, 6099, + 3229, 1263, 4414, 12212, 4963, 9236, 9040, 6062, 11163, 8169, + 4575, 6097, 3006, 1, 1384, 12039, 5445, 11355, 12197, 9182, + 10085, 9295, 8890, 10651, 1540, 9061, 10222, 2524, 2213, 6974, + 2066, 7348, 7444, 173, 7529, 3884, 3531, 4312, 640, 5352, + 5880, 3985, 781, 10165, 1106, 8114, 6043, 8202, 10617, 3060, + 11173, 11521, 6933, 9540, 11782, 2284, 6462, 3740, 2581, 126, + 508, 12165, 4956, 8045, 9379, 5250, 8148, 6539, 4891, 11252, + 5041, 9969, 8524, 9892, 4058, 10580, 10025, 9748, 8829, 4438, + 468, 4773, 1657, 1348, 10055, 7192, 9556, 5919, 5690, 6153, + 6270, 4938, 6206, 1003, 596, 11173, 9858, 4825, 7940, 794, + 7477, 10146, 7203, 4729, 5741, 4603, 1806, 7034, 8772, 10435, + 10777, 1359, 630, 11059, 8005, 225, 10355, 9226, 4449, 11236, + 680, 8615, 6828, 5502, 10082, 5491, 4346, 7831, 5429, 1253, + 6662, 9415, 584, 9362, 8452, 1937, 3271, 6852, 6573, 7706, + 1229, 8535, 3786, 6441, 7230, 533, 5778, 6436, 11728, 7896, + 785, 7591, 9061, 6149, 10403, 9079, 10837, 9776, 7850, 7870, + 5008, 5319, 541, 315, 9973, 5055, 7111, 8399, 614, 10495, + 9441, 10946, 449, 6965, 7980, 11475, 9321, 2256, 8998, 4321, + 11269, 4744, 5021, 11981, 7947, 7695, 4000, 1140, 2895, 3419, + 159, 5370, 10899, 3288, 12007, 8894, 7923, 7366, 11534, 5214, + 10461, 11199, 10965, 3739, 5507, 8882, 10725, 9649, 1144, 9153, + 5573, 878, 11115, 5677, 5970, 7221, 8614, 4703, 9394, 11660, + 8423, 6621, 11112, 10945, 527, 5019, 5396, 10049, 6770, 3406, + 2967, 3890, 2441, 4682, 6026, 617, 7316, 2627, 4456, 8925, + 2388, 11354, 4554, 10543, 2610, 10688, 1150, 2556, 4278, 431, + 9260, 3545, 12215, 631, 4407, 8145, 1403, 8523, 1982, 12073, + 950, 7671, 31, 1299, 9003, 11690, 5637, 6761, 5235, 5722, + 11858, 2210, 7870, 11608, 8884, 8550, 4776, 4998, 4270, 8850, + 12111, 240, 5674, 3845, 5057, 1608, 48, 2760, 8612, 278, + 5633, 9505, 3730, 1971, 8637, 8659, 894, 8594, 4221, 6783, + 5664, 9506, 2811, 11058, 4475, 2912, 2289, 2136, 7899, 6065, + 5259, 2230, 6793, 4280, 3140, 1721, 8333, 11216, 5383, 7139, + 10711, 1017, 2001, 10911, 1750, 162, 11775, 10575, 1646, 8322, + 175, 10156, 3635, 4893, 2207, 3234, 4380, 1900, 5493, 3082, + 10058, 9948, 10752, 7044, 10073, 11210, 8362, 9268, 8694, 1438, + 761, 10180, 6570, 6349, 9028, 10495, 4756, 9332, 8348, 4995, + 6933, 4351, 111, 1610, 7410, 960, 11972, 2853, 3551, 1423, + 9073, 7328, 7803, 7591, 3547, 964, 7327, 7357, 3352, 9415, + 7393, 5739, 11960, 4303, 2250, 4026, 9362, 2004, 853, 10393, + 4433, 3021, 7803, 2610, 3780, 8299, 1970, 11031, 10118, 308, + 3432, 11166, 9976, 569, 1344, 7369, 12097, 1005, 2415, 7435, + 2685, 5458, 10746, 392, 426, 1015, 9258, 1151, 4957, 4200, + 12077, 2777, 308, 717, 12162, 7328, 2534, 4327, 10539, 11256, + 7448, 10860, 7970, 11475, 6069, 4387, 11635, 7366, 2936, 5476, + 8097, 2867, 3190, 7533, 5373, 10352, 8159, 5735, 10998, 3075, + 10214, 10094, 11536, 2967, 4624, 11742, 9299, 5344, 9317, 8656, + 4692, 12008, 4161, 9114, 2469, 251, 11478, 9766, 843, 6217, + 8053, 11029, 9887, 5541, 10365, 6291, 10649, 8440, 172, 9521, + 116, 12205, 2770, 8357, 8172, 1320, 4, 2834, 3823, 2879, + 10188, 4974, 380, 4279, 10235, 5379, 5379, 11037, 9767, 12116, + 4150, 7059, 3138, 7590, 5572, 1361, 11572, 3025, 2734, 1012, + 3974, 10605, 2533, 6360, 4466, 680, 270, 6194, 8800, 10708, + 6327, 5218, 7130, 3073, 5815, 3950, 11849, 3707, 3192, 1406, + 676, 975, 2649, 4904, 161, 792, 10023, 4604, 7491, 1174, + 747, 12139, 8595, 4933, 3610, 11754, 2648, 909, 9984, 10440, + 3929, 8443, 7723, 4698, 1266, 7234, 3598, 2380, 5972, 11194, + 9470, 840, 7368, 1626, 5808, 1883, 3314, 6771, 3564, 3146, + 743, 10912, 8204, 7195, 5580, 1376, 6366, 6529, 4247, 5104, + 5745, 4231, 8300, 7618, 6933, 1241, 277, 551, 10811, 2163, + 10481, 11841, 10709, 9664, 10019, 10521, 3400, 4179, 4589, 1961, + 6740, 2785, 10196, 8943, 3621, 1180, 8317, 8350, 6758, 3720, + 4157, 8131, 4658, 8954, 7026, 9860, 3108, 1006, 9807, 632, + 9359, 5535, 8837, 6506, 4205, 1582, 4644, 3885, 5106, 3772, + 7830, 4472, 4361, 8529, 9463, 825, 9438, 11990, 4998, 5703, + 11138, 5835, 1858, 2308, 1526, 6541, 4857, 585, 8344, 8893, + 6536, 1324, 4263, 265, 6381, 8780, 4783, 12098, 10832, 10986, + 7327, 7156, 4435, 2430, 1162, 5473, 1602, 1219, 5435, 1868, + 8655, 1693, 531, 1889, 7801, 5060, 114, 8715, 10198, 5578, + 11574, 10608, 4704, 2476, 4014, 2888, 11601, 7989, 9154, 463, + 1206, 2159, 4238, 5734, 7393, 8704, 10369, 308, 7805, 9498, + 8644, 11031, 6876, 9446, 7302, 5492, 343, 12078, 11143, 674, + 1223, 5279, 470, 4091, 6788, 120, 8981, 9126, 3119, 1562, + 10144, 7379, 11688, 1969, 2332, 5613, 2181, 456, 6469, 2622, + 11073, 8755, 6536, 375, 3053, 11435, 5193, 4215, 4596, 5145, + 8969, 9431, 6894, 6009, 5261, 277, 2507, 1547, 4765, 2207, + 6527, 10342, 10440, 6321, 5628, 1722, 7693, 3291, 9392, 5906, + 5003, 9013, 10003, 3233, 6551, 10508, 3380, 1030, 3868, 11869, + 9858, 9338, 12240, 4671, 3832, 1353, 8888, 3898, 11022, 7442, + 11936, 6211, 6142, 7656, 7859, 11772, 116, 6966, 7915, 4903, + 6023, 4518, 1155, 2172, 5690, 4241, 9428, 3696, 3735, 3467, + 495, 6040, 12019, 10346, 8531, 3713, 2431, 4551, 5070, 5932, + 8769, 2413, 5942, 2753, 2600, 11963, 11106, 10875, 6799, 3426, + 458, 6126, 8785, 1730, 6994, 5757, 8224, 9043, 8939, 9013, + 4686, 7680, 1133, 6033, 6376, 8697, 793, 8639, 4831, 3535, + 561, 5483, 8341, 10355, 1411, 5853, 5834, 3689, 1943, 10890, + 1693, 1302, 5519, 9392, 9549, 3191, 597, 84, 9477, 3948, + 2093, 8565, 10618, 1305, 4570, 4275, 9557, 557, 768, 4047, + 4215, 2567, 9480, 4248, 10029, 11156, 4477, 12152, 4108, 3109, + 2634, 3972, 5921, 373}; + // const int twiddle[10] = {10302, 3400, 8340, 12149, 7311, + // 5860, 4134, 8246, 1479, 12288}; + static const int twiddle[] = { + // layer #0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + // layer #1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + + // layer #2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, + + // layer #3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, + + // layer #4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, + + // layer #5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, + + // layer #6 + 1, 1, 1, 1, 1, 1, 1, 1, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 726, 726, 726, 726, 726, 726, 726, 726, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 563, 563, 563, 563, 563, 563, 563, 563, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 955, 955, 955, 955, 955, 955, 955, 955, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, + + // layer #7 + 1, 1, 1, 1, 8340, 8340, 8340, 8340, 12149, 12149, 12149, 12149, 12144, 12144, 12144, 12144, 7311, 7311, 7311, 7311, 8011, 8011, 8011, 8011, 8736, 8736, 8736, 8736, 9048, 9048, 9048, 9048, 5860, 5860, 5860, 5860, 11336, 11336, 11336, 11336, 2963, 2963, 2963, 2963, 10530, 10530, 10530, 10530, 3006, 3006, 3006, 3006, 480, 480, 480, 480, 9275, 9275, 9275, 9275, 6534, 6534, 6534, 6534, 4134, 4134, 4134, 4134, 6915, 6915, 6915, 6915, 11112, 11112, 11112, 11112, 2731, 2731, 2731, 2731, 5023, 5023, 5023, 5023, 10908, 10908, 10908, 10908, 9542, 9542, 9542, 9542, 9005, 9005, 9005, 9005, 3621, 3621, 3621, 3621, 5067, 5067, 5067, 5067, 9198, 9198, 9198, 9198, 3382, 3382, 3382, 3382, 2625, 2625, 2625, 2625, 5791, 5791, 5791, 5791, 1170, 1170, 1170, 1170, 334, 334, 334, 334, 8246, 8246, 8246, 8246, 2396, 2396, 2396, 2396, 726, 726, 726, 726, 8652, 8652, 8652, 8652, 8961, 8961, 8961, 8961, 5331, 5331, 5331, 5331, 11227, 11227, 11227, 11227, 3289, 3289, 3289, 3289, 1212, 1212, 1212, 1212, 6522, 6522, 6522, 6522, 2366, 2366, 2366, 2366, 8595, 8595, 8595, 8595, 563, 563, 563, 563, 1022, 1022, 1022, 1022, 7203, 7203, 7203, 7203, 4388, 4388, 4388, 4388, 11567, 11567, 11567, 11567, 130, 130, 130, 130, 2768, 2768, 2768, 2768, 6378, 6378, 6378, 6378, 5728, 5728, 5728, 5728, 4177, 4177, 4177, 4177, 9154, 9154, 9154, 9154, 5092, 5092, 5092, 5092, 8785, 8785, 8785, 8785, 12171, 12171, 12171, 12171, 11289, 11289, 11289, 11289, 4231, 4231, 4231, 4231, 4821, 4821, 4821, 4821, 9821, 9821, 9821, 9821, 955, 955, 955, 955, 1428, 1428, 1428, 1428, 1479, 1479, 1479, 1479, 8993, 8993, 8993, 8993, 1853, 1853, 1853, 1853, 6747, 6747, 6747, 6747, 10938, 10938, 10938, 10938, 1673, 1673, 1673, 1673, 4805, 4805, 4805, 4805, 11560, 11560, 11560, 11560, 3195, 3195, 3195, 3195, 3748, 3748, 3748, 3748, 7393, 7393, 7393, 7393, 3707, 3707, 3707, 3707, 9545, 9545, 9545, 9545, 9447, 9447, 9447, 9447, 3201, 3201, 3201, 3201, 4632, 4632, 4632, 4632, 6553, 6553, 6553, 6553, 2837, 2837, 2837, 2837, 4255, 4255, 4255, 4255, 8357, 8357, 8357, 8357, 6461, 6461, 6461, 6461, 9764, 9764, 9764, 9764, 4846, 4846, 4846, 4846, 9408, 9408, 9408, 9408, 9744, 9744, 9744, 9744, 10092, 10092, 10092, 10092, 12208, 12208, 12208, 12208, 355, 355, 355, 355, 11340, 11340, 11340, 11340, 11745, 11745, 11745, 11745, 9970, 9970, 9970, 9970, 2426, 2426, 2426, 2426, 5146, 5146, 5146, 5146, 4452, 4452, 4452, 4452, 4611, 4611, 4611, 4611, 3459, 3459, 3459, 3459, 5777, 5777, 5777, 5777, 7300, 7300, 7300, 7300, 2294, 2294, 2294, 2294, 10276, 10276, 10276, 10276, 10643, 10643, 10643, 10643, 11462, 11462, 11462, 11462, 9238, 9238, 9238, 9238, 5179, 5179, 5179, 5179, 9314, 9314, 9314, 9314, 12280, 12280, 12280, 12280, 10963, 10963, 10963, 10963, 1260, 1260, 1260, 1260, 1305, 1305, 1305, 1305, 7935, 7935, 7935, 7935, 1635, 1635, 1635, 1635, 7399, 7399, 7399, 7399, 4591, 4591, 4591, 4591, 8705, 8705, 8705, 8705, 8577, 8577, 8577, 8577, 10200, 10200, 10200, 10200, 3542, 3542, 3542, 3542, 9813, 9813, 9813, 9813, 7969, 7969, 7969, 7969, 2548, 2548, 2548, 2548, 2639, 2639, 2639, 2639, 11950, 11950, 11950, 11950, 11499, 11499, 11499, 11499, 10593, 10593, 10593, 10593, + + // layer #8 + 1, 1, 3400, 3400, 8340, 8340, 5277, 5277, 12149, 12149, 3271, 3271, 12144, 12144, 10849, 10849, 7311, 7311, 9042, 9042, 8011, 8011, 4976, 4976, 8736, 8736, 12176, 12176, 9048, 9048, 3833, 3833, 5860, 5860, 3531, 3531, 11336, 11336, 4096, 4096, 2963, 2963, 9509, 9509, 10530, 10530, 4143, 4143, 3006, 3006, 8241, 8241, 480, 480, 9852, 9852, 9275, 9275, 1426, 1426, 6534, 6534, 9377, 9377, 4134, 4134, 9273, 9273, 6915, 6915, 2143, 2143, 11112, 11112, 4414, 4414, 2731, 2731, 7205, 7205, 5023, 5023, 8779, 8779, 10908, 10908, 11287, 11287, 9542, 9542, 12129, 12129, 9005, 9005, 5101, 5101, 3621, 3621, 10111, 10111, 5067, 5067, 10911, 10911, 9198, 9198, 9984, 9984, 3382, 3382, 8585, 8585, 2625, 2625, 3186, 3186, 5791, 5791, 2422, 2422, 1170, 1170, 8653, 8653, 334, 334, 5012, 5012, 8246, 8246, 5191, 5191, 2396, 2396, 11082, 11082, 726, 726, 10600, 10600, 8652, 8652, 9223, 9223, 8961, 8961, 2969, 2969, 5331, 5331, 11414, 11414, 11227, 11227, 2166, 2166, 3289, 3289, 11899, 11899, 1212, 1212, 3985, 3985, 6522, 6522, 5444, 5444, 2366, 2366, 7394, 7394, 8595, 8595, 12047, 12047, 563, 563, 9405, 9405, 1022, 1022, 9302, 9302, 7203, 7203, 10512, 10512, 4388, 4388, 354, 354, 11567, 11567, 3000, 3000, 130, 130, 11885, 11885, 2768, 2768, 10115, 10115, 6378, 6378, 7404, 7404, 5728, 5728, 9424, 9424, 4177, 4177, 8005, 8005, 9154, 9154, 7852, 7852, 5092, 5092, 9888, 9888, 8785, 8785, 6730, 6730, 12171, 12171, 4337, 4337, 11289, 11289, 4053, 4053, 4231, 4231, 7270, 7270, 4821, 4821, 10163, 10163, 9821, 9821, 2187, 2187, 955, 955, 2704, 2704, 1428, 1428, 1045, 1045, 1479, 1479, 2399, 2399, 8993, 8993, 1168, 1168, 1853, 1853, 8232, 8232, 6747, 6747, 8526, 8526, 10938, 10938, 2686, 2686, 1673, 1673, 10682, 10682, 4805, 4805, 4919, 4919, 11560, 11560, 3778, 3778, 3195, 3195, 11813, 11813, 3748, 3748, 11796, 11796, 7393, 7393, 5195, 5195, 3707, 3707, 7575, 7575, 9545, 9545, 10040, 10040, 9447, 9447, 8643, 8643, 3201, 3201, 7635, 7635, 4632, 4632, 6591, 6591, 6553, 6553, 243, 243, 2837, 2837, 11224, 11224, 4255, 4255, 2847, 2847, 8357, 8357, 1632, 1632, 6461, 6461, 6957, 6957, 9764, 9764, 5011, 5011, 4846, 4846, 9140, 9140, 9408, 9408, 11222, 11222, 9744, 9744, 10745, 10745, 10092, 10092, 1912, 1912, 12208, 12208, 7247, 7247, 355, 355, 2678, 2678, 11340, 11340, 5407, 5407, 11745, 11745, 6039, 6039, 9970, 9970, 4938, 4938, 2426, 2426, 2481, 2481, 5146, 5146, 9153, 9153, 4452, 4452, 9041, 9041, 4611, 4611, 8925, 8925, 3459, 3459, 27, 27, 5777, 5777, 3978, 3978, 7300, 7300, 8509, 8509, 2294, 2294, 8374, 8374, 10276, 10276, 773, 773, 10643, 10643, 7384, 7384, 11462, 11462, 2381, 2381, 9238, 9238, 10805, 10805, 5179, 5179, 10752, 10752, 9314, 9314, 11136, 11136, 12280, 12280, 6267, 6267, 10963, 10963, 1663, 1663, 1260, 1260, 7428, 7428, 1305, 1305, 671, 671, 7935, 7935, 4645, 4645, 1635, 1635, 4372, 4372, 7399, 7399, 1017, 1017, 4591, 4591, 2370, 2370, 8705, 8705, 5088, 5088, 8577, 8577, 3, 3, 10200, 10200, 442, 442, 3542, 3542, 11869, 11869, 9813, 9813, 11854, 11854, 7969, 7969, 9644, 9644, 2548, 2548, 11744, 11744, 2639, 2639, 1630, 1630, 11950, 11950, 2566, 2566, 11499, 11499, 5291, 5291, 10593, 10593, 9430, 9430, + + // layer #9 + 1, 10302, 3400, 3150, 8340, 6281, 5277, 9407, 12149, 7822, 3271, 1404, 12144, 5468, 10849, 10232, 7311, 10930, 9042, 64, 8011, 8687, 4976, 5333, 8736, 5925, 12176, 3329, 9048, 431, 3833, 3009, 5860, 6152, 3531, 922, 11336, 1105, 4096, 8855, 2963, 11239, 9509, 6099, 10530, 5057, 4143, 1489, 3006, 11821, 8241, 6370, 480, 4782, 9852, 453, 9275, 4075, 1426, 5297, 6534, 6415, 9377, 10314, 4134, 7083, 9273, 8049, 6915, 11286, 2143, 6142, 11112, 3789, 4414, 3728, 2731, 5241, 7205, 350, 5023, 10256, 8779, 6507, 10908, 3600, 11287, 156, 9542, 1973, 12129, 10695, 9005, 12138, 5101, 2738, 3621, 6427, 10111, 1958, 5067, 8851, 10911, 9928, 9198, 9606, 9984, 8527, 3382, 2049, 8585, 11026, 2625, 6950, 3186, 10542, 5791, 8076, 2422, 4774, 1170, 10120, 8653, 11089, 334, 12237, 5012, 7535, 8246, 8724, 5191, 8243, 2396, 7280, 11082, 1954, 726, 7540, 10600, 1146, 8652, 787, 9223, 9087, 8961, 1254, 2969, 11606, 5331, 421, 11414, 5876, 11227, 8775, 2166, 9597, 3289, 2505, 11899, 723, 1212, 400, 3985, 8210, 6522, 5681, 5444, 9381, 2366, 5445, 7394, 5766, 8595, 3445, 12047, 1583, 563, 11907, 9405, 3834, 1022, 9260, 9302, 11871, 7203, 4324, 10512, 3956, 4388, 6234, 354, 9364, 11567, 9090, 3000, 11454, 130, 12048, 11885, 3963, 2768, 5456, 10115, 6299, 6378, 9162, 7404, 10474, 5728, 10367, 9424, 2948, 4177, 7665, 8005, 8320, 9154, 11011, 7852, 5106, 5092, 8332, 9888, 2655, 8785, 6874, 6730, 10211, 12171, 975, 4337, 9259, 11289, 8471, 4053, 8273, 4231, 10968, 7270, 6374, 4821, 6093, 10163, 9235, 9821, 605, 2187, 4737, 955, 7210, 2704, 9734, 1428, 1323, 1045, 426, 1479, 10587, 2399, 1319, 8993, 11404, 1168, 1805, 1853, 4789, 8232, 11964, 6747, 1010, 8526, 5369, 10938, 5435, 2686, 8633, 1673, 6068, 10682, 10258, 4805, 1018, 4919, 7991, 11560, 10710, 3778, 1693, 3195, 4948, 11813, 11848, 3748, 12147, 11796, 8760, 7393, 7753, 5195, 295, 3707, 7591, 7575, 2500, 9545, 8301, 10040, 7856, 9447, 6403, 8643, 6381, 3201, 5315, 7635, 6170, 4632, 677, 6591, 3757, 6553, 5529, 243, 8719, 2837, 3532, 11224, 2447, 4255, 147, 2847, 8240, 8357, 9369, 1632, 1512, 6461, 3998, 6957, 1566, 9764, 3263, 5011, 9522, 4846, 5574, 9140, 1962, 9408, 10162, 11222, 6421, 9744, 6136, 10745, 7967, 10092, 2844, 1912, 10446, 12208, 1190, 7247, 2919, 355, 7377, 2678, 12240, 11340, 5446, 5407, 9166, 11745, 11785, 6039, 6860, 9970, 11767, 4938, 7105, 2426, 9115, 2481, 10431, 5146, 11635, 9153, 709, 4452, 1956, 9041, 2051, 4611, 5537, 8925, 11341, 3459, 8807, 27, 7796, 5777, 11316, 3978, 9830, 7300, 8209, 8509, 2281, 2294, 1041, 8374, 168, 10276, 5906, 773, 174, 10643, 1728, 7384, 1058, 11462, 8812, 2381, 218, 9238, 3860, 10805, 11637, 5179, 7509, 10752, 6347, 9314, 316, 11136, 5257, 12280, 5594, 6267, 8517, 10963, 4916, 1663, 1360, 1260, 3336, 7428, 11942, 1305, 12233, 671, 6224, 7935, 12231, 4645, 11713, 1635, 7840, 4372, 1159, 7399, 8120, 1017, 6906, 4591, 8410, 2370, 9786, 8705, 6077, 5088, 3991, 8577, 2344, 3, 6328, 10200, 9450, 442, 6554, 3542, 3643, 11869, 11177, 9813, 4212, 11854, 4115, 7969, 6118, 9644, 8212, 2548, 192, 11744, 1483, 2639, 3710, 1630, 5486, 11950, 9987, 2566, 1293, 11499, 9027, 5291, 6167, 10593, 2766, 9430, 3315, + }; + const int p = 12289; + int dst[1024]; + ntt(arr, l, twiddle, p, dst); + + // for (int i = 0; i < n; i++) { + // printf("%d", dst[i]); + // if ((i + 1) % 8 == 0) { + // printf("\n"); + // } else { + // printf(" "); + // } + // } +} diff --git a/tests/eval/_ntt/ntt_128_main.c b/tests/eval/_ntt/ntt_128_main.c new file mode 100644 index 000000000..ad8b75ef2 --- /dev/null +++ b/tests/eval/_ntt/ntt_128_main.c @@ -0,0 +1,59 @@ +// requires VLEN >= 512 + +#include + +void ntt(const int *array, int l, const int *twiddle, int p, int *dst); + +void test() { + const int l = 7; + const int n = 128; + static const int arr[128] = { + 9997, 6362, 7134, 11711, 5849, 9491, 5972, 4164, 5894, 11069, + 7697, 8319, 2077, 12086, 10239, 5394, 4898, 1370, 1205, 2997, + 5274, 4625, 11983, 1789, 3645, 7666, 12128, 10883, 7376, 8883, + 2321, 1889, 2026, 8059, 2741, 865, 1785, 9955, 2395, 9330, + 11465, 7383, 9649, 11285, 3647, 578, 1158, 9936, 12019, 11114, + 7894, 4832, 10148, 10363, 11388, 9122, 10758, 2642, 4171, 10586, + 1194, 5280, 3055, 9220, 10577, 9046, 1284, 7915, 10213, 6902, + 3777, 9896, 429, 7730, 7429, 8666, 10887, 11255, 2437, 7782, + 1327, 7010, 4009, 1038, 9466, 5352, 1473, 10067, 11753, 2019, + 8472, 7665, 2679, 5070, 2248, 3044, 10301, 10671, 2092, 1069, + 9032, 9131, 11715, 6662, 3423, 10027, 5436, 4259, 999, 3316, + 11164, 5597, 6578, 800, 8242, 6952, 2288, 1481, 6770, 11948, + 8938, 10813, 11107, 1362, 4510, 9388, 8840, 10557}; + // const int twiddle[7] = {12149, 7311, 5860, 4134, 8246, 1479, 12288}; + static const int twiddle[] = { + // layer #0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + // layer #1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + + // layer #2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, + + // layer #3 + 1, 1, 1, 1, 1, 1, 1, 1, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, + + // layer #4 + 1, 1, 1, 1, 5860, 5860, 5860, 5860, 4134, 4134, 4134, 4134, 3621, 3621, 3621, 3621, 8246, 8246, 8246, 8246, 1212, 1212, 1212, 1212, 11567, 11567, 11567, 11567, 8785, 8785, 8785, 8785, 1479, 1479, 1479, 1479, 3195, 3195, 3195, 3195, 6553, 6553, 6553, 6553, 9744, 9744, 9744, 9744, 5146, 5146, 5146, 5146, 10643, 10643, 10643, 10643, 1305, 1305, 1305, 1305, 3542, 3542, 3542, 3542, + + // layer #5 + 1, 1, 7311, 7311, 5860, 5860, 3006, 3006, 4134, 4134, 5023, 5023, 3621, 3621, 2625, 2625, 8246, 8246, 8961, 8961, 1212, 1212, 563, 563, 11567, 11567, 5728, 5728, 8785, 8785, 4821, 4821, 1479, 1479, 10938, 10938, 3195, 3195, 9545, 9545, 6553, 6553, 6461, 6461, 9744, 9744, 11340, 11340, 5146, 5146, 5777, 5777, 10643, 10643, 9314, 9314, 1305, 1305, 4591, 4591, 3542, 3542, 2639, 2639, + + // layer #6 + 1, 12149, 7311, 8736, 5860, 2963, 3006, 9275, 4134, 11112, 5023, 9542, 3621, 9198, 2625, 1170, 8246, 726, 8961, 11227, 1212, 2366, 563, 7203, 11567, 2768, 5728, 9154, 8785, 11289, 4821, 955, 1479, 1853, 10938, 4805, 3195, 7393, 9545, 3201, 6553, 4255, 6461, 4846, 9744, 12208, 11340, 9970, 5146, 4611, 5777, 2294, 10643, 9238, 9314, 10963, 1305, 1635, 4591, 8577, 3542, 7969, 2639, 11499, + }; + const int p = 12289; + int dst[128]; + ntt(arr, l, twiddle, p, dst); + + // for (int i = 0; i < n; i++) { + // printf("%d", dst[i]); + // if ((i + 1) % 8 == 0) { + // printf("\n"); + // } else { + // printf(" "); + // } + // } +} diff --git a/tests/eval/_ntt/ntt_256_main.c b/tests/eval/_ntt/ntt_256_main.c new file mode 100644 index 000000000..045e5433e --- /dev/null +++ b/tests/eval/_ntt/ntt_256_main.c @@ -0,0 +1,75 @@ +// requires VLEN >= 1024 + +#include + +void ntt(const int *array, int l, const int *twiddle, int p, int *dst); + +void test() { + const int l = 8; + const int n = 256; + static const int arr[256] = { + 9997, 6362, 7134, 11711, 5849, 9491, 5972, 4164, 5894, 11069, + 7697, 8319, 2077, 12086, 10239, 5394, 4898, 1370, 1205, 2997, + 5274, 4625, 11983, 1789, 3645, 7666, 12128, 10883, 7376, 8883, + 2321, 1889, 2026, 8059, 2741, 865, 1785, 9955, 2395, 9330, + 11465, 7383, 9649, 11285, 3647, 578, 1158, 9936, 12019, 11114, + 7894, 4832, 10148, 10363, 11388, 9122, 10758, 2642, 4171, 10586, + 1194, 5280, 3055, 9220, 10577, 9046, 1284, 7915, 10213, 6902, + 3777, 9896, 429, 7730, 7429, 8666, 10887, 11255, 2437, 7782, + 1327, 7010, 4009, 1038, 9466, 5352, 1473, 10067, 11753, 2019, + 8472, 7665, 2679, 5070, 2248, 3044, 10301, 10671, 2092, 1069, + 9032, 9131, 11715, 6662, 3423, 10027, 5436, 4259, 999, 3316, + 11164, 5597, 6578, 800, 8242, 6952, 2288, 1481, 6770, 11948, + 8938, 10813, 11107, 1362, 4510, 9388, 8840, 10557, 6206, 7808, + 7131, 1394, 2604, 1509, 689, 5222, 8867, 9934, 7165, 6099, + 3229, 1263, 4414, 12212, 4963, 9236, 9040, 6062, 11163, 8169, + 4575, 6097, 3006, 1, 1384, 12039, 5445, 11355, 12197, 9182, + 10085, 9295, 8890, 10651, 1540, 9061, 10222, 2524, 2213, 6974, + 2066, 7348, 7444, 173, 7529, 3884, 3531, 4312, 640, 5352, + 5880, 3985, 781, 10165, 1106, 8114, 6043, 8202, 10617, 3060, + 11173, 11521, 6933, 9540, 11782, 2284, 6462, 3740, 2581, 126, + 508, 12165, 4956, 8045, 9379, 5250, 8148, 6539, 4891, 11252, + 5041, 9969, 8524, 9892, 4058, 10580, 10025, 9748, 8829, 4438, + 468, 4773, 1657, 1348, 10055, 7192, 9556, 5919, 5690, 6153, + 6270, 4938, 6206, 1003, 596, 11173, 9858, 4825, 7940, 794, + 7477, 10146, 7203, 4729, 5741, 4603, 1806, 7034, 8772, 10435, + 10777, 1359, 630, 11059, 8005, 225}; + // const int twiddle[8] = {8340, 12149, 7311, 5860, 4134, 8246, 1479, 12288}; + static const int twiddle[] = { + // layer #0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + // layer #1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + + // layer #2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, + + // layer #3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, + + // layer #4 + 1, 1, 1, 1, 1, 1, 1, 1, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, + + // layer #5 + 1, 1, 1, 1, 7311, 7311, 7311, 7311, 5860, 5860, 5860, 5860, 3006, 3006, 3006, 3006, 4134, 4134, 4134, 4134, 5023, 5023, 5023, 5023, 3621, 3621, 3621, 3621, 2625, 2625, 2625, 2625, 8246, 8246, 8246, 8246, 8961, 8961, 8961, 8961, 1212, 1212, 1212, 1212, 563, 563, 563, 563, 11567, 11567, 11567, 11567, 5728, 5728, 5728, 5728, 8785, 8785, 8785, 8785, 4821, 4821, 4821, 4821, 1479, 1479, 1479, 1479, 10938, 10938, 10938, 10938, 3195, 3195, 3195, 3195, 9545, 9545, 9545, 9545, 6553, 6553, 6553, 6553, 6461, 6461, 6461, 6461, 9744, 9744, 9744, 9744, 11340, 11340, 11340, 11340, 5146, 5146, 5146, 5146, 5777, 5777, 5777, 5777, 10643, 10643, 10643, 10643, 9314, 9314, 9314, 9314, 1305, 1305, 1305, 1305, 4591, 4591, 4591, 4591, 3542, 3542, 3542, 3542, 2639, 2639, 2639, 2639, + + // layer #6 + 1, 1, 12149, 12149, 7311, 7311, 8736, 8736, 5860, 5860, 2963, 2963, 3006, 3006, 9275, 9275, 4134, 4134, 11112, 11112, 5023, 5023, 9542, 9542, 3621, 3621, 9198, 9198, 2625, 2625, 1170, 1170, 8246, 8246, 726, 726, 8961, 8961, 11227, 11227, 1212, 1212, 2366, 2366, 563, 563, 7203, 7203, 11567, 11567, 2768, 2768, 5728, 5728, 9154, 9154, 8785, 8785, 11289, 11289, 4821, 4821, 955, 955, 1479, 1479, 1853, 1853, 10938, 10938, 4805, 4805, 3195, 3195, 7393, 7393, 9545, 9545, 3201, 3201, 6553, 6553, 4255, 4255, 6461, 6461, 4846, 4846, 9744, 9744, 12208, 12208, 11340, 11340, 9970, 9970, 5146, 5146, 4611, 4611, 5777, 5777, 2294, 2294, 10643, 10643, 9238, 9238, 9314, 9314, 10963, 10963, 1305, 1305, 1635, 1635, 4591, 4591, 8577, 8577, 3542, 3542, 7969, 7969, 2639, 2639, 11499, 11499, + + // layer #7 + 1, 8340, 12149, 12144, 7311, 8011, 8736, 9048, 5860, 11336, 2963, 10530, 3006, 480, 9275, 6534, 4134, 6915, 11112, 2731, 5023, 10908, 9542, 9005, 3621, 5067, 9198, 3382, 2625, 5791, 1170, 334, 8246, 2396, 726, 8652, 8961, 5331, 11227, 3289, 1212, 6522, 2366, 8595, 563, 1022, 7203, 4388, 11567, 130, 2768, 6378, 5728, 4177, 9154, 5092, 8785, 12171, 11289, 4231, 4821, 9821, 955, 1428, 1479, 8993, 1853, 6747, 10938, 1673, 4805, 11560, 3195, 3748, 7393, 3707, 9545, 9447, 3201, 4632, 6553, 2837, 4255, 8357, 6461, 9764, 4846, 9408, 9744, 10092, 12208, 355, 11340, 11745, 9970, 2426, 5146, 4452, 4611, 3459, 5777, 7300, 2294, 10276, 10643, 11462, 9238, 5179, 9314, 12280, 10963, 1260, 1305, 7935, 1635, 7399, 4591, 8705, 8577, 10200, 3542, 9813, 7969, 2548, 2639, 11950, 11499, 10593, + }; + const int p = 12289; + int dst[256]; + ntt(arr, l, twiddle, p, dst); + + // for (int i = 0; i < n; i++) { + // printf("%d", dst[i]); + // if ((i + 1) % 8 == 0) { + // printf("\n"); + // } else { + // printf(" "); + // } + // } +} diff --git a/tests/eval/_ntt/ntt_4096_main.c b/tests/eval/_ntt/ntt_4096_main.c new file mode 100644 index 000000000..6a310993b --- /dev/null +++ b/tests/eval/_ntt/ntt_4096_main.c @@ -0,0 +1,470 @@ +#include + +void ntt(const int *array, int l, const int *twiddle, int p, int *dst); + +void test() { + const int l = 12; + const int n = 4096; + static const int arr[4096] = { + 8610, 9001, 11901, 244, 9716, 3762, 508, 5194, 2833, 6286, + 1870, 7721, 2636, 3510, 7438, 3838, 913, 8628, 6715, 10130, + 6228, 1560, 11720, 11027, 9266, 7501, 5365, 3892, 7142, 8834, + 9214, 7200, 11575, 6039, 9807, 3028, 5726, 5237, 4822, 11784, + 11447, 10869, 5232, 5624, 2474, 7818, 7380, 10717, 4312, 5268, + 3595, 11683, 12096, 7246, 7595, 10986, 5923, 1363, 7691, 3804, + 1334, 12034, 6239, 62, 11476, 10142, 8091, 6494, 2249, 8658, + 6598, 9883, 11203, 10171, 6106, 4553, 7886, 7012, 1285, 4153, + 11806, 9707, 6347, 10150, 2615, 10291, 11699, 6175, 11816, 9082, + 12287, 6936, 2914, 4864, 6445, 1852, 11927, 8417, 4649, 9730, + 8680, 7514, 3352, 7131, 4100, 3463, 8519, 9746, 11323, 631, + 10169, 11204, 2550, 10464, 7270, 3700, 5760, 259, 11856, 9091, + 9065, 572, 3505, 1468, 10888, 1192, 10674, 10855, 5072, 1213, + 7125, 9420, 8687, 5173, 1055, 1147, 7252, 8742, 11200, 5165, + 6021, 1960, 11266, 10951, 10808, 11834, 2767, 3098, 7786, 9023, + 10505, 7608, 11780, 2082, 4697, 10229, 5455, 7389, 117, 466, + 9606, 5720, 388, 12126, 213, 10763, 5558, 2912, 1863, 10456, + 9939, 21, 3994, 6613, 6797, 12249, 3569, 12075, 6720, 6534, + 12056, 480, 2596, 11875, 11556, 4037, 10223, 1550, 10894, 1967, + 552, 6568, 9288, 7348, 10275, 10866, 5936, 2964, 501, 1395, + 8540, 10628, 10596, 1073, 1461, 380, 2597, 11409, 8802, 11714, + 11370, 3692, 2261, 11007, 6079, 7974, 8675, 5646, 11332, 4065, + 3713, 6360, 4881, 9601, 904, 6188, 6433, 6421, 8399, 2803, + 561, 8470, 2995, 562, 3061, 800, 2819, 5547, 11344, 861, + 4620, 2479, 7547, 1041, 8966, 7150, 11700, 7953, 9611, 2673, + 3403, 10809, 4669, 1139, 6117, 5848, 9572, 10380, 9770, 11203, + 11421, 3347, 7702, 1193, 5619, 7338, 1164, 2294, 30, 2762, + 8655, 4967, 8641, 9882, 4503, 9023, 10352, 9793, 9491, 4345, + 2542, 10390, 7940, 8832, 6810, 12170, 621, 5793, 8663, 293, + 4379, 11450, 3199, 6900, 10926, 746, 10761, 3770, 750, 8731, + 9868, 11882, 10116, 3946, 10706, 12136, 10111, 3230, 7349, 5413, + 1164, 7898, 1554, 6436, 4681, 7199, 5480, 8846, 2832, 3564, + 4017, 1029, 12190, 4404, 9032, 5762, 78, 9827, 4258, 6350, + 10862, 5698, 9792, 2802, 9438, 10027, 667, 10066, 11354, 186, + 5503, 4064, 9509, 6862, 3062, 11742, 699, 1544, 4997, 2529, + 9609, 8079, 2986, 7866, 7497, 3999, 2152, 4991, 8751, 9503, + 745, 7145, 11541, 8811, 9645, 5994, 11993, 9706, 6520, 7032, + 9156, 7898, 3118, 1768, 8951, 4733, 7362, 7420, 7754, 6636, + 2128, 12089, 5402, 8247, 9230, 9441, 9123, 10630, 9776, 1645, + 1070, 11068, 4796, 11389, 10246, 8463, 5012, 308, 8493, 12205, + 6888, 625, 3843, 6067, 1963, 10066, 646, 1587, 4137, 10228, + 8387, 6184, 6443, 6786, 285, 7566, 6586, 11211, 7093, 5737, + 6902, 7526, 3674, 3899, 5804, 623, 7544, 1192, 11439, 4172, + 1566, 2831, 11613, 5465, 1743, 4576, 8533, 11830, 933, 9115, + 4406, 4658, 8962, 10185, 11940, 2622, 179, 7496, 2393, 6149, + 2837, 4300, 8267, 8925, 134, 355, 3693, 3657, 3132, 7496, + 5497, 4084, 2125, 1670, 1777, 5380, 2312, 11737, 7109, 11977, + 7266, 4222, 6205, 11090, 10742, 6380, 8572, 9373, 6504, 7430, + 4586, 6225, 3949, 4719, 265, 7231, 12049, 2908, 9770, 4957, + 5902, 2917, 11491, 11942, 8730, 9293, 1462, 2570, 5985, 999, + 9654, 7193, 1970, 6988, 6028, 5269, 4537, 6442, 7247, 6193, + 7502, 10331, 2729, 1341, 1847, 7429, 3870, 3071, 2029, 7358, + 1542, 304, 6279, 4017, 4081, 2783, 10406, 1744, 8159, 1512, + 2964, 3144, 4816, 2091, 536, 3153, 8813, 10605, 5150, 3686, + 8099, 9084, 11738, 11257, 7749, 5852, 3158, 5948, 4770, 800, + 8487, 7464, 6359, 3284, 3495, 5361, 958, 9090, 8614, 6163, + 6090, 9147, 11412, 7650, 2405, 34, 5533, 7610, 10309, 5811, + 7956, 4736, 8223, 8996, 11694, 487, 8578, 717, 9562, 8961, + 6910, 12009, 5877, 7606, 3700, 3428, 2562, 1206, 10355, 3774, + 512, 4979, 7943, 997, 1544, 100, 9688, 6687, 1046, 10847, + 11854, 7657, 5145, 5278, 11285, 10314, 8390, 7934, 10577, 3957, + 11916, 11255, 6784, 1341, 11766, 8008, 6970, 361, 5019, 9739, + 6262, 11341, 9231, 7542, 3779, 5280, 9273, 5501, 1120, 3456, + 821, 8668, 8778, 9557, 6335, 2086, 2041, 5906, 1744, 1035, + 442, 9247, 10006, 9915, 8974, 3208, 6134, 10598, 8150, 10353, + 11846, 3701, 5655, 8570, 1456, 1574, 2150, 7419, 5477, 7484, + 6493, 10425, 6318, 9514, 7695, 6313, 1149, 9373, 1506, 10521, + 6927, 112, 11280, 9014, 11037, 1414, 6512, 4852, 4974, 10961, + 7262, 8120, 2884, 9896, 3950, 11798, 7188, 9198, 3761, 6366, + 3286, 2296, 1371, 1975, 10666, 9927, 7747, 4333, 1599, 8644, + 7561, 6006, 741, 9185, 7578, 10633, 1662, 12029, 5761, 791, + 12016, 5906, 271, 7511, 10554, 338, 10624, 7266, 1119, 2622, + 12147, 1774, 12225, 7424, 10185, 8097, 6748, 5573, 4632, 8820, + 3683, 2348, 6963, 1356, 6480, 6615, 5104, 5935, 9923, 10082, + 6897, 4587, 516, 1314, 7258, 1452, 1850, 4949, 703, 11338, + 700, 132, 7838, 5973, 5991, 6704, 8467, 1508, 6621, 188, + 11016, 301, 10292, 7328, 824, 11872, 10748, 7411, 10191, 7507, + 5100, 7721, 7079, 3882, 16, 11596, 2434, 8591, 8247, 9584, + 11673, 8927, 8924, 4735, 8997, 2768, 10095, 639, 2676, 1746, + 3497, 11492, 6171, 396, 6464, 292, 4239, 11342, 781, 12107, + 6233, 6584, 2223, 2474, 7851, 422, 7172, 9664, 2317, 5456, + 9911, 9600, 7758, 3925, 5040, 11888, 2283, 2972, 3901, 3647, + 3954, 3510, 5681, 6908, 8645, 8643, 9144, 44, 414, 8566, + 2654, 5117, 4376, 2874, 2684, 301, 6919, 6952, 7349, 8380, + 2667, 9354, 2343, 2077, 137, 6968, 12201, 9816, 10496, 3011, + 3153, 8091, 8546, 5805, 11247, 7071, 7060, 5578, 10911, 198, + 11197, 8603, 2429, 3163, 6785, 8034, 683, 2853, 4748, 2248, + 4828, 7799, 6151, 11469, 7403, 11081, 10279, 2210, 944, 8314, + 9593, 11693, 163, 7674, 3056, 6156, 11609, 2975, 624, 3448, + 11449, 5126, 8679, 824, 1855, 9189, 2688, 1082, 4209, 4323, + 8015, 4303, 8105, 2477, 4949, 12214, 1909, 7882, 11069, 5335, + 1285, 5502, 10912, 2678, 9584, 1101, 4435, 11201, 4166, 11367, + 11033, 7221, 6268, 6540, 3203, 2042, 10685, 6194, 4603, 10561, + 6367, 6111, 1208, 5599, 2937, 10074, 8827, 4851, 2248, 10343, + 569, 6572, 6864, 4573, 11978, 3178, 6171, 9790, 11278, 4606, + 10793, 11426, 7455, 23, 8712, 5789, 1707, 19, 11141, 4326, + 2824, 11472, 2095, 11708, 1137, 5445, 7634, 1288, 1866, 1962, + 7925, 2472, 11915, 72, 7052, 4827, 2638, 599, 8000, 10450, + 9184, 284, 10797, 3065, 8925, 7869, 9036, 9155, 11388, 4583, + 4726, 7061, 10662, 10077, 11748, 88, 9485, 952, 6138, 11391, + 9615, 9718, 11633, 5737, 5056, 3496, 11933, 632, 6289, 6136, + 859, 6146, 2614, 12020, 11277, 11589, 2914, 1655, 4829, 1689, + 2373, 8526, 6363, 12054, 1644, 5047, 8554, 11333, 7731, 451, + 7838, 5886, 10097, 6406, 3508, 7071, 7257, 10270, 2333, 2489, + 11768, 3884, 11627, 272, 7420, 3775, 4029, 9723, 10105, 4794, + 2231, 4773, 9400, 10170, 6774, 2987, 2412, 12168, 5360, 5609, + 2128, 110, 5466, 1851, 6675, 7947, 6356, 5850, 2509, 3212, + 5138, 11972, 2858, 5827, 318, 11217, 8658, 4857, 9700, 946, + 5011, 5091, 11972, 9271, 5444, 6614, 2755, 2125, 723, 10444, + 9332, 7776, 5682, 2770, 609, 1746, 5375, 12200, 4976, 1694, + 3448, 11680, 7249, 1939, 10584, 2400, 1927, 11773, 8468, 2089, + 6573, 11692, 8277, 5502, 3403, 2741, 9707, 2469, 9276, 7151, + 9815, 3241, 6142, 6, 5092, 2741, 7533, 2890, 11026, 9620, + 899, 7730, 11148, 11513, 7602, 9265, 5130, 10418, 6290, 9150, + 223, 9636, 3245, 12166, 10099, 4680, 511, 4410, 7860, 7553, + 3152, 6693, 2954, 3949, 3975, 5497, 4380, 8108, 6834, 1033, + 9164, 2117, 11955, 5509, 10352, 10189, 10133, 4292, 11270, 3902, + 1741, 11212, 10961, 3084, 2301, 11023, 3586, 10621, 3793, 6595, + 0, 6726, 5568, 9205, 4849, 9287, 2701, 7079, 6950, 5391, + 12, 8861, 6735, 4674, 212, 3984, 7039, 5974, 1455, 3736, + 123, 6542, 981, 4408, 1261, 2641, 3582, 11726, 5748, 6053, + 2231, 2880, 1309, 7432, 11087, 4649, 9012, 9417, 8998, 3550, + 7420, 1074, 565, 487, 1716, 343, 5215, 1837, 7742, 7927, + 7998, 9089, 12060, 5753, 9419, 1750, 5714, 5174, 10061, 10630, + 8467, 10296, 8619, 9594, 8779, 4136, 496, 12057, 12197, 1808, + 7083, 11139, 26, 11009, 3310, 9663, 6598, 10960, 5447, 2340, + 2707, 3194, 9434, 11966, 7163, 5610, 1974, 6729, 675, 11828, + 9649, 1416, 1996, 10361, 6283, 3113, 9336, 8157, 3823, 9139, + 6059, 8418, 5598, 3795, 3265, 7710, 3845, 6716, 6046, 11649, + 6554, 3726, 6114, 4140, 10747, 5633, 7207, 11227, 9999, 3188, + 4813, 5914, 4710, 10024, 5400, 9759, 4907, 11309, 4694, 10469, + 5021, 11058, 9334, 508, 2858, 6413, 2552, 6875, 8154, 8779, + 2510, 7509, 5568, 7680, 7165, 5105, 10964, 5342, 9987, 6888, + 6125, 10332, 11641, 3271, 5067, 4376, 3586, 4637, 8345, 6857, + 1947, 5973, 6496, 5242, 10455, 3127, 6658, 10059, 6535, 4201, + 12032, 5875, 3791, 8984, 6514, 8298, 5155, 11901, 5385, 2746, + 3722, 6321, 4198, 5740, 11886, 7787, 5756, 4282, 4769, 11494, + 310, 3715, 6569, 8186, 7862, 6564, 6100, 10033, 11148, 8588, + 8571, 7851, 6728, 712, 10158, 1261, 2378, 862, 10212, 6449, + 7330, 11351, 7786, 8465, 3657, 10184, 6228, 8165, 7611, 8832, + 9198, 12255, 3626, 8435, 6962, 7608, 9718, 6616, 8739, 816, + 4406, 10099, 342, 1239, 1662, 8983, 10275, 2523, 4988, 5043, + 11139, 4794, 5308, 5314, 2447, 9505, 5354, 1151, 10326, 2838, + 5842, 10646, 7879, 8753, 8130, 2104, 6598, 9297, 1468, 10479, + 3894, 471, 9931, 1292, 8546, 3559, 1262, 11249, 4913, 7642, + 9564, 8729, 12039, 10091, 7833, 2152, 6911, 10191, 6441, 1882, + 4806, 6795, 6707, 11027, 12251, 10200, 1039, 3219, 9308, 2662, + 9755, 221, 1501, 7460, 7714, 2732, 5466, 11685, 11967, 6524, + 978, 7540, 12009, 6750, 12042, 3454, 7212, 9498, 11325, 129, + 7823, 8582, 9652, 6190, 8875, 12235, 7467, 7104, 11031, 11750, + 12153, 4821, 10665, 1469, 8569, 10470, 9107, 10974, 6349, 931, + 9020, 8123, 1048, 11885, 8088, 9078, 11810, 1970, 1073, 4891, + 4561, 6623, 7352, 7774, 7304, 2407, 4973, 7908, 423, 4173, + 9046, 1084, 6989, 55, 6704, 4382, 4423, 3293, 2414, 5538, + 3412, 10447, 10931, 3734, 3383, 8587, 4362, 166, 6377, 3859, + 3462, 11362, 5142, 1858, 11748, 11371, 5901, 801, 953, 1624, + 3485, 5986, 10301, 7374, 5307, 10334, 5727, 572, 1022, 4439, + 9106, 3485, 1002, 914, 6152, 11303, 10646, 499, 1752, 1988, + 7529, 7395, 11321, 10749, 3497, 9851, 12117, 8544, 8684, 5140, + 1154, 3320, 7113, 8217, 8258, 5247, 6378, 5425, 374, 3579, + 8526, 833, 10469, 3821, 10115, 4199, 8417, 8040, 9396, 12010, + 5457, 10029, 3727, 11433, 9829, 10334, 4699, 8142, 8716, 7032, + 10200, 7746, 7770, 2186, 11186, 9577, 4780, 2345, 1459, 11629, + 9111, 2909, 11811, 2590, 11581, 10444, 12159, 9309, 1208, 3487, + 8706, 6708, 3928, 10119, 9616, 1238, 7874, 9946, 769, 1131, + 11470, 9580, 4197, 3202, 5622, 10714, 8111, 2103, 11256, 4495, + 5226, 5708, 5911, 1443, 11278, 1995, 1209, 10933, 4131, 656, + 12112, 6875, 8578, 8250, 6147, 10413, 11553, 6019, 2011, 6058, + 1009, 8227, 6769, 2751, 8799, 276, 929, 8706, 9655, 12114, + 3710, 4561, 10083, 8752, 5216, 1776, 5567, 9204, 3530, 1785, + 9734, 2035, 6877, 7738, 6408, 11039, 11399, 7471, 4161, 2462, + 7677, 1266, 5, 7187, 6989, 1908, 1773, 6425, 8667, 11964, + 7652, 8374, 8184, 7796, 7017, 1549, 5514, 1257, 5403, 4347, + 1078, 5299, 938, 9411, 4993, 2040, 5555, 4170, 4380, 10666, + 5484, 8577, 8696, 4309, 3811, 2375, 8628, 627, 1808, 3527, + 5312, 959, 1423, 1193, 12279, 11677, 2487, 2118, 1749, 3431, + 5282, 2112, 11601, 5290, 2435, 4338, 2336, 11578, 2208, 9444, + 7377, 1469, 3929, 4734, 4367, 7042, 6880, 11159, 8199, 8848, + 646, 6413, 7417, 3334, 2432, 9206, 3218, 7377, 10088, 6401, + 4033, 3984, 7253, 3459, 6663, 4476, 4732, 8871, 8232, 9304, + 823, 2501, 5415, 7529, 12079, 8278, 5293, 12279, 5395, 2996, + 5638, 3789, 7241, 8303, 8856, 1447, 10736, 6470, 2148, 1633, + 3786, 10031, 1621, 12039, 4067, 11329, 11813, 1654, 5769, 2743, + 7698, 4222, 4790, 657, 10045, 1436, 5808, 4003, 5332, 1731, + 9060, 115, 864, 12037, 1025, 4233, 4099, 6602, 7485, 4899, + 5665, 10559, 1141, 7481, 8722, 10023, 8042, 9527, 2856, 10535, + 10200, 5878, 5446, 7042, 7225, 6057, 11147, 8455, 287, 1151, + 1369, 5407, 9863, 8946, 2165, 7065, 9386, 11517, 7300, 5954, + 8441, 2915, 2631, 6011, 2293, 9169, 2311, 8645, 10359, 6875, + 5968, 1818, 935, 5615, 8888, 6158, 7633, 5647, 5827, 5274, + 10567, 1470, 9491, 5233, 9495, 4687, 3524, 10685, 2360, 2243, + 3322, 709, 10563, 6278, 11667, 1716, 4297, 9643, 10653, 3014, + 8824, 1985, 6515, 9058, 4085, 12230, 7907, 4988, 2356, 9944, + 2329, 879, 6940, 7304, 12243, 6681, 10218, 3360, 3299, 5676, + 7155, 11028, 4475, 3317, 8192, 11903, 882, 1816, 2691, 10309, + 1993, 1659, 11045, 10904, 3062, 2212, 6642, 11723, 801, 8951, + 7614, 5768, 2161, 185, 196, 1309, 10766, 4895, 11624, 11041, + 794, 11935, 1725, 2846, 10781, 4117, 3773, 9870, 2821, 5156, + 885, 1794, 7214, 4751, 6235, 3961, 309, 4009, 10589, 4128, + 7640, 674, 10574, 6129, 5392, 3173, 5599, 2476, 2419, 12222, + 11610, 3264, 8277, 8774, 11968, 7266, 768, 3286, 6360, 12203, + 1873, 3726, 2006, 4525, 12104, 8137, 1058, 11720, 6294, 2897, + 10160, 2366, 674, 4363, 11713, 12284, 8588, 4650, 1548, 7697, + 11023, 6810, 5822, 416, 10583, 7627, 4177, 11681, 3311, 10612, + 9745, 2584, 8131, 3531, 5927, 10160, 11800, 8111, 4254, 7572, + 4092, 7394, 9981, 7048, 9916, 9905, 11311, 6032, 3806, 3430, + 5647, 5083, 7589, 4642, 8203, 5219, 873, 9685, 9681, 7600, + 5040, 9006, 2872, 976, 9193, 6585, 10954, 3084, 3602, 2163, + 9550, 7070, 1473, 4291, 2483, 9124, 10206, 6217, 9877, 3734, + 3714, 932, 5580, 12175, 11798, 763, 4896, 393, 7125, 1688, + 4949, 7845, 6492, 1820, 11924, 867, 11942, 3737, 660, 1275, + 5009, 5845, 5077, 7493, 11771, 12085, 3870, 7577, 7112, 5120, + 4144, 6925, 6545, 5806, 10628, 8141, 8091, 3304, 6019, 12008, + 2965, 188, 6633, 9318, 828, 6619, 11148, 7008, 3935, 9017, + 1477, 9045, 7040, 9266, 11583, 2184, 6388, 7665, 12147, 6173, + 4601, 3842, 10876, 2300, 318, 1493, 9848, 617, 9860, 10006, + 7855, 9676, 4908, 8030, 1921, 2483, 1307, 8580, 10133, 2213, + 237, 7712, 6262, 718, 67, 1506, 11180, 1550, 11406, 11758, + 8240, 7533, 11070, 7260, 6558, 6025, 2822, 9310, 9983, 10899, + 1930, 11953, 6823, 6641, 11080, 9167, 9501, 12059, 2642, 11635, + 3850, 3899, 2377, 7532, 230, 10929, 12163, 8729, 4129, 7731, + 8362, 8476, 5044, 2580, 3805, 7077, 8068, 10211, 10550, 1678, + 12205, 2680, 2455, 4687, 5212, 9367, 5062, 6440, 11980, 1834, + 6289, 11600, 585, 1366, 1610, 8323, 7347, 1032, 2118, 1504, + 9727, 11917, 1469, 6639, 3157, 5953, 5912, 7228, 2956, 7829, + 9967, 10482, 1573, 6328, 5085, 4999, 6039, 4639, 7970, 11295, + 7020, 1044, 5583, 8238, 9825, 4899, 11674, 6311, 10710, 210, + 9311, 1889, 6600, 8032, 4352, 8105, 5616, 2488, 8572, 7453, + 1928, 7031, 9309, 4217, 5573, 1331, 9491, 9652, 22, 3523, + 5776, 3839, 10623, 9947, 7371, 6413, 9834, 1827, 5621, 5014, + 9452, 11860, 6498, 9730, 10796, 2486, 1916, 4797, 9069, 3247, + 5471, 9143, 30, 4483, 4331, 2295, 11435, 6440, 3631, 10556, + 8214, 8248, 1030, 3911, 2927, 10564, 3499, 7619, 6356, 1937, + 824, 7942, 5526, 1800, 8025, 5793, 1832, 9318, 11118, 11768, + 9995, 93, 10562, 7398, 12099, 10100, 3386, 3522, 1929, 9607, + 12, 12222, 9626, 1904, 10033, 9308, 2581, 5596, 9093, 8645, + 10039, 1495, 4370, 272, 5998, 10749, 8889, 7296, 756, 9125, + 6076, 7448, 9201, 5902, 4790, 10880, 2927, 4925, 9931, 10604, + 10479, 6582, 1808, 8829, 64, 9695, 6528, 9036, 10354, 7151, + 5289, 629, 7606, 554, 11494, 2248, 3378, 873, 3219, 6232, + 5834, 10011, 227, 10852, 3523, 1077, 1579, 6790, 7478, 10431, + 5681, 10960, 61, 6208, 9618, 5821, 9093, 7480, 10276, 8701, + 7685, 3807, 7898, 2481, 10913, 3510, 5729, 3770, 10331, 3607, + 11750, 8911, 8791, 5196, 3455, 1468, 7566, 8292, 9895, 5247, + 8107, 7767, 7153, 4362, 11096, 8909, 11917, 1354, 853, 4426, + 7828, 5407, 7728, 1731, 3721, 10977, 5383, 609, 10662, 4977, + 5976, 10886, 7797, 1678, 994, 1927, 12176, 7369, 5352, 8168, + 2503, 7379, 11263, 11171, 9208, 941, 1086, 323, 10619, 1122, + 2373, 569, 3815, 4798, 5385, 12238, 10450, 10513, 8196, 3360, + 9998, 1272, 10227, 2632, 3850, 6219, 5199, 9130, 6698, 6451, + 8952, 5034, 7018, 4986, 5312, 5530, 185, 5165, 6193, 6669, + 3775, 761, 11379, 5704, 6283, 1815, 9621, 11430, 8249, 1091, + 1965, 6967, 830, 513, 6851, 3301, 7602, 4801, 11279, 8036, + 3413, 6539, 8749, 1615, 9544, 1997, 4299, 10936, 3331, 5052, + 10650, 6547, 1118, 5282, 10336, 2711, 5170, 966, 1056, 10091, + 4463, 8323, 9629, 2923, 1008, 9605, 6136, 10, 2085, 6500, + 11462, 7604, 11049, 1163, 4111, 3574, 8325, 753, 5487, 7307, + 2910, 2353, 3593, 7409, 2323, 8434, 1454, 3100, 4584, 4462, + 2671, 10567, 9043, 8969, 12174, 11717, 5857, 4788, 12194, 346, + 9160, 3204, 5274, 11755, 2701, 8153, 10964, 1847, 1101, 7859, + 5405, 4524, 2493, 10443, 1774, 9550, 6905, 1117, 11103, 9992, + 8736, 224, 3668, 4628, 4516, 5298, 767, 7841, 4015, 3631, + 3909, 2209, 1909, 11562, 8799, 9063, 168, 1139, 8104, 7281, + 1705, 5260, 7130, 4247, 10916, 1225, 3527, 10721, 4628, 11950, + 10870, 1177, 402, 1910, 8034, 9698, 8083, 11738, 11250, 5074, + 8130, 6263, 4588, 5581, 11148, 8842, 3737, 11149, 8695, 11162, + 11813, 8472, 6617, 8341, 9545, 10620, 203, 11530, 228, 536, + 6790, 9598, 5405, 7056, 9998, 7152, 4932, 7259, 534, 6529, + 597, 3961, 7686, 1041, 7304, 532, 22, 566, 4326, 7298, + 5695, 1344, 7261, 8854, 9749, 8034, 5048, 7018, 600, 4069, + 1300, 1306, 9487, 3567, 9759, 4770, 4616, 9191, 1202, 12190, + 8407, 5755, 3336, 10430, 2189, 3058, 1635, 11343, 705, 6440, + 7336, 8864, 5167, 7124, 6195, 10704, 11464, 11987, 3007, 6064, + 5405, 9000, 5194, 2354, 938, 11333, 10515, 11743, 7172, 5019, + 10967, 11674, 320, 3135, 2113, 1763, 8117, 38, 2050, 6690, + 2860, 7555, 9976, 10586, 1771, 2758, 5085, 5349, 11663, 6826, + 2760, 803, 7357, 7634, 12207, 4703, 5311, 7436, 9796, 3301, + 5583, 5391, 2691, 7593, 1024, 8727, 7655, 9525, 1936, 11798, + 724, 7869, 2942, 10660, 477, 4701, 10994, 1781, 8024, 9399, + 164, 11303, 809, 11077, 11123, 10348, 6099, 10568, 9051, 1374, + 6990, 11054, 8675, 10406, 1089, 11286, 5912, 4562, 5165, 1418, + 791, 8888, 2924, 9400, 6370, 3587, 5304, 7133, 10165, 1305, + 493, 2879, 1350, 6700, 10663, 7434, 1775, 11019, 5519, 7983, + 4086, 82, 826, 5950, 11117, 11364, 7550, 5612, 4313, 3424, + 7562, 4323, 3291, 4170, 740, 9670, 6122, 8277, 7134, 8772, + 5895, 5199, 2762, 10937, 11090, 2728, 1286, 1711, 815, 7558, + 4376, 6823, 10719, 8932, 4455, 3086, 4414, 1342, 6538, 7796, + 11544, 6895, 10956, 9591, 10282, 5976, 10614, 11336, 5785, 1050, + 3427, 2910, 2198, 5189, 2039, 4026, 11631, 671, 4981, 999, + 1410, 3897, 4659, 7403, 8741, 6752, 7844, 2891, 5411, 10806, + 2020, 7056, 8293, 2581, 2538, 9916, 5799, 11859, 6976, 11179, + 1679, 3994, 8671, 7439, 5170, 6331, 7398, 183, 893, 3308, + 12103, 10526, 2632, 3009, 9584, 4637, 3748, 6584, 8701, 7095, + 5302, 9682, 4103, 1958, 5812, 1235, 497, 8314, 11465, 7758, + 6482, 7308, 11776, 10905, 11040, 9515, 7141, 3970, 8037, 1831, + 5500, 1743, 3480, 4790, 617, 3901, 9732, 1602, 5431, 11144, + 2108, 6575, 5353, 7322, 12225, 8532, 5110, 4043, 4998, 2642, + 8013, 8373, 7270, 6434, 8259, 10474, 303, 7344, 555, 902, + 5672, 8326, 8500, 11647, 12082, 10341, 457, 8240, 10080, 5080, + 5097, 4457, 6082, 487, 9562, 6630, 3881, 498, 5565, 10564, + 2794, 8765, 10750, 5992, 7317, 1129, 12152, 11245, 2150, 6364, + 7718, 4124, 3698, 10185, 9194, 9599, 10960, 8746, 1355, 11602, + 2069, 6351, 11478, 5938, 8513, 4848, 5515, 2577, 6952, 1021, + 11422, 4724, 245, 7974, 8993, 7820, 3155, 7316, 101, 6676, + 7696, 5700, 1771, 8666, 4735, 6054, 1476, 8265, 9364, 1721, + 12236, 1943, 7538, 3087, 3934, 756, 1086, 4817, 790, 4862, + 4742, 7588, 3580, 11478, 3919, 5637, 2244, 7371, 3884, 10788, + 4766, 1700, 9156, 10785, 9665, 4434, 11797, 7672, 7669, 1240, + 1875, 1305, 4161, 9616, 483, 2361, 8998, 3330, 11180, 3548, + 7404, 3195, 9833, 3589, 5291, 9129, 9090, 134, 1195, 2674, + 990, 8217, 1672, 9457, 9520, 182, 11786, 3082, 12009, 10864, + 1414, 3757, 3425, 4499, 10952, 2059, 12097, 6889, 10524, 8009, + 8223, 2977, 6314, 8633, 3696, 6501, 2185, 1867, 4804, 5943, + 7387, 7185, 5293, 3458, 7359, 8481, 6902, 6334, 6479, 8798, + 3662, 7786, 2288, 10158, 1637, 6746, 1429, 2071, 10204, 9945, + 5722, 1181, 979, 396, 4831, 598, 7467, 11874, 4673, 1254, + 8336, 2299, 282, 7655, 11937, 8382, 10917, 1833, 11219, 2266, + 9935, 942, 3024, 4132, 970, 11538, 1645, 5588, 508, 2348, + 10988, 2077, 12008, 8265, 9269, 5115, 5294, 4726, 11848, 7163, + 7330, 10617, 2813, 10668, 7271, 720, 5532, 1805, 11328, 6183, + 8842, 693, 12152, 11548, 2065, 2104, 3838, 11005, 6313, 5378, + 503, 4030, 3156, 11858, 5053, 2279, 299, 9301, 9408, 7450, + 8863, 6856, 10212, 3214, 7349, 6130, 11856, 3278, 10305, 898, + 1644, 7763, 2889, 11348, 10975, 8990, 10298, 10110, 3393, 3555, + 3113, 8348, 5102, 7552, 263, 3988, 11715, 6794, 10278, 3642, + 11756, 3897, 3369, 7963, 651, 4708, 4876, 3095, 11974, 1929, + 4970, 9765, 10723, 10004, 1367, 4544, 8997, 12258, 1820, 7734, + 1449, 114, 4239, 3273, 2867, 1004, 6627, 4081, 1155, 10819, + 10459, 7842, 5035, 9071, 3193, 5186, 7012, 3707, 3559, 316, + 7397, 578, 10062, 10069, 9406, 4708, 35, 10300, 12169, 11270, + 12212, 11691, 11958, 9621, 6487, 10999, 2362, 5729, 8013, 10396, + 11857, 6439, 10387, 3145, 10127, 7638, 7027, 7621, 4015, 6013, + 3562, 5915, 10038, 4251, 10214, 4251, 9147, 1794, 11958, 11765, + 8880, 4245, 1007, 5086, 11135, 8239, 3362, 11671, 6227, 2911, + 634, 5968, 6209, 11446, 6799, 8916, 355, 2672, 7771, 4165, + 9664, 11899, 3387, 2239, 1748, 11129, 2230, 11535, 3502, 10827, + 10552, 11479, 3641, 4436, 7095, 4635, 5819, 5349, 11497, 3767, + 6813, 3844, 4901, 6365, 3303, 1979, 10882, 2687, 524, 11866, + 3230, 3550, 6171, 5923, 4261, 2097, 11565, 10678, 5453, 3029, + 10653, 4187, 832, 6684, 9386, 6036, 9836, 2557, 4626, 9615, + 131, 8018, 1485, 4968, 1166, 11968, 8780, 10889, 6385, 4577, + 4191, 6566, 4626, 6132, 3231, 10741, 6849, 10830, 3344, 1423, + 4633, 7224, 11767, 2285, 7003, 10787, 8338, 11717, 4281, 10626, + 2543, 847, 778, 5209, 5626, 6617, 5938, 1724, 10383, 1969, + 8669, 5315, 68, 4807, 6333, 11895, 12202, 5623, 717, 7732, + 8929, 3264, 3858, 1179, 8486, 12260, 7529, 9786, 11538, 7967, + 8741, 5962, 6971, 9904, 5332, 11641, 11602, 6249, 5411, 1455, + 9393, 11919, 10828, 1888, 11187, 4190, 1663, 9552, 10900, 2598, + 10545, 1902, 931, 5667, 8650, 1719, 2957, 7772, 8756, 11286, + 3192, 2692, 1482, 8057, 4384, 6013, 3390, 4453, 6072, 1011, + 1436, 3669, 7222, 12051, 4497, 6810, 631, 1415, 6151, 11258, + 8597, 7654, 8651, 7796, 2332, 8219, 5181, 7997, 2882, 8607, + 2389, 8023, 11425, 8632, 444, 1832, 3528, 3402, 2834, 6267, + 5059, 11369, 3571, 10910, 4203, 11336, 11915, 9792, 901, 11969, + 11444, 772, 2289, 10839, 11773, 10553, 3825, 3398, 3682, 1259, + 1982, 4998, 8005, 7322, 4748, 321, 4529, 2232, 11703, 9888, + 3789, 8003, 759, 5408, 11498, 602, 11109, 6533, 5491, 2442, + 108, 2625, 4604, 7937, 5692, 622, 1328, 6356, 7372, 887, + 7011, 7260, 7264, 5340, 5357, 8838, 2238, 4929, 10669, 1318, + 12048, 7420, 5799, 4713, 3627, 10411, 10313, 840, 11157, 2609, + 5876, 2728, 7696, 11273, 3031, 1163, 10163, 9339, 8777, 1921, + 11696, 7877, 6058, 195, 10721, 7576, 324, 1213, 10962, 7297, + 3493, 8704, 11544, 1086, 8918, 1800, 6671, 7967, 6071, 9032, + 6844, 2291, 5697, 10014, 10389, 6723, 8496, 3722, 7875, 8630, + 1573, 43, 8460, 6003, 8292, 11404, 6250, 2152, 1909, 2688, + 3833, 2935, 6529, 6578, 140, 9328, 1443, 8052, 10120, 6871, + 836, 9551, 4491, 9605, 8799, 10111, 12143, 2457, 6034, 11258, + 2197, 11469, 11489, 7438, 2433, 2756, 2253, 1044, 9548, 10936, + 10156, 1474, 6781, 8800, 3519, 10268, 11373, 6602, 3696, 7740, + 11466, 841, 10462, 4098, 1556, 9624, 199, 868, 2057, 2665, + 2515, 9790, 5204, 7575, 10665, 4662, 5669, 4668, 3719, 5198, + 2684, 4437, 4654, 9145, 10800, 11900, 1366, 4118, 2830, 3616, + 11112, 3013, 8599, 405, 7496, 11251, 8911, 6515, 6551, 1539, + 6531, 213, 3018, 288, 2093, 2004, 2284, 2650, 9460, 7708, + 5786, 3294, 4017, 6663, 3794, 2099, 7338, 4969, 4703, 4106, + 5551, 10892, 11563, 6433, 12233, 1076, 11049, 537, 4485, 6418, + 233, 9411, 2838, 2772, 7285, 5051, 2990, 10319, 10611, 11548, + 844, 11731, 1957, 7765, 5100, 2216, 188, 1817, 4129, 9075, + 6833, 7833, 1330, 9031, 2276, 3822, 1280, 7161, 8168, 1413, + 8510, 3994, 1304, 4336, 3282, 7930, 978, 10980, 994, 3790, + 2306, 3495, 7898, 8069, 10410, 4017, 3828, 2652, 6746, 3892, + 682, 2788, 7548, 8120, 8351, 2901, 1311, 9035, 1295, 4971, + 480, 1053, 2189, 6654, 122, 3345, 8614, 9358, 697, 5685, + 8812, 3134, 6009, 5968, 4731, 4587, 8398, 6166, 7092, 243, + 7117, 11211, 5204, 8927, 3386, 10217, 3500, 9509, 7534, 12111, + 11531, 6355, 8218, 4252, 10225, 5077, 6540, 5043, 10369, 5204, + 10308, 7751, 3704, 9420, 4736, 7100, 6004, 9589, 620, 4322, + 9472, 2196, 6233, 11550, 9758, 2252, 6345, 1388, 6248, 10063, + 923, 9667, 5501, 2318, 11990, 2662, 7663, 8853, 7973, 9826, + 9720, 1788, 10285, 2572, 3095, 1153, 10551, 6979, 7590, 3867, + 7484, 6143, 983, 3133, 91, 6597, 12135, 7889, 9228, 11984, + 6684, 11629, 3910, 7722, 1929, 5392, 12231, 2649, 8745, 7089, + 10739, 8363, 10890, 3539, 7287, 6551, 5259, 1248, 3662, 42, + 6849, 11227, 8397, 3644, 5824, 5997, 3845, 10168, 12180, 3996, + 3828, 7335, 2854, 7601, 4166, 313, 5926, 2165, 2154, 1353, + 5407, 2116, 7336, 2189, 596, 9365, 2477, 12240, 11510, 6573, + 12021, 1713, 748, 10276, 5951, 478, 8379, 9121, 5770, 6619, + 7658, 6831, 10832, 5403, 200, 1743, 11403, 9025, 5047, 4282, + 11110, 182, 8009, 3125, 11621, 7765, 4294, 9772, 9357, 1710, + 5042, 8805, 1277, 742, 5194, 6692, 1785, 827, 4373, 1825, + 7249, 2172, 1453, 7238, 12191, 9533, 12243, 8808, 6471, 7376, + 5982, 9203, 8023, 509, 3961, 12163, 11928, 921, 1227, 10696, + 7284, 5853, 8680, 174, 5063, 804, 12269, 5389, 31, 3407, + 11245, 11322, 8361, 4956, 4411, 9334, 266, 5644, 10826, 10489, + 6042, 8608, 3403, 3122, 6992, 8584, 265, 11909, 9702, 6930, + 8004, 7154, 11437, 9903, 5782, 10639, 11569, 1173, 4087, 8046, + 11371, 8062, 2119, 5293, 7131, 6737, 1360, 3861, 51, 10313, + 2799, 5771, 6487, 7654, 9084, 6709, 254, 148, 996, 11910, + 10889, 8855, 240, 10497, 2169, 2719, 7524, 4820, 1488, 10061, + 12050, 2761, 5698, 8353, 10692, 920}; + // const int twiddle[12] = {1331, 1945, 10302, 3400, 8340, 12149, + // 7311, 5860, 4134, 8246, 1479, 12288}; + static const int twiddle[] = { + // layer #0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + // layer #1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + + // layer #2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, + + // layer #3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, + + // layer #4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, + + // layer #5 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, + + // layer #6 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, + + // layer #7 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, + + // layer #8 + 1, 1, 1, 1, 1, 1, 1, 1, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 3400, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 8340, 5277, 5277, 5277, 5277, 5277, 5277, 5277, 5277, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 12149, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 3271, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 12144, 10849, 10849, 10849, 10849, 10849, 10849, 10849, 10849, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 9042, 9042, 9042, 9042, 9042, 9042, 9042, 9042, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 8011, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 4976, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 8736, 12176, 12176, 12176, 12176, 12176, 12176, 12176, 12176, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 9048, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 3833, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 11336, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 2963, 9509, 9509, 9509, 9509, 9509, 9509, 9509, 9509, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 10530, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 4143, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 8241, 8241, 8241, 8241, 8241, 8241, 8241, 8241, 480, 480, 480, 480, 480, 480, 480, 480, 9852, 9852, 9852, 9852, 9852, 9852, 9852, 9852, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 9275, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 6534, 9377, 9377, 9377, 9377, 9377, 9377, 9377, 9377, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 9273, 9273, 9273, 9273, 9273, 9273, 9273, 9273, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 6915, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 11112, 4414, 4414, 4414, 4414, 4414, 4414, 4414, 4414, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 7205, 7205, 7205, 7205, 7205, 7205, 7205, 7205, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 8779, 8779, 8779, 8779, 8779, 8779, 8779, 8779, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 10908, 11287, 11287, 11287, 11287, 11287, 11287, 11287, 11287, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 9542, 12129, 12129, 12129, 12129, 12129, 12129, 12129, 12129, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 9005, 5101, 5101, 5101, 5101, 5101, 5101, 5101, 5101, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 10111, 10111, 10111, 10111, 10111, 10111, 10111, 10111, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 5067, 10911, 10911, 10911, 10911, 10911, 10911, 10911, 10911, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9198, 9984, 9984, 9984, 9984, 9984, 9984, 9984, 9984, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 3382, 8585, 8585, 8585, 8585, 8585, 8585, 8585, 8585, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 3186, 3186, 3186, 3186, 3186, 3186, 3186, 3186, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 5791, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 8653, 8653, 8653, 8653, 8653, 8653, 8653, 8653, 334, 334, 334, 334, 334, 334, 334, 334, 5012, 5012, 5012, 5012, 5012, 5012, 5012, 5012, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 5191, 5191, 5191, 5191, 5191, 5191, 5191, 5191, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 11082, 11082, 11082, 11082, 11082, 11082, 11082, 11082, 726, 726, 726, 726, 726, 726, 726, 726, 10600, 10600, 10600, 10600, 10600, 10600, 10600, 10600, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 8652, 9223, 9223, 9223, 9223, 9223, 9223, 9223, 9223, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 2969, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 5331, 11414, 11414, 11414, 11414, 11414, 11414, 11414, 11414, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 11227, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 3289, 11899, 11899, 11899, 11899, 11899, 11899, 11899, 11899, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 3985, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 6522, 5444, 5444, 5444, 5444, 5444, 5444, 5444, 5444, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 7394, 7394, 7394, 7394, 7394, 7394, 7394, 7394, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 8595, 12047, 12047, 12047, 12047, 12047, 12047, 12047, 12047, 563, 563, 563, 563, 563, 563, 563, 563, 9405, 9405, 9405, 9405, 9405, 9405, 9405, 9405, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 9302, 9302, 9302, 9302, 9302, 9302, 9302, 9302, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 7203, 10512, 10512, 10512, 10512, 10512, 10512, 10512, 10512, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 4388, 354, 354, 354, 354, 354, 354, 354, 354, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 130, 130, 130, 130, 130, 130, 130, 130, 11885, 11885, 11885, 11885, 11885, 11885, 11885, 11885, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 10115, 10115, 10115, 10115, 10115, 10115, 10115, 10115, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 6378, 7404, 7404, 7404, 7404, 7404, 7404, 7404, 7404, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 9424, 9424, 9424, 9424, 9424, 9424, 9424, 9424, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 4177, 8005, 8005, 8005, 8005, 8005, 8005, 8005, 8005, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 9154, 7852, 7852, 7852, 7852, 7852, 7852, 7852, 7852, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 5092, 9888, 9888, 9888, 9888, 9888, 9888, 9888, 9888, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 6730, 6730, 6730, 6730, 6730, 6730, 6730, 6730, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 12171, 4337, 4337, 4337, 4337, 4337, 4337, 4337, 4337, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 11289, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4053, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 4231, 7270, 7270, 7270, 7270, 7270, 7270, 7270, 7270, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 10163, 10163, 10163, 10163, 10163, 10163, 10163, 10163, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 9821, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 955, 955, 955, 955, 955, 955, 955, 955, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 2704, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 8993, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 8232, 8232, 8232, 8232, 8232, 8232, 8232, 8232, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 6747, 8526, 8526, 8526, 8526, 8526, 8526, 8526, 8526, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 10682, 10682, 10682, 10682, 10682, 10682, 10682, 10682, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4805, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 4919, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 11560, 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3778, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 11813, 11813, 11813, 11813, 11813, 11813, 11813, 11813, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 3748, 11796, 11796, 11796, 11796, 11796, 11796, 11796, 11796, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 7393, 5195, 5195, 5195, 5195, 5195, 5195, 5195, 5195, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 3707, 7575, 7575, 7575, 7575, 7575, 7575, 7575, 7575, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 10040, 10040, 10040, 10040, 10040, 10040, 10040, 10040, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 9447, 8643, 8643, 8643, 8643, 8643, 8643, 8643, 8643, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 3201, 7635, 7635, 7635, 7635, 7635, 7635, 7635, 7635, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 4632, 6591, 6591, 6591, 6591, 6591, 6591, 6591, 6591, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 243, 243, 243, 243, 243, 243, 243, 243, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 11224, 11224, 11224, 11224, 11224, 11224, 11224, 11224, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 4255, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 8357, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6957, 6957, 6957, 6957, 6957, 6957, 6957, 6957, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 9764, 5011, 5011, 5011, 5011, 5011, 5011, 5011, 5011, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 4846, 9140, 9140, 9140, 9140, 9140, 9140, 9140, 9140, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 9408, 11222, 11222, 11222, 11222, 11222, 11222, 11222, 11222, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 10745, 10745, 10745, 10745, 10745, 10745, 10745, 10745, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 10092, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 12208, 7247, 7247, 7247, 7247, 7247, 7247, 7247, 7247, 355, 355, 355, 355, 355, 355, 355, 355, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 2678, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 5407, 5407, 5407, 5407, 5407, 5407, 5407, 5407, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 11745, 6039, 6039, 6039, 6039, 6039, 6039, 6039, 6039, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 9970, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 4938, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2426, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 2481, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 9153, 9153, 9153, 9153, 9153, 9153, 9153, 9153, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 4452, 9041, 9041, 9041, 9041, 9041, 9041, 9041, 9041, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 4611, 8925, 8925, 8925, 8925, 8925, 8925, 8925, 8925, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 3459, 27, 27, 27, 27, 27, 27, 27, 27, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 7300, 8509, 8509, 8509, 8509, 8509, 8509, 8509, 8509, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 2294, 8374, 8374, 8374, 8374, 8374, 8374, 8374, 8374, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10276, 773, 773, 773, 773, 773, 773, 773, 773, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 7384, 7384, 7384, 7384, 7384, 7384, 7384, 7384, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 11462, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 9238, 10805, 10805, 10805, 10805, 10805, 10805, 10805, 10805, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 5179, 10752, 10752, 10752, 10752, 10752, 10752, 10752, 10752, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 11136, 11136, 11136, 11136, 11136, 11136, 11136, 11136, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 12280, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 6267, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 10963, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 7428, 7428, 7428, 7428, 7428, 7428, 7428, 7428, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 671, 671, 671, 671, 671, 671, 671, 671, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 7935, 4645, 4645, 4645, 4645, 4645, 4645, 4645, 4645, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 4372, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 7399, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 5088, 5088, 5088, 5088, 5088, 5088, 5088, 5088, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 8577, 3, 3, 3, 3, 3, 3, 3, 3, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 10200, 442, 442, 442, 442, 442, 442, 442, 442, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 11869, 11869, 11869, 11869, 11869, 11869, 11869, 11869, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 9813, 11854, 11854, 11854, 11854, 11854, 11854, 11854, 11854, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 7969, 9644, 9644, 9644, 9644, 9644, 9644, 9644, 9644, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 11744, 11744, 11744, 11744, 11744, 11744, 11744, 11744, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 11950, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 11499, 5291, 5291, 5291, 5291, 5291, 5291, 5291, 5291, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 10593, 9430, 9430, 9430, 9430, 9430, 9430, 9430, 9430, + + // layer #9 + 1, 1, 1, 1, 10302, 10302, 10302, 10302, 3400, 3400, 3400, 3400, 3150, 3150, 3150, 3150, 8340, 8340, 8340, 8340, 6281, 6281, 6281, 6281, 5277, 5277, 5277, 5277, 9407, 9407, 9407, 9407, 12149, 12149, 12149, 12149, 7822, 7822, 7822, 7822, 3271, 3271, 3271, 3271, 1404, 1404, 1404, 1404, 12144, 12144, 12144, 12144, 5468, 5468, 5468, 5468, 10849, 10849, 10849, 10849, 10232, 10232, 10232, 10232, 7311, 7311, 7311, 7311, 10930, 10930, 10930, 10930, 9042, 9042, 9042, 9042, 64, 64, 64, 64, 8011, 8011, 8011, 8011, 8687, 8687, 8687, 8687, 4976, 4976, 4976, 4976, 5333, 5333, 5333, 5333, 8736, 8736, 8736, 8736, 5925, 5925, 5925, 5925, 12176, 12176, 12176, 12176, 3329, 3329, 3329, 3329, 9048, 9048, 9048, 9048, 431, 431, 431, 431, 3833, 3833, 3833, 3833, 3009, 3009, 3009, 3009, 5860, 5860, 5860, 5860, 6152, 6152, 6152, 6152, 3531, 3531, 3531, 3531, 922, 922, 922, 922, 11336, 11336, 11336, 11336, 1105, 1105, 1105, 1105, 4096, 4096, 4096, 4096, 8855, 8855, 8855, 8855, 2963, 2963, 2963, 2963, 11239, 11239, 11239, 11239, 9509, 9509, 9509, 9509, 6099, 6099, 6099, 6099, 10530, 10530, 10530, 10530, 5057, 5057, 5057, 5057, 4143, 4143, 4143, 4143, 1489, 1489, 1489, 1489, 3006, 3006, 3006, 3006, 11821, 11821, 11821, 11821, 8241, 8241, 8241, 8241, 6370, 6370, 6370, 6370, 480, 480, 480, 480, 4782, 4782, 4782, 4782, 9852, 9852, 9852, 9852, 453, 453, 453, 453, 9275, 9275, 9275, 9275, 4075, 4075, 4075, 4075, 1426, 1426, 1426, 1426, 5297, 5297, 5297, 5297, 6534, 6534, 6534, 6534, 6415, 6415, 6415, 6415, 9377, 9377, 9377, 9377, 10314, 10314, 10314, 10314, 4134, 4134, 4134, 4134, 7083, 7083, 7083, 7083, 9273, 9273, 9273, 9273, 8049, 8049, 8049, 8049, 6915, 6915, 6915, 6915, 11286, 11286, 11286, 11286, 2143, 2143, 2143, 2143, 6142, 6142, 6142, 6142, 11112, 11112, 11112, 11112, 3789, 3789, 3789, 3789, 4414, 4414, 4414, 4414, 3728, 3728, 3728, 3728, 2731, 2731, 2731, 2731, 5241, 5241, 5241, 5241, 7205, 7205, 7205, 7205, 350, 350, 350, 350, 5023, 5023, 5023, 5023, 10256, 10256, 10256, 10256, 8779, 8779, 8779, 8779, 6507, 6507, 6507, 6507, 10908, 10908, 10908, 10908, 3600, 3600, 3600, 3600, 11287, 11287, 11287, 11287, 156, 156, 156, 156, 9542, 9542, 9542, 9542, 1973, 1973, 1973, 1973, 12129, 12129, 12129, 12129, 10695, 10695, 10695, 10695, 9005, 9005, 9005, 9005, 12138, 12138, 12138, 12138, 5101, 5101, 5101, 5101, 2738, 2738, 2738, 2738, 3621, 3621, 3621, 3621, 6427, 6427, 6427, 6427, 10111, 10111, 10111, 10111, 1958, 1958, 1958, 1958, 5067, 5067, 5067, 5067, 8851, 8851, 8851, 8851, 10911, 10911, 10911, 10911, 9928, 9928, 9928, 9928, 9198, 9198, 9198, 9198, 9606, 9606, 9606, 9606, 9984, 9984, 9984, 9984, 8527, 8527, 8527, 8527, 3382, 3382, 3382, 3382, 2049, 2049, 2049, 2049, 8585, 8585, 8585, 8585, 11026, 11026, 11026, 11026, 2625, 2625, 2625, 2625, 6950, 6950, 6950, 6950, 3186, 3186, 3186, 3186, 10542, 10542, 10542, 10542, 5791, 5791, 5791, 5791, 8076, 8076, 8076, 8076, 2422, 2422, 2422, 2422, 4774, 4774, 4774, 4774, 1170, 1170, 1170, 1170, 10120, 10120, 10120, 10120, 8653, 8653, 8653, 8653, 11089, 11089, 11089, 11089, 334, 334, 334, 334, 12237, 12237, 12237, 12237, 5012, 5012, 5012, 5012, 7535, 7535, 7535, 7535, 8246, 8246, 8246, 8246, 8724, 8724, 8724, 8724, 5191, 5191, 5191, 5191, 8243, 8243, 8243, 8243, 2396, 2396, 2396, 2396, 7280, 7280, 7280, 7280, 11082, 11082, 11082, 11082, 1954, 1954, 1954, 1954, 726, 726, 726, 726, 7540, 7540, 7540, 7540, 10600, 10600, 10600, 10600, 1146, 1146, 1146, 1146, 8652, 8652, 8652, 8652, 787, 787, 787, 787, 9223, 9223, 9223, 9223, 9087, 9087, 9087, 9087, 8961, 8961, 8961, 8961, 1254, 1254, 1254, 1254, 2969, 2969, 2969, 2969, 11606, 11606, 11606, 11606, 5331, 5331, 5331, 5331, 421, 421, 421, 421, 11414, 11414, 11414, 11414, 5876, 5876, 5876, 5876, 11227, 11227, 11227, 11227, 8775, 8775, 8775, 8775, 2166, 2166, 2166, 2166, 9597, 9597, 9597, 9597, 3289, 3289, 3289, 3289, 2505, 2505, 2505, 2505, 11899, 11899, 11899, 11899, 723, 723, 723, 723, 1212, 1212, 1212, 1212, 400, 400, 400, 400, 3985, 3985, 3985, 3985, 8210, 8210, 8210, 8210, 6522, 6522, 6522, 6522, 5681, 5681, 5681, 5681, 5444, 5444, 5444, 5444, 9381, 9381, 9381, 9381, 2366, 2366, 2366, 2366, 5445, 5445, 5445, 5445, 7394, 7394, 7394, 7394, 5766, 5766, 5766, 5766, 8595, 8595, 8595, 8595, 3445, 3445, 3445, 3445, 12047, 12047, 12047, 12047, 1583, 1583, 1583, 1583, 563, 563, 563, 563, 11907, 11907, 11907, 11907, 9405, 9405, 9405, 9405, 3834, 3834, 3834, 3834, 1022, 1022, 1022, 1022, 9260, 9260, 9260, 9260, 9302, 9302, 9302, 9302, 11871, 11871, 11871, 11871, 7203, 7203, 7203, 7203, 4324, 4324, 4324, 4324, 10512, 10512, 10512, 10512, 3956, 3956, 3956, 3956, 4388, 4388, 4388, 4388, 6234, 6234, 6234, 6234, 354, 354, 354, 354, 9364, 9364, 9364, 9364, 11567, 11567, 11567, 11567, 9090, 9090, 9090, 9090, 3000, 3000, 3000, 3000, 11454, 11454, 11454, 11454, 130, 130, 130, 130, 12048, 12048, 12048, 12048, 11885, 11885, 11885, 11885, 3963, 3963, 3963, 3963, 2768, 2768, 2768, 2768, 5456, 5456, 5456, 5456, 10115, 10115, 10115, 10115, 6299, 6299, 6299, 6299, 6378, 6378, 6378, 6378, 9162, 9162, 9162, 9162, 7404, 7404, 7404, 7404, 10474, 10474, 10474, 10474, 5728, 5728, 5728, 5728, 10367, 10367, 10367, 10367, 9424, 9424, 9424, 9424, 2948, 2948, 2948, 2948, 4177, 4177, 4177, 4177, 7665, 7665, 7665, 7665, 8005, 8005, 8005, 8005, 8320, 8320, 8320, 8320, 9154, 9154, 9154, 9154, 11011, 11011, 11011, 11011, 7852, 7852, 7852, 7852, 5106, 5106, 5106, 5106, 5092, 5092, 5092, 5092, 8332, 8332, 8332, 8332, 9888, 9888, 9888, 9888, 2655, 2655, 2655, 2655, 8785, 8785, 8785, 8785, 6874, 6874, 6874, 6874, 6730, 6730, 6730, 6730, 10211, 10211, 10211, 10211, 12171, 12171, 12171, 12171, 975, 975, 975, 975, 4337, 4337, 4337, 4337, 9259, 9259, 9259, 9259, 11289, 11289, 11289, 11289, 8471, 8471, 8471, 8471, 4053, 4053, 4053, 4053, 8273, 8273, 8273, 8273, 4231, 4231, 4231, 4231, 10968, 10968, 10968, 10968, 7270, 7270, 7270, 7270, 6374, 6374, 6374, 6374, 4821, 4821, 4821, 4821, 6093, 6093, 6093, 6093, 10163, 10163, 10163, 10163, 9235, 9235, 9235, 9235, 9821, 9821, 9821, 9821, 605, 605, 605, 605, 2187, 2187, 2187, 2187, 4737, 4737, 4737, 4737, 955, 955, 955, 955, 7210, 7210, 7210, 7210, 2704, 2704, 2704, 2704, 9734, 9734, 9734, 9734, 1428, 1428, 1428, 1428, 1323, 1323, 1323, 1323, 1045, 1045, 1045, 1045, 426, 426, 426, 426, 1479, 1479, 1479, 1479, 10587, 10587, 10587, 10587, 2399, 2399, 2399, 2399, 1319, 1319, 1319, 1319, 8993, 8993, 8993, 8993, 11404, 11404, 11404, 11404, 1168, 1168, 1168, 1168, 1805, 1805, 1805, 1805, 1853, 1853, 1853, 1853, 4789, 4789, 4789, 4789, 8232, 8232, 8232, 8232, 11964, 11964, 11964, 11964, 6747, 6747, 6747, 6747, 1010, 1010, 1010, 1010, 8526, 8526, 8526, 8526, 5369, 5369, 5369, 5369, 10938, 10938, 10938, 10938, 5435, 5435, 5435, 5435, 2686, 2686, 2686, 2686, 8633, 8633, 8633, 8633, 1673, 1673, 1673, 1673, 6068, 6068, 6068, 6068, 10682, 10682, 10682, 10682, 10258, 10258, 10258, 10258, 4805, 4805, 4805, 4805, 1018, 1018, 1018, 1018, 4919, 4919, 4919, 4919, 7991, 7991, 7991, 7991, 11560, 11560, 11560, 11560, 10710, 10710, 10710, 10710, 3778, 3778, 3778, 3778, 1693, 1693, 1693, 1693, 3195, 3195, 3195, 3195, 4948, 4948, 4948, 4948, 11813, 11813, 11813, 11813, 11848, 11848, 11848, 11848, 3748, 3748, 3748, 3748, 12147, 12147, 12147, 12147, 11796, 11796, 11796, 11796, 8760, 8760, 8760, 8760, 7393, 7393, 7393, 7393, 7753, 7753, 7753, 7753, 5195, 5195, 5195, 5195, 295, 295, 295, 295, 3707, 3707, 3707, 3707, 7591, 7591, 7591, 7591, 7575, 7575, 7575, 7575, 2500, 2500, 2500, 2500, 9545, 9545, 9545, 9545, 8301, 8301, 8301, 8301, 10040, 10040, 10040, 10040, 7856, 7856, 7856, 7856, 9447, 9447, 9447, 9447, 6403, 6403, 6403, 6403, 8643, 8643, 8643, 8643, 6381, 6381, 6381, 6381, 3201, 3201, 3201, 3201, 5315, 5315, 5315, 5315, 7635, 7635, 7635, 7635, 6170, 6170, 6170, 6170, 4632, 4632, 4632, 4632, 677, 677, 677, 677, 6591, 6591, 6591, 6591, 3757, 3757, 3757, 3757, 6553, 6553, 6553, 6553, 5529, 5529, 5529, 5529, 243, 243, 243, 243, 8719, 8719, 8719, 8719, 2837, 2837, 2837, 2837, 3532, 3532, 3532, 3532, 11224, 11224, 11224, 11224, 2447, 2447, 2447, 2447, 4255, 4255, 4255, 4255, 147, 147, 147, 147, 2847, 2847, 2847, 2847, 8240, 8240, 8240, 8240, 8357, 8357, 8357, 8357, 9369, 9369, 9369, 9369, 1632, 1632, 1632, 1632, 1512, 1512, 1512, 1512, 6461, 6461, 6461, 6461, 3998, 3998, 3998, 3998, 6957, 6957, 6957, 6957, 1566, 1566, 1566, 1566, 9764, 9764, 9764, 9764, 3263, 3263, 3263, 3263, 5011, 5011, 5011, 5011, 9522, 9522, 9522, 9522, 4846, 4846, 4846, 4846, 5574, 5574, 5574, 5574, 9140, 9140, 9140, 9140, 1962, 1962, 1962, 1962, 9408, 9408, 9408, 9408, 10162, 10162, 10162, 10162, 11222, 11222, 11222, 11222, 6421, 6421, 6421, 6421, 9744, 9744, 9744, 9744, 6136, 6136, 6136, 6136, 10745, 10745, 10745, 10745, 7967, 7967, 7967, 7967, 10092, 10092, 10092, 10092, 2844, 2844, 2844, 2844, 1912, 1912, 1912, 1912, 10446, 10446, 10446, 10446, 12208, 12208, 12208, 12208, 1190, 1190, 1190, 1190, 7247, 7247, 7247, 7247, 2919, 2919, 2919, 2919, 355, 355, 355, 355, 7377, 7377, 7377, 7377, 2678, 2678, 2678, 2678, 12240, 12240, 12240, 12240, 11340, 11340, 11340, 11340, 5446, 5446, 5446, 5446, 5407, 5407, 5407, 5407, 9166, 9166, 9166, 9166, 11745, 11745, 11745, 11745, 11785, 11785, 11785, 11785, 6039, 6039, 6039, 6039, 6860, 6860, 6860, 6860, 9970, 9970, 9970, 9970, 11767, 11767, 11767, 11767, 4938, 4938, 4938, 4938, 7105, 7105, 7105, 7105, 2426, 2426, 2426, 2426, 9115, 9115, 9115, 9115, 2481, 2481, 2481, 2481, 10431, 10431, 10431, 10431, 5146, 5146, 5146, 5146, 11635, 11635, 11635, 11635, 9153, 9153, 9153, 9153, 709, 709, 709, 709, 4452, 4452, 4452, 4452, 1956, 1956, 1956, 1956, 9041, 9041, 9041, 9041, 2051, 2051, 2051, 2051, 4611, 4611, 4611, 4611, 5537, 5537, 5537, 5537, 8925, 8925, 8925, 8925, 11341, 11341, 11341, 11341, 3459, 3459, 3459, 3459, 8807, 8807, 8807, 8807, 27, 27, 27, 27, 7796, 7796, 7796, 7796, 5777, 5777, 5777, 5777, 11316, 11316, 11316, 11316, 3978, 3978, 3978, 3978, 9830, 9830, 9830, 9830, 7300, 7300, 7300, 7300, 8209, 8209, 8209, 8209, 8509, 8509, 8509, 8509, 2281, 2281, 2281, 2281, 2294, 2294, 2294, 2294, 1041, 1041, 1041, 1041, 8374, 8374, 8374, 8374, 168, 168, 168, 168, 10276, 10276, 10276, 10276, 5906, 5906, 5906, 5906, 773, 773, 773, 773, 174, 174, 174, 174, 10643, 10643, 10643, 10643, 1728, 1728, 1728, 1728, 7384, 7384, 7384, 7384, 1058, 1058, 1058, 1058, 11462, 11462, 11462, 11462, 8812, 8812, 8812, 8812, 2381, 2381, 2381, 2381, 218, 218, 218, 218, 9238, 9238, 9238, 9238, 3860, 3860, 3860, 3860, 10805, 10805, 10805, 10805, 11637, 11637, 11637, 11637, 5179, 5179, 5179, 5179, 7509, 7509, 7509, 7509, 10752, 10752, 10752, 10752, 6347, 6347, 6347, 6347, 9314, 9314, 9314, 9314, 316, 316, 316, 316, 11136, 11136, 11136, 11136, 5257, 5257, 5257, 5257, 12280, 12280, 12280, 12280, 5594, 5594, 5594, 5594, 6267, 6267, 6267, 6267, 8517, 8517, 8517, 8517, 10963, 10963, 10963, 10963, 4916, 4916, 4916, 4916, 1663, 1663, 1663, 1663, 1360, 1360, 1360, 1360, 1260, 1260, 1260, 1260, 3336, 3336, 3336, 3336, 7428, 7428, 7428, 7428, 11942, 11942, 11942, 11942, 1305, 1305, 1305, 1305, 12233, 12233, 12233, 12233, 671, 671, 671, 671, 6224, 6224, 6224, 6224, 7935, 7935, 7935, 7935, 12231, 12231, 12231, 12231, 4645, 4645, 4645, 4645, 11713, 11713, 11713, 11713, 1635, 1635, 1635, 1635, 7840, 7840, 7840, 7840, 4372, 4372, 4372, 4372, 1159, 1159, 1159, 1159, 7399, 7399, 7399, 7399, 8120, 8120, 8120, 8120, 1017, 1017, 1017, 1017, 6906, 6906, 6906, 6906, 4591, 4591, 4591, 4591, 8410, 8410, 8410, 8410, 2370, 2370, 2370, 2370, 9786, 9786, 9786, 9786, 8705, 8705, 8705, 8705, 6077, 6077, 6077, 6077, 5088, 5088, 5088, 5088, 3991, 3991, 3991, 3991, 8577, 8577, 8577, 8577, 2344, 2344, 2344, 2344, 3, 3, 3, 3, 6328, 6328, 6328, 6328, 10200, 10200, 10200, 10200, 9450, 9450, 9450, 9450, 442, 442, 442, 442, 6554, 6554, 6554, 6554, 3542, 3542, 3542, 3542, 3643, 3643, 3643, 3643, 11869, 11869, 11869, 11869, 11177, 11177, 11177, 11177, 9813, 9813, 9813, 9813, 4212, 4212, 4212, 4212, 11854, 11854, 11854, 11854, 4115, 4115, 4115, 4115, 7969, 7969, 7969, 7969, 6118, 6118, 6118, 6118, 9644, 9644, 9644, 9644, 8212, 8212, 8212, 8212, 2548, 2548, 2548, 2548, 192, 192, 192, 192, 11744, 11744, 11744, 11744, 1483, 1483, 1483, 1483, 2639, 2639, 2639, 2639, 3710, 3710, 3710, 3710, 1630, 1630, 1630, 1630, 5486, 5486, 5486, 5486, 11950, 11950, 11950, 11950, 9987, 9987, 9987, 9987, 2566, 2566, 2566, 2566, 1293, 1293, 1293, 1293, 11499, 11499, 11499, 11499, 9027, 9027, 9027, 9027, 5291, 5291, 5291, 5291, 6167, 6167, 6167, 6167, 10593, 10593, 10593, 10593, 2766, 2766, 2766, 2766, 9430, 9430, 9430, 9430, 3315, 3315, 3315, 3315, + + // layer #10 + 1, 1, 1945, 1945, 10302, 10302, 6320, 6320, 3400, 3400, 1518, 1518, 3150, 3150, 6828, 6828, 8340, 8340, 12109, 12109, 6281, 6281, 1279, 1279, 5277, 5277, 2450, 2450, 9407, 9407, 10583, 10583, 12149, 12149, 10347, 10347, 7822, 7822, 8, 8, 3271, 3271, 8682, 8682, 1404, 1404, 2622, 2622, 12144, 12144, 622, 622, 5468, 5468, 5275, 5275, 10849, 10849, 1092, 1092, 10232, 10232, 5349, 5349, 7311, 7311, 1522, 1522, 10930, 10930, 11169, 11169, 9042, 9042, 1131, 1131, 64, 64, 1590, 1590, 8011, 8011, 11232, 11232, 8687, 8687, 11129, 11129, 4976, 4976, 6877, 6877, 5333, 5333, 769, 769, 8736, 8736, 8122, 8122, 5925, 5925, 9332, 9332, 12176, 12176, 1417, 1417, 3329, 3329, 10891, 10891, 9048, 9048, 512, 512, 431, 431, 2643, 2643, 3833, 3833, 8051, 8051, 3009, 3009, 2941, 2941, 5860, 5860, 5797, 5797, 6152, 6152, 8443, 8443, 3531, 3531, 10533, 10533, 922, 922, 11385, 11385, 11336, 11336, 2054, 2054, 1105, 1105, 10939, 10939, 4096, 4096, 3448, 3448, 8855, 8855, 6086, 6086, 2963, 2963, 11783, 11783, 11239, 11239, 10013, 10013, 9509, 9509, 60, 60, 6099, 6099, 3670, 3670, 10530, 10530, 7376, 7376, 5057, 5057, 4665, 4665, 4143, 4143, 8840, 8840, 1489, 1489, 8190, 8190, 3006, 3006, 9395, 9395, 11821, 11821, 11415, 11415, 8241, 8241, 3889, 3889, 6370, 6370, 2338, 2338, 480, 480, 11925, 11925, 4782, 4782, 10506, 10506, 9852, 9852, 3589, 3589, 453, 453, 8566, 8566, 9275, 9275, 11912, 11912, 4075, 4075, 11759, 11759, 1426, 1426, 8545, 8545, 5297, 5297, 4483, 4483, 6534, 6534, 1804, 1804, 6415, 6415, 3840, 3840, 9377, 9377, 1389, 1389, 10314, 10314, 5082, 5082, 4134, 4134, 3624, 3624, 7083, 7083, 466, 466, 9273, 9273, 8022, 8022, 8049, 8049, 11408, 11408, 6915, 6915, 5509, 5509, 11286, 11286, 3116, 3116, 2143, 2143, 2164, 2164, 6142, 6142, 1282, 1282, 11112, 11112, 8778, 8778, 3789, 3789, 8494, 8494, 4414, 4414, 7508, 7508, 3728, 3728, 450, 450, 2731, 2731, 2947, 2947, 5241, 5241, 6164, 6164, 7205, 7205, 4265, 4265, 350, 350, 4855, 4855, 5023, 5023, 12269, 12269, 10256, 10256, 2873, 2873, 8779, 8779, 5734, 5734, 6507, 6507, 10734, 10734, 10908, 10908, 5246, 5246, 3600, 3600, 9559, 9559, 11287, 11287, 5061, 5061, 156, 156, 8484, 8484, 9542, 9542, 2800, 2800, 1973, 1973, 3317, 3317, 12129, 12129, 8314, 8314, 10695, 10695, 8787, 8787, 9005, 9005, 2900, 2900, 12138, 12138, 1241, 1241, 5101, 5101, 4222, 4222, 2738, 2738, 4273, 4273, 3621, 3621, 1248, 1248, 6427, 6427, 2602, 2602, 10111, 10111, 3495, 3495, 1958, 1958, 11009, 11009, 5067, 5067, 11826, 11826, 8851, 8851, 10595, 10595, 10911, 10911, 11081, 11081, 9928, 9928, 3941, 3941, 9198, 9198, 9615, 9615, 9606, 9606, 4390, 4390, 9984, 9984, 2260, 2260, 8527, 8527, 7154, 7154, 3382, 3382, 3375, 3375, 2049, 2049, 3669, 3669, 8585, 8585, 9363, 9363, 11026, 11026, 1265, 1265, 2625, 2625, 5690, 5690, 6950, 6950, 12139, 12139, 3186, 3186, 3114, 3114, 10542, 10542, 6138, 6138, 5791, 5791, 6771, 6771, 8076, 8076, 2478, 2478, 2422, 2422, 4103, 4103, 4774, 4774, 7235, 7235, 1170, 1170, 2185, 2185, 10120, 10120, 8711, 8711, 8653, 8653, 6444, 6444, 11089, 11089, 910, 910, 334, 334, 10602, 10602, 12237, 12237, 9461, 9461, 5012, 5012, 3163, 3163, 7535, 7535, 7087, 7087, 8246, 8246, 1325, 1325, 8724, 8724, 9360, 9360, 5191, 5191, 7226, 7226, 8243, 8243, 7779, 7779, 2396, 2396, 2689, 2689, 7280, 7280, 2672, 2672, 11082, 11082, 11873, 11873, 1954, 1954, 3229, 3229, 726, 726, 11124, 11124, 7540, 7540, 4523, 4523, 10600, 10600, 8347, 8347, 1146, 1146, 4661, 4661, 8652, 8652, 4499, 4499, 787, 787, 6879, 6879, 9223, 9223, 9084, 9084, 9087, 9087, 2633, 2633, 8961, 8961, 3343, 3343, 1254, 1254, 5808, 5808, 2969, 2969, 11164, 11164, 11606, 11606, 11066, 11066, 5331, 5331, 9168, 9168, 421, 421, 7771, 7771, 11414, 11414, 6296, 6296, 5876, 5876, 50, 50, 11227, 11227, 11251, 11251, 8775, 8775, 10243, 10243, 2166, 2166, 10032, 10032, 9597, 9597, 11463, 11463, 3289, 3289, 6825, 6825, 2505, 2505, 5781, 5781, 11899, 11899, 3368, 3368, 723, 723, 5289, 5289, 1212, 1212, 10141, 10141, 400, 400, 3793, 3793, 3985, 3985, 8755, 8755, 8210, 8210, 5039, 5039, 6522, 6522, 3042, 3042, 5681, 5681, 1734, 1734, 5444, 5444, 7751, 7751, 9381, 9381, 9169, 9169, 2366, 2366, 5784, 5784, 5445, 5445, 9696, 9696, 7394, 7394, 3200, 3200, 5766, 5766, 7302, 7302, 8595, 8595, 4235, 4235, 3445, 3445, 3020, 3020, 12047, 12047, 8581, 8581, 1583, 1583, 6685, 6685, 563, 563, 1314, 1314, 11907, 11907, 6639, 6639, 9405, 9405, 6693, 6693, 3834, 3834, 9996, 9996, 1022, 1022, 9261, 9261, 9260, 9260, 7315, 7315, 9302, 9302, 2982, 2982, 11871, 11871, 10353, 10353, 7203, 7203, 375, 375, 4324, 4324, 4504, 4504, 10512, 10512, 9233, 9233, 3956, 3956, 1506, 1506, 4388, 4388, 6094, 6094, 6234, 6234, 8176, 8176, 354, 354, 346, 346, 9364, 9364, 682, 682, 11567, 11567, 8945, 8945, 9090, 9090, 8468, 8468, 3000, 3000, 10014, 10014, 11454, 11454, 10362, 10362, 130, 130, 7070, 7070, 12048, 12048, 10526, 10526, 11885, 11885, 716, 716, 3963, 3963, 2832, 2832, 2768, 2768, 1178, 1178, 5456, 5456, 6513, 6513, 10115, 10115, 11275, 11275, 6299, 6299, 11711, 11711, 6378, 6378, 5609, 5609, 9162, 9162, 1040, 1040, 7404, 7404, 10361, 10361, 10474, 10474, 9057, 9057, 5728, 5728, 7126, 7126, 10367, 10367, 9855, 9855, 9424, 9424, 6781, 6781, 2948, 2948, 7186, 7186, 4177, 4177, 1236, 1236, 7665, 7665, 1868, 1868, 8005, 8005, 11851, 11851, 8320, 8320, 10076, 10076, 9154, 9154, 10058, 10058, 11011, 11011, 8957, 8957, 7852, 7852, 9202, 9202, 5106, 5106, 1658, 1658, 5092, 5092, 11295, 11295, 8332, 8332, 8838, 8838, 9888, 9888, 12164, 12164, 2655, 2655, 2595, 2595, 8785, 8785, 5115, 5115, 6874, 6874, 11787, 11787, 6730, 6730, 2065, 2065, 10211, 10211, 1371, 1371, 12171, 12171, 3981, 3981, 975, 975, 3869, 3869, 4337, 4337, 5211, 5211, 9259, 9259, 5370, 5370, 11289, 11289, 8951, 8951, 8471, 8471, 8835, 8835, 4053, 4053, 5836, 5836, 8273, 8273, 4684, 4684, 4231, 4231, 7954, 7954, 10968, 10968, 11345, 11345, 7270, 7270, 7800, 7800, 6374, 6374, 10118, 10118, 4821, 4821, 338, 338, 6093, 6093, 4289, 4289, 10163, 10163, 6323, 6323, 9235, 9235, 7846, 7846, 9821, 9821, 4739, 4739, 605, 605, 9270, 9270, 2187, 2187, 1721, 1721, 4737, 4737, 9004, 9004, 955, 955, 1836, 1836, 7210, 7210, 1701, 1701, 2704, 2704, 11877, 11877, 9734, 9734, 7570, 7570, 1428, 1428, 146, 146, 1323, 1323, 4834, 4834, 1045, 1045, 4840, 4840, 426, 426, 5207, 5207, 1479, 1479, 1029, 1029, 10587, 10587, 7640, 7640, 2399, 2399, 8524, 8524, 1319, 1319, 9343, 9343, 8993, 8993, 4138, 4138, 11404, 11404, 11424, 11424, 1168, 1168, 10584, 10584, 1805, 1805, 8360, 8360, 1853, 1853, 3408, 3408, 4789, 4789, 11832, 11832, 8232, 8232, 10962, 10962, 11964, 11964, 6903, 6903, 6747, 6747, 10552, 10552, 1010, 1010, 10499, 10499, 8526, 8526, 5209, 5209, 5369, 5369, 9344, 9344, 10938, 10938, 2151, 2151, 5435, 5435, 2535, 2535, 2686, 2686, 1445, 1445, 8633, 8633, 4411, 4411, 1673, 1673, 9689, 9689, 6068, 6068, 4820, 4820, 10682, 10682, 8080, 8080, 10258, 10258, 6763, 6763, 4805, 4805, 6085, 6085, 1018, 1018, 1481, 1481, 4919, 4919, 6613, 6613, 7991, 7991, 9199, 9199, 11560, 11560, 7619, 7619, 10710, 10710, 1095, 1095, 3778, 3778, 11677, 11677, 1693, 1693, 11722, 11722, 3195, 3195, 8330, 8330, 4948, 4948, 1573, 1573, 11813, 11813, 8144, 8144, 11848, 11848, 2485, 2485, 3748, 3748, 2483, 2483, 12147, 12147, 6457, 6457, 11796, 11796, 11946, 11946, 8760, 8760, 5646, 5646, 7393, 7393, 1255, 1255, 7753, 7753, 982, 982, 5195, 5195, 2717, 2717, 295, 295, 8481, 8481, 3707, 3707, 8761, 8761, 7591, 7591, 5406, 5406, 7575, 7575, 11153, 11153, 2500, 2500, 8345, 8345, 9545, 9545, 8635, 8635, 8301, 8301, 9988, 9988, 10040, 10040, 579, 579, 7856, 7856, 4693, 4693, 9447, 9447, 2360, 2360, 6403, 6403, 5078, 5078, 8643, 8643, 11572, 11572, 6381, 6381, 11444, 11444, 3201, 3201, 7711, 7711, 5315, 5315, 2626, 2626, 7635, 7635, 4963, 4963, 6170, 6170, 6586, 6586, 4632, 4632, 1403, 1403, 677, 677, 1842, 1842, 6591, 6591, 2068, 2068, 3757, 3757, 7699, 7699, 6553, 6553, 1892, 1892, 5529, 5529, 1030, 1030, 243, 243, 5653, 5653, 8719, 8719, 11924, 11924, 2837, 2837, 204, 204, 3532, 3532, 189, 189, 11224, 11224, 5416, 5416, 2447, 2447, 3572, 3572, 4255, 4255, 5478, 5478, 147, 147, 3268, 3268, 2847, 2847, 7365, 7365, 8240, 8240, 1944, 1944, 8357, 8357, 8307, 8307, 9369, 9369, 10407, 10407, 1632, 1632, 3678, 3678, 1512, 1512, 3769, 3769, 6461, 6461, 7287, 7287, 3998, 3998, 9462, 9462, 6957, 6957, 1176, 1176, 1566, 1566, 10487, 10487, 9764, 9764, 4475, 4475, 3263, 3263, 5411, 5411, 5011, 5011, 1218, 1218, 9522, 9522, 767, 767, 4846, 4846, 12096, 12096, 5574, 5574, 2532, 2532, 9140, 9140, 7406, 7406, 1962, 1962, 6500, 6500, 9408, 9408, 239, 239, 10162, 10162, 4378, 4378, 11222, 11222, 1526, 1526, 6421, 6421, 3221, 3221, 9744, 9744, 2442, 2442, 6136, 6136, 1901, 1901, 10745, 10745, 7725, 7725, 7967, 7967, 11675, 11675, 10092, 10092, 3407, 3407, 2844, 2844, 1530, 1530, 1912, 1912, 7562, 7562, 10446, 10446, 3753, 3753, 12208, 12208, 2212, 2212, 1190, 1190, 4218, 4218, 7247, 7247, 12221, 12221, 2919, 2919, 12226, 12226, 355, 355, 2291, 2291, 7377, 7377, 7002, 7002, 2678, 2678, 10463, 10463, 12240, 12240, 3007, 3007, 11340, 11340, 9834, 9834, 5446, 5446, 11641, 11641, 5407, 5407, 9520, 9520, 9166, 9166, 8820, 8820, 11745, 11745, 11063, 11063, 11785, 11785, 2840, 2840, 6039, 6039, 9860, 9860, 6860, 6860, 9135, 9135, 9970, 9970, 11897, 11897, 11767, 11767, 4697, 4697, 4938, 4938, 6701, 6701, 7105, 7105, 6389, 6389, 2426, 2426, 11883, 11883, 9115, 9115, 7937, 7937, 2481, 2481, 8257, 8257, 10431, 10431, 11445, 11445, 5146, 5146, 5724, 5724, 11635, 11635, 6026, 6026, 9153, 9153, 8113, 8113, 709, 709, 2637, 2637, 4452, 4452, 7684, 7684, 1956, 1956, 7119, 7119, 9041, 9041, 11475, 11475, 2051, 2051, 7559, 7559, 4611, 4611, 9714, 9714, 5537, 5537, 4301, 4301, 8925, 8925, 7057, 7057, 11341, 11341, 11779, 11779, 3459, 3459, 5672, 5672, 8807, 8807, 11038, 11038, 27, 27, 3359, 3359, 7796, 7796, 10883, 10883, 5777, 5777, 4119, 4119, 11316, 11316, 21, 21, 3978, 3978, 7429, 7429, 9830, 9830, 9955, 9955, 7300, 7300, 4705, 4705, 8209, 8209, 3094, 3094, 8509, 8509, 9011, 9011, 2281, 2281, 216, 216, 2294, 2294, 923, 923, 1041, 1041, 9349, 9349, 8374, 8374, 4505, 4505, 168, 168, 7246, 7246, 10276, 10276, 4906, 4906, 5906, 5906, 9244, 9244, 773, 773, 4227, 4227, 174, 174, 6627, 6627, 10643, 10643, 5959, 5959, 1728, 1728, 6063, 6063, 7384, 7384, 8328, 8328, 1058, 1058, 5547, 5547, 11462, 11462, 1344, 1344, 8812, 8812, 8474, 8474, 2381, 2381, 10381, 10381, 218, 218, 6184, 6184, 9238, 9238, 1392, 1392, 3860, 3860, 11410, 11410, 10805, 10805, 1535, 1535, 11637, 11637, 9916, 9916, 5179, 5179, 8464, 8464, 7509, 7509, 5673, 5673, 10752, 10752, 9051, 9051, 6347, 6347, 6759, 6759, 9314, 9314, 1744, 1744, 316, 316, 170, 170, 11136, 11136, 6302, 6302, 5257, 5257, 417, 417, 12280, 12280, 7073, 7073, 5594, 5594, 4565, 4565, 6267, 6267, 10916, 10916, 8517, 8517, 12282, 12282, 10963, 10963, 1620, 1620, 4916, 4916, 778, 778, 1663, 1663, 2528, 2528, 1360, 1360, 3065, 3065, 1260, 1260, 5189, 5189, 3336, 3336, 12217, 12217, 7428, 7428, 7885, 7885, 11942, 11942, 980, 980, 1305, 1305, 6691, 6691, 12233, 12233, 1681, 1681, 671, 671, 2461, 2461, 6224, 6224, 1015, 1015, 7935, 7935, 10880, 10880, 12231, 12231, 10080, 10080, 4645, 4645, 2110, 2110, 11713, 11713, 10268, 10268, 1635, 1635, 9513, 9513, 7840, 7840, 10440, 10440, 4372, 4372, 11841, 11841, 1159, 1159, 5368, 5368, 7399, 7399, 636, 636, 8120, 8120, 2035, 2035, 1017, 1017, 11825, 11825, 6906, 6906, 293, 293, 4591, 4591, 7681, 7681, 8410, 8410, 791, 791, 2370, 2370, 1275, 1275, 9786, 9786, 10398, 10398, 8705, 8705, 9272, 9272, 6077, 6077, 10036, 10036, 5088, 5088, 3515, 3515, 3991, 3991, 8136, 8136, 8577, 8577, 6092, 6092, 2344, 2344, 12150, 12150, 3, 3, 5835, 5835, 6328, 6328, 6671, 6671, 10200, 10200, 4554, 4554, 9450, 9450, 8195, 8195, 442, 442, 11749, 11749, 6554, 6554, 3837, 3837, 3542, 3542, 7350, 7350, 3643, 3643, 7171, 7171, 11869, 11869, 6463, 6463, 11177, 11177, 24, 24, 9813, 9813, 1468, 1468, 4212, 4212, 7866, 7866, 11854, 11854, 1866, 1866, 4115, 4115, 3536, 3536, 7969, 7969, 3276, 3276, 6118, 6118, 3758, 3758, 9644, 9644, 4566, 4566, 8212, 8212, 8929, 8929, 2548, 2548, 3393, 3393, 192, 192, 4770, 4770, 11744, 11744, 9118, 9118, 1483, 1483, 8809, 8809, 2639, 2639, 8342, 8342, 3710, 3710, 2307, 2307, 1630, 1630, 12077, 12077, 5486, 5486, 3418, 3418, 11950, 11950, 4251, 4251, 9987, 9987, 8095, 8095, 2566, 2566, 1536, 1536, 1293, 1293, 7929, 7929, 11499, 11499, 11864, 11864, 9027, 9027, 8823, 8823, 5291, 5291, 5102, 5102, 6167, 6167, 751, 751, 10593, 10593, 7021, 7021, 2766, 2766, 9577, 9577, 9430, 9430, 6162, 6162, 3315, 3315, 8239, 8239, + + // layer #11 + 1, 1331, 1945, 8105, 10302, 9727, 6320, 6244, 3400, 3048, 1518, 5062, 3150, 2101, 6828, 6497, 8340, 3573, 12109, 6200, 6281, 3491, 1279, 6467, 5277, 6668, 2450, 4365, 9407, 10515, 10583, 2779, 12149, 10284, 10347, 8177, 7822, 2299, 8, 10648, 3271, 3395, 8682, 4082, 1404, 796, 2622, 12095, 12144, 3629, 622, 4519, 5468, 2820, 5275, 4006, 10849, 444, 1092, 3350, 10232, 2580, 5349, 4188, 7311, 10342, 1522, 10386, 10930, 9943, 11169, 8538, 9042, 3971, 1131, 6103, 64, 11450, 1590, 2582, 8011, 8078, 11232, 6368, 8687, 10737, 11129, 4454, 4976, 11574, 6877, 10271, 5333, 7470, 769, 3552, 8736, 2222, 8122, 8351, 5925, 8926, 9332, 9002, 12176, 9354, 1417, 5810, 3329, 6859, 10891, 7190, 9048, 11957, 512, 5577, 431, 8367, 2643, 3179, 3833, 1788, 8051, 12162, 3009, 11054, 2941, 6569, 5860, 8434, 5797, 10604, 6152, 3838, 8443, 5487, 3531, 5363, 10533, 9963, 922, 10571, 11385, 1098, 11336, 9613, 2054, 5716, 1105, 8364, 10939, 9633, 4096, 7749, 3448, 5491, 8855, 854, 6086, 2015, 2963, 11273, 11783, 2409, 11239, 3396, 10013, 6027, 9509, 11098, 60, 6126, 6099, 7029, 3670, 6037, 10530, 5970, 7376, 10834, 5057, 8784, 4665, 3170, 4143, 8861, 8840, 5467, 1489, 3330, 8190, 547, 3006, 7061, 9395, 6832, 11821, 3831, 11415, 4161, 8241, 6983, 3889, 2590, 6370, 11349, 2338, 2761, 480, 12141, 11925, 7076, 4782, 11429, 10506, 10893, 9852, 649, 3589, 8827, 453, 782, 8566, 9443, 9275, 6869, 11912, 2062, 4075, 4376, 11759, 7332, 1426, 5500, 8545, 6070, 5297, 8710, 4483, 6708, 6534, 8431, 1804, 4769, 6415, 9799, 3840, 11105, 9377, 7452, 1389, 5409, 10314, 1121, 5082, 5192, 4134, 9171, 3624, 6256, 7083, 1810, 466, 5796, 9273, 4207, 8022, 10430, 8049, 9500, 11408, 7133, 6915, 11693, 5509, 8235, 11286, 4508, 3116, 6003, 2143, 1285, 2164, 4658, 6142, 2817, 1282, 10460, 11112, 6405, 8778, 8968, 3789, 4669, 8494, 11923, 4414, 892, 7508, 2191, 3728, 9501, 450, 9078, 2731, 9706, 2947, 2266, 5241, 7908, 6164, 7521, 7205, 4435, 4265, 11486, 350, 11157, 4855, 10280, 5023, 397, 12269, 10247, 10256, 9946, 2873, 2084, 8779, 10299, 5734, 485, 6507, 9361, 10734, 7136, 10908, 5239, 5246, 2274, 3600, 11179, 9559, 3914, 11287, 5839, 5061, 1819, 156, 11012, 8484, 10902, 9542, 5865, 2800, 3233, 1973, 8506, 3317, 3176, 12129, 8242, 8314, 5834, 10695, 4383, 8787, 8658, 9005, 3880, 2900, 1154, 12138, 7932, 1241, 5045, 5101, 5903, 4222, 3409, 2738, 6734, 4273, 9845, 3621, 2263, 1248, 2073, 6427, 1193, 2602, 10053, 10111, 1286, 3495, 6603, 1958, 830, 11009, 4491, 5067, 9805, 11826, 10486, 8851, 7819, 10595, 6462, 10911, 9232, 11081, 2011, 9928, 3493, 3941, 10357, 9198, 2694, 9615, 4716, 9606, 5026, 4390, 5815, 9984, 4295, 2260, 9544, 8527, 6690, 7154, 10288, 3382, 3668, 3375, 6640, 2049, 11350, 3669, 4706, 8585, 10154, 9363, 1107, 11026, 2540, 1265, 122, 2625, 3799, 5690, 3366, 6950, 9122, 12139, 9263, 3186, 861, 3114, 3341, 10542, 9653, 6138, 9782, 5791, 2618, 6771, 4364, 8076, 8570, 2478, 4766, 2422, 3964, 4103, 4777, 4774, 781, 7235, 7498, 1170, 8856, 2185, 8031, 10120, 976, 8711, 5814, 8653, 2350, 6444, 11531, 11089, 370, 910, 6888, 334, 2150, 10602, 3490, 12237, 4522, 9461, 8655, 5012, 10334, 3163, 7115, 7535, 1261, 7087, 7134, 8246, 1349, 1325, 6248, 8724, 10828, 9360, 9403, 5191, 2803, 7226, 7808, 8243, 9645, 7779, 6511, 2396, 6225, 2689, 2960, 7280, 5948, 2672, 4911, 11082, 3342, 11873, 11598, 1954, 7795, 3229, 8938, 726, 7764, 11124, 10088, 7540, 7916, 4523, 10792, 10600, 828, 8347, 601, 1146, 1490, 4661, 10135, 8652, 1019, 4499, 3426, 787, 2932, 6879, 644, 9223, 11391, 9084, 10717, 9087, 2421, 2633, 2158, 8961, 6761, 3343, 915, 1254, 10059, 5808, 667, 2969, 6970, 11164, 1883, 11606, 313, 11066, 6624, 5331, 4808, 9168, 11920, 421, 7346, 7771, 8152, 11414, 2830, 6296, 11167, 5876, 5152, 50, 5105, 11227, 12002, 11251, 7079, 8775, 4975, 10243, 4932, 2166, 7320, 10032, 6738, 9597, 5336, 11463, 6604, 3289, 2775, 6825, 2504, 2505, 3836, 5781, 1597, 11899, 9337, 3368, 9612, 723, 3771, 5289, 10351, 1212, 3313, 10141, 4349, 400, 3973, 3793, 9993, 3985, 7476, 8755, 2933, 8210, 2589, 5039, 9404, 6522, 4748, 3042, 5821, 5681, 3676, 1734, 9911, 5444, 7743, 7751, 6110, 9381, 487, 9169, 962, 2366, 3162, 5784, 5590, 5445, 9074, 9696, 1926, 7394, 10214, 3200, 7206, 5766, 6210, 7302, 10652, 8595, 11175, 4235, 8423, 3445, 1498, 3020, 1117, 12047, 9701, 8581, 4830, 1583, 5554, 6685, 499, 563, 12013, 1314, 3896, 11907, 7696, 6639, 718, 9405, 7853, 6693, 11147, 3834, 3119, 9996, 7978, 1022, 8492, 9261, 524, 9260, 11482, 7315, 3377, 9302, 5939, 2982, 11984, 11871, 8936, 10353, 3874, 7203, 1773, 375, 7565, 4324, 3992, 4504, 10081, 10512, 6590, 9233, 123, 3956, 5744, 1506, 1379, 4388, 3153, 6094, 374, 6234, 2379, 8176, 6491, 354, 4192, 346, 5833, 9364, 2438, 682, 10645, 11567, 9849, 8945, 10043, 9090, 6414, 8468, 1895, 3000, 11364, 10014, 7358, 11454, 6914, 10362, 3564, 130, 984, 7070, 9085, 12048, 11032, 10526, 646, 11885, 2992, 716, 6743, 3963, 2772, 2832, 8958, 2768, 9797, 1178, 7215, 5456, 11426, 6513, 5058, 10115, 6610, 11275, 2156, 6299, 2871, 11711, 4889, 6378, 9708, 5609, 6156, 9162, 3934, 1040, 7872, 7404, 11235, 10361, 2233, 10474, 5168, 9057, 11647, 5728, 4788, 7126, 9887, 10367, 10219, 9855, 4642, 9424, 8564, 6781, 5385, 2948, 3597, 7186, 3724, 4177, 4959, 1236, 10679, 7665, 2245, 1868, 3930, 8005, 92, 11851, 6894, 8320, 1531, 10076, 3857, 9154, 5575, 10058, 4477, 11011, 7153, 8957, 1437, 7852, 5362, 9202, 8018, 5106, 269, 1658, 7067, 5092, 6213, 11295, 4198, 8332, 5214, 8838, 2805, 9888, 11698, 12164, 5671, 2655, 6862, 2595, 736, 8785, 5996, 5115, 12248, 6874, 6278, 11787, 7733, 6730, 11238, 2065, 8068, 10211, 11496, 1371, 6029, 12171, 2699, 3981, 2152, 975, 7380, 3869, 548, 4337, 9006, 5211, 4845, 9259, 10151, 5370, 7561, 11289, 8501, 8951, 5740, 8471, 5888, 8835, 11101, 4053, 11961, 5836, 1068, 8273, 419, 4684, 3881, 4231, 3099, 7954, 5945, 10968, 11365, 11345, 9303, 7270, 4927, 7800, 9884, 6374, 4384, 10118, 10603, 4821, 1893, 338, 7474, 6093, 11332, 4289, 6563, 10163, 9053, 6323, 10237, 9235, 2785, 7846, 9665, 9821, 8544, 4739, 3352, 605, 6470, 9270, 214, 2187, 10693, 1721, 4897, 4737, 690, 9004, 2549, 955, 5338, 1836, 10494, 7210, 11090, 1701, 2855, 2704, 10636, 11877, 4633, 9734, 3348, 7570, 10979, 1428, 8162, 146, 9991, 1323, 3586, 4834, 6907, 1045, 2238, 4840, 2604, 426, 1712, 5207, 11810, 1479, 2309, 1029, 5520, 10587, 8103, 7640, 5837, 2399, 10218, 8524, 2697, 1319, 10551, 9343, 11354, 8993, 197, 4138, 2206, 11404, 1809, 11424, 3851, 1168, 6194, 10584, 4110, 1805, 6100, 8360, 5615, 1853, 8543, 3408, 1407, 4789, 8457, 11832, 6183, 8232, 7293, 10962, 3379, 11964, 9829, 6903, 8010, 6747, 9287, 10552, 10674, 1010, 4809, 10499, 1576, 8526, 5359, 5209, 2183, 5369, 6230, 9344, 396, 10938, 8302, 2151, 11933, 5435, 8053, 2535, 6899, 2686, 11256, 1445, 6211, 8633, 308, 4411, 9188, 1673, 2454, 9689, 4898, 6068, 2635, 4820, 562, 10682, 11658, 8080, 1605, 10258, 319, 6763, 6005, 4805, 5175, 6085, 684, 1018, 3168, 1481, 4971, 4919, 9441, 6613, 2979, 7991, 6036, 9199, 4025, 11560, 532, 7619, 2464, 10710, 12059, 1095, 7343, 3778, 2317, 11677, 8791, 1693, 4496, 11722, 7241, 3195, 551, 8330, 2552, 4948, 11173, 1573, 4533, 11813, 5472, 8144, 766, 11848, 2901, 2485, 1794, 3748, 11543, 2483, 11421, 12147, 7622, 6457, 4256, 11796, 7423, 11946, 10449, 8760, 9588, 5646, 6247, 7393, 8883, 1255, 11390, 7753, 8772, 982, 4408, 5195, 8127, 2717, 3361, 295, 11686, 8481, 6909, 3707, 6128, 8761, 10919, 7591, 2063, 5406, 6321, 7575, 5345, 11153, 11820, 2500, 9470, 8345, 10228, 9545, 9858, 8635, 2970, 8301, 820, 9988, 9619, 10040, 5097, 579, 8731, 7856, 10686, 4693, 3571, 9447, 2310, 2360, 7465, 6403, 6116, 5078, 12157, 8643, 1329, 11572, 4215, 6381, 1412, 11444, 5893, 3201, 8537, 7711, 2026, 5315, 8090, 2626, 5130, 7635, 11471, 4963, 6560, 6170, 3218, 6586, 3909, 4632, 8403, 1403, 11754, 677, 3990, 1842, 6191, 6591, 10564, 2068, 12061, 3757, 11233, 7699, 10632, 6553, 9142, 1892, 11296, 5529, 10277, 1030, 6851, 243, 3919, 5653, 3275, 8719, 4173, 11924, 5745, 2837, 3324, 204, 1166, 3532, 6694, 189, 5779, 11224, 8009, 5416, 7342, 2447, 372, 3572, 10778, 4255, 10465, 5478, 3841, 147, 11322, 3268, 11691, 2847, 4345, 7365, 8482, 8240, 5652, 1944, 6774, 8357, 1622, 8307, 8806, 9369, 9093, 10407, 2014, 1632, 9328, 3678, 4396, 1512, 9365, 3769, 2627, 6461, 9580, 7287, 2976, 3998, 201, 9462, 9986, 6957, 6150, 1176, 4553, 1566, 7505, 10487, 10182, 9764, 6411, 4475, 8349, 3263, 5036, 5411, 687, 5011, 9003, 1218, 11299, 9522, 3823, 767, 890, 4846, 10590, 12096, 1186, 5574, 8727, 2532, 2906, 9140, 11519, 7406, 1608, 1962, 6154, 6500, 44, 9408, 11846, 239, 10884, 10162, 7722, 4378, 2132, 11222, 5347, 1526, 3421, 6421, 5496, 3221, 10579, 9744, 4369, 2442, 6006, 6136, 7120, 1901, 10986, 10745, 9488, 7725, 8371, 7967, 10959, 11675, 6129, 10092, 575, 3407, 76, 2844, 352, 1530, 8745, 1912, 1049, 7562, 331, 10446, 4767, 3753, 5909, 12208, 2790, 2212, 7101, 1190, 10898, 4218, 10374, 7247, 11181, 12221, 7804, 2919, 1865, 12226, 2170, 355, 5523, 2291, 1649, 7377, 12165, 7002, 4600, 2678, 608, 10463, 2816, 12240, 8515, 3007, 8392, 11340, 2648, 9834, 1269, 5446, 10405, 11641, 10031, 5407, 7652, 9520, 1161, 9166, 9258, 8820, 3425, 11745, 987, 11063, 2631, 11785, 5071, 2840, 7317, 6039, 903, 9860, 11297, 6860, 12222, 9135, 4864, 9970, 10239, 11897, 6675, 11767, 5691, 4697, 8895, 4938, 10152, 6701, 9506, 7105, 6514, 6389, 12060, 2426, 9288, 11883, 330, 9115, 2822, 7937, 7896, 2481, 8759, 8257, 3701, 10431, 9380, 11445, 7224, 5146, 4353, 5724, 11753, 11635, 2045, 6026, 8178, 9153, 4244, 8113, 8661, 709, 9715, 2637, 7482, 4452, 2314, 7684, 2956, 1956, 10457, 7119, 570, 9041, 2640, 11475, 10287, 2051, 1723, 7559, 8627, 4611, 5030, 9714, 1306, 5537, 8636, 4301, 10246, 8925, 8001, 7057, 4071, 11341, 3979, 11779, 9374, 3459, 7843, 5672, 3986, 8807, 10700, 11038, 6223, 27, 11359, 3359, 9922, 7796, 4560, 10883, 8831, 5777, 8562, 4119, 1495, 11316, 7571, 21, 3373, 3978, 10448, 7429, 7643, 9830, 8234, 9955, 2563, 7300, 7990, 4705, 7254, 8209, 1258, 3094, 1299, 8509, 7310, 9011, 11866, 2281, 628, 216, 4849, 2294, 5642, 923, 11902, 1041, 9203, 9349, 7051, 8374, 11960, 4505, 11412, 168, 2406, 7246, 9850, 10276, 11988, 4906, 4427, 5906, 8215, 9244, 2475, 773, 8876, 4227, 10064, 174, 10392, 6627, 9324, 10643, 8905, 5959, 5024, 1728, 1925, 6063, 8269, 7384, 9193, 8328, 12179, 1058, 7252, 5547, 9657, 11462, 5273, 1344, 6959, 8812, 5066, 8474, 9881, 2381, 10838, 10381, 4275, 218, 7511, 6184, 9563, 9238, 6778, 1392, 9402, 3860, 858, 11410, 9795, 10805, 3325, 1535, 3111, 11637, 4707, 9916, 12099, 5179, 11409, 8464, 8860, 7509, 3522, 5673, 5317, 10752, 6516, 9051, 3661, 6347, 5314, 6759, 681, 9314, 9622, 1744, 10932, 316, 2770, 170, 5068, 11136, 1482, 6302, 6864, 5257, 4626, 417, 2022, 12280, 310, 7073, 789, 5594, 10769, 4565, 5249, 6267, 9435, 10916, 3598, 8517, 5669, 12282, 2972, 10963, 4710, 1620, 5645, 4916, 5448, 778, 3242, 1663, 1433, 2528, 9871, 1360, 3677, 3065, 11856, 1260, 5756, 5189, 141, 3336, 3887, 12217, 2480, 7428, 6312, 7885, 129, 11942, 5125, 980, 1746, 1305, 4206, 6691, 8485, 12233, 11487, 1681, 813, 671, 8293, 2461, 6717, 6224, 1358, 1015, 11464, 7935, 5234, 10880, 4838, 12231, 8825, 10080, 9181, 4645, 1128, 2110, 6518, 11713, 7551, 10268, 1340, 1635, 1032, 9513, 4133, 7840, 1679, 10440, 9070, 4372, 6435, 11841, 5873, 1159, 6504, 5368, 4899, 7399, 4580, 636, 10864, 8120, 5689, 2035, 5005, 1017, 1837, 11825, 9155, 6906, 12003, 293, 9024, 4591, 2988, 7681, 11252, 8410, 10720, 791, 8256, 2370, 8486, 1275, 1143, 9786, 11115, 10398, 2324, 8705, 10117, 9272, 2876, 6077, 2325, 10036, 12062, 5088, 889, 3515, 8645, 3991, 3173, 8136, 2407, 8577, 11795, 6092, 10001, 2344, 10747, 12150, 11615, 3, 3993, 5835, 12026, 6328, 4603, 6671, 6443, 10200, 9144, 4554, 2897, 9450, 6303, 8195, 7202, 442, 10719, 11749, 6311, 6554, 10473, 3837, 7112, 3542, 7715, 7350, 806, 3643, 6967, 7171, 8337, 11869, 6274, 6463, 12242, 11177, 6897, 24, 7366, 9813, 10185, 1468, 12246, 4212, 2388, 7866, 11707, 11854, 10887, 1866, 1268, 4115, 8460, 3536, 12018, 7969, 1332, 3276, 10050, 6118, 7740, 3758, 275, 9644, 6448, 4566, 6580, 8212, 5251, 8929, 1036, 2548, 11913, 3393, 6020, 192, 9772, 4770, 7746, 11744, 11945, 9118, 6815, 1483, 7633, 8809, 1073, 2639, 10144, 8342, 6235, 3710, 10121, 2307, 10656, 1630, 6666, 12077, 475, 5486, 2200, 3418, 2428, 11950, 3484, 4251, 5141, 9987, 8288, 8095, 9281, 2566, 11293, 1536, 4442, 1293, 523, 7929, 9537, 11499, 5364, 11864, 11908, 9027, 8584, 8823, 7418, 5291, 724, 5102, 7234, 6167, 11514, 751, 4172, 10593, 3800, 7021, 5311, 2766, 7135, 9577, 3294, 9430, 4261, 6162, 4859, 3315, 514, 8239, 4321, + }; + const int p = 12289; + int dst[4096]; + ntt(arr, l, twiddle, p, dst); + + // for (int i = 0; i < n; i++) { + // printf("%d", dst[i]); + // if ((i + 1) % 8 == 0) { + // printf("\n"); + // } else { + // printf(" "); + // } + // } +} diff --git a/tests/eval/_ntt/ntt_512_main.c b/tests/eval/_ntt/ntt_512_main.c new file mode 100644 index 000000000..9e1f20edd --- /dev/null +++ b/tests/eval/_ntt/ntt_512_main.c @@ -0,0 +1,105 @@ +// requires VLEN >= 2048 + +#include + +void ntt(const int *array, int l, const int *twiddle, int p, int *dst); + +void test() { + const int l = 9; + const int n = 512; + static const int arr[512] = { + 9997, 6362, 7134, 11711, 5849, 9491, 5972, 4164, 5894, 11069, + 7697, 8319, 2077, 12086, 10239, 5394, 4898, 1370, 1205, 2997, + 5274, 4625, 11983, 1789, 3645, 7666, 12128, 10883, 7376, 8883, + 2321, 1889, 2026, 8059, 2741, 865, 1785, 9955, 2395, 9330, + 11465, 7383, 9649, 11285, 3647, 578, 1158, 9936, 12019, 11114, + 7894, 4832, 10148, 10363, 11388, 9122, 10758, 2642, 4171, 10586, + 1194, 5280, 3055, 9220, 10577, 9046, 1284, 7915, 10213, 6902, + 3777, 9896, 429, 7730, 7429, 8666, 10887, 11255, 2437, 7782, + 1327, 7010, 4009, 1038, 9466, 5352, 1473, 10067, 11753, 2019, + 8472, 7665, 2679, 5070, 2248, 3044, 10301, 10671, 2092, 1069, + 9032, 9131, 11715, 6662, 3423, 10027, 5436, 4259, 999, 3316, + 11164, 5597, 6578, 800, 8242, 6952, 2288, 1481, 6770, 11948, + 8938, 10813, 11107, 1362, 4510, 9388, 8840, 10557, 6206, 7808, + 7131, 1394, 2604, 1509, 689, 5222, 8867, 9934, 7165, 6099, + 3229, 1263, 4414, 12212, 4963, 9236, 9040, 6062, 11163, 8169, + 4575, 6097, 3006, 1, 1384, 12039, 5445, 11355, 12197, 9182, + 10085, 9295, 8890, 10651, 1540, 9061, 10222, 2524, 2213, 6974, + 2066, 7348, 7444, 173, 7529, 3884, 3531, 4312, 640, 5352, + 5880, 3985, 781, 10165, 1106, 8114, 6043, 8202, 10617, 3060, + 11173, 11521, 6933, 9540, 11782, 2284, 6462, 3740, 2581, 126, + 508, 12165, 4956, 8045, 9379, 5250, 8148, 6539, 4891, 11252, + 5041, 9969, 8524, 9892, 4058, 10580, 10025, 9748, 8829, 4438, + 468, 4773, 1657, 1348, 10055, 7192, 9556, 5919, 5690, 6153, + 6270, 4938, 6206, 1003, 596, 11173, 9858, 4825, 7940, 794, + 7477, 10146, 7203, 4729, 5741, 4603, 1806, 7034, 8772, 10435, + 10777, 1359, 630, 11059, 8005, 225, 10355, 9226, 4449, 11236, + 680, 8615, 6828, 5502, 10082, 5491, 4346, 7831, 5429, 1253, + 6662, 9415, 584, 9362, 8452, 1937, 3271, 6852, 6573, 7706, + 1229, 8535, 3786, 6441, 7230, 533, 5778, 6436, 11728, 7896, + 785, 7591, 9061, 6149, 10403, 9079, 10837, 9776, 7850, 7870, + 5008, 5319, 541, 315, 9973, 5055, 7111, 8399, 614, 10495, + 9441, 10946, 449, 6965, 7980, 11475, 9321, 2256, 8998, 4321, + 11269, 4744, 5021, 11981, 7947, 7695, 4000, 1140, 2895, 3419, + 159, 5370, 10899, 3288, 12007, 8894, 7923, 7366, 11534, 5214, + 10461, 11199, 10965, 3739, 5507, 8882, 10725, 9649, 1144, 9153, + 5573, 878, 11115, 5677, 5970, 7221, 8614, 4703, 9394, 11660, + 8423, 6621, 11112, 10945, 527, 5019, 5396, 10049, 6770, 3406, + 2967, 3890, 2441, 4682, 6026, 617, 7316, 2627, 4456, 8925, + 2388, 11354, 4554, 10543, 2610, 10688, 1150, 2556, 4278, 431, + 9260, 3545, 12215, 631, 4407, 8145, 1403, 8523, 1982, 12073, + 950, 7671, 31, 1299, 9003, 11690, 5637, 6761, 5235, 5722, + 11858, 2210, 7870, 11608, 8884, 8550, 4776, 4998, 4270, 8850, + 12111, 240, 5674, 3845, 5057, 1608, 48, 2760, 8612, 278, + 5633, 9505, 3730, 1971, 8637, 8659, 894, 8594, 4221, 6783, + 5664, 9506, 2811, 11058, 4475, 2912, 2289, 2136, 7899, 6065, + 5259, 2230, 6793, 4280, 3140, 1721, 8333, 11216, 5383, 7139, + 10711, 1017, 2001, 10911, 1750, 162, 11775, 10575, 1646, 8322, + 175, 10156, 3635, 4893, 2207, 3234, 4380, 1900, 5493, 3082, + 10058, 9948, 10752, 7044, 10073, 11210, 8362, 9268, 8694, 1438, + 761, 10180, 6570, 6349, 9028, 10495, 4756, 9332, 8348, 4995, + 6933, 4351, 111, 1610, 7410, 960, 11972, 2853, 3551, 1423, + 2634, 3972}; + // const int twiddle[9] = {3400, 8340, 12149, 7311, + // 5860, 4134, 8246, 1479, 12288}; + static const int twiddle[] = { + // layer #0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + // layer #1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + + // layer #2 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, + + // layer #3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, + + // layer #4 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, + + // layer #5 + 1, 1, 1, 1, 1, 1, 1, 1, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 7311, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 5860, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 3006, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 4134, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 5023, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 3621, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 8961, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 563, 563, 563, 563, 563, 563, 563, 563, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 11567, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 5728, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 8785, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 4821, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 10938, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 3195, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 9545, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6553, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 6461, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 9744, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 11340, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 5777, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 10643, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 9314, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 4591, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 3542, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, + + // layer #6 + 1, 1, 1, 1, 12149, 12149, 12149, 12149, 7311, 7311, 7311, 7311, 8736, 8736, 8736, 8736, 5860, 5860, 5860, 5860, 2963, 2963, 2963, 2963, 3006, 3006, 3006, 3006, 9275, 9275, 9275, 9275, 4134, 4134, 4134, 4134, 11112, 11112, 11112, 11112, 5023, 5023, 5023, 5023, 9542, 9542, 9542, 9542, 3621, 3621, 3621, 3621, 9198, 9198, 9198, 9198, 2625, 2625, 2625, 2625, 1170, 1170, 1170, 1170, 8246, 8246, 8246, 8246, 726, 726, 726, 726, 8961, 8961, 8961, 8961, 11227, 11227, 11227, 11227, 1212, 1212, 1212, 1212, 2366, 2366, 2366, 2366, 563, 563, 563, 563, 7203, 7203, 7203, 7203, 11567, 11567, 11567, 11567, 2768, 2768, 2768, 2768, 5728, 5728, 5728, 5728, 9154, 9154, 9154, 9154, 8785, 8785, 8785, 8785, 11289, 11289, 11289, 11289, 4821, 4821, 4821, 4821, 955, 955, 955, 955, 1479, 1479, 1479, 1479, 1853, 1853, 1853, 1853, 10938, 10938, 10938, 10938, 4805, 4805, 4805, 4805, 3195, 3195, 3195, 3195, 7393, 7393, 7393, 7393, 9545, 9545, 9545, 9545, 3201, 3201, 3201, 3201, 6553, 6553, 6553, 6553, 4255, 4255, 4255, 4255, 6461, 6461, 6461, 6461, 4846, 4846, 4846, 4846, 9744, 9744, 9744, 9744, 12208, 12208, 12208, 12208, 11340, 11340, 11340, 11340, 9970, 9970, 9970, 9970, 5146, 5146, 5146, 5146, 4611, 4611, 4611, 4611, 5777, 5777, 5777, 5777, 2294, 2294, 2294, 2294, 10643, 10643, 10643, 10643, 9238, 9238, 9238, 9238, 9314, 9314, 9314, 9314, 10963, 10963, 10963, 10963, 1305, 1305, 1305, 1305, 1635, 1635, 1635, 1635, 4591, 4591, 4591, 4591, 8577, 8577, 8577, 8577, 3542, 3542, 3542, 3542, 7969, 7969, 7969, 7969, 2639, 2639, 2639, 2639, 11499, 11499, 11499, 11499, + + // layer #7 + 1, 1, 8340, 8340, 12149, 12149, 12144, 12144, 7311, 7311, 8011, 8011, 8736, 8736, 9048, 9048, 5860, 5860, 11336, 11336, 2963, 2963, 10530, 10530, 3006, 3006, 480, 480, 9275, 9275, 6534, 6534, 4134, 4134, 6915, 6915, 11112, 11112, 2731, 2731, 5023, 5023, 10908, 10908, 9542, 9542, 9005, 9005, 3621, 3621, 5067, 5067, 9198, 9198, 3382, 3382, 2625, 2625, 5791, 5791, 1170, 1170, 334, 334, 8246, 8246, 2396, 2396, 726, 726, 8652, 8652, 8961, 8961, 5331, 5331, 11227, 11227, 3289, 3289, 1212, 1212, 6522, 6522, 2366, 2366, 8595, 8595, 563, 563, 1022, 1022, 7203, 7203, 4388, 4388, 11567, 11567, 130, 130, 2768, 2768, 6378, 6378, 5728, 5728, 4177, 4177, 9154, 9154, 5092, 5092, 8785, 8785, 12171, 12171, 11289, 11289, 4231, 4231, 4821, 4821, 9821, 9821, 955, 955, 1428, 1428, 1479, 1479, 8993, 8993, 1853, 1853, 6747, 6747, 10938, 10938, 1673, 1673, 4805, 4805, 11560, 11560, 3195, 3195, 3748, 3748, 7393, 7393, 3707, 3707, 9545, 9545, 9447, 9447, 3201, 3201, 4632, 4632, 6553, 6553, 2837, 2837, 4255, 4255, 8357, 8357, 6461, 6461, 9764, 9764, 4846, 4846, 9408, 9408, 9744, 9744, 10092, 10092, 12208, 12208, 355, 355, 11340, 11340, 11745, 11745, 9970, 9970, 2426, 2426, 5146, 5146, 4452, 4452, 4611, 4611, 3459, 3459, 5777, 5777, 7300, 7300, 2294, 2294, 10276, 10276, 10643, 10643, 11462, 11462, 9238, 9238, 5179, 5179, 9314, 9314, 12280, 12280, 10963, 10963, 1260, 1260, 1305, 1305, 7935, 7935, 1635, 1635, 7399, 7399, 4591, 4591, 8705, 8705, 8577, 8577, 10200, 10200, 3542, 3542, 9813, 9813, 7969, 7969, 2548, 2548, 2639, 2639, 11950, 11950, 11499, 11499, 10593, 10593, + + // layer #8 + 1, 3400, 8340, 5277, 12149, 3271, 12144, 10849, 7311, 9042, 8011, 4976, 8736, 12176, 9048, 3833, 5860, 3531, 11336, 4096, 2963, 9509, 10530, 4143, 3006, 8241, 480, 9852, 9275, 1426, 6534, 9377, 4134, 9273, 6915, 2143, 11112, 4414, 2731, 7205, 5023, 8779, 10908, 11287, 9542, 12129, 9005, 5101, 3621, 10111, 5067, 10911, 9198, 9984, 3382, 8585, 2625, 3186, 5791, 2422, 1170, 8653, 334, 5012, 8246, 5191, 2396, 11082, 726, 10600, 8652, 9223, 8961, 2969, 5331, 11414, 11227, 2166, 3289, 11899, 1212, 3985, 6522, 5444, 2366, 7394, 8595, 12047, 563, 9405, 1022, 9302, 7203, 10512, 4388, 354, 11567, 3000, 130, 11885, 2768, 10115, 6378, 7404, 5728, 9424, 4177, 8005, 9154, 7852, 5092, 9888, 8785, 6730, 12171, 4337, 11289, 4053, 4231, 7270, 4821, 10163, 9821, 2187, 955, 2704, 1428, 1045, 1479, 2399, 8993, 1168, 1853, 8232, 6747, 8526, 10938, 2686, 1673, 10682, 4805, 4919, 11560, 3778, 3195, 11813, 3748, 11796, 7393, 5195, 3707, 7575, 9545, 10040, 9447, 8643, 3201, 7635, 4632, 6591, 6553, 243, 2837, 11224, 4255, 2847, 8357, 1632, 6461, 6957, 9764, 5011, 4846, 9140, 9408, 11222, 9744, 10745, 10092, 1912, 12208, 7247, 355, 2678, 11340, 5407, 11745, 6039, 9970, 4938, 2426, 2481, 5146, 9153, 4452, 9041, 4611, 8925, 3459, 27, 5777, 3978, 7300, 8509, 2294, 8374, 10276, 773, 10643, 7384, 11462, 2381, 9238, 10805, 5179, 10752, 9314, 11136, 12280, 6267, 10963, 1663, 1260, 7428, 1305, 671, 7935, 4645, 1635, 4372, 7399, 1017, 4591, 2370, 8705, 5088, 8577, 3, 10200, 442, 3542, 11869, 9813, 11854, 7969, 9644, 2548, 11744, 2639, 1630, 11950, 2566, 11499, 5291, 10593, 9430, + }; + const int p = 12289; + int dst[512]; + ntt(arr, l, twiddle, p, dst); + + // for (int i = 0; i < n; i++) { + // printf("%d", dst[i]); + // if ((i + 1) % 8 == 0) { + // printf("\n"); + // } else { + // printf(" "); + // } + // } +} diff --git a/tests/eval/_ntt/ntt_64_main.c b/tests/eval/_ntt/ntt_64_main.c new file mode 100644 index 000000000..9782817a6 --- /dev/null +++ b/tests/eval/_ntt/ntt_64_main.c @@ -0,0 +1,68 @@ +// requires VLEN >= 512 + +#include +#include +// #define DEBUG + +void ntt(const int *array, int l, const int *twiddle, int p, int *dst); + +void test() { + const int l = 6; + const int n = 64; + static const int arr[64] = { + 9997, 6362, 7134, 11711, 5849, 9491, 5972, 4164, 5894, 11069, + 7697, 8319, 2077, 12086, 10239, 5394, 4898, 1370, 1205, 2997, + 5274, 4625, 11983, 1789, 3645, 7666, 12128, 10883, 7376, 8883, + 2321, 1889, 2026, 8059, 2741, 865, 1785, 9955, 2395, 9330, + 11465, 7383, 9649, 11285, 3647, 578, 1158, 9936, 12019, 11114, + 7894, 4832, 10148, 10363, 11388, 9122, 10758, 2642, 4171, 10586, + 1194, 5280, 3055, 9220}; + // const int twiddle[6] = {7311, 5860, 4134, 8246, 1479, 12288}; + static const int twiddle[] = { + // layer #0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + // layer #1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, + + // layer #2 + 1, 1, 1, 1, 1, 1, 1, 1, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 8246, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 5146, 5146, 5146, 5146, 5146, 5146, 5146, 5146, + + // layer #3 + 1, 1, 1, 1, 4134, 4134, 4134, 4134, 8246, 8246, 8246, 8246, 11567, 11567, 11567, 11567, 1479, 1479, 1479, 1479, 6553, 6553, 6553, 6553, 5146, 5146, 5146, 5146, 1305, 1305, 1305, 1305, + + // layer #4 + 1, 1, 5860, 5860, 4134, 4134, 3621, 3621, 8246, 8246, 1212, 1212, 11567, 11567, 8785, 8785, 1479, 1479, 3195, 3195, 6553, 6553, 9744, 9744, 5146, 5146, 10643, 10643, 1305, 1305, 3542, 3542, + + // layer #5 + 1, 7311, 5860, 3006, 4134, 5023, 3621, 2625, 8246, 8961, 1212, 563, 11567, 5728, 8785, 4821, 1479, 10938, 3195, 9545, 6553, 6461, 9744, 11340, 5146, 5777, 10643, 9314, 1305, 4591, 3542, 2639, + + }; + const int p = 12289; + int dst[64]; + ntt(arr, l, twiddle, p, dst); + +#ifdef DEBUG + const int gold[64] = { + 10604, 5675, 6810, 7140, 1904, 9720, 6400, 10542, 3966, 4691, 10317, 3405, 8021, 4907, 2423, 4615, 10421, 312, 11656, 1583, 2465, 10550, 1846, 10270, 8157, 9464, 9661, 11992, 11334, 10446, 11934, 10487, 6801, 8418, 6663, 6332, 10968, 1319, 9237, 6893, 3514, 8723, 3764, 6500, 1933, 2383, 5885, 2866, 8001, 8606, 2074, 5181, 11232, 6811, 4379, 8587, 4037, 4716, 9113, 2527, 3301, 1641, 3869, 8614 + }; + for (int i = 0; i < n; i++) { + // dst[i] = dst[i] % p; + if(dst[i] < 0) dst[i] += p; + if(dst[i] != gold[i]) { + printf("(%d %d, i)", dst[i], gold[i], i); + if ((i + 1) % 8 == 0) { + printf("\n"); + } else { + printf(" "); + } + } + } +#endif +} + +#ifdef DEBUG +int main(void) { + test(); +} +#endif diff --git a/tests/eval/_ntt/ntt_mem.c b/tests/eval/_ntt/ntt_mem.c new file mode 100644 index 000000000..66034266b --- /dev/null +++ b/tests/eval/_ntt/ntt_mem.c @@ -0,0 +1,57 @@ +#include +#include +#include + +int math_mod(int num, int p) { + return num % p; +} + +// array is of length n=2^l, p is a prime number +// roots is of length l, where g = roots[0] satisfies that +// g^(2^l) == 1 mod p and g^(2^(l-1)) == -1 mod p +// roots[i] = g^(2^i) (hence roots[l - 1] = -1) +void ntt(const int *array, int l, const int *twiddle, int p, int *dst) { + // prepare an array of permutation indices + assert(l <= 16); + + int n = 1 << l; + + // permutate the array to dst + // first abuse dst to store permutation inde + // i.e. buf[i] = reversed binary representation of i + dst[0] = 0; + for (int i = 1; i < n; ++i) { + dst[i] = dst[i >> 1] >> 1; + if (i & 1) { + dst[i] |= n >> 1; + } + } + + // then perform the permutation + for (int i = 0; i < n; ++i) { + int i_rev = dst[i]; + if (i >= i_rev) { + dst[i] = array[i_rev]; + dst[i_rev] = array[i]; + } + } + + // perform butterfly operations + int w_m_index = l - 1; + for (int m = 2; m <= n; m <<= 1) { // totally l stages + int w_m = twiddle[w_m_index]; + w_m_index -= 1; + int w = 1; + for (int j = 0; j < m/2; j++) { + for (int k = 0; k < n; k += m) { + int index_u = k + j; + int index_t = k + j + (m >> 1); + int t = math_mod(w * dst[index_t], p); + int u = dst[index_u]; + dst[index_u] = math_mod(u + t, p); + dst[index_t] = math_mod(u - t, p); + } + w = math_mod(w * w_m, p); + } + } +} diff --git a/tests/eval/_ntt/ref.ws b/tests/eval/_ntt/ref.ws new file mode 100755 index 000000000..22bcdf241 --- /dev/null +++ b/tests/eval/_ntt/ref.ws @@ -0,0 +1,27 @@ +#!/usr/bin/env -S wolframscript -file + +On[Assert]; +x = { + 9997, 6362, 7134, 11711, 5849, 9491, 5972, 4164, 5894, 11069, 7697, + 8319, 2077, 12086, 10239, 5394, 4898, 1370, 1205, 2997, 5274, + 4625, 11983, 1789, 3645, 7666, 12128, 10883, 7376, 8883, 2321, + 1889, 2026, 8059, 2741, 865, 1785, 9955, 2395, 9330, 11465, 7383, + 9649, 11285, 3647, 578, 1158, 9936, 12019, 11114, 7894, 4832, + 10148, 10363, 11388, 9122, 10758, 2642, 4171, 10586, 1194, 5280, + 3055, 9220 + }; (* the input array *) +n = 64; (* the array length *) +p = 12289; (* a prime number s.t. n | p - 1 *) +g = 7311; (* an n-th root of p *) + +Assert[Length[x] == n]; +Assert[PowerMod[g, n, p] == 1 && PowerMod[g, n/2, p] != 1 ]; (* g is an n-th root of p *) + +(* note that a wolfram array is indexed from 1, so plus one from the index *) + +Table[Mod[ + Sum[ + x[[j + 1]] g^(i j), + {j, 0, n - 1} + ], p +], {i, 0, n - 1}] // Print diff --git a/tests/eval/default.nix b/tests/eval/default.nix index 276f1a15e..ce8851422 100644 --- a/tests/eval/default.nix +++ b/tests/eval/default.nix @@ -4,6 +4,7 @@ , findAndBuild , t1main , getTestRequiredFeatures +, callPackage }: let @@ -30,5 +31,8 @@ let meta.description = "test case '${caseName}', written in C assembly"; }; + autoCases = findAndBuild ./. build; + + nttCases = callPackage ./_ntt { }; in - findAndBuild ./. build + autoCases // nttCases