Function at 0x40fe70
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x18
push ebx
mov ebx, dword [0x46ed48]
cmp byte [ebx + 0xb3], 0
je 0x40fe93
test byte [ebx + 0xc], 2
jne 0x40fe93
mov byte [ebx + 0xb3], 0
push esi
call fcn.00415af0
movss xmm0, dword [ebx + 0x18]
inc dword [ebx + 0x19b0]
cvtps2pd xmm0, xmm0
mov byte [ebx + 0x19bc], 1
mov dword [ebx + 0x2d84], 0
mov dword [ebx + 0x1a04], 0
addsd xmm0, qword [ebx + 0x19a8]
movsd qword [ebx + 0x19a8], xmm0
mov ecx, dword [ebx + 0x2d98]
test ecx, ecx
jns 0x40fef8
mov eax, ecx
cdq
sub eax, edx
sar eax, 1
add eax, ecx
xor ecx, ecx
test eax, eax
cmovg ecx, eax
push ecx
lea ecx, [ebx + 0x2d94]
call fcn.00417080
mov dword [ebx + 0x2d94], 0
mov ecx, 0x78
mov eax, dword [ebx + 0x2ff0]
movss xmm1, dword [ebx + 0x18]
movaps xmm0, xmm1
movss xmm2, dword [0x45b844]
subss xmm0, dword [ebx + eax*4 + 0x2e10]
addss xmm0, dword [ebx + 0x2ff4]
movss dword [ebx + 0x2ff4], xmm0
xorps xmm0, xmm0
movss dword [ebx + eax*4 + 0x2e10], xmm1
mov eax, dword [ebx + 0x2ff0]
inc eax
movss xmm1, dword [ebx + 0x2ff4]
cdq
idiv ecx
comiss xmm1, xmm0
mov dword [ebx + 0x2ff0], edx
movss xmm0, dword [0x45b89c]
movss dword [ebp - 8], xmm0
jbe 0x40ff7b
divss xmm1, dword [0x45b888]
movaps xmm0, xmm2
divss xmm0, xmm1
mov eax, dword [ebx + 0x98]
movss dword [ebx + 0x360], xmm0
mov byte [eax], 1
mov ecx, dword [0x46ed48]
mov eax, dword [ecx + 0xa4]
test eax, eax
jne 0x40ffa7
mov eax, dword [ecx + 0x98]
mov eax, dword [eax + 0x3c]
mov eax, dword [eax]
push eax
call fcn.00413cc0
movss xmm0, dword [ebx + 0x10]
lea ecx, [ebx + 0x18d8]
movss xmm1, dword [ebx + 0x14]
mov dword [ebx + 0x18f0], 0
mov dword [ebx + 0x18f4], 0
movss dword [ebx + 0x18f8], xmm0
movss dword [ebx + 0x18fc], xmm1
movss xmm0, dword [ebx + 0x15c8]
mov eax, dword [ebx + 0x15c4]
mov dword [ebx + 0x18e8], eax
movss dword [esp], xmm0
call fcn.0041d8d0
xor eax, eax
mov dword [ebx + 0x1900], 0
cmp byte [ebx + 0x15c0], al
je 0x410022
mov dword [ebx + 0x1900], 1
mov eax, 1
cmp byte [ebx + 0x15c1], 0
je 0x410034
or eax, 2
mov dword [ebx + 0x1900], eax
test byte [ebx + 0xc], 8
je 0x410043
or eax, 4
mov dword [ebx + 0x1900], eax
lea ecx, [ebx + 0x1cb4]
call fcn.00419e90
mov eax, dword [ebx + 0x98]
lea ecx, [ebx + 0x1cb4]
push dword [eax + 8]
call fcn.0041c890
lea ecx, [ebx + 0x1cb4]
call fcn.0041c7a0
lea ecx, [ebx + 0x1d2c]
call fcn.00419e90
mov eax, dword [ebx + 0x98]
lea ecx, [ebx + 0x1d2c]
push dword [eax + 8]
call fcn.0041c890
lea ecx, [ebx + 0x1d2c]
call fcn.0041c7a0
mov byte [ebx + 0x1c6c], 0
mov dword [ebx + 0x1c70], 0
mov dword [ebx + 0x1c78], 0
mov dword [ebx + 0x1c7c], 0
mov dword [ebx + 0x1c74], 0
mov dword [ebx + 0x1c90], 0
mov dword [ebx + 0x1c94], 0
mov dword [ebx + 0x1c88], 0
mov dword [ebx + 0x1c8c], 0
mov dword [ebx + 0x1c80], 0
mov dword [ebx + 0x1c84], 0
cmp byte [ebx + 0x1da8], 0
je 0x41013c
mov eax, dword [ebx + 0x1dc0]
cmp eax, dword [ebx + 0x1a3c]
jne 0x41013c
mov ecx, dword [0x46ed48]
cmp dword [ecx + 0x1a3c], eax
jne 0x41012d
mov dword [ecx + 0x1a40], eax
cmp dword [ecx + 0x1a74], eax
jne 0x41013c
mov byte [ecx + 0x1a78], 1
cmp dword [ebx + 0x1a30], 0
lea eax, [ebx + 0x1a28]
mov ecx, dword [eax]
jne 0x410159
mov dword [ebx + 0x1a34], 0
jmp 0x410169
mov edx, ecx
mov esi, eax
test ecx, ecx
je 0x410177
cmp dword [ebx + 0x1a3c], ecx
jne 0x410177
mov dword [ebx + 0x1a38], 0
mov edx, ecx
mov esi, eax
movss xmm1, dword [ebx + 0x18]
test edx, edx
je 0x4101ae
movaps xmm0, xmm1
addss xmm0, dword [ebx + 0x1a34]
movss dword [ebx + 0x1a34], xmm0
cmp dword [ebx + 0x1a3c], edx
je 0x4101ae
movaps xmm0, xmm1
addss xmm0, dword [ebx + 0x1a38]
movss dword [ebx + 0x1a38], xmm0
mov eax, dword [ebx + 0x1a3c]
movaps xmm2, xmm1
mov dword [ebx + 0x1a30], edx
mov dword [esi], 0
mov byte [ebx + 0x1a2c], 0
cmp dword [ebx + 0x1a40], eax
je 0x4101ef
cmp dword [ebx + 0x1a74], eax
jne 0x4101ef
test eax, eax
je 0x4101ef
push 0
push 0
call fcn.00413b10
movss xmm2, dword [ebx + 0x18]
add esp, 8
mov ecx, dword [ebx + 0x1a3c]
test ecx, ecx
je 0x41020c
movaps xmm0, xmm2
addss xmm0, dword [ebx + 0x1a44]
movss dword [ebx + 0x1a44], xmm0
mov eax, dword [ebx + 0x1a68]
addss xmm2, dword [ebx + 0x1a84]
mov dword [ebx + 0x1a7c], eax
mov al, byte [ebx + 0x1a4b]
mov byte [ebx + 0x1a79], al
mov eax, dword [ebx + 0x2d48]
movss dword [ebx + 0x1a84], xmm2
mov dword [ebx + 0x1a74], ecx
mov dword [ebx + 0x1a40], 0
mov byte [ebx + 0x1a4c], 0
mov byte [ebx + 0x1a78], 0
mov byte [ebx + 0x1a48], 0
test eax, eax
je 0x410271
cmp ecx, eax
je 0x410271
mov dword [ebx + 0x2d48], 0
test ecx, ecx
jne 0x41028d
mov dword [ebx + 0x1a50], ecx
mov dword [ebx + 0x1a54], ecx
mov dword [ebx + 0x1a58], ecx
mov dword [ebx + 0x1a5c], ecx
mov eax, dword [ebx + 0x1e0c]
mov dword [ebx + 0x1e10], eax
xor eax, eax
mov dword [ebx + 0x1e0c], 0
mov dword [ebx + 0x1e08], 0x7f7fffff
mov word [ebx + 0x1da9], 0
mov dword [ebx + 0x1e18], 0
mov esi, dword [0x46ed48]
movss xmm2, dword [0x45b8a4]
push edi
lea edi, [ebx + 0xc60]
cmp byte [esi + 0x100], al
setne al
mov ecx, eax
or ecx, 2
cmp byte [esi + 0x101], 0
cmove ecx, eax
mov edx, ecx
or edx, 4
cmp byte [esi + 0x102], 0
cmove edx, ecx
mov ecx, 0x200
mov eax, edx
or eax, 8
cmp byte [esi + 0x103], 0
cmove eax, edx
lea edx, [ebx + 0x460]
mov esi, edx
mov dword [ebx + 0x380], eax
rep movsd dword es:[edi], dword [esi]
xor eax, eax
cmp byte [ebx + eax + 0x104], 0
je 0x410346
movss xmm0, dword [edx]
xorps xmm1, xmm1
comiss xmm1, xmm0
jbe 0x41033f
xorps xmm0, xmm0
jmp 0x410349
addss xmm0, dword [ebx + 0x18]
jmp 0x410349
movaps xmm0, xmm2
movss dword [edx], xmm0
inc eax
add edx, 4
cmp eax, 0x200
jl 0x410324
call fcn.0040da70
call fcn.004150f0
call fcn.00414dd0
mov esi, dword [0x46ed48]
mov edx, dword [esi + 0x1a14]
test edx, edx
je 0x410471
mov eax, dword [esi + 0x1a3c]
mov dword [esi + 0x1a40], eax
cmp dword [esi + 0x1a74], eax
jne 0x410396
mov byte [esi + 0x1a78], 1
cmp byte [esi + 0xf0], 0
mov edx, dword [edx + 0x2f8]
je 0x41045c
mov ecx, dword [0x46ed48]
lea eax, [esi + 0xe8]
mov edi, eax
test eax, eax
jne 0x4103c1
lea edi, [ecx + 0xe8]
movss xmm0, dword [edi]
movss xmm1, dword [0x45b8a8]
comiss xmm0, xmm1
movss xmm2, dword [edi + 4]
jb 0x41045c
comiss xmm2, xmm1
jb 0x41045c
movss xmm1, dword [eax]
subss xmm1, dword [esi + 0x1a60]
movss xmm0, dword [edx + 0xc]
movss xmm2, dword [eax + 4]
subss xmm2, dword [esi + 0x1a64]
ucomiss xmm0, xmm1
movss dword [ebp - 0x10], xmm1
movss dword [ebp - 0xc], xmm2
lahf
test ah, 0x44
jp 0x41041f
movss xmm0, dword [edx + 0x10]
ucomiss xmm0, xmm2
lahf
test ah, 0x44
jnp 0x41044c
test dword [edx + 8], 0x100
jne 0x41043d
xorps xmm0, xmm0
comiss xmm0, dword [ecx + 0x2db4]
jb 0x41043d
mov eax, dword [ecx + 0x1c]
mov dword [ecx + 0x2db4], eax
push 1
lea eax, [ebp - 0x10]
push eax
push edx
call fcn.00414230
add esp, 0xc
push dword [esi + 0x1a14]
call fcn.00409c00
add esp, 4
jmp 0x4104b0
push 0
push 0
call fcn.00413b10
mov dword [esi + 0x1a14], 0
jmp 0x4104ad
mov ecx, dword [esi + 0x1a68]
test ecx, ecx
je 0x4104b0
mov eax, dword [esi + 0x1a3c]
cmp dword [ecx + 0x48], eax
jne 0x4104b0
mov dword [esi + 0x1a40], eax
cmp dword [esi + 0x1a74], eax
jne 0x41049b
mov byte [esi + 0x1a78], 1
cmp byte [esi + 0xf0], 0
jne 0x4104b0
push 0
push 0
call fcn.00413b10
add esp, 8
mov eax, dword [0x46ed48]
mov edx, dword [eax + 0x1b20]
sub edx, 1
js 0x4104e7
mov eax, dword [eax + 0x1b28]
lea ecx, [edx + edx*8]
lea eax, [eax + ecx*4]
add eax, 4
nop
mov ecx, dword [eax]
test ecx, ecx
je 0x4104df
test dword [ecx + 8], 0x8000000
jne 0x410501
sub eax, 0x24
sub edx, 1
jns 0x4104d0
cmp dword [ebx + 0x1c38], 0
je 0x410520
movss xmm0, dword [ebx + 0x1c48]
comiss xmm0, dword [0x45b7ec]
jbe 0x410520
movss xmm1, dword [ebx + 0x18]
mulss xmm1, dword [0x45b86c]
addss xmm1, dword [ebx + 0x1cb0]
minss xmm1, dword [0x45b844]
jmp 0x410541
movss xmm0, dword [ebx + 0x18]
mulss xmm0, dword [0x45b874]
movss xmm1, dword [ebx + 0x1cb0]
subss xmm1, xmm0
maxss xmm1, dword [0x45b7ec]
movss dword [ebx + 0x1cb0], xmm1
mov dword [ebx + 0x1da4], 0
mov dword [ebx + 0x3000], 0xffffffff
mov dword [ebx + 0x2ffc], 0xffffffff
mov dword [ebx + 0x2ff8], 0xffffffff
mov dword [ebx + 0x2da0], 0x3f800000
mov dword [ebx + 0x2da4], 0x3f800000
call fcn.004156a0
mov esi, dword [0x46ed48]
mov edi, dword [esi + 0x1b38]
test edi, edi
je 0x4105cc
cmp byte [edi + 0x7a], 0
je 0x4105cc
test dword [edi + 8], 0x40000
jne 0x4105cc
cmp byte [esi + 0x100], 0
jne 0x4105cc
mov eax, dword [esi + 0x34]
test eax, eax
js 0x4105cc
push 1
push eax
call fcn.0040c0e0
add esp, 8
test al, al
je 0x4105cc
mov al, 1
jmp 0x4105ce
xor al, al
cmp dword [esi + 0x1a3c], 0
mov byte [esi + 0x1c68], al
jne 0x41062d
test al, al
je 0x41062d
cmp dword [esi + 0x1b3c], 0
mov dword [esi + 0x1c54], edi
mov dword [esi + 0x1c60], 0x7fffffff
je 0x41061c
mov ecx, dword [esi + 0x1b84]
cmp ecx, 0x7fffffff
je 0x41061c
xor edx, edx
mov eax, 2
cmp byte [esi + 0x101], dl
cmovne eax, edx
add eax, ecx
jmp 0x410627
movzx eax, byte [esi + 0x101]
neg eax
sbb eax, eax
mov dword [esi + 0x1c64], eax
mov edi, dword [esi + 0x1c54]
mov dword [esi + 0x1c50], 0
mov dword [esi + 0x1c5c], 0x7fffffff
mov dword [esi + 0x1c58], 0x7fffffff
test edi, edi
je 0x4106c1
mov eax, dword [esi + 0x1c60]
mov dword [esi + 0x1c50], edi
cmp eax, 0x7fffffff
je 0x41067f
mov ecx, dword [edi + 0x19c]
cmp ecx, 0xffffffff
je 0x41067f
inc ecx
add eax, ecx
cdq
idiv ecx
mov dword [esi + 0x1c58], edx
mov eax, dword [esi + 0x1c64]
cmp eax, 0x7fffffff
je 0x4106a3
mov ecx, dword [edi + 0x1a0]
cmp ecx, 0xffffffff
je 0x4106a3
inc ecx
add eax, ecx
cdq
idiv ecx
mov dword [esi + 0x1c5c], edx
mov dword [esi + 0x1c54], 0
mov dword [esi + 0x1c64], 0x7fffffff
mov dword [esi + 0x1c60], 0x7fffffff
mov dword [esi + 0x1b84], 0x7fffffff
movss xmm0, dword [ebx + 0xb8]
comiss xmm0, dword [0x45b7ec]
pop edi
jb 0x4106f4
movsd xmm1, qword [ebx + 0x19a8]
cvtpd2ps xmm1, xmm1
subss xmm1, xmm0
movss dword [ebp - 8], xmm1
jmp 0x4106f9
movss xmm1, dword [ebp - 8]
xor esi, esi
cmp dword [ebx + 0x19c8], esi
je 0x41074d
mov eax, dword [ebx + 0x19d0]
xor edx, edx
mov ecx, dword [eax + esi*4]
mov al, byte [ecx + 0x7a]
mov byte [ecx + 0x7b], al
mov word [ecx + 0x86], dx
mov byte [ecx + 0x7a], dl
mov byte [ecx + 0x7c], dl
test al, al
jne 0x41073f
cmp byte [ecx + 0x330], dl
jne 0x41073f
comiss xmm1, dword [ecx + 0x250]
jbe 0x41073f
push ecx
call fcn.00409ea0
add esp, 4
movss xmm1, dword [ebp - 8]
inc esi
cmp esi, dword [ebx + 0x19c8]
jne 0x410703
mov eax, dword [ebx + 0x1b38]
test eax, eax
je 0x410769
cmp byte [eax + 0x7b], 0
jne 0x410769
push 0
push 0
call fcn.00409b50
add esp, 8
mov ecx, dword [ebx + 0x19f0]
test ecx, ecx
jns 0x41078f
mov eax, ecx
cdq
sub eax, edx
sar eax, 1
add eax, ecx
xor ecx, ecx
test eax, eax
cmovg ecx, eax
push ecx
lea ecx, [ebx + 0x19ec]
call fcn.00417080
mov dword [ebx + 0x19ec], 0
mov ecx, dword [ebx + 0x1b30]
test ecx, ecx
jns 0x4107bf
mov eax, ecx
cdq
sub eax, edx
sar eax, 1
add eax, ecx
xor ecx, ecx
test eax, eax
cmovg ecx, eax
push ecx
lea ecx, [ebx + 0x1b2c]
call fcn.00417110
mov dword [ebx + 0x1b2c], 0
push 0
push dword [ebx + 0x1b38]
call fcn.00407f70
add esp, 8
call fcn.00414c30
movaps xmm0, xmmword [str._z_KY]
mov byte [ebx + 0x19bd], 1
mov eax, dword [0x46ed48]
movups xmmword [ebp - 0x18], xmm0
pop esi
or dword [eax + 0x1a88], 2
xor ecx, ecx
mov dword [eax + 0x1aa8], 0x43c80000
mov dword [eax + 0x1aac], 0x43c80000
mov dword [eax + 0x1a90], 4
nop dword [eax]
mov al, byte [ebp - 0x18]
xor byte [ebp + ecx - 0x17], al
inc ecx
cmp ecx, 0xe
jb 0x410820
mov al, byte [ebp - 0x15]
mov bl, 0x29
mov dl, byte [ebp - 0x17]
xor al, bl
mov cl, byte [ebp - 0x16]
xor al, bl
push 0
xor dl, bl
mov byte [ebp - 5], al
xor cl, bl
mov byte [ebp - 4], 0
lea eax, [ebp - 7]
mov byte [ebp - 8], bl
xor dl, bl
mov byte [ebp - 4], 0
xor cl, bl
mov byte [ebp - 7], dl
push 0
push eax
mov byte [ebp - 6], cl
call fcn.00404670
add esp, 0xc
pop ebx
mov esp, ebp
pop ebp
ret