Function at 0x66c820
Capabilities:
Compute adler32 checksum

Disassembly:
sub esp, 0xc4
mov eax, dword [esp + 0xc8]
push ebx
push ebp
push esi
mov eax, dword [eax]
mov ebp, ecx
mov esi, dword [esp + 0xdc]
add eax, edx
mov dword [esp + 0x1c], eax
mov ebx, edx
mov eax, dword [esp + 0xe0]
push edi
mov edi, esi
mov dword [esp + 0x28], edx
mov dword [esp + 0x2c], ebp
mov eax, dword [eax]
mov dword [esp + 0x14], 0xffffffff
mov dword [esp + 0x18], ebx
mov dword [esp + 0x24], edi
lea ecx, [eax + esi]
mov dword [esp + 0x44], ecx
mov ecx, dword [esp + 0xe8]
and ecx, 4
mov dword [esp + 0x34], ecx
mov ecx, dword [esp + 0xdc]
je 0x66c88a
or edx, 0xffffffff
jmp 0x66c891
sub eax, ecx
lea edx, [esi - 1]
add edx, eax
lea eax, [edx + 1]
mov dword [esp + 0x3c], edx
test edx, eax
jne 0x66defc
cmp esi, ecx
jb 0x66defc
mov eax, dword [ebp + 0x20]
mov edx, dword [ebp + 0x38]
mov ecx, dword [ebp + 0x24]
mov esi, dword [ebp + 4]
mov dword [esp + 0x30], eax
mov eax, dword [ebp + 0x28]
mov dword [esp + 0x40], eax
mov eax, dword [ebp + 0x3c]
mov dword [esp + 0x48], eax
mov eax, dword [ebp]
mov dword [esp + 0x1c], edx
mov dword [esp + 0x10], ecx
cmp eax, 0x35
ja 0x66dd27
movzx eax, byte [eax + 0x10002bb0]
jmp dword [eax*4 + 0x10002b28]
or ecx, 0xffffffff
mov eax, dword [esp + 0x30]
sub ebx, dword [esp + 0x28]
mov edi, dword [esp + 0x24]
sub edi, dword [esp + 0xe0]
test byte [esp + 0xe8], 9
mov dword [ebp + 0x20], eax
mov eax, dword [esp + 0x10]
mov dword [ebp + 0x24], eax
mov eax, dword [esp + 0x40]
mov dword [ebp + 0x28], eax
mov eax, dword [esp + 0x48]
mov dword [ebp + 0x3c], eax
mov eax, dword [esp + 0xd8]
mov dword [ebp + 4], esi
mov dword [ebp + 0x38], edx
mov dword [esp + 0x24], edi
mov dword [eax], ebx
mov eax, dword [esp + 0xe4]
mov dword [eax], edi
je 0x66deef
test ecx, ecx
js 0x66deef
mov esi, dword [ebp + 0x1c]
mov eax, 0x5e6ea9af
mul edi
mov ebx, edi
movzx ecx, si
shr edx, 0xb
imul eax, edx, 0x15b0
shr esi, 0x10
sub ebx, eax
mov dword [esp + 0x38], ebx
test edi, edi
je 0x66deca
xor edi, edi
cmp ebx, 7
jbe 0x66de19
mov ebp, dword [esp + 0xe0]
mov edx, 7
sub edx, ebp
movzx eax, byte [ebp]
add edi, 8
add ecx, eax
movzx eax, byte [ebp + 1]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 2]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 3]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 4]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 5]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 6]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 7]
add ebp, 8
add esi, ecx
add ecx, eax
add esi, ecx
lea eax, [edx + ebp]
cmp eax, ebx
jb 0x66ddc5
mov dword [esp + 0xe0], ebp
xor ebp, ebp
xor edx, edx
cmp edi, ebx
jae 0x66de8f
mov eax, ebx
sub eax, edi
cmp eax, 2
jb 0x66de70
mov edx, ebx
mov ebx, ebp
sub edx, edi
sub edx, 2
shr edx, 1
inc edx
lea edi, [edi + edx*2]
mov dword [esp + 0x4c], edi
mov edi, dword [esp + 0xe0]
movzx eax, byte [edi]
add ecx, eax
movzx eax, byte [edi + 1]
add ebp, ecx
add edi, 2
add ecx, eax
add ebx, ecx
dec edx
jne 0x66de44
mov dword [esp + 0x3c], ebx
mov ebx, dword [esp + 0x38]
mov edx, dword [esp + 0x3c]
mov dword [esp + 0xe0], edi
mov edi, dword [esp + 0x4c]
cmp edi, ebx
jae 0x66de8a
mov edi, dword [esp + 0xe0]
movzx eax, byte [edi]
add ecx, eax
add esi, ecx
inc edi
mov dword [esp + 0xe0], edi
lea eax, [edx + ebp]
add esi, eax
mov eax, 0x80078071
mul ecx
shr edx, 0xf
imul eax, edx, 0xffff000f
add ecx, eax
mov eax, 0x80078071
mul esi
shr edx, 0xf
imul eax, edx, 0xffff000f
add esi, eax
sub dword [esp + 0x24], ebx
mov ebx, 0x15b0
mov dword [esp + 0x38], ebx
jne 0x66ddb0
mov ebp, dword [esp + 0x2c]
shl esi, 0x10
add esi, ecx
mov ecx, dword [esp + 0x14]
mov dword [ebp + 0x1c], esi
test ecx, ecx
jne 0x66deef
test byte [esp + 0xe8], 1
je 0x66deef
cmp esi, dword [ebp + 0x10]
mov eax, 0xfffffffe
cmovne ecx, eax
pop edi
pop esi
pop ebp
mov eax, ecx
pop ebx
add esp, 0xc4
ret
mov eax, dword [esp + 0xe4]
pop edi
pop esi
pop ebp
mov dword [eax], 0
mov eax, dword [esp + 0xcc]
pop ebx
mov dword [eax], 0
mov eax, 0xfffffffd
add esp, 0xc4
ret