UNPKG

@howerj/subleq

Version:

An n-bit SUBLEQ virtual machine with test programs.

784 lines (764 loc) 40.3 kB
/* N-Bit SUBLEQ <https://github.com/howerj/subleq-nodejs> by Richard James Howe */ module.exports = class subleq { constructor(options) { options = options || {}; this.debug = !!options.debug; this.width = options.width || 16; this.putch = options.putch || function (ch) { }; this.getch = options.getch || function () { return -1; } this.timeout_ms = options.timeout_ms || 0; if (isNaN(this.width) || this.width < 8 || this.width > 32) { throw "Machine width invalid (should be 8-32 bits inclusive)"; } this.running = true; this.pc = 0; this.cyclesTotal = 0; this.stopRunningOnEndOfInput = false; this.size = 3; this.evalString = ""; this.m = new Uint32Array(this.size); for (var i = 0; i < this.size; i++) this.m[i] = 0; var m = this.m; m[0] = 0; m[1] = 0; m[2] = -1; /* default program halts */ } get pc() { return this._pc; } set pc(x) { this._pc = x; } set getch(fn) { this._getch = fn; } get getch() { return this._getch; } set putch(fn) { this._putch = fn; } get putch() { return this._putch; } stop() { this.running = 0; } start() { this.running = 1; } reset() { this.pc = 0; this.cyclesTotal = 0; this.evalString = ""; } eval(s, append = "\n") { var oGetch = this.getch; if (s === null) return; this.evalString = s + append; function eGetch () { if (this.evalString.length == 0) this.getch = oGetch; var r = this.evalString.charCodeAt(0); this.evalString = this.evalString.substring(1); return r; } this.getch = eGetch; while (this.evalString.length > 0) { this.step(); } } load(arr, length = 32768, run = false) { this.reset(); function msk(n) { return n < 32 ? (1 << n) - 1: 0xFFFFFFFF; } if (length < arr.length) length = arr.length; if (this.size < length) { this.size = length; this.m = new Uint32Array(this.size); } for (var i = 0; i < length; i++) if (i < arr.length) this.m[i] = arr[i] & msk(this.width); else this.m[i] = 0; return run ? this.run() : null; } loadFromString(str, run = false) { var arr = str.split(/[ \t\n\r]+/); for (var i = 0; i < arr.length; i++) arr[i] = parseInt(arr[i]); this.load(arr); return run ? this.run() : null; } run(cycles = 0) { /* The ISA of the future! */ var pc = this.pc, cyclesToRunFor = cycles, forever = cycles === 0, size = this.size, m = this.m, width = this.width; cycles = 0; /* - We should use "function l(addr) { return addr % this.size; }" * to limit memory access and should be used like "a = * m[l(pc+0)];". * - There is quite a slow down from implementing this * N-Bit machine as opposed to a fixed width one, it might * be worth specializing for common SUBLEQ machine widths, * such as 16 and 32 bit. */ function msk(n) { return n < 32 ? (1 << n) - 1: 0xFFFFFFFF; } function hi(n) { return (1 << ((n) - 1)); } while (pc < size && this.running) { if (!forever && cycles > cyclesToRunFor) { this.cyclesTotal += cycles; cycles = 0; this.pc = pc; if (this.timeout_ms === 0) return null; setTimeout(function () { this.run(cyclesToRunFor); }, this.timeout_ms); } pc &= msk(width); let a = m[pc+0]; let b = m[pc+1]; let c = m[pc+2]; if (this.debug) console.log([pc, a, b, c, m[pc+0], m[pc+1]]); if (a === msk(width)) { let ch = this.getch(); if (ch < 0) { this.pc = pc; if (this.stopRunningOnEndOfInput) { this.stop(); } else { if (this.timeout_ms === 0) return null; setTimeout(function () { this.run(cyclesToRunFor); }, this.timeout_ms); } return null; } m[b] = ch & msk(width); pc += 3; } else if (b === msk(width)) { this.putch(m[a] & 255); pc += 3; } else { let d = m[b] - m[a]; d &= msk(width); m[b] = d; pc = (d & hi(width)) || (d === 0) ? c : pc + 3; } cycles++; } this.pc = pc; return null; } step() { var running = this.running; this.running = true; var r = this.run(1); this.running = running; return r; } eforth() { return [ 0,0,163,11,4228,-32768,32767,128,-2,-1,1,2,16,0,0,0, 0,0,0,0,16364,32256,3840,-30598,0,0,0,0,0,0,0,0,66, 16344,16308,15094,16042,7863,0,16344,0,0,47,47,0,0,0, 32384,32384,32512,32512,31,69,114,114,111,114,58,32,78, 111,116,32,97,32,49,54,45,98,105,116,32,83,85,66,76, 69,81,32,86,77,13,10,0,51,15,15,88,84,0,91,0,15,94, 0,0,97,14,14,100,14,14,103,51,0,106,0,14,109,0,0, 112,14,0,118,0,0,124,0,0,121,0,14,160,10,14,127,9, 15,130,145,145,133,15,0,136,0,145,139,0,0,142,18,18, 145,0,0,148,0,18,151,0,0,154,18,-1,157,0,0,112,0,0, -1,15,15,166,6,0,169,0,15,172,0,0,175,15,0,178,0, 15,181,0,0,184,0,15,190,0,0,85,50,50,193,49,0,196, 0,50,199,0,0,202,48,48,205,47,0,208,0,48,211,0,0, 214,45,45,217,37,0,220,0,45,223,0,0,226,14,14,229, 45,0,232,0,14,235,0,0,238,9,45,241,256,256,244,14,0, 247,0,256,250,0,0,253,16,16,256,0,0,259,0,16,262,0, 0,265,14,14,268,16,0,271,0,14,274,0,0,277,4,16,280, 16,0,286,0,0,289,0,0,304,303,303,292,14,0,295,0,303, 298,0,0,301,0,0,304,9,48,307,343,343,310,48,0,313,0, 343,316,0,0,319,344,344,322,48,0,325,0,344,328,0,0, 331,350,350,334,48,0,337,0,350,340,0,0,343,0,0,346, 45,0,349,0,0,352,0,0,355,45,45,358,14,0,361,0,45, 364,0,0,367,0,0,226,0,0,-1,0,0,226,10,46,379,0,0, 226,9,46,385,0,0,226,13,13,391,46,13,394,46,46,397, 13,0,400,0,46,403,0,0,406,10,46,409,0,0,226,427,427, 415,46,0,418,0,427,421,0,0,424,46,46,427,0,0,430,0, 46,433,0,0,436,0,0,226,454,454,442,50,0,445,0,454, 448,0,0,451,14,14,454,0,0,457,0,14,460,0,0,463,499, 499,466,46,0,469,0,499,472,0,0,475,500,500,478,46,0, 481,0,500,484,0,0,487,506,506,490,46,0,493,0,506,496, 0,0,499,0,0,502,14,0,505,0,0,508,0,0,511,9,50,514, 529,529,517,50,0,520,0,529,523,0,0,526,46,46,529,0, 0,532,0,46,535,0,0,538,9,50,541,0,0,226,46,-1,547, 562,562,550,50,0,553,0,562,556,0,0,559,46,46,562,0,0, 565,0,46,568,0,0,571,9,50,574,0,0,226,10,50,580,616, 616,583,50,0,586,0,616,589,0,0,592,617,617,595,50,0, 598,0,617,601,0,0,604,623,623,607,50,0,610,0,623,613, 0,0,616,0,0,619,46,0,622,0,0,625,0,0,628,-1,46,631, 0,0,226,10,50,637,673,673,640,50,0,643,0,673,646,0, 0,649,674,674,652,50,0,655,0,674,658,0,0,661,680,680, 664,50,0,667,0,680,670,0,0,673,0,0,676,46,0,679,0, 0,682,0,0,685,700,700,688,45,0,691,0,700,694,0,0,697, 46,46,700,0,0,703,0,46,706,0,0,709,9,45,712,0,0,226, 10,50,718,754,754,721,50,0,724,0,754,727,0,0,730,755, 755,733,50,0,736,0,755,739,0,0,742,761,761,745,50,0, 748,0,761,751,0,0,754,0,0,757,46,0,760,0,0,763,0,0, 766,781,781,769,45,0,772,0,781,775,0,0,778,46,46,781, 0,0,784,0,46,787,0,0,790,9,45,793,21,0,796,0,46,799, 0,0,802,21,0,805,0,46,808,0,0,811,0,0,226,14,14,817, 46,0,820,0,14,823,0,0,826,841,841,829,50,0,832,0,841, 835,0,0,838,46,46,841,0,0,844,0,46,847,0,0,850,886, 886,853,50,0,856,0,886,859,0,0,862,887,887,865,50,0, 868,0,887,871,0,0,874,893,893,877,50,0,880,0,893,883, 0,0,886,0,0,889,14,0,892,0,0,895,0,0,898,0,0,226, 10,50,904,940,940,907,50,0,910,0,940,913,0,0,916,941, 941,919,50,0,922,0,941,925,0,0,928,947,947,931,50,0, 934,0,947,937,0,0,940,0,0,943,46,0,946,0,0,949,0,0, 952,0,0,226,970,970,958,50,0,961,0,970,964,0,0,967, 14,14,970,0,0,973,0,14,976,0,0,979,10,50,982,1018, 1018,985,50,0,988,0,1018,991,0,0,994,1019,1019,997,50, 0,1000,0,1019,1003,0,0,1006,1025,1025,1009,50,0,1012, 0,1025,1015,0,0,1018,0,0,1021,46,0,1024,0,0,1027,0, 0,1030,46,46,1033,14,0,1036,0,46,1039,0,0,1042,0,0, 226,1060,1060,1048,50,0,1051,0,1060,1054,0,0,1057,46, 46,1060,0,0,1063,0,46,1066,0,0,1069,9,50,1072,0,0, 226,9,48,1078,1114,1114,1081,48,0,1084,0,1114,1087,0, 0,1090,1115,1115,1093,48,0,1096,0,1115,1099,0,0,1102, 1121,1121,1105,48,0,1108,0,1121,1111,0,0,1114,0,0,1117, 46,0,1120,0,0,1123,0,0,1126,1141,1141,1129,50,0,1132, 0,1141,1135,0,0,1138,46,46,1141,0,0,1144,0,46,1147, 0,0,1150,9,50,1153,0,0,226,10,50,1159,1195,1195,1162, 50,0,1165,0,1195,1168,0,0,1171,1196,1196,1174,50,0, 1177,0,1196,1180,0,0,1183,1202,1202,1186,50,0,1189,0, 1202,1192,0,0,1195,0,0,1198,46,0,1201,0,0,1204,0,0, 1207,1222,1222,1210,48,0,1213,0,1222,1216,0,0,1219,46, 46,1222,0,0,1225,0,46,1228,0,0,1231,10,48,1234,0,0, 226,1252,1252,1240,48,0,1243,0,1252,1246,0,0,1249,45, 45,1252,0,0,1255,0,45,1258,0,0,1261,10,48,1264,0,0, 226,1282,1282,1270,50,0,1273,0,1282,1276,0,0,1279,14, 14,1282,0,0,1285,0,14,1288,0,0,1291,46,14,1294,46, 46,1297,14,0,1300,0,46,1303,0,0,1306,9,50,1309,0,0, 226,1327,1327,1315,50,0,1318,0,1327,1321,0,0,1324,14, 14,1327,0,0,1330,0,14,1333,0,0,1336,14,0,1339,0,46, 1342,0,0,1345,9,50,1348,0,0,226,10,50,1354,1390,1390, 1357,50,0,1360,0,1390,1363,0,0,1366,1391,1391,1369,50, 0,1372,0,1391,1375,0,0,1378,1397,1397,1381,50,0,1384, 0,1397,1387,0,0,1390,0,0,1393,46,0,1396,0,0,1399,0, 0,1402,1417,1417,1405,48,0,1408,0,1417,1411,0,0,1414, 46,46,1417,0,0,1420,0,46,1423,0,0,1426,0,0,226,10,48, 1432,0,0,226,10,50,1438,1474,1474,1441,50,0,1444,0,1474, 1447,0,0,1450,1475,1475,1453,50,0,1456,0,1475,1459,0,0, 1462,1481,1481,1465,50,0,1468,0,1481,1471,0,0,1474,0,0, 1477,46,0,1480,0,0,1483,0,0,1486,46,46,1489,48,0,1492, 0,46,1495,0,0,1498,0,0,226,48,48,1504,46,0,1507,0,48, 1510,0,0,1513,1528,1528,1516,50,0,1519,0,1528,1522,0,0, 1525,46,46,1528,0,0,1531,0,46,1534,0,0,1537,9,50,1540, 0,0,226,10,50,1546,1582,1582,1549,50,0,1552,0,1582,1555, 0,0,1558,1583,1583,1561,50,0,1564,0,1583,1567,0,0,1570, 1589,1589,1573,50,0,1576,0,1589,1579,0,0,1582,0,0,1585, 46,0,1588,0,0,1591,0,0,1594,46,46,1597,50,0,1600,0,46, 1603,0,0,1606,9,46,1609,0,0,226,50,50,1615,46,0,1618, 0,50,1621,0,0,1624,0,0,226,1642,1642,1630,48,0,1633,0, 1642,1636,0,0,1639,14,14,1642,0,0,1645,0,14,1648,0,0, 1651,14,0,1657,0,0,1663,0,0,1660,0,14,1753,10,14,1666, 1702,1702,1669,48,0,1672,0,1702,1675,0,0,1678,1703,1703, 1681,48,0,1684,0,1703,1687,0,0,1690,1709,1709,1693,48, 0,1696,0,1709,1699,0,0,1702,0,0,1705,14,0,1708,0,0, 1711,0,0,1714,1729,1729,1717,45,0,1720,0,1729,1723,0, 0,1726,16,16,1729,0,0,1732,0,16,1735,0,0,1738,45,45, 1741,16,0,1744,0,45,1747,0,0,1750,0,0,226,9,45,1756, 10,48,1759,0,0,226,46,0,1765,0,46,1768,0,0,1771,46,0, 1774,0,46,1777,0,0,1780,46,0,1783,0,46,1786,0,0,1789, 46,0,1792,0,46,1795,0,0,1798,46,0,1801,0,46,1804,0, 0,1807,46,0,1810,0,46,1813,0,0,1816,46,0,1819,0,46, 1822,0,0,1825,46,0,1828,0,46,1831,0,0,1834,46,0,1837, 0,46,1840,0,0,1843,46,0,1846,0,46,1849,0,0,1852,46,0, 1855,0,46,1858,0,0,1861,46,0,1864,0,46,1867,0,0,1870, 46,0,1873,0,46,1876,0,0,1879,46,0,1882,0,46,1885,0, 0,1888,14,14,1891,46,0,1894,0,14,1897,0,0,1900,46,46, 1903,0,0,1906,0,46,1909,0,0,1912,14,0,1918,0,0,1924, 0,0,1921,0,14,1936,46,46,1927,9,0,1930,0,46,1933,0,0, 1936,0,0,226,1954,1954,1942,45,0,1945,0,1954,1948,0,0, 1951,45,45,1954,0,0,1957,0,45,1960,0,0,1963,0,0,226, 14,14,1969,46,0,1972,0,14,1975,0,0,1978,16,16,1981,0, 0,1984,0,16,1987,0,0,1990,14,0,1996,0,0,2002,0,0,1999, 0,14,2014,16,16,2005,9,0,2008,0,16,2011,0,0,2014,10, 14,2017,0,14,2032,16,16,2023,9,0,2026,0,16,2029,0,0, 2032,2047,2047,2035,50,0,2038,0,2047,2041,0,0,2044,46, 46,2047,0,0,2050,0,46,2053,0,0,2056,9,50,2059,16,0, 2065,0,0,2071,0,0,2068,0,16,2077,9,45,2074,0,0,226, 2092,2092,2080,45,0,2083,0,2092,2086,0,0,2089,14,14, 2092,0,0,2095,0,14,2098,0,0,2101,45,45,2104,14,0,2107, 0,45,2110,0,0,2113,0,0,226,14,14,2119,46,0,2122,0,14, 2125,0,0,2128,46,46,2131,0,0,2134,0,46,2137,0,0,2140, 0,14,2155,46,46,2146,9,0,2149,0,46,2152,0,0,2155,0, 0,226,14,14,2161,46,0,2164,0,14,2167,0,0,2170,46,46, 2173,9,0,2176,0,46,2179,0,0,2182,14,0,2188,0,0,2194, 0,0,2191,0,14,2206,46,46,2197,0,0,2200,0,46,2203,0, 0,2206,10,14,2209,0,14,2224,46,46,2215,0,0,2218,0,46, 2221,0,0,2224,0,0,226,14,14,2230,46,0,2233,0,14,2236, 0,0,2239,46,46,2242,0,0,2245,0,46,2248,0,0,2251,14, 0,2257,0,0,2260,0,0,2272,46,46,2263,9,0,2266,0,46, 2269,0,0,2272,9,14,2275,14,0,2281,0,0,2284,0,0,2296, 46,46,2287,9,0,2290,0,46,2293,0,0,2296,0,0,226,2314, 2314,2302,50,0,2305,0,2314,2308,0,0,2311,14,14,2314,0, 0,2317,0,14,2320,0,0,2323,9,50,2326,46,14,2329,46,46, 2332,0,0,2335,0,46,2338,0,0,2341,14,0,2347,0,0,2350, 0,0,2362,46,46,2353,9,0,2356,0,46,2359,0,0,2362,0, 0,226,2380,2380,2368,50,0,2371,0,2380,2374,0,0,2377, 14,14,2380,0,0,2383,0,14,2386,0,0,2389,9,50,2392,46, 14,2395,46,46,2398,0,0,2401,0,46,2404,0,0,2407,0,14, 2422,46,46,2413,9,0,2416,0,46,2419,0,0,2422,0,0,226, 46,0,2428,0,46,2431,0,0,2434,0,0,226,14,14,2440,12, 0,2443,0,14,2446,0,0,2449,15,15,2452,10,14,2455,14,0, 2461,0,0,2467,0,0,2464,0,14,2572,15,0,2470,0,15,2473, 0,0,2476,19,19,2479,46,0,2482,0,19,2485,0,0,2488,17, 17,2491,0,0,2494,0,17,2497,0,0,2500,19,0,2506,0,0, 2509,0,0,2521,17,17,2512,9,0,2515,0,17,2518,0,0,2521, 9,19,2524,19,0,2530,0,0,2533,0,0,2545,17,17,2536,9,0, 2539,0,17,2542,0,0,2545,17,0,2551,0,0,2557,0,0,2554, 0,17,2560,9,15,2560,46,0,2563,0,46,2566,0,0,2569,0, 0,2452,46,46,2575,15,0,2578,0,46,2581,0,0,2584,0,0, 226,14,14,2590,12,0,2593,0,14,2596,0,0,2599,46,14, 2602,2617,2617,2605,50,0,2608,0,2617,2611,0,0,2614,46, 46,2617,0,0,2620,0,46,2623,0,0,2626,9,50,2629,15,15, 2632,14,0,2638,0,0,2644,0,0,2641,0,14,2752,15,0,2647, 0,15,2650,0,0,2653,19,19,2656,46,0,2659,0,19,2662,0, 0,2665,17,17,2668,0,0,2671,0,17,2674,0,0,2677,19,0, 2683,0,0,2686,0,0,2698,17,17,2689,9,0,2692,0,17,2695, 0,0,2698,9,19,2701,19,0,2707,0,0,2710,0,0,2722,17,17, 2713,9,0,2716,0,17,2719,0,0,2722,17,0,2728,0,0,2734, 0,0,2731,0,17,2737,9,15,2737,46,0,2740,0,46,2743,0, 0,2746,10,14,2749,0,0,2632,46,46,2755,15,0,2758,0,46, 2761,0,0,2764,0,0,226,14,14,2770,12,0,2773,0,14,2776, 0,0,2779,15,15,2782,2797,2797,2785,50,0,2788,0,2797, 2791,0,0,2794,16,16,2797,0,0,2800,0,16,2803,0,0,2806, 9,50,2809,14,0,2815,0,0,2821,0,0,2818,0,14,3016,15, 0,2824,0,15,2827,0,0,2830,19,19,2833,46,0,2836,0,19, 2839,0,0,2842,17,17,2845,0,0,2848,0,17,2851,0,0,2854, 19,0,2860,0,0,2863,0,0,2875,17,17,2866,9,0,2869,0,17, 2872,0,0,2875,9,19,2878,19,0,2884,0,0,2887,0,0,2899, 17,17,2890,9,0,2893,0,17,2896,0,0,2899,19,19,2902,16, 0,2905,0,19,2908,0,0,2911,18,18,2914,0,0,2917,0,18, 2920,0,0,2923,19,0,2929,0,0,2932,0,0,2944,18,18,2935, 9,0,2938,0,18,2941,0,0,2944,9,19,2947,19,0,2953,0,0, 2956,0,0,2968,18,18,2959,9,0,2962,0,18,2965,0,0,2968, 17,0,2971,0,18,2974,0,0,2977,18,0,2983,0,0,2989,0,0, 2986,0,18,2992,9,15,2992,16,0,2995,0,16,2998,0,0,3001, 46,0,3004,0,46,3007,0,0,3010,10,14,3013,0,0,2809,46, 46,3019,15,0,3022,0,46,3025,0,0,3028,0,0,226,14,14, 3034,12,0,3037,0,14,3040,0,0,3043,15,15,3046,3061,3061, 3049,50,0,3052,0,3061,3055,0,0,3058,16,16,3061,0,0, 3064,0,16,3067,0,0,3070,9,50,3073,14,0,3079,0,0,3085, 0,0,3082,0,14,3313,15,0,3088,0,15,3091,0,0,3094,19, 19,3097,46,0,3100,0,19,3103,0,0,3106,17,17,3109,0,0, 3112,0,17,3115,0,0,3118,19,0,3124,0,0,3127,0,0,3139, 17,17,3130,9,0,3133,0,17,3136,0,0,3139,9,19,3142,19, 0,3148,0,0,3151,0,0,3163,17,17,3154,9,0,3157,0,17, 3160,0,0,3163,19,19,3166,16,0,3169,0,19,3172,0,0,3175, 18,18,3178,0,0,3181,0,18,3184,0,0,3187,19,0,3193,0,0, 3196,0,0,3208,18,18,3199,9,0,3202,0,18,3205,0,0,3208, 9,19,3211,19,0,3217,0,0,3220,0,0,3232,18,18,3223,9,0, 3226,0,18,3229,0,0,3232,17,0,3235,0,18,3238,0,0,3241, 9,18,3244,17,17,3247,10,0,3250,0,17,3253,0,0,3256,18, 0,3262,0,0,3268,0,0,3265,0,18,3280,17,17,3271,0,0, 3274,0,17,3277,0,0,3280,17,0,3283,0,15,3286,0,0,3289, 16,0,3292,0,16,3295,0,0,3298,46,0,3301,0,46,3304,0, 0,3307,10,14,3310,0,0,3073,46,46,3316,15,0,3319,0,46, 3322,0,0,3325,0,0,226,14,14,3331,12,0,3334,0,14,3337, 0,0,3340,15,15,3343,3358,3358,3346,50,0,3349,0,3358, 3352,0,0,3355,16,16,3358,0,0,3361,0,16,3364,0,0,3367, 9,50,3370,14,0,3376,0,0,3382,0,0,3379,0,14,3616,15, 0,3385,0,15,3388,0,0,3391,19,19,3394,46,0,3397,0,19, 3400,0,0,3403,17,17,3406,0,0,3409,0,17,3412,0,0,3415, 19,0,3421,0,0,3424,0,0,3436,17,17,3427,9,0,3430,0,17, 3433,0,0,3436,9,19,3439,19,0,3445,0,0,3448,0,0,3460, 17,17,3451,9,0,3454,0,17,3457,0,0,3460,19,19,3463,16, 0,3466,0,19,3469,0,0,3472,18,18,3475,0,0,3478,0,18, 3481,0,0,3484,19,0,3490,0,0,3493,0,0,3505,18,18,3496, 9,0,3499,0,18,3502,0,0,3505,9,19,3508,19,0,3514,0,0, 3517,0,0,3529,18,18,3520,9,0,3523,0,18,3526,0,0,3529, 17,0,3532,0,18,3535,0,0,3538,11,0,3541,0,18,3544,0, 0,3547,17,17,3550,10,0,3553,0,17,3556,0,0,3559,18,0, 3565,0,0,3571,0,0,3568,0,18,3583,17,17,3574,0,0,3577, 0,17,3580,0,0,3583,17,0,3586,0,15,3589,0,0,3592,16,0, 3595,0,16,3598,0,0,3601,46,0,3604,0,46,3607,0,0,3610, 10,14,3613,0,0,3370,46,46,3619,15,0,3622,0,46,3625,0, 0,3628,0,0,226,3646,3646,3634,50,0,3637,0,3646,3640,0, 0,3643,14,14,3646,0,0,3649,0,14,3652,0,0,3655,16,16, 3658,15,15,3661,10,0,3664,0,15,3667,0,0,3670,14,0,3676, 0,0,3679,0,0,3691,15,15,3682,0,0,3685,0,15,3688,0,0, 3691,15,0,3697,0,0,3703,0,0,3700,0,15,3712,9,16,3706, 46,14,3709,0,0,3658,46,0,3715,0,14,3718,0,0,3721,10, 16,3724,46,46,3727,16,0,3730,0,46,3733,0,0,3736,3772, 3772,3739,50,0,3742,0,3772,3745,0,0,3748,3773,3773,3751, 50,0,3754,0,3773,3757,0,0,3760,3779,3779,3763,50,0,3766, 0,3779,3769,0,0,3772,0,0,3775,14,0,3778,0,0,3781,0, 0,3784,0,0,226,41,0,3793,0,0,3799,0,0,3796,0,41,3802, 0,0,226,3817,3817,3805,21,0,3808,0,3817,3811,0,0,3814, 14,14,3817,0,0,3820,0,14,3823,0,0,3826,14,0,3832,0, 0,3838,0,0,3835,0,14,4225,9,40,3841,16,16,3844,21,0, 3847,0,16,3850,0,0,3853,9,16,3856,3892,3892,3859,16,0, 3862,0,3892,3865,0,0,3868,3893,3893,3871,16,0,3874,0, 3893,3877,0,0,3880,3899,3899,3883,16,0,3886,0,3899,3889, 0,0,3892,0,0,3895,45,0,3898,0,0,3901,0,0,3904,9,16, 3907,3943,3943,3910,16,0,3913,0,3943,3916,0,0,3919,3944, 3944,3922,16,0,3925,0,3944,3928,0,0,3931,3950,3950,3934, 16,0,3937,0,3950,3940,0,0,3943,0,0,3946,46,0,3949,0, 0,3952,0,0,3955,9,16,3958,3994,3994,3961,16,0,3964,0, 3994,3967,0,0,3970,3995,3995,3973,16,0,3976,0,3995,3979, 0,0,3982,4001,4001,3985,16,0,3988,0,4001,3991,0,0,3994, 0,0,3997,48,0,4000,0,0,4003,0,0,4006,9,16,4009,4045, 4045,4012,16,0,4015,0,4045,4018,0,0,4021,4046,4046,4024, 16,0,4027,0,4046,4030,0,0,4033,4052,4052,4036,16,0,4039, 0,4052,4042,0,0,4045,0,0,4048,50,0,4051,0,0,4054,0,0, 4057,9,16,4060,47,47,4063,14,0,4066,0,47,4069,0,0,4072, 7,0,4075,0,47,4078,0,0,4081,49,49,4084,47,0,4087,0,49, 4090,0,0,4093,7,0,4096,0,49,4099,0,0,4102,21,21,4105, 14,0,4108,0,21,4111,0,0,4114,9,14,4117,4132,4132,4120, 14,0,4123,0,4132,4126,0,0,4129,45,45,4132,0,0,4135,0, 45,4138,0,0,4141,9,14,4144,4159,4159,4147,14,0,4150,0, 4159,4153,0,0,4156,46,46,4159,0,0,4162,0,46,4165,0,0, 4168,9,14,4171,4186,4186,4174,14,0,4177,0,4186,4180,0, 0,4183,48,48,4186,0,0,4189,0,48,4192,0,0,4195,9,14, 4198,4213,4213,4201,14,0,4204,0,4213,4207,0,0,4210,50, 50,4213,0,0,4216,0,50,4219,0,0,4222,9,14,4225,0,0, 226,0,8962,48,634,0,1237,8456,8962,49,634,1,1237,8468, 8963,12589,634,-1,1237,0,12546,43,382,1237,8492,12546, 45,376,1237,8502,11009,1312,1237,8512,11521,1267,1237, 8520,26886,30318,29285,116,388,1237,8528,25091,25977,370, 1237,8542,25603,28789,901,1237,8552,25604,28530,112,1045, 1237,8562,28420,25974,114,955,1237,8574,29444,24951,112, 814,1237,8586,29190,26739,26217,116,2587,1237,8480,23299, 23872,412,1237,8612,23299,23841,439,1237,8622,27651,25203, 1762,1237,8598,29443,16496,1543,1237,8642,29443,8560,1612, 1237,8652,12290,62,2116,1237,8662,12290,61,2158,1237,8672, 12290,60,2227,1237,8682,15361,2299,1237,8692,15873,2365, 1237,8700,12802,47,2437,1237,8708,28418,114,2767,1237,8718, 30723,29295,3031,1237,8728,24835,25710,3328,1237,8632,28677, 30049,25971,3787,1237,8738,28163,28783,1237,8760,16385,2437, 412,1237,8768,8449,2437,439,1237,8778,15364,27503,62,715, 24,1237,8748,15366,28005,29801,62,715,20,1237,8802,15365, 25963,15993,715,18,1237,8818,15366,25445,28520,62,715,26, 1237,8832,15369,26988,25972,24946,15980,715,22,1237,8848, 15365,24948,15984,715,28,1237,8866,15368,30821,25968,29795, 62,715,30,1237,8880,15367,29285,28530,15986,715,32,1237, 8898,15366,28515,25708,62,634,74,1237,8788,25351,29301, 25970,29806,634,64,1237,8930,29192,28527,11636,28534,99, 634,70,1237,8946,29700,26984,115,715,0,1237,8964,28675, 25697,4486,634,960,1312,1237,8978,8965,28534,29539,634,8, 1237,8994,25351,28271,25972,29816,634,48,1237,9008,26628, 29285,101,634,40,4386,1237,9024,25092,29537,101,715,10, 1237,9040,25603,27760,715,12,1237,9054,26627,25708,715,14, 1237,9066,29445,24948,25972,715,34,1237,8914,25355,27745, 25193,24946,26996,28271,634,44,1237,9078,25091,27500,634,84, 1237,9112,29443,29283,634,86,1237,9124,15875,28265,715,16, 1237,9136,29444,24944,110,715,44,1237,9148,25090,108,634, 32,1237,9162,25350,25465,25964,115,634,80,1237,9174,26627, 30821,634,16,4524,4391,1237,9190,25607,25445,28009,27745, 634,10,4524,4391,1237,9206,23809,4243,4543,4391,1237,9226, 23361,4231,4543,4391,1237,9092,27908,28257,121,4231,4571, 4391,1237,9238,28163,28777,814,1045,1237,9266,29700,25461, 107,814,955,1237,9278,16132,30052,112,901,1966,4654,901, 1237,9292,29187,29807,1075,814,1156,814,1237,9310,11524, 28530,116,4658,4658,1237,9326,12805,29284,28783,1045,1045, 1237,9340,12804,30052,112,955,955,1237,9354,12291,15676, 2116,2158,1237,9368,12291,15932,2158,2158,1237,9380,15617, 1267,2158,1237,9392,15362,62,4698,2158,1237,9402,15874,61, 2299,2158,1237,9414,15362,61,2365,2158,1237,9426,12291, 15678,2227,2158,1237,9438,29954,60,4681,2227,2158,814, 2227,2158,4704,1075,2299,1156,4704,1237,9450,29954,62, 814,4728,1237,9480,29955,15678,4728,2158,1237,9492,29955, 15676,4743,2158,1237,9504,28166,26469,29793,101,376,388, 1237,9516,29443,25662,901,2227,1237,9532,24835,29538,4769, 1966,4779,4763,1237,9544,12802,42,2425,1237,9560,25348, 27749,108,634,2,1237,9570,25349,27749,11116,4789,1312, 1237,9584,25349,27749,29548,2425,1237,9598,25863,25976, 30051,25972,2437,1075,1237,9610,27396,31077,63,577,4769, 1966,4833,634,6,4386,634,8,3328,1966,4830,370,1045,4231, 1237,4243,1237,9626,27395,31077,3787,4413,4386,4810,1966, 4838,1237,9670,25860,26989,116,3787,4406,4386,4810,1237, 9690,25346,114,634,13,4849,634,10,4849,1237,9708,26379, 29797,25389,29301,25970,29806,4470,4386,1237,9728,29451, 29797,25389,29301,25970,29806,4470,4391,1237,9250,27652, 29537,116,4871,4386,1237,9748,28676,25449,107,1543,1312, 412,1237,9782,11010,33,2437,4643,412,1312,814,439,1237, 9798,27654,26739,26217,116,4650,1966,4923,376,814,4783, 814,1939,4914,1237,9818,25346,64,901,4386,814,1762,1966, 4938,634,8,2587,1939,4941,634,255,3328,1237,9848,25346, 33,814,634,255,3328,901,634,8,4914,2767,814,4643,901, 4386,814,1762,2158,634,255,3031,1075,955,3031,1156,3328, 3031,814,4391,1237,9884,27907,30817,4681,2299,1966,4983, 4636,1939,4984,1045,1237,9946,27907,28265,4681,2365,1966, 4995,4636,1939,4996,1045,1237,9970,29449,30063,25458,11621, 25705,715,42,4386,1237,9994,12802,33,4643,4391,4796,4391, 1237,10014,12802,64,901,4796,4386,814,4386,1237,10030, 12835,29246,1156,814,1075,814,1075,1075,1237,10048,12835, 15986,1156,1156,814,1156,814,1075,1237,10068,29699,28789, 715,46,1237,10088,29446,30063,25458,101,5047,5018,1237, 10100,24839,26988,28263,25701,901,1762,4693,4237,3328,1312, 1237,10116,24837,26988,28263,4516,5063,634,40,4391,1237, 10140,24837,27756,29807,634,40,4902,1237,10160,11265,5074, 4516,4391,4789,5084,1237,10176,25349,30063,29806,901,382, 814,4927,1237,10192,11015,29811,26994,26478,4237,955,4988, 4658,955,1312,4658,4658,1267,1237,10210,29700,28793,101, 901,1966,5134,814,5100,4849,814,376,1939,5124,4674,1237, 10240,25349,28525,25974,1075,1939,5151,1075,901,4927,1351, 4945,382,1156,382,1627,5143,4674,1237,10272,26116,27753,108, 814,1075,814,1939,5167,4681,4945,382,1627,5164,4674,1237, 10310,25861,24946,25971,4231,5159,1237,9768,25603,9327,1156, 1156,4783,901,5100,1312,5063,2437,1075,814,1075,1237,10356, 10243,10532,5181,1237,10386,11778,36,5181,5100,5124,1237, 10342,29445,24944,25955,4584,4849,1237,10410,25349,29793, 26723,1543,1075,715,36,4386,1075,1435,715,36,4391,4810, 1156,715,36,4391,1429,4231,1237,10424,29701,29288,30575, 4650,1966,5255,715,36,4386,1501,1156,715,36,4391,1156,814, 1075,1612,1045,1156,1237,10468,24837,28514,29810,4243,5238, 1237,10396,10247,25185,29295,10612,5181,814,1966,5275,5100, 5124,5260,1045,1237,10526,25605,28773,26740,634,98,4386, 1543,1267,376,1237,10554,16134,25956,29808,104,5281,4710, 1966,5300,634,-4,5238,1237,10512,29955,11117,4681,1312, 1075,1351,4231,4710,1075,4681,3328,2227,1156,2767,1075, 2767,2227,1156,3328,388,382,1156,814,1237,10602,25607, 25966,24935,25972,388,1075,388,4237,5304,1156,1312,1237, 10652,25602,43,1075,814,1075,5304,1156,1312,1156,1312,1237, 10678,29955,10861,4231,814,634,15,1075,901,5304,1075,1075, 901,5304,1156,1312,1156,1966,5375,1075,955,5304,1156,1312, 1627,5359,4658,1045,1237,10702,10753,5354,1045,1237,10760, 29958,12141,28525,100,4650,2158,1966,5397,634,-10,5238, 4681,4728,1966,5440,4763,634,15,1075,1075,901,5304,1075, 1075,901,5304,1156,1312,901,1156,1351,814,1075,5304,1156, 4693,814,4693,1312,1966,5433,1075,1045,382,1156,1939,5434, 1045,1156,1627,5405,1045,814,1237,4674,1045,4243,901,1237, 10770,27909,27951,25711,4769,901,1075,1966,5458,4763,1075, 5331,1156,1075,4769,1966,5464,1351,1312,1156,5390,1156,1966, 5473,814,4763,814,1237,1237,10890,12036,28525,100,955,2227, 814,5449,1237,10948,27907,25711,5478,1045,1237,10966,12033, 5478,4636,1237,10576,10246,28005,29801,41,544,1237,10978, 25860,26723,111,4421,4386,4810,1237,10988,29699,28769,901, 5505,955,4945,382,1237,11018,27396,24948,112,901,901,634, 13,4704,1075,634,10,4704,1156,3328,1966,5567,901,634,8, 4704,1075,634,127,4704,1156,3328,1966,5550,4584,5512,1237, 1075,955,1351,2299,901,1966,5564,634,8,901,5505,4584,5505, 5505,1156,1312,1237,1045,4636,901,1237,11002,24838,25443, 28773,116,955,1312,955,4681,4704,1966,5600,4838,901,4584, 1267,634,95,4728,1966,5595,5512,1939,5598,4437,4386,4810, 1939,5579,1045,955,1267,1237,11142,25862,28792,25445,116, 4446,4386,4810,4578,4391,1045,1237,11208,29699,25193,5055, 1045,1237,11232,28933,25973,31090,5619,634,256,4446,4386, 4810,5047,4391,1045,4231,4571,4391,1237,11244,11529,29300, 26977,26988,26478,1075,1939,5659,4584,955,1351,1312,4927, 2299,1966,5659,1156,382,1237,1627,5648,4231,1237,11036, 27652,28527,107,814,1075,4658,4658,901,1966,5694,955,4927, 1351,1267,1351,4584,4698,634,4,4895,4810,1966,5691,1429, 4658,1045,1237,5110,1939,5671,1429,4658,1045,1237,11326, 29959,28014,29793,26723,1966,5707,2116,1237,4693,1237,11396, 27909,29793,26723,5703,388,1237,11278,28677,29281,25971,1075, 5619,4571,4386,1312,5047,4386,4571,4386,1267,1351,1075,955, 1156,814,1075,1075,1351,634,11406,5667,4681,1156,634,11426, 5667,814,1156,1267,1075,1267,1156,382,4571,4902,1156,4584, 4698,1966,5761,5645,4231,4976,1237,11418,25094,28257,25966, 114,1075,901,2116,1966,5779,1351,4849,376,1939,5770,1045, 1429,1237,11432,26628,27759,100,4243,4536,4902,4536,4386, 4945,1237,11564,8962,62,4674,4536,4386,4486,634,896,1312, 955,1267,1237,11528,25863,29816,24946,29795,901,1075,5390, 1156,814,1075,5390,1156,4658,1237,11612,25605,26473,29801, 634,9,955,2299,634,7,3328,1312,634,48,1312,1237,11586, 8961,634,2,5293,4231,4524,4386,5811,5825,5786,1237,11674, 8962,115,5839,4681,2767,2158,1966,5852,1237,11698,15362, 35,4486,634,896,1312,4536,4391,1237,11718,29444,26473,110, 2227,1966,5879,634,45,5786,1237,11738,29955,29230,1075,4231, 5862,5852,5796,1156,955,1267,4584,5769,5124,1237,11760, 29954,46,4231,5862,5852,5796,5209,5124,1237,11642,10243, 10542,4775,4524,4386,3631,4650,1966,5916,5908,5825,4849, 1237,11790,11777,5209,901,2227,1966,5929,634,45,4849,5908, 1237,11838,15879,30062,25197,29285,4681,1075,1075,1045, 4927,4524,4386,1075,634,48,1267,634,9,955,2299,1966,5961, 634,7,1267,901,634,10,2299,2767,901,1156,4728,2158,1966, 5971,1045,1156,1156,1237,814,4524,4386,5354,1045,4658, 4524,4386,5354,5342,1156,1156,5110,901,2158,1966,5936, 1237,11862,28167,28021,25954,16242,4243,4530,4391,4524, 4386,1075,955,4927,634,45,4698,901,1075,1966,6010,5110, 955,4927,634,36,4698,1966,6019,4598,5110,1075,1075,4231, 901,1156,1156,5936,901,1966,6054,955,4927,634,46,4704, 1966,6046,4658,1045,4658,1156,4674,4231,1156,4524,4391, 1237,376,4530,4391,382,4530,4386,1939,6025,4674,1156, 1966,6059,5331,1156,4524,4391,4243,1237,11978,11778,115, 5281,1075,1939,6074,1351,4895,5921,1627,6071,1237,12128, 25351,28015,24944,25970,4658,955,1267,4650,1966,6093,1075, 4674,1156,4636,1237,1075,1939,6108,5100,4658,5100,4658, 1267,4650,1966,6108,1429,4636,4636,1237,1627,6096,4674, 4231,1237,12154,28163,24934,4796,1237,12226,25347,24934, 6116,901,4927,634,31,3328,1312,4796,4789,4763,3328,1237, 11810,10248,25971,29281,26723,41,814,1075,901,901,1966, 6175,901,6116,5100,634,159,3328,1351,5100,6082,2158,1966, 6170,1429,901,6116,634,64,814,4386,3328,4693,4237,2767, 4763,1237,4636,901,4386,1939,6142,1429,4674,4231,1237, 12266,10246,26982,25710,41,1075,4509,901,4386,1966,6208, 901,4386,4386,1351,814,6139,4650,1966,6205,1075,4658,1045, 1156,1429,1237,4796,1939,6186,1045,4231,1156,4231,1237, 12236,29455,24933,25458,11624,28535,25714,26988,29811,6139, 4658,1045,1237,12426,26116,28265,100,6184,4658,1045,1237, 12358,10249,26988,25972,24946,10604,4543,4386,1966,6248, 634,634,5090,5090,1237,12452,27719,29801,29285,27745,4430, 4386,4810,1237,12498,25352,28015,26992,25964,44,2437,5074, 5090,1237,12468,16134,28518,28277,100,1966,6276,1237,5209, 5100,5124,634,63,4849,4857,634,-13,5238,1237,12516,26889, 29806,29285,29296,29797,6230,4650,1966,6325,4543,4386,1966, 6310,2116,1966,6307,6121,4810,1237,6121,6264,1237,1045,901, 6116,4927,634,32,3328,1966,6322,634,-14,5238,6121,4810, 1237,901,1075,5100,5994,1966,6348,1429,4530,4386,2227,1966, 6340,1045,1939,6346,4543,4386,1966,6345,814,6254,6254,1237, 1156,4231,6273,1237,12574,26377,29797,28461,25714,29285,4509, 4231,1075,901,4386,1351,3031,1966,6370,4796,1939,6361,1429, 901,4789,1267,814,4509,1267,2437,901,1075,376,4769,1966, 6387,634,-80,5238,1075,1939,6395,901,4386,814,4789,1267, 1627,6390,4386,1156,1237,0,29449,29797,28461,25714,29285, 901,4243,4698,1966,6416,1045,4479,4237,6406,1237,901,4501, 2365,1966,6424,634,-73,5238,4509,814,1075,1939,6432,4643, 4391,4796,1627,6429,4231,814,4391,1237,12800,26126,29295, 26740,30509,29295,27748,29545,116,634,66,1237,12876,29446, 29561,25972,109,634,72,1237,12900,26117,29295,26740,4479, 6447,634,2,6406,1237,12916,28420,27758,121,4243,6406,1237, 12536,11779,25705,6116,5100,634,31,3328,5124,5209,1237, 12936,30469,29295,29540,4857,6358,4650,1966,6517,814,4386, 4650,1966,6514,901,6116,4927,634,128,3328,2158,1966,6511, 901,6478,4386,1939,6497,376,1939,6492,1237,12704,25611, 26213,28265,29801,28521,29550,4509,4386,4881,1237,13036, 30468,29295,100,4237,5293,5720,4516,5063,901,1075,4681, 4391,382,814,5140,1156,1237,12950,16135,28277,29033,25973, 901,4871,6139,2158,1966,6559,1237,5209,4674,634,78,4386, 6478,5201,29193,25701,26213,28265,25701,4857,1237,13094, 16132,30062,108,901,4927,1966,6582,1237,634,-16,5238,1237, 13146,16132,25964,110,901,4927,634,31,2365,1966,6600,634, -19,5238,1237,13058,25348,24936,114,4584,6533,6577,5100, 1045,4927,1237,13202,23366,26723,29281,93,6605,634,634, 5090,5090,1237,13224,15201,634,-17730,4704,1966,6633,634, -22,5238,634,1237,5090,4621,4650,1966,6643,4871,4391,1237, 1237,13246,14849,5074,4516,901,634,78,4391,4888,5090,4584, 6533,6577,6590,6552,5100,1312,634,40,4391,5074,634,-17730, 4615,1237,13288,14855,28526,24942,25965,5074,4516,4231,634, -17730,4615,1237,13338,10049,4584,6533,6230,6273,6121,6254, 1237,13362,25383,28015,26992,25964,1156,901,412,5090,382, 1075,1237,13380,29287,25445,29301,25971,634,78,4386,6121, 6264,1237,13172,29702,26479,27751,101,4643,4386,3031,814, 4391,1237,13426,26628,25705,101,4584,6533,6230,6273,6116, 634,128,814,6718,1237,13404,25189,26469,28265,5074,4516, 1237,13476,30053,29806,27753,634,1966,5090,2437,5090,1237, 13490,24933,24935,28265,634,1939,5090,2437,5090,1237,13510, 26978,102,634,1966,5090,4516,4231,5090,1237,13530,29796, 25960,110,5074,4516,2437,814,4391,1237,13550,30565,26984, 25964,6768,1237,13570,29286,28773,24933,116,814,6759,6779, 1237,13582,25956,29548,101,634,1939,5090,4516,4231,5090,814, 6779,1237,13600,26211,29295,634,1075,5090,4516,1237,13626, 24931,29798,1045,634,1939,5090,4516,4231,5090,4516,814, 1237,13642,28260,30821,116,634,1627,5090,2437,5090,1237, 13448,10245,24950,10610,1156,4783,1237,13688,10247,28515, 29550,10612,1156,412,1237,13702,10248,24941,27506,29285,41, 1156,4783,901,4386,634,40,4391,4796,4386,4871,4391,1237, 13668,25350,25970,29793,101,6646,1045,4621,6695,6848,4871, 4391,1237,13754,30216,29281,24937,27746,101,6882,4231,5090, 1237,13780,25352,28271,29811,28257,116,6882,4789,4763,5084, 6695,6856,5090,1237,13800,15909,28514,31076,4796,1237,13718, 10246,28516,29541,41,1156,1156,4783,814,1075,1237,13840, 10246,28515,28781,41,1156,634,78,4386,6121,901,4386,634, 6848,4704,1966,6951,634,-31,5238,4391,1237,13828,25701, 25967,15987,6695,6936,6695,6925,1237,13906,27910,29281, 25963,114,4888,5074,4516,6882,4789,4763,5084,6695,6865, 5090,5090,1237,13924,29283,8560,6695,1501,1237,13958,29283, 16496,6695,1435,1237,13970,15970,114,6695,1075,1237,13982, 29282,62,6695,1156,1237,13994,29282,64,6695,1351,1237, 14006,29285,29284,28783,6695,1429,1237,14018,25956,27000, 116,6695,1237,1237,14032,11874,34,6695,5201,634,34,6533, 5100,1312,634,40,4391,5074,1237,14046,9314,34,6695,5196, 634,34,6533,5100,1312,634,40,4391,5074,1237,14076,24934, 28514,29810,34,6695,5268,634,34,6533,5100,1312,634,40, 4391,5074,1237,14106,10305,634,41,5720,4674,1237,14140, 11842,40,634,41,5720,5124,1237,14154,10561,1237,14170, 23617,5619,4386,4571,4391,1237,14176,28744,29551,28788, 28271,101,4584,6533,6230,6273,6121,6264,1237,14190,26889, 28013,25701,24937,25972,4888,6116,4386,634,64,2767,4888, 6116,4391,1237,14216,25356,28015,26992,25964,28461,27758, 121,4888,6116,4386,634,32,2767,4888,6116,4391,1237,14248, 29443,25957,4584,6533,6230,6273,4857,901,4386,634,1237, 4704,1966,7170,901,4386,5921,4796,4516,955,2299,1966,7168, 1045,1237,1939,7150,4386,5898,1237,14284,25604,28021,112, 5063,4650,1966,7191,814,901,4386,5921,4796,814,4789,1267, 1939,7178,1045,1237,13862,25349,29547,28021,5063,901,634, -16162,1267,1075,4650,1966,7218,814,901,4386,1156,1312, 1075,4796,814,4789,1267,1939,7203,1045,1156,1237,14346, 25607,26213,28265,25701,4584,6533,6230,4636,4693,1237, 14442,23366,26740,28261,93,1237,14464,23366,27749,25971, 93,4584,6533,901,4927,1966,7266,6230,1045,6121,901,634, 14486,4698,814,634,14474,4698,2767,1966,7264,1237,1939, 7243,5626,1045,1939,7243,1237,14476,23364,26217,93,1966, 7278,1237,7243,1237,14542,27906,115,1075,3787,4553,4386, 1075,1627,7288,1627,7284,1237,14560,25092,27749,108,634,7, 4849,1237,14386,25347,26995,634,27,4849,634,91,4849,1237, 14586,28676,26465,101,7304,5201,12802,74,7304,5201,12548, 12603,72,1237,14622,24837,11636,31096,4524,4386,4608,1075, 7304,4231,5883,5201,15105,4231,5883,5201,18433,1156,4524, 4391,1237,14650,25093,25135,26229,634,1024,1237,14692,25093, 28524,27491,4237,5293,901,4559,4391,634,10,4914,3787,1237, 14706,26117,30060,26739,1237,14734,29958,25712,29793,101, 4243,634,76,4391,1237,14744,25093,24940,27502,4584,5159, 1237,14764,27652,29545,116,7315,4857,901,4565,4391,7357, 634,15,1075,634,15,1351,1267,634,3,5883,5209,634,63,1075, 5100,4849,1627,7413,4857,1627,7402,1045,1237,14778,26377, 29797,26925,28782,29813,5055,4571,4386,5003,4398,4386,1237, 14844,29449,29797,26925,28782,29813,4398,4391,715,42,4391, 4571,4391,5047,5010,1237,14602,28418,107,4543,4386,2158, 1966,7463,5201,8195,27503,4857,1237,14902,25860,24950,108, 4584,6533,901,4927,1966,7479,6293,4231,5293,1939,7468,1045, 4398,4386,4810,1237,14870,25864,24950,30060,29793,101,7428, 5027,5027,1075,4231,4243,634,8766,7441,634,14936,5216,1156, 5037,5037,7441,5238,1237,14928,27652,28265,101,634,6,4914, 814,7357,1312,634,64,1237,15016,27656,24943,27748,28265,101, 7512,7490,1237,14968,27652,24943,100,4231,634,15,1075,4681, 5027,7527,5037,382,1627,7538,4674,1237,12972,25862,28518, 29810,104,634,264,1237,15042,26884,26222,111,4857,5201, 20500,28530,25962,29795,8250,18021,29295,26740,30240,11825, 56,4516,5921,634,46,4386,5921,4857,5201,16667,29813,28520, 14962,8224,26962,26723,29281,8292,24906,25965,8307,28488, 25975,4857,5201,17694,24941,27753,8250,8224,28520,25975, 29230,27182,14382,16441,28007,26977,11884,28515,109,4857, 5201,21033,28773,14959,8224,8224,29800,28788,14963,12079, 26983,26740,25205,25390,28015,26671,30575,29285,12138,30067, 27746,29029,4857,5201,19494,25449,28261,25971,8250,26708, 8293,28245,26988,25955,29550,8293,8239,30032,27746,25449, 17440,28015,26977,110,4857,1237,15110,30723,28521,634,11152, 4446,4391,4437,4391,4421,4391,4398,4391,1237,15318,26628, 28257,100,634,14908,634,10998,634,6,4386,1762,1966,7690, 1045,634,8570,634,11044,4621,7662,1237,15346,28676,25441, 101,634,11,4849,1237,15390,26116,27753,101,634,15398,634, 8570,634,11044,7662,1237,15406,25351,28271,28531,25964,634, 9634,4413,4391,634,10998,4406,4391,7677,1237,15430,26883, 8559,7720,1237,15460,29705,29537,11627,28265,29801,634,42, 4386,814,634,42,4391,4486,2437,715,0,4391,634,8548,2437, 715,2,4391,4486,634,256,1312,2437,715,6,4391,4486,634, 512,1312,2437,715,8,4391,4231,715,4,4391,4608,7733,634, 12480,4430,4391,634,8548,4454,4391,4231,4571,4391,4243, 4530,4391,4486,634,512,1312,4231,5047,5010,634,42,4391, 1237,15470,26883,26990,634,42,4386,7741,1237,15612,10247, 29285,28530,10610,901,5209,5921,634,63,4849,4857,4243, 4698,1966,7831,370,7809,634,15638,4454,4391,1237,15060, 28932,26997,116,634,15638,4454,4391,5626,634,14936,5216, 4650,1966,7855,4454,4386,4810,1939,7845,1237,15628,10246, 28515,25708,41,6472,6462,6525,7809,634,6,4386,634,4,3328, 1966,7876,7559,634,6,4386,634,2,3328,1966,7916,634,8, 4386,4783,901,4516,814,1267,7197,634,46,4386,4704,1966, 7907,5201,25354,29547,28021,26144,26977,108,370,634,6, 4386,634,2,3031,634,6,4391,7841,1237,15716,29701,29537, 14955,6882,4516,634,1024,5084,2437,7741,1237,15836,24840, 29795,30313,29793,101,901,7741,901,1075,814,2437,814,634, 2,1312,4391,1156,4486,4386,1075,901,2437,4486,4391,1156, 814,4391,1237,15860,30468,26977,116,3787,901,4386,1966, 7963,4231,814,4391,1237,15918,29446,26473,24942,108,4486, 814,4391,1237,15944,29446,28265,27751,101,4237,634,82,4391, 1237,15962,27909,27765,26996,4231,634,82,4391,1237,15982, 29444,28261,100,4486,955,634,38,1312,3787,901,4386,2158, 1966,8009,4391,634,40,1312,4391,1237,16000,29191,25445, 26981,25974,3787,715,38,4386,1966,8026,715,40,4386,715, 38,4386,4231,715,38,4391,1237,15674,25862,26980,28532,114, 634,68,4237,6406,1237,0,28929,6472,6462,1237,16106,16129, 4565,4386,5921,1237,16116,27649,4565,4386,7393,1237,16128, 25857,8055,4565,4386,7534,8048,1237,16140,26882,97,634,2, 5293,634,6,4914,1312,4565,4386,7357,1312,5619,4571,4386, 1312,814,5055,4636,4571,4386,1267,5140,5619,4386,4571,4391, 7377,8066,1237,16156,26881,4231,814,8081,1237,16220,30465, 6490,1237,16232,29441,7377,7371,1237,16240,28161,4237,4565, 4902,8066,1237,16250,28673,4243,4565,4902,8066,1237,16264, 29185,4565,4391,8066,1237,16278,30721,4565,4386,7357,7350, 7386,8066,1237,16290,25601,4237,5293,1075,4565,4386,7357, 1156,634,6,4914,1312,634,64,7386,8066,1237,16086,25348, 27759,100,634,74,4783,4386,4810,1237 ]; } }