Ë
    ^ãj¶•  ã            
       ó  — d Z ddlZddlmZ d„ Zd„ ZdCd„Zd„ Zd„ Zd	„ Z	 G d
„ de
«      Zd„ ZdDd„ZdCd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdEd„Zd„ Zd„ Z	 	 	 	 	 	 dFd„ZdCd„Zedk(  �rœddlZ e ejB                  «      d k(  r/ddl"Z" ejF                   e"jH                  «       jJ                  «       ddl&Z& e&jN                  d!d"¬#«      Z(e(jS                  d$d%d&d'¬(«       e(jS                  d)d*d&dd+¬,«       e(jS                  d-d.dd/¬0«       e(jS                  d1d2e*d3¬4«       e(jW                  ejB                  d d «      Z,e,jZ                  r±e,j\                  €dnd5„ Z/ ee,jZ                  «      Z- e0d6«        e0 ee-«      «        ee-e/«      Z1 e0d7«        e0e1«        ee1«      Z2 e0d8«        e0 ee2«      «       e-e2k(  sJ ‚ e0d9«        e0 e ee-e/«      «      «        e0d:«        e0 e ee-e/«      «      «       e,jf                  rÿdd;l4m5Z5  e5e,jf                  «      Z3e3d<   jl                  jn                  d   Z8e8jr                  Z:e:jw                  «       D ]Z  Z<e:e<   Z=e=j}                  «        e=j~                  j^                  Z/ ee=jZ                  e/ e@e=j~                  d=d«      e¬>«      e=_-        Œ\ e,j‚                  €dd?lBmCZC  eCe,jf                  dd@¬A«      ZDne,j‚                  ZDeDr e0dBeD«       e3j‹                  eD«       yyyy)GaZ  T2CharString operator specializer and generalizer.

PostScript glyph drawing operations can be expressed in multiple different
ways. For example, as well as the ``lineto`` operator, there is also a
``hlineto`` operator which draws a horizontal line, removing the need to
specify a ``dx`` coordinate, and a ``vlineto`` operator which draws a
vertical line, removing the need to specify a ``dy`` coordinate. As well
as decompiling :class:`fontTools.misc.psCharStrings.T2CharString` objects
into lists of operations, this module allows for conversion between general
and specific forms of the operation.

é    N)ÚmaxStackLimitc                 óè   — t        | t        «      r| j                  «       } g }| D ]  }	 t        |«      }|j                  |«       Œ! |S # t        $ r 	 t        |«      }n# t        $ r Y nw xY wY Œ<w xY w©N)Ú
isinstanceÚstrÚsplitÚintÚ
ValueErrorÚfloatÚappend)ÚstringÚprogramÚtokens      ú^/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/fontTools/cffLib/specializer.pyÚstringToProgramr      s   € Ü�&œ#ÔØ—‘“ˆØ€GØò ˆð	Ü˜“JˆEð 	�‰�uÕðð €Nøô ò 	ðÜ˜e›‘øÜò Ùðüð	ús5   ©A	Á		A1ÁAÁA1Á	A+Á(A1Á*A+Á+A1Á0A1c                 ó2   — dj                  d„ | D «       «      S )Nú c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )r   )Ú.0Úxs     r   ú	<genexpr>z"programToString.<locals>.<genexpr>&   s   è ø€ Ò,˜q”C˜—FÑ,ùs   ‚)Újoin)r   s    r   ÚprogramToStringr   %   s   € Ø�8‰8Ñ, GÔ,Ó,Ð,ó    c                 óì  — d}d}d}g }g }t        | «      }|D �]C  }	t        |	t        «      s|j                  |	«       Œ&|	dk(  rC|€J ‚d ||«      z   }
|d   }||
z  dz   }|| d g|| d t	        |«      }|||z   dz
  |z
  z  }|}Œn|	dk(  r|d   }t        |«      t        u s\J ‚|sX|	dv rTd	}|	d
v }|r|t	        ||d «      z   }nt	        |«      }|r-|dz  |z  r%|j                  d«      }|j                  d|gf«       |	dv rF|r|j                  d|f«       |j                  |	g f«       |j                  dt        |«      gf«       n|j                  |	|f«       g }�ŒF |r|j                  d|f«       |S )uÑ  Takes a T2CharString program list and returns list of commands.
    Each command is a two-tuple of commandname,arg-list.  The commandname might
    be empty string if no commandname shall be emitted (used for glyph width,
    hintmask/cntrmask argument, as well as stray arguments at the end of the
    program (ðŸ¤·).
    'getNumRegions' may be None, or a callable object. It must return the
    number of regions. 'getNumRegions' takes a single argument, vsindex. It
    returns the numRegions for the vsindex.
    'vsIndex' is the vsindex in effect until the program sets one: that of
    the Private DICT the charstring uses.
    The Charstring may or may not start with a width value. If the first
    non-blend operator has an odd number of arguments, then the first argument is
    a width, and is popped off. This is complicated with blend operators, as
    there may be more than one before the first hint or moveto operator, and each
    one reduces several arguments to just one list argument. We have to sum the
    number of arguments that are not part of the blend arguments, and all the
    'numBlends' values. We could instead have said that by definition, if there
    is a blend operator, there is no width value, since CFF2 Charstrings don't
    have width values. I discussed this with Behdad, and we are allowing for an
    initial width value in this case because developers may assemble a CFF2
    charstring from CFF Charstrings, which could have width values.
    Fr   ÚblendNé   éÿÿÿÿÚvsindex>
   ÚhstemÚvstemÚendcharÚhmovetoÚhstemhmÚrmovetoÚvmovetoÚvstemhmÚcntrmaskÚhintmaskT>   r#   r&   é   Ú >   r(   r)   )	Úiterr   r   r   ÚlenÚtyper	   ÚpopÚnext)r   ÚgetNumRegionsÚvsIndexÚseenWidthOpÚlenBlendStackÚlastBlendIndexÚcommandsÚstackÚitr   ÚnumSourceFontsÚ	numBlendsÚnumBlendArgsÚlenStackÚparityÚnumArgsÚwidths                    r   ÚprogramToCommandsr@   )   sØ  € ð0 €KØ€MØ€NØ€HØ€EÜ	ˆg‹€Bàó 8ˆÜ˜%¤Ô%Ø�L‰L˜ÔØà�GÒØ Ð,Ð,Ð,Ø¡¨wÓ!7Ñ7ˆNð ˜b™	ˆIØ$ ~Ñ5¸Ñ9ˆLà%*¨L¨=¨>Ð%:Ð$;ˆE�<�-�.Ð!Ü˜5“zˆHØ˜Y¨Ñ1°AÑ5¸ÑFÑFˆMØ%ˆNàà�iÒØ˜B‘iˆGÜ˜“=¤CÑ'Ð'Ð'á 5ð -
ñ $
ð ˆKØÐ4Ð4ˆFÙð (¬#¨e°N°OÐ.DÓ*EÑE‘ä˜e›*�Ù˜G a™K¨6Ò1ØŸ	™	 !›�Ø—‘  e W Ô.àÐ,Ñ,ÙØ—‘  U Ô,Ø�O‰O˜U B˜KÔ(Ø�O‰O˜R¤$ r£( Ð,Õ-à�O‰O˜U E˜NÔ+ØŠðq8ñr Ø�‰˜˜U˜Ô$Ø€Or   c                 ó    — g }| D ]F  }t        |t        «      r#|j                  |«       |j                  d«       Œ6|j                  |«       ŒH |S )Nr   )r   ÚlistÚextendr   )ÚargsÚ
token_listÚargs      r   Ú_flattenBlendArgsrG   †   sR   € Ø€JØò #ˆÜ�cœ4Ô Ø×Ñ˜cÔ"Ø×Ñ˜gÕ&à×Ñ˜cÕ"ð#ð Ðr   c                 ó¢   — g }| D ]G  \  }}t        d„ |D «       «      rt        |«      }|j                  |«       |sŒ7|j                  |«       ŒI |S )zqTakes a commands list as returned by programToCommands() and converts
    it back to a T2CharString program list.c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   ©r   rB   ©r   rF   s     r   r   z$commandsToProgram.<locals>.<genexpr>–   ó   è ø€ Ò5¨Œz˜#œt×$Ñ5ùó   ‚)ÚanyrG   rC   r   )r6   r   ÚoprD   s       r   ÚcommandsToProgramrP   ‘   sV   € ð €GØò ‰ˆˆDÜÑ5°Ô5Ô5Ü$ TÓ*ˆDØ�‰�tÔÚØ�N‰N˜2Õðð €Nr   c              #   ó€   K  — t        | «      }||z  dk7  rt        | «      ‚t        d||«      D ]  }| |||z    –— Œ y­w)z'Group the list el into groups of size nr   N)r-   r
   Úrange)ÚelÚnÚlÚis       r   Ú_everyNrW   ž   sK   è ø€ äˆB‹€AØˆ1�u�‚zÜ˜‹nÐÜ�1�a˜‹^ò ˆØ��Q˜‘UˆmÓñùs   ‚<>c                   ó  — e Zd Zdd„Zd„ Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zy)Ú!_GeneralizerDecombinerCommandsMapNc                 ó    — || _         || _        y r   )ÚgetScalarRangesr2   )Úselfr[   r2   s      r   Ú__init__z*_GeneralizerDecombinerCommandsMap.__init__¨   s   € Ø.ˆÔØˆ�r   c              #   ó,   K  — |d   | _         d|f–— y ­w)Nr   r   ©r2   )r\   rD   s     r   r   z)_GeneralizerDecombinerCommandsMap.vsindex¬   s   è ø€ Ø˜A‘wˆŒØ˜$ÐÓùs   ‚c              #   óJ   K  — t        | «      dk7  rt        | «      ‚d| f–— y ­w)Nr*   r%   ©r-   r
   ©rD   s    r   r%   z)_GeneralizerDecombinerCommandsMap.rmoveto°   s'   è ø€ äˆt‹9˜Š>Ü˜TÓ"Ð"Ø˜$ÐÓùs   ‚!#c              #   óT   K  — t        | «      dk7  rt        | «      ‚d| d   dgf–— y ­w©Nr   r%   r   ra   rb   s    r   r#   z)_GeneralizerDecombinerCommandsMap.hmoveto¶   s/   è ø€ äˆt‹9˜Š>Ü˜TÓ"Ð"Ø˜4 ™7 A˜,Ð'Ó'ùó   ‚&(c              #   óT   K  — t        | «      dk7  rt        | «      ‚dd| d   gf–— y ­wrd   ra   rb   s    r   r&   z)_GeneralizerDecombinerCommandsMap.vmoveto¼   s/   è ø€ äˆt‹9˜Š>Ü˜TÓ"Ð"Ø˜1˜d 1™g˜,Ð'Ó'ùre   c              #   óT   K  — | st        | «      ‚t        | d«      D ]  } d| f–— Œ
 y ­w)Nr*   Úrlineto©r
   rW   rb   s    r   rh   z)_GeneralizerDecombinerCommandsMap.rlinetoÂ   s5   è ø€ áÜ˜TÓ"Ð"Ü˜D !Ó$ò 	$ˆDØ˜dÐ#Ó#ñ	$ùre   c              #   ó¢   K  — | st        | «      ‚t        | «      }	 	 dt        |«      dgf–— ddt        |«      gf–— Œ## t        $ r Y y w xY w­w©Nrh   r   ©r
   r,   r0   ÚStopIteration©rD   r8   s     r   Úhlinetoz)_GeneralizerDecombinerCommandsMap.hlinetoÉ   sc   è ø€ áÜ˜TÓ"Ð"Ü�$‹Zˆð	ØØ ¤4¨£8¨Q -Ð0Ò0Ø  1¤d¨2£h -Ð0Ò0ð øô ò 	Ùð	üó"   ‚Aœ$A  Á 	AÁ	AÁAÁAc              #   ó¢   K  — | st        | «      ‚t        | «      }	 	 ddt        |«      gf–— dt        |«      dgf–— Œ## t        $ r Y y w xY w­wrk   rl   rn   s     r   Úvlinetoz)_GeneralizerDecombinerCommandsMap.vlinetoÕ   sc   è ø€ áÜ˜TÓ"Ð"Ü�$‹Zˆð	ØØ  1¤d¨2£h -Ð0Ò0Ø ¤4¨£8¨Q -Ð0Ò0ð øô ò 	Ùð	ürp   c              #   óT   K  — | st        | «      ‚t        | d«      D ]  } d| f–— Œ
 y ­w)Né   Ú	rrcurvetori   rb   s    r   ru   z+_GeneralizerDecombinerCommandsMap.rrcurvetoá   s5   è ø€ áÜ˜TÓ"Ð"Ü˜D !Ó$ò 	&ˆDØ Ð%Ó%ñ	&ùre   c              #   óô   K  — t        | «      }|dk  s|dz  dkD  rt        | «      ‚|dz  dk(  r d| d   | d   | d   | d   | d   dgf–— | dd  } t        | d«      D ]  } d| d   d| d   | d   | d   dgf–— Œ y ­w©Né   r   r*   ru   r   é   é   ©r-   r
   rW   ©rD   rU   s     r   Ú	hhcurvetoz+_GeneralizerDecombinerCommandsMap.hhcurvetoè   s­   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜A’IÜ˜TÓ"Ð"Øˆq‰5�AŠ:Ø  a¡¨$¨q©'°4¸±7¸DÀ¹GÀTÈ!ÁWÈaÐ PÐQÒQØ˜˜�8ˆDÜ˜D !Ó$ò 	LˆDØ  a¡¨!¨T°!©W°d¸1±g¸tÀA¹wÈÐ JÐKÓKñ	Lùó   ‚A6A8c           	   #   óô   K  — t        | «      }|dk  s|dz  dkD  rt        | «      ‚|dz  dk(  r d| d   | d   | d   | d   d| d   gf–— | dd  } t        | d«      D ]  } dd| d   | d   | d   d| d   gf–— Œ y ­wrw   r{   r|   s     r   Ú	vvcurvetoz+_GeneralizerDecombinerCommandsMap.vvcurvetoó   s­   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜A’IÜ˜TÓ"Ð"Øˆq‰5�AŠ:Ø  a¡¨$¨q©'°4¸±7¸DÀ¹GÀQÈÈQÉÐ PÐQÒQØ˜˜�8ˆDÜ˜D !Ó$ò 	LˆDØ  D¨¡G¨T°!©W°d¸1±g¸qÀ$ÀqÁ'Ð JÐKÓKñ	Lùr~   c              #   óÌ  K  — t        | «      }|dk  s|dz  dvrt        | «      ‚d }|dz  dk(  r|dz  dk(  }| d d | dd  }} t        | d«      }	 	 t        |«      } d| d	   d	| d   | d   d	| d
   gf–— t        |«      } dd	| d	   | d   | d   | d
   d	gf–— ŒG# t        $ r Y nw xY w|r<|} rd| d	   d	| d   | d   | d   | d
   gf–— y dd	| d	   | d   | d   | d
   | d   gf–— y y ­w©Nrx   é   >   r   r   rx   rz   r*   r   rz   éûÿÿÿru   r   ry   ©r-   r
   rW   r0   rm   ©rD   rU   Ú	last_argsÚlastStraightr8   s        r   Ú	hvcurvetoz+_GeneralizerDecombinerCommandsMap.hvcurvetoþ   sW  è ø€ ä�‹IˆØˆqŠ5�A˜‘E Ñ-Ü˜TÓ"Ð"Øˆ	Øˆq‰5�AŠ:Ø˜q™5 A™:ˆLØ" 3 B˜i¨¨b¨c¨�)ˆDÜ�T˜1Óˆð	ØÜ˜B“x�Ø" T¨!¡W¨a°°a±¸$¸q¹'À1ÀdÈ1ÁgÐ$NÐOÒOÜ˜B“x�Ø" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈAÐ$NÐOÒOð	 øô
 ò 	Ùð	úáØˆDÙØ" T¨!¡W¨a°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUà" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUð ùó&   ‚AC$ÁAB Â	B"ÂC$Â!B"Â"AC$c              #   óÌ  K  — t        | «      }|dk  s|dz  dvrt        | «      ‚d }|dz  dk(  r|dz  dk(  }| d d | dd  }} t        | d«      }	 	 t        |«      } dd	| d	   | d   | d   | d
   d	gf–— t        |«      } d| d	   d	| d   | d   d	| d
   gf–— ŒG# t        $ r Y nw xY w|r<|} rdd	| d	   | d   | d   | d
   | d   gf–— y d| d	   d	| d   | d   | d   | d
   gf–— y y ­wr‚   r…   r†   s        r   Ú	vhcurvetoz+_GeneralizerDecombinerCommandsMap.vhcurveto  sW  è ø€ ä�‹IˆØˆqŠ5�A˜‘E Ñ-Ü˜TÓ"Ð"Øˆ	Øˆq‰5�AŠ:Ø˜q™5 A™:ˆLØ" 3 B˜i¨¨b¨c¨�)ˆDÜ�T˜1Óˆð	ØÜ˜B“x�Ø" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈAÐ$NÐOÒOÜ˜B“x�Ø" T¨!¡W¨a°°a±¸$¸q¹'À1ÀdÈ1ÁgÐ$NÐOÒOð	 øô
 ò 	Ùð	úáØˆDÙØ" Q¨¨Q©°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUà" T¨!¡W¨a°°a±¸$¸q¹'À4ÈÁ7ÈDÐQRÉGÐ$TÐUÓUð ùrŠ   c              #   ó    K  — t        | «      }|dk  s|dz  dk7  rt        | «      ‚| d d | dd  }} t        | d«      D ]  } d| f–— Œ
 d|f–— y ­w)Nrƒ   rt   r*   éþÿÿÿru   rh   r{   ©rD   rU   r‡   s      r   Ú
rcurvelinez,_GeneralizerDecombinerCommandsMap.rcurveline0  sl   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜Q’JÜ˜TÓ"Ð"Ø˜s ˜) T¨"¨# YˆiˆÜ˜D !Ó$ò 	&ˆDØ Ð%Ó%ð	&à˜)Ð$Ó$ùó   ‚AAc              #   ó    K  — t        | «      }|dk  s|dz  dk7  rt        | «      ‚| d d | dd  }} t        | d«      D ]  } d| f–— Œ
 d|f–— y ­w)Nrƒ   r*   r   iúÿÿÿrh   ru   r{   r�   s      r   Ú
rlinecurvez,_GeneralizerDecombinerCommandsMap.rlinecurve:  sl   è ø€ ä�‹IˆØˆqŠ5�A˜‘E˜Q’JÜ˜TÓ"Ð"Ø˜s ˜) T¨"¨# YˆiˆÜ˜D !Ó$ò 	$ˆDØ˜dÐ#Ó#ð	$à˜IÐ&Ó&ùr‘   c              #   óX   K  — | \  }}}}}}}d|d|||d|d|t        |«      |ddgf–— y ­w©NÚflexr   é2   )Ú_negateBlendArg)rD   Údx1Údx2Údy2Údx3Údx4Údx5Údx6s           r   Úhflexz'_GeneralizerDecombinerCommandsMap.hflexD  sX   è ø€ à,0Ñ)ˆˆS�#�s˜C  cààØØØØØØØØÜ Ó$ØØØðð
ó 	
ùs   ‚(*c              #   óx   K  — | \	  }}}}}}}}}	t        t        |||g«      «      }
d|||||d|d|||	|
dgf–— y ­wr•   )r˜   Ú_sumBlendArgs)rD   r™   Údy1rš   r›   rœ   r�   rž   Údy5rŸ   Údy6s              r   Úhflex1z(_GeneralizerDecombinerCommandsMap.hflex1Z  sZ   è ø€ à6:Ñ3ˆˆS�#�s˜C  c¨3°Üœm¨S°#°s¨OÓ<Ó=ˆØ˜˜S # s¨C°°C¸¸CÀÀcÈ3ÐPRÐSÐTÓTùs   ‚8:c              #   óf  K  — t        |«      dk7  rt        |«      ‚| j                  r| j                  | j                  «      nd }t	        |ddd…   «      }t	        |ddd…   «      }t        |||«      }|€d|f–— y |r|d   t        |«      g}nt        |«      |d   g}d|dd |z   dgz   f–— y ­w)	Né   r   é
   r*   r   Úflex1r–   r—   )r-   r
   r[   r2   r¢   Ú_isFlex1Horizontalr˜   )r\   rD   ÚscalarRangesÚdxÚdyÚ
horizontalÚlasts          r   rª   z'_GeneralizerDecombinerCommandsMap.flex1`  sË   è ø€ Üˆt‹9˜Š?Ü˜TÓ"Ð"à26×2FÒ2FˆD× Ñ  §¡Ô.ÈDð 	ô ˜4  " Q ™<Ó(ˆÜ˜4  " Q ™<Ó(ˆÜ'¨¨B°Ó=ˆ
ØÐà˜D�/Ó!áØ˜R™¤/°"Ó"5Ð6‘ä'¨Ó+¨T°"©XÐ6�Ø˜4  "˜:¨Ñ,°¨tÑ3Ð4Ó4ùs   ‚B/B1©Nr   )Ú__name__Ú
__module__Ú__qualname__r]   r   Ústaticmethodr%   r#   r&   rh   ro   rr   ru   r}   r€   r‰   rŒ   r�   r“   r    r¦   rª   © r   r   rY   rY   §   sG  „ óò ð ñ ó ð ð
 ñ(ó ð(ð
 ñ(ó ð(ð
 ñ$ó ð$ð ñ	ó ð	ð ñ	ó ð	ð ñ&ó ð&ð ñLó ðLð ñLó ðLð ñVó ðVð0 ñVó ðVð0 ñ%ó ð%ð ñ'ó ð'ð ñ
ó ð
ð* ñUó ðUó
5r   rY   c           	      ó<  — t        | D �cg c]  }t        |t        «      ‘Œ c}«      r5| D ��cg c]'  }t        |t        «      rt        |«      n|gD ]  }|‘Œ Œ) }}}n| }|d   }|d d }t	        |«      }||z  dz
  }||dz   z  |k(  st        | «      ‚|dk(  r|S |d | D �cg c]  }|g‘Œ }}||d  }	t	        |	«      }
t        d|
|«      D �cg c]
  }|	|||z    ‘Œ }}t        ||«      D ��cg c]  \  }}||z   dgz   ‘Œ }}}|S c c}w c c}}w c c}w c c}w c c}}w ©Nr   r   r   )rN   r   rB   Ú_convertBlendOpToArgsr-   r
   rR   Úzip)Ú	blendListrF   ÚerV   rD   r:   rU   Ú
numRegionsÚdefaultArgsÚ	deltaArgsÚnumDeltaValuesÚ	deltaListÚaÚbÚ
blend_argss                  r   r¹   r¹   t  sm  € ô
 ¨YÖ7 cŒJ�sœDÕ!Ò7Ô8ð ÷
àÜ2<¸QÄÔ2EÔ+¨AÔ.ÈAÈ3ò
ð ò ð
Øð
ˆò 
ð ˆð �R‘€Ið ��ˆ9€DäˆD‹	€AØ�i‘ !Ñ#€JØ˜ a™Ñ(¨AÒ-Ü˜Ó#Ð#à�Q‚Øˆà$(¨¨)Ð$4Ö5˜S�C’5Ð5€KÐ5Ø�Y�ZÐ €IÜ˜“^€Nä/4°Q¸È
Ó/SöØ*+ˆ	�!�a˜*‘nÒ%ð€Ið ô +.¨k¸9Ó*E×F¡$ ! Q�!�a‘%˜1˜#“+ÐF€JÑFØÐùòK 8ùó
ùò: 6ùòùó Gs   ŠD­,DÂ 
DÃDÃ+Dc           
      ór  — g }t        ||«      }| D ]£  \  }}t        |D �cg c]  }t        |t        «      ‘Œ c}«      r5	 |D ��	cg c]'  }t        |t        «      rt	        |«      n|gD ]  }	|	‘Œ Œ) }}}	t        ||d «      }
|
€|j                  ||f«       Œ…	  |
|«      D ]  }|j                  |«       Œ Œ¥ |S c c}w c c}	}w # t
        $ r. |r(|j                  d|f«       |j                  d|gf«       n‚ Y Œ‡w xY w# t
        $ r/ |r(|j                  d|f«       |j                  d|gf«       n‚ Y �Œ$w xY w)Nr+   )rY   rN   r   rB   r¹   r
   r   Úgetattr)r6   ÚignoreErrorsr[   r2   ÚresultÚmappingrO   rD   rF   rT   ÚfuncÚcommands               r   ÚgeneralizeCommandsrÌ   ¡  sl  € Ø€FÜ/°ÀÓI€GØò "‰ˆˆDä°Ö6¨#”
˜3¤Õ%Ò6Ô7ðð  $÷àä6@ÀÄdÔ6KÔ-¨cÔ2ÐRUÐQVò	ð ò ðØð�ñ ô  �w  DÓ)ˆØˆ<Ø�M‰M˜2˜t˜*Ô%Øð
	Ù ›:ò '�Ø—‘˜gÕ&ñ'ð3"ðF €MùòC 7ùóøô ò Ùð —M‘M 2 t *Ô-Ø—M‘M 2¨ t *Õ-àñ .ðûô  ò 	Ùð —‘˜r 4˜jÔ)Ø—‘˜r B 4˜jÕ)àò *ð	ús:    B9
¿CÁ,B>Á0CÂC>Â>CÃ4C;Ã:C;Ã>4D6Ä5D6c           	      óH   — t        t        t        | ||¬«      fd|i|¤Ž«      S ©Nr_   r2   )rP   rÌ   r@   ©r   r1   r2   Úkwargss       r   ÚgeneralizeProgramrÑ   Ê  ó5   € ÜÜÜ˜g }¸gÔFñ	
àð	
ð ñ	
óð r   c                 óR   — | d   s| d   sd| dd fS d| dd fS | d   sd| dd fS d| fS )a†  
    Takes X,Y vector v and returns one of r, h, v, or 0 depending on which
    of X and/or Y are zero, plus tuple of nonzero ones.  If both are zero,
    it returns a single zero still.

    >>> _categorizeVector((0,0))
    ('0', (0,))
    >>> _categorizeVector((1,0))
    ('h', (1,))
    >>> _categorizeVector((0,2))
    ('v', (2,))
    >>> _categorizeVector((1,2))
    ('r', (1, 2))
    r   r   Ú0NÚvÚhÚrr¶   )rÕ   s    r   Ú_categorizeVectorrØ   Ô  sR   € ð ˆQŠ4Ø�ŠtØ˜˜"˜1˜�:Ðà˜˜!˜"˜�:Ðà�ŠtØ˜˜"˜1˜�:Ðà˜�6ˆMr   c                 ó.   — | dk(  r|S |dk(  r| S | |k(  r| S y )NrÔ   r¶   )rÂ   rÃ   s     r   Ú_mergeCategoriesrÚ   ï  s)   € ØˆC‚xØˆØˆC‚xØˆØˆA‚vØˆØr   c                 ó*   — | dk(  ry| dk(  ry| dv sJ ‚| S )NrÖ   rÕ   Ú0rr¶   )rÂ   s    r   Ú_negateCategoryrÝ   ù  s'   € ØˆC‚xØØˆC‚xØØ�‰9Ðˆ9Ø€Hr   c                 ó�  — t        | «      }d}g }d}||k  �r.| |   }|dz  }t        |t        «      s|j                  |«       |dz  }nö|}t        |«      dz
  }|g}|d|z   z  }||k  rbt        | |   t        «      rO||z   t        k  rC|j                  | |   «       |dz  }||z  }||k  r t        | |   t        «      r||z   t        k  rŒCt        |«      }	g }
|D ]  }|
j                  |d   «       Œ |D ]   }|d   dk(  sJ ‚|
j                  |dd «       Œ" |
j                  |	«       |j                  |
«       ||	z   }||k  r�Œ.|S )Nr   r   r   )r-   r   rB   r   r   rC   )rD   Únum_argsÚ	stack_useÚnew_argsrV   rF   Úprev_stack_useÚnum_sourcesÚ	blendlistÚ
num_blendsrÄ   s              r   Ú_convertToBlendCmdsræ     s†  € ô �4‹y€HØ€IØ€HØ	€AØ
ˆh‹,Ø�1‰gˆØ	ˆQ‰ˆÜ˜#œtÔ$Ø�O‰O˜CÔ Ø˜‰N‰Ià&ˆNô
 ˜c›( Q™,ˆKØ˜ˆIØ˜˜[™Ñ(ˆIð �X’Ü˜t A™w¬Ô-Ø Ñ+¬mÒ;à× Ñ   a¡Ô)Ø�Q‘�Ø˜[Ñ(�	ð �X’Ü˜t A™w¬Ô-Ø Ñ+¬mÓ;ô ˜Y›ˆJàˆJØ ò *�Ø×!Ñ! # a¡&Õ)ð*à ò -�Ø˜2‘w !’|Ð#�|Ø×!Ñ! # a¨ )Õ,ð-ð ×Ñ˜jÔ)Ø�O‰O˜JÔ'Ø&¨Ñ3ˆIð] ˆhŒ,ð` €Or   c                 ó„  — t        |t        «      rvt        | t        «      rbt        | «      t        |«      k7  s| d   |d   k7  r
t        «       ‚t	        | d d |d d «      D ��cg c]  \  }}t        ||«      ‘Œ c}}| d   gz   S || }} t        | t        «      r | d   dk(  sJ ‚t        | d   |«      g| dd  z   S | |z   S c c}}w r¸   )r   rB   r-   r
   rº   Ú_addArgs)rÂ   rÃ   ÚvaÚvbs       r   rè   rè   <  sÇ   € Ü�!”TÔÜ�aœÔÜ�1‹vœ˜Q›Ò 1 R¡5¨A¨b©E¢>Ü “lÐ"Ü36°q¸¸"°v¸qÀÀ"¸vÓ3F×G©¨¨R”H˜R Õ$ÓGÈ1ÈRÉ5È'ÑQÐQà�aˆqˆAÜ�!”TÔØ�‰u˜ŠzÐˆzÜ˜˜1™˜qÓ!Ð" Q q r UÑ*Ð*Øˆq‰5€Lùó Hs   Á"B<c                 ó¶   — t        | t        «      r| dd n| g}t        d„ |D «       «      rt        d«      ‚t	        |«      |k  sJ ‚|dg|t	        |«      z
  z  z   S )a  Return a generalized argument's default and deltas, padded with zeros.

    ``arg`` is a number or a single-value blend list ``[default, *deltas, 1]``
    as returned by :func:`generalizeCommands`. The result has ``numValues``
    entries, including the default.
    Nr   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   rJ   )r   Úvalues     r   r   z!blendArgValues.<locals>.<genexpr>R  s   è ø€ Ò
7 uŒ:�eœT×"Ñ
7ùrM   z&Nested blend lists not supported (yet)r   )r   rB   rN   ÚNotImplementedErrorr-   )rF   Ú	numValuesÚvaluess      r   ÚblendArgValuesrñ   J  sc   € ô $ C¬Ô.ˆS��"‰X°S°E€FÜ
Ñ
7°Ô
7Ô7Ü!Ð"JÓKÐKÜˆv‹;˜)Ò#Ð#Ð#Ø�Q�C˜9¤s¨6£{Ñ2Ñ3Ñ3Ð3r   c                 óB   — t        | t        «      rt        | «      dz
  S dS )zHReturn the number of default and delta values in a generalized argument.r   )r   rB   r-   )rF   s    r   ÚnumBlendArgValuesró   X  s   € ä% c¬4Ô0Œ3ˆs‹8�a‰<Ð7°aÐ7r   c                 óp   — t        t        | «      t        |«      «      }t        | |«      t        ||«      k(  S r   )Úmaxró   rñ   )Úarg1Úarg2rï   s      r   Ú_blendArgsEqualrø   ]  s3   € ÜÔ% dÓ+Ô->¸tÓ-DÓE€IÜ˜$ 	Ó*¬n¸TÀ9Ó.MÑMÐMr   c                 óf   — t        | t        «      r| d d D �cg c]  }| ‘Œ c}| dd  z   S |  S c c}w )Nr   rJ   )rF   rÕ   s     r   r˜   r˜   b  s<   € Ü�#”tÔØ  ˜HÖ%�q�’Ò%¨¨B¨C¨Ñ0Ð0Øˆ4€Kùò &s   ˜
.c                 ó6   — t        j                  t        | «      S r   )Ú	functoolsÚreducerè   rb   s    r   r¢   r¢   h  s   € Ü×ÑœH dÓ+Ð+r   c                 ól   ‡— ˆfd„}d„ }d„ } || «       ||«      }} ||Ž  ||Ž kD  ry ||Ž  ||Ž k  ryy)zùWhether a flex1 ends horizontally throughout the scalar ranges.

    ``scalarRanges`` contains a ``(minimum, maximum)`` pair per variation
    region and defaults to ``(0, 1)`` for each region. Return ``None`` when
    the direction may change.
    c                 óê   •— t        | t        | «      «      ^}}‰	xs dgt        |«      z  }|x}}t        ||«      D ]2  \  }\  }}|t	        ||z  ||z  «      z  }|t        ||z  ||z  «      z  }Œ4 ||fS )N)r   r   )rñ   ró   r-   rº   Úminrõ   )
rF   ÚdefaultÚdeltasÚrangesÚloÚhiÚdeltaÚ	minScalarÚ	maxScalarr¬   s
            €r   Úboundsz"_isFlex1Horizontal.<locals>.boundst  sš   ø€ Ü)¨#Ô/@ÀÓ/EÓFÐˆ�&ØÒ7 & ¬C°«KÑ!7ˆØÐˆˆRÜ-0°¸Ó-@ò 	<Ñ)ˆEÑ)�I˜yØ”#�i %Ñ'¨°UÑ):Ó;Ñ;ˆBØ”#�i %Ñ'¨°UÑ):Ó;Ñ;‰Bð	<ð �2ˆvˆr   c                 óZ   — | dcxk  r|k  rdS  t        t        | «      t        |«      «      S r±   )rÿ   Úabs©r  r  s     r   ÚminAbsz"_isFlex1Horizontal.<locals>.minAbs}  s(   € Ø˜!”M˜r’MˆqÐ<�M¤s¬3¨r«7´C¸³GÓ'<Ð<r   c                 ó>   — t        t        | «      t        |«      «      S r   )rõ   r
  r  s     r   ÚmaxAbsz"_isFlex1Horizontal.<locals>.maxAbs€  s   € Ü”3�r“7œC ›GÓ$Ð$r   TFNr¶   )r­   r®   r¬   r  r  r  ÚdxBoundsÚdyBoundss     `     r   r«   r«   l  sR   ø€ ôò=ò%ñ   ›¡V¨B£Zˆh€HÙˆxÐ™6 8Ð,Ò,ØÙˆxÐ™F HÐ-Ò-ØØr   c                 ó.  — | \  }}}}}}}}}	}
}}}t        |d«      sd| fS t        |d«      rrt        |d«      rft        |d«      r,t        |d«      r t        |
t        |«      «      rd||||||	|gfS t        |t        t        |||
g«      «      «      rd|||||||	|
|g	fS t        | ddd…   «      }t        | ddd…   «      }t        ||«      }|r t        |t        |«      «      rd	| dd |gz   fS |d
u r t        |t        |«      «      rd	| dd |gz   fS d| fS )zBReturn the shortest flex operator and arguments for ``flex`` args.r—   r–   r   r    r¦   r©   r*   r   rª   F)rø   r˜   r¢   r«   )rD   r™   r£   rš   r›   rœ   Údy3r�   Údy4rž   r¤   rŸ   r¥   Úfdr­   r®   r¯   s                    r   Ú_specializeFlexr  ‹  sS  € àEIÑB€Cˆˆc�3˜˜S # s¨C°°c¸3ÀÜ˜2˜rÔ"Ø�tˆ|ÐÜ�s˜AÔ¤?°3¸Ô#:ä˜C Ô#Ü  QÔ'Ü ¤_°SÓ%9Ô:à˜S # s¨C°°c¸3Ð?Ð?Ð?Ü˜3¤´¸sÀCÈ¸oÓ0NÓ OÔPØ˜c 3¨¨S°#°s¸CÀÀcÐJÐJÐJÜ	�t˜A˜b ˜F‘|Ó	$€BÜ	�t˜A˜b ˜F‘|Ó	$€BÜ# B¨Ó+€JÙ”o c¬?¸2Ó+>Ô?Ø˜˜Q˜r˜
 c UÑ*Ð*Ð*Ø�UÑœ¨s´OÀBÓ4GÔHØ˜˜Q˜r˜
 c UÑ*Ð*Ð*Ø�4ˆ<Ðr   c                 óž   — d}d}| D ]9  }t        |«      t        u r!t        ||t        |«      z   «      }||d   z  }Œ5|dz  }Œ; t        ||«      S )Nr   r   r   )r.   rB   rõ   Ú_argsStackUse)rD   ÚstackLenÚmaxLenrF   s       r   r  r  £  sc   € Ø€HØ€FØò ˆÜ�‹9œÑä˜ ¬M¸#Ó,>Ñ!>Ó?ˆFØ˜˜B™Ñ‰Hà˜‰M‰Hðô ˆx˜Ó Ð r   Tc                 óV  — |rt        | |||¬«      } nt        | «      } t        t        | «      dz
  dd«      D ]b  }d| |   d   cxk(  r| |dz
     d   k(  sŒn Œ!| |dz
     d   | |   d   }	}dt	        |d   |	d   «      t	        |d   |	d   «      gf| |dz
  <   | |= Œd t        t        | «      «      D ]|  }| |   \  }
}|
dv rt        |«      \  }}||
dd  z   |f| |<   Œ+|
dk(  r9t        |d d «      \  }}t        |d	d  «      \  }}||z   d
z   ||dd z   |z   f| |<   Œi|
dk(  sŒot        |«      | |<   Œ~ |sÂt        t        | «      dz
  dd«      D ]¦  }| |   \  }
}|
dk(  r-t        |«      dk(  sJ ‚t        |dd «      \  }}|dz   }
|
|f| |<   |
dk(  r| |= ŒF|sŒI|
dv sŒN|
| |dz
     d   k(  sŒ]| |dz
     \  }}t        |«      dk(  rt        |«      dk(  sJ ‚	 t	        |d   |d   «      g}|
|f| |dz
  <   | |= Œ¨ t        dt        | «      dz
  «      D ]á  }| |   \  }
}| |dz
     d   | |dz      d   }}|
dv r<||cxk(  rdk(  r1n n.t        |«      dk(  sJ ‚|
d   dk(  rd|d   gn|d   dg}d|f| |<   Œa|
dd  d
k(  sŒjt        |«      dk(  sŒy||cxk(  rdk(  sŒ…n Œˆ|
d   dk(  |
d   dk(  z  sJ ‚|
d   dk(  rd}n|
d   dk7  rd}n|
d   dk(  rd}nd}|d |  t        |«      d«      z   ||d  z   }d|f| |<   Œã | rt        | d   d   «      nd}t        t        | «      dz
  dd«      D �]D  }| |dz
     \  }}| |   \  }}d }||hddhk  r(||k(  r|}nÛt        |«      }|dk(  r|dk(  rd}nÃ|dk(  r¾d}n»||fdv r|}n²||hddhk(  r|}n¦d
|dd  cxk(  r|dd  k(  r•n n’|d d \  }}|d d \  }}|dk(  s|dk(  s||cxk(  rdk(  rn nŒœt        ||«      } | €Œ«|dk(  rt        | |«      } | €Œ¿d| z   d
z   }n=|dk(  r!t        |t        | «      «      }|€Œå|dz   d
z   }nt        ||«      }|€Œý|| z   d
z   }t        |«      }!t        |!t        |«      |z   «      }"|r|"|k  r|||z   f| |dz
  <   | |= |"}�ŒC|!}�ŒG t        t        | «      «      D ]Ù  }| |   \  }
}|
dv rd|
dd  z   |f| |<   Œ|
dd  d
k(  sŒ&|
d d d vsŒ.t        |«      }|
d d \  }#}|#dk(  |dk(  z  r
|dz  dk(  sJ ‚|#d!k(  rd}#|d!k(  rd}|#dk(  r|}#|dk(  rt        |#«      }|#|hddhk  s	J |#|f«       ‚|dz  r;|#|k7  r |#dk(  |d"z  dk(  z  r(|d d	 |dd  z   |d	d z   }n|#dk(  r|dd |d d z   |dd  z   }|#|z   d
z   |f| |<   ŒÛ t        t        | «      «      D ]-  }| |   \  }
}t        d#„ |D «       «      sŒ|
t        |«      f| |<   Œ/ | S # t        $ r Y �Œ]w xY w)$N)rÇ   r[   r2   r   r   r   r%   >   rh   r%   ru   r*   rŽ   Úcurvetorx   r–   Ú	00curvetory   ÚlinetoÚ0lineto>   ro   rr   >   r  ro   rr   rh   rÕ   rz   r×   )r   rt   r“   r�   >   ©rh   r“   ©ru   r�   rr   ro   >   r  Ú0movetorÖ   >   ÚhhÚhvÚrrÚvhÚvvrÔ   rƒ   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   rJ   rK   s     r   r   z%specializeCommands.<locals>.<genexpr>å  rL   rM   )rÌ   rB   rR   r-   rè   rØ   r  r
   r.   r  rÚ   rÝ   rõ   rN   ræ   )$r6   rÇ   ÚgeneralizeFirstÚpreserveTopologyÚmaxstackr[   r2   rV   Úv1Úv2rO   rD   ÚcÚc1Úargs1Úc2Úargs2Ú_Ú
other_argsrá   ÚprvÚnxtÚposÚstackUseÚop1Úop2Únew_oprU   Úd0Úd1Úd2Úd3ÚdÚargs1StackUseÚcombinedStackUseÚop0s$                                       r   ÚspecializeCommandsrC  °  sà  € ñV Ü%ØØ%Ø+Øô	
‰ô ˜“>ˆô ”3�x“= 1Ñ$ a¨Ó,ò ˆØ˜ ™ A™Ô<¨(°1°q±5©/¸!Ñ*<Ö<Ø˜a !™e‘_ QÑ'¨°!©°Q©�ˆBàÜ˜"˜Q™%  A¡Ó'¬°"°Q±%¸¸A¹Ó)?Ð@ðˆH�Q˜‘U‰Oð ˜‘ðôp ”3�x“=Ó!ò ˆØ˜A‘;‰ˆˆDàÐ'Ñ'Ü'¨Ó-‰GˆAˆtØ˜b  ˜f™* dÐ*ˆH�Q‰KØà�ÒÜ)¨$¨r°¨(Ó3‰IˆB�Ü)¨$¨r¨s¨)Ó4‰IˆB�Ø˜r™' IÑ-¨u°t¸A¸a°yÑ/@À5Ñ/HÐHˆH�Q‰KØà�‹<Ü)¨$Ó/ˆH�Q‰KØð!ñN Ü”s˜8“} qÑ(¨"¨bÓ1ò 	ˆAØ ‘{‰HˆB�ð �[Ò Ü˜4“y A’~Ð%�~Ü+¨D°°1¨IÓ6‘��4Ø˜‘\�Ø  $˜h�˜‘ð �YŠØ˜Q�KØò �RÐ1Ò1°r¸XÀaÈ!Áe¹_ÈQÑ=OÓ7OØ (¨¨Q©¡‘��:Ü˜4“y A’~¬#¨j«/¸QÒ*>Ð>Ð>ðÜ (¨¨a©°*¸Q±-Ó @ÐA�Hð $& x .�˜˜Q™‘Ø˜Q�KØð;	ôB �1”c˜(“m aÑ'Ó(ò ˆØ˜A‘;‰ˆˆDØ˜A ™E‘? 1Ñ% x°°A±¡°qÑ'9ˆSˆàÐ2Ñ2°s¸cÔ7NÀYÕ7NÜ�t“9 ’>Ð!�>Ø#% a¡5¨C¢<�A�t˜A‘w‘<°d¸1±g¸q°\ˆDØ$ dÐ+ˆH�Q‰KØàˆaˆbˆ6�YÓ¤3 t£9°£>°c¸SÔ6OÀKÖ6OØ�q‘E˜S‘L R¨¡U¨c¡\Ò2Ð2Ð2Ø�!‰u˜Š|Ø‘Ø�A‘˜#’Ø‘Ø�A‘˜#’Ø‘à�à˜˜�: 
¤ T£
¨4Ó 0Ñ0°4¸¸°:Ñ=ˆDØ&¨Ð-ˆH�Q‰KØð/ñ4 2:Œ}˜X b™\¨!™_Ô-¸q€HÜ”3�x“= 1Ñ$ a¨Ó,ó 9%ˆØ˜a !™e‘_‰
ˆˆUØ˜a‘[‰
ˆˆUØˆð �ˆ:˜) [Ð1Ò1Ø�cŠzØ‘ä˜“J�Ø˜+Ò%¨!¨qª&Ø)‘FØ˜!’VØ)‘Fà�3ˆZÐSÑSØ‰Fà�3ˆZ˜I yÐ1Ò1Ø‰Fà˜#˜a˜b˜'Ô, S¨¨ WÕ,Ø˜˜!�W‰FˆB�Ø˜˜!�W‰FˆB�à�SŠy˜B #šI¨¨r¬°S­Øä   RÓ(ˆAØˆyØØ�SŠyÜ$ Q¨Ó+�Ø�9ØØ˜q™ 9Ñ,‘Ø�s’Ü% b¬/¸!Ó*<Ó=�Ø�:ØØ˜c™ IÑ-‘ä% b¨"Ó-�Ø�:ØØ˜a™ )Ñ+�ô & eÓ,ˆÜ˜}¬c°%«j¸8Ñ.CÓDÐÙÐ&¨Ò1Ø% u¨u¡}Ð5ˆH�Q˜‘U‰OØ˜�Ø'ŠHà$ŠHðs9%ôx ”3�x“=Ó!ò "ˆØ˜A‘;‰ˆˆDàÐ'Ñ'Ø  1 2 ™,¨Ð,ˆH�Q‰KØàˆaˆbˆ6�YÓ 2 b q 6Ð1OÒ#OÜ�D“	ˆAà˜"˜1�v‰HˆC�Ø�s‘
˜s c™zÒ*Ø˜1‘u ’zÐ!�zØ�cŠzØ�Ø�cŠzØ�Ø�cŠzØ�Ø�cŠzÜ% cÓ*�Ø˜�: # s Ò+Ð7¨c°3¨ZÓ7Ð+à�1ŠuØ˜#’:Ø˜s™
 q¨1¡u°¡zÒ2à# C R˜y¨4°°¨9Ñ4°t¸B¸r°{ÑB™à˜c’zà# A a˜y¨4°°¨8Ñ3°d¸1¸2°hÑ>˜à ™) iÑ/°Ð5ˆH�Q‰KØðE"ôJ ”3�x“=Ó!ò 8ˆØ˜A‘;‰ˆˆDÜÑ5°Ô5Õ5ØÔ1°$Ó7Ð7ˆH�QŠKð8ð
 €OøôS "ò Úðús   ÇVÖ	V(Ö'V(c           	      óH   — t        t        t        | ||¬«      fd|i|¤Ž«      S rÎ   )rP   rC  r@   rÏ   s       r   ÚspecializeProgramrE  ë  rÒ   r   Ú__main__r   zfonttools cffLib.specializerz&CFF CharString generalizer/specializer)Údescriptionr   rË   Ú*z	Commands.)ÚmetavarÚnargsÚhelpz--num-regionsÚ
NumRegionsz5Number of variable-font regions for blend opertaions.)rI  rJ  r   rK  z--fontÚFONTFILEzCFF2 font to specialize.)rI  r   rK  z-oz--output-filezOutput font file name.)r.   rK  c                 óN   — t        t        j                  | €d   «      S |    «      S r±   )r	   ÚoptionsÚnum_regionsr_   s    r   ú<lambda>rQ    s*   € ¤Ü×#Ñ#¨¨ AÑFó"€ Ø>EÑFó"€ r   zProgram:z	Commands:zProgram from commands:zGeneralized program:zSpecialized program:)ÚTTFontÚCFF2r   )r2   r*  )ÚmakeOutputFileNamez.specialized)Ú	overWriteÚsuffixÚSavingr±   )FNr   r   )FTFé0   Nr   )FÚ__doc__rû   ÚfontTools.cffLibr   r   r   r@   rG   rP   rW   ÚobjectrY   r¹   rÌ   rÑ   rØ   rÚ   rÝ   ræ   rè   rñ   ró   rø   r˜   r¢   r«   r  r  rC  rE  r²   Úsysr-   ÚargvÚdoctestÚexitÚtestmodÚfailedÚargparseÚArgumentParserÚparserÚadd_argumentr   Ú
parse_argsrO  r   rP  r1   Úprintr6   Úprogram2ÚfontÚfontTools.ttLibrR  ÚcffÚtopDictIndexÚcff2ÚCharStringsÚcharstringsÚkeysÚ	glyphNameÚ
charstringÚ	decompileÚprivaterÆ   Úoutput_fileÚfontTools.misc.cliToolsrT  ÚoutfileÚsaver¶   r   r   ú<module>ry     sz  ðñó å *òò -óZòzò
òôJ5¨ô J5òZ*óZ&óRòò6òò7òtò4ò8ò
Nò
ò,óò>ò0
!ð ØØØØØóxóv	ð ˆzÓÛá
ˆ3�8‰8ƒ}˜ÒÛàˆ�‰��—‘Ó"×)Ñ)Ô*ãà$ˆX×$Ñ$Ø&Ø<ô€Fð ×Ñ˜	¨9¸CÀkÐÔRØ
×ÑØØØØØDð ô ð ×ÑØØØØ'ð	 ô ð ×ÑØØØØ%ð	 ô ð ×Ñ §¡¨¨ Ó-€Gà‡‚ð ×"Ñ"Ð*ñ ñð 	ñ " '§/¡/Ó2ˆÙˆjÔÙ‰o˜gÓ&Ô'Ù$ W¨mÓ<ˆÙˆkÔÙˆhŒÙ$ XÓ.ˆÙÐ&Ô'Ù‰o˜hÓ'Ô(Ø˜(Ò"Ð"Ð"ÙÐ$Ô%Ù‰oÑ/°¸ÓGÓHÔIÙÐ$Ô%Ù‰oÑ/°¸ÓGÓHÔIà‡|‚|Ý*á�g—l‘lÓ#ˆØ�F‰|×Ñ×,Ñ,¨QÑ/ˆØ×&Ñ&ˆØ$×)Ñ)Ó+ò 		ˆIØ$ YÑ/ˆJØ× Ñ Ô"Ø&×.Ñ.×<Ñ<ˆMÙ!2Ø×"Ñ"ØÙ 
× 2Ñ 2°I¸qÓAØ&ô	"ˆJÕð			ð ×ÑÐ&ÝBá(Ø—‘¨°^ô‰Gð ×)Ñ)ˆGÙÙ�(˜GÔ$Ø�I‰I�gÕð ð3 ð{ r   