Fixed all gpu code (see PR #179 for details)
[hashcat.git] / OpenCL / m06100_a3.cl
1 /**
2  * Authors.....: Jens Steube <jens.steube@gmail.com>
3  *               Gabriele Gristina <matrix@hashcat.net>
4  *
5  * License.....: MIT
6  */
7
8 #define _WHIRLPOOL_
9
10 #define NEW_SIMD_CODE
11
12 #include "include/constants.h"
13 #include "include/kernel_vendor.h"
14
15 #define DGST_R0 0
16 #define DGST_R1 1
17 #define DGST_R2 2
18 #define DGST_R3 3
19
20 #include "include/kernel_functions.c"
21 #include "OpenCL/types_ocl.c"
22 #include "OpenCL/common.c"
23 #include "OpenCL/simd.c"
24
25 #define R 10
26
27 #if   VECT_SIZE == 1
28 #define BOX(S,n,i) (S)[(n)][(i)]
29 #elif VECT_SIZE == 2
30 #define BOX(S,n,i) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1])
31 #elif VECT_SIZE == 4
32 #define BOX(S,n,i) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3])
33 #elif VECT_SIZE == 8
34 #define BOX(S,n,i) (u32x) ((S)[(n)][(i).s0], (S)[(n)][(i).s1], (S)[(n)][(i).s2], (S)[(n)][(i).s3], (S)[(n)][(i).s4], (S)[(n)][(i).s5], (S)[(n)][(i).s6], (S)[(n)][(i).s7])
35 #endif
36
37 __constant u32 Ch[8][256] =
38 {
39   {
40     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
41     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
42     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
43     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
44     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
45     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
46     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
47     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
48     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
49     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
50     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
51     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
52     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
53     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
54     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
55     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
56     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
57     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
58     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
59     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
60     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
61     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
62     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
63     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
64     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
65     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
66     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
67     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
68     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
69     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
70     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
71     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
72     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
73     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
74     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
75     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
76     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
77     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
78     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
79     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
80     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
81     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
82     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
83     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
84     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
85     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
86     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
87     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
88     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
89     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
90     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
91     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
92     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
93     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
94     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
95     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
96     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
97     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
98     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
99     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
100     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
101     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
102     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
103     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
104   },
105   {
106     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
107     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
108     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
109     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
110     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
111     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
112     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
113     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
114     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
115     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
116     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
117     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
118     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
119     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
120     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
121     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
122     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
123     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
124     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
125     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
126     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
127     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
128     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
129     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
130     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
131     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
132     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
133     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
134     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
135     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
136     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
137     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
138     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
139     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
140     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
141     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
142     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
143     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
144     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
145     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
146     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
147     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
148     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
149     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
150     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
151     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
152     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
153     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
154     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
155     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
156     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
157     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
158     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
159     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
160     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
161     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
162     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
163     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
164     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
165     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
166     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
167     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
168     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
169     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
170   },
171   {
172     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
173     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
174     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
175     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
176     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
177     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
178     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
179     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
180     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
181     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
182     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
183     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
184     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
185     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
186     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
187     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
188     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
189     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
190     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
191     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
192     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
193     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
194     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
195     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
196     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
197     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
198     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
199     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
200     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
201     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
202     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
203     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
204     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
205     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
206     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
207     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
208     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
209     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
210     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
211     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
212     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
213     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
214     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
215     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
216     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
217     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
218     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
219     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
220     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
221     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
222     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
223     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
224     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
225     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
226     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
227     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
228     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
229     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
230     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
231     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
232     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
233     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
234     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
235     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
236   },
237   {
238     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
239     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
240     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
241     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
242     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
243     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
244     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
245     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
246     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
247     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
248     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
249     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
250     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
251     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
252     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
253     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
254     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
255     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
256     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
257     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
258     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
259     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
260     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
261     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
262     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
263     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
264     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
265     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
266     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
267     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
268     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
269     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
270     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
271     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
272     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
273     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
274     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
275     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
276     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
277     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
278     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
279     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
280     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
281     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
282     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
283     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
284     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
285     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
286     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
287     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
288     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
289     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
290     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
291     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
292     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
293     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
294     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
295     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
296     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
297     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
298     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
299     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
300     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
301     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
302   },
303   {
304     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
305     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
306     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
307     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
308     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
309     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
310     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
311     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
312     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
313     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
314     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
315     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
316     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
317     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
318     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
319     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
320     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
321     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
322     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
323     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
324     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
325     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
326     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
327     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
328     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
329     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
330     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
331     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
332     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
333     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
334     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
335     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
336     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
337     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
338     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
339     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
340     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
341     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
342     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
343     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
344     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
345     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
346     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
347     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
348     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
349     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
350     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
351     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
352     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
353     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
354     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
355     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
356     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
357     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
358     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
359     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
360     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
361     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
362     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
363     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
364     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
365     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
366     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
367     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
368   },
369   {
370     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
371     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
372     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
373     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
374     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
375     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
376     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
377     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
378     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
379     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
380     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
381     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
382     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
383     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
384     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
385     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
386     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
387     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
388     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
389     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
390     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
391     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
392     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
393     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
394     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
395     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
396     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
397     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
398     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
399     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
400     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
401     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
402     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
403     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
404     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
405     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
406     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
407     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
408     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
409     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
410     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
411     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
412     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
413     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
414     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
415     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
416     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
417     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
418     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
419     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
420     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
421     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
422     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
423     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
424     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
425     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
426     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
427     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
428     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
429     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
430     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
431     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
432     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
433     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
434   },
435   {
436     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
437     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
438     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
439     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
440     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
441     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
442     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
443     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
444     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
445     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
446     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
447     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
448     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
449     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
450     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
451     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
452     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
453     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
454     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
455     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
456     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
457     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
458     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
459     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
460     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
461     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
462     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
463     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
464     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
465     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
466     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
467     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
468     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
469     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
470     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
471     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
472     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
473     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
474     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
475     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
476     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
477     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
478     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
479     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
480     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
481     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
482     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
483     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
484     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
485     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
486     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
487     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
488     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
489     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
490     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
491     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
492     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
493     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
494     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
495     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
496     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
497     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
498     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
499     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
500   },
501   {
502     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
503     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
504     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
505     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
506     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
507     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
508     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
509     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
510     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
511     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
512     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
513     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
514     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
515     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
516     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
517     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
518     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
519     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
520     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
521     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
522     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
523     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
524     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
525     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
526     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
527     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
528     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
529     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
530     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
531     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
532     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
533     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
534     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
535     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
536     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
537     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
538     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
539     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
540     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
541     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
542     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
543     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
544     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
545     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
546     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
547     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
548     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
549     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
550     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
551     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
552     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
553     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
554     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
555     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
556     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
557     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
558     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
559     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
560     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
561     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
562     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
563     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
564     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
565     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
566   }
567 };
568
569 __constant u32 Cl[8][256] =
570 {
571   {
572     0xc07830d8, 0x05af4626, 0x7ef991b8, 0x136fcdfb,
573     0x4ca113cb, 0xa9626d11, 0x08050209, 0x426e9e0d,
574     0xadee6c9b, 0x590451ff, 0xdebdb90c, 0xfb06f70e,
575     0xef80f296, 0x5fcede30, 0xfcef3f6d, 0xaa07a4f8,
576     0x27fdc047, 0x89766535, 0xaccd2b37, 0x048c018a,
577     0x71155bd2, 0x603c186c, 0xff8af684, 0xb5e16a80,
578     0xe8693af5, 0x5347ddb3, 0xf6acb321, 0x5eed999c,
579     0x6d965c43, 0x627a9629, 0xa321e15d, 0x8216aed5,
580     0xa8412abd, 0x9fb6eee8, 0xa5eb6e92, 0x7b56d79e,
581     0x8cd92313, 0xd317fd23, 0x6a7f9420, 0x9e95a944,
582     0xfa25b0a2, 0x06ca8fcf, 0x558d527c, 0x5022145a,
583     0xe14f7f50, 0x691a5dc9, 0x7fdad614, 0x5cab17d9,
584     0x8173673c, 0xd234ba8f, 0x80502090, 0xf303f507,
585     0x16c08bdd, 0xedc67cd3, 0x28110a2d, 0x1fe6ce78,
586     0x7353d597, 0x25bb4e02, 0x32588273, 0x2c9d0ba7,
587     0x510153f6, 0xcf94fab2, 0xdcfb3749, 0x8e9fad56,
588     0x8b30eb70, 0x2371c1cd, 0xc791f8bb, 0x17e3cc71,
589     0xa68ea77b, 0xb84b2eaf, 0x02468e45, 0x84dc211a,
590     0x1ec589d4, 0x75995a58, 0x9179632e, 0x381b0e3f,
591     0x012347ac, 0xea2fb4b0, 0x6cb51bef, 0x85ff66b6,
592     0x3ff2c65c, 0x100a0412, 0x39384993, 0xafa8e2de,
593     0x0ecf8dc6, 0xc87d32d1, 0x7270923b, 0x869aaf5f,
594     0xc31df931, 0x4b48dba8, 0xe22ab6b9, 0x34920dbc,
595     0xa4c8293e, 0x2dbe4c0b, 0x8dfa64bf, 0xe94a7d59,
596     0x1b6acff2, 0x78331e77, 0xe6a6b733, 0x74ba1df4,
597     0x997c6127, 0x26de87eb, 0xbde46889, 0x7a759032,
598     0xab24e354, 0xf78ff48d, 0xf4ea3d64, 0xc23ebe9d,
599     0x1da0403d, 0x67d5d00f, 0xd07234ca, 0x192c41b7,
600     0xc95e757d, 0x9a19a8ce, 0xece53b7f, 0x0daa442f,
601     0x07e9c863, 0xdb12ff2a, 0xbfa2e6cc, 0x905a2482,
602     0x3a5d807a, 0x40281048, 0x56e89b95, 0x337bc5df,
603     0x9690ab4d, 0x611f5fc0, 0x1c830791, 0xf5c97ac8,
604     0xccf1335b, 0x00000000, 0x36d483f9, 0x4587566e,
605     0x97b3ece1, 0x64b019e6, 0xfea9b128, 0xd87736c3,
606     0xc15b7774, 0x112943be, 0x77dfd41d, 0xba0da0ea,
607     0x124c8a57, 0xcb18fb38, 0x9df060ad, 0x2b74c3c4,
608     0xe5c37eda, 0x921caac7, 0x791059db, 0x0365c9e9,
609     0x0fecca6a, 0xb9686903, 0x65935e4a, 0x4ee79d8e,
610     0xbe81a160, 0xe06c38fc, 0xbb2ee746, 0x52649a1f,
611     0xe4e03976, 0x8fbceafa, 0x301e0c36, 0x249809ae,
612     0xf940794b, 0x6359d185, 0x70361c7e, 0xf8633ee7,
613     0x37f7c455, 0xeea3b53a, 0x29324d81, 0xc4f43152,
614     0x9b3aef62, 0x66f697a3, 0x35b14a10, 0xf220b2ab,
615     0x54ae15d0, 0xb7a7e4c5, 0xd5dd72ec, 0x5a619816,
616     0xca3bbc94, 0xe785f09f, 0xddd870e5, 0x14860598,
617     0xc6b2bf17, 0x410b57e4, 0x434dd9a1, 0x2ff8c24e,
618     0xf1457b42, 0x15a54234, 0x94d62508, 0xf0663cee,
619     0x22528661, 0x76fc93b1, 0xb32be54f, 0x20140824,
620     0xb208a2e3, 0xbcc72f25, 0x4fc4da22, 0x68391a65,
621     0x8335e979, 0xb684a369, 0xd79bfca9, 0x3db44819,
622     0xc5d776fe, 0x313d4b9a, 0x3ed181f0, 0x88552299,
623     0x0c890383, 0x4a6b9c04, 0xd1517366, 0x0b60cbe0,
624     0xfdcc78c1, 0x7cbf1ffd, 0xd4fe3540, 0xeb0cf31c,
625     0xa1676f18, 0x985f268b, 0x7d9c5851, 0xd6b8bb05,
626     0x6b5cd38c, 0x57cbdc39, 0x6ef395aa, 0x180f061b,
627     0x8a13acdc, 0x1a49885e, 0xdf9efea0, 0x21374f88,
628     0x4d825467, 0xb16d6b0a, 0x46e29f87, 0xa202a6f1,
629     0xae8ba572, 0x58271653, 0x9cd32701, 0x47c1d82b,
630     0x95f562a4, 0x87b9e8f3, 0xe309f115, 0x0a438c4c,
631     0x092645a5, 0x3c970fb5, 0xa04428b4, 0x5b42dfba,
632     0xb04e2ca6, 0xcdd274f7, 0x6fd0d206, 0x482d1241,
633     0xa7ade0d7, 0xd954716f, 0xceb7bd1e, 0x3b7ec7d6,
634     0x2edb85e2, 0x2a578468, 0xb4c22d2c, 0x490e55ed,
635     0x5d885075, 0xda31b886, 0x933fed6b, 0x44a411c2,
636   },
637   {
638     0x18c07830, 0x2305af46, 0xc67ef991, 0xe8136fcd,
639     0x874ca113, 0xb8a9626d, 0x01080502, 0x4f426e9e,
640     0x36adee6c, 0xa6590451, 0xd2debdb9, 0xf5fb06f7,
641     0x79ef80f2, 0x6f5fcede, 0x91fcef3f, 0x52aa07a4,
642     0x6027fdc0, 0xbc897665, 0x9baccd2b, 0x8e048c01,
643     0xa371155b, 0x0c603c18, 0x7bff8af6, 0x35b5e16a,
644     0x1de8693a, 0xe05347dd, 0xd7f6acb3, 0xc25eed99,
645     0x2e6d965c, 0x4b627a96, 0xfea321e1, 0x578216ae,
646     0x15a8412a, 0x779fb6ee, 0x37a5eb6e, 0xe57b56d7,
647     0x9f8cd923, 0xf0d317fd, 0x4a6a7f94, 0xda9e95a9,
648     0x58fa25b0, 0xc906ca8f, 0x29558d52, 0x0a502214,
649     0xb1e14f7f, 0xa0691a5d, 0x6b7fdad6, 0x855cab17,
650     0xbd817367, 0x5dd234ba, 0x10805020, 0xf4f303f5,
651     0xcb16c08b, 0x3eedc67c, 0x0528110a, 0x671fe6ce,
652     0xe47353d5, 0x2725bb4e, 0x41325882, 0x8b2c9d0b,
653     0xa7510153, 0x7dcf94fa, 0x95dcfb37, 0xd88e9fad,
654     0xfb8b30eb, 0xee2371c1, 0x7cc791f8, 0x6617e3cc,
655     0xdda68ea7, 0x17b84b2e, 0x4702468e, 0x9e84dc21,
656     0xca1ec589, 0x2d75995a, 0xbf917963, 0x07381b0e,
657     0xad012347, 0x5aea2fb4, 0x836cb51b, 0x3385ff66,
658     0x633ff2c6, 0x02100a04, 0xaa393849, 0x71afa8e2,
659     0xc80ecf8d, 0x19c87d32, 0x49727092, 0xd9869aaf,
660     0xf2c31df9, 0xe34b48db, 0x5be22ab6, 0x8834920d,
661     0x9aa4c829, 0x262dbe4c, 0x328dfa64, 0xb0e94a7d,
662     0xe91b6acf, 0x0f78331e, 0xd5e6a6b7, 0x8074ba1d,
663     0xbe997c61, 0xcd26de87, 0x34bde468, 0x487a7590,
664     0xffab24e3, 0x7af78ff4, 0x90f4ea3d, 0x5fc23ebe,
665     0x201da040, 0x6867d5d0, 0x1ad07234, 0xae192c41,
666     0xb4c95e75, 0x549a19a8, 0x93ece53b, 0x220daa44,
667     0x6407e9c8, 0xf1db12ff, 0x73bfa2e6, 0x12905a24,
668     0x403a5d80, 0x08402810, 0xc356e89b, 0xec337bc5,
669     0xdb9690ab, 0xa1611f5f, 0x8d1c8307, 0x3df5c97a,
670     0x97ccf133, 0x00000000, 0xcf36d483, 0x2b458756,
671     0x7697b3ec, 0x8264b019, 0xd6fea9b1, 0x1bd87736,
672     0xb5c15b77, 0xaf112943, 0x6a77dfd4, 0x50ba0da0,
673     0x45124c8a, 0xf3cb18fb, 0x309df060, 0xef2b74c3,
674     0x3fe5c37e, 0x55921caa, 0xa2791059, 0xea0365c9,
675     0x650fecca, 0xbab96869, 0x2f65935e, 0xc04ee79d,
676     0xdebe81a1, 0x1ce06c38, 0xfdbb2ee7, 0x4d52649a,
677     0x92e4e039, 0x758fbcea, 0x06301e0c, 0x8a249809,
678     0xb2f94079, 0xe66359d1, 0x0e70361c, 0x1ff8633e,
679     0x6237f7c4, 0xd4eea3b5, 0xa829324d, 0x96c4f431,
680     0xf99b3aef, 0xc566f697, 0x2535b14a, 0x59f220b2,
681     0x8454ae15, 0x72b7a7e4, 0x39d5dd72, 0x4c5a6198,
682     0x5eca3bbc, 0x78e785f0, 0x38ddd870, 0x8c148605,
683     0xd1c6b2bf, 0xa5410b57, 0xe2434dd9, 0x612ff8c2,
684     0xb3f1457b, 0x2115a542, 0x9c94d625, 0x1ef0663c,
685     0x43225286, 0xc776fc93, 0xfcb32be5, 0x04201408,
686     0x51b208a2, 0x99bcc72f, 0x6d4fc4da, 0x0d68391a,
687     0xfa8335e9, 0xdfb684a3, 0x7ed79bfc, 0x243db448,
688     0x3bc5d776, 0xab313d4b, 0xce3ed181, 0x11885522,
689     0x8f0c8903, 0x4e4a6b9c, 0xb7d15173, 0xeb0b60cb,
690     0x3cfdcc78, 0x817cbf1f, 0x94d4fe35, 0xf7eb0cf3,
691     0xb9a1676f, 0x13985f26, 0x2c7d9c58, 0xd3d6b8bb,
692     0xe76b5cd3, 0x6e57cbdc, 0xc46ef395, 0x03180f06,
693     0x568a13ac, 0x441a4988, 0x7fdf9efe, 0xa921374f,
694     0x2a4d8254, 0xbbb16d6b, 0xc146e29f, 0x53a202a6,
695     0xdcae8ba5, 0x0b582716, 0x9d9cd327, 0x6c47c1d8,
696     0x3195f562, 0x7487b9e8, 0xf6e309f1, 0x460a438c,
697     0xac092645, 0x893c970f, 0x14a04428, 0xe15b42df,
698     0x16b04e2c, 0x3acdd274, 0x696fd0d2, 0x09482d12,
699     0x70a7ade0, 0xb6d95471, 0xd0ceb7bd, 0xed3b7ec7,
700     0xcc2edb85, 0x422a5784, 0x98b4c22d, 0xa4490e55,
701     0x285d8850, 0x5cda31b8, 0xf8933fed, 0x8644a411,
702   },
703   {
704     0x6018c078, 0x8c2305af, 0x3fc67ef9, 0x87e8136f,
705     0x26874ca1, 0xdab8a962, 0x04010805, 0x214f426e,
706     0xd836adee, 0xa2a65904, 0x6fd2debd, 0xf3f5fb06,
707     0xf979ef80, 0xa16f5fce, 0x7e91fcef, 0x5552aa07,
708     0x9d6027fd, 0xcabc8976, 0x569baccd, 0x028e048c,
709     0xb6a37115, 0x300c603c, 0xf17bff8a, 0xd435b5e1,
710     0x741de869, 0xa7e05347, 0x7bd7f6ac, 0x2fc25eed,
711     0xb82e6d96, 0x314b627a, 0xdffea321, 0x41578216,
712     0x5415a841, 0xc1779fb6, 0xdc37a5eb, 0xb3e57b56,
713     0x469f8cd9, 0xe7f0d317, 0x354a6a7f, 0x4fda9e95,
714     0x7d58fa25, 0x03c906ca, 0xa429558d, 0x280a5022,
715     0xfeb1e14f, 0xbaa0691a, 0xb16b7fda, 0x2e855cab,
716     0xcebd8173, 0x695dd234, 0x40108050, 0xf7f4f303,
717     0x0bcb16c0, 0xf83eedc6, 0x14052811, 0x81671fe6,
718     0xb7e47353, 0x9c2725bb, 0x19413258, 0x168b2c9d,
719     0xa6a75101, 0xe97dcf94, 0x6e95dcfb, 0x47d88e9f,
720     0xcbfb8b30, 0x9fee2371, 0xed7cc791, 0x856617e3,
721     0x53dda68e, 0x5c17b84b, 0x01470246, 0x429e84dc,
722     0x0fca1ec5, 0xb42d7599, 0xc6bf9179, 0x1c07381b,
723     0x8ead0123, 0x755aea2f, 0x36836cb5, 0xcc3385ff,
724     0x91633ff2, 0x0802100a, 0x92aa3938, 0xd971afa8,
725     0x07c80ecf, 0x6419c87d, 0x39497270, 0x43d9869a,
726     0xeff2c31d, 0xabe34b48, 0x715be22a, 0x1a883492,
727     0x529aa4c8, 0x98262dbe, 0xc8328dfa, 0xfab0e94a,
728     0x83e91b6a, 0x3c0f7833, 0x73d5e6a6, 0x3a8074ba,
729     0xc2be997c, 0x13cd26de, 0xd034bde4, 0x3d487a75,
730     0xdbffab24, 0xf57af78f, 0x7a90f4ea, 0x615fc23e,
731     0x80201da0, 0xbd6867d5, 0x681ad072, 0x82ae192c,
732     0xeab4c95e, 0x4d549a19, 0x7693ece5, 0x88220daa,
733     0x8d6407e9, 0xe3f1db12, 0xd173bfa2, 0x4812905a,
734     0x1d403a5d, 0x20084028, 0x2bc356e8, 0x97ec337b,
735     0x4bdb9690, 0xbea1611f, 0x0e8d1c83, 0xf43df5c9,
736     0x6697ccf1, 0x00000000, 0x1bcf36d4, 0xac2b4587,
737     0xc57697b3, 0x328264b0, 0x7fd6fea9, 0x6c1bd877,
738     0xeeb5c15b, 0x86af1129, 0xb56a77df, 0x5d50ba0d,
739     0x0945124c, 0xebf3cb18, 0xc0309df0, 0x9bef2b74,
740     0xfc3fe5c3, 0x4955921c, 0xb2a27910, 0x8fea0365,
741     0x89650fec, 0xd2bab968, 0xbc2f6593, 0x27c04ee7,
742     0x5fdebe81, 0x701ce06c, 0xd3fdbb2e, 0x294d5264,
743     0x7292e4e0, 0xc9758fbc, 0x1806301e, 0x128a2498,
744     0xf2b2f940, 0xbfe66359, 0x380e7036, 0x7c1ff863,
745     0x956237f7, 0x77d4eea3, 0x9aa82932, 0x6296c4f4,
746     0xc3f99b3a, 0x33c566f6, 0x942535b1, 0x7959f220,
747     0x2a8454ae, 0xd572b7a7, 0xe439d5dd, 0x2d4c5a61,
748     0x655eca3b, 0xfd78e785, 0xe038ddd8, 0x0a8c1486,
749     0x63d1c6b2, 0xaea5410b, 0xafe2434d, 0x99612ff8,
750     0xf6b3f145, 0x842115a5, 0x4a9c94d6, 0x781ef066,
751     0x11432252, 0x3bc776fc, 0xd7fcb32b, 0x10042014,
752     0x5951b208, 0x5e99bcc7, 0xa96d4fc4, 0x340d6839,
753     0xcffa8335, 0x5bdfb684, 0xe57ed79b, 0x90243db4,
754     0xec3bc5d7, 0x96ab313d, 0x1fce3ed1, 0x44118855,
755     0x068f0c89, 0x254e4a6b, 0xe6b7d151, 0x8beb0b60,
756     0xf03cfdcc, 0x3e817cbf, 0x6a94d4fe, 0xfbf7eb0c,
757     0xdeb9a167, 0x4c13985f, 0xb02c7d9c, 0x6bd3d6b8,
758     0xbbe76b5c, 0xa56e57cb, 0x37c46ef3, 0x0c03180f,
759     0x45568a13, 0x0d441a49, 0xe17fdf9e, 0x9ea92137,
760     0xa82a4d82, 0xd6bbb16d, 0x23c146e2, 0x5153a202,
761     0x57dcae8b, 0x2c0b5827, 0x4e9d9cd3, 0xad6c47c1,
762     0xc43195f5, 0xcd7487b9, 0xfff6e309, 0x05460a43,
763     0x8aac0926, 0x1e893c97, 0x5014a044, 0xa3e15b42,
764     0x5816b04e, 0xe83acdd2, 0xb9696fd0, 0x2409482d,
765     0xdd70a7ad, 0xe2b6d954, 0x67d0ceb7, 0x93ed3b7e,
766     0x17cc2edb, 0x15422a57, 0x5a98b4c2, 0xaaa4490e,
767     0xa0285d88, 0x6d5cda31, 0xc7f8933f, 0x228644a4,
768   },
769   {
770     0x186018c0, 0x238c2305, 0xc63fc67e, 0xe887e813,
771     0x8726874c, 0xb8dab8a9, 0x01040108, 0x4f214f42,
772     0x36d836ad, 0xa6a2a659, 0xd26fd2de, 0xf5f3f5fb,
773     0x79f979ef, 0x6fa16f5f, 0x917e91fc, 0x525552aa,
774     0x609d6027, 0xbccabc89, 0x9b569bac, 0x8e028e04,
775     0xa3b6a371, 0x0c300c60, 0x7bf17bff, 0x35d435b5,
776     0x1d741de8, 0xe0a7e053, 0xd77bd7f6, 0xc22fc25e,
777     0x2eb82e6d, 0x4b314b62, 0xfedffea3, 0x57415782,
778     0x155415a8, 0x77c1779f, 0x37dc37a5, 0xe5b3e57b,
779     0x9f469f8c, 0xf0e7f0d3, 0x4a354a6a, 0xda4fda9e,
780     0x587d58fa, 0xc903c906, 0x29a42955, 0x0a280a50,
781     0xb1feb1e1, 0xa0baa069, 0x6bb16b7f, 0x852e855c,
782     0xbdcebd81, 0x5d695dd2, 0x10401080, 0xf4f7f4f3,
783     0xcb0bcb16, 0x3ef83eed, 0x05140528, 0x6781671f,
784     0xe4b7e473, 0x279c2725, 0x41194132, 0x8b168b2c,
785     0xa7a6a751, 0x7de97dcf, 0x956e95dc, 0xd847d88e,
786     0xfbcbfb8b, 0xee9fee23, 0x7ced7cc7, 0x66856617,
787     0xdd53dda6, 0x175c17b8, 0x47014702, 0x9e429e84,
788     0xca0fca1e, 0x2db42d75, 0xbfc6bf91, 0x071c0738,
789     0xad8ead01, 0x5a755aea, 0x8336836c, 0x33cc3385,
790     0x6391633f, 0x02080210, 0xaa92aa39, 0x71d971af,
791     0xc807c80e, 0x196419c8, 0x49394972, 0xd943d986,
792     0xf2eff2c3, 0xe3abe34b, 0x5b715be2, 0x881a8834,
793     0x9a529aa4, 0x2698262d, 0x32c8328d, 0xb0fab0e9,
794     0xe983e91b, 0x0f3c0f78, 0xd573d5e6, 0x803a8074,
795     0xbec2be99, 0xcd13cd26, 0x34d034bd, 0x483d487a,
796     0xffdbffab, 0x7af57af7, 0x907a90f4, 0x5f615fc2,
797     0x2080201d, 0x68bd6867, 0x1a681ad0, 0xae82ae19,
798     0xb4eab4c9, 0x544d549a, 0x937693ec, 0x2288220d,
799     0x648d6407, 0xf1e3f1db, 0x73d173bf, 0x12481290,
800     0x401d403a, 0x08200840, 0xc32bc356, 0xec97ec33,
801     0xdb4bdb96, 0xa1bea161, 0x8d0e8d1c, 0x3df43df5,
802     0x976697cc, 0x00000000, 0xcf1bcf36, 0x2bac2b45,
803     0x76c57697, 0x82328264, 0xd67fd6fe, 0x1b6c1bd8,
804     0xb5eeb5c1, 0xaf86af11, 0x6ab56a77, 0x505d50ba,
805     0x45094512, 0xf3ebf3cb, 0x30c0309d, 0xef9bef2b,
806     0x3ffc3fe5, 0x55495592, 0xa2b2a279, 0xea8fea03,
807     0x6589650f, 0xbad2bab9, 0x2fbc2f65, 0xc027c04e,
808     0xde5fdebe, 0x1c701ce0, 0xfdd3fdbb, 0x4d294d52,
809     0x927292e4, 0x75c9758f, 0x06180630, 0x8a128a24,
810     0xb2f2b2f9, 0xe6bfe663, 0x0e380e70, 0x1f7c1ff8,
811     0x62956237, 0xd477d4ee, 0xa89aa829, 0x966296c4,
812     0xf9c3f99b, 0xc533c566, 0x25942535, 0x597959f2,
813     0x842a8454, 0x72d572b7, 0x39e439d5, 0x4c2d4c5a,
814     0x5e655eca, 0x78fd78e7, 0x38e038dd, 0x8c0a8c14,
815     0xd163d1c6, 0xa5aea541, 0xe2afe243, 0x6199612f,
816     0xb3f6b3f1, 0x21842115, 0x9c4a9c94, 0x1e781ef0,
817     0x43114322, 0xc73bc776, 0xfcd7fcb3, 0x04100420,
818     0x515951b2, 0x995e99bc, 0x6da96d4f, 0x0d340d68,
819     0xfacffa83, 0xdf5bdfb6, 0x7ee57ed7, 0x2490243d,
820     0x3bec3bc5, 0xab96ab31, 0xce1fce3e, 0x11441188,
821     0x8f068f0c, 0x4e254e4a, 0xb7e6b7d1, 0xeb8beb0b,
822     0x3cf03cfd, 0x813e817c, 0x946a94d4, 0xf7fbf7eb,
823     0xb9deb9a1, 0x134c1398, 0x2cb02c7d, 0xd36bd3d6,
824     0xe7bbe76b, 0x6ea56e57, 0xc437c46e, 0x030c0318,
825     0x5645568a, 0x440d441a, 0x7fe17fdf, 0xa99ea921,
826     0x2aa82a4d, 0xbbd6bbb1, 0xc123c146, 0x535153a2,
827     0xdc57dcae, 0x0b2c0b58, 0x9d4e9d9c, 0x6cad6c47,
828     0x31c43195, 0x74cd7487, 0xf6fff6e3, 0x4605460a,
829     0xac8aac09, 0x891e893c, 0x145014a0, 0xe1a3e15b,
830     0x165816b0, 0x3ae83acd, 0x69b9696f, 0x09240948,
831     0x70dd70a7, 0xb6e2b6d9, 0xd067d0ce, 0xed93ed3b,
832     0xcc17cc2e, 0x4215422a, 0x985a98b4, 0xa4aaa449,
833     0x28a0285d, 0x5c6d5cda, 0xf8c7f893, 0x86228644,
834   },
835   {
836     0x18186018, 0x23238c23, 0xc6c63fc6, 0xe8e887e8,
837     0x87872687, 0xb8b8dab8, 0x01010401, 0x4f4f214f,
838     0x3636d836, 0xa6a6a2a6, 0xd2d26fd2, 0xf5f5f3f5,
839     0x7979f979, 0x6f6fa16f, 0x91917e91, 0x52525552,
840     0x60609d60, 0xbcbccabc, 0x9b9b569b, 0x8e8e028e,
841     0xa3a3b6a3, 0x0c0c300c, 0x7b7bf17b, 0x3535d435,
842     0x1d1d741d, 0xe0e0a7e0, 0xd7d77bd7, 0xc2c22fc2,
843     0x2e2eb82e, 0x4b4b314b, 0xfefedffe, 0x57574157,
844     0x15155415, 0x7777c177, 0x3737dc37, 0xe5e5b3e5,
845     0x9f9f469f, 0xf0f0e7f0, 0x4a4a354a, 0xdada4fda,
846     0x58587d58, 0xc9c903c9, 0x2929a429, 0x0a0a280a,
847     0xb1b1feb1, 0xa0a0baa0, 0x6b6bb16b, 0x85852e85,
848     0xbdbdcebd, 0x5d5d695d, 0x10104010, 0xf4f4f7f4,
849     0xcbcb0bcb, 0x3e3ef83e, 0x05051405, 0x67678167,
850     0xe4e4b7e4, 0x27279c27, 0x41411941, 0x8b8b168b,
851     0xa7a7a6a7, 0x7d7de97d, 0x95956e95, 0xd8d847d8,
852     0xfbfbcbfb, 0xeeee9fee, 0x7c7ced7c, 0x66668566,
853     0xdddd53dd, 0x17175c17, 0x47470147, 0x9e9e429e,
854     0xcaca0fca, 0x2d2db42d, 0xbfbfc6bf, 0x07071c07,
855     0xadad8ead, 0x5a5a755a, 0x83833683, 0x3333cc33,
856     0x63639163, 0x02020802, 0xaaaa92aa, 0x7171d971,
857     0xc8c807c8, 0x19196419, 0x49493949, 0xd9d943d9,
858     0xf2f2eff2, 0xe3e3abe3, 0x5b5b715b, 0x88881a88,
859     0x9a9a529a, 0x26269826, 0x3232c832, 0xb0b0fab0,
860     0xe9e983e9, 0x0f0f3c0f, 0xd5d573d5, 0x80803a80,
861     0xbebec2be, 0xcdcd13cd, 0x3434d034, 0x48483d48,
862     0xffffdbff, 0x7a7af57a, 0x90907a90, 0x5f5f615f,
863     0x20208020, 0x6868bd68, 0x1a1a681a, 0xaeae82ae,
864     0xb4b4eab4, 0x54544d54, 0x93937693, 0x22228822,
865     0x64648d64, 0xf1f1e3f1, 0x7373d173, 0x12124812,
866     0x40401d40, 0x08082008, 0xc3c32bc3, 0xecec97ec,
867     0xdbdb4bdb, 0xa1a1bea1, 0x8d8d0e8d, 0x3d3df43d,
868     0x97976697, 0x00000000, 0xcfcf1bcf, 0x2b2bac2b,
869     0x7676c576, 0x82823282, 0xd6d67fd6, 0x1b1b6c1b,
870     0xb5b5eeb5, 0xafaf86af, 0x6a6ab56a, 0x50505d50,
871     0x45450945, 0xf3f3ebf3, 0x3030c030, 0xefef9bef,
872     0x3f3ffc3f, 0x55554955, 0xa2a2b2a2, 0xeaea8fea,
873     0x65658965, 0xbabad2ba, 0x2f2fbc2f, 0xc0c027c0,
874     0xdede5fde, 0x1c1c701c, 0xfdfdd3fd, 0x4d4d294d,
875     0x92927292, 0x7575c975, 0x06061806, 0x8a8a128a,
876     0xb2b2f2b2, 0xe6e6bfe6, 0x0e0e380e, 0x1f1f7c1f,
877     0x62629562, 0xd4d477d4, 0xa8a89aa8, 0x96966296,
878     0xf9f9c3f9, 0xc5c533c5, 0x25259425, 0x59597959,
879     0x84842a84, 0x7272d572, 0x3939e439, 0x4c4c2d4c,
880     0x5e5e655e, 0x7878fd78, 0x3838e038, 0x8c8c0a8c,
881     0xd1d163d1, 0xa5a5aea5, 0xe2e2afe2, 0x61619961,
882     0xb3b3f6b3, 0x21218421, 0x9c9c4a9c, 0x1e1e781e,
883     0x43431143, 0xc7c73bc7, 0xfcfcd7fc, 0x04041004,
884     0x51515951, 0x99995e99, 0x6d6da96d, 0x0d0d340d,
885     0xfafacffa, 0xdfdf5bdf, 0x7e7ee57e, 0x24249024,
886     0x3b3bec3b, 0xabab96ab, 0xcece1fce, 0x11114411,
887     0x8f8f068f, 0x4e4e254e, 0xb7b7e6b7, 0xebeb8beb,
888     0x3c3cf03c, 0x81813e81, 0x94946a94, 0xf7f7fbf7,
889     0xb9b9deb9, 0x13134c13, 0x2c2cb02c, 0xd3d36bd3,
890     0xe7e7bbe7, 0x6e6ea56e, 0xc4c437c4, 0x03030c03,
891     0x56564556, 0x44440d44, 0x7f7fe17f, 0xa9a99ea9,
892     0x2a2aa82a, 0xbbbbd6bb, 0xc1c123c1, 0x53535153,
893     0xdcdc57dc, 0x0b0b2c0b, 0x9d9d4e9d, 0x6c6cad6c,
894     0x3131c431, 0x7474cd74, 0xf6f6fff6, 0x46460546,
895     0xacac8aac, 0x89891e89, 0x14145014, 0xe1e1a3e1,
896     0x16165816, 0x3a3ae83a, 0x6969b969, 0x09092409,
897     0x7070dd70, 0xb6b6e2b6, 0xd0d067d0, 0xeded93ed,
898     0xcccc17cc, 0x42421542, 0x98985a98, 0xa4a4aaa4,
899     0x2828a028, 0x5c5c6d5c, 0xf8f8c7f8, 0x86862286,
900   },
901   {
902     0xd8181860, 0x2623238c, 0xb8c6c63f, 0xfbe8e887,
903     0xcb878726, 0x11b8b8da, 0x09010104, 0x0d4f4f21,
904     0x9b3636d8, 0xffa6a6a2, 0x0cd2d26f, 0x0ef5f5f3,
905     0x967979f9, 0x306f6fa1, 0x6d91917e, 0xf8525255,
906     0x4760609d, 0x35bcbcca, 0x379b9b56, 0x8a8e8e02,
907     0xd2a3a3b6, 0x6c0c0c30, 0x847b7bf1, 0x803535d4,
908     0xf51d1d74, 0xb3e0e0a7, 0x21d7d77b, 0x9cc2c22f,
909     0x432e2eb8, 0x294b4b31, 0x5dfefedf, 0xd5575741,
910     0xbd151554, 0xe87777c1, 0x923737dc, 0x9ee5e5b3,
911     0x139f9f46, 0x23f0f0e7, 0x204a4a35, 0x44dada4f,
912     0xa258587d, 0xcfc9c903, 0x7c2929a4, 0x5a0a0a28,
913     0x50b1b1fe, 0xc9a0a0ba, 0x146b6bb1, 0xd985852e,
914     0x3cbdbdce, 0x8f5d5d69, 0x90101040, 0x07f4f4f7,
915     0xddcbcb0b, 0xd33e3ef8, 0x2d050514, 0x78676781,
916     0x97e4e4b7, 0x0227279c, 0x73414119, 0xa78b8b16,
917     0xf6a7a7a6, 0xb27d7de9, 0x4995956e, 0x56d8d847,
918     0x70fbfbcb, 0xcdeeee9f, 0xbb7c7ced, 0x71666685,
919     0x7bdddd53, 0xaf17175c, 0x45474701, 0x1a9e9e42,
920     0xd4caca0f, 0x582d2db4, 0x2ebfbfc6, 0x3f07071c,
921     0xacadad8e, 0xb05a5a75, 0xef838336, 0xb63333cc,
922     0x5c636391, 0x12020208, 0x93aaaa92, 0xde7171d9,
923     0xc6c8c807, 0xd1191964, 0x3b494939, 0x5fd9d943,
924     0x31f2f2ef, 0xa8e3e3ab, 0xb95b5b71, 0xbc88881a,
925     0x3e9a9a52, 0x0b262698, 0xbf3232c8, 0x59b0b0fa,
926     0xf2e9e983, 0x770f0f3c, 0x33d5d573, 0xf480803a,
927     0x27bebec2, 0xebcdcd13, 0x893434d0, 0x3248483d,
928     0x54ffffdb, 0x8d7a7af5, 0x6490907a, 0x9d5f5f61,
929     0x3d202080, 0x0f6868bd, 0xca1a1a68, 0xb7aeae82,
930     0x7db4b4ea, 0xce54544d, 0x7f939376, 0x2f222288,
931     0x6364648d, 0x2af1f1e3, 0xcc7373d1, 0x82121248,
932     0x7a40401d, 0x48080820, 0x95c3c32b, 0xdfecec97,
933     0x4ddbdb4b, 0xc0a1a1be, 0x918d8d0e, 0xc83d3df4,
934     0x5b979766, 0x00000000, 0xf9cfcf1b, 0x6e2b2bac,
935     0xe17676c5, 0xe6828232, 0x28d6d67f, 0xc31b1b6c,
936     0x74b5b5ee, 0xbeafaf86, 0x1d6a6ab5, 0xea50505d,
937     0x57454509, 0x38f3f3eb, 0xad3030c0, 0xc4efef9b,
938     0xda3f3ffc, 0xc7555549, 0xdba2a2b2, 0xe9eaea8f,
939     0x6a656589, 0x03babad2, 0x4a2f2fbc, 0x8ec0c027,
940     0x60dede5f, 0xfc1c1c70, 0x46fdfdd3, 0x1f4d4d29,
941     0x76929272, 0xfa7575c9, 0x36060618, 0xae8a8a12,
942     0x4bb2b2f2, 0x85e6e6bf, 0x7e0e0e38, 0xe71f1f7c,
943     0x55626295, 0x3ad4d477, 0x81a8a89a, 0x52969662,
944     0x62f9f9c3, 0xa3c5c533, 0x10252594, 0xab595979,
945     0xd084842a, 0xc57272d5, 0xec3939e4, 0x164c4c2d,
946     0x945e5e65, 0x9f7878fd, 0xe53838e0, 0x988c8c0a,
947     0x17d1d163, 0xe4a5a5ae, 0xa1e2e2af, 0x4e616199,
948     0x42b3b3f6, 0x34212184, 0x089c9c4a, 0xee1e1e78,
949     0x61434311, 0xb1c7c73b, 0x4ffcfcd7, 0x24040410,
950     0xe3515159, 0x2599995e, 0x226d6da9, 0x650d0d34,
951     0x79fafacf, 0x69dfdf5b, 0xa97e7ee5, 0x19242490,
952     0xfe3b3bec, 0x9aabab96, 0xf0cece1f, 0x99111144,
953     0x838f8f06, 0x044e4e25, 0x66b7b7e6, 0xe0ebeb8b,
954     0xc13c3cf0, 0xfd81813e, 0x4094946a, 0x1cf7f7fb,
955     0x18b9b9de, 0x8b13134c, 0x512c2cb0, 0x05d3d36b,
956     0x8ce7e7bb, 0x396e6ea5, 0xaac4c437, 0x1b03030c,
957     0xdc565645, 0x5e44440d, 0xa07f7fe1, 0x88a9a99e,
958     0x672a2aa8, 0x0abbbbd6, 0x87c1c123, 0xf1535351,
959     0x72dcdc57, 0x530b0b2c, 0x019d9d4e, 0x2b6c6cad,
960     0xa43131c4, 0xf37474cd, 0x15f6f6ff, 0x4c464605,
961     0xa5acac8a, 0xb589891e, 0xb4141450, 0xbae1e1a3,
962     0xa6161658, 0xf73a3ae8, 0x066969b9, 0x41090924,
963     0xd77070dd, 0x6fb6b6e2, 0x1ed0d067, 0xd6eded93,
964     0xe2cccc17, 0x68424215, 0x2c98985a, 0xeda4a4aa,
965     0x752828a0, 0x865c5c6d, 0x6bf8f8c7, 0xc2868622,
966   },
967   {
968     0x30d81818, 0x46262323, 0x91b8c6c6, 0xcdfbe8e8,
969     0x13cb8787, 0x6d11b8b8, 0x02090101, 0x9e0d4f4f,
970     0x6c9b3636, 0x51ffa6a6, 0xb90cd2d2, 0xf70ef5f5,
971     0xf2967979, 0xde306f6f, 0x3f6d9191, 0xa4f85252,
972     0xc0476060, 0x6535bcbc, 0x2b379b9b, 0x018a8e8e,
973     0x5bd2a3a3, 0x186c0c0c, 0xf6847b7b, 0x6a803535,
974     0x3af51d1d, 0xddb3e0e0, 0xb321d7d7, 0x999cc2c2,
975     0x5c432e2e, 0x96294b4b, 0xe15dfefe, 0xaed55757,
976     0x2abd1515, 0xeee87777, 0x6e923737, 0xd79ee5e5,
977     0x23139f9f, 0xfd23f0f0, 0x94204a4a, 0xa944dada,
978     0xb0a25858, 0x8fcfc9c9, 0x527c2929, 0x145a0a0a,
979     0x7f50b1b1, 0x5dc9a0a0, 0xd6146b6b, 0x17d98585,
980     0x673cbdbd, 0xba8f5d5d, 0x20901010, 0xf507f4f4,
981     0x8bddcbcb, 0x7cd33e3e, 0x0a2d0505, 0xce786767,
982     0xd597e4e4, 0x4e022727, 0x82734141, 0x0ba78b8b,
983     0x53f6a7a7, 0xfab27d7d, 0x37499595, 0xad56d8d8,
984     0xeb70fbfb, 0xc1cdeeee, 0xf8bb7c7c, 0xcc716666,
985     0xa77bdddd, 0x2eaf1717, 0x8e454747, 0x211a9e9e,
986     0x89d4caca, 0x5a582d2d, 0x632ebfbf, 0x0e3f0707,
987     0x47acadad, 0xb4b05a5a, 0x1bef8383, 0x66b63333,
988     0xc65c6363, 0x04120202, 0x4993aaaa, 0xe2de7171,
989     0x8dc6c8c8, 0x32d11919, 0x923b4949, 0xaf5fd9d9,
990     0xf931f2f2, 0xdba8e3e3, 0xb6b95b5b, 0x0dbc8888,
991     0x293e9a9a, 0x4c0b2626, 0x64bf3232, 0x7d59b0b0,
992     0xcff2e9e9, 0x1e770f0f, 0xb733d5d5, 0x1df48080,
993     0x6127bebe, 0x87ebcdcd, 0x68893434, 0x90324848,
994     0xe354ffff, 0xf48d7a7a, 0x3d649090, 0xbe9d5f5f,
995     0x403d2020, 0xd00f6868, 0x34ca1a1a, 0x41b7aeae,
996     0x757db4b4, 0xa8ce5454, 0x3b7f9393, 0x442f2222,
997     0xc8636464, 0xff2af1f1, 0xe6cc7373, 0x24821212,
998     0x807a4040, 0x10480808, 0x9b95c3c3, 0xc5dfecec,
999     0xab4ddbdb, 0x5fc0a1a1, 0x07918d8d, 0x7ac83d3d,
1000     0x335b9797, 0x00000000, 0x83f9cfcf, 0x566e2b2b,
1001     0xece17676, 0x19e68282, 0xb128d6d6, 0x36c31b1b,
1002     0x7774b5b5, 0x43beafaf, 0xd41d6a6a, 0xa0ea5050,
1003     0x8a574545, 0xfb38f3f3, 0x60ad3030, 0xc3c4efef,
1004     0x7eda3f3f, 0xaac75555, 0x59dba2a2, 0xc9e9eaea,
1005     0xca6a6565, 0x6903baba, 0x5e4a2f2f, 0x9d8ec0c0,
1006     0xa160dede, 0x38fc1c1c, 0xe746fdfd, 0x9a1f4d4d,
1007     0x39769292, 0xeafa7575, 0x0c360606, 0x09ae8a8a,
1008     0x794bb2b2, 0xd185e6e6, 0x1c7e0e0e, 0x3ee71f1f,
1009     0xc4556262, 0xb53ad4d4, 0x4d81a8a8, 0x31529696,
1010     0xef62f9f9, 0x97a3c5c5, 0x4a102525, 0xb2ab5959,
1011     0x15d08484, 0xe4c57272, 0x72ec3939, 0x98164c4c,
1012     0xbc945e5e, 0xf09f7878, 0x70e53838, 0x05988c8c,
1013     0xbf17d1d1, 0x57e4a5a5, 0xd9a1e2e2, 0xc24e6161,
1014     0x7b42b3b3, 0x42342121, 0x25089c9c, 0x3cee1e1e,
1015     0x86614343, 0x93b1c7c7, 0xe54ffcfc, 0x08240404,
1016     0xa2e35151, 0x2f259999, 0xda226d6d, 0x1a650d0d,
1017     0xe979fafa, 0xa369dfdf, 0xfca97e7e, 0x48192424,
1018     0x76fe3b3b, 0x4b9aabab, 0x81f0cece, 0x22991111,
1019     0x03838f8f, 0x9c044e4e, 0x7366b7b7, 0xcbe0ebeb,
1020     0x78c13c3c, 0x1ffd8181, 0x35409494, 0xf31cf7f7,
1021     0x6f18b9b9, 0x268b1313, 0x58512c2c, 0xbb05d3d3,
1022     0xd38ce7e7, 0xdc396e6e, 0x95aac4c4, 0x061b0303,
1023     0xacdc5656, 0x885e4444, 0xfea07f7f, 0x4f88a9a9,
1024     0x54672a2a, 0x6b0abbbb, 0x9f87c1c1, 0xa6f15353,
1025     0xa572dcdc, 0x16530b0b, 0x27019d9d, 0xd82b6c6c,
1026     0x62a43131, 0xe8f37474, 0xf115f6f6, 0x8c4c4646,
1027     0x45a5acac, 0x0fb58989, 0x28b41414, 0xdfbae1e1,
1028     0x2ca61616, 0x74f73a3a, 0xd2066969, 0x12410909,
1029     0xe0d77070, 0x716fb6b6, 0xbd1ed0d0, 0xc7d6eded,
1030     0x85e2cccc, 0x84684242, 0x2d2c9898, 0x55eda4a4,
1031     0x50752828, 0xb8865c5c, 0xed6bf8f8, 0x11c28686,
1032   },
1033   {
1034     0x7830d818, 0xaf462623, 0xf991b8c6, 0x6fcdfbe8,
1035     0xa113cb87, 0x626d11b8, 0x05020901, 0x6e9e0d4f,
1036     0xee6c9b36, 0x0451ffa6, 0xbdb90cd2, 0x06f70ef5,
1037     0x80f29679, 0xcede306f, 0xef3f6d91, 0x07a4f852,
1038     0xfdc04760, 0x766535bc, 0xcd2b379b, 0x8c018a8e,
1039     0x155bd2a3, 0x3c186c0c, 0x8af6847b, 0xe16a8035,
1040     0x693af51d, 0x47ddb3e0, 0xacb321d7, 0xed999cc2,
1041     0x965c432e, 0x7a96294b, 0x21e15dfe, 0x16aed557,
1042     0x412abd15, 0xb6eee877, 0xeb6e9237, 0x56d79ee5,
1043     0xd923139f, 0x17fd23f0, 0x7f94204a, 0x95a944da,
1044     0x25b0a258, 0xca8fcfc9, 0x8d527c29, 0x22145a0a,
1045     0x4f7f50b1, 0x1a5dc9a0, 0xdad6146b, 0xab17d985,
1046     0x73673cbd, 0x34ba8f5d, 0x50209010, 0x03f507f4,
1047     0xc08bddcb, 0xc67cd33e, 0x110a2d05, 0xe6ce7867,
1048     0x53d597e4, 0xbb4e0227, 0x58827341, 0x9d0ba78b,
1049     0x0153f6a7, 0x94fab27d, 0xfb374995, 0x9fad56d8,
1050     0x30eb70fb, 0x71c1cdee, 0x91f8bb7c, 0xe3cc7166,
1051     0x8ea77bdd, 0x4b2eaf17, 0x468e4547, 0xdc211a9e,
1052     0xc589d4ca, 0x995a582d, 0x79632ebf, 0x1b0e3f07,
1053     0x2347acad, 0x2fb4b05a, 0xb51bef83, 0xff66b633,
1054     0xf2c65c63, 0x0a041202, 0x384993aa, 0xa8e2de71,
1055     0xcf8dc6c8, 0x7d32d119, 0x70923b49, 0x9aaf5fd9,
1056     0x1df931f2, 0x48dba8e3, 0x2ab6b95b, 0x920dbc88,
1057     0xc8293e9a, 0xbe4c0b26, 0xfa64bf32, 0x4a7d59b0,
1058     0x6acff2e9, 0x331e770f, 0xa6b733d5, 0xba1df480,
1059     0x7c6127be, 0xde87ebcd, 0xe4688934, 0x75903248,
1060     0x24e354ff, 0x8ff48d7a, 0xea3d6490, 0x3ebe9d5f,
1061     0xa0403d20, 0xd5d00f68, 0x7234ca1a, 0x2c41b7ae,
1062     0x5e757db4, 0x19a8ce54, 0xe53b7f93, 0xaa442f22,
1063     0xe9c86364, 0x12ff2af1, 0xa2e6cc73, 0x5a248212,
1064     0x5d807a40, 0x28104808, 0xe89b95c3, 0x7bc5dfec,
1065     0x90ab4ddb, 0x1f5fc0a1, 0x8307918d, 0xc97ac83d,
1066     0xf1335b97, 0x00000000, 0xd483f9cf, 0x87566e2b,
1067     0xb3ece176, 0xb019e682, 0xa9b128d6, 0x7736c31b,
1068     0x5b7774b5, 0x2943beaf, 0xdfd41d6a, 0x0da0ea50,
1069     0x4c8a5745, 0x18fb38f3, 0xf060ad30, 0x74c3c4ef,
1070     0xc37eda3f, 0x1caac755, 0x1059dba2, 0x65c9e9ea,
1071     0xecca6a65, 0x686903ba, 0x935e4a2f, 0xe79d8ec0,
1072     0x81a160de, 0x6c38fc1c, 0x2ee746fd, 0x649a1f4d,
1073     0xe0397692, 0xbceafa75, 0x1e0c3606, 0x9809ae8a,
1074     0x40794bb2, 0x59d185e6, 0x361c7e0e, 0x633ee71f,
1075     0xf7c45562, 0xa3b53ad4, 0x324d81a8, 0xf4315296,
1076     0x3aef62f9, 0xf697a3c5, 0xb14a1025, 0x20b2ab59,
1077     0xae15d084, 0xa7e4c572, 0xdd72ec39, 0x6198164c,
1078     0x3bbc945e, 0x85f09f78, 0xd870e538, 0x8605988c,
1079     0xb2bf17d1, 0x0b57e4a5, 0x4dd9a1e2, 0xf8c24e61,
1080     0x457b42b3, 0xa5423421, 0xd625089c, 0x663cee1e,
1081     0x52866143, 0xfc93b1c7, 0x2be54ffc, 0x14082404,
1082     0x08a2e351, 0xc72f2599, 0xc4da226d, 0x391a650d,
1083     0x35e979fa, 0x84a369df, 0x9bfca97e, 0xb4481924,
1084     0xd776fe3b, 0x3d4b9aab, 0xd181f0ce, 0x55229911,
1085     0x8903838f, 0x6b9c044e, 0x517366b7, 0x60cbe0eb,
1086     0xcc78c13c, 0xbf1ffd81, 0xfe354094, 0x0cf31cf7,
1087     0x676f18b9, 0x5f268b13, 0x9c58512c, 0xb8bb05d3,
1088     0x5cd38ce7, 0xcbdc396e, 0xf395aac4, 0x0f061b03,
1089     0x13acdc56, 0x49885e44, 0x9efea07f, 0x374f88a9,
1090     0x8254672a, 0x6d6b0abb, 0xe29f87c1, 0x02a6f153,
1091     0x8ba572dc, 0x2716530b, 0xd327019d, 0xc1d82b6c,
1092     0xf562a431, 0xb9e8f374, 0x09f115f6, 0x438c4c46,
1093     0x2645a5ac, 0x970fb589, 0x4428b414, 0x42dfbae1,
1094     0x4e2ca616, 0xd274f73a, 0xd0d20669, 0x2d124109,
1095     0xade0d770, 0x54716fb6, 0xb7bd1ed0, 0x7ec7d6ed,
1096     0xdb85e2cc, 0x57846842, 0xc22d2c98, 0x0e55eda4,
1097     0x88507528, 0x31b8865c, 0x3fed6bf8, 0xa411c286,
1098   },
1099 };
1100
1101 __constant u32 rch[R + 1] =
1102 {
1103   0x00000000,
1104   0x1823c6e8,
1105   0x36a6d2f5,
1106   0x60bc9b8e,
1107   0x1de0d7c2,
1108   0x157737e5,
1109   0x58c9290a,
1110   0xbd5d10f4,
1111   0xe427418b,
1112   0xfbee7c66,
1113   0xca2dbf07,
1114 };
1115
1116 __constant u32 rcl[R + 1] =
1117 {
1118   0x00000000,
1119   0x87b8014f,
1120   0x796f9152,
1121   0xa30c7b35,
1122   0x2e4bfe57,
1123   0x9ff04ada,
1124   0xb1a06b85,
1125   0xcb3e0567,
1126   0xa77d95d8,
1127   0xdd17479e,
1128   0xad5a8333,
1129 };
1130
1131 // this is a highly optimized that assumes dgst[16] = { 0 }; only reuse of no 2nd transform is needed
1132
1133 static void whirlpool_transform (const u32x w[16], u32x dgst[16], __local u32 (*s_Ch)[256], __local u32 (*s_Cl)[256])
1134 {
1135   u32x Kh[8];
1136   u32x Kl[8];
1137
1138   Kh[0] = 0x300beec0;
1139   Kl[0] = 0xaf902967;
1140   Kh[1] = 0x28282828;
1141   Kl[1] = 0x28282828;
1142   Kh[2] = 0x28282828;
1143   Kl[2] = 0x28282828;
1144   Kh[3] = 0x28282828;
1145   Kl[3] = 0x28282828;
1146   Kh[4] = 0x28282828;
1147   Kl[4] = 0x28282828;
1148   Kh[5] = 0x28282828;
1149   Kl[5] = 0x28282828;
1150   Kh[6] = 0x28282828;
1151   Kl[6] = 0x28282828;
1152   Kh[7] = 0x28282828;
1153   Kl[7] = 0x28282828;
1154
1155   u32x stateh[8];
1156   u32x statel[8];
1157
1158   stateh[0] = w[ 0];
1159   statel[0] = w[ 1];
1160   stateh[1] = w[ 2];
1161   statel[1] = w[ 3];
1162   stateh[2] = w[ 4];
1163   statel[2] = w[ 5];
1164   stateh[3] = w[ 6];
1165   statel[3] = w[ 7];
1166   stateh[4] = w[ 8];
1167   statel[4] = w[ 9];
1168   stateh[5] = w[10];
1169   statel[5] = w[11];
1170   stateh[6] = w[12];
1171   statel[6] = w[13];
1172   stateh[7] = w[14];
1173   statel[7] = w[15];
1174
1175   u32x Lh[8];
1176   u32x Ll[8];
1177
1178   #pragma unroll
1179   for (int i = 0; i < 8; i++)
1180   {
1181     const u32x Lp0 = stateh[(i + 8) & 7] >> 24;
1182     const u32x Lp1 = stateh[(i + 7) & 7] >> 16;
1183     const u32x Lp2 = stateh[(i + 6) & 7] >>  8;
1184     const u32x Lp3 = stateh[(i + 5) & 7] >>  0;
1185     const u32x Lp4 = statel[(i + 4) & 7] >> 24;
1186     const u32x Lp5 = statel[(i + 3) & 7] >> 16;
1187     const u32x Lp6 = statel[(i + 2) & 7] >>  8;
1188     const u32x Lp7 = statel[(i + 1) & 7] >>  0;
1189
1190     Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1191           ^ BOX (s_Ch, 1, Lp1 & 0xff)
1192           ^ BOX (s_Ch, 2, Lp2 & 0xff)
1193           ^ BOX (s_Ch, 3, Lp3 & 0xff)
1194           ^ BOX (s_Ch, 4, Lp4 & 0xff)
1195           ^ BOX (s_Ch, 5, Lp5 & 0xff)
1196           ^ BOX (s_Ch, 6, Lp6 & 0xff)
1197           ^ BOX (s_Ch, 7, Lp7 & 0xff);
1198
1199     Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1200           ^ BOX (s_Cl, 1, Lp1 & 0xff)
1201           ^ BOX (s_Cl, 2, Lp2 & 0xff)
1202           ^ BOX (s_Cl, 3, Lp3 & 0xff)
1203           ^ BOX (s_Cl, 4, Lp4 & 0xff)
1204           ^ BOX (s_Cl, 5, Lp5 & 0xff)
1205           ^ BOX (s_Cl, 6, Lp6 & 0xff)
1206           ^ BOX (s_Cl, 7, Lp7 & 0xff);
1207   }
1208
1209   stateh[0] = Lh[0] ^ Kh[0];
1210   statel[0] = Ll[0] ^ Kl[0];
1211   stateh[1] = Lh[1] ^ Kh[1];
1212   statel[1] = Ll[1] ^ Kl[1];
1213   stateh[2] = Lh[2] ^ Kh[2];
1214   statel[2] = Ll[2] ^ Kl[2];
1215   stateh[3] = Lh[3] ^ Kh[3];
1216   statel[3] = Ll[3] ^ Kl[3];
1217   stateh[4] = Lh[4] ^ Kh[4];
1218   statel[4] = Ll[4] ^ Kl[4];
1219   stateh[5] = Lh[5] ^ Kh[5];
1220   statel[5] = Ll[5] ^ Kl[5];
1221   stateh[6] = Lh[6] ^ Kh[6];
1222   statel[6] = Ll[6] ^ Kl[6];
1223   stateh[7] = Lh[7] ^ Kh[7];
1224   statel[7] = Ll[7] ^ Kl[7];
1225
1226   for (int r = 2; r <= R; r++)
1227   {
1228     u32x Lh[8];
1229     u32x Ll[8];
1230
1231     #pragma unroll
1232     for (int i = 0; i < 8; i++)
1233     {
1234       const u32x Lp0 = Kh[(i + 8) & 7] >> 24;
1235       const u32x Lp1 = Kh[(i + 7) & 7] >> 16;
1236       const u32x Lp2 = Kh[(i + 6) & 7] >>  8;
1237       const u32x Lp3 = Kh[(i + 5) & 7] >>  0;
1238       const u32x Lp4 = Kl[(i + 4) & 7] >> 24;
1239       const u32x Lp5 = Kl[(i + 3) & 7] >> 16;
1240       const u32x Lp6 = Kl[(i + 2) & 7] >>  8;
1241       const u32x Lp7 = Kl[(i + 1) & 7] >>  0;
1242
1243       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1244             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1245             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1246             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1247             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1248             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1249             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1250             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1251
1252       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1253             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1254             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1255             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1256             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1257             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1258             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1259             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1260     }
1261
1262     Kh[0] = Lh[0] ^ rch[r];
1263     Kl[0] = Ll[0] ^ rcl[r];
1264     Kh[1] = Lh[1];
1265     Kl[1] = Ll[1];
1266     Kh[2] = Lh[2];
1267     Kl[2] = Ll[2];
1268     Kh[3] = Lh[3];
1269     Kl[3] = Ll[3];
1270     Kh[4] = Lh[4];
1271     Kl[4] = Ll[4];
1272     Kh[5] = Lh[5];
1273     Kl[5] = Ll[5];
1274     Kh[6] = Lh[6];
1275     Kl[6] = Ll[6];
1276     Kh[7] = Lh[7];
1277     Kl[7] = Ll[7];
1278
1279     #pragma unroll 8
1280     for (int i = 0; i < 8; i++)
1281     {
1282       const u32x Lp0 = stateh[(i + 8) & 7] >> 24;
1283       const u32x Lp1 = stateh[(i + 7) & 7] >> 16;
1284       const u32x Lp2 = stateh[(i + 6) & 7] >>  8;
1285       const u32x Lp3 = stateh[(i + 5) & 7] >>  0;
1286       const u32x Lp4 = statel[(i + 4) & 7] >> 24;
1287       const u32x Lp5 = statel[(i + 3) & 7] >> 16;
1288       const u32x Lp6 = statel[(i + 2) & 7] >>  8;
1289       const u32x Lp7 = statel[(i + 1) & 7] >>  0;
1290
1291       Lh[i] = BOX (s_Ch, 0, Lp0 & 0xff)
1292             ^ BOX (s_Ch, 1, Lp1 & 0xff)
1293             ^ BOX (s_Ch, 2, Lp2 & 0xff)
1294             ^ BOX (s_Ch, 3, Lp3 & 0xff)
1295             ^ BOX (s_Ch, 4, Lp4 & 0xff)
1296             ^ BOX (s_Ch, 5, Lp5 & 0xff)
1297             ^ BOX (s_Ch, 6, Lp6 & 0xff)
1298             ^ BOX (s_Ch, 7, Lp7 & 0xff);
1299
1300       Ll[i] = BOX (s_Cl, 0, Lp0 & 0xff)
1301             ^ BOX (s_Cl, 1, Lp1 & 0xff)
1302             ^ BOX (s_Cl, 2, Lp2 & 0xff)
1303             ^ BOX (s_Cl, 3, Lp3 & 0xff)
1304             ^ BOX (s_Cl, 4, Lp4 & 0xff)
1305             ^ BOX (s_Cl, 5, Lp5 & 0xff)
1306             ^ BOX (s_Cl, 6, Lp6 & 0xff)
1307             ^ BOX (s_Cl, 7, Lp7 & 0xff);
1308     }
1309
1310     stateh[0] = Lh[0] ^ Kh[0];
1311     statel[0] = Ll[0] ^ Kl[0];
1312     stateh[1] = Lh[1] ^ Kh[1];
1313     statel[1] = Ll[1] ^ Kl[1];
1314     stateh[2] = Lh[2] ^ Kh[2];
1315     statel[2] = Ll[2] ^ Kl[2];
1316     stateh[3] = Lh[3] ^ Kh[3];
1317     statel[3] = Ll[3] ^ Kl[3];
1318     stateh[4] = Lh[4] ^ Kh[4];
1319     statel[4] = Ll[4] ^ Kl[4];
1320     stateh[5] = Lh[5] ^ Kh[5];
1321     statel[5] = Ll[5] ^ Kl[5];
1322     stateh[6] = Lh[6] ^ Kh[6];
1323     statel[6] = Ll[6] ^ Kl[6];
1324     stateh[7] = Lh[7] ^ Kh[7];
1325     statel[7] = Ll[7] ^ Kl[7];
1326   }
1327
1328   dgst[ 0] = stateh[0] ^ w[ 0];
1329   dgst[ 1] = statel[0] ^ w[ 1];
1330   dgst[ 2] = stateh[1] ^ w[ 2];
1331   dgst[ 3] = statel[1] ^ w[ 3];
1332   dgst[ 4] = stateh[2] ^ w[ 4];
1333   dgst[ 5] = statel[2] ^ w[ 5];
1334   dgst[ 6] = stateh[3] ^ w[ 6];
1335   dgst[ 7] = statel[3] ^ w[ 7];
1336   dgst[ 8] = stateh[4] ^ w[ 8];
1337   dgst[ 9] = statel[4] ^ w[ 9];
1338   dgst[10] = stateh[5] ^ w[10];
1339   dgst[11] = statel[5] ^ w[11];
1340   dgst[12] = stateh[6] ^ w[12];
1341   dgst[13] = statel[6] ^ w[13];
1342   dgst[14] = stateh[7] ^ w[14];
1343   dgst[15] = statel[7] ^ w[15];
1344 }
1345
1346 static void m06100m (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 (*s_Cl)[256], __local u32 (*s_Ch)[256])
1347 {
1348   /**
1349    * modifier
1350    */
1351
1352   const u32 gid = get_global_id (0);
1353   const u32 lid = get_local_id (0);
1354
1355   /**
1356    * loop
1357    */
1358
1359   u32 w0l = w0[0];
1360
1361   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
1362   {
1363     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
1364
1365     const u32x w0lr = w0l | w0r;
1366
1367     u32x wl[16];
1368
1369     wl[ 0] = w0lr;
1370     wl[ 1] = w0[1];
1371     wl[ 2] = w0[2];
1372     wl[ 3] = w0[3];
1373     wl[ 4] = w1[0];
1374     wl[ 5] = w1[1];
1375     wl[ 6] = w1[2];
1376     wl[ 7] = w1[3];
1377     wl[ 8] = w2[0];
1378     wl[ 9] = w2[1];
1379     wl[10] = w2[2];
1380     wl[11] = w2[3];
1381     wl[12] = w3[0];
1382     wl[13] = w3[1];
1383     wl[14] = 0;
1384     wl[15] = pw_len * 8;
1385
1386     u32x dgst[16];
1387
1388     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1389
1390     COMPARE_M_SIMD (dgst[0], dgst[1], dgst[2], dgst[3]);
1391   }
1392 }
1393
1394 static void m06100s (u32 w0[4], u32 w1[4], u32 w2[4], u32 w3[4], const u32 pw_len, __global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, __local u32 (*s_Cl)[256], __local u32 (*s_Ch)[256])
1395 {
1396   /**
1397    * modifier
1398    */
1399
1400   const u32 gid = get_global_id (0);
1401   const u32 lid = get_local_id (0);
1402
1403   /**
1404    * digest
1405    */
1406
1407   const u32 search[4] =
1408   {
1409     digests_buf[digests_offset].digest_buf[DGST_R0],
1410     digests_buf[digests_offset].digest_buf[DGST_R1],
1411     digests_buf[digests_offset].digest_buf[DGST_R2],
1412     digests_buf[digests_offset].digest_buf[DGST_R3]
1413   };
1414
1415   /**
1416    * loop
1417    */
1418
1419   u32 w0l = w0[0];
1420
1421   for (u32 il_pos = 0; il_pos < bfs_cnt; il_pos += VECT_SIZE)
1422   {
1423     const u32x w0r = w0r_create_bft (bfs_buf, il_pos);
1424
1425     const u32x w0lr = w0l | w0r;
1426
1427     u32x wl[16];
1428
1429     wl[ 0] = w0lr;
1430     wl[ 1] = w0[1];
1431     wl[ 2] = w0[2];
1432     wl[ 3] = w0[3];
1433     wl[ 4] = w1[0];
1434     wl[ 5] = w1[1];
1435     wl[ 6] = w1[2];
1436     wl[ 7] = w1[3];
1437     wl[ 8] = w2[0];
1438     wl[ 9] = w2[1];
1439     wl[10] = w2[2];
1440     wl[11] = w2[3];
1441     wl[12] = w3[0];
1442     wl[13] = w3[1];
1443     wl[14] = 0;
1444     wl[15] = pw_len * 8;
1445
1446     u32x dgst[16];
1447
1448     whirlpool_transform (wl, dgst, s_Ch, s_Cl);
1449
1450     COMPARE_S_SIMD (dgst[0], dgst[1], dgst[2], dgst[3]);
1451   }
1452 }
1453
1454 __kernel void m06100_m04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1455 {
1456   /**
1457    * modifier
1458    */
1459
1460   const u32 gid = get_global_id (0);
1461   const u32 lid = get_local_id (0);
1462   const u32 lsz = get_local_size (0);
1463
1464   /**
1465    * shared
1466    */
1467
1468   __local u32 s_Ch[8][256];
1469   __local u32 s_Cl[8][256];
1470
1471   for (u32 i = lid; i < 256; i += lsz)
1472   {
1473     s_Ch[0][i] = Ch[0][i];
1474     s_Ch[1][i] = Ch[1][i];
1475     s_Ch[2][i] = Ch[2][i];
1476     s_Ch[3][i] = Ch[3][i];
1477     s_Ch[4][i] = Ch[4][i];
1478     s_Ch[5][i] = Ch[5][i];
1479     s_Ch[6][i] = Ch[6][i];
1480     s_Ch[7][i] = Ch[7][i];
1481
1482     s_Cl[0][i] = Cl[0][i];
1483     s_Cl[1][i] = Cl[1][i];
1484     s_Cl[2][i] = Cl[2][i];
1485     s_Cl[3][i] = Cl[3][i];
1486     s_Cl[4][i] = Cl[4][i];
1487     s_Cl[5][i] = Cl[5][i];
1488     s_Cl[6][i] = Cl[6][i];
1489     s_Cl[7][i] = Cl[7][i];
1490   }
1491
1492   barrier (CLK_LOCAL_MEM_FENCE);
1493
1494   if (gid >= gid_max) return;
1495
1496   /**
1497    * base
1498    */
1499
1500   u32 w0[4];
1501
1502   w0[0] = pws[gid].i[ 0];
1503   w0[1] = pws[gid].i[ 1];
1504   w0[2] = pws[gid].i[ 2];
1505   w0[3] = pws[gid].i[ 3];
1506
1507   u32 w1[4];
1508
1509   w1[0] = 0;
1510   w1[1] = 0;
1511   w1[2] = 0;
1512   w1[3] = 0;
1513
1514   u32 w2[4];
1515
1516   w2[0] = 0;
1517   w2[1] = 0;
1518   w2[2] = 0;
1519   w2[3] = 0;
1520
1521   u32 w3[4];
1522
1523   w3[0] = 0;
1524   w3[1] = 0;
1525   w3[2] = 0;
1526   w3[3] = 0;
1527
1528   const u32 pw_len = pws[gid].pw_len;
1529
1530   /**
1531    * main
1532    */
1533
1534   m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1535 }
1536
1537 __kernel void m06100_m08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1538 {
1539   /**
1540    * modifier
1541    */
1542
1543   const u32 gid = get_global_id (0);
1544   const u32 lid = get_local_id (0);
1545   const u32 lsz = get_local_size (0);
1546
1547   /**
1548    * shared
1549    */
1550
1551   __local u32 s_Ch[8][256];
1552   __local u32 s_Cl[8][256];
1553
1554   for (u32 i = lid; i < 256; i += lsz)
1555   {
1556     s_Ch[0][i] = Ch[0][i];
1557     s_Ch[1][i] = Ch[1][i];
1558     s_Ch[2][i] = Ch[2][i];
1559     s_Ch[3][i] = Ch[3][i];
1560     s_Ch[4][i] = Ch[4][i];
1561     s_Ch[5][i] = Ch[5][i];
1562     s_Ch[6][i] = Ch[6][i];
1563     s_Ch[7][i] = Ch[7][i];
1564
1565     s_Cl[0][i] = Cl[0][i];
1566     s_Cl[1][i] = Cl[1][i];
1567     s_Cl[2][i] = Cl[2][i];
1568     s_Cl[3][i] = Cl[3][i];
1569     s_Cl[4][i] = Cl[4][i];
1570     s_Cl[5][i] = Cl[5][i];
1571     s_Cl[6][i] = Cl[6][i];
1572     s_Cl[7][i] = Cl[7][i];
1573   }
1574
1575   barrier (CLK_LOCAL_MEM_FENCE);
1576
1577   if (gid >= gid_max) return;
1578
1579   /**
1580    * base
1581    */
1582
1583   u32 w0[4];
1584
1585   w0[0] = pws[gid].i[ 0];
1586   w0[1] = pws[gid].i[ 1];
1587   w0[2] = pws[gid].i[ 2];
1588   w0[3] = pws[gid].i[ 3];
1589
1590   u32 w1[4];
1591
1592   w1[0] = pws[gid].i[ 4];
1593   w1[1] = pws[gid].i[ 5];
1594   w1[2] = pws[gid].i[ 6];
1595   w1[3] = pws[gid].i[ 7];
1596
1597   u32 w2[4];
1598
1599   w2[0] = 0;
1600   w2[1] = 0;
1601   w2[2] = 0;
1602   w2[3] = 0;
1603
1604   u32 w3[4];
1605
1606   w3[0] = 0;
1607   w3[1] = 0;
1608   w3[2] = 0;
1609   w3[3] = 0;
1610
1611   const u32 pw_len = pws[gid].pw_len;
1612
1613   /**
1614    * main
1615    */
1616
1617   m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1618 }
1619
1620 __kernel void m06100_m16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1621 {
1622   /**
1623    * modifier
1624    */
1625
1626   const u32 gid = get_global_id (0);
1627   const u32 lid = get_local_id (0);
1628   const u32 lsz = get_local_size (0);
1629
1630   /**
1631    * shared
1632    */
1633
1634   __local u32 s_Ch[8][256];
1635   __local u32 s_Cl[8][256];
1636
1637   for (u32 i = lid; i < 256; i += lsz)
1638   {
1639     s_Ch[0][i] = Ch[0][i];
1640     s_Ch[1][i] = Ch[1][i];
1641     s_Ch[2][i] = Ch[2][i];
1642     s_Ch[3][i] = Ch[3][i];
1643     s_Ch[4][i] = Ch[4][i];
1644     s_Ch[5][i] = Ch[5][i];
1645     s_Ch[6][i] = Ch[6][i];
1646     s_Ch[7][i] = Ch[7][i];
1647
1648     s_Cl[0][i] = Cl[0][i];
1649     s_Cl[1][i] = Cl[1][i];
1650     s_Cl[2][i] = Cl[2][i];
1651     s_Cl[3][i] = Cl[3][i];
1652     s_Cl[4][i] = Cl[4][i];
1653     s_Cl[5][i] = Cl[5][i];
1654     s_Cl[6][i] = Cl[6][i];
1655     s_Cl[7][i] = Cl[7][i];
1656   }
1657
1658   barrier (CLK_LOCAL_MEM_FENCE);
1659
1660   if (gid >= gid_max) return;
1661
1662   /**
1663    * base
1664    */
1665
1666   u32 w0[4];
1667
1668   w0[0] = pws[gid].i[ 0];
1669   w0[1] = pws[gid].i[ 1];
1670   w0[2] = pws[gid].i[ 2];
1671   w0[3] = pws[gid].i[ 3];
1672
1673   u32 w1[4];
1674
1675   w1[0] = pws[gid].i[ 4];
1676   w1[1] = pws[gid].i[ 5];
1677   w1[2] = pws[gid].i[ 6];
1678   w1[3] = pws[gid].i[ 7];
1679
1680   u32 w2[4];
1681
1682   w2[0] = pws[gid].i[ 8];
1683   w2[1] = pws[gid].i[ 9];
1684   w2[2] = pws[gid].i[10];
1685   w2[3] = pws[gid].i[11];
1686
1687   u32 w3[4];
1688
1689   w3[0] = pws[gid].i[12];
1690   w3[1] = pws[gid].i[13];
1691   w3[2] = 0;
1692   w3[3] = 0;
1693
1694   const u32 pw_len = pws[gid].pw_len;
1695
1696   /**
1697    * main
1698    */
1699
1700   m06100m (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1701 }
1702
1703 __kernel void m06100_s04 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1704 {
1705   /**
1706    * modifier
1707    */
1708
1709   const u32 gid = get_global_id (0);
1710   const u32 lid = get_local_id (0);
1711   const u32 lsz = get_local_size (0);
1712
1713   /**
1714    * shared
1715    */
1716
1717   __local u32 s_Ch[8][256];
1718   __local u32 s_Cl[8][256];
1719
1720   for (u32 i = lid; i < 256; i += lsz)
1721   {
1722     s_Ch[0][i] = Ch[0][i];
1723     s_Ch[1][i] = Ch[1][i];
1724     s_Ch[2][i] = Ch[2][i];
1725     s_Ch[3][i] = Ch[3][i];
1726     s_Ch[4][i] = Ch[4][i];
1727     s_Ch[5][i] = Ch[5][i];
1728     s_Ch[6][i] = Ch[6][i];
1729     s_Ch[7][i] = Ch[7][i];
1730
1731     s_Cl[0][i] = Cl[0][i];
1732     s_Cl[1][i] = Cl[1][i];
1733     s_Cl[2][i] = Cl[2][i];
1734     s_Cl[3][i] = Cl[3][i];
1735     s_Cl[4][i] = Cl[4][i];
1736     s_Cl[5][i] = Cl[5][i];
1737     s_Cl[6][i] = Cl[6][i];
1738     s_Cl[7][i] = Cl[7][i];
1739   }
1740
1741   barrier (CLK_LOCAL_MEM_FENCE);
1742
1743   if (gid >= gid_max) return;
1744
1745   /**
1746    * base
1747    */
1748
1749   u32 w0[4];
1750
1751   w0[0] = pws[gid].i[ 0];
1752   w0[1] = pws[gid].i[ 1];
1753   w0[2] = pws[gid].i[ 2];
1754   w0[3] = pws[gid].i[ 3];
1755
1756   u32 w1[4];
1757
1758   w1[0] = 0;
1759   w1[1] = 0;
1760   w1[2] = 0;
1761   w1[3] = 0;
1762
1763   u32 w2[4];
1764
1765   w2[0] = 0;
1766   w2[1] = 0;
1767   w2[2] = 0;
1768   w2[3] = 0;
1769
1770   u32 w3[4];
1771
1772   w3[0] = 0;
1773   w3[1] = 0;
1774   w3[2] = 0;
1775   w3[3] = 0;
1776
1777   const u32 pw_len = pws[gid].pw_len;
1778
1779   /**
1780    * main
1781    */
1782
1783   m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1784 }
1785
1786 __kernel void m06100_s08 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1787 {
1788   /**
1789    * modifier
1790    */
1791
1792   const u32 gid = get_global_id (0);
1793   const u32 lid = get_local_id (0);
1794   const u32 lsz = get_local_size (0);
1795
1796   /**
1797    * shared
1798    */
1799
1800   __local u32 s_Ch[8][256];
1801   __local u32 s_Cl[8][256];
1802
1803   for (u32 i = lid; i < 256; i += lsz)
1804   {
1805     s_Ch[0][i] = Ch[0][i];
1806     s_Ch[1][i] = Ch[1][i];
1807     s_Ch[2][i] = Ch[2][i];
1808     s_Ch[3][i] = Ch[3][i];
1809     s_Ch[4][i] = Ch[4][i];
1810     s_Ch[5][i] = Ch[5][i];
1811     s_Ch[6][i] = Ch[6][i];
1812     s_Ch[7][i] = Ch[7][i];
1813
1814     s_Cl[0][i] = Cl[0][i];
1815     s_Cl[1][i] = Cl[1][i];
1816     s_Cl[2][i] = Cl[2][i];
1817     s_Cl[3][i] = Cl[3][i];
1818     s_Cl[4][i] = Cl[4][i];
1819     s_Cl[5][i] = Cl[5][i];
1820     s_Cl[6][i] = Cl[6][i];
1821     s_Cl[7][i] = Cl[7][i];
1822   }
1823
1824   barrier (CLK_LOCAL_MEM_FENCE);
1825
1826   if (gid >= gid_max) return;
1827
1828   /**
1829    * base
1830    */
1831
1832   u32 w0[4];
1833
1834   w0[0] = pws[gid].i[ 0];
1835   w0[1] = pws[gid].i[ 1];
1836   w0[2] = pws[gid].i[ 2];
1837   w0[3] = pws[gid].i[ 3];
1838
1839   u32 w1[4];
1840
1841   w1[0] = pws[gid].i[ 4];
1842   w1[1] = pws[gid].i[ 5];
1843   w1[2] = pws[gid].i[ 6];
1844   w1[3] = pws[gid].i[ 7];
1845
1846   u32 w2[4];
1847
1848   w2[0] = 0;
1849   w2[1] = 0;
1850   w2[2] = 0;
1851   w2[3] = 0;
1852
1853   u32 w3[4];
1854
1855   w3[0] = 0;
1856   w3[1] = 0;
1857   w3[2] = 0;
1858   w3[3] = 0;
1859
1860   const u32 pw_len = pws[gid].pw_len;
1861
1862   /**
1863    * main
1864    */
1865
1866   m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1867 }
1868
1869 __kernel void m06100_s16 (__global pw_t *pws, __global kernel_rule_t *rules_buf, __global comb_t *combs_buf, __global bf_t *bfs_buf, __global void *tmps, __global void *hooks, __global u32 *bitmaps_buf_s1_a, __global u32 *bitmaps_buf_s1_b, __global u32 *bitmaps_buf_s1_c, __global u32 *bitmaps_buf_s1_d, __global u32 *bitmaps_buf_s2_a, __global u32 *bitmaps_buf_s2_b, __global u32 *bitmaps_buf_s2_c, __global u32 *bitmaps_buf_s2_d, __global plain_t *plains_buf, __global digest_t *digests_buf, __global u32 *hashes_shown, __global salt_t *salt_bufs, __global void *esalt_bufs, __global u32 *d_return_buf, __global u32 *d_scryptV_buf, const u32 bitmap_mask, const u32 bitmap_shift1, const u32 bitmap_shift2, const u32 salt_pos, const u32 loop_pos, const u32 loop_cnt, const u32 bfs_cnt, const u32 digests_cnt, const u32 digests_offset, const u32 combs_mode, const u32 gid_max)
1870 {
1871   /**
1872    * modifier
1873    */
1874
1875   const u32 gid = get_global_id (0);
1876   const u32 lid = get_local_id (0);
1877   const u32 lsz = get_local_size (0);
1878
1879   /**
1880    * shared
1881    */
1882
1883   __local u32 s_Ch[8][256];
1884   __local u32 s_Cl[8][256];
1885
1886   for (u32 i = lid; i < 256; i += lsz)
1887   {
1888     s_Ch[0][i] = Ch[0][i];
1889     s_Ch[1][i] = Ch[1][i];
1890     s_Ch[2][i] = Ch[2][i];
1891     s_Ch[3][i] = Ch[3][i];
1892     s_Ch[4][i] = Ch[4][i];
1893     s_Ch[5][i] = Ch[5][i];
1894     s_Ch[6][i] = Ch[6][i];
1895     s_Ch[7][i] = Ch[7][i];
1896
1897     s_Cl[0][i] = Cl[0][i];
1898     s_Cl[1][i] = Cl[1][i];
1899     s_Cl[2][i] = Cl[2][i];
1900     s_Cl[3][i] = Cl[3][i];
1901     s_Cl[4][i] = Cl[4][i];
1902     s_Cl[5][i] = Cl[5][i];
1903     s_Cl[6][i] = Cl[6][i];
1904     s_Cl[7][i] = Cl[7][i];
1905   }
1906
1907   barrier (CLK_LOCAL_MEM_FENCE);
1908
1909   if (gid >= gid_max) return;
1910
1911   /**
1912    * base
1913    */
1914
1915   u32 w0[4];
1916
1917   w0[0] = pws[gid].i[ 0];
1918   w0[1] = pws[gid].i[ 1];
1919   w0[2] = pws[gid].i[ 2];
1920   w0[3] = pws[gid].i[ 3];
1921
1922   u32 w1[4];
1923
1924   w1[0] = pws[gid].i[ 4];
1925   w1[1] = pws[gid].i[ 5];
1926   w1[2] = pws[gid].i[ 6];
1927   w1[3] = pws[gid].i[ 7];
1928
1929   u32 w2[4];
1930
1931   w2[0] = pws[gid].i[ 8];
1932   w2[1] = pws[gid].i[ 9];
1933   w2[2] = pws[gid].i[10];
1934   w2[3] = pws[gid].i[11];
1935
1936   u32 w3[4];
1937
1938   w3[0] = pws[gid].i[12];
1939   w3[1] = pws[gid].i[13];
1940   w3[2] = 0;
1941   w3[3] = 0;
1942
1943   const u32 pw_len = pws[gid].pw_len;
1944
1945   /**
1946    * main
1947    */
1948
1949   m06100s (w0, w1, w2, w3, pw_len, pws, rules_buf, combs_buf, bfs_buf, tmps, hooks, bitmaps_buf_s1_a, bitmaps_buf_s1_b, bitmaps_buf_s1_c, bitmaps_buf_s1_d, bitmaps_buf_s2_a, bitmaps_buf_s2_b, bitmaps_buf_s2_c, bitmaps_buf_s2_d, plains_buf, digests_buf, hashes_shown, salt_bufs, esalt_bufs, d_return_buf, d_scryptV_buf, bitmap_mask, bitmap_shift1, bitmap_shift2, salt_pos, loop_pos, loop_cnt, bfs_cnt, digests_cnt, digests_offset, s_Cl, s_Ch);
1950 }