Function at 0x4f2d52
Capabilities:
Compress data via zlib inflate or deflate

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 0x8c
cmp dword [ebp + 8], 0
je case.default.0x4f2dea
mov eax, dword [ebp + 8]
mov esi, dword [eax + 0x1c]
test esi, esi
je case.default.0x4f2dea
cmp dword [eax + 0xc], 0
je case.default.0x4f2dea
cmp dword [eax], 0
jne 0x4f2d8f
cmp dword [eax + 4], 0
jne case.default.0x4f2dea
cmp dword [esi], 0xb
jne 0x4f2d9a
mov dword [esi], 0xc
mov edx, dword [ebp + 8]
mov ecx, dword [ebp + 8]
mov ebx, dword [ebp + 8]
mov eax, dword [ebp + 8]
mov ecx, dword [ecx + 0x10]
mov edx, dword [edx + 0xc]
mov eax, dword [eax + 4]
mov dword [ebp - 0x64], edx
mov dword [ebp - 0x5c], ecx
mov ebx, dword [ebx]
mov edx, dword [esi + 0x3c]
mov dword [ebp - 0x50], ecx
lea ecx, [esi + 0x530]
mov dword [ebp - 0x68], ebx
mov dword [ebp - 0x24], eax
mov edi, dword [esi + 0x38]
mov dword [ebp - 0x58], edx
mov dword [ebp - 0x60], eax
mov dword [ebp - 0x4c], 0
mov dword [ebp - 0x8c], ecx
cmp dword [esi], 0x1e
ja case.default.0x4f2dea
mov eax, dword [esi]
jmp dword [eax*4 + 0x54ba7c]
mov dword [ebp - 0x4c], 0xfffffffd
jmp 0x4f3f9d
mov edx, dword [esi + 8]
test edx, edx
jne 0x4f2e2e
mov dword [esi], 0xc
jmp 0x4f2ddf
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ebx, dword [ebp - 0x68]
movzx eax, byte [ebx]
mov cl, byte [ebp - 0x58]
inc ebx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], ebx
cmp dword [ebp - 0x58], 0xf
jbe 0x4f2e0c
and dl, 2
je 0x4f2e81
cmp edi, 0x8b1f
jne 0x4f2e81
push eax
push 0
push 0
push 0
call fcn.004f1f62
add esp, 0xc
lea ebx, [ebp - 0x10]
mov dword [esi + 0x18], eax
push 2
mov byte [ebp - 0x10], 0x1f
mov byte [ebp - 0xf], 0x8b
push ebx
push dword [esi + 0x18]
xor di, di
call fcn.004f1f62
mov dword [esi], 1
mov dword [esi + 0x18], eax
mov dword [ebp - 0x58], 0
jmp 0x4f338c
mov eax, dword [esi + 0x20]
mov dword [esi + 0x10], 0
test eax, eax
je 0x4f2e96
mov dword [eax + 0x30], 0xffffffff
test byte [esi + 8], 1
je 0x4f2ebc
mov eax, edi
mov edx, edi
shr edx, 8
and eax, 0xff
shl eax, 8
add eax, edx
mov edx, 0x1f
mov ecx, edx
xor edx, edx
div ecx
test edx, edx
je 0x4f2ecb
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.incorrect_header_check
jmp 0x4f3f7c
mov eax, edi
and eax, 0xf
cmp eax, 8
jne 0x4f2f7c
shr edi, 4
mov eax, edi
and eax, 0xf
lea ecx, [eax + 8]
mov eax, dword [esi + 0x24]
test eax, eax
jne 0x4f2ef0
mov dword [esi + 0x24], ecx
jmp 0x4f2f07
cmp ecx, eax
jbe 0x4f2f07
sub dword [ebp - 0x58], 4
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_window_size
jmp 0x4f3f7c
mov eax, 1
and edi, 0x200
shl eax, cl
mov dword [esi + 0x14], eax
push eax
push 0
push 0
push 0
call fcn.004f590c
mov ecx, dword [ebp + 8]
add esp, 0x10
cmp edi, 1
mov dword [esi + 0x18], eax
mov dword [ecx + 0x30], eax
mov dword [ebp - 0x58], 0
sbb eax, eax
xor edi, edi
and eax, 2
add eax, 9
mov dword [esi], eax
jmp 0x4f2ddf
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ebx, dword [ebp - 0x68]
movzx eax, byte [ebx]
mov cl, byte [ebp - 0x58]
inc ebx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], ebx
cmp dword [ebp - 0x58], 0xf
jbe 0x4f2f4a
mov ebx, edi
mov dword [esi + 0x10], edi
cmp bl, 8
je 0x4f2f8b
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.unknown_compression_method
jmp 0x4f3f7c
test di, 0xe000
je 0x4f2fa1
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.unknown_header_flags_set
jmp 0x4f3f7c
mov edx, dword [esi + 0x20]
test edx, edx
je 0x4f2fb2
mov eax, edi
shr eax, 8
and eax, 1
mov dword [edx], eax
test byte [esi + 0x11], 2
je 0x4f2fda
mov ecx, edi
push eax
shr edi, 8
lea eax, [ebp - 0x10]
mov ebx, edi
push 2
mov byte [ebp - 0x10], cl
push eax
mov byte [ebp - 0xf], bl
push dword [esi + 0x18]
call fcn.004f1f62
add esp, 0x10
mov dword [esi + 0x18], eax
xor edi, edi
mov dword [esi], 2
mov dword [ebp - 0x58], 0
jmp case.0x4f2dea.2
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], 0x1f
jbe 0x4f2feb
mov eax, dword [esi + 0x20]
test eax, eax
je 0x4f301d
mov dword [eax + 4], edi
test byte [esi + 0x11], 2
je 0x4f3055
mov ebx, edi
shr edi, 8
mov byte [ebp - 0x10], bl
mov eax, edi
lea ebx, [ebp - 0x10]
shr edi, 8
mov byte [ebp - 0xf], al
mov edx, edi
shr edi, 8
mov byte [ebp - 0xe], dl
mov ecx, edi
push edi
mov byte [ebp - 0xd], cl
push 4
push ebx
push dword [esi + 0x18]
call fcn.004f1f62
add esp, 0x10
mov dword [esi + 0x18], eax
xor edi, edi
mov dword [esi], 3
mov dword [ebp - 0x58], 0
jmp case.0x4f2dea.3
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], 0xf
jbe 0x4f3066
mov edx, dword [esi + 0x20]
test edx, edx
je 0x4f30a7
mov eax, edi
and eax, 0xff
mov dword [edx + 8], eax
mov eax, edi
shr eax, 8
mov dword [edx + 0xc], eax
test byte [esi + 0x11], 2
je 0x4f30cf
mov ebx, edi
lea edx, [ebp - 0x10]
shr edi, 8
mov byte [ebp - 0x10], bl
mov eax, edi
push ebx
mov byte [ebp - 0xf], al
push 2
push edx
push dword [esi + 0x18]
call fcn.004f1f62
add esp, 0x10
mov dword [esi + 0x18], eax
mov dword [esi], 4
xor edi, edi
mov dword [ebp - 0x58], 0
test byte [esi + 0x11], 4
jne 0x4f3107
jmp 0x4f3158
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
cmp dword [ebp - 0x58], 0xf
jbe 0x4f30e6
mov eax, dword [esi + 0x20]
mov dword [esi + 0x40], edi
test eax, eax
je 0x4f311a
mov dword [eax + 0x14], edi
test byte [esi + 0x11], 2
jne 0x4f312b
xor edi, edi
mov dword [ebp - 0x58], 0
jmp 0x4f3166
mov ebx, edi
lea edx, [ebp - 0x10]
shr edi, 8
mov byte [ebp - 0x10], bl
mov eax, edi
push ecx
mov byte [ebp - 0xf], al
push 2
push edx
xor edi, edi
push dword [esi + 0x18]
call fcn.004f1f62
add esp, 0x10
mov dword [esi + 0x18], eax
mov dword [ebp - 0x58], 0
jmp 0x4f3166
mov eax, dword [esi + 0x20]
test eax, eax
je 0x4f3166
mov dword [eax + 0x10], 0
mov dword [esi], 5
test byte [esi + 0x11], 4
je 0x4f31eb
mov ecx, dword [esi + 0x40]
mov ebx, dword [ebp - 0x60]
cmp ebx, ecx
jbe 0x4f317e
mov ebx, ecx
test ebx, ebx
je 0x4f31e1
mov eax, dword [esi + 0x20]
test eax, eax
je 0x4f31bf
mov edx, dword [eax + 0x10]
mov dword [ebp - 0x7c], edx
test edx, edx
je 0x4f31bf
mov edx, dword [eax + 0x14]
mov dword [ebp - 0x3c], ebx
sub edx, ecx
mov ecx, dword [eax + 0x18]
lea eax, [ebx + edx]
cmp eax, ecx
jbe 0x4f31aa
sub ecx, edx
mov dword [ebp - 0x3c], ecx
mov eax, dword [ebp - 0x7c]
add eax, edx
push edx
push dword [ebp - 0x3c]
push dword [ebp - 0x68]
push eax
call sub.msvcrt.dll_memcpy
add esp, 0x10
test byte [esi + 0x11], 2
je 0x4f31d8
push eax
push ebx
push dword [ebp - 0x68]
push dword [esi + 0x18]
call fcn.004f1f62
add esp, 0x10
mov dword [esi + 0x18], eax
sub dword [ebp - 0x60], ebx
add dword [ebp - 0x68], ebx
sub dword [esi + 0x40], ebx
cmp dword [esi + 0x40], 0
jne 0x4f3f9d
mov dword [esi + 0x40], 0
mov dword [esi], 6
test byte [esi + 0x11], 8
je 0x4f3269
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
xor ebx, ebx
mov ecx, dword [ebp - 0x68]
mov edx, dword [esi + 0x20]
mov cl, byte [ebx + ecx]
inc ebx
mov byte [ebp - 0x75], cl
test edx, edx
je 0x4f3234
mov ecx, dword [edx + 0x1c]
test ecx, ecx
je 0x4f3234
mov eax, dword [esi + 0x40]
cmp eax, dword [edx + 0x20]
jae 0x4f3234
mov dl, byte [ebp - 0x75]
mov byte [ecx + eax], dl
inc eax
mov dword [esi + 0x40], eax
cmp byte [ebp - 0x75], 0
je 0x4f323f
cmp ebx, dword [ebp - 0x60]
jb 0x4f320a
test byte [esi + 0x11], 2
je 0x4f3258
push ecx
push ebx
push dword [ebp - 0x68]
push dword [esi + 0x18]
call fcn.004f1f62
add esp, 0x10
mov dword [esi + 0x18], eax
sub dword [ebp - 0x60], ebx
add dword [ebp - 0x68], ebx
cmp byte [ebp - 0x75], 0
je 0x4f3277
jmp 0x4f3f9d
mov eax, dword [esi + 0x20]
test eax, eax
je 0x4f3277
mov dword [eax + 0x1c], 0
mov dword [esi + 0x40], 0
mov dword [esi], 7
test byte [esi + 0x11], 0x10
je 0x4f32f5
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
xor ebx, ebx
mov ecx, dword [ebp - 0x68]
mov edx, dword [esi + 0x20]
mov cl, byte [ebx + ecx]
inc ebx
mov byte [ebp - 0x25], cl
test edx, edx
je 0x4f32c0
mov ecx, dword [edx + 0x24]
test ecx, ecx
je 0x4f32c0
mov eax, dword [esi + 0x40]
cmp eax, dword [edx + 0x28]
jae 0x4f32c0
mov dl, byte [ebp - 0x25]
mov byte [ecx + eax], dl
inc eax
mov dword [esi + 0x40], eax
cmp byte [ebp - 0x25], 0
je 0x4f32cb
cmp ebx, dword [ebp - 0x60]
jb 0x4f3296
test byte [esi + 0x11], 2
je 0x4f32e4
push edx
push ebx
push dword [ebp - 0x68]
push dword [esi + 0x18]
call fcn.004f1f62
add esp, 0x10
mov dword [esi + 0x18], eax
sub dword [ebp - 0x60], ebx
add dword [ebp - 0x68], ebx
cmp byte [ebp - 0x25], 0
je 0x4f3303
jmp 0x4f3f9d
mov eax, dword [esi + 0x20]
test eax, eax
je 0x4f3303
mov dword [eax + 0x24], 0
mov dword [esi], 8
mov edx, dword [esi + 0x10]
test dh, 2
jne 0x4f3334
jmp 0x4f335a
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
cmp dword [ebp - 0x58], 0xf
jbe 0x4f3313
movzx eax, word [esi + 0x18]
cmp edi, eax
je 0x4f3351
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.header_crc_mismatch
jmp 0x4f3f7c
xor edi, edi
mov dword [ebp - 0x58], 0
mov eax, dword [esi + 0x20]
test eax, eax
je 0x4f3371
sar edx, 9
mov dword [eax + 0x30], 1
and edx, 1
mov dword [eax + 0x2c], edx
push eax
push 0
push 0
push 0
call fcn.004f1f62
mov edx, dword [ebp + 8]
mov dword [esi + 0x18], eax
mov dword [esi], 0xb
mov dword [edx + 0x30], eax
add esp, 0x10
jmp 0x4f2ddf
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
cmp dword [ebp - 0x58], 0x1f
jbe 0x4f3394
mov eax, edi
mov edx, edi
shr eax, 8
mov ebx, dword [ebp + 8]
shr edx, 0x18
and eax, 0xff00
add eax, edx
mov edx, edi
and edx, 0xff00
mov dword [esi], 0xa
shl edx, 8
mov dword [ebp - 0x58], 0
shl edi, 0x18
add eax, edx
add eax, edi
xor edi, edi
mov dword [esi + 0x18], eax
mov dword [ebx + 0x30], eax
cmp dword [esi + 0xc], 0
jne 0x4f342b
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 0x64]
mov ecx, dword [ebp - 0x5c]
mov ebx, dword [ebp - 0x68]
mov dword [eax + 0x10], ecx
mov dword [eax + 0xc], edx
mov ecx, dword [ebp - 0x58]
mov edx, dword [ebp - 0x60]
mov dword [eax + 4], edx
mov dword [eax], ebx
mov dword [esi + 0x38], edi
mov dword [esi + 0x3c], ecx
mov dword [ebp - 0x4c], 2
jmp 0x4f40ba
push eax
push 0
push 0
push 0
call fcn.004f590c
mov ebx, dword [ebp + 8]
mov dword [esi + 0x18], eax
mov dword [esi], 0xb
mov dword [ebx + 0x30], eax
add esp, 0x10
mov eax, dword [ebp + 0xc]
sub eax, 5
cmp eax, 1
jbe 0x4f3f9d
cmp dword [esi + 4], 0
je 0x4f3497
mov ecx, dword [ebp - 0x58]
mov dword [esi], 0x1a
and dword [ebp - 0x58], 0xfffffff8
and ecx, 7
shr edi, cl
jmp 0x4f2ddf
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], 2
jbe 0x4f3475
mov eax, edi
mov edx, edi
and eax, 1
mov ecx, dword [ebp - 0x58]
shr edx, 1
mov dword [esi + 4], eax
mov eax, edx
dec ecx
and eax, 3
cmp eax, 1
je 0x4f34cd
jb 0x4f34c5
cmp eax, 2
je 0x4f3501
cmp eax, 3
jne 0x4f3519
jmp 0x4f3509
mov dword [esi], 0xd
jmp 0x4f3519
mov dword [esi + 0x4c], 0x54bba0
mov dword [esi + 0x54], 9
mov dword [esi + 0x50], 0x54bb20
mov dword [esi + 0x58], 5
mov dword [esi], 0x13
cmp dword [ebp + 0xc], 6
jne 0x4f3519
sub dword [ebp - 0x58], 3
shr edi, 3
jmp 0x4f3f9d
mov dword [esi], 0x10
jmp 0x4f3519
mov ebx, dword [ebp + 8]
mov dword [esi], 0x1d
mov dword [ebx + 0x18], str.invalid_block_type
mov edi, edx
sub ecx, 2
shr edi, 2
mov dword [ebp - 0x58], ecx
jmp 0x4f2ddf
mov ecx, dword [ebp - 0x58]
and dword [ebp - 0x58], 0xfffffff8
and ecx, 7
shr edi, cl
jmp 0x4f3559
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], 0x1f
jbe 0x4f3537
mov eax, edi
mov edx, edi
shr eax, 0x10
and edx, 0xffff
xor eax, 0xffff
cmp edx, eax
je 0x4f3584
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.invalid_stored_block_lengths
jmp 0x4f3f7c
mov dword [esi + 0x40], edx
mov dword [esi], 0xe
cmp dword [ebp + 0xc], 6
jne 0x4f35a1
xor edi, edi
mov dword [ebp - 0x58], 0
jmp 0x4f3f9d
xor edi, edi
mov dword [ebp - 0x58], 0
mov dword [esi], 0xf
mov eax, dword [esi + 0x40]
test eax, eax
je 0x4f3bb3
mov edx, dword [ebp - 0x5c]
cmp edx, eax
jbe 0x4f35c4
mov edx, eax
mov ebx, edx
cmp edx, dword [ebp - 0x60]
jbe 0x4f35ce
mov ebx, dword [ebp - 0x60]
test ebx, ebx
je 0x4f3f9d
push eax
push ebx
push dword [ebp - 0x68]
push dword [ebp - 0x64]
call sub.msvcrt.dll_memcpy
sub dword [ebp - 0x60], ebx
add dword [ebp - 0x68], ebx
sub dword [ebp - 0x5c], ebx
add dword [ebp - 0x64], ebx
sub dword [esi + 0x40], ebx
jmp 0x4f338c
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], 0xd
jbe 0x4f35f7
mov eax, edi
and eax, 0x1f
add eax, 0x101
mov dword [esi + 0x60], eax
mov eax, edi
shr eax, 5
shr edi, 0xa
and eax, 0x1f
inc eax
mov dword [esi + 0x64], eax
mov eax, edi
and eax, 0xf
shr edi, 4
add eax, 4
sub dword [ebp - 0x58], 0xe
mov dword [esi + 0x5c], eax
cmp dword [esi + 0x60], 0x11e
ja 0x4f365c
cmp dword [esi + 0x64], 0x1e
jbe 0x4f366b
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.too_many_length_or_distance_symbols
jmp 0x4f3f7c
mov dword [esi + 0x68], 0
mov dword [esi], 0x11
jmp case.0x4f2dea.17
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], 2
jbe 0x4f367a
movzx eax, word [ebx + ebx + 0x54baf8]
mov edx, edi
and edx, 7
sub dword [ebp - 0x58], 3
shr edi, 3
mov word [esi + eax*2 + 0x70], dx
lea eax, [ebx + 1]
mov dword [esi + 0x68], eax
mov ebx, dword [esi + 0x68]
cmp ebx, dword [esi + 0x5c]
jb 0x4f369c
jmp 0x4f36e0
movzx eax, word [edx + edx + 0x54baf8]
mov word [esi + eax*2 + 0x70], 0
lea eax, [edx + 1]
mov dword [esi + 0x68], eax
mov edx, dword [esi + 0x68]
cmp edx, 0x12
jbe 0x4f36cb
mov ebx, dword [ebp - 0x8c]
mov dword [esi + 0x54], 7
mov dword [esi + 0x6c], ebx
mov dword [esi + 0x4c], ebx
push eax
push eax
lea eax, [esi + 0x2f0]
push eax
lea eax, [esi + 0x54]
push eax
lea eax, [esi + 0x6c]
push eax
lea eax, [esi + 0x70]
push 0x13
push eax
push 0
call fcn.004f5ca8
add esp, 0x20
mov dword [ebp - 0x4c], eax
test eax, eax
je 0x4f3732
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_code_lengths_set
jmp 0x4f3f7c
mov dword [esi + 0x68], 0
mov dword [esi], 0x12
jmp case.0x4f2dea.18
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
mov edx, dword [esi + 0x4c]
mov dword [ebp - 0x74], edx
lea ebx, [eax - 1]
mov eax, edi
mov ecx, dword [ebp - 0x74]
and eax, ebx
lea eax, [ecx + eax*4]
mov dx, word [eax + 2]
mov al, byte [eax + 1]
movzx ecx, al
mov dword [ebp - 0x90], ecx
mov ecx, dword [ebp - 0x58]
cmp dword [ebp - 0x90], ecx
jbe 0x4f379d
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
add dword [ebp - 0x58], 8
shl eax, cl
inc edx
add edi, eax
mov dword [ebp - 0x68], edx
jmp 0x4f3757
cmp dx, 0xf
ja 0x4f37c5
mov ebx, dword [ebp - 0x90]
mov eax, dword [ebp - 0x2c]
sub dword [ebp - 0x58], ebx
mov cl, byte [ebp - 0x90]
mov word [esi + eax*2 + 0x70], dx
inc eax
shr edi, cl
mov dword [esi + 0x68], eax
jmp case.0x4f2dea.18
cmp dx, 0x10
jne 0x4f383a
jmp 0x4f37f0
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
jmp 0x4f37fc
movzx edx, al
lea ebx, [edx + 2]
mov dword [ebp - 0x94], ebx
mov eax, dword [ebp - 0x94]
cmp dword [ebp - 0x58], eax
jb 0x4f37cd
mov cl, dl
mov ebx, dword [ebp - 0x90]
shr edi, cl
sub dword [ebp - 0x58], ebx
cmp dword [ebp - 0x2c], 0
je 0x4f38f3
mov edx, dword [ebp - 0x2c]
mov eax, edi
and eax, 3
sub dword [ebp - 0x58], 2
movzx ecx, word [esi + edx*2 + 0x6e]
shr edi, 2
lea edx, [eax + 3]
jmp 0x4f38e8
cmp dx, 0x11
jne 0x4f38b4
jmp 0x4f3865
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
jmp 0x4f386b
movzx edx, al
lea ebx, [edx + 3]
cmp dword [ebp - 0x58], ebx
jb 0x4f3842
mov cl, dl
mov eax, edi
shr eax, cl
mov ecx, dword [ebp - 0x58]
mov edx, eax
sub ecx, dword [ebp - 0x90]
and edx, 7
mov edi, eax
add edx, 3
shr edi, 3
sub ecx, 3
jmp 0x4f38e3
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
jmp 0x4f38bf
mov ebx, dword [ebp - 0x90]
mov edx, ebx
add edx, 7
cmp dword [ebp - 0x58], edx
jb 0x4f3891
mov eax, edi
mov cl, bl
shr eax, cl
mov ecx, dword [ebp - 0x58]
mov edx, eax
sub ecx, dword [ebp - 0x90]
and edx, 0x7f
mov edi, eax
add edx, 0xb
shr edi, 7
sub ecx, 7
mov dword [ebp - 0x58], ecx
xor ecx, ecx
mov ebx, dword [ebp - 0x2c]
lea eax, [edx + ebx]
cmp eax, dword [ebp - 0x70]
jbe 0x4f3911
mov eax, dword [ebp + 8]
mov dword [esi], 0x1d
mov dword [eax + 0x18], str.invalid_bit_length_repeat
jmp 0x4f3930
mov eax, dword [esi + 0x68]
mov word [esi + eax*2 + 0x70], cx
inc eax
mov dword [esi + 0x68], eax
dec edx
cmp edx, 0xffffffff
jne 0x4f3905
mov ecx, dword [esi + 0x60]
mov ebx, dword [esi + 0x64]
mov edx, dword [esi + 0x68]
add ecx, ebx
mov dword [ebp - 0x2c], edx
mov dword [ebp - 0x70], ecx
cmp edx, ecx
jb 0x4f3744
cmp dword [esi], 0x1d
je 0x4f2ddf
cmp word [esi + 0x270], 0
jne 0x4f3952
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_code____missing_end_of_block
jmp 0x4f3f7c
mov edx, dword [ebp - 0x8c]
mov dword [esi + 0x54], 9
mov dword [esi + 0x6c], edx
mov dword [esi + 0x4c], edx
lea ecx, [esi + 0x6c]
lea ebx, [esi + 0x2f0]
push eax
push eax
lea eax, [esi + 0x54]
push ebx
push eax
push ecx
push dword [esi + 0x60]
lea eax, [esi + 0x70]
mov dword [ebp - 0x30], ecx
push eax
push 1
call fcn.004f5ca8
add esp, 0x20
mov dword [ebp - 0x4c], eax
test eax, eax
je 0x4f39a0
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.invalid_literal_lengths_set
jmp 0x4f3f7c
mov eax, dword [esi + 0x6c]
mov dword [esi + 0x58], 6
mov dword [esi + 0x50], eax
push eax
push eax
lea eax, [esi + 0x58]
push ebx
push eax
push dword [ebp - 0x30]
push dword [esi + 0x64]
mov eax, dword [esi + 0x60]
lea eax, [esi + eax*2 + 0x70]
push eax
push 2
call fcn.004f5ca8
add esp, 0x20
mov dword [ebp - 0x4c], eax
test eax, eax
je 0x4f39e2
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_distances_set
jmp 0x4f3f7c
mov dword [esi], 0x13
cmp dword [ebp + 0xc], 6
je 0x4f3f9d
mov dword [esi], 0x14
cmp dword [ebp - 0x60], 5
jbe 0x4f3a7c
cmp dword [ebp - 0x5c], 0x101
jbe 0x4f3a7c
mov edx, dword [ebp + 8]
mov ecx, dword [ebp - 0x64]
mov ebx, dword [ebp - 0x5c]
mov eax, dword [ebp - 0x68]
mov dword [edx + 0x10], ebx
mov dword [edx + 0xc], ecx
mov ebx, dword [ebp - 0x58]
mov ecx, dword [ebp - 0x60]
mov dword [edx + 4], ecx
mov dword [edx], eax
mov dword [esi + 0x38], edi
mov dword [esi + 0x3c], ebx
push edi
push edi
push dword [ebp - 0x50]
push edx
call fcn.004f612c
mov eax, dword [ebp + 8]
mov edx, dword [ebp + 8]
mov ecx, dword [ebp + 8]
mov ebx, dword [ebp + 8]
mov eax, dword [eax + 0xc]
mov edx, dword [edx + 0x10]
mov dword [ebp - 0x64], eax
mov ecx, dword [ecx]
mov ebx, dword [ebx + 4]
mov eax, dword [esi + 0x3c]
add esp, 0x10
mov dword [ebp - 0x5c], edx
mov dword [ebp - 0x68], ecx
mov dword [ebp - 0x60], ebx
mov edi, dword [esi + 0x38]
mov dword [ebp - 0x58], eax
cmp dword [esi], 0xb
jne 0x4f2ddf
mov dword [esi + 0x1bc4], 0xffffffff
jmp 0x4f2ddf
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
mov edx, dword [esi + 0x4c]
dec eax
mov dword [esi + 0x1bc4], 0
mov dword [ebp - 0x34], edx
mov dword [ebp - 0x38], eax
mov eax, dword [ebp - 0x38]
mov ecx, dword [ebp - 0x34]
and eax, edi
lea eax, [ecx + eax*4]
mov bx, word [eax + 2]
mov word [ebp - 0x42], bx
mov dl, byte [eax + 1]
mov bl, byte [eax]
movzx ecx, dl
cmp ecx, dword [ebp - 0x58]
jbe 0x4f3ade
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
jmp 0x4f3a9a
mov ax, word [ebp - 0x42]
test bl, bl
mov word [ebp - 0x40], ax
je 0x4f3b7e
movzx eax, bl
test al, 0xf0
jne 0x4f3b7e
mov dword [ebp - 0x84], ecx
lea ecx, [eax + ecx]
mov eax, 1
shl eax, cl
dec eax
mov dword [ebp - 0x88], eax
mov eax, dword [ebp - 0x88]
mov ecx, dword [ebp - 0x84]
and eax, edi
movzx edx, word [ebp - 0x40]
shr eax, cl
add eax, edx
mov edx, dword [ebp - 0x34]
lea eax, [edx + eax*4]
mov bx, word [eax + 2]
mov word [ebp - 0x42], bx
mov dl, byte [eax + 1]
mov bl, byte [eax]
movzx eax, dl
add ecx, eax
cmp ecx, dword [ebp - 0x58]
jbe 0x4f3b67
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
jmp 0x4f3b10
mov eax, dword [ebp - 0x84]
mov cl, byte [ebp - 0x84]
sub dword [ebp - 0x58], eax
mov dword [esi + 0x1bc4], eax
shr edi, cl
movzx eax, word [ebp - 0x42]
movzx ecx, dl
shr edi, cl
sub dword [ebp - 0x58], ecx
mov dword [esi + 0x40], eax
add dword [esi + 0x1bc4], ecx
test bl, bl
jne 0x4f3ba2
mov dword [esi], 0x19
jmp 0x4f2ddf
movzx eax, bl
test al, 0x20
je 0x4f3bbe
mov dword [esi + 0x1bc4], 0xffffffff
mov dword [esi], 0xb
jmp 0x4f2ddf
test al, 0x40
je 0x4f3bd1
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], 0x54b9fd
jmp 0x4f3f7c
and eax, 0xf
mov dword [esi], 0x15
mov dword [esi + 0x48], eax
mov ebx, dword [esi + 0x48]
test ebx, ebx
jne 0x4f3c07
jmp 0x4f3c29
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
cmp dword [ebp - 0x58], ebx
jb 0x4f3be6
mov cl, bl
mov eax, 1
shl eax, cl
dec eax
mov ecx, dword [esi + 0x48]
and eax, edi
sub dword [ebp - 0x58], ecx
add dword [esi + 0x40], eax
add dword [esi + 0x1bc4], ecx
shr edi, cl
mov eax, dword [esi + 0x40]
mov dword [esi], 0x16
mov dword [esi + 0x1bc8], eax
mov ecx, dword [esi + 0x58]
mov eax, 1
shl eax, cl
mov ebx, dword [esi + 0x50]
mov dword [ebp - 0x6c], ebx
lea ebx, [eax - 1]
mov eax, edi
mov edx, dword [ebp - 0x6c]
and eax, ebx
lea eax, [edx + eax*4]
mov cx, word [eax + 2]
mov word [ebp - 0x44], cx
mov dl, byte [eax + 1]
mov al, byte [eax]
movzx ecx, dl
mov byte [ebp - 0x45], al
cmp ecx, dword [ebp - 0x58]
jbe 0x4f3c91
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
jmp 0x4f3c4b
movzx eax, byte [ebp - 0x45]
mov ebx, dword [ebp - 0x44]
test al, 0xf0
mov word [ebp - 0x3e], bx
jne 0x4f3d0f
mov ebx, ecx
lea ecx, [eax + ecx]
mov eax, 1
shl eax, cl
dec eax
mov dword [ebp - 0x80], eax
mov eax, dword [ebp - 0x80]
mov ecx, ebx
and eax, edi
movzx edx, word [ebp - 0x3e]
shr eax, cl
add eax, edx
mov edx, dword [ebp - 0x6c]
lea eax, [edx + eax*4]
mov dx, word [eax + 2]
mov word [ebp - 0x44], dx
mov dl, byte [eax + 1]
mov al, byte [eax]
mov byte [ebp - 0x45], al
movzx eax, dl
add ecx, eax
cmp ecx, dword [ebp - 0x58]
jbe 0x4f3d02
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ecx, dword [ebp - 0x68]
movzx eax, byte [ecx]
mov cl, byte [ebp - 0x58]
inc dword [ebp - 0x68]
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
jmp 0x4f3cb0
sub dword [ebp - 0x58], ebx
mov cl, bl
add dword [esi + 0x1bc4], ebx
shr edi, cl
movzx ecx, dl
movzx edx, byte [ebp - 0x45]
shr edi, cl
sub dword [ebp - 0x58], ecx
add dword [esi + 0x1bc4], ecx
test dl, 0x40
je 0x4f3d35
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], 0x54ba19
jmp 0x4f3f7c
movzx eax, word [ebp - 0x44]
and edx, 0xf
mov dword [esi + 0x44], eax
mov dword [esi + 0x48], edx
mov dword [esi], 0x17
mov ebx, dword [esi + 0x48]
test ebx, ebx
jne 0x4f3d73
jmp 0x4f3d95
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], ebx
jb 0x4f3d51
mov cl, bl
mov eax, 1
shl eax, cl
dec eax
mov ecx, dword [esi + 0x48]
and eax, edi
sub dword [ebp - 0x58], ecx
add dword [esi + 0x44], eax
add dword [esi + 0x1bc4], ecx
shr edi, cl
mov dword [esi], 0x18
cmp dword [ebp - 0x5c], 0
je 0x4f3f9d
mov edx, dword [ebp - 0x50]
mov eax, dword [esi + 0x44]
sub edx, dword [ebp - 0x5c]
cmp eax, edx
jbe 0x4f3df1
sub eax, edx
mov edx, eax
cmp eax, dword [esi + 0x2c]
jbe 0x4f3dd3
cmp dword [esi + 0x1bc0], 0
je 0x4f3dd3
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], 0x54ba2f
jmp 0x4f3f7c
mov eax, dword [esi + 0x30]
mov ecx, eax
cmp edx, eax
jbe 0x4f3de1
sub edx, eax
mov ecx, dword [esi + 0x28]
sub ecx, edx
mov eax, dword [esi + 0x40]
add ecx, dword [esi + 0x34]
cmp edx, eax
jbe 0x4f3df9
mov edx, eax
jmp 0x4f3df9
mov ecx, dword [ebp - 0x64]
mov edx, dword [esi + 0x40]
sub ecx, eax
mov ebx, edx
cmp edx, dword [ebp - 0x5c]
jbe 0x4f3e03
mov ebx, dword [ebp - 0x5c]
sub dword [ebp - 0x5c], ebx
mov eax, dword [ebp - 0x64]
sub dword [esi + 0x40], ebx
mov dword [ebp - 0x20], eax
mov dword [ebp - 0x98], ebx
mov eax, dword [ebp - 0x20]
mov dl, byte [ecx]
inc ecx
mov byte [eax], dl
inc eax
dec dword [ebp - 0x98]
mov dword [ebp - 0x20], eax
jne 0x4f3e15
mov edx, dword [ebp - 0x64]
add ebx, edx
mov dword [ebp - 0x64], ebx
cmp dword [esi + 0x40], 0
jne 0x4f2ddf
jmp 0x4f3e56
cmp dword [ebp - 0x5c], 0
je 0x4f3f9d
mov ecx, dword [ebp - 0x64]
mov eax, dword [esi + 0x40]
mov byte [ecx], al
inc ecx
dec dword [ebp - 0x5c]
mov dword [ebp - 0x64], ecx
mov dword [esi], 0x14
jmp 0x4f2ddf
cmp dword [esi + 8], 0
jne 0x4f3e8e
jmp 0x4f3f35
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov ebx, dword [ebp - 0x68]
movzx eax, byte [ebx]
mov cl, byte [ebp - 0x58]
inc ebx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], ebx
cmp dword [ebp - 0x58], 0x1f
jbe 0x4f3e6c
mov eax, dword [ebp - 0x50]
mov ebx, dword [ebp + 8]
sub eax, dword [ebp - 0x5c]
add dword [ebx + 0x14], eax
add dword [esi + 0x1c], eax
test eax, eax
je 0x4f3eda
cmp dword [esi + 0x10], 0
mov edx, dword [esi + 0x18]
je 0x4f3ec0
mov ecx, dword [ebp - 0x64]
push ebx
sub ecx, eax
push eax
push ecx
push edx
call fcn.004f1f62
jmp 0x4f3ece
mov ebx, dword [ebp - 0x64]
push ecx
sub ebx, eax
push eax
push ebx
push edx
call fcn.004f590c
mov edx, dword [ebp + 8]
mov dword [esi + 0x18], eax
add esp, 0x10
mov dword [edx + 0x30], eax
mov eax, edi
cmp dword [esi + 0x10], 0
jne 0x4f3f06
shr eax, 0x18
mov edx, edi
shr edx, 8
and edx, 0xff00
add edx, eax
mov eax, edi
and eax, 0xff00
shl eax, 8
add edx, eax
mov eax, edi
shl eax, 0x18
lea eax, [edx + eax]
cmp eax, dword [esi + 0x18]
je 0x4f3f26
mov ecx, dword [ebp + 8]
mov ebx, dword [ebp - 0x5c]
mov dword [esi], 0x1d
mov dword [ebp - 0x50], ebx
mov dword [ecx + 0x18], str.incorrect_data_check
jmp 0x4f2ddf
mov eax, dword [ebp - 0x5c]
xor edi, edi
mov dword [ebp - 0x50], eax
mov dword [ebp - 0x58], 0
mov dword [esi], 0x1b
cmp dword [esi + 8], 0
je 0x4f3f90
cmp dword [esi + 0x10], 0
jne 0x4f3f67
jmp 0x4f3f90
cmp dword [ebp - 0x60], 0
je 0x4f3f9d
dec dword [ebp - 0x60]
mov edx, dword [ebp - 0x68]
movzx eax, byte [edx]
mov cl, byte [ebp - 0x58]
inc edx
add dword [ebp - 0x58], 8
shl eax, cl
add edi, eax
mov dword [ebp - 0x68], edx
cmp dword [ebp - 0x58], 0x1f
jbe 0x4f3f49
cmp edi, dword [esi + 0x1c]
je 0x4f3f87
mov ebx, dword [ebp + 8]
mov dword [ebx + 0x18], str.incorrect_length_check
mov dword [esi], 0x1d
jmp 0x4f2ddf
xor edi, edi
mov dword [ebp - 0x58], 0
mov dword [esi], 0x1c
mov dword [ebp - 0x4c], 1
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 0x64]
mov ecx, dword [ebp - 0x5c]
mov ebx, dword [ebp - 0x68]
mov dword [eax + 0xc], edx
mov edx, dword [ebp - 0x60]
mov dword [eax + 0x10], ecx
mov dword [eax + 4], edx
mov ecx, dword [ebp - 0x58]
mov dword [eax], ebx
mov dword [esi + 0x38], edi
mov dword [esi + 0x3c], ecx
cmp dword [esi + 0x28], 0
jne 0x4f3fe0
mov ebx, dword [ebp - 0x50]
cmp ebx, dword [eax + 0x10]
je 0x4f4007
mov eax, dword [esi]
cmp eax, 0x1c
ja 0x4f4007
cmp eax, 0x19
jbe 0x4f3fe0
cmp dword [ebp + 0xc], 4
je 0x4f4007
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x50]
sub ecx, dword [eax + 0x10]
mov edx, dword [eax + 0xc]
call fcn.004f2bd5
test eax, eax
je 0x4f4007
mov dword [esi], 0x1e
mov dword [ebp - 0x4c], 0xfffffffc
jmp 0x4f40ba
mov edx, dword [ebp + 8]
mov ecx, dword [ebp - 0x24]
mov ebx, dword [ebp - 0x50]
sub ecx, dword [edx + 4]
sub ebx, dword [edx + 0x10]
add dword [edx + 8], ecx
mov dword [ebp - 0x54], ecx
add dword [edx + 0x14], ebx
add dword [esi + 0x1c], ebx
cmp dword [esi + 8], 0
je 0x4f405c
test ebx, ebx
je 0x4f405c
mov eax, dword [edx + 0xc]
mov edx, dword [esi + 0x18]
cmp dword [esi + 0x10], 0
je 0x4f4045
sub eax, ebx
push edi
push ebx
push eax
push edx
call fcn.004f1f62
jmp 0x4f4050
sub eax, ebx
push ecx
push ebx
push eax
push edx
call fcn.004f590c
mov edx, dword [ebp + 8]
mov dword [esi + 0x18], eax
add esp, 0x10
mov dword [edx + 0x30], eax
cmp dword [esi + 4], 1
sbb edx, edx
mov eax, dword [esi]
not edx
mov edi, dword [esi + 0x3c]
and edx, 0x40
mov esi, pe_nt_image_headers32
cmp eax, 0xb
je 0x4f408a
xor si, si
cmp eax, 0x13
je 0x4f4083
cmp eax, 0xe
jne 0x4f408a
mov ecx, 0x100
jmp 0x4f408c
xor ecx, ecx
lea eax, [edx + edi]
add eax, esi
add eax, ecx
mov ecx, dword [ebp + 8]
or ebx, dword [ebp - 0x54]
mov dword [ecx + 0x2c], eax
je 0x4f40a4
cmp dword [ebp + 0xc], 4
jne 0x4f40ba
cmp dword [ebp - 0x4c], 0
jne 0x4f40ba
mov dword [ebp - 0x4c], 0xfffffffb
jmp 0x4f40ba
mov dword [ebp - 0x4c], 0xfffffffe
mov eax, dword [ebp - 0x4c]
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret