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