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

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x54
mov ecx, dword [esp + 0x70]
mov eax, dword [esp + 0x74]
mov esi, ecx
or esi, 0x100000
test eax, eax
cmove esi, ecx
lea edx, [eax - 0x435]
mov ebp, 0xfffffbcc
cmovne ebp, edx
mov edx, dword [esp + 0x6c]
mov edi, esi
shld edi, edx, 2
mov dword [esp + 0x4c], edi
or ecx, edx
setne cl
cmp eax, 2
setb bl
or bl, cl
lea eax, [edx*4]
mov dword [esp + 0x18], eax
test ebp, ebp
mov dword [esp + 0x1c], ebx
js 0x409150
mov eax, ebp
mov dword [esp + 0x24], ebp
imul ebp, ebp, 0x13441
shr ebp, 0x12
cmp eax, 4
adc ebp, 0xffffffff
mov edi, ebp
shl edi, 4
lea ecx, [edx + edx]
mov dword [esp + 0xc], ecx
mov eax, dword [edi + 0x41b1c0]
mov ebx, eax
mov dword [esp + 0x34], eax
mul ecx
mov dword [esp + 0x20], eax
mov dword [esp + 4], edx
mov eax, ebp
sub eax, dword [esp + 0x24]
mov dword [esp + 0x28], eax
mov eax, dword [edi + 0x41b1c4]
mov dword [esp + 0x10], eax
mul ecx
mov dword [esp], eax
mov ecx, edx
mov eax, dword [esp + 0x6c]
shld esi, eax, 1
mov eax, ebx
mul esi
mov dword [esp + 8], eax
mov dword [esp + 0x24], edx
mov dword [esp + 0x14], ebp
imul eax, ebp, 0x12934f
shr eax, 0x13
mov dword [esp + 0x48], eax
mov eax, dword [esp + 0x10]
mul esi
mov ebx, eax
mov eax, dword [esp + 8]
add eax, dword [esp + 4]
adc ebx, dword [esp + 0x24]
adc edx, 0
add eax, dword [esp]
mov dword [esp + 8], eax
adc ebx, ecx
adc edx, 0
mov dword [esp], edx
mov ecx, dword [edi + 0x41b1c8]
mov eax, ecx
mov ebp, dword [esp + 0xc]
mul ebp
mov dword [esp + 4], eax
mov dword [esp + 0x2c], edx
mov edi, dword [edi + 0x41b1cc]
mov dword [esp + 0x24], edi
mov eax, edi
mul ebp
mov dword [esp + 0xc], edx
mov dword [esp + 0x30], eax
mov eax, ecx
mul esi
mov dword [esp + 0x38], edx
mov ebp, eax
mov eax, edi
mul esi
mov edi, edx
add ebp, dword [esp + 0x2c]
adc eax, dword [esp + 0x38]
adc edi, 0
add ebp, dword [esp + 0x30]
adc eax, dword [esp + 0xc]
adc edi, 0
mov edx, dword [esp + 4]
add edx, ebx
adc ebp, dword [esp]
adc eax, 0
adc edi, 0
mov esi, edx
mov dword [esp + 0x40], ecx
add esi, ecx
mov ebx, ebp
adc ebx, dword [esp + 0x24]
mov ecx, dword [esp + 0x20]
add ecx, dword [esp + 0x34]
mov ecx, dword [esp + 8]
adc ecx, dword [esp + 0x10]
adc esi, 0
adc ebx, 0
mov dword [esp + 4], edx
cmp esi, edx
mov ecx, ebx
mov dword [esp], ebp
sbb ecx, ebp
mov dword [esp + 0x3c], eax
adc eax, 0
mov dword [esp + 0xc], edi
adc edi, 0
mov ecx, dword [esp + 0x28]
mov esi, dword [esp + 0x48]
lea ebp, [ecx + esi]
mov ecx, 7
sub ecx, ebp
shld edi, eax, cl
shl eax, cl
mov dword [esp + 0x44], ecx
test cl, 0x20
cmovne edi, eax
mov ecx, 0
cmovne eax, ecx
mov ecx, dword [esp + 0x28]
add ecx, esi
add ecx, 0x19
mov dword [esp + 0x30], ecx
shr ebx, cl
or ebx, eax
cmp byte [esp + 0x1c], 0
mov dword [esp + 0x2c], ebx
mov dword [esp + 0x38], edi
je 0x409347
mov edx, dword [esp + 4]
mov eax, edx
sub eax, dword [esp + 0x40]
mov ecx, dword [esp]
mov edi, ecx
sbb edi, dword [esp + 0x24]
mov ebp, dword [esp + 0x20]
cmp ebp, dword [esp + 0x34]
mov ebp, dword [esp + 8]
sbb ebp, dword [esp + 0x10]
sbb eax, 0
sbb edi, 0
cmp edx, eax
mov eax, ecx
sbb eax, edi
mov esi, dword [esp + 0x3c]
mov eax, esi
sbb eax, 0
mov ebx, dword [esp + 0xc]
sbb ebx, 0
mov ecx, dword [esp + 0x44]
shld ebx, eax, cl
shl eax, cl
test cl, 0x20
mov ebp, ecx
cmovne ebx, eax
mov ecx, 0
cmovne eax, ecx
mov ecx, dword [esp + 0x30]
shr edi, cl
mov ecx, ebp
jmp 0x4093e9
imul ecx, ebp, 0xfff4d105
shr ecx, 0x14
xor eax, eax
cmp ebp, 0xffffffff
setne al
sub ecx, eax
add ebp, ecx
imul edi, ebp, 0xffed6cb1
shr edi, 0x13
mov eax, 0x41c400
mov dword [esp + 0x24], ebp
shl ebp, 4
mov dword [esp], ebp
sub eax, ebp
lea ebp, [edx + edx]
mov eax, dword [eax]
mov dword [esp + 0x10], eax
mul ebp
mov dword [esp + 0x20], eax
mov dword [esp + 0x30], edx
mov eax, 0x41c404
sub eax, dword [esp]
mov eax, dword [eax]
mov dword [esp + 4], eax
mul ebp
mov dword [esp + 0x34], eax
mov dword [esp + 0x14], edx
mov eax, dword [esp + 0x6c]
shld esi, eax, 1
mov eax, dword [esp + 0x10]
mul esi
mov dword [esp + 0xc], eax
mov dword [esp + 0x2c], edx
mov dword [esp + 0x28], ecx
mov dword [esp + 0x48], edi
sub ecx, edi
mov dword [esp + 8], ecx
mov eax, dword [esp + 4]
mul esi
mov ecx, dword [esp + 0xc]
add ecx, dword [esp + 0x30]
adc eax, dword [esp + 0x2c]
adc edx, 0
add ecx, dword [esp + 0x34]
mov dword [esp + 0xc], ecx
adc eax, dword [esp + 0x14]
mov dword [esp + 0x34], eax
adc edx, 0
mov dword [esp + 0x14], edx
mov eax, 0x41c408
mov ecx, dword [esp]
sub eax, ecx
mov ebx, dword [eax]
mov eax, ebx
mov edi, ebp
mul ebp
mov ebp, eax
mov dword [esp + 0x2c], edx
mov eax, 0x41c40c
sub eax, ecx
mov ecx, dword [eax]
mov eax, ecx
mul edi
mov dword [esp], edx
mov dword [esp + 0x30], eax
mov eax, ebx
mul esi
mov edi, eax
mov dword [esp + 0x38], edx
mov eax, ecx
mul esi
mov esi, eax
add edi, dword [esp + 0x2c]
adc esi, dword [esp + 0x38]
adc edx, 0
add edi, dword [esp + 0x30]
adc esi, dword [esp]
adc edx, 0
add ebp, dword [esp + 0x34]
adc edi, dword [esp + 0x14]
adc esi, 0
adc edx, 0
mov eax, ebp
mov dword [esp + 0x40], ebx
add eax, ebx
mov ebx, edi
mov dword [esp + 0x3c], ecx
adc ebx, ecx
mov ecx, dword [esp + 0x20]
add ecx, dword [esp + 0x10]
mov ecx, dword [esp + 0xc]
adc ecx, dword [esp + 4]
adc eax, 0
adc ebx, 0
mov dword [esp + 0x44], ebp
cmp eax, ebp
mov eax, ebx
mov dword [esp], edi
sbb eax, edi
mov dword [esp + 0x14], esi
mov edi, esi
adc edi, 0
mov eax, edx
adc eax, 0
mov ecx, 9
mov esi, dword [esp + 8]
sub ecx, esi
shld eax, edi, cl
shl edi, cl
mov dword [esp + 0x38], ecx
test cl, 0x20
cmovne eax, edi
mov dword [esp + 0x34], eax
mov eax, 0
cmovne edi, eax
mov dword [esp + 0x30], edi
mov ecx, esi
add ecx, 0x17
mov dword [esp + 8], ecx
shr ebx, cl
mov dword [esp + 0x2c], ebx
cmp byte [esp + 0x1c], 0
je 0x40955c
mov esi, dword [esp + 0x44]
mov eax, esi
sub eax, dword [esp + 0x40]
mov ecx, dword [esp]
mov edi, ecx
sbb edi, dword [esp + 0x3c]
mov ebx, dword [esp + 0x20]
cmp ebx, dword [esp + 0x10]
mov ebx, dword [esp + 0xc]
sbb ebx, dword [esp + 4]
sbb eax, 0
sbb edi, 0
cmp esi, eax
mov eax, ecx
sbb eax, edi
mov eax, dword [esp + 0x14]
sbb eax, 0
mov esi, edx
sbb edx, 0
mov ebx, dword [esp + 0x38]
mov ecx, ebx
shld edx, eax, cl
shl eax, cl
test bl, 0x20
cmovne edx, eax
mov dword [esp + 0x10], edx
mov ecx, 0
cmovne eax, ecx
mov ecx, dword [esp + 8]
shr edi, cl
mov ebp, dword [esp + 0x28]
mov ecx, ebx
jmp 0x409606
mov edi, dword [esp + 4]
mov ecx, edi
mov eax, dword [esp + 8]
shld ecx, eax, 1
mov edx, ecx
mov esi, dword [esp + 0x20]
shld eax, esi, 1
mov ebp, dword [esp]
mov ecx, ebp
shld ecx, edi, 1
add esi, esi
mov dword [esp + 0x20], esi
mov ebx, dword [esp + 0xc]
mov esi, dword [esp + 0x3c]
shld ebx, esi, 1
cmp edx, edi
mov edi, ecx
sbb edi, ebp
setb byte [esp + 8]
mov ebp, edx
mov dword [esp + 0x50], edx
sub ebp, dword [esp + 0x40]
mov edi, ecx
sbb edi, dword [esp + 0x24]
mov edx, dword [esp + 0x20]
cmp edx, dword [esp + 0x34]
sbb eax, dword [esp + 0x10]
sbb ebp, 0
sbb edi, 0
cmp dword [esp + 0x50], ebp
sbb ecx, edi
movzx eax, byte [esp + 8]
lea eax, [eax + esi*2]
sbb eax, 0
sbb ebx, 0
mov ecx, dword [esp + 0x28]
mov ebp, dword [esp + 0x48]
add ebp, ecx
add ebp, 0x7a
mov cl, 0x80
mov edx, ebp
sub cl, dl
shld ebx, eax, cl
shl eax, cl
test cl, 0x20
cmovne ebx, eax
mov ecx, 0
cmovne eax, ecx
mov ecx, ebp
shr edi, cl
mov ecx, dword [esp + 0x44]
or edi, eax
mov eax, dword [esp + 0xc]
shld eax, esi, cl
shl esi, cl
test cl, 0x20
cmovne eax, esi
mov dword [esp + 0xc], eax
mov edx, 0
cmovne esi, edx
mov ecx, dword [esp + 0x30]
mov ebp, dword [esp]
shr ebp, cl
or ebp, esi
movd xmm1, edi
movd xmm0, ebx
punpckldq xmm1, xmm0
mov eax, dword [esp + 0x2c]
movd xmm0, eax
mov eax, dword [esp + 0x38]
movd xmm2, eax
punpckldq xmm0, xmm2
punpcklqdq xmm0, xmm1
cmp dword [esp + 0x14], 0x15
ja 0x409555
mov dword [esp], ebp
mov esi, dword [esp + 0x18]
and esi, 0xfffffffc
xor eax, eax
mov ebx, 0xcccccccc
inc ebx
sete al
mov edi, eax
mov eax, esi
mul ebx
mov dword [esp + 4], edx
mov eax, esi
mov ecx, 0xcccccccc
mul ecx
mov dword [esp + 0x10], eax
mov dword [esp + 8], edx
mov ebp, esi
imul ebp, edi
mov ecx, dword [esp + 0x4c]
mov eax, ecx
mul ebx
mov esi, eax
mov ebx, edx
add ebp, dword [esp + 4]
imul edi, ecx
mov eax, ecx
mov ecx, 0xcccccccc
mul ecx
add esi, ebp
mov ebp, dword [esp + 0x18]
adc ebx, edi
and esi, 0xfffffff0
add esi, dword [esp + 0x10]
mov ecx, dword [esp + 8]
adc ecx, 0
add ebx, eax
adc edx, 0
add ebx, ecx
adc edx, 0
shld edx, ebx, 0x1e
lea eax, [edx + edx*4]
cmp eax, ebp
jne 0x4096e6
xor edx, edx
dec edx
mov esi, dword [esp + 0x4c]
mov dword [esp + 0x18], ebp
mov dword [esp + 8], edx
xor ebx, ebx
mov ecx, 0xcccccccc
inc ecx
sete bl
mov eax, ebp
mul ecx
mov dword [esp + 0x1c], edx
mov eax, ebp
mov edx, 0xcccccccc
mul edx
mov dword [esp + 4], eax
mov dword [esp + 0x10], edx
mov edi, ebp
imul edi, ebx
mov eax, esi
mul ecx
mov ebp, esi
mov esi, eax
mov ecx, edx
add edi, dword [esp + 0x1c]
imul ebx, ebp
mov eax, ebp
mov edx, 0xcccccccc
mul edx
add esi, edi
adc ecx, ebx
and esi, 0xfffffffc
add esi, dword [esp + 4]
mov edi, dword [esp + 0x10]
adc edi, 0
add ecx, eax
mov esi, edx
mov edx, dword [esp + 8]
adc esi, 0
add ecx, edi
adc esi, 0
shrd ecx, esi, 2
shr esi, 2
lea eax, [ecx + ecx*4]
inc edx
cmp eax, dword [esp + 0x18]
mov ebp, ecx
je 0x4094c7
cmp edx, dword [esp + 0x14]
setae dl
xor eax, eax
jmp 0x409840
xor eax, eax
jmp 0x409843
mov edi, dword [esp + 0x44]
mov ecx, edi
mov eax, dword [esp + 0xc]
shld ecx, eax, 1
mov dword [esp + 0x50], ecx
mov ebx, dword [esp + 0x20]
shld eax, ebx, 1
neg dword [esp + 0x48]
mov ecx, dword [esp]
shld ecx, edi, 1
add ebx, ebx
mov ebp, edx
mov esi, dword [esp + 0x14]
shld edx, esi, 1
mov esi, dword [esp + 0x50]
cmp esi, edi
mov edi, ecx
sbb edi, dword [esp]
setb byte [esp + 0x20]
mov dword [esp + 0xc], ebp
mov ebp, esi
sub ebp, dword [esp + 0x40]
mov edi, ecx
sbb edi, dword [esp + 0x3c]
cmp ebx, dword [esp + 0x10]
sbb eax, dword [esp + 4]
sbb ebp, 0
sbb edi, 0
cmp esi, ebp
mov esi, dword [esp + 0xc]
movzx eax, byte [esp + 0x20]
mov ebx, dword [esp + 0x14]
lea eax, [eax + ebx*2]
sbb ecx, edi
sbb eax, 0
sbb edx, 0
mov ebp, dword [esp + 0x28]
mov ecx, dword [esp + 0x48]
lea ebx, [ecx + ebp]
add ebx, 0x78
mov cl, 0x80
sub cl, bl
shld edx, eax, cl
shl eax, cl
test cl, 0x20
cmovne edx, eax
mov dword [esp + 0x10], edx
mov ecx, 0
cmovne eax, ecx
mov ecx, ebx
shr edi, cl
mov ecx, dword [esp + 0x38]
mov edx, dword [esp + 0x14]
shld esi, edx, cl
shl edx, cl
or edi, eax
mov eax, dword [esp + 0x30]
or eax, dword [esp + 0x2c]
mov ebx, eax
xor eax, eax
test cl, 0x20
cmovne esi, edx
mov dword [esp + 0xc], esi
cmove eax, edx
mov ecx, dword [esp + 8]
mov edx, dword [esp]
shr edx, cl
or edx, eax
cmp ebp, 1
mov ecx, ebp
mov ebp, edx
ja 0x409687
mov dword [esp], ebp
mov eax, dword [esp + 0x6c]
and eax, 1
sete cl
sub ebx, eax
movd xmm0, ebx
mov eax, dword [esp + 0x34]
sbb eax, 0
movd xmm1, eax
movd xmm2, edi
mov eax, dword [esp + 0x1c]
and al, cl
mov dword [esp + 0x1c], eax
punpckldq xmm0, xmm1
movd xmm1, dword [esp + 0x10]
punpckldq xmm2, xmm1
punpcklqdq xmm0, xmm2
mov al, 1
mov dword [esp + 8], eax
jmp 0x409968
xor edx, edx
movd xmm1, edi
movd xmm0, dword [esp + 0x10]
punpckldq xmm1, xmm0
movd xmm0, ebx
movd xmm2, dword [esp + 0x34]
punpckldq xmm0, xmm2
punpcklqdq xmm0, xmm1
cmp ecx, 0x3e
ja 0x4096d7
dec cl
xor eax, eax
dec eax
xor esi, esi
mov edx, eax
shl edx, cl
test cl, 0x20
cmovne eax, edx
cmovne edx, esi
not eax
mov ecx, dword [esp + 0x4c]
and ecx, eax
not edx
mov eax, dword [esp + 0x18]
and eax, edx
or eax, ecx
sete dl
xor eax, eax
mov ecx, dword [esp + 0x24]
mov dword [esp + 0x14], ecx
jmp 0x409843
mov eax, dword [esp + 0x6c]
test al, 1
mov esi, dword [esp + 0x4c]
je 0x4097ac
or ebp, 2
xor edx, edx
dec edx
mov dword [esp + 8], edx
xor ebx, ebx
mov ecx, 0xcccccccc
inc ecx
sete bl
mov eax, ebp
mul ecx
mov dword [esp + 0x1c], edx
mov eax, ebp
mov edx, 0xcccccccc
mul edx
mov dword [esp + 4], eax
mov dword [esp + 0x10], edx
mov dword [esp + 0x18], ebp
imul ebp, ebx
mov eax, esi
mul ecx
mov edi, esi
mov esi, eax
mov ecx, edx
add ebp, dword [esp + 0x1c]
imul ebx, edi
mov eax, edi
mov edx, 0xcccccccc
mul edx
add esi, ebp
adc ecx, ebx
and esi, 0xfffffffc
add esi, dword [esp + 4]
mov edi, dword [esp + 0x10]
adc edi, 0
add ecx, eax
mov esi, edx
mov edx, dword [esp + 8]
adc esi, 0
add ecx, edi
adc esi, 0
shrd ecx, esi, 2
shr esi, 2
lea eax, [ecx + ecx*4]
inc edx
cmp eax, dword [esp + 0x18]
mov ebp, ecx
je 0x4096fc
xor eax, eax
cmp edx, dword [esp + 0x14]
setae al
mov ecx, dword [esp + 0x2c]
sub ecx, eax
mov eax, dword [esp + 0x38]
sbb eax, 0
movd xmm1, ecx
movd xmm2, eax
punpcklqdq xmm2, xmm1
shufps xmm2, xmm0, 0xe2
xor edx, edx
xor eax, eax
movaps xmm0, xmm2
jmp 0x409840
movzx ebx, byte [esp + 0x1c]
not ebx
add ebx, ebp
adc esi, 0xffffffff
xor ecx, ecx
dec ecx
mov dword [esp + 0x18], ecx
xor ecx, ecx
mov edi, 0xcccccccc
inc edi
sete cl
mov dword [esp + 8], ebx
mov eax, ebx
mul edi
mov dword [esp + 0x1c], edx
mov eax, ebx
mov edx, 0xcccccccc
mul edx
mov dword [esp + 4], eax
mov dword [esp + 0x10], edx
mov ebp, ebx
imul ebp, ecx
mov eax, esi
mul edi
mov edi, eax
mov ebx, edx
add ebp, dword [esp + 0x1c]
imul ecx, esi
mov eax, esi
mov edx, 0xcccccccc
mul edx
add edi, ebp
adc ebx, ecx
mov ecx, dword [esp + 0x18]
and edi, 0xfffffffc
add edi, dword [esp + 4]
mov edi, dword [esp + 0x10]
adc edi, 0
add ebx, eax
mov esi, edx
adc esi, 0
add ebx, edi
adc esi, 0
shrd ebx, esi, 2
shr esi, 2
lea eax, [ebx + ebx*4]
inc ecx
cmp eax, dword [esp + 8]
je 0x4097bb
cmp ecx, dword [esp + 0x14]
setae al
xor edx, edx
mov ebp, dword [esp]
test dl, dl
jne 0x409955
test al, al
jne 0x409955
movdqa xmm2, xmm0
psrlq xmm2, 2
movdqa xmm3, xmm0
psrlq xmm3, 0x22
movdqa xmm4, xmmword [0x415670]
movdqa xmm1, xmm2
pmuludq xmm1, xmm4
movdqa xmm5, xmmword [0x415680]
pmuludq xmm2, xmm5
pmuludq xmm4, xmm3
pmuludq xmm3, xmm5
psrlq xmm1, 0x20
paddq xmm1, xmm4
movdqa xmm4, xmm1
psrlq xmm4, 0x20
pand xmm1, xmmword [0x415690]
paddq xmm4, xmm3
paddq xmm1, xmm2
psrlq xmm1, 0x20
paddq xmm1, xmm4
psrlq xmm1, 2
pshufd xmm2, xmm1, 0x55
movd eax, xmm2
movd ecx, xmm1
pshufd xmm2, xmm1, 0xff
movd esi, xmm2
pshufd xmm2, xmm1, 0xee
movd edi, xmm2
xor edx, edx
cmp edi, ecx
sbb esi, eax
jae 0x409cb9
mov esi, dword [esp + 0xc]
mov ecx, esi
mov dword [esp], ebp
shld ecx, ebp, 0x1e
mov ebx, 0x5c28f5c3
mov eax, ecx
mul ebx
mov edi, edx
mov edx, 0x28f5c28f
mov eax, ecx
mul edx
mov ecx, eax
mov dword [esp + 0x18], edx
shr esi, 2
mov eax, esi
mul ebx
mov ebx, edx
mov ebp, eax
mov eax, esi
mov edx, 0x28f5c28f
mul edx
add ebp, edi
adc eax, ebx
adc edx, 0
add ebp, ecx
adc eax, dword [esp + 0x18]
adc edx, 0
shrd eax, edx, 2
shr edx, 2
mov dword [esp + 0xc], edx
imul ecx, eax, 0xffffff9c
add ecx, dword [esp]
cmp ecx, 0x32
setae dl
mov dword [esp + 0x18], 2
mov ebp, eax
jmp 0x409cc5
mov dword [esp + 8], edx
mov dword [esp + 0x1c], eax
mov dword [esp], ebp
mov eax, dword [esp + 0x14]
mov dword [esp + 0x24], eax
xor ebx, ebx
movdqa xmm1, xmmword [0x4156a0]
movdqa xmm2, xmmword [0x4156b0]
movdqa xmm3, xmmword [0x4156c0]
xor esi, esi
movdqa xmm4, xmm0
movdqa xmm6, xmm0
psrlq xmm6, 0x20
pmuludq xmm4, xmm1
movdqa xmm5, xmm0
pmuludq xmm5, xmm2
movdqa xmm7, xmm6
pmuludq xmm7, xmm1
pmuludq xmm6, xmm2
psrlq xmm4, 0x20
paddq xmm4, xmm7
movdqa xmm7, xmm4
psrlq xmm7, 0x20
paddq xmm7, xmm6
pand xmm4, xmm3
paddq xmm4, xmm5
psrlq xmm4, 0x20
paddq xmm4, xmm7
psrlq xmm4, 3
pshufd xmm5, xmm4, 0x55
movd eax, xmm5
movd ecx, xmm4
pshufd xmm5, xmm4, 0xff
movd edx, xmm5
pshufd xmm5, xmm4, 0xee
movd edi, xmm5
cmp edi, ecx
sbb edx, eax
mov dword [esp + 0x18], esi
mov dword [esp + 0x10], ebx
jae 0x409ad0
add edi, edi
mov dword [esp + 4], edi
xor ebx, ebx
mov ecx, 0xcccccccc
inc ecx
sete bl
mov edi, dword [esp]
mov eax, edi
mul ecx
mov dword [esp + 0x28], edx
mov dword [esp], edi
mov eax, edi
mov edx, 0xcccccccc
mul edx
mov dword [esp + 0x20], eax
mov dword [esp + 0x14], edx
imul edi, ebx
mov esi, dword [esp + 0xc]
mov eax, esi
mul ecx
mov ebp, eax
mov ecx, edx
add edi, dword [esp + 0x28]
imul ebx, esi
mov eax, esi
mov edx, 0xcccccccc
mul edx
add ebp, edi
adc ecx, ebx
and ebp, 0xfffffffc
add ebp, dword [esp + 0x20]
mov esi, dword [esp + 0x14]
adc esi, 0
add ecx, eax
adc edx, 0
add ecx, esi
adc edx, 0
mov eax, edx
shld eax, ecx, 0x1d
shr ecx, 2
and ecx, 0xfffffffe
lea ecx, [ecx + ecx*4]
neg ecx
add cl, byte [esp]
pshufd xmm0, xmm0, 0xee
movd edi, xmm0
mov esi, dword [esp + 4]
lea esi, [esi + esi*4]
shr edx, 3
mov dword [esp + 0xc], edx
cmp esi, edi
mov esi, dword [esp + 0x18]
sete dl
mov ebx, dword [esp + 0x1c]
and bl, dl
mov dword [esp + 0x1c], ebx
cmp byte [esp + 0x10], 0
sete dl
mov ebx, dword [esp + 8]
and bl, dl
mov dword [esp + 8], ebx
inc esi
mov ebx, ecx
mov dword [esp], eax
movdqa xmm0, xmm4
jmp 0x409988
mov edx, dword [esp + 8]
and dl, 1
mov ecx, dword [esp + 0x1c]
xor cl, 1
pshufd xmm1, xmm0, 0xff
movd edi, xmm1
pshufd xmm0, xmm0, 0xee
movd dword [esp + 4], xmm0
test cl, 1
jne 0x409c4f
mov dword [esp + 8], edx
mov dword [esp + 0x1c], ecx
mov ebp, edi
mov eax, dword [esp + 4]
mov dword [esp + 4], eax
xor ebx, ebx
mov esi, 0xcccccccc
inc esi
sete bl
mul esi
mov ecx, edx
mov edi, dword [esp + 4]
mov eax, dword [esp + 4]
mov edx, 0xcccccccc
mul edx
mov dword [esp + 0x20], eax
mov dword [esp + 0x14], edx
imul edi, ebx
add edi, ecx
mov eax, ebp
mul esi
mov esi, eax
mov eax, ebp
mov ebp, edx
imul ebx, eax
mov dword [esp + 0x28], eax
mov ecx, 0xcccccccc
mul ecx
mov ecx, edx
add esi, edi
adc ebp, ebx
and esi, 0xfffffffc
add esi, dword [esp + 0x20]
mov edx, dword [esp + 0x14]
adc edx, 0
add ebp, eax
adc ecx, 0
add ebp, edx
adc ecx, 0
shrd ebp, ecx, 3
lea eax, [ebp*2]
lea eax, [eax + eax*4]
cmp eax, dword [esp + 4]
jne 0x409c55
shr ecx, 3
xor eax, eax
mov esi, 0xcccccccc
inc esi
sete al
mov dword [esp + 4], eax
mov edi, dword [esp]
mov eax, edi
mul esi
mov dword [esp + 0x28], edx
mov eax, edi
mov edx, 0xcccccccc
mul edx
mov dword [esp + 0x20], eax
mov dword [esp + 0x14], edx
mov ebx, dword [esp]
imul ebx, dword [esp + 4]
mov eax, dword [esp + 0xc]
mul esi
mov edi, eax
mov esi, edx
add ebx, dword [esp + 0x28]
mov eax, dword [esp + 4]
mov edx, dword [esp + 0xc]
imul eax, edx
mov dword [esp + 4], eax
mov eax, edx
mov edx, 0xcccccccc
mul edx
add edi, ebx
adc esi, dword [esp + 4]
and edi, 0xfffffffc
add edi, dword [esp + 0x20]
mov ebx, dword [esp + 0x14]
adc ebx, 0
add esi, eax
mov edi, edx
adc edi, 0
add esi, ebx
adc edi, 0
mov eax, edi
shld eax, esi, 0x1d
mov dword [esp + 4], eax
shr esi, 2
and esi, 0xfffffffe
lea edx, [esi + esi*4]
neg edx
add dl, byte [esp]
shr edi, 3
mov dword [esp + 0xc], edi
cmp byte [esp + 0x10], 0
sete al
cmp byte [esp + 8], 0
setne bl
and bl, al
mov dword [esp + 8], ebx
inc dword [esp + 0x18]
mov eax, ebp
mov ebp, ecx
mov dword [esp + 0x10], edx
mov ecx, dword [esp + 4]
mov dword [esp], ecx
jmp 0x409b09
mov ebp, dword [esp + 0xc]
jmp 0x409c6d
mov edi, dword [esp + 0x28]
mov ebp, dword [esp + 0xc]
mov ecx, dword [esp + 0x1c]
mov esi, dword [esp + 0x18]
mov edx, dword [esp + 8]
mov ebx, dword [esp + 0x10]
mov eax, dword [esp + 0x6c]
test al, 1
sete al
xor cl, 1
test al, cl
jne 0x409c95
mov ch, 1
mov eax, dword [esp + 4]
xor eax, dword [esp]
xor edi, ebp
or edi, eax
jne 0x409c95
mov eax, dword [esp + 0x68]
mov ebx, dword [esp]
jmp 0x409cb0
test dl, dl
sete cl
cmp bl, 5
setne ch
setae dl
or ch, cl
mov ebx, dword [esp]
or ch, bl
and ch, dl
mov eax, dword [esp + 0x68]
mov edx, dword [esp + 0x24]
jmp 0x409e17
mov dword [esp + 0x18], 0
movdqa xmm1, xmm0
movdqa xmm0, xmmword [0x4156a0]
movdqa xmm2, xmmword [0x4156b0]
movdqa xmm3, xmmword [0x4156c0]
movdqa xmm4, xmm1
movdqa xmm6, xmm1
psrlq xmm6, 0x20
pmuludq xmm4, xmm0
movdqa xmm5, xmm1
pmuludq xmm5, xmm2
movdqa xmm7, xmm6
pmuludq xmm7, xmm0
pmuludq xmm6, xmm2
psrlq xmm4, 0x20
paddq xmm4, xmm7
movdqa xmm7, xmm4
psrlq xmm7, 0x20
paddq xmm7, xmm6
pand xmm4, xmm3
paddq xmm4, xmm5
psrlq xmm4, 0x20
paddq xmm4, xmm7
psrlq xmm4, 3
pshufd xmm5, xmm4, 0x55
movd eax, xmm5
movd ecx, xmm4
pshufd xmm5, xmm4, 0xff
movd esi, xmm5
pshufd xmm5, xmm4, 0xee
movd edi, xmm5
cmp edi, ecx
sbb esi, eax
jae 0x409de6
xor ebx, ebx
mov ecx, 0xcccccccc
inc ecx
sete bl
mov edi, ebp
mov dword [esp], ebp
mov eax, ebp
mul ecx
mov dword [esp + 4], edx
mov eax, ebp
mov edx, 0xcccccccc
mul edx
mov dword [esp + 0x10], eax
mov dword [esp + 8], edx
imul edi, ebx
mov esi, dword [esp + 0xc]
mov eax, esi
mul ecx
mov ebp, eax
mov ecx, edx
add edi, dword [esp + 4]
imul ebx, esi
mov eax, esi
mov edx, 0xcccccccc
mul edx
add ebp, edi
adc ecx, ebx
and ebp, 0xfffffffc
add ebp, dword [esp + 0x10]
mov esi, dword [esp + 8]
adc esi, 0
add ecx, eax
adc edx, 0
add ecx, esi
adc edx, 0
shrd ecx, edx, 3
lea eax, [ecx + ecx]
lea eax, [eax + eax*4]
mov esi, dword [esp]
sub esi, eax
shr edx, 3
mov dword [esp + 0xc], edx
cmp esi, 5
setae dl
inc dword [esp + 0x18]
mov ebp, ecx
movdqa xmm1, xmm4
jmp 0x409ce1
pshufd xmm0, xmm1, 0xee
movd eax, xmm0
pshufd xmm0, xmm1, 0xff
movd ecx, xmm0
mov esi, dword [esp + 0xc]
xor ecx, esi
mov ebx, ebp
mov ebp, esi
xor eax, ebx
or eax, ecx
sete ch
or ch, dl
mov edx, dword [esp + 0x14]
mov eax, dword [esp + 0x68]
mov esi, dword [esp + 0x18]
movzx ecx, ch
and ecx, 1
add ecx, ebx
adc ebp, 0
add edx, esi
mov dword [eax + 8], edx
mov dword [eax], ecx
mov dword [eax + 4], ebp
add esp, 0x54
pop esi
pop edi
pop ebx
pop ebp
ret