+
    f7iyR  c                   s  a  R\ tU0 t ^ RIt^ RIt^ RIHtHtHtHtH	t	H
t
HtHtHtHtHt ^ RIt^ RIHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IH t  Rt!Rt"Rt#]PH                  ! R]PJ                  4      t&R R lt'R R lt( ! R R4      t)R]R R llt*]]+],])]]-]]	].]3,          ]],          ].3	,          t/ ! R R4      t0R R lt1R R lt2R R lt3R R  lt4R! R" lt5R# R$ lt6R% R& lt7R' R( lt8R) R* lt9R+ R, lt:R- R. lt;R/ R0 lt<R1]1R2]4/t=] ^ k R1]2R2]5R3]3R4]6R5]7R6]8R7]9R8]:R9];R:]</
t>] ^k R; R< lt?R= R> lt@R? R@ ltARA RB ltBRC RD ltCRE RF ltDRG RH ltERI RJ ltFRK RL ltG]RM RN l4       tH]HP                  ].4      ! ]?4       ]HP                  ]+4      ! ]@4       ]HP                  ]4      ! ]A4       ]HP                  ]-4      ! ]B4       ]HP                  ]P                  P                  4      ! ]C4       ]HP                  ]K4      ! ]D4       ]HP                  ]L4      ! ]D4       ]HP                  ]4      ! ]E4       ]HP                  ],4      ! ]G4       ]HP                  ]M4      ! ]F4       ]HP                  ])4      ! RO 4       R^RP RQ lltNR]O3RR RS lltPR]O3RT RU lltQR]O3RV RW lltRR_RX RY lltSR_RZ R[ lltTR# )`i    N)AnyCallableDictListMappingMutableMappingOptionalSequenceTypeUnionIO)BytesIO)datetime)	b64encode	b64decode)Integral)SimpleNamespace)singledispatch)etree)tostrTs&   <?xml version='1.0' encoding='UTF-8'?>sf   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">z{(?P<year>\d\d\d\d)(?:-(?P<month>\d\d)(?:-(?P<day>\d\d)(?:T(?P<hour>\d\d)(?::(?P<minute>\d\d)(?::(?P<second>\d\d))?)?)?)?)?Zc                0    V ^8  d   QhR\         R\        /# )   sreturn)strr   format   "G/usr/lib64/python3.14/site-packages/fontTools/misc/plistlib/__init__.py__annotate__r   A   s            c                 s    Rp\         P                  V 4      pVf   \        RV R R24      hVP                  4       p. pV F+  pW5,          pVf    MVP	                  \        V4      4       K-  	  \        V!  # )yearz(Expected ISO 8601 date string, but got 'Zrz'.r   ZmonthZdayZhourZminuteZsecond)_date_parserZmatch
ValueErrorZ	groupdictappendintr   )r   ZorderZmZgdZlstkeyZvals   &      r   _date_from_stringr&   A   sx    @E1AyCAa5KLL	
B
Cg;

3s8	  S>r   c                r   )r   dr   )r   r   r   r   r   r   r   Q   s      x C r   c                 s    R V P                   V P                  V P                  V P                  V P                  V P
                  3,          # )z%04d-%02d-%02dT%02d:%02d:%02dZr    )r'      &r   _date_to_stringr)   Q   s>    +						/  r   c                   s   a  ] tR t^\t o RtV 3R lR lt]V 3R lR l4       tRV 3R lR lltV 3R lR	 lt	V 3R
 lR lt
RtV tR# )Dataa6  Represents binary data when ``use_builtin_types=False.``

This class wraps binary data loaded from a plist file when the
``use_builtin_types`` argument to the loading function (:py:func:`fromtree`,
:py:func:`load`, :py:func:`loads`) is false.

The actual binary data is retrieved using the ``data`` attribute.
c                $   < V ^8  d   QhRS[ RR/# r   datar   N)bytesr   __classdict__   "r   r   Data.__annotate__f   s      U t r   c                s    \        V\        4      '       g&   \        R \        V4      P                  ,          4      hWn        R# )zExpected bytes, found %sN)
isinstancer.   	TypeErrortype__name__r-   selfr-      &&r   __init__ZData.__init__f   s/    $&&6d9L9LLMM	r   c                s:   < V ^8  d   QhRS[ S[S[3,          RR/# )r   r-   r   r*   )r	   r.   r   r/   r1   r   r   r2   l   s$     $ $eE3J/ $F $r   c                s$    V ! \        V4      4      # N)r   )Zclsr-   r9   r   
fromBase64ZData.fromBase64k   s    9T?##r   c                s,   < V ^8  d   QhRS[ RS[ RS[/# )r   maxlinelengthindent_levelr   )r$   r.   r/   r1   r   r   r2   o   s"     
 
c 
c 
% 
r   c                s0    \        V P                  WR 7      # )r=   r>   )_encode_base64r-   )r8   r=   r>      &&&r   asBase64ZData.asBase64o   s    II]
 	
r   c                s&   < V ^8  d   QhRS[ RS[/# )r   otherr   )r    boolr/   r1   r   r   r2   t   s     " "C "D "r   c                s    \        WP                  4      '       d   V P                  VP                  8H  # \        V\        4      '       d   V P                  V8H  # \        # r;   )r3   	__class__r-   r.   ZNotImplemented)r8   rC   r9   r   __eq__ZData.__eq__t   sF    e^^,,99

**u%%99%%!!r   c                    < V ^8  d   QhRS[ /# r   r   r   r/   r1   r   r   r2   |   s     E E# Er   c                sd    V P                   P                  : R \        V P                  4      : R2# )Z(Z))rE   r6   reprr-   r8   r(   r   __repr__ZData.__repr__|   s    >>22DODDr   )r-   NiL      )r6   
__module____qualname____firstlineno____doc__r:   Zclassmethodr<   rB   rF   rL   __static_attributes____classdictcell__r0      @r   r*   r*   \   sH      
 $ $
 

" "E Er   r*   c                s^    V ^8  d   QhR\         R\        \        ,          R\        R\         /# )r   r-   r=   r>   r   )r.   r   r$   r   r   r   r   r      s0      
 (BE
r   c                 sj   \        V 4      p V '       d   V'       d   R RV,          ,           p\        ^V\        V4      ,
          4      p. p\        ^ \        V 4      V4       F-  pVP	                  V4       VP	                  WWd,            4       K/  	  VP	                  V4       RP                  V4      p V # )   
s     r   )r   ZmaxlenZranger#   join)r-   r=   r>   ZindentZ
max_lengthZchunksZis   &&&    r   r@   r@      s     T?D--]S[89
q#d)Z0AMM&!MM$1>23 1 	fxxKr   c                   s   a  ] tR t^t o RtR]3V 3R lR lltV 3R lR ltV 3R lR ltV 3R	 lR
 lt	V 3R lR lt
V 3R lR ltV 3R lR ltRtV tR# )PlistTargetax  Event handler using the ElementTree Target API that can be
passed to a XMLParser to produce property list objects from XML.
It is based on the CPython plistlib module's _PlistParser class,
but does not use the expat parser.

>>> from fontTools.misc import etree
>>> parser = etree.XMLParser(target=PlistTarget())
>>> result = etree.XML(
...     "<dict>"
...     "    <key>something</key>"
...     "    <string>blah</string>"
...     "</dict>",
...     parser=parser)
>>> result == {"something": "blah"}
True

Links:
https://github.com/python/cpython/blob/main/Lib/plistlib.py
http://lxml.de/parsing.html#the-target-parser-interface
Nc                s`   < V ^8  d   QhRS[ S[,          RS[S[S[S[3,          ,          RR/# )r   use_builtin_types	dict_typer   N)r   rD   r   r   r   r    r/   r1   r   r   PlistTarget.__annotate__   s;     $ $#D>$ sCx01$ 
	$r   c                s    . V n         R V n        R V n        Vf   \        V n        M'VRJ d   \
        P                  ! R\        4       Wn        W n        R # )NFzJSetting use_builtin_types to False is deprecated and will be removed soon.)	stackcurrent_keyrootUSE_BUILTIN_TYPES_use_builtin_typeswarningsZwarnZDeprecationWarning
_dict_type)r8   r[   r\   rA   r   r:   ZPlistTarget.__init__   sQ    
 ,.
*..2	$&7D# E)$&
 '8##r   c                s@   < V ^8  d   QhRS[ RS[S[ S[ 3,          RR/# )r   tagattribr   N)r   r   r/   r1   r   r   r]      s+       gc3h&7 D r   c                sZ    . V n         \        P                  V4      pVe   V! V 4       R # R # r;   )_data_TARGET_START_HANDLERSget)r8   re   rf   handler   &&& r   startZPlistTarget.start   s+     "
(,,S1DM r   c                r+   )r   re   r   NrI   r/   r1   r   r   r]      s      s t r   c                sL    \         P                  V4      pVe   V! V 4       R # R # r;   )_TARGET_END_HANDLERSri   )r8   re   rj      && r   endZPlistTarget.end   s$    &**3/DM r   c                r+   r,   rI   r/   r1   r   r   r]      s            r   c                s<    V P                   P                  V4       R # r;   )rg   r#   r7   r9   r   r-   ZPlistTarget.data   s    

$r   c                rG   rH   PlistEncodabler/   r1   r   r   r]      s      ~ r   c                sL    V P                   f   \        R4      hV P                   # )NzNo root set.)r`   r"   rK   r(   r   closeZPlistTarget.close   s!    99^,,yyr   c                r+   )r   valuer   Nrp   r/   r1   r   r   r]      s     $ $ $4 $r   c                s   V P                   eg   V P                  R,          p\        V\        P                  P
                  4      '       g   \        RV,          4      hWV P                   &   R V n         R # V P                  '       g	   Wn        R # V P                  R,          p\        V\        4      '       g   \        RV,          4      hVP                  V4       R # )Nzunexpected element: %r)
r_   r^   r3   collectionsabcr   r"   r`   listr#   )r8   rs   Z	stack_toprn   r   
add_objectZPlistTarget.add_object   s    '

2Ii)G)GHH !9I!EFF*/d&&'#DI

2Ii.. !9I!EFFU#r   c                rG   rH   rI   r/   r1   r   r   r]      s      # r   c                sJ    R P                  V P                  4      p. V n        V# ) )rY   rg   r7      & r   get_dataZPlistTarget.get_data   s     wwtzz"
r   )rg   rd   rb   r_   r`   r^   )r6   rO   rP   rQ   rR   dictr:   rl   ro   r-   rr   rx   r{   rS   rT   rU   rV   r   rZ   rZ      sX     . -148$ $(  
    $ $  r   rZ   c                (    V ^8  d   QhR\         RR/# r   r8   r   NrZ   r   r   r   r   r      s      [ T r   c                 s~    V P                  4       pV P                  V4       V P                  P                  V4       R # r;   )rd   rx   r^   r#   )r8   r'   rz   r   
start_dictr      s,    AOOAJJar   c                r}   r~   r   r   r   r   r   r      s      ; 4 r   c                 s    V P                   '       d   \        R V P                   ,          4      hV P                  P                  4        R# )zmissing value for key '%s'N)r_   r"   r^   poprK   r(   r   end_dictr      s3    58H8HHIIJJNNr   c                r}   r~   r   r   r   r   r   r     s     ' '+ '$ 'r   c                 s    V P                   '       g<   \        V P                  R,          \        P                  P
                  4      '       g   \        R4      hV P                  4       V n         R# )rN   zunexpected keyNrt   )r_   r3   r^   ru   rv   r   r"   r{   rK   r(   r   end_keyr     sF    z$**R.+//:Q:QRR)**}}Dr   c                r}   r~   r   r   r   r   r   r     s      k d r   c                 sb    . pV P                  V4       V P                  P                  V4       R # r;   )rx   r^   r#   )r8   Zarz   r   start_arrayr     s%     AOOAJJar   c                r}   r~   r   r   r   r   r   r     s      K D r   c                 s:    V P                   P                  4        R # r;   )r^   r   rK   r(   r   	end_arrayr     s    JJNNr   c                r}   r~   r   r   r   r   r   r     s      ; 4 r   c                 (    V P                  R 4       R# )TNrx   rK   r(   r   end_truer     s    OODr   c                r}   r~   r   r   r   r   r   r     s      K D r   c                 r   )FNr   rK   r(   r   	end_falser     s    OOEr   c                r}   r~   r   r   r   r   r   r     s     * *k *d *r   c                 V    V P                  \        V P                  4       4      4       R # r;   )rx   r$   r{   rK   r(   r   end_integerr     s    OOC()r   c                r}   r~   r   r   r   r   r   r   !  s     , ,; ,4 ,r   c                 r   r;   )rx   floatr{   rK   r(   r   end_realr   !  s    OOE$--/*+r   c                r}   r~   r   r   r   r   r   r   %  s     % %[ %T %r   c                 sD    V P                  V P                  4       4       R # r;   )rx   r{   rK   r(   r   
end_stringr   %  s    OODMMO$r   c                r}   r~   r   r   r   r   r   r   )  s     : :; :4 :r   c                 s    V P                   '       d+   V P                  \        V P                  4       4      4       R # V P                  \        P                  V P                  4       4      4       R # r;   )rb   rx   r   r{   r*   r<   rK   r(   r   end_datar   )  s@    	$--/2389r   c                r}   r~   r   r   r   r   r   r   0  s     8 8; 84 8r   c                 r   r;   )rx   r&   r{   rK   r(   r   end_dater   0  s    OO%dmmo67r   r|   arrayr%   truefalseintegerrealstringr-   datec                P    V ^8  d   QhR\         R\        R\        P                  /# r   rs   ctxr   )r   r   r   Elementr   r   r   r   r   J  s%      3 _  r   c                 s>    \         P                  ! R 4      pWn        V# )r   )r   r   textrs   r   elrn   r   _string_elementr   J  s    	x	 BGIr   c                r   r   )rD   r   r   r   r   r   r   r   r   P  s%     " " "O " "r   c                 sj    V '       d   \         P                  ! R 4      # \         P                  ! R4      # )r   r   )r   r   rs   r   r9   r   _bool_elementr   P  s#    }}V$$==!!r   c                r   r   )r$   r   r   r   r   r   r   r   r   V  s%      C o %-- r   c                 s    RT u;8:  d   R8  d*   M M&\         P                  ! R4      pRV ,          Vn        V# \        V 4      h)rN   r   z%dl         l            )r   r   r   ZOverflowErrorr   rn   r   _integer_elementr   V  s8    5"7"]]9%,	

r   c                r   r   )r   r   r   r   r   r   r   r   r   ^  s%       _  r   c                 R    \         P                  ! R 4      p\        V 4      Vn        V# )r   )r   r   rJ   r   r   rn   r   _real_elementr   ^  s     	v	B5kBGIr   c                sr    V ^8  d   QhR\         \        \        3,          R\        R\        P
                  /# )r   r'   r   r   )r   r   rq   r   r   r   r   r   r   r   r   d  s2      sN"#*9
]]r   c                 s   \         P                  ! R 4      pV P                  4       pVP                  '       d   \	        V4      pV;P
                  ^,          un        V F|  w  rE\        V\        4      '       g    VP                  '       d   K/  \        R4      h\         P                  ! VR4      p\        VR4      Vn        VP                  \        WQ4      4       K~  	  V;P
                  ^,          un        V# )r|   zkeys must be stringsr%   utf-8)r   r   items	sort_keysZsortedr>   r3   r   skipkeysr4   Z
SubElementr   r   r#   _make_element)r'   r   r   r   r%   rs   Zks   &&     r   _dict_elementr   d  s     
v	BGGIE
}}}u
#s##|||233R'sG$
		-+,  Ir   c                sf    V ^8  d   QhR\         \        ,          R\        R\        P                  /# )r   r   r   r   )r   rq   r   r   r   r   r   r   r   r   x  s-     
 
N#
*9

]]
r   c                 s    \         P                  ! R 4      p\        V 4      ^ 8X  d   V# V;P                  ^,          un        V  F  pVP	                  \        W14      4       K  	  V;P                  ^,          un        V# )r   )r   r   rX   r>   r#   r   )r   r   r   rs   s   &&  r   _array_elementr   x  sd     
w	B
5zQ	
		-+, Ir   c                r   )r   r   r   r   )r   r   r   r   r   r   r   r   r     s%        5== r   c                 r   )r   )r   r   r)   r   )r   r   r   rn   r   _date_elementr     s!    	v	Bd#BGIr   c                r   )r   r-   r   r   r.   r   r   r   r   r   r   r   r     s%       O  r   c                 s    \         P                  ! R 4      p\        T VP                  '       d   ^LMRVP                  R7      Vn        V# )r-   Nr?   )r   r   r@   pretty_printr>   r   )r-   r   r   rn   r   _data_elementr     s?    	v	B ---r4%%BG
 Ir   c                r   )r   	raw_bytesr   r   r   r   r   r   r   r     s%     
, 
,u 
,? 
,u}} 
,r   c                 s    VP                   '       d   \        W4      #  V P                  R RR7      p\        Y!4      #   \         d    \	        RT ,          4      hi ; i)ZasciiZstrict)encodingZerrorsz7invalid non-ASCII bytes; use unicode string instead: %r)r[   r   ZdecodeZUnicodeDecodeErrorr"   r   )r   r   r   rn   r   _string_or_data_elementr     sf    
Y,,	%%wx%HF
 v++	 " 	IIU 	s	   = Ac                r   r   )rq   r   r   r   r   r   r   r   r     s%     : : :o :%-- :r   c                 s8    \        R \        V 4      ,          4      h)zunsupported type: %s)r4   r5   r   r9   r   r   r     s    
*T%[8
99r   c                 s.    \        V P                  V4      # r;   )r   r-   )Zvr   r9   r   <lambda>r     s    M!&&#,Fr   c                s    V ^8  d   QhR\         R\        R\        R\        \        ,          R\        R\        R\        P
                  /# )r   rs   r   r   r[   r   r>   r   )rq   rD   r   r$   r   r   r   r   r   r   r     sV     ,) ,),),) ,)  ~	,)
 ,) ,) ]],)r   c                sR    Vf   \         pMTp\        VVVVVR7      p\        W4      # )a  Convert a value derived from a plist into an XML tree.

Args:
    value: Any kind of value to be serialized to XML.
    sort_keys: Whether keys of dictionaries should be sorted.
    skipkeys (bool): Whether to silently skip non-string dictionary
        keys.
    use_builtin_types (bool): If true, byte strings will be
        encoded in Base-64 and wrapped in a ``data`` tag; if
        false, they will be either stored as ASCII strings or an
        exception raised if they cannot be decoded as such. Defaults
        to ``True`` if not present. Deprecated.
    pretty_print (bool): Whether to indent the output.
    indent_level (int): Level of indentation when serializing.

Returns: an ``etree`` ``Element`` object.

Raises:
    ``TypeError``
        if non-string dictionary keys are serialized
        and ``skipkeys`` is false.
    ``ValueError``
        if non-ASCII binary data is present
        and `use_builtin_types` is false.
)r   r   r[   r   r>   )ra   r   r   )rs   r   r   r[   r   r>   Zcontexts   &&&&&& r   totreer     s=    B  --+!!G ((r   c          	      s    V ^8  d   QhR\         P                  R\        \        ,          R\        \
        \        \        3,          ,          R\        /# )r   treer[   r\   r   )r   r   r   rD   r   r   r   r    r   r   r   r   r     sF      
--~ N38,- 		r   c                s   \        WR7      p\        P                  ! V RR7       F  w  rEVR8X  d)   VP                  VP                  VP
                  4       K4  VR8X  g   K=  \        V4      '       g&   TP                  VP                  ;'       g    R4       VP                  VP                  4       K  	  VP                  4       # )at  Convert an XML tree to a plist structure.

Args:
    tree: An ``etree`` ``Element``.
    use_builtin_types: If True, binary data is deserialized to
        bytes strings. If False, it is wrapped in :py:class:`Data`
        objects. Defaults to True if not provided. Deprecated.
    dict_type: What type to use for dictionaries.

Returns: An object (usually a dictionary).
r[   r\   rl   ro   )Zeventsry   )rl   ro   )rZ   r   Ziterwalkrl   re   rf   rX   r-   r   ro   rr   )r   r[   r\   targetZactionZelement   &&&   r   fromtreer     s      +<RF >>$7GHWLLgnn5u_w<<GLL..B/JJw{{# I <<>r   c          	      s    V ^8  d   QhR\         \        ,          R\        \        ,          R\        \
        \        \        3,          ,          R\        /# )r   fpr[   r\   r   )r
   r.   r   rD   r   r   r   r    r   r   r   r   r     sF      
5	~ N38,- 		r   c                s,   \        V R4      '       g&   \        R\        V 4      P                  ,          4      h\	        WR7      p\
        P                  ! VR7      p\
        P                  ! WR7      p VP                  4       #   \         d    Tu # i ; i)a  Load a plist file into an object.

Args:
    fp: An opened file.
    use_builtin_types: If True, binary data is deserialized to
        bytes strings. If False, it is wrapped in :py:class:`Data`
        objects. Defaults to True if not provided. Deprecated.
    dict_type: What type to use for dictionaries.

Returns:
    An object (usually a dictionary) representing the top level of
    the plist file.
Zreadz#'%s' object has no attribute 'read'r   )r   )parser)	hasattrAttributeErrorr5   r6   rZ   r   Z	XMLParserZparseZgetroot)r   r[   r\   r   r   Zresultr   r   loadr     sy    & 2vBT"XEVEVVWW+<RF__F+F[[+F~~ s   3B BBc          	      s    V ^8  d   QhR\         R\        \        ,          R\        \        \
        \        3,          ,          R\        /# )r   rs   r[   r\   r   )r.   r   rD   r   r   r   r    r   r   r   r   r   -  sH     N NN~N N38,-N 		Nr   c                s2    \        V 4      p\        W1VR7      # )a  Load a plist file from a string into an object.

Args:
    value: A bytes string containing a plist.
    use_builtin_types: If True, binary data is deserialized to
        bytes strings. If False, it is wrapped in :py:class:`Data`
        objects. Defaults to True if not provided. Deprecated.
    dict_type: What type to use for dictionaries.

Returns:
    An object (usually a dictionary) representing the top level of
    the plist file.
r   )r   r   )rs   r[   r\   r   rk   r   loadsr   -  s    & 
B9MMr   c                s    V ^8  d   QhR\         R\        \        ,          R\        R\        R\        \        ,          R\        RR/# )	r   rs   r   r   r   r[   r   r   N)rq   r
   r.   rD   r   r   r   r   r   r   D  sV     9 99
5	9 9 	9
  ~9 9 
9r   c                s   \        VR4      '       g&   \        R\        V4      P                  ,          4      h\        P
                  ! RRR7      p\        V VVVVR7      pVP                  V4       \        P                  ! V4      pV'       d   RP                  \        \        R34      p	M\        \        ,           p	VP                  V	4       VP                  VR	VR
R7       R# )a\  Write a Python object to a plist file.

Args:
    value: An object to write.
    fp: A file opened for writing.
    sort_keys (bool): Whether keys of dictionaries should be sorted.
    skipkeys (bool): Whether to silently skip non-string dictionary
        keys.
    use_builtin_types (bool): If true, byte strings will be
        encoded in Base-64 and wrapped in a ``data`` tag; if
        false, they will be either stored as ASCII strings or an
        exception raised if they cannot be represented. Defaults
    pretty_print (bool): Whether to indent the output.
    indent_level (int): Level of indentation when serializing.

Raises:
    ``TypeError``
        if non-string dictionary keys are serialized
        and ``skipkeys`` is false.
    ``ValueError``
        if non-representable binary data is present
        and `use_builtin_types` is false.
writez$'%s' object has no attribute 'write'Zplistz1.0)Zversionr   r   r[   r   rW   r   r   F)r   r   Zxml_declarationN)r   r   r5   r6   r   r   r   r#   ZElementTreerY   XML_DECLARATIONPLIST_DOCTYPEr   )
rs   r   r   r   r[   r   r`   r   r   Zheaders
   &&&&&&    r   dumpr   D  s    @ 2wCd2hFWFWWXX==%0D	+!
B 	KKOT"D _mSAB =0HHVJJ
!	  r   c                sv    V ^8  d   QhR\         R\        R\        R\        \        ,          R\        R\        /# )r   rs   r   r   r[   r   r   )rq   rD   r   r.   r   r   r   r   r     sH     ) ))) )  ~	)
 ) )r   c           	     sX    \        4       p\        V VVVVVR7       VP                  4       # )a  Write a Python object to a string in plist format.

Args:
    value: An object to write.
    sort_keys (bool): Whether keys of dictionaries should be sorted.
    skipkeys (bool): Whether to silently skip non-string dictionary
        keys.
    use_builtin_types (bool): If true, byte strings will be
        encoded in Base-64 and wrapped in a ``data`` tag; if
        false, they will be either stored as strings or an
        exception raised if they cannot be represented. Defaults
    pretty_print (bool): Whether to indent the output.
    indent_level (int): Level of indentation when serializing.

Returns:
    string: A plist representation of the Python object.

Raises:
    ``TypeError``
        if non-string dictionary keys are serialized
        and ``skipkeys`` is false.
    ``ValueError``
        if non-representable binary data is present
        and `use_builtin_types` is false.
r   )r   r   Zgetvalue)rs   r   r   r[   r   r   s   &&&&& r   dumpsr     s4    @ 
B
+! ;;=r   c                s    V ^8  d   Qh/ ^ \         9   d)   \        \        \        \        .R3,          3,          ;R&   ^\         9   d)   \        \        \        \        .R3,          3,          ;R&   # )r   Nrh   rm   )__conditional_annotations__r   r   r   rZ   r   r   r   r   r      sd      f	 S(K=$+>"??@ g	 p	 d3+)< ==> q	 r   rM   )TFNTrN   )TFNT)Vr   Zcollections.abcru   ZreZtypingr    r   r   r   r   r   r   r   r   r	   r
   rc   Zior   r   Zbase64r   r   Znumbersr   Ztypesr   Z	functoolsr   ZfontTools.miscr   ZfontTools.misc.textToolsr   ra   r   r   ZcompileZASCIIr!   r&   r)   r*   r@   rD   r.   r   r   rq   rZ   r   r   r   r   r   r   r   r   r   r   r   r   rh   rm   r   r   r   r   r   r   r   r   r   r   Zregisterrv   rw   ZtupleZ	bytearrayr   r|   r   r   r   r   r   r   )r   rV   r   <module>r      s     	       '  ! $   *  ?9  zz HH	 !E !EH( 		CHSM	
R Rp'*,%:8
 J[D   HY	7
HY{
Hj
H
HB  ""(

,$ : :   s O ,   t ] +   x  !1 2   u m ,   {.. / >   t ^ ,   u n -   x   /   u 5 6   y !- 0   t F G,)b )-04D )-04D )-04N.9x) )r   