Function at 0x440320
Capabilities:
Encode data using xor
Hash data using fnv

Disassembly:
mov ecx, dword [esp + 0xc]
sub esp, 0x20
push ebx
push ebp
mov ebp, dword [esp + 0x2c]
mov edx, dword [ebp + 0xc]
mov eax, dword [ebp + 0x24]
shr edx, 2
cmp eax, edx
push esi
push edi
ja 0x440683
mov edx, dword [ebp + 0x14]
test edx, edx
lea esi, [ebp + 0x10]
jne 0x44034e
xor ecx, ecx
jmp 0x440356
mov ecx, dword [esi + 8]
sub ecx, edx
sar ecx, 3
add ecx, 0xffffffff
cmp ecx, eax
ja 0x44039b
mov ecx, edx
test ecx, ecx
jne 0x440367
xor eax, eax
jmp 0x44036f
mov eax, dword [esi + 8]
sub eax, ecx
sar eax, 3
lea eax, [eax + eax - 3]
mov dword [ebp + 0x20], eax
mov edx, dword [ebp + 8]
lea ecx, [ebp + 4]
sub esp, 8
mov eax, esp
mov dword [eax], 0
mov dword [eax], ecx
mov dword [eax + 4], edx
mov eax, dword [ebp + 0x20]
add eax, 2
mov ecx, esi
call fcn.00454150
jmp 0x4403a9
mov ecx, dword [ebp + 0x20]
cmp ecx, eax
jae 0x4403a9
lea ecx, [ecx + ecx + 1]
mov dword [ebp + 0x20], ecx
mov edx, dword [ebp + 0x20]
mov ebx, dword [ebp + 0x24]
mov ecx, dword [esi + 4]
shr edx, 1
sub ebx, edx
sub ebx, 1
test ecx, ecx
mov dword [esp + 0x14], ebx
je 0x4403cd
mov eax, dword [esi + 8]
sub eax, ecx
sar eax, 3
cmp ebx, eax
jb 0x4403d2
call fcn.006151fe
add ebp, 4
mov eax, dword [esi + 4]
mov edi, dword [eax + ebx*8 + 4]
jne 0x4403e3
call fcn.006151fe
mov dword [esp + 0x28], ebp
mov ebp, edi
lea esp, [esp]
mov ecx, dword [esi + 4]
test ecx, ecx
je 0x440406
mov eax, dword [esi + 8]
sub eax, ecx
sar eax, 3
lea ecx, [ebx + 1]
cmp ecx, eax
jb 0x44040b
call fcn.006151fe
mov ecx, dword [esi + 4]
cmp dword [ecx + ebx*8 + 0xc], ebp
lea eax, [ebx + 1]
je 0x440675
mov edi, dword [esp + 0x28]
test edi, edi
jne 0x440428
call fcn.006151fe
cmp ebp, dword [edi + 4]
jne 0x440432
call fcn.006151fe
cmp dword [ebp + 0x20], 0x10
jb 0x44043d
mov ecx, dword [ebp + 0xc]
jmp 0x440440
lea ecx, [ebp + 0xc]
mov eax, ecx
lea ebx, [eax + 1]
mov dl, byte [eax]
add eax, 1
test dl, dl
jne 0x440445
sub eax, ebx
add eax, ecx
cmp ecx, eax
mov edx, 0x811c9dc5
je 0x440472
jmp 0x440460
movsx ebx, byte [ecx]
imul edx, edx, 0x1000193
add ecx, 1
xor edx, ebx
cmp ecx, eax
jne 0x440460
push 0x1f31d
push edx
call fcn.00616f87
imul eax, eax, 0xb14
imul edx, edx, 0x41a7
add esp, 8
sub edx, eax
jns 0x440496
add edx, 0x7fffffff
mov eax, dword [esp + 0x34]
and edx, dword [eax + 0x20]
mov ebx, dword [esp + 0x14]
cmp edx, ebx
jne 0x4404b7
cmp ebp, dword [edi + 4]
jne 0x4404af
call fcn.006151fe
mov ebp, dword [ebp]
jmp 0x4403f0
mov edi, dword [esp + 0x34]
mov eax, dword [esp + 0x28]
mov ecx, dword [edi + 8]
add edi, 4
cmp ebp, dword [eax + 4]
mov dword [esp + 0x20], eax
mov dword [esp + 0x24], ebp
mov dword [esp + 0x1c], ecx
jne 0x4404db
call fcn.006151fe
cmp dword [esp + 0x20], edi
mov edx, dword [ebp]
mov dword [esp + 0x24], edx
je 0x4404ed
call fcn.006151fe
mov eax, dword [esp + 0x1c]
cmp dword [esp + 0x24], eax
je 0x4405df
mov edi, ebx
lea ecx, [ecx]
mov ecx, dword [esi + 4]
test ecx, ecx
je 0x440513
mov eax, dword [esi + 8]
sub eax, ecx
sar eax, 3
cmp edi, eax
jb 0x440518
call fcn.006151fe
mov ecx, dword [esi + 4]
cmp dword [ecx + edi*8 + 4], ebp
jne 0x440551
test ecx, ecx
je 0x440531
mov eax, dword [esi + 8]
sub eax, ecx
sar eax, 3
cmp edi, eax
jb 0x440536
call fcn.006151fe
test edi, edi
mov eax, dword [esi + 4]
mov edx, dword [esp + 0x20]
mov ecx, dword [esp + 0x24]
mov dword [eax + edi*8], edx
mov dword [eax + edi*8 + 4], ecx
je 0x440551
sub edi, 1
jmp 0x440500
mov ebx, dword [esp + 0x34]
mov edi, dword [ebx + 8]
add ebx, 4
cmp ebx, ebx
je 0x440568
xor ecx, ecx
mov edx, ebx
call fcn.004410c0
mov edx, dword [ebp + 4]
mov eax, dword [esp + 0x24]
mov dword [edx], eax
mov ecx, dword [eax + 4]
mov dword [ecx], edi
mov edx, dword [edi + 4]
mov dword [edx], ebp
mov edx, dword [eax + 4]
mov ecx, dword [edi + 4]
mov dword [edi + 4], edx
mov edx, dword [ebp + 4]
mov dword [eax + 4], edx
mov dword [ebp + 4], ecx
mov eax, dword [ebx + 4]
mov edi, dword [eax + 4]
cmp edi, eax
jne 0x44059c
call fcn.006151fe
mov edx, dword [esp + 0x34]
mov ebx, dword [edx + 8]
lea eax, [edx + 4]
mov ebp, edi
mov edi, dword [edx + 0x24]
mov dword [esp + 0x28], eax
mov eax, dword [esi + 4]
add edi, 1
test eax, eax
je 0x4405c5
mov ecx, dword [esi + 8]
sub ecx, eax
sar ecx, 3
cmp edi, ecx
jb 0x4405ce
call fcn.006151fe
mov edx, dword [esp + 0x34]
mov eax, dword [esi + 4]
lea ecx, [edx + 4]
mov dword [eax + edi*8], ecx
mov dword [eax + edi*8 + 4], ebx
mov ebx, dword [esp + 0x14]
mov eax, dword [esp + 0x34]
mov edi, dword [eax + 0x24]
cmp ebx, edi
jae 0x440647
lea ebx, [ebx]
mov eax, dword [esp + 0x34]
mov ecx, dword [esi + 4]
mov ebx, dword [eax + 8]
add eax, 4
test ecx, ecx
je 0x44060d
mov eax, dword [esi + 8]
sub eax, ecx
sar eax, 3
cmp edi, eax
jb 0x440612
call fcn.006151fe
mov ecx, dword [esi + 4]
cmp dword [ecx + edi*8 + 4], ebx
jne 0x440647
test ecx, ecx
je 0x44062b
mov eax, dword [esi + 8]
sub eax, ecx
sar eax, 3
cmp edi, eax
jb 0x440630
call fcn.006151fe
mov eax, dword [esi + 4]
mov edx, dword [esp + 0x28]
mov dword [eax + edi*8], edx
mov dword [eax + edi*8 + 4], ebp
sub edi, 1
cmp dword [esp + 0x14], edi
jb 0x4405f0
mov eax, dword [esp + 0x34]
mov edi, dword [eax + 8]
add eax, 4
cmp dword [esp + 0x20], eax
je 0x44065c
call fcn.006151fe
mov ebp, dword [esp + 0x24]
cmp ebp, edi
je 0x440675
mov eax, dword [esp + 0x20]
mov ebx, dword [esp + 0x14]
mov dword [esp + 0x28], eax
jmp 0x4403f0
mov eax, dword [esp + 0x34]
add dword [eax + 0x24], 1
mov ecx, dword [esp + 0x3c]
mov ebp, eax
cmp dword [ecx + 0x18], 0x10
jb 0x440694
lea eax, [ecx + 4]
mov ecx, dword [eax]
mov dword [esp + 0x34], eax
jmp 0x44069b
add ecx, 4
mov dword [esp + 0x34], ecx
mov eax, ecx
lea esi, [eax + 1]
mov dl, byte [eax]
add eax, 1
test dl, dl
jne 0x4406a0
sub eax, esi
add eax, ecx
cmp ecx, eax
mov edx, 0x811c9dc5
je 0x4406d2
jmp 0x4406c0
movsx esi, byte [ecx]
imul edx, edx, 0x1000193
add ecx, 1
xor edx, esi
cmp ecx, eax
jne 0x4406c0
push 0x1f31d
push edx
call fcn.00616f87
imul eax, eax, 0xb14
imul edx, edx, 0x41a7
add esp, 8
sub edx, eax
jns 0x4406f6
add edx, 0x7fffffff
mov eax, dword [ebp + 0x20]
and edx, eax
cmp dword [ebp + 0x24], edx
mov dword [esp + 0x14], edx
ja 0x440711
shr eax, 1
or ecx, 0xffffffff
sub ecx, eax
add edx, ecx
mov dword [esp + 0x14], edx
mov ecx, dword [ebp + 0x14]
test ecx, ecx
mov dword [esp + 0x20], edx
lea esi, [edx + 1]
je 0x44072b
mov eax, dword [ebp + 0x18]
sub eax, ecx
sar eax, 3
cmp esi, eax
jb 0x440730
call fcn.006151fe
mov edx, dword [ebp + 0x14]
mov esi, dword [edx + esi*8 + 4]
lea edi, [ebp + 4]
test edi, edi
jne 0x440743
call fcn.006151fe
mov dword [esp + 0x28], edi
mov ecx, dword [ebp + 0x14]
test ecx, ecx
je 0x44075c
mov eax, dword [ebp + 0x18]
sub eax, ecx
sar eax, 3
cmp dword [esp + 0x14], eax
jb 0x440761
call fcn.006151fe
mov eax, dword [ebp + 0x14]
mov ecx, dword [esp + 0x14]
cmp dword [eax + ecx*8 + 4], esi
je 0x440870
mov edi, dword [esp + 0x28]
test edi, edi
jne 0x44077f
call fcn.006151fe
mov esi, dword [esi + 4]
cmp esi, dword [edi + 4]
jne 0x440796
call fcn.006151fe
cmp esi, dword [edi + 4]
jne 0x440796
call fcn.006151fe
cmp dword [esi + 0x20], 0x10
mov ebx, dword [esi + 0x1c]
jb 0x4407a8
mov edx, dword [esi + 0xc]
mov dword [esp + 0x18], edx
jmp 0x4407af
lea eax, [esi + 0xc]
mov dword [esp + 0x18], eax
mov edx, dword [esp + 0x3c]
mov edi, dword [edx + 0x14]
cmp edi, ebx
mov eax, edi
mov ecx, edi
jb 0x4407c0
mov ecx, ebx
cmp dword [edx + 0x18], 0x10
jb 0x4407ce
mov edx, dword [esp + 0x34]
mov eax, dword [edx]
jmp 0x4407d2
mov eax, dword [esp + 0x34]
push ecx
mov ecx, dword [esp + 0x1c]
push ecx
push eax
call fcn.00403fd0
add esp, 0xc
test eax, eax
jne 0x4407f4
cmp edi, ebx
jb 0x440747
cmp edi, ebx
setne al
test eax, eax
jl 0x440747
mov edx, dword [esp + 0x28]
cmp esi, dword [edx + 4]
jne 0x440808
call fcn.006151fe
mov eax, dword [esp + 0x3c]
cmp dword [eax + 0x18], 0x10
mov ebx, dword [eax + 0x14]
jb 0x44081d
mov eax, dword [esp + 0x34]
mov edx, dword [eax]
jmp 0x440821
mov edx, dword [esp + 0x34]
mov edi, dword [esi + 0x1c]
mov eax, edi
cmp eax, edi
jae 0x44082a
cmp edi, ebx
mov ecx, edi
jb 0x440832
mov ecx, ebx
cmp dword [esi + 0x20], 0x10
jb 0x44083d
mov eax, dword [esi + 0xc]
jmp 0x440840
lea eax, [esi + 0xc]
push ecx
push edx
push eax
call fcn.00403fd0
add esp, 0xc
test eax, eax
jne 0x44085a
cmp edi, ebx
jb 0x440860
cmp edi, ebx
setne al
test eax, eax
jge 0x44090f
mov ecx, dword [esp + 0x28]
cmp esi, dword [ecx + 4]
jne 0x44086e
call fcn.006151fe
mov esi, dword [esi]
mov eax, dword [esp + 0x3c]
mov ecx, dword [esi + 4]
mov ebx, dword [esp + 0x28]
push eax
push ecx
push esi
mov dword [esp + 0x28], esi
call fcn.004411e0
mov ecx, 1
lea edx, [ebp + 4]
mov edi, eax
call fcn.004410c0
test ebx, ebx
mov dword [esi + 4], edi
mov edx, dword [edi + 4]
mov dword [edx], edi
jne 0x4408a7
call fcn.006151fe
mov eax, dword [esi + 4]
cmp eax, dword [ebx + 4]
mov dword [esp + 0x1c], eax
jne 0x4408b8
call fcn.006151fe
mov edi, dword [esp + 0x20]
lea esp, [esp]
mov ecx, dword [ebp + 0x14]
test ecx, ecx
je 0x4408d3
mov eax, dword [ebp + 0x18]
sub eax, ecx
sar eax, 3
cmp edi, eax
jb 0x4408d8
call fcn.006151fe
mov eax, dword [ebp + 0x14]
cmp dword [eax + edi*8 + 4], esi
jne 0x44092a
mov ecx, eax
test ecx, ecx
je 0x4408f3
mov eax, dword [ebp + 0x18]
sub eax, ecx
sar eax, 3
cmp edi, eax
jb 0x4408f8
call fcn.006151fe
test edi, edi
mov eax, dword [ebp + 0x14]
mov ecx, dword [esp + 0x1c]
mov dword [eax + edi*8], ebx
mov dword [eax + edi*8 + 4], ecx
je 0x44092a
sub edi, 1
jmp 0x4408c0
mov eax, dword [esp + 0x38]
mov edx, dword [esp + 0x28]
mov dword [eax], edx
mov dword [eax + 4], esi
mov byte [eax + 8], 0
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x20
ret 0xc
mov eax, dword [esp + 0x38]
mov edx, dword [esp + 0x1c]
pop edi
pop esi
pop ebp
mov dword [eax], ebx
mov dword [eax + 4], edx
mov byte [eax + 8], 1
pop ebx
add esp, 0x20
ret 0xc