Function at 0x4a3aa0
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 8
mov ecx, dword [esp + 0x1c]
mov ebx, dword [esp + 0x24]
mov edi, dword [esp + 0x20]
movzx esi, cx
shr ecx, 0x10
cmp ebx, 1
jne 0x4a3811
movzx eax, byte [edi]
lea edx, [esi + eax]
lea eax, [esi + eax - 0xfff1]
cmp edx, 0xfff0
cmovbe eax, edx
add ecx, eax
mov edx, ecx
shl edx, 0x10
cmp ecx, 0xfff0
lea ecx, [edx + 0xf0000]
cmovbe ecx, edx
or ecx, eax
jmp 0x4a3a93
test edi, edi
je 0x4a3858
cmp ebx, 0x10
jae 0x4a3862
test ebx, ebx
je 0x4a382b
nop
movzx eax, byte [edi]
inc edi
add esi, eax
add ecx, esi
dec ebx
jne 0x4a3820
lea edi, [esi - 0xfff1]
cmp esi, 0xfff0
mov edx, 0x80078071
mov eax, ecx
cmovbe edi, esi
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, edi
jmp 0x4a3a93
mov ecx, 1
jmp 0x4a3a93
cmp ebx, 0x15b0
jb 0x4a399c
mov ebp, 0x80078071
nop word cs:[eax + eax]
nop dword [eax]
add ebx, 0xffffea50
mov eax, 0xffffea60
jmp 0x4a3893
add eax, 0x10
movzx edx, byte [edi + eax + 0x15a0]
add edx, esi
movzx esi, byte [edi + eax + 0x15a1]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a2]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a3]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a4]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a5]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a6]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a7]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15a8]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15a9]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15aa]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15ab]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15ac]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15ad]
add ecx, edx
add esi, edx
movzx edx, byte [edi + eax + 0x15ae]
add ecx, esi
add edx, esi
movzx esi, byte [edi + eax + 0x15af]
add ecx, edx
add esi, edx
add ecx, esi
test eax, eax
jne 0x4a3890
mov eax, esi
add edi, 0x15b0
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
cmp ebx, 0x15af
ja 0x4a3880
test ebx, ebx
je 0x4a3a8e
cmp ebx, 0x10
jb 0x4a3a60
mov edx, ebx
lea ebx, [ebx - 0x10]
mov eax, ebx
and eax, 0xfffffff0
mov dword [esp + 4], eax
lea eax, [eax + 0x10]
mov dword [esp], eax
mov eax, edi
nop word cs:[eax + eax]
nop dword [eax]
movzx ebp, byte [eax]
add edx, 0xfffffff0
add ebp, esi
movzx esi, byte [eax + 1]
add ecx, ebp
add esi, ebp
movzx ebp, byte [eax + 2]
add ecx, esi
add ebp, esi
movzx esi, byte [eax + 3]
add ecx, ebp
add esi, ebp
movzx ebp, byte [eax + 4]
add ecx, esi
add ebp, esi
movzx esi, byte [eax + 5]
add ecx, ebp
add esi, ebp
movzx ebp, byte [eax + 6]
add ecx, esi
add ebp, esi
movzx esi, byte [eax + 7]
add ecx, ebp
add esi, ebp
movzx ebp, byte [eax + 8]
add ecx, esi
add ebp, esi
movzx esi, byte [eax + 9]
add ecx, ebp
add esi, ebp
movzx ebp, byte [eax + 0xa]
add ecx, esi
add ebp, esi
movzx esi, byte [eax + 0xb]
add ecx, ebp
add esi, ebp
movzx ebp, byte [eax + 0xc]
add ecx, esi
add ebp, esi
movzx esi, byte [eax + 0xd]
add ecx, ebp
add esi, ebp
movzx ebp, byte [eax + 0xe]
add ecx, esi
add ebp, esi
movzx esi, byte [eax + 0xf]
add eax, 0x10
add ecx, ebp
add esi, ebp
add ecx, esi
cmp edx, 0xf
ja 0x4a39c0
sub ebx, dword [esp + 4]
je 0x4a3a6b
add edi, dword [esp]
nop word [eax + eax]
movzx eax, byte [edi]
inc edi
add esi, eax
add ecx, esi
dec ebx
jne 0x4a3a60
mov edi, 0x80078071
mov eax, esi
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, esi
mov eax, ecx
add esp, 8
pop esi
pop edi
pop ebx
pop ebp
ret
jmp 0x4a37c0