Function at 0x4c2fc0
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0xac
mov edx, dword [esp + 0xc4]
mov eax, dword [esp + 0xc0]
call sym._af_glyph_hints_reload
test eax, eax
mov dword [esp + 0x44], eax
jne 0x4c3120
mov eax, dword [esp + 0xc0]
mov edx, dword [eax + 0x64]
test dl, 1
je 0x4c3237
mov eax, edx
and eax, 2
je 0x4c344b
mov eax, dword [esp + 0xc0]
xor edi, edi
add eax, 0x40
mov dword [esp + 0x28], eax
test edi, edi
je 0x4c3cd2
and edx, 2
jne 0x4c31b5
mov esi, dword [esp + 0x28]
mov dword [esp + 0x30], edi
mov dword [esp + 0x34], 0
mov eax, dword [esi]
mov ebx, eax
mov dword [esp + 0x2c], eax
mov eax, dword [esi - 8]
mov esi, ebx
mov ebp, esi
lea eax, [eax + eax*2]
shl eax, 4
add ebx, eax
mov dword [esp + 0x50], eax
cmp esi, ebx
mov dword [esp + 0x3c], ebx
jae 0x4c3db7
movzx eax, byte [ebp + 0xc]
test al, 4
jne 0x4c3102
mov ebx, dword [ebp + 0x18]
mov edx, dword [ebp + 0x14]
test ebx, ebx
setne byte [esp + 0x38]
test edx, edx
movzx ecx, byte [esp + 0x38]
je 0x4c30be
test cl, cl
je 0x4c30be
mov ecx, dword [ebx + 0x14]
test ecx, ecx
je 0x4c43bc
movzx esi, byte [ebx + 0xc]
mov ecx, esi
shr cl, 3
and ecx, 1
test al, 8
je 0x4c43b4
test cl, cl
je 0x4c43a5
mov eax, esi
mov dword [ebx + 0x14], 0
and eax, 0xfffffff7
mov byte [ebx + 0xc], al
mov edx, dword [ebp + 0x14]
test edx, edx
mov ecx, ebp
je 0x4c436a
mov eax, dword [edx + 8]
or byte [ebp + 0xc], 4
test ebx, ebx
mov dword [ebp + 8], eax
je 0x4c30f5
mov eax, dword [ebx + 0x14]
test eax, eax
jne 0x4c30f5
mov eax, dword [esp + 0xc0]
mov dword [esp], ebx
mov edx, 1
call sym._af_latin_align_linked_edge
or byte [ebx + 0xc], 4
mov eax, dword [esp + 0x34]
test eax, eax
cmove eax, ebp
mov dword [esp + 0x34], eax
add ebp, 0x30
cmp ebp, dword [esp + 0x3c]
jb 0x4c305f
jmp 0x4c3d1a
mov dword [esp + 0x44], eax
nop
lea esi, [esi]
mov eax, dword [esp + 0x44]
add esp, 0xac
pop ebx
pop esi
pop edi
pop ebp
ret
cmp edi, ebp
ja 0x4c3e49
mov edi, dword [esp + 0x40]
imul eax, dword [esp + 0x30], 0x1c
mov ebx, dword [esp + 0xc0]
lea eax, [ebx + eax + 0x20]
mov edx, dword [eax + 0x14]
mov eax, dword [eax + 0xc]
lea eax, [eax + eax*2]
shl eax, 4
add eax, edx
test edi, edi
jne 0x4c3fbb
cmp eax, edx
jbe 0x4c3195
mov esi, dword [edx + 0xc]
test esi, esi
je 0x4c318e
mov ecx, dword [edx + 0x28]
mov ebx, dword [edx + 0x2c]
mov esi, dword [esi + 8]
or word [ecx], 4
cmp ecx, ebx
mov dword [ecx + 0x10], esi
je 0x4c318e
mov ecx, dword [ecx + 0x20]
or word [ecx], 4
cmp ebx, ecx
mov dword [ecx + 0x10], esi
jne 0x4c3180
add edx, 0x30
cmp edx, eax
jb 0x4c3165
mov ebx, dword [esp + 0x30]
mov eax, dword [esp + 0xc0]
mov edx, ebx
call sym._af_glyph_hints_align_strong_points
mov eax, dword [esp + 0xc0]
mov edx, ebx
call sym._af_glyph_hints_align_weak_points
cmp edi, 1
mov eax, dword [esp + 0xc0]
je 0x4c31d1
mov edx, dword [eax + 0x64]
add edi, 1
add dword [esp + 0x28], 0x1c
jmp 0x4c3017
mov edi, dword [esp + 0xc4]
mov eax, dword [eax + 0x1c]
mov edx, dword [edi + 4]
mov ebx, dword [edi + 8]
mov edi, dword [esp + 0xc0]
mov ecx, dword [edi + 0x18]
lea ecx, [ecx + ecx*4]
lea esi, [eax + ecx*8]
cmp eax, esi
jb 0x4c3214
jmp 0x4c3120
mov byte [ebx], 0
add eax, 0x28
add edx, 8
add ebx, 1
cmp esi, eax
jbe 0x4c3120
mov ecx, dword [eax + 0x10]
mov dword [edx], ecx
mov ecx, dword [eax + 0x14]
mov dword [edx + 4], ecx
movzx ecx, word [eax]
test cl, 1
jne 0x4c3200
and ecx, 2
cmp cx, 1
sbb ecx, ecx
add ecx, 2
mov byte [ebx], cl
jmp 0x4c3203
mov ebx, eax
mov eax, dword [esp + 0xc8]
lea edx, [esp + 0x70]
mov ecx, 0xc
mov eax, dword [eax + 0x34]
mov dword [esp + 0x4c], eax
mov eax, dword [esp + 0xc0]
mov eax, dword [eax]
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0xc0]
mov eax, dword [eax + 0x28]
mov edi, eax
mov dword [esp + 0x3c], eax
mov eax, dword [esp + 0xc0]
mov eax, dword [eax + 0x24]
lea eax, [edi + eax*4]
mov edi, edx
mov edx, dword [ebx + 0x18]
mov dword [esp + 0x48], eax
mov eax, dword [esp + 0x44]
lea edx, [edx + edx*4]
rep stosd dword es:[edi], eax
mov eax, dword [esp + 0xc0]
mov edi, dword [ebx + 0x44]
mov dword [esp + 0x90], 0x7d00
mov eax, dword [eax + 0x44]
mov dword [ebx + 0x2c], 0
mov dword [esp + 0x28], eax
sar eax, 0x1f
xor edi, eax
sub edi, eax
mov eax, dword [ebx + 0x1c]
mov dword [esp + 0x34], edi
lea ecx, [eax + edx*8]
cmp eax, ecx
jae 0x4c32d9
movsx edx, word [eax + 0xc]
add eax, 0x28
mov dword [eax - 0x10], edx
movsx edx, word [eax - 0x1a]
mov dword [eax - 0xc], edx
cmp ecx, eax
ja 0x4c32c4
mov edi, dword [esp + 0x48]
cmp dword [esp + 0x3c], edi
jae 0x4c3a58
mov eax, dword [esp + 0x34]
xor edi, edi
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x3c]
mov eax, dword [eax]
mov ecx, dword [eax + 0x24]
mov dword [esp + 0x28], eax
cmp eax, ecx
je 0x4c3884
movsx eax, byte [ecx + 3]
cdq
xor eax, edx
sub eax, edx
cmp dword [esp + 0x34], eax
je 0x4c39c3
mov ebx, dword [esp + 0x28]
mov byte [esp + 0x38], 0
mov edx, 0xffff8300
mov eax, 0x7d00
xor ebp, ebp
jmp 0x4c3358
mov ecx, dword [ebx + 0x18]
cmp eax, ecx
cmovg eax, ecx
cmp edx, ecx
cmovl edx, ecx
movsx ecx, byte [ebx + 3]
cmp ecx, dword [esp + 0x2c]
jne 0x4c3660
cmp ebx, dword [esp + 0x28]
je 0x4c3660
mov ebx, dword [ebx + 0x20]
test ebp, ebp
jne 0x4c3330
cmp ebx, dword [esp + 0x28]
je 0x4c36a6
movsx esi, byte [ebx + 3]
mov ebp, esi
mov ecx, esi
sar ebp, 0x1f
mov byte [esp + 0x30], cl
mov ecx, ebp
xor ecx, esi
sub ecx, ebp
xor ebp, ebp
cmp dword [esp + 0x34], ecx
jne 0x4c3355
mov eax, dword [esp + 0xc0]
mov dword [esp + 0x6c], 0
mov edx, dword [eax + 0x2c]
mov eax, dword [eax + 0x30]
cmp edx, eax
jge 0x4c3750
mov eax, dword [esp + 0xc0]
mov eax, dword [eax + 0x34]
mov edi, dword [esp + 0xc0]
lea ecx, [edx + 1]
mov dword [esp + 0x2c], esi
mov ebp, 1
mov dword [edi + 0x2c], ecx
lea edi, [edx + edx*2]
shl edi, 4
add edi, eax
mov eax, dword [esp + 0x70]
mov dword [edi], eax
mov eax, dword [esp + 0x74]
mov dword [edi + 4], eax
mov eax, dword [esp + 0x78]
mov dword [edi + 8], eax
mov eax, dword [esp + 0x7c]
mov dword [edi + 0xc], eax
mov eax, dword [esp + 0x80]
mov dword [edi + 0x10], eax
mov eax, dword [esp + 0x84]
mov dword [edi + 0x14], eax
mov eax, dword [esp + 0x88]
mov dword [edi + 0x18], eax
mov eax, dword [esp + 0x8c]
mov dword [edi + 0x1c], eax
mov eax, dword [esp + 0x90]
mov dword [edi + 0x20], eax
mov eax, dword [esp + 0x94]
mov dword [edi + 0x24], eax
mov eax, dword [esp + 0x98]
mov dword [edi + 0x28], eax
mov eax, dword [esp + 0x9c]
mov dword [edi + 0x2c], eax
movzx eax, byte [esp + 0x30]
mov byte [edi + 1], al
mov eax, dword [ebx + 0x18]
mov dword [edi + 0x28], ebx
mov dword [edi + 0x2c], ebx
mov edx, eax
jmp 0x4c3355
mov edi, dword [esp + 0xc8]
mov ebx, dword [esp + 0xc0]
mov ecx, 0xc
mov edi, dword [edi + 0x524]
mov edx, dword [ebx + 0x24]
mov dword [esp + 0x4c], edi
mov edi, dword [esp + 0xc0]
mov edi, dword [edi]
mov dword [esp + 0x40], edi
mov edi, dword [esp + 0xc0]
mov edi, dword [edi + 0x28]
mov dword [ebx + 0x48], 0
mov dword [esp + 0x3c], edi
lea edi, [edi + edx*4]
lea edx, [esp + 0x70]
mov dword [esp + 0x48], edi
mov edi, edx
mov edx, dword [ebx + 0x18]
rep stosd dword es:[edi], eax
mov eax, dword [ebx + 0x60]
mov edi, dword [ebx + 0x60]
lea edx, [edx + edx*4]
mov dword [esp + 0x90], 0x7d00
mov dword [esp + 0x28], eax
sar eax, 0x1f
xor edi, eax
sub edi, eax
mov eax, dword [ebx + 0x1c]
mov dword [esp + 0x34], edi
lea ecx, [eax + edx*8]
cmp eax, ecx
jae 0x4c34e5
lea esi, [esi]
movsx edx, word [eax + 0xe]
add eax, 0x28
mov dword [eax - 0x10], edx
movsx edx, word [eax - 0x1c]
mov dword [eax - 0xc], edx
cmp ecx, eax
ja 0x4c34d0
mov edi, dword [esp + 0x48]
cmp dword [esp + 0x3c], edi
jae 0x4c3a9e
mov eax, dword [esp + 0x34]
xor edi, edi
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x3c]
mov eax, dword [eax]
mov ebx, eax
mov dword [esp + 0x28], eax
mov eax, dword [eax + 0x24]
cmp ebx, eax
je 0x4c3923
movsx edx, byte [eax + 3]
mov ecx, edx
sar ecx, 0x1f
xor edx, ecx
sub edx, ecx
cmp dword [esp + 0x34], edx
je 0x4c3a0c
mov ebx, dword [esp + 0x28]
mov byte [esp + 0x38], 0
mov edx, 0xffff8300
mov eax, 0x7d00
xor ebp, ebp
jmp 0x4c356a
mov ecx, dword [ebx + 0x18]
cmp eax, ecx
cmovg eax, ecx
cmp edx, ecx
cmovl edx, ecx
movsx ecx, byte [ebx + 3]
cmp ecx, dword [esp + 0x2c]
jne 0x4c36c0
cmp ebx, dword [esp + 0x28]
je 0x4c36c0
mov ebx, dword [ebx + 0x20]
test ebp, ebp
jne 0x4c3542
cmp ebx, dword [esp + 0x28]
je 0x4c3702
movsx esi, byte [ebx + 3]
mov ebp, esi
mov ecx, esi
sar ebp, 0x1f
mov byte [esp + 0x30], cl
mov ecx, ebp
xor ecx, esi
sub ecx, ebp
xor ebp, ebp
cmp dword [esp + 0x34], ecx
jne 0x4c3567
mov eax, dword [esp + 0xc0]
mov dword [esp + 0x6c], 0
mov edx, dword [eax + 0x48]
mov eax, dword [eax + 0x4c]
cmp edx, eax
jge 0x4c37d0
mov eax, dword [esp + 0xc0]
mov eax, dword [eax + 0x50]
mov edi, dword [esp + 0xc0]
lea ecx, [edx + 1]
mov dword [esp + 0x2c], esi
mov ebp, 1
mov dword [edi + 0x48], ecx
lea edi, [edx + edx*2]
shl edi, 4
add edi, eax
mov eax, dword [esp + 0x70]
mov dword [edi], eax
mov eax, dword [esp + 0x74]
mov dword [edi + 4], eax
mov eax, dword [esp + 0x78]
mov dword [edi + 8], eax
mov eax, dword [esp + 0x7c]
mov dword [edi + 0xc], eax
mov eax, dword [esp + 0x80]
mov dword [edi + 0x10], eax
mov eax, dword [esp + 0x84]
mov dword [edi + 0x14], eax
mov eax, dword [esp + 0x88]
mov dword [edi + 0x18], eax
mov eax, dword [esp + 0x8c]
mov dword [edi + 0x1c], eax
mov eax, dword [esp + 0x90]
mov dword [edi + 0x20], eax
mov eax, dword [esp + 0x94]
mov dword [edi + 0x24], eax
mov eax, dword [esp + 0x98]
mov dword [edi + 0x28], eax
mov eax, dword [esp + 0x9c]
mov dword [edi + 0x2c], eax
movzx eax, byte [esp + 0x30]
mov byte [edi + 1], al
mov eax, dword [ebx + 0x18]
mov dword [edi + 0x28], ebx
mov dword [edi + 0x2c], ebx
mov edx, eax
jmp 0x4c3567
add eax, edx
movzx edx, word [ebx]
mov dword [edi + 0x2c], ebx
sar eax, 1
mov word [edi + 2], ax
mov eax, dword [edi + 0x28]
or dx, word [eax]
and edx, 3
je 0x4c367c
or byte [edi], 1
mov edx, dword [ebx + 0x1c]
mov eax, dword [eax + 0x1c]
cmp edx, eax
jle 0x4c3720
mov ecx, edx
sub ecx, eax
mov word [edi + 4], ax
mov word [edi + 6], dx
mov word [edi + 8], cx
xor edi, edi
cmp ebx, dword [esp + 0x28]
jne 0x4c3366
cmp byte [esp + 0x38], 0
jne 0x4c3884
mov byte [esp + 0x38], 1
jmp 0x4c3366
add edx, eax
mov eax, dword [edi + 0x28]
mov dword [edi + 0x2c], ebx
sar edx, 1
mov word [edi + 2], dx
movzx edx, word [ebx]
or dx, word [eax]
and edx, 3
je 0x4c36dc
or byte [edi], 1
mov edx, dword [ebx + 0x1c]
mov eax, dword [eax + 0x1c]
cmp edx, eax
jle 0x4c3735
mov ecx, edx
sub ecx, eax
mov word [edi + 4], ax
mov word [edi + 6], dx
mov word [edi + 8], cx
xor edi, edi
cmp ebx, dword [esp + 0x28]
jne 0x4c3578
cmp byte [esp + 0x38], 0
jne 0x4c3923
mov byte [esp + 0x38], 1
jmp 0x4c3578
jge 0x4c4393
mov ecx, eax
mov esi, edx
sub ecx, edx
mov edx, eax
mov eax, esi
jmp 0x4c368e
jge 0x4c439c
mov ecx, eax
mov esi, edx
sub ecx, edx
mov edx, eax
mov eax, esi
jmp 0x4c36ea
cmp eax, 0x2aaaaa9
jg 0x4c3843
mov edx, eax
sar edx, 2
lea ebp, [eax + edx + 4]
cmp ebp, 0x2aaaaaa
jg 0x4c3870
cmp eax, ebp
jg 0x4c3870
lea edi, [esp + 0x6c]
mov dword [esp + 0x14], edi
mov edi, dword [esp + 0xc0]
mov edx, dword [edi + 0x34]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 0xc], ebp
mov dword [esp + 4], 0x30
mov dword [esp + 0x10], edx
mov dword [esp], eax
call sym._ft_mem_realloc
mov edx, dword [esp + 0x6c]
mov edi, dword [esp + 0xc0]
test edx, edx
mov dword [edi + 0x34], eax
jne 0x4c3860
mov dword [edi + 0x30], ebp
mov edx, dword [edi + 0x2c]
jmp 0x4c33aa
cmp eax, 0x2aaaaa9
jg 0x4c3843
mov edx, eax
sar edx, 2
lea ebp, [eax + edx + 4]
cmp ebp, 0x2aaaaaa
jg 0x4c387a
cmp eax, ebp
jg 0x4c387a
lea edi, [esp + 0x6c]
mov dword [esp + 0x14], edi
mov edi, dword [esp + 0xc0]
mov edx, dword [edi + 0x50]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x40]
mov dword [esp + 0xc], ebp
mov dword [esp + 4], 0x30
mov dword [esp + 0x10], edx
mov dword [esp], eax
call sym._ft_mem_realloc
mov edx, dword [esp + 0x6c]
mov edi, dword [esp + 0xc0]
test edx, edx
mov dword [edi + 0x50], eax
jne 0x4c3860
mov dword [edi + 0x4c], ebp
mov edx, dword [edi + 0x48]
jmp 0x4c35bc
mov dword [esp + 0x44], 0x40
mov eax, dword [esp + 0x44]
add esp, 0xac
pop ebx
pop esi
pop edi
pop ebp
ret
mov dword [esp + 0x44], edx
jmp 0x4c3120
mov ebp, 0x2aaaaaa
jmp 0x4c3778
mov ebp, 0x2aaaaaa
jmp 0x4c37f4
add dword [esp + 0x3c], 4
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x48], eax
ja 0x4c32f5
mov edi, dword [esp + 0xc0]
mov eax, dword [esp + 0xc0]
mov edx, dword [edi + 0x2c]
mov eax, dword [eax + 0x34]
lea edi, [edx + edx*2]
shl edi, 4
add edi, eax
cmp eax, edi
jb 0x4c38eb
jmp 0x4c3a58
cmp ecx, esi
jle 0x4c38cc
sub ecx, esi
sar ecx, 1
add word [eax + 8], cx
mov ecx, dword [ebx + 0x20]
mov ecx, dword [ecx + 0x1c]
cmp edx, ecx
jge 0x4c38e0
sub ecx, edx
mov edx, ecx
sar edx, 1
add word [eax + 8], dx
add eax, 0x30
cmp edi, eax
jbe 0x4c3a58
mov esi, dword [eax + 0x28]
mov ebx, dword [eax + 0x2c]
mov ecx, dword [esi + 0x1c]
mov esi, dword [esi + 0x24]
mov edx, dword [ebx + 0x1c]
mov esi, dword [esi + 0x1c]
cmp ecx, edx
jl 0x4c38c0
cmp ecx, esi
jge 0x4c390f
sub esi, ecx
mov ecx, esi
sar ecx, 1
add word [eax + 8], cx
mov ecx, dword [ebx + 0x20]
mov ecx, dword [ecx + 0x1c]
cmp edx, ecx
jle 0x4c38e0
sub edx, ecx
sar edx, 1
add word [eax + 8], dx
jmp 0x4c38e0
add dword [esp + 0x3c], 4
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x48], eax
ja 0x4c3501
mov edi, dword [esp + 0xc0]
mov eax, dword [esp + 0xc0]
mov edx, dword [edi + 0x48]
mov eax, dword [eax + 0x50]
lea edi, [edx + edx*2]
shl edi, 4
add edi, eax
cmp eax, edi
jb 0x4c398b
jmp 0x4c3a9e
cmp ecx, esi
jle 0x4c396c
sub ecx, esi
sar ecx, 1
add word [eax + 8], cx
mov ecx, dword [ebx + 0x20]
mov ecx, dword [ecx + 0x1c]
cmp edx, ecx
jge 0x4c3980
sub ecx, edx
mov edx, ecx
sar edx, 1
add word [eax + 8], dx
add eax, 0x30
cmp edi, eax
jbe 0x4c3a9e
mov esi, dword [eax + 0x28]
mov ebx, dword [eax + 0x2c]
mov ecx, dword [esi + 0x1c]
mov esi, dword [esi + 0x24]
mov edx, dword [ebx + 0x1c]
mov esi, dword [esi + 0x1c]
cmp ecx, edx
jl 0x4c3960
cmp ecx, esi
jge 0x4c39af
sub esi, ecx
mov ecx, esi
sar ecx, 1
add word [eax + 8], cx
mov ecx, dword [ebx + 0x20]
mov ecx, dword [ecx + 0x1c]
cmp edx, ecx
jle 0x4c3980
sub edx, ecx
sar edx, 1
add word [eax + 8], dx
jmp 0x4c3980
mov eax, dword [esp + 0x28]
movsx eax, byte [eax + 3]
cdq
xor eax, edx
sub eax, edx
cmp dword [esp + 0x34], eax
jne 0x4c3319
mov edx, dword [esp + 0x34]
mov ebx, dword [esp + 0x28]
jmp 0x4c39ec
cmp ebx, ecx
je 0x4c3319
mov ecx, dword [ecx + 0x24]
movsx eax, byte [ecx + 3]
mov esi, eax
sar esi, 0x1f
xor eax, esi
sub eax, esi
cmp edx, eax
je 0x4c39e4
mov eax, dword [ecx + 0x20]
mov dword [esp + 0x28], eax
jmp 0x4c3319
movsx edx, byte [ebx + 3]
mov ecx, edx
sar ecx, 0x1f
xor edx, ecx
sub edx, ecx
cmp dword [esp + 0x34], edx
jne 0x4c352b
mov ecx, dword [esp + 0x34]
jmp 0x4c3a38
cmp ebx, eax
je 0x4c352b
mov eax, dword [eax + 0x24]
movsx edx, byte [eax + 3]
mov esi, edx
sar esi, 0x1f
xor edx, esi
sub edx, esi
cmp ecx, edx
je 0x4c3a30
mov eax, dword [eax + 0x20]
mov dword [esp + 0x28], eax
jmp 0x4c352b
mov eax, dword [esp + 0xc8]
mov edx, dword [esp + 0x4c]
mov dword [esp], 0
lea ecx, [eax + 0x38]
mov eax, dword [esp + 0xc0]
call sym._af_latin_hints_link_segments
mov eax, dword [esp + 0xc0]
xor edx, edx
call sym._af_latin_hints_compute_edges
test eax, eax
jne 0x4c3114
mov eax, dword [esp + 0xc0]
mov edx, dword [eax + 0x64]
jmp 0x4c2ffc
mov eax, dword [esp + 0xc8]
mov edx, dword [esp + 0x4c]
mov dword [esp], 1
lea ecx, [eax + 0x528]
mov eax, dword [esp + 0xc0]
call sym._af_latin_hints_link_segments
mov eax, dword [esp + 0xc0]
mov edx, 1
call sym._af_latin_hints_compute_edges
test eax, eax
jne 0x4c3114
mov eax, dword [esp + 0xc0]
mov edi, dword [esp + 0xc8]
mov ebp, dword [eax + 0x5c]
mov eax, dword [eax + 0x54]
mov edi, dword [edi + 0x51c]
lea eax, [eax + eax*2]
mov dword [esp + 0x34], edi
shl eax, 4
add eax, ebp
cmp ebp, eax
mov dword [esp + 0x48], eax
jae 0x4c3cc3
lea esi, [esi]
mov eax, dword [esp + 0xc8]
mov eax, dword [eax + 0x28]
mov dword [esp + 0x28], eax
mov eax, 0xcccccccd
mul dword [esp + 0x28]
mov eax, edx
mov edx, dword [esp + 0x34]
shr eax, 5
imul edx
mov ecx, edx
sar ecx, 0x1f
add ecx, 0x8000
add eax, ecx
adc edx, 0
shr eax, 0x10
shl edx, 0x10
add eax, edx
mov edi, 0x20
cmp eax, 0x20
cmovg eax, edi
mov dword [esp + 0x30], eax
mov eax, dword [esp + 0xc8]
mov eax, dword [eax + 0x5f4]
test eax, eax
je 0x4c3cb6
imul eax, eax, 0x1c
mov ebx, dword [esp + 0xc8]
mov edi, dword [esp + 0xc8]
mov byte [esp + 0x40], 0
mov dword [esp + 0x3c], 0
lea eax, [ebx + eax + 0x604]
add edi, 0x604
mov dword [esp + 0x28], eax
jmp 0x4c3bb1
test bl, bl
jne 0x4c3be3
add edi, 0x1c
cmp edi, dword [esp + 0x28]
je 0x4c3ca0
mov ebx, dword [edi + 0xc]
test bl, 1
je 0x4c3ba4
mov esi, ebx
shr ebx, 2
shr esi, 1
and ebx, 1
mov eax, esi
mov esi, dword [esp + 0xc0]
and eax, 1
mov edx, eax
mov byte [esp + 0x2c], al
movsx eax, byte [ebp + 0xd]
cmp eax, dword [esi + 0x60]
sete al
cmp dl, al
je 0x4c3ba0
movsx esi, word [ebp]
mov eax, dword [edi - 0xc]
mov edx, eax
mov dword [esp + 0x38], eax
mov eax, esi
sub eax, edx
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
imul edx
mov ecx, edx
sar ecx, 0x1f
add ecx, 0x8000
add eax, ecx
adc edx, 0
shr eax, 0x10
shl edx, 0x10
add eax, edx
cmp eax, dword [esp + 0x30]
jge 0x4c3c2c
lea edx, [edi - 0xc]
mov byte [esp + 0x40], bl
mov dword [esp + 0x30], eax
mov dword [esp + 0x3c], edx
test byte [ebp + 0xc], 1
je 0x4c3ba4
test eax, eax
setne al
cmp bl, al
jae 0x4c3ba4
cmp esi, dword [esp + 0x38]
setl al
cmp byte [esp + 0x2c], al
je 0x4c3ba4
mov eax, esi
sub eax, dword [edi]
cdq
xor eax, edx
sub eax, edx
mov edx, dword [esp + 0x34]
imul edx
mov ecx, edx
sar ecx, 0x1f
add ecx, 0x8000
add eax, ecx
adc edx, 0
shr eax, 0x10
shl edx, 0x10
add eax, edx
cmp eax, dword [esp + 0x30]
jge 0x4c3ba4
mov dword [esp + 0x3c], edi
add edi, 0x1c
cmp edi, dword [esp + 0x28]
mov dword [esp + 0x30], eax
mov byte [esp + 0x40], 0
jne 0x4c3bb1
nop
mov eax, dword [esp + 0x3c]
test eax, eax
je 0x4c3cb6
cmp byte [esp + 0x40], 0
mov dword [ebp + 0x14], eax
je 0x4c3cb6
or byte [ebp + 0xc], 8
add ebp, 0x30
cmp dword [esp + 0x48], ebp
ja 0x4c3b10
mov eax, dword [esp + 0xc0]
mov edx, dword [eax + 0x64]
jmp 0x4c3007
test dl, 1
jne 0x4c31c4
mov eax, dword [esp + 0xc0]
mov dword [esp + 0x30], 0
mov dword [esp + 0x34], 0
mov eax, dword [eax + 0x40]
mov ebx, eax
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0xc0]
mov eax, dword [eax + 0x38]
lea eax, [eax + eax*2]
shl eax, 4
lea esi, [ebx + eax]
mov dword [esp + 0x50], eax
cmp ebx, esi
mov dword [esp + 0x3c], esi
jae 0x4c3d7b
mov ebx, dword [esp + 0x2c]
mov dword [esp + 0x4c], 0
mov dword [esp + 0x5c], edi
jmp 0x4c3d5d
mov edi, dword [eax + 0x14]
test edi, edi
je 0x4c40ca
mov ecx, eax
mov edx, dword [esp + 0x30]
mov eax, dword [esp + 0xc0]
mov dword [esp], ebx
call sym._af_latin_align_linked_edge
or byte [ebx + 0xc], 4
add ebx, 0x30
cmp ebx, dword [esp + 0x3c]
jae 0x4c3f5a
movzx eax, byte [ebx + 0xc]
test al, 4
mov byte [esp + 0x40], al
jne 0x4c3d50
mov eax, dword [ebx + 0x18]
test eax, eax
mov dword [esp + 0x38], eax
jne 0x4c3d2c
add dword [esp + 0x4c], 1
jmp 0x4c3d50
sar eax, 4
mov ebp, 1
mov dword [esp + 0x30], edi
imul edx, eax, 0xaaaaaaab
mov dword [esp + 0x34], edi
cmp edx, 6
sete al
cmp edx, 0xc
sete byte [esp + 0x38]
je 0x4c40ab
test al, al
jne 0x4c401b
mov eax, ebp
test al, al
je 0x4c3ff8
mov ebx, dword [esp + 0x2c]
cmp dword [esp + 0x3c], ebx
jbe 0x4c313b
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x40], edi
mov edi, dword [esp + 0x3c]
lea ebp, [eax + 0x30]
movzx eax, byte [ebp - 0x24]
lea ebx, [ebp - 0x30]
test al, 4
mov byte [esp + 0x38], al
jne 0x4c312f
mov ecx, dword [ebp - 0x14]
test ecx, ecx
je 0x4c3e4e
mov esi, dword [ecx + 4]
mov eax, dword [ebp - 0x2c]
mov edx, esi
mov dword [esp + 0x3c], eax
sub edx, eax
mov eax, edx
cdq
xor eax, edx
sub eax, edx
cmp eax, 0x4f
jg 0x4c3e4e
mov eax, dword [esp + 0x3c]
movzx edx, byte [esp + 0x38]
sub eax, esi
add eax, dword [ecx + 8]
mov dword [ebp - 0x28], eax
or edx, 4
cmp dword [esp + 0x2c], ebx
mov byte [ebp - 0x24], dl
jae 0x4c3e31
mov edx, dword [ebp - 0x58]
cmp edx, eax
jle 0x4c3e31
mov dword [ebp - 0x28], edx
mov eax, edx
cmp edi, ebp
jbe 0x4c3137
test byte [ebp + 0xc], 4
je 0x4c3e49
mov edx, dword [ebp + 8]
cmp edx, eax
jge 0x4c3e49
mov dword [ebp - 0x28], edx
add ebp, 0x30
jmp 0x4c3dd4
mov eax, dword [esp + 0x34]
test eax, eax
je 0x4c3ee3
lea eax, [ebp - 0x60]
cmp dword [esp + 0x2c], eax
ja 0x4c3e83
test byte [ebp - 0x54], 4
movzx edx, byte [esp + 0x38]
je 0x4c3e76
jmp 0x4c3e83
test byte [eax + 0xc], 4
jne 0x4c3e7f
sub eax, 0x30
cmp eax, dword [esp + 0x2c]
jae 0x4c3e70
mov byte [esp + 0x38], dl
cmp edi, ebp
jbe 0x4c3efd
test byte [ebp + 0xc], 4
mov ecx, ebp
jne 0x4c3eb1
movzx edx, byte [esp + 0x38]
jmp 0x4c3ea6
test byte [ecx + 0xc], 4
jne 0x4c3ead
add ecx, 0x30
cmp ecx, edi
jb 0x4c3ea0
mov byte [esp + 0x38], dl
cmp eax, dword [esp + 0x2c]
jb 0x4c3efd
cmp eax, ebx
jae 0x4c3efd
cmp edi, ecx
jbe 0x4c3efd
cmp ecx, ebx
jbe 0x4c3efd
mov esi, dword [ecx + 4]
mov edx, esi
mov dword [esp + 0x3c], esi
mov esi, dword [eax + 4]
cmp edx, esi
jne 0x4c3f1d
mov eax, dword [eax + 8]
movzx edx, byte [esp + 0x38]
mov dword [ebp - 0x28], eax
jmp 0x4c3e19
mov eax, dword [ebp - 0x2c]
mov dword [esp + 0x34], ebx
movzx edx, byte [esp + 0x38]
add eax, 0x20
and eax, 0xffffffc0
mov dword [ebp - 0x28], eax
jmp 0x4c3e19
mov esi, dword [esp + 0x34]
mov eax, dword [ebp - 0x2c]
movzx edx, byte [esp + 0x38]
sub eax, dword [esi + 4]
add eax, 0x10
and eax, 0xffffffe0
add eax, dword [esi + 8]
mov dword [ebp - 0x28], eax
jmp 0x4c3e19
mov edx, dword [eax + 8]
mov eax, dword [esp + 0x3c]
sub eax, esi
mov dword [esp + 0x38], edx
mov dword [esp + 8], eax
mov eax, dword [ecx + 8]
sub eax, edx
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x2c]
sub eax, esi
mov dword [esp], eax
call sym._FT_MulDiv
mov edx, dword [esp + 0x38]
add eax, edx
movzx edx, byte [ebp - 0x24]
mov dword [ebp - 0x28], eax
mov byte [esp + 0x38], dl
jmp 0x4c3e19
mov edx, dword [esp + 0x34]
mov ecx, dword [esp + 0x4c]
mov edi, dword [esp + 0x5c]
test edx, edx
sete dl
test ecx, ecx
setne al
or edx, eax
mov ebp, edx
mov edx, dword [esp + 0x50]
sar edx, 4
imul edx, edx, 0xaaaaaaab
test edi, edi
je 0x4c3d91
mov eax, ebp
test al, al
je 0x4c3f9d
mov ebx, dword [esp + 0x2c]
cmp dword [esp + 0x3c], ebx
ja 0x4c3dc5
imul eax, dword [esp + 0x30], 0x1c
mov ebx, dword [esp + 0xc0]
lea eax, [ebx + eax + 0x20]
mov edx, dword [eax + 0x14]
mov eax, dword [eax + 0xc]
lea eax, [eax + eax*2]
shl eax, 4
add eax, edx
cmp eax, edx
jbe 0x4c3195
mov esi, dword [edx + 0xc]
test esi, esi
je 0x4c3fec
mov ecx, dword [edx + 0x28]
mov ebx, dword [edx + 0x2c]
mov esi, dword [esi + 8]
or word [ecx], 8
cmp ecx, ebx
mov dword [ecx + 0x14], esi
je 0x4c3fec
mov ecx, dword [ecx + 0x20]
or word [ecx], 8
cmp ebx, ecx
mov dword [ecx + 0x14], esi
jne 0x4c3fde
add edx, 0x30
cmp edx, eax
jb 0x4c3fc3
jmp 0x4c3195
imul eax, dword [esp + 0x30], 0x1c
mov ebx, dword [esp + 0xc0]
lea eax, [ebx + eax + 0x20]
mov edx, dword [eax + 0x14]
mov eax, dword [eax + 0xc]
lea eax, [eax + eax*2]
shl eax, 4
add eax, edx
jmp 0x4c3161
mov esi, dword [esp + 0x2c]
mov eax, esi
lea ebx, [esi + 0x60]
add eax, 0xc0
mov edx, dword [ebx + 4]
mov ecx, edx
sub ecx, dword [esi + 4]
add edx, ecx
sub edx, dword [eax + 4]
mov ecx, edx
sar ecx, 0x1f
xor edx, ecx
sub edx, ecx
cmp edx, 7
jg 0x4c3dad
mov edx, dword [ebx + 8]
mov ecx, dword [esi + 8]
neg edx
lea ecx, [ecx + edx*2]
mov edx, dword [eax + 8]
add edx, ecx
neg ecx
mov dword [eax + 8], ecx
mov ecx, dword [eax + 0x18]
test ecx, ecx
je 0x4c408b
sub dword [ecx + 8], edx
cmp byte [esp + 0x38], 0
je 0x4c407e
mov ebx, dword [esp + 0x2c]
sub dword [ebx + 0x188], edx
sub dword [ebx + 0x218], edx
or byte [eax + 0xc], 4
or byte [ecx + 0xc], 4
jmp 0x4c3dad
cmp byte [esp + 0x38], 0
je 0x4c40a2
mov ebx, dword [esp + 0x2c]
sub dword [ebx + 0x188], edx
sub dword [ebx + 0x218], edx
or byte [eax + 0xc], 4
jmp 0x4c3dad
test al, al
jne 0x4c401b
mov eax, dword [esp + 0x2c]
lea esi, [eax + 0x30]
lea ebx, [eax + 0xf0]
add eax, 0x1b0
jmp 0x4c4029
mov esi, dword [esp + 0x34]
test esi, esi
je 0x4c4203
mov eax, dword [ebx + 4]
mov edi, dword [esp + 0x34]
mov ecx, dword [esp + 0x38]
mov edx, eax
sub edx, dword [edi + 4]
add edx, dword [edi + 8]
mov edi, dword [ecx + 4]
sub edi, eax
mov eax, edi
mov esi, edi
mov dword [esp + 0x48], edi
sar eax, 1
mov ebp, edx
lea edi, [edx + eax]
movzx eax, byte [ecx + 0xc]
movzx ecx, al
mov eax, dword [esp + 0xc0]
mov byte [esp + 0x54], cl
mov edx, dword [eax + 0x6c]
mov eax, dword [eax + 0x68]
mov dword [esp + 8], ecx
movzx ecx, byte [esp + 0x40]
mov dword [esp], esi
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x30]
call sym._af_latin_compute_stem_width.isra.3
test byte [esp + 0x54], 4
je 0x4c4172
mov edi, dword [esp + 0x38]
mov edi, dword [edi + 8]
sub edi, eax
mov dword [ebx + 8], edi
movzx eax, byte [esp + 0x40]
or eax, 4
mov byte [ebx + 0xc], al
mov eax, dword [esp + 0x38]
or byte [eax + 0xc], 4
cmp dword [esp + 0x2c], ebx
jae 0x4c3d50
mov eax, dword [ebx - 0x28]
cmp dword [ebx + 8], eax
jge 0x4c3d50
mov dword [ebx + 8], eax
jmp 0x4c3d50
cmp eax, 0x5f
jg 0x4c42ef
lea ecx, [edi + 0x20]
mov ebp, 0x20
mov esi, 0x1a
mov edx, 0x26
and ecx, 0xffffffc0
cmp eax, 0x41
cmovl esi, ebp
mov dword [esp + 0x48], ecx
mov ecx, esi
mov esi, 0x20
cmovl edx, esi
mov esi, dword [esp + 0x48]
mov ebp, edx
mov dword [esp + 0x54], edx
sub ebp, esi
mov edx, ebp
mov ebp, ecx
add edx, edi
add ebp, esi
mov esi, edx
sub edi, ebp
sar esi, 0x1f
xor edx, esi
mov ecx, esi
mov esi, edx
mov edx, edi
sar edx, 0x1f
sub esi, ecx
xor edi, edx
mov ecx, edx
mov edx, edi
sub edx, ecx
mov ecx, dword [esp + 0x48]
sub ecx, dword [esp + 0x54]
cmp esi, edx
mov edx, eax
cmovge ecx, ebp
shr edx, 0x1f
add eax, edx
mov edi, ecx
mov edx, eax
sar eax, 1
sar edx, 1
add eax, ecx
sub edi, edx
mov dword [ebx + 8], edi
mov edi, dword [esp + 0x38]
mov dword [edi + 8], eax
jmp 0x4c4141
mov esi, dword [esp + 0x38]
mov edi, dword [ebx + 4]
mov eax, dword [esi + 4]
movzx ecx, byte [esi + 0xc]
sub eax, edi
mov ebp, eax
mov eax, dword [esp + 0xc0]
mov edx, dword [eax + 0x6c]
mov eax, dword [eax + 0x68]
mov dword [esp + 8], ecx
movzx ecx, byte [esp + 0x40]
mov dword [esp], ebp
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x30]
call sym._af_latin_compute_stem_width.isra.3
cmp eax, 0x40
jle 0x4c4358
cmp eax, 0x5f
jg 0x4c434a
mov dword [esp + 0x34], 0x1a
mov esi, 0x26
mov edx, ebp
mov ebp, esi
sar edx, 1
add edx, edi
lea ecx, [edx + 0x20]
and ecx, 0xffffffc0
mov edi, ecx
mov ecx, esi
mov esi, dword [esp + 0x34]
sub ecx, edi
mov dword [esp + 0x48], edi
add ecx, edx
add esi, edi
sub edx, esi
mov edi, esi
mov esi, ecx
sar esi, 0x1f
mov dword [esp + 0x34], edx
xor ecx, esi
mov edx, esi
mov esi, ecx
sub esi, edx
mov edx, dword [esp + 0x34]
sar edx, 0x1f
mov ecx, edx
mov edx, dword [esp + 0x34]
xor edx, ecx
sub edx, ecx
mov ecx, dword [esp + 0x48]
sub ecx, ebp
cmp esi, edx
mov edx, eax
cmovl edi, ecx
shr edx, 0x1f
add edx, eax
sar edx, 1
sub edi, edx
mov dword [ebx + 8], edi
add eax, edi
mov edi, dword [esp + 0x38]
mov dword [edi + 8], eax
movzx eax, byte [esp + 0x40]
mov edx, dword [esp + 0x30]
mov ecx, ebx
or eax, 4
mov byte [ebx + 0xc], al
mov eax, dword [esp + 0x38]
mov dword [esp], eax
mov eax, dword [esp + 0xc0]
call sym._af_latin_align_linked_edge
mov dword [esp + 0x34], ebx
jmp 0x4c3d50
lea edx, [ebp + 0x20]
mov esi, ebp
mov ebp, dword [esp + 0x48]
and edx, 0xffffffc0
mov ecx, edx
mov edx, eax
sar edx, 1
mov dword [esp + 0x54], ecx
add ecx, edx
sub ecx, edi
mov dword [esp + 0x58], ecx
lea ecx, [esi + ebp + 0x20]
and ecx, 0xffffffc0
mov ebp, ecx
sub ebp, eax
add edx, ebp
sub edx, edi
mov edi, dword [esp + 0x58]
mov esi, edx
sar esi, 0x1f
mov ecx, edi
xor edx, esi
sar ecx, 0x1f
sub edx, esi
xor edi, ecx
sub edi, ecx
cmp edi, edx
cmovl ebp, dword [esp + 0x54]
mov edi, dword [esp + 0x38]
add eax, ebp
mov dword [ebx + 8], ebp
mov dword [edi + 8], eax
jmp 0x4c4141
lea eax, [edi + 0x20]
and eax, 0xffffffc0
mov dword [ebx + 8], eax
jmp 0x4c42c2
mov dword [esp + 0x34], 0x20
mov esi, 0x20
jmp 0x4c425a
cmp byte [esp + 0x38], 0
je 0x4c3102
mov eax, dword [ebx + 0x14]
test eax, eax
je 0x4c3102
mov eax, dword [eax + 8]
mov ecx, ebx
mov ebx, ebp
or byte [ecx + 0xc], 4
mov dword [ecx + 8], eax
jmp 0x4c30d6
mov eax, edx
xor ecx, ecx
jmp 0x4c368e
mov eax, edx
xor ecx, ecx
jmp 0x4c36ea
and eax, 0xfffffff7
mov dword [ebp + 0x14], 0
mov byte [ebp + 0xc], al
jmp 0x4c4375
test cl, cl
jne 0x4c30ac
mov ecx, ebp
jmp 0x4c30c8