+
    K<iyR                       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# )`    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   )formats   "B/usr/lib/python3/dist-packages/fontTools/misc/plistlib/__init__.py__annotate__r   A   s            c                     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 'rz'.r!   monthdayhourminutesecond)_date_parsermatch
ValueError	groupdictappendintr   )r   ordermgdlstkeyvals   &      r   _date_from_stringr5   A   sx    @E1AyCAa5KLL	
B
Cg;

3s8	  S>r   c                0    V ^8  d   QhR\         R\        /# )r   dr   )r   r   )r   s   "r   r   r   Q   s      x C r   c                     R V P                   V P                  V P                  V P                  V P                  V P
                  3,          # )z%04d-%02d-%02dT%02d:%02d:%02dZr#   )r7   s   &r   _date_to_stringr9   Q   s>    +						/  r   c                      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__s   "r   r   Data.__annotate__f   s      U t r   c                    \        V\        4      '       g&   \        R \        V4      P                  ,          4      hWn        R# )zExpected bytes, found %sN)
isinstancer?   	TypeErrortype__name__r>   selfr>   s   &&r   __init__Data.__init__f   s/    $&&6d9L9LLMM	r   c                :   < V ^8  d   QhRS[ S[S[3,          RR/# )r   r>   r   r;   )r   r?   r   )r   r@   s   "r   r   rA   l   s$     $ $eE3J/ $F $r   c                $    V ! \        V4      4      # N)r   )clsr>   s   &&r   
fromBase64Data.fromBase64k   s    9T?##r   c                ,   < V ^8  d   QhRS[ RS[ RS[/# )r   maxlinelengthindent_levelr   )r.   r?   )r   r@   s   "r   r   rA   o   s"     
 
c 
c 
% 
r   c                0    \        V P                  WR 7      # )rR   rS   )_encode_base64r>   )rH   rR   rS   s   &&&r   asBase64Data.asBase64o   s    II]
 	
r   c                &   < V ^8  d   QhRS[ RS[/# )r   otherr   )r   bool)r   r@   s   "r   r   rA   t   s     " "C "D "r   c                    \        WP                  4      '       d   V P                  VP                  8H  # \        V\        4      '       d   V P                  V8H  # \        # rM   )rC   	__class__r>   r?   NotImplemented)rH   rZ   s   &&r   __eq__Data.__eq__t   sF    e^^,,99

**u%%99%%!!r   c                    < V ^8  d   QhRS[ /# r   r   r   )r   r@   s   "r   r   rA   |   s     E E# Er   c                d    V P                   P                  : R \        V P                  4      : R2# )())r]   rF   reprr>   rH   s   &r   __repr__Data.__repr__|   s    >>22DODDr   )r>   NL      )rF   
__module____qualname____firstlineno____doc__rI   classmethodrO   rW   r_   ri   __static_attributes____classdictcell__r@   s   @r   r;   r;   \   sH      
 $ $
 

" "E Er   r;   c                ^    V ^8  d   QhR\         R\        \        ,          R\        R\         /# )r   r>   rR   rS   r   )r?   r	   r.   )r   s   "r   r   r      s0      
 (BE
r   c                 j   \        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   maxlenranger-   join)r>   rR   rS   indent
max_lengthchunksis   &&&    r   rV   rV      s     T?D--]S[89
q#d)Z0AMM&!MM$1>23 1 	fxxKr   c                      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                `   < V ^8  d   QhRS[ S[,          RS[S[S[S[3,          ,          RR/# )r   use_builtin_types	dict_typer   N)r	   r[   r   r   r   r   )r   r@   s   "r   r   PlistTarget.__annotate__   s;     $ $#D>$ sCx01$ 
	$r   c                    . 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warningswarnDeprecationWarning
_dict_type)rH   r   r   s   &&&r   rI   PlistTarget.__init__   sQ    
 ,.
*..2	$&7D# E)$&
 '8##r   c                @   < V ^8  d   QhRS[ RS[S[ S[ 3,          RR/# )r   tagattribr   N)r   r   )r   r@   s   "r   r   r      s+       gc3h&7 D r   c                Z    . V n         \        P                  V4      pVe   V! V 4       R # R # rM   )_data_TARGET_START_HANDLERSget)rH   r   r   handlers   &&& r   startPlistTarget.start   s+     "
(,,S1DM r   c                $   < V ^8  d   QhRS[ RR/# )r   r   r   Nrc   )r   r@   s   "r   r   r      s      s t r   c                L    \         P                  V4      pVe   V! V 4       R # R # rM   )_TARGET_END_HANDLERSr   )rH   r   r   s   && r   endPlistTarget.end   s$    &**3/DM r   c                $   < V ^8  d   QhRS[ RR/# r=   rc   )r   r@   s   "r   r   r      s            r   c                <    V P                   P                  V4       R # rM   )r   r-   rG   s   &&r   r>   PlistTarget.data   s    

$r   c                    < V ^8  d   QhRS[ /# rb   PlistEncodable)r   r@   s   "r   r   r      s      ~ r   c                L    V P                   f   \        R4      hV P                   # )NzNo root set.)r   r+   rh   s   &r   closePlistTarget.close   s!    99^,,yyr   c                $   < V ^8  d   QhRS[ RR/# )r   valuer   Nr   )r   r@   s   "r   r   r      s     $ $ $4 $r   c                   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   rC   collectionsabcr   r+   r   listr-   )rH   r   	stack_tops   && r   
add_object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                    < V ^8  d   QhRS[ /# rb   rc   )r   r@   s   "r   r   r      s      # r   c                J    R P                  V P                  4      p. V n        V# ) )r|   r   rG   s   & r   get_dataPlistTarget.get_data   s     wwtzz"
r   )r   r   r   r   r   r   )rF   rn   ro   rp   rq   dictrI   r   r   r>   r   r   r   rs   rt   ru   s   @r   r   r      sX     . -148$ $(  
    $ $  r   r   c                (    V ^8  d   QhR\         RR/# r   rH   r   Nr   )r   s   "r   r   r      s      [ T r   c                 ~    V P                  4       pV P                  V4       V P                  P                  V4       R # rM   )r   r   r   r-   )rH   r7   s   & r   
start_dictr      s,    AOOAJJar   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r      s      ; 4 r   c                     V P                   '       d   \        R V P                   ,          4      hV P                  P                  4        R# )zmissing value for key '%s'N)r   r+   r   poprh   s   &r   end_dictr      s3    58H8HHIIJJNNr   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r     s     ' '+ '$ 'r   c                     V P                   '       g<   \        V P                  R,          \        P                  P
                  4      '       g   \        R4      hV P                  4       V n         R# )rm   zunexpected keyNr   )r   rC   r   r   r   r   r+   r   rh   s   &r   end_keyr     sF    z$**R.+//:Q:QRR)**}}Dr   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r     s      k d r   c                 b    . pV P                  V4       V P                  P                  V4       R # rM   )r   r   r-   )rH   as   & r   start_arrayr     s%     AOOAJJar   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r     s      K D r   c                 :    V P                   P                  4        R # rM   )r   r   rh   s   &r   	end_arrayr     s    JJNNr   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r     s      ; 4 r   c                 (    V P                  R 4       R# )TNr   rh   s   &r   end_truer     s    OODr   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r     s      K D r   c                 (    V P                  R 4       R# )FNr   rh   s   &r   	end_falser     s    OOEr   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r     s     * *k *d *r   c                 V    V P                  \        V P                  4       4      4       R # rM   )r   r.   r   rh   s   &r   end_integerr     s    OOC()r   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r   !  s     , ,; ,4 ,r   c                 V    V P                  \        V P                  4       4      4       R # rM   )r   floatr   rh   s   &r   end_realr   !  s    OOE$--/*+r   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r   %  s     % %[ %T %r   c                 D    V P                  V P                  4       4       R # rM   )r   r   rh   s   &r   
end_stringr   %  s    OODMMO$r   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r   )  s     : :; :4 :r   c                     V P                   '       d+   V P                  \        V P                  4       4      4       R # V P                  \        P                  V P                  4       4      4       R # rM   )r   r   r   r   r;   rO   rh   s   &r   end_datar   )  s@    	$--/2389r   c                (    V ^8  d   QhR\         RR/# r   r   )r   s   "r   r   r   0  s     8 8; 84 8r   c                 V    V P                  \        V P                  4       4      4       R # rM   )r   r5   r   rh   s   &r   end_dater   0  s    OO%dmmo67r   r   arrayr3   truefalseintegerrealstringr>   datec                P    V ^8  d   QhR\         R\        R\        P                  /# r   r   ctxr   )r   r   r   Element)r   s   "r   r   r   J  s%      3 _  r   c                 >    \         P                  ! R 4      pWn        V# )r   )r   r   textr   r   els   && r   _string_elementr   J  s    	x	 BGIr   c                P    V ^8  d   QhR\         R\        R\        P                  /# r   )r[   r   r   r   )r   s   "r   r   r   P  s%     " " "O " "r   c                 j    V '       d   \         P                  ! R 4      # \         P                  ! R4      # )r   r   )r   r   r   r   s   &&r   _bool_elementr   P  s#    }}V$$==!!r   c                P    V ^8  d   QhR\         R\        R\        P                  /# r   )r.   r   r   r   )r   s   "r   r   r   V  s%      C o %-- r   c                     RT u;8:  d   R8  d*   M M&\         P                  ! R4      pRV ,          Vn        V# \        V 4      h)rm   r   z%dl         l            )r   r   r   OverflowErrorr   s   && r   _integer_elementr   V  s8    5"7"]]9%,	

r   c                P    V ^8  d   QhR\         R\        R\        P                  /# r   )r   r   r   r   )r   s   "r   r   r   ^  s%       _  r   c                 R    \         P                  ! R 4      p\        V 4      Vn        V# )r   )r   r   rg   r   r   s   && r   _real_elementr   ^  s     	v	B5kBGIr   c                r    V ^8  d   QhR\         \        \        3,          R\        R\        P
                  /# )r   r7   r   r   )r   r   r   r   r   r   )r   s   "r   r   r   d  s2      sN"#*9
]]r   c                    \         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 stringsr3   utf-8)r   r   items	sort_keyssortedrS   rC   r   skipkeysrD   
SubElementr   r   r-   _make_element)r7   r   r   r  r3   r   ks   &&     r   _dict_elementr	  d  s     
v	BGGIE
}}}u
#s##|||233R'sG$
		-+,  Ir   c                f    V ^8  d   QhR\         \        ,          R\        R\        P                  /# )r   r   r   r   )r
   r   r   r   r   )r   s   "r   r   r   x  s-     
 
N#
*9

]]
r   c                     \         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   rz   rS   r-   r  )r   r   r   r   s   &&  r   _array_elementr  x  sd     
w	B
5zQ	
		-+, Ir   c                P    V ^8  d   QhR\         R\        R\        P                  /# )r   r   r   r   )r   r   r   r   )r   s   "r   r   r     s%        5== r   c                 R    \         P                  ! R 4      p\        V 4      Vn        V# )r   )r   r   r9   r   )r   r   r   s   && r   _date_elementr    s!    	v	Bd#BGIr   c                P    V ^8  d   QhR\         R\        R\        P                  /# )r   r>   r   r   r?   r   r   r   )r   s   "r   r   r     s%       O  r   c                     \         P                  ! R 4      p\        T VP                  '       d   ^LMRVP                  R7      Vn        V# )r>   NrU   )r   r   rV   pretty_printrS   r   )r>   r   r   s   && r   _data_elementr    s?    	v	B ---r4%%BG
 Ir   c                P    V ^8  d   QhR\         R\        R\        P                  /# )r   	raw_bytesr   r   r  )r   s   "r   r   r     s%     
, 
,u 
,? 
,u}} 
,r   c                     VP                   '       d   \        W4      #  V P                  R RR7      p\        Y!4      #   \         d    \	        RT ,          4      hi ; i)asciistrict)encodingerrorsz7invalid non-ASCII bytes; use unicode string instead: %r)r   r  decodeUnicodeDecodeErrorr+   r   )r  r   r   s   && r   _string_or_data_elementr    sf    
Y,,	%%wx%HF
 v++	 " 	IIU 	s	   = Ac                P    V ^8  d   QhR\         R\        R\        P                  /# r   )r   r   r   r   )r   s   "r   r   r     s%     : : :o :%-- :r   c                 8    \        R \        V 4      ,          4      h)zunsupported type: %s)rD   rE   r   s   &&r   r  r    s    
*T%[8
99r   c                 .    \        V P                  V4      # rM   )r  r>   )vr   s   &&r   <lambda>r#    s    M!&&#,Fr   c                    V ^8  d   QhR\         R\        R\        R\        \        ,          R\        R\        R\        P
                  /# )r   r   r  r  r   r  rS   r   )r   r[   r	   r.   r   r   )r   s   "r   r   r     sV     ,) ,),),) ,)  ~	,)
 ,) ,) ]],)r   c                R    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  rS   )r   r   r  )r   r  r  r   r  rS   contexts   &&&&&& r   totreer'    s=    B  --+!!G ((r   c          	          V ^8  d   QhR\         P                  R\        \        ,          R\        \
        \        \        3,          ,          R\        /# )r   treer   r   r   )r   r   r	   r[   r   r   r   r   )r   s   "r   r   r     sF      
--~ N38,- 		r   c                   \        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   r   r   )eventsr   )r   r   )r   r   iterwalkr   r   r   rz   r>   r   r   r   )r)  r   r   targetactionelements   &&&   r   fromtreer1    s      +<RF >>$7GHWLLgnn5u_w<<GLL..B/JJw{{# I <<>r   c          	          V ^8  d   QhR\         \        ,          R\        \        ,          R\        \
        \        \        3,          ,          R\        /# )r   fpr   r   r   )r   r?   r	   r[   r   r   r   r   )r   s   "r   r   r     sF      
5	~ N38,- 		r   c                ,   \        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.
readz#'%s' object has no attribute 'read'r+  )r.  )parser)	hasattrAttributeErrorrE   rF   r   r   	XMLParserparsegetroot)r3  r   r   r.  r6  results   &&&   r   loadr=    sy    & 2vBT"XEVEVVWW+<RF__F+F[[+F~~ s   3B BBc          	          V ^8  d   QhR\         R\        \        ,          R\        \        \
        \        3,          ,          R\        /# )r   r   r   r   r   )r?   r	   r[   r   r   r   r   )r   s   "r   r   r   -  sH     N NN~N N38,-N 		Nr   c                2    \        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=  )r   r   r   r3  s   &&& r   loadsr@  -  s    & 
B9MMr   c                    V ^8  d   QhR\         R\        \        ,          R\        R\        R\        \        ,          R\        RR/# )	r   r   r3  r  r  r   r  r   N)r   r   r?   r[   r	   )r   s   "r   r   r   D  sV     9 99
5	9 9 	9
  ~9 9 
9r   c                   \        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'plistz1.0)versionr  r  r   r  rx   r   r  F)r  r  xml_declarationN)r7  r8  rE   rF   r   r   r'  r-   ElementTreer|   XML_DECLARATIONPLIST_DOCTYPErC  )
r   r3  r  r  r   r  r   r   r)  headers
   &&&&&&    r   dumprL  D  s    @ 2wCd2hFWFWWXX==%0D	+!
B 	KKOT"D _mSAB =0HHVJJ
!	  r   c                v    V ^8  d   QhR\         R\        R\        R\        \        ,          R\        R\        /# )r   r   r  r  r   r  r   )r   r[   r	   r?   )r   s   "r   r   r     sH     ) ))) )  ~	)
 ) )r   c           	     X    \        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.
rF  )r   rL  getvalue)r   r  r  r   r  r3  s   &&&&& r   dumpsrP    s4    @ 
B
+! ;;=r   c                    V ^8  d   Qh/ ^ \         9   d)   \        \        \        \        .R3,          3,          ;R&   ^\         9   d)   \        \        \        \        .R3,          3,          ;R&   # )r   Nr   r   )__conditional_annotations__r   r   r   r   )r   s   "r   r   r      sd      f	 S(K=$+>"??@ g	 p	 d3+)< ==> q	 r   rk   )TFNTrm   )TFNT)VrR  collections.abcr   retypingr   r   r   r   r   r   r	   r
   r   r   r   r   ior   r   base64r   r   numbersr   typesr   	functoolsr   fontTools.miscr   fontTools.misc.textToolsr   r   rI  rJ  compileASCIIr)   r5   r9   r;   rV   r[   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r  r  r  registerr   r   tuple	bytearrayr'  r   r1  r=  r@  rL  rP  r   )rR  s   @r   <module>rb     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   