crhash: sha1: add test vectors
[crhash.git] / hash-whirlpool.c
blob9dc0b34002458c99d6221dfd0d7f12659d2b1a9d
1 #include <stdint.h>
2 #include <stdlib.h>
3 #include <string.h>
5 #include "hash-whirlpool.h"
7 #define R 10
8 static const uint64_t c[R] = {
9 0x4f01b887e8c62318ULL,
10 0x52916f79f5d2a636ULL,
11 0x357b0ca38e9bbc60ULL,
12 0x57fe4b2ec2d7e01dULL,
13 0xda4af09fe5377715ULL,
14 0x856ba0b10a29c958ULL,
15 0x67053ecbf4105dbdULL,
16 0xd8957da78b4127e4ULL,
17 0x9e4717dd667ceefbULL,
18 0x33835aad07bf2dcaULL,
21 static const uint64_t T0[256] = {
22 0xd83078c018601818ULL,
23 0x2646af05238c2323ULL,
24 0xb891f97ec63fc6c6ULL,
25 0xfbcd6f13e887e8e8ULL,
26 0xcb13a14c87268787ULL,
27 0x116d62a9b8dab8b8ULL,
28 0x0902050801040101ULL,
29 0x0d9e6e424f214f4fULL,
30 0x9b6ceead36d83636ULL,
31 0xff510459a6a2a6a6ULL,
32 0x0cb9bdded26fd2d2ULL,
33 0x0ef706fbf5f3f5f5ULL,
34 0x96f280ef79f97979ULL,
35 0x30dece5f6fa16f6fULL,
36 0x6d3feffc917e9191ULL,
37 0xf8a407aa52555252ULL,
38 0x47c0fd27609d6060ULL,
39 0x35657689bccabcbcULL,
40 0x372bcdac9b569b9bULL,
41 0x8a018c048e028e8eULL,
42 0xd25b1571a3b6a3a3ULL,
43 0x6c183c600c300c0cULL,
44 0x84f68aff7bf17b7bULL,
45 0x806ae1b535d43535ULL,
46 0xf53a69e81d741d1dULL,
47 0xb3dd4753e0a7e0e0ULL,
48 0x21b3acf6d77bd7d7ULL,
49 0x9c99ed5ec22fc2c2ULL,
50 0x435c966d2eb82e2eULL,
51 0x29967a624b314b4bULL,
52 0x5de121a3fedffefeULL,
53 0xd5ae168257415757ULL,
54 0xbd2a41a815541515ULL,
55 0xe8eeb69f77c17777ULL,
56 0x926eeba537dc3737ULL,
57 0x9ed7567be5b3e5e5ULL,
58 0x1323d98c9f469f9fULL,
59 0x23fd17d3f0e7f0f0ULL,
60 0x20947f6a4a354a4aULL,
61 0x44a9959eda4fdadaULL,
62 0xa2b025fa587d5858ULL,
63 0xcf8fca06c903c9c9ULL,
64 0x7c528d5529a42929ULL,
65 0x5a1422500a280a0aULL,
66 0x507f4fe1b1feb1b1ULL,
67 0xc95d1a69a0baa0a0ULL,
68 0x14d6da7f6bb16b6bULL,
69 0xd917ab5c852e8585ULL,
70 0x3c677381bdcebdbdULL,
71 0x8fba34d25d695d5dULL,
72 0x9020508010401010ULL,
73 0x07f503f3f4f7f4f4ULL,
74 0xdd8bc016cb0bcbcbULL,
75 0xd37cc6ed3ef83e3eULL,
76 0x2d0a112805140505ULL,
77 0x78cee61f67816767ULL,
78 0x97d55373e4b7e4e4ULL,
79 0x024ebb25279c2727ULL,
80 0x7382583241194141ULL,
81 0xa70b9d2c8b168b8bULL,
82 0xf6530151a7a6a7a7ULL,
83 0xb2fa94cf7de97d7dULL,
84 0x4937fbdc956e9595ULL,
85 0x56ad9f8ed847d8d8ULL,
86 0x70eb308bfbcbfbfbULL,
87 0xcdc17123ee9feeeeULL,
88 0xbbf891c77ced7c7cULL,
89 0x71cce31766856666ULL,
90 0x7ba78ea6dd53ddddULL,
91 0xaf2e4bb8175c1717ULL,
92 0x458e460247014747ULL,
93 0x1a21dc849e429e9eULL,
94 0xd489c51eca0fcacaULL,
95 0x585a99752db42d2dULL,
96 0x2e637991bfc6bfbfULL,
97 0x3f0e1b38071c0707ULL,
98 0xac472301ad8eadadULL,
99 0xb0b42fea5a755a5aULL,
100 0xef1bb56c83368383ULL,
101 0xb666ff8533cc3333ULL,
102 0x5cc6f23f63916363ULL,
103 0x12040a1002080202ULL,
104 0x93493839aa92aaaaULL,
105 0xdee2a8af71d97171ULL,
106 0xc68dcf0ec807c8c8ULL,
107 0xd1327dc819641919ULL,
108 0x3b92707249394949ULL,
109 0x5faf9a86d943d9d9ULL,
110 0x31f91dc3f2eff2f2ULL,
111 0xa8db484be3abe3e3ULL,
112 0xb9b62ae25b715b5bULL,
113 0xbc0d9234881a8888ULL,
114 0x3e29c8a49a529a9aULL,
115 0x0b4cbe2d26982626ULL,
116 0xbf64fa8d32c83232ULL,
117 0x597d4ae9b0fab0b0ULL,
118 0xf2cf6a1be983e9e9ULL,
119 0x771e33780f3c0f0fULL,
120 0x33b7a6e6d573d5d5ULL,
121 0xf41dba74803a8080ULL,
122 0x27617c99bec2bebeULL,
123 0xeb87de26cd13cdcdULL,
124 0x8968e4bd34d03434ULL,
125 0x3290757a483d4848ULL,
126 0x54e324abffdbffffULL,
127 0x8df48ff77af57a7aULL,
128 0x643deaf4907a9090ULL,
129 0x9dbe3ec25f615f5fULL,
130 0x3d40a01d20802020ULL,
131 0x0fd0d56768bd6868ULL,
132 0xca3472d01a681a1aULL,
133 0xb7412c19ae82aeaeULL,
134 0x7d755ec9b4eab4b4ULL,
135 0xcea8199a544d5454ULL,
136 0x7f3be5ec93769393ULL,
137 0x2f44aa0d22882222ULL,
138 0x63c8e907648d6464ULL,
139 0x2aff12dbf1e3f1f1ULL,
140 0xcce6a2bf73d17373ULL,
141 0x82245a9012481212ULL,
142 0x7a805d3a401d4040ULL,
143 0x4810284008200808ULL,
144 0x959be856c32bc3c3ULL,
145 0xdfc57b33ec97ececULL,
146 0x4dab9096db4bdbdbULL,
147 0xc05f1f61a1bea1a1ULL,
148 0x9107831c8d0e8d8dULL,
149 0xc87ac9f53df43d3dULL,
150 0x5b33f1cc97669797ULL,
151 0x0000000000000000ULL,
152 0xf983d436cf1bcfcfULL,
153 0x6e5687452bac2b2bULL,
154 0xe1ecb39776c57676ULL,
155 0xe619b06482328282ULL,
156 0x28b1a9fed67fd6d6ULL,
157 0xc33677d81b6c1b1bULL,
158 0x74775bc1b5eeb5b5ULL,
159 0xbe432911af86afafULL,
160 0x1dd4df776ab56a6aULL,
161 0xeaa00dba505d5050ULL,
162 0x578a4c1245094545ULL,
163 0x38fb18cbf3ebf3f3ULL,
164 0xad60f09d30c03030ULL,
165 0xc4c3742bef9befefULL,
166 0xda7ec3e53ffc3f3fULL,
167 0xc7aa1c9255495555ULL,
168 0xdb591079a2b2a2a2ULL,
169 0xe9c96503ea8feaeaULL,
170 0x6acaec0f65896565ULL,
171 0x036968b9bad2babaULL,
172 0x4a5e93652fbc2f2fULL,
173 0x8e9de74ec027c0c0ULL,
174 0x60a181bede5fdedeULL,
175 0xfc386ce01c701c1cULL,
176 0x46e72ebbfdd3fdfdULL,
177 0x1f9a64524d294d4dULL,
178 0x7639e0e492729292ULL,
179 0xfaeabc8f75c97575ULL,
180 0x360c1e3006180606ULL,
181 0xae0998248a128a8aULL,
182 0x4b7940f9b2f2b2b2ULL,
183 0x85d15963e6bfe6e6ULL,
184 0x7e1c36700e380e0eULL,
185 0xe73e63f81f7c1f1fULL,
186 0x55c4f73762956262ULL,
187 0x3ab5a3eed477d4d4ULL,
188 0x814d3229a89aa8a8ULL,
189 0x5231f4c496629696ULL,
190 0x62ef3a9bf9c3f9f9ULL,
191 0xa397f666c533c5c5ULL,
192 0x104ab13525942525ULL,
193 0xabb220f259795959ULL,
194 0xd015ae54842a8484ULL,
195 0xc5e4a7b772d57272ULL,
196 0xec72ddd539e43939ULL,
197 0x1698615a4c2d4c4cULL,
198 0x94bc3bca5e655e5eULL,
199 0x9ff085e778fd7878ULL,
200 0xe570d8dd38e03838ULL,
201 0x980586148c0a8c8cULL,
202 0x17bfb2c6d163d1d1ULL,
203 0xe4570b41a5aea5a5ULL,
204 0xa1d94d43e2afe2e2ULL,
205 0x4ec2f82f61996161ULL,
206 0x427b45f1b3f6b3b3ULL,
207 0x3442a51521842121ULL,
208 0x0825d6949c4a9c9cULL,
209 0xee3c66f01e781e1eULL,
210 0x6186522243114343ULL,
211 0xb193fc76c73bc7c7ULL,
212 0x4fe52bb3fcd7fcfcULL,
213 0x2408142004100404ULL,
214 0xe3a208b251595151ULL,
215 0x252fc7bc995e9999ULL,
216 0x22dac44f6da96d6dULL,
217 0x651a39680d340d0dULL,
218 0x79e93583facffafaULL,
219 0x69a384b6df5bdfdfULL,
220 0xa9fc9bd77ee57e7eULL,
221 0x1948b43d24902424ULL,
222 0xfe76d7c53bec3b3bULL,
223 0x9a4b3d31ab96ababULL,
224 0xf081d13ece1fceceULL,
225 0x9922558811441111ULL,
226 0x8303890c8f068f8fULL,
227 0x049c6b4a4e254e4eULL,
228 0x667351d1b7e6b7b7ULL,
229 0xe0cb600beb8bebebULL,
230 0xc178ccfd3cf03c3cULL,
231 0xfd1fbf7c813e8181ULL,
232 0x4035fed4946a9494ULL,
233 0x1cf30cebf7fbf7f7ULL,
234 0x186f67a1b9deb9b9ULL,
235 0x8b265f98134c1313ULL,
236 0x51589c7d2cb02c2cULL,
237 0x05bbb8d6d36bd3d3ULL,
238 0x8cd35c6be7bbe7e7ULL,
239 0x39dccb576ea56e6eULL,
240 0xaa95f36ec437c4c4ULL,
241 0x1b060f18030c0303ULL,
242 0xdcac138a56455656ULL,
243 0x5e88491a440d4444ULL,
244 0xa0fe9edf7fe17f7fULL,
245 0x884f3721a99ea9a9ULL,
246 0x6754824d2aa82a2aULL,
247 0x0a6b6db1bbd6bbbbULL,
248 0x879fe246c123c1c1ULL,
249 0xf1a602a253515353ULL,
250 0x72a58baedc57dcdcULL,
251 0x531627580b2c0b0bULL,
252 0x0127d39c9d4e9d9dULL,
253 0x2bd8c1476cad6c6cULL,
254 0xa462f59531c43131ULL,
255 0xf3e8b98774cd7474ULL,
256 0x15f109e3f6fff6f6ULL,
257 0x4c8c430a46054646ULL,
258 0xa5452609ac8aacacULL,
259 0xb50f973c891e8989ULL,
260 0xb42844a014501414ULL,
261 0xbadf425be1a3e1e1ULL,
262 0xa62c4eb016581616ULL,
263 0xf774d2cd3ae83a3aULL,
264 0x06d2d06f69b96969ULL,
265 0x41122d4809240909ULL,
266 0xd7e0ada770dd7070ULL,
267 0x6f7154d9b6e2b6b6ULL,
268 0x1ebdb7ced067d0d0ULL,
269 0xd6c77e3bed93ededULL,
270 0xe285db2ecc17ccccULL,
271 0x6884572a42154242ULL,
272 0x2c2dc2b4985a9898ULL,
273 0xed550e49a4aaa4a4ULL,
274 0x7550885d28a02828ULL,
275 0x86b831da5c6d5c5cULL,
276 0x6bed3f93f8c7f8f8ULL,
277 0xc211a44486228686ULL,
280 static const uint64_t T1[256] = {
281 0x3078c018601818d8ULL,
282 0x46af05238c232326ULL,
283 0x91f97ec63fc6c6b8ULL,
284 0xcd6f13e887e8e8fbULL,
285 0x13a14c87268787cbULL,
286 0x6d62a9b8dab8b811ULL,
287 0x0205080104010109ULL,
288 0x9e6e424f214f4f0dULL,
289 0x6ceead36d836369bULL,
290 0x510459a6a2a6a6ffULL,
291 0xb9bdded26fd2d20cULL,
292 0xf706fbf5f3f5f50eULL,
293 0xf280ef79f9797996ULL,
294 0xdece5f6fa16f6f30ULL,
295 0x3feffc917e91916dULL,
296 0xa407aa52555252f8ULL,
297 0xc0fd27609d606047ULL,
298 0x657689bccabcbc35ULL,
299 0x2bcdac9b569b9b37ULL,
300 0x018c048e028e8e8aULL,
301 0x5b1571a3b6a3a3d2ULL,
302 0x183c600c300c0c6cULL,
303 0xf68aff7bf17b7b84ULL,
304 0x6ae1b535d4353580ULL,
305 0x3a69e81d741d1df5ULL,
306 0xdd4753e0a7e0e0b3ULL,
307 0xb3acf6d77bd7d721ULL,
308 0x99ed5ec22fc2c29cULL,
309 0x5c966d2eb82e2e43ULL,
310 0x967a624b314b4b29ULL,
311 0xe121a3fedffefe5dULL,
312 0xae168257415757d5ULL,
313 0x2a41a815541515bdULL,
314 0xeeb69f77c17777e8ULL,
315 0x6eeba537dc373792ULL,
316 0xd7567be5b3e5e59eULL,
317 0x23d98c9f469f9f13ULL,
318 0xfd17d3f0e7f0f023ULL,
319 0x947f6a4a354a4a20ULL,
320 0xa9959eda4fdada44ULL,
321 0xb025fa587d5858a2ULL,
322 0x8fca06c903c9c9cfULL,
323 0x528d5529a429297cULL,
324 0x1422500a280a0a5aULL,
325 0x7f4fe1b1feb1b150ULL,
326 0x5d1a69a0baa0a0c9ULL,
327 0xd6da7f6bb16b6b14ULL,
328 0x17ab5c852e8585d9ULL,
329 0x677381bdcebdbd3cULL,
330 0xba34d25d695d5d8fULL,
331 0x2050801040101090ULL,
332 0xf503f3f4f7f4f407ULL,
333 0x8bc016cb0bcbcbddULL,
334 0x7cc6ed3ef83e3ed3ULL,
335 0x0a1128051405052dULL,
336 0xcee61f6781676778ULL,
337 0xd55373e4b7e4e497ULL,
338 0x4ebb25279c272702ULL,
339 0x8258324119414173ULL,
340 0x0b9d2c8b168b8ba7ULL,
341 0x530151a7a6a7a7f6ULL,
342 0xfa94cf7de97d7db2ULL,
343 0x37fbdc956e959549ULL,
344 0xad9f8ed847d8d856ULL,
345 0xeb308bfbcbfbfb70ULL,
346 0xc17123ee9feeeecdULL,
347 0xf891c77ced7c7cbbULL,
348 0xcce3176685666671ULL,
349 0xa78ea6dd53dddd7bULL,
350 0x2e4bb8175c1717afULL,
351 0x8e46024701474745ULL,
352 0x21dc849e429e9e1aULL,
353 0x89c51eca0fcacad4ULL,
354 0x5a99752db42d2d58ULL,
355 0x637991bfc6bfbf2eULL,
356 0x0e1b38071c07073fULL,
357 0x472301ad8eadadacULL,
358 0xb42fea5a755a5ab0ULL,
359 0x1bb56c83368383efULL,
360 0x66ff8533cc3333b6ULL,
361 0xc6f23f639163635cULL,
362 0x040a100208020212ULL,
363 0x493839aa92aaaa93ULL,
364 0xe2a8af71d97171deULL,
365 0x8dcf0ec807c8c8c6ULL,
366 0x327dc819641919d1ULL,
367 0x927072493949493bULL,
368 0xaf9a86d943d9d95fULL,
369 0xf91dc3f2eff2f231ULL,
370 0xdb484be3abe3e3a8ULL,
371 0xb62ae25b715b5bb9ULL,
372 0x0d9234881a8888bcULL,
373 0x29c8a49a529a9a3eULL,
374 0x4cbe2d269826260bULL,
375 0x64fa8d32c83232bfULL,
376 0x7d4ae9b0fab0b059ULL,
377 0xcf6a1be983e9e9f2ULL,
378 0x1e33780f3c0f0f77ULL,
379 0xb7a6e6d573d5d533ULL,
380 0x1dba74803a8080f4ULL,
381 0x617c99bec2bebe27ULL,
382 0x87de26cd13cdcdebULL,
383 0x68e4bd34d0343489ULL,
384 0x90757a483d484832ULL,
385 0xe324abffdbffff54ULL,
386 0xf48ff77af57a7a8dULL,
387 0x3deaf4907a909064ULL,
388 0xbe3ec25f615f5f9dULL,
389 0x40a01d208020203dULL,
390 0xd0d56768bd68680fULL,
391 0x3472d01a681a1acaULL,
392 0x412c19ae82aeaeb7ULL,
393 0x755ec9b4eab4b47dULL,
394 0xa8199a544d5454ceULL,
395 0x3be5ec937693937fULL,
396 0x44aa0d228822222fULL,
397 0xc8e907648d646463ULL,
398 0xff12dbf1e3f1f12aULL,
399 0xe6a2bf73d17373ccULL,
400 0x245a901248121282ULL,
401 0x805d3a401d40407aULL,
402 0x1028400820080848ULL,
403 0x9be856c32bc3c395ULL,
404 0xc57b33ec97ececdfULL,
405 0xab9096db4bdbdb4dULL,
406 0x5f1f61a1bea1a1c0ULL,
407 0x07831c8d0e8d8d91ULL,
408 0x7ac9f53df43d3dc8ULL,
409 0x33f1cc976697975bULL,
410 0x0000000000000000ULL,
411 0x83d436cf1bcfcff9ULL,
412 0x5687452bac2b2b6eULL,
413 0xecb39776c57676e1ULL,
414 0x19b06482328282e6ULL,
415 0xb1a9fed67fd6d628ULL,
416 0x3677d81b6c1b1bc3ULL,
417 0x775bc1b5eeb5b574ULL,
418 0x432911af86afafbeULL,
419 0xd4df776ab56a6a1dULL,
420 0xa00dba505d5050eaULL,
421 0x8a4c124509454557ULL,
422 0xfb18cbf3ebf3f338ULL,
423 0x60f09d30c03030adULL,
424 0xc3742bef9befefc4ULL,
425 0x7ec3e53ffc3f3fdaULL,
426 0xaa1c9255495555c7ULL,
427 0x591079a2b2a2a2dbULL,
428 0xc96503ea8feaeae9ULL,
429 0xcaec0f658965656aULL,
430 0x6968b9bad2baba03ULL,
431 0x5e93652fbc2f2f4aULL,
432 0x9de74ec027c0c08eULL,
433 0xa181bede5fdede60ULL,
434 0x386ce01c701c1cfcULL,
435 0xe72ebbfdd3fdfd46ULL,
436 0x9a64524d294d4d1fULL,
437 0x39e0e49272929276ULL,
438 0xeabc8f75c97575faULL,
439 0x0c1e300618060636ULL,
440 0x0998248a128a8aaeULL,
441 0x7940f9b2f2b2b24bULL,
442 0xd15963e6bfe6e685ULL,
443 0x1c36700e380e0e7eULL,
444 0x3e63f81f7c1f1fe7ULL,
445 0xc4f7376295626255ULL,
446 0xb5a3eed477d4d43aULL,
447 0x4d3229a89aa8a881ULL,
448 0x31f4c49662969652ULL,
449 0xef3a9bf9c3f9f962ULL,
450 0x97f666c533c5c5a3ULL,
451 0x4ab1352594252510ULL,
452 0xb220f259795959abULL,
453 0x15ae54842a8484d0ULL,
454 0xe4a7b772d57272c5ULL,
455 0x72ddd539e43939ecULL,
456 0x98615a4c2d4c4c16ULL,
457 0xbc3bca5e655e5e94ULL,
458 0xf085e778fd78789fULL,
459 0x70d8dd38e03838e5ULL,
460 0x0586148c0a8c8c98ULL,
461 0xbfb2c6d163d1d117ULL,
462 0x570b41a5aea5a5e4ULL,
463 0xd94d43e2afe2e2a1ULL,
464 0xc2f82f619961614eULL,
465 0x7b45f1b3f6b3b342ULL,
466 0x42a5152184212134ULL,
467 0x25d6949c4a9c9c08ULL,
468 0x3c66f01e781e1eeeULL,
469 0x8652224311434361ULL,
470 0x93fc76c73bc7c7b1ULL,
471 0xe52bb3fcd7fcfc4fULL,
472 0x0814200410040424ULL,
473 0xa208b251595151e3ULL,
474 0x2fc7bc995e999925ULL,
475 0xdac44f6da96d6d22ULL,
476 0x1a39680d340d0d65ULL,
477 0xe93583facffafa79ULL,
478 0xa384b6df5bdfdf69ULL,
479 0xfc9bd77ee57e7ea9ULL,
480 0x48b43d2490242419ULL,
481 0x76d7c53bec3b3bfeULL,
482 0x4b3d31ab96abab9aULL,
483 0x81d13ece1fcecef0ULL,
484 0x2255881144111199ULL,
485 0x03890c8f068f8f83ULL,
486 0x9c6b4a4e254e4e04ULL,
487 0x7351d1b7e6b7b766ULL,
488 0xcb600beb8bebebe0ULL,
489 0x78ccfd3cf03c3cc1ULL,
490 0x1fbf7c813e8181fdULL,
491 0x35fed4946a949440ULL,
492 0xf30cebf7fbf7f71cULL,
493 0x6f67a1b9deb9b918ULL,
494 0x265f98134c13138bULL,
495 0x589c7d2cb02c2c51ULL,
496 0xbbb8d6d36bd3d305ULL,
497 0xd35c6be7bbe7e78cULL,
498 0xdccb576ea56e6e39ULL,
499 0x95f36ec437c4c4aaULL,
500 0x060f18030c03031bULL,
501 0xac138a56455656dcULL,
502 0x88491a440d44445eULL,
503 0xfe9edf7fe17f7fa0ULL,
504 0x4f3721a99ea9a988ULL,
505 0x54824d2aa82a2a67ULL,
506 0x6b6db1bbd6bbbb0aULL,
507 0x9fe246c123c1c187ULL,
508 0xa602a253515353f1ULL,
509 0xa58baedc57dcdc72ULL,
510 0x1627580b2c0b0b53ULL,
511 0x27d39c9d4e9d9d01ULL,
512 0xd8c1476cad6c6c2bULL,
513 0x62f59531c43131a4ULL,
514 0xe8b98774cd7474f3ULL,
515 0xf109e3f6fff6f615ULL,
516 0x8c430a460546464cULL,
517 0x452609ac8aacaca5ULL,
518 0x0f973c891e8989b5ULL,
519 0x2844a014501414b4ULL,
520 0xdf425be1a3e1e1baULL,
521 0x2c4eb016581616a6ULL,
522 0x74d2cd3ae83a3af7ULL,
523 0xd2d06f69b9696906ULL,
524 0x122d480924090941ULL,
525 0xe0ada770dd7070d7ULL,
526 0x7154d9b6e2b6b66fULL,
527 0xbdb7ced067d0d01eULL,
528 0xc77e3bed93ededd6ULL,
529 0x85db2ecc17cccce2ULL,
530 0x84572a4215424268ULL,
531 0x2dc2b4985a98982cULL,
532 0x550e49a4aaa4a4edULL,
533 0x50885d28a0282875ULL,
534 0xb831da5c6d5c5c86ULL,
535 0xed3f93f8c7f8f86bULL,
536 0x11a44486228686c2ULL,
539 static const uint64_t T2[256] = {
540 0x78c018601818d830ULL,
541 0xaf05238c23232646ULL,
542 0xf97ec63fc6c6b891ULL,
543 0x6f13e887e8e8fbcdULL,
544 0xa14c87268787cb13ULL,
545 0x62a9b8dab8b8116dULL,
546 0x0508010401010902ULL,
547 0x6e424f214f4f0d9eULL,
548 0xeead36d836369b6cULL,
549 0x0459a6a2a6a6ff51ULL,
550 0xbdded26fd2d20cb9ULL,
551 0x06fbf5f3f5f50ef7ULL,
552 0x80ef79f9797996f2ULL,
553 0xce5f6fa16f6f30deULL,
554 0xeffc917e91916d3fULL,
555 0x07aa52555252f8a4ULL,
556 0xfd27609d606047c0ULL,
557 0x7689bccabcbc3565ULL,
558 0xcdac9b569b9b372bULL,
559 0x8c048e028e8e8a01ULL,
560 0x1571a3b6a3a3d25bULL,
561 0x3c600c300c0c6c18ULL,
562 0x8aff7bf17b7b84f6ULL,
563 0xe1b535d43535806aULL,
564 0x69e81d741d1df53aULL,
565 0x4753e0a7e0e0b3ddULL,
566 0xacf6d77bd7d721b3ULL,
567 0xed5ec22fc2c29c99ULL,
568 0x966d2eb82e2e435cULL,
569 0x7a624b314b4b2996ULL,
570 0x21a3fedffefe5de1ULL,
571 0x168257415757d5aeULL,
572 0x41a815541515bd2aULL,
573 0xb69f77c17777e8eeULL,
574 0xeba537dc3737926eULL,
575 0x567be5b3e5e59ed7ULL,
576 0xd98c9f469f9f1323ULL,
577 0x17d3f0e7f0f023fdULL,
578 0x7f6a4a354a4a2094ULL,
579 0x959eda4fdada44a9ULL,
580 0x25fa587d5858a2b0ULL,
581 0xca06c903c9c9cf8fULL,
582 0x8d5529a429297c52ULL,
583 0x22500a280a0a5a14ULL,
584 0x4fe1b1feb1b1507fULL,
585 0x1a69a0baa0a0c95dULL,
586 0xda7f6bb16b6b14d6ULL,
587 0xab5c852e8585d917ULL,
588 0x7381bdcebdbd3c67ULL,
589 0x34d25d695d5d8fbaULL,
590 0x5080104010109020ULL,
591 0x03f3f4f7f4f407f5ULL,
592 0xc016cb0bcbcbdd8bULL,
593 0xc6ed3ef83e3ed37cULL,
594 0x1128051405052d0aULL,
595 0xe61f6781676778ceULL,
596 0x5373e4b7e4e497d5ULL,
597 0xbb25279c2727024eULL,
598 0x5832411941417382ULL,
599 0x9d2c8b168b8ba70bULL,
600 0x0151a7a6a7a7f653ULL,
601 0x94cf7de97d7db2faULL,
602 0xfbdc956e95954937ULL,
603 0x9f8ed847d8d856adULL,
604 0x308bfbcbfbfb70ebULL,
605 0x7123ee9feeeecdc1ULL,
606 0x91c77ced7c7cbbf8ULL,
607 0xe3176685666671ccULL,
608 0x8ea6dd53dddd7ba7ULL,
609 0x4bb8175c1717af2eULL,
610 0x460247014747458eULL,
611 0xdc849e429e9e1a21ULL,
612 0xc51eca0fcacad489ULL,
613 0x99752db42d2d585aULL,
614 0x7991bfc6bfbf2e63ULL,
615 0x1b38071c07073f0eULL,
616 0x2301ad8eadadac47ULL,
617 0x2fea5a755a5ab0b4ULL,
618 0xb56c83368383ef1bULL,
619 0xff8533cc3333b666ULL,
620 0xf23f639163635cc6ULL,
621 0x0a10020802021204ULL,
622 0x3839aa92aaaa9349ULL,
623 0xa8af71d97171dee2ULL,
624 0xcf0ec807c8c8c68dULL,
625 0x7dc819641919d132ULL,
626 0x7072493949493b92ULL,
627 0x9a86d943d9d95fafULL,
628 0x1dc3f2eff2f231f9ULL,
629 0x484be3abe3e3a8dbULL,
630 0x2ae25b715b5bb9b6ULL,
631 0x9234881a8888bc0dULL,
632 0xc8a49a529a9a3e29ULL,
633 0xbe2d269826260b4cULL,
634 0xfa8d32c83232bf64ULL,
635 0x4ae9b0fab0b0597dULL,
636 0x6a1be983e9e9f2cfULL,
637 0x33780f3c0f0f771eULL,
638 0xa6e6d573d5d533b7ULL,
639 0xba74803a8080f41dULL,
640 0x7c99bec2bebe2761ULL,
641 0xde26cd13cdcdeb87ULL,
642 0xe4bd34d034348968ULL,
643 0x757a483d48483290ULL,
644 0x24abffdbffff54e3ULL,
645 0x8ff77af57a7a8df4ULL,
646 0xeaf4907a9090643dULL,
647 0x3ec25f615f5f9dbeULL,
648 0xa01d208020203d40ULL,
649 0xd56768bd68680fd0ULL,
650 0x72d01a681a1aca34ULL,
651 0x2c19ae82aeaeb741ULL,
652 0x5ec9b4eab4b47d75ULL,
653 0x199a544d5454cea8ULL,
654 0xe5ec937693937f3bULL,
655 0xaa0d228822222f44ULL,
656 0xe907648d646463c8ULL,
657 0x12dbf1e3f1f12affULL,
658 0xa2bf73d17373cce6ULL,
659 0x5a90124812128224ULL,
660 0x5d3a401d40407a80ULL,
661 0x2840082008084810ULL,
662 0xe856c32bc3c3959bULL,
663 0x7b33ec97ececdfc5ULL,
664 0x9096db4bdbdb4dabULL,
665 0x1f61a1bea1a1c05fULL,
666 0x831c8d0e8d8d9107ULL,
667 0xc9f53df43d3dc87aULL,
668 0xf1cc976697975b33ULL,
669 0x0000000000000000ULL,
670 0xd436cf1bcfcff983ULL,
671 0x87452bac2b2b6e56ULL,
672 0xb39776c57676e1ecULL,
673 0xb06482328282e619ULL,
674 0xa9fed67fd6d628b1ULL,
675 0x77d81b6c1b1bc336ULL,
676 0x5bc1b5eeb5b57477ULL,
677 0x2911af86afafbe43ULL,
678 0xdf776ab56a6a1dd4ULL,
679 0x0dba505d5050eaa0ULL,
680 0x4c1245094545578aULL,
681 0x18cbf3ebf3f338fbULL,
682 0xf09d30c03030ad60ULL,
683 0x742bef9befefc4c3ULL,
684 0xc3e53ffc3f3fda7eULL,
685 0x1c9255495555c7aaULL,
686 0x1079a2b2a2a2db59ULL,
687 0x6503ea8feaeae9c9ULL,
688 0xec0f658965656acaULL,
689 0x68b9bad2baba0369ULL,
690 0x93652fbc2f2f4a5eULL,
691 0xe74ec027c0c08e9dULL,
692 0x81bede5fdede60a1ULL,
693 0x6ce01c701c1cfc38ULL,
694 0x2ebbfdd3fdfd46e7ULL,
695 0x64524d294d4d1f9aULL,
696 0xe0e4927292927639ULL,
697 0xbc8f75c97575faeaULL,
698 0x1e3006180606360cULL,
699 0x98248a128a8aae09ULL,
700 0x40f9b2f2b2b24b79ULL,
701 0x5963e6bfe6e685d1ULL,
702 0x36700e380e0e7e1cULL,
703 0x63f81f7c1f1fe73eULL,
704 0xf7376295626255c4ULL,
705 0xa3eed477d4d43ab5ULL,
706 0x3229a89aa8a8814dULL,
707 0xf4c4966296965231ULL,
708 0x3a9bf9c3f9f962efULL,
709 0xf666c533c5c5a397ULL,
710 0xb13525942525104aULL,
711 0x20f259795959abb2ULL,
712 0xae54842a8484d015ULL,
713 0xa7b772d57272c5e4ULL,
714 0xddd539e43939ec72ULL,
715 0x615a4c2d4c4c1698ULL,
716 0x3bca5e655e5e94bcULL,
717 0x85e778fd78789ff0ULL,
718 0xd8dd38e03838e570ULL,
719 0x86148c0a8c8c9805ULL,
720 0xb2c6d163d1d117bfULL,
721 0x0b41a5aea5a5e457ULL,
722 0x4d43e2afe2e2a1d9ULL,
723 0xf82f619961614ec2ULL,
724 0x45f1b3f6b3b3427bULL,
725 0xa515218421213442ULL,
726 0xd6949c4a9c9c0825ULL,
727 0x66f01e781e1eee3cULL,
728 0x5222431143436186ULL,
729 0xfc76c73bc7c7b193ULL,
730 0x2bb3fcd7fcfc4fe5ULL,
731 0x1420041004042408ULL,
732 0x08b251595151e3a2ULL,
733 0xc7bc995e9999252fULL,
734 0xc44f6da96d6d22daULL,
735 0x39680d340d0d651aULL,
736 0x3583facffafa79e9ULL,
737 0x84b6df5bdfdf69a3ULL,
738 0x9bd77ee57e7ea9fcULL,
739 0xb43d249024241948ULL,
740 0xd7c53bec3b3bfe76ULL,
741 0x3d31ab96abab9a4bULL,
742 0xd13ece1fcecef081ULL,
743 0x5588114411119922ULL,
744 0x890c8f068f8f8303ULL,
745 0x6b4a4e254e4e049cULL,
746 0x51d1b7e6b7b76673ULL,
747 0x600beb8bebebe0cbULL,
748 0xccfd3cf03c3cc178ULL,
749 0xbf7c813e8181fd1fULL,
750 0xfed4946a94944035ULL,
751 0x0cebf7fbf7f71cf3ULL,
752 0x67a1b9deb9b9186fULL,
753 0x5f98134c13138b26ULL,
754 0x9c7d2cb02c2c5158ULL,
755 0xb8d6d36bd3d305bbULL,
756 0x5c6be7bbe7e78cd3ULL,
757 0xcb576ea56e6e39dcULL,
758 0xf36ec437c4c4aa95ULL,
759 0x0f18030c03031b06ULL,
760 0x138a56455656dcacULL,
761 0x491a440d44445e88ULL,
762 0x9edf7fe17f7fa0feULL,
763 0x3721a99ea9a9884fULL,
764 0x824d2aa82a2a6754ULL,
765 0x6db1bbd6bbbb0a6bULL,
766 0xe246c123c1c1879fULL,
767 0x02a253515353f1a6ULL,
768 0x8baedc57dcdc72a5ULL,
769 0x27580b2c0b0b5316ULL,
770 0xd39c9d4e9d9d0127ULL,
771 0xc1476cad6c6c2bd8ULL,
772 0xf59531c43131a462ULL,
773 0xb98774cd7474f3e8ULL,
774 0x09e3f6fff6f615f1ULL,
775 0x430a460546464c8cULL,
776 0x2609ac8aacaca545ULL,
777 0x973c891e8989b50fULL,
778 0x44a014501414b428ULL,
779 0x425be1a3e1e1badfULL,
780 0x4eb016581616a62cULL,
781 0xd2cd3ae83a3af774ULL,
782 0xd06f69b9696906d2ULL,
783 0x2d48092409094112ULL,
784 0xada770dd7070d7e0ULL,
785 0x54d9b6e2b6b66f71ULL,
786 0xb7ced067d0d01ebdULL,
787 0x7e3bed93ededd6c7ULL,
788 0xdb2ecc17cccce285ULL,
789 0x572a421542426884ULL,
790 0xc2b4985a98982c2dULL,
791 0x0e49a4aaa4a4ed55ULL,
792 0x885d28a028287550ULL,
793 0x31da5c6d5c5c86b8ULL,
794 0x3f93f8c7f8f86bedULL,
795 0xa44486228686c211ULL,
798 static const uint64_t T3[256] = {
799 0xc018601818d83078ULL,
800 0x05238c23232646afULL,
801 0x7ec63fc6c6b891f9ULL,
802 0x13e887e8e8fbcd6fULL,
803 0x4c87268787cb13a1ULL,
804 0xa9b8dab8b8116d62ULL,
805 0x0801040101090205ULL,
806 0x424f214f4f0d9e6eULL,
807 0xad36d836369b6ceeULL,
808 0x59a6a2a6a6ff5104ULL,
809 0xded26fd2d20cb9bdULL,
810 0xfbf5f3f5f50ef706ULL,
811 0xef79f9797996f280ULL,
812 0x5f6fa16f6f30deceULL,
813 0xfc917e91916d3fefULL,
814 0xaa52555252f8a407ULL,
815 0x27609d606047c0fdULL,
816 0x89bccabcbc356576ULL,
817 0xac9b569b9b372bcdULL,
818 0x048e028e8e8a018cULL,
819 0x71a3b6a3a3d25b15ULL,
820 0x600c300c0c6c183cULL,
821 0xff7bf17b7b84f68aULL,
822 0xb535d43535806ae1ULL,
823 0xe81d741d1df53a69ULL,
824 0x53e0a7e0e0b3dd47ULL,
825 0xf6d77bd7d721b3acULL,
826 0x5ec22fc2c29c99edULL,
827 0x6d2eb82e2e435c96ULL,
828 0x624b314b4b29967aULL,
829 0xa3fedffefe5de121ULL,
830 0x8257415757d5ae16ULL,
831 0xa815541515bd2a41ULL,
832 0x9f77c17777e8eeb6ULL,
833 0xa537dc3737926eebULL,
834 0x7be5b3e5e59ed756ULL,
835 0x8c9f469f9f1323d9ULL,
836 0xd3f0e7f0f023fd17ULL,
837 0x6a4a354a4a20947fULL,
838 0x9eda4fdada44a995ULL,
839 0xfa587d5858a2b025ULL,
840 0x06c903c9c9cf8fcaULL,
841 0x5529a429297c528dULL,
842 0x500a280a0a5a1422ULL,
843 0xe1b1feb1b1507f4fULL,
844 0x69a0baa0a0c95d1aULL,
845 0x7f6bb16b6b14d6daULL,
846 0x5c852e8585d917abULL,
847 0x81bdcebdbd3c6773ULL,
848 0xd25d695d5d8fba34ULL,
849 0x8010401010902050ULL,
850 0xf3f4f7f4f407f503ULL,
851 0x16cb0bcbcbdd8bc0ULL,
852 0xed3ef83e3ed37cc6ULL,
853 0x28051405052d0a11ULL,
854 0x1f6781676778cee6ULL,
855 0x73e4b7e4e497d553ULL,
856 0x25279c2727024ebbULL,
857 0x3241194141738258ULL,
858 0x2c8b168b8ba70b9dULL,
859 0x51a7a6a7a7f65301ULL,
860 0xcf7de97d7db2fa94ULL,
861 0xdc956e95954937fbULL,
862 0x8ed847d8d856ad9fULL,
863 0x8bfbcbfbfb70eb30ULL,
864 0x23ee9feeeecdc171ULL,
865 0xc77ced7c7cbbf891ULL,
866 0x176685666671cce3ULL,
867 0xa6dd53dddd7ba78eULL,
868 0xb8175c1717af2e4bULL,
869 0x0247014747458e46ULL,
870 0x849e429e9e1a21dcULL,
871 0x1eca0fcacad489c5ULL,
872 0x752db42d2d585a99ULL,
873 0x91bfc6bfbf2e6379ULL,
874 0x38071c07073f0e1bULL,
875 0x01ad8eadadac4723ULL,
876 0xea5a755a5ab0b42fULL,
877 0x6c83368383ef1bb5ULL,
878 0x8533cc3333b666ffULL,
879 0x3f639163635cc6f2ULL,
880 0x100208020212040aULL,
881 0x39aa92aaaa934938ULL,
882 0xaf71d97171dee2a8ULL,
883 0x0ec807c8c8c68dcfULL,
884 0xc819641919d1327dULL,
885 0x72493949493b9270ULL,
886 0x86d943d9d95faf9aULL,
887 0xc3f2eff2f231f91dULL,
888 0x4be3abe3e3a8db48ULL,
889 0xe25b715b5bb9b62aULL,
890 0x34881a8888bc0d92ULL,
891 0xa49a529a9a3e29c8ULL,
892 0x2d269826260b4cbeULL,
893 0x8d32c83232bf64faULL,
894 0xe9b0fab0b0597d4aULL,
895 0x1be983e9e9f2cf6aULL,
896 0x780f3c0f0f771e33ULL,
897 0xe6d573d5d533b7a6ULL,
898 0x74803a8080f41dbaULL,
899 0x99bec2bebe27617cULL,
900 0x26cd13cdcdeb87deULL,
901 0xbd34d034348968e4ULL,
902 0x7a483d4848329075ULL,
903 0xabffdbffff54e324ULL,
904 0xf77af57a7a8df48fULL,
905 0xf4907a9090643deaULL,
906 0xc25f615f5f9dbe3eULL,
907 0x1d208020203d40a0ULL,
908 0x6768bd68680fd0d5ULL,
909 0xd01a681a1aca3472ULL,
910 0x19ae82aeaeb7412cULL,
911 0xc9b4eab4b47d755eULL,
912 0x9a544d5454cea819ULL,
913 0xec937693937f3be5ULL,
914 0x0d228822222f44aaULL,
915 0x07648d646463c8e9ULL,
916 0xdbf1e3f1f12aff12ULL,
917 0xbf73d17373cce6a2ULL,
918 0x901248121282245aULL,
919 0x3a401d40407a805dULL,
920 0x4008200808481028ULL,
921 0x56c32bc3c3959be8ULL,
922 0x33ec97ececdfc57bULL,
923 0x96db4bdbdb4dab90ULL,
924 0x61a1bea1a1c05f1fULL,
925 0x1c8d0e8d8d910783ULL,
926 0xf53df43d3dc87ac9ULL,
927 0xcc976697975b33f1ULL,
928 0x0000000000000000ULL,
929 0x36cf1bcfcff983d4ULL,
930 0x452bac2b2b6e5687ULL,
931 0x9776c57676e1ecb3ULL,
932 0x6482328282e619b0ULL,
933 0xfed67fd6d628b1a9ULL,
934 0xd81b6c1b1bc33677ULL,
935 0xc1b5eeb5b574775bULL,
936 0x11af86afafbe4329ULL,
937 0x776ab56a6a1dd4dfULL,
938 0xba505d5050eaa00dULL,
939 0x1245094545578a4cULL,
940 0xcbf3ebf3f338fb18ULL,
941 0x9d30c03030ad60f0ULL,
942 0x2bef9befefc4c374ULL,
943 0xe53ffc3f3fda7ec3ULL,
944 0x9255495555c7aa1cULL,
945 0x79a2b2a2a2db5910ULL,
946 0x03ea8feaeae9c965ULL,
947 0x0f658965656acaecULL,
948 0xb9bad2baba036968ULL,
949 0x652fbc2f2f4a5e93ULL,
950 0x4ec027c0c08e9de7ULL,
951 0xbede5fdede60a181ULL,
952 0xe01c701c1cfc386cULL,
953 0xbbfdd3fdfd46e72eULL,
954 0x524d294d4d1f9a64ULL,
955 0xe4927292927639e0ULL,
956 0x8f75c97575faeabcULL,
957 0x3006180606360c1eULL,
958 0x248a128a8aae0998ULL,
959 0xf9b2f2b2b24b7940ULL,
960 0x63e6bfe6e685d159ULL,
961 0x700e380e0e7e1c36ULL,
962 0xf81f7c1f1fe73e63ULL,
963 0x376295626255c4f7ULL,
964 0xeed477d4d43ab5a3ULL,
965 0x29a89aa8a8814d32ULL,
966 0xc4966296965231f4ULL,
967 0x9bf9c3f9f962ef3aULL,
968 0x66c533c5c5a397f6ULL,
969 0x3525942525104ab1ULL,
970 0xf259795959abb220ULL,
971 0x54842a8484d015aeULL,
972 0xb772d57272c5e4a7ULL,
973 0xd539e43939ec72ddULL,
974 0x5a4c2d4c4c169861ULL,
975 0xca5e655e5e94bc3bULL,
976 0xe778fd78789ff085ULL,
977 0xdd38e03838e570d8ULL,
978 0x148c0a8c8c980586ULL,
979 0xc6d163d1d117bfb2ULL,
980 0x41a5aea5a5e4570bULL,
981 0x43e2afe2e2a1d94dULL,
982 0x2f619961614ec2f8ULL,
983 0xf1b3f6b3b3427b45ULL,
984 0x15218421213442a5ULL,
985 0x949c4a9c9c0825d6ULL,
986 0xf01e781e1eee3c66ULL,
987 0x2243114343618652ULL,
988 0x76c73bc7c7b193fcULL,
989 0xb3fcd7fcfc4fe52bULL,
990 0x2004100404240814ULL,
991 0xb251595151e3a208ULL,
992 0xbc995e9999252fc7ULL,
993 0x4f6da96d6d22dac4ULL,
994 0x680d340d0d651a39ULL,
995 0x83facffafa79e935ULL,
996 0xb6df5bdfdf69a384ULL,
997 0xd77ee57e7ea9fc9bULL,
998 0x3d249024241948b4ULL,
999 0xc53bec3b3bfe76d7ULL,
1000 0x31ab96abab9a4b3dULL,
1001 0x3ece1fcecef081d1ULL,
1002 0x8811441111992255ULL,
1003 0x0c8f068f8f830389ULL,
1004 0x4a4e254e4e049c6bULL,
1005 0xd1b7e6b7b7667351ULL,
1006 0x0beb8bebebe0cb60ULL,
1007 0xfd3cf03c3cc178ccULL,
1008 0x7c813e8181fd1fbfULL,
1009 0xd4946a94944035feULL,
1010 0xebf7fbf7f71cf30cULL,
1011 0xa1b9deb9b9186f67ULL,
1012 0x98134c13138b265fULL,
1013 0x7d2cb02c2c51589cULL,
1014 0xd6d36bd3d305bbb8ULL,
1015 0x6be7bbe7e78cd35cULL,
1016 0x576ea56e6e39dccbULL,
1017 0x6ec437c4c4aa95f3ULL,
1018 0x18030c03031b060fULL,
1019 0x8a56455656dcac13ULL,
1020 0x1a440d44445e8849ULL,
1021 0xdf7fe17f7fa0fe9eULL,
1022 0x21a99ea9a9884f37ULL,
1023 0x4d2aa82a2a675482ULL,
1024 0xb1bbd6bbbb0a6b6dULL,
1025 0x46c123c1c1879fe2ULL,
1026 0xa253515353f1a602ULL,
1027 0xaedc57dcdc72a58bULL,
1028 0x580b2c0b0b531627ULL,
1029 0x9c9d4e9d9d0127d3ULL,
1030 0x476cad6c6c2bd8c1ULL,
1031 0x9531c43131a462f5ULL,
1032 0x8774cd7474f3e8b9ULL,
1033 0xe3f6fff6f615f109ULL,
1034 0x0a460546464c8c43ULL,
1035 0x09ac8aacaca54526ULL,
1036 0x3c891e8989b50f97ULL,
1037 0xa014501414b42844ULL,
1038 0x5be1a3e1e1badf42ULL,
1039 0xb016581616a62c4eULL,
1040 0xcd3ae83a3af774d2ULL,
1041 0x6f69b9696906d2d0ULL,
1042 0x480924090941122dULL,
1043 0xa770dd7070d7e0adULL,
1044 0xd9b6e2b6b66f7154ULL,
1045 0xced067d0d01ebdb7ULL,
1046 0x3bed93ededd6c77eULL,
1047 0x2ecc17cccce285dbULL,
1048 0x2a42154242688457ULL,
1049 0xb4985a98982c2dc2ULL,
1050 0x49a4aaa4a4ed550eULL,
1051 0x5d28a02828755088ULL,
1052 0xda5c6d5c5c86b831ULL,
1053 0x93f8c7f8f86bed3fULL,
1054 0x4486228686c211a4ULL,
1057 static const uint64_t T4[256] = {
1058 0x18601818d83078c0ULL,
1059 0x238c23232646af05ULL,
1060 0xc63fc6c6b891f97eULL,
1061 0xe887e8e8fbcd6f13ULL,
1062 0x87268787cb13a14cULL,
1063 0xb8dab8b8116d62a9ULL,
1064 0x0104010109020508ULL,
1065 0x4f214f4f0d9e6e42ULL,
1066 0x36d836369b6ceeadULL,
1067 0xa6a2a6a6ff510459ULL,
1068 0xd26fd2d20cb9bddeULL,
1069 0xf5f3f5f50ef706fbULL,
1070 0x79f9797996f280efULL,
1071 0x6fa16f6f30dece5fULL,
1072 0x917e91916d3feffcULL,
1073 0x52555252f8a407aaULL,
1074 0x609d606047c0fd27ULL,
1075 0xbccabcbc35657689ULL,
1076 0x9b569b9b372bcdacULL,
1077 0x8e028e8e8a018c04ULL,
1078 0xa3b6a3a3d25b1571ULL,
1079 0x0c300c0c6c183c60ULL,
1080 0x7bf17b7b84f68affULL,
1081 0x35d43535806ae1b5ULL,
1082 0x1d741d1df53a69e8ULL,
1083 0xe0a7e0e0b3dd4753ULL,
1084 0xd77bd7d721b3acf6ULL,
1085 0xc22fc2c29c99ed5eULL,
1086 0x2eb82e2e435c966dULL,
1087 0x4b314b4b29967a62ULL,
1088 0xfedffefe5de121a3ULL,
1089 0x57415757d5ae1682ULL,
1090 0x15541515bd2a41a8ULL,
1091 0x77c17777e8eeb69fULL,
1092 0x37dc3737926eeba5ULL,
1093 0xe5b3e5e59ed7567bULL,
1094 0x9f469f9f1323d98cULL,
1095 0xf0e7f0f023fd17d3ULL,
1096 0x4a354a4a20947f6aULL,
1097 0xda4fdada44a9959eULL,
1098 0x587d5858a2b025faULL,
1099 0xc903c9c9cf8fca06ULL,
1100 0x29a429297c528d55ULL,
1101 0x0a280a0a5a142250ULL,
1102 0xb1feb1b1507f4fe1ULL,
1103 0xa0baa0a0c95d1a69ULL,
1104 0x6bb16b6b14d6da7fULL,
1105 0x852e8585d917ab5cULL,
1106 0xbdcebdbd3c677381ULL,
1107 0x5d695d5d8fba34d2ULL,
1108 0x1040101090205080ULL,
1109 0xf4f7f4f407f503f3ULL,
1110 0xcb0bcbcbdd8bc016ULL,
1111 0x3ef83e3ed37cc6edULL,
1112 0x051405052d0a1128ULL,
1113 0x6781676778cee61fULL,
1114 0xe4b7e4e497d55373ULL,
1115 0x279c2727024ebb25ULL,
1116 0x4119414173825832ULL,
1117 0x8b168b8ba70b9d2cULL,
1118 0xa7a6a7a7f6530151ULL,
1119 0x7de97d7db2fa94cfULL,
1120 0x956e95954937fbdcULL,
1121 0xd847d8d856ad9f8eULL,
1122 0xfbcbfbfb70eb308bULL,
1123 0xee9feeeecdc17123ULL,
1124 0x7ced7c7cbbf891c7ULL,
1125 0x6685666671cce317ULL,
1126 0xdd53dddd7ba78ea6ULL,
1127 0x175c1717af2e4bb8ULL,
1128 0x47014747458e4602ULL,
1129 0x9e429e9e1a21dc84ULL,
1130 0xca0fcacad489c51eULL,
1131 0x2db42d2d585a9975ULL,
1132 0xbfc6bfbf2e637991ULL,
1133 0x071c07073f0e1b38ULL,
1134 0xad8eadadac472301ULL,
1135 0x5a755a5ab0b42feaULL,
1136 0x83368383ef1bb56cULL,
1137 0x33cc3333b666ff85ULL,
1138 0x639163635cc6f23fULL,
1139 0x0208020212040a10ULL,
1140 0xaa92aaaa93493839ULL,
1141 0x71d97171dee2a8afULL,
1142 0xc807c8c8c68dcf0eULL,
1143 0x19641919d1327dc8ULL,
1144 0x493949493b927072ULL,
1145 0xd943d9d95faf9a86ULL,
1146 0xf2eff2f231f91dc3ULL,
1147 0xe3abe3e3a8db484bULL,
1148 0x5b715b5bb9b62ae2ULL,
1149 0x881a8888bc0d9234ULL,
1150 0x9a529a9a3e29c8a4ULL,
1151 0x269826260b4cbe2dULL,
1152 0x32c83232bf64fa8dULL,
1153 0xb0fab0b0597d4ae9ULL,
1154 0xe983e9e9f2cf6a1bULL,
1155 0x0f3c0f0f771e3378ULL,
1156 0xd573d5d533b7a6e6ULL,
1157 0x803a8080f41dba74ULL,
1158 0xbec2bebe27617c99ULL,
1159 0xcd13cdcdeb87de26ULL,
1160 0x34d034348968e4bdULL,
1161 0x483d48483290757aULL,
1162 0xffdbffff54e324abULL,
1163 0x7af57a7a8df48ff7ULL,
1164 0x907a9090643deaf4ULL,
1165 0x5f615f5f9dbe3ec2ULL,
1166 0x208020203d40a01dULL,
1167 0x68bd68680fd0d567ULL,
1168 0x1a681a1aca3472d0ULL,
1169 0xae82aeaeb7412c19ULL,
1170 0xb4eab4b47d755ec9ULL,
1171 0x544d5454cea8199aULL,
1172 0x937693937f3be5ecULL,
1173 0x228822222f44aa0dULL,
1174 0x648d646463c8e907ULL,
1175 0xf1e3f1f12aff12dbULL,
1176 0x73d17373cce6a2bfULL,
1177 0x1248121282245a90ULL,
1178 0x401d40407a805d3aULL,
1179 0x0820080848102840ULL,
1180 0xc32bc3c3959be856ULL,
1181 0xec97ececdfc57b33ULL,
1182 0xdb4bdbdb4dab9096ULL,
1183 0xa1bea1a1c05f1f61ULL,
1184 0x8d0e8d8d9107831cULL,
1185 0x3df43d3dc87ac9f5ULL,
1186 0x976697975b33f1ccULL,
1187 0x0000000000000000ULL,
1188 0xcf1bcfcff983d436ULL,
1189 0x2bac2b2b6e568745ULL,
1190 0x76c57676e1ecb397ULL,
1191 0x82328282e619b064ULL,
1192 0xd67fd6d628b1a9feULL,
1193 0x1b6c1b1bc33677d8ULL,
1194 0xb5eeb5b574775bc1ULL,
1195 0xaf86afafbe432911ULL,
1196 0x6ab56a6a1dd4df77ULL,
1197 0x505d5050eaa00dbaULL,
1198 0x45094545578a4c12ULL,
1199 0xf3ebf3f338fb18cbULL,
1200 0x30c03030ad60f09dULL,
1201 0xef9befefc4c3742bULL,
1202 0x3ffc3f3fda7ec3e5ULL,
1203 0x55495555c7aa1c92ULL,
1204 0xa2b2a2a2db591079ULL,
1205 0xea8feaeae9c96503ULL,
1206 0x658965656acaec0fULL,
1207 0xbad2baba036968b9ULL,
1208 0x2fbc2f2f4a5e9365ULL,
1209 0xc027c0c08e9de74eULL,
1210 0xde5fdede60a181beULL,
1211 0x1c701c1cfc386ce0ULL,
1212 0xfdd3fdfd46e72ebbULL,
1213 0x4d294d4d1f9a6452ULL,
1214 0x927292927639e0e4ULL,
1215 0x75c97575faeabc8fULL,
1216 0x06180606360c1e30ULL,
1217 0x8a128a8aae099824ULL,
1218 0xb2f2b2b24b7940f9ULL,
1219 0xe6bfe6e685d15963ULL,
1220 0x0e380e0e7e1c3670ULL,
1221 0x1f7c1f1fe73e63f8ULL,
1222 0x6295626255c4f737ULL,
1223 0xd477d4d43ab5a3eeULL,
1224 0xa89aa8a8814d3229ULL,
1225 0x966296965231f4c4ULL,
1226 0xf9c3f9f962ef3a9bULL,
1227 0xc533c5c5a397f666ULL,
1228 0x25942525104ab135ULL,
1229 0x59795959abb220f2ULL,
1230 0x842a8484d015ae54ULL,
1231 0x72d57272c5e4a7b7ULL,
1232 0x39e43939ec72ddd5ULL,
1233 0x4c2d4c4c1698615aULL,
1234 0x5e655e5e94bc3bcaULL,
1235 0x78fd78789ff085e7ULL,
1236 0x38e03838e570d8ddULL,
1237 0x8c0a8c8c98058614ULL,
1238 0xd163d1d117bfb2c6ULL,
1239 0xa5aea5a5e4570b41ULL,
1240 0xe2afe2e2a1d94d43ULL,
1241 0x619961614ec2f82fULL,
1242 0xb3f6b3b3427b45f1ULL,
1243 0x218421213442a515ULL,
1244 0x9c4a9c9c0825d694ULL,
1245 0x1e781e1eee3c66f0ULL,
1246 0x4311434361865222ULL,
1247 0xc73bc7c7b193fc76ULL,
1248 0xfcd7fcfc4fe52bb3ULL,
1249 0x0410040424081420ULL,
1250 0x51595151e3a208b2ULL,
1251 0x995e9999252fc7bcULL,
1252 0x6da96d6d22dac44fULL,
1253 0x0d340d0d651a3968ULL,
1254 0xfacffafa79e93583ULL,
1255 0xdf5bdfdf69a384b6ULL,
1256 0x7ee57e7ea9fc9bd7ULL,
1257 0x249024241948b43dULL,
1258 0x3bec3b3bfe76d7c5ULL,
1259 0xab96abab9a4b3d31ULL,
1260 0xce1fcecef081d13eULL,
1261 0x1144111199225588ULL,
1262 0x8f068f8f8303890cULL,
1263 0x4e254e4e049c6b4aULL,
1264 0xb7e6b7b7667351d1ULL,
1265 0xeb8bebebe0cb600bULL,
1266 0x3cf03c3cc178ccfdULL,
1267 0x813e8181fd1fbf7cULL,
1268 0x946a94944035fed4ULL,
1269 0xf7fbf7f71cf30cebULL,
1270 0xb9deb9b9186f67a1ULL,
1271 0x134c13138b265f98ULL,
1272 0x2cb02c2c51589c7dULL,
1273 0xd36bd3d305bbb8d6ULL,
1274 0xe7bbe7e78cd35c6bULL,
1275 0x6ea56e6e39dccb57ULL,
1276 0xc437c4c4aa95f36eULL,
1277 0x030c03031b060f18ULL,
1278 0x56455656dcac138aULL,
1279 0x440d44445e88491aULL,
1280 0x7fe17f7fa0fe9edfULL,
1281 0xa99ea9a9884f3721ULL,
1282 0x2aa82a2a6754824dULL,
1283 0xbbd6bbbb0a6b6db1ULL,
1284 0xc123c1c1879fe246ULL,
1285 0x53515353f1a602a2ULL,
1286 0xdc57dcdc72a58baeULL,
1287 0x0b2c0b0b53162758ULL,
1288 0x9d4e9d9d0127d39cULL,
1289 0x6cad6c6c2bd8c147ULL,
1290 0x31c43131a462f595ULL,
1291 0x74cd7474f3e8b987ULL,
1292 0xf6fff6f615f109e3ULL,
1293 0x460546464c8c430aULL,
1294 0xac8aacaca5452609ULL,
1295 0x891e8989b50f973cULL,
1296 0x14501414b42844a0ULL,
1297 0xe1a3e1e1badf425bULL,
1298 0x16581616a62c4eb0ULL,
1299 0x3ae83a3af774d2cdULL,
1300 0x69b9696906d2d06fULL,
1301 0x0924090941122d48ULL,
1302 0x70dd7070d7e0ada7ULL,
1303 0xb6e2b6b66f7154d9ULL,
1304 0xd067d0d01ebdb7ceULL,
1305 0xed93ededd6c77e3bULL,
1306 0xcc17cccce285db2eULL,
1307 0x421542426884572aULL,
1308 0x985a98982c2dc2b4ULL,
1309 0xa4aaa4a4ed550e49ULL,
1310 0x28a028287550885dULL,
1311 0x5c6d5c5c86b831daULL,
1312 0xf8c7f8f86bed3f93ULL,
1313 0x86228686c211a444ULL,
1316 static const uint64_t T5[256] = {
1317 0x601818d83078c018ULL,
1318 0x8c23232646af0523ULL,
1319 0x3fc6c6b891f97ec6ULL,
1320 0x87e8e8fbcd6f13e8ULL,
1321 0x268787cb13a14c87ULL,
1322 0xdab8b8116d62a9b8ULL,
1323 0x0401010902050801ULL,
1324 0x214f4f0d9e6e424fULL,
1325 0xd836369b6ceead36ULL,
1326 0xa2a6a6ff510459a6ULL,
1327 0x6fd2d20cb9bdded2ULL,
1328 0xf3f5f50ef706fbf5ULL,
1329 0xf9797996f280ef79ULL,
1330 0xa16f6f30dece5f6fULL,
1331 0x7e91916d3feffc91ULL,
1332 0x555252f8a407aa52ULL,
1333 0x9d606047c0fd2760ULL,
1334 0xcabcbc35657689bcULL,
1335 0x569b9b372bcdac9bULL,
1336 0x028e8e8a018c048eULL,
1337 0xb6a3a3d25b1571a3ULL,
1338 0x300c0c6c183c600cULL,
1339 0xf17b7b84f68aff7bULL,
1340 0xd43535806ae1b535ULL,
1341 0x741d1df53a69e81dULL,
1342 0xa7e0e0b3dd4753e0ULL,
1343 0x7bd7d721b3acf6d7ULL,
1344 0x2fc2c29c99ed5ec2ULL,
1345 0xb82e2e435c966d2eULL,
1346 0x314b4b29967a624bULL,
1347 0xdffefe5de121a3feULL,
1348 0x415757d5ae168257ULL,
1349 0x541515bd2a41a815ULL,
1350 0xc17777e8eeb69f77ULL,
1351 0xdc3737926eeba537ULL,
1352 0xb3e5e59ed7567be5ULL,
1353 0x469f9f1323d98c9fULL,
1354 0xe7f0f023fd17d3f0ULL,
1355 0x354a4a20947f6a4aULL,
1356 0x4fdada44a9959edaULL,
1357 0x7d5858a2b025fa58ULL,
1358 0x03c9c9cf8fca06c9ULL,
1359 0xa429297c528d5529ULL,
1360 0x280a0a5a1422500aULL,
1361 0xfeb1b1507f4fe1b1ULL,
1362 0xbaa0a0c95d1a69a0ULL,
1363 0xb16b6b14d6da7f6bULL,
1364 0x2e8585d917ab5c85ULL,
1365 0xcebdbd3c677381bdULL,
1366 0x695d5d8fba34d25dULL,
1367 0x4010109020508010ULL,
1368 0xf7f4f407f503f3f4ULL,
1369 0x0bcbcbdd8bc016cbULL,
1370 0xf83e3ed37cc6ed3eULL,
1371 0x1405052d0a112805ULL,
1372 0x81676778cee61f67ULL,
1373 0xb7e4e497d55373e4ULL,
1374 0x9c2727024ebb2527ULL,
1375 0x1941417382583241ULL,
1376 0x168b8ba70b9d2c8bULL,
1377 0xa6a7a7f6530151a7ULL,
1378 0xe97d7db2fa94cf7dULL,
1379 0x6e95954937fbdc95ULL,
1380 0x47d8d856ad9f8ed8ULL,
1381 0xcbfbfb70eb308bfbULL,
1382 0x9feeeecdc17123eeULL,
1383 0xed7c7cbbf891c77cULL,
1384 0x85666671cce31766ULL,
1385 0x53dddd7ba78ea6ddULL,
1386 0x5c1717af2e4bb817ULL,
1387 0x014747458e460247ULL,
1388 0x429e9e1a21dc849eULL,
1389 0x0fcacad489c51ecaULL,
1390 0xb42d2d585a99752dULL,
1391 0xc6bfbf2e637991bfULL,
1392 0x1c07073f0e1b3807ULL,
1393 0x8eadadac472301adULL,
1394 0x755a5ab0b42fea5aULL,
1395 0x368383ef1bb56c83ULL,
1396 0xcc3333b666ff8533ULL,
1397 0x9163635cc6f23f63ULL,
1398 0x08020212040a1002ULL,
1399 0x92aaaa93493839aaULL,
1400 0xd97171dee2a8af71ULL,
1401 0x07c8c8c68dcf0ec8ULL,
1402 0x641919d1327dc819ULL,
1403 0x3949493b92707249ULL,
1404 0x43d9d95faf9a86d9ULL,
1405 0xeff2f231f91dc3f2ULL,
1406 0xabe3e3a8db484be3ULL,
1407 0x715b5bb9b62ae25bULL,
1408 0x1a8888bc0d923488ULL,
1409 0x529a9a3e29c8a49aULL,
1410 0x9826260b4cbe2d26ULL,
1411 0xc83232bf64fa8d32ULL,
1412 0xfab0b0597d4ae9b0ULL,
1413 0x83e9e9f2cf6a1be9ULL,
1414 0x3c0f0f771e33780fULL,
1415 0x73d5d533b7a6e6d5ULL,
1416 0x3a8080f41dba7480ULL,
1417 0xc2bebe27617c99beULL,
1418 0x13cdcdeb87de26cdULL,
1419 0xd034348968e4bd34ULL,
1420 0x3d48483290757a48ULL,
1421 0xdbffff54e324abffULL,
1422 0xf57a7a8df48ff77aULL,
1423 0x7a9090643deaf490ULL,
1424 0x615f5f9dbe3ec25fULL,
1425 0x8020203d40a01d20ULL,
1426 0xbd68680fd0d56768ULL,
1427 0x681a1aca3472d01aULL,
1428 0x82aeaeb7412c19aeULL,
1429 0xeab4b47d755ec9b4ULL,
1430 0x4d5454cea8199a54ULL,
1431 0x7693937f3be5ec93ULL,
1432 0x8822222f44aa0d22ULL,
1433 0x8d646463c8e90764ULL,
1434 0xe3f1f12aff12dbf1ULL,
1435 0xd17373cce6a2bf73ULL,
1436 0x48121282245a9012ULL,
1437 0x1d40407a805d3a40ULL,
1438 0x2008084810284008ULL,
1439 0x2bc3c3959be856c3ULL,
1440 0x97ececdfc57b33ecULL,
1441 0x4bdbdb4dab9096dbULL,
1442 0xbea1a1c05f1f61a1ULL,
1443 0x0e8d8d9107831c8dULL,
1444 0xf43d3dc87ac9f53dULL,
1445 0x6697975b33f1cc97ULL,
1446 0x0000000000000000ULL,
1447 0x1bcfcff983d436cfULL,
1448 0xac2b2b6e5687452bULL,
1449 0xc57676e1ecb39776ULL,
1450 0x328282e619b06482ULL,
1451 0x7fd6d628b1a9fed6ULL,
1452 0x6c1b1bc33677d81bULL,
1453 0xeeb5b574775bc1b5ULL,
1454 0x86afafbe432911afULL,
1455 0xb56a6a1dd4df776aULL,
1456 0x5d5050eaa00dba50ULL,
1457 0x094545578a4c1245ULL,
1458 0xebf3f338fb18cbf3ULL,
1459 0xc03030ad60f09d30ULL,
1460 0x9befefc4c3742befULL,
1461 0xfc3f3fda7ec3e53fULL,
1462 0x495555c7aa1c9255ULL,
1463 0xb2a2a2db591079a2ULL,
1464 0x8feaeae9c96503eaULL,
1465 0x8965656acaec0f65ULL,
1466 0xd2baba036968b9baULL,
1467 0xbc2f2f4a5e93652fULL,
1468 0x27c0c08e9de74ec0ULL,
1469 0x5fdede60a181bedeULL,
1470 0x701c1cfc386ce01cULL,
1471 0xd3fdfd46e72ebbfdULL,
1472 0x294d4d1f9a64524dULL,
1473 0x7292927639e0e492ULL,
1474 0xc97575faeabc8f75ULL,
1475 0x180606360c1e3006ULL,
1476 0x128a8aae0998248aULL,
1477 0xf2b2b24b7940f9b2ULL,
1478 0xbfe6e685d15963e6ULL,
1479 0x380e0e7e1c36700eULL,
1480 0x7c1f1fe73e63f81fULL,
1481 0x95626255c4f73762ULL,
1482 0x77d4d43ab5a3eed4ULL,
1483 0x9aa8a8814d3229a8ULL,
1484 0x6296965231f4c496ULL,
1485 0xc3f9f962ef3a9bf9ULL,
1486 0x33c5c5a397f666c5ULL,
1487 0x942525104ab13525ULL,
1488 0x795959abb220f259ULL,
1489 0x2a8484d015ae5484ULL,
1490 0xd57272c5e4a7b772ULL,
1491 0xe43939ec72ddd539ULL,
1492 0x2d4c4c1698615a4cULL,
1493 0x655e5e94bc3bca5eULL,
1494 0xfd78789ff085e778ULL,
1495 0xe03838e570d8dd38ULL,
1496 0x0a8c8c980586148cULL,
1497 0x63d1d117bfb2c6d1ULL,
1498 0xaea5a5e4570b41a5ULL,
1499 0xafe2e2a1d94d43e2ULL,
1500 0x9961614ec2f82f61ULL,
1501 0xf6b3b3427b45f1b3ULL,
1502 0x8421213442a51521ULL,
1503 0x4a9c9c0825d6949cULL,
1504 0x781e1eee3c66f01eULL,
1505 0x1143436186522243ULL,
1506 0x3bc7c7b193fc76c7ULL,
1507 0xd7fcfc4fe52bb3fcULL,
1508 0x1004042408142004ULL,
1509 0x595151e3a208b251ULL,
1510 0x5e9999252fc7bc99ULL,
1511 0xa96d6d22dac44f6dULL,
1512 0x340d0d651a39680dULL,
1513 0xcffafa79e93583faULL,
1514 0x5bdfdf69a384b6dfULL,
1515 0xe57e7ea9fc9bd77eULL,
1516 0x9024241948b43d24ULL,
1517 0xec3b3bfe76d7c53bULL,
1518 0x96abab9a4b3d31abULL,
1519 0x1fcecef081d13eceULL,
1520 0x4411119922558811ULL,
1521 0x068f8f8303890c8fULL,
1522 0x254e4e049c6b4a4eULL,
1523 0xe6b7b7667351d1b7ULL,
1524 0x8bebebe0cb600bebULL,
1525 0xf03c3cc178ccfd3cULL,
1526 0x3e8181fd1fbf7c81ULL,
1527 0x6a94944035fed494ULL,
1528 0xfbf7f71cf30cebf7ULL,
1529 0xdeb9b9186f67a1b9ULL,
1530 0x4c13138b265f9813ULL,
1531 0xb02c2c51589c7d2cULL,
1532 0x6bd3d305bbb8d6d3ULL,
1533 0xbbe7e78cd35c6be7ULL,
1534 0xa56e6e39dccb576eULL,
1535 0x37c4c4aa95f36ec4ULL,
1536 0x0c03031b060f1803ULL,
1537 0x455656dcac138a56ULL,
1538 0x0d44445e88491a44ULL,
1539 0xe17f7fa0fe9edf7fULL,
1540 0x9ea9a9884f3721a9ULL,
1541 0xa82a2a6754824d2aULL,
1542 0xd6bbbb0a6b6db1bbULL,
1543 0x23c1c1879fe246c1ULL,
1544 0x515353f1a602a253ULL,
1545 0x57dcdc72a58baedcULL,
1546 0x2c0b0b531627580bULL,
1547 0x4e9d9d0127d39c9dULL,
1548 0xad6c6c2bd8c1476cULL,
1549 0xc43131a462f59531ULL,
1550 0xcd7474f3e8b98774ULL,
1551 0xfff6f615f109e3f6ULL,
1552 0x0546464c8c430a46ULL,
1553 0x8aacaca5452609acULL,
1554 0x1e8989b50f973c89ULL,
1555 0x501414b42844a014ULL,
1556 0xa3e1e1badf425be1ULL,
1557 0x581616a62c4eb016ULL,
1558 0xe83a3af774d2cd3aULL,
1559 0xb9696906d2d06f69ULL,
1560 0x24090941122d4809ULL,
1561 0xdd7070d7e0ada770ULL,
1562 0xe2b6b66f7154d9b6ULL,
1563 0x67d0d01ebdb7ced0ULL,
1564 0x93ededd6c77e3bedULL,
1565 0x17cccce285db2eccULL,
1566 0x1542426884572a42ULL,
1567 0x5a98982c2dc2b498ULL,
1568 0xaaa4a4ed550e49a4ULL,
1569 0xa028287550885d28ULL,
1570 0x6d5c5c86b831da5cULL,
1571 0xc7f8f86bed3f93f8ULL,
1572 0x228686c211a44486ULL,
1575 static const uint64_t T6[256] = {
1576 0x1818d83078c01860ULL,
1577 0x23232646af05238cULL,
1578 0xc6c6b891f97ec63fULL,
1579 0xe8e8fbcd6f13e887ULL,
1580 0x8787cb13a14c8726ULL,
1581 0xb8b8116d62a9b8daULL,
1582 0x0101090205080104ULL,
1583 0x4f4f0d9e6e424f21ULL,
1584 0x36369b6ceead36d8ULL,
1585 0xa6a6ff510459a6a2ULL,
1586 0xd2d20cb9bdded26fULL,
1587 0xf5f50ef706fbf5f3ULL,
1588 0x797996f280ef79f9ULL,
1589 0x6f6f30dece5f6fa1ULL,
1590 0x91916d3feffc917eULL,
1591 0x5252f8a407aa5255ULL,
1592 0x606047c0fd27609dULL,
1593 0xbcbc35657689bccaULL,
1594 0x9b9b372bcdac9b56ULL,
1595 0x8e8e8a018c048e02ULL,
1596 0xa3a3d25b1571a3b6ULL,
1597 0x0c0c6c183c600c30ULL,
1598 0x7b7b84f68aff7bf1ULL,
1599 0x3535806ae1b535d4ULL,
1600 0x1d1df53a69e81d74ULL,
1601 0xe0e0b3dd4753e0a7ULL,
1602 0xd7d721b3acf6d77bULL,
1603 0xc2c29c99ed5ec22fULL,
1604 0x2e2e435c966d2eb8ULL,
1605 0x4b4b29967a624b31ULL,
1606 0xfefe5de121a3fedfULL,
1607 0x5757d5ae16825741ULL,
1608 0x1515bd2a41a81554ULL,
1609 0x7777e8eeb69f77c1ULL,
1610 0x3737926eeba537dcULL,
1611 0xe5e59ed7567be5b3ULL,
1612 0x9f9f1323d98c9f46ULL,
1613 0xf0f023fd17d3f0e7ULL,
1614 0x4a4a20947f6a4a35ULL,
1615 0xdada44a9959eda4fULL,
1616 0x5858a2b025fa587dULL,
1617 0xc9c9cf8fca06c903ULL,
1618 0x29297c528d5529a4ULL,
1619 0x0a0a5a1422500a28ULL,
1620 0xb1b1507f4fe1b1feULL,
1621 0xa0a0c95d1a69a0baULL,
1622 0x6b6b14d6da7f6bb1ULL,
1623 0x8585d917ab5c852eULL,
1624 0xbdbd3c677381bdceULL,
1625 0x5d5d8fba34d25d69ULL,
1626 0x1010902050801040ULL,
1627 0xf4f407f503f3f4f7ULL,
1628 0xcbcbdd8bc016cb0bULL,
1629 0x3e3ed37cc6ed3ef8ULL,
1630 0x05052d0a11280514ULL,
1631 0x676778cee61f6781ULL,
1632 0xe4e497d55373e4b7ULL,
1633 0x2727024ebb25279cULL,
1634 0x4141738258324119ULL,
1635 0x8b8ba70b9d2c8b16ULL,
1636 0xa7a7f6530151a7a6ULL,
1637 0x7d7db2fa94cf7de9ULL,
1638 0x95954937fbdc956eULL,
1639 0xd8d856ad9f8ed847ULL,
1640 0xfbfb70eb308bfbcbULL,
1641 0xeeeecdc17123ee9fULL,
1642 0x7c7cbbf891c77cedULL,
1643 0x666671cce3176685ULL,
1644 0xdddd7ba78ea6dd53ULL,
1645 0x1717af2e4bb8175cULL,
1646 0x4747458e46024701ULL,
1647 0x9e9e1a21dc849e42ULL,
1648 0xcacad489c51eca0fULL,
1649 0x2d2d585a99752db4ULL,
1650 0xbfbf2e637991bfc6ULL,
1651 0x07073f0e1b38071cULL,
1652 0xadadac472301ad8eULL,
1653 0x5a5ab0b42fea5a75ULL,
1654 0x8383ef1bb56c8336ULL,
1655 0x3333b666ff8533ccULL,
1656 0x63635cc6f23f6391ULL,
1657 0x020212040a100208ULL,
1658 0xaaaa93493839aa92ULL,
1659 0x7171dee2a8af71d9ULL,
1660 0xc8c8c68dcf0ec807ULL,
1661 0x1919d1327dc81964ULL,
1662 0x49493b9270724939ULL,
1663 0xd9d95faf9a86d943ULL,
1664 0xf2f231f91dc3f2efULL,
1665 0xe3e3a8db484be3abULL,
1666 0x5b5bb9b62ae25b71ULL,
1667 0x8888bc0d9234881aULL,
1668 0x9a9a3e29c8a49a52ULL,
1669 0x26260b4cbe2d2698ULL,
1670 0x3232bf64fa8d32c8ULL,
1671 0xb0b0597d4ae9b0faULL,
1672 0xe9e9f2cf6a1be983ULL,
1673 0x0f0f771e33780f3cULL,
1674 0xd5d533b7a6e6d573ULL,
1675 0x8080f41dba74803aULL,
1676 0xbebe27617c99bec2ULL,
1677 0xcdcdeb87de26cd13ULL,
1678 0x34348968e4bd34d0ULL,
1679 0x48483290757a483dULL,
1680 0xffff54e324abffdbULL,
1681 0x7a7a8df48ff77af5ULL,
1682 0x9090643deaf4907aULL,
1683 0x5f5f9dbe3ec25f61ULL,
1684 0x20203d40a01d2080ULL,
1685 0x68680fd0d56768bdULL,
1686 0x1a1aca3472d01a68ULL,
1687 0xaeaeb7412c19ae82ULL,
1688 0xb4b47d755ec9b4eaULL,
1689 0x5454cea8199a544dULL,
1690 0x93937f3be5ec9376ULL,
1691 0x22222f44aa0d2288ULL,
1692 0x646463c8e907648dULL,
1693 0xf1f12aff12dbf1e3ULL,
1694 0x7373cce6a2bf73d1ULL,
1695 0x121282245a901248ULL,
1696 0x40407a805d3a401dULL,
1697 0x0808481028400820ULL,
1698 0xc3c3959be856c32bULL,
1699 0xececdfc57b33ec97ULL,
1700 0xdbdb4dab9096db4bULL,
1701 0xa1a1c05f1f61a1beULL,
1702 0x8d8d9107831c8d0eULL,
1703 0x3d3dc87ac9f53df4ULL,
1704 0x97975b33f1cc9766ULL,
1705 0x0000000000000000ULL,
1706 0xcfcff983d436cf1bULL,
1707 0x2b2b6e5687452bacULL,
1708 0x7676e1ecb39776c5ULL,
1709 0x8282e619b0648232ULL,
1710 0xd6d628b1a9fed67fULL,
1711 0x1b1bc33677d81b6cULL,
1712 0xb5b574775bc1b5eeULL,
1713 0xafafbe432911af86ULL,
1714 0x6a6a1dd4df776ab5ULL,
1715 0x5050eaa00dba505dULL,
1716 0x4545578a4c124509ULL,
1717 0xf3f338fb18cbf3ebULL,
1718 0x3030ad60f09d30c0ULL,
1719 0xefefc4c3742bef9bULL,
1720 0x3f3fda7ec3e53ffcULL,
1721 0x5555c7aa1c925549ULL,
1722 0xa2a2db591079a2b2ULL,
1723 0xeaeae9c96503ea8fULL,
1724 0x65656acaec0f6589ULL,
1725 0xbaba036968b9bad2ULL,
1726 0x2f2f4a5e93652fbcULL,
1727 0xc0c08e9de74ec027ULL,
1728 0xdede60a181bede5fULL,
1729 0x1c1cfc386ce01c70ULL,
1730 0xfdfd46e72ebbfdd3ULL,
1731 0x4d4d1f9a64524d29ULL,
1732 0x92927639e0e49272ULL,
1733 0x7575faeabc8f75c9ULL,
1734 0x0606360c1e300618ULL,
1735 0x8a8aae0998248a12ULL,
1736 0xb2b24b7940f9b2f2ULL,
1737 0xe6e685d15963e6bfULL,
1738 0x0e0e7e1c36700e38ULL,
1739 0x1f1fe73e63f81f7cULL,
1740 0x626255c4f7376295ULL,
1741 0xd4d43ab5a3eed477ULL,
1742 0xa8a8814d3229a89aULL,
1743 0x96965231f4c49662ULL,
1744 0xf9f962ef3a9bf9c3ULL,
1745 0xc5c5a397f666c533ULL,
1746 0x2525104ab1352594ULL,
1747 0x5959abb220f25979ULL,
1748 0x8484d015ae54842aULL,
1749 0x7272c5e4a7b772d5ULL,
1750 0x3939ec72ddd539e4ULL,
1751 0x4c4c1698615a4c2dULL,
1752 0x5e5e94bc3bca5e65ULL,
1753 0x78789ff085e778fdULL,
1754 0x3838e570d8dd38e0ULL,
1755 0x8c8c980586148c0aULL,
1756 0xd1d117bfb2c6d163ULL,
1757 0xa5a5e4570b41a5aeULL,
1758 0xe2e2a1d94d43e2afULL,
1759 0x61614ec2f82f6199ULL,
1760 0xb3b3427b45f1b3f6ULL,
1761 0x21213442a5152184ULL,
1762 0x9c9c0825d6949c4aULL,
1763 0x1e1eee3c66f01e78ULL,
1764 0x4343618652224311ULL,
1765 0xc7c7b193fc76c73bULL,
1766 0xfcfc4fe52bb3fcd7ULL,
1767 0x0404240814200410ULL,
1768 0x5151e3a208b25159ULL,
1769 0x9999252fc7bc995eULL,
1770 0x6d6d22dac44f6da9ULL,
1771 0x0d0d651a39680d34ULL,
1772 0xfafa79e93583facfULL,
1773 0xdfdf69a384b6df5bULL,
1774 0x7e7ea9fc9bd77ee5ULL,
1775 0x24241948b43d2490ULL,
1776 0x3b3bfe76d7c53becULL,
1777 0xabab9a4b3d31ab96ULL,
1778 0xcecef081d13ece1fULL,
1779 0x1111992255881144ULL,
1780 0x8f8f8303890c8f06ULL,
1781 0x4e4e049c6b4a4e25ULL,
1782 0xb7b7667351d1b7e6ULL,
1783 0xebebe0cb600beb8bULL,
1784 0x3c3cc178ccfd3cf0ULL,
1785 0x8181fd1fbf7c813eULL,
1786 0x94944035fed4946aULL,
1787 0xf7f71cf30cebf7fbULL,
1788 0xb9b9186f67a1b9deULL,
1789 0x13138b265f98134cULL,
1790 0x2c2c51589c7d2cb0ULL,
1791 0xd3d305bbb8d6d36bULL,
1792 0xe7e78cd35c6be7bbULL,
1793 0x6e6e39dccb576ea5ULL,
1794 0xc4c4aa95f36ec437ULL,
1795 0x03031b060f18030cULL,
1796 0x5656dcac138a5645ULL,
1797 0x44445e88491a440dULL,
1798 0x7f7fa0fe9edf7fe1ULL,
1799 0xa9a9884f3721a99eULL,
1800 0x2a2a6754824d2aa8ULL,
1801 0xbbbb0a6b6db1bbd6ULL,
1802 0xc1c1879fe246c123ULL,
1803 0x5353f1a602a25351ULL,
1804 0xdcdc72a58baedc57ULL,
1805 0x0b0b531627580b2cULL,
1806 0x9d9d0127d39c9d4eULL,
1807 0x6c6c2bd8c1476cadULL,
1808 0x3131a462f59531c4ULL,
1809 0x7474f3e8b98774cdULL,
1810 0xf6f615f109e3f6ffULL,
1811 0x46464c8c430a4605ULL,
1812 0xacaca5452609ac8aULL,
1813 0x8989b50f973c891eULL,
1814 0x1414b42844a01450ULL,
1815 0xe1e1badf425be1a3ULL,
1816 0x1616a62c4eb01658ULL,
1817 0x3a3af774d2cd3ae8ULL,
1818 0x696906d2d06f69b9ULL,
1819 0x090941122d480924ULL,
1820 0x7070d7e0ada770ddULL,
1821 0xb6b66f7154d9b6e2ULL,
1822 0xd0d01ebdb7ced067ULL,
1823 0xededd6c77e3bed93ULL,
1824 0xcccce285db2ecc17ULL,
1825 0x42426884572a4215ULL,
1826 0x98982c2dc2b4985aULL,
1827 0xa4a4ed550e49a4aaULL,
1828 0x28287550885d28a0ULL,
1829 0x5c5c86b831da5c6dULL,
1830 0xf8f86bed3f93f8c7ULL,
1831 0x8686c211a4448622ULL,
1834 static const uint64_t T7[256] = {
1835 0x18d83078c0186018ULL,
1836 0x232646af05238c23ULL,
1837 0xc6b891f97ec63fc6ULL,
1838 0xe8fbcd6f13e887e8ULL,
1839 0x87cb13a14c872687ULL,
1840 0xb8116d62a9b8dab8ULL,
1841 0x0109020508010401ULL,
1842 0x4f0d9e6e424f214fULL,
1843 0x369b6ceead36d836ULL,
1844 0xa6ff510459a6a2a6ULL,
1845 0xd20cb9bdded26fd2ULL,
1846 0xf50ef706fbf5f3f5ULL,
1847 0x7996f280ef79f979ULL,
1848 0x6f30dece5f6fa16fULL,
1849 0x916d3feffc917e91ULL,
1850 0x52f8a407aa525552ULL,
1851 0x6047c0fd27609d60ULL,
1852 0xbc35657689bccabcULL,
1853 0x9b372bcdac9b569bULL,
1854 0x8e8a018c048e028eULL,
1855 0xa3d25b1571a3b6a3ULL,
1856 0x0c6c183c600c300cULL,
1857 0x7b84f68aff7bf17bULL,
1858 0x35806ae1b535d435ULL,
1859 0x1df53a69e81d741dULL,
1860 0xe0b3dd4753e0a7e0ULL,
1861 0xd721b3acf6d77bd7ULL,
1862 0xc29c99ed5ec22fc2ULL,
1863 0x2e435c966d2eb82eULL,
1864 0x4b29967a624b314bULL,
1865 0xfe5de121a3fedffeULL,
1866 0x57d5ae1682574157ULL,
1867 0x15bd2a41a8155415ULL,
1868 0x77e8eeb69f77c177ULL,
1869 0x37926eeba537dc37ULL,
1870 0xe59ed7567be5b3e5ULL,
1871 0x9f1323d98c9f469fULL,
1872 0xf023fd17d3f0e7f0ULL,
1873 0x4a20947f6a4a354aULL,
1874 0xda44a9959eda4fdaULL,
1875 0x58a2b025fa587d58ULL,
1876 0xc9cf8fca06c903c9ULL,
1877 0x297c528d5529a429ULL,
1878 0x0a5a1422500a280aULL,
1879 0xb1507f4fe1b1feb1ULL,
1880 0xa0c95d1a69a0baa0ULL,
1881 0x6b14d6da7f6bb16bULL,
1882 0x85d917ab5c852e85ULL,
1883 0xbd3c677381bdcebdULL,
1884 0x5d8fba34d25d695dULL,
1885 0x1090205080104010ULL,
1886 0xf407f503f3f4f7f4ULL,
1887 0xcbdd8bc016cb0bcbULL,
1888 0x3ed37cc6ed3ef83eULL,
1889 0x052d0a1128051405ULL,
1890 0x6778cee61f678167ULL,
1891 0xe497d55373e4b7e4ULL,
1892 0x27024ebb25279c27ULL,
1893 0x4173825832411941ULL,
1894 0x8ba70b9d2c8b168bULL,
1895 0xa7f6530151a7a6a7ULL,
1896 0x7db2fa94cf7de97dULL,
1897 0x954937fbdc956e95ULL,
1898 0xd856ad9f8ed847d8ULL,
1899 0xfb70eb308bfbcbfbULL,
1900 0xeecdc17123ee9feeULL,
1901 0x7cbbf891c77ced7cULL,
1902 0x6671cce317668566ULL,
1903 0xdd7ba78ea6dd53ddULL,
1904 0x17af2e4bb8175c17ULL,
1905 0x47458e4602470147ULL,
1906 0x9e1a21dc849e429eULL,
1907 0xcad489c51eca0fcaULL,
1908 0x2d585a99752db42dULL,
1909 0xbf2e637991bfc6bfULL,
1910 0x073f0e1b38071c07ULL,
1911 0xadac472301ad8eadULL,
1912 0x5ab0b42fea5a755aULL,
1913 0x83ef1bb56c833683ULL,
1914 0x33b666ff8533cc33ULL,
1915 0x635cc6f23f639163ULL,
1916 0x0212040a10020802ULL,
1917 0xaa93493839aa92aaULL,
1918 0x71dee2a8af71d971ULL,
1919 0xc8c68dcf0ec807c8ULL,
1920 0x19d1327dc8196419ULL,
1921 0x493b927072493949ULL,
1922 0xd95faf9a86d943d9ULL,
1923 0xf231f91dc3f2eff2ULL,
1924 0xe3a8db484be3abe3ULL,
1925 0x5bb9b62ae25b715bULL,
1926 0x88bc0d9234881a88ULL,
1927 0x9a3e29c8a49a529aULL,
1928 0x260b4cbe2d269826ULL,
1929 0x32bf64fa8d32c832ULL,
1930 0xb0597d4ae9b0fab0ULL,
1931 0xe9f2cf6a1be983e9ULL,
1932 0x0f771e33780f3c0fULL,
1933 0xd533b7a6e6d573d5ULL,
1934 0x80f41dba74803a80ULL,
1935 0xbe27617c99bec2beULL,
1936 0xcdeb87de26cd13cdULL,
1937 0x348968e4bd34d034ULL,
1938 0x483290757a483d48ULL,
1939 0xff54e324abffdbffULL,
1940 0x7a8df48ff77af57aULL,
1941 0x90643deaf4907a90ULL,
1942 0x5f9dbe3ec25f615fULL,
1943 0x203d40a01d208020ULL,
1944 0x680fd0d56768bd68ULL,
1945 0x1aca3472d01a681aULL,
1946 0xaeb7412c19ae82aeULL,
1947 0xb47d755ec9b4eab4ULL,
1948 0x54cea8199a544d54ULL,
1949 0x937f3be5ec937693ULL,
1950 0x222f44aa0d228822ULL,
1951 0x6463c8e907648d64ULL,
1952 0xf12aff12dbf1e3f1ULL,
1953 0x73cce6a2bf73d173ULL,
1954 0x1282245a90124812ULL,
1955 0x407a805d3a401d40ULL,
1956 0x0848102840082008ULL,
1957 0xc3959be856c32bc3ULL,
1958 0xecdfc57b33ec97ecULL,
1959 0xdb4dab9096db4bdbULL,
1960 0xa1c05f1f61a1bea1ULL,
1961 0x8d9107831c8d0e8dULL,
1962 0x3dc87ac9f53df43dULL,
1963 0x975b33f1cc976697ULL,
1964 0x0000000000000000ULL,
1965 0xcff983d436cf1bcfULL,
1966 0x2b6e5687452bac2bULL,
1967 0x76e1ecb39776c576ULL,
1968 0x82e619b064823282ULL,
1969 0xd628b1a9fed67fd6ULL,
1970 0x1bc33677d81b6c1bULL,
1971 0xb574775bc1b5eeb5ULL,
1972 0xafbe432911af86afULL,
1973 0x6a1dd4df776ab56aULL,
1974 0x50eaa00dba505d50ULL,
1975 0x45578a4c12450945ULL,
1976 0xf338fb18cbf3ebf3ULL,
1977 0x30ad60f09d30c030ULL,
1978 0xefc4c3742bef9befULL,
1979 0x3fda7ec3e53ffc3fULL,
1980 0x55c7aa1c92554955ULL,
1981 0xa2db591079a2b2a2ULL,
1982 0xeae9c96503ea8feaULL,
1983 0x656acaec0f658965ULL,
1984 0xba036968b9bad2baULL,
1985 0x2f4a5e93652fbc2fULL,
1986 0xc08e9de74ec027c0ULL,
1987 0xde60a181bede5fdeULL,
1988 0x1cfc386ce01c701cULL,
1989 0xfd46e72ebbfdd3fdULL,
1990 0x4d1f9a64524d294dULL,
1991 0x927639e0e4927292ULL,
1992 0x75faeabc8f75c975ULL,
1993 0x06360c1e30061806ULL,
1994 0x8aae0998248a128aULL,
1995 0xb24b7940f9b2f2b2ULL,
1996 0xe685d15963e6bfe6ULL,
1997 0x0e7e1c36700e380eULL,
1998 0x1fe73e63f81f7c1fULL,
1999 0x6255c4f737629562ULL,
2000 0xd43ab5a3eed477d4ULL,
2001 0xa8814d3229a89aa8ULL,
2002 0x965231f4c4966296ULL,
2003 0xf962ef3a9bf9c3f9ULL,
2004 0xc5a397f666c533c5ULL,
2005 0x25104ab135259425ULL,
2006 0x59abb220f2597959ULL,
2007 0x84d015ae54842a84ULL,
2008 0x72c5e4a7b772d572ULL,
2009 0x39ec72ddd539e439ULL,
2010 0x4c1698615a4c2d4cULL,
2011 0x5e94bc3bca5e655eULL,
2012 0x789ff085e778fd78ULL,
2013 0x38e570d8dd38e038ULL,
2014 0x8c980586148c0a8cULL,
2015 0xd117bfb2c6d163d1ULL,
2016 0xa5e4570b41a5aea5ULL,
2017 0xe2a1d94d43e2afe2ULL,
2018 0x614ec2f82f619961ULL,
2019 0xb3427b45f1b3f6b3ULL,
2020 0x213442a515218421ULL,
2021 0x9c0825d6949c4a9cULL,
2022 0x1eee3c66f01e781eULL,
2023 0x4361865222431143ULL,
2024 0xc7b193fc76c73bc7ULL,
2025 0xfc4fe52bb3fcd7fcULL,
2026 0x0424081420041004ULL,
2027 0x51e3a208b2515951ULL,
2028 0x99252fc7bc995e99ULL,
2029 0x6d22dac44f6da96dULL,
2030 0x0d651a39680d340dULL,
2031 0xfa79e93583facffaULL,
2032 0xdf69a384b6df5bdfULL,
2033 0x7ea9fc9bd77ee57eULL,
2034 0x241948b43d249024ULL,
2035 0x3bfe76d7c53bec3bULL,
2036 0xab9a4b3d31ab96abULL,
2037 0xcef081d13ece1fceULL,
2038 0x1199225588114411ULL,
2039 0x8f8303890c8f068fULL,
2040 0x4e049c6b4a4e254eULL,
2041 0xb7667351d1b7e6b7ULL,
2042 0xebe0cb600beb8bebULL,
2043 0x3cc178ccfd3cf03cULL,
2044 0x81fd1fbf7c813e81ULL,
2045 0x944035fed4946a94ULL,
2046 0xf71cf30cebf7fbf7ULL,
2047 0xb9186f67a1b9deb9ULL,
2048 0x138b265f98134c13ULL,
2049 0x2c51589c7d2cb02cULL,
2050 0xd305bbb8d6d36bd3ULL,
2051 0xe78cd35c6be7bbe7ULL,
2052 0x6e39dccb576ea56eULL,
2053 0xc4aa95f36ec437c4ULL,
2054 0x031b060f18030c03ULL,
2055 0x56dcac138a564556ULL,
2056 0x445e88491a440d44ULL,
2057 0x7fa0fe9edf7fe17fULL,
2058 0xa9884f3721a99ea9ULL,
2059 0x2a6754824d2aa82aULL,
2060 0xbb0a6b6db1bbd6bbULL,
2061 0xc1879fe246c123c1ULL,
2062 0x53f1a602a2535153ULL,
2063 0xdc72a58baedc57dcULL,
2064 0x0b531627580b2c0bULL,
2065 0x9d0127d39c9d4e9dULL,
2066 0x6c2bd8c1476cad6cULL,
2067 0x31a462f59531c431ULL,
2068 0x74f3e8b98774cd74ULL,
2069 0xf615f109e3f6fff6ULL,
2070 0x464c8c430a460546ULL,
2071 0xaca5452609ac8aacULL,
2072 0x89b50f973c891e89ULL,
2073 0x14b42844a0145014ULL,
2074 0xe1badf425be1a3e1ULL,
2075 0x16a62c4eb0165816ULL,
2076 0x3af774d2cd3ae83aULL,
2077 0x6906d2d06f69b969ULL,
2078 0x0941122d48092409ULL,
2079 0x70d7e0ada770dd70ULL,
2080 0xb66f7154d9b6e2b6ULL,
2081 0xd01ebdb7ced067d0ULL,
2082 0xedd6c77e3bed93edULL,
2083 0xcce285db2ecc17ccULL,
2084 0x426884572a421542ULL,
2085 0x982c2dc2b4985a98ULL,
2086 0xa4ed550e49a4aaa4ULL,
2087 0x287550885d28a028ULL,
2088 0x5c86b831da5c6d5cULL,
2089 0xf86bed3f93f8c7f8ULL,
2090 0x86c211a444862286ULL,
2093 struct whirlpool_context {
2094 uint64_t H[8];
2095 uint64_t len;
2096 uint8_t m[512 / 8];
2097 unsigned int m_len;
2100 static void __whirlpool_update(void *_ctx, const uint8_t *m)
2102 struct whirlpool_context *ctx = _ctx;
2103 uint64_t W[8], K[8];
2104 unsigned int i;
2105 int r;
2107 for (i = 0; i < 8; i++) {
2108 K[i] = ctx->H[i];
2109 W[i] = K[i] ^ le64toh(*(uint64_t *)(m + 8 * i));
2112 for (r = 0; r < R; r++) {
2113 uint64_t K1[8];
2114 uint64_t W1[8];
2116 K1[0] = T0[K[0] & 0xff] ^
2117 T1[(K[7] >> (1 * 8)) & 0xff] ^
2118 T2[(K[6] >> (2 * 8)) & 0xff] ^
2119 T3[(K[5] >> (3 * 8)) & 0xff] ^
2120 T4[(K[4] >> (4 * 8)) & 0xff] ^
2121 T5[(K[3] >> (5 * 8)) & 0xff] ^
2122 T6[(K[2] >> (6 * 8)) & 0xff] ^
2123 T7[(K[1] >> (7 * 8)) & 0xff] ^
2124 c[r];
2125 K1[1] = T0[K[1] & 0xff] ^
2126 T1[(K[0] >> (1 * 8)) & 0xff] ^
2127 T2[(K[7] >> (2 * 8)) & 0xff] ^
2128 T3[(K[6] >> (3 * 8)) & 0xff] ^
2129 T4[(K[5] >> (4 * 8)) & 0xff] ^
2130 T5[(K[4] >> (5 * 8)) & 0xff] ^
2131 T6[(K[3] >> (6 * 8)) & 0xff] ^
2132 T7[(K[2] >> (7 * 8)) & 0xff];
2133 K1[2] = T0[K[2] & 0xff] ^
2134 T1[(K[1] >> (1 * 8)) & 0xff] ^
2135 T2[(K[0] >> (2 * 8)) & 0xff] ^
2136 T3[(K[7] >> (3 * 8)) & 0xff] ^
2137 T4[(K[6] >> (4 * 8)) & 0xff] ^
2138 T5[(K[5] >> (5 * 8)) & 0xff] ^
2139 T6[(K[4] >> (6 * 8)) & 0xff] ^
2140 T7[(K[3] >> (7 * 8)) & 0xff];
2141 K1[3] = T0[K[3] & 0xff] ^
2142 T1[(K[2] >> (1 * 8)) & 0xff] ^
2143 T2[(K[1] >> (2 * 8)) & 0xff] ^
2144 T3[(K[0] >> (3 * 8)) & 0xff] ^
2145 T4[(K[7] >> (4 * 8)) & 0xff] ^
2146 T5[(K[6] >> (5 * 8)) & 0xff] ^
2147 T6[(K[5] >> (6 * 8)) & 0xff] ^
2148 T7[(K[4] >> (7 * 8)) & 0xff];
2149 K1[4] = T0[K[4] & 0xff] ^
2150 T1[(K[3] >> (1 * 8)) & 0xff] ^
2151 T2[(K[2] >> (2 * 8)) & 0xff] ^
2152 T3[(K[1] >> (3 * 8)) & 0xff] ^
2153 T4[(K[0] >> (4 * 8)) & 0xff] ^
2154 T5[(K[7] >> (5 * 8)) & 0xff] ^
2155 T6[(K[6] >> (6 * 8)) & 0xff] ^
2156 T7[(K[5] >> (7 * 8)) & 0xff];
2157 K1[5] = T0[K[5] & 0xff] ^
2158 T1[(K[4] >> (1 * 8)) & 0xff] ^
2159 T2[(K[3] >> (2 * 8)) & 0xff] ^
2160 T3[(K[2] >> (3 * 8)) & 0xff] ^
2161 T4[(K[1] >> (4 * 8)) & 0xff] ^
2162 T5[(K[0] >> (5 * 8)) & 0xff] ^
2163 T6[(K[7] >> (6 * 8)) & 0xff] ^
2164 T7[(K[6] >> (7 * 8)) & 0xff];
2165 K1[6] = T0[K[6] & 0xff] ^
2166 T1[(K[5] >> (1 * 8)) & 0xff] ^
2167 T2[(K[4] >> (2 * 8)) & 0xff] ^
2168 T3[(K[3] >> (3 * 8)) & 0xff] ^
2169 T4[(K[2] >> (4 * 8)) & 0xff] ^
2170 T5[(K[1] >> (5 * 8)) & 0xff] ^
2171 T6[(K[0] >> (6 * 8)) & 0xff] ^
2172 T7[(K[7] >> (7 * 8)) & 0xff];
2173 K1[7] = T0[K[7] & 0xff] ^
2174 T1[(K[6] >> (1 * 8)) & 0xff] ^
2175 T2[(K[5] >> (2 * 8)) & 0xff] ^
2176 T3[(K[4] >> (3 * 8)) & 0xff] ^
2177 T4[(K[3] >> (4 * 8)) & 0xff] ^
2178 T5[(K[2] >> (5 * 8)) & 0xff] ^
2179 T6[(K[1] >> (6 * 8)) & 0xff] ^
2180 T7[(K[0] >> (7 * 8)) & 0xff];
2182 for (i = 0; i < 8; i++)
2183 K[i] = K1[i];
2185 W1[0] = T0[W[0] & 0xff] ^
2186 T1[(W[7] >> (1 * 8)) & 0xff] ^
2187 T2[(W[6] >> (2 * 8)) & 0xff] ^
2188 T3[(W[5] >> (3 * 8)) & 0xff] ^
2189 T4[(W[4] >> (4 * 8)) & 0xff] ^
2190 T5[(W[3] >> (5 * 8)) & 0xff] ^
2191 T6[(W[2] >> (6 * 8)) & 0xff] ^
2192 T7[(W[1] >> (7 * 8)) & 0xff] ^
2193 K[0];
2194 W1[1] = T0[W[1] & 0xff] ^
2195 T1[(W[0] >> (1 * 8)) & 0xff] ^
2196 T2[(W[7] >> (2 * 8)) & 0xff] ^
2197 T3[(W[6] >> (3 * 8)) & 0xff] ^
2198 T4[(W[5] >> (4 * 8)) & 0xff] ^
2199 T5[(W[4] >> (5 * 8)) & 0xff] ^
2200 T6[(W[3] >> (6 * 8)) & 0xff] ^
2201 T7[(W[2] >> (7 * 8)) & 0xff] ^
2202 K[1];
2203 W1[2] = T0[W[2] & 0xff] ^
2204 T1[(W[1] >> (1 * 8)) & 0xff] ^
2205 T2[(W[0] >> (2 * 8)) & 0xff] ^
2206 T3[(W[7] >> (3 * 8)) & 0xff] ^
2207 T4[(W[6] >> (4 * 8)) & 0xff] ^
2208 T5[(W[5] >> (5 * 8)) & 0xff] ^
2209 T6[(W[4] >> (6 * 8)) & 0xff] ^
2210 T7[(W[3] >> (7 * 8)) & 0xff] ^
2211 K[2];
2212 W1[3] = T0[W[3] & 0xff] ^
2213 T1[(W[2] >> (1 * 8)) & 0xff] ^
2214 T2[(W[1] >> (2 * 8)) & 0xff] ^
2215 T3[(W[0] >> (3 * 8)) & 0xff] ^
2216 T4[(W[7] >> (4 * 8)) & 0xff] ^
2217 T5[(W[6] >> (5 * 8)) & 0xff] ^
2218 T6[(W[5] >> (6 * 8)) & 0xff] ^
2219 T7[(W[4] >> (7 * 8)) & 0xff] ^
2220 K[3];
2221 W1[4] = T0[W[4] & 0xff] ^
2222 T1[(W[3] >> (1 * 8)) & 0xff] ^
2223 T2[(W[2] >> (2 * 8)) & 0xff] ^
2224 T3[(W[1] >> (3 * 8)) & 0xff] ^
2225 T4[(W[0] >> (4 * 8)) & 0xff] ^
2226 T5[(W[7] >> (5 * 8)) & 0xff] ^
2227 T6[(W[6] >> (6 * 8)) & 0xff] ^
2228 T7[(W[5] >> (7 * 8)) & 0xff] ^
2229 K[4];
2230 W1[5] = T0[W[5] & 0xff] ^
2231 T1[(W[4] >> (1 * 8)) & 0xff] ^
2232 T2[(W[3] >> (2 * 8)) & 0xff] ^
2233 T3[(W[2] >> (3 * 8)) & 0xff] ^
2234 T4[(W[1] >> (4 * 8)) & 0xff] ^
2235 T5[(W[0] >> (5 * 8)) & 0xff] ^
2236 T6[(W[7] >> (6 * 8)) & 0xff] ^
2237 T7[(W[6] >> (7 * 8)) & 0xff] ^
2238 K[5];
2239 W1[6] = T0[W[6] & 0xff] ^
2240 T1[(W[5] >> (1 * 8)) & 0xff] ^
2241 T2[(W[4] >> (2 * 8)) & 0xff] ^
2242 T3[(W[3] >> (3 * 8)) & 0xff] ^
2243 T4[(W[2] >> (4 * 8)) & 0xff] ^
2244 T5[(W[1] >> (5 * 8)) & 0xff] ^
2245 T6[(W[0] >> (6 * 8)) & 0xff] ^
2246 T7[(W[7] >> (7 * 8)) & 0xff] ^
2247 K[6];
2248 W1[7] = T0[W[7] & 0xff] ^
2249 T1[(W[6] >> (1 * 8)) & 0xff] ^
2250 T2[(W[5] >> (2 * 8)) & 0xff] ^
2251 T3[(W[4] >> (3 * 8)) & 0xff] ^
2252 T4[(W[3] >> (4 * 8)) & 0xff] ^
2253 T5[(W[2] >> (5 * 8)) & 0xff] ^
2254 T6[(W[1] >> (6 * 8)) & 0xff] ^
2255 T7[(W[0] >> (7 * 8)) & 0xff] ^
2256 K[7];
2258 for (i = 0; i < 8; i++)
2259 W[i] = W1[i];
2262 for (i = 0; i < 8; i++)
2263 ctx->H[i] ^= W[i] ^ le64toh(*(uint64_t *)(m + 8 * i));
2266 void *whirlpool_init_context(void)
2268 struct whirlpool_context *ctx;
2270 ctx = malloc(sizeof(struct whirlpool_context));
2271 if (!ctx)
2272 return NULL;
2273 memset(ctx, 0, sizeof(struct whirlpool_context));
2274 return ctx;
2277 void whirlpool_fini_context(void *_ctx)
2279 struct whirlpool_context *ctx = _ctx;
2281 memset(ctx, 0, sizeof(struct whirlpool_context));
2282 free(ctx);
2285 void whirlpool_update(void *_ctx, const uint8_t *m)
2287 struct whirlpool_context *ctx = _ctx;
2289 __whirlpool_update(ctx, m);
2290 ctx->len += 512;
2293 void _whirlpool_update(void *_ctx, const uint8_t *m, unsigned int len)
2295 struct whirlpool_context *ctx = _ctx;
2297 while (len > 0) {
2298 unsigned int inc;
2300 if (64 - ctx->m_len < len)
2301 inc = 64 - ctx->m_len;
2302 else
2303 inc = len;
2304 memcpy(&ctx->m[ctx->m_len], m, inc);
2305 ctx->m_len += inc;
2306 ctx->len += inc * 8;
2307 len -= inc;
2308 m += inc;
2310 if (ctx->m_len == 512 / 8) {
2311 __whirlpool_update(ctx, ctx->m);
2312 ctx->m_len = 0;
2317 void whirlpool_fini(void *_ctx)
2319 struct whirlpool_context *ctx = _ctx;
2321 ctx->m[ctx->m_len] = 0x80;
2322 ctx->m_len++;
2323 if (ctx->m_len <= 64 - 32) {
2324 memset(&ctx->m[ctx->m_len], 0, 64 - 8 - ctx->m_len);
2325 } else {
2326 memset(&ctx->m[ctx->m_len], 0, 64 - ctx->m_len);
2327 __whirlpool_update(ctx, ctx->m);
2328 memset(ctx->m, 0, 64 - 8);
2330 *(uint64_t *)&ctx->m[64 - 8] = htobe64(ctx->len);
2331 __whirlpool_update(ctx, ctx->m);
2334 void whirlpool_digest(void *_ctx, uint8_t *digest)
2336 struct whirlpool_context *ctx = _ctx;
2337 unsigned int i;
2339 for (i = 0; i < 8; i++)
2340 *(uint64_t *)(digest + 8 * i) = htole64(ctx->H[i]);