Ë
    £eh^  ã                   ó   — d dl mZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ d dlmZmZ ej,                  Zeej.                  _        d	„ Z G d
„ de«      Zedœd„Zeej:                  _        d„ Zeej@                  _!        d„ Z"e"ej.                  _#         G d„ de«      Z$dd e%«       fddœd„Z&e&ej.                  _'        dddœd„Z(e(ej.                  _)        d„ Z*d„ Z+d„ Z,e,ejZ                  _.        e,ej^                  _.        d„ Z0d„ Z1e1ejZ                  _2        e1ej^                  _2         G d„ d e«      Z3 G d!„ d"e4«      Z5d(d$„Z6e6ej.                  _7        d)d&„Z8e9d'k(  r`d d%l:Z: e;e:jx                  «      d#kD  r e:jz                   e8«       «       d d%l>Z> e:jz                   e>j~                  «       j€                  «       y%y%)*é    )ÚnoRoundÚotRound©Ú	bit_count)ÚotTables)ÚsupportScalar)ÚbuildVarRegionListÚbuildVarStoreÚbuildVarRegionÚbuildVarData)Úpartial)Údefaultdict)ÚheappushÚheappopc                 óL   — t        t        | j                  «       d„ ¬«      «      S )Nc                 ó   — | d   S ©Nr   © )Úkvs    úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/varLib/varStore.pyú<lambda>z!_getLocationKey.<locals>.<lambda>   s
   € °B°q±E€ ó    ©Úkey)ÚtupleÚsortedÚitems)Úlocs    r   Ú_getLocationKeyr      s   € Ü”˜Ÿ	™	›Ñ)9Ô:Ó;Ð;r   c                   ó^   — e Zd Zd„ Zd„ Zd„ Zdd„Zdd„Zedœd„Z	edœd„Z
edœd	„Zedœd
„Zy)ÚOnlineVarStoreBuilderc                 óÌ   — || _         i | _        t        g |«      | _        t	        | j                  g «      | _        d | _        d | _        d | _        i | _	        i | _
        d | _        y ©N)Ú	_axisTagsÚ
_regionMapr	   Ú_regionListr
   Ú_storeÚ_dataÚ_modelÚ	_supportsÚ_varDataIndicesÚ_varDataCachesÚ_cache)ÚselfÚaxisTagss     r   Ú__init__zOnlineVarStoreBuilder.__init__   s_   € Ø!ˆŒØˆŒÜ-¨b°(Ó;ˆÔÜ# D×$4Ñ$4°bÓ9ˆŒØˆŒ
ØˆŒØˆŒØ!ˆÔØ ˆÔØˆ�r   c                 óH   — | j                  |j                  «       || _        y r#   )ÚsetSupportsÚsupportsr)   )r.   Úmodels     r   ÚsetModelzOnlineVarStoreBuilder.setModel%   s   € Ø×Ñ˜Ÿ™Ô(Øˆ�r   c                 óž   — d | _         t        |«      | _        | j                  r| j                  d   s| j                  d= d | _        d | _        y r   )r)   Úlistr*   r-   r(   )r.   r3   s     r   r2   z!OnlineVarStoreBuilder.setSupports)   s@   € ØˆŒÜ˜h›ˆŒØ�>Š> $§.¡.°Ò"3Ø—‘˜qÐ!ØˆŒØˆ�
r   c                 ó`  — t        | j                  j                  «      | j                  _        t        | j                  j
                  «      | j                  _        | j                  j
                  D ].  }t        |j                  «      |_        |j                  |¬«       Œ0 | j                  S )N©Úoptimize)
Úlenr&   ÚRegionÚRegionCountr'   ÚVarDataÚVarDataCountÚItemÚ	ItemCountÚcalculateNumShorts)r.   r:   Údatas      r   ÚfinishzOnlineVarStoreBuilder.finish1   s�   € Ü'*¨4×+;Ñ+;×+BÑ+BÓ'Cˆ×ÑÔ$Ü#& t§{¡{×':Ñ':Ó#;ˆ�‰Ô Ø—K‘K×'Ñ'ò 	7ˆDÜ  §¡›^ˆDŒNØ×#Ñ#¨XÐ#Õ6ð	7ð �{‰{Ðr   c                 óÈ  — | j                   }| j                  }| j                  }g }|D ]|  }t        |«      }|j	                  |«      }|€Kt        || j                  «      }	t        |j                  «      x}||<   |j                  j                  |	«       |j                  |«       Œ~ t        |«      }| j                  j	                  |«      }
|
�`|
| _        | j                  j                  |
   | _        | j                   |   | _        t        | j                  j$                  «      |z   dkD  rd }
|
€±t'        |g d¬«      | _        t        | j                  j                  «      | _        | j                  j                  j                  | j                  «       | j                  | j                  |<   || j                   vri | j                   |<   | j                   |   | _        y y )Néÿÿ  Fr9   )r%   r&   r*   r   Úgetr   r$   r;   r<   Úappendr   r+   Ú_outerr'   r>   r(   r,   r-   r@   r   )r.   Ú	num_itemsÚ	regionMapÚ
regionListÚregionsÚregionIndicesÚregionr   ÚidxÚ	varRegionÚ
varDataIdxs              r   Ú_add_VarDataz"OnlineVarStoreBuilder._add_VarData9   s¢  € Ø—O‘Oˆ	Ø×%Ñ%ˆ
à—.‘.ˆØˆØò 	&ˆFÜ! &Ó)ˆCØ—-‘- Ó$ˆCØˆ{Ü*¨6°4·>±>ÓB�	Ü'*¨:×+<Ñ+<Ó'=Ð=��i ‘nØ×!Ñ!×(Ñ(¨Ô3Ø× Ñ  Õ%ð	&ô �MÓ"ˆØ×)Ñ)×-Ñ-¨cÓ2ˆ
ØÐ!Ø$ˆDŒKØŸ™×,Ñ,¨ZÑ8ˆDŒJØ×-Ñ-¨cÑ2ˆDŒKÜ�4—:‘:—?‘?Ó# iÑ/°&Ò8à!�
àÐÜ% m°RÀ%ÔHˆDŒJÜ˜dŸk™k×1Ñ1Ó2ˆDŒKØ�K‰K×Ñ×&Ñ& t§z¡zÔ2Ø(,¯©ˆD× Ñ  Ñ%Ø˜$×-Ñ-Ñ-Ø+-�×#Ñ# CÑ(Ø×-Ñ-¨cÑ2ˆD�Kð r   ©Úroundc                ó�   — | j                   j                  ||¬«      }|j                  d«      }|| j                  |t        ¬«      fS ©NrT   r   )r)   Ú	getDeltasÚpopÚstoreDeltasr   )r.   Úmaster_valuesrU   ÚdeltasÚbases        r   ÚstoreMastersz"OnlineVarStoreBuilder.storeMasters\   sC   € Ø—‘×&Ñ& }¸EÐ&ÓBˆØ�z‰z˜!‹}ˆØ�T×%Ñ% f´GÐ%Ó<Ð<Ð<r   c                óØ   — |D �cg c]  }| j                   j                  ||¬«      ‘Œ! }}|D �cg c]  }|j                  d«      ‘Œ }}|| j                  |t        ¬«      fS c c}w c c}w rW   )r)   rX   rY   ÚstoreDeltasManyr   )r.   Úmaster_values_listrU   r[   Údeltas_listr\   Ú	base_lists          r   ÚstoreMastersManyz&OnlineVarStoreBuilder.storeMastersManya   sw   € ð "4ö
àð �K‰K×!Ñ! -°uÐ!Õ=ð
ˆð 
ð 2=Ö= v�V—Z‘Z •]Ð=ˆ	Ð=Ø˜$×.Ñ.¨{Ä'Ð.ÓJÐJÐJùò
ùò >s
   …$A"¯A'c                óŒ  — |D �cg c]
  } ||«      ‘Œ }}t        |«      t        | j                  «      dz   k(  rt        |dd  «      }n.t        |«      t        | j                  «      k(  sJ ‚t        |«      }| j                  s| j	                  «        | j
                  j                  |«      }|�|S t        | j                  j                  «      }|dk(  r'| j	                  «        | j                  |t        ¬«      S | j                  j                  |t        ¬«       | j                  dz  |z   }|| j
                  |<   |S c c}w )Né   rF   rT   é   )r;   r*   r   r(   rS   r-   rG   r@   rZ   r   ÚaddItemrI   )r.   r\   rU   ÚdÚvarIdxÚinners         r   rZ   z!OnlineVarStoreBuilder.storeDeltasi   s  € Ø$*Ö+˜q‘%˜•(Ð+ˆÐ+Üˆv‹;œ#˜dŸn™nÓ-°Ñ1Ò1Ü˜6 ! "˜:Ó&‰Fä�v“;¤# d§n¡nÓ"5Ò5Ð5Ð5Ü˜6“]ˆFà�zŠzØ×ÑÔà—‘—‘ Ó(ˆØÐØˆMä�D—J‘J—O‘OÓ$ˆØ�FŠ?à×ÑÔØ×#Ñ# F´'Ð#Ó:Ð:Ø�
‰
×Ñ˜6¬ÐÔ1à—+‘+ Ñ# uÑ,ˆØ$ˆ�‰�FÑØˆùò/ ,s   …Ec          
      óÈ  — |D ��cg c]  }|D �cg c]
  } ||«      ‘Œ c}‘Œ }}}t        d„ |D «       «      }| j                  s| j                  t        |«      «       | j                  j                  |«      }|�|S t        | j                  j                  «      }|t        |«      z   dkD  r1| j                  t        |«      «       | j                  |t        ¬«      S t        |«      D ]J  \  }}| j                  j                  |t        ¬«       | j                  dz  |z   |z   }|| j                  |<   ŒL | j                  dz  |z   }|| j                  |<   |S c c}w c c}}w )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr#   )r   )Ú.0r\   s     r   ú	<genexpr>z8OnlineVarStoreBuilder.storeDeltasMany.<locals>.<genexpr>…   s   è ø€ ÒD¨fœE &ŸMÑDùs   ‚rF   rT   rg   )r   r(   rS   r;   r-   rG   r@   r`   r   Ú	enumeraterh   rI   )r.   rb   rU   r\   ri   rj   rk   Úis           r   r`   z%OnlineVarStoreBuilder.storeDeltasManyƒ   s=  € Ø@K×L°f¨&Ö1 Q™˜a�Ô1ÐLˆÑLÜÑD¸ÔDÓDˆà�zŠzØ×Ñœc +Ó.Ô/à—‘—‘ Ó-ˆØÐØˆMä�D—J‘J—O‘OÓ$ˆØ”3�{Ó#Ñ# fÒ,à×Ñœc +Ó.Ô/Ø×'Ñ'¨¼7Ð'ÓCÐCÜ" ;Ó/ò 	)‰IˆAˆvØ�J‰J×Ñ˜v¬WÐÔ5à—k‘k RÑ'¨5Ñ0°1Ñ4ˆFØ"(ˆD�K‰K˜Òð		)ð —+‘+ Ñ# uÑ,ˆØ#)ˆ�‰�KÑ àˆùò1 2ùÓLs   †	E�EžEÅEN)T)rf   )Ú__name__Ú
__module__Ú__qualname__r0   r5   r2   rD   rS   rU   r^   rd   rZ   r`   r   r   r   r!   r!      sF   „ ò
òòóó!3ðF 49ô =ð
 =Bô Kð ,1ô ð4 5:õ r   r!   rT   c                ó0  — |D �cg c]
  } ||«      ‘Œ }}| j                   }t        |«      }|dz   |k(  rt        |dd  «      }n||k(  s	J ||f«       ‚t        |«      }| j                  j	                  |«       t        | j                  «      | _        y c c}w ©Nrf   )ÚVarRegionCountr;   r7   r@   rH   rA   )r.   r\   rU   ri   ÚcountUsÚ	countThems         r   ÚVarData_addItemrz   Ÿ   s�   € Ø &Ö'˜1‰e�A�hÐ'€FÐ'à×!Ñ!€GÜ�F“€IØ��{�iÒÜ�f˜Q˜R�jÓ!‰à˜)Ò#Ð9 g¨yÐ%9Ó9Ð#Ü�f“ˆØ‡I�I×Ñ�VÔÜ˜Ÿ™“^€D…Nùò (s   …Bc                 óÚ   — t        | j                  «      D ��ci c]E  \  }}|j                  dk7  r1||   j                  |j                  |j                  |j
                  f“ŒG c}}S c c}}w r   )rp   ÚVarRegionAxisÚ	PeakCoordÚaxisTagÚ
StartCoordÚEndCoord)r.   Ú	fvar_axesrq   Úregs       r   ÚVarRegion_get_supportrƒ   °   sa   € ô   × 2Ñ 2Ó3÷áˆAˆsØ�=‰=˜AÒð 	�!‰×Ñ˜sŸ~™~¨s¯}©}¸c¿l¹lÐKÑKóð ùó s   ™A
A'c                 ó,   — t        | j                  «      S r#   )Úboolr>   ©r.   s    r   ÚVarStore___bool__r‡   »   s   € Ü�—‘ÓÐr   c                   óD   — e Zd Zi fd„Zd„ Zd„ Zd„ Zed„ «       Zd„ Z	d„ Z
y)	ÚVarStoreInstancerc                 óÂ   — || _         |�|j                  dk(  sJ ‚|r|j                  ng | _        |r|j                  j
                  ng | _        | j                  |«       y rv   )r�   ÚFormatr>   Ú_varDataÚVarRegionListr<   Ú_regionsÚsetLocation)r.   Úvarstorer�   Úlocations       r   r0   zVarStoreInstancer.__init__Ã   sV   € Ø"ˆŒØÐ 8§?¡?°aÒ#7Ð7Ð7Ù,4˜×(Ò(¸"ˆŒÙ9A˜×.Ñ.×5Ò5ÀrˆŒØ×Ñ˜Õ"r   c                 óD   — t        |«      | _        | j                  «        y r#   )Údictr‘   Ú_clearCaches)r.   r‘   s     r   r�   zVarStoreInstancer.setLocationÊ   s   € Ü˜X›ˆŒØ×ÑÕr   c                 ó   — i | _         y r#   )Ú_scalarsr†   s    r   r”   zVarStoreInstancer._clearCachesÎ   s	   € Øˆ�r   c                 óÚ   — | j                   j                  |«      }|€M| j                  |   j                  | j                  «      }t        | j                  |«      }|| j                   |<   |S r#   )r–   rG   rŽ   Úget_supportr�   r   r‘   )r.   Ú	regionIdxÚscalarÚsupports       r   Ú
_getScalarzVarStoreInstancer._getScalarÑ   s[   € Ø—‘×"Ñ" 9Ó-ˆØˆ>Ø—m‘m IÑ.×:Ñ:¸4¿>¹>ÓJˆGÜ" 4§=¡=°'Ó:ˆFØ'-ˆD�M‰M˜)Ñ$Øˆr   c                 óH   — d}t        | |«      D ]  \  }}|sŒ	|||z  z  }Œ |S )Nç        )Úzip)r\   ÚscalarsÚdeltari   Úss        r   ÚinterpolateFromDeltasAndScalarsz1VarStoreInstancer.interpolateFromDeltasAndScalarsÙ   s;   € àˆÜ˜ Ó(ò 	‰DˆAˆqÙØØ�Q˜‘U‰N‰Eð	ð ˆr   c                 óê   — |dz	  |dz  }}|t         k(  ry| j                  }||   j                  D �cg c]  }| j                  |«      ‘Œ }}||   j                  |   }| j                  ||«      S c c}w )Nrg   rF   rž   )ÚNO_VARIATION_INDEXrŒ   ÚVarRegionIndexrœ   r@   r£   )r.   ÚvaridxÚmajorÚminorÚvarDataÚrir    r\   s           r   Ú__getitem__zVarStoreInstancer.__getitem__â   s{   € Ø ‘| V¨f¡_ˆuˆØÔ'Ò'ØØ—-‘-ˆØ18¸±×1NÑ1NÖO¨2�4—?‘? 2Õ&ÐOˆÐOØ˜‘×$Ñ$ UÑ+ˆØ×3Ñ3°F¸GÓDÐDùò Ps   ²A0c                 óž   — | j                   }||   j                  D �cg c]  }| j                  |«      ‘Œ }}| j                  ||«      S c c}w r#   )rŒ   r¦   rœ   r£   )r.   ÚvarDataIndexr\   rª   r«   r    s         r   ÚinterpolateFromDeltasz'VarStoreInstancer.interpolateFromDeltasë   sK   € Ø—-‘-ˆØ18¸Ñ1F×1UÑ1UÖV¨2�4—?‘? 2Õ&ÐVˆÐVØ×3Ñ3°F¸GÓDÐDùò Ws   žA
N)rr   rs   rt   r0   r�   r”   rœ   Ústaticmethodr£   r¬   r¯   r   r   r   r‰   r‰   Â   s9   „ Ø57ó #òòòð ñó ðòEóEr   r‰   TFr>   )r>   c          	      ó¢  — t        t        «      }|D ]*  }|t        k(  rŒ|dz	  }|dz  }	||   j                  |	«       Œ, ~t	        | |«      }
g }t        t        i}t        |
«      D �]0  \  }}|j                  |«      }|€Œt        |«      }|j                  |«       |j                  }g }|dk(  rK|rIt        t        |«      «      D ]1  }	|j                  |	|v r||	   ndgt        ||	   «      z  «       |	||	<   Œ3 nb|dk(  rt        |«      t        ||z
  «      z   }nt        |«      }|D ]2  }	t        |«      }|j                  ||	   «       |dz  |z   ||dz  |	z   <   Œ4 ||_	        t        |j                  «      |_        |dk(  s�Œ|j                  |¬«       �Œ3 t        | ||«       t        | |dz   t        |«      «       | j                  «        |S )Nrg   rF   r   r>   r9   ÚCount)r   Úsetr¥   ÚaddÚgetattrrp   rG   r;   rH   r@   Úranger   rA   rB   ÚsetattrÚprune_regions)r.   ÚvarIdxesr:   ÚretainFirstMapÚadvIdxesr>   Úusedrj   r¨   r©   rª   Ú
newVarDataÚ
varDataMaprC   Ú
usedMinorsÚnewMajorr   ÚnewItemsÚminorsÚnewMinors                       r   ÚVarStore_subset_varidxesrÄ   ø   sò  € ô ”sÓ€DØò ˆØÔ'Ò'ØØ˜"‘ˆØ˜‘ˆØˆU‰�‰˜Õðð 	ô �d˜GÓ$€GØ€JÜ$Ô&8Ð9€JÜ  Ó)ó 7‰ˆˆtØ—X‘X˜e“_ˆ
ØÐØÜ�z“?ˆØ×Ñ˜$Ôà—	‘	ˆØˆØ�AŠ:™.Üœs 5›zÓ*ò *�Ø—‘Ø$)¨ZÑ$7�E˜%’L¸a¸SÄ3ÀuÈUÁ|ÓCTÑ=Tôð %*�
˜5Ò!ñ	*ð ˜ŠzÜ Ó)¬F°:ÀÑ3HÓ,IÑI‘ä 
Ó+�Øò P�Ü˜x›=�Ø—‘  e¡Ô-Ø5=À±^ÀxÑ4O�
˜E R™K¨5Ñ0Ò1ðPð
 ˆŒ	Ü˜TŸY™Y›ˆŒà�iÔØ×#Ñ#¨XÐ#Ö6ð;7ô> ˆD�'˜:Ô&ÜˆD�'˜GÑ#¤S¨£_Ô5à×ÑÔàÐr   r�   )r>   r�   c                ó¾  — t        «       }t        | |«      D ]  }|j                  |j                  «       Œ t        | |«      }|j                  }g }i }t        |«      D ]$  }	t        |«      ||	<   |j                  ||	   «       Œ& ||_        t        |j                  «      |_        t        | |«      D ]$  }|j                  D �	cg c]  }	||	   ‘Œ	 c}	|_        Œ& yc c}	w )zRemove unused VarRegions.N)	r³   rµ   Úupdater¦   r<   r   r;   rH   r=   )
r.   r>   r�   ÚusedRegionsrC   rL   rM   Ú
newRegionsrK   rq   s
             r   ÚVarStore_prune_regionsrÉ   <  sà   € ô “%€KÜ˜˜gÓ&ò 0ˆØ×Ñ˜4×.Ñ.Õ/ð0ô ˜˜}Ó-€JØ×Ñ€GØ€JØ€IÜ�KÓ ò &ˆÜ˜:“ˆ	�!‰Ø×Ñ˜' !™*Õ%ð&ð #€JÔÜ  ×!2Ñ!2Ó3€JÔä˜˜gÓ&ò JˆØ59×5HÑ5HÖI°˜y¨›|ÒIˆÕñJùÚIs   ÃCc                 óÊ  — t        | «      t        j                  k(  r	 || «       yt        | t        «      r| D ]  }t        ||«       Œ yt        | d«      rHt        | d«      s<| j                  «       D ](  }t        | |j                  d«      }|€Œt        ||«       Œ* yt        | t        j                  «      r,| j                  j                  «       D ]  }t        ||«       Œ yy)zqRecurse down from self, if type of an object is ot.Device,
    call func() on it.  Works on otData-style classes.ÚgetConvertersÚpostReadN)ÚtypeÚotÚDeviceÚ
isinstancer7   Ú_visitÚhasattrrË   rµ   ÚnameÚValueRecordÚ__dict__Úvalues)r.   ÚfuncÚthatÚconvs       r   rÑ   rÑ   X  sÈ   € ô ˆDƒz”R—Y‘YÒÙˆT�
ä	�Dœ$Ô	Øò 	ˆDÜ�4˜Õñ	ô 
��Ô	'´¸¸jÔ0IØ×&Ñ&Ó(ò 	#ˆDÜ˜4 §¡¨DÓ1ˆDØÑÜ�t˜TÕ"ñ	#ô
 
�Dœ"Ÿ.™.Ô	)Ø—M‘M×(Ñ(Ó*ò 	ˆDÜ�4˜Õñ	ð 
*r   c                 óz   — | j                   dk(  r,|j                  | j                  dz  | j                  z   «       yy)z6Add VarIdx in this Device table (if any) to the set s.é €  rg   N)ÚDeltaFormatr´   Ú	StartSizeÚEndSize)r.   r¢   s     r   Ú_Device_recordVarIdxrß   n  s3   € à×Ñ˜6Ò!Ø	�‰ˆt�~‰~ Ñ# t§|¡|Ñ3Õ4ð "r   c                 ó>   — t        t        |¬«      }t        | |«       y )N)r¢   )r   rß   rÑ   )r.   ÚvaridxesÚadders      r   ÚObject_collect_device_varidxesrã   t  s   € ÜÔ(¨HÔ5€EÜ
ˆ4�Õr   c                 óÚ   — t        | «      |v ry|j                  t        | «      «       | j                  dk(  r4|| j                  dz  | j                  z      }|dz	  | _        |dz  | _        yy)z9Map VarIdx in this Device table (if any) through mapping.NrÛ   rg   rF   )Úidr´   rÜ   rÝ   rÞ   )r.   ÚmappingÚdonerj   s       r   Ú_Device_mapVarIdxrè   }  sf   € ä	ˆ$ƒx�4ÑØØ‡H�HŒR�‹XÔØ×Ñ˜6Ò!Ø˜$Ÿ.™.¨BÑ.°$·,±,Ñ>Ñ?ˆØ 2™ˆŒØ ‘ˆ�ð "r   c                 óP   — t        t        |t        «       ¬«      }t        | |«       y )N)ræ   rç   )r   rè   r³   rÑ   )r.   Úvaridxes_mapÚmappers      r   ÚObject_remap_device_varidxesrì   ˆ  s   € ÜÔ&°Ä3Ã5ÔI€FÜ
ˆ4�Õr   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Z	d„ Z
y)	Ú	_Encodingc                 ó¼   — || _         t        |«      | _        | j                  |«      | _        | j                  | j                  «      | _        t        «       | _        y r#   )	Úcharsr   ÚwidthÚ_columnsÚcolumnsÚ_characteristic_overheadÚoverheadr³   r   )r.   rð   s     r   r0   z_Encoding.__init__’  sD   € ØˆŒ
Ü˜uÓ%ˆŒ
Ø—}‘} UÓ+ˆŒØ×5Ñ5°d·l±lÓCˆŒÜ“Uˆ�
r   c                 ó:   — | j                   j                  |«       y r#   )r   r´   )r.   Úrows     r   rH   z_Encoding.append™  s   € Ø�
‰
�‰�sÕr   c                 ó:   — | j                   j                  |«       y r#   )r   rÆ   )r.   Úlsts     r   Úextendz_Encoding.extendœ  s   € Ø�
‰
×Ñ˜#Õr   c                 ó2   — | j                   | j                  fS r#   )rñ   rð   r†   s    r   Úwidth_sort_keyz_Encoding.width_sort_keyŸ  s   € Ø�z‰z˜4Ÿ:™:Ð%Ð%r   c                 ó,   — d}|t        | «      dz  z  }|S )zOReturns overhead in bytes of encoding this characteristic
        as a VarData.é
   é   r   )ró   Úcs     r   rô   z"_Encoding._characteristic_overhead¢  s"   € ð ˆØ	ŒY�wÓ !Ñ#Ñ#ˆØˆr   c                 ó@   — d}d}| r| dz  r||z  }| dz  } |dz  }| rŒ|S )Nr   rf   é   é   r   )rð   Úcolsrq   s      r   rò   z_Encoding._columnsª  s=   € àˆØˆÙØ�vŠ~Ø˜‘	�Ø�a‰KˆEØ�!‰GˆAò	 ð
 ˆr   c                 ó|  — |j                   | j                   z  }t        |«      }| j                  |j                  z  }t        j	                  |«      }| j
                  ­|j
                  z   |z
  || j                  z
  t        | j                  «      z  z
  ||j                  z
  t        |j                  «      z  z
  }|S r#   )	rð   r   ró   rî   rô   rõ   rñ   r;   r   )r.   Úother_encodingÚcombined_charsÚcombined_widthÚcombined_columnsÚcombined_overheadÚcombined_gains          r   Úgain_from_mergingz_Encoding.gain_from_mergingµ  s¹   € Ø'×-Ñ-°·
±
Ñ:ˆÜ" >Ó2ˆØŸ<™<¨.×*@Ñ*@Ñ@ÐÜ%×>Ñ>Ð?OÓPÐà�]‰]ˆNØ×%Ñ%ñ&àñ ð  §
¡
Ñ*¬c°$·*±*«oÑ=ñ>ð  × 4Ñ 4Ñ4¼¸N×<PÑ<PÓ8QÑQñ	Rð 	ð Ðr   N)rr   rs   rt   r0   rH   rú   rü   r°   rô   rò   r  r   r   r   rî   rî   ‘  sC   „ òòòò&ð ñó ðð ñó ðór   rî   c                   ó(   — e Zd Zd„ Zd„ Zed„ «       Zy)Ú_EncodingDictc                 ó&   — t        |«      x}| |<   |S r#   )rî   )r.   rð   Úrs      r   Ú__missing__z_EncodingDict.__missing__Å  s   € Ü# EÓ*Ð*ˆˆD�‰KØˆr   c                 óN   — | j                  |«      }| |   j                  |«       y r#   )Ú_row_characteristicsrH   )r.   r÷   rð   s      r   Úadd_rowz_EncodingDict.add_rowÉ  s$   € Ø×)Ñ)¨#Ó.ˆØˆU‰×Ñ˜3Õr   c                 óæ   — d}d}d}| D ]4  }|r||z  }d|cxk  rdk  s
n ||dz  z  }d|cxk  rdk  sn d	} n|d
z  }Œ6 |r/d}d}| D ]&  }|r||dz  z  }d|cxk  rdk  s
n ||dz  z  }|d
z  }Œ( |S )z+Returns encoding characteristics for a row.Fr   rf   i€ÿÿÿé   rÿ   i €ÿÿiÿ  Tr  é   é   r   )r÷   Ú	longWordsrð   rq   Úvs        r   r  z"_EncodingDict._row_characteristicsÍ  sÁ   € ð ˆ	àˆØˆØò 	ˆAÙØ˜‘
�Ø˜AÔ$ Ô$Ø˜˜V™Ñ#�Ø˜aÔ( 5Ô(Ø �	ÙØ�!‰G‰Að	ñ àˆEØˆAØò �ÙØ˜Q ™ZÑ'�EØ !Ô, uÔ,Ø˜Q ™ZÑ'�EØ�a‘‘ðð ˆr   N)rr   rs   rt   r  r  r°   r  r   r   r   r  r  Ä  s    „ òò ð ñó ñr   r  rf   c           
      ó	  — t        | j                  j                  «      }dg|z  }i }t        «       }t	        | j
                  «      D ]Ð  \  }}|j                  }	t	        |j                  «      D ]§  \  }
}t        |«      }|dk(  r"t        |	|«      D ]  \  }}||xx   |z  cc<   Œ n0t        |	|«      D ]!  \  }}||xx   t        ||z  «      |z  z  cc<   Œ# t        |«      }|rt        |«      sd||dz  |
z   <   ŒŒ|j                  |«       |||dz  |
z   <   Œ© ŒÒ t        |j                  «       t         j"                  ¬«      }~g }t	        |«      D ]N  \  }}t%        |dz   t        |«      «      D ].  }||   }|j'                  |«      }|dkD  sŒt)        || ||f«       Œ0 ŒP |�rt+        |«      \  }}}||   �||   €Œ||   ||   }}d\  ||<   ||<   |j,                  |j,                  z  }t!        |«      }|j/                  |j0                  «       |j/                  |j0                  «       t	        |«      D ]h  \  }}|€Œ	|j,                  |k(  r!|j/                  |j0                  «       d||<   Œ9|j'                  |«      }|dkD  sŒPt)        || |t        |«      f«       Œj |j3                  |«       |r�Œ|D �cg c]  }|€Œ|‘Œ	 }}i }|j5                  t         j"                  ¬«       g | _        |D ]Ã  }t        |j0                  «      }|sŒt        | j
                  «      }t7        j
                  «       }| j
                  j3                  |«       t%        |«      |_        t        |j                  «      |_        |dd |dd c|_        }t	        |j                  «      D ]  \  }
}|dz  |
z   ||<   Œ |rŒ©ŒÅ t:        t:        i}|j1                  «       D ]  \  }}|�||   nt:        ||<   Œ t        | j                  j                  «      | j                  _        t        | j
                  «      | _        | j
                  D ],  }t        |j                  «      |_         |jC                  «        Œ. | jE                  «        |S c c}w )z@Optimize storage. Returns mapping from old VarIdxes to new ones.r   rf   Nrg   r   )NNrF   )#r;   r�   r<   r  rp   r>   r¦   r@   r7   rŸ   rU   r   Úanyr  r   rÖ   rî   rü   r¶   r  r   r   rð   rú   r   rH   ÚsortrÎ   rw   r¥   r=   r?   rA   r:   r¸   )r.   Úuse_NO_VARIATION_INDEXÚquantizationÚnÚzeroesÚfront_mappingÚ	encodingsr¨   rC   rN   r©   Úitemr÷   r™   r  ÚtodoÚheaprq   ÚencodingÚjr  Úcombining_gainÚ_r  Úcombined_encodingÚkÚencÚback_mappingr   Ú
varidx_maps                                 r   ÚVarStore_optimizer0  ì  s–  € ôX 	ˆD×Ñ×%Ñ%Ó&€AØˆS�1‰W€Fà€Mä“€Iô ! §¡Ó.ò 7‰ˆˆtØ×+Ñ+ˆä$ T§Y¡YÓ/ò 	7‰KˆE�4Ü�v“,ˆCà˜qÒ Ü$'¨°tÓ$<ò (‘L�I˜qØ˜	“N aÑ'”Nñ(ô %(¨°tÓ$<ò ‘L�I˜qØ˜	“NÜ˜a ,Ñ.Ó/°,Ñ>ñ”Nðô
 ˜“*ˆCá%¬c°#¬hØ7;�˜u¨™{¨eÑ3Ñ4Øà×Ñ˜cÔ"Ø36ˆM˜5 B™;¨%Ñ/Ò0ñ'	7ð7ô2 �)×"Ñ"Ó$¬)×*BÑ*BÔC€DØð €DÜ  “ò 8‰ˆˆ8Ü�q˜1‘uœc $›iÓ(ò 	8ˆAØ! !™WˆNØ%×7Ñ7¸ÓGˆNØ Ó!Ü˜  °°AÐ6Õ7ñ		8ð8ò Ü˜$“-‰ˆˆ1ˆaØ�‰7ˆ?˜d 1™g˜oØà#'¨¡7¨D°©G�.ˆØ%ÑˆˆQ‰��a‘ð (×-Ñ-°·±Ñ>ˆÜ% nÓ5ÐØ× Ñ  §¡Ô0Ø× Ñ  ×!5Ñ!5Ô6ä “oò 	@‰FˆAˆsØˆ{Øð �y‰y˜NÒ*Ø!×(Ñ(¨¯©Ô3Ø��Q‘Øà.×@Ñ@ÀÓEˆNØ Ó!Ü˜  °´C¸³IÐ>Õ?ð	@ð 	�‰Ð%Ô&ó; ð> +/ÖG˜h°(Ñ2F’ÐG€IÐGð €LØ‡N�N”y×/Ñ/€NÔ0Ø€D„LØò ;ˆÜ�x—~‘~Ó&ˆâÜ˜Ÿ™Ó%ˆEÜ—:‘:“<ˆDØ�L‰L×Ñ Ô%Ü"'¨£(ˆDÔÜ"% d×&9Ñ&9Ó":ˆDÔð  % W f˜~¨u°V°W¨~ÐˆDŒI�uä(¨¯©Ó3ò ;‘��tØ&+¨r¡k°UÑ%:�˜TÒ"ð;ó ð;ô" %Ô&8Ð9€JØ×#Ñ#Ó%ò Q‰ˆˆ1Ø+,¨=˜ QšÔ>Pˆ
�1ŠðQô &)¨×);Ñ);×)BÑ)BÓ%C€D×ÑÔ"Ü˜DŸL™LÓ)€DÔØ—‘ò ˆÜ˜TŸY™Y›ˆŒØ�‰�ðð
 	×ÑÔàÐùòK Hs   Ê=RËRNc                 ód  — ddl m} ddlm} ddlm} ddlm}  |dt        j                  ¬«      }|j                  dt        d	¬
«       |j                  d«       |j                  dd¬«       |j                  | «      } |d¬«       |j                  }|j                  }|j                  }	 ||«      }
|
d   }|j                   j"                  } |«       }|j%                  ||
«       t'        |j)                  «       «      }t+        d|z  «       |j-                  |¬«      } |«       }|j%                  ||
«       t'        |j)                  «       «      }t+        d|z  «       |	�O|j                   j/                  |«       d|
v r|
d   j                   j/                  |«       |
j1                  |	«       yy)z&Optimize a font's GDEF variation storer   )ÚArgumentParser)ÚconfigLogger)ÚTTFont)ÚOTTableWriterzvarLib.varStore)ÚprogÚdescriptionz--quantizationrf   )rÍ   ÚdefaultÚfontfileÚoutfileú?)ÚnargsÚINFO)ÚlevelÚGDEFzBefore: %7d bytes)r  zAfter:  %7d bytesNÚGPOS)Úargparser2  Ú	fontToolsr3  ÚfontTools.ttLibr4  ÚfontTools.ttLib.tables.otBaser5  ÚmainÚ__doc__Úadd_argumentÚintÚ
parse_argsr  r9  r:  ÚtableÚVarStoreÚcompiler;   Ú
getAllDataÚprintr:   Úremap_device_varidxesÚsave)Úargsr2  r3  r4  r5  ÚparserÚoptionsr  r9  r:  ÚfontÚgdefÚstoreÚwriterÚsizer/  s                   r   rE  rE  °  su  € å'Ý&Ý&Ý;áÐ!2ÄÇÁÔM€FØ
×ÑÐ(¬s¸AÐÔ>Ø
×Ñ˜
Ô#Ø
×Ñ˜	¨ÐÔ-Ø×Ñ Ó%€Gñ �vÕà×'Ñ'€LØ×Ñ€HØ�o‰o€Gá�(Ó€DØ�‰<€DØ�J‰J×Ñ€Eá‹_€FØ	‡M�M�&˜$ÔÜˆv× Ñ Ó"Ó#€DÜ	Ð
 Ñ
$Ô%à—‘¨\�Ó:€Já‹_€FØ	‡M�M�&˜$ÔÜˆv× Ñ Ó"Ó#€DÜ	Ð
 Ñ
$Ô%àÐØ�
‰
×(Ñ(¨Ô4Ø�T‰>Ø�‰L×Ñ×4Ñ4°ZÔ@à�	‰	�'Õð r   Ú__main__)Trf   r#   )AÚfontTools.misc.roundToolsr   r   ÚfontTools.misc.intToolsr   ÚfontTools.ttLib.tablesr   rÎ   ÚfontTools.varLib.modelsr   ÚfontTools.varLib.builderr	   r
   r   r   Ú	functoolsr   Úcollectionsr   Úheapqr   r   r¥   rK  r   Úobjectr!   rU   rz   r>   rh   rƒ   Ú	VarRegionr˜   r‡   Ú__bool__r‰   r³   rÄ   Úsubset_varidxesrÉ   r¸   rÑ   rß   rã   r?  Úcollect_device_varidxesr@  rè   rì   rO  rî   r“   r  r0  r:   rE  rr   Úsysr;   ÚargvÚexitÚdoctestÚtestmodÚfailedr   r   r   ú<module>rm     s¼  ðß 6Ý -Ý 1Ý 1÷ó õ Ý #ß #ð ×*Ñ*Ð Ø!3€‡�Ô ò<ôD˜Fô DðN ,1ô $ð %€‡
�
Ô òð 1€‡�Ô òð )€‡�Ô ô,E˜ô ,Eðr ØÙ‹Uð>ð ô>ðB 7€‡�Ô ð -6À_ô Jð2 3€‡�Ô òò,5òð
 #A€‡�Ô Ø"@€‡�Ô ò'òð
 !=€‡�Ô Ø <€‡�Ô ô0�ô 0ôf%�Dô %óP~ðB )€‡�Ô ó)ðX ˆzÒÛá
ˆ3�8‰8ƒ}�qÒØˆ�‰‘“ÔÛà€C‡H�Hˆ_ˆW�_‰_Ó×%Ñ%Õ&ð r   