+
    f7ia  c                   s(   R t ^ RIHt R tR tR:R ltR tR tR t ! R	 R
]	4      t
R tR;R ltR:R ltR tR tR tR tR tR tR<R ltR:R lt]R8X  Ed   ^ RIt]! ]P2                  4      ^8X  d0   ^ RIt]P6                  ! ]P8                  ! 4       P:                  4       ^ RIt]P>                  ! RRR7      t ] PC                  RRRRR7       ] PC                  R R!RRR"R#7       ] PC                  R$R%RR&R'7       ] PC                  R(R)]"R*R+7       ] PG                  ]P2                  R,,          4      t$]$PJ                  '       d   ]$PL                  f   RMR- t']! ]$PJ                  4      t%](! R.4       ](! ]! ]%4      4       ]! ]%]'4      t)](! R/4       ](! ])4       ]! ])4      t*](! R04       ](! ]! ]*4      4       ]%]*8X  g   Q h](! R14       ](! ]! ]! ]%]'4      4      4       ](! R24       ](! ]! ]! ]%]'4      4      4       ]$PV                  '       Ed   ^ R3I,H-t- ]-! ]$PV                  4      t+]+R4,          P\                  P^                  ^ ,          t0]0Pb                  t2]2Pg                  4        FL  t4]2]4,          t5]5Pm                  4        ]5Pn                  PN                  t']! ]5PJ                  ]']R57      ]5n%        KN  	  ]$Pp                  f   ^ R6I9H:t: ]:! ]$PV                  RR7R87      t;M]$Pp                  t;];'       d   ](! R9];4       ]+Py                  ];4       R# R# R# R# )=aZ  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.

)maxStackLimitc                 s    \        V \        4      '       d   V P                  4       p . pV  F   p \        V4      pTP                  T4       K"  	  V#   \         d"     \        T4      p L0  \         d      L>i ; ii ; iN)
isinstancestrZsplitint
ValueErrorZfloatappend)Zstringprogramtoken   &  C/usr/lib64/python3.14/site-packages/fontTools/cffLib/specializer.pystringToProgramr      s}    &#G	JE 	u  N  	e 	s)   AA=A**A95A=8A99A=c                 s2    R P                  R V  4       4      # )Z c              3   s8   "   T F  p\        V4      x  K  	  R # 5ir   )r   ).0Zx   & r
   	<genexpr>Z"programToString.<locals>.<genexpr>$   s     ,GqCFFGs   )Zjoin)r      &r
   programToStringr   #   s    88,G,,,    Nc                s   Rp^ p^ p^ p. p. p\        V 4      pV EF  p	\        V	\        4      '       g   VP                  V	4       K-  V	R8X  d\   Vf   Q h^V! V4      ,           p
VR,          pW,          ^,           pW|) R .W|) R% \	        V4      pWKV,           ^,
          ,          pTpK  V	R8X  d    VR,          p\        V4      \        J g   Q hMV'       gz   V	R9   ds   RpV	R	9   pV'       d   V\	        WuR 4      ,           pM\	        V4      pV'       d<   V^,          V,          '       d&   VP                  ^ 4      pVP                  RV.34       V	R
9   dM   V'       d   VP                  RV34       VP                  V	. 34       VP                  R\        V4      .34       MVP                  W34       . pEK  	  V'       d   VP                  RV34       V# )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.
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.
FblendNZvsindexT >
   ZhstemZvstemZendcharhmovetoZhstemhmrmovetovmovetoZvstemhmcntrmaskhintmask>   r   r   >   r   r   )	iterr   r   r   lentyper   Zpopnext)r   getNumRegionsZseenWidthOpvsIndexZlenBlendStackZlastBlendIndexcommandsZstackitr   ZnumSourceFonts	numBlendsZnumBlendArgsZlenStackZparityZnumArgsZwidths   &&               r
   programToCommandsr#   '   s   , KGMNHE	gB%%%LLG ,,,w!77N b	I$59L%*=>%:$;E-.!5zH1A55M%NiBiG=C'''5 -
 $
 K44F (#eO.D*EEe*GaK611		!eW.,,U,OOUBK(OOR$r(,-OOUN+q r U$Or   c                 s    . pV  FN  p\        V\        4      '       d%   VP                  V4       VP                  R 4       K=  VP                  V4       KP  	  V# )r   )r   listextendr   )argsZ
token_listargr	   r
   _flattenBlendArgsr(      sP    Jc4  c"g&c"  r   c                s   . pV  Fv  w  r#\         ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        V4      pVP                  V4       V'       g   Ke  VP                  V4       Kx  	  V# )zmTakes a commands list as returned by programToCommands() and converts
it back to a T2CharString program list.c              3   B   "   T F  p\        V\        4      x  K  	  R # 5ir   r   r$   r   r'   r   r
   r   Z$commandsToProgram.<locals>.<genexpr>        5z#t$$   TF)anyr(   r%   r   )r    r   opr&      &   r
   commandsToProgramr1      sd     G3553335555$T*Dt2NN2  Nr   c              #  s   "   \        V 4      pW!,          ^ 8w  d   \        V 4      h\        ^ W!4       F  pWW1,            x  K  	  R# 5i)z'Group the list el into groups of size nN)r   r   range)Zelnli   &&  r
   _everyNr7      s=     BAuzn1a^QUm s   AAc                   s   a  ] tR t^t o ]R 4       t]R 4       t]R 4       t]R 4       t]R 4       t	]R 4       t
]R 4       t]R 4       t]R	 4       t]R
 4       t]R 4       t]R 4       t]R 4       tRtV tR# )!_GeneralizerDecombinerCommandsMapc              #  sP   "   \        V 4      ^8w  d   \        V 4      hRV 3x  R# 5i)   r   Nr   r   r&   r   r
   r   Z)_GeneralizerDecombinerCommandsMap.rmoveto   s&     t9>T""$s   $&c              #  sb   "   \        V 4      ^8w  d   \        V 4      hRV ^ ,          ^ .3x  R# 5i   r   Nr:   r;   r   r
   r   Z)_GeneralizerDecombinerCommandsMap.hmoveto   s.     t9>T""47A,''   -/c              #  sb   "   \        V 4      ^8w  d   \        V 4      hR^ V ^ ,          .3x  R# 5ir<   r:   r;   r   r
   r   Z)_GeneralizerDecombinerCommandsMap.vmoveto   s.     t9>T""1d1g,''r>   c              #  sf   "   V '       g   \        V 4      h\        V ^4       F	  p RV 3x  K  	  R# 5i)r9   rlinetoNr   r7   r;   r   r
   r?   Z)_GeneralizerDecombinerCommandsMap.rlineto   s/     T""D!$Dd## %   /1c              #  s   "   V '       g   \        V 4      h\        V 4      p  R\        V4      ^ .3x  R^ \        V4      .3x  K%    \         d     R# i ; i5iTr?   Nr   r   r   StopIterationr&   r!   r   r
   hlinetoZ)_GeneralizerDecombinerCommandsMap.hlineto   s[     T""$Z	 48Q-00 1d2h-00 		"   A%A AAAAc              #  s   "   V '       g   \        V 4      h\        V 4      p  R^ \        V4      .3x  R\        V4      ^ .3x  K%    \         d     R# i ; i5irB   rC   rE   r   r
   vlinetoZ)_GeneralizerDecombinerCommandsMap.vlineto   s[     T""$Z	 1d2h-00 48Q-00 		rG   c              #  sf   "   V '       g   \        V 4      h\        V ^4       F	  p RV 3x  K  	  R# 5i)i   	rrcurvetoNr@   r;   r   r
   rI   Z+_GeneralizerDecombinerCommandsMap.rrcurveto   s/     T""D!$D%% %rA   c              #  sf  "   \        V 4      pV^8  g   V^,          ^8  d   \        V 4      hV^,          ^8X  d9   RV ^,          V ^ ,          V ^,          V ^,          V ^,          ^ .3x  V R,          p \        V ^4       F+  p RV ^ ,          ^ V ^,          V ^,          V ^,          ^ .3x  K-  	  R# 5i   rI   :   NNNr   r   r7   r&   r4   r   r
   	hhcurvetoZ+_GeneralizerDecombinerCommandsMap.hhcurveto   s     Iq5AEAIT""q5A:a$q'47DGT!Wa PQQ8DD!$Da!T!Wd1gtAw JKK %   B/B1c           	   #  sf  "   \        V 4      pV^8  g   V^,          ^8  d   \        V 4      hV^,          ^8X  d9   RV ^ ,          V ^,          V ^,          V ^,          ^ V ^,          .3x  V R,          p \        V ^4       F+  p R^ V ^ ,          V ^,          V ^,          ^ V ^,          .3x  K-  	  R# 5irJ   rM   rN   r   r
   	vvcurvetoZ+_GeneralizerDecombinerCommandsMap.vvcurveto   s     Iq5AEAIT""q5A:a$q'47DGQQ PQQ8DD!$DDGT!Wd1gq$q' JKK %rP   c              #  s  "   \        V 4      pV^8  g   V^,          R9  d   \        V 4      hRpV^,          ^8X  d   V^,          ^8H  pV RR V RR r \        V ^4      p  \        V4      p RV ^ ,          ^ V ^,          V ^,          ^ V ^,          .3x  \        V4      p R^ V ^ ,          V ^,          V ^,          V ^,          ^ .3x  Ki    \         d     Mi ; iT'       dm   Tp X'       d2   RT ^ ,          ^ T ^,          T ^,          T ^,          T ^,          .3x  R# R^ T ^ ,          T ^,          T ^,          T ^,          T ^,          .3x  R# R# 5irK   NrI   >       r=   rK   rL   ir   r   r7   r   rD   r&   r4   	last_argsZlastStraightr!      &    r
   	hvcurvetoZ+_GeneralizerDecombinerCommandsMap.hvcurveto   sM    Iq5AE-T""	q5A:q5A:L"3Bibc)T1	Bx"T!Waa$q'1d1g$NOOBx"QQa$q'47A$NOO 		D"T!Waa$q'47DQRG$TUU"QQa$q'47DQRG$TUU 2   AE A)C	 	CEC
E"	E,A$Ec              #  s  "   \        V 4      pV^8  g   V^,          R9  d   \        V 4      hRpV^,          ^8X  d   V^,          ^8H  pV RR V RR r \        V ^4      p  \        V4      p R^ V ^ ,          V ^,          V ^,          V ^,          ^ .3x  \        V4      p RV ^ ,          ^ V ^,          V ^,          ^ V ^,          .3x  Ki    \         d     Mi ; iT'       dm   Tp X'       d2   R^ T ^ ,          T ^,          T ^,          T ^,          T ^,          .3x  R# RT ^ ,          ^ T ^,          T ^,          T ^,          T ^,          .3x  R# R# 5irR   rT   rU   rW   r
   	vhcurvetoZ+_GeneralizerDecombinerCommandsMap.vhcurveto  sM    Iq5AE-T""	q5A:q5A:L"3Bibc)T1	Bx"QQa$q'47A$NOOBx"T!Waa$q'1d1g$NOO 		D"QQa$q'47DQRG$TUU"T!Waa$q'47DQRG$TUU rY   c              #  s   "   \        V 4      pV^8  g   V^,          ^8w  d   \        V 4      hV RR V RR r \        V ^4       F	  p RV 3x  K  	  RV3x  R# 5i)   NrI   r?   rM   r&   r4   rV   r	   r
   
rcurvelineZ,_GeneralizerDecombinerCommandsMap.rcurveline%  sd     Iq5AEQJT""s)T"#YiD!$D%% %)$$   AAc              #  s   "   \        V 4      pV^8  g   V^,          ^ 8w  d   \        V 4      hV RR V RR r \        V ^4       F	  p RV 3x  K  	  RV3x  R# 5i)r[   Nr?   rI   irM   r]   r	   r
   
rlinecurveZ,_GeneralizerDecombinerCommandsMap.rlinecurve/  sd     Iq5AEQJT""s)T"#YiD!$Dd## %I&&r_    N)__name__Z
__module__Z__qualname__Z__firstlineno__Zstaticmethodr   r   r   r?   rF   rH   rI   rO   rQ   rX   rZ   r^   r`   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r
   r8   r8      s       
 ( (
 ( (
 $ $ 	 	 	 	 & & L L L L V V0 V V0 % % ' 'r   r8   c           	      s   \        V  Uu. uF  p\        V\        4      NK  	  up4      '       d@   V  UUu. uF0  p\        V\        4      '       d   \        V4      MV. F  pVNK  	  K2  	  pppMT pVR,          pVRR p\	        V4      pWe,          ^,
          pWW^,           ,          V8X  g   \        V 4      hVRV  Uu. uF  q.NK  	  ppWER p	\	        V	4      p
\        ^ W4       Uu. uF  q9W3V,            NK  	  pp\        W4       UUu. uF  w  rW,           ^.,           NK  	  pppV# u upi u uppi u upi u upi u uppi )r=   Nr   )r.   r   r$   _convertBlendOpToArgsr   r   r2   zip)Z	blendListr'   Zer5   r&   r"   r4   Z
numRegionsZdefaultArgsZ	deltaArgsZnumDeltaValuesZ	deltaListab
blend_argss   &              r
   rc   rc   :  sb   
 Y7YcJsD!Y788 
2<Q2E2E+A.A3N N  	 
  RI 9DD	A!#Ja(A-##$()$45$4S5$4K5Z I^N/4Q/S/S!!*n%/S   +.k*EF*E$!!%1#++*EJFE 8
4 6 Gs   D,6D1?D7)D<Ec           
      s   . p\         pV  F  w  rE\        V Uu. uF  p\        V\        4      NK  	  up4      '       d@    V UUu. uF0  p\        V\        4      '       d   \	        V4      MV. F  pVNK  	  K2  	  ppp\        W4R4      pVf   VP                  WE34       K   V! V4       F  p	VP                  V	4       K  	  K  	  V# u upi u uppi   \
         d4    T'       d*   TP                  R T34       TP                  R T.34        Lh i ; i  \
         d6    T'       d,   TP                  R T34       TP                  R T.34        EKH  h i ; i)r   N)r8   r.   r   r$   rc   r   r   Zgetattr)
r    ignoreErrorsZresultZmappingr/   r&   r'   r3   Zfunccommands
   &&        r
   generalizeCommandsrj   d  s\   F/G6#
3%677  $#6@d6K6K-c2RUQVV   W #    wD)<MM2*%
	:g& &3 F MC 7   MM2t*-MM2t*-   	 r4j)rB4j))	sG   C	
 C6C;C# DCD''DDE('EEc                 >    \        \        \        W4      3/ VB 4      # r   )r1   rj   r#   r   r   Zkwargs   &&,r
   generalizeProgramrn     "    ,WDOO r   c                s    V ^ ,          '       g&   V ^,          '       g   RV R,          3# RV R,          3# V ^,          '       g   RV R,          3# RV 3# )aV  
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))
0Nr=   Nvr=   NNhrra   )rr   r   r
   _categorizeVectorrv     sR     Q44tt":":tt":6Mr   c                 s:    V R 8X  d   V# VR 8X  d   V # W8X  d   V # R# )rp   Nra   )re   rf   s   &&r
   _mergeCategoriesrw     s'    CxCxvr   c                 s<    V R 8X  d   R# V R8X  d   R # V R9   g   Q hV # )rt   rr   Z0rra   )re   r   r
   _negateCategoryrx     s'    CxCx99Hr   c                 s   \        V 4      p^ p. p^ pWA8  EdP   W,          pV^,          p\        V\        4      '       g   VP                  V4       V^,          pKJ  Tp\        V4      ^,
          pV.pV^V,           ,          pWA8  dX   \        W,          \        4      '       d<   W',           \        8  d+   VP                  W,          4       V^,          pW',          pK]  \        V4      p	. p
V F  pV
P                  V^ ,          4       K  	  V F'  pVR,          ^8X  g   Q hV
P                  V^R 4       K)  	  V
P                  V	4       VP                  V
4       Wi,           pEKV  V# rS   r   )r   r   r$   r   r    r%   )r&   Znum_argsZ	stack_usenew_argsr5   r'   Zprev_stack_useZnum_sourcesZ	blendlistZ
num_blendsrg   s   &          r
   _convertToBlendCmdsr{     sA    4yHIH	A
,g	Q#t$$OOC NI&N
 c(Q,KI[(I tw--+m;  )Q(	 YJJ !!#a&) ! 2w!|#|!!#a), ! j)OOJ'&3IOr   c                 s   \        V\        4      '       d   \        V \        4      '       dw   \        V 4      \        V4      8w  g   V R,          VR,          8w  d   \        4       h\	        V RR VRR 4       UUu. uF  w  r#\        W#4      NK  	  uppV R,          .,           # Yr\        V \        4      '       d3   V R,          ^8X  g   Q h\        V ^ ,          V4      .V R,          ,           # W,           # u uppi )r=   Nrs   r   )r   r$   r   r   rd   _addArgs)re   rf   ZvaZvbr6   r
   r|   r|     s    !Ta1vQ1R5AbE> l"36q"vq"v3FG3FHR$3FG1R5'QQq!Tuzz1q!"QrU**5L Hs   :C5c                 s    ^ p^ pV  FK  p\        V4      \        J d-   \        W!\        V4      ,           4      pWR,          ,          pKB  V^,          pKM  	  \        W4      # ry   )r   r$   max_argsStackUse)r&   ZstackLenZmaxLenr'   r0   r
   r~   r~   	  sX    HF9M#,>!>?FBHMH  x  r   Tc                 s   V'       d   \        WR 7      p M\        V 4      p \        \        V 4      ^,
          ^ R4       F  pRW,          ^ ,          u;8X  d   W^,
          ,          ^ ,          8X  g   K5  M K9  W^,
          ,          ^,          W,          ^,          rvR\	        V^ ,          V^ ,          4      \	        V^,          V^,          4      .3W^,
          &   W K  	  \        \        V 4      4       F  pW,          w  rVR9   d#   \        V	4      w  rWR,          ,           V	3W&   K6  VR8X  g   K?  \        V	R,          4      w  r\        V	RR 4      w  rW,           R,           WR,          ,           V,           3W&   K  	  V'       Eg   \        \        V 4      ^,
          RR4       F  pW,          w  rVR	8X  d5   \        V	4      ^8X  g   Q h\        V	R
,          4      w  rV
R,           pW3W&   VR8X  d   W KS  V'       g   K]  VR9   g   Kf  WV^,
          ,          ^ ,          8X  g   K  W^,
          ,          w  pp\        V	4      ^8X  d   \        V4      ^8X  g   Q h \	        V	^ ,          V^ ,          4      .pTT3Y^,
          &   Y K  	  \        ^\        V 4      ^,
          4       EFM  pW,          w  rW^,
          ,          ^ ,          W^,           ,          ^ ,          ppVR9   dQ   VTu;8X  d   R8X  dB   M M>\        V	4      ^8X  g   Q hV^ ,          R8X  d   ^ V	^ ,          .M
V	^ ,          ^ .p	RV	3W&   K  VR,          R8X  g   K  \        V	4      ^8X  g   K  VTu;8X  d
   R8X  g   K  M K  V^ ,          R8H  V^,          R8H  ,          '       g   Q hV^ ,          R8X  d   ^ pM$V^ ,          R8w  d   ^pMV^,          R8X  d   ^pM^pV	RV \        V	4      ! R 4      ,           V	VR ,           p	RV	3W&   EKP  	  V '       d   \        V R,          ^,          4      M^ p\        \        V 4      ^,
          ^ R4       EF  pW^,
          ,          w  ppW,          w  ppRpVV0RR08:  d4   VV8X  d   TpEM0\        V4      pVR8X  d   V^8X  d   RpEMV^8X  d   RpEMVV3R!9   d   TpMVV0RR08X  d   TpMRVR,          u;8X  d   VR,          8X  d   M MVR,          w  ppVR,          w  ppVR8X  g   VR8X  g   VTu;8X  d   R8X  d   M MK  \        VV4      pVf   K  VR8X  d%   \        VV4      pVf   EK  RV,           R,           pMWVR8X  d.   \        V\        V4      4      pVf   EK5  VR,           R,           pM#\        VV4      pVf   EKY  VV,           R,           p\        V4      p\        V\        V4      V,           4      p V'       d"   V V8  d   VW,           3W^,
          &   W T pEK  TpEK  	  \        \        V 4      4       EFT  pW,          w  rVR"9   d   RVR,          ,           V	3W&   K+  VR,          R8X  g   K;  VR,          R#9  g   KK  \        V	4      pVR,          w  p!pV!R8H  VR8H  ,          '       d   V^,          ^8X  g   Q hV!R8X  d   Rp!VR8X  d   RpV!R8X  d   Tp!VR8X  d   \        V!4      pV!V0RR08:  g
   Q V!V34       hV^,          '       dj   V!V8w  d7   V!R8H  V^,          ^8H  ,          '       d   V	RR V	RR ,           V	RR ,           p	M,V!R8X  d&   V	R,          V	R,          ,           V	R,          ,           p	V!V,           R,           V	3W&   EKW  	  \        \        V 4      4       FX  pW,          w  r\        ;QJ d    R V	 4       F  '       g   K   RM	  RM! R V	 4       4      '       g   KI  V\        V	4      3W&   KZ  	  V #   \         d     EKB  i ; i)$)rh   r   r?   rs   rI   :Nr9   NNZcurveto:r9   rK   NZ	00curveto:r=   i   NZlineto0linetorF   rH   rr   :r9   NNru   r`   r^   rt   rp   :r=   r9   Nrq   c              3   r)   r   r*   r+   r   r
   r   Z%specializeCommands.<locals>.<genexpr>>  r,   r-   TFr   >   r?   r   r\   >   rF   rH   >   r   rF   rH   )rS   >   )r?   r`   )rI   r^   >   r   Z0moveto>   ZhhZhvZrrZvhZvv)rj   r$   r2   r   r|   rv   r   r   r~   rw   rx   r}   r.   r{   )"r    rh   ZgeneralizeFirstZpreserveTopologymaxstackr5   Zv1Zv2r/   r&   ZcZc1Zargs1Zc2Zargs2Z_Z
other_argsrz   ZprvZnxtZposZstackUseZop1Zop2Znew_opr4   Zd0Zd1Zd2Zd3ZdZargs1StackUseZcombinedStackUseZop0s"   &&&&&                             r
   specializeCommandsr     sF   P %hJ> 3x=1$a,A<(q5/!*<<<!e_Q'Q"Q%A'"Q%A)?@HUO  -n 3x=!;'''-GAf*d*HK)$r(3IB)$rs)4IB'I-uCy/@5/HHHK "F s8}q("b1A{HB [ 4yA~%~+DI6\ h YK qR11ra!e_Q=O7O (Q:4yA~#j/Q*>>> (a*Q- @AH $&x.QK; 2B 1c(ma'(;E?1%xAq'9S22sc7NY7Nt9>!>#%a5C<AtAw<d1gq\D$d+HKb6Y3t9>cS6OK6O6OqESLRUc\2222!u|A#A#:T
4 004:=D&-HK/ )4 2:}Xb\!_-qH3x=1$a,!e_
U[
U :)[11czJ+%!q&)F!V)F3ZSSF3ZIy11F#b',SW,WFBWFBSyB#IrS R(AySy$Q+9q9,s%b/!*<=:cI-%b"-:a)+ &e,}c%j8.CD&1%u}5HUO'H$Hs -x 3x=!;''2,,HKb6Y2b61O#OD	A"vHCs
scz**1uz!zczczczcz%c*:#s+7c3Z7+1uu#:s
q1uz22#CRy494tBr{Bcz#Cy483d2h>)i/5HKE "J 3x=!;35533355551$77HK "
 OS " s    __+*_+c                 rk   r   )r1   r   r#   rl   rm   r
   specializeProgramr   D  ro   r   Z__main__zfonttools cffLib.specializerz&CFF CharString generalizer/specializer)Zdescriptionr   ri   Z*z	Commands.)metavarnargshelpz--num-regionsZ
NumRegionsz5Number of variable-font regions for blend opertaions.)r   r   defaultr   z--fontZFONTFILEzCFF2 font to specialize.)r   r   r   z-oz--output-filezOutput font file name.)r   r   rs   c                 sb    \        \        P                  V f   ^ ,          4      # T ,          4      # r   )r   optionsnum_regions)r   r   r
   <lambda>r   s  s&    ##AF">EF"r   zProgram:z	Commands:zProgram from commands:zGeneralized program:zSpecialized program:)TTFontZCFF2)r   )makeOutputFileNamez.specialized)Z	overWriteZsuffixZSavingr   )F)FTFi0   )=Z__doc__ZfontTools.cffLibr    r   r   r#   r(   r1   r7   Zobjectr8   rc   rj   rn   rv   rw   rx   r{   r|   r~   r   r   rb   Zsysr   ZargvZdoctestZexitZtestmodZfailedZargparseZArgumentParserZparserZadd_argumentr   Z
parse_argsr   r   r   r   Zprintr    Zprogram2ZfontZfontTools.ttLibr   ZcffZtopDictIndexZcff2ZCharStringsZcharstringsZkeysZ	glyphNameZ
charstringZ	decompileZprivateZoutput_fileZfontTools.misc.cliToolsr   ZoutfileZsavera   r   r
   <module>r      s"   + -Yx
S' S'l'T&R67t
!k\	 z
388}"))*$$&<F 	9CkR
D   '	   %	   -G ""*  	 "'//2jog&'$Wm<kh$X.&'oh'(("""$%o/GHI$%o/GHI|||*gll#F|,,Q/&&$))+I$Y/J  "&..<<M!2""MM"J	 , &B(^G ))G(G$IIg - { r   