grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 ct„j#~ã@sbdZddddddddd d d d d dgZddlZddlZddlZddlZddlZddlmZddl Z ddl Z ddl Z ddl Z ddl mZddlmZejdded�ZeƒjejƒGdd„deƒZGdd„deƒZejdd„ƒZGdd„deƒZdd„Zdd„Zdd„Zd d„Z Gd!d„dƒZ!d"Z"e j#d#ƒZ$dPd%d&„Z%d'd(„Z&e j#d)e j'ƒZ(d*d+„Z)d,d-„Z*d.d/„Z+Gd0d1„d1ƒZ,Gd2d3„d3ƒZ-Gd4d5„d5e-ƒZ.d6d7„Z/Gd8d„de0ƒZ1d9d:d;dd?„d?ƒZ5d@dA„Z6e7e8e9eje:fZ;GdBdC„dCe3ƒZee/e,e.dF�e?ee=e5edGdKdLœdMd „ZCe>dKdGdNœdOd„ZDdS)QaÕplistlib.py -- a tool to generate and parse MacOSX .plist files. The property list (.plist) file format is a simple XML pickle supporting basic object types, like dictionaries, lists, numbers and strings. Usually the top level object is a dictionary. To write out a plist file, use the dump(value, file) function. 'value' is the top level object, 'file' is a (writable) file object. To parse a plist from a file, use the load(file) function, with a (readable) file object as the only argument. It returns the top level object (again, usually a dictionary). To work with plist data in bytes objects, you can use loads() and dumps(). Values can be strings, integers, floats, booleans, tuples, lists, dictionaries (but only with string keys), Data, bytes, bytearray, or datetime.datetime objects. Generate Plist example: pl = dict( aString = "Doodah", aList = ["A", "B", 12, 32.1, [1, 2, 3]], aFloat = 0.1, anInt = 728, aDict = dict( anotherString = "", aUnicodeValue = "M\xe4ssig, Ma\xdf", aTrueValue = True, aFalseValue = False, ), someData = b"", someMoreData = b"" * 10, aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())), ) with open(fileName, 'wb') as fp: dump(pl, fp) Parse Plist example: with open(fileName, 'rb') as fp: pl = load(fp) print(pl["aKey"]) Ú readPlistÚ writePlistÚreadPlistFromBytesÚwritePlistToBytesÚPlistÚDataÚDictÚInvalidFileExceptionÚFMT_XMLÚ FMT_BINARYÚloadÚdumpÚloadsÚdumpséN)ÚBytesIO)Úwarn)Ú ParserCreateÚ PlistFormatzFMT_XML FMT_BINARY)Úmodulec@s(eZdZfZdd„Zdd„Zdd„ZdS)Ú _InternalDictc Cs:y ||}Wntk r(t|ƒ‚YnXtdtdƒ|S)NzLAttribute access from plist dicts is deprecated, use d[key] notation insteadé)ÚKeyErrorÚAttributeErrorrÚDeprecationWarning)ÚselfÚattrÚvalue©rú /usr/lib64/python3.6/plistlib.pyÚ __getattr__Vs z_InternalDict.__getattr__cCstdtdƒ|||<dS)NzLAttribute access from plist dicts is deprecated, use d[key] notation insteadr)rr)rrrrrrÚ __setattr___sz_InternalDict.__setattr__c Cs8y ||=Wntk r&t|ƒ‚YnXtdtdƒdS)NzLAttribute access from plist dicts is deprecated, use d[key] notation insteadr)rrrr)rrrrrÚ __delattr__ds  z_InternalDict.__delattr__N)Ú__name__Ú __module__Ú __qualname__Ú __slots__rr r!rrrrrOs rcseZdZ‡fdd„Z‡ZS)rc stdtdƒtƒjf|ŽdS)Nz?The plistlib.Dict class is deprecated, use builtin dict insteadr)rrÚsuperÚ__init__)rÚkwargs)Ú __class__rrr'osz Dict.__init__)r"r#r$r'Ú __classcell__rr)r)rrmsc cs2t|tƒr(t||ƒ� }|VWdQRXn|VdS)N)Ú isinstanceÚstrÚopen)Ú pathOrFileÚmodeÚfprrrÚ _maybe_openus  r1cs4eZdZdZ‡fdd„Zedd„ƒZdd„Z‡ZS)rzuThis class has been deprecated. Use dump() and load() functions instead, together with regular dict objects. c stdtdƒtƒjf|ŽdS)NzJThe Plist class is deprecated, use the load() and dump() functions insteadr)rrr&r')rr()r)rrr'„szPlist.__init__c Cs2t|dƒ�}t|ƒ}WdQRX|ƒ}|j|ƒ|S)z,Deprecated. Use the load() function instead.ÚrbN)r1r Úupdate)Úclsr.r0rZplistrrrÚfromFile‰s   zPlist.fromFilec Cs$t|dƒ�}t||ƒWdQRXdS)z,Deprecated. Use the dump() function instead.ÚwbN)r1r )rr.r0rrrÚwrite’s z Plist.write) r"r#r$Ú__doc__r'Ú classmethodr5r7r*rr)r)rrs  c Cs2tdtdƒt|dƒ�}t|ddtd�SQRXdS)z¯ Read a .plist from a path or file. pathOrFile should either be a file name, or a readable binary file object. This function is deprecated, use load instead. z8The readPlist function is deprecated, use load() insteadrr2NF)ÚfmtÚuse_builtin_typesÚ dict_type)rrr1r r)r.r0rrrr˜s  cCs8tdtdƒt|dƒ�}t||tddd�WdQRXdS)z¥ Write 'value' to a .plist file. 'pathOrFile' may either be a file name or a (writable) file object. This function is deprecated, use dump instead. z9The writePlist function is deprecated, use dump() insteadrr6TF)r:Ú sort_keysÚskipkeysN)rrr1r r )rr.r0rrrr¦s cCs tdtdƒtt|ƒddtd�S)z} Read a plist data from a bytes object. Return the root object. This function is deprecated, use loads instead. zBThe readPlistFromBytes function is deprecated, use loads() insteadrNF)r:r;r<)rrr rr)Údatarrrr³s cCs,tdtdƒtƒ}t||tddd�|jƒS)zp Return 'value' as a plist-formatted bytes object. This function is deprecated, use dumps instead. zAThe writePlistToBytes function is deprecated, use dumps() insteadrTF)r:r=r>)rrrr r Úgetvalue)rÚfrrrr¿s c@s>eZdZdZdd„Zedd„ƒZddd„Zd d „Zd d „Z d S)rz] Wrapper for binary data. This class is deprecated, use a bytes object instead. cCst|tƒstdƒ‚||_dS)Nzdata must be as bytes)r+ÚbytesÚ TypeErrorr?)rr?rrrr'Ós z Data.__init__cCs |t|ƒƒS)N)Ú_decode_base64)r4r?rrrÚ fromBase64ØszData.fromBase64éLcCs t|j|ƒS)N)Ú_encode_base64r?)rÚ maxlinelengthrrrÚasBase64Þsz Data.asBase64cCs4t||jƒr|j|jkSt|tƒr,|j|kStSdS)N)r+r)r?rBÚNotImplemented)rÚotherrrrÚ__eq__ás     z Data.__eq__cCsd|jjt|jƒfS)Nz%s(%s))r)r"Úreprr?)rrrrÚ__repr__ész Data.__repr__N)rF) r"r#r$r8r'r9rErIrLrNrrrrrÌs   sŽ zv[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]rFcCsT|dd}g}x8tdt|ƒ|ƒD]$}||||…}|jtj|ƒƒq"Wdj|ƒS)Nééró)ÚrangeÚlenÚappendÚbinasciiZ b2a_base64Újoin)ÚsrHZ maxbinsizeÚpiecesÚiÚchunkrrrrGs  rGcCs(t|tƒrtj|jdƒƒStj|ƒSdS)Nzutf-8)r+r,rUZ a2b_base64Úencode)rWrrrrD s rDz{(?P\d\d\d\d)(?:-(?P\d\d)(?:-(?P\d\d)(?:T(?P\d\d)(?::(?P\d\d)(?::(?P\d\d))?)?)?)?)?ZcCsNd}tj|ƒjƒ}g}x,|D]$}||}|dkr2P|jt|ƒƒqWtj|ŽS)NÚyearÚmonthÚdayÚhourÚminuteÚsecond)r\r]r^r_r`ra)Ú _dateParserÚmatchÚ groupdictrTÚintÚdatetime)rWÚorderZgdZlstÚkeyÚvalrrrÚ_date_from_strings rjcCs d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZ)r\r]r^r_r`ra)ÚdrrrÚ_date_to_string&s rlcCsZtj|ƒ}|dk rtdƒ‚|jddƒ}|jddƒ}|jddƒ}|jddƒ}|jd d ƒ}|S) Nzz>)Ú_controlCharPatÚsearchÚ ValueErrorÚreplace)ÚtextÚmrrrÚ_escape,s      rxc@s¤eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'S)(Ú _PlistParsercCs"g|_d|_d|_||_||_dS)N)ÚstackÚ current_keyÚrootÚ_use_builtin_typesÚ _dict_type)rr;r<rrrr'9s z_PlistParser.__init__cCs8tƒ|_|j|j_|j|j_|j|j_|jj|ƒ|j S)N) rÚparserÚhandle_begin_elementZStartElementHandlerÚhandle_end_elementZEndElementHandlerÚ handle_dataZCharacterDataHandlerZ ParseFiler|)rZfileobjrrrÚparse@s     z_PlistParser.parsecCs*g|_t|d|dƒ}|dk r&||ƒdS)NZbegin_)r?Úgetattr)rÚelementÚattrsÚhandlerrrrr€Hsz!_PlistParser.handle_begin_elementcCs"t|d|dƒ}|dk r|ƒdS)NZend_)r„)rr…r‡rrrr�Nsz_PlistParser.handle_end_elementcCs|jj|ƒdS)N)r?rT)rr?rrrr‚Ssz_PlistParser.handle_datacCsŒ|jdk rFt|jdtiƒƒs.td|jjƒ‚||jd|j<d|_nB|jsT||_n4t|jdtgƒƒsxtd|jjƒ‚|jdj|ƒdS)Nézunexpected element at line %déÿÿÿÿr‰r‰r‰) r{r+rzÚtypertrÚCurrentLineNumberr|rT)rrrrrÚ add_objectVs   z_PlistParser.add_objectcCsdj|jƒ}g|_|S)NÚ)rVr?)rr?rrrÚget_datafs z_PlistParser.get_datacCs"|jƒ}|j|ƒ|jj|ƒdS)N)r~rŒrzrT)rr†rkrrrÚ begin_dictms z_PlistParser.begin_dictcCs*|jrtd|j|jjfƒ‚|jjƒdS)Nz%missing value for key '%s' at line %d)r{rtrr‹rzÚpop)rrrrÚend_dictrsz_PlistParser.end_dictcCs:|jst|jdtiƒƒ r,td|jjƒ‚|jƒ|_dS)Nrˆzunexpected key at line %dr‰)r{r+rzrŠrtrr‹rŽ)rrrrÚend_keyxs z_PlistParser.end_keycCsg}|j|ƒ|jj|ƒdS)N)rŒrzrT)rr†ÚarrrÚ begin_array~s z_PlistParser.begin_arraycCs|jjƒdS)N)rzr�)rrrrÚ end_arrayƒsz_PlistParser.end_arraycCs|jdƒdS)NT)rŒ)rrrrÚend_true†sz_PlistParser.end_truecCs|jdƒdS)NF)rŒ)rrrrÚ end_false‰sz_PlistParser.end_falsecCs|jt|jƒƒƒdS)N)rŒrerŽ)rrrrÚ end_integerŒsz_PlistParser.end_integercCs|jt|jƒƒƒdS)N)rŒÚfloatrŽ)rrrrÚend_real�sz_PlistParser.end_realcCs|j|jƒƒdS)N)rŒrŽ)rrrrÚ end_string’sz_PlistParser.end_stringcCs2|jr|jt|jƒƒƒn|jtj|jƒƒƒdS)N)r}rŒrDrŽrrE)rrrrÚend_data•sz_PlistParser.end_datacCs|jt|jƒƒƒdS)N)rŒrjrŽ)rrrrÚend_dateœsz_PlistParser.end_dateN)r"r#r$r'rƒr€r�r‚rŒrŽr�r‘r’r”r•r–r—r˜ršr›rœr�rrrrry8s&ryc@s8eZdZddd„Zdd„Zdd„Zdd d „Zd d „Zd S)Ú_DumbXMLWriterrú cCs||_g|_||_||_dS)N)ÚfilerzÚ _indent_levelÚindent)rr Ú indent_levelr¢rrrr'¡sz_DumbXMLWriter.__init__cCs,|jj|ƒ|jd|ƒ|jd7_dS)Nz<%s>rˆ)rzrTÚwritelnr¡)rr…rrrÚ begin_element§s z_DumbXMLWriter.begin_elementcCs@|jdkst‚|jjƒ|ks t‚|jd8_|jd|ƒdS)Nrrˆz)r¡ÚAssertionErrorrzr�r¤)rr…rrrÚ end_element¬sz_DumbXMLWriter.end_elementNcCs8|dk r&t|ƒ}|jd|||fƒn|jd|ƒdS)Nz <%s>%sz<%s/>)rxr¤)rr…rrrrÚsimple_element²sz_DumbXMLWriter.simple_elementcCsH|r8t|tƒr|jdƒ}|jj|j|jƒ|jj|ƒ|jjdƒdS)Nzutf-8ó )r+r,r[r r7r¡r¢)rÚlinerrrr¤ºs    z_DumbXMLWriter.writeln)rrŸ)N)r"r#r$r'r¥r§r¨r¤rrrrrž s   ržc@sFeZdZddd„Zdd „Zd d „Zd d „Zdd„Zdd„Zdd„Z dS)Ú _PlistWriterró rˆTFcCs.|r|jtƒtj||||ƒ||_||_dS)N)r7Ú PLISTHEADERržr'Ú _sort_keysÚ _skipkeys)rr r£r¢Z writeHeaderr=r>rrrr'Çs  z_PlistWriter.__init__cCs"|jdƒ|j|ƒ|jdƒdS)Nzz)r¤Ú write_value)rrrrrr7Ñs  z_PlistWriter.writecCs4t|tƒr|jd|ƒ�n|dkr0|jdƒ�n|dkrD|jdƒnìt|tƒr‚d|ko`dknrx|jd d |ƒnt|ƒ‚n®t|tƒrž|jd t|ƒƒn’t|tƒr´|j|ƒn|t|t ƒrÊ|j |ƒnft|t t fƒrä|j |ƒnLt|tjƒ�r|jd t|ƒƒn,t|ttfƒ�r |j|ƒntd t|ƒƒ‚dS)NÚstringTÚtrueFZfalserˆé?é@Zintegerz%dÚrealZdatezunsupported type: %sr‰lûÿÿÿl)r+r,r¨reÚ OverflowErrorr™rMÚdictÚ write_dictrÚ write_datarBÚ bytearrayÚ write_bytesrfrlÚtupleÚlistÚ write_arrayrCrŠ)rrrrrr°Ös.           z_PlistWriter.write_valuecCs|j|jƒdS)N)r»r?)rr?rrrr¹ûsz_PlistWriter.write_datacCs~|jdƒ|jd8_tddt|jjdd ƒ|jƒƒ}x&t||ƒjdƒD]}|rL|j|ƒqLW|jd7_|j dƒdS) Nr?rˆérFr¬ó ér©s ) r¥r¡ÚmaxrSr¢rurGÚsplitr¤r§)rr?rHrªrrrr»þs z_PlistWriter.write_bytescCs†|rx|jdƒ|jr"t|jƒƒ}n|jƒ}x@|D]8\}}t|tƒsR|jrJq0tdƒ‚|jd|ƒ|j |ƒq0W|j dƒn |jdƒdS)Nr·zkeys must be stringsrh) r¥r®ÚsortedÚitemsr+r,r¯rCr¨r°r§)rrkrÅrhrrrrr¸ s    z_PlistWriter.write_dictcCs@|r2|jdƒx|D]}|j|ƒqW|jdƒn |jdƒdS)NÚarray)r¥r°r§r¨)rrÆrrrrr¾s    z_PlistWriter.write_arrayN)rr¬rˆTF) r"r#r$r'r7r°r¹r»r¸r¾rrrrr«Æs % r«cCs”d }x|D]}|j|ƒr dSq WxntjdftjdftjdffD]N\}}|j|ƒsRq>x8|D]0}||jdƒj|ƒ}|dt|ƒ…|krXdSqXWq>WdS) Nó6xBBQQQiàÿÿÿ)Ú_fpÚseekÚosÚSEEK_ENDÚreadrSrÚstructÚunpackÚ _ref_sizeÚ _read_intsÚ_object_offsetsÚ _undefinedÚ_objectsÚ _read_objectÚOSErrorÚ IndexErrorÚerrorr¶rt)rr0ÚtrailerÚ offset_sizeÚ num_objectsÚ top_objectÚoffset_table_offsetrrrrƒ_s      z_BinaryPlistParser.parsecCsL|dkrH|jjdƒdd@}d|>}dt|}tj||jj|ƒƒdS|S)z$ return the size of the next object.érˆrrPrq)rÞrâÚ_BINARY_FORMATrãrä)rÚtokenLrwrWrArrrÚ _get_sizexs  z_BinaryPlistParser._get_sizecsv|jjˆ|ƒ‰ˆtkr2tjd|›tˆ›�ˆƒSˆ sHtˆƒˆ|krNtƒ‚t‡‡fdd„tdˆ|ˆƒDƒƒSdS)Nrqc3s&|]}tjˆ||ˆ…dƒVqdS)ÚbigN)reÚ from_bytes)Ú.0rY)r?Úsizerrú ‰sz0_BinaryPlistParser._read_ints..r) rÞrârôrãrärSrr¼rR)rÚnrúr)r?rúrræ‚sz_BinaryPlistParser._read_intscCs|j||jƒS)N)rærå)rrürrrÚ _read_refsŒsz_BinaryPlistParser._read_refsc søˆj|}|tk r|Sˆj|}ˆjj|ƒˆjjdƒd}|d@|d@}}|dkr^d}�nŒ|dkrnd}�n||dkr~d }�nl|dkrŽd }�n\|d krºtjˆjjd|>ƒd |d kd�}�n0|dkrÞtj dˆjjdƒƒd}�n |dk�rtj dˆjjdƒƒd}�næ|dk�rDtj dˆjjdƒƒd}t j dddƒt j |d�}�n¦|dk�rŒˆj |ƒ}ˆjj|ƒ}t |ƒ|k�rxtƒ‚ˆj�sêt|ƒ}�n^|dk�rΈj |ƒ}ˆjj|ƒ} t | ƒ|k�rÀtƒ‚| jdƒ}�n|dk�rˆj |ƒd}ˆjj|ƒ} t | ƒ|k�rtƒ‚| jdƒ}nØ|dk�rXˆj |ƒ}ˆj|ƒ} g}|ˆj|<|j‡fdd„| Dƒƒn’|d k�räˆj |ƒ}ˆj|ƒ} ˆj|ƒ} ˆjƒ}|ˆj|<y2x,t| | ƒD]\} } ˆj| ƒ|ˆj| ƒ<�q WWntk �ràtƒ‚YnXntƒ‚|ˆj|<|S)!zx read the object by reference. May recursively read sub-objects (content of an array/dict/set) rˆréðróNrÁFé TrQr¿r÷rP)Úsignedé"z>frOé#z>dé3iÑ)Zsecondsr´éPrÉé`rzutf-16beé c3s|]}ˆj|ƒVqdS)N)rê)rùÚx)rrrrûÜsz2_BinaryPlistParser._read_object..éÐ)rérèrçrÞrßrârerørãrärfZ timedeltarörSrr}rrÏrýÚextendr~ÚziprêrC)rÚrefÚresultÚoffsetÚtokenZtokenHrõrArWr?Zobj_refsZkey_refsÚkÚor)rrrê�s‚                          z_BinaryPlistParser._read_objectN) r"r#r$r8r'rƒrörærýrêrrrrrÜSs  rÜcCs0|dkr dS|dkrdS|d>d>r(dSdSdS) NrˆrÁr¿rrÝrOéir)ÚcountrrrÚ_count_to_sizeõs rc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú_BinaryPlistWritercCs||_||_||_dS)N)rÞr®r¯)rr0r=r>rrrr'sz_BinaryPlistWriter.__init__c Csäg|_i|_i|_|j|ƒt|jƒ}dg||_t|ƒ|_t|j|_ |j j dƒx|jD]}|j |ƒq\W|j |ƒ}|j jƒ}t|ƒ}dt||}|j j tj|f|jžŽƒd}|||j|||f} |j j tjd| žŽƒdS)Nrsbplist00rqú >5xBBBQQQ)r)Ú_objlistÚ _objtableÚ _objidtableÚ_flattenrSrçrrårôÚ _ref_formatrÞr7Ú _write_objectÚ _getrefnumÚtellrãÚpack) rrrðÚobjrñròrïZ offset_formatZ sort_versionrîrrrr7 s(          z_BinaryPlistWriter.writec Cs~t|tƒr"t|ƒ|f|jkrZdSn8t|tƒrHt|jƒ|jf|jkrZdSnt|ƒ|jkrZdSt|j ƒ}|j j |ƒt|tƒrŽ||jt|ƒ|f<n0t|tƒr°||jt|jƒ|jf<n||jt|ƒ<t|t ƒ�rPg}g}|j ƒ}|j rèt|ƒ}xB|D]:\}}t|tƒ�s|j�r qîtdƒ‚|j |ƒ|j |ƒqîWxLtj||ƒD]}|j|ƒ�q:Wn*t|ttfƒ�rzx|D]}|j|ƒ�qfWdS)Nzkeys must be strings)r+Ú_scalarsrŠrrr?ÚidrrSrrTr·rÅr®rÄr,r¯rCÚ itertoolsÚchainrr½r¼) rrZrefnumÚkeysÚvaluesrÅrÚvrrrrr7sB          z_BinaryPlistWriter._flattencCsNt|tƒr|jt|ƒ|fSt|tƒr<|jt|jƒ|jfS|jt|ƒSdS)N)r+r rrŠrr?rr!)rrrrrrgs   z_BinaryPlistWriter._getrefnumcCs´|dkr"|jjtjd||BƒƒnŽ|dkrH|jjtjd|dBd|ƒƒnh|dkrn|jjtjd|dBd|ƒƒnB|dkr”|jjtjd |dBd |ƒƒn|jjtjd |dBd |ƒƒdS)Nróz>BrˆrÁz>BBBr¿z>BBHérÝz>BBLéz>BBQéril)rÞr7rãr)rrrúrrrÚ _write_sizeosz_BinaryPlistWriter._write_sizec sèˆj|ƒ}ˆjjƒˆj|<|dkr2ˆjjdƒ�n²|dkrJˆjjdƒ�nš|dkrbˆjjdƒ�n‚t|tƒ�rl|dkr´yˆjjtjdd|ƒƒWn tj k r°t |ƒd‚YnXn´|d'krÔˆjjtjd d |ƒƒn”|d(krôˆjjtjd d|ƒƒnt|d)k�rˆjjtjdd|ƒƒnR|d*k�r8ˆjjtjdd|ƒƒn0|d+k�r`ˆjjd|j d ddd�ƒnt |ƒ‚�nxt|t ƒ�r’ˆjjtjdd|ƒƒ�nRt|t j ƒ�rÐ|t j dd d ƒjƒ}ˆjjtjdd|ƒƒ�nt|tƒ�rˆjdt|jƒƒˆjj|jƒ�nät|ttfƒ�r0ˆjdt|ƒƒˆjj|ƒ�n´t|tƒ�r y|jdƒ}ˆjdt|ƒƒWn4tk �rŽ|jdƒ}ˆjdt|ƒd ƒYnXˆjj|ƒ�nDt|ttfƒ�rú‡fd!d"„|Dƒ}t|ƒ}ˆjd#|ƒˆjjtjd$ˆj|f|žŽƒnêt|tƒ�rÜgg}}ˆj�r&t|jƒƒ} n|jƒ} xR| D]J\} } t| tƒ�s\ˆj�rT�q4t d%ƒ‚|j!ˆj| ƒƒ|j!ˆj| ƒƒ�q4Wt|ƒ}ˆjd&|ƒˆjjtjd$ˆj|f|žŽƒˆjjtjd$ˆj|f|žŽƒnt |ƒ‚dS),NóFóTr¬rz>Bqr)rˆrÁz>BBr¿z>BHr'rÝz>BLr(r³z>BQr´ór÷)rz>BdriÑrrÉrzutf-16berrcsg|]}ˆj|ƒ‘qSr)r)rùr)rrrú ¸sz4_BinaryPlistWriter._write_object..rrqzkeys must be stringsrrilll)"rrÞrrçr7r+rerãrrír¶Úto_bytesr™rfZ total_secondsrr*rSr?rBrºr,r[ÚUnicodeEncodeErrorr½r¼rr·r®rÄrÅr¯rCrT) rrr rAÚtZrefsrWZkeyRefsZvalRefsZ rootItemsrr&r)rrrs„            $    "$z _BinaryPlistWriter._write_objectN) r"r#r$r'r7rrr*rrrrrrs -0rcCs|dd…dkS)NrÁsbplist00r)rÐrrrÚ_is_fmt_binaryÖsr2)ÚdetectrÚwriterT)r:r;r<cCsn|dkrL|jdƒ}|jdƒx:tjƒD]}|d|ƒr&|d}Pq&Wtƒ‚n t|d}|||d�}|j|ƒS)z„Read a .plist file. 'fp' should be (readable) file object. Return the unpacked root object (which usually is a dictionary). NrÝrr3r)r;r<)rârßÚ_FORMATSr%rrƒ)r0r:r;r<rÐÚinfoÚPÚprrrr ìs     cCst|ƒ}t||||d�S)zqRead a .plist file from a bytes object. Return the unpacked root object (which usually is a dictionary). )r:r;r<)rr )rr:r;r<r0rrrr sF)r:r=r>cCs:|tkrtd|fƒ‚t|d|||d�}|j|ƒdS)zQWrite 'value' to a .plist file. 'fp' should be a (writable) file object. zUnsupported format: %rr4)r=r>N)r5rtr7)rr0r:r=r>r4rrrr s)r:r>r=cCs tƒ}t|||||d�|jƒS)z?Return a bytes object with the contents for a .plist file. )r:r>r=)rr r@)rr:r>r=r0rrrrs)rF)Er8Ú__all__rUrËÚ contextlibrfÚenumÚiorr"ràÚrerãÚwarningsrZxml.parsers.expatrÚEnumr"rÚglobalsr3Ú __members__r·rrÚcontextmanagerr1rrrrrrr­ÚcompilerrrGrDÚASCIIrbrjrlrxryržr«rÕrtrrôÚobjectrèrÜrr,rer™rBr rr2r r r5r r r rrrrrÚ/sz          0    h&d!# S