Commit | Line | Data |
---|---|---|
2592e6c0 | 1 | /* |
63af6f3a | 2 | * Exim - an Internet mail transport agent |
2592e6c0 JH |
3 | * |
4 | * Copyright (C) 2016 Exim maintainers | |
5fb822fc | 5 | * Copyright (c) University of Cambridge 1995 - 2016 |
2592e6c0 JH |
6 | * |
7 | * Hash interface functions | |
8 | */ | |
9 | ||
5fb822fc JH |
10 | #ifndef STAND_ALONE |
11 | # include "exim.h" | |
12 | ||
13 | #else | |
14 | ||
15 | /* For stand-alone testing, we need to have the structure defined, and | |
16 | to be able to do I/O */ | |
17 | ||
18 | # include <stdio.h> | |
19 | # include <stdlib.h> | |
20 | typedef unsigned char uschar; | |
21 | typedef struct sha1 { | |
22 | unsigned int H[5]; | |
23 | unsigned int length; | |
24 | } | |
25 | sha1; | |
26 | #endif /*STAND_ALONE*/ | |
27 | ||
28 | ||
2592e6c0 JH |
29 | |
30 | #ifndef SUPPORT_TLS | |
31 | # error Need SUPPORT_TLS for DKIM | |
32 | #endif | |
33 | ||
63af6f3a | 34 | |
2592e6c0 | 35 | |
63af6f3a | 36 | #ifdef notdef |
2592e6c0 JH |
37 | #ifdef RSA_OPENSSL |
38 | # include <openssl/rsa.h> | |
39 | # include <openssl/ssl.h> | |
40 | # include <openssl/err.h> | |
41 | #elif defined(RSA_GNUTLS) | |
42 | # include <gnutls/gnutls.h> | |
43 | # include <gnutls/x509.h> | |
44 | # ifdef RSA_VERIFY_GNUTLS | |
45 | # include <gnutls/abstract.h> | |
46 | # endif | |
47 | #endif | |
2592e6c0 JH |
48 | #endif |
49 | ||
2592e6c0 JH |
50 | |
51 | /******************************************************************************/ | |
52 | #ifdef SHA_OPENSSL | |
53 | ||
54 | void | |
1ed59855 | 55 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 56 | { |
1ed59855 JH |
57 | switch (h->method = m) |
58 | { | |
59 | case HASH_SHA1: h->hashlen = 20; SHA1_Init (&h->u.sha1); break; | |
60 | case HASH_SHA256: h->hashlen = 32; SHA256_Init(&h->u.sha2); break; | |
61 | default: h->hashlen = 0; break; | |
62 | } | |
2592e6c0 JH |
63 | } |
64 | ||
65 | ||
66 | void | |
e2e3255a | 67 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 | 68 | { |
1ed59855 JH |
69 | switch (h->method) |
70 | { | |
71 | case HASH_SHA1: SHA1_Update (&h->u.sha1, data, len); break; | |
72 | case HASH_SHA256: SHA256_Update(&h->u.sha2, data, len); break; | |
73 | } | |
2592e6c0 JH |
74 | } |
75 | ||
76 | ||
77 | void | |
78 | exim_sha_finish(hctx * h, blob * b) | |
79 | { | |
80 | b->data = store_get(b->len = h->hashlen); | |
1ed59855 JH |
81 | switch (h->method) |
82 | { | |
83 | case HASH_SHA1: SHA1_Final (b->data, &h->u.sha1); break; | |
84 | case HASH_SHA256: SHA256_Final(b->data, &h->u.sha2); break; | |
85 | } | |
2592e6c0 JH |
86 | } |
87 | ||
88 | ||
89 | ||
90 | #elif defined(SHA_GNUTLS) | |
91 | /******************************************************************************/ | |
92 | ||
93 | void | |
1ed59855 | 94 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 95 | { |
1ed59855 JH |
96 | switch (h->method = m) |
97 | { | |
98 | case HASH_SHA1: h->hashlen = 20; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA1); break; | |
99 | case HASH_SHA256: h->hashlen = 32; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA256); break; | |
100 | default: h->hashlen = 0; break; | |
101 | } | |
2592e6c0 JH |
102 | } |
103 | ||
104 | ||
105 | void | |
e2e3255a | 106 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 JH |
107 | { |
108 | gnutls_hash(h->sha, data, len); | |
109 | } | |
110 | ||
111 | ||
112 | void | |
113 | exim_sha_finish(hctx * h, blob * b) | |
114 | { | |
115 | b->data = store_get(b->len = h->hashlen); | |
116 | gnutls_hash_output(h->sha, b->data); | |
117 | } | |
118 | ||
119 | ||
120 | ||
121 | #elif defined(SHA_GCRYPT) | |
122 | /******************************************************************************/ | |
123 | ||
124 | void | |
1ed59855 | 125 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 126 | { |
1ed59855 JH |
127 | switch (h->method = m) |
128 | { | |
129 | case HASH_SHA1: h->hashlen = 20; gcry_md_open(&h->sha, GCRY_MD_SHA1, 0); break; | |
130 | case HASH_SHA256: h->hashlen = 32; gcry_md_open(&h->sha, GCRY_MD_SHA256, 0); break; | |
131 | default: h->hashlen = 0; break; | |
132 | } | |
2592e6c0 JH |
133 | } |
134 | ||
135 | ||
136 | void | |
e2e3255a | 137 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 JH |
138 | { |
139 | gcry_md_write(h->sha, data, len); | |
140 | } | |
141 | ||
142 | ||
143 | void | |
144 | exim_sha_finish(hctx * h, blob * b) | |
145 | { | |
146 | b->data = store_get(b->len = h->hashlen); | |
147 | memcpy(b->data, gcry_md_read(h->sha, 0), h->hashlen); | |
148 | } | |
149 | ||
150 | ||
151 | ||
152 | ||
153 | #elif defined(SHA_POLARSSL) | |
154 | /******************************************************************************/ | |
155 | ||
156 | void | |
1ed59855 | 157 | exim_sha_init(hctx * h, hashmethod m) |
2592e6c0 | 158 | { |
1ed59855 JH |
159 | switch (h->method = m) |
160 | { | |
161 | case HASH_SHA1: h->hashlen = 20; sha1_starts(&h->u.sha1); break; | |
162 | case HASH_SHA256: h->hashlen = 32; sha2_starts(&h->u.sha2, 0); break; | |
163 | default: h->hashlen = 0; break; | |
164 | } | |
2592e6c0 JH |
165 | } |
166 | ||
167 | ||
168 | void | |
e2e3255a | 169 | exim_sha_update(hctx * h, const uschar * data, int len) |
2592e6c0 | 170 | { |
1ed59855 JH |
171 | switch (h->method) |
172 | { | |
173 | case HASH_SHA1: sha1_update(h->u.sha1, US data, len); break; | |
174 | case HASH_SHA256: sha2_update(h->u.sha2, US data, len); break; | |
175 | } | |
2592e6c0 JH |
176 | } |
177 | ||
178 | ||
179 | void | |
180 | exim_sha_finish(hctx * h, blob * b) | |
181 | { | |
182 | b->data = store_get(b->len = h->hashlen); | |
1ed59855 JH |
183 | switch (h->method) |
184 | { | |
185 | case HASH_SHA1: sha1_finish(h->u.sha1, b->data); break; | |
186 | case HASH_SHA256: sha2_finish(h->u.sha2, b->data); break; | |
187 | } | |
2592e6c0 JH |
188 | } |
189 | ||
5fb822fc JH |
190 | |
191 | ||
192 | ||
193 | #elif defined(SHA_NATIVE) | |
194 | /******************************************************************************/ | |
195 | /* Only sha-1 supported */ | |
196 | ||
197 | /************************************************* | |
198 | * Start off a new SHA-1 computation. * | |
199 | *************************************************/ | |
200 | ||
201 | /* | |
202 | Argument: pointer to sha1 storage structure | |
203 | Returns: nothing | |
204 | */ | |
205 | ||
206 | static void | |
207 | native_sha1_start(sha1 *base) | |
208 | { | |
209 | base->H[0] = 0x67452301; | |
210 | base->H[1] = 0xefcdab89; | |
211 | base->H[2] = 0x98badcfe; | |
212 | base->H[3] = 0x10325476; | |
213 | base->H[4] = 0xc3d2e1f0; | |
214 | base->length = 0; | |
215 | } | |
216 | ||
217 | ||
218 | ||
219 | /************************************************* | |
220 | * Process another 64-byte block * | |
221 | *************************************************/ | |
222 | ||
223 | /* This function implements central part of the algorithm | |
224 | ||
225 | Arguments: | |
226 | base pointer to sha1 storage structure | |
227 | text pointer to next 64 bytes of subject text | |
228 | ||
229 | Returns: nothing | |
230 | */ | |
231 | ||
232 | static void | |
233 | native_sha1_mid(sha1 *base, const uschar *text) | |
234 | { | |
235 | int i; | |
236 | uint A, B, C, D, E; | |
237 | uint W[80]; | |
238 | ||
239 | base->length += 64; | |
240 | ||
241 | for (i = 0; i < 16; i++) | |
242 | { | |
243 | W[i] = ((uint)text[0] << 24) | (text[1] << 16) | (text[2] << 8) | text[3]; | |
244 | text += 4; | |
245 | } | |
246 | ||
247 | for (i = 16; i < 80; i++) | |
248 | { | |
249 | register unsigned int x = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16]; | |
250 | W[i] = (x << 1) | (x >> 31); | |
251 | } | |
252 | ||
253 | A = base->H[0]; | |
254 | B = base->H[1]; | |
255 | C = base->H[2]; | |
256 | D = base->H[3]; | |
257 | E = base->H[4]; | |
258 | ||
259 | for (i = 0; i < 20; i++) | |
260 | { | |
261 | unsigned int T; | |
262 | T = ((A << 5) | (A >> 27)) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5a827999; | |
263 | E = D; | |
264 | D = C; | |
265 | C = (B << 30) | (B >> 2); | |
266 | B = A; | |
267 | A = T; | |
268 | } | |
269 | ||
270 | for (i = 20; i < 40; i++) | |
271 | { | |
272 | unsigned int T; | |
273 | T = ((A << 5) | (A >> 27)) + (B ^ C ^ D) + E + W[i] + 0x6ed9eba1; | |
274 | E = D; | |
275 | D = C; | |
276 | C = (B << 30) | (B >> 2); | |
277 | B = A; | |
278 | A = T; | |
279 | } | |
280 | ||
281 | for (i = 40; i < 60; i++) | |
282 | { | |
283 | unsigned int T; | |
284 | T = ((A << 5) | (A >> 27)) + ((B & C) | (B & D) | (C & D)) + E + W[i] + | |
285 | 0x8f1bbcdc; | |
286 | E = D; | |
287 | D = C; | |
288 | C = (B << 30) | (B >> 2); | |
289 | B = A; | |
290 | A = T; | |
291 | } | |
292 | ||
293 | for (i = 60; i < 80; i++) | |
294 | { | |
295 | unsigned int T; | |
296 | T = ((A << 5) | (A >> 27)) + (B ^ C ^ D) + E + W[i] + 0xca62c1d6; | |
297 | E = D; | |
298 | D = C; | |
299 | C = (B << 30) | (B >> 2); | |
300 | B = A; | |
301 | A = T; | |
302 | } | |
303 | ||
304 | base->H[0] += A; | |
305 | base->H[1] += B; | |
306 | base->H[2] += C; | |
307 | base->H[3] += D; | |
308 | base->H[4] += E; | |
309 | } | |
310 | ||
311 | ||
312 | ||
313 | ||
314 | /************************************************* | |
315 | * Process the final text string * | |
316 | *************************************************/ | |
317 | ||
318 | /* The string may be of any length. It is padded out according to the rules | |
319 | for computing SHA-1 digests. The final result is then converted to text form | |
320 | and returned. | |
321 | ||
322 | Arguments: | |
323 | base pointer to the sha1 storage structure | |
324 | text pointer to the final text vector | |
325 | length length of the final text vector | |
326 | digest points to 16 bytes in which to place the result | |
327 | ||
328 | Returns: nothing | |
329 | */ | |
330 | ||
331 | static void | |
332 | native_sha1_end(sha1 *base, const uschar *text, int length, uschar *digest) | |
333 | { | |
334 | int i; | |
335 | uschar work[64]; | |
336 | ||
337 | /* Process in chunks of 64 until we have less than 64 bytes left. */ | |
338 | ||
339 | while (length >= 64) | |
340 | { | |
341 | native_sha1_mid(base, text); | |
342 | text += 64; | |
343 | length -= 64; | |
344 | } | |
345 | ||
346 | /* If the remaining string contains more than 55 bytes, we must pad it | |
347 | out to 64, process it, and then set up the final chunk as 56 bytes of | |
348 | padding. If it has less than 56 bytes, we pad it out to 56 bytes as the | |
349 | final chunk. */ | |
350 | ||
351 | memcpy(work, text, length); | |
352 | work[length] = 0x80; | |
353 | ||
354 | if (length > 55) | |
355 | { | |
356 | memset(work+length+1, 0, 63-length); | |
357 | native_sha1_mid(base, work); | |
358 | base->length -= 64; | |
359 | memset(work, 0, 56); | |
360 | } | |
361 | else | |
362 | { | |
363 | memset(work+length+1, 0, 55-length); | |
364 | } | |
365 | ||
366 | /* The final 8 bytes of the final chunk are a 64-bit representation of the | |
367 | length of the input string *bits*, before padding, high order word first, and | |
368 | high order bytes first in each word. This implementation is designed for short | |
369 | strings, and so operates with a single int counter only. */ | |
370 | ||
371 | length += base->length; /* Total length in bytes */ | |
372 | length <<= 3; /* Total length in bits */ | |
373 | ||
374 | work[63] = length & 0xff; | |
375 | work[62] = (length >> 8) & 0xff; | |
376 | work[61] = (length >> 16) & 0xff; | |
377 | work[60] = (length >> 24) & 0xff; | |
378 | ||
379 | memset(work+56, 0, 4); | |
380 | ||
381 | /* Process the final 64-byte chunk */ | |
382 | ||
383 | native_sha1_mid(base, work); | |
384 | ||
385 | /* Pass back the result, high-order byte first in each word. */ | |
386 | ||
387 | for (i = 0; i < 5; i++) | |
388 | { | |
389 | register int x = base->H[i]; | |
390 | *digest++ = (x >> 24) & 0xff; | |
391 | *digest++ = (x >> 16) & 0xff; | |
392 | *digest++ = (x >> 8) & 0xff; | |
393 | *digest++ = x & 0xff; | |
394 | } | |
395 | } | |
396 | ||
397 | ||
398 | ||
399 | ||
400 | ||
401 | ||
402 | # ifdef notdef | |
403 | void | |
1ed59855 | 404 | exim_sha_init(hctx * h, hashmethod m) |
5fb822fc JH |
405 | { |
406 | h->hashlen = 20; | |
407 | native_sha1_start(&h->sha1); | |
408 | } | |
409 | ||
410 | ||
411 | void | |
412 | exim_sha_update(hctx * h, const uschar * data, int len) | |
413 | { | |
414 | native_sha1_mid(&h->sha1, US data); /* implicit size always 64 */ | |
415 | } | |
416 | ||
417 | ||
418 | void | |
419 | exim_sha_finish(hctx * h, blob * b) | |
420 | { | |
421 | b->data = store_get(b->len = h->hashlen); | |
422 | ||
423 | native_sha1_end(&h->sha1, NULL, 0, b->data); | |
424 | } | |
425 | # endif | |
426 | ||
427 | ||
2592e6c0 JH |
428 | #endif |
429 | /******************************************************************************/ | |
430 | ||
431 | /* Common to all library versions */ | |
432 | int | |
433 | exim_sha_hashlen(hctx * h) | |
434 | { | |
1ed59855 JH |
435 | return h->method == HASH_SHA1 ? 20 |
436 | : h->method == HASH_SHA256 ? 32 | |
437 | : 0; | |
5fb822fc JH |
438 | } |
439 | ||
440 | ||
441 | /******************************************************************************/ | |
442 | /******************************************************************************/ | |
443 | /******************************************************************************/ | |
444 | /******************************************************************************/ | |
445 | /* Original sha-1 interface used by crypteq{shal1}, | |
446 | ${sha1:} ${hmac:} and ${prvs:} */ | |
447 | ||
448 | #ifdef SHA_NATIVE | |
449 | ||
450 | void | |
451 | sha1_start(hctx * h) | |
452 | { | |
453 | native_sha1_start(&h->sha1); | |
454 | } | |
455 | ||
456 | void | |
457 | sha1_mid(hctx * h, const uschar * data) | |
458 | { | |
459 | native_sha1_mid(&h->sha1, data); | |
2592e6c0 JH |
460 | } |
461 | ||
5fb822fc JH |
462 | void |
463 | sha1_end(hctx * h, const uschar * data, int len, uschar *digest) | |
464 | { | |
465 | native_sha1_end(&h->sha1, data, len, digest); | |
466 | } | |
467 | ||
468 | #else | |
469 | ||
470 | void | |
471 | sha1_start(hctx * h) | |
472 | { | |
1ed59855 | 473 | exim_sha_init(h, HASH_SHA1); |
5fb822fc JH |
474 | } |
475 | ||
476 | void | |
477 | sha1_mid(hctx * h, const uschar * data) | |
478 | { | |
479 | exim_sha_update(h, data, 64); | |
480 | } | |
481 | ||
482 | void | |
483 | sha1_end(hctx * h, const uschar * data, int len, uschar *digest) | |
484 | { | |
485 | blob b; | |
486 | exim_sha_update(h, data, len); | |
487 | exim_sha_finish(h, &b); | |
488 | memcpy(digest, b.data, 20); | |
489 | } | |
490 | ||
491 | #endif | |
492 | ||
493 | ||
494 | ||
495 | ||
496 | ||
497 | ||
498 | /************************************************* | |
499 | ************************************************** | |
500 | * Stand-alone test program * | |
501 | ************************************************** | |
502 | *************************************************/ | |
503 | ||
504 | # ifdef STAND_ALONE | |
505 | ||
506 | /* Test values. The first 128 may contain binary zeros and have increasing | |
507 | length. */ | |
508 | ||
509 | static uschar *tests[] = { | |
510 | "", | |
511 | "\x24", | |
512 | "\x70\xf0", | |
513 | "\x0e\x1e\xf0", | |
514 | "\x08\x38\x78\x8f", | |
515 | "\x10\x3e\x08\xfc\x0f", | |
516 | "\xe7\xc7\x1e\x07\xef\x03", | |
517 | "\xe0\xfb\x71\xf8\xf9\xc1\xfc", | |
518 | "\xff\x7c\x60\x3c\x1f\x80\xe2\x07", | |
519 | "\xf0\x3f\xc8\x60\x81\xfe\x01\xf8\x7f", | |
520 | "\x9f\xc7\xf8\x1f\xc1\xe3\xc7\xc7\x3f\x00", | |
521 | "\x00\x7f\xbf\xdf\xc0\xfe\x02\x7e\x00\xf8\x7f", | |
522 | "\x01\x01\xc0\x1e\x03\xf8\x30\x08\x0f\xf3\xf9\xff", | |
523 | "\xc4\x03\xfc\x0f\xf8\x01\xc0\x0f\xf0\x06\x10\x41\xff", | |
524 | "\xff\x07\x80\x47\xfc\x1f\xc0\x60\x30\x1f\xe0\x3c\x03\xff", | |
525 | "\x80\x3f\x84\x3e\xff\xc0\x3f\x0f\x00\x7f\xc0\x1f\xe7\xfc\x00", | |
526 | "\xff\xe0\x7f\x01\x81\x81\xff\x81\xff\x00\x3e\x00\x20\x7f\x80\x0f", | |
527 | "\x00\x3e\x00\x70\x1f\xe0\x0f\xfa\xff\xc8\x3f\xf3\xfe\x00\xff\x80\xff", | |
528 | "\x7f\xef\xc0\x1e\x7c\xff\xe0\x1f\xfe\x00\x1f\xf0\x08\xff\xc0\x7f\xf0\x00", | |
529 | "\xe0\x0f\x80\x07\x0c\x01\xff\xe0\x03\xf0\x2f\xf8\x3f\xef\x00\x78\x01\xfe\x00", | |
530 | "\xe7\x00\x10\x00\xf8\x18\x0f\xf0\xff\x00\xff\x80\x3f\xc3\xfe\xf0\x0f\xfc\x01\xff", | |
531 | "\x00\x1f\xf8\x0f\xfc\x00\xfc\x00\xff\x87\xc0\x0f\x80\x7b\xff\x00\x0f\x02\x01\xff\xc0", | |
532 | "\x00\x0f\xf0\x03\xc7\xf8\x3e\x03\xff\x80\x03\xff\x80\x07\xff\x0f\xff\x1f\x83\xff\x80\x1f", | |
533 | "\xff\xc0\x1f\x80\x3f\x9f\xf8\x78\x3e\x7f\xf8\x00\x3e\x20\x04\x3f\x80\x7f\xfc\x00\x1f\xfe\x00", | |
534 | "\x3f\x07\x80\xe0\x07\xe0\x00\xfc\x7f\xc0\xc0\x0f\x8f\xf0\x80\x0e\x0e\x03\xff\xbf\xfc\x01\xff\xe0", | |
535 | "\xff\xfc\x11\xfc\xe0\x0e\x1f\xff\x87\x80\x1f\xe0\xff\xfd\xff\xc0\x03\xff\xc0\x0f\x00\x07\xf0\x01\xff", | |
536 | "\xf0\x07\xc1\xfe\x00\xf8\x01\xe7\x80\xff\x80\x3f\x1f\x7f\x8c\x00\x1c\x00\x0f\xf8\x07\xfc\x00\xff\xfc\x00", | |
537 | "\x00\x0f\xf8\x3f\xc0\x60\x00\x7f\xf8\xff\x00\x03\xf0\x3c\x07\xc0\x7f\xe0\x3f\xf8\x01\x00\x7e\x03\xff\xc0\x00", | |
538 | "\x00\x0f\xf8\x03\x00\x1f\xff\x00\x0f\xfe\x00\x3f\x00\x03\xff\xe0\x07\xc0\xff\x00\x3c\x7f\xf0\x01\xff\xf8\x3f\xff", | |
539 | "\x00\x01\xe0\xe0\x1f\xfe\x00\x03\xfc\x00\x0f\xff\xe0\x0f\xff\x00\x0e\x00\x7f\xfc\x0f\xfe\x00\x78\x00\x3f\xff\x00\xff", | |
540 | "\x80\x41\xff\xc3\xfe\x00\x1e\x00\x0f\xff\xe0\xff\x80\x0f\xe0\x00\x7f\xf7\xff\x01\xfe\x01\xff\xdf\xff\x00\x01\xff\xe0\x00", | |
541 | "\xf8\x07\x00\xff\xc0\x7f\xbe\x00\x0f\xff\x00\x03\xe3\xf0\xff\xf0\x00\x1f\x81\xff\x80\x0f\xff\x80\x20\x03\xf0\x03\x80\xff\xfc", | |
542 | "\x00\x38\x20\x00\x7f\xf0\x01\xff\xfe\xcf\xfe\x07\xff\xc0\x00\x7f\xf8\x1f\x00\x00\xc0\x00\xc0\x0f\xff\x3e\x0f\xc0\x0f\xff\x80\x00", | |
543 | "\x1f\xf8\x07\xff\xf8\x03\xe0\x01\xff\xfc\x3f\xf8\x00\x38\x1f\x00\x3f\xdc\x01\xc0\x04\xff\xff\x00\x0f\xfc\x08\x02\x00\x01\xf0\x3f\xff", | |
544 | "\x80\x07\x86\x00\x03\xff\xe0\x00\x3f\xf8\x00\x0f\x80\x0f\xf8\x0f\xff\xe0\x00\x1f\x80\x00\x7f\xf8\xc0\x0f\xff\xf0\x7c\x04\x07\xff\x00\x00", | |
545 | "\x01\xff\x00\x18\x3e\x0f\x00\x07\xff\xc0\x00\xf0\x1f\xfe\x07\x80\x60\x0f\xf8\x00\x3f\xfe\x38\x1f\xc0\x00\x3f\x81\xff\xfc\x1f\xe0\x00\x3f\xff", | |
546 | "\xf0\x3f\xff\xc0\x00\x7f\xf0\x00\x3f\xff\x0f\xe0\x07\x0f\xfc\x7e\x03\xff\xf0\xfc\x0f\x9f\xc0\x3f\xff\xcf\xff\x00\x00\xff\xc0\x00\xe7\x01\xff\xf8", | |
547 | "\x00\x01\xff\x80\x20\x00\x7f\xe0\x00\x7e\x07\xff\xf8\xc7\xf8\xff\xf0\x0f\xfe\x00\x00\xe0\x0f\xe0\x00\x1f\xff\x87\xff\x00\x01\xf0\x00\x7f\xc1\xff\xff", | |
548 | "\x00\x00\x7f\xff\xc0\x01\xfe\x7e\x01\xff\xfe\xff\xf0\x7f\xff\xcf\xf8\x07\xfe\x00\x0f\xff\xc0\x07\xff\xfc\x00\x3e\x00\x07\xfc\x00\x7f\xc0\x07\x80\x0f\xff", | |
549 | "\xff\xff\x03\xff\x07\xf8\xff\xff\x80\x00\x7f\xfe\xff\xfe\x00\x03\xff\xf8\x1f\xff\x3f\xf8\x1f\xff\x00\x1f\xff\x0f\xc0\x7f\xf0\x01\xff\xe0\x00\x1f\xff\x00\x00", | |
550 | "\xff\xff\x00\x00\xff\xfc\x00\x03\x0f\xff\xf0\x01\xf8\x00\x0f\xe1\xff\xff\x03\xe0\x3f\x1f\xff\x80\x00\x7c\x00\x01\xff\xc0\x01\x7f\xfe\x00\x0e\x07\xff\xe0\xff\xff", | |
551 | "\xc0\x00\x3f\xfe\x03\xfc\x0c\x00\x04\x01\xff\xe1\xe0\x03\xff\xe0\x30\x01\xff\x00\x00\x3c\x1e\x01\x80\x01\xff\x00\x40\x3f\xfe\x00\x3f\xff\x80\x7c\x01\xff\x80\x00\x7f", | |
552 | "\x3f\xa0\x00\x0f\xff\x81\xff\xc0\x0f\xf0\x7f\xf8\x00\x0f\xc0\x00\x7f\xe0\x01\xe0\x00\x04\xff\x00\x1f\xfe\x00\x01\xff\x80\x07\xff\xfe\x00\x3f\xff\xc0\x03\xff\x80\x00\x3f", | |
553 | "\xf0\x1f\xff\x01\xff\x80\xff\xc0\x80\x07\xf0\x00\x03\xff\x80\x00\x18\x01\xff\xfc\x00\xff\xfc\x03\xff\xff\x00\x7f\xc0\x03\xff\xc7\xff\xc0\x03\xf0\xff\x80\x00\x3f\xfe\x00\x00", | |
554 | "\x07\xf1\xbf\xff\xe0\x00\x78\x00\x07\xe0\x00\x80\x03\xf0\x3f\xf7\x00\x00\x38\x00\xfe\x00\xf8\x0f\xfe\x00\x00\x80\x3f\xff\xc1\xff\xfc\x00\xff\xff\x8f\xf0\x00\x1f\xff\xf0\x0f\xff", | |
555 | "\x00\x1c\x00\x07\xff\xfc\x00\x5e\x3f\xff\x00\x00\x3c\xff\xff\xc0\x3f\xff\x81\xe0\x70\x00\x1f\xfc\x00\x03\xff\x00\x00\x7f\xff\xc0\x1f\x8c\x0f\xff\xf0\xff\x80\x07\xe0\x10\x01\xff\xff", | |
556 | "\xc0\x00\x07\xff\x80\x7f\xff\x80\x01\x80\x3f\xff\xcf\xc0\xfe\x00\xff\xc0\x1f\xfc\x01\xff\xf8\x00\xff\xfe\x0f\xff\xf0\x06\x00\x00\xc0\x3f\xff\x80\x78\xff\xfc\x00\x0f\xff\xf0\x00\x0f\xff", | |
557 | "\xff\xe0\x07\xff\xf8\x00\x7f\xf0\x1f\xff\x80\x01\xff\xf8\x1f\xf8\x01\x03\xff\xe0\x00\x03\xe0\x78\x0f\xff\x00\x0f\xfc\x1f\xf8\x00\x0f\xff\xe0\x1f\x00\x07\xff\xfc\x00\x1f\x03\xff\xf7\xff\xff", | |
558 | "\xc0\xf8\x00\x03\xfe\x00\x3f\xff\xf0\x00\x03\xfc\x0f\xff\x80\x00\xe3\xff\xf8\x3f\xfe\x00\x00\x73\xe0\xff\xfc\x07\xff\xc3\xff\xfe\x03\x00\x00\x70\x00\x03\xff\xf8\x0f\xff\xe0\x00\x1f\xff\xf8\x00", | |
559 | "\xff\xf0\x0f\xc7\xff\xfc\x00\x3f\xfe\x00\x00\x3f\xff\x80\x3f\x80\x00\x3f\xff\xc0\x00\x70\x01\xff\xc1\x80\x03\xff\xff\x80\x00\x61\xff\xfe\x03\xfd\x80\x3f\xff\xe0\x01\xc1\xff\xff\x80\x00\x0f\xfe\x00", | |
560 | "\xff\xfc\x00\x03\xff\xf0\x0f\xf8\x00\x07\xdf\x8f\xff\xf8\x00\x01\xff\xfe\x00\x80\x00\xff\x80\x1f\xf0\x00\x01\x1c\x00\x00\x3f\xf8\x00\x3f\xff\xef\xff\xfe\x01\xc3\x80\x80\x01\xff\xff\xc0\x00\x07\xff\xff", | |
561 | "\xff\xff\xc0\x01\xff\xc1\xff\xff\x87\xff\xff\x00\x3f\x00\x00\x1f\xfc\x00\x01\xff\x80\x1f\xc0\x1f\xff\x00\x00\xff\x80\x1f\xff\xf8\x7f\xf8\x3f\xff\xc1\xff\xff\xe0\x01\xc0\x3f\xf7\xff\xfe\xfc\x00\x00\x3f\xff", | |
562 | "\x00\xff\x81\xff\xe0\x03\xf8\x0e\x00\x00\xff\xf8\x1f\xff\xfe\x00\x00\xff\x80\x00\x07\xff\xf8\x01\xff\xe0\x00\x0f\xf0\x01\xfe\x00\x3f\xf0\x7f\xe0\x00\x7f\xff\xe0\x1f\xff\xfc\x01\xff\xe0\x01\x80\x00\x07\xff\xff", | |
563 | "\x00\x0f\xff\xf0\x00\x00\xe0\x0f\xf8\x00\x00\xff\xff\x80\x03\xff\xe1\xff\xff\x3f\xf8\x0f\xff\xc7\xe0\x00\x1f\xff\x00\x3f\xfe\x0f\xff\xf0\x03\x00\xc0\x00\x1f\xff\xfc\x3f\xff\xe0\x3f\xff\xf8\x1f\xf0\x00\x1f\xff\xc0", | |
564 | "\x01\x80\x00\x1f\x01\xff\xff\x83\x00\x01\xfc\x00\x7f\xe0\x0e\x7f\xfe\x00\x00\x38\x00\xff\x00\x00\x3f\xff\x83\x83\xff\xc0\x00\x7f\xff\x80\x1f\xff\xf0\x1f\xff\xfc\x00\x03\x7f\xff\x81\xc0\x00\x07\xff\x83\xff\xff\x00\x00", | |
565 | "\xff\x80\x0d\xff\xe0\x03\xff\xf0\x00\xff\xfc\x00\xf0\x01\xf8\x07\xff\xf8\x0f\x80\x0f\xff\xff\x00\xff\xff\x87\xff\xe1\xff\xfc\x67\x8c\x7f\xfe\x00\x03\xff\x3f\xfc\x07\x01\xff\xff\xe0\x00\x01\xff\xff\xc0\x0c\x40\x0f\xff\xff", | |
566 | "\x00\x00\x1f\xff\xfe\x00\x1f\x00\x00\x1f\xff\xff\x07\xff\xff\xc0\x07\xff\xe0\x00\x02\x00\x00\xff\x00\x78\x00\x00\xe0\x00\x08\x00\x1f\xff\xff\x00\x03\xf8\x1f\x00\x00\x0f\xff\xc0\x00\x01\xff\xff\xe1\xf8\x00\x00\x3f\x80\x0f\xff", | |
567 | "\x00\x0f\xf8\x00\xfc\x00\x03\xff\xff\x00\x00\x3f\xf0\x01\xff\xff\xe0\x7f\xf8\x00\xf8\x0f\xff\xff\x80\x00\x0f\xff\xfc\x0f\xff\xe0\x00\x00\xff\xc3\xff\xf0\x07\xff\xff\x00\x38\xf8\x00\x20\x1f\xfe\x3f\xfe\x00\xfe\x00\x7f\xff\xc0\x00", | |
568 | "\x00\x3f\x00\xe0\x00\x0f\xff\xfc\x7f\xff\xfc\x00\x00\x7e\x00\x00\xff\xfe\x1f\xf0\x00\x1f\xf0\x00\x1f\xff\x87\xf0\x00\x3f\xc0\x0f\xff\x87\xff\x00\x3f\x81\xff\xff\xf7\xff\xe0\xff\xe0\x3f\x9f\xff\x00\x07\x00\x7f\xfc\x03\xff\xf0\x00\x00", | |
569 | "\xe0\x3f\xff\xf0\xff\x80\x3e\x00\x03\xff\xe0\x00\x0f\xfc\x00\x07\xff\xf8\x00\x00\x7f\x80\x00\x0f\xf8\x01\xff\x7f\xff\xf0\x00\x3f\xff\xfe\x7f\xff\xe0\x00\xff\xc3\xff\xff\x00\x00\xf0\x00\x00\x7f\xff\x00\x3f\xff\xf0\x00\x01\xc0\x03\xff\xff", | |
570 | "\x00\x03\xc0\x01\xff\xdf\xfd\xff\x9f\xfe\x1f\xff\xff\x00\x3f\xff\xfe\x00\x00\x7f\xcf\xff\xf0\x1f\xff\xfe\x07\xf0\x00\xff\xff\xe0\x00\x01\x00\x07\xff\x80\x1f\xe0\x00\x00\xff\xfe\x03\xff\xff\x80\x03\xf0\x0f\xff\xfe\x00\x00\x1f\xff\xf8\x00\x00", | |
571 | "\x00\x1f\xff\xfb\xff\xfe\x00\x07\xff\xf0\x00\x00\xff\xff\x00\x00\x0f\xf3\xff\xfe\x00\x78\x00\x00\x3e\x00\x00\x3f\xff\xf8\x00\x1f\xff\xff\x80\x00\x03\xff\xff\x00\x07\xff\xee\x00\x1f\xfc\x00\x78\x00\x00\x1f\xff\x07\xff\xfe\x03\xff\xff\xe0\x00\x00", | |
572 | "\x00\x7f\xff\xfe\x00\x00\x3f\xfc\x03\xff\xfc\x1f\xff\xf0\x7f\xd8\x03\xf0\x00\xfd\xfc\x38\x00\x08\x00\x10\x00\xe0\x06\x00\x7f\xfe\x00\x00\x0f\xff\x80\x00\x3f\x03\xff\xfe\xff\xff\xf9\xff\xf8\x00\x07\xff\xfc\x01\xff\xc0\x00\x03\xff\xff\xe0\x03\xff\xff", | |
573 | "\xff\xf0\x0f\xff\xff\x00\x06\x00\xff\xff\xf0\x07\xff\xe0\x04\x00\x03\x00\x00\x03\xf0\xff\xff\x00\x03\xff\xfb\xff\xc3\xff\xf0\x07\xff\xff\xc7\x00\x7f\x80\x00\x03\xff\xf8\x00\x1f\xe1\xff\xf8\x63\xfc\x00\x3f\xc0\x9f\xff\xf8\x00\x00\x7f\xff\x1f\xff\xfc\x00", | |
574 | "\x00\x3f\xff\xfc\x00\x0f\xc7\x80\x00\x02\x00\x1e\x00\x00\x60\x7f\x03\xfe\x00\x00\x1f\xff\x80\x1f\xf8\x00\x00\xff\xff\x80\x00\x03\xff\xc0\x00\x7f\xff\xc0\x7f\xe0\x03\xfc\x00\xff\xf7\xff\xff\x00\x00\x1f\xf0\x00\x03\xff\xff\xe1\xff\xff\x80\x0f\xf8\x00\x00\x1f", | |
575 | "\x00\x01\xfe\x00\x03\x83\xf3\xff\xff\x80\x07\xff\xfc\x3f\xff\xfc\x03\xff\x80\x00\x06\x00\x00\x78\x00\x07\xff\xff\x80\x07\xfc\x01\xf8\x00\x07\xff\xff\xc0\x00\x38\x00\x07\xff\xfe\x3f\xff\xf8\x3f\xff\xcf\x3f\xfc\x00\x7f\xff\x00\x1f\xff\x80\x00\x30\x03\xff\xff\x00", | |
576 | "\xf8\x00\x38\x00\x00\x3e\x3f\x00\x00\x3f\xff\xf0\x02\x00\x00\x0f\xff\xff\x80\x80\x03\xff\xc0\x00\x04\x00\x0f\xc0\x3f\xff\xfe\x00\x00\x3f\xff\xfe\x00\x3f\xff\xf8\x00\x30\x00\x7b\xff\x00\x00\x03\xff\xfc\x3f\xe1\xff\x80\x00\x70\x1f\xff\xc0\x07\xfc\x00\x1f\xff\xf0\x00", | |
577 | "\x00\x03\xf8\x18\x00\x00\x70\x3f\xff\xf8\x00\x00\xff\xcf\xff\xff\xc0\x03\xff\xfe\x00\x10\x00\x00\xfe\x03\xff\xf8\x00\x00\x7e\x00\x00\x7f\x8f\xff\xc0\x00\x00\x7f\xff\xe0\x00\x3c\x07\xc0\x00\x00\x7f\xff\x01\xff\xf8\x01\xff\x80\x00\x0f\xff\xf9\xe0\x00\x3f\xff\xe0\x00\x00", | |
578 | "\xff\xfe\x00\x3f\xc0\x1f\xff\xf0\x7f\xf8\x00\x01\xff\xf8\x1f\xff\xfe\x00\x00\xff\xff\xf8\x00\x7f\xff\x80\x3f\xff\xff\x00\x7f\xff\xf8\x00\x0c\x00\x00\x0f\xfe\x7e\x00\x3f\xe0\x18\x7f\xfe\x00\x00\x38\x00\x00\x3f\xff\xfe\x00\x00\x03\xfc\xff\xe1\xfe\x1f\xff\xfe\x00\x00\x07\xff", | |
579 | "\x00\x00\x07\xff\xfe\x00\x00\x07\xfe\x00\x00\x3f\xe0\x00\x7f\xff\xc0\x00\x00\x7f\xff\xfc\x00\xfe\x00\x03\xff\xe0\x00\x1f\x0f\xfc\x00\x1f\xff\x80\x00\x07\xff\xff\xf0\x00\xff\xff\xf0\x00\x00\x1f\xff\xf8\x01\xff\xe0\x1f\xff\xff\x00\x1f\x80\x07\xf0\x00\x01\xff\xf8\x00\x01\xff\xff", | |
580 | "\x00\x00\x3f\xff\xff\x03\xfe\x00\x00\x07\xc0\x00\x00\x7f\xfc\x0f\xf0\x00\x00\x1f\xff\xfe\x00\x00\x07\xc0\x00\x00\xff\xfe\x00\x00\x3f\xff\xfc\x01\xff\x7f\xfc\x00\x1f\xf8\x00\x1f\xff\x07\xff\xff\xe0\x00\x7f\xff\xfc\x01\xff\xff\xf0\x00\x01\xff\xf8\x00\x1e\x00\x00\x7f\xfc\x00\x3f\xff", | |
581 | "\xfe\x3f\xff\x83\xff\xfe\x00\x07\xff\xff\xf0\x00\x3e\x00\x00\xff\xff\xfc\x00\x40\x3f\xfe\x00\x00\x03\xf0\x00\x00\x70\x3f\xf8\x0f\xff\xff\xe0\x1f\x80\x00\x03\xc3\xff\xff\xf0\x00\x01\xff\xf0\x0f\x80\x00\x0f\xe0\xff\xff\xfe\xf0\x00\x01\xff\xc0\x00\x00\x7f\xf0\x00\x00\x7f\xfe\xe0\x00\x00", | |
582 | "\x00\x00\x03\xff\xf0\x01\xfc\x00\x00\xff\xff\x00\x00\x7f\xff\xff\x80\x07\xff\x8f\xff\x80\x00\x0f\xff\xf0\x00\x00\x3c\x00\x03\xc0\xff\xff\xfe\x01\xff\xff\x80\x0c\x7f\xff\xf8\x00\x00\x1f\xf0\x00\x00\x7f\x80\x00\x00\x80\x00\x00\xff\xff\xf0\x1f\xff\xe0\x00\xff\xff\xfe\x1f\xff\x1f\xc0\x00\x00", | |
583 | "\xff\xff\xfe\x07\xff\xc0\x00\x06\x3f\x9f\xf0\x07\xff\xf0\x3f\xfe\x1f\xff\xff\x81\xff\xff\xc0\x00\x02\x00\xfe\x00\x04\x00\x07\x00\x00\x01\xff\xff\xfe\x00\x00\x07\xff\xfe\x00\x1f\xfe\x00\x00\xff\xff\xe0\x07\xf8\x00\xff\xff\xfc\x00\x3f\xf3\xff\xff\xc0\x00\x7f\xff\xe0\x00\x0f\xff\xfc\x07\xff\xff", | |
584 | "\xff\xf0\x00\x00\x7e\x00\x1e\x03\xff\xff\x00\x00\x73\xff\xf0\x00\x00\x0f\xff\xdf\xff\xff\xdf\xfc\x00\x07\xfe\x07\xff\xfe\x00\x00\x1f\xdf\xef\xff\xf0\x3f\xff\xfc\x00\x00\x07\xff\xff\xf0\x00\x00\x7f\xe0\x07\xff\x80\x00\x00\x7f\xe0\x03\xff\xff\xf9\xff\xe0\x00\x00\x3f\xe3\xff\xff\xfc\x00\x00\x03\xff", | |
585 | "\x00\x03\xff\x00\x00\x3f\xff\x80\x01\xf0\x00\x0f\xfe\x00\x00\x06\x00\x03\xff\xff\xfc\x03\xff\xff\xf7\x80\x00\x00\x7f\xc0\x0f\xff\xe3\xfe\x0f\x00\x00\x7f\xff\x00\x7f\xf8\x00\x00\xff\xff\xee\x00\x7e\x01\xc0\x00\x1f\xe0\x00\x07\xff\xff\xf8\x00\x00\xe1\xff\xfc\x3f\xe7\xff\xff\xf8\x3f\xff\xfc\x00\x1f\xff", | |
586 | "\x00\x00\x0f\xff\xf8\x00\x00\xff\xff\xfc\x00\x1f\xe0\x07\xff\xff\x00\x01\xff\xdf\xff\x80\x00\x3f\xff\xfc\x00\x00\x0f\xfc\x07\xff\x00\x00\xff\x80\x00\x03\xff\xff\xf0\x00\x07\xff\xff\xf0\x00\xff\xfe\x1f\xff\xff\xe0\x3f\xff\xfe\x00\x00\x60\x00\x00\xff\xff\x7f\xff\xf0\x00\x03\xff\xff\xc0\x07\x00\x01\xff\xff", | |
587 | "\x00\x00\x20\x7f\xfe\x0f\x83\xff\xff\x80\x03\xff\x00\x00\x00\xff\xff\xe0\x00\x1f\xff\xff\xe0\x00\x3f\xfe\x7f\xff\xf0\x00\x1f\xff\xff\xe0\x00\x00\xff\xff\x87\xff\xc0\x00\x17\xfd\xff\x9f\xff\xfb\xff\xff\xe0\x00\x03\xe0\x00\x07\xff\x9f\xff\xff\x80\x00\x7f\xff\xff\x00\x01\xff\xff\xc0\xff\xff\xc0\x10\x00\x00\x1f", | |
588 | "\x00\x00\x07\xff\xc0\x00\xff\xe0\x00\x07\xff\x80\x03\x80\x00\x0f\xf8\x00\x00\x7f\xff\xfe\x00\x00\x18\x00\xff\xf0\x20\x01\xff\xfe\x00\x00\x60\x0f\xf0\xe0\x03\xff\xfe\x00\x3e\x1f\xff\xfc\x00\x03\xff\x80\x00\x00\xff\xf8\x00\x01\x00\x00\x0f\xf3\xff\xfc\x00\x03\xff\xff\xe1\xff\xff\xc1\xf0\x00\x00\xff\xff\xff\x00\x00", | |
589 | "\xff\xff\xf0\x00\x00\x07\xff\xfc\x00\x7f\x87\xff\xff\x00\x00\x00\x7f\xff\xc0\x7f\xff\x80\x00\x03\xf0\xff\x3f\xff\x80\x30\x07\xff\xff\x1f\x8e\x00\x7f\xff\xff\xc0\x01\xff\xfc\x07\xf8\x00\x00\x7f\xff\xfc\x00\x3f\xf0\x00\xf8\x00\x00\x07\xff\x00\x00\x0e\x00\x0f\xff\x80\x00\x7f\xc0\x01\xff\x8f\xf8\x00\x07\x01\xff\xff\xff", | |
590 | "\xff\x80\x3f\xff\x3f\xfe\x00\x00\xff\xff\xff\x9f\xff\xf8\x3f\xff\xf8\x00\x00\x0f\xf8\x00\x00\x03\xfe\x00\x7f\xff\xff\x00\x0f\xff\x01\xff\xf0\x0f\xff\xe0\x20\x7f\xff\xfc\xff\x01\xf8\x00\x07\xff\xe0\x00\x7f\xf8\x00\x0f\xff\x80\x00\x00\x7f\xe0\x00\x3f\xf8\x01\xfe\x00\x07\xff\xf0\x00\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff", | |
591 | "\x00\x7f\xff\xe0\x00\x01\xff\xff\xf8\x00\x00\x3f\xff\xfc\x00\x7f\xfe\x00\x00\x03\xff\xff\xf0\x03\xff\xe0\x00\x7f\x80\x00\x0f\xff\x3f\xf8\x00\x00\x7f\xff\xff\x00\x07\x80\x1f\x83\xf8\x00\x00\x0f\xfe\x3f\xff\xc0\x3f\xff\xfe\x1f\xe0\x00\x07\xc0\x03\xff\xf0\x0f\xc0\x00\x03\xff\xff\x80\x00\x00\x7f\x80\x00\x00\xff\xff\x80\x00\x00", | |
592 | "\xfe\x00\x00\x20\x00\x04\x00\x0f\xff\xff\xc0\x01\xff\xf8\x3f\xc0\x00\x00\xff\xff\xc0\x00\xff\xff\xff\x80\x00\x3f\xf8\x00\x7f\xff\xfe\x7f\xf8\x00\x7f\xff\x80\x07\xff\xc0\x00\x0f\xff\xf8\x00\x7f\xff\xc0\x00\xff\xff\xc0\x3f\xff\xff\xe0\x0f\xff\xff\xe0\xe0\x1f\xff\x80\x00\x00\x7f\xff\xc0\x71\xff\xff\xfc\x00\x01\xff\xff\xf8\x00\x00", | |
593 | "\xff\xff\xe0\x00\x0f\xff\xf0\x00\x00\x3f\xff\xff\xc0\x00\xff\xff\x00\x00\x0f\xff\xff\xe0\x00\x01\xff\x00\x00\x1f\xff\xe0\x3f\xfc\x00\x03\xe0\x1f\xf0\x1f\xf8\x00\x00\x3f\xff\xff\xc0\x0f\xfe\x00\x00\x20\x00\x00\xff\xfc\x00\x0f\xff\xfe\x3f\xff\xff\x00\xff\xf0\x00\x00\x80\x00\x1f\x03\xe0\x01\xff\xfa\x00\x3f\xe0\x00\x00\x70\x00\x00\x0f", | |
594 | "\xfd\xff\xc0\x00\x20\x01\xfe\x00\x3f\xf8\x00\x03\xff\x00\x00\x03\xf8\xff\xcf\xc3\xff\xff\xfc\x00\x03\xff\xff\xfc\x00\x00\x78\x3f\xff\xf0\x01\xff\xe0\x0f\xff\xff\x00\x00\x07\xff\xff\xfc\xff\xff\xf8\x00\x01\xff\x80\x00\x07\xff\xff\xfc\x00\x00\x1c\x00\x01\xff\xff\x07\xf8\x00\x00\x1f\xff\xff\xf0\x00\x01\xfe\x00\x7f\xff\xf0\x1f\xfc\x00\x00", | |
595 | "\x00\x00\x00\x3f\xff\x00\x00\x07\xff\xff\xfc\x00\x00\x01\xe0\x0f\xff\x83\xfc\x01\xff\xff\xf0\x0f\xff\x00\x00\x00\x3f\xff\xff\xc0\x1f\xff\xff\xe0\x00\x20\x00\x00\x3f\xff\xff\x00\x00\xff\xfc\x03\xff\xff\xf0\x00\x1f\xff\xfc\x00\x00\x03\xff\xff\xc0\x7f\x80\x00\xff\xff\xff\x00\x0f\x0f\xff\xff\xe0\x00\x00\xff\xf8\x00\x00\xff\xfe\x00\x00\x0f\xff", | |
596 | "\xff\xfe\x03\x80\x00\x03\xff\xff\xc0\x3f\xff\xff\x00\x03\xff\xff\xf8\x00\x00\x01\xff\xff\xcf\xfc\x00\x00\xe0\xef\xf8\x00\x0f\xff\xe3\xf8\x00\x3f\xff\xff\x80\x3f\xbf\xfe\x00\x00\xff\xfc\x00\x00\x01\xff\x00\x00\xcf\xc0\x01\xfc\x00\x00\x7f\xff\xff\xc0\x00\x10\x7f\xff\xfc\xfe\x00\x00\x07\xc0\xff\xff\xff\x8f\xff\x00\x00\x1f\x9e\x00\x00\x01\xff\xff", | |
597 | "\x00\x7f\xff\xe0\x00\x01\xff\xff\xc3\xff\x80\x01\x03\xfc\x00\x00\x00\xfc\x01\xff\xff\xf8\x7f\xe7\xf0\x00\x00\x7f\xc0\x3f\xff\xff\xc0\x00\x00\x1f\xff\x80\x00\x01\xff\xe0\x00\x00\x70\x00\x00\x1c\x7f\xff\xf8\x1f\xfc\x00\x00\x07\xef\xe0\xff\xff\xc1\xff\xfc\x00\x00\x01\xff\xff\xff\xa0\x07\xff\x00\x1e\x00\x1f\xfc\x00\x00\x38\x00\x18\xc0\x00\x00\x7f\xff", | |
598 | "\x00\x0f\xff\xf8\x00\x00\x07\xff\x00\xfc\x00\x00\x03\xff\xfc\x00\x07\xff\xff\xe0\x00\x00\xff\xfc\x0f\xff\x00\x00\x0f\xff\xfe\x0f\x80\x07\xff\x03\xff\xff\xf9\xff\xfe\x00\x00\x03\xf8\x00\x00\x07\xe0\x00\x00\xc0\x00\x1f\xff\xf0\x7f\xff\xff\xc0\x07\xff\xff\xfc\x00\x00\x3f\xff\xff\xe0\x00\x00\x1f\xff\xf8\x1f\xfe\x00\x00\x3f\xff\xff\xe0\x3f\x06\x00\x00\x00", | |
599 | "\xff\xf0\x00\x08\x00\x0f\xef\xff\xff\xfc\x00\x00\x7f\xff\xf0\x00\x7f\xff\xf8\x00\xff\xff\x81\xff\xff\xe0\xff\xff\xff\x00\x00\x00\x80\x00\x03\xff\x80\x3f\xff\xfc\x00\x00\x1f\xff\xc0\x0f\xff\xfe\x00\x00\x00\x73\xf0\x1f\xfe\x00\xff\xc0\x3f\xff\x00\x3f\xff\x83\xff\xfe\x01\xff\xff\xf7\xff\xff\x80\x00\x00\x3f\x00\x00\x1f\xe3\xff\xff\xf0\x00\x0f\xff\xf0\x00\x00", | |
600 | "\x00\x00\x7f\xfc\x00\x7f\xe0\x00\x0f\xff\xe0\x01\xf8\x00\x3f\xff\x00\x00\x78\x00\x7f\xe0\x00\x00\x1f\x00\x07\xff\xff\xf8\xf9\xf0\x01\xff\xf8\x07\xc0\x0f\xff\xf8\x00\x07\xf8\x7f\xfe\x00\x00\x0f\xff\xe3\xf0\x00\x07\xff\xff\xfc\x03\x1c\x00\x00\x7f\xe0\x00\xff\xff\xfc\x00\x00\x0f\xf3\xff\xe0\x00\x00\x0f\xff\xf9\x00\x00\x10\x00\x3f\xff\xfc\xf8\x7f\xff\x00\x00\x00", | |
601 | "\x00\x03\xff\xff\xc0\x7f\xff\xff\xc0\x00\x03\xff\xff\xff\x00\x00\x0f\xff\xf0\x1f\xff\xf0\x00\x07\xff\xff\xef\xff\x81\xf7\xff\xfe\x00\x07\xff\xf0\x00\x00\x1f\xff\xc0\x0f\x80\x00\x0f\xff\xfc\x00\x00\xff\xff\xff\xc0\x03\xff\xe3\xff\xff\xfe\x00\x1f\xff\xff\x00\x00\xff\xff\xff\x0f\xff\xf1\xf8\x00\x00\x01\xff\xff\xff\x80\x1f\xff\xfe\x00\x08\x00\x00\x7f\xff\xff\x80\x00", | |
602 | "\x1f\xe0\x00\x7c\x1f\xc0\x07\xff\xc0\x07\xff\xff\xfe\x00\x3c\x00\x00\x00\xff\xff\x80\x00\x07\xff\xff\x00\x1f\xf8\xff\xc0\x00\xff\x81\xff\x01\xff\xfe\x00\x78\x7f\xff\xf0\x00\x01\x80\x00\x00\x1f\xff\x00\x00\x1f\xff\xf0\x00\x1f\xff\xff\xe0\x00\x3c\x00\x00\x1f\xff\xff\x80\x03\xff\xe0\x01\xff\xff\xf9\xff\xf8\x00\x00\x7c\x00\x00\xfe\x00\x00\xff\xff\xff\x00\x00\x0f\xff\xff", | |
603 | "\xfc\x00\x01\xff\x00\x00\x0c\x00\xff\xff\xe3\xff\xff\xf0\x80\x0e\x0e\x00\x00\x0f\xfe\x00\x03\xff\xc0\x00\x00\x7f\xff\xff\xe0\xc0\x00\x00\x07\xe0\xff\xff\x03\x9f\xff\xff\xc1\xc0\x00\x03\xff\xff\xc3\xff\xff\xfc\xff\xff\xc0\x00\x01\xfc\x00\x0f\xfc\x00\x00\x00\x7f\xff\xff\x03\xff\xff\xfc\x0f\xff\xfe\x00\x00\x03\x80\x3f\xff\xff\x00\x00\xff\xff\xf8\x00\x03\xff\xff\x80\x00\x00", | |
604 | "\xff\xff\x80\xff\xff\xf8\x00\x00\xfc\x00\x03\xff\xf8\x00\x0f\xff\xff\x00\x03\x00\x00\x00\x7f\xff\xf0\x00\x3f\xff\xf0\x00\x01\xfc\x01\x00\x03\xff\x80\x1f\xff\xe3\xff\xff\xf8\x00\x1f\xff\xff\xf8\x01\xff\xdf\xff\xfb\xff\xc0\x00\x00\x3f\xff\xf8\x00\x00\x80\xc7\xff\xff\xf8\x0f\xff\x00\x60\x1f\xff\xe0\x00\x01\xff\xff\xfe\x0f\xff\xff\xfc\x00\x00\x00\xf0\x06\x03\xff\xff\xfe\x00\x00", | |
605 | "\xff\x00\x0f\xff\xfc\x00\x0f\xff\xff\xfc\x07\xff\xfc\x00\x00\xf0\x00\x00\x80\x00\x7f\xfe\x00\x00\x0f\xff\xff\xfc\x3f\x00\xff\xff\xff\x00\x1f\xff\xff\xf0\x00\x1f\xff\xff\xe0\x00\x1f\xff\xff\xc3\xff\x00\x00\x01\xff\xff\xf0\x00\x00\x0f\xff\xe0\x07\xfc\x00\x00\x00\xfe\x00\x07\xff\xff\xf8\x00\x00\x3f\x00\x00\x0f\x80\x00\x3f\xff\xc0\x00\x11\xff\xef\x00\x07\x00\x7f\xff\xfc\x00\x00\x00", | |
606 | "\xfe\x00\x00\x7f\xf7\xff\xff\x00\x00\x0f\xff\xff\xe0\x01\xff\xe0\x00\x00\x03\xff\xe0\x00\xff\xfe\x00\x01\xff\xf7\xff\xf8\x00\x0f\xff\x00\x00\x00\x38\x00\x07\xff\xf8\x07\xff\xfc\x00\x1f\xff\xff\x0f\xc1\xff\xff\xc0\x00\xff\xff\x0f\xff\xf0\x01\xff\xf8\x00\x01\xff\xff\x80\x00\x00\x0f\xf8\x00\x3f\xff\xfe\x3f\xff\xff\xf0\x00\x00\x38\x0f\xc3\xff\xff\xff\x1f\xff\xc0\x3f\xff\xff\xe0\x00\x00", | |
607 | "\xff\xff\xf0\x00\x7f\xc0\x07\xff\xff\x81\xff\xc0\x00\x01\xff\xff\xff\xc0\x00\x00\x1f\xff\xfe\x03\xc0\x00\x0f\xff\xff\xfc\x00\x03\xff\xff\xff\x83\xff\xc0\x00\x07\xf0\x00\x00\x1f\x80\x00\x00\x3f\xff\xff\xe7\xff\x00\x07\xff\xff\xfc\x00\x00\x1f\xff\xf8\x00\x03\xf0\x00\xff\xfc\x00\x1f\xff\xff\xe0\x03\xff\xf0\x00\x01\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xf8\x10\x00\x1e\x03\xff\xff\xff\x80\x00", | |
608 | "\x00\x01\xff\xfe\x00\x00\x00\x7f\xff\xff\xf0\x00\x00\x1f\xff\x80\x07\xff\xff\xff\x80\x00\x01\xff\xfc\x03\xff\xff\x9f\xff\xfe\x00\x08\x00\x00\x06\x00\x00\x00\x81\xff\xff\xc0\x00\x07\xf8\x00\xff\xff\xff\x00\x00\x00\xff\xff\xf8\x00\x3f\xff\xff\xf8\x3f\xf8\x00\x00\x00\x7f\xff\xc0\x7f\xff\xff\xc0\xff\xff\xfe\x00\x00\x01\xff\xf8\x00\x00\x03\xff\xc1\xff\xf0\x00\x00\x03\x07\xf8\x01\xff\xfe\x00\x00", | |
609 | "\xf8\x00\x00\x01\xff\xff\x80\x00\x0f\xff\xff\x8f\xff\x00\x1f\xff\x0f\xff\xc0\x00\x00\xff\xff\xfc\x00\x0f\xff\xf0\x00\x70\x00\x00\x3f\xff\xc0\x00\x00\x7c\x00\x00\x7e\x00\x0f\xfc\x00\x00\x00\xff\xff\x80\x00\x00\x0f\xff\xff\xfc\x38\x00\x00\x03\xf0\x00\x31\xf0\x1f\xff\xff\xc0\x07\xff\xff\xe0\x1f\xff\xff\xf3\xfe\x00\x00\x00\xff\xff\xc0\x00\x1f\xe7\xff\xe1\xff\xff\xdf\x00\x00\x00\x1f\xff\x00\x00\x00", | |
610 | "\x3f\xff\xff\xf8\x00\x00\x00\x60\x00\x0f\xff\xff\xe0\x07\xff\xff\xff\x00\x00\x3f\xff\xff\xf0\x1f\xff\xff\x80\x00\x70\x00\x00\x01\x00\x00\x00\x3f\xff\xfe\x00\x00\x00\x1f\xf8\xfc\xc0\x0f\xff\xf8\x00\x3f\xff\xc0\xff\xff\x80\x00\x03\xff\xff\xf8\x00\x3f\xff\xfc\x00\x00\x0f\x81\xff\xc0\x03\xff\xc0\x3f\xff\xff\x80\x03\xff\xfe\x00\xff\xff\xfe\x00\x00\x1c\x00\x00\x00\x3f\xff\xff\xf8\x00\x7f\xff\xc0\x00\x00", | |
611 | "\x00\x00\x00\x0f\xff\xfe\x0f\xff\xff\x87\xff\xff\xff\x00\x80\x00\x0f\xff\xc0\x00\x03\xf0\x1f\xf7\xe0\x00\x00\x70\x00\x01\xff\xff\xff\x80\x01\xfe\x07\xf0\x00\x01\xff\xfc\x00\x00\x04\x00\x01\xff\xfe\x07\xff\xff\xfe\x00\x07\xc0\x00\x00\xff\xff\xff\x87\xf0\x03\xff\xfc\x00\x00\x1f\xf8\x00\x01\xff\xff\xc0\x00\x00\x3f\xff\xc0\x00\x00\x7f\x8f\xff\xf8\x00\x00\x00\x7f\xff\xe0\x06\x0e\x00\x00\x0f\xff\xff\x80\x00", | |
612 | "\x03\xff\xff\xfd\xe0\x00\x00\x1f\xff\xf8\x01\xff\xff\xfb\xff\xff\xe0\x01\xf0\xf0\x00\x00\xff\xff\xff\x80\x00\x00\x7f\xff\xff\xe0\x1f\xff\xff\xf0\x01\x80\xff\xff\xff\xe0\x00\x00\x7f\xff\xf0\xff\xff\xc0\x00\x00\x07\xfe\x00\x00\x00\x1e\x00\x1f\xff\xff\xe0\x1f\xff\xe0\x01\xff\xc0\x00\x3f\xff\xe0\x00\x00\x0f\xf0\x00\xff\xff\x7f\xc0\x1f\xf8\x3f\xff\xff\xc0\x00\x00\x7f\xff\xe0\xff\xfc\x00\x00\xff\x0f\xff\xff\xff", | |
613 | "\x07\xff\xfc\x03\xff\xff\xff\xdf\xff\xff\x87\xff\x18\x00\x03\x80\x01\xff\x00\x00\x00\x1f\xff\x00\x00\x3f\xff\xff\xc0\x1f\xe0\x3f\xff\xff\xfc\x00\x00\x01\xff\xf8\x00\x00\x3f\xff\xff\xf8\x00\x00\x07\xe0\x00\x07\xff\xf9\xff\xe0\x00\x3f\xe0\x00\x7f\xef\xf0\x00\x07\x81\xff\xfc\x00\x00\x00\xff\xe0\x00\x30\x00\x00\x00\xff\xff\xf0\x00\x00\x03\xff\xfc\x7f\x07\xf8\x03\xff\xff\xff\x00\x3f\xfc\x00\x00\x01\xff\xc0\x00\x00", | |
614 | "\x00\x7f\xfc\x00\x00\x03\xff\xf8\x00\x00\x61\xfe\x7f\xff\xfe\x00\x00\x1f\xff\xfc\x3f\xff\x80\x01\xff\xff\xff\xe0\x00\xff\xff\xff\x80\x1f\xf8\x00\x7f\xff\xff\xf8\x00\x00\x07\xff\xff\xe0\x00\x00\x07\xff\xff\xff\x80\x00\xff\x80\x0f\xff\xff\xfc\x00\x00\x7f\xff\xfe\x00\x00\x00\x30\x00\x00\x7f\x80\x00\x07\xff\xff\xf0\x00\x00\x03\xff\xc0\x0f\xff\xff\x80\x3f\xff\x80\x03\xff\xff\xfe\x03\xff\xff\xff\x7f\xfc\x1f\xf0\x00\x00", | |
615 | "\x1f\xf0\x00\x00\x7f\xff\xfe\x02\x00\x00\x03\xff\xff\xff\xd8\x07\xff\xff\xe0\x01\xff\xff\x80\x00\x00\x07\xc0\x00\x0f\xff\xc0\x7f\xf0\x00\x07\xff\xff\x80\x00\x07\xf0\x00\x00\x7f\xfc\x03\xff\xff\xff\xc0\x00\x01\xff\xff\xf9\xff\xfe\x00\x00\x1f\xff\xc0\x00\x00\x03\xfe\x3f\xff\xff\x00\x07\xfe\x00\x00\x03\xc0\x00\x3f\xf8\x00\x10\x03\xfc\x00\x0f\xff\xc0\x00\x7f\xff\xe0\x00\xff\xf0\x00\x00\x7f\xff\xe0\x00\x00\x0f\xff\xff\xff", | |
616 | "\xff\xff\xff\xf8\x00\x00\x60\x00\x00\x00\xff\xff\xfc\x03\xff\xfc\x00\x00\x3c\x00\x3f\xe0\x7f\xf8\x00\x07\xff\xf8\x0f\xf8\x00\x00\x7f\xff\xff\xfc\x00\x7f\xc2\x00\x03\xff\xff\xfe\x00\x01\xff\xff\xff\xf0\x03\xff\xff\xf0\x18\x07\xc0\x00\x0f\xff\xc0\x00\x00\x7f\xff\xff\x87\xe0\x00\x00\x07\x00\x1f\x80\x04\x07\xff\xe0\x00\x00\x1f\xff\x81\xff\x80\x00\x03\xff\xfc\x00\x00\x07\xff\xff\xff\xc0\x00\x00\x1f\x80\x01\xff\xff\x00\x00\x00", | |
617 | "\x00\x0f\xfc\x1f\xf8\x00\x0f\xff\xff\xf8\x07\xff\xf1\xfc\x00\x1f\xff\xff\xf0\x00\x0f\xff\xdf\xff\xff\xff\x00\x00\x03\xff\xff\xff\x00\x01\xff\xff\xff\xc0\x10\x0f\xf0\x00\x00\x00\xfc\x00\x1f\x00\x07\x00\x01\xf0\x00\x00\x1f\xe0\x00\x00\x30\x7c\x3f\xff\xe0\x00\xff\xfc\x07\xff\xfc\x00\x3f\xff\xff\xf8\xff\xff\xc1\xfc\x1f\xff\xff\xf8\x00\x01\xff\xfc\x00\x00\x0f\xff\xff\xff\x00\x00\xff\xf8\x0c\x00\x00\x07\xff\xff\x00\x00\x00\x7f\xff", | |
618 | "\xff\xff\x80\xff\xff\x00\x00\x00\x7f\xff\xff\x00\x1f\xfc\x00\x06\x00\x0f\xf8\x00\x00\x01\x80\x00\x00\x7f\xff\xff\xe0\x3f\xff\xff\xfc\x00\x60\x00\x00\x00\xfe\x00\x00\x07\xff\xff\xf0\x7f\xff\xff\xf8\x00\x00\x80\x00\x00\x0f\xff\xff\xff\xbf\xff\xff\xc0\x07\xff\xfe\x00\x00\x1c\x00\x1f\xfc\x07\x00\x01\xff\xff\x00\x00\x00\x80\x00\x1f\xff\x03\x80\x00\x00\x3f\xff\xff\xf8\x00\x07\xff\xff\xff\x80\x00\x1f\xff\xff\xe0\x1f\xff\xff\xc0\x00\x00", | |
619 | "\xff\xff\xff\xf8\x00\x00\x00\x7e\x00\x00\x00\x1f\xff\x80\x07\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xc3\xff\xf0\x00\x00\x04\x7f\xc0\x7f\xf0\x00\x3f\xff\x80\x00\x7f\xe0\x00\x03\xff\xc0\x00\x07\xff\x00\x00\x0f\xff\x80\x00\x00\x07\x80\x00\x00\x0f\xff\xff\xff\x01\xff\xff\xff\xc0\x03\xc0\x00\x00\x03\xff\xff\xe0\x00\x0f\xff\xff\xc0\x00\x03\xff\xfe\x00\x03\xff\xf8\x00\x00\x0f\xff\xff\xc0\x01\xff\xe0\x00\x00\xff\xff\xfc\x00\x00\x1f\xff\xff\xff", | |
620 | "\xff\xf0\x00\x3f\xfc\x00\x00\xff\xff\xff\xe0\x1f\xc3\xfe\x00\x07\xff\xf8\x00\x0f\xf0\x01\xff\xff\xf0\x00\x00\xff\xc0\x0f\xff\xff\x80\x00\x00\xff\xff\xf3\xff\x80\x00\x00\x80\x08\x38\x00\x00\x0f\xff\xf0\x00\x1f\xff\xff\xfc\x00\x0f\x80\x00\x70\x00\x00\x31\xff\xff\xfe\x3f\xff\xf8\x00\x00\x00\x3c\x3f\xf0\x0f\xff\xff\x00\x03\xff\xfb\xff\xff\xff\x00\x0f\xff\xff\xfe\x00\x00\x00\xf0\x00\x00\x00\xff\xff\xfc\x00\x7f\xff\xf0\x00\x01\xff\xff\xfe\x00", | |
621 | "\xff\xff\xf0\x0f\xf8\x3f\xff\xff\xe0\x00\x03\xff\xfe\x00\x00\x3f\xff\x80\xff\xff\xff\x00\x00\x00\xff\xff\xf8\xff\xff\xf0\x00\x0f\xf1\xff\xff\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x1f\xf0\x00\x00\x1f\xf0\x03\xff\xff\xff\xe1\xff\xe0\x00\x00\x1f\xff\xc1\xfe\x00\x00\x07\xff\xfc\x00\x00\x00\x1f\xfe\x3f\xc0\x00\x00\x01\xff\xfc\x00\x00\x1f\xff\xff\x0f\xe0\x00\x01\xfc\x00\xfe\x00\x00\x00\x7f\xe0\x00\x1f\xff\xff\xe0\x7f\x00\x0f\xf0\x00\xff\xfe\x00\x00", | |
622 | "\x00\x7f\xff\xc0\x07\xff\xff\xff\x80\x07\xff\xff\xfe\x00\x00\x00\x7e\x00\x00\x00\x0f\xff\x80\x1f\xff\xfe\x07\xff\xff\xf0\x03\xc7\xff\xff\xfe\x00\x00\x00\x7f\xfe\x00\x00\x1f\xff\xfe\x00\x00\x00\xff\xfc\x00\x1f\xff\xc0\x00\x00\x3f\xff\x00\x1e\x00\x00\x03\xff\xff\xff\x80\x00\x00\x7f\xff\xf8\x03\xff\xfc\x00\x01\xff\xff\xfe\x00\x0f\xff\x02\x00\x07\xff\xff\xfe\x00\x00\x00\xfe\x01\xff\xff\xf7\xff\xff\x19\xff\xff\x00\x00\x07\xff\xc1\xff\x00\x00\x07\xff", | |
623 | "\x00\x00\x00\x40\x00\x00\x07\xff\xff\xf8\x1f\xff\xff\xc0\x00\x3e\xff\xff\xf0\x00\x00\x00\x7f\xff\xfe\x00\x00\x00\xff\x80\x00\x00\x3f\xf1\xff\xff\xff\xe0\x00\x00\x01\xff\xff\xff\x00\x00\x1f\xff\xf8\x00\x07\xff\xff\xf8\x00\x1f\xff\xc1\xff\xff\xff\xe0\x01\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xff\xcf\xff\xe0\x00\x3f\xe0\xff\xff\xc0\x00\x07\xff\xff\xe0\x01\xff\xfc\x3f\x00\x01\xff\xff\xfe\x00\x01\xff\x0f\xff\xff\xfc\x00\x00\x01\xff\xff\x80\x00\x00\x0f\xff", | |
624 | "\xff\xff\xf0\xff\xff\xff\xc0\x03\x80\x00\x01\x00\x00\x03\xff\xff\xff\xf1\xff\xff\xff\xe0\x07\xfc\x00\x00\x03\xff\xf0\x00\x00\x00\x7e\x00\x00\x00\x07\x00\x3f\xff\xfc\x00\x0f\xc7\xff\xff\x00\x00\x07\xff\xff\xc0\x00\x00\x03\xff\xfc\x00\x00\xff\xe0\x00\x00\x00\x7f\xf0\x00\x00\xff\xff\xff\xfd\xff\x00\xff\xe0\xff\xff\xe0\x07\xff\xff\xf8\x7f\xff\xfe\x18\x00\x00\x01\xf0\x00\x1f\xff\xfe\x01\xc0\x01\xff\xff\xff\xf8\x00\x01\xfe\xff\xff\xff\x80\x00\x00\x07\xff\xff", | |
625 | "\xff\xff\xf0\x00\x1f\xff\xff\x00\x00\x3f\xff\xf0\x00\xff\xff\x00\x07\xff\xff\xf8\x03\xff\xff\xe7\xff\xff\xff\x81\x00\x00\x01\xff\x00\x00\x3f\xff\xff\xf8\x00\x00\x00\xf0\x07\xff\xc0\x0f\xf0\x00\x3f\xff\xc0\x00\x7f\xf8\x00\xff\xfc\x00\x00\x1f\xff\x80\x1f\xfc\x00\x00\x01\xff\xff\x00\x00\x7f\xff\xff\xfe\x00\x00\x0f\xff\x80\x00\x00\x0f\xff\xff\xfc\x00\x00\x00\xff\xff\xfc\x00\x0f\xff\x80\x00\x3f\xff\xfe\x00\x00\x3f\xe0\x0f\xff\xff\x00\x00\x01\xff\xf0\x00\x00\x00", | |
626 | "\xff\xc0\x00\x00\x03\xff\xff\xfc\x00\xff\xff\xfc\x00\x00\x00\x7f\xff\xff\x00\x00\x00\x1f\xe0\x00\x0f\xff\xc0\xf0\x00\x00\x7f\xff\xff\xe0\x00\x20\x1f\xff\xff\xff\x00\x00\x00\x1f\x80\x00\x00\x07\xff\xf1\xff\xff\xff\xc0\x00\x00\x1f\xff\xff\xf0\x00\x3f\xff\xf8\x00\x3f\xff\xff\xfe\x01\xff\xff\xfe\x7f\x9e\x00\x1f\xff\xfc\x00\x7f\xe0\x7f\xff\xff\xe0\x00\x7f\xff\xfe\x00\x00\x01\xff\xff\xff\xf8\x01\xff\xc0\x03\x00\x0f\xff\xf8\x00\x00\x0f\xf0\x0f\xff\x00\x00\x00\x0f\xff", | |
627 | "\x00\x03\xff\xff\xff\xcf\xff\xf8\x7f\x8f\xff\xff\xfc\x01\xff\xff\xfc\x00\x00\x1f\xff\xff\xff\x80\x00\x00\x01\xff\xff\xe1\xff\xf0\x00\x00\x00\xff\xff\xff\xf8\x03\x80\x00\x3f\x80\x00\x0f\xff\xff\xff\xc0\x00\x00\x02\x7f\xff\xf8\x03\xff\xc0\x00\x00\x3f\xff\x80\x00\x00\x01\xff\xff\xe0\x00\x00\x03\x80\x00\x00\xff\xe0\x7f\xff\xff\xfc\x00\x00\x01\xff\xff\xfc\x00\x00\x00\xff\xff\x80\x00\x07\xfe\x00\x00\x07\xff\xf0\x00\x00\x1f\x80\x00\x00\x3e\x1f\xff\xff\xff\x9f\xff\xff\xff", | |
628 | "\xff\xff\xfe\x00\x03\xff\xff\xff\x80\x01\xff\xff\xff\xa0\x3f\xff\xf8\x00\x7f\x03\xff\xff\xc0\x00\x0f\xff\xc3\xff\xf8\x00\x03\xff\xff\xff\xc0\x7f\xf0\x1f\xe0\x0f\xff\xff\xc0\x00\x1f\xfe\x0f\xff\xff\xe0\x00\x07\xff\xff\xfc\x00\x00\xfc\x00\x3f\xff\xff\xf0\x00\x00\x00\x3f\xfc\x00\x00\x00\x0f\xff\xc4\x00\x00\xff\xc0\x00\x03\xff\xff\xff\x80\x00\x03\xfc\x0f\xff\xff\xf0\x00\x00\x03\xff\xff\xc0\x07\xff\xff\xf8\x0c\x3f\xff\xf0\x00\x1f\xff\x80\x00\x00\x01\xff\xfe\x00\x00\x3f\xff", | |
629 | "\x00\x00\x00\x1f\xff\xc3\xff\xff\x80\x00\x00\x3f\xff\xff\xfe\x00\x00\x00\x0f\xe0\x00\x7f\xff\xe0\x0f\xfe\x00\xff\xff\xff\xe0\x03\xff\xf8\x00\x00\x00\x3f\xe0\x00\x00\x01\xff\xff\xe7\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xc0\x00\x1f\xe0\x00\x00\x01\xff\xff\x00\x00\x03\xff\xff\xff\xe0\x00\x00\x1f\xe0\x03\xff\xff\x00\x00\x00\x07\xff\xf0\x3f\x80\x00\x00\x0f\xff\xff\xfe\x00\x00\xff\xff\xff\x00\x00\x3f\xff\xff\x80\x0f\xff\xfe\x01\xff\xff\xff\xf8\x3f\xff\xff\xc0\x00\x00\xff\xff\xff", | |
630 | "\xff\xff\xff\x80\x00\xff\xff\xff\xf0\x00\x00\x1f\x00\x3f\xff\xfe\x0f\xf0\x1c\x00\xff\xff\xe0\x00\x0f\xc0\x1f\xff\xc0\x00\x00\x01\xff\x80\xf7\xff\xf8\x00\x00\x3f\xff\xc0\x00\x00\x01\xff\xf0\x00\x03\xe3\xfc\x00\x07\xf8\x00\x00\x3f\xff\xff\xfe\x00\x00\x1f\x00\x00\x00\x18\x00\x3f\xff\xff\xf8\x0f\xe0\x00\x00\x00\x60\x00\x07\xff\xff\xfe\x00\x60\xff\xff\xff\xf8\x00\x00\x3f\xff\x80\x00\x00\x3f\xff\xff\xf0\x00\x00\x0f\xf0\x00\xff\xff\xf1\xff\x00\x3f\xff\xff\xff\x01\xff\xe0\x00\x00\x00", | |
631 | "\xff\xff\xff\xfc\x00\x00\x00\xff\xff\xf0\x01\xff\xff\xf8\x00\x00\xff\xff\xff\xe7\xff\xf8\x01\xf8\x7f\xff\xff\x80\x00\x3f\xff\xfc\x00\x00\x01\xff\xff\xe0\x00\x3f\xc0\x00\x00\x7f\xff\xff\x00\x00\x0f\xff\xff\xff\xc0\x00\x0f\xff\xf1\xff\xff\xff\xf8\x00\x0f\xff\xff\xfc\x00\x00\x07\xff\xff\xff\x80\xff\xff\xf8\x07\xf0\x00\x00\x00\x1f\xff\xff\xff\xc0\x00\xff\xff\xff\xc0\x00\x0e\xff\xff\xff\xc0\x00\x00\x03\xff\xf8\x00\x00\x03\xff\x80\x00\x00\x00\xe0\x00\x00\x0f\xf8\x00\x00\x3f\xff\xff\xff", | |
632 | "\x3f\x00\x03\xc0\x1f\x00\x00\x00\x0f\xf0\x00\x07\xff\xff\xef\x00\xfe\x00\x7f\xfe\x00\x00\x3f\xf0\x00\x3f\xc0\x00\x00\x07\xfc\x00\x00\x03\xff\xff\xff\x0f\xff\xff\xff\xc0\x07\xf8\x00\x00\xf8\x00\x00\x3f\x9f\xff\xff\xfc\x00\x00\x3f\xff\xc0\x00\x03\xff\xff\xc0\x00\x00\xff\xfc\x00\x1f\xff\xe0\x00\x00\x07\xff\xe0\x07\x00\x00\x00\x7f\xff\xfe\x00\x00\x00\xff\xff\xfe\x00\x00\x0f\xfc\x00\x07\xff\xf0\x00\x00\x00\x7f\x80\x03\xcf\xff\x80\x00\x01\xff\xff\xe0\x3c\x00\x00\x3f\xff\xff\xff\x80\x00\x00", | |
633 | "\x30\x00\x00\x00\xff\xf8\x00\x00\xff\xfc\x00\x3f\xff\xff\x80\x00\x00\x0f\xcf\xff\xcf\xff\xff\xc0\xff\xff\xff\x80\x00\x00\x01\xff\xff\xff\xf0\x00\x00\x00\x1f\xff\x00\x03\xff\xfc\x00\x00\x00\x07\xff\x80\x00\x7f\xff\xff\xfe\x0f\xff\xc0\x00\x00\x00\x7f\xf0\xbf\xff\xff\xe0\x00\x00\xff\xf8\x00\x00\x01\xff\xff\xf8\x00\x00\x3e\x00\x00\x07\xff\xe0\x00\x00\x00\x80\x00\x03\x80\x01\xff\xff\xff\xf8\x60\x00\x00\x00\xff\xf0\x00\x1f\xff\xff\xc7\xff\xf0\x40\xff\xff\xfe\x00\x00\x07\xff\xdf\xff\x80\x00\x00", | |
634 | "\xff\xff\xff\x83\xff\xf8\x1f\xff\x1f\xff\xff\x80\x0f\xff\xff\xe0\x00\x00\x00\x3f\xff\xff\xc0\xf8\x00\x00\x78\x00\x1c\x00\x00\x00\x1f\xe0\x00\x00\x00\xff\xff\xe0\x3f\xff\xff\xfe\x00\x00\x03\xff\xff\xfe\x00\x00\x00\x1f\xff\xfc\x00\x7f\xff\x00\x00\x00\x1f\xff\xff\x00\x02\x00\x00\x3f\xff\xfc\x00\x00\x00\xff\xf0\x1f\xfe\xff\xff\xc0\x01\xff\xff\xff\xf0\x00\x00\x00\xff\xff\xfe\x00\x00\x00\x0f\xff\xc0\x00\x00\x7f\x7f\xc0\x00\x00\x01\xff\xff\xfe\x0f\xff\xff\xff\xc0\x00\x0f\x80\x00\x00\x3f\xff\xff\xff", | |
635 | "\xff\xff\xff\xfe\x00\x00\x00\xff\xf8\x0f\xff\xff\xf0\x00\x00\x07\xff\xff\xfb\xff\xc0\x00\x07\xfc\x07\xe0\x00\x00\x01\xff\xff\xe0\x00\x7f\xff\xff\xf8\x00\x00\x3f\xff\xf8\x00\x00\x00\x0f\xff\xff\x00\x00\x0f\xc0\x00\x00\x3f\xff\xf0\x00\x00\x01\xff\xff\xfe\x1f\xff\xf8\x00\x00\x20\x00\x00\x00\x3f\xff\xbf\xff\x9f\xff\xff\xfc\x3f\xff\xff\xf0\x00\x00\x07\x80\x00\x00\xff\xff\xe7\xff\xff\xff\xf0\x00\x00\x3f\xff\xff\xff\x00\x00\x07\xff\xff\xe0\xff\xff\xff\xe0\x01\xff\xff\xff\xf8\x00\x00\x00\x7f\xff\xff\xff", | |
636 | "\x00\x00\x00\x1f\xff\xc0\x00\x0f\xff\xc0\x00\x00\x1f\xff\xc0\x00\x1f\xc0\x00\x00\x03\xff\x80\x00\x00\x07\xff\xff\xff\xc0\x00\x00\x00\x80\x00\x3f\xfc\x00\xc0\x00\x0f\xff\xff\x00\x00\x06\x00\x3f\xfc\x1e\x00\x1f\xff\xff\xf0\x00\x3e\x0f\xff\xff\xf0\x00\x00\x3f\xff\xf0\x00\x00\x00\x1f\xff\xc0\x00\x00\xff\xff\xff\xf8\x00\xe0\x00\x00\xff\xff\xff\xfe\x00\x00\x0f\xff\xff\xfe\x3f\xff\xff\xfc\x07\xfe\x00\x00\x00\xc0\x00\x7f\xff\xff\xfe\x00\xff\xff\xff\xfc\x07\xff\xff\xe0\x00\x3f\xe3\xff\xff\xc0\x00\x00\x3f\xff", | |
637 | "\x00\x00\x00\x0f\xff\xc0\x00\x0f\xf8\x00\x00\x00\xff\xfc\x00\x00\x0f\xff\xff\xfe\x00\x00\x00\x03\xff\x00\xff\xfc\x07\xff\xf0\x1f\xff\xfe\x0f\xff\xff\xfd\xff\xff\xff\xf0\x1f\xff\xf0\x00\x07\xf8\xff\xf8\x00\x00\x00\xff\xff\xc0\x3f\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xff\x00\x00\x03\xff\xff\xf0\x00\x07\xff\xff\x00\x00\x3f\xff\xf0\x01\xff\xff\xc0\x01\xff\xff\xff\x00\x3f\xff\xf8\x1f\xff\xff\xfe\x1f\xff\xff\xff\xc0\x00\x00\x7f\xe0\x00\x07\xff\xff\xfe\x00\x00\x00\x03\xe0\x07\xff\xc0\x03\xfc\x00\x07\xff\xff\xff", | |
638 | "\xff\xff\xff\x00\x00\x03\xc0\x00\x00\x01\xff\xff\xf8\x00\x00\x00\x0f\xff\xff\xff\x00\x00\x0f\x00\x00\xff\xff\xf8\x80\x00\xf8\x00\x0f\xc0\x00\x00\x00\xe0\x00\x00\x00\xff\xff\xff\xf8\x0f\xff\xff\xfe\x00\x00\x18\x00\x00\x7f\xff\xff\xff\x00\x00\x03\xff\xff\xff\x00\x7f\xff\xff\xfc\x00\x03\xc0\x00\x00\x0f\xff\xff\xff\xf0\x00\x07\xff\xff\x80\x01\xff\xff\xff\xe0\x00\x0f\xff\xfe\x07\xff\xff\xf8\x00\xff\xff\xff\xc0\x00\x00\x03\xe0\x00\x07\xff\xf0\x0f\xff\xf0\x00\x00\xff\xff\xf8\x7f\xc0\x03\xc0\x3f\xff\xe0\x00\x00\x00", | |
639 | ||
640 | /* These are zero-terminated strings */ | |
641 | ||
642 | "abc", | |
643 | "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" | |
644 | }; | |
645 | ||
646 | static uschar *hashes[] = { | |
647 | "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", | |
648 | "3CDF2936DA2FC556BFA533AB1EB59CE710AC80E5", | |
649 | "19C1E2048FA7393CFBF2D310AD8209EC11D996E5", | |
650 | "CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5", | |
651 | "71AC973D0E4B50AE9E5043FF4D615381120A25A0", | |
652 | "A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA", | |
653 | "D87A0EE74E4B9AD72E6847C87BDEEB3D07844380", | |
654 | "1976B8DD509FE66BF09C9A8D33534D4EF4F63BFD", | |
655 | "5A78F439B6DB845BB8A558E4CEB106CD7B7FF783", | |
656 | "F871BCE62436C1E280357416695EE2EF9B83695C", | |
657 | "62B243D1B780E1D31CF1BA2DE3F01C72AEEA0E47", | |
658 | "1698994A273404848E56E7FDA4457B5900DE1342", | |
659 | "056F4CDC02791DA7ED1EB2303314F7667518DEEF", | |
660 | "9FE2DA967BD8441EEA1C32DF68DDAA9DC1FC8E4B", | |
661 | "73A31777B4ACE9384EFA8BBEAD45C51A71ABA6DD", | |
662 | "3F9D7C4E2384EDDABFF5DD8A31E23DE3D03F42AC", | |
663 | "4814908F72B93FFD011135BEE347DE9A08DA838F", | |
664 | "0978374B67A412A3102C5AA0B10E1A6596FC68EB", | |
665 | "44AD6CB618BD935460D46D3F921D87B99AB91C1E", | |
666 | "02DC989AF265B09CF8485640842128DCF95E9F39", | |
667 | "67507B8D497B35D6E99FC01976D73F54AECA75CF", | |
668 | "1EAE0373C1317CB60C36A42A867B716039D441F5", | |
669 | "9C3834589E5BFFAC9F50950E0199B3EC2620BEC8", | |
670 | "209F7ABC7F3B878EE46CDF3A1FBB9C21C3474F32", | |
671 | "05FC054B00D97753A9B3E2DA8FBBA3EE808CEF22", | |
672 | "0C4980EA3A46C757DFBFC5BAA38AC6C8E72DDCE7", | |
673 | "96A460D2972D276928B69864445BEA353BDCFFD2", | |
674 | "F3EF04D8FA8C6FA9850F394A4554C080956FA64B", | |
675 | "F2A31D875D1D7B30874D416C4D2EA6BAF0FFBAFE", | |
676 | "F4942D3B9E9588DCFDC6312A84DF75D05F111C20", | |
677 | "310207DF35B014E4676D30806FA34424813734DD", | |
678 | "4DA1955B2FA7C7E74E3F47D7360CE530BBF57CA3", | |
679 | "74C4BC5B26FB4A08602D40CCEC6C6161B6C11478", | |
680 | "0B103CE297338DFC7395F7715EE47539B556DDB6", | |
681 | "EFC72D99E3D2311CE14190C0B726BDC68F4B0821", | |
682 | "660EDAC0A8F4CE33DA0D8DBAE597650E97687250", | |
683 | "FE0A55A988B3B93946A63EB36B23785A5E6EFC3E", | |
684 | "0CBDF2A5781C59F907513147A0DE3CC774B54BF3", | |
685 | "663E40FEE5A44BFCB1C99EA5935A6B5BC9F583B0", | |
686 | "00162134256952DD9AE6B51EFB159B35C3C138C7", | |
687 | "CEB88E4736E354416E2010FC1061B3B53B81664B", | |
688 | "A6A2C4B6BCC41DDC67278F3DF4D8D0B9DD7784EF", | |
689 | "C23D083CD8820B57800A869F5F261D45E02DC55D", | |
690 | "E8AC31927B78DDEC41A31CA7A44EB7177165E7AB", | |
691 | "E864EC5DBAB0F9FF6984AB6AD43A8C9B81CC9F9C", | |
692 | "CFED6269069417A84D6DE2347220F4B858BCD530", | |
693 | "D9217BFB46C96348722C3783D29D4B1A3FEDA38C", | |
694 | "DEC24E5554F79697218D317315FA986229CE3350", | |
695 | "83A099DF7071437BA5495A5B0BFBFEFE1C0EF7F3", | |
696 | "AA3198E30891A83E33CE3BFA0587D86A197D4F80", | |
697 | "9B6ACBEB4989CBEE7015C7D515A75672FFDE3442", | |
698 | "B021EB08A436B02658EAA7BA3C88D49F1219C035", | |
699 | "CAE36DAB8AEA29F62E0855D9CB3CD8E7D39094B1", | |
700 | "02DE8BA699F3C1B0CB5AD89A01F2346E630459D7", | |
701 | "88021458847DD39B4495368F7254941859FAD44B", | |
702 | "91A165295C666FE85C2ADBC5A10329DAF0CB81A0", | |
703 | "4B31312EAF8B506811151A9DBD162961F7548C4B", | |
704 | "3FE70971B20558F7E9BAC303ED2BC14BDE659A62", | |
705 | "93FB769D5BF49D6C563685954E2AECC024DC02D6", | |
706 | "BC8827C3E614D515E83DEA503989DEA4FDA6EA13", | |
707 | "E83868DBE4A389AB48E61CFC4ED894F32AE112AC", | |
708 | "55C95459CDE4B33791B4B2BCAAF840930AF3F3BD", | |
709 | "36BB0E2BA438A3E03214D9ED2B28A4D5C578FCAA", | |
710 | "3ACBF874199763EBA20F3789DFC59572ACA4CF33", | |
711 | "86BE037C4D509C9202020767D860DAB039CADACE", | |
712 | "51B57D7080A87394EEC3EB2E0B242E553F2827C9", | |
713 | "1EFBFA78866315CE6A71E457F3A750A38FACAB41", | |
714 | "57D6CB41AEEC20236F365B3A490C61D0CFA39611", | |
715 | "C532CB64B4BA826372BCCF2B4B5793D5B88BB715", | |
716 | "15833B5631032663E783686A209C6A2B47A1080E", | |
717 | "D04F2043C96E10CD83B574B1E1C217052CD4A6B2", | |
718 | "E8882627C64DB743F7DB8B4413DD033FC63BEB20", | |
719 | "CD2D32286B8867BC124A0AF2236FC74BE3622199", | |
720 | "019B70D745375091ED5C7B218445EC986D0F5A82", | |
721 | "E5FF5FEC1DADBAED02BF2DAD4026BE6A96B3F2AF", | |
722 | "6F4E23B3F2E2C068D13921FE4E5E053FFED4E146", | |
723 | "25E179602A575C915067566FBA6DA930E97F8678", | |
724 | "67DED0E68E235C8A523E051E86108EEB757EFBFD", | |
725 | "AF78536EA83C822796745556D62A3EE82C7BE098", | |
726 | "64D7AC52E47834BE72455F6C64325F9C358B610D", | |
727 | "9D4866BAA3639C13E541F250FFA3D8BC157A491F", | |
728 | "2E258811961D3EB876F30E7019241A01F9517BEC", | |
729 | "8E0EBC487146F83BC9077A1630E0FB3AB3C89E63", | |
730 | "CE8953741FFF3425D2311FBBF4AB481B669DEF70", | |
731 | "789D1D2DAB52086BD90C0E137E2515ED9C6B59B5", | |
732 | "B76CE7472700DD68D6328B7AA8437FB051D15745", | |
733 | "F218669B596C5FFB0B1C14BD03C467FC873230A0", | |
734 | "1FF3BDBE0D504CB0CDFAB17E6C37ABA6B3CFFDED", | |
735 | "2F3CBACBB14405A4652ED52793C1814FD8C4FCE0", | |
736 | "982C8AB6CE164F481915AF59AAED9FFF2A391752", | |
737 | "5CD92012D488A07ECE0E47901D0E083B6BD93E3F", | |
738 | "69603FEC02920851D4B3B8782E07B92BB2963009", | |
739 | "3E90F76437B1EA44CF98A08D83EA24CECF6E6191", | |
740 | "34C09F107C42D990EB4881D4BF2DDDCAB01563AE", | |
741 | "474BE0E5892EB2382109BFC5E3C8249A9283B03D", | |
742 | "A04B4F75051786682483252438F6A75BF4705EC6", | |
743 | "BE88A6716083EB50ED9416719D6A247661299383", | |
744 | "C67E38717FEE1A5F65EC6C7C7C42AFC00CD37F04", | |
745 | "959AC4082388E19E9BE5DE571C047EF10C174A8D", | |
746 | "BAA7AA7B7753FA0ABDC4A541842B5D238D949F0A", | |
747 | "351394DCEBC08155D100FCD488578E6AE71D0E9C", | |
748 | "AB8BE94C5AF60D9477EF1252D604E58E27B2A9EE", | |
749 | "3429EC74A695FDD3228F152564952308AFE0680A", | |
750 | "907FA46C029BC67EAA8E4F46E3C2A232F85BD122", | |
751 | "2644C87D1FBBBC0FC8D65F64BCA2492DA15BAAE4", | |
752 | "110A3EEB408756E2E81ABAF4C5DCD4D4C6AFCF6D", | |
753 | "CD4FDC35FAC7E1ADB5DE40F47F256EF74D584959", | |
754 | "8E6E273208AC256F9ECCF296F3F5A37BC8A0F9F7", | |
755 | "FE0606100BDBC268DB39B503E0FDFE3766185828", | |
756 | "6C63C3E58047BCDB35A17F74EEBA4E9B14420809", | |
757 | "BCC2BD305F0BCDA8CF2D478EF9FE080486CB265F", | |
758 | "CE5223FD3DD920A3B666481D5625B16457DCB5E8", | |
759 | "948886776E42E4F5FAE1B2D0C906AC3759E3F8B0", | |
760 | "4C12A51FCFE242F832E3D7329304B11B75161EFB", | |
761 | "C54BDD2050504D92F551D378AD5FC72C9ED03932", | |
762 | "8F53E8FA79EA09FD1B682AF5ED1515ECA965604C", | |
763 | "2D7E17F6294524CE78B33EAB72CDD08E5FF6E313", | |
764 | "64582B4B57F782C9302BFE7D07F74AA176627A3A", | |
765 | "6D88795B71D3E386BBD1EB830FB9F161BA98869F", | |
766 | "86AD34A6463F12CEE6DE9596ABA72F0DF1397FD1", | |
767 | "7EB46685A57C0D466152DC339C8122548C757ED1", | |
768 | "E7A98FB0692684054407CC221ABC60C199D6F52A", | |
769 | "34DF1306662206FD0A5FC2969A4BEEC4EB0197F7", | |
770 | "56CF7EBF08D10F0CB9FE7EE3B63A5C3A02BCB450", | |
771 | "3BAE5CB8226642088DA760A6F78B0CF8EDDEA9F1", | |
772 | "6475DF681E061FA506672C27CBABFA9AA6DDFF62", | |
773 | "79D81991FA4E4957C8062753439DBFD47BBB277D", | |
774 | "BAE224477B20302E881F5249F52EC6C34DA8ECEF", | |
775 | "EDE4DEB4293CFE4138C2C056B7C46FF821CC0ACC", | |
776 | ||
777 | "A9993E364706816ABA3E25717850C26C9CD0D89D", | |
778 | "84983E441C3BD26EBAAE4AA1F95129E5E54670F1" | |
779 | }; | |
780 | ||
781 | static uschar *atest = "34AA973CD4C4DAA4F61EEB2BDBAD27316534016F"; | |
782 | ||
783 | int main(void) | |
784 | { | |
785 | sha1 base; | |
786 | int j; | |
787 | int i = 0x01020304; | |
788 | uschar *ctest = (uschar *)(&i); | |
789 | uschar buffer[256]; | |
790 | uschar digest[20]; | |
791 | uschar s[41]; | |
792 | printf("Checking sha1: %s-endian\n\n", (ctest[0] == 0x04)? "little" : "big"); | |
793 | ||
794 | for (i = 0; i < sizeof(tests)/sizeof(uschar *); i ++) | |
795 | { | |
796 | printf("%d.\nShould be: %s\n", i, hashes[i]); | |
797 | native_sha1_start(&base); | |
798 | native_sha1_end(&base, tests[i], (i <= 128)? i : strlen(tests[i]), digest); | |
799 | for (j = 0; j < 20; j++) sprintf(s+2*j, "%02X", digest[j]); | |
800 | printf("Computed: %s\n", s); | |
801 | if (strcmp(s, hashes[i]) != 0) printf("*** No match ***\n"); | |
802 | printf("\n"); | |
803 | } | |
804 | ||
805 | /* 1 000 000 repetitions of "a" */ | |
806 | ||
807 | ctest = malloc(1000000); | |
808 | memset(ctest, 'a', 1000000); | |
809 | ||
810 | printf("1 000 000 repetitions of 'a'\n"); | |
811 | printf("Should be: %s\n", atest); | |
812 | native_sha1_start(&base); | |
813 | native_sha1_end(&base, ctest, 1000000, digest); | |
814 | for (j = 0; j < 20; j++) sprintf(s+2*j, "%02X", digest[j]); | |
815 | printf("Computed: %s\n", s); | |
816 | if (strcmp(s, atest) != 0) printf("*** No match ***\n"); | |
817 | ||
818 | } | |
819 | # endif /*STAND_ALONE*/ | |
2592e6c0 | 820 | |
2592e6c0 | 821 | /* End of File */ |