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

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0xac
mov esi, ecx
mov ebp, dword [esp + 0xc8]
movzx ecx, byte [ebp + 8]
mov eax, 1
shl eax, cl
mov dword [esp + 0x64], eax
cmp esi, 4
lea eax, [edx + esi - 3]
mov ecx, edx
mov dword [esp + 0x88], eax
cmovae ecx, eax
mov dword [esp + 0x90], ecx
cmp dword [ebp + 4], 9
mov eax, 0x40
mov ecx, 0x200
cmovl ecx, eax
mov dword [esp + 0x78], ecx
mov edi, edx
lea eax, [edx + esi]
mov dword [esp + 0x70], eax
mov eax, dword [esp + 0xd4]
mov edx, dword [esp + 0xd0]
mov ecx, dword [esp + 0xcc]
mov esi, dword [ebp + 0x10]
mov dword [esp + 0x74], esi
mov eax, dword [eax]
mov dword [esp + 0x48], eax
mov eax, dword [ecx + 0x3c]
cmp eax, 5
jl 0x58179a
movd xmm0, dword [edx]
pshufd xmm1, xmm0, 0
paddd xmm1, xmmword [0x8bb6c0]
movdqu xmmword [edx + 0x10], xmm1
pshufd xmm0, xmm0, 0x50
paddd xmm0, xmmword [0x8bb6d0]
movq qword [edx + 0x20], xmm0
cmp eax, 0xb
jb 0x58179a
movd xmm0, dword [edx + 4]
pshufd xmm1, xmm0, 0
paddd xmm1, xmmword [0x8bb6c0]
movdqu xmmword [edx + 0x28], xmm1
pshufd xmm0, xmm0, 0x50
paddd xmm0, xmmword [0x8bb6d0]
movq qword [edx + 0x38], xmm0
mov esi, dword [esp + 0xd8]
lea eax, [edi + 4]
mov ecx, dword [esp + 0x70]
cmp eax, ecx
mov eax, ecx
jae 0x582f35
mov ebx, dword [esp + 0xc4]
add dword [esp + 0x64], 0xfffffff0
mov ecx, dword [esp + 0x78]
lea edx, [ecx + edi]
mov dword [esp + 0x6c], edx
lea ecx, [ecx*4]
mov dword [esp + 0x8c], ecx
lea ecx, [eax - 4]
mov dword [esp + 0x84], ecx
mov ecx, dword [esp + 0xc0]
lea ecx, [ecx + eax - 1]
mov dword [esp + 0x80], ecx
movdqa xmm0, xmmword [0x8bb6c0]
movdqa xmm1, xmmword [0x8bb6d0]
mov dword [esp + 0x4c], esi
jmp 0x581831
mov dword [esp + 0x48], ebp
nop dword [eax]
mov ebp, dword [esp + 0xc8]
mov ebx, dword [esp + 0xc4]
lea eax, [esi + 4]
mov edi, esi
mov ecx, dword [esp + 0x70]
cmp eax, ecx
mov eax, ecx
jae 0x582f3b
mov edx, eax
sub edx, edi
mov eax, dword [esp + 0x64]
cmp edi, eax
mov ecx, eax
cmovb ecx, edi
mov dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x74]
add ecx, edi
cmp ecx, eax
cmovae ecx, eax
mov dword [esp + 0x3c], ecx
mov eax, dword [ebp + 0x44]
mov dword [esp + 0x50], eax
mov eax, dword [esp + 0xcc]
mov esi, dword [eax + 0x3c]
mov ecx, dword [eax + 0x44]
mov dword [esp + 0xc], ecx
mov dword [esp + 0x14], edi
and edi, ebx
mov eax, dword [eax + 0x48]
mov dword [esp + 8], esi
test esi, esi
mov dword [esp + 0x5c], edx
mov dword [esp + 0x30], edi
mov dword [esp + 0x34], eax
je 0x581a40
mov eax, dword [esp + 0xc0]
lea ecx, [eax + edi]
lea eax, [ecx + edx]
mov dword [esp + 0x40], eax
mov dword [esp + 0x1c], ecx
lea eax, [edx + ecx - 4]
mov dword [esp + 0x2c], eax
mov dword [esp + 0x24], 0x424
mov dword [esp + 0x18], 0
mov dword [esp + 0x20], 0
xor ecx, ecx
mov dword [esp], 0
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 0xd0]
jmp 0x5818f6
mov edx, dword [esp + 0xd0]
mov ecx, dword [esp + 4]
inc ecx
cmp ecx, dword [esp + 8]
je 0x581a5f
mov dword [esp + 4], ecx
mov esi, dword [edx + ecx*4]
cmp esi, dword [esp + 0x10]
ja 0x5818e7
mov ecx, eax
sub ecx, esi
cmp ecx, eax
jae 0x5818e7
mov edx, dword [esp + 0x30]
mov edi, dword [esp]
add edx, edi
cmp edx, ebx
ja 0x5818e0
and ecx, ebx
add edi, ecx
cmp edi, ebx
ja 0x5818e0
mov eax, dword [esp + 0xc0]
movzx edx, byte [eax + edx]
cmp dl, byte [eax + edi]
jne 0x581948
add ecx, eax
mov ebx, dword [esp + 0x2c]
mov ebp, dword [esp + 0x1c]
xor edi, edi
cmp ebx, ebp
jae 0x581955
mov edx, ebp
mov eax, dword [esp + 0x14]
jmp 0x581979
mov edx, dword [esp + 0xd0]
mov eax, dword [esp + 0x14]
jmp 0x5818e7
mov eax, dword [esp + 0x14]
nop dword [eax]
mov edx, dword [ebp + edi]
cmp edx, dword [ecx + edi]
jne 0x581976
lea edx, [edi + ebp]
add edx, 4
add edi, 4
cmp edx, ebx
jbe 0x581960
lea edx, [edi + ebp]
mov ebx, dword [esp + 0x40]
cmp edx, ebx
jae 0x5819b3
sub ebx, edx
lea ebp, [ebx + edi]
nop word cs:[eax + eax]
movzx eax, byte [ecx + edi]
cmp al, byte [edx]
jne 0x58199f
inc edx
inc edi
dec ebx
jne 0x581990
mov edi, ebp
mov edx, dword [esp + 0xd0]
mov ebx, dword [esp + 0xc4]
mov eax, dword [esp + 0x14]
jmp 0x5819c1
mov edx, dword [esp + 0xd0]
mov ebx, dword [esp + 0xc4]
mov ecx, dword [esp + 4]
cmp edi, 2
ja 0x5819d9
jne 0x5818e7
cmp ecx, 1
ja 0x5818e7
imul edx, edi, 0x87
lea ecx, [edx + 0x3cf]
cmp dword [esp + 0x24], ecx
jae 0x5818e0
cmp dword [esp + 4], 0
je 0x581a17
mov eax, dword [esp + 4]
mov ecx, eax
and cl, 0xe
mov eax, 0x1ca10
shr eax, cl
and eax, 0xe
sub edx, eax
mov eax, dword [esp + 0x14]
add edx, 0x3a8
mov ecx, edx
cmp dword [esp + 0x24], ecx
mov edx, dword [esp + 0xd0]
jae 0x5818e7
mov dword [esp + 0x18], edi
mov dword [esp + 0x20], esi
mov dword [esp + 0x24], ecx
mov dword [esp], edi
jmp 0x5818e7
mov dword [esp + 0x24], 0x424
mov dword [esp + 0x18], 0
mov dword [esp + 0x20], 0
mov dword [esp], 0
mov esi, dword [esp + 0xcc]
movzx ecx, byte [esi + 0x30]
mov eax, dword [esp + 0xc0]
mov edi, dword [esp + 0x30]
imul ebx, dword [eax + edi], 0x1e35a7bd
shr ebx, cl
lea edx, [eax + edi]
movzx ecx, byte [esi + 0x38]
mov eax, ebx
shl eax, cl
mov ecx, dword [esp + 0x34]
lea eax, [ecx + eax*4]
mov dword [esp + 4], eax
mov eax, dword [esp + 0xc]
movzx ecx, word [eax + ebx*2]
mov ebp, ecx
sub ebp, dword [esi + 0x2c]
mov eax, 0
cmovb ebp, eax
mov eax, dword [esi + 0x34]
mov dword [esp + 8], eax
cmp ebp, ecx
mov dword [esp + 0x40], edx
mov dword [esp + 0x58], ebx
mov dword [esp + 0x44], ecx
jae 0x581c00
mov dword [esp + 0x34], ebp
mov eax, dword [esp + 0x5c]
lea esi, [edx + eax]
mov dword [esp + 0x1c], esi
add eax, edx
add eax, 0xfffffffc
mov dword [esp + 0x2c], eax
mov ebx, ecx
mov eax, dword [esp + 0x14]
mov ebp, edi
jmp 0x581afe
mov eax, dword [esp + 0x14]
cmp ebx, dword [esp + 0x34]
jbe 0x581c04
dec ebx
mov ecx, ebx
and ecx, dword [esp + 8]
mov edx, dword [esp + 4]
mov ecx, dword [edx + ecx*4]
mov edi, eax
sub edi, ecx
cmp edi, dword [esp + 0x10]
ja 0x581c04
mov esi, dword [esp]
mov eax, ebp
lea edx, [esi + ebp]
mov eax, dword [esp + 0xc4]
cmp edx, eax
ja 0x581af0
and ecx, eax
add esi, ecx
cmp esi, eax
ja 0x581bf0
mov eax, dword [esp + 0xc0]
movzx edx, byte [eax + edx]
cmp dl, byte [eax + esi]
jne 0x581bf0
add ecx, eax
mov ebp, dword [esp + 0x40]
mov eax, dword [esp + 0x2c]
xor edx, edx
cmp eax, ebp
jb 0x581b78
nop dword [eax]
mov esi, dword [ebp + edx]
cmp esi, dword [ecx + edx]
jne 0x581b76
lea esi, [edx + ebp]
add esi, 4
add edx, 4
cmp esi, eax
jbe 0x581b60
add ebp, edx
mov eax, dword [esp + 0x30]
mov esi, dword [esp + 0x1c]
cmp ebp, esi
jae 0x581ba6
sub esi, ebp
lea eax, [esi + edx]
mov dword [esp + 0x28], eax
nop dword [eax]
movzx eax, byte [ecx + edx]
cmp al, byte [ebp]
jne 0x581ba2
inc ebp
inc edx
dec esi
jne 0x581b90
mov edx, dword [esp + 0x28]
mov eax, dword [esp + 0x30]
mov ebp, eax
cmp edx, 4
jb 0x581af0
imul eax, edx, 0x87
bsr ecx, edi
imul ecx, ecx, 0xffffffe2
add ecx, eax
add ecx, 0x3c0
cmp dword [esp + 0x24], ecx
mov eax, dword [esp + 0x14]
jae 0x581af4
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], edi
mov dword [esp + 0x24], ecx
mov dword [esp], edx
jmp 0x581af4
mov eax, dword [esp + 0x14]
mov ebp, dword [esp + 0x30]
jmp 0x581af4
mov eax, dword [esp + 0x14]
mov edx, dword [esp + 8]
and edx, dword [esp + 0x44]
mov ecx, dword [esp + 4]
mov dword [ecx + edx*4], eax
mov eax, dword [esp + 0xc]
mov ecx, dword [esp + 0x58]
inc word [eax + ecx*2]
xor edi, edi
mov ecx, dword [esp + 0x24]
cmp ecx, 0x424
jne 0x581c60
mov eax, dword [esp + 0xcc]
mov esi, dword [eax + 0x40]
mov edx, dword [esi + 4]
mov edi, dword [esi + 8]
mov eax, edx
shr eax, 7
cmp edi, eax
jae 0x5826b0
mov eax, dword [esp + 0x18]
mov dword [esp + 0x38], eax
mov esi, dword [esp + 0x20]
mov eax, ecx
mov edx, ecx
xor edi, edi
jmp 0x581c6e
mov eax, dword [esp + 0x18]
mov dword [esp + 0x38], eax
mov esi, dword [esp + 0x20]
mov edx, ecx
mov ebp, dword [esp + 0xc8]
cmp edx, 0x425
jb 0x5825b0
mov dword [esp + 0x28], edx
mov dword [esp + 0x54], edi
mov dword [esp + 0x60], esi
mov eax, dword [esp + 0xcc]
mov ecx, dword [eax + 0x44]
mov dword [esp + 0x3c], ecx
mov ecx, dword [eax + 0x48]
mov dword [esp + 0xa0], ecx
mov ecx, dword [eax + 0x3c]
mov dword [esp + 0x30], ecx
mov ecx, dword [eax + 0x2c]
mov dword [esp + 0x9c], ecx
mov ecx, dword [eax + 0x30]
mov dword [esp + 0x98], ecx
mov ecx, dword [eax + 0x38]
mov dword [esp + 0x94], ecx
mov eax, dword [eax + 0x34]
mov dword [esp + 0x40], eax
xor edi, edi
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x38]
nop dword [eax + eax]
mov dword [esp + 0xa8], edi
mov esi, dword [esp + 0x5c]
dec esi
mov dword [esp + 0x38], ecx
lea ebp, [ecx - 1]
cmp ebp, esi
cmovae ebp, esi
mov ebx, dword [esp + 0xc8]
cmp dword [ebx + 4], 5
mov ecx, 0
cmovge ebp, ecx
lea edi, [eax + 1]
mov edx, eax
mov eax, dword [esp + 0x64]
cmp edi, eax
mov ecx, eax
cmovb ecx, edi
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x74]
mov dword [esp + 0x14], edx
add ecx, edx
inc ecx
mov edx, edi
cmp ecx, eax
cmovae ecx, eax
mov dword [esp + 0x68], ecx
mov eax, dword [ebx + 0x44]
mov dword [esp + 0x7c], eax
mov ecx, edi
mov ebx, dword [esp + 0xc4]
and ecx, ebx
cmp dword [esp + 0x30], 0
mov dword [esp + 0x5c], esi
mov dword [esp + 0xc], edi
mov dword [esp], ebp
mov dword [esp + 8], ecx
je 0x581f30
mov eax, dword [esp + 0xc0]
add eax, ecx
lea ebp, [eax + esi]
mov dword [esp + 0x24], eax
lea eax, [esi + eax - 4]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x80]
add eax, ecx
mov dword [esp + 0x58], eax
mov dword [esp + 0x18], 0x424
mov dword [esp + 0x1c], 0
mov dword [esp + 0x2c], 0
xor eax, eax
mov edi, dword [esp + 0xd0]
mov dword [esp + 0x20], ebp
jmp 0x581dc1
mov edi, dword [esp + 0xd0]
mov edx, ebp
inc eax
cmp eax, dword [esp + 0x30]
je 0x581f4f
mov esi, dword [edi + eax*4]
cmp esi, dword [esp + 4]
ja 0x581db6
mov ecx, edx
sub ecx, esi
cmp ecx, edx
jae 0x581db6
mov dword [esp + 0x34], esi
mov ebp, edx
mov edx, dword [esp]
mov esi, dword [esp + 8]
add esi, edx
cmp esi, ebx
ja 0x581db4
and ecx, ebx
lea edi, [ecx + edx]
cmp edi, ebx
ja 0x581dad
mov edx, dword [esp + 0xc0]
movzx ebx, byte [edx + esi]
cmp bl, byte [edx + edi]
jne 0x581e16
add ecx, edx
mov ebx, dword [esp + 0x24]
cmp dword [esp + 0x10], ebx
mov ebp, dword [esp + 0x20]
jae 0x581e2a
xor esi, esi
mov edx, dword [esp + 0xc]
jmp 0x581e49
mov ebx, dword [esp + 0xc4]
mov edx, dword [esp + 0xc]
mov edi, dword [esp + 0xd0]
jmp 0x581db6
xor esi, esi
mov edx, dword [esp + 0xc]
mov edi, dword [ebx + esi]
cmp edi, dword [ecx + esi]
jne 0x581e47
lea edi, [ebx + esi]
add edi, 4
add esi, 4
cmp edi, dword [esp + 0x10]
jbe 0x581e30
add ebx, esi
mov edi, dword [esp + 0xd0]
cmp ebx, ebp
jae 0x581e9e
mov edx, ebp
sub edx, ebx
add edx, esi
mov dword [esp + 0x44], edx
mov edi, dword [esp + 0x58]
sub edi, ebx
nop word cs:[eax + eax]
movzx edx, byte [ecx + esi]
cmp dl, byte [ebx]
jne 0x581e85
inc ebx
inc esi
dec edi
cmp dword [esp + 0x14], edi
jne 0x581e70
mov esi, dword [esp + 0x44]
mov edi, dword [esp + 0xd0]
mov ebx, dword [esp + 0xc4]
mov edx, dword [esp + 0xc]
cmp esi, 2
jbe 0x581eaa
jmp 0x581eb9
mov ebx, dword [esp + 0xc4]
cmp esi, 2
ja 0x581eb9
jne 0x581db6
cmp eax, 1
ja 0x581db6
imul edi, esi, 0x87
lea ecx, [edi + 0x3cf]
cmp dword [esp + 0x18], ecx
jae 0x581f1b
test eax, eax
je 0x581eec
mov ecx, eax
and cl, 0xe
mov edx, 0x1ca10
shr edx, cl
and edx, 0xe
sub edi, edx
mov edx, dword [esp + 0xc]
add edi, 0x3a8
mov ecx, edi
cmp dword [esp + 0x18], ecx
mov edi, dword [esp + 0xd0]
jae 0x581db6
mov dword [esp + 0x1c], esi
mov dword [esp], ecx
mov ecx, dword [esp + 0x34]
mov dword [esp + 0x2c], ecx
mov ecx, dword [esp]
mov dword [esp + 0x18], ecx
mov dword [esp], esi
jmp 0x581db6
mov edi, dword [esp + 0xd0]
jmp 0x581db6
mov dword [esp + 0x18], 0x424
mov dword [esp + 0x1c], 0
mov dword [esp + 0x2c], 0
mov edi, dword [esp + 0xd0]
mov ebp, dword [esp + 0xc0]
mov esi, dword [esp + 8]
imul ebp, dword [ebp + esi], 0x1e35a7bd
mov ecx, dword [esp + 0x98]
shr ebp, cl
mov eax, ebp
mov ecx, dword [esp + 0x94]
shl eax, cl
mov ecx, dword [esp + 0xc0]
add esi, ecx
mov ecx, dword [esp + 0xa0]
lea eax, [ecx + eax*4]
mov dword [esp + 0x34], eax
mov eax, dword [esp + 0x3c]
mov dword [esp + 0x50], ebp
movzx ecx, word [eax + ebp*2]
mov ebp, ecx
sub ebp, dword [esp + 0x9c]
mov eax, 0
cmovb ebp, eax
mov dword [esp + 0x24], ebp
cmp ebp, ecx
mov dword [esp + 0x20], esi
mov dword [esp + 0x6c], ecx
jae 0x582130
mov eax, dword [esp + 0x5c]
mov ebp, edi
lea edi, [esi + eax]
mov dword [esp + 0x58], edi
mov edi, ebp
lea eax, [esi + eax - 4]
mov dword [esp + 0x44], eax
mov eax, dword [esp + 0x80]
mov esi, dword [esp + 8]
add eax, esi
mov dword [esp + 0xa4], eax
mov ebp, dword [esp]
nop dword [eax]
dec ecx
mov dword [esp + 0x10], ecx
mov eax, ecx
and eax, dword [esp + 0x40]
mov ecx, dword [esp + 0x34]
mov ecx, dword [ecx + eax*4]
mov esi, edx
sub esi, ecx
cmp esi, dword [esp + 4]
ja 0x582130
mov eax, dword [esp + 8]
add eax, ebp
cmp eax, ebx
ja 0x5820d9
mov edx, ebp
mov ebp, edi
and ecx, ebx
mov dword [esp], edx
lea edi, [ecx + edx]
cmp edi, ebx
ja 0x5820d0
mov edx, dword [esp + 0xc0]
movzx eax, byte [edx + eax]
cmp al, byte [edx + edi]
jne 0x5820d0
add ecx, edx
mov edi, dword [esp + 0x20]
mov edx, dword [esp + 0x44]
xor ebx, ebx
cmp edx, edi
jae 0x582060
mov eax, edi
jmp 0x582078
mov eax, dword [edi + ebx]
cmp eax, dword [ecx + ebx]
jne 0x582075
lea eax, [edi + ebx]
add eax, 4
add ebx, 4
cmp eax, edx
jbe 0x582060
lea eax, [edi + ebx]
mov ebp, dword [esp]
mov edx, dword [esp + 0xc]
mov edi, dword [esp + 0x58]
cmp eax, edi
jae 0x5820f0
sub edi, eax
add edi, ebx
mov ebp, dword [esp + 0xa4]
sub ebp, eax
nop word cs:[eax + eax]
movzx edx, byte [ecx + ebx]
cmp dl, byte [eax]
jne 0x5820b3
inc eax
inc ebx
dec ebp
cmp dword [esp + 0x14], ebp
jne 0x5820a0
mov ebx, edi
mov edi, dword [esp + 0xd0]
mov edx, dword [esp + 0xc]
mov ebp, dword [esp]
cmp ebx, 4
jb 0x5820d9
jmp 0x5820fc
mov edi, ebp
mov ebp, dword [esp]
mov edx, dword [esp + 0xc]
mov ecx, dword [esp + 0x10]
cmp ecx, dword [esp + 0x24]
mov ebx, dword [esp + 0xc4]
ja 0x581ff0
jmp 0x582130
mov edi, dword [esp + 0xd0]
cmp ebx, 4
jb 0x5820d9
imul eax, ebx, 0x87
bsr ecx, esi
imul ecx, ecx, 0xffffffe2
add eax, ecx
add eax, 0x3c0
cmp dword [esp + 0x18], eax
mov ecx, dword [esp + 0x10]
jae 0x5820dd
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x2c], esi
mov dword [esp + 0x18], eax
mov ebp, ebx
jmp 0x5820dd
mov ecx, dword [esp + 0x6c]
and ecx, dword [esp + 0x40]
mov eax, dword [esp + 0x34]
mov dword [eax + ecx*4], edx
mov eax, dword [esp + 0x3c]
mov ecx, dword [esp + 0x50]
inc word [eax + ecx*2]
mov esi, dword [esp + 0x18]
cmp esi, 0x424
jne 0x582170
mov eax, dword [esp + 0xcc]
mov ebx, dword [eax + 0x40]
mov ebp, dword [ebx + 4]
mov ecx, dword [ebx + 8]
mov eax, ebp
shr eax, 7
cmp ecx, eax
jae 0x582190
mov dword [esp + 0x10], 0
mov eax, dword [esp + 0x1c]
mov dword [esp], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 4], eax
mov ebp, esi
jmp 0x582225
mov dword [esp + 0x58], ecx
mov eax, dword [esp + 0x20]
imul edi, dword [eax], 0x1e35a7bd
shr edi, 0x11
mov ecx, edi
and ecx, 0xfffffffe
mov edx, dword [esp + 0x68]
lea eax, [edx + 1]
mov dword [esp + 0x34], eax
lea edx, [ebp + 1]
mov dword [ebx + 4], edx
mov edx, dword [esp + 0xc8]
mov edx, dword [edx + 0x64]
movzx eax, byte [edx + ecx]
mov dword [esp + 0x10], 0
mov dword [esp + 0x24], 0x424
test eax, eax
mov edx, dword [esp + 0x5c]
je 0x5821e5
cmp edx, eax
jae 0x58227c
mov ecx, dword [esp + 0x1c]
mov dword [esp], ecx
mov ecx, dword [esp + 0x2c]
mov dword [esp + 4], ecx
mov dword [esp + 8], esi
mov edx, dword [esp + 0xc]
or edi, 1
add ebp, 2
mov dword [ebx + 4], ebp
mov ebp, dword [esp + 0xc8]
mov ecx, dword [ebp + 0x64]
movzx esi, byte [ecx + edi]
test esi, esi
je 0x582221
cmp dword [esp + 0x5c], esi
jae 0x5822c9
mov ebp, dword [esp + 8]
mov eax, dword [esp + 0x28]
add eax, 0xaf
cmp ebp, eax
jb 0x582680
inc dword [esp + 0x48]
mov edi, dword [esp + 0xa8]
cmp edi, 2
ja 0x5827da
mov eax, dword [esp + 0x14]
add eax, 5
inc edi
mov esi, dword [esp]
mov ecx, esi
mov ebx, dword [esp + 4]
mov dword [esp + 0x60], ebx
mov dword [esp + 0x28], ebp
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x54], ebp
cmp eax, dword [esp + 0x70]
mov eax, edx
jb 0x581ce0
jmp 0x5827e5
mov dword [esp + 0x44], edi
mov dword [esp + 0x50], ebx
mov esi, dword [esp + 0xc8]
mov edx, dword [esi + 0x60]
movzx ecx, word [edx + ecx*2]
mov edx, dword [esi + 0x48]
mov dword [esp + 4], ecx
imul ecx, eax
add ecx, dword [edx + eax*4 + 0x20]
mov dword [esp + 0x10], edx
add ecx, dword [edx + 0xa4]
lea edi, [ecx + eax]
lea edx, [eax + ecx]
add edx, 0xfffffffc
xor ebx, ebx
cmp edx, ecx
mov dword [esp], eax
jae 0x58230c
mov edx, dword [esp + 0xc]
cmp ecx, edi
jb 0x582336
jmp 0x582357
mov ecx, dword [ebp + 0x60]
movzx ecx, word [ecx + edi*2]
mov eax, dword [ebp + 0x48]
mov dword [esp + 0x18], ecx
imul ecx, esi
add ecx, dword [eax + esi*4 + 0x20]
mov dword [esp + 0x2c], eax
add ecx, dword [eax + 0xa4]
lea edi, [ecx + esi]
lea edx, [esi + ecx]
add edx, 0xfffffffc
xor eax, eax
cmp edx, ecx
jae 0x582418
mov edx, dword [esp + 0xc]
cmp ecx, edi
jb 0x58244e
jmp 0x582479
xor ebx, ebx
nop
mov esi, dword [ecx + ebx]
mov eax, dword [esp + 0x20]
cmp esi, dword [eax + ebx]
jne 0x582329
lea esi, [ecx + ebx]
add esi, 4
add ebx, 4
cmp esi, edx
jbe 0x582310
add ecx, ebx
mov edx, dword [esp + 0xc]
mov eax, dword [esp]
cmp ecx, edi
jae 0x582357
sub edi, ecx
lea esi, [edi + ebx]
nop dword [eax + eax]
mov edx, dword [esp + 0x20]
movzx edx, byte [edx + ebx]
cmp dl, byte [ecx]
jne 0x582353
inc ecx
inc ebx
dec edi
jne 0x582340
mov ebx, esi
mov edx, dword [esp + 0xc]
mov edi, dword [esp + 0x44]
test ebx, ebx
je 0x5824f2
mov edx, dword [esp + 0xc8]
mov ecx, dword [edx + 0x50]
add ecx, ebx
cmp ecx, eax
jbe 0x58251a
mov esi, eax
sub esi, ebx
mov edi, dword [edx + 0x58]
mov edx, dword [edx + 0x5c]
lea ecx, [esi + esi]
lea ecx, [ecx + ecx*2]
mov dword [esp + 8], ecx
shrd edi, edx, cl
mov ecx, dword [esp + 0x10]
mov eax, dword [esp]
mov ch, byte [ecx + eax]
mov eax, dword [esp + 8]
mov cl, al
and cl, 0x1e
shr edx, cl
test al, 0x20
cmove edx, edi
and edx, 0x3f
lea edx, [edx + esi*4]
mov cl, ch
shl edx, cl
mov ecx, dword [esp + 4]
add ecx, dword [esp + 0x34]
add ecx, edx
cmp ecx, dword [esp + 0x7c]
ja 0x5823ec
mov edx, ecx
mov dword [esp + 0x10], esi
imul ecx, ebx, 0x87
mov dword [esp + 4], edx
bsr edx, edx
imul edx, edx, 0xffffffe2
add edx, ecx
add edx, 0x3c0
cmp edx, 0x424
jae 0x582586
mov ecx, dword [esp + 0x1c]
mov dword [esp], ecx
mov ecx, dword [esp + 0x2c]
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x18]
mov dword [esp + 8], ecx
mov dword [esp + 0x10], 0
mov edx, dword [esp + 0xc]
mov ebx, dword [esp + 0x50]
jmp 0x5825a5
mov dword [esp + 0x1c], esi
xor eax, eax
nop
mov ebp, dword [ecx + eax]
mov esi, dword [esp + 0x20]
cmp ebp, dword [esi + eax]
jne 0x582439
lea ebp, [ecx + eax]
add ebp, 4
add eax, 4
cmp ebp, edx
jbe 0x582420
add ecx, eax
mov ebp, dword [esp + 0xc8]
mov edx, dword [esp + 0xc]
mov esi, dword [esp + 0x1c]
cmp ecx, edi
jae 0x582479
sub edi, ecx
lea edx, [edi + eax]
mov dword [esp + 0x1c], edx
nop word [eax + eax]
mov edx, dword [esp + 0x20]
movzx edx, byte [edx + eax]
cmp dl, byte [ecx]
jne 0x582475
inc ecx
inc eax
dec edi
jne 0x582460
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0xc]
test eax, eax
je 0x582221
mov ecx, dword [ebp + 0x50]
add ecx, eax
cmp ecx, esi
jbe 0x582221
mov edx, esi
sub edx, eax
mov ecx, dword [ebp + 0x58]
mov dword [esp + 0x1c], ecx
lea ecx, [edx + edx]
lea ecx, [ecx + ecx*2]
mov dword [esp + 0x20], ecx
mov edi, dword [ebp + 0x5c]
mov ecx, dword [esp + 0x20]
mov ebp, dword [esp + 0x1c]
shrd ebp, edi, cl
mov ecx, dword [esp + 0x2c]
mov ch, byte [ecx + esi]
mov esi, edx
mov edx, dword [esp + 0x20]
mov cl, dl
and cl, 0x1e
shr edi, cl
test dl, 0x20
cmove edi, ebp
and edi, 0x3f
lea edx, [edi + esi*4]
mov cl, ch
shl edx, cl
mov edi, dword [esp + 0x34]
add edi, dword [esp + 0x18]
add edi, edx
cmp edi, dword [esp + 0x7c]
jbe 0x582546
mov edx, dword [esp + 0xc]
mov ebp, dword [esp + 8]
jmp 0x582225
mov ecx, dword [esp + 0x1c]
mov dword [esp], ecx
mov ecx, dword [esp + 0x2c]
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x18]
mov dword [esp + 8], ecx
mov dword [esp + 0x10], 0
mov ebx, dword [esp + 0x50]
jmp 0x5821fc
mov ecx, dword [esp + 0x1c]
mov dword [esp], ecx
mov ecx, dword [esp + 0x2c]
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x18]
mov dword [esp + 8], ecx
mov dword [esp + 0x10], 0
mov edx, dword [esp + 0xc]
mov ebx, dword [esp + 0x50]
jmp 0x5821fc
imul ecx, eax, 0x87
bsr edx, edi
imul edx, edx, 0xffffffe2
add ecx, edx
add ecx, 0x3c0
cmp ecx, dword [esp + 0x24]
mov edx, dword [esp + 0xc]
mov ebp, dword [esp + 8]
jb 0x582225
mov dword [esp + 0x10], esi
mov esi, dword [esp + 0x58]
inc esi
mov dword [ebx + 8], esi
mov dword [esp], eax
mov dword [esp + 4], edi
mov ebp, ecx
jmp 0x582225
mov dword [esp], ebx
mov eax, dword [esp + 0x58]
inc eax
mov ebx, dword [esp + 0x50]
mov dword [esp + 0x58], eax
mov dword [ebx + 8], eax
mov dword [esp + 8], edx
mov dword [esp + 0x24], edx
mov edx, dword [esp + 0xc]
mov edi, dword [esp + 0x44]
jmp 0x5821fc
inc dword [esp + 0x48]
mov eax, dword [esp + 0x14]
lea esi, [eax + 1]
mov ecx, dword [esp + 0x6c]
cmp esi, ecx
jbe 0x581817
mov eax, dword [esp + 0x8c]
add eax, ecx
cmp esi, eax
jbe 0x582740
mov ecx, dword [esp + 0x14]
add ecx, 0x11
mov eax, dword [esp + 0x84]
cmp ecx, eax
cmovae ecx, eax
cmp esi, ecx
jae 0x581817
mov eax, ecx
mov dword [esp + 0x14], ecx
mov eax, dword [esp + 0xcc]
mov ecx, dword [eax + 0x30]
mov dword [esp + 4], ecx
mov ecx, dword [eax + 0x34]
mov dword [esp + 0x10], ecx
mov edi, dword [eax + 0x44]
mov ecx, dword [eax + 0x38]
mov dword [esp], ecx
mov eax, dword [eax + 0x48]
mov dword [esp + 8], eax
mov ebp, dword [esp + 0x48]
nop word cs:[eax + eax]
mov ecx, esi
and ecx, dword [esp + 0xc4]
mov eax, dword [esp + 0xc0]
imul ebx, dword [eax + ecx], 0x1e35a7bd
mov ecx, dword [esp + 4]
shr ebx, cl
movzx eax, word [edi + ebx*2]
and eax, dword [esp + 0x10]
mov edx, ebx
mov ecx, dword [esp]
shl edx, cl
add edx, eax
mov eax, dword [esp + 8]
mov dword [eax + edx*4], esi
inc word [edi + ebx*2]
add ebp, 4
add esi, 4
cmp esi, dword [esp + 0x14]
jb 0x582630
jmp 0x581809
mov eax, dword [esp + 0x74]
mov ecx, dword [esp + 0x14]
lea edx, [ecx + eax]
mov eax, dword [esp + 0x64]
cmp edx, eax
cmovae edx, eax
mov dword [esp + 0x68], edx
mov esi, dword [esp + 0x38]
mov ebx, dword [esp + 0x60]
mov ebp, dword [esp + 0x54]
mov edx, ecx
jmp 0x5827e5
mov dword [esp], edi
mov eax, dword [esp + 0x40]
imul eax, dword [eax], 0x1e35a7bd
shr eax, 0x11
mov ecx, eax
and ecx, 0xfffffffe
inc dword [esp + 0x3c]
lea edi, [edx + 1]
mov dword [esi + 4], edi
mov ebp, dword [esp + 0xc8]
mov edi, dword [ebp + 0x64]
movzx ebx, byte [edi + ecx]
xor edi, edi
mov dword [esp + 0x10], 0x424
test ebx, ebx
mov dword [esp + 4], esi
je 0x5826f9
cmp dword [esp + 0x5c], ebx
jae 0x5829d7
mov ecx, dword [esp + 0x18]
mov dword [esp + 0x38], ecx
mov esi, dword [esp + 0x20]
mov ecx, dword [esp + 0x24]
mov dword [esp + 0x28], ecx
or eax, 1
add edx, 2
mov ecx, eax
mov eax, dword [esp + 4]
mov dword [eax + 4], edx
mov eax, ecx
mov ecx, dword [ebp + 0x64]
movzx ecx, byte [ecx + eax]
test ecx, ecx
je 0x582737
cmp dword [esp + 0x5c], ecx
mov ebx, dword [esp + 0x3c]
jae 0x582a28
mov edx, dword [esp + 0x28]
jmp 0x581c75
mov ecx, dword [esp + 0x14]
add ecx, 9
mov eax, dword [esp + 0x88]
cmp ecx, eax
cmovae ecx, eax
cmp esi, ecx
jae 0x581817
mov eax, ecx
mov dword [esp + 0x14], ecx
mov eax, dword [esp + 0xcc]
mov ecx, dword [eax + 0x30]
mov dword [esp + 4], ecx
mov ecx, dword [eax + 0x34]
mov dword [esp + 0x10], ecx
mov edi, dword [eax + 0x44]
mov ecx, dword [eax + 0x38]
mov dword [esp], ecx
mov eax, dword [eax + 0x48]
mov dword [esp + 8], eax
mov ebp, dword [esp + 0x48]
nop word [eax + eax]
mov ecx, esi
and ecx, dword [esp + 0xc4]
mov eax, dword [esp + 0xc0]
imul ebx, dword [eax + ecx], 0x1e35a7bd
mov ecx, dword [esp + 4]
shr ebx, cl
movzx eax, word [edi + ebx*2]
and eax, dword [esp + 0x10]
mov edx, ebx
mov ecx, dword [esp]
shl edx, cl
add edx, eax
mov eax, dword [esp + 8]
mov dword [eax + edx*4], esi
inc word [edi + ebx*2]
add ebp, 2
add esi, 2
cmp esi, dword [esp + 0x14]
jb 0x582790
jmp 0x581809
mov esi, dword [esp]
mov ebx, dword [esp + 4]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x10], ebp
mov dword [esp], esi
mov dword [esp + 0xc], edx
cmp ebx, dword [esp + 0x68]
mov ecx, dword [esp + 0x4c]
mov dword [esp + 4], ebx
jbe 0x582890
lea esi, [ebx + 0xf]
cmp ebx, dword [esp + 0x68]
ja 0x5828a3
test esi, esi
je 0x5828a3
mov ebp, dword [esp + 0xd0]
mov eax, dword [ebp + 8]
mov dword [ebp + 0xc], eax
movq xmm2, qword [ebp]
movq qword [ebp + 4], xmm2
mov dword [ebp], ebx
mov eax, dword [esp + 0xcc]
mov eax, dword [eax + 0x3c]
cmp eax, 5
jl 0x5828a3
movd xmm3, ebx
pshufd xmm4, xmm3, 0
paddd xmm4, xmm0
movdqu xmmword [ebp + 0x10], xmm4
pshufd xmm3, xmm3, 0x50
paddd xmm3, xmm1
movq qword [ebp + 0x20], xmm3
cmp eax, 0xb
jb 0x5828a3
pshufd xmm3, xmm2, 0
paddd xmm3, xmm0
movdqu xmmword [ebp + 0x28], xmm3
pshufd xmm2, xmm2, 0x50
paddd xmm2, xmm1
movq qword [ebp + 0x38], xmm2
jmp 0x5828a3
mov edx, dword [esp + 0xd0]
mov eax, dword [edx]
xor esi, esi
cmp eax, ebx
jne 0x582985
mov eax, dword [esp + 0x48]
mov dword [ecx], eax
mov eax, dword [esp + 0x10]
shl eax, 0x19
or eax, dword [esp]
mov dword [ecx + 4], eax
mov ebx, dword [esp + 0xc8]
mov eax, dword [ebx + 0x38]
lea edi, [eax + 0x10]
cmp edi, esi
jbe 0x5828d0
mov word [ecx + 0xe], si
xor eax, eax
jmp 0x58293e
mov ebx, dword [ebx + 0x34]
mov ecx, 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 ecx, ecx
bt eax, edx
setb cl
mov dword [esp + 0x14], ecx
lea ebp, [ecx + 2]
mov ecx, edx
shl ebp, cl
add esi, edi
sub edx, ebx
mov ecx, dword [esp + 0x14]
lea edi, [ecx + edx*2]
add edi, 0xfffe
mov ecx, ebx
shl edi, cl
add esi, edi
shl edx, 0xa
or esi, edx
sub eax, ebp
mov ecx, dword [esp + 0x4c]
mov word [ecx + 0xe], si
mov ecx, ebx
shr eax, cl
mov ecx, dword [esp + 0x4c]
mov ebp, dword [esp + 0x48]
mov ebx, dword [esp]
mov dword [ecx + 8], eax
mov ecx, dword [esp + 0x10]
add ecx, ebx
cmp ebp, 5
ja 0x582960
mov eax, ebp
jmp 0x582a90
cmp ebp, 0x81
ja 0x5829b8
lea eax, [ebp - 2]
bsr edx, eax
xor edx, 0xffffffe0
mov edi, ecx
lea ecx, [edx + 0x1f]
shr eax, cl
mov ecx, edi
lea eax, [eax + edx*2]
add eax, 0x40
jmp 0x582a90
mov edi, dword [edx + 4]
mov esi, 1
mov ebx, dword [esp + 4]
cmp edi, ebx
je 0x582805
lea ecx, [ebx + 3]
mov edx, ecx
sub edx, eax
cmp edx, 6
ja 0x582d84
shl edx, 2
mov esi, 0x9750468
mov ecx, edx
jmp 0x582d97
cmp ebp, 0x841
ja 0x582a6c
lea eax, [ebp - 0x42]
bsr eax, eax
xor eax, 0xffe0
add eax, 0x2a
jmp 0x582a90
mov edi, dword [ebp + 0x60]
movzx ecx, word [edi + ecx*2]
mov edi, dword [ebp + 0x48]
mov dword [esp + 0x60], ecx
imul ecx, ebx
add ecx, dword [edi + ebx*4 + 0x20]
mov dword [esp + 0x34], edi
add ecx, dword [edi + 0xa4]
lea ebp, [ecx + ebx]
mov dword [esp + 0x30], ebx
add ebx, ecx
add ebx, 0xfffffffc
cmp ebx, ecx
mov dword [esp + 8], eax
jae 0x582c25
xor esi, esi
mov ebx, dword [esp + 0x3c]
cmp ecx, ebp
jb 0x582c5d
mov ebp, dword [esp + 0xc8]
jmp 0x582db6
mov dword [esp + 0x54], edi
mov edi, ecx
mov ecx, dword [ebp + 0x60]
movzx ecx, word [ecx + eax*2]
mov eax, dword [ebp + 0x48]
mov dword [esp + 0x30], ecx
imul ecx, edi
add ecx, dword [eax + edi*4 + 0x20]
mov dword [esp + 0x34], eax
add ecx, dword [eax + 0xa4]
lea edx, [ecx + edi]
mov dword [esp + 8], edi
add edi, ecx
add edi, 0xfffffffc
xor eax, eax
cmp edi, ecx
jae 0x582c95
mov edi, dword [esp + 0x54]
jmp 0x582cc7
mov ax, 0x15
cmp ebp, 0x1842
jb 0x582a90
xor eax, eax
cmp ebp, 0x5842
setb al
xor eax, 0x17
nop word cs:[eax + eax]
cmp ecx, 9
ja 0x582aa0
add ecx, 0xfffffffe
jmp 0x582ae0
cmp ecx, 0x85
ja 0x582ac0
add ecx, 0xfffffffa
bsr edx, ecx
xor edx, 0xffffffe0
mov edi, ecx
lea ecx, [edx + 0x1f]
shr edi, cl
lea ecx, [edi + edx*2]
add ecx, 0x42
jmp 0x582ae0
mov edx, ecx
mov cx, 0x17
cmp edx, 0x845
ja 0x582ae0
add edx, 0xffffffba
bsr ecx, edx
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 0x582b10
cmp ax, 7
ja 0x582b10
cmp cx, 0xf
ja 0x582b10
lea eax, [edx + 0x40]
cmp cx, 8
cmovae edx, eax
jmp 0x582b3e
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 ecx, dword [esp + 0x4c]
mov word [ecx + 0xc], dx
mov eax, dword [esp + 0xe0]
add dword [eax], ebp
mov edx, dword [esp + 0xc]
lea esi, [edx + ebx]
mov eax, dword [esp + 0x90]
cmp esi, eax
mov edi, eax
cmovb edi, esi
lea ebp, [edx + 2]
mov eax, ebx
shr eax, 2
mov edx, dword [esp + 4]
cmp edx, eax
jae 0x582b87
shl edx, 2
mov eax, esi
sub eax, edx
cmp ebp, eax
cmova eax, ebp
cmp edi, eax
cmovb eax, edi
mov ebp, eax
mov edx, dword [esp + 0xc]
mov eax, dword [esp + 0x78]
lea eax, [eax + ebx*2]
add eax, edx
add ecx, 0x10
mov dword [esp + 0x48], 0
cmp ebp, edi
mov dword [esp + 0x4c], ecx
mov dword [esp + 0x6c], eax
jae 0x581810
mov eax, dword [esp + 0xcc]
mov ecx, dword [eax + 0x30]
mov dword [esp + 4], ecx
mov ecx, dword [eax + 0x34]
mov dword [esp + 0x10], ecx
mov dword [esp], edi
mov edi, dword [eax + 0x44]
mov ecx, dword [eax + 0x38]
mov dword [esp + 0x14], ecx
mov eax, dword [eax + 0x48]
mov dword [esp + 8], eax
nop dword [eax + eax]
mov ecx, ebp
and ecx, dword [esp + 0xc4]
mov eax, dword [esp + 0xc0]
imul eax, dword [eax + ecx], 0x1e35a7bd
mov ecx, dword [esp + 4]
shr eax, cl
movzx edx, word [edi + eax*2]
and edx, dword [esp + 0x10]
mov ebx, eax
mov ecx, dword [esp + 0x14]
shl ebx, cl
add ebx, edx
mov ecx, dword [esp + 8]
mov dword [ecx + ebx*4], ebp
inc word [edi + eax*2]
inc ebp
cmp dword [esp], ebp
jne 0x582be0
jmp 0x581810
xor edi, edi
nop word [eax + eax]
mov esi, dword [ecx + edi]
mov eax, dword [esp + 0x40]
cmp esi, dword [eax + edi]
jne 0x582c49
lea esi, [ecx + edi]
add esi, 4
add edi, 4
cmp esi, ebx
jbe 0x582c30
mov esi, edi
add ecx, edi
mov ebx, dword [esp + 0x3c]
mov eax, dword [esp + 8]
cmp ecx, ebp
jae 0x582a1c
sub ebp, ecx
mov edi, esi
add esi, ebp
mov dword [esp + 0xc], esi
nop word [eax + eax]
mov esi, dword [esp + 0x40]
movzx ebx, byte [esi + edi]
cmp bl, byte [ecx]
jne 0x582da9
inc ecx
inc edi
dec ebp
jne 0x582c70
mov esi, dword [esp + 0xc]
mov ebp, dword [esp + 0xc8]
jmp 0x582db2
mov dword [esp + 0x60], esi
xor eax, eax
nop dword [eax + eax]
mov esi, dword [ecx + eax]
mov ebx, dword [esp + 0x40]
cmp esi, dword [ebx + eax]
jne 0x582cb9
lea esi, [ecx + eax]
add esi, 4
add eax, 4
cmp esi, edi
jbe 0x582ca0
add ecx, eax
mov esi, dword [esp + 0x60]
mov edi, dword [esp + 0x54]
mov ebx, dword [esp + 0x3c]
cmp ecx, edx
mov dword [esp + 0x3c], ebx
jae 0x582cfa
sub edx, ecx
lea ebp, [edx + eax]
nop word cs:[eax + eax]
mov ebx, dword [esp + 0x40]
movzx ebx, byte [ebx + eax]
cmp bl, byte [ecx]
jne 0x582cf3
inc ecx
inc eax
dec edx
jne 0x582ce0
mov eax, ebp
mov ebp, dword [esp + 0xc8]
mov edx, dword [esp + 0x28]
test eax, eax
je 0x581c75
mov ecx, dword [ebp + 0x50]
add ecx, eax
mov ebx, dword [esp + 8]
cmp ecx, ebx
jbe 0x581c75
mov ecx, ebx
sub ebx, eax
mov edi, dword [ebp + 0x58]
lea ecx, [ebx + ebx]
lea edx, [ecx + ecx*2]
mov ebp, dword [ebp + 0x5c]
mov ecx, edx
shrd edi, ebp, cl
mov dword [esp + 0x40], edi
mov ecx, dword [esp + 0x34]
mov edi, dword [esp + 8]
mov ch, byte [ecx + edi]
mov cl, dl
and cl, 0x1e
shr ebp, cl
test dl, 0x20
cmove ebp, dword [esp + 0x40]
mov edi, ebx
and ebp, 0x3f
lea edx, [ebx*4]
add edx, ebp
mov cl, ch
shl edx, cl
mov ebx, dword [esp + 0x3c]
add ebx, dword [esp + 0x30]
add ebx, edx
cmp ebx, dword [esp + 0x50]
jbe 0x582e83
mov ebp, dword [esp + 0xc8]
mov edx, dword [esp + 0x28]
mov edi, dword [esp + 0x54]
jmp 0x581c75
sub ecx, edi
cmp ecx, 6
ja 0x582ed0
shl ecx, 2
mov esi, 0xfdb1ace
shr esi, cl
and esi, 0xf
mov ecx, dword [esp + 0x4c]
mov ebx, dword [esp + 4]
jmp 0x582805
mov ebp, dword [esp + 0xc8]
mov esi, edi
mov ebx, dword [esp + 0x3c]
test esi, esi
mov dword [esp + 0x3c], ebx
je 0x582e68
mov ecx, dword [ebp + 0x50]
mov dword [esp + 0x38], esi
add ecx, esi
mov esi, dword [esp + 0x30]
cmp ecx, esi
jbe 0x582e68
mov eax, esi
sub eax, dword [esp + 0x38]
mov ecx, ebp
mov ebp, dword [ebp + 0x58]
mov edi, dword [ecx + 0x5c]
lea ecx, [eax + eax]
lea ecx, [ecx + ecx*2]
mov ebx, ecx
shrd ebp, edi, cl
mov ecx, dword [esp + 0x34]
mov ch, byte [ecx + esi]
mov cl, bl
and cl, 0x1e
shr edi, cl
test bl, 0x20
mov ebx, dword [esp + 0x3c]
cmove edi, ebp
and edi, 0x3f
mov ebp, dword [esp + 0x60]
lea esi, [edi + eax*4]
mov cl, ch
shl esi, cl
add ebp, ebx
add ebp, esi
cmp ebp, dword [esp + 0x50]
ja 0x582e46
mov dword [esp + 0x54], eax
imul ecx, dword [esp + 0x38], 0x87
bsr esi, ebp
imul esi, esi, 0xffffffe2
add ecx, esi
add ecx, 0x3c0
cmp ecx, 0x424
jae 0x582f07
mov ecx, dword [esp + 0x18]
mov dword [esp + 0x38], ecx
mov esi, dword [esp + 0x20]
mov ecx, dword [esp + 0x24]
mov dword [esp + 0x28], ecx
xor edi, edi
mov ebp, dword [esp + 0xc8]
jmp 0x582f2c
mov ecx, dword [esp + 0x18]
mov dword [esp + 0x38], ecx
mov esi, dword [esp + 0x20]
mov ecx, dword [esp + 0x24]
mov dword [esp + 0x28], ecx
xor edi, edi
jmp 0x58270d
mov dword [esp + 8], edi
imul ecx, eax, 0x87
bsr edx, ebx
imul edx, edx, 0xffffffe2
add ecx, edx
add ecx, 0x3c0
cmp ecx, dword [esp + 0x10]
mov ebp, dword [esp + 0xc8]
mov edx, dword [esp + 0x28]
mov edi, dword [esp + 0x54]
jb 0x581c75
mov esi, dword [esp]
inc esi
mov edx, dword [esp + 4]
mov dword [edx + 8], esi
mov dword [esp + 0x38], eax
mov esi, ebx
mov edx, ecx
mov edi, dword [esp + 8]
jmp 0x581c75
mov esi, 2
mov edx, dword [esp + 0xd0]
mov ebx, dword [esp + 4]
cmp dword [edx + 8], ebx
mov ecx, dword [esp + 0x4c]
je 0x582805
mov esi, 3
mov eax, dword [esp + 0xd0]
cmp dword [eax + 0xc], ebx
jne 0x582802
jmp 0x582805
mov edi, ebp
mov esi, dword [esp]
inc esi
mov eax, dword [esp + 4]
mov dword [esp], esi
mov dword [eax + 8], esi
mov dword [esp + 0x28], ecx
mov dword [esp + 0x10], ecx
mov ebp, dword [esp + 0xc8]
mov esi, edi
mov edi, dword [esp + 0x54]
mov eax, dword [esp + 8]
jmp 0x58270d
mov dword [esp + 0x4c], esi
mov esi, edi
mov ecx, dword [esp + 0x48]
add ecx, eax
sub ecx, esi
mov eax, dword [esp + 0xd4]
mov dword [eax], ecx
mov ecx, dword [esp + 0x4c]
sub ecx, dword [esp + 0xd8]
sar ecx, 4
mov eax, dword [esp + 0xdc]
add dword [eax], ecx
add esp, 0xac
pop esi
pop edi
pop ebx
pop ebp
ret