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