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

Disassembly:
push r15
push r14
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x300
mov rsi, rcx
cmp dx, 5
jne 0x140009a8d
mov qword [rsi + 8], 2
lea rax, str.Compression_method_not_supported
mov qword [rsi + 0x10], rax
mov qword [rsi + 0x18], 0x20
mov byte [rsi], 4
jmp 0x140009d78
movzx ebx, byte [rsp + 0x390]
mov r8, qword [rsp + 0x378]
mov rcx, qword [rsp + 0x370]
test r8, r8
je 0x140009b72
mov rax, qword [rsp + 0x380]
cmp bl, 2
jne 0x140009b94
cmp byte [rsp + 0x368], 0
je 0x140009c75
mov rdx, qword [rsp + 0x360]
mov r10, rdx
shr r10, 0x31
and r10d, 0x7f
mov r11, rdx
shr r11, 0x23
and r11d, 0x1fe0
or r11, r10
shr rdx, 0x15
and edx, 0xf800
or rdx, r11
shl rdx, 0x10
mov r10d, 1
test rax, rax
je 0x140009c83
mov r11d, 0x34567890
mov ebx, 0x23456789
mov edi, 0x12345678
xor r14d, r14d
lea r15, [0x1400a7640]
nop dword [rax + rax]
movzx ebp, byte [r8 + r14]
xor bpl, dil
movzx r12d, bpl
shr edi, 8
xor edi, dword [r15 + r12*4]
movzx ebp, dil
add ebp, ebx
imul ebx, ebp, 0x8088405
inc ebx
mov ebp, ebx
shr ebp, 0x18
movzx r12d, r11b
xor r12d, ebp
shr r11d, 8
xor r11d, dword [r15 + r12*4]
inc r14
cmp rax, r14
jne 0x140009b30
jmp 0x140009c93
mov al, 3
cmp bl, 2
jne 0x140009cf1
mov rdi, qword [rcx]
movups xmm0, xmmword [rcx + 8]
movaps xmmword [rsp + 0x160], xmm0
xor r14d, r14d
jmp 0x140009d3c
mov rdx, qword [rsp + 0x398]
movzx r9d, byte [rsp + 0x388]
movzx r9d, r9b
lea r10, [r9*4]
sub rdx, r10
add rdx, 0xffffffffffffffec
mov r10, qword [rcx + 0x10]
mov qword [rsp + 0x40], r10
movups xmm0, xmmword [rcx]
movaps xmmword [rsp + 0x30], xmm0
mov byte [rsp + 0x50], r9b
mov qword [rsp + 0x48], rdx
lea rcx, [rsp + 0x80]
lea rdx, [rsp + 0x30]
mov r9, rax
call fcn.14000c4b0
movzx ebp, byte [rsp + 0x158]
mov rdi, qword [rsp + 0x80]
cmp bpl, 3
je 0x140009ce3
lea rdx, [rsp + 0x88]
lea rcx, [rsp + 0x230]
mov r8d, 0xd0
call sub.VCRUNTIME140.dll_memcpy
mov eax, dword [rsp + 0x159]
mov ecx, dword [rsp + 0x15c]
mov dword [rsp + 0x28], eax
mov dword [rsp + 0x2b], ecx
mov al, 3
cmp bpl, 2
je 0x140009cf1
and bl, 1
lea rcx, [rsp + 0x160]
lea rdx, [rsp + 0x230]
mov r8d, 0xd0
call sub.VCRUNTIME140.dll_memcpy
mov eax, dword [rsp + 0x28]
mov ecx, dword [rsp + 0x2b]
mov dword [rsp + 0x20], eax
mov dword [rsp + 0x23], ecx
mov r14b, 2
jmp 0x140009d3c
xor r10d, r10d
xor edx, edx
test rax, rax
jne 0x140009b11
mov edi, 0x12345678
mov ebx, 0x23456789
mov r11d, 0x34567890
mov rax, qword [rcx + 0x10]
mov qword [rsp + 0x40], rax
movups xmm0, xmmword [rcx]
movaps xmmword [rsp + 0x30], xmm0
mov dword [rsp + 0x48], edi
mov dword [rsp + 0x4c], ebx
mov dword [rsp + 0x50], r11d
shl r9, 0x20
or r10, r9
or r10, rdx
lea rcx, [rsp + 0x80]
lea rdx, [rsp + 0x30]
mov r8, r10
call fcn.14000bc70
cmp qword [rsp + 0x80], 0
je 0x140009cf8
mov rdi, qword [rsp + 0x88]
mov qword [rsi + 8], 0
mov qword [rsi + 0x10], rdi
mov al, 4
mov byte [rsi], al
jmp 0x140009d78
mov rdi, qword [rsp + 0x88]
movups xmm0, xmmword [rsp + 0x90]
movaps xmmword [rsp + 0x60], xmm0
movups xmm0, xmmword [rsp + 0xa0]
movaps xmmword [rsp + 0x70], xmm0
test rdi, rdi
je 0x140009d8d
movaps xmm0, xmmword [rsp + 0x60]
movaps xmm1, xmmword [rsp + 0x70]
movaps xmmword [rsp + 0x170], xmm1
movaps xmmword [rsp + 0x160], xmm0
mov r14b, 1
lea rcx, [rsi + 0x10]
lea rdx, [rsp + 0x160]
mov r8d, 0xd0
call sub.VCRUNTIME140.dll_memcpy
mov eax, dword [rsp + 0x20]
mov ecx, dword [rsp + 0x23]
mov dword [rsi + 0xe1], eax
mov dword [rsi + 0xe4], ecx
mov byte [rsi], r14b
mov byte [rsi + 1], bl
mov qword [rsi + 8], rdi
mov byte [rsi + 0xe0], bpl
mov rax, rsi
add rsp, 0x300
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r14
pop r15
ret
mov al, 3
mov byte [rsi], al
jmp 0x140009d78