3179 lines
107 KiB
C
3179 lines
107 KiB
C
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "plbase64.h"
|
|
#include "plstr.h"
|
|
#include "nspr.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
static unsigned char *base = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
|
|
/* PL_Base64Encode, single characters */
|
|
PRBool test_001(void) {
|
|
PRUint32 a, b;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 001 (PL_Base64Encode, single characters) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[1] = plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[2] = cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (unsigned char)(a * 4 + b);
|
|
cypher[1] = base[(b * 16)];
|
|
|
|
rv = PL_Base64Encode((char*)plain, 1, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d): return value\n", a, b);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)cypher, result, 4)) {
|
|
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.4s.\"\n", a, b,
|
|
cypher, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, double characters */
|
|
PRBool test_002(void) {
|
|
PRUint32 a, b, c, d;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 002 (PL_Base64Encode, double characters) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
cypher[2] = base[d * 4];
|
|
|
|
rv = PL_Base64Encode((char*)plain, 2, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)cypher, result, 4)) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
|
|
a, b, c, d, cypher, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, triple characters */
|
|
PRBool test_003(void) {
|
|
PRUint32 a, b, c, d, e, f;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 003 (PL_Base64Encode, triple characters) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
for (e = 0; e < 4; e++) {
|
|
cypher[2] = base[d * 4 + e];
|
|
for (f = 0; f < 64; f++) {
|
|
plain[2] = e * 64 + f;
|
|
cypher[3] = base[f];
|
|
|
|
rv = PL_Base64Encode((char*)plain, 3, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b,
|
|
c, d, e, f);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)cypher, result, 4)) {
|
|
printf(
|
|
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
|
|
"\"%.4s.\"\n",
|
|
a, b, c, d, e, f, cypher, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
static struct {
|
|
const char* plaintext;
|
|
const char* cyphertext;
|
|
} array[] = {
|
|
/* Cyphertexts generated with uuenview 0.5.13 */
|
|
{" ", "IA=="},
|
|
{".", "Lg=="},
|
|
{"/", "Lw=="},
|
|
{"C", "Qw=="},
|
|
{"H", "SA=="},
|
|
{"S", "Uw=="},
|
|
{"^", "Xg=="},
|
|
{"a", "YQ=="},
|
|
{"o", "bw=="},
|
|
{"t", "dA=="},
|
|
|
|
{"AB", "QUI="},
|
|
{"AH", "QUg="},
|
|
{"AQ", "QVE="},
|
|
{"BD", "QkQ="},
|
|
{"CR", "Q1I="},
|
|
{"CS", "Q1M="},
|
|
{"DB", "REI="},
|
|
{"DC", "REM="},
|
|
{"EK", "RUs="},
|
|
{"ET", "RVQ="},
|
|
{"IM", "SU0="},
|
|
{"JR", "SlI="},
|
|
{"LO", "TE8="},
|
|
{"LW", "TFc="},
|
|
{"ML", "TUw="},
|
|
{"SB", "U0I="},
|
|
{"TO", "VE8="},
|
|
{"VS", "VlM="},
|
|
{"WP", "V1A="},
|
|
/* legitimate two-letter words */
|
|
{"ad", "YWQ="},
|
|
{"ah", "YWg="},
|
|
{"am", "YW0="},
|
|
{"an", "YW4="},
|
|
{"as", "YXM="},
|
|
{"at", "YXQ="},
|
|
{"ax", "YXg="},
|
|
{"be", "YmU="},
|
|
{"by", "Ynk="},
|
|
{"do", "ZG8="},
|
|
{"go", "Z28="},
|
|
{"he", "aGU="},
|
|
{"hi", "aGk="},
|
|
{"if", "aWY="},
|
|
{"in", "aW4="},
|
|
{"is", "aXM="},
|
|
{"it", "aXQ="},
|
|
{"me", "bWU="},
|
|
{"my", "bXk="},
|
|
{"no", "bm8="},
|
|
{"of", "b2Y="},
|
|
{"on", "b24="},
|
|
{"or", "b3I="},
|
|
{"ox", "b3g="},
|
|
{"so", "c28="},
|
|
{"to", "dG8="},
|
|
{"up", "dXA="},
|
|
{"us", "dXM="},
|
|
{"we", "d2U="},
|
|
/* all three-letter entries in /usr/dict/words */
|
|
{"1st", "MXN0"},
|
|
{"2nd", "Mm5k"},
|
|
{"3rd", "M3Jk"},
|
|
{"4th", "NHRo"},
|
|
{"5th", "NXRo"},
|
|
{"6th", "NnRo"},
|
|
{"7th", "N3Ro"},
|
|
{"8th", "OHRo"},
|
|
{"9th", "OXRo"},
|
|
{"AAA", "QUFB"},
|
|
{"AAU", "QUFV"},
|
|
{"ABA", "QUJB"},
|
|
{"abc", "YWJj"},
|
|
{"Abe", "QWJl"},
|
|
{"Abo", "QWJv"},
|
|
{"ace", "YWNl"},
|
|
{"ACM", "QUNN"},
|
|
{"ACS", "QUNT"},
|
|
{"act", "YWN0"},
|
|
{"Ada", "QWRh"},
|
|
{"add", "YWRk"},
|
|
{"ado", "YWRv"},
|
|
{"aft", "YWZ0"},
|
|
{"age", "YWdl"},
|
|
{"ago", "YWdv"},
|
|
{"aid", "YWlk"},
|
|
{"ail", "YWls"},
|
|
{"aim", "YWlt"},
|
|
{"air", "YWly"},
|
|
{"ala", "YWxh"},
|
|
{"alb", "YWxi"},
|
|
{"ale", "YWxl"},
|
|
{"Ali", "QWxp"},
|
|
{"all", "YWxs"},
|
|
{"alp", "YWxw"},
|
|
{"A&M", "QSZN"},
|
|
{"AMA", "QU1B"},
|
|
{"ami", "YW1p"},
|
|
{"amp", "YW1w"},
|
|
{"Amy", "QW15"},
|
|
{"amy", "YW15"},
|
|
{"ana", "YW5h"},
|
|
{"and", "YW5k"},
|
|
{"ani", "YW5p"},
|
|
{"Ann", "QW5u"},
|
|
{"ant", "YW50"},
|
|
{"any", "YW55"},
|
|
{"A&P", "QSZQ"},
|
|
{"ape", "YXBl"},
|
|
{"Apr", "QXBy"},
|
|
{"APS", "QVBT"},
|
|
{"apt", "YXB0"},
|
|
{"arc", "YXJj"},
|
|
{"are", "YXJl"},
|
|
{"ark", "YXJr"},
|
|
{"arm", "YXJt"},
|
|
{"art", "YXJ0"},
|
|
{"a's", "YSdz"},
|
|
{"ash", "YXNo"},
|
|
{"ask", "YXNr"},
|
|
{"ass", "YXNz"},
|
|
{"ate", "YXRl"},
|
|
{"Aug", "QXVn"},
|
|
{"auk", "YXVr"},
|
|
{"Ave", "QXZl"},
|
|
{"awe", "YXdl"},
|
|
{"awl", "YXds"},
|
|
{"awn", "YXdu"},
|
|
{"axe", "YXhl"},
|
|
{"aye", "YXll"},
|
|
{"bad", "YmFk"},
|
|
{"bag", "YmFn"},
|
|
{"bah", "YmFo"},
|
|
{"bam", "YmFt"},
|
|
{"ban", "YmFu"},
|
|
{"bar", "YmFy"},
|
|
{"bat", "YmF0"},
|
|
{"bay", "YmF5"},
|
|
{"bed", "YmVk"},
|
|
{"bee", "YmVl"},
|
|
{"beg", "YmVn"},
|
|
{"bel", "YmVs"},
|
|
{"Ben", "QmVu"},
|
|
{"bet", "YmV0"},
|
|
{"bey", "YmV5"},
|
|
{"bib", "Ymli"},
|
|
{"bid", "Ymlk"},
|
|
{"big", "Ymln"},
|
|
{"bin", "Ymlu"},
|
|
{"bit", "Yml0"},
|
|
{"biz", "Yml6"},
|
|
{"BMW", "Qk1X"},
|
|
{"boa", "Ym9h"},
|
|
{"bob", "Ym9i"},
|
|
{"bog", "Ym9n"},
|
|
{"bon", "Ym9u"},
|
|
{"boo", "Ym9v"},
|
|
{"bop", "Ym9w"},
|
|
{"bow", "Ym93"},
|
|
{"box", "Ym94"},
|
|
{"boy", "Ym95"},
|
|
{"b's", "Yidz"},
|
|
{"BTL", "QlRM"},
|
|
{"BTU", "QlRV"},
|
|
{"bub", "YnVi"},
|
|
{"bud", "YnVk"},
|
|
{"bug", "YnVn"},
|
|
{"bum", "YnVt"},
|
|
{"bun", "YnVu"},
|
|
{"bus", "YnVz"},
|
|
{"but", "YnV0"},
|
|
{"buy", "YnV5"},
|
|
{"bye", "Ynll"},
|
|
{"cab", "Y2Fi"},
|
|
{"Cal", "Q2Fs"},
|
|
{"cam", "Y2Ft"},
|
|
{"can", "Y2Fu"},
|
|
{"cap", "Y2Fw"},
|
|
{"car", "Y2Fy"},
|
|
{"cat", "Y2F0"},
|
|
{"caw", "Y2F3"},
|
|
{"CBS", "Q0JT"},
|
|
{"CDC", "Q0RD"},
|
|
{"CEQ", "Q0VR"},
|
|
{"chi", "Y2hp"},
|
|
{"CIA", "Q0lB"},
|
|
{"cit", "Y2l0"},
|
|
{"cod", "Y29k"},
|
|
{"cog", "Y29n"},
|
|
{"col", "Y29s"},
|
|
{"con", "Y29u"},
|
|
{"coo", "Y29v"},
|
|
{"cop", "Y29w"},
|
|
{"cos", "Y29z"},
|
|
{"cot", "Y290"},
|
|
{"cow", "Y293"},
|
|
{"cox", "Y294"},
|
|
{"coy", "Y295"},
|
|
{"CPA", "Q1BB"},
|
|
{"cpu", "Y3B1"},
|
|
{"CRT", "Q1JU"},
|
|
{"cry", "Y3J5"},
|
|
{"c's", "Yydz"},
|
|
{"cub", "Y3Vi"},
|
|
{"cud", "Y3Vk"},
|
|
{"cue", "Y3Vl"},
|
|
{"cup", "Y3Vw"},
|
|
{"cur", "Y3Vy"},
|
|
{"cut", "Y3V0"},
|
|
{"dab", "ZGFi"},
|
|
{"dad", "ZGFk"},
|
|
{"dam", "ZGFt"},
|
|
{"Dan", "RGFu"},
|
|
{"Dar", "RGFy"},
|
|
{"day", "ZGF5"},
|
|
{"Dec", "RGVj"},
|
|
{"Dee", "RGVl"},
|
|
{"Del", "RGVs"},
|
|
{"den", "ZGVu"},
|
|
{"Des", "RGVz"},
|
|
{"dew", "ZGV3"},
|
|
{"dey", "ZGV5"},
|
|
{"did", "ZGlk"},
|
|
{"die", "ZGll"},
|
|
{"dig", "ZGln"},
|
|
{"dim", "ZGlt"},
|
|
{"din", "ZGlu"},
|
|
{"dip", "ZGlw"},
|
|
{"Dis", "RGlz"},
|
|
{"DNA", "RE5B"},
|
|
{"DOD", "RE9E"},
|
|
{"doe", "ZG9l"},
|
|
{"dog", "ZG9n"},
|
|
{"don", "ZG9u"},
|
|
{"dot", "ZG90"},
|
|
{"Dow", "RG93"},
|
|
{"dry", "ZHJ5"},
|
|
{"d's", "ZCdz"},
|
|
{"dub", "ZHVi"},
|
|
{"dud", "ZHVk"},
|
|
{"due", "ZHVl"},
|
|
{"dug", "ZHVn"},
|
|
{"dun", "ZHVu"},
|
|
{"dye", "ZHll"},
|
|
{"ear", "ZWFy"},
|
|
{"eat", "ZWF0"},
|
|
{"ebb", "ZWJi"},
|
|
{"EDT", "RURU"},
|
|
{"eel", "ZWVs"},
|
|
{"eft", "ZWZ0"},
|
|
{"e.g", "ZS5n"},
|
|
{"egg", "ZWdn"},
|
|
{"ego", "ZWdv"},
|
|
{"eke", "ZWtl"},
|
|
{"Eli", "RWxp"},
|
|
{"elk", "ZWxr"},
|
|
{"ell", "ZWxs"},
|
|
{"elm", "ZWxt"},
|
|
{"Ely", "RWx5"},
|
|
{"end", "ZW5k"},
|
|
{"Eng", "RW5n"},
|
|
{"EPA", "RVBB"},
|
|
{"era", "ZXJh"},
|
|
{"ere", "ZXJl"},
|
|
{"erg", "ZXJn"},
|
|
{"err", "ZXJy"},
|
|
{"e's", "ZSdz"},
|
|
{"EST", "RVNU"},
|
|
{"eta", "ZXRh"},
|
|
{"etc", "ZXRj"},
|
|
{"Eva", "RXZh"},
|
|
{"eve", "ZXZl"},
|
|
{"ewe", "ZXdl"},
|
|
{"eye", "ZXll"},
|
|
{"FAA", "RkFB"},
|
|
{"fad", "ZmFk"},
|
|
{"fag", "ZmFn"},
|
|
{"fan", "ZmFu"},
|
|
{"far", "ZmFy"},
|
|
{"fat", "ZmF0"},
|
|
{"fay", "ZmF5"},
|
|
{"FBI", "RkJJ"},
|
|
{"FCC", "RkND"},
|
|
{"FDA", "RkRB"},
|
|
{"Feb", "RmVi"},
|
|
{"fed", "ZmVk"},
|
|
{"fee", "ZmVl"},
|
|
{"few", "ZmV3"},
|
|
{"fib", "Zmli"},
|
|
{"fig", "Zmln"},
|
|
{"fin", "Zmlu"},
|
|
{"fir", "Zmly"},
|
|
{"fit", "Zml0"},
|
|
{"fix", "Zml4"},
|
|
{"Flo", "Rmxv"},
|
|
{"flu", "Zmx1"},
|
|
{"fly", "Zmx5"},
|
|
{"FMC", "Rk1D"},
|
|
{"fob", "Zm9i"},
|
|
{"foe", "Zm9l"},
|
|
{"fog", "Zm9n"},
|
|
{"fop", "Zm9w"},
|
|
{"for", "Zm9y"},
|
|
{"fox", "Zm94"},
|
|
{"FPC", "RlBD"},
|
|
{"fro", "ZnJv"},
|
|
{"fry", "ZnJ5"},
|
|
{"f's", "Zidz"},
|
|
{"FTC", "RlRD"},
|
|
{"fum", "ZnVt"},
|
|
{"fun", "ZnVu"},
|
|
{"fur", "ZnVy"},
|
|
{"gab", "Z2Fi"},
|
|
{"gad", "Z2Fk"},
|
|
{"gag", "Z2Fn"},
|
|
{"gal", "Z2Fs"},
|
|
{"gam", "Z2Ft"},
|
|
{"GAO", "R0FP"},
|
|
{"gap", "Z2Fw"},
|
|
{"gar", "Z2Fy"},
|
|
{"gas", "Z2Fz"},
|
|
{"gay", "Z2F5"},
|
|
{"gee", "Z2Vl"},
|
|
{"gel", "Z2Vs"},
|
|
{"gem", "Z2Vt"},
|
|
{"get", "Z2V0"},
|
|
{"gig", "Z2ln"},
|
|
{"Gil", "R2ls"},
|
|
{"gin", "Z2lu"},
|
|
{"GMT", "R01U"},
|
|
{"GNP", "R05Q"},
|
|
{"gnu", "Z251"},
|
|
{"Goa", "R29h"},
|
|
{"gob", "Z29i"},
|
|
{"god", "Z29k"},
|
|
{"gog", "Z29n"},
|
|
{"GOP", "R09Q"},
|
|
{"got", "Z290"},
|
|
{"GPO", "R1BP"},
|
|
{"g's", "Zydz"},
|
|
{"GSA", "R1NB"},
|
|
{"gum", "Z3Vt"},
|
|
{"gun", "Z3Vu"},
|
|
{"Gus", "R3Vz"},
|
|
{"gut", "Z3V0"},
|
|
{"guy", "Z3V5"},
|
|
{"gym", "Z3lt"},
|
|
{"gyp", "Z3lw"},
|
|
{"had", "aGFk"},
|
|
{"Hal", "SGFs"},
|
|
{"ham", "aGFt"},
|
|
{"Han", "SGFu"},
|
|
{"hap", "aGFw"},
|
|
{"hat", "aGF0"},
|
|
{"haw", "aGF3"},
|
|
{"hay", "aGF5"},
|
|
{"hem", "aGVt"},
|
|
{"hen", "aGVu"},
|
|
{"her", "aGVy"},
|
|
{"hew", "aGV3"},
|
|
{"hex", "aGV4"},
|
|
{"hey", "aGV5"},
|
|
{"hid", "aGlk"},
|
|
{"him", "aGlt"},
|
|
{"hip", "aGlw"},
|
|
{"his", "aGlz"},
|
|
{"hit", "aGl0"},
|
|
{"hob", "aG9i"},
|
|
{"hoc", "aG9j"},
|
|
{"hoe", "aG9l"},
|
|
{"hog", "aG9n"},
|
|
{"hoi", "aG9p"},
|
|
{"Hom", "SG9t"},
|
|
{"hop", "aG9w"},
|
|
{"hot", "aG90"},
|
|
{"how", "aG93"},
|
|
{"hoy", "aG95"},
|
|
{"h's", "aCdz"},
|
|
{"hub", "aHVi"},
|
|
{"hue", "aHVl"},
|
|
{"hug", "aHVn"},
|
|
{"huh", "aHVo"},
|
|
{"hum", "aHVt"},
|
|
{"Hun", "SHVu"},
|
|
{"hut", "aHV0"},
|
|
{"Ian", "SWFu"},
|
|
{"IBM", "SUJN"},
|
|
{"Ibn", "SWJu"},
|
|
{"ICC", "SUND"},
|
|
{"ice", "aWNl"},
|
|
{"icy", "aWN5"},
|
|
{"I'd", "SSdk"},
|
|
{"Ida", "SWRh"},
|
|
{"i.e", "aS5l"},
|
|
{"iii", "aWlp"},
|
|
{"Ike", "SWtl"},
|
|
{"ill", "aWxs"},
|
|
{"I'm", "SSdt"},
|
|
{"imp", "aW1w"},
|
|
{"Inc", "SW5j"},
|
|
{"ink", "aW5r"},
|
|
{"inn", "aW5u"},
|
|
{"ion", "aW9u"},
|
|
{"Ira", "SXJh"},
|
|
{"ire", "aXJl"},
|
|
{"irk", "aXJr"},
|
|
{"IRS", "SVJT"},
|
|
{"i's", "aSdz"},
|
|
{"Ito", "SXRv"},
|
|
{"ITT", "SVRU"},
|
|
{"ivy", "aXZ5"},
|
|
{"jab", "amFi"},
|
|
{"jag", "amFn"},
|
|
{"jam", "amFt"},
|
|
{"Jan", "SmFu"},
|
|
{"jar", "amFy"},
|
|
{"jaw", "amF3"},
|
|
{"jay", "amF5"},
|
|
{"Jed", "SmVk"},
|
|
{"jet", "amV0"},
|
|
{"Jew", "SmV3"},
|
|
{"jig", "amln"},
|
|
{"Jim", "Smlt"},
|
|
{"job", "am9i"},
|
|
{"Joe", "Sm9l"},
|
|
{"jog", "am9n"},
|
|
{"Jon", "Sm9u"},
|
|
{"jot", "am90"},
|
|
{"joy", "am95"},
|
|
{"j's", "aidz"},
|
|
{"jug", "anVn"},
|
|
{"jut", "anV0"},
|
|
{"Kay", "S2F5"},
|
|
{"keg", "a2Vn"},
|
|
{"ken", "a2Vu"},
|
|
{"key", "a2V5"},
|
|
{"kid", "a2lk"},
|
|
{"Kim", "S2lt"},
|
|
{"kin", "a2lu"},
|
|
{"kit", "a2l0"},
|
|
{"k's", "aydz"},
|
|
{"lab", "bGFi"},
|
|
{"lac", "bGFj"},
|
|
{"lad", "bGFk"},
|
|
{"lag", "bGFn"},
|
|
{"lam", "bGFt"},
|
|
{"Lao", "TGFv"},
|
|
{"lap", "bGFw"},
|
|
{"law", "bGF3"},
|
|
{"lax", "bGF4"},
|
|
{"lay", "bGF5"},
|
|
{"lea", "bGVh"},
|
|
{"led", "bGVk"},
|
|
{"lee", "bGVl"},
|
|
{"leg", "bGVn"},
|
|
{"Len", "TGVu"},
|
|
{"Leo", "TGVv"},
|
|
{"let", "bGV0"},
|
|
{"Lev", "TGV2"},
|
|
{"Lew", "TGV3"},
|
|
{"lew", "bGV3"},
|
|
{"lid", "bGlk"},
|
|
{"lie", "bGll"},
|
|
{"lim", "bGlt"},
|
|
{"Lin", "TGlu"},
|
|
{"lip", "bGlw"},
|
|
{"lit", "bGl0"},
|
|
{"Liz", "TGl6"},
|
|
{"lob", "bG9i"},
|
|
{"log", "bG9n"},
|
|
{"lop", "bG9w"},
|
|
{"Los", "TG9z"},
|
|
{"lot", "bG90"},
|
|
{"Lou", "TG91"},
|
|
{"low", "bG93"},
|
|
{"loy", "bG95"},
|
|
{"l's", "bCdz"},
|
|
{"LSI", "TFNJ"},
|
|
{"Ltd", "THRk"},
|
|
{"LTV", "TFRW"},
|
|
{"lug", "bHVn"},
|
|
{"lux", "bHV4"},
|
|
{"lye", "bHll"},
|
|
{"Mac", "TWFj"},
|
|
{"mad", "bWFk"},
|
|
{"Mae", "TWFl"},
|
|
{"man", "bWFu"},
|
|
{"Mao", "TWFv"},
|
|
{"map", "bWFw"},
|
|
{"mar", "bWFy"},
|
|
{"mat", "bWF0"},
|
|
{"maw", "bWF3"},
|
|
{"Max", "TWF4"},
|
|
{"max", "bWF4"},
|
|
{"may", "bWF5"},
|
|
{"MBA", "TUJB"},
|
|
{"Meg", "TWVn"},
|
|
{"Mel", "TWVs"},
|
|
{"men", "bWVu"},
|
|
{"met", "bWV0"},
|
|
{"mew", "bWV3"},
|
|
{"mid", "bWlk"},
|
|
{"mig", "bWln"},
|
|
{"min", "bWlu"},
|
|
{"MIT", "TUlU"},
|
|
{"mix", "bWl4"},
|
|
{"mob", "bW9i"},
|
|
{"Moe", "TW9l"},
|
|
{"moo", "bW9v"},
|
|
{"mop", "bW9w"},
|
|
{"mot", "bW90"},
|
|
{"mow", "bW93"},
|
|
{"MPH", "TVBI"},
|
|
{"Mrs", "TXJz"},
|
|
{"m's", "bSdz"},
|
|
{"mud", "bXVk"},
|
|
{"mug", "bXVn"},
|
|
{"mum", "bXVt"},
|
|
{"nab", "bmFi"},
|
|
{"nag", "bmFn"},
|
|
{"Nan", "TmFu"},
|
|
{"nap", "bmFw"},
|
|
{"Nat", "TmF0"},
|
|
{"nay", "bmF5"},
|
|
{"NBC", "TkJD"},
|
|
{"NBS", "TkJT"},
|
|
{"NCO", "TkNP"},
|
|
{"NCR", "TkNS"},
|
|
{"Ned", "TmVk"},
|
|
{"nee", "bmVl"},
|
|
{"net", "bmV0"},
|
|
{"new", "bmV3"},
|
|
{"nib", "bmli"},
|
|
{"NIH", "TklI"},
|
|
{"nil", "bmls"},
|
|
{"nip", "bmlw"},
|
|
{"nit", "bml0"},
|
|
{"NNE", "Tk5F"},
|
|
{"NNW", "Tk5X"},
|
|
{"nob", "bm9i"},
|
|
{"nod", "bm9k"},
|
|
{"non", "bm9u"},
|
|
{"nor", "bm9y"},
|
|
{"not", "bm90"},
|
|
{"Nov", "Tm92"},
|
|
{"now", "bm93"},
|
|
{"NRC", "TlJD"},
|
|
{"n's", "bidz"},
|
|
{"NSF", "TlNG"},
|
|
{"nun", "bnVu"},
|
|
{"nut", "bnV0"},
|
|
{"NYC", "TllD"},
|
|
{"NYU", "TllV"},
|
|
{"oaf", "b2Fm"},
|
|
{"oak", "b2Fr"},
|
|
{"oar", "b2Fy"},
|
|
{"oat", "b2F0"},
|
|
{"Oct", "T2N0"},
|
|
{"odd", "b2Rk"},
|
|
{"ode", "b2Rl"},
|
|
{"off", "b2Zm"},
|
|
{"oft", "b2Z0"},
|
|
{"ohm", "b2ht"},
|
|
{"oil", "b2ls"},
|
|
{"old", "b2xk"},
|
|
{"one", "b25l"},
|
|
{"opt", "b3B0"},
|
|
{"orb", "b3Ji"},
|
|
{"ore", "b3Jl"},
|
|
{"Orr", "T3Jy"},
|
|
{"o's", "bydz"},
|
|
{"Ott", "T3R0"},
|
|
{"our", "b3Vy"},
|
|
{"out", "b3V0"},
|
|
{"ova", "b3Zh"},
|
|
{"owe", "b3dl"},
|
|
{"owl", "b3ds"},
|
|
{"own", "b3du"},
|
|
{"pad", "cGFk"},
|
|
{"pal", "cGFs"},
|
|
{"Pam", "UGFt"},
|
|
{"pan", "cGFu"},
|
|
{"pap", "cGFw"},
|
|
{"par", "cGFy"},
|
|
{"pat", "cGF0"},
|
|
{"paw", "cGF3"},
|
|
{"pax", "cGF4"},
|
|
{"pay", "cGF5"},
|
|
{"Paz", "UGF6"},
|
|
{"PBS", "UEJT"},
|
|
{"PDP", "UERQ"},
|
|
{"pea", "cGVh"},
|
|
{"pee", "cGVl"},
|
|
{"peg", "cGVn"},
|
|
{"pen", "cGVu"},
|
|
{"pep", "cGVw"},
|
|
{"per", "cGVy"},
|
|
{"pet", "cGV0"},
|
|
{"pew", "cGV3"},
|
|
{"PhD", "UGhE"},
|
|
{"phi", "cGhp"},
|
|
{"pie", "cGll"},
|
|
{"pig", "cGln"},
|
|
{"pin", "cGlu"},
|
|
{"pip", "cGlw"},
|
|
{"pit", "cGl0"},
|
|
{"ply", "cGx5"},
|
|
{"pod", "cG9k"},
|
|
{"Poe", "UG9l"},
|
|
{"poi", "cG9p"},
|
|
{"pol", "cG9s"},
|
|
{"pop", "cG9w"},
|
|
{"pot", "cG90"},
|
|
{"pow", "cG93"},
|
|
{"ppm", "cHBt"},
|
|
{"pro", "cHJv"},
|
|
{"pry", "cHJ5"},
|
|
{"p's", "cCdz"},
|
|
{"psi", "cHNp"},
|
|
{"PTA", "UFRB"},
|
|
{"pub", "cHVi"},
|
|
{"PUC", "UFVD"},
|
|
{"pug", "cHVn"},
|
|
{"pun", "cHVu"},
|
|
{"pup", "cHVw"},
|
|
{"pus", "cHVz"},
|
|
{"put", "cHV0"},
|
|
{"PVC", "UFZD"},
|
|
{"QED", "UUVE"},
|
|
{"q's", "cSdz"},
|
|
{"qua", "cXVh"},
|
|
{"quo", "cXVv"},
|
|
{"Rae", "UmFl"},
|
|
{"rag", "cmFn"},
|
|
{"raj", "cmFq"},
|
|
{"ram", "cmFt"},
|
|
{"ran", "cmFu"},
|
|
{"rap", "cmFw"},
|
|
{"rat", "cmF0"},
|
|
{"raw", "cmF3"},
|
|
{"ray", "cmF5"},
|
|
{"RCA", "UkNB"},
|
|
{"R&D", "UiZE"},
|
|
{"reb", "cmVi"},
|
|
{"red", "cmVk"},
|
|
{"rep", "cmVw"},
|
|
{"ret", "cmV0"},
|
|
{"rev", "cmV2"},
|
|
{"Rex", "UmV4"},
|
|
{"rho", "cmhv"},
|
|
{"rib", "cmli"},
|
|
{"rid", "cmlk"},
|
|
{"rig", "cmln"},
|
|
{"rim", "cmlt"},
|
|
{"Rio", "Umlv"},
|
|
{"rip", "cmlw"},
|
|
{"RNA", "Uk5B"},
|
|
{"rob", "cm9i"},
|
|
{"rod", "cm9k"},
|
|
{"roe", "cm9l"},
|
|
{"Ron", "Um9u"},
|
|
{"rot", "cm90"},
|
|
{"row", "cm93"},
|
|
{"Roy", "Um95"},
|
|
{"RPM", "UlBN"},
|
|
{"r's", "cidz"},
|
|
{"rub", "cnVi"},
|
|
{"rue", "cnVl"},
|
|
{"rug", "cnVn"},
|
|
{"rum", "cnVt"},
|
|
{"run", "cnVu"},
|
|
{"rut", "cnV0"},
|
|
{"rye", "cnll"},
|
|
{"sac", "c2Fj"},
|
|
{"sad", "c2Fk"},
|
|
{"sag", "c2Fn"},
|
|
{"Sal", "U2Fs"},
|
|
{"Sam", "U2Ft"},
|
|
{"San", "U2Fu"},
|
|
{"Sao", "U2Fv"},
|
|
{"sap", "c2Fw"},
|
|
{"sat", "c2F0"},
|
|
{"saw", "c2F3"},
|
|
{"sax", "c2F4"},
|
|
{"say", "c2F5"},
|
|
{"Sci", "U2Np"},
|
|
{"SCM", "U0NN"},
|
|
{"sea", "c2Vh"},
|
|
{"sec", "c2Vj"},
|
|
{"see", "c2Vl"},
|
|
{"sen", "c2Vu"},
|
|
{"seq", "c2Vx"},
|
|
{"set", "c2V0"},
|
|
{"sew", "c2V3"},
|
|
{"sex", "c2V4"},
|
|
{"she", "c2hl"},
|
|
{"Shu", "U2h1"},
|
|
{"shy", "c2h5"},
|
|
{"sib", "c2li"},
|
|
{"sic", "c2lj"},
|
|
{"sin", "c2lu"},
|
|
{"sip", "c2lw"},
|
|
{"sir", "c2ly"},
|
|
{"sis", "c2lz"},
|
|
{"sit", "c2l0"},
|
|
{"six", "c2l4"},
|
|
{"ski", "c2tp"},
|
|
{"sky", "c2t5"},
|
|
{"sly", "c2x5"},
|
|
{"sob", "c29i"},
|
|
{"Soc", "U29j"},
|
|
{"sod", "c29k"},
|
|
{"Sol", "U29s"},
|
|
{"son", "c29u"},
|
|
{"sop", "c29w"},
|
|
{"sou", "c291"},
|
|
{"sow", "c293"},
|
|
{"soy", "c295"},
|
|
{"spa", "c3Bh"},
|
|
{"spy", "c3B5"},
|
|
{"Sri", "U3Jp"},
|
|
{"s's", "cydz"},
|
|
{"SSE", "U1NF"},
|
|
{"SST", "U1NU"},
|
|
{"SSW", "U1NX"},
|
|
{"Stu", "U3R1"},
|
|
{"sub", "c3Vi"},
|
|
{"sud", "c3Vk"},
|
|
{"sue", "c3Vl"},
|
|
{"sum", "c3Vt"},
|
|
{"sun", "c3Vu"},
|
|
{"sup", "c3Vw"},
|
|
{"Sus", "U3Vz"},
|
|
{"tab", "dGFi"},
|
|
{"tad", "dGFk"},
|
|
{"tag", "dGFn"},
|
|
{"tam", "dGFt"},
|
|
{"tan", "dGFu"},
|
|
{"tao", "dGFv"},
|
|
{"tap", "dGFw"},
|
|
{"tar", "dGFy"},
|
|
{"tat", "dGF0"},
|
|
{"tau", "dGF1"},
|
|
{"tax", "dGF4"},
|
|
{"tea", "dGVh"},
|
|
{"Ted", "VGVk"},
|
|
{"ted", "dGVk"},
|
|
{"tee", "dGVl"},
|
|
{"Tel", "VGVs"},
|
|
{"ten", "dGVu"},
|
|
{"the", "dGhl"},
|
|
{"thy", "dGh5"},
|
|
{"tic", "dGlj"},
|
|
{"tid", "dGlk"},
|
|
{"tie", "dGll"},
|
|
{"til", "dGls"},
|
|
{"Tim", "VGlt"},
|
|
{"tin", "dGlu"},
|
|
{"tip", "dGlw"},
|
|
{"tit", "dGl0"},
|
|
{"TNT", "VE5U"},
|
|
{"toe", "dG9l"},
|
|
{"tog", "dG9n"},
|
|
{"Tom", "VG9t"},
|
|
{"ton", "dG9u"},
|
|
{"too", "dG9v"},
|
|
{"top", "dG9w"},
|
|
{"tor", "dG9y"},
|
|
{"tot", "dG90"},
|
|
{"tow", "dG93"},
|
|
{"toy", "dG95"},
|
|
{"TRW", "VFJX"},
|
|
{"try", "dHJ5"},
|
|
{"t's", "dCdz"},
|
|
{"TTL", "VFRM"},
|
|
{"TTY", "VFRZ"},
|
|
{"tub", "dHVi"},
|
|
{"tug", "dHVn"},
|
|
{"tum", "dHVt"},
|
|
{"tun", "dHVu"},
|
|
{"TVA", "VFZB"},
|
|
{"TWA", "VFdB"},
|
|
{"two", "dHdv"},
|
|
{"TWX", "VFdY"},
|
|
{"ugh", "dWdo"},
|
|
{"UHF", "VUhG"},
|
|
{"Uri", "VXJp"},
|
|
{"urn", "dXJu"},
|
|
{"U.S", "VS5T"},
|
|
{"u's", "dSdz"},
|
|
{"USA", "VVNB"},
|
|
{"USC", "VVND"},
|
|
{"use", "dXNl"},
|
|
{"USN", "VVNO"},
|
|
{"van", "dmFu"},
|
|
{"vat", "dmF0"},
|
|
{"vee", "dmVl"},
|
|
{"vet", "dmV0"},
|
|
{"vex", "dmV4"},
|
|
{"VHF", "VkhG"},
|
|
{"via", "dmlh"},
|
|
{"vie", "dmll"},
|
|
{"vii", "dmlp"},
|
|
{"vis", "dmlz"},
|
|
{"viz", "dml6"},
|
|
{"von", "dm9u"},
|
|
{"vow", "dm93"},
|
|
{"v's", "didz"},
|
|
{"WAC", "V0FD"},
|
|
{"wad", "d2Fk"},
|
|
{"wag", "d2Fn"},
|
|
{"wah", "d2Fo"},
|
|
{"wan", "d2Fu"},
|
|
{"war", "d2Fy"},
|
|
{"was", "d2Fz"},
|
|
{"wax", "d2F4"},
|
|
{"way", "d2F5"},
|
|
{"web", "d2Vi"},
|
|
{"wed", "d2Vk"},
|
|
{"wee", "d2Vl"},
|
|
{"Wei", "V2Vp"},
|
|
{"wet", "d2V0"},
|
|
{"who", "d2hv"},
|
|
{"why", "d2h5"},
|
|
{"wig", "d2ln"},
|
|
{"win", "d2lu"},
|
|
{"wit", "d2l0"},
|
|
{"woe", "d29l"},
|
|
{"wok", "d29r"},
|
|
{"won", "d29u"},
|
|
{"woo", "d29v"},
|
|
{"wop", "d29w"},
|
|
{"wow", "d293"},
|
|
{"wry", "d3J5"},
|
|
{"w's", "dydz"},
|
|
{"x's", "eCdz"},
|
|
{"yah", "eWFo"},
|
|
{"yak", "eWFr"},
|
|
{"yam", "eWFt"},
|
|
{"yap", "eWFw"},
|
|
{"yaw", "eWF3"},
|
|
{"yea", "eWVh"},
|
|
{"yen", "eWVu"},
|
|
{"yet", "eWV0"},
|
|
{"yin", "eWlu"},
|
|
{"yip", "eWlw"},
|
|
{"yon", "eW9u"},
|
|
{"you", "eW91"},
|
|
{"yow", "eW93"},
|
|
{"y's", "eSdz"},
|
|
{"yuh", "eXVo"},
|
|
{"zag", "emFn"},
|
|
{"Zan", "WmFu"},
|
|
{"zap", "emFw"},
|
|
{"Zen", "WmVu"},
|
|
{"zig", "emln"},
|
|
{"zip", "emlw"},
|
|
{"Zoe", "Wm9l"},
|
|
{"zoo", "em9v"},
|
|
{"z's", "eidz"},
|
|
/* the false rumors file */
|
|
{"\"So when I die, the first thing I will see in heaven is a score list?\"",
|
|
"IlNvIHdoZW4gSSBkaWUsIHRoZSBmaXJzdCB0aGluZyBJIHdpbGwgc2VlIGluIGhlYXZlbiBpc"
|
|
"yBhIHNjb3JlIGxpc3Q/Ig=="},
|
|
{"1st Law of Hacking: leaving is much more difficult than entering.",
|
|
"MXN0IExhdyBvZiBIYWNraW5nOiBsZWF2aW5nIGlzIG11Y2ggbW9yZSBkaWZmaWN1bHQgdGhhb"
|
|
"iBlbnRlcmluZy4="},
|
|
{"2nd Law of Hacking: first in, first out.",
|
|
"Mm5kIExhdyBvZiBIYWNraW5nOiBmaXJzdCBpbiwgZmlyc3Qgb3V0Lg=="},
|
|
{"3rd Law of Hacking: the last blow counts most.",
|
|
"M3JkIExhdyBvZiBIYWNraW5nOiB0aGUgbGFzdCBibG93IGNvdW50cyBtb3N0Lg=="},
|
|
{"4th Law of Hacking: you will find the exit at the entrance.",
|
|
"NHRoIExhdyBvZiBIYWNraW5nOiB5b3Ugd2lsbCBmaW5kIHRoZSBleGl0IGF0IHRoZSBlbnRyY"
|
|
"W5jZS4="},
|
|
{"A chameleon imitating a mail daemon often delivers scrolls of fire.",
|
|
"QSBjaGFtZWxlb24gaW1pdGF0aW5nIGEgbWFpbCBkYWVtb24gb2Z0ZW4gZGVsaXZlcnMgc2Nyb"
|
|
"2xscyBvZiBmaXJlLg=="},
|
|
{"A cockatrice corpse is guaranteed to be untainted!",
|
|
"QSBjb2NrYXRyaWNlIGNvcnBzZSBpcyBndWFyYW50ZWVkIHRvIGJlIHVudGFpbnRlZCE="},
|
|
{"A dead cockatrice is just a dead lizard.",
|
|
"QSBkZWFkIGNvY2thdHJpY2UgaXMganVzdCBhIGRlYWQgbGl6YXJkLg=="},
|
|
{"A dragon is just a snake that ate a scroll of fire.",
|
|
"QSBkcmFnb24gaXMganVzdCBhIHNuYWtlIHRoYXQgYXRlIGEgc2Nyb2xsIG9mIGZpcmUu"},
|
|
{"A fading corridor enlightens your insight.",
|
|
"QSBmYWRpbmcgY29ycmlkb3IgZW5saWdodGVucyB5b3VyIGluc2lnaHQu"},
|
|
{"A glowing potion is too hot to drink.",
|
|
"QSBnbG93aW5nIHBvdGlvbiBpcyB0b28gaG90IHRvIGRyaW5rLg=="},
|
|
{"A good amulet may protect you against guards.",
|
|
"QSBnb29kIGFtdWxldCBtYXkgcHJvdGVjdCB5b3UgYWdhaW5zdCBndWFyZHMu"},
|
|
{"A lizard corpse is a good thing to turn undead.",
|
|
"QSBsaXphcmQgY29ycHNlIGlzIGEgZ29vZCB0aGluZyB0byB0dXJuIHVuZGVhZC4="},
|
|
{"A long worm can be defined recursively. So how should you attack it?",
|
|
"QSBsb25nIHdvcm0gY2FuIGJlIGRlZmluZWQgcmVjdXJzaXZlbHkuIFNvIGhvdyBzaG91bGQge"
|
|
"W91IGF0dGFjayBpdD8="},
|
|
{"A monstrous mind is a toy forever.",
|
|
"QSBtb25zdHJvdXMgbWluZCBpcyBhIHRveSBmb3JldmVyLg=="},
|
|
{"A nymph will be very pleased if you call her by her real name: Lorelei.",
|
|
"QSBueW1waCB3aWxsIGJlIHZlcnkgcGxlYXNlZCBpZiB5b3UgY2FsbCBoZXIgYnkgaGVyIHJlY"
|
|
"WwgbmFtZTogTG9yZWxlaS4="},
|
|
{"A ring of dungeon master control is a great find.",
|
|
"QSByaW5nIG9mIGR1bmdlb24gbWFzdGVyIGNvbnRyb2wgaXMgYSBncmVhdCBmaW5kLg=="},
|
|
{"A ring of extra ring finger is useless if not enchanted.",
|
|
"QSByaW5nIG9mIGV4dHJhIHJpbmcgZmluZ2VyIGlzIHVzZWxlc3MgaWYgbm90IGVuY2hhbnRlZ"
|
|
"C4="},
|
|
{"A rope may form a trail in a maze.",
|
|
"QSByb3BlIG1heSBmb3JtIGEgdHJhaWwgaW4gYSBtYXplLg=="},
|
|
{"A staff may recharge if you drop it for awhile.",
|
|
"QSBzdGFmZiBtYXkgcmVjaGFyZ2UgaWYgeW91IGRyb3AgaXQgZm9yIGF3aGlsZS4="},
|
|
{"A visit to the Zoo is very educational; you meet interesting animals.",
|
|
"QSB2aXNpdCB0byB0aGUgWm9vIGlzIHZlcnkgZWR1Y2F0aW9uYWw7IHlvdSBtZWV0IGludGVyZ"
|
|
"XN0aW5nIGFuaW1hbHMu"},
|
|
{"A wand of deaf is a more dangerous weapon than a wand of sheep.",
|
|
"QSB3YW5kIG9mIGRlYWYgaXMgYSBtb3JlIGRhbmdlcm91cyB3ZWFwb24gdGhhbiBhIHdhbmQgb"
|
|
"2Ygc2hlZXAu"},
|
|
{"A wand of vibration might bring the whole cave crashing about your ears.",
|
|
"QSB3YW5kIG9mIHZpYnJhdGlvbiBtaWdodCBicmluZyB0aGUgd2hvbGUgY2F2ZSBjcmFzaGluZ"
|
|
"yBhYm91dCB5b3VyIGVhcnMu"},
|
|
{"A winner never quits. A quitter never wins.",
|
|
"QSB3aW5uZXIgbmV2ZXIgcXVpdHMuIEEgcXVpdHRlciBuZXZlciB3aW5zLg=="},
|
|
{"A wish? Okay, make me a fortune cookie!",
|
|
"QSB3aXNoPyBPa2F5LCBtYWtlIG1lIGEgZm9ydHVuZSBjb29raWUh"},
|
|
{"Afraid of mimics? Try to wear a ring of true seeing.",
|
|
"QWZyYWlkIG9mIG1pbWljcz8gVHJ5IHRvIHdlYXIgYSByaW5nIG9mIHRydWUgc2VlaW5nLg="
|
|
"="},
|
|
{"All monsters are created evil, but some are more evil than others.",
|
|
"QWxsIG1vbnN0ZXJzIGFyZSBjcmVhdGVkIGV2aWwsIGJ1dCBzb21lIGFyZSBtb3JlIGV2aWwgd"
|
|
"GhhbiBvdGhlcnMu"},
|
|
{"Always attack a floating eye from behind!",
|
|
"QWx3YXlzIGF0dGFjayBhIGZsb2F0aW5nIGV5ZSBmcm9tIGJlaGluZCE="},
|
|
{"An elven cloak is always the height of fashion.",
|
|
"QW4gZWx2ZW4gY2xvYWsgaXMgYWx3YXlzIHRoZSBoZWlnaHQgb2YgZmFzaGlvbi4="},
|
|
{"Any small object that is accidentally dropped will hide under a larger "
|
|
"object.",
|
|
"QW55IHNtYWxsIG9iamVjdCB0aGF0IGlzIGFjY2lkZW50YWxseSBkcm9wcGVkIHdpbGwgaGlkZ"
|
|
"SB1bmRlciBhIGxhcmdlciBvYmplY3Qu"},
|
|
{"Balrogs do not appear above level 20.",
|
|
"QmFscm9ncyBkbyBub3QgYXBwZWFyIGFib3ZlIGxldmVsIDIwLg=="},
|
|
{"Banana peels work especially well against Keystone Kops.",
|
|
"QmFuYW5hIHBlZWxzIHdvcmsgZXNwZWNpYWxseSB3ZWxsIGFnYWluc3QgS2V5c3RvbmUgS29wc"
|
|
"y4="},
|
|
{"Be careful when eating bananas. Monsters might slip on the peels.",
|
|
"QmUgY2FyZWZ1bCB3aGVuIGVhdGluZyBiYW5hbmFzLiBNb25zdGVycyBtaWdodCBzbGlwIG9uI"
|
|
"HRoZSBwZWVscy4="},
|
|
{"Better leave the dungeon; otherwise you might get hurt badly.",
|
|
"QmV0dGVyIGxlYXZlIHRoZSBkdW5nZW9uOyBvdGhlcndpc2UgeW91IG1pZ2h0IGdldCBodXJ0I"
|
|
"GJhZGx5Lg=="},
|
|
{"Beware of the potion of nitroglycerin -- it's not for the weak of heart.",
|
|
"QmV3YXJlIG9mIHRoZSBwb3Rpb24gb2Ygbml0cm9nbHljZXJpbiAtLSBpdCdzIG5vdCBmb3Igd"
|
|
"GhlIHdlYWsgb2YgaGVhcnQu"},
|
|
{"Beware: there's always a chance that your wand explodes as you try to "
|
|
"zap it!",
|
|
"QmV3YXJlOiB0aGVyZSdzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHlvdXIgd2FuZCBleHBsb2Rlc"
|
|
"yBhcyB5b3UgdHJ5IHRvIHphcCBpdCE="},
|
|
{"Beyond the 23rd level lies a happy retirement in a room of your own.",
|
|
"QmV5b25kIHRoZSAyM3JkIGxldmVsIGxpZXMgYSBoYXBweSByZXRpcmVtZW50IGluIGEgcm9vb"
|
|
"SBvZiB5b3VyIG93bi4="},
|
|
{"Changing your suit without dropping your sword? You must be kidding!",
|
|
"Q2hhbmdpbmcgeW91ciBzdWl0IHdpdGhvdXQgZHJvcHBpbmcgeW91ciBzd29yZD8gWW91IG11c"
|
|
"3QgYmUga2lkZGluZyE="},
|
|
{"Cockatrices might turn themselves to stone faced with a mirror.",
|
|
"Q29ja2F0cmljZXMgbWlnaHQgdHVybiB0aGVtc2VsdmVzIHRvIHN0b25lIGZhY2VkIHdpdGggY"
|
|
"SBtaXJyb3Iu"},
|
|
{"Consumption of home-made food is strictly forbidden in this dungeon.",
|
|
"Q29uc3VtcHRpb24gb2YgaG9tZS1tYWRlIGZvb2QgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIGluI"
|
|
"HRoaXMgZHVuZ2Vvbi4="},
|
|
{"Dark room? Your chance to develop your photographs!",
|
|
"RGFyayByb29tPyBZb3VyIGNoYW5jZSB0byBkZXZlbG9wIHlvdXIgcGhvdG9ncmFwaHMh"},
|
|
{"Dark rooms are not *completely* dark: just wait and let your eyes "
|
|
"adjust...",
|
|
"RGFyayByb29tcyBhcmUgbm90ICpjb21wbGV0ZWx5KiBkYXJrOiBqdXN0IHdhaXQgYW5kIGxld"
|
|
"CB5b3VyIGV5ZXMgYWRqdXN0Li4u"},
|
|
{"David London sez, \"Hey guys, *WIELD* a lizard corpse against a "
|
|
"cockatrice!\"",
|
|
"RGF2aWQgTG9uZG9uIHNleiwgIkhleSBndXlzLCAqV0lFTEQqIGEgbGl6YXJkIGNvcnBzZSBhZ"
|
|
"2FpbnN0IGEgY29ja2F0cmljZSEi"},
|
|
{"Death is just life's way of telling you you've been fired.",
|
|
"RGVhdGggaXMganVzdCBsaWZlJ3Mgd2F5IG9mIHRlbGxpbmcgeW91IHlvdSd2ZSBiZWVuIGZpc"
|
|
"mVkLg=="},
|
|
{"Demi-gods don't need any help from the gods.",
|
|
"RGVtaS1nb2RzIGRvbid0IG5lZWQgYW55IGhlbHAgZnJvbSB0aGUgZ29kcy4="},
|
|
{"Demons *HATE* Priests and Priestesses.",
|
|
"RGVtb25zICpIQVRFKiBQcmllc3RzIGFuZCBQcmllc3Rlc3Nlcy4="},
|
|
{"Didn't you forget to pay?", "RGlkbid0IHlvdSBmb3JnZXQgdG8gcGF5Pw=="},
|
|
{"Didn't your mother tell you not to eat food off the floor?",
|
|
"RGlkbid0IHlvdXIgbW90aGVyIHRlbGwgeW91IG5vdCB0byBlYXQgZm9vZCBvZmYgdGhlIGZsb"
|
|
"29yPw=="},
|
|
{"Direct a direct hit on your direct opponent, directing in the right "
|
|
"direction.",
|
|
"RGlyZWN0IGEgZGlyZWN0IGhpdCBvbiB5b3VyIGRpcmVjdCBvcHBvbmVudCwgZGlyZWN0aW5nI"
|
|
"GluIHRoZSByaWdodCBkaXJlY3Rpb24u"},
|
|
{"Do you want to make more money? Sure, we all do! Join the Fort Ludios "
|
|
"guard!",
|
|
"RG8geW91IHdhbnQgdG8gbWFrZSBtb3JlIG1vbmV5PyBTdXJlLCB3ZSBhbGwgZG8hIEpvaW4gd"
|
|
"GhlIEZvcnQgTHVkaW9zIGd1YXJkIQ=="},
|
|
{"Don't eat too much: you might start hiccoughing!",
|
|
"RG9uJ3QgZWF0IHRvbyBtdWNoOiB5b3UgbWlnaHQgc3RhcnQgaGljY291Z2hpbmch"},
|
|
{"Don't play hack at your work; your boss might hit you!",
|
|
"RG9uJ3QgcGxheSBoYWNrIGF0IHlvdXIgd29yazsgeW91ciBib3NzIG1pZ2h0IGhpdCB5b3U"
|
|
"h"},
|
|
{"Don't tell a soul you found a secret door, otherwise it isn't a secret "
|
|
"anymore.",
|
|
"RG9uJ3QgdGVsbCBhIHNvdWwgeW91IGZvdW5kIGEgc2VjcmV0IGRvb3IsIG90aGVyd2lzZSBpd"
|
|
"CBpc24ndCBhIHNlY3JldCBhbnltb3JlLg=="},
|
|
{"Drinking potions of booze may land you in jail if you are under 21.",
|
|
"RHJpbmtpbmcgcG90aW9ucyBvZiBib296ZSBtYXkgbGFuZCB5b3UgaW4gamFpbCBpZiB5b3UgY"
|
|
"XJlIHVuZGVyIDIxLg=="},
|
|
{"Drop your vanity and get rid of your jewels! Pickpockets about!",
|
|
"RHJvcCB5b3VyIHZhbml0eSBhbmQgZ2V0IHJpZCBvZiB5b3VyIGpld2VscyEgUGlja3BvY2tld"
|
|
"HMgYWJvdXQh"},
|
|
{"Eat 10 cloves of garlic and keep all humans at a two-square distance.",
|
|
"RWF0IDEwIGNsb3ZlcyBvZiBnYXJsaWMgYW5kIGtlZXAgYWxsIGh1bWFucyBhdCBhIHR3by1zc"
|
|
"XVhcmUgZGlzdGFuY2Uu"},
|
|
{"Eels hide under mud. Use a unicorn to clear the water and make them "
|
|
"visible.",
|
|
"RWVscyBoaWRlIHVuZGVyIG11ZC4gVXNlIGEgdW5pY29ybiB0byBjbGVhciB0aGUgd2F0ZXIgY"
|
|
"W5kIG1ha2UgdGhlbSB2aXNpYmxlLg=="},
|
|
{"Engrave your wishes with a wand of wishing.",
|
|
"RW5ncmF2ZSB5b3VyIHdpc2hlcyB3aXRoIGEgd2FuZCBvZiB3aXNoaW5nLg=="},
|
|
{"Eventually you will come to admire the swift elegance of a retreating "
|
|
"nymph.",
|
|
"RXZlbnR1YWxseSB5b3Ugd2lsbCBjb21lIHRvIGFkbWlyZSB0aGUgc3dpZnQgZWxlZ2FuY2Ugb"
|
|
"2YgYSByZXRyZWF0aW5nIG55bXBoLg=="},
|
|
{"Ever heard hissing outside? I *knew* you hadn't!",
|
|
"RXZlciBoZWFyZCBoaXNzaW5nIG91dHNpZGU/IEkgKmtuZXcqIHlvdSBoYWRuJ3Qh"},
|
|
{"Ever lifted a dragon corpse?",
|
|
"RXZlciBsaWZ0ZWQgYSBkcmFnb24gY29ycHNlPw=="},
|
|
{"Ever seen a leocrotta dancing the tengu?",
|
|
"RXZlciBzZWVuIGEgbGVvY3JvdHRhIGRhbmNpbmcgdGhlIHRlbmd1Pw=="},
|
|
{"Ever seen your weapon glow plaid?",
|
|
"RXZlciBzZWVuIHlvdXIgd2VhcG9uIGdsb3cgcGxhaWQ/"},
|
|
{"Ever tamed a shopkeeper?", "RXZlciB0YW1lZCBhIHNob3BrZWVwZXI/"},
|
|
{"Ever tried digging through a Vault Guard?",
|
|
"RXZlciB0cmllZCBkaWdnaW5nIHRocm91Z2ggYSBWYXVsdCBHdWFyZD8="},
|
|
{"Ever tried enchanting a rope?",
|
|
"RXZlciB0cmllZCBlbmNoYW50aW5nIGEgcm9wZT8="},
|
|
{"Floating eyes can't stand Hawaiian shirts.",
|
|
"RmxvYXRpbmcgZXllcyBjYW4ndCBzdGFuZCBIYXdhaWlhbiBzaGlydHMu"},
|
|
{"For any remedy there is a misery.",
|
|
"Rm9yIGFueSByZW1lZHkgdGhlcmUgaXMgYSBtaXNlcnku"},
|
|
{"Giant bats turn into giant vampires.",
|
|
"R2lhbnQgYmF0cyB0dXJuIGludG8gZ2lhbnQgdmFtcGlyZXMu"},
|
|
{"Good day for overcoming obstacles. Try a steeplechase.",
|
|
"R29vZCBkYXkgZm9yIG92ZXJjb21pbmcgb2JzdGFjbGVzLiBUcnkgYSBzdGVlcGxlY2hhc2U"
|
|
"u"},
|
|
{"Half Moon tonight. (At least it's better than no Moon at all.)",
|
|
"SGFsZiBNb29uIHRvbmlnaHQuIChBdCBsZWFzdCBpdCdzIGJldHRlciB0aGFuIG5vIE1vb24gY"
|
|
"XQgYWxsLik="},
|
|
{"Help! I'm being held prisoner in a fortune cookie factory!",
|
|
"SGVscCEgSSdtIGJlaW5nIGhlbGQgcHJpc29uZXIgaW4gYSBmb3J0dW5lIGNvb2tpZSBmYWN0b"
|
|
"3J5IQ=="},
|
|
{"Housecats have nine lives, kittens only one.",
|
|
"SG91c2VjYXRzIGhhdmUgbmluZSBsaXZlcywga2l0dGVucyBvbmx5IG9uZS4="},
|
|
{"How long can you tread water?",
|
|
"SG93IGxvbmcgY2FuIHlvdSB0cmVhZCB3YXRlcj8="},
|
|
{"Hungry? There is an abundance of food on the next level.",
|
|
"SHVuZ3J5PyBUaGVyZSBpcyBhbiBhYnVuZGFuY2Ugb2YgZm9vZCBvbiB0aGUgbmV4dCBsZXZlb"
|
|
"C4="},
|
|
{"I guess you've never hit a mail daemon with the Amulet of Yendor...",
|
|
"SSBndWVzcyB5b3UndmUgbmV2ZXIgaGl0IGEgbWFpbCBkYWVtb24gd2l0aCB0aGUgQW11bGV0I"
|
|
"G9mIFllbmRvci4uLg=="},
|
|
{"If you are the shopkeeper, you can take things for free.",
|
|
"SWYgeW91IGFyZSB0aGUgc2hvcGtlZXBlciwgeW91IGNhbiB0YWtlIHRoaW5ncyBmb3IgZnJlZ"
|
|
"S4="},
|
|
{"If you can't learn to do it well, learn to enjoy doing it badly.",
|
|
"SWYgeW91IGNhbid0IGxlYXJuIHRvIGRvIGl0IHdlbGwsIGxlYXJuIHRvIGVuam95IGRvaW5nI"
|
|
"Gl0IGJhZGx5Lg=="},
|
|
{"If you thought the Wizard was bad, just wait till you meet the Warlord!",
|
|
"SWYgeW91IHRob3VnaHQgdGhlIFdpemFyZCB3YXMgYmFkLCBqdXN0IHdhaXQgdGlsbCB5b3Ugb"
|
|
"WVldCB0aGUgV2FybG9yZCE="},
|
|
{"If you turn blind, don't expect your dog to be turned into a seeing-eye "
|
|
"dog.",
|
|
"SWYgeW91IHR1cm4gYmxpbmQsIGRvbid0IGV4cGVjdCB5b3VyIGRvZyB0byBiZSB0dXJuZWQga"
|
|
"W50byBhIHNlZWluZy1leWUgZG9nLg=="},
|
|
{"If you want to feel great, you must eat something real big.",
|
|
"SWYgeW91IHdhbnQgdG8gZmVlbCBncmVhdCwgeW91IG11c3QgZWF0IHNvbWV0aGluZyByZWFsI"
|
|
"GJpZy4="},
|
|
{"If you want to float, you'd better eat a floating eye.",
|
|
"SWYgeW91IHdhbnQgdG8gZmxvYXQsIHlvdSdkIGJldHRlciBlYXQgYSBmbG9hdGluZyBleWU"
|
|
"u"},
|
|
{"If your ghost kills a player, it increases your score.",
|
|
"SWYgeW91ciBnaG9zdCBraWxscyBhIHBsYXllciwgaXQgaW5jcmVhc2VzIHlvdXIgc2NvcmU"
|
|
"u"},
|
|
{"Increase mindpower: Tame your own ghost!",
|
|
"SW5jcmVhc2UgbWluZHBvd2VyOiBUYW1lIHlvdXIgb3duIGdob3N0IQ=="},
|
|
{"It furthers one to see the great man.",
|
|
"SXQgZnVydGhlcnMgb25lIHRvIHNlZSB0aGUgZ3JlYXQgbWFuLg=="},
|
|
{"It's easy to overlook a monster in a wood.",
|
|
"SXQncyBlYXN5IHRvIG92ZXJsb29rIGEgbW9uc3RlciBpbiBhIHdvb2Qu"},
|
|
{"Just below any trapdoor there may be another one. Just keep falling!",
|
|
"SnVzdCBiZWxvdyBhbnkgdHJhcGRvb3IgdGhlcmUgbWF5IGJlIGFub3RoZXIgb25lLiBKdXN0I"
|
|
"GtlZXAgZmFsbGluZyE="},
|
|
{"Katanas are very sharp; watch you don't cut yourself.",
|
|
"S2F0YW5hcyBhcmUgdmVyeSBzaGFycDsgd2F0Y2ggeW91IGRvbid0IGN1dCB5b3Vyc2VsZi4"
|
|
"="},
|
|
{"Keep a clear mind: quaff clear potions.",
|
|
"S2VlcCBhIGNsZWFyIG1pbmQ6IHF1YWZmIGNsZWFyIHBvdGlvbnMu"},
|
|
{"Kicking the terminal doesn't hurt the monsters.",
|
|
"S2lja2luZyB0aGUgdGVybWluYWwgZG9lc24ndCBodXJ0IHRoZSBtb25zdGVycy4="},
|
|
{"Killer bees keep appearing till you kill their queen.",
|
|
"S2lsbGVyIGJlZXMga2VlcCBhcHBlYXJpbmcgdGlsbCB5b3Uga2lsbCB0aGVpciBxdWVlbi4"
|
|
"="},
|
|
{"Killer bunnies can be tamed with carrots only.",
|
|
"S2lsbGVyIGJ1bm5pZXMgY2FuIGJlIHRhbWVkIHdpdGggY2Fycm90cyBvbmx5Lg=="},
|
|
{"Latest news? Put `rec.games.roguelike.nethack' in your .newsrc!",
|
|
"TGF0ZXN0IG5ld3M/"
|
|
"IFB1dCBgcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrJyBpbiB5b3VyIC5uZXdzcmMh"},
|
|
{"Learn how to spell. Play NetHack!",
|
|
"TGVhcm4gaG93IHRvIHNwZWxsLiBQbGF5IE5ldEhhY2sh"},
|
|
{"Leprechauns hide their gold in a secret room.",
|
|
"TGVwcmVjaGF1bnMgaGlkZSB0aGVpciBnb2xkIGluIGEgc2VjcmV0IHJvb20u"},
|
|
{"Let your fingers do the walking on the yulkjhnb keys.",
|
|
"TGV0IHlvdXIgZmluZ2VycyBkbyB0aGUgd2Fsa2luZyBvbiB0aGUgeXVsa2pobmIga2V5cy4"
|
|
"="},
|
|
{"Let's face it: this time you're not going to win.",
|
|
"TGV0J3MgZmFjZSBpdDogdGhpcyB0aW1lIHlvdSdyZSBub3QgZ29pbmcgdG8gd2luLg=="},
|
|
{"Let's have a party, drink a lot of booze.",
|
|
"TGV0J3MgaGF2ZSBhIHBhcnR5LCBkcmluayBhIGxvdCBvZiBib296ZS4="},
|
|
{"Liquor sellers do not drink; they hate to see you twice.",
|
|
"TGlxdW9yIHNlbGxlcnMgZG8gbm90IGRyaW5rOyB0aGV5IGhhdGUgdG8gc2VlIHlvdSB0d2ljZ"
|
|
"S4="},
|
|
{"Lunar eclipse tonight. May as well quit now!",
|
|
"THVuYXIgZWNsaXBzZSB0b25pZ2h0LiBNYXkgYXMgd2VsbCBxdWl0IG5vdyE="},
|
|
{"Meeting your own ghost decreases your luck considerably!",
|
|
"TWVldGluZyB5b3VyIG93biBnaG9zdCBkZWNyZWFzZXMgeW91ciBsdWNrIGNvbnNpZGVyYWJse"
|
|
"SE="},
|
|
{"Money to invest? Take it to the local branch of the Magic Memory Vault!",
|
|
"TW9uZXkgdG8gaW52ZXN0PyBUYWtlIGl0IHRvIHRoZSBsb2NhbCBicmFuY2ggb2YgdGhlIE1hZ"
|
|
"2ljIE1lbW9yeSBWYXVsdCE="},
|
|
{"Monsters come from nowhere to hit you everywhere.",
|
|
"TW9uc3RlcnMgY29tZSBmcm9tIG5vd2hlcmUgdG8gaGl0IHlvdSBldmVyeXdoZXJlLg=="},
|
|
{"Monsters sleep because you are boring, not because they ever get tired.",
|
|
"TW9uc3RlcnMgc2xlZXAgYmVjYXVzZSB5b3UgYXJlIGJvcmluZywgbm90IGJlY2F1c2UgdGhle"
|
|
"SBldmVyIGdldCB0aXJlZC4="},
|
|
{"Most monsters prefer minced meat. That's why they are hitting you!",
|
|
"TW9zdCBtb25zdGVycyBwcmVmZXIgbWluY2VkIG1lYXQuIFRoYXQncyB3aHkgdGhleSBhcmUga"
|
|
"Gl0dGluZyB5b3Uh"},
|
|
{"Most of the bugs in NetHack are on the floor.",
|
|
"TW9zdCBvZiB0aGUgYnVncyBpbiBOZXRIYWNrIGFyZSBvbiB0aGUgZmxvb3Iu"},
|
|
{"Much ado Nothing Happens.", "TXVjaCBhZG8gTm90aGluZyBIYXBwZW5zLg=="},
|
|
{"Multi-player NetHack is a myth.",
|
|
"TXVsdGktcGxheWVyIE5ldEhhY2sgaXMgYSBteXRoLg=="},
|
|
{"NetHack is addictive. Too late, you're already hooked.",
|
|
"TmV0SGFjayBpcyBhZGRpY3RpdmUuIFRvbyBsYXRlLCB5b3UncmUgYWxyZWFkeSBob29rZWQ"
|
|
"u"},
|
|
{"Never ask a shopkeeper for a price list.",
|
|
"TmV2ZXIgYXNrIGEgc2hvcGtlZXBlciBmb3IgYSBwcmljZSBsaXN0Lg=="},
|
|
{"Never burn a tree, unless you like getting whacked with a +5 shovel.",
|
|
"TmV2ZXIgYnVybiBhIHRyZWUsIHVubGVzcyB5b3UgbGlrZSBnZXR0aW5nIHdoYWNrZWQgd2l0a"
|
|
"CBhICs1IHNob3ZlbC4="},
|
|
{"Never eat with glowing hands!",
|
|
"TmV2ZXIgZWF0IHdpdGggZ2xvd2luZyBoYW5kcyE="},
|
|
{"Never mind the monsters hitting you: they just replace the charwomen.",
|
|
"TmV2ZXIgbWluZCB0aGUgbW9uc3RlcnMgaGl0dGluZyB5b3U6IHRoZXkganVzdCByZXBsYWNlI"
|
|
"HRoZSBjaGFyd29tZW4u"},
|
|
{"Never play leapfrog with a unicorn.",
|
|
"TmV2ZXIgcGxheSBsZWFwZnJvZyB3aXRoIGEgdW5pY29ybi4="},
|
|
{"Never step on a cursed engraving.",
|
|
"TmV2ZXIgc3RlcCBvbiBhIGN1cnNlZCBlbmdyYXZpbmcu"},
|
|
{"Never swim with a camera: there's nothing to take pictures of.",
|
|
"TmV2ZXIgc3dpbSB3aXRoIGEgY2FtZXJhOiB0aGVyZSdzIG5vdGhpbmcgdG8gdGFrZSBwaWN0d"
|
|
"XJlcyBvZi4="},
|
|
{"Never teach your pet rust monster to fetch.",
|
|
"TmV2ZXIgdGVhY2ggeW91ciBwZXQgcnVzdCBtb25zdGVyIHRvIGZldGNoLg=="},
|
|
{"Never trust a random generator in magic fields.",
|
|
"TmV2ZXIgdHJ1c3QgYSByYW5kb20gZ2VuZXJhdG9yIGluIG1hZ2ljIGZpZWxkcy4="},
|
|
{"Never use a wand of death.", "TmV2ZXIgdXNlIGEgd2FuZCBvZiBkZWF0aC4="},
|
|
{"No level contains two shops. The maze is no level. So...",
|
|
"Tm8gbGV2ZWwgY29udGFpbnMgdHdvIHNob3BzLiBUaGUgbWF6ZSBpcyBubyBsZXZlbC4gU28uL"
|
|
"i4="},
|
|
{"No part of this fortune may be reproduced, stored in a retrieval system, "
|
|
"...",
|
|
"Tm8gcGFydCBvZiB0aGlzIGZvcnR1bmUgbWF5IGJlIHJlcHJvZHVjZWQsIHN0b3JlZCBpbiBhI"
|
|
"HJldHJpZXZhbCBzeXN0ZW0sIC4uLg=="},
|
|
{"Not all rumors are as misleading as this one.",
|
|
"Tm90IGFsbCBydW1vcnMgYXJlIGFzIG1pc2xlYWRpbmcgYXMgdGhpcyBvbmUu"},
|
|
{"Nymphs and nurses like beautiful rings.",
|
|
"TnltcGhzIGFuZCBudXJzZXMgbGlrZSBiZWF1dGlmdWwgcmluZ3Mu"},
|
|
{"Nymphs are blondes. Are you a gentleman?",
|
|
"TnltcGhzIGFyZSBibG9uZGVzLiBBcmUgeW91IGEgZ2VudGxlbWFuPw=="},
|
|
{"Offering a unicorn a worthless piece of glass might prove to be fatal!",
|
|
"T2ZmZXJpbmcgYSB1bmljb3JuIGEgd29ydGhsZXNzIHBpZWNlIG9mIGdsYXNzIG1pZ2h0IHByb"
|
|
"3ZlIHRvIGJlIGZhdGFsIQ=="},
|
|
{"Old hackers never die: young ones do.",
|
|
"T2xkIGhhY2tlcnMgbmV2ZXIgZGllOiB5b3VuZyBvbmVzIGRvLg=="},
|
|
{"One has to leave shops before closing time.",
|
|
"T25lIGhhcyB0byBsZWF2ZSBzaG9wcyBiZWZvcmUgY2xvc2luZyB0aW1lLg=="},
|
|
{"One homunculus a day keeps the doctor away.",
|
|
"T25lIGhvbXVuY3VsdXMgYSBkYXkga2VlcHMgdGhlIGRvY3RvciBhd2F5Lg=="},
|
|
{"One level further down somebody is getting killed, right now.",
|
|
"T25lIGxldmVsIGZ1cnRoZXIgZG93biBzb21lYm9keSBpcyBnZXR0aW5nIGtpbGxlZCwgcmlna"
|
|
"HQgbm93Lg=="},
|
|
{"Only a wizard can use a magic whistle.",
|
|
"T25seSBhIHdpemFyZCBjYW4gdXNlIGEgbWFnaWMgd2hpc3RsZS4="},
|
|
{"Only adventurers of evil alignment think of killing their dog.",
|
|
"T25seSBhZHZlbnR1cmVycyBvZiBldmlsIGFsaWdubWVudCB0aGluayBvZiBraWxsaW5nIHRoZ"
|
|
"WlyIGRvZy4="},
|
|
{"Only chaotic evils kill sleeping monsters.",
|
|
"T25seSBjaGFvdGljIGV2aWxzIGtpbGwgc2xlZXBpbmcgbW9uc3RlcnMu"},
|
|
{"Only real trappers escape traps.",
|
|
"T25seSByZWFsIHRyYXBwZXJzIGVzY2FwZSB0cmFwcy4="},
|
|
{"Only real wizards can write scrolls.",
|
|
"T25seSByZWFsIHdpemFyZHMgY2FuIHdyaXRlIHNjcm9sbHMu"},
|
|
{"Operation OVERKILL has started now.",
|
|
"T3BlcmF0aW9uIE9WRVJLSUxMIGhhcyBzdGFydGVkIG5vdy4="},
|
|
{"PLEASE ignore previous rumor.",
|
|
"UExFQVNFIGlnbm9yZSBwcmV2aW91cyBydW1vci4="},
|
|
{"Polymorph into an ettin; meet your opponents face to face to face.",
|
|
"UG9seW1vcnBoIGludG8gYW4gZXR0aW47IG1lZXQgeW91ciBvcHBvbmVudHMgZmFjZSB0byBmY"
|
|
"WNlIHRvIGZhY2Uu"},
|
|
{"Praying will frighten demons.",
|
|
"UHJheWluZyB3aWxsIGZyaWdodGVuIGRlbW9ucy4="},
|
|
{"Row (3x) that boat gently down the stream, Charon (4x), death is but a "
|
|
"dream.",
|
|
"Um93ICgzeCkgdGhhdCBib2F0IGdlbnRseSBkb3duIHRoZSBzdHJlYW0sIENoYXJvbiAoNHgpL"
|
|
"CBkZWF0aCBpcyBidXQgYSBkcmVhbS4="},
|
|
{"Running is good for your legs.",
|
|
"UnVubmluZyBpcyBnb29kIGZvciB5b3VyIGxlZ3Mu"},
|
|
{"Screw up your courage! You've screwed up everything else.",
|
|
"U2NyZXcgdXAgeW91ciBjb3VyYWdlISBZb3UndmUgc2NyZXdlZCB1cCBldmVyeXRoaW5nIGVsc"
|
|
"2Uu"},
|
|
{"Seepage? Leaky pipes? Rising damp? Summon the plumber!",
|
|
"U2VlcGFnZT8gTGVha3kgcGlwZXM/"
|
|
"IFJpc2luZyBkYW1wPyBTdW1tb24gdGhlIHBsdW1iZXIh"},
|
|
{"Segmentation fault (core dumped).",
|
|
"U2VnbWVudGF0aW9uIGZhdWx0IChjb3JlIGR1bXBlZCku"},
|
|
{"Shopkeepers sometimes die from old age.",
|
|
"U2hvcGtlZXBlcnMgc29tZXRpbWVzIGRpZSBmcm9tIG9sZCBhZ2Uu"},
|
|
{"Some mazes (especially small ones) have no solutions, says man 6 maze.",
|
|
"U29tZSBtYXplcyAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBoYXZlIG5vIHNvbHV0aW9ucywgc"
|
|
"2F5cyBtYW4gNiBtYXplLg=="},
|
|
{"Some questions the Sphynx asks just *don't* have any answers.",
|
|
"U29tZSBxdWVzdGlvbnMgdGhlIFNwaHlueCBhc2tzIGp1c3QgKmRvbid0KiBoYXZlIGFueSBhb"
|
|
"nN3ZXJzLg=="},
|
|
{"Sometimes \"mu\" is the answer.",
|
|
"U29tZXRpbWVzICJtdSIgaXMgdGhlIGFuc3dlci4="},
|
|
{"Sorry, no fortune this time. Better luck next cookie!",
|
|
"U29ycnksIG5vIGZvcnR1bmUgdGhpcyB0aW1lLiBCZXR0ZXIgbHVjayBuZXh0IGNvb2tpZSE"
|
|
"="},
|
|
{"Spare your scrolls of make-edible until it's really necessary!",
|
|
"U3BhcmUgeW91ciBzY3JvbGxzIG9mIG1ha2UtZWRpYmxlIHVudGlsIGl0J3MgcmVhbGx5IG5lY"
|
|
"2Vzc2FyeSE="},
|
|
{"Suddenly, the dungeon will collapse...",
|
|
"U3VkZGVubHksIHRoZSBkdW5nZW9uIHdpbGwgY29sbGFwc2UuLi4="},
|
|
{"Taming a mail daemon may cause a system security violation.",
|
|
"VGFtaW5nIGEgbWFpbCBkYWVtb24gbWF5IGNhdXNlIGEgc3lzdGVtIHNlY3VyaXR5IHZpb2xhd"
|
|
"Glvbi4="},
|
|
{"The crowd was so tough, the Stooges won't play the Dungeon anymore, nyuk "
|
|
"nyuk.",
|
|
"VGhlIGNyb3dkIHdhcyBzbyB0b3VnaCwgdGhlIFN0b29nZXMgd29uJ3QgcGxheSB0aGUgRHVuZ"
|
|
"2VvbiBhbnltb3JlLCBueXVrIG55dWsu"},
|
|
{"The leprechauns hide their treasure in a small hidden room.",
|
|
"VGhlIGxlcHJlY2hhdW5zIGhpZGUgdGhlaXIgdHJlYXN1cmUgaW4gYSBzbWFsbCBoaWRkZW4gc"
|
|
"m9vbS4="},
|
|
{"The longer the wand the better.",
|
|
"VGhlIGxvbmdlciB0aGUgd2FuZCB0aGUgYmV0dGVyLg=="},
|
|
{"The magic word is \"XYZZY\".", "VGhlIG1hZ2ljIHdvcmQgaXMgIlhZWlpZIi4="},
|
|
{"The meek shall inherit your bones files.",
|
|
"VGhlIG1lZWsgc2hhbGwgaW5oZXJpdCB5b3VyIGJvbmVzIGZpbGVzLg=="},
|
|
{"The mines are dark and deep, and I have levels to go before I sleep.",
|
|
"VGhlIG1pbmVzIGFyZSBkYXJrIGFuZCBkZWVwLCBhbmQgSSBoYXZlIGxldmVscyB0byBnbyBiZ"
|
|
"WZvcmUgSSBzbGVlcC4="},
|
|
{"The use of dynamite is dangerous.",
|
|
"VGhlIHVzZSBvZiBkeW5hbWl0ZSBpcyBkYW5nZXJvdXMu"},
|
|
{"There are no worms in the UNIX version.",
|
|
"VGhlcmUgYXJlIG5vIHdvcm1zIGluIHRoZSBVTklYIHZlcnNpb24u"},
|
|
{"There is a trap on this level!",
|
|
"VGhlcmUgaXMgYSB0cmFwIG9uIHRoaXMgbGV2ZWwh"},
|
|
{"They say that Demogorgon, Asmodeus, Orcus, Yeenoghu & Juiblex is no law "
|
|
"firm.",
|
|
"VGhleSBzYXkgdGhhdCBEZW1vZ29yZ29uLCBBc21vZGV1cywgT3JjdXMsIFllZW5vZ2h1ICYgS"
|
|
"nVpYmxleCBpcyBubyBsYXcgZmlybS4="},
|
|
{"They say that Geryon has an evil twin, beware!",
|
|
"VGhleSBzYXkgdGhhdCBHZXJ5b24gaGFzIGFuIGV2aWwgdHdpbiwgYmV3YXJlIQ=="},
|
|
{"They say that Medusa would make a terrible pet.",
|
|
"VGhleSBzYXkgdGhhdCBNZWR1c2Egd291bGQgbWFrZSBhIHRlcnJpYmxlIHBldC4="},
|
|
{"They say that NetHack bugs are Seldon planned.",
|
|
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGJ1Z3MgYXJlIFNlbGRvbiBwbGFubmVkLg=="},
|
|
{"They say that NetHack comes in 256 flavors.",
|
|
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGNvbWVzIGluIDI1NiBmbGF2b3JzLg=="},
|
|
{"They say that NetHack is just a computer game.",
|
|
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIGp1c3QgYSBjb21wdXRlciBnYW1lLg=="},
|
|
{"They say that NetHack is more than just a computer game.",
|
|
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG1vcmUgdGhhbiBqdXN0IGEgY29tcHV0ZXIgZ2FtZ"
|
|
"S4="},
|
|
{"They say that NetHack is never what it used to be.",
|
|
"VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG5ldmVyIHdoYXQgaXQgdXNlZCB0byBiZS4="},
|
|
{"They say that a baby dragon is too small to hurt or help you.",
|
|
"VGhleSBzYXkgdGhhdCBhIGJhYnkgZHJhZ29uIGlzIHRvbyBzbWFsbCB0byBodXJ0IG9yIGhlb"
|
|
"HAgeW91Lg=="},
|
|
{"They say that a black pudding is simply a brown pudding gone bad.",
|
|
"VGhleSBzYXkgdGhhdCBhIGJsYWNrIHB1ZGRpbmcgaXMgc2ltcGx5IGEgYnJvd24gcHVkZGluZ"
|
|
"yBnb25lIGJhZC4="},
|
|
{"They say that a black sheep has 3 bags full of wool.",
|
|
"VGhleSBzYXkgdGhhdCBhIGJsYWNrIHNoZWVwIGhhcyAzIGJhZ3MgZnVsbCBvZiB3b29sLg="
|
|
"="},
|
|
{"They say that a blank scroll is like a blank check.",
|
|
"VGhleSBzYXkgdGhhdCBhIGJsYW5rIHNjcm9sbCBpcyBsaWtlIGEgYmxhbmsgY2hlY2su"},
|
|
{"They say that a cat named Morris has nine lives.",
|
|
"VGhleSBzYXkgdGhhdCBhIGNhdCBuYW1lZCBNb3JyaXMgaGFzIG5pbmUgbGl2ZXMu"},
|
|
{"They say that a desperate shopper might pay any price in a shop.",
|
|
"VGhleSBzYXkgdGhhdCBhIGRlc3BlcmF0ZSBzaG9wcGVyIG1pZ2h0IHBheSBhbnkgcHJpY2Uga"
|
|
"W4gYSBzaG9wLg=="},
|
|
{"They say that a diamond dog is everybody's best friend.",
|
|
"VGhleSBzYXkgdGhhdCBhIGRpYW1vbmQgZG9nIGlzIGV2ZXJ5Ym9keSdzIGJlc3QgZnJpZW5kL"
|
|
"g=="},
|
|
{"They say that a dwarf lord can carry a pick-axe because his armor is "
|
|
"light.",
|
|
"VGhleSBzYXkgdGhhdCBhIGR3YXJmIGxvcmQgY2FuIGNhcnJ5IGEgcGljay1heGUgYmVjYXVzZ"
|
|
"SBoaXMgYXJtb3IgaXMgbGlnaHQu"},
|
|
{"They say that a floating eye can defeat Medusa.",
|
|
"VGhleSBzYXkgdGhhdCBhIGZsb2F0aW5nIGV5ZSBjYW4gZGVmZWF0IE1lZHVzYS4="},
|
|
{"They say that a fortune only has 1 line and you can't read between it.",
|
|
"VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lIGFuZCB5b3UgY2FuJ3Qgc"
|
|
"mVhZCBiZXR3ZWVuIGl0Lg=="},
|
|
{"They say that a fortune only has 1 line, but you can read between it.",
|
|
"VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lLCBidXQgeW91IGNhbiByZ"
|
|
"WFkIGJldHdlZW4gaXQu"},
|
|
{"They say that a fountain looks nothing like a regularly erupting geyser.",
|
|
"VGhleSBzYXkgdGhhdCBhIGZvdW50YWluIGxvb2tzIG5vdGhpbmcgbGlrZSBhIHJlZ3VsYXJse"
|
|
"SBlcnVwdGluZyBnZXlzZXIu"},
|
|
{"They say that a gold doubloon is worth more than its weight in gold.",
|
|
"VGhleSBzYXkgdGhhdCBhIGdvbGQgZG91Ymxvb24gaXMgd29ydGggbW9yZSB0aGFuIGl0cyB3Z"
|
|
"WlnaHQgaW4gZ29sZC4="},
|
|
{"They say that a grid bug won't pay a shopkeeper for zapping you in a "
|
|
"shop.",
|
|
"VGhleSBzYXkgdGhhdCBhIGdyaWQgYnVnIHdvbid0IHBheSBhIHNob3BrZWVwZXIgZm9yIHphc"
|
|
"HBpbmcgeW91IGluIGEgc2hvcC4="},
|
|
{"They say that a gypsy could tell your fortune for a price.",
|
|
"VGhleSBzYXkgdGhhdCBhIGd5cHN5IGNvdWxkIHRlbGwgeW91ciBmb3J0dW5lIGZvciBhIHBya"
|
|
"WNlLg=="},
|
|
{"They say that a hacker named Alice once level teleported by using a "
|
|
"mirror.",
|
|
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBBbGljZSBvbmNlIGxldmVsIHRlbGVwb3J0Z"
|
|
"WQgYnkgdXNpbmcgYSBtaXJyb3Iu"},
|
|
{"They say that a hacker named David once slew a giant with a sling and a "
|
|
"rock.",
|
|
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEYXZpZCBvbmNlIHNsZXcgYSBnaWFudCB3a"
|
|
"XRoIGEgc2xpbmcgYW5kIGEgcm9jay4="},
|
|
{"They say that a hacker named Dorothy once rode a fog cloud to Oz.",
|
|
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEb3JvdGh5IG9uY2Ugcm9kZSBhIGZvZyBjb"
|
|
"G91ZCB0byBPei4="},
|
|
{"They say that a hacker named Mary once lost a white sheep in the mazes.",
|
|
"VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBNYXJ5IG9uY2UgbG9zdCBhIHdoaXRlIHNoZ"
|
|
"WVwIGluIHRoZSBtYXplcy4="},
|
|
{"They say that a helm of brilliance is not to be taken lightly.",
|
|
"VGhleSBzYXkgdGhhdCBhIGhlbG0gb2YgYnJpbGxpYW5jZSBpcyBub3QgdG8gYmUgdGFrZW4gb"
|
|
"GlnaHRseS4="},
|
|
{"They say that a hot dog and a hell hound are the same thing.",
|
|
"VGhleSBzYXkgdGhhdCBhIGhvdCBkb2cgYW5kIGEgaGVsbCBob3VuZCBhcmUgdGhlIHNhbWUgd"
|
|
"Ghpbmcu"},
|
|
{"They say that a lamp named Aladdin's Lamp contains a djinni with 3 "
|
|
"wishes.",
|
|
"VGhleSBzYXkgdGhhdCBhIGxhbXAgbmFtZWQgQWxhZGRpbidzIExhbXAgY29udGFpbnMgYSBka"
|
|
"mlubmkgd2l0aCAzIHdpc2hlcy4="},
|
|
{"They say that a large dog named Lassie will lead you to the amulet.",
|
|
"VGhleSBzYXkgdGhhdCBhIGxhcmdlIGRvZyBuYW1lZCBMYXNzaWUgd2lsbCBsZWFkIHlvdSB0b"
|
|
"yB0aGUgYW11bGV0Lg=="},
|
|
{"They say that a long sword is not a light sword.",
|
|
"VGhleSBzYXkgdGhhdCBhIGxvbmcgc3dvcmQgaXMgbm90IGEgbGlnaHQgc3dvcmQu"},
|
|
{"They say that a manes won't mince words with you.",
|
|
"VGhleSBzYXkgdGhhdCBhIG1hbmVzIHdvbid0IG1pbmNlIHdvcmRzIHdpdGggeW91Lg=="},
|
|
{"They say that a mind is a terrible thing to waste.",
|
|
"VGhleSBzYXkgdGhhdCBhIG1pbmQgaXMgYSB0ZXJyaWJsZSB0aGluZyB0byB3YXN0ZS4="},
|
|
{"They say that a plain nymph will only wear a wire ring in one ear.",
|
|
"VGhleSBzYXkgdGhhdCBhIHBsYWluIG55bXBoIHdpbGwgb25seSB3ZWFyIGEgd2lyZSByaW5nI"
|
|
"GluIG9uZSBlYXIu"},
|
|
{"They say that a plumed hat could be a previously used crested helmet.",
|
|
"VGhleSBzYXkgdGhhdCBhIHBsdW1lZCBoYXQgY291bGQgYmUgYSBwcmV2aW91c2x5IHVzZWQgY"
|
|
"3Jlc3RlZCBoZWxtZXQu"},
|
|
{"They say that a potion of oil is difficult to grasp.",
|
|
"VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiBvaWwgaXMgZGlmZmljdWx0IHRvIGdyYXNwLg="
|
|
"="},
|
|
{"They say that a potion of yogurt is a cancelled potion of sickness.",
|
|
"VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiB5b2d1cnQgaXMgYSBjYW5jZWxsZWQgcG90aW9uI"
|
|
"G9mIHNpY2tuZXNzLg=="},
|
|
{"They say that a purple worm is not a baby purple dragon.",
|
|
"VGhleSBzYXkgdGhhdCBhIHB1cnBsZSB3b3JtIGlzIG5vdCBhIGJhYnkgcHVycGxlIGRyYWdvb"
|
|
"i4="},
|
|
{"They say that a quivering blob tastes different than a gelatinous cube.",
|
|
"VGhleSBzYXkgdGhhdCBhIHF1aXZlcmluZyBibG9iIHRhc3RlcyBkaWZmZXJlbnQgdGhhbiBhI"
|
|
"GdlbGF0aW5vdXMgY3ViZS4="},
|
|
{"They say that a runed broadsword named Stormbringer attracts vortices.",
|
|
"VGhleSBzYXkgdGhhdCBhIHJ1bmVkIGJyb2Fkc3dvcmQgbmFtZWQgU3Rvcm1icmluZ2VyIGF0d"
|
|
"HJhY3RzIHZvcnRpY2VzLg=="},
|
|
{"They say that a scroll of summoning has other names.",
|
|
"VGhleSBzYXkgdGhhdCBhIHNjcm9sbCBvZiBzdW1tb25pbmcgaGFzIG90aGVyIG5hbWVzLg="
|
|
"="},
|
|
{"They say that a shaman can bestow blessings but usually doesn't.",
|
|
"VGhleSBzYXkgdGhhdCBhIHNoYW1hbiBjYW4gYmVzdG93IGJsZXNzaW5ncyBidXQgdXN1YWxse"
|
|
"SBkb2Vzbid0Lg=="},
|
|
{"They say that a shaman will bless you for an eye of newt and wing of "
|
|
"bat.",
|
|
"VGhleSBzYXkgdGhhdCBhIHNoYW1hbiB3aWxsIGJsZXNzIHlvdSBmb3IgYW4gZXllIG9mIG5ld"
|
|
"3QgYW5kIHdpbmcgb2YgYmF0Lg=="},
|
|
{"They say that a shimmering gold shield is not a polished silver shield.",
|
|
"VGhleSBzYXkgdGhhdCBhIHNoaW1tZXJpbmcgZ29sZCBzaGllbGQgaXMgbm90IGEgcG9saXNoZ"
|
|
"WQgc2lsdmVyIHNoaWVsZC4="},
|
|
{"They say that a spear will hit a neo-otyugh. (Do YOU know what that is?)",
|
|
"VGhleSBzYXkgdGhhdCBhIHNwZWFyIHdpbGwgaGl0IGEgbmVvLW90eXVnaC4gKERvIFlPVSBrb"
|
|
"m93IHdoYXQgdGhhdCBpcz8p"},
|
|
{"They say that a spotted dragon is the ultimate shape changer.",
|
|
"VGhleSBzYXkgdGhhdCBhIHNwb3R0ZWQgZHJhZ29uIGlzIHRoZSB1bHRpbWF0ZSBzaGFwZSBja"
|
|
"GFuZ2VyLg=="},
|
|
{"They say that a stethoscope is no good if you can only hear your "
|
|
"heartbeat.",
|
|
"VGhleSBzYXkgdGhhdCBhIHN0ZXRob3Njb3BlIGlzIG5vIGdvb2QgaWYgeW91IGNhbiBvbmx5I"
|
|
"GhlYXIgeW91ciBoZWFydGJlYXQu"},
|
|
{"They say that a succubus named Suzy will sometimes warn you of danger.",
|
|
"VGhleSBzYXkgdGhhdCBhIHN1Y2N1YnVzIG5hbWVkIFN1enkgd2lsbCBzb21ldGltZXMgd2Fyb"
|
|
"iB5b3Ugb2YgZGFuZ2VyLg=="},
|
|
{"They say that a wand of cancellation is not like a wand of polymorph.",
|
|
"VGhleSBzYXkgdGhhdCBhIHdhbmQgb2YgY2FuY2VsbGF0aW9uIGlzIG5vdCBsaWtlIGEgd2FuZ"
|
|
"CBvZiBwb2x5bW9ycGgu"},
|
|
{"They say that a wood golem named Pinocchio would be easy to control.",
|
|
"VGhleSBzYXkgdGhhdCBhIHdvb2QgZ29sZW0gbmFtZWQgUGlub2NjaGlvIHdvdWxkIGJlIGVhc"
|
|
"3kgdG8gY29udHJvbC4="},
|
|
{"They say that after killing a dragon it's time for a change of scenery.",
|
|
"VGhleSBzYXkgdGhhdCBhZnRlciBraWxsaW5nIGEgZHJhZ29uIGl0J3MgdGltZSBmb3IgYSBja"
|
|
"GFuZ2Ugb2Ygc2NlbmVyeS4="},
|
|
{"They say that an amulet of strangulation is worse than ring around the "
|
|
"collar.",
|
|
"VGhleSBzYXkgdGhhdCBhbiBhbXVsZXQgb2Ygc3RyYW5ndWxhdGlvbiBpcyB3b3JzZSB0aGFuI"
|
|
"HJpbmcgYXJvdW5kIHRoZSBjb2xsYXIu"},
|
|
{"They say that an attic is the best place to hide your toys.",
|
|
"VGhleSBzYXkgdGhhdCBhbiBhdHRpYyBpcyB0aGUgYmVzdCBwbGFjZSB0byBoaWRlIHlvdXIgd"
|
|
"G95cy4="},
|
|
{"They say that an axe named Cleaver once belonged to a hacker named "
|
|
"Beaver.",
|
|
"VGhleSBzYXkgdGhhdCBhbiBheGUgbmFtZWQgQ2xlYXZlciBvbmNlIGJlbG9uZ2VkIHRvIGEga"
|
|
"GFja2VyIG5hbWVkIEJlYXZlci4="},
|
|
{"They say that an eye of newt and a wing of bat are double the trouble.",
|
|
"VGhleSBzYXkgdGhhdCBhbiBleWUgb2YgbmV3dCBhbmQgYSB3aW5nIG9mIGJhdCBhcmUgZG91Y"
|
|
"mxlIHRoZSB0cm91YmxlLg=="},
|
|
{"They say that an incubus named Izzy sometimes makes women feel "
|
|
"sensitive.",
|
|
"VGhleSBzYXkgdGhhdCBhbiBpbmN1YnVzIG5hbWVkIEl6enkgc29tZXRpbWVzIG1ha2VzIHdvb"
|
|
"WVuIGZlZWwgc2Vuc2l0aXZlLg=="},
|
|
{"They say that an opulent throne room is rarely a place to wish you'd be "
|
|
"in.",
|
|
"VGhleSBzYXkgdGhhdCBhbiBvcHVsZW50IHRocm9uZSByb29tIGlzIHJhcmVseSBhIHBsYWNlI"
|
|
"HRvIHdpc2ggeW91J2QgYmUgaW4u"},
|
|
{"They say that an unlucky hacker once had a nose bleed at an altar and "
|
|
"died.",
|
|
"VGhleSBzYXkgdGhhdCBhbiB1bmx1Y2t5IGhhY2tlciBvbmNlIGhhZCBhIG5vc2UgYmxlZWQgY"
|
|
"XQgYW4gYWx0YXIgYW5kIGRpZWQu"},
|
|
{"They say that and they say this but they never say never, never!",
|
|
"VGhleSBzYXkgdGhhdCBhbmQgdGhleSBzYXkgdGhpcyBidXQgdGhleSBuZXZlciBzYXkgbmV2Z"
|
|
"XIsIG5ldmVyIQ=="},
|
|
{"They say that any quantum mechanic knows that speed kills.",
|
|
"VGhleSBzYXkgdGhhdCBhbnkgcXVhbnR1bSBtZWNoYW5pYyBrbm93cyB0aGF0IHNwZWVkIGtpb"
|
|
"GxzLg=="},
|
|
{"They say that applying a unicorn horn means you've missed the point.",
|
|
"VGhleSBzYXkgdGhhdCBhcHBseWluZyBhIHVuaWNvcm4gaG9ybiBtZWFucyB5b3UndmUgbWlzc"
|
|
"2VkIHRoZSBwb2ludC4="},
|
|
{"They say that blue stones are radioactive, beware.",
|
|
"VGhleSBzYXkgdGhhdCBibHVlIHN0b25lcyBhcmUgcmFkaW9hY3RpdmUsIGJld2FyZS4="},
|
|
{"They say that building a dungeon is a team effort.",
|
|
"VGhleSBzYXkgdGhhdCBidWlsZGluZyBhIGR1bmdlb24gaXMgYSB0ZWFtIGVmZm9ydC4="},
|
|
{"They say that chaotic characters never get a kick out of altars.",
|
|
"VGhleSBzYXkgdGhhdCBjaGFvdGljIGNoYXJhY3RlcnMgbmV2ZXIgZ2V0IGEga2ljayBvdXQgb"
|
|
"2YgYWx0YXJzLg=="},
|
|
{"They say that collapsing a dungeon often creates a panic.",
|
|
"VGhleSBzYXkgdGhhdCBjb2xsYXBzaW5nIGEgZHVuZ2VvbiBvZnRlbiBjcmVhdGVzIGEgcGFua"
|
|
"WMu"},
|
|
{"They say that counting your eggs before they hatch shows that you care.",
|
|
"VGhleSBzYXkgdGhhdCBjb3VudGluZyB5b3VyIGVnZ3MgYmVmb3JlIHRoZXkgaGF0Y2ggc2hvd"
|
|
"3MgdGhhdCB5b3UgY2FyZS4="},
|
|
{"They say that dipping a bag of tricks in a fountain won't make it an "
|
|
"icebox.",
|
|
"VGhleSBzYXkgdGhhdCBkaXBwaW5nIGEgYmFnIG9mIHRyaWNrcyBpbiBhIGZvdW50YWluIHdvb"
|
|
"id0IG1ha2UgaXQgYW4gaWNlYm94Lg=="},
|
|
{"They say that dipping an eel and brown mold in hot water makes "
|
|
"bouillabaisse.",
|
|
"VGhleSBzYXkgdGhhdCBkaXBwaW5nIGFuIGVlbCBhbmQgYnJvd24gbW9sZCBpbiBob3Qgd2F0Z"
|
|
"XIgbWFrZXMgYm91aWxsYWJhaXNzZS4="},
|
|
{"They say that donating a doubloon is extremely pious charity.",
|
|
"VGhleSBzYXkgdGhhdCBkb25hdGluZyBhIGRvdWJsb29uIGlzIGV4dHJlbWVseSBwaW91cyBja"
|
|
"GFyaXR5Lg=="},
|
|
{"They say that eating royal jelly attracts grizzly owlbears.",
|
|
"VGhleSBzYXkgdGhhdCBlYXRpbmcgcm95YWwgamVsbHkgYXR0cmFjdHMgZ3JpenpseSBvd2xiZ"
|
|
"WFycy4="},
|
|
{"They say that eggs, pancakes and juice are just a mundane breakfast.",
|
|
"VGhleSBzYXkgdGhhdCBlZ2dzLCBwYW5jYWtlcyBhbmQganVpY2UgYXJlIGp1c3QgYSBtdW5kY"
|
|
"W5lIGJyZWFrZmFzdC4="},
|
|
{"They say that everyone knows why Medusa stands alone in the dark.",
|
|
"VGhleSBzYXkgdGhhdCBldmVyeW9uZSBrbm93cyB3aHkgTWVkdXNhIHN0YW5kcyBhbG9uZSBpb"
|
|
"iB0aGUgZGFyay4="},
|
|
{"They say that everyone wanted rec.games.hack to undergo a name change.",
|
|
"VGhleSBzYXkgdGhhdCBldmVyeW9uZSB3YW50ZWQgcmVjLmdhbWVzLmhhY2sgdG8gdW5kZXJnb"
|
|
"yBhIG5hbWUgY2hhbmdlLg=="},
|
|
{"They say that finding a winning strategy is a deliberate move on your "
|
|
"part.",
|
|
"VGhleSBzYXkgdGhhdCBmaW5kaW5nIGEgd2lubmluZyBzdHJhdGVneSBpcyBhIGRlbGliZXJhd"
|
|
"GUgbW92ZSBvbiB5b3VyIHBhcnQu"},
|
|
{"They say that finding worthless glass is worth something.",
|
|
"VGhleSBzYXkgdGhhdCBmaW5kaW5nIHdvcnRobGVzcyBnbGFzcyBpcyB3b3J0aCBzb21ldGhpb"
|
|
"mcu"},
|
|
{"They say that fortune cookies are food for thought.",
|
|
"VGhleSBzYXkgdGhhdCBmb3J0dW5lIGNvb2tpZXMgYXJlIGZvb2QgZm9yIHRob3VnaHQu"},
|
|
{"They say that gold is only wasted on a pet dragon.",
|
|
"VGhleSBzYXkgdGhhdCBnb2xkIGlzIG9ubHkgd2FzdGVkIG9uIGEgcGV0IGRyYWdvbi4="},
|
|
{"They say that good things come to those that wait.",
|
|
"VGhleSBzYXkgdGhhdCBnb29kIHRoaW5ncyBjb21lIHRvIHRob3NlIHRoYXQgd2FpdC4="},
|
|
{"They say that greased objects will slip out of monsters' hands.",
|
|
"VGhleSBzYXkgdGhhdCBncmVhc2VkIG9iamVjdHMgd2lsbCBzbGlwIG91dCBvZiBtb25zdGVyc"
|
|
"ycgaGFuZHMu"},
|
|
{"They say that if you can't spell then you'll wish you had a spell book.",
|
|
"VGhleSBzYXkgdGhhdCBpZiB5b3UgY2FuJ3Qgc3BlbGwgdGhlbiB5b3UnbGwgd2lzaCB5b3Uga"
|
|
"GFkIGEgc3BlbGwgYm9vay4="},
|
|
{"They say that if you live by the sword, you'll die by the sword.",
|
|
"VGhleSBzYXkgdGhhdCBpZiB5b3UgbGl2ZSBieSB0aGUgc3dvcmQsIHlvdSdsbCBkaWUgYnkgd"
|
|
"GhlIHN3b3JkLg=="},
|
|
{"They say that if you play like a monster you'll have a better game.",
|
|
"VGhleSBzYXkgdGhhdCBpZiB5b3UgcGxheSBsaWtlIGEgbW9uc3RlciB5b3UnbGwgaGF2ZSBhI"
|
|
"GJldHRlciBnYW1lLg=="},
|
|
{"They say that if you sleep with a demon you might awake with a headache.",
|
|
"VGhleSBzYXkgdGhhdCBpZiB5b3Ugc2xlZXAgd2l0aCBhIGRlbW9uIHlvdSBtaWdodCBhd2FrZ"
|
|
"SB3aXRoIGEgaGVhZGFjaGUu"},
|
|
{"They say that if you step on a crack you could break your mother's back.",
|
|
"VGhleSBzYXkgdGhhdCBpZiB5b3Ugc3RlcCBvbiBhIGNyYWNrIHlvdSBjb3VsZCBicmVhayB5b"
|
|
"3VyIG1vdGhlcidzIGJhY2su"},
|
|
{"They say that if you're invisible you can still be heard!",
|
|
"VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgaW52aXNpYmxlIHlvdSBjYW4gc3RpbGwgYmUgaGVhc"
|
|
"mQh"},
|
|
{"They say that if you're lucky you can feel the runes on a scroll.",
|
|
"VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgbHVja3kgeW91IGNhbiBmZWVsIHRoZSBydW5lcyBvb"
|
|
"iBhIHNjcm9sbC4="},
|
|
{"They say that in the big picture gold is only small change.",
|
|
"VGhleSBzYXkgdGhhdCBpbiB0aGUgYmlnIHBpY3R1cmUgZ29sZCBpcyBvbmx5IHNtYWxsIGNoY"
|
|
"W5nZS4="},
|
|
{"They say that in the dungeon it's not what you know that really matters.",
|
|
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBpdCdzIG5vdCB3aGF0IHlvdSBrbm93IHRoY"
|
|
"XQgcmVhbGx5IG1hdHRlcnMu"},
|
|
{"They say that in the dungeon moon rocks are really dilithium crystals.",
|
|
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBtb29uIHJvY2tzIGFyZSByZWFsbHkgZGlsa"
|
|
"XRoaXVtIGNyeXN0YWxzLg=="},
|
|
{"They say that in the dungeon the boorish customer is never right.",
|
|
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB0aGUgYm9vcmlzaCBjdXN0b21lciBpcyBuZ"
|
|
"XZlciByaWdodC4="},
|
|
{"They say that in the dungeon you don't need a watch to tell time.",
|
|
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgZG9uJ3QgbmVlZCBhIHdhdGNoIHRvI"
|
|
"HRlbGwgdGltZS4="},
|
|
{"They say that in the dungeon you need something old, new, burrowed and "
|
|
"blue.",
|
|
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgbmVlZCBzb21ldGhpbmcgb2xkLCBuZ"
|
|
"XcsIGJ1cnJvd2VkIGFuZCBibHVlLg=="},
|
|
{"They say that in the dungeon you should always count your blessings.",
|
|
"VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3Ugc2hvdWxkIGFsd2F5cyBjb3VudCB5b"
|
|
"3VyIGJsZXNzaW5ncy4="},
|
|
{"They say that iron golem plate mail isn't worth wishing for.",
|
|
"VGhleSBzYXkgdGhhdCBpcm9uIGdvbGVtIHBsYXRlIG1haWwgaXNuJ3Qgd29ydGggd2lzaGluZ"
|
|
"yBmb3Iu"},
|
|
{"They say that it takes four quarterstaffs to make one staff.",
|
|
"VGhleSBzYXkgdGhhdCBpdCB0YWtlcyBmb3VyIHF1YXJ0ZXJzdGFmZnMgdG8gbWFrZSBvbmUgc"
|
|
"3RhZmYu"},
|
|
{"They say that it's not over till the fat ladies sing.",
|
|
"VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWRpZXMgc2luZy4"
|
|
"="},
|
|
{"They say that it's not over till the fat lady shouts `Off with its "
|
|
"head'.",
|
|
"VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWR5IHNob3V0cyBgT"
|
|
"2ZmIHdpdGggaXRzIGhlYWQnLg=="},
|
|
{"They say that kicking a heavy statue is really a dumb move.",
|
|
"VGhleSBzYXkgdGhhdCBraWNraW5nIGEgaGVhdnkgc3RhdHVlIGlzIHJlYWxseSBhIGR1bWIgb"
|
|
"W92ZS4="},
|
|
{"They say that kicking a valuable gem doesn't seem to make sense.",
|
|
"VGhleSBzYXkgdGhhdCBraWNraW5nIGEgdmFsdWFibGUgZ2VtIGRvZXNuJ3Qgc2VlbSB0byBtY"
|
|
"WtlIHNlbnNlLg=="},
|
|
{"They say that leprechauns know Latin and you should too.",
|
|
"VGhleSBzYXkgdGhhdCBsZXByZWNoYXVucyBrbm93IExhdGluIGFuZCB5b3Ugc2hvdWxkIHRvb"
|
|
"y4="},
|
|
{"They say that minotaurs get lost outside of the mazes.",
|
|
"VGhleSBzYXkgdGhhdCBtaW5vdGF1cnMgZ2V0IGxvc3Qgb3V0c2lkZSBvZiB0aGUgbWF6ZXM"
|
|
"u"},
|
|
{"They say that most trolls are born again.",
|
|
"VGhleSBzYXkgdGhhdCBtb3N0IHRyb2xscyBhcmUgYm9ybiBhZ2Fpbi4="},
|
|
{"They say that naming your cat Garfield will make you more attractive.",
|
|
"VGhleSBzYXkgdGhhdCBuYW1pbmcgeW91ciBjYXQgR2FyZmllbGQgd2lsbCBtYWtlIHlvdSBtb"
|
|
"3JlIGF0dHJhY3RpdmUu"},
|
|
{"They say that no one knows everything about everything in the dungeon.",
|
|
"VGhleSBzYXkgdGhhdCBubyBvbmUga25vd3MgZXZlcnl0aGluZyBhYm91dCBldmVyeXRoaW5nI"
|
|
"GluIHRoZSBkdW5nZW9uLg=="},
|
|
{"They say that no one plays NetHack just for the fun of it.",
|
|
"VGhleSBzYXkgdGhhdCBubyBvbmUgcGxheXMgTmV0SGFjayBqdXN0IGZvciB0aGUgZnVuIG9mI"
|
|
"Gl0Lg=="},
|
|
{"They say that no one really subscribes to rec.games.roguelike.nethack.",
|
|
"VGhleSBzYXkgdGhhdCBubyBvbmUgcmVhbGx5IHN1YnNjcmliZXMgdG8gcmVjLmdhbWVzLnJvZ"
|
|
"3VlbGlrZS5uZXRoYWNrLg=="},
|
|
{"They say that no one will admit to starting a rumor.",
|
|
"VGhleSBzYXkgdGhhdCBubyBvbmUgd2lsbCBhZG1pdCB0byBzdGFydGluZyBhIHJ1bW9yLg="
|
|
"="},
|
|
{"They say that nurses sometimes carry scalpels and never use them.",
|
|
"VGhleSBzYXkgdGhhdCBudXJzZXMgc29tZXRpbWVzIGNhcnJ5IHNjYWxwZWxzIGFuZCBuZXZlc"
|
|
"iB1c2UgdGhlbS4="},
|
|
{"They say that once you've met one wizard you've met them all.",
|
|
"VGhleSBzYXkgdGhhdCBvbmNlIHlvdSd2ZSBtZXQgb25lIHdpemFyZCB5b3UndmUgbWV0IHRoZ"
|
|
"W0gYWxsLg=="},
|
|
{"They say that one troll is worth 10,000 newts.",
|
|
"VGhleSBzYXkgdGhhdCBvbmUgdHJvbGwgaXMgd29ydGggMTAsMDAwIG5ld3RzLg=="},
|
|
{"They say that only David can find the zoo!",
|
|
"VGhleSBzYXkgdGhhdCBvbmx5IERhdmlkIGNhbiBmaW5kIHRoZSB6b28h"},
|
|
{"They say that only angels play their harps for their pets.",
|
|
"VGhleSBzYXkgdGhhdCBvbmx5IGFuZ2VscyBwbGF5IHRoZWlyIGhhcnBzIGZvciB0aGVpciBwZ"
|
|
"XRzLg=="},
|
|
{"They say that only big spenders carry gold.",
|
|
"VGhleSBzYXkgdGhhdCBvbmx5IGJpZyBzcGVuZGVycyBjYXJyeSBnb2xkLg=="},
|
|
{"They say that orc shamans are healthy, wealthy and wise.",
|
|
"VGhleSBzYXkgdGhhdCBvcmMgc2hhbWFucyBhcmUgaGVhbHRoeSwgd2VhbHRoeSBhbmQgd2lzZ"
|
|
"S4="},
|
|
{"They say that playing NetHack is like walking into a death trap.",
|
|
"VGhleSBzYXkgdGhhdCBwbGF5aW5nIE5ldEhhY2sgaXMgbGlrZSB3YWxraW5nIGludG8gYSBkZ"
|
|
"WF0aCB0cmFwLg=="},
|
|
{"They say that problem breathing is best treated by a proper diet.",
|
|
"VGhleSBzYXkgdGhhdCBwcm9ibGVtIGJyZWF0aGluZyBpcyBiZXN0IHRyZWF0ZWQgYnkgYSBwc"
|
|
"m9wZXIgZGlldC4="},
|
|
{"They say that quaffing many potions of levitation can give you a "
|
|
"headache.",
|
|
"VGhleSBzYXkgdGhhdCBxdWFmZmluZyBtYW55IHBvdGlvbnMgb2YgbGV2aXRhdGlvbiBjYW4gZ"
|
|
"2l2ZSB5b3UgYSBoZWFkYWNoZS4="},
|
|
{"They say that queen bees get that way by eating royal jelly.",
|
|
"VGhleSBzYXkgdGhhdCBxdWVlbiBiZWVzIGdldCB0aGF0IHdheSBieSBlYXRpbmcgcm95YWwga"
|
|
"mVsbHku"},
|
|
{"They say that reading a scare monster scroll is the same as saying "
|
|
"Elbereth.",
|
|
"VGhleSBzYXkgdGhhdCByZWFkaW5nIGEgc2NhcmUgbW9uc3RlciBzY3JvbGwgaXMgdGhlIHNhb"
|
|
"WUgYXMgc2F5aW5nIEVsYmVyZXRoLg=="},
|
|
{"They say that real hackers always are controlled.",
|
|
"VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgYWx3YXlzIGFyZSBjb250cm9sbGVkLg=="},
|
|
{"They say that real hackers never sleep.",
|
|
"VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgbmV2ZXIgc2xlZXAu"},
|
|
{"They say that shopkeepers are insured by Croesus himself!",
|
|
"VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBhcmUgaW5zdXJlZCBieSBDcm9lc3VzIGhpbXNlb"
|
|
"GYh"},
|
|
{"They say that shopkeepers never carry more than 20 gold pieces, at "
|
|
"night.",
|
|
"VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBjYXJyeSBtb3JlIHRoYW4gMjAgZ29sZ"
|
|
"CBwaWVjZXMsIGF0IG5pZ2h0Lg=="},
|
|
{"They say that shopkeepers never sell blessed potions of invisibility.",
|
|
"VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBzZWxsIGJsZXNzZWQgcG90aW9ucyBvZ"
|
|
"iBpbnZpc2liaWxpdHku"},
|
|
{"They say that soldiers wear kid gloves and silly helmets.",
|
|
"VGhleSBzYXkgdGhhdCBzb2xkaWVycyB3ZWFyIGtpZCBnbG92ZXMgYW5kIHNpbGx5IGhlbG1ld"
|
|
"HMu"},
|
|
{"They say that some Kops are on the take.",
|
|
"VGhleSBzYXkgdGhhdCBzb21lIEtvcHMgYXJlIG9uIHRoZSB0YWtlLg=="},
|
|
{"They say that some guards' palms can be greased.",
|
|
"VGhleSBzYXkgdGhhdCBzb21lIGd1YXJkcycgcGFsbXMgY2FuIGJlIGdyZWFzZWQu"},
|
|
{"They say that some monsters may kiss your boots to stop your drum "
|
|
"playing.",
|
|
"VGhleSBzYXkgdGhhdCBzb21lIG1vbnN0ZXJzIG1heSBraXNzIHlvdXIgYm9vdHMgdG8gc3Rvc"
|
|
"CB5b3VyIGRydW0gcGxheWluZy4="},
|
|
{"They say that sometimes you can be the hit of the party when playing a "
|
|
"horn.",
|
|
"VGhleSBzYXkgdGhhdCBzb21ldGltZXMgeW91IGNhbiBiZSB0aGUgaGl0IG9mIHRoZSBwYXJ0e"
|
|
"SB3aGVuIHBsYXlpbmcgYSBob3JuLg=="},
|
|
{"They say that the NetHack gods generally welcome your sacrifices.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgTmV0SGFjayBnb2RzIGdlbmVyYWxseSB3ZWxjb21lIHlvdXIgc"
|
|
"2FjcmlmaWNlcy4="},
|
|
{"They say that the Three Rings are named Vilya, Nenya and Narya.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgVGhyZWUgUmluZ3MgYXJlIG5hbWVkIFZpbHlhLCBOZW55YSBhb"
|
|
"mQgTmFyeWEu"},
|
|
{"They say that the Wizard of Yendor has a death wish.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgV2l6YXJkIG9mIFllbmRvciBoYXMgYSBkZWF0aCB3aXNoLg="
|
|
"="},
|
|
{"They say that the `hair of the dog' is sometimes an effective remedy.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgYGhhaXIgb2YgdGhlIGRvZycgaXMgc29tZXRpbWVzIGFuIGVmZ"
|
|
"mVjdGl2ZSByZW1lZHku"},
|
|
{"They say that the best time to save your game is now before its too "
|
|
"late.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgYmVzdCB0aW1lIHRvIHNhdmUgeW91ciBnYW1lIGlzIG5vdyBiZ"
|
|
"WZvcmUgaXRzIHRvbyBsYXRlLg=="},
|
|
{"They say that the biggest obstacle in NetHack is your mind.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgYmlnZ2VzdCBvYnN0YWNsZSBpbiBOZXRIYWNrIGlzIHlvdXIgb"
|
|
"WluZC4="},
|
|
{"They say that the gods are angry when they hit you with objects.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgZ29kcyBhcmUgYW5ncnkgd2hlbiB0aGV5IGhpdCB5b3Ugd2l0a"
|
|
"CBvYmplY3RzLg=="},
|
|
{"They say that the priesthood are specially favored by the gods.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgcHJpZXN0aG9vZCBhcmUgc3BlY2lhbGx5IGZhdm9yZWQgYnkgd"
|
|
"GhlIGdvZHMu"},
|
|
{"They say that the way to make a unicorn happy is to give it what it "
|
|
"wants.",
|
|
"VGhleSBzYXkgdGhhdCB0aGUgd2F5IHRvIG1ha2UgYSB1bmljb3JuIGhhcHB5IGlzIHRvIGdpd"
|
|
"mUgaXQgd2hhdCBpdCB3YW50cy4="},
|
|
{"They say that there are no black or white stones, only gray.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gYmxhY2sgb3Igd2hpdGUgc3RvbmVzLCBvbmx5I"
|
|
"GdyYXku"},
|
|
{"They say that there are no skeletons hence there are no skeleton keys.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gc2tlbGV0b25zIGhlbmNlIHRoZXJlIGFyZSBub"
|
|
"yBza2VsZXRvbiBrZXlzLg=="},
|
|
{"They say that there is a clever rogue in every hacker just dying to "
|
|
"escape.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBhIGNsZXZlciByb2d1ZSBpbiBldmVyeSBoYWNrZXIga"
|
|
"nVzdCBkeWluZyB0byBlc2NhcGUu"},
|
|
{"They say that there is no such thing as free advice.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGZyZWUgYWR2aWNlLg="
|
|
"="},
|
|
{"They say that there is only one way to win at NetHack.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgdG8gd2luIGF0IE5ldEhhY2s"
|
|
"u"},
|
|
{"They say that there once was a fearsome chaotic samurai named Luk No.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSBvbmNlIHdhcyBhIGZlYXJzb21lIGNoYW90aWMgc2FtdXJha"
|
|
"SBuYW1lZCBMdWsgTm8u"},
|
|
{"They say that there was a time when cursed holy water wasn't water.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSB3YXMgYSB0aW1lIHdoZW4gY3Vyc2VkIGhvbHkgd2F0ZXIgd"
|
|
"2Fzbid0IHdhdGVyLg=="},
|
|
{"They say that there's no point in crying over a gray ooze.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGNyeWluZyBvdmVyIGEgZ3JheSBvb"
|
|
"3plLg=="},
|
|
{"They say that there's only hope left after you've opened Pandora's box.",
|
|
"VGhleSBzYXkgdGhhdCB0aGVyZSdzIG9ubHkgaG9wZSBsZWZ0IGFmdGVyIHlvdSd2ZSBvcGVuZ"
|
|
"WQgUGFuZG9yYSdzIGJveC4="},
|
|
{"They say that trapdoors should always be marked `Caution: Trap Door'.",
|
|
"VGhleSBzYXkgdGhhdCB0cmFwZG9vcnMgc2hvdWxkIGFsd2F5cyBiZSBtYXJrZWQgYENhdXRpb"
|
|
"246IFRyYXAgRG9vcicu"},
|
|
{"They say that using an amulet of change isn't a difficult operation.",
|
|
"VGhleSBzYXkgdGhhdCB1c2luZyBhbiBhbXVsZXQgb2YgY2hhbmdlIGlzbid0IGEgZGlmZmljd"
|
|
"Wx0IG9wZXJhdGlvbi4="},
|
|
{"They say that water walking boots are better if you are fast like "
|
|
"Hermes.",
|
|
"VGhleSBzYXkgdGhhdCB3YXRlciB3YWxraW5nIGJvb3RzIGFyZSBiZXR0ZXIgaWYgeW91IGFyZ"
|
|
"SBmYXN0IGxpa2UgSGVybWVzLg=="},
|
|
{"They say that when you wear a circular amulet you might resemble a "
|
|
"troll.",
|
|
"VGhleSBzYXkgdGhhdCB3aGVuIHlvdSB3ZWFyIGEgY2lyY3VsYXIgYW11bGV0IHlvdSBtaWdod"
|
|
"CByZXNlbWJsZSBhIHRyb2xsLg=="},
|
|
{"They say that when you're hungry you can get a pizza in 30 moves or it's "
|
|
"free.",
|
|
"VGhleSBzYXkgdGhhdCB3aGVuIHlvdSdyZSBodW5ncnkgeW91IGNhbiBnZXQgYSBwaXp6YSBpb"
|
|
"iAzMCBtb3ZlcyBvciBpdCdzIGZyZWUu"},
|
|
{"They say that when your god is angry you should try another one.",
|
|
"VGhleSBzYXkgdGhhdCB3aGVuIHlvdXIgZ29kIGlzIGFuZ3J5IHlvdSBzaG91bGQgdHJ5IGFub"
|
|
"3RoZXIgb25lLg=="},
|
|
{"They say that wielding a unicorn horn takes strength.",
|
|
"VGhleSBzYXkgdGhhdCB3aWVsZGluZyBhIHVuaWNvcm4gaG9ybiB0YWtlcyBzdHJlbmd0aC4"
|
|
"="},
|
|
{"They say that with speed boots you never worry about hit and run "
|
|
"accidents.",
|
|
"VGhleSBzYXkgdGhhdCB3aXRoIHNwZWVkIGJvb3RzIHlvdSBuZXZlciB3b3JyeSBhYm91dCBoa"
|
|
"XQgYW5kIHJ1biBhY2NpZGVudHMu"},
|
|
{"They say that you can defeat a killer bee with a unicorn horn.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIGRlZmVhdCBhIGtpbGxlciBiZWUgd2l0aCBhIHVuaWNvc"
|
|
"m4gaG9ybi4="},
|
|
{"They say that you can only cross the River Styx in Charon's boat.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgY3Jvc3MgdGhlIFJpdmVyIFN0eXggaW4gQ2hhc"
|
|
"m9uJ3MgYm9hdC4="},
|
|
{"They say that you can only kill a lich once and then you'd better be "
|
|
"careful.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkga2lsbCBhIGxpY2ggb25jZSBhbmQgdGhlbiB5b"
|
|
"3UnZCBiZXR0ZXIgYmUgY2FyZWZ1bC4="},
|
|
{"They say that you can only wish for things you've already had.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgd2lzaCBmb3IgdGhpbmdzIHlvdSd2ZSBhbHJlY"
|
|
"WR5IGhhZC4="},
|
|
{"They say that you can train a cat by talking gently to it.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgY2F0IGJ5IHRhbGtpbmcgZ2VudGx5IHRvI"
|
|
"Gl0Lg=="},
|
|
{"They say that you can train a dog by talking firmly to it.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgZG9nIGJ5IHRhbGtpbmcgZmlybWx5IHRvI"
|
|
"Gl0Lg=="},
|
|
{"They say that you can trust your gold with the king.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRydXN0IHlvdXIgZ29sZCB3aXRoIHRoZSBraW5nLg="
|
|
"="},
|
|
{"They say that you can't wipe your greasy bare hands on a blank scroll.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2FuJ3Qgd2lwZSB5b3VyIGdyZWFzeSBiYXJlIGhhbmRzIG9uI"
|
|
"GEgYmxhbmsgc2Nyb2xsLg=="},
|
|
{"They say that you cannot trust scrolls of rumor.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY2Fubm90IHRydXN0IHNjcm9sbHMgb2YgcnVtb3Iu"},
|
|
{"They say that you could fall head over heels for an energy vortex.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgY291bGQgZmFsbCBoZWFkIG92ZXIgaGVlbHMgZm9yIGFuIGVuZ"
|
|
"XJneSB2b3J0ZXgu"},
|
|
{"They say that you need a key in order to open locked doors.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIGtleSBpbiBvcmRlciB0byBvcGVuIGxvY2tlZCBkb"
|
|
"29ycy4="},
|
|
{"They say that you need a mirror to notice a mimic in an antique shop.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIG1pcnJvciB0byBub3RpY2UgYSBtaW1pYyBpbiBhb"
|
|
"iBhbnRpcXVlIHNob3Au"},
|
|
{"They say that you really can use a pick-axe unless you really can't.",
|
|
"VGhleSBzYXkgdGhhdCB5b3UgcmVhbGx5IGNhbiB1c2UgYSBwaWNrLWF4ZSB1bmxlc3MgeW91I"
|
|
"HJlYWxseSBjYW4ndC4="},
|
|
{"They say that you should always store your tools in the cellar.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGFsd2F5cyBzdG9yZSB5b3VyIHRvb2xzIGluIHRoZ"
|
|
"SBjZWxsYXIu"},
|
|
{"They say that you should be careful while climbing the ladder to "
|
|
"success.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgd2hpbGUgY2xpbWJpbmcgdGhlI"
|
|
"GxhZGRlciB0byBzdWNjZXNzLg=="},
|
|
{"They say that you should call your armor `rustproof'.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGNhbGwgeW91ciBhcm1vciBgcnVzdHByb29mJy4"
|
|
"="},
|
|
{"They say that you should name your dog Spuds to have a cool pet.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciBkb2cgU3B1ZHMgdG8gaGF2ZSBhI"
|
|
"GNvb2wgcGV0Lg=="},
|
|
{"They say that you should name your weapon after your first monster kill.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciB3ZWFwb24gYWZ0ZXIgeW91ciBma"
|
|
"XJzdCBtb25zdGVyIGtpbGwu"},
|
|
{"They say that you should never introduce a rope golem to a succubus.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIGludHJvZHVjZSBhIHJvcGUgZ29sZW0gd"
|
|
"G8gYSBzdWNjdWJ1cy4="},
|
|
{"They say that you should never sleep near invisible ring wraiths.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHNsZWVwIG5lYXIgaW52aXNpYmxlIHJpb"
|
|
"mcgd3JhaXRocy4="},
|
|
{"They say that you should never try to leave the dungeon with a bag of "
|
|
"gems.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBsZWF2ZSB0aGUgZHVuZ2Vvb"
|
|
"iB3aXRoIGEgYmFnIG9mIGdlbXMu"},
|
|
{"They say that you should remove your armor before sitting on a throne.",
|
|
"VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIHJlbW92ZSB5b3VyIGFybW9yIGJlZm9yZSBzaXR0a"
|
|
"W5nIG9uIGEgdGhyb25lLg=="},
|
|
{"This fortune cookie is copy protected.",
|
|
"VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyBjb3B5IHByb3RlY3RlZC4="},
|
|
{"This fortune cookie is the property of Fortune Cookies, Inc.",
|
|
"VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyB0aGUgcHJvcGVydHkgb2YgRm9ydHVuZSBDb29raWVzL"
|
|
"CBJbmMu"},
|
|
{"Tired? Try a scroll of charging on yourself.",
|
|
"VGlyZWQ/IFRyeSBhIHNjcm9sbCBvZiBjaGFyZ2luZyBvbiB5b3Vyc2VsZi4="},
|
|
{"To achieve the next higher rating, you need 3 more points.",
|
|
"VG8gYWNoaWV2ZSB0aGUgbmV4dCBoaWdoZXIgcmF0aW5nLCB5b3UgbmVlZCAzIG1vcmUgcG9pb"
|
|
"nRzLg=="},
|
|
{"To reach heaven, escape the dungeon while wearing a ring of levitation.",
|
|
"VG8gcmVhY2ggaGVhdmVuLCBlc2NhcGUgdGhlIGR1bmdlb24gd2hpbGUgd2VhcmluZyBhIHJpb"
|
|
"mcgb2YgbGV2aXRhdGlvbi4="},
|
|
{"Tourists wear shirts loud enough to wake the dead.",
|
|
"VG91cmlzdHMgd2VhciBzaGlydHMgbG91ZCBlbm91Z2ggdG8gd2FrZSB0aGUgZGVhZC4="},
|
|
{"Try calling your katana Moulinette.",
|
|
"VHJ5IGNhbGxpbmcgeW91ciBrYXRhbmEgTW91bGluZXR0ZS4="},
|
|
{"Ulch! That meat was painted!",
|
|
"VWxjaCEgVGhhdCBtZWF0IHdhcyBwYWludGVkIQ=="},
|
|
{"Unfortunately, this message was left intentionally blank.",
|
|
"VW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzYWdlIHdhcyBsZWZ0IGludGVudGlvbmFsbHkgYmxhb"
|
|
"msu"},
|
|
{"Using a morning star in the evening has no effect.",
|
|
"VXNpbmcgYSBtb3JuaW5nIHN0YXIgaW4gdGhlIGV2ZW5pbmcgaGFzIG5vIGVmZmVjdC4="},
|
|
{"Want a hint? Zap a wand of make invisible on your weapon!",
|
|
"V2FudCBhIGhpbnQ/"
|
|
"IFphcCBhIHdhbmQgb2YgbWFrZSBpbnZpc2libGUgb24geW91ciB3ZWFwb24h"},
|
|
{"Want to ascend in a hurry? Apply at Gizmonic Institute.",
|
|
"V2FudCB0byBhc2NlbmQgaW4gYSBodXJyeT8gQXBwbHkgYXQgR2l6bW9uaWMgSW5zdGl0dXRlL"
|
|
"g=="},
|
|
{"Wanted: shopkeepers. Send a scroll of mail to Mage of Yendor/Level "
|
|
"35/Dungeon.",
|
|
"V2FudGVkOiBzaG9wa2VlcGVycy4gU2VuZCBhIHNjcm9sbCBvZiBtYWlsIHRvIE1hZ2Ugb2YgW"
|
|
"WVuZG9yL0xldmVsIDM1L0R1bmdlb24u"},
|
|
{"Warning: fortune reading can be hazardous to your health.",
|
|
"V2FybmluZzogZm9ydHVuZSByZWFkaW5nIGNhbiBiZSBoYXphcmRvdXMgdG8geW91ciBoZWFsd"
|
|
"Ggu"},
|
|
{"We have new ways of detecting treachery...",
|
|
"V2UgaGF2ZSBuZXcgd2F5cyBvZiBkZXRlY3RpbmcgdHJlYWNoZXJ5Li4u"},
|
|
{"Wet towels make great weapons!",
|
|
"V2V0IHRvd2VscyBtYWtlIGdyZWF0IHdlYXBvbnMh"},
|
|
{"What a pity, you cannot read it!",
|
|
"V2hhdCBhIHBpdHksIHlvdSBjYW5ub3QgcmVhZCBpdCE="},
|
|
{"When a piercer drops in on you, you will be tempted to hit the ceiling!",
|
|
"V2hlbiBhIHBpZXJjZXIgZHJvcHMgaW4gb24geW91LCB5b3Ugd2lsbCBiZSB0ZW1wdGVkIHRvI"
|
|
"GhpdCB0aGUgY2VpbGluZyE="},
|
|
{"When in a maze follow the right wall and you will never get lost.",
|
|
"V2hlbiBpbiBhIG1hemUgZm9sbG93IHRoZSByaWdodCB3YWxsIGFuZCB5b3Ugd2lsbCBuZXZlc"
|
|
"iBnZXQgbG9zdC4="},
|
|
{"When you have a key, you don't have to wait for the guard.",
|
|
"V2hlbiB5b3UgaGF2ZSBhIGtleSwgeW91IGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgdGhlIGd1Y"
|
|
"XJkLg=="},
|
|
{"Why are you wasting time reading fortunes?",
|
|
"V2h5IGFyZSB5b3Ugd2FzdGluZyB0aW1lIHJlYWRpbmcgZm9ydHVuZXM/"},
|
|
{"Wish for a master key and open the Magic Memory Vault!",
|
|
"V2lzaCBmb3IgYSBtYXN0ZXIga2V5IGFuZCBvcGVuIHRoZSBNYWdpYyBNZW1vcnkgVmF1bHQ"
|
|
"h"},
|
|
{"Wizard expects every monster to do its duty.",
|
|
"V2l6YXJkIGV4cGVjdHMgZXZlcnkgbW9uc3RlciB0byBkbyBpdHMgZHV0eS4="},
|
|
{"Wow! You could've had a potion of fruit juice!",
|
|
"V293ISBZb3UgY291bGQndmUgaGFkIGEgcG90aW9uIG9mIGZydWl0IGp1aWNlIQ=="},
|
|
{"Yet Another Silly Message (YASM).",
|
|
"WWV0IEFub3RoZXIgU2lsbHkgTWVzc2FnZSAoWUFTTSku"},
|
|
{"You are destined to be misled by a fortune.",
|
|
"WW91IGFyZSBkZXN0aW5lZCB0byBiZSBtaXNsZWQgYnkgYSBmb3J0dW5lLg=="},
|
|
{"You can get a genuine Amulet of Yendor by doing the following: --More--",
|
|
"WW91IGNhbiBnZXQgYSBnZW51aW5lIEFtdWxldCBvZiBZZW5kb3IgYnkgZG9pbmcgdGhlIGZvb"
|
|
"Gxvd2luZzogLS1Nb3JlLS0="},
|
|
{"You can protect yourself from black dragons by doing the following: "
|
|
"--More--",
|
|
"WW91IGNhbiBwcm90ZWN0IHlvdXJzZWxmIGZyb20gYmxhY2sgZHJhZ29ucyBieSBkb2luZyB0a"
|
|
"GUgZm9sbG93aW5nOiAtLU1vcmUtLQ=="},
|
|
{"You can't get by the snake.", "WW91IGNhbid0IGdldCBieSB0aGUgc25ha2Uu"},
|
|
{"You feel like someone is pulling your leg.",
|
|
"WW91IGZlZWwgbGlrZSBzb21lb25lIGlzIHB1bGxpbmcgeW91ciBsZWcu"},
|
|
{"You have to outwit the Sphynx or pay her.",
|
|
"WW91IGhhdmUgdG8gb3V0d2l0IHRoZSBTcGh5bnggb3IgcGF5IGhlci4="},
|
|
{"You hear the fortune cookie's hissing!",
|
|
"WW91IGhlYXIgdGhlIGZvcnR1bmUgY29va2llJ3MgaGlzc2luZyE="},
|
|
{"You may get rich selling letters, but beware of being blackmailed!",
|
|
"WW91IG1heSBnZXQgcmljaCBzZWxsaW5nIGxldHRlcnMsIGJ1dCBiZXdhcmUgb2YgYmVpbmcgY"
|
|
"mxhY2ttYWlsZWQh"},
|
|
{"You offend Shai-Hulud by sheathing your crysknife without having drawn "
|
|
"blood.",
|
|
"WW91IG9mZmVuZCBTaGFpLUh1bHVkIGJ5IHNoZWF0aGluZyB5b3VyIGNyeXNrbmlmZSB3aXRob"
|
|
"3V0IGhhdmluZyBkcmF3biBibG9vZC4="},
|
|
{"You swallowed the fortune!", "WW91IHN3YWxsb3dlZCB0aGUgZm9ydHVuZSE="},
|
|
{"You want to regain strength? Two levels ahead is a guesthouse!",
|
|
"WW91IHdhbnQgdG8gcmVnYWluIHN0cmVuZ3RoPyBUd28gbGV2ZWxzIGFoZWFkIGlzIGEgZ3Vlc"
|
|
"3Rob3VzZSE="},
|
|
{"You will encounter a tall, dark, and gruesome creature...",
|
|
"WW91IHdpbGwgZW5jb3VudGVyIGEgdGFsbCwgZGFyaywgYW5kIGdydWVzb21lIGNyZWF0dXJlL"
|
|
"i4u"},
|
|
|
|
{"The End", "VGhlIEVuZA=="}};
|
|
|
|
/* PL_Base64Encode, random strings */
|
|
PRBool test_004(void) {
|
|
int i;
|
|
char result[4096];
|
|
|
|
printf(
|
|
"Test 004 (PL_Base64Encode, random strings) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 plen = PL_strlen(array[i].plaintext);
|
|
PRUint32 clen = ((plen + 2) / 3) * 4;
|
|
|
|
char* rv = PL_Base64Encode(array[i].plaintext, plen, result);
|
|
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d): return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp(result, array[i].cyphertext, clen)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
|
|
array[i].plaintext, array[i].cyphertext, clen, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, single characters, malloc */
|
|
PRBool test_005(void) {
|
|
PRUint32 a, b;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 005 (PL_Base64Encode, single characters, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[1] = plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[2] = cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (unsigned char)(a * 4 + b);
|
|
cypher[1] = base[(b * 16)];
|
|
|
|
rv = PL_Base64Encode((char*)plain, 1, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d): no return value\n", a, b);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)cypher, rv)) {
|
|
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, cypher,
|
|
rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, double characters, malloc */
|
|
PRBool test_006(void) {
|
|
PRUint32 a, b, c, d;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 006 (PL_Base64Encode, double characters, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
cypher[2] = base[d * 4];
|
|
|
|
rv = PL_Base64Encode((char*)plain, 2, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)cypher, rv)) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
|
|
a, b, c, d, cypher, rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, triple characters, malloc */
|
|
PRBool test_007(void) {
|
|
PRUint32 a, b, c, d, e, f;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 007 (PL_Base64Encode, triple characters, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
for (e = 0; e < 4; e++) {
|
|
cypher[2] = base[d * 4 + e];
|
|
for (f = 0; f < 64; f++) {
|
|
plain[2] = e * 64 + f;
|
|
cypher[3] = base[f];
|
|
|
|
rv = PL_Base64Encode((char*)plain, 3, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a,
|
|
b, c, d, e, f);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)cypher, rv)) {
|
|
printf(
|
|
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
|
|
"\"%.4s.\"\n",
|
|
a, b, c, d, e, f, cypher, rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, random strings, malloc */
|
|
PRBool test_008(void) {
|
|
int i;
|
|
|
|
printf(
|
|
"Test 008 (PL_Base64Encode, random strings, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 plen = PL_strlen(array[i].plaintext);
|
|
PRUint32 clen = ((plen + 2) / 3) * 4;
|
|
|
|
char* rv = PL_Base64Encode(array[i].plaintext, plen, (char*)0);
|
|
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d): no return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp(rv, array[i].cyphertext)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
|
|
array[i].plaintext, array[i].cyphertext, rv);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, single characters */
|
|
PRBool test_009(void) {
|
|
PRUint32 a, b;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 009 (PL_Base64Decode, single characters, equals) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[1] = plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[2] = cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (unsigned char)(a * 4 + b);
|
|
cypher[1] = base[(b * 16)];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 4, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d): return value\n", a, b);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)plain, result, 1)) {
|
|
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n", a, b,
|
|
plain, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, single characters */
|
|
PRBool test_010(void) {
|
|
PRUint32 a, b;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 010 (PL_Base64Decode, single characters, no equals) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[1] = plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[2] = cypher[3] = (unsigned char)0;
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (unsigned char)(a * 4 + b);
|
|
cypher[1] = base[(b * 16)];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 2, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d): return value\n", a, b);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)plain, result, 1)) {
|
|
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n", a, b,
|
|
plain, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, double characters */
|
|
PRBool test_011(void) {
|
|
PRUint32 a, b, c, d;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 011 (PL_Base64Decode, double characters, equals) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
cypher[2] = base[d * 4];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 4, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)plain, result, 2)) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
|
|
a, b, c, d, plain, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, double characters */
|
|
PRBool test_012(void) {
|
|
PRUint32 a, b, c, d;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 012 (PL_Base64Decode, double characters, no equals) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[3] = (unsigned char)0;
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
cypher[2] = base[d * 4];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 3, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)plain, result, 2)) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
|
|
a, b, c, d, cypher, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, triple characters */
|
|
PRBool test_013(void) {
|
|
PRUint32 a, b, c, d, e, f;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char result[8];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 013 (PL_Base64Decode, triple characters) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
for (e = 0; e < 4; e++) {
|
|
cypher[2] = base[d * 4 + e];
|
|
for (f = 0; f < 64; f++) {
|
|
plain[2] = e * 64 + f;
|
|
cypher[3] = base[f];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 4, result);
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b,
|
|
c, d, e, f);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp((char*)plain, result, 3)) {
|
|
printf(
|
|
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
|
|
"\"%.3s.\"\n",
|
|
a, b, c, d, e, f, plain, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, random strings */
|
|
PRBool test_014(void) {
|
|
int i;
|
|
char result[4096];
|
|
|
|
printf(
|
|
"Test 014 (PL_Base64Decode, random strings, equals) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen = PL_strlen(array[i].cyphertext);
|
|
PRUint32 plen = (clen * 3) / 4;
|
|
|
|
char* rv = PL_Base64Decode(array[i].cyphertext, clen, result);
|
|
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d): return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 == (clen & 3)) {
|
|
if ('=' == array[i].cyphertext[clen - 1]) {
|
|
if ('=' == array[i].cyphertext[clen - 2]) {
|
|
plen -= 2;
|
|
} else {
|
|
plen -= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, plen, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, random strings */
|
|
PRBool test_015(void) {
|
|
int i;
|
|
char buffer[4096];
|
|
char result[4096];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 015 (PL_Base64Decode, random strings, no equals) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen, plen;
|
|
|
|
PL_strcpy(buffer, array[i].cyphertext);
|
|
clen = PL_strlen(buffer);
|
|
|
|
if (0 == (clen & 3)) {
|
|
if ('=' == buffer[clen - 1]) {
|
|
if ('=' == buffer[clen - 2]) {
|
|
buffer[clen - 2] = buffer[clen - 1] = (char)0;
|
|
clen -= 2;
|
|
} else {
|
|
buffer[clen - 1] = (char)0;
|
|
clen -= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
plen = (clen * 3) / 4;
|
|
|
|
rv = PL_Base64Decode(buffer, clen, result);
|
|
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d): return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, plen, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, single characters, malloc */
|
|
PRBool test_016(void) {
|
|
PRUint32 a, b;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 016 (PL_Base64Decode, single characters, equals, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[1] = plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[2] = cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (unsigned char)(a * 4 + b);
|
|
cypher[1] = base[(b * 16)];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d): no return value\n", a, b);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)plain, rv)) {
|
|
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, plain,
|
|
rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, single characters, malloc */
|
|
PRBool test_017(void) {
|
|
PRUint32 a, b;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 017 (PL_Base64Decode, single characters, no equals, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[1] = plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[2] = cypher[3] = (unsigned char)0;
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (unsigned char)(a * 4 + b);
|
|
cypher[1] = base[(b * 16)];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 2, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d): no return value\n", a, b);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)plain, rv)) {
|
|
printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, plain,
|
|
rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, double characters, malloc */
|
|
PRBool test_018(void) {
|
|
PRUint32 a, b, c, d;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 018 (PL_Base64Decode, double characters, equals, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[3] = (unsigned char)'=';
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
cypher[2] = base[d * 4];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)plain, rv)) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
|
|
a, b, c, d, plain, rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, double characters, malloc */
|
|
PRBool test_019(void) {
|
|
PRUint32 a, b, c, d;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 019 (PL_Base64Decode, double characters, no equals, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
plain[2] = plain[3] = (unsigned char)0;
|
|
cypher[3] = (unsigned char)0;
|
|
cypher[4] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
cypher[2] = base[d * 4];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 3, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)plain, rv)) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
|
|
a, b, c, d, cypher, rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, triple characters, malloc */
|
|
PRBool test_020(void) {
|
|
PRUint32 a, b, c, d, e, f;
|
|
unsigned char plain[4];
|
|
unsigned char cypher[5];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 020 (PL_Base64Decode, triple characters, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
cypher[4] = (unsigned char)0;
|
|
plain[3] = (unsigned char)0;
|
|
|
|
for (a = 0; a < 64; a++) {
|
|
cypher[0] = base[a];
|
|
for (b = 0; b < 4; b++) {
|
|
plain[0] = (a * 4) + b;
|
|
for (c = 0; c < 16; c++) {
|
|
cypher[1] = base[b * 16 + c];
|
|
for (d = 0; d < 16; d++) {
|
|
plain[1] = c * 16 + d;
|
|
for (e = 0; e < 4; e++) {
|
|
cypher[2] = base[d * 4 + e];
|
|
for (f = 0; f < 64; f++) {
|
|
plain[2] = e * 64 + f;
|
|
cypher[3] = base[f];
|
|
|
|
rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a,
|
|
b, c, d, e, f);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp((char*)plain, rv)) {
|
|
printf(
|
|
"FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
|
|
"\"%.3s.\"\n",
|
|
a, b, c, d, e, f, plain, rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, random strings, malloc */
|
|
PRBool test_021(void) {
|
|
int i;
|
|
|
|
printf(
|
|
"Test 021 (PL_Base64Decode, random strings, equals, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen = PL_strlen(array[i].cyphertext);
|
|
|
|
char* rv = PL_Base64Decode(array[i].cyphertext, clen, (char*)0);
|
|
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d): no return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp(rv, array[i].plaintext)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, random strings, malloc */
|
|
PRBool test_022(void) {
|
|
int i;
|
|
char buffer[4096];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 022 (PL_Base64Decode, random strings, no equals, malloc) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen;
|
|
|
|
PL_strcpy(buffer, array[i].cyphertext);
|
|
clen = PL_strlen(buffer);
|
|
|
|
if (0 == (clen & 3)) {
|
|
if ('=' == buffer[clen - 1]) {
|
|
if ('=' == buffer[clen - 2]) {
|
|
buffer[clen - 2] = buffer[clen - 1] = (char)0;
|
|
clen -= 2;
|
|
} else {
|
|
buffer[clen - 1] = (char)0;
|
|
clen -= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
rv = PL_Base64Decode(buffer, clen, (char*)0);
|
|
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d): no return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp(rv, array[i].plaintext)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, rv);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, random strings */
|
|
PRBool test_023(void) {
|
|
int i;
|
|
char result[4096];
|
|
|
|
printf(
|
|
"Test 023 (PL_Base64Encode, random strings, strlen) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 plen = PL_strlen(array[i].plaintext);
|
|
PRUint32 clen = ((plen + 2) / 3) * 4;
|
|
|
|
char* rv = PL_Base64Encode(array[i].plaintext, 0, result);
|
|
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d): return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp(result, array[i].cyphertext, clen)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
|
|
array[i].plaintext, array[i].cyphertext, clen, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, random strings, malloc */
|
|
PRBool test_024(void) {
|
|
int i;
|
|
|
|
printf(
|
|
"Test 024 (PL_Base64Encode, random strings, malloc, strlen) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 plen = PL_strlen(array[i].plaintext);
|
|
PRUint32 clen = ((plen + 2) / 3) * 4;
|
|
|
|
char* rv = PL_Base64Encode(array[i].plaintext, 0, (char*)0);
|
|
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d): no return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp(rv, array[i].cyphertext)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
|
|
array[i].plaintext, array[i].cyphertext, rv);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, random strings */
|
|
PRBool test_025(void) {
|
|
int i;
|
|
char result[4096];
|
|
|
|
printf(
|
|
"Test 025 (PL_Base64Decode, random strings, equals, strlen) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen = PL_strlen(array[i].cyphertext);
|
|
PRUint32 plen = (clen * 3) / 4;
|
|
|
|
char* rv = PL_Base64Decode(array[i].cyphertext, 0, result);
|
|
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d): return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 == (clen & 3)) {
|
|
if ('=' == array[i].cyphertext[clen - 1]) {
|
|
if ('=' == array[i].cyphertext[clen - 2]) {
|
|
plen -= 2;
|
|
} else {
|
|
plen -= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, plen, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, random strings */
|
|
PRBool test_026(void) {
|
|
int i;
|
|
char buffer[4096];
|
|
char result[4096];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 026 (PL_Base64Decode, random strings, no equals, strlen) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen, plen;
|
|
|
|
PL_strcpy(buffer, array[i].cyphertext);
|
|
clen = PL_strlen(buffer);
|
|
|
|
if (0 == (clen & 3)) {
|
|
if ('=' == buffer[clen - 1]) {
|
|
if ('=' == buffer[clen - 2]) {
|
|
buffer[clen - 2] = buffer[clen - 1] = (char)0;
|
|
clen -= 2;
|
|
} else {
|
|
buffer[clen - 1] = (char)0;
|
|
clen -= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
plen = (clen * 3) / 4;
|
|
|
|
rv = PL_Base64Decode(buffer, 0, result);
|
|
|
|
if (rv != result) {
|
|
printf("FAIL\n\t(%d): return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, plen, result);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Decode, random strings, malloc */
|
|
PRBool test_027(void) {
|
|
int i;
|
|
|
|
printf(
|
|
"Test 027 (PL_Base64Decode, random strings, equals, malloc, strlen) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen = PL_strlen(array[i].cyphertext);
|
|
|
|
char* rv = PL_Base64Decode(array[i].cyphertext, 0, (char*)0);
|
|
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d): no return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp(rv, array[i].plaintext)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, rv);
|
|
PR_DELETE(rv);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
PR_DELETE(rv);
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
/* PL_Base64Encode, random strings, malloc */
|
|
PRBool test_028(void) {
|
|
int i;
|
|
char buffer[4096];
|
|
char* rv;
|
|
|
|
printf(
|
|
"Test 028 (PL_Base64Decode, random strings, no equals, malloc, strlen) "
|
|
"...");
|
|
fflush(stdout);
|
|
|
|
for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
|
|
PRUint32 clen;
|
|
|
|
PL_strcpy(buffer, array[i].cyphertext);
|
|
clen = PL_strlen(buffer);
|
|
|
|
if (0 == (clen & 3)) {
|
|
if ('=' == buffer[clen - 1]) {
|
|
if ('=' == buffer[clen - 2]) {
|
|
buffer[clen - 2] = buffer[clen - 1] = (char)0;
|
|
clen -= 2;
|
|
} else {
|
|
buffer[clen - 1] = (char)0;
|
|
clen -= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
rv = PL_Base64Decode(buffer, 0, (char*)0);
|
|
|
|
if ((char*)0 == rv) {
|
|
printf("FAIL\n\t(%d): no return value\n", i);
|
|
return PR_FALSE;
|
|
}
|
|
|
|
if (0 != PL_strcmp(rv, array[i].plaintext)) {
|
|
printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
|
|
array[i].cyphertext, array[i].plaintext, rv);
|
|
return PR_FALSE;
|
|
}
|
|
}
|
|
|
|
printf("PASS\n");
|
|
return PR_TRUE;
|
|
}
|
|
|
|
int main(int argc, char* argv[]) {
|
|
printf("Testing the Portable Library base64 functions:\n");
|
|
printf("(warning: the \"triple characters\" tests are slow)\n");
|
|
|
|
if (1 && test_001() && test_002() && test_003() && test_004() && test_005() &&
|
|
test_006() && test_007() && test_008() && test_009() && test_010() &&
|
|
test_011() && test_012() && test_013() && test_014() && test_015() &&
|
|
test_016() && test_017() && test_018() && test_019() && test_020() &&
|
|
test_021() && test_022() && test_023() && test_024() && test_025() &&
|
|
test_026() && test_027() && test_028()) {
|
|
printf("Suite passed.\n");
|
|
return 0;
|
|
} else {
|
|
printf("Suite failed.\n");
|
|
return 1;
|
|
}
|
|
|
|
/*NOTREACHED*/
|
|
}
|