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

Disassembly:
mov qword [rsp + 0x10], rbx
mov qword [rsp + 0x18], rbp
push rsi
push rdi
push r12
push r14
push r15
mov eax, 0x13e0
call fcn.18002b230
sub rsp, rax
mov rax, qword [0x180034580]
xor rax, rsp
mov qword [rsp + 0x13d0], rax
mov r14, r9
mov rbp, r8
mov rdi, rdx
mov r15, rcx
mov qword [rsp + 0x30], rcx
call qword [sym.imp.TT_SubSystem.dll_public:_void___cdecl_CEventHandler::constructor_void____ptr64]
nop
mov rsi, qword [rsp + 0x1430]
mov qword [rsp + 0x20], rsi
mov r9, r14
mov r8, rbp
mov rdx, rdi
lea rcx, [r15 + 0x10]
call fcn.180029cc0
nop
lea rax, vtable.IAlgoBase.0
mov qword [r15], rax
lea rax, vtable.IAlgoBase.1.0
mov qword [r15 + 0x10], rax
mov byte [r15 + 0x160], 0
xor r12d, r12d
mov qword [r15 + 0x168], r12
mov qword [r15 + 0x170], r12
mov qword [r15 + 0x178], rdi
mov qword [r15 + 0x180], r12
mov dword [r15 + 0x188], r12d
lea rcx, [r15 + 0x18c]
call qword [sym.imp.TT_SubSystem.dll_public:_void___cdecl_uint256_type::constructor_void____ptr64]
xorps xmm0, xmm0
movups xmmword [r15 + 0x1ac], xmm0
movups xmmword [r15 + 0x1bc], xmm0
mov qword [r15 + 0x1cc], r12
mov dword [r15 + 0x1d4], r12d
mov qword [r15 + 0x270], rbp
mov qword [r15 + 0x278], r14
mov qword [r15 + 0x280], rsi
mov qword [r15 + 0x288], r12
mov word [r15 + 0x290], 1
mov byte [r15 + 0x292], r12b
mov qword [r15 + 0x298], r12
mov qword [r15 + 0x2a0], 0xffffffffffffffff
mov qword [r15 + 0x2a8], r12
mov qword [r15 + 0x2b0], 0xffffffffffffffff
mov qword [r15 + 0x2b8], r12
mov qword [r15 + 0x2c0], r12
mov qword [r15 + 0x2c8], r12
mov word [r15 + 0x2d0], 0x101
call qword [sym.imp.MSVCP140.dll_unsigned_int___cdecl_std::_Random_device_void_]
mov edx, eax
movabs rbp, 0x5555555555555555
mov qword [r15 + 0x1660], rbp
mov qword [r15 + 0x2e0], rdx
mov ebx, 1
mov ecx, ebx
lea r8, [r15 + 0x2e8]
movabs rsi, 0x5851f42d4c957f2d
mov edi, 0x138
nop word [rax + rax]
mov rax, rdx
shr rax, 0x3e
xor rdx, rax
imul rdx, rsi
add rdx, rcx
mov qword [r8], rdx
inc rcx
lea r8, [r8 + 8]
cmp rcx, rdi
jb 0x180028f60
mov dword [r15 + 0x2d8], edi
mov word [r15 + 0x1668], bx
mov byte [r15 + 0x166a], r12b
mov qword [r15 + 0x1670], r12
mov qword [r15 + 0x1678], 0xffffffffffffffff
mov qword [r15 + 0x1680], r12
mov qword [r15 + 0x1688], 0xffffffffffffffff
mov qword [r15 + 0x1690], r12
mov qword [r15 + 0x1698], r12
mov qword [r15 + 0x16a0], r12
mov qword [r15 + 0x16a8], r12
call qword [sym.imp.MSVCP140.dll_unsigned_int___cdecl_std::_Random_device_void_]
mov ecx, eax
mov qword [rsp + 0x13c8], rbp
mov qword [rsp + 0x48], rcx
nop dword [rax + rax]
mov rax, rcx
shr rax, 0x3e
xor rcx, rax
imul rcx, rsi
add rcx, rbx
mov qword [rsp + rbx*8 + 0x48], rcx
inc rbx
cmp rbx, rdi
jb 0x180028ff0
mov dword [rsp + 0x40], edi
lea rax, [rsp + 0x50]
movabs r9, 0xb5026f5aa96619e9
mov r8, qword [rax]
xor r8, qword [rax - 8]
and r8, 0xffffffff80000000
xor r8, qword [rax]
movzx ecx, r8b
and cl, 1
neg cl
sbb rdx, rdx
and rdx, r9
xor rdx, qword [rax + 0x4d8]
shr r8, 1
xor rdx, r8
mov qword [rax + 0x9b8], rdx
lea rax, [rax + 8]
sub rdi, 1
jne 0x180029021
mov eax, dword [rsp + 0x40]
mov rdx, qword [rsp + rax*8 + 0x48]
mov rax, rdx
shr rax, 0x1d
and rax, qword [rsp + 0x13c8]
xor rdx, rax
mov rcx, rdx
movabs rax, 0x38eb3ffff6d3
and rcx, rax
shl rcx, 0x11
xor rdx, rcx
mov rcx, rdx
and rcx, 0xffffffffffffbf77
shl rcx, 0x25
xor rdx, rcx
mov rcx, rdx
shr rcx, 0x2b
xor rcx, rdx
mov qword [r15 + 0x1670], rcx
mov rax, r15
mov rcx, qword [rsp + 0x13d0]
xor rcx, rsp
call fcn.18002a170
lea r11, [rsp + 0x13e0]
mov rbx, qword [r11 + 0x38]
mov rbp, qword [r11 + 0x40]
mov rsp, r11
pop r15
pop r14
pop r12
pop rdi
pop rsi
ret