~ubuntu-branches/ubuntu/gutsy/virtualbox-ose/gutsy

« back to all changes in this revision

Viewing changes to src/libs/xpcom18a4/nsprpub/lib/tests/base64t.c

  • Committer: Bazaar Package Importer
  • Author(s): Steve Kowalik
  • Date: 2007-09-08 16:44:58 UTC
  • Revision ID: james.westby@ubuntu.com-20070908164458-wao29470vqtr8ksy
Tags: upstream-1.5.0-dfsg2
ImportĀ upstreamĀ versionĀ 1.5.0-dfsg2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 
2
/* ***** BEGIN LICENSE BLOCK *****
 
3
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 
4
 *
 
5
 * The contents of this file are subject to the Mozilla Public License Version
 
6
 * 1.1 (the "License"); you may not use this file except in compliance with
 
7
 * the License. You may obtain a copy of the License at
 
8
 * http://www.mozilla.org/MPL/
 
9
 *
 
10
 * Software distributed under the License is distributed on an "AS IS" basis,
 
11
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 
12
 * for the specific language governing rights and limitations under the
 
13
 * License.
 
14
 *
 
15
 * The Original Code is the Netscape Portable Runtime (NSPR).
 
16
 *
 
17
 * The Initial Developer of the Original Code is
 
18
 * Netscape Communications Corporation.
 
19
 * Portions created by the Initial Developer are Copyright (C) 1998-2000
 
20
 * the Initial Developer. All Rights Reserved.
 
21
 *
 
22
 * Contributor(s):
 
23
 *
 
24
 * Alternatively, the contents of this file may be used under the terms of
 
25
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 
26
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 
27
 * in which case the provisions of the GPL or the LGPL are applicable instead
 
28
 * of those above. If you wish to allow use of your version of this file only
 
29
 * under the terms of either the GPL or the LGPL, and not to allow others to
 
30
 * use your version of this file under the terms of the MPL, indicate your
 
31
 * decision by deleting the provisions above and replace them with the notice
 
32
 * and other provisions required by the GPL or the LGPL. If you do not delete
 
33
 * the provisions above, a recipient may use your version of this file under
 
34
 * the terms of any one of the MPL, the GPL or the LGPL.
 
35
 *
 
36
 * ***** END LICENSE BLOCK ***** */
 
37
 
 
38
#include "plbase64.h"
 
39
#include "plstr.h"
 
40
#include "nspr.h"
 
41
 
 
42
#include <stdio.h>
 
43
 
 
44
static unsigned char *base = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
45
 
 
46
/* PL_Base64Encode, single characters */
 
47
PRBool test_001(void)
 
48
{
 
49
    PRUint32 a, b;
 
50
    unsigned char plain[ 4 ];
 
51
    unsigned char cypher[ 5 ];
 
52
    char result[ 8 ];
 
53
    char *rv;
 
54
 
 
55
    printf("Test 001 (PL_Base64Encode, single characters)                         ..."); fflush(stdout);
 
56
 
 
57
    plain[1] = plain[2] = plain[3] = (unsigned char)0;
 
58
    cypher[2] = cypher[3] = (unsigned char)'=';
 
59
    cypher[4] = (unsigned char)0;
 
60
 
 
61
    for( a = 0; a < 64; a++ )
 
62
    {
 
63
        cypher[0] = base[a];
 
64
 
 
65
        for( b = 0; b < 4; b++ )
 
66
        {
 
67
            plain[0] = (unsigned char)(a * 4 + b);
 
68
            cypher[1] = base[(b * 16)];
 
69
 
 
70
            rv = PL_Base64Encode((char *)plain, 1, result);
 
71
            if( rv != result )
 
72
            {
 
73
                printf("FAIL\n\t(%d, %d): return value\n", a, b);
 
74
                return PR_FALSE;
 
75
            }
 
76
 
 
77
            if( 0 != PL_strncmp((char *)cypher, result, 4) )
 
78
            {
 
79
                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.4s.\"\n",
 
80
                       a, b, cypher, result);
 
81
                return PR_FALSE;
 
82
            }
 
83
        }
 
84
    }
 
85
 
 
86
    printf("PASS\n");
 
87
    return PR_TRUE;
 
88
}
 
89
 
 
90
/* PL_Base64Encode, double characters */
 
91
PRBool test_002(void)
 
92
{
 
93
    PRUint32 a, b, c, d;
 
94
    unsigned char plain[ 4 ];
 
95
    unsigned char cypher[ 5 ];
 
96
    char result[ 8 ];
 
97
    char *rv;
 
98
 
 
99
    printf("Test 002 (PL_Base64Encode, double characters)                         ..."); fflush(stdout);
 
100
 
 
101
    plain[2] = plain[3] = (unsigned char)0;
 
102
    cypher[3] = (unsigned char)'=';
 
103
    cypher[4] = (unsigned char)0;
 
104
 
 
105
    for( a = 0; a < 64; a++ )
 
106
    {
 
107
        cypher[0] = base[a];
 
108
        for( b = 0; b < 4; b++ )
 
109
        {
 
110
            plain[0] = (a*4) + b;
 
111
            for( c = 0; c < 16; c++ )
 
112
            {
 
113
                cypher[1] = base[b*16 + c];
 
114
                for( d = 0; d < 16; d++ )
 
115
                {
 
116
                    plain[1] = c*16 + d;
 
117
                    cypher[2] = base[d*4];
 
118
 
 
119
                    rv = PL_Base64Encode((char *)plain, 2, result);
 
120
                    if( rv != result )
 
121
                    {
 
122
                        printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
 
123
                        return PR_FALSE;
 
124
                    }
 
125
 
 
126
                    if( 0 != PL_strncmp((char *)cypher, result, 4) )
 
127
                    {
 
128
                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
 
129
                               a, b, c, d, cypher, result);
 
130
                        return PR_FALSE;
 
131
                    }
 
132
                }
 
133
            }
 
134
        }
 
135
    }
 
136
 
 
137
    printf("PASS\n");
 
138
    return PR_TRUE;
 
139
}
 
140
 
 
141
/* PL_Base64Encode, triple characters */
 
142
PRBool test_003(void)
 
143
{
 
144
    PRUint32 a, b, c, d, e, f;
 
145
    unsigned char plain[ 4 ];
 
146
    unsigned char cypher[ 5 ];
 
147
    char result[ 8 ];
 
148
    char *rv;
 
149
 
 
150
    printf("Test 003 (PL_Base64Encode, triple characters)                         ..."); fflush(stdout);
 
151
 
 
152
    cypher[4] = (unsigned char)0;
 
153
 
 
154
    for( a = 0; a < 64; a++ )
 
155
    {
 
156
        cypher[0] = base[a];
 
157
        for( b = 0; b < 4; b++ )
 
158
        {
 
159
            plain[0] = (a*4) + b;
 
160
            for( c = 0; c < 16; c++ )
 
161
            {
 
162
                cypher[1] = base[b*16 + c];
 
163
                for( d = 0; d < 16; d++ )
 
164
                {
 
165
                    plain[1] = c*16 + d;
 
166
                    for( e = 0; e < 4; e++ )
 
167
                    {
 
168
                        cypher[2] = base[d*4 + e];
 
169
                        for( f = 0; f < 64; f++ )
 
170
                        {
 
171
                            plain[2] = e * 64 + f;
 
172
                            cypher[3] = base[f];
 
173
 
 
174
                            rv = PL_Base64Encode((char *)plain, 3, result);
 
175
                            if( rv != result )
 
176
                            {
 
177
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b, c, d, e, f);
 
178
                                return PR_FALSE;
 
179
                            }
 
180
 
 
181
                            if( 0 != PL_strncmp((char *)cypher, result, 4) )
 
182
                            {
 
183
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
 
184
                                       a, b, c, d, e, f, cypher, result);
 
185
                                return PR_FALSE;
 
186
                            }
 
187
                        }
 
188
                    }
 
189
                }
 
190
            }
 
191
        }
 
192
    }
 
193
 
 
194
    printf("PASS\n");
 
195
    return PR_TRUE;
 
196
}
 
197
 
 
198
    static struct
 
199
    {
 
200
        const char *plaintext;
 
201
        const char *cyphertext;
 
202
    } array[] =
 
203
      {
 
204
          /* Cyphertexts generated with uuenview 0.5.13 */
 
205
          { " ", "IA==" },
 
206
          { ".", "Lg==" },
 
207
          { "/", "Lw==" },
 
208
          { "C", "Qw==" },
 
209
          { "H", "SA==" },
 
210
          { "S", "Uw==" },
 
211
          { "^", "Xg==" },
 
212
          { "a", "YQ==" },
 
213
          { "o", "bw==" },
 
214
          { "t", "dA==" },
 
215
 
 
216
          { "AB", "QUI=" },
 
217
          { "AH", "QUg=" },
 
218
          { "AQ", "QVE=" },
 
219
          { "BD", "QkQ=" },
 
220
          { "CR", "Q1I=" },
 
221
          { "CS", "Q1M=" },
 
222
          { "DB", "REI=" },
 
223
          { "DC", "REM=" },
 
224
          { "EK", "RUs=" },
 
225
          { "ET", "RVQ=" },
 
226
          { "IM", "SU0=" },
 
227
          { "JR", "SlI=" },
 
228
          { "LO", "TE8=" },
 
229
          { "LW", "TFc=" },
 
230
          { "ML", "TUw=" },
 
231
          { "SB", "U0I=" },
 
232
          { "TO", "VE8=" },
 
233
          { "VS", "VlM=" },
 
234
          { "WP", "V1A=" },
 
235
          /* legitimate two-letter words */
 
236
          { "ad", "YWQ=" },
 
237
          { "ah", "YWg=" },
 
238
          { "am", "YW0=" },
 
239
          { "an", "YW4=" },
 
240
          { "as", "YXM=" },
 
241
          { "at", "YXQ=" },
 
242
          { "ax", "YXg=" },
 
243
          { "be", "YmU=" },
 
244
          { "by", "Ynk=" },
 
245
          { "do", "ZG8=" },
 
246
          { "go", "Z28=" },
 
247
          { "he", "aGU=" },
 
248
          { "hi", "aGk=" },
 
249
          { "if", "aWY=" },
 
250
          { "in", "aW4=" },
 
251
          { "is", "aXM=" },
 
252
          { "it", "aXQ=" },
 
253
          { "me", "bWU=" },
 
254
          { "my", "bXk=" },
 
255
          { "no", "bm8=" },
 
256
          { "of", "b2Y=" },
 
257
          { "on", "b24=" },
 
258
          { "or", "b3I=" },
 
259
          { "ox", "b3g=" },
 
260
          { "so", "c28=" },
 
261
          { "to", "dG8=" },
 
262
          { "up", "dXA=" },
 
263
          { "us", "dXM=" },
 
264
          { "we", "d2U=" },
 
265
          /* all three-letter entries in /usr/dict/words */
 
266
          { "1st", "MXN0" },
 
267
          { "2nd", "Mm5k" },
 
268
          { "3rd", "M3Jk" },
 
269
          { "4th", "NHRo" },
 
270
          { "5th", "NXRo" },
 
271
          { "6th", "NnRo" },
 
272
          { "7th", "N3Ro" },
 
273
          { "8th", "OHRo" },
 
274
          { "9th", "OXRo" },
 
275
          { "AAA", "QUFB" },
 
276
          { "AAU", "QUFV" },
 
277
          { "ABA", "QUJB" },
 
278
          { "abc", "YWJj" },
 
279
          { "Abe", "QWJl" },
 
280
          { "Abo", "QWJv" },
 
281
          { "ace", "YWNl" },
 
282
          { "ACM", "QUNN" },
 
283
          { "ACS", "QUNT" },
 
284
          { "act", "YWN0" },
 
285
          { "Ada", "QWRh" },
 
286
          { "add", "YWRk" },
 
287
          { "ado", "YWRv" },
 
288
          { "aft", "YWZ0" },
 
289
          { "age", "YWdl" },
 
290
          { "ago", "YWdv" },
 
291
          { "aid", "YWlk" },
 
292
          { "ail", "YWls" },
 
293
          { "aim", "YWlt" },
 
294
          { "air", "YWly" },
 
295
          { "ala", "YWxh" },
 
296
          { "alb", "YWxi" },
 
297
          { "ale", "YWxl" },
 
298
          { "Ali", "QWxp" },
 
299
          { "all", "YWxs" },
 
300
          { "alp", "YWxw" },
 
301
          { "A&M", "QSZN" },
 
302
          { "AMA", "QU1B" },
 
303
          { "ami", "YW1p" },
 
304
          { "amp", "YW1w" },
 
305
          { "Amy", "QW15" },
 
306
          { "amy", "YW15" },
 
307
          { "ana", "YW5h" },
 
308
          { "and", "YW5k" },
 
309
          { "ani", "YW5p" },
 
310
          { "Ann", "QW5u" },
 
311
          { "ant", "YW50" },
 
312
          { "any", "YW55" },
 
313
          { "A&P", "QSZQ" },
 
314
          { "ape", "YXBl" },
 
315
          { "Apr", "QXBy" },
 
316
          { "APS", "QVBT" },
 
317
          { "apt", "YXB0" },
 
318
          { "arc", "YXJj" },
 
319
          { "are", "YXJl" },
 
320
          { "ark", "YXJr" },
 
321
          { "arm", "YXJt" },
 
322
          { "art", "YXJ0" },
 
323
          { "a's", "YSdz" },
 
324
          { "ash", "YXNo" },
 
325
          { "ask", "YXNr" },
 
326
          { "ass", "YXNz" },
 
327
          { "ate", "YXRl" },
 
328
          { "Aug", "QXVn" },
 
329
          { "auk", "YXVr" },
 
330
          { "Ave", "QXZl" },
 
331
          { "awe", "YXdl" },
 
332
          { "awl", "YXds" },
 
333
          { "awn", "YXdu" },
 
334
          { "axe", "YXhl" },
 
335
          { "aye", "YXll" },
 
336
          { "bad", "YmFk" },
 
337
          { "bag", "YmFn" },
 
338
          { "bah", "YmFo" },
 
339
          { "bam", "YmFt" },
 
340
          { "ban", "YmFu" },
 
341
          { "bar", "YmFy" },
 
342
          { "bat", "YmF0" },
 
343
          { "bay", "YmF5" },
 
344
          { "bed", "YmVk" },
 
345
          { "bee", "YmVl" },
 
346
          { "beg", "YmVn" },
 
347
          { "bel", "YmVs" },
 
348
          { "Ben", "QmVu" },
 
349
          { "bet", "YmV0" },
 
350
          { "bey", "YmV5" },
 
351
          { "bib", "Ymli" },
 
352
          { "bid", "Ymlk" },
 
353
          { "big", "Ymln" },
 
354
          { "bin", "Ymlu" },
 
355
          { "bit", "Yml0" },
 
356
          { "biz", "Yml6" },
 
357
          { "BMW", "Qk1X" },
 
358
          { "boa", "Ym9h" },
 
359
          { "bob", "Ym9i" },
 
360
          { "bog", "Ym9n" },
 
361
          { "bon", "Ym9u" },
 
362
          { "boo", "Ym9v" },
 
363
          { "bop", "Ym9w" },
 
364
          { "bow", "Ym93" },
 
365
          { "box", "Ym94" },
 
366
          { "boy", "Ym95" },
 
367
          { "b's", "Yidz" },
 
368
          { "BTL", "QlRM" },
 
369
          { "BTU", "QlRV" },
 
370
          { "bub", "YnVi" },
 
371
          { "bud", "YnVk" },
 
372
          { "bug", "YnVn" },
 
373
          { "bum", "YnVt" },
 
374
          { "bun", "YnVu" },
 
375
          { "bus", "YnVz" },
 
376
          { "but", "YnV0" },
 
377
          { "buy", "YnV5" },
 
378
          { "bye", "Ynll" },
 
379
          { "cab", "Y2Fi" },
 
380
          { "Cal", "Q2Fs" },
 
381
          { "cam", "Y2Ft" },
 
382
          { "can", "Y2Fu" },
 
383
          { "cap", "Y2Fw" },
 
384
          { "car", "Y2Fy" },
 
385
          { "cat", "Y2F0" },
 
386
          { "caw", "Y2F3" },
 
387
          { "CBS", "Q0JT" },
 
388
          { "CDC", "Q0RD" },
 
389
          { "CEQ", "Q0VR" },
 
390
          { "chi", "Y2hp" },
 
391
          { "CIA", "Q0lB" },
 
392
          { "cit", "Y2l0" },
 
393
          { "cod", "Y29k" },
 
394
          { "cog", "Y29n" },
 
395
          { "col", "Y29s" },
 
396
          { "con", "Y29u" },
 
397
          { "coo", "Y29v" },
 
398
          { "cop", "Y29w" },
 
399
          { "cos", "Y29z" },
 
400
          { "cot", "Y290" },
 
401
          { "cow", "Y293" },
 
402
          { "cox", "Y294" },
 
403
          { "coy", "Y295" },
 
404
          { "CPA", "Q1BB" },
 
405
          { "cpu", "Y3B1" },
 
406
          { "CRT", "Q1JU" },
 
407
          { "cry", "Y3J5" },
 
408
          { "c's", "Yydz" },
 
409
          { "cub", "Y3Vi" },
 
410
          { "cud", "Y3Vk" },
 
411
          { "cue", "Y3Vl" },
 
412
          { "cup", "Y3Vw" },
 
413
          { "cur", "Y3Vy" },
 
414
          { "cut", "Y3V0" },
 
415
          { "dab", "ZGFi" },
 
416
          { "dad", "ZGFk" },
 
417
          { "dam", "ZGFt" },
 
418
          { "Dan", "RGFu" },
 
419
          { "Dar", "RGFy" },
 
420
          { "day", "ZGF5" },
 
421
          { "Dec", "RGVj" },
 
422
          { "Dee", "RGVl" },
 
423
          { "Del", "RGVs" },
 
424
          { "den", "ZGVu" },
 
425
          { "Des", "RGVz" },
 
426
          { "dew", "ZGV3" },
 
427
          { "dey", "ZGV5" },
 
428
          { "did", "ZGlk" },
 
429
          { "die", "ZGll" },
 
430
          { "dig", "ZGln" },
 
431
          { "dim", "ZGlt" },
 
432
          { "din", "ZGlu" },
 
433
          { "dip", "ZGlw" },
 
434
          { "Dis", "RGlz" },
 
435
          { "DNA", "RE5B" },
 
436
          { "DOD", "RE9E" },
 
437
          { "doe", "ZG9l" },
 
438
          { "dog", "ZG9n" },
 
439
          { "don", "ZG9u" },
 
440
          { "dot", "ZG90" },
 
441
          { "Dow", "RG93" },
 
442
          { "dry", "ZHJ5" },
 
443
          { "d's", "ZCdz" },
 
444
          { "dub", "ZHVi" },
 
445
          { "dud", "ZHVk" },
 
446
          { "due", "ZHVl" },
 
447
          { "dug", "ZHVn" },
 
448
          { "dun", "ZHVu" },
 
449
          { "dye", "ZHll" },
 
450
          { "ear", "ZWFy" },
 
451
          { "eat", "ZWF0" },
 
452
          { "ebb", "ZWJi" },
 
453
          { "EDT", "RURU" },
 
454
          { "eel", "ZWVs" },
 
455
          { "eft", "ZWZ0" },
 
456
          { "e.g", "ZS5n" },
 
457
          { "egg", "ZWdn" },
 
458
          { "ego", "ZWdv" },
 
459
          { "eke", "ZWtl" },
 
460
          { "Eli", "RWxp" },
 
461
          { "elk", "ZWxr" },
 
462
          { "ell", "ZWxs" },
 
463
          { "elm", "ZWxt" },
 
464
          { "Ely", "RWx5" },
 
465
          { "end", "ZW5k" },
 
466
          { "Eng", "RW5n" },
 
467
          { "EPA", "RVBB" },
 
468
          { "era", "ZXJh" },
 
469
          { "ere", "ZXJl" },
 
470
          { "erg", "ZXJn" },
 
471
          { "err", "ZXJy" },
 
472
          { "e's", "ZSdz" },
 
473
          { "EST", "RVNU" },
 
474
          { "eta", "ZXRh" },
 
475
          { "etc", "ZXRj" },
 
476
          { "Eva", "RXZh" },
 
477
          { "eve", "ZXZl" },
 
478
          { "ewe", "ZXdl" },
 
479
          { "eye", "ZXll" },
 
480
          { "FAA", "RkFB" },
 
481
          { "fad", "ZmFk" },
 
482
          { "fag", "ZmFn" },
 
483
          { "fan", "ZmFu" },
 
484
          { "far", "ZmFy" },
 
485
          { "fat", "ZmF0" },
 
486
          { "fay", "ZmF5" },
 
487
          { "FBI", "RkJJ" },
 
488
          { "FCC", "RkND" },
 
489
          { "FDA", "RkRB" },
 
490
          { "Feb", "RmVi" },
 
491
          { "fed", "ZmVk" },
 
492
          { "fee", "ZmVl" },
 
493
          { "few", "ZmV3" },
 
494
          { "fib", "Zmli" },
 
495
          { "fig", "Zmln" },
 
496
          { "fin", "Zmlu" },
 
497
          { "fir", "Zmly" },
 
498
          { "fit", "Zml0" },
 
499
          { "fix", "Zml4" },
 
500
          { "Flo", "Rmxv" },
 
501
          { "flu", "Zmx1" },
 
502
          { "fly", "Zmx5" },
 
503
          { "FMC", "Rk1D" },
 
504
          { "fob", "Zm9i" },
 
505
          { "foe", "Zm9l" },
 
506
          { "fog", "Zm9n" },
 
507
          { "fop", "Zm9w" },
 
508
          { "for", "Zm9y" },
 
509
          { "fox", "Zm94" },
 
510
          { "FPC", "RlBD" },
 
511
          { "fro", "ZnJv" },
 
512
          { "fry", "ZnJ5" },
 
513
          { "f's", "Zidz" },
 
514
          { "FTC", "RlRD" },
 
515
          { "fum", "ZnVt" },
 
516
          { "fun", "ZnVu" },
 
517
          { "fur", "ZnVy" },
 
518
          { "gab", "Z2Fi" },
 
519
          { "gad", "Z2Fk" },
 
520
          { "gag", "Z2Fn" },
 
521
          { "gal", "Z2Fs" },
 
522
          { "gam", "Z2Ft" },
 
523
          { "GAO", "R0FP" },
 
524
          { "gap", "Z2Fw" },
 
525
          { "gar", "Z2Fy" },
 
526
          { "gas", "Z2Fz" },
 
527
          { "gay", "Z2F5" },
 
528
          { "gee", "Z2Vl" },
 
529
          { "gel", "Z2Vs" },
 
530
          { "gem", "Z2Vt" },
 
531
          { "get", "Z2V0" },
 
532
          { "gig", "Z2ln" },
 
533
          { "Gil", "R2ls" },
 
534
          { "gin", "Z2lu" },
 
535
          { "GMT", "R01U" },
 
536
          { "GNP", "R05Q" },
 
537
          { "gnu", "Z251" },
 
538
          { "Goa", "R29h" },
 
539
          { "gob", "Z29i" },
 
540
          { "god", "Z29k" },
 
541
          { "gog", "Z29n" },
 
542
          { "GOP", "R09Q" },
 
543
          { "got", "Z290" },
 
544
          { "GPO", "R1BP" },
 
545
          { "g's", "Zydz" },
 
546
          { "GSA", "R1NB" },
 
547
          { "gum", "Z3Vt" },
 
548
          { "gun", "Z3Vu" },
 
549
          { "Gus", "R3Vz" },
 
550
          { "gut", "Z3V0" },
 
551
          { "guy", "Z3V5" },
 
552
          { "gym", "Z3lt" },
 
553
          { "gyp", "Z3lw" },
 
554
          { "had", "aGFk" },
 
555
          { "Hal", "SGFs" },
 
556
          { "ham", "aGFt" },
 
557
          { "Han", "SGFu" },
 
558
          { "hap", "aGFw" },
 
559
          { "hat", "aGF0" },
 
560
          { "haw", "aGF3" },
 
561
          { "hay", "aGF5" },
 
562
          { "hem", "aGVt" },
 
563
          { "hen", "aGVu" },
 
564
          { "her", "aGVy" },
 
565
          { "hew", "aGV3" },
 
566
          { "hex", "aGV4" },
 
567
          { "hey", "aGV5" },
 
568
          { "hid", "aGlk" },
 
569
          { "him", "aGlt" },
 
570
          { "hip", "aGlw" },
 
571
          { "his", "aGlz" },
 
572
          { "hit", "aGl0" },
 
573
          { "hob", "aG9i" },
 
574
          { "hoc", "aG9j" },
 
575
          { "hoe", "aG9l" },
 
576
          { "hog", "aG9n" },
 
577
          { "hoi", "aG9p" },
 
578
          { "Hom", "SG9t" },
 
579
          { "hop", "aG9w" },
 
580
          { "hot", "aG90" },
 
581
          { "how", "aG93" },
 
582
          { "hoy", "aG95" },
 
583
          { "h's", "aCdz" },
 
584
          { "hub", "aHVi" },
 
585
          { "hue", "aHVl" },
 
586
          { "hug", "aHVn" },
 
587
          { "huh", "aHVo" },
 
588
          { "hum", "aHVt" },
 
589
          { "Hun", "SHVu" },
 
590
          { "hut", "aHV0" },
 
591
          { "Ian", "SWFu" },
 
592
          { "IBM", "SUJN" },
 
593
          { "Ibn", "SWJu" },
 
594
          { "ICC", "SUND" },
 
595
          { "ice", "aWNl" },
 
596
          { "icy", "aWN5" },
 
597
          { "I'd", "SSdk" },
 
598
          { "Ida", "SWRh" },
 
599
          { "i.e", "aS5l" },
 
600
          { "iii", "aWlp" },
 
601
          { "Ike", "SWtl" },
 
602
          { "ill", "aWxs" },
 
603
          { "I'm", "SSdt" },
 
604
          { "imp", "aW1w" },
 
605
          { "Inc", "SW5j" },
 
606
          { "ink", "aW5r" },
 
607
          { "inn", "aW5u" },
 
608
          { "ion", "aW9u" },
 
609
          { "Ira", "SXJh" },
 
610
          { "ire", "aXJl" },
 
611
          { "irk", "aXJr" },
 
612
          { "IRS", "SVJT" },
 
613
          { "i's", "aSdz" },
 
614
          { "Ito", "SXRv" },
 
615
          { "ITT", "SVRU" },
 
616
          { "ivy", "aXZ5" },
 
617
          { "jab", "amFi" },
 
618
          { "jag", "amFn" },
 
619
          { "jam", "amFt" },
 
620
          { "Jan", "SmFu" },
 
621
          { "jar", "amFy" },
 
622
          { "jaw", "amF3" },
 
623
          { "jay", "amF5" },
 
624
          { "Jed", "SmVk" },
 
625
          { "jet", "amV0" },
 
626
          { "Jew", "SmV3" },
 
627
          { "jig", "amln" },
 
628
          { "Jim", "Smlt" },
 
629
          { "job", "am9i" },
 
630
          { "Joe", "Sm9l" },
 
631
          { "jog", "am9n" },
 
632
          { "Jon", "Sm9u" },
 
633
          { "jot", "am90" },
 
634
          { "joy", "am95" },
 
635
          { "j's", "aidz" },
 
636
          { "jug", "anVn" },
 
637
          { "jut", "anV0" },
 
638
          { "Kay", "S2F5" },
 
639
          { "keg", "a2Vn" },
 
640
          { "ken", "a2Vu" },
 
641
          { "key", "a2V5" },
 
642
          { "kid", "a2lk" },
 
643
          { "Kim", "S2lt" },
 
644
          { "kin", "a2lu" },
 
645
          { "kit", "a2l0" },
 
646
          { "k's", "aydz" },
 
647
          { "lab", "bGFi" },
 
648
          { "lac", "bGFj" },
 
649
          { "lad", "bGFk" },
 
650
          { "lag", "bGFn" },
 
651
          { "lam", "bGFt" },
 
652
          { "Lao", "TGFv" },
 
653
          { "lap", "bGFw" },
 
654
          { "law", "bGF3" },
 
655
          { "lax", "bGF4" },
 
656
          { "lay", "bGF5" },
 
657
          { "lea", "bGVh" },
 
658
          { "led", "bGVk" },
 
659
          { "lee", "bGVl" },
 
660
          { "leg", "bGVn" },
 
661
          { "Len", "TGVu" },
 
662
          { "Leo", "TGVv" },
 
663
          { "let", "bGV0" },
 
664
          { "Lev", "TGV2" },
 
665
          { "Lew", "TGV3" },
 
666
          { "lew", "bGV3" },
 
667
          { "lid", "bGlk" },
 
668
          { "lie", "bGll" },
 
669
          { "lim", "bGlt" },
 
670
          { "Lin", "TGlu" },
 
671
          { "lip", "bGlw" },
 
672
          { "lit", "bGl0" },
 
673
          { "Liz", "TGl6" },
 
674
          { "lob", "bG9i" },
 
675
          { "log", "bG9n" },
 
676
          { "lop", "bG9w" },
 
677
          { "Los", "TG9z" },
 
678
          { "lot", "bG90" },
 
679
          { "Lou", "TG91" },
 
680
          { "low", "bG93" },
 
681
          { "loy", "bG95" },
 
682
          { "l's", "bCdz" },
 
683
          { "LSI", "TFNJ" },
 
684
          { "Ltd", "THRk" },
 
685
          { "LTV", "TFRW" },
 
686
          { "lug", "bHVn" },
 
687
          { "lux", "bHV4" },
 
688
          { "lye", "bHll" },
 
689
          { "Mac", "TWFj" },
 
690
          { "mad", "bWFk" },
 
691
          { "Mae", "TWFl" },
 
692
          { "man", "bWFu" },
 
693
          { "Mao", "TWFv" },
 
694
          { "map", "bWFw" },
 
695
          { "mar", "bWFy" },
 
696
          { "mat", "bWF0" },
 
697
          { "maw", "bWF3" },
 
698
          { "Max", "TWF4" },
 
699
          { "max", "bWF4" },
 
700
          { "may", "bWF5" },
 
701
          { "MBA", "TUJB" },
 
702
          { "Meg", "TWVn" },
 
703
          { "Mel", "TWVs" },
 
704
          { "men", "bWVu" },
 
705
          { "met", "bWV0" },
 
706
          { "mew", "bWV3" },
 
707
          { "mid", "bWlk" },
 
708
          { "mig", "bWln" },
 
709
          { "min", "bWlu" },
 
710
          { "MIT", "TUlU" },
 
711
          { "mix", "bWl4" },
 
712
          { "mob", "bW9i" },
 
713
          { "Moe", "TW9l" },
 
714
          { "moo", "bW9v" },
 
715
          { "mop", "bW9w" },
 
716
          { "mot", "bW90" },
 
717
          { "mow", "bW93" },
 
718
          { "MPH", "TVBI" },
 
719
          { "Mrs", "TXJz" },
 
720
          { "m's", "bSdz" },
 
721
          { "mud", "bXVk" },
 
722
          { "mug", "bXVn" },
 
723
          { "mum", "bXVt" },
 
724
          { "nab", "bmFi" },
 
725
          { "nag", "bmFn" },
 
726
          { "Nan", "TmFu" },
 
727
          { "nap", "bmFw" },
 
728
          { "Nat", "TmF0" },
 
729
          { "nay", "bmF5" },
 
730
          { "NBC", "TkJD" },
 
731
          { "NBS", "TkJT" },
 
732
          { "NCO", "TkNP" },
 
733
          { "NCR", "TkNS" },
 
734
          { "Ned", "TmVk" },
 
735
          { "nee", "bmVl" },
 
736
          { "net", "bmV0" },
 
737
          { "new", "bmV3" },
 
738
          { "nib", "bmli" },
 
739
          { "NIH", "TklI" },
 
740
          { "nil", "bmls" },
 
741
          { "nip", "bmlw" },
 
742
          { "nit", "bml0" },
 
743
          { "NNE", "Tk5F" },
 
744
          { "NNW", "Tk5X" },
 
745
          { "nob", "bm9i" },
 
746
          { "nod", "bm9k" },
 
747
          { "non", "bm9u" },
 
748
          { "nor", "bm9y" },
 
749
          { "not", "bm90" },
 
750
          { "Nov", "Tm92" },
 
751
          { "now", "bm93" },
 
752
          { "NRC", "TlJD" },
 
753
          { "n's", "bidz" },
 
754
          { "NSF", "TlNG" },
 
755
          { "nun", "bnVu" },
 
756
          { "nut", "bnV0" },
 
757
          { "NYC", "TllD" },
 
758
          { "NYU", "TllV" },
 
759
          { "oaf", "b2Fm" },
 
760
          { "oak", "b2Fr" },
 
761
          { "oar", "b2Fy" },
 
762
          { "oat", "b2F0" },
 
763
          { "Oct", "T2N0" },
 
764
          { "odd", "b2Rk" },
 
765
          { "ode", "b2Rl" },
 
766
          { "off", "b2Zm" },
 
767
          { "oft", "b2Z0" },
 
768
          { "ohm", "b2ht" },
 
769
          { "oil", "b2ls" },
 
770
          { "old", "b2xk" },
 
771
          { "one", "b25l" },
 
772
          { "opt", "b3B0" },
 
773
          { "orb", "b3Ji" },
 
774
          { "ore", "b3Jl" },
 
775
          { "Orr", "T3Jy" },
 
776
          { "o's", "bydz" },
 
777
          { "Ott", "T3R0" },
 
778
          { "our", "b3Vy" },
 
779
          { "out", "b3V0" },
 
780
          { "ova", "b3Zh" },
 
781
          { "owe", "b3dl" },
 
782
          { "owl", "b3ds" },
 
783
          { "own", "b3du" },
 
784
          { "pad", "cGFk" },
 
785
          { "pal", "cGFs" },
 
786
          { "Pam", "UGFt" },
 
787
          { "pan", "cGFu" },
 
788
          { "pap", "cGFw" },
 
789
          { "par", "cGFy" },
 
790
          { "pat", "cGF0" },
 
791
          { "paw", "cGF3" },
 
792
          { "pax", "cGF4" },
 
793
          { "pay", "cGF5" },
 
794
          { "Paz", "UGF6" },
 
795
          { "PBS", "UEJT" },
 
796
          { "PDP", "UERQ" },
 
797
          { "pea", "cGVh" },
 
798
          { "pee", "cGVl" },
 
799
          { "peg", "cGVn" },
 
800
          { "pen", "cGVu" },
 
801
          { "pep", "cGVw" },
 
802
          { "per", "cGVy" },
 
803
          { "pet", "cGV0" },
 
804
          { "pew", "cGV3" },
 
805
          { "PhD", "UGhE" },
 
806
          { "phi", "cGhp" },
 
807
          { "pie", "cGll" },
 
808
          { "pig", "cGln" },
 
809
          { "pin", "cGlu" },
 
810
          { "pip", "cGlw" },
 
811
          { "pit", "cGl0" },
 
812
          { "ply", "cGx5" },
 
813
          { "pod", "cG9k" },
 
814
          { "Poe", "UG9l" },
 
815
          { "poi", "cG9p" },
 
816
          { "pol", "cG9s" },
 
817
          { "pop", "cG9w" },
 
818
          { "pot", "cG90" },
 
819
          { "pow", "cG93" },
 
820
          { "ppm", "cHBt" },
 
821
          { "pro", "cHJv" },
 
822
          { "pry", "cHJ5" },
 
823
          { "p's", "cCdz" },
 
824
          { "psi", "cHNp" },
 
825
          { "PTA", "UFRB" },
 
826
          { "pub", "cHVi" },
 
827
          { "PUC", "UFVD" },
 
828
          { "pug", "cHVn" },
 
829
          { "pun", "cHVu" },
 
830
          { "pup", "cHVw" },
 
831
          { "pus", "cHVz" },
 
832
          { "put", "cHV0" },
 
833
          { "PVC", "UFZD" },
 
834
          { "QED", "UUVE" },
 
835
          { "q's", "cSdz" },
 
836
          { "qua", "cXVh" },
 
837
          { "quo", "cXVv" },
 
838
          { "Rae", "UmFl" },
 
839
          { "rag", "cmFn" },
 
840
          { "raj", "cmFq" },
 
841
          { "ram", "cmFt" },
 
842
          { "ran", "cmFu" },
 
843
          { "rap", "cmFw" },
 
844
          { "rat", "cmF0" },
 
845
          { "raw", "cmF3" },
 
846
          { "ray", "cmF5" },
 
847
          { "RCA", "UkNB" },
 
848
          { "R&D", "UiZE" },
 
849
          { "reb", "cmVi" },
 
850
          { "red", "cmVk" },
 
851
          { "rep", "cmVw" },
 
852
          { "ret", "cmV0" },
 
853
          { "rev", "cmV2" },
 
854
          { "Rex", "UmV4" },
 
855
          { "rho", "cmhv" },
 
856
          { "rib", "cmli" },
 
857
          { "rid", "cmlk" },
 
858
          { "rig", "cmln" },
 
859
          { "rim", "cmlt" },
 
860
          { "Rio", "Umlv" },
 
861
          { "rip", "cmlw" },
 
862
          { "RNA", "Uk5B" },
 
863
          { "rob", "cm9i" },
 
864
          { "rod", "cm9k" },
 
865
          { "roe", "cm9l" },
 
866
          { "Ron", "Um9u" },
 
867
          { "rot", "cm90" },
 
868
          { "row", "cm93" },
 
869
          { "Roy", "Um95" },
 
870
          { "RPM", "UlBN" },
 
871
          { "r's", "cidz" },
 
872
          { "rub", "cnVi" },
 
873
          { "rue", "cnVl" },
 
874
          { "rug", "cnVn" },
 
875
          { "rum", "cnVt" },
 
876
          { "run", "cnVu" },
 
877
          { "rut", "cnV0" },
 
878
          { "rye", "cnll" },
 
879
          { "sac", "c2Fj" },
 
880
          { "sad", "c2Fk" },
 
881
          { "sag", "c2Fn" },
 
882
          { "Sal", "U2Fs" },
 
883
          { "Sam", "U2Ft" },
 
884
          { "San", "U2Fu" },
 
885
          { "Sao", "U2Fv" },
 
886
          { "sap", "c2Fw" },
 
887
          { "sat", "c2F0" },
 
888
          { "saw", "c2F3" },
 
889
          { "sax", "c2F4" },
 
890
          { "say", "c2F5" },
 
891
          { "Sci", "U2Np" },
 
892
          { "SCM", "U0NN" },
 
893
          { "sea", "c2Vh" },
 
894
          { "sec", "c2Vj" },
 
895
          { "see", "c2Vl" },
 
896
          { "sen", "c2Vu" },
 
897
          { "seq", "c2Vx" },
 
898
          { "set", "c2V0" },
 
899
          { "sew", "c2V3" },
 
900
          { "sex", "c2V4" },
 
901
          { "she", "c2hl" },
 
902
          { "Shu", "U2h1" },
 
903
          { "shy", "c2h5" },
 
904
          { "sib", "c2li" },
 
905
          { "sic", "c2lj" },
 
906
          { "sin", "c2lu" },
 
907
          { "sip", "c2lw" },
 
908
          { "sir", "c2ly" },
 
909
          { "sis", "c2lz" },
 
910
          { "sit", "c2l0" },
 
911
          { "six", "c2l4" },
 
912
          { "ski", "c2tp" },
 
913
          { "sky", "c2t5" },
 
914
          { "sly", "c2x5" },
 
915
          { "sob", "c29i" },
 
916
          { "Soc", "U29j" },
 
917
          { "sod", "c29k" },
 
918
          { "Sol", "U29s" },
 
919
          { "son", "c29u" },
 
920
          { "sop", "c29w" },
 
921
          { "sou", "c291" },
 
922
          { "sow", "c293" },
 
923
          { "soy", "c295" },
 
924
          { "spa", "c3Bh" },
 
925
          { "spy", "c3B5" },
 
926
          { "Sri", "U3Jp" },
 
927
          { "s's", "cydz" },
 
928
          { "SSE", "U1NF" },
 
929
          { "SST", "U1NU" },
 
930
          { "SSW", "U1NX" },
 
931
          { "Stu", "U3R1" },
 
932
          { "sub", "c3Vi" },
 
933
          { "sud", "c3Vk" },
 
934
          { "sue", "c3Vl" },
 
935
          { "sum", "c3Vt" },
 
936
          { "sun", "c3Vu" },
 
937
          { "sup", "c3Vw" },
 
938
          { "Sus", "U3Vz" },
 
939
          { "tab", "dGFi" },
 
940
          { "tad", "dGFk" },
 
941
          { "tag", "dGFn" },
 
942
          { "tam", "dGFt" },
 
943
          { "tan", "dGFu" },
 
944
          { "tao", "dGFv" },
 
945
          { "tap", "dGFw" },
 
946
          { "tar", "dGFy" },
 
947
          { "tat", "dGF0" },
 
948
          { "tau", "dGF1" },
 
949
          { "tax", "dGF4" },
 
950
          { "tea", "dGVh" },
 
951
          { "Ted", "VGVk" },
 
952
          { "ted", "dGVk" },
 
953
          { "tee", "dGVl" },
 
954
          { "Tel", "VGVs" },
 
955
          { "ten", "dGVu" },
 
956
          { "the", "dGhl" },
 
957
          { "thy", "dGh5" },
 
958
          { "tic", "dGlj" },
 
959
          { "tid", "dGlk" },
 
960
          { "tie", "dGll" },
 
961
          { "til", "dGls" },
 
962
          { "Tim", "VGlt" },
 
963
          { "tin", "dGlu" },
 
964
          { "tip", "dGlw" },
 
965
          { "tit", "dGl0" },
 
966
          { "TNT", "VE5U" },
 
967
          { "toe", "dG9l" },
 
968
          { "tog", "dG9n" },
 
969
          { "Tom", "VG9t" },
 
970
          { "ton", "dG9u" },
 
971
          { "too", "dG9v" },
 
972
          { "top", "dG9w" },
 
973
          { "tor", "dG9y" },
 
974
          { "tot", "dG90" },
 
975
          { "tow", "dG93" },
 
976
          { "toy", "dG95" },
 
977
          { "TRW", "VFJX" },
 
978
          { "try", "dHJ5" },
 
979
          { "t's", "dCdz" },
 
980
          { "TTL", "VFRM" },
 
981
          { "TTY", "VFRZ" },
 
982
          { "tub", "dHVi" },
 
983
          { "tug", "dHVn" },
 
984
          { "tum", "dHVt" },
 
985
          { "tun", "dHVu" },
 
986
          { "TVA", "VFZB" },
 
987
          { "TWA", "VFdB" },
 
988
          { "two", "dHdv" },
 
989
          { "TWX", "VFdY" },
 
990
          { "ugh", "dWdo" },
 
991
          { "UHF", "VUhG" },
 
992
          { "Uri", "VXJp" },
 
993
          { "urn", "dXJu" },
 
994
          { "U.S", "VS5T" },
 
995
          { "u's", "dSdz" },
 
996
          { "USA", "VVNB" },
 
997
          { "USC", "VVND" },
 
998
          { "use", "dXNl" },
 
999
          { "USN", "VVNO" },
 
1000
          { "van", "dmFu" },
 
1001
          { "vat", "dmF0" },
 
1002
          { "vee", "dmVl" },
 
1003
          { "vet", "dmV0" },
 
1004
          { "vex", "dmV4" },
 
1005
          { "VHF", "VkhG" },
 
1006
          { "via", "dmlh" },
 
1007
          { "vie", "dmll" },
 
1008
          { "vii", "dmlp" },
 
1009
          { "vis", "dmlz" },
 
1010
          { "viz", "dml6" },
 
1011
          { "von", "dm9u" },
 
1012
          { "vow", "dm93" },
 
1013
          { "v's", "didz" },
 
1014
          { "WAC", "V0FD" },
 
1015
          { "wad", "d2Fk" },
 
1016
          { "wag", "d2Fn" },
 
1017
          { "wah", "d2Fo" },
 
1018
          { "wan", "d2Fu" },
 
1019
          { "war", "d2Fy" },
 
1020
          { "was", "d2Fz" },
 
1021
          { "wax", "d2F4" },
 
1022
          { "way", "d2F5" },
 
1023
          { "web", "d2Vi" },
 
1024
          { "wed", "d2Vk" },
 
1025
          { "wee", "d2Vl" },
 
1026
          { "Wei", "V2Vp" },
 
1027
          { "wet", "d2V0" },
 
1028
          { "who", "d2hv" },
 
1029
          { "why", "d2h5" },
 
1030
          { "wig", "d2ln" },
 
1031
          { "win", "d2lu" },
 
1032
          { "wit", "d2l0" },
 
1033
          { "woe", "d29l" },
 
1034
          { "wok", "d29r" },
 
1035
          { "won", "d29u" },
 
1036
          { "woo", "d29v" },
 
1037
          { "wop", "d29w" },
 
1038
          { "wow", "d293" },
 
1039
          { "wry", "d3J5" },
 
1040
          { "w's", "dydz" },
 
1041
          { "x's", "eCdz" },
 
1042
          { "yah", "eWFo" },
 
1043
          { "yak", "eWFr" },
 
1044
          { "yam", "eWFt" },
 
1045
          { "yap", "eWFw" },
 
1046
          { "yaw", "eWF3" },
 
1047
          { "yea", "eWVh" },
 
1048
          { "yen", "eWVu" },
 
1049
          { "yet", "eWV0" },
 
1050
          { "yin", "eWlu" },
 
1051
          { "yip", "eWlw" },
 
1052
          { "yon", "eW9u" },
 
1053
          { "you", "eW91" },
 
1054
          { "yow", "eW93" },
 
1055
          { "y's", "eSdz" },
 
1056
          { "yuh", "eXVo" },
 
1057
          { "zag", "emFn" },
 
1058
          { "Zan", "WmFu" },
 
1059
          { "zap", "emFw" },
 
1060
          { "Zen", "WmVu" },
 
1061
          { "zig", "emln" },
 
1062
          { "zip", "emlw" },
 
1063
          { "Zoe", "Wm9l" },
 
1064
          { "zoo", "em9v" },
 
1065
          { "z's", "eidz" },
 
1066
          /* the false rumors file */
 
1067
          { "\"So when I die, the first thing I will see in heaven is a score list?\"", 
 
1068
            "IlNvIHdoZW4gSSBkaWUsIHRoZSBmaXJzdCB0aGluZyBJIHdpbGwgc2VlIGluIGhlYXZlbiBpcyBhIHNjb3JlIGxpc3Q/Ig==" },
 
1069
          { "1st Law of Hacking: leaving is much more difficult than entering.", 
 
1070
            "MXN0IExhdyBvZiBIYWNraW5nOiBsZWF2aW5nIGlzIG11Y2ggbW9yZSBkaWZmaWN1bHQgdGhhbiBlbnRlcmluZy4=" },
 
1071
          { "2nd Law of Hacking: first in, first out.", 
 
1072
            "Mm5kIExhdyBvZiBIYWNraW5nOiBmaXJzdCBpbiwgZmlyc3Qgb3V0Lg==" },
 
1073
          { "3rd Law of Hacking: the last blow counts most.", 
 
1074
            "M3JkIExhdyBvZiBIYWNraW5nOiB0aGUgbGFzdCBibG93IGNvdW50cyBtb3N0Lg==" },
 
1075
          { "4th Law of Hacking: you will find the exit at the entrance.", 
 
1076
            "NHRoIExhdyBvZiBIYWNraW5nOiB5b3Ugd2lsbCBmaW5kIHRoZSBleGl0IGF0IHRoZSBlbnRyYW5jZS4=" },
 
1077
          { "A chameleon imitating a mail daemon often delivers scrolls of fire.", 
 
1078
            "QSBjaGFtZWxlb24gaW1pdGF0aW5nIGEgbWFpbCBkYWVtb24gb2Z0ZW4gZGVsaXZlcnMgc2Nyb2xscyBvZiBmaXJlLg==" },
 
1079
          { "A cockatrice corpse is guaranteed to be untainted!", 
 
1080
            "QSBjb2NrYXRyaWNlIGNvcnBzZSBpcyBndWFyYW50ZWVkIHRvIGJlIHVudGFpbnRlZCE=" },
 
1081
          { "A dead cockatrice is just a dead lizard.", 
 
1082
            "QSBkZWFkIGNvY2thdHJpY2UgaXMganVzdCBhIGRlYWQgbGl6YXJkLg==" },
 
1083
          { "A dragon is just a snake that ate a scroll of fire.", 
 
1084
            "QSBkcmFnb24gaXMganVzdCBhIHNuYWtlIHRoYXQgYXRlIGEgc2Nyb2xsIG9mIGZpcmUu" },
 
1085
          { "A fading corridor enlightens your insight.", 
 
1086
            "QSBmYWRpbmcgY29ycmlkb3IgZW5saWdodGVucyB5b3VyIGluc2lnaHQu" },
 
1087
          { "A glowing potion is too hot to drink.", 
 
1088
            "QSBnbG93aW5nIHBvdGlvbiBpcyB0b28gaG90IHRvIGRyaW5rLg==" },
 
1089
          { "A good amulet may protect you against guards.", 
 
1090
            "QSBnb29kIGFtdWxldCBtYXkgcHJvdGVjdCB5b3UgYWdhaW5zdCBndWFyZHMu" },
 
1091
          { "A lizard corpse is a good thing to turn undead.", 
 
1092
            "QSBsaXphcmQgY29ycHNlIGlzIGEgZ29vZCB0aGluZyB0byB0dXJuIHVuZGVhZC4=" },
 
1093
          { "A long worm can be defined recursively. So how should you attack it?", 
 
1094
            "QSBsb25nIHdvcm0gY2FuIGJlIGRlZmluZWQgcmVjdXJzaXZlbHkuIFNvIGhvdyBzaG91bGQgeW91IGF0dGFjayBpdD8=" },
 
1095
          { "A monstrous mind is a toy forever.", 
 
1096
            "QSBtb25zdHJvdXMgbWluZCBpcyBhIHRveSBmb3JldmVyLg==" },
 
1097
          { "A nymph will be very pleased if you call her by her real name: Lorelei.", 
 
1098
            "QSBueW1waCB3aWxsIGJlIHZlcnkgcGxlYXNlZCBpZiB5b3UgY2FsbCBoZXIgYnkgaGVyIHJlYWwgbmFtZTogTG9yZWxlaS4=" },
 
1099
          { "A ring of dungeon master control is a great find.", 
 
1100
            "QSByaW5nIG9mIGR1bmdlb24gbWFzdGVyIGNvbnRyb2wgaXMgYSBncmVhdCBmaW5kLg==" },
 
1101
          { "A ring of extra ring finger is useless if not enchanted.", 
 
1102
            "QSByaW5nIG9mIGV4dHJhIHJpbmcgZmluZ2VyIGlzIHVzZWxlc3MgaWYgbm90IGVuY2hhbnRlZC4=" },
 
1103
          { "A rope may form a trail in a maze.", 
 
1104
            "QSByb3BlIG1heSBmb3JtIGEgdHJhaWwgaW4gYSBtYXplLg==" },
 
1105
          { "A staff may recharge if you drop it for awhile.", 
 
1106
            "QSBzdGFmZiBtYXkgcmVjaGFyZ2UgaWYgeW91IGRyb3AgaXQgZm9yIGF3aGlsZS4=" },
 
1107
          { "A visit to the Zoo is very educational; you meet interesting animals.", 
 
1108
            "QSB2aXNpdCB0byB0aGUgWm9vIGlzIHZlcnkgZWR1Y2F0aW9uYWw7IHlvdSBtZWV0IGludGVyZXN0aW5nIGFuaW1hbHMu" },
 
1109
          { "A wand of deaf is a more dangerous weapon than a wand of sheep.", 
 
1110
            "QSB3YW5kIG9mIGRlYWYgaXMgYSBtb3JlIGRhbmdlcm91cyB3ZWFwb24gdGhhbiBhIHdhbmQgb2Ygc2hlZXAu" },
 
1111
          { "A wand of vibration might bring the whole cave crashing about your ears.", 
 
1112
            "QSB3YW5kIG9mIHZpYnJhdGlvbiBtaWdodCBicmluZyB0aGUgd2hvbGUgY2F2ZSBjcmFzaGluZyBhYm91dCB5b3VyIGVhcnMu" },
 
1113
          { "A winner never quits. A quitter never wins.", 
 
1114
            "QSB3aW5uZXIgbmV2ZXIgcXVpdHMuIEEgcXVpdHRlciBuZXZlciB3aW5zLg==" },
 
1115
          { "A wish? Okay, make me a fortune cookie!", 
 
1116
            "QSB3aXNoPyBPa2F5LCBtYWtlIG1lIGEgZm9ydHVuZSBjb29raWUh" },
 
1117
          { "Afraid of mimics? Try to wear a ring of true seeing.", 
 
1118
            "QWZyYWlkIG9mIG1pbWljcz8gVHJ5IHRvIHdlYXIgYSByaW5nIG9mIHRydWUgc2VlaW5nLg==" },
 
1119
          { "All monsters are created evil, but some are more evil than others.", 
 
1120
            "QWxsIG1vbnN0ZXJzIGFyZSBjcmVhdGVkIGV2aWwsIGJ1dCBzb21lIGFyZSBtb3JlIGV2aWwgdGhhbiBvdGhlcnMu" },
 
1121
          { "Always attack a floating eye from behind!", 
 
1122
            "QWx3YXlzIGF0dGFjayBhIGZsb2F0aW5nIGV5ZSBmcm9tIGJlaGluZCE=" },
 
1123
          { "An elven cloak is always the height of fashion.", 
 
1124
            "QW4gZWx2ZW4gY2xvYWsgaXMgYWx3YXlzIHRoZSBoZWlnaHQgb2YgZmFzaGlvbi4=" },
 
1125
          { "Any small object that is accidentally dropped will hide under a larger object.", 
 
1126
            "QW55IHNtYWxsIG9iamVjdCB0aGF0IGlzIGFjY2lkZW50YWxseSBkcm9wcGVkIHdpbGwgaGlkZSB1bmRlciBhIGxhcmdlciBvYmplY3Qu" },
 
1127
          { "Balrogs do not appear above level 20.", 
 
1128
            "QmFscm9ncyBkbyBub3QgYXBwZWFyIGFib3ZlIGxldmVsIDIwLg==" },
 
1129
          { "Banana peels work especially well against Keystone Kops.", 
 
1130
            "QmFuYW5hIHBlZWxzIHdvcmsgZXNwZWNpYWxseSB3ZWxsIGFnYWluc3QgS2V5c3RvbmUgS29wcy4=" },
 
1131
          { "Be careful when eating bananas. Monsters might slip on the peels.", 
 
1132
            "QmUgY2FyZWZ1bCB3aGVuIGVhdGluZyBiYW5hbmFzLiBNb25zdGVycyBtaWdodCBzbGlwIG9uIHRoZSBwZWVscy4=" },
 
1133
          { "Better leave the dungeon; otherwise you might get hurt badly.", 
 
1134
            "QmV0dGVyIGxlYXZlIHRoZSBkdW5nZW9uOyBvdGhlcndpc2UgeW91IG1pZ2h0IGdldCBodXJ0IGJhZGx5Lg==" },
 
1135
          { "Beware of the potion of nitroglycerin -- it's not for the weak of heart.", 
 
1136
            "QmV3YXJlIG9mIHRoZSBwb3Rpb24gb2Ygbml0cm9nbHljZXJpbiAtLSBpdCdzIG5vdCBmb3IgdGhlIHdlYWsgb2YgaGVhcnQu" },
 
1137
          { "Beware: there's always a chance that your wand explodes as you try to zap it!", 
 
1138
            "QmV3YXJlOiB0aGVyZSdzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHlvdXIgd2FuZCBleHBsb2RlcyBhcyB5b3UgdHJ5IHRvIHphcCBpdCE=" },
 
1139
          { "Beyond the 23rd level lies a happy retirement in a room of your own.", 
 
1140
            "QmV5b25kIHRoZSAyM3JkIGxldmVsIGxpZXMgYSBoYXBweSByZXRpcmVtZW50IGluIGEgcm9vbSBvZiB5b3VyIG93bi4=" },
 
1141
          { "Changing your suit without dropping your sword? You must be kidding!", 
 
1142
            "Q2hhbmdpbmcgeW91ciBzdWl0IHdpdGhvdXQgZHJvcHBpbmcgeW91ciBzd29yZD8gWW91IG11c3QgYmUga2lkZGluZyE=" },
 
1143
          { "Cockatrices might turn themselves to stone faced with a mirror.", 
 
1144
            "Q29ja2F0cmljZXMgbWlnaHQgdHVybiB0aGVtc2VsdmVzIHRvIHN0b25lIGZhY2VkIHdpdGggYSBtaXJyb3Iu" },
 
1145
          { "Consumption of home-made food is strictly forbidden in this dungeon.", 
 
1146
            "Q29uc3VtcHRpb24gb2YgaG9tZS1tYWRlIGZvb2QgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIGluIHRoaXMgZHVuZ2Vvbi4=" },
 
1147
          { "Dark room? Your chance to develop your photographs!", 
 
1148
            "RGFyayByb29tPyBZb3VyIGNoYW5jZSB0byBkZXZlbG9wIHlvdXIgcGhvdG9ncmFwaHMh" },
 
1149
          { "Dark rooms are not *completely* dark: just wait and let your eyes adjust...", 
 
1150
            "RGFyayByb29tcyBhcmUgbm90ICpjb21wbGV0ZWx5KiBkYXJrOiBqdXN0IHdhaXQgYW5kIGxldCB5b3VyIGV5ZXMgYWRqdXN0Li4u" },
 
1151
          { "David London sez, \"Hey guys, *WIELD* a lizard corpse against a cockatrice!\"", 
 
1152
            "RGF2aWQgTG9uZG9uIHNleiwgIkhleSBndXlzLCAqV0lFTEQqIGEgbGl6YXJkIGNvcnBzZSBhZ2FpbnN0IGEgY29ja2F0cmljZSEi" },
 
1153
          { "Death is just life's way of telling you you've been fired.", 
 
1154
            "RGVhdGggaXMganVzdCBsaWZlJ3Mgd2F5IG9mIHRlbGxpbmcgeW91IHlvdSd2ZSBiZWVuIGZpcmVkLg==" },
 
1155
          { "Demi-gods don't need any help from the gods.", 
 
1156
            "RGVtaS1nb2RzIGRvbid0IG5lZWQgYW55IGhlbHAgZnJvbSB0aGUgZ29kcy4=" },
 
1157
          { "Demons *HATE* Priests and Priestesses.", 
 
1158
            "RGVtb25zICpIQVRFKiBQcmllc3RzIGFuZCBQcmllc3Rlc3Nlcy4=" },
 
1159
          { "Didn't you forget to pay?", 
 
1160
            "RGlkbid0IHlvdSBmb3JnZXQgdG8gcGF5Pw==" },
 
1161
          { "Didn't your mother tell you not to eat food off the floor?", 
 
1162
            "RGlkbid0IHlvdXIgbW90aGVyIHRlbGwgeW91IG5vdCB0byBlYXQgZm9vZCBvZmYgdGhlIGZsb29yPw==" },
 
1163
          { "Direct a direct hit on your direct opponent, directing in the right direction.", 
 
1164
            "RGlyZWN0IGEgZGlyZWN0IGhpdCBvbiB5b3VyIGRpcmVjdCBvcHBvbmVudCwgZGlyZWN0aW5nIGluIHRoZSByaWdodCBkaXJlY3Rpb24u" },
 
1165
          { "Do you want to make more money? Sure, we all do! Join the Fort Ludios guard!", 
 
1166
            "RG8geW91IHdhbnQgdG8gbWFrZSBtb3JlIG1vbmV5PyBTdXJlLCB3ZSBhbGwgZG8hIEpvaW4gdGhlIEZvcnQgTHVkaW9zIGd1YXJkIQ==" },
 
1167
          { "Don't eat too much: you might start hiccoughing!", 
 
1168
            "RG9uJ3QgZWF0IHRvbyBtdWNoOiB5b3UgbWlnaHQgc3RhcnQgaGljY291Z2hpbmch" },
 
1169
          { "Don't play hack at your work; your boss might hit you!", 
 
1170
            "RG9uJ3QgcGxheSBoYWNrIGF0IHlvdXIgd29yazsgeW91ciBib3NzIG1pZ2h0IGhpdCB5b3Uh" },
 
1171
          { "Don't tell a soul you found a secret door, otherwise it isn't a secret anymore.", 
 
1172
            "RG9uJ3QgdGVsbCBhIHNvdWwgeW91IGZvdW5kIGEgc2VjcmV0IGRvb3IsIG90aGVyd2lzZSBpdCBpc24ndCBhIHNlY3JldCBhbnltb3JlLg==" },
 
1173
          { "Drinking potions of booze may land you in jail if you are under 21.", 
 
1174
            "RHJpbmtpbmcgcG90aW9ucyBvZiBib296ZSBtYXkgbGFuZCB5b3UgaW4gamFpbCBpZiB5b3UgYXJlIHVuZGVyIDIxLg==" },
 
1175
          { "Drop your vanity and get rid of your jewels! Pickpockets about!", 
 
1176
            "RHJvcCB5b3VyIHZhbml0eSBhbmQgZ2V0IHJpZCBvZiB5b3VyIGpld2VscyEgUGlja3BvY2tldHMgYWJvdXQh" },
 
1177
          { "Eat 10 cloves of garlic and keep all humans at a two-square distance.", 
 
1178
            "RWF0IDEwIGNsb3ZlcyBvZiBnYXJsaWMgYW5kIGtlZXAgYWxsIGh1bWFucyBhdCBhIHR3by1zcXVhcmUgZGlzdGFuY2Uu" },
 
1179
          { "Eels hide under mud. Use a unicorn to clear the water and make them visible.", 
 
1180
            "RWVscyBoaWRlIHVuZGVyIG11ZC4gVXNlIGEgdW5pY29ybiB0byBjbGVhciB0aGUgd2F0ZXIgYW5kIG1ha2UgdGhlbSB2aXNpYmxlLg==" },
 
1181
          { "Engrave your wishes with a wand of wishing.", 
 
1182
            "RW5ncmF2ZSB5b3VyIHdpc2hlcyB3aXRoIGEgd2FuZCBvZiB3aXNoaW5nLg==" },
 
1183
          { "Eventually you will come to admire the swift elegance of a retreating nymph.", 
 
1184
            "RXZlbnR1YWxseSB5b3Ugd2lsbCBjb21lIHRvIGFkbWlyZSB0aGUgc3dpZnQgZWxlZ2FuY2Ugb2YgYSByZXRyZWF0aW5nIG55bXBoLg==" },
 
1185
          { "Ever heard hissing outside? I *knew* you hadn't!", 
 
1186
            "RXZlciBoZWFyZCBoaXNzaW5nIG91dHNpZGU/IEkgKmtuZXcqIHlvdSBoYWRuJ3Qh" },
 
1187
          { "Ever lifted a dragon corpse?", 
 
1188
            "RXZlciBsaWZ0ZWQgYSBkcmFnb24gY29ycHNlPw==" },
 
1189
          { "Ever seen a leocrotta dancing the tengu?", 
 
1190
            "RXZlciBzZWVuIGEgbGVvY3JvdHRhIGRhbmNpbmcgdGhlIHRlbmd1Pw==" },
 
1191
          { "Ever seen your weapon glow plaid?", 
 
1192
            "RXZlciBzZWVuIHlvdXIgd2VhcG9uIGdsb3cgcGxhaWQ/" },
 
1193
          { "Ever tamed a shopkeeper?", 
 
1194
            "RXZlciB0YW1lZCBhIHNob3BrZWVwZXI/" },
 
1195
          { "Ever tried digging through a Vault Guard?", 
 
1196
            "RXZlciB0cmllZCBkaWdnaW5nIHRocm91Z2ggYSBWYXVsdCBHdWFyZD8=" },
 
1197
          { "Ever tried enchanting a rope?", 
 
1198
            "RXZlciB0cmllZCBlbmNoYW50aW5nIGEgcm9wZT8=" },
 
1199
          { "Floating eyes can't stand Hawaiian shirts.", 
 
1200
            "RmxvYXRpbmcgZXllcyBjYW4ndCBzdGFuZCBIYXdhaWlhbiBzaGlydHMu" },
 
1201
          { "For any remedy there is a misery.", 
 
1202
            "Rm9yIGFueSByZW1lZHkgdGhlcmUgaXMgYSBtaXNlcnku" },
 
1203
          { "Giant bats turn into giant vampires.", 
 
1204
            "R2lhbnQgYmF0cyB0dXJuIGludG8gZ2lhbnQgdmFtcGlyZXMu" },
 
1205
          { "Good day for overcoming obstacles. Try a steeplechase.", 
 
1206
            "R29vZCBkYXkgZm9yIG92ZXJjb21pbmcgb2JzdGFjbGVzLiBUcnkgYSBzdGVlcGxlY2hhc2Uu" },
 
1207
          { "Half Moon tonight. (At least it's better than no Moon at all.)", 
 
1208
            "SGFsZiBNb29uIHRvbmlnaHQuIChBdCBsZWFzdCBpdCdzIGJldHRlciB0aGFuIG5vIE1vb24gYXQgYWxsLik=" },
 
1209
          { "Help! I'm being held prisoner in a fortune cookie factory!", 
 
1210
            "SGVscCEgSSdtIGJlaW5nIGhlbGQgcHJpc29uZXIgaW4gYSBmb3J0dW5lIGNvb2tpZSBmYWN0b3J5IQ==" },
 
1211
          { "Housecats have nine lives, kittens only one.", 
 
1212
            "SG91c2VjYXRzIGhhdmUgbmluZSBsaXZlcywga2l0dGVucyBvbmx5IG9uZS4=" },
 
1213
          { "How long can you tread water?", 
 
1214
            "SG93IGxvbmcgY2FuIHlvdSB0cmVhZCB3YXRlcj8=" },
 
1215
          { "Hungry? There is an abundance of food on the next level.", 
 
1216
            "SHVuZ3J5PyBUaGVyZSBpcyBhbiBhYnVuZGFuY2Ugb2YgZm9vZCBvbiB0aGUgbmV4dCBsZXZlbC4=" },
 
1217
          { "I guess you've never hit a mail daemon with the Amulet of Yendor...", 
 
1218
            "SSBndWVzcyB5b3UndmUgbmV2ZXIgaGl0IGEgbWFpbCBkYWVtb24gd2l0aCB0aGUgQW11bGV0IG9mIFllbmRvci4uLg==" },
 
1219
          { "If you are the shopkeeper, you can take things for free.", 
 
1220
            "SWYgeW91IGFyZSB0aGUgc2hvcGtlZXBlciwgeW91IGNhbiB0YWtlIHRoaW5ncyBmb3IgZnJlZS4=" },
 
1221
          { "If you can't learn to do it well, learn to enjoy doing it badly.", 
 
1222
            "SWYgeW91IGNhbid0IGxlYXJuIHRvIGRvIGl0IHdlbGwsIGxlYXJuIHRvIGVuam95IGRvaW5nIGl0IGJhZGx5Lg==" },
 
1223
          { "If you thought the Wizard was bad, just wait till you meet the Warlord!", 
 
1224
            "SWYgeW91IHRob3VnaHQgdGhlIFdpemFyZCB3YXMgYmFkLCBqdXN0IHdhaXQgdGlsbCB5b3UgbWVldCB0aGUgV2FybG9yZCE=" },
 
1225
          { "If you turn blind, don't expect your dog to be turned into a seeing-eye dog.", 
 
1226
            "SWYgeW91IHR1cm4gYmxpbmQsIGRvbid0IGV4cGVjdCB5b3VyIGRvZyB0byBiZSB0dXJuZWQgaW50byBhIHNlZWluZy1leWUgZG9nLg==" },
 
1227
          { "If you want to feel great, you must eat something real big.", 
 
1228
            "SWYgeW91IHdhbnQgdG8gZmVlbCBncmVhdCwgeW91IG11c3QgZWF0IHNvbWV0aGluZyByZWFsIGJpZy4=" },
 
1229
          { "If you want to float, you'd better eat a floating eye.", 
 
1230
            "SWYgeW91IHdhbnQgdG8gZmxvYXQsIHlvdSdkIGJldHRlciBlYXQgYSBmbG9hdGluZyBleWUu" },
 
1231
          { "If your ghost kills a player, it increases your score.", 
 
1232
            "SWYgeW91ciBnaG9zdCBraWxscyBhIHBsYXllciwgaXQgaW5jcmVhc2VzIHlvdXIgc2NvcmUu" },
 
1233
          { "Increase mindpower: Tame your own ghost!", 
 
1234
            "SW5jcmVhc2UgbWluZHBvd2VyOiBUYW1lIHlvdXIgb3duIGdob3N0IQ==" },
 
1235
          { "It furthers one to see the great man.", 
 
1236
            "SXQgZnVydGhlcnMgb25lIHRvIHNlZSB0aGUgZ3JlYXQgbWFuLg==" },
 
1237
          { "It's easy to overlook a monster in a wood.", 
 
1238
            "SXQncyBlYXN5IHRvIG92ZXJsb29rIGEgbW9uc3RlciBpbiBhIHdvb2Qu" },
 
1239
          { "Just below any trapdoor there may be another one. Just keep falling!", 
 
1240
            "SnVzdCBiZWxvdyBhbnkgdHJhcGRvb3IgdGhlcmUgbWF5IGJlIGFub3RoZXIgb25lLiBKdXN0IGtlZXAgZmFsbGluZyE=" },
 
1241
          { "Katanas are very sharp; watch you don't cut yourself.", 
 
1242
            "S2F0YW5hcyBhcmUgdmVyeSBzaGFycDsgd2F0Y2ggeW91IGRvbid0IGN1dCB5b3Vyc2VsZi4=" },
 
1243
          { "Keep a clear mind: quaff clear potions.", 
 
1244
            "S2VlcCBhIGNsZWFyIG1pbmQ6IHF1YWZmIGNsZWFyIHBvdGlvbnMu" },
 
1245
          { "Kicking the terminal doesn't hurt the monsters.", 
 
1246
            "S2lja2luZyB0aGUgdGVybWluYWwgZG9lc24ndCBodXJ0IHRoZSBtb25zdGVycy4=" },
 
1247
          { "Killer bees keep appearing till you kill their queen.", 
 
1248
            "S2lsbGVyIGJlZXMga2VlcCBhcHBlYXJpbmcgdGlsbCB5b3Uga2lsbCB0aGVpciBxdWVlbi4=" },
 
1249
          { "Killer bunnies can be tamed with carrots only.", 
 
1250
            "S2lsbGVyIGJ1bm5pZXMgY2FuIGJlIHRhbWVkIHdpdGggY2Fycm90cyBvbmx5Lg==" },
 
1251
          { "Latest news? Put `rec.games.roguelike.nethack' in your .newsrc!", 
 
1252
            "TGF0ZXN0IG5ld3M/IFB1dCBgcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrJyBpbiB5b3VyIC5uZXdzcmMh" },
 
1253
          { "Learn how to spell. Play NetHack!", 
 
1254
            "TGVhcm4gaG93IHRvIHNwZWxsLiBQbGF5IE5ldEhhY2sh" },
 
1255
          { "Leprechauns hide their gold in a secret room.", 
 
1256
            "TGVwcmVjaGF1bnMgaGlkZSB0aGVpciBnb2xkIGluIGEgc2VjcmV0IHJvb20u" },
 
1257
          { "Let your fingers do the walking on the yulkjhnb keys.", 
 
1258
            "TGV0IHlvdXIgZmluZ2VycyBkbyB0aGUgd2Fsa2luZyBvbiB0aGUgeXVsa2pobmIga2V5cy4=" },
 
1259
          { "Let's face it: this time you're not going to win.", 
 
1260
            "TGV0J3MgZmFjZSBpdDogdGhpcyB0aW1lIHlvdSdyZSBub3QgZ29pbmcgdG8gd2luLg==" },
 
1261
          { "Let's have a party, drink a lot of booze.", 
 
1262
            "TGV0J3MgaGF2ZSBhIHBhcnR5LCBkcmluayBhIGxvdCBvZiBib296ZS4=" },
 
1263
          { "Liquor sellers do not drink; they hate to see you twice.", 
 
1264
            "TGlxdW9yIHNlbGxlcnMgZG8gbm90IGRyaW5rOyB0aGV5IGhhdGUgdG8gc2VlIHlvdSB0d2ljZS4=" },
 
1265
          { "Lunar eclipse tonight. May as well quit now!", 
 
1266
            "THVuYXIgZWNsaXBzZSB0b25pZ2h0LiBNYXkgYXMgd2VsbCBxdWl0IG5vdyE=" },
 
1267
          { "Meeting your own ghost decreases your luck considerably!", 
 
1268
            "TWVldGluZyB5b3VyIG93biBnaG9zdCBkZWNyZWFzZXMgeW91ciBsdWNrIGNvbnNpZGVyYWJseSE=" },
 
1269
          { "Money to invest? Take it to the local branch of the Magic Memory Vault!", 
 
1270
            "TW9uZXkgdG8gaW52ZXN0PyBUYWtlIGl0IHRvIHRoZSBsb2NhbCBicmFuY2ggb2YgdGhlIE1hZ2ljIE1lbW9yeSBWYXVsdCE=" },
 
1271
          { "Monsters come from nowhere to hit you everywhere.", 
 
1272
            "TW9uc3RlcnMgY29tZSBmcm9tIG5vd2hlcmUgdG8gaGl0IHlvdSBldmVyeXdoZXJlLg==" },
 
1273
          { "Monsters sleep because you are boring, not because they ever get tired.", 
 
1274
            "TW9uc3RlcnMgc2xlZXAgYmVjYXVzZSB5b3UgYXJlIGJvcmluZywgbm90IGJlY2F1c2UgdGhleSBldmVyIGdldCB0aXJlZC4=" },
 
1275
          { "Most monsters prefer minced meat. That's why they are hitting you!", 
 
1276
            "TW9zdCBtb25zdGVycyBwcmVmZXIgbWluY2VkIG1lYXQuIFRoYXQncyB3aHkgdGhleSBhcmUgaGl0dGluZyB5b3Uh" },
 
1277
          { "Most of the bugs in NetHack are on the floor.", 
 
1278
            "TW9zdCBvZiB0aGUgYnVncyBpbiBOZXRIYWNrIGFyZSBvbiB0aGUgZmxvb3Iu" },
 
1279
          { "Much ado Nothing Happens.", 
 
1280
            "TXVjaCBhZG8gTm90aGluZyBIYXBwZW5zLg==" },
 
1281
          { "Multi-player NetHack is a myth.", 
 
1282
            "TXVsdGktcGxheWVyIE5ldEhhY2sgaXMgYSBteXRoLg==" },
 
1283
          { "NetHack is addictive. Too late, you're already hooked.", 
 
1284
            "TmV0SGFjayBpcyBhZGRpY3RpdmUuIFRvbyBsYXRlLCB5b3UncmUgYWxyZWFkeSBob29rZWQu" },
 
1285
          { "Never ask a shopkeeper for a price list.", 
 
1286
            "TmV2ZXIgYXNrIGEgc2hvcGtlZXBlciBmb3IgYSBwcmljZSBsaXN0Lg==" },
 
1287
          { "Never burn a tree, unless you like getting whacked with a +5 shovel.", 
 
1288
            "TmV2ZXIgYnVybiBhIHRyZWUsIHVubGVzcyB5b3UgbGlrZSBnZXR0aW5nIHdoYWNrZWQgd2l0aCBhICs1IHNob3ZlbC4=" },
 
1289
          { "Never eat with glowing hands!", 
 
1290
            "TmV2ZXIgZWF0IHdpdGggZ2xvd2luZyBoYW5kcyE=" },
 
1291
          { "Never mind the monsters hitting you: they just replace the charwomen.", 
 
1292
            "TmV2ZXIgbWluZCB0aGUgbW9uc3RlcnMgaGl0dGluZyB5b3U6IHRoZXkganVzdCByZXBsYWNlIHRoZSBjaGFyd29tZW4u" },
 
1293
          { "Never play leapfrog with a unicorn.", 
 
1294
            "TmV2ZXIgcGxheSBsZWFwZnJvZyB3aXRoIGEgdW5pY29ybi4=" },
 
1295
          { "Never step on a cursed engraving.", 
 
1296
            "TmV2ZXIgc3RlcCBvbiBhIGN1cnNlZCBlbmdyYXZpbmcu" },
 
1297
          { "Never swim with a camera: there's nothing to take pictures of.", 
 
1298
            "TmV2ZXIgc3dpbSB3aXRoIGEgY2FtZXJhOiB0aGVyZSdzIG5vdGhpbmcgdG8gdGFrZSBwaWN0dXJlcyBvZi4=" },
 
1299
          { "Never teach your pet rust monster to fetch.", 
 
1300
            "TmV2ZXIgdGVhY2ggeW91ciBwZXQgcnVzdCBtb25zdGVyIHRvIGZldGNoLg==" },
 
1301
          { "Never trust a random generator in magic fields.", 
 
1302
            "TmV2ZXIgdHJ1c3QgYSByYW5kb20gZ2VuZXJhdG9yIGluIG1hZ2ljIGZpZWxkcy4=" },
 
1303
          { "Never use a wand of death.", 
 
1304
            "TmV2ZXIgdXNlIGEgd2FuZCBvZiBkZWF0aC4=" },
 
1305
          { "No level contains two shops. The maze is no level. So...", 
 
1306
            "Tm8gbGV2ZWwgY29udGFpbnMgdHdvIHNob3BzLiBUaGUgbWF6ZSBpcyBubyBsZXZlbC4gU28uLi4=" },
 
1307
          { "No part of this fortune may be reproduced, stored in a retrieval system, ...", 
 
1308
            "Tm8gcGFydCBvZiB0aGlzIGZvcnR1bmUgbWF5IGJlIHJlcHJvZHVjZWQsIHN0b3JlZCBpbiBhIHJldHJpZXZhbCBzeXN0ZW0sIC4uLg==" },
 
1309
          { "Not all rumors are as misleading as this one.", 
 
1310
            "Tm90IGFsbCBydW1vcnMgYXJlIGFzIG1pc2xlYWRpbmcgYXMgdGhpcyBvbmUu" },
 
1311
          { "Nymphs and nurses like beautiful rings.", 
 
1312
            "TnltcGhzIGFuZCBudXJzZXMgbGlrZSBiZWF1dGlmdWwgcmluZ3Mu" },
 
1313
          { "Nymphs are blondes. Are you a gentleman?", 
 
1314
            "TnltcGhzIGFyZSBibG9uZGVzLiBBcmUgeW91IGEgZ2VudGxlbWFuPw==" },
 
1315
          { "Offering a unicorn a worthless piece of glass might prove to be fatal!", 
 
1316
            "T2ZmZXJpbmcgYSB1bmljb3JuIGEgd29ydGhsZXNzIHBpZWNlIG9mIGdsYXNzIG1pZ2h0IHByb3ZlIHRvIGJlIGZhdGFsIQ==" },
 
1317
          { "Old hackers never die: young ones do.", 
 
1318
            "T2xkIGhhY2tlcnMgbmV2ZXIgZGllOiB5b3VuZyBvbmVzIGRvLg==" },
 
1319
          { "One has to leave shops before closing time.", 
 
1320
            "T25lIGhhcyB0byBsZWF2ZSBzaG9wcyBiZWZvcmUgY2xvc2luZyB0aW1lLg==" },
 
1321
          { "One homunculus a day keeps the doctor away.", 
 
1322
            "T25lIGhvbXVuY3VsdXMgYSBkYXkga2VlcHMgdGhlIGRvY3RvciBhd2F5Lg==" },
 
1323
          { "One level further down somebody is getting killed, right now.", 
 
1324
            "T25lIGxldmVsIGZ1cnRoZXIgZG93biBzb21lYm9keSBpcyBnZXR0aW5nIGtpbGxlZCwgcmlnaHQgbm93Lg==" },
 
1325
          { "Only a wizard can use a magic whistle.", 
 
1326
            "T25seSBhIHdpemFyZCBjYW4gdXNlIGEgbWFnaWMgd2hpc3RsZS4=" },
 
1327
          { "Only adventurers of evil alignment think of killing their dog.", 
 
1328
            "T25seSBhZHZlbnR1cmVycyBvZiBldmlsIGFsaWdubWVudCB0aGluayBvZiBraWxsaW5nIHRoZWlyIGRvZy4=" },
 
1329
          { "Only chaotic evils kill sleeping monsters.", 
 
1330
            "T25seSBjaGFvdGljIGV2aWxzIGtpbGwgc2xlZXBpbmcgbW9uc3RlcnMu" },
 
1331
          { "Only real trappers escape traps.", 
 
1332
            "T25seSByZWFsIHRyYXBwZXJzIGVzY2FwZSB0cmFwcy4=" },
 
1333
          { "Only real wizards can write scrolls.", 
 
1334
            "T25seSByZWFsIHdpemFyZHMgY2FuIHdyaXRlIHNjcm9sbHMu" },
 
1335
          { "Operation OVERKILL has started now.", 
 
1336
            "T3BlcmF0aW9uIE9WRVJLSUxMIGhhcyBzdGFydGVkIG5vdy4=" },
 
1337
          { "PLEASE ignore previous rumor.", 
 
1338
            "UExFQVNFIGlnbm9yZSBwcmV2aW91cyBydW1vci4=" },
 
1339
          { "Polymorph into an ettin; meet your opponents face to face to face.", 
 
1340
            "UG9seW1vcnBoIGludG8gYW4gZXR0aW47IG1lZXQgeW91ciBvcHBvbmVudHMgZmFjZSB0byBmYWNlIHRvIGZhY2Uu" },
 
1341
          { "Praying will frighten demons.", 
 
1342
            "UHJheWluZyB3aWxsIGZyaWdodGVuIGRlbW9ucy4=" },
 
1343
          { "Row (3x) that boat gently down the stream, Charon (4x), death is but a dream.", 
 
1344
            "Um93ICgzeCkgdGhhdCBib2F0IGdlbnRseSBkb3duIHRoZSBzdHJlYW0sIENoYXJvbiAoNHgpLCBkZWF0aCBpcyBidXQgYSBkcmVhbS4=" },
 
1345
          { "Running is good for your legs.", 
 
1346
            "UnVubmluZyBpcyBnb29kIGZvciB5b3VyIGxlZ3Mu" },
 
1347
          { "Screw up your courage! You've screwed up everything else.", 
 
1348
            "U2NyZXcgdXAgeW91ciBjb3VyYWdlISBZb3UndmUgc2NyZXdlZCB1cCBldmVyeXRoaW5nIGVsc2Uu" },
 
1349
          { "Seepage? Leaky pipes? Rising damp? Summon the plumber!", 
 
1350
            "U2VlcGFnZT8gTGVha3kgcGlwZXM/IFJpc2luZyBkYW1wPyBTdW1tb24gdGhlIHBsdW1iZXIh" },
 
1351
          { "Segmentation fault (core dumped).", 
 
1352
            "U2VnbWVudGF0aW9uIGZhdWx0IChjb3JlIGR1bXBlZCku" },
 
1353
          { "Shopkeepers sometimes die from old age.", 
 
1354
            "U2hvcGtlZXBlcnMgc29tZXRpbWVzIGRpZSBmcm9tIG9sZCBhZ2Uu" },
 
1355
          { "Some mazes (especially small ones) have no solutions, says man 6 maze.", 
 
1356
            "U29tZSBtYXplcyAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBoYXZlIG5vIHNvbHV0aW9ucywgc2F5cyBtYW4gNiBtYXplLg==" },
 
1357
          { "Some questions the Sphynx asks just *don't* have any answers.", 
 
1358
            "U29tZSBxdWVzdGlvbnMgdGhlIFNwaHlueCBhc2tzIGp1c3QgKmRvbid0KiBoYXZlIGFueSBhbnN3ZXJzLg==" },
 
1359
          { "Sometimes \"mu\" is the answer.", 
 
1360
            "U29tZXRpbWVzICJtdSIgaXMgdGhlIGFuc3dlci4=" },
 
1361
          { "Sorry, no fortune this time. Better luck next cookie!", 
 
1362
            "U29ycnksIG5vIGZvcnR1bmUgdGhpcyB0aW1lLiBCZXR0ZXIgbHVjayBuZXh0IGNvb2tpZSE=" },
 
1363
          { "Spare your scrolls of make-edible until it's really necessary!", 
 
1364
            "U3BhcmUgeW91ciBzY3JvbGxzIG9mIG1ha2UtZWRpYmxlIHVudGlsIGl0J3MgcmVhbGx5IG5lY2Vzc2FyeSE=" },
 
1365
          { "Suddenly, the dungeon will collapse...", 
 
1366
            "U3VkZGVubHksIHRoZSBkdW5nZW9uIHdpbGwgY29sbGFwc2UuLi4=" },
 
1367
          { "Taming a mail daemon may cause a system security violation.", 
 
1368
            "VGFtaW5nIGEgbWFpbCBkYWVtb24gbWF5IGNhdXNlIGEgc3lzdGVtIHNlY3VyaXR5IHZpb2xhdGlvbi4=" },
 
1369
          { "The crowd was so tough, the Stooges won't play the Dungeon anymore, nyuk nyuk.", 
 
1370
            "VGhlIGNyb3dkIHdhcyBzbyB0b3VnaCwgdGhlIFN0b29nZXMgd29uJ3QgcGxheSB0aGUgRHVuZ2VvbiBhbnltb3JlLCBueXVrIG55dWsu" },
 
1371
          { "The leprechauns hide their treasure in a small hidden room.", 
 
1372
            "VGhlIGxlcHJlY2hhdW5zIGhpZGUgdGhlaXIgdHJlYXN1cmUgaW4gYSBzbWFsbCBoaWRkZW4gcm9vbS4=" },
 
1373
          { "The longer the wand the better.", 
 
1374
            "VGhlIGxvbmdlciB0aGUgd2FuZCB0aGUgYmV0dGVyLg==" },
 
1375
          { "The magic word is \"XYZZY\".", 
 
1376
            "VGhlIG1hZ2ljIHdvcmQgaXMgIlhZWlpZIi4=" },
 
1377
          { "The meek shall inherit your bones files.", 
 
1378
            "VGhlIG1lZWsgc2hhbGwgaW5oZXJpdCB5b3VyIGJvbmVzIGZpbGVzLg==" },
 
1379
          { "The mines are dark and deep, and I have levels to go before I sleep.", 
 
1380
            "VGhlIG1pbmVzIGFyZSBkYXJrIGFuZCBkZWVwLCBhbmQgSSBoYXZlIGxldmVscyB0byBnbyBiZWZvcmUgSSBzbGVlcC4=" },
 
1381
          { "The use of dynamite is dangerous.", 
 
1382
            "VGhlIHVzZSBvZiBkeW5hbWl0ZSBpcyBkYW5nZXJvdXMu" },
 
1383
          { "There are no worms in the UNIX version.", 
 
1384
            "VGhlcmUgYXJlIG5vIHdvcm1zIGluIHRoZSBVTklYIHZlcnNpb24u" },
 
1385
          { "There is a trap on this level!", 
 
1386
            "VGhlcmUgaXMgYSB0cmFwIG9uIHRoaXMgbGV2ZWwh" },
 
1387
          { "They say that Demogorgon, Asmodeus, Orcus, Yeenoghu & Juiblex is no law firm.", 
 
1388
            "VGhleSBzYXkgdGhhdCBEZW1vZ29yZ29uLCBBc21vZGV1cywgT3JjdXMsIFllZW5vZ2h1ICYgSnVpYmxleCBpcyBubyBsYXcgZmlybS4=" },
 
1389
          { "They say that Geryon has an evil twin, beware!", 
 
1390
            "VGhleSBzYXkgdGhhdCBHZXJ5b24gaGFzIGFuIGV2aWwgdHdpbiwgYmV3YXJlIQ==" },
 
1391
          { "They say that Medusa would make a terrible pet.", 
 
1392
            "VGhleSBzYXkgdGhhdCBNZWR1c2Egd291bGQgbWFrZSBhIHRlcnJpYmxlIHBldC4=" },
 
1393
          { "They say that NetHack bugs are Seldon planned.", 
 
1394
            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGJ1Z3MgYXJlIFNlbGRvbiBwbGFubmVkLg==" },
 
1395
          { "They say that NetHack comes in 256 flavors.", 
 
1396
            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGNvbWVzIGluIDI1NiBmbGF2b3JzLg==" },
 
1397
          { "They say that NetHack is just a computer game.", 
 
1398
            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIGp1c3QgYSBjb21wdXRlciBnYW1lLg==" },
 
1399
          { "They say that NetHack is more than just a computer game.", 
 
1400
            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG1vcmUgdGhhbiBqdXN0IGEgY29tcHV0ZXIgZ2FtZS4=" },
 
1401
          { "They say that NetHack is never what it used to be.", 
 
1402
            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG5ldmVyIHdoYXQgaXQgdXNlZCB0byBiZS4=" },
 
1403
          { "They say that a baby dragon is too small to hurt or help you.", 
 
1404
            "VGhleSBzYXkgdGhhdCBhIGJhYnkgZHJhZ29uIGlzIHRvbyBzbWFsbCB0byBodXJ0IG9yIGhlbHAgeW91Lg==" },
 
1405
          { "They say that a black pudding is simply a brown pudding gone bad.", 
 
1406
            "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHB1ZGRpbmcgaXMgc2ltcGx5IGEgYnJvd24gcHVkZGluZyBnb25lIGJhZC4=" },
 
1407
          { "They say that a black sheep has 3 bags full of wool.", 
 
1408
            "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHNoZWVwIGhhcyAzIGJhZ3MgZnVsbCBvZiB3b29sLg==" },
 
1409
          { "They say that a blank scroll is like a blank check.", 
 
1410
            "VGhleSBzYXkgdGhhdCBhIGJsYW5rIHNjcm9sbCBpcyBsaWtlIGEgYmxhbmsgY2hlY2su" },
 
1411
          { "They say that a cat named Morris has nine lives.", 
 
1412
            "VGhleSBzYXkgdGhhdCBhIGNhdCBuYW1lZCBNb3JyaXMgaGFzIG5pbmUgbGl2ZXMu" },
 
1413
          { "They say that a desperate shopper might pay any price in a shop.", 
 
1414
            "VGhleSBzYXkgdGhhdCBhIGRlc3BlcmF0ZSBzaG9wcGVyIG1pZ2h0IHBheSBhbnkgcHJpY2UgaW4gYSBzaG9wLg==" },
 
1415
          { "They say that a diamond dog is everybody's best friend.", 
 
1416
            "VGhleSBzYXkgdGhhdCBhIGRpYW1vbmQgZG9nIGlzIGV2ZXJ5Ym9keSdzIGJlc3QgZnJpZW5kLg==" },
 
1417
          { "They say that a dwarf lord can carry a pick-axe because his armor is light.", 
 
1418
            "VGhleSBzYXkgdGhhdCBhIGR3YXJmIGxvcmQgY2FuIGNhcnJ5IGEgcGljay1heGUgYmVjYXVzZSBoaXMgYXJtb3IgaXMgbGlnaHQu" },
 
1419
          { "They say that a floating eye can defeat Medusa.", 
 
1420
            "VGhleSBzYXkgdGhhdCBhIGZsb2F0aW5nIGV5ZSBjYW4gZGVmZWF0IE1lZHVzYS4=" },
 
1421
          { "They say that a fortune only has 1 line and you can't read between it.", 
 
1422
            "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lIGFuZCB5b3UgY2FuJ3QgcmVhZCBiZXR3ZWVuIGl0Lg==" },
 
1423
          { "They say that a fortune only has 1 line, but you can read between it.", 
 
1424
            "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lLCBidXQgeW91IGNhbiByZWFkIGJldHdlZW4gaXQu" },
 
1425
          { "They say that a fountain looks nothing like a regularly erupting geyser.", 
 
1426
            "VGhleSBzYXkgdGhhdCBhIGZvdW50YWluIGxvb2tzIG5vdGhpbmcgbGlrZSBhIHJlZ3VsYXJseSBlcnVwdGluZyBnZXlzZXIu" },
 
1427
          { "They say that a gold doubloon is worth more than its weight in gold.", 
 
1428
            "VGhleSBzYXkgdGhhdCBhIGdvbGQgZG91Ymxvb24gaXMgd29ydGggbW9yZSB0aGFuIGl0cyB3ZWlnaHQgaW4gZ29sZC4=" },
 
1429
          { "They say that a grid bug won't pay a shopkeeper for zapping you in a shop.", 
 
1430
            "VGhleSBzYXkgdGhhdCBhIGdyaWQgYnVnIHdvbid0IHBheSBhIHNob3BrZWVwZXIgZm9yIHphcHBpbmcgeW91IGluIGEgc2hvcC4=" },
 
1431
          { "They say that a gypsy could tell your fortune for a price.", 
 
1432
            "VGhleSBzYXkgdGhhdCBhIGd5cHN5IGNvdWxkIHRlbGwgeW91ciBmb3J0dW5lIGZvciBhIHByaWNlLg==" },
 
1433
          { "They say that a hacker named Alice once level teleported by using a mirror.", 
 
1434
            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBBbGljZSBvbmNlIGxldmVsIHRlbGVwb3J0ZWQgYnkgdXNpbmcgYSBtaXJyb3Iu" },
 
1435
          { "They say that a hacker named David once slew a giant with a sling and a rock.", 
 
1436
            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEYXZpZCBvbmNlIHNsZXcgYSBnaWFudCB3aXRoIGEgc2xpbmcgYW5kIGEgcm9jay4=" },
 
1437
          { "They say that a hacker named Dorothy once rode a fog cloud to Oz.", 
 
1438
            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEb3JvdGh5IG9uY2Ugcm9kZSBhIGZvZyBjbG91ZCB0byBPei4=" },
 
1439
          { "They say that a hacker named Mary once lost a white sheep in the mazes.", 
 
1440
            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBNYXJ5IG9uY2UgbG9zdCBhIHdoaXRlIHNoZWVwIGluIHRoZSBtYXplcy4=" },
 
1441
          { "They say that a helm of brilliance is not to be taken lightly.", 
 
1442
            "VGhleSBzYXkgdGhhdCBhIGhlbG0gb2YgYnJpbGxpYW5jZSBpcyBub3QgdG8gYmUgdGFrZW4gbGlnaHRseS4=" },
 
1443
          { "They say that a hot dog and a hell hound are the same thing.", 
 
1444
            "VGhleSBzYXkgdGhhdCBhIGhvdCBkb2cgYW5kIGEgaGVsbCBob3VuZCBhcmUgdGhlIHNhbWUgdGhpbmcu" },
 
1445
          { "They say that a lamp named Aladdin's Lamp contains a djinni with 3 wishes.", 
 
1446
            "VGhleSBzYXkgdGhhdCBhIGxhbXAgbmFtZWQgQWxhZGRpbidzIExhbXAgY29udGFpbnMgYSBkamlubmkgd2l0aCAzIHdpc2hlcy4=" },
 
1447
          { "They say that a large dog named Lassie will lead you to the amulet.", 
 
1448
            "VGhleSBzYXkgdGhhdCBhIGxhcmdlIGRvZyBuYW1lZCBMYXNzaWUgd2lsbCBsZWFkIHlvdSB0byB0aGUgYW11bGV0Lg==" },
 
1449
          { "They say that a long sword is not a light sword.", 
 
1450
            "VGhleSBzYXkgdGhhdCBhIGxvbmcgc3dvcmQgaXMgbm90IGEgbGlnaHQgc3dvcmQu" },
 
1451
          { "They say that a manes won't mince words with you.", 
 
1452
            "VGhleSBzYXkgdGhhdCBhIG1hbmVzIHdvbid0IG1pbmNlIHdvcmRzIHdpdGggeW91Lg==" },
 
1453
          { "They say that a mind is a terrible thing to waste.", 
 
1454
            "VGhleSBzYXkgdGhhdCBhIG1pbmQgaXMgYSB0ZXJyaWJsZSB0aGluZyB0byB3YXN0ZS4=" },
 
1455
          { "They say that a plain nymph will only wear a wire ring in one ear.", 
 
1456
            "VGhleSBzYXkgdGhhdCBhIHBsYWluIG55bXBoIHdpbGwgb25seSB3ZWFyIGEgd2lyZSByaW5nIGluIG9uZSBlYXIu" },
 
1457
          { "They say that a plumed hat could be a previously used crested helmet.", 
 
1458
            "VGhleSBzYXkgdGhhdCBhIHBsdW1lZCBoYXQgY291bGQgYmUgYSBwcmV2aW91c2x5IHVzZWQgY3Jlc3RlZCBoZWxtZXQu" },
 
1459
          { "They say that a potion of oil is difficult to grasp.", 
 
1460
            "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiBvaWwgaXMgZGlmZmljdWx0IHRvIGdyYXNwLg==" },
 
1461
          { "They say that a potion of yogurt is a cancelled potion of sickness.", 
 
1462
            "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiB5b2d1cnQgaXMgYSBjYW5jZWxsZWQgcG90aW9uIG9mIHNpY2tuZXNzLg==" },
 
1463
          { "They say that a purple worm is not a baby purple dragon.", 
 
1464
            "VGhleSBzYXkgdGhhdCBhIHB1cnBsZSB3b3JtIGlzIG5vdCBhIGJhYnkgcHVycGxlIGRyYWdvbi4=" },
 
1465
          { "They say that a quivering blob tastes different than a gelatinous cube.", 
 
1466
            "VGhleSBzYXkgdGhhdCBhIHF1aXZlcmluZyBibG9iIHRhc3RlcyBkaWZmZXJlbnQgdGhhbiBhIGdlbGF0aW5vdXMgY3ViZS4=" },
 
1467
          { "They say that a runed broadsword named Stormbringer attracts vortices.", 
 
1468
            "VGhleSBzYXkgdGhhdCBhIHJ1bmVkIGJyb2Fkc3dvcmQgbmFtZWQgU3Rvcm1icmluZ2VyIGF0dHJhY3RzIHZvcnRpY2VzLg==" },
 
1469
          { "They say that a scroll of summoning has other names.", 
 
1470
            "VGhleSBzYXkgdGhhdCBhIHNjcm9sbCBvZiBzdW1tb25pbmcgaGFzIG90aGVyIG5hbWVzLg==" },
 
1471
          { "They say that a shaman can bestow blessings but usually doesn't.", 
 
1472
            "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiBjYW4gYmVzdG93IGJsZXNzaW5ncyBidXQgdXN1YWxseSBkb2Vzbid0Lg==" },
 
1473
          { "They say that a shaman will bless you for an eye of newt and wing of bat.", 
 
1474
            "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiB3aWxsIGJsZXNzIHlvdSBmb3IgYW4gZXllIG9mIG5ld3QgYW5kIHdpbmcgb2YgYmF0Lg==" },
 
1475
          { "They say that a shimmering gold shield is not a polished silver shield.", 
 
1476
            "VGhleSBzYXkgdGhhdCBhIHNoaW1tZXJpbmcgZ29sZCBzaGllbGQgaXMgbm90IGEgcG9saXNoZWQgc2lsdmVyIHNoaWVsZC4=" },
 
1477
          { "They say that a spear will hit a neo-otyugh. (Do YOU know what that is?)", 
 
1478
            "VGhleSBzYXkgdGhhdCBhIHNwZWFyIHdpbGwgaGl0IGEgbmVvLW90eXVnaC4gKERvIFlPVSBrbm93IHdoYXQgdGhhdCBpcz8p" },
 
1479
          { "They say that a spotted dragon is the ultimate shape changer.", 
 
1480
            "VGhleSBzYXkgdGhhdCBhIHNwb3R0ZWQgZHJhZ29uIGlzIHRoZSB1bHRpbWF0ZSBzaGFwZSBjaGFuZ2VyLg==" },
 
1481
          { "They say that a stethoscope is no good if you can only hear your heartbeat.", 
 
1482
            "VGhleSBzYXkgdGhhdCBhIHN0ZXRob3Njb3BlIGlzIG5vIGdvb2QgaWYgeW91IGNhbiBvbmx5IGhlYXIgeW91ciBoZWFydGJlYXQu" },
 
1483
          { "They say that a succubus named Suzy will sometimes warn you of danger.", 
 
1484
            "VGhleSBzYXkgdGhhdCBhIHN1Y2N1YnVzIG5hbWVkIFN1enkgd2lsbCBzb21ldGltZXMgd2FybiB5b3Ugb2YgZGFuZ2VyLg==" },
 
1485
          { "They say that a wand of cancellation is not like a wand of polymorph.", 
 
1486
            "VGhleSBzYXkgdGhhdCBhIHdhbmQgb2YgY2FuY2VsbGF0aW9uIGlzIG5vdCBsaWtlIGEgd2FuZCBvZiBwb2x5bW9ycGgu" },
 
1487
          { "They say that a wood golem named Pinocchio would be easy to control.", 
 
1488
            "VGhleSBzYXkgdGhhdCBhIHdvb2QgZ29sZW0gbmFtZWQgUGlub2NjaGlvIHdvdWxkIGJlIGVhc3kgdG8gY29udHJvbC4=" },
 
1489
          { "They say that after killing a dragon it's time for a change of scenery.", 
 
1490
            "VGhleSBzYXkgdGhhdCBhZnRlciBraWxsaW5nIGEgZHJhZ29uIGl0J3MgdGltZSBmb3IgYSBjaGFuZ2Ugb2Ygc2NlbmVyeS4=" },
 
1491
          { "They say that an amulet of strangulation is worse than ring around the collar.", 
 
1492
            "VGhleSBzYXkgdGhhdCBhbiBhbXVsZXQgb2Ygc3RyYW5ndWxhdGlvbiBpcyB3b3JzZSB0aGFuIHJpbmcgYXJvdW5kIHRoZSBjb2xsYXIu" },
 
1493
          { "They say that an attic is the best place to hide your toys.", 
 
1494
            "VGhleSBzYXkgdGhhdCBhbiBhdHRpYyBpcyB0aGUgYmVzdCBwbGFjZSB0byBoaWRlIHlvdXIgdG95cy4=" },
 
1495
          { "They say that an axe named Cleaver once belonged to a hacker named Beaver.", 
 
1496
            "VGhleSBzYXkgdGhhdCBhbiBheGUgbmFtZWQgQ2xlYXZlciBvbmNlIGJlbG9uZ2VkIHRvIGEgaGFja2VyIG5hbWVkIEJlYXZlci4=" },
 
1497
          { "They say that an eye of newt and a wing of bat are double the trouble.", 
 
1498
            "VGhleSBzYXkgdGhhdCBhbiBleWUgb2YgbmV3dCBhbmQgYSB3aW5nIG9mIGJhdCBhcmUgZG91YmxlIHRoZSB0cm91YmxlLg==" },
 
1499
          { "They say that an incubus named Izzy sometimes makes women feel sensitive.", 
 
1500
            "VGhleSBzYXkgdGhhdCBhbiBpbmN1YnVzIG5hbWVkIEl6enkgc29tZXRpbWVzIG1ha2VzIHdvbWVuIGZlZWwgc2Vuc2l0aXZlLg==" },
 
1501
          { "They say that an opulent throne room is rarely a place to wish you'd be in.", 
 
1502
            "VGhleSBzYXkgdGhhdCBhbiBvcHVsZW50IHRocm9uZSByb29tIGlzIHJhcmVseSBhIHBsYWNlIHRvIHdpc2ggeW91J2QgYmUgaW4u" },
 
1503
          { "They say that an unlucky hacker once had a nose bleed at an altar and died.", 
 
1504
            "VGhleSBzYXkgdGhhdCBhbiB1bmx1Y2t5IGhhY2tlciBvbmNlIGhhZCBhIG5vc2UgYmxlZWQgYXQgYW4gYWx0YXIgYW5kIGRpZWQu" },
 
1505
          { "They say that and they say this but they never say never, never!", 
 
1506
            "VGhleSBzYXkgdGhhdCBhbmQgdGhleSBzYXkgdGhpcyBidXQgdGhleSBuZXZlciBzYXkgbmV2ZXIsIG5ldmVyIQ==" },
 
1507
          { "They say that any quantum mechanic knows that speed kills.", 
 
1508
            "VGhleSBzYXkgdGhhdCBhbnkgcXVhbnR1bSBtZWNoYW5pYyBrbm93cyB0aGF0IHNwZWVkIGtpbGxzLg==" },
 
1509
          { "They say that applying a unicorn horn means you've missed the point.", 
 
1510
            "VGhleSBzYXkgdGhhdCBhcHBseWluZyBhIHVuaWNvcm4gaG9ybiBtZWFucyB5b3UndmUgbWlzc2VkIHRoZSBwb2ludC4=" },
 
1511
          { "They say that blue stones are radioactive, beware.", 
 
1512
            "VGhleSBzYXkgdGhhdCBibHVlIHN0b25lcyBhcmUgcmFkaW9hY3RpdmUsIGJld2FyZS4=" },
 
1513
          { "They say that building a dungeon is a team effort.", 
 
1514
            "VGhleSBzYXkgdGhhdCBidWlsZGluZyBhIGR1bmdlb24gaXMgYSB0ZWFtIGVmZm9ydC4=" },
 
1515
          { "They say that chaotic characters never get a kick out of altars.", 
 
1516
            "VGhleSBzYXkgdGhhdCBjaGFvdGljIGNoYXJhY3RlcnMgbmV2ZXIgZ2V0IGEga2ljayBvdXQgb2YgYWx0YXJzLg==" },
 
1517
          { "They say that collapsing a dungeon often creates a panic.", 
 
1518
            "VGhleSBzYXkgdGhhdCBjb2xsYXBzaW5nIGEgZHVuZ2VvbiBvZnRlbiBjcmVhdGVzIGEgcGFuaWMu" },
 
1519
          { "They say that counting your eggs before they hatch shows that you care.", 
 
1520
            "VGhleSBzYXkgdGhhdCBjb3VudGluZyB5b3VyIGVnZ3MgYmVmb3JlIHRoZXkgaGF0Y2ggc2hvd3MgdGhhdCB5b3UgY2FyZS4=" },
 
1521
          { "They say that dipping a bag of tricks in a fountain won't make it an icebox.", 
 
1522
            "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGEgYmFnIG9mIHRyaWNrcyBpbiBhIGZvdW50YWluIHdvbid0IG1ha2UgaXQgYW4gaWNlYm94Lg==" },
 
1523
          { "They say that dipping an eel and brown mold in hot water makes bouillabaisse.", 
 
1524
            "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGFuIGVlbCBhbmQgYnJvd24gbW9sZCBpbiBob3Qgd2F0ZXIgbWFrZXMgYm91aWxsYWJhaXNzZS4=" },
 
1525
          { "They say that donating a doubloon is extremely pious charity.", 
 
1526
            "VGhleSBzYXkgdGhhdCBkb25hdGluZyBhIGRvdWJsb29uIGlzIGV4dHJlbWVseSBwaW91cyBjaGFyaXR5Lg==" },
 
1527
          { "They say that eating royal jelly attracts grizzly owlbears.", 
 
1528
            "VGhleSBzYXkgdGhhdCBlYXRpbmcgcm95YWwgamVsbHkgYXR0cmFjdHMgZ3JpenpseSBvd2xiZWFycy4=" },
 
1529
          { "They say that eggs, pancakes and juice are just a mundane breakfast.", 
 
1530
            "VGhleSBzYXkgdGhhdCBlZ2dzLCBwYW5jYWtlcyBhbmQganVpY2UgYXJlIGp1c3QgYSBtdW5kYW5lIGJyZWFrZmFzdC4=" },
 
1531
          { "They say that everyone knows why Medusa stands alone in the dark.", 
 
1532
            "VGhleSBzYXkgdGhhdCBldmVyeW9uZSBrbm93cyB3aHkgTWVkdXNhIHN0YW5kcyBhbG9uZSBpbiB0aGUgZGFyay4=" },
 
1533
          { "They say that everyone wanted rec.games.hack to undergo a name change.", 
 
1534
            "VGhleSBzYXkgdGhhdCBldmVyeW9uZSB3YW50ZWQgcmVjLmdhbWVzLmhhY2sgdG8gdW5kZXJnbyBhIG5hbWUgY2hhbmdlLg==" },
 
1535
          { "They say that finding a winning strategy is a deliberate move on your part.", 
 
1536
            "VGhleSBzYXkgdGhhdCBmaW5kaW5nIGEgd2lubmluZyBzdHJhdGVneSBpcyBhIGRlbGliZXJhdGUgbW92ZSBvbiB5b3VyIHBhcnQu" },
 
1537
          { "They say that finding worthless glass is worth something.", 
 
1538
            "VGhleSBzYXkgdGhhdCBmaW5kaW5nIHdvcnRobGVzcyBnbGFzcyBpcyB3b3J0aCBzb21ldGhpbmcu" },
 
1539
          { "They say that fortune cookies are food for thought.", 
 
1540
            "VGhleSBzYXkgdGhhdCBmb3J0dW5lIGNvb2tpZXMgYXJlIGZvb2QgZm9yIHRob3VnaHQu" },
 
1541
          { "They say that gold is only wasted on a pet dragon.", 
 
1542
            "VGhleSBzYXkgdGhhdCBnb2xkIGlzIG9ubHkgd2FzdGVkIG9uIGEgcGV0IGRyYWdvbi4=" },
 
1543
          { "They say that good things come to those that wait.", 
 
1544
            "VGhleSBzYXkgdGhhdCBnb29kIHRoaW5ncyBjb21lIHRvIHRob3NlIHRoYXQgd2FpdC4=" },
 
1545
          { "They say that greased objects will slip out of monsters' hands.", 
 
1546
            "VGhleSBzYXkgdGhhdCBncmVhc2VkIG9iamVjdHMgd2lsbCBzbGlwIG91dCBvZiBtb25zdGVycycgaGFuZHMu" },
 
1547
          { "They say that if you can't spell then you'll wish you had a spell book.", 
 
1548
            "VGhleSBzYXkgdGhhdCBpZiB5b3UgY2FuJ3Qgc3BlbGwgdGhlbiB5b3UnbGwgd2lzaCB5b3UgaGFkIGEgc3BlbGwgYm9vay4=" },
 
1549
          { "They say that if you live by the sword, you'll die by the sword.", 
 
1550
            "VGhleSBzYXkgdGhhdCBpZiB5b3UgbGl2ZSBieSB0aGUgc3dvcmQsIHlvdSdsbCBkaWUgYnkgdGhlIHN3b3JkLg==" },
 
1551
          { "They say that if you play like a monster you'll have a better game.", 
 
1552
            "VGhleSBzYXkgdGhhdCBpZiB5b3UgcGxheSBsaWtlIGEgbW9uc3RlciB5b3UnbGwgaGF2ZSBhIGJldHRlciBnYW1lLg==" },
 
1553
          { "They say that if you sleep with a demon you might awake with a headache.", 
 
1554
            "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc2xlZXAgd2l0aCBhIGRlbW9uIHlvdSBtaWdodCBhd2FrZSB3aXRoIGEgaGVhZGFjaGUu" },
 
1555
          { "They say that if you step on a crack you could break your mother's back.", 
 
1556
            "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc3RlcCBvbiBhIGNyYWNrIHlvdSBjb3VsZCBicmVhayB5b3VyIG1vdGhlcidzIGJhY2su" },
 
1557
          { "They say that if you're invisible you can still be heard!", 
 
1558
            "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgaW52aXNpYmxlIHlvdSBjYW4gc3RpbGwgYmUgaGVhcmQh" },
 
1559
          { "They say that if you're lucky you can feel the runes on a scroll.", 
 
1560
            "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgbHVja3kgeW91IGNhbiBmZWVsIHRoZSBydW5lcyBvbiBhIHNjcm9sbC4=" },
 
1561
          { "They say that in the big picture gold is only small change.", 
 
1562
            "VGhleSBzYXkgdGhhdCBpbiB0aGUgYmlnIHBpY3R1cmUgZ29sZCBpcyBvbmx5IHNtYWxsIGNoYW5nZS4=" },
 
1563
          { "They say that in the dungeon it's not what you know that really matters.", 
 
1564
            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBpdCdzIG5vdCB3aGF0IHlvdSBrbm93IHRoYXQgcmVhbGx5IG1hdHRlcnMu" },
 
1565
          { "They say that in the dungeon moon rocks are really dilithium crystals.", 
 
1566
            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBtb29uIHJvY2tzIGFyZSByZWFsbHkgZGlsaXRoaXVtIGNyeXN0YWxzLg==" },
 
1567
          { "They say that in the dungeon the boorish customer is never right.", 
 
1568
            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB0aGUgYm9vcmlzaCBjdXN0b21lciBpcyBuZXZlciByaWdodC4=" },
 
1569
          { "They say that in the dungeon you don't need a watch to tell time.", 
 
1570
            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgZG9uJ3QgbmVlZCBhIHdhdGNoIHRvIHRlbGwgdGltZS4=" },
 
1571
          { "They say that in the dungeon you need something old, new, burrowed and blue.", 
 
1572
            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgbmVlZCBzb21ldGhpbmcgb2xkLCBuZXcsIGJ1cnJvd2VkIGFuZCBibHVlLg==" },
 
1573
          { "They say that in the dungeon you should always count your blessings.", 
 
1574
            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3Ugc2hvdWxkIGFsd2F5cyBjb3VudCB5b3VyIGJsZXNzaW5ncy4=" },
 
1575
          { "They say that iron golem plate mail isn't worth wishing for.", 
 
1576
            "VGhleSBzYXkgdGhhdCBpcm9uIGdvbGVtIHBsYXRlIG1haWwgaXNuJ3Qgd29ydGggd2lzaGluZyBmb3Iu" },
 
1577
          { "They say that it takes four quarterstaffs to make one staff.", 
 
1578
            "VGhleSBzYXkgdGhhdCBpdCB0YWtlcyBmb3VyIHF1YXJ0ZXJzdGFmZnMgdG8gbWFrZSBvbmUgc3RhZmYu" },
 
1579
          { "They say that it's not over till the fat ladies sing.", 
 
1580
            "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWRpZXMgc2luZy4=" },
 
1581
          { "They say that it's not over till the fat lady shouts `Off with its head'.", 
 
1582
            "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWR5IHNob3V0cyBgT2ZmIHdpdGggaXRzIGhlYWQnLg==" },
 
1583
          { "They say that kicking a heavy statue is really a dumb move.", 
 
1584
            "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgaGVhdnkgc3RhdHVlIGlzIHJlYWxseSBhIGR1bWIgbW92ZS4=" },
 
1585
          { "They say that kicking a valuable gem doesn't seem to make sense.", 
 
1586
            "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgdmFsdWFibGUgZ2VtIGRvZXNuJ3Qgc2VlbSB0byBtYWtlIHNlbnNlLg==" },
 
1587
          { "They say that leprechauns know Latin and you should too.", 
 
1588
            "VGhleSBzYXkgdGhhdCBsZXByZWNoYXVucyBrbm93IExhdGluIGFuZCB5b3Ugc2hvdWxkIHRvby4=" },
 
1589
          { "They say that minotaurs get lost outside of the mazes.", 
 
1590
            "VGhleSBzYXkgdGhhdCBtaW5vdGF1cnMgZ2V0IGxvc3Qgb3V0c2lkZSBvZiB0aGUgbWF6ZXMu" },
 
1591
          { "They say that most trolls are born again.", 
 
1592
            "VGhleSBzYXkgdGhhdCBtb3N0IHRyb2xscyBhcmUgYm9ybiBhZ2Fpbi4=" },
 
1593
          { "They say that naming your cat Garfield will make you more attractive.", 
 
1594
            "VGhleSBzYXkgdGhhdCBuYW1pbmcgeW91ciBjYXQgR2FyZmllbGQgd2lsbCBtYWtlIHlvdSBtb3JlIGF0dHJhY3RpdmUu" },
 
1595
          { "They say that no one knows everything about everything in the dungeon.", 
 
1596
            "VGhleSBzYXkgdGhhdCBubyBvbmUga25vd3MgZXZlcnl0aGluZyBhYm91dCBldmVyeXRoaW5nIGluIHRoZSBkdW5nZW9uLg==" },
 
1597
          { "They say that no one plays NetHack just for the fun of it.", 
 
1598
            "VGhleSBzYXkgdGhhdCBubyBvbmUgcGxheXMgTmV0SGFjayBqdXN0IGZvciB0aGUgZnVuIG9mIGl0Lg==" },
 
1599
          { "They say that no one really subscribes to rec.games.roguelike.nethack.", 
 
1600
            "VGhleSBzYXkgdGhhdCBubyBvbmUgcmVhbGx5IHN1YnNjcmliZXMgdG8gcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrLg==" },
 
1601
          { "They say that no one will admit to starting a rumor.", 
 
1602
            "VGhleSBzYXkgdGhhdCBubyBvbmUgd2lsbCBhZG1pdCB0byBzdGFydGluZyBhIHJ1bW9yLg==" },
 
1603
          { "They say that nurses sometimes carry scalpels and never use them.", 
 
1604
            "VGhleSBzYXkgdGhhdCBudXJzZXMgc29tZXRpbWVzIGNhcnJ5IHNjYWxwZWxzIGFuZCBuZXZlciB1c2UgdGhlbS4=" },
 
1605
          { "They say that once you've met one wizard you've met them all.", 
 
1606
            "VGhleSBzYXkgdGhhdCBvbmNlIHlvdSd2ZSBtZXQgb25lIHdpemFyZCB5b3UndmUgbWV0IHRoZW0gYWxsLg==" },
 
1607
          { "They say that one troll is worth 10,000 newts.", 
 
1608
            "VGhleSBzYXkgdGhhdCBvbmUgdHJvbGwgaXMgd29ydGggMTAsMDAwIG5ld3RzLg==" },
 
1609
          { "They say that only David can find the zoo!", 
 
1610
            "VGhleSBzYXkgdGhhdCBvbmx5IERhdmlkIGNhbiBmaW5kIHRoZSB6b28h" },
 
1611
          { "They say that only angels play their harps for their pets.", 
 
1612
            "VGhleSBzYXkgdGhhdCBvbmx5IGFuZ2VscyBwbGF5IHRoZWlyIGhhcnBzIGZvciB0aGVpciBwZXRzLg==" },
 
1613
          { "They say that only big spenders carry gold.", 
 
1614
            "VGhleSBzYXkgdGhhdCBvbmx5IGJpZyBzcGVuZGVycyBjYXJyeSBnb2xkLg==" },
 
1615
          { "They say that orc shamans are healthy, wealthy and wise.", 
 
1616
            "VGhleSBzYXkgdGhhdCBvcmMgc2hhbWFucyBhcmUgaGVhbHRoeSwgd2VhbHRoeSBhbmQgd2lzZS4=" },
 
1617
          { "They say that playing NetHack is like walking into a death trap.", 
 
1618
            "VGhleSBzYXkgdGhhdCBwbGF5aW5nIE5ldEhhY2sgaXMgbGlrZSB3YWxraW5nIGludG8gYSBkZWF0aCB0cmFwLg==" },
 
1619
          { "They say that problem breathing is best treated by a proper diet.", 
 
1620
            "VGhleSBzYXkgdGhhdCBwcm9ibGVtIGJyZWF0aGluZyBpcyBiZXN0IHRyZWF0ZWQgYnkgYSBwcm9wZXIgZGlldC4=" },
 
1621
          { "They say that quaffing many potions of levitation can give you a headache.", 
 
1622
            "VGhleSBzYXkgdGhhdCBxdWFmZmluZyBtYW55IHBvdGlvbnMgb2YgbGV2aXRhdGlvbiBjYW4gZ2l2ZSB5b3UgYSBoZWFkYWNoZS4=" },
 
1623
          { "They say that queen bees get that way by eating royal jelly.", 
 
1624
            "VGhleSBzYXkgdGhhdCBxdWVlbiBiZWVzIGdldCB0aGF0IHdheSBieSBlYXRpbmcgcm95YWwgamVsbHku" },
 
1625
          { "They say that reading a scare monster scroll is the same as saying Elbereth.", 
 
1626
            "VGhleSBzYXkgdGhhdCByZWFkaW5nIGEgc2NhcmUgbW9uc3RlciBzY3JvbGwgaXMgdGhlIHNhbWUgYXMgc2F5aW5nIEVsYmVyZXRoLg==" },
 
1627
          { "They say that real hackers always are controlled.", 
 
1628
            "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgYWx3YXlzIGFyZSBjb250cm9sbGVkLg==" },
 
1629
          { "They say that real hackers never sleep.", 
 
1630
            "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgbmV2ZXIgc2xlZXAu" },
 
1631
          { "They say that shopkeepers are insured by Croesus himself!", 
 
1632
            "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBhcmUgaW5zdXJlZCBieSBDcm9lc3VzIGhpbXNlbGYh" },
 
1633
          { "They say that shopkeepers never carry more than 20 gold pieces, at night.", 
 
1634
            "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBjYXJyeSBtb3JlIHRoYW4gMjAgZ29sZCBwaWVjZXMsIGF0IG5pZ2h0Lg==" },
 
1635
          { "They say that shopkeepers never sell blessed potions of invisibility.", 
 
1636
            "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBzZWxsIGJsZXNzZWQgcG90aW9ucyBvZiBpbnZpc2liaWxpdHku" },
 
1637
          { "They say that soldiers wear kid gloves and silly helmets.", 
 
1638
            "VGhleSBzYXkgdGhhdCBzb2xkaWVycyB3ZWFyIGtpZCBnbG92ZXMgYW5kIHNpbGx5IGhlbG1ldHMu" },
 
1639
          { "They say that some Kops are on the take.", 
 
1640
            "VGhleSBzYXkgdGhhdCBzb21lIEtvcHMgYXJlIG9uIHRoZSB0YWtlLg==" },
 
1641
          { "They say that some guards' palms can be greased.", 
 
1642
            "VGhleSBzYXkgdGhhdCBzb21lIGd1YXJkcycgcGFsbXMgY2FuIGJlIGdyZWFzZWQu" },
 
1643
          { "They say that some monsters may kiss your boots to stop your drum playing.", 
 
1644
            "VGhleSBzYXkgdGhhdCBzb21lIG1vbnN0ZXJzIG1heSBraXNzIHlvdXIgYm9vdHMgdG8gc3RvcCB5b3VyIGRydW0gcGxheWluZy4=" },
 
1645
          { "They say that sometimes you can be the hit of the party when playing a horn.", 
 
1646
            "VGhleSBzYXkgdGhhdCBzb21ldGltZXMgeW91IGNhbiBiZSB0aGUgaGl0IG9mIHRoZSBwYXJ0eSB3aGVuIHBsYXlpbmcgYSBob3JuLg==" },
 
1647
          { "They say that the NetHack gods generally welcome your sacrifices.", 
 
1648
            "VGhleSBzYXkgdGhhdCB0aGUgTmV0SGFjayBnb2RzIGdlbmVyYWxseSB3ZWxjb21lIHlvdXIgc2FjcmlmaWNlcy4=" },
 
1649
          { "They say that the Three Rings are named Vilya, Nenya and Narya.", 
 
1650
            "VGhleSBzYXkgdGhhdCB0aGUgVGhyZWUgUmluZ3MgYXJlIG5hbWVkIFZpbHlhLCBOZW55YSBhbmQgTmFyeWEu" },
 
1651
          { "They say that the Wizard of Yendor has a death wish.", 
 
1652
            "VGhleSBzYXkgdGhhdCB0aGUgV2l6YXJkIG9mIFllbmRvciBoYXMgYSBkZWF0aCB3aXNoLg==" },
 
1653
          { "They say that the `hair of the dog' is sometimes an effective remedy.", 
 
1654
            "VGhleSBzYXkgdGhhdCB0aGUgYGhhaXIgb2YgdGhlIGRvZycgaXMgc29tZXRpbWVzIGFuIGVmZmVjdGl2ZSByZW1lZHku" },
 
1655
          { "They say that the best time to save your game is now before its too late.", 
 
1656
            "VGhleSBzYXkgdGhhdCB0aGUgYmVzdCB0aW1lIHRvIHNhdmUgeW91ciBnYW1lIGlzIG5vdyBiZWZvcmUgaXRzIHRvbyBsYXRlLg==" },
 
1657
          { "They say that the biggest obstacle in NetHack is your mind.", 
 
1658
            "VGhleSBzYXkgdGhhdCB0aGUgYmlnZ2VzdCBvYnN0YWNsZSBpbiBOZXRIYWNrIGlzIHlvdXIgbWluZC4=" },
 
1659
          { "They say that the gods are angry when they hit you with objects.", 
 
1660
            "VGhleSBzYXkgdGhhdCB0aGUgZ29kcyBhcmUgYW5ncnkgd2hlbiB0aGV5IGhpdCB5b3Ugd2l0aCBvYmplY3RzLg==" },
 
1661
          { "They say that the priesthood are specially favored by the gods.", 
 
1662
            "VGhleSBzYXkgdGhhdCB0aGUgcHJpZXN0aG9vZCBhcmUgc3BlY2lhbGx5IGZhdm9yZWQgYnkgdGhlIGdvZHMu" },
 
1663
          { "They say that the way to make a unicorn happy is to give it what it wants.", 
 
1664
            "VGhleSBzYXkgdGhhdCB0aGUgd2F5IHRvIG1ha2UgYSB1bmljb3JuIGhhcHB5IGlzIHRvIGdpdmUgaXQgd2hhdCBpdCB3YW50cy4=" },
 
1665
          { "They say that there are no black or white stones, only gray.", 
 
1666
            "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gYmxhY2sgb3Igd2hpdGUgc3RvbmVzLCBvbmx5IGdyYXku" },
 
1667
          { "They say that there are no skeletons hence there are no skeleton keys.", 
 
1668
            "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gc2tlbGV0b25zIGhlbmNlIHRoZXJlIGFyZSBubyBza2VsZXRvbiBrZXlzLg==" },
 
1669
          { "They say that there is a clever rogue in every hacker just dying to escape.", 
 
1670
            "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBhIGNsZXZlciByb2d1ZSBpbiBldmVyeSBoYWNrZXIganVzdCBkeWluZyB0byBlc2NhcGUu" },
 
1671
          { "They say that there is no such thing as free advice.", 
 
1672
            "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGZyZWUgYWR2aWNlLg==" },
 
1673
          { "They say that there is only one way to win at NetHack.", 
 
1674
            "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgdG8gd2luIGF0IE5ldEhhY2su" },
 
1675
          { "They say that there once was a fearsome chaotic samurai named Luk No.", 
 
1676
            "VGhleSBzYXkgdGhhdCB0aGVyZSBvbmNlIHdhcyBhIGZlYXJzb21lIGNoYW90aWMgc2FtdXJhaSBuYW1lZCBMdWsgTm8u" },
 
1677
          { "They say that there was a time when cursed holy water wasn't water.", 
 
1678
            "VGhleSBzYXkgdGhhdCB0aGVyZSB3YXMgYSB0aW1lIHdoZW4gY3Vyc2VkIGhvbHkgd2F0ZXIgd2Fzbid0IHdhdGVyLg==" },
 
1679
          { "They say that there's no point in crying over a gray ooze.", 
 
1680
            "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGNyeWluZyBvdmVyIGEgZ3JheSBvb3plLg==" },
 
1681
          { "They say that there's only hope left after you've opened Pandora's box.", 
 
1682
            "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG9ubHkgaG9wZSBsZWZ0IGFmdGVyIHlvdSd2ZSBvcGVuZWQgUGFuZG9yYSdzIGJveC4=" },
 
1683
          { "They say that trapdoors should always be marked `Caution: Trap Door'.", 
 
1684
            "VGhleSBzYXkgdGhhdCB0cmFwZG9vcnMgc2hvdWxkIGFsd2F5cyBiZSBtYXJrZWQgYENhdXRpb246IFRyYXAgRG9vcicu" },
 
1685
          { "They say that using an amulet of change isn't a difficult operation.", 
 
1686
            "VGhleSBzYXkgdGhhdCB1c2luZyBhbiBhbXVsZXQgb2YgY2hhbmdlIGlzbid0IGEgZGlmZmljdWx0IG9wZXJhdGlvbi4=" },
 
1687
          { "They say that water walking boots are better if you are fast like Hermes.", 
 
1688
            "VGhleSBzYXkgdGhhdCB3YXRlciB3YWxraW5nIGJvb3RzIGFyZSBiZXR0ZXIgaWYgeW91IGFyZSBmYXN0IGxpa2UgSGVybWVzLg==" },
 
1689
          { "They say that when you wear a circular amulet you might resemble a troll.", 
 
1690
            "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSB3ZWFyIGEgY2lyY3VsYXIgYW11bGV0IHlvdSBtaWdodCByZXNlbWJsZSBhIHRyb2xsLg==" },
 
1691
          { "They say that when you're hungry you can get a pizza in 30 moves or it's free.", 
 
1692
            "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSdyZSBodW5ncnkgeW91IGNhbiBnZXQgYSBwaXp6YSBpbiAzMCBtb3ZlcyBvciBpdCdzIGZyZWUu" },
 
1693
          { "They say that when your god is angry you should try another one.", 
 
1694
            "VGhleSBzYXkgdGhhdCB3aGVuIHlvdXIgZ29kIGlzIGFuZ3J5IHlvdSBzaG91bGQgdHJ5IGFub3RoZXIgb25lLg==" },
 
1695
          { "They say that wielding a unicorn horn takes strength.", 
 
1696
            "VGhleSBzYXkgdGhhdCB3aWVsZGluZyBhIHVuaWNvcm4gaG9ybiB0YWtlcyBzdHJlbmd0aC4=" },
 
1697
          { "They say that with speed boots you never worry about hit and run accidents.", 
 
1698
            "VGhleSBzYXkgdGhhdCB3aXRoIHNwZWVkIGJvb3RzIHlvdSBuZXZlciB3b3JyeSBhYm91dCBoaXQgYW5kIHJ1biBhY2NpZGVudHMu" },
 
1699
          { "They say that you can defeat a killer bee with a unicorn horn.", 
 
1700
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIGRlZmVhdCBhIGtpbGxlciBiZWUgd2l0aCBhIHVuaWNvcm4gaG9ybi4=" },
 
1701
          { "They say that you can only cross the River Styx in Charon's boat.", 
 
1702
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgY3Jvc3MgdGhlIFJpdmVyIFN0eXggaW4gQ2hhcm9uJ3MgYm9hdC4=" },
 
1703
          { "They say that you can only kill a lich once and then you'd better be careful.", 
 
1704
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkga2lsbCBhIGxpY2ggb25jZSBhbmQgdGhlbiB5b3UnZCBiZXR0ZXIgYmUgY2FyZWZ1bC4=" },
 
1705
          { "They say that you can only wish for things you've already had.", 
 
1706
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgd2lzaCBmb3IgdGhpbmdzIHlvdSd2ZSBhbHJlYWR5IGhhZC4=" },
 
1707
          { "They say that you can train a cat by talking gently to it.", 
 
1708
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgY2F0IGJ5IHRhbGtpbmcgZ2VudGx5IHRvIGl0Lg==" },
 
1709
          { "They say that you can train a dog by talking firmly to it.", 
 
1710
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgZG9nIGJ5IHRhbGtpbmcgZmlybWx5IHRvIGl0Lg==" },
 
1711
          { "They say that you can trust your gold with the king.", 
 
1712
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRydXN0IHlvdXIgZ29sZCB3aXRoIHRoZSBraW5nLg==" },
 
1713
          { "They say that you can't wipe your greasy bare hands on a blank scroll.", 
 
1714
            "VGhleSBzYXkgdGhhdCB5b3UgY2FuJ3Qgd2lwZSB5b3VyIGdyZWFzeSBiYXJlIGhhbmRzIG9uIGEgYmxhbmsgc2Nyb2xsLg==" },
 
1715
          { "They say that you cannot trust scrolls of rumor.", 
 
1716
            "VGhleSBzYXkgdGhhdCB5b3UgY2Fubm90IHRydXN0IHNjcm9sbHMgb2YgcnVtb3Iu" },
 
1717
          { "They say that you could fall head over heels for an energy vortex.", 
 
1718
            "VGhleSBzYXkgdGhhdCB5b3UgY291bGQgZmFsbCBoZWFkIG92ZXIgaGVlbHMgZm9yIGFuIGVuZXJneSB2b3J0ZXgu" },
 
1719
          { "They say that you need a key in order to open locked doors.", 
 
1720
            "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIGtleSBpbiBvcmRlciB0byBvcGVuIGxvY2tlZCBkb29ycy4=" },
 
1721
          { "They say that you need a mirror to notice a mimic in an antique shop.", 
 
1722
            "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIG1pcnJvciB0byBub3RpY2UgYSBtaW1pYyBpbiBhbiBhbnRpcXVlIHNob3Au" },
 
1723
          { "They say that you really can use a pick-axe unless you really can't.", 
 
1724
            "VGhleSBzYXkgdGhhdCB5b3UgcmVhbGx5IGNhbiB1c2UgYSBwaWNrLWF4ZSB1bmxlc3MgeW91IHJlYWxseSBjYW4ndC4=" },
 
1725
          { "They say that you should always store your tools in the cellar.", 
 
1726
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGFsd2F5cyBzdG9yZSB5b3VyIHRvb2xzIGluIHRoZSBjZWxsYXIu" },
 
1727
          { "They say that you should be careful while climbing the ladder to success.", 
 
1728
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgd2hpbGUgY2xpbWJpbmcgdGhlIGxhZGRlciB0byBzdWNjZXNzLg==" },
 
1729
          { "They say that you should call your armor `rustproof'.", 
 
1730
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGNhbGwgeW91ciBhcm1vciBgcnVzdHByb29mJy4=" },
 
1731
          { "They say that you should name your dog Spuds to have a cool pet.", 
 
1732
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciBkb2cgU3B1ZHMgdG8gaGF2ZSBhIGNvb2wgcGV0Lg==" },
 
1733
          { "They say that you should name your weapon after your first monster kill.", 
 
1734
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciB3ZWFwb24gYWZ0ZXIgeW91ciBmaXJzdCBtb25zdGVyIGtpbGwu" },
 
1735
          { "They say that you should never introduce a rope golem to a succubus.", 
 
1736
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIGludHJvZHVjZSBhIHJvcGUgZ29sZW0gdG8gYSBzdWNjdWJ1cy4=" },
 
1737
          { "They say that you should never sleep near invisible ring wraiths.", 
 
1738
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHNsZWVwIG5lYXIgaW52aXNpYmxlIHJpbmcgd3JhaXRocy4=" },
 
1739
          { "They say that you should never try to leave the dungeon with a bag of gems.", 
 
1740
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBsZWF2ZSB0aGUgZHVuZ2VvbiB3aXRoIGEgYmFnIG9mIGdlbXMu" },
 
1741
          { "They say that you should remove your armor before sitting on a throne.", 
 
1742
            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIHJlbW92ZSB5b3VyIGFybW9yIGJlZm9yZSBzaXR0aW5nIG9uIGEgdGhyb25lLg==" },
 
1743
          { "This fortune cookie is copy protected.", 
 
1744
            "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyBjb3B5IHByb3RlY3RlZC4=" },
 
1745
          { "This fortune cookie is the property of Fortune Cookies, Inc.", 
 
1746
            "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyB0aGUgcHJvcGVydHkgb2YgRm9ydHVuZSBDb29raWVzLCBJbmMu" },
 
1747
          { "Tired? Try a scroll of charging on yourself.", 
 
1748
            "VGlyZWQ/IFRyeSBhIHNjcm9sbCBvZiBjaGFyZ2luZyBvbiB5b3Vyc2VsZi4=" },
 
1749
          { "To achieve the next higher rating, you need 3 more points.", 
 
1750
            "VG8gYWNoaWV2ZSB0aGUgbmV4dCBoaWdoZXIgcmF0aW5nLCB5b3UgbmVlZCAzIG1vcmUgcG9pbnRzLg==" },
 
1751
          { "To reach heaven, escape the dungeon while wearing a ring of levitation.", 
 
1752
            "VG8gcmVhY2ggaGVhdmVuLCBlc2NhcGUgdGhlIGR1bmdlb24gd2hpbGUgd2VhcmluZyBhIHJpbmcgb2YgbGV2aXRhdGlvbi4=" },
 
1753
          { "Tourists wear shirts loud enough to wake the dead.", 
 
1754
            "VG91cmlzdHMgd2VhciBzaGlydHMgbG91ZCBlbm91Z2ggdG8gd2FrZSB0aGUgZGVhZC4=" },
 
1755
          { "Try calling your katana Moulinette.", 
 
1756
            "VHJ5IGNhbGxpbmcgeW91ciBrYXRhbmEgTW91bGluZXR0ZS4=" },
 
1757
          { "Ulch! That meat was painted!", 
 
1758
            "VWxjaCEgVGhhdCBtZWF0IHdhcyBwYWludGVkIQ==" },
 
1759
          { "Unfortunately, this message was left intentionally blank.", 
 
1760
            "VW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzYWdlIHdhcyBsZWZ0IGludGVudGlvbmFsbHkgYmxhbmsu" },
 
1761
          { "Using a morning star in the evening has no effect.", 
 
1762
            "VXNpbmcgYSBtb3JuaW5nIHN0YXIgaW4gdGhlIGV2ZW5pbmcgaGFzIG5vIGVmZmVjdC4=" },
 
1763
          { "Want a hint? Zap a wand of make invisible on your weapon!", 
 
1764
            "V2FudCBhIGhpbnQ/IFphcCBhIHdhbmQgb2YgbWFrZSBpbnZpc2libGUgb24geW91ciB3ZWFwb24h" },
 
1765
          { "Want to ascend in a hurry? Apply at Gizmonic Institute.", 
 
1766
            "V2FudCB0byBhc2NlbmQgaW4gYSBodXJyeT8gQXBwbHkgYXQgR2l6bW9uaWMgSW5zdGl0dXRlLg==" },
 
1767
          { "Wanted: shopkeepers. Send a scroll of mail to Mage of Yendor/Level 35/Dungeon.", 
 
1768
            "V2FudGVkOiBzaG9wa2VlcGVycy4gU2VuZCBhIHNjcm9sbCBvZiBtYWlsIHRvIE1hZ2Ugb2YgWWVuZG9yL0xldmVsIDM1L0R1bmdlb24u" },
 
1769
          { "Warning: fortune reading can be hazardous to your health.", 
 
1770
            "V2FybmluZzogZm9ydHVuZSByZWFkaW5nIGNhbiBiZSBoYXphcmRvdXMgdG8geW91ciBoZWFsdGgu" },
 
1771
          { "We have new ways of detecting treachery...", 
 
1772
            "V2UgaGF2ZSBuZXcgd2F5cyBvZiBkZXRlY3RpbmcgdHJlYWNoZXJ5Li4u" },
 
1773
          { "Wet towels make great weapons!", 
 
1774
            "V2V0IHRvd2VscyBtYWtlIGdyZWF0IHdlYXBvbnMh" },
 
1775
          { "What a pity, you cannot read it!", 
 
1776
            "V2hhdCBhIHBpdHksIHlvdSBjYW5ub3QgcmVhZCBpdCE=" },
 
1777
          { "When a piercer drops in on you, you will be tempted to hit the ceiling!", 
 
1778
            "V2hlbiBhIHBpZXJjZXIgZHJvcHMgaW4gb24geW91LCB5b3Ugd2lsbCBiZSB0ZW1wdGVkIHRvIGhpdCB0aGUgY2VpbGluZyE=" },
 
1779
          { "When in a maze follow the right wall and you will never get lost.", 
 
1780
            "V2hlbiBpbiBhIG1hemUgZm9sbG93IHRoZSByaWdodCB3YWxsIGFuZCB5b3Ugd2lsbCBuZXZlciBnZXQgbG9zdC4=" },
 
1781
          { "When you have a key, you don't have to wait for the guard.", 
 
1782
            "V2hlbiB5b3UgaGF2ZSBhIGtleSwgeW91IGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgdGhlIGd1YXJkLg==" },
 
1783
          { "Why are you wasting time reading fortunes?", 
 
1784
            "V2h5IGFyZSB5b3Ugd2FzdGluZyB0aW1lIHJlYWRpbmcgZm9ydHVuZXM/" },
 
1785
          { "Wish for a master key and open the Magic Memory Vault!", 
 
1786
            "V2lzaCBmb3IgYSBtYXN0ZXIga2V5IGFuZCBvcGVuIHRoZSBNYWdpYyBNZW1vcnkgVmF1bHQh" },
 
1787
          { "Wizard expects every monster to do its duty.", 
 
1788
            "V2l6YXJkIGV4cGVjdHMgZXZlcnkgbW9uc3RlciB0byBkbyBpdHMgZHV0eS4=" },
 
1789
          { "Wow! You could've had a potion of fruit juice!", 
 
1790
            "V293ISBZb3UgY291bGQndmUgaGFkIGEgcG90aW9uIG9mIGZydWl0IGp1aWNlIQ==" },
 
1791
          { "Yet Another Silly Message (YASM).", 
 
1792
            "WWV0IEFub3RoZXIgU2lsbHkgTWVzc2FnZSAoWUFTTSku" },
 
1793
          { "You are destined to be misled by a fortune.", 
 
1794
            "WW91IGFyZSBkZXN0aW5lZCB0byBiZSBtaXNsZWQgYnkgYSBmb3J0dW5lLg==" },
 
1795
          { "You can get a genuine Amulet of Yendor by doing the following: --More--", 
 
1796
            "WW91IGNhbiBnZXQgYSBnZW51aW5lIEFtdWxldCBvZiBZZW5kb3IgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzogLS1Nb3JlLS0=" },
 
1797
          { "You can protect yourself from black dragons by doing the following: --More--", 
 
1798
            "WW91IGNhbiBwcm90ZWN0IHlvdXJzZWxmIGZyb20gYmxhY2sgZHJhZ29ucyBieSBkb2luZyB0aGUgZm9sbG93aW5nOiAtLU1vcmUtLQ==" },
 
1799
          { "You can't get by the snake.", 
 
1800
            "WW91IGNhbid0IGdldCBieSB0aGUgc25ha2Uu" },
 
1801
          { "You feel like someone is pulling your leg.", 
 
1802
            "WW91IGZlZWwgbGlrZSBzb21lb25lIGlzIHB1bGxpbmcgeW91ciBsZWcu" },
 
1803
          { "You have to outwit the Sphynx or pay her.", 
 
1804
            "WW91IGhhdmUgdG8gb3V0d2l0IHRoZSBTcGh5bnggb3IgcGF5IGhlci4=" },
 
1805
          { "You hear the fortune cookie's hissing!", 
 
1806
            "WW91IGhlYXIgdGhlIGZvcnR1bmUgY29va2llJ3MgaGlzc2luZyE=" },
 
1807
          { "You may get rich selling letters, but beware of being blackmailed!", 
 
1808
            "WW91IG1heSBnZXQgcmljaCBzZWxsaW5nIGxldHRlcnMsIGJ1dCBiZXdhcmUgb2YgYmVpbmcgYmxhY2ttYWlsZWQh" },
 
1809
          { "You offend Shai-Hulud by sheathing your crysknife without having drawn blood.", 
 
1810
            "WW91IG9mZmVuZCBTaGFpLUh1bHVkIGJ5IHNoZWF0aGluZyB5b3VyIGNyeXNrbmlmZSB3aXRob3V0IGhhdmluZyBkcmF3biBibG9vZC4=" },
 
1811
          { "You swallowed the fortune!", 
 
1812
            "WW91IHN3YWxsb3dlZCB0aGUgZm9ydHVuZSE=" },
 
1813
          { "You want to regain strength? Two levels ahead is a guesthouse!", 
 
1814
            "WW91IHdhbnQgdG8gcmVnYWluIHN0cmVuZ3RoPyBUd28gbGV2ZWxzIGFoZWFkIGlzIGEgZ3Vlc3Rob3VzZSE=" },
 
1815
          { "You will encounter a tall, dark, and gruesome creature...", 
 
1816
            "WW91IHdpbGwgZW5jb3VudGVyIGEgdGFsbCwgZGFyaywgYW5kIGdydWVzb21lIGNyZWF0dXJlLi4u" },
 
1817
 
 
1818
          { "The End", "VGhlIEVuZA==" }
 
1819
      };
 
1820
 
 
1821
/* PL_Base64Encode, random strings */
 
1822
PRBool test_004(void)
 
1823
{
 
1824
    int i;
 
1825
    char result[ 4096 ];
 
1826
 
 
1827
    printf("Test 004 (PL_Base64Encode, random strings)                            ..."); fflush(stdout);
 
1828
 
 
1829
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
1830
    {
 
1831
        PRUint32 plen = PL_strlen(array[i].plaintext);
 
1832
        PRUint32 clen = ((plen + 2)/3)*4;
 
1833
 
 
1834
        char *rv = PL_Base64Encode(array[i].plaintext, plen, result);
 
1835
 
 
1836
        if( rv != result )
 
1837
        {
 
1838
            printf("FAIL\n\t(%d): return value\n", i);
 
1839
            return PR_FALSE;
 
1840
        }
 
1841
 
 
1842
        if( 0 != PL_strncmp(result, array[i].cyphertext, clen) )
 
1843
        {
 
1844
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
 
1845
                   i, array[i].plaintext, array[i].cyphertext, clen, result);
 
1846
            return PR_FALSE;
 
1847
        }
 
1848
    }
 
1849
 
 
1850
    printf("PASS\n");
 
1851
    return PR_TRUE;
 
1852
}
 
1853
 
 
1854
/* PL_Base64Encode, single characters, malloc */
 
1855
PRBool test_005(void)
 
1856
{
 
1857
    PRUint32 a, b;
 
1858
    unsigned char plain[ 4 ];
 
1859
    unsigned char cypher[ 5 ];
 
1860
    char *rv;
 
1861
 
 
1862
    printf("Test 005 (PL_Base64Encode, single characters, malloc)                 ..."); fflush(stdout);
 
1863
 
 
1864
    plain[1] = plain[2] = plain[3] = (unsigned char)0;
 
1865
    cypher[2] = cypher[3] = (unsigned char)'=';
 
1866
    cypher[4] = (unsigned char)0;
 
1867
 
 
1868
    for( a = 0; a < 64; a++ )
 
1869
    {
 
1870
        cypher[0] = base[a];
 
1871
 
 
1872
        for( b = 0; b < 4; b++ )
 
1873
        {
 
1874
            plain[0] = (unsigned char)(a * 4 + b);
 
1875
            cypher[1] = base[(b * 16)];
 
1876
 
 
1877
            rv = PL_Base64Encode((char *)plain, 1, (char *)0);
 
1878
            if( (char *)0 == rv )
 
1879
            {
 
1880
                printf("FAIL\n\t(%d, %d): no return value\n", a, b);
 
1881
                return PR_FALSE;
 
1882
            }
 
1883
 
 
1884
            if( 0 != PL_strcmp((char *)cypher, rv) )
 
1885
            {
 
1886
                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
 
1887
                       a, b, cypher, rv);
 
1888
                PR_DELETE(rv);
 
1889
                return PR_FALSE;
 
1890
            }
 
1891
 
 
1892
            PR_DELETE(rv);
 
1893
        }
 
1894
    }
 
1895
 
 
1896
    printf("PASS\n");
 
1897
    return PR_TRUE;
 
1898
}
 
1899
 
 
1900
/* PL_Base64Encode, double characters, malloc */
 
1901
PRBool test_006(void)
 
1902
{
 
1903
    PRUint32 a, b, c, d;
 
1904
    unsigned char plain[ 4 ];
 
1905
    unsigned char cypher[ 5 ];
 
1906
    char *rv;
 
1907
 
 
1908
    printf("Test 006 (PL_Base64Encode, double characters, malloc)                 ..."); fflush(stdout);
 
1909
 
 
1910
    plain[2] = plain[3] = (unsigned char)0;
 
1911
    cypher[3] = (unsigned char)'=';
 
1912
    cypher[4] = (unsigned char)0;
 
1913
 
 
1914
    for( a = 0; a < 64; a++ )
 
1915
    {
 
1916
        cypher[0] = base[a];
 
1917
        for( b = 0; b < 4; b++ )
 
1918
        {
 
1919
            plain[0] = (a*4) + b;
 
1920
            for( c = 0; c < 16; c++ )
 
1921
            {
 
1922
                cypher[1] = base[b*16 + c];
 
1923
                for( d = 0; d < 16; d++ )
 
1924
                {
 
1925
                    plain[1] = c*16 + d;
 
1926
                    cypher[2] = base[d*4];
 
1927
 
 
1928
                    rv = PL_Base64Encode((char *)plain, 2, (char *)0);
 
1929
                    if( (char *)0 == rv )
 
1930
                    {
 
1931
                        printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
 
1932
                        return PR_FALSE;
 
1933
                    }
 
1934
 
 
1935
                    if( 0 != PL_strcmp((char *)cypher, rv) )
 
1936
                    {
 
1937
                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
 
1938
                               a, b, c, d, cypher, rv);
 
1939
                        PR_DELETE(rv);
 
1940
                        return PR_FALSE;
 
1941
                    }
 
1942
 
 
1943
                    PR_DELETE(rv);
 
1944
                }
 
1945
            }
 
1946
        }
 
1947
    }
 
1948
 
 
1949
    printf("PASS\n");
 
1950
    return PR_TRUE;
 
1951
}
 
1952
 
 
1953
/* PL_Base64Encode, triple characters, malloc */
 
1954
PRBool test_007(void)
 
1955
{
 
1956
    PRUint32 a, b, c, d, e, f;
 
1957
    unsigned char plain[ 4 ];
 
1958
    unsigned char cypher[ 5 ];
 
1959
    char *rv;
 
1960
 
 
1961
    printf("Test 007 (PL_Base64Encode, triple characters, malloc)                 ..."); fflush(stdout);
 
1962
 
 
1963
    cypher[4] = (unsigned char)0;
 
1964
 
 
1965
    for( a = 0; a < 64; a++ )
 
1966
    {
 
1967
        cypher[0] = base[a];
 
1968
        for( b = 0; b < 4; b++ )
 
1969
        {
 
1970
            plain[0] = (a*4) + b;
 
1971
            for( c = 0; c < 16; c++ )
 
1972
            {
 
1973
                cypher[1] = base[b*16 + c];
 
1974
                for( d = 0; d < 16; d++ )
 
1975
                {
 
1976
                    plain[1] = c*16 + d;
 
1977
                    for( e = 0; e < 4; e++ )
 
1978
                    {
 
1979
                        cypher[2] = base[d*4 + e];
 
1980
                        for( f = 0; f < 64; f++ )
 
1981
                        {
 
1982
                            plain[2] = e * 64 + f;
 
1983
                            cypher[3] = base[f];
 
1984
 
 
1985
                            rv = PL_Base64Encode((char *)plain, 3, (char *)0);
 
1986
                            if( (char *)0 == rv )
 
1987
                            {
 
1988
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a, b, c, d, e, f);
 
1989
                                return PR_FALSE;
 
1990
                            }
 
1991
 
 
1992
                            if( 0 != PL_strcmp((char *)cypher, rv) )
 
1993
                            {
 
1994
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
 
1995
                                       a, b, c, d, e, f, cypher, rv);
 
1996
                                PR_DELETE(rv);
 
1997
                                return PR_FALSE;
 
1998
                            }
 
1999
 
 
2000
                            PR_DELETE(rv);
 
2001
                        }
 
2002
                    }
 
2003
                }
 
2004
            }
 
2005
        }
 
2006
    }
 
2007
 
 
2008
    printf("PASS\n");
 
2009
    return PR_TRUE;
 
2010
}
 
2011
 
 
2012
/* PL_Base64Encode, random strings, malloc */
 
2013
PRBool test_008(void)
 
2014
{
 
2015
    int i;
 
2016
 
 
2017
    printf("Test 008 (PL_Base64Encode, random strings, malloc)                    ..."); fflush(stdout);
 
2018
 
 
2019
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2020
    {
 
2021
        PRUint32 plen = PL_strlen(array[i].plaintext);
 
2022
        PRUint32 clen = ((plen + 2)/3)*4;
 
2023
 
 
2024
        char *rv = PL_Base64Encode(array[i].plaintext, plen, (char *)0);
 
2025
 
 
2026
        if( (char *)0 == rv )
 
2027
        {
 
2028
            printf("FAIL\n\t(%d): no return value\n", i);
 
2029
            return PR_FALSE;
 
2030
        }
 
2031
 
 
2032
        if( 0 != PL_strcmp(rv, array[i].cyphertext) )
 
2033
        {
 
2034
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
 
2035
                   i, array[i].plaintext, array[i].cyphertext, rv);
 
2036
            return PR_FALSE;
 
2037
        }
 
2038
    }
 
2039
 
 
2040
    printf("PASS\n");
 
2041
    return PR_TRUE;
 
2042
}
 
2043
 
 
2044
/* PL_Base64Decode, single characters */
 
2045
PRBool test_009(void)
 
2046
{
 
2047
    PRUint32 a, b;
 
2048
    unsigned char plain[ 4 ];
 
2049
    unsigned char cypher[ 5 ];
 
2050
    char result[ 8 ];
 
2051
    char *rv;
 
2052
 
 
2053
    printf("Test 009 (PL_Base64Decode, single characters, equals)                 ..."); fflush(stdout);
 
2054
 
 
2055
    plain[1] = plain[2] = plain[3] = (unsigned char)0;
 
2056
    cypher[2] = cypher[3] = (unsigned char)'=';
 
2057
    cypher[4] = (unsigned char)0;
 
2058
 
 
2059
    for( a = 0; a < 64; a++ )
 
2060
    {
 
2061
        cypher[0] = base[a];
 
2062
 
 
2063
        for( b = 0; b < 4; b++ )
 
2064
        {
 
2065
            plain[0] = (unsigned char)(a * 4 + b);
 
2066
            cypher[1] = base[(b * 16)];
 
2067
 
 
2068
            rv = PL_Base64Decode((char *)cypher, 4, result);
 
2069
            if( rv != result )
 
2070
            {
 
2071
                printf("FAIL\n\t(%d, %d): return value\n", a, b);
 
2072
                return PR_FALSE;
 
2073
            }
 
2074
 
 
2075
            if( 0 != PL_strncmp((char *)plain, result, 1) )
 
2076
            {
 
2077
                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n",
 
2078
                       a, b, plain, result);
 
2079
                return PR_FALSE;
 
2080
            }
 
2081
        }
 
2082
    }
 
2083
 
 
2084
    printf("PASS\n");
 
2085
    return PR_TRUE;
 
2086
}
 
2087
 
 
2088
/* PL_Base64Decode, single characters */
 
2089
PRBool test_010(void)
 
2090
{
 
2091
    PRUint32 a, b;
 
2092
    unsigned char plain[ 4 ];
 
2093
    unsigned char cypher[ 5 ];
 
2094
    char result[ 8 ];
 
2095
    char *rv;
 
2096
 
 
2097
    printf("Test 010 (PL_Base64Decode, single characters, no equals)              ..."); fflush(stdout);
 
2098
 
 
2099
    plain[1] = plain[2] = plain[3] = (unsigned char)0;
 
2100
    cypher[2] = cypher[3] = (unsigned char)0;
 
2101
    cypher[4] = (unsigned char)0;
 
2102
 
 
2103
    for( a = 0; a < 64; a++ )
 
2104
    {
 
2105
        cypher[0] = base[a];
 
2106
 
 
2107
        for( b = 0; b < 4; b++ )
 
2108
        {
 
2109
            plain[0] = (unsigned char)(a * 4 + b);
 
2110
            cypher[1] = base[(b * 16)];
 
2111
 
 
2112
            rv = PL_Base64Decode((char *)cypher, 2, result);
 
2113
            if( rv != result )
 
2114
            {
 
2115
                printf("FAIL\n\t(%d, %d): return value\n", a, b);
 
2116
                return PR_FALSE;
 
2117
            }
 
2118
 
 
2119
            if( 0 != PL_strncmp((char *)plain, result, 1) )
 
2120
            {
 
2121
                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n",
 
2122
                       a, b, plain, result);
 
2123
                return PR_FALSE;
 
2124
            }
 
2125
        }
 
2126
    }
 
2127
 
 
2128
    printf("PASS\n");
 
2129
    return PR_TRUE;
 
2130
}
 
2131
 
 
2132
/* PL_Base64Decode, double characters */
 
2133
PRBool test_011(void)
 
2134
{
 
2135
    PRUint32 a, b, c, d;
 
2136
    unsigned char plain[ 4 ];
 
2137
    unsigned char cypher[ 5 ];
 
2138
    char result[ 8 ];
 
2139
    char *rv;
 
2140
 
 
2141
    printf("Test 011 (PL_Base64Decode, double characters, equals)                 ..."); fflush(stdout);
 
2142
 
 
2143
    plain[2] = plain[3] = (unsigned char)0;
 
2144
    cypher[3] = (unsigned char)'=';
 
2145
    cypher[4] = (unsigned char)0;
 
2146
 
 
2147
    for( a = 0; a < 64; a++ )
 
2148
    {
 
2149
        cypher[0] = base[a];
 
2150
        for( b = 0; b < 4; b++ )
 
2151
        {
 
2152
            plain[0] = (a*4) + b;
 
2153
            for( c = 0; c < 16; c++ )
 
2154
            {
 
2155
                cypher[1] = base[b*16 + c];
 
2156
                for( d = 0; d < 16; d++ )
 
2157
                {
 
2158
                    plain[1] = c*16 + d;
 
2159
                    cypher[2] = base[d*4];
 
2160
 
 
2161
                    rv = PL_Base64Decode((char *)cypher, 4, result);
 
2162
                    if( rv != result )
 
2163
                    {
 
2164
                        printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
 
2165
                        return PR_FALSE;
 
2166
                    }
 
2167
 
 
2168
                    if( 0 != PL_strncmp((char *)plain, result, 2) )
 
2169
                    {
 
2170
                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
 
2171
                               a, b, c, d, plain, result);
 
2172
                        return PR_FALSE;
 
2173
                    }
 
2174
                }
 
2175
            }
 
2176
        }
 
2177
    }
 
2178
 
 
2179
    printf("PASS\n");
 
2180
    return PR_TRUE;
 
2181
}
 
2182
 
 
2183
/* PL_Base64Decode, double characters */
 
2184
PRBool test_012(void)
 
2185
{
 
2186
    PRUint32 a, b, c, d;
 
2187
    unsigned char plain[ 4 ];
 
2188
    unsigned char cypher[ 5 ];
 
2189
    char result[ 8 ];
 
2190
    char *rv;
 
2191
 
 
2192
    printf("Test 012 (PL_Base64Decode, double characters, no equals)              ..."); fflush(stdout);
 
2193
 
 
2194
    plain[2] = plain[3] = (unsigned char)0;
 
2195
    cypher[3] = (unsigned char)0;
 
2196
    cypher[4] = (unsigned char)0;
 
2197
 
 
2198
    for( a = 0; a < 64; a++ )
 
2199
    {
 
2200
        cypher[0] = base[a];
 
2201
        for( b = 0; b < 4; b++ )
 
2202
        {
 
2203
            plain[0] = (a*4) + b;
 
2204
            for( c = 0; c < 16; c++ )
 
2205
            {
 
2206
                cypher[1] = base[b*16 + c];
 
2207
                for( d = 0; d < 16; d++ )
 
2208
                {
 
2209
                    plain[1] = c*16 + d;
 
2210
                    cypher[2] = base[d*4];
 
2211
 
 
2212
                    rv = PL_Base64Decode((char *)cypher, 3, result);
 
2213
                    if( rv != result )
 
2214
                    {
 
2215
                        printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
 
2216
                        return PR_FALSE;
 
2217
                    }
 
2218
 
 
2219
                    if( 0 != PL_strncmp((char *)plain, result, 2) )
 
2220
                    {
 
2221
                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
 
2222
                               a, b, c, d, cypher, result);
 
2223
                        return PR_FALSE;
 
2224
                    }
 
2225
                }
 
2226
            }
 
2227
        }
 
2228
    }
 
2229
 
 
2230
    printf("PASS\n");
 
2231
    return PR_TRUE;
 
2232
}
 
2233
 
 
2234
/* PL_Base64Decode, triple characters */
 
2235
PRBool test_013(void)
 
2236
{
 
2237
    PRUint32 a, b, c, d, e, f;
 
2238
    unsigned char plain[ 4 ];
 
2239
    unsigned char cypher[ 5 ];
 
2240
    char result[ 8 ];
 
2241
    char *rv;
 
2242
 
 
2243
    printf("Test 013 (PL_Base64Decode, triple characters)                         ..."); fflush(stdout);
 
2244
 
 
2245
    cypher[4] = (unsigned char)0;
 
2246
 
 
2247
    for( a = 0; a < 64; a++ )
 
2248
    {
 
2249
        cypher[0] = base[a];
 
2250
        for( b = 0; b < 4; b++ )
 
2251
        {
 
2252
            plain[0] = (a*4) + b;
 
2253
            for( c = 0; c < 16; c++ )
 
2254
            {
 
2255
                cypher[1] = base[b*16 + c];
 
2256
                for( d = 0; d < 16; d++ )
 
2257
                {
 
2258
                    plain[1] = c*16 + d;
 
2259
                    for( e = 0; e < 4; e++ )
 
2260
                    {
 
2261
                        cypher[2] = base[d*4 + e];
 
2262
                        for( f = 0; f < 64; f++ )
 
2263
                        {
 
2264
                            plain[2] = e * 64 + f;
 
2265
                            cypher[3] = base[f];
 
2266
 
 
2267
                            rv = PL_Base64Decode((char *)cypher, 4, result);
 
2268
                            if( rv != result )
 
2269
                            {
 
2270
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b, c, d, e, f);
 
2271
                                return PR_FALSE;
 
2272
                            }
 
2273
 
 
2274
                            if( 0 != PL_strncmp((char *)plain, result, 3) )
 
2275
                            {
 
2276
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.3s.\"\n",
 
2277
                                       a, b, c, d, e, f, plain, result);
 
2278
                                return PR_FALSE;
 
2279
                            }
 
2280
                        }
 
2281
                    }
 
2282
                }
 
2283
            }
 
2284
        }
 
2285
    }
 
2286
 
 
2287
    printf("PASS\n");
 
2288
    return PR_TRUE;
 
2289
}
 
2290
 
 
2291
/* PL_Base64Decode, random strings */
 
2292
PRBool test_014(void)
 
2293
{
 
2294
    int i;
 
2295
    char result[ 4096 ];
 
2296
 
 
2297
    printf("Test 014 (PL_Base64Decode, random strings, equals)                    ..."); fflush(stdout);
 
2298
 
 
2299
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2300
    {
 
2301
        PRUint32 clen = PL_strlen(array[i].cyphertext);
 
2302
        PRUint32 plen = (clen * 3) / 4;
 
2303
 
 
2304
        char *rv = PL_Base64Decode(array[i].cyphertext, clen, result);
 
2305
 
 
2306
        if( rv != result )
 
2307
        {
 
2308
            printf("FAIL\n\t(%d): return value\n", i);
 
2309
            return PR_FALSE;
 
2310
        }
 
2311
 
 
2312
        if( 0 == (clen & 3) )
 
2313
        {
 
2314
            if( '=' == array[i].cyphertext[clen-1] )
 
2315
            {
 
2316
                if( '=' == array[i].cyphertext[clen-2] )
 
2317
                {
 
2318
                    plen -= 2;
 
2319
                }
 
2320
                else
 
2321
                {
 
2322
                    plen -= 1;
 
2323
                }
 
2324
            }
 
2325
        }
 
2326
 
 
2327
        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
 
2328
        {
 
2329
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
 
2330
                   i, array[i].cyphertext, array[i].plaintext, plen, result);
 
2331
            return PR_FALSE;
 
2332
        }
 
2333
    }
 
2334
 
 
2335
    printf("PASS\n");
 
2336
    return PR_TRUE;
 
2337
}
 
2338
 
 
2339
/* PL_Base64Decode, random strings */
 
2340
PRBool test_015(void)
 
2341
{
 
2342
    int i;
 
2343
    char buffer[ 4096 ];
 
2344
    char result[ 4096 ];
 
2345
    char *rv;
 
2346
 
 
2347
    printf("Test 015 (PL_Base64Decode, random strings, no equals)                 ..."); fflush(stdout);
 
2348
 
 
2349
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2350
    {
 
2351
        PRUint32 clen, plen;
 
2352
 
 
2353
        PL_strcpy(buffer, array[i].cyphertext);
 
2354
        clen = PL_strlen(buffer);
 
2355
 
 
2356
        if( 0 == (clen & 3) )
 
2357
        {
 
2358
            if( '=' == buffer[clen-1] )
 
2359
            {
 
2360
                if( '=' == buffer[clen-2] )
 
2361
                {
 
2362
                    buffer[clen-2] = buffer[clen-1] = (char)0;
 
2363
                    clen -= 2;
 
2364
                }
 
2365
                else
 
2366
                {
 
2367
                    buffer[clen-1] = (char)0;
 
2368
                    clen -= 1;
 
2369
                }
 
2370
            }
 
2371
        }
 
2372
 
 
2373
        plen = (clen * 3) / 4;
 
2374
 
 
2375
        rv = PL_Base64Decode(buffer, clen, result);
 
2376
 
 
2377
        if( rv != result )
 
2378
        {
 
2379
            printf("FAIL\n\t(%d): return value\n", i);
 
2380
            return PR_FALSE;
 
2381
        }
 
2382
 
 
2383
        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
 
2384
        {
 
2385
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
 
2386
                   i, array[i].cyphertext, array[i].plaintext, plen, result);
 
2387
            return PR_FALSE;
 
2388
        }
 
2389
    }
 
2390
 
 
2391
    printf("PASS\n");
 
2392
    return PR_TRUE;
 
2393
}
 
2394
 
 
2395
/* PL_Base64Decode, single characters, malloc */
 
2396
PRBool test_016(void)
 
2397
{
 
2398
    PRUint32 a, b;
 
2399
    unsigned char plain[ 4 ];
 
2400
    unsigned char cypher[ 5 ];
 
2401
    char *rv;
 
2402
 
 
2403
    printf("Test 016 (PL_Base64Decode, single characters, equals, malloc)         ..."); fflush(stdout);
 
2404
 
 
2405
    plain[1] = plain[2] = plain[3] = (unsigned char)0;
 
2406
    cypher[2] = cypher[3] = (unsigned char)'=';
 
2407
    cypher[4] = (unsigned char)0;
 
2408
 
 
2409
    for( a = 0; a < 64; a++ )
 
2410
    {
 
2411
        cypher[0] = base[a];
 
2412
 
 
2413
        for( b = 0; b < 4; b++ )
 
2414
        {
 
2415
            plain[0] = (unsigned char)(a * 4 + b);
 
2416
            cypher[1] = base[(b * 16)];
 
2417
 
 
2418
            rv = PL_Base64Decode((char *)cypher, 4, (char *)0);
 
2419
            if( (char *)0 == rv )
 
2420
            {
 
2421
                printf("FAIL\n\t(%d, %d): no return value\n", a, b);
 
2422
                return PR_FALSE;
 
2423
            }
 
2424
 
 
2425
            if( 0 != PL_strcmp((char *)plain, rv) )
 
2426
            {
 
2427
                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
 
2428
                       a, b, plain, rv);
 
2429
                PR_DELETE(rv);
 
2430
                return PR_FALSE;
 
2431
            }
 
2432
 
 
2433
            PR_DELETE(rv);
 
2434
        }
 
2435
    }
 
2436
 
 
2437
    printf("PASS\n");
 
2438
    return PR_TRUE;
 
2439
}
 
2440
 
 
2441
/* PL_Base64Decode, single characters, malloc */
 
2442
PRBool test_017(void)
 
2443
{
 
2444
    PRUint32 a, b;
 
2445
    unsigned char plain[ 4 ];
 
2446
    unsigned char cypher[ 5 ];
 
2447
    char *rv;
 
2448
 
 
2449
    printf("Test 017 (PL_Base64Decode, single characters, no equals, malloc)      ..."); fflush(stdout);
 
2450
 
 
2451
    plain[1] = plain[2] = plain[3] = (unsigned char)0;
 
2452
    cypher[2] = cypher[3] = (unsigned char)0;
 
2453
    cypher[4] = (unsigned char)0;
 
2454
 
 
2455
    for( a = 0; a < 64; a++ )
 
2456
    {
 
2457
        cypher[0] = base[a];
 
2458
 
 
2459
        for( b = 0; b < 4; b++ )
 
2460
        {
 
2461
            plain[0] = (unsigned char)(a * 4 + b);
 
2462
            cypher[1] = base[(b * 16)];
 
2463
 
 
2464
            rv = PL_Base64Decode((char *)cypher, 2, (char *)0);
 
2465
            if( (char *)0 == rv )
 
2466
            {
 
2467
                printf("FAIL\n\t(%d, %d): no return value\n", a, b);
 
2468
                return PR_FALSE;
 
2469
            }
 
2470
 
 
2471
            if( 0 != PL_strcmp((char *)plain, rv) )
 
2472
            {
 
2473
                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
 
2474
                       a, b, plain, rv);
 
2475
                PR_DELETE(rv);
 
2476
                return PR_FALSE;
 
2477
            }
 
2478
 
 
2479
            PR_DELETE(rv);
 
2480
        }
 
2481
    }
 
2482
 
 
2483
    printf("PASS\n");
 
2484
    return PR_TRUE;
 
2485
}
 
2486
 
 
2487
/* PL_Base64Decode, double characters, malloc */
 
2488
PRBool test_018(void)
 
2489
{
 
2490
    PRUint32 a, b, c, d;
 
2491
    unsigned char plain[ 4 ];
 
2492
    unsigned char cypher[ 5 ];
 
2493
    char *rv;
 
2494
 
 
2495
    printf("Test 018 (PL_Base64Decode, double characters, equals, malloc)         ..."); fflush(stdout);
 
2496
 
 
2497
    plain[2] = plain[3] = (unsigned char)0;
 
2498
    cypher[3] = (unsigned char)'=';
 
2499
    cypher[4] = (unsigned char)0;
 
2500
 
 
2501
    for( a = 0; a < 64; a++ )
 
2502
    {
 
2503
        cypher[0] = base[a];
 
2504
        for( b = 0; b < 4; b++ )
 
2505
        {
 
2506
            plain[0] = (a*4) + b;
 
2507
            for( c = 0; c < 16; c++ )
 
2508
            {
 
2509
                cypher[1] = base[b*16 + c];
 
2510
                for( d = 0; d < 16; d++ )
 
2511
                {
 
2512
                    plain[1] = c*16 + d;
 
2513
                    cypher[2] = base[d*4];
 
2514
 
 
2515
                    rv = PL_Base64Decode((char *)cypher, 4, (char *)0);
 
2516
                    if( (char *)0 == rv )
 
2517
                    {
 
2518
                        printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
 
2519
                        return PR_FALSE;
 
2520
                    }
 
2521
 
 
2522
                    if( 0 != PL_strcmp((char *)plain, rv) )
 
2523
                    {
 
2524
                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
 
2525
                               a, b, c, d, plain, rv);
 
2526
                        PR_DELETE(rv);
 
2527
                        return PR_FALSE;
 
2528
                    }
 
2529
 
 
2530
                    PR_DELETE(rv);
 
2531
                }
 
2532
            }
 
2533
        }
 
2534
    }
 
2535
 
 
2536
    printf("PASS\n");
 
2537
    return PR_TRUE;
 
2538
}
 
2539
 
 
2540
/* PL_Base64Decode, double characters, malloc */
 
2541
PRBool test_019(void)
 
2542
{
 
2543
    PRUint32 a, b, c, d;
 
2544
    unsigned char plain[ 4 ];
 
2545
    unsigned char cypher[ 5 ];
 
2546
    char *rv;
 
2547
 
 
2548
    printf("Test 019 (PL_Base64Decode, double characters, no equals, malloc)      ..."); fflush(stdout);
 
2549
 
 
2550
    plain[2] = plain[3] = (unsigned char)0;
 
2551
    cypher[3] = (unsigned char)0;
 
2552
    cypher[4] = (unsigned char)0;
 
2553
 
 
2554
    for( a = 0; a < 64; a++ )
 
2555
    {
 
2556
        cypher[0] = base[a];
 
2557
        for( b = 0; b < 4; b++ )
 
2558
        {
 
2559
            plain[0] = (a*4) + b;
 
2560
            for( c = 0; c < 16; c++ )
 
2561
            {
 
2562
                cypher[1] = base[b*16 + c];
 
2563
                for( d = 0; d < 16; d++ )
 
2564
                {
 
2565
                    plain[1] = c*16 + d;
 
2566
                    cypher[2] = base[d*4];
 
2567
 
 
2568
                    rv = PL_Base64Decode((char *)cypher, 3, (char *)0);
 
2569
                    if( (char *)0 == rv )
 
2570
                    {
 
2571
                        printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
 
2572
                        return PR_FALSE;
 
2573
                    }
 
2574
 
 
2575
                    if( 0 != PL_strcmp((char *)plain, rv) )
 
2576
                    {
 
2577
                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
 
2578
                               a, b, c, d, cypher, rv);
 
2579
                        PR_DELETE(rv);
 
2580
                        return PR_FALSE;
 
2581
                    }
 
2582
 
 
2583
                    PR_DELETE(rv);
 
2584
                }
 
2585
            }
 
2586
        }
 
2587
    }
 
2588
 
 
2589
    printf("PASS\n");
 
2590
    return PR_TRUE;
 
2591
}
 
2592
 
 
2593
/* PL_Base64Decode, triple characters, malloc */
 
2594
PRBool test_020(void)
 
2595
{
 
2596
    PRUint32 a, b, c, d, e, f;
 
2597
    unsigned char plain[ 4 ];
 
2598
    unsigned char cypher[ 5 ];
 
2599
    char *rv;
 
2600
 
 
2601
    printf("Test 020 (PL_Base64Decode, triple characters, malloc)                 ..."); fflush(stdout);
 
2602
 
 
2603
    cypher[4] = (unsigned char)0;
 
2604
    plain[3] = (unsigned char)0;
 
2605
 
 
2606
    for( a = 0; a < 64; a++ )
 
2607
    {
 
2608
        cypher[0] = base[a];
 
2609
        for( b = 0; b < 4; b++ )
 
2610
        {
 
2611
            plain[0] = (a*4) + b;
 
2612
            for( c = 0; c < 16; c++ )
 
2613
            {
 
2614
                cypher[1] = base[b*16 + c];
 
2615
                for( d = 0; d < 16; d++ )
 
2616
                {
 
2617
                    plain[1] = c*16 + d;
 
2618
                    for( e = 0; e < 4; e++ )
 
2619
                    {
 
2620
                        cypher[2] = base[d*4 + e];
 
2621
                        for( f = 0; f < 64; f++ )
 
2622
                        {
 
2623
                            plain[2] = e * 64 + f;
 
2624
                            cypher[3] = base[f];
 
2625
 
 
2626
                            rv = PL_Base64Decode((char *)cypher, 4, (char *)0);
 
2627
                            if( (char *)0 == rv )
 
2628
                            {
 
2629
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a, b, c, d, e, f);
 
2630
                                return PR_FALSE;
 
2631
                            }
 
2632
 
 
2633
                            if( 0 != PL_strcmp((char *)plain, rv) )
 
2634
                            {
 
2635
                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.3s.\"\n",
 
2636
                                       a, b, c, d, e, f, plain, rv);
 
2637
                                PR_DELETE(rv);
 
2638
                                return PR_FALSE;
 
2639
                            }
 
2640
 
 
2641
                            PR_DELETE(rv);
 
2642
                        }
 
2643
                    }
 
2644
                }
 
2645
            }
 
2646
        }
 
2647
    }
 
2648
 
 
2649
    printf("PASS\n");
 
2650
    return PR_TRUE;
 
2651
}
 
2652
 
 
2653
/* PL_Base64Decode, random strings, malloc */
 
2654
PRBool test_021(void)
 
2655
{
 
2656
    int i;
 
2657
 
 
2658
    printf("Test 021 (PL_Base64Decode, random strings, equals, malloc)            ..."); fflush(stdout);
 
2659
 
 
2660
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2661
    {
 
2662
        PRUint32 clen = PL_strlen(array[i].cyphertext);
 
2663
 
 
2664
        char *rv = PL_Base64Decode(array[i].cyphertext, clen, (char *)0);
 
2665
 
 
2666
        if( (char *)0 == rv )
 
2667
        {
 
2668
            printf("FAIL\n\t(%d): no return value\n", i);
 
2669
            return PR_FALSE;
 
2670
        }
 
2671
 
 
2672
        if( 0 != PL_strcmp(rv, array[i].plaintext) )
 
2673
        {
 
2674
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
 
2675
                   i, array[i].cyphertext, array[i].plaintext, rv);
 
2676
            PR_DELETE(rv);
 
2677
            return PR_FALSE;
 
2678
        }
 
2679
 
 
2680
        PR_DELETE(rv);
 
2681
    }
 
2682
 
 
2683
    printf("PASS\n");
 
2684
    return PR_TRUE;
 
2685
}
 
2686
 
 
2687
/* PL_Base64Encode, random strings, malloc */
 
2688
PRBool test_022(void)
 
2689
{
 
2690
    int i;
 
2691
    char buffer[ 4096 ];
 
2692
    char *rv;
 
2693
 
 
2694
    printf("Test 022 (PL_Base64Decode, random strings, no equals, malloc)         ..."); fflush(stdout);
 
2695
 
 
2696
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2697
    {
 
2698
        PRUint32 clen;
 
2699
 
 
2700
        PL_strcpy(buffer, array[i].cyphertext);
 
2701
        clen = PL_strlen(buffer);
 
2702
 
 
2703
        if( 0 == (clen & 3) )
 
2704
        {
 
2705
            if( '=' == buffer[clen-1] )
 
2706
            {
 
2707
                if( '=' == buffer[clen-2] )
 
2708
                {
 
2709
                    buffer[clen-2] = buffer[clen-1] = (char)0;
 
2710
                    clen -= 2;
 
2711
                }
 
2712
                else
 
2713
                {
 
2714
                    buffer[clen-1] = (char)0;
 
2715
                    clen -= 1;
 
2716
                }
 
2717
            }
 
2718
        }
 
2719
 
 
2720
        rv = PL_Base64Decode(buffer, clen, (char *)0);
 
2721
 
 
2722
        if( (char *)0 == rv )
 
2723
        {
 
2724
            printf("FAIL\n\t(%d): no return value\n", i);
 
2725
            return PR_FALSE;
 
2726
        }
 
2727
 
 
2728
        if( 0 != PL_strcmp(rv, array[i].plaintext) )
 
2729
        {
 
2730
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
 
2731
                   i, array[i].cyphertext, array[i].plaintext, rv);
 
2732
            return PR_FALSE;
 
2733
        }
 
2734
    }
 
2735
 
 
2736
    printf("PASS\n");
 
2737
    return PR_TRUE;
 
2738
}
 
2739
 
 
2740
/* PL_Base64Encode, random strings */
 
2741
PRBool test_023(void)
 
2742
{
 
2743
    int i;
 
2744
    char result[ 4096 ];
 
2745
 
 
2746
    printf("Test 023 (PL_Base64Encode, random strings, strlen)                    ..."); fflush(stdout);
 
2747
 
 
2748
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2749
    {
 
2750
        PRUint32 plen = PL_strlen(array[i].plaintext);
 
2751
        PRUint32 clen = ((plen + 2)/3)*4;
 
2752
 
 
2753
        char *rv = PL_Base64Encode(array[i].plaintext, 0, result);
 
2754
 
 
2755
        if( rv != result )
 
2756
        {
 
2757
            printf("FAIL\n\t(%d): return value\n", i);
 
2758
            return PR_FALSE;
 
2759
        }
 
2760
 
 
2761
        if( 0 != PL_strncmp(result, array[i].cyphertext, clen) )
 
2762
        {
 
2763
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
 
2764
                   i, array[i].plaintext, array[i].cyphertext, clen, result);
 
2765
            return PR_FALSE;
 
2766
        }
 
2767
    }
 
2768
 
 
2769
    printf("PASS\n");
 
2770
    return PR_TRUE;
 
2771
}
 
2772
 
 
2773
/* PL_Base64Encode, random strings, malloc */
 
2774
PRBool test_024(void)
 
2775
{
 
2776
    int i;
 
2777
 
 
2778
    printf("Test 024 (PL_Base64Encode, random strings, malloc, strlen)            ..."); fflush(stdout);
 
2779
 
 
2780
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2781
    {
 
2782
        PRUint32 plen = PL_strlen(array[i].plaintext);
 
2783
        PRUint32 clen = ((plen + 2)/3)*4;
 
2784
 
 
2785
        char *rv = PL_Base64Encode(array[i].plaintext, 0, (char *)0);
 
2786
 
 
2787
        if( (char *)0 == rv )
 
2788
        {
 
2789
            printf("FAIL\n\t(%d): no return value\n", i);
 
2790
            return PR_FALSE;
 
2791
        }
 
2792
 
 
2793
        if( 0 != PL_strcmp(rv, array[i].cyphertext) )
 
2794
        {
 
2795
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
 
2796
                   i, array[i].plaintext, array[i].cyphertext, rv);
 
2797
            return PR_FALSE;
 
2798
        }
 
2799
    }
 
2800
 
 
2801
    printf("PASS\n");
 
2802
    return PR_TRUE;
 
2803
}
 
2804
 
 
2805
/* PL_Base64Decode, random strings */
 
2806
PRBool test_025(void)
 
2807
{
 
2808
    int i;
 
2809
    char result[ 4096 ];
 
2810
 
 
2811
    printf("Test 025 (PL_Base64Decode, random strings, equals, strlen)            ..."); fflush(stdout);
 
2812
 
 
2813
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2814
    {
 
2815
        PRUint32 clen = PL_strlen(array[i].cyphertext);
 
2816
        PRUint32 plen = (clen * 3) / 4;
 
2817
 
 
2818
        char *rv = PL_Base64Decode(array[i].cyphertext, 0, result);
 
2819
 
 
2820
        if( rv != result )
 
2821
        {
 
2822
            printf("FAIL\n\t(%d): return value\n", i);
 
2823
            return PR_FALSE;
 
2824
        }
 
2825
 
 
2826
        if( 0 == (clen & 3) )
 
2827
        {
 
2828
            if( '=' == array[i].cyphertext[clen-1] )
 
2829
            {
 
2830
                if( '=' == array[i].cyphertext[clen-2] )
 
2831
                {
 
2832
                    plen -= 2;
 
2833
                }
 
2834
                else
 
2835
                {
 
2836
                    plen -= 1;
 
2837
                }
 
2838
            }
 
2839
        }
 
2840
 
 
2841
        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
 
2842
        {
 
2843
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
 
2844
                   i, array[i].cyphertext, array[i].plaintext, plen, result);
 
2845
            return PR_FALSE;
 
2846
        }
 
2847
    }
 
2848
 
 
2849
    printf("PASS\n");
 
2850
    return PR_TRUE;
 
2851
}
 
2852
 
 
2853
/* PL_Base64Decode, random strings */
 
2854
PRBool test_026(void)
 
2855
{
 
2856
    int i;
 
2857
    char buffer[ 4096 ];
 
2858
    char result[ 4096 ];
 
2859
    char *rv;
 
2860
 
 
2861
    printf("Test 026 (PL_Base64Decode, random strings, no equals, strlen)         ..."); fflush(stdout);
 
2862
 
 
2863
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2864
    {
 
2865
        PRUint32 clen, plen;
 
2866
 
 
2867
        PL_strcpy(buffer, array[i].cyphertext);
 
2868
        clen = PL_strlen(buffer);
 
2869
 
 
2870
        if( 0 == (clen & 3) )
 
2871
        {
 
2872
            if( '=' == buffer[clen-1] )
 
2873
            {
 
2874
                if( '=' == buffer[clen-2] )
 
2875
                {
 
2876
                    buffer[clen-2] = buffer[clen-1] = (char)0;
 
2877
                    clen -= 2;
 
2878
                }
 
2879
                else
 
2880
                {
 
2881
                    buffer[clen-1] = (char)0;
 
2882
                    clen -= 1;
 
2883
                }
 
2884
            }
 
2885
        }
 
2886
 
 
2887
        plen = (clen * 3) / 4;
 
2888
 
 
2889
        rv = PL_Base64Decode(buffer, 0, result);
 
2890
 
 
2891
        if( rv != result )
 
2892
        {
 
2893
            printf("FAIL\n\t(%d): return value\n", i);
 
2894
            return PR_FALSE;
 
2895
        }
 
2896
 
 
2897
        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
 
2898
        {
 
2899
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
 
2900
                   i, array[i].cyphertext, array[i].plaintext, plen, result);
 
2901
            return PR_FALSE;
 
2902
        }
 
2903
    }
 
2904
 
 
2905
    printf("PASS\n");
 
2906
    return PR_TRUE;
 
2907
}
 
2908
 
 
2909
/* PL_Base64Decode, random strings, malloc */
 
2910
PRBool test_027(void)
 
2911
{
 
2912
    int i;
 
2913
 
 
2914
    printf("Test 027 (PL_Base64Decode, random strings, equals, malloc, strlen)    ..."); fflush(stdout);
 
2915
 
 
2916
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2917
    {
 
2918
        PRUint32 clen = PL_strlen(array[i].cyphertext);
 
2919
 
 
2920
        char *rv = PL_Base64Decode(array[i].cyphertext, 0, (char *)0);
 
2921
 
 
2922
        if( (char *)0 == rv )
 
2923
        {
 
2924
            printf("FAIL\n\t(%d): no return value\n", i);
 
2925
            return PR_FALSE;
 
2926
        }
 
2927
 
 
2928
        if( 0 != PL_strcmp(rv, array[i].plaintext) )
 
2929
        {
 
2930
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
 
2931
                   i, array[i].cyphertext, array[i].plaintext, rv);
 
2932
            PR_DELETE(rv);
 
2933
            return PR_FALSE;
 
2934
        }
 
2935
 
 
2936
        PR_DELETE(rv);
 
2937
    }
 
2938
 
 
2939
    printf("PASS\n");
 
2940
    return PR_TRUE;
 
2941
}
 
2942
 
 
2943
/* PL_Base64Encode, random strings, malloc */
 
2944
PRBool test_028(void)
 
2945
{
 
2946
    int i;
 
2947
    char buffer[ 4096 ];
 
2948
    char *rv;
 
2949
 
 
2950
    printf("Test 028 (PL_Base64Decode, random strings, no equals, malloc, strlen) ..."); fflush(stdout);
 
2951
 
 
2952
    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
 
2953
    {
 
2954
        PRUint32 clen;
 
2955
 
 
2956
        PL_strcpy(buffer, array[i].cyphertext);
 
2957
        clen = PL_strlen(buffer);
 
2958
 
 
2959
        if( 0 == (clen & 3) )
 
2960
        {
 
2961
            if( '=' == buffer[clen-1] )
 
2962
            {
 
2963
                if( '=' == buffer[clen-2] )
 
2964
                {
 
2965
                    buffer[clen-2] = buffer[clen-1] = (char)0;
 
2966
                    clen -= 2;
 
2967
                }
 
2968
                else
 
2969
                {
 
2970
                    buffer[clen-1] = (char)0;
 
2971
                    clen -= 1;
 
2972
                }
 
2973
            }
 
2974
        }
 
2975
 
 
2976
        rv = PL_Base64Decode(buffer, 0, (char *)0);
 
2977
 
 
2978
        if( (char *)0 == rv )
 
2979
        {
 
2980
            printf("FAIL\n\t(%d): no return value\n", i);
 
2981
            return PR_FALSE;
 
2982
        }
 
2983
 
 
2984
        if( 0 != PL_strcmp(rv, array[i].plaintext) )
 
2985
        {
 
2986
            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
 
2987
                   i, array[i].cyphertext, array[i].plaintext, rv);
 
2988
            return PR_FALSE;
 
2989
        }
 
2990
    }
 
2991
 
 
2992
    printf("PASS\n");
 
2993
    return PR_TRUE;
 
2994
}
 
2995
 
 
2996
int
 
2997
main
 
2998
(
 
2999
    int     argc,
 
3000
    char   *argv[]
 
3001
)
 
3002
{
 
3003
    printf("Testing the Portable Library base64 functions:\n");
 
3004
    printf("(warning: the \"triple characters\" tests are slow)\n");
 
3005
 
 
3006
    if( 1
 
3007
        && test_001()
 
3008
        && test_002()
 
3009
        && test_003()
 
3010
        && test_004()
 
3011
        && test_005()
 
3012
        && test_006()
 
3013
        && test_007()
 
3014
        && test_008()
 
3015
        && test_009()
 
3016
        && test_010()
 
3017
        && test_011()
 
3018
        && test_012()
 
3019
        && test_013()
 
3020
        && test_014()
 
3021
        && test_015()
 
3022
        && test_016()
 
3023
        && test_017()
 
3024
        && test_018()
 
3025
        && test_019()
 
3026
        && test_020()
 
3027
        && test_021()
 
3028
        && test_022()
 
3029
        && test_023()
 
3030
        && test_024()
 
3031
        && test_025()
 
3032
        && test_026()
 
3033
        && test_027()
 
3034
        && test_028()
 
3035
      )
 
3036
    {
 
3037
        printf("Suite passed.\n");
 
3038
        return 0;
 
3039
    }
 
3040
    else
 
3041
    {
 
3042
        printf("Suite failed.\n");
 
3043
        return 1;
 
3044
    }
 
3045
 
 
3046
    /*NOTREACHED*/
 
3047
}