Function at 0x994640
Capabilities:
Encode data using xor
Generate random numbers using a mersenne twister

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
mov eax, 0x13c4
call fcn.009a0650
mov eax, dword [0x9d104c]
xor eax, esp
mov dword [esp + 0x13c0], eax
push ebx
push esi
push edi
call fcn.0099e56f
mov esi, eax
mov ebx, edx
mov dword [esp + 0x14], esi
mov dword [esp + 0x10], ebx
call fcn.0099e558
push ebx
push ebx
push esi
push edx
push eax
call fcn.009bf780
mov esi, ebx
pop ebx
push 0
push 0x3b9aca00
push esi
push ecx
mov ebx, eax
mov edi, edx
call fcn.0099fea0
push dword [esp + 0x10]
push dword [esp + 0x18]
push edx
push eax
call fcn.009bf6d0
mov dword [esp + 0x10], eax
mov esi, edx
mov ecx, 0x3b9aca00
mov dword [esp + 0x13c4], 0xffffffff
mov eax, edi
mul ecx
mov edx, 0x3b9aca00
mov ecx, eax
mov eax, ebx
mul edx
add ecx, edx
mov edx, dword [esp + 0x10]
add edx, eax
mov dword [esp + 0x44], edx
adc esi, ecx
mov ecx, 1
mov dword [esp + 0x2c], esi
mov eax, edx
shr eax, 0x1e
xor eax, edx
imul edx, eax, 0x6c078965
add edx, ecx
mov dword [esp + ecx*4 + 0x44], edx
inc ecx
cmp ecx, 0x270
jb 0x9946e1
lea eax, [esp + 0x40]
mov dword [esp + 0x40], 0x270
push eax
lea ecx, [esp + 0x2c]
mov dword [esp + 0x2c], 1
mov dword [esp + 0x30], 2
call fcn.0099bbf0
mov ecx, eax
shl ecx, 4
sub ecx, eax
shl ecx, 2
mov eax, ecx
cdq
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], edx
call fcn.0099e56f
mov esi, eax
mov ebx, edx
mov dword [esp + 0x18], esi
mov dword [esp + 0x10], ebx
call fcn.0099e558
push ebx
push ebx
push esi
push edx
push eax
call fcn.009bf780
mov esi, ebx
pop ebx
push 0
push 0x3b9aca00
push esi
push ecx
mov ebx, eax
mov edi, edx
call fcn.0099fea0
push dword [esp + 0x10]
push dword [esp + 0x1c]
push edx
push eax
call fcn.009bf6d0
mov esi, eax
mov dword [esp + 0x1c], edx
mov ecx, 0x3b9aca00
mov eax, edi
mul ecx
mov edx, 0x3b9aca00
mov ecx, eax
mov eax, ebx
mov ebx, dword [esp + 0x1c]
mul edx
add ecx, edx
add esi, eax
mov dword [esp + 0x18], esi
adc ebx, ecx
mov ecx, dword [esp + 0x20]
mov dword [esp + 0x1c], ebx
test ecx, ecx
jl 0x994800
mov eax, dword [esp + 0x14]
jg 0x9947ba
test eax, eax
je 0x994800
push 0
push 0x3b9aca00
push ecx
push eax
call fcn.0099fea0
or edi, 0xffffffff
mov ecx, 0x7fffffff
sub edi, eax
sbb ecx, edx
cmp ebx, ecx
jg 0x9947e8
jl 0x9947de
cmp esi, edi
jae 0x9947e8
add eax, esi
mov dword [esp + 0x18], eax
adc edx, ebx
jmp 0x9947f5
mov dword [esp + 0x18], 0xffffffff
mov edx, 0x7fffffff
mov dword [esp + 0x1c], edx
nop dword [eax]
call fcn.0099e56f
mov esi, eax
mov ebx, edx
mov dword [esp + 0x10], esi
mov dword [esp + 0x20], ebx
call fcn.0099e558
push ebx
push ebx
push esi
push edx
push eax
call fcn.009bf780
mov esi, ebx
pop ebx
push 0
push 0x3b9aca00
push esi
push ecx
mov ebx, eax
mov edi, edx
call fcn.0099fea0
push dword [esp + 0x20]
push dword [esp + 0x14]
push edx
push eax
call fcn.009bf6d0
mov esi, eax
mov dword [esp + 0x14], edx
mov ecx, 0x3b9aca00
mov eax, edi
mul ecx
mov edx, 0x3b9aca00
mov ecx, eax
mov eax, ebx
mov ebx, dword [esp + 0x1c]
mul edx
add ecx, edx
add esi, eax
mov eax, dword [esp + 0x14]
adc eax, ecx
mov dword [esp + 0x20], esi
mov dword [esp + 0x14], eax
cmp eax, ebx
jg 0x994915
jl 0x994888
cmp esi, dword [esp + 0x18]
jae 0x994915
call fcn.0099e5e7
push 0
push 0x64
push edx
push eax
call fcn.0099fea0
mov edi, dword [esp + 0x18]
mov esi, eax
sub edi, dword [esp + 0x20]
mov dword [esp + 0x10], edx
mov ecx, edi
sbb ebx, dword [esp + 0x14]
mov edx, ebx
mov dword [esp + 0x28], esi
call fcn.009bfea0
comisd xmm0, xmmword [0x9cd778]
mov ecx, dword [esp + 0x10]
jbe 0x9948d7
add esi, 0xad160000
mov edi, 0xad160000
mov ebx, 0x311cd
jmp 0x9948d9
add esi, edi
mov eax, dword [esp + 0x28]
add eax, edi
push 0
push 0x3b9aca00
adc ecx, ebx
push ecx
push eax
call fcn.009bf6d0
mov dword [esp + 0x30], eax
imul eax, eax, 0x3b9aca00
mov dword [esp + 0x34], edx
sub esi, eax
lea eax, [esp + 0x30]
push eax
mov dword [esp + 0x3c], esi
call fcn.0099f0c6
add esp, 4
jmp 0x994800
mov ecx, dword [esp + 0x13cc]
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.0099f7ee
mov esp, ebp
pop ebp
ret