Function at 0x4057a0
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0xa0
mov esi, dword [esp + 0xb8]
cmp esi, 0xa
jb 0x4057d8
mov dword [esp + 0x58], ecx
mov ebx, dword [esp + 0xb4]
movzx ecx, word [ebx]
movzx ebp, word [ebx + 2]
movzx edi, word [ebx + 4]
lea eax, [ecx + ebp]
add eax, 6
add eax, edi
sub esi, eax
jae 0x4057e8
mov eax, 0xffffffec
add esp, 0xa0
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, 0xffffffb8
test cx, cx
je 0x4057dd
mov dword [esp + 0x2c], edi
mov edi, dword [esp + 0xbc]
mov dword [esp + 4], edi
movzx edi, word [edi + 2]
mov dword [esp + 0x14], edi
cmp cx, 4
jb 0x405838
movzx edi, byte [ebx + ecx + 5]
test edi, edi
je 0x405a08
mov dword [esp + 0x78], edx
lea edx, [ecx + 2]
mov dword [esp], edx
mov ebx, dword [ebx + edx]
bsr edi, edi
xor edi, 0x1f
add edi, 0xffffffe9
mov dword [esp + 0x30], edi
jmp 0x405897
movzx ebx, byte [ebx + 6]
cmp cx, 2
mov dword [esp + 0x78], edx
mov edx, dword [esp + 0xb4]
je 0x40585c
cmp cx, 3
jne 0x405865
movzx edi, byte [edx + 8]
shl edi, 0x10
or ebx, edi
movzx edi, byte [edx + 7]
shl edi, 8
add ebx, edi
movzx edi, byte [edx + ecx + 5]
test edi, edi
je 0x4057d8
mov dword [esp + 0x3c], ebx
bsr ebx, edi
xor ebx, 0x1f
lea edi, [ecx*8]
sub ebx, edi
add ebx, 9
mov dword [esp + 0x30], ebx
mov ebx, dword [esp + 0x3c]
mov dword [esp], 6
test bp, bp
je 0x4057dd
mov edx, dword [esp + 0xb4]
add edx, ecx
add edx, 6
cmp bp, 4
jb 0x4058de
movzx ecx, byte [ebp + edx - 1]
test ecx, ecx
je 0x405a08
mov dword [esp + 0x3c], ebx
mov edi, edx
lea edx, [ebp - 4]
mov dword [esp + 0x18], edi
mov edi, dword [edi + edx]
bsr ecx, ecx
xor ecx, 0x1f
add ecx, 0xffffffe9
mov dword [esp + 8], ecx
jmp 0x40592c
movzx edi, byte [edx]
cmp bp, 2
je 0x4058f6
cmp bp, 3
jne 0x4058ff
movzx ecx, byte [edx + 2]
shl ecx, 0x10
or edi, ecx
movzx ecx, byte [edx + 1]
shl ecx, 8
add edi, ecx
movzx ecx, byte [ebp + edx - 1]
test ecx, ecx
je 0x4057d8
mov dword [esp + 0x18], edx
mov dword [esp + 0x3c], ebx
bsr edx, ecx
xor edx, 0x1f
lea ecx, [ebp*8]
sub edx, ecx
add edx, 9
mov dword [esp + 8], edx
xor edx, edx
mov ebx, dword [esp + 0x2c]
test bx, bx
je 0x4057dd
add ebp, dword [esp + 0x18]
cmp bx, 4
jb 0x40596e
movzx ecx, byte [ebx + ebp - 1]
test ecx, ecx
je 0x405a08
mov dword [esp + 0x48], edi
add ebx, 0xfffffffc
mov edi, dword [ebp + ebx]
mov dword [esp + 0x28], edi
bsr ecx, ecx
xor ecx, 0x1f
add ecx, 0xffffffe9
mov dword [esp + 0x54], ecx
jmp 0x4059c1
mov dword [esp + 0x48], edi
movzx edi, byte [ebp]
cmp bx, 2
je 0x40598b
cmp bx, 3
jne 0x405994
movzx ecx, byte [ebp + 2]
shl ecx, 0x10
or edi, ecx
movzx ecx, byte [ebp + 1]
shl ecx, 8
add edi, ecx
mov ebx, dword [esp + 0x2c]
movzx ecx, byte [ebx + ebp - 1]
test ecx, ecx
je 0x4057d8
mov dword [esp + 0x28], edi
bsr edi, ecx
xor edi, 0x1f
lea ecx, [ebx*8]
sub edi, ecx
add edi, 9
mov dword [esp + 0x54], edi
xor ebx, ebx
test esi, esi
je 0x4057dd
mov edi, dword [esp + 0x2c]
add edi, ebp
cmp esi, 4
jb 0x405a12
movzx eax, byte [esi + edi - 1]
test eax, eax
je 0x405a08
cmp esi, 0xffffff88
ja 0x405e82
mov dword [esp + 0x70], ebx
mov dword [esp + 0x74], edx
mov ecx, dword [edi + esi - 4]
mov dword [esp + 0x1c], ecx
add esi, 0xfffffffc
bsr eax, eax
xor eax, 0x1f
add eax, 0xffffffe9
mov dword [esp + 0x6c], eax
jmp 0x405a6c
mov eax, 0xffffffff
jmp 0x4057dd
movzx eax, byte [edi]
mov dword [esp + 0x1c], eax
cmp esi, 2
je 0x405a32
cmp esi, 3
jne 0x405a43
movzx eax, byte [edi + 2]
shl eax, 0x10
mov ecx, dword [esp + 0x1c]
or ecx, eax
jmp 0x405a36
mov ecx, dword [esp + 0x1c]
movzx eax, byte [edi + 1]
shl eax, 8
add ecx, eax
mov dword [esp + 0x1c], ecx
movzx eax, byte [esi + edi - 1]
test eax, eax
je 0x4057d8
mov dword [esp + 0x70], ebx
mov dword [esp + 0x74], edx
bsr eax, eax
xor eax, 0x1f
shl esi, 3
sub eax, esi
add eax, 9
mov dword [esp + 0x6c], eax
xor esi, esi
mov dword [esp + 0x4c], ebp
mov dword [esp + 0x2c], edi
mov ebp, dword [esp + 0x58]
mov ecx, dword [esp + 0x78]
lea edx, [ecx + ebp]
add edx, 0xfffffffd
add dword [esp + 4], 4
add ecx, 3
shr ecx, 2
lea eax, [ecx + ebp]
lea edi, [eax + ecx]
add ecx, edi
mov dword [esp + 0x7c], edx
cmp ecx, edx
mov dword [esp + 0x60], ecx
mov dword [esp + 0x5c], edi
mov dword [esp + 0x68], eax
jae 0x405dec
mov edx, dword [esp + 0x14]
neg edx
and edx, 0x1f
mov dword [esp + 0xc], edx
mov dword [esp + 0x98], 1
mov dword [esp + 0x10], eax
mov dword [esp + 0x94], ecx
mov eax, dword [esp + 0x30]
mov edx, dword [esp + 8]
jmp 0x405b9e
mov eax, edi
shr eax, 3
mov ecx, esi
sub ecx, eax
and edi, 7
mov dword [esp + 0x24], edi
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x50], ecx
mov eax, dword [eax + ecx]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x8c]
mov ecx, dword [esp + 0x80]
mov ebp, dword [esp + 0x20]
add ebp, eax
add edx, dword [esp + 0x9c]
mov dword [esp + 0x10], edx
mov edi, ebx
add edi, ecx
xor eax, eax
cmp esi, 3
setg al
cmp dword [esp + 0x70], 3
setg bh
cmp dword [esp + 0x74], 3
setg cl
cmp dword [esp], 9
setg bl
mov edx, dword [esp + 0x98]
and edx, eax
and bl, cl
and bl, bh
movzx eax, bl
and edx, eax
xor eax, eax
mov ecx, dword [esp + 0x40]
cmp ecx, dword [esp + 0x7c]
setb al
mov dword [esp + 0x94], ecx
mov esi, dword [esp + 0x50]
mov ebx, dword [esp + 0x24]
mov dword [esp + 0x6c], ebx
mov ebx, dword [esp + 0x64]
mov dword [esp + 0x70], ebx
mov ebx, dword [esp + 0x34]
mov dword [esp + 0x74], ebx
mov ebx, dword [esp + 0x38]
mov dword [esp], ebx
mov dword [esp + 0x98], edx
test edx, eax
mov edx, dword [esp + 8]
mov eax, dword [esp + 0x30]
je 0x405e1d
mov dword [esp + 0x90], esi
mov dword [esp + 0x44], edi
mov ebx, dword [esp + 0x3c]
mov edi, ebx
mov ecx, eax
shl edi, cl
mov dword [esp + 0x24], edx
mov ecx, dword [esp + 0xc]
mov esi, ecx
shr edi, cl
mov edx, dword [esp + 4]
movzx ecx, word [edx + edi*4]
mov word [ebp], cx
movzx ecx, byte [edx + edi*4 + 2]
add ecx, eax
mov dword [esp + 8], ecx
movzx eax, byte [edx + edi*4 + 3]
mov edi, ebx
shl edi, cl
mov ebx, esi
mov ecx, ebx
shr edi, cl
movzx ecx, word [edx + edi*4]
mov dword [esp + 0x20], ebp
mov dword [esp + 0x88], eax
mov word [ebp + eax], cx
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x24]
shl eax, cl
movzx ebp, byte [edx + edi*4 + 2]
mov ecx, ebx
shr eax, cl
movzx ecx, byte [edx + edi*4 + 3]
mov dword [esp + 0x8c], ecx
movzx ecx, word [edx + eax*4]
mov esi, dword [esp + 0x10]
mov word [esi], cx
movzx ecx, byte [edx + eax*4 + 2]
add ecx, dword [esp + 0x24]
mov ebx, dword [esp + 0x48]
mov edi, ecx
shl ebx, cl
add ebp, dword [esp + 8]
mov ecx, dword [esp + 0xc]
shr ebx, cl
movzx ecx, byte [edx + eax*4 + 3]
movzx eax, word [edx + ebx*4]
mov dword [esp + 0x84], ecx
mov word [esi + ecx], ax
mov ecx, dword [esp]
cmp ecx, 0xa
jge 0x405c64
mov dword [esp + 0x30], ebp
mov dword [esp + 0x38], ecx
jmp 0x405c84
mov eax, ebp
shr eax, 3
sub ecx, eax
and ebp, 7
mov dword [esp + 0x30], ebp
mov dword [esp + 0x38], ecx
mov eax, dword [esp + 0xb4]
mov eax, dword [eax + ecx]
mov dword [esp + 0x3c], eax
mov ecx, dword [esp + 0x18]
movzx eax, byte [edx + ebx*4 + 2]
add edi, eax
movzx eax, byte [edx + ebx*4 + 3]
mov ebx, dword [esp + 0x74]
cmp ebx, 4
mov ebp, dword [esp + 0x44]
mov dword [esp + 0x9c], eax
jge 0x405cb2
mov dword [esp + 8], edi
mov dword [esp + 0x34], ebx
jmp 0x405ccb
mov eax, edi
shr eax, 3
sub ebx, eax
and edi, 7
mov dword [esp + 8], edi
mov dword [esp + 0x34], ebx
mov eax, dword [ecx + ebx]
mov dword [esp + 0x48], eax
mov ebx, dword [esp + 0x54]
mov edi, dword [esp + 0x28]
mov eax, edi
mov ecx, ebx
shl eax, cl
mov ecx, dword [esp + 0xc]
shr eax, cl
movzx ecx, word [edx + eax*4]
mov word [ebp], cx
movzx ecx, byte [edx + eax*4 + 2]
add ecx, ebx
mov dword [esp + 0x40], ecx
movzx esi, byte [edx + eax*4 + 3]
mov eax, edi
shl eax, cl
mov ebx, dword [esp + 0xc]
mov ecx, ebx
shr eax, cl
movzx ecx, word [edx + eax*4]
mov dword [esp + 0x50], esi
mov word [ebp + esi], cx
mov edi, dword [esp + 0x1c]
mov ecx, dword [esp + 0x6c]
shl edi, cl
movzx ebp, byte [edx + eax*4 + 2]
mov ecx, ebx
shr edi, cl
movzx eax, byte [edx + eax*4 + 3]
mov dword [esp + 0x80], eax
movzx eax, word [edx + edi*4]
mov esi, dword [esp + 0x94]
mov word [esi], ax
movzx ecx, byte [edx + edi*4 + 2]
add ecx, dword [esp + 0x6c]
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x24], ecx
shl eax, cl
mov ecx, ebx
shr eax, cl
add ebp, dword [esp + 0x40]
movzx ecx, byte [edx + edi*4 + 3]
movzx edi, word [edx + eax*4]
mov word [esi + ecx], di
add ecx, esi
mov dword [esp + 0x40], ecx
movzx ecx, byte [edx + eax*4 + 2]
movzx eax, byte [edx + eax*4 + 3]
mov edx, dword [esp + 0x70]
cmp edx, 4
jge 0x405d88
mov dword [esp + 0x54], ebp
mov dword [esp + 0x64], edx
jmp 0x405da5
mov edi, ebp
shr edi, 3
sub edx, edi
and ebp, 7
mov dword [esp + 0x54], ebp
mov edi, dword [esp + 0x4c]
mov dword [esp + 0x64], edx
mov edx, dword [edi + edx]
mov dword [esp + 0x28], edx
mov edx, dword [esp + 0x10]
mov esi, dword [esp + 0x90]
mov edi, dword [esp + 0x88]
mov ebx, dword [esp + 0x84]
add dword [esp + 0x20], edi
add edx, ebx
mov ebx, dword [esp + 0x44]
add ebx, dword [esp + 0x50]
mov edi, dword [esp + 0x24]
add edi, ecx
add dword [esp + 0x40], eax
cmp esi, 4
jge 0x405add
mov dword [esp + 0x50], esi
mov dword [esp + 0x24], edi
jmp 0x405afc
mov edx, dword [esp]
mov dword [esp + 0x38], edx
mov edx, dword [esp + 0x74]
mov dword [esp + 0x34], edx
mov ebx, eax
mov eax, dword [esp + 0x70]
mov dword [esp + 0x64], eax
mov edx, dword [esp + 0x6c]
mov dword [esp + 0x24], edx
mov dword [esp + 0x50], esi
mov dword [esp + 0x10], ebx
mov eax, dword [esp + 0x30]
mov edx, dword [esp + 8]
mov dword [esp + 0x20], ebp
mov dword [esp + 0x40], ecx
cmp edi, dword [esp + 0x60]
ja 0x4057d8
mov ecx, eax
mov eax, dword [esp + 0x10]
cmp eax, dword [esp + 0x5c]
ja 0x4057d8
mov ebp, edi
mov eax, 0xffffffec
mov ebx, dword [esp + 0x68]
cmp dword [esp + 0x20], ebx
mov edi, dword [esp + 0x18]
ja 0x4057dd
mov dword [esp + 8], edx
mov eax, ecx
cmp ecx, 0x21
mov ecx, ebp
mov dword [esp + 0x44], ebp
mov dword [esp + 0x18], edi
jb 0x405e89
mov edx, dword [esp + 0x14]
neg edx
and edx, 0x1f
mov dword [esp], edx
mov ebx, dword [esp + 0x3c]
jmp 0x405f68
mov eax, esi
jmp 0x4057dd
lea ecx, [ebx - 3]
mov dword [esp + 0xc], ecx
mov ecx, dword [esp + 0x14]
neg ecx
and ecx, 0x1f
mov dword [esp], ecx
mov ebx, dword [esp + 0x3c]
mov ebp, dword [esp + 0x38]
cmp ebp, 0xa
jge 0x405ed9
cmp ebp, 6
mov edx, dword [esp]
je 0x406161
mov esi, eax
shr esi, 3
mov edi, ebp
sub edi, esi
lea ecx, [ebp - 6]
mov ebx, eax
xor eax, eax
cmp edi, 6
setl al
cmovge ecx, esi
lea esi, [ecx*8]
sub ebx, esi
jmp 0x405ee8
mov ecx, eax
shr ecx, 3
and eax, 7
mov ebx, eax
xor eax, eax
mov edx, dword [esp]
sub ebp, ecx
mov dword [esp + 0x38], ebp
mov ecx, dword [esp + 0xb4]
mov ecx, dword [ecx + ebp]
mov ebp, dword [esp + 0x20]
cmp ebp, dword [esp + 0xc]
jae 0x40612d
test eax, eax
jne 0x40612d
mov edi, ecx
mov esi, ecx
mov ecx, ebx
shl esi, cl
mov ecx, edx
shr esi, cl
mov edx, ebp
mov ebp, dword [esp + 4]
movzx eax, word [ebp + esi*4]
mov word [edx], ax
movzx eax, byte [ebp + esi*4 + 2]
add eax, ebx
mov ebx, edi
mov ecx, eax
shl edi, cl
movzx esi, byte [ebp + esi*4 + 3]
mov ecx, dword [esp]
shr edi, cl
movzx ecx, word [ebp + edi*4]
mov word [edx + esi], cx
lea ecx, [edx + esi]
movzx esi, byte [ebp + edi*4 + 2]
add esi, eax
mov eax, esi
movzx edx, byte [ebp + edi*4 + 3]
add edx, ecx
mov dword [esp + 0x20], edx
cmp esi, 0x21
jb 0x405ea0
mov ebp, dword [esp + 0x20]
mov edx, dword [esp + 0x68]
lea esi, [edx - 2]
mov edx, dword [esp + 4]
mov dword [esp + 0x3c], ebx
mov ebx, eax
mov edi, ebp
cmp ebp, esi
ja 0x405fb3
mov ebp, dword [esp + 0x3c]
mov dword [esp + 0xc], esi
mov esi, dword [esp]
mov eax, ebp
mov ecx, ebx
shl eax, cl
mov ecx, esi
shr eax, cl
movzx ecx, word [edx + eax*4]
mov word [edi], cx
movzx ecx, byte [edx + eax*4 + 2]
add ebx, ecx
movzx eax, byte [edx + eax*4 + 3]
add edi, eax
cmp edi, dword [esp + 0xc]
jbe 0x405f8e
mov dword [esp + 0x30], ebx
cmp edi, dword [esp + 0x68]
jae 0x405fe5
mov ebx, dword [esp + 0x30]
mov ecx, ebx
mov esi, dword [esp + 0x3c]
shl esi, cl
mov ecx, dword [esp]
shr esi, cl
mov al, byte [edx + esi*4]
mov byte [edi], al
cmp byte [edx + esi*4 + 3], 1
jne 0x405fef
movzx eax, byte [edx + esi*4 + 2]
add ebx, eax
mov dword [esp + 0x30], ebx
mov eax, dword [esp + 0x14]
mov edi, dword [esp + 0x18]
jmp 0x406012
cmp ebx, 0x1f
mov edi, dword [esp + 0x18]
ja 0x40600e
movzx eax, byte [edx + esi*4 + 2]
add ebx, eax
cmp ebx, 0x20
mov eax, 0x20
cmovae ebx, eax
mov dword [esp + 0x30], ebx
mov eax, dword [esp + 0x14]
cmp dword [esp + 8], 0x21
jb 0x406025
mov ecx, eax
neg ecx
and ecx, 0x1f
jmp 0x40611b
mov ecx, dword [esp + 0x5c]
add ecx, 0xfffffffd
mov dword [esp + 0xc], ecx
neg eax
and eax, 0x1f
mov dword [esp], eax
mov ebp, dword [esp + 4]
mov edx, dword [esp + 0x34]
cmp edx, 4
jge 0x406078
test edx, edx
mov edi, dword [esp + 0x18]
je 0x406217
lea esi, [edi + edx]
mov ebx, dword [esp + 8]
mov eax, ebx
shr eax, 3
sub esi, eax
xor ecx, ecx
cmp esi, edi
setb cl
cmovb eax, edx
lea esi, [eax*8]
sub ebx, esi
mov dword [esp + 8], ebx
jmp 0x40608e
mov ecx, dword [esp + 8]
mov eax, ecx
shr eax, 3
and ecx, 7
mov dword [esp + 8], ecx
xor ecx, ecx
mov edi, dword [esp + 0x18]
sub edx, eax
mov dword [esp + 0x34], edx
mov eax, dword [edi + edx]
mov dword [esp + 0x48], eax
mov eax, dword [esp + 0xc]
cmp dword [esp + 0x10], eax
jae 0x406143
test ecx, ecx
jne 0x406143
mov edi, dword [esp + 0x48]
mov esi, edi
mov ebx, dword [esp + 8]
mov ecx, ebx
shl esi, cl
mov ecx, dword [esp]
shr esi, cl
movzx eax, word [ebp + esi*4]
mov edx, dword [esp + 0x10]
mov word [edx], ax
movzx eax, byte [ebp + esi*4 + 2]
add eax, ebx
mov ecx, eax
shl edi, cl
movzx esi, byte [ebp + esi*4 + 3]
mov ecx, dword [esp]
shr edi, cl
movzx ecx, word [ebp + edi*4]
mov word [edx + esi], cx
lea ecx, [edx + esi]
movzx esi, byte [ebp + edi*4 + 2]
add esi, eax
movzx edx, byte [ebp + edi*4 + 3]
add edx, ecx
mov dword [esp + 0x10], edx
mov dword [esp + 8], esi
cmp esi, 0x21
jb 0x40603c
mov edx, dword [esp + 4]
mov edi, dword [esp + 0x18]
mov ecx, dword [esp]
mov eax, dword [esp + 0x5c]
lea ebx, [eax - 2]
mov ebp, dword [esp + 0x34]
add ebp, edi
jmp 0x4062db
mov eax, dword [esp + 0x68]
lea esi, [eax - 2]
mov eax, ebx
cmp ebx, 0x20
mov ebx, ecx
ja 0x405f73
jmp 0x406174
mov eax, dword [esp + 0x34]
lea ebp, [edi + eax]
mov eax, dword [esp + 0x5c]
lea ebx, [eax - 2]
cmp dword [esp + 8], 0x20
jbe 0x406228
jmp 0x4062d4
mov ecx, dword [esp + 0x68]
lea esi, [ecx - 2]
mov dword [esp + 0x38], 6
mov ebp, dword [esp + 0x20]
mov edx, dword [esp + 4]
mov dword [esp + 0x20], ebp
mov ebp, dword [esp + 0x38]
cmp ebp, 0xa
jge 0x4061b2
cmp ebp, 6
je 0x40656b
mov ebx, eax
shr eax, 3
mov edi, ebp
sub edi, eax
lea ecx, [ebp - 6]
xor edx, edx
cmp edi, 6
setl dl
cmovge ecx, eax
lea eax, [ecx*8]
sub ebx, eax
mov eax, ebx
jmp 0x4061bc
mov ecx, eax
shr ecx, 3
and eax, 7
xor edx, edx
sub ebp, ecx
mov dword [esp + 0x38], ebp
mov ecx, dword [esp + 0xb4]
mov ebx, dword [ecx + ebp]
mov ebp, dword [esp + 0x20]
cmp ebp, esi
ja 0x405f73
test edx, edx
jne 0x405f73
mov edx, ebx
mov ecx, eax
shl edx, cl
mov ecx, dword [esp]
shr edx, cl
mov edi, dword [esp + 4]
movzx ecx, word [edi + edx*4]
mov word [ebp], cx
movzx ecx, byte [edi + edx*4 + 2]
add ecx, eax
movzx eax, byte [edi + edx*4 + 3]
mov edx, edi
add ebp, eax
mov eax, ecx
cmp ecx, 0x20
jbe 0x406178
jmp 0x405f77
mov eax, dword [esp + 0x5c]
lea ebx, [eax - 2]
mov dword [esp + 0x34], 0
mov ebp, edi
mov edx, dword [esp + 4]
mov dword [esp + 0xc], ebx
mov esi, dword [esp + 0x34]
cmp esi, 4
jge 0x406267
test esi, esi
je 0x4062d8
mov ebx, dword [esp + 8]
mov ecx, ebx
shr ecx, 3
sub ebp, ecx
xor edx, edx
cmp ebp, edi
setb dl
cmovb ecx, esi
lea eax, [ecx*8]
sub ebx, eax
mov eax, ebx
mov ebx, dword [esp + 0xc]
jmp 0x406275
mov eax, dword [esp + 8]
mov ecx, eax
shr ecx, 3
and eax, 7
xor edx, edx
sub esi, ecx
lea ebp, [edi + esi]
mov dword [esp + 0x34], esi
mov ecx, dword [edi + esi]
cmp dword [esp + 0x10], ebx
mov dword [esp + 0x48], ecx
ja 0x4062d0
test edx, edx
jne 0x4062d0
mov edx, ecx
mov ecx, eax
shl edx, cl
mov ecx, dword [esp]
shr edx, cl
mov edi, dword [esp + 4]
movzx ecx, word [edi + edx*4]
mov esi, dword [esp + 0x10]
mov word [esi], cx
movzx ecx, byte [edi + edx*4 + 2]
add ecx, eax
movzx eax, byte [edi + edx*4 + 3]
mov edx, edi
mov edi, dword [esp + 0x18]
add esi, eax
mov dword [esp + 0x10], esi
mov dword [esp + 8], ecx
cmp ecx, 0x20
jbe 0x406230
jmp 0x4062d8
mov dword [esp + 8], eax
mov edx, dword [esp + 4]
mov ecx, dword [esp]
mov dword [esp], ecx
mov dword [esp + 0x20], ebp
cmp dword [esp + 0x10], ebx
jbe 0x4062f2
mov ebx, dword [esp + 8]
mov ebp, dword [esp + 0x10]
jmp 0x40632b
mov dword [esp + 0xc], ebx
mov ebx, dword [esp + 8]
mov esi, dword [esp + 0x48]
mov ebp, dword [esp + 0x10]
mov edi, dword [esp]
mov eax, esi
mov ecx, ebx
shl eax, cl
mov ecx, edi
shr eax, cl
movzx ecx, word [edx + eax*4]
mov word [ebp], cx
movzx ecx, byte [edx + eax*4 + 2]
add ebx, ecx
movzx eax, byte [edx + eax*4 + 3]
add ebp, eax
cmp ebp, dword [esp + 0xc]
jbe 0x406305
mov dword [esp + 8], ebx
cmp ebp, dword [esp + 0x5c]
jae 0x40636c
mov ebx, dword [esp + 8]
mov ecx, ebx
mov esi, dword [esp + 0x48]
shl esi, cl
mov ecx, dword [esp]
shr esi, cl
mov al, byte [edx + esi*4]
mov byte [ebp], al
cmp byte [edx + esi*4 + 3], 1
mov edi, dword [esp + 0x4c]
jne 0x40637a
movzx eax, byte [edx + esi*4 + 2]
add ebx, eax
mov dword [esp + 8], ebx
mov eax, dword [esp + 0x14]
mov ebp, dword [esp + 0x44]
jmp 0x40639d
mov eax, dword [esp + 0x14]
mov ebp, dword [esp + 0x44]
mov edi, dword [esp + 0x4c]
jmp 0x40639d
cmp ebx, 0x1f
mov ebp, dword [esp + 0x44]
ja 0x406399
movzx eax, byte [edx + esi*4 + 2]
add ebx, eax
cmp ebx, 0x20
mov eax, 0x20
cmovae ebx, eax
mov dword [esp + 8], ebx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x54]
cmp ebx, 0x21
jb 0x4063b4
neg eax
and eax, 0x1f
mov dword [esp + 0xc], eax
jmp 0x406472
mov ecx, dword [esp + 0x60]
add ecx, 0xfffffffd
mov dword [esp], ecx
neg eax
and eax, 0x1f
mov dword [esp + 0xc], eax
mov edx, dword [esp + 0x64]
cmp edx, 4
jge 0x4063f7
test edx, edx
je 0x4064b2
lea esi, [edi + edx]
mov eax, ebx
shr eax, 3
sub esi, eax
xor ecx, ecx
cmp esi, edi
setb cl
cmovb eax, edx
lea esi, [eax*8]
sub ebx, esi
jmp 0x406401
mov eax, ebx
shr eax, 3
and ebx, 7
xor ecx, ecx
sub edx, eax
mov edi, dword [edi + edx]
cmp ebp, dword [esp]
mov dword [esp + 0x28], edi
jae 0x40648e
test ecx, ecx
jne 0x40648e
mov dword [esp + 0x64], edx
mov esi, edi
mov ecx, ebx
shl esi, cl
mov ecx, dword [esp + 0xc]
shr esi, cl
mov edx, ebp
mov ebp, dword [esp + 4]
movzx eax, word [ebp + esi*4]
mov word [edx], ax
movzx eax, byte [ebp + esi*4 + 2]
add eax, ebx
mov ecx, eax
shl edi, cl
movzx esi, byte [ebp + esi*4 + 3]
mov ecx, dword [esp + 0xc]
shr edi, cl
movzx ecx, word [ebp + edi*4]
mov word [edx + esi], cx
lea ecx, [edx + esi]
movzx ebx, byte [ebp + edi*4 + 2]
add ebx, eax
movzx ebp, byte [ebp + edi*4 + 3]
add ebp, ecx
cmp ebx, 0x21
mov edi, dword [esp + 0x4c]
jb 0x4063c7
mov edx, dword [esp + 4]
mov edi, dword [esp + 0x28]
mov eax, dword [esp + 0x60]
lea ecx, [eax - 2]
mov eax, dword [esp + 0x64]
add eax, dword [esp + 0x4c]
mov dword [esp + 0x10], eax
jmp 0x406587
mov edi, dword [esp + 0x4c]
lea eax, [edi + edx]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x60]
lea ecx, [eax - 2]
cmp ebx, 0x20
jbe 0x4064bf
mov edx, dword [esp + 4]
mov edi, dword [esp + 0x28]
jmp 0x406587
mov eax, dword [esp + 0x60]
lea ecx, [eax - 2]
xor edx, edx
mov dword [esp + 0x10], edi
mov dword [esp], ecx
mov esi, edx
mov edx, dword [esp + 4]
mov dword [esp + 0x44], ebp
mov ebp, esi
cmp esi, 4
jge 0x4064fb
test ebp, ebp
je 0x40657c
mov ecx, ebx
shr ecx, 3
mov eax, dword [esp + 0x10]
sub eax, ecx
xor edx, edx
cmp eax, edi
setb dl
cmovb ecx, ebp
lea eax, [ecx*8]
sub ebx, eax
jmp 0x406505
mov ecx, ebx
shr ecx, 3
and ebx, 7
xor edx, edx
mov eax, ebx
sub ebp, ecx
lea ecx, [edi + ebp]
mov dword [esp + 0x10], ecx
mov esi, ebp
mov edi, dword [edi + ebp]
mov ebp, dword [esp + 0x44]
cmp ebp, dword [esp]
mov ebx, dword [esp + 0xc]
ja 0x406563
test edx, edx
jne 0x406563
mov dword [esp + 0x28], edi
mov edx, edi
mov ecx, eax
shl edx, cl
mov ecx, ebx
shr edx, cl
mov edi, dword [esp + 4]
movzx ecx, word [edi + edx*4]
mov word [ebp], cx
movzx ebx, byte [edi + edx*4 + 2]
add ebx, eax
movzx eax, byte [edi + edx*4 + 3]
mov edx, edi
add ebp, eax
cmp ebx, 0x20
mov edi, dword [esp + 0x4c]
jbe 0x4064c8
mov edi, dword [esp + 0x28]
jmp 0x406584
mov ebx, eax
mov edx, dword [esp + 4]
jmp 0x406584
mov dword [esp + 0x38], 6
mov ebp, dword [esp + 0x20]
jmp 0x405f77
mov edi, dword [esp + 0x28]
mov ebp, dword [esp + 0x44]
mov ecx, dword [esp]
mov dword [esp + 0x28], edi
cmp ebp, ecx
ja 0x4065bf
mov dword [esp], ecx
mov esi, dword [esp + 0xc]
mov edi, dword [esp + 0x28]
mov eax, edi
mov ecx, ebx
shl eax, cl
mov ecx, esi
shr eax, cl
movzx ecx, word [edx + eax*4]
mov word [ebp], cx
movzx ecx, byte [edx + eax*4 + 2]
add ebx, ecx
movzx eax, byte [edx + eax*4 + 3]
add ebp, eax
cmp ebp, dword [esp]
jbe 0x40659a
cmp ebp, dword [esp + 0x60]
jae 0x4065eb
mov ecx, ebx
mov esi, dword [esp + 0x28]
shl esi, cl
mov ecx, dword [esp + 0xc]
shr esi, cl
mov al, byte [edx + esi*4]
mov byte [ebp], al
cmp byte [edx + esi*4 + 3], 1
jne 0x4066fb
movzx eax, byte [edx + esi*4 + 2]
add ebx, eax
mov ebp, dword [esp + 0x50]
mov dword [esp + 0x54], ebx
mov eax, dword [esp + 0x58]
add eax, dword [esp + 0x78]
mov dword [esp + 0x58], eax
mov eax, dword [esp + 0x14]
neg eax
and eax, 0x1f
mov dword [esp + 0x14], eax
mov ebx, dword [esp + 0x24]
cmp ebx, 0x20
mov edi, dword [esp + 0x40]
ja 0x4066e7
cmp ebp, 4
mov dword [esp + 0x40], edi
jge 0x406657
test ebp, ebp
je 0x406741
mov esi, dword [esp + 0x2c]
lea edx, [esi + ebp]
mov eax, ebx
shr eax, 3
sub edx, eax
mov edi, ebp
xor ecx, ecx
cmp edx, esi
setb cl
cmovb eax, ebp
lea edx, [eax*8]
sub ebx, edx
mov edx, dword [esp + 4]
jmp 0x406667
mov eax, ebx
shr eax, 3
and ebx, 7
mov edi, ebp
xor ecx, ecx
mov esi, dword [esp + 0x2c]
sub edi, eax
mov ebp, edi
mov esi, dword [esi + edi]
mov edi, dword [esp + 0x40]
cmp edi, dword [esp + 0x7c]
mov dword [esp + 0x1c], esi
jae 0x40671f
test ecx, ecx
jne 0x40671f
mov edx, esi
mov ecx, ebx
shl edx, cl
mov ecx, dword [esp + 0x14]
shr edx, cl
mov eax, dword [esp + 4]
movzx eax, word [eax + edx*4]
mov word [edi], ax
mov eax, dword [esp + 4]
movzx eax, byte [eax + edx*4 + 2]
add eax, ebx
mov ecx, eax
shl esi, cl
mov ecx, dword [esp + 4]
movzx edx, byte [ecx + edx*4 + 3]
mov ecx, dword [esp + 0x14]
shr esi, cl
mov ecx, dword [esp + 4]
movzx ecx, word [ecx + esi*4]
mov word [edi + edx], cx
lea ecx, [edi + edx]
mov edx, dword [esp + 4]
movzx ebx, byte [edx + esi*4 + 2]
add ebx, eax
movzx edi, byte [edx + esi*4 + 3]
add edi, ecx
cmp ebx, 0x21
jb 0x40661d
mov eax, dword [esp + 0x58]
add eax, 0xfffffffe
add ebp, dword [esp + 0x2c]
mov dword [esp + 0xc], ebp
jmp 0x406818
cmp ebx, 0x1f
mov ebp, dword [esp + 0x50]
ja 0x4065ef
movzx eax, byte [edx + esi*4 + 2]
add ebx, eax
cmp ebx, 0x20
mov eax, 0x20
cmovae ebx, eax
jmp 0x4065ef
mov eax, dword [esp + 0x2c]
mov ecx, ebp
add eax, ebp
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x58]
add eax, 0xfffffffe
mov dword [esp], eax
mov eax, ebx
cmp ebx, 0x20
jbe 0x406759
jmp 0x406815
mov eax, dword [esp + 0x58]
add eax, 0xfffffffe
mov dword [esp], eax
xor ecx, ecx
mov eax, dword [esp + 0x2c]
mov dword [esp + 0xc], eax
mov esi, dword [esp + 0x1c]
cmp ecx, 4
mov dword [esp + 0x40], edi
jge 0x406790
test ecx, ecx
je 0x4067f7
mov esi, ebx
shr ebx, 3
mov eax, dword [esp + 0xc]
sub eax, ebx
xor edx, edx
mov ebp, dword [esp + 0x2c]
cmp eax, ebp
setb dl
cmovb ebx, ecx
lea eax, [ebx*8]
sub esi, eax
mov eax, esi
jmp 0x40679e
mov eax, ebx
shr ebx, 3
and eax, 7
xor edx, edx
mov ebp, dword [esp + 0x2c]
sub ecx, ebx
lea esi, [ecx + ebp]
mov dword [esp + 0xc], esi
mov esi, dword [ebp + ecx]
mov edi, dword [esp + 0x40]
cmp edi, dword [esp]
ja 0x4067fd
mov ebp, edi
test edx, edx
jne 0x406809
mov edi, ecx
mov edx, esi
mov ecx, eax
shl edx, cl
mov ecx, dword [esp + 0x14]
shr edx, cl
mov ebx, ebp
mov ebp, dword [esp + 4]
movzx ecx, word [ebp + edx*4]
mov word [ebx], cx
movzx ecx, byte [ebp + edx*4 + 2]
add ecx, eax
movzx eax, byte [ebp + edx*4 + 3]
mov edx, ebp
mov ebp, ebx
add ebp, eax
mov ebx, ecx
cmp ecx, 0x20
mov ecx, edi
mov edi, ebp
jbe 0x406759
mov dword [esp + 0x1c], esi
jmp 0x406815
mov dword [esp + 0x1c], esi
mov ebx, eax
mov edx, dword [esp + 4]
jmp 0x406815
mov dword [esp + 0x1c], esi
mov ebx, eax
mov edx, dword [esp + 4]
mov edi, ebp
mov eax, dword [esp]
mov esi, edi
cmp edi, eax
ja 0x40684d
mov dword [esp], eax
mov edi, dword [esp + 0x14]
mov ebp, dword [esp + 0x1c]
mov eax, ebp
mov ecx, ebx
shl eax, cl
mov ecx, edi
shr eax, cl
movzx ecx, word [edx + eax*4]
mov word [esi], cx
movzx ecx, byte [edx + eax*4 + 2]
add ebx, ecx
movzx eax, byte [edx + eax*4 + 3]
add esi, eax
cmp esi, dword [esp]
jbe 0x406829
mov eax, ebx
cmp esi, dword [esp + 0x58]
jae 0x406890
mov ecx, eax
mov dword [esp + 0x24], eax
mov ebp, dword [esp + 0x1c]
shl ebp, cl
mov ecx, dword [esp + 0x14]
shr ebp, cl
mov al, byte [edx + ebp*4]
mov byte [esi], al
cmp byte [edx + ebp*4 + 3], 1
mov ecx, dword [esp + 0x18]
mov edi, dword [esp + 0x30]
mov ebx, dword [esp + 8]
jne 0x4068a4
movzx eax, byte [edx + ebp*4 + 2]
mov edx, dword [esp + 0x24]
add edx, eax
mov esi, dword [esp + 0xc]
jmp 0x4068cb
mov ecx, dword [esp + 0x18]
mov edi, dword [esp + 0x30]
mov ebx, dword [esp + 8]
mov edx, eax
mov esi, dword [esp + 0xc]
jmp 0x4068cb
cmp dword [esp + 0x24], 0x1f
mov esi, dword [esp + 0xc]
ja 0x4068c7
movzx eax, byte [edx + ebp*4 + 2]
mov edx, dword [esp + 0x24]
add edx, eax
cmp edx, 0x20
mov eax, 0x20
cmovae edx, eax
jmp 0x4068cb
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x38]
xor eax, 6
xor edi, 0x20
or edi, eax
mov eax, dword [esp + 0x20]
xor eax, ecx
xor ebx, 0x20
or ebx, eax
or ebx, edi
mov ecx, dword [esp + 0x10]
xor ecx, dword [esp + 0x4c]
mov eax, dword [esp + 0x54]
xor eax, 0x20
or eax, ecx
xor esi, dword [esp + 0x2c]
or esi, eax
or esi, ebx
xor edx, 0x20
or edx, esi
mov eax, 0xffffffec
cmove eax, dword [esp + 0x78]
jmp 0x4057dd