From f234fe0a0886bfcb9d69d29120d988c55dea6872 Mon Sep 17 00:00:00 2001 From: Flummi Date: Wed, 12 Jul 2023 18:38:42 +0200 Subject: [PATCH 1/3] uff --- package-lock.json | 6 ++++++ package.json | 1 + src/inc/handranker.mjs | 2 +- src/index.mjs | 29 ++++++++++++++++++++++++++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 981bc14..14b6c0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,15 @@ ], "license": "ISC", "dependencies": { + "@xpressit/winning-poker-hand-rank": "^0.1.6", "cuffeo": "^1.2.2" } }, + "node_modules/@xpressit/winning-poker-hand-rank": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@xpressit/winning-poker-hand-rank/-/winning-poker-hand-rank-0.1.6.tgz", + "integrity": "sha512-l7b8GAKOT6k79qKF/SesCgQLvCjHZkhihf5QhgcL9w3hiya2JeCVyg07TVayoyO8PzDq56MH+yKk5rcbDMYScw==" + }, "node_modules/cuffeo": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cuffeo/-/cuffeo-1.2.2.tgz", diff --git a/package.json b/package.json index 8a04c1b..0c6dd72 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "author": "Flummi", "license": "ISC", "dependencies": { + "@xpressit/winning-poker-hand-rank": "^0.1.6", "cuffeo": "^1.2.2" } } diff --git a/src/inc/handranker.mjs b/src/inc/handranker.mjs index 3c913a4..8c4456e 100644 --- a/src/inc/handranker.mjs +++ b/src/inc/handranker.mjs @@ -35,7 +35,7 @@ export default new class handranker { p = this.#ranks.readUInt32LE(p * 4); return { - handType: p >> 12, + //handType: p >> 12, handRank: p & 0x00000fff, value: p, handName: this.handtypes[p >> 12] diff --git a/src/index.mjs b/src/index.mjs index c305bbf..bec3f2d 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,5 +1,6 @@ import cuffeo from 'cuffeo'; import handranker from './inc/handranker.mjs'; +import { rankHands } from '@xpressit/winning-poker-hand-rank'; import helper from './inc/helper.mjs'; const cfg = helper.config; @@ -47,6 +48,32 @@ bot.on("message", async e => { await e.write(`PRIVMSG ${e.user.nick} ${command}`); } } + if(e.message.startsWith(".cards ")) { + let cards = []; + try { + cards = JSON.parse(e.message.slice(7)); + } catch(err) { + return e.reply('das ist kein Array du Pflaumennase'); + } + + const all = cards; + const hand = cards.slice(0, 2); + const board = cards.slice(2); + + let oldrank; + let newrank; + + try { + oldrank = rankHands('texas', board, [hand])[0]; + newrank = handranker.evalHand(all); + } catch(err) { + return e.reply(JSON.stringify(err)); + } + + e.reply('old: ' + JSON.stringify(oldrank)); + e.reply('new: ' + JSON.stringify(newrank)); + return; + } if(e.message.match(new RegExp(`^${e.self.me.nickname}: Your bank account`))) { env.bank = +e.message.match(/is: (\d+) \(/)[1]; } @@ -149,7 +176,7 @@ bot.on("message", async e => { return e.reply(['huan!', 'f']); if(env.winchance < 6500) { - if(helper.rand(5) === 1 && env.callamount < (helper.rand(6,10) * 10)) { // bad hand, call anyway + if(helper.rand(5) === 1 && env.callamount < (helper.rand(2, 6) * 10)) { // bad hand, call anyway action = 'c'; } else { // bad hand, fold -- 2.45.2 From 6fe4171c002d02f8f3f3662709d60492ee60d499 Mon Sep 17 00:00:00 2001 From: Flummi Date: Thu, 13 Jul 2023 19:07:52 +0200 Subject: [PATCH 2/3] blah --- package.json | 1 - src/inc/constants.mjs | 1410 +++++++++++++++++++++++++++++++++++++++++ src/inc/helper.mjs | 2 +- src/inc/hr.mjs | 136 ++++ src/index.mjs | 52 +- 5 files changed, 1572 insertions(+), 29 deletions(-) create mode 100644 src/inc/constants.mjs create mode 100644 src/inc/hr.mjs diff --git a/package.json b/package.json index 0c6dd72..8a04c1b 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "author": "Flummi", "license": "ISC", "dependencies": { - "@xpressit/winning-poker-hand-rank": "^0.1.6", "cuffeo": "^1.2.2" } } diff --git a/src/inc/constants.mjs b/src/inc/constants.mjs new file mode 100644 index 0000000..87f03c0 --- /dev/null +++ b/src/inc/constants.mjs @@ -0,0 +1,1410 @@ +export default { + t7c5: [ + [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 5, 4, 6], [0, 1, 2, 3, 6, 4, 5], + [0, 1, 2, 4, 5, 3, 6], [0, 1, 2, 4, 6, 3, 5], [0, 1, 2, 5, 6, 3, 4], + [0, 1, 3, 4, 5, 2, 6], [0, 1, 3, 4, 6, 2, 5], [0, 1, 3, 5, 6, 2, 4], + [0, 1, 4, 5, 6, 2, 3], [0, 2, 3, 4, 5, 1, 6], [0, 2, 3, 4, 6, 1, 5], + [0, 2, 3, 5, 6, 1, 4], [0, 2, 4, 5, 6, 1, 3], [0, 3, 4, 5, 6, 1, 2], + [1, 2, 3, 4, 5, 0, 6], [1, 2, 3, 4, 6, 0, 5], [1, 2, 3, 5, 6, 0, 4], + [1, 2, 4, 5, 6, 0, 3], [1, 3, 4, 5, 6, 0, 2], [2, 3, 4, 5, 6, 0, 1] + ], + PRIMES: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41], + + runeToRank: { + '2': 0, '3': 1, '4': 2, '5': 3, + '6': 4, '7': 5, '8': 6, '9': 7, + T: 8, J: 9, Q: 10, K: 11, A: 12, + }, + + rankToRune: { + '12': 'A', '11': 'K', '10': 'Q', + '9': 'J', '8': 'T', '7': '9', + '6': '8', '5': '7', '4': '6', + '3': '5', '2': '4', '1': '3', + '0': '2' + }, + + suitToRune: { '8': 'C', '4': 'D', '2': 'H', '1': 'S' }, + runeToSuit: { S: 1, H: 2, D: 4, C: 8 }, + + fastFlushes: [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 1598, 0, 0, 0, 1597, 0, 1596, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1595, 0, 0, 0, + 0, 0, 0, 0, 1594, 0, 0, 0, 1593, 0, 1592, 1591, 0, 0, 0, 0, 0, 0, + 0, 0, 1590, 0, 0, 0, 1589, 0, 1588, 1587, 0, 0, 0, 0, 1586, 0, + 1585, 1584, 0, 0, 1583, 1582, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 1580, 0, 0, 0, + 1579, 0, 1578, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 1575, + 0, 1574, 1573, 0, 0, 0, 0, 1572, 0, 1571, 1570, 0, 0, 1569, 1568, + 0, 1567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1566, 0, 0, 0, 1565, 0, + 1564, 1563, 0, 0, 0, 0, 1562, 0, 1561, 1560, 0, 0, 1559, 1558, 0, + 1557, 0, 0, 0, 0, 0, 0, 1556, 0, 1555, 1554, 0, 0, 1553, 1552, 0, + 1551, 0, 0, 0, 0, 1550, 1549, 0, 1548, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1547, 0, 0, 0, + 0, 0, 0, 0, 1546, 0, 0, 0, 1545, 0, 1544, 1543, 0, 0, 0, 0, 0, 0, + 0, 0, 1542, 0, 0, 0, 1541, 0, 1540, 1539, 0, 0, 0, 0, 1538, 0, + 1537, 1536, 0, 0, 1535, 1534, 0, 1533, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1532, 0, 0, 0, 1531, 0, 1530, 1529, 0, 0, 0, 0, 1528, 0, 1527, + 1526, 0, 0, 1525, 1524, 0, 1523, 0, 0, 0, 0, 0, 0, 1522, 0, 1521, + 1520, 0, 0, 1519, 1518, 0, 1517, 0, 0, 0, 0, 1516, 1515, 0, 1514, + 0, 0, 0, 1513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1512, 0, + 0, 0, 1511, 0, 1510, 1509, 0, 0, 0, 0, 1508, 0, 1507, 1506, 0, 0, + 1505, 1504, 0, 1503, 0, 0, 0, 0, 0, 0, 1502, 0, 1501, 1500, 0, 0, + 1499, 1498, 0, 1497, 0, 0, 0, 0, 1496, 1495, 0, 1494, 0, 0, 0, + 1493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1492, 0, 1491, 1490, 0, 0, + 1489, 1488, 0, 1487, 0, 0, 0, 0, 1486, 1485, 0, 1484, 0, 0, 0, + 1483, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 1481, 0, 1480, 0, 0, 0, 1479, + 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, + 0, 0, 0, 1477, 0, 0, 0, 1476, 0, 1475, 1474, 0, 0, 0, 0, 0, 0, 0, + 0, 1473, 0, 0, 0, 1472, 0, 1471, 1470, 0, 0, 0, 0, 1469, 0, 1468, + 1467, 0, 0, 1466, 1465, 0, 1464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1463, 0, 0, 0, 1462, 0, 1461, 1460, 0, 0, 0, 0, 1459, 0, 1458, + 1457, 0, 0, 1456, 1455, 0, 1454, 0, 0, 0, 0, 0, 0, 1453, 0, 1452, + 1451, 0, 0, 1450, 1449, 0, 1448, 0, 0, 0, 0, 1447, 1446, 0, 1445, + 0, 0, 0, 1444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1443, 0, + 0, 0, 1442, 0, 1441, 1440, 0, 0, 0, 0, 1439, 0, 1438, 1437, 0, 0, + 1436, 1435, 0, 1434, 0, 0, 0, 0, 0, 0, 1433, 0, 1432, 1431, 0, 0, + 1430, 1429, 0, 1428, 0, 0, 0, 0, 1427, 1426, 0, 1425, 0, 0, 0, + 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1423, 0, 1422, 1421, 0, 0, + 1420, 1419, 0, 1418, 0, 0, 0, 0, 1417, 1416, 0, 1415, 0, 0, 0, + 1414, 0, 0, 0, 0, 0, 0, 0, 0, 1413, 1412, 0, 1411, 0, 0, 0, 1410, + 0, 0, 0, 0, 0, 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1408, 0, 0, 0, 1407, 0, 1406, 1405, 0, + 0, 0, 0, 1404, 0, 1403, 1402, 0, 0, 1401, 1400, 0, 1399, 0, 0, 0, + 0, 0, 0, 1398, 0, 1397, 1396, 0, 0, 1395, 1394, 0, 1393, 0, 0, 0, + 0, 1392, 1391, 0, 1390, 0, 0, 0, 1389, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1388, 0, 1387, 1386, 0, 0, 1385, 1384, 0, 1383, 0, 0, 0, 0, + 1382, 1381, 0, 1380, 0, 0, 0, 1379, 0, 0, 0, 0, 0, 0, 0, 0, 1378, + 1377, 0, 1376, 0, 0, 0, 1375, 0, 0, 0, 0, 0, 0, 0, 1374, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1373, 0, 1372, 1371, + 0, 0, 1370, 1369, 0, 1368, 0, 0, 0, 0, 1367, 1366, 0, 1365, 0, 0, + 0, 1364, 0, 0, 0, 0, 0, 0, 0, 0, 1363, 1362, 0, 1361, 0, 0, 0, + 1360, 0, 0, 0, 0, 0, 0, 0, 1359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1358, 1357, 0, 1356, 0, 0, 0, 1355, 0, 0, 0, 0, 0, + 0, 0, 1354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1353, 0, 0, 0, 0, 0, 0, 0, 1352, 0, 0, 0, 1351, 0, 1350, 1349, 0, + 0, 0, 0, 0, 0, 0, 0, 1348, 0, 0, 0, 1347, 0, 1346, 1345, 0, 0, 0, + 0, 1344, 0, 1343, 1342, 0, 0, 1341, 1340, 0, 1339, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1338, 0, 0, 0, 1337, 0, 1336, 1335, 0, 0, 0, 0, + 1334, 0, 1333, 1332, 0, 0, 1331, 1330, 0, 1329, 0, 0, 0, 0, 0, 0, + 1328, 0, 1327, 1326, 0, 0, 1325, 1324, 0, 1323, 0, 0, 0, 0, 1322, + 1321, 0, 1320, 0, 0, 0, 1319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1318, 0, 0, 0, 1317, 0, 1316, 1315, 0, 0, 0, 0, 1314, 0, + 1313, 1312, 0, 0, 1311, 1310, 0, 1309, 0, 0, 0, 0, 0, 0, 1308, 0, + 1307, 1306, 0, 0, 1305, 1304, 0, 1303, 0, 0, 0, 0, 1302, 1301, 0, + 1300, 0, 0, 0, 1299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1298, 0, 1297, + 1296, 0, 0, 1295, 1294, 0, 1293, 0, 0, 0, 0, 1292, 1291, 0, 1290, + 0, 0, 0, 1289, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 1287, 0, 1286, 0, 0, + 0, 1285, 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1283, 0, 0, 0, 1282, 0, 1281, + 1280, 0, 0, 0, 0, 1279, 0, 1278, 1277, 0, 0, 1276, 1275, 0, 1274, + 0, 0, 0, 0, 0, 0, 1273, 0, 1272, 1271, 0, 0, 1270, 1269, 0, 1268, + 0, 0, 0, 0, 1267, 1266, 0, 1265, 0, 0, 0, 1264, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1263, 0, 1262, 1261, 0, 0, 1260, 1259, 0, 1258, 0, 0, + 0, 0, 1257, 1256, 0, 1255, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, + 1253, 1252, 0, 1251, 0, 0, 0, 1250, 0, 0, 0, 0, 0, 0, 0, 1249, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1248, 0, 1247, + 1246, 0, 0, 1245, 1244, 0, 1243, 0, 0, 0, 0, 1242, 1241, 0, 1240, + 0, 0, 0, 1239, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 1237, 0, 1236, 0, 0, + 0, 1235, 0, 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1233, 1232, 0, 1231, 0, 0, 0, 1230, 0, 0, 0, 0, + 0, 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, + 1226, 0, 1225, 1224, 0, 0, 0, 0, 1223, 0, 1222, 1221, 0, 0, 1220, + 1219, 0, 1218, 0, 0, 0, 0, 0, 0, 1217, 0, 1216, 1215, 0, 0, 1214, + 1213, 0, 1212, 0, 0, 0, 0, 1211, 1210, 0, 1209, 0, 0, 0, 1208, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 0, 1206, 1205, 0, 0, 1204, 1203, + 0, 1202, 0, 0, 0, 0, 1201, 1200, 0, 1199, 0, 0, 0, 1198, 0, 0, 0, + 0, 0, 0, 0, 0, 1197, 1196, 0, 1195, 0, 0, 0, 1194, 0, 0, 0, 0, 0, + 0, 0, 1193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1192, 0, 1191, 1190, 0, 0, 1189, 1188, 0, 1187, 0, 0, 0, 0, 1186, + 1185, 0, 1184, 0, 0, 0, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 1182, 1181, + 0, 1180, 0, 0, 0, 1179, 0, 0, 0, 0, 0, 0, 0, 1178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 1176, 0, 1175, 0, 0, 0, + 1174, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1171, 0, + 1170, 1169, 0, 0, 1168, 1167, 0, 1166, 0, 0, 0, 0, 1165, 1164, 0, + 1163, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 1160, 0, 1159, + 0, 0, 0, 1158, 0, 0, 0, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1156, 1155, 0, 1154, 0, 0, 0, 1153, 0, 0, + 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1150, 1149, 0, 1148, 0, 0, 0, + 1147, 0, 0, 0, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 1142, + 0, 1141, 1140, 0, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 1138, 0, + 1137, 1136, 0, 0, 0, 0, 1135, 0, 1134, 1133, 0, 0, 1132, 1131, 0, + 1130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 0, 0, 0, 1128, 0, 1127, + 1126, 0, 0, 0, 0, 1125, 0, 1124, 1123, 0, 0, 1122, 1121, 0, 1120, + 0, 0, 0, 0, 0, 0, 1119, 0, 1118, 1117, 0, 0, 1116, 1115, 0, 1114, + 0, 0, 0, 0, 1113, 1112, 0, 1111, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1109, 0, 0, 0, 1108, 0, 1107, 1106, 0, 0, + 0, 0, 1105, 0, 1104, 1103, 0, 0, 1102, 1101, 0, 1100, 0, 0, 0, 0, + 0, 0, 1099, 0, 1098, 1097, 0, 0, 1096, 1095, 0, 1094, 0, 0, 0, 0, + 1093, 1092, 0, 1091, 0, 0, 0, 1090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1089, 0, 1088, 1087, 0, 0, 1086, 1085, 0, 1084, 0, 0, 0, 0, 1083, + 1082, 0, 1081, 0, 0, 0, 1080, 0, 0, 0, 0, 0, 0, 0, 0, 1079, 1078, + 0, 1077, 0, 0, 0, 1076, 0, 0, 0, 0, 0, 0, 0, 1075, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 0, 0, 0, + 1073, 0, 1072, 1071, 0, 0, 0, 0, 1070, 0, 1069, 1068, 0, 0, 1067, + 1066, 0, 1065, 0, 0, 0, 0, 0, 0, 1064, 0, 1063, 1062, 0, 0, 1061, + 1060, 0, 1059, 0, 0, 0, 0, 1058, 1057, 0, 1056, 0, 0, 0, 1055, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1054, 0, 1053, 1052, 0, 0, 1051, 1050, + 0, 1049, 0, 0, 0, 0, 1048, 1047, 0, 1046, 0, 0, 0, 1045, 0, 0, 0, + 0, 0, 0, 0, 0, 1044, 1043, 0, 1042, 0, 0, 0, 1041, 0, 0, 0, 0, 0, + 0, 0, 1040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1039, 0, 1038, 1037, 0, 0, 1036, 1035, 0, 1034, 0, 0, 0, 0, 1033, + 1032, 0, 1031, 0, 0, 0, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 1029, 1028, + 0, 1027, 0, 0, 0, 1026, 0, 0, 0, 0, 0, 0, 0, 1025, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 1023, 0, 1022, 0, 0, 0, + 1021, 0, 0, 0, 0, 0, 0, 0, 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1018, 0, 0, 0, 1017, 0, 1016, 1015, 0, 0, 0, 0, 1014, 0, 1013, + 1012, 0, 0, 1011, 1010, 0, 1009, 0, 0, 0, 0, 0, 0, 1008, 0, 1007, + 1006, 0, 0, 1005, 1004, 0, 1003, 0, 0, 0, 0, 1002, 1001, 0, 1000, + 0, 0, 0, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 998, 0, 997, 996, 0, + 0, 995, 994, 0, 993, 0, 0, 0, 0, 992, 991, 0, 990, 0, 0, 0, 989, + 0, 0, 0, 0, 0, 0, 0, 0, 988, 987, 0, 986, 0, 0, 0, 985, 0, 0, 0, + 0, 0, 0, 0, 984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 983, 0, 982, 981, 0, 0, 980, 979, 0, 978, 0, 0, 0, 0, 977, + 976, 0, 975, 0, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 973, 972, 0, + 971, 0, 0, 0, 970, 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 967, 0, 966, 0, 0, 0, 965, 0, 0, + 0, 0, 0, 0, 0, 964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 963, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 962, 0, 961, 960, 0, 0, + 959, 958, 0, 957, 0, 0, 0, 0, 956, 955, 0, 954, 0, 0, 0, 953, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 951, 0, 950, 0, 0, 0, 949, 0, 0, 0, 0, + 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 947, 946, 0, 945, 0, 0, 0, 944, 0, 0, 0, 0, 0, 0, 0, 943, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 941, 940, 0, 939, 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, 0, + 937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 936, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 934, 0, 0, 0, 933, 0, 932, + 931, 0, 0, 0, 0, 930, 0, 929, 928, 0, 0, 927, 926, 0, 925, 0, 0, + 0, 0, 0, 0, 924, 0, 923, 922, 0, 0, 921, 920, 0, 919, 0, 0, 0, 0, + 918, 917, 0, 916, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 914, 0, 913, 912, 0, 0, 911, 910, 0, 909, 0, 0, 0, 0, 908, 907, + 0, 906, 0, 0, 0, 905, 0, 0, 0, 0, 0, 0, 0, 0, 904, 903, 0, 902, + 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 899, 0, 898, 897, 0, 0, 896, 895, + 0, 894, 0, 0, 0, 0, 893, 892, 0, 891, 0, 0, 0, 890, 0, 0, 0, 0, + 0, 0, 0, 0, 889, 888, 0, 887, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, + 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, 883, 0, + 882, 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 878, 0, 877, 876, 0, 0, 875, 874, 0, 873, 0, 0, 0, 0, 872, 871, + 0, 870, 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, 0, 0, 868, 867, 0, 866, + 0, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 863, 862, 0, 861, 0, 0, 0, 860, 0, 0, 0, + 0, 0, 0, 0, 859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 856, 0, 855, 0, 0, 0, + 854, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 849, + 848, 0, 0, 847, 846, 0, 845, 0, 0, 0, 0, 844, 843, 0, 842, 0, 0, + 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, 840, 839, 0, 838, 0, 0, 0, 837, + 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 835, 834, 0, 833, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, + 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 829, 828, 0, 827, 0, 0, 0, 826, 0, 0, 0, 0, + 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 824, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 822, 821, 0, 820, 0, 0, 0, 819, 0, 0, + 0, 0, 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 814, 0, 813, 812, 0, 0, 0, + 0, 0, 0, 0, 0, 811, 0, 0, 0, 810, 0, 809, 808, 0, 0, 0, 0, 807, + 0, 806, 805, 0, 0, 804, 803, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 801, 0, 0, 0, 800, 0, 799, 798, 0, 0, 0, 0, 797, 0, 796, 795, + 0, 0, 794, 793, 0, 792, 0, 0, 0, 0, 0, 0, 791, 0, 790, 789, 0, 0, + 788, 787, 0, 786, 0, 0, 0, 0, 785, 784, 0, 783, 0, 0, 0, 782, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 780, 0, 779, + 778, 0, 0, 0, 0, 777, 0, 776, 775, 0, 0, 774, 773, 0, 772, 0, 0, + 0, 0, 0, 0, 771, 0, 770, 769, 0, 0, 768, 767, 0, 766, 0, 0, 0, 0, + 765, 764, 0, 763, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 761, 0, 760, 759, 0, 0, 758, 757, 0, 756, 0, 0, 0, 0, 755, 754, + 0, 753, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 751, 750, 0, 749, + 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 745, 0, + 744, 743, 0, 0, 0, 0, 742, 0, 741, 740, 0, 0, 739, 738, 0, 737, + 0, 0, 0, 0, 0, 0, 736, 0, 735, 734, 0, 0, 733, 732, 0, 731, 0, 0, + 0, 0, 730, 729, 0, 728, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 726, 0, 725, 724, 0, 0, 723, 722, 0, 721, 0, 0, 0, 0, 720, + 719, 0, 718, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 716, 715, 0, + 714, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 710, 709, 0, 0, 708, + 707, 0, 706, 0, 0, 0, 0, 705, 704, 0, 703, 0, 0, 0, 702, 0, 0, 0, + 0, 0, 0, 0, 0, 701, 700, 0, 699, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, + 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 695, + 0, 694, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 690, 0, 0, 0, 689, 0, 688, 687, 0, 0, 0, 0, 686, + 0, 685, 684, 0, 0, 683, 682, 0, 681, 0, 0, 0, 0, 0, 0, 680, 0, + 679, 678, 0, 0, 677, 676, 0, 675, 0, 0, 0, 0, 674, 673, 0, 672, + 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 669, 668, 0, + 0, 667, 666, 0, 665, 0, 0, 0, 0, 664, 663, 0, 662, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 0, 660, 659, 0, 658, 0, 0, 0, 657, 0, 0, 0, + 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 655, 0, 654, 653, 0, 0, 652, 651, 0, 650, 0, 0, 0, 0, 649, + 648, 0, 647, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 645, 644, 0, + 643, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 639, 0, 638, 0, 0, 0, 637, 0, 0, + 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 633, 632, 0, 0, + 631, 630, 0, 629, 0, 0, 0, 0, 628, 627, 0, 626, 0, 0, 0, 625, 0, + 0, 0, 0, 0, 0, 0, 0, 624, 623, 0, 622, 0, 0, 0, 621, 0, 0, 0, 0, + 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 619, 618, 0, 617, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 613, 612, 0, 611, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, + 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 605, 0, 604, + 603, 0, 0, 0, 0, 602, 0, 601, 600, 0, 0, 599, 598, 0, 597, 0, 0, + 0, 0, 0, 0, 596, 0, 595, 594, 0, 0, 593, 592, 0, 591, 0, 0, 0, 0, + 590, 589, 0, 588, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 586, 0, 585, 584, 0, 0, 583, 582, 0, 581, 0, 0, 0, 0, 580, 579, + 0, 578, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 576, 575, 0, 574, + 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 570, 569, 0, 0, 568, 567, + 0, 566, 0, 0, 0, 0, 565, 564, 0, 563, 0, 0, 0, 562, 0, 0, 0, 0, + 0, 0, 0, 0, 561, 560, 0, 559, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, + 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 555, 0, + 554, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 550, 0, 549, 548, 0, 0, 547, 546, 0, 545, 0, 0, 0, 0, 544, 543, + 0, 542, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 540, 539, 0, 538, + 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 535, 534, 0, 533, 0, 0, 0, 532, 0, 0, 0, + 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 528, 0, 527, 0, 0, 0, + 526, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 521, + 520, 0, 0, 519, 518, 0, 517, 0, 0, 0, 0, 516, 515, 0, 514, 0, 0, + 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 512, 511, 0, 510, 0, 0, 0, 509, + 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 507, 506, 0, 505, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, + 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 500, 0, 499, 0, 0, 0, 498, 0, 0, 0, 0, + 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 493, 0, 492, 0, 0, 0, 491, 0, 0, + 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 485, 0, + 484, 483, 0, 0, 0, 0, 482, 0, 481, 480, 0, 0, 479, 478, 0, 477, + 0, 0, 0, 0, 0, 0, 476, 0, 475, 474, 0, 0, 473, 472, 0, 471, 0, 0, + 0, 0, 470, 469, 0, 468, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 466, 0, 465, 464, 0, 0, 463, 462, 0, 461, 0, 0, 0, 0, 460, + 459, 0, 458, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 456, 455, 0, + 454, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 450, 449, 0, 0, 448, + 447, 0, 446, 0, 0, 0, 0, 445, 444, 0, 443, 0, 0, 0, 442, 0, 0, 0, + 0, 0, 0, 0, 0, 441, 440, 0, 439, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, + 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 435, + 0, 434, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 0, 429, 428, 0, 0, 427, 426, 0, 425, 0, 0, 0, 0, 424, + 423, 0, 422, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 420, 419, 0, + 418, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 414, 0, 413, 0, 0, 0, 412, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 408, 0, 407, 0, 0, 0, + 406, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 401, + 400, 0, 0, 399, 398, 0, 397, 0, 0, 0, 0, 396, 395, 0, 394, 0, 0, + 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 392, 391, 0, 390, 0, 0, 0, 389, + 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 387, 386, 0, 385, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, + 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 381, 380, 0, 379, 0, 0, 0, 378, 0, 0, 0, 0, + 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 373, 0, 372, 0, 0, 0, 371, 0, 0, + 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 365, 364, 0, 0, 363, 362, + 0, 361, 0, 0, 0, 0, 360, 359, 0, 358, 0, 0, 0, 357, 0, 0, 0, 0, + 0, 0, 0, 0, 356, 355, 0, 354, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, + 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 350, 0, + 349, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, + 344, 0, 343, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 338, 337, 0, 336, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 330, 329, 0, 328, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 + ], + fastUnique5: [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7462, 0, 0, 0, 0, 0, 0, 0, 7461, 0, 0, 0, 7460, 0, + 7459, 1607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7458, + 0, 0, 0, 0, 0, 0, 0, 7457, 0, 0, 0, 7456, 0, 7455, 7454, 0, 0, 0, + 0, 0, 0, 0, 0, 7453, 0, 0, 0, 7452, 0, 7451, 7450, 0, 0, 0, 0, + 7449, 0, 7448, 7447, 0, 0, 7446, 7445, 0, 1606, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7444, 0, 0, 0, 0, 0, 0, 0, + 7443, 0, 0, 0, 7442, 0, 7441, 7440, 0, 0, 0, 0, 0, 0, 0, 0, 7439, + 0, 0, 0, 7438, 0, 7437, 7436, 0, 0, 0, 0, 7435, 0, 7434, 7433, 0, + 0, 7432, 7431, 0, 7430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7429, 0, 0, + 0, 7428, 0, 7427, 7426, 0, 0, 0, 0, 7425, 0, 7424, 7423, 0, 0, + 7422, 7421, 0, 7420, 0, 0, 0, 0, 0, 0, 7419, 0, 7418, 7417, 0, 0, + 7416, 7415, 0, 7414, 0, 0, 0, 0, 7413, 7412, 0, 7411, 0, 0, 0, + 1605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7410, 0, 0, 0, 0, 0, 0, 0, 7409, 0, 0, 0, 7408, 0, 7407, + 7406, 0, 0, 0, 0, 0, 0, 0, 0, 7405, 0, 0, 0, 7404, 0, 7403, 7402, + 0, 0, 0, 0, 7401, 0, 7400, 7399, 0, 0, 7398, 7397, 0, 7396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7395, 0, 0, 0, 7394, 0, 7393, 7392, 0, 0, + 0, 0, 7391, 0, 7390, 7389, 0, 0, 7388, 7387, 0, 7386, 0, 0, 0, 0, + 0, 0, 7385, 0, 7384, 7383, 0, 0, 7382, 7381, 0, 7380, 0, 0, 0, 0, + 7379, 7378, 0, 7377, 0, 0, 0, 7376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7375, 0, 0, 0, 7374, 0, 7373, 7372, 0, 0, 0, 0, 7371, + 0, 7370, 7369, 0, 0, 7368, 7367, 0, 7366, 0, 0, 0, 0, 0, 0, 7365, + 0, 7364, 7363, 0, 0, 7362, 7361, 0, 7360, 0, 0, 0, 0, 7359, 7358, + 0, 7357, 0, 0, 0, 7356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7355, 0, + 7354, 7353, 0, 0, 7352, 7351, 0, 7350, 0, 0, 0, 0, 7349, 7348, 0, + 7347, 0, 0, 0, 7346, 0, 0, 0, 0, 0, 0, 0, 0, 7345, 7344, 0, 7343, + 0, 0, 0, 7342, 0, 0, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7341, 0, 0, 0, 0, 0, 0, 0, 7340, 0, 0, 0, 7339, 0, 7338, 7337, 0, + 0, 0, 0, 0, 0, 0, 0, 7336, 0, 0, 0, 7335, 0, 7334, 7333, 0, 0, 0, + 0, 7332, 0, 7331, 7330, 0, 0, 7329, 7328, 0, 7327, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7326, 0, 0, 0, 7325, 0, 7324, 7323, 0, 0, 0, 0, + 7322, 0, 7321, 7320, 0, 0, 7319, 7318, 0, 7317, 0, 0, 0, 0, 0, 0, + 7316, 0, 7315, 7314, 0, 0, 7313, 7312, 0, 7311, 0, 0, 0, 0, 7310, + 7309, 0, 7308, 0, 0, 0, 7307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7306, 0, 0, 0, 7305, 0, 7304, 7303, 0, 0, 0, 0, 7302, 0, + 7301, 7300, 0, 0, 7299, 7298, 0, 7297, 0, 0, 0, 0, 0, 0, 7296, 0, + 7295, 7294, 0, 0, 7293, 7292, 0, 7291, 0, 0, 0, 0, 7290, 7289, 0, + 7288, 0, 0, 0, 7287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7286, 0, 7285, + 7284, 0, 0, 7283, 7282, 0, 7281, 0, 0, 0, 0, 7280, 7279, 0, 7278, + 0, 0, 0, 7277, 0, 0, 0, 0, 0, 0, 0, 0, 7276, 7275, 0, 7274, 0, 0, + 0, 7273, 0, 0, 0, 0, 0, 0, 0, 7272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7271, 0, 0, 0, 7270, 0, 7269, + 7268, 0, 0, 0, 0, 7267, 0, 7266, 7265, 0, 0, 7264, 7263, 0, 7262, + 0, 0, 0, 0, 0, 0, 7261, 0, 7260, 7259, 0, 0, 7258, 7257, 0, 7256, + 0, 0, 0, 0, 7255, 7254, 0, 7253, 0, 0, 0, 7252, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7251, 0, 7250, 7249, 0, 0, 7248, 7247, 0, 7246, 0, 0, + 0, 0, 7245, 7244, 0, 7243, 0, 0, 0, 7242, 0, 0, 0, 0, 0, 0, 0, 0, + 7241, 7240, 0, 7239, 0, 0, 0, 7238, 0, 0, 0, 0, 0, 0, 0, 7237, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7236, 0, 7235, + 7234, 0, 0, 7233, 7232, 0, 7231, 0, 0, 0, 0, 7230, 7229, 0, 7228, + 0, 0, 0, 7227, 0, 0, 0, 0, 0, 0, 0, 0, 7226, 7225, 0, 7224, 0, 0, + 0, 7223, 0, 0, 0, 0, 0, 0, 0, 7222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7221, 7220, 0, 7219, 0, 0, 0, 7218, 0, 0, 0, 0, + 0, 0, 0, 7217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1603, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7216, 0, 0, 0, 0, 0, 0, 0, 7215, 0, 0, 0, 7214, 0, 7213, + 7212, 0, 0, 0, 0, 0, 0, 0, 0, 7211, 0, 0, 0, 7210, 0, 7209, 7208, + 0, 0, 0, 0, 7207, 0, 7206, 7205, 0, 0, 7204, 7203, 0, 7202, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7201, 0, 0, 0, 7200, 0, 7199, 7198, 0, 0, + 0, 0, 7197, 0, 7196, 7195, 0, 0, 7194, 7193, 0, 7192, 0, 0, 0, 0, + 0, 0, 7191, 0, 7190, 7189, 0, 0, 7188, 7187, 0, 7186, 0, 0, 0, 0, + 7185, 7184, 0, 7183, 0, 0, 0, 7182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7181, 0, 0, 0, 7180, 0, 7179, 7178, 0, 0, 0, 0, 7177, + 0, 7176, 7175, 0, 0, 7174, 7173, 0, 7172, 0, 0, 0, 0, 0, 0, 7171, + 0, 7170, 7169, 0, 0, 7168, 7167, 0, 7166, 0, 0, 0, 0, 7165, 7164, + 0, 7163, 0, 0, 0, 7162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7161, 0, + 7160, 7159, 0, 0, 7158, 7157, 0, 7156, 0, 0, 0, 0, 7155, 7154, 0, + 7153, 0, 0, 0, 7152, 0, 0, 0, 0, 0, 0, 0, 0, 7151, 7150, 0, 7149, + 0, 0, 0, 7148, 0, 0, 0, 0, 0, 0, 0, 7147, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7146, 0, 0, 0, 7145, 0, + 7144, 7143, 0, 0, 0, 0, 7142, 0, 7141, 7140, 0, 0, 7139, 7138, 0, + 7137, 0, 0, 0, 0, 0, 0, 7136, 0, 7135, 7134, 0, 0, 7133, 7132, 0, + 7131, 0, 0, 0, 0, 7130, 7129, 0, 7128, 0, 0, 0, 7127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7126, 0, 7125, 7124, 0, 0, 7123, 7122, 0, 7121, + 0, 0, 0, 0, 7120, 7119, 0, 7118, 0, 0, 0, 7117, 0, 0, 0, 0, 0, 0, + 0, 0, 7116, 7115, 0, 7114, 0, 0, 0, 7113, 0, 0, 0, 0, 0, 0, 0, + 7112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7111, + 0, 7110, 7109, 0, 0, 7108, 7107, 0, 7106, 0, 0, 0, 0, 7105, 7104, + 0, 7103, 0, 0, 0, 7102, 0, 0, 0, 0, 0, 0, 0, 0, 7101, 7100, 0, + 7099, 0, 0, 0, 7098, 0, 0, 0, 0, 0, 0, 0, 7097, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7096, 7095, 0, 7094, 0, 0, 0, 7093, + 0, 0, 0, 0, 0, 0, 0, 7092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7090, + 0, 0, 0, 7089, 0, 7088, 7087, 0, 0, 0, 0, 7086, 0, 7085, 7084, 0, + 0, 7083, 7082, 0, 7081, 0, 0, 0, 0, 0, 0, 7080, 0, 7079, 7078, 0, + 0, 7077, 7076, 0, 7075, 0, 0, 0, 0, 7074, 7073, 0, 7072, 0, 0, 0, + 7071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7070, 0, 7069, 7068, 0, 0, + 7067, 7066, 0, 7065, 0, 0, 0, 0, 7064, 7063, 0, 7062, 0, 0, 0, + 7061, 0, 0, 0, 0, 0, 0, 0, 0, 7060, 7059, 0, 7058, 0, 0, 0, 7057, + 0, 0, 0, 0, 0, 0, 0, 7056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7055, 0, 7054, 7053, 0, 0, 7052, 7051, 0, 7050, 0, + 0, 0, 0, 7049, 7048, 0, 7047, 0, 0, 0, 7046, 0, 0, 0, 0, 0, 0, 0, + 0, 7045, 7044, 0, 7043, 0, 0, 0, 7042, 0, 0, 0, 0, 0, 0, 0, 7041, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7040, 7039, 0, + 7038, 0, 0, 0, 7037, 0, 0, 0, 0, 0, 0, 0, 7036, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7034, 0, 7033, 7032, 0, 0, 7031, 7030, 0, 7029, 0, 0, 0, 0, + 7028, 7027, 0, 7026, 0, 0, 0, 7025, 0, 0, 0, 0, 0, 0, 0, 0, 7024, + 7023, 0, 7022, 0, 0, 0, 7021, 0, 0, 0, 0, 0, 0, 0, 7020, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7019, 7018, 0, 7017, 0, 0, + 0, 7016, 0, 0, 0, 0, 0, 0, 0, 7015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7013, 7012, 0, + 7011, 0, 0, 0, 7010, 0, 0, 0, 0, 0, 0, 0, 7009, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1602, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7007, 0, 0, 0, 0, 0, 0, 0, + 7006, 0, 0, 0, 7005, 0, 7004, 7003, 0, 0, 0, 0, 0, 0, 0, 0, 7002, + 0, 0, 0, 7001, 0, 7000, 6999, 0, 0, 0, 0, 6998, 0, 6997, 6996, 0, + 0, 6995, 6994, 0, 6993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6992, 0, 0, + 0, 6991, 0, 6990, 6989, 0, 0, 0, 0, 6988, 0, 6987, 6986, 0, 0, + 6985, 6984, 0, 6983, 0, 0, 0, 0, 0, 0, 6982, 0, 6981, 6980, 0, 0, + 6979, 6978, 0, 6977, 0, 0, 0, 0, 6976, 6975, 0, 6974, 0, 0, 0, + 6973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6972, 0, 0, 0, + 6971, 0, 6970, 6969, 0, 0, 0, 0, 6968, 0, 6967, 6966, 0, 0, 6965, + 6964, 0, 6963, 0, 0, 0, 0, 0, 0, 6962, 0, 6961, 6960, 0, 0, 6959, + 6958, 0, 6957, 0, 0, 0, 0, 6956, 6955, 0, 6954, 0, 0, 0, 6953, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6952, 0, 6951, 6950, 0, 0, 6949, 6948, + 0, 6947, 0, 0, 0, 0, 6946, 6945, 0, 6944, 0, 0, 0, 6943, 0, 0, 0, + 0, 0, 0, 0, 0, 6942, 6941, 0, 6940, 0, 0, 0, 6939, 0, 0, 0, 0, 0, + 0, 0, 6938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6937, 0, 0, 0, 6936, 0, 6935, 6934, 0, 0, 0, 0, 6933, + 0, 6932, 6931, 0, 0, 6930, 6929, 0, 6928, 0, 0, 0, 0, 0, 0, 6927, + 0, 6926, 6925, 0, 0, 6924, 6923, 0, 6922, 0, 0, 0, 0, 6921, 6920, + 0, 6919, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6917, 0, + 6916, 6915, 0, 0, 6914, 6913, 0, 6912, 0, 0, 0, 0, 6911, 6910, 0, + 6909, 0, 0, 0, 6908, 0, 0, 0, 0, 0, 0, 0, 0, 6907, 6906, 0, 6905, + 0, 0, 0, 6904, 0, 0, 0, 0, 0, 0, 0, 6903, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6902, 0, 6901, 6900, 0, 0, 6899, + 6898, 0, 6897, 0, 0, 0, 0, 6896, 6895, 0, 6894, 0, 0, 0, 6893, 0, + 0, 0, 0, 0, 0, 0, 0, 6892, 6891, 0, 6890, 0, 0, 0, 6889, 0, 0, 0, + 0, 0, 0, 0, 6888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6887, 6886, 0, 6885, 0, 0, 0, 6884, 0, 0, 0, 0, 0, 0, 0, 6883, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6882, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6881, 0, 0, 0, 6880, 0, 6879, 6878, + 0, 0, 0, 0, 6877, 0, 6876, 6875, 0, 0, 6874, 6873, 0, 6872, 0, 0, + 0, 0, 0, 0, 6871, 0, 6870, 6869, 0, 0, 6868, 6867, 0, 6866, 0, 0, + 0, 0, 6865, 6864, 0, 6863, 0, 0, 0, 6862, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6861, 0, 6860, 6859, 0, 0, 6858, 6857, 0, 6856, 0, 0, 0, 0, + 6855, 6854, 0, 6853, 0, 0, 0, 6852, 0, 0, 0, 0, 0, 0, 0, 0, 6851, + 6850, 0, 6849, 0, 0, 0, 6848, 0, 0, 0, 0, 0, 0, 0, 6847, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6846, 0, 6845, 6844, + 0, 0, 6843, 6842, 0, 6841, 0, 0, 0, 0, 6840, 6839, 0, 6838, 0, 0, + 0, 6837, 0, 0, 0, 0, 0, 0, 0, 0, 6836, 6835, 0, 6834, 0, 0, 0, + 6833, 0, 0, 0, 0, 0, 0, 0, 6832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6831, 6830, 0, 6829, 0, 0, 0, 6828, 0, 0, 0, 0, 0, + 0, 0, 6827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6826, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6825, 0, 6824, 6823, 0, 0, 6822, + 6821, 0, 6820, 0, 0, 0, 0, 6819, 6818, 0, 6817, 0, 0, 0, 6816, 0, + 0, 0, 0, 0, 0, 0, 0, 6815, 6814, 0, 6813, 0, 0, 0, 6812, 0, 0, 0, + 0, 0, 0, 0, 6811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6810, 6809, 0, 6808, 0, 0, 0, 6807, 0, 0, 0, 0, 0, 0, 0, 6806, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6805, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6804, 6803, 0, 6802, 0, 0, 0, 6801, 0, 0, 0, 0, 0, 0, + 0, 6800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6799, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6797, 0, 0, 0, 6796, 0, + 6795, 6794, 0, 0, 0, 0, 6793, 0, 6792, 6791, 0, 0, 6790, 6789, 0, + 6788, 0, 0, 0, 0, 0, 0, 6787, 0, 6786, 6785, 0, 0, 6784, 6783, 0, + 6782, 0, 0, 0, 0, 6781, 6780, 0, 6779, 0, 0, 0, 6778, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6777, 0, 6776, 6775, 0, 0, 6774, 6773, 0, 6772, + 0, 0, 0, 0, 6771, 6770, 0, 6769, 0, 0, 0, 6768, 0, 0, 0, 0, 0, 0, + 0, 0, 6767, 6766, 0, 6765, 0, 0, 0, 6764, 0, 0, 0, 0, 0, 0, 0, + 6763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6762, + 0, 6761, 6760, 0, 0, 6759, 6758, 0, 6757, 0, 0, 0, 0, 6756, 6755, + 0, 6754, 0, 0, 0, 6753, 0, 0, 0, 0, 0, 0, 0, 0, 6752, 6751, 0, + 6750, 0, 0, 0, 6749, 0, 0, 0, 0, 0, 0, 0, 6748, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6747, 6746, 0, 6745, 0, 0, 0, 6744, + 0, 0, 0, 0, 0, 0, 0, 6743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6741, 0, 6740, + 6739, 0, 0, 6738, 6737, 0, 6736, 0, 0, 0, 0, 6735, 6734, 0, 6733, + 0, 0, 0, 6732, 0, 0, 0, 0, 0, 0, 0, 0, 6731, 6730, 0, 6729, 0, 0, + 0, 6728, 0, 0, 0, 0, 0, 0, 0, 6727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6726, 6725, 0, 6724, 0, 0, 0, 6723, 0, 0, 0, 0, + 0, 0, 0, 6722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6721, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6720, 6719, 0, 6718, 0, 0, 0, 6717, + 0, 0, 0, 0, 0, 0, 0, 6716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6714, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6713, 0, 6712, 6711, + 0, 0, 6710, 6709, 0, 6708, 0, 0, 0, 0, 6707, 6706, 0, 6705, 0, 0, + 0, 6704, 0, 0, 0, 0, 0, 0, 0, 0, 6703, 6702, 0, 6701, 0, 0, 0, + 6700, 0, 0, 0, 0, 0, 0, 0, 6699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6698, 6697, 0, 6696, 0, 0, 0, 6695, 0, 0, 0, 0, 0, + 0, 0, 6694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6693, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6692, 6691, 0, 6690, 0, 0, 0, 6689, 0, + 0, 0, 0, 0, 0, 0, 6688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6686, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6685, 6684, 0, 6683, 0, 0, 0, + 6682, 0, 0, 0, 0, 0, 0, 0, 6681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6679, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1601, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1609, 0, 0, 0, 0, 0, 0, 0, 6678, 0, 0, 0, 6677, 0, + 6676, 6675, 0, 0, 0, 0, 0, 0, 0, 0, 6674, 0, 0, 0, 6673, 0, 6672, + 6671, 0, 0, 0, 0, 6670, 0, 6669, 6668, 0, 0, 6667, 6666, 0, 6665, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6664, 0, 0, 0, 6663, 0, 6662, 6661, + 0, 0, 0, 0, 6660, 0, 6659, 6658, 0, 0, 6657, 6656, 0, 6655, 0, 0, + 0, 0, 0, 0, 6654, 0, 6653, 6652, 0, 0, 6651, 6650, 0, 6649, 0, 0, + 0, 0, 6648, 6647, 0, 6646, 0, 0, 0, 6645, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6644, 0, 0, 0, 6643, 0, 6642, 6641, 0, 0, 0, 0, + 6640, 0, 6639, 6638, 0, 0, 6637, 6636, 0, 6635, 0, 0, 0, 0, 0, 0, + 6634, 0, 6633, 6632, 0, 0, 6631, 6630, 0, 6629, 0, 0, 0, 0, 6628, + 6627, 0, 6626, 0, 0, 0, 6625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6624, + 0, 6623, 6622, 0, 0, 6621, 6620, 0, 6619, 0, 0, 0, 0, 6618, 6617, + 0, 6616, 0, 0, 0, 6615, 0, 0, 0, 0, 0, 0, 0, 0, 6614, 6613, 0, + 6612, 0, 0, 0, 6611, 0, 0, 0, 0, 0, 0, 0, 6610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6609, 0, 0, 0, + 6608, 0, 6607, 6606, 0, 0, 0, 0, 6605, 0, 6604, 6603, 0, 0, 6602, + 6601, 0, 6600, 0, 0, 0, 0, 0, 0, 6599, 0, 6598, 6597, 0, 0, 6596, + 6595, 0, 6594, 0, 0, 0, 0, 6593, 6592, 0, 6591, 0, 0, 0, 6590, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6589, 0, 6588, 6587, 0, 0, 6586, 6585, + 0, 6584, 0, 0, 0, 0, 6583, 6582, 0, 6581, 0, 0, 0, 6580, 0, 0, 0, + 0, 0, 0, 0, 0, 6579, 6578, 0, 6577, 0, 0, 0, 6576, 0, 0, 0, 0, 0, + 0, 0, 6575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6574, 0, 6573, 6572, 0, 0, 6571, 6570, 0, 6569, 0, 0, 0, 0, 6568, + 6567, 0, 6566, 0, 0, 0, 6565, 0, 0, 0, 0, 0, 0, 0, 0, 6564, 6563, + 0, 6562, 0, 0, 0, 6561, 0, 0, 0, 0, 0, 0, 0, 6560, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6559, 6558, 0, 6557, 0, 0, 0, + 6556, 0, 0, 0, 0, 0, 0, 0, 6555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6553, 0, 0, 0, 6552, 0, 6551, 6550, 0, 0, 0, 0, 6549, 0, 6548, + 6547, 0, 0, 6546, 6545, 0, 6544, 0, 0, 0, 0, 0, 0, 6543, 0, 6542, + 6541, 0, 0, 6540, 6539, 0, 6538, 0, 0, 0, 0, 6537, 6536, 0, 6535, + 0, 0, 0, 6534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6533, 0, 6532, 6531, + 0, 0, 6530, 6529, 0, 6528, 0, 0, 0, 0, 6527, 6526, 0, 6525, 0, 0, + 0, 6524, 0, 0, 0, 0, 0, 0, 0, 0, 6523, 6522, 0, 6521, 0, 0, 0, + 6520, 0, 0, 0, 0, 0, 0, 0, 6519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6518, 0, 6517, 6516, 0, 0, 6515, 6514, 0, + 6513, 0, 0, 0, 0, 6512, 6511, 0, 6510, 0, 0, 0, 6509, 0, 0, 0, 0, + 0, 0, 0, 0, 6508, 6507, 0, 6506, 0, 0, 0, 6505, 0, 0, 0, 0, 0, 0, + 0, 6504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6503, + 6502, 0, 6501, 0, 0, 0, 6500, 0, 0, 0, 0, 0, 0, 0, 6499, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6498, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6497, 0, 6496, 6495, 0, 0, 6494, 6493, 0, 6492, 0, 0, + 0, 0, 6491, 6490, 0, 6489, 0, 0, 0, 6488, 0, 0, 0, 0, 0, 0, 0, 0, + 6487, 6486, 0, 6485, 0, 0, 0, 6484, 0, 0, 0, 0, 0, 0, 0, 6483, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6482, 6481, 0, 6480, + 0, 0, 0, 6479, 0, 0, 0, 0, 0, 0, 0, 6478, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6476, + 6475, 0, 6474, 0, 0, 0, 6473, 0, 0, 0, 0, 0, 0, 0, 6472, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6471, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6469, 0, 0, 0, 6468, 0, 6467, 6466, 0, 0, 0, + 0, 6465, 0, 6464, 6463, 0, 0, 6462, 6461, 0, 6460, 0, 0, 0, 0, 0, + 0, 6459, 0, 6458, 6457, 0, 0, 6456, 6455, 0, 6454, 0, 0, 0, 0, + 6453, 6452, 0, 6451, 0, 0, 0, 6450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6449, 0, 6448, 6447, 0, 0, 6446, 6445, 0, 6444, 0, 0, 0, 0, 6443, + 6442, 0, 6441, 0, 0, 0, 6440, 0, 0, 0, 0, 0, 0, 0, 0, 6439, 6438, + 0, 6437, 0, 0, 0, 6436, 0, 0, 0, 0, 0, 0, 0, 6435, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6434, 0, 6433, 6432, 0, 0, + 6431, 6430, 0, 6429, 0, 0, 0, 0, 6428, 6427, 0, 6426, 0, 0, 0, + 6425, 0, 0, 0, 0, 0, 0, 0, 0, 6424, 6423, 0, 6422, 0, 0, 0, 6421, + 0, 0, 0, 0, 0, 0, 0, 6420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6419, 6418, 0, 6417, 0, 0, 0, 6416, 0, 0, 0, 0, 0, 0, 0, + 6415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6414, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6413, 0, 6412, 6411, 0, 0, 6410, 6409, + 0, 6408, 0, 0, 0, 0, 6407, 6406, 0, 6405, 0, 0, 0, 6404, 0, 0, 0, + 0, 0, 0, 0, 0, 6403, 6402, 0, 6401, 0, 0, 0, 6400, 0, 0, 0, 0, 0, + 0, 0, 6399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6398, + 6397, 0, 6396, 0, 0, 0, 6395, 0, 0, 0, 0, 0, 0, 0, 6394, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6393, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6392, 6391, 0, 6390, 0, 0, 0, 6389, 0, 0, 0, 0, 0, 0, 0, + 6388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6387, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6385, 0, 6384, 6383, 0, 0, 6382, 6381, 0, + 6380, 0, 0, 0, 0, 6379, 6378, 0, 6377, 0, 0, 0, 6376, 0, 0, 0, 0, + 0, 0, 0, 0, 6375, 6374, 0, 6373, 0, 0, 0, 6372, 0, 0, 0, 0, 0, 0, + 0, 6371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6370, + 6369, 0, 6368, 0, 0, 0, 6367, 0, 0, 0, 0, 0, 0, 0, 6366, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6365, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6364, 6363, 0, 6362, 0, 0, 0, 6361, 0, 0, 0, 0, 0, 0, 0, + 6360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6359, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6357, 6356, 0, 6355, 0, 0, 0, 6354, 0, 0, 0, 0, + 0, 0, 0, 6353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6352, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6349, 0, 0, 0, 6348, 0, 6347, + 6346, 0, 0, 0, 0, 6345, 0, 6344, 6343, 0, 0, 6342, 6341, 0, 6340, + 0, 0, 0, 0, 0, 0, 6339, 0, 6338, 6337, 0, 0, 6336, 6335, 0, 6334, + 0, 0, 0, 0, 6333, 6332, 0, 6331, 0, 0, 0, 6330, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6329, 0, 6328, 6327, 0, 0, 6326, 6325, 0, 6324, 0, 0, + 0, 0, 6323, 6322, 0, 6321, 0, 0, 0, 6320, 0, 0, 0, 0, 0, 0, 0, 0, + 6319, 6318, 0, 6317, 0, 0, 0, 6316, 0, 0, 0, 0, 0, 0, 0, 6315, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6314, 0, 6313, + 6312, 0, 0, 6311, 6310, 0, 6309, 0, 0, 0, 0, 6308, 6307, 0, 6306, + 0, 0, 0, 6305, 0, 0, 0, 0, 0, 0, 0, 0, 6304, 6303, 0, 6302, 0, 0, + 0, 6301, 0, 0, 0, 0, 0, 0, 0, 6300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6299, 6298, 0, 6297, 0, 0, 0, 6296, 0, 0, 0, 0, + 0, 0, 0, 6295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6294, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6293, 0, 6292, 6291, 0, 0, + 6290, 6289, 0, 6288, 0, 0, 0, 0, 6287, 6286, 0, 6285, 0, 0, 0, + 6284, 0, 0, 0, 0, 0, 0, 0, 0, 6283, 6282, 0, 6281, 0, 0, 0, 6280, + 0, 0, 0, 0, 0, 0, 0, 6279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6278, 6277, 0, 6276, 0, 0, 0, 6275, 0, 0, 0, 0, 0, 0, 0, + 6274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6273, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6272, 6271, 0, 6270, 0, 0, 0, 6269, 0, 0, 0, + 0, 0, 0, 0, 6268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6266, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6265, 0, 6264, 6263, 0, 0, + 6262, 6261, 0, 6260, 0, 0, 0, 0, 6259, 6258, 0, 6257, 0, 0, 0, + 6256, 0, 0, 0, 0, 0, 0, 0, 0, 6255, 6254, 0, 6253, 0, 0, 0, 6252, + 0, 0, 0, 0, 0, 0, 0, 6251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6250, 6249, 0, 6248, 0, 0, 0, 6247, 0, 0, 0, 0, 0, 0, 0, + 6246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6245, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6244, 6243, 0, 6242, 0, 0, 0, 6241, 0, 0, 0, + 0, 0, 0, 0, 6240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6237, 6236, 0, 6235, 0, 0, 0, + 6234, 0, 0, 0, 0, 0, 0, 0, 6233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6229, 0, 6228, 6227, 0, + 0, 6226, 6225, 0, 6224, 0, 0, 0, 0, 6223, 6222, 0, 6221, 0, 0, 0, + 6220, 0, 0, 0, 0, 0, 0, 0, 0, 6219, 6218, 0, 6217, 0, 0, 0, 6216, + 0, 0, 0, 0, 0, 0, 0, 6215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6214, 6213, 0, 6212, 0, 0, 0, 6211, 0, 0, 0, 0, 0, 0, 0, + 6210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6209, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6208, 6207, 0, 6206, 0, 0, 0, 6205, 0, 0, 0, + 0, 0, 0, 0, 6204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6202, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6201, 6200, 0, 6199, 0, 0, 0, + 6198, 0, 0, 0, 0, 0, 0, 0, 6197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6195, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6193, 6192, 0, 6191, 0, 0, 0, + 6190, 0, 0, 0, 0, 0, 0, 0, 6189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6187, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6186, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1600 + ], + hash: [ + 148, 2934, 166, 5107, 4628, 166, 166, 166, 166, 3033, 166, 4692, 166, 5571, 2225, 166, + 5340, 3423, 166, 3191, 1752, 166, 5212, 166, 166, 3520, 166, 166, 166, 1867, 166, 3313, + 166, 3461, 166, 166, 3174, 1737, 5010, 5008, 166, 4344, 2868, 3877, 166, 4089, 166, 5041, + 4748, 4073, 4066, 5298, 3502, 1812, 166, 5309, 166, 233, 3493, 166, 166, 3728, 5236, 4252, + 4010, 2149, 166, 164, 4580, 3039, 4804, 3874, 166, 6170, 2812, 166, 4334, 166, 166, 166, + 166, 166, 166, 1862, 224, 2131, 6081, 166, 2710, 166, 166, 166, 4765, 166, 1964, 5060, + 166, 1897, 166, 3987, 166, 166, 5566, 2021, 166, 45, 166, 166, 3283, 3932, 166, 166, + 3519, 166, 166, 291, 166, 166, 5132, 2800, 166, 166, 166, 5531, 4054, 166, 3509, 166, + 166, 4908, 3028, 1756, 1910, 4671, 2729, 5224, 166, 121, 3327, 3317, 166, 181, 2371, 5541, + 166, 1787, 2666, 5134, 5698, 166, 5480, 3870, 166, 3823, 166, 3165, 5343, 5123, 5089, 166, + 2422, 3724, 166, 2735, 1953, 5724, 4444, 4871, 166, 166, 5001, 5512, 3133, 5171, 166, 2216, + 166, 4877, 4542, 166, 166, 166, 5270, 166, 166, 166, 1922, 69, 3547, 166, 166, 166, + 166, 166, 231, 4547, 5155, 3357, 3464, 166, 72, 3332, 166, 4392, 5971, 3896, 4451, 3173, + 2569, 166, 4466, 2518, 1698, 2850, 5349, 166, 166, 4457, 5062, 166, 2202, 1650, 2191, 166, + 1950, 2583, 166, 5293, 2032, 5893, 166, 3994, 5392, 3878, 96, 166, 166, 3195, 166, 4001, + 1900, 2513, 6027, 166, 166, 166, 166, 5407, 166, 166, 2332, 5125, 5891, 3096, 3172, 166, + 166, 3065, 166, 166, 4535, 166, 166, 166, 4553, 3131, 3693, 166, 2255, 2613, 166, 166, + 166, 166, 2866, 166, 166, 166, 2940, 5333, 3199, 166, 2628, 4312, 166, 166, 1794, 4681, + 2058, 3606, 166, 166, 3542, 2166, 4696, 2520, 166, 4739, 166, 2563, 166, 166, 3681, 166, + 166, 166, 4127, 1967, 2972, 166, 5227, 166, 166, 5551, 4255, 56, 166, 5553, 3219, 4367, + 166, 3218, 4749, 2886, 3695, 3711, 2228, 166, 166, 166, 2268, 5054, 3749, 4825, 166, 4933, + 4992, 4530, 166, 4892, 3400, 166, 197, 166, 6078, 166, 166, 3971, 166, 166, 5357, 1852, + 3377, 166, 5196, 3740, 5320, 166, 166, 3099, 166, 4562, 6061, 3294, 166, 166, 166, 166, + 3266, 3627, 2567, 166, 228, 2773, 166, 166, 53, 1833, 2401, 124, 166, 4272, 3922, 5959, + 2903, 3923, 166, 6155, 166, 166, 166, 166, 216, 166, 5247, 166, 5591, 166, 166, 82, + 87, 4526, 166, 166, 5439, 166, 4935, 166, 3187, 1869, 166, 1764, 5500, 6023, 3356, 166, + 3350, 2457, 2455, 166, 1637, 166, 3342, 166, 166, 3355, 5154, 166, 276, 166, 166, 166, + 3371, 5969, 166, 1665, 166, 166, 166, 166, 166, 166, 166, 4092, 1712, 3122, 5086, 166, + 166, 4906, 166, 2591, 166, 166, 166, 1894, 2997, 166, 4476, 4384, 166, 4747, 4109, 2655, + 166, 5978, 1636, 4898, 166, 166, 166, 166, 166, 166, 166, 5207, 166, 166, 3712, 3876, + 91, 5876, 3786, 5998, 166, 166, 166, 4391, 166, 166, 2832, 2220, 4435, 166, 166, 5796, + 3156, 6112, 166, 1643, 1821, 3129, 166, 4200, 166, 5857, 166, 166, 2351, 5902, 1855, 5043, + 166, 3167, 5191, 3996, 5718, 4876, 3071, 2965, 5735, 5930, 6149, 2345, 3297, 3822, 166, 166, + 307, 6019, 1859, 2981, 4914, 3320, 6165, 2328, 140, 2372, 308, 166, 2280, 5081, 166, 3275, + 166, 159, 2399, 2327, 5489, 4690, 6059, 4492, 4269, 6058, 166, 19, 166, 3323, 5708, 128, + 4812, 2949, 166, 166, 2890, 2630, 5237, 166, 256, 3673, 4621, 5380, 166, 3353, 166, 1651, + 2573, 1635, 4011, 3429, 3370, 3720, 166, 166, 6108, 3848, 5104, 2851, 1998, 166, 166, 5106, + 20, 166, 2633, 166, 166, 166, 166, 5662, 125, 3651, 1731, 4702, 166, 3197, 166, 2947, + 3046, 4196, 2185, 6100, 166, 2602, 2908, 2487, 166, 5232, 166, 4028, 5919, 166, 2680, 3608, + 3252, 166, 4899, 166, 166, 166, 166, 2529, 166, 166, 166, 166, 166, 2534, 166, 2299, + 4076, 166, 3643, 166, 3921, 166, 166, 166, 1939, 2124, 1829, 2436, 3892, 166, 3481, 271, + 5307, 1697, 166, 166, 5098, 2906, 5545, 166, 5980, 3203, 166, 1903, 4626, 4674, 6118, 6097, + 5926, 4136, 1677, 3232, 4720, 166, 166, 166, 229, 2012, 3620, 166, 3798, 166, 166, 2609, + 3489, 3809, 166, 166, 166, 166, 166, 166, 166, 5826, 166, 166, 166, 4903, 166, 166, + 166, 166, 6168, 166, 5052, 5044, 5644, 2375, 2677, 4012, 3062, 5831, 4752, 166, 4125, 2610, + 2062, 3238, 292, 2533, 5872, 51, 166, 1947, 4225, 166, 2288, 4845, 166, 5788, 166, 5717, + 166, 166, 5549, 5619, 166, 4165, 166, 2721, 2311, 5501, 4416, 4383, 166, 166, 3068, 5499, + 5936, 166, 4204, 4766, 4688, 1870, 5220, 166, 166, 166, 166, 237, 2523, 6039, 3061, 2793, + 3998, 166, 2545, 2309, 3144, 3679, 3969, 166, 166, 166, 4379, 3574, 205, 2808, 5822, 166, + 166, 2188, 4823, 4990, 5561, 5711, 166, 5627, 6034, 5253, 3783, 5047, 4405, 166, 59, 1755, + 3178, 318, 166, 4710, 2933, 3409, 6062, 2821, 166, 6099, 166, 4178, 166, 166, 4122, 36, + 4779, 166, 166, 4323, 3073, 5410, 2101, 166, 166, 44, 5690, 166, 3265, 166, 5222, 5909, + 1838, 166, 4755, 2215, 166, 4082, 166, 166, 3210, 5140, 3124, 5238, 166, 5913, 2321, 166, + 2416, 5976, 3918, 5078, 4218, 5703, 4897, 6011, 5685, 2214, 166, 166, 6180, 5175, 1715, 166, + 166, 3760, 4497, 1808, 4826, 166, 2540, 166, 166, 5513, 4971, 5915, 166, 166, 2525, 166, + 4480, 42, 232, 2412, 2797, 3229, 5263, 2852, 5543, 2126, 3562, 166, 2872, 4695, 5985, 5136, + 2714, 4262, 5473, 166, 4160, 4347, 166, 166, 166, 166, 5271, 166, 166, 5108, 166, 166, + 166, 166, 5437, 4875, 3963, 4362, 5820, 5559, 4890, 4728, 166, 166, 2692, 166, 4870, 3591, + 5472, 166, 2690, 166, 5854, 3817, 166, 280, 166, 166, 113, 4128, 3396, 166, 4264, 5058, + 2283, 166, 2281, 4916, 5671, 166, 2708, 166, 166, 4589, 166, 166, 4689, 166, 1686, 166, + 166, 166, 166, 166, 1774, 166, 166, 166, 5651, 3777, 2234, 166, 3864, 18, 3589, 4592, + 4777, 166, 166, 5254, 4245, 166, 166, 166, 4368, 5172, 3522, 166, 4306, 153, 5230, 166, + 5598, 5420, 311, 2414, 4159, 2985, 5137, 166, 2179, 1801, 166, 4595, 2083, 2020, 166, 3602, + 2170, 4259, 3048, 166, 166, 4193, 2350, 166, 166, 2702, 166, 4521, 166, 166, 2496, 166, + 4593, 2006, 166, 166, 2292, 4135, 166, 6069, 4623, 166, 166, 4827, 3995, 4291, 3243, 166, + 166, 166, 5622, 166, 3539, 166, 166, 4915, 4373, 2479, 3775, 6008, 5838, 4321, 1612, 5530, + 166, 3773, 4267, 4086, 3081, 2261, 166, 166, 4785, 4641, 5292, 166, 4820, 5612, 5556, 166, + 166, 166, 4396, 6084, 3414, 166, 3331, 2380, 5921, 4315, 2340, 166, 5511, 166, 4713, 3754, + 2912, 2553, 166, 3468, 5388, 166, 1932, 3540, 5834, 166, 166, 3186, 5258, 166, 4107, 166, + 166, 166, 166, 166, 166, 166, 166, 2108, 12, 2368, 2789, 166, 166, 4148, 1878, 166, + 166, 2324, 4179, 2945, 2531, 166, 166, 166, 4485, 3765, 2308, 166, 2754, 166, 6102, 166, + 1921, 260, 2241, 166, 2592, 166, 166, 166, 4964, 166, 3055, 5261, 4943, 2916, 166, 201, + 5728, 166, 5759, 4314, 4730, 6024, 166, 4926, 4762, 1834, 2055, 166, 40, 166, 5416, 166, + 3722, 2360, 1928, 166, 4889, 4590, 5550, 3498, 166, 6003, 2029, 4106, 4346, 3758, 166, 2753, + 103, 1891, 5067, 166, 3398, 2079, 5784, 3074, 3787, 166, 166, 3936, 166, 5766, 166, 4847, + 3928, 5119, 166, 5181, 4602, 2605, 5712, 4523, 166, 166, 4717, 166, 2227, 2181, 166, 4678, + 166, 166, 4901, 166, 4980, 166, 166, 166, 166, 5806, 2894, 5631, 4995, 2608, 166, 166, + 166, 3917, 166, 3417, 166, 2795, 1655, 3189, 3364, 166, 4839, 3510, 4212, 5641, 6091, 138, + 166, 166, 3343, 4620, 2722, 4566, 166, 3518, 3424, 166, 166, 1653, 166, 5057, 166, 5375, + 4833, 166, 4273, 4348, 166, 166, 166, 4912, 166, 3662, 166, 4281, 166, 5169, 166, 5883, + 2737, 2572, 4685, 4068, 166, 4214, 166, 166, 2409, 166, 166, 4571, 166, 5624, 5722, 5949, + 166, 3675, 166, 166, 5109, 3428, 166, 166, 5446, 166, 3290, 166, 3309, 166, 166, 4776, + 166, 166, 166, 166, 166, 166, 5617, 2860, 166, 166, 166, 166, 3629, 1741, 166, 166, + 183, 4973, 3047, 2854, 75, 2035, 3652, 2159, 166, 4150, 6037, 3225, 4519, 1902, 2678, 2413, + 1961, 166, 166, 166, 166, 4972, 1847, 166, 5636, 4017, 166, 3345, 166, 4520, 166, 2861, + 166, 3092, 6060, 157, 2542, 2298, 4496, 166, 2607, 6110, 5707, 2314, 166, 166, 273, 166, + 5952, 166, 4957, 322, 6065, 2272, 6140, 2438, 3458, 3287, 166, 166, 166, 166, 2684, 288, + 3354, 166, 166, 3983, 1702, 166, 166, 166, 2393, 2435, 4202, 3308, 5805, 5085, 166, 166, + 1938, 166, 166, 2171, 5892, 2337, 166, 4648, 3116, 2486, 4363, 3567, 166, 166, 2822, 2041, + 166, 4703, 3956, 5192, 166, 3975, 5720, 3647, 2134, 5932, 166, 166, 5160, 263, 166, 166, + 166, 4549, 166, 166, 1701, 3086, 166, 166, 4737, 166, 2252, 166, 170, 166, 166, 166, + 2301, 5478, 166, 166, 5979, 3007, 166, 166, 166, 4104, 166, 2469, 2700, 166, 4998, 3376, + 166, 1840, 166, 166, 4470, 166, 5235, 3930, 166, 166, 166, 6031, 166, 166, 166, 3827, + 4700, 166, 166, 166, 166, 166, 166, 4103, 3976, 166, 166, 166, 166, 5027, 4322, 5130, + 166, 4741, 2132, 4118, 3080, 4137, 166, 6179, 166, 166, 166, 166, 166, 6120, 4188, 166, + 2251, 166, 3253, 166, 4887, 166, 4293, 5241, 166, 166, 166, 166, 166, 166, 5076, 166, + 166, 4177, 166, 221, 166, 2757, 5377, 166, 43, 166, 166, 3180, 5540, 166, 213, 4541, + 166, 166, 166, 166, 166, 1641, 166, 4578, 4639, 166, 166, 1683, 2139, 1689, 5249, 5773, + 5226, 166, 2820, 166, 5516, 5045, 166, 4896, 5657, 5189, 166, 5770, 2725, 5148, 166, 166, + 166, 2929, 166, 3479, 166, 166, 4564, 3752, 4305, 4232, 166, 5906, 1779, 166, 2709, 4941, + 4342, 166, 4882, 166, 4277, 2322, 166, 4879, 1610, 3038, 166, 3762, 2054, 5652, 166, 4524, + 3820, 4806, 166, 166, 104, 3416, 4869, 4243, 4854, 166, 4114, 166, 2121, 166, 3463, 3556, + 166, 4795, 166, 2118, 3920, 166, 166, 4667, 5046, 166, 166, 2088, 4360, 5787, 2198, 4233, + 5552, 3970, 3523, 2037, 5791, 166, 166, 4299, 2336, 166, 166, 166, 4173, 4588, 3626, 5187, + 166, 3363, 4611, 294, 4962, 5243, 2719, 6022, 4976, 3559, 166, 2662, 5779, 6151, 166, 3527, + 166, 5404, 6132, 1839, 166, 3090, 166, 2253, 166, 5441, 5518, 6049, 166, 166, 6136, 3026, + 3474, 5960, 166, 3937, 4105, 166, 2348, 2039, 4738, 166, 5233, 3882, 3840, 166, 278, 190, + 166, 5751, 4313, 166, 3855, 166, 166, 6171, 166, 166, 5381, 3941, 166, 166, 166, 166, + 3334, 166, 2038, 6088, 166, 1918, 5037, 2325, 2378, 4894, 3514, 3715, 5168, 166, 166, 4083, + 2873, 166, 166, 166, 2693, 166, 3543, 166, 2577, 3013, 166, 166, 4594, 2622, 166, 166, + 166, 3401, 166, 166, 5447, 5328, 5547, 6133, 2335, 3739, 166, 166, 166, 166, 5614, 3492, + 3610, 3466, 166, 5336, 4354, 166, 4662, 166, 166, 4283, 166, 166, 303, 5904, 166, 2717, + 166, 166, 2276, 5564, 2386, 5661, 2040, 166, 1630, 4652, 166, 4840, 166, 110, 5329, 3979, + 5734, 2550, 166, 166, 6007, 5999, 2978, 4771, 5360, 166, 4023, 166, 166, 5920, 4065, 166, + 3880, 166, 5422, 1813, 166, 6166, 73, 166, 166, 3669, 5762, 5077, 166, 2953, 85, 166, + 3517, 166, 116, 166, 2738, 3710, 166, 1634, 166, 166, 166, 2290, 3001, 166, 166, 3037, + 2400, 3410, 166, 1791, 4231, 166, 3546, 5009, 5299, 2807, 166, 166, 1675, 1619, 2374, 3093, + 5302, 3278, 2330, 5301, 2343, 2307, 3274, 5017, 2265, 3700, 2465, 166, 139, 4292, 166, 5056, + 3952, 166, 4528, 2388, 1886, 166, 166, 3016, 3698, 5881, 166, 2379, 3223, 166, 166, 3847, + 2407, 5493, 3183, 3307, 166, 265, 166, 2421, 6161, 2057, 5363, 3863, 2474, 166, 166, 5427, + 166, 2140, 2955, 166, 3070, 4237, 5018, 5988, 5570, 275, 4862, 2357, 166, 195, 166, 2593, + 6047, 166, 2878, 166, 166, 2781, 3004, 4180, 166, 5593, 166, 5973, 2544, 5064, 166, 4324, + 4701, 166, 3084, 166, 166, 5372, 4725, 166, 5650, 166, 166, 2786, 166, 3781, 3583, 3682, + 1850, 4420, 3296, 5173, 4461, 166, 166, 166, 2984, 166, 93, 166, 166, 4336, 5943, 2922, + 3300, 166, 4843, 166, 166, 166, 166, 2094, 166, 2939, 166, 4656, 166, 5146, 166, 166, + 166, 166, 2104, 3977, 4660, 5312, 166, 1865, 166, 5487, 5558, 3380, 166, 1957, 3162, 3281, + 166, 3588, 3268, 2099, 166, 166, 2319, 4913, 4187, 5503, 5782, 150, 166, 52, 5450, 166, + 166, 166, 2941, 5877, 166, 4031, 5393, 166, 3931, 4166, 3135, 3445, 166, 5053, 5430, 4836, + 166, 5315, 3389, 4636, 166, 166, 3441, 166, 166, 3767, 2961, 166, 4761, 4604, 3179, 166, + 166, 4751, 2148, 2015, 166, 123, 5013, 166, 2936, 166, 2063, 166, 5823, 166, 5096, 166, + 166, 4198, 166, 166, 166, 3845, 166, 166, 238, 166, 2703, 3541, 166, 4813, 166, 4477, + 2349, 4197, 5996, 3324, 4789, 3063, 166, 166, 5504, 5273, 2805, 13, 166, 5601, 5402, 4119, + 5206, 166, 166, 4251, 3704, 4176, 1963, 2882, 166, 202, 3125, 3318, 112, 166, 3362, 4835, + 3420, 3974, 5099, 166, 4433, 166, 166, 166, 1766, 2663, 166, 166, 4683, 166, 166, 5485, + 47, 5101, 5341, 5765, 3390, 1648, 4341, 3945, 6045, 1645, 166, 5578, 2594, 166, 166, 3772, + 166, 166, 3196, 3603, 166, 5399, 166, 5075, 166, 5911, 4632, 4781, 5313, 270, 166, 2346, + 166, 166, 166, 1986, 166, 166, 4958, 166, 166, 166, 4048, 166, 3076, 166, 166, 4891, + 166, 166, 57, 166, 220, 166, 166, 166, 4117, 166, 166, 166, 166, 5194, 2658, 166, + 166, 2942, 6071, 4182, 166, 2976, 5816, 166, 166, 166, 166, 3985, 4211, 2514, 166, 166, + 166, 2504, 3446, 1711, 166, 166, 2107, 5190, 166, 34, 166, 3912, 5382, 3003, 166, 166, + 166, 2999, 2404, 4734, 4455, 2087, 166, 2405, 156, 166, 2830, 3303, 296, 3295, 2067, 4268, + 166, 166, 5642, 166, 166, 1901, 166, 5133, 166, 166, 166, 166, 3176, 2973, 4677, 166, + 166, 6164, 3000, 2396, 2734, 5697, 5989, 166, 2823, 5265, 5852, 166, 166, 2623, 2625, 2287, + 4844, 1758, 166, 166, 166, 166, 166, 6073, 166, 5379, 2389, 5279, 2444, 5515, 166, 4038, + 166, 4948, 5640, 166, 166, 3572, 4258, 166, 166, 166, 5204, 166, 4603, 5797, 166, 166, + 166, 1725, 4600, 166, 166, 5498, 166, 4152, 166, 172, 4758, 166, 2598, 2489, 2076, 4366, + 2568, 166, 4352, 3782, 166, 166, 3059, 3946, 5138, 5727, 4484, 5694, 166, 3796, 166, 166, + 166, 166, 5334, 1778, 2245, 166, 4517, 4419, 2250, 182, 5856, 166, 2835, 4495, 1858, 2033, + 6014, 6086, 3211, 166, 166, 154, 2145, 166, 129, 3661, 2661, 5860, 6143, 2640, 3890, 6160, + 166, 166, 2747, 166, 166, 2291, 282, 2476, 166, 166, 3825, 166, 1925, 166, 4489, 166, + 166, 166, 4034, 166, 166, 166, 166, 166, 166, 122, 4708, 4919, 2373, 2453, 5419, 5954, + 297, 5290, 166, 1978, 166, 4932, 3501, 166, 3085, 3386, 166, 5405, 4512, 166, 3209, 5740, + 4020, 5495, 5815, 314, 166, 3190, 4824, 166, 166, 3448, 207, 1623, 6096, 5878, 166, 1836, + 166, 166, 2728, 166, 5278, 3419, 3012, 5618, 5266, 3078, 166, 166, 2244, 166, 4569, 6068, + 166, 3336, 166, 5677, 6052, 5079, 166, 5453, 5245, 5799, 166, 1982, 166, 5958, 4619, 5821, + 166, 5285, 284, 1631, 5710, 6070, 5365, 2189, 3242, 166, 2752, 5483, 5297, 6150, 5522, 166, + 1815, 166, 166, 166, 5801, 166, 166, 5398, 166, 166, 166, 2967, 2515, 3169, 166, 166, + 2562, 166, 1617, 2069, 166, 166, 6154, 166, 3721, 166, 5327, 166, 166, 166, 5592, 166, + 166, 2286, 1716, 3903, 166, 2395, 286, 3587, 6146, 3286, 4186, 5882, 5894, 5737, 6032, 5879, + 2761, 4829, 3788, 166, 166, 3233, 5356, 5693, 166, 2429, 2449, 141, 3444, 5186, 166, 166, + 3477, 4080, 4584, 166, 166, 3670, 1851, 3824, 4337, 3886, 2792, 166, 5867, 166, 166, 3557, + 3147, 166, 166, 2200, 166, 2505, 166, 4310, 4865, 5656, 5992, 5672, 166, 5199, 135, 3023, + 2994, 4472, 166, 166, 166, 2019, 4319, 3472, 166, 166, 166, 29, 206, 3944, 3027, 5804, + 4731, 5449, 166, 2825, 3310, 166, 6172, 5202, 166, 2516, 3644, 4557, 166, 166, 166, 166, + 2671, 4427, 3432, 3276, 5584, 5536, 4645, 3202, 166, 2612, 166, 4249, 2425, 3259, 4622, 166, + 2411, 4303, 4206, 166, 166, 166, 3734, 6063, 118, 166, 166, 3641, 166, 166, 166, 4937, + 1871, 3421, 2208, 166, 166, 166, 166, 4881, 166, 166, 166, 166, 3298, 166, 61, 166, + 166, 166, 3293, 6145, 71, 3619, 166, 166, 3383, 1624, 320, 2187, 4113, 166, 166, 166, + 166, 166, 5080, 2344, 5625, 2358, 1621, 4230, 5579, 5359, 295, 4248, 5267, 3883, 6124, 187, + 5112, 2122, 166, 166, 166, 5142, 6004, 166, 5322, 6175, 3639, 3182, 4425, 166, 175, 166, + 166, 166, 5778, 3939, 3484, 166, 166, 5832, 5248, 5935, 4467, 5858, 166, 5038, 166, 166, + 3102, 166, 4880, 166, 166, 166, 166, 3418, 1666, 5338, 3680, 5291, 4441, 3385, 166, 5733, + 4503, 2774, 166, 2631, 4153, 166, 2000, 166, 166, 5345, 166, 166, 4298, 1804, 4707, 166, + 1613, 1952, 2111, 166, 166, 166, 166, 166, 2897, 166, 166, 4044, 166, 166, 166, 166, + 2863, 5475, 166, 166, 166, 1704, 166, 3609, 2782, 2018, 166, 5361, 166, 3694, 3733, 166, + 2785, 1969, 166, 166, 2834, 1868, 3779, 1877, 60, 166, 4143, 3902, 166, 4361, 3188, 2498, + 6009, 166, 115, 166, 3138, 166, 4575, 6080, 133, 2030, 166, 166, 166, 2306, 2136, 3043, + 3447, 2142, 166, 3799, 1646, 5269, 3640, 166, 2674, 5502, 166, 5467, 166, 5069, 166, 166, + 4654, 4581, 5274, 5036, 4364, 166, 3115, 166, 2128, 4544, 5433, 2086, 2584, 4413, 166, 166, + 5385, 166, 234, 166, 1625, 166, 166, 166, 5139, 2511, 4974, 2766, 166, 166, 166, 2095, + 3990, 217, 166, 2988, 4061, 166, 209, 4883, 166, 166, 166, 166, 166, 4326, 166, 5465, + 2859, 166, 2887, 166, 2231, 166, 1658, 166, 2246, 166, 1844, 166, 166, 3087, 2871, 3872, + 1660, 48, 166, 166, 3622, 166, 1709, 166, 166, 6177, 6173, 166, 3569, 166, 166, 166, + 241, 3660, 3631, 166, 166, 5319, 5141, 174, 166, 166, 4412, 166, 5145, 166, 1919, 166, + 5276, 166, 2385, 166, 1618, 166, 166, 2501, 166, 166, 1734, 5966, 3145, 166, 1690, 4025, + 1664, 4559, 2433, 2392, 3552, 4006, 1896, 166, 166, 2546, 4450, 5396, 4221, 4046, 166, 166, + 2642, 166, 4448, 166, 2784, 3480, 4807, 166, 166, 3534, 166, 166, 5272, 166, 166, 2831, + 4263, 166, 166, 166, 166, 4414, 5628, 3486, 166, 3748, 166, 4598, 3719, 3598, 3611, 166, + 4792, 5059, 4110, 166, 2656, 166, 166, 84, 5429, 166, 166, 166, 281, 1955, 166, 166, + 166, 3616, 4997, 166, 166, 166, 166, 3230, 166, 166, 166, 166, 166, 166, 77, 166, + 166, 166, 1800, 166, 4236, 166, 166, 166, 166, 166, 5757, 2530, 1662, 166, 4607, 1659, + 166, 1685, 3341, 166, 1699, 4058, 3407, 1854, 4417, 3034, 166, 166, 166, 166, 5568, 166, + 3206, 166, 5529, 166, 166, 166, 2116, 3487, 144, 166, 166, 166, 5523, 5373, 5321, 166, + 6064, 2921, 166, 1696, 2473, 166, 166, 3716, 5689, 166, 4608, 3879, 166, 166, 166, 2156, + 166, 4358, 2446, 166, 3958, 166, 5520, 4340, 4848, 166, 3285, 166, 2665, 166, 3459, 1905, + 5115, 68, 5730, 166, 3127, 5029, 4370, 166, 3753, 166, 3674, 6025, 4490, 166, 4183, 166, + 94, 166, 166, 4051, 3766, 3140, 4907, 3857, 166, 166, 4596, 166, 3888, 3040, 2507, 5643, + 166, 166, 4311, 2618, 5582, 166, 166, 3678, 166, 1988, 166, 166, 4464, 166, 166, 166, + 166, 4278, 3677, 2173, 5256, 166, 166, 5162, 166, 5178, 1644, 5094, 166, 2557, 5506, 166, + 166, 166, 4927, 5348, 1797, 166, 166, 39, 166, 3866, 3655, 236, 5403, 2175, 3361, 166, + 1976, 5993, 226, 166, 4643, 166, 5339, 4098, 2653, 4969, 166, 3346, 4984, 4635, 166, 166, + 166, 166, 4981, 188, 166, 166, 28, 4088, 166, 166, 166, 25, 3663, 2696, 166, 4679, + 5114, 5802, 166, 166, 166, 166, 166, 3810, 5749, 166, 1673, 4276, 166, 3756, 4184, 166, + 5630, 166, 166, 166, 4531, 212, 5663, 166, 166, 2746, 166, 5386, 3618, 3594, 1887, 166, + 166, 5443, 166, 1726, 4094, 5065, 4756, 166, 166, 5308, 5225, 2081, 166, 166, 3064, 166, + 166, 1981, 3637, 4355, 1626, 166, 166, 4686, 166, 5793, 180, 5066, 2938, 3819, 4904, 3601, + 166, 166, 2495, 5025, 5768, 2621, 4650, 3041, 166, 5897, 3633, 166, 166, 4375, 166, 5714, + 1667, 3273, 3950, 1668, 166, 5855, 166, 2364, 166, 1881, 166, 2646, 5460, 166, 2770, 4951, + 5414, 166, 4442, 2113, 5726, 298, 5934, 2053, 166, 166, 4053, 166, 166, 4514, 4697, 166, + 166, 5198, 2707, 166, 5605, 166, 166, 5218, 2596, 166, 2110, 166, 1806, 2160, 166, 166, + 2212, 166, 3636, 166, 166, 4377, 4021, 3707, 4502, 166, 4195, 166, 166, 166, 4108, 3725, + 3676, 166, 2084, 166, 166, 166, 166, 4216, 166, 166, 6156, 166, 2896, 166, 166, 166, + 166, 166, 166, 3826, 2870, 3793, 166, 166, 5927, 166, 2759, 166, 4613, 2297, 5638, 166, + 2842, 5031, 4793, 5184, 166, 166, 2008, 166, 257, 2881, 117, 6051, 3044, 4079, 2833, 166, + 6117, 166, 3236, 5469, 166, 166, 2874, 6076, 166, 1799, 80, 41, 166, 1864, 166, 5709, + 1611, 5026, 5176, 168, 3269, 4081, 166, 166, 1970, 4550, 166, 4250, 4101, 4565, 5950, 5845, + 97, 4064, 166, 5394, 4374, 4343, 166, 166, 4658, 3248, 166, 208, 1735, 4047, 2843, 166, + 166, 166, 166, 2794, 166, 166, 5844, 166, 166, 3094, 2177, 5436, 3646, 166, 3564, 4682, + 166, 5948, 5835, 162, 2059, 5151, 2034, 1926, 5941, 5903, 5177, 166, 166, 166, 4801, 3439, + 1780, 166, 166, 3280, 3434, 166, 166, 4498, 5565, 4043, 166, 4432, 4722, 3959, 166, 3746, + 166, 166, 177, 166, 166, 2748, 166, 4483, 166, 166, 4144, 166, 166, 166, 166, 2066, + 2915, 166, 2049, 2130, 4684, 166, 49, 3506, 5391, 166, 2590, 6103, 1714, 2410, 3053, 3837, + 4301, 166, 3255, 2644, 166, 166, 4014, 166, 2475, 4788, 2876, 166, 166, 166, 166, 166, + 166, 4140, 166, 166, 321, 166, 1966, 166, 166, 2855, 3111, 3800, 166, 4446, 2551, 166, + 166, 166, 2824, 166, 166, 166, 2164, 3010, 2226, 166, 4857, 166, 2582, 5118, 4582, 5917, + 166, 166, 3338, 3482, 3328, 166, 4817, 166, 5371, 3830, 166, 3009, 1633, 3329, 4052, 166, + 3701, 4983, 4500, 4487, 4878, 166, 166, 5482, 3544, 166, 3057, 2026, 4398, 2847, 3532, 3262, + 3399, 166, 166, 166, 4478, 4167, 166, 3411, 2599, 5362, 166, 2711, 166, 166, 166, 166, + 3452, 2522, 5586, 5548, 3279, 2538, 166, 166, 166, 4161, 166, 2123, 166, 166, 2660, 166, + 166, 1706, 166, 15, 3537, 5051, 5869, 166, 3025, 166, 4447, 3744, 120, 166, 166, 166, + 204, 2810, 166, 5124, 2376, 5306, 166, 166, 4493, 166, 166, 166, 5289, 6046, 166, 2762, + 2541, 1857, 2467, 5163, 166, 166, 166, 166, 5830, 166, 2172, 3359, 166, 2928, 166, 166, + 166, 6129, 166, 5445, 166, 166, 5924, 6144, 166, 102, 166, 166, 1678, 166, 4491, 5705, + 166, 1753, 166, 3873, 5725, 4145, 1909, 166, 2155, 166, 166, 1848, 3315, 1874, 166, 4945, + 2524, 166, 3263, 2362, 1785, 166, 166, 166, 152, 2102, 5723, 5131, 5754, 4032, 4029, 166, + 4295, 3391, 166, 166, 166, 5282, 1747, 3159, 2235, 5583, 1786, 3630, 6111, 2974, 4797, 3623, + 166, 2071, 4929, 166, 2603, 3964, 3378, 166, 166, 2654, 151, 3940, 4527, 4518, 166, 2430, + 1884, 3812, 166, 2867, 166, 166, 166, 2756, 5418, 166, 2354, 4606, 166, 2153, 166, 4855, + 166, 166, 1720, 166, 3213, 3926, 166, 5158, 4349, 166, 4828, 166, 166, 2031, 166, 2300, + 166, 166, 166, 2211, 4954, 3121, 4754, 2485, 166, 166, 166, 3593, 166, 2718, 5317, 2765, + 5120, 166, 2527, 166, 1994, 5947, 166, 166, 166, 6085, 2302, 100, 79, 2982, 3705, 2180, + 2043, 166, 1872, 1671, 166, 3729, 166, 4944, 3665, 2217, 2119, 166, 5615, 166, 1620, 166, + 166, 166, 166, 35, 3913, 2760, 166, 3688, 3672, 4042, 166, 166, 5117, 4227, 166, 4445, + 2458, 3803, 4554, 4988, 166, 166, 3141, 3491, 166, 166, 166, 166, 5095, 4668, 5567, 166, + 166, 2885, 1790, 2996, 166, 166, 166, 166, 3737, 166, 2470, 166, 166, 4339, 166, 166, + 166, 4920, 166, 166, 3697, 5471, 166, 166, 3538, 4558, 3467, 5262, 5609, 3858, 166, 166, + 5007, 2780, 2791, 2236, 5668, 3134, 166, 166, 5776, 3470, 3291, 166, 2532, 166, 166, 166, + 3805, 264, 166, 3227, 166, 166, 166, 2334, 166, 5087, 101, 166, 3634, 58, 2813, 166, + 166, 166, 3222, 4704, 4488, 4508, 5459, 2117, 5873, 166, 1828, 166, 166, 166, 166, 166, + 2105, 166, 5613, 5761, 2920, 3098, 166, 166, 3277, 166, 166, 166, 166, 83, 166, 166, + 166, 3967, 166, 5574, 166, 4985, 30, 3426, 166, 179, 3014, 4015, 246, 2556, 4449, 3723, + 5611, 3436, 166, 4240, 3642, 166, 4536, 2048, 5810, 166, 1971, 166, 5557, 5323, 5022, 191, + 5492, 166, 4837, 4426, 2537, 2271, 3177, 5674, 166, 2796, 1995, 166, 3906, 166, 4403, 3862, + 4716, 2406, 3948, 4670, 4309, 166, 2575, 5358, 2951, 166, 3666, 3612, 5577, 4579, 4743, 166, + 6072, 6036, 4563, 2586, 166, 5836, 166, 166, 5752, 166, 3563, 166, 2909, 3251, 92, 166, + 4711, 4149, 166, 166, 3052, 5122, 2904, 2635, 1990, 166, 166, 166, 166, 166, 166, 166, + 166, 4213, 166, 3103, 3142, 2683, 6105, 2209, 3175, 4215, 166, 166, 166, 166, 166, 166, + 166, 5303, 4075, 5374, 166, 4174, 4154, 1895, 4538, 2764, 166, 5817, 6113, 4033, 166, 6090, + 166, 2990, 166, 3164, 166, 166, 166, 247, 166, 6083, 3412, 166, 5738, 166, 3599, 166, + 1904, 2162, 2547, 3960, 166, 166, 3154, 55, 166, 5991, 4921, 2879, 166, 166, 5347, 166, + 166, 166, 2712, 4787, 166, 1908, 166, 166, 166, 3184, 166, 166, 166, 4572, 3846, 3657, + 166, 166, 5481, 166, 166, 3397, 1856, 4978, 166, 3900, 3570, 3802, 166, 166, 2075, 4408, + 166, 6079, 2313, 166, 166, 5756, 166, 166, 2070, 166, 166, 3137, 166, 166, 3686, 166, + 166, 166, 166, 67, 5019, 166, 1742, 166, 5354, 166, 5149, 166, 2931, 4946, 6006, 166, + 166, 2865, 4902, 3029, 1722, 3449, 166, 1987, 166, 62, 5626, 166, 166, 166, 2670, 1657, + 5599, 3056, 166, 3791, 5020, 166, 1979, 4437, 1899, 166, 166, 196, 2636, 166, 143, 3475, + 4317, 2512, 2415, 5033, 5024, 2112, 2864, 3551, 166, 1688, 33, 4585, 3648, 4399, 166, 166, + 166, 166, 166, 1824, 166, 166, 166, 166, 166, 166, 4513, 166, 2478, 4407, 166, 166, + 2492, 4130, 4318, 2980, 5746, 166, 2606, 4063, 4123, 166, 255, 166, 166, 4680, 166, 3586, + 5975, 3935, 166, 5528, 166, 3158, 166, 166, 2614, 5035, 166, 3488, 3214, 166, 166, 166, + 5413, 3713, 166, 5875, 4329, 5250, 166, 166, 3741, 166, 54, 1885, 3839, 166, 4924, 166, + 166, 166, 4158, 166, 166, 2152, 1661, 166, 166, 4327, 166, 3933, 166, 5666, 166, 166, + 2580, 166, 3404, 4111, 2862, 4438, 166, 166, 4072, 166, 166, 3938, 2958, 4302, 166, 3851, + 166, 268, 166, 166, 1975, 222, 3204, 3438, 4616, 166, 4275, 3101, 2648, 3989, 5215, 166, + 4229, 166, 5440, 166, 5093, 2639, 166, 166, 4439, 166, 2316, 4239, 166, 166, 166, 166, + 166, 1817, 4486, 166, 3272, 166, 166, 4085, 2078, 2902, 166, 166, 166, 4381, 1853, 3054, + 166, 166, 5005, 2669, 166, 2856, 2706, 166, 166, 166, 4185, 166, 1748, 166, 166, 166, + 5771, 166, 166, 3915, 166, 166, 2205, 6122, 166, 166, 1632, 5400, 166, 2477, 4740, 166, + 166, 166, 1802, 166, 2472, 3953, 166, 1849, 2604, 3780, 2560, 4786, 2566, 3576, 166, 4768, + 166, 1951, 251, 5068, 166, 166, 166, 2619, 166, 166, 166, 5432, 166, 166, 5260, 5758, + 3908, 166, 4141, 166, 5777, 166, 166, 166, 166, 166, 3961, 5143, 166, 3889, 3747, 3743, + 166, 2818, 166, 166, 166, 3867, 166, 166, 3742, 4763, 2948, 5533, 166, 3966, 3555, 3843, + 3503, 6005, 166, 4687, 2790, 4479, 5828, 3769, 5688, 166, 166, 166, 166, 3109, 166, 166, + 166, 166, 4574, 81, 166, 166, 4576, 3369, 166, 166, 166, 4207, 166, 5072, 2210, 166, + 184, 166, 4673, 166, 166, 166, 166, 166, 166, 1628, 3590, 1916, 4784, 4970, 166, 1832, + 166, 166, 3584, 3384, 166, 166, 2880, 1783, 166, 166, 166, 166, 6115, 6121, 2157, 5428, + 5859, 4861, 5635, 4331, 5839, 4223, 313, 166, 166, 6152, 2168, 166, 4112, 6089, 6012, 166, + 5294, 3207, 166, 166, 4884, 166, 4655, 166, 166, 166, 1743, 166, 4077, 166, 4631, 166, + 166, 2957, 1945, 4936, 166, 166, 5389, 166, 166, 5955, 166, 166, 1639, 2207, 4129, 166, + 3582, 5560, 6147, 3088, 166, 166, 4529, 5259, 3118, 166, 3106, 2853, 166, 1845, 5660, 166, + 3325, 3973, 2461, 2163, 166, 3083, 4190, 166, 166, 5505, 166, 166, 3226, 5507, 109, 6141, + 3991, 166, 4939, 166, 166, 5889, 3986, 166, 3664, 4353, 2056, 166, 5071, 166, 166, 4376, + 166, 1958, 2028, 166, 166, 1793, 166, 5252, 3536, 166, 166, 3525, 3580, 166, 166, 166, + 1782, 5174, 2011, 1826, 3352, 3231, 166, 166, 4986, 2068, 2801, 166, 2500, 166, 5061, 166, + 2263, 2632, 1993, 166, 2715, 4424, 166, 166, 6042, 4661, 166, 5074, 5479, 4822, 166, 166, + 166, 166, 5600, 5853, 166, 1907, 166, 166, 166, 3808, 166, 5997, 5032, 4605, 166, 1732, + 166, 166, 166, 3015, 5454, 166, 166, 166, 3806, 5444, 2238, 1946, 166, 166, 3221, 4922, + 166, 6092, 166, 166, 4007, 166, 3425, 4282, 2571, 166, 1749, 166, 166, 38, 4744, 4900, + 4257, 214, 5687, 166, 2490, 2979, 2924, 166, 4714, 219, 5344, 3836, 3302, 78, 1984, 2986, + 2960, 166, 2869, 3507, 3335, 4967, 2892, 2723, 4849, 5070, 166, 166, 4629, 3815, 166, 4453, + 4760, 166, 3224, 130, 166, 166, 166, 166, 166, 3408, 2494, 2691, 166, 4325, 2932, 5165, + 5573, 166, 4769, 166, 5411, 5637, 2050, 166, 166, 2305, 166, 166, 4834, 24, 4693, 3554, + 2491, 1738, 166, 166, 166, 23, 2758, 3072, 2564, 4800, 5537, 3545, 4133, 166, 166, 166, + 5982, 166, 203, 166, 166, 290, 185, 166, 3774, 1929, 3379, 166, 166, 166, 166, 3002, + 166, 3738, 166, 166, 3344, 4942, 5353, 2777, 2839, 4712, 1830, 2664, 166, 5884, 3516, 166, + 5494, 4169, 2391, 3319, 166, 166, 5918, 2597, 166, 4821, 2787, 5719, 166, 166, 166, 1687, + 6148, 3257, 254, 166, 5180, 6153, 5964, 306, 166, 6123, 166, 5208, 166, 3163, 5938, 1736, + 166, 2502, 4910, 166, 166, 2549, 166, 2900, 3632, 3270, 166, 2082, 5953, 166, 107, 5750, + 166, 166, 166, 5527, 1751, 4168, 2950, 166, 2659, 166, 4189, 1943, 2595, 166, 4191, 166, + 166, 166, 166, 2998, 2296, 5221, 3617, 166, 5435, 2451, 2009, 3005, 2242, 3768, 3658, 166, + 166, 166, 166, 166, 2481, 2256, 166, 166, 4074, 166, 3120, 166, 4409, 1759, 166, 166, + 1679, 3659, 3499, 5219, 4501, 3082, 2047, 166, 166, 166, 4560, 2768, 5251, 166, 166, 166, + 2437, 3993, 3215, 2447, 166, 166, 166, 2993, 4963, 166, 3045, 166, 166, 166, 166, 166, + 166, 166, 5521, 166, 166, 4868, 166, 3895, 166, 6131, 3949, 3306, 3785, 166, 166, 4895, + 4831, 166, 1772, 166, 166, 5928, 166, 2137, 4805, 2462, 310, 2667, 3561, 166, 166, 2312, + 4931, 5255, 166, 166, 166, 5670, 166, 2285, 166, 4672, 5310, 166, 2103, 2174, 166, 166, + 166, 166, 5417, 166, 4726, 4203, 166, 166, 166, 5581, 166, 5665, 166, 166, 5747, 166, + 166, 2509, 1973, 2749, 5463, 166, 166, 4567, 5014, 166, 3322, 3051, 166, 4090, 166, 3709, + 3887, 3478, 166, 166, 166, 166, 3565, 3934, 166, 32, 166, 166, 166, 2239, 166, 3947, + 3849, 166, 2022, 166, 2169, 166, 4691, 98, 166, 3804, 4155, 1640, 4002, 166, 2138, 1739, + 3730, 5970, 2274, 4873, 3119, 166, 4925, 3577, 3699, 4049, 3982, 166, 5161, 1744, 166, 166, + 166, 5704, 4979, 2686, 5383, 5744, 2289, 166, 166, 166, 3927, 2539, 166, 166, 166, 2585, + 166, 4723, 3755, 4509, 166, 4961, 2194, 2535, 166, 176, 166, 4494, 166, 4171, 166, 266, + 166, 3454, 5369, 166, 166, 5899, 5284, 166, 3607, 3566, 5514, 166, 1843, 166, 3997, 4599, + 2743, 166, 2857, 2497, 2751, 166, 166, 166, 3511, 5742, 166, 166, 166, 4504, 166, 166, + 166, 5082, 4401, 166, 166, 5431, 166, 166, 1949, 4539, 166, 166, 4852, 166, 166, 3457, + 166, 3433, 4669, 166, 1692, 2454, 3258, 6159, 166, 166, 166, 166, 166, 2788, 4350, 3249, + 3816, 4893, 166, 4846, 166, 4993, 1708, 4138, 166, 2895, 2891, 166, 1860, 166, 2480, 1927, + 3853, 166, 166, 166, 5100, 166, 3143, 5159, 166, 4286, 5182, 5246, 4975, 166, 2905, 166, + 4917, 5102, 2044, 6016, 5673, 2005, 5090, 166, 4634, 3333, 166, 5702, 3413, 1762, 6094, 4284, + 4431, 2641, 166, 4463, 5691, 166, 166, 3442, 3473, 4192, 2046, 166, 3838, 166, 3217, 3349, + 166, 2243, 166, 3490, 166, 166, 166, 5922, 166, 166, 166, 4885, 1798, 2884, 2750, 5004, + 2741, 166, 166, 5649, 166, 4410, 166, 166, 3382, 166, 166, 1913, 1703, 5532, 3770, 166, + 5116, 2645, 2634, 4357, 5901, 166, 166, 5538, 166, 166, 166, 6028, 166, 166, 5840, 4102, + 2704, 2091, 5287, 166, 4757, 2282, 166, 2650, 3528, 64, 253, 3732, 166, 166, 166, 166, + 166, 3465, 166, 166, 166, 5848, 3110, 111, 166, 166, 3403, 2926, 6030, 3366, 1948, 4430, + 5509, 3250, 3972, 2587, 3579, 166, 6048, 250, 5275, 4242, 2615, 3112, 3558, 166, 166, 2342, + 166, 5157, 1917, 2733, 5647, 1934, 5675, 166, 3981, 2923, 5213, 5326, 37, 166, 5288, 3069, + 166, 1923, 5755, 166, 166, 166, 1888, 166, 6041, 5895, 5376, 3727, 3901, 166, 5589, 166, + 166, 4609, 166, 166, 166, 4706, 166, 4482, 1622, 166, 171, 166, 166, 4646, 4151, 2755, + 4614, 166, 2072, 5409, 4469, 1647, 4434, 4633, 1915, 166, 3615, 4808, 166, 3388, 166, 5280, + 2731, 166, 166, 2417, 166, 14, 166, 4533, 5126, 166, 2778, 3022, 166, 166, 166, 4830, + 4764, 166, 166, 166, 4982, 166, 4265, 166, 2466, 5678, 147, 1883, 166, 166, 166, 114, + 4000, 2427, 3597, 166, 4853, 5981, 166, 2023, 2519, 166, 1937, 2221, 4676, 166, 4522, 5716, + 166, 2432, 5731, 166, 6020, 6163, 4351, 2442, 4380, 166, 4390, 1882, 6139, 4246, 262, 166, + 1676, 5781, 2352, 1956, 200, 166, 166, 5800, 6184, 166, 2355, 149, 5962, 5524, 4238, 166, + 5150, 166, 5888, 2423, 166, 5739, 3192, 4142, 166, 166, 166, 3201, 161, 4460, 2459, 158, + 166, 166, 166, 166, 2689, 166, 166, 166, 166, 1889, 166, 166, 3374, 166, 70, 166, + 2772, 166, 2995, 166, 2384, 4989, 166, 3299, 166, 166, 166, 166, 3614, 3645, 3415, 3160, + 1727, 3735, 5201, 1693, 3531, 166, 166, 1776, 3871, 166, 166, 166, 166, 86, 3553, 166, + 166, 166, 3392, 166, 166, 2232, 166, 4977, 2333, 3394, 2875, 2027, 5736, 166, 1719, 166, + 4952, 2061, 2150, 5526, 166, 4637, 166, 4333, 166, 166, 4733, 4809, 3911, 166, 3460, 166, + 5355, 3126, 4181, 4436, 300, 166, 3841, 166, 4770, 126, 5654, 166, 166, 166, 1730, 166, + 166, 166, 5610, 166, 6002, 2197, 3807, 6109, 166, 166, 166, 166, 166, 5395, 4004, 166, + 46, 166, 166, 2570, 4736, 5318, 4247, 166, 166, 166, 2293, 3031, 4591, 166, 245, 166, + 5510, 1616, 3117, 4163, 166, 166, 4759, 3462, 4819, 4947, 166, 3128, 5946, 2278, 2969, 166, + 166, 5183, 166, 166, 1729, 173, 2448, 166, 230, 2971, 166, 166, 5397, 166, 4093, 3348, + 1866, 4280, 166, 6067, 3794, 166, 166, 166, 4729, 166, 3456, 166, 2394, 166, 4953, 166, + 166, 2258, 4863, 166, 166, 4060, 166, 5468, 305, 166, 6134, 166, 166, 2326, 166, 3453, + 2167, 2845, 166, 166, 166, 5597, 166, 166, 166, 166, 5462, 2809, 5994, 2899, 166, 166, + 166, 5153, 166, 166, 1638, 166, 166, 4938, 3795, 166, 3842, 166, 166, 166, 2769, 3194, + 166, 4745, 5508, 5604, 3910, 166, 166, 4147, 3239, 166, 166, 3548, 3859, 2092, 166, 2705, + 166, 166, 3625, 4131, 166, 3513, 166, 166, 2987, 4555, 3107, 166, 166, 166, 166, 5713, + 4698, 3079, 166, 5342, 166, 166, 2673, 2517, 2745, 1795, 166, 166, 166, 166, 166, 166, + 2463, 166, 166, 2445, 5425, 6138, 166, 2687, 3254, 5871, 166, 2387, 4300, 166, 166, 3529, + 1996, 166, 2369, 3818, 6126, 1615, 2643, 65, 4297, 166, 5324, 3311, 3852, 166, 3868, 4199, + 3978, 166, 166, 166, 5466, 166, 166, 244, 166, 5929, 6157, 2390, 5639, 2267, 2073, 4610, + 5774, 2521, 4556, 166, 4545, 4307, 2426, 2450, 166, 5783, 4968, 6176, 4156, 166, 166, 4126, + 3549, 166, 3581, 5701, 3234, 166, 4013, 1879, 166, 6104, 5874, 166, 166, 3485, 4279, 2528, + 5576, 166, 3992, 166, 3980, 4934, 166, 2176, 4228, 5164, 3784, 1933, 4120, 5055, 166, 166, + 5015, 166, 166, 166, 2310, 1754, 166, 6087, 166, 166, 4548, 5268, 2930, 166, 3656, 166, + 3042, 5229, 166, 4016, 2195, 166, 166, 166, 199, 1745, 3717, 166, 166, 74, 2668, 252, + 4124, 4657, 5223, 166, 2186, 3628, 166, 166, 166, 4222, 3114, 2841, 5103, 3171, 5135, 166, + 166, 2273, 166, 3899, 5332, 5842, 3575, 2579, 2431, 2464, 2229, 3604, 4561, 2977, 2815, 166, + 3916, 166, 5825, 166, 1694, 166, 4030, 166, 5841, 166, 3881, 1831, 166, 5525, 3011, 166, + 5535, 5217, 316, 4116, 166, 166, 2204, 166, 3136, 3650, 166, 5813, 1875, 4511, 4475, 166, + 1999, 166, 2277, 166, 3024, 5484, 5546, 166, 3988, 5676, 166, 2213, 2264, 5214, 166, 4940, + 5974, 166, 4750, 6077, 166, 1652, 3148, 166, 166, 166, 166, 2554, 166, 6167, 5257, 5300, + 166, 166, 166, 166, 5408, 166, 166, 3402, 2141, 166, 4663, 5633, 3312, 166, 2814, 4930, + 1959, 166, 166, 166, 3861, 166, 166, 302, 2624, 166, 166, 166, 1629, 1724, 166, 3909, + 5281, 166, 2001, 4395, 5352, 4428, 2694, 4850, 166, 166, 5242, 5910, 166, 166, 166, 166, + 166, 3212, 166, 2045, 166, 166, 166, 166, 166, 166, 3017, 4960, 4456, 166, 5616, 6093, + 2151, 166, 166, 166, 315, 3381, 166, 166, 166, 4330, 166, 6158, 4721, 6075, 166, 166, + 166, 4543, 2303, 166, 166, 3301, 166, 5000, 3929, 2543, 3437, 166, 166, 166, 3422, 166, + 5987, 5729, 2428, 166, 4035, 5588, 3714, 3834, 5264, 5743, 166, 3305, 4886, 6107, 5156, 166, + 166, 166, 166, 166, 1672, 5849, 5827, 5049, 6101, 2178, 2420, 3289, 166, 166, 4274, 6017, + 2257, 166, 4172, 3451, 2367, 2382, 166, 2964, 4918, 3241, 2347, 6082, 99, 2383, 166, 4454, + 163, 2460, 165, 304, 1818, 5580, 166, 312, 5790, 293, 5794, 5519, 5083, 3360, 5748, 166, + 3750, 5034, 166, 166, 166, 1863, 3168, 166, 166, 166, 5111, 166, 166, 166, 166, 2183, + 4510, 166, 166, 3495, 4382, 4235, 4462, 166, 4056, 5885, 17, 5028, 1614, 6038, 166, 2488, + 5632, 3089, 166, 1940, 66, 4039, 3999, 235, 166, 166, 3829, 3954, 166, 2365, 269, 166, + 166, 166, 166, 166, 166, 4418, 1796, 4709, 2004, 166, 3596, 5786, 166, 2819, 4624, 3152, + 2968, 2838, 166, 5575, 1767, 5603, 166, 4386, 5890, 166, 1768, 4201, 3560, 166, 166, 166, + 2184, 2262, 2966, 2716, 1765, 2611, 2983, 166, 4164, 4084, 142, 5314, 166, 166, 4071, 166, + 2578, 2849, 3600, 166, 166, 166, 166, 5401, 4814, 3431, 166, 5088, 5084, 198, 166, 3578, + 3764, 166, 2097, 166, 166, 5390, 4443, 166, 3166, 166, 4816, 166, 166, 166, 166, 3130, + 5963, 1788, 2129, 1837, 4100, 6128, 166, 4586, 5945, 4772, 166, 5741, 3151, 3247, 5645, 4507, + 5833, 3904, 6013, 2506, 3050, 4175, 1705, 3019, 166, 5942, 166, 2418, 3430, 2230, 5745, 166, + 2093, 166, 166, 166, 166, 4666, 3246, 192, 2010, 4003, 3533, 5851, 166, 3621, 3684, 3066, + 166, 166, 166, 5073, 3856, 166, 166, 2224, 166, 2637, 4270, 166, 166, 5679, 166, 5792, + 5850, 166, 2589, 3060, 2196, 3476, 3150, 2025, 166, 166, 166, 2657, 166, 3685, 3790, 5587, + 2817, 3692, 166, 166, 166, 2359, 2260, 5896, 2158, 119, 2816, 5753, 166, 2739, 5772, 166, + 2919, 2147, 1985, 4271, 4838, 4991, 166, 166, 166, 5244, 166, 319, 166, 166, 2779, 4732, + 4994, 5424, 166, 166, 3968, 3049, 3393, 4473, 4959, 5967, 5864, 5170, 4209, 166, 4810, 4815, + 4205, 2339, 5023, 2279, 5050, 166, 5837, 132, 166, 166, 166, 2247, 21, 4775, 166, 166, + 5286, 166, 4170, 4099, 4803, 5767, 166, 166, 166, 5811, 2240, 5699, 2499, 166, 4802, 166, + 5785, 166, 166, 166, 3181, 3435, 166, 3339, 166, 5669, 3865, 2249, 5002, 166, 4694, 5461, + 4753, 166, 3157, 166, 1960, 166, 166, 166, 2440, 166, 5818, 5534, 2439, 1717, 166, 3789, + 2959, 166, 2943, 166, 2576, 166, 2002, 2007, 1819, 3256, 4402, 5311, 3832, 160, 166, 166, + 2803, 166, 3264, 166, 5863, 166, 2017, 166, 2798, 166, 166, 166, 166, 5607, 4965, 166, + 166, 166, 4537, 4378, 5944, 3494, 5457, 5602, 1942, 5900, 5780, 4411, 5147, 166, 4966, 2115, + 155, 2827, 1980, 5063, 166, 285, 5912, 3304, 2963, 5179, 3220, 166, 166, 166, 2190, 3708, + 5476, 1944, 2366, 3893, 166, 166, 166, 3759, 166, 5434, 2740, 1707, 4244, 5426, 166, 166, + 166, 3155, 166, 4285, 166, 166, 166, 166, 5721, 166, 3833, 6001, 301, 166, 166, 2574, + 186, 2724, 166, 1873, 3667, 166, 5216, 166, 2935, 2100, 4987, 166, 2284, 166, 166, 2911, + 3828, 4009, 166, 2065, 166, 5496, 6130, 5563, 4387, 166, 3771, 3469, 2989, 2222, 4577, 3965, + 4296, 2975, 3813, 3240, 166, 4780, 4481, 3387, 2338, 166, 6183, 166, 166, 166, 166, 166, + 2675, 1761, 2600, 5167, 3170, 4773, 2165, 5166, 166, 2223, 4642, 166, 166, 4540, 166, 166, + 166, 3897, 166, 2483, 1809, 5477, 3844, 4067, 2508, 2275, 166, 166, 166, 166, 166, 3497, + 5458, 166, 249, 2956, 166, 4651, 166, 283, 166, 166, 4955, 4062, 2315, 2304, 3261, 2361, + 4791, 4389, 1997, 166, 3455, 166, 166, 166, 166, 166, 166, 4746, 5695, 5296, 105, 1841, + 3368, 166, 166, 166, 5228, 166, 3496, 4423, 2024, 3907, 4774, 166, 166, 166, 166, 166, + 2294, 2193, 166, 166, 166, 166, 166, 166, 166, 166, 4393, 166, 166, 2127, 166, 4573, + 166, 5350, 166, 5016, 3372, 166, 5653, 166, 5972, 4719, 166, 166, 166, 166, 166, 5370, + 166, 6142, 166, 166, 3691, 2828, 166, 2601, 166, 2937, 2060, 3654, 3097, 2341, 5325, 4568, + 4096, 2776, 166, 2946, 166, 166, 166, 5843, 1777, 5295, 2837, 4261, 4397, 5006, 5808, 4866, + 166, 1713, 5732, 2954, 166, 166, 27, 166, 4308, 5629, 2652, 2434, 4474, 166, 4928, 166, + 4727, 3811, 166, 166, 5234, 166, 6010, 166, 4911, 166, 4570, 166, 6000, 3450, 5304, 3919, + 166, 166, 4008, 3942, 166, 272, 2363, 2064, 3595, 3505, 166, 166, 3957, 1695, 2452, 4659, + 166, 1792, 166, 131, 5968, 166, 3731, 3905, 4115, 166, 166, 2468, 166, 2727, 166, 3526, + 4724, 166, 4388, 3149, 5539, 5092, 4440, 6162, 166, 166, 193, 4429, 2493, 166, 166, 3683, + 166, 6029, 166, 277, 166, 166, 166, 5240, 2408, 166, 309, 2561, 210, 166, 5200, 166, + 166, 166, 1930, 5692, 2697, 166, 166, 166, 3330, 5331, 3860, 166, 166, 4335, 166, 50, + 3605, 4289, 1763, 166, 166, 166, 166, 3521, 166, 166, 166, 3668, 166, 166, 166, 166, + 166, 3271, 1656, 166, 166, 4782, 166, 2962, 166, 5907, 166, 3245, 3375, 2944, 5933, 166, + 166, 5406, 5655, 3139, 5423, 166, 4359, 5231, 2548, 166, 3831, 2858, 5488, 166, 5824, 166, + 166, 166, 3885, 4372, 166, 166, 4024, 166, 4811, 2970, 166, 4219, 211, 166, 3471, 166, + 166, 166, 166, 3854, 166, 3358, 2877, 166, 166, 5205, 2804, 166, 166, 166, 4452, 166, + 166, 166, 166, 3776, 166, 166, 3075, 4208, 166, 5623, 1974, 166, 2647, 166, 3235, 166, + 166, 166, 5211, 166, 166, 4304, 2206, 166, 4157, 2182, 166, 1816, 2626, 166, 2893, 2248, + 166, 166, 166, 166, 1983, 5648, 166, 194, 166, 2106, 4328, 166, 4742, 166, 166, 5572, + 2329, 3314, 166, 6181, 166, 166, 26, 166, 6026, 166, 166, 2114, 1669, 4735, 166, 166, + 4256, 166, 1861, 166, 5470, 2317, 166, 4404, 2482, 166, 5305, 4415, 5986, 4949, 5412, 166, + 1728, 166, 1898, 166, 166, 4909, 1989, 166, 166, 166, 2836, 2051, 274, 166, 2799, 166, + 5865, 1663, 4705, 5121, 2555, 166, 4316, 4287, 1880, 1825, 166, 3689, 166, 1733, 5012, 166, + 166, 2237, 4471, 1682, 2910, 166, 5366, 166, 166, 166, 166, 4532, 166, 2802, 166, 166, + 166, 4057, 2471, 166, 2889, 166, 166, 4026, 5682, 3091, 166, 1977, 166, 2901, 6137, 5658, + 88, 2318, 1965, 166, 5914, 166, 166, 4468, 1822, 166, 6050, 5956, 2201, 166, 4644, 2918, + 166, 3703, 166, 166, 3524, 4220, 2913, 4210, 166, 166, 2090, 166, 1906, 1911, 166, 166, + 3671, 2370, 166, 2552, 166, 3763, 2259, 1924, 166, 5940, 166, 166, 166, 3185, 3821, 4069, + 261, 2381, 3244, 166, 166, 5715, 166, 2052, 5905, 166, 2403, 166, 3030, 2199, 166, 3550, + 166, 166, 1846, 166, 166, 95, 166, 289, 3208, 2559, 5195, 5091, 1654, 166, 1781, 1892, + 166, 4516, 2629, 166, 1700, 3067, 166, 166, 166, 2080, 1680, 166, 166, 166, 5700, 166, + 1820, 5491, 166, 4226, 166, 166, 166, 166, 4653, 166, 3508, 227, 5364, 166, 2098, 166, + 299, 166, 5795, 166, 166, 166, 166, 3690, 4134, 5517, 4534, 5042, 4874, 5798, 4234, 166, + 166, 166, 166, 3702, 166, 166, 3638, 3108, 3850, 166, 166, 166, 16, 166, 1775, 166, + 4022, 166, 223, 4095, 166, 5127, 4266, 166, 189, 166, 166, 5203, 166, 1805, 3884, 3778, + 166, 166, 2146, 4818, 166, 2848, 3440, 4506, 5886, 3006, 218, 166, 2377, 166, 4091, 5925, + 166, 4320, 166, 2701, 3036, 166, 166, 166, 4715, 166, 3801, 166, 3161, 166, 2077, 166, + 4254, 3032, 243, 1814, 166, 166, 166, 166, 166, 166, 166, 166, 1835, 166, 4394, 166, + 5769, 4923, 166, 2917, 166, 166, 178, 166, 166, 1723, 166, 5887, 166, 4956, 2952, 166, + 4665, 3925, 3443, 3123, 166, 166, 166, 166, 166, 166, 5144, 166, 4288, 2074, 2192, 5442, + 6043, 1746, 2016, 5995, 2203, 166, 5686, 5659, 3193, 166, 4055, 166, 166, 2233, 3571, 5809, + 5984, 2323, 166, 166, 1740, 89, 4356, 6053, 6106, 3282, 4796, 166, 6116, 6056, 2353, 2829, + 166, 5807, 2042, 166, 166, 166, 1670, 5937, 4465, 5646, 166, 5562, 3008, 166, 2419, 3736, + 166, 4132, 169, 166, 166, 166, 2402, 166, 166, 1968, 2398, 166, 1684, 1827, 4551, 2679, + 3875, 166, 5585, 3835, 2295, 166, 1991, 1803, 2992, 166, 166, 5847, 2649, 166, 76, 5415, + 166, 2269, 2397, 5387, 5337, 4422, 166, 2672, 4832, 4617, 166, 166, 166, 166, 4552, 166, + 4612, 1750, 166, 1931, 166, 1691, 2424, 4194, 6018, 166, 166, 4458, 4856, 166, 2089, 3814, + 166, 2844, 166, 3592, 166, 4867, 5128, 166, 2685, 166, 166, 2616, 1972, 2617, 3943, 4664, + 166, 4999, 166, 166, 145, 3635, 166, 166, 4851, 166, 3483, 5039, 166, 3649, 3924, 166, + 166, 166, 3105, 4260, 166, 6098, 166, 3568, 267, 2456, 3653, 2096, 166, 166, 166, 3512, + 166, 3405, 166, 3504, 166, 166, 166, 4005, 2144, 1769, 166, 5474, 1920, 5554, 215, 2443, + 3351, 166, 5961, 166, 166, 166, 166, 242, 2331, 166, 166, 5931, 166, 166, 5862, 166, + 1710, 166, 166, 166, 3321, 166, 4139, 166, 166, 3515, 2732, 2510, 5544, 166, 166, 2783, + 166, 166, 166, 4018, 4649, 5789, 166, 166, 166, 166, 166, 2726, 6074, 166, 166, 166, + 5684, 166, 166, 3395, 166, 3100, 166, 5763, 3757, 1992, 166, 3198, 2003, 166, 166, 4675, + 166, 1893, 5621, 166, 2270, 166, 166, 166, 5421, 5590, 5664, 4045, 166, 3687, 4406, 2699, + 1811, 167, 4036, 5384, 166, 166, 4601, 1823, 4041, 239, 1954, 166, 146, 166, 166, 3077, + 5152, 5814, 1649, 5681, 166, 5868, 166, 166, 3792, 4860, 166, 5335, 5110, 1718, 166, 166, + 166, 166, 3718, 3365, 2826, 166, 166, 5021, 4783, 166, 5569, 5812, 166, 166, 1876, 166, + 3260, 166, 1789, 5667, 4224, 166, 166, 4385, 166, 166, 2620, 166, 4162, 2883, 2143, 5497, + 166, 166, 5316, 5680, 166, 166, 248, 4050, 166, 6021, 166, 2898, 4618, 166, 166, 166, + 166, 166, 5368, 166, 5378, 1842, 1914, 3696, 3962, 166, 4345, 2581, 1773, 2109, 166, 4371, + 166, 166, 3761, 5277, 5870, 3146, 166, 166, 166, 5764, 127, 3058, 4059, 4718, 166, 5097, + 5040, 5351, 3205, 166, 166, 4996, 2991, 2014, 166, 5846, 2558, 2688, 5595, 4027, 3347, 2125, + 5696, 5608, 166, 166, 3228, 3745, 5775, 166, 1757, 4647, 166, 5977, 3020, 166, 240, 2565, + 166, 4459, 166, 3367, 166, 166, 166, 3104, 166, 166, 166, 166, 166, 166, 259, 5486, + 2846, 166, 166, 166, 4778, 2713, 166, 3955, 5683, 2682, 2914, 5898, 166, 166, 166, 4400, + 317, 166, 5185, 3021, 5983, 4332, 3891, 166, 3095, 5003, 166, 166, 166, 5367, 166, 279, + 1784, 4019, 2736, 4905, 2651, 5346, 166, 4841, 166, 5606, 166, 166, 2806, 166, 5239, 166, + 166, 3237, 5490, 166, 225, 166, 166, 2254, 166, 2742, 4587, 22, 166, 166, 166, 5555, + 166, 108, 2927, 2218, 166, 2120, 166, 5452, 4087, 4369, 166, 166, 166, 166, 166, 4583, + 4338, 6035, 2840, 4365, 3624, 11, 1770, 166, 4630, 166, 3216, 166, 166, 166, 4638, 4699, + 3535, 2536, 4627, 166, 166, 5760, 1935, 166, 166, 5210, 166, 2219, 2484, 4597, 5193, 4799, + 3706, 166, 166, 166, 166, 3337, 3113, 5951, 4294, 166, 4040, 3200, 4217, 5861, 2767, 3530, + 4499, 2775, 4121, 134, 5939, 5880, 5908, 3869, 166, 166, 3316, 6095, 2441, 3288, 166, 3751, + 4794, 166, 166, 5803, 6169, 2356, 6182, 6135, 6127, 166, 3018, 166, 1674, 166, 166, 4097, + 166, 5923, 287, 5965, 5129, 166, 4078, 166, 166, 6114, 6015, 5990, 3573, 166, 4146, 2681, + 90, 6055, 4864, 166, 166, 6119, 3284, 6054, 5456, 5113, 6125, 166, 6057, 166, 3292, 166, + 166, 166, 166, 166, 6185, 5105, 1760, 166, 166, 166, 2720, 166, 2695, 5448, 166, 1936, + 166, 1807, 3406, 166, 166, 2161, 1642, 166, 5030, 166, 2036, 5451, 3427, 166, 166, 166, + 166, 3797, 166, 1627, 166, 4515, 166, 166, 166, 4241, 166, 166, 166, 2771, 166, 31, + 5197, 2638, 3035, 166, 166, 3914, 166, 166, 4546, 166, 166, 166, 4253, 3500, 166, 166, + 2526, 166, 2698, 166, 3726, 2744, 137, 166, 166, 2676, 166, 5594, 166, 166, 166, 4842, + 166, 63, 2888, 3585, 4798, 166, 5011, 166, 5634, 5464, 166, 166, 5620, 3894, 4070, 166, + 2730, 166, 166, 1810, 2503, 5957, 1721, 6066, 5188, 166, 166, 1890, 4505, 1771, 5455, 166, + 3132, 3984, 166, 166, 2811, 1962, 166, 166, 4872, 106, 3898, 3267, 166, 2085, 166, 4950, + 6040, 4525, 6044, 5866, 3613, 2907, 4615, 2135, 258, 166, 1681, 1941, 4888, 166, 4859, 6178, + 6174, 4858, 5209, 1912, 3340, 166, 4640, 5706, 166, 2763, 3153, 3951, 166, 5542, 5596, 5819, + 5330, 5048, 4037, 166, 6033, 4625, 3326, 2013, 5283, 136, 3373, 2154, 166, 166, 166, 4421, + 166, 5438, 2627, 2266, 2320, 166, 2588, 4790, 4290, 166, 4767, 5829, 2925, 5916, 2133, 166, + ], + hashAdjust: [ + 0, 5628, 7017, 1298, 2918, 2442, 8070, 6383, 6383, 7425, 2442, 5628, 8044, 7425, 3155, 6383, 2918, 7452, 1533, 6849, 5586, + 7452, 7452, 1533, 2209, 6029, 2794, 3509, 7992, 7733, 7452, 131, 6029, 4491, 1814, 7452, 6110, 3155, 7077, 6675, 532, 1334, + 7555, 5325, 3056, 1403, 1403, 3969, 4491, 1403, 7592, 522, 8070, 1403, 0, 1905, 3584, 2918, 922, 3304, 6675, 0, 7622, 7017, + 3210, 2139, 1403, 5225, 0, 3969, 7992, 5743, 5499, 5499, 5345, 7452, 522, 305, 3056, 7017, 7017, 2139, 1338, 3056, 7452, 1403, + 6799, 3204, 3290, 4099, 1814, 2191, 4099, 5743, 1570, 1334, 7363, 1905, 0, 6799, 4400, 1480, 6029, 1905, 0, 7525, 2028, 2794, + 131, 7646, 3155, 4986, 1858, 2442, 7992, 1607, 3584, 4986, 706, 6029, 5345, 7622, 6322, 5196, 1905, 6847, 218, 1785, 0, 4099, + 2981, 6849, 4751, 3950, 7733, 3056, 5499, 4055, 6849, 1533, 131, 5196, 2918, 3879, 5325, 2794, 6029, 0, 0, 322, 7452, 6178, + 2918, 2320, 6675, 3056, 6675, 1533, 6029, 1428, 2280, 2171, 6788, 7452, 3325, 107, 4262, 311, 5562, 7857, 6110, 2139, 4942, + 4600, 1905, 0, 3083, 5345, 7452, 6675, 0, 6112, 4099, 7017, 1338, 6799, 2918, 1232, 3584, 522, 6029, 5325, 1403, 6759, 6849, + 508, 6675, 2987, 7745, 6870, 896, 7452, 1232, 4400, 12, 2981, 3850, 4491, 6849, 0, 6675, 747, 4491, 7525, 6675, 7452, 7992, + 6921, 7323, 6849, 3056, 1199, 2139, 6029, 6029, 190, 4351, 7891, 4400, 7134, 1533, 1194, 3950, 6675, 5345, 6383, 7622, 131, + 1905, 2883, 6383, 1533, 5345, 2794, 4303, 1403, 0, 1338, 2794, 992, 4871, 6383, 4099, 2794, 3889, 6184, 3304, 1905, 6383, + 3950, 3056, 522, 1810, 3975, 7622, 7452, 522, 6799, 5866, 7084, 7622, 6528, 2798, 7452, 1810, 7907, 642, 5345, 1905, 6849, + 6675, 7745, 2918, 4751, 3229, 2139, 6029, 5207, 6601, 2139, 7452, 5890, 1428, 5628, 7622, 2139, 3146, 2400, 578, 941, 7672, + 1814, 3210, 1533, 4491, 12, 2918, 1900, 7425, 2794, 2987, 3465, 1377, 3822, 3969, 3210, 859, 5499, 6878, 1377, 3056, 4027, + 8065, 8065, 5207, 4400, 4303, 3210, 3210, 0, 6675, 357, 5628, 5512, 1905, 3452, 1403, 7646, 859, 6788, 3210, 2139, 378, 5663, + 7733, 870, 0, 4491, 4813, 2110, 578, 2139, 3056, 4099, 1905, 1298, 4672, 2191, 3950, 5499, 3969, 4974, 6323, 6029, 7414, 6383, + 0, 4974, 3210, 795, 4099, 131, 5345, 5345, 6576, 1810, 1621, 4400, 2918, 1905, 2442, 2679, 6322, 7452, 2110, 1403, 6383, 2653, + 5132, 6856, 7841, 2794, 6110, 2028, 6675, 7425, 6999, 7441, 6029, 183, 6675, 4400, 859, 1403, 2794, 5985, 5345, 1533, 322, + 4400, 1227, 5890, 4474, 4491, 3574, 8166, 6849, 7086, 5345, 5345, 5459, 3584, 6675, 3969, 7579, 8044, 2295, 2577, 1480, 5743, + 3304, 5499, 330, 4303, 6863, 3822, 4600, 4751, 5628, 3822, 2918, 6675, 2400, 6663, 1403, 6849, 6029, 3145, 6110, 3210, 747, + 3229, 3056, 2918, 7733, 330, 4055, 7322, 5628, 2987, 3056, 1905, 2903, 669, 5325, 2845, 4099, 5225, 6283, 4099, 5000, 642, + 4055, 5345, 8034, 2918, 1041, 5769, 7051, 1538, 2918, 3366, 608, 4303, 3921, 0, 2918, 1905, 218, 6687, 5963, 859, 3083, 2987, + 896, 5056, 1905, 2918, 4415, 7966, 7646, 2883, 5628, 7017, 8029, 6528, 4474, 6322, 5562, 6669, 4610, 7006, + ] +}; diff --git a/src/inc/helper.mjs b/src/inc/helper.mjs index a0cac56..77a7a45 100644 --- a/src/inc/helper.mjs +++ b/src/inc/helper.mjs @@ -9,7 +9,7 @@ try { } export default new class { - suits = { "♠": "S", "♣": "C", "♦": "D", "♥": "H" }; + suits = { "♠": "s", "♣": "c", "♦": "d", "♥": "h" }; stripColors = msg => msg.replace(/\x03\d{0,2}(,\d{0,2}|\x02\x02)?/g, ''); rand = (max = 1) => ~~(Math.random() * (max - 1) + 1); diff --git a/src/inc/hr.mjs b/src/inc/hr.mjs new file mode 100644 index 0000000..cd5d0cb --- /dev/null +++ b/src/inc/hr.mjs @@ -0,0 +1,136 @@ +import constants from './constants.mjs'; + +export default new class handranker { + rankHands(board, hand) { + const bestHand = this.calcBestHand(hand.map(c => this.toCard(c)), board.map(c => this.toCard(c))); + + return { + rank: bestHand.rank, + percentage: (9999 - bestHand.rank) / 100, + combination: this.toCombination(bestHand.rank), + //madeHand: bestHand.madeHand.map((c) => this.toPlayingCard(c)), + //unused: bestHand.unused.map((c) => this.toPlayingCard(c)), + }; + }; + + calcBestHand(pocketCards, communityCards) { + const cards = [...pocketCards, ...communityCards]; + const { rank, madeHand } = this.rank567cardHand([...pocketCards, ...communityCards]); + return { + rank, + madeHand, + unused: cards.filter((c) => !madeHand.find((mc) => mc === c)), + }; + }; + + toCombination(rank) { + const fixedRank = this.toFixedTexasRank(rank); + if(fixedRank === 10) return 'StraightFlush'; + if(fixedRank === 166) return 'FourOfAKind'; + if(fixedRank === 322) return 'FullHouse'; + if(fixedRank === 1599) return 'Flush'; + if(fixedRank === 1609) return 'Straight'; + if(fixedRank === 2467) return 'ThreeOfAKind'; + if(fixedRank === 3325) return 'TwoPairs'; + if(fixedRank === 6185) return 'Pair'; + if(fixedRank === 7462) return 'HighCard'; + return 'Invalid'; + }; + + cactusFastRankHand(hand) { + const [c0, c1, c2, c3, c4] = hand; + if((c0 & c1 & c2 & c3 & c4 & 0xf000) !== 0) + return constants.fastFlushes[(c0 | c1 | c2 | c3 | c4) >>> 16]; + const r = constants.fastUnique5[(c0 | c1 | c2 | c3 | c4) >>> 16]; + if(r) + return r; + let u = 0xe91aaa35 + (((c0 & 0xff) * (c1 & 0xff) * (c2 & 0xff) * (c3 & 0xff) * (c4 & 0xff)) | 0); + u = u ^ (u >>> 16); + u += u << 8; + u ^= u >>> 4; + return constants.hash[((u + (u << 2)) >>> 19) ^ (constants.hashAdjust[(u >>> 8) & 0x1ff] | 0)]; + }; + + rank567cardHand(hand) { + if(hand.length === 5) { + return { + rank: this.cactusFastRankHand([hand[0], hand[1], hand[2], hand[3], hand[4]]), + madeHand: [hand[0], hand[1], hand[2], hand[3], hand[4]], + }; + } + if(hand.length === 6) { + const possibleHands = [ + [hand[0], hand[1], hand[2], hand[3], hand[4]], + [hand[0], hand[1], hand[2], hand[3], hand[5]], + [hand[0], hand[1], hand[2], hand[4], hand[5]], + [hand[0], hand[1], hand[3], hand[4], hand[5]], + [hand[0], hand[2], hand[3], hand[4], hand[5]], + [hand[1], hand[2], hand[3], hand[4], hand[5]], + ]; + const sortedHands = possibleHands.map(h => ({ + rank: this.cactusFastRankHand(h), + madeHand: h, + })).sort((a, b) => a.rank - b.rank); + return sortedHands[0]; + } + if (hand.length === 7) { + let r = 0; + let rank = 9999; + let bestHand = [hand[0], hand[1], hand[2], hand[3], hand[4]]; + for (let i = 0; i < 21; i++) { + const inputHand = [ + hand[constants.t7c5[i][0]], + hand[constants.t7c5[i][1]], + hand[constants.t7c5[i][2]], + hand[constants.t7c5[i][3]], + hand[constants.t7c5[i][4]], + ]; + r = this.cactusFastRankHand(inputHand); + if (r < rank) { + rank = r; + bestHand = inputHand; + } + } + return { + rank, + madeHand: bestHand, + }; + } + throw new Error(`Hand ranker doesn't support ${hand.length} cards`); + }; + + toFixedTexasRank(r) { + if(r <= 10) return 10; // StraightFlush + if(r <= 166) return 166; // FourOfAKind + if(r <= 322) return 322; // FullHouse + if(r <= 1599) return 1599; // Flush + if(r <= 1609) return 1609; // Straight + if(r <= 2467) return 2467; // ThreeOfAKind + if(r <= 3325) return 3325; // TwoPairs + if(r <= 6185) return 6185; // Pair + if(r != 65535) return 7462; // HighCard + return 65535; // Invalid + }; + + toPlayingCard(card) { + const rankRune = constants.rankToRune[(card >> 8) & 0xf]; + const suitRune = constants.suitToRune[(card >> 12) & 0xf]; + if (!rankRune || !suitRune) { + throw new Error(`Cannot convert Card ${card} to PlayingCard`); + } + return (rankRune + suitRune); + }; + + toCard(playingCard) { + const [rank, suit] = this.toRankAndSuit(playingCard); + return ((1 << rank) << 16) | (suit << 12) | (rank << 8) | constants.PRIMES[rank]; + }; + + toRankAndSuit(playingCard) { + const rank = constants.runeToRank[playingCard[0]]; + const suit = constants.runeToSuit[playingCard[1]]; + if (!suit || rank === undefined) + throw new Error(`Invalid playing card: ${playingCard}`); + return [rank, suit]; + }; +}; diff --git a/src/index.mjs b/src/index.mjs index bec3f2d..782b6c0 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,7 +1,7 @@ import cuffeo from 'cuffeo'; import handranker from './inc/handranker.mjs'; -import { rankHands } from '@xpressit/winning-poker-hand-rank'; import helper from './inc/helper.mjs'; +import hr from './inc/hr.mjs'; const cfg = helper.config; export const bot = await new cuffeo(cfg.getFull().clients); @@ -29,6 +29,30 @@ bot.on("notice", msg => { bot.on("message", async e => { if(e.channel !== cfg.get('channel')) return; + if(e.message.startsWith(".cards ")) { + let cards = []; + try { + cards = JSON.parse(e.message.slice(7)); + } catch(err) { + return e.reply('das ist kein Array du Pflaumennase'); + } + + const hand = cards.slice(0, 2); + const board = cards.slice(2); + + let rank; + + try { + rank = hr.rankHands(board, hand); + } catch(err) { + console.log(err); + return e.reply(JSON.stringify(err)); + } + + e.reply(JSON.stringify(rank)); + + return; + } if(e.message === `.${e.self.me.nickname} help`) { await e.write(`PRIVMSG ${e.user.nick} I always say hirc schmirc, available commands are:`); const commands = [ @@ -48,32 +72,6 @@ bot.on("message", async e => { await e.write(`PRIVMSG ${e.user.nick} ${command}`); } } - if(e.message.startsWith(".cards ")) { - let cards = []; - try { - cards = JSON.parse(e.message.slice(7)); - } catch(err) { - return e.reply('das ist kein Array du Pflaumennase'); - } - - const all = cards; - const hand = cards.slice(0, 2); - const board = cards.slice(2); - - let oldrank; - let newrank; - - try { - oldrank = rankHands('texas', board, [hand])[0]; - newrank = handranker.evalHand(all); - } catch(err) { - return e.reply(JSON.stringify(err)); - } - - e.reply('old: ' + JSON.stringify(oldrank)); - e.reply('new: ' + JSON.stringify(newrank)); - return; - } if(e.message.match(new RegExp(`^${e.self.me.nickname}: Your bank account`))) { env.bank = +e.message.match(/is: (\d+) \(/)[1]; } -- 2.45.2 From 890e0ab5803b8eb029a46f65eec361e6a04d854d Mon Sep 17 00:00:00 2001 From: Flummi Date: Fri, 14 Jul 2023 00:06:15 +0200 Subject: [PATCH 3/3] handranker --- README.md | 2 - data/generate_table | Bin 101132 -> 0 bytes package.json | 3 +- src/inc/handranker.mjs | 112 ++++++++++++++++++++++----------- src/inc/helper.mjs | 2 +- src/inc/hr.mjs | 136 ----------------------------------------- src/index.mjs | 34 +++++------ 7 files changed, 94 insertions(+), 195 deletions(-) delete mode 100755 data/generate_table delete mode 100644 src/inc/hr.mjs diff --git a/README.md b/README.md index 9c52c65..5e0866d 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ ## Installation & Usage npm i -npm run build - cp config.example.json config.json edit config.json diff --git a/data/generate_table b/data/generate_table deleted file mode 100755 index 181922dd2ee90b76c93aed3436ec0485fbb0cda8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101132 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 DW6-dk diff --git a/package.json b/package.json index 8a04c1b..37a93e5 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,7 @@ "x64" ], "scripts": { - "start": "node ./src/index.mjs", - "build": "cd ./data && ./generate_table" + "start": "node ./src/index.mjs" }, "author": "Flummi", "license": "ISC", diff --git a/src/inc/handranker.mjs b/src/inc/handranker.mjs index 8c4456e..15d62c6 100644 --- a/src/inc/handranker.mjs +++ b/src/inc/handranker.mjs @@ -1,44 +1,84 @@ -import fs from 'node:fs'; +import constants from './constants.mjs'; export default new class handranker { - #ranks; + rankHands(board, hand) { + let bestHand = this.calcBestHand([...board, ...hand].map(c => this.toCard(c))); - constructor() { - this.#ranks = fs.readFileSync('./data/HandRanks.dat'); - - this.handtypes = [ - "InvalidHand", "HighCard", "Pair", - "TwoPairs", "ThreeOfAKind", "Straight", - "Flush", "FullHouse", "FourOfAKind", - "StraightFlush" - ]; - - this.cards = ['']; - for(const cv of [..."23456789TJQKA"]) - for(const cs of [..."CDHS"]) - this.cards.push(cv + cs); - }; - evalHand(cards) { - if(!this.#ranks) - throw new Error("HandRanks.dat not loaded, run 'npm run build' first!"); - - if(![7,6,5,3].includes(cards.length)) - throw new Error("Hand must be 3, 5, 6, or 7 cards"); - - cards = cards.map(c => this.cards.indexOf(c)); - - let p = 53; - for(let i = 0; i < cards.length; i++) - p = this.#ranks.readUInt32LE((p + cards[i]) * 4); - - if(cards.length == 5 || cards.length == 6) - p = this.#ranks.readUInt32LE(p * 4); + if(bestHand > 6000) bestHand += 2000; return { - //handType: p >> 12, - handRank: p & 0x00000fff, - value: p, - handName: this.handtypes[p >> 12] + rank: bestHand, + percentage: (9999 - bestHand) / 100, + combination: this.toCombination(bestHand) }; }; + + toCombination(r) { + if(r > 6185) return 'HighCard'; + if(r > 3325) return 'Pair'; + if(r > 2467) return 'TwoPairs'; + if(r > 1609) return 'ThreeOfAKind'; + if(r > 1599) return 'Straight'; + if(r > 322) return 'Flush'; + if(r > 166) return 'FullHouse'; + if(r > 10) return 'FourOfAKind'; + return 'StraightFlush'; + }; + + cactusFastRankHand(hand) { + const [c0, c1, c2, c3, c4] = hand; + if((c0 & c1 & c2 & c3 & c4 & 0xf000) !== 0) + return constants.fastFlushes[(c0 | c1 | c2 | c3 | c4) >>> 16]; + const r = constants.fastUnique5[(c0 | c1 | c2 | c3 | c4) >>> 16]; + if(r) + return r; + let u = 0xe91aaa35 + (((c0 & 0xff) * (c1 & 0xff) * (c2 & 0xff) * (c3 & 0xff) * (c4 & 0xff)) | 0); + u = u ^ (u >>> 16); + u += u << 8; + u ^= u >>> 4; + return constants.hash[((u + (u << 2)) >>> 19) ^ (constants.hashAdjust[(u >>> 8) & 0x1ff] | 0)]; + }; + + calcBestHand(hand) { + if(hand.length === 5) + return this.cactusFastRankHand([hand[0], hand[1], hand[2], hand[3], hand[4]]) + if(hand.length === 6) { + const possibleHands = [ + [hand[0], hand[1], hand[2], hand[3], hand[4]], + [hand[0], hand[1], hand[2], hand[3], hand[5]], + [hand[0], hand[1], hand[2], hand[4], hand[5]], + [hand[0], hand[1], hand[3], hand[4], hand[5]], + [hand[0], hand[2], hand[3], hand[4], hand[5]], + [hand[1], hand[2], hand[3], hand[4], hand[5]], + ]; + const sortedHands = possibleHands.map(h => this.cactusFastRankHand(h)).sort(); + return sortedHands[0]; + } + if(hand.length === 7) { + let r = 0; + let rank = 9999; + for(let i = 0; i < 21; i++) { + const inputHand = [ + hand[constants.t7c5[i][0]], + hand[constants.t7c5[i][1]], + hand[constants.t7c5[i][2]], + hand[constants.t7c5[i][3]], + hand[constants.t7c5[i][4]], + ]; + r = this.cactusFastRankHand(inputHand); + if(r < rank) + rank = r; + } + return rank; + } + throw `Hand ranker doesn't support ${hand.length} cards`; + }; + + toCard(playingCard) { + const rank = constants.runeToRank[playingCard[0]]; + const suit = constants.runeToSuit[playingCard[1]]; + if(!suit || rank === undefined) + throw `Invalid playing card: ${playingCard}`; + return ((1 << rank) << 16) | (suit << 12) | (rank << 8) | constants.PRIMES[rank]; + }; }; diff --git a/src/inc/helper.mjs b/src/inc/helper.mjs index 77a7a45..a0cac56 100644 --- a/src/inc/helper.mjs +++ b/src/inc/helper.mjs @@ -9,7 +9,7 @@ try { } export default new class { - suits = { "♠": "s", "♣": "c", "♦": "d", "♥": "h" }; + suits = { "♠": "S", "♣": "C", "♦": "D", "♥": "H" }; stripColors = msg => msg.replace(/\x03\d{0,2}(,\d{0,2}|\x02\x02)?/g, ''); rand = (max = 1) => ~~(Math.random() * (max - 1) + 1); diff --git a/src/inc/hr.mjs b/src/inc/hr.mjs deleted file mode 100644 index cd5d0cb..0000000 --- a/src/inc/hr.mjs +++ /dev/null @@ -1,136 +0,0 @@ -import constants from './constants.mjs'; - -export default new class handranker { - rankHands(board, hand) { - const bestHand = this.calcBestHand(hand.map(c => this.toCard(c)), board.map(c => this.toCard(c))); - - return { - rank: bestHand.rank, - percentage: (9999 - bestHand.rank) / 100, - combination: this.toCombination(bestHand.rank), - //madeHand: bestHand.madeHand.map((c) => this.toPlayingCard(c)), - //unused: bestHand.unused.map((c) => this.toPlayingCard(c)), - }; - }; - - calcBestHand(pocketCards, communityCards) { - const cards = [...pocketCards, ...communityCards]; - const { rank, madeHand } = this.rank567cardHand([...pocketCards, ...communityCards]); - return { - rank, - madeHand, - unused: cards.filter((c) => !madeHand.find((mc) => mc === c)), - }; - }; - - toCombination(rank) { - const fixedRank = this.toFixedTexasRank(rank); - if(fixedRank === 10) return 'StraightFlush'; - if(fixedRank === 166) return 'FourOfAKind'; - if(fixedRank === 322) return 'FullHouse'; - if(fixedRank === 1599) return 'Flush'; - if(fixedRank === 1609) return 'Straight'; - if(fixedRank === 2467) return 'ThreeOfAKind'; - if(fixedRank === 3325) return 'TwoPairs'; - if(fixedRank === 6185) return 'Pair'; - if(fixedRank === 7462) return 'HighCard'; - return 'Invalid'; - }; - - cactusFastRankHand(hand) { - const [c0, c1, c2, c3, c4] = hand; - if((c0 & c1 & c2 & c3 & c4 & 0xf000) !== 0) - return constants.fastFlushes[(c0 | c1 | c2 | c3 | c4) >>> 16]; - const r = constants.fastUnique5[(c0 | c1 | c2 | c3 | c4) >>> 16]; - if(r) - return r; - let u = 0xe91aaa35 + (((c0 & 0xff) * (c1 & 0xff) * (c2 & 0xff) * (c3 & 0xff) * (c4 & 0xff)) | 0); - u = u ^ (u >>> 16); - u += u << 8; - u ^= u >>> 4; - return constants.hash[((u + (u << 2)) >>> 19) ^ (constants.hashAdjust[(u >>> 8) & 0x1ff] | 0)]; - }; - - rank567cardHand(hand) { - if(hand.length === 5) { - return { - rank: this.cactusFastRankHand([hand[0], hand[1], hand[2], hand[3], hand[4]]), - madeHand: [hand[0], hand[1], hand[2], hand[3], hand[4]], - }; - } - if(hand.length === 6) { - const possibleHands = [ - [hand[0], hand[1], hand[2], hand[3], hand[4]], - [hand[0], hand[1], hand[2], hand[3], hand[5]], - [hand[0], hand[1], hand[2], hand[4], hand[5]], - [hand[0], hand[1], hand[3], hand[4], hand[5]], - [hand[0], hand[2], hand[3], hand[4], hand[5]], - [hand[1], hand[2], hand[3], hand[4], hand[5]], - ]; - const sortedHands = possibleHands.map(h => ({ - rank: this.cactusFastRankHand(h), - madeHand: h, - })).sort((a, b) => a.rank - b.rank); - return sortedHands[0]; - } - if (hand.length === 7) { - let r = 0; - let rank = 9999; - let bestHand = [hand[0], hand[1], hand[2], hand[3], hand[4]]; - for (let i = 0; i < 21; i++) { - const inputHand = [ - hand[constants.t7c5[i][0]], - hand[constants.t7c5[i][1]], - hand[constants.t7c5[i][2]], - hand[constants.t7c5[i][3]], - hand[constants.t7c5[i][4]], - ]; - r = this.cactusFastRankHand(inputHand); - if (r < rank) { - rank = r; - bestHand = inputHand; - } - } - return { - rank, - madeHand: bestHand, - }; - } - throw new Error(`Hand ranker doesn't support ${hand.length} cards`); - }; - - toFixedTexasRank(r) { - if(r <= 10) return 10; // StraightFlush - if(r <= 166) return 166; // FourOfAKind - if(r <= 322) return 322; // FullHouse - if(r <= 1599) return 1599; // Flush - if(r <= 1609) return 1609; // Straight - if(r <= 2467) return 2467; // ThreeOfAKind - if(r <= 3325) return 3325; // TwoPairs - if(r <= 6185) return 6185; // Pair - if(r != 65535) return 7462; // HighCard - return 65535; // Invalid - }; - - toPlayingCard(card) { - const rankRune = constants.rankToRune[(card >> 8) & 0xf]; - const suitRune = constants.suitToRune[(card >> 12) & 0xf]; - if (!rankRune || !suitRune) { - throw new Error(`Cannot convert Card ${card} to PlayingCard`); - } - return (rankRune + suitRune); - }; - - toCard(playingCard) { - const [rank, suit] = this.toRankAndSuit(playingCard); - return ((1 << rank) << 16) | (suit << 12) | (rank << 8) | constants.PRIMES[rank]; - }; - - toRankAndSuit(playingCard) { - const rank = constants.runeToRank[playingCard[0]]; - const suit = constants.runeToSuit[playingCard[1]]; - if (!suit || rank === undefined) - throw new Error(`Invalid playing card: ${playingCard}`); - return [rank, suit]; - }; -}; diff --git a/src/index.mjs b/src/index.mjs index 782b6c0..f0e3762 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,16 +1,15 @@ import cuffeo from 'cuffeo'; import handranker from './inc/handranker.mjs'; import helper from './inc/helper.mjs'; -import hr from './inc/hr.mjs'; const cfg = helper.config; export const bot = await new cuffeo(cfg.getFull().clients); export const env = { - gamestate: 'notstarted, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'), // [notstarted,preflop,flop,turn,river] + gamestate: 'not started, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'), hand: false, board: false, - winchance: false, + odds: false, joined: false, callamount: 0, pot: 0, @@ -43,10 +42,9 @@ bot.on("message", async e => { let rank; try { - rank = hr.rankHands(board, hand); + rank = handranker.rankHands(board, hand); } catch(err) { - console.log(err); - return e.reply(JSON.stringify(err)); + return e.reply(err); } e.reply(JSON.stringify(rank)); @@ -162,7 +160,7 @@ bot.on("message", async e => { // bot's turn if(e.message.match(new RegExp(`Current player: ${e.self.me.nickname}( |$)`))) { let action = 'c'; // default - if(env.gamestate === 'preflop' || !env.winchance) { // preflop + if(env.gamestate === 'preflop' || !env.odds) { // preflop env.lastaction = action; return e.reply(action); // checkcall } @@ -173,7 +171,7 @@ bot.on("message", async e => { if(env.callamount > env.bank) // not enough money lol return e.reply(['huan!', 'f']); - if(env.winchance < 6500) { + if(env.odds < 6500) { if(helper.rand(5) === 1 && env.callamount < (helper.rand(2, 6) * 10)) { // bad hand, call anyway action = 'c'; } @@ -181,32 +179,32 @@ bot.on("message", async e => { action = 'f'; } } - else if(env.winchance > 7000) { // decent hand, raise + else if(env.odds > 55) { // decent hand, raise if(helper.rand(5) === 1) { // 20% action = 'r ' + (env.callamount + helper.rand(5) * 10); } } - else if(env.winchance > 15000) { // good hand lol + else if(env.odds > 70) { // good hand lol if(helper.rand(2) === 1) { // 50% action = 'r ' + (env.callamount + helper.rand(6) * 10); } } - else if(env.winchance > 20000) { // fuck them all + else if(env.odds > 85) { // fuck them all action = 'r ' + (env.callamount + helper.rand(7) * 10); } } else { // checkphase - if(env.winchance > 7000) { // decend hand, raise + if(env.odds > 55) { // decend hand, raise if(helper.rand(5) === 1) { // 20% action = 'r ' + (env.callamount + helper.rand(5) * 10); } } - else if(env.winchance > 15000) { // good hand lol + else if(env.odds > 70) { // good hand lol if(helper.rand(2) === 1) { // 50% action = 'r ' + (env.callamount + helper.rand(6) * 10); } } - else if(env.winchance > 20000) { // fuck them all + else if(env.odds > 85) { // fuck them all action = 'r ' + (env.callamount + helper.rand(7) * 10); } } @@ -226,8 +224,8 @@ bot.on("message", async e => { if(cfg.get('debug')) e.reply(`${oldstate} -> ${env.gamestate}`); - const rank = handranker.evalHand([...env.board, ...env.hand]); - env.winchance = rank.value; + const rank = handranker.rankHands(env.board, env.hand); + env.odds = rank.percentage; } // end of game @@ -246,13 +244,13 @@ bot.on("message", async e => { } const oldstate = env.gamestate; - env.gamestate = 'notstarted, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'); + env.gamestate = 'not started, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'); if(cfg.get('debug')) e.reply(`${oldstate} -> ${env.gamestate}`); env.hand = false; env.board = false; - env.winchance = false; + env.odds = false; env.joined = false; env.pot = 0; env.lastaction = false; -- 2.45.2