§
    ¢”j~Y  ã                  ó’  — d Z ddlmZ g d¢ZddlmZ ddlmZ ddlm	Z	 ddl
mZ erdd	lmZmZ d
„ Zd„ Zd*d„Zd*d„Zd„ Z	 d+d,d„Z	 d+ddœd-d „Zd.d"„Z G d#„ d$e¦  «        Zd/d'„Zd*d(„Zed)k    rXddlZddlZ eej        ¦  «        dk    r ej         e¦   «         ¦  «          ej         ej        ¦   «         j         ¦  «         dS dS )0z%Variation fonts interpolation models.é    )Úannotations)ÚnormalizeValueÚnormalizeLocationÚsupportScalarÚpiecewiseLinearMapÚVariationModel)ÚMapping)ÚTYPE_CHECKING)ÚnoRoundé   )ÚVariationModelError)r	   ÚSequencec                ó   — d„ | D ¦   «         S )Nc                ó   — g | ]}|®|‘ŒS ©N© ©Ú.0Úls     úf/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/varLib/models.pyú
<listcomp>znonNone.<locals>.<listcomp>   s   € Ð,Ð,Ð,�!˜a˜mˆA˜m˜m˜mó    r   ©Úlsts    r   ÚnonNoner      s   € Ø,Ð,�sÐ,Ñ,Ô,Ð,r   c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó   K  — | ]}|d u V — Œ	d S r   r   r   s     r   ú	<genexpr>zallNone.<locals>.<genexpr>   s&   è è € Ð&Ð&˜Qˆq�DˆyÐ&Ð&Ð&Ð&Ð&Ð&r   ©Úallr   s    r   ÚallNoner!      s   € ÝÐ&Ð& #Ð&Ñ&Ô&Ñ&Ô&Ð&r   Nc                ó�   ‡ ‡‡— ‰€t          ˆ fd„|D ¦   «         ¦  «        S  ‰‰ ¦  «        Št          ˆˆfd„|D ¦   «         ¦  «        S )Nc              3  ó$   •K  — | ]
}‰|k    V — Œd S r   r   )r   ÚitemÚrefs     €r   r   zallEqualTo.<locals>.<genexpr>!   s'   øè è € Ð/Ð/ 4�3˜$’;Ð/Ð/Ð/Ð/Ð/Ð/r   c              3  ó6   •K  — | ]}‰ ‰|¦  «        k    V — Œd S r   r   )r   r$   ÚmappedÚmappers     €€r   r   zallEqualTo.<locals>.<genexpr>$   s0   øè è € Ð6Ð6¨$ˆv˜˜ ™œÒ%Ð6Ð6Ð6Ð6Ð6Ð6r   r   )r%   r   r(   r'   s   ` `@r   Ú
allEqualTor)      s`   øøø€ Ø€~ÝÐ/Ð/Ð/Ð/¨3Ð/Ñ/Ô/Ñ/Ô/Ð/àˆV�C‰[Œ[€FÝÐ6Ð6Ð6Ð6Ð6°#Ð6Ñ6Ô6Ñ6Ô6Ð6r   c                ó�   — | sdS t          | ¦  «        }	 t          |¦  «        }n# t          $ r Y dS w xY wt          |||¬¦  «        S )NT)r(   )ÚiterÚnextÚStopIterationr)   )r   r(   ÚitÚfirsts       r   ÚallEqualr0   '   sc   € Øð ØˆtÝ	ˆc‰Œ€BðÝ�R‘”ˆˆøÝð ð ð Øˆtˆtðøøøå�e˜R¨Ð/Ñ/Ô/Ð/s   •% ¥
3²3c                óz   — t          | ¦  «        t          |¦  «        k    sJ ‚d„ t          || ¦  «        D ¦   «         S )Nc                ó   — g | ]	\  }}|¯|‘Œ
S r   r   )r   r   Úts      r   r   zsubList.<locals>.<listcomp>4   s!   € Ð/Ð/Ð/‘$�!�Q¨QÐ/ˆAÐ/Ð/Ð/r   ©ÚlenÚzip)Útruthr   s     r   ÚsubListr8   2   s;   € Ýˆu‰:Œ:�˜S™œÒ!Ð!Ð!Ð!Ø/Ð/�#˜c 5™/œ/Ð/Ñ/Ô/Ð/r   FÚvÚfloatÚtripleúSequence[float]ÚextrapolateÚboolÚreturnc           
     óx  — |\  }}}||cxk    r|k    sn t          d|d›d|d›d|d›�¦  «        ‚|st          t          | |¦  «        |¦  «        } | |k    s||k    rdS | |k     r||k    s| |k    r||k    r| |z
  ||z
  z  S | |k    r||k    s#| |k     r||k    sJ d| › d|› d|› d|› d�	¦   «         ‚| |z
  ||z
  z  S )zÙNormalizes value based on a min/default/max triple.

    >>> normalizeValue(400, (100, 400, 900))
    0.0
    >>> normalizeValue(100, (100, 400, 900))
    -1.0
    >>> normalizeValue(650, (100, 400, 900))
    0.5
    z8Invalid axis values, must be minimum, default, maximum: z3.3fz, ç        zOoops... v=z
, triple=(ú))Ú
ValueErrorÚmaxÚmin)r9   r;   r=   ÚlowerÚdefaultÚuppers         r   r   r   7   sR  € ð #Ñ€Eˆ7�EØ�WÐ%Ð%Ò%Ð% Ò%Ð%Ð%Ð%Ýð:ØÐ9ð:ð :Ø$Ð9ð:ð :Ø-2Ð9ð:ð :ñ
ô 
ð 	
ð ð &Ý•�A�u‘”˜uÑ%Ô%ˆàˆG‚|€|�u ’~�~Øˆsà	ˆGŠˆ˜ Ò(Ð(¨a°'ªk¨k¸eÀwÒ>NÐ>NØ�G‘ ¨%¡Ñ0Ð0à�G’� ¨Ò 0Ð 0Ø�ŠKˆK˜E WÒ,Ð,Ð,ØB˜ÐBÐB eÐBÐB¨wÐBÐB¸%ÐBÐBÐBñ -Ô,Ð,à�G‘ ¨¡Ñ0Ð0r   )ÚvalidateÚlocationúMapping[str, float]Úaxesú(Mapping[str, tuple[float, float, float]]rI   údict[str, float]c               óÂ  — |r�t          |                      ¦   «         ¦  «        t          |                     ¦   «         ¦  «        k    sKJ t          |                      ¦   «         ¦  «        t          |                     ¦   «         ¦  «        z
  ¦   «         ‚i }|                     ¦   «         D ]6\  }}|                      ||d         ¦  «        }t	          |||¬¦  «        ||<   Œ7|S )aÓ  Normalizes location based on axis min/default/max values from axes.

    >>> axes = {"wght": (100, 400, 900)}
    >>> normalizeLocation({"wght": 400}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": 100}, axes)
    {'wght': -1.0}
    >>> normalizeLocation({"wght": 900}, axes)
    {'wght': 1.0}
    >>> normalizeLocation({"wght": 650}, axes)
    {'wght': 0.5}
    >>> normalizeLocation({"wght": 1000}, axes)
    {'wght': 1.0}
    >>> normalizeLocation({"wght": 0}, axes)
    {'wght': -1.0}
    >>> axes = {"wght": (0, 0, 1000)}
    >>> normalizeLocation({"wght": 0}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": -1}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": 1000}, axes)
    {'wght': 1.0}
    >>> normalizeLocation({"wght": 500}, axes)
    {'wght': 0.5}
    >>> normalizeLocation({"wght": 1001}, axes)
    {'wght': 1.0}
    >>> axes = {"wght": (0, 1000, 1000)}
    >>> normalizeLocation({"wght": 0}, axes)
    {'wght': -1.0}
    >>> normalizeLocation({"wght": -1}, axes)
    {'wght': -1.0}
    >>> normalizeLocation({"wght": 500}, axes)
    {'wght': -0.5}
    >>> normalizeLocation({"wght": 1000}, axes)
    {'wght': 0.0}
    >>> normalizeLocation({"wght": 1001}, axes)
    {'wght': 0.0}
    r   )r=   )ÚsetÚkeysÚitemsÚgetr   )rJ   rL   r=   rI   ÚoutÚtagr;   r9   s           r   r   r   X   sÏ   € ðZ ð 
Ý�8—=’=‘?”?Ñ#Ô#¥s¨4¯9ª9©;¬;Ñ'7Ô'7Ò7Ð7Ð7½¸X¿]º]¹_¼_Ñ9MÔ9MÕPSØ�IŠI‰KŒKñQ
ô Q
ñ :
Ñ7Ô7Ð7ð €CØ—z’z‘|”|ð Fð F‰ˆˆVØ�LŠL˜˜f QœiÑ(Ô(ˆÝ! ! V¸ÐEÑEÔEˆˆC‰ˆØ€Jr   Tc                ó‚  — |r|€t          d¦  «        ‚d}|                     ¦   «         D �]\  }\  }}}	|r8|dk    rŒ||k    s||	k    rŒ |dk     r|	dk    rŒ-|                      |d¦  «        }
n|| v sJ ‚| |         }
|
|k    rŒY|r„||         \  }}|
|k     r7||k    r1||k    r||	k     r||
|	z
  ||	z
  z  z  }Œ�||k     r||
|z
  ||z
  z  z  }Œ¢n<||
k     r6||	k    r0||k    r||k     r||
|z
  ||z
  z  z  }ŒÊ||k     r||
|	z
  ||	z
  z  z  }Œß|
|k    s|	|
k    rd} n&|
|k     r||
|z
  ||z
  z  z  }�Œ||
|	z
  ||	z
  z  z  }�Œ|S )a‡  Returns the scalar multiplier at location, for a master
    with support.  If ot is True, then a peak value of zero
    for support of an axis means "axis does not participate".  That
    is how OpenType Variation Font technology works.

    If extrapolate is True, axisRanges must be a dict that maps axis
    names to (axisMin, axisMax) tuples.

      >>> supportScalar({}, {})
      1.0
      >>> supportScalar({'wght':.2}, {})
      1.0
      >>> supportScalar({'wght':.2}, {'wght':(0,2,3)})
      0.1
      >>> supportScalar({'wght':2.5}, {'wght':(0,2,4)})
      0.75
      >>> supportScalar({'wght':2.5, 'wdth':0}, {'wght':(0,2,4), 'wdth':(-1,0,+1)})
      0.75
      >>> supportScalar({'wght':2.5, 'wdth':.5}, {'wght':(0,2,4), 'wdth':(-1,0,+1)}, ot=False)
      0.375
      >>> supportScalar({'wght':2.5, 'wdth':0}, {'wght':(0,2,4), 'wdth':(-1,0,+1)})
      0.75
      >>> supportScalar({'wght':2.5, 'wdth':.5}, {'wght':(0,2,4), 'wdth':(-1,0,+1)})
      0.75
      >>> supportScalar({'wght':3}, {'wght':(0,1,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      -1.0
      >>> supportScalar({'wght':-1}, {'wght':(0,1,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      -1.0
      >>> supportScalar({'wght':3}, {'wght':(0,2,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      1.5
      >>> supportScalar({'wght':-1}, {'wght':(0,2,2)}, extrapolate=True, axisRanges={'wght':(0, 2)})
      -0.5
    Nz2axisRanges must be passed when extrapolate is Trueg      ð?rA   )Ú	TypeErrorrR   rS   )rJ   ÚsupportÚotr=   Ú
axisRangesÚscalarÚaxisrF   ÚpeakrH   r9   ÚaxisMinÚaxisMaxs                r   r   r   �   sü  € ðD ð N�zÐ)ÝÐLÑMÔMÐMØ€FØ&-§m¢m¡o¤oð (3ñ (3Ñ"ˆÑ"ˆu�d˜EØð 	à�sŠ{ˆ{ØØ�tŠ|ˆ|˜t eš|˜|ØØ�sŠ{ˆ{˜u sš{˜{ØØ—’˜T 3Ñ'Ô'ˆAˆAà˜8Ð#Ð#Ð#Ð#Ø˜”ˆAØ�Š9ˆ9Øàð 	Ø)¨$Ô/ÑˆG�WØ�7Š{ˆ{˜u¨Ò/Ð/Ø˜7’?�? t¨e¢| |Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØØ˜t’^�^Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØð $ð ˜1’� ¨EÒ!1Ð!1Ø˜d’?�? u¨t¢| |Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØØ˜G’^�^Ø˜q 5™y¨T°E©\Ñ:Ñ:�FØà�Š:ˆ:˜ !š˜ØˆFØˆEàˆtŠ8ˆ8Ø�q˜5‘y T¨E¡\Ñ2Ñ2ˆF‰Fà�q˜5‘y T¨E¡\Ñ2Ñ2ˆF‰FØ€Mr   c                  óÞ   — e Zd ZdZ	 dddœd„Zd„ Zed„ ¦   «         Zeg fd„¦   «         Zd	„ Z	d
„ Z
d„ Zd„ Zedœd„Zedœd„Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Zedœd„Zedœd„ZdS )r   a5  Locations must have the base master at the origin (ie. 0).

    If axis-ranges are not provided, values are assumed to be normalized to
    the range [-1, 1].

    If the extrapolate argument is set to True, then values are extrapolated
    outside the axis range.

      >>> from pprint import pprint
      >>> axisRanges = {'wght': (-180, +180), 'wdth': (-1, +1)}
      >>> locations = [       {'wght':100},       {'wght':-100},       {'wght':-180},       {'wdth':+.3},       {'wght':+120,'wdth':.3},       {'wght':+120,'wdth':.2},       {},       {'wght':+180,'wdth':.3},       {'wght':+180},       ]
      >>> model = VariationModel(locations, axisOrder=['wght'], axisRanges=axisRanges)
      >>> pprint(model.locations)
      [{},
       {'wght': -100},
       {'wght': -180},
       {'wght': 100},
       {'wght': 180},
       {'wdth': 0.3},
       {'wdth': 0.3, 'wght': 180},
       {'wdth': 0.3, 'wght': 120},
       {'wdth': 0.2, 'wght': 120}]
      >>> pprint(model.deltaWeights)
      [{},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0},
       {0: 1.0, 4: 1.0, 5: 1.0},
       {0: 1.0, 3: 0.75, 4: 0.25, 5: 1.0, 6: 0.6666666666666666},
       {0: 1.0,
        3: 0.75,
        4: 0.25,
        5: 0.6666666666666667,
        6: 0.4444444444444445,
        7: 0.6666666666666667}]
    NF)rZ   c               óB  ‡ ‡— d„ ‰D ¦   «         Št          t          d„ ‰D ¦   «         ¦  «        ¦  «        t          ‰¦  «        k    rt          d¦  «        ‚‰‰ _        |�|ng ‰ _        |‰ _        |€0|r‰                      ‰¦  «        }nd„ ‰D ¦   «         }d„ |D ¦   «         }|‰ _        ‰                      ‰‰ j        ¬¦  «        }t          ‰|¬¦  «        ‰ _
        ˆ fd„‰D ¦   «         ‰ _        ˆfd	„‰ j
        D ¦   «         ‰ _        ‰                      ¦   «          i ‰ _        d S )
Nc                óJ   — g | ] }d „ |                      ¦   «         D ¦   «         ‘Œ!S )c                ó&   — i | ]\  }}|d k    ¯||“ŒS ©rA   r   ©r   Úkr9   s      r   ú
<dictcomp>z6VariationModel.__init__.<locals>.<listcomp>.<dictcomp>  s#   € Ð?Ð?Ð?™t˜q !°a¸3²h°h�a˜°h°h°hr   ©rR   ©r   Úlocs     r   r   z+VariationModel.__init__.<locals>.<listcomp>  s/   € ÐUÐUÐUÀCÐ?Ð? s§y¢y¡{¤{Ð?Ñ?Ô?ÐUÐUÐUr   c              3  ór   K  — | ]2}t          t          |                     ¦   «         ¦  «        ¦  «        V — Œ3d S r   )ÚtupleÚsortedrR   r   s     r   r   z*VariationModel.__init__.<locals>.<genexpr>  s:   è è € Ð?Ð?°•5� §¢¡	¤	Ñ*Ô*Ñ+Ô+Ð?Ð?Ð?Ð?Ð?Ð?r   zLocations must be unique.c                ó@   — h | ]}|                      ¦   «         D ]}|’ŒŒS r   ©rQ   ©r   rj   r\   s      r   ú	<setcomp>z*VariationModel.__init__.<locals>.<setcomp>"  s-   € ÐLÐLÐL CÀÇÂÁÄÐLÐL¸˜4ÐLÐLÐLÐLr   c                ó   — i | ]}|d “ŒS ))éÿÿÿÿr   r   )r   r\   s     r   rg   z+VariationModel.__init__.<locals>.<dictcomp>#  s   € Ð@Ð@Ð@°˜d GÐ@Ð@Ð@r   )Ú	axisOrder)Úkeyc                óD   •— g | ]}‰j                              |¦  «        ‘ŒS r   ©Ú	locationsÚindex©r   r   Úselfs     €r   r   z+VariationModel.__init__.<locals>.<listcomp>+  ó)   ø€ ÐCÐCÐC°A˜œ×,Ò,¨QÑ/Ô/ÐCÐCÐCr   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   ©ry   ©r   r   rx   s     €r   r   z+VariationModel.__init__.<locals>.<listcomp>,  ó%   ø€ ÐJÐJÐJ°a˜yŸš¨qÑ1Ô1ÐJÐJÐJr   )r5   rP   r   ÚorigLocationsrt   r=   ÚcomputeAxisRangesrZ   ÚgetMasterLocationsSortKeyFuncrm   rx   ÚmappingÚreverseMappingÚ_computeMasterSupportsÚ
_subModels)r{   rx   rt   r=   rZ   ÚallAxesÚkeyFuncs   ``     r   Ú__init__zVariationModel.__init__  sZ  øø€ ð VÐUÈ9ÐUÑUÔUˆ	å�sÐ?Ð?°YÐ?Ñ?Ô?Ñ?Ô?Ñ@Ô@ÅCÈ	ÁNÄNÒRÐRÝ%Ð&AÑBÔBÐBà&ˆÔØ&/Ð&;˜˜ÀˆŒØ&ˆÔØÐØð AØ!×3Ò3°IÑ>Ô>�
�
àLÐL¨9ÐLÑLÔL�Ø@Ð@¸Ð@Ñ@Ô@�
Ø$ˆŒØ×4Ò4Ø ¤ð 5ñ 
ô 
ˆõ   	¨wÐ7Ñ7Ô7ˆŒð DÐCÐCÐC¸ÐCÑCÔCˆŒØJÐJÐJÐJ¸4¼>ÐJÑJÔJˆÔà×#Ò#Ñ%Ô%Ð%ØˆŒˆˆr   c                ó  — d|vr| |fS t          d„ |D ¦   «         ¦  «        }| j                             |¦  «        }|€?t          t	          || j        ¦  «        | j        | j        | j        ¬¦  «        }|| j        |<   |t	          ||¦  «        fS )zºReturn a sub-model and the items that are not None.

        The sub-model is necessary for working with the subset
        of items when some are None.

        The sub-model is cached.Nc              3  ó   K  — | ]}|d uV — Œ	d S r   r   ©r   r9   s     r   r   z-VariationModel.getSubModel.<locals>.<genexpr>:  s&   è è € Ð1Ð1 a�A˜T�MÐ1Ð1Ð1Ð1Ð1Ð1r   ©r=   rZ   )	rl   r‡   rS   r   r8   r�   rt   r=   rZ   )r{   rR   ru   ÚsubModels       r   ÚgetSubModelzVariationModel.getSubModel1  s§   € ð �uÐÐØ˜�;ÐÝÐ1Ð1¨5Ð1Ñ1Ô1Ñ1Ô1ˆØ”?×&Ò& sÑ+Ô+ˆØÐÝ%Ý˜˜TÔ/Ñ0Ô0Ø”Ø Ô,Øœ?ð	ñ ô ˆHð $,ˆDŒO˜CÑ Ø�  eÑ,Ô,Ð,Ð,r   c                óÞ   — i }d„ | D ¦   «         }| D ][}|D ]V}|                      |d¦  «        }|                      |||f¦  «        \  }}t          ||¦  «        t          ||¦  «        f||<   ŒWŒ\|S )Nc                ó@   — h | ]}|                      ¦   «         D ]}|’ŒŒS r   ro   rp   s      r   rq   z3VariationModel.computeAxisRanges.<locals>.<setcomp>I  s-   € ÐDÐDÐD˜C¸¿º¹¼ÐDÐD°�4ÐDÐDÐDÐDr   r   )rS   rE   rD   )rx   rZ   rˆ   rj   r\   Úvaluer^   r_   s           r   r‚   z VariationModel.computeAxisRangesF  sŸ   € àˆ
ØDÐD 9ÐDÑDÔDˆØð 	Lð 	LˆCØð Lð L�ØŸš  aÑ(Ô(�Ø#-§>¢>°$¸À¸Ñ#GÔ#GÑ �˜Ý#& u¨gÑ#6Ô#6½¸EÀ7Ñ8KÔ8KÐ#K�
˜4Ñ Ð ðLð Ðr   c                óL  — i | vrt          d¦  «        ‚i }| D ]|}t          |¦  «        dk    rŒt          t          |¦  «        ¦  «        }||         }||vrdh||<   |||         vsJ d|›d|›d|›�¦   «         ‚||                              |¦  «         Œ}d„ } |||¦  «        }|S )NzBase master not found.r   rA   zValue "z" in axisPoints["z"] -->  c                ó    ‡ ‡‡— d„ Šˆˆ ˆfd„}|S )Nc                ó&   — | dk     rdn	| dk    rdndS )Nr   rs   r   r   )r9   s    r   ÚsignzJVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.signc  s    € Ø šU˜U�r�r¨a°!ªe¨e¨¨¸Ð:r   c           	     óÞ  •‡ — t          ‰ ¦  «        }ˆfd„‰                      ¦   «         D ¦   «         }ˆ fd„‰D ¦   «         }|                     ˆfd„t          ‰                      ¦   «         ¦  «        D ¦   «         ¦  «         |t          |¦  «         t          ˆfd„|D ¦   «         ¦  «        t          |¦  «        t          ˆ ˆfd„|D ¦   «         ¦  «        t          ˆ fd„|D ¦   «         ¦  «        fS )Nc                ó6   •— g | ]\  }}|‰v ¯	|‰|         v ¯|‘ŒS r   r   )r   r\   r“   Ú
axisPointss      €r   r   z]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>h  sA   ø€ ð ð ð á#˜˜eØ˜zÐ)Ð)¨e°zÀ$Ô7GÐ.GÐ.Gð à.GÐ.GÐ.Gr   c                ó   •— g | ]}|‰v ¯|‘Œ	S r   r   ©r   r\   rj   s     €r   r   z]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>m  s   ø€ ÐIÐIÐI¨¸TÀS¸[¸[˜t¸[¸[¸[r   c                ó   •— g | ]}|‰v¯|‘Œ	S r   r   ©r   r\   rt   s     €r   r   z]VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<listcomp>o  s#   ø€ ÐRÐRÐR˜d¸DÈ	Ð<QÐ<Q�TÐ<QÐ<QÐ<Qr   c              3  óN   •K  — | ]}|‰v r‰                      |¦  «        nd V — Œ dS )i   Nr~   rž   s     €r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>t  sR   øè è € ð ð à ð 26¸Ð1BÐ1B˜	Ÿš¨Ñ-Ô-Ð-Èðð ð ð ð ð r   c              3  ó:   •K  — | ]} ‰‰|         ¦  «        V — Œd S r   r   )r   r\   rj   r—   s     €€r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>y  s@   øè è € ð ð Ø,0˜˜˜S œY™œðð ð ð ð ð r   c              3  óB   •K  — | ]}t          ‰|         ¦  «        V — Œd S r   )Úabsrœ   s     €r   r   z\VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.key.<locals>.<genexpr>|  s>   øè è € ð ð Ø+/�˜C œI™œðð ð ð ð ð r   )r5   rR   Úextendrm   rQ   rl   )rj   ÚrankÚonPointAxesÚorderedAxesrt   rš   r—   s   `   €€€r   ru   zIVariationModel.getMasterLocationsSortKeyFunc.<locals>.getKey.<locals>.keyf  sd  øø€ Ý˜3‘x”x�ðð ð ð à'*§y¢y¡{¤{ðñ ô �ð
 JÐIÐIÐI°	ÐIÑIÔI�Ø×"Ò"ØRÐRÐRÐR¥f¨S¯XªX©Z¬ZÑ&8Ô&8ÐRÑRÔRñô ð ð Ý˜Ñ%Ô%Ð%Ýð ð ð ð à$/ðñ ô ñ ô õ ˜+Ñ&Ô&Ýð ð ð ð ð Ø4?ðñ ô ñ ô õ ð ð ð ð Ø3>ðñ ô ñ ô ðð r   r   )rš   rt   ru   r—   s   `` @r   ÚgetKeyz<VariationModel.getMasterLocationsSortKeyFunc.<locals>.getKeyb  s>   øøø€ ð;ð ;ð ;ðð ð ð ð ð ð ð6 ˆJr   )r   r5   r,   r+   Úadd)rx   rt   rš   rj   r\   r“   r§   Úrets           r   rƒ   z,VariationModel.getMasterLocationsSortKeyFuncQ  sì   € à�YÐÐÝ%Ð&>Ñ?Ô?Ð?Øˆ
Øð 
	(ð 
	(ˆCÝ�3‰xŒx˜1Š}ˆ}ØÝ�˜S™	œ	‘?”?ˆDØ˜”IˆEØ˜:Ð%Ð%Ø$' 5�
˜4Ñ à˜Z¨Ô-Ð-Ð-Ð-Ð-Ø;@¸5¸5À$À$À$È
È
ÐSñ .Ô-Ð-à�tÔ× Ò  Ñ'Ô'Ð'Ð'ð	ð 	ð 	ðB ˆf�Z Ñ+Ô+ˆØˆ
r   c                óÔ   ‡ ‡‡— ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         ‰ _         d„ ‰ j         D ¦   «         Šˆ fd„‰D ¦   «         ‰ _        ˆfd„‰ j        D ¦   «         ‰ _        i ‰ _        |S )Nc                ó    •— g | ]
}‰|         ‘ŒS r   r   )r   ÚidxÚmaster_lists     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>‰  s   ø€ Ð8Ð8Ð8¨�K Ô$Ð8Ð8Ð8r   c                ó*   •— g | ]}‰j         |         ‘ŒS r   )r�   )r   r¬   r{   s     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>Š  s!   ø€ ÐIÐIÐI¸#˜dÔ0°Ô5ÐIÐIÐIr   c                óJ   — g | ] }d „ |                      ¦   «         D ¦   «         ‘Œ!S )c                ó&   — i | ]\  }}|d k    ¯||“ŒS rd   r   re   s      r   rg   z<VariationModel.reorderMasters.<locals>.<listcomp>.<dictcomp>Œ  s#   € Ð6Ð6Ð6‘d�a˜¨Q°#ªX¨XˆQ�¨X¨X¨Xr   rh   ri   s     r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>‹  s<   € ð 
ð 
ð 
Ø;>Ð6Ð6˜cŸiši™kœkÐ6Ñ6Ô6ð
ð 
ð 
r   c                óD   •— g | ]}‰j                              |¦  «        ‘ŒS r   rw   rz   s     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>Ž  r|   r   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   r~   r   s     €r   r   z1VariationModel.reorderMasters.<locals>.<listcomp>�  r€   r   )r�   r„   rx   r…   r‡   )r{   r­   r„   Únew_listrx   s   ``  @r   ÚreorderMasterszVariationModel.reorderMasters†  s¥   øøø€ ð 9Ð8Ð8Ð8°Ð8Ñ8Ô8ˆØIÐIÐIÐIÀÐIÑIÔIˆÔð
ð 
ØBFÔBTð
ñ 
ô 
ˆ	ð DÐCÐCÐC¸ÐCÑCÔCˆŒØJÐJÐJÐJ¸4¼>ÐJÑJÔJˆÔØˆŒØˆr   c                óX  — g | _         |                      ¦   «         }t          |¦  «        D �]i\  }}t          |                     ¦   «         ¦  «        }|d |…         D �]}t          |                     ¦   «         ¦  «        |k    rŒ)d}|                     ¦   «         D ]:\  }\  }}	}
||         d         |	k    s|||         d         cxk     r|
k     sn d} nŒ;|sŒ}i }d}|                     ¦   «         D ]g}||         d         }||v sJ ‚||         \  }}}
||
}}||k     r|}||z
  ||z
  z  }n||k     r|}||z
  |
|z
  z  }nŒO||k    ri }|}||k    r|||f||<   Œh|                     ¦   «         D ]
\  }}|||<   Œ�Œ| j                              |¦  «         �Œk|                      ¦   «          d S )NTr   Frs   )ÚsupportsÚ_locationsToRegionsÚ	enumeraterP   rQ   rR   ÚappendÚ_computeDeltaWeights)r{   ÚregionsÚiÚregionÚlocAxesÚprev_regionÚrelevantr\   rF   r]   rH   ÚbestAxesÚ	bestRatioÚvalÚlocVÚnewLowerÚnewUpperÚratior;   s                      r   r†   z%VariationModel._computeMasterSupports“  s5  € ØˆŒØ×*Ò*Ñ,Ô,ˆÝ" 7Ñ+Ô+ð 2	)ñ 2	)‰IˆAˆvÝ˜&Ÿ+š+™-œ-Ñ(Ô(ˆGà& r¨ rœ{ð .*ñ .*�å�{×'Ò'Ñ)Ô)Ñ*Ô*¨gÒ5Ð5Øà�Ø28·,²,±.´.ð ð Ñ.�DÑ.˜5 $¨à# DÔ)¨!Ô,°Ò4Ð4Ø  ;¨tÔ#4°QÔ#7Ð?Ð?Ò?Ð?¸%Ò?Ð?Ð?Ð?à#(˜Ø˜øØð Øð �Ø�	Ø'×,Ò,Ñ.Ô.ð Dð D�DØ% dÔ+¨AÔ.�CØ 6˜>˜>˜>˜>Ø)/°¬Ñ&�E˜4 Ø).°˜h�HØ˜T’z�zØ#&˜Ø!$ t¡°¸±Ñ =˜˜Ø š˜Ø#&˜Ø!$ t¡°¸±Ñ =˜˜ð !Ø˜yÒ(Ð(Ø#%˜Ø$)˜	Ø 	Ò)Ð)Ø*2°D¸(Ð)C˜ ™øà$,§N¢NÑ$4Ô$4ð *ð *‘L�D˜&Ø#)�F˜4‘L�Lñ*àŒM× Ò  Ñ(Ô(Ð(Ñ(Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r   c                óð   — | j         }| j        }g }|D ]b}i }|                     ¦   «         D ]4\  }}|dk    rd|||         d         f||<   Œ ||         d         |df||<   Œ5|                     |¦  «         Œc|S )Nr   r   )rx   rZ   rR   r¹   )r{   rx   rZ   r»   rj   r½   r\   rÄ   s           r   r·   z"VariationModel._locationsToRegionsË  s¡   € Ø”Nˆ	Ø”_ˆ
àˆØð 	#ð 	#ˆCØˆFØ!Ÿiši™kœkð Bð B‘
��dØ˜!’8�8Ø$% t¨Z¸Ô-=¸aÔ-@Ð#A�F˜4‘L�Là$.¨tÔ$4°QÔ$7¸¸qÐ#A�F˜4‘L�LØ�NŠN˜6Ñ"Ô"Ð"Ð"Øˆr   c                óò   — g | _         t          | j        ¦  «        D ]Z\  }}i }t          | j        d |…         ¦  «        D ]\  }}t	          ||¦  «        }|r|||<   Œ| j                              |¦  «         Œ[d S r   )ÚdeltaWeightsr¸   rx   r¶   r   r¹   )r{   r¼   rj   ÚdeltaWeightÚjrX   r[   s          r   rº   z#VariationModel._computeDeltaWeightsÚ  s—   € ØˆÔÝ ¤Ñ/Ô/ð 	2ð 	2‰FˆAˆsØˆKå'¨¬°b°q°bÔ(9Ñ:Ô:ð ,ð ,‘
��7Ý& s¨GÑ4Ô4�Øð ,Ø%+�K ‘NøØÔ×$Ò$ [Ñ1Ô1Ð1Ð1ð	2ð 	2r   ©Úroundc               ó¸  — t          |¦  «        t          | j        ¦  «        k    s+J t          |¦  «        t          | j        ¦  «        f¦   «         ‚| j        }g }t          | j        ¦  «        D ]k\  }}|||                  }|                     ¦   «         D ]%\  }}	|	dk    r|||         z  }Œ|||         |	z  z  }Œ&|                      ||¦  «        ¦  «         Œl|S )Nr   )r5   rÊ   r…   r¸   rR   r¹   )
r{   ÚmasterValuesrÎ   r„   rT   r¼   ÚweightsÚdeltarÌ   Úweights
             r   Ú	getDeltaszVariationModel.getDeltaså  sî   € Ý�<Ñ Ô ¥C¨Ô(9Ñ$:Ô$:Ò:Ð:Ð:Ý�ÑÔÝ�Ô!Ñ"Ô"ð=
Ñ:Ô:Ð:ð Ô%ˆØˆÝ# DÔ$5Ñ6Ô6ð 	%ð 	%‰JˆAˆwØ  ¨¤Ô,ˆEØ$Ÿ]š]™_œ_ð -ð -‘	��6Ø˜Q’;�;Ø˜S œV‘O�E�Eà˜S œV f™_Ñ,�E�EØ�JŠJ�u�u˜U‘|”|Ñ$Ô$Ð$Ð$Øˆ
r   c               ón   — |                       |¦  «        \  }}|                     ||¬¦  «        |j        fS )NrÍ   )r�   rÔ   r¶   )r{   rR   rÎ   Úmodels       r   ÚgetDeltasAndSupportsz#VariationModel.getDeltasAndSupportsö  s6   € Ø×'Ò'¨Ñ.Ô.‰ˆˆuØ�Š˜u¨EˆÑ2Ô2°E´NÐBÐBr   c                ó.   ‡ ‡— ˆˆ fd„‰ j         D ¦   «         S )zûReturn scalars for each delta, for the given location.
        If interpolating many master-values at the same location,
        this function allows speed up by fetching the scalars once
        and using them with interpolateFromMastersAndScalars().c                óJ   •— g | ]}t          ‰|‰j        ‰j        ¬ ¦  «        ‘Œ S )rŽ   )r   r=   rZ   )r   rX   rj   r{   s     €€r   r   z-VariationModel.getScalars.<locals>.<listcomp>ÿ  sH   ø€ ð 
ð 
ð 
ð õ Ø�W¨$Ô*:ÀtÄðñ ô ð
ð 
ð 
r   )r¶   )r{   rj   s   ``r   Ú
getScalarszVariationModel.getScalarsú  s8   øø€ ð

ð 
ð 
ð 
ð 
ð  œ=ð	
ñ 
ô 
ð 	
r   c                óT  ‡ ‡— ‰                       |¦  «        Št          t          t          ‰ j        ¦  «        ¦  «        ¦  «        D ]8\  }}|                     ¦   «         D ]\  }}‰|xx         ‰|         |z  z  cc<   ŒŒ9ˆˆ fd„t          t          ‰¦  «        ¦  «        D ¦   «         Š‰S )a­  Return multipliers for each master, for the given location.
        If interpolating many master-values at the same location,
        this function allows speed up by fetching the scalars once
        and using them with interpolateFromValuesAndScalars().

        Note that the scalars used in interpolateFromMastersAndScalars(),
        are *not* the same as the ones returned here. They are the result
        of getScalars().c                ó6   •— g | ]}‰‰j         |                  ‘ŒS r   )r„   )r   r¼   rT   r{   s     €€r   r   z3VariationModel.getMasterScalars.<locals>.<listcomp>  s$   ø€ Ð=Ð=Ð=¨ˆs�4”< ”?Ô#Ð=Ð=Ð=r   )rÚ   ÚreversedÚlistr¸   rÊ   rR   Úranger5   )r{   ÚtargetLocationr¼   rÑ   rÌ   rÓ   rT   s   `     @r   ÚgetMasterScalarszVariationModel.getMasterScalars  s´   øø€ ð �oŠo˜nÑ-Ô-ˆÝ"¥4­	°$Ô2CÑ(DÔ(DÑ#EÔ#EÑFÔFð 	*ð 	*‰JˆAˆwØ$Ÿ]š]™_œ_ð *ð *‘	��6Ø�A��”˜#˜aœ& 6™/Ñ)��‘�ð*ð >Ð=Ð=Ð=Ð=­Uµ3°s±8´8©_¬_Ð=Ñ=Ô=ˆØˆ
r   c                óž   — d}t          | ¦  «        t          |¦  «        k    sJ ‚t          | |¦  «        D ]\  }}|sŒ||z  }|€|}Œ||z  }Œ|S )aV  Interpolate from values and scalars coefficients.

        If the values are master-values, then the scalars should be
        fetched from getMasterScalars().

        If the values are deltas, then the scalars should be fetched
        from getScalars(); in which case this is the same as
        interpolateFromDeltasAndScalars().
        Nr4   )ÚvaluesÚscalarsr9   r“   r[   Úcontributions         r   ÚinterpolateFromValuesAndScalarsz.VariationModel.interpolateFromValuesAndScalars  st   € ð ˆÝ�6‰{Œ{�c '™lœlÒ*Ð*Ð*Ð*Ý  ¨Ñ1Ô1ð 	"ð 	"‰MˆE�6Øð ØØ  6™>ˆLØˆyØ ��à�\Ñ!��Øˆr   c                ó8   — t                                | |¦  «        S )z>Interpolate from deltas and scalars fetched from getScalars().)r   ræ   )Údeltasrä   s     r   ÚinterpolateFromDeltasAndScalarsz.VariationModel.interpolateFromDeltasAndScalars.  s   € õ ×=Ò=¸fÀgÑNÔNÐNr   c                óX   — |                       |¦  «        }|                      ||¦  «        S )z)Interpolate from deltas, at location loc.)rÚ   ré   )r{   rj   rè   rä   s       r   ÚinterpolateFromDeltasz$VariationModel.interpolateFromDeltas3  s)   € à—/’/ #Ñ&Ô&ˆØ×3Ò3°F¸GÑDÔDÐDr   c               óX   — |                       |¦  «        }|                      ||¦  «        S )z0Interpolate from master-values, at location loc.)rá   ræ   )r{   rj   rÐ   rÎ   rä   s        r   ÚinterpolateFromMastersz%VariationModel.interpolateFromMasters8  s+   € à×'Ò'¨Ñ,Ô,ˆØ×3Ò3°LÀ'ÑJÔJÐJr   c               ó\   — |                       ||¬¦  «        }|                      ||¦  «        S )z²Interpolate from master-values, and scalars fetched from
        getScalars(), which is useful when you want to interpolate
        multiple master-values with the same location.rÍ   )rÔ   ré   )r{   rÐ   rä   rÎ   rè   s        r   Ú interpolateFromMastersAndScalarsz/VariationModel.interpolateFromMastersAndScalars=  s/   € ð —’ °E�Ñ:Ô:ˆØ×3Ò3°F¸GÑDÔDÐDr   )NF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rŠ   r�   Ústaticmethodr‚   rƒ   r´   r†   r·   rº   r   rÔ   r×   rÚ   rá   ræ   ré   rë   rí   rï   r   r   r   r   r   á   sÆ  € € € € € ð/ð /ðd 6;ðØJNðð ð ð ð ð<-ð -ð -ð* ðð ñ „\ðð Ø;=ð 2ð 2ð 2ñ „\ð2ðhð ð ð6$ð 6$ð 6$ðpð ð ð	2ð 	2ð 	2ð 07ð ð ð ð ð ð" 4;ð Cð Cð Cð Cð Cð

ð 

ð 

ðð ð ð" ðð ñ „\ðð, ðOð Oñ „\ðOðEð Eð Eð
 BIð Kð Kð Kð Kð Kð
 PWð Eð Eð Eð Eð Eð Eð Er   r   r„   úMapping[float, float]c                óŒ  ‡ — |                      ¦   «         }|s‰ S ‰ |v r|‰          S t          |¦  «        }‰ |k     r‰ ||         z   |z
  S t          |¦  «        }‰ |k    r‰ ||         z   |z
  S t          ˆ fd„|D ¦   «         ¦  «        }t          ˆ fd„|D ¦   «         ¦  «        }||         }||         }|||z
  ‰ |z
  z  ||z
  z  z   S )Nc              3  ó(   •K  — | ]}|‰k     ¯|V — Œd S r   r   re   s     €r   r   z%piecewiseLinearMap.<locals>.<genexpr>R  ó'   øè è € Ð%Ð%�!˜q 1šu˜uˆA˜u˜u˜u˜uÐ%Ð%r   c              3  ó(   •K  — | ]}|‰k    ¯|V — Œd S r   r   re   s     €r   r   z%piecewiseLinearMap.<locals>.<genexpr>S  rø   r   )rQ   rE   rD   )r9   r„   rQ   rf   ÚaÚbÚvaÚvbs   `       r   r   r   E  sõ   ø€ Ø�<Š<‰>Œ>€DØð ØˆØˆD€y€yØ�qŒzÐÝˆD‰	Œ	€AØˆ1‚u€uØ�7˜1”:‰~ Ñ!Ð!ÝˆD‰	Œ	€AØˆ1‚u€uØ�7˜1”:‰~ Ñ!Ð!åÐ%Ð%Ð%Ð%�tÐ%Ñ%Ô%Ñ%Ô%€AÝÐ%Ð%Ð%Ð%�tÐ%Ñ%Ô%Ñ%Ô%€AØ	�Œ€BØ	�Œ€BØ��b‘˜Q ™UÑ# q¨1¡uÑ-Ñ-Ð-r   c                óê  ‡
— ddl m} ddl}|                     dt          j        ¬¦  «        }|                     dddd	¬
¦  «         |                     d¬¦  «        }|                     dddt          ¬¦  «         |                     ddddd¬¦  «         | 	                    | ¦  «        }  || j
        ¬¦  «         ddlm} | j        r•ddlm}  |¦   «         }|                     | j        ¦  «         d„ |j        D ¦   «         }t#          d¦  «          ||¦  «         |                     ¦   «          t#          d¦  «         d„ |j        D ¦   «         } ||¦  «         nJd„ t'          t)          d¦  «        t)          d ¦  «        d!z   ¦  «        D ¦   «         Š
ˆ
fd"„| j        D ¦   «         }t-          |¦  «        }	t#          d#¦  «          ||	j        ¦  «         t#          d$¦  «          ||	j        ¦  «         dS )%z*Normalize locations on a given designspacer   )ÚconfigLoggerNzfonttools varLib.models)Údescriptionz
--loglevelÚLEVELÚINFOz Logging level (defaults to INFO))ÚmetavarrG   ÚhelpT)Úrequiredz-dz--designspaceÚDESIGNSPACE)r  Útypez-lz--locationsÚLOCATIONú+zFMaster locations as comma-separate coordinates. One must be all zeros.)r  Únargsr  )Úlevel)Úpprint)ÚDesignSpaceDocumentc                ó   — g | ]	}|j         ‘Œ
S r   ©rJ   ©r   Úss     r   r   zmain.<locals>.<listcomp>}  ó   € Ð0Ð0Ð0˜q�”
Ð0Ð0Ð0r   zOriginal locations:zNormalized locations:c                ó   — g | ]	}|j         ‘Œ
S r   r  r  s     r   r   zmain.<locals>.<listcomp>‚  r  r   c                ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úchr)r   Úcs     r   r   zmain.<locals>.<listcomp>…  s   € Ð>Ð>Ð>˜1•�A‘”Ð>Ð>Ð>r   ÚAÚZr   c                ó„   •— g | ]<}t          t          ‰d „ |                     d¦  «        D ¦   «         ¦  «        ¦  «        ‘Œ=S )c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r   )r:   r�   s     r   r   z"main.<locals>.<listcomp>.<genexpr>‡  s(   è è € Ð;Ð;¨�E !™HœHÐ;Ð;Ð;Ð;Ð;Ð;r   ú,)Údictr6   Úsplit)r   r  rL   s     €r   r   zmain.<locals>.<listcomp>†  sQ   ø€ ð 
ð 
ð 
ØBC�D•�TÐ;Ð;¨a¯gªg°c©l¬lÐ;Ñ;Ô;Ñ<Ô<Ñ=Ô=ð
ð 
ð 
r   zSorted locations:z	Supports:)Ú	fontToolsrÿ   ÚargparseÚArgumentParserÚmainró   Úadd_argumentÚadd_mutually_exclusive_groupÚstrÚ
parse_argsÚloglevelr  ÚdesignspaceÚfontTools.designspaceLibr  ÚreadÚsourcesÚprintÚ	normalizerß   Úordrx   r   r¶   )Úargsrÿ   r  ÚparserÚgroupr  r  ÚdocÚlocsrÖ   rL   s             @r   r!  r!  Y  sf  ø€ à&Ð&Ð&Ð&Ð&Ð&Ø€O€O€Oà×$Ò$Ø!Ý”Lð %ñ ô €Fð ×ÒØØØØ/ð	 ñ ô ð ð ×/Ò/¸Ð/Ñ>Ô>€EØ	×Ò�t˜_°mÍ#ÐÑNÔNÐNØ	×ÒØØØØØUð ñ ô ð ð ×Ò˜TÑ"Ô"€Dà€L�t”}Ð%Ñ%Ô%Ð%ØÐÐÐÐÐàÔð 
Ø@Ð@Ð@Ð@Ð@Ð@à!Ð!Ñ#Ô#ˆØ�Š�Ô!Ñ"Ô"Ð"Ø0Ð0 C¤KÐ0Ñ0Ô0ˆÝÐ#Ñ$Ô$Ð$Øˆˆt‰ŒˆØ�Š‰ŒˆÝÐ%Ñ&Ô&Ð&Ø0Ð0 C¤KÐ0Ñ0Ô0ˆØˆˆt‰Œˆˆà>Ð>¥¥c¨#¡h¤hµ°C±´¸1±Ñ =Ô =Ð>Ñ>Ô>ˆð
ð 
ð 
ð 
ØGKÄ~ð
ñ 
ô 
ˆõ ˜4Ñ Ô €EÝ	Ð
ÑÔÐØ
€Fˆ5Œ?ÑÔÐÝ	ˆ+ÑÔÐØ
€Fˆ5Œ>ÑÔÐÐÐr   Ú__main__r   )F)r9   r:   r;   r<   r=   r>   r?   r:   )
rJ   rK   rL   rM   r=   r>   rI   r>   r?   rN   )TFN)r9   r:   r„   rõ   r?   r:   )!ró   Ú
__future__r   Ú__all__Úcollections.abcr	   Útypingr
   ÚfontTools.misc.roundToolsr   Úerrorsr   r   r   r!   r)   r0   r8   r   r   r   Úobjectr   r   r!  rð   ÚdoctestÚsysr5   ÚargvÚexitÚtestmodÚfailedr   r   r   ú<module>rA     s9  ðØ +Ð +à "Ð "Ð "Ð "Ð "Ð "ðð ð €ð $Ð #Ð #Ð #Ð #Ð #Ø  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð ð )Ø(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð-ð -ð -ð'ð 'ð 'ð7ð 7ð 7ð 7ð0ð 0ð 0ð 0ð0ð 0ð 0ð <Að1ð 1ð 1ð 1ð 1ðH ð5ð
 ð5ð 5ð 5ð 5ð 5ð 5ðpNð Nð Nð NðbaEð aEð aEð aEð aE�Vñ aEô aEð aEðH.ð .ð .ð .ð(5ð 5ð 5ð 5ðp ˆzÒÐØÐÐÐÐÐÐÐà
€sˆ3Œ8�}„}�qÒÐØˆŒ��‘”ÑÔÐà€C„Hˆ_ˆWŒ_ÑÔÔ%Ñ&Ô&Ð&Ð&Ð&ð Ðr   