From 3ae0a76d0320be7b4bb2426e13bb442dde8eee12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=B6r=C3=B6k=20Edvin?= Date: Wed, 2 Dec 2009 17:13:07 +0200 Subject: [PATCH] Support for scanning files created by bytecode. --- libclamav/bytecode.c | 61 ++++ libclamav/bytecode.h | 5 + libclamav/bytecode_api.c | 30 +- libclamav/bytecode_priv.h | 4 + libclamav/pe.c | 18 +- unit_tests/input/apicalls2.cbc | 6 +- unit_tests/input/arith.cbc | 490 ++++++++++++++++----------------- unit_tests/input/lsig.cbc | 14 +- 8 files changed, 368 insertions(+), 260 deletions(-) diff --git a/libclamav/bytecode.c b/libclamav/bytecode.c index c901d7e86..3d6e0b132 100644 --- a/libclamav/bytecode.c +++ b/libclamav/bytecode.c @@ -45,9 +45,13 @@ struct cli_bc_ctx *cli_bytecode_context_alloc(void) ctx->opsizes = NULL; ctx->fd = -1; ctx->off = 0; + ctx->ctx = NULL; ctx->hooks.match_counts = nomatch; /* TODO: init all hooks with safe values */ ctx->virname = NULL; + ctx->outfd = -1; + ctx->tempfile = NULL; + ctx->written = 0; return ctx; } @@ -57,6 +61,16 @@ void cli_bytecode_context_destroy(struct cli_bc_ctx *ctx) free(ctx); } +int cli_bytecode_context_getresult_file(struct cli_bc_ctx *ctx, char **tempfilename) +{ + int fd; + *tempfilename = ctx->tempfile; + fd = ctx->outfd; + ctx->tempfile = NULL; + ctx->outfd = -1; + return fd; +} + /* resets bytecode state, so you can run another bytecode with same ctx */ int cli_bytecode_context_reset(struct cli_bc_ctx *ctx) { @@ -66,6 +80,17 @@ int cli_bytecode_context_reset(struct cli_bc_ctx *ctx) ctx->operands = NULL; ctx->values = NULL; ctx->opsizes = NULL; + ctx->written = 0; + if (ctx->outfd != -1) { + cli_dbgmsg("Bytecode: nobody cared about FD %d, %s\n", ctx->outfd, + ctx->tempfile); + ftruncate(ctx->outfd, 0); + close(ctx->outfd); + cli_unlink(ctx->tempfile); + free(ctx->tempfile); + ctx->tempfile = NULL; + ctx->outfd = -1; + } return CL_SUCCESS; } @@ -1581,6 +1606,37 @@ int cli_bytecode_runhook(const struct cl_engine *engine, struct cli_bc_ctx *ctx, ret = cli_bytecode_context_getresult_int(ctx); /* TODO: use prefix here */ cli_dbgmsg("Bytecode %u returned %u\n", bc->id, ret); + if (!ret) { + char *tempfile; + cli_ctx *cctx = ctx->ctx; + int fd = cli_bytecode_context_getresult_file(ctx, &tempfile); + if (fd != -1) { + if (cctx && cctx->engine->keeptmp) + cli_dbgmsg("Bytecode %u unpacked file saved in %s\n", + bc->id, tempfile); + else + cli_dbgmsg("Bytecode %u unpacked file\n", bc->id); + lseek(fd, 0, SEEK_SET); + cli_dbgmsg("***** Scanning unpacked file ******\n"); + ret = cli_magic_scandesc(fd, cctx); + if (!cctx || !cctx->engine->keeptmp) + ftruncate(fd, 0); + close(fd); + if (!cctx || !cctx->engine->keeptmp) { + if (cli_unlink(tempfile)) + ret = CL_EUNLINK; + } + free(tempfile); + if (ret != CL_CLEAN) { + if (ret == CL_VIRUS) + cli_dbgmsg("Scanning unpacked file by bytecode %u found a virus\n", bc->id); + cli_bytecode_context_clear(ctx); + return ret; + } + cli_bytecode_context_reset(ctx); + continue; + } + } cli_bytecode_context_reset(ctx); } return CL_CLEAN; @@ -1592,3 +1648,8 @@ int cli_bytecode_context_setpe(struct cli_bc_ctx *ctx, const struct cli_pe_hook_ ctx->hooks.pedata = data; return 0; } + +void cli_bytecode_context_setctx(struct cli_bc_ctx *ctx, void *cctx) +{ + ctx->ctx = cctx; +} diff --git a/libclamav/bytecode.h b/libclamav/bytecode.h index c22503bc6..bc4ec4db1 100644 --- a/libclamav/bytecode.h +++ b/libclamav/bytecode.h @@ -75,12 +75,17 @@ struct cli_all_bc { struct cli_pe_hook_data; struct cli_bc_ctx *cli_bytecode_context_alloc(void); +/* FIXME: we can't include others.h because others.h includes us...*/ +void cli_bytecode_context_setctx(struct cli_bc_ctx *ctx, void *cctx); int cli_bytecode_context_setfuncid(struct cli_bc_ctx *ctx, const struct cli_bc *bc, unsigned funcid); int cli_bytecode_context_setparam_int(struct cli_bc_ctx *ctx, unsigned i, uint64_t c); int cli_bytecode_context_setparam_ptr(struct cli_bc_ctx *ctx, unsigned i, void *data, unsigned datalen); int cli_bytecode_context_setfile(struct cli_bc_ctx *ctx, int fd); int cli_bytecode_context_setpe(struct cli_bc_ctx *ctx, const struct cli_pe_hook_data *data); int cli_bytecode_context_clear(struct cli_bc_ctx *ctx); +/* returns file descriptor, sets tempfile. Caller takes ownership, and is + * responsible for freeing/unlinking */ +int cli_bytecode_context_getresult_file(struct cli_bc_ctx *ctx, char **tempfilename); uint64_t cli_bytecode_context_getresult_int(struct cli_bc_ctx *ctx); void cli_bytecode_context_destroy(struct cli_bc_ctx *ctx); diff --git a/libclamav/bytecode_api.c b/libclamav/bytecode_api.c index f3dadfaee..e3207c94e 100644 --- a/libclamav/bytecode_api.c +++ b/libclamav/bytecode_api.c @@ -23,6 +23,8 @@ #define _XOPEN_SOURCE 600 #include #include +#include +#include #include "cltypes.h" #include "clambc.h" #include "bytecode_priv.h" @@ -98,8 +100,32 @@ uint32_t cli_bcapi_disasm_x86(struct cli_bc_ctx *ctx, struct DISASM_RESULT *res, int32_t cli_bcapi_write(struct cli_bc_ctx *ctx, uint8_t*data, int32_t len) { - //TODO: write to tempfile (checking maxsize), and later scan it via - //magicscandesc + int32_t res; + cli_ctx *cctx = (cli_ctx*)ctx->ctx; + if (len < 0) { + cli_warnmsg("Bytecode API: called with negative length!\n"); + return -1; + } + if (ctx->outfd == -1) { + ctx->tempfile = cli_gentemp(cctx ? cctx->engine->tmpdir : NULL); + if (!ctx->tempfile) { + cli_dbgmsg("Bytecode API: Unable to allocate memory for tempfile\n"); + return -1; + } + ctx->outfd = open(ctx->tempfile, O_RDWR|O_CREAT|O_EXCL|O_TRUNC|O_BINARY, 0600); + if (ctx->outfd == -1) { + cli_warnmsg("Bytecode API: Can't create file %s\n", ctx->tempfile); + free(ctx->tempfile); + return -1; + } + } + if (cli_checklimits("bytecode api", cctx, ctx->written + len, 0, 0)) + return -1; + res = cli_writen(ctx->outfd, data, len); + if (res > 0) ctx->written += res; + if (res == -1) + cli_dbgmsg("Bytecode API: write failed: %s\n", errno); + return res; } diff --git a/libclamav/bytecode_priv.h b/libclamav/bytecode_priv.h index c7650f54f..2616a7d34 100644 --- a/libclamav/bytecode_priv.h +++ b/libclamav/bytecode_priv.h @@ -116,6 +116,10 @@ struct cli_bc_ctx { int fd; const char *virname; struct cli_bc_hooks hooks; + int outfd; + char *tempfile; + void *ctx; + unsigned written; }; struct cli_all_bc; int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct cli_bc_func *func, const struct cli_bc_inst *inst); diff --git a/libclamav/pe.c b/libclamav/pe.c index ae3285f9e..9a87dc784 100644 --- a/libclamav/pe.c +++ b/libclamav/pe.c @@ -2271,9 +2271,21 @@ int cli_scanpe(int desc, cli_ctx *ctx) pedata.overlays = overlays; pedata.overlays_sz = fsize - overlays; cli_bytecode_context_setpe(bc_ctx, &pedata); - if (cli_bytecode_runhook(ctx->engine, bc_ctx, BC_PE_UNPACKER, desc, ctx->virname) == CL_VIRUS) - return CL_VIRUS; - cli_bytecode_context_destroy(bc_ctx); + cli_bytecode_context_setctx(bc_ctx, ctx); + ret = cli_bytecode_runhook(ctx->engine, bc_ctx, BC_PE_UNPACKER, desc, ctx->virname); + switch (ret) { + case CL_VIRUS: + return CL_VIRUS; + case CL_SUCCESS: + ndesc = cli_bytecode_context_getresult_file(bc_ctx, &tempfile); + cli_bytecode_context_destroy(bc_ctx); + if (ndesc != -1) { + CLI_UNPRESULTS("bytecode PE hook", 1, 1, (0)); + } + break; + default: + cli_bytecode_context_destroy(bc_ctx); + } free(exe_sections); return CL_CLEAN; diff --git a/unit_tests/input/apicalls2.cbc b/unit_tests/input/apicalls2.cbc index 06550538c..d1bc79b59 100644 --- a/unit_tests/input/apicalls2.cbc +++ b/unit_tests/input/apicalls2.cbc @@ -1,10 +1,10 @@ ClamBCaa`|``````|`akafp`clamcoincidencejb -Tedaa`cabjdebjdacb`bbjdb`bacb`bb`bb`bebfd +Tedcabjdebjdaa`acb`bbjdb`bacb`bb`bb`bebed Eababaabhd|afdgefcgdg`c``abbid|afdgefcgdgac`` G`` -A`b`bLahbfdabgd```b`b`aa`b`b`aa`b`b`Fajac -Bbgdaadb`@d@d``fb`aab`bacabbabHonnkm``odHm``oonnkdaaadeab`bacHhgfedcbadTaaadaaab +A`b`bLahbedabfd```b`b`aa`b`b`aa`b`b`Fajac +Bbfdaadb`@d@d``fb`aab`bacabbabHonnkm``odHm``oonnkdaaadeab`bacHhgfedcbadTaaadaaab Bb`baeabbaa`Honnkmjnmdaaafeab`baeHhgfedcbadb`bagoaafDm``odDmjnmdTcab`bag BTcab`bDmjnmdE Aab`bLabah`aa`b`b`Facaa diff --git a/unit_tests/input/arith.cbc b/unit_tests/input/arith.cbc index b274a27b8..27ccfada0 100644 --- a/unit_tests/input/arith.cbc +++ b/unit_tests/input/arith.cbc @@ -4,7 +4,247 @@ Tedaa` E`` G`` A`b`bLbabb`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`Fbbbaa -Bb`b``b`bnbb`baa`b`blcb`bab`b`bdcb`bac`b`bncb`bad`b`bgcb`bae`b`bfcb`baf`b`bkcb`bag`b`bccb`bah`b`b`cb`bai`b`bobb`baj`b`becb`bak`b`bocb`bal`b`bjcb`bam`b`b`db`ban`b`bmcb`bao`b`bacb`bb`a`b`bhcb`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 +Bb`b``b`abb`baa`b`anb`bab`b`agb`bac`b`b`ab`bad`b`ajb`bae`b`aib`baf`b`amb`bag`b`afb`bah`b`adb`bai`b`acb`baj`b`ahb`bak`b`baab`bal`b`alb`bam`b`bbab`ban`b`aob`bao`b`aeb`bb`a`b`akb`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 +A`b`bLb`cah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbaebab +Bah``bbb`bAaaAaaaaaaeaah`AbaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbb`bAaaBooaaaadeaahac@aTaaadadac +Bb`bae`babca@dTcab`bae +Bahaf`bbb`bBooaBooaaaageaahafBnoaTaaagafae +Bb`bah`babca@dTcab`bah +Bahai`bbb`bBooaAaaaaajeaahai@aTaaajahag +Bb`bak`babca@dTcab`bak +Bb`aal`bbbmaAabAabaaameab`aalAbbTaaamajai +Bb`ban`babca@dTcab`ban +Bb`aao`bbbmaAabDoooobaab`aeab`aao@bTaab`aalak +Bb`bbaa`babca@dTcab`bbaa +Bb`abba`bbbmaDoooobDoooobaabcaeab`abbaDnooobTaabcaanam +Bb`bbda`babca@dTcab`bbda +Bb`abea`bbbmaDoooobAabaabfaeab`abea@bTaabfab`aao +Bb`bbga`babca@dTcab`bbga +Bb`bbha`bbbnaAadAadaabiaeab`bbhaAbdTaabiabbabaa +Bb`bbja`babca@dTcab`bbja +Bb`bbka`bbbnaAadHoooooooodaablaeab`bbka@dTaablabdabca +Bb`bbma`babca@dTcab`bbma +Bb`bbna`bbbnaHoooooooodHoooooooodaaboaeab`bbnaHnooooooodTaaboabfabea +Bb`bb`b`babca@dTcab`bb`b +Bb`bbab`bbbnaHoooooooodAadaabbbeab`bbab@dTaabbbbhabga +Bb`bbcb`babca@dTcab`bbcb +Bb`dbdb`bbboaAahAahaabebeab`dbdbAbhTaabebbjabia +Bb`bbfb`babca@dTcab`bbfb +Bb`dbgb`bbboaAahPoooooooooooooooohaabhbeab`dbgb@hTaabhbblabka +Bb`bbib`babca@dTcab`bbib +Bb`dbjb`bbboaPoooooooooooooooohPoooooooooooooooohaabkbeab`dbjbPnooooooooooooooohTaabkbbnabma +Bb`bblb`babca@dTcab`bblb +Bb`dbmb`bbboaPoooooooooooooooohAahaabnbeab`dbmb@hTaabnbb`bboa +Bb`bbob`babca@dTcab`bbob +BTcab`bAadE +A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai +Bah``bbbdbBjeaAoaaaaaeaah`AjaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`aac`bbbabDlkjebD```obaaadeab`aacD```ebTaaadadac +Bb`bae`babca@dTcab`bae +Bb`baf`bbbbbHdcbalkjedG``````odaaageab`bafG``````jdTaaagafae +Bb`bah`babca@dTcab`bah +Bb`dai`bbbcbPdcbahgfedcbalkjehG``````ohaaajeab`daiG``````fhTaaajahag +Bb`bak`babca@dTcab`bak +BTcab`bE````ddE +A`b`bLafah`aa`b`b`ah`aa`b`b`Fakae +Bah``bbbhbBnoaAaaaaaaeaah`BooaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbbhbBngaAaaaaadeaahacBocaTaaadadac +Bb`bae`babca@dTcab`bae +BTcab`bE````adE +A`b`bLaob`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`Fbjaak +Bb`b``bdbbeHoooooooodAbd@dAddaaaaeab`b`CijbdTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`bac`bdbbeHoooooooodHoooooooodAadHoooooooodaaadeab`bacCbbcdTaaadadac +Bb`bae`babca@dTcab`bae +Bb`baf`bdbbeHooooooood@dAcdHnooooooodaaageab`bafCcjbdTaaagafae +Bb`bah`babca@dTcab`bah +Bb`bai`bdbbeHooooooood@dAcd@daaajeab`baiCcnbdTaaajahag +Bb`bak`babca@dTcab`bak +Bb`bal`bdbbeHooooooood@d@dHoooooooodaaameab`balBkbdTaaamajai +Bb`ban`babca@dTcab`ban +BTcab`bH```````ddE +A`b`bLagah`aa`b`b`ah`ah`aa`b`b`Falae +Bah``bbblbBnoaAadaaaaeaah`BogaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbb`bBnoaAeaahad`bbblbacAadaaaeeaahadAaaTaaaeadac +Bb`baf`babca@dTcab`baf +BTcab`bD```ddE +A`b`bLb`cah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbaebab +Bah``bbb`cBooaAaaaaaaeaah`BooaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbb`cBooaBooaaaadeaahacAaaTaaadadac +Bb`bae`babca@dTcab`bae +Bahaf`bbb`cAaaAaaaaageaahafAaaTaaagafae +Bb`bah`babca@dTcab`bah +Bahai`bbb`cBaaaBcbaaaajeaahaiBceaTaaajahag +Bb`bak`babca@dTcab`bak +Bb`aal`bbbmbDoooobAabaaameab`aalDoooobTaaamajai +Bb`ban`babca@dTcab`ban +Bb`aao`bbbmbDoooobDoooobaab`aeab`aaoAabTaab`aalak +Bb`bbaa`babca@dTcab`bbaa +Bb`abba`bbbmbAabAabaabcaeab`abbaAabTaabcaanam +Bb`bbda`babca@dTcab`bbda +Bb`abea`bbbmbBckbCgfcbaabfaeab`abeaDe`afbTaabfab`aao +Bb`bbga`babca@dTcab`bbga +Bb`bbha`bbbnbHoooooooodAadaabiaeab`bbhaHoooooooodTaabiabbabaa +Bb`bbja`babca@dTcab`bbja +Bb`bbka`bbbnbHoooooooodHoooooooodaablaeab`bbkaAadTaablabdabca +Bb`bbma`babca@dTcab`bbma +Bb`bbna`bbbnbAadAadaaboaeab`bbnaAadTaaboabfabea +Bb`bb`b`babca@dTcab`bb`b +Bb`bbab`bbbnbE`emkbdEhnmdmdaabbbeab`bbabH`h`jlgbgdTaabbbbhabga +Bb`bbcb`babca@dTcab`bbcb +Bb`dbdb`bbbobPoooooooooooooooohAahaabebeab`dbdbPoooooooooooooooohTaabebbjabia +Bb`bbfb`babca@dTcab`bbfb +Bb`dbgb`bbbobPoooooooooooooooohPoooooooooooooooohaabhbeab`dbgbAahTaabhbblabka +Bb`bbib`babca@dTcab`bbib +Bb`dbjb`bbbobAahAahaabkbeab`dbjbAahTaabkbbnabma +Bb`bblb`babca@dTcab`bblb +Bb`dbmb`bbbobImaghnanbdhIogjdckg`bhaabnbeab`dbmbPcfifjghokjjemflghTaabnbb`bboa +Bb`bbob`babca@dTcab`bbob +BTcab`bB`adE +A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai +Bah``bbbdcBjeaAoaaaaaeaah`BoeaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`aac`bbbacDlkjebD```obaaadeab`aacDlkjobTaaadadac +Bb`bae`babca@dTcab`bae +Bb`baf`bbbbcHdcbalkjedG``````odaaageab`bafHdcbalkoedTaaagafae +Bb`bah`babca@dTcab`bah +Bb`dai`bbbccPdcbahgfedcbalkjehG``````ohaaajeab`daiPdcbahgoedcbalkjehTaaajahag +Bb`bak`babca@dTcab`bak +BTcab`bF`````adE +A`b`bLaoah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`Fbjaak +Bah``bbb`dBooaAaaaaaaeaah`@aTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbbldBooaAaaaaadeaahac@aTaaadadac +Bb`bae`babca@dTcab`bae +Bahaf`bbb`dAaaBooaaaageaahaf@aTaaagafae +Bb`bah`babca@dTcab`bah +Bb`aai`bbbmcDinmobAgbaaajeab`aaiDmooobTaaajahag +Bb`bak`babca@dTcab`bak +Bb`aal`bbbidDinmobAgbaaameab`aalAfbTaaamajai +Bb`ban`babca@dTcab`ban +BTcab`bC``ddE +A`b`bLbfaah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`Fbebao +Bah``bbbhcAaaBooaaaaaeaah`BooaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbbhcBooaAaaaaadeaahacBooaTaaadadac +Bb`bae`babca@dTcab`bae +Bahaf`bbbhcBooaBooaaaageaahafAaaTaaagafae +Bb`bah`babca@dTcab`bah +Bahai`bbbhcAaaAaaaaajeaahaiAaaTaaajahag +Bb`bak`babca@dTcab`bak +Bahal`bbb`bBnoaAeaaham`bbbhcAfaalaaaneaahamAbaTaaanajai +Bb`bao`babca@dTcab`bao +Bahb`a`bbbhcalAbaaabaaeaahb`aAaaTaabaaalak +Bb`bbba`babca@dTcab`bbba +Bb`abca`bbbecDjnmobAgbaabdaeab`abcaDdkoobTaabdaanam +Bb`bbea`babca@dTcab`bbea +BTcab`bC``adE +A`b`bLafb`b`aa`b`b`b`b`aa`b`b`Fakae +Bb`b``bcbaeAddAedAfdaaaaeab`b`AedTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`bac`bcbae@dAedAfdaaadeab`bacAfdTaaadadac +Bb`bae`babca@dTcab`bae +BTcab`bH```````hdE +A`b`bLaib`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fb`aag +Bb`a``babfaBloaaaaaeab`a`DlooobTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`bac`babdaDjooobaaadeab`bacHjooooooodTaaadadac +Bb`bae`babca@dTcab`bae +Bb`daf`babeaHjooooooodaaageab`dafPjooooooooooooooohTaaagafae +Bb`bah`babca@dTcab`bah +BTcab`bG``````adE +A`b`bLalah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`Fbeaai +Bah``bbblcAaaAadaaaaeaah`AbaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbblcAaa@daaadeaahacAaaTaaadadac +Bb`bae`babca@dTcab`bae +Bahaf`bbblcBnoaAbdaaageaahafBhoaTaaagafae +Bb`bah`babca@dTcab`bah +Bb`aai`bbbicDnojobAbdaaajeab`aaiDhoknbTaaajahag +Bb`bak`babca@dTcab`bak +BTcab`bD```adE +A`b`bLbdbah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbmcbia +Bah``bbbddBooaAaaaaaaeaah`BnoaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bahac`bbbddAaaBooaaaadeaahacAbaTaaadadac +Bb`bae`babca@dTcab`bae +Bahaf`bbbddAaaAaaaaageaahaf@aTaaagafae +Bb`bah`babca@dTcab`bah +Bb`aai`bbbadDoooobAabaaajeab`aaiDnooobTaaajahag +Bb`bak`babca@dTcab`bak +Bb`aal`bbbadAabDoooobaaameab`aalAbbTaaamajai +Bb`ban`babca@dTcab`ban +Bb`aao`bbbadAabAabaab`aeab`aao@bTaab`aalak +Bb`bbaa`babca@dTcab`bbaa +Bb`bbba`bbbbdHoooooooodAadaabcaeab`bbbaHnooooooodTaabcaanam +Bb`bbda`babca@dTcab`bbda +Bb`bbea`bbbbdAadHoooooooodaabfaeab`bbeaAbdTaabfab`aao +Bb`bbga`babca@dTcab`bbga +Bb`bbha`bbbbdAadAadaabiaeab`bbha@dTaabiabbabaa +Bb`bbja`babca@dTcab`bbja +Bb`dbka`bbbcdPoooooooooooooooohAahaablaeab`dbkaPnooooooooooooooohTaablabdabca +Bb`bbma`babca@dTcab`bbma +Bb`dbna`bbbcdAahPoooooooooooooooohaaboaeab`dbnaAbhTaaboabfabea +Bb`bb`b`babca@dTcab`bb`b +Bb`dbab`bbbcdAahAahaabbbeab`dbab@hTaabbbbhabga +Bb`bbcb`babca@dTcab`bbcb +BTcab`bAddE +A`b`bLaiah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`Fb`aag +Bah``babgaDmnnobaaaaeaah`BmnaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`aac`babhaHmnnomjnmdaaadeab`aacDmnnobTaaadadac +Bb`bae`babca@dTcab`bae +Bb`baf`babiaPonnkmnnomjnmonnkhaaageab`bafHonnkmnnodTaaagafae +Bb`bah`babca@dTcab`bah +BTcab`bH```````adE +A`b`bLacb`a`aa`b`b`Fafac +Bb`a``bbbedDjnmobAgbaaaaeab`a`DfddbbTaaaaabaa +Bb`bab`babca@dTcab`bab +BTcab`bB`ddE +A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai +Bah``bbb`eBjeaB`oaaaaaeaah`BjjaTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`aac`bbbmdDjejebD``oobaaadeab`aacDjeejbTaaadadac +Bb`bae`babca@dTcab`bae +Bb`baf`bbbndHjejejejedH``oooooodaaageab`bafHjeejejejdTaaagafae +Bb`bah`babca@dTcab`bah +Bb`dai`bbbodPjejejejejejejejehP``oooooooooooooohaaajeab`daiPjeejejejejejejejhTaaajahag +Bb`bak`babca@dTcab`bak +BTcab`bF`````ddE +A`b`bLaib`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fb`aag +Bb`a``bablaBloaaaaaeab`a`BlobTaaaaabaa +Bb`bab`babca@dTcab`bab +Bb`bac`babjaDlooobaaadeab`bacDlooodTaaadadac +Bb`bae`babca@dTcab`bae +Bb`daf`babkaHlooooooodaaageab`dafHlooooooohTaaagafae +Bb`bah`babca@dTcab`bah +BTcab`bG``````ddE +Aab`bLaab`b`b`b`Fabaa +Bb`baae`Aad`Tcab`baaE +Aab`bLaab`a`b`b`Fabaa +Bb`baao``Tcab`baaE +Aab`dLaab`b`b`d`Fabaa +Bb`daao``Tcab`daaE +Aab`aLaaah`b`a`Fabaa +Bb`aaao``Tcab`aaaE +AaahLaab`a`ah`Fabaa +Bahaan``TcaahaaE +Aab`aLaab`b`b`a`Fabaa +Bb`aaan``Tcab`aaaE +Aab`bLaab`d`b`b`Fabaa +Bb`baan``Tcab`baaE +Aab`bLaab`a`b`b`Fabaa +Bb`baa`a`Tcab`baaE +Aab`dLaab`b`b`d`Fabaa +Bb`daa`a`Tcab`daaE +Aab`aLaaah`b`a`Fabaa +Bb`aaa`a`Tcab`aaaE Abb`aLaab`a`b`a`b`a`Fabaa Bb`aaba`aa`Tcab`aabE Abb`bLaab`b`b`b`b`b`Fabaa @@ -29,8 +269,6 @@ Abb`dLaab`d`b`d`b`d`Fabaa Bb`dabj``aaTcab`dabE AbahLadah`ah`b`b`b`b`b`b`ah`Faeaa Bb`babo``b`baco`aab`badj`abacahaen`adTcaahaeE -Aab`bLaab`b`b`b`Fabaa -Bb`baae`Aad`Tcab`baaE Abb`aLacb`a`b`b`b`b`b`b`b`a`Fadaa Bb`bab`a`b`baci`abaab`aadn`acTcab`aadE Abb`bLaab`b`b`b`b`b`Fabaa @@ -63,12 +301,6 @@ Abb`dLaab`d`b`d`b`d`Fabaa Bb`dabe``aaTcab`dabE AbahLadah`ah`b`b`b`b`b`b`ah`Faeaa Bb`babo``b`baco`aab`bade`abacahaen`adTcaahaeE -Aab`bLaab`a`b`b`Fabaa -Bb`baao``Tcab`baaE -Aab`dLaab`b`b`d`Fabaa -Bb`daao``Tcab`daaE -Aab`aLaaah`b`a`Fabaa -Bb`aaao``Tcab`aaaE Abb`aLacb`a`b`b`b`b`b`b`b`a`Fadaa Bb`babo``b`bach`abaab`aadn`acTcab`aadE Abb`bLaab`b`b`b`b`b`Fabaa @@ -93,236 +325,6 @@ Abb`dLaab`d`b`d`b`d`Fabaa Bb`dabb``aaTcab`dabE AbahLaaah`ah`ah`Fabaa Bahabb``aaTcaahabE -A`b`bLb`cah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbaebab -Bah``bbaeAaaAaaaaaaeaah`AbaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbaeAaaBooaaaadeaahac@aTaaadadac -Bb`bae`baan@dTcab`bae -Bahaf`bbaeBooaBooaaaageaahafBnoaTaaagafae -Bb`bah`baan@dTcab`bah -Bahai`bbaeBooaAaaaaajeaahai@aTaaajahag -Bb`bak`baan@dTcab`bak -Bb`aal`bbabAabAabaaameab`aalAbbTaaamajai -Bb`ban`baan@dTcab`ban -Bb`aao`bbabAabDoooobaab`aeab`aao@bTaab`aalak -Bb`bbaa`baan@dTcab`bbaa -Bb`abba`bbabDoooobDoooobaabcaeab`abbaDnooobTaabcaanam -Bb`bbda`baan@dTcab`bbda -Bb`abea`bbabDoooobAabaabfaeab`abea@bTaabfab`aao -Bb`bbga`baan@dTcab`bbga -Bb`bbha`bbacAadAadaabiaeab`bbhaAbdTaabiabbabaa -Bb`bbja`baan@dTcab`bbja -Bb`bbka`bbacAadHoooooooodaablaeab`bbka@dTaablabdabca -Bb`bbma`baan@dTcab`bbma -Bb`bbna`bbacHoooooooodHoooooooodaaboaeab`bbnaHnooooooodTaaboabfabea -Bb`bb`b`baan@dTcab`bb`b -Bb`bbab`bbacHoooooooodAadaabbbeab`bbab@dTaabbbbhabga -Bb`bbcb`baan@dTcab`bbcb -Bb`dbdb`bbadAahAahaabebeab`dbdbAbhTaabebbjabia -Bb`bbfb`baan@dTcab`bbfb -Bb`dbgb`bbadAahPoooooooooooooooohaabhbeab`dbgb@hTaabhbblabka -Bb`bbib`baan@dTcab`bbib -Bb`dbjb`bbadPoooooooooooooooohPoooooooooooooooohaabkbeab`dbjbPnooooooooooooooohTaabkbbnabma -Bb`bblb`baan@dTcab`bblb -Bb`dbmb`bbadPoooooooooooooooohAahaabnbeab`dbmb@hTaabnbb`bboa -Bb`bbob`baan@dTcab`bbob -BTcab`bAadE -A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai -Bah``bbaiBjeaAoaaaaaeaah`AjaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`aac`bbafDlkjebD```obaaadeab`aacD```ebTaaadadac -Bb`bae`baan@dTcab`bae -Bb`baf`bbagHdcbalkjedG``````odaaageab`bafG``````jdTaaagafae -Bb`bah`baan@dTcab`bah -Bb`dai`bbahPdcbahgfedcbalkjehG``````ohaaajeab`daiG``````fhTaaajahag -Bb`bak`baan@dTcab`bak -BTcab`bE````ddE -A`b`bLafah`aa`b`b`ah`aa`b`b`Fakae -Bah``bbamBnoaAaaaaaaeaah`BooaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbamBngaAaaaaadeaahacBocaTaaadadac -Bb`bae`baan@dTcab`bae -BTcab`bE````adE -A`b`bLaob`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`Fbjaak -Bb`b``bdbbcHoooooooodAbd@dAddaaaaeab`b`CijbdTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`bac`bdbbcHoooooooodHoooooooodAadHoooooooodaaadeab`bacCbbcdTaaadadac -Bb`bae`baan@dTcab`bae -Bb`baf`bdbbcHooooooood@dAcdHnooooooodaaageab`bafCcjbdTaaagafae -Bb`bah`baan@dTcab`bah -Bb`bai`bdbbcHooooooood@dAcd@daaajeab`baiCcnbdTaaajahag -Bb`bak`baan@dTcab`bak -Bb`bal`bdbbcHooooooood@d@dHoooooooodaaameab`balBkbdTaaamajai -Bb`ban`baan@dTcab`ban -BTcab`bH```````ddE -Adb`bLbmab`b`b`b`b`b`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`Fbnaaa -Baaadnab`b`aab`bae`aadaaafkab`baaabb`bagl`aeAbdb`bahoaafaeagaaaikab`b`aab`bajl`ahAddb`bakoaaiajahaaalnab`baaabb`baml`akAhdb`banoaalakamaaaoiab`b`acb`bb`al`anB`adb`bbaaoaaob`aanaabbagab`baaacb`bbcal`baaB`bdb`bbdaoabbabaabcaaabeaiab`babacb`bbfal`bdaB`ddb`bbgaoabeabdabfaaabhagab`b`acb`bbial`bgaB`hdb`bbjaoabhabiabgaaabkaeab`b`aab`bblal`bjaC``adb`bbmaoabkablabjaaabnaeab`baaabb`bboal`bmaC``bdb`bb`boabnabmaboaTcab`bb`bE -A`b`bLagah`aa`b`b`ah`ah`aa`b`b`Falae -Bah``bbbbaBnoaAadaaaaeaah`BogaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbaeBnoaAeaahad`bbbbaacAadaaaeeaahadAaaTaaaeadac -Bb`baf`baan@dTcab`baf -BTcab`bD```ddE -A`b`bLb`cah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbaebab -Bah``bbbfaBooaAaaaaaaeaah`BooaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbbfaBooaBooaaaadeaahacAaaTaaadadac -Bb`bae`baan@dTcab`bae -Bahaf`bbbfaAaaAaaaaageaahafAaaTaaagafae -Bb`bah`baan@dTcab`bah -Bahai`bbbfaBaaaBcbaaaajeaahaiBceaTaaajahag -Bb`bak`baan@dTcab`bak -Bb`aal`bbbcaDoooobAabaaameab`aalDoooobTaaamajai -Bb`ban`baan@dTcab`ban -Bb`aao`bbbcaDoooobDoooobaab`aeab`aaoAabTaab`aalak -Bb`bbaa`baan@dTcab`bbaa -Bb`abba`bbbcaAabAabaabcaeab`abbaAabTaabcaanam -Bb`bbda`baan@dTcab`bbda -Bb`abea`bbbcaBckbCgfcbaabfaeab`abeaDe`afbTaabfab`aao -Bb`bbga`baan@dTcab`bbga -Bb`bbha`bbbdaHoooooooodAadaabiaeab`bbhaHoooooooodTaabiabbabaa -Bb`bbja`baan@dTcab`bbja -Bb`bbka`bbbdaHoooooooodHoooooooodaablaeab`bbkaAadTaablabdabca -Bb`bbma`baan@dTcab`bbma -Bb`bbna`bbbdaAadAadaaboaeab`bbnaAadTaaboabfabea -Bb`bb`b`baan@dTcab`bb`b -Bb`bbab`bbbdaE`emkbdEhnmdmdaabbbeab`bbabH`h`jlgbgdTaabbbbhabga -Bb`bbcb`baan@dTcab`bbcb -Bb`dbdb`bbbeaPoooooooooooooooohAahaabebeab`dbdbPoooooooooooooooohTaabebbjabia -Bb`bbfb`baan@dTcab`bbfb -Bb`dbgb`bbbeaPoooooooooooooooohPoooooooooooooooohaabhbeab`dbgbAahTaabhbblabka -Bb`bbib`baan@dTcab`bbib -Bb`dbjb`bbbeaAahAahaabkbeab`dbjbAahTaabkbbnabma -Bb`bblb`baan@dTcab`bblb -Bb`dbmb`bbbeaImaghnanbdhIogjdckg`bhaabnbeab`dbmbPcfifjghokjjemflghTaabnbb`bboa -Bb`bbob`baan@dTcab`bbob -BTcab`bB`adE -A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai -Bah``bbbjaBjeaAoaaaaaeaah`BoeaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`aac`bbbgaDlkjebD```obaaadeab`aacDlkjobTaaadadac -Bb`bae`baan@dTcab`bae -Bb`baf`bbbhaHdcbalkjedG``````odaaageab`bafHdcbalkoedTaaagafae -Bb`bah`baan@dTcab`bah -Bb`dai`bbbiaPdcbahgfedcbalkjehG``````ohaaajeab`daiPdcbahgoedcbalkjehTaaajahag -Bb`bak`baan@dTcab`bak -BTcab`bF`````adE -A`b`bLaoah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`Fbjaak -Bah``bbbibBooaAaaaaaaeaah`@aTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbbkdBooaAaaaaadeaahac@aTaaadadac -Bb`bae`baan@dTcab`bae -Bahaf`bbbibAaaBooaaaageaahaf@aTaaagafae -Bb`bah`baan@dTcab`bah -Bb`aai`bbbfbDinmobAgbaaajeab`aaiDmooobTaaajahag -Bb`bak`baan@dTcab`bak -Bb`aal`bbbhdDinmobAgbaaameab`aalAfbTaaamajai -Bb`ban`baan@dTcab`ban -BTcab`bC``ddE -A`b`bLbfaah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`aa`b`b`ah`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`Fbebao -Bah``bbbnaAaaBooaaaaaeaah`BooaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbbnaBooaAaaaaadeaahacBooaTaaadadac -Bb`bae`baan@dTcab`bae -Bahaf`bbbnaBooaBooaaaageaahafAaaTaaagafae -Bb`bah`baan@dTcab`bah -Bahai`bbbnaAaaAaaaaajeaahaiAaaTaaajahag -Bb`bak`baan@dTcab`bak -Bahal`bbaeBnoaAeaaham`bbbnaAfaalaaaneaahamAbaTaaanajai -Bb`bao`baan@dTcab`bao -Bahb`a`bbbnaalAbaaabaaeaahb`aAaaTaabaaalak -Bb`bbba`baan@dTcab`bbba -Bb`abca`bbbkaDjnmobAgbaabdaeab`abcaDdkoobTaabdaanam -Bb`bbea`baan@dTcab`bbea -BTcab`bC``adE -A`b`bLafb`b`aa`b`b`b`b`aa`b`b`Fakae -Bb`b``bcbicAddAedAfdaaaaeab`b`AedTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`bac`bcbic@dAedAfdaaadeab`bacAfdTaaadadac -Bb`bae`baan@dTcab`bae -BTcab`bH```````hdE -Acb`bLabb`b`b`b`b`b`aa`b`b`Facaa -Baaacfab`b`@db`badoaacaaabTcab`badE -A`b`bLaib`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fb`aag -Bb`a``bababBloaaaaaeab`a`DlooobTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`bac`baboaDjooobaaadeab`bacHjooooooodTaaadadac -Bb`bae`baan@dTcab`bae -Bb`daf`bab`bHjooooooodaaageab`dafPjooooooooooooooohTaaagafae -Bb`bah`baan@dTcab`bah -BTcab`bG``````adE -A`b`bLalah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`Fbeaai -Bah``bbbebAaaAadaaaaeaah`AbaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbbebAaa@daaadeaahacAaaTaaadadac -Bb`bae`baan@dTcab`bae -Bahaf`bbbebBnoaAbdaaageaahafBhoaTaaagafae -Bb`bah`baan@dTcab`bah -Bb`aai`bbbbbDnojobAbdaaajeab`aaiDhoknbTaaajahag -Bb`bak`baan@dTcab`bak -BTcab`bD```adE -A`b`bLbdbah`aa`b`b`ah`aa`b`b`ah`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`b`d`aa`b`b`Fbmcbia -Bah``bbbmbBooaAaaaaaaeaah`BnoaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bahac`bbbmbAaaBooaaaadeaahacAbaTaaadadac -Bb`bae`baan@dTcab`bae -Bahaf`bbbmbAaaAaaaaageaahaf@aTaaagafae -Bb`bah`baan@dTcab`bah -Bb`aai`bbbjbDoooobAabaaajeab`aaiDnooobTaaajahag -Bb`bak`baan@dTcab`bak -Bb`aal`bbbjbAabDoooobaaameab`aalAbbTaaamajai -Bb`ban`baan@dTcab`ban -Bb`aao`bbbjbAabAabaab`aeab`aao@bTaab`aalak -Bb`bbaa`baan@dTcab`bbaa -Bb`bbba`bbbkbHoooooooodAadaabcaeab`bbbaHnooooooodTaabcaanam -Bb`bbda`baan@dTcab`bbda -Bb`bbea`bbbkbAadHoooooooodaabfaeab`bbeaAbdTaabfab`aao -Bb`bbga`baan@dTcab`bbga -Bb`bbha`bbbkbAadAadaabiaeab`bbha@dTaabiabbabaa -Bb`bbja`baan@dTcab`bbja -Bb`dbka`bbblbPoooooooooooooooohAahaablaeab`dbkaPnooooooooooooooohTaablabdabca -Bb`bbma`baan@dTcab`bbma -Bb`dbna`bbblbAahPoooooooooooooooohaaboaeab`dbnaAbhTaaboabfabea -Bb`bb`b`baan@dTcab`bb`b -Bb`dbab`bbblbAahAahaabbbeab`dbab@hTaabbbbhabga -Bb`bbcb`baan@dTcab`bbcb -BTcab`bAddE -A`b`bLaiah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`Fb`aag -Bah``babadDmnnobaaaaeaah`BmnaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`aac`babbdHmnnomjnmdaaadeab`aacDmnnobTaaadadac -Bb`bae`baan@dTcab`bae -Bb`baf`babcdPonnkmnnomjnmonnkhaaageab`bafHonnkmnnodTaaagafae -Bb`bah`baan@dTcab`bah -BTcab`bH```````adE -A`b`bLacb`a`aa`b`b`Fafac -Bb`a``bbbddDjnmobAgbaaaaeab`a`DfddbbTaaaaabaa -Bb`bab`baan@dTcab`bab -BTcab`bB`ddE -A`b`bLalah`aa`b`b`b`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fbeaai -Bah``bbbodBjeaB`oaaaaaeaah`BjjaTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`aac`bbbldDjejebD``oobaaadeab`aacDjeejbTaaadadac -Bb`bae`baan@dTcab`bae -Bb`baf`bbbmdHjejejejedH``oooooodaaageab`bafHjeejejejdTaaagafae -Bb`bah`baan@dTcab`bah -Bb`dai`bbbndPjejejejejejejejehP``oooooooooooooohaaajeab`daiPjeejejejejejejejhTaaajahag -Bb`bak`baan@dTcab`bak -BTcab`bF`````ddE -A`b`bLaib`a`aa`b`b`b`b`aa`b`b`b`d`aa`b`b`Fb`aag -Bb`a``babbeBloaaaaaeab`a`BlobTaaaaabaa -Bb`bab`baan@dTcab`bab -Bb`bac`bab`eDlooobaaadeab`bacDlooodTaaadadac -Bb`bae`baan@dTcab`bae -Bb`daf`babaeHlooooooodaaageab`dafHlooooooohTaaagafae -Bb`bah`baan@dTcab`bah -BTcab`bG``````ddE -AaahLaab`a`ah`Fabaa -Bahaan``TcaahaaE -Aab`aLaab`b`b`a`Fabaa -Bb`aaan``Tcab`aaaE -Aab`bLaab`d`b`b`Fabaa -Bb`baan``Tcab`baaE Abb`aLaab`a`b`a`b`a`Fabaa Bb`aabd``aaTcab`aabE Abb`bLaab`b`b`b`b`b`Fabaa @@ -347,9 +349,7 @@ Abb`dLaab`d`b`d`b`d`Fabaa Bb`dabm`aa`Tcab`dabE AbahLaaah`ah`ah`Fabaa Bahabm`aa`TcaahabE -Aab`bLaab`a`b`b`Fabaa -Bb`baa`a`Tcab`baaE -Aab`dLaab`b`b`d`Fabaa -Bb`daa`a`Tcab`daaE -Aab`aLaaah`b`a`Fabaa -Bb`aaa`a`Tcab`aaaE +Acb`bLabb`b`b`b`b`b`aa`b`b`Facaa +Baaacfab`b`@db`badoaacaaabTcab`badE +Adb`bLbmab`b`b`b`b`b`b`b`aa`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`Fbnaaa +Baaadnab`b`aab`bae`aadaaafkab`baaabb`bagl`aeAbdb`bahoaafaeagaaaikab`b`aab`bajl`ahAddb`bakoaaiajahaaalnab`baaabb`baml`akAhdb`banoaalakamaaaoiab`b`acb`bb`al`anB`adb`bbaaoaaob`aanaabbagab`baaacb`bbcal`baaB`bdb`bbdaoabbabaabcaaabeaiab`babacb`bbfal`bdaB`ddb`bbgaoabeabdabfaaabhagab`b`acb`bbial`bgaB`hdb`bbjaoabhabiabgaaabkaeab`b`aab`bblal`bjaC``adb`bbmaoabkablabjaaabnaeab`baaabb`bboal`bmaC``bdb`bb`boabnabmaboaTcab`bb`bE diff --git a/unit_tests/input/lsig.cbc b/unit_tests/input/lsig.cbc index 52c695fc9..6c1747546 100644 --- a/unit_tests/input/lsig.cbc +++ b/unit_tests/input/lsig.cbc @@ -1,11 +1,11 @@ ClamBCaa`|``c``a```|`bjaabp`clamcoincidencejb -Trojan.Foo.{A,B};Target:0;((0|1|2)=42,2);aabb;ffffffff;aaccee;f00d -Tedebieebheebgeebfeebeeebdeebbeebaeebadebcdaa`acb`bbadb`bdb`db`bchbadbcebadbcebadbcebadbcecab`bdagahdaiahdaeahdabbaddabahdakah +Trojan.Foo.{A,B};Target:2;(((0|1|2)=42,2)|(3=10));EP+0:aabb;ffff;aaccee;f00d;dead +Tedebieebheebgeebfeebeeebdeebbeebaeebadebcdaa`acb`bbadb`bdb`db`bcjbadbcebadbcebadbcebadbcebadbcecab`bdagahdaeahdajahdabbaddabahdakah Eafaaafb`e|amcgefdgfgifbgegcgnfafmfef`` -Gd```hbeabieBdeBbgBofBjfBafBnfBnbBfdBofBof@`bheBad@`bheBbd@`bge@Aa@Ab`b`a@`b`aC``a`bfeBafBafBbfBbf@`beeBffBffBffBffBffBffBffBff@`bfeBffB`cB`cBdf@`bdeBafBafBcfBcfBefBef@`bbe@Af@@AgAa@AhAc@AiAb`bad@Aa`bad@Ab`bad@Af`bad@Ag`bad@Ah`bad@Ai`bcdAcD```h`bcdAbD```h`bcdAaD```h`bcd@D```h` +Gd```hbhabieBdeBbgBofBjfBafBnfBnbBfdBofBof@`bheBad@`bheBbd@`bge@Aa@Ab`b`aAb`b`aC``a`bfeBedB`eBkbB`cBjcBafBafBbfBbf@`beeBffBffBffBff@`beeBffB`cB`cBdf@`bdeBafBafBcfBcfBefBef@`beeBdfBefBafBdf@`bbe@Af@@AgAa@AhAc@AiAb@AjAd`bad@Aa`bad@Ab`bad@Af`bad@Ag`bad@Ah`bad@Ai`bad@Aj`bcdAdD```h`bcdAcD```h`bcdAbD```h`bcdAaD```h`bcd@D```h` A`b`bLaeb`b`aa`aa`bad`b`b`Fahac -Bb`b`gbBaa`aaaagab`b`AadTaaaaaaab -Baaabeab`b`AbdbadacoaabAk`Al`b`badabbafac@dTcab`b@d +Bb`b`gbBca`aaaagab`b`AadTaaaaaaab +Baaabeab`b`AbdbadacoaabAl`Am`b`badabbafac@dTcab`b@d BTcab`b@dE -A`aaLb`ab`b`b`b`b`b`b`b`b`b`aa`aa`aa`aa`b`b`b`b`b`b`b`b`b`b`aa`aa`Fbaaaa -Bb`b`gbBda`b`baagbBca`b`babgbBba`b`baca`aa`b`bada`acabaaaeeab`badBjbdaaaffab`bab@daaagfab`baa@daaahfab`b`@db`bai`aafb`baj`aagb`bak`aahb`bala`ajakb`bama`alaiaaaneab`bamAbdaaaok`anaeTcaaaaoE +A`aaLbcab`b`b`b`b`b`b`b`b`b`aa`aa`aa`aa`b`b`b`b`b`b`b`b`b`b`aa`aa`b`b`aa`aa`Fbdaaa +Bb`b`gbBga`b`baagbBfa`b`babgbBea`b`baca`aa`b`bada`acabaaaeeab`badBjbdaaaffab`bab@daaagfab`baa@daaahfab`b`@db`bai`aafb`baj`aagb`bak`aahb`bala`ajakb`bama`alaiaaaneab`bamAbdaaaok`anaeb`bb`agbBda`aabaaeab`bb`aAjdaabbal`aobaaTcaaabbaE