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

Disassembly:
mov eax, 0x10063fc9
call fcn.10063318
sub esp, 0x94
mov byte [ebp - 0x24], cl
push ebx
push esi
push edi
test cl, cl
je 0x1001171d
push 2
pop esi
mov dword [edx], 0
cmp dword [edx], esi
jge 0x10011b31
mov edi, dword [ebp + 0x10]
mov ecx, dword [edx]
mov eax, dword [edi]
mov dword [eax + ecx*4], 0x6a3367f5
inc dword [edx]
cmp dword [edx], esi
jl 0x10011707
jmp 0x10011b31
mov dword [ebp - 0x10], 1
xor ebx, ebx
push 3
mov dword [ebp - 0x14], 1
mov dword [ebp - 0x10], ebx
pop edi
jmp 0x10011746
mov eax, dword [ebp - 0x10]
mov dword [ebp + eax*4 - 0x84], 0x64a6847d
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], edi
jl 0x10011735
push 2
pop esi
mov dword [ebp - 0x10], esi
cmp dword [ebp - 0x10], ebx
jl 0x100117d0
mov dword [ebp - 0x14], 0x9e22401d
mov dword [ebp - 0x14], ebx
jmp 0x10011773
mov eax, dword [ebp - 0x14]
mov dword [ebp + eax*4 - 0xa0], 8
inc dword [ebp - 0x14]
cmp dword [ebp - 0x14], 4
jl 0x10011762
mov eax, dword [ebp - 0x10]
xor ecx, ecx
mov eax, dword [ebp + eax*4 - 0x84]
cmp eax, 1
setl cl
cmp ecx, dword [ebp - 0xa0]
jle 0x10011796
mov eax, dword [ebp - 0x10]
push 0x2f5c
push 1
push 0x305
lea eax, [ebp - 0x3c]
mov dword [ebp - 0x3c], 0xffff
push eax
push 1
mov edx, 0x5d1e
xor cl, cl
call fcn.100127ff
add esp, 0x14
mov byte [ebp - 0x18], bl
lea edx, [ebp - 0x18]
xor cl, cl
call fcn.1001297b
dec dword [ebp - 0x10]
jns 0x10011756
mov dword [ebp - 0x10], 0xfffffff2
jmp 0x1001180c
push 0x1f37
lea eax, [ebp - 0x16]
mov byte [ebp - 0x16], bl
push eax
push ecx
push 0x4f81
mov dl, 1
call fcn.100112d3
add esp, 0x10
mov edx, 0xca2
push ebx
push 0x2c6c
push ecx
call fcn.10013917
add esp, 0xc
dec dword [ebp - 0x10]
cmp dword [ebp - 0x10], 0xffffffea
jl 0x100117d9
mov eax, dword [0x1014802c]
test al, 1
jne 0x1001185d
or dword [0x10148024], 0xffffffff
or eax, 1
mov ecx, 0x1571
mov dword [0x1014802c], eax
xor edx, edx
mov dword [0x10146ca4], ecx
inc edx
mov eax, ecx
shr eax, 0x1e
xor eax, ecx
imul ecx, eax, 0x6c078965
mov eax, 0x270
add ecx, edx
mov dword [edx*4 + 0x10146ca4], ecx
inc edx
cmp edx, eax
jl 0x10011838
mov dword [0x10146ca0], eax
mov dword [ebp - 0x20], 0x3ae35568
lea ecx, [ebp - 0x58]
mov dword [ebp - 0x34], 0xffffffff
mov dword [ebp - 0x40], 9
push 1
call fcn.10001f82
lea eax, [ebp - 0x78]
mov dword [ebp - 4], ebx
push eax
push 0x5585
push ecx
lea eax, [ebp - 0x58]
xor dl, dl
push eax
call fcn.100112d3
add esp, 0x10
mov dword [ebp - 0x20], ebx
jmp 0x10011939
mov dword [ebp - 0x38], 0x473eb905
lea ecx, [ebp - 0x70]
push edi
call fcn.10001f82
push 0x2c97
push 1
lea eax, [ebp - 0x74]
mov byte [ebp - 4], 1
push eax
push 0x77c6
mov dword [ebp - 0x30], 0xabac
lea edx, [ebp - 0x70]
push ebx
xor cl, cl
call fcn.100127ff
add esp, 0x14
mov byte [ebp - 0x19], bl
lea eax, [ebp - 0x19]
xor dl, dl
mov ecx, 0x1b2c
push 0x42a8
push eax
push 0x6ef0
push 0x1757
push 1
push ebx
call fcn.10012a2b
lea eax, [ebp - 0x40]
mov ecx, 0x27ff
push eax
lea eax, [ebp - 0x30]
push eax
lea eax, [ebp - 0x34]
push eax
lea eax, [ebp - 0x38]
push eax
push ebx
push 0x43a9
lea eax, [ebp - 0x20]
push eax
lea eax, [ebp - 0x70]
push eax
lea edx, [ebp - 0x58]
call fcn.10013566
add esp, 0x38
mov byte [ebp - 4], bl
lea ecx, [ebp - 0x70]
call fcn.10001fdf
dec dword [ebp - 0x20]
cmp dword [ebp - 0x20], 0xffffffea
jge 0x1001189f
or dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x58]
call fcn.10001fdf
cmp byte [0x10146c48], 0
jne 0x10011a96
push esi
lea ecx, [ebp - 0x64]
call fcn.10001f82
mov dword [ebp - 4], esi
mov dword [ebp - 0x14], 0xffffffff
mov dword [ebp - 0x10], ebx
jmp 0x10011984
mov ecx, dword [ebp - 0x10]
mov eax, dword [ebp - 0x64]
mov dword [eax + ecx*4], 0xd5816210
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], esi
jl 0x10011974
mov dword [ebp - 0x10], ebx
jmp 0x1001199c
mov eax, dword [ebp - 0x10]
mov dword [ebp + eax*4 - 0x4c], 1
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], edi
jl 0x1001198e
mov edi, dword [ebp - 0x64]
mov eax, dword [edi + 4]
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 0x14]
mov dword [ebp - 0x14], 0xbff5ecce
mov dword [ebp - 0x10], ebx
jmp 0x100119c7
mov eax, dword [ebp - 0x10]
mov dword [ebp + eax*4 - 0x2c], 0xfffffff6
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], esi
jl 0x100119b9
mov dword [ebp - 0x10], ebx
jmp 0x100119e2
mov eax, dword [ebp - 0x10]
mov dword [ebp + eax*4 - 0x90], 0x2ef7e291
inc dword [ebp - 0x10]
cmp dword [ebp - 0x10], 3
jl 0x100119d1
mov eax, dword [ebp - 0x48]
xor edx, edx
mov eax, dword [ebp - 0x48]
mov ecx, dword [ebp - 0x28]
mov eax, dword [ebp - 0x14]
cmp ecx, eax
push 1
setge dl
xor ebx, ebx
mov dword [ebp - 0x88], edx
mov eax, dword [ebp - 0x14]
mov eax, dword [ebp - 0x28]
cmp eax, dword [edi + 4]
mov eax, dword [ebp - 0x28]
setge bl
xor ecx, ecx
test eax, eax
push 0x61cb
setle cl
xor eax, eax
cmp ecx, esi
setl al
xor ecx, ecx
cmp ecx, eax
mov eax, dword [ebp - 0x28]
sbb ecx, ecx
xor edx, edx
neg ecx
cmp ecx, eax
mov eax, dword [ebp - 0x48]
sete dl
xor ecx, ecx
cmp edx, eax
lea edx, [ebp - 0x17]
sete cl
sub ebx, ecx
mov dword [ebp - 0x14], ebx
mov eax, dword [ebp - 0x14]
mov eax, dword [ebp - 0x44]
mov byte [ebp - 0x17], 0
push ecx
call fcn.10013917
mov byte [ebp - 0x15], 0
add esp, 0xc
cmp byte [ebp - 0x15], 0
je 0x10011a7a
push 0x7ec0
mov edx, 0x7242
xor cl, cl
call fcn.10013946
pop ecx
or dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x64]
call fcn.10001fdf
call fcn.100127dc
sub esp, 0x10
call fcn.10012883
add esp, 0x10
mov eax, dword [0x10146ca0]
cmp eax, 0x270
jne 0x10011ae2
mov edx, 0x10146ca8
mov ecx, dword [edx - 4]
xor ecx, dword [edx]
and ecx, 0x7fffffff
xor ecx, dword [edx - 4]
mov eax, ecx
and al, 1
movzx eax, al
neg eax
sbb eax, eax
shr ecx, 1
and eax, 0x9908b0df
xor eax, dword [edx + 0x630]
xor eax, ecx
mov dword [edx + 0x9bc], eax
add edx, 4
cmp edx, 0x10147668
jl 0x10011aa7
jmp 0x10011aee
cmp eax, 0x4e0
jb 0x10011af3
call fcn.10013dc3
mov eax, dword [0x10146ca0]
mov edx, dword [eax*4 + 0x10146ca4]
inc eax
mov dword [0x10146ca0], eax
mov eax, edx
shr eax, 0xb
and eax, dword [0x10148024]
xor edx, eax
mov eax, edx
and eax, 0xff3a58ad
shl eax, 7
xor edx, eax
mov eax, edx
and eax, 0xffffdf8c
shl eax, 0xf
xor edx, eax
mov eax, dword [ebp + 8]
mov ecx, edx
shr ecx, 0x12
xor ecx, edx
mov dword [eax], ecx
mov ecx, dword [ebp - 0xc]
pop edi
pop esi
mov dword fs:[0], ecx
pop ebx
mov esp, ebp
pop ebp
ret