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

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x7c
mov esi, dword [esp + 0x94]
cmp esi, 0xa
jb 0x4038e5
mov dword [esp + 0x70], edx
mov edi, dword [esp + 0x90]
movzx ebx, word [edi]
movzx ebp, word [edi + 2]
movzx edx, word [edi + 4]
lea eax, [ebx + ebp]
add eax, 6
add eax, edx
sub esi, eax
jae 0x4038f2
mov eax, 0xffffffec
add esp, 0x7c
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, 0xffffffb8
test bx, bx
je 0x4038ea
mov dword [esp + 0xc], esi
mov esi, dword [esp + 0x98]
mov dword [esp + 0x10], esi
movzx esi, word [esi + 2]
mov dword [esp + 0x14], esi
cmp bx, 4
mov dword [esp + 0x60], ecx
jb 0x403943
movzx esi, byte [edi + ebx + 5]
test esi, esi
je 0x403b18
lea ecx, [ebx + 2]
mov dword [esp + 8], ecx
mov ecx, dword [edi + ecx]
bsr esi, esi
xor esi, 0x1f
add esi, 0xffffffe9
mov dword [esp + 0x18], esi
jmp 0x403996
movzx ecx, byte [edi + 6]
cmp bx, 2
je 0x40395c
cmp bx, 3
jne 0x403965
movzx esi, byte [edi + 8]
shl esi, 0x10
or ecx, esi
movzx esi, byte [edi + 7]
shl esi, 8
add ecx, esi
movzx esi, byte [edi + ebx + 5]
test esi, esi
je 0x4038e5
mov dword [esp], ecx
bsr ecx, esi
xor ecx, 0x1f
lea esi, [ebx*8]
sub ecx, esi
add ecx, 9
mov dword [esp + 0x18], ecx
mov ecx, dword [esp]
mov dword [esp + 8], 6
test bp, bp
je 0x4038ea
lea esi, [edi + ebx]
add esi, 6
cmp bp, 4
mov dword [esp], ecx
jb 0x4039d0
movzx ecx, byte [ebp + esi - 1]
test ecx, ecx
je 0x403b18
lea edi, [ebp - 4]
mov dword [esp + 0x20], edi
mov edi, dword [esi + edi]
bsr ebx, ecx
xor ebx, 0x1f
add ebx, 0xffffffe9
jmp 0x403a18
movzx edi, byte [esi]
cmp bp, 2
je 0x4039e8
cmp bp, 3
jne 0x4039f1
movzx ecx, byte [esi + 2]
shl ecx, 0x10
or edi, ecx
movzx ecx, byte [esi + 1]
shl ecx, 8
add edi, ecx
movzx ecx, byte [ebp + esi - 1]
test ecx, ecx
je 0x4038e5
bsr ebx, ecx
xor ebx, 0x1f
lea ecx, [ebp*8]
sub ebx, ecx
add ebx, 9
mov dword [esp + 0x20], 0
test dx, dx
je 0x4038ea
add ebp, esi
cmp dx, 4
mov dword [esp + 0x30], esi
jb 0x403a62
movzx ecx, byte [edx + ebp - 1]
test ecx, ecx
je 0x403b18
mov dword [esp + 0x4c], ebx
mov ebx, dword [esp + 0x70]
mov esi, edx
add edx, 0xfffffffc
mov dword [esp + 0x3c], ebp
mov dword [esp + 0x1c], edx
mov edx, dword [ebp + edx]
mov dword [esp + 0x54], edx
bsr ecx, ecx
xor ecx, 0x1f
add ecx, 0xffffffe9
jmp 0x403ac3
movzx esi, byte [ebp]
cmp dx, 2
je 0x403a7b
cmp dx, 3
jne 0x403a84
movzx ecx, byte [ebp + 2]
shl ecx, 0x10
or esi, ecx
movzx ecx, byte [ebp + 1]
shl ecx, 8
add esi, ecx
movzx ecx, byte [edx + ebp - 1]
test ecx, ecx
je 0x4038e5
mov dword [esp + 0x4c], ebx
mov dword [esp + 0x54], esi
mov dword [esp + 0x3c], ebp
mov ebx, dword [esp + 0x70]
mov ebp, edi
bsr edi, ecx
xor edi, 0x1f
mov esi, edx
lea ecx, [edx*8]
sub edi, ecx
mov ecx, edi
mov edi, ebp
add ecx, 9
mov dword [esp + 0x1c], 0
mov ebp, dword [esp + 0xc]
test ebp, ebp
je 0x4038ea
mov dword [esp + 4], ecx
mov eax, dword [esp + 0x3c]
add esi, eax
cmp ebp, 4
jb 0x403b22
movzx eax, byte [ebp + esi - 1]
test eax, eax
mov edx, dword [esp + 0x14]
je 0x403b18
cmp ebp, 0xffffff88
ja 0x403f19
mov ecx, ebx
mov dword [esp + 0x28], edi
mov edi, dword [esi + ebp - 4]
mov dword [esp + 0x34], edi
add ebp, 0xfffffffc
mov dword [esp + 0xc], ebp
bsr eax, eax
xor eax, 0x1f
add eax, 0xffffffe9
mov dword [esp + 0x44], eax
jmp 0x403b88
mov eax, 0xffffffff
jmp 0x4038ea
movzx eax, byte [esi]
mov dword [esp + 0x34], eax
cmp ebp, 2
mov ecx, ebx
mov edx, dword [esp + 0x14]
mov dword [esp + 0x28], edi
je 0x403b4c
cmp ebp, 3
jne 0x403b5d
movzx eax, byte [esi + 2]
shl eax, 0x10
mov edi, dword [esp + 0x34]
or edi, eax
jmp 0x403b50
mov edi, dword [esp + 0x34]
movzx eax, byte [esi + 1]
shl eax, 8
add edi, eax
mov dword [esp + 0x34], edi
mov edi, dword [esp + 0xc]
movzx eax, byte [edi + esi - 1]
test eax, eax
je 0x4038e5
bsr eax, eax
xor eax, 0x1f
shl edi, 3
sub eax, edi
add eax, 9
mov dword [esp + 0x44], eax
mov dword [esp + 0xc], 0
mov dword [esp + 0x38], esi
mov eax, dword [esp + 0x60]
lea esi, [eax + ecx]
add esi, 0xfffffffd
add dword [esp + 0x10], 4
lea ebx, [ecx + 3]
shr ebx, 2
lea ebp, [eax + ebx]
lea ecx, [ebx + ebp]
lea edi, [ecx + ebx]
mov dword [esp + 0x74], esi
cmp edi, esi
mov dword [esp + 0x64], edi
mov dword [esp + 0x5c], ecx
mov dword [esp + 0x58], ebp
jae 0x403e74
neg edx
and edx, 0x1f
mov dword [esp + 0x68], edx
mov dword [esp + 0x40], ebx
lea ecx, [ebx + ebx*2]
mov dword [esp + 0x24], ecx
mov edi, 1
mov dword [esp + 0x6c], eax
mov ecx, dword [esp + 8]
jmp 0x403c64
mov eax, edx
shr eax, 3
mov esi, edi
sub esi, eax
and edx, 7
mov dword [esp + 0x44], edx
mov eax, dword [esp + 0x38]
mov eax, dword [eax + esi]
mov dword [esp + 0x34], eax
xor eax, eax
cmp edi, 3
setg al
cmp dword [esp + 0x1c], 3
setg dl
cmp dword [esp + 0x20], 3
setg dh
cmp dword [esp + 8], 9
setg bl
mov edi, dword [esp + 0x78]
and edi, eax
and bl, dh
and bl, dl
movzx eax, bl
and edi, eax
add ecx, 2
xor eax, eax
cmp ecx, dword [esp + 0x74]
setb al
lea ecx, [ebp + 2]
mov dword [esp + 0x6c], ecx
mov dword [esp + 0xc], esi
mov ecx, dword [esp + 0x50]
mov dword [esp + 0x1c], ecx
mov edx, dword [esp + 0x2c]
mov dword [esp + 0x20], edx
mov ebx, dword [esp + 0x48]
mov ecx, ebx
test edi, eax
je 0x403e9a
mov dword [esp + 8], ecx
mov dword [esp + 0x78], edi
mov esi, dword [esp]
mov ecx, dword [esp + 0x18]
shl esi, cl
mov ebx, dword [esp + 0x68]
mov ecx, ebx
shr esi, cl
mov ecx, dword [esp + 0x4c]
mov edx, dword [esp + 0x28]
shl edx, cl
mov ecx, ebx
shr edx, cl
mov ecx, dword [esp + 4]
mov ebp, dword [esp + 0x54]
shl ebp, cl
mov ecx, ebx
shr ebp, cl
mov ecx, dword [esp + 0x44]
mov edi, dword [esp + 0x34]
shl edi, cl
mov ecx, ebx
shr edi, cl
mov dword [esp + 0x2c], edi
mov edi, dword [esp + 0x10]
movzx ecx, byte [edi + esi*2 + 1]
add ecx, dword [esp + 0x18]
mov dword [esp + 0x48], ecx
mov eax, dword [esp]
shl eax, cl
mov ecx, ebx
shr eax, cl
mov dword [esp + 0x18], eax
movzx ecx, byte [edi + esi*2]
mov esi, dword [esp + 0x6c]
mov byte [esi], cl
movzx ecx, byte [edi + edx*2 + 1]
add ecx, dword [esp + 0x4c]
mov ebx, dword [esp + 0x28]
mov dword [esp + 0x4c], ecx
shl ebx, cl
mov eax, dword [esp + 0x68]
mov ecx, eax
shr ebx, cl
movzx ecx, byte [edi + edx*2]
mov edx, dword [esp + 0x40]
mov byte [esi + edx], cl
movzx ecx, byte [edi + ebp*2 + 1]
add ecx, dword [esp + 4]
mov edx, dword [esp + 0x54]
mov dword [esp + 4], ecx
shl edx, cl
mov ecx, eax
shr edx, cl
movzx eax, byte [edi + ebp*2]
mov ecx, dword [esp + 0x40]
mov byte [esi + ecx*2], al
mov ebp, dword [esp + 0x2c]
movzx ecx, byte [edi + ebp*2 + 1]
add ecx, dword [esp + 0x44]
mov eax, dword [esp + 0x34]
mov dword [esp + 0x44], ecx
shl eax, cl
movzx ecx, byte [edi + ebp*2]
mov ebp, dword [esp + 0x24]
mov byte [esi + ebp], cl
mov ecx, dword [esp + 0x18]
movzx ebp, byte [edi + ecx*2 + 1]
add ebp, dword [esp + 0x48]
mov ecx, dword [esp + 0x68]
shr eax, cl
mov ecx, dword [esp + 0x18]
movzx ecx, byte [edi + ecx*2]
mov byte [esi + 1], cl
movzx ecx, byte [edi + ebx*2]
mov byte [esp + 0x18], cl
movzx ecx, byte [edi + ebx*2 + 1]
mov dword [esp + 0x2c], ecx
mov ecx, dword [esp + 0x40]
movzx ebx, byte [esp + 0x18]
mov byte [esi + ecx + 1], bl
movzx ebx, byte [edi + edx*2]
movzx edx, byte [edi + edx*2 + 1]
mov dword [esp + 0x50], edx
mov byte [esi + ecx*2 + 1], bl
mov ebx, dword [esp + 0x24]
movzx edx, byte [edi + eax*2]
movzx eax, byte [edi + eax*2 + 1]
mov dword [esp + 0x6c], eax
mov eax, esi
mov byte [esi + ebx + 1], dl
mov esi, dword [esp + 8]
cmp esi, 0xa
mov edi, esi
jge 0x403db6
mov dword [esp + 0x18], ebp
mov dword [esp + 0x48], edi
jmp 0x403dd5
mov edx, ebp
shr edx, 3
sub edi, edx
and ebp, 7
mov dword [esp + 0x18], ebp
mov dword [esp + 0x48], edi
mov edx, dword [esp + 0x90]
mov edx, dword [edx + edi]
mov dword [esp], edx
mov edi, dword [esp + 0x30]
mov edx, dword [esp + 0x4c]
add edx, dword [esp + 0x2c]
mov ebp, dword [esp + 0x20]
cmp ebp, 4
jge 0x403dfc
mov dword [esp + 0x4c], edx
mov dword [esp + 0x2c], ebp
mov edx, dword [esp + 0x44]
mov edi, dword [esp + 0x28]
jmp 0x403e15
mov esi, edx
shr esi, 3
sub ebp, esi
and edx, 7
mov dword [esp + 0x4c], edx
mov dword [esp + 0x2c], ebp
mov edi, dword [edi + ebp]
mov edx, dword [esp + 0x44]
mov ebp, eax
mov esi, dword [esp + 4]
add esi, dword [esp + 0x50]
mov eax, dword [esp + 0x1c]
cmp eax, 4
mov dword [esp + 0x28], edi
jge 0x403e36
mov dword [esp + 4], esi
mov dword [esp + 0x50], eax
jmp 0x403e55
mov ecx, esi
shr ecx, 3
mov edi, eax
sub edi, ecx
and esi, 7
mov dword [esp + 4], esi
mov ecx, dword [esp + 0x3c]
mov dword [esp + 0x50], edi
mov ecx, dword [ecx + edi]
mov dword [esp + 0x54], ecx
lea ecx, [ebx + ebp]
add edx, dword [esp + 0x6c]
mov edi, dword [esp + 0xc]
cmp edi, 4
jge 0x403be5
mov dword [esp + 0x44], edx
mov esi, edi
jmp 0x403c00
mov ebx, dword [esp + 8]
mov edx, dword [esp + 0x20]
mov esi, dword [esp + 0x1c]
mov dword [esp + 0x50], esi
mov esi, dword [esp + 0xc]
mov dword [esp + 0x24], edi
mov dword [esp + 0x1c], ebp
mov ebp, dword [esp + 0x24]
mov dword [esp + 8], eax
jmp 0x403ec1
add ebp, 2
mov ecx, dword [esp + 0x40]
lea eax, [ecx + ebp]
mov dword [esp + 0x1c], eax
lea ecx, [ecx*2]
add ecx, ebp
mov eax, ebp
mov ebp, dword [esp + 0x24]
mov dword [esp + 8], eax
add ebp, eax
mov edi, dword [esp + 0x64]
mov dword [esp + 0x20], ecx
cmp ecx, edi
mov ecx, dword [esp + 4]
ja 0x4038e5
mov eax, dword [esp + 0x1c]
cmp eax, dword [esp + 0x5c]
ja 0x4038e5
mov eax, 0xffffffec
mov edi, dword [esp + 8]
cmp edi, dword [esp + 0x58]
ja 0x4038ea
mov edi, dword [esp + 0x18]
cmp edi, 0x21
mov dword [esp + 0x24], ebp
mov dword [esp + 0x40], esi
mov dword [esp + 0x2c], edx
jb 0x403f20
mov eax, dword [esp + 0x14]
neg eax
and eax, 0x1f
mov dword [esp + 0xc], eax
jmp 0x4040d7
mov eax, ebp
jmp 0x4038ea
mov esi, dword [esp + 0x58]
lea eax, [esi - 3]
mov dword [esp + 0x68], eax
mov eax, dword [esp + 0x14]
neg eax
and eax, 0x1f
mov dword [esp + 0xc], eax
cmp ebx, 0xa
jge 0x403f6c
cmp ebx, 6
je 0x40400b
mov esi, edi
shr esi, 3
mov ebp, ebx
sub ebx, esi
lea ecx, [ebp - 6]
xor eax, eax
cmp ebx, 6
mov ebx, ebp
setl al
cmovge ecx, esi
lea esi, [ecx*8]
sub edi, esi
mov edx, edi
jmp 0x403f78
mov ecx, edi
shr ecx, 3
and edi, 7
mov edx, edi
xor eax, eax
sub ebx, ecx
mov esi, dword [esp + 0x90]
mov ecx, dword [esi + ebx]
mov edi, dword [esp + 0x68]
cmp dword [esp + 8], edi
mov dword [esp], ecx
jae 0x403ff7
test eax, eax
jne 0x403ff7
mov esi, ecx
mov ebp, ecx
mov eax, edx
mov ecx, eax
shl esi, cl
mov ecx, dword [esp + 0xc]
shr esi, cl
mov edi, dword [esp + 0x10]
movzx edx, byte [edi + esi*2 + 1]
add edx, eax
mov dword [esp + 0x48], ebx
mov ecx, edx
shl ebp, cl
mov ecx, dword [esp + 0xc]
shr ebp, cl
movzx ecx, byte [edi + esi*2]
mov eax, dword [esp + 8]
mov byte [eax], cl
movzx ecx, byte [edi + ebp*2]
movzx edi, byte [edi + ebp*2 + 1]
mov ebx, dword [esp + 0x48]
add edi, edx
mov byte [eax + 1], cl
add eax, 2
mov dword [esp + 8], eax
cmp edi, 0x20
mov ecx, dword [esp + 4]
mov edx, dword [esp + 0x2c]
jbe 0x403f38
jmp 0x4040d7
mov edi, edx
cmp edx, 0x20
mov ecx, dword [esp + 4]
mov edx, dword [esp + 0x2c]
jbe 0x404017
jmp 0x4040d7
mov ebx, 6
mov esi, dword [esp + 0x90]
cmp ebx, 0xa
jge 0x40405b
cmp ebx, 6
je 0x4040d2
mov esi, edi
shr esi, 3
mov eax, ebx
sub eax, esi
lea ecx, [ebx - 6]
mov edx, edi
cmp eax, 6
mov eax, 0
mov edi, dword [esp + 0x10]
setl al
cmovge ecx, esi
lea esi, [ecx*8]
sub edx, esi
mov dword [esp + 0x18], edx
mov esi, dword [esp + 0x90]
jmp 0x40406d
mov ecx, edi
shr ecx, 3
and edi, 7
xor eax, eax
mov dword [esp + 0x18], edi
mov edi, dword [esp + 0x10]
sub ebx, ecx
mov ecx, dword [esi + ebx]
mov edx, dword [esp + 8]
cmp edx, dword [esp + 0x58]
mov edx, dword [esp + 0x2c]
mov dword [esp], ecx
jae 0x4040c2
test eax, eax
jne 0x4040c2
mov eax, ecx
mov ebp, dword [esp + 0x18]
mov ecx, ebp
shl eax, cl
mov ecx, dword [esp + 0xc]
shr eax, cl
movzx ecx, byte [edi + eax*2]
mov dword [esp + 0x10], edi
movzx edi, byte [edi + eax*2 + 1]
add edi, ebp
mov eax, dword [esp + 8]
mov byte [eax], cl
add eax, 1
mov dword [esp + 8], eax
cmp edi, 0x20
mov ecx, dword [esp + 4]
jbe 0x404017
jmp 0x4040d7
mov eax, dword [esp + 8]
cmp eax, dword [esp + 0x58]
mov ecx, dword [esp + 4]
jb 0x4040e9
jmp 0x404127
mov ebx, 6
mov dword [esp + 0x18], edi
mov eax, dword [esp + 8]
cmp eax, dword [esp + 0x58]
mov edi, dword [esp + 0x10]
jae 0x404127
mov ecx, dword [esp + 0x18]
mov edx, edi
mov edi, dword [esp + 0x58]
mov ebp, dword [esp + 8]
mov eax, ecx
mov esi, dword [esp]
shl esi, cl
mov ecx, dword [esp + 0xc]
shr esi, cl
movzx ecx, byte [edx + esi*2 + 1]
add ecx, eax
movzx eax, byte [edx + esi*2]
mov byte [ebp], al
add ebp, 1
cmp edi, ebp
jne 0x4040f7
mov dword [esp + 0x18], ecx
mov ecx, dword [esp + 4]
mov edi, edx
mov edx, dword [esp + 0x2c]
mov dword [esp + 0x48], ebx
mov ebx, dword [esp + 0x4c]
cmp ebx, 0x21
jb 0x404146
mov eax, dword [esp + 0x14]
neg eax
and eax, 0x1f
mov esi, dword [esp + 0x30]
jmp 0x404218
mov eax, dword [esp + 0x5c]
add eax, 0xfffffffd
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x14]
neg eax
and eax, 0x1f
mov dword [esp], eax
cmp edx, 4
jge 0x404191
test edx, edx
mov esi, dword [esp + 0x30]
je 0x404232
lea edi, [esi + edx]
mov eax, ebx
shr eax, 3
sub edi, eax
xor ecx, ecx
cmp edi, esi
setb cl
cmovb eax, edx
lea edi, [eax*8]
sub ebx, edi
mov edi, dword [esp + 0x10]
jmp 0x40419f
mov eax, ebx
shr eax, 3
and ebx, 7
xor ecx, ecx
mov esi, dword [esp + 0x30]
sub edx, eax
mov eax, dword [esi + edx]
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0xc]
cmp dword [esp + 0x1c], eax
jae 0x404223
test ecx, ecx
jne 0x404223
mov ebp, dword [esp + 0x28]
mov edi, ebp
mov ecx, ebx
shl edi, cl
mov ecx, dword [esp]
mov esi, ecx
shr edi, cl
mov eax, dword [esp + 0x10]
movzx eax, byte [eax + edi*2 + 1]
add eax, ebx
mov ebx, ebp
mov ecx, eax
shl ebx, cl
mov ecx, esi
shr ebx, cl
mov ecx, dword [esp + 0x10]
movzx ecx, byte [ecx + edi*2]
mov edi, dword [esp + 0x10]
mov ebp, dword [esp + 0x1c]
mov byte [ebp], cl
movzx ecx, byte [edi + ebx*2]
movzx ebx, byte [edi + ebx*2 + 1]
add ebx, eax
mov byte [ebp + 1], cl
add ebp, 2
mov dword [esp + 0x1c], ebp
cmp ebx, 0x21
mov ecx, dword [esp + 4]
jb 0x40415d
mov esi, dword [esp + 0x30]
mov eax, dword [esp]
add edx, esi
mov dword [esp + 8], edx
jmp 0x4042e1
mov eax, dword [esp + 0x30]
add eax, edx
mov dword [esp + 8], eax
jmp 0x4042d1
xor edx, edx
mov dword [esp + 8], esi
cmp edx, 4
jge 0x40426d
test edx, edx
je 0x4042da
mov eax, ebx
shr eax, 3
mov esi, dword [esp + 8]
sub esi, eax
xor ecx, ecx
mov ebp, dword [esp + 0x30]
cmp esi, ebp
setb cl
cmovb eax, edx
lea esi, [eax*8]
sub ebx, esi
mov dword [esp + 0xc], ebx
jmp 0x40427f
mov eax, ebx
shr eax, 3
and ebx, 7
xor ecx, ecx
mov dword [esp + 0xc], ebx
mov ebp, dword [esp + 0x30]
sub edx, eax
lea eax, [edx + ebp]
mov dword [esp + 8], eax
mov eax, dword [ebp + edx]
mov dword [esp + 0x28], eax
mov ebx, dword [esp + 0x1c]
cmp ebx, dword [esp + 0x5c]
jae 0x40475f
test ecx, ecx
jne 0x40475f
mov eax, dword [esp + 0x28]
mov esi, edx
mov edx, dword [esp + 0xc]
mov ecx, edx
shl eax, cl
mov ecx, dword [esp]
shr eax, cl
mov cl, byte [edi + eax*2]
mov ebp, ebx
movzx ebx, byte [edi + eax*2 + 1]
add ebx, edx
mov edx, esi
mov byte [ebp], cl
add ebp, 1
mov dword [esp + 0x1c], ebp
cmp ebx, 0x20
jbe 0x404238
mov ecx, dword [esp + 4]
mov eax, dword [esp]
mov dword [esp + 0xc], ebx
mov ebx, dword [esp + 0x1c]
cmp ebx, dword [esp + 0x5c]
jae 0x404321
mov ebp, dword [esp + 0x5c]
mov ecx, dword [esp + 0xc]
mov edx, eax
mov eax, ecx
mov esi, dword [esp + 0x28]
shl esi, cl
mov ecx, edx
shr esi, cl
movzx ecx, byte [edi + esi*2 + 1]
add ecx, eax
movzx eax, byte [edi + esi*2]
mov byte [ebx], al
add ebx, 1
cmp ebp, ebx
jne 0x4042f9
mov dword [esp + 0xc], ecx
mov ecx, dword [esp + 4]
cmp ecx, 0x21
jb 0x40433a
mov ebx, dword [esp + 0x14]
mov edx, ebx
neg ebx
and ebx, 0x1f
mov eax, dword [esp + 0x50]
jmp 0x404423
mov eax, dword [esp + 0x64]
add eax, 0xfffffffd
mov dword [esp + 4], eax
mov eax, dword [esp + 0x14]
neg eax
and eax, 0x1f
mov dword [esp], eax
mov ebx, dword [esp + 0x50]
mov dword [esp + 0x10], edi
cmp ebx, 4
jge 0x40438b
test ebx, ebx
mov ebp, dword [esp + 0x3c]
je 0x40460b
lea esi, [ebx + ebp]
mov eax, ecx
shr eax, 3
sub esi, eax
mov edx, ecx
xor ecx, ecx
cmp esi, ebp
setb cl
cmovb eax, ebx
lea esi, [eax*8]
sub edx, esi
jmp 0x40439b
mov eax, ecx
shr eax, 3
and ecx, 7
mov edx, ecx
xor ecx, ecx
mov ebp, dword [esp + 0x3c]
sub ebx, eax
mov edi, dword [ebp + ebx]
mov eax, dword [esp + 4]
cmp dword [esp + 0x20], eax
mov dword [esp + 0x54], edi
jae 0x4045d6
test ecx, ecx
jne 0x4045d6
mov esi, edi
mov ecx, edx
shl esi, cl
mov ebp, ebx
mov ebx, dword [esp]
mov ecx, ebx
shr esi, cl
mov eax, dword [esp + 0x10]
movzx eax, byte [eax + esi*2 + 1]
add eax, edx
mov ecx, eax
shl edi, cl
mov ecx, ebx
mov ebx, ebp
shr edi, cl
mov ecx, dword [esp + 0x10]
movzx ecx, byte [ecx + esi*2]
mov ebp, dword [esp + 0x20]
mov byte [ebp], cl
mov ecx, dword [esp + 0x10]
movzx ecx, byte [ecx + edi*2]
mov esi, dword [esp + 0x10]
movzx edx, byte [esi + edi*2 + 1]
mov edi, dword [esp + 0x10]
add edx, eax
mov byte [ebp + 1], cl
mov ecx, edx
add ebp, 2
mov dword [esp + 0x20], ebp
cmp edx, 0x21
jb 0x404359
mov edx, dword [esp + 0x14]
mov eax, ebx
mov ebx, dword [esp]
add eax, dword [esp + 0x3c]
mov dword [esp + 4], eax
mov ebp, edx
mov esi, dword [esp + 0x20]
mov eax, dword [esp + 0x64]
cmp esi, eax
jae 0x404461
mov ebp, eax
mov eax, ecx
mov edx, dword [esp + 0x54]
shl edx, cl
mov ecx, ebx
shr edx, cl
movzx ecx, byte [edi + edx*2 + 1]
add ecx, eax
movzx eax, byte [edi + edx*2]
mov byte [esi], al
mov eax, ebp
add esi, 1
cmp ebp, esi
jne 0x404439
mov ebp, dword [esp + 0x14]
mov dword [esp + 0x28], ecx
mov eax, dword [esp + 0x70]
add dword [esp + 0x60], eax
neg ebp
and ebp, 0x1f
mov dword [esp + 0x14], ebp
mov ebx, dword [esp + 0x44]
cmp ebx, 0x20
jbe 0x40448c
mov edx, dword [esp + 0x40]
mov ebp, dword [esp + 0x24]
jmp 0x404546
mov edx, dword [esp + 0x40]
mov ebp, dword [esp + 0x24]
cmp edx, 4
jge 0x4044c5
test edx, edx
je 0x4046bb
mov esi, edx
mov edi, dword [esp + 0x38]
add edx, edi
mov eax, ebx
shr eax, 3
sub edx, eax
xor ecx, ecx
cmp edx, edi
setb cl
cmovb eax, esi
lea edx, [eax*8]
sub ebx, edx
jmp 0x4044d5
mov eax, ebx
shr eax, 3
and ebx, 7
xor ecx, ecx
mov esi, edx
mov edi, dword [esp + 0x38]
sub esi, eax
mov eax, dword [edi + esi]
cmp ebp, dword [esp + 0x74]
mov edi, esi
mov dword [esp + 0x34], eax
jae 0x4045f4
test ecx, ecx
jne 0x4045f4
mov edx, eax
mov ecx, ebx
shl edx, cl
mov dword [esp + 0x24], ebp
mov ecx, dword [esp + 0x14]
mov ebp, ecx
shr edx, cl
mov dword [esp + 0x40], edi
mov edi, eax
mov esi, dword [esp + 0x10]
movzx eax, byte [esi + edx*2 + 1]
add eax, ebx
mov ecx, eax
shl edi, cl
mov ecx, ebp
mov ebp, dword [esp + 0x24]
shr edi, cl
movzx ecx, byte [esi + edx*2]
mov byte [ebp], cl
movzx ecx, byte [esi + edi*2]
movzx ebx, byte [esi + edi*2 + 1]
mov edx, dword [esp + 0x40]
add ebx, eax
mov byte [ebp + 1], cl
add ebp, 2
cmp ebx, 0x21
jb 0x404494
add edx, dword [esp + 0x38]
mov dword [esp], edx
mov eax, ebx
cmp ebp, dword [esp + 0x60]
jae 0x404583
mov edi, dword [esp + 0x10]
mov ebx, ebp
mov esi, dword [esp + 0x34]
mov edx, eax
mov ebp, esi
mov ecx, edx
shl ebp, cl
mov ecx, dword [esp + 0x14]
shr ebp, cl
movzx eax, byte [edi + ebp*2 + 1]
add eax, edx
movzx ecx, byte [edi + ebp*2]
mov byte [ebx], cl
add ebx, 1
cmp dword [esp + 0x60], ebx
jne 0x40455f
mov ecx, dword [esp + 0x48]
xor ecx, 6
mov edx, dword [esp + 0x18]
xor edx, 0x20
or edx, ecx
mov ecx, dword [esp + 8]
xor ecx, dword [esp + 0x30]
mov esi, dword [esp + 0xc]
xor esi, 0x20
or esi, ecx
or esi, edx
mov ecx, dword [esp + 4]
xor ecx, dword [esp + 0x3c]
mov edx, dword [esp + 0x28]
xor edx, 0x20
or edx, ecx
or edx, esi
mov ecx, dword [esp]
xor ecx, dword [esp + 0x38]
xor eax, 0x20
or eax, edx
or eax, ecx
mov eax, 0xffffffec
cmove eax, dword [esp + 0x70]
jmp 0x4038ea
lea eax, [ebx + ebp]
mov dword [esp + 4], eax
mov ecx, edx
cmp edx, 0x20
mov edi, dword [esp + 0x10]
jbe 0x404611
mov ebp, dword [esp + 0x14]
mov ebx, dword [esp]
jmp 0x40442d
mov eax, dword [esp + 0x38]
add eax, edi
mov dword [esp], eax
cmp ebx, 0x20
jbe 0x4046c4
jmp 0x40454d
xor ebx, ebx
mov dword [esp + 4], ebp
cmp ebx, 4
jge 0x40464b
test ebx, ebx
je 0x4046af
mov eax, ecx
shr eax, 3
mov edx, dword [esp + 4]
sub edx, eax
mov esi, ecx
mov ecx, dword [esp + 0x3c]
cmp edx, ecx
mov edx, 0
setb dl
mov ebp, edx
cmovb eax, ebx
lea edx, [eax*8]
sub esi, edx
mov edx, esi
jmp 0x40465b
mov eax, ecx
shr eax, 3
and ecx, 7
mov edx, ecx
xor ebp, ebp
mov ecx, dword [esp + 0x3c]
sub ebx, eax
lea eax, [ecx + ebx]
mov dword [esp + 4], eax
mov ecx, dword [ecx + ebx]
mov eax, dword [esp + 0x64]
cmp dword [esp + 0x20], eax
mov dword [esp + 0x54], ecx
jae 0x404775
test ebp, ebp
jne 0x404775
mov eax, ecx
mov ecx, edx
shl eax, cl
mov ecx, dword [esp]
shr eax, cl
movzx ecx, byte [edi + eax*2]
movzx eax, byte [edi + eax*2 + 1]
add eax, edx
mov esi, dword [esp + 0x20]
mov byte [esi], cl
mov ecx, eax
add esi, 1
mov dword [esp + 0x20], esi
cmp eax, 0x20
jbe 0x404611
mov ebx, dword [esp]
mov ebp, dword [esp + 0x14]
jmp 0x40442d
xor edi, edi
mov eax, dword [esp + 0x38]
mov dword [esp], eax
mov esi, dword [esp + 0x10]
cmp edi, 4
mov dword [esp + 0x24], ebp
jge 0x4046fe
test edi, edi
je 0x40454d
mov ecx, ebx
shr ecx, 3
mov eax, dword [esp]
sub eax, ecx
xor edx, edx
mov ebp, dword [esp + 0x38]
cmp eax, ebp
setb dl
cmovb ecx, edi
lea eax, [ecx*8]
sub ebx, eax
mov eax, ebx
jmp 0x40470e
mov ecx, ebx
shr ecx, 3
and ebx, 7
xor edx, edx
mov eax, ebx
mov ebp, dword [esp + 0x38]
sub edi, ecx
lea ecx, [edi + ebp]
mov dword [esp], ecx
mov ecx, dword [ebp + edi]
mov ebp, dword [esp + 0x24]
cmp ebp, dword [esp + 0x60]
mov dword [esp + 0x34], ecx
jae 0x40454f
test edx, edx
jne 0x40454f
mov edx, ecx
mov ecx, eax
shl edx, cl
mov ecx, dword [esp + 0x14]
shr edx, cl
movzx ecx, byte [esi + edx*2]
movzx ebx, byte [esi + edx*2 + 1]
add ebx, eax
mov byte [ebp], cl
add ebp, 1
cmp ebx, 0x20
jbe 0x4046c8
jmp 0x40454d
cmp ebx, dword [esp + 0x5c]
mov ecx, dword [esp + 4]
mov eax, dword [esp]
jb 0x4042ef
jmp 0x404321
mov esi, dword [esp + 0x20]
mov eax, dword [esp + 0x64]
cmp esi, eax
mov ecx, edx
mov ebx, dword [esp]
mov ebp, dword [esp + 0x14]
jb 0x404439
jmp 0x404461