Function at 0x404140
Capabilities:
Enumerate pe sections
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x7c
mov dword [esp], eax
mov eax, ecx
mov ecx, dword [esp + 0x90]
mov dword [esp + 0x2c], edx
cmp ecx, 9
jbe 0x404199
movzx edx, word [eax + 4]
movzx esi, word [eax + 2]
movzx ebx, word [eax]
mov ebp, edx
mov word [esp + 0x18], dx
mov dword [esp + 8], edx
lea edx, [ebx + esi]
add edx, ebp
mov ebp, ecx
mov word [esp + 0xc], si
sub ebp, edx
mov dword [esp + 0x14], ebp
lea edx, [ebp - 6]
mov ebp, dword [esp + 0x94]
mov ebp, dword [ebp]
mov dword [esp + 0x3c], ebp
cmp ecx, edx
jae 0x4041b0
mov edx, 0xffffffec
add esp, 0x7c
mov eax, edx
pop ebx
pop esi
pop edi
pop ebp
ret
test ebx, ebx
je 0x404620
lea ebp, [eax + 6]
movzx ecx, byte [eax + ebx + 5]
mov dword [esp + 0x40], ebp
cmp ebx, 3
ja 0x4045e0
movzx ebp, byte [eax + 6]
mov dword [esp + 0x10], ebp
cmp bx, 2
je 0x4041ee
cmp bx, 3
jne 0x4041f9
movzx edi, byte [eax + 8]
shl edi, 0x10
add ebp, edi
mov dword [esp + 0x10], ebp
movzx edi, byte [eax + 7]
shl edi, 8
add dword [esp + 0x10], edi
test cl, cl
je 0x404199
mov edi, 5
bsr ecx, ecx
sub edi, ebx
shl edi, 3
sub edi, ecx
mov dword [esp + 4], edi
mov edi, dword [esp + 0x40]
mov dword [esp + 0x24], edi
test esi, esi
je 0x404620
mov edi, dword [esp + 0x40]
add edi, ebx
mov dword [esp + 0x44], edi
movzx ecx, byte [edi + esi - 1]
cmp esi, 3
jbe 0x404630
lea ebx, [edi + esi - 4]
mov dword [esp + 0x30], ebx
test cl, cl
je 0x404608
mov edi, dword [ebx]
bsr ecx, ecx
mov ebx, 8
sub ebx, ecx
mov dword [esp + 0x1c], edi
mov ebp, ebx
mov ebx, dword [esp + 8]
test ebx, ebx
je 0x404620
mov edi, dword [esp + 0x44]
add esi, edi
mov dword [esp + 0x5c], esi
movzx ecx, byte [esi + ebx - 1]
cmp ebx, 3
ja 0x404690
mov ebx, esi
movzx edi, word [esp + 0x18]
movzx esi, byte [esi]
mov dword [esp + 0x20], esi
cmp di, 2
je 0x4042a5
cmp di, 3
jne 0x4042b4
movzx ebx, byte [ebx + 2]
shl ebx, 0x10
add esi, ebx
mov dword [esp + 0x20], esi
mov esi, dword [esp + 0x5c]
movzx ebx, byte [esi + 1]
shl ebx, 8
add dword [esp + 0x20], ebx
test cl, cl
je 0x404199
mov esi, dword [esp + 8]
mov ebx, 5
bsr ecx, ecx
sub ebx, esi
mov esi, dword [esp + 0x5c]
shl ebx, 3
mov dword [esp + 0x34], esi
mov edi, ebx
sub edi, ecx
test edx, edx
je 0x404620
mov ebx, dword [esp + 0x5c]
mov esi, dword [esp + 8]
add esi, ebx
mov ebx, dword [esp + 0x14]
mov dword [esp + 0x74], esi
movzx ecx, byte [esi + ebx - 7]
cmp edx, 3
jbe 0x405090
test cl, cl
je 0x404608
cmp edx, 0xffffff88
ja 0x40419e
lea esi, [esi + ebx - 0xa]
movzx edx, cl
mov ebx, 8
mov dword [esp + 0x38], esi
mov esi, dword [esi]
bsr edx, edx
sub ebx, edx
mov dword [esp + 0x28], esi
mov ecx, dword [esp]
mov edx, dword [esp + 0x2c]
lea esi, [ecx + edx]
add edx, 3
shr edx, 2
mov dword [esp + 0x78], esi
sub esi, 3
add ecx, edx
mov dword [esp + 0x60], esi
mov esi, dword [esp + 0x94]
mov dword [esp + 0x68], ecx
add ecx, edx
mov dword [esp + 0x6c], ecx
add ecx, edx
mov edx, dword [esp + 0x3c]
add esi, 4
mov dword [esp + 0x70], ecx
shr edx, 0x10
movzx edx, dl
mov dword [esp + 0x64], edx
lea edx, [eax + 0xa]
mov eax, dword [esp + 0x60]
mov dword [esp + 0x4c], edx
mov edx, dword [esp + 0x44]
add edx, 4
mov dword [esp + 0x50], edx
mov edx, dword [esp + 0x5c]
add edx, 4
mov dword [esp + 0x54], edx
mov edx, dword [esp + 0x74]
add edx, 4
mov dword [esp + 0x58], edx
cmp ecx, eax
jae 0x4050e3
mov edx, dword [esp + 0x6c]
mov eax, dword [esp + 0x64]
mov dword [esp + 8], esi
mov esi, edi
mov dword [esp + 0xc], ecx
mov edi, ebp
mov ebp, ebx
mov ebx, esi
mov dword [esp + 0x18], edx
neg eax
mov edx, dword [esp + 0x68]
and eax, 0x1f
mov dword [esp + 0x14], edx
mov dword [esp + 0x3c], eax
jmp 0x404480
mov edx, dword [esp + 4]
mov eax, edx
and edx, 7
shr eax, 3
mov dword [esp + 4], edx
sub ecx, eax
mov eax, dword [ecx]
mov dword [esp + 0x24], ecx
mov dword [esp + 0x10], eax
xor eax, eax
mov ecx, dword [esp + 0x30]
mov esi, dword [esp + 0x50]
cmp ecx, esi
jb 0x404cb0
mov edx, edi
and edi, 7
shr edx, 3
sub ecx, edx
mov esi, dword [ecx]
mov dword [esp + 0x30], ecx
mov dword [esp + 0x1c], esi
mov ecx, dword [esp + 0x34]
mov esi, dword [esp + 0x54]
cmp ecx, esi
jb 0x404cc0
mov edx, ebx
and ebx, 7
shr edx, 3
sub ecx, edx
mov esi, dword [ecx]
mov dword [esp + 0x34], ecx
mov dword [esp + 0x20], esi
mov ecx, dword [esp + 0x38]
mov esi, dword [esp + 0x58]
cmp ecx, esi
jb 0x4046b8
mov edx, ebp
and ebp, 7
shr edx, 3
sub ecx, edx
mov esi, dword [ecx]
mov dword [esp + 0x38], ecx
mov dword [esp + 0x28], esi
test eax, eax
jne 0x4046b8
mov esi, dword [esp + 0x60]
cmp dword [esp + 0xc], esi
jae 0x4046b8
mov esi, dword [esp + 0x3c]
movzx ecx, byte [esp + 4]
mov eax, dword [esp + 0x10]
mov edx, dword [esp + 8]
shl eax, cl
mov ecx, esi
shr eax, cl
mov ecx, dword [esp + 4]
lea edx, [edx + eax*2]
movzx eax, byte [edx]
movzx edx, byte [edx + 1]
add ecx, edx
mov edx, dword [esp]
add dword [esp], 2
mov dword [esp + 4], ecx
mov ecx, edi
mov byte [edx], al
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 8]
shl eax, cl
mov ecx, esi
shr eax, cl
mov ecx, dword [esp + 0x14]
lea edx, [edx + eax*2]
movzx eax, byte [edx]
movzx edx, byte [edx + 1]
mov byte [ecx], al
mov eax, dword [esp + 0x20]
mov ecx, ebx
add edx, edi
mov edi, esi
mov dword [esp + 0x48], edx
shl eax, cl
mov ecx, esi
mov esi, dword [esp + 8]
shr eax, cl
mov ecx, dword [esp + 0x18]
lea edx, [esi + eax*2]
movzx eax, byte [edx]
movzx edx, byte [edx + 1]
mov byte [ecx], al
mov eax, dword [esp + 0x28]
mov ecx, ebp
add edx, ebx
mov ebx, esi
shl eax, cl
mov ecx, edi
shr eax, cl
lea eax, [esi + eax*2]
mov esi, dword [esp + 4]
movzx ecx, byte [eax]
movzx eax, byte [eax + 1]
add eax, ebp
mov ebp, dword [esp + 0xc]
mov byte [ebp], cl
mov ebp, dword [esp + 0x10]
mov ecx, esi
shl ebp, cl
mov ecx, edi
shr ebp, cl
lea ecx, [ebx + ebp*2]
movzx ebx, byte [ecx]
movzx ecx, byte [ecx + 1]
mov edi, dword [esp]
mov ebp, dword [esp + 0x3c]
add ecx, esi
mov esi, dword [esp + 0x48]
add dword [esp + 0x14], 2
mov byte [edi - 1], bl
mov edi, dword [esp + 0x1c]
mov dword [esp + 4], ecx
mov ecx, esi
mov ebx, dword [esp + 0x14]
shl edi, cl
mov ecx, ebp
add dword [esp + 0x18], 2
shr edi, cl
mov ecx, dword [esp + 8]
add dword [esp + 0xc], 2
lea edi, [ecx + edi*2]
movzx ecx, byte [edi]
movzx edi, byte [edi + 1]
mov byte [ebx - 1], cl
mov ebx, dword [esp + 0x20]
mov ecx, edx
add edi, esi
mov esi, dword [esp + 0x18]
shl ebx, cl
mov ecx, ebp
shr ebx, cl
mov ecx, dword [esp + 8]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add ebx, edx
mov edx, dword [esp + 0x28]
mov byte [esi - 1], cl
mov ecx, eax
mov esi, dword [esp + 0xc]
shl edx, cl
mov ecx, ebp
shr edx, cl
mov ecx, dword [esp + 8]
lea ecx, [ecx + edx*2]
movzx edx, byte [ecx]
movzx ecx, byte [ecx + 1]
mov byte [esi - 1], dl
lea ebp, [ecx + eax]
mov ecx, dword [esp + 0x24]
mov esi, dword [esp + 0x4c]
cmp ecx, esi
jae 0x4043e0
mov eax, 3
jmp 0x4043fe
lea edi, [ebp + ebx - 4]
mov dword [esp + 0x24], edi
test cl, cl
je 0x404608
mov edi, dword [edi]
bsr ecx, ecx
mov dword [esp + 0x10], edi
mov edi, 8
sub edi, ecx
mov dword [esp + 4], edi
jmp 0x404218
add esp, 0x7c
mov edx, 0xffffffff
pop ebx
mov eax, edx
pop esi
pop edi
pop ebp
ret
mov edx, 0xffffffb8
jmp 0x40419e
mov ebx, edi
movzx ebp, word [esp + 0xc]
movzx edi, byte [edi]
mov dword [esp + 0x1c], edi
cmp bp, 2
je 0x40467d
cmp bp, 3
je 0x404670
test cl, cl
je 0x404199
mov ebx, 5
bsr ecx, ecx
mov edi, dword [esp + 0x44]
sub ebx, esi
shl ebx, 3
mov dword [esp + 0x30], edi
sub ebx, ecx
mov ebp, ebx
jmp 0x40425a
movzx ebx, byte [ebx + 2]
shl ebx, 0x10
add edi, ebx
mov dword [esp + 0x1c], edi
mov edi, dword [esp + 0x44]
movzx ebx, byte [edi + 1]
shl ebx, 8
add dword [esp + 0x1c], ebx
jmp 0x40464a
lea esi, [esi + ebx - 4]
mov dword [esp + 0x34], esi
test cl, cl
je 0x404608
mov esi, dword [esi]
bsr ecx, ecx
mov edi, 8
sub edi, ecx
mov dword [esp + 0x20], esi
jmp 0x4042d9
mov eax, ebx
mov esi, dword [esp + 8]
mov ebx, ebp
mov ebp, edi
mov edi, eax
mov edx, dword [esp + 0x14]
cmp dword [esp + 0x6c], edx
setb dl
mov ecx, dword [esp]
cmp dword [esp + 0x68], ecx
setb al
or al, dl
jne 0x404199
mov edx, dword [esp + 0x18]
cmp dword [esp + 0x70], edx
jb 0x404199
cmp dword [esp + 4], 0x20
ja 0x40480b
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp + 8], eax
jmp 0x4047b2
mov eax, dword [esp + 0x24]
cmp dword [esp + 0x40], eax
je 0x404fb0
mov edx, dword [esp + 4]
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x40]
cmp ecx, eax
jb 0x404f88
mov eax, dword [esp + 0x68]
mov dword [esp + 0x24], ecx
sub eax, 3
cmp dword [esp], eax
setb al
shl edx, 3
sub dword [esp + 4], edx
mov edx, dword [ecx]
mov dword [esp + 0x10], edx
test al, al
je 0x404fa5
movzx ecx, byte [esp + 4]
mov eax, dword [esp + 0x10]
shl eax, cl
movzx ecx, byte [esp + 8]
shr eax, cl
mov ecx, dword [esp + 4]
lea edx, [esi + eax*2]
movzx eax, byte [edx]
movzx edx, byte [edx + 1]
add edx, ecx
mov ecx, dword [esp]
mov byte [ecx], al
add ecx, 2
mov eax, dword [esp + 0x10]
mov dword [esp], ecx
mov ecx, edx
shl eax, cl
movzx ecx, byte [esp + 8]
shr eax, cl
lea eax, [esi + eax*2]
movzx ecx, byte [eax]
movzx eax, byte [eax + 1]
add edx, eax
mov eax, dword [esp]
mov dword [esp + 4], edx
mov byte [eax - 1], cl
cmp edx, 0x20
ja 0x40480b
mov edx, dword [esp + 0x4c]
cmp dword [esp + 0x24], edx
jb 0x404710
mov edx, dword [esp + 4]
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 0x24], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 4], edx
mov eax, dword [eax]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x68]
sub eax, 3
cmp dword [esp], eax
setb al
jmp 0x404753
mov edx, dword [esp + 0x24]
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 4], eax
mov eax, dword [edx]
mov dword [esp + 0x24], edx
mov dword [esp + 0x10], eax
mov edx, dword [esp + 0x64]
mov ecx, dword [esp + 0x68]
neg edx
and edx, 0x1f
cmp dword [esp], ecx
jae 0x40485c
mov dword [esp + 8], ebx
mov eax, dword [esp]
mov dword [esp + 0x3c], ebp
mov ebp, dword [esp + 4]
mov ebx, dword [esp + 0x10]
mov ecx, ebp
add eax, 1
shl ebx, cl
mov ecx, edx
shr ebx, cl
lea ecx, [esi + ebx*2]
movzx ebx, byte [ecx]
movzx ecx, byte [ecx + 1]
mov byte [eax - 1], bl
add ebp, ecx
cmp dword [esp + 0x68], eax
jne 0x40482c
mov dword [esp + 4], ebp
mov ebx, dword [esp + 8]
mov ebp, dword [esp + 0x3c]
cmp ebp, 0x20
ja 0x40496b
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x404918
mov eax, dword [esp + 0x30]
cmp dword [esp + 0x44], eax
je 0x404ec4
mov ecx, ebp
shr ecx, 3
sub eax, ecx
mov edx, ecx
mov ecx, eax
mov eax, dword [esp + 0x44]
cmp ecx, eax
jb 0x404ea0
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x30], ecx
sub eax, 3
cmp dword [esp + 0x14], eax
setb al
shl edx, 3
sub ebp, edx
mov edx, dword [ecx]
mov dword [esp + 0x1c], edx
test al, al
je 0x404ebb
mov eax, dword [esp + 0x1c]
mov ecx, ebp
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
mov ecx, dword [esp + 0x14]
lea eax, [esi + eax*2]
movzx edx, byte [eax]
movzx eax, byte [eax + 1]
add ecx, 2
mov byte [ecx - 2], dl
add eax, ebp
mov edx, dword [esp + 0x1c]
mov dword [esp + 0x14], ecx
mov ecx, eax
shl edx, cl
movzx ecx, byte [esp]
shr edx, cl
lea ecx, [esi + edx*2]
movzx ebp, byte [ecx + 1]
movzx edx, byte [ecx]
mov ecx, dword [esp + 0x14]
add ebp, eax
mov byte [ecx - 1], dl
cmp ebp, 0x20
ja 0x40496b
mov edx, dword [esp + 0x50]
cmp dword [esp + 0x30], edx
jb 0x404880
mov eax, ebp
and ebp, 7
shr eax, 3
sub dword [esp + 0x30], eax
mov edx, dword [esp + 0x30]
mov eax, dword [edx]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x6c]
sub eax, 3
cmp dword [esp + 0x14], eax
setb al
jmp 0x4048c2
mov ecx, edx
mov edx, dword [esp + 0x30]
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub ebp, eax
mov eax, dword [edx]
mov dword [esp + 0x30], edx
mov dword [esp + 0x1c], eax
mov edx, dword [esp + 0x64]
mov ecx, dword [esp + 0x6c]
neg edx
and edx, 0x1f
cmp dword [esp + 0x14], ecx
jae 0x4049ac
mov dword [esp], ebx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x1c]
mov ecx, ebp
add eax, 1
shl ebx, cl
mov ecx, edx
shr ebx, cl
lea ecx, [esi + ebx*2]
movzx ebx, byte [ecx]
movzx ecx, byte [ecx + 1]
mov byte [eax - 1], bl
add ebp, ecx
cmp dword [esp + 0x6c], eax
jne 0x404985
mov ebx, dword [esp]
cmp edi, 0x20
ja 0x404abb
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x404a67
mov eax, dword [esp + 0x34]
cmp dword [esp + 0x5c], eax
je 0x404ddc
mov ecx, edi
shr ecx, 3
sub eax, ecx
mov edx, ecx
mov ecx, eax
mov eax, dword [esp + 0x5c]
cmp ecx, eax
jb 0x404db8
mov eax, dword [esp + 0x70]
mov dword [esp + 0x34], ecx
sub eax, 3
cmp dword [esp + 0x18], eax
setb al
shl edx, 3
sub edi, edx
mov edx, dword [ecx]
mov dword [esp + 0x20], edx
test al, al
je 0x404dd3
mov eax, dword [esp + 0x20]
mov ecx, edi
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
lea eax, [esi + eax*2]
movzx edx, byte [eax]
movzx eax, byte [eax + 1]
add eax, edi
mov edi, dword [esp + 0x18]
mov ecx, eax
mov byte [edi], dl
mov edx, dword [esp + 0x20]
add edi, 2
mov dword [esp + 0x18], edi
shl edx, cl
movzx ecx, byte [esp]
shr edx, cl
lea ecx, [esi + edx*2]
movzx edi, byte [ecx + 1]
movzx edx, byte [ecx]
add edi, eax
mov eax, dword [esp + 0x18]
mov byte [eax - 1], dl
cmp edi, 0x20
ja 0x404abb
mov edx, dword [esp + 0x54]
cmp dword [esp + 0x34], edx
jb 0x4049d0
mov eax, edi
and edi, 7
shr eax, 3
sub dword [esp + 0x34], eax
mov edx, dword [esp + 0x34]
mov eax, dword [edx]
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x70]
sub eax, 3
cmp dword [esp + 0x18], eax
setb al
jmp 0x404a12
mov ecx, edx
mov edx, dword [esp + 0x34]
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub edi, eax
mov eax, dword [edx]
mov dword [esp + 0x34], edx
mov dword [esp + 0x20], eax
mov edx, dword [esp + 0x64]
mov ecx, dword [esp + 0x70]
neg edx
and edx, 0x1f
cmp dword [esp + 0x18], ecx
jae 0x404afc
mov dword [esp], ebx
mov eax, dword [esp + 0x18]
mov ebx, dword [esp + 0x20]
mov ecx, edi
add eax, 1
shl ebx, cl
mov ecx, edx
shr ebx, cl
lea ecx, [esi + ebx*2]
movzx ebx, byte [ecx]
movzx ecx, byte [ecx + 1]
mov byte [eax - 1], bl
add edi, ecx
cmp dword [esp + 0x70], eax
jne 0x404ad5
mov ebx, dword [esp]
cmp ebx, 0x20
ja 0x404c0b
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x404bb8
mov edx, dword [esp + 0x74]
mov eax, dword [esp + 0x38]
cmp edx, eax
je 0x404cf4
mov ecx, ebx
shr ecx, 3
sub eax, ecx
mov dword [esp + 8], ecx
mov ecx, eax
cmp eax, edx
jb 0x404cd0
mov edx, dword [esp + 0x60]
cmp dword [esp + 0xc], edx
mov dword [esp + 0x38], ecx
mov edx, dword [esp + 8]
setb al
shl edx, 3
sub ebx, edx
mov edx, dword [ecx]
mov dword [esp + 0x28], edx
test al, al
je 0x404ceb
mov eax, dword [esp + 0x28]
mov ecx, ebx
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
lea eax, [esi + eax*2]
movzx edx, byte [eax]
movzx eax, byte [eax + 1]
add eax, ebx
mov ebx, dword [esp + 0xc]
mov ecx, eax
mov byte [ebx], dl
mov edx, dword [esp + 0x28]
add ebx, 2
mov dword [esp + 0xc], ebx
shl edx, cl
movzx ecx, byte [esp]
shr edx, cl
lea ecx, [esi + edx*2]
movzx ebx, byte [ecx + 1]
movzx edx, byte [ecx]
add ebx, eax
mov eax, dword [esp + 0xc]
mov byte [eax - 1], dl
cmp ebx, 0x20
ja 0x404c0b
mov edx, dword [esp + 0x58]
cmp dword [esp + 0x38], edx
jb 0x404b20
mov eax, ebx
and ebx, 7
shr eax, 3
sub dword [esp + 0x38], eax
mov edx, dword [esp + 0x38]
mov eax, dword [edx]
mov edx, dword [esp + 0x60]
cmp dword [esp + 0xc], edx
mov dword [esp + 0x28], eax
setb al
jmp 0x404b63
mov ecx, edx
mov edx, dword [esp + 0x38]
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub ebx, eax
mov eax, dword [edx]
mov dword [esp + 0x38], edx
mov dword [esp + 0x28], eax
mov edx, dword [esp + 0x64]
mov ecx, dword [esp + 0x78]
neg edx
and edx, 0x1f
cmp dword [esp + 0xc], ecx
jae 0x404c4e
mov dword [esp], ebp
mov eax, dword [esp + 0xc]
mov ebp, dword [esp + 0x28]
mov ecx, ebx
add eax, 1
shl ebp, cl
mov ecx, edx
shr ebp, cl
lea ecx, [esi + ebp*2]
movzx ebp, byte [ecx]
movzx ecx, byte [ecx + 1]
add ebx, ecx
mov ecx, ebp
mov byte [eax - 1], cl
cmp dword [esp + 0x78], eax
jne 0x404c25
mov ebp, dword [esp]
mov esi, dword [esp + 0x24]
xor edx, edx
cmp dword [esp + 0x40], esi
je 0x405109
mov ecx, dword [esp + 0x30]
xor eax, eax
cmp dword [esp + 0x44], ecx
je 0x4050fc
mov ecx, dword [esp + 0x34]
cmp dword [esp + 0x5c], ecx
jne 0x404199
mov ecx, dword [esp + 0x38]
cmp dword [esp + 0x74], ecx
jne 0x404199
xor ecx, ecx
cmp edi, 0x20
sete cl
and edx, ecx
test edx, eax
je 0x404199
cmp ebx, 0x20
jne 0x404199
mov edx, dword [esp + 0x2c]
jmp 0x40419e
mov eax, 3
jmp 0x404422
mov eax, 3
jmp 0x404446
mov ecx, edx
mov edx, dword [esp + 0x38]
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub ebx, eax
mov eax, dword [edx]
mov dword [esp + 0x38], edx
mov dword [esp + 0x28], eax
cmp ebx, 0x20
ja 0x404c0b
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x404d84
mov edx, dword [esp + 0x74]
mov eax, dword [esp + 0x38]
cmp edx, eax
je 0x404c0b
mov ecx, ebx
shr ecx, 3
sub eax, ecx
mov dword [esp + 8], ecx
mov ecx, eax
cmp eax, edx
jb 0x404bf0
mov edx, dword [esp + 0x78]
cmp dword [esp + 0xc], edx
mov dword [esp + 0x38], ecx
mov edx, dword [esp + 8]
setb al
shl edx, 3
sub ebx, edx
mov edx, dword [ecx]
mov dword [esp + 0x28], edx
test al, al
je 0x404c0b
mov edx, dword [esp + 0x28]
mov ecx, ebx
add dword [esp + 0xc], 1
shl edx, cl
movzx ecx, byte [esp]
mov eax, edx
shr eax, cl
lea eax, [esi + eax*2]
movzx edx, byte [eax]
movzx eax, byte [eax + 1]
add ebx, eax
mov eax, dword [esp + 0xc]
mov byte [eax - 1], dl
cmp ebx, 0x20
ja 0x404c0b
mov edx, dword [esp + 0x58]
cmp dword [esp + 0x38], edx
jb 0x404d08
mov eax, ebx
and ebx, 7
shr eax, 3
sub dword [esp + 0x38], eax
mov edx, dword [esp + 0x38]
mov eax, dword [edx]
mov edx, dword [esp + 0x78]
cmp dword [esp + 0xc], edx
mov dword [esp + 0x28], eax
setb al
jmp 0x404d4b
mov edx, dword [esp + 0x34]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub edi, eax
mov eax, dword [edx]
mov dword [esp + 0x34], edx
mov dword [esp + 0x20], eax
cmp edi, 0x20
ja 0x404abb
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x404e6c
mov edx, dword [esp + 0x5c]
mov eax, dword [esp + 0x34]
cmp edx, eax
je 0x404abb
mov ecx, edi
shr ecx, 3
sub eax, ecx
mov dword [esp + 8], ecx
mov ecx, eax
cmp eax, edx
jb 0x404aa0
mov edx, dword [esp + 0x70]
cmp dword [esp + 0x18], edx
mov dword [esp + 0x34], ecx
mov edx, dword [esp + 8]
setb al
shl edx, 3
sub edi, edx
mov edx, dword [ecx]
mov dword [esp + 0x20], edx
test al, al
je 0x404abb
mov edx, dword [esp + 0x20]
mov ecx, edi
add dword [esp + 0x18], 1
shl edx, cl
movzx ecx, byte [esp]
mov eax, edx
shr eax, cl
lea eax, [esi + eax*2]
movzx edx, byte [eax]
movzx eax, byte [eax + 1]
add edi, eax
mov eax, dword [esp + 0x18]
mov byte [eax - 1], dl
cmp edi, 0x20
ja 0x404abb
mov edx, dword [esp + 0x54]
cmp dword [esp + 0x34], edx
jb 0x404df0
mov eax, edi
and edi, 7
shr eax, 3
sub dword [esp + 0x34], eax
mov edx, dword [esp + 0x34]
mov eax, dword [edx]
mov edx, dword [esp + 0x70]
cmp dword [esp + 0x18], edx
mov dword [esp + 0x20], eax
setb al
jmp 0x404e33
mov edx, dword [esp + 0x30]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub ebp, eax
mov eax, dword [edx]
mov dword [esp + 0x30], edx
mov dword [esp + 0x1c], eax
cmp ebp, 0x20
ja 0x40496b
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x404f54
mov edx, dword [esp + 0x44]
mov eax, dword [esp + 0x30]
cmp edx, eax
je 0x40496b
mov ecx, ebp
shr ecx, 3
sub eax, ecx
mov dword [esp + 8], ecx
mov ecx, eax
cmp eax, edx
jb 0x404950
mov edx, dword [esp + 0x6c]
cmp dword [esp + 0x14], edx
mov dword [esp + 0x30], ecx
mov edx, dword [esp + 8]
setb al
shl edx, 3
sub ebp, edx
mov edx, dword [ecx]
mov dword [esp + 0x1c], edx
test al, al
je 0x40496b
mov edx, dword [esp + 0x1c]
mov ecx, ebp
add dword [esp + 0x14], 1
shl edx, cl
movzx ecx, byte [esp]
mov eax, edx
shr eax, cl
lea eax, [esi + eax*2]
movzx edx, byte [eax]
movzx eax, byte [eax + 1]
add ebp, eax
mov eax, dword [esp + 0x14]
mov byte [eax - 1], dl
cmp ebp, 0x20
ja 0x40496b
mov edx, dword [esp + 0x50]
cmp dword [esp + 0x30], edx
jb 0x404ed8
mov eax, ebp
and ebp, 7
shr eax, 3
sub dword [esp + 0x30], eax
mov edx, dword [esp + 0x30]
mov eax, dword [edx]
mov edx, dword [esp + 0x6c]
cmp dword [esp + 0x14], edx
mov dword [esp + 0x1c], eax
setb al
jmp 0x404f1b
mov edx, dword [esp + 0x24]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 4], eax
mov eax, dword [edx]
mov dword [esp + 0x24], edx
mov dword [esp + 0x10], eax
cmp dword [esp + 4], 0x20
ja 0x40480b
mov eax, dword [esp + 0x64]
neg eax
and eax, 0x1f
mov dword [esp + 8], eax
jmp 0x40504f
mov ecx, dword [esp + 0x40]
mov eax, dword [esp + 0x24]
cmp ecx, eax
je 0x40480b
mov edx, dword [esp + 4]
shr edx, 3
sub eax, edx
mov dword [esp + 0x10], eax
cmp dword [esp + 0x10], ecx
jb 0x4047f0
mov ecx, dword [esp + 0x68]
cmp dword [esp], ecx
mov ecx, dword [esp + 0x10]
setb al
shl edx, 3
sub dword [esp + 4], edx
mov edx, dword [ecx]
mov dword [esp + 0x24], ecx
mov dword [esp + 0x10], edx
test al, al
je 0x40480b
movzx ecx, byte [esp + 4]
mov edx, dword [esp + 0x10]
add dword [esp], 1
shl edx, cl
movzx ecx, byte [esp + 8]
mov eax, edx
shr eax, cl
mov ecx, dword [esp]
lea eax, [esi + eax*2]
movzx edx, byte [eax]
movzx eax, byte [eax + 1]
add dword [esp + 4], eax
mov eax, dword [esp + 4]
mov byte [ecx - 1], dl
cmp eax, 0x20
ja 0x40480b
mov edx, dword [esp + 0x4c]
cmp dword [esp + 0x24], edx
jb 0x404fc8
mov edx, dword [esp + 4]
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 0x24], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 4], edx
mov edx, dword [esp + 0x68]
mov eax, dword [eax]
cmp dword [esp], edx
mov dword [esp + 0x10], eax
setb al
jmp 0x40500e
mov ebx, esi
movzx esi, byte [esi]
mov dword [esp + 0x28], esi
cmp edx, 2
je 0x4050b0
cmp edx, 3
jne 0x4050bf
movzx ebx, byte [ebx + 2]
shl ebx, 0x10
add esi, ebx
mov dword [esp + 0x28], esi
mov esi, dword [esp + 0x74]
movzx ebx, byte [esi + 1]
shl ebx, 8
add dword [esp + 0x28], ebx
test cl, cl
je 0x404199
mov ebx, 5
bsr ecx, ecx
mov esi, dword [esp + 0x74]
sub ebx, edx
shl ebx, 3
mov dword [esp + 0x38], esi
sub ebx, ecx
jmp 0x40432d
mov eax, dword [esp + 0x6c]
mov dword [esp + 0xc], ecx
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x68]
mov dword [esp + 0x14], eax
jmp 0x4046c4
xor eax, eax
cmp ebp, 0x20
sete al
jmp 0x404c6e
xor edx, edx
cmp dword [esp + 4], 0x20
sete dl
jmp 0x404c5e