Browse code

Minimal LLVM codegen.

Török Edvin authored on 2009/08/28 00:12:39
Showing 10 changed files
... ...
@@ -50,7 +50,7 @@ int main(int argc, char *argv[])
50 50
     FILE *f;
51 51
     struct cli_bc *bc;
52 52
     struct cli_bc_ctx *ctx;
53
-    int rc;
53
+    int rc, dbgargc;
54 54
     struct optstruct *opts;
55 55
     unsigned funcid=0, i;
56 56
     struct cli_all_bc bcs;
... ...
@@ -92,6 +92,11 @@ int main(int argc, char *argv[])
92 92
 	exit(4);
93 93
     }
94 94
 
95
+    dbgargc=1;
96
+    while (opts->filename[dbgargc]) dbgargc++;
97
+
98
+    if (dbgargc > 1)
99
+	cli_bytecode_debug(dbgargc, opts->filename);
95 100
     rc = cli_bytecode_init(&bcs);
96 101
     if (rc != CL_SUCCESS) {
97 102
 	fprintf(stderr,"Unable to init bytecode engine: %s\n", cl_strerror(rc));
... ...
@@ -666,6 +666,7 @@ static int parseFunctionHeader(struct cli_bc *bc, unsigned fn, unsigned char *bu
666 666
     }
667 667
     offset = 1;
668 668
     func->numArgs = readFixedNumber(buffer, &offset, len, &ok, 1);
669
+    func->returnType = readTypeID(bc, buffer, &offset, len, &ok);
669 670
     if (buffer[offset] != 'L') {
670 671
 	cli_errmsg("Invalid function locals header: %c\n", buffer[offset]);
671 672
 	return CL_EMALFDB;
... ...
@@ -1237,3 +1238,4 @@ int cli_bytecode_done(struct cli_all_bc *allbc)
1237 1237
 {
1238 1238
     return cli_bytecode_done_jit(allbc);
1239 1239
 }
1240
+
... ...
@@ -21,18 +21,26 @@
21 21
  */
22 22
 
23 23
 #include "llvm/ADT/DenseMap.h"
24
+#include "llvm/DerivedTypes.h"
25
+#include "llvm/Function.h"
26
+#include "llvm/ExecutionEngine/ExecutionEngine.h"
27
+#include "llvm/ExecutionEngine/JIT.h"
28
+#include "llvm/ExecutionEngine/JITEventListener.h"
29
+#include "llvm/LLVMContext.h"
30
+#include "llvm/Module.h"
31
+#include "llvm/ModuleProvider.h"
32
+#include "llvm/Support/Compiler.h"
33
+#include "llvm/Support/CommandLine.h"
24 34
 #include "llvm/Support/DataTypes.h"
25
-#include "llvm/System/Threading.h"
26 35
 #include "llvm/Support/ErrorHandling.h"
27 36
 #include "llvm/Support/ManagedStatic.h"
28 37
 #include "llvm/Support/raw_ostream.h"
29
-#include "llvm/ExecutionEngine/ExecutionEngine.h"
30
-#include "llvm/ExecutionEngine/JIT.h"
31
-#include "llvm/LLVMContext.h"
38
+#include "llvm/Support/IRBuilder.h"
39
+#include "llvm/Support/PrettyStackTrace.h"
32 40
 #include "llvm/System/Signals.h"
41
+#include "llvm/System/Threading.h"
33 42
 #include "llvm/Target/TargetSelect.h"
34
-#include "llvm/Module.h"
35
-#include "llvm/ModuleProvider.h"
43
+#include "llvm/Support/TargetFolder.h"
36 44
 #include <cstdlib>
37 45
 #include <new>
38 46
 
... ...
@@ -48,38 +56,151 @@ typedef DenseMap<const struct cli_bc_func*, void*> FunctionMapTy;
48 48
 struct cli_bcengine {
49 49
     ExecutionEngine *EE;
50 50
     LLVMContext Context;
51
-    FunctionMapTy compiledFunctions; 
51
+    FunctionMapTy compiledFunctions;
52 52
 };
53 53
 
54 54
 namespace {
55 55
 
56
-    void do_shutdown() {
57
-	llvm_shutdown();
58
-    }
59
-    void llvm_error_handler(void *user_data, const std::string &reason)
60
-    {
61
-    
62
-    }
56
+void do_shutdown() {
57
+    llvm_shutdown();
58
+}
63 59
 
64
-    void generateLLVM(const struct cli_bc *bc, Module *M, 
65
-		      FunctionMapTy &compiledFunctions) {
60
+void llvm_error_handler(void *user_data, const std::string &reason)
61
+{
62
+    errs() << reason;
63
+    //TODO: better error handling, don't exit here
64
+    exit(1);
65
+}
66 66
 
67
-	Type *TypeMap = new Type*[bc->num_types];
67
+class VISIBILITY_HIDDEN LLVMCodegen {
68
+private:
69
+    const struct cli_bc *bc;
70
+    Module *M;
71
+    LLVMContext &Context;
72
+    FunctionMapTy &compiledFunctions;
73
+    const Type **TypeMap;
74
+    Twine BytecodeID;
75
+    ExecutionEngine *EE;
68 76
 
77
+    const Type *mapType(uint16_t ty)
78
+    {
79
+	if (!ty)
80
+	    return Type::getVoidTy(Context);
81
+	if (ty < 64)
82
+	    return IntegerType::get(Context, ty);
83
+	switch (ty) {
84
+	    case 65:
85
+		return PointerType::getUnqual(Type::getInt8Ty(Context));
86
+	    case 66:
87
+		return PointerType::getUnqual(Type::getInt16Ty(Context));
88
+	    case 67:
89
+		return PointerType::getUnqual(Type::getInt32Ty(Context));
90
+	    case 68:
91
+		return PointerType::getUnqual(Type::getInt64Ty(Context));
92
+	}
93
+	ty -= 69;
94
+	// This was validated by libclamav already.
95
+	assert(ty < bc->num_types && "Out of range type ID");
96
+	return TypeMap[ty];
97
+    }
98
+
99
+    void convertTypes() {
69 100
 	for (unsigned j=0;j<bc->num_types;j++) {
70 101
 
71 102
 	}
103
+    }
104
+
105
+    Value *convertOperand(const struct cli_bc_func *func, 
106
+			  const struct cli_bc_inst *inst,  operand_t operand)
107
+    {
108
+	if (operand >= func->numValues) {
109
+	    // Constant
110
+	    operand -= func->numValues;
111
+	    // This was already validated by libclamav.
112
+	    assert(operand < func->numConstants && "Constant out of range");
113
+	    uint64_t *c = &func->constants[operand-func->numValues];
114
+	    uint64_t v;
115
+	    const Type *Ty;
116
+	    switch (inst->interp_op%5) {
117
+		case 0:
118
+		case 1:
119
+		    Ty = (inst->interp_op%5) ? Type::getInt8Ty(Context) : 
120
+			Type::getInt1Ty(Context);
121
+		    v = *(uint8_t*)c;
122
+		    break;
123
+		case 2:
124
+		    Ty = Type::getInt16Ty(Context);
125
+		    v = *(uint16_t*)c;
126
+		    break;
127
+		case 3:
128
+		    Ty = Type::getInt32Ty(Context);
129
+		    v = *(uint32_t*)c;
130
+		    break;
131
+		case 4:
132
+		    Ty = Type::getInt64Ty(Context);
133
+		    v = *(uint64_t*)c;
134
+		    break;
135
+	    }
136
+	    return ConstantInt::get(Ty, v);
137
+	}
138
+	assert(0 && "Not implemented yet");
139
+    }
140
+public:
141
+    LLVMCodegen(const struct cli_bc *bc, Module *M, FunctionMapTy &cFuncs,
142
+		ExecutionEngine *EE)
143
+	: bc(bc), M(M), Context(M->getContext()), compiledFunctions(cFuncs), 
144
+	BytecodeID("bc"+Twine(bc->id)), EE(EE) {
145
+	    TypeMap = new const Type*[bc->num_types];
146
+    }
72 147
 
148
+    void generate() {
149
+	PrettyStackTraceString Trace(BytecodeID.str().c_str());
150
+	convertTypes();
151
+	TargetFolder Folder(EE->getTargetData(), Context);
152
+	IRBuilder<false, TargetFolder> Builder(Context, Folder);
73 153
 	for (unsigned j=0;j<bc->num_func;j++) {
154
+	    PrettyStackTraceString CrashInfo("Generate LLVM IR");
155
+	    // Create LLVM IR Function
74 156
 	    const struct cli_bc_func *func = &bc->funcs[j];
75 157
 	    std::vector<const Type*> argTypes;
76 158
 	    for (unsigned a=0;a<func->numArgs;a++) {
77
-		argTypes.push_back(mapType(func->types[a], TypeMap));
159
+		argTypes.push_back(mapType(func->types[a]));
160
+	    }
161
+	    const Type *RetTy = mapType(func->returnType);
162
+	    llvm::FunctionType *FTy =  FunctionType::get(RetTy, argTypes,
163
+							 false);
164
+	    Function *F = Function::Create(FTy, Function::InternalLinkage, 
165
+					   BytecodeID+"f"+Twine(j), M);
166
+
167
+	    // Create all BasicBlocks
168
+	    BasicBlock **BB = new BasicBlock*[func->numBB];
169
+	    for (unsigned i=0;i<func->numBB;i++) {
170
+		BB[i] = BasicBlock::Create(Context, "", F);
78 171
 	    }
172
+
173
+	    // Generate LLVM IR for each BB
174
+	    for (unsigned i=0;i<func->numBB;i++) {
175
+		const struct cli_bc_bb *bb = &func->BB[i];
176
+		Builder.SetInsertPoint(BB[i]);
177
+		for (unsigned j=0;j<bb->numInsts;j++) {
178
+		    const struct cli_bc_inst *inst = &bb->insts[i];
179
+
180
+		    switch (inst->opcode) {
181
+			case OP_RET:
182
+			    Value *V = convertOperand(func, inst, inst->u.unaryop);
183
+			    Builder.CreateRet(V);
184
+			    break;
185
+		    }
186
+		}
187
+	    }
188
+
189
+	    PrettyStackTraceString CrashInfo2("Native machine codegen");
190
+	    // Codegen current function as executable machine code.
191
+	    compiledFunctions[func] = EE->getPointerToFunction(F);
79 192
 	}
80 193
 	delete TypeMap;
81 194
     }
82
-
195
+};
83 196
 }
84 197
 
85 198
 int cli_vm_execute_jit(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct cli_bc_func *func, const struct cli_bc_inst *inst)
... ...
@@ -113,8 +234,9 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
113 113
 	EE->DisableLazyCompilation();
114 114
 
115 115
 	for (unsigned i=0;i<bcs->count;i++) {
116
-	    const struct cli_bc *bc = bcs->all_bcs[i];
117
-	    generateLLVM(bc, M);
116
+	    const struct cli_bc *bc = &bcs->all_bcs[i];
117
+	    LLVMCodegen Codegen(bc, M, bcs->engine->compiledFunctions, EE);
118
+	    Codegen.generate();
118 119
 	}
119 120
 
120 121
 	// compile all functions now, not lazily!
... ...
@@ -151,7 +273,7 @@ int bytecode_init(void)
151 151
 // Called once when loading a new set of BC files
152 152
 int cli_bytecode_init_jit(struct cli_all_bc *bcs)
153 153
 {
154
-    bcs->engine = (struct cli_bcengine*) malloc(sizeof(struct cli_bcengine));
154
+    bcs->engine = new(std::nothrow) struct cli_bcengine;
155 155
     if (!bcs->engine)
156 156
 	return CL_EMEM;
157 157
     return 0;
... ...
@@ -165,3 +287,8 @@ int cli_bytecode_done_jit(struct cli_all_bc *bcs)
165 165
     bcs->engine = 0;
166 166
     return 0;
167 167
 }
168
+
169
+void cli_bytecode_debug(int argc, char **argv)
170
+{
171
+  cl::ParseCommandLineOptions(argc, argv);
172
+}
... ...
@@ -46,3 +46,7 @@ int cli_bytecode_done_jit(struct cli_all_bc *allbc)
46 46
 {
47 47
     return CL_SUCCESS;
48 48
 }
49
+
50
+void cli_bytecode_debug(int argc, char **argv) {
51
+  // Empty
52
+}
... ...
@@ -77,6 +77,7 @@ struct cli_bc_func {
77 77
     uint32_t numConstants;
78 78
     uint32_t numBytes;/* stack size */
79 79
     uint16_t numBB;
80
+    uint16_t returnType;
80 81
     uint16_t *types;
81 82
     uint32_t insn_idx;
82 83
     struct cli_bc_bb *BB;
... ...
@@ -107,6 +108,7 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bc);
107 107
 int cli_bytecode_init_jit(struct cli_all_bc *bc);
108 108
 int cli_bytecode_done_jit(struct cli_all_bc *bc);
109 109
 int bytecode_init(void);
110
+void cli_bytecode_debug(int argc, char **argv);
110 111
 
111 112
 #ifdef __cplusplus
112 113
 }
... ...
@@ -157,6 +157,7 @@ CLAMAV_PRIVATE {
157 157
     cli_bytecode_context_clear;
158 158
     cli_bytecode_init;
159 159
     cli_bytecode_done;
160
+    cli_bytecode_debug;
160 161
   local:
161 162
     *;
162 163
 };
... ...
@@ -270,8 +270,9 @@ int cli_parse_add(struct cli_matcher *root, const char *virname, const char *hex
270 270
 	    return CL_EMEM;
271 271
 	}
272 272
 
273
-	if(bm_new->length > root->maxpatlen)
273
+	if(bm_new->length > root->maxpatlen) {
274 274
 	    root->maxpatlen = bm_new->length;
275
+	}
275 276
 
276 277
 	if((ret = cli_bm_addpatt(root, bm_new, offset))) {
277 278
 	    cli_errmsg("cli_parse_add(): Problem adding signature (4).\n");
... ...
@@ -2152,7 +2153,7 @@ int cl_engine_compile(struct cl_engine *engine)
2152 2152
 	if((root = engine->root[i])) {
2153 2153
 	    if((ret = cli_ac_buildtrie(root)))
2154 2154
 		return ret;
2155
-	    cli_dbgmsg("matcher[%u]: %s: AC sigs: %u (reloff: %u, absoff: %u) BM sigs: %u (reloff: %u, absoff: %u) %s\n", i, cli_mtargets[i].name, root->ac_patterns, root->ac_reloff_num, root->ac_absoff_num, root->bm_patterns, root->bm_reloff_num, root->bm_absoff_num, root->ac_only ? "(ac_only mode)" : "");
2155
+	    cli_dbgmsg("matcher[%u]: %s: AC sigs: %u (reloff: %u, absoff: %u) BM sigs: %u (reloff: %u, absoff: %u) maxpatlen %u %s\n", i, cli_mtargets[i].name, root->ac_patterns, root->ac_reloff_num, root->ac_absoff_num, root->bm_patterns, root->bm_reloff_num, root->bm_absoff_num, root->maxpatlen, root->ac_only ? "(ac_only mode)" : "");
2156 2156
 	}
2157 2157
     }
2158 2158
 
... ...
@@ -1,15 +1,15 @@
1 1
 ClamBCaa`|`````|`agafp`clamcoincidencejb
2 2
 Tedebfdacb`bb`bb`b
3 3
 Eabaaabbed|b`acflfifoebfcfaf`gifoedgefcgdgac``
4
-A`Lacb`baab`bFadaa
4
+A`b`bLacb`baab`bFadaa
5 5
 Bb`b``bbabHonnkm``odHm``oonnkdaaaadab`b`Hhgfedcbadb`babnaaaDm``odDmjnmdTcab`babE
6
-AaLabahaab`bFacaa
6
+Aab`bLabahaab`bFacaa
7 7
 Baaaadaah`Bgaab`babnaaaDm``odDmjnmdTcab`babE
8
-AaLabb`aaab`bFacaa
8
+Aab`bLabb`aaab`bFacaa
9 9
 Baaaadab`a`Dhbgabb`babnaaaDm``odDmjnmdTcab`babE
10
-AaLabb`baab`bFacaa
10
+Aab`bLabb`baab`bFacaa
11 11
 Baaaadab`b`Fichbgadb`babnaaaDm``odDmjnmdTcab`babE
12
-AaLabb`daab`bFacaa
12
+Aab`bLabb`daab`bFacaa
13 13
 Baaaadab`d`Ncgbfae`dichbgahb`babnaaaDm``odDmjnmdTcab`babE
14
-AbLadahb`aaaaaaab`bFaeaa
14
+Abb`bLadahb`aaaaaaab`bFaeaa
15 15
 Baaabdaah`Bhbaaaacdab`aaaDdcbabaaadk`acabb`baenaadDm``odDmjnmdTcab`baeE
... ...
@@ -1,9 +1,9 @@
1 1
 ClamBCaa`|`````|`aebbep`clamcoincidencejb
2 2
 Ted
3 3
 E``
4
-A`Lbabb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bFbbbaa
4
+A`b`bLbabb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bb`bFbbbaa
5 5
 Bb`b`oa`abb`baaoa`acb`baboa`adb`bacoa`aeb`badoa`afb`baeoa`agb`bafoa`ahb`bagoa`aib`bahoa`ajb`baioa`akb`bajoa`alb`bakoa`amb`baloa`anb`bamoa`aob`banoa`b`ab`baooa`baab`bb`aoa`bbab`bbaaa`aa`b`bbbaa`baaabb`bbcaa`bbaacb`bbdaa`bcaadb`bbeaa`bdaaeb`bbfaa`beaafb`bbgaa`bfaagb`bbhaa`bgaahb`bbiaa`bhaaib`bbjaa`biaajb`bbkaa`bjaakb`bblaa`bkaalb`bbmaa`blaamb`bbnaa`bmaanb`bboaa`bnaaob`bb`ba`boab`aTcab`bb`bE
6
-A`Lb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
6
+A`b`bLb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
7 7
 Bah`oabbcaAaaAaaaaaadaah`AbaTaaaaabaa
8 8
 Bb`baboaabga@dTcab`bab
9 9
 BahacoabbcaAaaBooaaaaddaahac@aTaaadadac
... ...
@@ -37,7 +37,7 @@ Bb`bblboaabga@dTcab`bblb
37 37
 Bb`dbmboabbfaPoooooooooooooooohAahaabnbdab`dbmb@hTaabnbb`bboa
38 38
 Bb`bboboaabga@dTcab`bbob
39 39
 BTcab`bAadE
40
-A`Lbdbahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bFbmcbia
40
+A`b`bLbdbahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bFbmcbia
41 41
 Bah`oabbhaBooaAaaaaaadaah`BnoaTaaaaabaa
42 42
 Bb`baboaabga@dTcab`bab
43 43
 BahacoabbhaAaaBooaaaaddaahacAbaTaaadadac
... ...
@@ -63,7 +63,7 @@ Bb`bb`boaabga@dTcab`bb`b
63 63
 Bb`dbaboabbkaAahAahaabbbdab`dbab@hTaabbbbhabga
64 64
 Bb`bbcboaabga@dTcab`bbcb
65 65
 BTcab`bAddE
66
-A`Lb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
66
+A`b`bLb`cahaab`bahaab`bahaab`bahaab`bb`aaab`bb`aaab`bb`aaab`bb`aaab`bb`baab`bb`baab`bb`baab`bb`baab`bb`daab`bb`daab`bb`daab`bb`daab`bFbaebab
67 67
 Bah`oabblaBooaAaaaaaadaah`BooaTaaaaabaa
68 68
 Bb`baboaabga@dTcab`bab
69 69
 BahacoabblaBooaBooaaaaddaahacAaaTaaadadac
... ...
@@ -97,11 +97,11 @@ Bb`bblboaabga@dTcab`bblb
97 97
 Bb`dbmboabboaImaghnanbdhIogjdckg`bhaabnbdab`dbmbPcfifjghokjjemflghTaabnbb`bboa
98 98
 Bb`bboboaabga@dTcab`bbob
99 99
 BTcab`bB`adE
100
-A`Lacb`aaab`bFafac
100
+A`b`bLacb`aaab`bFafac
101 101
 Bb`a`oabbabDjnmobAgbaaaadab`a`DfddbbTaaaaabaa
102 102
 Bb`baboaabga@dTcab`bab
103 103
 BTcab`bB`ddE
104
-A`Lbfaahaab`bahaab`bahaab`bahaab`bahahaab`bahaab`bb`aaab`bFbebao
104
+A`b`bLbfaahaab`bahaab`bahaab`bahaab`bahahaab`bahaab`bb`aaab`bFbebao
105 105
 Bah`oabbdbAaaBooaaaaadaah`BooaTaaaaabaa
106 106
 Bb`baboaabga@dTcab`bab
107 107
 BahacoabbdbBooaAaaaaaddaahacBooaTaaadadac
... ...
@@ -117,7 +117,7 @@ Bb`bbbaoaabga@dTcab`bbba
117 117
 Bb`abcaoabbebDjnmobAgbaabdadab`abcaDdkoobTaabdaanam
118 118
 Bb`bbeaoaabga@dTcab`bbea
119 119
 BTcab`bC``adE
120
-A`Laoahaab`bahaab`bahaab`bb`aaab`bb`aaab`bFbjaak
120
+A`b`bLaoahaab`bahaab`bahaab`bb`aaab`bb`aaab`bFbjaak
121 121
 Bah`oabblbBooaAaaaaaadaah`@aTaaaaabaa
122 122
 Bb`baboaabga@dTcab`bab
123 123
 BahacoabbhbBooaAaaaaaddaahac@aTaaadadac
... ...
@@ -129,7 +129,7 @@ Bb`bakoaabga@dTcab`bak
129 129
 Bb`aaloabbibDinmobAgbaaamdab`aalAfbTaaamajai
130 130
 Bb`banoaabga@dTcab`ban
131 131
 BTcab`bC``ddE
132
-A`Lalahaab`bahaab`bahaab`bb`aaab`bFbeaai
132
+A`b`bLalahaab`bahaab`bahaab`bb`aaab`bFbeaai
133 133
 Bah`oabb`cAaaAadaaaadaah`AbaTaaaaabaa
134 134
 Bb`baboaabga@dTcab`bab
135 135
 Bahacoabb`cAaa@daaaddaahacAaaTaaadadac
... ...
@@ -139,19 +139,19 @@ Bb`bahoaabga@dTcab`bah
139 139
 Bb`aaioabbacDnojobAbdaaajdab`aaiDhoknbTaaajahag
140 140
 Bb`bakoaabga@dTcab`bak
141 141
 BTcab`bD```adE
142
-A`Lagahaab`bahahaab`bFalae
142
+A`b`bLagahaab`bahahaab`bFalae
143 143
 Bah`oabbdcBnoaAadaaaadaah`BogaTaaaaabaa
144 144
 Bb`baboaabga@dTcab`bab
145 145
 BahacoabbcaBnoaAeaahadoabbdcacAadaaaedaahadAaaTaaaeadac
146 146
 Bb`bafoaabga@dTcab`baf
147 147
 BTcab`bD```ddE
148
-A`Lafahaab`bahaab`bFakae
148
+A`b`bLafahaab`bahaab`bFakae
149 149
 Bah`oabbhcBnoaAaaaaaadaah`BooaTaaaaabaa
150 150
 Bb`baboaabga@dTcab`bab
151 151
 BahacoabbhcBngaAaaaaaddaahacBocaTaaadadac
152 152
 Bb`baeoaabga@dTcab`bae
153 153
 BTcab`bE````adE
154
-A`Lalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
154
+A`b`bLalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
155 155
 Bah`oabblcBjeaAoaaaaadaah`AjaTaaaaabaa
156 156
 Bb`baboaabga@dTcab`bab
157 157
 Bb`aacoabbmcDlkjebD```obaaaddab`aacD```ebTaaadadac
... ...
@@ -161,7 +161,7 @@ Bb`bahoaabga@dTcab`bah
161 161
 Bb`daioabbocPdcbahgfedcbalkjehG``````ohaaajdab`daiG``````fhTaaajahag
162 162
 Bb`bakoaabga@dTcab`bak
163 163
 BTcab`bE````ddE
164
-A`Lalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
164
+A`b`bLalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
165 165
 Bah`oabb`dBjeaAoaaaaadaah`BoeaTaaaaabaa
166 166
 Bb`baboaabga@dTcab`bab
167 167
 Bb`aacoabbadDlkjebD```obaaaddab`aacDlkjobTaaadadac
... ...
@@ -171,7 +171,7 @@ Bb`bahoaabga@dTcab`bah
171 171
 Bb`daioabbcdPdcbahgfedcbalkjehG``````ohaaajdab`daiPdcbahgoedcbalkjehTaaajahag
172 172
 Bb`bakoaabga@dTcab`bak
173 173
 BTcab`bF`````adE
174
-A`Lalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
174
+A`b`bLalahaab`bb`aaab`bb`baab`bb`daab`bFbeaai
175 175
 Bah`oabbddBjeaB`oaaaaadaah`BjjaTaaaaabaa
176 176
 Bb`baboaabga@dTcab`bab
177 177
 Bb`aacoabbedDjejebD``oobaaaddab`aacDjeejbTaaadadac
... ...
@@ -181,7 +181,7 @@ Bb`bahoaabga@dTcab`bah
181 181
 Bb`daioabbgdPjejejejejejejejehP``oooooooooooooohaaajdab`daiPjeejejejejejejejhTaaajahag
182 182
 Bb`bakoaabga@dTcab`bak
183 183
 BTcab`bF`````ddE
184
-A`Laib`aaab`bb`baab`bb`daab`bFb`aag
184
+A`b`bLaib`aaab`bb`baab`bb`daab`bFb`aag
185 185
 Bb`a`oaabhdBloaaaaadab`a`DlooobTaaaaabaa
186 186
 Bb`baboaabga@dTcab`bab
187 187
 Bb`bacoaabidDjooobaaaddab`bacHjooooooodTaaadadac
... ...
@@ -189,7 +189,7 @@ Bb`baeoaabga@dTcab`bae
189 189
 Bb`dafoaabjdHjooooooodaaagdab`dafPjooooooooooooooohTaaagafae
190 190
 Bb`bahoaabga@dTcab`bah
191 191
 BTcab`bG``````adE
192
-A`Laib`aaab`bb`baab`bb`daab`bFb`aag
192
+A`b`bLaib`aaab`bb`baab`bb`daab`bFb`aag
193 193
 Bb`a`oaabkdBloaaaaadab`a`BlobTaaaaabaa
194 194
 Bb`baboaabga@dTcab`bab
195 195
 Bb`bacoaabldDlooobaaaddab`bacDlooodTaaadadac
... ...
@@ -197,7 +197,7 @@ Bb`baeoaabga@dTcab`bae
197 197
 Bb`dafoaabmdHlooooooodaaagdab`dafHlooooooohTaaagafae
198 198
 Bb`bahoaabga@dTcab`bah
199 199
 BTcab`bG``````ddE
200
-A`Laiahaab`bb`aaab`bb`baab`bFb`aag
200
+A`b`bLaiahaab`bb`aaab`bb`baab`bFb`aag
201 201
 Bah`oaabndDmnnobaaaadaah`BmnaTaaaaabaa
202 202
 Bb`baboaabga@dTcab`bab
203 203
 Bb`aacoaabodHmnnomjnmdaaaddab`aacDmnnobTaaadadac
... ...
@@ -205,7 +205,7 @@ Bb`baeoaabga@dTcab`bae
205 205
 Bb`bafoaab`ePonnkmnnomjnmonnkhaaagdab`bafHonnkmnnodTaaagafae
206 206
 Bb`bahoaabga@dTcab`bah
207 207
 BTcab`bH```````adE
208
-A`Laob`baab`bb`baab`bb`baab`bb`baab`bb`baab`bFbjaak
208
+A`b`bLaob`baab`bb`baab`bb`baab`bb`baab`bb`baab`bFbjaak
209 209
 Bb`b`oadbaeHoooooooodAbd@dAddaaaadab`b`CijbdTaaaaabaa
210 210
 Bb`baboaabga@dTcab`bab
211 211
 Bb`bacoadbaeHoooooooodHoooooooodAadHoooooooodaaaddab`bacCbbcdTaaadadac
... ...
@@ -217,137 +217,137 @@ Bb`bakoaabga@dTcab`bak
217 217
 Bb`baloadbaeHooooooood@d@dHoooooooodaaamdab`balBkbdTaaamajai
218 218
 Bb`banoaabga@dTcab`ban
219 219
 BTcab`bH```````ddE
220
-A`Lafb`baab`bb`baab`bFakae
220
+A`b`bLafb`baab`bb`baab`bFakae
221 221
 Bb`b`oacbbeAddAedAfdaaaadab`b`AedTaaaaabaa
222 222
 Bb`baboaabga@dTcab`bab
223 223
 Bb`bacoacbbe@dAedAfdaaaddab`bacAfdTaaadadac
224 224
 Bb`baeoaabga@dTcab`bae
225 225
 BTcab`bH```````hdE
226
-AbLaaahahahFabaa
226
+AbahLaaahahahFabaa
227 227
 Bahaba`aa`TcaahabE
228
-AbLaab`ab`ab`aFabaa
228
+Abb`aLaab`ab`ab`aFabaa
229 229
 Bb`aaba`aa`Tcab`aabE
230
-AbLaab`bb`bb`bFabaa
230
+Abb`bLaab`bb`bb`bFabaa
231 231
 Bb`baba`aa`Tcab`babE
232
-AbLaab`db`db`dFabaa
232
+Abb`dLaab`db`db`dFabaa
233 233
 Bb`daba`aa`Tcab`dabE
234
-AaLaab`bb`bFabaa
234
+Aab`bLaab`bb`bFabaa
235 235
 Bb`baae`Aad`Tcab`baaE
236
-AbLaaahahahFabaa
236
+AbahLaaahahahFabaa
237 237
 Bahabb``aaTcaahabE
238
-AbLaab`ab`ab`aFabaa
238
+Abb`aLaab`ab`ab`aFabaa
239 239
 Bb`aabb``aaTcab`aabE
240
-AbLaab`bb`bb`bFabaa
240
+Abb`bLaab`bb`bb`bFabaa
241 241
 Bb`babb``aaTcab`babE
242
-AbLaab`db`db`dFabaa
242
+Abb`dLaab`db`db`dFabaa
243 243
 Bb`dabb``aaTcab`dabE
244
-AbLaaahahahFabaa
244
+AbahLaaahahahFabaa
245 245
 Bahabc`aa`TcaahabE
246
-AbLaab`ab`ab`aFabaa
246
+Abb`aLaab`ab`ab`aFabaa
247 247
 Bb`aabc`aa`Tcab`aabE
248
-AbLaab`bb`bb`bFabaa
248
+Abb`bLaab`bb`bb`bFabaa
249 249
 Bb`babc`aa`Tcab`babE
250
-AbLaab`db`db`dFabaa
250
+Abb`dLaab`db`db`dFabaa
251 251
 Bb`dabc`aa`Tcab`dabE
252
-AbLaaahahahFabaa
252
+AbahLaaahahahFabaa
253 253
 Bahabd``aaTcaahabE
254
-AbLaab`ab`ab`aFabaa
254
+Abb`aLaab`ab`ab`aFabaa
255 255
 Bb`aabd``aaTcab`aabE
256
-AbLaab`bb`bb`bFabaa
256
+Abb`bLaab`bb`bb`bFabaa
257 257
 Bb`babd``aaTcab`babE
258
-AbLaab`db`db`dFabaa
258
+Abb`dLaab`db`db`dFabaa
259 259
 Bb`dabd``aaTcab`dabE
260
-AbLadahahb`bb`bb`bahFaeaa
260
+AbahLadahahb`bb`bb`bahFaeaa
261 261
 Bb`babo``b`baco`aab`bade`abacahaen`adTcaahaeE
262
-AbLadb`ab`ab`bb`bb`bb`aFaeaa
262
+Abb`aLadb`ab`ab`bb`bb`bb`aFaeaa
263 263
 Bb`babo``b`baco`aab`bade`abacb`aaen`adTcab`aaeE
264
-AbLaab`bb`bb`bFabaa
264
+Abb`bLaab`bb`bb`bFabaa
265 265
 Bb`babe``aaTcab`babE
266
-AbLaab`db`db`dFabaa
266
+Abb`dLaab`db`db`dFabaa
267 267
 Bb`dabe``aaTcab`dabE
268
-AbLaaahahahFabaa
268
+AbahLaaahahahFabaa
269 269
 Bahabf``aaTcaahabE
270
-AbLaab`ab`ab`aFabaa
270
+Abb`aLaab`ab`ab`aFabaa
271 271
 Bb`aabf``aaTcab`aabE
272
-AbLaab`bb`bb`bFabaa
272
+Abb`bLaab`bb`bb`bFabaa
273 273
 Bb`babf``aaTcab`babE
274
-AbLaab`db`db`dFabaa
274
+Abb`dLaab`db`db`dFabaa
275 275
 Bb`dabf``aaTcab`dabE
276
-AbLadahahb`bb`bb`bahFaeaa
276
+AbahLadahahb`bb`bb`bahFaeaa
277 277
 Bb`babo``b`baco`aab`badg`abacahaen`adTcaahaeE
278
-AbLadb`ab`ab`bb`bb`bb`aFaeaa
278
+Abb`aLadb`ab`ab`bb`bb`bb`aFaeaa
279 279
 Bb`babo``b`baco`aab`badg`abacb`aaen`adTcab`aaeE
280
-AbLaab`bb`bb`bFabaa
280
+Abb`bLaab`bb`bb`bFabaa
281 281
 Bb`babg``aaTcab`babE
282
-AbLaab`db`db`dFabaa
282
+Abb`dLaab`db`db`dFabaa
283 283
 Bb`dabg``aaTcab`dabE
284
-AbLacahb`bb`bb`bahFadaa
284
+AbahLacahb`bb`bb`bahFadaa
285 285
 Bb`babo``b`bach`abaaahadn`acTcaahadE
286
-AbLacb`ab`bb`bb`bb`aFadaa
286
+Abb`aLacb`ab`bb`bb`bb`aFadaa
287 287
 Bb`babo``b`bach`abaab`aadn`acTcab`aadE
288
-AbLaab`bb`bb`bFabaa
288
+Abb`bLaab`bb`bb`bFabaa
289 289
 Bb`babh``aaTcab`babE
290
-AbLabb`db`bb`db`dFacaa
290
+Abb`dLabb`db`bb`db`dFacaa
291 291
 Bb`dab`aaab`dach``abTcab`dacE
292
-AbLacahb`bb`bb`bahFadaa
292
+AbahLacahb`bb`bb`bahFadaa
293 293
 Bb`bab`a`b`baci`abaaahadn`acTcaahadE
294
-AbLacb`ab`bb`bb`bb`aFadaa
294
+Abb`aLacb`ab`bb`bb`bb`aFadaa
295 295
 Bb`bab`a`b`baci`abaab`aadn`acTcab`aadE
296
-AbLaab`bb`bb`bFabaa
296
+Abb`bLaab`bb`bb`bFabaa
297 297
 Bb`babi``aaTcab`babE
298
-AbLabb`db`bb`db`dFacaa
298
+Abb`dLabb`db`bb`db`dFacaa
299 299
 Bb`dab`aaab`daci``abTcab`dacE
300
-AbLadahahb`bb`bb`bahFaeaa
300
+AbahLadahahb`bb`bb`bahFaeaa
301 301
 Bb`babo``b`baco`aab`badj`abacahaen`adTcaahaeE
302
-AbLadb`ab`ab`bb`bb`bb`aFaeaa
302
+Abb`aLadb`ab`ab`bb`bb`bb`aFaeaa
303 303
 Bb`babo``b`baco`aab`badj`abacb`aaen`adTcab`aaeE
304
-AbLaab`bb`bb`bFabaa
304
+Abb`bLaab`bb`bb`bFabaa
305 305
 Bb`babj``aaTcab`babE
306
-AbLaab`db`db`dFabaa
306
+Abb`dLaab`db`db`dFabaa
307 307
 Bb`dabj``aaTcab`dabE
308
-AbLaaahahahFabaa
308
+AbahLaaahahahFabaa
309 309
 Bahabk`aa`TcaahabE
310
-AbLaab`ab`ab`aFabaa
310
+Abb`aLaab`ab`ab`aFabaa
311 311
 Bb`aabk`aa`Tcab`aabE
312
-AbLaab`bb`bb`bFabaa
312
+Abb`bLaab`bb`bb`bFabaa
313 313
 Bb`babk`aa`Tcab`babE
314
-AbLaab`db`db`dFabaa
314
+Abb`dLaab`db`db`dFabaa
315 315
 Bb`dabk`aa`Tcab`dabE
316
-AbLaaahahahFabaa
316
+AbahLaaahahahFabaa
317 317
 Bahabl`aa`TcaahabE
318
-AbLaab`ab`ab`aFabaa
318
+Abb`aLaab`ab`ab`aFabaa
319 319
 Bb`aabl`aa`Tcab`aabE
320
-AbLaab`bb`bb`bFabaa
320
+Abb`bLaab`bb`bb`bFabaa
321 321
 Bb`babl`aa`Tcab`babE
322
-AbLaab`db`db`dFabaa
322
+Abb`dLaab`db`db`dFabaa
323 323
 Bb`dabl`aa`Tcab`dabE
324
-AbLaaahahahFabaa
324
+AbahLaaahahahFabaa
325 325
 Bahabm`aa`TcaahabE
326
-AbLaab`ab`ab`aFabaa
326
+Abb`aLaab`ab`ab`aFabaa
327 327
 Bb`aabm`aa`Tcab`aabE
328
-AbLaab`bb`bb`bFabaa
328
+Abb`bLaab`bb`bb`bFabaa
329 329
 Bb`babm`aa`Tcab`babE
330
-AbLaab`db`db`dFabaa
330
+Abb`dLaab`db`db`dFabaa
331 331
 Bb`dabm`aa`Tcab`dabE
332
-AaLaaahb`aFabaa
332
+Aab`aLaaahb`aFabaa
333 333
 Bb`aaao``Tcab`aaaE
334
-AaLaab`ab`bFabaa
334
+Aab`bLaab`ab`bFabaa
335 335
 Bb`baao``Tcab`baaE
336
-AaLaab`bb`dFabaa
336
+Aab`dLaab`bb`dFabaa
337 337
 Bb`daao``Tcab`daaE
338
-AaLaaahb`aFabaa
338
+Aab`aLaaahb`aFabaa
339 339
 Bb`aaa`a`Tcab`aaaE
340
-AaLaab`ab`bFabaa
340
+Aab`bLaab`ab`bFabaa
341 341
 Bb`baa`a`Tcab`baaE
342
-AaLaab`bb`dFabaa
342
+Aab`dLaab`bb`dFabaa
343 343
 Bb`daa`a`Tcab`daaE
344
-AaLaab`aahFabaa
344
+AaahLaab`aahFabaa
345 345
 Bahaan``TcaahaaE
346
-AaLaab`bb`aFabaa
346
+Aab`aLaab`bb`aFabaa
347 347
 Bb`aaan``Tcab`aaaE
348
-AaLaab`db`bFabaa
348
+Aab`bLaab`db`bFabaa
349 349
 Bb`baan``Tcab`baaE
350
-AdLbmab`bb`bb`bb`baab`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`bFbnaaa
350
+Adb`bLbmab`bb`bb`bb`baab`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`baab`bb`bFbnaaa
351 351
 Baaadmab`b`aab`bae`aadaaafjab`baaabb`bagl`aeAbdb`bahnaafaeagaaaijab`b`aab`bajl`ahAddb`baknaaiajahaaalmab`baaabb`baml`akAhdb`bannaalakamaaaohab`b`acb`bb`al`anB`adb`bbaanaaob`aanaabbafab`baaacb`bbcal`baaB`bdb`bbdanabbabaabcaaabeahab`babacb`bbfal`bdaB`ddb`bbganabeabdabfaaabhafab`b`acb`bbial`bgaB`hdb`bbjanabhabiabgaaabkadab`b`aab`bblal`bjaC``adb`bbmanabkablabjaaabnadab`baaabb`bboal`bmaC``bdb`bb`bnabnabmaboaTcab`bb`bE
352
-AcLabb`bb`bb`baab`bFacaa
352
+Acb`bLabb`bb`bb`baab`bFacaa
353 353
 Baaaceab`b`@db`badnaacaaabTcab`badE
... ...
@@ -1,5 +1,5 @@
1 1
 ClamBCaa`|`````|`aeaap`clamcoincidencejb
2 2
 Ted
3 3
 E``
4
-A`L`Faaaa
4
+A`b`bL`Faaaa
5 5
 BTcab`bHm``odcbadE