Function at 0x1003c580
Capabilities:
Hash data using fnv

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x20
push ebx
push esi
push edi
mov edi, dword [ebp + 8]
mov esi, ecx
test dword [edi + 8], 0x1c00000
jne 0x1003c789
mov eax, dword [edi + 0x18]
test eax, eax
jne 0x1003c5ef
mov ecx, dword [edi + 8]
mov eax, ecx
movups xmm0, xmmword [edi + 4]
shr eax, 0x14
movups xmmword [ebp - 0x18], xmm0
test al, 1
je 0x1003c5d3
test dword [edi + 4], 0x1ff8000
jne 0x1003c5d3
cmp dword [edi + 0xc], 2
jne 0x1003c5d3
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x10], 1
movups xmm0, xmmword [ebp - 0x18]
push ecx
push dword [ebp + 0xc]
lea eax, [ebp - 0x18]
mov ecx, esi
push eax
movups xmmword [ebp - 0x18], xmm0
call fcn.1003c330
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x14
cmp eax, 2
je 0x1003c5fd
cmp eax, 3
jne 0x1003c780
mov eax, dword [esi + 0x20]
cmp eax, dword [esi + 0x18]
jb 0x1003c614
cmp dword [esi + 0xc], 3
jne 0x1003c6c9
call fcn.1003b4d0
mov dl, byte [ebp + 0xc]
mov ecx, dword [esi + 0x1c]
and dl, 7
mov eax, dword [esi + 0x20]
shl dl, 3
or dl, 5
mov byte [ecx + eax], dl
mov ecx, dword [esi + 0x20]
inc ecx
mov dword [esi + 0x20], ecx
mov edx, dword [edi + 0x14]
mov ebx, dword [edi + 0x10]
mov dword [ebp - 8], edx
test edx, edx
je 0x1003c759
sub ebx, dword [ebp + 0x10]
cmp dword [esi + 0xc], 3
jne 0x1003c65c
lea eax, [ecx + 0x10]
cmp eax, dword [esi + 0x18]
jb 0x1003c65c
mov ecx, esi
call fcn.1003b4d0
mov edx, dword [ebp - 8]
mov edx, dword [edx + 4]
mov edi, dword [ebp - 8]
test edx, edx
jne 0x1003c672
mov edx, dword [esi + 0x34]
lea eax, [edx + 1]
mov dword [esi + 0x34], eax
mov dword [edi + 4], edx
movzx eax, dl
xor eax, 0x811c9dc5
imul ecx, eax, 0x1000193
mov eax, edx
shr eax, 8
movzx eax, al
xor ecx, eax
mov eax, edx
imul ecx, ecx, 0x1000193
shr eax, 0x10
movzx eax, al
xor ecx, eax
mov eax, edx
imul ecx, ecx, 0x1000193
shr eax, 0x18
xor ecx, eax
imul eax, ecx, 0x1000193
mov ecx, dword [esi + 0x50]
and ecx, eax
mov eax, dword [esi + 0x44]
lea eax, [eax + ecx*8]
mov ecx, dword [esi + 0x3c]
mov dword [ebp - 8], eax
mov eax, dword [eax + 4]
cmp eax, ecx
jne 0x1003c6d0
xor eax, eax
jmp 0x1003c6f3
push 2
jmp 0x1003c78b
mov ecx, dword [ebp - 8]
mov ecx, dword [ecx]
cmp edx, dword [eax + 8]
je 0x1003c6f0
nop word [eax + eax]
cmp eax, ecx
je 0x1003c6ee
mov eax, dword [eax + 4]
cmp edx, dword [eax + 8]
jne 0x1003c6e0
jmp 0x1003c6f0
xor eax, eax
mov ecx, dword [esi + 0x3c]
test eax, eax
push 4
cmove eax, ecx
cmp eax, ecx
mov ecx, esi
push 0
jne 0x1003c73f
push 0
call fcn.1003b610
mov eax, dword [edi + 4]
lea ecx, [esi + 0x58]
mov dword [ebp - 0x1c], eax
mov eax, dword [esi + 0x20]
mov dword [ebp - 0x18], eax
lea eax, [ebp - 0x1c]
push eax
lea eax, [ebp - 8]
mov dword [ebp - 0x14], 4
push eax
mov dword [ebp - 0x10], 0
mov dword [ebp - 0xc], ebx
call fcn.1003f220
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x14
sub ebx, dword [esi + 0x20]
mov eax, dword [eax + 0xc]
add ebx, 0xfffffffc
add eax, ebx
push eax
call fcn.1003b610
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x14
cmp dword [edi + 0x18], 3
jne 0x1003c778
cmp dword [esi + 0xc], 3
jne 0x1003c769
push 0x2a
jmp 0x1003c78b
mov eax, 0xfffffffc
sub eax, dword [esi + 0x1c]
sub eax, ecx
sub eax, dword [ebp + 0x10]
add ebx, eax
push ebx
mov ecx, esi
call fcn.1003b6a0
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x14
push 0x1b
lea ecx, [ebp - 0x18]
call fcn.1003b110
push 0x1008a328
mov eax, ecx
push eax
call fcn.1004c1ae
int3