Ë
    ^ãjÚ�  ã                   óÔ  — 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 d d	lZej.                  Zeej0                  _        d
„ Z G d„ de«      Zedœd„Zeej<                  _        d„ Z e ejB                  _"        d„ Z#e#ej0                  _$         G d„ de«      Z%dd e&«       fddœd„Z'e'ej0                  _(        dddœd„Z)e)ej0                  _*        d„ Z+d„ Z,d„ Z-e-ej\                  _/        e-ej`                  _/        e-ejb                  _/        e-ejd                  _/        e-ejf                  _/        d„ Z4d	dœd „Z5e5ej\                  _6        e5ej`                  _6        e5ejb                  _6        e5ejn                  _6        e5ejd                  _6        e5ejf                  _6         G d!„ d"e«      Z8 G d#„ d$e9«      Z:d-d&„Z;e;ej0                  _<        d'„ Z=d(Z>d)Z?d.d*„Z@e@ej0                  _A        d.d+„ZBeCd,k(  r`d d	lDZD eEeDjŒ                  «      d%kD  r eDjŽ                   eB«       «       d d	lHZH eDjŽ                   eHj’                  «       j”                  «       y	y	)/é    )ÚnoRoundÚotRound©Ú	bit_count)ÚotTables)ÚsupportScalar)ÚbuildVarRegionListÚbuildVarStoreÚbuildVarRegionÚbuildVarData)Úpartial)Údefaultdict)ÚheappushÚheappopNc                 óL   — t        t        | j                  «       d„ ¬«      «      S )Nc                 ó   — | d   S ©Nr   © )Úkvs    ú[/var/www/html/metafoliadorv2/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                   óN   — e Zd ZdZi fd„Zd„ Zd„ Zd„ Zd„ Ze	d„ «       Z
d„ Zd	„ Zy
)ÚVarStoreInstancera  Evaluate a VarStore's deltas at a (mutable via setLocation) location.

    Region supports are cached for the lifetime of the instancer: after
    mutating the store's regions (or the fvar axes), construct a new
    instancer rather than reusing this one via setLocation.
    c                 óÐ   — || _         |�|j                  dk(  sJ ‚|r|j                  ng | _        |r|j                  j
                  ng | _        i | _        | j                  |«       y rv   )	r�   ÚFormatr>   Ú_varDataÚVarRegionListr<   Ú_regionsr*   ÚsetLocation)r.   Úvarstorer�   Úlocations       r   r0   zVarStoreInstancer.__init__Ê   s_   € Ø"ˆŒØÐ 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                  |«      }|€7| j                  |   j                  | j                  «      }|| j                   |<   |S r#   )r*   rG   rŽ   Úget_supportr�   )r.   Ú	regionIdxÚsupports      r   Ú_getSupportzVarStoreInstancer._getSupportÝ   sK   € Ø—.‘.×$Ñ$ YÓ/ˆØˆ?Ø—m‘m IÑ.×:Ñ:¸4¿>¹>ÓJˆGØ(/ˆD�N‰N˜9Ñ%Øˆr   c                 ó¨   — | j                   j                  |«      }|€4t        | j                  | j	                  |«      «      }|| j                   |<   |S r#   )r–   rG   r   r‘   r›   )r.   r™   Úscalars      r   Ú
_getScalarzVarStoreInstancer._getScalarä   sI   € Ø—‘×"Ñ" 9Ó-ˆØˆ>Ü" 4§=¡=°$×2BÑ2BÀ9Ó2MÓNˆ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                  }|t        |«      k\  s|t        ||   j                  «      k\  ry||   j                  D �cg c]  }| j                  |«      ‘Œ }}||   j                  |   }| j                  ||«      S c c}w )Nrg   rF   r    )ÚNO_VARIATION_INDEXrŒ   r;   r@   ÚVarRegionIndexrž   r¥   )r.   ÚvaridxÚmajorÚminorÚvarDataÚrir¢   r\   s           r   Ú__getitem__zVarStoreInstancer.__getitem__ô   s¢   € Ø ‘| V¨f¡_ˆuˆØÔ'Ò'ØØ—-‘-ˆð
 ”C˜“LÒ  E¬S°¸±×1DÑ1DÓ-EÒ$EØØ18¸±×1NÑ1NÖO¨2�4—?‘? 2Õ&ÐOˆÐOØ˜‘×$Ñ$ UÑ+ˆØ×3Ñ3°F¸GÓDÐDùò Ps   ÁB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   Ú__doc__r0   r�   r”   r›   rž   Ústaticmethodr¥   r®   r±   r   r   r   r‰   r‰   Â   sE   „ ñð 68ó 
#òòòòð ñó ðò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Ì   T  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(  s)t        | t        j                  «      r| j
                  d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)z‰Visit Device and format-2 ConditionTable variation indices.

    Works on otData-style classes, including nested boolean conditions.
    é   ÚgetConvertersÚpostReadN)ÚtypeÚotÚDeviceÚ
isinstanceÚConditionTabler‹   r7   Ú_visitÚhasattrrÏ   r¸   ÚnameÚValueRecordÚ__dict__Úvalues)r.   ÚfuncÚthatÚconvs       r   rÖ   rÖ   p  sã   € ô ˆDƒz”R—Y‘YÒÜ�4œ×*Ñ*Ô+°·±¸qÒ0@áˆT�
ä	�Dœ$Ô	Øò 	ˆDÜ�4˜Õñ	ô 
��Ô	'´¸¸jÔ0IØ×&Ñ&Ó(ò 	#ˆDÜ˜4 §¡¨DÓ1ˆDØÑÜ�t˜TÕ"ñ	#ô
 
�Dœ"Ÿ.™.Ô	)Ø—M‘M×(Ñ(Ó*ò 	ˆDÜ�4˜Õñ	ð 
*r   c                 óæ   — t        | t        j                  «      r|j                  | j                  «       y| j
                  dk(  r,|j                  | j                  dz  | j                  z   «       yy)z<Add a Device or ConditionTable variation index to the set s.é €  rg   N)rÔ   rÒ   rÕ   r·   ÚVarIdxÚDeltaFormatÚ	StartSizeÚEndSize)r.   r¤   s     r   Ú_Device_recordVarIdxrå   Š  sS   € ä�$œ×)Ñ)Ô*Ø	�‰ˆd�k‰kÕØ	×	Ñ	˜VÒ	#Ø	�‰ˆt�~‰~ Ñ# t§|¡|Ñ3Õ4ð 
$r   c                 ó>   — t        t        |¬«      }t        | |«       y )N)r¤   )r   rå   rÖ   )r.   ÚvaridxesÚadders      r   ÚObject_collect_device_varidxesré   ’  s   € ÜÔ(¨HÔ5€EÜ
ˆ4�Õr   c                 óZ  — t        | «      |v ry|j                  t        | «      «       t        | t        j                  «      r&|j                  | j                  t        «      | _        y| 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Õ   rG   rá   r§   râ   rã   rä   )r.   ÚmappingÚdonerj   s       r   Ú_Device_mapVarIdxrî   ž  s�   € ä	ˆ$ƒx�4ÑØØ‡H�HŒR�‹XÔÜ�$œ×)Ñ)Ô*Ø—k‘k $§+¡+Ô/AÓBˆ�Ø	×	Ñ	˜VÒ	#Ø˜$Ÿ.™.¨BÑ.°$·,±,Ñ>Ñ?ˆØ 2™ˆŒØ ‘ˆ�ð 
$r   ©rí   c                óX   — |€
t        «       }t        t        ||¬«      }t        | |«       y )N)rì   rí   )r¶   r   rî   rÖ   )r.   Úvaridxes_maprí   Úmappers       r   ÚObject_remap_device_varidxesró   «  s'   € Ø€|Ü‹uˆÜÔ&°À4ÔH€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   )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_optimizer6    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c                 óZ   — | |k(  ry| |k  s|| k  ry| |k  r| |z
  ||z
  z  S || z
  ||z
  z  S )zIPer-axis support-scalar factor at coordinate v (supportScalar semantics).ç      ð?r    r   )r   ÚstartÚpeakÚends       r   Ú
_tentValuer<  Ù  sI   € àˆD‚yØØˆE‚z�S˜A’XØØˆ4‚xØ�E‘	˜d U™lÑ+Ð+Ø�!‰G˜˜d™
Ñ#Ð#r   é @  g      ?c                 óÒ  ‡‡‡!‡"‡#— ˆˆfd„}|t         k(  rg }nì|dz	  }|dz  }| j                  |   }	| j                  j                  }
|	j                  |   }g }t        |	j                  |«      D ]“  \  }}|sŒ	|
|   }g }t        |j                  «      D ]Y  \  }}|j                  }|j                  }|j                  }|dk(  s
||kD  s||kD  rŒ:|dk  r|dkD  rŒE|j                  ||||f«       Œ[ |j                  ||f«       Œ• i Š!|� ||«      \  Š#Š"‰#‰"h‰!|<   |D ]¼  \  }}|D ]²  \  }}}}|‰!vr ||«      \  Š#Š"‰#‰"h‰!|<    ||«      \  Š#Š"‰!|   j                  ˆ"ˆ#fd„|||fD «       «       ||k(  r/‰!|   j                  t        t!        |t"        z
  ‰#«      ‰"«      «       ||k(  sŒ„‰!|   j                  t        t!        |t"        z   ‰#«      ‰"«      «       Œ´ Œ¾ d}‰!j%                  «       D ]  }|t'        |«      z  }|t(        kD  sŒ n |t(        k  rÞt+        ‰!«      }t        |«      D ��ci c]  \  }}||“Œ
 }}}dx}}t-        j.                  ˆ!fd„|D «       Ž D ]}  }d	}|D ]<  \  }}d
}|D ]%  \  }}}}|t1        |||      |||«      z  }|dk(  sŒ% n |sŒ5|||z  z  }Œ> |�|t3        |||      dz  «      z  }|€|x}}Œft        ||«      }t!        ||«      }Œ t3        |«      t3        |«      fS d	x}}|D ]£  \  }}d
x}} |D ]e  \  }}}} ||«      \  Š#Š"| t1        t        t!        |‰#«      ‰"«      |||«      z  } |t        t1        ‰#|||«      t1        ‰"|||«      «      z  }| dk(  sŒe n | dk(  rŒz|t        ||z  || z  «      z  }|t!        ||z  || z  «      z  }Œ¥ |�- ||«      \  Š#Š"|t3        ‰#dz  «      z  }|t3        ‰"dz  «      z  }t3        |«      t3        |«      fS c c}}w )u<  Conservatively bound the value this VarStore produces for varIdx.

    Returns (minV, maxV) in F2Dot14 delta units, guaranteed to cover the
    truly reachable range as the input axes vary over their extents:
    [-1, +1] per axis, or the [min, max] interval from axisLimits (a dict of
    axis tag to a (min, default, max, ...) sequence) for axes listed there.
    If identityAxisIndex is not None, that axis's own identity contribution
    (its coordinate, in F2Dot14 units) is added to the bound.

    Before the final OpenType rounding, the produced value is piecewise
    multilinear in the axis coordinates (each region's scalar is a product
    of independent per-axis tents), so over the box its exact extremes are
    attained at vertices of the grid formed by each axis's tent
    breakpoints. One-sided tents (start == peak or peak == end) are
    discontinuous at their peak, so the grid also includes the adjacent
    F2Dot14 coordinate on the open side. When that grid is small enough
    (real fonts) it is enumerated and the result is exact; otherwise the
    result falls back to a per-region interval bound, which ignores
    correlations between regions and may be wider than the true range â€”
    never narrower. Callers use this to cull provably-unreachable
    variation data, so conservativeness is a soundness requirement, not a
    nicety. The fallback costs O(regions Ã— axes); the cap on the exact
    path keeps crafted fonts from hanging the instancer.

    Raw extrema are rounded only after summing the identity and delta terms,
    matching avar2 processing.
    c                 óJ   •— ‰|    j                   }|‰v r‰|   }|d   |d   fS y)Nr   rÎ   )g      ð¿r8  )r~   )ÚaxisIdxÚtagÚlimitsÚ
axisLimitsÚfvarAxess      €€r   ÚaxisIntervalz*VarStore_getExtremes.<locals>.axisInterval	  s:   ø€ Ø�wÑ×'Ñ'ˆØ�*ÑØ ‘_ˆFØ˜!‘9˜f Q™iÐ'Ð'Ør   rg   rF   r   Nc              3   óJ   •K  — | ]  }t        t        |‰«      ‰«      –— Œ y ­wr#   )ÚminÚmax)rn   r   ÚhiÚlos     €€r   ro   z'VarStore_getExtremes.<locals>.<genexpr>7  s   øè ø€ Ò!R¸!¤#¤c¨!¨R£j°"×"5Ñ!Rùs   ƒ #rf   c              3   ó:   •K  — | ]  }t        ‰|   «      –— Œ y ­wr#   )r   )rn   rq   Úbreakpointss     €r   ro   z'VarStore_getExtremes.<locals>.<genexpr>H  s   øè ø€ Ò)VÀQ¬&°¸Q±×*@Ñ)Vùs   ƒr    r8  r=  )r§   r>   r�   r<   r@   r¡   r¨   rp   r|   r   r}   r€   rH   rÉ   r·   rG  rH  Ú_F2DOT14_UNITrÛ   r;   Ú_GET_EXTREMES_MAX_GRIDr   Ú	itertoolsÚproductr<  r   )$r.   rj   rD  rC  ÚidentityAxisIndexrE  ÚactiveRegionsrª   r«   r¬   rM   r\   ÚregionIndexr£   rO   Útentsrq   Ú
regionAxisr9  r:  r;  ÚgridSizeÚpointsÚaxisIndicesr&  ÚaxisPosÚminVÚmaxVÚvertexr   r�   Ú	scalarMinÚ	scalarMaxrL  rI  rJ  s$     ``                             @@@r   ÚVarStore_getExtremesr_  ì  sÏ  ü€ õ:ð Ô#Ò#Ø‰à˜"‘ˆØ˜‘ˆØ—,‘,˜uÑ%ˆØ×$Ñ$×+Ñ+ˆØ—‘˜eÑ$ˆð ˆÜ"% g×&<Ñ&<¸fÓ"Eò 	1ÑˆK˜ÙØØ˜[Ñ)ˆFØˆEÜ!*¨6×+?Ñ+?Ó!@ò 	4‘��:Ø"×-Ñ-�Ø!×+Ñ+�Ø ×)Ñ)�à˜1’9 ¨¢°°s²
ØØ˜1’9  q¢ØØ—‘˜a ¨¨cÐ2Õ3ð	4ð × Ñ  %¨ Õ0ð	1ð$ €KØÐ$ÙÐ/Ó0‰ˆˆBØ*,¨b¨ˆÐ%Ñ&Ø%ò 
K‰ˆˆuØ#(ò 		KÑˆAˆu�d˜CØ˜Ñ#Ù% a›‘��BØ"$ b �˜A‘Ù! !“_‰FˆB�Ø˜‰N×!Ñ!Ô!RÀÀtÈSÐ?QÔ!RÔRØ˜Š}Ø˜A‘×"Ñ"¤3¤s¨4´-Ñ+?ÀÓ'DÀbÓ#IÔJØ�s‹{Ø˜A‘×"Ñ"¤3¤s¨4´-Ñ+?ÀÓ'DÀbÓ#IÕJñ		Kð
Kð €HØ×$Ñ$Ó&ò ˆØ”C˜“KÑˆØÔ,Ó,Ùðð
 Ô)Ò)ô ˜[Ó)ˆÜ$-¨kÓ$:×;™D˜A˜q�1�a‘4Ð;ˆÑ;ØÐˆˆtÜ×'Ñ'Ó)VÈ+Ô)VÐWò 	$ˆFØˆAØ -ò (‘��uØ�Ø+0ò Ñ'�A�u˜d CØœj¨°¸±
Ñ);¸UÀDÈ#ÓNÑN�FØ “{Ùðò Ø˜ ™Ñ'‘Að(ð !Ð,Ø”W˜V GÐ,=Ñ$>Ñ?À%ÑGÓHÑH�Øˆ|Ø��‘tä˜4 “|�Ü˜4 “|‘ð!	$ô" �t‹}œg d›mÐ+Ð+ð
 Ð€Dˆ4Ø%ò :‰ˆˆuØ #Ð#ˆ	�IØ#(ò 
	ÑˆAˆu�d˜CÙ! !“_‰FˆB�ð œ¤C¬¨D°"«°rÓ$:¸EÀ4ÈÓMÑMˆIØœÜ˜2˜u d¨CÓ0Ü˜2˜u d¨CÓ0óñ ˆIð ˜A‹~Ùð
	ð ˜Š>ØØ”�E˜IÑ% u¨yÑ'8Ó9Ñ9ˆØ”�E˜IÑ% u¨yÑ'8Ó9Ñ9‰ð!:ð$ Ð$ÙÐ/Ó0‰ˆˆBØ”˜˜U™
Ó#Ñ#ˆØ”˜˜U™
Ó#Ñ#ˆä�4‹=œ' $›-Ð'Ð'ùóa <s   È-O#c                 ó�  — 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  «       |	�et/        «       }|j                   j1                  ||¬«       dD ]'  }||
v sŒ|
|   j                   j1                  ||¬«       Œ) |
j3                  |	«       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 bytesNrï   )ÚGSUBÚGPOSÚMATHÚJSTF)Úargparsera  Ú	fontToolsrb  ÚfontTools.ttLibrc  ÚfontTools.ttLib.tables.otBaserd  Úmainr²   Úadd_argumentÚintÚ
parse_argsr%  rh  ri  ÚtableÚVarStoreÚcompiler;   Ú
getAllDataÚprintr:   r¶   Úremap_device_varidxesÚsave)Úargsra  rb  rc  rd  ÚparserÚoptionsr%  rh  ri  ÚfontÚgdefÚstoreÚwriterÚsizer5  rí   rA  s                     r   rw  rw  |  s—  € å'Ý&Ý&Ý;áÐ!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Ü	Ð
 Ñ
$Ô%àÐÜ‹uˆØ�
‰
×(Ñ(¨¸$Ð(Ô?Ø3ò 	MˆCØ�dŠ{Ø�S‘	—‘×5Ñ5°jÀtÐ5ÕLð	Mð 	�	‰	�'Õð r   Ú__main__)Trf   r#   )KÚfontTools.misc.roundToolsr   r   ÚfontTools.misc.intToolsr   ÚfontTools.ttLib.tablesr   rÒ   ÚfontTools.varLib.modelsr   ÚfontTools.varLib.builderr	   r
   r   r   Ú	functoolsr   Úcollectionsr   Úheapqr   r   rO  r§   r|  r   Úobjectr!   rU   rz   r>   rh   rƒ   Ú	VarRegionr˜   r‡   Ú__bool__r‰   r¶   rÇ   Úsubset_varidxesrÌ   r»   rÖ   rå   ré   rn  Úcollect_device_varidxesrp  ro  rq  rr  rî   ró   r€  ÚBASErõ   r“   r  r6  r:   r<  rN  rM  r_  ÚgetExtremesrw  rr   Úsysr;   ÚargvÚexitÚdoctestÚtestmodÚfailedr   r   r   ú<module>r      s@  ðß 6Ý -Ý 1Ý 1÷ó õ Ý #ß #Û à×*Ñ*Ð Ø!3€‡�Ô ò<ôD˜Fô DðN ,1ô $ð %€‡
�
Ô òð 1€‡�Ô òð )€‡�Ô ôDE˜ô DEðb ØÙ‹Uð>ð ô>ðB 7€‡�Ô ð -6À_ô Jð2 3€‡�Ô òò45òð
 #A€‡�Ô Ø"@€‡�Ô Ø"@€‡�Ô Ø"@€‡�Ô Ø"@€‡�Ô ò
'ð >Bô ð !=€‡�Ô Ø <€‡�Ô Ø <€‡�Ô Ø <€‡�Ô Ø <€‡�Ô Ø <€‡�Ô ô0�ô 0ôf%�Dô %óP~ðB )€‡�Ô ò$ð !Ð Ø€óJ(ðZ /€‡�Ô ó+ð\ ˆzÒÛá
ˆ3�8‰8ƒ}�qÒØˆ�‰‘“ÔÛà€C‡H�Hˆ_ˆW�_‰_Ó×%Ñ%Õ&ð r   