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