a 3êdgXnã@sÐgd¢ZddlZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl m Z ej ddedZeƒ ej¡Gdd „d ƒZd Ze  d ¡Zd=d d„Zdd„Ze  de j¡Zdd„Zdd„Zdd„ZGdd„dƒZGdd„dƒZGdd„deƒZ dd„Z!Gd d!„d!e"ƒZ#d"d#d$d%d&œZ$e%ƒZ&Gd'd(„d(ƒZ'd)d*„Z(e)e*e+eje,fZ-Gd+d,„d,e%ƒZ.d-d.„Z/e0e1e!ee d/e2e1e/e'e.d/iZ3de1d0œd1d2„Z4de1d0œd3d4„Z5e0d5d6d7œd8d9„Z6e0d6d5d:œd;d<„Z7dS)>)ÚInvalidFileExceptionÚFMT_XMLÚ FMT_BINARYÚloadÚdumpÚloadsÚdumpsÚUIDéN)ÚBytesIO)Ú ParserCreateÚ PlistFormatzFMT_XML FMT_BINARY)Úmodulec@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rcCs<t|tƒstdƒ‚|dkr"tdƒ‚|dkr2tdƒ‚||_dS)Nzdata must be an intìzUIDs cannot be >= 2**64r úUIDs must be positive)Ú isinstanceÚintÚ TypeErrorÚ ValueErrorÚdata©Úselfr©rú$/usr/local/lib/python3.9/plistlib.pyÚ__init__Es z UID.__init__cCs|jS©N)r©rrrrÚ __index__Nsz UID.__index__cCsd|jjt|jƒfS)Nz%s(%s))Ú __class__Ú__name__ÚreprrrrrrÚ__repr__Qsz UID.__repr__cCs|j|jffSr)rrrrrrÚ __reduce__TszUID.__reduce__cCst|tƒstS|j|jkSr)rrÚNotImplementedr)rÚotherrrrÚ__eq__Ws z UID.__eq__cCs t|jƒSr)ÚhashrrrrrÚ__hash__\sz UID.__hash__N) rÚ __module__Ú __qualname__rrr r!r$r&rrrrrDs  rsŽ 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]éLcCsP|dd}g}tdt|ƒ|ƒD]$}||||…}| t |¡¡q d |¡S)Néér ó)ÚrangeÚlenÚappendÚbinasciiZ b2a_base64Újoin)ÚsÚ maxlinelengthZ maxbinsizeÚpiecesÚiÚchunkrrrÚ_encode_base64ps  r7cCs(t|tƒrt | d¡¡St |¡SdS)Núutf-8)rÚstrr0Z a2b_base64Úencode)r2rrrÚ_decode_base64ys r;z{(?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]&}||}|dur2qB| t|ƒ¡qtj|ŽS)N©ZyearZmonthZdayZhourZminuteÚsecond)Ú _dateParserÚmatchÚ groupdictr/rÚdatetime)r2ÚorderÚgdZlstÚkeyÚvalrrrÚ_date_from_string†srFcCs d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZr<)ÚdrrrÚ_date_to_string’s  þrHcCsZt |¡}|durtdƒ‚| dd¡}| dd¡}| dd¡}| dd¡}| d d ¡}|S) Nzz>)Ú_controlCharPatÚsearchrÚreplace)ÚtextÚmrrrÚ_escape˜s      rSc@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)*Ú _PlistParsercCsg|_d|_d|_||_dSr)ÚstackÚ current_keyÚrootÚ _dict_type©rÚ dict_typerrrr¥sz_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 ParseFilerW)rÚfileobjrrrÚparse«s     z_PlistParser.parsecCs tdƒ‚dS)Nz8XML entity declarations are not supported in plist files)r)rZ entity_nameZis_parameter_entityÚvalueÚbaseZ system_idZ public_idZ notation_namerrrr_´sz_PlistParser.handle_entity_declcCs*g|_t|d|dƒ}|dur&||ƒdS)NZbegin_)rÚgetattr)rÚelementÚattrsÚhandlerrrrr\ºsz!_PlistParser.handle_begin_elementcCs"t|d|dƒ}|dur|ƒdS)NZend_)rd)rrergrrrr]Àsz_PlistParser.handle_end_elementcCs|j |¡dSr)rr/rrrrr^Åsz_PlistParser.handle_datacCsŒ|jdurFt|jdtiƒƒs.td|jjƒ‚||jd|j<d|_nB|jsT||_n4t|jdtgƒƒsxtd|jjƒ‚|jd |¡dS)Néÿÿÿÿzunexpected element at line %d) rVrrUÚtyperr[ÚCurrentLineNumberrWr/©rrbrrrÚ add_objectÈs ÿÿz_PlistParser.add_objectcCsd |j¡}g|_|S)NÚ)r1rrrrrÚget_dataØs z_PlistParser.get_datacCs"| ¡}| |¡|j |¡dSr)rXrlrUr/)rrfrGrrrÚ begin_dictßs z_PlistParser.begin_dictcCs*|jrtd|j|jjfƒ‚|j ¡dS)Nz%missing value for key '%s' at line %d)rVrr[rjrUÚpoprrrrÚend_dictäs  ÿz_PlistParser.end_dictcCs8|jst|jdtiƒƒs*td|jjƒ‚| ¡|_dS)Nrhzunexpected key at line %d)rVrrUrirr[rjrnrrrrÚend_keyês ÿz_PlistParser.end_keycCsg}| |¡|j |¡dSr)rlrUr/)rrfÚarrrÚ begin_arrayðs z_PlistParser.begin_arraycCs|j ¡dSr)rUrprrrrÚ end_arrayõsz_PlistParser.end_arraycCs| d¡dS)NT©rlrrrrÚend_trueøsz_PlistParser.end_truecCs| d¡dS)NFrvrrrrÚ end_falseûsz_PlistParser.end_falsecCs@| ¡}| d¡s| d¡r.| t|dƒ¡n| t|ƒ¡dS)NÚ0xZ0Xé)rnÚ startswithrlr)rÚrawrrrÚ end_integerþsz_PlistParser.end_integercCs| t| ¡ƒ¡dSr)rlÚfloatrnrrrrÚend_realsz_PlistParser.end_realcCs| | ¡¡dSr)rlrnrrrrÚ end_stringsz_PlistParser.end_stringcCs| t| ¡ƒ¡dSr)rlr;rnrrrrÚend_data sz_PlistParser.end_datacCs| t| ¡ƒ¡dSr)rlrFrnrrrrÚend_datesz_PlistParser.end_dateN)rr'r(rrar_r\r]r^rlrnrorqrrrtrurwrxr}rr€rr‚rrrrrT¤s( rTc@s8eZdZddd„Zdd„Zdd„Zdd d „Zd d „Zd S)Ú_DumbXMLWriterr ú cCs||_g|_||_||_dSr)ÚfilerUÚ _indent_levelÚindent)rr…Ú indent_levelr‡rrrrsz_DumbXMLWriter.__init__cCs,|j |¡| d|¡|jd7_dS)Nz<%s>é)rUr/Úwritelnr†©rrerrrÚ begin_elements z_DumbXMLWriter.begin_elementcCs |jd8_| d|¡dS)Nr‰z)r†rŠr‹rrrÚ end_elementsz_DumbXMLWriter.end_elementNcCs8|dur&t|ƒ}| d|||f¡n| d|¡dS)Nz <%s>%sz<%s/>)rSrŠ)rrerbrrrÚsimple_element$sz_DumbXMLWriter.simple_elementcCsH|r8t|tƒr| d¡}|j |j|j¡|j |¡|j d¡dS)Nr8ó )rr9r:r…Úwriter†r‡)rÚlinerrrrŠ,s    z_DumbXMLWriter.writeln)r r„)N)rr'r(rrŒrrŽrŠrrrrrƒs   rƒc@s>eZdZddd„Zdd „Zd d „Zd d „Zdd„Zdd„ZdS)Ú _PlistWriterr ó r‰TFcCs.|r| t¡t ||||¡||_||_dSr)rÚ PLISTHEADERrƒrÚ _sort_keysÚ _skipkeys)rr…rˆr‡Z writeHeaderÚ sort_keysÚskipkeysrrrr9s  z_PlistWriter.__init__cCs"| d¡| |¡| d¡dS)Nzz)rŠÚ write_valuerkrrrrCs  z_PlistWriter.writecCst|tƒr| d|¡nü|dur,| d¡nè|dur@| d¡nÔt|tƒr~d|kr^dkrtnn| dd |¡nt|ƒ‚n–t|tƒrš| d t|ƒ¡nzt|tƒr°| |¡ndt|t t fƒrÊ|  |¡nJt|t j ƒrè| d t |ƒ¡n,t|ttfƒr| |¡ntd t|ƒƒ‚dS) NÚstringTÚtrueFZfalselûÿÿÿrZintegerz%dÚrealÚdatezunsupported type: %s)rr9rŽrÚ OverflowErrorr~rÚdictÚ write_dictÚbytesÚ bytearrayÚ write_bytesrArHÚtupleÚlistÚ write_arrayrrirkrrrr™Hs*           z_PlistWriter.write_valuecCsz| d¡|jd8_tddt|j dd¡|jƒƒ}t||ƒ d¡D]}|rJ| |¡qJ|jd7_|  d¡dS)Nrr‰rzr)r“s r) rŒr†Úmaxr.r‡rPr7ÚsplitrŠr)rrr3r‘rrrr£js þ 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 stringsrD) rŒr•ÚsortedÚitemsrr9r–rrŽr™r)rrGr«rDrbrrrr ws      z_PlistWriter.write_dictcCs<|r.| d¡|D]}| |¡q| d¡n | d¡dS)NÚarray)rŒr™rrŽ)rr¬rbrrrr¦‹s    z_PlistWriter.write_arrayN)r r“r‰TF) rr'r(rrr™r£r r¦rrrrr’8sþ " r’cCsŽd}|D]}| |¡rdSqtjdftjdftjdffD]N\}}| |¡sNq:|D]4}|| d¡ |¡}|dt|ƒ…|krRdSqRq:dS)N)s6xBBQQQ)Ú_fpÚseekÚosÚSEEK_ENDÚreadr.rÚstructÚunpackÚ _ref_sizeÚ _read_intsÚ_object_offsetsÚ _undefinedÚ_objectsÚ _read_objectÚOSErrorÚ IndexErrorÚerrorržr)rÚfpÚtrailerÚ offset_sizeÚ num_objectsÚ top_objectÚoffset_table_offsetrrrraÊs$   ý     ÿ z_BinaryPlistParser.parsecCsL|dkrH|j d¡dd@}d|>}dt|}t ||j |¡¡dS|S)Nér‰r r+rM)rÃrÇÚ_BINARY_FORMATrÈrÉ)rÚtokenLrRr2ÚfrrrÚ _get_sizeãs  z_BinaryPlistParser._get_sizecst|j ˆ|¡‰ˆtvr2t d|›tˆ›ˆ¡SˆrFtˆƒˆ|krLtƒ‚t‡‡fdd„tdˆ|ˆƒDƒƒSdS)NrMc3s&|]}t ˆ||ˆ…d¡VqdS)ÚbigN)rÚ from_bytes)Ú.0r5©rÚsizerrÚ ôsÿz0_BinaryPlistParser._read_ints..r ) rÃrÇrÚrÈrÉr.rr¤r-)rÚnrârrárrËísÿz_BinaryPlistParser._read_intscCs| ||j¡Sr)rËrÊ)rrärrrÚ _read_refs÷sz_BinaryPlistParser._read_refscs ˆj|}|tur|Sˆj|}ˆj |¡ˆj d¡d}|d@|d@}}|dkr^d}nž|dkrnd}nŽ|dkr~d}n~|dkrŽd }nn|d krºtjˆj d|>¡d |d kd }nB|dkrÞt  dˆj d¡¡d}n|dkrt  dˆj d¡¡d}nø|dkrDt  dˆj d¡¡d}t   ddd¡t j |d}n¸|dkr|ˆ  |¡}ˆj |¡}t |ƒ|krütƒ‚n€|dkr¾ˆ  |¡}ˆj |¡} t | ƒ|kr°tƒ‚|  d¡}n>|dkrˆ  |¡d}ˆj |¡} t | ƒ|krötƒ‚|  d¡}nú|dkr*tt ˆj d|¡d ¡ƒ}nÒ|dkrpˆ  |¡}ˆ |¡} g}|ˆj|<| ‡fdd„| Dƒ¡nŒ|d kröˆ  |¡}ˆ |¡} ˆ |¡} ˆ ¡}|ˆj|<z.t| | ƒD]\} } ˆ | ¡|ˆ | ¡<q¶Wntyòtƒ‚Yn0ntƒ‚|ˆj|<|S)!Nr‰r éðrÙrÀFé Tr,rzrÞr+©Úsignedé"z>fr*é#z>dé3éÑ)Zsecondsé@éPr­é`r¿úutf-16beé€é c3s|]}ˆ |¡VqdSr)rÏ)ràÚxrrrrãFr,z2_BinaryPlistParser._read_object..éÐ)rÎrÍrÌrÃrÄrÇrrßrÈrÉrAZ timedeltarÝr.rr²rråÚextendrXÚziprÏr)rÚrefÚresultÚoffsetÚtokenZtokenHrÛrÜr2rZobj_refsZkey_refsÚkÚorrrrÏús†   ÿ     ÿ                     z_BinaryPlistParser._read_objectN) rr'r(rrarÝrËrårÏrrrrrÁ¿s   rÁcCs,|dkr dS|dkrdS|dkr$dSdSdS)Nér‰ér¿ìr*rÀr)ÚcountrrrÚ_count_to_size_src@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú_BinaryPlistWritercCs||_||_||_dSr)rÃr•r–)rrÓr—r˜rrrrosz_BinaryPlistWriter.__init__c Csæg|_i|_i|_| |¡t|jƒ}dg||_t|ƒ|_t|j|_ |j   d¡|jD]}|  |¡qZ|  |¡}|j  ¡}t|ƒ}dt||}|j   tj|g|j¢RŽ¡d}|||j|||f} |j   tjdg| ¢RŽ¡dS)Nr óbplist00rMz >5xBBBQQQ)Ú_objlistÚ _objtableÚ _objidtableÚ_flattenr.rÌrrÊrÚÚ _ref_formatrÃrÚ _write_objectÚ _getrefnumÚtellrÈÚpack) rrbrÖÚobjr×rØrÕZ offset_formatZ sort_versionrÔrrrrts*           þz_BinaryPlistWriter.writec Cs"t|tƒr"t|ƒ|f|jvr4dSnt|ƒ|jvr4dSt|jƒ}|j |¡t|tƒrh||jt|ƒ|f<n||jt|ƒ<t|t ƒrøg}g}|  ¡}|j ržt |ƒ}|D]6\}}t|t ƒsÄ|jr¼q¢tdƒ‚| |¡| |¡q¢t ||¡D]}| |¡qæn&t|ttfƒr|D]}| |¡q dS)Nr©)rÚ_scalarsrirÚidrr.rr/rŸr«r•rªr9r–rÚ itertoolsÚchainrr¥r¤) rrbZrefnumÚkeysÚvaluesr«rüÚvrýrrrr¡s8         z_BinaryPlistWriter._flattencCs.t|tƒr|jt|ƒ|fS|jt|ƒSdSr)rrrrirrrkrrrr Ës 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>Brþz>BBBrzrÿz>BBHérz>BBLéz>BBQé)rÃrrÈr )rrûrârrrÚ _write_sizeÑsz_BinaryPlistWriter._write_sizec stˆ |¡}ˆj ¡ˆj|<|dur2ˆj d¡n>|durJˆj d¡n&|durbˆj d¡nt|tƒrj|dkr²zˆj t dd|¡¡Wntj y®t |ƒd‚Yn0n´|d krÒˆj t d d |¡¡n”|d kròˆj t d d|¡¡nt|dkrˆj t dd|¡¡nR|dkr6ˆj t dd|¡¡n0|dkr^ˆj d|j d ddd¡nt |ƒ‚nt|t ƒrˆj t dd|¡¡nàt|t j ƒrÎ|t   ddd¡ ¡}ˆj t dd|¡¡n¢t|ttfƒrþˆ dt|ƒ¡ˆj |¡nrt|tƒrlz| d¡}ˆ dt|ƒ¡Wn2tyZ| d ¡}ˆ d!t|ƒd"¡Yn0ˆj |¡nt|tƒr*|jdkrŽtd#ƒ‚n˜|jd kr²ˆj t d d$|¡¡nt|jd krÖˆj t d d%|¡¡nP|jdkrúˆj t dd&|¡¡n,|jdkrˆj t dd'|¡¡nt |ƒ‚nFt|ttfƒr†‡fd(d)„|Dƒ}t|ƒ}ˆ d*|¡ˆj tjd+ˆj|g|¢RŽ¡nêt|tƒrhgg}}ˆjr²t| ¡ƒ} n| ¡} | D]J\} } t| tƒsæˆj rÞq¾t!d,ƒ‚| "ˆ | ¡¡| "ˆ | ¡¡q¾t|ƒ}ˆ d-|¡ˆj tjd+ˆj|g|¢RŽ¡ˆj tjd+ˆj|g|¢RŽ¡nt!|ƒ‚dS).NóFóTr“r z>Bqrrþz>BBrzrÿz>BHrrz>BLrlz>BQrórÞrèz>Bdrërír‰rìrîr­rïrñrðr¿rròééƒé‡csg|]}ˆ |¡‘qSr)r )ràrýrrrÚ $r,z4_BinaryPlistWriter._write_object..rórMr©rõ)#r rÃr rÌrrrrÈr rÒržÚto_bytesr~rAZ total_secondsr¡r¢rr.r9r:ÚUnicodeEncodeErrorrrrr¥r¤r rŸr•rªr«r–rr/) rrbrørÜÚtZrefsr2ZkeyRefsZvalRefsZ rootItemsrürrrrr ás–                   &     $&z _BinaryPlistWriter._write_objectN) rr'r(rrrr rr rrrrrns -*rcCs|dd…dkS)NrÀrr)r³rrrÚ_is_fmt_binaryBsr$)Údetectr[Úwriter©ÚfmtrZcCsj|durJ| d¡}| d¡t ¡D]}|d|ƒr$|d}qVq$tƒ‚n t|d}||d}| |¡S)NrÂr r%r[)rZ)rÇrÄÚ_FORMATSrrra)rÓr(rZr³ÚinfoÚPÚprrrrXs      rcCst|ƒ}t|||dS)Nr')r r)rbr(rZrÓrrrrnsrTF)r(r—r˜cCs:|tvrtd|fƒ‚t|d|||d}| |¡dS)NzUnsupported format: %rr&)r—r˜)r)rr)rbrÓr(r—r˜r&rrrrvsr©r(r˜r—cCs tƒ}t|||||d| ¡S)Nr-)r rÚgetvalue)rbr(r˜r—rÓrrrrsr)r))8Ú__all__r0r®rAÚenumÚior rrÅÚrerÈZxml.parsers.expatr ÚEnumrr ÚglobalsÚupdateÚ __members__rr”ÚcompilerNr7r;ÚASCIIr>rFrHrSrTrƒr’r¸rrrÚÚobjectrÍrÁrr9rr~r¡rrr$rrŸrr)rrrrrrrrÚ0sh  !ÿ    n&^!! U ýýú