1 /* term_fonthash_curses.c
2 
3    Copyright (c) 1997-2003, Sidik Isani (xhomer@isani.org)
4 
5    This file is part of Xhomer.
6 
7    Xhomer is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2
9    as published by the Free Software Foundation.
10 
11    Xhomer is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with Xhomer; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20 
21 /*
22  * d=3
23  * n=1260
24  * m=1024
25  * c=1.23
26  * maxlen=20
27  * minklen=20
28  * maxklen=20
29  * minchar=48
30  * maxchar=111
31  * loop=0
32  * numiter=10
33  * seed=
34  */
35 
36 static int g[] = {
37 	364, 0, 421, 896, -1, 789, 974, 464, 451, 839,
38 	989, 369, 428, 853, 402, 727, -1, 624, 385, 973,
39 	365, 952, 0, 897, 774, 0, 241, 945, 474, 655,
40 	-1, 42, 923, 0, 0, 724, 407, 389, 0, -1,
41 	710, 476, 154, 419, 963, 0, 674, 972, 625, 530,
42 	529, 611, 168, 632, 139, 409, -1, 299, 0, 7,
43 	735, 673, 702, 317, 981, -1, 375, 232, 810, 67,
44 	-1, 511, 748, 847, 879, 965, 683, -1, 1000, 593,
45 	910, 867, 220, 0, 428, -1, 420, 187, 0, -1,
46 	361, 855, 803, 714, 922, -1, 345, 341, 825, 459,
47 	614, 53, 93, 227, 300, 0, 172, 491, 425, 27,
48 	607, 131, 642, -1, 0, 363, 200, 458, 964, 281,
49 	0, 843, 961, 624, 745, 974, 940, 661, -1, 597,
50 	993, 349, 335, 593, 272, 935, 534, -1, 0, 793,
51 	387, 581, 441, 986, 9, 0, -1, 334, 318, 149,
52 	929, 889, 920, 146, 35, 456, 730, 339, 277, 644,
53 	261, -1, 502, 704, 760, 344, 971, -1, 982, 884,
54 	919, 626, 741, -1, 647, 166, 365, 10, 55, 828,
55 	843, 425, -1, 502, 0, 678, 393, 864, 818, 730,
56 	498, 69, 208, 34, 199, 0, -1, 0, 937, 0,
57 	890, 135, 264, 0, 498, 67, 243, 364, -1, -1,
58 	902, 127, 657, 663, 513, 860, 0, 188, 10, 753,
59 	554, 166, 871, 110, 180, 927, 680, 402, 78, 243,
60 	623, 728, 622, 443, 0, 637, 0, 630, 599, 853,
61 	198, 671, 958, 0, 364, 609, 451, 0, 498, 427,
62 	-1, 310, 248, 0, 404, 194, -1, 0, 985, 131,
63 	120, 0, -1, 1005, 624, 778, 809, 127, 857, 45,
64 	554, 112, 767, 15, 896, 77, 897, 0, 855, 834,
65 	384, 201, 288, 246, 502, 829, 524, 880, 988, 786,
66 	301, 432, 0, 821, 306, 678, 0, 513, 984, 0,
67 	866, 933, 588, 646, 859, 839, 823, 606, 853, 910,
68 	615, 810, 0, 456, -1, 631, 1007, 543, 345, 634,
69 	0, -1, 446, 720, 346, 266, -1, 1019, 730, 602,
70 	0, 531, 287, 979, 0, 844, 178, 337, 1013, 469,
71 	139, 189, 12, 774, 0, 861, 972, 832, 527, 893,
72 	829, 752, 261, 186, 599, 608, 266, 659, 0, 0,
73 	270, 640, 505, 30, 604, 782, 846, 585, 592, 0,
74 	144, 660, 452, 533, 988, 880, 577, 402, 468, 666,
75 	0, 527, 0, 319, 887, 126, 18, 516, 33, 500,
76 	825, -1, 189, 975, 963, 0, 65, 591, 0, 860,
77 	640, 175, 0, 455, 467, 58, 127, 358, 817, -1,
78 	549, 438, 523, -1, 896, 0, 416, 933, 627, -1,
79 	0, 842, 227, -1, 509, 0, 953, -1, 0, 604,
80 	633, 340, 308, 430, 0, 105, 438, 577, 655, 830,
81 	857, 264, 530, 444, 630, -1, 516, 549, 0, 992,
82 	539, 968, 660, -1, 0, 633, 41, 677, 941, 600,
83 	778, 448, 0, 109, 181, 0, 1009, 735, 929, -1,
84 	861, 286, 538, 494, 338, -1, 138, 332, 379, 0,
85 	0, -1, 552, 621, 713, 216, 40, 4, 884, 91,
86 	253, 851, 933, 61, 785, 598, 0, 336, 52, 622,
87 	460, 299, -1, 0, -1, 999, 661, -1, 907, 826,
88 	937, 94, 239, 431, 768, 183, 731, 404, 434, 486,
89 	0, 0, 822, 494, 303, 268, 777, 620, 0, 618,
90 	703, 578, 38, 803, 289, 183, 779, 476, 229, 497,
91 	579, 403, 181, 557, 764, -1, 947, 508, 416, 517,
92 	705, -1, 719, 405, 207, 667, 569, 935, 666, 4,
93 	595, 387, 935, 990, -1, 476, 938, 7, 415, -1,
94 	740, 311, 692, 118, 283, 41, 176, 557, 442, 269,
95 	996, 942, 692, 911, 724, 640, 627, 311, 61, 35,
96 	0, 355, -1, 0, 952, 0, 439, 701, 631, 45,
97 	91, 237, 91, 661, 448, 265, 0, 1013, 136, -1,
98 	612, 112, 732, 11, 953, 190, 703, 711, 328, 709,
99 	195, 516, 0, 265, 981, 519, 647, 596, 546, 35,
100 	250, -1, 0, 490, 202, 571, 0, -1, 1015, 676,
101 	911, 972, 79, 0, 155, 23, 669, 769, 859, 38,
102 	167, 246, 313, 960, 592, 268, 755, 997, 922, 0,
103 	171, 0, 1006, 841, 646, 888, 108, 701, 272, 301,
104 	668, 0, 296, 639, 149, 322, -1, 323, 573, 604,
105 	0, 532, 616, -1, 685, 70, 536, 968, 787, -1,
106 	407, 127, 758, 179, 539, 993, 302, 84, 132, 581,
107 	725, -1, 893, 814, 102, 752, 743, 701, 876, 711,
108 	787, 525, 744, 595, 984, 186, 705, 145, 828, 436,
109 	57, 648, 154, 228, 567, 287, 197, 727, 878, 124,
110 	713, 200, -1, 71, 1000, 957, 249, 104, 104, 199,
111 	156, -1, 924, 695, 453, 965, 665, 1010, 384, 1002,
112 	864, 810, 0, -1, 0, 1014, 193, 429, 0, 0,
113 	0, 78, 531, 975, 862, 811, 1021, 894, 605, 652,
114 	549, -1, -1, 587, 46, 159, 956, 107, 576, 600,
115 	50, 983, 345, 717, 0, 39, -1, 295, 328, 0,
116 	624, 477, 919, 687, -1, 202, 180, 377, 578, 974,
117 	0, 1007, 98, 982, 673, 0, 0, 277, -1, 184,
118 	651, 923, 700, 590, 744, 631, 913, 320, 810, 49,
119 	225, 480, 681, 1011, 240, 81, -1, 0, 732, 536,
120 	230, 322, 344, 274, 994, 1017, 7, 625, -1, 20,
121 	279, 605, 559, -1, 955, 1012, 916, 899, 208, 44,
122 	0, 153, 873, 333, 0, 353, 266, 840, 849, 105,
123 	851, 757, 54, 889, -1, -1, 835, 485, 563, 675,
124 	389, 507, 430, 931, 719, -1, 414, -1, 456, 636,
125 	629, 1001, 72, 791, 23, 427, 501, 0, 507, 0,
126 	351, -1, 40, 781, 144, -1, 0, -1, 873, 79,
127 	0, 0, 911, -1, 0, 0, 131, 0, 0, 75,
128 	191, 100, -1, 833, 733, 486, 525, 0, 0, 273,
129 	936, 86, 819, 163, 54, 649, 208, 112, 422, 69,
130 	944, 492, 81, 175, 564, 715, 285, -1, 575, 768,
131 	12, 935, 352, 42, -1, 411, 890, 575, 151, 285,
132 	637, 552, 862, 248, 576, 632, -1, 749, 993, 0,
133 	959, 215, 278, -1, 0, -1, 699, 95, 450, 977,
134 	943, 826, 406, 95, 8, 993, 322, 367, 316, -1,
135 	941, -1, 648, -1, 137, 876, 865, 107, 126, 898,
136 	358, 95, 0, 489, 713, 493, 756, 298, 640, 980,
137 	0, 151, 603, -1, -1, 273, 989, 173, 452, 275,
138 	278, 285, 709, 844, 380, -1, 924, 732, 389, 549,
139 	442, 444, 216, 348, 161, 53, -1, 0, 186, 307,
140 	962, 984, 957, 231, 981, 799, 362, 547, 47, 0,
141 	7, 366, 12, 248, 737, 0, 404, 754, 0, 0,
142 	820, 17, 940, 0, 364, 316, 482, 96, 870, 887,
143 	131, 0, 359, 151, 507, 247, 83, 346, 391, 999,
144 	-1, 261, 285, 528, 376, 319, 866, -1, -1, 175,
145 	89, 530, 881, 538, 906, 67, 711, 903, 714, 857,
146 	459, 594, 827, 332, 835, 511, 945, 360, -1, 402,
147 	-1, -1, 231, 167, -1, 493, 712, 611, 935, 0,
148 	384, -1, 1013, 882, 1011, 156, 943, 78, 802, 11,
149 	265, 45, 1016, 262, 333, 652, -1, 807, 724, 0,
150 	144, 253, 990, 459, 188, 0, 291, 921, 619, 151,
151 	634, 944, -1, 791, 0, 15, 281, 988, 199, 0,
152 	635, 1016, 0, 153, 0, 0, 711, 301, 142, 0,
153 	0, 776, -1, 832, 760, 389, 595, 462, 451, 905,
154 	816, 43, 486, 46, 0, 798, 0, 619, 467, 626,
155 	450, 332, 440, 806, 0, 842, 831, 224, 80, 484,
156 	839, 536, 122, 907, 184, 888, 246, 425, 278, 240,
157 	349, -1, 232, 187, 224, 402, 299, 412, 0, 885,
158 	825, 174, 0, 0, 0, -1, 527, 955, 533, 771,
159 	461, 561, 538, -1, -1, 0, 759, 509, 0, 310,
160 	967, 538, 0, 0, 0, 440, 324, 0, 0, 522,
161 	0, 662, 522, -1, 30, 73, 404, 11, 483, 87,
162 	0, 389, 457, 0, 143, 272, 555, 939, 969, 577,
163 };
164 
165 static int T0[] = {
166 	107, 430, 552, 231, 762, 936, 882, 462, 597, 822,
167 	835, 775, 172, 617, 504, 1140, 758, 784, 744, 913,
168 	684, 890, 86, 607, 103, 1008, 218, 1160, 1173, 594,
169 	707, 20, 1025, 1131, 123, 399, 679, 877, 861, 17,
170 	440, 308, 792, 484, 798, 37, 364, 296, 821, 1108,
171 	1210, 117, 610, 1168, 597, 714, 916, 815, 486, 701,
172 	149, 1193, 593, 1046, 878, 1021, 737, 1239, 1099, 7,
173 	873, 146, 929, 310, 456, 376, 372, 860, 1023, 73,
174 	784, 924, 427, 769, 1106, 395, 789, 947, 1078, 936,
175 	621, 993, 693, 446, 1208, 312, 79, 685, 163, 1050,
176 	565, 908, 1196, 106, 1090, 264, 482, 202, 1124, 245,
177 	147, 521, 1041, 574, 1162, 759, 970, 692, 318, 660,
178 	368, 940, 394, 934, 1258, 342, 1118, 77, 37, 875,
179 	267, 85, 370, 651, 271, 1137, 489, 470, 766, 1058,
180 	1017, 439, 515, 1258, 504, 309, 1085, 503, 1220, 1000,
181 	213, 65, 303, 478, 598, 562, 715, 594, 564, 624,
182 	209, 832, 710, 451, 223, 853, 201, 712, 64, 967,
183 	382, 1081, 18, 898, 1079, 522, 1079, 776, 897, 1039,
184 	516, 982, 1104, 819, 201, 315, 122, 788, 909, 686,
185 	153, 990, 545, 1232, 993, 725, 2, 779, 243, 221,
186 	232, 253, 1222, 698, 970, 122, 712, 969, 1036, 260,
187 	564, 1126, 476, 784, 229, 1053, 401, 1000, 11, 1044,
188 	978, 945, 472, 263, 917, 78, 860, 919, 729, 1104,
189 	1012, 961, 1229, 846, 400, 939, 968, 1112, 520, 616,
190 	1245, 957, 354, 461, 481, 583, 126, 882, 323, 138,
191 	538, 41, 1083, 1010, 176, 612, 1151, 873, 759, 824,
192 	369, 847, 411, 906, 436, 59, 572, 432, 1251, 252,
193 	374, 278, 1069, 280, 943, 51, 1192, 1213, 1057, 1082,
194 	1024, 1064, 1125, 1192, 785, 1172, 451, 676, 657, 1082,
195 	113, 1026, 669, 524, 544, 1105, 583, 988, 149, 447,
196 	1113, 523, 597, 922, 676, 280, 974, 608, 105, 643,
197 	302, 1001, 447, 167, 934, 1232, 1211, 1257, 521, 480,
198 	209, 1238, 387, 845, 735, 508, 990, 273, 336, 761,
199 	13, 433, 178, 647, 801, 325, 925, 668, 961, 657,
200 	1221, 198, 997, 208, 777, 687, 477, 1108, 355, 452,
201 	742, 436, 431, 1002, 1154, 1166, 250, 884, 179, 459,
202 	257, 64, 892, 436, 584, 305, 633, 121, 973, 206,
203 	778, 934, 405, 515, 1142, 1054, 1202, 232, 902, 170,
204 	684, 256, 606, 987, 205, 273, 715, 1153, 199, 448,
205 	85, 442, 975, 1099, 575, 952, 784, 270, 927, 340,
206 	1246, 824, 743, 766, 189, 341, 112, 133, 191, 414,
207 	405, 508, 3, 91, 498, 208, 237, 1085, 101, 436,
208 	145, 58, 750, 1121, 1157, 1197, 685, 554, 207, 352,
209 	766, 65, 1048, 249, 832, 1238, 462, 816, 1243, 525,
210 	1102, 260, 905, 1105, 224, 143, 1185, 461, 1103, 120,
211 	886, 44, 91, 468, 1090, 1226, 872, 537, 197, 982,
212 	591, 621, 68, 698, 451, 1236, 238, 1229, 162, 1164,
213 	95, 133, 515, 725, 1089, 492, 1209, 206, 467, 1052,
214 	326, 93, 969, 290, 433, 671, 256, 45, 1081, 326,
215 	899, 284, 819, 967, 982, 10, 816, 1220, 1239, 850,
216 	997, 1207, 855, 252, 544, 556, 744, 493, 763, 1083,
217 	157, 1089, 416, 889, 949, 643, 795, 922, 77, 460,
218 	381, 700, 4, 1067, 22, 929, 295, 719, 468, 750,
219 	673, 1085, 595, 171, 572, 1218, 1054, 571, 335, 564,
220 	89, 108, 900, 505, 869, 461, 1148, 404, 124, 1098,
221 	736, 377, 410, 612, 184, 432, 281, 351, 1152, 622,
222 	1101, 437, 319, 309, 608, 891, 267, 403, 74, 475,
223 	839, 164, 583, 351, 541, 64, 1240, 671, 297, 333,
224 	158, 1061, 1192, 97, 267, 409, 394, 127, 242, 992,
225 	503, 895, 968, 588, 1204, 613, 842, 1001, 643, 58,
226 	692, 21, 806, 1132, 805, 261, 122, 657, 804, 419,
227 	991, 962, 220, 795, 931, 488, 1077, 1197, 487, 59,
228 	930, 991, 826, 510, 319, 642, 1123, 1161, 384, 507,
229 	1092, 948, 528, 510, 693, 1205, 643, 815, 475, 187,
230 	784, 371, 616, 99, 90, 1196, 787, 580, 324, 616,
231 	724, 587, 379, 955, 1230, 510, 935, 620, 791, 1083,
232 	624, 1031, 829, 884, 223, 896, 953, 1180, 972, 1103,
233 	357, 369, 86, 845, 468, 176, 782, 1127, 756, 978,
234 	483, 92, 305, 862, 919, 147, 1244, 594, 639, 776,
235 	290, 3, 419, 1119, 759, 514, 756, 452, 434, 340,
236 	167, 664, 709, 253, 1126, 676, 700, 1031, 784, 801,
237 	1087, 814, 747, 1013, 925, 514, 373, 57, 758, 924,
238 	653, 1131, 18, 1238, 120, 836, 226, 1239, 1, 721,
239 	456, 623, 845, 1091, 184, 711, 380, 756, 483, 1036,
240 	298, 310, 591, 917, 1195, 256, 43, 180, 185, 674,
241 	1105, 838, 545, 995, 688, 537, 572, 914, 388, 573,
242 	375, 845, 1068, 1093, 548, 1252, 544, 928, 317, 830,
243 	825, 840, 835, 1112, 173, 899, 545, 1135, 738, 975,
244 	1007, 400, 1151, 1083, 705, 76, 784, 1001, 435, 69,
245 	889, 322, 506, 531, 1111, 520, 524, 816, 735, 842,
246 	387, 172, 294, 1094, 1157, 467, 605, 442, 215, 84,
247 	29, 1222, 356, 1180, 1045, 1061, 1257, 441, 674, 304,
248 	510, 304, 499, 888, 835, 350, 21, 99, 1166, 756,
249 	941, 165, 382, 876, 1052, 671, 827, 766, 819, 224,
250 	938, 298, 665, 1077, 374, 183, 67, 17, 40, 1234,
251 	175, 1162, 349, 528, 81, 1023, 281, 1019, 371, 155,
252 	243, 337, 960, 626, 1213, 625, 1169, 653, 3, 728,
253 	877, 941, 898, 282, 758, 12, 465, 697, 29, 377,
254 	671, 204, 151, 893, 605, 105, 656, 886, 1124, 899,
255 	914, 1240, 1109, 614, 606, 934, 13, 895, 346, 140,
256 	66, 728, 849, 469, 79, 867, 291, 1153, 1056, 140,
257 	992, 119, 703, 4, 957, 1041, 385, 826, 1134, 484,
258 	232, 1106, 541, 172, 265, 1214, 108, 150, 850, 454,
259 	163, 788, 1054, 1012, 1129, 1005, 491, 161, 898, 287,
260 	173, 502, 278, 749, 507, 1235, 530, 764, 673, 276,
261 	1249, 778, 122, 530, 950, 260, 356, 930, 410, 1078,
262 	1228, 318, 1247, 576, 617, 962, 761, 901, 1129, 588,
263 	193, 819, 881, 128, 564, 924, 935, 118, 1026, 23,
264 	46, 482, 1180, 440, 300, 193, 438, 610, 1161, 519,
265 	792, 1129, 837, 652, 317, 195, 354, 950, 1096, 224,
266 	150, 1162, 915, 1031, 1162, 219, 567, 709, 337, 333,
267 	733, 255, 815, 653, 696, 1115, 718, 1006, 338, 619,
268 	266, 1130, 360, 1103, 230, 130, 1150, 359, 1071, 622,
269 	160, 534, 825, 134, 209, 670, 728, 1203, 333, 1118,
270 	347, 887, 992, 783, 613, 464, 1041, 701, 931, 56,
271 	841, 285, 210, 817, 1083, 312, 819, 845, 672, 630,
272 	207, 704, 1164, 904, 711, 1245, 314, 179, 1188, 648,
273 	1169, 276, 147, 773, 931, 632, 1237, 712, 1206, 909,
274 	768, 787, 1194, 851, 216, 889, 1163, 1035, 883, 681,
275 	1106, 1095, 828, 309, 391, 165, 331, 250, 109, 1086,
276 	504, 34, 348, 1077, 1139, 392, 950, 750, 404, 1027,
277 	494, 1097, 331, 983, 72, 295, 178, 1119, 327, 933,
278 	541, 45, 640, 1241, 354, 1031, 147, 557, 22, 256,
279 	255, 398, 163, 603, 215, 42, 867, 1165, 792, 1144,
280 	804, 27, 853, 1135, 1010, 797, 42, 1060, 657, 369,
281 	733, 1070, 59, 481, 712, 626, 457, 433, 871, 1194,
282 	265, 824, 610, 1026, 510, 1097, 126, 709, 466, 881,
283 	844, 678, 27, 218, 438, 1194, 754, 1052, 967, 604,
284 	1221, 648, 452, 20, 1002, 1164, 518, 199, 337, 129,
285 	5, 474, 825, 487, 112, 75, 325, 111, 657, 663,
286 	864, 241, 81, 891, 331, 520, 826, 957, 184, 405,
287 	301, 145, 925, 753, 165, 667, 511, 858, 625, 85,
288 	446, 175, 639, 741, 29, 203, 390, 577, 643, 1119,
289 	262, 1014, 731, 1067, 1144, 872, 266, 699, 473, 1095,
290 	19, 715, 96, 1122, 75, 1160, 453, 458, 758, 951,
291 	544, 1076, 1126, 1055, 558, 1155, 1259, 948, 472, 514,
292 	808, 606, 269, 279, 414, 25, 1023, 552, 596, 236,
293 	387, 616, 823, 355, 478, 770, 256, 804, 1228, 886,
294 };
295 
296 static int T1[] = {
297 	752, 1252, 623, 579, 832, 936, 720, 300, 316, 317,
298 	860, 1103, 285, 1237, 969, 525, 734, 1126, 810, 533,
299 	6, 1166, 185, 733, 893, 566, 13, 938, 951, 316,
300 	50, 315, 180, 545, 895, 1012, 221, 227, 1184, 537,
301 	544, 656, 253, 830, 634, 1222, 95, 1240, 960, 777,
302 	513, 967, 683, 699, 312, 189, 1137, 325, 1127, 700,
303 	513, 1049, 1016, 693, 174, 528, 122, 338, 1249, 942,
304 	1127, 993, 1049, 1090, 1060, 975, 950, 656, 132, 850,
305 	485, 856, 1226, 610, 1246, 371, 822, 376, 77, 953,
306 	151, 1058, 1046, 1023, 87, 1221, 163, 81, 171, 152,
307 	895, 38, 1017, 684, 1128, 689, 399, 690, 85, 403,
308 	152, 570, 1259, 118, 1181, 1117, 362, 743, 106, 439,
309 	308, 257, 109, 94, 20, 196, 55, 55, 33, 425,
310 	1122, 929, 1057, 1120, 752, 274, 695, 354, 363, 331,
311 	900, 58, 1070, 1233, 1034, 1161, 381, 631, 620, 65,
312 	252, 913, 1189, 101, 215, 206, 834, 20, 1065, 867,
313 	445, 799, 536, 114, 531, 1161, 388, 1098, 255, 751,
314 	170, 1156, 682, 1112, 1001, 456, 885, 122, 959, 245,
315 	59, 1211, 1158, 1248, 52, 1245, 66, 886, 5, 1003,
316 	365, 322, 227, 233, 488, 771, 371, 1139, 733, 1016,
317 	595, 221, 701, 908, 224, 943, 391, 544, 1067, 42,
318 	527, 1027, 893, 1140, 695, 881, 213, 395, 931, 1254,
319 	151, 542, 448, 378, 775, 808, 1021, 1146, 687, 494,
320 	902, 23, 587, 216, 803, 812, 1031, 1194, 1228, 839,
321 	1108, 495, 478, 742, 247, 1173, 235, 460, 308, 1166,
322 	455, 459, 448, 775, 709, 1095, 461, 1189, 396, 533,
323 	468, 280, 395, 939, 431, 761, 863, 75, 264, 340,
324 	1147, 534, 915, 926, 528, 634, 367, 1230, 1258, 490,
325 	669, 687, 418, 114, 899, 156, 421, 100, 86, 817,
326 	633, 426, 969, 1028, 1237, 140, 401, 840, 88, 666,
327 	1052, 1235, 1072, 707, 773, 340, 1213, 1140, 310, 1212,
328 	370, 851, 511, 789, 965, 150, 817, 126, 250, 775,
329 	145, 800, 530, 564, 1205, 913, 348, 1087, 402, 477,
330 	209, 853, 975, 726, 464, 1125, 585, 833, 338, 761,
331 	107, 723, 1226, 17, 1167, 579, 645, 42, 522, 534,
332 	102, 667, 1206, 632, 1103, 1023, 285, 63, 851, 687,
333 	540, 1060, 153, 255, 398, 489, 1252, 855, 63, 331,
334 	356, 42, 926, 194, 60, 833, 773, 577, 748, 35,
335 	1112, 850, 702, 930, 121, 597, 1114, 905, 908, 107,
336 	64, 776, 1093, 300, 901, 473, 740, 656, 1097, 1191,
337 	286, 1245, 937, 930, 573, 1073, 251, 592, 873, 428,
338 	528, 846, 20, 1115, 795, 141, 324, 649, 919, 1232,
339 	757, 983, 620, 590, 23, 261, 1063, 635, 918, 772,
340 	438, 1076, 629, 1247, 746, 1075, 1060, 870, 407, 546,
341 	1170, 935, 132, 1190, 790, 927, 72, 1115, 693, 515,
342 	493, 366, 879, 410, 699, 756, 671, 221, 297, 274,
343 	153, 1146, 785, 152, 1024, 206, 713, 635, 908, 1068,
344 	931, 299, 340, 726, 144, 294, 543, 793, 673, 1236,
345 	1180, 1038, 214, 799, 188, 786, 296, 859, 1007, 465,
346 	1005, 1160, 351, 531, 1184, 116, 609, 509, 623, 257,
347 	317, 295, 428, 529, 893, 444, 696, 176, 1237, 109,
348 	24, 1158, 491, 8, 1156, 981, 827, 459, 693, 98,
349 	696, 966, 468, 912, 525, 938, 473, 1099, 592, 571,
350 	827, 420, 193, 50, 450, 1149, 451, 404, 152, 33,
351 	147, 179, 897, 511, 59, 665, 104, 886, 1124, 798,
352 	856, 560, 376, 1196, 85, 901, 874, 430, 612, 78,
353 	1001, 52, 498, 1066, 1234, 821, 827, 425, 1097, 851,
354 	330, 1245, 1030, 1099, 368, 961, 1048, 905, 490, 670,
355 	1119, 164, 217, 514, 693, 812, 792, 1194, 479, 977,
356 	1182, 1080, 917, 1237, 39, 778, 440, 232, 517, 1181,
357 	228, 1122, 385, 583, 540, 1035, 315, 201, 552, 678,
358 	871, 283, 842, 1088, 670, 276, 512, 202, 82, 991,
359 	1051, 5, 812, 580, 1114, 723, 1231, 166, 827, 488,
360 	1219, 1055, 222, 344, 250, 635, 1252, 438, 836, 544,
361 	836, 1242, 893, 244, 916, 1003, 511, 1147, 898, 760,
362 	1102, 595, 464, 265, 332, 4, 221, 89, 469, 424,
363 	986, 161, 340, 409, 818, 1009, 1023, 591, 963, 638,
364 	436, 412, 492, 70, 656, 148, 1073, 1167, 35, 583,
365 	667, 1009, 1051, 1003, 1147, 123, 879, 1240, 212, 88,
366 	405, 1070, 121, 745, 91, 811, 366, 1115, 15, 69,
367 	365, 451, 353, 857, 216, 563, 400, 146, 978, 656,
368 	159, 334, 13, 1030, 1178, 446, 685, 350, 493, 474,
369 	981, 500, 31, 1137, 1020, 583, 902, 141, 69, 1055,
370 	1216, 976, 639, 1038, 296, 856, 214, 569, 1002, 1192,
371 	1225, 1033, 139, 1110, 804, 1189, 168, 101, 151, 662,
372 	575, 1005, 1162, 606, 882, 922, 1189, 397, 936, 1131,
373 	192, 892, 719, 704, 543, 1015, 172, 629, 399, 118,
374 	34, 359, 987, 921, 360, 203, 185, 370, 1061, 278,
375 	383, 284, 89, 12, 370, 1151, 456, 955, 556, 398,
376 	360, 835, 849, 285, 1191, 349, 282, 278, 727, 553,
377 	396, 633, 912, 123, 294, 12, 199, 352, 382, 1132,
378 	630, 637, 156, 591, 649, 398, 354, 1105, 93, 910,
379 	116, 326, 358, 965, 611, 289, 54, 893, 440, 653,
380 	186, 708, 683, 1253, 548, 702, 700, 394, 1232, 603,
381 	645, 31, 132, 236, 979, 538, 724, 1102, 887, 996,
382 	801, 1204, 836, 307, 303, 661, 1196, 1205, 343, 1095,
383 	258, 630, 1231, 813, 495, 519, 256, 1195, 913, 228,
384 	411, 298, 131, 543, 406, 983, 1082, 1003, 825, 581,
385 	739, 366, 397, 187, 545, 700, 848, 353, 518, 1063,
386 	188, 648, 305, 159, 201, 800, 721, 54, 790, 165,
387 	313, 1035, 1102, 500, 729, 562, 983, 417, 832, 1143,
388 	296, 433, 775, 641, 786, 493, 933, 1169, 194, 875,
389 	398, 159, 742, 170, 811, 986, 501, 273, 1041, 31,
390 	310, 1226, 938, 152, 339, 408, 587, 62, 825, 159,
391 	1205, 993, 464, 592, 246, 1250, 958, 1180, 1159, 1152,
392 	667, 298, 52, 149, 340, 735, 1136, 841, 880, 789,
393 	1048, 566, 490, 665, 88, 1096, 975, 281, 599, 1201,
394 	904, 185, 1016, 305, 1182, 1005, 1059, 87, 347, 281,
395 	23, 259, 115, 193, 649, 444, 1174, 649, 1223, 829,
396 	22, 1011, 135, 512, 417, 224, 220, 4, 505, 691,
397 	1205, 22, 877, 833, 327, 671, 578, 127, 630, 925,
398 	280, 653, 1057, 267, 718, 318, 711, 505, 967, 674,
399 	74, 989, 298, 82, 1055, 563, 630, 1039, 233, 39,
400 	457, 205, 60, 626, 519, 103, 1003, 775, 959, 490,
401 	1056, 1173, 790, 357, 801, 410, 194, 469, 1090, 694,
402 	397, 1076, 1019, 299, 568, 815, 863, 1071, 466, 968,
403 	1110, 795, 1174, 1170, 161, 305, 1145, 1036, 1080, 717,
404 	266, 876, 630, 928, 1106, 43, 79, 40, 512, 1041,
405 	606, 782, 729, 366, 1081, 1169, 1181, 556, 946, 254,
406 	827, 431, 447, 1135, 229, 840, 1087, 859, 859, 263,
407 	2, 480, 943, 510, 318, 40, 313, 440, 180, 680,
408 	487, 594, 904, 660, 1017, 590, 513, 316, 373, 200,
409 	442, 1200, 503, 889, 1075, 732, 341, 774, 331, 1200,
410 	909, 205, 421, 592, 716, 611, 504, 901, 923, 684,
411 	193, 150, 1150, 969, 810, 907, 299, 1196, 1095, 672,
412 	8, 277, 889, 964, 964, 758, 864, 330, 925, 491,
413 	896, 585, 340, 927, 307, 588, 742, 1117, 691, 930,
414 	1195, 1057, 431, 607, 420, 183, 1000, 991, 607, 535,
415 	863, 108, 557, 364, 1072, 261, 1122, 548, 463, 659,
416 	911, 100, 1117, 1251, 899, 36, 451, 381, 1153, 1142,
417 	51, 961, 812, 355, 308, 1232, 410, 1180, 963, 1017,
418 	327, 438, 997, 884, 802, 809, 271, 1026, 944, 247,
419 	504, 262, 597, 1244, 678, 599, 295, 273, 1012, 1113,
420 	666, 2, 1227, 514, 173, 1055, 192, 745, 978, 580,
421 	1016, 153, 525, 329, 831, 983, 346, 974, 750, 1162,
422 	1093, 1126, 164, 303, 983, 842, 774, 18, 987, 526,
423 	1131, 266, 528, 970, 780, 574, 766, 972, 59, 484,
424 	165, 948, 638, 690, 1149, 81, 285, 107, 927, 907,
425 };
426 
427 static int T2[] = {
428 	811, 1195, 660, 232, 675, 1258, 639, 267, 825, 904,
429 	1228, 660, 927, 1128, 169, 1001, 795, 760, 104, 999,
430 	1227, 349, 1208, 516, 621, 915, 564, 301, 704, 873,
431 	1136, 127, 680, 408, 359, 95, 278, 999, 234, 1104,
432 	515, 202, 376, 182, 1202, 418, 1184, 737, 1178, 1160,
433 	348, 1145, 250, 296, 274, 743, 1084, 710, 1044, 528,
434 	195, 793, 656, 875, 441, 632, 194, 3, 1041, 1179,
435 	1217, 809, 343, 351, 496, 1173, 175, 343, 759, 1038,
436 	776, 888, 1001, 1079, 784, 330, 897, 631, 511, 359,
437 	1013, 503, 675, 50, 634, 989, 682, 828, 992, 335,
438 	747, 949, 1016, 1091, 1173, 252, 876, 88, 596, 247,
439 	999, 112, 1135, 740, 1063, 659, 942, 572, 1162, 193,
440 	803, 788, 568, 91, 838, 1075, 1080, 132, 1203, 461,
441 	1197, 130, 427, 1221, 1099, 894, 547, 882, 1246, 688,
442 	1255, 140, 406, 74, 926, 206, 275, 737, 1243, 965,
443 	825, 561, 983, 1146, 860, 419, 332, 1054, 510, 148,
444 	255, 448, 150, 554, 281, 1250, 60, 700, 744, 46,
445 	129, 612, 186, 535, 686, 984, 613, 961, 334, 596,
446 	538, 1159, 1029, 262, 1045, 502, 553, 118, 296, 1064,
447 	138, 423, 642, 430, 1026, 1241, 636, 429, 835, 654,
448 	134, 599, 440, 289, 282, 331, 921, 4, 231, 695,
449 	10, 666, 80, 826, 330, 475, 686, 852, 1232, 60,
450 	1128, 1157, 184, 382, 328, 1082, 363, 836, 251, 1070,
451 	230, 386, 409, 671, 547, 563, 874, 208, 568, 1106,
452 	904, 578, 384, 984, 17, 714, 71, 703, 307, 43,
453 	635, 47, 1073, 819, 301, 13, 911, 1239, 955, 594,
454 	804, 545, 581, 974, 814, 239, 652, 78, 823, 911,
455 	267, 1109, 741, 568, 250, 540, 41, 10, 139, 400,
456 	817, 1241, 76, 209, 633, 43, 613, 284, 1154, 180,
457 	878, 699, 725, 71, 285, 151, 311, 809, 102, 1006,
458 	460, 241, 855, 1201, 681, 977, 353, 722, 988, 365,
459 	1122, 417, 346, 1070, 626, 851, 986, 1111, 1135, 880,
460 	685, 1168, 887, 98, 549, 556, 713, 1118, 346, 199,
461 	539, 62, 471, 651, 552, 1238, 435, 670, 1173, 770,
462 	503, 1115, 42, 117, 882, 432, 650, 674, 417, 112,
463 	1199, 974, 1153, 699, 1072, 442, 1255, 398, 172, 341,
464 	597, 584, 275, 1069, 1235, 827, 919, 410, 238, 704,
465 	1053, 741, 560, 967, 730, 54, 139, 121, 600, 428,
466 	105, 539, 142, 1258, 611, 564, 662, 175, 1082, 989,
467 	1104, 950, 499, 440, 1138, 373, 435, 708, 82, 937,
468 	837, 545, 814, 1112, 1234, 1191, 28, 946, 957, 374,
469 	439, 726, 918, 836, 1075, 141, 140, 478, 316, 1094,
470 	79, 160, 657, 578, 600, 535, 823, 907, 1115, 778,
471 	585, 692, 63, 11, 545, 1169, 1074, 445, 856, 772,
472 	820, 35, 238, 350, 743, 54, 491, 755, 286, 1125,
473 	131, 1181, 783, 797, 815, 582, 1196, 534, 338, 921,
474 	333, 871, 898, 965, 839, 172, 654, 618, 604, 708,
475 	900, 639, 294, 487, 32, 458, 158, 80, 761, 316,
476 	1205, 764, 110, 601, 301, 925, 1183, 109, 71, 262,
477 	1030, 404, 1005, 669, 1241, 584, 713, 508, 1075, 1190,
478 	1216, 587, 569, 123, 1074, 602, 581, 1105, 682, 82,
479 	33, 628, 199, 817, 964, 893, 819, 663, 230, 1038,
480 	174, 479, 837, 1225, 770, 966, 443, 1221, 288, 801,
481 	1246, 715, 185, 148, 799, 932, 134, 236, 917, 245,
482 	816, 1193, 985, 887, 750, 690, 520, 181, 1225, 622,
483 	1091, 139, 1101, 668, 104, 611, 247, 419, 445, 535,
484 	1092, 431, 1250, 18, 451, 662, 822, 585, 770, 479,
485 	702, 198, 284, 428, 1085, 906, 1218, 880, 167, 803,
486 	87, 72, 563, 1121, 5, 1137, 1133, 289, 747, 703,
487 	847, 963, 591, 782, 894, 535, 541, 324, 1084, 1078,
488 	867, 63, 241, 586, 1231, 187, 459, 1189, 939, 627,
489 	604, 1026, 571, 1167, 760, 576, 917, 633, 737, 404,
490 	1209, 324, 1239, 540, 1106, 873, 1075, 388, 1197, 771,
491 	78, 677, 706, 191, 3, 677, 250, 462, 607, 1190,
492 	326, 183, 1238, 1076, 764, 482, 1212, 137, 28, 94,
493 	312, 380, 53, 111, 893, 494, 404, 402, 1218, 997,
494 	1002, 836, 657, 870, 284, 165, 627, 56, 253, 925,
495 	542, 580, 980, 521, 268, 484, 1003, 92, 493, 1031,
496 	187, 677, 24, 112, 789, 917, 478, 1065, 1191, 437,
497 	803, 934, 13, 72, 416, 297, 237, 1043, 225, 491,
498 	708, 768, 943, 428, 608, 850, 473, 305, 1176, 580,
499 	74, 1119, 1145, 653, 1167, 31, 1258, 419, 614, 231,
500 	958, 1186, 384, 1147, 573, 1100, 170, 1174, 1024, 1241,
501 	270, 1085, 178, 280, 527, 787, 1130, 873, 964, 1046,
502 	65, 1038, 905, 1210, 432, 685, 1114, 430, 976, 468,
503 	533, 674, 394, 917, 562, 967, 630, 604, 753, 266,
504 	585, 1024, 91, 763, 44, 491, 162, 1046, 32, 312,
505 	751, 334, 255, 12, 172, 130, 963, 228, 880, 445,
506 	466, 1062, 1211, 1227, 1121, 367, 1092, 1176, 391, 1256,
507 	1198, 1168, 708, 712, 291, 184, 1171, 987, 230, 1203,
508 	39, 854, 149, 294, 738, 321, 296, 441, 421, 1049,
509 	886, 759, 723, 709, 726, 585, 1077, 431, 501, 208,
510 	299, 311, 1249, 1007, 1023, 280, 1063, 935, 7, 1166,
511 	750, 1179, 168, 1055, 677, 463, 188, 491, 1235, 386,
512 	195, 147, 71, 886, 980, 962, 354, 258, 453, 486,
513 	237, 344, 480, 298, 751, 992, 1125, 1225, 1057, 903,
514 	234, 610, 624, 403, 277, 42, 738, 465, 405, 585,
515 	852, 601, 732, 795, 99, 324, 369, 325, 582, 822,
516 	811, 820, 1038, 1164, 990, 530, 768, 727, 367, 437,
517 	370, 473, 919, 866, 876, 1068, 712, 291, 419, 1042,
518 	923, 125, 869, 367, 476, 1134, 563, 293, 395, 943,
519 	1091, 116, 920, 310, 601, 384, 912, 350, 284, 1031,
520 	1108, 852, 42, 431, 1212, 604, 932, 665, 895, 91,
521 	319, 430, 217, 1188, 797, 565, 934, 1232, 859, 69,
522 	915, 690, 57, 447, 1000, 659, 832, 653, 881, 988,
523 	296, 730, 580, 338, 1161, 405, 814, 705, 1070, 449,
524 	663, 305, 183, 451, 1183, 563, 1044, 1157, 304, 1226,
525 	117, 1099, 905, 563, 836, 433, 154, 765, 635, 1159,
526 	1103, 770, 709, 364, 631, 323, 42, 744, 418, 992,
527 	941, 1081, 1169, 997, 144, 1093, 300, 1189, 862, 476,
528 	1027, 979, 315, 672, 283, 1024, 978, 309, 401, 353,
529 	81, 245, 1124, 790, 609, 367, 985, 652, 1111, 16,
530 	256, 664, 969, 165, 52, 780, 784, 17, 404, 1052,
531 	708, 861, 619, 959, 1012, 1113, 231, 985, 616, 257,
532 	46, 217, 751, 256, 231, 568, 204, 804, 533, 1259,
533 	210, 899, 190, 439, 1107, 115, 1219, 631, 132, 364,
534 	296, 713, 1097, 915, 412, 849, 641, 643, 574, 1129,
535 	772, 620, 86, 135, 748, 189, 575, 953, 866, 1108,
536 	824, 1076, 748, 1014, 128, 467, 1001, 1219, 601, 714,
537 	130, 479, 505, 57, 1130, 869, 108, 200, 940, 1071,
538 	387, 594, 193, 710, 261, 153, 1147, 660, 201, 442,
539 	1058, 212, 1042, 515, 519, 1206, 1158, 1107, 1146, 371,
540 	433, 16, 851, 810, 1205, 593, 291, 1185, 793, 1231,
541 	869, 1052, 565, 1062, 374, 699, 1088, 261, 99, 1161,
542 	704, 1157, 113, 358, 412, 633, 304, 182, 352, 190,
543 	554, 657, 145, 1015, 687, 1233, 506, 669, 985, 287,
544 	866, 426, 1214, 696, 746, 362, 832, 1090, 371, 681,
545 	310, 665, 1087, 1056, 251, 1211, 326, 196, 562, 220,
546 	372, 239, 567, 390, 1126, 1126, 235, 244, 535, 1092,
547 	532, 141, 130, 358, 710, 876, 720, 282, 578, 1091,
548 	835, 889, 368, 535, 557, 619, 486, 883, 687, 1048,
549 	1104, 1060, 1159, 283, 62, 897, 393, 202, 1187, 796,
550 	1071, 1176, 1147, 655, 215, 210, 336, 1151, 951, 590,
551 	1077, 591, 346, 1256, 1254, 1255, 707, 1166, 325, 295,
552 	309, 1022, 552, 497, 973, 1214, 686, 1238, 28, 485,
553 	774, 1100, 273, 661, 367, 489, 743, 575, 252, 434,
554 	1165, 69, 897, 252, 1197, 764, 119, 644, 670, 316,
555 	812, 979, 78, 104, 217, 1051, 58, 775, 901, 87,
556 };
557 
558 #define uchar unsigned char
559 
560 int
hash(const uchar * key)561 hash(const uchar *key)
562 {
563 	int i;
564 	unsigned f0, f1, f2;
565 	const uchar *kp = key;
566 
567 	for (i=-48, f0=f1=f2=0; *kp; ++kp) {
568 		if (*kp < 48 || *kp > 111)
569 			return -1;
570 		if (kp-key > 19)
571 			return -1;
572 		f0 += T0[i + *kp];
573 		f1 += T1[i + *kp];
574 		f2 += T2[i + *kp];
575 		i += 64;
576 	}
577 
578 	if (kp-key < 20)
579 		return -1;
580 
581 	f0 %= 1260;
582 	f1 %= 1260;
583 	f2 %= 1260;
584 
585 	return (g[f0] + g[f1] + g[f2]) % 1024;
586 }
587