ReddlZddlmZddlZddlZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZ ddlZn #e$rdZYnwxYwddlZddlZddlZddlZddlZ ddlZn#e$rddlZYnwxYwddlZddlmZddlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0e j1e2Z3e j4dZ5e j4dZ6e j4d Z7e j4d Z8e j4d Z9e j4d Z:e j4d Z;e j4dZdZ?dZ@dZAdqdZBdZCdZDdZEejFdZGejFdZHejFdrdZIGddeJZKdZLGdd eJZMd!ZNGd"d#eJZOe j4d$e jPZQd%ZRdsd&ZSd'ZTd(ZUd)ZVd*ZWd+ZXe j4d,e jYZZe j4d-Z[dsd.Z\e j4d/Z]d0Z^d1Z_d2Z`d3Zad4Zbd5ZcGd6d7eJZdGd8d9eJZeGd:d;eJZfdZhd?Zid@ZjGdAdBeJZke j4dCZle j4dDZme j4dEZndFZdGZoer:ddHlmpZqmrZrmsZsGdIdJe$jtZtGdKdLeqZpGdMdNepe'ZuejvddOZwewdPkr(GdQdRe$jxZxerGdSdTe$jyZyGdUdVe%jzZzerGdWdXe%j{Z{GdYdZe%j|Z|d[Z}Gd\d]eJZ~Gd^d_e~ZGd`dae~ZGdbdce(ZGdddeeJZdfZGdgdheJZdiZdjZdkZdldmdndoZdpZdS)uN)deque)iglob)DistlibException) string_types text_typeshutil raw_inputStringIOcache_from_sourceurlopenurljoinhttplib xmlrpclib splittype HTTPHandlerBaseConfigurator valid_ident Container configparserURLErrorZipFilefsdecodeunquoteurlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z ^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)cFdfdfdfd|S)ae Parse a marker string and return a dictionary containing a marker expression. The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in the expression grammar, or strings. A string contained in quotes is to be interpreted as a literal string, and a string not contained in quotes is a variable (such as os_name). ct|}|r8|d}||d}ns|st d|d}|dvrt d|zd|d}|dd}|g}|r|d|krn|d|kr |||dd}nwt|}|st d|z||d||d}|d|}t d|z||d|}|dd }||fS) Nrzunexpected end of inputz'"zinvalid expression: %srzerror in string literal: %szunterminated string: %s) IDENTIFIERmatchgroupsend SyntaxErrorreplaceappend STRING_CHUNKjoinlstrip) remainingmresultqoqpartsss /builddir/build/BUILDROOT/alt-python311-pip-21.3.1-3.el8.x86_64/opt/alt/python311/lib/python3.11/site-packages/pip/_vendor/distlib/util.py marker_varz parse_marker..marker_varAs   Y ' '  /XXZZ]F!!%%''((+II /788 8! A~~!":Y"FGGGq"%%B!!"" ICE AQ<1$$q\R''LL$$$ )!"" II$**955AU)*G)*STTTLLA/// )!%%''(( 3I AGGENN!";a"?@@@ LLOOOWWU^^F!!"" ,,..Iy  c|ro|ddkrc|dd\}}|ddkrtd|z|dd}n{|\}}|rit|}|snL|d}||d}|\}}|||d}|i|}||fS)Nr(r)unterminated parenthesis: %soplhsrhs)r(r# MARKER_OPr r!r")r)r+r9r*r8r:markerr1s r0 marker_exprz!parse_marker..marker_expres  1,, &y}';';'='= > > FI|s""!"@9"LMMM!!"" ,,..II'Z 22NC 9OOI..XXZZ]%aeegghh/ !+I!6!6YC88 9Fy  r2c|\}}|rOt|}|sn2||d}|\}}d||d}|O||fS)Nandr7)ANDr r")r)r9r*r:r=s r0 marker_andz parse_marker..marker_andxs$Y//Y 8 )$$A !!%%''((+I([33NCs377C  8I~r2c|\}}|rOt|}|sn2||d}|\}}d||d}|O||fS)Norr7)ORr r")r)r9r*r:rAs r0r<zparse_marker..markers#I..Y 7##A !!%%''((+I'Z 22NCc#66C  7I~r2) marker_stringr<rAr=r1s @@@@r0 parse_markerrG8sx"!"!"!H!!!!!!&           6-  r2c|}|r|drdSt|}|st d|z|d}||d}dx}x}x}}|r"|ddkr|dd}|dkrt d|z|d|} ||dzd}g}| rt| }|st d | z| |d| |d} | sn<| dd krt d | z| dd} | |sd}|r|dd kr|dd}t|}|st d |z|d}t|} | j r| j st d|z||d}n.d} |ddkr| |\}}n|dd}|dkrt d|z|d|} ||dzd}t| r| | \}} nt| }|st d| z|d} | |d} | rt d| zd| fg}|rL|ddkrt d|z|dd}t!|\}}|r|ddkrt d|z|s|}n$|ddd|D}t%||||||S)z Parse a requirement passed in as a string. Return a Container whose attributes contain the various parts of the requirement. #Nzname expected: %sr[]rzunterminated extra: %szmalformed extra: %s,zcomma expected in extras: %s@zinvalid URI: %szInvalid URL: %sctt|}d}|rg} |d}||d}t|}|st d|z|d}|||f||d}|r |ddkrnO|dd}|sn0t|}|st d|z|sd}||fS)z| Return a list of operator, version tuples if any are specified, else None. NTrzinvalid version: %srLrinvalid constraint: %s) COMPARE_OPr r!r"VERSION_IDENTIFIERr#r%r() ver_remainingr*versionsr8vs r0 get_versionsz'parse_requirement..get_versionssT $$]33(!HXXXZZ](5aeegghh(? .44]CC U"-.Cm.S"T"TTHHJJqM Q000(5aeegghh(? ," a0@C0G0G!(5abb(9(@(@(B(B  -"!&,,];; X"-.F.V"W"WW%X&$(#'..r2r4r5r6rOz~=;zinvalid requirement: %szunexpected trailing data: %s , cg|]}d|zS)z%s %srE).0cons r0 z%parse_requirement.. s,O,O,OsWs],O,O,Or2)nameextras constraintsr<url requirement)strip startswithrr r#r!r"findr(r% NON_SPACErschemenetlocrPrQrGr'r)reqr)r*distnamer^ mark_exprrSuriir/trU_rTrss r0parse_requirementrps  I  ,,S11t##A ;- 9:::xxzz!}H!%%''((#I*..F.Y.CYq\S(( NN3 " " q556BCC C acNa!eff%,,..    ##A =!"7!";<<< MM!((**Q- ( ( (!%%''(( A ts{{!"@1"DEEE!"" A  FG+ Q<3  !!"" ,,..I **A A!"3i"?@@@((**Q-C A H ; ;!"3c"9:::!!%%''((+2244II / / /@|s""&2l9&=&=#))NN3**q55%&Dy&PQQQacN%a!eff-4466 ##A&& +".,q//KHaa*0033AH)*BQ*FGGG 1 A!%%''(( **,,AH)*BQ*FGGG!%q {H7 Q<3  7)CDD DabbM((** +I66 9FYq\S((89DEEE R  $)),O,Oh,O,O,O"P"P"P Q (6x%3B @ @ @@r2cd}i}|D]\}}}tj||}t|D]}tj||} t| D]v} ||| } ||| d'||| } |tjjdd} | dz| z|| <w|S)z%Find destinations for resources filesc|tjjd}|tjjd}||sJ|t |ddSN/)r$ospathseprclenr()rootrvs r0 get_rel_pathz)get_resources_dests..get_rel_pathsk||BGK--||BGK--t$$$$$CIIJJ&&s+++r2Nrt)rurvr'rpopr$rwrstrip)resources_rootrulesrz destinationsbasesuffixdestprefixabs_baseabs_globabs_path resource_filerel_pathrel_dests r0get_resources_destsrs,,,L# L Lfdnd33f L LHw||Hf55H!(OO L L , ^X F F < $$]D9999+|Hh??H#||BGK==DDSIIH2:S.82KL// L L r2cttdrd}n.tjttdtjk}|S)N real_prefixT base_prefix)hasattrsysrgetattrr+s r0in_venvr(s=sM""GwsM3:FFF Mr2cftj}t|tst |}|SN)r executable isinstancerrrs r0get_executabler2s/^F fi ( ("&!! Mr2c|} t|}|}|s|r|}|r)|d}||vrn |rd|||fz}C|S)NTrz %c: %s %s)r lower)prompt allowed_chars error_promptdefaultpr/cs r0proceedrDs|A = aLL  W A  =! AM!! = A|V#<< = Hr2ct|tr|}i}|D]}||vr ||||<|Sr)rrsplit)dkeysr+keys r0extract_by_keyrTsQ$ %%zz|| F!! !88C&F3K Mr2ctjddkrtjd|}|}t |} t j|}|ddd}|D]>\}}|D]$\}}|d|}t|} | J| ||<%?|S#t$r| ddYnwxYwd} tj } | | |nX#tj$rF|t!j|}t |}| | |YnwxYwi}| D]C} ix|| <}| | D]$\} }| d|}t|} | J| || <%D|S) Nrutf-8 extensionszpython.exportsexports = c~t|dr||dS||dS)N read_file)rrreadfp)cpstreams r0 read_streamz!read_exports..read_streamqsD 2{ # #  LL IIf     r2)r version_infocodecs getreaderreadr jsonloaditemsget_export_entry Exceptionseekr ConfigParserMissingSectionHeaderErrorclosetextwrapdedentsections)rdatajdatar+groupentrieskrTr/entryrrrr]values r0 read_exportsr]s: a*!'**622 ;;==D d^^F  &!!|$%56yA$llnn # #NE7  # #1!"AA&(++((("  #   Aq  " $ $B  B  1    t$$$ B  F{{}}"" ""s g88C== " "KD%!TT55)A$Q''E$$$!GDMM  " Ms&A>'**?+g5CCW^^G,,?RW^^G5L5L?4w>C F 'D!DEEE OFG , , , w'''''r2Nctj|rJ|tj|t d|||jsn|t|d}ntj|d|} tj ||| n#| wxYw| |dS)NzCopying stream %s to %swbwencoding)rurvisdirrrrrropenrr copyfileobjrr )rinstreamrr& outstreams r0 copy_streamzFileOperator.copy_streams7==))))) 00111 -xAAA| " $// "KxHHH  ""8Y777!!!! !!!! w'''''s "C C"c|tj||jsptj|rtj|t|d5}||dddn #1swxYwY| |dS)Nr#) rrurvrrrrr(rr )rrvrfs r0write_binary_filezFileOperator.write_binary_file's --...| w~~d##  $dD!! Q                 t$$$$$s=BB#&B#cX||||dSr)r/encode)rrvrr&s r0write_text_filezFileOperator.write_text_file0s* tT[[%:%:;;;;;r2c^tjdks tjdkrtjdkrz|D]y}|jrtd|%tj|j|z|z}td||tj||vdSdSdS)Nposixjavazchanging mode of %szchanging mode of %s to %o) rur]_namerrrrst_modechmod)rbitsmaskfilesr.modes r0set_modezFileOperator.set_mode3s 7g  "'V"3"3G8K8K & &<&KK 5q9999GAJJ.5=DKK ;QEEEHQ%%%%#4"38K8K & &r2c0|dd|S)Nimi)r=)r/r.s r0zFileOperator.?sqzz%'C'Cr2ctj|}||jvrtj|s|j|tj|\}}||t d|z|j stj ||j r |j |dSdSdSdS)Nz Creating %s)rurvrrrr rrrrrmkdirrr)rrvrr.s r0rzFileOperator.ensure_dirAswt$$ t| # #BGNN4,@,@ # L  T " " "7==&&DAq OOA    KK , - - -< { ,!%%d+++++ $ # # # , ,r2ct|| }td|||js|s|||r3|sd}n.||sJ|t |d}i}|r)ttdrtj j |d<tj |||dfi|| ||S)NzByte-compiling %s to %sPycInvalidationModeinvalidation_modeT) r rrrrrcrxr py_compilerC CHECKED_HASHcompiler ) rrvoptimizeforcerhashed_invalidationdpathdiagpathcompile_kwargss r0 byte_compilezFileOperator.byte_compileMs!$H 55 -tU;;;| N 2 4// 22#HH??622222#CKKLL1HN" bwz;P'Q'Q b6@6T6a23  tUHd M Mn M M M u%%% r2ctj|r+tj|rtj|sft d||jstj ||j r%||j vr|j |dSdSdStj|rd}nd}t d|||jstj ||j r'||j vr |j |dSdSdSdS)NzRemoving directory tree at %slinkfilezRemoving %s %s)rurvrr'rrdebugrr rrrrr)rrvr/s r0ensure_removedzFileOperator.ensure_removed^sX 7>>$   8w}}T"" 827>>$+?+? 8 >$''AAA -q$777|$IdOOO;8t111*11$77777% 8 8 8811r2cd}|sitj|r tj|tj}n*tj|}||krn|}|i|Sr)rurvraccessW_OKr)rrvr+parents r0 is_writablezFileOperator.is_writablessp w~~d## 411W__T**F~~D  r2c\|jsJ|j|jf}||S)zV Commit recorded changes, turn off recording, return changes. )rrrr)rr+s r0commitzFileOperator.commits9 {#T%66  r2c|jst|jD]5}tj|rtj|6t|jd}|D]o}tj |}|rC|dgksJtj ||d}tj |tj |p| dS)NT)reverse __pycache__r) rlistrrurvrrsortedrlistdirr'rmdirr)rr.dirsrflistsds r0rollbackzFileOperator.rollbacks| $,-- ! !7>>!$$!IaLLL$+T:::D   1 ! ]O3333aq22BHRLLL  r2FTr)FFNF)rrrrrr rr!r,r/r2r=set_executable_moderrNrSrXrZrerEr2r0rrs """ )))CCC(((((" ( ( ( (%%%<<< & & &DC , , ,"888*   r2rc |tjvrtj|}nt|}||}nM|d}t ||d}|D]}t ||}|S)N.r)rmodules __import__rrr{) module_name dotted_pathmodr+r.rs r0resolverpsck!!k+&%%!!#&&eiill++ ( (AVQ''FF Mr2cDeZdZdZedZdZdZej Z dS) ExportEntryc>||_||_||_||_dSrr]rrr)rr]rrrs r0rzExportEntry.__init__s"    r2c6t|j|jSr)rprrr s r0rzExportEntry.valuest{DK000r2c Hd|jd|jd|jd|jd S)Nz rtr s r0__repr__zExportEntry.__repr__s204 4;;;04 TZZZI Ir2ct|tsd}n@|j|jko/|j|jko|j|jko|j|jk}|Sr)rrrr]rrr)rotherr+s r0__eq__zExportEntry.__eq__sh%-- 1FFi5:-0kU\10kU\10jEK/  r2N) rrrrrrrxr{r__hash__rEr2r0rrrrsb 11_1IIIHHHr2rrz(?P(\w|[-.+])+) \s*=\s*(?P(\w+)([:\.]\w+)*) \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? ct|}|sd}d|vsd|vrtd|zn|}|d}|d}|d}|dkr|d}}n0|dkrtd|z|d\}}|d } | d|vsd|vrtd|zg} nd | d D} t |||| }|S) NrJrKzInvalid specification '%s'r]callablerrrrc6g|]}|SrErb)rZr.s r0r\z$get_export_entry..s 9991QWWYY999r2rL)ENTRY_REsearchr groupdictcountrrr) specificationr*r+rr]rvcolonsrrrs r0rrsX &&A : -  3-#7#7"$*,9$:;; ;$8 KKMMy}C Q;;!4FFF{{&(.0=(>???!ZZ__NFF'  =m##sm';';&(.0=(>???EE99 C(8(8999ET66599 Mr2c|d}tjdkr.dtjvr tjd}ntjd}tj|r=tj|tj}|st d|nG tj |d}n/#t$r"t d |d d }YnwxYw|s.tj}t d |tj||S) a Return the default base location for distlib caches. If the directory does not exist, it is created. Use the suffix provided for the base directory, and default to '.distlib' if it isn't provided. On Windows, if LOCALAPPDATA is defined in the environment, then it is assumed to be a directory, and will be the parent directory of the result. On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home directory - using os.expanduser('~') - will be the parent directory of the result. The result is just the directory '.distlib' in the parent directory as determined above, or with the name specified with ``suffix``. Nz.distlibnt LOCALAPPDATAz $localappdata~z(Directory exists but is not writable: %sTzUnable to create %s)exc_infoFz#Default location unusable, using %s)rur]environrv expandvars expanduserr'rUrVrwarningmakedirsOSErrorrrr')rr+usables r0get_cache_basers:~ w$>RZ77##O44##C(( w}}V 627++ O NNEv N N N  K   FF    NN0&4N H H HFFF  F!##sV F A#1!\** F E  === Mr2z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z -py(\d\.?\d?)czd}d}t|dd}t|}|r1|d}|d|}|r{t |t |dzkrXtjtj |dz|}|r,| }|d|||dzd|f}|Gt|}|r+|d|d|f}|S)zw Extract name, version, python version from a filename (no extension) Return name, version, pyver or None NrW-rz\br) rr$PYTHON_VERSIONrrstartrxrer escaper"PROJECT_NAME_AND_VERSION)filename project_namer+pyverr*ns r0split_filenamerMs+ F Ex  ((c22Hh''A( JQWWYYJ';H L(9(9A(=== HRY|,,u4h ? ?  ;Abqb\8AEFF#3U:F ~ $ * *8 4 4  3WWQZZU2F Mr2z-(?P[\w .-]+)\s*\(\s*(?P[^\s)]+)\)$ct|}|std|z|}|d|dfS)z A utility method used to get name and version from a string. From e.g. a Provides-Dist value. :param p: A value in a form 'foo (1.0)' :return: The name and version as a tuple. z$Ill-formed name/version string: '%s'r]ver)NAME_VERSION_REr rrrbr)rr*rs r0parse_name_and_versionrisj a  A MG!KLLL A V9??   " " $ $ah ..r2ct}t|pg}t|pg}d|vr|d||z}|D]}|dkr|||drE|dd}||vrtd|z||vr||x||vrtd|z|||S)N*rrzundeclared extra: %s)rrr rcrr) requested availabler+runwanteds r0 get_extrasrxs UUFIO$$IIO$$I i)    88 JJqMMMM \\#   uHy((5@AAA6!! h''' !!59::: JJqMMMM Mr2ci} t|}|}|d}|dstd|n1t jd|}tj |}n3#t$r&}t d||Yd}~nd}~wwxYw|S)Nz Content-Typezapplication/jsonz(Unexpected response for JSON request: %srz&Failed to get external data for %s: %s) r rgetrcrrRrrrrr exception)r`r+respheadersctreaderes r0_get_external_datars FKs||))++ [[ ( (}}/00 ' LLCR H H H H.V%g..t44FYv&&F KKKA3JJJJJJJJK MsBB C)C  Cz'https://www.red-dove.com/pypi/projects/c|dd|d}tt|}t|}|S)Nrrtz /project.jsonupperr_external_data_base_urlr)r]r`r+s r0get_project_datarsB"&q'--////444 8C )3 / /C  $ $F Mr2c|dd|d|d}tt|}t|S)Nrrtz /package-z.jsonr)r]versionr`s r0get_package_datarsD%)!W]]____dddGGG DC )3 / /C c " ""r2c$eZdZdZdZdZdZdS)Cachez A class implementing a cache for resources that need to live in the file system e.g. shared libraries. This class was moved from resources to here because it could be used by other modules, e.g. the wheel module. cdtj|stj|tj|jdzdkrt d|tjtj ||_ dS)zu Initialise an instance. :param base: The base directory where the cache should be located. ?rzDirectory '%s' is not privateN) rurvr'rrr7rrrnormpathr)rrs r0rzCache.__init__sw}}T""  K    GDMM !D (Q . . NN>"%%&););&IbMMMMW]]2&&&M"%%% ' ' '""2&&&&& 'sBC  C-,C-N)rrr__doc__rrrrEr2r0rrsK < < <))) r2rc2eZdZdZdZd dZdZdZdZdS) EventMixinz1 A very simple publish/subscribe system. ci|_dSr) _subscribersr s r0rzEventMixin.__init__sr2Tc|j}||vrt|g||<dS||}|r||dS||dS)a` Add a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be added (and called when the event is published). :param append: Whether to append or prepend the subscriber to an existing subscriber list for the event. N)rrr% appendleft)revent subscriberr%subssqs r0r zEventMixin.addso     --DKKKeB * *%%%%% j)))))r2cv|j}||vrtd|z|||dS)z Remove a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be removed. zNo subscribers: %rN)rrr)rrrrs r0rzEventMixin.removesI    1E9:: : U :&&&&&r2cRt|j|dS)z Return an iterator for the subscribers for an event. :param event: The event to return subscribers for. rE)iterrr)rrs r0get_subscriberszEventMixin.get_subscriberss% D%))%44555r2cg}||D]Q} ||g|Ri|}n,#t$rtdd}YnwxYw||Rtd|||||S)a^ Publish a event and return a list of values returned by its subscribers. :param event: The event to publish. :param args: The positional arguments to pass to the event's subscribers. :param kwargs: The keyword arguments to pass to the event's subscribers. z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)rrrrr%rR)rrargskwargsr+rrs r0publishzEventMixin.publish s..u55 ! !J " 5:4:::6::     !EFFF  MM%  FD&& 2 2 2 s (&AANrg) rrrrrr rrrrEr2r0rrsn****( ' ' '666r2rcfeZdZdZdZd dZdZdZdZdZ e d Z e d Z d S) SequencercHi|_i|_t|_dSr)_preds_succsr_nodesr s r0rzSequencer.__init__(s  ee r2c:|j|dSr)rr )rnodes r0add_nodezSequencer.add_node-s r2Fc0||jvr|j||rt|j|dD]}|||t|j|dD]}|||t |jD]\}}|s|j|=t |jD]\}}|s|j|=dSdS)NrE)rrrrrrr^r)rredgesrr/rrTs r0 remove_nodezSequencer.remove_node0s3 4;   K  t $ $ $  'r2233 % % At$$$$r2233 % % D!$$$$T[..0011 ' '1' AT[..0011 ' '1' A ' ' ' 'r2c||ksJ|j|t||j|t|dSr)r setdefaultrr r)rpredsuccs r0r z Sequencer.add@sit|||| tSUU++//555 tSUU++//55555r2c(||ksJ |j|}|j|}n #t$rtd|zwxYw ||||dS#t$rt|d|wxYw)Nz%r not a successor of anythingz not a successor of )rrKeyErrorrr)rrrpredssuccss r0rzSequencer.removeEst|||| FK%EK%EE F F F=DEE E F H LL    LL      H H H444FGG G Hs%A*A22Bc8||jvp||jvp||jvSr)rrr)rsteps r0is_stepzSequencer.is_stepRs. #$tt{':$ # %r2c ||std|zg}g}t}|||r|d}||vr1||kr*||||nZ|||||j|d}| ||t|S)Nz Unknown: %rrrE) rrrr%r{rr rrextendreversed)rfinalr+todoseenrrs r0 get_stepszSequencer.get_stepsVs||E"" 4]U233 3uu E #88A;;Dt|| 5==MM$'''MM$''' d### b11 E""" # r2cvdggiig|jfdD]}|vr |S)Nrc<d|<d|<dxxdz cc< | |}n#t$rg}YnwxYw|D]T}|vr+ |t|||<1| vrt|||<U||krZg} }||||krn1t |} |dSdS)Nrr)r%rminr{tuple) r successors successorconnected_component componentgraphindex index_counterlowlinksr+stack strongconnects r0rz3Sequencer.strong_connections..strongconnectzsx'*E$K*1-HTN !    !    LL    "4[      ' J J H,,!M),,,%($8K%L%LHTNN%''&)$i8H%I%IHTN~t,,&(#0 % I'..y999 D((%0""566  i(((((-,sA AA)r) rrrrrrr+rrs @@@@@@@r0strong_connectionszSequencer.strong_connectionsos   ) ) ) ) ) ) ) ) ) ) )D $ $D8## d### r2c dg}|jD]0}|j|}|D]}|d|d|d1|jD]}|d|z|dd|S)Nz digraph G {z z -> rVz %s;} )rr%rr')rr+rrrrs r0dotz Sequencer.dotsK < .check_paths$ ** (;;w''D GOOBGLL488 9 9||H%% A4BF):):;a?@@ @*;):r2)r"r%zip)rr#tgzzr:gz)r r$tbzzr:bz2r!tarrzUnknown format for %rrrr)rurvrrxrrrnamelisttarfiler(getnamesrr getmembersrr]rr( extractallr) archive_filenamer)formatrr+archiver<namesr]tarinfor*s ` @r0 unarchiver:sWAAAAAAwx((H x==DG ~  $ $%5 6 6 IFF  & &': ; ; IFDD  & &'; < < IFDD  & &v . . IFDD47GGHH H U??.44G %((**!%%DJt$$$$l#3T::G %((**!%%DJt$$$$ U??s/2Q66 #--// @ @!', ::@#*<#6#6w#?#?GL8$$$   MMOOOOO  7  MMOOOO s 4C9GG ctj}t|}t|d5}t j|D]k\}}}|D]b}tj||}||d} tj| |} ||| cl dddn #1swxYwY|S)z*zip a directory tree into a BytesIO objectr$N) ioBytesIOrxrruwalkrvr'r) directoryr+dlenzfryrbr;r]fullrelrs r0zip_dirrDs Z\\F y>>D   %!#!3!3 % % D$ % %w||D$//455kw||C..t$$$$  % %%%%%%%%%%%%%%%% MsBCCC)rKMGTPceZdZdZddZdZdZdZdZe d Z e d Z d Z e d Z e d ZdS)ProgressUNKNOWNrdcn|||ksJ|x|_|_||_d|_d|_d|_dS)NrF)r curmaxstartedelapseddone)rminvalmaxvals r0rzProgress.__init__sE~6!1!1!1!1$$48   r2c|j|ksJ|j ||jksJ||_tj}|j ||_dS||jz |_dSr)r rPrOtimerQrR)rcurvalnows r0updatezProgress.update sfx6!!!!x6TX#5#5#5#5ikk < DLLL-DLLLr2cP|dksJ||j|zdSNr)rZrO)rincrs r0 incrementzProgress.increments-qyyyy DHtO$$$$$r2c:||j|Sr)rZr r s r0rzProgress.starts DH r2cV|j||jd|_dSNT)rPrZrSr s r0stopz Progress.stops) 8  KK ! ! ! r2c,|j|jn|jSr)rPunknownr s r0maximumzProgress.maximum!s#x/t||TX=r2c||jrd}n1|jd}n'd|j|jz z|j|jz z }d|z}|S)Nz100 %z ?? %gY@z%3d %%)rSrPrOr )rr+rTs r0 percentagezProgress.percentage%sQ 9 "FF X FFDH,-DH1DEA\F r2c|dkr|j|j|jkrd}n'tjdtj|}|S)Nrz??:??:??z%H:%M:%S)rPrOr rWstrftimegmtime)rdurationr+s r0format_durationzProgress.format_duration0sI MMtx/48tx3G3GFF]:t{8/D/DEEF r2c"|jr d}|j}ned}|jd}nY|jdks|j|jkrd}n;t |j|jz }||j|jz z}|dz |jz}|d||S)NDonezETA rrrz: )rSrRrPrOr floatrl)rrrms r0ETAz Progress.ETA9s 9 +F AAFx""tx48';';$(TX-..TX((Udl*!664#7#7#:#:#:;;r2c|jdkrd}n|j|jz |jz }tD]}|dkrn|dz}d||fzS)Nrgig@@z%d %sB/s)rRrOr UNITS)rr+units r0speedzProgress.speedLsc <1  FFh)T\9F  D}} f FFVTN**r2N)rrM)rrrrdrrZr^rrbrrergrlrprtrEr2r0rKrKsG...%%% >>X>X<<X<$ + +X + + +r2rKz \{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$ct|rd}t||zt|rd}t||zt |S)zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')_CHECK_RECURSIVE_GLOBrr_CHECK_MISMATCH_SET_iglob) path_globr s r0rrasj##I..*Ky)))!!),,*Fy))) )  r2c#Kt|d}t|dkrit|dks J||\}}}|dD].}td|||fD]}|V/dSd|vrt |D]}|VdS|dd\}}|dkrd}|dkrd}n*|d}|d }tj|D]Y\}}} tj |}ttj ||D]} | VZdS) NrrrLrz**rjrrt\) RICH_GLOBrrxrxr' std_iglobr(rur>rvr) ryrich_path_globrrritemrvradicaldirr;rs r0rxrxls__Y22N >Q>""a'''''',VIIcNN  Drwwf'=>>??       y !),,     (oodA66OFG||"}}"..--!....$&GFOO   c5w''-- dG!K++DNDMJJJ=>*-*;G'111GGGsIu55>48I01/G/???? } !2 "49#8#8#:#:DIFFFLL!4di@@@@@'I&&v'7888IOO%%%     s,A G::A I)rrrrrrrEr2r0rrs- $ $ $ $ $ r2rc"eZdZddZdZdZdS)rTcJtj|||_||_dSr)BaseHTTPSHandlerrrr)rrrs r0rzHTTPSHandler.__init__s(  %d + + +$DM ,D   r2c\t|i|}|jr|j|_|j|_|S)a This is called to create a connection instance. Normally you'd pass a connection class to do_open, but it doesn't actually check for a class, and just expects a callable. As long as we behave just as a constructor would have, we should be OK. If it ever changes so that we *must* pass a class, we'll create an UnsafeHTTPSConnection class which just sets check_domain to False in the class definition, and choose which one to pass to do_open. )rrr)rrrr+s r0 _conn_makerzHTTPSHandler._conn_makers9%d5f55F} 8"&-&*&7#Mr2c ||j|S#t$r3}dt|jvrt d|jzd}~wwxYw)Nzcertificate verify failedz*Unable to verify server certificate for %s)do_openrrstrreasonrr)rrhrs r0 https_openzHTTPSHandler.https_opensy ||D$4c:::   .#ah--??*,469h,?@@@  s A.AANrg)rrrrrrrEr2r0rrsF - - - -          r2rceZdZdZdS)HTTPSOnlyHandlerc&td|z)NzAUnexpected HTTP request on what should be a secure connection: %s)r)rrhs r0 http_openzHTTPSOnlyHandler.http_opens!,.1233 3r2N)rrrrrEr2r0rrs# 3 3 3 3 3r2rrceZdZddZdS)HTTPrNc Z|dkrd}||j||fi|dSr\_setup_connection_classrrrrs r0rz HTTP.__init__s@qyy KK..tTDDVDD E E E E Er2rNrrrrrEr2r0rrs. F F F F F Fr2rceZdZddZdS)HTTPSrNc Z|dkrd}||j||fi|dSr\rrs r0rzHTTPS.__init__s@199D 2D24HHHHIIIIIr2rrrEr2r0rrs. J J J J J Jr2rceZdZddZdZdS) TransportrcT||_tj||dSr)rrrrrr use_datetimes r0rzTransport.__init__s( $$T<88888r2c ||\}}}tdkrt||j}nG|jr||jdkr"||_|t j|f|_|jd}|S)Nr)rrr) get_host_info _ver_inforr _connection_extra_headersrHTTPConnection)rrhehx509r+s r0make_connectionzTransport.make_connections((.. 2t   !T\222FF# Ctt/?/B'B'B&(##')?)B)B#B %a(F r2NrrrrrrrEr2r0rrs79999     r2rceZdZddZdZdS) SafeTransportrcT||_tj||dSr)rrrrrs r0rzSafeTransport.__init__s("DL  # , ,T< @ @ @ @ @r2c||\}}}|si}|j|d<tdkrt|dfi|}nF|jr||jdkr!||_|t j|dfi|f|_|jd}|S)Nrrrr)rrrrrrrr)rrrrrr+s r0rzSafeTransport.make_connections ..t44MAr6  $ F9 F""tT44V44'O443CA3F+F+F*,D''+W-DQ.O.OGM.O.O(OD$)!,Mr2NrrrEr2r0rrs; A A A A     r2rceZdZdZdS) ServerProxyc &|ddx|_}|Yt|d}|dd}|dkrt}nt }|||x|d<}||_tjj ||fi|dS)Nrrrhttps)r transport) r{rrrrrrrrr)rrkrrrfrtclsrms r0rzServerProxy.__init__&s!'It!> >> r2c|SrrEr s r0__iter__zCSVReader.__iter__`rr2ct|j}tjddkrBt |D]2\}}t |t s|d||<3|SNrrr)nextrrrrrrr()rr+rlrs r0rzCSVReader.nextcsldk""  A  " "$V,, 5 54!$ 225 $ G 4 4F1I r2N)rrrrrr__next__rEr2r0rrTsB ? ? ?HHHr2rceZdZdZdZdS) CSVWriterc rt|d|_tj|jfi|j|_dS)Nr$)rrrwriterr)rrrs r0rzCSVWriter.__init__ns4C(( j>> >> r2ctjddkrHg}|D]A}t|tr|d}||B|}|j|dSr)rrrrr1r%rwriterow)rrowrrs r0rzCSVWriter.writerowrs~  A  " "A  dI..0;;w//DC S!!!!!r2N)rrrrrrEr2r0rrms2???"""""r2rc\eZdZeejZded<dfd ZdZdZdZ xZ S) Configurator inc_convertincNctt|||ptj|_dSr)superrrrurr)rconfigr __class__s r0rzConfigurator.__init__s7 lD!!**6222'BIKK r2c fd d}t|s|}dd}dd}|rt fd|D} fdD}t |}||i|}|r4|D]\}} t || |  |S)NcJt|ttfr%t|fd|D}n`t|tr6d|vr|}n1i}|D]}||||<n|}|S)Nc&g|] }|SrErE)rZrlconverts r0r\zBConfigurator.configure_custom..convert..s!!8!8!8''!**!8!8!8r2())rr^rtypedictconfigure_customr )or+rr rs r0r z.Configurator.configure_custom..converts!dE]++ ) a!8!8!8!8a!8!8!899At$$ )199!22155FFF22$+GAaDMMq 2aMr2r rjz[]rEc&g|] }|SrErE)rZrr s r0r\z1Configurator.configure_custom..s!333''!**333r2cTg|]$}t|||f%SrE)r)rZrrr s r0r\z1Configurator.configure_custom..s7KKKQKNNK!WWVAY''(KKKr2)r{r~rprrrsetattr) rrrpropsrrrr+rrTr s `` @r0rzConfigurator.configure_customs#       JJt  {{  QA 3%%zz$##  53333d33344DKKKKK&KKKeD#F##  /  / /1771::.... r2c|j|}t|tr#d|vr||x|j|<}|S)Nr )rrrr)rrr+s r0 __getitem__zConfigurator.__getitem__sMS! fd # # F(,(=(=f(E(E EDK v r2ctj|s%tj|j|}t j|dd5}tj|}dddn #1swxYwY|S)z*Default converter for the inc:// protocol.rrr%N) rurvisabsr'rrr(rr)rrr.r+s r0rzConfigurator.inc_convertsw}}U## 3GLLE22E [g 6 6 6 "!Yq\\F " " " " " " " " " " " " " " " sA==BBr) rrrrrvalue_convertersrrrr __classcell__)rs@r0rrst,=>>+U((((((> r2rc&eZdZdZddZdZdZdS)SubprocessMixinzC Mixin for running subprocesses and capturing their output FNc"||_||_dSr)verboseprogress)rrr s r0rzSubprocessMixin.__init__s   r2c~|j}|j} |}|sn| |||nr|s tjdn2tj|dtj|dS)z Read lines from a subprocess' output stream and either pass to a progress callable (if specified) or write progress information to sys.stderr. TNrjr) r rreadlinerstderrrr(flushr)rrrr rr/s r0rzSubprocessMixin.readers =, #!!A #G$$$$8J$$S))))J$$QXXg%6%6777   """ #  r2c 0tj|ftjtjd|}tj|j|jdf}|tj|j|jdf}|| | | |j | ddn&|j rtjd|S)N)stdoutr#r&)rrr#zdone.mainzdone. ) subprocessPopenPIPE threadingThreadrr&rr#waitr'r rrr)rcmdrrt1t2s r0 run_commandzSubprocessMixin.run_commands  S ?$.O ? ?7= ? ?  T[(7K L L L   T[(7K L L L       = $ MM'6 * * * * \ ( J  Y ' ' 'r2)FN)rrrrrrr1rEr2r0rrsP!!!!*r2rcRtjdd|S)z,Normalize a python package name a la PEP 503z[-_.]+r)rsubr)r]s r0normalize_namer4s$ 6(C & & , , . ..r2c*eZdZdZdZddZdZdZdS) PyPIRCFilezhttps://upload.pypi.org/legacy/pypiNc|=tjtjdd}||_||_dS)Nrz.pypirc)rurvr'rrr`)rrr`s r0rzPyPIRCFile.__init__s> :bg0055yAAB r2ci}tj|jr|jp|j}t j}||j| }d|vr| dd}d| dD}|gkr d|vrdg}n|D]}d|i}| |d|d<d|jfd |j fd fD]:\}} | ||r| ||||<5| ||<;|dkr||jdfvr |j|d<|d|kr|d|kri}nod |vrkd }| |dr| |d}n|j}| |d| |d |||j d }|S)N distutilsz index-serverscfg|].}|dk|/S)rr)rZservers r0r\z#PyPIRCFile.read.. s<555v%||~~33#LLNN333r2rr7r<r repositoryrealm)rNz server-loginr)rrr=r<r>)rurvrrr`DEFAULT_REPOSITORYrRawConfigParserrrrr DEFAULT_REALM has_option) rr+r=rr index_servers_serversr<rrs r0rzPyPIRCFile.readsJ 7>>$- ( (4 >))$*8"*(("*F!3-3ZZ -K-Kz*/;D > & 6: > >",$!/  r2ctj}|j}|||ds|d|dd||dd|t|d5}||ddddS#1swxYwYdS)Nr7rrr$) rr@rr has_sectionrrr(r)rrrrrr.s r0rZzPyPIRCFile.update9s-// ] B!!&)) '   v & & & 6:x000 6:x000 "c]] a LLOOO                  sB;;B?B?NN)rrrr?rArrrZrEr2r0r6r6sR:M 888t     r2r6cPt|jS)zG Read the PyPI access configuration as supported by distutils. )r`)r6r`rrs r0 _load_pypircrJEs# %) $ $ $ ) ) + ++r2c^t|j|jdSr)r6rZrrrIs r0 _store_pypircrLKs&LL77777r2ctjdkrrdtjvrdSdtjvrdSdtjvrdStjSdtjvrtjdStjd ksttd s tjStj\}}}}}| d d }| d d d d}|dddkr|d|S|dddkrQ|ddkrDd}dt|ddz |ddfz}ddd}|d|tj zz }n|dddkrddl m }|S|dd d!krMd!}tjd"tj}||}|r|}nI|dd d#kr;ddl} ddl} | | j|||\}}}|d|d|S)$aReturn a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. on Linux, the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. ramd64 win-amd64z(arm) win-arm32z(arm64)z win-arm64_PYTHON_HOST_PLATFORMr4unamertrrWrnrNlinuxsunosr5solarisz%d.%srr32bit64bit)ilz.%saix) aix_platformrcygwinz[\d.]+darwin)rur]rrrplatformrrrRr$intmaxsize _aix_supportr[rrGASCIIr r _osx_supportdistutils.sysconfigget_platform_osx sysconfigget_config_vars) osnamerreleasermachinebitnessr[rel_rer*rcr:s r0get_host_platformrmSs( w$ ck'')) ) ); ck'')) ) );  ))++ + +;|"*,,z122 w'W!5!5|13 -VT7GW\\^^ # #C , ,Fooc3''//S99G bqbzW"6677++ w   1:  FWQZ1!4gabbk BBG#*wGGG uws{33 3G u  ------|~~ x  Y11 LL ! !  ggiiG x  00000000#/#@#@(1(;(K(K(M(M(.$B$B  '' 22r2win32rOrP)x86x64armctjdkrtStjd}|t vrtSt |S)NrVSCMD_ARG_TGT_ARCH)rur]rmrr_TARGET_TO_PLAT)cross_compilation_targets r0 get_platformrvsQ w$ """!z~~.BCC66 """ 3 44r2rG)rrra)r collectionsr contextlibrglobrr}r<rloggingrurErrr ImportErrorr(rr1rrr+dummy_threadingrWrrcompatrrr r r r r rrrrrrrrrrrrrr getLoggerrrrGrrQrPr;rDr@rer&rGrprrrrrrrcontextmanagerrrrrrrrrprrVERBOSErrrrrrrrIrrrrrrrrrrrrrARCHIVE_EXTENSIONSr:rDrrrKr|rvrwrxrrrrrrrrrrrrrrrrrrrr4r6rJrLrmrtrvrEr2r0rsr    ######   JJJJ CCC ((((''''''( ((((((((((((((((((((((((((((((((((((((((((((((  8 $ $ RZ) * * RZ 344 RZ5 6 6 BJD E E RZ bj BJ{ # # rzEFF V!V!V!rz@z@z@z4$     ,,,^&   &&&&     f      6uuuuu6uuun   &8 2:: ' ' >&(&(&(&(R"   & & & &2:'89;??,--2"*9:: / / /2(D ### )))))F)))XCCCCCCCCPE!E!E!E!E!E!E!E!V.3333l   " $W+W+W+W+W+vW+W+W+z BJ~ & & " #?@@ bj!5666`3++++++++++)))))'1)))V'R33333<333  RaR  FFFFFw|FFF J J J J J JGM J J J #  /*<<<<<)'<<<,$$$     f   2 " " " " " " " "&44444#444n+++++f+++\///OOOOOOOOb,,, 888N3N3N3d   55555s!;AAA"" A.-A.