]> git.karo-electronics.de Git - karo-tx-linux.git/blob - lib/crc32.c
crc32: fix mixing of endian-specific types
[karo-tx-linux.git] / lib / crc32.c
1 /*
2  * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com>
3  * Nicer crc32 functions/docs submitted by linux@horizon.com.  Thanks!
4  * Code was from the public domain, copyright abandoned.  Code was
5  * subsequently included in the kernel, thus was re-licensed under the
6  * GNU GPL v2.
7  *
8  * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com>
9  * Same crc32 function was used in 5 other places in the kernel.
10  * I made one version, and deleted the others.
11  * There are various incantations of crc32().  Some use a seed of 0 or ~0.
12  * Some xor at the end with ~0.  The generic crc32() function takes
13  * seed as an argument, and doesn't xor at the end.  Then individual
14  * users can do whatever they need.
15  *   drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0.
16  *   fs/jffs2 uses seed 0, doesn't xor with ~0.
17  *   fs/partitions/efi.c uses seed ~0, xor's with ~0.
18  *
19  * This source code is licensed under the GNU General Public License,
20  * Version 2.  See the file COPYING for more details.
21  */
22
23 /* see: Documentation/crc32.txt for a description of algorithms */
24
25 #include <linux/crc32.h>
26 #include <linux/module.h>
27 #include <linux/types.h>
28 #include "crc32defs.h"
29
30 #if CRC_LE_BITS == 8
31 # define tole(x) ((__force u32) __constant_cpu_to_le32(x))
32 #else
33 # define tole(x) (x)
34 #endif
35
36 #if CRC_BE_BITS == 8
37 # define tobe(x) ((__force u32) __constant_cpu_to_be32(x))
38 #else
39 # define tobe(x) (x)
40 #endif
41
42 #include "crc32table.h"
43
44 MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>");
45 MODULE_DESCRIPTION("Ethernet CRC32 calculations");
46 MODULE_LICENSE("GPL");
47
48 #if CRC_LE_BITS == 8 || CRC_BE_BITS == 8
49
50 static inline u32
51 crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
52 {
53 # ifdef __LITTLE_ENDIAN
54 #  define DO_CRC(x) crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8)
55 #  define DO_CRC4 crc = t3[(crc) & 255] ^ \
56                 t2[(crc >> 8) & 255] ^ \
57                 t1[(crc >> 16) & 255] ^ \
58                 t0[(crc >> 24) & 255]
59 # else
60 #  define DO_CRC(x) crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
61 #  define DO_CRC4 crc = t0[(crc) & 255] ^ \
62                 t1[(crc >> 8) & 255] ^  \
63                 t2[(crc >> 16) & 255] ^ \
64                 t3[(crc >> 24) & 255]
65 # endif
66         const u32 *b;
67         size_t    rem_len;
68         const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
69
70         /* Align it */
71         if (unlikely((long)buf & 3 && len)) {
72                 do {
73                         DO_CRC(*buf++);
74                 } while ((--len) && ((long)buf)&3);
75         }
76         rem_len = len & 3;
77         /* load data 32 bits wide, xor data 32 bits wide. */
78         len = len >> 2;
79         b = (const u32 *)buf;
80         for (--b; len; --len) {
81                 crc ^= *++b; /* use pre increment for speed */
82                 DO_CRC4;
83         }
84         len = rem_len;
85         /* And the last few bytes */
86         if (len) {
87                 u8 *p = (u8 *)(b + 1) - 1;
88                 do {
89                         DO_CRC(*++p); /* use pre increment for speed */
90                 } while (--len);
91         }
92         return crc;
93 #undef DO_CRC
94 #undef DO_CRC4
95 }
96 #endif
97
98 /**
99  * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32
100  * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
101  *      other uses, or the previous crc32 value if computing incrementally.
102  * @p: pointer to buffer over which CRC is run
103  * @len: length of buffer @p
104  */
105 u32 __pure crc32_le(u32 crc, unsigned char const *p, size_t len)
106 {
107 #if CRC_LE_BITS == 1
108         int i;
109         while (len--) {
110                 crc ^= *p++;
111                 for (i = 0; i < 8; i++)
112                         crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0);
113         }
114 # elif CRC_LE_BITS == 2
115         while (len--) {
116                 crc ^= *p++;
117                 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
118                 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
119                 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
120                 crc = (crc >> 2) ^ crc32table_le[0][crc & 3];
121         }
122 # elif CRC_LE_BITS == 4
123         while (len--) {
124                 crc ^= *p++;
125                 crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
126                 crc = (crc >> 4) ^ crc32table_le[0][crc & 15];
127         }
128 # elif CRC_LE_BITS == 8
129         const u32      (*tab)[] = crc32table_le;
130
131         crc = (__force u32) __cpu_to_le32(crc);
132         crc = crc32_body(crc, p, len, tab);
133         crc = __le32_to_cpu((__force __le32)crc);
134 #endif
135         return crc;
136 }
137 EXPORT_SYMBOL(crc32_le);
138
139 /**
140  * crc32_be() - Calculate bitwise big-endian Ethernet AUTODIN II CRC32
141  * @crc: seed value for computation.  ~0 for Ethernet, sometimes 0 for
142  *      other uses, or the previous crc32 value if computing incrementally.
143  * @p: pointer to buffer over which CRC is run
144  * @len: length of buffer @p
145  */
146 u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
147 {
148 #if CRC_BE_BITS == 1
149         int i;
150         while (len--) {
151                 crc ^= *p++ << 24;
152                 for (i = 0; i < 8; i++)
153                         crc =
154                             (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE :
155                                           0);
156         }
157 # elif CRC_BE_BITS == 2
158         while (len--) {
159                 crc ^= *p++ << 24;
160                 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
161                 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
162                 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
163                 crc = (crc << 2) ^ crc32table_be[0][crc >> 30];
164         }
165 # elif CRC_BE_BITS == 4
166         while (len--) {
167                 crc ^= *p++ << 24;
168                 crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
169                 crc = (crc << 4) ^ crc32table_be[0][crc >> 28];
170         }
171 # elif CRC_BE_BITS == 8
172         const u32      (*tab)[] = crc32table_be;
173
174         crc = (__force u32) __cpu_to_be32(crc);
175         crc = crc32_body(crc, p, len, tab);
176         crc = __be32_to_cpu((__force __be32)crc);
177 # endif
178         return crc;
179 }
180 EXPORT_SYMBOL(crc32_be);
181
182 #ifdef CONFIG_CRC32_SELFTEST
183
184 /* 4096 random bytes */
185 static u8 __attribute__((__aligned__(8))) test_buf[] =
186 {
187         0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30,
188         0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4,
189         0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60,
190         0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c,
191         0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4,
192         0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a,
193         0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a,
194         0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4,
195         0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9,
196         0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4,
197         0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca,
198         0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61,
199         0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e,
200         0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a,
201         0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f,
202         0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd,
203         0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c,
204         0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88,
205         0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53,
206         0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f,
207         0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4,
208         0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74,
209         0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60,
210         0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09,
211         0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07,
212         0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1,
213         0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f,
214         0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2,
215         0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0,
216         0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95,
217         0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22,
218         0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93,
219         0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86,
220         0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d,
221         0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40,
222         0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b,
223         0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35,
224         0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40,
225         0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63,
226         0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b,
227         0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8,
228         0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72,
229         0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86,
230         0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff,
231         0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed,
232         0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c,
233         0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed,
234         0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30,
235         0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99,
236         0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4,
237         0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80,
238         0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37,
239         0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04,
240         0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e,
241         0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd,
242         0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c,
243         0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09,
244         0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb,
245         0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b,
246         0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53,
247         0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b,
248         0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f,
249         0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff,
250         0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40,
251         0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6,
252         0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb,
253         0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73,
254         0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f,
255         0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4,
256         0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66,
257         0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1,
258         0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80,
259         0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f,
260         0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5,
261         0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7,
262         0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce,
263         0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff,
264         0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48,
265         0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26,
266         0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72,
267         0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88,
268         0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9,
269         0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc,
270         0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8,
271         0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09,
272         0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8,
273         0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c,
274         0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48,
275         0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d,
276         0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f,
277         0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae,
278         0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97,
279         0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8,
280         0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75,
281         0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc,
282         0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27,
283         0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf,
284         0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7,
285         0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0,
286         0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8,
287         0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c,
288         0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44,
289         0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54,
290         0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38,
291         0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f,
292         0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b,
293         0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7,
294         0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef,
295         0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e,
296         0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c,
297         0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c,
298         0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0,
299         0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37,
300         0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf,
301         0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e,
302         0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4,
303         0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60,
304         0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe,
305         0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61,
306         0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3,
307         0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe,
308         0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40,
309         0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec,
310         0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f,
311         0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7,
312         0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79,
313         0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c,
314         0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f,
315         0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21,
316         0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9,
317         0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30,
318         0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b,
319         0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee,
320         0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6,
321         0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3,
322         0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09,
323         0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd,
324         0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f,
325         0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9,
326         0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc,
327         0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59,
328         0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60,
329         0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5,
330         0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1,
331         0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8,
332         0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9,
333         0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab,
334         0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80,
335         0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01,
336         0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e,
337         0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d,
338         0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35,
339         0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38,
340         0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a,
341         0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac,
342         0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca,
343         0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57,
344         0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed,
345         0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20,
346         0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef,
347         0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c,
348         0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a,
349         0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64,
350         0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4,
351         0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54,
352         0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16,
353         0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26,
354         0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc,
355         0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87,
356         0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60,
357         0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d,
358         0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54,
359         0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13,
360         0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59,
361         0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb,
362         0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f,
363         0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15,
364         0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78,
365         0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93,
366         0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e,
367         0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31,
368         0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1,
369         0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37,
370         0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15,
371         0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78,
372         0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f,
373         0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31,
374         0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f,
375         0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc,
376         0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9,
377         0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3,
378         0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe,
379         0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4,
380         0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24,
381         0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1,
382         0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85,
383         0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8,
384         0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09,
385         0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c,
386         0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46,
387         0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5,
388         0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39,
389         0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2,
390         0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc,
391         0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35,
392         0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde,
393         0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80,
394         0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15,
395         0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63,
396         0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58,
397         0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d,
398         0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf,
399         0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12,
400         0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c,
401         0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b,
402         0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1,
403         0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6,
404         0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73,
405         0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9,
406         0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e,
407         0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22,
408         0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb,
409         0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2,
410         0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c,
411         0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c,
412         0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93,
413         0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f,
414         0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38,
415         0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57,
416         0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03,
417         0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90,
418         0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8,
419         0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4,
420         0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36,
421         0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7,
422         0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47,
423         0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46,
424         0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73,
425         0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72,
426         0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23,
427         0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a,
428         0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58,
429         0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f,
430         0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96,
431         0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9,
432         0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b,
433         0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c,
434         0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef,
435         0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3,
436         0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4,
437         0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f,
438         0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17,
439         0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18,
440         0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8,
441         0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98,
442         0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42,
443         0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97,
444         0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97,
445         0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1,
446         0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77,
447         0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb,
448         0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c,
449         0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb,
450         0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56,
451         0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04,
452         0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48,
453         0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe,
454         0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d,
455         0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97,
456         0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8,
457         0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f,
458         0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e,
459         0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca,
460         0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44,
461         0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f,
462         0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6,
463         0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63,
464         0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19,
465         0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58,
466         0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b,
467         0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28,
468         0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf,
469         0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6,
470         0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3,
471         0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe,
472         0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f,
473         0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf,
474         0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9,
475         0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e,
476         0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7,
477         0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70,
478         0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0,
479         0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d,
480         0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4,
481         0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5,
482         0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85,
483         0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc,
484         0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f,
485         0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56,
486         0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb,
487         0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b,
488         0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5,
489         0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03,
490         0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23,
491         0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03,
492         0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87,
493         0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4,
494         0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43,
495         0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11,
496         0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40,
497         0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59,
498         0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9,
499         0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30,
500         0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd,
501         0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45,
502         0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83,
503         0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b,
504         0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5,
505         0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3,
506         0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84,
507         0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8,
508         0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34,
509         0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b,
510         0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31,
511         0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b,
512         0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40,
513         0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b,
514         0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e,
515         0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38,
516         0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb,
517         0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2,
518         0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c,
519         0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1,
520         0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc,
521         0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec,
522         0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34,
523         0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95,
524         0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92,
525         0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f,
526         0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c,
527         0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b,
528         0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c,
529         0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5,
530         0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb,
531         0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4,
532         0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9,
533         0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4,
534         0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41,
535         0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a,
536         0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8,
537         0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06,
538         0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62,
539         0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47,
540         0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4,
541         0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00,
542         0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67,
543         0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81,
544         0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0,
545         0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10,
546         0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79,
547         0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19,
548         0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8,
549         0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1,
550         0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83,
551         0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86,
552         0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55,
553         0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66,
554         0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0,
555         0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49,
556         0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea,
557         0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24,
558         0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e,
559         0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88,
560         0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87,
561         0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34,
562         0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f,
563         0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a,
564         0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a,
565         0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93,
566         0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37,
567         0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38,
568         0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4,
569         0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48,
570         0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65,
571         0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09,
572         0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e,
573         0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5,
574         0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b,
575         0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4,
576         0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e,
577         0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d,
578         0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0,
579         0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5,
580         0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48,
581         0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e,
582         0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f,
583         0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a,
584         0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d,
585         0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14,
586         0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69,
587         0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53,
588         0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56,
589         0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48,
590         0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4,
591         0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26,
592         0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e,
593         0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40,
594         0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7,
595         0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62,
596         0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe,
597         0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf,
598         0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2,
599         0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d,
600         0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32,
601         0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa,
602         0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45,
603         0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04,
604         0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33,
605         0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad,
606         0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4,
607         0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c,
608         0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b,
609         0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36,
610         0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa,
611         0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9,
612         0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28,
613         0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b,
614         0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03,
615         0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d,
616         0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff,
617         0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39,
618         0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b,
619         0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2,
620         0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34,
621         0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe,
622         0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0,
623         0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27,
624         0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86,
625         0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90,
626         0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03,
627         0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb,
628         0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57,
629         0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9,
630         0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5,
631         0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16,
632         0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5,
633         0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a,
634         0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d,
635         0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0,
636         0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f,
637         0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48,
638         0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1,
639         0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09,
640         0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51,
641         0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b,
642         0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf,
643         0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe,
644         0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad,
645         0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e,
646         0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57,
647         0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f,
648         0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef,
649         0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8,
650         0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69,
651         0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d,
652         0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59,
653         0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9,
654         0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d,
655         0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea,
656         0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56,
657         0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4,
658         0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8,
659         0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78,
660         0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f,
661         0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4,
662         0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91,
663         0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f,
664         0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c,
665         0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57,
666         0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4,
667         0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23,
668         0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17,
669         0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66,
670         0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39,
671         0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36,
672         0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00,
673         0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7,
674         0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60,
675         0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c,
676         0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e,
677         0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7,
678         0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a,
679         0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d,
680         0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37,
681         0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82,
682         0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8,
683         0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e,
684         0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85,
685         0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98,
686         0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22,
687         0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7,
688         0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49,
689         0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33,
690         0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc,
691         0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8,
692         0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f,
693         0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3,
694         0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98,
695         0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c,
696         0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6,
697         0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc,
698         0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d,
699 };
700
701 /* 100 test cases */
702 static struct crc_test {
703         u32 crc;        /* random starting crc */
704         u32 start;      /* random 6 bit offset in buf */
705         u32 length;     /* random 11 bit length of test */
706         u32 crc_le;     /* expected crc32_le result */
707         u32 crc_be;     /* expected crc32_be result */
708 } test[] =
709 {
710         {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1},
711         {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad},
712         {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f},
713         {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a},
714         {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2},
715         {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793},
716         {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed},
717         {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35},
718         {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2},
719         {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10},
720         {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb},
721         {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0},
722         {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb},
723         {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed},
724         {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591},
725         {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67},
726         {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd},
727         {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a},
728         {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b},
729         {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f},
730         {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d},
731         {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a},
732         {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97},
733         {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2},
734         {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138},
735         {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032},
736         {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f},
737         {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f},
738         {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32},
739         {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef},
740         {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0},
741         {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59},
742         {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4},
743         {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c},
744         {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51},
745         {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11},
746         {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659},
747         {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af},
748         {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99},
749         {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b},
750         {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521},
751         {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3},
752         {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d},
753         {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f},
754         {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b},
755         {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0},
756         {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195},
757         {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d},
758         {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4},
759         {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3},
760         {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643},
761         {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10},
762         {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d},
763         {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5},
764         {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b},
765         {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee},
766         {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14},
767         {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a},
768         {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b},
769         {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3},
770         {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826},
771         {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06},
772         {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35},
773         {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801},
774         {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2},
775         {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d},
776         {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c},
777         {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba},
778         {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5},
779         {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b},
780         {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178},
781         {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3},
782         {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605},
783         {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1},
784         {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9},
785         {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78},
786         {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9},
787         {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd},
788         {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab},
789         {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb},
790         {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77},
791         {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da},
792         {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39},
793         {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16},
794         {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208},
795         {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e},
796         {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5},
797         {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892},
798         {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db},
799         {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43},
800         {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac},
801         {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7},
802         {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2},
803         {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2},
804         {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640},
805         {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f},
806         {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99},
807         {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7},
808         {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499},
809         {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a},
810 };
811
812 #include <linux/time.h>
813
814 static int __init crc32_init(void)
815 {
816         int i;
817         int errors = 0;
818         int bytes = 0;
819         struct timespec start, stop;
820         u64 nsec;
821         unsigned long flags;
822
823         /* keep static to prevent cache warming code from
824          * getting eliminated by the compiler */
825         static u32 crc;
826
827         /* pre-warm the cache */
828         for (i = 0; i < 100; i++) {
829                 bytes += 2*test[i].length;
830
831                 crc ^= crc32_le(test[i].crc, test_buf +
832                     test[i].start, test[i].length);
833
834                 crc ^= crc32_be(test[i].crc, test_buf +
835                     test[i].start, test[i].length);
836         }
837
838         /* reduce OS noise */
839         local_irq_save(flags);
840         local_irq_disable();
841
842         getnstimeofday(&start);
843         for (i = 0; i < 100; i++) {
844                 if (test[i].crc_le != crc32_le(test[i].crc, test_buf +
845                     test[i].start, test[i].length))
846                         errors++;
847
848                 if (test[i].crc_be != crc32_be(test[i].crc, test_buf +
849                     test[i].start, test[i].length))
850                         errors++;
851         }
852         getnstimeofday(&stop);
853
854         local_irq_restore(flags);
855         local_irq_enable();
856
857         nsec = stop.tv_nsec - start.tv_nsec +
858                 1000000000 * (stop.tv_sec - start.tv_sec);
859
860         pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n",
861                  CRC_LE_BITS, CRC_BE_BITS);
862
863         if (errors)
864                 pr_warn("crc32: %d self tests failed\n", errors);
865         else {
866                 pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n",
867                         bytes, nsec);
868         }
869
870         return 0;
871 }
872
873 static void __exit crc32_exit(void)
874 {
875 }
876
877 module_init(crc32_init);
878 module_exit(crc32_exit);
879 #endif /* CONFIG_CRC32_SELFTEST */