Function at 0x402aa0
Capabilities:
Compute adler32 checksum

Disassembly:
sub esp, 0xbc
mov edx, dword [esp + 0xcc]
push ebx
mov ebx, dword [esp + 0xd8]
push ebp
mov ebp, dword [esp + 0xcc]
push esi
mov esi, dword [esp + 0xdc]
push edi
mov edi, dword [esp + 0xd8]
mov eax, dword [edi]
add eax, ebp
mov dword [esp + 0x1c], eax
mov eax, dword [ebx]
lea ecx, [eax + esi]
mov dword [esp + 0x34], ecx
mov ecx, dword [esp + 0xe8]
and ecx, 4
mov dword [esp + 0x18], 0xffffffff
mov dword [esp + 0x10], ebp
mov dword [esp + 0x20], esi
mov dword [esp + 0x38], ecx
je 0x402b03
or eax, 0xffffffff
jmp 0x402b09
sub eax, edx
lea eax, [eax + esi - 1]
lea ecx, [eax + 1]
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], ecx
test eax, ecx
jne 0x40424f
cmp esi, edx
jb 0x40424f
mov eax, dword [esp + 0xd0]
mov edx, dword [eax + 0x20]
mov ecx, dword [eax + 0x24]
mov esi, dword [eax + 4]
mov ebx, dword [eax + 0x38]
mov dword [esp + 0x28], edx
mov edx, dword [eax + 0x28]
mov dword [esp + 0x14], ecx
mov ecx, dword [eax + 0x3c]
mov eax, dword [eax]
mov dword [esp + 0x2c], edx
mov dword [esp + 0x44], ecx
cmp eax, 0x35
ja case.0x402b5f.4
movzx edx, byte [eax + 0x4042f4]
jmp dword [edx*4 + 0x40426c]
mov ecx, dword [esp + 0xd0]
xor edx, edx
mov eax, 1
xor esi, esi
xor ebx, ebx
mov dword [ecx + 0xc], edx
mov dword [ecx + 8], edx
mov dword [esp + 0x2c], edx
mov dword [esp + 0x14], edx
mov dword [esp + 0x28], edx
mov dword [ecx + 0x1c], eax
mov dword [ecx + 0x10], eax
test byte [esp + 0xe8], al
je 0x403407
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x402bd4
movzx edi, byte [ebp]
inc ebp
mov dword [ecx + 8], edi
mov dword [esp + 0x10], ebp
jmp 0x402c06
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x402bd2
movzx edx, byte [ebp]
mov ecx, dword [esp + 0xd0]
inc ebp
mov dword [ecx + 8], edx
mov dword [esp + 0x10], ebp
xor edx, edx
jmp 0x402c06
xor edx, edx
test byte [esp + 0xe8], 2
mov ebp, dword [esp + 0x10]
je 0x402bfc
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 1
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov dword [ecx + 8], edx
cmp ebp, eax
jae 0x402ca0
movzx edx, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov dword [ecx + 0xc], edx
mov edi, dword [ecx + 8]
mov ecx, dword [ecx + 0xc]
mov eax, edi
shl eax, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
jne 0x402c51
mov edx, dword [esp + 0xd0]
test byte [edx + 0xc], 0x20
jne 0x402c51
mov eax, edi
and al, 0xf
mov dword [esp + 0x14], 0
cmp al, 8
je 0x402c59
mov dword [esp + 0x14], 1
cmp dword [esp + 0x38], 0
jne 0x402cd1
mov ecx, edi
shr ecx, 4
add ecx, 8
mov eax, 1
shl eax, cl
cmp eax, 0x8000
ja 0x402cc8
cmp dword [esp + 0x24], eax
jb 0x402cc8
xor eax, eax
jmp 0x402ccd
cmp ebp, dword [esp + 0x1c]
jae 0x402c9e
movzx eax, byte [ebp]
mov ecx, dword [esp + 0xd0]
inc ebp
mov dword [ecx + 0xc], eax
mov dword [esp + 0x10], ebp
jmp 0x402c1a
xor edx, edx
test byte [esp + 0xe8], 2
mov ecx, dword [esp + 0xd0]
je 0x402c17
mov dword [esp + 0x18], 1
mov dword [ecx], 2
jmp case.0x402b5f.4
mov eax, 1
or dword [esp + 0x14], eax
cmp dword [esp + 0x14], 0
je 0x403407
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x24
jmp case.0x402b5f.4
cmp ebp, dword [esp + 0x1c]
jae 0x40341a
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 3
jb 0x403410
mov ecx, dword [esp + 0xd0]
mov eax, ebx
and eax, 7
mov dword [ecx + 0x14], eax
shr ebx, 3
sub esi, 3
shr eax, 1
mov dword [ecx + 0x18], eax
jne 0x40355a
mov ecx, esi
and ecx, 7
cmp esi, ecx
jae 0x402d7d
cmp ebp, dword [esp + 0x1c]
jb 0x402d62
test byte [esp + 0xe8], 2
jne 0x403d21
xor eax, eax
jmp 0x402d6b
cmp ebp, dword [esp + 0x1c]
jae 0x402d4a
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
mov edx, esi
and edx, 7
or ebx, eax
cmp esi, edx
jb 0x402d44
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x14], 0
cmp dword [esp + 0x14], 4
jae 0x403486
test esi, esi
je 0x40342f
cmp esi, 8
jae 0x402de9
cmp ebp, dword [esp + 0x1c]
jb 0x402dcb
test byte [esp + 0xe8], 2
jne 0x403d3b
xor eax, eax
jmp 0x402dd4
cmp ebp, dword [esp + 0x1c]
jae 0x402db3
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x402dad
mov ecx, dword [esp + 0xd0]
mov eax, dword [esp + 0x14]
mov byte [eax + ecx + 0x2920], bl
shr ebx, 8
sub esi, 8
inc dword [esp + 0x14]
jmp 0x402d95
cmp ebp, dword [esp + 0x1c]
jae 0x403435
mov dl, byte [ebp]
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0xd0]
inc ebp
inc dword [esp + 0x14]
mov byte [eax + ecx + 0x2920], dl
mov dword [esp + 0x10], ebp
jmp 0x402d95
cmp ebp, dword [esp + 0x1c]
jae 0x4034dd
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x4034d3
movzx edx, bl
shr ebx, 8
mov dword [esp + 0x28], edx
sub esi, 8
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x403d9c
mov cl, byte [esp + 0x28]
mov byte [eax], cl
inc eax
dec dword [esp + 0x14]
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x14]
jmp 0x4034be
cmp ebp, dword [esp + 0x1c]
jae 0x403628
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x14]
movsx ecx, byte [ecx + 0x40ff94]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x40361e
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0xd0]
mov edi, 1
shl edi, cl
dec edi
and edi, ebx
mov dword [edx + eax*4 + 0x2c], edi
movsx ecx, byte [eax + 0x40ff94]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x40ff88]
add dword [edx + eax*4 + 0x2c], ecx
inc eax
mov dword [esp + 0x14], eax
jmp 0x40360a
cmp ebp, dword [esp + 0x1c]
jae 0x40367e
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 3
jb 0x403674
mov ecx, dword [esp + 0x14]
mov edi, dword [esp + 0xd0]
movzx edx, byte [ecx + 0x40ff74]
mov eax, ebx
and eax, 7
shr ebx, 3
sub esi, 3
inc ecx
mov byte [edx + edi + 0x1b80], al
mov dword [esp + 0x14], ecx
jmp 0x403666
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x403994
jmp 0x4039aa
cmp ebp, dword [esp + 0x1c]
jae 0x403a80
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, dword [esp + 0x2c]
jb 0x403a76
mov edx, dword [esp + 0x28]
mov ebp, dword [esp + 0xd0]
mov ecx, dword [esp + 0x2c]
movsx eax, byte [edx + 0x40ff60]
mov edi, 1
shl edi, cl
sub esi, ecx
dec edi
and edi, ebx
shr ebx, cl
add edi, eax
cmp edx, 0x10
jne 0x403a95
mov ecx, dword [esp + 0x14]
movzx eax, byte [ecx + ebp + 0x2923]
jmp 0x403a97
cmp ebp, dword [esp + 0x1c]
jae 0x403330
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x4032ce
jmp 0x403364
cmp ebp, dword [esp + 0x1c]
jae 0x403b3f
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x403b35
mov eax, 1
shl eax, cl
sub esi, ecx
dec eax
and eax, ebx
shr ebx, cl
add dword [esp + 0x14], eax
cmp esi, 0xf
jae 0x403be4
mov ecx, dword [esp + 0x1c]
sub ecx, ebp
cmp ecx, 2
jge 0x403bc2
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0xf00]
test eax, eax
jl 0x403b54
sar eax, 9
test eax, eax
je 0x403b86
cmp esi, eax
jae 0x403be4
jmp 0x403b86
mov ecx, ebp
cmp ecx, dword [esp + 0x1c]
jae 0x403b90
jmp 0x403ba6
cmp ebp, dword [esp + 0x1c]
jae 0x403c60
movzx eax, byte [ebp]
inc ebp
mov dword [esp + 0x10], ebp
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x2c]
add esi, 8
or ebx, eax
cmp esi, ecx
jb 0x403c56
mov edx, dword [esp + 0x28]
mov eax, 1
shl eax, cl
sub esi, ecx
dec eax
and eax, ebx
shr ebx, cl
add edx, eax
mov dword [esp + 0x28], edx
mov edi, dword [esp + 0x20]
mov ecx, dword [esp + 0xdc]
mov eax, edi
sub eax, ecx
mov dword [esp + 0x44], eax
cmp edx, eax
jbe 0x4030e0
test byte [esp + 0xe8], 4
jne case.0x402b5f.37
sub eax, edx
and eax, dword [esp + 0x3c]
add eax, ecx
mov ecx, edi
cmp edi, eax
ja 0x4030f0
mov ecx, eax
mov edi, dword [esp + 0x14]
add ecx, edi
cmp ecx, dword [esp + 0x34]
ja 0x40319e
cmp edi, 9
jb 0x403c75
cmp edi, edx
ja 0x403c75
mov ecx, edi
mov edi, dword [esp + 0x20]
and ecx, 0xfffffff8
add ecx, eax
lea esp, [esp]
mov edx, dword [eax]
mov dword [edi], edx
mov edx, dword [eax + 4]
mov dword [edi + 4], edx
add eax, 8
add edi, 8
cmp eax, ecx
jb 0x403120
mov ecx, dword [esp + 0x14]
and ecx, 7
mov dword [esp + 0x20], edi
mov dword [esp + 0x14], ecx
cmp ecx, 3
jae 0x403c80
test ecx, ecx
je 0x4031ad
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jbe 0x403163
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x4031ad
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x403cd3
mov edi, dword [esp + 0x44]
mov ecx, dword [esp + 0xdc]
mov edx, edi
sub edx, dword [esp + 0x28]
inc eax
and edx, dword [esp + 0x3c]
inc edi
mov dl, byte [edx + ecx]
mov byte [eax - 1], dl
mov dword [esp + 0x20], eax
mov dword [esp + 0x44], edi
mov eax, dword [esp + 0x14]
mov ecx, eax
dec eax
mov dword [esp + 0x14], eax
test ecx, ecx
jne case.0x402b5f.53
mov eax, dword [esp + 0x1c]
sub eax, ebp
cmp eax, 4
jl 0x4032c0
mov edx, dword [esp + 0x34]
sub edx, dword [esp + 0x20]
cmp edx, 2
jl 0x4032c0
cmp esi, 0xf
jae 0x4031e6
movzx eax, word [ebp]
mov ecx, esi
shl eax, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov ecx, ebx
and ecx, 0x3ff
movsx eax, word [edx + ecx*2 + 0x160]
test eax, eax
jl 0x403208
mov ecx, eax
sar ecx, 9
jmp 0x403228
mov ecx, 0xa
lea ecx, [ecx]
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x403210
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
test eax, 0x100
jne 0x4033de
cmp esi, 0xf
jae 0x403254
movzx eax, word [ebp]
mov ecx, esi
shl eax, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov ecx, ebx
and ecx, 0x3ff
movsx eax, word [edx + ecx*2 + 0x160]
test eax, eax
jl 0x403276
mov ecx, eax
sar ecx, 9
jmp 0x403298
mov ecx, 0xa
jmp 0x403280
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x403280
mov dl, byte [esp + 0x14]
mov edi, dword [esp + 0x20]
shr ebx, cl
sub esi, ecx
mov byte [edi], dl
test eax, 0x100
jne 0x4033d5
mov byte [edi + 1], al
add edi, 2
mov dword [esp + 0x20], edi
jmp 0x4031ad
cmp esi, 0xf
jae 0x403364
cmp eax, 2
jge 0x403345
mov ecx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [ecx + eax*2 + 0x160]
test eax, eax
jl 0x4032f5
sar eax, 9
test eax, eax
je 0x403326
cmp esi, eax
jae 0x403364
jmp 0x403326
cmp esi, 0xa
jbe 0x403326
mov ecx, 0xa
nop
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x960]
test eax, eax
jge 0x403364
lea edx, [ecx + 1]
cmp esi, edx
jae 0x403300
cmp ebp, dword [esp + 0x1c]
jb 0x402fc1
test byte [esp + 0xe8], 2
jne 0x403ced
xor eax, eax
jmp 0x402fca
movzx eax, byte [ebp + 1]
movzx edx, byte [ebp]
lea ecx, [esi + 8]
shl eax, cl
mov ecx, esi
shl edx, cl
add ebp, 2
mov dword [esp + 0x10], ebp
or eax, edx
or ebx, eax
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [edx + eax*2 + 0x160]
test eax, eax
jl 0x40338a
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x4033a8
mov ecx, 0xa
nop
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x960]
test eax, eax
jl 0x403390
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], eax
cmp eax, 0x100
jae 0x4033de
mov eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x34]
jae 0x40412e
mov cl, byte [esp + 0x14]
mov byte [eax], cl
inc eax
mov dword [esp + 0x20], eax
jmp 0x4031ad
inc edi
mov dword [esp + 0x20], edi
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x14]
and eax, 0x1ff
mov dword [esp + 0x14], eax
cmp eax, 0x100
jne 0x403b0f
mov edx, dword [esp + 0xd0]
test byte [edx + 0x14], 1
jne 0x403ee2
cmp esi, 3
jae 0x402d1b
cmp ebp, dword [esp + 0x1c]
jb 0x402d00
test byte [esp + 0xe8], 2
jne 0x403d07
xor eax, eax
jmp 0x402d09
cmp ebp, dword [esp + 0x1c]
jb 0x403461
test byte [esp + 0xe8], 2
mov edx, dword [esp + 0xd0]
jne 0x403d55
mov ecx, dword [esp + 0x14]
inc dword [esp + 0x14]
mov byte [ecx + edx + 0x2920], 0
mov ecx, edx
jmp 0x402d95
mov ecx, dword [esp + 0x14]
mov al, byte [ebp]
mov edx, dword [esp + 0xd0]
inc ebp
inc dword [esp + 0x14]
mov byte [ecx + edx + 0x2920], al
mov dword [esp + 0x10], ebp
mov ecx, edx
jmp 0x402d95
movzx eax, byte [ecx + 0x2921]
movzx edx, byte [ecx + 0x2920]
shl eax, 8
or eax, edx
movzx edx, byte [ecx + 0x2923]
movzx ecx, byte [ecx + 0x2922]
shl edx, 8
or edx, ecx
xor edx, 0xffff
mov dword [esp + 0x14], eax
cmp eax, edx
jne case.0x402b5f.39
test eax, eax
je 0x4033f6
test esi, esi
je 0x4034f2
cmp esi, 8
jae 0x402e52
cmp ebp, dword [esp + 0x1c]
jb 0x402e37
test byte [esp + 0xe8], 2
jne 0x403d82
xor eax, eax
jmp 0x402e40
cmp dword [esp + 0x14], 0
je 0x4033f6
mov edx, dword [esp + 0x20]
cmp edx, dword [esp + 0x34]
jae 0x403db6
cmp ebp, dword [esp + 0x1c]
jae 0x403dd0
mov eax, dword [esp + 0x34]
sub eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x1c]
sub ecx, ebp
mov edx, eax
cmp eax, ecx
jb 0x40352b
mov edx, ecx
mov edi, dword [esp + 0x14]
cmp edx, edi
jae 0x40353b
mov edi, eax
cmp eax, ecx
jb 0x40353b
mov edi, ecx
mov eax, dword [esp + 0x20]
push edi
push ebp
push eax
call sub.msvcrt.dll_memcpy
add dword [esp + 0x2c], edi
add ebp, edi
add esp, 0xc
sub dword [esp + 0x14], edi
mov dword [esp + 0x10], ebp
jmp 0x4034f2
cmp eax, 3
je case.0x402b5f.10
cmp eax, 1
jne 0x403604
mov eax, 0x5050505
mov dword [ecx + 0x2c], 0x120
mov dword [ecx + 0x30], 0x20
mov dword [ecx + 0xde0], eax
mov dword [ecx + 0xde4], eax
mov dword [ecx + 0xde8], eax
mov dword [ecx + 0xdec], eax
mov dword [ecx + 0xdf0], eax
push 0x90
lea edi, [ecx + 0x40]
mov dword [ecx + 0xdf4], eax
push 8
mov dword [ecx + 0xdf8], eax
push edi
mov dword [ecx + 0xdfc], eax
call sub.msvcrt.dll_memset
push 0x70
add edi, 0x90
push 9
push edi
call sub.msvcrt.dll_memset
add edi, 0x70
mov eax, 0x7070707
mov dword [edi], eax
mov dword [edi + 4], eax
mov dword [edi + 8], eax
mov dword [edi + 0xc], eax
mov dword [edi + 0x10], eax
mov dword [edi + 0x14], eax
add esp, 0x18
add edi, 0x18
mov eax, 0x8080808
mov dword [edi], eax
mov dword [edi + 4], eax
mov edi, dword [esp + 0xd0]
jmp 0x40369a
xor eax, eax
mov dword [esp + 0x14], eax
cmp eax, 3
jae 0x40363d
movsx ecx, byte [eax + 0x40ff94]
cmp esi, ecx
jae 0x402eb4
cmp ebp, dword [esp + 0x1c]
jb 0x402e8f
test byte [esp + 0xe8], 2
jne 0x403e28
xor eax, eax
jmp 0x402e98
mov edi, dword [esp + 0xd0]
push 0x120
lea edx, [edi + 0x1b80]
push 0
push edx
call sub.msvcrt.dll_memset
mov dword [esp + 0x20], 0
mov ecx, dword [esp + 0x20]
add esp, 0xc
cmp ecx, dword [edi + 0x34]
jae 0x403693
cmp esi, 3
jae 0x402f1d
cmp ebp, dword [esp + 0x1c]
jb 0x402ef7
test byte [esp + 0xe8], 2
jne 0x403e42
xor eax, eax
jmp 0x402f00
mov dword [edi + 0x34], 0x13
mov eax, dword [edi + 0x18]
test eax, eax
jl 0x4031ad
mov edi, dword [esp + 0xd0]
imul eax, eax, 0xda0
lea ebp, [eax + edi + 0x40]
push 0x40
lea eax, [esp + 0x90]
push 0
push eax
mov dword [esp + 0x44], ebp
call sub.msvcrt.dll_memset
push 0x800
lea ecx, [ebp + 0x120]
push 0
push ecx
call sub.msvcrt.dll_memset
push 0x480
lea edx, [ebp + 0x920]
push 0
push edx
call sub.msvcrt.dll_memset
mov ecx, dword [edi + 0x18]
mov ecx, dword [edi + ecx*4 + 0x2c]
xor edx, edx
add esp, 0x24
xor eax, eax
mov dword [esp + 0x40], ecx
cmp ecx, edx
jbe 0x403727
mov ecx, dword [edi + 0x18]
mov edi, dword [edi + ecx*4 + 0x2c]
mov edi, edi
movzx ecx, byte [eax + ebp]
inc dword [esp + ecx*4 + 0x8c]
lea ecx, [esp + ecx*4 + 0x8c]
inc eax
cmp eax, edi
jb 0x403710
mov dword [esp + 0x24], edx
xor ecx, ecx
mov dword [esp + 0x4c], edx
mov dword [esp + 0x48], edx
mov dword [esp + 0x18], edx
mov dword [esp + 0x30], edx
mov eax, 4
mov edx, dword [esp + eax + 0x8c]
add dword [esp + 0x24], edx
add ecx, edx
mov edx, dword [esp + eax + 0x90]
add dword [esp + 0x30], edx
add ecx, ecx
mov dword [esp + eax + 0x4c], ecx
add ecx, edx
mov edx, dword [esp + eax + 0x94]
add dword [esp + 0x18], edx
add ecx, ecx
mov dword [esp + eax + 0x50], ecx
add ecx, edx
add ecx, ecx
mov dword [esp + eax + 0x54], ecx
add eax, 0xc
cmp eax, 0x3c
jbe 0x403742
mov eax, dword [esp + 0x18]
mov edx, dword [esp + 0x30]
add edx, eax
mov eax, dword [esp + 0x24]
add eax, edx
cmp ecx, 0x10000
je 0x4037a4
cmp eax, 1
ja case.0x402b5f.35
cmp dword [esp + 0x40], 0
mov dword [esp + 0x30], 0xffffffff
mov dword [esp + 0x18], 0
jbe 0x4038e7
nop
mov ecx, dword [esp + 0x18]
movzx ecx, byte [ecx + ebp]
xor eax, eax
test ecx, ecx
je 0x4038ca
mov edx, dword [esp + ecx*4 + 0x48]
lea edi, [edx + 1]
mov dword [esp + ecx*4 + 0x48], edi
mov edi, ecx
jbe 0x4037f5
mov ebp, edx
and ebp, 1
add eax, eax
dec edi
or eax, ebp
shr edx, 1
test edi, edi
ja 0x4037e1
mov ebp, dword [esp + 0x38]
mov edi, dword [esp + 0x30]
cmp ecx, 0xa
ja 0x403847
mov edx, ecx
shl edx, 9
or edx, dword [esp + 0x18]
movzx edx, dx
mov dword [esp + 0x40], edx
cmp eax, 0x400
jae 0x4038ca
mov edx, 1
shl edx, cl
lea ecx, [ebp + eax*2 + 0x120]
mov ebp, dword [esp + 0x40]
lea edi, [edx + edx]
mov edi, edi
mov word [ecx], bp
add eax, edx
add ecx, edi
cmp eax, 0x400
jb 0x403830
mov ebp, dword [esp + 0x38]
jmp 0x4038ca
mov edx, eax
and edx, 0x3ff
lea edx, [ebp + edx*2 + 0x120]
mov dword [esp + 0x40], edx
movsx edx, word [edx]
test edx, edx
jne 0x403871
mov edx, dword [esp + 0x40]
mov word [edx], di
mov edx, edi
sub edi, 2
mov dword [esp + 0x30], edi
shr eax, 9
cmp ecx, 0xb
jbe 0x4038b6
add ecx, 0xfffffff5
mov dword [esp + 0x24], ecx
shr eax, 1
mov ecx, eax
and ecx, 1
sub edx, ecx
mov ecx, 0x48f
sub ecx, edx
movzx edx, word [ebp + ecx*2]
lea ecx, [ebp + ecx*2]
test dx, dx
jne 0x4038a8
mov word [ecx], di
mov edx, edi
sub edi, 2
jmp 0x4038ab
movsx edx, dx
sub dword [esp + 0x24], 1
jne 0x403880
mov dword [esp + 0x30], edi
shr eax, 1
and eax, 1
sub eax, edx
mov dx, word [esp + 0x18]
mov word [ebp + eax*2 + 0x91e], dx
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0xd0]
mov edx, dword [ecx + 0x18]
inc eax
mov dword [esp + 0x18], eax
cmp eax, dword [ecx + edx*4 + 0x2c]
jb 0x4037c0
mov edi, dword [esp + 0xd0]
cmp dword [edi + 0x18], 2
jne 0x403afc
mov dword [esp + 0x14], 0
mov eax, dword [edi + 0x30]
add eax, dword [edi + 0x2c]
mov ecx, dword [esp + 0x14]
cmp ecx, eax
jae 0x403abd
cmp esi, 0xf
jae 0x4039e4
mov ecx, dword [esp + 0x1c]
mov eax, dword [esp + 0x10]
sub ecx, eax
cmp ecx, 2
jge 0x4039c6
mov eax, dword [esp + 0xd0]
mov edx, ebx
and edx, 0x3ff
movsx eax, word [eax + edx*2 + 0x1ca0]
test eax, eax
jl 0x40395a
sar eax, 9
test eax, eax
je 0x40398a
cmp esi, eax
jae 0x4039e4
jmp 0x40398a
cmp esi, 0xa
jbe 0x40398a
mov ecx, 0xa
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x24a0]
test eax, eax
jge 0x4039e4
lea edx, [ecx + 1]
cmp esi, edx
jae 0x403964
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x4039a6
test byte [esp + 0xe8], 2
jne 0x403e7a
xor eax, eax
jmp 0x4039b2
mov ecx, dword [esp + 0x10]
movzx eax, byte [ecx]
inc ecx
mov dword [esp + 0x10], ecx
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x40392e
jmp 0x4039e4
movzx edx, byte [eax + 1]
movzx edi, byte [eax]
lea ecx, [esi + 8]
shl edx, cl
mov ecx, esi
shl edi, cl
add eax, 2
mov dword [esp + 0x10], eax
or edx, edi
or ebx, edx
add esi, 0x10
mov ebp, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [ebp + eax*2 + 0x1ca0]
test eax, eax
jl 0x403a0a
mov edi, eax
sar edi, 9
and eax, 0x1ff
jmp 0x403a2a
mov edi, 0xa
nop
mov ecx, edi
mov edx, ebx
shr edx, cl
not eax
inc edi
and edx, 1
add edx, eax
movsx eax, word [ebp + edx*2 + 0x24a0]
test eax, eax
jl 0x403a10
mov ecx, edi
mov edx, eax
shr ebx, cl
sub esi, edi
mov dword [esp + 0x28], edx
cmp eax, 0x10
jae 0x403a52
mov ecx, dword [esp + 0x14]
mov byte [ecx + ebp + 0x2924], al
inc ecx
mov dword [esp + 0x14], ecx
mov edi, ebp
jmp 0x403900
jne 0x403a5f
cmp dword [esp + 0x14], 0
je case.0x402b5f.17
movsx ecx, byte [eax + 0x40ff5c]
mov dword [esp + 0x2c], ecx
cmp esi, ecx
jae 0x402f86
mov ebp, dword [esp + 0x10]
cmp ebp, dword [esp + 0x1c]
jb 0x402f5b
test byte [esp + 0xe8], 2
jne 0x403eb0
xor eax, eax
jmp 0x402f64
xor eax, eax
mov edx, dword [esp + 0x14]
push edi
push eax
lea eax, [edx + ebp + 0x2924]
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
add dword [esp + 0x14], edi
mov edi, dword [esp + 0xd0]
jmp 0x403900
mov eax, dword [edi + 0x2c]
mov edx, dword [edi + 0x30]
add edx, eax
cmp edx, ecx
jne case.0x402b5f.21
push eax
lea eax, [edi + 0x2924]
push eax
lea ecx, [edi + 0x40]
push ecx
call sub.msvcrt.dll_memcpy
mov edx, dword [edi + 0x30]
mov eax, dword [edi + 0x2c]
push edx
lea ecx, [eax + edi + 0x2924]
push ecx
lea edx, [edi + 0xde0]
push edx
call sub.msvcrt.dll_memcpy
add esp, 0x18
dec dword [edi + 0x18]
mov ebp, dword [esp + 0x10]
mov edi, dword [esp + 0xd0]
jmp 0x40369a
mov ecx, dword [eax*4 + 0x40faec]
mov eax, dword [eax*4 + 0x40fa6c]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x14], eax
test ecx, ecx
je 0x40301b
cmp esi, ecx
jae 0x403009
cmp ebp, dword [esp + 0x1c]
jb 0x402feb
test byte [esp + 0xe8], 2
jne 0x4040c2
xor eax, eax
jmp 0x402ff4
cmp esi, 0xa
jbe 0x403b86
mov ecx, 0xa
mov edi, edi
mov edx, ebx
shr edx, cl
not eax
inc ecx
and edx, 1
add edx, eax
mov eax, dword [esp + 0xd0]
movsx eax, word [eax + edx*2 + 0x1700]
test eax, eax
jge 0x403be4
lea edx, [ecx + 1]
cmp esi, edx
jae 0x403b60
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x10], eax
jb 0x403ba2
test byte [esp + 0xe8], 2
jne 0x4040dc
xor eax, eax
jmp 0x403bae
mov ecx, dword [esp + 0x10]
movzx eax, byte [ecx]
inc ecx
mov dword [esp + 0x10], ecx
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 0xf
jb 0x403033
jmp 0x403be4
mov eax, dword [esp + 0x10]
movzx edx, byte [eax + 1]
movzx edi, byte [eax]
lea ecx, [esi + 8]
shl edx, cl
mov ecx, esi
shl edi, cl
add eax, 2
mov dword [esp + 0x10], eax
or edx, edi
or ebx, edx
add esi, 0x10
mov edx, dword [esp + 0xd0]
mov eax, ebx
and eax, 0x3ff
movsx eax, word [edx + eax*2 + 0xf00]
test eax, eax
jl 0x403c0a
mov ecx, eax
sar ecx, 9
and eax, 0x1ff
jmp 0x403c28
mov ecx, 0xa
nop
mov edi, ebx
shr edi, cl
not eax
inc ecx
and edi, 1
add edi, eax
movsx eax, word [edx + edi*2 + 0x1700]
test eax, eax
jl 0x403c10
mov edx, dword [eax*4 + 0x40fdf0]
mov ebp, dword [esp + 0x10]
shr ebx, cl
sub esi, ecx
mov ecx, dword [eax*4 + 0x40fd70]
mov dword [esp + 0x2c], ecx
mov dword [esp + 0x28], edx
test ecx, ecx
je 0x4030bb
cmp esi, ecx
jae 0x4030a7
cmp ebp, dword [esp + 0x1c]
jb 0x403085
test byte [esp + 0xe8], 2
jne 0x4040fa
xor eax, eax
jmp 0x40308e
mov edi, dword [esp + 0x20]
mov ecx, dword [esp + 0x14]
lea ecx, [ecx]
movzx edx, byte [eax]
mov byte [edi], dl
movzx edx, byte [eax + 1]
mov byte [edi + 1], dl
movzx edx, byte [eax + 2]
mov byte [edi + 2], dl
sub ecx, 3
add edi, 3
add eax, 3
cmp ecx, 2
jg 0x403c80
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], edi
test ecx, ecx
jle 0x4031ad
mov cl, byte [eax]
mov byte [edi], cl
mov ecx, dword [esp + 0x14]
cmp ecx, 1
jle 0x403163
mov dl, byte [eax + 1]
mov byte [edi + 1], dl
add edi, ecx
mov dword [esp + 0x20], edi
jmp 0x4031ad
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 0x35
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x17
jmp case.0x402b5f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 3
jmp case.0x402b5f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 5
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 6
jmp case.0x402b5f.4
mov dword [esp + 0x18], 1
mov dword [edx], 7
jmp case.0x402b5f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x27
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x33
jmp case.0x402b5f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [edx], 0x34
jmp case.0x402b5f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [eax], 9
jmp case.0x402b5f.4
test byte [esp + 0xe8], 2
je case.0x402b5f.40
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x26
jmp case.0x402b5f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x28
jmp case.0x402b5f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0xa
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0xb
jmp case.0x402b5f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0xe
jmp case.0x402b5f.4
mov eax, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x23
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x10
jmp case.0x402b5f.4
mov edx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [edx], 0x11
jmp case.0x402b5f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x12
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 0xffffffff
mov dword [ecx], 0x15
jmp case.0x402b5f.4
test byte [esp + 0xe8], 1
jne 0x40415d
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 0
mov dword [edx], 0x22
mov eax, dword [esp + 0xd0]
mov ecx, dword [esp + 0x28]
mov edx, dword [esp + 0x14]
sub ebp, dword [esp + 0xd4]
mov dword [eax + 0x20], ecx
mov ecx, dword [esp + 0x2c]
mov dword [eax + 0x24], edx
mov edx, dword [esp + 0x44]
mov dword [eax + 4], esi
mov esi, dword [esp + 0xe0]
mov dword [eax + 0x28], ecx
mov ecx, dword [esp + 0xe4]
mov dword [eax + 0x38], ebx
mov dword [eax + 0x3c], edx
mov eax, dword [esp + 0xd8]
mov dword [eax], ebp
mov eax, dword [esp + 0x20]
sub eax, esi
test byte [esp + 0xe8], 9
mov dword [ecx], eax
je 0x4040b3
cmp dword [esp + 0x18], 0
jl 0x4040b3
mov ebp, eax
mov eax, dword [esp + 0xd0]
movzx ecx, word [eax + 0x1c]
movzx edi, word [eax + 0x1e]
mov eax, 0x5e6ea9af
mul ebp
shr edx, 0xb
imul edx, edx, 0x15b0
mov ebx, ebp
sub ebx, edx
mov dword [esp + 0x38], ebp
test ebp, ebp
je 0x404086
mov edi, edi
xor edx, edx
cmp ebx, 7
jbe 0x403ffc
lea eax, [edx + 7]
lea ebx, [ebx]
movzx ebp, byte [esi]
add ecx, ebp
movzx ebp, byte [esi + 1]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 2]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 3]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 4]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 5]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 6]
add edi, ecx
add ecx, ebp
movzx ebp, byte [esi + 7]
add edi, ecx
add ecx, ebp
add eax, 8
add edi, ecx
add edx, 8
add esi, 8
cmp eax, ebx
jb 0x403fb0
xor eax, eax
mov dword [esp + 0x3c], eax
mov dword [esp + 0x24], eax
mov eax, ebx
sub eax, edx
cmp eax, 2
jl 0x40403b
mov eax, ebx
sub eax, edx
sub eax, 2
shr eax, 1
inc eax
lea edx, [edx + eax*2]
lea esp, [esp]
movzx ebp, byte [esi]
add ecx, ebp
movzx ebp, byte [esi + 1]
add dword [esp + 0x3c], ecx
add ecx, ebp
add dword [esp + 0x24], ecx
add esi, 2
sub eax, 1
jne 0x404020
cmp edx, ebx
jae 0x404047
movzx edx, byte [esi]
add ecx, edx
add edi, ecx
inc esi
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x3c]
add eax, edx
add edi, eax
mov eax, 0x80078071
mul ecx
shr edx, 0xf
imul edx, edx, 0xffff000f
add ecx, edx
mov eax, 0x80078071
mul edi
shr edx, 0xf
imul edx, edx, 0xffff000f
add edi, edx
sub dword [esp + 0x38], ebx
mov ebx, 0x15b0
jne 0x403fa0
mov eax, dword [esp + 0xd0]
shl edi, 0x10
add ecx, edi
cmp dword [esp + 0x18], 0
mov dword [eax + 0x1c], ecx
jne 0x4040b3
test byte [esp + 0xe8], 1
je 0x4040b3
cmp ecx, dword [eax + 0x10]
je 0x4040b3
mov dword [esp + 0x18], 0xfffffffe
mov eax, dword [esp + 0x18]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0xbc
ret
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x19
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x1a
jmp case.0x402b5f.4
mov edx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [edx], 0x1b
jmp case.0x402b5f.4
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 0xffffffff
mov dword [eax], 0x25
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 2
mov dword [ecx], 0x18
jmp case.0x402b5f.4
test byte [esp + 0xe8], 2
jne 0x404173
xor eax, eax
mov ecx, esi
shl eax, cl
or ebx, eax
add esi, 8
mov edx, esi
and edx, 7
cmp esi, edx
jae 0x40418d
cmp ebp, dword [esp + 0x1c]
jae 0x404148
movzx eax, byte [ebp]
inc ebp
jmp 0x404154
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x20
jmp case.0x402b5f.4
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov dword [esp + 0x14], 0
jmp 0x4041e6
cmp ebp, dword [esp + 0x1c]
jae 0x404200
movzx eax, byte [ebp]
inc ebp
mov ecx, esi
shl eax, cl
add esi, 8
or ebx, eax
cmp esi, 8
jb 0x4041fa
movzx eax, bl
shr ebx, 8
sub esi, 8
jmp 0x4041d0
test byte [esp + 0xe8], 2
jne 0x40421b
xor eax, eax
mov ecx, dword [esp + 0xd0]
mov edx, dword [ecx + 0x10]
shl edx, 8
or edx, eax
inc dword [esp + 0x14]
mov dword [ecx + 0x10], edx
cmp dword [esp + 0x14], 4
jae case.0x402b5f.34
test esi, esi
je case.0x402b5f.42
cmp esi, 8
jae 0x4041b9
cmp ebp, dword [esp + 0x1c]
jb 0x4041a6
test byte [esp + 0xe8], 2
jne 0x404235
xor eax, eax
jmp 0x4041ab
cmp ebp, dword [esp + 0x1c]
jae 0x4041c4
movzx eax, byte [ebp]
inc ebp
jmp 0x4041d0
mov eax, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [eax], 0x2a
jmp case.0x402b5f.4
mov ecx, dword [esp + 0xd0]
mov dword [esp + 0x18], 1
mov dword [ecx], 0x29
jmp case.0x402b5f.4
mov dword [ebx], 0
mov dword [edi], 0
pop edi
pop esi
pop ebp
mov eax, 0xfffffffd
pop ebx
add esp, 0xbc
ret