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

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x98
mov eax, ecx
mov ecx, dword [esp + 0xb4]
movzx ecx, byte [ecx + 8]
mov edi, 1
shl edi, cl
mov ebx, edx
cmp eax, 8
lea esi, [edx + eax - 7]
mov ebp, edx
cmovae ebp, esi
mov ecx, dword [esp + 0xb4]
cmp dword [ecx + 4], 9
mov edx, 0x40
mov ecx, 0x200
cmovl ecx, edx
lea edx, [ebx + eax]
mov eax, dword [esp + 0xc0]
mov eax, dword [eax]
mov dword [esp + 0x18], eax
lea eax, [ebx + 8]
cmp eax, edx
mov eax, edx
jae 0x581679
mov dword [esp + 0x8c], ebp
mov dword [esp + 0x5c], esi
mov edx, dword [esp + 0xac]
add edi, 0xfffffff0
mov esi, dword [esp + 0xb4]
mov esi, dword [esi + 0x10]
mov dword [esp + 0x50], esi
movdqa xmm0, xmmword [0x8bb6a0]
movdqa xmm1, xmmword [0x8bb6b0]
mov ebp, 0xbd000000
lea esi, [ecx + ebx]
mov dword [esp + 0x34], esi
mov dword [esp + 0x60], ecx
lea ecx, [ecx*4]
mov dword [esp + 0x88], ecx
lea ecx, [edx + eax - 1]
mov dword [esp + 0x70], ecx
mov ecx, dword [esp + 0xc4]
mov dword [esp + 0x44], ecx
mov edx, ebx
mov dword [esp + 0x54], edi
mov dword [esp + 0x68], eax
jmp 0x5805fc
mov ebp, 0xbd000000
lea eax, [ebx + 8]
mov edx, ebx
mov ecx, dword [esp + 0x68]
cmp eax, ecx
mov eax, ecx
mov edi, dword [esp + 0x54]
jae 0x581684
mov dword [esp + 4], edx
sub eax, edx
mov dword [esp + 0x2c], eax
cmp edx, edi
mov eax, edi
cmovb eax, edx
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x50]
add eax, edx
cmp eax, edi
cmovae eax, edi
mov dword [esp + 0x24], eax
mov edi, edx
mov ebx, dword [esp + 0xb0]
and edi, ebx
mov esi, dword [esp + 0xac]
mov ecx, dword [esi + edi]
mov eax, ecx
mul ebp
mov eax, 0xbd1e35a7
imul ecx, eax
add edx, ecx
mov eax, dword [esi + edi + 4]
mov ecx, esi
imul eax, ebp
add eax, edx
shr eax, 0xf
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0xbc]
mov esi, dword [eax]
mov eax, dword [esp + 4]
mov ebp, eax
sub ebp, esi
movzx edx, byte [ecx + edi]
mov byte [esp], dl
mov dword [esp + 0x40], edi
lea edx, [ecx + edi]
mov dword [esp + 0x14], 0x424
xor ecx, ecx
cmp ebp, eax
mov dword [esp + 0x1c], edx
jae 0x580760
mov dword [esp + 0x10], esi
and ebp, ebx
mov esi, dword [esp + 0xac]
movzx eax, byte [esp]
cmp al, byte [esi + ebp]
jne 0x580760
add ebp, dword [esp + 0xac]
mov eax, dword [esp + 0x2c]
lea edi, [edx + eax]
add eax, edx
add eax, 0xfffffffc
mov dword [esp + 8], eax
xor esi, esi
cmp eax, edx
jae 0x5806d0
mov eax, edx
cmp eax, edi
jb 0x5806ef
jmp 0x580717
mov eax, dword [edx + esi]
cmp eax, dword [ebp + esi]
jne 0x5806e8
lea eax, [edx + esi]
add eax, 4
add esi, 4
cmp eax, dword [esp + 8]
jbe 0x5806d0
lea eax, [edx + esi]
cmp eax, edi
jae 0x580717
sub edi, eax
lea edx, [edi + esi]
nop word cs:[eax + eax]
movzx ebx, byte [ebp + esi]
cmp bl, byte [eax]
jne 0x580710
inc eax
inc esi
dec edi
jne 0x580700
mov esi, edx
mov ebx, dword [esp + 0xb0]
xor edx, edx
cmp esi, 4
mov ebp, dword [esp + 0xc]
jb 0x5809bb
imul eax, esi, 0x87
add eax, 0x3cf
mov edi, 0
cmp eax, 0x425
jb 0x580768
mov edx, dword [esp + 0x40]
lea edi, [esi + edx]
mov edx, dword [esp + 0xac]
movzx edx, byte [edx + edi]
mov byte [esp], dl
mov edx, esi
mov edi, dword [esp + 0x10]
mov dword [esp + 0x14], eax
jmp 0x580768
xor edx, edx
xor edi, edi
mov ebp, dword [esp + 0xc]
mov dword [esp + 0x4c], edi
mov eax, dword [esp + 0xb4]
mov eax, dword [eax + 0x44]
mov dword [esp + 0x58], eax
mov eax, dword [esp + 0xb8]
mov eax, dword [eax + 0x2c]
mov dword [esp + 8], eax
mov dword [esp + 0x78], ebp
movd xmm2, ebp
pshufd xmm2, xmm2, 0x50
paddd xmm2, xmm0
pand xmm2, xmm1
movq qword [esp + 0x7c], xmm2
add ebp, 0x18
and ebp, 0x1ffff
mov dword [esp + 0x84], ebp
movzx eax, byte [esp]
mov dword [esp], eax
mov eax, dword [esp + 4]
shr eax, 1
and eax, 0xc
mov eax, dword [esp + eax + 0x78]
mov dword [esp + 0x38], eax
mov eax, dword [esp + 0x2c]
mov esi, dword [esp + 0x1c]
lea edi, [esi + eax]
mov dword [esp + 0x10], edi
lea edi, [esi + eax]
add edi, 0xfffffffc
jmp 0x5807fe
mov edx, dword [esp + 0x20]
inc ecx
cmp ecx, 4
je 0x5808f0
mov eax, dword [esp + ecx*4 + 0x78]
mov esi, dword [esp + 8]
mov eax, dword [esi + eax*4]
mov ebp, eax
and ebp, ebx
mov dword [esp + 0x20], edx
lea esi, [edx + ebp]
mov edx, dword [esp + 0xac]
movzx esi, byte [edx + esi]
cmp dword [esp], esi
jne 0x5807f0
mov edx, dword [esp + 4]
cmp edx, eax
je 0x5807f0
sub edx, eax
cmp edx, dword [esp + 0x28]
ja 0x5807f0
mov dword [esp + 0xc], edx
add ebp, dword [esp + 0xac]
mov edx, dword [esp + 0x1c]
xor esi, esi
cmp edi, edx
jae 0x580850
mov eax, edx
jmp 0x580869
mov eax, dword [edx + esi]
cmp eax, dword [ebp + esi]
jne 0x580866
lea eax, [edx + esi]
add eax, 4
add esi, 4
cmp eax, edi
jbe 0x580850
lea eax, [edx + esi]
mov edx, dword [esp + 0x10]
cmp eax, edx
jae 0x580899
mov ebx, edx
sub ebx, eax
lea edx, [ebx + esi]
mov dword [esp + 0x30], edx
nop dword [eax]
movzx edx, byte [ebp + esi]
cmp dl, byte [eax]
jne 0x580892
inc eax
inc esi
dec ebx
jne 0x580880
mov esi, dword [esp + 0x30]
mov ebx, dword [esp + 0xb0]
cmp esi, 4
jb 0x5807f0
imul eax, esi, 0x87
mov ebp, dword [esp + 0xc]
bsr edx, ebp
imul edx, edx, 0xffffffe2
add eax, edx
add eax, 0x3c0
cmp dword [esp + 0x14], eax
mov edx, dword [esp + 0x20]
jae 0x5807f4
mov edx, dword [esp + 0x40]
add edx, esi
mov ebp, dword [esp + 0xac]
movzx edx, byte [ebp + edx]
mov dword [esp], edx
mov edx, esi
mov esi, dword [esp + 0xc]
mov dword [esp + 0x4c], esi
mov dword [esp + 0x14], eax
jmp 0x5807f4
xor ebx, ebx
mov esi, dword [esp + 0x14]
cmp esi, 0x424
mov dword [esp + 0x20], edx
jne 0x58091b
mov eax, dword [esp + 0xb8]
mov edi, dword [eax + 0x28]
mov ecx, dword [edi + 4]
mov ebp, dword [edi + 8]
mov eax, ecx
shr eax, 7
cmp ebp, eax
jae 0x580930
mov edx, dword [esp + 4]
jmp 0x580a92
mov eax, dword [esp + 0x1c]
imul eax, dword [eax], 0x1e35a7bd
shr eax, 0x12
inc ecx
mov dword [edi + 4], ecx
mov ecx, dword [esp + 0xb4]
mov ecx, dword [ecx + 0x64]
movzx ebx, byte [ecx + eax*2]
test ebx, ebx
mov edx, dword [esp + 4]
je 0x580a90
cmp dword [esp + 0x2c], ebx
jb 0x580a90
mov dword [esp + 0x28], ebp
add eax, eax
mov edx, dword [esp + 0xb4]
mov ecx, dword [edx + 0x60]
movzx ecx, word [ecx + eax*2]
mov eax, dword [edx + 0x48]
mov dword [esp], ecx
imul ecx, ebx
add ecx, dword [eax + ebx*4 + 0x20]
mov dword [esp + 0xc], eax
add ecx, dword [eax + 0xa4]
lea eax, [ecx + ebx]
lea esi, [ebx + ecx]
add esi, 0xfffffffc
xor ebp, ebp
cmp esi, ecx
jae 0x5809c2
mov edx, dword [esp + 4]
mov esi, dword [esp + 0x14]
cmp ecx, eax
jb 0x5809fb
mov ecx, dword [esp + 0xb4]
test ebp, ebp
jne 0x580a26
jmp 0x580a90
xor edi, edi
jmp 0x580768
mov dword [esp + 0x10], ebx
xor ebp, ebp
nop dword [eax + eax]
mov edx, dword [ecx + ebp]
mov ebx, dword [esp + 0x1c]
cmp edx, dword [ebx + ebp]
jne 0x5809e9
lea edx, [ecx + ebp]
add edx, 4
add ebp, 4
cmp edx, esi
jbe 0x5809d0
add ecx, ebp
mov edx, dword [esp + 4]
mov esi, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
cmp ecx, eax
jae 0x5809ab
sub eax, ecx
lea esi, [eax + ebp]
mov edx, dword [esp + 0x1c]
movzx edx, byte [edx + ebp]
cmp dl, byte [ecx]
jne 0x580a13
inc ecx
inc ebp
dec eax
jne 0x580a00
mov ebp, esi
mov ecx, dword [esp + 0xb4]
mov edx, dword [esp + 4]
mov esi, dword [esp + 0x14]
test ebp, ebp
je 0x580a90
mov eax, dword [ecx + 0x50]
add eax, ebp
cmp eax, ebx
jbe 0x580a90
mov esi, ebx
sub esi, ebp
mov eax, dword [ecx + 0x58]
mov dword [esp + 0x1c], eax
lea eax, [esi + esi]
lea eax, [eax + eax*2]
mov edx, dword [ecx + 0x5c]
mov ecx, eax
shrd dword [esp + 0x1c], edx, cl
and cl, 0x1e
shr edx, cl
mov ecx, dword [esp + 0xc]
movzx ecx, byte [ecx + ebx]
mov ebx, dword [esp + 0x24]
inc ebx
test al, 0x20
cmove edx, dword [esp + 0x1c]
and edx, 0x3f
mov dword [esp + 0xc], esi
lea eax, [edx + esi*4]
shl eax, cl
add ebx, dword [esp]
add ebx, eax
cmp ebx, dword [esp + 0x58]
jbe 0x581602
mov edx, dword [esp + 4]
mov esi, dword [esp + 0x14]
xor ebx, ebx
jmp 0x580a92
xor ebx, ebx
mov eax, dword [esp + 8]
mov ecx, dword [esp + 0x38]
mov dword [eax + ecx*4], edx
cmp esi, 0x425
jb 0x581060
mov dword [esp + 0x64], ebx
mov dword [esp + 0x14], esi
mov eax, dword [esp + 0xb8]
mov eax, dword [eax + 0x2c]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0xbc]
mov eax, dword [eax]
mov dword [esp + 0x6c], eax
mov dword [esp + 0x74], 0
mov eax, dword [esp + 0xb4]
mov esi, dword [esp + 0xac]
mov ebp, dword [esp + 0x20]
nop word cs:[eax + eax]
mov ecx, dword [esp + 0x2c]
dec ecx
mov dword [esp + 0x20], ebp
lea ebx, [ebp - 1]
cmp ebx, ecx
mov dword [esp + 0x2c], ecx
cmovae ebx, ecx
cmp dword [eax + 4], 5
mov eax, 0
cmovge ebx, eax
lea edi, [edx + 1]
mov eax, dword [esp + 0x54]
cmp edi, eax
mov ecx, eax
cmovb ecx, edi
mov dword [esp + 0x40], ecx
mov ecx, dword [esp + 0x50]
mov dword [esp + 4], edx
add ecx, edx
inc ecx
cmp ecx, eax
cmovae ecx, eax
mov dword [esp + 0x48], ecx
mov ebp, edi
mov eax, dword [esp + 0xb0]
and ebp, eax
mov eax, dword [esi + ebp]
mov ecx, eax
mov edx, 0xbd1e35a7
imul ecx, edx
mov edx, 0xbd000000
mul edx
mov eax, 0xbd000000
add edx, ecx
mov ecx, dword [esi + ebp + 4]
imul ecx, eax
add ecx, edx
lea eax, [ebx + ebp]
movzx eax, byte [esi + eax]
mov byte [esp], al
shr ecx, 0xf
mov edx, edi
sub edx, dword [esp + 0x6c]
mov dword [esp + 0x34], ebp
lea eax, [esi + ebp]
mov dword [esp + 0x10], eax
mov dword [esp + 0x24], 0x424
mov dword [esp + 0x30], edi
cmp edx, edi
mov dword [esp + 8], ebx
jae 0x580c70
and edx, dword [esp + 0xb0]
lea eax, [edx + ebx]
movzx ebx, byte [esp]
cmp bl, byte [esi + eax]
jne 0x580c70
add edx, esi
mov eax, dword [esp + 0x2c]
mov ebp, dword [esp + 0x10]
lea edi, [eax + ebp]
add eax, ebp
add eax, 0xfffffffc
xor esi, esi
cmp eax, ebp
jb 0x580be8
nop dword [eax + eax]
mov ebx, dword [ebp + esi]
cmp ebx, dword [edx + esi]
jne 0x580be6
lea ebx, [esi + ebp]
add ebx, 4
add esi, 4
cmp ebx, eax
jbe 0x580bd0
add ebp, esi
cmp ebp, edi
jae 0x580c26
sub edi, ebp
add edi, esi
mov dword [esp + 0xc], edi
mov eax, dword [esp + 0x70]
mov edi, dword [esp + 0x34]
lea ebx, [eax + edi]
sub ebx, ebp
nop word cs:[eax + eax]
movzx eax, byte [edx + esi]
cmp al, byte [ebp]
jne 0x580c26
inc ebp
inc esi
dec ebx
cmp dword [esp + 4], ebx
jne 0x580c10
mov esi, dword [esp + 0xc]
mov edi, dword [esp + 0xac]
movzx edx, byte [esp]
xor ebx, ebx
cmp esi, 4
jb 0x580c78
imul eax, esi, 0x87
add eax, 0x3cf
cmp eax, 0x425
jb 0x580c78
mov edx, dword [esp + 0x34]
add edx, esi
movzx edx, byte [edi + edx]
mov dword [esp + 8], esi
mov ebx, dword [esp + 0x6c]
mov dword [esp + 0x24], eax
jmp 0x580c78
xor ebx, ebx
mov edi, esi
movzx edx, byte [esp]
mov dword [esp + 0x3c], ebx
mov eax, dword [esp + 0xb4]
mov eax, dword [eax + 0x44]
mov dword [esp + 0x90], eax
mov dword [esp + 0x78], ecx
movd xmm2, ecx
pshufd xmm2, xmm2, 0x50
paddd xmm2, xmm0
pand xmm2, xmm1
movq qword [esp + 0x7c], xmm2
add ecx, 0x18
and ecx, 0x1ffff
mov dword [esp + 0x84], ecx
movzx eax, dl
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x30]
shr eax, 1
and eax, 0xc
mov eax, dword [esp + eax + 0x78]
mov dword [esp + 0x94], eax
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp + 0x10]
lea edx, [ecx + eax]
mov dword [esp + 0x38], edx
lea eax, [ecx + eax - 4]
mov dword [esp], eax
mov eax, dword [esp + 0x70]
mov ecx, dword [esp + 0x34]
add eax, ecx
mov dword [esp + 0x58], eax
xor ebp, ebp
mov ecx, dword [esp + 8]
mov ebx, dword [esp + 0xb0]
jmp 0x580d1e
mov ecx, dword [esp + 8]
inc ebp
cmp ebp, 4
je 0x580e10
mov eax, dword [esp + ebp*4 + 0x78]
mov edx, dword [esp + 0x1c]
mov eax, dword [edx + eax*4]
mov edx, eax
and edx, ebx
mov dword [esp + 8], ecx
add ecx, edx
movzx ecx, byte [edi + ecx]
cmp dword [esp + 0xc], ecx
jne 0x580d10
mov ecx, dword [esp + 0x30]
cmp ecx, eax
je 0x580d10
sub ecx, eax
mov dword [esp + 0x28], ecx
cmp ecx, dword [esp + 0x40]
ja 0x580d10
add edx, edi
mov ecx, dword [esp + 0x10]
cmp dword [esp], ecx
jae 0x580d60
xor esi, esi
jmp 0x580d88
xor esi, esi
nop word cs:[eax + eax]
mov eax, dword [ecx + esi]
cmp eax, dword [edx + esi]
jne 0x580d86
lea eax, [ecx + esi]
add eax, 4
add esi, 4
cmp eax, dword [esp]
jbe 0x580d70
add ecx, esi
mov eax, dword [esp + 0x38]
cmp ecx, eax
jae 0x580dc1
mov edi, eax
sub edi, ecx
add edi, esi
mov eax, dword [esp + 0x58]
sub eax, ecx
nop dword [eax]
movzx ebx, byte [edx + esi]
cmp bl, byte [ecx]
jne 0x580db3
inc ecx
inc esi
dec eax
cmp dword [esp + 4], eax
jne 0x580da0
mov esi, edi
mov ebx, dword [esp + 0xb0]
mov edi, dword [esp + 0xac]
mov edx, dword [esp + 0x28]
cmp esi, 4
jb 0x580d10
imul eax, esi, 0x87
bsr ecx, edx
imul ecx, ecx, 0xffffffe2
add eax, ecx
add eax, 0x3c0
cmp dword [esp + 0x24], eax
mov ecx, dword [esp + 8]
jae 0x580d14
mov ecx, dword [esp + 0x34]
add ecx, esi
movzx ecx, byte [edi + ecx]
mov dword [esp + 0xc], ecx
mov ecx, esi
mov dword [esp + 0x3c], edx
mov dword [esp + 0x24], eax
jmp 0x580d14
mov dword [esp + 8], ecx
cmp dword [esp + 0x24], 0x424
jne 0x580e70
mov eax, dword [esp + 0xb8]
mov edx, dword [eax + 0x28]
mov ecx, dword [edx + 4]
mov ebp, dword [edx + 8]
mov eax, ecx
shr eax, 7
cmp ebp, eax
jb 0x580e70
mov eax, dword [esp + 0x10]
imul eax, dword [eax], 0x1e35a7bd
shr eax, 0x12
inc ecx
mov dword [edx + 4], ecx
mov ecx, dword [esp + 0xb4]
mov ecx, dword [ecx + 0x64]
movzx edi, byte [ecx + eax*2]
test edi, edi
je 0x580e70
cmp dword [esp + 0x2c], edi
jae 0x580ef5
nop word cs:[eax + eax]
mov dword [esp], 0
mov ecx, dword [esp + 0x30]
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0x94]
mov dword [eax + edx*4], ecx
mov eax, dword [esp + 0x14]
add eax, 0xaf
cmp dword [esp + 0x24], eax
jb 0x581110
inc dword [esp + 0x18]
mov edx, dword [esp + 0x74]
cmp edx, 2
ja 0x5811d8
mov eax, dword [esp + 4]
add eax, 9
inc edx
mov dword [esp + 0x74], edx
mov ebx, dword [esp + 8]
mov ebp, ebx
mov edx, dword [esp + 0x3c]
mov dword [esp + 0x4c], edx
mov esi, dword [esp + 0x24]
mov dword [esp + 0x14], esi
mov edi, dword [esp]
mov dword [esp + 0x64], edi
cmp eax, dword [esp + 0x68]
mov edx, ecx
mov eax, dword [esp + 0xb4]
mov esi, dword [esp + 0xac]
jb 0x580af0
jmp 0x5811df
add eax, eax
mov esi, dword [esp + 0xb4]
mov ecx, dword [esi + 0x60]
movzx eax, word [ecx + eax*2]
mov ecx, dword [esi + 0x48]
mov dword [esp + 0x28], eax
mov esi, eax
imul esi, edi
add esi, dword [ecx + edi*4 + 0x20]
mov dword [esp + 0x40], ecx
add esi, dword [ecx + 0xa4]
lea ebx, [esi + edi]
mov dword [esp + 0xc], edi
lea eax, [edi + esi]
add eax, 0xfffffffc
xor edi, edi
cmp eax, esi
jae 0x580f43
mov eax, dword [esp + 0xb4]
mov ecx, dword [esp + 0x10]
cmp esi, ebx
jb 0x580f8b
jmp 0x580faa
mov dword [esp], ebp
xor edi, edi
nop dword [eax + eax]
mov ecx, dword [esi + edi]
mov ebp, dword [esp + 0x10]
cmp ecx, dword [ebp + edi]
jne 0x580f79
lea ecx, [esi + edi]
add ecx, 4
add edi, 4
cmp ecx, eax
jbe 0x580f50
add esi, edi
mov eax, dword [esp + 0xb4]
mov ecx, dword [esp + 0x10]
jmp 0x580f84
mov ecx, ebp
add esi, edi
mov eax, dword [esp + 0xb4]
mov ebp, dword [esp]
cmp esi, ebx
jae 0x580faa
sub ebx, esi
lea eax, [ebx + edi]
movzx ecx, byte [ecx + edi]
cmp cl, byte [esi]
jne 0x580fa3
inc esi
inc edi
dec ebx
mov ecx, dword [esp + 0x10]
jne 0x580f90
mov edi, eax
mov eax, dword [esp + 0xb4]
mov dword [esp], 0
test edi, edi
je 0x580e77
mov ebx, eax
mov eax, dword [eax + 0x50]
add eax, edi
mov ecx, dword [esp + 0xc]
cmp eax, ecx
jbe 0x580e77
mov esi, ecx
sub esi, edi
mov eax, dword [ebx + 0x58]
lea ecx, [esi + esi]
lea ecx, [ecx + ecx*2]
mov dword [esp + 0x38], ecx
mov ebx, dword [ebx + 0x5c]
shrd eax, ebx, cl
mov dword [esp + 0x10], eax
mov ecx, dword [esp + 0x40]
mov eax, dword [esp + 0xc]
mov ch, byte [ecx + eax]
mov eax, dword [esp + 0x38]
mov cl, al
and cl, 0x1e
shr ebx, cl
test al, 0x20
cmove ebx, dword [esp + 0x10]
mov eax, esi
and ebx, 0x3f
lea esi, [ebx + esi*4]
mov cl, ch
shl esi, cl
mov ecx, dword [esp + 0x48]
inc ecx
add ecx, dword [esp + 0x28]
add ecx, esi
cmp ecx, dword [esp + 0x90]
ja 0x580e77
imul esi, edi, 0x87
bsr ebx, ecx
imul ebx, ebx, 0xffffffe2
add esi, ebx
add esi, 0x3c0
cmp esi, 0x424
jb 0x580e77
inc ebp
mov dword [edx + 8], ebp
mov dword [esp + 8], edi
mov dword [esp + 0x3c], ecx
mov dword [esp + 0x24], esi
mov dword [esp], eax
jmp 0x580e77
inc dword [esp + 0x18]
lea ebx, [edx + 1]
mov ecx, dword [esp + 0x34]
cmp ebx, ecx
jbe 0x5805e0
mov eax, dword [esp + 0x88]
add eax, ecx
cmp ebx, eax
jbe 0x58113d
add edx, 0x11
mov eax, dword [esp + 0x5c]
cmp edx, eax
cmovae edx, eax
cmp ebx, edx
jae 0x5805e0
mov eax, dword [esp + 0xb8]
mov eax, dword [eax + 0x2c]
mov dword [esp], eax
mov edi, ebx
mov dword [esp + 4], edx
mov esi, dword [esp + 0x18]
nop
mov ebp, edi
and ebp, dword [esp + 0xb0]
mov eax, dword [esp + 0xac]
mov ecx, dword [eax + ebp]
mov eax, ecx
mov ebx, 0xbd000000
mul ebx
mov eax, 0xbd1e35a7
imul ecx, eax
add edx, ecx
mov eax, dword [esp + 0xac]
mov eax, dword [eax + ebp + 4]
imul eax, ebx
add eax, edx
shr eax, 0xf
mov ecx, edi
and ecx, 0x18
add ecx, eax
and ecx, 0x1ffff
mov eax, dword [esp]
mov dword [eax + ecx*4], edi
add esi, 4
add edi, 4
cmp edi, dword [esp + 4]
jb 0x5810b0
jmp 0x5811c8
mov eax, dword [esp + 0x50]
mov ecx, dword [esp + 4]
lea edx, [ecx + eax]
mov eax, dword [esp + 0x54]
cmp edx, eax
cmovae edx, eax
mov dword [esp + 0x48], edx
mov ebx, dword [esp + 0x20]
mov eax, dword [esp + 0x4c]
mov dword [esp + 0x3c], eax
mov edi, dword [esp + 0x64]
jmp 0x5811df
add edx, 9
mov eax, dword [esp + 0x5c]
cmp edx, eax
cmovae edx, eax
cmp ebx, edx
jae 0x5805e0
mov eax, dword [esp + 0xb8]
mov eax, dword [eax + 0x2c]
mov dword [esp], eax
mov edi, ebx
mov dword [esp + 4], edx
mov esi, dword [esp + 0x18]
nop dword [eax + eax]
mov ebp, edi
and ebp, dword [esp + 0xb0]
mov eax, dword [esp + 0xac]
mov ecx, dword [eax + ebp]
mov eax, ecx
mov ebx, 0xbd000000
mul ebx
mov eax, 0xbd1e35a7
imul ecx, eax
add edx, ecx
mov eax, dword [esp + 0xac]
mov eax, dword [eax + ebp + 4]
imul eax, ebx
add eax, edx
shr eax, 0xf
mov ecx, edi
and ecx, 0x18
add ecx, eax
and ecx, 0x1ffff
mov eax, dword [esp]
mov dword [eax + ecx*4], edi
add esi, 2
add edi, 2
cmp edi, dword [esp + 4]
jb 0x581170
mov dword [esp + 0x18], esi
mov ebp, 0xbd000000
mov ebx, edi
jmp 0x5805e5
mov ebx, dword [esp + 8]
mov edi, dword [esp]
mov dword [esp], edi
mov dword [esp + 8], ebx
mov dword [esp + 0x30], ecx
mov ebp, dword [esp + 0x3c]
cmp ebp, dword [esp + 0x48]
mov ebx, dword [esp + 0x44]
jbe 0x581230
lea esi, [ebp + 0xf]
cmp ebp, dword [esp + 0x48]
ja 0x58121d
test esi, esi
je 0x58121d
mov ecx, dword [esp + 0xbc]
mov eax, dword [ecx + 8]
mov dword [ecx + 0xc], eax
movq xmm2, qword [ecx]
movq qword [ecx + 4], xmm2
mov dword [ecx], ebp
mov ecx, dword [esp]
jmp 0x581246
mov eax, dword [esp + 0xbc]
mov eax, dword [eax]
xor esi, esi
cmp eax, ebp
mov ecx, dword [esp]
jne 0x58132d
mov eax, dword [esp + 0x18]
mov dword [ebx], eax
mov eax, ecx
shl eax, 0x19
or eax, dword [esp + 8]
mov dword [ebx + 4], eax
mov ecx, dword [esp + 0xb4]
mov eax, dword [ecx + 0x38]
lea edi, [eax + 0x10]
cmp edi, esi
jbe 0x581280
mov word [ebx + 0xe], si
xor eax, eax
jmp 0x5812ea
mov ebx, dword [ecx + 0x34]
mov ecx, ebx
mov dword [esp + 4], ebx
add cl, 2
mov edx, 1
shl edx, cl
sub esi, eax
lea eax, [esi + edx]
add eax, 0xfffffff0
bsr edx, eax
mov esi, 0xffffffff
mov ecx, ebx
shl esi, cl
xor edx, 0xffffffe0
add edx, 0x1f
not esi
and esi, eax
xor ebx, ebx
bt eax, edx
setb bl
lea ebp, [ebx + 2]
mov ecx, edx
shl ebp, cl
add esi, edi
mov ecx, dword [esp + 4]
sub edx, ecx
lea edi, [ebx + edx*2]
add edi, 0xfffe
mov ebx, dword [esp + 0x44]
shl edi, cl
add esi, edi
shl edx, 0xa
or esi, edx
sub eax, ebp
mov ebp, dword [esp + 0x3c]
mov word [ebx + 0xe], si
shr eax, cl
mov dword [ebx + 8], eax
mov edi, dword [esp]
add edi, dword [esp + 8]
mov eax, dword [esp + 0x18]
cmp eax, 5
ja 0x581310
jmp 0x5813a0
cmp eax, 0x81
ja 0x581363
add eax, 0xfffffffe
bsr edx, eax
xor edx, 0xffffffe0
lea ecx, [edx + 0x1f]
shr eax, cl
lea eax, [eax + edx*2]
add eax, 0x40
jmp 0x5813a0
mov ecx, dword [esp + 0xbc]
mov edi, dword [ecx + 4]
mov esi, 1
cmp edi, ebp
je 0x5811fb
lea ecx, [ebp + 3]
mov edx, ecx
sub edx, eax
cmp edx, 6
ja 0x5815e9
shl edx, 2
mov esi, 0x9750468
mov ecx, edx
jmp 0x5815f8
cmp eax, 0x841
ja 0x58137a
add eax, 0xffffffbe
bsr eax, eax
xor eax, 0xffe0
add eax, 0x2a
jmp 0x5813a0
mov ecx, eax
mov ax, 0x15
cmp ecx, 0x1842
jb 0x5813a0
xor eax, eax
cmp dword [esp + 0x18], 0x5842
setb al
xor eax, 0x17
nop dword [eax + eax]
cmp edi, 9
ja 0x5813b0
add edi, 0xfffffffe
mov ecx, edi
jmp 0x5813f0
cmp edi, 0x85
ja 0x5813ce
add edi, 0xfffffffa
bsr edx, edi
xor edx, 0xffffffe0
lea ecx, [edx + 0x1f]
shr edi, cl
lea ecx, [edi + edx*2]
add ecx, 0x42
jmp 0x5813f0
mov cx, 0x17
cmp edi, 0x845
ja 0x5813f0
add edi, 0xffffffba
bsr ecx, edi
xor ecx, 0xffe0
add ecx, 0x2c
nop dword [eax]
mov edx, ecx
and edx, 7
mov edi, eax
and edi, 7
lea edx, [edx + edi*8]
movzx edx, dx
test esi, 0x3ff
jne 0x581420
cmp ax, 7
ja 0x581420
cmp cx, 0xf
ja 0x581420
lea eax, [edx + 0x40]
cmp cx, 8
cmovae edx, eax
jmp 0x58144e
movzx ecx, cx
shr ecx, 3
movzx eax, ax
shr eax, 3
lea eax, [eax + eax*2]
add eax, ecx
movzx eax, ax
lea ecx, [eax + eax]
mov esi, 0x520d40
shr esi, cl
shl eax, 6
and esi, 0xc0
add esi, eax
add edx, esi
add edx, 0x40
mov word [ebx + 0xc], dx
mov eax, dword [esp + 0xcc]
mov ecx, dword [esp + 0x18]
add dword [eax], ecx
mov ecx, dword [esp + 0x30]
mov edx, dword [esp + 8]
lea ebx, [ecx + edx]
mov edi, dword [esp + 0x8c]
cmp ebx, edi
cmovb edi, ebx
lea esi, [ecx + 2]
mov ecx, edx
mov eax, edx
shr eax, 2
cmp ebp, eax
jae 0x581497
shl ebp, 2
mov eax, ebx
sub eax, ebp
cmp esi, eax
cmova eax, esi
cmp edi, eax
cmovb eax, edi
mov esi, eax
mov eax, dword [esp + 0x60]
mov ebp, 0xbd000000
lea eax, [eax + ecx*2]
add eax, dword [esp + 0x30]
mov dword [esp + 0x34], eax
add dword [esp + 0x44], 0x10
mov dword [esp + 0x18], 0
mov eax, edi
sub eax, esi
jbe 0x5805e5
mov ecx, dword [esp + 0xb8]
mov ecx, dword [ecx + 0x2c]
mov dword [esp], ecx
lea ecx, [esi + 1]
test al, 1
mov dword [esp + 4], edi
je 0x581535
mov dword [esp + 8], ecx
mov ecx, esi
and ecx, dword [esp + 0xb0]
mov eax, dword [esp + 0xac]
mov eax, dword [eax + ecx]
mov dword [esp + 0xc], eax
mov edx, 0xbd1e35a7
mov edi, dword [esp + 0xc]
imul edi, edx
mul ebp
add edx, edi
mov eax, dword [esp + 0xac]
mov eax, dword [eax + ecx + 4]
imul eax, ebp
add eax, edx
mov edi, dword [esp + 4]
shr eax, 0xf
mov ecx, esi
and ecx, 0x18
add ecx, eax
and ecx, 0x1ffff
mov eax, dword [esp]
mov dword [eax + ecx*4], esi
mov ecx, dword [esp + 8]
mov esi, ecx
cmp edi, ecx
je 0x5805e5
mov dword [esp + 8], ebx
mov ebx, dword [esp + 0xac]
nop dword [eax + eax]
mov edi, esi
mov eax, dword [esp + 0xb0]
and edi, eax
mov ecx, dword [ebx + edi]
mov eax, ecx
mul ebp
mov eax, 0xbd1e35a7
imul ecx, eax
add edx, ecx
mov eax, dword [ebx + edi + 4]
imul eax, ebp
add eax, edx
shr eax, 0xf
mov ecx, esi
and ecx, 0x18
add ecx, eax
and ecx, 0x1ffff
mov eax, dword [esp]
mov dword [eax + ecx*4], esi
lea ecx, [esi + 1]
mov edi, ecx
and edi, dword [esp + 0xb0]
mov eax, dword [ebx + edi]
mov ebp, eax
mov edx, 0xbd1e35a7
imul ebp, edx
mov edx, 0xbd000000
mul edx
add edx, ebp
mov ebp, 0xbd000000
mov eax, dword [ebx + edi + 4]
imul eax, ebp
add eax, edx
shr eax, 0xf
mov edx, ecx
and edx, 0x18
add edx, eax
and edx, 0x1ffff
mov eax, dword [esp]
mov dword [eax + edx*4], ecx
mov edi, dword [esp + 4]
add esi, 2
cmp esi, edi
jne 0x581550
mov ebx, dword [esp + 8]
jmp 0x5805e5
sub ecx, edi
cmp ecx, 6
ja 0x58164a
shl ecx, 2
mov esi, 0xfdb1ace
shr esi, cl
and esi, 0xf
jmp 0x5811fb
imul eax, ebp, 0x87
bsr ecx, ebx
imul ecx, ecx, 0xffffffe2
add eax, ecx
add eax, 0x3c0
cmp eax, 0x424
mov edx, dword [esp + 4]
mov esi, dword [esp + 0x14]
mov ecx, ebx
mov ebx, 0
jb 0x580a92
mov esi, dword [esp + 0x28]
inc esi
mov dword [edi + 8], esi
mov dword [esp + 0x20], ebp
mov dword [esp + 0x4c], ecx
mov esi, eax
mov ebx, dword [esp + 0xc]
jmp 0x580a92
mov esi, 2
mov eax, dword [esp + 0xbc]
cmp dword [eax + 8], ebp
je 0x5811fb
mov esi, 3
mov eax, dword [esp + 0xbc]
cmp dword [eax + 0xc], ebp
jne 0x5811f8
jmp 0x5811fb
mov ecx, dword [esp + 0xc4]
mov dword [esp + 0x44], ecx
mov ecx, dword [esp + 0x18]
add ecx, eax
sub ecx, ebx
mov eax, dword [esp + 0xc0]
mov dword [eax], ecx
mov ecx, dword [esp + 0x44]
sub ecx, dword [esp + 0xc4]
sar ecx, 4
mov eax, dword [esp + 0xc8]
add dword [eax], ecx
add esp, 0x98
pop esi
pop edi
pop ebx
pop ebp
ret