xref: /freebsd/crypto/libecc/include/libecc/hash/streebog.h (revision f0865ec9906d5a18fa2a3b61381f22ce16e606ad)
1 /*
2  *  Copyright (C) 2021 - This file is part of libecc project
3  *
4  *  Authors:
5  *      Ryad BENADJILA <ryadbenadjila@gmail.com>
6  *      Arnaud EBALARD <arnaud.ebalard@ssi.gouv.fr>
7  *
8  *  This software is licensed under a dual BSD and GPL v2 license.
9  *  See LICENSE file at the root folder of the project.
10  */
11 #ifndef __STREEBOG_H__
12 #define __STREEBOG_H__
13 
14 #include <libecc/words/words.h>
15 
16 #if defined(WITH_HASH_STREEBOG256) || defined(WITH_HASH_STREEBOG512)
17 
18 typedef enum {
19 	STREEBOG_LITTLE = 0,
20 	STREEBOG_BIG = 1,
21 } streebog_endianness;
22 
23 /*
24  * 64-bit integer manipulation macros (big endian and little endian)
25  */
26 #ifndef PUT_UINT64_BE
27 #define PUT_UINT64_BE(n,b,i)            \
28 do {                                    \
29     (b)[(i)    ] = (u8) ( (n) >> 56 );  \
30     (b)[(i) + 1] = (u8) ( (n) >> 48 );  \
31     (b)[(i) + 2] = (u8) ( (n) >> 40 );  \
32     (b)[(i) + 3] = (u8) ( (n) >> 32 );  \
33     (b)[(i) + 4] = (u8) ( (n) >> 24 );  \
34     (b)[(i) + 5] = (u8) ( (n) >> 16 );  \
35     (b)[(i) + 6] = (u8) ( (n) >>  8 );  \
36     (b)[(i) + 7] = (u8) ( (n)       );  \
37 } while( 0 )
38 #endif /* PUT_UINT64_BE */
39 
40 #ifndef PUT_UINT64_LE
41 #define PUT_UINT64_LE(n,b,i)            \
42 do {                                    \
43     (b)[(i) + 7] = (u8) ( (n) >> 56 );  \
44     (b)[(i) + 6] = (u8) ( (n) >> 48 );  \
45     (b)[(i) + 5] = (u8) ( (n) >> 40 );  \
46     (b)[(i) + 4] = (u8) ( (n) >> 32 );  \
47     (b)[(i) + 3] = (u8) ( (n) >> 24 );  \
48     (b)[(i) + 2] = (u8) ( (n) >> 16 );  \
49     (b)[(i) + 1] = (u8) ( (n) >>  8 );  \
50     (b)[(i)    ] = (u8) ( (n)       );  \
51 } while( 0 )
52 #endif /* PUT_UINT64_LE */
53 
54 /* Detect endianness and perform the proper macro */
55 #define STREEBOG_PUT_UINT64(n,b,i,endian)   \
56 do {					\
57     if(endian == STREEBOG_LITTLE){	    \
58 	PUT_UINT64_BE(n,b,i);		\
59     }					\
60     else{				\
61 	PUT_UINT64_LE(n,b,i);		\
62     }					\
63 } while ( 0 )
64 
65 /********************/
66 #define STREEBOG_BLOCK_U64_SIZE (8)
67 #define STREEBOG_BLOCK_SIZE	(8 * STREEBOG_BLOCK_U64_SIZE)
68 
69 /*
70  * Generic context for all STREEBOG (alias STREEBOG or STRIBOG) instances.
71  * Only difference is digest size value, initialized in init() call and used in finalize().
72  * In STREEBOG 34.11-2012 (RFC6986) two digest sizes are defined: 256 and 512 bits.
73  */
74 typedef struct streebog_context_ {
75 	u8 streebog_digest_size;
76 	u8 streebog_block_size;
77 	streebog_endianness streebog_endian;
78 	/* Number of bytes processed */
79 	u64 streebog_total;
80 	/* STREEBOG state */
81 	u64 h[STREEBOG_BLOCK_U64_SIZE];
82 	u64 N[STREEBOG_BLOCK_U64_SIZE];
83 	u64 Sigma[STREEBOG_BLOCK_U64_SIZE];
84 	/* Internal buffer to handle updates in a block */
85 	u8 streebog_buffer[STREEBOG_BLOCK_SIZE];
86 	/* Initialization magic value */
87 	word_t magic;
88 } streebog_context;
89 
90 
91 /* STREEBOG constants*/
92 static const u64 C_STREEBOG[12][STREEBOG_BLOCK_U64_SIZE] =
93 {
94      { /* 0 */
95 	     0xdd806559f2a64507ULL, 0x05767436cc744d23ULL,
96 	     0xa2422a08a460d315ULL, 0x4b7ce09192676901ULL,
97 	     0x714eb88d7585c4fcULL, 0x2f6a76432e45d016ULL,
98 	     0xebcb2f81c0657c1fULL, 0xb1085bda1ecadae9ULL
99      },
100      { /* 1 */
101 	     0xe679047021b19bb7ULL, 0x55dda21bd7cbcd56ULL,
102 	     0x5cb561c2db0aa7caULL, 0x9ab5176b12d69958ULL,
103 	     0x61d55e0f16b50131ULL, 0xf3feea720a232b98ULL,
104 	     0x4fe39d460f70b5d7ULL, 0x6fa3b58aa99d2f1aULL
105     },
106     { /* 2 */
107 	    0x991e96f50aba0ab2ULL, 0xc2b6f443867adb31ULL,
108 	    0xc1c93a376062db09ULL, 0xd3e20fe490359eb1ULL,
109 	    0xf2ea7514b1297b7bULL, 0x06f15e5f529c1f8bULL,
110 	    0x0a39fc286a3d8435ULL, 0xf574dcac2bce2fc7ULL
111     },
112     { /* 3 */
113 	    0x220cbebc84e3d12eULL, 0x3453eaa193e837f1ULL,
114 	    0xd8b71333935203beULL, 0xa9d72c82ed03d675ULL,
115 	    0x9d721cad685e353fULL, 0x488e857e335c3c7dULL,
116 	    0xf948e1a05d71e4ddULL, 0xef1fdfb3e81566d2ULL
117     },
118     { /* 4 */
119 	    0x601758fd7c6cfe57ULL, 0x7a56a27ea9ea63f5ULL,
120 	    0xdfff00b723271a16ULL, 0xbfcd1747253af5a3ULL,
121 	    0x359e35d7800fffbdULL, 0x7f151c1f1686104aULL,
122 	    0x9a3f410c6ca92363ULL, 0x4bea6bacad474799ULL
123     },
124     { /* 5 */
125 	    0xfa68407a46647d6eULL, 0xbf71c57236904f35ULL,
126 	    0x0af21f66c2bec6b6ULL, 0xcffaa6b71c9ab7b4ULL,
127 	    0x187f9ab49af08ec6ULL, 0x2d66c4f95142a46cULL,
128 	    0x6fa4c33b7a3039c0ULL, 0xae4faeae1d3ad3d9ULL
129     },
130     { /* 6 */
131 	    0x8886564d3a14d493ULL, 0x3517454ca23c4af3ULL,
132 	    0x06476983284a0504ULL, 0x0992abc52d822c37ULL,
133 	    0xd3473e33197a93c9ULL, 0x399ec6c7e6bf87c9ULL,
134 	    0x51ac86febf240954ULL, 0xf4c70e16eeaac5ecULL
135     },
136     { /* 7 */
137 	    0xa47f0dd4bf02e71eULL, 0x36acc2355951a8d9ULL,
138 	    0x69d18d2bd1a5c42fULL, 0xf4892bcb929b0690ULL,
139 	    0x89b4443b4ddbc49aULL, 0x4eb7f8719c36de1eULL,
140 	    0x03e7aa020c6e4141ULL, 0x9b1f5b424d93c9a7ULL
141     },
142     { /* 8 */
143 	    0x7261445183235adbULL, 0x0e38dc92cb1f2a60ULL,
144 	    0x7b2b8a9aa6079c54ULL, 0x800a440bdbb2ceb1ULL,
145 	    0x3cd955b7e00d0984ULL, 0x3a7d3a1b25894224ULL,
146 	    0x944c9ad8ec165fdeULL, 0x378f5a541631229bULL
147     },
148     { /* 9 */
149 	    0x74b4c7fb98459cedULL, 0x3698fad1153bb6c3ULL,
150 	    0x7a1e6c303b7652f4ULL, 0x9fe76702af69334bULL,
151 	    0x1fffe18a1b336103ULL, 0x8941e71cff8a78dbULL,
152 	    0x382ae548b2e4f3f3ULL, 0xabbedea680056f52ULL
153     },
154     { /* 10 */
155 	    0x6bcaa4cd81f32d1bULL, 0xdea2594ac06fd85dULL,
156 	    0xefbacd1d7d476e98ULL, 0x8a1d71efea48b9caULL,
157 	    0x2001802114846679ULL, 0xd8fa6bbbebab0761ULL,
158 	    0x3002c6cd635afe94ULL, 0x7bcd9ed0efc889fbULL
159     },
160     { /* 11 */
161 	    0x48bc924af11bd720ULL, 0xfaf417d5d9b21b99ULL,
162 	    0xe71da4aa88e12852ULL, 0x5d80ef9d1891cc86ULL,
163 	    0xf82012d430219f9bULL, 0xcda43c32bcdf1d77ULL,
164 	    0xd21380b00449b17aULL, 0x378ee767f11631baULL
165     }
166 };
167 
168 
169 
170 static const u64 PI[STREEBOG_BLOCK_U64_SIZE][256] = {
171 	{ /* 0 */
172 		0xd01f715b5c7ef8e6ULL, 0x16fa240980778325ULL,
173 		0xa8a42e857ee049c8ULL, 0x6ac1068fa186465bULL,
174 		0x6e417bd7a2e9320bULL, 0x665c8167a437daabULL,
175 		0x7666681aa89617f6ULL, 0x4b959163700bdcf5ULL,
176 		0xf14be6b78df36248ULL, 0xc585bd689a625cffULL,
177 		0x9557d7fca67d82cbULL, 0x89f0b969af6dd366ULL,
178 		0xb0833d48749f6c35ULL, 0xa1998c23b1ecbc7cULL,
179 		0x8d70c431ac02a736ULL, 0xd6dfbc2fd0a8b69eULL,
180 		0x37aeb3e551fa198bULL, 0x0b7d128a40b5cf9cULL,
181 		0x5a8f2008b5780cbcULL, 0xedec882284e333e5ULL,
182 		0xd25fc177d3c7c2ceULL, 0x5e0f5d50b61778ecULL,
183 		0x1d873683c0c24cb9ULL, 0xad040bcbb45d208cULL,
184 		0x2f89a0285b853c76ULL, 0x5732fff6791b8d58ULL,
185 		0x3e9311439ef6ec3fULL, 0xc9183a809fd3c00fULL,
186 		0x83adf3f5260a01eeULL, 0xa6791941f4e8ef10ULL,
187 		0x103ae97d0ca1cd5dULL, 0x2ce948121dee1b4aULL,
188 		0x39738421dbf2bf53ULL, 0x093da2a6cf0cf5b4ULL,
189 		0xcd9847d89cbcb45fULL, 0xf9561c078b2d8ae8ULL,
190 		0x9c6a755a6971777fULL, 0xbc1ebaa0712ef0c5ULL,
191 		0x72e61542abf963a6ULL, 0x78bb5fde229eb12eULL,
192 		0x14ba94250fceb90dULL, 0x844d6697630e5282ULL,
193 		0x98ea08026a1e032fULL, 0xf06bbea144217f5cULL,
194 		0xdb6263d11ccb377aULL, 0x641c314b2b8ee083ULL,
195 		0x320e96ab9b4770cfULL, 0x1ee7deb986a96b85ULL,
196 		0xe96cf57a878c47b5ULL, 0xfdd6615f8842feb8ULL,
197 		0xc83862965601dd1bULL, 0x2ea9f83e92572162ULL,
198 		0xf876441142ff97fcULL, 0xeb2c455608357d9dULL,
199 		0x5612a7e0b0c9904cULL, 0x6c01cbfb2d500823ULL,
200 		0x4548a6a7fa037a2dULL, 0xabc4c6bf388b6ef4ULL,
201 		0xbade77d4fdf8bebdULL, 0x799b07c8eb4cac3aULL,
202 		0x0c9d87e805b19cf0ULL, 0xcb588aac106afa27ULL,
203 		0xea0c1d40c1e76089ULL, 0x2869354a1e816f1aULL,
204 		0xff96d17307fbc490ULL, 0x9f0a9d602f1a5043ULL,
205 		0x96373fc6e016a5f7ULL, 0x5292dab8b3a6e41cULL,
206 		0x9b8ae0382c752413ULL, 0x4f15ec3b7364a8a5ULL,
207 		0x3fb349555724f12bULL, 0xc7c50d4415db66d7ULL,
208 		0x92b7429ee379d1a7ULL, 0xd37f99611a15dfdaULL,
209 		0x231427c05e34a086ULL, 0xa439a96d7b51d538ULL,
210 		0xb403401077f01865ULL, 0xdda2aea5901d7902ULL,
211 		0x0a5d4a9c8967d288ULL, 0xc265280adf660f93ULL,
212 		0x8bb0094520d4e94eULL, 0x2a29856691385532ULL,
213 		0x42a833c5bf072941ULL, 0x73c64d54622b7eb2ULL,
214 		0x07e095624504536cULL, 0x8a905153e906f45aULL,
215 		0x6f6123c16b3b2f1fULL, 0xc6e55552dc097bc3ULL,
216 		0x4468feb133d16739ULL, 0xe211e7f0c7398829ULL,
217 		0xa2f96419f7879b40ULL, 0x19074bdbc3ad38e9ULL,
218 		0xf4ebc3f9474e0b0cULL, 0x43886bd376d53455ULL,
219 		0xd8028beb5aa01046ULL, 0x51f23282f5cdc320ULL,
220 		0xe7b1c2be0d84e16dULL, 0x081dfab006dee8a0ULL,
221 		0x3b33340d544b857bULL, 0x7f5bcabc679ae242ULL,
222 		0x0edd37c48a08a6d8ULL, 0x81ed43d9a9b33bc6ULL,
223 		0xb1a3655ebd4d7121ULL, 0x69a1eeb5e7ed6167ULL,
224 		0xf6ab73d5c8f73124ULL, 0x1a67a3e185c61fd5ULL,
225 		0x2dc91004d43c065eULL, 0x0240b02c8fb93a28ULL,
226 		0x90f7f2b26cc0eb8fULL, 0x3cd3a16f114fd617ULL,
227 		0xaae49ea9f15973e0ULL, 0x06c0cd748cd64e78ULL,
228 		0xda423bc7d5192a6eULL, 0xc345701c16b41287ULL,
229 		0x6d2193ede4821537ULL, 0xfcf639494190e3acULL,
230 		0x7c3b228621f1c57eULL, 0xfb16ac2b0494b0c0ULL,
231 		0xbf7e529a3745d7f9ULL, 0x6881b6a32e3f7c73ULL,
232 		0xca78d2bad9b8e733ULL, 0xbbfe2fc2342aa3a9ULL,
233 		0x0dbddffecc6381e4ULL, 0x70a6a56e2440598eULL,
234 		0xe4d12a844befc651ULL, 0x8c509c2765d0ba22ULL,
235 		0xee8c6018c28814d9ULL, 0x17da7c1f49a59e31ULL,
236 		0x609c4c1328e194d3ULL, 0xb3e3d57232f44b09ULL,
237 		0x91d7aaa4a512f69bULL, 0x0ffd6fd243dabbccULL,
238 		0x50d26a943c1fde34ULL, 0x6be15e9968545b4fULL,
239 		0x94778fea6faf9fdfULL, 0x2b09dd7058ea4826ULL,
240 		0x677cd9716de5c7bfULL, 0x49d5214fffb2e6ddULL,
241 		0x0360e83a466b273cULL, 0x1fc786af4f7b7691ULL,
242 		0xa0b9d435783ea168ULL, 0xd49f0c035f118cb6ULL,
243 		0x01205816c9d21d14ULL, 0xac2453dd7d8f3d98ULL,
244 		0x545217cc3f70aa64ULL, 0x26b4028e9489c9c2ULL,
245 		0xdec2469fd6765e3eULL, 0x04807d58036f7450ULL,
246 		0xe5f17292823ddb45ULL, 0xf30b569b024a5860ULL,
247 		0x62dcfc3fa758aefbULL, 0xe84cad6c4e5e5aa1ULL,
248 		0xccb81fce556ea94bULL, 0x53b282ae7a74f908ULL,
249 		0x1b47fbf74c1402c1ULL, 0x368eebf39828049fULL,
250 		0x7afbeff2ad278b06ULL, 0xbe5e0a8cfe97caedULL,
251 		0xcfd8f7f413058e77ULL, 0xf78b2bc301252c30ULL,
252 		0x4d555c17fcdd928dULL, 0x5f2f05467fc565f8ULL,
253 		0x24f4b2a21b30f3eaULL, 0x860dd6bbecb768aaULL,
254 		0x4c750401350f8f99ULL, 0x0000000000000000ULL,
255 		0xecccd0344d312ef1ULL, 0xb5231806be220571ULL,
256 		0xc105c030990d28afULL, 0x653c695de25cfd97ULL,
257 		0x159acc33c61ca419ULL, 0xb89ec7f872418495ULL,
258 		0xa9847693b73254dcULL, 0x58cf90243ac13694ULL,
259 		0x59efc832f3132b80ULL, 0x5c4fed7c39ae42c4ULL,
260 		0x828dabe3efd81cfaULL, 0xd13f294d95ace5f2ULL,
261 		0x7d1b7a90e823d86aULL, 0xb643f03cf849224dULL,
262 		0x3df3f979d89dcb03ULL, 0x7426d836272f2ddeULL,
263 		0xdfe21e891fa4432aULL, 0x3a136c1b9d99986fULL,
264 		0xfa36f43dcd46add4ULL, 0xc025982650df35bbULL,
265 		0x856d3e81aadc4f96ULL, 0xc4a5e57e53b041ebULL,
266 		0x4708168b75ba4005ULL, 0xaf44bbe73be41aa4ULL,
267 		0x971767d029c4b8e3ULL, 0xb9be9feebb939981ULL,
268 		0x215497ecd18d9aaeULL, 0x316e7e91dd2c57f3ULL,
269 		0xcef8afe2dad79363ULL, 0x3853dc371220a247ULL,
270 		0x35ee03c9de4323a3ULL, 0xe6919aa8c456fc79ULL,
271 		0xe05157dc4880b201ULL, 0x7bdbb7e464f59612ULL,
272 		0x127a59518318f775ULL, 0x332ecebd52956ddbULL,
273 		0x8f30741d23bb9d1eULL, 0xd922d3fd93720d52ULL,
274 		0x7746300c61440ae2ULL, 0x25d4eab4d2e2eefeULL,
275 		0x75068020eefd30caULL, 0x135a01474acaea61ULL,
276 		0x304e268714fe4ae7ULL, 0xa519f17bb283c82cULL,
277 		0xdc82f6b359cf6416ULL, 0x5baf781e7caa11a8ULL,
278 		0xb2c38d64fb26561dULL, 0x34ce5bdf17913eb7ULL,
279 		0x5d6fb56af07c5fd0ULL, 0x182713cd0a7f25fdULL,
280 		0x9e2ac576e6c84d57ULL, 0x9aaab82ee5a73907ULL,
281 		0xa3d93c0f3e558654ULL, 0x7e7b92aaae48ff56ULL,
282 		0x872d8ead256575beULL, 0x41c8dbfff96c0e7dULL,
283 		0x99ca5014a3cc1e3bULL, 0x40e883e930be1369ULL,
284 		0x1ca76e95091051adULL, 0x4e35b42dbab6b5b1ULL,
285 		0x05a0254ecabd6944ULL, 0xe1710fca8152af15ULL,
286 		0xf22b0e8dcb984574ULL, 0xb763a82a319b3f59ULL,
287 		0x63fca4296e8ab3efULL, 0x9d4a2d4ca0a36a6bULL,
288 		0xe331bfe60eeb953dULL, 0xd5bf541596c391a2ULL,
289 		0xf5cb9bef8e9c1618ULL, 0x46284e9dbc685d11ULL,
290 		0x2074cffa185f87baULL, 0xbd3ee2b6b8fcedd1ULL,
291 		0xae64e3f1f23607b0ULL, 0xfeb68965ce29d984ULL,
292 		0x55724fdaf6a2b770ULL, 0x29496d5cd753720eULL,
293 		0xa75941573d3af204ULL, 0x8e102c0bea69800aULL,
294 		0x111ab16bc573d049ULL, 0xd7ffe439197aab8aULL,
295 		0xefac380e0b5a09cdULL, 0x48f579593660fbc9ULL,
296 		0x22347fd697e6bd92ULL, 0x61bc1405e13389c7ULL,
297 		0x4ab5c975b9d9c1e1ULL, 0x80cd1bcf606126d2ULL,
298 		0x7186fd78ed92449aULL, 0x93971a882aabccb3ULL,
299 		0x88d0e17f66bfce72ULL, 0x27945a985d5bd4d6ULL
300 	}, { /* 1 */
301 		0xde553f8c05a811c8ULL, 0x1906b59631b4f565ULL,
302 		0x436e70d6b1964ff7ULL, 0x36d343cb8b1e9d85ULL,
303 		0x843dfacc858aab5aULL, 0xfdfc95c299bfc7f9ULL,
304 		0x0f634bdea1d51fa2ULL, 0x6d458b3b76efb3cdULL,
305 		0x85c3f77cf8593f80ULL, 0x3c91315fbe737cb2ULL,
306 		0x2148b03366ace398ULL, 0x18f8b8264c6761bfULL,
307 		0xc830c1c495c9fb0fULL, 0x981a76102086a0aaULL,
308 		0xaa16012142f35760ULL, 0x35cc54060c763cf6ULL,
309 		0x42907d66cc45db2dULL, 0x8203d44b965af4bcULL,
310 		0x3d6f3cefc3a0e868ULL, 0xbc73ff69d292bda7ULL,
311 		0x8722ed0102e20a29ULL, 0x8f8185e8cd34deb7ULL,
312 		0x9b0561dda7ee01d9ULL, 0x5335a0193227fad6ULL,
313 		0xc9cecc74e81a6fd5ULL, 0x54f5832e5c2431eaULL,
314 		0x99e47ba05d553470ULL, 0xf7bee756acd226ceULL,
315 		0x384e05a5571816fdULL, 0xd1367452a47d0e6aULL,
316 		0xf29fde1c386ad85bULL, 0x320c77316275f7caULL,
317 		0xd0c879e2d9ae9ab0ULL, 0xdb7406c69110ef5dULL,
318 		0x45505e51a2461011ULL, 0xfc029872e46c5323ULL,
319 		0xfa3cb6f5f7bc0cc5ULL, 0x031f17cd8768a173ULL,
320 		0xbd8df2d9af41297dULL, 0x9d3b4f5ab43e5e3fULL,
321 		0x4071671b36feee84ULL, 0x716207e7d3e3b83dULL,
322 		0x48d20ff2f9283a1aULL, 0x27769eb4757cbc7eULL,
323 		0x5c56ebc793f2e574ULL, 0xa48b474f9ef5dc18ULL,
324 		0x52cbada94ff46e0cULL, 0x60c7da982d8199c6ULL,
325 		0x0e9d466edc068b78ULL, 0x4eec2175eaf865fcULL,
326 		0x550b8e9e21f7a530ULL, 0x6b7ba5bc653fec2bULL,
327 		0x5eb7f1ba6949d0ddULL, 0x57ea94e3db4c9099ULL,
328 		0xf640eae6d101b214ULL, 0xdd4a284182c0b0bbULL,
329 		0xff1d8fbf6304f250ULL, 0xb8accb933bf9d7e8ULL,
330 		0xe8867c478eb68c4dULL, 0x3f8e2692391bddc1ULL,
331 		0xcb2fd60912a15a7cULL, 0xaec935dbab983d2fULL,
332 		0xf55ffd2b56691367ULL, 0x80e2ce366ce1c115ULL,
333 		0x179bf3f8edb27e1dULL, 0x01fe0db07dd394daULL,
334 		0xda8a0b76ecc37b87ULL, 0x44ae53e1df9584cbULL,
335 		0xb310b4b77347a205ULL, 0xdfab323c787b8512ULL,
336 		0x3b511268d070b78eULL, 0x65e6e3d2b9396753ULL,
337 		0x6864b271e2574d58ULL, 0x259784c98fc789d7ULL,
338 		0x02e11a7dfabb35a9ULL, 0x8841a6dfa337158bULL,
339 		0x7ade78c39b5dcdd0ULL, 0xb7cf804d9a2cc84aULL,
340 		0x20b6bd831b7f7742ULL, 0x75bd331d3a88d272ULL,
341 		0x418f6aab4b2d7a5eULL, 0xd9951cbb6babdaf4ULL,
342 		0xb6318dfde7ff5c90ULL, 0x1f389b112264aa83ULL,
343 		0x492c024284fbaec0ULL, 0xe33a0363c608f9a0ULL,
344 		0x2688930408af28a4ULL, 0xc7538a1a341ce4adULL,
345 		0x5da8e677ee2171aeULL, 0x8c9e92254a5c7fc4ULL,
346 		0x63d8cd55aae938b5ULL, 0x29ebd8daa97a3706ULL,
347 		0x959827b37be88aa1ULL, 0x1484e4356adadf6eULL,
348 		0xa7945082199d7d6bULL, 0xbf6ce8a455fa1cd4ULL,
349 		0x9cc542eac9edcae5ULL, 0x79c16f0e1c356ca3ULL,
350 		0x89bfab6fdee48151ULL, 0xd4174d1830c5f0ffULL,
351 		0x9258048415eb419dULL, 0x6139d72850520d1cULL,
352 		0x6a85a80c18ec78f1ULL, 0xcd11f88e0171059aULL,
353 		0xcceff53e7ca29140ULL, 0xd229639f2315af19ULL,
354 		0x90b91ef9ef507434ULL, 0x5977d28d074a1be1ULL,
355 		0x311360fce51d56b9ULL, 0xc093a92d5a1f2f91ULL,
356 		0x1a19a25bb6dc5416ULL, 0xeb996b8a09de2d3eULL,
357 		0xfee3820f1ed7668aULL, 0xd7085ad5b7ad518cULL,
358 		0x7fff41890fe53345ULL, 0xec5948bd67dde602ULL,
359 		0x2fd5f65dbaaa68e0ULL, 0xa5754affe32648c2ULL,
360 		0xf8ddac880d07396cULL, 0x6fa491468c548664ULL,
361 		0x0c7c5c1326bdbed1ULL, 0x4a33158f03930fb3ULL,
362 		0x699abfc19f84d982ULL, 0xe4fa2054a80b329cULL,
363 		0x6707f9af438252faULL, 0x08a368e9cfd6d49eULL,
364 		0x47b1442c58fd25b8ULL, 0xbbb3dc5ebc91769bULL,
365 		0x1665fe489061eac7ULL, 0x33f27a811fa66310ULL,
366 		0x93a609346838d547ULL, 0x30ed6d4c98cec263ULL,
367 		0x1dd9816cd8df9f2aULL, 0x94662a03063b1e7bULL,
368 		0x83fdd9fbeb896066ULL, 0x7b207573e68e590aULL,
369 		0x5f49fc0a149a4407ULL, 0x343259b671a5a82cULL,
370 		0xfbc2bb458a6f981fULL, 0xc272b350a0a41a38ULL,
371 		0x3aaf1fd8ada32354ULL, 0x6cbb868b0b3c2717ULL,
372 		0xa2b569c88d2583feULL, 0xf180c9d1bf027928ULL,
373 		0xaf37386bd64ba9f5ULL, 0x12bacab2790a8088ULL,
374 		0x4c0d3b0810435055ULL, 0xb2eeb9070e9436dfULL,
375 		0xc5b29067cea7d104ULL, 0xdcb425f1ff132461ULL,
376 		0x4f122cc5972bf126ULL, 0xac282fa651230886ULL,
377 		0xe7e537992f6393efULL, 0xe61b3a2952b00735ULL,
378 		0x709c0a57ae302ce7ULL, 0xe02514ae416058d3ULL,
379 		0xc44c9dd7b37445deULL, 0x5a68c5408022ba92ULL,
380 		0x1c278cdca50c0bf0ULL, 0x6e5a9cf6f18712beULL,
381 		0x86dce0b17f319ef3ULL, 0x2d34ec2040115d49ULL,
382 		0x4bcd183f7e409b69ULL, 0x2815d56ad4a9a3dcULL,
383 		0x24698979f2141d0dULL, 0x0000000000000000ULL,
384 		0x1ec696a15fb73e59ULL, 0xd86b110b16784e2eULL,
385 		0x8e7f8858b0e74a6dULL, 0x063e2e8713d05fe6ULL,
386 		0xe2c40ed3bbdb6d7aULL, 0xb1f1aeca89fc97acULL,
387 		0xe1db191e3cb3cc09ULL, 0x6418ee62c4eaf389ULL,
388 		0xc6ad87aa49cf7077ULL, 0xd6f65765ca7ec556ULL,
389 		0x9afb6c6dda3d9503ULL, 0x7ce05644888d9236ULL,
390 		0x8d609f95378feb1eULL, 0x23a9aa4e9c17d631ULL,
391 		0x6226c0e5d73aac6fULL, 0x56149953a69f0443ULL,
392 		0xeeb852c09d66d3abULL, 0x2b0ac2a753c102afULL,
393 		0x07c023376e03cb3cULL, 0x2ccae1903dc2c993ULL,
394 		0xd3d76e2f5ec63bc3ULL, 0x9e2458973356ff4cULL,
395 		0xa66a5d32644ee9b1ULL, 0x0a427294356de137ULL,
396 		0x783f62be61e6f879ULL, 0x1344c70204d91452ULL,
397 		0x5b96c8f0fdf12e48ULL, 0xa90916ecc59bf613ULL,
398 		0xbe92e5142829880eULL, 0x727d102a548b194eULL,
399 		0x1be7afebcb0fc0ccULL, 0x3e702b2244c8491bULL,
400 		0xd5e940a84d166425ULL, 0x66f9f41f3e51c620ULL,
401 		0xabe80c913f20c3baULL, 0xf07ec461c2d1edf2ULL,
402 		0xf361d3ac45b94c81ULL, 0x0521394a94b8fe95ULL,
403 		0xadd622162cf09c5cULL, 0xe97871f7f3651897ULL,
404 		0xf4a1f09b2bba87bdULL, 0x095d6559b2054044ULL,
405 		0x0bbc7f2448be75edULL, 0x2af4cf172e129675ULL,
406 		0x157ae98517094bb4ULL, 0x9fda55274e856b96ULL,
407 		0x914713499283e0eeULL, 0xb952c623462a4332ULL,
408 		0x74433ead475b46a8ULL, 0x8b5eb112245fb4f8ULL,
409 		0xa34b6478f0f61724ULL, 0x11a5dd7ffe6221fbULL,
410 		0xc16da49d27ccbb4bULL, 0x76a224d0bde07301ULL,
411 		0x8aa0bca2598c2022ULL, 0x4df336b86d90c48fULL,
412 		0xea67663a740db9e4ULL, 0xef465f70e0b54771ULL,
413 		0x39b008152acb8227ULL, 0x7d1e5bf4f55e06ecULL,
414 		0x105bd0cf83b1b521ULL, 0x775c2960c033e7dbULL,
415 		0x7e014c397236a79fULL, 0x811cc386113255cfULL,
416 		0xeda7450d1a0e72d8ULL, 0x5889df3d7a998f3bULL,
417 		0x2e2bfbedc779fc3aULL, 0xce0eef438619a4e9ULL,
418 		0x372d4e7bf6cd095fULL, 0x04df34fae96b6a4fULL,
419 		0xf923a13870d4adb6ULL, 0xa1aa7e050a4d228dULL,
420 		0xa8f71b5cb84862c9ULL, 0xb52e9a306097fde3ULL,
421 		0x0d8251a35b6e2a0bULL, 0x2257a7fee1c442ebULL,
422 		0x73831d9a29588d94ULL, 0x51d4ba64c89ccf7fULL,
423 		0x502ab7d4b54f5ba5ULL, 0x97793dce8153bf08ULL,
424 		0xe5042de4d5d8a646ULL, 0x9687307efc802bd2ULL,
425 		0xa05473b5779eb657ULL, 0xb4d097801d446939ULL,
426 		0xcff0e2f3fbca3033ULL, 0xc38cbee0dd778ee2ULL,
427 		0x464f499c252eb162ULL, 0xcad1dbb96f72cea6ULL,
428 		0xba4dd1eec142e241ULL, 0xb00fa37af42f0376ULL
429 	}, { /* 2 */
430 		0xcce4cd3aa968b245ULL, 0x089d5484e80b7fafULL,
431 		0x638246c1b3548304ULL, 0xd2fe0ec8c2355492ULL,
432 		0xa7fbdf7ff2374eeeULL, 0x4df1600c92337a16ULL,
433 		0x84e503ea523b12fbULL, 0x0790bbfd53ab0c4aULL,
434 		0x198a780f38f6ea9dULL, 0x2ab30c8f55ec48cbULL,
435 		0xe0f7fed6b2c49db5ULL, 0xb6ecf3f422cadbdcULL,
436 		0x409c9a541358df11ULL, 0xd3ce8a56dfde3fe3ULL,
437 		0xc3e9224312c8c1a0ULL, 0x0d6dfa58816ba507ULL,
438 		0xddf3e1b179952777ULL, 0x04c02a42748bb1d9ULL,
439 		0x94c2abff9f2decb8ULL, 0x4f91752da8f8acf4ULL,
440 		0x78682befb169bf7bULL, 0xe1c77a48af2ff6c4ULL,
441 		0x0c5d7ec69c80ce76ULL, 0x4cc1e4928fd81167ULL,
442 		0xfeed3d24d9997b62ULL, 0x518bb6dfc3a54a23ULL,
443 		0x6dbf2d26151f9b90ULL, 0xb5bc624b05ea664fULL,
444 		0xe86aaa525acfe21aULL, 0x4801ced0fb53a0beULL,
445 		0xc91463e6c00868edULL, 0x1027a815cd16fe43ULL,
446 		0xf67069a0319204cdULL, 0xb04ccc976c8abce7ULL,
447 		0xc0b9b3fc35e87c33ULL, 0xf380c77c58f2de65ULL,
448 		0x50bb3241de4e2152ULL, 0xdf93f490435ef195ULL,
449 		0xf1e0d25d62390887ULL, 0xaf668bfb1a3c3141ULL,
450 		0xbc11b251f00a7291ULL, 0x73a5eed47e427d47ULL,
451 		0x25bee3f6ee4c3b2eULL, 0x43cc0beb34786282ULL,
452 		0xc824e778dde3039cULL, 0xf97d86d98a327728ULL,
453 		0xf2b043e24519b514ULL, 0xe297ebf7880f4b57ULL,
454 		0x3a94a49a98fab688ULL, 0x868516cb68f0c419ULL,
455 		0xeffa11af0964ee50ULL, 0xa4ab4ec0d517f37dULL,
456 		0xa9c6b498547c567aULL, 0x8e18424f80fbbbb6ULL,
457 		0x0bcdc53bcf2bc23cULL, 0x137739aaea3643d0ULL,
458 		0x2c1333ec1bac2ff0ULL, 0x8d48d3f0a7db0625ULL,
459 		0x1e1ac3f26b5de6d7ULL, 0xf520f81f16b2b95eULL,
460 		0x9f0f6ec450062e84ULL, 0x0130849e1deb6b71ULL,
461 		0xd45e31ab8c7533a9ULL, 0x652279a2fd14e43fULL,
462 		0x3209f01e70f1c927ULL, 0xbe71a770cac1a473ULL,
463 		0x0e3d6be7a64b1894ULL, 0x7ec8148cff29d840ULL,
464 		0xcb7476c7fac3be0fULL, 0x72956a4a63a91636ULL,
465 		0x37f95ec21991138fULL, 0x9e3fea5a4ded45f5ULL,
466 		0x7b38ba50964902e8ULL, 0x222e580bbde73764ULL,
467 		0x61e253e0899f55e6ULL, 0xfc8d2805e352ad80ULL,
468 		0x35994be3235ac56dULL, 0x09add01af5e014deULL,
469 		0x5e8659a6780539c6ULL, 0xb17c48097161d796ULL,
470 		0x026015213acbd6e2ULL, 0xd1ae9f77e515e901ULL,
471 		0xb7dc776a3f21b0adULL, 0xaba6a1b96eb78098ULL,
472 		0x9bcf4486248d9f5dULL, 0x582666c536455efdULL,
473 		0xfdbdac9bfeb9c6f1ULL, 0xc47999be4163cdeaULL,
474 		0x765540081722a7efULL, 0x3e548ed8ec710751ULL,
475 		0x3d041f67cb51bac2ULL, 0x7958af71ac82d40aULL,
476 		0x36c9da5c047a78feULL, 0xed9a048e33af38b2ULL,
477 		0x26ee7249c96c86bdULL, 0x900281bdeba65d61ULL,
478 		0x11172c8bd0fd9532ULL, 0xea0abf73600434f8ULL,
479 		0x42fc8f75299309f3ULL, 0x34a9cf7d3eb1ae1cULL,
480 		0x2b838811480723baULL, 0x5ce64c8742ceef24ULL,
481 		0x1adae9b01fd6570eULL, 0x3c349bf9d6bad1b3ULL,
482 		0x82453c891c7b75c0ULL, 0x97923a40b80d512bULL,
483 		0x4a61dbf1c198765cULL, 0xb48ce6d518010d3eULL,
484 		0xcfb45c858e480fd6ULL, 0xd933cbf30d1e96aeULL,
485 		0xd70ea014ab558e3aULL, 0xc189376228031742ULL,
486 		0x9262949cd16d8b83ULL, 0xeb3a3bed7def5f89ULL,
487 		0x49314a4ee6b8cbcfULL, 0xdcc3652f647e4c06ULL,
488 		0xda635a4c2a3e2b3dULL, 0x470c21a940f3d35bULL,
489 		0x315961a157d174b4ULL, 0x6672e81dda3459acULL,
490 		0x5b76f77a1165e36eULL, 0x445cb01667d36ec8ULL,
491 		0xc5491d205c88a69bULL, 0x456c34887a3805b9ULL,
492 		0xffddb9bac4721013ULL, 0x99af51a71e4649bfULL,
493 		0xa15be01cbc7729d5ULL, 0x52db2760e485f7b0ULL,
494 		0x8c78576eba306d54ULL, 0xae560f6507d75a30ULL,
495 		0x95f22f6182c687c9ULL, 0x71c5fbf54489aba5ULL,
496 		0xca44f259e728d57eULL, 0x88b87d2ccebbdc8dULL,
497 		0xbab18d32be4a15aaULL, 0x8be8ec93e99b611eULL,
498 		0x17b713e89ebdf209ULL, 0xb31c5d284baa0174ULL,
499 		0xeeca9531148f8521ULL, 0xb8d198138481c348ULL,
500 		0x8988f9b2d350b7fcULL, 0xb9e11c8d996aa839ULL,
501 		0x5a4673e40c8e881fULL, 0x1687977683569978ULL,
502 		0xbf4123eed72acf02ULL, 0x4ea1f1b3b513c785ULL,
503 		0xe767452be16f91ffULL, 0x7505d1b730021a7cULL,
504 		0xa59bca5ec8fc980cULL, 0xad069eda20f7e7a3ULL,
505 		0x38f4b1bba231606aULL, 0x60d2d77e94743e97ULL,
506 		0x9affc0183966f42cULL, 0x248e6768f3a7505fULL,
507 		0xcdd449a4b483d934ULL, 0x87b59255751baf68ULL,
508 		0x1bea6d2e023d3c7fULL, 0x6b1f12455b5ffcabULL,
509 		0x743555292de9710dULL, 0xd8034f6d10f5fddfULL,
510 		0xc6198c9f7ba81b08ULL, 0xbb8109aca3a17edbULL,
511 		0xfa2d1766ad12cabbULL, 0xc729080166437079ULL,
512 		0x9c5fff7b77269317ULL, 0x0000000000000000ULL,
513 		0x15d706c9a47624ebULL, 0x6fdf38072fd44d72ULL,
514 		0x5fb6dd3865ee52b7ULL, 0xa33bf53d86bcff37ULL,
515 		0xe657c1b5fc84fa8eULL, 0xaa962527735cebe9ULL,
516 		0x39c43525bfda0b1bULL, 0x204e4d2a872ce186ULL,
517 		0x7a083ece8ba26999ULL, 0x554b9c9db72efbfaULL,
518 		0xb22cd9b656416a05ULL, 0x96a2bedea5e63a5aULL,
519 		0x802529a826b0a322ULL, 0x8115ad363b5bc853ULL,
520 		0x8375b81701901eb1ULL, 0x3069e53f4a3a1fc5ULL,
521 		0xbd2136cfede119e0ULL, 0x18bafc91251d81ecULL,
522 		0x1d4a524d4c7d5b44ULL, 0x05f0aedc6960daa8ULL,
523 		0x29e39d3072ccf558ULL, 0x70f57f6b5962c0d4ULL,
524 		0x989fd53903ad22ceULL, 0xf84d024797d91c59ULL,
525 		0x547b1803aac5908bULL, 0xf0d056c37fd263f6ULL,
526 		0xd56eb535919e58d8ULL, 0x1c7ad6d351963035ULL,
527 		0x2e7326cd2167f912ULL, 0xac361a443d1c8cd2ULL,
528 		0x697f076461942a49ULL, 0x4b515f6fdc731d2dULL,
529 		0x8ad8680df4700a6fULL, 0x41ac1eca0eb3b460ULL,
530 		0x7d988533d80965d3ULL, 0xa8f6300649973d0bULL,
531 		0x7765c4960ac9cc9eULL, 0x7ca801adc5e20ea2ULL,
532 		0xdea3700e5eb59ae4ULL, 0xa06b6482a19c42a4ULL,
533 		0x6a2f96db46b497daULL, 0x27def6d7d487edccULL,
534 		0x463ca5375d18b82aULL, 0xa6cb5be1efdc259fULL,
535 		0x53eba3fef96e9cc1ULL, 0xce84d81b93a364a7ULL,
536 		0xf4107c810b59d22fULL, 0x333974806d1aa256ULL,
537 		0x0f0def79bba073e5ULL, 0x231edc95a00c5c15ULL,
538 		0xe437d494c64f2c6cULL, 0x91320523f64d3610ULL,
539 		0x67426c83c7df32ddULL, 0x6eefbc99323f2603ULL,
540 		0x9d6f7be56acdf866ULL, 0x5916e25b2bae358cULL,
541 		0x7ff89012e2c2b331ULL, 0x035091bf2720bd93ULL,
542 		0x561b0d22900e4669ULL, 0x28d319ae6f279e29ULL,
543 		0x2f43a2533c8c9263ULL, 0xd09e1be9f8fe8270ULL,
544 		0xf740ed3e2c796fbcULL, 0xdb53ded237d5404cULL,
545 		0x62b2c25faebfe875ULL, 0x0afd41a5d2c0a94dULL,
546 		0x6412fd3ce0ff8f4eULL, 0xe3a76f6995e42026ULL,
547 		0x6c8fa9b808f4f0e1ULL, 0xc2d9a6dd0f23aad1ULL,
548 		0x8f28c6d19d10d0c7ULL, 0x85d587744fd0798aULL,
549 		0xa20b71a39b579446ULL, 0x684f83fa7c7f4138ULL,
550 		0xe507500adba4471dULL, 0x3f640a46f19a6c20ULL,
551 		0x1247bd34f7dd28a1ULL, 0x2d23b77206474481ULL,
552 		0x93521002cc86e0f2ULL, 0x572b89bc8de52d18ULL,
553 		0xfb1d93f8b0f9a1caULL, 0xe95a2ecc4724896bULL,
554 		0x3ba420048511ddf9ULL, 0xd63e248ab6bee54bULL,
555 		0x5dd6c8195f258455ULL, 0x06a03f634e40673bULL,
556 		0x1f2a476c76b68da6ULL, 0x217ec9b49ac78af7ULL,
557 		0xecaa80102e4453c3ULL, 0x14e78257b99d4f9aULL
558 	}, { /* 3 */
559 		0x20329b2cc87bba05ULL, 0x4f5eb6f86546a531ULL,
560 		0xd4f44775f751b6b1ULL, 0x8266a47b850dfa8bULL,
561 		0xbb986aa15a6ca985ULL, 0xc979eb08f9ae0f99ULL,
562 		0x2da6f447a2375ea1ULL, 0x1e74275dcd7d8576ULL,
563 		0xbc20180a800bc5f8ULL, 0xb4a2f701b2dc65beULL,
564 		0xe726946f981b6d66ULL, 0x48e6c453bf21c94cULL,
565 		0x42cad9930f0a4195ULL, 0xefa47b64aacccd20ULL,
566 		0x71180a8960409a42ULL, 0x8bb3329bf6a44e0cULL,
567 		0xd34c35de2d36daccULL, 0xa92f5b7cbc23dc96ULL,
568 		0xb31a85aa68bb09c3ULL, 0x13e04836a73161d2ULL,
569 		0xb24dfc4129c51d02ULL, 0x8ae44b70b7da5acdULL,
570 		0xe671ed84d96579a7ULL, 0xa4bb3417d66f3832ULL,
571 		0x4572ab38d56d2de8ULL, 0xb1b47761ea47215cULL,
572 		0xe81c09cf70aba15dULL, 0xffbdb872ce7f90acULL,
573 		0xa8782297fd5dc857ULL, 0x0d946f6b6a4ce4a4ULL,
574 		0xe4df1f4f5b995138ULL, 0x9ebc71edca8c5762ULL,
575 		0x0a2c1dc0b02b88d9ULL, 0x3b503c115d9d7b91ULL,
576 		0xc64376a8111ec3a2ULL, 0xcec199a323c963e4ULL,
577 		0xdc76a87ec58616f7ULL, 0x09d596e073a9b487ULL,
578 		0x14583a9d7d560dafULL, 0xf4c6dc593f2a0cb4ULL,
579 		0xdd21d19584f80236ULL, 0x4a4836983ddde1d3ULL,
580 		0xe58866a41ae745f9ULL, 0xf591a5b27e541875ULL,
581 		0x891dc05074586693ULL, 0x5b068c651810a89eULL,
582 		0xa30346bc0c08544fULL, 0x3dbf3751c684032dULL,
583 		0x2a1e86ec785032dcULL, 0xf73f5779fca830eaULL,
584 		0xb60c05ca30204d21ULL, 0x0cc316802b32f065ULL,
585 		0x8770241bdd96be69ULL, 0xb861e18199ee95dbULL,
586 		0xf805cad91418fcd1ULL, 0x29e70dccbbd20e82ULL,
587 		0xc7140f435060d763ULL, 0x0f3a9da0e8b0cc3bULL,
588 		0xa2543f574d76408eULL, 0xbd7761e1c175d139ULL,
589 		0x4b1f4f737ca3f512ULL, 0x6dc2df1f2fc137abULL,
590 		0xf1d05c3967b14856ULL, 0xa742bf3715ed046cULL,
591 		0x654030141d1697edULL, 0x07b872abda676c7dULL,
592 		0x3ce84eba87fa17ecULL, 0xc1fb0403cb79afdfULL,
593 		0x3e46bc7105063f73ULL, 0x278ae987121cd678ULL,
594 		0xa1adb4778ef47cd0ULL, 0x26dd906c5362c2b9ULL,
595 		0x05168060589b44e2ULL, 0xfbfc41f9d79ac08fULL,
596 		0x0e6de44ba9ced8faULL, 0x9feb08068bf243a3ULL,
597 		0x7b341749d06b129bULL, 0x229c69e74a87929aULL,
598 		0xe09ee6c4427c011bULL, 0x5692e30e725c4c3aULL,
599 		0xda99a33e5e9f6e4bULL, 0x353dd85af453a36bULL,
600 		0x25241b4c90e0fee7ULL, 0x5de987258309d022ULL,
601 		0xe230140fc0802984ULL, 0x93281e86a0c0b3c6ULL,
602 		0xf229d719a4337408ULL, 0x6f6c2dd4ad3d1f34ULL,
603 		0x8ea5b2fbae3f0aeeULL, 0x8331dd90c473ee4aULL,
604 		0x346aa1b1b52db7aaULL, 0xdf8f235e06042aa9ULL,
605 		0xcc6f6b68a1354b7bULL, 0x6c95a6f46ebf236aULL,
606 		0x52d31a856bb91c19ULL, 0x1a35ded6d498d555ULL,
607 		0xf37eaef2e54d60c9ULL, 0x72e181a9a3c2a61cULL,
608 		0x98537aad51952fdeULL, 0x16f6c856ffaa2530ULL,
609 		0xd960281e9d1d5215ULL, 0x3a0745fa1ce36f50ULL,
610 		0x0b7b642bf1559c18ULL, 0x59a87eae9aec8001ULL,
611 		0x5e100c05408bec7cULL, 0x0441f98b19e55023ULL,
612 		0xd70dcc5534d38aefULL, 0x927f676de1bea707ULL,
613 		0x9769e70db925e3e5ULL, 0x7a636ea29115065aULL,
614 		0x468b201816ef11b6ULL, 0xab81a9b73edff409ULL,
615 		0xc0ac7de88a07bb1eULL, 0x1f235eb68c0391b7ULL,
616 		0x6056b074458dd30fULL, 0xbe8eeac102f7ed67ULL,
617 		0xcd381283e04b5fbaULL, 0x5cbefecec277c4e3ULL,
618 		0xd21b4c356c48ce0dULL, 0x1019c31664b35d8cULL,
619 		0x247362a7d19eea26ULL, 0xebe582efb3299d03ULL,
620 		0x02aef2cb82fc289fULL, 0x86275df09ce8aaa8ULL,
621 		0x28b07427faac1a43ULL, 0x38a9b7319e1f47cfULL,
622 		0xc82e92e3b8d01b58ULL, 0x06ef0b409b1978bcULL,
623 		0x62f842bfc771fb90ULL, 0x9904034610eb3b1fULL,
624 		0xded85ab5477a3e68ULL, 0x90d195a663428f98ULL,
625 		0x5384636e2ac708d8ULL, 0xcbd719c37b522706ULL,
626 		0xae9729d76644b0ebULL, 0x7c8c65e20a0c7ee6ULL,
627 		0x80c856b007f1d214ULL, 0x8c0b40302cc32271ULL,
628 		0xdbcedad51fe17a8aULL, 0x740e8ae938dbdea0ULL,
629 		0xa615c6dc549310adULL, 0x19cc55f6171ae90bULL,
630 		0x49b1bdb8fe5fdd8dULL, 0xed0a89af2830e5bfULL,
631 		0x6a7aadb4f5a65bd6ULL, 0x7e22972988f05679ULL,
632 		0xf952b3325566e810ULL, 0x39fecedadf61530eULL,
633 		0x6101c99f04f3c7ceULL, 0x2e5f7f6761b562ffULL,
634 		0xf08725d226cf5c97ULL, 0x63af3b54860fef51ULL,
635 		0x8ff2cb10ef411e2fULL, 0x884ab9bb35267252ULL,
636 		0x4df04433e7ba8daeULL, 0x9afd8866d3690741ULL,
637 		0x66b9bb34de94abb3ULL, 0x9baaf18d92171380ULL,
638 		0x543c11c5f0a064a5ULL, 0x17a1b1bdbed431f1ULL,
639 		0xb5f58eeaf3a2717fULL, 0xc355f6c849858740ULL,
640 		0xec5df044694ef17eULL, 0xd83751f5dc6346d4ULL,
641 		0xfc4433520dfdacf2ULL, 0x0000000000000000ULL,
642 		0x5a51f58e596ebc5fULL, 0x3285aaf12e34cf16ULL,
643 		0x8d5c39db6dbd36b0ULL, 0x12b731dde64f7513ULL,
644 		0x94906c2d7aa7dfbbULL, 0x302b583aacc8e789ULL,
645 		0x9d45facd090e6b3cULL, 0x2165e2c78905aec4ULL,
646 		0x68d45f7f775a7349ULL, 0x189b2c1d5664fdcaULL,
647 		0xe1c99f2f030215daULL, 0x6983269436246788ULL,
648 		0x8489af3b1e148237ULL, 0xe94b702431d5b59cULL,
649 		0x33d2d31a6f4adbd7ULL, 0xbfd9932a4389f9a6ULL,
650 		0xb0e30e8aab39359dULL, 0xd1e2c715afcaf253ULL,
651 		0x150f43763c28196eULL, 0xc4ed846393e2eb3dULL,
652 		0x03f98b20c3823c5eULL, 0xfd134ab94c83b833ULL,
653 		0x556b682eb1de7064ULL, 0x36c4537a37d19f35ULL,
654 		0x7559f30279a5ca61ULL, 0x799ae58252973a04ULL,
655 		0x9c12832648707ffdULL, 0x78cd9c6913e92ec5ULL,
656 		0x1d8dac7d0effb928ULL, 0x439da0784e745554ULL,
657 		0x413352b3cc887dcbULL, 0xbacf134a1b12bd44ULL,
658 		0x114ebafd25cd494dULL, 0x2f08068c20cb763eULL,
659 		0x76a07822ba27f63fULL, 0xeab2fb04f25789c2ULL,
660 		0xe3676de481fe3d45ULL, 0x1b62a73d95e6c194ULL,
661 		0x641749ff5c68832cULL, 0xa5ec4dfc97112cf3ULL,
662 		0xf6682e92bdd6242bULL, 0x3f11c59a44782bb2ULL,
663 		0x317c21d1edb6f348ULL, 0xd65ab5be75ad9e2eULL,
664 		0x6b2dd45fb4d84f17ULL, 0xfaab381296e4d44eULL,
665 		0xd0b5befeeeb4e692ULL, 0x0882ef0b32d7a046ULL,
666 		0x512a91a5a83b2047ULL, 0x963e9ee6f85bf724ULL,
667 		0x4e09cf132438b1f0ULL, 0x77f701c9fb59e2feULL,
668 		0x7ddb1c094b726a27ULL, 0x5f4775ee01f5f8bdULL,
669 		0x9186ec4d223c9b59ULL, 0xfeeac1998f01846dULL,
670 		0xac39db1ce4b89874ULL, 0xb75b7c21715e59e0ULL,
671 		0xafc0503c273aa42aULL, 0x6e3b543fec430bf5ULL,
672 		0x704f7362213e8e83ULL, 0x58ff0745db9294c0ULL,
673 		0x67eec2df9feabf72ULL, 0xa0facd9ccf8a6811ULL,
674 		0xb936986ad890811aULL, 0x95c715c63bd9cb7aULL,
675 		0xca8060283a2c33c7ULL, 0x507de84ee9453486ULL,
676 		0x85ded6d05f6a96f6ULL, 0x1cdad5964f81ade9ULL,
677 		0xd5a33e9eb62fa270ULL, 0x40642b588df6690aULL,
678 		0x7f75eec2c98e42b8ULL, 0x2cf18dace3494a60ULL,
679 		0x23cb100c0bf9865bULL, 0xeef3028febb2d9e1ULL,
680 		0x4425d2d394133929ULL, 0xaad6d05c7fa1e0c8ULL,
681 		0xad6ea2f7a5c68cb5ULL, 0xc2028f2308fb9381ULL,
682 		0x819f2f5b468fc6d5ULL, 0xc5bafd88d29cfffcULL,
683 		0x47dc59f357910577ULL, 0x2b49ff07392e261dULL,
684 		0x57c59ae5332258fbULL, 0x73b6f842e2bcb2ddULL,
685 		0xcf96e04862b77725ULL, 0x4ca73dd8a6c4996fULL,
686 		0x015779eb417e14c1ULL, 0x37932a9176af8bf4ULL
687 	}, { /* 4 */
688 		0x190a2c9b249df23eULL, 0x2f62f8b62263e1e9ULL,
689 		0x7a7f754740993655ULL, 0x330b7ba4d5564d9fULL,
690 		0x4c17a16a46672582ULL, 0xb22f08eb7d05f5b8ULL,
691 		0x535f47f40bc148ccULL, 0x3aec5d27d4883037ULL,
692 		0x10ed0a1825438f96ULL, 0x516101f72c233d17ULL,
693 		0x13cc6f949fd04eaeULL, 0x739853c441474bfdULL,
694 		0x653793d90d3f5b1bULL, 0x5240647b96b0fc2fULL,
695 		0x0c84890ad27623e0ULL, 0xd7189b32703aaea3ULL,
696 		0x2685de3523bd9c41ULL, 0x99317c5b11bffefaULL,
697 		0x0d9baa854f079703ULL, 0x70b93648fbd48ac5ULL,
698 		0xa80441fce30bc6beULL, 0x7287704bdc36ff1eULL,
699 		0xb65384ed33dc1f13ULL, 0xd36417343ee34408ULL,
700 		0x39cd38ab6e1bf10fULL, 0x5ab861770a1f3564ULL,
701 		0x0ebacf09f594563bULL, 0xd04572b884708530ULL,
702 		0x3cae9722bdb3af47ULL, 0x4a556b6f2f5cbaf2ULL,
703 		0xe1704f1f76c4bd74ULL, 0x5ec4ed7144c6dfcfULL,
704 		0x16afc01d4c7810e6ULL, 0x283f113cd629ca7aULL,
705 		0xaf59a8761741ed2dULL, 0xeed5a3991e215facULL,
706 		0x3bf37ea849f984d4ULL, 0xe413e096a56ce33cULL,
707 		0x2c439d3a98f020d1ULL, 0x637559dc6404c46bULL,
708 		0x9e6c95d1e5f5d569ULL, 0x24bb9836045fe99aULL,
709 		0x44efa466dac8ecc9ULL, 0xc6eab2a5c80895d6ULL,
710 		0x803b50c035220cc4ULL, 0x0321658cba93c138ULL,
711 		0x8f9ebc465dc7ee1cULL, 0xd15a5137190131d3ULL,
712 		0x0fa5ec8668e5e2d8ULL, 0x91c979578d1037b1ULL,
713 		0x0642ca05693b9f70ULL, 0xefca80168350eb4fULL,
714 		0x38d21b24f36a45ecULL, 0xbeab81e1af73d658ULL,
715 		0x8cbfd9cae7542f24ULL, 0xfd19cc0d81f11102ULL,
716 		0x0ac6430fbb4dbc90ULL, 0x1d76a09d6a441895ULL,
717 		0x2a01573ff1cbbfa1ULL, 0xb572e161894fde2bULL,
718 		0x8124734fa853b827ULL, 0x614b1fdf43e6b1b0ULL,
719 		0x68ac395c4238cc18ULL, 0x21d837bfd7f7b7d2ULL,
720 		0x20c714304a860331ULL, 0x5cfaab726324aa14ULL,
721 		0x74c5ba4eb50d606eULL, 0xf3a3030474654739ULL,
722 		0x23e671bcf015c209ULL, 0x45f087e947b9582aULL,
723 		0xd8bd77b418df4c7bULL, 0xe06f6c90ebb50997ULL,
724 		0x0bd96080263c0873ULL, 0x7e03f9410e40dcfeULL,
725 		0xb8e94be4c6484928ULL, 0xfb5b0608e8ca8e72ULL,
726 		0x1a2b49179e0e3306ULL, 0x4e29e76961855059ULL,
727 		0x4f36c4e6fcf4e4baULL, 0x49740ee395cf7bcaULL,
728 		0xc2963ea386d17f7dULL, 0x90d65ad810618352ULL,
729 		0x12d34c1b02a1fa4dULL, 0xfa44258775bb3a91ULL,
730 		0x18150f14b9ec46ddULL, 0x1491861e6b9a653dULL,
731 		0x9a1019d7ab2c3fc2ULL, 0x3668d42d06fe13d7ULL,
732 		0xdcc1fbb25606a6d0ULL, 0x969490dd795a1c22ULL,
733 		0x3549b1a1bc6dd2efULL, 0xc94f5e23a0ed770eULL,
734 		0xb9f6686b5b39fdcbULL, 0xc4d4f4a6efeae00dULL,
735 		0xe732851a1fff2204ULL, 0x94aad6de5eb869f9ULL,
736 		0x3f8ff2ae07206e7fULL, 0xfe38a9813b62d03aULL,
737 		0xa7a1ad7a8bee2466ULL, 0x7b6056c8dde882b6ULL,
738 		0x302a1e286fc58ca7ULL, 0x8da0fa457a259bc7ULL,
739 		0xb3302b64e074415bULL, 0x5402ae7eff8b635fULL,
740 		0x08f8050c9cafc94bULL, 0xae468bf98a3059ceULL,
741 		0x88c355cca98dc58fULL, 0xb10e6d67c7963480ULL,
742 		0xbad70de7e1aa3cf3ULL, 0xbfb4a26e320262bbULL,
743 		0xcb711820870f02d5ULL, 0xce12b7a954a75c9dULL,
744 		0x563ce87dd8691684ULL, 0x9f73b65e7884618aULL,
745 		0x2b1e74b06cba0b42ULL, 0x47cec1ea605b2df1ULL,
746 		0x1c698312f735ac76ULL, 0x5fdbcefed9b76b2cULL,
747 		0x831a354c8fb1cdfcULL, 0x820516c312c0791fULL,
748 		0xb74ca762aeadabf0ULL, 0xfc06ef821c80a5e1ULL,
749 		0x5723cbf24518a267ULL, 0x9d4df05d5f661451ULL,
750 		0x588627742dfd40bfULL, 0xda8331b73f3d39a0ULL,
751 		0x17b0e392d109a405ULL, 0xf965400bcf28fba9ULL,
752 		0x7c3dbf4229a2a925ULL, 0x023e460327e275dbULL,
753 		0x6cd0b55a0ce126b3ULL, 0xe62da695828e96e7ULL,
754 		0x42ad6e63b3f373b9ULL, 0xe50cc319381d57dfULL,
755 		0xc5cbd729729b54eeULL, 0x46d1e265fd2a9912ULL,
756 		0x6428b056904eeff8ULL, 0x8be23040131e04b7ULL,
757 		0x6709d5da2add2ec0ULL, 0x075de98af44a2b93ULL,
758 		0x8447dcc67bfbe66fULL, 0x6616f655b7ac9a23ULL,
759 		0xd607b8bded4b1a40ULL, 0x0563af89d3a85e48ULL,
760 		0x3db1b4ad20c21ba4ULL, 0x11f22997b8323b75ULL,
761 		0x292032b34b587e99ULL, 0x7f1cdace9331681dULL,
762 		0x8e819fc9c0b65affULL, 0xa1e3677fe2d5bb16ULL,
763 		0xcd33d225ee349da5ULL, 0xd9a2543b85aef898ULL,
764 		0x795e10cbfa0af76dULL, 0x25a4bbb9992e5d79ULL,
765 		0x78413344677b438eULL, 0xf0826688cef68601ULL,
766 		0xd27b34bba392f0ebULL, 0x551d8df162fad7bcULL,
767 		0x1e57c511d0d7d9adULL, 0xdeffbdb171e4d30bULL,
768 		0xf4feea8e802f6caaULL, 0xa480c8f6317de55eULL,
769 		0xa0fc44f07fa40ff5ULL, 0x95b5f551c3c9dd1aULL,
770 		0x22f952336d6476eaULL, 0x0000000000000000ULL,
771 		0xa6be8ef5169f9085ULL, 0xcc2cf1aa73452946ULL,
772 		0x2e7ddb39bf12550aULL, 0xd526dd3157d8db78ULL,
773 		0x486b2d6c08becf29ULL, 0x9b0f3a58365d8b21ULL,
774 		0xac78cdfaadd22c15ULL, 0xbc95c7e28891a383ULL,
775 		0x6a927f5f65dab9c3ULL, 0xc3891d2c1ba0cb9eULL,
776 		0xeaa92f9f50f8b507ULL, 0xcf0d9426c9d6e87eULL,
777 		0xca6e3baf1a7eb636ULL, 0xab25247059980786ULL,
778 		0x69b31ad3df4978fbULL, 0xe2512a93cc577c4cULL,
779 		0xff278a0ea61364d9ULL, 0x71a615c766a53e26ULL,
780 		0x89dc764334fc716cULL, 0xf87a638452594f4aULL,
781 		0xf2bc208be914f3daULL, 0x8766b94ac1682757ULL,
782 		0xbbc82e687cdb8810ULL, 0x626a7a53f9757088ULL,
783 		0xa2c202f358467a2eULL, 0x4d0882e5db169161ULL,
784 		0x09e7268301de7da8ULL, 0xe897699c771ac0dcULL,
785 		0xc8507dac3d9cc3edULL, 0xc0a878a0a1330aa6ULL,
786 		0x978bb352e42ba8c1ULL, 0xe9884a13ea6b743fULL,
787 		0x279afdbabecc28a2ULL, 0x047c8c064ed9eaabULL,
788 		0x507e2278b15289f4ULL, 0x599904fbb08cf45cULL,
789 		0xbd8ae46d15e01760ULL, 0x31353da7f2b43844ULL,
790 		0x8558ff49e68a528cULL, 0x76fbfc4d92ef15b5ULL,
791 		0x3456922e211c660cULL, 0x86799ac55c1993b4ULL,
792 		0x3e90d1219a51da9cULL, 0x2d5cbeb505819432ULL,
793 		0x982e5fd48cce4a19ULL, 0xdb9c1238a24c8d43ULL,
794 		0xd439febecaa96f9bULL, 0x418c0bef0960b281ULL,
795 		0x158ea591f6ebd1deULL, 0x1f48e69e4da66d4eULL,
796 		0x8afd13cf8e6fb054ULL, 0xf5e1c9011d5ed849ULL,
797 		0xe34e091c5126c8afULL, 0xad67ee7530a398f6ULL,
798 		0x43b24dec2e82c75aULL, 0x75da99c1287cd48dULL,
799 		0x92e81cdb3783f689ULL, 0xa3dd217cc537cecdULL,
800 		0x60543c50de970553ULL, 0x93f73f54aaf2426aULL,
801 		0xa91b62737e7a725dULL, 0xf19d4507538732e2ULL,
802 		0x77e4dfc20f9ea156ULL, 0x7d229ccdb4d31dc6ULL,
803 		0x1b346a98037f87e5ULL, 0xedf4c615a4b29e94ULL,
804 		0x4093286094110662ULL, 0xb0114ee85ae78063ULL,
805 		0x6ff1d0d6b672e78bULL, 0x6dcf96d591909250ULL,
806 		0xdfe09e3eec9567e8ULL, 0x3214582b4827f97cULL,
807 		0xb46dc2ee143e6ac8ULL, 0xf6c0ac8da7cd1971ULL,
808 		0xebb60c10cd8901e4ULL, 0xf7df8f023abcad92ULL,
809 		0x9c52d3d2c217a0b2ULL, 0x6b8d5cd0f8ab0d20ULL,
810 		0x3777f7a29b8fa734ULL, 0x011f238f9d71b4e3ULL,
811 		0xc1b75b2f3c42be45ULL, 0x5de588fdfe551ef7ULL,
812 		0x6eeef3592b035368ULL, 0xaa3a07ffc4e9b365ULL,
813 		0xecebe59a39c32a77ULL, 0x5ba742f8976e8187ULL,
814 		0x4b4a48e0b22d0e11ULL, 0xddded83dcb771233ULL,
815 		0xa59feb79ac0c51bdULL, 0xc7f5912a55792135ULL
816 	}, { /* 5 */
817 		0x6d6ae04668a9b08aULL, 0x3ab3f04b0be8c743ULL,
818 		0xe51e166b54b3c908ULL, 0xbe90a9eb35c2f139ULL,
819 		0xb2c7066637f2bec1ULL, 0xaa6945613392202cULL,
820 		0x9a28c36f3b5201ebULL, 0xddce5a93ab536994ULL,
821 		0x0e34133ef6382827ULL, 0x52a02ba1ec55048bULL,
822 		0xa2f88f97c4b2a177ULL, 0x8640e513ca2251a5ULL,
823 		0xcdf1d36258137622ULL, 0xfe6cb708dedf8ddbULL,
824 		0x8a174a9ec8121e5dULL, 0x679896036b81560eULL,
825 		0x59ed033395795feeULL, 0x1dd778ab8b74edafULL,
826 		0xee533ef92d9f926dULL, 0x2a8c79baf8a8d8f5ULL,
827 		0x6bcf398e69b119f6ULL, 0xe20491742fafdd95ULL,
828 		0x276488e0809c2aecULL, 0xea955b82d88f5cceULL,
829 		0x7102c63a99d9e0c4ULL, 0xf9763017a5c39946ULL,
830 		0x429fa2501f151b3dULL, 0x4659c72bea05d59eULL,
831 		0x984b7fdccf5a6634ULL, 0xf742232953fbb161ULL,
832 		0x3041860e08c021c7ULL, 0x747bfd9616cd9386ULL,
833 		0x4bb1367192312787ULL, 0x1b72a1638a6c44d3ULL,
834 		0x4a0e68a6e8359a66ULL, 0x169a5039f258b6caULL,
835 		0xb98a2ef44edee5a4ULL, 0xd9083fe85e43a737ULL,
836 		0x967f6ce239624e13ULL, 0x8874f62d3c1a7982ULL,
837 		0x3c1629830af06e3fULL, 0x9165ebfd427e5a8eULL,
838 		0xb5dd81794ceeaa5cULL, 0x0de8f15a7834f219ULL,
839 		0x70bd98ede3dd5d25ULL, 0xaccc9ca9328a8950ULL,
840 		0x56664eda1945ca28ULL, 0x221db34c0f8859aeULL,
841 		0x26dbd637fa98970dULL, 0x1acdffb4f068f932ULL,
842 		0x4585254f64090fa0ULL, 0x72de245e17d53afaULL,
843 		0x1546b25d7c546cf4ULL, 0x207e0ffffb803e71ULL,
844 		0xfaaad2732bcf4378ULL, 0xb462dfae36ea17bdULL,
845 		0xcf926fd1ac1b11fdULL, 0xe0672dc7dba7ba4aULL,
846 		0xd3fa49ad5d6b41b3ULL, 0x8ba81449b216a3bcULL,
847 		0x14f9ec8a0650d115ULL, 0x40fc1ee3eb1d7ce2ULL,
848 		0x23a2ed9b758ce44fULL, 0x782c521b14fddc7eULL,
849 		0x1c68267cf170504eULL, 0xbcf31558c1ca96e6ULL,
850 		0xa781b43b4ba6d235ULL, 0xf6fd7dfe29ff0c80ULL,
851 		0xb0a4bad5c3fad91eULL, 0xd199f51ea963266cULL,
852 		0x414340349119c103ULL, 0x5405f269ed4dadf7ULL,
853 		0xabd61bb649969dcdULL, 0x6813dbeae7bdc3c8ULL,
854 		0x65fb2ab09f8931d1ULL, 0xf1e7fae152e3181dULL,
855 		0xc1a67cef5a2339daULL, 0x7a4feea8e0f5bba1ULL,
856 		0x1e0b9acf05783791ULL, 0x5b8ebf8061713831ULL,
857 		0x80e53cdbcb3af8d9ULL, 0x7e898bd315e57502ULL,
858 		0xc6bcfbf0213f2d47ULL, 0x95a38e86b76e942dULL,
859 		0x092e94218d243cbaULL, 0x8339debf453622e7ULL,
860 		0xb11be402b9fe64ffULL, 0x57d9100d634177c9ULL,
861 		0xcc4e8db52217cbc3ULL, 0x3b0cae9c71ec7aa2ULL,
862 		0xfb158ca451cbfe99ULL, 0x2b33276d82ac6514ULL,
863 		0x01bf5ed77a04bde1ULL, 0xc5601994af33f779ULL,
864 		0x75c4a3416cc92e67ULL, 0xf3844652a6eb7fc2ULL,
865 		0x3487e375fdd0ef64ULL, 0x18ae430704609eedULL,
866 		0x4d14efb993298efbULL, 0x815a620cb13e4538ULL,
867 		0x125c354207487869ULL, 0x9eeea614ce42cf48ULL,
868 		0xce2d3106d61fac1cULL, 0xbbe99247bad6827bULL,
869 		0x071a871f7b1c149dULL, 0x2e4a1cc10db81656ULL,
870 		0x77a71ff298c149b8ULL, 0x06a5d9c80118a97cULL,
871 		0xad73c27e488e34b1ULL, 0x443a7b981e0db241ULL,
872 		0xe3bbcfa355ab6074ULL, 0x0af276450328e684ULL,
873 		0x73617a896dd1871bULL, 0x58525de4ef7de20fULL,
874 		0xb7be3dcab8e6cd83ULL, 0x19111dd07e64230cULL,
875 		0x842359a03e2a367aULL, 0x103f89f1f3401fb6ULL,
876 		0xdc710444d157d475ULL, 0xb835702334da5845ULL,
877 		0x4320fc876511a6dcULL, 0xd026abc9d3679b8dULL,
878 		0x17250eee885c0b2bULL, 0x90dab52a387ae76fULL,
879 		0x31fed8d972c49c26ULL, 0x89cba8fa461ec463ULL,
880 		0x2ff5421677bcabb7ULL, 0x396f122f85e41d7dULL,
881 		0xa09b332430bac6a8ULL, 0xc888e8ced7070560ULL,
882 		0xaeaf201ac682ee8fULL, 0x1180d7268944a257ULL,
883 		0xf058a43628e7a5fcULL, 0xbd4c4b8fbbce2b07ULL,
884 		0xa1246df34abe7b49ULL, 0x7d5569b79be9af3cULL,
885 		0xa9b5a705bd9efa12ULL, 0xdb6b835baa4bc0e8ULL,
886 		0x05793bac8f147342ULL, 0x21c1512881848390ULL,
887 		0xfdb0556c50d357e5ULL, 0x613d4fcb6a99ff72ULL,
888 		0x03dce2648e0cda3eULL, 0xe949b9e6568386f0ULL,
889 		0xfc0f0bbb2ad7ea04ULL, 0x6a70675913b5a417ULL,
890 		0x7f36d5046fe1c8e3ULL, 0x0c57af8d02304ff8ULL,
891 		0x32223abdfcc84618ULL, 0x0891caf6f720815bULL,
892 		0xa63eeaec31a26fd4ULL, 0x2507345374944d33ULL,
893 		0x49d28ac266394058ULL, 0xf5219f9aa7f3d6beULL,
894 		0x2d96fea583b4cc68ULL, 0x5a31e1571b7585d0ULL,
895 		0x8ed12fe53d02d0feULL, 0xdfade6205f5b0e4bULL,
896 		0x4cabb16ee92d331aULL, 0x04c6657bf510cea3ULL,
897 		0xd73c2cd6a87b8f10ULL, 0xe1d87310a1a307abULL,
898 		0x6cd5be9112ad0d6bULL, 0x97c032354366f3f2ULL,
899 		0xd4e0ceb22677552eULL, 0x0000000000000000ULL,
900 		0x29509bde76a402cbULL, 0xc27a9e8bd42fe3e4ULL,
901 		0x5ef7842cee654b73ULL, 0xaf107ecdbc86536eULL,
902 		0x3fcacbe784fcb401ULL, 0xd55f90655c73e8cfULL,
903 		0xe6c2f40fdabf1336ULL, 0xe8f6e7312c873b11ULL,
904 		0xeb2a0555a28be12fULL, 0xe4a148bc2eb774e9ULL,
905 		0x9b979db84156bc0aULL, 0x6eb60222e6a56ab4ULL,
906 		0x87ffbbc4b026ec44ULL, 0xc703a5275b3b90a6ULL,
907 		0x47e699fc9001687fULL, 0x9c8d1aa73a4aa897ULL,
908 		0x7cea3760e1ed12ddULL, 0x4ec80ddd1d2554c5ULL,
909 		0x13e36b957d4cc588ULL, 0x5d2b66486069914dULL,
910 		0x92b90999cc7280b0ULL, 0x517cc9c56259deb5ULL,
911 		0xc937b619ad03b881ULL, 0xec30824ad997f5b2ULL,
912 		0xa45d565fc5aa080bULL, 0xd6837201d27f32f1ULL,
913 		0x635ef3789e9198adULL, 0x531f75769651b96aULL,
914 		0x4f77530a6721e924ULL, 0x486dd4151c3dfdb9ULL,
915 		0x5f48dafb9461f692ULL, 0x375b011173dc355aULL,
916 		0x3da9775470f4d3deULL, 0x8d0dcd81b30e0ac0ULL,
917 		0x36e45fc609d888bbULL, 0x55baacbe97491016ULL,
918 		0x8cb29356c90ab721ULL, 0x76184125e2c5f459ULL,
919 		0x99f4210bb55edbd5ULL, 0x6f095cf59ca1d755ULL,
920 		0x9f51f8c3b44672a9ULL, 0x3538bda287d45285ULL,
921 		0x50c39712185d6354ULL, 0xf23b1885dcefc223ULL,
922 		0x79930ccc6ef9619fULL, 0xed8fdc9da3934853ULL,
923 		0xcb540aaa590bdf5eULL, 0x5c94389f1a6d2cacULL,
924 		0xe77daad8a0bbaed7ULL, 0x28efc5090ca0bf2aULL,
925 		0xbf2ff73c4fc64cd8ULL, 0xb37858b14df60320ULL,
926 		0xf8c96ec0dfc724a7ULL, 0x828680683f329f06ULL,
927 		0x941cd051cd6a29ccULL, 0xc3c5c05cae2b5e05ULL,
928 		0xb601631dc2e27062ULL, 0xc01922382027843bULL,
929 		0x24b86a840e90f0d2ULL, 0xd245177a276ffc52ULL,
930 		0x0f8b4de98c3c95c6ULL, 0x3e759530fef809e0ULL,
931 		0x0b4d2892792c5b65ULL, 0xc4df4743d5374a98ULL,
932 		0xa5e20888bfaeb5eaULL, 0xba56cc90c0d23f9aULL,
933 		0x38d04cf8ffe0a09cULL, 0x62e1adafe495254cULL,
934 		0x0263bcb3f40867dfULL, 0xcaeb547d230f62bfULL,
935 		0x6082111c109d4293ULL, 0xdad4dd8cd04f7d09ULL,
936 		0xefec602e579b2f8cULL, 0x1fb4c4187f7c8a70ULL,
937 		0xffd3e9dfa4db303aULL, 0x7bf0b07f9af10640ULL,
938 		0xf49ec14dddf76b5fULL, 0x8f6e713247066d1fULL,
939 		0x339d646a86ccfbf9ULL, 0x64447467e58d8c30ULL,
940 		0x2c29a072f9b07189ULL, 0xd8b7613f24471ad6ULL,
941 		0x6627c8d41185ebefULL, 0xa347d140beb61c96ULL,
942 		0xde12b8f7255fb3aaULL, 0x9d324470404e1576ULL,
943 		0x9306574eb6763d51ULL, 0xa80af9d2c79a47f3ULL,
944 		0x859c0777442e8b9bULL, 0x69ac853d9db97e29ULL
945 	}, { /* 6 */
946 		0xc3407dfc2de6377eULL, 0x5b9e93eea4256f77ULL,
947 		0xadb58fdd50c845e0ULL, 0x5219ff11a75bed86ULL,
948 		0x356b61cfd90b1de9ULL, 0xfb8f406e25abe037ULL,
949 		0x7a5a0231c0f60796ULL, 0x9d3cd216e1f5020bULL,
950 		0x0c6550fb6b48d8f3ULL, 0xf57508c427ff1c62ULL,
951 		0x4ad35ffa71cb407dULL, 0x6290a2da1666aa6dULL,
952 		0xe284ec2349355f9fULL, 0xb3c307c53d7c84ecULL,
953 		0x05e23c0468365a02ULL, 0x190bac4d6c9ebfa8ULL,
954 		0x94bbbee9e28b80faULL, 0xa34fc777529cb9b5ULL,
955 		0xcc7b39f095bcd978ULL, 0x2426addb0ce532e3ULL,
956 		0x7e79329312ce4fc7ULL, 0xab09a72eebec2917ULL,
957 		0xf8d15499f6b9d6c2ULL, 0x1a55b8babf8c895dULL,
958 		0xdb8add17fb769a85ULL, 0xb57f2f368658e81bULL,
959 		0x8acd36f18f3f41f6ULL, 0x5ce3b7bba50f11d3ULL,
960 		0x114dcc14d5ee2f0aULL, 0xb91a7fcded1030e8ULL,
961 		0x81d5425fe55de7a1ULL, 0xb6213bc1554adeeeULL,
962 		0x80144ef95f53f5f2ULL, 0x1e7688186db4c10cULL,
963 		0x3b912965db5fe1bcULL, 0xc281715a97e8252dULL,
964 		0x54a5d7e21c7f8171ULL, 0x4b12535ccbc5522eULL,
965 		0x1d289cefbea6f7f9ULL, 0x6ef5f2217d2e729eULL,
966 		0xe6a7dc819b0d17ceULL, 0x1b94b41c05829b0eULL,
967 		0x33d7493c622f711eULL, 0xdcf7f942fa5ce421ULL,
968 		0x600fba8b7f7a8ecbULL, 0x46b60f011a83988eULL,
969 		0x235b898e0dcf4c47ULL, 0x957ab24f588592a9ULL,
970 		0x4354330572b5c28cULL, 0xa5f3ef84e9b8d542ULL,
971 		0x8c711e02341b2d01ULL, 0x0b1874ae6a62a657ULL,
972 		0x1213d8e306fc19ffULL, 0xfe6d7c6a4d9dba35ULL,
973 		0x65ed868f174cd4c9ULL, 0x88522ea0e6236550ULL,
974 		0x899322065c2d7703ULL, 0xc01e690bfef4018bULL,
975 		0x915982ed8abddaf8ULL, 0xbe675b98ec3a4e4cULL,
976 		0xa996bf7f82f00db1ULL, 0xe1daf8d49a27696aULL,
977 		0x2effd5d3dc8986e7ULL, 0xd153a51f2b1a2e81ULL,
978 		0x18caa0ebd690adfbULL, 0x390e3134b243c51aULL,
979 		0x2778b92cdff70416ULL, 0x029f1851691c24a6ULL,
980 		0x5e7cafeacc133575ULL, 0xfa4e4cc89fa5f264ULL,
981 		0x5a5f9f481e2b7d24ULL, 0x484c47ab18d764dbULL,
982 		0x400a27f2a1a7f479ULL, 0xaeeb9b2a83da7315ULL,
983 		0x721c626879869734ULL, 0x042330a2d2384851ULL,
984 		0x85f672fd3765aff0ULL, 0xba446b3a3e02061dULL,
985 		0x73dd6ecec3888567ULL, 0xffac70ccf793a866ULL,
986 		0xdfa9edb5294ed2d4ULL, 0x6c6aea7014325638ULL,
987 		0x834a5a0e8c41c307ULL, 0xcdba35562fb2cb2bULL,
988 		0x0ad97808d06cb404ULL, 0x0f3b440cb85aee06ULL,
989 		0xe5f9c876481f213bULL, 0x98deee1289c35809ULL,
990 		0x59018bbfcd394bd1ULL, 0xe01bf47220297b39ULL,
991 		0xde68e1139340c087ULL, 0x9fa3ca4788e926adULL,
992 		0xbb85679c840c144eULL, 0x53d8f3b71d55ffd5ULL,
993 		0x0da45c5dd146caa0ULL, 0x6f34fe87c72060cdULL,
994 		0x57fbc315cf6db784ULL, 0xcee421a1fca0fddeULL,
995 		0x3d2d0196607b8d4bULL, 0x642c8a29ad42c69aULL,
996 		0x14aff010bdd87508ULL, 0xac74837beac657b3ULL,
997 		0x3216459ad821634dULL, 0x3fb219c70967a9edULL,
998 		0x06bc28f3bb246cf7ULL, 0xf2082c9126d562c6ULL,
999 		0x66b39278c45ee23cULL, 0xbd394f6f3f2878b9ULL,
1000 		0xfd33689d9e8f8cc0ULL, 0x37f4799eb017394fULL,
1001 		0x108cc0b26fe03d59ULL, 0xda4bd1b1417888d6ULL,
1002 		0xb09d1332ee6eb219ULL, 0x2f3ed975668794b4ULL,
1003 		0x58c0871977375982ULL, 0x7561463d78ace990ULL,
1004 		0x09876cff037e82f1ULL, 0x7fb83e35a8c05d94ULL,
1005 		0x26b9b58a65f91645ULL, 0xef20b07e9873953fULL,
1006 		0x3148516d0b3355b8ULL, 0x41cb2b541ba9e62aULL,
1007 		0x790416c613e43163ULL, 0xa011d380818e8f40ULL,
1008 		0x3a5025c36151f3efULL, 0xd57095bdf92266d0ULL,
1009 		0x498d4b0da2d97688ULL, 0x8b0c3a57353153a5ULL,
1010 		0x21c491df64d368e1ULL, 0x8f2f0af5e7091bf4ULL,
1011 		0x2da1c1240f9bb012ULL, 0xc43d59a92ccc49daULL,
1012 		0xbfa6573e56345c1fULL, 0x828b56a8364fd154ULL,
1013 		0x9a41f643e0df7cafULL, 0xbcf843c985266aeaULL,
1014 		0x2b1de9d7b4bfdce5ULL, 0x20059d79dedd7ab2ULL,
1015 		0x6dabe6d6ae3c446bULL, 0x45e81bf6c991ae7bULL,
1016 		0x6351ae7cac68b83eULL, 0xa432e32253b6c711ULL,
1017 		0xd092a9b991143cd2ULL, 0xcac711032e98b58fULL,
1018 		0xd8d4c9e02864ac70ULL, 0xc5fc550f96c25b89ULL,
1019 		0xd7ef8dec903e4276ULL, 0x67729ede7e50f06fULL,
1020 		0xeac28c7af045cf3dULL, 0xb15c1f945460a04aULL,
1021 		0x9cfddeb05bfb1058ULL, 0x93c69abce3a1fe5eULL,
1022 		0xeb0380dc4a4bdd6eULL, 0xd20db1e8f8081874ULL,
1023 		0x229a8528b7c15e14ULL, 0x44291750739fbc28ULL,
1024 		0xd3ccbd4e42060a27ULL, 0xf62b1c33f4ed2a97ULL,
1025 		0x86a8660ae4779905ULL, 0xd62e814a2a305025ULL,
1026 		0x477703a7a08d8addULL, 0x7b9b0e977af815c5ULL,
1027 		0x78c51a60a9ea2330ULL, 0xa6adfb733aaae3b7ULL,
1028 		0x97e5aa1e3199b60fULL, 0x0000000000000000ULL,
1029 		0xf4b404629df10e31ULL, 0x5564db44a6719322ULL,
1030 		0x9207961a59afec0dULL, 0x9624a6b88b97a45cULL,
1031 		0x363575380a192b1cULL, 0x2c60cd82b595a241ULL,
1032 		0x7d272664c1dc7932ULL, 0x7142769faa94a1c1ULL,
1033 		0xa1d0df263b809d13ULL, 0x1630e841d4c451aeULL,
1034 		0xc1df65ad44fa13d8ULL, 0x13d2d445bcf20bacULL,
1035 		0xd915c546926abe23ULL, 0x38cf3d92084dd749ULL,
1036 		0xe766d0272103059dULL, 0xc7634d5effde7f2fULL,
1037 		0x077d2455012a7ea4ULL, 0xedbfa82ff16fb199ULL,
1038 		0xaf2a978c39d46146ULL, 0x42953fa3c8bbd0dfULL,
1039 		0xcb061da59496a7dcULL, 0x25e7a17db6eb20b0ULL,
1040 		0x34aa6d6963050fbaULL, 0xa76cf7d580a4f1e4ULL,
1041 		0xf7ea10954ee338c4ULL, 0xfcf2643b24819e93ULL,
1042 		0xcf252d0746aeef8dULL, 0x4ef06f58a3f3082cULL,
1043 		0x563acfb37563a5d7ULL, 0x5086e740ce47c920ULL,
1044 		0x2982f186dda3f843ULL, 0x87696aac5e798b56ULL,
1045 		0x5d22bb1d1f010380ULL, 0x035e14f7d31236f5ULL,
1046 		0x3cec0d30da759f18ULL, 0xf3c920379cdb7095ULL,
1047 		0xb8db736b571e22bbULL, 0xdd36f5e44052f672ULL,
1048 		0xaac8ab8851e23b44ULL, 0xa857b3d938fe1fe2ULL,
1049 		0x17f1e4e76eca43fdULL, 0xec7ea4894b61a3caULL,
1050 		0x9e62c6e132e734feULL, 0xd4b1991b432c7483ULL,
1051 		0x6ad6c283af163acfULL, 0x1ce9904904a8e5aaULL,
1052 		0x5fbda34c761d2726ULL, 0xf910583f4cb7c491ULL,
1053 		0xc6a241f845d06d7cULL, 0x4f3163fe19fd1a7fULL,
1054 		0xe99c988d2357f9c8ULL, 0x8eee06535d0709a7ULL,
1055 		0x0efa48aa0254fc55ULL, 0xb4be23903c56fa48ULL,
1056 		0x763f52caabbedf65ULL, 0xeee1bcd8227d876cULL,
1057 		0xe345e085f33b4dccULL, 0x3e731561b369bbbeULL,
1058 		0x2843fd2067adea10ULL, 0x2adce5710eb1ceb6ULL,
1059 		0xb7e03767ef44ccbdULL, 0x8db012a48e153f52ULL,
1060 		0x61ceb62dc5749c98ULL, 0xe85d942b9959eb9bULL,
1061 		0x4c6f7709caef2c8aULL, 0x84377e5b8d6bbda3ULL,
1062 		0x30895dcbb13d47ebULL, 0x74a04a9bc2a2fbc3ULL,
1063 		0x6b17ce251518289cULL, 0xe438c4d0f2113368ULL,
1064 		0x1fb784bed7bad35fULL, 0x9b80fae55ad16efcULL,
1065 		0x77fe5e6c11b0cd36ULL, 0xc858095247849129ULL,
1066 		0x08466059b97090a2ULL, 0x01c10ca6ba0e1253ULL,
1067 		0x6988d6747c040c3aULL, 0x6849dad2c60a1e69ULL,
1068 		0x5147ebe67449db73ULL, 0xc99905f4fd8a837aULL,
1069 		0x991fe2b433cd4a5aULL, 0xf09734c04fc94660ULL,
1070 		0xa28ecbd1e892abe6ULL, 0xf1563866f5c75433ULL,
1071 		0x4dae7baf70e13ed9ULL, 0x7ce62ac27bd26b61ULL,
1072 		0x70837a39109ab392ULL, 0x90988e4b30b3c8abULL,
1073 		0xb2020b63877296bfULL, 0x156efcb607d6675bULL
1074 	}, { /* 7 */
1075 		0xe63f55ce97c331d0ULL, 0x25b506b0015bba16ULL,
1076 		0xc8706e29e6ad9ba8ULL, 0x5b43d3775d521f6aULL,
1077 		0x0bfa3d577035106eULL, 0xab95fc172afb0e66ULL,
1078 		0xf64b63979e7a3276ULL, 0xf58b4562649dad4bULL,
1079 		0x48f7c3dbae0c83f1ULL, 0xff31916642f5c8c5ULL,
1080 		0xcbb048dc1c4a0495ULL, 0x66b8f83cdf622989ULL,
1081 		0x35c130e908e2b9b0ULL, 0x7c761a61f0b34fa1ULL,
1082 		0x3601161cf205268dULL, 0x9e54ccfe2219b7d6ULL,
1083 		0x8b7d90a538940837ULL, 0x9cd403588ea35d0bULL,
1084 		0xbc3c6fea9ccc5b5aULL, 0xe5ff733b6d24aeedULL,
1085 		0xceed22de0f7eb8d2ULL, 0xec8581cab1ab545eULL,
1086 		0xb96105e88ff8e71dULL, 0x8ca03501871a5eadULL,
1087 		0x76ccce65d6db2a2fULL, 0x5883f582a7b58057ULL,
1088 		0x3f7be4ed2e8adc3eULL, 0x0fe7be06355cd9c9ULL,
1089 		0xee054e6c1d11be83ULL, 0x1074365909b903a6ULL,
1090 		0x5dde9f80b4813c10ULL, 0x4a770c7d02b6692cULL,
1091 		0x5379c8d5d7809039ULL, 0xb4067448161ed409ULL,
1092 		0x5f5e5026183bd6cdULL, 0xe898029bf4c29df9ULL,
1093 		0x7fb63c940a54d09cULL, 0xc5171f897f4ba8bcULL,
1094 		0xa6f28db7b31d3d72ULL, 0x2e4f3be7716eaa78ULL,
1095 		0x0d6771a099e63314ULL, 0x82076254e41bf284ULL,
1096 		0x2f0fd2b42733df98ULL, 0x5c9e76d3e2dc49f0ULL,
1097 		0x7aeb569619606cdbULL, 0x83478b07b2468764ULL,
1098 		0xcfadcb8d5923cd32ULL, 0x85dac7f05b95a41eULL,
1099 		0xb5469d1b4043a1e9ULL, 0xb821ecbbd9a592fdULL,
1100 		0x1b8e0b0e798c13c8ULL, 0x62a57b6d9a0be02eULL,
1101 		0xfcf1b793b81257f8ULL, 0x9d94ea0bd8fe28ebULL,
1102 		0x4cea408aeb654a56ULL, 0x23284a47e888996cULL,
1103 		0x2d8f1d128b893545ULL, 0xf4cbac3132c0d8abULL,
1104 		0xbd7c86b9ca912ebaULL, 0x3a268eef3dbe6079ULL,
1105 		0xf0d62f6077a9110cULL, 0x2735c916ade150cbULL,
1106 		0x89fd5f03942ee2eaULL, 0x1acee25d2fd16628ULL,
1107 		0x90f39bab41181bffULL, 0x430dfe8cde39939fULL,
1108 		0xf70b8ac4c8274796ULL, 0x1c53aeaac6024552ULL,
1109 		0x13b410acf35e9c9bULL, 0xa532ab4249faa24fULL,
1110 		0x2b1251e5625a163fULL, 0xd7e3e676da4841c7ULL,
1111 		0xa7b264e4e5404892ULL, 0xda8497d643ae72d3ULL,
1112 		0x861ae105a1723b23ULL, 0x38a6414991048aa4ULL,
1113 		0x6578dec92585b6b4ULL, 0x0280cfa6acbaeaddULL,
1114 		0x88bdb650c273970aULL, 0x9333bd5ebbff84c2ULL,
1115 		0x4e6a8f2c47dfa08bULL, 0x321c954db76cef2aULL,
1116 		0x418d312a72837942ULL, 0xb29b38bfffcdf773ULL,
1117 		0x6c022c38f90a4c07ULL, 0x5a033a240b0f6a8aULL,
1118 		0x1f93885f3ce5da6fULL, 0xc38a537e96988bc6ULL,
1119 		0x39e6a81ac759ff44ULL, 0x29929e43cee0fce2ULL,
1120 		0x40cdd87924de0ca2ULL, 0xe9d8ebc8a29fe819ULL,
1121 		0x0c2798f3cfbb46f4ULL, 0x55e484223e53b343ULL,
1122 		0x4650948ecd0d2fd8ULL, 0x20e86cb2126f0651ULL,
1123 		0x6d42c56baf5739e7ULL, 0xa06fc1405ace1e08ULL,
1124 		0x7babbfc54f3d193bULL, 0x424d17df8864e67fULL,
1125 		0xd8045870ef14980eULL, 0xc6d7397c85ac3781ULL,
1126 		0x21a885e1443273b1ULL, 0x67f8116f893f5c69ULL,
1127 		0x24f5efe35706cff6ULL, 0xd56329d076f2ab1aULL,
1128 		0x5e1eb9754e66a32dULL, 0x28d2771098bd8902ULL,
1129 		0x8f6013f47dfdc190ULL, 0x17a993fdb637553cULL,
1130 		0xe0a219397e1012aaULL, 0x786b9930b5da8606ULL,
1131 		0x6e82e39e55b0a6daULL, 0x875a0856f72f4ec3ULL,
1132 		0x3741ff4fa458536dULL, 0xac4859b3957558fcULL,
1133 		0x7ef6d5c75c09a57cULL, 0xc04a758b6c7f14fbULL,
1134 		0xf9acdd91ab26ebbfULL, 0x7391a467c5ef9668ULL,
1135 		0x335c7c1ee1319acaULL, 0xa91533b18641e4bbULL,
1136 		0xe4bf9a683b79db0dULL, 0x8e20faa72ba0b470ULL,
1137 		0x51f907737b3a7ae4ULL, 0x2268a314bed5ec8cULL,
1138 		0xd944b123b949edeeULL, 0x31dcb3b84d8b7017ULL,
1139 		0xd3fe65279f218860ULL, 0x097af2f1dc8ffab3ULL,
1140 		0x9b09a6fc312d0b91ULL, 0xcc6ded78a3c4520fULL,
1141 		0x3481d9ba5ebfcc50ULL, 0x4f2a667f1182d56bULL,
1142 		0xdfd9fdd4509ace94ULL, 0x26752045fbbc252bULL,
1143 		0xbffc491f662bc467ULL, 0xdd593272fc202449ULL,
1144 		0x3cbbc218d46d4303ULL, 0x91b372f817456e1fULL,
1145 		0x681faf69bc6385a0ULL, 0xb686bbeebaa43ed4ULL,
1146 		0x1469b5084cd0ca01ULL, 0x98c98009cbca94acULL,
1147 		0x6438379a73d8c354ULL, 0xc2caba2dc0c5fe26ULL,
1148 		0x3e3b0dbe78d7a9deULL, 0x50b9ee202d670f04ULL,
1149 		0x4590b27b37eab0e5ULL, 0x6025b4cb36b10af3ULL,
1150 		0xfb2c1237079c0162ULL, 0xa12f28130c936be8ULL,
1151 		0x4b37e52e54eb1cccULL, 0x083a1ba28ad28f53ULL,
1152 		0xc10a9cd83a22611bULL, 0x9f1425ad7444c236ULL,
1153 		0x069d4cf7e9d3237aULL, 0xedc56899e7f621beULL,
1154 		0x778c273680865fcfULL, 0x309c5aeb1bd605f7ULL,
1155 		0x8de0dc52d1472b4dULL, 0xf8ec34c2fd7b9e5fULL,
1156 		0xea18cd3d58787724ULL, 0xaad515447ca67b86ULL,
1157 		0x9989695a9d97e14cULL, 0x0000000000000000ULL,
1158 		0xf196c63321f464ecULL, 0x71116bc169557cb5ULL,
1159 		0xaf887f466f92c7c1ULL, 0x972e3e0ffe964d65ULL,
1160 		0x190ec4a8d536f915ULL, 0x95aef1a9522ca7b8ULL,
1161 		0xdc19db21aa7d51a9ULL, 0x94ee18fa0471d258ULL,
1162 		0x8087adf248a11859ULL, 0xc457f6da2916dd5cULL,
1163 		0xfa6cfb6451c17482ULL, 0xf256e0c6db13fbd1ULL,
1164 		0x6a9f60cf10d96f7dULL, 0x4daaa9d9bd383fb6ULL,
1165 		0x03c026f5fae79f3dULL, 0xde99148706c7bb74ULL,
1166 		0x2a52b8b6340763dfULL, 0x6fc20acd03edd33aULL,
1167 		0xd423c08320afdefaULL, 0xbbe1ca4e23420dc0ULL,
1168 		0x966ed75ca8cb3885ULL, 0xeb58246e0e2502c4ULL,
1169 		0x055d6a021334bc47ULL, 0xa47242111fa7d7afULL,
1170 		0xe3623fcc84f78d97ULL, 0x81c744a11efc6db9ULL,
1171 		0xaec8961539cfb221ULL, 0xf31609958d4e8e31ULL,
1172 		0x63e5923ecc5695ceULL, 0x47107ddd9b505a38ULL,
1173 		0xa3afe7b5a0298135ULL, 0x792b7063e387f3e6ULL,
1174 		0x0140e953565d75e0ULL, 0x12f4f9ffa503e97bULL,
1175 		0x750ce8902c3cb512ULL, 0xdbc47e8515f30733ULL,
1176 		0x1ed3610c6ab8af8fULL, 0x5239218681dde5d9ULL,
1177 		0xe222d69fd2aaf877ULL, 0xfe71783514a8bd25ULL,
1178 		0xcaf0a18f4a177175ULL, 0x61655d9860ec7f13ULL,
1179 		0xe77fbc9dc19e4430ULL, 0x2ccff441ddd440a5ULL,
1180 		0x16e97aaee06a20dcULL, 0xa855dae2d01c915bULL,
1181 		0x1d1347f9905f30b2ULL, 0xb7c652bdecf94b34ULL,
1182 		0xd03e43d265c6175dULL, 0xfdb15ec0ee4f2218ULL,
1183 		0x57644b8492e9599eULL, 0x07dda5a4bf8e569aULL,
1184 		0x54a46d71680ec6a3ULL, 0x5624a2d7c4b42c7eULL,
1185 		0xbebca04c3076b187ULL, 0x7d36f332a6ee3a41ULL,
1186 		0x3b6667bc6be31599ULL, 0x695f463aea3ef040ULL,
1187 		0xad08b0e0c3282d1cULL, 0xb15b1e4a052a684eULL,
1188 		0x44d05b2861b7c505ULL, 0x15295c5b1a8dbfe1ULL,
1189 		0x744c01c37a61c0f2ULL, 0x59c31cd1f1e8f5b7ULL,
1190 		0xef45a73f4b4ccb63ULL, 0x6bdf899c46841a9dULL,
1191 		0x3dfb2b4b823036e3ULL, 0xa2ef0ee6f674f4d5ULL,
1192 		0x184e2dfb836b8cf5ULL, 0x1134df0a5fe47646ULL,
1193 		0xbaa1231d751f7820ULL, 0xd17eaa81339b62bdULL,
1194 		0xb01bf71953771daeULL, 0x849a2ea30dc8d1feULL,
1195 		0x705182923f080955ULL, 0x0ea757556301ac29ULL,
1196 		0x041d83514569c9a7ULL, 0x0abad4042668658eULL,
1197 		0x49b72a88f851f611ULL, 0x8a3d79f66ec97dd7ULL,
1198 		0xcd2d042bf59927efULL, 0xc930877ab0f0ee48ULL,
1199 		0x9273540deda2f122ULL, 0xc797d02fd3f14261ULL,
1200 		0xe1e2f06a284d674aULL, 0xd2be8c74c97cfd80ULL,
1201 		0x9a494faf67707e71ULL, 0xb3dbd1eca9908293ULL,
1202 		0x72d14d3493b2e388ULL, 0xd6a30f258c153427ULL
1203 	},
1204 };
1205 
1206 
1207 /* Extract byte i from u64 and shift it right by 8*j */
1208 #define B(x, i, j) ((u64)(((const u8*)&(x))[(i)]) << (8*(j)))
1209 #define P64(x) (B((x), 0, 0) | B((x), 1, 1) | B((x), 2, 2) | B((x), 3, 3) | \
1210 		B((x), 4, 4) | B((x), 5, 5) | B((x), 6, 6) | B((x), 7, 7))
1211 #define S64(x) (B((x), 0, 7) | B((x), 1, 6) | B((x), 2, 5) | B((x), 3, 4) | \
1212 		B((x), 4, 3) | B((x), 5, 2) | B((x), 6, 1) | B((x), 7, 0))
1213 
streebog_permute(const u64 in[STREEBOG_BLOCK_U64_SIZE],u8 i)1214 ATTRIBUTE_WARN_UNUSED_RET static inline u64 streebog_permute(const u64 in[STREEBOG_BLOCK_U64_SIZE], u8 i)
1215 {
1216 	u64 t = 0;
1217 	unsigned int j;
1218 
1219 	for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){
1220 		t ^= PI[j][(in[j] >> (i * 8)) & 0xff];
1221 	}
1222 
1223 	return t;
1224 }
1225 
streebog_transform(u64 out[STREEBOG_BLOCK_U64_SIZE],const u64 a[STREEBOG_BLOCK_U64_SIZE],const u64 b[STREEBOG_BLOCK_U64_SIZE])1226 static inline void streebog_transform(u64 out[STREEBOG_BLOCK_U64_SIZE],
1227 				      const u64 a[STREEBOG_BLOCK_U64_SIZE],
1228 				      const u64 b[STREEBOG_BLOCK_U64_SIZE])
1229 {
1230 	u64 tmp[STREEBOG_BLOCK_U64_SIZE];
1231 	unsigned int j;
1232 
1233 	for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){
1234 		tmp[j] = a[j] ^ b[j];
1235 	}
1236 	for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){
1237 		out[j] = streebog_permute(tmp, (u8)j);
1238 	}
1239 
1240 	return;
1241 }
1242 
gN(u64 h[STREEBOG_BLOCK_U64_SIZE],const u64 m[STREEBOG_BLOCK_U64_SIZE],const u64 N[STREEBOG_BLOCK_U64_SIZE])1243 static inline void gN(u64 h[STREEBOG_BLOCK_U64_SIZE],
1244 		      const u64 m[STREEBOG_BLOCK_U64_SIZE],
1245 		      const u64 N[STREEBOG_BLOCK_U64_SIZE])
1246 {
1247 	u64 K[STREEBOG_BLOCK_U64_SIZE];
1248 	u64 T[STREEBOG_BLOCK_U64_SIZE];
1249 	unsigned int j;
1250 
1251 	streebog_transform(K, h, N);
1252 	streebog_transform(T, K, m);
1253 	streebog_transform(K, K, C_STREEBOG[0]);
1254 
1255 	for (j = 1; j < 12; j++) {
1256 		streebog_transform(T, K, T);
1257 		streebog_transform(K, K, C_STREEBOG[j]);
1258 	}
1259 	for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){
1260 		h[j] ^= T[j] ^ K[j] ^ m[j];
1261 	}
1262 }
1263 
streebog_process(streebog_context * ctx,const u8 * in,u64 num)1264 static inline void streebog_process(streebog_context *ctx, const u8 *in, u64 num)
1265 {
1266 	u64 M[STREEBOG_BLOCK_U64_SIZE];
1267 	u64 l, CF;
1268 	unsigned int j;
1269 
1270 	for(j = 0; j < STREEBOG_BLOCK_U64_SIZE; j++){
1271 		M[j] = P64(in[8 * j]);
1272 	}
1273 	gN(ctx->h, M, ctx->N);
1274 
1275 	l = ctx->N[0];
1276 	ctx->N[0] += num;
1277 
1278 	if((ctx->N[0] < l) || (ctx->N[0] < num)){
1279 		for(j = 1; j < STREEBOG_BLOCK_U64_SIZE; j++){
1280 			ctx->N[j]++;
1281 			if(ctx->N[j] != 0){
1282 				break;
1283 			}
1284 		}
1285 	}
1286 	/* Handle the carry flag */
1287 	CF = 0;
1288 	ctx->Sigma[0] += M[0];
1289 	for(j = 1; j < STREEBOG_BLOCK_U64_SIZE; j++){
1290 		if(ctx->Sigma[j - 1] != M[j - 1]){
1291 			CF = (ctx->Sigma[j - 1] < M[j - 1]);
1292 		}
1293 		ctx->Sigma[j] += (M[j] + CF);
1294 	}
1295 
1296 	return;
1297 }
1298 
1299 #endif /* defined(WITH_HASH_STREEBOG256) || defined(WITH_HASH_STREEBOG512) */
1300 
1301 #endif /* __STREEBOG_H__ */
1302