grthtrhthjhtyjytjytkergtrhtrjytjerhrfhU iÛfÜ}ã @s>dZddddddddd d d d d g ZddlZddlZddlZddlZddlZddlmZddl Z ddl Z ddl Z ddl Z ddl mZddlmZejdded�Zeƒ ej¡ejdd„ƒZdd„Zdd„Zdd„Zdd„ZGdd„dƒZGdd „d ƒZdZe   d¡Z!dLd!d"„Z"d#d$„Z#e   d%e j$¡Z%d&d'„Z&d(d)„Z'd*d+„Z(Gd,d-„d-ƒZ)Gd.d/„d/ƒZ*Gd0d1„d1e*ƒZ+d2d3„Z,Gd4d„de-ƒZ.d5d6d7d8d9œZ/e0ƒZ1Gd:d;„d;ƒZ2dd?„d?e0ƒZ9d@dA„Z:e;eddCe", 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ÚDataÚInvalidFileExceptionÚFMT_XMLÚ FMT_BINARYÚloadÚdumpÚloadsÚdumpsÚUIDéN)ÚBytesIO)Úwarn)Ú ParserCreateÚ PlistFormatzFMT_XML FMT_BINARY)Úmodulec cs2t|tƒr(t||ƒ� }|VW5QRXn|VdS©N)Ú isinstanceÚstrÚopen)Ú pathOrFileÚmodeÚfp©rú-/opt/alt/python38/lib64/python3.8/plistlib.pyÚ _maybe_openOs  rc Cs<tdtdƒt|dƒ�}t|ddd�W5QR£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() insteadéÚrbNF©ÚfmtÚuse_builtin_types)rÚDeprecationWarningrr )rrrrrrYs ÿ c Cs8tdtdƒt|dƒ�}t||tddd�W5QRXdS)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() insteadrÚwbTF©r!Ú sort_keysÚskipkeysN)rr#rr r)Úvaluerrrrrrfs ÿ cCstdtdƒtt|ƒddd�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() insteadrNFr )rr#r r©Údatarrrrss ÿcCs,tdtdƒtƒ}t||tddd�| ¡S)zp Return 'value' as a plist-formatted bytes object. This function is deprecated, use dumps instead. zAThe writePlistToBytes function is deprecated, use dumps() insteadrTFr%)rr#rr 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*©Úselfr*rrrÚ__init__’s z Data.__init__cCs |t|ƒƒSr)Ú_decode_base64)Úclsr*rrrÚ fromBase64—szData.fromBase64éLcCs t|j|ƒSr)Ú_encode_base64r*)r0Ú maxlinelengthrrrÚasBase64�sz Data.asBase64cCs4t||jƒr|j|jkSt|tƒr,|j|kStSdSr)rÚ __class__r*r-ÚNotImplemented©r0ÚotherrrrÚ__eq__ s     z Data.__eq__cCsd|jjt|jƒfS©Nz%s(%s)©r9Ú__name__Úreprr*©r0rrrÚ__repr__¨sz Data.__repr__N)r5) r@Ú __module__Ú __qualname__Ú__doc__r1Ú classmethodr4r8r=rCrrrrr‹s  c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)r cCs<t|tƒstdƒ‚|dkr"tdƒ‚|dkr2tdƒ‚||_dS)Nzdata must be an intìzUIDs cannot be >= 2**64rúUIDs must be positive)rÚintr.Ú ValueErrorr*r/rrrr1³s z UID.__init__cCs|jSrr)rBrrrÚ __index__¼sz UID.__index__cCsd|jjt|jƒfSr>r?rBrrrrC¿sz UID.__repr__cCs|j|jffSr)r9r*rBrrrÚ __reduce__ÂszUID.__reduce__cCst|tƒstS|j|jkSr)rr r:r*r;rrrr=Ås z UID.__eq__cCs t|jƒSr)Úhashr*rBrrrÚ__hash__Êsz UID.__hash__N) r@rDrEr1rLrCrMr=rOrrrrr ²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]r5cCsP|dd}g}tdt|ƒ|ƒD]$}||||…}| t |¡¡q d |¡S)Nééró)ÚrangeÚlenÚappendÚbinasciiZ b2a_base64Újoin)Úsr7Z maxbinsizeÚpiecesÚiÚchunkrrrr6ßs  r6cCs(t|tƒrt | d¡¡St |¡SdS)Núutf-8)rrrVZ a2b_base64Úencode)rXrrrr2ès r2z{(?P\d\d\d\d)(?:-(?P\d\d)(?:-(?P\d\d)(?:T(?P\d\d)(?::(?P\d\d)(?::(?P\d\d))?)?)?)?)?ZcCsLd}t |¡ ¡}g}|D]&}||}|dkr2qB| t|ƒ¡qtj|ŽS)N©ZyearZmonthZdayZhourZminuteÚsecond)Ú _dateParserÚmatchÚ groupdictrUrJÚdatetime)rXÚorderZgdZlstÚkeyÚvalrrrÚ_date_from_stringõsrgcCs d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZr^)ÚdrrrÚ_date_to_stringsþricCsZt |¡}|dk rtdƒ‚| dd¡}| dd¡}| dd¡}| dd¡}| d d ¡}|S) Nzz>)Ú_controlCharPatÚsearchrKÚreplace)ÚtextÚmrrrÚ_escapes      rtc@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'd(„Zd)S)*Ú _PlistParsercCs"g|_d|_d|_||_||_dSr)ÚstackÚ current_keyÚrootÚ_use_builtin_typesÚ _dict_type©r0r"Ú dict_typerrrr1s z_PlistParser.__init__cCsBtƒ|_|j|j_|j|j_|j|j_|j|j_ |j  |¡|j Sr) rÚparserÚhandle_begin_elementZStartElementHandlerÚhandle_end_elementZEndElementHandlerÚ handle_dataZCharacterDataHandlerÚhandle_entity_declZEntityDeclHandlerZ ParseFilerx)r0ZfileobjrrrÚparses     z_PlistParser.parsecCs tdƒ‚dS)Nz8XML entity declarations are not supported in plist files)r)r0Z entity_nameZis_parameter_entityr(ÚbaseZ system_idZ public_idZ notation_namerrrr�$sz_PlistParser.handle_entity_declcCs*g|_t|d|dƒ}|dk r&||ƒdS)NZbegin_)r*Úgetattr)r0ÚelementÚattrsÚhandlerrrrr~*sz!_PlistParser.handle_begin_elementcCs"t|d|dƒ}|dk r|ƒdS)NZend_)r„)r0r…r‡rrrr0sz_PlistParser.handle_end_elementcCs|j |¡dSr)r*rUr/rrrr€5sz_PlistParser.handle_datacCsŒ|jdk rFt|jdtiƒƒs.td|jjƒ‚||jd|j<d|_nB|jsT||_n4t|jdtgƒƒsxtd|jjƒ‚|jd |¡dS)Néÿÿÿÿzunexpected element at line %d) rwrrvÚtyperKr}ÚCurrentLineNumberrxrU©r0r(rrrÚ add_object8s ÿÿz_PlistParser.add_objectcCsd |j¡}g|_|S)NÚ)rWr*r/rrrÚget_dataHs z_PlistParser.get_datacCs"| ¡}| |¡|j |¡dSr)rzrŒrvrU)r0r†rhrrrÚ begin_dictOs z_PlistParser.begin_dictcCs*|jrtd|j|jjfƒ‚|j ¡dS)Nz%missing value for key '%s' at line %d)rwrKr}rŠrvÚpoprBrrrÚend_dictTs  ÿz_PlistParser.end_dictcCs8|jst|jdtiƒƒs*td|jjƒ‚| ¡|_dS)Nrˆzunexpected key at line %d)rwrrvr‰rKr}rŠrŽrBrrrÚend_keyZs ÿz_PlistParser.end_keycCsg}| |¡|j |¡dSr)rŒrvrU)r0r†ÚarrrÚ begin_array`s z_PlistParser.begin_arraycCs|j ¡dSr)rvr�rBrrrÚ end_arrayesz_PlistParser.end_arraycCs| d¡dS)NT©rŒrBrrrÚend_truehsz_PlistParser.end_truecCs| d¡dS)NFr–rBrrrÚ end_falseksz_PlistParser.end_falsecCs@| ¡}| d¡s| d¡r.| t|dƒ¡n| t|ƒ¡dS)NZ0xZ0Xé)rŽÚ startswithrŒrJ)r0ÚrawrrrÚ end_integernsz_PlistParser.end_integercCs| t| ¡ƒ¡dSr)rŒÚfloatrŽrBrrrÚend_realusz_PlistParser.end_realcCs| | ¡¡dSr)rŒrŽrBrrrÚ end_stringxsz_PlistParser.end_stringcCs2|jr| t| ¡ƒ¡n| t | ¡¡¡dSr)ryrŒr2rŽrr4rBrrrÚend_data{sz_PlistParser.end_datacCs| t| ¡ƒ¡dSr)rŒrgrŽrBrrrÚend_date‚sz_PlistParser.end_dateN)r@rDrEr1r‚r�r~rr€rŒrŽr�r‘r’r”r•r—r˜rœržrŸr r¡rrrrrus( ruc@s8eZdZddd„Zdd„Zdd„Zdd d „Zd d „Zd S)Ú_DumbXMLWriterrú cCs||_g|_||_||_dSr)ÚfilervÚ _indent_levelÚindent)r0r¤Ú indent_levelr¦rrrr1‡sz_DumbXMLWriter.__init__cCs,|j |¡| d|¡|jd7_dS)Nz<%s>é)rvrUÚwritelnr¥©r0r…rrrÚ begin_element�s z_DumbXMLWriter.begin_elementcCs@|jdkst‚|j ¡|ks t‚|jd8_| d|¡dS)Nrr¨z)r¥ÚAssertionErrorrvr�r©rªrrrÚ end_element’sz_DumbXMLWriter.end_elementNcCs8|dk r&t|ƒ}| d|||f¡n| d|¡dS)Nz <%s>%sz<%s/>)rtr©)r0r…r(rrrÚsimple_element˜sz_DumbXMLWriter.simple_elementcCsH|r8t|tƒr| d¡}|j |j|j¡|j |¡|j d¡dS)Nr\ó )rrr]r¤Úwriter¥r¦)r0Úlinerrrr© s    z_DumbXMLWriter.writeln)rr£)N)r@rDrEr1r«r­r®r©rrrrr¢†s   r¢c@sFeZdZddd„Zdd „Zd d „Zd d „Zdd„Zdd„Zdd„Z dS)Ú _PlistWriterró r¨TFcCs.|r| t¡t ||||¡||_||_dSr)r°Ú PLISTHEADERr¢r1Ú _sort_keysÚ _skipkeys)r0r¤r§r¦Z writeHeaderr&r'rrrr1­s  z_PlistWriter.__init__cCs"| d¡| |¡| d¡dS)Nzz)r©Ú write_valuer‹rrrr°·s  z_PlistWriter.writecCs4t|tƒr| d|¡�n|dkr0| d¡�n|dkrD| d¡nìt|tƒr‚d|krbdkrxnn| dd |¡nt|ƒ‚n®t|tƒrž| d t|ƒ¡n’t|tƒr´| |¡n|t|t ƒrÊ|  |¡nft|t t fƒrä|  |¡nLt|tjƒ�r| d t|ƒ¡n,t|ttfƒ�r | |¡ntd t|ƒƒ‚dS) NÚstringTÚtrueFZfalselûÿÿÿrHZintegerz%dÚrealÚdatezunsupported type: %s)rrr®rJÚ OverflowErrorr�rAÚdictÚ write_dictrÚ write_datar-Ú bytearrayÚ write_bytesrcriÚtupleÚlistÚ write_arrayr.r‰r‹rrrr·¼s.           z_PlistWriter.write_valuecCs| |j¡dSr)rÁr*r/rrrr¿ász_PlistWriter.write_datacCsz| d¡|jd8_tddt|j dd¡|jƒƒ}t||ƒ d¡D]}|rJ| |¡qJ|jd7_|  d¡dS)Nr*r¨r™r5r³s r¯) r«r¥ÚmaxrTr¦rqr6Úsplitr©r­)r0r*r7r±rrrrÁäs þ z_PlistWriter.write_bytescCs‚|rt| d¡|jr"t| ¡ƒ}n| ¡}|D]8\}}t|tƒsP|jrHq.tdƒ‚| d|¡|  |¡q.|  d¡n | d¡dS)Nr½úkeys must be stringsre) r«rµÚsortedÚitemsrrr¶r.r®r·r­)r0rhrÉrer(rrrr¾ñs      z_PlistWriter.write_dictcCs<|r.| d¡|D]}| |¡q| d¡n | d¡dS)NÚarray)r«r·r­r®)r0rÊr(rrrrÄs    z_PlistWriter.write_arrayN)rr³r¨TF) r@rDrEr1r°r·r¿rÁr¾rÄrrrrr²¬sþ % r²cCsŽd}|D]}| |¡rdSqtjdftjdftjdffD]N\}}| |¡sNq:|D]4}|| d¡ |¡}|dt|ƒ…|krRdSqRq:dS)N)s6xBBQQQ)Ú_fpÚseekÚosÚSEEK_ENDÚreadrTrÚstructÚunpackÚ _ref_sizeÚ _read_intsÚ_object_offsetsÚ _undefinedÚ_objectsÚ _read_objectÚOSErrorÚ IndexErrorÚerrorr¼rK)r0rÚtrailerÚ offset_sizeÚ num_objectsÚ top_objectÚoffset_table_offsetrrrr‚Es*   ý    ÿ z_BinaryPlistParser.parsecCsL|dkrH|j d¡dd@}d|>}dt|}t ||j |¡¡dS|S)z$ return the size of the next object.ér¨rrQrn)ràräÚ_BINARY_FORMATråræ)r0ÚtokenLrsrXr,rrrÚ _get_size^s  z_BinaryPlistParser._get_sizecst|j ˆ|¡‰ˆtkr2t d|›tˆ›�ˆ¡SˆrFtˆƒˆ|krLtƒ‚t‡‡fdd„tdˆ|ˆƒDƒƒSdS)Nrnc3s&|]}t ˆ||ˆ…d¡VqdS)ÚbigN)rJÚ from_bytes)Ú.0rZ©r*ÚsizerrÚ osÿz0_BinaryPlistParser._read_ints..r) ràrärörårærTrrÂrS)r0Únrýrrürrèhsÿz_BinaryPlistParser._read_intscCs| ||j¡Sr)rèrç)r0rÿrrrÚ _read_refsrsz_BinaryPlistParser._read_refscsˆj|}|tk r|Sˆj|}ˆj |¡ˆj d¡d}|d@|d@}}|dkr^d}�n°|dkrnd}�n |dkr~d }�n�|dkrŽd }�n€|d krºtjˆj d|>¡d |d kd�}�nT|dkrÞt  dˆj d¡¡d}�n0|dk�rt  dˆj d¡¡d}�n |dk�rDt  dˆj d¡¡d}t   ddd¡t j |d�}�nÊ|dk�rŒˆ  |¡}ˆj |¡}t |ƒ|k�rxtƒ‚ˆj�st|ƒ}�n‚|dk�rΈ  |¡}ˆj |¡} t | ƒ|k�rÀtƒ‚|  d¡}�n@|dk�rˆ  |¡d}ˆj |¡} t | ƒ|k�rtƒ‚|  d¡}nü|dk�r:tt ˆj d|¡d ¡ƒ}nÔ|dk�r€ˆ  |¡}ˆ |¡} g}|ˆj|<| ‡fdd „| Dƒ¡nŽ|d!k�rˆ  |¡}ˆ |¡} ˆ |¡} ˆ ¡}|ˆj|<z.t| | ƒD]\} } ˆ | ¡|ˆ | ¡<�qÆWntk �rtƒ‚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é TrRr™rùrQ©Zsignedé"z>frPé#z>dé3éÑ)Zsecondsé@éPrËé`rúutf-16beé€é c3s|]}ˆ |¡VqdSr)rì)rûÚxrBrrrþÃsz2_BinaryPlistParser._read_object..éÐ)rërêréràrárärJrúrårærcZ timedeltarørTrryrrÐr rÚextendrzÚziprìr.)r0ÚrefÚresultÚoffsetÚtokenZtokenHr÷r,rXr*Zobj_refsZkey_refsÚkÚorrBrrìusŒ   ÿ     ÿ                     z_BinaryPlistParser._read_objectN) r@rDrErFr1r‚rørèrrìrrrrrÞ9s  rÞcCs,|dkr dS|dkrdS|dkr$dSdSdS)Nér¨érìrPrÝr)ÚcountrrrÚ_count_to_sizeÜsrc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú_BinaryPlistWritercCs||_||_||_dSr)ràrµr¶)r0rr&r'rrrr1ìsz_BinaryPlistWriter.__init__c Csàg|_i|_i|_| |¡t|jƒ}dg||_t|ƒ|_t|j|_ |j   d¡|jD]}|  |¡qZ|  |¡}|j  ¡}t|ƒ}dt||}|j   tj|f|jžŽ¡d}|||j|||f} |j   tjd| žŽ¡dS)Nróbplist00rnú >5xBBBQQQ)r)Ú_objlistÚ _objtableÚ _objidtableÚ_flattenrTrérrçröÚ _ref_formatràr°Ú _write_objectÚ _getrefnumÚtellråÚpack) r0r(ròÚobjrórôrñZ offset_formatZ sort_versionrðrrrr°ñs2          þz_BinaryPlistWriter.writec Csrt|tƒr"t|ƒ|f|jkrZdSn8t|tƒrHt|jƒ|jf|jkrZdSnt|ƒ|jkrZdSt|j ƒ}|j   |¡t|tƒrŽ||jt|ƒ|f<n0t|tƒr°||jt|jƒ|jf<n||jt|ƒ<t|t ƒ�rHg}g}|  ¡}|j rèt|ƒ}|D]:\}}t|tƒ�s|j�r qìtdƒ‚|  |¡|  |¡qìt ||¡D]}| |¡�q4n&t|ttfƒ�rn|D]}| |¡�q\dS)NrÇ)rÚ_scalarsr‰r!rr*Úidr"rTr rUr½rÉrµrÈrr¶r.Ú itertoolsÚchainr#rÃrÂ) r0r(ZrefnumÚkeysÚvaluesrÉrÚvrrrrr#sB           z_BinaryPlistWriter._flattencCsNt|tƒr|jt|ƒ|fSt|tƒr<|jt|jƒ|jfS|jt|ƒSdSr)rr*r!r‰rr*r"r+r‹rrrr&Ns   z_BinaryPlistWriter._getrefnumcCs´|dkr"|j t d||B¡¡nŽ|dkrH|j t d|dBd|¡¡nh|dkrn|j t d|dBd|¡¡nB|d kr”|j t d |dBd |¡¡n|j t d |dBd |¡¡dS)Nrõz>Brz>BBBr™rz>BBHérz>BBLéz>BBQé)ràr°rår()r0rrýrrrÚ _write_sizeVsz_BinaryPlistWriter._write_sizec s¢ˆ |¡}ˆj ¡ˆj|<|dkr2ˆj d¡�nl|dkrJˆj d¡�nT|dkrbˆj d¡�nBqr3rz>BBr™rz>BHr1rz>BLr2lz>BQrHórùrz>Bdrrr¨rrrËr r r rrIr é�éƒé‡csg|]}ˆ |¡‘qSr)r&)rûrrBrrÚ ­sz4_BinaryPlistWriter._write_object..r rnrÇr)$r&ràr'rér°rrJrår(rïr¼Úto_bytesr�rcZ total_secondsrr4rTr*r-rÀrr]ÚUnicodeEncodeErrorr rKrÃrÂr$r½rµrÈrÉr¶r.rU) r0r(rr,ÚtZrefsrXZkeyRefsZvalRefsZ rootItemsrr0rrBrr%fsœ                    $     "$z _BinaryPlistWriter._write_objectN) r@rDrEr1r°r#r&r4r%rrrrrës -0rcCs|dd…dkS)NrÝrr)rÑrrrÚ_is_fmt_binaryËsr?)Údetectr}ÚwriterT©r!r"r|cCsl|dkrJ| d¡}| d¡t ¡D]}|d|ƒr$|d}qVq$tƒ‚n t|d}|||d�}| |¡S)z�Read a .plist file. 'fp' should be a readable and binary file object. Return the unpacked root object (which usually is a dictionary). Nrßrr@r})r"r|)räráÚ_FORMATSr/rr‚)rr!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). rB)rr )r(r!r"r|rrrrr ÷sÿFr%cCs:|tkrtd|fƒ‚t|d|||d�}| |¡dS)zWWrite 'value' to a .plist file. 'fp' should be a writable, binary file object. zUnsupported format: %rrA)r&r'N)rCrKr°)r(rr!r&r'rArrrr s©r!r'r&cCs tƒ}t|||||d�| ¡S)z?Return a bytes object with the contents for a .plist file. rG)rr r+)r(r!r'r&rrrrr s)r5)CrFÚ__all__rVrÌÚ contextlibrcÚenumÚiorr,râÚreråÚwarningsrZxml.parsers.expatrÚEnumr@rÚglobalsÚupdateÚ __members__Úcontextmanagerrrrrrrr r´Úcompileror6r2ÚASCIIr`rgrirtrur¢r²rÖrKrröÚobjectrêrÞrrrJr�r-r*rr?rr½rrCr r r r rrrrÚsš0ý         '"ÿ    s&d!$ a ýýú