Function at 0x409530
Capabilities:
Hash data with crc32

Disassembly:
push ecx
mov ecx, dword [esp + 8]
test ecx, ecx
push edi
je 0x409ab0
mov edi, dword [esp + 0x14]
test edi, edi
je 0x409ab0
mov eax, dword [esp + 0x20]
mov edx, dword [esp + 0x24]
mov dword [eax], 0xffffffff
mov eax, dword [esp + 0x10]
mov dword [edx], 0
push ebx
movzx ebx, word [edi + 0xc]
cdq
idiv ebx
push ebp
push esi
or esi, 0xffffffff
mov ebx, eax
mov ax, word [edi + 0xe]
cmp ax, 8
mov di, word [edi + 2]
jne 0x40968f
cmp di, 2
jne 0x409636
test ebx, ebx
jle 0x409a8c
mov ebp, dword [esp + 0x24]
mov eax, dword [esp + 0x28]
sub eax, ebp
mov dword [esp + 0x24], eax
mov dword [esp + 0x28], ebx
movzx eax, byte [ecx]
movzx edi, byte [ecx + 1]
mov edx, esi
and edx, 0xff
xor edx, eax
lea ebx, [eax - 0x80]
mov eax, dword [edx*4 + 0x4215c0]
movzx edx, byte [ecx + 1]
shr esi, 8
xor esi, eax
sub edi, 0x80
inc ecx
mov eax, esi
and eax, 0xff
xor eax, edx
mov edx, dword [eax*4 + 0x4215c0]
shr esi, 8
xor esi, edx
mov eax, edi
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
inc ecx
cmp eax, dword [edx]
jle 0x4095f9
mov dword [edx], eax
mov eax, ebx
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
cmp eax, dword [edx]
jle 0x40960a
mov dword [edx], eax
mov edx, dword [esp + 0x24]
mov eax, edi
sub eax, ebx
mov dword [edx + ebp], eax
cdq
sub eax, edx
sar eax, 1
add eax, ebx
mov dword [ebp], eax
mov eax, dword [esp + 0x28]
add ebp, 4
dec eax
mov dword [esp + 0x28], eax
jne 0x4095a7
jmp 0x409a8c
cmp di, 1
jne 0x409a8c
xor ebp, ebp
test ebx, ebx
jle 0x409a8c
lea ebx, [ebx]
movzx eax, byte [ecx]
mov edx, esi
and edx, 0xff
xor edx, eax
lea edi, [eax - 0x80]
mov eax, dword [edx*4 + 0x4215c0]
shr esi, 8
xor esi, eax
mov eax, edi
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
inc ecx
cmp eax, dword [edx]
jle 0x40967e
mov dword [edx], eax
mov eax, dword [esp + 0x24]
mov dword [eax + ebp*4], edi
inc ebp
cmp ebp, ebx
jl 0x409650
jmp 0x409a8c
cmp ax, 0x18
jne 0x4098b0
cmp di, 2
jne 0x409800
test ebx, ebx
jle 0x409a8c
mov eax, dword [esp + 0x24]
mov edx, dword [esp + 0x28]
sub edx, eax
mov ebp, eax
mov dword [esp + 0x24], edx
mov dword [esp + 0x28], ebx
nop
movzx eax, byte [ecx]
mov edx, esi
and edx, 0xff
xor edx, eax
mov edi, dword [edx*4 + 0x4215c0]
movzx edx, byte [ecx + 1]
shr esi, 8
xor esi, edi
inc ecx
mov edi, edx
shl edi, 8
or eax, edi
mov edi, esi
and edi, 0xff
xor edi, edx
mov ebx, dword [edi*4 + 0x4215c0]
movzx edx, byte [ecx + 1]
shr esi, 8
xor esi, ebx
inc ecx
mov edi, edx
shl edi, 0x10
or eax, edi
mov edi, esi
and edi, 0xff
xor edi, edx
mov ebx, dword [edi*4 + 0x4215c0]
shr esi, 8
xor esi, ebx
inc ecx
test eax, 0x800000
mov edx, esi
je 0x409733
and eax, 0x7fffff
sub eax, 0x800000
jmp 0x409738
and eax, 0x7fffff
mov esi, edx
and esi, 0xff
mov ebx, eax
movzx eax, byte [ecx]
xor esi, eax
mov edi, dword [esi*4 + 0x4215c0]
movzx esi, byte [ecx + 1]
shr edx, 8
xor edx, edi
inc ecx
mov edi, esi
shl edi, 8
or eax, edi
mov edi, edx
and edi, 0xff
xor edi, esi
mov esi, dword [edi*4 + 0x4215c0]
shr edx, 8
xor edx, esi
movzx esi, byte [ecx + 1]
inc ecx
mov edi, esi
shl edi, 0x10
or eax, edi
mov edi, edx
and edi, 0xff
xor edi, esi
mov esi, dword [edi*4 + 0x4215c0]
shr edx, 8
xor edx, esi
inc ecx
test eax, 0x800000
mov esi, edx
je 0x4097ad
and eax, 0x7fffff
sub eax, 0x800000
jmp 0x4097b2
and eax, 0x7fffff
mov edi, eax
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
cmp eax, dword [edx]
jle 0x4097c3
mov dword [edx], eax
mov eax, ebx
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
cmp eax, dword [edx]
jle 0x4097d4
mov dword [edx], eax
mov edx, dword [esp + 0x24]
mov eax, edi
sub eax, ebx
mov dword [edx + ebp], eax
cdq
sub eax, edx
sar eax, 1
add eax, ebx
mov dword [ebp], eax
mov eax, dword [esp + 0x28]
add ebp, 4
dec eax
mov dword [esp + 0x28], eax
jne 0x4096c0
jmp 0x409a8c
cmp di, 1
jne 0x409a8c
xor ebp, ebp
test ebx, ebx
jle 0x409a8c
movzx eax, byte [ecx]
mov edx, esi
and edx, 0xff
xor edx, eax
mov edi, dword [edx*4 + 0x4215c0]
movzx edx, byte [ecx + 1]
shr esi, 8
xor esi, edi
inc ecx
mov edi, edx
shl edi, 8
or eax, edi
mov edi, esi
and edi, 0xff
xor edi, edx
mov edx, dword [edi*4 + 0x4215c0]
shr esi, 8
xor esi, edx
movzx edx, byte [ecx + 1]
inc ecx
mov edi, edx
shl edi, 0x10
or eax, edi
mov edi, esi
and edi, 0xff
xor edi, edx
mov edx, dword [edi*4 + 0x4215c0]
shr esi, 8
xor esi, edx
inc ecx
test eax, 0x800000
je 0x409885
and eax, 0x7fffff
sub eax, 0x800000
jmp 0x40988a
and eax, 0x7fffff
mov edi, eax
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
cmp eax, dword [edx]
jle 0x40989b
mov dword [edx], eax
mov eax, dword [esp + 0x24]
mov dword [eax + ebp*4], edi
inc ebp
cmp ebp, ebx
jl 0x409814
jmp 0x409a8c
cmp di, 2
jne 0x409a0a
xor edx, edx
xor eax, eax
test ebx, ebx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], eax
jle 0x4099ab
mov ebp, dword [esp + 0x24]
mov eax, dword [esp + 0x28]
sub eax, ebp
mov dword [esp + 0x24], eax
mov dword [esp + 0x10], ebx
movzx eax, byte [ecx]
movsx edi, word [ecx]
mov edx, esi
and edx, 0xff
xor edx, eax
mov ebx, dword [edx*4 + 0x4215c0]
movzx eax, byte [ecx + 1]
shr esi, 8
xor esi, ebx
inc ecx
mov edx, esi
and edx, 0xff
xor edx, eax
mov ebx, dword [edx*4 + 0x4215c0]
movzx eax, byte [ecx + 1]
shr esi, 8
xor esi, ebx
movsx ebx, word [ecx + 1]
inc ecx
mov edx, esi
and edx, 0xff
xor edx, eax
mov eax, dword [edx*4 + 0x4215c0]
shr esi, 8
xor esi, eax
movzx eax, byte [ecx + 1]
inc ecx
mov edx, esi
and edx, 0xff
xor edx, eax
mov eax, dword [edx*4 + 0x4215c0]
shr esi, 8
xor esi, eax
mov eax, ebx
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x18]
inc ecx
cmp eax, edx
jle 0x409965
mov dword [esp + 0x18], eax
mov eax, edi
cdq
xor eax, edx
sub eax, edx
cmp eax, dword [esp + 0x20]
jle 0x409976
mov dword [esp + 0x20], eax
mov edx, dword [esp + 0x24]
mov eax, ebx
sub eax, edi
mov dword [edx + ebp], eax
cdq
sub eax, edx
sar eax, 1
add eax, edi
mov dword [ebp], eax
mov eax, dword [esp + 0x10]
add ebp, 4
dec eax
mov dword [esp + 0x10], eax
jne 0x4098e0
mov eax, dword [esp + 0x18]
mov edx, eax
test eax, eax
mov eax, dword [esp + 0x20]
jne 0x4099b2
mov ecx, dword [esp + 0x30]
or dword [ecx], 1
test eax, eax
mov ebx, dword [esp + 0x30]
jne 0x4099bd
or dword [ebx], 2
cmp edx, eax
mov ecx, edx
jg 0x4099c5
mov ecx, eax
mov edi, dword [esp + 0x34]
cmp ecx, dword [edi]
jle 0x4099d5
cmp edx, eax
jle 0x4099d3
mov eax, edx
mov dword [edi], eax
mov edi, dword [esp + 0x28]
mov eax, dword [edi]
xor ecx, ecx
test eax, eax
jne 0x409a8c
mov eax, dword [esp + 0x1c]
cdq
and edx, 3
add eax, edx
sar eax, 2
inc ecx
cmp ecx, eax
je 0x409a02
cmp dword [edi + ecx*4], 0
je 0x4099f2
jmp 0x409a8c
or dword [ebx], 4
jmp 0x409a8c
cmp di, 1
jne 0x409a8c
xor ebp, ebp
test ebx, ebx
mov dword [esp + 0x28], ebp
jle 0x409a77
lea ebx, [ebx]
movzx edx, byte [ecx]
movsx edi, word [ecx]
mov eax, esi
and eax, 0xff
xor eax, edx
mov edx, dword [eax*4 + 0x4215c0]
shr esi, 8
xor esi, edx
movzx edx, byte [ecx + 1]
inc ecx
mov eax, esi
and eax, 0xff
xor eax, edx
mov edx, dword [eax*4 + 0x4215c0]
shr esi, 8
xor esi, edx
mov eax, edi
cdq
xor eax, edx
sub eax, edx
inc ecx
cmp eax, ebp
jle 0x409a63
mov ebp, eax
mov eax, dword [esp + 0x28]
mov edx, dword [esp + 0x24]
mov dword [edx + eax*4], edi
inc eax
cmp eax, ebx
mov dword [esp + 0x28], eax
jl 0x409a20
mov eax, dword [esp + 0x34]
cmp ebp, dword [eax]
jle 0x409a81
mov dword [eax], ebp
test ebp, ebp
jne 0x409a8c
mov eax, dword [esp + 0x30]
or dword [eax], 1
mov eax, dword [esp + 0x30]
mov ecx, dword [eax]
not esi
shr esi, 1
test ecx, ecx
je 0x409aa0
or esi, 0x80000000
mov ecx, dword [esp + 0x2c]
mov dword [ecx], esi
pop esi
pop ebp
pop ebx
xor eax, eax
pop edi
pop ecx
ret 0x20
mov eax, 0x1388
pop edi
pop ecx
ret 0x20