§
    �ÊiúÎ  ã            	       óh  — d dl mZ d dlmZmZ ddlmZ d dlmZ d dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZmZmZmZ  ej        e¦  «        Zd	Z	 d dlZd
Zn# e$ r Y nw xY wee› d�         Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  e! e
j"        dd ¦  «        ¦  «        dk    sJ ‚ e	j	        d¦  «        j#        dk    s
J d¦   «         ‚ G d„ de¦  «        Z$ G d„ de¦  «        Z% G d„ de¦  «        Z& G d„ de¦  «        Z'd„ Z(d „ Z)d!„ Z*d"„ Z+ G d#„ d$e¦  «        Z, G d%„ d&e,¦  «        Z- G d'„ d(e-¦  «        Z.e-e.d)œZ/d*„ Z0 e¦   «         d5d+e,d,ee1         d-ee2         fd.„¦   «         Z3g d/¢Z4d0„ Z5 e5¦   «         Z6 G d1„ d2e¦  «        Z7 G d3„ d4e¦  «        Z8dS )6é    )ÚOPTIONS)ÚTagÚ	bytesjoiné   )ÚDefaultTable)ÚIntEnumN)Ú	lru_cache)ÚIteratorÚ
NamedTupleÚOptionalÚTupleFTz:USE_HARFBUZZ_REPACKERc                   ó   — e Zd Zd„ Zd„ ZdS )ÚOverflowErrorRecordc                 óˆ   — |d         | _         |d         | _        |d         | _        |d         | _        |d         | _        d S )Nr   r   é   é   é   )Ú	tableTypeÚLookupListIndexÚSubTableIndexÚitemNameÚ	itemIndex)ÚselfÚoverflowTuples     úg/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/fontTools/ttLib/tables/otBase.pyÚ__init__zOverflowErrorRecord.__init__   sD   € Ø& qÔ)ˆŒØ,¨QÔ/ˆÔØ*¨1Ô-ˆÔØ% aÔ(ˆŒØ& qÔ)ˆŒˆˆó    c                 ód   — t          | j        d| j        d| j        d| j        d| j        f	¦  «        S )NzLookupIndex:zSubTableIndex:z	ItemName:z
ItemIndex:)Ústrr   r   r   r   r   ©r   s    r   Ú__repr__zOverflowErrorRecord.__repr__!   s@   € Ýà”ØØÔ$Ø ØÔ"ØØ”ØØ”ð
ñ
ô 
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__r   r!   © r   r   r   r      s2   € € € € € ð*ð *ð *ð
ð 
ð 
ð 
ð 
r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚOTLOffsetOverflowErrorc                 ó   — || _         d S ©N©Úvalue)r   ÚoverflowErrorRecords     r   r   zOTLOffsetOverflowError.__init__2   s   € Ø(ˆŒ
ˆ
ˆ
r   c                 ó*   — t          | j        ¦  «        S r)   )Úreprr+   r    s    r   Ú__str__zOTLOffsetOverflowError.__str__5   s   € Ý�D”JÑÔÐr   N)r"   r#   r$   r   r/   r%   r   r   r'   r'   1   s2   € € € € € ð)ð )ð )ð ð  ð  ð  ð  r   r'   c                   ó   — e Zd ZdZdZdZdS )ÚRepackerStater   r   r   N)r"   r#   r$   ÚPURE_FTÚHB_FTÚFT_FALLBACKr%   r   r   r1   r1   9   s#   € € € € € ð €Gð €Eð €K€K€Kr   r1   c                   óD   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd
„ZdS )ÚBaseTTXConverterzÒGeneric base class for TTX table converters. It functions as an
    adapter between the TTX (ttLib actually) table model and the model
    we use for OpenType tables, which is necessarily subtly different.
    c                 ó¼   — ddl m} t          || j        ¬¦  «        }t	          || j        ¦  «        } |¦   «         | _        | j                             ||¦  «         dS )zFCreate an object from the binary data. Called automatically on access.r   ©ÚotTables©ÚtableTagN)Ú r9   ÚOTTableReaderr;   ÚgetattrÚtableÚ	decompile)r   ÚdataÚfontr9   ÚreaderÚ
tableClasss         r   r@   zBaseTTXConverter.decompileT   sd   € àÐÐÐÐÐå˜t¨d¬mÐ<Ñ<Ô<ˆÝ˜X t¤}Ñ5Ô5ˆ
Ø�Z‘\”\ˆŒ
ØŒ
×Ò˜V TÑ*Ô*Ð*Ð*Ð*r   c                 óâ  — d}|j         t                   }| j        dv rc|du r!t                               d| j        ¦  «         n>t
          s7|du rt          d¦  «        ‚|�J ‚t                               d| j        ¦  «         |dv rt
          r| j        dv rt          j        }nt          j	        }d}d}	 	 t          | j        ¬	¦  «        }| j                             ||¦  «         |t          j        k    r|                      ||¦  «        S |t          j	        k    r|                      |¦  «        S |t          j        k    r;|                      |¦  «         t                               d
¦  «         t          j        }nt# t           $ rg}d}|                      |||¦  «        }	|j        }|	rY d}~Œú|t          j        u r't                               d¦  «         t          j        }n‚ Y d}~nd}~ww xY w�Œ>)z=Compiles the table into binary. Called automatically on save.N)ÚGSUBÚGPOSFz>hb.repack disabled, compiling '%s' with pure-python serializerTzNo module named 'uharfbuzz'z?uharfbuzz not found, compiling '%s' with pure-python serializer)NTr:   zXRe-enabling sharing between extensions and switching back to harfbuzz+fontTools packing.zrHarfbuzz packing out of resolutions, disabling sharing between extensions and switching to fontTools only packing.)ÚcfgÚUSE_HARFBUZZ_REPACKERr;   ÚlogÚdebugÚhave_uharfbuzzÚImportErrorr1   r3   r2   ÚOTTableWriterr?   ÚcompileÚtryPackingHarfbuzzÚtryPackingFontToolsr4   r'   ÚtryResolveOverflowr+   )
r   rB   ÚoverflowRecordÚuse_hb_repackÚstateÚhb_first_error_loggedÚlastOverflowRecordÚwriterÚeÚoks
             r   rO   zBaseTTXConverter.compile]   sJ  € ð. ˆð œÕ!6Ô7ˆØŒ=Ð,Ð,Ð,Ø Ð%Ð%Ý—	’	ØTØ”Mñô ð ð õ $ð Ø  DÐ(Ð(Ý%Ð&CÑDÔDÐDà(Ð0Ð0Ð0Ý—I’IØYØœñô ð ð ˜\Ð)Ð)Ýð *à”Ð!1Ð1Ð1å!Ô'ˆEˆEå!Ô)ˆEà %ÐØ!Ðð"	ð!Ý&°´Ð>Ñ>Ô>�Ø”
×"Ò" 6¨4Ñ0Ô0Ð0Ø�MÔ/Ò/Ð/Ø×2Ò2°6Ð;PÑQÔQÐQØ�mÔ3Ò3Ð3Ø×3Ò3°FÑ;Ô;Ð;Ø�mÔ7Ò7Ð7ð ×,Ò,¨VÑ4Ô4Ð4Ý—I’Ið6ñô ð õ *Ô/�Eøøå)ð ð ð Ø(,Ð%Ø×,Ò,¨T°1Ð6HÑIÔI�Ø%&¤WÐ"àð Ø�H�H�H�Hà�MÔ/Ð/Ð/Ý—I’Ið?ñô ð õ *Ô5�E�Eàð �E�E�E�Eøøøøðøøøñ'"	s,   Â4AE; Ä
$E; Ä/AE; Å;
G,Æ"G'Æ,6G'Ç'G,c                 ó   — 	 t                                d| j        ¦  «         |                     | j        ¦  «        S # t          t
          t          j        f$ ru}|sSt          |¦  «        j	        › }t          |¦  «        dk    r|d|› �z  }t                                d| j        |¦  «         d}|                     d¬¦  «        cY d }~S d }~ww xY w)Nzserializing '%s' with hb.repackr<   z: z`hb.repack failed to serialize '%s', attempting fonttools resolutions ; the error message was: %sTF)Úremove_duplicate)rJ   rK   r;   ÚgetAllDataUsingHarfbuzzÚ
ValueErrorÚMemoryErrorÚhbÚRepackerErrorÚtyper"   r   ÚwarningÚ
getAllData)r   rX   rV   rY   Ú	error_msgs        r   rP   z#BaseTTXConverter.tryPackingHarfbuzz¸   sè   € ð	=Ý�IŠIÐ7¸¼ÑGÔGÐGØ×1Ò1°$´-Ñ@Ô@Ð@øÝ�K­Ô)9Ð:ð 	=ð 	=ð 	=ð
 )ð 
-Ý# A™wœwÔ/Ð1�	Ý�q‘6”6˜R’<�<Ø  a  Ñ)�IÝ—’ð2à”MØñ	ô ð ð )-Ð%Ø×$Ò$°eÐ$Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<øøøøð!	=øøøs   ‚9< ¼CÁA*CÃCÃCc                 ó*   — |                      ¦   «         S r)   )rd   ©r   rX   s     r   rQ   z$BaseTTXConverter.tryPackingFontToolsÎ   s   € Ø× Ò Ñ"Ô"Ð"r   c                 óè   — d}||j         k    r|S |j         }t                               d|¦  «         |j        €ddlm}  |||¦  «        }nddlm}  |||¦  «        }|r|S ddlm}  |||¦  «        S )Nr   z+Attempting to fix OTLOffsetOverflowError %sr   )ÚfixLookupOverFlows)ÚfixSubTableOverFlows)r+   rJ   Úinfor   r9   ri   rj   )r   rB   rY   rW   rZ   rS   ri   rj   s           r   rR   z#BaseTTXConverter.tryResolveOverflowÑ   s¼   € ØˆØ ¤Ò(Ð(àˆIàœˆÝ�ŠÐ>ÀÑBÔBÐBàÔ"Ð*Ø4Ð4Ð4Ð4Ð4Ð4à#Ð# D¨.Ñ9Ô9ˆBˆBà6Ð6Ð6Ð6Ð6Ð6à%Ð% d¨NÑ;Ô;ˆBàð 	ØˆIð
 	1Ð0Ð0Ð0Ð0Ð0à!Ð! $¨Ñ7Ô7Ð7r   c                 ó<   — | j                              ||¦  «         d S r)   )r?   ÚtoXML2)r   rX   rB   s      r   ÚtoXMLzBaseTTXConverter.toXMLí   s    € ØŒ
×Ò˜& $Ñ'Ô'Ð'Ð'Ð'r   c                 óæ   — ddl m} t          | d¦  «        s$t          || j        ¦  «        } |¦   «         | _        | j                             ||||¦  «         | j                             ¦   «          d S )Nr   r8   r?   )r<   r9   Úhasattrr>   r;   r?   ÚfromXMLÚpopulateDefaults)r   ÚnameÚattrsÚcontentrB   r9   rD   s          r   rq   zBaseTTXConverter.fromXMLð   sz   € ØÐÐÐÐÐå�t˜WÑ%Ô%ð 	&Ý  ¨4¬=Ñ9Ô9ˆJØ#˜™œˆDŒJØŒ
×Ò˜4 ¨°Ñ6Ô6Ð6ØŒ
×#Ò#Ñ%Ô%Ð%Ð%Ð%r   Tc                 ó<   — | j                              |¬¦  «         d S )N)Úrecurse)r?   ÚensureDecompiled)r   rw   s     r   rx   z!BaseTTXConverter.ensureDecompiledù   s!   € ØŒ
×#Ò#¨GÐ#Ñ4Ô4Ð4Ð4Ð4r   N©T)r"   r#   r$   Ú__doc__r@   rO   rP   rQ   rR   rn   rq   rx   r%   r   r   r6   r6   N   sŸ   € € € € € ðð ð
+ð +ð +ðYð Yð Yðv=ð =ð =ð,#ð #ð #ð8ð 8ð 8ð8(ð (ð (ð&ð &ð &ð5ð 5ð 5ð 5ð 5ð 5r   r6   Úir   z#Oops, file a bug against fonttools.c                   ó´   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS ) r=   z5Helper class to retrieve data from an OpenType table.©rA   ÚoffsetÚposÚ
localStater;   Nr   c                 óL   — || _         || _        || _        || _        || _        d S r)   r}   )r   rA   r€   r~   r;   s        r   r   zOTTableReader.__init__  s)   € ØˆŒ	ØˆŒØˆŒØ$ˆŒØ ˆŒˆˆr   c                 ó&   — | xj         |z  c_         d S r)   ©r   ©r   Úcounts     r   ÚadvancezOTTableReader.advance  s   € ØˆŒ�EÑˆŒˆˆr   c                 ó   — || _         d S r)   rƒ   )r   r   s     r   ÚseekzOTTableReader.seek  s   € ØˆŒˆˆr   c                 óv   — |                       | j        | j        | j        | j        ¦  «        }| j        |_        |S r)   )Ú	__class__rA   r€   r~   r;   r   ©r   Úothers     r   ÚcopyzOTTableReader.copy  s/   € Ø—’˜tœy¨$¬/¸4¼;ÈÌÑVÔVˆØ”HˆŒ	Øˆr   c                 ód   — | j         |z   }|                      | j        | j        || j        ¦  «        S r)   )r~   rŠ   rA   r€   r;   )r   r~   s     r   ÚgetSubReaderzOTTableReader.getSubReader  s,   € Ø”˜vÑ%ˆØ�~Š~˜dœi¨¬¸&À$Ä-ÑPÔPÐPr   c                 óz   — | j         }||z   }t          j        d|› �| j        ||…         ¦  «        \  }|| _         |S ©Nú>©r   ÚstructÚunpackrA   )r   ÚtypecodeÚ
staticSizer   Únewposr+   s         r   Ú	readValuezOTTableReader.readValue  sC   € ØŒhˆØ�zÑ!ˆÝ”=  X  °´¸3¸v¸:Ô1FÑGÔG‰ˆØˆŒØˆr   c                 óâ   — | j         }|||z  z   }t          j        || j        ||…         ¦  «        }t          j        dk    r|                     ¦   «          || _         |                     ¦   «         S ©NÚbig)r   ÚarrayrA   ÚsysÚ	byteorderÚbyteswapÚtolist)r   r–   r—   r…   r   r˜   r+   s          r   Ú	readArrayzOTTableReader.readArray$  sf   € ØŒhˆØ�u˜zÑ)Ñ)ˆÝ”˜H d¤i°°F°
Ô&;Ñ<Ô<ˆÝŒ=˜EÒ!Ð!Ø�NŠNÑÔÐØˆŒØ�|Š|‰~Œ~Ðr   c                 ó0   — |                       dd¬¦  «        S )NÚbr   ©r—   ©r™   r    s    r   ÚreadInt8zOTTableReader.readInt8-  ó   € Ø�~Š~˜c¨aˆ~Ñ0Ô0Ð0r   c                 ó2   — |                       dd|¬¦  «        S )Nr¤   r   ©r—   r…   ©r¢   r„   s     r   ÚreadInt8ArrayzOTTableReader.readInt8Array0  ó   € Ø�~Š~˜c¨a°uˆ~Ñ=Ô=Ð=r   c                 ó0   — |                       dd¬¦  «        S )NÚhr   r¥   r¦   r    s    r   Ú	readShortzOTTableReader.readShort3  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )Nr¯   r   rª   r«   r„   s     r   ÚreadShortArrayzOTTableReader.readShortArray6  r­   r   c                 ó0   — |                       dd¬¦  «        S )Nr{   r   r¥   r¦   r    s    r   ÚreadLongzOTTableReader.readLong9  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )Nr{   r   rª   r«   r„   s     r   ÚreadLongArrayzOTTableReader.readLongArray<  r­   r   c                 ó0   — |                       dd¬¦  «        S )NÚBr   r¥   r¦   r    s    r   Ú	readUInt8zOTTableReader.readUInt8?  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )Nr¸   r   rª   r«   r„   s     r   ÚreadUInt8ArrayzOTTableReader.readUInt8ArrayB  r­   r   c                 ó0   — |                       dd¬¦  «        S )NÚHr   r¥   r¦   r    s    r   Ú
readUShortzOTTableReader.readUShortE  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )Nr½   r   rª   r«   r„   s     r   ÚreadUShortArrayzOTTableReader.readUShortArrayH  r­   r   c                 ó0   — |                       dd¬¦  «        S )NÚIr   r¥   r¦   r    s    r   Ú	readULongzOTTableReader.readULongK  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )NrÂ   r   rª   r«   r„   s     r   ÚreadULongArrayzOTTableReader.readULongArrayN  r­   r   c                 óz   — | j         }|dz   }t          j        dd| j        ||…         z   ¦  «        \  }|| _         |S )Nr   z>ló    r“   ©r   r   r˜   r+   s       r   Ú
readUInt24zOTTableReader.readUInt24Q  sA   € ØŒhˆØ�q‘ˆÝ”=  u¨t¬y¸¸V¸Ô/DÑ'DÑEÔE‰ˆØˆŒØˆr   c                 ó:   ‡ — ˆ fd„t          |¦  «        D ¦   «         S )Nc                 ó8   •— g | ]}‰                      ¦   «         ‘ŒS r%   )rÉ   )Ú.0Ú_r   s     €r   ú
<listcomp>z1OTTableReader.readUInt24Array.<locals>.<listcomp>Y  s#   ø€ Ð8Ð8Ð8 a�—’Ñ!Ô!Ð8Ð8Ð8r   )Úranger„   s   ` r   ÚreadUInt24ArrayzOTTableReader.readUInt24ArrayX  s#   ø€ Ø8Ð8Ð8Ð8­5°©<¬<Ð8Ñ8Ô8Ð8r   c                 óž   — | j         }|dz   }t          | j        ||…         ¦  «        }t          |¦  «        dk    s
J |¦   «         ‚|| _         |S ©Nr   )r   r   rA   ÚlenrÈ   s       r   ÚreadTagzOTTableReader.readTag[  sO   € ØŒhˆØ�q‘ˆÝ�D”I˜c &˜jÔ)Ñ*Ô*ˆÝ�5‰zŒz˜QŠˆˆ ‰ŒˆØˆŒØˆr   c                 óJ   — | j         }||z   }| j        ||…         }|| _         |S r)   )r   rA   )r   r…   r   r˜   r+   s        r   ÚreadDatazOTTableReader.readDatac  s.   € ØŒhˆØ�u‘ˆØ”	˜#˜f˜*Ô%ˆØˆŒØˆr   c                 óz   — | j         r| j                              ¦   «         nt          ¦   «         }|||<   || _         d S r)   ©r€   r�   Údict©r   rs   r+   rU   s       r   Ú__setitem__zOTTableReader.__setitem__j  ó9   € Ø*.¬/ÐE�”×$Ò$Ñ&Ô&Ð&½t¹v¼vˆØˆˆd‰ØˆŒˆˆr   c                 ó*   — | j         o| j         |         S r)   ©r€   ©r   rs   s     r   Ú__getitem__zOTTableReader.__getitem__o  s   € ØŒÐ8 4¤?°4Ô#8Ð8r   c                 ó"   — | j         o|| j         v S r)   rÞ   rß   s     r   Ú__contains__zOTTableReader.__contains__r  s   € ØŒÐ: 4¨4¬?Ð#:Ð:r   )Nr   N)r"   r#   r$   rz   Ú	__slots__r   r†   rˆ   r�   r�   r™   r¢   r§   r¬   r°   r²   r´   r¶   r¹   r»   r¾   rÀ   rÃ   rÅ   rÉ   rÐ   rÔ   rÖ   rÛ   rà   râ   r%   r   r   r=   r=     s­  € € € € € Ø?Ð?àC€Ið!ð !ð !ð !ðð ð ðð ð ðð ð ð
Qð Qð Qðð ð ðð ð ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ðð ð ð9ð 9ð 9ðð ð ðð ð ð ð  ð  ð
9ð 9ð 9ð;ð ;ð ;ð ;ð ;r   r=   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚOffsetToWriterc                 ó"   — || _         || _        d S r)   )Ú	subWriterÚ
offsetSize©r   rç   rè   s      r   r   zOffsetToWriter.__init__w  s   € Ø"ˆŒØ$ˆŒˆˆr   c                 ó�   — t          | ¦  «        t          |¦  «        k    rt          S | j        |j        k    o| j        |j        k    S r)   )rb   ÚNotImplementedrç   rè   r‹   s     r   Ú__eq__zOffsetToWriter.__eq__{  s=   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒ~ ¤Ò0ÐX°T´_ÈÔHXÒ5XÐXr   c                 ó8   — t          | j        | j        f¦  «        S r)   )Úhashrç   rè   r    s    r   Ú__hash__zOffsetToWriter.__hash__€  s   € å�T”^ T¤_Ð5Ñ6Ô6Ð6r   N)r"   r#   r$   r   rì   rï   r%   r   r   rå   rå   v  sD   € € € € € ð%ð %ð %ðYð Yð Yð
7ð 7ð 7ð 7ð 7r   rå   c                   óþ   — e Zd ZdZd,d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd-d„Zd„ Zd„ Zd„ Zd.d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Zd!„ Z d"„ Z!d#„ Z"d$„ Z#d%„ Z$d&„ Z%d/d(„Z&d)„ Z'd*„ Z(d+„ Z)dS )0rN   z=Helper class to gather and assemble data for OpenType tables.Nc                 óZ   — g | _         d | _        || _        || _        d | _        d| _        d S )Nú<none>)Úitemsr   r€   r;   Úparentrs   )r   r€   r;   s      r   r   zOTTableWriter.__init__ˆ  s0   € ØˆŒ
ØˆŒØ$ˆŒØ ˆŒØˆŒØˆŒ	ˆ	ˆ	r   c                 óz   — | j         r| j                              ¦   «         nt          ¦   «         }|||<   || _         d S r)   rØ   rÚ   s       r   rÛ   zOTTableWriter.__setitem__�  rÜ   r   c                 ó   — | j         |         S r)   rÞ   rß   s     r   rà   zOTTableWriter.__getitem__•  s   € ØŒ˜tÔ$Ð$r   c                 ó   — | j         |= d S r)   rÞ   rß   s     r   Ú__delitem__zOTTableWriter.__delitem__˜  s   € ØŒO˜DÐ!Ð!Ð!r   c                 ó®   — d}| j         D ]J}t          |d¦  «        r||j        z  }Œt          |d¦  «        r||j        z  }Œ8|t	          |¦  «        z   }ŒK|S )z<Return the length of this table in bytes, without subtables.r   ÚgetCountDatarç   )ró   rp   Úsizerè   rÓ   )r   ÚlÚitems      r   ÚgetDataLengthzOTTableWriter.getDataLength�  sm   € àˆØ”Jð 	"ð 	"ˆDÝ�t˜^Ñ,Ô,ð "Ø�T”Y‘��Ý˜˜{Ñ+Ô+ð "Ø�T”_Ñ$��à�˜D™	œ	‘M��Øˆr   c                 ól  — t          | j        ¦  «        }| j        }t          |¦  «        }t	          |¦  «        D ]ì}||         }t          |d¦  «        rÒ|j        dk    r t          |j        j        |z
  ¦  «        ||<   ŒE|j        dk    r]	 t          |j        j        |z
  ¦  «        ||<   Œq# t          j        $ r* |                      |j        ¦  «        }t          |¦  «        ‚w xY w|j        dk    r t          |j        j        |z
  ¦  «        ||<   ŒØt          |j        ¦  «        ‚Œít!          |¦  «        S )z;Assemble the data for this writer/table, without subtables.rç   r   r   r   )Úlistró   r   rÓ   rÏ   rp   rè   Ú	packULongrç   Ú
packUShortr”   ÚerrorÚgetOverflowErrorRecordr'   Ú
packUInt24r^   r   )r   ró   r   ÚnumItemsr{   rý   r,   s          r   ÚgetDatazOTTableWriter.getData©  sK  € å�T”ZÑ Ô ˆØŒhˆÝ�u‘:”:ˆÝ�x‘”ð 	6ð 	6ˆAØ˜”8ˆDå�t˜[Ñ)Ô)ð 6Ø”? aÒ'Ð'Ý(¨¬Ô);¸cÑ)AÑBÔB�E˜!‘H�HØ”_¨Ò)Ð)ðJÝ#-¨d¬nÔ.@À3Ñ.FÑ#GÔ#G˜˜a™˜øÝ!œ<ð Jð Jð Jà.2×.IÒ.IØ œNñ/ô /Ð+õ 5Ð5HÑIÔIÐIðJøøøð ”_¨Ò)Ð)Ý)¨$¬.Ô*<¸sÑ*BÑCÔC�E˜!‘H�Hå$ T¤_Ñ5Ô5Ð5ð!6õ$ ˜ÑÔÐs   ÂB+Â+9C$c                 ó*  — t          | j        ¦  «        }t          t          t          dœ}t          |¦  «        D ]L\  }}t          |d¦  «        r7|j        |v r ||j                 d¦  «        ||<   Œ8t          |j        ¦  «        ‚ŒMt          |¦  «        S )zFAssemble the data for this writer/table with all offset field set to 0)r   r   r   rç   r   )
r   ró   r  r  r  Ú	enumeraterp   rè   r^   r   )r   ró   Ú	packFuncsr{   rý   s        r   ÚgetDataForHarfbuzzz OTTableWriter.getDataForHarfbuzzÅ  s›   € å�T”ZÑ Ô ˆÝ"¥zµiÐ@Ð@ˆ	Ý  Ñ'Ô'ð 	6ð 	6‰GˆAˆtÝ�t˜[Ñ)Ô)ð 6à”? iÐ/Ð/Ø9˜y¨¬Ô9¸!Ñ<Ô<�E˜!‘H�Hå$ T¤_Ñ5Ô5Ð5ð6õ ˜ÑÔÐr   c                 ó*   — t          | j        ¦  «        S r)   )rî   ró   r    s    r   rï   zOTTableWriter.__hash__Ó  s   € å�D”JÑÔÐr   c                 óH   — |                       |¦  «        }|t          u r|n| S r)   ©rì   rë   ©r   rŒ   Úresults      r   Ú__ne__zOTTableWriter.__ne__×  ó)   € Ø—’˜UÑ#Ô#ˆØ¥>Ð1Ð1ˆvˆv¸6°zÐAr   c                 óp   — t          | ¦  «        t          |¦  «        k    rt          S | j        |j        k    S r)   )rb   rë   ró   r‹   s     r   rì   zOTTableWriter.__eq__Û  s.   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒz˜Uœ[Ò(Ð(r   Fc                 ó´  — t          | d¦  «        }t          | d¦  «        }|r|si }| j        }t          |¦  «        D ]†\  }}t          |d¦  «        r|                     ¦   «         ||<   Œ-t          |d¦  «        rI|j                             ||¬¦  «         |s+|                     |j        |j        ¦  «        ||         _        Œ‡t          |¦  «        | _        d S )NÚ	ExtensionÚ	DontSharerú   rç   ©ÚshareExtension)rp   ró   r	  rú   rç   Ú_doneWritingÚ
setdefaultÚtuple)r   ÚinternedTablesr  ÚisExtensionÚ	dontShareró   r{   rý   s           r   r  zOTTableWriter._doneWritingà  sü   € õ ˜d KÑ0Ô0ˆõ ˜D +Ñ.Ô.ˆ	àð 	 ˜~ð 	 ØˆNà”
ˆÝ  Ñ'Ô'ð 	ð 	‰GˆAˆtÝ�t˜^Ñ,Ô,ð Ø×,Ò,Ñ.Ô.��a‘�Ý˜˜{Ñ+Ô+ð Ø”×+Ò+Ø"°>ð ,ñ ô ð ð !ð Ø)7×)BÒ)BØœ¨¬ñ*ô *�E˜!”HÔ&øõ ˜5‘\”\ˆŒ
ˆ
ˆ
r   c                 ó@  — d|t          | ¦  «        <   t          | j        ¦  «        }t          t	          |¦  «        ¦  «        }|                     ¦   «          t          | d¦  «        }|}|r|€
J d¦   «         ‚|d i }}}d}t          | d¦  «        r�t	          |¦  «        D ]=}	| j        |	         }
t          |
d¦  «        rt          |
j        dd ¦  «        dk    rd} nŒ>t          |
j        ¦  «        |vr|
j         	                    |||¦  «         n	 |D ]v}	| j        |	         }
t          |
d¦  «        sŒ |r!|	d	k    rt          |
j        dd ¦  «        dk    rŒCt          |
j        ¦  «        |vr|
j         	                    |||¦  «         ŒvŒw| 
                    | ¦  «         d S )
NTr  zUProgram or XML editing error. Extension subtables cannot contain extensions subtablesFÚsortCoverageLastrç   rs   ÚCoverager   )ÚidrÓ   ró   r   rÏ   Úreverserp   r>   rç   Ú_gatherTablesÚappend)r   ÚtablesÚ	extTablesÚdoner  ÚiRanger  Ú
selfTablesr   r{   rý   s              r   r$  zOTTableWriter._gatherTables  sÝ  € ð ˆ�R�‰XŒX‰å�t”z‘?”?ˆÝ•e˜H‘o”oÑ&Ô&ˆØ�ŠÑÔÐå˜d KÑ0Ô0ˆàˆ
àð 	:àÐ%Ð%Øfñ &Ô%Ð%à&/°°r˜t�IˆFð !ÐÝ�4Ð+Ñ,Ô,ð 	å˜8‘_”_ð ð �Ø”z !”}�å˜D +Ñ.Ô.ðå ¤°¸Ñ=Ô=ÀÒKÐKà'+Ð$Ø�EøÝ�$”.Ñ!Ô!¨Ð-Ð-Ø”×,Ò,¨V°YÀÑEÔEÐEÐEð àð 	ð 	ˆAØ”:˜a”=ˆDÝ˜4 Ñ-Ô-ð Øð !ðà˜!’V�VÝ˜DœN¨F°DÑ9Ô9¸ZÒGÐGð å�$”.Ñ!Ô!¨Ð-Ð-Ø”×,Ò,¨V°YÀÑEÔEÐEÐEð à×Ò˜$ÑÔÐÐÐr   c                 óì  — g }g }|}|D ]}	|                      dd|	f¦  «         Œd}
d}t          | d¦  «        rŠt          | j        ¦  «        D ]u\  }}t	          |dd ¦  «        dk    r[d}
t          |¦  «        |vr|                     |||||¦  «        x}}n|t          |¦  «                 }|                      |¦  «          nŒvd}d}t          | j        ¦  «        D ]À\  }}t          |d¦  «        r|}n.t          |d¦  «        r||j        z  }Œ3|t          |¦  «        z   }ŒFt          |j	        ¦  «        |vr!|j	                             |||||¦  «        x}}n|t          |j	        ¦  «                 }||j
        |f}|                      |¦  «         ||j
        z  }ŒÁ|                      | ¦  «         |                      ||f¦  «         |d	z  }||t          | ¦  «        <   |
r|                     ¦   «          |S )
Nr   Fr   rs   r!  Trç   rú   r   )r%  rp   r	  ró   r>   r"  Ú_gatherGraphForHarfbuzzrû   rÓ   rç   rè   Úpop)r   r&  Úobj_listr(  ÚobjidxÚvirtual_edgesÚ
real_linksÚvirtual_linksÚitem_idxÚidxr   Úcoverage_idxr{   rý   Ú	child_idxÚ
offset_posr   Ú	real_edges                     r   r,  z%OTTableWriter._gatherGraphForHarfbuzzG  s\  € Øˆ
ØˆØˆð !ð 	.ð 	.ˆCØ× Ò  ! Q¨ Ñ-Ô-Ð-Ð-à ÐØˆÝ�4Ð+Ñ,Ô,ð 	å$ T¤ZÑ0Ô0ð 
ð 
‘��4Ý˜4 ¨Ñ.Ô.°*Ò<Ð<Ø'+Ð$Ý˜$‘x”x tÐ+Ð+Ø26×2NÒ2NØ" H¨d°H¸mñ3ô 3ð ˜ x xð (,­B¨t©H¬H¤~˜Ø!×(Ò(¨Ñ6Ô6Ð6Ø�Eð =ð ˆ	Øˆ
Ý  ¤Ñ,Ô,ð 	*ð 	*‰GˆAˆtÝ�t˜[Ñ)Ô)ð Ø ��Ý˜˜~Ñ.Ô.ð Ø˜dœiÑ'�
Øà'­#¨d©)¬)Ñ3�
Øå�$”.Ñ!Ô!¨Ð-Ð-Ø'+¤~×'MÒ'MØ˜H d¨H°mñ(ô (ð �	˜H˜Hð !¥ D¤NÑ!3Ô!3Ô4�	à˜dœo¨yÐ9ˆIØ×Ò˜iÑ(Ô(Ð(Ø˜$œ/Ñ)ˆJˆJà�Š�dÑÔÐØ�Š˜ ]Ð3Ñ4Ô4Ð4Ø�A‰ˆØ!ˆ�R�‰XŒX‰Øð 	 Ø×ÒÑÔÐàˆr   c                 ój  — i }|                       |d¬¦  «         g }g }i }d}g }|                      |||||¦  «         d}|D ] }	||	_        ||	                     ¦   «         z   }Œ!g }
|D ]+}	|	                     ¦   «         }|
                     |¦  «         Œ,t          j        t          |¦  «        |
|¦  «        S )aÂ  The Whole table is represented as a Graph.
        Assemble graph data and call Harfbuzz repacker to pack the table.
        Harfbuzz repacker is faster and retain as much sub-table sharing as possible, see also:
        https://github.com/harfbuzz/harfbuzz/blob/main/docs/repacker.md
        The input format for hb.repack() method is explained here:
        https://github.com/harfbuzz/uharfbuzz/blob/main/src/uharfbuzz/_harfbuzz.pyx#L1149
        Tr  r   )	r  r,  r   rþ   r  r%  r`   Úserialize_with_tagr   )r   r;   r  r&  r.  r(  r/  r0  r   r?   rA   Ú	tableDatas               r   r]   z%OTTableWriter.getAllDataUsingHarfbuzz€  sá   € ð ˆØ×Ò˜.¸ÐÑ>Ô>Ð>ØˆØˆØˆØˆØˆØ×$Ò$ V¨X°t¸VÀ]ÑSÔSÐSð ˆØð 	.ð 	.ˆEØˆEŒIØ˜×+Ò+Ñ-Ô-Ñ-ˆCˆCàˆØð 	#ð 	#ˆEØ×0Ò0Ñ2Ô2ˆIØ�KŠK˜	Ñ"Ô"Ð"Ð"åÔ$¥S¨¡]¤]°D¸(ÑCÔCÐCr   Tc                 ó(  — |ri }|                       |¦  «         g }g }i }|                      |||¦  «         |                     ¦   «          |                     ¦   «          d}|D ] }||_        ||                     ¦   «         z   }Œ!|D ] }||_        ||                     ¦   «         z   }Œ!g }|D ]+}|                     ¦   «         }	|                     |	¦  «         Œ,|D ]+}|                     ¦   «         }	|                     |	¦  «         Œ,t          |¦  «        S )z+Assemble all data, including all subtables.r   )r  r$  r#  r   rþ   r  r%  r   )
r   r\   r  r&  r'  r(  r   r?   rA   r;  s
             r   rd   zOTTableWriter.getAllDataž  sB  € àð 	.ØˆNØ×Ò˜nÑ-Ô-Ð-ØˆØˆ	ØˆØ×Ò˜6 9¨dÑ3Ô3Ð3Ø�ŠÑÔÐØ×ÒÑÔÐð ˆØð 	.ð 	.ˆEØˆEŒIØ˜×+Ò+Ñ-Ô-Ñ-ˆCˆCàð 	.ð 	.ˆEØˆEŒIØ˜×+Ò+Ñ-Ô-Ñ-ˆCˆCàˆØð 	#ð 	#ˆEØŸš™œˆIØ�KŠK˜	Ñ"Ô"Ð"Ð"àð 	#ð 	#ˆEØŸš™œˆIØ�KŠK˜	Ñ"Ô"Ð"Ð"å˜‰ŒÐr   c                 óT   — |                       | j        | j        ¦  «        }| |_        |S r)   )rŠ   r€   r;   rô   )r   Ú	subwriters     r   ÚgetSubWriterzOTTableWriter.getSubWriterÁ  s,   € Ø—N’N 4¤?°D´MÑBÔBˆ	àð 	Ôð Ðr   c                 óf   — | j                              t          j        d|› �|¦  «        ¦  «         d S r‘   ©ró   r%  r”   Úpack)r   r–   r+   s      r   Ú
writeValuezOTTableWriter.writeValueË  s0   € ØŒ
×Ò�&œ+ n¨( n n°eÑ<Ô<Ñ=Ô=Ð=Ð=Ð=r   c                 óÐ   — t          j         ||¦  «        }t          j        dk    r|                     ¦   «          | j                             |                     ¦   «         ¦  «         d S r›   )r�   rž   rŸ   r    ró   r%  Útobytes)r   r–   ÚvaluesÚas       r   Ú
writeArrayzOTTableWriter.writeArrayÎ  sQ   € ÝŒK˜ &Ñ)Ô)ˆÝŒ=˜EÒ!Ð!Ø�JŠJ‰LŒLˆLØŒ
×Ò˜!Ÿ)š)™+œ+Ñ&Ô&Ð&Ð&Ð&r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Ni€ÿÿÿé€   z>brA  ©r   r+   s     r   Ú	writeInt8zOTTableWriter.writeInt8Ô  sW   € Ø�uÐ"Ð"Ò"Ð"˜sÒ"Ð"Ð"Ð"Ð" EÑ"Ô"Ð"ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¤   ©rH  ©r   rF  s     r   ÚwriteInt8ArrayzOTTableWriter.writeInt8ArrayØ  ó   € Ø�Š˜˜VÑ$Ô$Ð$Ð$Ð$r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Ni €ÿÿé €  z>hrA  rK  s     r   Ú
writeShortzOTTableWriter.writeShortÛ  sW   € Ø˜Ð&Ð&Ò&Ð& Ò&Ð&Ð&Ð&Ð&¨Ñ&Ô&Ð&ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¯   rN  rO  s     r   ÚwriteShortArrayzOTTableWriter.writeShortArrayß  rQ  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nz>irA  rK  s     r   Ú	writeLongzOTTableWriter.writeLongâ  ó*   € ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr{   rN  rO  s     r   ÚwriteLongArrayzOTTableWriter.writeLongArrayå  rQ  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   é   ú>BrA  rK  s     r   Ú
writeUInt8zOTTableWriter.writeUInt8è  sW   € Ø�EÐÐÒÐ˜CÒÐÐÐÐ ÑÔÐØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¸   rN  rO  s     r   ÚwriteUInt8ArrayzOTTableWriter.writeUInt8Arrayì  rQ  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   i   ú>HrA  rK  s     r   ÚwriteUShortzOTTableWriter.writeUShortï  sW   € Ø�EÐ#Ð#Ò#Ð#˜GÒ#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr½   rN  rO  s     r   ÚwriteUShortArrayzOTTableWriter.writeUShortArrayó  rQ  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nú>IrA  rK  s     r   Ú
writeULongzOTTableWriter.writeULongö  rY  r   c                 ó2   — |                       d|¦  «         d S )NrÂ   rN  rO  s     r   ÚwriteULongArrayzOTTableWriter.writeULongArrayù  rQ  r   c                 ó¦   — d|cxk    rdk     sn J |¦   «         ‚t          j        d|¦  «        }| j                             |dd …         ¦  «         d S )Nr   é   z>Lr   ©r”   rB  ró   r%  )r   r+   r¤   s      r   ÚwriteUInt24zOTTableWriter.writeUInt24ü  sd   € Ø�EÐ%Ð%Ò%Ð%˜IÒ%Ð%Ð%Ð%Ð% uÑ%Ô%Ð%ÝŒK˜˜eÑ$Ô$ˆØŒ
×Ò˜!˜A˜B˜Bœ%Ñ Ô Ð Ð Ð r   c                 ó:   — |D ]}|                       |¦  «         Œd S r)   )ro  )r   rF  r+   s      r   ÚwriteUInt24ArrayzOTTableWriter.writeUInt24Array  s2   € Øð 	$ð 	$ˆEØ×Ò˜UÑ#Ô#Ð#Ð#ð	$ð 	$r   c                 ó¶   — t          |¦  «                             ¦   «         }t          |¦  «        dk    s
J |¦   «         ‚| j                             |¦  «         d S rÒ   )r   rE  rÓ   ró   r%  )r   Útags     r   ÚwriteTagzOTTableWriter.writeTag  sN   € Ý�#‰hŒh×ÒÑ Ô ˆÝ�3‰xŒx˜1Š}ˆ}ˆ}˜c‰}Œ}ˆ}ØŒ
×Ò˜#ÑÔÐÐÐr   c                 óV   — | j                              t          ||¦  «        ¦  «         d S r)   )ró   r%  rå   ré   s      r   ÚwriteSubTablezOTTableWriter.writeSubTable
  s(   € ØŒ
×Ò�.¨°JÑ?Ô?Ñ@Ô@Ð@Ð@Ð@r   r   c                 ó`   — t          ||||¬¦  «        }| j                             |¦  «         |S )N)rû   r+   )ÚCountReferenceró   r%  )r   r?   rs   rû   r+   Úrefs         r   ÚwriteCountReferencez!OTTableWriter.writeCountReference  s3   € Ý˜U D¨t¸5ÐAÑAÔAˆØŒ
×Ò˜#ÑÔÐØˆ
r   c                 ó^   — t          j        |f|z   Ž }| j                             |¦  «         d S r)   rn  )r   ÚformatrF  rA   s       r   ÚwriteStructzOTTableWriter.writeStruct  s1   € ÝŒ{˜V˜I¨Ñ.Ð/ˆØŒ
×Ò˜$ÑÔÐÐÐr   c                 ó:   — | j                              |¦  «         d S r)   )ró   r%  )r   rA   s     r   Ú	writeDatazOTTableWriter.writeData  s   € ØŒ
×Ò˜$ÑÔÐÐÐr   c                 ó¶  — d x}x}x}}| j         dk    r	|j        }�n%| j         dk    r| j        }|j        }�n
t          |dd¦  «        }t          |d¦  «        r|j        }| j         dk    r| j        j        }| j        }nÃ| j         dk    r| j        j        j        }| j        j        }nšd                     | j         |g¦  «        }| j        }|r7|j         d	vr.d                     |j         |g¦  «        }|j        }|r	|j         d	v°.|r<|j         dk    r|j        j        j        }|j        j        }n|j        j        }|j        }t          | j        ||||f¦  «        S )
NÚ
LookupListÚLookuprs   rò   ÚrepeatIndexÚSubTableÚExtSubTableú.)r…  r„  )rs   rƒ  r>   rp   rô   Újoinr   r;   )r   rý   r   r   r   r   Úp1s          r   r  z$OTTableWriter.getOverflowErrorRecord  s‹  € ØAEÐEˆÐE˜-ÐE¨(°YØŒ9˜Ò$Ð$Ø"Ô.ˆO‰OØŒY˜(Ò"Ð"Ø"Ô.ˆOØ Ô,ˆM‰Må˜t V¨XÑ6Ô6ˆHÝ�t˜]Ñ+Ô+ð -Ø Ô,�	ØŒy˜JÒ&Ð&Ø"&¤+Ô"9�Ø $Ô 0��Ø”˜mÒ+Ð+Ø"&¤+Ô"4Ô"@�Ø $¤Ô 7��àŸ8š8 T¤Y°Ð$9Ñ:Ô:�Ø”[�Øð #˜RœWÐ,GÐGÐGØ"Ÿxšx¨¬°(Ð(;Ñ<Ô<�HØœ�Bð ð #˜RœWÐ,GÐGÐGð ð 7Ø”w -Ò/Ð/Ø*,¬)Ô*:Ô*F˜Ø(*¬	Ô(=˜˜à*,¬)Ô*?˜Ø(*¬˜å"ØŒ]˜O¨]¸HÀiÐPñ
ô 
ð 	
r   ©NN©Fry   )r   N)*r"   r#   r$   rz   r   rÛ   rà   rø   rþ   r  r  rï   r  rì   r  r$  r,  r]   rd   r?  rC  rH  rL  rP  rT  rV  rX  r[  r_  ra  rd  rf  ri  rk  ro  rq  rt  rv  rz  r}  r  r  r%   r   r   rN   rN   …  su  € € € € € ØGÐGðð ð ð ð ð  ð  ð
%ð %ð %ð"ð "ð "ð

ð 
ð 
ð ð  ð  ð8 ð  ð  ð ð  ð  ðBð Bð Bð)ð )ð )ð
%"ð %"ð %"ð %"ðN> ð > ð > ð@7ð 7ð 7ðrDð Dð Dð<ð ð ð ðFð ð ð>ð >ð >ð'ð 'ð 'ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð!ð !ð !ð
$ð $ð $ðð ð ð
Að Að Aðð ð ð ð
 ð  ð  ð ð  ð  ð!
ð !
ð !
ð !
ð !
r   rN   c                   ó,   — e Zd ZdZdd„Zd„ Zd„ Zd„ ZdS )rx  z8A reference to a Count value, not a count of references.Nc                 ób   — || _         || _        || _        |�|                      |¦  «         d S d S r)   )r?   rs   rû   ÚsetValue)r   r?   rs   rû   r+   s        r   r   zCountReference.__init__@  s=   € ØˆŒ
ØˆŒ	ØˆŒ	ØÐØ�MŠM˜%Ñ Ô Ð Ð Ð ð Ðr   c                 ó~   — | j         }| j        }||         €|||<   d S ||         |k    sJ |||         |f¦   «         ‚d S r)   ©r?   rs   )r   r+   r?   rs   s       r   r�  zCountReference.setValueG  sU   € Ø”
ˆØŒyˆØ�Œ;ÐØˆE�$‰KˆKˆKà˜”; %Ò'Ð'Ð'¨$°°d´¸UÐ)CÑ'Ô'Ð'Ð'Ð'r   c                 ó&   — | j         | j                 S r)   r�  r    s    r   ÚgetValuezCountReference.getValueO  s   € ØŒz˜$œ)Ô$Ð$r   c                 ó~   — | j         | j                 }|€d}t          t          t          dœ| j                 |¦  «        S )Nr   )r   r   r   )r?   rs   Ú	packUInt8r  r  rû   )r   Úvs     r   rú   zCountReference.getCountDataR  s9   € ØŒJ�t”yÔ!ˆØˆ9ØˆAÝ¥µ	Ð:Ð:¸4¼9ÔEÀaÑHÔHÐHr   r‰  )r"   r#   r$   rz   r   r�  r‘  rú   r%   r   r   rx  rx  =  sc   € € € € € ØBÐBð!ð !ð !ð !ðDð Dð Dð%ð %ð %ðIð Ið Ið Ið Ir   rx  c                 ó,   — t          j        d| ¦  «        S )Nr^  ©r”   rB  r*   s    r   r“  r“  Y  ó   € ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ó,   — t          j        d| ¦  «        S )Nrc  r–  r*   s    r   r  r  ]  r—  r   c                 ó^   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        S )Nr   l        rh  r–  r*   s    r   r  r  a  sA   € Ø�Ð#Ð#Ò#Ð#˜Ò#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ón   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        dd …         S )Nr   rm  rh  r   r–  r*   s    r   r  r  f  sJ   € Ø�Ð!Ð!Ò!Ð!˜	Ò!Ð!Ð!Ð!Ð! 5Ñ!Ô!Ð!ÝŒ;�t˜UÑ#Ô# A B BÔ'Ð'r   c                   óÂ   — e Zd ZdZd„ Zdd„Zd„ Zed„ ¦   «         Zd„ Z	d„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Zdee         fd„Zd„ Zd	S )Ú	BaseTablez0Generic base class for all OpenType (sub)tables.c                 óº   — | j                              d¦  «        }|r1| `| j        }| `|                      ||¦  «         t          | |¦  «        S t          |¦  «        ‚©NrC   )Ú__dict__ÚgetrC   rB   r@   r>   ÚAttributeError)r   ÚattrrC   rB   s       r   Ú__getattr__zBaseTable.__getattr__n  sb   € Ø”×"Ò" 8Ñ,Ô,ˆØð 	'Ø�Ø”9ˆDØ�	Ø�NŠN˜6 4Ñ(Ô(Ð(Ý˜4 Ñ&Ô&Ð&å˜TÑ"Ô"Ð"r   Fc                 óê   — | j                              d¦  «        }|r!| `| j        }| `|                      ||¦  «         |r1|                      ¦   «         D ]}|j                             |¦  «         Œd S d S rž  )rŸ  r   rC   rB   r@   ÚiterSubTablesr+   rx   )r   rw   rC   rB   Úsubtables        r   rx   zBaseTable.ensureDecompiledy  s”   € Ø”×"Ò" 8Ñ,Ô,ˆØð 	)Ø�Ø”9ˆDØ�	Ø�NŠN˜6 4Ñ(Ô(Ð(Øð 	9Ø ×.Ò.Ñ0Ô0ð 9ð 9�Ø”×/Ò/°Ñ8Ô8Ð8Ð8ð	9ð 	9ð9ð 9r   c                 óœ   — d| j         v r=| j                              ¦   «         }| j         d                              ¦   «         |d<   |S | j         S rž  )rŸ  r�   )r   rU   s     r   Ú__getstate__zBaseTable.__getstate__„  sM   € ð �t”}Ð$Ð$Ø”M×&Ò&Ñ(Ô(ˆEØ"œm¨HÔ5×:Ò:Ñ<Ô<ˆE�(‰OØˆLØŒ}Ðr   c                 óÞ   — d}| j         D ]b}|                     |¦  «        }|t          u r	t          c S d}|j        r(|j        |v r||j                 |j        z   }n	t          c S |||z  z  }Œc|S )Nr   r   )Ú
convertersÚgetRecordSizerë   ÚrepeatÚaux)ÚclsrC   Ú	totalSizeÚconvrû   Ú
countValues         r   r«  zBaseTable.getRecordSize�  s–   € àˆ	Ø”Nð 
	+ð 
	+ˆDØ×%Ò% fÑ-Ô-ˆDØ•~Ð%Ð%Ý%Ð%Ð%Ð%ØˆJØŒ{ð *Ø”; &Ð(Ð(Ø!'¨¬Ô!4°t´xÑ!?�J�Jå)Ð)Ð)Ð)Ø˜ 
Ñ*Ñ*ˆIˆIØÐr   c                 ó   — | j         S r)   )rª  r    s    r   ÚgetConverterszBaseTable.getConverters�  s
   € ØŒÐr   c                 ó   — | j         |         S r)   )ÚconvertersByNamerß   s     r   ÚgetConverterByNamezBaseTable.getConverterByName   s   € ØÔ$ TÔ*Ð*r   Nc                 óà  — |                       ¦   «         D �]W}|j        rÂt          | |j        ¦  «        st	          | |j        g ¦  «         t          t          | |j        ¦  «        ¦  «        |j        z
  }	 |                      |j        ¦  «        }t	          | |j        |¦  «         Œ‘# t          $ r. |r)|j        |v r ||j                  
                    |¦  «         Y ŒÈw xY w|j        rt          |j        d | j        ¦  «        sŒït          | |j        ¦  «        r�Œt          |d¦  «        rt	          | |j        d ¦  «         t          |d¦  «        rt	          | |j        |j        ¦  «         �ŒYd S )NÚwriteNullOffsetÚDEFAULT)r³  r¬  rp   rs   ÚsetattrrÓ   r>   r­  r¶  ÚKeyErrorr�  ÚevalrŸ  r¹  )r   Ú
propagatorr°  r±  Ú
count_convs        r   rr   zBaseTable.populateDefaults£  s‹  € Ø×&Ò&Ñ(Ô(ð 	;ñ 	;ˆDØŒ{ð ;Ý˜t T¤YÑ/Ô/ð 1Ý˜D $¤)¨RÑ0Ô0Ð0Ý ¥¨¨t¬yÑ!9Ô!9Ñ:Ô:¸T¼XÑE�
ðEØ!%×!8Ò!8¸¼Ñ!EÔ!E�JÝ˜D $¤+¨zÑ:Ô:Ð:Ð:øÝð Eð Eð Eà!ð E d¤k°ZÐ&?Ð&?Ø" 4¤;Ô/×8Ò8¸ÑDÔDÐDøøðEøøøð
 ”8ð ¥D¨¬°4¸¼Ñ$GÔ$Gð ØÝ˜4 ¤Ñ+Ô+ð ÙÝ˜4Ð!2Ñ3Ô3ð 3Ý˜D $¤)¨TÑ2Ô2Ð2õ ˜4 Ñ+Ô+ð ;å˜D $¤)¨T¬\Ñ:Ô:Ð:ùð1	;ð 	;s   Á50B&Â&5CÃCc                 óH  — |                       |¦  «         i }|| _        |                      ¦   «         D �]ª}|j        dk    r!|                     |j        |d         ¦  «        }|j        dk    r!|                     |j        |d         ¦  «        }|j        dk    r|                     |d         ¦  «        }|j        dk    r!|                     |j        |d         ¦  «        }	 |j        rqt          |j        t          ¦  «        r|j        }n$|j        |v r||j                 }n||j                 }||j	        z  }| 
                    ||||¦  «        ||j        <   nZ|j	        rt          |j	        d |¦  «        s�ŒE|                     |||¦  «        ||j        <   |j        r||j                 ||j        <   �Œ‚# t          $ r}|j        }|j        |fz   |_        ‚ d }~ww xY wt!          | d	¦  «        r|                      ||¦  «         n| j                             |¦  «         | `d S )
Nr„  Ú
LookupTyper…  ÚExtensionLookupTypeÚFeatureParamsÚ
FeatureTagÚ	SubStructÚ	MorphTypeÚpostRead)Ú
readFormatÚ_BaseTable__rawTabler³  rs   ÚgetConverterr;   r¬  Ú
isinstanceÚintr­  r¢   r¼  ÚreadÚisPropagatedÚ	ExceptionÚargsrp   rÆ  rŸ  Úupdate)r   rC   rB   r?   r°  r±  rY   rs   s           r   r@   zBaseTable.decompile¾  s>  € Ø�Š˜ÑÔÐØˆØˆŒØ×&Ò&Ñ(Ô(ð 	ñ 	ˆDØŒy˜JÒ&Ð&Ø×(Ò(¨¬¸%ÀÔ:MÑNÔN�ØŒy˜MÒ)Ð)Ø×(Ò(¨¬¸%Ð@UÔ:VÑWÔW�ØŒy˜OÒ+Ð+Ø×(Ò(¨°Ô)=Ñ>Ô>�ØŒy˜KÒ'Ð'Ø×(Ò(¨¬¸%ÀÔ:LÑMÔM�ðØ”;ð =Ý! $¤+­sÑ3Ô3ð 9Ø%)¤[˜
˜
Øœ¨Ð-Ð-Ø%*¨4¬;Ô%7˜
˜
ð &,¨D¬KÔ%8˜
Ø $¤(Ñ*�JØ'+§~¢~°f¸dÀEÈ:Ñ'VÔ'V�E˜$œ)Ñ$Ð$à”xð !­¨T¬X°t¸UÑ(CÔ(Cð !Ù Ø'+§y¢y°¸¸uÑ'EÔ'E�E˜$œ)Ñ$ØÔ(ð =Ø,1°$´)Ô,<˜˜tœyÑ)ùøÝð ð ð Ø”y�Øœ 4 'Ñ)�”Øøøøøðøøøõ
 �4˜Ñ$Ô$ð 	(Ø�MŠM˜% Ñ&Ô&Ð&Ð&àŒM× Ò  Ñ'Ô'Ð'àˆOˆOˆOs   Ã!BF5Å8;F5Æ5
GÆ?GÇGc                 óê  — |                       ¦   «          t          | d¦  «        r9t          | d¦  «         }|                      |¦  «        }|ot          | d¦  «        }nd}| j                             ¦   «         }|                      ¦   «         D ]I}|j        r@|j        r9|                     |j	        ¦  «        }t          |t          ¦  «        r
|||j	        <   ŒJt          | d¦  «        rd|_        t          | d¦  «        rd|_        t          | j        d¦  «        r%|d                              | j        j        ¦  «         |                      |¦  «         |                      ¦   «         D �]ƒ}|                     |j	        ¦  «        }|j        rõ|€g }t'          |¦  «        |j        z
  }t          |j        t*          ¦  «        r:t'          |¦  «        |j        k    s!J d	|j        t'          |¦  «        fz  ¦   «         ‚nA|j        |v rt          ||j        |¬
¦  «         n ||j                                      |¦  «         	 |                     ||||¦  «         Œî# t.          $ r}|j        |j	        dz   fz   |_        ‚ d }~ww xY w|j        r“t          |t          ¦  «        r@|}	|j        |	_        |                     |	¦  «         |	                     ¦   «         ||j	        <   n+|                     ||j	        |j        ¦  «        }	d ||j	        <   |j        r
|	||j	        <   �Œ³|j        rG|j	        |vr
d ||j	        <   |                     ||j	        |j        ||j	                 ¦  «        }	|	|d<   �Œ|j        rt?          |j        d |¦  «        s�Œ 	 |                      ||||¦  «         n8# t.          $ r+}|�|j        j!        n|j	        }
|j        |
fz   |_        ‚ d }~ww xY w|j        r
|||j	        <   �Œ…|r| `"d S d S )NÚpreWriteÚFormatFr   r   r  TrÀ  zexpected %d values, got %dr*   z[])#rx   rp   rÒ  rŸ  r�   r³  ÚisCountrÍ  r   rs   rÊ  rx  r   r  rŠ   r�  rÀ  ÚwriteFormatr¬  rÓ   r­  rË  rH  rÎ  rÏ  r—   rû   r  r‘  rz  ÚisLookupTyper¼  Úwriter"   rÓ  )r   rX   rB   ÚdeleteFormatr?   r°  r+   r±  rY   ry  rs   s              r   rO   zBaseTable.compileè  sZ  € Ø×ÒÑÔÐõ �4˜Ñ$Ô$ð 	)Ý& t¨XÑ6Ô6Ð6ˆLØ—M’M $Ñ'Ô'ˆEØ'ÐC­G°D¸(Ñ,CÔ,CˆLˆLà ˆLØ”M×&Ò&Ñ(Ô(ˆEð ×&Ò&Ñ(Ô(ð 	.ð 	.ˆDØŒ|ð . Ô 1ð .ØŸ	š	 $¤)Ñ,Ô,�Ý˜e¥^Ñ4Ô4ð .Ø(-�F˜4œ9Ñ%øå�4Ð+Ñ,Ô,ð 	(Ø&'ˆFÔ#å�4˜Ñ%Ô%ð 	$Ø#ˆFÔå�4”> <Ñ0Ô0ð 	EØ�<Ô ×)Ò)¨$¬.Ô*CÑDÔDÐDà×Ò˜Ñ Ô Ð Ø×&Ò&Ñ(Ô(ð ?	.ñ ?	.ˆDØ—I’IØ”	ñô ˆEð Œ{ð ;.Ø�=Ø�EÝ  ™ZœZ¨$¬(Ñ2�
Ý˜dœk­3Ñ/Ô/ð 	=Ý˜u™:œ:¨¬Ò4Ð4Ð4Ð6RØœÝ˜E™
œ
ðVñ 7Ñ4Ô4Ð4Ð4ð ”[ EÐ)Ð)Ý" 5¨$¬+¸ZÐHÑHÔHÐHÐHð ˜4œ;Ô'×0Ò0°Ñ<Ô<Ð<ðØ—O’O F¨D°%¸Ñ?Ô?Ð?Ð?øÝ ð ð ð ØœV t¤y°4Ñ'7Ð&9Ñ9�A”FØøøøøðøøøð ”ð (.õ ˜e¥^Ñ4Ô4ð ,Ø�CØ#œ�C”HØ×$Ò$ SÑ)Ô)Ð)Ø'*§|¢|¡~¤~�E˜$œ)Ñ$Ð$à ×4Ò4°U¸D¼IÀtÄÑWÔW�CØ'+�E˜$œ)Ñ$ØÔ$ð ,Ø(+�F˜4œ9Ñ%ùØÔ"ð .ð ”9 EÐ)Ð)Ø'+�E˜$œ)Ñ$Ø×0Ò0Ø˜4œ9 d¤o°u¸T¼YÔ7Gñô �ð (+��|Ñ$Ñ$à”8ð ¥D¨¬°4¸Ñ$?Ô$?ð ÙðØ—J’J˜v t¨U°EÑ:Ô:Ð:Ð:øÝ ð ð ð Ø7<Ð7H˜5œ?Ô3Ð3ÈdÌi�DØœV t gÑ-�A”FØøøøøðøøøð Ô$ð .Ø(-�F˜4œ9Ñ%ùàð 	Ø���ð	ð 	s0   È=IÉ
I>É I9É9I>Î	N"Î"
OÎ,&OÏOc                 ó   — d S r)   r%   ©r   rC   s     r   rÇ  zBaseTable.readFormatM  ó   € Øˆr   c                 ó   — d S r)   r%   rg   s     r   rÕ  zBaseTable.writeFormatP  rÛ  r   c                 ó:  — |r|n| j         j        }|€g }t          | d¦  «        r|d| j        fgz   }|                     ||¦  «         |                     ¦   «          |                      ||¦  «         |                     |¦  «         |                     ¦   «          d S )NrÓ  )rŠ   r"   rp   rÓ  ÚbegintagÚnewlinerm   Úendtag)r   Ú	xmlWriterrB   rt   rs   Ú	tableNames         r   rn   zBaseTable.toXMLS  s­   € Ø Ð=�D�D d¤nÔ&=ˆ	Øˆ=ØˆEÝ�4˜Ñ"Ô"ð 	6Ø˜h¨¬Ð4Ð5Ñ5ˆEØ×Ò˜9 eÑ,Ô,Ð,Ø×ÒÑÔÐØ�Š�I˜tÑ$Ô$Ð$Ø×Ò˜Ñ#Ô#Ð#Ø×ÒÑÔÐÐÐr   c           
      óš  — |                       ¦   «         D ]µ}|j        rMt          | |j        g ¦  «        }t	          |¦  «        D ]&\  }}|                     ||||j        d|fg¦  «         Œ'ŒV|j        r$t          |j        d t          | ¦  «        ¦  «        sŒ�t          | |j        d ¦  «        }|                     ||||j        g ¦  «         Œ¶d S )NÚindex)	r³  r¬  r>   rs   r	  ÚxmlWriter­  r¼  Úvars)r   rá  rB   r°  r+   r{   rý   s          r   rm   zBaseTable.toXML2_  sö   € ð ×&Ò&Ñ(Ô(ð 	Eð 	EˆDØŒ{ð 
EÝ  d¤i°Ñ4Ô4�Ý(¨Ñ/Ô/ð Tð T‘G�A�tØ—M’M )¨T°4¸¼ÀgÈqÀ\ÀNÑSÔSÐSÐSðTð ”8ð ¥D¨¬°4½¸d¹¼Ñ$DÔ$Dð ØÝØ˜$œ) Tñô �ð —’˜i¨¨u°d´iÀÑDÔDÐDÐDð	Eð 	Er   c                 óH  — 	 |                       |¦  «        }n# t          $ r ‚ w xY w|                     |||¦  «        }|j        �Gt	          | |j        d ¦  «        }|€g }t          | |j        |¦  «         |                     |¦  «         d S t          | |j        |¦  «         d S r)   )r¶  r»  ÚxmlReadr¬  r>   rs   rº  r%  )r   rs   rt   ru   rB   r°  r+   Úseqs           r   rq   zBaseTable.fromXMLp  s¼   € ð	Ø×*Ò*¨4Ñ0Ô0ˆDˆDøÝð 	ð 	ð 	Øð	øøøà—’˜U G¨TÑ2Ô2ˆð Œ;Ð"Ý˜$ ¤	¨4Ñ0Ô0ˆCØˆ{Ø�Ý˜˜dœi¨Ñ-Ô-Ð-Ø�JŠJ�uÑÔÐÐÐå�D˜$œ) UÑ+Ô+Ð+Ð+Ð+s   ‚ ˜$c                 óH   — |                       |¦  «        }|t          u r|n| S r)   r  r  s      r   r  zBaseTable.__ne__‚  r  r   c                 óÀ   — t          | ¦  «        t          |¦  «        k    rt          S |                      ¦   «          |                     ¦   «          | j        |j        k    S r)   )rb   rë   rx   rŸ  r‹   s     r   rì   zBaseTable.__eq__†  sR   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!à×ÒÑÔÐØ×ÒÑ Ô Ð àŒ} ¤Ò.Ð.r   c                   óB   — e Zd ZU dZeed<   ded<   dZee         ed<   dS )úBaseTable.SubTableEntryzSee BaseTable.iterSubTables()rs   rœ  r+   Nrä  )	r"   r#   r$   rz   r   Ú__annotations__rä  r   rË  r%   r   r   ÚSubTableEntryrí  �  sA   € € € € € € Ø+Ð+àˆ	ˆ	‰	ØÐÐÑØ#ˆˆx˜Œ}Ð#Ð#Ñ#Ð#Ð#r   rï  Úreturnc              #   ó<  ‡ ‡K  — ‰                       ¦   «         D ]‚}|j        Št          ‰ ‰d¦  «        }|€Œt          |t          ¦  «        r‰                      ‰|¦  «        V — ŒKt          |t          ¦  «        r"ˆˆ fd„t          |¦  «        D ¦   «         E d{V —† ŒƒdS )a7  Yield (name, value, index) namedtuples for all subtables of current table.

        A sub-table is an instance of BaseTable (or subclass thereof) that is a child
        of self, the current parent table.
        The tuples also contain the attribute name (str) of the of parent table to get
        a subtable, and optionally, for lists of subtables (i.e. attributes associated
        with a converter that has a 'repeat'), an index into the list containing the
        given subtable value.
        This method can be useful to traverse trees of otTables.
        Nc              3   óx   •K  — | ]4\  }}t          |t          ¦  «        ¯‰                     ‰||¬ ¦  «        V — Œ5dS ))rä  N)rÊ  rœ  rï  )rÌ   r{   r”  rs   r   s      €€r   ú	<genexpr>z*BaseTable.iterSubTables.<locals>.<genexpr>©  s`   øè è € ð ð á˜˜1Ý! !¥YÑ/Ô/ðØ×&Ò& t¨Q°aÐ&Ñ8Ô8ðð ð ð ð ð r   )r³  rs   r>   rÊ  rœ  rï  r   r	  )r   r°  r+   rs   s   `  @r   r¥  zBaseTable.iterSubTables–  sé   øøè è € ð ×&Ò&Ñ(Ô(ð 	ð 	ˆDØ”9ˆDÝ˜D $¨Ñ-Ô-ˆEØˆ}ØÝ˜%¥Ñ+Ô+ð Ø×(Ò(¨¨uÑ5Ô5Ð5Ð5Ð5Ð5Ý˜E¥4Ñ(Ô(ð ðð ð ð ð å )¨%Ñ 0Ô 0ðñ ô ð ð ð ð ð ð ð øð	ð 	r   c                 ó*   — t          | j        ¦  «        S r)   )ÚgetVariableAttrsrŠ   r    s    r   rõ  zBaseTable.getVariableAttrs°  s   € Ý ¤Ñ/Ô/Ð/r   rŠ  r)   r‰  )r"   r#   r$   rz   r£  rx   r¨  Úclassmethodr«  r³  r¶  rr   r@   rO   rÇ  rÕ  rn   rm   rq   r  rì   r   rï  r
   r¥  rõ  r%   r   r   rœ  rœ  k  s‰  € € € € € Ø:Ð:ð	#ð 	#ð 	#ð	9ð 	9ð 	9ð 	9ðð ð ð ðð ñ „[ððð ð ð+ð +ð +ð;ð ;ð ;ð ;ð6(ð (ð (ðTcð cð cðJð ð ðð ð ð
ð 
ð 
ð 
ðEð Eð Eð",ð ,ð ,ð$Bð Bð Bð/ð /ð /ð$ð $ð $ð $ð $˜
ñ $ô $ð $ð˜x¨Ô6ð ð ð ð ð40ð 0ð 0ð 0ð 0r   rœ  c                   óN   — e Zd ZdZed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	d
d„Z
d	„ ZdS )ÚFormatSwitchingBaseTablezvMinor specialization of BaseTable, for tables that have multiple
    formats, eg. CoverageFormat1 vs. CoverageFormat2.c                 ó   — t           S r)   )rë   )r®  rC   s     r   r«  z&FormatSwitchingBaseTable.getRecordSize¸  s   € åÐr   c                 óx   — 	 | j         }n# t          $ r g cY S w xY w| j                             | j         g ¦  «        S r)   )rÓ  r¡  rª  r   )r   Úfmts     r   r³  z&FormatSwitchingBaseTable.getConverters¼  sR   € ð	Ø”+ˆCˆCøÝð 	ð 	ð 	ð ˆIˆIˆIð	øøøð Œ×"Ò" 4¤;°Ñ3Ô3Ð3s   ‚
 Š˜c                 ó2   — | j         | j                 |         S r)   )rµ  rÓ  rß   s     r   r¶  z+FormatSwitchingBaseTable.getConverterByNameÈ  s   € ØÔ$ T¤[Ô1°$Ô7Ð7r   c                 ó8   — |                      ¦   «         | _        d S r)   )r¾   rÓ  rÚ  s     r   rÇ  z#FormatSwitchingBaseTable.readFormatË  s   € Ø×'Ò'Ñ)Ô)ˆŒˆˆr   c                 ó:   — |                      | j        ¦  «         d S r)   )rd  rÓ  rg   s     r   rÕ  z$FormatSwitchingBaseTable.writeFormatÎ  s   € Ø×Ò˜4œ;Ñ'Ô'Ð'Ð'Ð'r   Nc                 óB   — t                                | ||||¦  «         d S r)   )rœ  rn   )r   rá  rB   rt   rs   s        r   rn   zFormatSwitchingBaseTable.toXMLÑ  s"   € Ý�Š˜˜i¨¨u°dÑ;Ô;Ð;Ð;Ð;r   c                 ó6   — t          | j        | j        ¦  «        S r)   )rõ  rŠ   rÓ  r    s    r   rõ  z)FormatSwitchingBaseTable.getVariableAttrsÔ  s   € Ý ¤°´Ñ<Ô<Ð<r   r‰  )r"   r#   r$   rz   rö  r«  r³  r¶  rÇ  rÕ  rn   rõ  r%   r   r   rø  rø  ´  s˜   € € € € € ð9ð 9ð ðð ñ „[ðð
4ð 
4ð 
4ð8ð 8ð 8ð*ð *ð *ð(ð (ð (ð<ð <ð <ð <ð=ð =ð =ð =ð =r   rø  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚUInt8FormatSwitchingBaseTablec                 ó8   — |                      ¦   «         | _        d S r)   )r¹   rÓ  rÚ  s     r   rÇ  z(UInt8FormatSwitchingBaseTable.readFormatÙ  s   € Ø×&Ò&Ñ(Ô(ˆŒˆˆr   c                 ó:   — |                      | j        ¦  «         d S r)   )r_  rÓ  rg   s     r   rÕ  z)UInt8FormatSwitchingBaseTable.writeFormatÜ  s   € Ø×Ò˜$œ+Ñ&Ô&Ð&Ð&Ð&r   N)r"   r#   r$   rÇ  rÕ  r%   r   r   r  r  Ø  s2   € € € € € ð)ð )ð )ð'ð 'ð 'ð 'ð 'r   r  )Úuint16Úuint8c                 ó^   — 	 t           |          S # t          $ r t          d| ›�¦  «        ‚w xY w)NzUnsupported format type: )ÚformatSwitchingBaseTablesr»  Ú	TypeError)Ú
formatTypes    r   Ú getFormatSwitchingBaseTableClassr  æ  sI   € ðDÝ(¨Ô4Ð4øÝð Dð Dð DÝÐB°JÐBÐBÑCÔCÐCðDøøøs   ‚ �,r®  rû  rð  c                 ó�  — t          | t          ¦  «        st          | ¦  «        ‚t          | t          ¦  «        r'|€t          d| j        › �¦  «        ‚| j        |         }n| j        }d|vrdS i }|                     ¦   «         D ] \  }}|                     ¦   «         }|�|||<   Œ!t          t          ||j
        ¬¦  «        ¦  «        S )zÐReturn sequence of variable table field names (can be empty).

    Attributes are deemed "variable" when their otData.py's description contain
    'VarIndexBase + {offset}', e.g. COLRv1 PaintVar* tables.
    Nz''fmt' is required for format-switching ÚVarIndexBaser%   )Úkey)Ú
issubclassrœ  r	  rø  r"   rµ  ró   ÚgetVarIndexOffsetr  Úsortedrà   )r®  rû  rª  ÚvarAttrsrs   r°  r~   s          r   rõ  rõ  î  sÝ   € õ �c�9Ñ%Ô%ð Ý˜‰nŒnÐÝ�#Õ/Ñ0Ô0ð *Øˆ;ÝÐTÀcÄlÐTÐTÑUÔUÐUØÔ)¨#Ô.ˆ
ˆ
àÔ)ˆ
à˜ZÐ'Ð'ØˆrØ€HØ ×&Ò&Ñ(Ô(ð $ð $‰
ˆˆdØ×'Ò'Ñ)Ô)ˆØÐØ#ˆH�T‰NøÝ•˜ hÔ&:Ð;Ñ;Ô;Ñ<Ô<Ð<r   ))r   Ú
XPlacementr   r   )r   Ú
YPlacementr   r   )r   ÚXAdvancer   r   )é   ÚYAdvancer   r   )é   Ú
XPlaDevicer   r   )é    Ú
YPlaDevicer   r   )é@   Ú
XAdvDevicer   r   )rJ  Ú
YAdvDevicer   r   )r]  Ú	Reserved1r   r   )i   Ú	Reserved2r   r   )i   Ú	Reserved3r   r   )i   Ú	Reserved4r   r   )i   Ú	Reserved5r   r   )i    Ú	Reserved6r   r   )i @  Ú	Reserved7r   r   )rS  Ú	Reserved8r   r   c                  ó8   — i } t           D ]\  }}}}|||f| |<   Œ| S r)   )ÚvalueRecordFormat)ÚdÚmaskrs   ÚisDeviceÚsigneds        r   Ú
_buildDictr-  &  s6   € Ø
€AÝ(9ð )ð )Ñ$ˆˆd�H˜fØ˜ &Ð(ˆˆ$‰ˆØ€Hr   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚValueRecordFactoryz6Given a format code, this object convert ValueRecords.c                 óp   — g }t           D ]$\  }}}}||z  r|                     |||f¦  «         Œ%|| _        d S r)   )r(  r%  r|  )r   ÚvalueFormatr|  r*  rs   r+  r,  s          r   r   zValueRecordFactory.__init__3  sQ   € ØˆÝ,=ð 	8ð 	8Ñ(ˆD�$˜ &Ø˜TÑ!ð 8Ø—’˜t X¨vÐ6Ñ7Ô7Ð7øØˆŒˆˆr   c                 ó*   — t          | j        ¦  «        S r)   )rÓ   r|  r    s    r   Ú__len__zValueRecordFactory.__len__:  s   € Ý�4”;ÑÔÐr   c                 ób  — | j         }|sd S t          ¦   «         }|D ]’\  }}}|r|                     ¦   «         }n|                     ¦   «         }|rN|rJddlm}	 |                     |¦  «        }
 t          |	|¦  «        ¦   «         }|                     |
|¦  «         nd }t          |||¦  «         Œ“|S ©Nr   r8   )
r|  ÚValueRecordr°   r¾   r<   r9   r�   r>   r@   rº  )r   rC   rB   r|  ÚvalueRecordrs   r+  r,  r+   r9   Ú	subReaders              r   ÚreadValueRecordz"ValueRecordFactory.readValueRecord=  sä   € Ø”ˆØð 	Ø�4Ý!‘m”mˆØ&,ð 	.ð 	.Ñ"ˆD�(˜FØð ,Ø×(Ò(Ñ*Ô*��à×)Ò)Ñ+Ô+�Øð !Øð !Ø*Ð*Ð*Ð*Ð*Ð*à &× 3Ò 3°EÑ :Ô :�IØ3�G H¨dÑ3Ô3Ñ5Ô5�EØ—O’O I¨tÑ4Ô4Ð4Ð4à �EÝ�K  uÑ-Ô-Ð-Ð-ØÐr   c                 óV  — | j         D ] \  }}}t          ||d¦  «        }|rZ|rB|                     ¦   «         }|                     |d¬¦  «         |                     ||¦  «         Œ]|                     d¦  «         Œs|r|                     |¦  «         Œ‹|                     |¦  «         Œ¡d S )Nr   r   )rè   )r|  r>   r?  rv  rO   rd  rT  )	r   rX   rB   r7  rs   r+  r,  r+   rç   s	            r   ÚwriteValueRecordz#ValueRecordFactory.writeValueRecordS  sÓ   € Ø&*¤kð 	*ð 	*Ñ"ˆD�(˜FÝ˜K¨¨qÑ1Ô1ˆEØð 
*Øð *Ø &× 3Ò 3Ñ 5Ô 5�IØ×(Ò(¨¸qÐ(ÑAÔAÐAØ—M’M )¨TÑ2Ô2Ð2Ð2à×&Ò& qÑ)Ô)Ð)Ð)Øð *Ø×!Ò! %Ñ(Ô(Ð(Ð(à×"Ò" 5Ñ)Ô)Ð)Ð)ð	*ð 	*r   N)r"   r#   r$   rz   r   r3  r9  r;  r%   r   r   r/  r/  0  sV   € € € € € Ø@Ð@ðð ð ð ð  ð  ðð ð ð,*ð *ð *ð *ð *r   r/  c                   ó<   — e Zd Zd	d„Zd„ Zd„ Zd
d„Zd„ Zd„ Zd„ Z	dS )r6  Nc                 ó.  — |�pt           D ]!\  }}}}||z  rt          | ||rd nd¦  «         Œ"|�A|j                             ¦   «         D ])\  }}t	          | |¦  «        sŒt          | ||¦  «         Œ(d S d S |� |j                             ¦   «         | _        d S d S ©Nr   )r(  rº  rŸ  ró   rp   r�   )	r   r1  Úsrcr*  rs   r+  r,  r  Úvals	            r   r   zValueRecord.__init__f  sÔ   € ØÐ"Ý0Að Að AÑ,��d˜H fØ Ñ%ð AÝ˜D $°Ð(?¨¨¸aÑ@Ô@Ð@øØˆØ #¤× 2Ò 2Ñ 4Ô 4ð ,ð ,‘H�C˜Ý" 4¨Ñ-Ô-ð !Ø Ý˜D # sÑ+Ô+Ð+Ð+ð	 ˆð,ð ,ð ˆ_ØœL×-Ò-Ñ/Ô/ˆDŒMˆMˆMð ˆ_r   c                 ón   — d}| j                              ¦   «         D ]}|t          |         d         z  }Œ|S r>  )rŸ  ÚkeysÚvalueRecordFormatDict)r   r|  rs   s      r   Ú	getFormatzValueRecord.getFormats  s@   € ØˆØ”M×&Ò&Ñ(Ô(ð 	=ð 	=ˆDØÕ3°DÔ9¸!Ô<Ñ<ˆFˆFØˆr   c                 óx   — d}| j                              ¦   «         D ]\  }}|r|t          |         d         z  }Œ|S r>  )rŸ  ró   rC  )r   r|  rs   r+   s       r   ÚgetEffectiveFormatzValueRecord.getEffectiveFormaty  sN   € ØˆØœ=×.Ò.Ñ0Ô0ð 	Að 	A‰KˆD�%Øð AØÕ"7¸Ô"=¸aÔ"@Ñ@�øØˆr   c                 ó°  — |€g }nt          |¦  «        }t          d d…         D ]<\  }}}}	t          | |¦  «        r%|                     |t	          | |¦  «        f¦  «         Œ=g }
t          dd…         D ]@\  }}}}	t          | |¦  «        r)t	          | |¦  «        }|�|
                     ||f¦  «         ŒA|
rw|                     ||¦  «         |                     ¦   «          |
D ]\  }}|�|                     |||¬¦  «         Œ |                     |¦  «         |                     ¦   «          d S | 	                    ||¦  «         |                     ¦   «          d S )Nr   r  )rs   )
r   r(  rp   r%  r>   rÞ  rß  rn   rà  Ú	simpletag)r   rá  rB   Ú	valueNamert   ÚsimpleItemsr*  rs   r+  r|  ÚdeviceItemsÚdeviceÚdeviceRecords                r   rn   zValueRecord.toXML€  s›  € Øˆ=ØˆKˆKå˜u™+œ+ˆKÝ,=¸b¸q¸bÔ,Að 	@ð 	@Ñ(ˆD�$˜ &Ý�t˜TÑ"Ô"ð @Ø×"Ò" D­'°$¸Ñ*=Ô*=Ð#>Ñ?Ô?Ð?øØˆÝ,=¸aÀ¸cÔ,Bð 	7ð 	7Ñ(ˆD�$˜ &Ý�t˜TÑ"Ô"ð 7Ý   tÑ,Ô,�ØÐ%Ø×&Ò&¨¨f ~Ñ6Ô6Ð6øØð 
	 Ø×Ò˜y¨+Ñ6Ô6Ð6Ø×ÒÑÔÐØ&1ð Cð CÑ"��lØÐ+Ø ×&Ò& y°$¸TÐ&ÑBÔBÐBøØ×Ò˜YÑ'Ô'Ð'Ø×ÒÑÔÐÐÐà×Ò 	¨;Ñ7Ô7Ð7Ø×ÒÑÔÐÐÐr   c                 óˆ  — ddl m} |                     ¦   «         D ]#\  }}t          | |t	          |¦  «        ¦  «         Œ$|D ]€}t          |t          ¦  «        sŒ|\  }}} t          ||¦  «        ¦   «         }	|D ]6}
t          |
t          ¦  «        sŒ|
\  }}}|	                     ||||¦  «         Œ7t          | ||	¦  «         Œ�d S r5  )	r<   r9   ró   rº  rË  rÊ  r  r>   rq   )r   rs   rt   ru   rB   r9   Úkr”  Úelementr+   Úelem2Úname2Úattrs2Úcontent2s                 r   rq   zValueRecord.fromXMLš  sû   € ØÐÐÐÐÐà—K’K‘M”Mð 	%ð 	%‰DˆAˆqÝ�D˜!�S ™VœVÑ$Ô$Ð$Ð$Øð 
	'ð 
	'ˆGÝ˜g¥uÑ-Ô-ð ØØ#*Ñ ˆD�%˜Ø+•G˜H dÑ+Ô+Ñ-Ô-ˆEØ ð =ð =�Ý! %­Ñ/Ô/ð ØØ*/Ñ'��v˜xØ—’˜e V¨X°tÑ<Ô<Ð<Ð<Ý�D˜$ Ñ&Ô&Ð&Ð&ð
	'ð 
	'r   c                 óH   — |                       |¦  «        }|t          u r|n| S r)   r  r  s      r   r  zValueRecord.__ne__«  r  r   c                 óp   — t          | ¦  «        t          |¦  «        k    rt          S | j        |j        k    S r)   )rb   rë   rŸ  r‹   s     r   rì   zValueRecord.__eq__¯  s.   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒ} ¤Ò.Ð.r   r‰  r)   )
r"   r#   r$   r   rD  rF  rn   rq   r  rì   r%   r   r   r6  r6  c  sŠ   € € € € € ð0ð 0ð 0ð 0ðð ð ðð ð ð ð  ð  ð  ð4'ð 'ð 'ð"Bð Bð Bð/ð /ð /ð /ð /r   r6  r)   )9ÚfontTools.configr   ÚfontTools.misc.textToolsr   r   r   Úenumr   rž   r�   r”   ÚloggingÚ	functoolsr	   Útypingr
   r   r   r   Ú	getLoggerr"   rJ   rL   Ú	uharfbuzzr`   rM   rI   Úobjectr   rÎ  r'   r1   r6   rÓ   rB  Úitemsizer=   rå   rN   rx  r“  r  r  r  rœ  rø  r  r  r  rË  r   rõ  r(  r-  rC  r/  r6  r%   r   r   ú<module>ra     s¦  ðØ $Ð $Ð $Ð $Ð $Ð $Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à€gÔ˜Ñ!Ô!€à€ð	ØÐÐÐà€N€NøØð 	ð 	ð 	Ø€Dð	øøøð   8Ð CÐ CÐ CÔDÐ ð
ð 
ð 
ð 
ð 
˜&ñ 
ô 
ð 
ð0 ð  ð  ð  ð  ˜Yñ  ô  ð  ðð ð ð ð �Gñ ô ð ð*l5ð l5ð l5ð l5ð l5�|ñ l5ô l5ð l5ð` €sˆ;ˆ6Œ;�s˜AÑÔÑÔ 1Ò$Ð$Ð$Ð$Ø€u„{�3ÑÔÔ  AÒ%Ð%Ð%Ð'LÑ%Ô%Ð%ðq;ð q;ð q;ð q;ð q;�Fñ q;ô q;ð q;ðh7ð 7ð 7ð 7ð 7�Vñ 7ô 7ð 7ðu
ð u
ð u
ð u
ð u
�Fñ u
ô u
ð u
ðpIð Ið Ið Ið I�Vñ Iô Ið Ið8$ð $ð $ð$ð $ð $ð$ð $ð $ð
(ð (ð (ð
F0ð F0ð F0ð F0ð F0�ñ F0ô F0ð F0ðR
!=ð !=ð !=ð !=ð !=˜yñ !=ô !=ð !=ðH'ð 'ð 'ð 'ð 'Ð$<ñ 'ô 'ð 'ð 'Ø*ðð Ð ðDð Dð Dð €�„ð=ð =˜)ð =¨(°3¬-ð =À5ÈÄ:ð =ð =ð =ñ „ð=ðBð ð Ð ð,ð ð ð #˜
™œÐ ð0*ð 0*ð 0*ð 0*ð 0*˜ñ 0*ô 0*ð 0*ðfO/ð O/ð O/ð O/ð O/�&ñ O/ô O/ð O/ð O/ð O/s   ÁA ÁAÁA