Function at 0x180091848
Capabilities:
Encode data using xor
Generate random numbers using the delphi lcg
Hash data with crc32

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x10], rbp
mov qword [rsp + 0x18], rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x20
xor ebp, ebp
mov r15, r9
mov r13d, ebp
mov r12d, ebp
test r9, r9
je 0x180091877
mov byte [r9], bpl
test rcx, rcx
je 0x180091b5b
mov r14, qword [rcx + 0x80]
test r14, r14
je 0x180091b5b
cmp qword [r14], rbp
jne 0x18009189f
mov eax, 0xffffff9c
jmp 0x180091b60
test r8d, r8d
jne 0x1800918ab
xor eax, eax
jmp 0x180091b60
mov eax, dword [r14 + 0x80]
mov qword [r14 + 0x18], rdx
mov dword [r14 + 0x20], r8d
cmp r8d, eax
jbe 0x1800918c6
mov dword [r14 + 0x20], eax
mov r8d, eax
test r8d, r8d
je 0x180091b56
mov edi, dword [r14 + 0x10]
test edi, edi
jne 0x1800919f7
mov eax, dword [r14 + 0x7c]
mov edi, ebp
test eax, eax
je 0x1800919f7
mov edx, dword [r14 + 0x94]
mov ebx, 0x4000
mov rcx, qword [r14 + 0x88]
cmp eax, ebx
cmovb ebx, eax
add edx, dword [r14 + 0x60]
xor r8d, r8d
call fcn.180090ba4
test eax, eax
jne 0x180091b41
mov r9, qword [r14 + 0x88]
lea r8d, [rax + 1]
mov rcx, qword [r14]
mov edx, ebx
mov esi, ebx
call fcn.180090c20
cmp rax, 1
jne 0x180091b41
add dword [r14 + 0x60], ebx
mov edi, ebx
sub dword [r14 + 0x7c], ebx
mov r10, qword [r14]
mov qword [r14 + 8], r10
mov dword [r14 + 0x10], ebx
cmp byte [r14 + 0x98], bpl
je 0x1800919f7
test ebx, ebx
je 0x1800919f7
lea r11, [0x1802b0ab0]
mov r9d, dword [r14 + 0xa4]
mov edx, dword [r14 + 0x9c]
mov eax, r9d
and eax, 0xfffd
mov ecx, edx
or eax, 2
shr edx, 8
mov r8d, eax
xor r8d, 1
imul r8d, eax
shr r8d, 8
xor r8b, byte [r10]
movsx rax, r8b
xor rcx, rax
movzx eax, cl
xor edx, dword [r11 + rax*4]
movzx eax, dl
add eax, dword [r14 + 0xa0]
imul ecx, eax, 0x8088405
mov dword [r14 + 0x9c], edx
inc ecx
mov dword [r14 + 0xa0], ecx
movzx eax, byte [r14 + 0xa3]
movzx ecx, r9b
xor rcx, rax
shr r9d, 8
xor r9d, dword [r11 + rcx*4]
mov dword [r14 + 0xa4], r9d
mov byte [r10], r8b
inc r10
sub rsi, 1
jne 0x180091967
mov edi, dword [r14 + 0x10]
mov r9d, dword [r14 + 0xa8]
mov r8d, edi
cmp r9d, edi
cmovbe r8d, r9d
test r8d, r8d
je 0x180091a4a
mov rdx, qword [r14 + 8]
lea eax, [r8 - 1]
sub edi, r8d
mov r10b, byte [rax + rdx]
sub dword [r14 + 0x80], r8d
mov eax, r8d
add rax, rdx
mov dword [r14 + 0x10], edi
sub r9d, r8d
mov qword [r14 + 8], rax
mov dword [r14 + 0xa8], r9d
jne 0x180091a4a
cmp r10b, byte [r14 + 0xac]
jne 0x180091b46
cmp dword [r14 + 0x90], ebp
jne 0x180091ade
mov ebp, dword [r14 + 0x20]
cmp ebp, edi
mov esi, ebp
cmovae esi, edi
xor r8d, r8d
test esi, esi
je 0x180091a89
mov rax, qword [r14 + 8]
mov rcx, qword [r14 + 0x18]
mov al, byte [r8 + rax]
mov byte [r8 + rcx], al
inc r8d
cmp r8d, esi
jb 0x180091a69
mov edi, dword [r14 + 0x10]
mov ebp, dword [r14 + 0x20]
mov rbx, qword [r14 + 0x18]
mov r8d, esi
mov ecx, dword [r14 + 0x74]
mov rdx, rbx
call fcn.180090408
sub dword [r14 + 0x80], esi
sub ebp, esi
add dword [r14 + 0x24], esi
sub edi, esi
mov ecx, esi
add r12d, esi
add qword [r14 + 8], rcx
mov dword [r14 + 0x20], ebp
xor ebp, ebp
mov dword [r14 + 0x74], eax
lea rax, [rsi + rbx]
mov dword [r14 + 0x10], edi
mov qword [r14 + 0x18], rax
cmp dword [r14 + 0x80], ebp
jne 0x180091b2d
test r15, r15
je 0x180091b2d
mov byte [r15], 1
jmp 0x180091b2d
mov ebx, dword [r14 + 0x24]
lea rcx, [r14 + 8]
mov rdi, qword [r14 + 0x18]
call fcn.180090778
mov esi, dword [r14 + 0x24]
mov rdx, rdi
mov ecx, dword [r14 + 0x74]
sub esi, ebx
mov r8d, esi
mov r13d, eax
call fcn.180090408
mov dword [r14 + 0x74], eax
add r12d, esi
mov eax, dword [r14 + 0x80]
sub eax, esi
mov dword [r14 + 0x80], eax
cmp r13d, 1
je 0x180091b4d
test eax, eax
je 0x180091b4d
test r13d, r13d
jne 0x180091b3c
cmp dword [r14 + 0x20], ebp
ja 0x1800918cf
test r13d, r13d
je 0x180091b56
mov eax, r13d
jmp 0x180091b60
or eax, 0xffffffff
jmp 0x180091b60
mov eax, 0xffffff96
jmp 0x180091b60
test r15, r15
je 0x180091b56
mov byte [r15], 1
mov eax, r12d
jmp 0x180091b60
mov eax, 0xffffff9a
mov rbx, qword [rsp + 0x50]
mov rbp, qword [rsp + 0x58]
mov rsi, qword [rsp + 0x60]
add rsp, 0x20
pop r15
pop r14
pop r13
pop r12
pop rdi
ret