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

Disassembly:
sub esp, 0x44
push ebx
push ebp
push esi
mov esi, ecx
push edi
mov dword [esp + 0x30], esi
call fcn.00435fc3
test eax, eax
jne case.default.0x4362cb
mov eax, dword [esi + 0xc]
mov dword [esp + 0x2c], eax
test eax, eax
je case.default.0x4362cb
mov eax, dword [esi]
mov dword [esp + 0x14], eax
test eax, eax
jne 0x43624d
cmp dword [esi + 4], eax
jne case.default.0x4362cb
mov ebp, dword [esi + 0x1c]
mov edx, 0x3f40
mov ecx, dword [ebp + 4]
cmp ecx, 0x3f3f
jne 0x436272
mov dword [ebp + 4], edx
mov ecx, edx
mov eax, dword [esi + 0xc]
mov dword [esp + 0x2c], eax
mov eax, dword [esi]
mov dword [esp + 0x14], eax
mov eax, dword [esi + 0x10]
mov edi, dword [esi + 4]
mov edx, dword [ebp + 0x3c]
mov ebx, dword [ebp + 0x40]
mov dword [esp + 0x28], eax
mov dword [esp + 0x34], eax
xor eax, eax
mov dword [esp + 0x38], eax
lea eax, [ecx - 0x3f34]
mov dword [esp + 0x1c], edi
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [esp + 0x44], edi
cmp eax, 0x1e
ja case.default.0x4362cb
mov dword [esp + 0x3c], 0x1f
mov dword [esp + 0x48], 0x3f51
mov dword [esp + 0x4c], 1
mov dword [esp + 0x50], 0x3f46
jmp dword [eax*4 + 0x437761]
mov eax, dword [ebp + 0xc]
test eax, eax
jne 0x4362e5
mov dword [ebp + 4], 0x3f40
jmp 0x4368f8
push 0x10
pop ecx
cmp ebx, ecx
jae 0x436322
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
inc eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], ebx
cmp ebx, 0x10
jb 0x4362f0
mov eax, dword [ebp + 0xc]
test al, 2
je 0x43637f
cmp edx, 0x8b1f
jne 0x43637f
xor ebx, ebx
cmp dword [ebp + 0x28], ebx
jne 0x43633c
mov dword [ebp + 0x28], 0xf
push ebx
xor edx, edx
xor ecx, ecx
call fcn.00438291
mov dword [ebp + 0x1c], eax
lea edx, [esp + 0x28]
mov eax, dword [esp + 0x40]
mov byte [esp + 0x28], al
mov byte [esp + 0x29], 0x8b
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438291
pop ecx
mov edx, ebx
mov dword [ebp + 0x1c], eax
pop ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 4], 0x3f35
jmp 0x4368f8
and dword [ebp + 0x14], 0
mov ecx, dword [ebp + 0x24]
test ecx, ecx
je 0x436391
or dword [ecx + 0x30], 0xffffffff
mov eax, dword [ebp + 0xc]
test al, 1
je 0x43643c
movzx ecx, dl
mov eax, edx
shr eax, 8
xor edx, edx
shl ecx, 8
add eax, ecx
div dword [esp + 0x3c]
test edx, edx
mov edx, dword [esp + 0x18]
jne 0x43643c
mov eax, edx
and al, 0xf
cmp al, 8
je 0x4363c9
mov dword [esi + 0x18], str.unknown_compression_method
jmp 0x436443
mov eax, dword [ebp + 0x28]
sub ebx, 4
shr edx, 4
mov ecx, edx
mov dword [esp + 0x18], edx
and ecx, 0xf
mov dword [esp + 0x20], ebx
add ecx, 8
test eax, eax
jne 0x4363eb
mov dword [ebp + 0x28], ecx
mov eax, ecx
cmp ecx, 0xf
ja 0x436433
cmp ecx, eax
ja 0x436433
xor eax, eax
xor ebx, ebx
inc eax
xor edx, edx
shl eax, cl
xor ecx, ecx
push ebx
mov dword [ebp + 0x18], eax
call fcn.00437831
mov edx, dword [esp + 0x1c]
shr edx, 8
not edx
mov dword [ebp + 0x1c], eax
and edx, 2
mov dword [esi + 0x30], eax
or edx, 0x3f3d
mov dword [ebp + 4], edx
mov edx, ebx
pop ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jmp 0x4368f8
mov dword [esi + 0x18], str.invalid_window_size
jmp 0x436443
mov dword [esi + 0x18], str.incorrect_header_check
mov dword [ebp + 4], 0x3f51
jmp 0x4368f8
push 0x10
pop eax
cmp ebx, eax
jae 0x43648b
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
push 0x10
inc eax
mov dword [esp + 0x1c], edx
pop ecx
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], ebx
cmp ebx, ecx
jb 0x43645a
mov dword [ebp + 0x14], edx
cmp dl, 8
jne 0x4363c0
test edx, 0xe000
je 0x4364a8
mov dword [esi + 0x18], str.unknown_header_flags_set
jmp 0x436443
mov edi, dword [ebp + 0x24]
mov ecx, edx
shr ecx, 8
mov eax, edx
test edi, edi
je 0x4364c0
mov eax, ecx
and eax, 1
mov dword [edi], eax
mov eax, dword [ebp + 0x14]
test eax, 0x200
je 0x4364e7
test byte [ebp + 0xc], 4
je 0x4364e7
mov byte [esp + 0x24], dl
lea edx, [esp + 0x24]
mov byte [esp + 0x25], cl
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438291
pop ecx
mov dword [ebp + 0x1c], eax
mov edi, dword [esp + 0x1c]
xor eax, eax
mov edx, eax
mov dword [ebp + 4], 0x3f36
mov dword [esp + 0x18], edx
mov ebx, eax
cmp ebx, 0x20
jae 0x436530
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
inc eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], eax
cmp ebx, 0x20
jb 0x436505
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x43653a
mov dword [eax + 4], edx
test dword [ebp + 0x14], 0x200
je 0x436578
test byte [ebp + 0xc], 4
je 0x436578
mov eax, edx
mov byte [esp + 0x24], dl
shr eax, 8
mov byte [esp + 0x25], al
mov eax, edx
shr edx, 0x18
shr eax, 0x10
mov byte [esp + 0x27], dl
lea edx, [esp + 0x24]
mov byte [esp + 0x26], al
mov ecx, dword [ebp + 0x1c]
push 4
call fcn.00438291
pop ecx
mov dword [ebp + 0x1c], eax
xor eax, eax
mov dword [ebp + 4], 0x3f37
mov edx, eax
mov ebx, eax
mov dword [esp + 0x18], edx
push 0x10
pop eax
cmp ebx, eax
jae 0x4365c1
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
push 0x10
inc eax
mov dword [esp + 0x1c], edx
pop ecx
mov dword [esp + 0x14], eax
cmp ebx, ecx
jb 0x436594
mov edi, dword [ebp + 0x24]
mov ecx, edx
shr ecx, 8
test edi, edi
je 0x4365d9
movzx eax, dl
mov dword [edi + 8], eax
mov eax, dword [ebp + 0x24]
mov dword [eax + 0xc], ecx
test dword [ebp + 0x14], 0x200
je 0x436602
test byte [ebp + 0xc], 4
je 0x436602
mov byte [esp + 0x24], dl
lea edx, [esp + 0x24]
mov byte [esp + 0x25], cl
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438291
pop ecx
mov dword [ebp + 0x1c], eax
mov edi, dword [esp + 0x1c]
xor ecx, ecx
mov edx, ecx
mov dword [ebp + 4], 0x3f38
mov ebx, ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jmp 0x43661f
xor ecx, ecx
test dword [ebp + 0x14], 0x400
je 0x4366a7
push 0x10
pop eax
cmp ebx, eax
jae 0x436660
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
push 0x10
inc eax
mov dword [esp + 0x1c], edx
pop ecx
mov dword [esp + 0x14], eax
cmp ebx, ecx
jb 0x436633
mov eax, dword [ebp + 0x24]
mov dword [ebp + 0x44], edx
test eax, eax
je 0x43666d
mov dword [eax + 0x14], edx
test dword [ebp + 0x14], 0x200
je 0x436699
test byte [ebp + 0xc], 4
je 0x436699
mov byte [esp + 0x24], dl
shr edx, 8
mov byte [esp + 0x25], dl
lea edx, [esp + 0x24]
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438291
pop ecx
mov dword [ebp + 0x1c], eax
xor eax, eax
mov ebx, eax
mov dword [esp + 0x18], eax
mov dword [esp + 0x20], ebx
jmp 0x4366b1
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x4366b1
mov dword [eax + 0x10], ecx
mov dword [ebp + 4], 0x3f39
mov eax, dword [ebp + 0x14]
test eax, 0x400
je 0x43674d
mov ecx, dword [ebp + 0x44]
cmp ecx, dword [esp + 0x1c]
cmovbe edi, ecx
test edi, edi
je 0x436745
mov edx, dword [ebp + 0x24]
test edx, edx
je 0x436719
mov esi, dword [edx + 0x10]
test esi, esi
mov dword [esp + 0x40], esi
mov esi, dword [esp + 0x30]
je 0x436719
mov edx, dword [edx + 0x14]
sub edx, ecx
mov ecx, dword [ebp + 0x24]
mov ecx, dword [ecx + 0x18]
lea eax, [edi + edx]
cmp eax, ecx
jbe 0x436700
sub ecx, edx
jmp 0x436702
mov ecx, edi
mov eax, dword [esp + 0x40]
push ecx
push dword [esp + 0x18]
add eax, edx
push eax
call fcn.0043bdd0
mov eax, dword [ebp + 0x14]
add esp, 0xc
test eax, 0x200
je 0x436737
test byte [ebp + 0xc], 4
je 0x436737
mov edx, dword [esp + 0x14]
mov ecx, dword [ebp + 0x1c]
push edi
call fcn.00438291
pop ecx
mov dword [ebp + 0x1c], eax
sub dword [esp + 0x1c], edi
add dword [esp + 0x14], edi
sub dword [ebp + 0x44], edi
mov ecx, dword [ebp + 0x44]
test ecx, ecx
jne 0x437654
mov edi, dword [esp + 0x1c]
xor ecx, ecx
mov dword [ebp + 0x44], ecx
mov dword [ebp + 4], 0x3f3a
jmp 0x436761
xor ecx, ecx
test dword [ebp + 0x14], 0x800
je 0x4367ee
test edi, edi
je 0x437654
mov esi, dword [esp + 0x1c]
mov edi, ecx
mov edx, dword [esp + 0x14]
mov al, byte [edi + edx]
inc edi
mov byte [esp + 0x13], al
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x4367ac
mov edx, dword [eax + 0x1c]
test edx, edx
je 0x4367a8
mov ecx, dword [ebp + 0x44]
cmp ecx, dword [eax + 0x20]
jae 0x4367a8
mov al, byte [esp + 0x13]
mov byte [ecx + edx], al
inc dword [ebp + 0x44]
mov edx, dword [esp + 0x14]
mov cl, byte [esp + 0x13]
test cl, cl
je 0x4367b8
cmp edi, esi
jb 0x436780
test dword [ebp + 0x14], 0x200
mov esi, dword [esp + 0x30]
je 0x4367dc
test byte [ebp + 0xc], 4
je 0x4367dc
mov ecx, dword [ebp + 0x1c]
push edi
call fcn.00438291
pop ecx
mov cl, byte [esp + 0x13]
mov dword [ebp + 0x1c], eax
sub dword [esp + 0x1c], edi
add dword [esp + 0x14], edi
test cl, cl
jne 0x437654
jmp 0x4367f8
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x4367f8
mov dword [eax + 0x1c], ecx
mov edi, dword [esp + 0x1c]
xor ecx, ecx
mov dword [ebp + 0x44], ecx
mov dword [ebp + 4], 0x3f3b
jmp 0x43680c
xor ecx, ecx
test dword [ebp + 0x14], 0x1000
je 0x436899
test edi, edi
je 0x437654
mov esi, dword [esp + 0x1c]
mov edi, ecx
mov edx, dword [esp + 0x14]
mov al, byte [edi + edx]
inc edi
mov byte [esp + 0x13], al
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x436857
mov edx, dword [eax + 0x24]
test edx, edx
je 0x436853
mov ecx, dword [ebp + 0x44]
cmp ecx, dword [eax + 0x28]
jae 0x436853
mov al, byte [esp + 0x13]
mov byte [ecx + edx], al
inc dword [ebp + 0x44]
mov edx, dword [esp + 0x14]
mov cl, byte [esp + 0x13]
test cl, cl
je 0x436863
cmp edi, esi
jb 0x43682b
test dword [ebp + 0x14], 0x200
mov esi, dword [esp + 0x30]
je 0x436887
test byte [ebp + 0xc], 4
je 0x436887
mov ecx, dword [ebp + 0x1c]
push edi
call fcn.00438291
pop ecx
mov cl, byte [esp + 0x13]
mov dword [ebp + 0x1c], eax
sub dword [esp + 0x1c], edi
add dword [esp + 0x14], edi
test cl, cl
jne 0x437654
jmp 0x4368a3
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x4368a3
mov dword [eax + 0x24], ecx
mov edx, dword [esp + 0x18]
mov dword [ebp + 4], 0x3f3c
mov edi, dword [ebp + 0x14]
test edi, 0x200
jne 0x436942
xor ecx, ecx
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x4368d8
mov edx, dword [esp + 0x4c]
sar edi, 9
and edi, edx
mov dword [eax + 0x2c], edi
mov eax, dword [ebp + 0x24]
mov dword [eax + 0x30], edx
push ecx
xor edx, edx
xor ecx, ecx
call fcn.00438291
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
pop ecx
mov dword [ebp + 4], 0x3f3f
mov edx, dword [esp + 0x18]
mov edi, dword [esp + 0x1c]
mov ecx, dword [ebp + 4]
lea eax, [ecx - 0x3f34]
cmp eax, 0x1e
jbe switch.0x004362cb
push 0xfffffffffffffffe
pop eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x44
ret
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437654
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
add ebx, 8
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
push 0x10
pop eax
cmp ebx, eax
jb 0x436915
test byte [ebp + 0xc], 4
je 0x436967
movzx eax, word [ebp + 0x1c]
cmp edx, eax
je 0x436967
mov dword [esi + 0x18], str.header_crc_mismatch
mov dword [ebp + 4], 0x3f51
jmp 0x4368f4
xor ecx, ecx
mov ebx, ecx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x20], ebx
jmp 0x4368bf
cmp ebx, 0x20
jae 0x4369ac
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 0x20
jb 0x436981
mov ecx, edx
mov ebx, 0xff00
mov eax, edx
and ecx, ebx
shl eax, 0x10
add ecx, eax
mov eax, edx
shr eax, 8
and eax, ebx
shl ecx, 8
shr edx, 0x18
add eax, ecx
add eax, edx
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
xor eax, eax
mov edx, eax
mov dword [ebp + 4], 0x3f3e
mov dword [esp + 0x18], edx
mov ebx, eax
jmp 0x4369e8
xor eax, eax
cmp dword [ebp + 0x10], eax
je 0x437617
push eax
xor edx, edx
xor ecx, ecx
call fcn.00437831
mov edx, dword [esp + 0x1c]
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
pop ecx
mov dword [ebp + 4], 0x3f3f
cmp dword [ebp + 8], 0
je 0x436a30
mov ecx, ebx
mov dword [ebp + 4], 0x3f4e
and ecx, 7
shr edx, cl
sub ebx, ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jmp 0x4368f8
cmp ebx, 3
jae 0x436a64
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 3
jb 0x436a39
mov eax, edx
shr edx, 1
and eax, 1
mov dword [ebp + 8], eax
mov eax, edx
and eax, 3
sub eax, 0
je 0x436ac5
sub eax, 1
je 0x436aa0
sub eax, 1
je 0x436a97
sub eax, 1
jne 0x436acc
mov dword [esi + 0x18], str.invalid_block_type
mov dword [ebp + 4], 0x3f51
jmp 0x436acc
mov dword [ebp + 4], 0x3f44
jmp 0x436acc
mov dword [ebp + 0x50], 0x473b80
mov dword [ebp + 0x58], 9
mov dword [ebp + 0x54], 0x4743a8
mov dword [ebp + 0x5c], 5
mov dword [ebp + 4], 0x3f47
jmp 0x436acc
mov dword [ebp + 4], 0x3f41
shr edx, 2
sub ebx, 3
jmp 0x436426
mov ecx, ebx
and ecx, 7
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jae 0x436b20
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jb 0x436af1
mov eax, edx
movzx ecx, dx
not eax
shr eax, 0x10
cmp ecx, eax
je 0x436b3a
mov dword [esi + 0x18], str.invalid_stored_block_lengths
jmp 0x436443
xor eax, eax
mov dword [ebp + 0x44], ecx
mov edx, eax
mov ebx, eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 4], 0x3f43
mov ecx, dword [ebp + 0x44]
test ecx, ecx
je 0x436b9b
cmp ecx, edi
mov eax, edi
mov edi, dword [esp + 0x28]
cmovbe eax, ecx
cmp eax, edi
cmovbe edi, eax
test edi, edi
je 0x437654
mov ecx, dword [esp + 0x2c]
push edi
push dword [esp + 0x18]
push ecx
call fcn.0043bdd0
sub dword [esp + 0x28], edi
add esp, 0xc
add dword [esp + 0x14], edi
sub dword [esp + 0x28], edi
add dword [esp + 0x2c], edi
sub dword [ebp + 0x44], edi
jmp 0x4368f0
mov dword [ebp + 4], 0x3f3f
jmp 0x4368f8
cmp ebx, 0xe
jae 0x436bdb
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 0xe
jb 0x436bb0
mov edi, dword [esp + 0x3c]
mov ecx, edx
shr edx, 5
and ecx, edi
and edi, edx
add ecx, 0x101
shr edx, 5
inc edi
mov eax, edx
mov dword [ebp + 0x64], ecx
and eax, 0xf
shr edx, 4
add eax, 4
mov dword [ebp + 0x68], edi
sub ebx, 0xe
mov dword [ebp + 0x60], eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
cmp ecx, 0x11e
ja 0x436c2f
cmp edi, 0x1e
ja 0x436c2f
and dword [ebp + 0x6c], 0
mov edi, dword [esp + 0x1c]
mov dword [ebp + 4], 0x3f45
jmp case.0x4362cb.16197
mov dword [esi + 0x18], str.too_many_length_or_distance_symbols
jmp 0x43695e
cmp ebx, 3
jae 0x436c6f
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 3
jb 0x436c44
mov eax, dword [ebp + 0x6c]
mov ecx, edx
and ecx, 7
shr edx, 3
mov dword [esp + 0x18], edx
movzx eax, word [eax*2 + 0x474380]
mov word [ebp + eax*2 + 0x74], cx
inc dword [ebp + 0x6c]
sub ebx, 3
mov dword [esp + 0x20], ebx
mov eax, dword [ebp + 0x6c]
cmp eax, dword [ebp + 0x60]
jb 0x436c3b
cmp eax, 0x13
jae 0x436cbd
mov eax, dword [ebp + 0x6c]
xor ecx, ecx
movzx eax, word [eax*2 + 0x474380]
mov word [ebp + eax*2 + 0x74], cx
inc dword [ebp + 0x6c]
cmp dword [ebp + 0x6c], 0x13
jb 0x436ca2
lea eax, [ebp + 0x534]
lea edx, [ebp + 0x70]
mov dword [ebp + 0x50], eax
mov dword [edx], eax
lea ecx, [ebp + 0x58]
lea eax, [ebp + 0x2f4]
mov dword [ecx], 7
push eax
push ecx
push edx
push 0x13
lea edx, [ebp + 0x74]
xor ecx, ecx
call fcn.00437a5e
mov edx, dword [esp + 0x28]
add esp, 0x10
mov dword [esp + 0x38], eax
test eax, eax
je 0x436d04
mov dword [esi + 0x18], str.invalid_code_lengths_set
jmp 0x436443
mov eax, dword [esp + 0x50]
mov ecx, eax
and dword [ebp + 0x6c], 0
mov dword [ebp + 4], eax
mov eax, dword [ebp + 0x68]
add eax, dword [ebp + 0x64]
cmp dword [ebp + 0x6c], eax
jae 0x436f27
mov ecx, dword [ebp + 0x58]
xor eax, eax
lea edi, [eax + 1]
shl edi, cl
jmp 0x436d55
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437654
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
add ebx, 8
mov ecx, dword [ebp + 0x50]
lea eax, [edi - 1]
and eax, edx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x40], eax
cmp ecx, ebx
ja 0x436d2c
mov edi, eax
push 0x10
shr edi, 0x10
pop ecx
cmp di, cx
jae 0x436da2
shr eax, 8
movzx ecx, al
mov eax, dword [ebp + 0x6c]
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov word [ebp + eax*2 + 0x74], di
inc dword [ebp + 0x6c]
mov ecx, dword [ebp + 0x6c]
jmp 0x436efa
jne 0x436e18
mov ecx, eax
shr ecx, 8
movzx edi, cl
add edi, 2
cmp ebx, edi
jae 0x436de2
mov ecx, dword [esp + 0x1c]
test ecx, ecx
je 0x437654
dec ecx
mov dword [esp + 0x1c], ecx
mov ecx, dword [esp + 0x14]
movzx edx, byte [ecx]
mov ecx, ebx
shl edx, cl
add ebx, 8
add dword [esp + 0x18], edx
inc dword [esp + 0x14]
cmp ebx, edi
jb 0x436db3
mov edx, dword [esp + 0x18]
movzx ecx, ah
mov eax, dword [ebp + 0x6c]
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
test eax, eax
je 0x436f0d
movzx eax, word [ebp + eax*2 + 0x72]
mov edi, edx
and edi, 3
shr edx, 2
add edi, 3
mov dword [esp + 0x40], eax
sub ebx, 2
jmp 0x436ec5
cmp word [esp + 0x42], 0x11
movzx ecx, ah
jne 0x436e70
lea edi, [ecx + 3]
mov dword [esp + 0x40], ecx
cmp ebx, edi
jae 0x436e5f
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437654
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
add ebx, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
cmp ebx, edi
jb 0x436e2e
mov ecx, dword [esp + 0x40]
shr edx, cl
mov edi, edx
and edi, 7
add edi, 3
shr edx, 3
push 0xfffffffffffffffd
jmp 0x436ebb
lea edi, [ecx + 7]
mov dword [esp + 0x40], ecx
cmp ebx, edi
jae 0x436eac
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437654
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
add ebx, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
cmp ebx, edi
jb 0x436e7b
mov ecx, dword [esp + 0x40]
shr edx, cl
mov edi, edx
and edi, 0x7f
add edi, 0xb
shr edx, 7
push 0xfffffffffffffff9
pop eax
sub eax, ecx
add ebx, eax
and dword [esp + 0x40], 0
mov ecx, dword [ebp + 0x6c]
mov eax, dword [ebp + 0x68]
add ecx, edi
add eax, dword [ebp + 0x64]
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
cmp ecx, eax
ja 0x436f19
mov esi, dword [esp + 0x40]
mov eax, dword [ebp + 0x6c]
mov word [ebp + eax*2 + 0x74], si
mov ecx, dword [ebp + 0x6c]
lea ecx, [ecx + 1]
mov dword [ebp + 0x6c], ecx
sub edi, 1
jne 0x436ee0
mov esi, dword [esp + 0x30]
mov eax, dword [ebp + 0x68]
add eax, dword [ebp + 0x64]
cmp ecx, eax
jb 0x436d20
mov ecx, dword [ebp + 4]
jmp 0x436f27
mov dword [esi + 0x18], str.invalid_bit_length_repeat
jmp 0x43695e
mov ecx, dword [esp + 0x48]
mov dword [esi + 0x18], str.invalid_bit_length_repeat
mov dword [ebp + 4], ecx
mov edi, dword [esp + 0x48]
cmp ecx, edi
je 0x4368f4
xor eax, eax
cmp word [ebp + 0x274], ax
jne 0x436f4d
mov dword [esi + 0x18], str.invalid_code____missing_end_of_block
mov dword [ebp + 4], edi
jmp 0x4368f4
lea eax, [ebp + 0x534]
lea edi, [ebp + 0x70]
mov dword [ebp + 0x50], eax
lea ecx, [ebp + 0x2f4]
mov dword [edi], eax
push ecx
lea eax, [ebp + 0x58]
xor ecx, ecx
push eax
push edi
push dword [ebp + 0x64]
lea edx, [ebp + 0x74]
mov dword [eax], 9
inc ecx
call fcn.00437a5e
add esp, 0x10
mov dword [esp + 0x38], eax
test eax, eax
je 0x436f99
mov dword [esi + 0x18], str.invalid_literal_lengths_set
mov dword [ebp + 4], 0x3f51
jmp 0x4368f0
mov eax, dword [edi]
lea ecx, [ebp + 0x2f4]
push ecx
mov dword [ebp + 0x54], eax
lea eax, [ebp + 0x5c]
push eax
mov dword [eax], 6
mov eax, dword [ebp + 0x64]
push edi
push dword [ebp + 0x68]
lea edx, [eax*2 + 0x74]
push 2
add edx, ebp
pop ecx
call fcn.00437a5e
mov edx, dword [esp + 0x28]
add esp, 0x10
mov edi, dword [esp + 0x1c]
mov dword [esp + 0x38], eax
test eax, eax
je case.0x4362cb.16199
mov dword [esi + 0x18], str.invalid_distances_set
jmp 0x436443
mov dword [ebp + 4], 0x3f48
cmp edi, 6
jb 0x437063
mov eax, dword [esp + 0x28]
cmp eax, 0x102
jb 0x437063
mov ecx, dword [esp + 0x2c]
mov dword [esi + 0x10], eax
mov eax, dword [esp + 0x14]
mov dword [esi + 0xc], ecx
mov ecx, esi
mov dword [esi], eax
mov dword [esi + 4], edi
mov dword [ebp + 0x3c], edx
mov edx, dword [esp + 0x34]
mov dword [ebp + 0x40], ebx
call fcn.00437e73
cmp dword [ebp + 4], 0x3f3f
mov eax, dword [esi + 0xc]
mov edi, dword [esi + 4]
mov edx, dword [ebp + 0x3c]
mov ebx, dword [ebp + 0x40]
mov dword [esp + 0x2c], eax
mov eax, dword [esi + 0x10]
mov dword [esp + 0x28], eax
mov eax, dword [esi]
mov dword [esp + 0x14], eax
mov dword [esp + 0x1c], edi
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jne 0x4368f8
or dword [ebp + 0x1bc8], 0xffffffff
jmp 0x4368f8
and dword [ebp + 0x1bc8], 0
xor eax, eax
mov ecx, dword [ebp + 0x58]
lea edi, [eax + 1]
shl edi, cl
jmp 0x4370a3
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437654
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
add ebx, 8
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov ecx, dword [ebp + 0x50]
lea eax, [edi - 1]
and eax, edx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, ebx
ja 0x437076
test al, al
je 0x437179
test al, 0xf0
jne 0x437179
mov ebx, eax
movzx ecx, al
shr ebx, 8
xor edi, edi
movzx esi, bl
inc edi
add ecx, esi
mov edx, eax
shl edi, cl
mov ecx, esi
dec edi
shr eax, 0x10
and edi, dword [esp + 0x18]
shr edi, cl
mov ecx, dword [ebp + 0x50]
add edi, eax
mov dword [esp + 0x40], edx
mov eax, dword [ecx + edi*4]
mov ecx, eax
shr ecx, 8
movzx esi, cl
movzx ecx, bl
mov ebx, dword [esp + 0x20]
add esi, ecx
cmp esi, ebx
jbe 0x437164
mov esi, dword [esp + 0x1c]
test esi, esi
je 0x437654
dec esi
movzx edi, dh
mov dword [esp + 0x1c], esi
mov ecx, ebx
mov esi, dword [esp + 0x14]
add ebx, 8
movzx eax, byte [esi]
shl eax, cl
add dword [esp + 0x18], eax
inc esi
movzx eax, word [esp + 0x42]
mov dword [esp + 0x14], esi
xor esi, esi
inc esi
movzx ecx, dl
add ecx, edi
shl esi, cl
mov ecx, edi
dec esi
and esi, dword [esp + 0x18]
shr esi, cl
add esi, eax
mov eax, dword [ebp + 0x50]
mov eax, dword [eax + esi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edi
cmp ecx, ebx
ja 0x43710b
mov esi, dword [esp + 0x30]
movzx ecx, dh
mov edx, dword [esp + 0x18]
shr edx, cl
sub ebx, ecx
mov dword [ebp + 0x1bc8], ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [ebp + 0x1bc8], ecx
sub ebx, ecx
shr edx, cl
mov ecx, eax
shr ecx, 0x10
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 0x44], ecx
test al, al
jne 0x4371ab
mov dword [ebp + 4], 0x3f4d
jmp 0x4368f4
test al, 0x20
je 0x4371c2
or dword [ebp + 0x1bc8], 0xffffffff
mov dword [ebp + 4], 0x3f3f
jmp 0x4368f4
mov edi, dword [esp + 0x1c]
test al, 0x40
je 0x4371d6
mov dword [esi + 0x18], str.invalid_literal_length_code
jmp 0x436443
movzx eax, al
and eax, 0xf
mov dword [ebp + 4], 0x3f49
mov dword [ebp + 0x4c], eax
mov esi, dword [ebp + 0x4c]
test esi, esi
je 0x43723e
cmp ebx, esi
jae 0x43721f
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, esi
jb 0x4371f5
xor eax, eax
mov ecx, esi
inc eax
sub ebx, esi
shl eax, cl
dec eax
mov dword [esp + 0x20], ebx
and eax, edx
shr edx, cl
add dword [ebp + 0x44], eax
add dword [ebp + 0x1bc8], esi
mov dword [esp + 0x18], edx
mov eax, dword [ebp + 0x44]
mov dword [ebp + 0x1bcc], eax
mov dword [ebp + 4], 0x3f4a
mov ecx, dword [ebp + 0x5c]
xor eax, eax
mov edi, dword [ebp + 0x54]
lea esi, [eax + 1]
shl esi, cl
jmp 0x43728a
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437654
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
add ebx, 8
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
lea eax, [esi - 1]
and eax, edx
mov eax, dword [edi + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, ebx
ja 0x43725d
test al, 0xf0
jne 0x437351
mov ebx, eax
movzx ecx, al
shr ebx, 8
xor edi, edi
movzx esi, bl
inc edi
add ecx, esi
mov edx, eax
shl edi, cl
mov ecx, esi
dec edi
shr eax, 0x10
and edi, dword [esp + 0x18]
shr edi, cl
mov ecx, dword [ebp + 0x54]
add edi, eax
mov dword [esp + 0x40], edx
mov eax, dword [ecx + edi*4]
mov ecx, eax
shr ecx, 8
movzx esi, cl
movzx ecx, bl
mov ebx, dword [esp + 0x20]
add esi, ecx
cmp esi, ebx
jbe 0x437340
mov esi, dword [esp + 0x1c]
test esi, esi
je 0x437654
dec esi
movzx edi, dh
mov dword [esp + 0x1c], esi
mov ecx, ebx
mov esi, dword [esp + 0x14]
add ebx, 8
movzx eax, byte [esi]
shl eax, cl
add dword [esp + 0x18], eax
inc esi
movzx eax, word [esp + 0x42]
mov dword [esp + 0x14], esi
xor esi, esi
inc esi
movzx ecx, dl
add ecx, edi
shl esi, cl
mov ecx, edi
dec esi
and esi, dword [esp + 0x18]
shr esi, cl
add esi, eax
mov eax, dword [ebp + 0x54]
mov eax, dword [eax + esi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edi
cmp ecx, ebx
ja 0x4372e7
movzx ecx, dh
mov edx, dword [esp + 0x18]
sub ebx, ecx
shr edx, cl
add dword [ebp + 0x1bc8], ecx
mov esi, dword [esp + 0x30]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [ebp + 0x1bc8], ecx
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
test al, 0x40
je 0x43737f
mov dword [esi + 0x18], str.invalid_distance_code
jmp 0x43695e
mov ecx, eax
mov dword [ebp + 4], 0x3f4b
shr ecx, 0x10
movzx eax, al
and eax, 0xf
mov dword [ebp + 0x48], ecx
mov dword [ebp + 0x4c], eax
mov edi, dword [ebp + 0x4c]
test edi, edi
je 0x4373ec
jmp 0x4373c9
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437654
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
add ebx, 8
cmp ebx, edi
jb 0x4373a0
xor eax, eax
mov ecx, edi
inc eax
sub ebx, edi
shl eax, cl
dec eax
mov dword [esp + 0x20], ebx
and eax, edx
shr edx, cl
add dword [ebp + 0x48], eax
add dword [ebp + 0x1bc8], edi
mov dword [esp + 0x18], edx
mov edi, dword [esp + 0x1c]
mov dword [ebp + 4], 0x3f4c
mov eax, dword [esp + 0x28]
test eax, eax
je 0x437654
mov ecx, dword [esp + 0x34]
sub ecx, eax
mov eax, dword [ebp + 0x48]
cmp eax, ecx
jbe 0x43745a
sub eax, ecx
cmp eax, dword [ebp + 0x30]
jbe 0x43742c
cmp dword [ebp + 0x1bc4], 0
je 0x43742c
mov dword [esi + 0x18], str.invalid_distance_too_far_back
jmp 0x436443
cmp eax, dword [ebp + 0x34]
jbe 0x43743e
sub eax, dword [ebp + 0x34]
mov ecx, dword [ebp + 0x2c]
sub ecx, eax
add ecx, dword [ebp + 0x38]
jmp 0x437446
mov ecx, dword [ebp + 0x38]
sub ecx, eax
add ecx, dword [ebp + 0x34]
mov edi, dword [ebp + 0x44]
cmp eax, edi
mov edx, edi
cmovbe edx, eax
mov dword [esp + 0x40], edx
mov edx, dword [esp + 0x18]
jmp 0x437467
mov ecx, dword [esp + 0x2c]
mov edi, dword [ebp + 0x44]
sub ecx, eax
mov dword [esp + 0x40], edi
mov esi, dword [esp + 0x28]
mov eax, esi
cmp dword [esp + 0x40], esi
cmovbe eax, dword [esp + 0x40]
sub esi, eax
mov dword [esp + 0x40], eax
sub edi, eax
mov dword [esp + 0x28], esi
mov esi, dword [esp + 0x2c]
sub ecx, esi
mov dword [ebp + 0x44], edi
mov edi, eax
mov al, byte [ecx + esi]
mov byte [esi], al
inc esi
sub edi, 1
jne 0x43748d
cmp dword [ebp + 0x44], 0
mov edi, dword [esp + 0x1c]
mov dword [esp + 0x2c], esi
mov esi, dword [esp + 0x30]
jne 0x4368f8
mov dword [ebp + 4], 0x3f48
jmp 0x4368f8
cmp dword [esp + 0x28], 0
je 0x437654
mov ecx, dword [esp + 0x2c]
mov al, byte [ebp + 0x44]
mov byte [ecx], al
inc ecx
dec dword [esp + 0x28]
mov dword [esp + 0x2c], ecx
jmp 0x4374ae
cmp dword [ebp + 0xc], 0
je 0x4375bd
cmp ebx, 0x20
jae 0x43751b
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jb 0x4374ec
mov ecx, dword [esp + 0x34]
sub ecx, dword [esp + 0x28]
add dword [esi + 0x14], ecx
add dword [ebp + 0x20], ecx
mov eax, dword [ebp + 0xc]
mov dword [esp + 0x34], ecx
test al, 4
je 0x437565
test ecx, ecx
je 0x437565
mov edx, dword [esp + 0x2c]
push dword [esp + 0x34]
sub edx, ecx
cmp dword [ebp + 0x14], 0
mov ecx, dword [ebp + 0x1c]
je 0x437552
call fcn.00438291
jmp 0x437557
call fcn.00437831
mov edx, dword [esp + 0x1c]
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
mov eax, dword [ebp + 0xc]
pop ecx
mov ecx, dword [esp + 0x28]
mov dword [esp + 0x34], ecx
test al, 4
je 0x4375af
mov ecx, edx
mov eax, edx
shl eax, 0x10
and ecx, 0xff00
add ecx, eax
mov eax, edx
shr eax, 8
and eax, 0xff00
shl ecx, 8
add ecx, eax
mov eax, edx
shr eax, 0x18
add ecx, eax
xor eax, eax
cmp dword [ebp + 0x14], eax
cmovne ecx, edx
cmp ecx, dword [ebp + 0x1c]
je 0x4375b1
mov dword [esi + 0x18], str.incorrect_data_check
jmp 0x436443
xor eax, eax
mov edx, eax
mov ebx, eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 4], 0x3f4f
xor eax, eax
cmp dword [ebp + 0xc], eax
je 0x437641
cmp dword [ebp + 0x14], eax
je 0x437641
cmp ebx, 0x20
jae 0x437606
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437654
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jb 0x4375d9
xor eax, eax
cmp edx, dword [ebp + 0x20]
je 0x43763b
mov dword [esi + 0x18], str.incorrect_length_check
jmp 0x436443
mov eax, dword [esp + 0x2c]
mov dword [esi + 0xc], eax
mov eax, dword [esp + 0x28]
mov dword [esi + 0x10], eax
mov eax, dword [esp + 0x14]
mov dword [esi], eax
mov dword [esi + 4], edi
mov dword [ebp + 0x3c], edx
mov dword [ebp + 0x40], ebx
push 2
jmp 0x43690c
mov dword [esp + 0x18], eax
mov ebx, eax
mov dword [ebp + 4], 0x3f50
xor eax, eax
inc eax
jmp 0x437650
push 0xfffffffffffffffd
pop eax
mov dword [esp + 0x38], eax
mov esi, dword [esp + 0x30]
mov eax, dword [esp + 0x2c]
mov edi, dword [esp + 0x1c]
mov ecx, dword [esp + 0x14]
mov dword [esi + 0xc], eax
mov eax, dword [esp + 0x28]
mov dword [esi + 0x10], eax
mov eax, dword [esp + 0x18]
mov dword [esi + 4], edi
mov edi, dword [esp + 0x34]
mov dword [esi], ecx
mov dword [ebp + 0x40], ebx
xor ebx, ebx
mov dword [ebp + 0x3c], eax
cmp dword [ebp + 0x2c], ebx
jne 0x437696
cmp edi, dword [esi + 0x10]
je 0x4376b9
cmp dword [ebp + 4], 0x3f51
jge 0x4376b9
mov edx, dword [esi + 0xc]
mov eax, edi
sub eax, dword [esi + 0x10]
mov ecx, esi
push eax
call fcn.0043614d
pop ecx
test eax, eax
je 0x4376b9
mov dword [ebp + 4], 0x3f52
push 0xfffffffffffffffc
jmp 0x43690c
mov edx, dword [esp + 0x44]
sub edx, dword [esi + 4]
sub edi, dword [esi + 0x10]
add dword [esi + 8], edx
add dword [esi + 0x14], edi
add dword [ebp + 0x20], edi
test byte [ebp + 0xc], 4
mov dword [esp + 0x44], edx
je 0x4376ff
test edi, edi
je 0x4376ff
mov edx, dword [esi + 0xc]
mov ecx, dword [ebp + 0x1c]
sub edx, edi
push edi
cmp dword [ebp + 0x14], ebx
je 0x4376ef
call fcn.00438291
jmp 0x4376f4
call fcn.00437831
mov edx, dword [esp + 0x48]
mov dword [ebp + 0x1c], eax
pop ecx
mov dword [esi + 0x30], eax
cmp dword [ebp + 4], 0x3f47
je 0x437711
cmp dword [ebp + 4], 0x3f42
jne 0x437716
mov ebx, 0x100
mov ecx, dword [ebp + 8]
neg ecx
mov dword [esp + 0x50], 0x80
sbb ecx, ecx
xor eax, eax
and ecx, 0x40
cmp dword [ebp + 4], 0x3f3f
cmove eax, dword [esp + 0x50]
add ecx, eax
mov eax, dword [esp + 0x38]
add ecx, dword [ebp + 0x40]
add ecx, ebx
mov dword [esi + 0x2c], ecx
test edx, edx
jne 0x43690d
test edi, edi
jne 0x43690d
push 0xfffffffffffffffb
test eax, eax
pop ecx
cmove eax, ecx
jmp 0x43690d